<?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>229681</bug_id>
          
          <creation_ts>2021-08-30 12:24:42 -0700</creation_ts>
          <short_desc>Implement the WebAssembly exception handling proposal</short_desc>
          <delta_ts>2021-10-25 14:31:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=231688</see_also>
          <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>
          <dependson>231688</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tadeu Zagallo">tzagallo</reporter>
          <assigned_to name="Tadeu Zagallo">tzagallo</assigned_to>
          <cc>annulen</cc>
    
    <cc>chi187</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jonlee</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1788614</commentid>
    <comment_count>0</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-08-30 12:24:42 -0700</bug_when>
    <thetext>https://github.com/WebAssembly/exception-handling/blob/master/proposals/exception-handling/Exceptions.md</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788615</commentid>
    <comment_count>1</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-08-30 12:25:25 -0700</bug_when>
    <thetext>&lt;rdar://81603387&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794072</commentid>
    <comment_count>2</comment_count>
      <attachid>438359</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-09-16 09:59:52 -0700</bug_when>
    <thetext>Created attachment 438359
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794073</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-09-16 10:01:43 -0700</bug_when>
    <thetext>This patch modifies one of the wasm.json files. Please ensure that any changes in one have been mirrored to the other. You can find the wasm.json files at &quot;Source/JavaScriptCore/wasm/wasm.json&quot; and &quot;JSTests/wasm/wasm.json&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800229</commentid>
    <comment_count>4</comment_count>
      <attachid>440106</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-04 14:46:11 -0700</bug_when>
    <thetext>Created attachment 440106
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800292</commentid>
    <comment_count>5</comment_count>
      <attachid>440106</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-10-04 16:38:56 -0700</bug_when>
    <thetext>Comment on attachment 440106
WIP

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

drive by comments

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        WIP Spec: https://github.com/WebAssembly/exception-handling

Please add a change log covering:

The new instructions
Why callee is on VM.
Air is missing
B3 uses Variables everywhere now.

&gt; Source/JavaScriptCore/llint/LLIntCommon.h:32
&gt; -#define LLINT_TRACING 0
&gt; +#define LLINT_TRACING 1

Revert.

&gt; Source/JavaScriptCore/llint/WebAssembly.asm:259
&gt; +    # TODO: is this correct? or do we need to store in the slow path

Should this TODO still exist? Why do we need this?

&gt; Source/JavaScriptCore/llint/WebAssembly.asm:2866
&gt; +    subp 8, t2
&gt; +    addp 8, t1

Seems like we could special case ARM64 here with the store-add/sub instructions. Maybe add a FIXME?

&gt; Source/JavaScriptCore/runtime/VM.h:1323
&gt; +#if ENABLE(WEBASSEMBLY)
&gt; +    Vector&lt;Wasm::Tag&gt; m_wasmTags;
&gt; +#endif

Why is this here? Aren&apos;t tags ref counted? I assume you meant to delete this.

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:3006
&gt; +auto AirIRGenerator::addTry(BlockSignature, Stack&amp; , ControlType&amp; , Stack&amp; ) -&gt; PartialResult

Can you add a link to a bug to either implement exceptions here or rip the Air generator out?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:275
&gt; +        Vector&lt;Value*&gt; phis;

Can you file a bug to compress this structure slightly. I think a lot of these could be union members.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:681
&gt; +            getInstance-&gt;effects.writesPinned = false;
&gt; +            getInstance-&gt;effects.readsPinned = true;
&gt; +            getInstance-&gt;resultConstraints = { ValueRep::reg(m_wasmContextInstanceGPR) };

Wait, why does this say that it only reads pinned when it actually only writes pinned?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:857
&gt; +            auto preciseAllocationCase = jit.branchTestPtr(CCallHelpers::NonZero, GPRInfo::regT0, CCallHelpers::TrustedImm32(PreciseAllocation::halfAlignment));

How do we get a mix of precise and non-precise callees for wasm? Is there inline data appended to the cell? If we don&apos;t know can you file a bug and put a FIXME here.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:897
&gt; +    m_currentBlock = m_topLevelBlock;
&gt; +    m_currentBlock-&gt;appendNew&lt;Value&gt;(m_proc, EntrySwitch, Origin());
&gt; +    for (BasicBlock* block : m_rootBlocks)
&gt; +        m_currentBlock-&gt;appendSuccessor(FrequentedBlock(block));

I thought B3 had a side entry mechanism? Is there a reason we&apos;re not using that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800391</commentid>
    <comment_count>6</comment_count>
      <attachid>440106</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-04 22:47:34 -0700</bug_when>
    <thetext>Comment on attachment 440106
WIP

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:9
&gt;&gt; +        WIP Spec: https://github.com/WebAssembly/exception-handling
&gt; 
&gt; Please add a change log covering:
&gt; 
&gt; The new instructions
&gt; Why callee is on VM.
&gt; Air is missing
&gt; B3 uses Variables everywhere now.

Yes, absolutely, I&apos;ll update the ChangeLog before the final patch.

&gt;&gt; Source/JavaScriptCore/llint/LLIntCommon.h:32
&gt;&gt; +#define LLINT_TRACING 1
&gt; 
&gt; Revert.

Oops

&gt;&gt; Source/JavaScriptCore/llint/WebAssembly.asm:259
&gt;&gt; +    # TODO: is this correct? or do we need to store in the slow path
&gt; 
&gt; Should this TODO still exist? Why do we need this?

The TODO should be gone. This is how we now where the thrown from when unwinding.

&gt;&gt; Source/JavaScriptCore/llint/WebAssembly.asm:2866
&gt;&gt; +    addp 8, t1
&gt; 
&gt; Seems like we could special case ARM64 here with the store-add/sub instructions. Maybe add a FIXME?

sure

&gt;&gt; Source/JavaScriptCore/runtime/VM.h:1323
&gt;&gt; +#endif
&gt; 
&gt; Why is this here? Aren&apos;t tags ref counted? I assume you meant to delete this.

deleted

&gt;&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:3006
&gt;&gt; +auto AirIRGenerator::addTry(BlockSignature, Stack&amp; , ControlType&amp; , Stack&amp; ) -&gt; PartialResult
&gt; 
&gt; Can you add a link to a bug to either implement exceptions here or rip the Air generator out?

Will do

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:275
&gt;&gt; +        Vector&lt;Value*&gt; phis;
&gt; 
&gt; Can you file a bug to compress this structure slightly. I think a lot of these could be union members.

I think the only things that could overlap are the special and all the exception specific ones, which one save one word. I&apos;ll file the bug.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:681
&gt;&gt; +            getInstance-&gt;resultConstraints = { ValueRep::reg(m_wasmContextInstanceGPR) };
&gt; 
&gt; Wait, why does this say that it only reads pinned when it actually only writes pinned?

That&apos;s a good point. I copied the code from the prologue and didn&apos;t realize.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:857
&gt;&gt; +            auto preciseAllocationCase = jit.branchTestPtr(CCallHelpers::NonZero, GPRInfo::regT0, CCallHelpers::TrustedImm32(PreciseAllocation::halfAlignment));
&gt; 
&gt; How do we get a mix of precise and non-precise callees for wasm? Is there inline data appended to the cell? If we don&apos;t know can you file a bug and put a FIXME here.

I&apos;m not actually sure, that&apos;s just how we do it everywhere else. I&apos;ll add the FIXME.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:897
&gt;&gt; +        m_currentBlock-&gt;appendSuccessor(FrequentedBlock(block));
&gt; 
&gt; I thought B3 had a side entry mechanism? Is there a reason we&apos;re not using that?

I&apos;m not sure what you are referring to. This is the only way I saw how to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800925</commentid>
    <comment_count>7</comment_count>
      <attachid>440322</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-05 19:22:18 -0700</bug_when>
    <thetext>Created attachment 440322
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800970</commentid>
    <comment_count>8</comment_count>
      <attachid>440337</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-05 23:49:40 -0700</bug_when>
    <thetext>Created attachment 440337
Patch

Fix build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801071</commentid>
    <comment_count>9</comment_count>
      <attachid>440368</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-06 08:07:29 -0700</bug_when>
    <thetext>Created attachment 440368
Patch

More build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801073</commentid>
    <comment_count>10</comment_count>
      <attachid>440370</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-06 08:13:19 -0700</bug_when>
    <thetext>Created attachment 440370
Patch

More build fixes (2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801097</commentid>
    <comment_count>11</comment_count>
      <attachid>440373</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-06 08:37:49 -0700</bug_when>
    <thetext>Created attachment 440373
Patch

More build fixes (3)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801196</commentid>
    <comment_count>12</comment_count>
      <attachid>440392</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-06 11:08:47 -0700</bug_when>
    <thetext>Created attachment 440392
Patch

Fix llint when fast TLS is disabled</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801287</commentid>
    <comment_count>13</comment_count>
      <attachid>440424</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-06 13:11:02 -0700</bug_when>
    <thetext>Created attachment 440424
Patch

Fix clobbered patchpoint arguments on throw and rethrow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801448</commentid>
    <comment_count>14</comment_count>
      <attachid>440424</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-06 17:36:57 -0700</bug_when>
    <thetext>Comment on attachment 440424
Patch

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

Quick comment about runtime.

&gt; Source/JavaScriptCore/wasm/WasmInstance.cpp:303
&gt; +void Instance::addTag(const Tag&amp; tag)

Let&apos;s take `Ref&lt;Tag&gt;&amp;&amp; tag` instead.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyException.h:34
&gt; +class JSWebAssemblyException : public JSDestructibleObject {

Put `final`.
And we should not use JSDestructibleObject anymore except for JSC shell testing classes etc.
Use JSNonFinalObject for Base. And define IsoSubspace with destructible CellType.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyException.h:36
&gt; +    using Base = JSDestructibleObject;

Use JSNonFinalObject.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyTag.h:36
&gt; +    using Base = JSNonFinalObject;

Need `static const bool needsDestruction = true`.
And need to define destroy function since this is destructible.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyExceptionConstructor.h:39
&gt; +    typedef InternalFunction Base;

Use `using` for newer code.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:405
&gt; +            UNUSED_VARIABLE(expectedSignatureIndex);

This is not necessary.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:411
&gt; +            RETURN_IF_EXCEPTION(scope, void());

addTag will never throw. So let&apos;s remove it.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:443
&gt; +        m_instance-&gt;instance().addTag(Wasm::Tag::create(Wasm::SignatureInformation::get(signatureIndex)).leakRef());

leakRef() looks not great. Let&apos;s just pass Ref&amp;&amp; and define addTag(Ref&amp;&amp;) function.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyTagConstructor.cpp:109
&gt; +JSWebAssemblyTag* WebAssemblyTagConstructor::createTag(JSGlobalObject* globalObject, CallFrame* callFrame, const Wasm::Tag&amp; tag)
&gt; +{
&gt; +    VM&amp; vm = globalObject-&gt;vm();
&gt; +    auto scope = DECLARE_THROW_SCOPE(vm);
&gt; +
&gt; +    JSObject* newTarget = asObject(callFrame-&gt;newTarget());
&gt; +    Structure* structure = JSC_GET_DERIVED_STRUCTURE(vm, webAssemblyTagStructure, newTarget, callFrame-&gt;jsCallee());
&gt; +    RETURN_IF_EXCEPTION(scope, nullptr);
&gt; +
&gt; +    RELEASE_AND_RETURN(scope, JSWebAssemblyTag::create(vm, globalObject, structure, tag));
&gt; +}

Let&apos;s remove this since nobody is using that.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyTagConstructor.h:44
&gt; +    typedef InternalFunction Base;

Use `using` for the new code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801470</commentid>
    <comment_count>15</comment_count>
      <attachid>440463</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-06 19:01:14 -0700</bug_when>
    <thetext>Created attachment 440463
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801471</commentid>
    <comment_count>16</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-06 19:03:06 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #14)
&gt; 
&gt; Quick comment about runtime.

Thanks Yusuke. I just uploaded a version of the patch with all the fixes you suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802119</commentid>
    <comment_count>17</comment_count>
      <attachid>440463</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-10-08 09:23:58 -0700</bug_when>
    <thetext>Comment on attachment 440463
Patch

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

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:94
&gt; +    unsigned m_callSiteIndex {s_invalidCallSiteIndex };

Style: add space after {

&gt; Source/JavaScriptCore/wasm/WasmTag.cpp:36
&gt; +}} // namespace JSC::Wasm

Style add space between }s

&gt; Source/JavaScriptCore/wasm/WasmTag.h:55
&gt; +    static uint32_t s_id;

This needs to be atomic.

&gt; Source/JavaScriptCore/wasm/generateWasmB3IRGeneratorInlinesHeader.py:197
&gt; -&quot;&quot;&quot; + generateB3Code(opcode, b3op) + &quot;&quot;&quot;;
&gt; +&quot;&quot;&quot; + generateB3Code(opcode, b3op) + &quot;&quot;&quot;

Why make this change?

&gt; Source/JavaScriptCore/wasm/wasm.json:45
&gt; +        &quot;Exception&quot;: { &quot;type&quot;: &quot;varuint7&quot;, &quot;value&quot;: 13, &quot;description&quot;: &quot;Exception declarations&quot; }

I think we should keep this consistent with the one in JSTests. I moved this line up so the builder had the proper expected section ordering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802148</commentid>
    <comment_count>18</comment_count>
      <attachid>440463</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-08 10:32:37 -0700</bug_when>
    <thetext>Comment on attachment 440463
Patch

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

Thanks, I&apos;ll update with the other suggestions.

&gt;&gt; Source/JavaScriptCore/wasm/generateWasmB3IRGeneratorInlinesHeader.py:197
&gt;&gt; +&quot;&quot;&quot; + generateB3Code(opcode, b3op) + &quot;&quot;&quot;
&gt; 
&gt; Why make this change?

I changed the code generated to use variables, and I ended up moving around how the semicolons were emitted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802282</commentid>
    <comment_count>19</comment_count>
      <attachid>440683</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-08 15:35:52 -0700</bug_when>
    <thetext>Created attachment 440683
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802307</commentid>
    <comment_count>20</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-08 16:32:53 -0700</bug_when>
    <thetext>Committed r283852 (242731@main): &lt;https://commits.webkit.org/242731@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 440683.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802917</commentid>
    <comment_count>21</comment_count>
      <attachid>440683</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-10-11 18:50:49 -0700</bug_when>
    <thetext>Comment on attachment 440683
Patch for landing

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

First round of comments. Will continue to review tomorrow.

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:595
&gt; +

nit: no new line here

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:655
&gt; +    const Wasm::Tag* m_wasmTag { nullptr };

to be safe, should this be a RefPtr?

&gt; Source/JavaScriptCore/interpreter/Interpreter.h:94
&gt; +            : m_valid(false)

nit: can be a field initializer and this be &quot;= default&quot;

&gt; Source/JavaScriptCore/jit/JSInterfaceJIT.h:60
&gt; +        void convertCalleeToVM(RegisterID callee);

this isn&apos;t used

&gt; Source/JavaScriptCore/llint/WebAssembly.asm:259
&gt; +    storei PC, ArgumentCountIncludingThis + TagOffset[cfr]

Do we need to also do this once we&apos;ve left the catch region?

&gt; Source/JavaScriptCore/llint/WebAssembly.asm:2825
&gt; +wasmOp(rethrow, WasmRethrow, macro(ctx)

Why don&apos;t we need to copyCalleeSavesToEntryFrameCalleeSavesBuffer here? Looks like it might be wrong at first glance.

&gt; Source/JavaScriptCore/llint/WebAssembly.asm:2888
&gt; +macro catchAllImpl(ctx, storeWasmInstance)

This looks almost identical to the beginning of catch macro. Can we share code instead of copy-pasting?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:134
&gt; +            UNUSED_PARAM(proc);
&gt; +            UNUSED_PARAM(origin);

Why? They&apos;re both used below.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:136
&gt; +            for (unsigned i = 0; i &lt; signature-&gt;returnCount(); ++i)
&gt; +                phis.append(proc.add&lt;Value&gt;(Phi, toB3Type(signature-&gt;returnType(i)), origin));

In the spirit of making stuff variables, should these just be variables?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:466
&gt; +    void connectControlEntry(unsigned&amp; indexInBuffer, Value* pointer, ControlData&amp;, Stack&amp; expressionStack, ControlData&amp; currentData, bool fillLoopPhis = false);

nit: I think a better name is connectControlAtEntrypoint

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:590
&gt; +    jit.store32(CCallHelpers::TrustedImm32(m_callSiteIndex), CCallHelpers::tagFor(CallFrameSlot::argumentCountIncludingThis));

It worries we don&apos;t do this when calling out to random C runtime calls from 2 perspectives:
1. Are there really no places we can catch exceptions from the runtime calls?
2. Will those throw and see a stale call site index, leading us to catch an exception with a stackmap that doesn&apos;t actually represent the current program machine state.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:874
&gt; +    Ref&lt;B3::Air::PrologueGenerator&gt; catchPrologueGenerator = createSharedTask&lt;B3::Air::PrologueGeneratorFunction&gt;([] (CCallHelpers&amp; jit, B3::Air::Code&amp; code) {

nit: there is no reason afaict to generate this code more than once ever. Can this just be a shared between all the things in a process?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:878
&gt; +        {

I commented on that helper JIT function being unused, but maybe you meant to use it here?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2455
&gt; +void B3IRGenerator::connectControlEntry(unsigned&amp; indexInBuffer, Value* pointer, ControlData&amp; data, Stack&amp; expressionStack, ControlData&amp; currentData, bool fillLoopPhis)

these names are a bit confusing. What&apos;s &quot;data&quot; vs &quot;currentData&quot;?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2457
&gt; +    // For each stack entry enclosed by this loop we need to replace the value with a phi so we can fill it on OSR entry.

this comment isn&apos;t accurate anymore.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2462
&gt; +        if (fillLoopPhis)
&gt; +            m_currentBlock-&gt;appendNew&lt;UpsilonValue&gt;(m_proc, origin(), load, data.phis[i]);

Can we move to a world where everything is a variable? This kinda confuses me tbh. Not sure why it&apos;s sometimes ok. I know why it&apos;s sometimes not ok.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2586
&gt; +PatchpointExceptionHandle B3IRGenerator::preparePatchpointForExceptions(BasicBlock* block, PatchpointValue* patch)

nice

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2592
&gt; +    Vector&lt;Value*&gt; stackmap;

nit: this name isn&apos;t quite accurate. I&apos;d call this &quot;liveValues&quot;

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2709
&gt; +    m_exceptionHandlers.append({ HandlerType::Delegate, data.tryStart(), ++m_callSiteIndex, 0, m_tryDepth, targetDepth });

what&apos;s up with using m_callSiteIndex here?

How did you implement delegates? I don&apos;t quite understand how that code works.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2725
&gt; +    RegisterSet clobber = RegisterSet::macroScratchRegisters();
&gt; +    clobber.add(GPRInfo::argumentGPR2);
&gt; +    clobber.add(GPRInfo::argumentGPR3);
&gt; +    patch-&gt;clobber(clobber);
&gt; +    patch-&gt;clobberLate(RegisterSet::volatileRegistersForJSCall());

I think this can just be summarized as patch-&gt;clobberLate(RegisterSet::volatileRegistersForJSCall()) for how you use things below.

You can also just use nonArgumentGPR0 as your scratch register, so B3 doesn&apos;t potentially allocate a callee save just for your scratch.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2734
&gt; +        {

ditto about that helper

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2763
&gt; +    PatchpointValue* patch = m_proc.add&lt;PatchpointValue&gt;(B3::Void, origin());
&gt; +    patch-&gt;clobber(RegisterSet::macroScratchRegisters());

similar comments about patchpoint clobbering and what not as catch

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2893
&gt; +        --m_tryDepth;

this is &gt; 0 even while in a catch? Is that intended? Seems like a weird name if so.

&gt; Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:202
&gt; +    else if (!m_moduleInformation-&gt;m_functionDoesNotUseExceptions.quickGet(functionIndex))
&gt; +        forceUsingB3 = true;

small nit: I would&apos;ve avoided the double negative here, and just made &quot;m_functionsThatUseExceptions&quot; and made the check &quot;if (m_functionsThatUseExceptions.quickGet(functionIndex)&quot;, and then, of course, invert the bit set.

&gt; Source/JavaScriptCore/wasm/WasmCallee.h:77
&gt; +    virtual FunctionCodeBlock* functionCodeBlock() const { return 0; }

- This isn&apos;t a great name, and is even more confusing where it&apos;s used in the unwinder. This should be named something like &quot;llintFunctionCodeBlock&quot;

- Also, &quot;return nullptr&quot;, not &quot;return 0&quot;

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyException.h:34
&gt; +class JSWebAssemblyException final : public JSNonFinalObject {

this sin&apos;t supposed to be an ErrorInstance or something like that spec wise?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802920</commentid>
    <comment_count>22</comment_count>
      <attachid>440683</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-10-11 18:58:52 -0700</bug_when>
    <thetext>Comment on attachment 440683
Patch for landing

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

&gt; Source/JavaScriptCore/wasm/WasmInstance.h:244
&gt; +    Vector&lt;RefPtr&lt;const Tag&gt;&gt; m_tags;

are these hash-consed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803333</commentid>
    <comment_count>23</comment_count>
      <attachid>440683</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-10-12 13:12:19 -0700</bug_when>
    <thetext>Comment on attachment 440683
Patch for landing

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

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2779
&gt; +        {

similar comments about that unused helper here. Maybe it can be used?

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2893
&gt;&gt; +        --m_tryDepth;
&gt; 
&gt; this is &gt; 0 even while in a catch? Is that intended? Seems like a weird name if so.

Reading this more, we only increment for Try. Should we really decrement for Catch?

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:209
&gt; +            if ((VirtualRegister)src != (VirtualRegister)dst)

Nit: static_cast.

Also, is the cast needed?

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:503
&gt; +    Checked&lt;unsigned&gt; m_maxTryDepth { 0 };

this seems unused?

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:551
&gt; +template&lt;typename Opcode&gt;
&gt; +void LLIntGenerator::repatch(const CatchRewriteInfo&amp; info)

Is this used?

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:672
&gt; +    const unsigned base = stackOffset - CallFrame::headerSizeInRegisters - 1;

you add 1 above, and subtract 1 here. Is it actually needed?

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:1069
&gt; +    Ref&lt;Label&gt; continuation = newLabel();

how does this label get emitted?

&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:1199
&gt; +    walkExpressionStack(args, [&amp;](VirtualRegister&amp; arg, VirtualRegister slot) {
&gt; +        if (arg == slot)
&gt; +            return;
&gt; +        WasmMov::emit(this, slot, arg);
&gt; +        arg = slot;
&gt; +    });

why is this needed?

&gt; Source/JavaScriptCore/wasm/WasmOperations.cpp:913
&gt; +JSC_DEFINE_JIT_OPERATION(operationWasmThrow, void*, (Instance* instance, CallFrame* callFrame, unsigned exceptionIndex, EncodedJSValue* arguments))

nit: uint64_t* instead of EncodedJSValue* as the parameter here, since they&apos;re not JSValues

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyTagPrototype.cpp:115
&gt; +    RELEASE_AND_RETURN(throwScope, JSValue::encode(type));

nit: this can just be &quot;return JSValue::encode(type)&quot; since we exception check the line above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803931</commentid>
    <comment_count>24</comment_count>
      <attachid>440683</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-13 13:13:58 -0700</bug_when>
    <thetext>Comment on attachment 440683
Patch for landing

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

&gt;&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:655
&gt;&gt; +    const Wasm::Tag* m_wasmTag { nullptr };
&gt; 
&gt; to be safe, should this be a RefPtr?

I don&apos;t think it&apos;s necessary, the exception has to be live while unwinding, but I can change it if you think it&apos;s safer.

&gt;&gt; Source/JavaScriptCore/interpreter/Interpreter.h:94
&gt;&gt; +            : m_valid(false)
&gt; 
&gt; nit: can be a field initializer and this be &quot;= default&quot;

oh, that&apos;s a good point, forgot about that.

&gt;&gt; Source/JavaScriptCore/jit/JSInterfaceJIT.h:60
&gt;&gt; +        void convertCalleeToVM(RegisterID callee);
&gt; 
&gt; this isn&apos;t used

Yeah, I meant to use it where you pointed below, but it didn&apos;t work out

&gt;&gt; Source/JavaScriptCore/llint/WebAssembly.asm:259
&gt;&gt; +    storei PC, ArgumentCountIncludingThis + TagOffset[cfr]
&gt; 
&gt; Do we need to also do this once we&apos;ve left the catch region?

I don&apos;t think so? we can only throw again if you call a slow path again, so the it&apos;d have to be updated by then

&gt;&gt; Source/JavaScriptCore/llint/WebAssembly.asm:2825
&gt;&gt; +wasmOp(rethrow, WasmRethrow, macro(ctx)
&gt; 
&gt; Why don&apos;t we need to copyCalleeSavesToEntryFrameCalleeSavesBuffer here? Looks like it might be wrong at first glance.

Keith wrote this part, I assumed it was because if we rethrow we must have caught, therefore the VM must have the most up-to-date, but as I write I don&apos;t think that always holds, e.g. if you throw, catch, call, rethrow. I think we also need to do it here.

&gt;&gt; Source/JavaScriptCore/llint/WebAssembly.asm:2888
&gt;&gt; +macro catchAllImpl(ctx, storeWasmInstance)
&gt; 
&gt; This looks almost identical to the beginning of catch macro. Can we share code instead of copy-pasting?

yeah, we could share some code here, I&apos;ll update

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:134
&gt;&gt; +            UNUSED_PARAM(origin);
&gt; 
&gt; Why? They&apos;re both used below.

This must be left over from when I was testing, I&apos;ll remove.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:136
&gt;&gt; +                phis.append(proc.add&lt;Value&gt;(Phi, toB3Type(signature-&gt;returnType(i)), origin));
&gt; 
&gt; In the spirit of making stuff variables, should these just be variables?

I like the idea of keeping them Phis to distinguish between where we merge control flow from the stack variables, but I don&apos;t feel too strong about it.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:466
&gt;&gt; +    void connectControlEntry(unsigned&amp; indexInBuffer, Value* pointer, ControlData&amp;, Stack&amp; expressionStack, ControlData&amp; currentData, bool fillLoopPhis = false);
&gt; 
&gt; nit: I think a better name is connectControlAtEntrypoint

I reused the previous name, it kinda operates per ControlEntry, but I agree that is better.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:590
&gt;&gt; +    jit.store32(CCallHelpers::TrustedImm32(m_callSiteIndex), CCallHelpers::tagFor(CallFrameSlot::argumentCountIncludingThis));
&gt; 
&gt; It worries we don&apos;t do this when calling out to random C runtime calls from 2 perspectives:
&gt; 1. Are there really no places we can catch exceptions from the runtime calls?
&gt; 2. Will those throw and see a stale call site index, leading us to catch an exception with a stackmap that doesn&apos;t actually represent the current program machine state.

I inspected the code and couldn&apos;t find any other C calls that could throw exceptions that would be catchable from Wasm. The other exceptions that are thrown from the runtime are explicitly marked as not catchable from Wasm, so the stale call site index is irrelevant.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:874
&gt;&gt; +    Ref&lt;B3::Air::PrologueGenerator&gt; catchPrologueGenerator = createSharedTask&lt;B3::Air::PrologueGeneratorFunction&gt;([] (CCallHelpers&amp; jit, B3::Air::Code&amp; code) {
&gt; 
&gt; nit: there is no reason afaict to generate this code more than once ever. Can this just be a shared between all the things in a process?

I was concerned with preserving the register state, but I guess we could move everything up to line 902 into a thunk, then just make this function call the thunk, call the probe and adjust the stack?

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:878
&gt;&gt; +        {
&gt; 
&gt; I commented on that helper JIT function being unused, but maybe you meant to use it here?

Yeah, I meant to, but it&apos;s not accessible unfortunately, I will remove the function

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2455
&gt;&gt; +void B3IRGenerator::connectControlEntry(unsigned&amp; indexInBuffer, Value* pointer, ControlData&amp; data, Stack&amp; expressionStack, ControlData&amp; currentData, bool fillLoopPhis)
&gt; 
&gt; these names are a bit confusing. What&apos;s &quot;data&quot; vs &quot;currentData&quot;?

yeah, the naming is not good. &quot;data&quot; is the ControlEntry we&apos;re connecting, &quot;currentData&quot; is the ControlEntry that will become an entrypoint.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2457
&gt;&gt; +    // For each stack entry enclosed by this loop we need to replace the value with a phi so we can fill it on OSR entry.
&gt; 
&gt; this comment isn&apos;t accurate anymore.

I&apos;ll remove

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2462
&gt;&gt; +            m_currentBlock-&gt;appendNew&lt;UpsilonValue&gt;(m_proc, origin(), load, data.phis[i]);
&gt; 
&gt; Can we move to a world where everything is a variable? This kinda confuses me tbh. Not sure why it&apos;s sometimes ok. I know why it&apos;s sometimes not ok.

Not sure what do you mean by &quot;it&apos;s ok sometimes&quot;. I&apos;m still not sure whether I prefer Phis or variables, but I agree in this case it&apos;d make things simpler.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2592
&gt;&gt; +    Vector&lt;Value*&gt; stackmap;
&gt; 
&gt; nit: this name isn&apos;t quite accurate. I&apos;d call this &quot;liveValues&quot;

fair

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2709
&gt;&gt; +    m_exceptionHandlers.append({ HandlerType::Delegate, data.tryStart(), ++m_callSiteIndex, 0, m_tryDepth, targetDepth });
&gt; 
&gt; what&apos;s up with using m_callSiteIndex here?
&gt; 
&gt; How did you implement delegates? I don&apos;t quite understand how that code works.

We discussed this offline, but m_callSiteIndex here is used to capture the range for the try/catch/delegate. We increment it here too just to match how we select the handler when we have the bytecode index, since the delegate try/catch/delegate would have a new index in bytecode.

Delegate is implemented in WasmHandlerInfo.cpp by skipping certain catch candidates until we get to the target depth.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2725
&gt;&gt; +    patch-&gt;clobberLate(RegisterSet::volatileRegistersForJSCall());
&gt; 
&gt; I think this can just be summarized as patch-&gt;clobberLate(RegisterSet::volatileRegistersForJSCall()) for how you use things below.
&gt; 
&gt; You can also just use nonArgumentGPR0 as your scratch register, so B3 doesn&apos;t potentially allocate a callee save just for your scratch.

oh, that&apos;s a good point, since I&apos;m not reading from params in registers. I&apos;ll update it.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2763
&gt;&gt; +    patch-&gt;clobber(RegisterSet::macroScratchRegisters());
&gt; 
&gt; similar comments about patchpoint clobbering and what not as catch

You mean as throw? We still need to clobber macroScratchRegisters though, right? It also seems that I don&apos;t actually use `clobberLate` below....

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2893
&gt;&gt; +        --m_tryDepth;
&gt; 
&gt; this is &gt; 0 even while in a catch? Is that intended? Seems like a weird name if so.

Yeah, I guess it could be named tryCatchDepth?

&gt;&gt; Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:202
&gt;&gt; +        forceUsingB3 = true;
&gt; 
&gt; small nit: I would&apos;ve avoided the double negative here, and just made &quot;m_functionsThatUseExceptions&quot; and made the check &quot;if (m_functionsThatUseExceptions.quickGet(functionIndex)&quot;, and then, of course, invert the bit set.

The only reason it is this way is so it defaults to false, but I guess I could set everything to true early on, but it just seemed unnecessary.

&gt;&gt; Source/JavaScriptCore/wasm/WasmCallee.h:77
&gt;&gt; +    virtual FunctionCodeBlock* functionCodeBlock() const { return 0; }
&gt; 
&gt; - This isn&apos;t a great name, and is even more confusing where it&apos;s used in the unwinder. This should be named something like &quot;llintFunctionCodeBlock&quot;
&gt; 
&gt; - Also, &quot;return nullptr&quot;, not &quot;return 0&quot;

that makes sense. No idea why I wrote return 0....

&gt;&gt; Source/JavaScriptCore/wasm/WasmInstance.h:244
&gt;&gt; +    Vector&lt;RefPtr&lt;const Tag&gt;&gt; m_tags;
&gt; 
&gt; are these hash-consed?

no, they shouldn&apos;t be as per the spec

&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyException.h:34
&gt;&gt; +class JSWebAssemblyException final : public JSNonFinalObject {
&gt; 
&gt; this sin&apos;t supposed to be an ErrorInstance or something like that spec wise?

I looked into how other exceptions worked and they didn&apos;t extend ErrorInstance. We do use use the ErrorInstanceType blow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803960</commentid>
    <comment_count>25</comment_count>
      <attachid>440683</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-13 14:16:00 -0700</bug_when>
    <thetext>Comment on attachment 440683
Patch for landing

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2893
&gt;&gt;&gt;&gt; +        --m_tryDepth;
&gt;&gt;&gt; 
&gt;&gt;&gt; this is &gt; 0 even while in a catch? Is that intended? Seems like a weird name if so.
&gt;&gt; 
&gt;&gt; Reading this more, we only increment for Try. Should we really decrement for Catch?
&gt; 
&gt; Yeah, I guess it could be named tryCatchDepth?

Sorry, your second comment hadn&apos;t loaded before. We increment at beginning of a try/catch block, and we have to decrement at the end. We may or may not have had a catch block.

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:209
&gt;&gt; +            if ((VirtualRegister)src != (VirtualRegister)dst)
&gt; 
&gt; Nit: static_cast.
&gt; 
&gt; Also, is the cast needed?

This cast is needed because this might either be a VirtualRegister or a TypedExpression (which has the appropriate operation for casting into VirtualRegister).

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:503
&gt;&gt; +    Checked&lt;unsigned&gt; m_maxTryDepth { 0 };
&gt; 
&gt; this seems unused?

I think it might be, it was used before when I used to emit the exceptions at the end.

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:551
&gt;&gt; +void LLIntGenerator::repatch(const CatchRewriteInfo&amp; info)
&gt; 
&gt; Is this used?

No, also left over with m_maxTryDepth.

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:672
&gt;&gt; +    const unsigned base = stackOffset - CallFrame::headerSizeInRegisters - 1;
&gt; 
&gt; you add 1 above, and subtract 1 here. Is it actually needed?

yes, because of the alignment

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:1069
&gt;&gt; +    Ref&lt;Label&gt; continuation = newLabel();
&gt; 
&gt; how does this label get emitted?

At addEndToUnreachable

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:1199
&gt;&gt; +    });
&gt; 
&gt; why is this needed?

because we might have constants or elided moves in the stack, but we rely on all values being contiguous in the stack for the llint, so we have to normalize it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803962</commentid>
    <comment_count>26</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-10-13 14:16:38 -0700</bug_when>
    <thetext>Thanks, I think I addressed all your comments minus a few nits. I&apos;ll make a follow up patch to implement your suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804110</commentid>
    <comment_count>27</comment_count>
      <attachid>440683</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-10-13 18:01:45 -0700</bug_when>
    <thetext>Comment on attachment 440683
Patch for landing

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

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:590
&gt;&gt;&gt; +    jit.store32(CCallHelpers::TrustedImm32(m_callSiteIndex), CCallHelpers::tagFor(CallFrameSlot::argumentCountIncludingThis));
&gt;&gt; 
&gt;&gt; It worries we don&apos;t do this when calling out to random C runtime calls from 2 perspectives:
&gt;&gt; 1. Are there really no places we can catch exceptions from the runtime calls?
&gt;&gt; 2. Will those throw and see a stale call site index, leading us to catch an exception with a stackmap that doesn&apos;t actually represent the current program machine state.
&gt; 
&gt; I inspected the code and couldn&apos;t find any other C calls that could throw exceptions that would be catchable from Wasm. The other exceptions that are thrown from the runtime are explicitly marked as not catchable from Wasm, so the stale call site index is irrelevant.

we spoke offline after I wrote this. Makes sense.

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:874
&gt;&gt;&gt; +    Ref&lt;B3::Air::PrologueGenerator&gt; catchPrologueGenerator = createSharedTask&lt;B3::Air::PrologueGeneratorFunction&gt;([] (CCallHelpers&amp; jit, B3::Air::Code&amp; code) {
&gt;&gt; 
&gt;&gt; nit: there is no reason afaict to generate this code more than once ever. Can this just be a shared between all the things in a process?
&gt; 
&gt; I was concerned with preserving the register state, but I guess we could move everything up to line 902 into a thunk, then just make this function call the thunk, call the probe and adjust the stack?

oh, I totally missed that. That&apos;s a good point. I&apos;d keep it as is and ignore my original suggestion.

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2763
&gt;&gt;&gt; +    patch-&gt;clobber(RegisterSet::macroScratchRegisters());
&gt;&gt; 
&gt;&gt; similar comments about patchpoint clobbering and what not as catch
&gt; 
&gt; You mean as throw? We still need to clobber macroScratchRegisters though, right? It also seems that I don&apos;t actually use `clobberLate` below....

yeah, I meant as throw above. I guess for full correctness it should probably also clobber all volatile registers for call. That said, I wonder if it&apos;ll ever matter in practice since this is terminal. But better to be safe.

&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:2893
&gt;&gt;&gt;&gt;&gt; +        --m_tryDepth;
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; this is &gt; 0 even while in a catch? Is that intended? Seems like a weird name if so.
&gt;&gt;&gt; 
&gt;&gt;&gt; Reading this more, we only increment for Try. Should we really decrement for Catch?
&gt;&gt; 
&gt;&gt; Yeah, I guess it could be named tryCatchDepth?
&gt; 
&gt; Sorry, your second comment hadn&apos;t loaded before. We increment at beginning of a try/catch block, and we have to decrement at the end. We may or may not have had a catch block.

I&apos;m still a bit confused on this code, since we use m_tryDepth to see if we&apos;re in a try, right? But if you&apos;re in a catch, I don&apos;t think it dictates if you&apos;re in a try. For example, a top-level catch.

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:202
&gt;&gt;&gt; +        forceUsingB3 = true;
&gt;&gt; 
&gt;&gt; small nit: I would&apos;ve avoided the double negative here, and just made &quot;m_functionsThatUseExceptions&quot; and made the check &quot;if (m_functionsThatUseExceptions.quickGet(functionIndex)&quot;, and then, of course, invert the bit set.
&gt; 
&gt; The only reason it is this way is so it defaults to false, but I guess I could set everything to true early on, but it just seemed unnecessary.

gotcha. I think it&apos;s ok, since the code isn&apos;t complex.

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:1199
&gt;&gt;&gt; +    });
&gt;&gt; 
&gt;&gt; why is this needed?
&gt; 
&gt; because we might have constants or elided moves in the stack, but we rely on all values being contiguous in the stack for the llint, so we have to normalize it

gotcha. Maybe worth a comment in this scenario?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806600</commentid>
    <comment_count>28</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-20 06:51:04 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806601</commentid>
    <comment_count>29</comment_count>
      <attachid>441877</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-20 06:51:08 -0700</bug_when>
    <thetext>Created attachment 441877
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806608</commentid>
    <comment_count>30</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-20 07:49:32 -0700</bug_when>
    <thetext>Committed r284531 (243273@main): &lt;https://commits.webkit.org/243273@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 441877.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438359</attachid>
            <date>2021-09-16 09:59:52 -0700</date>
            <delta_ts>2021-10-04 14:46:11 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-229681-20210916095951.patch</filename>
            <type>text/plain</type>
            <size>202844</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
MzhmM2NjZmJlODM1ZmZjOGQ2ZThhZjU0ZGNkYTQzNzc0N2FmYjJkLi41ZTg5NWU3MzQxM2ZmNDRl
MGYxZTkyOThiYjE5NDA4MTZkYmJlNmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNjIgQEAKKzIwMjEtMDktMTYgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgSW1wbGVtZW50IHRoZSBXZWJBc3NlbWJseSBleGNlcHRpb24gaGFuZGxp
bmcgcHJvcG9zYWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyOTY4MQorICAgICAgICA8cmRhcjovLzgxNjAzMzg3PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdJUCBTcGVjOiBodHRwczovL2dpdGh1Yi5j
b20vV2ViQXNzZW1ibHkvZXhjZXB0aW9uLWhhbmRsaW5nCisKKyAgICAgICAgKiBEZXJpdmVkU291
cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54
Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICogYnl0
ZWNvZGUvSGFuZGxlckluZm8uaDoKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgor
ICAgICAgICAoSlNDOjpCYXNlSW5zdHJ1Y3Rpb246Om5hbWUgY29uc3QpOgorICAgICAgICAqIGlu
dGVycHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNv
ZGVJbmRleCBjb25zdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgor
ICAgICAgICAoSlNDOjpDYXRjaEluZm86OkNhdGNoSW5mbyk6CisgICAgICAgIChKU0M6OlVud2lu
ZEZ1bmN0b3I6OlVud2luZEZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpv
cGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZCk6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6Q2F0Y2hJ
bmZvOjpDYXRjaEluZm8pOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZSk6CisgICAg
ICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5k
KToKKyAgICAgICAgKiBsbGludC9MTEludENvbW1vbi5oOgorICAgICAgICAqIGxsaW50L0xMSW50
RGF0YS5oOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZVJlZik6CisgICAgICAgIChKU0M6
OkxMSW50OjpnZXRXaWRlMTZDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldFdpZGUz
MkNvZGVSZWYpOgorICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAg
IChKU0M6OkxMSW50Ojp3YXNtUmV0dXJuVG9UaHJvdyk6CisgICAgICAgIChKU0M6OkxMSW50Ojpo
YW5kbGVXYXNtQ2F0Y2gpOgorICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5oOgorICAg
ICAgICAqIGxsaW50L1dlYkFzc2VtYmx5LmFzbToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OndlYkFzc2VtYmx5VGFnVHlwZVN0cnVjdHVyZSBjb25zdCk6CisgICAgICAgICogcnVudGlt
ZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5o
OgorICAgICAgICAqIHdhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc1RyeSk6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNDYXRjaCk6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNBbnlDYXRjaCk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNMb29wKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0Jsb2NrKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpkdW1wIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRyeSk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaCk6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwpOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZSk6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyk6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRSZXRocm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZFJldHVybik6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpp
c1RyeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpp
c0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6
OmlzQW55Q2F0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9s
RGF0YTo6aXNMb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29udHJv
bERhdGE6OmlzQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmFkZFRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNoKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxl
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZSk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZFJldHVybik6CisgICAgICAgIChKU0M6OkIzSVJHZW5lcmF0
b3I6OmFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIz
SVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdl
bmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6QjNJUkdlbmVyYXRvcjo6YWRkVGhyb3cpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lS
R2VuZXJhdG9yOjphZGRSZXRocm93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVy
YXRvcjo6YWRkUmV0dXJuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6
YWRkQnJhbmNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6YWRkU3dp
dGNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2spOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6Y3JlYXRlQ2FsbFBhdGNo
cG9pbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbFJlZik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6OnVuaWZ5KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2spOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpkdW1wRXhwcmVzc2lvblN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6QjNJUkdlbmVyYXRvcjo6ZHVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzSVJHZW5l
cmF0b3I6Om9yaWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnBhcnNlQW5kQ29tcGlsZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JNb2RP
ckRpdik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyRGl2Uz4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlJlbVM+KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZVPik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtVT4pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlM+KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1TPik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2VT4pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJl
bVU+KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJDdHo+KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRDdHo+KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJQb3BjbnQ+KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5l
YXJlc3Q+KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJOZWFyZXN0Pik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2ND4pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0YzMj4p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlRydW5jVUY2ND4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlRydW5jVUYzMj4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0Y2ND4pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0Yz
Mj4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NFRydW5jVUYzMj4pOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV2FzbUNhbGxlZS5jcHA6
CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2FsbGVlOjpMTEludENhbGxlZSk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50Q2FsbGVlOjpsaW5rRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpMTEludENhbGxlZTo6aGFuZGxlckZvckluZGV4KToKKyAgICAgICAgKiB3
YXNtL1dhc21DYWxsZWUuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlOjpoYW5kbGVyRm9y
SW5kZXgpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0eXBlVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjppc1ZhbGlkRXh0ZXJuYWxLaW5k
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVN0cmluZyk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxv
Y2s6Om51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpGdW5jdGlvbkNvZGVCbG9jazo6ZXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uQ29kZUJsb2NrOjphZGRFeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKiB3
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjppc1RyeU9yQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eGNlcHRpb25JbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20v
V2FzbUhhbmRsZXJJbmZvLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkhhbmRsZXJJ
bmZvOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmhhbmRs
ZXJGb3JJbmRleCk6CisgICAgICAgICogd2FzbS9XYXNtSGFuZGxlckluZm8uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlVubGlua2VkSGFuZGxlckluZm86OlVubGlua2VkSGFuZGxlcklu
Zm8pOgorICAgICAgICAoSlNDOjpXYXNtOjpIYW5kbGVySW5mbzo6dGFnIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmRlbGVnYXRlVGFyZ2V0IGNvbnN0KToKKyAgICAg
ICAgKiB3YXNtL1dhc21JbnN0YW5jZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6
YWRkVGFnKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OnRhZyBjb25zdCk6CisgICAg
ICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpM
TEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OnRyeV8pOgorICAgICAgICAoSlNDOjpXYXNtOjpM
TEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmNhdGNoXyk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6aXNMb29wKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc0Jsb2NrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc0lmKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc1RyeSk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6aXNBbnlDYXRjaCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6aXNDYXRjaCk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpyZXBhdGNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRHZW5lcmF0b3I6OmFkZFRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjphZGRDYXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRj
aFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRk
Q2F0Y2hBbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQ2F0Y2hB
bGxUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFk
ZERlbGVnYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZERlbGVn
YXRlVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjph
ZGRUaHJvdyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRSZXRocm93
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFi
bGUpOgorICAgICAgICAqIHdhc20vV2FzbUxpbWl0cy5oOgorICAgICAgICAqIHdhc20vV2FzbU1v
ZHVsZUluZm9ybWF0aW9uLmg6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9u
OjpleGNlcHRpb25JbmRleFNwYWNlU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZUluZm9ybWF0aW9uOjppc0ltcG9ydGVkRXhjZXB0aW9uRnJvbUV4Y2VwdGlvbkluZGV4U3Bh
Y2UgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6c2lnbmF0
dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206Ok1vZHVsZUluZm9ybWF0aW9uOjppbXBvcnRFeGNlcHRpb25Db3VudCBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjppc0RlY2xhcmVkRXhjZXB0aW9uIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmFkZERlY2xhcmVk
RXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQpOgorICAgICAgICAoSlND
OjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUV4cG9ydCk6CisgICAgICAgIChKU0M6Oldhc206
OlNlY3Rpb25QYXJzZXI6OnBhcnNlRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0
aW9ucy5oOgorICAgICAgICAoSlNDOjpXYXNtOjp2YWxpZGF0ZU9yZGVyKToKKyAgICAgICAgKiB3
YXNtL1dhc21TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6V0FTTV9TTE9XX1BB
VEhfREVDTCk6CisgICAgICAgICogd2FzbS9XYXNtU2xvd1BhdGhzLmg6CisgICAgICAgICogd2Fz
bS9XYXNtVGFnLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50Q29tbW9uLmguCisgICAgICAgICogd2FzbS9XYXNtVGFnLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oLgorICAgICAgICAoSlNDOjpXYXNt
OjpUYWc6OlRhZyk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6cGFyYW1ldGVyQ291bnQgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWc6OnBhcmFtZXRlciBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OlRhZzo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
OlRhZzo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
LmNwcDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmguCisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OkpTV2ViQXNzZW1ibHlFeGNlcHRp
b24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmdldEFyZyBjb25zdCk6
CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpkZXN0cm95KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6c3Vic3BhY2VGb3IpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uOjp0YWcgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uOjpwYXlsb2FkIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dHJ5Q3Jl
YXRlKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWcuY3BwOiBDb3BpZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmguCisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlU
YWc6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWc6OkpT
V2ViQXNzZW1ibHlUYWcpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmgu
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6
V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MaW1pdHMuaC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
RXhjZXB0aW9uUHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5
RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6V2ViQXNz
ZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90
eXBlKToKKyAgICAgICAgKEpTQzo6Z2V0RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0VGFn
KToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MaW1pdHMuaC4KKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQ6OmxpbmtJbXBsKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29u
c3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3JlYXRlVGFn
KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yOjpXZWJBc3NlbWJseVRh
Z0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0
b3IuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5o
LgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5VGFnUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTo6V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUp
OgorICAgICAgICAoSlNDOjpnZXRUYWcpOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaDog
Q29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oLgorICAg
ICAgICAqIHdhc20vd2FzbS5qc29uOgorCiAyMDIxLTA3LTMwICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gVXNlIFVDUFVSZWdpc3RlciBhcmd1bWVu
dCB0byByZW1vdmUgemVybyBleHRlbnNpb24gaW4gSklUIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZDcx
YTgwZDY3ZmQ4MzRlMGRhM2RiOWFlYjNkYzA3OTBjODczOGZhYy4uODI4NzU5NzcwOTkxNDE3ODMz
YTQ0NTY1OGI4MzViMzI3MGY2ZThiNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTE4OCw2ICsxODgsOCBAQCAk
KFBST0pFQ1RfRElSKS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQogJChQUk9KRUNUX0RJ
Uikvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJB
c3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9q
cy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAKKyQoUFJPSkVDVF9ESVIpL3dh
c20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAKKyQoUFJPSkVDVF9ESVIp
L3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwCiAkKFBST0pFQ1RfRElS
KS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElS
KS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcAogJChQUk9KRUNUX0RJUikv
d2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0yMDIsNiArMjA0
LDggQEAgJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0
cnVjdG9yLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJv
clByb3RvdHlwZS5jcHAKICQoUFJPSkVDVF9ESVIpL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmNwcAorJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVj
dG9yLmNwcAorJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5j
cHAKICQoUFJPSkVDVF9ESVIpL3dhc20vd2FzbS5qc29uCiAkKFBST0pFQ1RfRElSKS95YXJyL2Ny
ZWF0ZV9yZWdleF90YWJsZXMKICQoUFJPSkVDVF9ESVIpL3lhcnIvZ2VuZXJhdGVZYXJyQ2Fub25p
Y2FsaXplVW5pY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRT
b3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRT
b3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDljZmZlOWFkYmRhYjU0Y2Y3NzUzYmQ5N2My
NWQ4MWRiYzcwNTE4MjAuLjI0NDhhMjE3MDZlMGI4MWQ0YmQwZjljNmNhZDQ2MWZjNjJmODRmMTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQu
eGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtb3V0
cHV0LnhjZmlsZWxpc3QKQEAgLTczLDYgKzczLDggQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dhc21MTEludEdlbmVyYXRvcklubGluZXMuaAog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dhc21P
cHMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3Jl
L1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmgKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseUNvbXBpbGVF
cnJvclByb3RvdHlwZS5sdXQuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IubHV0LmgKKyQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3Nl
bWJseUV4Y2VwdGlvblByb3RvdHlwZS5sdXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0b3IubHV0
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9X
ZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZS5sdXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5sdXQuaApAQCAtODcsNiArODksOCBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5
UnVudGltZUVycm9yUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2Vi
QXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IubHV0LmgK
KyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJB
c3NlbWJseVRhZ1Byb3RvdHlwZS5sdXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQppbmRleCA3NTQyYzdmNzc0NjVlMjZlMTlkNGE2OGE1ZGI3NjA5MWZkZDQ2
NTM5Li44ZWQ1YTNlNGFjYjY1OGZkOTUyMTRlMzA2NzkyZTYwOWI2ODgzN2VhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTk0LDYgKzE5NCw4IEBAIE9C
SkVDVF9MVVRfSEVBREVSUyA9IFwKICAgICBUZW1wb3JhbE9iamVjdC5sdXQuaCBcCiAgICAgV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlD
b21waWxlRXJyb3JQcm90b3R5cGUubHV0LmggXAorICAgIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29u
c3RydWN0b3IubHV0LmggXAorICAgIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmx1dC5o
IFwKICAgICBXZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBXZWJBc3Nl
bWJseUdsb2JhbFByb3RvdHlwZS5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmx1dC5oIFwKQEAgLTIwOCw2ICsyMTAsOCBAQCBPQkpFQ1RfTFVUX0hFQURFUlMgPSBc
CiAgICAgV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUubHV0LmggXAogICAgIFdlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlUYWJsZVByb3Rv
dHlwZS5sdXQuaCBcCisgICAgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5sdXQuaCBcCisgICAg
V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUubHV0LmggXAogIwogCiAkKE9CSkVDVF9MVVRfSEVBREVS
Uyk6ICUubHV0LmggOiAlLmNwcCAkKEphdmFTY3JpcHRDb3JlKS9jcmVhdGVfaGFzaF90YWJsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwZDFjYjMyNmJlNzA1ZDczMzkxZDE1ZWY0
N2U3NGE5OTRmYzE4OThjLi5iNmUxOTIwYWY0YWIxNzhiNzQ0Mzk3YjI2OTY3MjdlZTU2NWUwYmM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzk3LDYgKzc5Nyw3IEBACiAJCTE0
NzgyOTdCMTM3OUU4QTgwMEE3QzJBMyAvKiBIYW5kbGVUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2RkE1QTgxMzc4RjZCMDAwMzYyN0EzIC8q
IEhhbmRsZVR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0
aW1pemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDdCODNBQTBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDdCODQ2
MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDdCODQ2MjBFNkRFNkIxMDA0Nzc1QTQgLyog
UHV0UHJvcGVydHlTbG90LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMTQ4NTIxRDgyNkVBRUJGRTAwQ0MxRDFBIC8qIFdhc21IYW5kbGVySW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NTIxRDcy
NkVBRUJGRTAwQ0MxRDFBIC8qIFdhc21IYW5kbGVySW5mby5oICovOyB9OwogCQkxNDg2QThDMDI0
QUJFRDQ4MDA3MzkyMkQgLyogSlNMb2NrUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NkE4QkYyNEFCRUQzQzAwNzM5MjJEIC8qIEpT
TG9ja1JlZlByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NzRBRTIxNUVCREU0QTAw
MkUzNTg3IC8qIEpTU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxNDhBN0JGMDFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2FsbEZyYW1l
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDhBN0JF
RTFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2FsbEZyYW1lLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyOCw2ICs4MjksMTMgQEAKIAkJMTRD
QTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0E5NThBMTZBQjUwREUw
MDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDQTk1OEQxNkFCNTBGQTAwOTM4QTA2IC8q
IE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNEQwMUE3NzIxRkIzNTFGMDBCQzU0RTkgLyogSlNTY3JpcHRTb3VyY2VQcm92aWRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFB
NzYyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCAqLzsgfTsKKwkJ
MTREMDFCRTYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkRBMjZE
RUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi87IH07CisJCTE0
RDAxQkU3MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCREIyNkRFRUYz
NzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggKi87IH07CisJCTE0RDAxQkU5
MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCREQyNkRFRUYz
NzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggKi87IH07CisJCTE0
RDAxQkVDMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJFMDI2REVFRjM3MDBDQUUw
RDAgLyogSlNXZWJBc3NlbWJseVRhZy5oICovOyB9OworCQkxNEQwMUJFRDI2REVFRjM4MDBDQUUw
RDAgLyogSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCRTEyNkRFRUYzODAwQ0FFMEQwIC8qIEpTV2ViQXNz
ZW1ibHlFeGNlcHRpb24uaCAqLzsgfTsKKwkJMTREMDFCRUYyNkRFRUYzODAwQ0FFMEQwIC8qIFdl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkUzMjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3Nl
bWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi87IH07CisJCTE0RDAxQkY1MjZERUVGNTMwMENB
RTBEMCAvKiBXYXNtVGFnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICovOyB9OwogCQkx
NEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAv
KiBNYXJrZWRTcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5
c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNERG
MDREOTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RTg0RjlGMTRFRTFB
Q0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlBMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzQ0NSw2
ICszNDUzLDggQEAKIAkJMTQ4MkI3OEEwQTQzMDVBQjAwNTE3Q0ZDIC8qIEFQSUNhc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJQ2FzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDgyQjdFMTBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPYmplY3RSZWYuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4MkI3RTIwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0
UmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT2JqZWN0UmVm
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQ4NTIxRDUyNkVBRUJERjAwQ0Mx
RDFBIC8qIFdhc21IYW5kbGVySW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtSGFuZGxl
ckluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDg1MjFENzI2RUFFQkZF
MDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21IYW5kbGVySW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDg2QThCRTI0QUJFRDNCMDA3MzkyMkQgLyogSlNMb2NrUmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTTG9ja1JlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODZBOEJG
MjRBQkVEM0MwMDczOTIyRCAvKiBKU0xvY2tSZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
TG9ja1JlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4NzRBRTEx
NUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0z
NTI4LDYgKzM1MzgsMjAgQEAKIAkJMTRDQzNCQTIyMTM4QTIzODAwMkQ1OEI2IC8qIEluc3RydWN0
aW9uU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3RydWN0aW9u
U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RDAxQTc1MjFGQjM1MDMw
MEJDNTRFOSAvKiBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTREMDFBNzYyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxNEQwMUJEQTI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdD
b25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJs
eVRhZ0NvbnN0cnVjdG9yLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRCMjZERUVGMzcwMENBRTBEMCAv
KiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlUYWdQ
cm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCREMyNkRFRUYz
NzAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHA7IHBhdGggPSBq
cy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTREMDFCREQyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5RXhjZXB0
aW9uUHJvdG90eXBlLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJERTI2REVFRjM3MDBDQUUwRDAg
LyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcDsgcGF0aCA9IGpzL1dl
YkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxNEQwMUJERjI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlUYWdQcm90
b3R5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJFMDI2REVFRjM3MDBDQUUwRDAgLyogSlNXZWJB
c3NlbWJseVRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2Vt
Ymx5VGFnLmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5VGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE0RDAxQkUxMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlF
eGNlcHRpb24uaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRTIyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2Vt
Ymx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcDsgcGF0aCA9IGpzL1dlYkFz
c2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTREMDFCRTMyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlFeGNl
cHRpb25Db25zdHJ1Y3Rvci5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1
Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJFNDI2REVFRjM4MDBD
QUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5VGFnLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlU
YWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJFNTI2REVFRjM4MDBD
QUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9y
LmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJGMjI2REVFRjUyMDBDQUUwRDAgLyogV2Fz
bVRhZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtVGFnLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRjMyNkRFRUY1MjAwQ0FFMEQw
IC8qIFdhc21UYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVRhZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEg
LyogTWFya2VkU3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2Vk
U3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRENzkyNjQwREFBMDNGQjAw
MUE5RjA1IC8qIENMb29wU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q0xvb3BTdGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQ4NTc3NDBBNDY5
NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgbmFtZSA9IHRlc3RhcGkuanM7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5qczsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcxMDQsNiArNzEyOCw4IEBACiAJCQkJMTQ4N0NFMTYy
Mzc3NDEwMDAwNDQ0MjlDIC8qIFdhc21HZW5lcmF0b3JUcmFpdHMuaCAqLywKIAkJCQlFMzgzNTAw
ODIzOTBEOTM3MDAzNjMxNkQgLyogV2FzbUdsb2JhbC5jcHAgKi8sCiAJCQkJRTM4MzUwMDkyMzkw
RDkzNzAwMzYzMTZEIC8qIFdhc21HbG9iYWwuaCAqLywKKwkJCQkxNDg1MjFENTI2RUFFQkRGMDBD
QzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmNwcCAqLywKKwkJCQkxNDg1MjFENzI2RUFFQkZFMDBD
QzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggKi8sCiAJCQkJQUQ4RkYzOTYxRUI1QkQ4NTAwODdG
RjgyIC8qIFdhc21JbmRleE9yTmFtZS5jcHAgKi8sCiAJCQkJQUQ4RkYzOTUxRUI1QkQ4NTAwODdG
RjgyIC8qIFdhc21JbmRleE9yTmFtZS5oICovLAogCQkJCUFENUMzNkRFMUY2OTlFQjYwMDBCQ0FB
RiAvKiBXYXNtSW5zdGFuY2UuY3BwICovLApAQCAtNzE2MSw2ICs3MTg3LDggQEAKIAkJCQlFM0M3
M0E5MDI1QkZBNzM0MDBFRkUzMDMgLyogV2FzbVN0cmVhbWluZ1BsYW4uaCAqLywKIAkJCQlBRDVD
MzZFMzFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmNwcCAqLywKIAkJCQlBRDVDMzZFNDFG
NjlFQzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmggKi8sCisJCQkJMTREMDFCRjIyNkRFRUY1MjAw
Q0FFMEQwIC8qIFdhc21UYWcuY3BwICovLAorCQkJCTE0RDAxQkYzMjZERUVGNTIwMENBRTBEMCAv
KiBXYXNtVGFnLmggKi8sCiAJCQkJNTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVu
a3MuY3BwICovLAogCQkJCTUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmgg
Ki8sCiAJCQkJRTNDNjk0QjIyMzAyNjg3NDAwNkZCRTQyIC8qIFdhc21UaWVyVXBDb3VudC5jcHAg
Ki8sCkBAIC05MDIwLDYgKzkwNDgsOCBAQAogCQkJCUFEOUU4NTJFMUU4QTBDNkUwMDhERTM5RSAv
KiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggKi8sCiAJCQkJQUQyRkNCQTYxREI1OERBNDAwQjNF
NzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwICovLAogCQkJCUFEMkZDQkE3MURC
NThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggKi8sCisJCQkJMTRE
MDFCREMyNkRFRUYzNzAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwICovLAor
CQkJCTE0RDAxQkUxMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgg
Ki8sCiAJCQkJRTNCRjNDNEMyMzkwRDFFMzAwOEJDNzUyIC8qIEpTV2ViQXNzZW1ibHlHbG9iYWwu
Y3BwICovLAogCQkJCUUzQkYzQzRCMjM5MEQxRTIwMDhCQzc1MiAvKiBKU1dlYkFzc2VtYmx5R2xv
YmFsLmggKi8sCiAJCQkJNzk2RkI0MzkxREZGOEMzRjAwMzlDOTVEIC8qIEpTV2ViQXNzZW1ibHlI
ZWxwZXJzLmggKi8sCkBAIC05MDM1LDEyICs5MDY1LDE4IEBACiAJCQkJQUQyRkNCQUQxREI1OERB
NDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCAqLywKIAkJCQlBRDJGQ0JB
RTFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmNwcCAqLywKIAkJCQlBRDJG
Q0JBRjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmggKi8sCisJCQkJMTRE
MDFCRTQyNkRFRUYzODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlUYWcuY3BwICovLAorCQkJCTE0
RDAxQkUwMjZERUVGMzcwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggKi8sCiAJCQkJQURE
MDlBRUYxRjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmNwcCAqLywKIAkJCQlBREQwOUFFRTFG
NUY2MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMuaCAqLywKIAkJCQlBRDJGQ0JCMDFEQjU4REE0MDBC
M0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJ
QUQyRkNCQjExREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3Ry
dWN0b3IuaCAqLywKIAkJCQlBRDJGQ0JCMjFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlD
b21waWxlRXJyb3JQcm90b3R5cGUuY3BwICovLAogCQkJCUFEMkZDQkIzMURCNThEQTQwMEIzRTcz
NiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oICovLAorCQkJCTE0RDAxQkU1
MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcCAq
LywKKwkJCQkxNEQwMUJFMzI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25D
b25zdHJ1Y3Rvci5oICovLAorCQkJCTE0RDAxQkUyMjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3Nl
bWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAgKi8sCisJCQkJMTREMDFCREQyNkRFRUYzNzAwQ0FF
MEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggKi8sCiAJCQkJQUQ0OTM3Qzkx
REREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uY3BwICovLAogCQkJCUFENDkz
N0NBMURERDI3MzQwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggKi8sCiAJCQkJNTIx
MzIyNDMxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcCAqLywK
QEAgLTkwNzUsNiArOTExMSwxMCBAQAogCQkJCUFEMkZDQkMxMURCNThEQTQwMEIzRTczNiAvKiBX
ZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuaCAqLywKIAkJCQlBRDJGQ0JDMjFEQjU4REE0MDBC
M0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQUQyRkNCQzMx
REI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCAqLywKKwkJCQkx
NEQwMUJERTI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAg
Ki8sCisJCQkJMTREMDFCREEyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuaCAqLywKKwkJCQkxNEQwMUJERjI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlU
YWdQcm90b3R5cGUuY3BwICovLAorCQkJCTE0RDAxQkRCMjZERUVGMzcwMENBRTBEMCAvKiBXZWJB
c3NlbWJseVRhZ1Byb3RvdHlwZS5oICovLAogCQkJCTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8sCiAJCQkJNTJGNkMzNUMxRTcxRUIw
ODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi8sCiAJCQkpOwpAQCAt
MTAzMjIsNiArMTAzNjIsNyBAQAogCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dl
YkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUg
LyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRTMx
REI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTE0RDAxQkVEMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0JGM0M0RDIzOTBEMUU4MDA4QkM3NTIgLyogSlNX
ZWJBc3NlbWJseUdsb2JhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk2RkI0M0ExREZGOEMzRjAw
MzlDOTVEIC8qIEpTV2ViQXNzZW1ibHlIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJG
Q0JFNTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUluc3RhbmNlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTEwMzMwLDYgKzEwMzcxLDcgQEAKIAkJCQlBRDJGQ0MwNTFEQjU4REFEMDBCM0U3
MzYgLyogSlNXZWJBc3NlbWJseU1vZHVsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRTkx
REI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5VGFibGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0RDAxQkVDMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFz
c2VtYmx5VGFnLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIg
LyogSlNXaXRoU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZE
NzYwQSAvKiBKU1dyYXBwZXJNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJFMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU1dyYXBwZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtMTA3NDMs
NiArMTA3ODUsNyBAQAogCQkJCTE0NTBGQTFDMjM1N0JEQkUwMDkzQ0Q0RCAvKiBXYXNtRnVuY3Rp
b25Db2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFC
NiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzODM1MDBBMjM5
MEQ5M0IwMDM2MzE2RCAvKiBXYXNtR2xvYmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDg1MjFE
ODI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDhGRjM5ODFFQjVCREIyMDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBRDVDMzZFMjFGNjk5RUMwMDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBRDAwNjU5RTFFQ0FDODEyMDAwQ0E5MjYgLyogV2FzbUxpbWl0cy5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xMDc3Myw2ICsxMDgxNiw3IEBACiAJCQkJRTNBMDUzMUEyMTM0
MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJlYW1pbmdQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzQzczQTkxMjVCRkE3M0IwMEVGRTMwMyAvKiBXYXNtU3RyZWFtaW5nUGxhbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUQ1QzM2RTYxRjY5RUM5MTAwMEJDQUFGIC8qIFdhc21UYWJsZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMTREMDFCRjUyNkRFRUY1MzAwQ0FFMEQwIC8qIFdhc21UYWcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUyNTBEMkQyMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1M0U5RTBBRjFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJV
cENvdW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFQzFGNzVBRDdDMDAwQkNBQUYgLyog
V2FzbVRvSlMuaCBpbiBIZWFkZXJzICovLApAQCAtMTA4MDQsNiArMTA4NDgsOCBAQAogCQkJCUFE
MkZDQzE2MURCNTlDQjIwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVj
dG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRUYxREI1OERBRDAwQjNFNzM2IC8q
IFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
RDJGQ0MxNzFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5
cGUubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJFRjI2REVFRjM4MDBDQUUwRDAgLyog
V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRE
MDFCRTkyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDQ5MzdENDFEREQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1i
bHlGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTIxMzIyNDYxRUNCQ0U4MjAwRjY1NjE1
IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0JGM0M1
MzIzOTBEMjA1MDA4QkM3NTIgLyogV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMDgzMSw2ICsxMDg3Nyw4IEBACiAJCQkJQUQyRkNDMjAxREI1OUNCMjAw
QjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFEMkZDQkZGMURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0MyMTFEQjU5Q0IyMDBCM0U3MzYgLyogV2Vi
QXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RDAxQkU2
MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkxNEQwMUJFNzI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRDQyAvKiBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0N0Ew
RTE2RjVDRDAwQjM0NDYwIC8qIFdlYktpdEF2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTlEQTAwQTYxQkQ1OTkzMTAwRjQ1NzVDIC8qIHdrYnVpbHRpbnMucHkgaW4gSGVhZGVycyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA1NWRjYTFmZjA1M2Y0Y2U5ODVkMjFm
ZDZkYmMzZGQzYjBkZTdjYjAwLi42NzUxNGM3YzJhNjVmZGEzNjBiMGM5ZDFkNjYyZGQzNmNmOTIx
ZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0xMDY0LDYgKzEwNjQsNyBAQCB3
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCiB3YXNtL1dhc21Gb3JtYXQuY3BwCiB3YXNt
L1dhc21GdW5jdGlvbkNvZGVCbG9jay5jcHAKIHdhc20vV2FzbUdsb2JhbC5jcHAKK3dhc20vV2Fz
bUhhbmRsZXJJbmZvLmNwcAogd2FzbS9XYXNtSW5kZXhPck5hbWUuY3BwCiB3YXNtL1dhc21JbnN0
YW5jZS5jcHAKIHdhc20vV2FzbUluc3RhbmNlLmgKQEAgLTEwOTAsNiArMTA5MSw3IEBAIHdhc20v
V2FzbVN0cmVhbWluZ0NvbXBpbGVyLmNwcAogd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAog
d2FzbS9XYXNtU3RyZWFtaW5nUGxhbi5jcHAKIHdhc20vV2FzbVRhYmxlLmNwcAord2FzbS9XYXNt
VGFnLmNwcAogd2FzbS9XYXNtVGh1bmtzLmNwcAogd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCiB3
YXNtL1dhc21WYWx1ZUxvY2F0aW9uLmNwcApAQCAtMTEwMSw2ICsxMTAzLDcgQEAgd2FzbS9qcy9K
U1RvV2FzbUlDQ2FsbGVlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVy
cm9yLmNwcAord2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcAogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5R2xvYmFsLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwCkBAIC0xMTA4LDEwICsxMTExLDEzIEBA
IHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5jcHAKIHdhc20vanMv
SlNXZWJBc3NlbWJseVRhYmxlLmNwcAord2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmNwcAogd2Fz
bS9qcy9XYXNtVG9KUy5jcHAKIHdhc20vanMvV2FzbVRvSlMuaAogd2FzbS9qcy9XZWJBc3NlbWJs
eUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVF
cnJvclByb3RvdHlwZS5jcHAKK3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ci5jcHAKK3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwCiB3YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
LmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcApAQCAtMTEyOSw2
ICsxMTM1LDggQEAgd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmNw
cAogd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5jcHAKIHdhc20vanMv
V2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlLmNwcAord2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcAord2Fz
bS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwCiAKIHlhcnIvUmVndWxhckV4cHJlc3Npb24uY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCAxODI1ZWMyYWQ1
YTAzMzlkNGYzZWYxOTVkZDZmOWZjZjIyZDA2NDljLi43NDExOWI5MDlkYmQ1NWVmODk3OGZjZTY0
M2Q2M2UyYjkwNjAzZjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpc3QucmIKQEAgLTE4NTksNCArMTg1OSwyOCBAQCBvcCA6YXRvbWljX2ZlbmNlLAog
ICAgIGFyZ3M6IHsKICAgICB9CiAKK29wIDp0aHJvdywKKyAgICBhcmdzOiB7CisgICAgICAgIGV4
Y2VwdGlvbkluZGV4OiB1bnNpZ25lZCwKKyAgICAgICAgZmlyc3RWYWx1ZTogVmlydHVhbFJlZ2lz
dGVyLAorICAgIH0KKworb3AgOnJldGhyb3csCisgICAgYXJnczogeworICAgICAgICBleGNlcHRp
b246IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9CisKK29wIDpjYXRjaCwKKyAgICBhcmdzOiB7Cisg
ICAgICAgIGV4Y2VwdGlvbkluZGV4OiB1bnNpZ25lZCwKKyAgICAgICAgZXhjZXB0aW9uOiBWaXJ0
dWFsUmVnaXN0ZXIsCisgICAgICAgIGFyZ3VtZW50Q291bnQ6IHVuc2lnbmVkLAorICAgICAgICBz
dGFydE9mZnNldDogdW5zaWduZWQsCisgICAgfQorCitvcCA6Y2F0Y2hfYWxsLAorICAgIGFyZ3M6
IHsKKyAgICAgICAgZXhjZXB0aW9uOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgfQorCiBlbmRfc2Vj
dGlvbiA6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hh
bmRsZXJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8u
aAppbmRleCAwMWRkY2Y5Njk5YjQ4MDI5YTFiZDhiZWU0MDM0OTA0NzlhMWY5ZDdmLi42NmRmMDk5
OWYyMWIyNzRlMDk5OWJiNWEzODUyMzRkMTQ1MTVjOTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaApAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotZW51bSBjbGFzcyBIYW5kbGVyVHlwZSB7CitlbnVtIGNsYXNzIEhhbmRsZXJU
eXBlIDogdWludDhfdCB7CiAgICAgQ2F0Y2ggPSAwLAogICAgIEZpbmFsbHkgPSAxLAogICAgIFN5
bnRoZXNpemVkQ2F0Y2ggPSAyLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luc3RydWN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dHJ1Y3Rpb24uaAppbmRleCBmNjNhZDI5ZjIwZjUxZTZjNjA5ZmNjYjlkYmNiNTU4OTZlMzIyZjI5
Li43ZjlkZGExNTBiNzQxZjUwYmJmOTY0YzRmMGRkNDgxMDQ1MjJjZGM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaApAQCAtODksNyArODksNyBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzID0gSlNPcGNvZGVUcmFpdHM+CiAg
ICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gVHJhaXRz
OjpvcGNvZGVOYW1lc1tvcGNvZGVJRCgpXTsKKyAgICAgICAgcmV0dXJuIFRyYWl0czo6b3Bjb2Rl
TmFtZXNbb3Bjb2RlSUQ8VHJhaXRzPigpXTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUcmFpdHMgPSBKU09wY29kZVRyYWl0cz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggYjQxMzM1YmMzOWUyMGIwNDI0YjkyMjNmNDg3
NmFmZjEyMDA1MmRlZC4uYjcyNDU3ZDFiOWNlMDM4Y2E1MGE2NDAyNGY3OTE0ZGU1ODFhYTYzYiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAK
QEAgLTEzMCw3ICsxMzAsOCBAQCB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0
ZWNvZGVPZmZzZXQoKSBjb25zdAogCiBCeXRlY29kZUluZGV4IENhbGxGcmFtZTo6Ynl0ZWNvZGVJ
bmRleCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7CisgICAgaWYg
KGNhbGxlZSgpLmlzV2FzbSgpKQorICAgICAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJ5dGVj
b2RlSW5kZXgoKTsKICAgICBpZiAoIWNvZGVCbG9jaygpKQogICAgICAgICByZXR1cm4gQnl0ZWNv
ZGVJbmRleCgwKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IDgzZmYyOGYyMzExOTcwMjUz
ZDBiMjBiZmQ2ZDc3YzVkZjkyNTlmODIuLjViMTdlZTcyZmZiYTcwNGZkOTkyZDRjODdhNjZkYTA2
MDZlODEwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJv
bm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUgIkpTU3RyaW5n
LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkxMSW50
VGh1bmtzLmgiCiAjaW5jbHVkZSAiTGl0ZXJhbFBhcnNlci5oIgogI2luY2x1ZGUgIk1vZHVsZVBy
b2dyYW1Db2RlQmxvY2suaCIKQEAgLTUxMSwxNSArNTEyLDQ0IEBAIEFMV0FZU19JTkxJTkUgc3Rh
dGljIHZvaWQgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhWTSYgdm0sIENhbGxGcmFtZSogY2Fs
bEZyYW1lCiAgICAgfQogfQogCitDYXRjaEluZm86OkNhdGNoSW5mbyhjb25zdCBIYW5kbGVySW5m
byogaGFuZGxlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgbV92YWxpZCA9ICEhaGFu
ZGxlcjsKKyAgICBpZiAobV92YWxpZCkgeworICAgICAgICBtX3R5cGUgPSBoYW5kbGVyLT50eXBl
KCk7CisgICAgICAgIG1faW50ZXJwcmV0ZXJUYXJnZXQgPSBoYW5kbGVyLT50YXJnZXQ7CisgICAg
ICAgIG1fbmF0aXZlQ29kZSA9IGhhbmRsZXItPm5hdGl2ZUNvZGU7CisgICAgICAgIG1fY2F0Y2hQ
Q0ZvckludGVycHJldGVyID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChoYW5kbGVyLT50
YXJnZXQpLnB0cigpOworICAgIH0KK30KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK0NhdGNo
SW5mbzo6Q2F0Y2hJbmZvKGNvbnN0IFdhc206OkhhbmRsZXJJbmZvKiBoYW5kbGVyLCBjb25zdCBX
YXNtOjpDYWxsZWUqIGNhbGxlZSkKK3sKKyAgICBtX3ZhbGlkID0gISFoYW5kbGVyOworICAgIGlm
IChtX3ZhbGlkKSB7CisgICAgICAgIG1fdHlwZSA9IEhhbmRsZXJUeXBlOjpDYXRjaDsKKyAgICAg
ICAgbV9pbnRlcnByZXRlclRhcmdldCA9IGhhbmRsZXItPm1fdGFyZ2V0OworICAgICAgICBtX25h
dGl2ZUNvZGUgPSBoYW5kbGVyLT5tX25hdGl2ZUNvZGU7CisgICAgICAgIGlmIChjb25zdCBXYXNt
OjpMTEludENhbGxlZSogbGxpbnRDYWxsZWUgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFdhc206
OkxMSW50Q2FsbGVlKj4oY2FsbGVlKSkKKyAgICAgICAgICAgIG1fY2F0Y2hQQ0ZvckludGVycHJl
dGVyID0gbGxpbnRDYWxsZWUtPmZ1bmN0aW9uQ29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0
KGhhbmRsZXItPm1fdGFyZ2V0KS5wdHIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9j
YXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBudWxscHRyOworICAgIH0KK30KKyNlbmRpZgorCiBjbGFz
cyBVbndpbmRGdW5jdG9yIHsKIHB1YmxpYzoKLSAgICBVbndpbmRGdW5jdG9yKFZNJiB2bSwgQ2Fs
bEZyYW1lKiYgY2FsbEZyYW1lLCBib29sIGlzVGVybWluYXRpb24sIENvZGVCbG9jayomIGNvZGVC
bG9jaywgSGFuZGxlckluZm8qJiBoYW5kbGVyKQorICAgIFVud2luZEZ1bmN0b3IoVk0mIHZtLCBD
YWxsRnJhbWUqJiBjYWxsRnJhbWUsIGJvb2wgaXNUZXJtaW5hdGlvbiwgSlNWYWx1ZSB0aHJvd25W
YWx1ZSwgQ29kZUJsb2NrKiYgY29kZUJsb2NrLCBDYXRjaEluZm8mIGhhbmRsZXIpCiAgICAgICAg
IDogbV92bSh2bSkKICAgICAgICAgLCBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCiAgICAgICAgICwg
bV9pc1Rlcm1pbmF0aW9uKGlzVGVybWluYXRpb24pCiAgICAgICAgICwgbV9jb2RlQmxvY2soY29k
ZUJsb2NrKQogICAgICAgICAsIG1faGFuZGxlcihoYW5kbGVyKQogICAgIHsKKyAgICAgICAgaWYg
KEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIHdhc21FeGNlcHRpb24gPSBqc0R5bmFtaWNDYXN0PEpT
V2ViQXNzZW1ibHlFeGNlcHRpb24qPihtX3ZtLCB0aHJvd25WYWx1ZSkpCisgICAgICAgICAgICBt
X3dhc21UYWcgPSAmd2FzbUV4Y2VwdGlvbi0+dGFnKCk7CiAgICAgfQogCiAgICAgU3RhY2tWaXNp
dG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CkBAIC01
MjgsMTkgKzU1OCwyOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbEZyYW1lID0gdmlzaXRvci0+
Y2FsbEZyYW1lKCk7CiAgICAgICAgIG1fY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCk7
CiAKLSAgICAgICAgbV9oYW5kbGVyID0gbnVsbHB0cjsKKyAgICAgICAgbV9oYW5kbGVyLm1fdmFs
aWQgPSBmYWxzZTsKICAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CiAgICAgICAgICAgICBpZiAo
IW1faXNUZXJtaW5hdGlvbikgewotICAgICAgICAgICAgICAgIG1faGFuZGxlciA9IGZpbmRFeGNl
cHRpb25IYW5kbGVyKHZpc2l0b3IsIG1fY29kZUJsb2NrLCBSZXF1aXJlZEhhbmRsZXI6OkFueUhh
bmRsZXIpOwotICAgICAgICAgICAgICAgIGlmIChtX2hhbmRsZXIpCisgICAgICAgICAgICAgICAg
bV9oYW5kbGVyID0geyBmaW5kRXhjZXB0aW9uSGFuZGxlcih2aXNpdG9yLCBtX2NvZGVCbG9jaywg
UmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKSwgbV9jb2RlQmxvY2sgfTsKKyAgICAgICAgICAg
ICAgICBpZiAobV9oYW5kbGVyLm1fdmFsaWQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBT
dGFja1Zpc2l0b3I6OkRvbmU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKLSAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgpLmlzQ2VsbCgpKSB7
Ci0gICAgICAgICAgICBpZiAoYXV0byoganNUb1dhc21JQ0NhbGxlZSA9IGpzRHluYW1pY0Nhc3Q8
SlNUb1dhc21JQ0NhbGxlZSo+KG1fdm0sIHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpKSkKKyAg
ICAgICAgQ2FsbGVlQml0cyBjYWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUoKTsKKyAgICAgICAgaWYg
KGNhbGxlZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGpzVG9XYXNtSUNDYWxs
ZWUgPSBqc0R5bmFtaWNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihtX3ZtLCBjYWxsZWUuYXNDZWxs
KCkpKQogICAgICAgICAgICAgICAgIG1fdm0ud2FzbUNvbnRleHQuc3RvcmUoanNUb1dhc21JQ0Nh
bGxlZS0+ZnVuY3Rpb24oKS0+cHJldmlvdXNJbnN0YW5jZShtX2NhbGxGcmFtZSksIG1fdm0uc29m
dFN0YWNrTGltaXQoKSk7CisKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjYWxsZWUuaXNXYXNt
KCkgJiYgIW1faXNUZXJtaW5hdGlvbiAmJiBtX3dhc21UYWcpIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IG1fY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCku
b2Zmc2V0KCk7CisgICAgICAgICAgICBtX2hhbmRsZXIgPSB7IGNhbGxlZS5hc1dhc21DYWxsZWUo
KS0+aGFuZGxlckZvckluZGV4KG1fdm0sIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgKm1fd2FzbVRh
ZyksIGNhbGxlZS5hc1dhc21DYWxsZWUoKSB9OworICAgICAgICAgICAgaWYgKG1faGFuZGxlci5t
X3ZhbGlkKQorICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAgICAg
ICAgIH0KICNlbmRpZgogCkBAIC01ODcsMTAgKzYyNiwxMSBAQCBwcml2YXRlOgogICAgIENhbGxG
cmFtZSomIG1fY2FsbEZyYW1lOwogICAgIGJvb2wgbV9pc1Rlcm1pbmF0aW9uOwogICAgIENvZGVC
bG9jayomIG1fY29kZUJsb2NrOwotICAgIEhhbmRsZXJJbmZvKiYgbV9oYW5kbGVyOworICAgIENh
dGNoSW5mbyYgbV9oYW5kbGVyOworICAgIGNvbnN0IFdhc206OlRhZyogbV93YXNtVGFnIHsgbnVs
bHB0ciB9OwogfTsKIAotTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53
aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikK
K05FVkVSX0lOTElORSBDYXRjaEluZm8gSW50ZXJwcmV0ZXI6OnVud2luZChWTSYgdm0sIENhbGxG
cmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCkBAIC02MDgsMTYgKzY0OCwxMyBAQCBORVZF
Ul9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJh
bWUqJiBjYWxsRnJhbWUsIEV4YwogICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VEKHNjb3BlLCBz
Y29wZS5leGNlcHRpb24oKSk7CiAKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRs
ZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgotICAgIEhhbmRsZXJJ
bmZvKiBoYW5kbGVyID0gbnVsbHB0cjsKLSAgICBVbndpbmRGdW5jdG9yIGZ1bmN0b3Iodm0sIGNh
bGxGcmFtZSwgdm0uaXNUZXJtaW5hdGlvbkV4Y2VwdGlvbihleGNlcHRpb24pLCBjb2RlQmxvY2ss
IGhhbmRsZXIpOworICAgIENhdGNoSW5mbyBjYXRjaEluZm87CisgICAgVW53aW5kRnVuY3RvciBm
dW5jdG9yKHZtLCBjYWxsRnJhbWUsIHZtLmlzVGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9u
KSwgZXhjZXB0aW9uVmFsdWUsIGNvZGVCbG9jaywgY2F0Y2hJbmZvKTsKICAgICBTdGFja1Zpc2l0
b3I6OnZpc2l0PFN0YWNrVmlzaXRvcjo6VGVybWluYXRlSWZUb3BFbnRyeUZyYW1lSXNFbXB0eT4o
Y2FsbEZyYW1lLCB2bSwgZnVuY3Rvcik7CiAgICAgaWYgKHZtLmhhc0NoZWNrcG9pbnRPU1JTaWRl
U3RhdGUoKSkKICAgICAgICAgdm0ucG9wQWxsQ2hlY2twb2ludE9TUlNpZGVTdGF0ZVVudGlsKGNh
bGxGcmFtZSk7CiAKLSAgICBpZiAoIWhhbmRsZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgcmV0dXJuIGhhbmRsZXI7CisgICAgcmV0dXJuIGNhdGNoSW5mbzsKIH0KIAogdm9pZCBJ
bnRlcnByZXRlcjo6bm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRvQmVUaHJvd24oVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRXhjZXB0
aW9uKiBleGNlcHRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5oCmluZGV4IDBjM2VmZTEyZTUxMDUzODhmNmNmMjg1MTFkOWVhNWU0ZWFmMzA3
ZmMuLjkwYWY0NTNlNDUyNmFjYjNlM2VhYWEyZDM5ZjczMWM5MmY0ZGVlMTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCkBAIC00Myw2ICs0
MywxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK25h
bWVzcGFjZSBXYXNtIHsKK2NsYXNzIENhbGxlZTsKK3N0cnVjdCBIYW5kbGVySW5mbzsKK30KKyNl
bmRpZgorCiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEV2YWxFeGVjdXRhYmxlOwog
ICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTU4LDYgKzY1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgY2xhc3MgSlNTY29wZTsKICAgICBjbGFzcyBTb3VyY2VDb2RlOwogICAgIGNs
YXNzIFN0YWNrRnJhbWU7CisgICAgZW51bSBjbGFzcyBIYW5kbGVyVHlwZSA6IHVpbnQ4X3Q7CiAg
ICAgc3RydWN0IENhbGxGcmFtZUNsb3N1cmU7CiAgICAgc3RydWN0IEhhbmRsZXJJbmZvOwogICAg
IHN0cnVjdCBJbnN0cnVjdGlvbjsKQEAgLTgxLDYgKzg5LDIzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBTdGFja0ZyYW1lTmF0aXZlQ29kZQogICAgIH07CiAKKyAgICBzdHJ1Y3QgQ2F0Y2hJ
bmZvIHsKKyAgICAgICAgQ2F0Y2hJbmZvKCkKKyAgICAgICAgICAgIDogbV92YWxpZChmYWxzZSkK
KyAgICAgICAgeyB9CisKKyAgICAgICAgQ2F0Y2hJbmZvKGNvbnN0IEhhbmRsZXJJbmZvKiwgQ29k
ZUJsb2NrKik7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBDYXRjaEluZm8oY29u
c3QgV2FzbTo6SGFuZGxlckluZm8qLCBjb25zdCBXYXNtOjpDYWxsZWUqKTsKKyNlbmRpZgorCisg
ICAgICAgIGJvb2wgbV92YWxpZDsKKyAgICAgICAgSGFuZGxlclR5cGUgbV90eXBlOworICAgICAg
ICB1bnNpZ25lZCBtX2ludGVycHJldGVyVGFyZ2V0OworICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBtX25hdGl2ZUNvZGU7CisgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBtX2NhdGNoUENGb3JJbnRlcnByZXRlcjsKKyAgICB9OworCiAgICAgY2xhc3Mg
SW50ZXJwcmV0ZXIgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIENhY2hlZENhbGw7CkBAIC0xMTIsNyArMTM3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgdm9pZCBnZXRBcmd1bWVudHNEYXRhKENhbGxGcmFtZSosIEpTRnVuY3Rp
b24qJiwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFyZ3YsIGlu
dCYgYXJnYyk7CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiB1bndpbmQoVk0m
LCBDYWxsRnJhbWUqJiwgRXhjZXB0aW9uKik7CisgICAgICAgIE5FVkVSX0lOTElORSBDYXRjaElu
Zm8gdW53aW5kKFZNJiwgQ2FsbEZyYW1lKiYsIEV4Y2VwdGlvbiopOwogICAgICAgICB2b2lkIG5v
dGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqLCBFeGNlcHRpb24qKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgZGVidWco
Q2FsbEZyYW1lKiwgRGVidWdIb29rVHlwZSk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgc3RhY2tU
cmFjZUFzU3RyaW5nKFZNJiwgY29uc3QgVmVjdG9yPFN0YWNrRnJhbWU+Jik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IDU3
YTFiZGI2ZGJkNWIxNjA2OTFjNjU2NTBmYzBkNDVkYmU4MDllYWIuLmRjNWVjY2UwNWVlMzlmYmJm
ZWJmNWQ5YjJkYmIzYjk1NmZkNjZhNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0xNjYsMjMgKzE2NiwyMCBAQCB2b2lk
IFN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q29kZU9yaWdpbiogY29kZU9yaQogICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSBudWxs
cHRyOwogI2VuZGlmCiAKKyAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKKyAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9ICFtX2ZyYW1lLmNvZGVCbG9j
aygpID8gQnl0ZWNvZGVJbmRleCgwKQorICAgICAgICA6IGNvZGVPcmlnaW4gPyBjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KCkKKyAgICAgICAgOiBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsK
KwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoY2FsbEZyYW1lLT5pc0FueVdhc21D
YWxsZWUoKSkgewogICAgICAgICBtX2ZyYW1lLm1faXNXYXNtRnJhbWUgPSB0cnVlOwogICAgICAg
ICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgbV9mcmFtZS5tX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7CiAKICAgICAgICAgaWYgKG1fZnJhbWUubV9jYWxs
ZWUuaXNXYXNtKCkpCiAgICAgICAgICAgICBtX2ZyYW1lLm1fd2FzbUZ1bmN0aW9uSW5kZXhPck5h
bWUgPSBtX2ZyYW1lLm1fY2FsbGVlLmFzV2FzbUNhbGxlZSgpLT5pbmRleE9yTmFtZSgpOwotCi0g
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9ICFt
X2ZyYW1lLmNvZGVCbG9jaygpID8gQnl0ZWNvZGVJbmRleCgwKQotICAgICAgICA6IGNvZGVPcmln
aW4gPyBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkKLSAgICAgICAgOiBjYWxsRnJhbWUtPmJ5
dGVjb2RlSW5kZXgoKTsKLQogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAppbmRleCA2ZDU4M2E0ODllZDUzMDMxOGNl
MzA5NmM2NmIwMmU3ZDFjNThhNGJjLi4zOWVhOTQ0YTE4Y2MxMDk3NGQ2MjlmOTQ4NDljM2JiNTlj
YjU1ZTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAK
QEAgLTU0LDIxICs1NCwyMSBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIAogICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9u
KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uKTsKLSAgICBIYW5kbGVySW5mbyogaGFu
ZGxlciA9IHZtLmludGVycHJldGVyLT51bndpbmQodm0sIGNhbGxGcmFtZSwgZXhjZXB0aW9uKTsg
Ly8gVGhpcyBtYXkgdXBkYXRlIGNhbGxGcmFtZS4KKyAgICBDYXRjaEluZm8gaGFuZGxlciA9IHZt
LmludGVycHJldGVyLT51bndpbmQodm0sIGNhbGxGcmFtZSwgZXhjZXB0aW9uKTsgLy8gVGhpcyBt
YXkgdXBkYXRlIGNhbGxGcmFtZS4KIAogICAgIHZvaWQqIGNhdGNoUm91dGluZTsKICAgICBjb25z
dCBJbnN0cnVjdGlvbiogY2F0Y2hQQ0ZvckludGVycHJldGVyID0gbnVsbHB0cjsKLSAgICBpZiAo
aGFuZGxlcikgewotICAgICAgICAvLyBoYW5kbGVyLT50YXJnZXQgaXMgbWVhbmluZ2xlc3MgZm9y
IGdldHRpbmcgYSBjb2RlIG9mZnNldCB3aGVuIGNhdGNoaW5nCisgICAgaWYgKGhhbmRsZXIubV92
YWxpZCkgeworICAgICAgICAvLyBoYW5kbGVyLm1faW50ZXJwcmV0ZXJUYXJnZXQgaXMgbWVhbmlu
Z2xlc3MgZm9yIGdldHRpbmcgYSBjb2RlIG9mZnNldCB3aGVuIGNhdGNoaW5nCiAgICAgICAgIC8v
IHRoZSBleGNlcHRpb24gaW4gYSBERkcvRlRMIGZyYW1lLiBUaGlzIGJ5dGVjb2RlIHRhcmdldCBv
ZmZzZXQgY291bGQgYmUKICAgICAgICAgLy8gc29tZXRoaW5nIHRoYXQncyBpbiBhbiBpbmxpbmVk
IGZyYW1lLCB3aGljaCBtZWFucyBhbiBhcnJheSBhY2Nlc3MKICAgICAgICAgLy8gd2l0aCB0aGlz
IGJ5dGVjb2RlIG9mZnNldCBpbiB0aGUgbWFjaGluZSBmcmFtZSBpcyB1dHRlcmx5IG1lYW5pbmds
ZXNzCi0gICAgICAgIC8vIGFuZCBjYW4gY2F1c2UgYW4gb3ZlcmZsb3cuIE9TUiBleGl0IHByb3Bl
cmx5IGV4aXRzIHRvIGhhbmRsZXItPnRhcmdldAorICAgICAgICAvLyBhbmQgY2FuIGNhdXNlIGFu
IG92ZXJmbG93LiBPU1IgZXhpdCBwcm9wZXJseSBleGl0cyB0byBoYW5kbGVyLm1faW50ZXJwcmV0
ZXJUYXJnZXQKICAgICAgICAgLy8gaW4gdGhlIHByb3BlciBmcmFtZS4KICAgICAgICAgaWYgKCFK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aml0VHlwZSgp
KSkKLSAgICAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPnRhcmdldCkucHRyKCk7CisgICAgICAg
ICAgICBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBoYW5kbGVyLm1fY2F0Y2hQQ0ZvckludGVycHJl
dGVyOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIGNhdGNoUm91dGluZSA9IGhhbmRsZXItPm5h
dGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFu
ZGxlci5tX25hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICNlbHNlCiAgICAgICAgIGlm
IChjYXRjaFBDRm9ySW50ZXJwcmV0ZXItPmlzV2lkZTMyKCkpCiAgICAgICAgICAgICBjYXRjaFJv
dXRpbmUgPSBMTEludDo6Z2V0V2lkZTMyQ29kZVB0cihjYXRjaFBDRm9ySW50ZXJwcmV0ZXItPm9w
Y29kZUlEKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaAppbmRl
eCA5NTFkNzY5ZDY5MjQ5YmYzYWM5OGY0NDA4MzQxZjY1MTAyYTk1NWMxLi5hZmVlY2JhYzA3YjFl
YjE3MGVkNmQ0NDY1NTA4MjU3ZGE3NjUxYmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRDb21tb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRDb21tb24uaApAQCAtMjksNyArMjksNyBAQAogLy8gLSBQcmludHMgZXZlcnkgaW5z
dHJ1Y3Rpb24gZXhlY3V0ZWQgaWYgT3B0aW9uczo6dHJhY2VMTEludEV4ZWN1dGlvbigpIGlzIGVu
YWJsZWQuCiAvLyAtIFByaW50cyBzb21lIGluZm9ybWF0aW9uIGZvciBzb21lIG9mIHRoZSBtb3Jl
IHN1YnRsZSBzbG93IHBhdGhzIGlmCiAvLyAgIE9wdGlvbnM6OnRyYWNlTExJbnRTbG93UGF0aCgp
IGlzIGVuYWJsZWQuCi0jZGVmaW5lIExMSU5UX1RSQUNJTkcgMAorI2RlZmluZSBMTElOVF9UUkFD
SU5HIDEKIAogLy8gRGlzYWJsZSBpbmxpbmUgYWxsb2NhdGlvbiBpbiB0aGUgaW50ZXJwcmV0ZXIu
IFRoaXMgaXMgZ3JlYXQgaWYgeW91J3JlIGNoYW5naW5nCiAvLyBob3cgdGhlIEdDIGFsbG9jYXRl
cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAppbmRleCAzZjhlODhkYjZi
YmFkYmQ0NTE1MThjMTI4Y2E2ZDZkNWVkMWViYzUyLi5jMjI2MDFkNTE3ZDhlZWNkOGZhYWVhYzli
OTczY2RkNjkwY2Q0Y2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnREYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5o
CkBAIC0zMjIsNiArMzIyLDI0IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PHRhZz4gZ2V0V2lkZTMyQ29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiAjZW5kaWYKIH0K
IAordGVtcGxhdGU8UHRyVGFnIHRhZz4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPHRhZz4gZ2V0Q29kZVJlZihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCit7CisgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2V0
Q29kZVB0cjx0YWc+KG9wY29kZUlEKSk7Cit9CisKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+IGdldFdpZGUxNkNvZGVSZWYoV2Fz
bU9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
dGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdldFdpZGUxNkNvZGVQdHI8dGFnPihvcGNv
ZGVJRCkpOworfQorCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8dGFnPiBnZXRXaWRlMzJDb2RlUmVmKFdhc21PcGNvZGVJRCBvcGNvZGVJ
RCkKK3sKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz46OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpKTsKK30KKwogdGVt
cGxhdGU8UHRyVGFnIHRhZz4KIEFMV0FZU19JTkxJTkUgTExJbnRDb2RlIGdldENvZGVGdW5jdGlv
blB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI5MTNlZWRhYjBjNDMwZmE3ODQ2Mjli
ZTMwOTEyNDAwZTU2OThjMTQuLjU5NDJhMWU5NTYzYzBmOTFlNzcyZWYwOGFlNmE4ODcwZGI2OTA0
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMu
Y3BwCkBAIC00OSw2ICs0OSwxOCBAQCBJbnN0cnVjdGlvbiogcmV0dXJuVG9UaHJvdyhWTSYgdm0p
CiAgICAgcmV0dXJuIExMSW50OjpleGNlcHRpb25JbnN0cnVjdGlvbnMoKTsKIH0KIAorSW5zdHJ1
Y3Rpb24qIHdhc21SZXR1cm5Ub1Rocm93KFZNJiB2bSkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0p
OworI2lmIExMSU5UX1RSQUNJTkcKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VMTElu
dFNsb3dQYXRoKCkpKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKyAgICAgICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIEpTVmFsdWUoc2Nv
cGUuZXhjZXB0aW9uKCkpLCAiIChyZXR1cm5Ub1Rocm93KS5cbiIpOworICAgIH0KKyNlbmRpZgor
ICAgIHJldHVybiBMTEludDo6d2FzbUV4Y2VwdGlvbkluc3RydWN0aW9ucygpOworfQorCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gY2FsbFRvVGhyb3coVk0m
IHZtKQogewogICAgIFVOVVNFRF9QQVJBTSh2bSk7CkBAIC05Miw0ICsxMDQsMTggQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGhhbmRsZUNhdGNoKE9wY29k
ZVNpemUgc2l6ZSkKICAgICByZXR1cm4ge307CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxF
eGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5kbGVXYXNtQ2F0Y2goT3Bjb2RlU2l6ZSBzaXplKQor
eworICAgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNhc2UgT3Bjb2RlU2l6ZTo6TmFycm93OgorICAg
ICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4od2Fz
bV9jYXRjaCk7CisgICAgY2FzZSBPcGNvZGVTaXplOjpXaWRlMTY6CisgICAgICAgIHJldHVybiBM
TEludDo6Z2V0V2lkZTE2Q29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPih3YXNtX2NhdGNo
KTsKKyAgICBjYXNlIE9wY29kZVNpemU6OldpZGUzMjoKKyAgICAgICAgcmV0dXJuIExMSW50Ojpn
ZXRXaWRlMzJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KHdhc21fY2F0Y2gpOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7fTsKK30K
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkxMSW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRFeGNlcHRpb25zLmgKaW5kZXggODA2YjE5ZjY2MDU4NjZiODhjZTg0OTU4N2Ew
NDFhZGU0ZjM2ZDYyOS4uNzBhY2E2ZTlmYTc1YmNhMzNlYjljYjU0YmJjNzdkOWNhOTc5NmQ4YiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuaApAQCAt
NDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgTExJbnQgewogLy8gYmV0d2VlbiAxIGFuZCA5IHNsb3Rz
IHdpbGwgZ2l2ZSB5b3UgYW4gImluc3RydWN0aW9uIiB0aGF0IHRocmVhZHMgdG8gdGhlCiAvLyBp
bnRlcnByZXRlcidzIGV4Y2VwdGlvbiBoYW5kbGVyLgogSW5zdHJ1Y3Rpb24qIHJldHVyblRvVGhy
b3coVk0mKTsKK0luc3RydWN0aW9uKiB3YXNtUmV0dXJuVG9UaHJvdyhWTSYpOwogCiAvLyBVc2Ug
dGhpcyB3aGVuIHlvdSdyZSB0aHJvd2luZyB0byBhIGNhbGwgdGh1bmsuCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gY2FsbFRvVGhyb3coVk0mKTsKQEAgLTQ5
LDQgKzUwLDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
IGNhbGxUb1Rocm93KFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4gaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24oVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5kbGVDYXRjaChPcGNvZGVTaXplKTsKIAor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGhhbmRsZVdhc21D
YXRjaChPcGNvZGVTaXplKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkxMSW50CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbQppbmRleCA0MzZjZjY2NDkwZDcx
YzVlZTliYjMwZTg2ZmU2ZjQyYmFlZTc2ZGYxLi5jYmUwMTBkNDYzMDYzYTI2MmIwZDk2YmY0ZDcz
ZDdmNTc4ODk3NDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2Vi
QXNzZW1ibHkuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJs
eS5hc20KQEAgLTI1Niw2ICsyNTYsOCBAQCBtYWNybyB0aHJvd0V4Y2VwdGlvbihleGNlcHRpb24p
CiBlbmQKIAogbWFjcm8gY2FsbFdhc21TbG93UGF0aChzbG93UGF0aCkKKyAgICAjIFRPRE86IGlz
IHRoaXMgY29ycmVjdD8gb3IgZG8gd2UgbmVlZCB0byBzdG9yZSBpbiB0aGUgc2xvdyBwYXRoCisg
ICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJd
CiAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQogICAgIG1vdmUgY2ZyLCBhMAogICAgIG1vdmUg
UEMsIGExCkBAIC0yNzQsNiArMjc2LDE0IEBAIG1hY3JvIGNhbGxXYXNtQ2FsbFNsb3dQYXRoKHNs
b3dQYXRoLCBhY3Rpb24pCiAgICAgYWN0aW9uKHIwLCByMSkKIGVuZAogCittYWNybyByZXN0b3Jl
U3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgd3MxCisg
ICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1fbnVtQ2FsbGVlTG9jYWxzW3dzMV0s
IHdzMQorICAgIGxzaGlmdHAgMywgd3MxCisgICAgYWRkcCBtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCwgd3MxCisgICAgc3VicCBjZnIsIHdzMSwgc3AKK2VuZAorCiBtYWNybyB3YXNtUHJv
bG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvY2tTZXR0ZXIsIGxvYWRXYXNtSW5zdGFuY2Up
CiAgICAgIyBTZXQgdXAgdGhlIGNhbGwgZnJhbWUgYW5kIGNoZWNrIGlmIHdlIHNob3VsZCBPU1Iu
CiAgICAgcHJlc2VydmVDYWxsZXJQQ0FuZENGUigpCkBAIC0zMzMsMTUgKzM0MywxOSBAQCBtYWNy
byB0cmFjZUV4ZWN1dGlvbigpCiAgICAgZW5kCiBlbmQKIAotIyBMZXNzIGNvbnZlbmllbnQsIGJ1
dCByZXF1aXJlZCBmb3Igb3Bjb2RlcyB0aGF0IGNvbGxpZGUgd2l0aCByZXNlcnZlZCBpbnN0cnVj
dGlvbnMgKGUuZy4gd2FzbV9ub3ApCi1tYWNybyB1bnByZWZpeGVkV2FzbU9wKG9wY29kZU5hbWUs
IG9wY29kZVN0cnVjdCwgZm4pCi0gICAgY29tbW9uT3Aob3Bjb2RlTmFtZSwgdHJhY2VFeGVjdXRp
b24sIG1hY3JvKHNpemUpCittYWNybyBjb21tb25XYXNtT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3Ry
dWN0LCBwcm9sb2d1ZSwgZm4pCisgICAgY29tbW9uT3Aob3Bjb2RlTmFtZSwgcHJvbG9ndWUsIG1h
Y3JvKHNpemUpCiAgICAgICAgIGZuKG1hY3JvKGZuMikKICAgICAgICAgICAgIGZuMihvcGNvZGVO
YW1lLCBvcGNvZGVTdHJ1Y3QsIHNpemUpCiAgICAgICAgIGVuZCkKICAgICBlbmQpCiBlbmQKIAor
IyBMZXNzIGNvbnZlbmllbnQsIGJ1dCByZXF1aXJlZCBmb3Igb3Bjb2RlcyB0aGF0IGNvbGxpZGUg
d2l0aCByZXNlcnZlZCBpbnN0cnVjdGlvbnMgKGUuZy4gd2FzbV9ub3ApCittYWNybyB1bnByZWZp
eGVkV2FzbU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgZm4pCisgICAgY29tbW9uV2FzbU9w
KG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgdHJhY2VFeGVjdXRpb24sIGZuKQorZW5kCisKIG1h
Y3JvIHdhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGZuKQogICAgIHVucHJlZml4ZWRX
YXNtT3Aod2FzbV8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgZm4pCiBlbmQKQEAgLTUxMiw2
ICs1MjYsMTYgQEAgb3Aod2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHMsIG1hY3JvICgpCiAg
ICAgd2FzbU5leHRJbnN0cnVjdGlvbigpCiBlbmQpCiAKK21hY3JvIGp1bXBUb0V4Y2VwdGlvbigp
CisgICAgaWYgQVJNNjRFCisgICAgICAgIG1vdmUgcjAsIGEwCisgICAgICAgIGxlYXAgSlNDQ29u
ZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhw
ciBHYXRlOjpleGNlcHRpb25IYW5kbGVyKSAqIFB0clNpemUsIGExCisgICAgICAgIGptcCBbYTFd
LCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBFeGNlcHRpb25IYW5kbGVyUHRyVGFnCisgICAgZWxz
ZQorICAgICAgICBqbXAgcjAsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKKyAgICBlbmQKK2VuZAor
CiBvcCh3YXNtX3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUsIG1hY3JvICgpCiAgICAg
bG9hZHAgV2FzbTo6SW5zdGFuY2U6Om1fcG9pbnRlclRvVG9wRW50cnlGcmFtZVt3YXNtSW5zdGFu
Y2VdLCB0NQogICAgIGxvYWRwIFt0NV0sIHQ1CkBAIC01MjMsMTQgKzU0Nyw3IEBAIG9wKHdhc21f
dGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAgICAjIFNsb3cgcGF0
aHMgYW5kIHRoZSB0aHJvd0V4Y2VwdGlvbiBtYWNybyBzdG9yZSB0aGUgZXhjZXB0aW9uIGNvZGUg
aW4gdGhlIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHNsb3QKICAgICBsb2FkaSBBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyArIFBheWxvYWRPZmZzZXRbY2ZyXSwgYTMKICAgICBjQ2FsbDQo
X3Nsb3dfcGF0aF93YXNtX3Rocm93X2V4Y2VwdGlvbikKLQotICAgIGlmIEFSTTY0RQotICAgICAg
ICBtb3ZlIHIwLCBhMAotICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9m
ZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6ZXhjZXB0aW9uSGFuZGxl
cikgKiBQdHJTaXplLCBhMQotICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFn
ICMgRXhjZXB0aW9uSGFuZGxlclB0clRhZwotICAgIGVsc2UKLSAgICAgICAgam1wIHIwLCBFeGNl
cHRpb25IYW5kbGVyUHRyVGFnCi0gICAgZW5kCisgICAganVtcFRvRXhjZXB0aW9uKCkKIGVuZCkK
IAogbWFjcm8gd2FzbV90aHJvd19mcm9tX2ZhdWx0X2hhbmRsZXIoaW5zdGFuY2UpCkBAIC01NDMs
MTQgKzU2MCw3IEBAIG1hY3JvIHdhc21fdGhyb3dfZnJvbV9mYXVsdF9oYW5kbGVyKGluc3RhbmNl
KQogICAgIG1vdmUgMCwgYTEKICAgICBtb3ZlIGNmciwgYTAKICAgICBjQ2FsbDQoX3Nsb3dfcGF0
aF93YXNtX3Rocm93X2V4Y2VwdGlvbikKLQotICAgIGlmIEFSTTY0RQotICAgICAgICBtb3ZlIHIw
LCBhMAotICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlND
Q29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6ZXhjZXB0aW9uSGFuZGxlcikgKiBQdHJT
aXplLCBhMQotICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgRXhjZXB0
aW9uSGFuZGxlclB0clRhZwotICAgIGVsc2UKLSAgICAgICAgam1wIHIwLCBFeGNlcHRpb25IYW5k
bGVyUHRyVGFnCi0gICAgZW5kCisgICAganVtcFRvRXhjZXB0aW9uKCkKIGVuZAogCiBvcCh3YXNt
X3Rocm93X2Zyb21fZmF1bHRfaGFuZGxlcl90cmFtcG9saW5lX2Zhc3RUTFMsIG1hY3JvICgpCkBA
IC04MTEsMTEgKzgyMSw3IEBAIG1hY3JvIHNsb3dQYXRoRm9yV2FzbUNhbGwoY3R4LCBzbG93UGF0
aCwgc3RvcmVXYXNtSW5zdGFuY2UpCiAgICAgICAgICAgICAgICAgZGVmaW5lUmV0dXJuTGFiZWwo
b3Bjb2RlTmFtZSwgc2l6ZSkKICAgICAgICAgICAgIGVuZCkKIAotICAgICAgICAgICAgbG9hZHAg
Q29kZUJsb2NrW2Nmcl0sIHdzMQotICAgICAgICAgICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2Rl
QmxvY2s6Om1fbnVtQ2FsbGVlTG9jYWxzW3dzMV0sIHdzMQotICAgICAgICAgICAgbHNoaWZ0cCAz
LCB3czEKLSAgICAgICAgICAgIGFkZHAgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwsIHdz
MQotICAgICAgICAgICAgc3VicCBjZnIsIHdzMSwgc3AKKyAgICAgICAgICAgIHJlc3RvcmVTdGFj
a1BvaW50ZXJBZnRlckNhbGwoKQogCiAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gc2V0IFBDIHRv
IGxvYWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLCBidXQgd2UKICAg
ICAgICAgICAgICMgbmVlZCB0byBwcmVzZXJ2ZSBpdHMgY3VycmVudCB2YWx1ZSBzaW5jZSBpdCBt
aWdodCBjb250YWluIGEgcmV0dXJuIHZhbHVlCkBAIC0yODA0LDMgKzI4MTAsNzggQEAgd2FzbU9w
KGF0b21pY19mZW5jZSwgV2FzbURyb3BLZWVwLCBtYWNybyhjdHgpCiAgICAgZmVuY2UKICAgICBk
aXNwYXRjaChjdHgpCiBlbmQpCisKK3dhc21PcCh0aHJvdywgV2FzbVRocm93LCBtYWNybyhjdHgp
CisgICAgY2FsbFdhc21TbG93UGF0aChfc2xvd19wYXRoX3dhc21fdGhyb3cpCisgICAganVtcFRv
RXhjZXB0aW9uKCkKK2VuZCkKKword2FzbU9wKHJldGhyb3csIFdhc21SZXRocm93LCBtYWNybyhj
dHgpCisgICAgY2FsbFdhc21TbG93UGF0aChfc2xvd19wYXRoX3dhc21fcmV0aHJvdykKKyAgICBq
dW1wVG9FeGNlcHRpb24oKQorZW5kKQorCitjb21tb25XYXNtT3Aod2FzbV9jYXRjaCwgV2FzbUNh
dGNoLCBtYWNybygpIGVuZCwgbWFjcm8oY3R4KQorICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0Mwor
ICAgIGNvbnZlcnRDYWxsZWVUb1ZNKHQzKQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0MywgdDApCisgICAgbG9hZHAgVk06OmNhbGxGcmFt
ZUZvckNhdGNoW3QzXSwgY2ZyCisgICAgc3RvcmVwIDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaFt0
M10KKyAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKKworICAgIGxvYWRwIENvZGVC
bG9ja1tjZnJdLCBQQgorICAgIGxvYWRwIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjptX2luc3Ry
dWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgorICAgIGxvYWRwIFZNOjp0YXJnZXRJbnRlcnByZXRl
clBDRm9yVGhyb3dbdDNdLCBQQworICAgIHN1YnAgUEIsIFBDCisKKyAgICAjIFRPRE86IG5lZWRz
IG5vbi1UTFMgdmVyc2lvbgorICAgIHN0b3JlV2FzbUluc3RhbmNlVG9UTFMod2FzbUluc3RhbmNl
KQorICAgIHJlbG9hZE1lbW9yeVJlZ2lzdGVyc0Zyb21JbnN0YW5jZSh3YXNtSW5zdGFuY2UsIHdz
MCwgd3MxKQorCisgICAgY2FsbFdhc21TbG93UGF0aChfc2xvd19wYXRoX3dhc21fcmV0cmlldmVf
YW5kX2NsZWFyX2V4Y2VwdGlvbikKKyAgICBtb3ZlIHIxLCB0MQorCisgICAgd2dldHUoY3R4LCBt
X3N0YXJ0T2Zmc2V0LCB0MikKKyAgICB3Z2V0dShjdHgsIG1fYXJndW1lbnRDb3VudCwgdDMpCisK
KyAgICBsc2hpZnRpIDMsIHQyCisgICAgc3VicCBjZnIsIHQyLCB0MgorCisuY29weUxvb3A6Cisg
ICAgYnRpeiB0MywgLmRvbmUKKyAgICBsb2FkcSBbdDFdLCB0NgorICAgIHN0b3JlcSB0NiwgW3Qy
XQorICAgIHN1YmkgMSwgdDMKKyAgICBzdWJwIDgsIHQyCisgICAgam1wIC5jb3B5TG9vcAorCisu
ZG9uZToKKworICAgIHRyYWNlRXhlY3V0aW9uKCkKKworICAgIGRpc3BhdGNoKGN0eCkKK2VuZCkK
KworY29tbW9uV2FzbU9wKHdhc21fY2F0Y2hfYWxsLCBXYXNtQ2F0Y2hBbGwsIG1hY3JvKCkgZW5k
LCBtYWNybyhjdHgpCisgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQzCisgICAgY29udmVydENhbGxl
ZVRvVk0odDMpCisgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHQzLCB0MCkKKyAgICBsb2FkcCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hbdDNdLCBj
ZnIKKyAgICBzdG9yZXAgMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoW3QzXQorICAgIHJlc3RvcmVT
dGFja1BvaW50ZXJBZnRlckNhbGwoKQorCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisg
ICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRl
cltQQl0sIFBCCisgICAgbG9hZHAgVk06OnRhcmdldEludGVycHJldGVyUENGb3JUaHJvd1t0M10s
IFBDCisgICAgc3VicCBQQiwgUEMKKworICAgICMgVE9ETzogbmVlZHMgbm9uLVRMUyB2ZXJzaW9u
CisgICAgc3RvcmVXYXNtSW5zdGFuY2VUb1RMUyh3YXNtSW5zdGFuY2UpCisgICAgcmVsb2FkTWVt
b3J5UmVnaXN0ZXJzRnJvbUluc3RhbmNlKHdhc21JbnN0YW5jZSwgd3MwLCB3czEpCisKKyAgICBj
YWxsV2FzbVNsb3dQYXRoKF9zbG93X3BhdGhfd2FzbV9yZXRyaWV2ZV9hbmRfY2xlYXJfZXhjZXB0
aW9uKQorCisgICAgdHJhY2VFeGVjdXRpb24oKQorCisgICAgZGlzcGF0Y2goY3R4KQorZW5kKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmlu
ZGV4IDI0ZmNmMDgxNWUyNTA0OTVlMDMxNzk0YTA2ZTRiMzEwNWM3ODRmYjQuLmYzMGZkZjI3ZDk3
OTRiMjQwODZkMjdmOGE2ZWRjNTkzMDI5N2MxNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTE1Myw2ICsxNTMsNyBAQAogI2lu
Y2x1ZGUgIkpTV2Vha1NldC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHkuaCIKICNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlHbG9iYWwuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9y
LmgiCkBAIC0xNjAsNiArMTYxLDcgQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRl
ICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxhenlDbGFzc1N0cnVjdHVyZUlubGluZXMuaCIK
ICNpbmNsdWRlICJMYXp5UHJvcGVydHlJbmxpbmVzLmgiCkBAIC0yMTIsNiArMjE0LDggQEAKICNp
bmNsdWRlICJXZWFrU2V0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJv
dG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oIgor
I2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZS5oIgpAQCAtMjI4LDYg
KzIzMiw4IEBACiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUuaCIK
ICNpbmNsdWRlICJXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJXZWJB
c3NlbWJseVRhYmxlUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWdDb25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgiCiAjaW5jbHVkZSA8
d3RmL1JhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CiAKQEAg
LTE0NTksNiArMTQ2NSwxMiBAQCBjYXBpdGFsTmFtZSAjIyBDb25zdHJ1Y3RvciogbG93ZXJOYW1l
ICMjIENvbnN0cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBjYXBpdGFsTmFtZQogICAgIG1fbGlua1Rp
bWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OndlYkFz
c2VtYmx5SW5zdGFudGlhdGVTdHJlYW1pbmdJbnRlcm5hbCldLmluaXRMYXRlcihbXSAoY29uc3Qg
SW5pdGlhbGl6ZXI8SlNDZWxsPiYgaW5pdCkgewogICAgICAgICAgICAgaW5pdC5zZXQoSlNGdW5j
dGlvbjo6Y3JlYXRlKGluaXQudm0sIGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIp
LCAxLCBTdHJpbmcoKSwgd2ViQXNzZW1ibHlJbnN0YW50aWF0ZVN0cmVhbWluZ0ludGVybmFsKSk7
CiAgICAgICAgIH0pOworICAgIG1fd2ViQXNzZW1ibHlUYWdUeXBlU3RydWN0dXJlLmluaXRMYXRl
cigKKyAgICAgICAgW10gKGNvbnN0IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKKyAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQub3duZXItPm1fb2JqZWN0UHJvdG90eXBl
LmdldCgpLCAxKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbihpbml0LnZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGluaXQudm0sICJwYXJhbWV0
ZXJzIiksIDAsIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVydHlP
ZmZzZXQsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOworICAgICAgICAgICAgaW5pdC5zZXQoc3RydWN0
dXJlKTsKKyAgICAgICAgfSk7CiAjZW5kaWYKIAogICAgIGlmIChPcHRpb25zOjpleHBvc2VQcm9m
aWxlcnNPbkdsb2JhbE9iamVjdCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCBhMzVlZmNlN2M1MjYyZjQ5ZDk4ZDVhYjQyMTNjODgx
YjVjMjcwYWMwLi44ZjMzM2ZjNTFhYTU4OTBiYWNhMjk4MDExYTY0ZTI0ZjE5Y2Q4NWI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTE2
OSwxNCArMTY5LDE2IEBAIGNvbnN0ZXhwciBib29sIHR5cGVFeHBvc2VkQnlEZWZhdWx0ID0gdHJ1
ZTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICNkZWZpbmUgRk9SX0VBQ0hfV0VCQVNTRU1C
TFlfQ09OU1RSVUNUT1JfVFlQRShtYWNybykgXAotICAgIG1hY3JvKFdlYkFzc2VtYmx5Q29tcGls
ZUVycm9yLCB3ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgd2ViQXNzZW1ibHlDb21waWxlRXJyb3Is
IEVycm9ySW5zdGFuY2UsICAgICAgICAgICAgIENvbXBpbGVFcnJvciwgZXJyb3IsIHR5cGVFeHBv
c2VkQnlEZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlDb21waWxlRXJyb3IsIHdlYkFz
c2VtYmx5Q29tcGlsZUVycm9yLCB3ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgRXJyb3JJbnN0YW5j
ZSwgICAgICAgICAgICAgQ29tcGlsZUVycm9yLCBlcnJvciwgIHR5cGVFeHBvc2VkQnlEZWZhdWx0
KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlFeGNlcHRpb24sICAgIHdlYkFzc2VtYmx5RXhjZXB0
aW9uLCAgICB3ZWJBc3NlbWJseUV4Y2VwdGlvbiwgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiwg
ICAgRXhjZXB0aW9uLCAgICBlcnJvciwgIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCiAgICAgbWFj
cm8oV2ViQXNzZW1ibHlHbG9iYWwsICAgICAgIHdlYkFzc2VtYmx5R2xvYmFsLCAgICAgICB3ZWJB
c3NlbWJseUdsb2JhbCwgICAgICAgSlNXZWJBc3NlbWJseUdsb2JhbCwgICAgICAgR2xvYmFsLCAg
ICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCiAgICAgbWFjcm8oV2ViQXNzZW1i
bHlJbnN0YW5jZSwgICAgIHdlYkFzc2VtYmx5SW5zdGFuY2UsICAgICB3ZWJBc3NlbWJseUluc3Rh
bmNlLCAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlLCAgICAgSW5zdGFuY2UsICAgICBvYmplY3Qs
IHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCi0gICAgbWFjcm8oV2ViQXNzZW1ibHlMaW5rRXJyb3Is
ICAgIHdlYkFzc2VtYmx5TGlua0Vycm9yLCAgICB3ZWJBc3NlbWJseUxpbmtFcnJvciwgICAgRXJy
b3JJbnN0YW5jZSwgICAgICAgICAgICAgTGlua0Vycm9yLCAgICBlcnJvciwgdHlwZUV4cG9zZWRC
eURlZmF1bHQpIFwKKyAgICBtYWNybyhXZWJBc3NlbWJseUxpbmtFcnJvciwgICAgd2ViQXNzZW1i
bHlMaW5rRXJyb3IsICAgIHdlYkFzc2VtYmx5TGlua0Vycm9yLCAgICBFcnJvckluc3RhbmNlLCAg
ICAgICAgICAgICBMaW5rRXJyb3IsICAgIGVycm9yLCAgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwK
ICAgICBtYWNybyhXZWJBc3NlbWJseU1lbW9yeSwgICAgICAgd2ViQXNzZW1ibHlNZW1vcnksICAg
ICAgIHdlYkFzc2VtYmx5TWVtb3J5LCAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5LCAgICAgICBN
ZW1vcnksICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKICAgICBtYWNybyhX
ZWJBc3NlbWJseU1vZHVsZSwgICAgICAgd2ViQXNzZW1ibHlNb2R1bGUsICAgICAgIHdlYkFzc2Vt
Ymx5TW9kdWxlLCAgICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlLCAgICAgICBNb2R1bGUsICAgICAg
IG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKLSAgICBtYWNybyhXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvciwgd2ViQXNzZW1ibHlSdW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVudGltZUVy
cm9yLCBFcnJvckluc3RhbmNlLCAgICAgICAgICAgICBSdW50aW1lRXJyb3IsIGVycm9yLCB0eXBl
RXhwb3NlZEJ5RGVmYXVsdCkgXAotICAgIG1hY3JvKFdlYkFzc2VtYmx5VGFibGUsICAgICAgICB3
ZWJBc3NlbWJseVRhYmxlLCAgICAgICAgd2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIEpTV2ViQXNz
ZW1ibHlUYWJsZSwgICAgICAgIFRhYmxlLCAgICAgICAgb2JqZWN0LCB0eXBlRXhwb3NlZEJ5RGVm
YXVsdCkKKyAgICBtYWNybyhXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciwgd2ViQXNzZW1ibHlSdW50
aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVudGltZUVycm9yLCBFcnJvckluc3RhbmNlLCAgICAgICAg
ICAgICBSdW50aW1lRXJyb3IsIGVycm9yLCAgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKKyAgICBt
YWNybyhXZWJBc3NlbWJseVRhYmxlLCAgICAgICAgd2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIHdl
YkFzc2VtYmx5VGFibGUsICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUsICAgICAgICBUYWJsZSwg
ICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKKyAgICBtYWNybyhXZWJBc3Nl
bWJseVRhZywgICAgICAgICAgd2ViQXNzZW1ibHlUYWcsICAgICAgICAgIHdlYkFzc2VtYmx5VGFn
LCAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFnLCAgICAgICAgICBUYWcsICAgICAgICAgIG9iamVj
dCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIAogI2Vsc2UKICNkZWZpbmUgRk9SX0VBQ0hfV0VCQVNT
RU1CTFlfQ09OU1RSVUNUT1JfVFlQRShtYWNybykKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCkBAIC00NDMsNiArNDQ1LDcgQEAgcHVibGljOgogICAgIExhenlQcm9wZXJ0eTxKU0dsb2Jh
bE9iamVjdCwgU3RydWN0dXJlPiBtX3dlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAg
TGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fanNUb1dhc21JQ0NhbGxl
ZVN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4g
bV93ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZTsKKyAgICBMYXp5UHJvcGVydHk8
SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV93ZWJBc3NlbWJseVRhZ1R5cGVTdHJ1Y3R1cmU7
CiAgICAgRk9SX0VBQ0hfV0VCQVNTRU1CTFlfQ09OU1RSVUNUT1JfVFlQRShERUZJTkVfU1RPUkFH
RV9GT1JfTEFaWV9UWVBFKQogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIApAQCAtODUy
LDYgKzg1NSw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHdlYkFzc2VtYmx5RnVuY3Rpb25T
dHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3dlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUu
Z2V0KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiBqc1RvV2FzbUlDQ2FsbGVlU3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9qc1RvV2FzbUlDQ2FsbGVlU3RydWN0dXJlLmdldCh0aGlzKTsgfQog
ICAgIFN0cnVjdHVyZSogd2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBtX3dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlLmdldCh0aGlz
KTsgfQorICAgIFN0cnVjdHVyZSogd2ViQXNzZW1ibHlUYWdUeXBlU3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV93ZWJBc3NlbWJseVRhZ1R5cGVTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIFN0cnVjdHVyZSogY29sbGF0b3JTdHJ1Y3R1
cmUoKSB7IHJldHVybiBtX2NvbGxhdG9yU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVj
dHVyZSogZGF0ZVRpbWVGb3JtYXRTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX2RhdGVUaW1lRm9ybWF0
U3RydWN0dXJlLmdldCh0aGlzKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmlu
ZGV4IDFkZWE2YTEzY2I0YzQyOWI5YjA3MTk4YmFiNmM0NGYzMTQ2OWQwNjguLmFmNDRjZTIyYTk3
YTE5MWIzZTllYjlmNWI0ZDlmYjAwYmFlNmZmN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKQEAgLTEyOSwxMSArMTI5LDEzIEBACiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0UmVm
LmgiCiAjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5R2xvYmFsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlNb2R1bGUuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJM
TEludERhdGEuaCIKICNpbmNsdWRlICJNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIgpAQCAtMzMw
LDYgKzMzMiw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSwgV1RG
OjpSdW5Mb29wKiBydW5Mb29wLCBib29sKiBzdWNjZXNzKQogICAgICwgaW50bFNlZ21lbnRzSGVh
cENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEludGxTZWdtZW50cz4oKSkKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlw
ZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPigpKQorICAg
ICwgd2ViQXNzZW1ibHlFeGNlcHRpb25IZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVh
dGU8SlNXZWJBc3NlbWJseUV4Y2VwdGlvbj4oKSkKICAgICAsIHdlYkFzc2VtYmx5RnVuY3Rpb25I
ZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8V2ViQXNzZW1ibHlGdW5jdGlvbj4o
KSkKICAgICAsIHdlYkFzc2VtYmx5R2xvYmFsSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6
Y3JlYXRlPEpTV2ViQXNzZW1ibHlHbG9iYWw+KCkpCiAgICAgLCB3ZWJBc3NlbWJseUluc3RhbmNl
SGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZT4oKSkKQEAgLTMzNyw2ICszNDAsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUg
aGVhcFR5cGUsIFdURjo6UnVuTG9vcCogcnVuTG9vcCwgYm9vbCogc3VjY2VzcykKICAgICAsIHdl
YkFzc2VtYmx5TW9kdWxlSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEpTV2Vi
QXNzZW1ibHlNb2R1bGU+KCkpCiAgICAgLCB3ZWJBc3NlbWJseU1vZHVsZVJlY29yZEhlYXBDZWxs
VHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxXZWJBc3NlbWJseU1vZHVsZVJlY29yZD4oKSkK
ICAgICAsIHdlYkFzc2VtYmx5VGFibGVIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVh
dGU8SlNXZWJBc3NlbWJseVRhYmxlPigpKQorICAgICwgd2ViQXNzZW1ibHlUYWdIZWFwQ2VsbFR5
cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseVRhZz4oKSkKICNlbmRpZgog
ICAgICwgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiUHJpbWl0aXZlIEdpZ2FjYWdl
IEF1eGlsaWFyeSIsIGhlYXAsIGF1eGlsaWFyeUhlYXBDZWxsVHlwZS5nZXQoKSwgcHJpbWl0aXZl
R2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpIC8vIEhhc2g6MHgzZTdjZDc2MgogICAgICwganNWYWx1
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVh
cCwgYXV4aWxpYXJ5SGVhcENlbGxUeXBlLmdldCgpLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3Iu
Z2V0KCkpIC8vIEhhc2g6MHgyNDFlOTQ2CkBAIC0xNjIwLDYgKzE2MjQsNyBAQCBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRzU3BhY2UsIGludGxTZWdt
ZW50c0hlYXBDZWxsVAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVJfU0xPVyhqc1RvV2FzbUlDQ2FsbGVlU3BhY2UsIGNlbGxIZWFwQ2Vs
bFR5cGUuZ2V0KCksIEpTVG9XYXNtSUNDYWxsZWUpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSwgd2ViQXNzZW1ibHlDb2Rl
QmxvY2tIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spIC8vIEhhc2g6
MHg5YWQ5OTVjZAorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFz
c2VtYmx5RXhjZXB0aW9uU3BhY2UsIHdlYkFzc2VtYmx5RXhjZXB0aW9uSGVhcENlbGxUeXBlLmdl
dCgpLCBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZSwgd2ViQXNzZW1ibHlGdW5jdGlv
bkhlYXBDZWxsVHlwZS5nZXQoKSwgV2ViQXNzZW1ibHlGdW5jdGlvbikgLy8gSGFzaDoweDhiN2Mz
MmRiCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlH
bG9iYWxTcGFjZSwgd2ViQXNzZW1ibHlHbG9iYWxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNz
ZW1ibHlHbG9iYWwpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2Vi
QXNzZW1ibHlJbnN0YW5jZVNwYWNlLCB3ZWJBc3NlbWJseUluc3RhbmNlSGVhcENlbGxUeXBlLmdl
dCgpLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UpCkBAIC0xNjI3LDYgKzE2MzIsNyBAQCBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlNZW1vcnlTcGFjZSwg
d2ViQXNzZW1ibHlNZW1vcgogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9X
KHdlYkFzc2VtYmx5TW9kdWxlU3BhY2UsIHdlYkFzc2VtYmx5TW9kdWxlSGVhcENlbGxUeXBlLmdl
dCgpLCBKU1dlYkFzc2VtYmx5TW9kdWxlKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3BhY2UsIHdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkSGVhcENlbGxUeXBlLmdldCgpLCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCkKIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseVRhYmxlU3BhY2Us
IHdlYkFzc2VtYmx5VGFibGVIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlUYWJsZSkK
K0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseVRhZ1Nw
YWNlLCB3ZWJBc3NlbWJseVRhZ0hlYXBDZWxsVHlwZS5nZXQoKSwgSlNXZWJBc3NlbWJseVRhZykK
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbikgLy8gSGFzaDoweGQ0YTVmZjAxCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKaW5kZXggYmNlZDk4NDNmY2U4MjYyMGU4OGI5NzUwMTgzYWViNjE1NTYyNjA2
OS4uNGY3Y2UyN2Y1NzVmYjVmNzM2ZWUxN2Q0NTdkNGJmMDllYzllODhjYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiVGh1bmtHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJWTVRyYXBzLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIK
KyNpbmNsdWRlICJXYXNtVGFnLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUg
PHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGht
ZXRpYy5oPgpAQCAtNDQ2LDYgKzQ0Nyw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SXNvSGVhcENlbGxUeXBlPiBpbnRsU2VnbWVudHNIZWFwQ2VsbFR5cGU7CiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFzc2Vt
Ymx5Q29kZUJsb2NrSGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2Vs
bFR5cGU+IHdlYkFzc2VtYmx5RXhjZXB0aW9uSGVhcENlbGxUeXBlOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlHbG9iYWxIZWFw
Q2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1i
bHlJbnN0YW5jZUhlYXBDZWxsVHlwZTsKQEAgLTQ1Myw2ICs0NTUsNyBAQCBwdWJsaWM6CiAgICAg
c3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlNb2R1bGVIZWFwQ2Vs
bFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmRIZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxs
VHlwZT4gd2ViQXNzZW1ibHlUYWJsZUhlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseVRhZ0hlYXBDZWxsVHlwZTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKEpJVCkKQEAgLTYxOCw2ICs2MjEsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoanNUb1dh
c21JQ0NhbGxlZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
d2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKHdlYkFzc2VtYmx5RXhjZXB0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUZ1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUdsb2JhbFNwYWNlKQogICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlJbnN0YW5jZVNw
YWNlKQpAQCAtNjI1LDYgKzYyOSw3IEBAIHB1YmxpYzoKICAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5TW9kdWxlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseU1vZHVsZVJlY29yZFNwYWNlKQogICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlUYWJsZVNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlUYWdT
cGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uU3BhY2UpCiAjZW5kaWYKIApAQCAtMTI5Niw2ICsxMzAxLDEwIEBAIHBy
aXZhdGU6CiAgICAgTG9jayBtX2xvb3BIaW50RXhlY3V0aW9uQ291bnRMb2NrOwogICAgIEhhc2hN
YXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBzdGQ6OnBhaXI8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0
cjx1aW50cHRyX3Q+Pj4gbV9sb29wSGludEV4ZWN1dGlvbkNvdW50czsKIAorI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKyAgICBWZWN0b3I8V2FzbTo6VGFnPiBtX3dhc21UYWdzOworI2VuZGlmCisK
ICAgICBWTSogbV9wcmV2OyAvLyBSZXF1aXJlZCBieSBEb3VibHlMaW5rZWRMaXN0Tm9kZS4KICAg
ICBWTSogbV9uZXh0OyAvLyBSZXF1aXJlZCBieSBEb3VibHlMaW5rZWRMaXN0Tm9kZS4KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKaW5k
ZXggNmFhZTljNjdkZmI1NGJmYWVmOTM1ZWQwMDhkZTE1YjViNDU4YTMxYi4uYzQxYWY4NDg1NzFk
MTkxY2U2NDlhNGI1NWMyNGM5Y2NlMzk1MTk5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCkBAIC0xNDcsNyArMTQ3LDEyIEBAIHB1
YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJv
bERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBl
OjpJZjsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250cm9sRGF0YSYgY29u
dHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeTsgfQor
ICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNoKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7
IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2g7IH0KKyAgICAg
ICAgc3RhdGljIGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyBy
ZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoOyB9CiAgICAgICAg
IHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0
dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbDsgfQorICAgICAg
ICBzdGF0aWMgYm9vbCBpc0xvb3AoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJu
IGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wOyB9CisgICAgICAgIHN0YXRp
YyBib29sIGlzQmxvY2soY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRy
b2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpCbG9jazsgfQogCiAgICAgICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICB7CkBAIC0xNjQsNiArMTY5LDEyIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpUb3BMZXZlbDoKICAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIlRvcExldmVsOiAiKTsKICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpUcnk6CisgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCJUcnk6ICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBC
bG9ja1R5cGU6OkNhdGNoOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiQ2F0Y2g6ICIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb3V0LnBy
aW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOwogICAg
ICAgICAgICAgaWYgKHNwZWNpYWwpCkBAIC0zMTQsNiArMzI1LDE2IEBAIHB1YmxpYzoKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJiwgY29u
c3QgU3RhY2smKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNl
VG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOwogCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkVHJ5KEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ss
IENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjayk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNv
bnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0
Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGwoQ29u
dHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRj
aEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRyb2xUeXBlJik7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRGVsZWdhdGVUb1VucmVhY2hh
YmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgU3RhY2smKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXRocm93KHVuc2lnbmVk
LCBDb250cm9sVHlwZSYpOworCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xE
YXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVz
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVz
c2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywg
Q29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNr
KTsKQEAgLTI5ODAsNiArMzAwMSw1NSBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlVG9V
bnJlYWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVy
biB7IH07CiB9CiAKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRyeShCbG9ja1NpZ25hdHVyZSwg
U3RhY2smICwgQ29udHJvbFR5cGUmICwgU3RhY2smICkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVk
IGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSwgQ29u
dHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICAvL3VuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGF0YS5yZXN1bHRz
KTsKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
ZGF0YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRDYXRjaFRvVW5yZWFjaGFibGUoZXhj
ZXB0aW9uSW5kZXgsIGV4Y2VwdGlvblNpZ25hdHVyZSwgZGF0YSwgcmVzdWx0cyk7Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCAsIGNvbnN0
IFNpZ25hdHVyZSYgLCBDb250cm9sVHlwZSYgLCBSZXN1bHRMaXN0JiApIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRj
aEFsbChDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4geyB9Owor
fQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJv
bFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYgKSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUm
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkVGhyb3codW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIFN0YWNrJikgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIFVOVVNFRF9QQVJBTShleGNlcHRpb25JbmRleCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwg
Q29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKwog
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBj
b25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ2FsbElu
Zm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZv
cm1hdGlvbkZvcigqZGF0YS5zaWduYXR1cmUoKSwgQ2FsbFJvbGU6OkNhbGxlZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggMGJl
YjhmYjg0ZDVmMTIwMmIxZjU4ZmNiNDdlZjdhOTI0YzBmNDIwOS4uYzA2NWU1MjllZjI4MWFmZjJh
ZTJhZWFiZjM3ZjkyOWI4NzAzOTcwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMTA5LDcgKzEwOSwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0lmKGNvbnN0IENvbnRyb2xEYXRhJiBj
b250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWY7IH0K
KyAgICAgICAgc3RhdGljIGJvb2wgaXNUcnkoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsg
cmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUcnk7IH0KKyAgICAgICAg
c3RhdGljIGJvb2wgaXNDYXRjaChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4g
Y29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoOyB9CisgICAgICAgIHN0YXRp
YyBib29sIGlzQW55Q2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNv
bnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpDYXRjaDsgfQogICAgICAgICBzdGF0aWMg
Ym9vbCBpc1RvcExldmVsKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250
cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWw7IH0KKyAgICAgICAgc3RhdGlj
IGJvb2wgaXNMb29wKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9s
LmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcDsgfQorICAgICAgICBzdGF0aWMgYm9vbCBp
c0Jsb2NrKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2Nr
VHlwZSgpID09IEJsb2NrVHlwZTo6QmxvY2s7IH0KIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgewpAQCAtMTI2LDYgKzEzMSwxMiBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6VG9wTGV2ZWw6CiAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCJUb3BMZXZlbDogIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEJsb2NrVHlwZTo6VHJ5OgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVHJ5
OiAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBl
OjpDYXRjaDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkNhdGNoOiAiKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5wcmludCgiQ29u
dGludWF0aW9uOiAiLCAqY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKICAgICAgICAgICAg
IGlmIChzcGVjaWFsKQpAQCAtMjczLDYgKzI4NCwxNiBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNr
Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFj
aGFibGUoQ29udHJvbERhdGEmKTsKIAorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9s
VHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWdu
YXR1cmUmLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsKENvbnRyb2xUeXBl
Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGxUb1Vu
cmVhY2hhYmxlKENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250
cm9sVHlwZSYsIENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkVGhyb3codW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIFN0YWNrJik7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJv
bFR5cGUmKTsKKwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVy
bihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBl
IGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xE
YXRhJiBkZWZhdWx0VGFyZ2V0cywgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CkBAIC0y
Mjc3LDYgKzIyOTgsNTUgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJs
ZShDb250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9
CiAKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgLCBD
b250cm9sVHlwZSYgLCBTdGFjayYgKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25J
bmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1
bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRp
bnVhdGlvbik7CisgICAgcmV0dXJuIGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRl
eCwgc2lnbmF0dXJlLCBkYXRhLCByZXN1bHRzKTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xU
eXBlJiwgUmVzdWx0TGlzdCYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4geyB9Owor
fQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsKENvbnRyb2xUeXBlJiBkYXRhKSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgcmV0
dXJuIGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShkYXRhKTsKK30KKworYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjphZGREZWxl
Z2F0ZShDb250cm9sVHlwZSYgdGFyZ2V0LCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBKdW1wLCBvcmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGREZWxl
Z2F0ZVRvVW5yZWFjaGFibGUodGFyZ2V0LCBkYXRhKTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9y
OjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBTdGFjayYpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBVTlVTRURfUEFSQU0oZXhjZXB0aW9uSW5kZXgpOworICAgIHJldHVybiB7
IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJv
bFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKwogYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYg
cmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ2FsbEluZm9ybWF0aW9uIHdh
c21DYWxsSW5mbyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvciht
X3BhcnNlci0+c2lnbmF0dXJlKCksIENhbGxSb2xlOjpDYWxsZWUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAppbmRleCAyMWQ5N2IxM2NlZTBjNjVlMTYzMWM3NmQy
NTg5MzMzMzUzMmVlOTQwLi5kMTVkYWNkMWJiN2NhYWUwYTUzMjlkYTJlOWYxN2Q5OTMzNmIwNDI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcApAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiTExJbnRFeGNl
cHRpb25zLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmgiCiAKQEAgLTY5LDYgKzcwLDM1IEBAIEpJVENhbGxlZTo6SklU
Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5cG9pbnQm
JiBlbnRyeXBvCiB7CiB9CiAKK0xMSW50Q2FsbGVlOjpMTEludENhbGxlZShzdGQ6OnVuaXF1ZV9w
dHI8RnVuY3Rpb25Db2RlQmxvY2s+IGNvZGVCbG9jaywgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8
Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKKyAgICA6IENhbGxlZShX
YXNtOjpDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCisg
ICAgLCBtX2NvZGVCbG9jayhXVEZNb3ZlKGNvZGVCbG9jaykpCit7Cit9CisKK3ZvaWQgTExJbnRD
YWxsZWU6OmxpbmtFeGNlcHRpb25IYW5kbGVycyhWTSYgdm0pCit7CisgICAgSW5zdGFuY2UqIGlu
c3RhbmNlID0gdm0ud2FzbUNvbnRleHQubG9hZCgpOworICAgIGlmIChzaXplX3QgY291bnQgPSBt
X2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7CisgICAgICAgIG1fZXhj
ZXB0aW9uSGFuZGxlcnMucmVzaXplVG9GaXQoY291bnQpOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxl
ckluZm8mIHVubGlua2VkSGFuZGxlciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkp
OworICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2V4Y2VwdGlvbkhhbmRsZXJz
W2ldOworICAgICAgICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KHVubGlua2VkSGFuZGxlci5tX3RhcmdldCkucHRyKCk7CisgICAgICAgICAg
ICBoYW5kbGVyLmluaXRpYWxpemUoaW5zdGFuY2UsIHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0
aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZVdhc21DYXRjaChp
bnN0cnVjdGlvbi53aWR0aDxXYXNtT3Bjb2RlVHJhaXRzPigpKS5jb2RlKCkpKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworY29uc3QgSGFuZGxlckluZm8qIExMSW50Q2FsbGVlOjpoYW5kbGVyRm9y
SW5kZXgoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgVGFnJiB0YWcpCit7CisgICAgaWYg
KCFtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpKQorICAgICAg
ICBsaW5rRXhjZXB0aW9uSGFuZGxlcnModm0pOworICAgIHJldHVybiBIYW5kbGVySW5mbzo6aGFu
ZGxlckZvckluZGV4KG1fZXhjZXB0aW9uSGFuZGxlcnMsIGluZGV4LCB0YWcpOworfQorCiB2b2lk
IExMSW50Q2FsbGVlOjpzZXRFbnRyeXBvaW50KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50
cnlQdHJUYWc+IGVudHJ5cG9pbnQpCiB7CiAgICAgbV9lbnRyeXBvaW50ID0gZW50cnlwb2ludDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAppbmRleCAwODFkYjc2ZTQyZjll
NDBlNDNiOTJjOTgyYWZjZDhjZTk1MGJiMWUxLi4wZmM3NGZlOWJkMmQ2NzYzOGMyZDM1M2FhOGZl
Njc1MzUzZGU1MmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q2FsbGVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCkBA
IC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSAiV2FzbUNvbXBpbGF0aW9uTW9kZS5oIgogI2luY2x1
ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25Db2RlQmxvY2suaCIKKyNp
bmNsdWRlICJXYXNtSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIK
KyNpbmNsdWRlICJXYXNtTExJbnRUaWVyVXBDb3VudGVyLmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJV
cENvdW50LmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKQEAgLTU5
LDYgKzYxLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBj
YWxsZWVTYXZlUmVnaXN0ZXJzKCkgPSAwOwogICAgIHZpcnR1YWwgc3RkOjp0dXBsZTx2b2lkKiwg
dm9pZCo+IHJhbmdlKCkgY29uc3QgPSAwOwogCisgICAgdmlydHVhbCBjb25zdCBIYW5kbGVySW5m
byogaGFuZGxlckZvckluZGV4KFZNJiwgdW5zaWduZWQsIGNvbnN0IFRhZyYpCisgICAgeworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNK
SVQpCiAgICAgdmlydHVhbCB2b2lkIHNldE9TUkVudHJ5Q2FsbGVlKFJlZjxPTUdGb3JPU1JFbnRy
eUNhbGxlZT4mJikKICAgICB7CkBAIC03NSw2ICs4Miw4IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6
CiAgICAgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlOwogICAgIEluZGV4T3JOYW1l
IG1faW5kZXhPck5hbWU7Citwcm90ZWN0ZWQ6CisgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiBtX2V4
Y2VwdGlvbkhhbmRsZXJzOwogfTsKIAogY2xhc3MgSklUQ2FsbGVlIDogcHVibGljIENhbGxlZSB7
CkBAIC0yMDMsNiArMjEyLDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQoKSBjb25zdCBmaW5h
bDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2
ZVJlZ2lzdGVycygpIGZpbmFsOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0ZDo6dHVwbGU8dm9p
ZCosIHZvaWQqPiByYW5nZSgpIGNvbnN0IGZpbmFsOworICAgIEpTX0VYUE9SVF9QUklWQVRFIGNv
bnN0IEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9ySW5kZXgoVk0mLCB1bnNpZ25lZCwgY29uc3QgVGFn
JikgZmluYWw7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCiAgICAgSklUQ2FsbGVl
KiByZXBsYWNlbWVudCgpIHsgcmV0dXJuIG1fcmVwbGFjZW1lbnQuZ2V0KCk7IH0KQEAgLTIxOCwx
NSArMjI4LDE0IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBMTEludFRpZXJVcENvdW50ZXImIHRp
ZXJVcENvdW50ZXIoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+dGllclVwQ291bnRlcigpOyB9Cisg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIGZ1bmN0aW9uQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlQmxvY2suZ2V0KCk7IH0KICNlbmRpZgogCiBwcml2YXRlOgotICAgIExMSW50Q2FsbGVl
KHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4gY29kZUJsb2NrLCBzaXplX3QgaW5k
ZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQot
ICAgICAgICA6IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZSwgaW5kZXgs
IFdURk1vdmUobmFtZSkpCi0gICAgICAgICwgbV9jb2RlQmxvY2soV1RGTW92ZShjb2RlQmxvY2sp
KQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9jb2RlQmxvY2spOwotICAgIH0KKyAg
ICBMTEludENhbGxlZShzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBzaXplX3Qg
aW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJik7CisK
KyAgICB2b2lkIGxpbmtFeGNlcHRpb25IYW5kbGVycyhWTSYpOworCiAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFlfQjNKSVQpCiAgICAgUmVmUHRyPEpJVENhbGxlZT4gbV9yZXBsYWNlbWVudDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCA1OTVhNTNjYmNhYjliOTYw
MWYzZTgyNjg1ZjU2ZTg0OWQ2MzQxMzM0Li44OWIyNDUxMWViYThiNzM0YTU4NGE2ZDQzNzlmYjA4
MWNhZDQwNzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9y
bWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC0y
OSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJJZGVu
dGlmaWVyLmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgogI2luY2x1ZGUg
Ildhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgpAQCAtNzcsNiArNzgsMTkgQEAgaW5saW5lIGJvb2wg
aXNWYWx1ZVR5cGUoVHlwZSB0eXBlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAoraW5saW5lIEpT
U3RyaW5nKiB0eXBlVG9TdHJpbmcoVk0mIHZtLCBUeXBlS2luZCB0eXBlKQoreworICAgICNkZWZp
bmUgVFlQRV9DQVNFKG5hbWUsIC4uLikgXAorICAgICAgICBjYXNlIFR5cGVLaW5kOjpuYW1lOiBc
CisgICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAjbmFtZSk7IFwKKwor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIEZPUl9FQUNIX1dBU01fVFlQRShUWVBFX0NBU0UpCisg
ICAgfQorCisgICAgI3VuZGVmIFRZUEVfQ0FTRQorfQorCiBpbmxpbmUgYm9vbCBpc1N1YnR5cGUo
VHlwZSBzdWIsIFR5cGUgcGFyZW50KQogewogICAgIGlmIChzdWIuaXNOdWxsYWJsZSgpICYmICFw
YXJlbnQuaXNOdWxsYWJsZSgpKQpAQCAtMTE2LDYgKzEzMCw3IEBAIGVudW0gY2xhc3MgRXh0ZXJu
YWxLaW5kIDogdWludDhfdCB7CiAgICAgVGFibGUgPSAxLAogICAgIE1lbW9yeSA9IDIsCiAgICAg
R2xvYmFsID0gMywKKyAgICBFeGNlcHRpb24gPSA0LAogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
SW50PgpAQCAtMTI2LDYgKzE0MSw3IEBAIGlubGluZSBib29sIGlzVmFsaWRFeHRlcm5hbEtpbmQo
SW50IHZhbCkKICAgICBjYXNlIHN0YXRpY19jYXN0PEludD4oRXh0ZXJuYWxLaW5kOjpUYWJsZSk6
CiAgICAgY2FzZSBzdGF0aWNfY2FzdDxJbnQ+KEV4dGVybmFsS2luZDo6TWVtb3J5KToKICAgICBj
YXNlIHN0YXRpY19jYXN0PEludD4oRXh0ZXJuYWxLaW5kOjpHbG9iYWwpOgorICAgIGNhc2Ugc3Rh
dGljX2Nhc3Q8SW50PihFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbik6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzUsNiArMTUxLDcgQEAgc3RhdGlj
X2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6RnVuY3Rpb24pID09IDAsICJX
YXNtIG5lZWRzIEZ1bmN0aW8KIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRlcm5h
bEtpbmQ6OlRhYmxlKSAgICA9PSAxLCAiV2FzbSBuZWVkcyBUYWJsZSB0byBoYXZlIHRoZSB2YWx1
ZSAxIik7CiBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGludD4oRXh0ZXJuYWxLaW5kOjpNZW1v
cnkpICAgPT0gMiwgIldhc20gbmVlZHMgTWVtb3J5IHRvIGhhdmUgdGhlIHZhbHVlIDIiKTsKIHN0
YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6Okdsb2JhbCkgICA9PSAz
LCAiV2FzbSBuZWVkcyBHbG9iYWwgdG8gaGF2ZSB0aGUgdmFsdWUgMyIpOworc3RhdGljX2Fzc2Vy
dChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6RXhjZXB0aW9uKSAgID09IDQsICJXYXNt
IG5lZWRzIEV4Y2VwdGlvbiB0byBoYXZlIHRoZSB2YWx1ZSA0Iik7CiAKIGlubGluZSBjb25zdCBj
aGFyKiBtYWtlU3RyaW5nKEV4dGVybmFsS2luZCBraW5kKQogewpAQCAtMTQzLDYgKzE2MCw3IEBA
IGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKEV4dGVybmFsS2luZCBraW5kKQogICAgIGNh
c2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTogcmV0dXJuICJ0YWJsZSI7CiAgICAgY2FzZSBFeHRlcm5h
bEtpbmQ6Ok1lbW9yeTogcmV0dXJuICJtZW1vcnkiOwogICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpH
bG9iYWw6IHJldHVybiAiZ2xvYmFsIjsKKyAgICBjYXNlIEV4dGVybmFsS2luZDo6RXhjZXB0aW9u
OiByZXR1cm4gImV4Y2VwdGlvbiI7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgcmV0dXJuICI/IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKaW5kZXggZWE3NWZlMmY2YjBmOWEzZjE0ZTc5M2Vk
MTEyNzhlZmQwZTA5YWM3MS4uNzJmM2U2NDEzMmMxN2I5NTExYTNlYmVhNmM2MGQwMDI0YjMyN2I1
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29k
ZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29k
ZUJsb2NrLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjgsOCArMjgsMTAgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNs
dWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNp
bmNsdWRlICJJbnN0cnVjdGlvblN0cmVhbS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oIgorI2luY2x1ZGUgIldhc21IYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIldhc21MTElu
dFRpZXJVcENvdW50ZXIuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KQEAgLTEyMCw2ICsxMjIsMTAgQEAgcHVibGljOgogICAgIGNvbnN0IEp1bXBUYWJs
ZSYganVtcFRhYmxlKHVuc2lnbmVkIHRhYmxlSW5kZXgpIGNvbnN0OwogICAgIHVuc2lnbmVkIG51
bWJlck9mSnVtcFRhYmxlcygpIGNvbnN0OwogCisgICAgc2l6ZV90IG51bWJlck9mRXhjZXB0aW9u
SGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsgfQor
ICAgIFVubGlua2VkSGFuZGxlckluZm8mIGV4Y2VwdGlvbkhhbmRsZXIoaW50IGluZGV4KSB7IHJl
dHVybiBtX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQorICAgIHZvaWQgYWRkRXhjZXB0aW9u
SGFuZGxlcihjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyKSB7IG1fZXhjZXB0aW9u
SGFuZGxlcnMuYXBwZW5kKGhhbmRsZXIpOyB9CisKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZM
aW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47
CiAKQEAgLTEzOSw2ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIE91dE9mTGluZUp1bXBUYXJnZXRz
IG1fb3V0T2ZMaW5lSnVtcFRhcmdldHM7CiAgICAgTExJbnRUaWVyVXBDb3VudGVyIG1fdGllclVw
Q291bnRlcjsKICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2p1bXBUYWJsZXM7CisgICAgVmVjdG9y
PFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CiB9OwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
RnVuY3Rpb25QYXJzZXIuaAppbmRleCAzNzA2ZTViMGYzODY0YzJlOGJkMzc0ZmY2MjA1MmRlMmZl
ZmYzMzhiLi4yZmY1M2YxZjI4NTcyZTZkY2Q4Y2FhMWNiNTc2YWZlYzM4YjQyMTJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaApAQCAtMzcs
NyArMzcsOSBAQCBlbnVtIGNsYXNzIEJsb2NrVHlwZSB7CiAgICAgSWYsCiAgICAgQmxvY2ssCiAg
ICAgTG9vcCwKLSAgICBUb3BMZXZlbAorICAgIFRvcExldmVsLAorICAgIFRyeSwKKyAgICBDYXRj
aCwKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVuY2xvc2luZ1N0YWNrLCB0eXBlbmFtZSBOZXdT
dGFjaz4KQEAgLTE0Nyw2ICsxNDksNyBAQCBwcml2YXRlOgogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlSW5kZXhGb3JMb2NhbCh1aW50MzJfdCYpOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSW5kZXhGb3JHbG9iYWwodWludDMyX3Qm
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUZ1bmN0aW9uSW5k
ZXgodWludDMyX3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZUV4Y2VwdGlvbkluZGV4KHVpbnQzMl90Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2VCcmFuY2hUYXJnZXQodWludDMyX3QmKTsKIAogICAgIHN0cnVjdCBUYWJs
ZUluaXRJbW1lZGlhdGVzIHsKQEAgLTIxMSw2ICsyMTQsMTIgQEAgcHJpdmF0ZToKICAgICB1bnNp
Z25lZCBtX2xvb3BJbmRleCB7IDAgfTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRyb2xU
eXBlPgorc3RhdGljIGJvb2wgaXNUcnlPckNhdGNoKENvbnRyb2xUeXBlJiBkYXRhKQoreworICAg
IHJldHVybiBDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkgfHwgQ29udHJvbFR5cGU6OmlzQ2F0Y2go
ZGF0YSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CiBGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6RnVuY3Rpb25QYXJzZXIoQ29udGV4dCYgY29udGV4dCwgY29uc3QgdWludDhfdCog
ZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCiAgICAgOiBQYXJzZXIoZnVu
Y3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgpCkBAIC01NzUsNiArNTg0LDE2IEBAIGF1dG8gRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRnVuY3Rpb25JbmRleCh1aW50MzJfdCYgcmVzdWx0
SW5kZXgpIC0+IFBhcnRpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
Q29udGV4dD4KK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhjZXB0aW9uSW5k
ZXgodWludDMyX3QmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGV4
Y2VwdGlvbkluZGV4OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4
Y2VwdGlvbkluZGV4KSwgImNhbid0IHBhcnNlIGV4Y2VwdGlvbiBpbmRleCIpOworICAgIFdBU01f
VkFMSURBVE9SX0ZBSUxfSUYoZXhjZXB0aW9uSW5kZXggPj0gbV9pbmZvLmV4Y2VwdGlvbkluZGV4
U3BhY2VTaXplKCksICJleGNlcHRpb24gaW5kZXggIiwgZXhjZXB0aW9uSW5kZXgsICIgaXMgaW52
YWxpZCwgbGltaXQgaXMgIiwgbV9pbmZvLmV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCkpOworICAg
IHJlc3VsdCA9IGV4Y2VwdGlvbkluZGV4OworICAgIHJldHVybiB7IH07Cit9CisKIHRlbXBsYXRl
PHR5cGVuYW1lIENvbnRleHQ+CiBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUJy
YW5jaFRhcmdldCh1aW50MzJfdCYgcmVzdWx0VGFyZ2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CkBA
IC0xMzYyLDYgKzEzODEsMTEzIEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFU
RV9DQVNFKQogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAorICAgIGNhc2UgVHJ5OiB7Cisg
ICAgICAgIEJsb2NrU2lnbmF0dXJlIGlubGluZVNpZ25hdHVyZTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VCbG9ja1NpZ25hdHVyZShtX2luZm8sIGlubGluZVNpZ25hdHVyZSks
ICJjYW4ndCBnZXQgdHJ5J3Mgc2lnbmF0dXJlIik7CisKKyAgICAgICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRihtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3Vt
ZW50Q291bnQoKSwgIlRvbyBmZXcgYXJndW1lbnRzIG9uIHN0YWNrIGZvciB0cnkgYmxvY2suIFRy
eWUgZXhwZWN0cyAiLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9u
bHkgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHdlcmUgcHJlc2VudC4gVHJ5IGJsb2Nr
IGhhcyBzaWduYXR1cmU6ICIsIGlubGluZVNpZ25hdHVyZS0+dG9TdHJpbmcoKSk7CisgICAgICAg
IHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGlubGluZVNpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
aW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgICAgIFdBU01f
VkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2tbb2Zmc2V0ICsgaV0udHlwZSgpICE9
IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSksICJUcnkgZXhwZWN0cyB0aGUgYXJndW1lbnQg
YXQgaW5kZXgiLCBpLCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSkua2lu
ZCwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgbV9leHByZXNzaW9uU3RhY2tbaV0udHlwZSgp
LmtpbmQpOworCisgICAgICAgIGludDY0X3Qgb2xkU2l6ZSA9IG1fZXhwcmVzc2lvblN0YWNrLnNp
emUoKTsKKyAgICAgICAgU3RhY2sgbmV3U3RhY2s7CisgICAgICAgIENvbnRyb2xUeXBlIGNvbnRy
b2w7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFRyeShpbmxpbmVTaWduYXR1
cmUsIG1fZXhwcmVzc2lvblN0YWNrLCBjb250cm9sLCBuZXdTdGFjaykpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKG9sZFNpemUsIG9sZFNpemUgLSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgPT0g
aW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOworICAgICAgICBBU1NFUlQobmV3U3Rh
Y2suc2l6ZSgpID09IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKKworICAgICAg
ICBtX2NvbnRyb2xTdGFjay5hcHBlbmQoeyBXVEZNb3ZlKG1fZXhwcmVzc2lvblN0YWNrKSwgeyB9
LCBXVEZNb3ZlKGNvbnRyb2wpIH0pOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IFdURk1v
dmUobmV3U3RhY2spOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGNhc2UgQ2F0
Y2g6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2NvbnRyb2xTdGFjay5zaXplKCkg
PT0gMSwgImNhbid0IHVzZSBjYXRjaCBibG9jayBhdCB0aGUgdG9wLWxldmVsIG9mIGEgZnVuY3Rp
b24iKTsKKworICAgICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRleDsKKyAgICAgICAgV0FTTV9G
QUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7
CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVy
ZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOworICAgICAgICBj
b25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9u
OjpnZXQoc2lnbmF0dXJlSW5kZXgpOworCisgICAgICAgIENvbnRyb2xFbnRyeSYgY29udHJvbEVu
dHJ5ID0gbV9jb250cm9sU3RhY2subGFzdCgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKCFpc1RyeU9yQ2F0Y2goY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSwgImNhdGNoIGJsb2Nr
IGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyh1bmlmeShjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKworICAgICAgICBtX2V4
cHJlc3Npb25TdGFjayA9IHsgfTsKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRzOworICAgICAg
ICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYXRjaChleGNlcHRpb25JbmRleCwgZXhjZXB0
aW9uU2lnbmF0dXJlLCBjb250cm9sRW50cnkuY29udHJvbERhdGEsIHJlc3VsdHMpKTsKKworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09
IHJlc3VsdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2Vw
dGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQo
aSksIHJlc3VsdHNbaV0pOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGNhc2Ug
Q2F0Y2hBbGw6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2NvbnRyb2xTdGFjay5z
aXplKCkgPT0gMSwgImNhbid0IHVzZSBjYXRjaCBibG9jayBhdCB0aGUgdG9wLWxldmVsIG9mIGEg
ZnVuY3Rpb24iKTsKKworICAgICAgICBDb250cm9sRW50cnkmIGNvbnRyb2xFbnRyeSA9IG1fY29u
dHJvbFN0YWNrLmxhc3QoKTsKKworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1Ry
eU9yQ2F0Y2goY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSwgImNhdGNoIGJsb2NrIGlzbid0IGFz
c29jaWF0ZWQgdG8gYSB0cnkiKTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1
bmlmeShjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKworICAgICAgICBtX2V4cHJlc3Npb25T
dGFjayA9IHsgfTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2hBbGwo
Y29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgY2FzZSBEZWxlZ2F0ZTogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fY29u
dHJvbFN0YWNrLnNpemUoKSA9PSAxLCAiY2FuJ3QgdXNlIGRlbGVnYXRlIGF0IHRoZSB0b3AtbGV2
ZWwgb2YgYSBmdW5jdGlvbiIpOworCisgICAgICAgIHVpbnQzMl90IHRhcmdldDsKKyAgICAgICAg
V0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUJyYW5jaFRhcmdldCh0YXJnZXQpKTsKKwor
ICAgICAgICBDb250cm9sRW50cnkgY29udHJvbEVudHJ5ID0gbV9jb250cm9sU3RhY2sudGFrZUxh
c3QoKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighQ29udHJvbFR5cGU6OmlzVHJ5
KGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSksICJkZWxlZ2F0ZSBpc24ndCBhc3NvY2lhdGVkIHRv
IGEgdHJ5Iik7CisKKyAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1tt
X2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0XS5jb250cm9sRGF0YTsKKyAgICAgICAg
Ly9kYXRhTG9nTG4oImlzQmxvY2s6ICIsIENvbnRyb2xUeXBlOjppc0Jsb2NrKGRhdGEpKTsKKyAg
ICAgICAgLy9kYXRhTG9nTG4oImlzVG9wTGV2ZWw6ICIsIENvbnRyb2xUeXBlOjppc1RvcExldmVs
KGRhdGEpKTsKKyAgICAgICAgLy9kYXRhTG9nTG4oImlzTG9vcDogIiwgQ29udHJvbFR5cGU6Omlz
TG9vcChkYXRhKSk7CisgICAgICAgIC8vZGF0YUxvZ0xuKCJpc0lmOiAiLCBDb250cm9sVHlwZTo6
aXNJZihkYXRhKSk7CisgICAgICAgIC8vZGF0YUxvZ0xuKCJpc1RyeTogIiwgQ29udHJvbFR5cGU6
OmlzVHJ5KGRhdGEpKTsKKyAgICAgICAgLy9kYXRhTG9nTG4oImlzQ2F0Y2g6ICIsIENvbnRyb2xU
eXBlOjppc0NhdGNoKGRhdGEpKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighQ29u
dHJvbFR5cGU6OmlzVHJ5KGRhdGEpICYmICFDb250cm9sVHlwZTo6aXNUb3BMZXZlbChkYXRhKSwg
ImRlbGVnYXRlIHRhcmdldCBpc24ndCBhIHRyeSBibG9jayIpOworCisgICAgICAgIFdBU01fRkFJ
TF9JRl9IRUxQRVJfRkFJTFModW5pZnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSk7CisgICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZERlbGVnYXRlKGRhdGEsIGNvbnRyb2xFbnRy
eS5jb250cm9sRGF0YSkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGNhc2Ug
VGhyb3c6IHsKKyAgICAgICAgdWludDMyX3QgZXhjZXB0aW9uSW5kZXg7CisgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VFeGNlcHRpb25JbmRleChleGNlcHRpb25JbmRleCkp
OworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1faW5mby5zaWduYXR1
cmVJbmRleEZyb21FeGNlcHRpb25JbmRleFNwYWNlKGV4Y2VwdGlvbkluZGV4KTsKKyAgICAgICAg
Y29uc3QgU2lnbmF0dXJlJiBleGNlcHRpb25TaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlv
bjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksICJUb28gZmV3IGFyZ3VtZW50cyBvbiBzdGFjayBmb3IgdGhlIGV4Y2VwdGlvbiBiZWlu
ZyB0aHJvd24uIFRoZSBleGNlcHRpb24gZXhwZWN0cyAiLCBleGNlcHRpb25TaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIg
d2VyZSBwcmVzZW50LiBFeGNlcHRpb24gaGFzIHNpZ25hdHVyZTogIiwgZXhjZXB0aW9uU2lnbmF0
dXJlLnRvU3RyaW5nKCkpOworICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2V4cHJlc3Npb25T
dGFjay5zaXplKCkgLSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKTsgKytpKQorICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Np
b25TdGFja1tvZmZzZXQgKyBpXS50eXBlKCkgIT0gZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50
KGkpLCAiVGhlIGV4Y2VwdGlvbiBiZWluZyB0aHJvd24gZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQg
aW5kZXggIiwgaSwgIiB0byBiZSAiLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSkua2lu
ZCwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgbV9leHByZXNzaW9uU3RhY2tbaV0udHlwZSgp
LmtpbmQpOworCisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFRocm93KGV4Y2Vw
dGlvbkluZGV4LCBtX2V4cHJlc3Npb25TdGFjaykpOworICAgICAgICBtX3VucmVhY2hhYmxlQmxv
Y2tzID0gMTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIFJldGhyb3c6
IHsKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVS
X0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xUeXBl
JiBkYXRhID0gbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdl
dF0uY29udHJvbERhdGE7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xU
eXBlOjppc0FueUNhdGNoKGRhdGEpLCAicmV0aHJvdyBkb2Vzbid0IHJlZmVyIHRvIGEgY2F0Y2gg
YmxvY2siKTsKKworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRSZXRocm93KHRh
cmdldCwgZGF0YSkpOworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjYXNlIEJyOgogICAgIGNhc2UgQnJJZjogewogICAg
ICAgICB1aW50MzJfdCB0YXJnZXQ7CkBAIC0xNTE2LDYgKzE2NDIsNTcgQEAgYXV0byBGdW5jdGlv
blBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFs
UmVzdWx0CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgY2FzZSBDYXRjaDogewor
ICAgICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hF
TFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisgICAgICAg
IFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJv
bUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOworICAgICAgICBjb25zdCBTaWdu
YXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2ln
bmF0dXJlSW5kZXgpOworCisgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKKyAg
ICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9j
b250cm9sU3RhY2subGFzdCgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1Ry
eU9yQ2F0Y2goZGF0YS5jb250cm9sRGF0YSksICJjYXRjaCBibG9jayBpc24ndCBhc3NvY2lhdGVk
IHRvIGEgdHJ5Iik7CisKKyAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDA7CisgICAgICAg
IG1fZXhwcmVzc2lvblN0YWNrID0geyB9OworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7Cisg
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNl
cHRpb25JbmRleCwgZXhjZXB0aW9uU2lnbmF0dXJlLCBkYXRhLmNvbnRyb2xEYXRhLCByZXN1bHRz
KSk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSA9PSByZXN1bHRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAg
ICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0dXJl
LmFyZ3VtZW50KGkpLCByZXN1bHRzW2ldKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
KyAgICBjYXNlIENhdGNoQWxsOiB7CisgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4g
MSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBkYXRh
ID0gbV9jb250cm9sU3RhY2subGFzdCgpOworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0g
MDsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSB7IH07CisgICAgICAgIFdBU01fVkFMSURB
VE9SX0ZBSUxfSUYoIWlzVHJ5T3JDYXRjaChkYXRhLmNvbnRyb2xEYXRhKSwgImNhdGNoIGJsb2Nr
IGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoYWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKGRhdGEuY29udHJvbERhdGEpKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIERlbGVnYXRlOiB7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09IDEsICJjYW4ndCB1c2Ug
ZGVsZWdhdGUgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisKKyAgICAgICAgdWlu
dDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJh
bmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xFbnRyeSBjb250cm9sRW50cnkg
PSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKCFDb250cm9sVHlwZTo6aXNUcnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSwgImRlbGVn
YXRlIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKworICAgICAgICBDb250cm9sVHlwZSYg
ZGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRd
LmNvbnRyb2xEYXRhOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlw
ZTo6aXNUcnkoZGF0YSkgJiYgIUNvbnRyb2xUeXBlOjppc1RvcExldmVsKGRhdGEpLCAiZGVsZWdh
dGUgdGFyZ2V0IGlzbid0IGEgdHJ5IGJsb2NrIik7CisKKyAgICAgICAgV0FTTV9UUllfQUREX1RP
X0NPTlRFWFQoYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKGRhdGEsIGNvbnRyb2xFbnRyeS5jb250
cm9sRGF0YSkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIGNhc2UgRW5kOiB7
CiAgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID09IDEpIHsKICAgICAgICAgICAgIENv
bnRyb2xFbnRyeSBkYXRhID0gbV9jb250cm9sU3RhY2sudGFrZUxhc3QoKTsKQEAgLTE1MzUsNiAr
MTcxMiw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVF
eHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogCiAgICAgY2FzZSBMb29wOgogICAgIGNhc2Ug
SWY6CisgICAgY2FzZSBUcnk6CiAgICAgY2FzZSBCbG9jazogewogICAgICAgICBtX3VucmVhY2hh
YmxlQmxvY2tzKys7CiAgICAgICAgIEJsb2NrU2lnbmF0dXJlIHVudXNlZDsKQEAgLTE2MDYsMTIg
KzE3ODQsMjAgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJs
ZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgfQogCiAgICAgY2FzZSBCcjoKLSAg
ICBjYXNlIEJySWY6IHsKKyAgICBjYXNlIEJySWY6CisgICAgY2FzZSBSZXRocm93OiB7CiAgICAg
ICAgIHVpbnQzMl90IHRhcmdldDsKICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhw
YXJzZUJyYW5jaFRhcmdldCh0YXJnZXQpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAK
KyAgICBjYXNlIFRocm93OiB7CisgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4OworICAg
ICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhjZXB0
aW9uSW5kZXgpKTsKKworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIGNhc2UgSTMy
Q29uc3Q6IHsKICAgICAgICAgaW50MzJfdCB1bnVzZWQ7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFySW50MzIodW51c2VkKSwgImNhbid0IGdldCBpbW1lZGlhdGUgZm9yICIs
IG1fY3VycmVudE9wY29kZSwgIiBpbiB1bnJlYWNoYWJsZSBjb250ZXh0Iik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZWQ1
ZGJiOTJmNzNiNDJjZTRlZTYxM2M2NTZhZTEwMmU4ZmQ3YTg5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcApAQCAtMCwwICsx
LDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUhhbmRsZXJJbmZvLmgiCisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKKworbmFtZXNw
YWNlIEpTQyB7CituYW1lc3BhY2UgV2FzbSB7CisKK3ZvaWQgSGFuZGxlckluZm86OmluaXRpYWxp
emUoSW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtl
ZEluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGxhYmVsKQor
eworICAgIG1fdHlwZSA9IHVubGlua2VkSW5mby5tX3R5cGU7CisgICAgbV9zdGFydCA9IHVubGlu
a2VkSW5mby5tX3N0YXJ0OworICAgIG1fZW5kID0gdW5saW5rZWRJbmZvLm1fZW5kOworICAgIG1f
dGFyZ2V0ID0gdW5saW5rZWRJbmZvLm1fdGFyZ2V0OworICAgIG1fdHJ5RGVwdGggPSB1bmxpbmtl
ZEluZm8ubV90cnlEZXB0aDsKKyAgICBtX25hdGl2ZUNvZGUgPSBsYWJlbDsKKworICAgIHN3aXRj
aCAobV90eXBlKSB7CisgICAgY2FzZSBIYW5kbGVyVHlwZTo6Q2F0Y2g6CisgICAgICAgIG1fdGFn
ID0gJmluc3RhbmNlLT50YWcodW5saW5rZWRJbmZvLm1fZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRl
VGFyZ2V0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhhbmRsZXJUeXBlOjpDYXRjaEFs
bDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZToKKyAg
ICAgICAgbV9kZWxlZ2F0ZVRhcmdldCA9IHVubGlua2VkSW5mby5tX2V4Y2VwdGlvbkluZGV4T3JE
ZWxlZ2F0ZVRhcmdldDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitjb25zdCBIYW5kbGVy
SW5mbyogSGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRleChjb25zdCBWZWN0b3I8SGFuZGxlcklu
Zm8+JiBleGVwdGlvbkhhbmRsZXJzLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgV2FzbTo6VGFnJiBl
eGNlcHRpb25UYWcpCit7CisgICAgYm9vbCBkZWxlZ2F0aW5nID0gZmFsc2U7CisgICAgdW5zaWdu
ZWQgZGVsZWdhdGVUYXJnZXQgPSAwOworICAgIGZvciAoYXV0byYgaGFuZGxlciA6IGV4ZXB0aW9u
SGFuZGxlcnMpIHsKKyAgICAgICAgLy8gSGFuZGxlcnMgYXJlIG9yZGVyZWQgaW5uZXJtb3N0IGZp
cnN0LCBzbyB0aGUgZmlyc3QgaGFuZGxlciB3ZSBlbmNvdW50ZXIKKyAgICAgICAgLy8gdGhhdCBj
b250YWlucyB0aGUgc291cmNlIGFkZHJlc3MgaXMgdGhlIGNvcnJlY3QgaGFuZGxlciB0byB1c2Uu
CisgICAgICAgIC8vIFRoaXMgaW5kZXggdXNlZCBpcyBlaXRoZXIgdGhlIEJ5dGVjb2RlT2Zmc2V0
IG9yIGEgQ2FsbFNpdGVJbmRleC4KKyAgICAgICAgaWYgKGhhbmRsZXIubV9zdGFydCA8PSBpbmRl
eCAmJiBoYW5kbGVyLm1fZW5kID4gaW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChkZWxlZ2F0aW5n
KSB7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIubV90cnlEZXB0aCAhPSBkZWxlZ2F0ZVRh
cmdldCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGVs
ZWdhdGluZyA9IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG1hdGNo
ID0gZmFsc2U7CisgICAgICAgICAgICBzd2l0Y2ggKGhhbmRsZXIubV90eXBlKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBIYW5kbGVyVHlwZTo6Q2F0Y2g6CisgICAgICAgICAgICAgICAgICAgIG1h
dGNoID0gKmhhbmRsZXIubV90YWcgPT0gZXhjZXB0aW9uVGFnOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEhhbmRsZXJUeXBlOjpDYXRjaEFsbDoKKyAg
ICAgICAgICAgICAgICAgICAgbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZToKKyAgICAgICAg
ICAgICAgICAgICAgZGVsZWdhdGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGRlbGVn
YXRlVGFyZ2V0ID0gaGFuZGxlci5tX2RlbGVnYXRlVGFyZ2V0OworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFtYXRjaCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgcmV0dXJuICZoYW5kbGVyOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1MzU0MjYx
OTYzMTdhMWRlM2MwN2ZlZGJjODk2ODMxNzA1ZWE3NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaApAQCAtMCwwICsxLDk4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ29kZUxvY2F0aW9u
LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3Bh
Y2UgV2FzbSB7CisKK2NsYXNzIEluc3RhbmNlOworY2xhc3MgVGFnOworCitlbnVtIGNsYXNzIEhh
bmRsZXJUeXBlIHsKKyAgICBDYXRjaCA9IDAsCisgICAgQ2F0Y2hBbGwgPSAxLAorICAgIERlbGVn
YXRlID0gMiwKK307CisKK3N0cnVjdCBIYW5kbGVySW5mb0Jhc2UgeworICAgIEhhbmRsZXJUeXBl
IG1fdHlwZTsKKyAgICB1aW50MzJfdCBtX3N0YXJ0OworICAgIHVpbnQzMl90IG1fZW5kOworICAg
IHVpbnQzMl90IG1fdGFyZ2V0OworICAgIHVpbnQzMl90IG1fdHJ5RGVwdGg7CisgICAgdWludDMy
X3QgbV9leGNlcHRpb25JbmRleE9yRGVsZWdhdGVUYXJnZXQ7Cit9OworCitzdHJ1Y3QgVW5saW5r
ZWRIYW5kbGVySW5mbyA6IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgeworICAgIFVubGlua2VkSGFu
ZGxlckluZm8oKQorICAgIHsKKyAgICB9CisKKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKEhhbmRs
ZXJUeXBlIGhhbmRsZXJUeXBlLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgZW5kLCB1aW50MzJf
dCB0YXJnZXQsIHVpbnQzMl90IHRyeURlcHRoLCB1aW50MzJfdCBleGNlcHRpb25JbmRleE9yRGVs
ZWdhdGVUYXJnZXQpCisgICAgeworICAgICAgICBtX3R5cGUgPSBoYW5kbGVyVHlwZTsKKyAgICAg
ICAgbV9zdGFydCA9IHN0YXJ0OworICAgICAgICBtX2VuZCA9IGVuZDsKKyAgICAgICAgbV90YXJn
ZXQgPSB0YXJnZXQ7CisgICAgICAgIG1fdHJ5RGVwdGggPSB0cnlEZXB0aDsKKyAgICAgICAgbV9l
eGNlcHRpb25JbmRleE9yRGVsZWdhdGVUYXJnZXQgPSBleGNlcHRpb25JbmRleE9yRGVsZWdhdGVU
YXJnZXQ7CisgICAgfQorfTsKKworc3RydWN0IEhhbmRsZXJJbmZvIDogcHVibGljIEhhbmRsZXJJ
bmZvQmFzZSB7CisgICAgc3RhdGljIGNvbnN0IEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9ySW5kZXgo
Y29uc3QgVmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhlcHRpb25IYW5kbGVycywgdW5zaWduZWQgaW5k
ZXgsIGNvbnN0IFdhc206OlRhZyYgZXhjZXB0aW9uVGFnKTsKKworICAgIHZvaWQgaW5pdGlhbGl6
ZShJbnN0YW5jZSosIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mLCBDb2RlTG9jYXRpb25MYWJl
bDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPik7CisKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRhZygp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IEhhbmRsZXJUeXBlOjpDYXRj
aCk7CisgICAgICAgIHJldHVybiAqbV90YWc7CisgICAgfQorCisgICAgdW5zaWduZWQgZGVsZWdh
dGVUYXJnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBIYW5kbGVy
VHlwZTo6RGVsZWdhdGUpOworICAgICAgICByZXR1cm4gbV9kZWxlZ2F0ZVRhcmdldDsKKyAgICB9
CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBtX25hdGl2
ZUNvZGU7CisKK3ByaXZhdGU6CisgICAgdW5pb24geworICAgICAgICBjb25zdCBXYXNtOjpUYWcq
IG1fdGFnOworICAgICAgICB1bnNpZ25lZCBtX2RlbGVnYXRlVGFyZ2V0OworICAgIH07Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAppbmRleCA2MGUx
NGNiNWFjMDY1ODI0NDM0Mzc4MDlkNTQ2MzNlZGY3MWNjOGI5Li42YTNjYWE1ZDA3MGJjZjU2Njlm
NmE0Mzk2ZjUzM2MxY2M4ZmE2Y2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtSW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuaApAQCAtMjEwLDYgKzIxMCw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9zdG9yZVRv
cENhbGxGcmFtZShjYWxsRnJhbWUpOwogICAgIH0KIAorICAgIHZvaWQgYWRkVGFnKFRhZyB0YWcp
IHsgbV9leGNlcHRpb25zLmFwcGVuZCh0YWcpOyB9CisgICAgY29uc3QgVGFnJiB0YWcodW5zaWdu
ZWQgaSkgY29uc3QgeyByZXR1cm4gbV9leGNlcHRpb25zW2ldOyB9CisKIHByaXZhdGU6CiAgICAg
SW5zdGFuY2UoQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIEVudHJ5RnJhbWUqKiwgdm9pZCoqLCBT
dG9yZVRvcENhbGxGcmFtZUNhbGxiYWNrJiYpOwogICAgIApAQCAtMjM3LDYgKzI0MCw3IEBAIHBy
aXZhdGU6CiAgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmPEdsb2JhbD4sIEludEhhc2g8dWludDMy
X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9saW5r
ZWRHbG9iYWxzOwogICAgIEJpdFZlY3RvciBtX3Bhc3NpdmVFbGVtZW50czsKICAgICBCaXRWZWN0
b3IgbV9wYXNzaXZlRGF0YVNlZ21lbnRzOworICAgIFZlY3RvcjxUYWc+IG1fZXhjZXB0aW9uczsK
IH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAppbmRleCBmYzA3ODFmMzUzNTg4ZGZh
NTJlMWI0MTUyYzkwMjBjODFjOTA3YmFiLi5kODgxZjk1ZWU2ZTlmMzhlNzBkNTdhYjkyOGNhOTBi
NDc4OGE4OTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dEdlbmVyYXRvci5jcHAKQEAgLTYyLDggKzYyLDMxIEBAIHB1YmxpYzoKICAgICAgICAgUmVmPExh
YmVsPiBtX2FsdGVybmF0ZTsKICAgICB9OwogCi0gICAgc3RydWN0IENvbnRyb2xUeXBlIDogcHVi
bGljIFZhcmlhbnQ8Q29udHJvbExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBD
b250cm9sSWY+IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IFZhcmlhbnQ8Q29udHJvbExvb3AsIENv
bnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWY+OworICAgIHN0cnVjdCBDb250
cm9sVHJ5IHsKKyAgICAgICAgUmVmPExhYmVsPiBtX3RyeTsKKyAgICAgICAgdW5zaWduZWQgbV90
cnlEZXB0aDsKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBDYXRjaEtpbmQgeworICAgICAgICBD
YXRjaCwKKyAgICAgICAgQ2F0Y2hBbGwsCisgICAgICAgIERlbGVnYXRlLAorICAgIH07CisKKyAg
ICBzdHJ1Y3QgQ29udHJvbENhdGNoIHsKKyAgICAgICAgQ2F0Y2hLaW5kIG1fa2luZDsKKyAgICAg
ICAgUmVmPExhYmVsPiBtX3RyeVN0YXJ0OworICAgICAgICBSZWY8TGFiZWw+IG1fdHJ5RW5kOwor
ICAgICAgICB1bnNpZ25lZCBtX3RyeURlcHRoOworICAgIH07CisKKyAgICBzdHJ1Y3QgQ2F0Y2hS
ZXdyaXRlSW5mbyB7CisgICAgICAgIHVuc2lnbmVkIG1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAg
ICAgIHVuc2lnbmVkIG1fdHJ5RGVwdGg7CisgICAgfTsKKworICAgIHN0cnVjdCBDb250cm9sVHlw
ZSA6IHB1YmxpYyBWYXJpYW50PENvbnRyb2xMb29wLCBDb250cm9sVG9wTGV2ZWwsIENvbnRyb2xC
bG9jaywgQ29udHJvbElmLCBDb250cm9sVHJ5LCBDb250cm9sQ2F0Y2g+IHsKKyAgICAgICAgdXNp
bmcgQmFzZSA9IFZhcmlhbnQ8Q29udHJvbExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJs
b2NrLCBDb250cm9sSWYsIENvbnRyb2xUcnksIENvbnRyb2xDYXRjaD47CiAKICAgICAgICAgQ29u
dHJvbFR5cGUoKQogICAgICAgICAgICAgOiBCYXNlKENvbnRyb2xCbG9jayB7IH0pCkBAIC05MCw4
ICsxMTMsMjkgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25h
dHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29u
dGludWF0aW9uKSwgQ29udHJvbElmIHsgV1RGTW92ZShhbHRlcm5hdGUpIH0pOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RhdGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkg
eyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sSWY+KGNvbnRyb2wpOyB9Cisg
ICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSB0cnlfKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwg
dW5zaWduZWQgc3RhY2tTaXplLCBSZWY8TGFiZWw+JiYgdHJ5XywgUmVmUHRyPExhYmVsPiYmIGNv
bnRpbnVhdGlvbiwgdW5zaWduZWQgdHJ5RGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xUcnkgeyBXVEZNb3ZlKHRy
eV8pLCB0cnlEZXB0aCB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBDb250cm9sVHlw
ZSBjYXRjaF8oQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJl
ZjxMYWJlbD4mJiB0cnlTdGFydCwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbiwgUmVmPExh
YmVsPiB0cnlFbmQsIHVuc2lnbmVkIHRyeURlcHRoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFyZ3Vt
ZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sQ2F0Y2ggeyBDYXRjaEtp
bmQ6OkNhdGNoLCBXVEZNb3ZlKHRyeVN0YXJ0KSwgV1RGTW92ZSh0cnlFbmQpLCB0cnlEZXB0aH0p
OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgaXNMb29wKGNvbnN0IENvbnRyb2xU
eXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29w
Pihjb250cm9sKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1RvcExldmVsKGNvbnN0IENvbnRy
b2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xU
b3BMZXZlbD4oY29udHJvbCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNCbG9jayhjb25zdCBD
b250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250
cm9sQmxvY2s+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29u
dHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJv
bElmPihjb250cm9sKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250cm9s
VHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sVHJ5
Pihjb250cm9sKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0FueUNhdGNoKGNvbnN0IENvbnRy
b2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xD
YXRjaD4oY29udHJvbCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNDYXRjaChjb25zdCBDb250
cm9sVHlwZSYgY29udHJvbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPENvbnRyb2xDYXRjaD4oY29udHJvbCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgQ29udHJvbENhdGNoIGNhdGNoXyA9IFdURjo6Z2V0PENv
bnRyb2xDYXRjaD4oY29udHJvbCk7CisgICAgICAgICAgICByZXR1cm4gY2F0Y2hfLm1fa2luZCA9
PSBDYXRjaEtpbmQ6OkNhdGNoOworICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgc3RhY2tT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1NpemU7IH0KICAgICAgICAgQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmU7IH0KQEAgLTE1Niw2ICsy
MDAsOSBAQCBwdWJsaWM6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+
IGZpbmFsaXplKCk7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGU+CisgICAgdm9pZCBy
ZXBhdGNoKGNvbnN0IENhdGNoUmV3cml0ZUluZm8mKTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEV4cHJlc3Npb25MaXN0QSwgdHlwZW5hbWUgRXhwcmVzc2lvbkxpc3RCPgogICAgIHZvaWQgdW5p
ZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3RBJiBkZXN0aW5hdGlvbnMsIGNv
bnN0IEV4cHJlc3Npb25MaXN0QiYgdmFsdWVzKQogICAgIHsKQEAgLTI0Myw2ICsyOTAsMTYgQEAg
cHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29u
dHJvbFR5cGUmLCBTdGFjayYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJik7CiAKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3Np
bmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25J
bmRleCwgY29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVu
c2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBDb250cm9sVHlwZSYsIFJl
c3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRj
aEFsbChDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5
cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZVRv
VW5yZWFjaGFibGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBT
dGFjayYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldGhyb3co
dW5zaWduZWQsIENvbnRyb2xUeXBlJik7CisKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbFR5cGUmLCBTdGFjayYgcmV0dXJuVmFsdWVz
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJv
bFR5cGUmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFN0YWNrJiByZXR1cm5WYWx1ZXMpOwog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZSo+JiB0YXJnZXRzLCBDb250
cm9sVHlwZSYgZGVmYXVsdFRhcmdldHMsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwpAQCAtNDQw
LDYgKzQ5NywxMSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IG1f
cmVzdWx0czsKICAgICBDaGVja2VkPHVuc2lnbmVkPiBtX3N0YWNrU2l6ZSB7IDAgfTsKICAgICBD
aGVja2VkPHVuc2lnbmVkPiBtX21heFN0YWNrU2l6ZSB7IDAgfTsKKyAgICBDaGVja2VkPHVuc2ln
bmVkPiBtX3RyeURlcHRoIHsgMCB9OworICAgIENoZWNrZWQ8dW5zaWduZWQ+IG1fbWF4VHJ5RGVw
dGggeyAwIH07CisgICAgVmVjdG9yPENhdGNoUmV3cml0ZUluZm8+IG1fcmV0aHJvd3M7CisgICAg
VmVjdG9yPENhdGNoUmV3cml0ZUluZm8+IG1fY2F0Y2hlczsKKyAgICBWZWN0b3I8Q2F0Y2hSZXdy
aXRlSW5mbz4gbV9jYXRjaEFsbHM7CiB9OwogCiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVu
Y3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVp
bnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4KQpAQCAtNDg1LDkgKzU0NywzMSBAQCBMTEludEdlbmVyYXRvcjo6TExJbnRH
ZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9u
SQogICAgIFdhc21FbnRlcjo6ZW1pdCh0aGlzKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgT3Bj
b2RlPgordm9pZCBMTEludEdlbmVyYXRvcjo6cmVwYXRjaChjb25zdCBDYXRjaFJld3JpdGVJbmZv
JiBpbmZvKQoreworICAgIGF1dG8gcmVmID0gbV93cml0ZXIucmVmKGluZm8ubV9pbnN0cnVjdGlv
bk9mZnNldCk7CisgICAgT3Bjb2RlKiBpbnN0cnVjdGlvbiA9IHJlZi0+Y2FzdDxPcGNvZGUsIFdh
c21PcGNvZGVUcmFpdHM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGV4Y2VwdGlvblJlZ2lzdGVy
ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9zdGFja1NpemUgKyBpbmZvLm1fdHJ5RGVwdGgp
OworICAgIGluc3RydWN0aW9uLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uUmVnaXN0ZXIsIFtdKCkg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
VmlydHVhbFJlZ2lzdGVyKCk7CisgICAgfSk7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlv
bkNvZGVCbG9jaz4gTExJbnRHZW5lcmF0b3I6OmZpbmFsaXplKCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChtX2NvZGVCbG9jayk7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGluZm8gOiBtX3JldGhy
b3dzKQorICAgICAgICByZXBhdGNoPFdhc21SZXRocm93PihpbmZvKTsKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIGluZm8gOiBtX2NhdGNoZXMpCisgICAgICAgIHJlcGF0Y2g8V2FzbUNhdGNoPihpbmZv
KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGluZm8gOiBtX2NhdGNoQWxscykKKyAgICAgICAgcmVw
YXRjaDxXYXNtQ2F0Y2hBbGw+KGluZm8pOworCisgICAgbV9zdGFja1NpemUgKz0gbV9tYXhUcnlE
ZXB0aDsKKwogICAgIHNpemVfdCBudW1DYWxsZWVMb2NhbHMgPSBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgbV9tYXhTdGFja1NpemUpOwogICAgIG1f
Y29kZUJsb2NrLT5tX251bUNhbGxlZUxvY2FscyA9IG51bUNhbGxlZUxvY2FsczsKICAgICBSRUxF
QVNFX0FTU0VSVChudW1DYWxsZWVMb2NhbHMgPT0gbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlTG9j
YWxzKTsKQEAgLTk3Myw2ICsxMDU3LDEwOCBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbHNl
VG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJl
dHVybiB7IH07CiB9CiAKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRyeShCbG9ja1NpZ25hdHVy
ZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwg
U3RhY2smIG5ld1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgKyttX3RyeURlcHRoOwor
ICAgIGlmIChtX21heFRyeURlcHRoIDwgbV90cnlEZXB0aCkKKyAgICAgICAgbV9tYXhUcnlEZXB0
aCA9IG1fdHJ5RGVwdGg7CisKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3Rh
Y2ssIG5ld1N0YWNrKTsKKyAgICBSZWY8TGFiZWw+IHRyeUxhYmVsID0gbmV3RW1pdHRlZExhYmVs
KCk7CisgICAgUmVmPExhYmVsPiBjb250aW51YXRpb24gPSBuZXdMYWJlbCgpOworICAgIHJlc3Vs
dCA9IENvbnRyb2xUeXBlOjp0cnlfKHNpZ25hdHVyZSwgbV9zdGFja1NpemUsIFdURk1vdmUodHJ5
TGFiZWwpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIG1fdHJ5RGVwdGgpOworICAgIHJldHVybiB7
IH07Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSwgQ29udHJvbFR5cGUm
IGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXYXNt
Sm1wOjplbWl0KHRoaXMsIGRhdGEubV9jb250aW51YXRpb24tPmJpbmQodGhpcykpOworICAgIHJl
dHVybiBhZGRDYXRjaFRvVW5yZWFjaGFibGUoZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvblNpZ25h
dHVyZSwgZGF0YSwgcmVzdWx0cyk7Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhdGNo
VG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBl
eGNlcHRpb25TaWduYXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRz
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUmVmPExhYmVsPiBjYXRjaExhYmVsID0gbmV3RW1p
dHRlZExhYmVsKCk7CisKKyAgICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCk7CisgICAg
aWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbFRyeT4oZGF0YSkpIHsKKyAgICAgICAg
Q29udHJvbFRyeSYgdHJ5XyA9IFdURjo6Z2V0PENvbnRyb2xUcnk+KGRhdGEpOworICAgICAgICBk
YXRhID0gQ29udHJvbFR5cGU6OmNhdGNoXyhkYXRhLm1fc2lnbmF0dXJlLCBtX3N0YWNrU2l6ZSwg
V1RGTW92ZSh0cnlfLm1fdHJ5KSwgV1RGTW92ZShkYXRhLm1fY29udGludWF0aW9uKSwgY2F0Y2hM
YWJlbCwgdHJ5Xy5tX3RyeURlcHRoKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgcmVz
dWx0cy5hcHBlbmQocHVzaCgpKTsKKworICAgIFdhc21DYXRjaDo6ZW1pdDxPcGNvZGVTaXplOjpX
aWRlMzI+KHRoaXMsIGV4Y2VwdGlvbkluZGV4LCB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgwKSwg
ZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgLXJlc3VsdHNbMF0ub2Zmc2V0KCkp
OworICAgIG1fY2F0Y2hlcy5hcHBlbmQoeyBtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgbV90
cnlEZXB0aCB9KTsKKworICAgIENvbnRyb2xDYXRjaCYgY2F0Y2hfID0gV1RGOjpnZXQ8Q29udHJv
bENhdGNoPihkYXRhKTsKKyAgICBjYXRjaF8ubV9raW5kID0gQ2F0Y2hLaW5kOjpDYXRjaDsKKyAg
ICBtX2NvZGVCbG9jay0+YWRkRXhjZXB0aW9uSGFuZGxlcih7IEhhbmRsZXJUeXBlOjpDYXRjaCwg
Y2F0Y2hfLm1fdHJ5U3RhcnQtPmxvY2F0aW9uKCksIGNhdGNoXy5tX3RyeUVuZC0+bG9jYXRpb24o
KSwgY2F0Y2hMYWJlbC0+bG9jYXRpb24oKSwgbV90cnlEZXB0aCwgZXhjZXB0aW9uSW5kZXggfSk7
CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFs
bChDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFdhc21KbXA6OmVt
aXQodGhpcywgZGF0YS5tX2NvbnRpbnVhdGlvbi0+YmluZCh0aGlzKSk7CisgICAgcmV0dXJuIGFk
ZENhdGNoQWxsVG9VbnJlYWNoYWJsZShkYXRhKTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6
YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisKKyAgICBSZWY8TGFiZWw+IGNhdGNoTGFiZWwgPSBuZXdFbWl0dGVkTGFiZWwoKTsK
KyAgICBXYXNtQ2F0Y2hBbGw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbCgwKSk7CisgICAgbV9jYXRjaEFsbHMuYXBwZW5kKHsgbV9sYXN0SW5z
dHJ1Y3Rpb24ub2Zmc2V0KCksIG1fdHJ5RGVwdGggfSk7CisgICAgbV9zdGFja1NpemUgPSBkYXRh
LnN0YWNrU2l6ZSgpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xUcnk+
KGRhdGEpKSB7CisgICAgICAgIENvbnRyb2xUcnkmIHRyeV8gPSBXVEY6OmdldDxDb250cm9sVHJ5
PihkYXRhKTsKKyAgICAgICAgZGF0YSA9IENvbnRyb2xUeXBlOjpjYXRjaF8oZGF0YS5tX3NpZ25h
dHVyZSwgbV9zdGFja1NpemUsIFdURk1vdmUodHJ5Xy5tX3RyeSksIFdURk1vdmUoZGF0YS5tX2Nv
bnRpbnVhdGlvbiksIGNhdGNoTGFiZWwsIHRyeV8ubV90cnlEZXB0aCk7CisgICAgfQorICAgIENv
bnRyb2xDYXRjaCYgY2F0Y2hfID0gV1RGOjpnZXQ8Q29udHJvbENhdGNoPihkYXRhKTsKKyAgICBj
YXRjaF8ubV9raW5kID0gQ2F0Y2hLaW5kOjpDYXRjaEFsbDsKKyAgICBtX2NvZGVCbG9jay0+YWRk
RXhjZXB0aW9uSGFuZGxlcih7IEhhbmRsZXJUeXBlOjpDYXRjaEFsbCwgY2F0Y2hfLm1fdHJ5U3Rh
cnQtPmxvY2F0aW9uKCksIGNhdGNoXy5tX3RyeUVuZC0+bG9jYXRpb24oKSwgY2F0Y2hMYWJlbC0+
bG9jYXRpb24oKSwgbV90cnlEZXB0aCwgMCB9KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IExMSW50R2VuZXJhdG9yOjphZGREZWxlZ2F0ZShDb250cm9sVHlwZSYgdGFyZ2V0LCBDb250cm9s
VHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFdhc21KbXA6OmVtaXQodGhpcywg
ZGF0YS5tX2NvbnRpbnVhdGlvbi0+YmluZCh0aGlzKSk7CisgICAgcmV0dXJuIGFkZERlbGVnYXRl
VG9VbnJlYWNoYWJsZSh0YXJnZXQsIGRhdGEpOworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjph
ZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIHRhcmdldCwgQ29udHJvbFR5cGUm
IGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSZWY8TGFiZWw+IGRlbGVnYXRlTGFiZWwg
PSBuZXdFbWl0dGVkTGFiZWwoKTsKKyAgICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCk7
CisKKyAgICB1bnNpZ25lZCB0YXJnZXREZXB0aCA9IDA7CisgICAgaWYgKENvbnRyb2xUeXBlOjpp
c1RyeSh0YXJnZXQpKQorICAgICAgICB0YXJnZXREZXB0aCA9IFdURjo6Z2V0PENvbnRyb2xUcnk+
KHRhcmdldCkubV90cnlEZXB0aDsKKworICAgIENvbnRyb2xUcnkmIHRyeV8gPSBXVEY6OmdldDxD
b250cm9sVHJ5PihkYXRhKTsKKyAgICBtX2NvZGVCbG9jay0+YWRkRXhjZXB0aW9uSGFuZGxlcih7
IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSwgdHJ5Xy5tX3RyeS0+bG9jYXRpb24oKSwgZGVsZWdhdGVM
YWJlbC0+bG9jYXRpb24oKSwgMCwgbV90cnlEZXB0aCwgdGFyZ2V0RGVwdGggfSk7CisgICAgLS1t
X3RyeURlcHRoOworICAgIGVtaXRMYWJlbCgqZGF0YS5tX2NvbnRpbnVhdGlvbik7CisgICAgcmV0
dXJuIHsgfTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRkVGhyb3codW5zaWduZWQgZXhj
ZXB0aW9uSW5kZXgsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaykgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKGVuY2xvc2luZ1N0YWNrKTsKKyAgICBX
YXNtVGhyb3c6OmVtaXQodGhpcywgZXhjZXB0aW9uSW5kZXgsIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKG1fc3RhY2tTaXplIC0gMSkpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJbnRH
ZW5lcmF0b3I6OmFkZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbENh
dGNoPihkYXRhKSk7CisgICAgQ29udHJvbENhdGNoIGNhdGNoXyA9IFdURjo6Z2V0PENvbnRyb2xD
YXRjaD4oZGF0YSk7CisgICAgV2FzbVJldGhyb3c6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0
aGlzLCB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgwKSk7CisgICAgbV9yZXRocm93cy5hcHBlbmQo
eyBtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgY2F0Y2hfLm1fdHJ5RGVwdGggfSk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENv
bnRyb2xUeXBlJiBkYXRhLCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7
CiAgICAgaWYgKCFkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKSB7CkBAIC0xMDYwLDYg
KzEyNDYsOSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRy
b2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZQogCiAgICAgbV9zdGFja1NpemUgPSBk
YXRhLnN0YWNrU2l6ZSgpOwogCisgICAgaWYgKENvbnRyb2xUeXBlOjppc1RyeShkYXRhKSB8fCBX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xDYXRjaD4oZGF0YSkpCisgICAgICAgIC0tbV90
cnlEZXB0aDsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fc2lnbmF0dXJl
LT5yZXR1cm5Db3VudCgpOyArK2kpIHsKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkbyBh
IGNvbnNpc3RlbmN5IGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBqdXN0IHJlc2V0IHRoZSBzdGFjayBz
aXplCiAgICAgICAgIC8vIGFyZSBwdXNoaW5nIG5ldyB2YWx1ZXMsIHdoaWxlIHdlIGFscmVhZHkg
aGF2ZSB0aGUgc2FtZSB2YWx1ZXMgaW4gdGhlIHN0YWNrLgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUxpbWl0cy5oCmluZGV4IGNmOGI0NDYwMzY4MTEyM2VjYzI1Y2ZjMzcyNDk4YjVmNWI1
OGM5ODYuLmY4ZjA1M2I1ODYwZTdkZjk3ZGI0NDY0YWEwZWExNzQ4ZDliODdmMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MaW1pdHMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmgKQEAgLTQxLDYgKzQxLDcgQEAgY29uc3Rl
eHByIHNpemVfdCBtYXhUeXBlcyA9IDEwMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEZ1bmN0
aW9ucyA9IDEwMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEltcG9ydHMgPSAxMDAwMDA7CiBj
b25zdGV4cHIgc2l6ZV90IG1heEV4cG9ydHMgPSAxMDAwMDA7Citjb25zdGV4cHIgc2l6ZV90IG1h
eEV4Y2VwdGlvbnMgPSAxMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEdsb2JhbHMgPSAxMDAw
MDAwOwogY29uc3RleHByIHNpemVfdCBtYXhEYXRhU2VnbWVudHMgPSAxMDAwMDA7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKaW5k
ZXggYTJiMGY4MzZjODljMjBlZWUyNGI5YWIzNGJlMTAxYzI4NTE0MDM1Mi4uNWFhZTBkYTliMWM5
M2Q0OTJhYmIwYTljMGIyYWQ0MTlmM2U0NzcyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKQEAgLTU4LDggKzU4LDIyIEBAIHN0
cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1
bGVJbmZvcm1hdGlvbj4gewogICAgICAgICAgICAgOiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlc1tmdW5jdGlvbkluZGV4IC0gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNp
emUoKV07CiAgICAgfQogCisgICAgc2l6ZV90IGV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCkgY29u
c3QgeyByZXR1cm4gaW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkgKyBpbnRl
cm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0ltcG9y
dGVkRXhjZXB0aW9uRnJvbUV4Y2VwdGlvbkluZGV4U3BhY2Uoc2l6ZV90IGV4Y2VwdGlvbkluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbkluZGV4IDwgZXhjZXB0aW9u
SW5kZXhTcGFjZVNpemUoKSk7CisgICAgICAgIHJldHVybiBleGNlcHRpb25JbmRleCA8IGltcG9y
dEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOworICAgIH0KKyAgICBTaWduYXR1cmVJ
bmRleCBzaWduYXR1cmVJbmRleEZyb21FeGNlcHRpb25JbmRleFNwYWNlKHNpemVfdCBleGNlcHRp
b25JbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0ltcG9ydGVkRXhjZXB0aW9u
RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpCisgICAgICAgICAgICA/IGlt
cG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXNbZXhjZXB0aW9uSW5kZXhdCisgICAgICAgICAg
ICA6IGludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlc1tleGNlcHRpb25JbmRleCAtIGlt
cG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpXTsKKyAgICB9CisKICAgICB1aW50
MzJfdCBpbXBvcnRGdW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RnVuY3Rpb25T
aWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQogICAgIHVpbnQzMl90IGludGVybmFsRnVuY3Rpb25D
b3VudCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNp
emUoKTsgfQorICAgIHVpbnQzMl90IGltcG9ydEV4Y2VwdGlvbkNvdW50KCkgY29uc3QgeyByZXR1
cm4gaW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KIAogICAgIC8vIEN1
cnJlbnRseSwgb3VyIHdhc20gaW1wbGVtZW50YXRpb24gYWxsb3dzIG9ubHkgb25lIG1lbW9yeSBh
bmQgdGFibGUuCiAgICAgLy8gSWYgd2UgbmVlZCB0byByZW1vdmUgdGhpcyBsaW1pdGF0aW9uLCB3
ZSB3b3VsZCBoYXZlIE1lbW9yeUluZm9ybWF0aW9uIGFuZCBUYWJsZUluZm9ybWF0aW9uIGluIHRo
ZSBWZWN0b3JzLgpAQCAtNzYsOSArOTAsMTQgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7CiAgICAgYm9v
bCBpc0RlY2xhcmVkRnVuY3Rpb24odWludDMyX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZGVj
bGFyZWRGdW5jdGlvbnMuY29udGFpbnMoaW5kZXgpOyB9CiAgICAgdm9pZCBhZGREZWNsYXJlZEZ1
bmN0aW9uKHVpbnQzMl90IGluZGV4KSB7IG1fZGVjbGFyZWRGdW5jdGlvbnMuc2V0KGluZGV4KTsg
fQogCisgICAgYm9vbCBpc0RlY2xhcmVkRXhjZXB0aW9uKHVpbnQzMl90IGluZGV4KSBjb25zdCB7
IHJldHVybiBtX2RlY2xhcmVkRXhjZXB0aW9ucy5jb250YWlucyhpbmRleCk7IH0KKyAgICB2b2lk
IGFkZERlY2xhcmVkRXhjZXB0aW9uKHVpbnQzMl90IGluZGV4KSB7IG1fZGVjbGFyZWRFeGNlcHRp
b25zLnNldChpbmRleCk7IH0KKwogICAgIFZlY3RvcjxJbXBvcnQ+IGltcG9ydHM7CiAgICAgVmVj
dG9yPFNpZ25hdHVyZUluZGV4PiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7CiAgICAg
VmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlczsK
KyAgICBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+IGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGlj
ZXM7CisgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVy
ZUluZGljZXM7CiAgICAgVmVjdG9yPFJlZjxTaWduYXR1cmU+PiB1c2VkU2lnbmF0dXJlczsKIAog
ICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKQEAgLTk4LDYgKzExNyw3IEBAIHN0cnVjdCBN
b2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1bGVJbmZv
cm1hdGlvbj4gewogICAgIHVpbnQzMl90IG51bWJlck9mRGF0YVNlZ21lbnRzIHsgMCB9OwogCiAg
ICAgQml0VmVjdG9yIG1fZGVjbGFyZWRGdW5jdGlvbnM7CisgICAgQml0VmVjdG9yIG1fZGVjbGFy
ZWRFeGNlcHRpb25zOwogICAgIG11dGFibGUgQml0VmVjdG9yIG1fcmVmZXJlbmNlZEZ1bmN0aW9u
czsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0
aW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFy
c2VyLmNwcAppbmRleCA2NWVmNjlmNmYxYzM2MTFlZDAxZjcyODY3NjFjODFlMTFiYjJjNTU2Li4w
NzAxNTdhNzRlM2YwNzI2MjQxZmUzZWQ4OWIzNjk5MDlhZGYwNTVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwCkBAIC0xNDMsNiArMTQz
LDE5IEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0
CiAgICAgICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xv
YmFsKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVy
bmFsS2luZDo6RXhjZXB0aW9uOiB7CisgICAgICAgICAgICB1aW50OF90IHRhZ1R5cGU7CisgICAg
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KHRhZ1R5cGUpLCAiY2FuJ3Qg
Z2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCBleGNlcHRpb24ncyB0YWcgdHlwZSIpOwor
ICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighdGFnVHlwZSwgaW1wb3J0TnVtYmVyLCAi
dGggSW1wb3J0IGV4Y2VwdGlvbiBoYXMgdGFnIHR5cGUgIiwgdGFnVHlwZSwgIiBidXQgdGhlIG9u
bHkgc3VwcG9ydGVkIHRhZyB0eXBlIGlzIDAiKTsKKworICAgICAgICAgICAgdWludDMyX3QgZXhj
ZXB0aW9uU2lnbmF0dXJlSW5kZXg7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihleGNlcHRpb25TaWduYXR1cmVJbmRleCksICJjYW4ndCBnZXQgIiwgaW1w
b3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZXhjZXB0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIs
IG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleGNlcHRpb25TaWduYXR1cmVJbmRleCA+PSBtX2luZm8t
PnVzZWRTaWduYXR1cmVzLnNpemUoKSwgImludmFsaWQgZXhjZXB0aW9uIHNpZ25hdHVyZSBmb3Ig
IiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0LCAiLCBleGNlcHRpb25TaWduYXR1cmVJbmRleCwg
IiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICIg
aW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIici
KTsKKyAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCk7CisgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1tl
eGNlcHRpb25TaWduYXR1cmVJbmRleF0pOworICAgICAgICAgICAgbV9pbmZvLT5pbXBvcnRFeGNl
cHRpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgbV9pbmZv
LT5pbXBvcnRzLnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUobW9kdWxlU3RyaW5nKSwgV1RGTW92
ZShmaWVsZFN0cmluZyksIGtpbmQsIGtpbmRJbmRleCB9KTsKQEAgLTM1OSw2ICszNzIsMTEgQEAg
YXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUV4cG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAg
ICAgICAgICAgICBnbG9iYWwuYmluZGluZ01vZGUgPSBHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGlu
Z01vZGU6OlBvcnRhYmxlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbjogeworICAgICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5leGNlcHRpb25JbmRleFNwYWNlU2l6ZSgpLCBl
eHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGludmFsaWQgZXhjZXB0aW9uIG51bWJlciAiLCBr
aW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZXhjZXB0aW9uIGluZGV4IHNwYWNlICIsIG1faW5m
by0+ZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAi
JyIpOworICAgICAgICAgICAgbV9pbmZvLT5hZGREZWNsYXJlZEV4Y2VwdGlvbihraW5kSW5kZXgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIG1f
aW5mby0+ZXhwb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2lu
ZCwga2luZEluZGV4IH0pOwpAQCAtODMxLDYgKzg0OSwyNyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6
OnBhcnNlRGF0YUNvdW50KCkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9CiAK
K2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VFeGNlcHRpb24oKSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgdWludDMyX3QgZXhjZXB0aW9uQ291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoZXhjZXB0aW9uQ291bnQpLCAiY2FuJ3QgZ2V0IEV4Y2VwdGlvbiBzZWN0
aW9uJ3MgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4Y2VwdGlvbkNvdW50ID4g
bWF4RXhjZXB0aW9ucywgIkV4cG9ydCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBleGNl
cHRpb25Db3VudCwgIiBtYXhpbXVtICIsIG1heEV4Y2VwdGlvbnMpOworICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIW1faW5mby0+aW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnRyeVJl
c2VydmVDYXBhY2l0eShleGNlcHRpb25Db3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVt
b3J5IGZvciAiLCBleGNlcHRpb25Db3VudCwgIiBleGNlcHRpb25zIik7CisKKyAgICBmb3IgKHVp
bnQzMl90IGV4Y2VwdGlvbk51bWJlciA9IDA7IGV4Y2VwdGlvbk51bWJlciA8IGV4Y2VwdGlvbkNv
dW50OyArK2V4Y2VwdGlvbk51bWJlcikgeworICAgICAgICB1aW50OF90IHRhZ1R5cGU7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgodGFnVHlwZSksICJjYW4ndCBnZXQg
IiwgZXhjZXB0aW9uTnVtYmVyLCAidGggRXhjZXB0aW9uIHRhZyB0eXBlIik7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYodGFnVHlwZSwgZXhjZXB0aW9uTnVtYmVyLCAidGggRXhjZXB0aW9u
IGhhcyB0YWcgdHlwZSAiLCB0YWdUeXBlLCAiIGJ1dCB0aGUgb25seSBzdXBwb3J0ZWQgdGFnIHR5
cGUgaXMgMCIpOworCisgICAgICAgIHVpbnQzMl90IHR5cGVOdW1iZXI7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHR5cGVOdW1iZXIpLCAiY2FuJ3QgZ2V0ICIs
IGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2VwdGlvbidzIHR5cGUgbnVtYmVyIik7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZU51bWJlciA+PSBtX2luZm8tPnVzZWRTaWduYXR1cmVz
LnNpemUoKSwgZXhjZXB0aW9uTnVtYmVyLCAidGggRXhjZXB0aW9uIHR5cGUgbnVtYmVyIGlzIGlu
dmFsaWQgIiwgdHlwZU51bWJlcik7CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW3R5
cGVOdW1iZXJdKTsKKyAgICAgICAgbV9pbmZvLT5pbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUlu
ZGljZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICB9CisKKyAgICByZXR1
cm4geyB9OworfQogYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUN1c3RvbSgpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKICAgICBDdXN0b21TZWN0aW9uIHNlY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TZWN0aW9ucy5oCmluZGV4IGYzNjllN2I4NmNhZmE5M2FkM2Y4M2FkNjBjYTA4
N2M4ZjU4ODBlY2EuLmJlZjIwNzAxZjQwZmU0MGI0YTI4YTBhZGNmYzQ3ZjZiZjBkNWJmZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oCkBAIC00NSw3ICs0NSw4
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAgICAgbWFjcm8oRWxlbWVudCwg
ICAgOSwgIkVsZW1lbnRzIHNlY3Rpb24iKSBcCiAgICAgbWFjcm8oQ29kZSwgICAgICAxMCwgIkZ1
bmN0aW9uIGJvZGllcyAoY29kZSkiKSBcCiAgICAgbWFjcm8oRGF0YSwgICAgICAxMSwgIkRhdGEg
c2VnbWVudHMiKSBcCi0gICAgbWFjcm8oRGF0YUNvdW50LCAxMiwgIkRhdGEgY291bnQiKQorICAg
IG1hY3JvKERhdGFDb3VudCwgMTIsICJEYXRhIGNvdW50IikgXAorICAgIG1hY3JvKEV4Y2VwdGlv
biwgMTMsICJFeGNlcHRpb24gZGVjbGFyYXRpb25zIikgXAogCiBlbnVtIGNsYXNzIFNlY3Rpb24g
OiB1aW50OF90IHsKICAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IEJlZ2luIGlzIGxlc3MgdGhh
biBldmVyeSBvdGhlciBzZWN0aW9uIG51bWJlciBhbmQgdGhhdCBDdXN0b20gaXMgZ3JlYXRlci4K
QEAgLTkwLDYgKzkxLDEwIEBAIGlubGluZSBib29sIHZhbGlkYXRlT3JkZXIoU2VjdGlvbiBwcmV2
aW91c0tub3duLCBTZWN0aW9uIG5leHQpCiAgICAgQVNTRVJUKGlzS25vd25TZWN0aW9uKHByZXZp
b3VzS25vd24pIHx8IHByZXZpb3VzS25vd24gPT0gU2VjdGlvbjo6QmVnaW4pOwogICAgIGlmIChw
cmV2aW91c0tub3duID09IFNlY3Rpb246OkRhdGFDb3VudCAmJiBuZXh0ID09IFNlY3Rpb246OkNv
ZGUpCiAgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChwcmV2aW91c0tub3duID09IFNlY3Rp
b246OkV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIG5leHQgPj0gU2VjdGlvbjo6R2xvYmFsOwor
ICAgIGlmIChuZXh0ID09IFNlY3Rpb246OkV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIHByZXZp
b3VzS25vd24gPD0gU2VjdGlvbjo6TWVtb3J5OwogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
OF90PihwcmV2aW91c0tub3duKSA8IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG5leHQpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IGU3ODc4
NjU1ZTQwMTgxNzRkNjgzOTNhOGIwMzQwMGE1NTM5NjUyZWEuLjRmNTdhYjQ4Njk3OGZkZGNhODA4
ZDg4YzEwMWQ2ZjA0M2VmMmMzOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TbG93UGF0aHMuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiSklURXhjZXB0aW9u
cy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJX
YXNtQkJRUGxhbi5oIgpAQCAtNTg2LDYgKzU4OCw5NyBAQCBXQVNNX1NMT1dfUEFUSF9ERUNMKG1l
bW9yeV9hdG9taWNfbm90aWZ5KQogICAgIFdBU01fUkVUVVJOKHJlc3VsdCk7CiB9CiAKK1dBU01f
U0xPV19QQVRIX0RFQ0wodGhyb3cpCit7CisgICAgaW5zdGFuY2UtPnN0b3JlVG9wQ2FsbEZyYW1l
KGNhbGxGcmFtZSk7CisKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBp
bnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOworICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvIGluc3RydWN0aW9uID0gcGMtPmFzPFdhc21UaHJv
dywgV2FzbU9wY29kZVRyYWl0cz4oKTsKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRhZyA9IGluc3Rh
bmNlLT50YWcoaW5zdHJ1Y3Rpb24ubV9leGNlcHRpb25JbmRleCk7CisKKyAgICBWZWN0b3I8dWlu
dDY0X3Q+IHZhbHVlczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFnLnBhcmFtZXRl
ckNvdW50KCk7ICsraSkKKyAgICAgICAgdmFsdWVzLmFwcGVuZChSRUFEKChpbnN0cnVjdGlvbi5t
X2ZpcnN0VmFsdWUgLSBpKSkuZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBKU1dlYkFzc2VtYmx5
RXhjZXB0aW9uKiBleGNlcHRpb24gPSBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpjcmVhdGUoZ2xv
YmFsT2JqZWN0LCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUV4Y2VwdGlvblN0cnVjdHVy
ZSgpLCB0YWcsIFdURk1vdmUodmFsdWVzKSk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBleGNlcHRpb24pOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2Fs
bEZyYW1lKTsKKyAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNTRVJU
KCEhdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBt
YWtlIHRoaXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxs
aW50IChib3RoIG9wX2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uKQor
ICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUgVk0u
IChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNlIGl0
IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0
aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBj
YWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcK
KyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3Vs
ZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihj
YWxsRnJhbWUpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBiaXR3
aXNlX2Nhc3Q8dWludDY0X3Q+KGpzSW5zdGFuY2UtPm1vZHVsZSgpKTsKKyAgICBXQVNNX1JFVFVS
Tl9UV08odm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3csIG51bGxwdHIpOworfQorCitXQVNNX1NM
T1dfUEFUSF9ERUNMKHJldGhyb3cpCit7CisgICAgaW5zdGFuY2UtPnN0b3JlVG9wQ2FsbEZyYW1l
KGNhbGxGcmFtZSk7CisKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBp
bnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOworICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvIGluc3RydWN0aW9uID0gcGMtPmFzPFdhc21SZXRo
cm93LCBXYXNtT3Bjb2RlVHJhaXRzPigpOworICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gUkVBRChp
bnN0cnVjdGlvbi5tX2V4Y2VwdGlvbikuanNWYWx1ZSgpOworICAgIHRocm93RXhjZXB0aW9uKGds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZXhjZXB0aW9uKTsKKworICAgIGdlbmVyaWNVbndpbmQo
dm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKCEhdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOworICAg
IEFTU0VSVCghIXZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKKyAgICAvLyBGSVhNRTogV2Ug
Y291bGQgbWFrZSB0aGlzIGJldHRlcjoKKyAgICAvLyBUaGlzIGlzIGEgdG90YWwgaGFjaywgYnV0
IHRoZSBsbGludCAoYm90aCBvcF9jYXRjaCBhbmQgbGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2Vw
dGlvbikKKyAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVlIGZpZWxkIHRvIGxvYWQg
dGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJlCisgICAgLy8gdGhpcyBz
aW5jZSBpdCBpcyBjb21waWxlZCB3aXRoIGEgY29uc3RhbnQgVk0gcG9pbnRlci4pIFdlIGNvdWxk
IG1ha2UgdGhlIGNhbGxpbmcgY29udmVudGlvbgorICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0
IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBq
dW1waW5nCisgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywg
d2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4KKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCisgICAgYml0d2lzZV9jYXN0PHVpbnQ2
NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSld
ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihqc0luc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgV0FT
TV9SRVRVUk5fVFdPKHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93LCBudWxscHRyKTsKK30KKwor
V0FTTV9TTE9XX1BBVEhfREVDTChyZXRyaWV2ZV9hbmRfY2xlYXJfZXhjZXB0aW9uKQoreworICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJ
bnN0YW5jZSA9IGluc3RhbmNlLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgp
OworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCEhdGhyb3dT
Y29wZS5leGNlcHRpb24oKSk7CisKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHRocm93U2Nv
cGUuZXhjZXB0aW9uKCk7CisgICAgSlNWYWx1ZSB0aHJvd25WYWx1ZSA9IGV4Y2VwdGlvbi0+dmFs
dWUoKTsKKworICAgIGlmIChwYy0+aXM8V2FzbUNhdGNoLCBXYXNtT3Bjb2RlVHJhaXRzPigpKSB7
CisgICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwYy0+YXM8V2FzbUNhdGNoLCBXYXNtT3Bjb2Rl
VHJhaXRzPigpOworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoaW5zdHJ1Y3Rpb24ubV9l
eGNlcHRpb24pID0gdGhyb3duVmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBpbnN0
cnVjdGlvbiA9IHBjLT5hczxXYXNtQ2F0Y2hBbGwsIFdhc21PcGNvZGVUcmFpdHM+KCk7CisgICAg
ICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihpbnN0cnVjdGlvbi5tX2V4Y2VwdGlvbikgPSB0aHJv
d25WYWx1ZTsKKyAgICB9CisKKyAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBleGNlcHRpb24g
aGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgY2F0Y2ggcHJvbG9ndWUKKyAgICAvLyBKSVQgY29kZSBi
ZWNhdXNlIGNsZWFyaW5nIGl0IGFsc28gZW50YWlscyBjbGVhcmluZyBhIGJpdCBpbiBhbiBBdG9t
aWMKKyAgICAvLyBiaXQgZmllbGQgaW4gVk1UcmFwcy4KKyAgICB0aHJvd1Njb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CisKKyAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiB3YXNtRXhjZXB0aW9uID0g
anNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKj4odm0sIHRocm93blZhbHVlKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCghIXdhc21FeGNlcHRpb24pOworICAgIFdBU01fUkVUVVJOX1RX
TyhwYywgd2FzbUV4Y2VwdGlvbi0+cGF5bG9hZCgpLmRhdGEoKSk7Cit9CisKIGV4dGVybiAiQyIg
U2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF93YXNtX3Rocm93X2V4Y2VwdGlvbihDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBXYXNtOjpJbnN0YW5jZSogaW5z
dGFuY2UsIFdhc206OkV4Y2VwdGlvblR5cGUgZXhjZXB0aW9uVHlwZSkKIHsKICAgICBVTlVTRURf
UEFSQU0ocGMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNs
b3dQYXRocy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5oCmlu
ZGV4IDViMmI4ZjI4OTVhMWU2YzgyZjQwOWY2ZTVlODZjY2RmMGZkNTA0YjMuLmU1MzczYTZiM2Mw
YzY3N2I0M2UwODkwNGVhMmJlZjVmZWNmNTViMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtU2xvd1BhdGhzLmgKQEAgLTgzLDYgKzgzLDkgQEAgV0FTTV9TTE9XX1BBVEhfSElE
REVOX0RFQ0woc2V0X2dsb2JhbF9yZWZfcG9ydGFibGVfYmluZGluZyk7CiBXQVNNX1NMT1dfUEFU
SF9ISURERU5fREVDTChtZW1vcnlfYXRvbWljX3dhaXQzMik7CiBXQVNNX1NMT1dfUEFUSF9ISURE
RU5fREVDTChtZW1vcnlfYXRvbWljX3dhaXQ2NCk7CiBXQVNNX1NMT1dfUEFUSF9ISURERU5fREVD
TChtZW1vcnlfYXRvbWljX25vdGlmeSk7CitXQVNNX1NMT1dfUEFUSF9ISURERU5fREVDTCh0aHJv
dyk7CitXQVNNX1NMT1dfUEFUSF9ISURERU5fREVDTChyZXRocm93KTsKK1dBU01fU0xPV19QQVRI
X0hJRERFTl9ERUNMKHJldHJpZXZlX2FuZF9jbGVhcl9leGNlcHRpb24pOwogCiBleHRlcm4gIkMi
IFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24oQ2FsbEZy
YW1lKiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206
OkV4Y2VwdGlvblR5cGUpIFdURl9JTlRFUk5BTDsKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5U
eXBlIHNsb3dfcGF0aF93YXNtX3BvcGNvdW50KGNvbnN0IEluc3RydWN0aW9uKiBwYywgdWludDMy
X3QpIFdURl9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhZy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNGVjNjczNjIzMmYwNzIxZmM2MjU3ZDQ3OTQxNzE3YjUyNjJiYmVlNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuY3BwCkBAIC0w
LDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbVRhZy5oIgorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBXYXNtIHsKKwordWlu
dDMyX3QgVGFnOjpzX2lkID0gMDsKKworfX0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODhjMWE5YjNj
MmY2OWNhMTYwNWYyMWIxNGU2YTIwODNkOGUxOWRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhZy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgVGFnIHsKK3B1YmxpYzoKKyAg
ICBUYWcoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCisgICAgICAgIDogbV9pZCgrK3NfaWQp
CisgICAgICAgICwgbV9zaWduYXR1cmUoc2lnbmF0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICBT
aWduYXR1cmVBcmdDb3VudCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKTsgfQorICAgIFR5cGUgcGFyYW1ldGVyKFNpZ25hdHVyZUFyZ0Nv
dW50IGkpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlLmFyZ3VtZW50KGkpOyB9CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgVGFnJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pZCA9PSBv
dGhlci5tX2lkOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRhZyYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIG1faWQgIT0gb3RoZXIubV9pZDsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB1
aW50MzJfdCBzX2lkOworICAgIHVpbnQzMl90IG1faWQ7CisgICAgY29uc3QgU2lnbmF0dXJlJiBt
X3NpZ25hdHVyZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHkuY3BwCmluZGV4IDY5ZDE4YTI5NzhmNGY2NDIyZDEzMTE0ZWFlMjZjMDYw
ZTMzNDcwMjAuLjllYTY2MmZiMzE0MjkwNTc3ZDUyNzY1MDU0NDlhM2UwMzJhY2VkNzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCkBAIC03
OCw2ICs3OCw3IEBAIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5OjpzX2luZm8gPSB7ICJX
ZWJBc3NlbWJseSIsICZCYXNlOjpzX2luZm8sICZ3ZWJBc3NlCiAvKiBTb3VyY2UgZm9yIEpTV2Vi
QXNzZW1ibHkubHV0LmgKIEBiZWdpbiB3ZWJBc3NlbWJseVRhYmxlCiAgIENvbXBpbGVFcnJvciAg
ICBjcmVhdGVXZWJBc3NlbWJseUNvbXBpbGVFcnJvciAgRG9udEVudW18UHJvcGVydHlDYWxsYmFj
aworICBFeGNlcHRpb24gICAgICAgY3JlYXRlV2ViQXNzZW1ibHlFeGNlcHRpb24gICAgIERvbnRF
bnVtfFByb3BlcnR5Q2FsbGJhY2sKICAgR2xvYmFsICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5
R2xvYmFsICAgICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIEluc3RhbmNlICAgICAg
ICBjcmVhdGVXZWJBc3NlbWJseUluc3RhbmNlICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFj
awogICBMaW5rRXJyb3IgICAgICAgY3JlYXRlV2ViQXNzZW1ibHlMaW5rRXJyb3IgICAgIERvbnRF
bnVtfFByb3BlcnR5Q2FsbGJhY2sKQEAgLTg1LDYgKzg2LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpT
V2ViQXNzZW1ibHk6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5IiwgJkJhc2U6OnNfaW5mbywgJndl
YkFzc2UKICAgTW9kdWxlICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5TW9kdWxlICAgICAgICBE
b250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIFJ1bnRpbWVFcnJvciAgICBjcmVhdGVXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvciAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBUYWJsZSAgICAg
ICAgICAgY3JlYXRlV2ViQXNzZW1ibHlUYWJsZSAgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2Fs
bGJhY2sKKyAgVGFnICAgICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5VGFnICAgICAgICAgICBE
b250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIGNvbXBpbGUgICAgICAgICB3ZWJBc3NlbWJseUNv
bXBpbGVGdW5jICAgICAgICAgRnVuY3Rpb24gMQogICBpbnN0YW50aWF0ZSAgICAgd2ViQXNzZW1i
bHlJbnN0YW50aWF0ZUZ1bmMgICAgIEZ1bmN0aW9uIDEKICAgdmFsaWRhdGUgICAgICAgIHdlYkFz
c2VtYmx5VmFsaWRhdGVGdW5jICAgICAgICBGdW5jdGlvbiAxCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQyN2RkNjNjOTM0YzhkN2M0MjkwNDAxMDNhMDk4M2YyYjA2M2E0M2IKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlFeGNlcHRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBK
U1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5FeGNlcHRpb24i
LCAmRXJyb3JJbnN0YW5jZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTV2ViQXNzZW1ibHlFeGNlcHRpb24pIH07CisKKy8vIFRPRE86IHJlbW92ZSBnbG9i
YWwgb2JqZWN0PworSlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6SlNXZWJBc3NlbWJseUV4Y2VwdGlv
bihKU0dsb2JhbE9iamVjdCosIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFdh
c206OlRhZyYgdGFnLCBWZWN0b3I8dWludDY0X3Q+JiYgcGF5bG9hZCkKKyAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSwgRXJyb3JUeXBlOjpFcnJvcikKKyAgICAsIG1fdGFnKHRhZykKKyAgICAsIG1f
cGF5bG9hZChXVEZNb3ZlKHBheWxvYWQpKQoreworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlFeGNl
cHRpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCAid2FzbSBl
eGNlcHRpb24iLCB7IH0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKK30K
KworSlNWYWx1ZSBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpnZXRBcmcodW5zaWduZWQpIGNvbnN0
Cit7CisgICAgLy8gVE9ETworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUV4Y2VwdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUV4Y2VwdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmZTI2ZjcxOTUzZDhlNjMxYmQxZTU1NDFiMGUxMzA1
NzIxMzVhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbVRhZy5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiA6IHB1YmxpYyBFcnJvckluc3RhbmNl
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gRXJyb3JJbnN0YW5jZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisKKyAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIHN0YXRpY19jYXN0PEpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24qPihjZWxsKS0+SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6fkpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24oKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS53ZWJBc3NlbWJseUV4Y2Vw
dGlvblNwYWNlPG1vZGU+KCk7CisgICAgfQorCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKwor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oRXJyb3JJbnN0YW5jZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogY3JlYXRlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFdhc206
OlRhZyYgdGFnLCBWZWN0b3I8dWludDY0X3Q+JiYgcGF5bG9hZCkKKyAgICB7CisgICAgICAgIEpT
V2ViQXNzZW1ibHlFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTV2ViQXNzZW1ibHlFeGNlcHRpb24+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgdm0sIHN0cnVjdHVyZSwgdGFnLCBXVEZNb3ZlKHBheWxvYWQpKTsK
KyAgICAgICAgZXhjZXB0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAg
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgICB9CisKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRh
ZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnOyB9CisgICAgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYg
cGF5bG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF5bG9hZDsgfQorICAgIEpTVmFsdWUgZ2V0QXJn
KHVuc2lnbmVkKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRp
b24oSlNHbG9iYWxPYmplY3QqLCBWTSYsIFN0cnVjdHVyZSosIGNvbnN0IFdhc206OlRhZyYsIFZl
Y3Rvcjx1aW50NjRfdD4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9i
YWxPYmplY3QqKTsKKworICAgIGNvbnN0IFdhc206OlRhZyYgbV90YWc7CisgICAgVmVjdG9yPHVp
bnQ2NF90PiBtX3BheWxvYWQ7Cit9OworCitKU09iamVjdCogY3JlYXRlSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJiwgY29uc3QgV2FzbTo6VGFnJiwgVmVjdG9yPHVp
bnQ2NF90PiYmKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCA2NmRhMTBhNzgwMDNkYjI3YTE5MTgyZTliMWIw
YzNjODA1ZDRhM2I2Li4xZDdmNDZjZDY4MzA0NWVhYjY0NmI4NzJmNTc4ZWQ3NTAyMjVjYmZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlJbnN0YW5jZS5jcHAKQEAgLTIxNiw2ICsyMTYsNyBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dHJ5Q3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjoKICAgICAgICAgY2Fz
ZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5h
bEtpbmQ6OlRhYmxlOgorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RXhjZXB0aW9u
OgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5k
OjpNZW1vcnk6CiAgICAgICAgICAgICBicmVhazsKQEAgLTI0Miw2ICsyNDMsNyBAQCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dHJ5Q3JlYXRlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpGdW5jdGlv
bjoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDoKICAgICAgICAgY2Fz
ZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOgorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFs
S2luZDo6RXhjZXB0aW9uOgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBXYXNt
OjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNDM0ZDczMzUyNTRjMTNl
MjcwYjcxYTdmODI5ZDJhNDQzMTA3NDhlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5jcHAKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtVGFnLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
b25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseVRhZzo6c19pbmZvID0geyAiV2ViQXNzZW1ibHku
VGFnIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1dlYkFzc2VtYmx5VGFnKSB9OworCitKU1dlYkFzc2VtYmx5VGFnKiBKU1dlYkFzc2VtYmx5
VGFnOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcpCit7CisgICAgLy8gVE9ETzogcmVt
b3ZlPworICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOworICAgIGF1dG8qIGpzVGFnID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseVRhZz4odm0uaGVhcCkpIEpT
V2ViQXNzZW1ibHlUYWcodm0sIHN0cnVjdHVyZSwgdGFnKTsKKyAgICBqc1RhZy0+ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIHJldHVybiBqc1RhZzsKK30KKworU3RydWN0dXJlKiBKU1dlYkFzc2Vt
Ymx5VGFnOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Cit9CisKK0pTV2ViQXNzZW1ibHlUYWc6OkpTV2ViQXNzZW1ibHlU
YWcoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcpCisg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3RhZyh0YWcpCit7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmUzNWJkZjE3NzlkNDI4NGM4MGE5YTU3MTJlYTJjNDIwZjE4NWZlZWUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmgKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAi
V2FzbVRhZy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseVRhZyBm
aW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNl
ID0gSlNOb25GaW5hbE9iamVjdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5VGFnU3BhY2U8bW9k
ZT4oKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWcqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiwgY29uc3QgV2FzbTo6VGFnJik7CisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAg
IGNvbnN0IFdhc206OlRhZyYgdGFnKCkgY29uc3QgeyByZXR1cm4gbV90YWc7IH0KKworcHJpdmF0
ZToKKyAgICBKU1dlYkFzc2VtYmx5VGFnKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgV2FzbTo6VGFn
Jik7CisKKyAgICBjb25zdCBXYXNtOjpUYWcmIG1fdGFnOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29u
c3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiZDM5NThlN2U5YzQyMmJlOGVmZGNlMTc1NDc0ZWE5
Y2Q2NTI0NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDk2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCIKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlFeGNl
cHRpb25Qcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3IubHV0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gV2ViQXNz
ZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6
c19pbmZvLCAmY29uc3RydWN0b3JUYWJsZVdlYkFzc2VtYmx5RXhjZXB0aW9uLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IpIH07CisK
K3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlF
eGNlcHRpb24pOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY2FsbEpTV2ViQXNz
ZW1ibHlFeGNlcHRpb24pOworCisvKiBTb3VyY2UgZm9yIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29u
c3RydWN0b3IubHV0LmgKKyBAYmVnaW4gY29uc3RydWN0b3JUYWJsZVdlYkFzc2VtYmx5RXhjZXB0
aW9uCisgQGVuZAorICovCisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RKU1dl
YkFzc2VtYmx5RXhjZXB0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpKQoreworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVlIG1l
c3NhZ2UgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgb3B0aW9ucyA9IE9w
dGlvbnM6OnVzZUVycm9yQ2F1c2UoKSA/IGNhbGxGcmFtZS0+YXJndW1lbnQoMSkgOiBqc1VuZGVm
aW5lZCgpOworCisgICAgSlNPYmplY3QqIG5ld1RhcmdldCA9IGFzT2JqZWN0KGNhbGxGcmFtZS0+
bmV3VGFyZ2V0KCkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNDX0dFVF9ERVJJVkVE
X1NUUlVDVFVSRSh2bSwgd2ViQXNzZW1ibHlFeGNlcHRpb25TdHJ1Y3R1cmUsIG5ld1RhcmdldCwg
Y2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoRXJy
b3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBtZXNzYWdlLCBvcHRp
b25zLCBudWxscHRyLCBUeXBlTm90aGluZywgRXJyb3JUeXBlOjpFcnJvciwgZmFsc2UpKSk7Cit9
CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiwg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sK
KyAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIEpTVmFs
dWUgb3B0aW9ucyA9IE9wdGlvbnM6OnVzZUVycm9yQ2F1c2UoKSA/IGNhbGxGcmFtZS0+YXJndW1l
bnQoMSkgOiBqc1VuZGVmaW5lZCgpOworICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBn
bG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RXhjZXB0aW9uU3RydWN0dXJlKCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBlcnJv
clN0cnVjdHVyZSwgbWVzc2FnZSwgb3B0aW9ucywgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIEVycm9y
VHlwZTo6RXJyb3IsIGZhbHNlKSk7Cit9CisKK1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0
b3IqIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSogdGhpc1Byb3Rv
dHlwZSkKK3sKKyAgICBhdXRvKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3I+KHZtLmhlYXApKSBXZWJBc3NlbWJs
eUV4Y2VwdGlvbkNvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOworICAgIGNvbnN0cnVjdG9yLT5m
aW5pc2hDcmVhdGlvbih2bSwgdGhpc1Byb3RvdHlwZSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdG9y
OworfQorCitTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEludGVybmFsRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
cjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSog
cHJvdG90eXBlKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCAxLCAiRXhjZXB0aW9u
Il9zLCBQcm9wZXJ0eUFkZGl0aW9uTW9kZTo6V2l0aG91dFN0cnVjdHVyZVRyYW5zaXRpb24pOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUsIHByb3RvdHlwZSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUpOworfQor
CitXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNv
bnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUsIGNhbGxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLCBjb25zdHJ1Y3RKU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hN2JjOTIzNTQ1NTMwZGU1ODU5NzBlOGRjZTdjNjAwNjkwNGFiMTMzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25D
b25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU09iamVjdC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5
cGU7CisKK2NsYXNzIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IgZmluYWwgOiBwdWJs
aWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0
aW9uIEJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKKworICAgIHN0
YXRpYyBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1
cmUqLCBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAg
ICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25z
dHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSopOworfTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IsIEludGVybmFs
RnVuY3Rpb24pOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNWFkMTRi
ZTg3OWE0ZjI3YWQyZWEyZWEyYmQyN2FlYTQ4YzU5MDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUu
Y3BwCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG90eXBlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRl
ICJBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih3ZWJBc3Nl
bWJseUV4Y2VwdGlvblByb3RvRnVuY0dldEFyZyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTih3ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvRnVuY0lzKTsKK30KKworI2luY2x1ZGUg
IldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpzX2luZm8g
PSB7ICJXZWJBc3NlbWJseS5FeGNlcHRpb24iLCAmQmFzZTo6c19pbmZvLCAmcHJvdG90eXBlVGFi
bGVXZWJBc3NlbWJseUV4Y2VwdGlvbiwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJB
c3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSkgfTsKKworLyogU291cmNlIGZvciBXZWJBc3NlbWJs
eUV4Y2VwdGlvblByb3RvdHlwZS5sdXQuaAorIEBiZWdpbiBwcm90b3R5cGVUYWJsZVdlYkFzc2Vt
Ymx5RXhjZXB0aW9uCisgZ2V0QXJnICAgd2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNHZXRB
cmcgICBGdW5jdGlvbiAyCisgaXMgICB3ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvRnVuY0lzICAg
RnVuY3Rpb24gMQorIEBlbmQKKyAqLworCitXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSog
V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgYXV0byogb2JqZWN0ID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU+KHZtLmhl
YXApKSBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBv
YmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitTdHJ1
Y3R1cmUqIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sK
KyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3Zv
aWQgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
K3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCAiRXhjZXB0aW9uIl9zKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBq
c0VtcHR5U3RyaW5nKHZtKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOworfQorCitXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6V2ViQXNz
ZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKworQUxXQVlTX0lOTElORSBzdGF0aWMgSlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbiogZ2V0RXhjZXB0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBp
ZiAoVU5MSUtFTFkoIXRoaXNWYWx1ZS5pc0NlbGwoKSkpIHsKKyAgICAgICAgdGhyb3dWTUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZ2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGF1dG8q
IHRhZyA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2VwdGlvbio+KHZtLCB0aGlzVmFs
dWUuYXNDZWxsKCkpOworICAgIGlmIChMSUtFTFkodGFnKSkKKyAgICAgICAgcmV0dXJuIHRhZzsK
KyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuRXhj
ZXB0aW9uIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLUV4Y2VwdGlvbiBvYmplY3QiX3MpOworICAg
IHJldHVybiBudWxscHRyOworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1dlYkFzc2VtYmx5
VGFnKiBnZXRUYWcoVk0mIHZtLCBKU1ZhbHVlIHRhZ1ZhbHVlKQoreworICAgIGlmICghdGFnVmFs
dWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBqc0R5bmFt
aWNDYXN0PEpTV2ViQXNzZW1ibHlUYWcqPih2bSwgdGFnVmFsdWUuYXNDZWxsKCkpOworfQorCitK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNHZXRB
cmcsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgY29uc3QgYXV0byYgdHlwZUVycm9y
ID0gWyZdKGNvbnN0IGF1dG8mIG1lc3NhZ2UpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBtYWtlU3RyaW5nKCJXZWJBc3NlbWJseS5FeGNlcHRpb24u
Z2V0QXJnKCk6ICIsIG1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7
CisgICAgfTsKKworICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIGpzRXhjZXB0aW9uID0gZ2V0
RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIEpT
V2ViQXNzZW1ibHlUYWcqIHRhZyA9IGdldFRhZyh2bSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7
CisgICAgaWYgKCF0YWcpCisgICAgICAgIHJldHVybiB0eXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50
IG11c3QgYmUgYSBXZWJBc3NlbWJseS5UYWciKTsKKworICAgIGlmIChqc0V4Y2VwdGlvbi0+dGFn
KCkgIT0gdGFnLT50YWcoKSkKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJvcigiRmlyc3QgYXJndW1l
bnQgZG9lcyBub3QgbWF0Y2ggdGhlIGV4Y2VwdGlvbiB0YWciKTsKKworICAgIHVpbnQzMl90IGlu
ZGV4ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKS50b1VJbnQzMihnbG9iYWxPYmplY3QpOworICAg
IGlmIChpbmRleCA+PSB0YWctPnRhZygpLnBhcmFtZXRlckNvdW50KCkpCisgICAgICAgIHJldHVy
biB0eXBlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpOworCisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0V4Y2VwdGlvbi0+Z2V0QXJnKGluZGV4
KSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b0Z1bmNJcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5
RXhjZXB0aW9uKiBqc0V4Y2VwdGlvbiA9IGdldEV4Y2VwdGlvbihnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFnKiB0YWcgPSBnZXRUYWco
dm0sIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgIGlmICghdGFnKSB7CisgICAgICAgIHRo
cm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgIldlYkFzc2VtYmx5LkV4Y2Vw
dGlvbi5pcygpOiBGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuVGFnIik7Cisg
ICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGpzRXhjZXB0aW9u
LT50YWcoKSA9PSB0YWctPnRhZygpKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRjMjEwNmQ4Yjk5MzFmZGE0YTBlOTRiNjFmYjVjN2UxZWEzNDhkYmMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2Vw
dGlvblByb3RvdHlwZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNP
YmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5RXhjZXB0aW9u
UHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAg
IHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1By
b3BlcnR5VGFibGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
eworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJs
eUV4Y2VwdGlvblByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZTsKKyAgICB9CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5
cGUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
KTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseUV4Y2Vw
dGlvblByb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IGRiNDA5MmFkNjk0ODJmN2EwOWQzYmUxZjc1
MjM0MjJkOWQ1YWYxM2QuLjM3MWFkNzAyZGE5N2IwOTlkODdlMDU1NmI2YWZmZjI5NGNmZDY0NzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlU
YWcuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldhc21TaWdu
YXR1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgpAQCAtMTMw
LDYgKzEzMSw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBpCiAgICAgICAgIGNhc2UgV2FzbTo6
RXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6
Okdsb2JhbDoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOgorICAgICAg
ICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RXhjZXB0aW9uOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6CiAgICAgICAgICAgICBj
b250aW51ZTsKQEAgLTM2Myw3ICszNjUsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogaQogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7Ci0gICAg
ICAgICAgICAvLyA3LiBPdGhlcndpc2UgKGkgaXMgYSB0YWJsZSBpbXBvcnQpOgorICAgICAgICAg
ICAgLy8gNy4gSWYgaSBpcyBhIHRhYmxlIGltcG9ydDoKICAgICAgICAgICAgIEpTV2ViQXNzZW1i
bHlUYWJsZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KHZtLCB2
YWx1ZSk7CiAgICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5LlRhYmxl
IG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCiAgICAgICAgICAgICBpZiAo
IXRhYmxlKQpAQCAtMzk0LDYgKzM5NiwyNCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogaQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFs
S2luZDo6RXhjZXB0aW9uOiB7CisgICAgICAgICAgICAvLyA3LiBJZiBpIGlzIGEgdGFnIGltcG9y
dDoKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWcqIHRhZyA9IGpzRHluYW1pY0Nhc3Q8SlNX
ZWJBc3NlbWJseVRhZyo+KHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5v
dCBhIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJy
b3IuCisgICAgICAgICAgICBpZiAoIXRhZykKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0
aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0
RmFpbE1lc3NhZ2UoaW1wb3J0LCAiVGFnIGltcG9ydCIsICJpcyBub3QgYW4gaW5zdGFuY2Ugb2Yg
V2ViQXNzZW1ibHkuVGFnIikpKTsKKworICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXgg
ZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEV4Y2VwdGlv
blNpZ25hdHVyZUluZGljZXNbaW1wb3J0LmtpbmRJbmRleF07CisgICAgICAgICAgICBVTlVTRURf
VkFSSUFCTEUoZXhwZWN0ZWRTaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAvLyBUT0RPCisg
ICAgICAgICAgICAvL2lmIChpbXBvcnRlZFNpZ25hdHVyZUluZGV4ICE9IGV4cGVjdGVkU2lnbmF0
dXJlSW5kZXgpCisgICAgICAgICAgICAgICAgLy9yZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1w
b3J0LCAiaW1wb3J0ZWQgVGFnIiwgInR5cGUgZG9lc24ndCBtYXRjaCB0aGUgcHJvdmlkZWQgV2Vi
QXNzZW1ibHkgVGFnJ3MgdHlwZSIpKSk7CisKKyAgICAgICAgICAgIG1faW5zdGFuY2UtPmluc3Rh
bmNlKCkuYWRkVGFnKHRhZy0+dGFnKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAg
ICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC00MjEsNiArNDQxLDkgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6bGlua0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGkKICAg
ICAgICAgfQogICAgIH0KIAorICAgIGZvciAoV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXggOiBtb2R1bGVJbmZvcm1hdGlvbi5pbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGlj
ZXMpCisgICAgICAgIG1faW5zdGFuY2UtPmluc3RhbmNlKCkuYWRkVGFnKHsgV2FzbTo6U2lnbmF0
dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkgfSk7CisKICAgICB1bnNpZ25lZCBm
dW5jdGlvbkltcG9ydENvdW50ID0gY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7CiAg
ICAgYXV0byBtYWtlRnVuY3Rpb25XcmFwcGVyID0gWyZdICh1aW50MzJfdCBpbmRleCkgLT4gSlNW
YWx1ZSB7CiAgICAgICAgIC8vIElmIHdlIGFscmVhZHkgbWFkZSBhIHdyYXBwZXIsIGRvIG5vdCBt
YWtlIGEgbmV3IG9uZS4KQEAgLTU1Nyw2ICs1ODAsMTAgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6bGlua0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3Qq
IGkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAg
IGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsKKyAgICAgICAgICAgIC8vVE9E
TworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQog
ICAgICAgICB9CiAKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KGV4cC5maWVsZCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0
cnVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzUwMjcyMWRmMjg2MDk1OGE1ZjI4ZmViNjA3YTNlNTg2
YjM3MWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oIgorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJs
eVRhZ1Byb3RvdHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFdl
YkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseVRh
Z0NvbnN0cnVjdG9yKSB9OworCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjYWxs
SlNXZWJBc3NlbWJseVRhZyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25z
dHJ1Y3RKU1dlYkFzc2VtYmx5VGFnKTsKKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNvbnN0
cnVjdEpTV2ViQXNzZW1ibHlUYWcsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAKKyAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICAvL1ZlY3Rvcjx1aW50OF90PiBzb3VyY2UgPSBjcmVh
dGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0sIGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1
bWVudCgwKSk7CisgICAgLy9SRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAg
Ly9SRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShXZWJBc3NlbWJseVRh
Z0NvbnN0cnVjdG9yOjpjcmVhdGVUYWcoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIFdURk1vdmUo
c291cmNlKSkpKTsKKyAgICAvLyBUT0RPCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHsgfSk7Cit9CisKK0pTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihjYWxsSlNXZWJBc3NlbWJseVRhZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSopKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9u
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWciKSk7Cit9CisK
K0pTV2ViQXNzZW1ibHlUYWcqIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OmNyZWF0ZVRhZyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3Qg
V2FzbTo6VGFnJiB0YWcpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBu
ZXdUYXJnZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgpKTsKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUodm0sIHdlYkFzc2VtYmx5
VGFnU3RydWN0dXJlLCBuZXdUYXJnZXQsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIHRhZykpOworfQorCitXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKiBXZWJBc3NlbWJs
eVRhZ0NvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCit7CisgICAgYXV0byogY29uc3Ry
dWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVRhZ0NvbnN0cnVj
dG9yPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsK
KyAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUpOworICAg
IHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseVRhZ0NvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5VGFnQ29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUq
IHByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgMSwgIlRhZyJfcywg
UHJvcGVydHlBZGRpdGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFuc2l0aW9uKTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBl
LCBwcm90b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmli
dXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKK30KKworV2Vi
QXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvcihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjYWxsSlNX
ZWJBc3NlbWJseVRhZywgY29uc3RydWN0SlNXZWJBc3NlbWJseVRhZykKK3sKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0
b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45MWUyZjFkODA2ZTkwMjFlZDg1NzVmYWM1YjM4MTZjMTM5OWEz
MTU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKyNpbmNsdWRl
ICJXYXNtT3BzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1dlYkFzc2VtYmx5VGFn
OworY2xhc3MgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGU7CisKK25hbWVzcGFjZSBXYXNtIHsKK2Ns
YXNzIFRhZzsKK30KKworY2xhc3MgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvciBmaW5hbCA6IHB1
YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVu
Y3Rpb24gQmFzZTsKKworICAgIHN0YXRpYyBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKiBjcmVh
dGUoVk0mLCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSopOworICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSk7CisKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseVRhZyogY3JlYXRlVGFnKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiwgY29uc3QgV2FzbTo6VGFnJik7CisKKyAgICBERUNMQVJFX0lORk87
CisKK3ByaXZhdGU6CisgICAgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVy
ZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZSopOworfTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5
VGFnQ29uc3RydWN0b3IsIEludGVybmFsRnVuY3Rpb24pOworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45MTMxMjkyNmQwZTA0YWQwNzQ4ZGQxNmU3ODJhYzIyNTEyZGRkYWY5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90
b3R5cGUuY3BwCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5VGFnUHJvdG90eXBlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRl
ICJPYmplY3RDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKworbmFtZXNw
YWNlIEpTQyB7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih3ZWJBc3NlbWJseVRh
Z1Byb3RvRnVuY1R5cGUpOworfQorCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUu
bHV0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlU
YWdQcm90b3R5cGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5LlRhZyIsICZCYXNlOjpzX2luZm8s
ICZwcm90b3R5cGVUYWJsZVdlYkFzc2VtYmx5VGFnLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlKSB9OworCisvKiBTb3VyY2UgZm9yIFdlYkFzc2Vt
Ymx5VGFnUHJvdG90eXBlLmx1dC5oCisgQGJlZ2luIHByb3RvdHlwZVRhYmxlV2ViQXNzZW1ibHlU
YWcKKyB0eXBlICAgd2ViQXNzZW1ibHlUYWdQcm90b0Z1bmNUeXBlICAgRnVuY3Rpb24gMAorIEBl
bmQKKyAqLworCisKK1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlKiBXZWJBc3NlbWJseVRhZ1Byb3Rv
dHlwZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK3sKKyAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJB
c3NlbWJseVRhZ1Byb3RvdHlwZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlKHZt
LCBzdHJ1Y3R1cmUpOworICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVy
biBvYmplY3Q7Cit9CisKK1N0cnVjdHVyZSogV2ViQXNzZW1ibHlUYWdQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKK30KKwordm9pZCBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJ
VElPTigpOworfQorCitXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTo6V2ViQXNzZW1ibHlUYWdQcm90
b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKK3sKK30KKworQUxXQVlTX0lOTElORSBzdGF0aWMgSlNXZWJBc3NlbWJseVRhZyogZ2V0
VGFnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlKQorewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoVU5MSUtFTFkoIXRoaXNWYWx1ZS5pc0NlbGwo
KSkpIHsKKyAgICAgICAgdGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5v
dEFuT2JqZWN0RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIGF1dG8qIHRhZyA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3Nl
bWJseVRhZyo+KHZtLCB0aGlzVmFsdWUuYXNDZWxsKCkpOworICAgIGlmIChMSUtFTFkodGFnKSkK
KyAgICAgICAgcmV0dXJuIHRhZzsKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiV2ViQXNzZW1ibHkuVGFnIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLVRhZyBvYmplY3Qi
X3MpOworICAgIHJldHVybiBudWxscHRyOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
d2ViQXNzZW1ibHlUYWdQcm90b0Z1bmNUeXBlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIEpTV2ViQXNzZW1ibHlUYWcqIGpzVGFnID0gZ2V0VGFnKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIGNvbnN0IFdhc206OlRhZyYgdGFnID0ganNUYWctPnRh
ZygpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRhZy5wYXJhbWV0ZXJDb3VudCgpOyArK2kpCisgICAgICAgIGFyZ0xpc3Qu
YXBwZW5kKFdhc206OnR5cGVUb1N0cmluZyh2bSwgdGFnLnBhcmFtZXRlcihpKS5raW5kKSk7CisK
KyAgICBpZiAoVU5MSUtFTFkoYXJnTGlzdC5oYXNPdmVyZmxvd2VkKCkpKSB7CisgICAgICAgIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgICAgICBy
ZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICB9CisKKyAgICBKU0FycmF5KiBwYXJhbWV0ZXJz
ID0gY29uc3RydWN0QXJyYXkoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRp
b25Qcm9maWxlKj4obnVsbHB0ciksIGFyZ0xpc3QpOworICAgIEpTT2JqZWN0KiB0eXBlID0gY29u
c3RydWN0RW1wdHlPYmplY3Qodm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlUYWdUeXBlU3Ry
dWN0dXJlKCkpOworICAgIHR5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFyYW1ldGVycyIpLCBwYXJhbWV0ZXJzKTsKKworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0eXBlKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQ
cm90b3R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFn
UHJvdG90eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI0MzJmOWM4OWJkY2RhN2RjN2I5NDE4NDc2MmIyNTI2
YjU5YmI2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSwgQmFzZSk7CisgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisKKyAgICBzdGF0aWMgV2ViQXNz
ZW1ibHlUYWdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
Kik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBX
ZWJBc3NlbWJseVRhZ1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
d2FzbS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCmluZGV4IDRm
OGRkOWUzZDIxMzQzNTAwMDAwNmUyNDE0NmIwMTk0YzlhYzg4ZjEuLmE0MzUxMGY0Zjg0NzMwMzg2
NDNjMTY1YzNjMzA4MTQ4ZjA3NTA0YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL3dhc20uanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpz
b24KQEAgLTIzLDM0ICsyMywzOCBAQAogICAgICJibG9ja190eXBlIjogWyJpMzIiLCAiaTY0Iiwg
ImYzMiIsICJmNjQiLCAidm9pZCIsICJleHRlcm5yZWYiLCAiZnVuY3JlZiJdLAogICAgICJyZWZf
dHlwZSI6IFsiZnVuY3JlZiIsICJleHRlcm5yZWYiLCAidHlwZV9pZHgiXSwKICAgICAiZXh0ZXJu
YWxfa2luZCI6IHsKLSAgICAgICAgIkZ1bmN0aW9uIjogeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1
ZSI6IDAgfSwKLSAgICAgICAgIlRhYmxlIjogICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6
IDEgfSwKLSAgICAgICAgIk1lbW9yeSI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDIg
fSwKLSAgICAgICAgIkdsb2JhbCI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDMgfQor
ICAgICAgICAiRnVuY3Rpb24iOiAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMCB9LAor
ICAgICAgICAiVGFibGUiOiAgICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMSB9LAor
ICAgICAgICAiTWVtb3J5IjogICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMiB9LAor
ICAgICAgICAiR2xvYmFsIjogICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMyB9LAor
ICAgICAgICAiRXhjZXB0aW9uIjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogNCB9CiAg
ICAgfSwKICAgICAic2VjdGlvbiIgOiB7Ci0gICAgICAgICJUeXBlIjogICAgIHsgInR5cGUiOiAi
dmFydWludDciLCAidmFsdWUiOiAgMSwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIHNpZ25hdHVy
ZSBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJJbXBvcnQiOiAgIHsgInR5cGUiOiAidmFydWlu
dDciLCAidmFsdWUiOiAgMiwgImRlc2NyaXB0aW9uIjogIkltcG9ydCBkZWNsYXJhdGlvbnMiIH0s
Ci0gICAgICAgICJGdW5jdGlvbiI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMywg
ImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAgIlRhYmxl
IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA0LCAiZGVzY3JpcHRpb24iOiAi
SW5kaXJlY3QgZnVuY3Rpb24gdGFibGUgYW5kIG90aGVyIHRhYmxlcyIgfSwKLSAgICAgICAgIk1l
bW9yeSI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA1LCAiZGVzY3JpcHRpb24i
OiAiTWVtb3J5IGF0dHJpYnV0ZXMiIH0sCi0gICAgICAgICJHbG9iYWwiOiAgIHsgInR5cGUiOiAi
dmFydWludDciLCAidmFsdWUiOiAgNiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlv
bnMiIH0sCi0gICAgICAgICJFeHBvcnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAgNywgImRlc2NyaXB0aW9uIjogIkV4cG9ydHMiIH0sCi0gICAgICAgICJTdGFydCI6ICAgIHsg
InR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IGZ1
bmN0aW9uIGRlY2xhcmF0aW9uIiB9LAotICAgICAgICAiRWxlbWVudCI6ICB7ICJ0eXBlIjogInZh
cnVpbnQ3IiwgInZhbHVlIjogIDksICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9uIiB9
LAotICAgICAgICAiQ29kZSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTAs
ICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBib2RpZXMgKGNvZGUpIiB9LAotICAgICAgICAiRGF0
YSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlwdGlvbiI6
ICJEYXRhIHNlZ21lbnRzIiB9CisgICAgICAgICJUeXBlIjogICAgICB7ICJ0eXBlIjogInZhcnVp
bnQ3IiwgInZhbHVlIjogIDEsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBzaWduYXR1cmUgZGVj
bGFyYXRpb25zIiB9LAorICAgICAgICAiSW1wb3J0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIs
ICJ2YWx1ZSI6ICAyLCAiZGVzY3JpcHRpb24iOiAiSW1wb3J0IGRlY2xhcmF0aW9ucyIgfSwKKyAg
ICAgICAgIkZ1bmN0aW9uIjogIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMywgImRl
c2NyaXB0aW9uIjogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIlRhYmxlIjog
ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNCwgImRlc2NyaXB0aW9uIjogIklu
ZGlyZWN0IGZ1bmN0aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMiIH0sCisgICAgICAgICJNZW1v
cnkiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDUsICJkZXNjcmlwdGlvbiI6
ICJNZW1vcnkgYXR0cmlidXRlcyIgfSwKKyAgICAgICAgIkdsb2JhbCI6ICAgIHsgInR5cGUiOiAi
dmFydWludDciLCAidmFsdWUiOiAgNiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlv
bnMiIH0sCisgICAgICAgICJFeHBvcnQiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogIDcsICJkZXNjcmlwdGlvbiI6ICJFeHBvcnRzIiB9LAorICAgICAgICAiU3RhcnQiOiAgICAg
eyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA4LCAiZGVzY3JpcHRpb24iOiAiU3RhcnQg
ZnVuY3Rpb24gZGVjbGFyYXRpb24iIH0sCisgICAgICAgICJFbGVtZW50IjogICB7ICJ0eXBlIjog
InZhcnVpbnQ3IiwgInZhbHVlIjogIDksICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9u
IiB9LAorICAgICAgICAiQ29kZSI6ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6
IDEwLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gYm9kaWVzIChjb2RlKSIgfSwKKyAgICAgICAg
IkRhdGEiOiAgICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMSwgImRlc2NyaXB0
aW9uIjogIkRhdGEgc2VnbWVudHMiIH0sCisgICAgICAgICJEYXRhQ291bnQiOiB7ICJ0eXBlIjog
InZhcnVpbnQ3IiwgInZhbHVlIjogMTIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgZGF0YSBz
ZWdtZW50cyIgfSwKKyAgICAgICAgIkV4Y2VwdGlvbiI6IHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAxMywgImRlc2NyaXB0aW9uIjogIkV4Y2VwdGlvbiBkZWNsYXJhdGlvbnMiIH0KICAg
ICB9LAogICAgICJvcGNvZGUiOiB7CiAgICAgICAgICJ1bnJlYWNoYWJsZSI6ICAgICAgICAgeyAi
Y2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMCwgInJldHVybiI6IFtdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAidHJhcCBpbW1lZGlhdGVseSIgfSwKKyAgICAgICAgIm5v
cCI6ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjog
ICAxLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0
ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJubyBvcGVyYXRp
b24iIH0sCiAgICAgICAgICJibG9jayI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29u
dHJvbCIsICAgICJ2YWx1ZSI6ICAgMiwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAg
ICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiYmVnaW4gYSBzZXF1ZW5jZSBvZiBleHByZXNzaW9ucywgeWllbGRpbmcgMCBvciAx
IHZhbHVlcyIgfSwKICAgICAgICAgImxvb3AiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6
ICJjb250cm9sIiwgICAgInZhbHVlIjogICAzLCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAg
ICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJiZWdpbiBhIGJsb2NrIHdoaWNoIGNhbiBhbHNvIGZvcm0gY29udHJvbCBm
bG93IGxvb3BzIiB9LAogICAgICAgICAiaWYiOiAgICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5
IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDQsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAg
ICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYm9vbCJdLCAgICAgICAgICAgICAgICAg
ICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogImJlZ2luIGlmIGV4cHJlc3Npb24iIH0sCiAgICAgICAgICJlbHNlIjog
ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNSwg
InJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gZWxzZSBleHBy
ZXNzaW9uIG9mIGlmIiB9LAotICAgICAgICAic2VsZWN0IjogICAgICAgICAgICAgIHsgImNhdGVn
b3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4iOiBbInByZXYiXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJd
LCAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVlcyBiYXNlZCBvbiBjb25k
aXRpb24iIH0sCi0gICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAgeyAiY2F0ZWdvcnkiOiAi
Y29udHJvbCIsICAgICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAg
ICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291bnQiLCAidHlwZSI6ICJ2
YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldCB0eXBlcyB2ZWN0b3Ii
fSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeyJuYW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0eXBlIjogInZhbHVlX3R5
cGUqIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJ0YXJnZXQgdHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Ygc2VsZWN0IGluc3RydWN0
aW9uIn1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogInRoZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRoIHRoZSBhbm5vdGF0aW9u
IGZvciByZXN1bHQgdHlwZXMiIH0sCisgICAgICAgICJ0cnkiOiAgICAgICAgICAgICAgICAgeyAi
Y2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNiwgInJldHVybiI6IFsiY29udHJv
bCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9j
a190eXBlIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gdHJ5IGV4cHJlc3Npb24iIH0sCisgICAgICAg
ICJjYXRjaCI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1
ZSI6ICAgNywgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFy
YW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3si
bmFtZSI6ICJleG4iLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4g
Y2F0Y2ggZXhwcmVzc2lvbiBvZiB0cnkiIH0sCisgICAgICAgICJ0aHJvdyI6ICAgICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgOCwgInJldHVybiI6IFsi
Y29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4iLCAidHlwZSI6
ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhyb3cgZXhjZXB0aW9uIiB9LAorICAgICAg
ICAicmV0aHJvdyI6ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFs
dWUiOiAgIDksICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBh
cmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7
Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInJldGhy
b3cgdGhlIGV4Y2VwdGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayIgfSwKICAgICAgICAgImJy
IjogICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjog
IDEyLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0
ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1l
IjogInJlbGF0aXZlX2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJicmVhayB0aGF0
IHRhcmdldHMgYW4gb3V0ZXIgbmVzdGVkIGJsb2NrIiB9LAogICAgICAgICAiYnJfaWYiOiAgICAg
ICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTMsICJyZXR1
cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRp
dmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImNvbmRpdGlvbmFsIGJyZWFrIHRo
YXQgdGFyZ2V0cyBhbiBvdXRlciBuZXN0ZWQgYmxvY2siIH0sCiAgICAgICAgICJicl90YWJsZSI6
ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxNCwgInJl
dHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJn
ZXRfY291bnQiLCAgICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMg
aW4gdGhlIHRhcmdldF90YWJsZSJ9LApAQCAtNTgsOCArNjIsMTMgQEAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjog
ImRlZmF1bHRfdGFyZ2V0IiwgInR5cGUiOiAidmFydWludDMyIiwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhbiBvdXRlciBibG9j
ayBvciBsb29wIHRvIHdoaWNoIHRvIGJyZWFrIGluIHRoZSBkZWZhdWx0IGNhc2UifV0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYnJh
bmNoIHRhYmxlIGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3QiIH0sCiAgICAgICAgICJyZXR1cm4iOiAg
ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxNSwgInJl
dHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAicmV0dXJuIHplcm8gb3Igb25l
IHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbiIgfSwKKyAgICAgICAgImRlbGVnYXRlIjogICAgICAg
ICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI0LCAicmV0dXJuIjog
WyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2Rl
cHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJkZWxlZ2F0ZSB0byBhIHBhcmVudCB0cnkg
YmxvY2siIH0sCisgICAgICAgICJjYXRjaF9hbGwiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
Y29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNSwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAg
ICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiY2F0Y2ggZXhjZXB0aW9ucyByZWdhcmRsZXNzIG9mIHRhZyIgfSwKICAgICAg
ICAgImRyb3AiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZh
bHVlIjogIDI2LCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw
YXJhbWV0ZXIiOiBbImFueSJdLCAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJpZ25v
cmUgdmFsdWUiIH0sCi0gICAgICAgICJub3AiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnki
OiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMSwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAibm8gb3BlcmF0aW9uIiB9LAorICAgICAgICAic2VsZWN0IjogICAgICAg
ICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4i
OiBbInByZXYiXSwgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55Iiwg
InByZXYiLCAiYm9vbCJdLCAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVl
cyBiYXNlZCBvbiBjb25kaXRpb24iIH0sCisgICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJl
diJdLCAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIs
ICJib29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291
bnQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdl
dCB0eXBlcyB2ZWN0b3IifSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0
eXBlIjogInZhbHVlX3R5cGUqIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJ0YXJnZXQgdHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Yg
c2VsZWN0IGluc3RydWN0aW9uIn1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRo
IHRoZSBhbm5vdGF0aW9uIGZvciByZXN1bHQgdHlwZXMiIH0sCiAgICAgICAgICJlbmQiOiAgICAg
ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMSwgInJl
dHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZW5kIGEgYmxvY2ssIGxvb3As
IG9yIGlmIiB9LAogICAgICAgICAiaTMyLmNvbnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5Ijog
InNwZWNpYWwiLCAgICAidmFsdWUiOiAgNjUsICJyZXR1cm4iOiBbImkzMiJdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJp
bnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogImEgY29uc3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTMyIiB9LAogICAg
ICAgICAiaTY0LmNvbnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAi
dmFsdWUiOiAgNjYsICJyZXR1cm4iOiBbImk2NCJdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
InBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6
IFt7Im5hbWUiOiAidmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJpbnQ2NCJ9XSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImEg
Y29uc3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTY0IiB9LAo=
</data>
<flag name="commit-queue"
          id="461709"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440106</attachid>
            <date>2021-10-04 14:46:11 -0700</date>
            <delta_ts>2021-10-05 19:22:14 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>wasm-eh.patch</filename>
            <type>text/plain</type>
            <size>647378</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS55YW1sIGIvSlNUZXN0cy93YXNtLnlhbWwKaW5kZXgg
MmVjYjYzNGRiZjViLi4xZjQ1MWJjOTExOGMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS55YW1s
CisrKyBiL0pTVGVzdHMvd2FzbS55YW1sCkBAIC00NSw2ICs0NSw4IEBACiAgIGNtZDogcnVuV2Vi
QXNzZW1ibHkgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2FzbS9zZWxmLXRlc3Qv
CiAgIGNtZDogcnVuV2ViQXNzZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcworLSBw
YXRoOiB3YXNtL3Y4LworICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUoOm5vX21vZHVsZSwgIm1q
c3VuaXQuanMiKSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogCiAtIHBhdGg6IHdhc20vcmVmZXJl
bmNlcy1zcGVjLXRlc3RzL2VsZW0ud2FzdC5qcwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5UmVmZXJl
bmNlU3BlY1Rlc3QgOm5vcm1hbApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMg
Yi9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcwppbmRleCAzMmZmZTZiYmI1NjEuLjExMDFmNzI1Y2Nk
ZCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKKysrIGIvSlNUZXN0cy93YXNt
L0J1aWxkZXIuanMKQEAgLTEyOCw2ICsxMjgsMTggQEAgY29uc3QgX2ltcG9ydFRhYmxlQ29udGlu
dWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CiAgICAgfTsKIH07
CiAKK2NvbnN0IF9pbXBvcnRFeGNlcHRpb25Db250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlv
biwgbmV4dEJ1aWxkZXIpID0+IHsKKyAgICByZXR1cm4gKG1vZHVsZSwgZmllbGQsIHR5cGUpID0+
IHsKKyAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKG1vZHVsZSwgYEltcG9ydCBmdW5jdGlvbiBtb2R1
bGUgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7bW9kdWxlfSJgKTsKKyAgICAgICAgYXNzZXJ0
LmlzU3RyaW5nKGZpZWxkLCBgSW1wb3J0IGZ1bmN0aW9uIGZpZWxkIHNob3VsZCBiZSBhIHN0cmlu
ZywgZ290ICIke2ZpZWxkfSJgKTsKKyAgICAgICAgY29uc3QgdHlwZVNlY3Rpb24gPSBidWlsZGVy
Ll9nZXRTZWN0aW9uKCJUeXBlIik7CisgICAgICAgIHR5cGUgPSBfbWF5YmVSZWdpc3RlclR5cGUo
YnVpbGRlciwgdHlwZSk7CisgICAgICAgIGNvbnN0IHRhZyA9IDA7CisgICAgICAgIHNlY3Rpb24u
ZGF0YS5wdXNoKHsgZmllbGQsIHR5cGUsIHRhZywga2luZDogIkV4Y2VwdGlvbiIsIG1vZHVsZSB9
KTsKKyAgICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IobmV4dEJ1aWxkZXIpOwor
ICAgIH0KK307CisKIGNvbnN0IF9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVy
LCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewogICAgIHJldHVybiAoZmllbGQsIGluZGV4LCB0
eXBlKSA9PiB7CiAgICAgICAgIGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEV4cG9ydCBmdW5jdGlv
biBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtmaWVsZH0iYCk7CkBAIC0yMTUsNiAr
MjI3LDE0IEBAIGNvbnN0IF9leHBvcnRUYWJsZUNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0
aW9uLCBuZXh0QnVpbGRlcikgPT4gewogICAgIH0KIH07CiAKK2NvbnN0IF9leHBvcnRFeGNlcHRp
b25Db250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKKyAg
ICByZXR1cm4gKGZpZWxkLCBpbmRleCkgPT4geworICAgICAgICBhc3NlcnQuaXNOdW1iZXIoaW5k
ZXgsIGBFeGNlcHRpb24gZXhwb3J0cyBvbmx5IHN1cHBvcnQgbnVtYmVyIGluZGljZXNgKTsKKyAg
ICAgICAgc2VjdGlvbi5kYXRhLnB1c2goe2ZpZWxkLCBraW5kOiAiRXhjZXB0aW9uIiwgaW5kZXh9
KTsKKyAgICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IobmV4dEJ1aWxkZXIpOwor
ICAgIH0KK307CisKIGNvbnN0IF9pbXBvcnRHbG9iYWxDb250aW51YXRpb24gPSAoYnVpbGRlciwg
c2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKICAgICByZXR1cm4gKCkgPT4gewogICAgICAgICBj
b25zdCBnbG9iYWxCdWlsZGVyID0gewpAQCAtMzA3LDYgKzMyNyw3IEBAIGNvbnN0IF9jaGVja0lt
bXMgPSAob3AsIGltbXMsIGV4cGVjdGVkSW1tcywgcmV0KSA9PiB7CiAgICAgICAgIGNhc2UgInRh
cmdldF90YWJsZSI6IGJyZWFrOyAvLyBpbXByb3ZlIGNoZWNraW5nIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM0MjEKICAgICAgICAgY2FzZSAicmVzZXJ2ZWQiOiBi
cmVhazsgLy8gaW1wcm92ZSBjaGVja2luZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYzNDIxCiAgICAgICAgIGNhc2UgInRhYmxlX2luZGV4IjogYnJlYWs7IC8vIGlt
cHJvdmUgY2hlY2tpbmcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MzQyMQorICAgICAgICBjYXNlICJleG4iOiBicmVhazsKICAgICAgICAgY2FzZSAicmVmdHlwZSI6
CiAgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KFdBU00uaXNWYWxpZFJlZlR5cGUoaW1tc1tpZHhd
KSwgYEludmFsaWQgcmVmIHR5cGUgb24gJHtvcH06ICIke2ltbXNbaWR4XX0iYCk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTMzNSwxMSArMzU2LDEzIEBAIGNvbnN0IF9jcmVhdGVGdW5jdGlvbkJ1
aWxkZXIgPSAoZnVuYywgYnVpbGRlciwgcHJldmlvdXNCdWlsZGVyKSA9PiB7CiAgICAgICAgICAg
ICAgICAgbmV4dEJ1aWxkZXIgPSBmdW5jdGlvbkJ1aWxkZXI7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlICJFbmQiOgorICAgICAgICAgICAgY2FzZSAiRGVsZWdhdGUi
OgogICAgICAgICAgICAgICAgIG5leHRCdWlsZGVyID0gcHJldmlvdXNCdWlsZGVyOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAiQmxvY2siOgogICAgICAgICAgICAg
Y2FzZSAiTG9vcCI6CiAgICAgICAgICAgICBjYXNlICJJZiI6CisgICAgICAgICAgICBjYXNlICJU
cnkiOgogICAgICAgICAgICAgICAgIG5leHRCdWlsZGVyID0gX2NyZWF0ZUZ1bmN0aW9uQnVpbGRl
cihmdW5jLCBidWlsZGVyLCBmdW5jdGlvbkJ1aWxkZXIpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQpAQCAtNDg4LDYgKzUxMSw3IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNz
IEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLkZ1bmN0aW9uID0g
X2ltcG9ydEZ1bmN0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOwogICAg
ICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLk1lbW9yeSA9IF9pbXBvcnRNZW1vcnlDb250
aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAgICAgICAgIGlt
cG9ydEJ1aWxkZXIuVGFibGUgPSBfaW1wb3J0VGFibGVDb250aW51YXRpb24odGhpcywgcywgaW1w
b3J0QnVpbGRlcik7CisgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuRXhjZXB0aW9u
ID0gX2ltcG9ydEV4Y2VwdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVyKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IoaW1wb3J0
QnVpbGRlcik7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTUzMSw2ICs1NTUsMjMgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAgY2FzZSAi
RXhjZXB0aW9uIjogeworICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFCdWlsZGVyID0geworICAgICAgICAg
ICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAg
U2lnbmF0dXJlOiAoc2lnbmF0dXJlKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGV0IHR5cGUgPSBfbWF5YmVSZWdpc3RlclR5cGUodGhpcywgc2lnbmF0dXJlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzLmRhdGEucHVzaCh7IHRhZzogMCwgdHlwZSB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihkYXRh
QnVpbGRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgd2UgYWRkIHRhZ3Mgd2l0aCBub24temVybyB2YWx1ZSB0aGVuIHdlIGNhbiBh
ZGQgYSBuZXcgbWVtYmVyLgorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihkYXRhQnVpbGRlcik7CisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgY2FzZSAiR2xvYmFsIjoKICAgICAgICAgICAgICAgICB0aGlzW3NlY3Rpb25dID0g
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLl9hZGRTZWN0
aW9uKHNlY3Rpb24pOwpAQCAtNTY5LDYgKzYxMCw3IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1
aWxkZXIgewogICAgICAgICAgICAgICAgICAgICBleHBvcnRCdWlsZGVyLkZ1bmN0aW9uID0gX2V4
cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGV4cG9ydEJ1aWxkZXIpOwogICAgICAg
ICAgICAgICAgICAgICBleHBvcnRCdWlsZGVyLk1lbW9yeSA9IF9leHBvcnRNZW1vcnlDb250aW51
YXRpb24odGhpcywgcywgZXhwb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAgICAgICAgIGV4cG9y
dEJ1aWxkZXIuVGFibGUgPSBfZXhwb3J0VGFibGVDb250aW51YXRpb24odGhpcywgcywgZXhwb3J0
QnVpbGRlcik7CisgICAgICAgICAgICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuRXhjZXB0aW9uID0g
X2V4cG9ydEV4Y2VwdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBleHBvcnRCdWlsZGVyKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IoZXhwb3J0QnVp
bGRlcik7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTcz
NywxNSArNzc5LDYgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAg
ICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc2VjdGlvbnMpCiAgICAgICAgICAgICAgICAgaWYgKG51
bWJlciAhPT0gX3Vua25vd25TZWN0aW9uSWQpCiAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5m
YWxzeShzLm5hbWUgPT09IG5hbWUgJiYgcy5pZCA9PT0gbnVtYmVyLCBgQ2Fubm90IGhhdmUgdHdv
IHNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSAiJHtuYW1lfSIgYW5kIElEICR7bnVtYmVyfWAp
OwotICAgICAgICAgICAgLy8gQ2hlY2sgb3JkZXJpbmcuCi0gICAgICAgICAgICBpZiAoKG51bWJl
ciAhPT0gX3Vua25vd25TZWN0aW9uSWQpICYmICh0aGlzLl9zZWN0aW9ucy5sZW5ndGggIT09IDAp
KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX3NlY3Rpb25zLmxlbmd0aCAt
IDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZWN0aW9u
c1tpXS5pZCA9PT0gX3Vua25vd25TZWN0aW9uSWQpCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmxlKHRoaXMuX3NlY3Rpb25zW2ld
LmlkLCBudW1iZXIsIGBCYWQgc2VjdGlvbiBvcmRlcmluZzogIiR7dGhpcy5fc2VjdGlvbnNbaV0u
bmFtZX0iIGNhbm5vdCBwcmVjZWRlICIke25hbWV9ImApOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgY29uc3QgcyA9IE9iamVjdC5hc3NpZ24oeyBuYW1lOiBuYW1lLCBpZDogbnVtYmVyLCBkYXRh
OiBbXSB9LCBleHRyYU9iamVjdCB8fCB7fSk7CiAgICAgICAgIHRoaXMuX3NlY3Rpb25zLnB1c2go
cyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5q
cyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCmluZGV4IDM1OGJi
NDgyZDRlMC4uZTljNTc2MjYwZjVkIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vQnVpbGRlcl9X
ZWJBc3NlbWJseUJpbmFyeS5qcworKysgYi9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJs
eUJpbmFyeS5qcwpAQCAtMTQzLDYgKzE0MywxMCBAQCBjb25zdCBlbWl0dGVycyA9IHsKICAgICAg
ICAgICAgIGNhc2UgIkdsb2JhbCI6CiAgICAgICAgICAgICAgICAgcHV0R2xvYmFsVHlwZShiaW4s
IGVudHJ5Lmdsb2JhbERlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgIkV4Y2VwdGlvbiI6CisgICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVp
bnQzMiIsIGVudHJ5LnRhZyk7CisgICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIs
IGVudHJ5LnR5cGUpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfSwKQEAgLTE4NSw2ICsxODksNyBAQCBjb25zdCBlbWl0dGVycyA9IHsKICAg
ICAgICAgICAgIGNhc2UgIkZ1bmN0aW9uIjoKICAgICAgICAgICAgIGNhc2UgIk1lbW9yeSI6CiAg
ICAgICAgICAgICBjYXNlICJUYWJsZSI6CisgICAgICAgICAgICBjYXNlICJFeGNlcHRpb24iOgog
ICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBlbnRyeS5pbmRleCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3Io
YEltcGxlbWVudGF0aW9uIHByb2JsZW06IHVuZXhwZWN0ZWQga2luZCAke2VudHJ5LmtpbmR9YCk7
CkBAIC0yNTQsNiArMjU5LDE0IEBAIGNvbnN0IGVtaXR0ZXJzID0gewogICAgICAgICAgICAgICAg
IHB1dChiaW4sICJ1aW50OCIsIGJ5dGUpOwogICAgICAgICB9CiAgICAgfSwKKworICAgIEV4Y2Vw
dGlvbjogKHNlY3Rpb24sIGJpbikgPT4geworICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwg
c2VjdGlvbi5kYXRhLmxlbmd0aCk7CisgICAgICAgIGZvciAoY29uc3QgZXhuIG9mIHNlY3Rpb24u
ZGF0YSkgeworICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGV4bi50YWcpOworICAg
ICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGV4bi50eXBlKTsKKyAgICAgICAgfQorICAg
IH0sCiB9OwogCiBleHBvcnQgY29uc3QgQmluYXJ5ID0gKHByZWFtYmxlLCBzZWN0aW9ucykgPT4g
ewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Fzc2VydC5qcyBiL0pTVGVzdHMvd2FzbS9hc3Nl
cnQuanMKaW5kZXggNmZkYjY1YTRkYWRkLi45NDgzOGQ5N2VmNTUgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvd2FzbS9hc3NlcnQuanMKKysrIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwpAQCAtMTI0LDcg
KzEyNCw3IEBAIGNvbnN0IF90aHJvd3MgPSAoZnVuYywgdHlwZSwgbWVzc2FnZSwgLi4uYXJncykg
PT4gewogICAgIHRyeSB7CiAgICAgICAgIGZ1bmMoLi4uYXJncyk7CiAgICAgfSBjYXRjaCAoZSkg
ewotICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIHR5cGUgJiYgZS5tZXNzYWdlLmluZGV4T2YobWVz
c2FnZSkgPj0gMCkKKyAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiB0eXBlICYmICh0eXBlb2YoZS5t
ZXNzYWdlKSA9PSAidW5kZWZpbmVkIiB8fCBlLm1lc3NhZ2UuaW5kZXhPZihtZXNzYWdlKSA+PSAw
KSkKICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICBfZmFpbChgRXhwZWN0ZWQgdG8gdGhy
b3cgYSAke3R5cGUubmFtZX0gd2l0aCBtZXNzYWdlICIke21lc3NhZ2V9IiwgZ290ICR7ZS5uYW1l
fSB3aXRoIG1lc3NhZ2UgIiR7ZS5tZXNzYWdlfSJgKTsKICAgICB9CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMgYi9KU1Rlc3RzL3dhc20vc2Vs
Zi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMKaW5kZXggYmIxYjk3YjE5ZDVjLi4yMDlmMjBiNzZi
YmEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5q
cworKysgYi9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMKQEAgLTE0
MCwxMSArMTQwLDYgQEAgY29uc3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4g
ewogICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDApOwogfSkoKTsKIAot
KGZ1bmN0aW9uIEltcG9ydEJlZm9yZVR5cGVTZWN0aW9ucygpIHsKLSAgICBjb25zdCBiID0gKG5l
dyBCdWlsZGVyKCkpLkltcG9ydCgpLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYi5U
eXBlKCksIEVycm9yLCBgRXhwZWN0ZWQ6ICIyIiA+ICIxIjogQmFkIHNlY3Rpb24gb3JkZXJpbmc6
ICJJbXBvcnQiIGNhbm5vdCBwcmVjZWRlICJUeXBlImApOwotfSkoKTsKLQogKGZ1bmN0aW9uIElt
cG9ydEZ1bmN0aW9uV2l0aG91dFR5cGVTZWN0aW9uKCkgewogICAgIGNvbnN0IGkgPSAobmV3IEJ1
aWxkZXIoKSkuSW1wb3J0KCk7CiAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpLkZ1bmN0aW9uKCJm
b28iLCAiYmFyIiwgMCksIEVycm9yLCBgU2hvdWxkbid0IGJlIHVuZGVmaW5lZDogQ2FuIG5vdCB1
c2UgdHlwZSAwIGlmIGEgdHlwZSBzZWN0aW9uIGlzIG5vdCBwcmVzZW50YCk7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vc3RyZXNzL2NhdGNoLXdpdGgtZGVsZWdhdGUuanMgYi9KU1Rlc3RzL3dh
c20vc3RyZXNzL2NhdGNoLXdpdGgtZGVsZWdhdGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi5kMzBiZWY1OTNjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3dhc20vc3RyZXNzL2NhdGNoLXdpdGgtZGVsZWdhdGUuanMKQEAgLTAsMCArMSw5MCBAQAoraW1w
b3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9t
ICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBi
LlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2Fs
bGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtd
fSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAg
IC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAg
ICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAg
ICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAg
IC5JMzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6
IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOwor
CisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJs
eS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4
cG9ydHMuY2FsbCgpLCAzKTsKKworICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJh
bWV0ZXJzOiBbXSB9KTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxs
LCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQorCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1
aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
dm9pZCIgfSkKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImNvbnRleHQiLCAidGFnIiwgeyBwYXJh
bXM6IFsiaTMyIl0sIHJldDogInZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVu
Y3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBb
XX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAg
ICAuRXhjZXB0aW9uKCJmb28iLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0p
CisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAg
ICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAg
ICAgICAgLkRlbGVnYXRlKDApCisgICAgICAgICAgICAuQ2F0Y2goMSkKKyAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7
CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGxl
dCBvdGhlclRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbImkzMiJdfSkK
KyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsg
Y29udGV4dDogeyBjYWxsYmFjaywgdGFnOiBvdGhlclRhZyB9fSk7CisKKyAgICBsZXQgdGFnID0g
aW5zdGFuY2UuZXhwb3J0cy5mb287CisgICAgbGV0IGFyZ3MgPSBbXTsKKworICAgIGZ1bmN0aW9u
IGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRh
ZywgYXJncyk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgp
LCAzKTsKKworICAgIHRhZyA9IG90aGVyVGFnOworICAgIGFyZ3MgPSBbMTAwXTsKKworICAgIGxl
dCBleG4gPSBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHku
RXhjZXB0aW9uKTsKKyAgICBhc3NlcnQuZXEoZXhuLmdldEFyZyh0YWcsIDApLCAxMDApOworfQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9jcmVhdGUtdGFnLWZyb20uanMgYi9KU1Rl
c3RzL3dhc20vc3RyZXNzL2NyZWF0ZS10YWctZnJvbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLmIyNzhkNmMyMTc2YwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVz
dHMvd2FzbS9zdHJlc3MvY3JlYXRlLXRhZy1mcm9tLmpzCkBAIC0wLDAgKzEsMjIgQEAKK2ltcG9y
dCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK2xldCBwYXJhbWV0ZXJzID0gWyJp
MzIiLCAiZjMyIiwgImV4dGVybnJlZiJdOworCithc3NlcnQudGhyb3dzKFdlYkFzc2VtYmx5LlRh
ZywgVHlwZUVycm9yLCAiY2FsbGluZyBXZWJBc3NlbWJseS5UYWcgY29uc3RydWN0b3Igd2l0aG91
dCBuZXcgaXMgaW52YWxpZCIpOworbGV0IHBhc3NlZFBhcmFtZXRlcnMgPSB7IHBhcmFtZXRlcnMg
fTsKK2xldCB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHBhc3NlZFBhcmFtZXRlcnMpOworCith
c3NlcnQudHJ1dGh5KHRhZy50eXBlKCkgIT09IHBhc3NlZFBhcmFtZXRlcnMsICJUYWcgdHlwZSBz
aG91bGQgcmV0dXJuIGEgZnJlc2ggb2JqZWN0Iik7Cithc3NlcnQuZXEodGFnLnR5cGUoKS5wYXJh
bWV0ZXJzLCBwYXJhbWV0ZXJzLCAiVGFncyB0eXBlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUg
cGFyYW1ldGVycyBwYXNzZWQgaW4iKTsKKworYXNzZXJ0LnRocm93cyhXZWJBc3NlbWJseS5FeGNl
cHRpb24sIFR5cGVFcnJvciwgImNhbGxpbmcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGNvbnN0cnVj
dG9yIHdpdGhvdXQgbmV3IGlzIGludmFsaWQiKTsKKworbGV0IGV4Y2VwdGlvbiA9IG5ldyBXZWJB
c3NlbWJseS5FeGNlcHRpb24odGFnLCBbMSwgMi41LCBwYXJhbWV0ZXJzXSk7Cithc3NlcnQudHJ1
dGh5KGV4Y2VwdGlvbi5pcyh0YWcpKTsKK2Fzc2VydC5lcShleGNlcHRpb24uZ2V0QXJnKHRhZywg
MCksIDEpOworYXNzZXJ0LmVxKGV4Y2VwdGlvbi5nZXRBcmcodGFnLCAxKSwgMi41KTsKK2Fzc2Vy
dC5lcShleGNlcHRpb24uZ2V0QXJnKHRhZywgMiksIHBhcmFtZXRlcnMpOworCithc3NlcnQudGhy
b3dzKCgpID0+IGV4Y2VwdGlvbi5nZXRBcmcodGFnLCAzKSwgUmFuZ2VFcnJvciwgIldlYkFzc2Vt
Ymx5LkV4Y2VwdGlvbi5nZXRBcmcoKTogSW5kZXggb3V0IG9mIHJhbmdlIik7CisKK2Fzc2VydC5l
cShXZWJBc3NlbWJseS5FeGNlcHRpb24ucHJvdG90eXBlLl9fcHJvdG9fXywgT2JqZWN0LnByb3Rv
dHlwZSkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWxpdmVuZXNz
LXRpZXItdXAuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1saXZlbmVzcy10aWVy
LXVwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDVlYjVhNmVj
MGExCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tbGl2
ZW5lc3MtdGllci11cC5qcwpAQCAtMCwwICsxLDg1IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcu
Li9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKwor
eworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKQorICAgICAgICAgICAg
LlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAu
RXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhj
ZXB0aW9uKCJ0YWciLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0sIFsiaTMy
Il0pCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDFlNikKKyAgICAgICAgICAgICAgICAuU2V0
TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoNDIpCisgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAg
ICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuTG9vcCgidm9pZCIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAuQmxvY2soInZvaWQiLCBiID0+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYi5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5JMzJFcXooKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5CcklmKDApCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLkkzMlN1YigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLlNldExvY2Fs
KDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJyKDEpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSk7CisgICAgY29uc3QgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy50YWc7CisKKyAgICBhc3NlcnQu
dGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uLCAid2Fz
bSBleGNlcHRpb24iKTsKKyAgICB0cnkgeworICAgICAgICBpbnN0YW5jZS5leHBvcnRzLmNhbGwo
KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGFzc2VydC50cnV0aHkoZS5pcyh0YWcpKTsK
KyAgICAgICAgYXNzZXJ0LmVxKGUuZ2V0QXJnKHRhZywgMCksIDQyKTsKKyAgICB9Cit9CisKK3sK
KyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAg
ICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10s
IHJldDogImkzMiIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhw
b3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkz
MiIgfSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuTG9v
cCgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgIC5DYWxsKDIpCisgICAgICAgICAgICAgICAg
ICAgIC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAg
ICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2Fs
bCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkJySWYoMSkKKyAgICAgICAgICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigid3JhcHBlciIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIg
fSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworICAgIGNvbnN0IGJpbiA9
IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5z
dGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2s6IGNhbGxlcklzT01HQ29tcGlsZWQg
fSB9KTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3Nl
bWJseS5FeGNlcHRpb24sICJ3YXNtIGV4Y2VwdGlvbiIpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy93YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLWRlbGVnYXRlLmpzIGIvSlNUZXN0cy93YXNt
L3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLWRlbGVnYXRlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uYmIxMmE4ZWYyOTYyCi0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLWRlbGVnYXRlLmpzCkBAIC0wLDAgKzEs
MTI1IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMg
YXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworZnVuY3Rpb24gdGVzdFNpbXBsZVRocm93RGVs
ZWdhdGUoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5k
KCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25h
dHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNh
bGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAg
ICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgLlRocm93KDAp
CisgICAgICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQorICAgICAgICAgICAgICAgIC5DYXRj
aCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3Qg
YmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBK
UyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFRocm93RGVsZWdhdGVT
a2lwKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1
cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxs
IikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10s
IHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAg
ICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAg
ICAgICAgICAuRGVsZWdhdGUoMSkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAg
ICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJD
b25zdCgyKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7Cisg
ICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0
IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAg
IGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9y
dGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitm
dW5jdGlvbiB0ZXN0RGVsZWdhdGVDYWxsZXIoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVy
KCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAg
ICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAu
RXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwg
MCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5U
cnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5DYWxsKDEpCisgICAgICAgICAgICAgICAg
LkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Y2FsbDIiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5
KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMSkKKyAg
ICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEp
CisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25z
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFu
Y2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0
LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2Fz
bSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9u
IHRlc3RTaW1wbGVEZWxlZ2F0ZU1lcmdlKCl7CisgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Cisg
ICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtd
LCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQorICAg
ICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldl
YkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNl
KG1vZHVsZSwgeyB9KTsKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMp
OworfQorCit0ZXN0U2ltcGxlVGhyb3dEZWxlZ2F0ZSgpOwordGVzdFRocm93RGVsZWdhdGVTa2lw
KCk7Cit0ZXN0RGVsZWdhdGVDYWxsZXIoKTsKK3Rlc3RTaW1wbGVEZWxlZ2F0ZU1lcmdlKCk7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtdGhyb3ctY2F0
Y2guanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtdGhyb3ctY2F0Y2gu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xMDk3NDAxNWY3MzAK
LS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUt
dGhyb3ctY2F0Y2guanMKQEAgLTAsMCArMSw0MTQgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4u
L0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCitm
dW5jdGlvbiB0ZXN0U2ltcGxlVHJ5Q2F0Y2goKXsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIo
KTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAw
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJp
MzIiKQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgIC5JMzJDb25z
dCgxKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkK
KworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1v
ZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEo
aW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRh
ZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVz
dFNpbXBsZVRyeUNhdGNoQWxsKCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAg
Yi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2Vw
dGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCku
RnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAg
ICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisg
ICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBX
ZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFu
Y2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJv
d24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdENhbGxU
cnlDYXRjaCgpeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWdu
YXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJj
YWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczog
W10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAg
ICAgLkNhbGwoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJD
b25zdCgyKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKworICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJjYWxsMiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAg
ICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQo
KQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3Qg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNl
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5l
cShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20g
dGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0
ZXN0Q2FsbFRyeUNhdGNoQWxsKCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAg
Yi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2Vw
dGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCku
RnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgICAgICAuQ2FsbCgxKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAg
ICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KQorCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwyIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJp
MzIiIH0pCisgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisg
ICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhw
b3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisK
K2Z1bmN0aW9uIHRlc3RTaW1wbGVUcnlDYXRjaFZhbHVlKCl7CisgICAgY29uc3QgYiA9IG5ldyBC
dWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVuZCgp
CisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0
aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAg
ICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmlu
ID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5J
bnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5j
YWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBz
aG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdENhbGxUcnlDYXRjaFZhbHVl
KCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7
IHBhcmFtczogWyJpMzIiXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2Fs
bCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtd
LCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAg
IC5DYWxsKDEpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAgICAgLkVuZCgpCisKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbDIiLCB7IHBhcmFt
czogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAg
ICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkK
KworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1v
ZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEo
aW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRh
ZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVz
dFN0YWNrVHJ5Q2F0Y2goKXsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5
cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9u
KCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbImkzMiJdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgp
LkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwi
LCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5JMzJDb25zdCgyKQor
ICAgICAgICAgICAgLy8gVE9ETzogYnVpbGRlciBlcnJvcgorICAgICAgICAgICAgLlRyeSh7IHBh
cmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQor
ICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgp
LmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
KyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsg
fSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGlu
ZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUi
KTsKK30KKworZnVuY3Rpb24gdGVzdExpdmVBZnRlclRyeUNhdGNoKCkgeworICAgIGNvbnN0IGIg
PSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pLkVu
ZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhj
ZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisg
ICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQor
ICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQo
KQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3Qg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNl
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5l
cShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20g
dGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0
ZXN0TGl2ZUFmdGVyVHJ5Q2F0Y2hBbGwoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7
CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDAp
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMikKKyAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAg
ICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29u
c3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3Nl
bWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhw
b3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJv
bSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFVuaWZ5VHJ5Q2F0
Y2hDYXRjaCgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5F
bmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkKKyAg
ICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pCisgICAgICAgICAgICAuU2lnbmF0
dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNv
ZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJp
MzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAg
LlRocm93KDEpCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAg
IC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5DYXRjaCgxKQorICAgICAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgp
LmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
KyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsg
fSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGlu
ZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUi
KTsKK30KKworZnVuY3Rpb24gdGVzdFVuaWZ5VHJ5Q2F0Y2hDYXRjaEFsbCgpIHsKKyAgICBjb25z
dCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rp
b24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIC5TaWduYXR1cmUo
eyBwYXJhbXM6IFtdIH0pCisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAg
ICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRocm93KDEpCisgICAgICAgICAg
ICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAg
ICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQor
ICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQo
KQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3Qg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNl
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5l
cShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20g
dGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0
ZXN0VW5pZnlUcnlOb1Rocm93KCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAg
IGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNl
cHRpb24oKQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAg
ICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAu
RXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczog
W10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAg
ICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2Vi
QXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2Uo
bW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAy
LCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJl
IHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RVbmlmeVRyeU5vQ2F0Y2goKSB7CisgICAg
Y29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpCisgICAgICAgICAgICAuU2lnbmF0
dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogW10g
fSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAg
IC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAg
ICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAg
ICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQor
CisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9k
dWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0g
bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShp
bnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFn
IHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0
TmVzdGVkQ2F0Y2ggKCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBl
KCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigp
LlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rp
b24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAg
ICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAg
ICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkK
KyAgICAgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKwor
ICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFu
Y2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24sICJ3YXNtIGV4Y2VwdGlvbiIp
OworfQorCit0ZXN0U2ltcGxlVHJ5Q2F0Y2goKTsKK3Rlc3RTaW1wbGVUcnlDYXRjaEFsbCgpOwor
dGVzdFNpbXBsZVRyeUNhdGNoVmFsdWUoKTsKK3Rlc3RDYWxsVHJ5Q2F0Y2goKTsKK3Rlc3RDYWxs
VHJ5Q2F0Y2hBbGwoKTsKK3Rlc3RDYWxsVHJ5Q2F0Y2hWYWx1ZSgpOwordGVzdExpdmVBZnRlclRy
eUNhdGNoKCk7Cit0ZXN0TGl2ZUFmdGVyVHJ5Q2F0Y2hBbGwoKTsKK3Rlc3RVbmlmeVRyeUNhdGNo
Q2F0Y2goKTsKK3Rlc3RVbmlmeVRyeUNhdGNoQ2F0Y2hBbGwoKTsKK3Rlc3RVbmlmeVRyeU5vVGhy
b3coKTsKK3Rlc3RVbmlmeVRyeU5vQ2F0Y2goKTsKKworLy8gVE9ETzogZW5hYmxlIHRoaXMgdGVz
dAorLy8gdGVzdFN0YWNrVHJ5Q2F0Y2goKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJl
c3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwtcmV0aHJvdy5qcyBi
L0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0
Y2hhbGwtcmV0aHJvdy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LmZiNGMzMGQ5MWFjNgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhj
ZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwtcmV0aHJvdy5qcwpAQCAtMCww
ICsxLDQxIEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICog
YXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVp
bGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigi
Y29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkK
KyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVy
ZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwi
KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwg
cmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAu
Q2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkNhdGNo
QWxsKCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuUmV0
aHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBj
b25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5z
dGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2Fs
bGJhY2sgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworCisgICAg
ZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNl
cHRpb24odGFnLCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBv
cnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNz
ZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3Rh
bmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KZGlmZiAtLWdpdCBh
L0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0
Y2hhbGwuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10
by13YXNtLWNhdGNoYWxsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uMzdlNGE0NGIxZmVjCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9l
eGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS1jYXRjaGFsbC5qcwpAQCAtMCwwICsxLDQw
IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNz
ZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4
dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBh
cmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAg
ICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
aTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgw
KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkNhdGNoQWxsKCkK
KyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1v
ZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5j
ZS5leHBvcnRzLmZvbzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJv
dyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAgIH0KKworICAgIGFzc2Vy
dC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoX2FsbGluZyBhbiBleHBvcnRl
ZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKKworICAgIHRh
ZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbXSB9KTsKKworICAgIGFzc2Vy
dC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoX2FsbGluZyBhbiBvcGFxdWUg
d2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNt
LmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2Fz
bS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY1MDE5MjAwYzlm
ZAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93
bi1mcm9tLWpzLXRvLXdhc20uanMKQEAgLTAsMCArMSw0MCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJv
bSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMn
CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQor
ICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFt
czogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisg
ICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAg
ICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZv
byIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5U
cnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25z
dCgyKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25z
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFu
Y2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJh
Y2sgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworCisgICAgZnVu
Y3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRp
b24odGFnLCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2Fs
bCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hv
dWxkIGJlIHBvc3NpYmxlIik7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFy
YW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2Fs
bCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9z
dHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdXQtb2Ytd2FzbS5qcyBiL0pTVGVzdHMvd2FzbS9zdHJl
c3MvZXhjZXB0aW9uLXRocm93bi1vdXQtb2Ytd2FzbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLmE4ZTMzMDFlM2I4MAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVz
dHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdXQtb2Ytd2FzbS5qcwpAQCAtMCwwICsx
LDI0IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMg
YXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRl
cigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pLkVuZCgpCisgICAgICAg
IC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28i
LCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVGhy
b3coMCkKKyAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5FbmQoKQorCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAg
IGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBp
bnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworCisgICAgYXNzZXJ0
LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3Zlci13
YXNtLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLW92ZXItd2FzbS5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU5ZjRjMmU5MDMxZQot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1v
dmVyLXdhc20uanMKQEAgLTAsMCArMSwzMCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVp
bGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAg
ICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAu
SW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJl
dDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5F
eGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9y
dCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNh
bGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5DYWxsKDApCisg
ICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5k
KCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5j
ZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFj
ayB9fSk7CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbihpbnN0YW5jZS5leHBvcnRzLmZvbywgW10pOworICAgIH0KKwor
ICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNl
cHRpb24sICJ3YXNtIGV4Y2VwdGlvbiIpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0
cmVzcy9leGNlcHRpb24tdHJhcC5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRy
YXAuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kZmRmNTNlYjUw
NWMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10cmFw
LmpzCkBAIC0wLDAgKzEsMTM0IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpz
JworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworZnVuY3Rpb24gdGVz
dENhbm5vdENhdGNoVW5yZWFjaGFibGUoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7
CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpCisgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtd
LCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAg
ICAgICAgICAgLlVucmVhY2hhYmxlKCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAg
ICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5j
ZShtb2R1bGUpOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdl
YkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgIlVucmVhY2hhYmxlIGNvZGUgc2hvdWxkIG5vdCBiZSBl
eGVjdXRlZCIpOworfQorCitmdW5jdGlvbiB0ZXN0Q2Fubm90Q2F0Y2hPT0IoKSB7CisgICAgY29u
c3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLk1lbW9yeSgpCisgICAgICAgICAgICAuSW5pdGlhbE1heFBh
Z2VzKDAsIDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgIC5G
dW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAg
ICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAg
ICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMTAy
NCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkxvYWQoMCwgMCkKKyAgICAgICAgICAgICAgICAu
Q2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAg
Y29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5l
eHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgIk91dCBvZiBib3VuZHMgbWVt
b3J5IGFjY2VzcyIpOworfQorCitmdW5jdGlvbiB0ZXN0V2FzbUFQSVRocm93KCkgeworICAgIGNv
bnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBv
cnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
dm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9y
dCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAg
ICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAg
ICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisg
ICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgp
CisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBt
b2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2Ug
PSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sg
fX0pOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIG5ldyBXZWJBc3NlbWJs
eS5HbG9iYWwoeworICAgICAgICAgICAgdmFsdWU6ICdhbnlmdW5jJworICAgICAgICB9LCB7fSk7
CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAxKTsKK30K
K2Z1bmN0aW9uIHRlc3RKU0NhdGNoQW5kUmV0aHJvdygpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1
aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24o
ImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgp
CisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIi
IH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkdl
dExvY2FsKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJFcXooKQorICAgICAgICAgICAgICAg
ICAgICAuSWYoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgLlVucmVhY2hhYmxlKCkK
KyAgICAgICAgICAgICAgICAgICAgLkVsc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNh
bGwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgICAgIC5J
MzJDb25zdCgwKQorICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAg
ICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCku
Z2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwor
ICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBj
b250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAg
ICAgICB0cnkgeworICAgICAgICAgICAgaW5zdGFuY2UuZXhwb3J0cy5jYWxsKDApOworICAgICAg
ICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2FsbCgxKSwgV2ViQXNz
ZW1ibHkuUnVudGltZUVycm9yLCAiVW5yZWFjaGFibGUgY29kZSBzaG91bGQgbm90IGJlIGV4ZWN1
dGVkIik7Cit9CisKK3Rlc3RDYW5ub3RDYXRjaFVucmVhY2hhYmxlKCk7Cit0ZXN0Q2Fubm90Q2F0
Y2hPT0IoKTsKK3Rlc3RXYXNtQVBJVGhyb3coKTsKK3Rlc3RKU0NhdGNoQW5kUmV0aHJvdygpOwpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LWZyb20tY2F0Y2gtdG8tY2F0
Y2guanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ctZnJvbS1jYXRjaC10by1jYXRjaC5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBkZmRhNmQ4YTY5MQot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy1mcm9tLWNhdGNo
LXRvLWNhdGNoLmpzCkBAIC0wLDAgKzEsNDUgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1
aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7Cisg
ICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAg
LkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAu
RXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
YWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIi
KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlJldGhyb3coMCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAg
IGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBp
bnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBj
YWxsYmFjayB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAg
ICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4
Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsKCksIDMpOworCisgICAgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRl
cnM6IFtdIH0pOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNz
L3JldGhyb3ctdG8tY2F0Y2guanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ctdG8tY2F0
Y2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wZjFjYmE0M2Rj
YjUKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ctdG8tY2F0
Y2guanMKQEAgLTAsMCArMSw4OCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5q
cycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25z
dCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0
KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZv
aWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRp
b24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1
bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7
IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAg
ICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAg
ICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAg
ICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25z
dCgzKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25z
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFu
Y2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJh
Y2sgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworCisgICAgZnVu
Y3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRp
b24odGFnLCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2Fs
bCgpLCAzKTsKKworICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBb
XSB9KTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3Nl
bWJseS5FeGNlcHRpb24pOworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Cisg
ICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0Iiwg
ImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAu
RnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1z
OiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAg
ICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIi
IH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAg
ICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAg
ICAgICAgICAgLlJldGhyb3coMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNh
dGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0g
Yi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0
YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBsZXQgdGFnID0g
aW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAg
ICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9CisKKyAg
ICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMpOworCisgICAgdGFnID0gbmV3
IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFtdIH0pOworCisgICAgYXNzZXJ0LnRocm93
cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ctdG8tZGVsZWdhdGUtdG8tY2F0Y2gu
anMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ctdG8tZGVsZWdhdGUtdG8tY2F0Y2guanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43MDQ3OWMwY2VhMjMKLS0t
IC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ctdG8tZGVsZWdhdGUt
dG8tY2F0Y2guanMKQEAgLTAsMCArMSwyNTkgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1
aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7Cisg
ICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAg
LkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7
IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJjb250
ZXh0IiwgInRhZyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNp
Z25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24o
ImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMSkKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJD
b25zdCgxKQorICAgICAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgICAgICAgICAuUmV0aHJvdygw
KQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRGVsZWdhdGUo
MCkKKyAgICAgICAgICAgIC5DYXRjaCgxKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisK
KworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1
bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3
IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3Rh
bmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxi
YWNrLCB0YWc6IG90aGVyVGFnIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRz
LmZvbzsKKyAgICBsZXQgYXJncyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7Cisg
ICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBhcmdzKTsKKyAgICB9
CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMpOworCisgICAgdGFn
ID0gb3RoZXJUYWc7CisgICAgYXJncyA9IFsxMDBdOworCisgICAgbGV0IGV4biA9IGFzc2VydC50
aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICAg
IGFzc2VydC5lcShleG4uZ2V0QXJnKHRhZywgMCksIDEwMCk7Cit9CisKK3sKKyAgICBjb25zdCBi
ID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImNvbnRleHQiLCAidGFn
IiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogInZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisg
ICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6
ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5Ucnko
ImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAg
IC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAg
ICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAg
ICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgICAgIC5D
YXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC5SZXRocm93KDEpCisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkRlbGVnYXRlKDApCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRl
cnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3Rh
bmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrLCB0YWc6IG90aGVyVGFnIH19KTsKKwor
ICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKyAgICBsZXQgYXJncyA9IFtdOwor
CisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIGxldCBleG4gPSBuZXcgV2ViQXNz
ZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7CisgICAgICAgIHRhZyA9IG90aGVyVGFnOworICAg
ICAgICBhcmdzID0gWzEwMF07CisgICAgICAgIHRocm93IGV4bjsKKyAgICB9CisKKyAgICBhc3Nl
cnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsK
K30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNh
bGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgLkV4Y2Vw
dGlvbigiY29udGV4dCIsICJ0YWciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAidm9pZCIgfSkK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNl
cHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgp
LkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDEpCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwi
LCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisg
ICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMy
IikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLlJldGhyb3co
MSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMSkKKyAgICAgICAgICAgIC5DYXRjaEFs
bCgpCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICBsZXQgb3RoZXJUYWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFy
YW1ldGVyczogWyJpMzIiXX0pCisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2ssIHRhZzogb3RoZXJUYWcgfX0p
OworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworICAgIGxldCBhcmdzID0g
W107CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgbGV0IGV4biA9IG5ldyBX
ZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBhcmdzKTsKKyAgICAgICAgdGFnID0gb3RoZXJUYWc7
CisgICAgICAgIGFyZ3MgPSBbMTAwXTsKKyAgICAgICAgdGhyb3cgZXhuOworICAgIH0KKworICAg
IGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRp
b24pOworfQorCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUo
KS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4
dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAg
IC5FeGNlcHRpb24oImNvbnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogInZv
aWQiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAx
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJp
MzIiKQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5U
cnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgp
CisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC5SZXRocm93KDApCisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgICAgIC5EZWxlZ2F0ZSgwKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3Qg
YmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgb3RoZXJUYWcgPSBuZXcgV2ViQXNzZW1ibHku
VGFnKHsgcGFyYW1ldGVyczogWyJpMzIiXX0pCisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2ssIHRhZzogb3Ro
ZXJUYWcgfX0pOworCisgICAgbGV0IHRhZyA9IG90aGVyVGFnOworICAgIGxldCBhcmdzID0gWzEw
MF07CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgbGV0IGV4biA9IG5ldyBX
ZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBhcmdzKTsKKyAgICAgICAgdGhyb3cgZXhuOworICAg
IH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMTAwKTsKK30KKwor
eworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAg
ICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNr
IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigi
Y29udGV4dCIsICJ0YWciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAidm9pZCIgfSkKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24o
KS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0
aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDEpCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBh
cmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAg
ICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAu
STMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkNh
bGwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLlJldGhyb3coMSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5DYXRjaCgxKQorICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1i
bHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJp
bik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6
IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNl
KG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrLCB0YWc6IG90aGVyVGFnIH19KTsKKworICAg
IGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKyAgICBsZXQgYXJncyA9IFtdOworCisg
ICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIGxldCBleG4gPSBuZXcgV2ViQXNzZW1i
bHkuRXhjZXB0aW9uKHRhZywgYXJncyk7CisgICAgICAgIHRhZyA9IG90aGVyVGFnOworICAgICAg
ICBhcmdzID0gWzEwMF07CisgICAgICAgIHRocm93IGV4bjsKKyAgICB9CisKKyAgICBhc3NlcnQu
ZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93
YXNtL3N0cmVzcy9zaW1wbGUtZXhwb3J0LWV4Y2VwdGlvbi5qcyBiL0pTVGVzdHMvd2FzbS9zdHJl
c3Mvc2ltcGxlLWV4cG9ydC1leGNlcHRpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi4yYjk2OTk5NzUzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dh
c20vc3RyZXNzL3NpbXBsZS1leHBvcnQtZXhjZXB0aW9uLmpzCkBAIC0wLDAgKzEsMTYgQEAKK2lt
cG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJv
bSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAg
Yi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2Vw
dGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKS5FeGNlcHRpb24oImZvbyIsIDApLkVuZCgpCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1v
ZHVsZSk7CisKKyAgICBhc3NlcnQuaW5zdGFuY2VvZihpbnN0YW5jZS5leHBvcnRzLmZvbywgV2Vi
QXNzZW1ibHkuVGFnKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9MSUNFTlNFIGIv
SlNUZXN0cy93YXNtL3Y4L0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi41M2Q5YzQ3ZTMzYzEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgv
TElDRU5TRQpAQCAtMCwwICsxLDYyIEBACitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byBhbGwgcGFy
dHMgb2YgVjggdGhhdCBhcmUgbm90IGV4dGVybmFsbHkKK21haW50YWluZWQgbGlicmFyaWVzLiAg
VGhlIGV4dGVybmFsbHkgbWFpbnRhaW5lZCBsaWJyYXJpZXMgdXNlZCBieSBWOAorYXJlOgorCisg
IC0gUENSRSB0ZXN0IHN1aXRlLCBsb2NhdGVkIGluCisgICAgdGVzdC9tanN1bml0L3RoaXJkX3Bh
cnR5L3JlZ2V4cC1wY3JlL3JlZ2V4cC1wY3JlLmpzLiAgVGhpcyBpcyBiYXNlZCBvbiB0aGUKKyAg
ICB0ZXN0IHN1aXRlIGZyb20gUENSRS03LjMsIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBV
bml2ZXJzaXR5CisgICAgb2YgQ2FtYnJpZGdlIGFuZCBHb29nbGUsIEluYy4gIFRoZSBjb3B5cmln
aHQgbm90aWNlIGFuZCBsaWNlbnNlCisgICAgYXJlIGVtYmVkZGVkIGluIHJlZ2V4cC1wY3JlLmpz
LgorCisgIC0gTGF5b3V0IHRlc3RzLCBsb2NhdGVkIGluIHRlc3QvbWpzdW5pdC90aGlyZF9wYXJ0
eS9vYmplY3Qta2V5cy4gIFRoZXNlIGFyZQorICAgIGJhc2VkIG9uIGxheW91dCB0ZXN0cyBmcm9t
IHdlYmtpdC5vcmcgd2hpY2ggYXJlIGNvcHlyaWdodGVkIGJ5CisgICAgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gYW5kIHJlbGVhc2VkIHVuZGVyIGEgMy1jbGF1c2UgQlNEIGxpY2Vuc2UuCisKKyAgLSBT
dHJvbmd0YWxrIGFzc2VtYmxlciwgdGhlIGJhc2lzIG9mIHRoZSBmaWxlcyBhc3NlbWJsZXItYXJt
LWlubC5oLAorICAgIGFzc2VtYmxlci1hcm0uY2MsIGFzc2VtYmxlci1hcm0uaCwgYXNzZW1ibGVy
LWlhMzItaW5sLmgsCisgICAgYXNzZW1ibGVyLWlhMzIuY2MsIGFzc2VtYmxlci1pYTMyLmgsIGFz
c2VtYmxlci14NjQtaW5sLmgsCisgICAgYXNzZW1ibGVyLXg2NC5jYywgYXNzZW1ibGVyLXg2NC5o
LCBhc3NlbWJsZXItbWlwcy1pbmwuaCwKKyAgICBhc3NlbWJsZXItbWlwcy5jYywgYXNzZW1ibGVy
LW1pcHMuaCwgYXNzZW1ibGVyLmNjIGFuZCBhc3NlbWJsZXIuaC4KKyAgICBUaGlzIGNvZGUgaXMg
Y29weXJpZ2h0ZWQgYnkgU3VuIE1pY3Jvc3lzdGVtcyBJbmMuIGFuZCByZWxlYXNlZAorICAgIHVu
ZGVyIGEgMy1jbGF1c2UgQlNEIGxpY2Vuc2UuCisKKyAgLSBWYWxncmluZCBjbGllbnQgQVBJIGhl
YWRlciwgbG9jYXRlZCBhdCBzcmMvdGhpcmRfcGFydHkvdmFsZ3JpbmQvdmFsZ3JpbmQuaAorICAg
IFRoaXMgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlLgorCisgIC0gVGhlIFdhc20g
Qy9DKysgQVBJIGhlYWRlcnMsIGxvY2F0ZWQgYXQgdGhpcmRfcGFydHkvd2FzbS1hcGkvd2FzbS57
aCxoaH0KKyAgICBUaGlzIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBBcGFjaGUgbGljZW5zZS4gVGhl
IEFQSSdzIHVwc3RyZWFtIHByb3RvdHlwZQorICAgIGltcGxlbWVudGF0aW9uIGFsc28gZm9ybWVk
IHRoZSBiYXNpcyBvZiBWOCdzIGltcGxlbWVudGF0aW9uIGluCisgICAgc3JjL3dhc20vYy1hcGku
Y2MuCisKK1RoZXNlIGxpYnJhcmllcyBoYXZlIHRoZWlyIG93biBsaWNlbnNlczsgd2UgcmVjb21t
ZW5kIHlvdSByZWFkIHRoZW0sCithcyB0aGVpciB0ZXJtcyBtYXkgZGlmZmVyIGZyb20gdGhlIHRl
cm1zIGJlbG93LgorCitGdXJ0aGVyIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGlu
IExJQ0VOU0UgZmlsZXMgbG9jYXRlZCBpbiAKK3N1Yi1kaXJlY3Rvcmllcy4KKworQ29weXJpZ2h0
IDIwMTQsIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtYXBpLmpzIGIvSlNUZXN0cy93
YXNtL3Y4L2V4Y2VwdGlvbnMtYXBpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMC4uOTFkNTM2ODE0NTZjCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4
L2V4Y2VwdGlvbnMtYXBpLmpzCkBAIC0wLDAgKzEsMjMyIEBACisvLyBDb3B5cmlnaHQgMjAyMSB0
aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwZXJp
bWVudGFsLXdhc20tZWggLS1leHBlcmltZW50YWwtd2FzbS1yZWZ0eXBlcworCitsb2FkKCJ3YXNt
LW1vZHVsZS1idWlsZGVyLmpzIik7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0KCkgeworCisgIGFz
c2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuVGFnKCksIFR5cGVFcnJvciwKKyAgICAg
IC9leHBlY3RzIHRoZSB0YWcgdHlwZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQvKTsKKyAgYXNzZXJ0
VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5UYWcoe30pLCBUeXBlRXJyb3IsCisgICAgICAv
ZXhwZWN0cyBhIHRhZyB0eXBlIHdpdGggdGhlICdwYXJhbWV0ZXJzJyBwcm9wZXJ0eS8pOworICBh
c3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogWydmb28n
XX0pLCBUeXBlRXJyb3IsCisgICAgICAvZXhwZWN0cyB0aGUgJ3BhcmFtZXRlcnMnIGZpZWxkIG9m
IHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIHNlcXVlbmNlIG9mIFdlYkFzc2VtYmx5IHZhbHVl
IHR5cGVzLyk7CisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJh
bWV0ZXJzOiB7fX0pLCBUeXBlRXJyb3IsCisgICAgICAvVHlwZSBlcnJvci8pOworCisgIGxldCBq
c19leGNlcHRfaTMyID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogWydpMzInXX0p
OworICBsZXQganNfZXhjZXB0X3YgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBb
XX0pOworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBidWlsZGVy
LmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X2kpOworCisgIGFzc2VydERvZXNOb3RU
aHJvdygoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDoganNfZXhjZXB0X2kzMiB9
fSkpOworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsg
bTogeyBleDoganNfZXhjZXB0X3YgfX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAv
aW1wb3J0ZWQgVGFnIG06ZXggc2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIGltcG9ydGVkIFdl
YkFzc2VtYmx5IFRhZydzIHNpZ25hdHVyZS8pOworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9
PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDoganNfZXhjZXB0X3YgfX0pLCBXZWJBc3Nl
bWJseS5MaW5rRXJyb3IsCisgICAgICAvaW1wb3J0ZWQgVGFnIG06ZXggc2lnbmF0dXJlIGRvZXNu
J3QgbWF0Y2ggdGhlIGltcG9ydGVkIFdlYkFzc2VtYmx5IFRhZydzIHNpZ25hdHVyZS8pOworICBh
c3NlcnRUcnVlKGpzX2V4Y2VwdF9pMzIudG9TdHJpbmcoKSA9PSAiW29iamVjdCBXZWJBc3NlbWJs
eS5UYWddIik7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEV4cG9ydCgpIHsKKyAgbGV0IGJ1aWxk
ZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRk
VGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFs
VGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisK
KyAgYXNzZXJ0VHJ1ZShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5zdGFu
Y2UuZXhwb3J0cywgJ2V4JykpOworICBhc3NlcnRFcXVhbHMoIm9iamVjdCIsIHR5cGVvZiBpbnN0
YW5jZS5leHBvcnRzLmV4KTsKKyAgYXNzZXJ0SW5zdGFuY2VvZihpbnN0YW5jZS5leHBvcnRzLmV4
LCBXZWJBc3NlbWJseS5UYWcpOworICBhc3NlcnRTYW1lKGluc3RhbmNlLmV4cG9ydHMuZXguY29u
c3RydWN0b3IsIFdlYkFzc2VtYmx5LlRhZyk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEltcG9y
dEV4cG9ydCgpIHsKKworICBsZXQganNfZXhfaTMyID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFy
YW1ldGVyczogWydpMzInXX0pOworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgaW5kZXggPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1Np
Z192X2kpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGlu
ZGV4KTsKKworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDog
anNfZXhfaTMyIH19KTsKKyAgbGV0IHJlcyA9IGluc3RhbmNlLmV4cG9ydHMuZXg7CisgIGFzc2Vy
dEVxdWFscyhyZXMsIGpzX2V4X2kzMik7Cit9KSgpOworCisKKyhmdW5jdGlvbiBUZXN0RXhjZXB0
aW9uQ29uc3RydWN0b3IoKSB7CisgIC8vIENoZWNrIGVycm9ycy4KKyAgbGV0IGpzX3RhZyA9IG5l
dyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFtdfSk7CisgIGFzc2VydFRocm93cygoKSA9
PiBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKDApLCBUeXBlRXJyb3IsCisgICAgICAvV2ViQXNz
ZW1ibHkuRXhjZXB0aW9uIGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRv
IGJlIGEgV2ViQXNzZW1ibHkuVGFnLyk7CisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNz
ZW1ibHkuRXhjZXB0aW9uKHt9KSwgVHlwZUVycm9yLAorICAgICAgL1dlYkFzc2VtYmx5LkV4Y2Vw
dGlvbiBjb25zdHJ1Y3RvciBleHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIFdlYkFz
c2VtYmx5LlRhZy8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gV2ViQXNzZW1ibHkuRXhjZXB0aW9u
KGpzX3RhZyksIFR5cGVFcnJvciwKKyAgICAgIC9jYWxsaW5nIFdlYkFzc2VtYmx5LkV4Y2VwdGlv
biBjb25zdHJ1Y3RvciB3aXRob3V0IG5ldyBpcyBpbnZhbGlkLyk7CisgIGxldCBqc19leGNlcHRp
b24gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKGpzX3RhZywgW10pOworCisgIC8vIENoZWNr
IHByb3RvdHlwZS4KKyAgYXNzZXJ0U2FtZShXZWJBc3NlbWJseS5FeGNlcHRpb24ucHJvdG90eXBl
LCBqc19leGNlcHRpb24uX19wcm90b19fKTsKKyAgYXNzZXJ0VHJ1ZShqc19leGNlcHRpb24gaW5z
dGFuY2VvZiBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworCisgIC8vIENoZWNrIHByb3RvdHlwZSBv
ZiBhIHRocm93biBleGNlcHRpb24uCisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWls
ZGVyKCk7CisgIGxldCB3YXNtX3RhZyA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVp
bGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFtrRXhw
clRocm93LCB3YXNtX3RhZ10pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRl
ci5pbnN0YW50aWF0ZSgpOworICB0cnkgeworICAgIGluc3RhbmNlLmV4cG9ydHMudGhyb3coKTsK
KyAgfSBjYXRjaCAoZSkgeworICAgIGFzc2VydFRydWUoZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5
LkV4Y2VwdGlvbik7CisgIH0KK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhjZXB0aW9uQ29uc3Ry
dWN0b3JXaXRoUGF5bG9hZCgpIHsKKyAgbGV0IHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoCisg
ICAgICB7cGFyYW1ldGVyczogWydpMzInLCAnZjMyJywgJ2k2NCcsICdmNjQnLCAnZXh0ZXJucmVm
J119KTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oCisg
ICAgICB0YWcsIFsxbiwgMiwgM24sIDQsIHt9XSksIFR5cGVFcnJvcik7CisgIGFzc2VydERvZXNO
b3RUaHJvdygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgWzMsIDQsIDVuLCA2
LCB7fV0pKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0Q2F0Y2hKU0V4Y2VwdGlvbigpIHsKKyAg
bGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGpzX3RhZyA9IG5l
dyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFtdfSk7CisgIGxldCBqc19mdW5jX2luZGV4
ID0gYnVpbGRlci5hZGRJbXBvcnQoJ20nLCAnanNfZnVuYycsIGtTaWdfdl92KTsKKyAgbGV0IGpz
X3RhZ19pbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAianNfdGFnIiwga1NpZ192
X3YpOworICBsZXQgdGFnX2luZGV4ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWls
ZGVyLmFkZEV4cG9ydE9mS2luZCgid2FzbV90YWciLCBrRXh0ZXJuYWxUYWcsIHRhZ19pbmRleCk7
CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoIiwga1NpZ19pX3YpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rp
b24sIGpzX2Z1bmNfaW5kZXgsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDAsCisgICAgICAgIGtF
eHByQ2F0Y2gsIGpzX3RhZ19pbmRleCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAg
ICAga0V4cHJDYXRjaCwgdGFnX2luZGV4LAorICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAg
ICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgdGFnOworICBmdW5j
dGlvbiBqc19mdW5jKCkgeworICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFn
LCBbXSk7CisgIH0KKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7bToge2pz
X2Z1bmMsIGpzX3RhZ319KTsKKyAgdGFnID0ganNfdGFnOworICBhc3NlcnRFcXVhbHMoMSwgaW5z
dGFuY2UuZXhwb3J0cy5jYXRjaCgpKTsKKyAgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy53YXNtX3Rh
ZzsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3RhbmNlLmV4cG9ydHMuY2F0Y2goKSk7Cit9KSgpOwor
CitmdW5jdGlvbiBUZXN0Q2F0Y2hKUyh0eXBlc19zdHIsIHR5cGVzLCB2YWx1ZXMpIHsKKyAgLy8g
Q3JlYXRlIGEgSlMgZXhjZXB0aW9uLCBjYXRjaCBpdCBpbiB3YXNtIGFuZCBjaGVjayB0aGUgdW5w
YWNrZWQgdmFsdWUocykuCisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7
CisgIGxldCBqc190YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiB0eXBlc19z
dHJ9KTsKKyAgbGV0IGpzX2Z1bmNfaW5kZXggPSBidWlsZGVyLmFkZEltcG9ydCgnbScsICdqc19m
dW5jJywga1NpZ192X3YpOworICBsZXQgc2lnMSA9IG1ha2VTaWcodHlwZXMsIFtdKTsKKyAgbGV0
IHNpZzIgPSBtYWtlU2lnKFtdLCB0eXBlcyk7CisgIGxldCBqc190YWdfaW5kZXggPSBidWlsZGVy
LmFkZEltcG9ydGVkVGFnKCJtIiwgImpzX3RhZyIsIHNpZzEpOworICBsZXQgdGFnX2luZGV4ID0g
YnVpbGRlci5hZGRUYWcoc2lnMSk7CisgIGxldCByZXR1cm5fdHlwZSA9IGJ1aWxkZXIuYWRkVHlw
ZShzaWcyKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoIndhc21fdGFnIiwga0V4dGVybmFs
VGFnLCB0YWdfaW5kZXgpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaCIsIHNpZzIpCisg
ICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCByZXR1cm5fdHlwZSwKKyAgICAgICAg
a0V4cHJDYWxsRnVuY3Rpb24sIGpzX2Z1bmNfaW5kZXgsCisgICAgICAgIGtFeHByVW5yZWFjaGFi
bGUsCisgICAgICAgIGtFeHByQ2F0Y2gsIGpzX3RhZ19pbmRleCwKKyAgICAgICAga0V4cHJDYXRj
aCwgdGFnX2luZGV4LAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOwor
ICBsZXQgZXhjZXB0aW9uOworICBmdW5jdGlvbiBqc19mdW5jKCkgeworICAgIHRocm93IGV4Y2Vw
dGlvbjsKKyAgfQorICBsZXQgZXhwZWN0ZWQgPSB2YWx1ZXMubGVuZ3RoID09IDEgPyB2YWx1ZXNb
MF0gOiB2YWx1ZXM7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoe206IHtq
c19mdW5jLCBqc190YWd9fSk7CisgIGV4Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRp
b24oanNfdGFnLCB2YWx1ZXMpOworICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGluc3RhbmNlLmV4
cG9ydHMuY2F0Y2goKSk7CisgIGV4Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24o
aW5zdGFuY2UuZXhwb3J0cy53YXNtX3RhZywgdmFsdWVzKTsKKyAgYXNzZXJ0RXF1YWxzKGV4cGVj
dGVkLCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoKCkpOworfQorCisoZnVuY3Rpb24gVGVzdENhdGNo
SlNFeGNlcHRpb25XaXRoUGF5bG9hZCgpIHsKKyAgVGVzdENhdGNoSlMoWydpMzInXSwgW2tXYXNt
STMyXSwgWzFdKTsKKyAgVGVzdENhdGNoSlMoWydpNjQnXSwgW2tXYXNtSTY0XSwgWzJuXSk7Cisg
IFRlc3RDYXRjaEpTKFsnZjMyJ10sIFtrV2FzbUYzMl0sIFszXSk7CisgIFRlc3RDYXRjaEpTKFsn
ZjY0J10sIFtrV2FzbUY2NF0sIFs0XSk7CisgIFRlc3RDYXRjaEpTKFsnZXh0ZXJucmVmJ10sIFtr
V2FzbUV4dGVyblJlZl0sIFt7dmFsdWU6IDV9XSk7CisgIFRlc3RDYXRjaEpTKFsnaTMyJywgJ2k2
NCcsICdmMzInLCAnZjY0JywgJ2V4dGVybnJlZiddLAorICAgICAgICAgICAgICBba1dhc21JMzIs
IGtXYXNtSTY0LCBrV2FzbUYzMiwga1dhc21GNjQsIGtXYXNtRXh0ZXJuUmVmXSwKKyAgICAgICAg
ICAgICAgWzYsIDduLCA4LCA5LCB7dmFsdWU6IDEwfV0pOworfSkoKTsKKworZnVuY3Rpb24gVGVz
dEdldEFyZ0hlbHBlcih0eXBlc19zdHIsIHR5cGVzLCB2YWx1ZXMpIHsKKyAgbGV0IHRhZyA9IG5l
dyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IHR5cGVzX3N0cn0pOworICBsZXQgZXhjZXB0
aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIHZhbHVlcyk7CisgIGZvciAoaSA9
IDA7IGkgPCB0eXBlcy5sZW5ndGg7ICsraSkgeworICAgIGFzc2VydEVxdWFscyhleGNlcHRpb24u
Z2V0QXJnKHRhZywgaSksIHZhbHVlc1tpXSk7CisgIH0KKworICBsZXQgYnVpbGRlciA9IG5ldyBX
YXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgc2lnID0gbWFrZVNpZyh0eXBlcywgW10pOworICBs
ZXQgdGFnX2luZGV4ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJ0Iiwgc2lnKTsKKyAg
bGV0IGJvZHkgPSBbXTsKKyAgZm9yIChpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7Cisg
ICAgYm9keS5wdXNoKGtFeHByTG9jYWxHZXQsIGkpOworICB9CisgIGJvZHkucHVzaChrRXhwclRo
cm93LCB0YWdfaW5kZXgpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIHNpZykKKyAg
ICAgIC5hZGRCb2R5KGJvZHkpLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRl
ci5pbnN0YW50aWF0ZSh7J20nOiB7J3QnOiB0YWd9fSk7CisgIHRyeSB7CisgICAgaW5zdGFuY2Uu
ZXhwb3J0cy50aHJvdyguLi52YWx1ZXMpOworICB9IGNhdGNoIChlKSB7CisgICAgZm9yIChpID0g
MDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgICBhc3NlcnRFcXVhbHMoZS5nZXRBcmco
dGFnLCBpKSwgdmFsdWVzW2ldKTsKKyAgICB9CisgIH0KK30KKworKGZ1bmN0aW9uIFRlc3RHZXRB
cmcoKSB7CisgIC8vIENoZWNrIGVycm9ycy4KKyAgbGV0IHRhZyA9IG5ldyBXZWJBc3NlbWJseS5U
YWcoe3BhcmFtZXRlcnM6IFsnaTMyJ119KTsKKyAgbGV0IGV4Y2VwdGlvbiA9IG5ldyBXZWJBc3Nl
bWJseS5FeGNlcHRpb24odGFnLCBbMF0pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0aW9u
LmdldEFyZygwLCAwKSwgVHlwZUVycm9yLAorICAgICAgL0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUg
YSBXZWJBc3NlbWJseS5UYWcvKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGV4Y2VwdGlvbi5nZXRB
cmcoe30sIDApLCBUeXBlRXJyb3IsCisgICAgICAvRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIFdl
YkFzc2VtYmx5LlRhZy8pOworICAvL2Fzc2VydFRocm93cygoKSA9PiBleGNlcHRpb24uZ2V0QXJn
KHRhZywgdW5kZWZpbmVkKSwgVHlwZUVycm9yLAorICAgICAgLy8vSW5kZXggbXVzdCBiZSBjb252
ZXJ0aWJsZSB0byBhIHZhbGlkIG51bWJlci8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0
aW9uLmdldEFyZyh0YWcsIDB4RkZGRkZGRkYpLCBSYW5nZUVycm9yLAorICAgICAgL0luZGV4IG91
dCBvZiByYW5nZS8pOworICBsZXQgd3JvbmdfdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFy
YW1ldGVyczogWydpMzInXX0pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0aW9uLmdldEFy
Zyh3cm9uZ190YWcsIDApLCBUeXBlRXJyb3IsCisgICAgICAvRmlyc3QgYXJndW1lbnQgZG9lcyBu
b3QgbWF0Y2ggdGhlIGV4Y2VwdGlvbiB0YWcvKTsKKworICAvLyBDaGVjayBkZWNvZGluZy4KKyAg
VGVzdEdldEFyZ0hlbHBlcihbJ2kzMiddLCBba1dhc21JMzJdLCBbMV0pOworICBUZXN0R2V0QXJn
SGVscGVyKFsnaTY0J10sIFtrV2FzbUk2NF0sIFsybl0pOworICBUZXN0R2V0QXJnSGVscGVyKFsn
ZjMyJ10sIFtrV2FzbUYzMl0sIFszXSk7CisgIFRlc3RHZXRBcmdIZWxwZXIoWydmNjQnXSwgW2tX
YXNtRjY0XSwgWzRdKTsKKyAgVGVzdEdldEFyZ0hlbHBlcihbJ2V4dGVybnJlZiddLCBba1dhc21F
eHRlcm5SZWZdLCBbe3ZhbDogNX1dKTsKKyAgVGVzdEdldEFyZ0hlbHBlcihbJ2kzMicsICdpNjQn
LCAnZjMyJywgJ2Y2NCcsICdleHRlcm5yZWYnXSwgW2tXYXNtSTMyLCBrV2FzbUk2NCwga1dhc21G
MzIsIGtXYXNtRjY0LCBrV2FzbUV4dGVyblJlZl0sIFs1LCA2biwgNywgOCwge3ZhbDogOX1dKTsK
K30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhjZXB0aW9uSXMoKSB7CisgIGxldCB0YWcxID0gbmV3
IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogW119KTsKKyAgbGV0IHRhZzIgPSBuZXcgV2Vi
QXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbXX0pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih7fSwgW10pLCBUeXBlRXJyb3IsCisgICAgICAvZXhwZWN0
cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBXZWJBc3NlbWJseS5UYWcvKTsKKworICBsZXQg
ZXhjZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcxLCBbXSk7CisgIGFzc2Vy
dFRydWUoZXhjZXB0aW9uLmlzKHRhZzEpKTsKKyAgYXNzZXJ0RmFsc2UoZXhjZXB0aW9uLmlzKHRh
ZzIpKTsKKworICBhc3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0aW9uLmlzLmFwcGx5KHt9LCB0YWcx
KSwgVHlwZUVycm9yLAorICAgICAgL1dlYkFzc2VtYmx5LkV4Y2VwdGlvbiBvcGVyYXRpb24gY2Fs
bGVkIG9uIG5vbi1FeGNlcHRpb24gb2JqZWN0Lyk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXhwb3J0LmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlv
bnMtZXhwb3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMGM5
NjkwZjViODhmCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMt
ZXhwb3J0LmpzCkBAIC0wLDAgKzEsNTMgQEAKKy8vIENvcHlyaWdodCAyMDE4IHRoZSBWOCBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1leHBvc2Utd2FzbSAtLWV4
cGVyaW1lbnRhbC13YXNtLWVoCisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKKwor
KGZ1bmN0aW9uIFRlc3RFeHBvcnRNdWx0aXBsZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2Fz
bU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zf
dik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2kpOworICBidWlsZGVy
LmFkZEV4cG9ydE9mS2luZCgiZXgxYSIsIGtFeHRlcm5hbFRhZywgZXhjZXB0MSk7CisgIGJ1aWxk
ZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDFiIiwga0V4dGVybmFsVGFnLCBleGNlcHQxKTsKKyAgYnVp
bGRlci5hZGRFeHBvcnRPZktpbmQoImV4MiIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Mik7CisgIGxl
dCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRUcnVlKE9iamVj
dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnN0YW5jZS5leHBvcnRzLCAnZXgxYScp
KTsKKyAgYXNzZXJ0VHJ1ZShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5z
dGFuY2UuZXhwb3J0cywgJ2V4MWInKSk7CisgIGFzc2VydFRydWUoT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKGluc3RhbmNlLmV4cG9ydHMsICdleDInKSk7CisgIC8vIEZJWE1F
OiBmaXggYnJva2VuIHY4IHdhc20gZXhjZXB0aW9ucyB0ZXN0cworICAvLyBhc3NlcnRTYW1lKGlu
c3RhbmNlLmV4cG9ydHMuZXgxYSwgaW5zdGFuY2UuZXhwb3J0cy5leDFiKTsKKyAgYXNzZXJ0Tm90
U2FtZShpbnN0YW5jZS5leHBvcnRzLmV4MWEsIGluc3RhbmNlLmV4cG9ydHMuZXgyKTsKK30pKCk7
CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0T3V0T2ZCb3VuZHMoKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleF9vb2IiLCBrRXh0ZXJuYWxU
YWcsIGV4Y2VwdCArIDEpOworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmlu
c3RhbnRpYXRlKCksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwKKyAgICAgIC9XZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMxOiAwdGggRXhwb3J0IGhhcyBpbnZhbGlk
IGV4Y2VwdGlvbiBudW1iZXIgMSBpdCBleGNlZWRzIHRoZSBleGNlcHRpb24gaW5kZXggc3BhY2Ug
MSwgbmFtZWQgJ2V4X29vYicvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0U2FtZU5h
bWVUd2ljZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAg
bGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBv
cnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBidWlsZGVyLmFkZEV4cG9y
dE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGFzc2VydFRocm93cygKKyAg
ICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
LAorICAgICAgL1dlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzA6IGR1
cGxpY2F0ZSBleHBvcnQ6ICdleCcvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0TW9k
dWxlR2V0RXhwb3J0cygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIo
KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5h
ZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgbW9kdWxl
ID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLnRvQnVmZmVyKCkpOworCisgIGxldCBl
eHBvcnRzID0gV2ViQXNzZW1ibHkuTW9kdWxlLmV4cG9ydHMobW9kdWxlKTsKKyAgYXNzZXJ0QXJy
YXlFcXVhbHMoW3sgbmFtZTogImV4Iiwga2luZDogInRhZyIgfV0sIGV4cG9ydHMpOworfSkoKTsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWV4dGVybnJlZi5qcyBiL0pT
VGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWV4dGVybnJlZi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAuLmViYmRhMzdmMTZlYgotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWV4dGVybnJlZi5qcwpAQCAtMCwwICsxLDk2IEBACisv
LyBDb3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKwor
Ly8gRmxhZ3M6IC0tZXhwZXJpbWVudGFsLXdhc20tZWggLS1leHBlcmltZW50YWwtd2FzbS1yZWZ0
eXBlcyAtLWFsbG93LW5hdGl2ZXMtc3ludGF4CisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxkZXIu
anMiKTsKK2xvYWQoImV4Y2VwdGlvbnMtdXRpbHMuanMiKTsKKworLy8gVGVzdCB0aGUgZW5jb2Rp
bmcgb2YgYSB0aHJvd24gZXhjZXB0aW9uIHdpdGggYSBudWxsLXJlZiB2YWx1ZS4KKyhmdW5jdGlv
biBUZXN0VGhyb3dSZWZOdWxsKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVp
bGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3IpOworICBidWls
ZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19udWxsIiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShb
CisgICAgICAgIGtFeHByUmVmTnVsbCwga0V4dGVyblJlZkNvZGUsCisgICAgICAgIGtFeHByVGhy
b3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRP
ZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWls
ZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFu
Y2UuZXhwb3J0cy5leCwgW251bGxdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X251bGwo
KSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nL2NhdGNoaW5nIHRoZSBudWxsLXJlZiB2YWx1
ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFJlZk51bGwoKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfcik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X2NhdGNoX251bGwiLCBrU2ln
X2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAg
ICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJJMzJFcXosCisgICAgICAg
ICAga0V4cHJJZiwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwclJlZk51bGwsIGtFeHRlcm5S
ZWZDb2RlLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHBy
RWxzZSwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDQyLAorICAgICAgICAgIGtFeHByRW5k
LAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJSZWZJc051bGws
CisgICAgICAgICAga0V4cHJJZiwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0
LCAyMywKKyAgICAgICAgICBrRXhwckVsc2UsCisgICAgICAgICAgICBrRXhwclVucmVhY2hhYmxl
LAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9y
dEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBl
eGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNz
ZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX251bGwoMCkpOworICBh
c3NlcnRFcXVhbHMoNDIsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfbnVsbCgxKSk7Cit9
KSgpOworCisvLyBUZXN0IHRoZSBlbmNvZGluZyBvZiBhIHRocm93biBleGNlcHRpb24gd2l0aCBh
IHJlZmVyZW5jZSB0eXBlIHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd1JlZlBhcmFtKCkgewor
ICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0g
YnVpbGRlci5hZGRUYWcoa1NpZ192X3IpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19w
YXJhbSIsIGtTaWdfdl9yKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0
LCAwLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7
CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsK
KyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBsZXQgbyA9IG5ldyBP
YmplY3QoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRz
LmV4LCBbb10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0obykpOworICBhc3Nl
cnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbMV0sICgpID0+IGlu
c3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oMSkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3Rh
bmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbMi4zXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50
aHJvd19wYXJhbSgyLjMpKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2Uu
ZXhwb3J0cy5leCwgWyJzdHIiXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSgi
c3RyIikpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2luZy9jYXRjaGluZyB0aGUgcmVmZXJlbmNl
IHR5cGUgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hSZWZQYXJhbSgpIHsKKyAgbGV0
IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl9yKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfY2F0Y2hf
cGFyYW0iLCBrU2lnX3JfcikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtF
eHRlcm5SZWZDb2RlLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4
cHJUaHJvdywgZXhjZXB0LAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAg
Ly8gZmFsbC10aHJvdWdoCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygp
OworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7
CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgbGV0IG8gPSBuZXcg
T2JqZWN0KCk7CisKKyAgYXNzZXJ0RXF1YWxzKG8sIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0
Y2hfcGFyYW0obykpOworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19j
YXRjaF9wYXJhbSgxKSk7CisgIGFzc2VydEVxdWFscygyLjMsIGluc3RhbmNlLmV4cG9ydHMudGhy
b3dfY2F0Y2hfcGFyYW0oMi4zKSk7CisgIGFzc2VydEVxdWFscygic3RyIiwgaW5zdGFuY2UuZXhw
b3J0cy50aHJvd19jYXRjaF9wYXJhbSgic3RyIikpOworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvd2FzbS92OC9leGNlcHRpb25zLWltcG9ydC5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRp
b25zLWltcG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdh
NGYwYTA1NmJmYwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25z
LWltcG9ydC5qcwpAQCAtMCwwICsxLDkwIEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUgVjggcHJv
amVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwb3NlLXdhc20gLS1l
eHBlcmltZW50YWwtd2FzbS1laAorCitsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7CisK
Ky8vIEhlbHBlciBmdW5jdGlvbiB0byByZXR1cm4gYSBuZXcgZXhwb3J0ZWQgZXhjZXB0aW9uIHdp
dGggdGhlIHtrU2lnX3Zfdn0gdHlwZQorLy8gc2lnbmF0dXJlIGZyb20gYW4gYW5vbnltb3VzIG1v
ZHVsZS4gVGhlIHVuZGVybHlpbmcgbW9kdWxlIGlzIHRocm93biBhd2F5LgorLy8gVGhpcyBhbGxv
d3MgdGVzdHMgdG8gcmVhc29uIHNvbGVseSBhYm91dCBpbXBvcnRpbmcgZXhjZXB0aW9ucy4KK2Z1
bmN0aW9uIE5ld0V4cG9ydGVkVGFnKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgdGFnID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWls
ZGVyLmFkZEV4cG9ydE9mS2luZCgidCIsIGtFeHRlcm5hbFRhZywgdGFnKTsKKyAgbGV0IGluc3Rh
bmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy50
OworfQorCisoZnVuY3Rpb24gVGVzdEltcG9ydFNpbXBsZSgpIHsKKyAgbGV0IGV4cG9ydGVkID0g
TmV3RXhwb3J0ZWRUYWcoKTsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIo
KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2ln
X3Zfdik7CisKKyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUo
eyBtOiB7IGV4OiBleHBvcnRlZCB9fSkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJbXBvcnRN
dWx0aXBsZSgpIHsKKyAgbGV0IGV4cG9ydGVkID0gTmV3RXhwb3J0ZWRUYWcoKTsKKyAgbGV0IGJ1
aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVy
LmFkZEltcG9ydGVkVGFnKCJtIiwgImV4MSIsIGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBi
dWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4MiIsIGtTaWdfdl92KTsKKyAgbGV0IGV4Y2Vw
dDMgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5k
KCJleDIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDIpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2lu
ZCgiZXgzIiwga0V4dGVybmFsVGFnLCBleGNlcHQzKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRl
ci5pbnN0YW50aWF0ZSh7IG06IHsgZXgxOiBleHBvcnRlZCwgZXgyOiBleHBvcnRlZCB9fSk7CisK
KyAgYXNzZXJ0VHJ1ZShleGNlcHQxIDwgZXhjZXB0MyAmJiBleGNlcHQyIDwgZXhjZXB0Myk7Cisg
IGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGluc3RhbmNlLmV4cG9ydHMuZXgxKTsKKyAgLy8gRklY
TUU6IGZpeCBicm9rZW4gdjggd2FzbSBleGNlcHRpb25zIHRlc3RzCisgIC8vIGFzc2VydFNhbWUo
ZXhwb3J0ZWQsIGluc3RhbmNlLmV4cG9ydHMuZXgyKTsKKyAgYXNzZXJ0Tm90U2FtZShleHBvcnRl
ZCwgaW5zdGFuY2UuZXhwb3J0cy5leDMpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJbXBvcnRN
aXNzaW5nKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBs
ZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleCIsIGtTaWdfdl92KTsK
KworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHt9KSwg
VHlwZUVycm9yLAorICAgICAgL2ltcG9ydCBtOmV4IG11c3QgYmUgYW4gb2JqZWN0Lyk7CisgIGFz
c2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7fX0pLCBX
ZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvVGFnIGltcG9ydCBtOmV4IGlzIG5vdCBhbiBp
bnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWcvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0SW1w
b3J0VmFsdWVNaXNtYXRjaCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBr
U2lnX3Zfdik7CisKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50
aWF0ZSh7IG06IHsgZXg6IDIzIH19KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAorICAgICAgL1Rh
ZyBpbXBvcnQgbTpleCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFnLyk7Cisg
IGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4
OiB7fSB9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9UYWcgaW1wb3J0IG06ZXgg
aXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhZy8pOworICB2YXIgbW9ua2V5ID0g
T2JqZWN0LmNyZWF0ZShOZXdFeHBvcnRlZFRhZygpKTsKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAg
KCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IG1vbmtleSB9fSksIFdlYkFzc2Vt
Ymx5LkxpbmtFcnJvciwKKyAgICAgIC9UYWcgaW1wb3J0IG06ZXggaXMgbm90IGFuIGluc3RhbmNl
IG9mIFdlYkFzc2VtYmx5LlRhZy8pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJbXBvcnRTaWdu
YXR1cmVNaXNtYXRjaCgpIHsKKyAgbGV0IGV4cG9ydGVkID0gTmV3RXhwb3J0ZWRUYWcoKTsKKyAg
bGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1
aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3ZfaSk7CisKKyAgYXNzZXJ0VGhy
b3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IGV4cG9ydGVk
IH19KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAorICAgICAgL2ltcG9ydGVkIFRhZyBtOmV4IHNp
Z25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBpbXBvcnRlZCBXZWJBc3NlbWJseSBUYWcncyBzaWdu
YXR1cmUvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0TW9kdWxlR2V0SW1wb3J0cygp
IHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2Vw
dCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3Zfdik7CisgIGxldCBt
b2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIudG9CdWZmZXIoKSk7CisKKyAg
bGV0IGltcG9ydHMgPSBXZWJBc3NlbWJseS5Nb2R1bGUuaW1wb3J0cyhtb2R1bGUpOworICBhc3Nl
cnRBcnJheUVxdWFscyhbeyBtb2R1bGU6ICJtIiwgbmFtZTogImV4Iiwga2luZDogInRhZyIgfV0s
IGltcG9ydHMpOworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25z
LXJldGhyb3cuanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1yZXRocm93LmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTIzMzliZWYyZjY5Ci0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtcmV0aHJvdy5qcwpAQCAtMCww
ICsxLDE0MiBAQAorLy8gQ29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cG9zZS13YXNtIC0tZXhwZXJpbWVudGFsLXdhc20t
ZWggLS1hbGxvdy1uYXRpdmVzLXN5bnRheAorCitsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpz
Iik7Citsb2FkKCJleGNlcHRpb25zLXV0aWxzLmpzIik7CisKKy8vIFRlc3QgdGhhdCByZXRocm93
IGV4cHJlc3Npb25zIGNhbiB0YXJnZXQgY2F0Y2ggYmxvY2tzLgorKGZ1bmN0aW9uIFRlc3RSZXRo
cm93SW5DYXRjaCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsK
KyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRG
dW5jdGlvbigicmV0aHJvdzAiLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAg
a0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAg
ICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclJldGhyb3csIDAsCisgICAg
ICAgIGtFeHByRW5kLAorICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24o
InJldGhyb3cxIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5
LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgIGtFeHBy
Q2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtF
eHBySTMyRXF6LAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtF
eHByUmV0aHJvdywgMSwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICBrRXhwckkzMkNv
bnN0LCAyMywKKyAgICAgICAga0V4cHJFbmQKKyAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVy
LmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0
YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3Rh
bmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRo
cm93MCgpKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5l
eCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMucmV0aHJvdzEoMCkpOworICBhc3NlcnRFcXVh
bHMoMjMsIGluc3RhbmNlLmV4cG9ydHMucmV0aHJvdzEoMSkpOworfSkoKTsKKworLy8gVGVzdCB0
aGF0IHJldGhyb3cgZXhwcmVzc2lvbnMgY2FuIHRhcmdldCBjYXRjaC1hbGwgYmxvY2tzLgorKGZ1
bmN0aW9uIFRlc3RSZXRocm93SW5DYXRjaEFsbCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2Fz
bU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigicmV0aHJvdzAiLCBrU2lnX3ZfdikKKyAgICAgIC5h
ZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwclRo
cm93LCBleGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJSZXRo
cm93LCAwLAorICAgICAgICBrRXhwckVuZCwKKyAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJyZXRocm93MSIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAg
ICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAor
ICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAg
ICAgICAga0V4cHJJMzJFcXosCisgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAg
ICAgICAga0V4cHJSZXRocm93LCAxLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgIGtF
eHBySTMyQ29uc3QsIDIzLAorICAgICAgICBrRXhwckVuZAorICBdKS5leHBvcnRGdW5jKCk7Cisg
IGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAg
bGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJv
d3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBv
cnRzLnJldGhyb3cwKCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5l
eHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93MSgwKSk7CisgIGFz
c2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93MSgxKSk7Cit9KSgpOworCisv
LyBUZXN0IHRoYXQgcmV0aHJvdyBleHByZXNzaW9uIHByb3Blcmx5IHRhcmdldCB0aGUgY29ycmVj
dCBzdXJyb3VuZGluZyB0cnkKKy8vIGJsb2NrIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIG11bHRp
cGxlIGhhbmRsZXJzIGJlaW5nIGludm9sdmVkLgorKGZ1bmN0aW9uIFRlc3RSZXRocm93TmVzdGVk
KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhj
ZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVy
LmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInJldGhyb3dfbmVzdGVk
Iiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkz
MiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQyLAorICAgICAgICBrRXhwckNhdGNoLCBl
eGNlcHQyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHBy
VGhyb3csIGV4Y2VwdDEsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAgICAgICAg
ICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAwLAorICAg
ICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAg
ICAgICAgICAgICAga0V4cHJSZXRocm93LCAxLAorICAgICAgICAgICAga0V4cHJFbmQsCisgICAg
ICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwK
KyAgICAgICAgICAgIGtFeHBySTMyRXEsCisgICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQs
CisgICAgICAgICAgICAgIGtFeHByUmV0aHJvdywgMiwKKyAgICAgICAgICAgIGtFeHByRW5kLAor
ICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMjMsCisgICAgICAgICAga0V4cHJFbmQsCisgICAg
ICAgIGtFeHByRW5kLAorICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZL
aW5kKCJleDEiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDEpOworICBidWlsZGVyLmFkZEV4cG9ydE9m
S2luZCgiZXgyIiwga0V4dGVybmFsVGFnLCBleGNlcHQyKTsKKyAgbGV0IGluc3RhbmNlID0gYnVp
bGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3Rh
bmNlLmV4cG9ydHMuZXgxLCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X25lc3Rl
ZCgwKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgy
LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X25lc3RlZCgxKSk7CisgIGFzc2Vy
dEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X25lc3RlZCgyKSk7Cit9KSgpOwor
CisvLyBUZXN0IHRoYXQgYW4gZXhjZXB0aW9uIGJlaW5nIHJldGhyb3cgY2FuIGJlIGNhdWdodCBi
eSBhbm90aGVyIGxvY2FsIGNhdGNoCisvLyBibG9jayBpbiB0aGUgc2FtZSBmdW5jdGlvbiB3aXRo
b3V0IGV2ZXIgdW53aW5kaW5nIHRoZSBhY3RpdmF0aW9uLgorKGZ1bmN0aW9uIFRlc3RSZXRocm93
UmVjYXRjaCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAg
bGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5j
dGlvbigicmV0aHJvd19yZWNhdGNoIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAg
ICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisg
ICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIs
CisgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJJMzJFcXos
CisgICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgIGtFeHByUmV0
aHJvdywgMiwKKyAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAga0V4cHJJMzJDb25z
dCwgNDIsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgICAga0V4cHJJ
MzJDb25zdCwgMjMsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByRW5kLAorICBd
KS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5h
bFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOwor
CisgIGFzc2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X3JlY2F0Y2goMCkp
OworICBhc3NlcnRFcXVhbHMoNDIsIGluc3RhbmNlLmV4cG9ydHMucmV0aHJvd19yZWNhdGNoKDEp
KTsKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1zaGFyZWQu
anMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1zaGFyZWQuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44NTJmNWJhOGExMzcKLS0tIC9kZXYvbnVsbAorKysg
Yi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1zaGFyZWQuanMKQEAgLTAsMCArMSwxNTMgQEAK
Ky8vIENvcHlyaWdodCAyMDE4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
CisvLyBGbGFnczogLS1leHBvc2Utd2FzbSAtLWV4cGVyaW1lbnRhbC13YXNtLWVoCisKK2xvYWQo
Indhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJldHVy
biBhIG5ldyBleHBvcnRlZCBleGNlcHRpb24gd2l0aCB0aGUge2tTaWdfdl92fSB0eXBlCisvLyBz
aWduYXR1cmUgZnJvbSBhbiBhbm9ueW1vdXMgbW9kdWxlLiBUaGUgdW5kZXJseWluZyBtb2R1bGUg
aXMgdGhyb3duIGF3YXkuCitmdW5jdGlvbiBOZXdFeHBvcnRlZEV4Y2VwdGlvbigpIHsKKyAgbGV0
IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4
dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRl
KCk7CisgIHJldHVybiBpbnN0YW5jZS5leHBvcnRzLmV4OworfQorCisvLyBDaGVjayB0aGF0IGFu
IGluc3RhbmNlIG1hdGNoZXMgYW4gZXhjZXB0aW9uIHRocm93biBieSBpdHNlbGYsIGV2ZW4gd2hl
biB0aGUKKy8vIGV4Y2VwdGlvbiBpcyByZS10aHJvd24gYnkgYSByZWd1bGFyIEphdmFTY3JpcHQg
ZnVuY3Rpb24uCisoZnVuY3Rpb24gVGVzdFNpbmdsZUluc3RhbmNlKCkgeworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgc2lnX2luZGV4ID0gYnVpbGRlci5h
ZGRUeXBlKGtTaWdfdl92KTsKKyAgbGV0IGZ1biA9IGJ1aWxkZXIuYWRkSW1wb3J0KCJtIiwgImYi
LCBzaWdfaW5kZXgpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOwor
ICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHko
WworICAgICAgICBrRXhwclRocm93LCBleGNlcHQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAg
YnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2giLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlv
biwgZnVuLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByRW5kLAor
ICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgZXhfb2JqID0gbmV3IEVycm9yKCJteSBleGNl
cHRpb24iKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZjog
ZnVuY3Rpb24oKSB7IHRocm93IGV4X29iaiB9fX0pOworCisgIGFzc2VydFRocm93cygoKSA9PiBp
bnN0YW5jZS5leHBvcnRzLnRocm93KCksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFzc2Vy
dFRocm93c0VxdWFscygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmNhdGNoKCksIGV4X29iaik7Cisg
IHRyeSB7CisgICAgaW5zdGFuY2UuZXhwb3J0cy50aHJvdygpOworICB9IGNhdGNoIChlKSB7Cisg
ICAgZXhfb2JqID0gZTsKKyAgfQorICBhc3NlcnREb2VzTm90VGhyb3coKCkgPT4gaW5zdGFuY2Uu
ZXhwb3J0cy5jYXRjaCgpKTsKK30pKCk7CisKKy8vIENoZWNrIHRoYXQgdHdvIGluc3RhbmNlcyBk
aXN0aW5ndWlzaCB0aGVpciBpbmRpdmlkdWFsIGV4Y2VwdGlvbnMgaWYgdGhleSBhcmUKKy8vIG5v
dCBzaGFyZWQsIGV2ZW4gd2hlbiBkZWNsYXJlZCBieSB0aGUgc2FtZSB1bmRlcmx5aW5nIG1vZHVs
ZS4KKyhmdW5jdGlvbiBUZXN0TXVsdGlJbnN0YW5jZU5vblNoYXJlZCgpIHsKKyAgbGV0IGJ1aWxk
ZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IHNpZ19pbmRleCA9IGJ1aWxkZXIu
YWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBmdW4gPSBidWlsZGVyLmFkZEltcG9ydCgibSIsICJm
Iiwgc2lnX2luZGV4KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsK
KyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5
KFsKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0CisgICAgICBdKS5leHBvcnRGdW5jKCk7Cisg
IGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoIiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShb
CisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rp
b24sIGZ1biwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwckVuZCwK
KyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGV4X29iaiA9IG5ldyBFcnJvcigibXkgZXhj
ZXB0aW9uIik7CisgIGxldCBpbnN0YW5jZTEgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBm
OiBhc3NlcnRVbnJlYWNoYWJsZSB9fSk7CisgIGxldCBpbnN0YW5jZTIgPSBidWlsZGVyLmluc3Rh
bnRpYXRlKHsgbTogeyBmOiBmdW5jdGlvbigpIHsgdGhyb3cgZXhfb2JqIH19fSk7CisKKyAgYXNz
ZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlMS5leHBvcnRzLnRocm93KCksIFdlYkFzc2VtYmx5LkV4
Y2VwdGlvbik7CisgIGFzc2VydFRocm93c0VxdWFscygoKSA9PiBpbnN0YW5jZTIuZXhwb3J0cy5j
YXRjaCgpLCBleF9vYmopOworICB0cnkgeworICAgIGluc3RhbmNlMS5leHBvcnRzLnRocm93KCk7
CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBleF9vYmogPSBlOworICB9CisgIGFzc2VydFRocm93c0Vx
dWFscygoKSA9PiBpbnN0YW5jZTIuZXhwb3J0cy5jYXRjaCgpLCBleF9vYmopOworfSkoKTsKKwor
Ly8gQ2hlY2sgdGhhdCB0d28gaW5zdGFuY2VzIG1hdGNoIHRoZWlyIGV4Y2VwdGlvbnMgaWYgdGhl
eSBhcmUgc2hhcmVkIHByb3Blcmx5LAorLy8gZXZlbiBpZiB0aGUgbG9jYWwgZXhjZXB0aW9uIGlu
ZGV4IG9mIGV4cG9ydCBhbmQgaW1wb3J0IGlzIGRpZmZlcmVudC4KKyhmdW5jdGlvbiBUZXN0TXVs
dGlJbnN0YW5jZVNoYXJlZCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgbGV0IHNpZ19pbmRleCA9IGJ1aWxkZXIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxl
dCBmdW4gPSBidWlsZGVyLmFkZEltcG9ydCgibSIsICJmIiwgc2lnX2luZGV4KTsKKyAgbGV0IGV4
Y2VwdDEgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4MSIsIGtTaWdfdl92KTsKKyAg
bGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhw
b3J0T2ZLaW5kKCJleDIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDIpOworICBidWlsZGVyLmFkZEZ1
bmN0aW9uKCJ0aHJvdyIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhw
clRocm93LCBleGNlcHQyCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVu
Y3Rpb24oImNhdGNoIiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBy
VHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGZ1biwKKyAgICAg
ICAga0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBv
cnRGdW5jKCk7CisgIGxldCBleF9vYmogPSBuZXcgRXJyb3IoIm15IGV4Y2VwdGlvbiIpOworICBs
ZXQgaW5zdGFuY2UxID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZjogYXNzZXJ0VW5yZWFj
aGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleDE6
IE5ld0V4cG9ydGVkRXhjZXB0aW9uKCkgfX0pOworICBsZXQgaW5zdGFuY2UyID0gYnVpbGRlci5p
bnN0YW50aWF0ZSh7IG06IHsgZjogZnVuY3Rpb24oKSB7IHRocm93IGV4X29iaiB9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXgxOiBpbnN0YW5jZTEuZXhw
b3J0cy5leDIgfX0pOworCisgIGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZTEuZXhwb3J0cy50
aHJvdygpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkg
PT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2goKSwgZXhfb2JqKTsKKyAgdHJ5IHsKKyAgICBpbnN0
YW5jZTEuZXhwb3J0cy50aHJvdygpOworICB9IGNhdGNoIChlKSB7CisgICAgZXhfb2JqID0gZTsK
KyAgfQorICBhc3NlcnREb2VzTm90VGhyb3coKCkgPT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2go
KSk7Cit9KSgpOworCisvLyBDaGVjayB0aGF0IHR3byBpbnN0YW5jZXMgYmFzZWQgb24gZGlmZmVy
ZW50IG1vZHVsZXMgbWF0Y2ggdGhlaXIgZXhjZXB0aW9ucyBpZgorLy8gdGhleSBhcmUgc2hhcmVk
IHByb3Blcmx5LCBldmVuIGlmIHRoZSBsb2NhbCBleGNlcHRpb24gaW5kZXggaXMgZGlmZmVyZW50
LgorKGZ1bmN0aW9uIFRlc3RNdWx0aU1vZHVsZVNoYXJlZCgpIHsKKyAgbGV0IGJ1aWxkZXIxID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlcjEuYWRkVGFn
KGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyMS5hZGRUYWcoa1NpZ192X3YpOwor
ICBidWlsZGVyMS5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQyKTsK
KyAgYnVpbGRlcjEuYWRkRnVuY3Rpb24oInRocm93Iiwga1NpZ192X3YpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDIKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsK
KyAgbGV0IGJ1aWxkZXIyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBzaWdfaW5k
ZXggPSBidWlsZGVyMi5hZGRUeXBlKGtTaWdfdl92KTsKKyAgbGV0IGZ1biA9IGJ1aWxkZXIyLmFk
ZEltcG9ydCgibSIsICJmIiwgc2lnX2luZGV4KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIyLmFk
ZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X3YpOworICBidWlsZGVyMi5hZGRGdW5jdGlv
bigiY2F0Y2giLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnks
IGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgZnVuLAorICAgICAgICBr
RXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVu
YygpOworICBsZXQgZXhfb2JqID0gbmV3IEVycm9yKCJteSBleGNlcHRpb24iKTsKKyAgbGV0IGlu
c3RhbmNlMSA9IGJ1aWxkZXIxLmluc3RhbnRpYXRlKCk7CisgIGxldCBpbnN0YW5jZTIgPSBidWls
ZGVyMi5pbnN0YW50aWF0ZSh7IG06IHsgZjogZnVuY3Rpb24oKSB7IHRocm93IGV4X29iaiB9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4OiBpbnN0YW5j
ZTEuZXhwb3J0cy5leCB9fSk7CisKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlMS5leHBv
cnRzLnRocm93KCksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFzc2VydFRocm93c0VxdWFs
cygoKSA9PiBpbnN0YW5jZTIuZXhwb3J0cy5jYXRjaCgpLCBleF9vYmopOworICB0cnkgeworICAg
IGluc3RhbmNlMS5leHBvcnRzLnRocm93KCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBleF9vYmog
PSBlOworICB9CisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9PiBpbnN0YW5jZTIuZXhwb3J0cy5j
YXRjaCgpKTsKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy10
eXBlLXJlZmxlY3Rpb24uanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy10eXBlLXJlZmxl
Y3Rpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iNGMyMGVk
YWU4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy10eXBl
LXJlZmxlY3Rpb24uanMKQEAgLTAsMCArMSw0NyBAQAorLy8gQ29weXJpZ2h0IDIwMjEgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cGVyaW1lbnRh
bC13YXNtLWVoIC0tZXhwZXJpbWVudGFsLXdhc20tdHlwZS1yZWZsZWN0aW9uCisKK2xvYWQoIndh
c20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKKworbGV0IHRlc3RjYXNlcyA9IFsKK3t0eXBlczoge3Bh
cmFtZXRlcnM6W119LCBzaWc6IGtTaWdfdl92fSwKK3t0eXBlczoge3BhcmFtZXRlcnM6WyJpMzIi
XX0sIHNpZzoga1NpZ192X2l9LAore3R5cGVzOiB7cGFyYW1ldGVyczpbImk2NCJdfSwgc2lnOiBr
U2lnX3ZfbH0sCit7dHlwZXM6IHtwYXJhbWV0ZXJzOlsiZjY0IiwgImY2NCIsICJpMzIiXX0sIHNp
Zzoga1NpZ192X2RkaX0sCit7dHlwZXM6IHtwYXJhbWV0ZXJzOlsiZjMyIl19LCBzaWc6IGtTaWdf
dl9mfSwKK107CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0KCkgeworICBsZXQgYnVpbGRlciA9IG5l
dyBXYXNtTW9kdWxlQnVpbGRlcigpOworCisgIHRlc3RjYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGV4
cGVjdGVkLCBpKSB7CisgICAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGV4cGVjdGVkLnNp
Zyk7CisgICAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4IiArIGksIGtFeHRlcm5hbFRhZywg
ZXhjZXB0KTsKKyAgfSk7CisKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgp
OworICB0ZXN0Y2FzZXMuZm9yRWFjaChmdW5jdGlvbihleHBlY3RlZCwgaSkgeworICAgIGFzc2Vy
dEVxdWFscyhpbnN0YW5jZS5leHBvcnRzWyJleCIgKyBpXS50eXBlKCksIGV4cGVjdGVkLnR5cGVz
KTsKKyAgfSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEltcG9ydEV4cG9ydCgpIHsKKworICBs
ZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgaW1wb3J0cyA9IHtt
OiB7fX07CisKKyAgdGVzdGNhc2VzLmZvckVhY2goZnVuY3Rpb24oZXhwZWN0ZWQsIGkpIHsKKyAg
ICBsZXQgdCA9IG5ldyBXZWJBc3NlbWJseS5UYWcoZXhwZWN0ZWQudHlwZXMpOworICAgIGxldCBp
bmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiICsgaSwgZXhwZWN0ZWQuc2ln
KTsKKyAgICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiICsgaSwga0V4dGVybmFsVGFnLCBp
bmRleCk7CisgICAgaW1wb3J0cy5tWyJleCIgKyBpXSA9IHQ7CisgIH0pOworCisgIGxldCBpbnN0
YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoaW1wb3J0cyk7CisgIHRlc3RjYXNlcy5mb3JFYWNo
KGZ1bmN0aW9uKGV4cGVjdGVkLCBpKSB7CisgICAgYXNzZXJ0RXF1YWxzKGluc3RhbmNlLmV4cG9y
dHNbImV4IiArIGldLnR5cGUoKSwgZXhwZWN0ZWQudHlwZXMpOworICB9KQorfSkoKTsKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXV0aWxzLmpzIGIvSlNUZXN0cy93YXNt
L3Y4L2V4Y2VwdGlvbnMtdXRpbHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi4wYmUxOTE5ZGVlNjgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgv
ZXhjZXB0aW9ucy11dGlscy5qcwpAQCAtMCwwICsxLDI3IEBACisvLyBDb3B5cmlnaHQgMjAxOCB0
aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tYWxsb3ct
bmF0aXZlcy1zeW50YXgKKworLy8gVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIGxvYWRlZCBi
eSBvdGhlciB0ZXN0cyB0byBwcm92aWRlIHV0aWxpdHkgbWV0aG9kcworLy8gcmVxdWlyaW5nIG5h
dGl2ZXMgc3ludGF4IChhbmQgaGVuY2Ugbm90IHN1aXRlZCBmb3IgdGhlIG1qc3VuaXQuanMgZmls
ZSkuCisKK2Z1bmN0aW9uIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIHRhZywgdmFsdWVzLCBj
b2RlKSB7CisgIHRyeSB7CisgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnZnVuY3Rpb24nKSB7Cisg
ICAgICBjb2RlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGV2YWwoY29kZSk7CisgICAgfQorICB9
IGNhdGNoIChlKSB7CisgICAgYXNzZXJ0SW5zdGFuY2VvZihlLCBXZWJBc3NlbWJseS5FeGNlcHRp
b24pOworICAgIGFzc2VydFRydWUoZS5pcyh0YWcpKTsKKyAgICBhc3NlcnRFcXVhbHModmFsdWVz
Lmxlbmd0aCwgdGFnLnR5cGUoKS5wYXJhbWV0ZXJzLmxlbmd0aCk7CisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpCisgICAgICBhc3NlcnRFcXVhbHModmFsdWVzW2ld
LCBlLmdldEFyZyh0YWcsIGkpKTsKKyAgICByZXR1cm47ICAvLyBTdWNjZXNzLgorICB9CisgIHRo
cm93IG5ldyBNanNVbml0QXNzZXJ0aW9uRXJyb3IoJ0RpZCBub3QgdGhyb3cgZXhwZWN0ZWQgPCcg
KyB0YWcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc+IHdpdGggdmFsdWVz
OiAnICsgdmFsdWVzKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25z
LmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi43OTE1NTA0NTA0OTgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3dhc20vdjgvZXhjZXB0aW9ucy5qcwpAQCAtMCwwICsxLDEwODcgQEAKKy8vIENvcHlyaWdo
dCAyMDE4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczog
LS1leHBvc2Utd2FzbSAtLWV4cGVyaW1lbnRhbC13YXNtLWVoIC0tYWxsb3ctbmF0aXZlcy1zeW50
YXgKKworbG9hZCgid2FzbS1tb2R1bGUtYnVpbGRlci5qcyIpOworbG9hZCgiZXhjZXB0aW9ucy11
dGlscy5qcyIpOworCisvLyBUaGUgZm9sbG93aW5nIG1ldGhvZCBkb2Vzbid0IGF0dGVtcHQgdG8g
Y2F0Y2ggYW4gcmFpc2VkIGV4Y2VwdGlvbi4KKyhmdW5jdGlvbiBUZXN0VGhyb3dTaW1wbGUoKSB7
CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQg
PSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93
X2lmX3BhcmFtX25vdF96ZXJvIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAg
IGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDAsCisgICAgICAgIGtF
eHBySTMyTmUsCisgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwclRo
cm93LCBleGNlcHQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckkzMkNvbnN0LCAx
CisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIs
IGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50
aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2lmX3Bh
cmFtX25vdF96ZXJvKDApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2Uu
ZXhwb3J0cy5leCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfaWZfcGFyYW1fbm90
X3plcm8oMTApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0
cy5leCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfaWZfcGFyYW1fbm90X3plcm8o
LTEpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhhdCBlbXB0eSB0cnkvY2F0Y2ggYmxvY2tzIHdvcmsu
CisoZnVuY3Rpb24gVGVzdENhdGNoRW1wdHlCbG9ja3MoKSB7CisgIGxldCBidWlsZGVyID0gbmV3
IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2ln
X3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoX2VtcHR5X3RyeSIsIGtTaWdfdl92
KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAg
ICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0
RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNz
ZXJ0RG9lc05vdFRocm93KGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hfZW1wdHlfdHJ5KTsKK30pKCk7
CisKKy8vIE5vdyB0aGF0IHdlIGtub3cgdGhyb3dpbmcgd29ya3MsIHdlIHRlc3QgY2F0Y2hpbmcg
dGhlIGV4Y2VwdGlvbnMgd2UgcmFpc2UuCisoZnVuY3Rpb24gVGVzdENhdGNoU2ltcGxlKCkgewor
ICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0g
YnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJzaW1wbGVf
dGhyb3dfY2F0Y2hfdG9fMF8xIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAg
IGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAg
ICAgIGtFeHBySTMyRXF6LAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAg
ICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICBr
RXhwckkzMkNvbnN0LCA0MiwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAg
IGtFeHBySTMyQ29uc3QsIDIzLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVu
YygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0
RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnNpbXBsZV90aHJvd19jYXRjaF90b18wXzEoMCkp
OworICBhc3NlcnRFcXVhbHMoNDIsIGluc3RhbmNlLmV4cG9ydHMuc2ltcGxlX3Rocm93X2NhdGNo
X3RvXzBfMSgxKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdFRyYXBOb3RDYXVnaHQoKSB7Cisg
IGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGJ1aWxkZXIuYWRkRnVu
Y3Rpb24oJ3VucmVhY2hhYmxlX2luX3RyeScsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWwor
ICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUs
CisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBv
cnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBh
c3NlcnRUcmFwcyhrVHJhcFVucmVhY2hhYmxlLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnVucmVh
Y2hhYmxlX2luX3RyeSgpKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0VHJhcEluQ2FsbGVlTm90
Q2F1Z2h0KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBs
ZXQgZnVuY19kaXYgPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCdkaXYnLCBrU2lnX2lfaWkpLmFkZEJv
ZHkoWworICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICBr
RXhwckkzMkRpdlUKKyAgXSk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3RyYXBfaW5fY2FsbGVl
Jywga1NpZ19pX2lpKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21J
MzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0
LCAxLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBmdW5jX2Rpdi5pbmRleCwKKyAgICAg
ICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxMSwKKyAgICAgICAg
a0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRl
ci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygzLCBpbnN0YW5jZS5leHBvcnRzLnRy
YXBfaW5fY2FsbGVlKDcsIDIpKTsKKyAgYXNzZXJ0VHJhcHMoa1RyYXBEaXZCeVplcm8sICgpID0+
IGluc3RhbmNlLmV4cG9ydHMudHJhcF9pbl9jYWxsZWUoMSwgMCkpOworfSkoKTsKKworKGZ1bmN0
aW9uIFRlc3RUcmFwVmlhSlNOb3RDYXVnaHQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21N
b2R1bGVCdWlsZGVyKCk7CisgIGxldCBpbXAgPSBidWlsZGVyLmFkZEltcG9ydCgnaW1wJywgJ29y
dCcsIGtTaWdfaV92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbignZGl2Jywga1NpZ19pX2lpKQor
ICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhw
ckxvY2FsR2V0LCAxLAorICAgICAgICBrRXhwckkzMkRpdlUKKyAgICAgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbignY2FsbF9pbXBvcnQnLCBrU2lnX2lfdikKKyAgICAg
IC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHBy
Q2FsbEZ1bmN0aW9uLCBpbXAsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4
cHJJMzJDb25zdCwgMTEsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7
CisgIGxldCBleGNlcHRpb24gPSB1bmRlZmluZWQ7CisgIGxldCBpbnN0YW5jZTsKKyAgZnVuY3Rp
b24ganNfaW1wb3J0KCkgeworICAgIHRyeSB7CisgICAgICBpbnN0YW5jZS5leHBvcnRzLmRpdigx
LCAwKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBleGNlcHRpb24gPSBlOworICAgIH0KKyAg
ICB0aHJvdyBleGNlcHRpb247CisgIH0KKyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRl
KHtpbXA6IHtvcnQ6IGpzX2ltcG9ydH19KTsKKworICBsZXQgY2F1Z2h0ID0gdW5kZWZpbmVkOwor
ICB0cnkgeworICAgIGxldCByZXMgPSBpbnN0YW5jZS5leHBvcnRzLmNhbGxfaW1wb3J0KCk7Cisg
ICAgYXNzZXJ0VW5yZWFjaGFibGUoJ2NhbGxfaW1wb3J0IHNob3VsZCB0cmFwLCBidXQgcmV0dXJu
ZWQgd2l0aCAnICsgcmVzKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGNhdWdodCA9IGU7CisgIH0K
KyAgYXNzZXJ0U2FtZShleGNlcHRpb24sIGNhdWdodCk7CisgIGFzc2VydFRocm93cyhpbnN0YW5j
ZS5leHBvcnRzLmNhbGxfaW1wb3J0LCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsIGtUcmFwTXNn
c1trVHJhcERpdkJ5WmVyb10pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RNYW51YWxseVRocm93
blJ1bnRpbWVFcnJvckNhdWdodCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IGltcCA9IGJ1aWxkZXIuYWRkSW1wb3J0KCdpbXAnLCAnb3J0Jywga1Np
Z19pX3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCdjYWxsX2ltcG9ydCcsIGtTaWdfaV92KQor
ICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAg
a0V4cHJDYWxsRnVuY3Rpb24sIGltcCwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAg
ICBrRXhwckkzMkNvbnN0LCAxMSwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1
bmMoKTsKKyAgZnVuY3Rpb24gdGhyb3dfZXhjKCkgeworICAgIHRocm93IG5ldyBXZWJBc3NlbWJs
eS5SdW50aW1lRXJyb3IoJ015IHVzZXIgdGV4dCcpOworICB9CisgIGxldCBpbnN0YW5jZSA9IGJ1
aWxkZXIuaW5zdGFudGlhdGUoe2ltcDoge29ydDogdGhyb3dfZXhjfX0pOworCisgIGFzc2VydEVx
dWFscygxMSwgaW5zdGFuY2UuZXhwb3J0cy5jYWxsX2ltcG9ydCgpKTsKK30pKCk7CisKKyhmdW5j
dGlvbiBUZXN0RXhuV2l0aFdhc21Qcm90b05vdENhdWdodCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBu
ZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtT
aWdfdl92KTsKKyAgbGV0IGltcCA9IGJ1aWxkZXIuYWRkSW1wb3J0KCdpbXAnLCAnb3J0Jywga1Np
Z192X3YpOworICBsZXQgdGhyb3dfZm4gPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvdycsIGtT
aWdfdl92KQorICAgICAgICAgICAgICAgICAgICAgLmFkZEJvZHkoW2tFeHByVGhyb3csIGV4Y2Vw
dF0pCisgICAgICAgICAgICAgICAgICAgICAuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEZ1
bmN0aW9uKCd0ZXN0Jywga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIC8vIENh
bGxpbmcgInRocm93IiBkaXJlY3RseSBzaG91bGQgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgZXhjZXB0
aW9uLgorICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByQ2FsbEZ1
bmN0aW9uLCB0aHJvd19mbi5pbmRleCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAg
ICAgICBrRXhwckVuZCwKKyAgICAgICAgLy8gQ2FsbGluZyB0aHJvdWdoIEpTIHByb2R1Y2VzIGEg
d3JhcHBlZCBleGNlcHRpb25zIHdoaWNoIGRvZXMgbm90IG1hdGNoCisgICAgICAgIC8vIHRoZSBj
YXRjaC4KKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxG
dW5jdGlvbiwgaW1wLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHBy
RW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZTsKKyAgbGV0IHdyYXBw
ZWRfZXhuOworICBmdW5jdGlvbiBqc19pbXBvcnQoKSB7CisgICAgdHJ5IHsKKyAgICAgIGluc3Rh
bmNlLmV4cG9ydHMudGhyb3coKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICB3cmFwcGVkX2V4
biA9IG5ldyBFcnJvcigpOworICAgICAgd3JhcHBlZF9leG4uX19wcm90b19fID0gZTsKKyAgICAg
IHRocm93IHdyYXBwZWRfZXhuOworICAgIH0KKyAgfQorICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5z
dGFudGlhdGUoe2ltcDoge29ydDoganNfaW1wb3J0fX0pOworICBsZXQgY2F1Z2h0ID0gdW5kZWZp
bmVkOworICB0cnkgeworICAgIGluc3RhbmNlLmV4cG9ydHMudGVzdCgpOworICB9IGNhdGNoIChl
KSB7CisgICAgY2F1Z2h0ID0gZTsKKyAgfQorICBhc3NlcnRUcnVlKCEhY2F1Z2h0LCAnc2hvdWxk
IGhhdmUgdHJhcHBlZCcpOworICBhc3NlcnRFcXVhbHMoY2F1Z2h0LCB3cmFwcGVkX2V4bik7Cisg
IGFzc2VydEluc3RhbmNlb2YoY2F1Z2h0Ll9fcHJvdG9fXywgV2ViQXNzZW1ibHkuRXhjZXB0aW9u
KTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0U3RhY2tPdmVyZmxvd05vdENhdWdodCgpIHsKKyAg
ZnVuY3Rpb24gc3RhY2tfb3ZlcmZsb3coKSB7CisgICAgLy8lVGhyb3dTdGFja092ZXJmbG93KCk7
CisgIH0KKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IHNp
Z192X3YgPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X3YpOworICBsZXQga1N0YWNrT3ZlcmZsb3cg
PSBidWlsZGVyLmFkZEltcG9ydCgnJywgJ3N0YWNrX292ZXJmbG93Jywgc2lnX3Zfdik7CisgIGJ1
aWxkZXIuYWRkRnVuY3Rpb24oJ3RyeV9zdGFja19vdmVyZmxvdycsIGtTaWdfdl92KQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHBy
Q2FsbEZ1bmN0aW9uLCAwLAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICBrRXhwckVu
ZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3Rh
bnRpYXRlKHsnJzogeydzdGFja19vdmVyZmxvdyc6IHN0YWNrX292ZXJmbG93fX0pOworCisgIGFz
c2VydFRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRyeV9zdGFja19vdmVyZmxvdygpLAor
ICAgICAgUmFuZ2VFcnJvciwgJ01heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkJyk7Cit9
KTsKKy8vIEZJWE1FOiBuZWVkcyBzdGFjayBvdmVyZmxvdyBoZWxwZXIKKy8vKCk7CisKKy8vIFRl
c3QgdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggd2hpY2ggZXhjZXB0aW9uIHdhcyB0aHJvd24gYnkg
dXNpbmcgYSBjYXNjYWRlZAorLy8gc2VxdWVuY2Ugb2YgbmVzdGVkIHRyeSBibG9ja3Mgd2l0aCBh
IHNpbmdsZSBjYXRjaCBibG9jayBlYWNoLgorKGZ1bmN0aW9uIFRlc3RDYXRjaENvbXBsZXgxKCkg
eworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0
MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFk
ZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQzID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3Yp
OworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaF9jb21wbGV4Iiwga1NpZ19pX2kpCisgICAg
ICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhw
clRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAg
ICAga0V4cHJJMzJFcXosCisgICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAg
ICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDEsCisgICAgICAgICAgICBrRXhwckVsc2UsCisgICAg
ICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICAgIGtFeHBySTMyQ29uc3Qs
IDEsCisgICAgICAgICAgICAgIGtFeHBySTMyRXEsCisgICAgICAgICAgICAgIGtFeHBySWYsIGtX
YXNtVm9pZCwKKyAgICAgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQyLAorICAgICAgICAg
ICAgICBrRXhwckVsc2UsCisgICAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MywKKyAg
ICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAg
IGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAgICAg
ICAgICAgIGtFeHBySTMyQ29uc3QsIDMsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtF
eHByQ2F0Y2gsIGV4Y2VwdDIsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgNCwKKyAgICAgICAg
a0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZL
aW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Myk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxk
ZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMywgaW5zdGFuY2UuZXhwb3J0cy5j
YXRjaF9jb21wbGV4KDApKTsKKyAgYXNzZXJ0RXF1YWxzKDQsIGluc3RhbmNlLmV4cG9ydHMuY2F0
Y2hfY29tcGxleCgxKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4
cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmNhdGNoX2NvbXBsZXgoMikpOwor
fSkoKTsKKworLy8gVGVzdCB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB3aGljaCBleGNlcHRpb24g
d2FzIHRocm93biBieSB1c2luZyBhIHNpbmdsZQorLy8gdHJ5IGJsb2NrIHdpdGggbXVsdGlwbGUg
YXNzb2NpYXRlZCBjYXRjaCBibG9ja3MgaW4gc2VxdWVuY2UuCisoZnVuY3Rpb24gVGVzdENhdGNo
Q29tcGxleDIoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7Cisg
IGxldCBleGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9
IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDMgPSBidWlsZGVyLmFkZFRh
ZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoX2NvbXBsZXgiLCBrU2ln
X2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAg
ICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJJMzJFcXosCisgICAgICAg
ICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MSwK
KyAgICAgICAgICBrRXhwckVsc2UsCisgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICAgIGtFeHBySTMyRXEsCisgICAg
ICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgIGtFeHByVGhyb3csIGV4
Y2VwdDIsCisgICAgICAgICAgICBrRXhwckVsc2UsCisgICAgICAgICAgICAgIGtFeHByVGhyb3cs
IGV4Y2VwdDMsCisgICAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICBrRXhwckVuZCwKKyAg
ICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQxLAor
ICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDMsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDIs
CisgICAgICAgICAga0V4cHJJMzJDb25zdCwgNCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBd
KS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5h
bFRhZywgZXhjZXB0Myk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsK
KworICBhc3NlcnRFcXVhbHMoMywgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9jb21wbGV4KDApKTsK
KyAgYXNzZXJ0RXF1YWxzKDQsIGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hfY29tcGxleCgxKSk7Cisg
IGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9
PiBpbnN0YW5jZS5leHBvcnRzLmNhdGNoX2NvbXBsZXgoMikpOworfSkoKTsKKworLy8gVGVzdCB0
aHJvd2luZyBhbiBleGNlcHRpb24gd2l0aCBtdWx0aXBsZSB2YWx1ZXMuCisoZnVuY3Rpb24gVGVz
dFRocm93TXVsdGlwbGVWYWx1ZXMoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfaWkpOworICBi
dWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd18xXzIiLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5
KFsKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMiwK
KyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBi
dWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxl
dCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dz
KGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbMSwgMl0sICgpID0+IGluc3RhbmNlLmV4
cG9ydHMudGhyb3dfMV8yKCkpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2luZy9jYXRjaGluZyB0
aGUgaTMyIHBhcmFtZXRlciB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFBhcmFtSSgp
IHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2Vw
dCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9pKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhy
b3dfY2F0Y2hfcGFyYW0iLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4
cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAg
a0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAg
IGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclJldHVybiwKKyAgICAgICAga0V4
cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIu
aW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMCwgaW5zdGFuY2UuZXhwb3J0cy50aHJv
d19jYXRjaF9wYXJhbSgwKSk7CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRo
cm93X2NhdGNoX3BhcmFtKDEpKTsKKyAgYXNzZXJ0RXF1YWxzKDEwLCBpbnN0YW5jZS5leHBvcnRz
LnRocm93X2NhdGNoX3BhcmFtKDEwKSk7Cit9KSgpOworCisvLyBUZXN0IHRoZSBlbmNvZGluZyBv
ZiBhIHRocm93biBleGNlcHRpb24gd2l0aCBhbiBpbnRlZ2VyIGV4Y2VwdGlvbi4KKyhmdW5jdGlv
biBUZXN0VGhyb3dQYXJhbUkoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWls
ZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfaSk7CisgIGJ1aWxk
ZXIuYWRkRnVuY3Rpb24oInRocm93X3BhcmFtIiwga1NpZ192X2kpCisgICAgICAuYWRkQm9keShb
CisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwK
KyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwg
a0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRp
YXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5l
eCwgWzVdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDUpKTsKKyAgYXNzZXJ0
V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzQyNDI0Ml0sICgpID0+
IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oNDI0MjQyKSk7Cit9KSgpOworCisvLyBUZXN0
IHRocm93aW5nL2NhdGNoaW5nIHRoZSBmMzIgcGFyYW1ldGVyIHZhbHVlLgorKGZ1bmN0aW9uIFRl
c3RUaHJvd0NhdGNoUGFyYW1GKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVp
bGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2YpOworICBidWls
ZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19jYXRjaF9wYXJhbSIsIGtTaWdfZl9mKQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21GMzIsCisgICAgICAgICAga0V4cHJMb2Nh
bEdldCwgMCwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJG
MzJDb25zdCwgMCwgMCwgMCwgMCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAg
ICAgIGtFeHByUmV0dXJuLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVx
dWFscyg1LjAsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oNS4wKSk7CisgIGFz
c2VydEVxdWFscygxMC41LCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDEwLjUp
KTsKK30pKCk7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3duIGV4Y2VwdGlvbiB3
aXRoIGEgZmxvYXQgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93UGFyYW1GKCkgeworICBsZXQg
YnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRl
ci5hZGRUYWcoa1NpZ192X2YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19wYXJhbSIs
IGtTaWdfdl9mKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAor
ICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1
aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0
IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3Mo
aW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFs1LjBdLCAoKSA9PiBpbnN0YW5jZS5leHBv
cnRzLnRocm93X3BhcmFtKDUuMCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0
YW5jZS5leHBvcnRzLmV4LCBbMTAuNV0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFy
YW0oMTAuNSkpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2luZy9jYXRjaGluZyBhbiBJNjQgdmFs
dWUKKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFBhcmFtTCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBu
ZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtT
aWdfdl9sKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfY2F0Y2hfcGFyYW0iLCBrU2ln
X2lfaSkKKyAgICAgIC5hZGRMb2NhbHMoa1dhc21JNjQsIDEpCisgICAgICAuYWRkQm9keShbCisg
ICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHBySTY0VUNvbnZlcnRJMzIsCisg
ICAgICAgIGtFeHByTG9jYWxTZXQsIDEsCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAg
ICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwK
KyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQs
CisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAgICBrRXhwckk2NEVxLAorICAg
ICAgICAgIGtFeHBySWYsIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwK
KyAgICAgICAgICBrRXhwckVsc2UsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAwLAorICAg
ICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVx
dWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDUpKTsKKyAgYXNzZXJ0
RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oMCkpOworICBhc3Nl
cnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgtMSkpOworfSko
KTsKKworLy8gVGVzdCB0aGUgZW5jb2Rpbmcgb2YgYSB0aHJvd24gZXhjZXB0aW9uIHdpdGggYW4g
STY0IHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd1BhcmFtTCgpIHsKKyAgbGV0IGJ1aWxkZXIg
PSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFn
KGtTaWdfdl9sKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfcGFyYW0iLCBrU2lnX3Zf
aWkpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAg
IGtFeHBySTY0VUNvbnZlcnRJMzIsCisgICAgICAgIGtFeHBySTY0Q29uc3QsIDMyLAorICAgICAg
ICBrRXhwckk2NFNobCwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAga0V4cHJJ
NjRVQ29udmVydEkzMiwKKyAgICAgICAga0V4cHJJNjRJb3IsCisgICAgICAgIGtFeHByVGhyb3cs
IGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktp
bmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVy
Lmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2Uu
ZXhwb3J0cy5leCwgWzQyOTQ5NjcyOTY1bl0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3df
cGFyYW0oMTAsIDUpKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhw
b3J0cy5leCwgWy00Mjk0OTY3Mjgzbl0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFy
YW0oLTEsIDEzKSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nL2NhdGNoaW5nIHRoZSBGNjQg
cGFyYW1ldGVyIHZhbHVlCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hQYXJhbUQoKSB7CisgIGxl
dCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWls
ZGVyLmFkZFRhZyhrU2lnX3ZfZCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X2NhdGNo
X3BhcmFtIiwga1NpZ19kX2QpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBr
V2FzbUY2NCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByVGhy
b3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckY2NENvbnN0LCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJSZXR1cm4s
CisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFu
Y2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDUuMCwgaW5zdGFu
Y2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSg1LjApKTsKKyAgYXNzZXJ0RXF1YWxzKDEwLjUs
IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oMTAuNSkpOworfSkoKTsKKworLy8g
VGVzdCB0aGUgZW5jb2Rpbmcgb2YgYSB0aHJvd24gZXhjZXB0aW9uIHdpdGggYW4gZjY0IHZhbHVl
LgorKGZ1bmN0aW9uIFRlc3RUaHJvd1BhcmFtRCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2Fz
bU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9k
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfcGFyYW0iLCBrU2lnX3ZfZikKKyAgICAg
IC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJGNjRD
b252ZXJ0RjMyLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRG
dW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhj
ZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2Vy
dFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFs1LjBdLCAoKSA9PiBp
bnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDUuMCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGlu
c3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbMTAwMDAwMDBdLCAoKSA9PiBpbnN0YW5jZS5l
eHBvcnRzLnRocm93X3BhcmFtKDEwMDAwMDAwLjUpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhlIGVu
Y29kaW5nIG9mIGEgY29tcHV0ZWQgcGFyYW1ldGVyIHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJv
d1BhcmFtQ29tcHV0ZWQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVy
KCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfaSk7CisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oInRocm93X2V4cHJfd2l0aF9wYXJhbXMiLCBrU2lnX3ZfZGRpKQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICAvLyBwMiAqIChwMCArIG1pbihwMCwgcDEpKXwwIC0gMjAKKyAg
ICAgICAga0V4cHJMb2NhbEdldCwgMiwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAg
ICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAg
a0V4cHJGNjRNaW4sCisgICAgICAgIGtFeHByRjY0QWRkLAorICAgICAgICBrRXhwckkzMlNDb252
ZXJ0RjY0LAorICAgICAgICBrRXhwckkzMk11bCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMjAs
CisgICAgICAgIGtFeHBySTMyU3ViLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAg
ICBdKS5leHBvcnRGdW5jKCkKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVy
bmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7
CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWy04
XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19leHByX3dpdGhfcGFyYW1zKDEuNSwgMi41
LCA0KSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgs
IFsxMl0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfZXhwcl93aXRoX3BhcmFtcyg1Ljcs
IDIuNSwgNCkpOworfSkoKTsKKworLy8gTm93IHRoYXQgd2Uga25vdyBjYXRjaGluZyB3b3JrcyBs
b2NhbGx5LCB3ZSB0ZXN0IGNhdGNoaW5nIGV4Y2VwdGlvbnMgdGhhdAorLy8gY3Jvc3MgZnVuY3Rp
b24gYm91bmRhcmllcyBhbmQvb3IgcmFpc2VkIGJ5IEphdmFTY3JpcHQuCisoZnVuY3Rpb24gVGVz
dENhdGNoQ3Jvc3NGdW5jdGlvbnMoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfaSk7CisKKyAg
Ly8gSGVscGVyIGZ1bmN0aW9uIGZvciB0aHJvd2luZyBmcm9tIEpTLiBJdCBpcyBpbXBvcnRlZCBi
eSB0aGUgV2FzbSBtb2R1bGUKKyAgLy8gYXMgdGhyb3dfaS4KKyAgZnVuY3Rpb24gdGhyb3dfdmFs
dWUodmFsdWUpIHsKKyAgICB0aHJvdyB2YWx1ZTsKKyAgfQorICBsZXQgc2lnX2luZGV4ID0gYnVp
bGRlci5hZGRUeXBlKGtTaWdfdl9pKTsKKyAgbGV0IGtKU1Rocm93SSA9IGJ1aWxkZXIuYWRkSW1w
b3J0KCIiLCAidGhyb3dfaSIsIHNpZ19pbmRleCk7CisKKyAgLy8gSGVscGVyIGZ1bmN0aW9uIHRo
YXQgdGhyb3dzIGEgc3RyaW5nLiBXYXNtIHNob3VsZCBub3QgY2F0Y2ggaXQuCisgIGZ1bmN0aW9u
IHRocm93X3N0cmluZygpIHsKKyAgICB0aHJvdyAidXNlIHdhc20iOworICB9CisgIHNpZ19pbmRl
eCA9IGJ1aWxkZXIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBrSlNUaHJvd1N0cmluZyA9IGJ1
aWxkZXIuYWRkSW1wb3J0KCIiLCAidGhyb3dfc3RyaW5nIiwgc2lnX2luZGV4KTsKKworICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdGhhdCB0aHJvd3MgdW5kZWZpbmVkLiBXYXNtIHNob3VsZCBub3QgY2F0
Y2ggaXQuCisgIGZ1bmN0aW9uIHRocm93X3VuZGVmaW5lZCgpIHsKKyAgICB0aHJvdyB1bmRlZmlu
ZWQ7CisgIH0KKyAgbGV0IGtKU1Rocm93VW5kZWZpbmVkID0gYnVpbGRlci5hZGRJbXBvcnQoIiIs
ICJ0aHJvd191bmRlZmluZWQiLCBzaWdfaW5kZXgpOworCisgIC8vIEhlbHBlciBmdW5jdGlvbiB0
aGF0IHRocm93cyBhbiBmcC4gV2FzbSBzaG91bGQgbm90IGNhdGNoIGl0LgorICBmdW5jdGlvbiB0
aHJvd19mcCgpIHsKKyAgICB0aHJvdyAxMC41OworICB9CisgIGxldCBrSlNUaHJvd0ZQID0gYnVp
bGRlci5hZGRJbXBvcnQoIiIsICJ0aHJvd19mcCIsIHNpZ19pbmRleCk7CisKKyAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRoYXQgdGhyb3dzIGEgbGFyZ2UgbnVtYmVyLiBXYXNtIHNob3VsZCBub3QgY2F0
Y2ggaXQuCisgIGZ1bmN0aW9uIHRocm93X2xhcmdlKCkgeworICAgIHRocm93IDFlKzI4OworICB9
CisgIGxldCBrSlNUaHJvd0xhcmdlID0gYnVpbGRlci5hZGRJbXBvcnQoIiIsICJ0aHJvd19sYXJn
ZSIsIHNpZ19pbmRleCk7CisKKyAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0aHJvd2luZyBmcm9t
IFdlYkFzc2VtYmx5LgorICBsZXQga1dhc21UaHJvd0Z1bmN0aW9uID0KKyAgICBidWlsZGVyLmFk
ZEZ1bmN0aW9uKCJ0aHJvdyIsIGtTaWdfdl9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBr
RXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKQor
ICAgICAgLmluZGV4OworCisgIC8vIFNjZW5hcmlvIDE6IFRocm93IGFuZCBjYXRjaCBhcHBlYXIg
b24gdGhlIHNhbWUgZnVuY3Rpb24uIFRoaXMgc2hvdWxkCisgIC8vIGhhcHBlbiBpbiBjYXNlIG9m
IGlubGluaW5nLCBmb3IgZXhhbXBsZS4KKyAgYnVpbGRlci5hZGRGdW5jdGlvbigic2FtZV9zY29w
ZSIsIGtTaWdfaV9pKQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwK
KyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMCwKKyAg
ICAgICAga0V4cHJJMzJOZSwKKyAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAg
IGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAg
ICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckkz
MkNvbnN0LCA2MywKKyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgIGtFeHByRW5kCisg
ICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInNhbWVf
c2NvcGVfaWdub3JlIiwga1NpZ19pX2kpCisgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRy
eSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhw
clRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAga0V4
cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwckVuZCwKKyAgICBdKQorICAgIC5leHBvcnRG
dW5jKCk7CisKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigic2FtZV9zY29wZV9tdWx0aXBsZSIsIGtT
aWdfaV9pKQorICAgIC8vIHBhdGggPSAwOworICAgIC8vCisgICAgLy8gdHJ5IHsKKyAgICAvLyAg
IHRyeSB7CisgICAgLy8gICAgIHRyeSB7CisgICAgLy8gICAgICAgaWYgKHAgPT0gMSkKKyAgICAv
LyAgICAgICAgIHRocm93IDE7CisgICAgLy8gICAgICAgcGF0aCB8PSAyCisgICAgLy8gICAgIH0g
Y2F0Y2ggKHYpIHsKKyAgICAvLyAgICAgICBwYXRoIHw9IHYgfCA0OworICAgIC8vICAgICAgIHRo
cm93IHBhdGg7CisgICAgLy8gICAgIH0KKyAgICAvLyAgICAgaWYgKHAgPT0gMikKKyAgICAvLyAg
ICAgICB0aHJvdyBwYXRofDg7CisgICAgLy8gICAgIHBhdGggfD0gMTY7CisgICAgLy8gICB9IGNh
dGNoICh2KSB7CisgICAgLy8gICAgIHBhdGggfD0gdiB8IDMyOworICAgIC8vICAgICB0aHJvdyBw
YXRoOworICAgIC8vICAgfQorICAgIC8vICAgaWYgKHAgPT0gMykKKyAgICAvLyAgICAgdGhyb3cg
cGF0aHw2NDsKKyAgICAvLyAgIHBhdGggfD0gMTI4CisgICAgLy8gfSBjYXRjaCAodikgeworICAg
IC8vICAgcGF0aCB8PSB2IHwgMjU2OworICAgIC8vIH0KKyAgICAvLworICAgIC8vIHJldHVybiBw
YXRoOworICAgIC8vCisgICAgLy8gcCA9PSAxIC0+IHBhdGggPT0gMjkzCisgICAgLy8gcCA9PSAy
IC0+IHBhdGggPT0gMjk4CisgICAgLy8gcCA9PSAzIC0+IHBhdGggPT0gMzM4CisgICAgLy8gZWxz
ZSAgIC0+IHBhdGggPT0gMTQ2CisgICAgLmFkZExvY2FscyhrV2FzbUkzMiwgMSkKKyAgICAuYWRk
Qm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRyeSwg
a1dhc21JMzIsCisgICAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICAg
IGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAg
ICAgICAgICAgIGtFeHBySTMyRXEsCisgICAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwK
KyAgICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgICAgICAgIGtFeHBy
VGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAg
ICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAg
ICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwg
NCwKKyAgICAgICAgICAgICAga0V4cHJJMzJJb3IsCisgICAgICAgICAgICAgIGtFeHByVGhyb3cs
IGV4Y2VwdCwKKyAgICAgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAgICAgIGtF
eHByRW5kLAorICAgICAgICAgICAga0V4cHJMb2NhbFRlZSwgMSwKKyAgICAgICAgICAgIGtFeHBy
TG9jYWxHZXQsIDAsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICAgICAg
a0V4cHJJMzJFcSwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAg
ICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgOCwKKyAg
ICAgICAgICAgICAga0V4cHJJMzJJb3IsCisgICAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2Vw
dCwKKyAgICAgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAgICAgIGtFeHByRW5k
LAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMTYsCisgICAgICAgICAgICBrRXhwckkzMklv
ciwKKyAgICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAgICBrRXhwckkzMkNv
bnN0LCAzMiwKKyAgICAgICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICAgICAga0V4cHJUaHJv
dywgZXhjZXB0LAorICAgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAgICBrRXhw
ckVuZCwKKyAgICAgICAgICBrRXhwckxvY2FsVGVlLCAxLAorICAgICAgICAgIGtFeHByTG9jYWxH
ZXQsIDAsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMywKKyAgICAgICAgICBrRXhwckkzMkVx
LAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByTG9jYWxH
ZXQsIDEsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAvKjY0PSovIDE5MiwgMCwKKyAgICAg
ICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAg
ICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAg
ICBrRXhwckkzMkNvbnN0LCAvKjEyOD0qLyAxMjgsIDEsCisgICAgICAgICAga0V4cHJJMzJJb3Is
CisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAv
KjI1Nj0qLyAxMjgsIDIsCisgICAgICAgICAga0V4cHJJMzJJb3IsCisgICAgICAgIGtFeHByRW5k
LAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICAvLyBTY2VuYXJpbyAyOiBDYXRjaGVz
IGFuIGV4Y2VwdGlvbiByYWlzZWQgZnJvbSB0aGUgZGlyZWN0IGNhbGxlZS4KKyAgYnVpbGRlci5h
ZGRGdW5jdGlvbigiZnJvbV9kaXJlY3RfY2FsbGVlIiwga1NpZ19pX2kpCisgICAgLmFkZEJvZHko
WworICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAor
ICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwga1dhc21UaHJvd0Z1bmN0aW9uLAorICAgICAgICBr
RXhwclVucmVhY2hhYmxlLAorICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAga0V4cHJF
bmQsCisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIC8vIFNjZW5hcmlvIDM6IENhdGNo
ZXMgYW4gZXhjZXB0aW9uIHJhaXNlZCBmcm9tIGFuIGluZGlyZWN0IGNhbGxlZS4KKyAgbGV0IHNp
Z192X2kgPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X2kpOworICBidWlsZGVyLmFwcGVuZFRvVGFi
bGUoW2tXYXNtVGhyb3dGdW5jdGlvbiwga1dhc21UaHJvd0Z1bmN0aW9uXSk7CisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oImZyb21faW5kaXJlY3RfY2FsbGVlIiwga1NpZ19pX2lpKQorICAgIC5hZGRC
b2R5KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAga0V4cHJMb2NhbEdldCwg
MCwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAga0V4cHJDYWxsSW5kaXJlY3Qs
IHNpZ192X2ksIGtUYWJsZVplcm8sCisgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICBr
RXhwckNhdGNoLCBleGNlcHQsCisgICAgICBrRXhwckVuZAorICAgIF0pCisgICAgLmV4cG9ydEZ1
bmMoKTsKKworICAvLyBTY2VuYXJpbyA0OiBEb2VzIG5vdCBjYXRjaCBhbiBleGNlcHRpb24gcmFp
c2VkIGluIEpTLCBldmVuIGlmIHByaW1pdGl2ZQorICAvLyB2YWx1ZXMgYXJlIGJlaW5nIHVzZWQg
YXMgZXhjZXB0aW9ucy4KKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiaV9mcm9tX2pzIiwga1NpZ19p
X2kpCisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICBr
RXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwga0pTVGhyb3dJLAor
ICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAg
ICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAga0V4cHJFbmQsCisgICAgXSkKKyAgICAuZXhw
b3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInN0cmluZ19mcm9tX2pzIiwga1Np
Z192X3YpCisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAg
ICAga0V4cHJDYWxsRnVuY3Rpb24sIGtKU1Rocm93U3RyaW5nLAorICAgICAga0V4cHJDYXRjaCwg
ZXhjZXB0LAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAga0V4cHJFbmQsCisgICAg
XSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImZwX2Zyb21f
anMiLCBrU2lnX3ZfdikKKyAgICAuYWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21Wb2lk
LAorICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwga0pTVGhyb3dGUCwKKyAgICAgIGtFeHByQ2F0
Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByRW5kLAor
ICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJsYXJn
ZV9mcm9tX2pzIiwga1NpZ192X3YpCisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtX
YXNtVm9pZCwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtKU1Rocm93TGFyZ2UsCisgICAg
ICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICBr
RXhwckVuZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgYnVpbGRlci5hZGRGdW5j
dGlvbigidW5kZWZpbmVkX2Zyb21fanMiLCBrU2lnX3ZfdikKKyAgICAuYWRkQm9keShbCisgICAg
ICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwga0pTVGhy
b3dVbmRlZmluZWQsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByVW5y
ZWFjaGFibGUsCisgICAgICBrRXhwckVuZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisK
KyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IiI6IHsKKyAgICAgIHRocm93
X2k6IHRocm93X3ZhbHVlLAorICAgICAgdGhyb3dfc3RyaW5nOiB0aHJvd19zdHJpbmcsCisgICAg
ICB0aHJvd19mcDogdGhyb3dfZnAsCisgICAgICB0aHJvd19sYXJnZSwgdGhyb3dfbGFyZ2UsCisg
ICAgICB0aHJvd191bmRlZmluZWQ6IHRocm93X3VuZGVmaW5lZAorICB9fSk7CisKKyAgYXNzZXJ0
RXF1YWxzKDYzLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGUoMCkpOworICBhc3NlcnRFcXVh
bHMoMTAyNCwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlKDEwMjQpKTsKKyAgYXNzZXJ0RXF1
YWxzKC0zLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGUoLTMpKTsKKyAgYXNzZXJ0RXF1YWxz
KC0xLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfaWdub3JlKC0xKSk7CisgIGFzc2VydEVx
dWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfaWdub3JlKDEpKTsKKyAgYXNzZXJ0
RXF1YWxzKDB4N0ZGRkZGRkYsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZV9pZ25vcmUoMHg3
RkZGRkZGRikpOworICBhc3NlcnRFcXVhbHMoMTAyNCwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Nj
b3BlX2lnbm9yZSgxMDI0KSk7CisgIGFzc2VydEVxdWFscygtMSwgaW5zdGFuY2UuZXhwb3J0cy5z
YW1lX3Njb3BlX2lnbm9yZSgtMSkpOworICBhc3NlcnRFcXVhbHMoMjkzLCBpbnN0YW5jZS5leHBv
cnRzLnNhbWVfc2NvcGVfbXVsdGlwbGUoMSkpOworICBhc3NlcnRFcXVhbHMoMjk4LCBpbnN0YW5j
ZS5leHBvcnRzLnNhbWVfc2NvcGVfbXVsdGlwbGUoMikpOworICBhc3NlcnRFcXVhbHMoMzM4LCBp
bnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfbXVsdGlwbGUoMykpOworICBhc3NlcnRFcXVhbHMo
MTQ2LCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfbXVsdGlwbGUoMCkpOworICBhc3NlcnRF
cXVhbHMoLTEwMDI0LCBpbnN0YW5jZS5leHBvcnRzLmZyb21fZGlyZWN0X2NhbGxlZSgtMTAwMjQp
KTsKKyAgYXNzZXJ0RXF1YWxzKDMzMzQzMzMsIGluc3RhbmNlLmV4cG9ydHMuZnJvbV9kaXJlY3Rf
Y2FsbGVlKDMzMzQzMzMpKTsKKyAgYXNzZXJ0RXF1YWxzKC0xLCBpbnN0YW5jZS5leHBvcnRzLmZy
b21fZGlyZWN0X2NhbGxlZSgweEZGRkZGRkZGKSk7CisgIGFzc2VydEVxdWFscygweDdGRkZGRkZG
LCBpbnN0YW5jZS5leHBvcnRzLmZyb21fZGlyZWN0X2NhbGxlZSgweDdGRkZGRkZGKSk7CisgIGFz
c2VydEVxdWFscygxMCwgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2luZGlyZWN0X2NhbGxlZSgxMCwg
MCkpOworICBhc3NlcnRFcXVhbHMoNzcsIGluc3RhbmNlLmV4cG9ydHMuZnJvbV9pbmRpcmVjdF9j
YWxsZWUoNzcsIDEpKTsKKworICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UuZXhw
b3J0cy5pX2Zyb21fanMoMTApLCAxMCk7CisgIGFzc2VydFRocm93c0VxdWFscygoKSA9PiBpbnN0
YW5jZS5leHBvcnRzLmlfZnJvbV9qcygtMTApLCAtMTApOworICBhc3NlcnRUaHJvd3NFcXVhbHMo
aW5zdGFuY2UuZXhwb3J0cy5zdHJpbmdfZnJvbV9qcywgInVzZSB3YXNtIik7CisgIGFzc2VydFRo
cm93c0VxdWFscyhpbnN0YW5jZS5leHBvcnRzLmZwX2Zyb21fanMsIDEwLjUpOworICBhc3NlcnRU
aHJvd3NFcXVhbHMoaW5zdGFuY2UuZXhwb3J0cy5sYXJnZV9mcm9tX2pzLCAxZSsyOCk7CisgIGFz
c2VydFRocm93c0VxdWFscyhpbnN0YW5jZS5leHBvcnRzLnVuZGVmaW5lZF9mcm9tX2pzLCB1bmRl
ZmluZWQpOworfSkoKTsKKworLy8gRGVsZWdhdGUgd2l0aCBhIHRyeSBibG9jayB0aGF0IG5ldmVy
IHRocm93cy4KKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVOb1Rocm93KCkgeworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRk
VGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfaV92KQor
ICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAg
a0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAg
ICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQxLAorICAg
ICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhw
b3J0RnVuYygpOworICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0
RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGVzdCgpKTsKK30pKCk7CisKKy8vIERlbGVnYXRl
IGV4Y2VwdGlvbiBoYW5kbGluZyB0byBvdXRlciB0cnkvY2F0Y2ggYmxvY2suCisoZnVuY3Rpb24g
VGVzdERlbGVnYXRlVGhyb3coKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWls
ZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCB0
aHJvd19pZiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93Jywga1NpZ192X2kpCisgICAgICAu
YWRkQm9keShbCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwcklm
LCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAg
a0V4cHJFbmRdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBr
U2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAor
ICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQs
IDAsCisgICAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgdGhyb3dfaWYuaW5kZXgsCisgICAg
ICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDAsCisg
ICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAor
ICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBi
dWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRz
LnRlc3QoMCkpOworICBhc3NlcnRFcXVhbHMoMiwgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KDEpKTsK
K30pKCk7CisKKy8vIE5vIGNhdGNoIGJsb2NrIG1hdGNoaW5nIHRoZSBleGNlcHRpb24gaW4gdGhl
IGRlbGVnYXRlIHRhcmdldC4KKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVUaHJvd05vQ2F0Y2goKSB7
CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQx
ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIuYWRk
VGFnKGtTaWdfdl92KTsKKyAgbGV0IHRocm93X2ZuID0gYnVpbGRlci5hZGRGdW5jdGlvbigndGhy
b3cnLCBrU2lnX3ZfdikKKyAgICAgICAgICAgICAgICAgICAgIC5hZGRCb2R5KFtrRXhwclRocm93
LCBleGNlcHQxXSkKKyAgICAgICAgICAgICAgICAgICAgIC5leHBvcnRGdW5jKCk7CisgIGxldCB0
aHJvd19mbl8yID0gYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3dfMicsIGtTaWdfdl92KQorICAg
ICAgICAgICAgICAgICAgICAgLmFkZEJvZHkoW2tFeHByVGhyb3csIGV4Y2VwdDJdKQorICAgICAg
ICAgICAgICAgICAgICAgLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVz
dCcsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21J
MzIsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJDYWxs
RnVuY3Rpb24sIHRocm93X2ZuLmluZGV4LAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwK
KyAgICAgICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQy
LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByRW5kLAorICAgICAg
XSkuZXhwb3J0RnVuYygpOworICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAg
YXNzZXJ0VGhyb3dzKGluc3RhbmNlLmV4cG9ydHMudGVzdCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9u
KTsKK30pKCk7CisKKy8vIENoZWNrIHRoYXQgdGhlIGV4Y2VwdGlvbiBpcyBtZXJnZWQgcHJvcGVy
bHkgd2hlbiBib3RoIHNjb3BlcyBjYW4gdGhyb3cuCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlTWVy
Z2UoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBl
eGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgLy8gdGhyb3dfZm46IDAgLT4gcmV0dXJucworICAvLyAg
ICAgICAgICAgMSAtPiB0aHJvdyBleGNlcHQxCisgIC8vICAgICAgICAgICAyIC0+IHRocm93IGV4
Y2VwdDIKKyAgbGV0IHRocm93X2ZuID0gYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3cnLCBrU2ln
X3ZfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAgICBrRXhwckJsb2NrLCBrV2FzbVZvaWQs
CisgICAgICAgICAgICBrRXhwckJsb2NrLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgIGtFeHBy
QmxvY2ssIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAg
ICAgICAgICAgICAgIGtFeHByQnJUYWJsZSwgMiwgMCwgMSwgMiwKKyAgICAgICAgICAgICAga0V4
cHJFbmQsCisgICAgICAgICAgICAgIGtFeHByUmV0dXJuLAorICAgICAgICAgICAga0V4cHJFbmQs
CisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQxLAorICAgICAgICAgIGtFeHByRW5kLAor
ICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDJdKQorICAgICAgLmV4cG9ydEZ1bmMoKTsKKyAg
YnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfaV9paSkKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAs
CisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIHRocm93X2ZuLmluZGV4LAorICAgICAgICAg
IGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAg
ICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgdGhyb3dfZm4uaW5kZXgsCisgICAgICAgICAgICBr
RXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDAsCisgICAgICAgIGtF
eHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAg
a0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGluc3RhbmNlID0gYnVpbGRlci5p
bnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMoMiwgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KDEs
IDApKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMudGVzdCgyLCAwKSwg
V2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3RhbmNlLmV4cG9y
dHMudGVzdCgwLCAxKSk7CisgIGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRl
c3QoMCwgMiksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFzc2VydEVxdWFscygxLCBpbnN0
YW5jZS5leHBvcnRzLnRlc3QoMCwgMCkpOworfSkoKTsKKworLy8gRGVsZWdhdGUgdG8gc2Vjb25k
IGVuY2xvc2luZyB0cnkgc2NvcGUuCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlMSgpIHsKKyAgbGV0
IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IHRocm93X2ZuID0gYnVpbGRlci5hZGRGdW5jdGlv
bigndGhyb3cnLCBrU2lnX3ZfdikKKyAgICAgICAgICAgICAgICAgICAgIC5hZGRCb2R5KFtrRXhw
clRocm93LCBleGNlcHRdKQorICAgICAgICAgICAgICAgICAgICAgLmV4cG9ydEZ1bmMoKTsKKyAg
YnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWwor
ICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMy
LAorICAgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAgICBrRXhwckNh
bGxGdW5jdGlvbiwgdGhyb3dfZm4uaW5kZXgsCisgICAgICAgICAgICAgIGtFeHBySTMyQ29uc3Qs
IDEsCisgICAgICAgICAgICBrRXhwckRlbGVnYXRlLCAxLAorICAgICAgICAgIGtFeHByQ2F0Y2gs
IGV4Y2VwdCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgICAga0V4cHJF
bmQsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0
LCAzLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFu
Y2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscygzLCBpbnN0YW5jZS5l
eHBvcnRzLnRlc3QoKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlVW5yZWFjaGFi
bGUoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBl
eGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdf
aV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAg
ICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2Vw
dDEsCisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0
LCAxLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQxLAorICAgICAgICAgIGtFeHBySTMyQ29u
c3QsIDIsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDIsCisgICAgICAgICAga0V4cHJJMzJD
b25zdCwgMywKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGlu
c3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMoMiwgaW5zdGFu
Y2UuZXhwb3J0cy50ZXN0KCkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZVRvQ2Fs
bGVyKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQg
ZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9u
KCd0ZXN0Jywga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBr
V2FzbVZvaWQsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtF
eHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckRlbGVnYXRlLCAxLAorICAgICAgICBr
RXhwckNhdGNoQWxsLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOwor
ICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+
IGluc3RhbmNlLmV4cG9ydHMudGVzdCgpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfSkoKTsK
KworKGZ1bmN0aW9uIFRlc3RUaHJvd0JlZm9yZVVucmVhY2hhYmxlKCkgeworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRU
YWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvd19iZWZvcmVfdW5yZWFj
aGFibGUnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtX
YXNtSTMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclVu
cmVhY2hhYmxlLAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICAgIGtFeHBySTMyQ29u
c3QsIDQyLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKworICBs
ZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscyg0Miwg
aW5zdGFuY2UuZXhwb3J0cy50aHJvd19iZWZvcmVfdW5yZWFjaGFibGUoKSk7Cit9KSgpOworCiso
ZnVuY3Rpb24gVGVzdFVucmVhY2hhYmxlSW5DYXRjaEFsbCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBu
ZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtT
aWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3dfYmVmb3JlX3VucmVhY2hhYmxl
Jywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkz
MiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2hBbGws
CisgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCA0
MiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisKKyAgbGV0IGlu
c3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RU
aHJvd1dpdGhMb2NhbCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIo
KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5h
ZGRGdW5jdGlvbigndGhyb3dfd2l0aF9sb2NhbCcsIGtTaWdfaV92KQorICAgIC5hZGRMb2NhbHMo
a1dhc21JMzIsIDQpCisgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckkzMkNvbnN0LCA0MiwK
KyAgICAgICAga0V4cHJGNjRDb25zdCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAg
a0V4cHJUcnksIGtXYXNtRjMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAg
ICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBrRXhwckYzMkNvbnN0LCAwLCAwLCAwLCAwLAor
ICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJEcm9wLCAgLy8gRHJvcCB0aGUgZjMyLgor
ICAgICAgICBrRXhwckRyb3AsICAvLyBEcm9wIHRoZSBmNjQuCisgICAgICAgIC8vIExlYXZlIHRo
ZSAnNDInIG9uIHRoZSBzdGFjay4KKyAgICBdKS5leHBvcnRGdW5jKCk7CisKKyAgbGV0IGluc3Rh
bmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMoNDIsIGluc3RhbmNl
LmV4cG9ydHMudGhyb3dfd2l0aF9sb2NhbCgpKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0Q2F0
Y2hsZXNzVHJ5KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOwor
ICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1
bmN0aW9uKCdjYXRjaGxlc3NfdHJ5Jywga1NpZ192X2kpCisgICAgLmFkZEJvZHkoWworICAgICAg
ICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAg
ICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0
LAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckVuZCwKKyAgICBdKS5leHBvcnRG
dW5jKCk7CisKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBl
eGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2Vy
dERvZXNOb3RUaHJvdygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmNhdGNobGVzc190cnkoMCkpOwor
ICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkg
PT4gaW5zdGFuY2UuZXhwb3J0cy5jYXRjaGxlc3NfdHJ5KDEpKTsKK30pKCk7CisKKy8vIERlbGVn
YXRlIHRvIGEgcmVndWxhciBibG9jayBpbnNpZGUgYSB0cnkgYmxvY2suCisoZnVuY3Rpb24gVGVz
dERlbGVnYXRlVG9CbG9jaygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRl
ci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAg
ICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJCbG9jaywga1dhc21JMzIsCisg
ICAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICAgIGtFeHByVGhyb3cs
IGV4Y2VwdCwKKyAgICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDAsCisgICAgICAgICAga0V4cHJF
bmQsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0
LCAyLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgICBhc3Nl
cnRUaHJvd3MoKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSgpLCBFcnJvciwgL2RlbGVnYXRlIHRh
cmdldCBpc24ndCBhIHRyeSBibG9jay8pOworfSkoKTsKKworLy8gRGVsZWdhdGUgdG8gYSByZWd1
bGFyIGJsb2NrIHdpdGggbm8gb3V0ZXIgdHJ5IChkZWxlZ2F0ZSB0byBjYWxsZXIpLgorKGZ1bmN0
aW9uIFRlc3REZWxlZ2F0ZVRvQ2FsbGVyV2l0aEJsb2NrKCkgeworICBsZXQgYnVpbGRlciA9IG5l
dyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ192X3YpCisgICAgICAu
YWRkQm9keShbCisgICAgICAgIGtFeHByQmxvY2ssIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhw
clRyeSwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAg
ICAgIGtFeHByRGVsZWdhdGUsIDAsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRG
dW5jKCk7CisgIGFzc2VydFRocm93cygoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKCksIEVycm9y
LCAvZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5IGJsb2NrLyk7Cit9KSgpOwpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy93YXNtL3Y4L21qc3VuaXQuanMgYi9KU1Rlc3RzL3dhc20vdjgvbWpzdW5pdC5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQyNDU1YmFhNjE2OQot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9tanN1bml0LmpzCkBAIC0wLDAgKzEs
ODI2IEBACisvLyBDb3B5cmlnaHQgMjAwOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6Cisv
LworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisv
LyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8v
ICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Z1bmN0aW9uIE1qc1VuaXRBc3Nl
cnRpb25FcnJvcihtZXNzYWdlKSB7CisgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CisgIC8vIFRl
bXBvcmFyaWx5IGluc3RhbGwgYSBjdXN0b20gc3RhY2sgdHJhY2UgZm9ybWF0dGVyIGFuZCByZXN0
b3JlIHRoZQorICAvLyBwcmV2aW91cyB2YWx1ZS4KKyAgbGV0IHByZXZQcmVwYXJlU3RhY2tUcmFj
ZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOworICB0cnkgeworICAgIEVycm9yLnByZXBhcmVT
dGFja1RyYWNlID0gTWpzVW5pdEFzc2VydGlvbkVycm9yLnByZXBhcmVTdGFja1RyYWNlOworICAg
IC8vIFRoaXMgYWxsb3dzIGZldGNoaW5nIHRoZSBzdGFjayB0cmFjZSB1c2luZyBUcnlDYXRjaDo6
U3RhY2tUcmFjZS4KKyAgICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKCJNanNVbml0QXNzZXJ0aW9u
RXJyb3IiKS5zdGFjazsKKyAgfSBmaW5hbGx5IHsKKyAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFj
ZSA9IHByZXZQcmVwYXJlU3RhY2tUcmFjZTsKKyAgfQorfQorCisvKgorICogVGhpcyBmaWxlIGlz
IGluY2x1ZGVkIGluIGFsbCBtaW5pIGpzdW5pdCB0ZXN0IGNhc2VzLiAgVGhlIHRlc3QKKyAqIGZy
YW1ld29yayBleHBlY3RzIGxpbmVzIHRoYXQgc2lnbmFsIGZhaWxlZCB0ZXN0cyB0byBzdGFydCB3
aXRoCisgKiB0aGUgZi13b3JkIGFuZCBpZ25vcmUgYWxsIG90aGVyIGxpbmVzLgorICovCisKK01q
c1VuaXRBc3NlcnRpb25FcnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7Cisg
IHJldHVybiB0aGlzLm1lc3NhZ2UgKyAiXG5cblN0YWNrOiAiICsgdGhpcy5zdGFjazsKK307CisK
KworLy8gRXhwZWN0ZWQgYW5kIGZvdW5kIHZhbHVlcyB0aGUgc2FtZSBvYmplY3RzLCBvciB0aGUg
c2FtZSBwcmltaXRpdmUKKy8vIHZhbHVlcy4KKy8vIEZvciBrbm93biBwcmltaXRpdmUgdmFsdWVz
LCBwbGVhc2UgdXNlIGFzc2VydEVxdWFscy4KK3ZhciBhc3NlcnRTYW1lOworCisvLyBJbnZlcnNl
IG9mIGFzc2VydFNhbWUuCit2YXIgYXNzZXJ0Tm90U2FtZTsKKworLy8gRXhwZWN0ZWQgYW5kIGZv
dW5kIHZhbHVlcyBhcmUgaWRlbnRpY2FsIHByaW1pdGl2ZSB2YWx1ZXMgb3IgZnVuY3Rpb25zCisv
LyBvciBzaW1pbGFybHkgc3RydWN0dXJlZCBvYmplY3RzIChjaGVja2luZyBpbnRlcm5hbCBwcm9w
ZXJ0aWVzCisvLyBvZiwgZS5nLiwgTnVtYmVyIGFuZCBEYXRlIG9iamVjdHMsIHRoZSBlbGVtZW50
cyBvZiBhcnJheXMKKy8vIGFuZCB0aGUgcHJvcGVydGllcyBvZiBub24tQXJyYXkgb2JqZWN0cyku
Cit2YXIgYXNzZXJ0RXF1YWxzOworCisvLyBEZWVwIGVxdWFsaXR5IHByZWRpY2F0ZSB1c2VkIGJ5
IGFzc2VydEVxdWFscy4KK3ZhciBkZWVwRXF1YWxzOworCisvLyBFeHBlY3RlZCBhbmQgZm91bmQg
dmFsdWVzIGFyZSBub3QgaWRlbnRpY2FsIHByaW1pdGl2ZSB2YWx1ZXMgb3IgZnVuY3Rpb25zCisv
LyBvciBzaW1pbGFybHkgc3RydWN0dXJlZCBvYmplY3RzIChjaGVja2luZyBpbnRlcm5hbCBwcm9w
ZXJ0aWVzCisvLyBvZiwgZS5nLiwgTnVtYmVyIGFuZCBEYXRlIG9iamVjdHMsIHRoZSBlbGVtZW50
cyBvZiBhcnJheXMKKy8vIGFuZCB0aGUgcHJvcGVydGllcyBvZiBub24tQXJyYXkgb2JqZWN0cyku
Cit2YXIgYXNzZXJ0Tm90RXF1YWxzOworCisvLyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGV4cGVj
dGVkIGFuZCBmb3VuZCB2YWx1ZSBpcyB3aXRoaW4gY2VydGFpbiB0b2xlcmFuY2UuCit2YXIgYXNz
ZXJ0RXF1YWxzRGVsdGE7CisKKy8vIFRoZSBmb3VuZCBvYmplY3QgaXMgYW4gQXJyYXkgd2l0aCB0
aGUgc2FtZSBsZW5ndGggYW5kIGVsZW1lbnRzCisvLyBhcyB0aGUgZXhwZWN0ZWQgb2JqZWN0LiBU
aGUgZXhwZWN0ZWQgb2JqZWN0IGRvZXNuJ3QgbmVlZCB0byBiZSBhbiBBcnJheSwKKy8vIGFzIGxv
bmcgYXMgaXQncyAiYXJyYXktaXNoIi4KK3ZhciBhc3NlcnRBcnJheUVxdWFsczsKKworLy8gVGhl
IGZvdW5kIG9iamVjdCBtdXN0IGhhdmUgdGhlIHNhbWUgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGFz
IHRoZQorLy8gZXhwZWN0ZWQgb2JqZWN0LiBUaGUgdHlwZSBvZiBvYmplY3QgaXNuJ3QgY2hlY2tl
ZC4KK3ZhciBhc3NlcnRQcm9wZXJ0aWVzRXF1YWw7CisKKy8vIEFzc2VydCB0aGF0IHRoZSBzdHJp
bmcgY29udmVyc2lvbiBvZiB0aGUgZm91bmQgdmFsdWUgaXMgZXF1YWwgdG8KKy8vIHRoZSBleHBl
Y3RlZCBzdHJpbmcuIE9ubHkga2VwdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHBsZWFz
ZQorLy8gY2hlY2sgdGhlIHJlYWwgc3RydWN0dXJlIG9mIHRoZSBmb3VuZCB2YWx1ZS4KK3ZhciBh
c3NlcnRUb1N0cmluZ0VxdWFsczsKKworLy8gQ2hlY2tzIHRoYXQgdGhlIGZvdW5kIHZhbHVlIGlz
IHRydWUuIFVzZSB3aXRoIGJvb2xlYW4gZXhwcmVzc2lvbnMKKy8vIGZvciB0ZXN0cyB0aGF0IGRv
ZXNuJ3QgaGF2ZSB0aGVpciBvd24gYXNzZXJ0WFhYIGZ1bmN0aW9uLgordmFyIGFzc2VydFRydWU7
CisKKy8vIENoZWNrcyB0aGF0IHRoZSBmb3VuZCB2YWx1ZSBpcyBmYWxzZS4KK3ZhciBhc3NlcnRG
YWxzZTsKKworLy8gQ2hlY2tzIHRoYXQgdGhlIGZvdW5kIHZhbHVlIGlzIG51bGwuIEtlcHQgZm9y
IGhpc3RvcmljYWwgY29tcGF0aWJpbGl0eSwKKy8vIHBsZWFzZSBqdXN0IHVzZSBhc3NlcnRFcXVh
bHMobnVsbCwgZXhwZWN0ZWQpLgordmFyIGFzc2VydE51bGw7CisKKy8vIENoZWNrcyB0aGF0IHRo
ZSBmb3VuZCB2YWx1ZSBpcyAqbm90KiBudWxsLgordmFyIGFzc2VydE5vdE51bGw7CisKKy8vIEFz
c2VydCB0aGF0IHRoZSBwYXNzZWQgZnVuY3Rpb24gb3IgZXZhbCBjb2RlIHRocm93cyBhbiBleGNl
cHRpb24uCisvLyBUaGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IGlzIGFuIGV4Y2VwdGlvbiBj
b25zdHJ1Y3RvciB0aGF0IHRoZQorLy8gdGhyb3duIGV4Y2VwdGlvbiBpcyBjaGVja2VkIGFnYWlu
c3Qgd2l0aCAiaW5zdGFuY2VvZiIuCisvLyBUaGUgb3B0aW9uYWwgdGhpcmQgYXJndW1lbnQgaXMg
YSBtZXNzYWdlIHR5cGUgc3RyaW5nIG9yIFJlZ0V4cCBvYmplY3QgdGhhdCBpcworLy8gY29tcGFy
ZWQgdG8gdGhlIG1lc3NhZ2Ugb2YgdGhlIHRocm93biBleGNlcHRpb24uCit2YXIgYXNzZXJ0VGhy
b3dzOworCisvLyBBc3NlcnQgdGhhdCB0aGUgcGFzc2VkIGZ1bmN0aW9uIHRocm93cyBhbiBleGNl
cHRpb24uCisvLyBUaGUgZXhjZXB0aW9uIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgc2Vjb25kIGFy
Z3VtZW50IHVzaW5nIGFzc2VydEVxdWFscy4KK3ZhciBhc3NlcnRUaHJvd3NFcXVhbHM7CisKKy8v
IEFzc2VydCB0aGF0IHRoZSBwYXNzZWQgcHJvbWlzZSBkb2VzIG5vdCByZXNvbHZlLCBidXQgZXZl
bnR1YWxseSB0aHJvd3MgYW4KKy8vIGV4Y2VwdGlvbi4gVGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1
bWVudCBpcyBhbiBleGNlcHRpb24gY29uc3RydWN0b3IgdGhhdCB0aGUKKy8vIHRocm93biBleGNl
cHRpb24gaXMgY2hlY2tlZCBhZ2FpbnN0IHdpdGggImluc3RhbmNlb2YiLgorLy8gVGhlIG9wdGlv
bmFsIHRoaXJkIGFyZ3VtZW50IGlzIGEgbWVzc2FnZSB0eXBlIHN0cmluZyBvciBSZWdFeHAgb2Jq
ZWN0IHRoYXQgaXMKKy8vIGNvbXBhcmVkIHRvIHRoZSBtZXNzYWdlIG9mIHRoZSB0aHJvd24gZXhj
ZXB0aW9uLgordmFyIGFzc2VydFRocm93c0FzeW5jOworCisvLyBBc3NlcnQgdGhhdCB0aGUgcGFz
c2VkIGZ1bmN0aW9uIG9yIGV2YWwgY29kZSBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24uCit2
YXIgYXNzZXJ0RG9lc05vdFRocm93OworCisvLyBBc3NlcnRzIHRoYXQgdGhlIGZvdW5kIHZhbHVl
IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBjb25zdHJ1Y3RvciBwYXNzZWQKKy8vIGFzIHRoZSBzZWNv
bmQgYXJndW1lbnQuCit2YXIgYXNzZXJ0SW5zdGFuY2VvZjsKKworLy8gQXNzZXJ0IHRoYXQgdGhp
cyBjb2RlIGlzIG5ldmVyIGV4ZWN1dGVkIChpLmUuLCBhbHdheXMgZmFpbHMgaWYgZXhlY3V0ZWQp
LgordmFyIGFzc2VydFVucmVhY2hhYmxlOworCisvLyBBc3NlcnQgdGhhdCB0aGUgZnVuY3Rpb24g
Y29kZSBpcyAobm90KSBvcHRpbWl6ZWQuCisvLyBPbmx5IHdvcmtzIHdpdGggLS1hbGxvdy1uYXRp
dmVzLXN5bnRheC4KK3ZhciBhc3NlcnRPcHRpbWl6ZWQ7Cit2YXIgYXNzZXJ0VW5vcHRpbWl6ZWQ7
CisKKy8vIEFzc2VydCB0aGF0IGEgc3RyaW5nIGNvbnRhaW5zIGFub3RoZXIgZXhwZWN0ZWQgc3Vi
c3RyaW5nLgordmFyIGFzc2VydENvbnRhaW5zOworCisvLyBBc3NlcnQgdGhhdCBhIHN0cmluZyBt
YXRjaGVzIGEgZ2l2ZW4gcmVnZXguCit2YXIgYXNzZXJ0TWF0Y2hlczsKKworLy8gQXNzZXJ0IHRo
YXQgYSBwcm9taXNlIHJlc29sdmVzIG9yIHJlamVjdHMuCisvLyBQYXJhbWV0ZXJzOgorLy8ge3By
b21pc2V9IC0gdGhlIHByb21pc2UKKy8vIHtzdWNjZXNzfSAtIG9wdGlvbmFsIC0gYSBjYWxsYmFj
ayB3aGljaCBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZQorLy8gICAgICAgICAgICAg
cmVzb2x2aW5nIHByb21pc2UuCisvLyAge2ZhaWx9IC0gICBvcHRpb25hbCAtIGEgY2FsbGJhY2sg
d2hpY2ggaXMgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUKKy8vICAgICAgICAgICAgIHJl
amVjdGluZyBwcm9taXNlLiBJZiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCBidXQgbm8ge2ZhaWx9
CisvLyAgICAgICAgICAgICBjYWxsYmFjayBpcyBzZXQsIHRoZSBlcnJvciBpcyBwcm9wYWdhdGVk
IG91dCBvZiB0aGUgcHJvbWlzZQorLy8gICAgICAgICAgICAgY2hhaW4uCit2YXIgYXNzZXJ0UHJv
bWlzZVJlc3VsdDsKKwordmFyIHByb21pc2VUZXN0Q2hhaW47Cit2YXIgcHJvbWlzZVRlc3RDb3Vu
dCA9IDA7CisKKy8vIFRoZXNlIGJpdHMgbXVzdCBiZSBpbiBzeW5jIHdpdGggYml0cyBkZWZpbmVk
IGluIFJ1bnRpbWVfR2V0T3B0aW1pemF0aW9uU3RhdHVzCit2YXIgVjhPcHRpbWl6YXRpb25TdGF0
dXMgPSB7CisgIGtJc0Z1bmN0aW9uOiAxIDw8IDAsCisgIGtOZXZlck9wdGltaXplOiAxIDw8IDEs
CisgIGtBbHdheXNPcHRpbWl6ZTogMSA8PCAyLAorICBrTWF5YmVEZW9wdGVkOiAxIDw8IDMsCisg
IGtPcHRpbWl6ZWQ6IDEgPDwgNCwKKyAga1R1cmJvRmFubmVkOiAxIDw8IDUsCisgIGtJbnRlcnBy
ZXRlZDogMSA8PCA2LAorICBrTWFya2VkRm9yT3B0aW1pemF0aW9uOiAxIDw8IDcsCisgIGtNYXJr
ZWRGb3JDb25jdXJyZW50T3B0aW1pemF0aW9uOiAxIDw8IDgsCisgIGtPcHRpbWl6aW5nQ29uY3Vy
cmVudGx5OiAxIDw8IDksCisgIGtJc0V4ZWN1dGluZzogMSA8PCAxMCwKKyAga1RvcG1vc3RGcmFt
ZUlzVHVyYm9GYW5uZWQ6IDEgPDwgMTEsCisgIGtMaXRlTW9kZTogMSA8PCAxMiwKKyAga01hcmtl
ZEZvckRlb3B0aW1pemF0aW9uOiAxIDw8IDEzLAorICBrQmFzZWxpbmU6IDEgPDwgMTQsCisgIGtU
b3Btb3N0RnJhbWVJc0ludGVycHJldGVkOiAxIDw8IDE1LAorICBrVG9wbW9zdEZyYW1lSXNCYXNl
bGluZTogMSA8PCAxNiwKK307CisKKy8vIFJldHVybnMgdHJ1ZSBpZiAtLWxpdGUtbW9kZSBpcyBv
biBhbmQgd2UgY2FuJ3QgZXZlciB0dXJuIG9uIG9wdGltaXphdGlvbi4KK3ZhciBpc05ldmVyT3B0
aW1pemVMaXRlTW9kZTsKKworLy8gUmV0dXJucyB0cnVlIGlmIC0tbm8tb3B0IG1vZGUgaXMgb24u
Cit2YXIgaXNOZXZlck9wdGltaXplOworCisvLyBSZXR1cm5zIHRydWUgaWYgLS1hbHdheXMtb3B0
IG1vZGUgaXMgb24uCit2YXIgaXNBbHdheXNPcHRpbWl6ZTsKKworLy8gUmV0dXJucyB0cnVlIGlm
IGdpdmVuIGZ1bmN0aW9uIGluIGludGVycHJldGVkLgordmFyIGlzSW50ZXJwcmV0ZWQ7CisKKy8v
IFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBmdW5jdGlvbiBpbiBiYXNlbGluZS4KK3ZhciBpc0Jhc2Vs
aW5lOworCisvLyBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24gaW4gdW5vcHRpbWl6ZWQg
KGludGVycHJldGVkIG9yIGJhc2VsaW5lKS4KK3ZhciBpc1Vub3B0aW1pemVkOworCisvLyBSZXR1
cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24gaXMgb3B0aW1pemVkLgordmFyIGlzT3B0aW1pemVk
OworCisvLyBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24gaXMgY29tcGlsZWQgYnkgVHVy
Ym9GYW4uCit2YXIgaXNUdXJib0Zhbm5lZDsKKworLy8gTW9ua2V5LXBhdGNoYWJsZSBhbGwtcHVy
cG9zZSBmYWlsdXJlIGhhbmRsZXIuCit2YXIgZmFpbFdpdGhNZXNzYWdlOworCisvLyBSZXR1cm5z
IHRoZSBmb3JtYXR0ZWQgZmFpbHVyZSB0ZXh0LiAgVXNlZCBieSB0ZXN0LWFzeW5jLmpzLgordmFy
IGZvcm1hdEZhaWx1cmVUZXh0OworCisvLyBSZXR1cm5zIGEgcHJldHR5LXByaW50ZWQgc3RyaW5n
IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXNzZWQgdmFsdWUuCit2YXIgcHJldHR5UHJpbnRlZDsK
KworKGZ1bmN0aW9uICgpIHsgIC8vIFNjb3BlIGZvciB1dGlsaXR5IGZ1bmN0aW9ucy4KKworICB2
YXIgT2JqZWN0UHJvdG90eXBlVG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwor
ICB2YXIgTnVtYmVyUHJvdG90eXBlVmFsdWVPZiA9IE51bWJlci5wcm90b3R5cGUudmFsdWVPZjsK
KyAgdmFyIEJvb2xlYW5Qcm90b3R5cGVWYWx1ZU9mID0gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVP
ZjsKKyAgdmFyIFN0cmluZ1Byb3RvdHlwZVZhbHVlT2YgPSBTdHJpbmcucHJvdG90eXBlLnZhbHVl
T2Y7CisgIHZhciBEYXRlUHJvdG90eXBlVmFsdWVPZiA9IERhdGUucHJvdG90eXBlLnZhbHVlT2Y7
CisgIHZhciBSZWdFeHBQcm90b3R5cGVUb1N0cmluZyA9IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJp
bmc7CisgIHZhciBBcnJheVByb3RvdHlwZUZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFj
aDsKKyAgdmFyIEFycmF5UHJvdG90eXBlSm9pbiA9IEFycmF5LnByb3RvdHlwZS5qb2luOworICB2
YXIgQXJyYXlQcm90b3R5cGVNYXAgPSBBcnJheS5wcm90b3R5cGUubWFwOworICB2YXIgQXJyYXlQ
cm90b3R5cGVQdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7CisgIHZhciBKU09OU3RyaW5naWZ5
ID0gSlNPTi5zdHJpbmdpZnk7CisKKyAgdmFyIEJpZ0ludFByb3RvdHlwZVZhbHVlT2Y7CisgIC8v
IFRPRE8obmVpcyk6IFJlbW92ZSB0cnktY2F0Y2ggb25jZSBCaWdJbnRzIGFyZSBlbmFibGVkIGJ5
IGRlZmF1bHQuCisgIHRyeSB7CisgICAgQmlnSW50UHJvdG90eXBlVmFsdWVPZiA9IEJpZ0ludC5w
cm90b3R5cGUudmFsdWVPZjsKKyAgfSBjYXRjaCAoZSkge30KKworICBmdW5jdGlvbiBjbGFzc09m
KG9iamVjdCkgeworICAgIC8vIEFyZ3VtZW50IG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVk
LgorICAgIHZhciBzdHJpbmcgPSBPYmplY3RQcm90b3R5cGVUb1N0cmluZy5jYWxsKG9iamVjdCk7
CisgICAgLy8gU3RyaW5nIGhhcyBmb3JtYXQgW29iamVjdCA8Q2xhc3NOYW1lPl0uCisgICAgcmV0
dXJuIHN0cmluZy5zdWJzdHJpbmcoOCwgc3RyaW5nLmxlbmd0aCAtIDEpOworICB9CisKKworICBm
dW5jdGlvbiBWYWx1ZU9mKHZhbHVlKSB7CisgICAgc3dpdGNoIChjbGFzc09mKHZhbHVlKSkgewor
ICAgICAgY2FzZSAiTnVtYmVyIjoKKyAgICAgICAgcmV0dXJuIE51bWJlclByb3RvdHlwZVZhbHVl
T2YuY2FsbCh2YWx1ZSk7CisgICAgICBjYXNlICJCaWdJbnQiOgorICAgICAgICByZXR1cm4gQmln
SW50UHJvdG90eXBlVmFsdWVPZi5jYWxsKHZhbHVlKTsKKyAgICAgIGNhc2UgIlN0cmluZyI6Cisg
ICAgICAgIHJldHVybiBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mLmNhbGwodmFsdWUpOworICAgICAg
Y2FzZSAiQm9vbGVhbiI6CisgICAgICAgIHJldHVybiBCb29sZWFuUHJvdG90eXBlVmFsdWVPZi5j
YWxsKHZhbHVlKTsKKyAgICAgIGNhc2UgIkRhdGUiOgorICAgICAgICByZXR1cm4gRGF0ZVByb3Rv
dHlwZVZhbHVlT2YuY2FsbCh2YWx1ZSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
dmFsdWU7CisgICAgfQorICB9CisKKworICBwcmV0dHlQcmludGVkID0gZnVuY3Rpb24gcHJldHR5
UHJpbnRlZCh2YWx1ZSkgeworICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7CisgICAgICBjYXNl
ICJzdHJpbmciOgorICAgICAgICByZXR1cm4gSlNPTlN0cmluZ2lmeSh2YWx1ZSk7CisgICAgICBj
YXNlICJiaWdpbnQiOgorICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKSArICJuIjsKKyAgICAg
IGNhc2UgIm51bWJlciI6CisgICAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiAoMSAvIHZhbHVlKSA8
IDApIHJldHVybiAiLTAiOworICAgICAgICAvLyBGQUxMVEhST1VHSC4KKyAgICAgIGNhc2UgImJv
b2xlYW4iOgorICAgICAgY2FzZSAidW5kZWZpbmVkIjoKKyAgICAgIGNhc2UgImZ1bmN0aW9uIjoK
KyAgICAgIGNhc2UgInN5bWJvbCI6CisgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpOworICAg
ICAgY2FzZSAib2JqZWN0IjoKKyAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gIm51
bGwiOworICAgICAgICB2YXIgb2JqZWN0Q2xhc3MgPSBjbGFzc09mKHZhbHVlKTsKKyAgICAgICAg
c3dpdGNoIChvYmplY3RDbGFzcykgeworICAgICAgICAgIGNhc2UgIk51bWJlciI6CisgICAgICAg
ICAgY2FzZSAiQmlnSW50IjoKKyAgICAgICAgICBjYXNlICJTdHJpbmciOgorICAgICAgICAgIGNh
c2UgIkJvb2xlYW4iOgorICAgICAgICAgIGNhc2UgIkRhdGUiOgorICAgICAgICAgICAgcmV0dXJu
IG9iamVjdENsYXNzICsgIigiICsgcHJldHR5UHJpbnRlZChWYWx1ZU9mKHZhbHVlKSkgKyAiKSI7
CisgICAgICAgICAgY2FzZSAiUmVnRXhwIjoKKyAgICAgICAgICAgIHJldHVybiBSZWdFeHBQcm90
b3R5cGVUb1N0cmluZy5jYWxsKHZhbHVlKTsKKyAgICAgICAgICBjYXNlICJBcnJheSI6CisgICAg
ICAgICAgICB2YXIgbWFwcGVkID0gQXJyYXlQcm90b3R5cGVNYXAuY2FsbCgKKyAgICAgICAgICAg
ICAgICB2YWx1ZSwgcHJldHR5UHJpbnRlZEFycmF5RWxlbWVudCk7CisgICAgICAgICAgICB2YXIg
am9pbmVkID0gQXJyYXlQcm90b3R5cGVKb2luLmNhbGwobWFwcGVkLCAiLCIpOworICAgICAgICAg
ICAgcmV0dXJuICJbIiArIGpvaW5lZCArICJdIjsKKyAgICAgICAgICBjYXNlICJVaW50OEFycmF5
IjoKKyAgICAgICAgICBjYXNlICJJbnQ4QXJyYXkiOgorICAgICAgICAgIGNhc2UgIkludDE2QXJy
YXkiOgorICAgICAgICAgIGNhc2UgIlVpbnQxNkFycmF5IjoKKyAgICAgICAgICBjYXNlICJVaW50
MzJBcnJheSI6CisgICAgICAgICAgY2FzZSAiSW50MzJBcnJheSI6CisgICAgICAgICAgY2FzZSAi
RmxvYXQzMkFycmF5IjoKKyAgICAgICAgICBjYXNlICJGbG9hdDY0QXJyYXkiOgorICAgICAgICAg
ICAgdmFyIGpvaW5lZCA9IEFycmF5UHJvdG90eXBlSm9pbi5jYWxsKHZhbHVlLCAiLCIpOworICAg
ICAgICAgICAgcmV0dXJuIG9iamVjdENsYXNzICsgIihbIiArIGpvaW5lZCArICJdKSI7CisgICAg
ICAgICAgY2FzZSAiT2JqZWN0IjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Q2xhc3MgKyAiKCIgKyBTdHJpbmcodmFsdWUp
ICsgIikiOworICAgICAgICB9CisgICAgICAgIC8vIGNsYXNzT2YoKSByZXR1cm5lZCAiT2JqZWN0
Ii4KKyAgICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lOworICAgICAgICBp
ZiAobmFtZSkgcmV0dXJuIG5hbWUgKyAiKCkiOworICAgICAgICByZXR1cm4gIk9iamVjdCgpIjsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiLS0gdW5rbm93biB2YWx1ZSAtLSI7Cisg
ICAgfQorICB9CisKKworICBmdW5jdGlvbiBwcmV0dHlQcmludGVkQXJyYXlFbGVtZW50KHZhbHVl
LCBpbmRleCwgYXJyYXkpIHsKKyAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGluZGV4
IGluIGFycmF5KSkgcmV0dXJuICIiOworICAgIHJldHVybiBwcmV0dHlQcmludGVkKHZhbHVlKTsK
KyAgfQorCisKKyAgZmFpbFdpdGhNZXNzYWdlID0gZnVuY3Rpb24gZmFpbFdpdGhNZXNzYWdlKG1l
c3NhZ2UpIHsKKyAgICB0aHJvdyBuZXcgTWpzVW5pdEFzc2VydGlvbkVycm9yKG1lc3NhZ2UpOwor
ICB9CisKKyAgZm9ybWF0RmFpbHVyZVRleHQgPSBmdW5jdGlvbihleHBlY3RlZFRleHQsIGZvdW5k
LCBuYW1lX29wdCkgeworICAgIHZhciBtZXNzYWdlID0gIkZhaWwiICsgInVyZSI7CisgICAgaWYg
KG5hbWVfb3B0KSB7CisgICAgICAvLyBGaXggdGhpcyB3aGVuIHdlIGRpdGNoIHRoZSBvbGQgdGVz
dCBydW5uZXIuCisgICAgICBtZXNzYWdlICs9ICIgKCIgKyBuYW1lX29wdCArICIpIjsKKyAgICB9
CisKKyAgICB2YXIgZm91bmRUZXh0ID0gcHJldHR5UHJpbnRlZChmb3VuZCk7CisgICAgaWYgKGV4
cGVjdGVkVGV4dC5sZW5ndGggPD0gNDAgJiYgZm91bmRUZXh0Lmxlbmd0aCA8PSA0MCkgeworICAg
ICAgbWVzc2FnZSArPSAiOiBleHBlY3RlZCA8IiArIGV4cGVjdGVkVGV4dCArICI+IGZvdW5kIDwi
ICsgZm91bmRUZXh0ICsgIj4iOworICAgIH0gZWxzZSB7CisgICAgICBtZXNzYWdlICs9ICI6XG5l
eHBlY3RlZDpcbiIgKyBleHBlY3RlZFRleHQgKyAiXG5mb3VuZDpcbiIgKyBmb3VuZFRleHQ7Cisg
ICAgfQorICAgIHJldHVybiBtZXNzYWdlOworICB9CisKKyAgZnVuY3Rpb24gZmFpbChleHBlY3Rl
ZFRleHQsIGZvdW5kLCBuYW1lX29wdCkgeworICAgIHJldHVybiBmYWlsV2l0aE1lc3NhZ2UoZm9y
bWF0RmFpbHVyZVRleHQoZXhwZWN0ZWRUZXh0LCBmb3VuZCwgbmFtZV9vcHQpKTsKKyAgfQorCisK
KyAgZnVuY3Rpb24gZGVlcE9iamVjdEVxdWFscyhhLCBiKSB7CisgICAgdmFyIGFQcm9wcyA9IE9i
amVjdC5rZXlzKGEpOworICAgIGFQcm9wcy5zb3J0KCk7CisgICAgdmFyIGJQcm9wcyA9IE9iamVj
dC5rZXlzKGIpOworICAgIGJQcm9wcy5zb3J0KCk7CisgICAgaWYgKCFkZWVwRXF1YWxzKGFQcm9w
cywgYlByb3BzKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKCFkZWVwRXF1YWxzKGFb
YVByb3BzW2ldXSwgYlthUHJvcHNbaV1dKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisKKworICBkZWVwRXF1YWxzID0gZnVu
Y3Rpb24gZGVlcEVxdWFscyhhLCBiKSB7CisgICAgaWYgKGEgPT09IGIpIHsKKyAgICAgIC8vIENo
ZWNrIGZvciAtMC4KKyAgICAgIGlmIChhID09PSAwKSByZXR1cm4gKDEgLyBhKSA9PT0gKDEgLyBi
KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAodHlwZW9mIGEgIT09IHR5cGVv
ZiBiKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKHR5cGVvZiBhID09PSAibnVtYmVyIikgcmV0dXJu
IGlzTmFOKGEpICYmIGlzTmFOKGIpOworICAgIGlmICh0eXBlb2YgYSAhPT0gIm9iamVjdCIgJiYg
dHlwZW9mIGEgIT09ICJmdW5jdGlvbiIpIHJldHVybiBmYWxzZTsKKyAgICAvLyBOZWl0aGVyIGEg
bm9yIGIgaXMgcHJpbWl0aXZlLgorICAgIHZhciBvYmplY3RDbGFzcyA9IGNsYXNzT2YoYSk7Cisg
ICAgaWYgKG9iamVjdENsYXNzICE9PSBjbGFzc09mKGIpKSByZXR1cm4gZmFsc2U7CisgICAgaWYg
KG9iamVjdENsYXNzID09PSAiUmVnRXhwIikgeworICAgICAgLy8gRm9yIFJlZ0V4cCwganVzdCBj
b21wYXJlIHBhdHRlcm4gYW5kIGZsYWdzIHVzaW5nIGl0cyB0b1N0cmluZy4KKyAgICAgIHJldHVy
biBSZWdFeHBQcm90b3R5cGVUb1N0cmluZy5jYWxsKGEpID09PQorICAgICAgICAgICAgIFJlZ0V4
cFByb3RvdHlwZVRvU3RyaW5nLmNhbGwoYik7CisgICAgfQorICAgIC8vIEZ1bmN0aW9ucyBhcmUg
b25seSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcy4KKyAgICBpZiAob2JqZWN0Q2xhc3MgPT09ICJG
dW5jdGlvbiIpIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0Q2xhc3MgPT09ICJBcnJheSIp
IHsKKyAgICAgIHZhciBlbGVtZW50Q291bnQgPSAwOworICAgICAgaWYgKGEubGVuZ3RoICE9PSBi
Lmxlbmd0aCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKCFkZWVwRXF1YWxzKGFb
aV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgaWYgKG9iamVjdENsYXNzID09PSAiU3RyaW5nIiB8fCBvYmplY3RDbGFzcyA9PT0g
Ik51bWJlciIgfHwKKyAgICAgIG9iamVjdENsYXNzID09PSAiQmlnSW50IiB8fCBvYmplY3RDbGFz
cyA9PT0gIkJvb2xlYW4iIHx8CisgICAgICBvYmplY3RDbGFzcyA9PT0gIkRhdGUiKSB7CisgICAg
ICBpZiAoVmFsdWVPZihhKSAhPT0gVmFsdWVPZihiKSkgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gZGVlcE9iamVjdEVxdWFscyhhLCBiKTsKKyAgfQorCisgIGFzc2VydFNhbWUgPSBm
dW5jdGlvbiBhc3NlcnRTYW1lKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgICBpZiAo
T2JqZWN0LmlzKGV4cGVjdGVkLCBmb3VuZCkpIHJldHVybjsKKyAgICBmYWlsKHByZXR0eVByaW50
ZWQoZXhwZWN0ZWQpLCBmb3VuZCwgbmFtZV9vcHQpOworICB9OworCisgIGFzc2VydE5vdFNhbWUg
PSBmdW5jdGlvbiBhc3NlcnROb3RTYW1lKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAg
ICBpZiAoIU9iamVjdC5pcyhleHBlY3RlZCwgZm91bmQpKSByZXR1cm47CisgICAgZmFpbCgibm90
IHNhbWUgYXMgIiArIHByZXR0eVByaW50ZWQoZXhwZWN0ZWQpLCBmb3VuZCwgbmFtZV9vcHQpOwor
ICB9CisKKyAgYXNzZXJ0RXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBm
b3VuZCwgbmFtZV9vcHQpIHsKKyAgICBpZiAoIWRlZXBFcXVhbHMoZm91bmQsIGV4cGVjdGVkKSkg
eworICAgICAgZmFpbChwcmV0dHlQcmludGVkKGV4cGVjdGVkKSwgZm91bmQsIG5hbWVfb3B0KTsK
KyAgICB9CisgIH07CisKKyAgYXNzZXJ0Tm90RXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0Tm90RXF1
YWxzKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgICBpZiAoZGVlcEVxdWFscyhmb3Vu
ZCwgZXhwZWN0ZWQpKSB7CisgICAgICBmYWlsKCJub3QgZXF1YWxzIHRvICIgKyBwcmV0dHlQcmlu
dGVkKGV4cGVjdGVkKSwgZm91bmQsIG5hbWVfb3B0KTsKKyAgICB9CisgIH07CisKKworICBhc3Nl
cnRFcXVhbHNEZWx0YSA9CisgICAgICBmdW5jdGlvbiBhc3NlcnRFcXVhbHNEZWx0YShleHBlY3Rl
ZCwgZm91bmQsIGRlbHRhLCBuYW1lX29wdCkgeworICAgIGlmIChNYXRoLmFicyhleHBlY3RlZCAt
IGZvdW5kKSA+IGRlbHRhKSB7CisgICAgICBmYWlsKHByZXR0eVByaW50ZWQoZXhwZWN0ZWQpICsg
IiArLSAiICsgcHJldHR5UHJpbnRlZChkZWx0YSksIGZvdW5kLCBuYW1lX29wdCk7CisgICAgfQor
ICB9OworCisKKyAgYXNzZXJ0QXJyYXlFcXVhbHMgPSBmdW5jdGlvbiBhc3NlcnRBcnJheUVxdWFs
cyhleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAgdmFyIHN0YXJ0ID0gIiI7CisgICAg
aWYgKG5hbWVfb3B0KSB7CisgICAgICBzdGFydCA9IG5hbWVfb3B0ICsgIiAtICI7CisgICAgfQor
ICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5sZW5ndGgsIGZvdW5kLmxlbmd0aCwgc3RhcnQgKyAi
YXJyYXkgbGVuZ3RoIik7CisgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gZm91bmQubGVuZ3Ro
KSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFtpXSwgZm91bmRbaV0sCisgICAgICAgICAgICAg
ICAgICAgICBzdGFydCArICJhcnJheSBlbGVtZW50IGF0IGluZGV4ICIgKyBpKTsKKyAgICAgIH0K
KyAgICB9CisgIH07CisKKworICBhc3NlcnRQcm9wZXJ0aWVzRXF1YWwgPSBmdW5jdGlvbiBhc3Nl
cnRQcm9wZXJ0aWVzRXF1YWwoZXhwZWN0ZWQsIGZvdW5kLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9vcHQpIHsKKyAgICAvLyBD
aGVjayBwcm9wZXJ0aWVzIG9ubHkuCisgICAgaWYgKCFkZWVwT2JqZWN0RXF1YWxzKGV4cGVjdGVk
LCBmb3VuZCkpIHsKKyAgICAgIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCk7CisgICAg
fQorICB9OworCisKKyAgYXNzZXJ0VG9TdHJpbmdFcXVhbHMgPSBmdW5jdGlvbiBhc3NlcnRUb1N0
cmluZ0VxdWFscyhleHBlY3RlZCwgZm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9vcHQpIHsKKyAgICBpZiAoZXhwZWN0ZWQg
IT09IFN0cmluZyhmb3VuZCkpIHsKKyAgICAgIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29w
dCk7CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0VHJ1ZSA9IGZ1bmN0aW9uIGFzc2VydFRydWUo
dmFsdWUsIG5hbWVfb3B0KSB7CisgICAgYXNzZXJ0RXF1YWxzKHRydWUsIHZhbHVlLCBuYW1lX29w
dCk7CisgIH07CisKKworICBhc3NlcnRGYWxzZSA9IGZ1bmN0aW9uIGFzc2VydEZhbHNlKHZhbHVl
LCBuYW1lX29wdCkgeworICAgIGFzc2VydEVxdWFscyhmYWxzZSwgdmFsdWUsIG5hbWVfb3B0KTsK
KyAgfTsKKworCisgIGFzc2VydE51bGwgPSBmdW5jdGlvbiBhc3NlcnROdWxsKHZhbHVlLCBuYW1l
X29wdCkgeworICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkgeworICAgICAgZmFpbCgibnVsbCIsIHZh
bHVlLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0Tm90TnVsbCA9IGZ1bmN0
aW9uIGFzc2VydE5vdE51bGwodmFsdWUsIG5hbWVfb3B0KSB7CisgICAgaWYgKHZhbHVlID09PSBu
dWxsKSB7CisgICAgICBmYWlsKCJub3QgbnVsbCIsIHZhbHVlLCBuYW1lX29wdCk7CisgICAgfQor
ICB9OworCisgIGZ1bmN0aW9uIGV4ZWN1dGVDb2RlKGNvZGUpIHsKKyAgICBpZiAodHlwZW9mIGNv
ZGUgPT09ICdmdW5jdGlvbicpICByZXR1cm4gY29kZSgpOworICAgIGlmICh0eXBlb2YgY29kZSA9
PT0gJ3N0cmluZycpIHJldHVybiBldmFsKGNvZGUpOworICAgIGZhaWxXaXRoTWVzc2FnZSgKKyAg
ICAgICAgJ0dpdmVuIGNvZGUgaXMgbmVpdGhlciBmdW5jdGlvbiBub3Igc3RyaW5nLCBidXQgJyAr
ICh0eXBlb2YgY29kZSkgKworICAgICAgICAnOiA8JyArIHByZXR0eVByaW50ZWQoY29kZSkgKyAn
PicpOworICB9CisKKyAgZnVuY3Rpb24gY2hlY2tFeGNlcHRpb24oZSwgdHlwZV9vcHQsIGNhdXNl
X29wdCkgeworICAgIGlmICh0eXBlX29wdCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBhc3NlcnRF
cXVhbHMoJ2Z1bmN0aW9uJywgdHlwZW9mIHR5cGVfb3B0KTsKKyAgICAgIGFzc2VydEluc3RhbmNl
b2YoZSwgdHlwZV9vcHQpOworICAgIH0KKyAgICBpZiAoUmVnRXhwICE9PSB1bmRlZmluZWQgJiYg
Y2F1c2Vfb3B0IGluc3RhbmNlb2YgUmVnRXhwKSB7CisgICAgICBhc3NlcnRNYXRjaGVzKGNhdXNl
X29wdCwgZS5tZXNzYWdlLCAnRXJyb3IgbWVzc2FnZScpOworICAgIH0gZWxzZSBpZiAoY2F1c2Vf
b3B0ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIGFzc2VydEVxdWFscyhjYXVzZV9vcHQsIGUubWVz
c2FnZSwgJ0Vycm9yIG1lc3NhZ2UnKTsKKyAgICB9CisgIH0KKworICBhc3NlcnRUaHJvd3MgPSBm
dW5jdGlvbiBhc3NlcnRUaHJvd3MoY29kZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkgeworICAgIGlm
IChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlX29wdCA9PT0gdW5kZWZpbmVkKSB7CisgICAg
ICBmYWlsV2l0aE1lc3NhZ2UoJ2ludmFsaWQgdXNlIG9mIGFzc2VydFRocm93cywgdW5rbm93biB0
eXBlX29wdCBnaXZlbicpOworICAgIH0KKyAgICBpZiAodHlwZV9vcHQgIT09IHVuZGVmaW5lZCAm
JiB0eXBlb2YgdHlwZV9vcHQgIT09ICdmdW5jdGlvbicpIHsKKyAgICAgIGZhaWxXaXRoTWVzc2Fn
ZSgKKyAgICAgICAgICAnaW52YWxpZCB1c2Ugb2YgYXNzZXJ0VGhyb3dzLCBtYXliZSB5b3Ugd2Fu
dCBhc3NlcnRUaHJvd3NFcXVhbHMnKTsKKyAgICB9CisgICAgdHJ5IHsKKyAgICAgIGV4ZWN1dGVD
b2RlKGNvZGUpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGNoZWNrRXhjZXB0aW9uKGUsIHR5
cGVfb3B0LCBjYXVzZV9vcHQpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBsZXQgbXNnID0g
J0RpZCBub3QgdGhyb3cgZXhjZXB0aW9uJzsKKyAgICBpZiAodHlwZV9vcHQgIT09IHVuZGVmaW5l
ZCAmJiB0eXBlX29wdC5uYW1lICE9PSB1bmRlZmluZWQpCisgICAgICBtc2cgKz0gJywgZXhwZWN0
ZWQgJyArIHR5cGVfb3B0Lm5hbWU7CisgICAgZmFpbFdpdGhNZXNzYWdlKG1zZyk7CisgIH07CisK
KyAgYXNzZXJ0VGhyb3dzRXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0VGhyb3dzRXF1YWxzKGZ1biwg
dmFsKSB7CisgICAgdHJ5IHsKKyAgICAgIGZ1bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
IGFzc2VydFNhbWUodmFsLCBlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZmFpbFdpdGhN
ZXNzYWdlKCdEaWQgbm90IHRocm93IGV4Y2VwdGlvbiwgZXhwZWN0ZWQgJyArIHByZXR0eVByaW50
ZWQodmFsKSk7CisgIH07CisKKyAgYXNzZXJ0VGhyb3dzQXN5bmMgPSBmdW5jdGlvbiBhc3NlcnRU
aHJvd3NBc3luYyhwcm9taXNlLCB0eXBlX29wdCwgY2F1c2Vfb3B0KSB7CisgICAgaWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPiAxICYmIHR5cGVfb3B0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgIGZhaWxX
aXRoTWVzc2FnZSgnaW52YWxpZCB1c2Ugb2YgYXNzZXJ0VGhyb3dzLCB1bmtub3duIHR5cGVfb3B0
IGdpdmVuJyk7CisgICAgfQorICAgIGlmICh0eXBlX29wdCAhPT0gdW5kZWZpbmVkICYmIHR5cGVv
ZiB0eXBlX29wdCAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAgZmFpbFdpdGhNZXNzYWdlKAorICAg
ICAgICAgICdpbnZhbGlkIHVzZSBvZiBhc3NlcnRUaHJvd3MsIG1heWJlIHlvdSB3YW50IGFzc2Vy
dFRocm93c0VxdWFscycpOworICAgIH0KKyAgICBsZXQgbXNnID0gJ1Byb21pc2UgZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24nOworICAgIGlmICh0eXBlX29wdCAhPT0gdW5kZWZpbmVkICYmIHR5cGVf
b3B0Lm5hbWUgIT09IHVuZGVmaW5lZCkKKyAgICAgIG1zZyArPSAnLCBleHBlY3RlZCAnICsgdHlw
ZV9vcHQubmFtZTsKKyAgICByZXR1cm4gYXNzZXJ0UHJvbWlzZVJlc3VsdCgKKyAgICAgICAgcHJv
bWlzZSwKKyAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gdGhyb3cgdGhlIGVycm9yIGFnYWlu
IHRvIGdldCBvdXQgb2YgdGhlIHByb21pc2UKKyAgICAgICAgLy8gY2hhaW4uCisgICAgICAgIHJl
cyA9PiBzZXRUaW1lb3V0KF8gPT4gZmFpbCgnPHRocm93PicsIHJlcywgbXNnKSwgMCksCisgICAg
ICAgIGUgPT4gY2hlY2tFeGNlcHRpb24oZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkpOworICB9Owor
CisgIGFzc2VydEluc3RhbmNlb2YgPSBmdW5jdGlvbiBhc3NlcnRJbnN0YW5jZW9mKG9iaiwgdHlw
ZSkgeworICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIHR5cGUpKSB7CisgICAgICB2YXIgYWN0dWFs
VHlwZU5hbWUgPSBudWxsOworICAgICAgdmFyIGFjdHVhbENvbnN0cnVjdG9yID0gb2JqICYmIE9i
amVjdC5nZXRQcm90b3R5cGVPZihvYmopLmNvbnN0cnVjdG9yOworICAgICAgaWYgKHR5cGVvZiBh
Y3R1YWxDb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICBhY3R1YWxUeXBlTmFt
ZSA9IGFjdHVhbENvbnN0cnVjdG9yLm5hbWUgfHwgU3RyaW5nKGFjdHVhbENvbnN0cnVjdG9yKTsK
KyAgICAgIH0KKyAgICAgIGZhaWxXaXRoTWVzc2FnZSgKKyAgICAgICAgICAnT2JqZWN0IDwnICsg
cHJldHR5UHJpbnRlZChvYmopICsgJz4gaXMgbm90IGFuIGluc3RhbmNlIG9mIDwnICsKKyAgICAg
ICAgICAodHlwZS5uYW1lIHx8IHR5cGUpICsgJz4nICsKKyAgICAgICAgICAoYWN0dWFsVHlwZU5h
bWUgPyAnIGJ1dCBvZiA8JyArIGFjdHVhbFR5cGVOYW1lICsgJz4nIDogJycpKTsKKyAgICB9Cisg
IH07CisKKyAgYXNzZXJ0RG9lc05vdFRocm93ID0gZnVuY3Rpb24gYXNzZXJ0RG9lc05vdFRocm93
KGNvZGUsIG5hbWVfb3B0KSB7CisgICAgdHJ5IHsKKyAgICAgIGV4ZWN1dGVDb2RlKGNvZGUpOwor
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGlmIChlIGluc3RhbmNlb2YgTWpzVW5pdEFzc2VydGlv
bkVycm9yKSB0aHJvdyBlOworICAgICAgZmFpbFdpdGhNZXNzYWdlKCJ0aHJldyBhbiBleGNlcHRp
b246ICIgKyAoZS5tZXNzYWdlIHx8IGUpKTsKKyAgICB9CisgIH07CisKKyAgYXNzZXJ0VW5yZWFj
aGFibGUgPSBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZShuYW1lX29wdCkgeworICAgIC8vIEZp
eCB0aGlzIHdoZW4gd2UgZGl0Y2ggdGhlIG9sZCB0ZXN0IHJ1bm5lci4KKyAgICB2YXIgbWVzc2Fn
ZSA9ICJGYWlsIiArICJ1cmU6IHVucmVhY2hhYmxlIjsKKyAgICBpZiAobmFtZV9vcHQpIHsKKyAg
ICAgIG1lc3NhZ2UgKz0gIiAtICIgKyBuYW1lX29wdDsKKyAgICB9CisgICAgZmFpbFdpdGhNZXNz
YWdlKG1lc3NhZ2UpOworICB9OworCisgIGFzc2VydENvbnRhaW5zID0gZnVuY3Rpb24oc3ViLCB2
YWx1ZSwgbmFtZV9vcHQpIHsKKyAgICBpZiAodmFsdWUgPT0gbnVsbCA/IChzdWIgIT0gbnVsbCkg
OiB2YWx1ZS5pbmRleE9mKHN1YikgPT0gLTEpIHsKKyAgICAgIGZhaWwoImNvbnRhaW5zICciICsg
U3RyaW5nKHN1YikgKyAiJyIsIHZhbHVlLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisgIGFz
c2VydE1hdGNoZXMgPSBmdW5jdGlvbihyZWdleHAsIHN0ciwgbmFtZV9vcHQpIHsKKyAgICBpZiAo
IShyZWdleHAgaW5zdGFuY2VvZiBSZWdFeHApKSB7CisgICAgICByZWdleHAgPSBuZXcgUmVnRXhw
KHJlZ2V4cCk7CisgICAgfQorICAgIGlmICghc3RyLm1hdGNoKHJlZ2V4cCkpIHsKKyAgICAgIGZh
aWwoInNob3VsZCBtYXRjaCAnIiArIHJlZ2V4cCArICInIiwgc3RyLCBuYW1lX29wdCk7CisgICAg
fQorICB9OworCisgIGZ1bmN0aW9uIGNvbmNhdGVuYXRlRXJyb3JzKHN0YWNrLCBleGNlcHRpb24p
IHsKKyAgICAvLyBJZiB0aGUgZXhjZXB0aW9uIGRvZXMgbm90IGNvbnRhaW4gYSBzdGFjayB0cmFj
ZSwgd3JhcCBpdCBpbiBhIG5ldyBFcnJvci4KKyAgICBpZiAoIWV4Y2VwdGlvbi5zdGFjaykgZXhj
ZXB0aW9uID0gbmV3IEVycm9yKGV4Y2VwdGlvbik7CisKKyAgICAvLyBJZiB0aGUgZXhjZXB0aW9u
IGFscmVhZHkgcHJvdmlkZXMgYSBzcGVjaWFsIHN0YWNrIHRyYWNlLCB3ZSBkbyBub3QgbW9kaWZ5
CisgICAgLy8gaXQuCisgICAgaWYgKHR5cGVvZiBleGNlcHRpb24uc3RhY2sgIT09ICdzdHJpbmcn
KSB7CisgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgIH0KKyAgICBleGNlcHRpb24uc3RhY2sg
PSBzdGFjayArICdcblxuJyArIGV4Y2VwdGlvbi5zdGFjazsKKyAgICByZXR1cm4gZXhjZXB0aW9u
OworICB9CisKKyAgYXNzZXJ0UHJvbWlzZVJlc3VsdCA9IGZ1bmN0aW9uKHByb21pc2UsIHN1Y2Nl
c3MsIGZhaWwpIHsKKyAgICBpZiAoc3VjY2VzcyAhPT0gdW5kZWZpbmVkKSBhc3NlcnRFcXVhbHMo
J2Z1bmN0aW9uJywgdHlwZW9mIHN1Y2Nlc3MpOworICAgIGlmIChmYWlsICE9PSB1bmRlZmluZWQp
IGFzc2VydEVxdWFscygnZnVuY3Rpb24nLCB0eXBlb2YgZmFpbCk7CisgICAgYXNzZXJ0SW5zdGFu
Y2VvZihwcm9taXNlLCBQcm9taXNlKTsKKyAgICBjb25zdCBzdGFjayA9IChuZXcgRXJyb3IoKSku
c3RhY2s7CisKKyAgICB2YXIgdGVzdF9wcm9taXNlID0gcHJvbWlzZS50aGVuKAorICAgICAgICBy
ZXN1bHQgPT4geworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoLS1wcm9taXNlVGVz
dENvdW50ID09IDApIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgaWYgKHN1
Y2Nlc3MgIT09IHVuZGVmaW5lZCkgc3VjY2VzcyhyZXN1bHQpOworICAgICAgICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIHRocm93IHRoZSBlcnJvciBh
Z2FpbiB0byBnZXQgb3V0IG9mIHRoZSBwcm9taXNlCisgICAgICAgICAgICAvLyBjaGFpbi4KKyAg
ICAgICAgICAgIHNldFRpbWVvdXQoXyA9PiB7CisgICAgICAgICAgICAgIHRocm93IGNvbmNhdGVu
YXRlRXJyb3JzKHN0YWNrLCBlKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgcmVzdWx0ID0+IHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAg
ICAgaWYgKC0tcHJvbWlzZVRlc3RDb3VudCA9PSAwKSB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgICAgIGlmIChmYWlsID09PSB1bmRlZmluZWQpIHRocm93IHJlc3VsdDsKKyAgICAg
ICAgICAgIGZhaWwocmVzdWx0KTsKKyAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAg
ICAvLyBVc2Ugc2V0VGltZW91dCB0byB0aHJvdyB0aGUgZXJyb3IgYWdhaW4gdG8gZ2V0IG91dCBv
ZiB0aGUgcHJvbWlzZQorICAgICAgICAgICAgLy8gY2hhaW4uCisgICAgICAgICAgICBzZXRUaW1l
b3V0KF8gPT4geworICAgICAgICAgICAgICB0aHJvdyBjb25jYXRlbmF0ZUVycm9ycyhzdGFjaywg
ZSk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAg
aWYgKCFwcm9taXNlVGVzdENoYWluKSBwcm9taXNlVGVzdENoYWluID0gUHJvbWlzZS5yZXNvbHZl
KCk7CisgICAgLy8gd2FpdFVudGlsRG9uZSBpcyBpZGVtcG90ZW50LgorICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICsrcHJvbWlzZVRlc3RDb3VudDsKKyAgICByZXR1cm4gcHJv
bWlzZVRlc3RDaGFpbi50aGVuKHRlc3RfcHJvbWlzZSk7CisgIH07CisKKyAgdmFyIE9wdGltaXph
dGlvblN0YXR1c0ltcGwgPSB1bmRlZmluZWQ7CisKKyAgdmFyIE9wdGltaXphdGlvblN0YXR1cyA9
IGZ1bmN0aW9uKGZ1bikgeworICAgIGlmIChPcHRpbWl6YXRpb25TdGF0dXNJbXBsID09PSB1bmRl
ZmluZWQpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIE9wdGltaXphdGlvblN0YXR1c0ltcGwgPSBu
ZXcgRnVuY3Rpb24oCisgICAgICAgICAgICAiZnVuIiwgInJldHVybiAlR2V0T3B0aW1pemF0aW9u
U3RhdHVzKGZ1bik7Iik7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRocm93IG5ldyBF
cnJvcigibmF0aXZlcyBzeW50YXggbm90IGFsbG93ZWQiKTsKKyAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIE9wdGltaXphdGlvblN0YXR1c0ltcGwoZnVuKTsKKyAgfQorCisgIGFzc2VydFVub3B0
aW1pemVkID0gZnVuY3Rpb24gYXNzZXJ0VW5vcHRpbWl6ZWQoCisgICAgICBmdW4sIG5hbWVfb3B0
LCBza2lwX2lmX21heWJlX2Rlb3B0ZWQgPSB0cnVlKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBP
cHRpbWl6YXRpb25TdGF0dXMoZnVuKTsKKyAgICAvLyBUZXN0cyB0aGF0IHVzZSBhc3NlcnRVbm9w
dGltaXplZCgpIGRvIG5vdCBtYWtlIHNlbnNlIGlmIC0tYWx3YXlzLW9wdAorICAgIC8vIG9wdGlv
biBpcyBwcm92aWRlZC4gU3VjaCB0ZXN0cyBtdXN0IGFkZCAtLW5vLWFsd2F5cy1vcHQgdG8gZmxh
Z3MgY29tbWVudC4KKyAgICBhc3NlcnRGYWxzZSgob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9u
U3RhdHVzLmtBbHdheXNPcHRpbWl6ZSkgIT09IDAsCisgICAgICAgICAgICAgICAgInRlc3QgZG9l
cyBub3QgbWFrZSBzZW5zZSB3aXRoIC0tYWx3YXlzLW9wdCIpOworICAgIGFzc2VydFRydWUoKG9w
dF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsIG5hbWVf
b3B0KTsKKyAgICBpZiAoc2tpcF9pZl9tYXliZV9kZW9wdGVkICYmCisgICAgICAgIChvcHRfc3Rh
dHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua01heWJlRGVvcHRlZCkgIT09IDApIHsKKyAgICAg
IC8vIFdoZW4gLS1kZW9wdC1ldmVyeS1uLXRpbWVzIGZsYWcgaXMgc3BlY2lmaWVkIGl0J3Mgbm8g
bG9uZ2VyIGd1YXJhbnRlZWQKKyAgICAgIC8vIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpcyBz
dGlsbCBkZW9wdGltaXplZCwgc28ga2VlcCBydW5uaW5nIHRoZSB0ZXN0CisgICAgICAvLyB0byBz
dHJlc3MgdGVzdCB0aGUgZGVvcHRpbWl6ZXIuCisgICAgICByZXR1cm47CisgICAgfQorICAgIHZh
ciBpc19vcHRpbWl6ZWQgPSAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtPcHRp
bWl6ZWQpICE9PSAwOworICAgIGFzc2VydEZhbHNlKGlzX29wdGltaXplZCwgbmFtZV9vcHQpOwor
ICB9CisKKyAgYXNzZXJ0T3B0aW1pemVkID0gZnVuY3Rpb24gYXNzZXJ0T3B0aW1pemVkKAorICAg
ICAgZnVuLCBuYW1lX29wdCwgc2tpcF9pZl9tYXliZV9kZW9wdGVkID0gdHJ1ZSkgeworICAgIHZh
ciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKGZ1bik7CisgICAgLy8gVGVzdHMgdGhh
dCB1c2UgYXNzZXJ0T3B0aW1pemVkKCkgZG8gbm90IG1ha2Ugc2Vuc2UgZm9yIExpdGUgbW9kZSB3
aGVyZQorICAgIC8vIG9wdGltaXphdGlvbiBpcyBhbHdheXMgZGlzYWJsZWQsIGV4cGxpY2l0bHkg
ZXhpdCB0aGUgdGVzdCB3aXRoIGEgd2FybmluZy4KKyAgICBpZiAob3B0X3N0YXR1cyAmIFY4T3B0
aW1pemF0aW9uU3RhdHVzLmtMaXRlTW9kZSkgeworICAgICAgcHJpbnQoIldhcm5pbmc6IFRlc3Qg
dXNlcyBhc3NlcnRPcHRpbWl6ZWQgaW4gTGl0ZSBtb2RlLCBza2lwcGluZyB0ZXN0LiIpOworICAg
ICAgdGVzdFJ1bm5lci5xdWl0KDApOworICAgIH0KKyAgICAvLyBUZXN0cyB0aGF0IHVzZSBhc3Nl
cnRPcHRpbWl6ZWQoKSBkbyBub3QgbWFrZSBzZW5zZSBpZiAtLW5vLW9wdAorICAgIC8vIG9wdGlv
biBpcyBwcm92aWRlZC4gU3VjaCB0ZXN0cyBtdXN0IGFkZCAtLW9wdCB0byBmbGFncyBjb21tZW50
LgorICAgIGFzc2VydEZhbHNlKChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua05l
dmVyT3B0aW1pemUpICE9PSAwLAorICAgICAgICAgICAgICAgICJ0ZXN0IGRvZXMgbm90IG1ha2Ug
c2Vuc2Ugd2l0aCAtLW5vLW9wdCIpOworICAgIGFzc2VydFRydWUoCisgICAgICAgIChvcHRfc3Rh
dHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAwLAorICAgICAgICAn
c2hvdWxkIGJlIGEgZnVuY3Rpb246ICcgKyBuYW1lX29wdCk7CisgICAgaWYgKHNraXBfaWZfbWF5
YmVfZGVvcHRlZCAmJgorICAgICAgICAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVz
LmtNYXliZURlb3B0ZWQpICE9PSAwKSB7CisgICAgICAvLyBXaGVuIC0tZGVvcHQtZXZlcnktbi10
aW1lcyBmbGFnIGlzIHNwZWNpZmllZCBpdCdzIG5vIGxvbmdlciBndWFyYW50ZWVkCisgICAgICAv
LyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgc3RpbGwgb3B0aW1pemVkLCBzbyBrZWVwIHJ1
bm5pbmcgdGhlIHRlc3QKKyAgICAgIC8vIHRvIHN0cmVzcyB0ZXN0IHRoZSBkZW9wdGltaXplci4K
KyAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXNzZXJ0VHJ1ZSgKKyAgICAgICAgKG9wdF9zdGF0
dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rT3B0aW1pemVkKSAhPT0gMCwKKyAgICAgICAgJ3No
b3VsZCBiZSBvcHRpbWl6ZWQ6ICcgKyBuYW1lX29wdCk7CisgIH0KKworICBpc05ldmVyT3B0aW1p
emVMaXRlTW9kZSA9IGZ1bmN0aW9uIGlzTmV2ZXJPcHRpbWl6ZUxpdGVNb2RlKCkgeworICAgIHZh
ciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKHVuZGVmaW5lZCwgIiIpOworICAgIHJl
dHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtMaXRlTW9kZSkgIT09IDA7
CisgIH0KKworICBpc05ldmVyT3B0aW1pemUgPSBmdW5jdGlvbiBpc05ldmVyT3B0aW1pemUoKSB7
CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXModW5kZWZpbmVkLCAiIik7
CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua05ldmVyT3B0
aW1pemUpICE9PSAwOworICB9CisKKyAgaXNBbHdheXNPcHRpbWl6ZSA9IGZ1bmN0aW9uIGlzQWx3
YXlzT3B0aW1pemUoKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXMo
dW5kZWZpbmVkLCAiIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25T
dGF0dXMua0Fsd2F5c09wdGltaXplKSAhPT0gMDsKKyAgfQorCisgIGlzSW50ZXJwcmV0ZWQgPSBm
dW5jdGlvbiBpc0ludGVycHJldGVkKGZ1bikgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1p
emF0aW9uU3RhdHVzKGZ1biwgIiIpOworICAgIGFzc2VydFRydWUoKG9wdF9zdGF0dXMgJiBWOE9w
dGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAgICAgICAgICAgICAibm90
IGEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0
YXR1cy5rT3B0aW1pemVkKSA9PT0gMCAmJgorICAgICAgICAgICAob3B0X3N0YXR1cyAmIFY4T3B0
aW1pemF0aW9uU3RhdHVzLmtJbnRlcnByZXRlZCkgIT09IDA7CisgIH0KKworICBpc0Jhc2VsaW5l
ID0gZnVuY3Rpb24gaXNCYXNlbGluZShmdW4pIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGlt
aXphdGlvblN0YXR1cyhmdW4sICIiKTsKKyAgICBhc3NlcnRUcnVlKChvcHRfc3RhdHVzICYgVjhP
cHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAwLAorICAgICAgICAgICAgICAgIm5v
dCBhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25T
dGF0dXMua09wdGltaXplZCkgPT09IDAgJiYKKyAgICAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9w
dGltaXphdGlvblN0YXR1cy5rQmFzZWxpbmUpICE9PSAwOworICB9CisKKyAgaXNVbm9wdGltaXpl
ZCA9IGZ1bmN0aW9uIGlzVW5vcHRpbWl6ZWQoZnVuKSB7CisgICAgcmV0dXJuIGlzSW50ZXJwcmV0
ZWQoZnVuKSB8fCBpc0Jhc2VsaW5lKGZ1bik7CisgIH0KKworICBpc09wdGltaXplZCA9IGZ1bmN0
aW9uIGlzT3B0aW1pemVkKGZ1bikgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9u
U3RhdHVzKGZ1biwgIiIpOworICAgIGFzc2VydFRydWUoKG9wdF9zdGF0dXMgJiBWOE9wdGltaXph
dGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAgICAgICAgICAgICAibm90IGEgZnVu
Y3Rpb24iKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5r
T3B0aW1pemVkKSAhPT0gMDsKKyAgfQorCisgIGlzVHVyYm9GYW5uZWQgPSBmdW5jdGlvbiBpc1R1
cmJvRmFubmVkKGZ1bikgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVz
KGZ1biwgIiIpOworICAgIGFzc2VydFRydWUoKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0
YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAgICAgICAgICAgICAibm90IGEgZnVuY3Rpb24i
KTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rT3B0aW1p
emVkKSAhPT0gMCAmJgorICAgICAgICAgICAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3Rh
dHVzLmtUdXJib0Zhbm5lZCkgIT09IDA7CisgIH0KKworICAvLyBDdXN0b20gVjgtc3BlY2lmaWMg
c3RhY2sgdHJhY2UgZm9ybWF0dGVyIHRoYXQgaXMgdGVtcG9yYXJpbHkgaW5zdGFsbGVkIG9uCisg
IC8vIHRoZSBFcnJvciBvYmplY3QuCisgIE1qc1VuaXRBc3NlcnRpb25FcnJvci5wcmVwYXJlU3Rh
Y2tUcmFjZSA9IGZ1bmN0aW9uKGVycm9yLCBzdGFjaykgeworICAgIC8vIFRyaWdnZXIgZGVmYXVs
dCBmb3JtYXR0aW5nIHdpdGggcmVjdXJzaW9uLgorICAgIHRyeSB7CisgICAgICAvLyBGaWx0ZXIt
b3V0IGFsbCBidXQgdGhlIGZpcnN0IG1qc3VuaXQgZnJhbWUuCisgICAgICBsZXQgZmlsdGVyZWRT
dGFjayA9IFtdOworICAgICAgbGV0IGluTWpzdW5pdCA9IHRydWU7CisgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGxldCBmcmFtZSA9IHN0YWNr
W2ldOworICAgICAgICBpZiAoaW5NanN1bml0KSB7CisgICAgICAgICAgbGV0IGZpbGUgPSBmcmFt
ZS5nZXRGaWxlTmFtZSgpOworICAgICAgICAgIGlmICghZmlsZSB8fCAhZmlsZS5lbmRzV2l0aCgi
bWpzdW5pdC5qcyIpKSB7CisgICAgICAgICAgICBpbk1qc3VuaXQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIC8vIFB1c2ggdGhlIGxhc3QgbWpzdW5pdCBmcmFtZSwgdHlwaWNhbGx5IGNvbnRhaW5pbmcg
dGhlIGFzc2VydGlvbgorICAgICAgICAgICAgLy8gZnVuY3Rpb24uCisgICAgICAgICAgICBpZiAo
aSA+IDApIEFycmF5UHJvdG90eXBlUHVzaC5jYWxsKGZpbHRlcmVkU3RhY2ssIHN0YWNrW2ktMV0p
OworICAgICAgICAgICAgQXJyYXlQcm90b3R5cGVQdXNoLmNhbGwoZmlsdGVyZWRTdGFjaywgc3Rh
Y2tbaV0pOworICAgICAgICAgIH0KKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBBcnJheVByb3RvdHlwZVB1c2guY2FsbChmaWx0ZXJlZFN0YWNrLCBmcmFtZSk7CisgICAg
ICB9CisgICAgICBzdGFjayA9IGZpbHRlcmVkU3RhY2s7CisKKyAgICAgIC8vIEluZmVyIGZ1bmN0
aW9uIG5hbWVzIGFuZCBjYWxjdWxhdGUge21heF9uYW1lX2xlbmd0aH0KKyAgICAgIGxldCBtYXhf
bmFtZV9sZW5ndGggPSAwOworICAgICAgQXJyYXlQcm90b3R5cGVGb3JFYWNoLmNhbGwoc3RhY2ss
IGVhY2ggPT4geworICAgICAgICBsZXQgbmFtZSA9IGVhY2guZ2V0RnVuY3Rpb25OYW1lKCk7Cisg
ICAgICAgIGlmIChuYW1lID09IG51bGwpIG5hbWUgPSAiIjsKKyAgICAgICAgaWYgKGVhY2guaXNF
dmFsKCkpIHsKKyAgICAgICAgICBuYW1lID0gbmFtZTsKKyAgICAgICAgfSBlbHNlIGlmIChlYWNo
LmlzQ29uc3RydWN0b3IoKSkgeworICAgICAgICAgIG5hbWUgPSAibmV3ICIgKyBuYW1lOworICAg
ICAgICB9IGVsc2UgaWYgKGVhY2guaXNOYXRpdmUoKSkgeworICAgICAgICAgIG5hbWUgPSAibmF0
aXZlICIgKyBuYW1lOworICAgICAgICB9IGVsc2UgaWYgKCFlYWNoLmlzVG9wbGV2ZWwoKSkgewor
ICAgICAgICAgIG5hbWUgPSBlYWNoLmdldFR5cGVOYW1lKCkgKyAiLiIgKyBuYW1lOworICAgICAg
ICB9CisgICAgICAgIGVhY2gubmFtZSA9IG5hbWU7CisgICAgICAgIG1heF9uYW1lX2xlbmd0aCA9
IE1hdGgubWF4KG5hbWUubGVuZ3RoLCBtYXhfbmFtZV9sZW5ndGgpCisgICAgICB9KTsKKworICAg
ICAgLy8gRm9ybWF0IHN0YWNrIGZyYW1lcy4KKyAgICAgIHN0YWNrID0gQXJyYXlQcm90b3R5cGVN
YXAuY2FsbChzdGFjaywgZWFjaCA9PiB7CisgICAgICAgIGxldCBmcmFtZSA9ICIgICAgYXQgIiAr
IGVhY2gubmFtZS5wYWRFbmQobWF4X25hbWVfbGVuZ3RoKTsKKyAgICAgICAgbGV0IGZpbGVOYW1l
ID0gZWFjaC5nZXRGaWxlTmFtZSgpOworICAgICAgICBpZiAoZWFjaC5pc0V2YWwoKSkgcmV0dXJu
IGZyYW1lICsgIiAiICsgZWFjaC5nZXRFdmFsT3JpZ2luKCk7CisgICAgICAgIGZyYW1lICs9ICIg
IiArIChmaWxlTmFtZSA/IGZpbGVOYW1lIDogIiIpOworICAgICAgICBsZXQgbGluZT0gZWFjaC5n
ZXRMaW5lTnVtYmVyKCk7CisgICAgICAgIGZyYW1lICs9ICIgIiArIChsaW5lID8gbGluZSA6ICIi
KTsKKyAgICAgICAgbGV0IGNvbHVtbiA9IGVhY2guZ2V0Q29sdW1uTnVtYmVyKCk7CisgICAgICAg
IGZyYW1lICs9IChjb2x1bW4gPyAiOiIgKyBjb2x1bW4gOiAiIik7CisgICAgICAgIHJldHVybiBm
cmFtZTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuICIiICsgZXJyb3IubWVzc2FnZSArICJcbiIg
KyBBcnJheVByb3RvdHlwZUpvaW4uY2FsbChzdGFjaywgIlxuIik7CisgICAgfSBjYXRjaCAoZSkg
e307CisgICAgcmV0dXJuIGVycm9yLnN0YWNrOworICB9Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL3Y4L3dhc20tbW9kdWxlLWJ1aWxkZXIuanMgYi9KU1Rlc3RzL3dhc20vdjgvd2Fz
bS1tb2R1bGUtYnVpbGRlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLjQ2N2VkODRkMGU1OQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC93YXNt
LW1vZHVsZS1idWlsZGVyLmpzCkBAIC0wLDAgKzEsMjE2OSBAQAorLy8gQ29weXJpZ2h0IDIwMTYg
dGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIFVzZWQgZm9yIGVuY29k
aW5nIGYzMiBhbmQgZG91YmxlIGNvbnN0YW50cyB0byBiaXRzLgorbGV0IGJ5dGVfdmlldyA9IG5l
dyBVaW50OEFycmF5KDgpOworbGV0IGRhdGFfdmlldyA9IG5ldyBEYXRhVmlldyhieXRlX3ZpZXcu
YnVmZmVyKTsKKworLy8gVGhlIGJ5dGVzIGZ1bmN0aW9uIHJlY2VpdmVzIG9uZSBvZgorLy8gIC0g
c2V2ZXJhbCBhcmd1bWVudHMsIGVhY2ggb2Ygd2hpY2ggaXMgZWl0aGVyIGEgbnVtYmVyIG9yIGEg
c3RyaW5nIG9mIGxlbmd0aAorLy8gICAgMTsgaWYgaXQncyBhIHN0cmluZywgdGhlIGNoYXJjb2Rl
IG9mIHRoZSBjb250YWluZWQgY2hhcmFjdGVyIGlzIHVzZWQuCisvLyAgLSBhIHNpbmdsZSBhcnJh
eSBhcmd1bWVudCBjb250YWluaW5nIHRoZSBhY3R1YWwgYXJndW1lbnRzCisvLyAgLSBhIHNpbmds
ZSBzdHJpbmc7IHRoZSByZXR1cm5lZCBidWZmZXIgd2lsbCBjb250YWluIHRoZSBjaGFyIGNvZGVz
IG9mIGFsbAorLy8gICAgY29udGFpbmVkIGNoYXJhY3RlcnMuCitmdW5jdGlvbiBieXRlcyguLi5p
bnB1dCkgeworICBpZiAoaW5wdXQubGVuZ3RoID09IDEgJiYgdHlwZW9mIGlucHV0WzBdID09ICdh
cnJheScpIGlucHV0ID0gaW5wdXRbMF07CisgIGlmIChpbnB1dC5sZW5ndGggPT0gMSAmJiB0eXBl
b2YgaW5wdXRbMF0gPT0gJ3N0cmluZycpIHsKKyAgICBsZXQgbGVuID0gaW5wdXRbMF0ubGVuZ3Ro
OworICAgIGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IGxlbjsgaSsrKSB2aWV3W2ldID0gaW5wdXRbMF0uY2hhckNvZGVBdChpKTsKKyAgICBy
ZXR1cm4gdmlldy5idWZmZXI7CisgIH0KKyAgbGV0IHZpZXcgPSBuZXcgVWludDhBcnJheShpbnB1
dC5sZW5ndGgpOworICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7Cisg
ICAgbGV0IHZhbCA9IGlucHV0W2ldOworICAgIGlmICh0eXBlb2YgdmFsID09ICdzdHJpbmcnKSB7
CisgICAgICBpZiAodmFsLmxlbmd0aCAhPSAxKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcign
c3RyaW5nIGlucHV0cyBtdXN0IGhhdmUgbGVuZ3RoIDEnKTsKKyAgICAgIH0KKyAgICAgIHZhbCA9
IHZhbC5jaGFyQ29kZUF0KDApOworICAgIH0KKyAgICB2aWV3W2ldID0gdmFsIHwgMDsKKyAgfQor
ICByZXR1cm4gdmlldy5idWZmZXI7Cit9CisKKy8vIEhlYWRlciBkZWNsYXJhdGlvbiBjb25zdGFu
dHMKK3ZhciBrV2FzbUgwID0gMDsKK3ZhciBrV2FzbUgxID0gMHg2MTsKK3ZhciBrV2FzbUgyID0g
MHg3MzsKK3ZhciBrV2FzbUgzID0gMHg2ZDsKKwordmFyIGtXYXNtVjAgPSAweDE7Cit2YXIga1dh
c21WMSA9IDA7Cit2YXIga1dhc21WMiA9IDA7Cit2YXIga1dhc21WMyA9IDA7CisKK3ZhciBrSGVh
ZGVyU2l6ZSA9IDg7Cit2YXIga1BhZ2VTaXplID0gNjU1MzY7Cit2YXIga1NwZWNNYXhQYWdlcyA9
IDY1NTM2OwordmFyIGtNYXhWYXJJbnQzMlNpemUgPSA1OwordmFyIGtNYXhWYXJJbnQ2NFNpemUg
PSAxMDsKKworbGV0IGtEZWNsTm9Mb2NhbHMgPSAwOworCisvLyBTZWN0aW9uIGRlY2xhcmF0aW9u
IGNvbnN0YW50cworbGV0IGtVbmtub3duU2VjdGlvbkNvZGUgPSAwOworbGV0IGtUeXBlU2VjdGlv
bkNvZGUgPSAxOyAgICAgICAgLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0aW9ucworbGV0
IGtJbXBvcnRTZWN0aW9uQ29kZSA9IDI7ICAgICAgLy8gSW1wb3J0IGRlY2xhcmF0aW9ucworbGV0
IGtGdW5jdGlvblNlY3Rpb25Db2RlID0gMzsgICAgLy8gRnVuY3Rpb24gZGVjbGFyYXRpb25zCits
ZXQga1RhYmxlU2VjdGlvbkNvZGUgPSA0OyAgICAgICAvLyBJbmRpcmVjdCBmdW5jdGlvbiB0YWJs
ZSBhbmQgb3RoZXIgdGFibGVzCitsZXQga01lbW9yeVNlY3Rpb25Db2RlID0gNTsgICAgICAvLyBN
ZW1vcnkgYXR0cmlidXRlcworbGV0IGtHbG9iYWxTZWN0aW9uQ29kZSA9IDY7ICAgICAgLy8gR2xv
YmFsIGRlY2xhcmF0aW9ucworbGV0IGtFeHBvcnRTZWN0aW9uQ29kZSA9IDc7ICAgICAgLy8gRXhw
b3J0cworbGV0IGtTdGFydFNlY3Rpb25Db2RlID0gODsgICAgICAgLy8gU3RhcnQgZnVuY3Rpb24g
ZGVjbGFyYXRpb24KK2xldCBrRWxlbWVudFNlY3Rpb25Db2RlID0gOTsgICAgIC8vIEVsZW1lbnRz
IHNlY3Rpb24KK2xldCBrQ29kZVNlY3Rpb25Db2RlID0gMTA7ICAgICAgIC8vIEZ1bmN0aW9uIGNv
ZGUKK2xldCBrRGF0YVNlY3Rpb25Db2RlID0gMTE7ICAgICAgIC8vIERhdGEgc2VnbWVudHMKK2xl
dCBrRGF0YUNvdW50U2VjdGlvbkNvZGUgPSAxMjsgIC8vIERhdGEgc2VnbWVudCBjb3VudCAoYmV0
d2VlbiBFbGVtZW50ICYgQ29kZSkKK2xldCBrVGFnU2VjdGlvbkNvZGUgPSAxMzsgICAgICAgIC8v
IFRhZyBzZWN0aW9uIChiZXR3ZWVuIE1lbW9yeSAmIEdsb2JhbCkKKworLy8gTmFtZSBzZWN0aW9u
IHR5cGVzCitsZXQga01vZHVsZU5hbWVDb2RlID0gMDsKK2xldCBrRnVuY3Rpb25OYW1lc0NvZGUg
PSAxOworbGV0IGtMb2NhbE5hbWVzQ29kZSA9IDI7CisKK2xldCBrV2FzbUZ1bmN0aW9uVHlwZUZv
cm0gPSAweDYwOworbGV0IGtXYXNtU3RydWN0VHlwZUZvcm0gPSAweDVmOworbGV0IGtXYXNtQXJy
YXlUeXBlRm9ybSA9IDB4NWU7CitsZXQga1dhc21GdW5jdGlvblN1YnR5cGVGb3JtID0gMHg1ZDsK
K2xldCBrV2FzbVN0cnVjdFN1YnR5cGVGb3JtID0gMHg1YzsKK2xldCBrV2FzbUFycmF5U3VidHlw
ZUZvcm0gPSAweDViOworCitsZXQga0xpbWl0c05vTWF4aW11bSA9IDB4MDA7CitsZXQga0xpbWl0
c1dpdGhNYXhpbXVtID0gMHgwMTsKK2xldCBrTGltaXRzU2hhcmVkTm9NYXhpbXVtID0gMHgwMjsK
K2xldCBrTGltaXRzU2hhcmVkV2l0aE1heGltdW0gPSAweDAzOworbGV0IGtMaW1pdHNNZW1vcnk2
NE5vTWF4aW11bSA9IDB4MDQ7CitsZXQga0xpbWl0c01lbW9yeTY0V2l0aE1heGltdW0gPSAweDA1
OworCisvLyBTZWdtZW50IGZsYWdzCitsZXQga0FjdGl2ZU5vSW5kZXggPSAwOworbGV0IGtQYXNz
aXZlID0gMTsKK2xldCBrQWN0aXZlV2l0aEluZGV4ID0gMjsKK2xldCBrRGVjbGFyYXRpdmUgPSAz
OworbGV0IGtQYXNzaXZlV2l0aEVsZW1lbnRzID0gNTsKK2xldCBrRGVjbGFyYXRpdmVXaXRoRWxl
bWVudHMgPSA3OworCisvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbiBmbGFncworbGV0IGtEZWNsRnVu
Y3Rpb25OYW1lID0gMHgwMTsKK2xldCBrRGVjbEZ1bmN0aW9uSW1wb3J0ID0gMHgwMjsKK2xldCBr
RGVjbEZ1bmN0aW9uTG9jYWxzID0gMHgwNDsKK2xldCBrRGVjbEZ1bmN0aW9uRXhwb3J0ID0gMHgw
ODsKKworLy8gVmFsdWUgdHlwZXMgYW5kIHJlbGF0ZWQKK2xldCBrV2FzbVZvaWQgPSAweDQwOwor
bGV0IGtXYXNtSTMyID0gMHg3ZjsKK2xldCBrV2FzbUk2NCA9IDB4N2U7CitsZXQga1dhc21GMzIg
PSAweDdkOworbGV0IGtXYXNtRjY0ID0gMHg3YzsKK2xldCBrV2FzbVMxMjggPSAweDdiOworbGV0
IGtXYXNtSTggPSAweDdhOworbGV0IGtXYXNtSTE2ID0gMHg3OTsKKworLy8gVGhlc2UgYXJlIGRl
ZmluZWQgYXMgbmVnYXRpdmUgaW50ZWdlcnMgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIHBvc2l0
aXZlIHR5cGUKKy8vIGluZGljZXMuCitsZXQga1dhc21GdW5jUmVmID0gLTB4MTA7CitsZXQga1dh
c21BbnlGdW5jID0ga1dhc21GdW5jUmVmOyAgLy8gQWxpYXMgbmFtZWQgYXMgaW4gdGhlIEpTIEFQ
SSBzcGVjCitsZXQga1dhc21FeHRlcm5SZWYgPSAtMHgxMTsKK2xldCBrV2FzbUFueVJlZiA9IC0w
eDEyOworbGV0IGtXYXNtRXFSZWYgPSAtMHgxMzsKK2xldCBrV2FzbUkzMVJlZiA9IC0weDE2Owor
bGV0IGtXYXNtRGF0YVJlZiA9IC0weDE5OworCisvLyBVc2UgdGhlIHBvc2l0aXZlLWJ5dGUgdmVy
c2lvbnMgaW5zaWRlIGZ1bmN0aW9uIGJvZGllcy4KK2xldCBrTGViMTI4TWFzayA9IDB4N2Y7Cits
ZXQga0Z1bmNSZWZDb2RlID0ga1dhc21GdW5jUmVmICYga0xlYjEyOE1hc2s7CitsZXQga0FueUZ1
bmNDb2RlID0ga0Z1bmNSZWZDb2RlOyAgLy8gQWxpYXMgbmFtZWQgYXMgaW4gdGhlIEpTIEFQSSBz
cGVjCitsZXQga0V4dGVyblJlZkNvZGUgPSBrV2FzbUV4dGVyblJlZiAmIGtMZWIxMjhNYXNrOwor
bGV0IGtBbnlSZWZDb2RlID0ga1dhc21BbnlSZWYgJiBrTGViMTI4TWFzazsKK2xldCBrRXFSZWZD
b2RlID0ga1dhc21FcVJlZiAmIGtMZWIxMjhNYXNrOworbGV0IGtJMzFSZWZDb2RlID0ga1dhc21J
MzFSZWYgICYga0xlYjEyOE1hc2s7CitsZXQga0RhdGFSZWZDb2RlID0ga1dhc21EYXRhUmVmICAm
IGtMZWIxMjhNYXNrOworCitsZXQga1dhc21PcHRSZWYgPSAweDZjOworbGV0IGtXYXNtUmVmID0g
MHg2YjsKK2Z1bmN0aW9uIHdhc21PcHRSZWZUeXBlKGhlYXBfdHlwZSkgeworICByZXR1cm4ge29w
Y29kZToga1dhc21PcHRSZWYsIGhlYXBfdHlwZTogaGVhcF90eXBlfTsKK30KK2Z1bmN0aW9uIHdh
c21SZWZUeXBlKGhlYXBfdHlwZSkgeworICByZXR1cm4ge29wY29kZToga1dhc21SZWYsIGhlYXBf
dHlwZTogaGVhcF90eXBlfTsKK30KKworbGV0IGtXYXNtUnR0V2l0aERlcHRoID0gMHg2OTsKK2Z1
bmN0aW9uIHdhc21SdHQoaW5kZXgsIGRlcHRoKSB7CisgIGlmIChpbmRleCA8IDApIHRocm93IG5l
dyBFcnJvcigiRXhwZWN0aW5nIG5vbi1uZWdhdGl2ZSB0eXBlIGluZGV4Iik7CisgIHJldHVybiB7
b3Bjb2RlOiBrV2FzbVJ0dFdpdGhEZXB0aCwgaW5kZXg6IGluZGV4LCBkZXB0aDogZGVwdGh9Owor
fQorbGV0IGtXYXNtUnR0ID0gMHg2ODsKK2Z1bmN0aW9uIHdhc21SdHROb0RlcHRoKGluZGV4KSB7
CisgIGlmIChpbmRleCA8IDApIHRocm93IG5ldyBFcnJvcigiRXhwZWN0aW5nIG5vbi1uZWdhdGl2
ZSB0eXBlIGluZGV4Iik7CisgIHJldHVybiB7b3Bjb2RlOiBrV2FzbVJ0dCwgaW5kZXg6IGluZGV4
fTsKK30KKworbGV0IGtFeHRlcm5hbEZ1bmN0aW9uID0gMDsKK2xldCBrRXh0ZXJuYWxUYWJsZSA9
IDE7CitsZXQga0V4dGVybmFsTWVtb3J5ID0gMjsKK2xldCBrRXh0ZXJuYWxHbG9iYWwgPSAzOwor
bGV0IGtFeHRlcm5hbFRhZyA9IDQ7CisKK2xldCBrVGFibGVaZXJvID0gMDsKK2xldCBrTWVtb3J5
WmVybyA9IDA7CitsZXQga1NlZ21lbnRaZXJvID0gMDsKKworbGV0IGtFeGNlcHRpb25BdHRyaWJ1
dGUgPSAwOworCisvLyBVc2VmdWwgc2lnbmF0dXJlcworbGV0IGtTaWdfaV9pID0gbWFrZVNpZyhb
a1dhc21JMzJdLCBba1dhc21JMzJdKTsKK2xldCBrU2lnX2xfbCA9IG1ha2VTaWcoW2tXYXNtSTY0
XSwgW2tXYXNtSTY0XSk7CitsZXQga1NpZ19pX2wgPSBtYWtlU2lnKFtrV2FzbUk2NF0sIFtrV2Fz
bUkzMl0pOworbGV0IGtTaWdfaV9paSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMl0sIFtr
V2FzbUkzMl0pOworbGV0IGtTaWdfaV9paWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dhc21JMzIs
IGtXYXNtSTMyXSwgW2tXYXNtSTMyXSk7CitsZXQga1NpZ192X2lpaWkgPSBtYWtlU2lnKFtrV2Fz
bUkzMiwga1dhc21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMl0sIFtdKTsKK2xldCBrU2lnX2ZfZmYg
PSBtYWtlU2lnKFtrV2FzbUYzMiwga1dhc21GMzJdLCBba1dhc21GMzJdKTsKK2xldCBrU2lnX2Rf
ZGQgPSBtYWtlU2lnKFtrV2FzbUY2NCwga1dhc21GNjRdLCBba1dhc21GNjRdKTsKK2xldCBrU2ln
X2xfbGwgPSBtYWtlU2lnKFtrV2FzbUk2NCwga1dhc21JNjRdLCBba1dhc21JNjRdKTsKK2xldCBr
U2lnX2lfZGQgPSBtYWtlU2lnKFtrV2FzbUY2NCwga1dhc21GNjRdLCBba1dhc21JMzJdKTsKK2xl
dCBrU2lnX3ZfdiA9IG1ha2VTaWcoW10sIFtdKTsKK2xldCBrU2lnX2lfdiA9IG1ha2VTaWcoW10s
IFtrV2FzbUkzMl0pOworbGV0IGtTaWdfbF92ID0gbWFrZVNpZyhbXSwgW2tXYXNtSTY0XSk7Cits
ZXQga1NpZ19mX3YgPSBtYWtlU2lnKFtdLCBba1dhc21GMzJdKTsKK2xldCBrU2lnX2RfdiA9IG1h
a2VTaWcoW10sIFtrV2FzbUY2NF0pOworbGV0IGtTaWdfdl9pID0gbWFrZVNpZyhba1dhc21JMzJd
LCBbXSk7CitsZXQga1NpZ192X2lpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMyXSwgW10p
OworbGV0IGtTaWdfdl9paWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMy
XSwgW10pOworbGV0IGtTaWdfdl9sID0gbWFrZVNpZyhba1dhc21JNjRdLCBbXSk7CitsZXQga1Np
Z192X2QgPSBtYWtlU2lnKFtrV2FzbUY2NF0sIFtdKTsKK2xldCBrU2lnX3ZfZGQgPSBtYWtlU2ln
KFtrV2FzbUY2NCwga1dhc21GNjRdLCBbXSk7CitsZXQga1NpZ192X2RkaSA9IG1ha2VTaWcoW2tX
YXNtRjY0LCBrV2FzbUY2NCwga1dhc21JMzJdLCBbXSk7CitsZXQga1NpZ19paV92ID0gbWFrZVNp
ZyhbXSwgW2tXYXNtSTMyLCBrV2FzbUkzMl0pOworbGV0IGtTaWdfaWlpX3YgPSBtYWtlU2lnKFtd
LCBba1dhc21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMl0pOworbGV0IGtTaWdfaWlfaSA9IG1ha2VT
aWcoW2tXYXNtSTMyXSwgW2tXYXNtSTMyLCBrV2FzbUkzMl0pOworbGV0IGtTaWdfaWlpX2kgPSBt
YWtlU2lnKFtrV2FzbUkzMl0sIFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSk7CitsZXQg
a1NpZ19paV9paSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMl0sIFtrV2FzbUkzMiwga1dh
c21JMzJdKTsKK2xldCBrU2lnX2lpaV9paSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMl0s
IFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSk7CisKK2xldCBrU2lnX3ZfZiA9IG1ha2VT
aWcoW2tXYXNtRjMyXSwgW10pOworbGV0IGtTaWdfZl9mID0gbWFrZVNpZyhba1dhc21GMzJdLCBb
a1dhc21GMzJdKTsKK2xldCBrU2lnX2ZfZCA9IG1ha2VTaWcoW2tXYXNtRjY0XSwgW2tXYXNtRjMy
XSk7CitsZXQga1NpZ19kX2QgPSBtYWtlU2lnKFtrV2FzbUY2NF0sIFtrV2FzbUY2NF0pOworbGV0
IGtTaWdfcl9yID0gbWFrZVNpZyhba1dhc21FeHRlcm5SZWZdLCBba1dhc21FeHRlcm5SZWZdKTsK
K2xldCBrU2lnX2FfYSA9IG1ha2VTaWcoW2tXYXNtQW55RnVuY10sIFtrV2FzbUFueUZ1bmNdKTsK
K2xldCBrU2lnX2lfciA9IG1ha2VTaWcoW2tXYXNtRXh0ZXJuUmVmXSwgW2tXYXNtSTMyXSk7Cits
ZXQga1NpZ192X3IgPSBtYWtlU2lnKFtrV2FzbUV4dGVyblJlZl0sIFtdKTsKK2xldCBrU2lnX3Zf
YSA9IG1ha2VTaWcoW2tXYXNtQW55RnVuY10sIFtdKTsKK2xldCBrU2lnX3ZfcnIgPSBtYWtlU2ln
KFtrV2FzbUV4dGVyblJlZiwga1dhc21FeHRlcm5SZWZdLCBbXSk7CitsZXQga1NpZ192X2FhID0g
bWFrZVNpZyhba1dhc21BbnlGdW5jLCBrV2FzbUFueUZ1bmNdLCBbXSk7CitsZXQga1NpZ19yX3Yg
PSBtYWtlU2lnKFtdLCBba1dhc21FeHRlcm5SZWZdKTsKK2xldCBrU2lnX2FfdiA9IG1ha2VTaWco
W10sIFtrV2FzbUFueUZ1bmNdKTsKK2xldCBrU2lnX2FfaSA9IG1ha2VTaWcoW2tXYXNtSTMyXSwg
W2tXYXNtQW55RnVuY10pOworbGV0IGtTaWdfc19pID0gbWFrZVNpZyhba1dhc21JMzJdLCBba1dh
c21TMTI4XSk7CitsZXQga1NpZ19pX3MgPSBtYWtlU2lnKFtrV2FzbVMxMjhdLCBba1dhc21JMzJd
KTsKKworZnVuY3Rpb24gbWFrZVNpZyhwYXJhbXMsIHJlc3VsdHMpIHsKKyAgcmV0dXJuIHtwYXJh
bXM6IHBhcmFtcywgcmVzdWx0czogcmVzdWx0c307Cit9CisKK2Z1bmN0aW9uIG1ha2VTaWdfdl94
KHgpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW3hdLCBbXSk7Cit9CisKK2Z1bmN0aW9uIG1ha2VTaWdf
eF92KHgpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW10sIFt4XSk7Cit9CisKK2Z1bmN0aW9uIG1ha2VT
aWdfdl94eCh4KSB7CisgIHJldHVybiBtYWtlU2lnKFt4LCB4XSwgW10pOworfQorCitmdW5jdGlv
biBtYWtlU2lnX3JfdihyKSB7CisgIHJldHVybiBtYWtlU2lnKFtdLCBbcl0pOworfQorCitmdW5j
dGlvbiBtYWtlU2lnX3JfeChyLCB4KSB7CisgIHJldHVybiBtYWtlU2lnKFt4XSwgW3JdKTsKK30K
KworZnVuY3Rpb24gbWFrZVNpZ19yX3h4KHIsIHgpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW3gsIHhd
LCBbcl0pOworfQorCisvLyBPcGNvZGVzCitjb25zdCBrV2FzbU9wY29kZXMgPSB7CisgICdVbnJl
YWNoYWJsZSc6IDB4MDAsCisgICdOb3AnOiAweDAxLAorICAnQmxvY2snOiAweDAyLAorICAnTG9v
cCc6IDB4MDMsCisgICdJZic6IDB4MDQsCisgICdFbHNlJzogMHgwNSwKKyAgJ1RyeSc6IDB4MDYs
CisgICdDYXRjaCc6IDB4MDcsCisgICdUaHJvdyc6IDB4MDgsCisgICdSZXRocm93JzogMHgwOSwK
KyAgJ0NhdGNoQWxsJzogMHgxOSwKKyAgJ0VuZCc6IDB4MGIsCisgICdCcic6IDB4MGMsCisgICdC
cklmJzogMHgwZCwKKyAgJ0JyVGFibGUnOiAweDBlLAorICAnUmV0dXJuJzogMHgwZiwKKyAgJ0Nh
bGxGdW5jdGlvbic6IDB4MTAsCisgICdDYWxsSW5kaXJlY3QnOiAweDExLAorICAnUmV0dXJuQ2Fs
bCc6IDB4MTIsCisgICdSZXR1cm5DYWxsSW5kaXJlY3QnOiAweDEzLAorICAnQ2FsbFJlZic6IDB4
MTQsCisgICdSZXR1cm5DYWxsUmVmJzogMHgxNSwKKyAgJ0xldCc6IDB4MTcsCisgICdEZWxlZ2F0
ZSc6IDB4MTgsCisgICdEcm9wJzogMHgxYSwKKyAgJ1NlbGVjdCc6IDB4MWIsCisgICdTZWxlY3RX
aXRoVHlwZSc6IDB4MWMsCisgICdMb2NhbEdldCc6IDB4MjAsCisgICdMb2NhbFNldCc6IDB4MjEs
CisgICdMb2NhbFRlZSc6IDB4MjIsCisgICdHbG9iYWxHZXQnOiAweDIzLAorICAnR2xvYmFsU2V0
JzogMHgyNCwKKyAgJ1RhYmxlR2V0JzogMHgyNSwKKyAgJ1RhYmxlU2V0JzogMHgyNiwKKyAgJ0kz
MkxvYWRNZW0nOiAweDI4LAorICAnSTY0TG9hZE1lbSc6IDB4MjksCisgICdGMzJMb2FkTWVtJzog
MHgyYSwKKyAgJ0Y2NExvYWRNZW0nOiAweDJiLAorICAnSTMyTG9hZE1lbThTJzogMHgyYywKKyAg
J0kzMkxvYWRNZW04VSc6IDB4MmQsCisgICdJMzJMb2FkTWVtMTZTJzogMHgyZSwKKyAgJ0kzMkxv
YWRNZW0xNlUnOiAweDJmLAorICAnSTY0TG9hZE1lbThTJzogMHgzMCwKKyAgJ0k2NExvYWRNZW04
VSc6IDB4MzEsCisgICdJNjRMb2FkTWVtMTZTJzogMHgzMiwKKyAgJ0k2NExvYWRNZW0xNlUnOiAw
eDMzLAorICAnSTY0TG9hZE1lbTMyUyc6IDB4MzQsCisgICdJNjRMb2FkTWVtMzJVJzogMHgzNSwK
KyAgJ0kzMlN0b3JlTWVtJzogMHgzNiwKKyAgJ0k2NFN0b3JlTWVtJzogMHgzNywKKyAgJ0YzMlN0
b3JlTWVtJzogMHgzOCwKKyAgJ0Y2NFN0b3JlTWVtJzogMHgzOSwKKyAgJ0kzMlN0b3JlTWVtOCc6
IDB4M2EsCisgICdJMzJTdG9yZU1lbTE2JzogMHgzYiwKKyAgJ0k2NFN0b3JlTWVtOCc6IDB4M2Ms
CisgICdJNjRTdG9yZU1lbTE2JzogMHgzZCwKKyAgJ0k2NFN0b3JlTWVtMzInOiAweDNlLAorICAn
TWVtb3J5U2l6ZSc6IDB4M2YsCisgICdNZW1vcnlHcm93JzogMHg0MCwKKyAgJ0kzMkNvbnN0Jzog
MHg0MSwKKyAgJ0k2NENvbnN0JzogMHg0MiwKKyAgJ0YzMkNvbnN0JzogMHg0MywKKyAgJ0Y2NENv
bnN0JzogMHg0NCwKKyAgJ0kzMkVxeic6IDB4NDUsCisgICdJMzJFcSc6IDB4NDYsCisgICdJMzJO
ZSc6IDB4NDcsCisgICdJMzJMdFMnOiAweDQ4LAorICAnSTMyTHRVJzogMHg0OSwKKyAgJ0kzMkd0
Uyc6IDB4NGEsCisgICdJMzJHdFUnOiAweDRiLAorICAnSTMyTGVTJzogMHg0YywKKyAgJ0kzMkxl
VSc6IDB4NGQsCisgICdJMzJHZVMnOiAweDRlLAorICAnSTMyR2VVJzogMHg0ZiwKKyAgJ0k2NEVx
eic6IDB4NTAsCisgICdJNjRFcSc6IDB4NTEsCisgICdJNjROZSc6IDB4NTIsCisgICdJNjRMdFMn
OiAweDUzLAorICAnSTY0THRVJzogMHg1NCwKKyAgJ0k2NEd0Uyc6IDB4NTUsCisgICdJNjRHdFUn
OiAweDU2LAorICAnSTY0TGVTJzogMHg1NywKKyAgJ0k2NExlVSc6IDB4NTgsCisgICdJNjRHZVMn
OiAweDU5LAorICAnSTY0R2VVJzogMHg1YSwKKyAgJ0YzMkVxJzogMHg1YiwKKyAgJ0YzMk5lJzog
MHg1YywKKyAgJ0YzMkx0JzogMHg1ZCwKKyAgJ0YzMkd0JzogMHg1ZSwKKyAgJ0YzMkxlJzogMHg1
ZiwKKyAgJ0YzMkdlJzogMHg2MCwKKyAgJ0Y2NEVxJzogMHg2MSwKKyAgJ0Y2NE5lJzogMHg2MiwK
KyAgJ0Y2NEx0JzogMHg2MywKKyAgJ0Y2NEd0JzogMHg2NCwKKyAgJ0Y2NExlJzogMHg2NSwKKyAg
J0Y2NEdlJzogMHg2NiwKKyAgJ0kzMkNseic6IDB4NjcsCisgICdJMzJDdHonOiAweDY4LAorICAn
STMyUG9wY250JzogMHg2OSwKKyAgJ0kzMkFkZCc6IDB4NmEsCisgICdJMzJTdWInOiAweDZiLAor
ICAnSTMyTXVsJzogMHg2YywKKyAgJ0kzMkRpdlMnOiAweDZkLAorICAnSTMyRGl2VSc6IDB4NmUs
CisgICdJMzJSZW1TJzogMHg2ZiwKKyAgJ0kzMlJlbVUnOiAweDcwLAorICAnSTMyQW5kJzogMHg3
MSwKKyAgJ0kzMklvcic6IDB4NzIsCisgICdJMzJYb3InOiAweDczLAorICAnSTMyU2hsJzogMHg3
NCwKKyAgJ0kzMlNoclMnOiAweDc1LAorICAnSTMyU2hyVSc6IDB4NzYsCisgICdJMzJSb2wnOiAw
eDc3LAorICAnSTMyUm9yJzogMHg3OCwKKyAgJ0k2NENseic6IDB4NzksCisgICdJNjRDdHonOiAw
eDdhLAorICAnSTY0UG9wY250JzogMHg3YiwKKyAgJ0k2NEFkZCc6IDB4N2MsCisgICdJNjRTdWIn
OiAweDdkLAorICAnSTY0TXVsJzogMHg3ZSwKKyAgJ0k2NERpdlMnOiAweDdmLAorICAnSTY0RGl2
VSc6IDB4ODAsCisgICdJNjRSZW1TJzogMHg4MSwKKyAgJ0k2NFJlbVUnOiAweDgyLAorICAnSTY0
QW5kJzogMHg4MywKKyAgJ0k2NElvcic6IDB4ODQsCisgICdJNjRYb3InOiAweDg1LAorICAnSTY0
U2hsJzogMHg4NiwKKyAgJ0k2NFNoclMnOiAweDg3LAorICAnSTY0U2hyVSc6IDB4ODgsCisgICdJ
NjRSb2wnOiAweDg5LAorICAnSTY0Um9yJzogMHg4YSwKKyAgJ0YzMkFicyc6IDB4OGIsCisgICdG
MzJOZWcnOiAweDhjLAorICAnRjMyQ2VpbCc6IDB4OGQsCisgICdGMzJGbG9vcic6IDB4OGUsCisg
ICdGMzJUcnVuYyc6IDB4OGYsCisgICdGMzJOZWFyZXN0SW50JzogMHg5MCwKKyAgJ0YzMlNxcnQn
OiAweDkxLAorICAnRjMyQWRkJzogMHg5MiwKKyAgJ0YzMlN1Yic6IDB4OTMsCisgICdGMzJNdWwn
OiAweDk0LAorICAnRjMyRGl2JzogMHg5NSwKKyAgJ0YzMk1pbic6IDB4OTYsCisgICdGMzJNYXgn
OiAweDk3LAorICAnRjMyQ29weVNpZ24nOiAweDk4LAorICAnRjY0QWJzJzogMHg5OSwKKyAgJ0Y2
NE5lZyc6IDB4OWEsCisgICdGNjRDZWlsJzogMHg5YiwKKyAgJ0Y2NEZsb29yJzogMHg5YywKKyAg
J0Y2NFRydW5jJzogMHg5ZCwKKyAgJ0Y2NE5lYXJlc3RJbnQnOiAweDllLAorICAnRjY0U3FydCc6
IDB4OWYsCisgICdGNjRBZGQnOiAweGEwLAorICAnRjY0U3ViJzogMHhhMSwKKyAgJ0Y2NE11bCc6
IDB4YTIsCisgICdGNjREaXYnOiAweGEzLAorICAnRjY0TWluJzogMHhhNCwKKyAgJ0Y2NE1heCc6
IDB4YTUsCisgICdGNjRDb3B5U2lnbic6IDB4YTYsCisgICdJMzJDb252ZXJ0STY0JzogMHhhNywK
KyAgJ0kzMlNDb252ZXJ0RjMyJzogMHhhOCwKKyAgJ0kzMlVDb252ZXJ0RjMyJzogMHhhOSwKKyAg
J0kzMlNDb252ZXJ0RjY0JzogMHhhYSwKKyAgJ0kzMlVDb252ZXJ0RjY0JzogMHhhYiwKKyAgJ0k2
NFNDb252ZXJ0STMyJzogMHhhYywKKyAgJ0k2NFVDb252ZXJ0STMyJzogMHhhZCwKKyAgJ0k2NFND
b252ZXJ0RjMyJzogMHhhZSwKKyAgJ0k2NFVDb252ZXJ0RjMyJzogMHhhZiwKKyAgJ0k2NFNDb252
ZXJ0RjY0JzogMHhiMCwKKyAgJ0k2NFVDb252ZXJ0RjY0JzogMHhiMSwKKyAgJ0YzMlNDb252ZXJ0
STMyJzogMHhiMiwKKyAgJ0YzMlVDb252ZXJ0STMyJzogMHhiMywKKyAgJ0YzMlNDb252ZXJ0STY0
JzogMHhiNCwKKyAgJ0YzMlVDb252ZXJ0STY0JzogMHhiNSwKKyAgJ0YzMkNvbnZlcnRGNjQnOiAw
eGI2LAorICAnRjY0U0NvbnZlcnRJMzInOiAweGI3LAorICAnRjY0VUNvbnZlcnRJMzInOiAweGI4
LAorICAnRjY0U0NvbnZlcnRJNjQnOiAweGI5LAorICAnRjY0VUNvbnZlcnRJNjQnOiAweGJhLAor
ICAnRjY0Q29udmVydEYzMic6IDB4YmIsCisgICdJMzJSZWludGVycHJldEYzMic6IDB4YmMsCisg
ICdJNjRSZWludGVycHJldEY2NCc6IDB4YmQsCisgICdGMzJSZWludGVycHJldEkzMic6IDB4YmUs
CisgICdGNjRSZWludGVycHJldEk2NCc6IDB4YmYsCisgICdJMzJTRXh0ZW5kSTgnOiAweGMwLAor
ICAnSTMyU0V4dGVuZEkxNic6IDB4YzEsCisgICdJNjRTRXh0ZW5kSTgnOiAweGMyLAorICAnSTY0
U0V4dGVuZEkxNic6IDB4YzMsCisgICdJNjRTRXh0ZW5kSTMyJzogMHhjNCwKKyAgJ1JlZk51bGwn
OiAweGQwLAorICAnUmVmSXNOdWxsJzogMHhkMSwKKyAgJ1JlZkZ1bmMnOiAweGQyLAorICAnUmVm
QXNOb25OdWxsJzogMHhkMywKKyAgJ0JyT25OdWxsJzogMHhkNCwKKyAgJ1JlZkVxJzogMHhkNSwK
KyAgJ0JyT25Ob25OdWxsJzogMHhkNgorfTsKKworZnVuY3Rpb24gZGVmaW5lV2FzbU9wY29kZShu
YW1lLCB2YWx1ZSkgeworICBpZiAoZ2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVzID09PSB1bmRl
ZmluZWQpIHsKKyAgICBnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXMgPSB7fTsKKyAgfQorICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgbmFtZSwge3ZhbHVlOiB2YWx1ZX0pOwor
ICBpZiAoZ2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVzW3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7
CisgICAgdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgd2FzbSBvcGNvZGU6ICR7dmFsdWV9LiBQ
cmV2aW91cyBuYW1lOiAkeworICAgICAgICBnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXNbdmFs
dWVdfSwgbmV3IG5hbWU6ICR7bmFtZX1gKTsKKyAgfQorICBnbG9iYWxUaGlzLmtXYXNtT3Bjb2Rl
TmFtZXNbdmFsdWVdID0gbmFtZTsKK30KK2ZvciAobGV0IG5hbWUgaW4ga1dhc21PcGNvZGVzKSB7
CisgIGRlZmluZVdhc21PcGNvZGUoYGtFeHByJHtuYW1lfWAsIGtXYXNtT3Bjb2Rlc1tuYW1lXSk7
Cit9CisKKy8vIFByZWZpeCBvcGNvZGVzCitjb25zdCBrUHJlZml4T3Bjb2RlcyA9IHsKKyAgJ0dD
JzogMHhmYiwKKyAgJ051bWVyaWMnOiAweGZjLAorICAnU2ltZCc6IDB4ZmQsCisgICdBdG9taWMn
OiAweGZlCit9OworZm9yIChsZXQgcHJlZml4IGluIGtQcmVmaXhPcGNvZGVzKSB7CisgIGRlZmlu
ZVdhc21PcGNvZGUoYGske3ByZWZpeH1QcmVmaXhgLCBrUHJlZml4T3Bjb2Rlc1twcmVmaXhdKTsK
K30KKworLy8gR0Mgb3Bjb2RlcworbGV0IGtFeHByU3RydWN0TmV3V2l0aFJ0dCA9IDB4MDE7Cits
ZXQga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0V2l0aFJ0dCA9IDB4MDI7CitsZXQga0V4cHJTdHJ1Y3RH
ZXQgPSAweDAzOworbGV0IGtFeHByU3RydWN0R2V0UyA9IDB4MDQ7CitsZXQga0V4cHJTdHJ1Y3RH
ZXRVID0gMHgwNTsKK2xldCBrRXhwclN0cnVjdFNldCA9IDB4MDY7CitsZXQga0V4cHJTdHJ1Y3RO
ZXcgPSAweDA3OworbGV0IGtFeHByU3RydWN0TmV3RGVmYXVsdCA9IDB4MDg7CitsZXQga0V4cHJB
cnJheU5ld1dpdGhSdHQgPSAweDExOworbGV0IGtFeHByQXJyYXlOZXdEZWZhdWx0V2l0aFJ0dCA9
IDB4MTI7CitsZXQga0V4cHJBcnJheUdldCA9IDB4MTM7CitsZXQga0V4cHJBcnJheUdldFMgPSAw
eDE0OworbGV0IGtFeHByQXJyYXlHZXRVID0gMHgxNTsKK2xldCBrRXhwckFycmF5U2V0ID0gMHgx
NjsKK2xldCBrRXhwckFycmF5TGVuID0gMHgxNzsKK2xldCBrRXhwckFycmF5Q29weSA9IDB4MTg7
CitsZXQga0V4cHJBcnJheUluaXQgPSAweDE5OworbGV0IGtFeHByQXJyYXlJbml0U3RhdGljID0g
MHgxYTsKK2xldCBrRXhwckFycmF5TmV3ID0gMHgxYjsKK2xldCBrRXhwckFycmF5TmV3RGVmYXVs
dCA9IDB4MWM7CitsZXQga0V4cHJJMzFOZXcgPSAweDIwOworbGV0IGtFeHBySTMxR2V0UyA9IDB4
MjE7CitsZXQga0V4cHJJMzFHZXRVID0gMHgyMjsKK2xldCBrRXhwclJ0dENhbm9uID0gMHgzMDsK
K2xldCBrRXhwclJ0dFN1YiA9IDB4MzE7CitsZXQga0V4cHJSdHRGcmVzaFN1YiA9IDB4MzI7Cits
ZXQga0V4cHJSZWZUZXN0ID0gMHg0MDsKK2xldCBrRXhwclJlZkNhc3QgPSAweDQxOworbGV0IGtF
eHByQnJPbkNhc3QgPSAweDQyOworbGV0IGtFeHByQnJPbkNhc3RGYWlsID0gMHg0MzsKK2xldCBr
RXhwclJlZlRlc3RTdGF0aWMgPSAweDQ0OworbGV0IGtFeHByUmVmQ2FzdFN0YXRpYyA9IDB4NDU7
CitsZXQga0V4cHJCck9uQ2FzdFN0YXRpYyA9IDB4NDY7CitsZXQga0V4cHJCck9uQ2FzdFN0YXRp
Y0ZhaWwgPSAweDQ3OworbGV0IGtFeHByUmVmSXNGdW5jID0gMHg1MDsKK2xldCBrRXhwclJlZklz
RGF0YSA9IDB4NTE7CitsZXQga0V4cHJSZWZJc0kzMSA9IDB4NTI7CitsZXQga0V4cHJSZWZBc0Z1
bmMgPSAweDU4OworbGV0IGtFeHByUmVmQXNEYXRhID0gMHg1OTsKK2xldCBrRXhwclJlZkFzSTMx
ID0gMHg1YTsKK2xldCBrRXhwckJyT25GdW5jID0gMHg2MDsKK2xldCBrRXhwckJyT25EYXRhID0g
MHg2MTsKK2xldCBrRXhwckJyT25JMzEgPSAweDYyOworCisvLyBOdW1lcmljIG9wY29kZXMuCits
ZXQga0V4cHJJMzJTQ29udmVydFNhdEYzMiA9IDB4MDA7CitsZXQga0V4cHJJMzJVQ29udmVydFNh
dEYzMiA9IDB4MDE7CitsZXQga0V4cHJJMzJTQ29udmVydFNhdEY2NCA9IDB4MDI7CitsZXQga0V4
cHJJMzJVQ29udmVydFNhdEY2NCA9IDB4MDM7CitsZXQga0V4cHJJNjRTQ29udmVydFNhdEYzMiA9
IDB4MDQ7CitsZXQga0V4cHJJNjRVQ29udmVydFNhdEYzMiA9IDB4MDU7CitsZXQga0V4cHJJNjRT
Q29udmVydFNhdEY2NCA9IDB4MDY7CitsZXQga0V4cHJJNjRVQ29udmVydFNhdEY2NCA9IDB4MDc7
CitsZXQga0V4cHJNZW1vcnlJbml0ID0gMHgwODsKK2xldCBrRXhwckRhdGFEcm9wID0gMHgwOTsK
K2xldCBrRXhwck1lbW9yeUNvcHkgPSAweDBhOworbGV0IGtFeHByTWVtb3J5RmlsbCA9IDB4MGI7
CitsZXQga0V4cHJUYWJsZUluaXQgPSAweDBjOworbGV0IGtFeHByRWxlbURyb3AgPSAweDBkOwor
bGV0IGtFeHByVGFibGVDb3B5ID0gMHgwZTsKK2xldCBrRXhwclRhYmxlR3JvdyA9IDB4MGY7Cits
ZXQga0V4cHJUYWJsZVNpemUgPSAweDEwOworbGV0IGtFeHByVGFibGVGaWxsID0gMHgxMTsKKwor
Ly8gQXRvbWljIG9wY29kZXMuCitsZXQga0V4cHJBdG9taWNOb3RpZnkgPSAweDAwOworbGV0IGtF
eHBySTMyQXRvbWljV2FpdCA9IDB4MDE7CitsZXQga0V4cHJJNjRBdG9taWNXYWl0ID0gMHgwMjsK
K2xldCBrRXhwckkzMkF0b21pY0xvYWQgPSAweDEwOworbGV0IGtFeHBySTMyQXRvbWljTG9hZDhV
ID0gMHgxMjsKK2xldCBrRXhwckkzMkF0b21pY0xvYWQxNlUgPSAweDEzOworbGV0IGtFeHBySTMy
QXRvbWljU3RvcmUgPSAweDE3OworbGV0IGtFeHBySTMyQXRvbWljU3RvcmU4VSA9IDB4MTk7Cits
ZXQga0V4cHJJMzJBdG9taWNTdG9yZTE2VSA9IDB4MWE7CitsZXQga0V4cHJJMzJBdG9taWNBZGQg
PSAweDFlOworbGV0IGtFeHBySTMyQXRvbWljQWRkOFUgPSAweDIwOworbGV0IGtFeHBySTMyQXRv
bWljQWRkMTZVID0gMHgyMTsKK2xldCBrRXhwckkzMkF0b21pY1N1YiA9IDB4MjU7CitsZXQga0V4
cHJJMzJBdG9taWNTdWI4VSA9IDB4Mjc7CitsZXQga0V4cHJJMzJBdG9taWNTdWIxNlUgPSAweDI4
OworbGV0IGtFeHBySTMyQXRvbWljQW5kID0gMHgyYzsKK2xldCBrRXhwckkzMkF0b21pY0FuZDhV
ID0gMHgyZTsKK2xldCBrRXhwckkzMkF0b21pY0FuZDE2VSA9IDB4MmY7CitsZXQga0V4cHJJMzJB
dG9taWNPciA9IDB4MzM7CitsZXQga0V4cHJJMzJBdG9taWNPcjhVID0gMHgzNTsKK2xldCBrRXhw
ckkzMkF0b21pY09yMTZVID0gMHgzNjsKK2xldCBrRXhwckkzMkF0b21pY1hvciA9IDB4M2E7Cits
ZXQga0V4cHJJMzJBdG9taWNYb3I4VSA9IDB4M2M7CitsZXQga0V4cHJJMzJBdG9taWNYb3IxNlUg
PSAweDNkOworbGV0IGtFeHBySTMyQXRvbWljRXhjaGFuZ2UgPSAweDQxOworbGV0IGtFeHBySTMy
QXRvbWljRXhjaGFuZ2U4VSA9IDB4NDM7CitsZXQga0V4cHJJMzJBdG9taWNFeGNoYW5nZTE2VSA9
IDB4NDQ7CitsZXQga0V4cHJJMzJBdG9taWNDb21wYXJlRXhjaGFuZ2UgPSAweDQ4OworbGV0IGtF
eHBySTMyQXRvbWljQ29tcGFyZUV4Y2hhbmdlOFUgPSAweDRhOworbGV0IGtFeHBySTMyQXRvbWlj
Q29tcGFyZUV4Y2hhbmdlMTZVID0gMHg0YjsKKworbGV0IGtFeHBySTY0QXRvbWljTG9hZCA9IDB4
MTE7CitsZXQga0V4cHJJNjRBdG9taWNMb2FkOFUgPSAweDE0OworbGV0IGtFeHBySTY0QXRvbWlj
TG9hZDE2VSA9IDB4MTU7CitsZXQga0V4cHJJNjRBdG9taWNMb2FkMzJVID0gMHgxNjsKK2xldCBr
RXhwckk2NEF0b21pY1N0b3JlID0gMHgxODsKK2xldCBrRXhwckk2NEF0b21pY1N0b3JlOFUgPSAw
eDFiOworbGV0IGtFeHBySTY0QXRvbWljU3RvcmUxNlUgPSAweDFjOworbGV0IGtFeHBySTY0QXRv
bWljU3RvcmUzMlUgPSAweDFkOworbGV0IGtFeHBySTY0QXRvbWljQWRkID0gMHgxZjsKK2xldCBr
RXhwckk2NEF0b21pY0FkZDhVID0gMHgyMjsKK2xldCBrRXhwckk2NEF0b21pY0FkZDE2VSA9IDB4
MjM7CitsZXQga0V4cHJJNjRBdG9taWNBZGQzMlUgPSAweDI0OworbGV0IGtFeHBySTY0QXRvbWlj
U3ViID0gMHgyNjsKK2xldCBrRXhwckk2NEF0b21pY1N1YjhVID0gMHgyOTsKK2xldCBrRXhwckk2
NEF0b21pY1N1YjE2VSA9IDB4MmE7CitsZXQga0V4cHJJNjRBdG9taWNTdWIzMlUgPSAweDJiOwor
bGV0IGtFeHBySTY0QXRvbWljQW5kID0gMHgyZDsKK2xldCBrRXhwckk2NEF0b21pY0FuZDhVID0g
MHgzMDsKK2xldCBrRXhwckk2NEF0b21pY0FuZDE2VSA9IDB4MzE7CitsZXQga0V4cHJJNjRBdG9t
aWNBbmQzMlUgPSAweDMyOworbGV0IGtFeHBySTY0QXRvbWljT3IgPSAweDM0OworbGV0IGtFeHBy
STY0QXRvbWljT3I4VSA9IDB4Mzc7CitsZXQga0V4cHJJNjRBdG9taWNPcjE2VSA9IDB4Mzg7Cits
ZXQga0V4cHJJNjRBdG9taWNPcjMyVSA9IDB4Mzk7CitsZXQga0V4cHJJNjRBdG9taWNYb3IgPSAw
eDNiOworbGV0IGtFeHBySTY0QXRvbWljWG9yOFUgPSAweDNlOworbGV0IGtFeHBySTY0QXRvbWlj
WG9yMTZVID0gMHgzZjsKK2xldCBrRXhwckk2NEF0b21pY1hvcjMyVSA9IDB4NDA7CitsZXQga0V4
cHJJNjRBdG9taWNFeGNoYW5nZSA9IDB4NDI7CitsZXQga0V4cHJJNjRBdG9taWNFeGNoYW5nZThV
ID0gMHg0NTsKK2xldCBrRXhwckk2NEF0b21pY0V4Y2hhbmdlMTZVID0gMHg0NjsKK2xldCBrRXhw
ckk2NEF0b21pY0V4Y2hhbmdlMzJVID0gMHg0NzsKK2xldCBrRXhwckk2NEF0b21pY0NvbXBhcmVF
eGNoYW5nZSA9IDB4NDkKK2xldCBrRXhwckk2NEF0b21pY0NvbXBhcmVFeGNoYW5nZThVID0gMHg0
YzsKK2xldCBrRXhwckk2NEF0b21pY0NvbXBhcmVFeGNoYW5nZTE2VSA9IDB4NGQ7CitsZXQga0V4
cHJJNjRBdG9taWNDb21wYXJlRXhjaGFuZ2UzMlUgPSAweDRlOworCisvLyBTaW1kIG9wY29kZXMu
CitsZXQga0V4cHJTMTI4TG9hZE1lbSA9IDB4MDA7CitsZXQga0V4cHJTMTI4TG9hZDh4OFMgPSAw
eDAxOworbGV0IGtFeHByUzEyOExvYWQ4eDhVID0gMHgwMjsKK2xldCBrRXhwclMxMjhMb2FkMTZ4
NFMgPSAweDAzOworbGV0IGtFeHByUzEyOExvYWQxNng0VSA9IDB4MDQ7CitsZXQga0V4cHJTMTI4
TG9hZDMyeDJTID0gMHgwNTsKK2xldCBrRXhwclMxMjhMb2FkMzJ4MlUgPSAweDA2OworbGV0IGtF
eHByUzEyOExvYWQ4U3BsYXQgPSAweDA3OworbGV0IGtFeHByUzEyOExvYWQxNlNwbGF0ID0gMHgw
ODsKK2xldCBrRXhwclMxMjhMb2FkMzJTcGxhdCA9IDB4MDk7CitsZXQga0V4cHJTMTI4TG9hZDY0
U3BsYXQgPSAweDBhOworbGV0IGtFeHByUzEyOFN0b3JlTWVtID0gMHgwYjsKK2xldCBrRXhwclMx
MjhDb25zdCA9IDB4MGM7CitsZXQga0V4cHJJOHgxNlNodWZmbGUgPSAweDBkOworbGV0IGtFeHBy
STh4MTZTd2l6emxlID0gMHgwZTsKKworbGV0IGtFeHBySTh4MTZTcGxhdCA9IDB4MGY7CitsZXQg
a0V4cHJJMTZ4OFNwbGF0ID0gMHgxMDsKK2xldCBrRXhwckkzMng0U3BsYXQgPSAweDExOworbGV0
IGtFeHBySTY0eDJTcGxhdCA9IDB4MTI7CitsZXQga0V4cHJGMzJ4NFNwbGF0ID0gMHgxMzsKK2xl
dCBrRXhwckY2NHgyU3BsYXQgPSAweDE0OworbGV0IGtFeHBySTh4MTZFeHRyYWN0TGFuZVMgPSAw
eDE1OworbGV0IGtFeHBySTh4MTZFeHRyYWN0TGFuZVUgPSAweDE2OworbGV0IGtFeHBySTh4MTZS
ZXBsYWNlTGFuZSA9IDB4MTc7CitsZXQga0V4cHJJMTZ4OEV4dHJhY3RMYW5lUyA9IDB4MTg7Cits
ZXQga0V4cHJJMTZ4OEV4dHJhY3RMYW5lVSA9IDB4MTk7CitsZXQga0V4cHJJMTZ4OFJlcGxhY2VM
YW5lID0gMHgxYTsKK2xldCBrRXhwckkzMng0RXh0cmFjdExhbmUgPSAweDFiOworbGV0IGtFeHBy
STMyeDRSZXBsYWNlTGFuZSA9IDB4MWM7CitsZXQga0V4cHJJNjR4MkV4dHJhY3RMYW5lID0gMHgx
ZDsKK2xldCBrRXhwckk2NHgyUmVwbGFjZUxhbmUgPSAweDFlOworbGV0IGtFeHByRjMyeDRFeHRy
YWN0TGFuZSA9IDB4MWY7CitsZXQga0V4cHJGMzJ4NFJlcGxhY2VMYW5lID0gMHgyMDsKK2xldCBr
RXhwckY2NHgyRXh0cmFjdExhbmUgPSAweDIxOworbGV0IGtFeHByRjY0eDJSZXBsYWNlTGFuZSA9
IDB4MjI7CitsZXQga0V4cHJJOHgxNkVxID0gMHgyMzsKK2xldCBrRXhwckk4eDE2TmUgPSAweDI0
OworbGV0IGtFeHBySTh4MTZMdFMgPSAweDI1OworbGV0IGtFeHBySTh4MTZMdFUgPSAweDI2Owor
bGV0IGtFeHBySTh4MTZHdFMgPSAweDI3OworbGV0IGtFeHBySTh4MTZHdFUgPSAweDI4OworbGV0
IGtFeHBySTh4MTZMZVMgPSAweDI5OworbGV0IGtFeHBySTh4MTZMZVUgPSAweDJhOworbGV0IGtF
eHBySTh4MTZHZVMgPSAweDJiOworbGV0IGtFeHBySTh4MTZHZVUgPSAweDJjOworbGV0IGtFeHBy
STE2eDhFcSA9IDB4MmQ7CitsZXQga0V4cHJJMTZ4OE5lID0gMHgyZTsKK2xldCBrRXhwckkxNng4
THRTID0gMHgyZjsKK2xldCBrRXhwckkxNng4THRVID0gMHgzMDsKK2xldCBrRXhwckkxNng4R3RT
ID0gMHgzMTsKK2xldCBrRXhwckkxNng4R3RVID0gMHgzMjsKK2xldCBrRXhwckkxNng4TGVTID0g
MHgzMzsKK2xldCBrRXhwckkxNng4TGVVID0gMHgzNDsKK2xldCBrRXhwckkxNng4R2VTID0gMHgz
NTsKK2xldCBrRXhwckkxNng4R2VVID0gMHgzNjsKK2xldCBrRXhwckkzMng0RXEgPSAweDM3Owor
bGV0IGtFeHBySTMyeDROZSA9IDB4Mzg7CitsZXQga0V4cHJJMzJ4NEx0UyA9IDB4Mzk7CitsZXQg
a0V4cHJJMzJ4NEx0VSA9IDB4M2E7CitsZXQga0V4cHJJMzJ4NEd0UyA9IDB4M2I7CitsZXQga0V4
cHJJMzJ4NEd0VSA9IDB4M2M7CitsZXQga0V4cHJJMzJ4NExlUyA9IDB4M2Q7CitsZXQga0V4cHJJ
MzJ4NExlVSA9IDB4M2U7CitsZXQga0V4cHJJMzJ4NEdlUyA9IDB4M2Y7CitsZXQga0V4cHJJMzJ4
NEdlVSA9IDB4NDA7CitsZXQga0V4cHJGMzJ4NEVxID0gMHg0MTsKK2xldCBrRXhwckYzMng0TmUg
PSAweDQyOworbGV0IGtFeHByRjMyeDRMdCA9IDB4NDM7CitsZXQga0V4cHJGMzJ4NEd0ID0gMHg0
NDsKK2xldCBrRXhwckYzMng0TGUgPSAweDQ1OworbGV0IGtFeHByRjMyeDRHZSA9IDB4NDY7Cits
ZXQga0V4cHJGNjR4MkVxID0gMHg0NzsKK2xldCBrRXhwckY2NHgyTmUgPSAweDQ4OworbGV0IGtF
eHByRjY0eDJMdCA9IDB4NDk7CitsZXQga0V4cHJGNjR4Mkd0ID0gMHg0YTsKK2xldCBrRXhwckY2
NHgyTGUgPSAweDRiOworbGV0IGtFeHByRjY0eDJHZSA9IDB4NGM7CitsZXQga0V4cHJTMTI4Tm90
ID0gMHg0ZDsKK2xldCBrRXhwclMxMjhBbmQgPSAweDRlOworbGV0IGtFeHByUzEyOEFuZE5vdCA9
IDB4NGY7CitsZXQga0V4cHJTMTI4T3IgPSAweDUwOworbGV0IGtFeHByUzEyOFhvciA9IDB4NTE7
CitsZXQga0V4cHJTMTI4U2VsZWN0ID0gMHg1MjsKK2xldCBrRXhwclYxMjhBbnlUcnVlID0gMHg1
MzsKK2xldCBrRXhwclMxMjhMb2FkOExhbmUgPSAweDU0OworbGV0IGtFeHByUzEyOExvYWQxNkxh
bmUgPSAweDU1OworbGV0IGtFeHByUzEyOExvYWQzMkxhbmUgPSAweDU2OworbGV0IGtFeHByUzEy
OExvYWQ2NExhbmUgPSAweDU3OworbGV0IGtFeHByUzEyOFN0b3JlOExhbmUgPSAweDU4OworbGV0
IGtFeHByUzEyOFN0b3JlMTZMYW5lID0gMHg1OTsKK2xldCBrRXhwclMxMjhTdG9yZTMyTGFuZSA9
IDB4NWE7CitsZXQga0V4cHJTMTI4U3RvcmU2NExhbmUgPSAweDViOworbGV0IGtFeHByUzEyOExv
YWQzMlplcm8gPSAweDVjOworbGV0IGtFeHByUzEyOExvYWQ2NFplcm8gPSAweDVkOworbGV0IGtF
eHByRjMyeDREZW1vdGVGNjR4Mlplcm8gPSAweDVlOworbGV0IGtFeHByRjY0eDJQcm9tb3RlTG93
RjMyeDQgPSAweDVmOworbGV0IGtFeHBySTh4MTZBYnMgPSAweDYwOworbGV0IGtFeHBySTh4MTZO
ZWcgPSAweDYxOworbGV0IGtFeHBySTh4MTZQb3BjbnQgPSAweDYyOworbGV0IGtFeHBySTh4MTZB
bGxUcnVlID0gMHg2MzsKK2xldCBrRXhwckk4eDE2Qml0TWFzayA9IDB4NjQ7CitsZXQga0V4cHJJ
OHgxNlNDb252ZXJ0STE2eDggPSAweDY1OworbGV0IGtFeHBySTh4MTZVQ29udmVydEkxNng4ID0g
MHg2NjsKK2xldCBrRXhwckYzMng0Q2VpbCA9IDB4Njc7CitsZXQga0V4cHJGMzJ4NEZsb29yID0g
MHg2ODsKK2xldCBrRXhwckYzMng0VHJ1bmMgPSAweDY5OworbGV0IGtFeHByRjMyeDROZWFyZXN0
SW50ID0gMHg2YTsKK2xldCBrRXhwckk4eDE2U2hsID0gMHg2YjsKK2xldCBrRXhwckk4eDE2U2hy
UyA9IDB4NmM7CitsZXQga0V4cHJJOHgxNlNoclUgPSAweDZkOworbGV0IGtFeHBySTh4MTZBZGQg
PSAweDZlOworbGV0IGtFeHBySTh4MTZBZGRTYXRTID0gMHg2ZjsKK2xldCBrRXhwckk4eDE2QWRk
U2F0VSA9IDB4NzA7CitsZXQga0V4cHJJOHgxNlN1YiA9IDB4NzE7CitsZXQga0V4cHJJOHgxNlN1
YlNhdFMgPSAweDcyOworbGV0IGtFeHBySTh4MTZTdWJTYXRVID0gMHg3MzsKK2xldCBrRXhwckY2
NHgyQ2VpbCA9IDB4NzQ7CitsZXQga0V4cHJGNjR4MkZsb29yID0gMHg3NTsKK2xldCBrRXhwckk4
eDE2TWluUyA9IDB4NzY7CitsZXQga0V4cHJJOHgxNk1pblUgPSAweDc3OworbGV0IGtFeHBySTh4
MTZNYXhTID0gMHg3ODsKK2xldCBrRXhwckk4eDE2TWF4VSA9IDB4Nzk7CitsZXQga0V4cHJGNjR4
MlRydW5jID0gMHg3YTsKK2xldCBrRXhwckk4eDE2Um91bmRpbmdBdmVyYWdlVSA9IDB4N2I7Cits
ZXQga0V4cHJJMTZ4OEV4dEFkZFBhaXJ3aXNlSTh4MTZTID0gMHg3YzsKK2xldCBrRXhwckkxNng4
RXh0QWRkUGFpcndpc2VJOHgxNlUgPSAweDdkOworbGV0IGtFeHBySTMyeDRFeHRBZGRQYWlyd2lz
ZUkxNng4UyA9IDB4N2U7CitsZXQga0V4cHJJMzJ4NEV4dEFkZFBhaXJ3aXNlSTE2eDhVID0gMHg3
ZjsKK2xldCBrRXhwckkxNng4QWJzID0gMHg4MDsKK2xldCBrRXhwckkxNng4TmVnID0gMHg4MTsK
K2xldCBrRXhwckkxNng4UTE1TXVsUlNhdFMgPSAweDgyOworbGV0IGtFeHBySTE2eDhBbGxUcnVl
ID0gMHg4MzsKK2xldCBrRXhwckkxNng4Qml0TWFzayA9IDB4ODQ7CitsZXQga0V4cHJJMTZ4OFND
b252ZXJ0STMyeDQgPSAweDg1OworbGV0IGtFeHBySTE2eDhVQ29udmVydEkzMng0ID0gMHg4NjsK
K2xldCBrRXhwckkxNng4U0NvbnZlcnRJOHgxNkxvdyA9IDB4ODc7CitsZXQga0V4cHJJMTZ4OFND
b252ZXJ0STh4MTZIaWdoID0gMHg4ODsKK2xldCBrRXhwckkxNng4VUNvbnZlcnRJOHgxNkxvdyA9
IDB4ODk7CitsZXQga0V4cHJJMTZ4OFVDb252ZXJ0STh4MTZIaWdoID0gMHg4YTsKK2xldCBrRXhw
ckkxNng4U2hsID0gMHg4YjsKK2xldCBrRXhwckkxNng4U2hyUyA9IDB4OGM7CitsZXQga0V4cHJJ
MTZ4OFNoclUgPSAweDhkOworbGV0IGtFeHBySTE2eDhBZGQgPSAweDhlOworbGV0IGtFeHBySTE2
eDhBZGRTYXRTID0gMHg4ZjsKK2xldCBrRXhwckkxNng4QWRkU2F0VSA9IDB4OTA7CitsZXQga0V4
cHJJMTZ4OFN1YiA9IDB4OTE7CitsZXQga0V4cHJJMTZ4OFN1YlNhdFMgPSAweDkyOworbGV0IGtF
eHBySTE2eDhTdWJTYXRVID0gMHg5MzsKK2xldCBrRXhwckY2NHgyTmVhcmVzdEludCA9IDB4OTQ7
CitsZXQga0V4cHJJMTZ4OE11bCA9IDB4OTU7CitsZXQga0V4cHJJMTZ4OE1pblMgPSAweDk2Owor
bGV0IGtFeHBySTE2eDhNaW5VID0gMHg5NzsKK2xldCBrRXhwckkxNng4TWF4UyA9IDB4OTg7Cits
ZXQga0V4cHJJMTZ4OE1heFUgPSAweDk5OworbGV0IGtFeHBySTE2eDhSb3VuZGluZ0F2ZXJhZ2VV
ID0gMHg5YjsKK2xldCBrRXhwckkxNng4RXh0TXVsTG93STh4MTZTID0gMHg5YzsKK2xldCBrRXhw
ckkxNng4RXh0TXVsSGlnaEk4eDE2UyA9IDB4OWQ7CitsZXQga0V4cHJJMTZ4OEV4dE11bExvd0k4
eDE2VSA9IDB4OWU7CitsZXQga0V4cHJJMTZ4OEV4dE11bEhpZ2hJOHgxNlUgPSAweDlmOworbGV0
IGtFeHBySTMyeDRBYnMgPSAweGEwOworbGV0IGtFeHBySTMyeDROZWcgPSAweGExOworbGV0IGtF
eHBySTMyeDRBbGxUcnVlID0gMHhhMzsKK2xldCBrRXhwckkzMng0Qml0TWFzayA9IDB4YTQ7Cits
ZXQga0V4cHJJMzJ4NFNDb252ZXJ0STE2eDhMb3cgPSAweGE3OworbGV0IGtFeHBySTMyeDRTQ29u
dmVydEkxNng4SGlnaCA9IDB4YTg7CitsZXQga0V4cHJJMzJ4NFVDb252ZXJ0STE2eDhMb3cgPSAw
eGE5OworbGV0IGtFeHBySTMyeDRVQ29udmVydEkxNng4SGlnaCA9IDB4YWE7CitsZXQga0V4cHJJ
MzJ4NFNobCA9IDB4YWI7CitsZXQga0V4cHJJMzJ4NFNoclMgPSAweGFjOworbGV0IGtFeHBySTMy
eDRTaHJVID0gMHhhZDsKK2xldCBrRXhwckkzMng0QWRkID0gMHhhZTsKK2xldCBrRXhwckkzMng0
U3ViID0gMHhiMTsKK2xldCBrRXhwckkzMng0TXVsID0gMHhiNTsKK2xldCBrRXhwckkzMng0TWlu
UyA9IDB4YjY7CitsZXQga0V4cHJJMzJ4NE1pblUgPSAweGI3OworbGV0IGtFeHBySTMyeDRNYXhT
ID0gMHhiODsKK2xldCBrRXhwckkzMng0TWF4VSA9IDB4Yjk7CitsZXQga0V4cHJJMzJ4NERvdEkx
Nng4UyA9IDB4YmE7CitsZXQga0V4cHJJMzJ4NEV4dE11bExvd0kxNng4UyA9IDB4YmM7CitsZXQg
a0V4cHJJMzJ4NEV4dE11bEhpZ2hJMTZ4OFMgPSAweGJkOworbGV0IGtFeHBySTMyeDRFeHRNdWxM
b3dJMTZ4OFUgPSAweGJlOworbGV0IGtFeHBySTMyeDRFeHRNdWxIaWdoSTE2eDhVID0gMHhiZjsK
K2xldCBrRXhwckk2NHgyQWJzID0gMHhjMDsKK2xldCBrRXhwckk2NHgyTmVnID0gMHhjMTsKK2xl
dCBrRXhwckk2NHgyQWxsVHJ1ZSA9IDB4YzM7CitsZXQga0V4cHJJNjR4MkJpdE1hc2sgPSAweGM0
OworbGV0IGtFeHBySTY0eDJTQ29udmVydEkzMng0TG93ID0gMHhjNzsKK2xldCBrRXhwckk2NHgy
U0NvbnZlcnRJMzJ4NEhpZ2ggPSAweGM4OworbGV0IGtFeHBySTY0eDJVQ29udmVydEkzMng0TG93
ID0gMHhjOTsKK2xldCBrRXhwckk2NHgyVUNvbnZlcnRJMzJ4NEhpZ2ggPSAweGNhOworbGV0IGtF
eHBySTY0eDJTaGwgPSAweGNiOworbGV0IGtFeHBySTY0eDJTaHJTID0gMHhjYzsKK2xldCBrRXhw
ckk2NHgyU2hyVSA9IDB4Y2Q7CitsZXQga0V4cHJJNjR4MkFkZCA9IDB4Y2U7CitsZXQga0V4cHJJ
NjR4MlN1YiA9IDB4ZDE7CitsZXQga0V4cHJJNjR4Mk11bCA9IDB4ZDU7CitsZXQga0V4cHJJNjR4
MkVxID0gMHhkNjsKK2xldCBrRXhwckk2NHgyTmUgPSAweGQ3OworbGV0IGtFeHBySTY0eDJMdFMg
PSAweGQ4OworbGV0IGtFeHBySTY0eDJHdFMgPSAweGQ5OworbGV0IGtFeHBySTY0eDJMZVMgPSAw
eGRhOworbGV0IGtFeHBySTY0eDJHZVMgPSAweGRiOworbGV0IGtFeHBySTY0eDJFeHRNdWxMb3dJ
MzJ4NFMgPSAweGRjOworbGV0IGtFeHBySTY0eDJFeHRNdWxIaWdoSTMyeDRTID0gMHhkZDsKK2xl
dCBrRXhwckk2NHgyRXh0TXVsTG93STMyeDRVID0gMHhkZTsKK2xldCBrRXhwckk2NHgyRXh0TXVs
SGlnaEkzMng0VSA9IDB4ZGY7CitsZXQga0V4cHJGMzJ4NEFicyA9IDB4ZTA7CitsZXQga0V4cHJG
MzJ4NE5lZyA9IDB4ZTE7CitsZXQga0V4cHJGMzJ4NFNxcnQgPSAweGUzOworbGV0IGtFeHByRjMy
eDRBZGQgPSAweGU0OworbGV0IGtFeHByRjMyeDRTdWIgPSAweGU1OworbGV0IGtFeHByRjMyeDRN
dWwgPSAweGU2OworbGV0IGtFeHByRjMyeDREaXYgPSAweGU3OworbGV0IGtFeHByRjMyeDRNaW4g
PSAweGU4OworbGV0IGtFeHByRjMyeDRNYXggPSAweGU5OworbGV0IGtFeHByRjMyeDRQbWluID0g
MHhlYTsKK2xldCBrRXhwckYzMng0UG1heCA9IDB4ZWI7CitsZXQga0V4cHJGNjR4MkFicyA9IDB4
ZWM7CitsZXQga0V4cHJGNjR4Mk5lZyA9IDB4ZWQ7CitsZXQga0V4cHJGNjR4MlNxcnQgPSAweGVm
OworbGV0IGtFeHByRjY0eDJBZGQgPSAweGYwOworbGV0IGtFeHByRjY0eDJTdWIgPSAweGYxOwor
bGV0IGtFeHByRjY0eDJNdWwgPSAweGYyOworbGV0IGtFeHByRjY0eDJEaXYgPSAweGYzOworbGV0
IGtFeHByRjY0eDJNaW4gPSAweGY0OworbGV0IGtFeHByRjY0eDJNYXggPSAweGY1OworbGV0IGtF
eHByRjY0eDJQbWluID0gMHhmNjsKK2xldCBrRXhwckY2NHgyUG1heCA9IDB4Zjc7CitsZXQga0V4
cHJJMzJ4NFNDb252ZXJ0RjMyeDQgPSAweGY4OworbGV0IGtFeHBySTMyeDRVQ29udmVydEYzMng0
ID0gMHhmOTsKK2xldCBrRXhwckYzMng0U0NvbnZlcnRJMzJ4NCA9IDB4ZmE7CitsZXQga0V4cHJG
MzJ4NFVDb252ZXJ0STMyeDQgPSAweGZiOworbGV0IGtFeHBySTMyeDRUcnVuY1NhdEY2NHgyU1pl
cm8gPSAweGZjOworbGV0IGtFeHBySTMyeDRUcnVuY1NhdEY2NHgyVVplcm8gPSAweGZkOworbGV0
IGtFeHByRjY0eDJDb252ZXJ0TG93STMyeDRTID0gMHhmZTsKK2xldCBrRXhwckY2NHgyQ29udmVy
dExvd0kzMng0VSA9IDB4ZmY7CisKKy8vIENvbXBpbGF0aW9uIGhpbnQgY29uc3RhbnRzLgorbGV0
IGtDb21waWxhdGlvbkhpbnRTdHJhdGVneURlZmF1bHQgPSAweDAwOworbGV0IGtDb21waWxhdGlv
bkhpbnRTdHJhdGVneUxhenkgPSAweDAxOworbGV0IGtDb21waWxhdGlvbkhpbnRTdHJhdGVneUVh
Z2VyID0gMHgwMjsKK2xldCBrQ29tcGlsYXRpb25IaW50U3RyYXRlZ3lMYXp5QmFzZWxpbmVFYWdl
clRvcFRpZXIgPSAweDAzOworbGV0IGtDb21waWxhdGlvbkhpbnRUaWVyRGVmYXVsdCA9IDB4MDA7
CitsZXQga0NvbXBpbGF0aW9uSGludFRpZXJCYXNlbGluZSA9IDB4MDE7CitsZXQga0NvbXBpbGF0
aW9uSGludFRpZXJPcHRpbWl6ZWQgPSAweDAyOworCitsZXQga1RyYXBVbnJlYWNoYWJsZSA9IDA7
CitsZXQga1RyYXBNZW1PdXRPZkJvdW5kcyA9IDE7CitsZXQga1RyYXBEaXZCeVplcm8gPSAyOwor
bGV0IGtUcmFwRGl2VW5yZXByZXNlbnRhYmxlID0gMzsKK2xldCBrVHJhcFJlbUJ5WmVybyA9IDQ7
CitsZXQga1RyYXBGbG9hdFVucmVwcmVzZW50YWJsZSA9IDU7CitsZXQga1RyYXBUYWJsZU91dE9m
Qm91bmRzID0gNjsKK2xldCBrVHJhcEZ1bmNTaWdNaXNtYXRjaCA9IDc7CitsZXQga1RyYXBVbmFs
aWduZWRBY2Nlc3MgPSA4OworbGV0IGtUcmFwRGF0YVNlZ21lbnREcm9wcGVkID0gOTsKK2xldCBr
VHJhcEVsZW1TZWdtZW50RHJvcHBlZCA9IDEwOworbGV0IGtUcmFwUmV0aHJvd051bGwgPSAxMTsK
KworbGV0IGtUcmFwTXNncyA9IFsKKyAgL1VucmVhY2hhYmxlLywgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAtLQorICAnbWVtb3J5IGFjY2VzcyBvdXQgb2YgYm91bmRzJywg
ICAgICAgICAgICAgICAgICAgIC8vIC0tCisgIC9EaXZpc2lvbiBieSB6ZXJvLywgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgJ2RpdmlkZSByZXN1bHQgdW5yZXByZXNlbnRh
YmxlJywgICAgICAgICAgICAgICAgICAvLyAtLQorICAncmVtYWluZGVyIGJ5IHplcm8nLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdmbG9hdCB1bnJlcHJlc2VudGFibGUg
aW4gaW50ZWdlciByYW5nZScsICAgICAgICAgLy8gLS0KKyAgJ3RhYmxlIGluZGV4IGlzIG91dCBv
ZiBib3VuZHMnLCAgICAgICAgICAgICAgICAgICAvLyAtLQorICAnbnVsbCBmdW5jdGlvbiBvciBm
dW5jdGlvbiBzaWduYXR1cmUgbWlzbWF0Y2gnLCAgIC8vIC0tCisgICdvcGVyYXRpb24gZG9lcyBu
b3Qgc3VwcG9ydCB1bmFsaWduZWQgYWNjZXNzZXMnLCAgLy8gLS0KKyAgJ2RhdGEgc2VnbWVudCBo
YXMgYmVlbiBkcm9wcGVkJywgICAgICAgICAgICAgICAgICAvLyAtLQorICAnZWxlbWVudCBzZWdt
ZW50IGhhcyBiZWVuIGRyb3BwZWQnLCAgICAgICAgICAgICAgIC8vIC0tCisgICdyZXRocm93aW5n
IG51bGwgdmFsdWUnICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0KK107CisKKy8vIFRo
aXMgcmVxdWlyZXMgdGVzdC9tanN1bml0L21qc3VuaXQuanMuCitmdW5jdGlvbiBhc3NlcnRUcmFw
cyh0cmFwLCBjb2RlKSB7CisgIGFzc2VydFRocm93cyhjb2RlLCBXZWJBc3NlbWJseS5SdW50aW1l
RXJyb3IsIGtUcmFwTXNnc1t0cmFwXSk7Cit9CisKK2NsYXNzIEJpbmFyeSB7CisgIGNvbnN0cnVj
dG9yKCkgeworICAgIHRoaXMubGVuZ3RoID0gMDsKKyAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50
OEFycmF5KDgxOTIpOworICB9CisKKyAgZW5zdXJlX3NwYWNlKG5lZWRlZCkgeworICAgIGlmICh0
aGlzLmJ1ZmZlci5sZW5ndGggLSB0aGlzLmxlbmd0aCA+PSBuZWVkZWQpIHJldHVybjsKKyAgICBs
ZXQgbmV3X2NhcGFjaXR5ID0gdGhpcy5idWZmZXIubGVuZ3RoICogMjsKKyAgICB3aGlsZSAobmV3
X2NhcGFjaXR5IC0gdGhpcy5sZW5ndGggPCBuZWVkZWQpIG5ld19jYXBhY2l0eSAqPSAyOworICAg
IGxldCBuZXdfYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkobmV3X2NhcGFjaXR5KTsKKyAgICBuZXdf
YnVmZmVyLnNldCh0aGlzLmJ1ZmZlcik7CisgICAgdGhpcy5idWZmZXIgPSBuZXdfYnVmZmVyOwor
ICB9CisKKyAgdHJ1bmNfYnVmZmVyKCkgeworICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0aGlz
LmJ1ZmZlci5idWZmZXIsIDAsIHRoaXMubGVuZ3RoKTsKKyAgfQorCisgIHJlc2V0KCkgeworICAg
IHRoaXMubGVuZ3RoID0gMDsKKyAgfQorCisgIGVtaXRfdTgodmFsKSB7CisgICAgdGhpcy5lbnN1
cmVfc3BhY2UoMSk7CisgICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWw7CisgIH0K
KworICBlbWl0X3UxNih2YWwpIHsKKyAgICB0aGlzLmVuc3VyZV9zcGFjZSgyKTsKKyAgICB0aGlz
LmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbDsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0
aCsrXSA9IHZhbCA+PiA4OworICB9CisKKyAgZW1pdF91MzIodmFsKSB7CisgICAgdGhpcy5lbnN1
cmVfc3BhY2UoNCk7CisgICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWw7CisgICAg
dGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWwgPj4gODsKKyAgICB0aGlzLmJ1ZmZlclt0
aGlzLmxlbmd0aCsrXSA9IHZhbCA+PiAxNjsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsr
XSA9IHZhbCA+PiAyNDsKKyAgfQorCisgIGVtaXRfbGViX3UodmFsLCBtYXhfbGVuKSB7CisgICAg
dGhpcy5lbnN1cmVfc3BhY2UobWF4X2xlbik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhf
bGVuOyArK2kpIHsKKyAgICAgIGxldCB2ID0gdmFsICYgMHhmZjsKKyAgICAgIHZhbCA9IHZhbCA+
Pj4gNzsKKyAgICAgIGlmICh2YWwgPT0gMCkgeworICAgICAgICB0aGlzLmJ1ZmZlclt0aGlzLmxl
bmd0aCsrXSA9IHY7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHRoaXMuYnVmZmVy
W3RoaXMubGVuZ3RoKytdID0gdiB8IDB4ODA7CisgICAgfQorICAgIHRocm93IG5ldyBFcnJvcign
TGViIHZhbHVlIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJyArIG1heF9sZW4pOworICB9CisK
KyAgZW1pdF91MzJ2KHZhbCkgeworICAgIHRoaXMuZW1pdF9sZWJfdSh2YWwsIGtNYXhWYXJJbnQz
MlNpemUpOworICB9CisKKyAgZW1pdF91NjR2KHZhbCkgeworICAgIHRoaXMuZW1pdF9sZWJfdSh2
YWwsIGtNYXhWYXJJbnQ2NFNpemUpOworICB9CisKKyAgZW1pdF9ieXRlcyhkYXRhKSB7CisgICAg
dGhpcy5lbnN1cmVfc3BhY2UoZGF0YS5sZW5ndGgpOworICAgIHRoaXMuYnVmZmVyLnNldChkYXRh
LCB0aGlzLmxlbmd0aCk7CisgICAgdGhpcy5sZW5ndGggKz0gZGF0YS5sZW5ndGg7CisgIH0KKwor
ICBlbWl0X3N0cmluZyhzdHJpbmcpIHsKKyAgICAvLyBXaGVuIHRlc3RpbmcgaWxsZWdhbCBuYW1l
cywgd2UgcGFzcyBhIGJ5dGUgYXJyYXkgZGlyZWN0bHkuCisgICAgaWYgKHN0cmluZyBpbnN0YW5j
ZW9mIEFycmF5KSB7CisgICAgICB0aGlzLmVtaXRfdTMydihzdHJpbmcubGVuZ3RoKTsKKyAgICAg
IHRoaXMuZW1pdF9ieXRlcyhzdHJpbmcpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IFRoaXMgaXMgdGhlIGhhY2t5IHdheSB0byBjb252ZXJ0IGEgSmF2YVNjcmlwdCBzdHJpbmcgdG8g
YSBVVEY4IGVuY29kZWQKKyAgICAvLyBzdHJpbmcgb25seSBjb250YWluaW5nIHNpbmdsZS1ieXRl
IGNoYXJhY3RlcnMuCisgICAgbGV0IHN0cmluZ191dGY4ID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29t
cG9uZW50KHN0cmluZykpOworICAgIHRoaXMuZW1pdF91MzJ2KHN0cmluZ191dGY4Lmxlbmd0aCk7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdfdXRmOC5sZW5ndGg7IGkrKykgeworICAg
ICAgdGhpcy5lbWl0X3U4KHN0cmluZ191dGY4LmNoYXJDb2RlQXQoaSkpOworICAgIH0KKyAgfQor
CisgIGVtaXRfaGVhcF90eXBlKGhlYXBfdHlwZSkgeworICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNt
U2lnbmVkTGViKGhlYXBfdHlwZSwga01heFZhckludDMyU2l6ZSkpOworICB9CisKKyAgZW1pdF90
eXBlKHR5cGUpIHsKKyAgICBpZiAoKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVyJykgeworICAgICAg
dGhpcy5lbWl0X3U4KHR5cGUgPj0gMCA/IHR5cGUgOiB0eXBlICYga0xlYjEyOE1hc2spOworICAg
IH0gZWxzZSB7CisgICAgICB0aGlzLmVtaXRfdTgodHlwZS5vcGNvZGUpOworICAgICAgaWYgKCdk
ZXB0aCcgaW4gdHlwZSkgdGhpcy5lbWl0X3U4KHR5cGUuZGVwdGgpOworICAgICAgdGhpcy5lbWl0
X2hlYXBfdHlwZSh0eXBlLmhlYXBfdHlwZSk7CisgICAgfQorICB9CisKKyAgZW1pdF9pbml0X2V4
cHJfcmVjdXJzaXZlKGV4cHIpIHsKKyAgICBzd2l0Y2ggKGV4cHIua2luZCkgeworICAgICAgY2Fz
ZSBrRXhwckdsb2JhbEdldDoKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtFeHByR2xvYmFsR2V0KTsK
KyAgICAgICAgdGhpcy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBrRXhwckkzMkNvbnN0OgorICAgICAgICB0aGlzLmVtaXRfYnl0ZXMod2FzbUkzMkNv
bnN0KGV4cHIudmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHBySTY0Q29u
c3Q6CisgICAgICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNtSTY0Q29uc3QoZXhwci52YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJGMzJDb25zdDoKKyAgICAgICAgdGhpcy5l
bWl0X2J5dGVzKHdhc21GMzJDb25zdChleHByLnZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBrRXhwckY2NENvbnN0OgorICAgICAgICB0aGlzLmVtaXRfYnl0ZXMod2FzbUY2NENv
bnN0KGV4cHIudmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtTaW1kUHJlZml4
OgorICAgICAgICB0aGlzLmVtaXRfYnl0ZXMod2FzbVMxMjhDb25zdChleHByLnZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwclJlZkZ1bmM6CisgICAgICAgIHRoaXMuZW1p
dF91OChrRXhwclJlZkZ1bmMpOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByUmVmTnVsbDoKKyAgICAgICAgdGhpcy5l
bWl0X3U4KGtFeHByUmVmTnVsbCk7CisgICAgICAgIHRoaXMuZW1pdF9oZWFwX3R5cGUoZXhwci52
YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwclN0cnVjdE5ldzoKKyAgICAg
IGNhc2Uga0V4cHJTdHJ1Y3ROZXdXaXRoUnR0OgorICAgICAgY2FzZSBrRXhwclN0cnVjdE5ld0Rl
ZmF1bHQ6CisgICAgICBjYXNlIGtFeHByU3RydWN0TmV3RGVmYXVsdFdpdGhSdHQ6CisgICAgICAg
IGZvciAobGV0IG9wZXJhbmQgb2YgZXhwci5vcGVyYW5kcykgeworICAgICAgICAgIHRoaXMuZW1p
dF9pbml0X2V4cHJfcmVjdXJzaXZlKG9wZXJhbmQpOworICAgICAgICB9CisgICAgICAgIHRoaXMu
ZW1pdF91OChrR0NQcmVmaXgpOworICAgICAgICB0aGlzLmVtaXRfdTgoZXhwci5raW5kKTsKKyAg
ICAgICAgdGhpcy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBrRXhwckFycmF5SW5pdDoKKyAgICAgIGNhc2Uga0V4cHJBcnJheUluaXRTdGF0aWM6Cisg
ICAgICAgIGZvciAobGV0IG9wZXJhbmQgb2YgZXhwci5vcGVyYW5kcykgeworICAgICAgICAgIHRo
aXMuZW1pdF9pbml0X2V4cHJfcmVjdXJzaXZlKG9wZXJhbmQpOworICAgICAgICB9CisgICAgICAg
IHRoaXMuZW1pdF91OChrR0NQcmVmaXgpOworICAgICAgICB0aGlzLmVtaXRfdTgoZXhwci5raW5k
KTsKKyAgICAgICAgdGhpcy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIHRoaXMuZW1p
dF91MzJ2KGV4cHIub3BlcmFuZHMubGVuZ3RoIC0gMSk7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBrRXhwclJ0dENhbm9uOgorICAgICAgICB0aGlzLmVtaXRfdTgoa0dDUHJlZml4KTsKKyAg
ICAgICAgdGhpcy5lbWl0X3U4KGtFeHByUnR0Q2Fub24pOworICAgICAgICB0aGlzLmVtaXRfdTMy
dihleHByLnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByUnR0U3ViOgor
ICAgICAgICB0aGlzLmVtaXRfaW5pdF9leHByX3JlY3Vyc2l2ZShleHByLnBhcmVudCk7CisgICAg
ICAgIHRoaXMuZW1pdF91OChrR2NQcmVmaXgpOworICAgICAgICB0aGlzLmVtaXRfdTgoa0V4cHJS
dHRTdWIpOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIGtFeHByUnR0RnJlc2hTdWI6CisgICAgICAgIHRoaXMuZW1pdF9pbml0
X2V4cHJfcmVjdXJzaXZlKGV4cHIucGFyZW50KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtHY1By
ZWZpeCk7CisgICAgICAgIHRoaXMuZW1pdF91OChrRXhwclJ0dEZyZXNoU3ViKTsKKyAgICAgICAg
dGhpcy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQor
CisgIGVtaXRfaW5pdF9leHByKGV4cHIpIHsKKyAgICB0aGlzLmVtaXRfaW5pdF9leHByX3JlY3Vy
c2l2ZShleHByKTsKKyAgICB0aGlzLmVtaXRfdTgoa0V4cHJFbmQpOworICB9CisKKyAgZW1pdF9o
ZWFkZXIoKSB7CisgICAgdGhpcy5lbWl0X2J5dGVzKFsKKyAgICAgIGtXYXNtSDAsIGtXYXNtSDEs
IGtXYXNtSDIsIGtXYXNtSDMsIGtXYXNtVjAsIGtXYXNtVjEsIGtXYXNtVjIsIGtXYXNtVjMKKyAg
ICBdKTsKKyAgfQorCisgIGVtaXRfc2VjdGlvbihzZWN0aW9uX2NvZGUsIGNvbnRlbnRfZ2VuZXJh
dG9yKSB7CisgICAgLy8gRW1pdCBzZWN0aW9uIG5hbWUuCisgICAgdGhpcy5lbWl0X3U4KHNlY3Rp
b25fY29kZSk7CisgICAgLy8gRW1pdCB0aGUgc2VjdGlvbiB0byBhIHRlbXBvcmFyeSBidWZmZXI6
IGl0cyBmdWxsIGxlbmd0aCBpc24ndCBrbm93IHlldC4KKyAgICBjb25zdCBzZWN0aW9uID0gbmV3
IEJpbmFyeTsKKyAgICBjb250ZW50X2dlbmVyYXRvcihzZWN0aW9uKTsKKyAgICAvLyBFbWl0IHNl
Y3Rpb24gbGVuZ3RoLgorICAgIHRoaXMuZW1pdF91MzJ2KHNlY3Rpb24ubGVuZ3RoKTsKKyAgICAv
LyBDb3B5IHRoZSB0ZW1wb3JhcnkgYnVmZmVyLgorICAgIC8vIEF2b2lkIHNwcmVhZCBiZWNhdXNl
IHtzZWN0aW9ufSBjYW4gYmUgaHVnZS4KKyAgICB0aGlzLmVtaXRfYnl0ZXMoc2VjdGlvbi50cnVu
Y19idWZmZXIoKSk7CisgIH0KK30KKworY2xhc3MgV2FzbUZ1bmN0aW9uQnVpbGRlciB7CisgIC8v
IEVuY29kaW5nIG9mIGxvY2FsIG5hbWVzOiBhIHN0cmluZyBjb3JyZXNwb25kcyB0byBhIGxvY2Fs
IG5hbWUsCisgIC8vIGEgbnVtYmVyIG4gY29ycmVzcG9uZHMgdG8gbiB1bmRlZmluZWQgbmFtZXMu
CisgIGNvbnN0cnVjdG9yKG1vZHVsZSwgbmFtZSwgdHlwZV9pbmRleCwgYXJnX25hbWVzKSB7Cisg
ICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7CisgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICB0aGlz
LnR5cGVfaW5kZXggPSB0eXBlX2luZGV4OworICAgIHRoaXMuYm9keSA9IFtdOworICAgIHRoaXMu
bG9jYWxzID0gW107CisgICAgdGhpcy5sb2NhbF9uYW1lcyA9IGFyZ19uYW1lczsKKyAgICB0aGlz
LmJvZHlfb2Zmc2V0ID0gdW5kZWZpbmVkOyAgLy8gTm90IHZhbGlkIHVudGlsIG1vZHVsZSBpcyBz
ZXJpYWxpemVkLgorICB9CisKKyAgbnVtTG9jYWxOYW1lcygpIHsKKyAgICBsZXQgbnVtX2xvY2Fs
X25hbWVzID0gMDsKKyAgICBmb3IgKGxldCBsb2NfbmFtZSBvZiB0aGlzLmxvY2FsX25hbWVzKSB7
CisgICAgICBpZiAodHlwZW9mIGxvY19uYW1lID09ICdzdHJpbmcnKSArK251bV9sb2NhbF9uYW1l
czsKKyAgICB9CisgICAgcmV0dXJuIG51bV9sb2NhbF9uYW1lczsKKyAgfQorCisgIGV4cG9ydEFz
KG5hbWUpIHsKKyAgICB0aGlzLm1vZHVsZS5hZGRFeHBvcnQobmFtZSwgdGhpcy5pbmRleCk7Cisg
ICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBleHBvcnRGdW5jKCkgeworICAgIHRoaXMuZXhwb3J0
QXModGhpcy5uYW1lKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHNldENvbXBpbGF0aW9u
SGludChzdHJhdGVneSwgYmFzZWxpbmVUaWVyLCB0b3BUaWVyKSB7CisgICAgdGhpcy5tb2R1bGUu
c2V0Q29tcGlsYXRpb25IaW50KHN0cmF0ZWd5LCBiYXNlbGluZVRpZXIsIHRvcFRpZXIsIHRoaXMu
aW5kZXgpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRkQm9keShib2R5KSB7CisgICAg
Zm9yIChsZXQgYiBvZiBib2R5KSB7CisgICAgICBpZiAodHlwZW9mIGIgIT09ICdudW1iZXInIHx8
IChiICYgKH4weEZGKSkgIT09IDApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKAorICAgICAg
ICAgICAgJ2ludmFsaWQgYm9keSAoZW50cmllcyBtdXN0IGJlIDggYml0IG51bWJlcnMpOiAnICsg
Ym9keSk7CisgICAgICB9CisgICAgfQorICAgIHRoaXMuYm9keSA9IGJvZHkuc2xpY2UoKTsKKyAg
ICAvLyBBdXRvbWF0aWNhbGx5IGFkZCB0aGUgZW5kIGZvciB0aGUgZnVuY3Rpb24gYmxvY2sgdG8g
dGhlIGJvZHkuCisgICAgdGhpcy5ib2R5LnB1c2goa0V4cHJFbmQpOworICAgIHJldHVybiB0aGlz
OworICB9CisKKyAgYWRkQm9keVdpdGhFbmQoYm9keSkgeworICAgIHRoaXMuYm9keSA9IGJvZHk7
CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBnZXROdW1Mb2NhbHMoKSB7CisgICAgbGV0IHRv
dGFsX2xvY2FscyA9IDA7CisgICAgZm9yIChsZXQgbCBvZiB0aGlzLmxvY2FscykgeworICAgICAg
dG90YWxfbG9jYWxzICs9IGwuY291bnQKKyAgICB9CisgICAgcmV0dXJuIHRvdGFsX2xvY2FsczsK
KyAgfQorCisgIGFkZExvY2Fscyh0eXBlLCBjb3VudCwgbmFtZXMpIHsKKyAgICB0aGlzLmxvY2Fs
cy5wdXNoKHt0eXBlOiB0eXBlLCBjb3VudDogY291bnR9KTsKKyAgICBuYW1lcyA9IG5hbWVzIHx8
IFtdOworICAgIGlmIChuYW1lcy5sZW5ndGggPiBjb3VudCkgdGhyb3cgbmV3IEVycm9yKCd0b28g
bWFueSBsb2NhbHMgbmFtZXMgZ2l2ZW4nKTsKKyAgICB0aGlzLmxvY2FsX25hbWVzLnB1c2goLi4u
bmFtZXMpOworICAgIGlmIChjb3VudCA+IG5hbWVzLmxlbmd0aCkgdGhpcy5sb2NhbF9uYW1lcy5w
dXNoKGNvdW50IC0gbmFtZXMubGVuZ3RoKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGVu
ZCgpIHsKKyAgICByZXR1cm4gdGhpcy5tb2R1bGU7CisgIH0KK30KKworY2xhc3MgV2FzbUluaXRF
eHByIHsKKyAgc3RhdGljIEkzMkNvbnN0KHZhbHVlKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhw
ckkzMkNvbnN0LCB2YWx1ZTogdmFsdWV9OworICB9CisgIHN0YXRpYyBJNjRDb25zdCh2YWx1ZSkg
eworICAgIHJldHVybiB7a2luZDoga0V4cHJJNjRDb25zdCwgdmFsdWU6IHZhbHVlfTsKKyAgfQor
ICBzdGF0aWMgRjMyQ29uc3QodmFsdWUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByRjMyQ29u
c3QsIHZhbHVlOiB2YWx1ZX07CisgIH0KKyAgc3RhdGljIEY2NENvbnN0KHZhbHVlKSB7CisgICAg
cmV0dXJuIHtraW5kOiBrRXhwckY2NENvbnN0LCB2YWx1ZTogdmFsdWV9OworICB9CisgIHN0YXRp
YyBTMTI4Q29uc3QodmFsdWUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtTaW1kUHJlZml4LCB2YWx1
ZTogdmFsdWV9OworICB9CisgIHN0YXRpYyBHbG9iYWxHZXQoaW5kZXgpIHsKKyAgICByZXR1cm4g
e2tpbmQ6IGtFeHByR2xvYmFsR2V0LCB2YWx1ZTogaW5kZXh9OworICB9CisgIHN0YXRpYyBSZWZG
dW5jKGluZGV4KSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclJlZkZ1bmMsIHZhbHVlOiBpbmRl
eH07CisgIH0KKyAgc3RhdGljIFJlZk51bGwodHlwZSkgeworICAgIHJldHVybiB7a2luZDoga0V4
cHJSZWZOdWxsLCB2YWx1ZTogdHlwZX07CisgIH0KKyAgc3RhdGljIFN0cnVjdE5ld1dpdGhSdHQo
dHlwZSwgYXJncykgeworICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXdXaXRoUnR0LCB2
YWx1ZTogdHlwZSwgb3BlcmFuZHM6IGFyZ3N9OworICB9CisgIHN0YXRpYyBTdHJ1Y3ROZXcodHlw
ZSwgYXJncykgeworICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXcsIHZhbHVlOiB0eXBl
LCBvcGVyYW5kczogYXJnc307CisgIH0KKyAgc3RhdGljIFN0cnVjdE5ld0RlZmF1bHRXaXRoUnR0
KHR5cGUsIHJ0dCkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0V2l0
aFJ0dCwgdmFsdWU6IHR5cGUsIG9wZXJhbmRzOiBbcnR0XX07CisgIH0KKyAgc3RhdGljIFN0cnVj
dE5ld0RlZmF1bHQodHlwZSkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXdEZWZh
dWx0LCB2YWx1ZTogdHlwZSwgb3BlcmFuZHM6IFtdfTsKKyAgfQorICBzdGF0aWMgQXJyYXlJbml0
KHR5cGUsIGFyZ3MpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByQXJyYXlJbml0LCB2YWx1ZTog
dHlwZSwgb3BlcmFuZHM6IGFyZ3N9OworICB9CisgIHN0YXRpYyBBcnJheUluaXRTdGF0aWModHlw
ZSwgYXJncykgeworICAgIHJldHVybiB7a2luZDoga0V4cHJBcnJheUluaXRTdGF0aWMsIHZhbHVl
OiB0eXBlLCBvcGVyYW5kczogYXJnc307CisgIH0KKyAgc3RhdGljIFJ0dENhbm9uKHR5cGUpIHsK
KyAgICByZXR1cm4ge2tpbmQ6IGtFeHByUnR0Q2Fub24sIHZhbHVlOiB0eXBlfTsKKyAgfQorICBz
dGF0aWMgUnR0U3ViKHR5cGUsIHBhcmVudCkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJSdHRT
dWIsIHZhbHVlOiB0eXBlLCBwYXJlbnQ6IHBhcmVudH07CisgIH0KKyAgc3RhdGljIFJ0dEZyZXNo
U3ViKHR5cGUsIHBhcmVudCkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJSdHRGcmVzaFN1Yiwg
dmFsdWU6IHR5cGUsIHBhcmVudDogcGFyZW50fTsKKyAgfQorCisgIHN0YXRpYyBkZWZhdWx0Rm9y
KHR5cGUpIHsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgIGNhc2Uga1dhc21JMzI6CisgICAg
ICAgIHJldHVybiB0aGlzLkkzMkNvbnN0KDApOworICAgICAgY2FzZSBrV2FzbUk2NDoKKyAgICAg
ICAgcmV0dXJuIHRoaXMuSTY0Q29uc3QoMCk7CisgICAgICBjYXNlIGtXYXNtRjMyOgorICAgICAg
ICByZXR1cm4gdGhpcy5GMzJDb25zdCgwKTsKKyAgICAgIGNhc2Uga1dhc21GNjQ6CisgICAgICAg
IHJldHVybiB0aGlzLkY2NENvbnN0KDApOworICAgICAgY2FzZSBrV2FzbVMxMjg6CisgICAgICAg
IHJldHVybiB0aGlzLlMxMjhDb25zdChuZXcgQXJyYXkoMTYpLmZpbGwoMCkpOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgaWYgKCh0eXBlb2YgdHlwZSkgIT0gJ251bWJlcicgJiYgdHlwZS5vcGNv
ZGUgIT0ga1dhc21PcHRSZWYpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vbi1kZWZh
dWx0YWJsZSB0eXBlIik7CisgICAgICAgIH0KKyAgICAgICAgbGV0IGhlYXBfdHlwZSA9ICh0eXBl
b2YgdHlwZSkgPT0gJ251bWJlcicgPyB0eXBlIDogdHlwZS5oZWFwX3R5cGU7CisgICAgICAgIHJl
dHVybiB0aGlzLlJlZk51bGwoaGVhcF90eXBlKTsKKyAgICB9CisgIH0KK30KKworY2xhc3MgV2Fz
bUdsb2JhbEJ1aWxkZXIgeworICAvLyB7aW5pdH0gc2hvdWxkIGJlIGNvbnN0cnVjdGVkIHdpdGgg
V2FzbUluaXRFeHByLgorICBjb25zdHJ1Y3Rvcihtb2R1bGUsIHR5cGUsIG11dGFibGUsIGluaXQp
IHsKKyAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOworICAg
IHRoaXMubXV0YWJsZSA9IG11dGFibGU7CisgICAgdGhpcy5pbml0ID0gaW5pdDsKKyAgfQorCisg
IGV4cG9ydEFzKG5hbWUpIHsKKyAgICB0aGlzLm1vZHVsZS5leHBvcnRzLnB1c2goCisgICAgICAg
IHtuYW1lOiBuYW1lLCBraW5kOiBrRXh0ZXJuYWxHbG9iYWwsIGluZGV4OiB0aGlzLmluZGV4fSk7
CisgICAgcmV0dXJuIHRoaXM7CisgIH0KK30KKworY2xhc3MgV2FzbVRhYmxlQnVpbGRlciB7Cisg
IGNvbnN0cnVjdG9yKG1vZHVsZSwgdHlwZSwgaW5pdGlhbF9zaXplLCBtYXhfc2l6ZSwgaW5pdF9l
eHByKSB7CisgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7CisgICAgdGhpcy50eXBlID0gdHlwZTsK
KyAgICB0aGlzLmluaXRpYWxfc2l6ZSA9IGluaXRpYWxfc2l6ZTsKKyAgICB0aGlzLmhhc19tYXgg
PSBtYXhfc2l6ZSAhPT0gdW5kZWZpbmVkOworICAgIHRoaXMubWF4X3NpemUgPSBtYXhfc2l6ZTsK
KyAgICB0aGlzLmluaXRfZXhwciA9IGluaXRfZXhwcjsKKyAgICB0aGlzLmhhc19pbml0ID0gaW5p
dF9leHByICE9PSB1bmRlZmluZWQ7CisgIH0KKworICBleHBvcnRBcyhuYW1lKSB7CisgICAgdGhp
cy5tb2R1bGUuZXhwb3J0cy5wdXNoKAorICAgICAgICB7bmFtZTogbmFtZSwga2luZDoga0V4dGVy
bmFsVGFibGUsIGluZGV4OiB0aGlzLmluZGV4fSk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KK30K
KworZnVuY3Rpb24gbWFrZUZpZWxkKHR5cGUsIG11dGFiaWxpdHkpIHsKKyAgaWYgKCh0eXBlb2Yg
bXV0YWJpbGl0eSkgIT0gJ2Jvb2xlYW4nKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdmaWVsZCBt
dXRhYmlsaXR5IG11c3QgYmUgYm9vbGVhbicpOworICB9CisgIHJldHVybiB7dHlwZTogdHlwZSwg
bXV0YWJpbGl0eTogbXV0YWJpbGl0eX07Cit9CisKK2NsYXNzIFdhc21TdHJ1Y3QgeworICBjb25z
dHJ1Y3RvcihmaWVsZHMpIHsKKyAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGRzKSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCdzdHJ1Y3QgZmllbGRzIG11c3QgYmUgYW4gYXJyYXknKTsKKyAg
ICB9CisgICAgdGhpcy5maWVsZHMgPSBmaWVsZHM7CisgICAgdGhpcy50eXBlX2Zvcm0gPSBrV2Fz
bVN0cnVjdFR5cGVGb3JtOworICB9Cit9CisKK2NsYXNzIFdhc21TdHJ1Y3RTdWJ0eXBlIGV4dGVu
ZHMgV2FzbVN0cnVjdCB7CisgIGNvbnN0cnVjdG9yKGZpZWxkcywgc3VwZXJ0eXBlX2lkeCkgewor
ICAgIHN1cGVyKGZpZWxkcyk7CisgICAgdGhpcy5zdXBlcnR5cGUgPSBzdXBlcnR5cGVfaWR4Owor
ICAgIHRoaXMudHlwZV9mb3JtID0ga1dhc21TdHJ1Y3RTdWJ0eXBlRm9ybTsKKyAgfQorfQorCitj
bGFzcyBXYXNtQXJyYXkgeworICBjb25zdHJ1Y3Rvcih0eXBlLCBtdXRhYmlsaXR5KSB7CisgICAg
dGhpcy50eXBlID0gdHlwZTsKKyAgICBpZiAoIW11dGFiaWxpdHkpIHRocm93IG5ldyBFcnJvcigi
SW1tdXRhYmxlIGFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQiKTsKKyAgICB0aGlzLm11dGFi
aWxpdHkgPSBtdXRhYmlsaXR5OworICAgIHRoaXMudHlwZV9mb3JtID0ga1dhc21BcnJheVR5cGVG
b3JtOworICB9Cit9CisKK2NsYXNzIFdhc21BcnJheVN1YnR5cGUgZXh0ZW5kcyBXYXNtQXJyYXkg
eworICBjb25zdHJ1Y3Rvcih0eXBlLCBtdXRhYmlsaXR5LCBzdXBlcnR5cGVfaWR4KSB7CisgICAg
c3VwZXIodHlwZSwgbXV0YWJpbGl0eSk7CisgICAgdGhpcy5zdXBlcnR5cGUgPSBzdXBlcnR5cGVf
aWR4OworICAgIHRoaXMudHlwZV9mb3JtID0ga1dhc21BcnJheVN1YnR5cGVGb3JtOworICB9Cit9
CitjbGFzcyBXYXNtRWxlbVNlZ21lbnQgeworICBjb25zdHJ1Y3Rvcih0YWJsZSwgb2Zmc2V0LCB0
eXBlLCBlbGVtZW50cywgaXNfZGVjbCkgeworICAgIHRoaXMudGFibGUgPSB0YWJsZTsKKyAgICB0
aGlzLm9mZnNldCA9IG9mZnNldDsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIHRoaXMuZWxl
bWVudHMgPSBlbGVtZW50czsKKyAgICB0aGlzLmlzX2RlY2wgPSBpc19kZWNsOworICAgIC8vIElu
dmFyaWFudCBjaGVja3MuCisgICAgaWYgKCh0YWJsZSA9PT0gdW5kZWZpbmVkKSAhPSAob2Zmc2V0
ID09PSB1bmRlZmluZWQpKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZWxlbWVu
dCBzZWdtZW50Iik7CisgICAgfQorICAgIGZvciAobGV0IGVsZW0gb2YgZWxlbWVudHMpIHsKKyAg
ICAgIGlmICgoKHR5cGVvZiBlbGVtKSA9PSAnbnVtYmVyJykgIT0gKHR5cGUgPT09IHVuZGVmaW5l
ZCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGVsZW1lbnQiKTsKKyAgICAg
IH0KKyAgICB9CisgIH0KKworICBpc19hY3RpdmUoKSB7CisgICAgcmV0dXJuIHRoaXMudGFibGUg
IT09IHVuZGVmaW5lZDsKKyAgfQorCisgIGlzX3Bhc3NpdmUoKSB7CisgICAgcmV0dXJuIHRoaXMu
dGFibGUgPT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc19kZWNsOworICB9CisKKyAgaXNfZGVjbGFy
YXRpdmUoKSB7CisgICAgcmV0dXJuIHRoaXMudGFibGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLmlz
X2RlY2w7CisgIH0KKworICBleHByZXNzaW9uc19hc19lbGVtZW50cygpIHsKKyAgICByZXR1cm4g
dGhpcy50eXBlICE9PSB1bmRlZmluZWQ7CisgIH0KK30KKworY2xhc3MgV2FzbU1vZHVsZUJ1aWxk
ZXIgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICB0aGlzLnR5cGVzID0gW107CisgICAgdGhpcy5p
bXBvcnRzID0gW107CisgICAgdGhpcy5leHBvcnRzID0gW107CisgICAgdGhpcy5nbG9iYWxzID0g
W107CisgICAgdGhpcy50YWJsZXMgPSBbXTsKKyAgICB0aGlzLnRhZ3MgPSBbXTsKKyAgICB0aGlz
LmZ1bmN0aW9ucyA9IFtdOworICAgIHRoaXMuY29tcGlsYXRpb25faGludHMgPSBbXTsKKyAgICB0
aGlzLmVsZW1lbnRfc2VnbWVudHMgPSBbXTsKKyAgICB0aGlzLmRhdGFfc2VnbWVudHMgPSBbXTsK
KyAgICB0aGlzLmV4cGxpY2l0ID0gW107CisgICAgdGhpcy5udW1faW1wb3J0ZWRfZnVuY3MgPSAw
OworICAgIHRoaXMubnVtX2ltcG9ydGVkX2dsb2JhbHMgPSAwOworICAgIHRoaXMubnVtX2ltcG9y
dGVkX3RhYmxlcyA9IDA7CisgICAgdGhpcy5udW1faW1wb3J0ZWRfdGFncyA9IDA7CisgICAgcmV0
dXJuIHRoaXM7CisgIH0KKworICBhZGRTdGFydChzdGFydF9pbmRleCkgeworICAgIHRoaXMuc3Rh
cnRfaW5kZXggPSBzdGFydF9pbmRleDsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZE1l
bW9yeShtaW4sIG1heCwgZXhwb3J0ZWQsIHNoYXJlZCkgeworICAgIHRoaXMubWVtb3J5ID0gewor
ICAgICAgbWluOiBtaW4sCisgICAgICBtYXg6IG1heCwKKyAgICAgIGV4cG9ydGVkOiBleHBvcnRl
ZCwKKyAgICAgIHNoYXJlZDogc2hhcmVkIHx8IGZhbHNlLAorICAgICAgaXNfbWVtb3J5NjQ6IGZh
bHNlCisgICAgfTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZE1lbW9yeTY0KG1pbiwg
bWF4LCBleHBvcnRlZCkgeworICAgIHRoaXMubWVtb3J5ID0geworICAgICAgbWluOiBtaW4sCisg
ICAgICBtYXg6IG1heCwKKyAgICAgIGV4cG9ydGVkOiBleHBvcnRlZCwKKyAgICAgIHNoYXJlZDog
ZmFsc2UsCisgICAgICBpc19tZW1vcnk2NDogdHJ1ZQorICAgIH07CisgICAgcmV0dXJuIHRoaXM7
CisgIH0KKworICBhZGRFeHBsaWNpdFNlY3Rpb24oYnl0ZXMpIHsKKyAgICB0aGlzLmV4cGxpY2l0
LnB1c2goYnl0ZXMpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgc3RyaW5nVG9CeXRlcyhu
YW1lKSB7CisgICAgdmFyIHJlc3VsdCA9IG5ldyBCaW5hcnkoKTsKKyAgICByZXN1bHQuZW1pdF91
MzJ2KG5hbWUubGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBp
KyspIHsKKyAgICAgIHJlc3VsdC5lbWl0X3U4KG5hbWUuY2hhckNvZGVBdChpKSk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQudHJ1bmNfYnVmZmVyKCkKKyAgfQorCisgIGNyZWF0ZUN1c3RvbVNl
Y3Rpb24obmFtZSwgYnl0ZXMpIHsKKyAgICBuYW1lID0gdGhpcy5zdHJpbmdUb0J5dGVzKG5hbWUp
OworICAgIHZhciBzZWN0aW9uID0gbmV3IEJpbmFyeSgpOworICAgIHNlY3Rpb24uZW1pdF91OCgw
KTsKKyAgICBzZWN0aW9uLmVtaXRfdTMydihuYW1lLmxlbmd0aCArIGJ5dGVzLmxlbmd0aCk7Cisg
ICAgc2VjdGlvbi5lbWl0X2J5dGVzKG5hbWUpOworICAgIHNlY3Rpb24uZW1pdF9ieXRlcyhieXRl
cyk7CisgICAgcmV0dXJuIHNlY3Rpb24udHJ1bmNfYnVmZmVyKCk7CisgIH0KKworICBhZGRDdXN0
b21TZWN0aW9uKG5hbWUsIGJ5dGVzKSB7CisgICAgdGhpcy5leHBsaWNpdC5wdXNoKHRoaXMuY3Jl
YXRlQ3VzdG9tU2VjdGlvbihuYW1lLCBieXRlcykpOworICB9CisKKyAgYWRkVHlwZSh0eXBlKSB7
CisgICAgdGhpcy50eXBlcy5wdXNoKHR5cGUpOworICAgIHZhciBwbCA9IHR5cGUucGFyYW1zLmxl
bmd0aDsgICAvLyBzaG91bGQgaGF2ZSBwYXJhbXMKKyAgICB2YXIgcmwgPSB0eXBlLnJlc3VsdHMu
bGVuZ3RoOyAgLy8gc2hvdWxkIGhhdmUgcmVzdWx0cworICAgIHJldHVybiB0aGlzLnR5cGVzLmxl
bmd0aCAtIDE7CisgIH0KKworICBhZGRTdHJ1Y3QoZmllbGRzKSB7CisgICAgdGhpcy50eXBlcy5w
dXNoKG5ldyBXYXNtU3RydWN0KGZpZWxkcykpOworICAgIHJldHVybiB0aGlzLnR5cGVzLmxlbmd0
aCAtIDE7CisgIH0KKworICBrR2VuZXJpY1N1cGVyVHlwZSA9IDB4RkZGRkZGRkU7CisgIGFkZFN0
cnVjdFN1YnR5cGUoZmllbGRzLCBzdXBlcnR5cGVfaWR4ID0gdGhpcy5rR2VuZXJpY1N1cGVyVHlw
ZSkgeworICAgIHRoaXMudHlwZXMucHVzaChuZXcgV2FzbVN0cnVjdFN1YnR5cGUoZmllbGRzLCBz
dXBlcnR5cGVfaWR4KSk7CisgICAgcmV0dXJuIHRoaXMudHlwZXMubGVuZ3RoIC0gMTsKKyAgfQor
CisgIGFkZEFycmF5KHR5cGUsIG11dGFiaWxpdHkpIHsKKyAgICB0aGlzLnR5cGVzLnB1c2gobmV3
IFdhc21BcnJheSh0eXBlLCBtdXRhYmlsaXR5KSk7CisgICAgcmV0dXJuIHRoaXMudHlwZXMubGVu
Z3RoIC0gMTsKKyAgfQorCisgIGFkZEFycmF5U3VidHlwZSh0eXBlLCBtdXRhYmlsaXR5LCBzdXBl
cnR5cGVfaWR4ID0gdGhpcy5rR2VuZXJpY1N1cGVyVHlwZSkgeworICAgIHRoaXMudHlwZXMucHVz
aChuZXcgV2FzbUFycmF5U3VidHlwZSh0eXBlLCBtdXRhYmlsaXR5LCBzdXBlcnR5cGVfaWR4KSk7
CisgICAgcmV0dXJuIHRoaXMudHlwZXMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGFkZEdsb2JhbCh0
eXBlLCBtdXRhYmxlLCBpbml0KSB7CisgICAgaWYgKGluaXQgPT09IHVuZGVmaW5lZCkgaW5pdCA9
IFdhc21Jbml0RXhwci5kZWZhdWx0Rm9yKHR5cGUpOworICAgIGxldCBnbG9iID0gbmV3IFdhc21H
bG9iYWxCdWlsZGVyKHRoaXMsIHR5cGUsIG11dGFibGUsIGluaXQpOworICAgIGdsb2IuaW5kZXgg
PSB0aGlzLmdsb2JhbHMubGVuZ3RoICsgdGhpcy5udW1faW1wb3J0ZWRfZ2xvYmFsczsKKyAgICB0
aGlzLmdsb2JhbHMucHVzaChnbG9iKTsKKyAgICByZXR1cm4gZ2xvYjsKKyAgfQorCisgIGFkZFRh
YmxlKAorICAgICAgdHlwZSwgaW5pdGlhbF9zaXplLCBtYXhfc2l6ZSA9IHVuZGVmaW5lZCwgaW5p
dF9leHByID0gdW5kZWZpbmVkKSB7CisgICAgaWYgKHR5cGUgPT0ga1dhc21JMzIgfHwgdHlwZSA9
PSBrV2FzbUk2NCB8fCB0eXBlID09IGtXYXNtRjMyIHx8CisgICAgICAgIHR5cGUgPT0ga1dhc21G
NjQgfHwgdHlwZSA9PSBrV2FzbVMxMjggfHwgdHlwZSA9PSBrV2FzbVZvaWQpIHsKKyAgICAgIHRo
cm93IG5ldyBFcnJvcignVGFibGVzIG11c3QgYmUgb2YgYSByZWZlcmVuY2UgdHlwZScpOworICAg
IH0KKyAgICBsZXQgdGFibGUgPSBuZXcgV2FzbVRhYmxlQnVpbGRlcigKKyAgICAgICAgdGhpcywg
dHlwZSwgaW5pdGlhbF9zaXplLCBtYXhfc2l6ZSwgaW5pdF9leHByKTsKKyAgICB0YWJsZS5pbmRl
eCA9IHRoaXMudGFibGVzLmxlbmd0aCArIHRoaXMubnVtX2ltcG9ydGVkX3RhYmxlczsKKyAgICB0
aGlzLnRhYmxlcy5wdXNoKHRhYmxlKTsKKyAgICByZXR1cm4gdGFibGU7CisgIH0KKworICBhZGRU
YWcodHlwZSkgeworICAgIGxldCB0eXBlX2luZGV4ID0gKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVy
JyA/IHR5cGUgOiB0aGlzLmFkZFR5cGUodHlwZSk7CisgICAgbGV0IHRhZ19pbmRleCA9IHRoaXMu
dGFncy5sZW5ndGggKyB0aGlzLm51bV9pbXBvcnRlZF90YWdzOworICAgIHRoaXMudGFncy5wdXNo
KHR5cGVfaW5kZXgpOworICAgIHJldHVybiB0YWdfaW5kZXg7CisgIH0KKworICBhZGRGdW5jdGlv
bihuYW1lLCB0eXBlLCBhcmdfbmFtZXMpIHsKKyAgICBhcmdfbmFtZXMgPSBhcmdfbmFtZXMgfHwg
W107CisgICAgbGV0IHR5cGVfaW5kZXggPSAodHlwZW9mIHR5cGUpID09ICdudW1iZXInID8gdHlw
ZSA6IHRoaXMuYWRkVHlwZSh0eXBlKTsKKyAgICBsZXQgbnVtX2FyZ3MgPSB0aGlzLnR5cGVzW3R5
cGVfaW5kZXhdLnBhcmFtcy5sZW5ndGg7CisgICAgaWYgKG51bV9hcmdzIDwgYXJnX25hbWVzLmxl
bmd0aCkKKyAgICAgIHRocm93IG5ldyBFcnJvcigndG9vIG1hbnkgYXJnIG5hbWVzIHByb3ZpZGVk
Jyk7CisgICAgaWYgKG51bV9hcmdzID4gYXJnX25hbWVzLmxlbmd0aCkKKyAgICAgIGFyZ19uYW1l
cy5wdXNoKG51bV9hcmdzIC0gYXJnX25hbWVzLmxlbmd0aCk7CisgICAgbGV0IGZ1bmMgPSBuZXcg
V2FzbUZ1bmN0aW9uQnVpbGRlcih0aGlzLCBuYW1lLCB0eXBlX2luZGV4LCBhcmdfbmFtZXMpOwor
ICAgIGZ1bmMuaW5kZXggPSB0aGlzLmZ1bmN0aW9ucy5sZW5ndGggKyB0aGlzLm51bV9pbXBvcnRl
ZF9mdW5jczsKKyAgICB0aGlzLmZ1bmN0aW9ucy5wdXNoKGZ1bmMpOworICAgIHJldHVybiBmdW5j
OworICB9CisKKyAgYWRkSW1wb3J0KG1vZHVsZSwgbmFtZSwgdHlwZSkgeworICAgIGlmICh0aGlz
LmZ1bmN0aW9ucy5sZW5ndGggIT0gMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXBvcnRl
ZCBmdW5jdGlvbnMgbXVzdCBiZSBkZWNsYXJlZCBiZWZvcmUgbG9jYWwgb25lcycpOworICAgIH0K
KyAgICBsZXQgdHlwZV9pbmRleCA9ICh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicgPyB0eXBlIDog
dGhpcy5hZGRUeXBlKHR5cGUpOworICAgIHRoaXMuaW1wb3J0cy5wdXNoKHsKKyAgICAgIG1vZHVs
ZTogbW9kdWxlLAorICAgICAgbmFtZTogbmFtZSwKKyAgICAgIGtpbmQ6IGtFeHRlcm5hbEZ1bmN0
aW9uLAorICAgICAgdHlwZV9pbmRleDogdHlwZV9pbmRleAorICAgIH0pOworICAgIHJldHVybiB0
aGlzLm51bV9pbXBvcnRlZF9mdW5jcysrOworICB9CisKKyAgYWRkSW1wb3J0ZWRHbG9iYWwobW9k
dWxlLCBuYW1lLCB0eXBlLCBtdXRhYmxlID0gZmFsc2UpIHsKKyAgICBpZiAodGhpcy5nbG9iYWxz
Lmxlbmd0aCAhPSAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcG9ydGVkIGdsb2JhbHMg
bXVzdCBiZSBkZWNsYXJlZCBiZWZvcmUgbG9jYWwgb25lcycpOworICAgIH0KKyAgICBsZXQgbyA9
IHsKKyAgICAgIG1vZHVsZTogbW9kdWxlLAorICAgICAgbmFtZTogbmFtZSwKKyAgICAgIGtpbmQ6
IGtFeHRlcm5hbEdsb2JhbCwKKyAgICAgIHR5cGU6IHR5cGUsCisgICAgICBtdXRhYmxlOiBtdXRh
YmxlCisgICAgfTsKKyAgICB0aGlzLmltcG9ydHMucHVzaChvKTsKKyAgICByZXR1cm4gdGhpcy5u
dW1faW1wb3J0ZWRfZ2xvYmFscysrOworICB9CisKKyAgYWRkSW1wb3J0ZWRNZW1vcnkobW9kdWxl
LCBuYW1lLCBpbml0aWFsID0gMCwgbWF4aW11bSwgc2hhcmVkKSB7CisgICAgbGV0IG8gPSB7Cisg
ICAgICBtb2R1bGU6IG1vZHVsZSwKKyAgICAgIG5hbWU6IG5hbWUsCisgICAgICBraW5kOiBrRXh0
ZXJuYWxNZW1vcnksCisgICAgICBpbml0aWFsOiBpbml0aWFsLAorICAgICAgbWF4aW11bTogbWF4
aW11bSwKKyAgICAgIHNoYXJlZDogc2hhcmVkCisgICAgfTsKKyAgICB0aGlzLmltcG9ydHMucHVz
aChvKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZEltcG9ydGVkVGFibGUobW9kdWxl
LCBuYW1lLCBpbml0aWFsLCBtYXhpbXVtLCB0eXBlKSB7CisgICAgaWYgKHRoaXMudGFibGVzLmxl
bmd0aCAhPSAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcG9ydGVkIHRhYmxlcyBtdXN0
IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2NhbCBvbmVzJyk7CisgICAgfQorICAgIGxldCBvID0gewor
ICAgICAgbW9kdWxlOiBtb2R1bGUsCisgICAgICBuYW1lOiBuYW1lLAorICAgICAga2luZDoga0V4
dGVybmFsVGFibGUsCisgICAgICBpbml0aWFsOiBpbml0aWFsLAorICAgICAgbWF4aW11bTogbWF4
aW11bSwKKyAgICAgIHR5cGU6IHR5cGUgfHwga1dhc21GdW5jUmVmCisgICAgfTsKKyAgICB0aGlz
LmltcG9ydHMucHVzaChvKTsKKyAgICByZXR1cm4gdGhpcy5udW1faW1wb3J0ZWRfdGFibGVzKys7
CisgIH0KKworICBhZGRJbXBvcnRlZFRhZyhtb2R1bGUsIG5hbWUsIHR5cGUpIHsKKyAgICBpZiAo
dGhpcy50YWdzLmxlbmd0aCAhPSAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcG9ydGVk
IHRhZ3MgbXVzdCBiZSBkZWNsYXJlZCBiZWZvcmUgbG9jYWwgb25lcycpOworICAgIH0KKyAgICBs
ZXQgdHlwZV9pbmRleCA9ICh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicgPyB0eXBlIDogdGhpcy5h
ZGRUeXBlKHR5cGUpOworICAgIGxldCBvID0geworICAgICAgbW9kdWxlOiBtb2R1bGUsCisgICAg
ICBuYW1lOiBuYW1lLAorICAgICAga2luZDoga0V4dGVybmFsVGFnLAorICAgICAgdHlwZV9pbmRl
eDogdHlwZV9pbmRleAorICAgIH07CisgICAgdGhpcy5pbXBvcnRzLnB1c2gobyk7CisgICAgcmV0
dXJuIHRoaXMubnVtX2ltcG9ydGVkX3RhZ3MrKzsKKyAgfQorCisgIGFkZEV4cG9ydChuYW1lLCBp
bmRleCkgeworICAgIHRoaXMuZXhwb3J0cy5wdXNoKHtuYW1lOiBuYW1lLCBraW5kOiBrRXh0ZXJu
YWxGdW5jdGlvbiwgaW5kZXg6IGluZGV4fSk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBh
ZGRFeHBvcnRPZktpbmQobmFtZSwga2luZCwgaW5kZXgpIHsKKyAgICBpZiAoaW5kZXggPT09IHVu
ZGVmaW5lZCAmJiBraW5kICE9IGtFeHRlcm5hbFRhYmxlICYmCisgICAgICAgIGtpbmQgIT0ga0V4
dGVybmFsTWVtb3J5KSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAgICAgJ0luZGV4
IGZvciBleHBvcnRzIG90aGVyIHRoYW4gdGFibGVzL21lbW9yaWVzIG11c3QgYmUgcHJvdmlkZWQn
KTsKKyAgICB9CisgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBpbmRleCkg
IT0gJ251bWJlcicpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignSW5kZXggZm9yIGV4cG9ydHMg
bXVzdCBiZSBhIG51bWJlcicpCisgICAgfQorICAgIHRoaXMuZXhwb3J0cy5wdXNoKHtuYW1lOiBu
YW1lLCBraW5kOiBraW5kLCBpbmRleDogaW5kZXh9KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQor
CisgIHNldENvbXBpbGF0aW9uSGludChzdHJhdGVneSwgYmFzZWxpbmVUaWVyLCB0b3BUaWVyLCBp
bmRleCkgeworICAgIHRoaXMuY29tcGlsYXRpb25faGludHNbaW5kZXhdID0geworICAgICAgc3Ry
YXRlZ3k6IHN0cmF0ZWd5LAorICAgICAgYmFzZWxpbmVUaWVyOiBiYXNlbGluZVRpZXIsCisgICAg
ICB0b3BUaWVyOiB0b3BUaWVyCisgICAgfTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFk
ZERhdGFTZWdtZW50KGFkZHIsIGRhdGEsIGlzX2dsb2JhbCA9IGZhbHNlKSB7CisgICAgdGhpcy5k
YXRhX3NlZ21lbnRzLnB1c2goCisgICAgICAgIHthZGRyOiBhZGRyLCBkYXRhOiBkYXRhLCBpc19n
bG9iYWw6IGlzX2dsb2JhbCwgaXNfYWN0aXZlOiB0cnVlfSk7CisgICAgcmV0dXJuIHRoaXMuZGF0
YV9zZWdtZW50cy5sZW5ndGggLSAxOworICB9CisKKyAgYWRkUGFzc2l2ZURhdGFTZWdtZW50KGRh
dGEpIHsKKyAgICB0aGlzLmRhdGFfc2VnbWVudHMucHVzaCh7ZGF0YTogZGF0YSwgaXNfYWN0aXZl
OiBmYWxzZX0pOworICAgIHJldHVybiB0aGlzLmRhdGFfc2VnbWVudHMubGVuZ3RoIC0gMTsKKyAg
fQorCisgIGV4cG9ydE1lbW9yeUFzKG5hbWUpIHsKKyAgICB0aGlzLmV4cG9ydHMucHVzaCh7bmFt
ZTogbmFtZSwga2luZDoga0V4dGVybmFsTWVtb3J5LCBpbmRleDogMH0pOworICB9CisKKyAgLy8g
e29mZnNldH0gaXMgYW4gaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbi4KKyAgLy8gSWYge3R5cGV9IGlz
IHVuZGVmaW5lZCwgdGhlbiB7ZWxlbWVudHN9IGFyZSBmdW5jdGlvbiBpbmRpY2VzLiBPdGhlcndp
c2UsCisgIC8vIHRoZXkgYXJlIGluaXRpYWxpemVyIGV4cHJlc3Npb25zLgorICBhZGRBY3RpdmVF
bGVtZW50U2VnbWVudCh0YWJsZSwgb2Zmc2V0LCBlbGVtZW50cywgdHlwZSkgeworICAgIHRoaXMu
ZWxlbWVudF9zZWdtZW50cy5wdXNoKAorICAgICAgICBuZXcgV2FzbUVsZW1TZWdtZW50KHRhYmxl
LCBvZmZzZXQsIHR5cGUsIGVsZW1lbnRzLCBmYWxzZSkpOworICAgIHJldHVybiB0aGlzLmVsZW1l
bnRfc2VnbWVudHMubGVuZ3RoIC0gMTsKKyAgfQorCisgIC8vIElmIHt0eXBlfSBpcyB1bmRlZmlu
ZWQsIHRoZW4ge2VsZW1lbnRzfSBhcmUgZnVuY3Rpb24gaW5kaWNlcy4gT3RoZXJ3aXNlLAorICAv
LyB0aGV5IGFyZSBpbml0aWFsaXplciBleHByZXNzaW9ucy4KKyAgYWRkUGFzc2l2ZUVsZW1lbnRT
ZWdtZW50KGVsZW1lbnRzLCB0eXBlKSB7CisgICAgdGhpcy5lbGVtZW50X3NlZ21lbnRzLnB1c2go
CisgICAgICBuZXcgV2FzbUVsZW1TZWdtZW50KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0eXBlLCBl
bGVtZW50cywgZmFsc2UpKTsKKyAgICByZXR1cm4gdGhpcy5lbGVtZW50X3NlZ21lbnRzLmxlbmd0
aCAtIDE7CisgIH0KKworICAvLyBJZiB7dHlwZX0gaXMgdW5kZWZpbmVkLCB0aGVuIHtlbGVtZW50
c30gYXJlIGZ1bmN0aW9uIGluZGljZXMuIE90aGVyd2lzZSwKKyAgLy8gdGhleSBhcmUgaW5pdGlh
bGl6ZXIgZXhwcmVzc2lvbnMuCisgIGFkZERlY2xhcmF0aXZlRWxlbWVudFNlZ21lbnQoZWxlbWVu
dHMsIHR5cGUpIHsKKyAgICB0aGlzLmVsZW1lbnRfc2VnbWVudHMucHVzaCgKKyAgICAgIG5ldyBX
YXNtRWxlbVNlZ21lbnQodW5kZWZpbmVkLCB1bmRlZmluZWQsIHR5cGUsIGVsZW1lbnRzLCB0cnVl
KSk7CisgICAgcmV0dXJuIHRoaXMuZWxlbWVudF9zZWdtZW50cy5sZW5ndGggLSAxOworICB9CisK
KyAgYXBwZW5kVG9UYWJsZShhcnJheSkgeworICAgIGZvciAobGV0IG4gb2YgYXJyYXkpIHsKKyAg
ICAgIGlmICh0eXBlb2YgbiAhPSAnbnVtYmVyJykKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdp
bnZhbGlkIHRhYmxlIChlbnRyaWVzIGhhdmUgdG8gYmUgbnVtYmVycyk6ICcgKyBhcnJheSk7Cisg
ICAgfQorICAgIGlmICh0aGlzLnRhYmxlcy5sZW5ndGggPT0gMCkgeworICAgICAgdGhpcy5hZGRU
YWJsZShrV2FzbUFueUZ1bmMsIDApOworICAgIH0KKyAgICAvLyBBZGp1c3QgdGhlIHRhYmxlIHRv
IHRoZSBjb3JyZWN0IHNpemUuCisgICAgbGV0IHRhYmxlID0gdGhpcy50YWJsZXNbMF07CisgICAg
Y29uc3QgYmFzZSA9IHRhYmxlLmluaXRpYWxfc2l6ZTsKKyAgICBjb25zdCB0YWJsZV9zaXplID0g
YmFzZSArIGFycmF5Lmxlbmd0aDsKKyAgICB0YWJsZS5pbml0aWFsX3NpemUgPSB0YWJsZV9zaXpl
OworICAgIGlmICh0YWJsZS5oYXNfbWF4ICYmIHRhYmxlX3NpemUgPiB0YWJsZS5tYXhfc2l6ZSkg
eworICAgICAgdGFibGUubWF4X3NpemUgPSB0YWJsZV9zaXplOworICAgIH0KKyAgICByZXR1cm4g
dGhpcy5hZGRBY3RpdmVFbGVtZW50U2VnbWVudCgwLCBXYXNtSW5pdEV4cHIuSTMyQ29uc3QoYmFz
ZSksIGFycmF5KTsKKyAgfQorCisgIHNldFRhYmxlQm91bmRzKG1pbiwgbWF4ID0gdW5kZWZpbmVk
KSB7CisgICAgaWYgKHRoaXMudGFibGVzLmxlbmd0aCAhPSAwKSB7CisgICAgICB0aHJvdyBuZXcg
RXJyb3IoJ1RoZSB0YWJsZSBib3VuZHMgb2YgdGFibGUgXCcwXCcgaGF2ZSBhbHJlYWR5IGJlZW4g
c2V0LicpOworICAgIH0KKyAgICB0aGlzLmFkZFRhYmxlKGtXYXNtQW55RnVuYywgbWluLCBtYXgp
OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgc2V0TmFtZShuYW1lKSB7CisgICAgdGhpcy5u
YW1lID0gbmFtZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHRvQnVmZmVyKGRlYnVnID0g
ZmFsc2UpIHsKKyAgICBsZXQgYmluYXJ5ID0gbmV3IEJpbmFyeTsKKyAgICBsZXQgd2FzbSA9IHRo
aXM7CisKKyAgICAvLyBBZGQgaGVhZGVyCisgICAgYmluYXJ5LmVtaXRfaGVhZGVyKCk7CisKKyAg
ICAvLyBBZGQgdHlwZSBzZWN0aW9uCisgICAgaWYgKHdhc20udHlwZXMubGVuZ3RoID4gMCkgewor
ICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgdHlwZXMgQCAnICsgYmluYXJ5Lmxlbmd0
aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtUeXBlU2VjdGlvbkNvZGUsIHNlY3Rpb24g
PT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLnR5cGVzLmxlbmd0aCk7CisgICAg
ICAgIGZvciAobGV0IHR5cGUgb2Ygd2FzbS50eXBlcykgeworICAgICAgICAgIGlmICh0eXBlIGlu
c3RhbmNlb2YgV2FzbVN0cnVjdCkgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KHR5cGUu
dHlwZV9mb3JtKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHR5cGUuZmllbGRzLmxl
bmd0aCk7CisgICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0eXBlLmZpZWxkcykgeworICAg
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShmaWVsZC50eXBlKTsKKyAgICAgICAgICAgICAg
c2VjdGlvbi5lbWl0X3U4KGZpZWxkLm11dGFiaWxpdHkgPyAxIDogMCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFdhc21TdHJ1Y3RTdWJ0eXBlKSB7Cisg
ICAgICAgICAgICAgIGlmICh0eXBlLnN1cGVydHlwZSA9PT0gdGhpcy5rR2VuZXJpY1N1cGVyVHlw
ZSkgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChrRGF0YVJlZkNvZGUpOworICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF9oZWFwX3R5
cGUodHlwZS5zdXBlcnR5cGUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgfSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgV2FzbUFycmF5KSB7CisgICAgICAgICAg
ICBzZWN0aW9uLmVtaXRfdTgodHlwZS50eXBlX2Zvcm0pOworICAgICAgICAgICAgc2VjdGlvbi5l
bWl0X3R5cGUodHlwZS50eXBlKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCh0eXBlLm11
dGFiaWxpdHkgPyAxIDogMCk7CisgICAgICAgICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFdhc21B
cnJheVN1YnR5cGUpIHsKKyAgICAgICAgICAgICAgaWYgKHR5cGUuc3VwZXJ0eXBlID09PSB0aGlz
LmtHZW5lcmljU3VwZXJUeXBlKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtE
YXRhUmVmQ29kZSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X2hlYXBfdHlwZSh0eXBlLnN1cGVydHlwZSk7CisgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0
X3U4KGtXYXNtRnVuY3Rpb25UeXBlRm9ybSk7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMy
dih0eXBlLnBhcmFtcy5sZW5ndGgpOworICAgICAgICAgICAgZm9yIChsZXQgcGFyYW0gb2YgdHlw
ZS5wYXJhbXMpIHsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUocGFyYW0pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYodHlwZS5yZXN1bHRzLmxl
bmd0aCk7CisgICAgICAgICAgICBmb3IgKGxldCByZXN1bHQgb2YgdHlwZS5yZXN1bHRzKSB7Cisg
ICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKHJlc3VsdCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgaW1w
b3J0cyBzZWN0aW9uCisgICAgaWYgKHdhc20uaW1wb3J0cy5sZW5ndGggPiAwKSB7CisgICAgICBp
ZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBpbXBvcnRzIEAgJyArIGJpbmFyeS5sZW5ndGgpOwor
ICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrSW1wb3J0U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4g
eworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLmltcG9ydHMubGVuZ3RoKTsKKyAgICAg
ICAgZm9yIChsZXQgaW1wIG9mIHdhc20uaW1wb3J0cykgeworICAgICAgICAgIHNlY3Rpb24uZW1p
dF9zdHJpbmcoaW1wLm1vZHVsZSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3N0cmluZyhpbXAu
bmFtZSB8fCAnJyk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGltcC5raW5kKTsKKyAgICAg
ICAgICBpZiAoaW1wLmtpbmQgPT0ga0V4dGVybmFsRnVuY3Rpb24pIHsKKyAgICAgICAgICAgIHNl
Y3Rpb24uZW1pdF91MzJ2KGltcC50eXBlX2luZGV4KTsKKyAgICAgICAgICB9IGVsc2UgaWYgKGlt
cC5raW5kID09IGtFeHRlcm5hbEdsb2JhbCkgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5
cGUoaW1wLnR5cGUpOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGltcC5tdXRhYmxlKTsK
KyAgICAgICAgICB9IGVsc2UgaWYgKGltcC5raW5kID09IGtFeHRlcm5hbE1lbW9yeSkgeworICAg
ICAgICAgICAgdmFyIGhhc19tYXggPSAodHlwZW9mIGltcC5tYXhpbXVtKSAhPSAndW5kZWZpbmVk
JzsKKyAgICAgICAgICAgIHZhciBpc19zaGFyZWQgPSAodHlwZW9mIGltcC5zaGFyZWQpICE9ICd1
bmRlZmluZWQnOworICAgICAgICAgICAgaWYgKGlzX3NoYXJlZCkgeworICAgICAgICAgICAgICBz
ZWN0aW9uLmVtaXRfdTgoaGFzX21heCA/IDMgOiAyKTsgIC8vIGZsYWdzCisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoaGFzX21heCA/IDEgOiAwKTsg
IC8vIGZsYWdzCisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihp
bXAuaW5pdGlhbCk7ICAgICAgICAgICAgICAgLy8gaW5pdGlhbAorICAgICAgICAgICAgaWYgKGhh
c19tYXgpIHNlY3Rpb24uZW1pdF91MzJ2KGltcC5tYXhpbXVtKTsgIC8vIG1heGltdW0KKyAgICAg
ICAgICB9IGVsc2UgaWYgKGltcC5raW5kID09IGtFeHRlcm5hbFRhYmxlKSB7CisgICAgICAgICAg
ICBzZWN0aW9uLmVtaXRfdHlwZShpbXAudHlwZSk7CisgICAgICAgICAgICB2YXIgaGFzX21heCA9
ICh0eXBlb2YgaW1wLm1heGltdW0pICE9ICd1bmRlZmluZWQnOworICAgICAgICAgICAgc2VjdGlv
bi5lbWl0X3U4KGhhc19tYXggPyAxIDogMCk7ICAgICAgICAgICAgIC8vIGZsYWdzCisgICAgICAg
ICAgICBzZWN0aW9uLmVtaXRfdTMydihpbXAuaW5pdGlhbCk7ICAgICAgICAgICAgICAgLy8gaW5p
dGlhbAorICAgICAgICAgICAgaWYgKGhhc19tYXgpIHNlY3Rpb24uZW1pdF91MzJ2KGltcC5tYXhp
bXVtKTsgIC8vIG1heGltdW0KKyAgICAgICAgICB9IGVsc2UgaWYgKGltcC5raW5kID09IGtFeHRl
cm5hbFRhZykgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoa0V4Y2VwdGlvbkF0dHJp
YnV0ZSk7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihpbXAudHlwZV9pbmRleCk7Cisg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93bi91
bnN1cHBvcnRlZCBpbXBvcnQga2luZCAnICsgaW1wLmtpbmQpOworICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIGZ1bmN0aW9ucyBkZWNsYXJhdGlv
bnMKKyAgICBpZiAod2FzbS5mdW5jdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVn
KSBwcmludCgnZW1pdHRpbmcgZnVuY3Rpb24gZGVjbHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7Cisg
ICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtGdW5jdGlvblNlY3Rpb25Db2RlLCBzZWN0aW9uID0+
IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS5mdW5jdGlvbnMubGVuZ3RoKTsKKyAg
ICAgICAgZm9yIChsZXQgZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgeworICAgICAgICAgIHNlY3Rp
b24uZW1pdF91MzJ2KGZ1bmMudHlwZV9pbmRleCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAg
IH0KKworICAgIC8vIEFkZCB0YWJsZSBzZWN0aW9uCisgICAgaWYgKHdhc20udGFibGVzLmxlbmd0
aCA+IDApIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIHRhYmxlcyBAICcgKyBi
aW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1RhYmxlU2VjdGlvbkNv
ZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLnRhYmxlcy5s
ZW5ndGgpOworICAgICAgICBmb3IgKGxldCB0YWJsZSBvZiB3YXNtLnRhYmxlcykgeworICAgICAg
ICAgIHNlY3Rpb24uZW1pdF90eXBlKHRhYmxlLnR5cGUpOworICAgICAgICAgIHNlY3Rpb24uZW1p
dF91OCh0YWJsZS5oYXNfbWF4KTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih0YWJsZS5p
bml0aWFsX3NpemUpOworICAgICAgICAgIGlmICh0YWJsZS5oYXNfbWF4KSBzZWN0aW9uLmVtaXRf
dTMydih0YWJsZS5tYXhfc2l6ZSk7CisgICAgICAgICAgaWYgKHRhYmxlLmhhc19pbml0KSB7Cisg
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKHRhYmxlLmluaXRfZXhwcik7CisgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgbWVtb3J5
IHNlY3Rpb24KKyAgICBpZiAod2FzbS5tZW1vcnkgIT09IHVuZGVmaW5lZCkgeworICAgICAgaWYg
KGRlYnVnKSBwcmludCgnZW1pdHRpbmcgbWVtb3J5IEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAg
ICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrTWVtb3J5U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4gewor
ICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMSk7ICAvLyBvbmUgbWVtb3J5IGVudHJ5CisgICAgICAg
IGNvbnN0IGhhc19tYXggPSB3YXNtLm1lbW9yeS5tYXggIT09IHVuZGVmaW5lZDsKKyAgICAgICAg
aWYgKHdhc20ubWVtb3J5LmlzX21lbW9yeTY0KSB7CisgICAgICAgICAgaWYgKHdhc20ubWVtb3J5
LnNoYXJlZCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaGFyaW5nIG1lbW9yeTY0
IGlzIG5vdCBzdXBwb3J0ZWQgKHlldCknKTsKKyAgICAgICAgICB9CisgICAgICAgICAgc2VjdGlv
bi5lbWl0X3U4KAorICAgICAgICAgICAgICBoYXNfbWF4ID8ga0xpbWl0c01lbW9yeTY0V2l0aE1h
eGltdW0gOiBrTGltaXRzTWVtb3J5NjROb01heGltdW0pOworICAgICAgICAgIHNlY3Rpb24uZW1p
dF91NjR2KHdhc20ubWVtb3J5Lm1pbik7CisgICAgICAgICAgaWYgKGhhc19tYXgpIHNlY3Rpb24u
ZW1pdF91NjR2KHdhc20ubWVtb3J5Lm1heCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
c2VjdGlvbi5lbWl0X3U4KAorICAgICAgICAgICAgICB3YXNtLm1lbW9yeS5zaGFyZWQgPworICAg
ICAgICAgICAgICAgICAgKGhhc19tYXggPyBrTGltaXRzU2hhcmVkV2l0aE1heGltdW0gOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBrTGltaXRzU2hhcmVkTm9NYXhpbXVtKSA6CisgICAg
ICAgICAgICAgICAgICAoaGFzX21heCA/IGtMaW1pdHNXaXRoTWF4aW11bSA6IGtMaW1pdHNOb01h
eGltdW0pKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLm1lbW9yeS5taW4pOwor
ICAgICAgICAgIGlmIChoYXNfbWF4KSBzZWN0aW9uLmVtaXRfdTMydih3YXNtLm1lbW9yeS5tYXgp
OworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgdGFnIHNlY3Rpb24u
CisgICAgaWYgKHdhc20udGFncy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50
KCdlbWl0dGluZyB0YWdzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRf
c2VjdGlvbihrVGFnU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVt
aXRfdTMydih3YXNtLnRhZ3MubGVuZ3RoKTsKKyAgICAgICAgZm9yIChsZXQgdHlwZV9pbmRleCBv
ZiB3YXNtLnRhZ3MpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihrRXhjZXB0aW9uQXR0
cmlidXRlKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih0eXBlX2luZGV4KTsKKyAgICAg
ICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIGdsb2JhbCBzZWN0aW9uLgorICAg
IGlmICh3YXNtLmdsb2JhbHMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgn
ZW1pdHRpbmcgZ2xvYmFscyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0
X3NlY3Rpb24oa0dsb2JhbFNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlv
bi5lbWl0X3UzMnYod2FzbS5nbG9iYWxzLmxlbmd0aCk7CisgICAgICAgIGZvciAobGV0IGdsb2Jh
bCBvZiB3YXNtLmdsb2JhbHMpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShnbG9iYWwu
dHlwZSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGdsb2JhbC5tdXRhYmxlKTsKKyAgICAg
ICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKGdsb2JhbC5pbml0KTsKKyAgICAgICAgfQorICAg
ICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIGV4cG9ydCB0YWJsZS4KKyAgICB2YXIgbWVtX2V4
cG9ydCA9ICh3YXNtLm1lbW9yeSAhPT0gdW5kZWZpbmVkICYmIHdhc20ubWVtb3J5LmV4cG9ydGVk
KTsKKyAgICB2YXIgZXhwb3J0c19jb3VudCA9IHdhc20uZXhwb3J0cy5sZW5ndGggKyAobWVtX2V4
cG9ydCA/IDEgOiAwKTsKKyAgICBpZiAoZXhwb3J0c19jb3VudCA+IDApIHsKKyAgICAgIGlmIChk
ZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGV4cG9ydHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAg
ICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtFeHBvcnRTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7Cisg
ICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGV4cG9ydHNfY291bnQpOworICAgICAgICBmb3IgKGxl
dCBleHAgb2Ygd2FzbS5leHBvcnRzKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3N0cmluZyhl
eHAubmFtZSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGV4cC5raW5kKTsKKyAgICAgICAg
ICBzZWN0aW9uLmVtaXRfdTMydihleHAuaW5kZXgpOworICAgICAgICB9CisgICAgICAgIGlmICht
ZW1fZXhwb3J0KSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3N0cmluZygnbWVtb3J5Jyk7Cisg
ICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHRlcm5hbE1lbW9yeSk7CisgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3U4KDApOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBB
ZGQgc3RhcnQgZnVuY3Rpb24gc2VjdGlvbi4KKyAgICBpZiAod2FzbS5zdGFydF9pbmRleCAhPT0g
dW5kZWZpbmVkKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBzdGFydCBmdW5j
dGlvbiBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1N0
YXJ0U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3
YXNtLnN0YXJ0X2luZGV4KTsKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCBlbGVtZW50
IHNlZ21lbnRzCisgICAgaWYgKHdhc20uZWxlbWVudF9zZWdtZW50cy5sZW5ndGggPiAwKSB7Cisg
ICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBlbGVtZW50IHNlZ21lbnRzIEAgJyArIGJp
bmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrRWxlbWVudFNlY3Rpb25D
b2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgdmFyIHNlZ21lbnRzID0gd2FzbS5lbGVtZW50X3Nl
Z21lbnRzOworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWdtZW50cy5sZW5ndGgpOworCisg
ICAgICAgIGZvciAobGV0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHsKKyAgICAgICAgICAvLyBFbWl0
IGZsYWcgYW5kIGhlYWRlci4KKyAgICAgICAgICAvLyBFYWNoIGNhc2UgYmVsb3cgY29ycmVzcG9u
ZHMgdG8gYSBmbGFnIGZyb20KKyAgICAgICAgICAvLyBodHRwczovL3dlYmFzc2VtYmx5LmdpdGh1
Yi5pby9zcGVjL2NvcmUvYmluYXJ5L21vZHVsZXMuaHRtbCNlbGVtZW50LXNlY3Rpb24KKyAgICAg
ICAgICAvLyAobm90IGluIGluY3JlYXNpbmcgb3JkZXIpLgorICAgICAgICAgIGlmIChzZWdtZW50
LmlzX2FjdGl2ZSgpKSB7CisgICAgICAgICAgICBpZiAoc2VnbWVudC50YWJsZSA9PSAwICYmIHNl
Z21lbnQudHlwZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgIGlmIChzZWdtZW50LmV4
cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRf
dTgoMHgwNCk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcihzZWdtZW50
Lm9mZnNldCk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2VjdGlv
bi5lbWl0X3U4KDB4MDApCisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcihz
ZWdtZW50Lm9mZnNldCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgIGlmIChzZWdtZW50LmV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkpIHsKKyAg
ICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwNik7CisgICAgICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3UzMnYoc2VnbWVudC50YWJsZSk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5l
bWl0X2luaXRfZXhwcihzZWdtZW50Lm9mZnNldCk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5l
bWl0X3R5cGUoc2VnbWVudC50eXBlKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwMik7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5l
bWl0X3UzMnYoc2VnbWVudC50YWJsZSk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2lu
aXRfZXhwcihzZWdtZW50Lm9mZnNldCk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4
KGtFeHRlcm5hbEZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc2VnbWVudC5leHByZXNzaW9uc19hc19l
bGVtZW50cygpKSB7CisgICAgICAgICAgICAgIGlmIChzZWdtZW50LmlzX3Bhc3NpdmUoKSkgewor
ICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDA1KTsKKyAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwNyk7CisgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUoc2VnbWVudC50eXBlKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGlmIChzZWdtZW50LmlzX3Bhc3NpdmUo
KSkgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDAxKTsKKyAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwMyk7CisgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHRlcm5hbEZ1bmN0
aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyBFbWl0IGVs
ZW1lbnRzLgorICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHNlZ21lbnQuZWxlbWVudHMubGVu
Z3RoKTsKKyAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIHNlZ21lbnQuZWxlbWVudHMpIHsK
KyAgICAgICAgICAgIGlmIChzZWdtZW50LmV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkpIHsKKyAg
ICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcihlbGVtZW50KTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGVsZW1lbnQpOworICAg
ICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSkKKyAgICB9CisKKyAg
ICAvLyBJZiB0aGVyZSBhcmUgYW55IHBhc3NpdmUgZGF0YSBzZWdtZW50cywgYWRkIHRoZSBEYXRh
Q291bnQgc2VjdGlvbi4KKyAgICBpZiAod2FzbS5kYXRhX3NlZ21lbnRzLnNvbWUoc2VnID0+ICFz
ZWcuaXNfYWN0aXZlKSkgeworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrRGF0YUNvdW50U2Vj
dGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLmRh
dGFfc2VnbWVudHMubGVuZ3RoKTsKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIElmIHRoZXJl
IGFyZSBjb21waWxhdGlvbiBoaW50cyBhZGQgYSBjdXN0b20gc2VjdGlvbiAnY29tcGlsYXRpb25I
aW50cycKKyAgICAvLyBhZnRlciB0aGUgZnVuY3Rpb24gc2VjdGlvbiBhbmQgYmVmb3JlIHRoZSBj
b2RlIHNlY3Rpb24uCisgICAgaWYgKHdhc20uY29tcGlsYXRpb25faGludHMubGVuZ3RoID4gMCkg
eworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgY29tcGlsYXRpb24gaGludHMgQCAn
ICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICAvLyBCdWlsZCBjdXN0b20gc2VjdGlvbiBwYXlsb2Fk
LgorICAgICAgbGV0IHBheWxvYWRCaW5hcnkgPSBuZXcgQmluYXJ5KCk7CisgICAgICBsZXQgaW1w
bGljaXRfY29tcGlsYXRpb25faGludHNfY291bnQgPSB3YXNtLmZ1bmN0aW9ucy5sZW5ndGg7Cisg
ICAgICBwYXlsb2FkQmluYXJ5LmVtaXRfdTMydihpbXBsaWNpdF9jb21waWxhdGlvbl9oaW50c19j
b3VudCk7CisKKyAgICAgIC8vIERlZmF1bHRzIHRvIHRoZSBjb21waWxlcidzIGNob2ljZSBpZiBu
byBiZXR0ZXIgaGludCB3YXMgZ2l2ZW4gKDB4MDApLgorICAgICAgbGV0IGRlZmF1bHRIaW50Qnl0
ZSA9IGtDb21waWxhdGlvbkhpbnRTdHJhdGVneURlZmF1bHQgfAorICAgICAgICAgIChrQ29tcGls
YXRpb25IaW50VGllckRlZmF1bHQgPDwgMikgfAorICAgICAgICAgIChrQ29tcGlsYXRpb25IaW50
VGllckRlZmF1bHQgPDwgNCk7CisKKyAgICAgIC8vIEVtaXQgaGludCBieXRlIGZvciBldmVyeSBm
dW5jdGlvbiBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLgorICAgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCBpbXBsaWNpdF9jb21waWxhdGlvbl9oaW50c19jb3VudDsgaSsrKSB7CisgICAgICAgIGxldCBp
bmRleCA9IHdhc20ubnVtX2ltcG9ydGVkX2Z1bmNzICsgaTsKKyAgICAgICAgdmFyIGhpbnRCeXRl
OworICAgICAgICBpZiAoaW5kZXggaW4gd2FzbS5jb21waWxhdGlvbl9oaW50cykgeworICAgICAg
ICAgIGxldCBoaW50ID0gd2FzbS5jb21waWxhdGlvbl9oaW50c1tpbmRleF07CisgICAgICAgICAg
aGludEJ5dGUgPQorICAgICAgICAgICAgICBoaW50LnN0cmF0ZWd5IHwgKGhpbnQuYmFzZWxpbmVU
aWVyIDw8IDIpIHwgKGhpbnQudG9wVGllciA8PCA0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICBoaW50Qnl0ZSA9IGRlZmF1bHRIaW50Qnl0ZTsKKyAgICAgICAgfQorICAgICAgICBwYXls
b2FkQmluYXJ5LmVtaXRfdTgoaGludEJ5dGUpOworICAgICAgfQorCisgICAgICAvLyBGaW5hbGl6
ZSBhcyBjdXN0b20gc2VjdGlvbi4KKyAgICAgIGxldCBuYW1lID0gJ2NvbXBpbGF0aW9uSGludHMn
OworICAgICAgbGV0IGJ5dGVzID0gdGhpcy5jcmVhdGVDdXN0b21TZWN0aW9uKG5hbWUsIHBheWxv
YWRCaW5hcnkudHJ1bmNfYnVmZmVyKCkpOworICAgICAgYmluYXJ5LmVtaXRfYnl0ZXMoYnl0ZXMp
OworICAgIH0KKworICAgIC8vIEFkZCBmdW5jdGlvbiBib2RpZXMuCisgICAgaWYgKHdhc20uZnVu
Y3Rpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgIC8vIGVtaXQgZnVuY3Rpb24gYm9kaWVzCisgICAg
ICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBjb2RlIEAgJyArIGJpbmFyeS5sZW5ndGgpOwor
ICAgICAgbGV0IHNlY3Rpb25fbGVuZ3RoID0gMDsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24o
a0NvZGVTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2
KHdhc20uZnVuY3Rpb25zLmxlbmd0aCk7CisgICAgICAgIGxldCBoZWFkZXIgPSBuZXcgQmluYXJ5
OworICAgICAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAgICAgICAg
aGVhZGVyLnJlc2V0KCk7CisgICAgICAgICAgLy8gRnVuY3Rpb24gYm9keSBsZW5ndGggd2lsbCBi
ZSBwYXRjaGVkIGxhdGVyLgorICAgICAgICAgIGxldCBsb2NhbF9kZWNscyA9IGZ1bmMubG9jYWxz
IHx8IFtdOworICAgICAgICAgIGhlYWRlci5lbWl0X3UzMnYobG9jYWxfZGVjbHMubGVuZ3RoKTsK
KyAgICAgICAgICBmb3IgKGxldCBkZWNsIG9mIGxvY2FsX2RlY2xzKSB7CisgICAgICAgICAgICBo
ZWFkZXIuZW1pdF91MzJ2KGRlY2wuY291bnQpOworICAgICAgICAgICAgaGVhZGVyLmVtaXRfdHlw
ZShkZWNsLnR5cGUpOworICAgICAgICAgIH0KKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydiho
ZWFkZXIubGVuZ3RoICsgZnVuYy5ib2R5Lmxlbmd0aCk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0
X2J5dGVzKGhlYWRlci50cnVuY19idWZmZXIoKSk7CisgICAgICAgICAgLy8gU2V0IHRvIHNlY3Rp
b24gb2Zmc2V0IGZvciBub3csIHdpbGwgdXBkYXRlLgorICAgICAgICAgIGZ1bmMuYm9keV9vZmZz
ZXQgPSBzZWN0aW9uLmxlbmd0aDsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfYnl0ZXMoZnVuYy5i
b2R5KTsKKyAgICAgICAgfQorICAgICAgICBzZWN0aW9uX2xlbmd0aCA9IHNlY3Rpb24ubGVuZ3Ro
OworICAgICAgfSk7CisgICAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7Cisg
ICAgICAgIGZ1bmMuYm9keV9vZmZzZXQgKz0gYmluYXJ5Lmxlbmd0aCAtIHNlY3Rpb25fbGVuZ3Ro
OworICAgICAgfQorICAgIH0KKworICAgIC8vIEFkZCBkYXRhIHNlZ21lbnRzLgorICAgIGlmICh3
YXNtLmRhdGFfc2VnbWVudHMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgn
ZW1pdHRpbmcgZGF0YSBzZWdtZW50cyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFy
eS5lbWl0X3NlY3Rpb24oa0RhdGFTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNl
Y3Rpb24uZW1pdF91MzJ2KHdhc20uZGF0YV9zZWdtZW50cy5sZW5ndGgpOworICAgICAgICBmb3Ig
KGxldCBzZWcgb2Ygd2FzbS5kYXRhX3NlZ21lbnRzKSB7CisgICAgICAgICAgaWYgKHNlZy5pc19h
Y3RpdmUpIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgwKTsgIC8vIGxpbmVhciBtZW1v
cnkgaW5kZXggMCAvIGZsYWdzCisgICAgICAgICAgICBpZiAoc2VnLmlzX2dsb2JhbCkgeworICAg
ICAgICAgICAgICAvLyBpbml0aWFsaXplciBpcyBhIGdsb2JhbCB2YXJpYWJsZQorICAgICAgICAg
ICAgICBzZWN0aW9uLmVtaXRfdTgoa0V4cHJHbG9iYWxHZXQpOworICAgICAgICAgICAgICBzZWN0
aW9uLmVtaXRfdTMydihzZWcuYWRkcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAvLyBpbml0aWFsaXplciBpcyBhIGNvbnN0YW50CisgICAgICAgICAgICAgIHNlY3Rpb24u
ZW1pdF91OChrRXhwckkzMkNvbnN0KTsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYo
c2VnLmFkZHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtF
eHByRW5kKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4
KGtQYXNzaXZlKTsgIC8vIGZsYWdzCisgICAgICAgICAgfQorICAgICAgICAgIHNlY3Rpb24uZW1p
dF91MzJ2KHNlZy5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X2J5dGVzKHNl
Zy5kYXRhKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIGFueSBl
eHBsaWNpdGx5IGFkZGVkIHNlY3Rpb25zCisgICAgZm9yIChsZXQgZXhwIG9mIHdhc20uZXhwbGlj
aXQpIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGV4cGxpY2l0IEAgJyArIGJp
bmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfYnl0ZXMoZXhwKTsKKyAgICB9CisKKyAg
ICAvLyBBZGQgbmFtZXMuCisgICAgbGV0IG51bV9mdW5jdGlvbl9uYW1lcyA9IDA7CisgICAgbGV0
IG51bV9mdW5jdGlvbnNfd2l0aF9sb2NhbF9uYW1lcyA9IDA7CisgICAgZm9yIChsZXQgZnVuYyBv
ZiB3YXNtLmZ1bmN0aW9ucykgeworICAgICAgaWYgKGZ1bmMubmFtZSAhPT0gdW5kZWZpbmVkKSAr
K251bV9mdW5jdGlvbl9uYW1lczsKKyAgICAgIGlmIChmdW5jLm51bUxvY2FsTmFtZXMoKSA+IDAp
ICsrbnVtX2Z1bmN0aW9uc193aXRoX2xvY2FsX25hbWVzOworICAgIH0KKyAgICBpZiAobnVtX2Z1
bmN0aW9uX25hbWVzID4gMCB8fCBudW1fZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFtZXMgPiAwIHx8
CisgICAgICAgIHdhc20ubmFtZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBpZiAoZGVidWcpIHBy
aW50KCdlbWl0dGluZyBuYW1lcyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5l
bWl0X3NlY3Rpb24oa1Vua25vd25TZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNl
Y3Rpb24uZW1pdF9zdHJpbmcoJ25hbWUnKTsKKyAgICAgICAgLy8gRW1pdCBtb2R1bGUgbmFtZS4K
KyAgICAgICAgaWYgKHdhc20ubmFtZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgc2VjdGlv
bi5lbWl0X3NlY3Rpb24oa01vZHVsZU5hbWVDb2RlLCBuYW1lX3NlY3Rpb24gPT4geworICAgICAg
ICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfc3RyaW5nKHdhc20ubmFtZSk7CisgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gRW1pdCBmdW5jdGlvbiBuYW1lcy4KKyAgICAgICAgaWYg
KG51bV9mdW5jdGlvbl9uYW1lcyA+IDApIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfc2VjdGlv
bihrRnVuY3Rpb25OYW1lc0NvZGUsIG5hbWVfc2VjdGlvbiA9PiB7CisgICAgICAgICAgICBuYW1l
X3NlY3Rpb24uZW1pdF91MzJ2KG51bV9mdW5jdGlvbl9uYW1lcyk7CisgICAgICAgICAgICBmb3Ig
KGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAgICAgICAgICAgIGlmIChmdW5jLm5h
bWUgPT09IHVuZGVmaW5lZCkgY29udGludWU7CisgICAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5l
bWl0X3UzMnYoZnVuYy5pbmRleCk7CisgICAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0X3N0
cmluZyhmdW5jLm5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgICB9
CisgICAgICAgIC8vIEVtaXQgbG9jYWwgbmFtZXMuCisgICAgICAgIGlmIChudW1fZnVuY3Rpb25z
X3dpdGhfbG9jYWxfbmFtZXMgPiAwKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3NlY3Rpb24o
a0xvY2FsTmFtZXNDb2RlLCBuYW1lX3NlY3Rpb24gPT4geworICAgICAgICAgICAgbmFtZV9zZWN0
aW9uLmVtaXRfdTMydihudW1fZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFtZXMpOworICAgICAgICAg
ICAgZm9yIChsZXQgZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgeworICAgICAgICAgICAgICBpZiAo
ZnVuYy5udW1Mb2NhbE5hbWVzKCkgPT0gMCkgY29udGludWU7CisgICAgICAgICAgICAgIG5hbWVf
c2VjdGlvbi5lbWl0X3UzMnYoZnVuYy5pbmRleCk7CisgICAgICAgICAgICAgIG5hbWVfc2VjdGlv
bi5lbWl0X3UzMnYoZnVuYy5udW1Mb2NhbE5hbWVzKCkpOworICAgICAgICAgICAgICBsZXQgbmFt
ZV9pbmRleCA9IDA7CisgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnVuYy5sb2Nh
bF9uYW1lcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuYy5s
b2NhbF9uYW1lc1tpXSA9PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAgICAgbmFtZV9zZWN0
aW9uLmVtaXRfdTMydihuYW1lX2luZGV4KTsKKyAgICAgICAgICAgICAgICAgIG5hbWVfc2VjdGlv
bi5lbWl0X3N0cmluZyhmdW5jLmxvY2FsX25hbWVzW2ldKTsKKyAgICAgICAgICAgICAgICAgIG5h
bWVfaW5kZXgrKzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
bmFtZV9pbmRleCArPSBmdW5jLmxvY2FsX25hbWVzW2ldOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gYmluYXJ5LnRydW5jX2J1ZmZlcigpOworICB9
CisKKyAgdG9BcnJheShkZWJ1ZyA9IGZhbHNlKSB7CisgICAgcmV0dXJuIEFycmF5LmZyb20odGhp
cy50b0J1ZmZlcihkZWJ1ZykpOworICB9CisKKyAgaW5zdGFudGlhdGUoZmZpKSB7CisgICAgbGV0
IG1vZHVsZSA9IHRoaXMudG9Nb2R1bGUoKTsKKyAgICBsZXQgaW5zdGFuY2UgPSBuZXcgV2ViQXNz
ZW1ibHkuSW5zdGFuY2UobW9kdWxlLCBmZmkpOworICAgIHJldHVybiBpbnN0YW5jZTsKKyAgfQor
CisgIGFzeW5jSW5zdGFudGlhdGUoZmZpKSB7CisgICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3Rh
bnRpYXRlKHRoaXMudG9CdWZmZXIoKSwgZmZpKQorICAgICAgICAudGhlbigoe21vZHVsZSwgaW5z
dGFuY2V9KSA9PiBpbnN0YW5jZSk7CisgIH0KKworICB0b01vZHVsZShkZWJ1ZyA9IGZhbHNlKSB7
CisgICAgcmV0dXJuIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUodGhpcy50b0J1ZmZlcihkZWJ1Zykp
OworICB9Cit9CisKK2Z1bmN0aW9uIHdhc21TaWduZWRMZWIodmFsLCBtYXhfbGVuID0gNSkgewor
ICBsZXQgcmVzID0gW107CisgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4X2xlbjsgKytpKSB7Cisg
ICAgbGV0IHYgPSB2YWwgJiAweDdmOworICAgIC8vIElmIHt2fSBzaWduLWV4dGVuZGVkIGZyb20g
NyB0byAzMiBiaXRzIGlzIGVxdWFsIHRvIHZhbCwgd2UgYXJlIGRvbmUuCisgICAgaWYgKCgodiA8
PCAyNSkgPj4gMjUpID09IHZhbCkgeworICAgICAgcmVzLnB1c2godik7CisgICAgICByZXR1cm4g
cmVzOworICAgIH0KKyAgICByZXMucHVzaCh2IHwgMHg4MCk7CisgICAgdmFsID0gdmFsID4+IDc7
CisgIH0KKyAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgJ0xlYiB2YWx1ZSA8JyArIHZhbCArICc+
IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJyArIG1heF9sZW4pOworfQorCitmdW5jdGlvbiB3
YXNtVW5zaWduZWRMZWIodmFsLCBtYXhfbGVuID0gNSkgeworICBsZXQgcmVzID0gW107CisgIGZv
ciAobGV0IGkgPSAwOyBpIDwgbWF4X2xlbjsgKytpKSB7CisgICAgbGV0IHYgPSB2YWwgJiAweDdm
OworICAgIGlmICh2ID09IHZhbCkgeworICAgICAgcmVzLnB1c2godik7CisgICAgICByZXR1cm4g
cmVzOworICAgIH0KKyAgICByZXMucHVzaCh2IHwgMHg4MCk7CisgICAgdmFsID0gdmFsID4+PiA3
OworICB9CisgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICdMZWIgdmFsdWUgPCcgKyB2YWwgKyAn
PiBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICcgKyBtYXhfbGVuKTsKK30KKworZnVuY3Rpb24g
d2FzbUkzMkNvbnN0KHZhbCkgeworICByZXR1cm4gW2tFeHBySTMyQ29uc3QsIC4uLndhc21TaWdu
ZWRMZWIodmFsLCA1KV07Cit9CisKKy8vIE5vdGU6IFNpbmNlIHt2YWx9IGlzIGEgSlMgbnVtYmVy
LCB0aGUgZ2VuZXJhdGVkIGNvbnN0YW50IG9ubHkgaGFzIDUzIGJpdHMgb2YKKy8vIHByZWNpc2lv
bi4KK2Z1bmN0aW9uIHdhc21JNjRDb25zdCh2YWwpIHsKKyAgcmV0dXJuIFtrRXhwckk2NENvbnN0
LCAuLi53YXNtU2lnbmVkTGViKHZhbCwgMTApXTsKK30KKworZnVuY3Rpb24gd2FzbUYzMkNvbnN0
KGYpIHsKKyAgLy8gV3JpdGUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciBhdCBvZmZzZXQgMC4KKyAg
ZGF0YV92aWV3LnNldEZsb2F0MzIoMCwgZiwgdHJ1ZSk7CisgIHJldHVybiBbCisgICAga0V4cHJG
MzJDb25zdCwgYnl0ZV92aWV3WzBdLCBieXRlX3ZpZXdbMV0sIGJ5dGVfdmlld1syXSwgYnl0ZV92
aWV3WzNdCisgIF07Cit9CisKK2Z1bmN0aW9uIHdhc21GNjRDb25zdChmKSB7CisgIC8vIFdyaXRl
IGluIGxpdHRsZS1lbmRpYW4gb3JkZXIgYXQgb2Zmc2V0IDAuCisgIGRhdGFfdmlldy5zZXRGbG9h
dDY0KDAsIGYsIHRydWUpOworICByZXR1cm4gWworICAgIGtFeHByRjY0Q29uc3QsIGJ5dGVfdmll
d1swXSwgYnl0ZV92aWV3WzFdLCBieXRlX3ZpZXdbMl0sIGJ5dGVfdmlld1szXSwKKyAgICBieXRl
X3ZpZXdbNF0sIGJ5dGVfdmlld1s1XSwgYnl0ZV92aWV3WzZdLCBieXRlX3ZpZXdbN10KKyAgXTsK
K30KKworZnVuY3Rpb24gd2FzbVMxMjhDb25zdChmKSB7CisgIC8vIFdyaXRlIGluIGxpdHRsZS1l
bmRpYW4gb3JkZXIgYXQgb2Zmc2V0IDAuCisgIHJldHVybiBba1NpbWRQcmVmaXgsIGtFeHByUzEy
OENvbnN0LCAuLi5mXTsKK30KKworZnVuY3Rpb24gZ2V0T3Bjb2RlTmFtZShvcGNvZGUpIHsKKyAg
cmV0dXJuIGdsb2JhbFRoaXMua1dhc21PcGNvZGVOYW1lcz8uW29wY29kZV0gPz8gJ3Vua25vd24n
OworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3dhc20uanNvbiBiL0pTVGVzdHMvd2FzbS93
YXNtLmpzb24KaW5kZXggNGY4ZGQ5ZTNkMjEzLi45ZDIyNWU0ZTgyMjQgMTAwNjQ0Ci0tLSBhL0pT
VGVzdHMvd2FzbS93YXNtLmpzb24KKysrIGIvSlNUZXN0cy93YXNtL3dhc20uanNvbgpAQCAtMjMs
MzQgKzIzLDM4IEBACiAgICAgImJsb2NrX3R5cGUiOiBbImkzMiIsICJpNjQiLCAiZjMyIiwgImY2
NCIsICJ2b2lkIiwgImV4dGVybnJlZiIsICJmdW5jcmVmIl0sCiAgICAgInJlZl90eXBlIjogWyJm
dW5jcmVmIiwgImV4dGVybnJlZiIsICJ0eXBlX2lkeCJdLAogICAgICJleHRlcm5hbF9raW5kIjog
ewotICAgICAgICAiRnVuY3Rpb24iOiB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMCB9LAot
ICAgICAgICAiVGFibGUiOiAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMSB9LAotICAg
ICAgICAiTWVtb3J5IjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMiB9LAotICAgICAg
ICAiR2xvYmFsIjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMyB9CisgICAgICAgICJG
dW5jdGlvbiI6ICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAwIH0sCisgICAgICAgICJU
YWJsZSI6ICAgICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAxIH0sCisgICAgICAgICJN
ZW1vcnkiOiAgICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAyIH0sCisgICAgICAgICJH
bG9iYWwiOiAgICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAzIH0sCisgICAgICAgICJF
eGNlcHRpb24iOiAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiA0IH0KICAgICB9LAogICAg
ICJzZWN0aW9uIiA6IHsKLSAgICAgICAgIlR5cGUiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIs
ICJ2YWx1ZSI6ICAxLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0
aW9ucyIgfSwKLSAgICAgICAgIkltcG9ydCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1
ZSI6ICAyLCAiZGVzY3JpcHRpb24iOiAiSW1wb3J0IGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAg
IkZ1bmN0aW9uIjogeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAzLCAiZGVzY3JpcHRp
b24iOiAiRnVuY3Rpb24gZGVjbGFyYXRpb25zIiB9LAotICAgICAgICAiVGFibGUiOiAgICB7ICJ0
eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDQsICJkZXNjcmlwdGlvbiI6ICJJbmRpcmVjdCBm
dW5jdGlvbiB0YWJsZSBhbmQgb3RoZXIgdGFibGVzIiB9LAotICAgICAgICAiTWVtb3J5IjogICB7
ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDUsICJkZXNjcmlwdGlvbiI6ICJNZW1vcnkg
YXR0cmlidXRlcyIgfSwKLSAgICAgICAgIkdsb2JhbCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIs
ICJ2YWx1ZSI6ICA2LCAiZGVzY3JpcHRpb24iOiAiR2xvYmFsIGRlY2xhcmF0aW9ucyIgfSwKLSAg
ICAgICAgIkV4cG9ydCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA3LCAiZGVz
Y3JpcHRpb24iOiAiRXhwb3J0cyIgfSwKLSAgICAgICAgIlN0YXJ0IjogICAgeyAidHlwZSI6ICJ2
YXJ1aW50NyIsICJ2YWx1ZSI6ICA4LCAiZGVzY3JpcHRpb24iOiAiU3RhcnQgZnVuY3Rpb24gZGVj
bGFyYXRpb24iIH0sCi0gICAgICAgICJFbGVtZW50IjogIHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAgOSwgImRlc2NyaXB0aW9uIjogIkVsZW1lbnRzIHNlY3Rpb24iIH0sCi0gICAgICAg
ICJDb2RlIjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMCwgImRlc2NyaXB0
aW9uIjogIkZ1bmN0aW9uIGJvZGllcyAoY29kZSkiIH0sCi0gICAgICAgICJEYXRhIjogICAgIHsg
InR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMSwgImRlc2NyaXB0aW9uIjogIkRhdGEgc2Vn
bWVudHMiIH0KKyAgICAgICAgIlR5cGUiOiAgICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFs
dWUiOiAgMSwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIHNpZ25hdHVyZSBkZWNsYXJhdGlvbnMi
IH0sCisgICAgICAgICJJbXBvcnQiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjog
IDIsICJkZXNjcmlwdGlvbiI6ICJJbXBvcnQgZGVjbGFyYXRpb25zIiB9LAorICAgICAgICAiRnVu
Y3Rpb24iOiAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAzLCAiZGVzY3JpcHRpb24i
OiAiRnVuY3Rpb24gZGVjbGFyYXRpb25zIiB9LAorICAgICAgICAiVGFibGUiOiAgICAgeyAidHlw
ZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA0LCAiZGVzY3JpcHRpb24iOiAiSW5kaXJlY3QgZnVu
Y3Rpb24gdGFibGUgYW5kIG90aGVyIHRhYmxlcyIgfSwKKyAgICAgICAgIk1lbW9yeSI6ICAgIHsg
InR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNSwgImRlc2NyaXB0aW9uIjogIk1lbW9yeSBh
dHRyaWJ1dGVzIiB9LAorICAgICAgICAiRXhjZXB0aW9uIjogeyAidHlwZSI6ICJ2YXJ1aW50NyIs
ICJ2YWx1ZSI6IDEzLCAiZGVzY3JpcHRpb24iOiAiRXhjZXB0aW9uIGRlY2xhcmF0aW9ucyIgfSwK
KyAgICAgICAgIkdsb2JhbCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNiwg
ImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJFeHBvcnQi
OiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDcsICJkZXNjcmlwdGlvbiI6ICJF
eHBvcnRzIiB9LAorICAgICAgICAiU3RhcnQiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2
YWx1ZSI6ICA4LCAiZGVzY3JpcHRpb24iOiAiU3RhcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24iIH0s
CisgICAgICAgICJFbGVtZW50IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDks
ICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9uIiB9LAorICAgICAgICAiQ29kZSI6ICAg
ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEwLCAiZGVzY3JpcHRpb24iOiAiRnVu
Y3Rpb24gYm9kaWVzIChjb2RlKSIgfSwKKyAgICAgICAgIkRhdGEiOiAgICAgIHsgInR5cGUiOiAi
dmFydWludDciLCAidmFsdWUiOiAxMSwgImRlc2NyaXB0aW9uIjogIkRhdGEgc2VnbWVudHMiIH0s
CisgICAgICAgICJEYXRhQ291bnQiOiB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTIs
ICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgZGF0YSBzZWdtZW50cyIgfQogICAgIH0sCiAgICAg
Im9wY29kZSI6IHsKICAgICAgICAgInVucmVhY2hhYmxlIjogICAgICAgICB7ICJjYXRlZ29yeSI6
ICJjb250cm9sIiwgICAgInZhbHVlIjogICAwLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJ0cmFwIGltbWVkaWF0ZWx5IiB9LAorICAgICAgICAibm9wIjogICAgICAg
ICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDEsICJyZXR1
cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIm5vIG9wZXJhdGlvbiIgfSwKICAg
ICAgICAgImJsb2NrIjogICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAg
InZhbHVlIjogICAyLCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAg
ICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUi
OiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJi
ZWdpbiBhIHNlcXVlbmNlIG9mIGV4cHJlc3Npb25zLCB5aWVsZGluZyAwIG9yIDEgdmFsdWVzIiB9
LAogICAgICAgICAibG9vcCI6ICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wi
LCAgICAidmFsdWUiOiAgIDMsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAg
ICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogImJlZ2luIGEgYmxvY2sgd2hpY2ggY2FuIGFsc28gZm9ybSBjb250cm9sIGZsb3cgbG9vcHMi
IH0sCiAgICAgICAgICJpZiI6ICAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJv
bCIsICAgICJ2YWx1ZSI6ICAgNCwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAg
ICAgICAgICAicGFyYW1ldGVyIjogWyJib29sIl0sICAgICAgICAgICAgICAgICAgICAgICAiaW1t
ZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiYmVnaW4gaWYgZXhwcmVzc2lvbiIgfSwKICAgICAgICAgImVsc2UiOiAgICAgICAgICAg
ICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA1LCAicmV0dXJuIjog
WyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBlbHNlIGV4cHJlc3Npb24gb2Yg
aWYiIH0sCi0gICAgICAgICJzZWxlY3QiOiAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29u
dHJvbCIsICAgICJ2YWx1ZSI6ICAyNywgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAgICAi
aW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAic2VsZWN0IG9uZSBvZiB0d28gdmFsdWVzIGJhc2VkIG9uIGNvbmRpdGlvbiIgfSwK
LSAgICAgICAgImFubm90YXRlZF9zZWxlY3QiOiAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwg
ICAgInZhbHVlIjogIDI4LCAicmV0dXJuIjogWyJwcmV2Il0sICAgICAgICAgICAgICAgICAgICAg
ICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wiXSwgICAgICAgICJpbW1lZGlh
dGUiOiBbeyJuYW1lIjogInRhcmdldF90eXBlc19jb3VudCIsICJ0eXBlIjogInZhcnVpbnQzMiIs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFyZ2V0IHR5cGVzIHZlY3RvciJ9LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
Im5hbWUiOiAidGFyZ2V0X3R5cGVzIiwgICAgICAgInR5cGUiOiAidmFsdWVfdHlwZSoiLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRhcmdl
dCB0eXBlcyB0aGF0IGluZGljYXRlIHJlc3VsdCBvZiBzZWxlY3QgaW5zdHJ1Y3Rpb24ifV0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
dGhlIHNhbWUgYXMganVzdCBzZWxlY3QgYnV0IHdpdGggdGhlIGFubm90YXRpb24gZm9yIHJlc3Vs
dCB0eXBlcyIgfSwKKyAgICAgICAgInRyeSI6ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6
ICJjb250cm9sIiwgICAgInZhbHVlIjogICA2LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAg
ICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJiZWdpbiB0cnkgZXhwcmVzc2lvbiIgfSwKKyAgICAgICAgImNhdGNoIjog
ICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA3LCAi
cmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImV4
biIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBjYXRjaCBleHBy
ZXNzaW9uIG9mIHRyeSIgfSwKKyAgICAgICAgInRocm93IjogICAgICAgICAgICAgICB7ICJjYXRl
Z29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA4LCAicmV0dXJuIjogWyJjb250cm9sIl0s
ICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImV4biIsICJ0eXBlIjogInZhcnVpbnQz
MiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJ0aHJvdyBleGNlcHRpb24iIH0sCisgICAgICAgICJyZXRocm93
IjogICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgOSwg
InJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJy
ZWxhdGl2ZV9kZXB0aCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAicmV0aHJvdyB0aGUgZXhj
ZXB0aW9uIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIiB9LAogICAgICAgICAiYnIiOiAgICAgICAg
ICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTIsICJyZXR1
cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRp
dmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJyZWFrIHRoYXQgdGFyZ2V0cyBh
biBvdXRlciBuZXN0ZWQgYmxvY2siIH0sCiAgICAgICAgICJicl9pZiI6ICAgICAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMywgInJldHVybiI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2ZV9kZXB0aCIs
ICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiY29uZGl0aW9uYWwgYnJlYWsgdGhhdCB0YXJnZXRz
IGFuIG91dGVyIG5lc3RlZCBibG9jayIgfSwKICAgICAgICAgImJyX3RhYmxlIjogICAgICAgICAg
ICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDE0LCAicmV0dXJuIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInRhcmdldF9jb3VudCIs
ICAgInR5cGUiOiAidmFydWludDMyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFy
Z2V0X3RhYmxlIn0sCkBAIC01OCw4ICs2MiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Im5hbWUiOiAiZGVmYXVsdF90
YXJnZXQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImFuIG91dGVyIGJsb2NrIG9yIGxvb3Ag
dG8gd2hpY2ggdG8gYnJlYWsgaW4gdGhlIGRlZmF1bHQgY2FzZSJ9XSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJicmFuY2ggdGFibGUg
Y29udHJvbCBmbG93IGNvbnN0cnVjdCIgfSwKICAgICAgICAgInJldHVybiI6ICAgICAgICAgICAg
ICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDE1LCAicmV0dXJuIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJyZXR1cm4gemVybyBvciBvbmUgdmFsdWUgZnJv
bSB0aGlzIGZ1bmN0aW9uIiB9LAorICAgICAgICAiZGVsZWdhdGUiOiAgICAgICAgICAgIHsgImNh
dGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjQsICJyZXR1cm4iOiBbImNvbnRyb2wi
XSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAidHlw
ZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogImRlbGVnYXRlIHRvIGEgcGFyZW50IHRyeSBibG9jayIgfSwK
KyAgICAgICAgImNhdGNoX2FsbCI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwg
ICAgInZhbHVlIjogIDI1LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAg
ICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlh
dGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJjYXRjaCBleGNlcHRpb25zIHJlZ2FyZGxlc3Mgb2YgdGFnIiB9LAogICAgICAgICAiZHJvcCI6
ICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjYs
ICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6
IFsiYW55Il0sICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImlnbm9yZSB2YWx1ZSIg
fSwKLSAgICAgICAgIm5vcCI6ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9s
IiwgICAgInZhbHVlIjogICAxLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1l
ZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJubyBvcGVyYXRpb24iIH0sCisgICAgICAgICJzZWxlY3QiOiAgICAgICAgICAgICAgeyAi
Y2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNywgInJldHVybiI6IFsicHJldiJd
LCAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJi
b29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAic2VsZWN0IG9uZSBvZiB0d28gdmFsdWVzIGJhc2VkIG9u
IGNvbmRpdGlvbiIgfSwKKyAgICAgICAgImFubm90YXRlZF9zZWxlY3QiOiAgICB7ICJjYXRlZ29y
eSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI4LCAicmV0dXJuIjogWyJwcmV2Il0sICAgICAg
ICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wiXSwg
ICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInRhcmdldF90eXBlc19jb3VudCIsICJ0eXBl
IjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFyZ2V0IHR5cGVzIHZl
Y3RvciJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7Im5hbWUiOiAidGFyZ2V0X3R5cGVzIiwgICAgICAgInR5cGUiOiAidmFs
dWVfdHlwZSoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogInRhcmdldCB0eXBlcyB0aGF0IGluZGljYXRlIHJlc3VsdCBvZiBzZWxlY3QgaW5z
dHJ1Y3Rpb24ifV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAidGhlIHNhbWUgYXMganVzdCBzZWxlY3QgYnV0IHdpdGggdGhlIGFubm90
YXRpb24gZm9yIHJlc3VsdCB0eXBlcyIgfSwKICAgICAgICAgImVuZCI6ICAgICAgICAgICAgICAg
ICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDExLCAicmV0dXJuIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJlbmQgYSBibG9jaywgbG9vcCwgb3IgaWYiIH0s
CiAgICAgICAgICJpMzIuY29uc3QiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAic3BlY2lhbCIs
ICAgICJ2YWx1ZSI6ICA2NSwgInJldHVybiI6IFsiaTMyIl0sICAgICAgICAgICAgICAgICAgICAg
ICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRp
YXRlIjogW3sibmFtZSI6ICJ2YWx1ZSIsICAgICAgICAgICJ0eXBlIjogInZhcmludDMyIn1dLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiYSBjb25zdGFudCB2YWx1ZSBpbnRlcnByZXRlZCBhcyBpMzIiIH0sCiAgICAgICAgICJpNjQu
Y29uc3QiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAic3BlY2lhbCIsICAgICJ2YWx1ZSI6ICA2
NiwgInJldHVybiI6IFsiaTY0Il0sICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVy
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6
ICJ2YWx1ZSIsICAgICAgICAgICJ0eXBlIjogInZhcmludDY0In1dLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYSBjb25zdGFudCB2
YWx1ZSBpbnRlcnByZXRlZCBhcyBpNjQiIH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
OTkxOGViNTc4NDguLjg3OTUzNWFjZmJiNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjYyIEBACisyMDIxLTA5LTE2ICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUu
Y29tPiBhbmQgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBJbXBsZW1lbnQgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlvbiBoYW5kbGluZyBwcm9wb3NhbAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5NjgxCisg
ICAgICAgIDxyZGFyOi8vODE2MDMzODc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV0lQIFNwZWM6IGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJs
eS9leGNlcHRpb24taGFuZGxpbmcKKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6Cisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9IYW5kbGVy
SW5mby5oOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6
OkJhc2VJbnN0cnVjdGlvbjo6bmFtZSBjb25zdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZUluZGV4IGNvbnN0
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6
OkNhdGNoSW5mbzo6Q2F0Y2hJbmZvKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6VW53
aW5kRnVuY3Rvcik6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6Om9wZXJhdG9yKCkgY29u
c3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5kKToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpDYXRjaEluZm86OkNhdGNoSW5m
byk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKToKKyAgICAgICAgKiBqaXQvSklU
RXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAq
IGxsaW50L0xMSW50Q29tbW9uLmg6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmg6CisgICAg
ICAgIChKU0M6OkxMSW50OjpnZXRDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldFdp
ZGUxNkNvZGVSZWYpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0V2lkZTMyQ29kZVJlZik6Cisg
ICAgICAgICogbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6
Ondhc21SZXR1cm5Ub1Rocm93KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmhhbmRsZVdhc21DYXRj
aCk6CisgICAgICAgICogbGxpbnQvTExJbnRFeGNlcHRpb25zLmg6CisgICAgICAgICogbGxpbnQv
V2ViQXNzZW1ibHkuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6d2ViQXNzZW1i
bHlUYWdUeXBlU3RydWN0dXJlIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICog
d2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6Q29udHJvbERhdGE6OmlzVHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0FueUNhdGNoKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzQmxvY2spOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
YWRkUmV0dXJuKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzVHJ5KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzQ2F0Y2gpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNBbnlDYXRjaCk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0xvb3Ap
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNCbG9j
ayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpkdW1w
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkVHJ5KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2gpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChK
U0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkVGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjphZGRSZXRocm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hB
bGxUb1VucmVhY2hhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6
YWRkRGVsZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRE
ZWxlZ2F0ZVRvVW5yZWFjaGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJh
dG9yOjphZGRUaHJvdyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6OmFk
ZFJldGhyb3cpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRSZXR1
cm4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2gpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRTd2l0Y2gpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjplbmRCbG9jayk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjpjcmVhdGVDYWxsUGF0Y2hwb2ludCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6OmFkZENhbGwpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6QjNJUkdlbmVyYXRvcjo6dW5pZnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lS
R2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OmR1bXBFeHByZXNzaW9uU3RhY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJh
dG9yOjpkdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6b3JpZ2lu
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cGFyc2VBbmRDb21waWxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
UmVtUz4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMkRpdlU+KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJSZW1VPik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0ej4pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0
ej4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlBvcGNudD4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NFBvcGNudD4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJh
dG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0Pik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJl
c3Q+KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGNjRUcnVuYz4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkYzMlRydW5jPik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0Pik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0Pik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
VHJ1bmNVRjMyPik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0VHJ1bmNTRjY0Pik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0Pik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMy
Pik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVlLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRDYWxsZWU6OkxMSW50Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRDYWxsZWU6OmxpbmtFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50Q2FsbGVlOjpoYW5kbGVyRm9ySW5kZXgpOgorICAgICAgICAqIHdhc20vV2FzbUNhbGxl
ZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmhhbmRsZXJGb3JJbmRleCk6CisgICAg
ICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6CisgICAgICAgIChKU0M6Oldhc206OnR5cGVUb1N0cmlu
Zyk6CisgICAgICAgIChKU0M6Oldhc206OmlzVmFsaWRFeHRlcm5hbEtpbmQpOgorICAgICAgICAo
SlNDOjpXYXNtOjptYWtlU3RyaW5nKToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvbkNvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6bnVtYmVyT2ZF
eGNlcHRpb25IYW5kbGVycyBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29k
ZUJsb2NrOjpleGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25D
b2RlQmxvY2s6OmFkZEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0
aW9uUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OmlzVHJ5T3JDYXRjaCk6CisgICAgICAg
IChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4Y2VwdGlvbkluZGV4
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhw
cmVzc2lvbik6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbik6CisgICAgICAgICogd2FzbS9XYXNtSGFuZGxlcklu
Zm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmluaXRpYWxp
emUpOgorICAgICAgICAoSlNDOjpXYXNtOjpIYW5kbGVySW5mbzo6aGFuZGxlckZvckluZGV4KToK
KyAgICAgICAgKiB3YXNtL1dhc21IYW5kbGVySW5mby5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6VW5saW5rZWRIYW5kbGVySW5mbzo6VW5saW5rZWRIYW5kbGVySW5mbyk6CisgICAgICAg
IChKU0M6Oldhc206OkhhbmRsZXJJbmZvOjp0YWcgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpIYW5kbGVySW5mbzo6ZGVsZWdhdGVUYXJnZXQgY29uc3QpOgorICAgICAgICAqIHdhc20vV2Fz
bUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjphZGRUYWcpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6dGFnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dh
c21MTEludEdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpDb250cm9sVHlwZTo6dHJ5Xyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpDb250cm9sVHlwZTo6Y2F0Y2hfKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OkNvbnRyb2xUeXBlOjppc0xvb3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVy
YXRvcjo6Q29udHJvbFR5cGU6OmlzQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6Q29udHJvbFR5cGU6OmlzSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6Q29udHJvbFR5cGU6OmlzVHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRH
ZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc0FueUNhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TExJbnRHZW5lcmF0b3I6OnJlcGF0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
YWRkVHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJs
ZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFi
bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hh
YmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRocm93KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAg
ICogd2FzbS9XYXNtTGltaXRzLmg6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRp
b24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmV4Y2VwdGlvbklu
ZGV4U3BhY2VTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRp
b246OmlzSW1wb3J0ZWRFeGNlcHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpzaWduYXR1cmVJbmRleEZyb21F
eGNlcHRpb25JbmRleFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb246OmltcG9ydEV4Y2VwdGlvbkNvdW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlSW5mb3JtYXRpb246OmlzRGVjbGFyZWRFeGNlcHRpb24gY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6YWRkRGVjbGFyZWRFeGNlcHRpb24pOgor
ICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rp
b25QYXJzZXI6OnBhcnNlRXhwb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VFeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25zLmg6CisgICAg
ICAgIChKU0M6Oldhc206OnZhbGlkYXRlT3JkZXIpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQ
YXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpXQVNNX1NMT1dfUEFUSF9ERUNMKToKKyAg
ICAgICAgKiB3YXNtL1dhc21TbG93UGF0aHMuaDoKKyAgICAgICAgKiB3YXNtL1dhc21UYWcuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaC4K
KyAgICAgICAgKiB3YXNtL1dhc21UYWcuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50Q29tbW9uLmguCisgICAgICAgIChKU0M6Oldhc206OlRhZzo6VGFnKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6VGFnOjpwYXJhbWV0ZXJDb3VudCBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OlRhZzo6cGFyYW1ldGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
VGFnOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFnOjpvcGVyYXRv
ciE9IGNvbnN0KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwOgorICAgICAg
ICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuaC4KKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbik6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Z2V0QXJnIGNvbnN0KToKKyAgICAgICAgKiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlFeGNlcHRpb246OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uOjpzdWJzcGFjZUZvcik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlF
eGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlF
eGNlcHRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246
OnRhZyBjb25zdCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnBheWxv
YWQgY29uc3QpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp0cnlDcmVhdGUpOgorICAgICAg
ICAqIHdhc20vanMvSlNXZWJBc3NlbWJseVRhZy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MaW1pdHMuaC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eVRhZzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6SlNXZWJBc3NlbWJseVRh
Zyk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuaC4KKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6V2ViQXNz
ZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNz
ZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpXZWJBc3NlbWJseUV4
Y2VwdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0
aW9uQ29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxpbWl0cy5oLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90
b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90
b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlv
blByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvdHlwZTo6V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUpOgorICAgICAg
ICAoSlNDOjpnZXRFeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpnZXRUYWcpOgorICAgICAgICAo
SlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxpbWl0cy5oLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlu
a0ltcGwpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yOjpjcmVhdGVUYWcpOgorICAgICAgICAo
SlNDOjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0M6OldlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OldlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3Ip
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmguCisgICAgICAgICog
d2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNz
ZW1ibHlUYWdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OldlYkFz
c2VtYmx5VGFnUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFz
c2VtYmx5VGFnUHJvdG90eXBlOjpXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSk6CisgICAgICAgIChK
U0M6OmdldFRhZyk6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6Cisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmguCisgICAgICAgICogd2FzbS93
YXNtLmpzb246CisKIDIwMjEtMDktMTYgIE1pa2hhaWwgUi4gR2FkZWxoYSAgPG1pa2hhaWxAaWdh
bGlhLmNvbT4KIAogICAgICAgICBGaXggY3Jhc2ggaW4gMzIgYml0cyBkdWUgdG8gbm90IGVub3Vn
aCBzY3JhdGNoIHJlZ2lzdGVycyBhdmFpbGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggMjg4NWI1MTAxN2Nj
Li4wNmIyMTc1MTJjNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJp
dmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC0xOTcsNiArMTk3LDggQEAgJChQUk9KRUNU
X0RJUikvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKICQoUFJPSkVDVF9ESVIpL3dhc20v
anMvSlNXZWJBc3NlbWJseS5jcHAKICQoUFJPSkVDVF9ESVIpL3dhc20vanMvV2ViQXNzZW1ibHlD
b21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKICQoUFJPSkVDVF9ESVIpL3dhc20vanMvV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pz
L1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9q
cy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9q
cy9XZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZS5jcHAKICQoUFJPSkVDVF9ESVIpL3dhc20vanMv
V2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtMjExLDYgKzIxMyw4IEBAICQo
UFJPSkVDVF9ESVIpL3dhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5j
cHAKICQoUFJPSkVDVF9ESVIpL3dhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5
cGUuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rv
ci5jcHAKICQoUFJPSkVDVF9ESVIpL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5j
cHAKKyQoUFJPSkVDVF9ESVIpL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAK
KyQoUFJPSkVDVF9ESVIpL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwCiAkKFBS
T0pFQ1RfRElSKS93YXNtL3dhc20uanNvbgogJChQUk9KRUNUX0RJUikveWFyci9jcmVhdGVfcmVn
ZXhfdGFibGVzCiAkKFBST0pFQ1RfRElSKS95YXJyL2dlbmVyYXRlWWFyckNhbm9uaWNhbGl6ZVVu
aWNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdAppbmRleCAyYWQyMTMxYzU4NjYuLmNiMDVkODIxNjJhZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVs
aXN0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNm
aWxlbGlzdApAQCAtODIsNiArODIsOCBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvSmF2YVNjcmlwdENvcmUvV2FzbUxMSW50R2VuZXJhdG9ySW5saW5lcy5oCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2FzbU9wcy5oCiAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJv
dG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNj
cmlwdENvcmUvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaAorJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5sdXQuaAogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2Vt
Ymx5R2xvYmFsUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmx1dC5o
CkBAIC05Niw2ICs5OCw4IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9K
YXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0CiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3JQcm90b3R5cGUubHV0LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0LmgKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJs
eVRhYmxlUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5sdXQuaAorJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5
VGFnUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCmluZGV4IGVjYmNlNjdmNzhjMC4uNzg5NzU2ZjEwZjhiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjAzLDYgKzIwMyw4IEBAIE9CSkVDVF9M
VVRfSEVBREVSUyA9IFwKICAgICBUZW1wb3JhbFRpbWVab25lUHJvdG90eXBlLmx1dC5oIFwKICAg
ICBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5sdXQuaCBcCisgICAgV2ViQXNzZW1ibHlFeGNlcHRp
b25Db25zdHJ1Y3Rvci5sdXQuaCBcCisgICAgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUu
bHV0LmggXAogICAgIFdlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0b3IubHV0LmggXAogICAgIFdl
YkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmx1dC5oIFwKICAgICBXZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IubHV0LmggXApAQCAtMjE3LDYgKzIxOSw4IEBAIE9CSkVDVF9MVVRfSEVBREVS
UyA9IFwKICAgICBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5sdXQuaCBcCiAgICAg
V2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBXZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmx1dC5oIFwK
KyAgICBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5sdXQuaCBcCiAjCiAKICQoT0JKRUNUX0xVVF9I
RUFERVJTKTogJS5sdXQuaCA6ICUuY3BwICQoSmF2YVNjcmlwdENvcmUpL2NyZWF0ZV9oYXNoX3Rh
YmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGVlODZiYThkYzBiYi4uYjliZmMx
N2ZmN2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzk2LDYgKzc5Niw3IEBA
CiAJCTE0NzgyOTdCMTM3OUU4QTgwMEE3QzJBMyAvKiBIYW5kbGVUeXBlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2RkE1QTgxMzc4RjZCMDAwMzYy
N0EzIC8qIEhhbmRsZVR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0
aW9uT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDdCODNBQTBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDdCODQ2MjBFNkRFNkIxMDA0Nzc1
QTQgLyogUHV0UHJvcGVydHlTbG90LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMTQ4NTIxRDgyNkVBRUJGRTAwQ0MxRDFBIC8qIFdhc21IYW5kbGVy
SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4
NTIxRDcyNkVBRUJGRTAwQ0MxRDFBIC8qIFdhc21IYW5kbGVySW5mby5oICovOyB9OwogCQkxNDg2
QThDMDI0QUJFRDQ4MDA3MzkyMkQgLyogSlNMb2NrUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NkE4QkYyNEFCRUQzQzAwNzM5MjJE
IC8qIEpTTG9ja1JlZlByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NzRBRTIxNUVC
REU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDhBN0JGMDFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2Fs
bEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDhBN0JFRTFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2FsbEZyYW1lLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNyw2ICs4MjgsMTMgQEAK
IAkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0E5NThBMTZB
QjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDQTk1OEQxNkFCNTBGQTAwOTM4
QTA2IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxNEQwMUE3NzIxRkIzNTFGMDBCQzU0RTkgLyogSlNTY3JpcHRTb3VyY2VQ
cm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTREMDFBNzYyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCAqLzsg
fTsKKwkJMTREMDFCRTYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAx
QkRBMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi87IH07
CisJCTE0RDAxQkU3MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCREIy
NkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggKi87IH07CisJCTE0
RDAxQkU5MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCREQy
NkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggKi87IH07
CisJCTE0RDAxQkVDMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJFMDI2REVFRjM3
MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5oICovOyB9OworCQkxNEQwMUJFRDI2REVFRjM4
MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCRTEyNkRFRUYzODAwQ0FFMEQwIC8qIEpT
V2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLzsgfTsKKwkJMTREMDFCRUYyNkRFRUYzODAwQ0FFMEQw
IC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkUzMjZERUVGMzgwMENBRTBEMCAvKiBX
ZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi87IH07CisJCTE0RDAxQkY1MjZERUVG
NTMwMENBRTBEMCAvKiBXYXNtVGFnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICovOyB9
OwogCQkxNEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDJGM0Q5MTM5RjRCRTIwMDQ5
MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0
eUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNERGMDREOTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RTg0RjlG
MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlBMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxv
Y2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MzQ1OCw2ICszNDY2LDggQEAKIAkJMTQ4MkI3OEEwQTQzMDVBQjAwNTE3Q0ZDIC8qIEFQSUNhc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJQ2FzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDgyQjdFMTBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RS
ZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPYmplY3RSZWYuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4MkI3RTIwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpT
T2JqZWN0UmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT2Jq
ZWN0UmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQ4NTIxRDUyNkVBRUJE
RjAwQ0MxRDFBIC8qIFdhc21IYW5kbGVySW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNt
SGFuZGxlckluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDg1MjFENzI2
RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21IYW5kbGVySW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDg2QThCRTI0QUJFRDNCMDA3MzkyMkQgLyogSlNMb2NrUmVmLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTTG9ja1JlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
ODZBOEJGMjRBQkVEM0MwMDczOTIyRCAvKiBKU0xvY2tSZWZQcml2YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTTG9ja1JlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4
NzRBRTExNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0zNTQxLDYgKzM1NTEsMjAgQEAKIAkJMTRDQzNCQTIyMTM4QTIzODAwMkQ1OEI2IC8qIElu
c3RydWN0aW9uU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3Ry
dWN0aW9uU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RDAxQTc1MjFG
QjM1MDMwMEJDNTRFOSAvKiBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTREMDFBNzYyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJEQTI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1i
bHlUYWdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJB
c3NlbWJseVRhZ0NvbnN0cnVjdG9yLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVj
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRCMjZERUVGMzcwMENB
RTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oOyBwYXRoID0ganMvV2ViQXNzZW1i
bHlUYWdQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCREMy
NkRFRUYzNzAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHA7IHBh
dGggPSBqcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMTREMDFCREQyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9u
UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5
RXhjZXB0aW9uUHJvdG90eXBlLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJERTI2REVFRjM3MDBD
QUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcDsgcGF0aCA9
IGpzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNEQwMUJERjI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdQcm90b3R5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlU
YWdQcm90b3R5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJFMDI2REVFRjM3MDBDQUUwRDAgLyog
SlNXZWJBc3NlbWJseVRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dl
YkFzc2VtYmx5VGFnLmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5VGFnLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkUxMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNz
ZW1ibHlFeGNlcHRpb24uaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRTIyNkRFRUYzODAwQ0FFMEQwIC8qIFdl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcDsgcGF0aCA9IGpz
L1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMTREMDFCRTMyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9u
Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1i
bHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlFeGNlcHRpb25D
b25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJFNDI2REVF
RjM4MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5VGFnLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNz
ZW1ibHlUYWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJFNTI2REVF
RjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0
cnVjdG9yLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJGMjI2REVFRjUyMDBDQUUwRDAg
LyogV2FzbVRhZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNt
VGFnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRjMyNkRFRUY1MjAw
Q0FFMEQwIC8qIFdhc21UYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Fz
bVRhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQyRjNEOTEzOUY0QkUyMDA0
OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFya2VkU3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRENzkyNjQwREFB
MDNGQjAwMUE5RjA1IC8qIENMb29wU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ0xvb3BTdGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQ4NTc3
NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgbmFtZSA9IHRlc3RhcGkuanM7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5qczsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcxNDYsNiArNzE3MCw4IEBACiAJCQkJMTQ4
N0NFMTYyMzc3NDEwMDAwNDQ0MjlDIC8qIFdhc21HZW5lcmF0b3JUcmFpdHMuaCAqLywKIAkJCQlF
MzgzNTAwODIzOTBEOTM3MDAzNjMxNkQgLyogV2FzbUdsb2JhbC5jcHAgKi8sCiAJCQkJRTM4MzUw
MDkyMzkwRDkzNzAwMzYzMTZEIC8qIFdhc21HbG9iYWwuaCAqLywKKwkJCQkxNDg1MjFENTI2RUFF
QkRGMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmNwcCAqLywKKwkJCQkxNDg1MjFENzI2RUFF
QkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggKi8sCiAJCQkJQUQ4RkYzOTYxRUI1QkQ4
NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5jcHAgKi8sCiAJCQkJQUQ4RkYzOTUxRUI1QkQ4
NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5oICovLAogCQkJCUFENUMzNkRFMUY2OTlFQjYw
MDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuY3BwICovLApAQCAtNzIwMyw2ICs3MjI5LDggQEAKIAkJ
CQlFM0M3M0E5MDI1QkZBNzM0MDBFRkUzMDMgLyogV2FzbVN0cmVhbWluZ1BsYW4uaCAqLywKIAkJ
CQlBRDVDMzZFMzFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmNwcCAqLywKIAkJCQlBRDVD
MzZFNDFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmggKi8sCisJCQkJMTREMDFCRjIyNkRF
RUY1MjAwQ0FFMEQwIC8qIFdhc21UYWcuY3BwICovLAorCQkJCTE0RDAxQkYzMjZERUVGNTIwMENB
RTBEMCAvKiBXYXNtVGFnLmggKi8sCiAJCQkJNTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMyIC8qIFdh
c21UaHVua3MuY3BwICovLAogCQkJCTUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1
bmtzLmggKi8sCiAJCQkJRTNDNjk0QjIyMzAyNjg3NDAwNkZCRTQyIC8qIFdhc21UaWVyVXBDb3Vu
dC5jcHAgKi8sCkBAIC05MDg2LDYgKzkxMTQsOCBAQAogCQkJCUFEOUU4NTJFMUU4QTBDNkUwMDhE
RTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggKi8sCiAJCQkJQUQyRkNCQTYxREI1OERB
NDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwICovLAogCQkJCUFEMkZD
QkE3MURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggKi8sCisJ
CQkJMTREMDFCREMyNkRFRUYzNzAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3Bw
ICovLAorCQkJCTE0RDAxQkUxMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uLmggKi8sCiAJCQkJRTNCRjNDNEMyMzkwRDFFMzAwOEJDNzUyIC8qIEpTV2ViQXNzZW1ibHlH
bG9iYWwuY3BwICovLAogCQkJCUUzQkYzQzRCMjM5MEQxRTIwMDhCQzc1MiAvKiBKU1dlYkFzc2Vt
Ymx5R2xvYmFsLmggKi8sCiAJCQkJNzk2RkI0MzkxREZGOEMzRjAwMzlDOTVEIC8qIEpTV2ViQXNz
ZW1ibHlIZWxwZXJzLmggKi8sCkBAIC05MTAxLDEyICs5MTMxLDE4IEBACiAJCQkJQUQyRkNCQUQx
REI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCAqLywKIAkJCQlB
RDJGQ0JBRTFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmNwcCAqLywKIAkJ
CQlBRDJGQ0JBRjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmggKi8sCisJ
CQkJMTREMDFCRTQyNkRFRUYzODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlUYWcuY3BwICovLAor
CQkJCTE0RDAxQkUwMjZERUVGMzcwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggKi8sCiAJ
CQkJQUREMDlBRUYxRjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmNwcCAqLywKIAkJCQlBREQw
OUFFRTFGNUY2MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMuaCAqLywKIAkJCQlBRDJGQ0JCMDFEQjU4
REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8s
CiAJCQkJQUQyRkNCQjExREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9y
Q29uc3RydWN0b3IuaCAqLywKIAkJCQlBRDJGQ0JCMjFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuY3BwICovLAogCQkJCUFEMkZDQkIzMURCNThEQTQw
MEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oICovLAorCQkJCTE0
RDAxQkU1MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9y
LmNwcCAqLywKKwkJCQkxNEQwMUJFMzI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNl
cHRpb25Db25zdHJ1Y3Rvci5oICovLAorCQkJCTE0RDAxQkUyMjZERUVGMzgwMENBRTBEMCAvKiBX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAgKi8sCisJCQkJMTREMDFCREQyNkRFRUYz
NzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggKi8sCiAJCQkJQUQ0
OTM3QzkxREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uY3BwICovLAogCQkJ
CUFENDkzN0NBMURERDI3MzQwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggKi8sCiAJ
CQkJNTIxMzIyNDMxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNw
cCAqLywKQEAgLTkxNDEsNiArOTE3NywxMCBAQAogCQkJCUFEMkZDQkMxMURCNThEQTQwMEIzRTcz
NiAvKiBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuaCAqLywKIAkJCQlBRDJGQ0JDMjFEQjU4
REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQUQy
RkNCQzMxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCAqLywK
KwkJCQkxNEQwMUJERTI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
ci5jcHAgKi8sCisJCQkJMTREMDFCREEyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFn
Q29uc3RydWN0b3IuaCAqLywKKwkJCQkxNEQwMUJERjI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNz
ZW1ibHlUYWdQcm90b3R5cGUuY3BwICovLAorCQkJCTE0RDAxQkRCMjZERUVGMzcwMENBRTBEMCAv
KiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oICovLAogCQkJCTUyRjZDMzVCMUU3MUVCMDgwMDgx
RjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8sCiAJCQkJNTJGNkMzNUMx
RTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi8sCiAJCQkp
OwpAQCAtMTAzOTIsNiArMTA0MzIsNyBAQAogCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAv
KiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4
REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQy
RkNCRTMxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTE0RDAxQkVEMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5
RXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0JGM0M0RDIzOTBEMUU4MDA4QkM3NTIg
LyogSlNXZWJBc3NlbWJseUdsb2JhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk2RkI0M0ExREZG
OEMzRjAwMzlDOTVEIC8qIEpTV2ViQXNzZW1ibHlIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDJGQ0JFNTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUluc3RhbmNlLmggaW4g
SGVhZGVycyAqLywKQEAgLTEwNDAwLDYgKzEwNDQxLDcgQEAKIAkJCQlBRDJGQ0MwNTFEQjU4REFE
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1vZHVsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQy
RkNCRTkxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5
VGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RDAxQkVDMjZERUVGMzgwMENBRTBEMCAvKiBK
U1dlYkFzc2VtYmx5VGFnLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2
NkE0OUIgLyogSlNXaXRoU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE5MTY3QkFC
RUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJF
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1dyYXBwZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAt
MTA4MjMsNiArMTA4NjUsNyBAQAogCQkJCTE0NTBGQTFDMjM1N0JEQkUwMDkzQ0Q0RCAvKiBXYXNt
RnVuY3Rpb25Db2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRjQwRThCMUQ1OTAxQkIw
MDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzODM1
MDBBMjM5MEQ5M0IwMDM2MzE2RCAvKiBXYXNtR2xvYmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkx
NDg1MjFEODI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBRDhGRjM5ODFFQjVCREIyMDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBRDVDMzZFMjFGNjk5RUMwMDAwQkNBQUYgLyogV2FzbUluc3RhbmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDAwNjU5RTFFQ0FDODEyMDAwQ0E5MjYgLyogV2FzbUxp
bWl0cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDg1Myw2ICsxMDg5Niw3IEBACiAJCQkJRTNBMDUz
MUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJlYW1pbmdQYXJzZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzQzczQTkxMjVCRkE3M0IwMEVGRTMwMyAvKiBXYXNtU3RyZWFtaW5nUGxhbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RTYxRjY5RUM5MTAwMEJDQUFGIC8qIFdhc21UYWJsZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRjUyNkRFRUY1MzAwQ0FFMEQwIC8qIFdhc21UYWcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUyNTBEMkQyMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1
bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0U5RTBBRjFFQUVDNDU3MDBGRUUyNTEgLyogV2Fz
bVRpZXJVcENvdW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFQzFGNzVBRDdDMDAwQkNB
QUYgLyogV2FzbVRvSlMuaCBpbiBIZWFkZXJzICovLApAQCAtMTA4ODQsNiArMTA5MjgsOCBAQAog
CQkJCUFEMkZDQzE2MURCNTlDQjIwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNv
bnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRUYxREI1OERBRDAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBRDJGQ0MxNzFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQ
cm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJFRjI2REVFRjM4MDBDQUUw
RDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMTREMDFCRTkyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDQ5MzdENDFEREQyN0RFMDA3N0M4MDcgLyogV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTIxMzIyNDYxRUNCQ0U4MjAw
RjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
M0JGM0M1MzIzOTBEMjA1MDA4QkM3NTIgLyogV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xMDkxMSw2ICsxMDk1Nyw4IEBACiAJCQkJQUQyRkNDMjAxREI1
OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFEMkZDQkZGMURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0MyMTFEQjU5Q0IyMDBCM0U3MzYg
LyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0
RDAxQkU2MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQkxNEQwMUJFNzI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlU
YWdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRD
QyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0N0EwRTE2RjVDRDAwQjM0NDYwIC8qIFdlYktpdEF2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTlEQTAwQTYxQkQ1OTkzMTAwRjQ1NzVDIC8qIHdrYnVpbHRpbnMucHkgaW4gSGVh
ZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA4NDZlOWVlNzVmZWQuLjE1
MmVjMmJkZTBlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMTA3OCw2ICsxMDc4
LDcgQEAgd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAogd2FzbS9XYXNtRm9ybWF0LmNw
cAogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suY3BwCiB3YXNtL1dhc21HbG9iYWwuY3BwCit3
YXNtL1dhc21IYW5kbGVySW5mby5jcHAKIHdhc20vV2FzbUluZGV4T3JOYW1lLmNwcAogd2FzbS9X
YXNtSW5zdGFuY2UuY3BwCiB3YXNtL1dhc21JbnN0YW5jZS5oCkBAIC0xMTA0LDYgKzExMDUsNyBA
QCB3YXNtL1dhc21TdHJlYW1pbmdDb21waWxlci5jcHAKIHdhc20vV2FzbVN0cmVhbWluZ1BhcnNl
ci5jcHAKIHdhc20vV2FzbVN0cmVhbWluZ1BsYW4uY3BwCiB3YXNtL1dhc21UYWJsZS5jcHAKK3dh
c20vV2FzbVRhZy5jcHAKIHdhc20vV2FzbVRodW5rcy5jcHAKIHdhc20vV2FzbVRpZXJVcENvdW50
LmNwcAogd2FzbS9XYXNtVmFsdWVMb2NhdGlvbi5jcHAKQEAgLTExMTUsNiArMTExNyw3IEBAIHdh
c20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKIHdh
c20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNv
bXBpbGVFcnJvci5jcHAKK3dhc20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHAKIHdhc20v
anMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNl
LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcApAQCAtMTEyMiwxMCArMTEy
NSwxMyBAQCB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNb2R1bGUuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwCiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKK3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5j
cHAKIHdhc20vanMvV2FzbVRvSlMuY3BwCiB3YXNtL2pzL1dhc21Ub0pTLmgKIHdhc20vanMvV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlD
b21waWxlRXJyb3JQcm90b3R5cGUuY3BwCit3YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29u
c3RydWN0b3IuY3BwCit3YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcAog
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uQmFzZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAKQEAg
LTExNDMsNiArMTE0OSw4IEBAIHdhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1
Y3Rvci5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUuY3BwCiB3
YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKIHdhc20vanMvV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZS5jcHAKK3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5j
cHAKK3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwCiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmNwcAogCiB5YXJyL1JlZ3VsYXJFeHByZXNzaW9uLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggYmRm
MDExN2VjZjhkLi5hZTJiMjY0ZGFiNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtMTg0MSw0ICsxODQxLDI4IEBAIG9wIDphdG9taWNf
ZmVuY2UsCiAgICAgYXJnczogewogICAgIH0KIAorb3AgOnRocm93LAorICAgIGFyZ3M6IHsKKyAg
ICAgICAgZXhjZXB0aW9uSW5kZXg6IHVuc2lnbmVkLAorICAgICAgICBmaXJzdFZhbHVlOiBWaXJ0
dWFsUmVnaXN0ZXIsCisgICAgfQorCitvcCA6cmV0aHJvdywKKyAgICBhcmdzOiB7CisgICAgICAg
IGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0KKworb3AgOmNhdGNoLAorICAgIGFy
Z3M6IHsKKyAgICAgICAgZXhjZXB0aW9uSW5kZXg6IHVuc2lnbmVkLAorICAgICAgICBleGNlcHRp
b246IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgYXJndW1lbnRDb3VudDogdW5zaWduZWQsCisg
ICAgICAgIHN0YXJ0T2Zmc2V0OiB1bnNpZ25lZCwKKyAgICB9CisKK29wIDpjYXRjaF9hbGwsCisg
ICAgYXJnczogeworICAgICAgICBleGNlcHRpb246IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9CisK
IGVuZF9zZWN0aW9uIDpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSGFuZGxlckluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5k
bGVySW5mby5oCmluZGV4IDAxZGRjZjk2OTliNC4uNjZkZjA5OTlmMjFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaApAQCAtMzAsNyArMzAsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotZW51bSBjbGFzcyBIYW5kbGVyVHlwZSB7CitlbnVtIGNsYXNz
IEhhbmRsZXJUeXBlIDogdWludDhfdCB7CiAgICAgQ2F0Y2ggPSAwLAogICAgIEZpbmFsbHkgPSAx
LAogICAgIFN5bnRoZXNpemVkQ2F0Y2ggPSAyLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb24uaAppbmRleCA2ODBlOTQwMWRjNjEuLjUxZjFkMDJlMTgyNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKQEAgLTg5LDcg
Kzg5LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cyA9IEpTT3Bjb2Rl
VHJhaXRzPgogICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIFRyYWl0czo6b3Bjb2RlTmFtZXNbb3Bjb2RlSUQoKV07CisgICAgICAgIHJldHVybiBUcmFp
dHM6Om9wY29kZU5hbWVzW29wY29kZUlEPFRyYWl0cz4oKV07CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVHJhaXRzID0gSlNPcGNvZGVUcmFpdHM+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCmluZGV4IGI0MTMzNWJjMzllMi4uYjcy
NDU3ZDFiOWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmNwcApAQCAtMTMwLDcgKzEzMCw4IEBAIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNp
dGVCaXRzQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0CiAKIEJ5dGVjb2RlSW5kZXggQ2FsbEZyYW1l
OjpieXRlY29kZUluZGV4KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgp
KTsKKyAgICBpZiAoY2FsbGVlKCkuaXNXYXNtKCkpCisgICAgICAgIHJldHVybiBjYWxsU2l0ZUlu
ZGV4KCkuYnl0ZWNvZGVJbmRleCgpOwogICAgIGlmICghY29kZUJsb2NrKCkpCiAgICAgICAgIHJl
dHVybiBCeXRlY29kZUluZGV4KDApOwogI2lmIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IDFjYWIyMjViY2UwMy4u
ZDg2NGEyNjhjZDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5oCkBAIC00NCw2ICs0NCwxMSBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgY2xhc3Mg
Q2FsbFNpdGVJbmRleCB7CiAgICAgcHVibGljOgogICAgICAgICBDYWxsU2l0ZUluZGV4KCkgPSBk
ZWZhdWx0OworCisgICAgICAgIENhbGxTaXRlSW5kZXgoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlKQorICAgICAgICAgICAgOiBtX2JpdHMoZGVsZXRlZFZhbHVlKCkuYml0cygpKQorICAg
ICAgICB7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogICAgICAgICAgICAgOiBtX2JpdHMoYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkKQEAgLTU3LDEzICs2MiwyNSBAQCBuYW1lc3BhY2UgSlNDICB7
CiAgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fYml0
czsgfQogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9PSBvdGhlci5tX2JpdHM7IH0KIAorICAgICAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gaW50SGFzaChtX2JpdHMpOyB9CisgICAgICAgIHN0
YXRpYyBDYWxsU2l0ZUluZGV4IGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIGZyb21CaXRzKHNfaW52
YWxpZEluZGV4IC0gMSk7IH0KKyAgICAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuICp0aGlzID09IGRlbGV0ZWRWYWx1ZSgpOyB9CisKICAgICAgICAgdWlu
dDMyX3QgYml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYml0czsgfQogICAgICAgICBzdGF0aWMgQ2Fs
bFNpdGVJbmRleCBmcm9tQml0cyh1aW50MzJfdCBiaXRzKSB7IHJldHVybiBDYWxsU2l0ZUluZGV4
KGJpdHMpOyB9CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3Qg
eyByZXR1cm4gQnl0ZWNvZGVJbmRleChiaXRzKCkpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAg
ICB1aW50MzJfdCBtX2JpdHMgeyBCeXRlY29kZUluZGV4KCkub2Zmc2V0KCkgfTsKKyAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBzX2ludmFsaWRJbmRleCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKTsKKworICAgICAgICB1aW50MzJfdCBtX2JpdHMgeyBzX2lu
dmFsaWRJbmRleCB9OworICAgIH07CisKKyAgICBzdHJ1Y3QgQ2FsbFNpdGVJbmRleEhhc2ggewor
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDYWxsU2l0ZUluZGV4JiBrZXkpIHsg
cmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2Fs
bFNpdGVJbmRleCYgYSwgY29uc3QgQ2FsbFNpdGVJbmRleCYgYikgeyByZXR1cm4gYSA9PSBiOyB9
CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCA9IHRydWU7CiAgICAgfTsKIAogICAgIGNsYXNzIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4
IDogcHVibGljIENhbGxTaXRlSW5kZXggewpAQCAtMzMyLDMgKzM0OSwxNSBAQCBKU19FWFBPUlRf
UFJJVkFURSBib29sIGlzRnJvbUpTQ29kZSh2b2lkKiByZXR1cm5BZGRyZXNzKTsKIAogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6
Q2FsbFNpdGVJbmRleD4gOiBKU0M6OkNhbGxTaXRlSW5kZXhIYXNoIHsgfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPEpTQzo6Q2FsbFNpdGVJbmRleD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpDYWxs
U2l0ZUluZGV4PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggOGQ0NzJmYjUxNGU1Li4z
YTAzMTFkMmUzMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIkpTTW9kdWxlRW52
aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUgIkpTU3Ry
aW5nLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkxM
SW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTGl0ZXJhbFBhcnNlci5oIgogI2luY2x1ZGUgIk1vZHVs
ZVByb2dyYW1Db2RlQmxvY2suaCIKQEAgLTUxMSwxNSArNTEyLDU3IEBAIEFMV0FZU19JTkxJTkUg
c3RhdGljIHZvaWQgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhWTSYgdm0sIENhbGxGcmFtZSog
Y2FsbEZyYW1lCiAgICAgfQogfQogCitDYXRjaEluZm86OkNhdGNoSW5mbyhjb25zdCBIYW5kbGVy
SW5mbyogaGFuZGxlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgbV92YWxpZCA9ICEh
aGFuZGxlcjsKKyAgICBpZiAobV92YWxpZCkgeworICAgICAgICBtX3R5cGUgPSBoYW5kbGVyLT50
eXBlKCk7CisgICAgICAgIG1fbmF0aXZlQ29kZSA9IGhhbmRsZXItPm5hdGl2ZUNvZGU7CisKKyAg
ICAgICAgLy8gaGFuZGxlci0+dGFyZ2V0IGlzIG1lYW5pbmdsZXNzIGZvciBnZXR0aW5nIGEgY29k
ZSBvZmZzZXQgd2hlbiBjYXRjaGluZworICAgICAgICAvLyB0aGUgZXhjZXB0aW9uIGluIGEgREZH
L0ZUTCBmcmFtZS4gVGhpcyBieXRlY29kZSB0YXJnZXQgb2Zmc2V0IGNvdWxkIGJlCisgICAgICAg
IC8vIHNvbWV0aGluZyB0aGF0J3MgaW4gYW4gaW5saW5lZCBmcmFtZSwgd2hpY2ggbWVhbnMgYW4g
YXJyYXkgYWNjZXNzCisgICAgICAgIC8vIHdpdGggdGhpcyBieXRlY29kZSBvZmZzZXQgaW4gdGhl
IG1hY2hpbmUgZnJhbWUgaXMgdXR0ZXJseSBtZWFuaW5nbGVzcworICAgICAgICAvLyBhbmQgY2Fu
IGNhdXNlIGFuIG92ZXJmbG93LiBPU1IgZXhpdCBwcm9wZXJseSBleGl0cyB0byBoYW5kbGVyLT50
YXJnZXQKKyAgICAgICAgLy8gaW4gdGhlIHByb3BlciBmcmFtZS4KKyAgICAgICAgaWYgKCFKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgICAgICAgICAg
bV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGhh
bmRsZXItPnRhcmdldCkucHRyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY2F0Y2hQ
Q0ZvckludGVycHJldGVyID0gbnVsbHB0cjsKKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCitDYXRjaEluZm86OkNhdGNoSW5mbyhjb25zdCBXYXNtOjpIYW5kbGVySW5mbyogaGFu
ZGxlciwgY29uc3QgV2FzbTo6Q2FsbGVlKiBjYWxsZWUpCit7CisgICAgbV92YWxpZCA9ICEhaGFu
ZGxlcjsKKyAgICBpZiAobV92YWxpZCkgeworICAgICAgICBtX3R5cGUgPSBIYW5kbGVyVHlwZTo6
Q2F0Y2g7CisgICAgICAgIG1fbmF0aXZlQ29kZSA9IGhhbmRsZXItPm1fbmF0aXZlQ29kZTsKKyAg
ICAgICAgaWYgKGNvbnN0IFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxs
ZWUtPmZ1bmN0aW9uQ29kZUJsb2NrKCkpCisgICAgICAgICAgICBtX2NhdGNoUENGb3JJbnRlcnBy
ZXRlciA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaGFuZGxlci0+bV90YXJnZXQpLnB0
cigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NhdGNoUENGb3JJbnRlcnByZXRlciA9
IG51bGxwdHI7CisgICAgfQorfQorI2VuZGlmCisKIGNsYXNzIFVud2luZEZ1bmN0b3IgewogcHVi
bGljOgotICAgIFVud2luZEZ1bmN0b3IoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIGJv
b2wgaXNUZXJtaW5hdGlvbiwgQ29kZUJsb2NrKiYgY29kZUJsb2NrLCBIYW5kbGVySW5mbyomIGhh
bmRsZXIpCisgICAgVW53aW5kRnVuY3RvcihWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwg
Ym9vbCBpc1Rlcm1pbmF0aW9uLCBKU1ZhbHVlIHRocm93blZhbHVlLCBDb2RlQmxvY2sqJiBjb2Rl
QmxvY2ssIENhdGNoSW5mbyYgaGFuZGxlcikKICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAs
IG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKICAgICAgICAgLCBtX2lzVGVybWluYXRpb24oaXNUZXJt
aW5hdGlvbikKICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9o
YW5kbGVyKGhhbmRsZXIpCiAgICAgeworICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewor
ICAgICAgICAgICAgaWYgKEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIHdhc21FeGNlcHRpb24gPSBq
c0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPihtX3ZtLCB0aHJvd25WYWx1ZSkp
IHsKKyAgICAgICAgICAgICAgICBtX2NhdGNoYWJsZUZyb21XYXNtID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBtX3dhc21UYWcgPSAmd2FzbUV4Y2VwdGlvbi0+dGFnKCk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKEVycm9ySW5zdGFuY2UqIGVycm9yID0ganNEeW5hbWljQ2FzdDxFcnJvckluc3Rh
bmNlKj4obV92bSwgdGhyb3duVmFsdWUpKQorICAgICAgICAgICAgICAgIG1fY2F0Y2hhYmxlRnJv
bVdhc20gPSBlcnJvci0+aXNDYXRjaGFibGVGcm9tV2FzbSgpOworICAgICAgICB9CiAgICAgfQog
CiAgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0CkBAIC01MjgsMTkgKzU3MSwyOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbEZy
YW1lID0gdmlzaXRvci0+Y2FsbEZyYW1lKCk7CiAgICAgICAgIG1fY29kZUJsb2NrID0gdmlzaXRv
ci0+Y29kZUJsb2NrKCk7CiAKLSAgICAgICAgbV9oYW5kbGVyID0gbnVsbHB0cjsKKyAgICAgICAg
bV9oYW5kbGVyLm1fdmFsaWQgPSBmYWxzZTsKICAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CiAg
ICAgICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewotICAgICAgICAgICAgICAgIG1faGFu
ZGxlciA9IGZpbmRFeGNlcHRpb25IYW5kbGVyKHZpc2l0b3IsIG1fY29kZUJsb2NrLCBSZXF1aXJl
ZEhhbmRsZXI6OkFueUhhbmRsZXIpOwotICAgICAgICAgICAgICAgIGlmIChtX2hhbmRsZXIpCisg
ICAgICAgICAgICAgICAgbV9oYW5kbGVyID0geyBmaW5kRXhjZXB0aW9uSGFuZGxlcih2aXNpdG9y
LCBtX2NvZGVCbG9jaywgUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKSwgbV9jb2RlQmxvY2sg
fTsKKyAgICAgICAgICAgICAgICBpZiAobV9oYW5kbGVyLm1fdmFsaWQpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxl
ZSgpLmlzQ2VsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byoganNUb1dhc21JQ0NhbGxlZSA9
IGpzRHluYW1pY0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KG1fdm0sIHZpc2l0b3ItPmNhbGxlZSgp
LmFzQ2VsbCgpKSkKKyAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUo
KTsKKyAgICAgICAgaWYgKGNhbGxlZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8q
IGpzVG9XYXNtSUNDYWxsZWUgPSBqc0R5bmFtaWNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihtX3Zt
LCBjYWxsZWUuYXNDZWxsKCkpKQogICAgICAgICAgICAgICAgIG1fdm0ud2FzbUNvbnRleHQuc3Rv
cmUoanNUb1dhc21JQ0NhbGxlZS0+ZnVuY3Rpb24oKS0+cHJldmlvdXNJbnN0YW5jZShtX2NhbGxG
cmFtZSksIG1fdm0uc29mdFN0YWNrTGltaXQoKSk7CisKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtX2NhdGNoYWJsZUZyb21XYXNtICYmIGNhbGxlZS5pc1dhc20oKSkgeworICAgICAgICAgICAg
dW5zaWduZWQgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gbV9jYWxsRnJhbWUtPmNhbGxTaXRlSW5k
ZXgoKS5iaXRzKCk7CisgICAgICAgICAgICBtX2hhbmRsZXIgPSB7IGNhbGxlZS5hc1dhc21DYWxs
ZWUoKS0+aGFuZGxlckZvckluZGV4KG1fdm0sIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgbV93YXNt
VGFnKSwgY2FsbGVlLmFzV2FzbUNhbGxlZSgpIH07CisgICAgICAgICAgICBpZiAobV9oYW5kbGVy
Lm1fdmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKICAg
ICAgICAgfQogI2VuZGlmCiAKQEAgLTU4NywxMCArNjM5LDEyIEBAIHByaXZhdGU6CiAgICAgQ2Fs
bEZyYW1lKiYgbV9jYWxsRnJhbWU7CiAgICAgYm9vbCBtX2lzVGVybWluYXRpb247CiAgICAgQ29k
ZUJsb2NrKiYgbV9jb2RlQmxvY2s7Ci0gICAgSGFuZGxlckluZm8qJiBtX2hhbmRsZXI7CisgICAg
Q2F0Y2hJbmZvJiBtX2hhbmRsZXI7CisgICAgY29uc3QgV2FzbTo6VGFnKiBtX3dhc21UYWcgeyBu
dWxscHRyIH07CisgICAgYm9vbCBtX2NhdGNoYWJsZUZyb21XYXNtIHsgZmFsc2UgfTsKIH07CiAK
LU5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChWTSYgdm0sIENh
bGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCitORVZFUl9JTkxJTkUg
Q2F0Y2hJbmZvIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJh
bWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKIApAQCAtNjA4LDE2ICs2NjIsMTMgQEAgTkVWRVJfSU5MSU5FIEhhbmRs
ZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1l
LCBFeGMKICAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNFRChzY29wZSwgc2NvcGUuZXhjZXB0aW9u
KCkpOwogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5k
aW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KLSAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9
IG51bGxwdHI7Ci0gICAgVW53aW5kRnVuY3RvciBmdW5jdG9yKHZtLCBjYWxsRnJhbWUsIHZtLmlz
VGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSwgY29kZUJsb2NrLCBoYW5kbGVyKTsKKyAg
ICBDYXRjaEluZm8gY2F0Y2hJbmZvOworICAgIFVud2luZEZ1bmN0b3IgZnVuY3Rvcih2bSwgY2Fs
bEZyYW1lLCB2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbiksIGV4Y2VwdGlvblZh
bHVlLCBjb2RlQmxvY2ssIGNhdGNoSW5mbyk7CiAgICAgU3RhY2tWaXNpdG9yOjp2aXNpdDxTdGFj
a1Zpc2l0b3I6OlRlcm1pbmF0ZUlmVG9wRW50cnlGcmFtZUlzRW1wdHk+KGNhbGxGcmFtZSwgdm0s
IGZ1bmN0b3IpOwogICAgIGlmICh2bS5oYXNDaGVja3BvaW50T1NSU2lkZVN0YXRlKCkpCiAgICAg
ICAgIHZtLnBvcEFsbENoZWNrcG9pbnRPU1JTaWRlU3RhdGVVbnRpbChjYWxsRnJhbWUpOwogCi0g
ICAgaWYgKCFoYW5kbGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBo
YW5kbGVyOworICAgIHJldHVybiBjYXRjaEluZm87CiB9CiAKIHZvaWQgSW50ZXJwcmV0ZXI6Om5v
dGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApp
bmRleCAwYzNlZmUxMmU1MTAuLjU1OTQ2MDIwYTM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKQEAgLTQzLDYgKzQzLDEzIEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorbmFtZXNwYWNlIFdhc20g
eworY2xhc3MgQ2FsbGVlOworc3RydWN0IEhhbmRsZXJJbmZvOworfQorI2VuZGlmCisKICAgICBj
bGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3MgRXZhbEV4ZWN1dGFibGU7CiAgICAgY2xhc3MgRnVu
Y3Rpb25FeGVjdXRhYmxlOwpAQCAtNTgsNiArNjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBKU1Njb3BlOwogICAgIGNsYXNzIFNvdXJjZUNvZGU7CiAgICAgY2xhc3MgU3RhY2tGcmFt
ZTsKKyAgICBlbnVtIGNsYXNzIEhhbmRsZXJUeXBlIDogdWludDhfdDsKICAgICBzdHJ1Y3QgQ2Fs
bEZyYW1lQ2xvc3VyZTsKICAgICBzdHJ1Y3QgSGFuZGxlckluZm87CiAgICAgc3RydWN0IEluc3Ry
dWN0aW9uOwpAQCAtODEsNiArODksMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0YWNr
RnJhbWVOYXRpdmVDb2RlCiAgICAgfTsKIAorICAgIHN0cnVjdCBDYXRjaEluZm8geworICAgICAg
ICBDYXRjaEluZm8oKQorICAgICAgICAgICAgOiBtX3ZhbGlkKGZhbHNlKQorICAgICAgICB7IH0K
KworICAgICAgICBDYXRjaEluZm8oY29uc3QgSGFuZGxlckluZm8qLCBDb2RlQmxvY2sqKTsKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIENhdGNoSW5mbyhjb25zdCBXYXNtOjpIYW5k
bGVySW5mbyosIGNvbnN0IFdhc206OkNhbGxlZSopOworI2VuZGlmCisKKyAgICAgICAgYm9vbCBt
X3ZhbGlkOworICAgICAgICBIYW5kbGVyVHlwZSBtX3R5cGU7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBtX25hdGl2ZUNvZGU7CisgICAgICAg
IGNvbnN0IEluc3RydWN0aW9uKiBtX2NhdGNoUENGb3JJbnRlcnByZXRlcjsKKyAgICB9OworCiAg
ICAgY2xhc3MgSW50ZXJwcmV0ZXIgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENhY2hlZENhbGw7CkBAIC0xMTIsNyArMTM2LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBnZXRBcmd1bWVudHNEYXRhKENhbGxGcmFtZSos
IEpTRnVuY3Rpb24qJiwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3Rlciom
IGFyZ3YsIGludCYgYXJnYyk7CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiB1
bndpbmQoVk0mLCBDYWxsRnJhbWUqJiwgRXhjZXB0aW9uKik7CisgICAgICAgIE5FVkVSX0lOTElO
RSBDYXRjaEluZm8gdW53aW5kKFZNJiwgQ2FsbEZyYW1lKiYsIEV4Y2VwdGlvbiopOwogICAgICAg
ICB2b2lkIG5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqLCBFeGNlcHRpb24qKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIHZv
aWQgZGVidWcoQ2FsbEZyYW1lKiwgRGVidWdIb29rVHlwZSk7CiAgICAgICAgIHN0YXRpYyBTdHJp
bmcgc3RhY2tUcmFjZUFzU3RyaW5nKFZNJiwgY29uc3QgVmVjdG9yPFN0YWNrRnJhbWU+Jik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3Bw
CmluZGV4IDU3YTFiZGI2ZGJkNS4uZGM1ZWNjZTA1ZWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApAQCAtMTY2LDIzICsxNjYs
MjAgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmkKICAgICBtX2ZyYW1lLm1faW5saW5lQ2FsbEZy
YW1lID0gbnVsbHB0cjsKICNlbmRpZgogCisgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7CisgICAgbV9mcmFtZS5tX2J5dGVjb2RlSW5kZXggPSAhbV9mcmFt
ZS5jb2RlQmxvY2soKSA/IEJ5dGVjb2RlSW5kZXgoMCkKKyAgICAgICAgOiBjb2RlT3JpZ2luID8g
Y29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpCisgICAgICAgIDogY2FsbEZyYW1lLT5ieXRlY29k
ZUluZGV4KCk7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgaWYgKGNhbGxGcmFtZS0+
aXNBbnlXYXNtQ2FsbGVlKCkpIHsKICAgICAgICAgbV9mcmFtZS5tX2lzV2FzbUZyYW1lID0gdHJ1
ZTsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgICAgIG1fZnJh
bWUubV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwogCiAgICAgICAgIGlmIChtX2Zy
YW1lLm1fY2FsbGVlLmlzV2FzbSgpKQogICAgICAgICAgICAgbV9mcmFtZS5tX3dhc21GdW5jdGlv
bkluZGV4T3JOYW1lID0gbV9mcmFtZS5tX2NhbGxlZS5hc1dhc21DYWxsZWUoKS0+aW5kZXhPck5h
bWUoKTsKLQotICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAgbV9mcmFtZS5tX2Nv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgbV9mcmFtZS5tX2J5dGVjb2Rl
SW5kZXggPSAhbV9mcmFtZS5jb2RlQmxvY2soKSA/IEJ5dGVjb2RlSW5kZXgoMCkKLSAgICAgICAg
OiBjb2RlT3JpZ2luID8gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpCi0gICAgICAgIDogY2Fs
bEZyYW1lLT5ieXRlY29kZUluZGV4KCk7Ci0KIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4IGM4Zjlh
YTA0MDEyMi4uYTZiZDAyZGJlODZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuY3BwCkBAIC02NTIsOSArNjUyLDQ3IEBAIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVu
dHJ5RnJhCiAjZW5kaWYKIAogICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUsIHNjcmF0Y2gpOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1
ZmZlck9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3JhdGNoLCBza2lwTGlzdCk7CiAKLSAgICBM
b2FkUmVnU3Bvb2xlciBzcG9vbGVyKCp0aGlzLCBzY3JhdGNoKTsKKyAgICAvLyBSZXN0b3JlIHRo
ZSBjYWxsZWUgc2F2ZSB2YWx1ZSBvZiB0aGUgc2NyYXRjaC4KKyAgICBSZWdpc3RlckF0T2Zmc2V0
IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KHNjcmF0Y2hHUFJFbnRyeUluZGV4KTsKKyAgICBB
U1NFUlQoIWRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpOworICAgIEFTU0VS
VChlbnRyeS5yZWcoKS5pc0dQUigpKTsKKyAgICBBU1NFUlQoc2NyYXRjaCA9PSBlbnRyeS5yZWco
KS5ncHIoKSk7CisjaWYgQ1BVKEFSTTY0KQorICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkyID0g
YWxsQ2FsbGVlU2F2ZXMtPmF0KHNjcmF0Y2hHUFJFbnRyeUluZGV4ICsgMSk7CisgICAgQVNTRVJU
X1VOVVNFRChlbnRyeTIsICFkb250UmVzdG9yZVJlZ2lzdGVycy5nZXQoZW50cnkyLnJlZygpKSk7
CisgICAgQVNTRVJUKGVudHJ5Mi5yZWcoKS5pc0dQUigpKTsKKyAgICBBU1NFUlQodW51c2VkTmV4
dFNsb3RHUFIgPT0gZW50cnkyLnJlZygpLmdwcigpKTsKKyAgICBsb2FkUGFpcjY0KHNjcmF0Y2gs
IFRydXN0ZWRJbW0zMihlbnRyeS5vZmZzZXQoKSksIHNjcmF0Y2gsIHVudXNlZE5leHRTbG90R1BS
KTsKKyNlbHNlCisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gsIGVudHJ5Lm9mZnNldCgpKSwg
c2NyYXRjaCk7CisjZW5kaWYKKworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFt
ZSk7CisjZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCit9CisK
K3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoR1BSUmVnIHZtR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKK3sKKyNp
ZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKKyAgICBsb2FkUHRyKEFkZHJl
c3Modm1HUFIsIFZNOjp0b3BFbnRyeUZyYW1lT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBy
ZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHNj
cmF0Y2hHUFIsIFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHZtR1BSKTsKKyNlbmRpZiAvLyBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lT
VEVSUyA+IDAKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGVudHJ5RnJhbWVHUFIs
IGNvbnN0IFJlZ2lzdGVyU2V0JiBza2lwTGlzdCkKK3sKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NB
VkVTX1JFR0lTVEVSUyA+IDAKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNh
bGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIGVudHJ5RnJhbWVHUFIpOworCisgICAg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2Fs
bGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOworICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBh
bGxDYWxsZWVTYXZlcy0+c2l6ZSgpOworCisgICAgTG9hZFJlZ1Nwb29sZXIgc3Bvb2xlcigqdGhp
cywgZW50cnlGcmFtZUdQUik7CiAKICAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMgZXhj
ZXB0IGZvciB0aGUgc2NyYXRjaC4KICAgICB1bnNpZ25lZCBpID0gMDsKQEAgLTY3NiwyMyArNzE0
LDkgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmEKICAgICB9CiAgICAgc3Bvb2xlci5maW5hbGl6
ZUZQUigpOwogCi0gICAgLy8gUmVzdG9yZSB0aGUgY2FsbGVlIHNhdmUgdmFsdWUgb2YgdGhlIHNj
cmF0Y2guCi0gICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChz
Y3JhdGNoR1BSRW50cnlJbmRleCk7Ci0gICAgQVNTRVJUKCFkb250UmVzdG9yZVJlZ2lzdGVycy5n
ZXQoZW50cnkucmVnKCkpKTsKLSAgICBBU1NFUlQoZW50cnkucmVnKCkuaXNHUFIoKSk7Ci0gICAg
QVNTRVJUKHNjcmF0Y2ggPT0gZW50cnkucmVnKCkuZ3ByKCkpOwotI2lmIENQVShBUk02NCkKLSAg
ICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5MiA9IGFsbENhbGxlZVNhdmVzLT5hdChzY3JhdGNoR1BS
RW50cnlJbmRleCArIDEpOwotICAgIEFTU0VSVF9VTlVTRUQoZW50cnkyLCAhZG9udFJlc3RvcmVS
ZWdpc3RlcnMuZ2V0KGVudHJ5Mi5yZWcoKSkpOwotICAgIEFTU0VSVChlbnRyeTIucmVnKCkuaXNH
UFIoKSk7Ci0gICAgQVNTRVJUKHVudXNlZE5leHRTbG90R1BSID09IGVudHJ5Mi5yZWcoKS5ncHIo
KSk7Ci0gICAgbG9hZFBhaXI2NChzY3JhdGNoLCBUcnVzdGVkSW1tMzIoZW50cnkub2Zmc2V0KCkp
LCBzY3JhdGNoLCB1bnVzZWROZXh0U2xvdEdQUik7Ci0jZWxzZQotICAgIGxvYWRQdHIoQWRkcmVz
cyhzY3JhdGNoLCBlbnRyeS5vZmZzZXQoKSksIHNjcmF0Y2gpOwotI2VuZGlmCi0KICNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOworICAgIFVOVVNFRF9QQVJBTSh2bUdQUik7
CisgICAgVU5VU0VEX1BBUkFNKHNraXBMaXN0KTsKICNlbmRpZiAvLyBOVU1CRVJfT0ZfQ0FMTEVF
X1NBVkVTX1JFR0lTVEVSUyA+IDAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgKaW5kZXggZmFkNzE0NjI3YmRmLi43MGZhZTFiNzgyODEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtNDAxLDYgKzQwMSw4
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomKTsKKyAgICB2b2lkIHJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJSZWcgdm1HUFIs
IEdQUlJlZyBzY3JhdGNoR1BSKTsKKyAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGVudHJ5RnJhbWUsIGNvbnN0IFJl
Z2lzdGVyU2V0JiBza2lwTGlzdCk7CiAKICAgICB2b2lkIGNvcHlMTEludEJhc2VsaW5lQ2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50
cnlGcmFtZSomLCBjb25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKaW5kZXggNmQ1ODNhNDg5ZWQ1Li5iODZlOWE0
MTAzYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApA
QCAtNTQsMjEgKzU0LDE0IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogCiAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24o
KTsKICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb24pOwotICAgIEhhbmRsZXJJbmZvKiBoYW5k
bGVyID0gdm0uaW50ZXJwcmV0ZXItPnVud2luZCh2bSwgY2FsbEZyYW1lLCBleGNlcHRpb24pOyAv
LyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lLgorICAgIENhdGNoSW5mbyBoYW5kbGVyID0gdm0u
aW50ZXJwcmV0ZXItPnVud2luZCh2bSwgY2FsbEZyYW1lLCBleGNlcHRpb24pOyAvLyBUaGlzIG1h
eSB1cGRhdGUgY2FsbEZyYW1lLgogCiAgICAgdm9pZCogY2F0Y2hSb3V0aW5lOwogICAgIGNvbnN0
IEluc3RydWN0aW9uKiBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBudWxscHRyOwotICAgIGlmICho
YW5kbGVyKSB7Ci0gICAgICAgIC8vIGhhbmRsZXItPnRhcmdldCBpcyBtZWFuaW5nbGVzcyBmb3Ig
Z2V0dGluZyBhIGNvZGUgb2Zmc2V0IHdoZW4gY2F0Y2hpbmcKLSAgICAgICAgLy8gdGhlIGV4Y2Vw
dGlvbiBpbiBhIERGRy9GVEwgZnJhbWUuIFRoaXMgYnl0ZWNvZGUgdGFyZ2V0IG9mZnNldCBjb3Vs
ZCBiZQotICAgICAgICAvLyBzb21ldGhpbmcgdGhhdCdzIGluIGFuIGlubGluZWQgZnJhbWUsIHdo
aWNoIG1lYW5zIGFuIGFycmF5IGFjY2VzcwotICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNvZGUg
b2Zmc2V0IGluIHRoZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKLSAgICAg
ICAgLy8gYW5kIGNhbiBjYXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhpdHMg
dG8gaGFuZGxlci0+dGFyZ2V0Ci0gICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCi0gICAg
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
PmppdFR5cGUoKSkpCi0gICAgICAgICAgICBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5hdChoYW5kbGVyLT50YXJnZXQpLnB0cigp
OworICAgIGlmIChoYW5kbGVyLm1fdmFsaWQpIHsKKyAgICAgICAgY2F0Y2hQQ0ZvckludGVycHJl
dGVyID0gaGFuZGxlci5tX2NhdGNoUENGb3JJbnRlcnByZXRlcjsKICNpZiBFTkFCTEUoSklUKQot
ICAgICAgICBjYXRjaFJvdXRpbmUgPSBoYW5kbGVyLT5uYXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgICAgIGNhdGNoUm91dGluZSA9IGhhbmRsZXIubV9uYXRpdmVDb2RlLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CiAjZWxzZQogICAgICAgICBpZiAoY2F0Y2hQQ0ZvckludGVycHJldGVy
LT5pc1dpZGUzMigpKQogICAgICAgICAgICAgY2F0Y2hSb3V0aW5lID0gTExJbnQ6OmdldFdpZGUz
MkNvZGVQdHIoY2F0Y2hQQ0ZvckludGVycHJldGVyLT5vcGNvZGVJRCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRleCA3Y2ExYjRlN2MzZmQuLjk5MjI5
ZTQ5OTMxNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFj
ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaApA
QCAtNTcsNiArNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOwog
ICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmlydHVh
bFJlZ2lzdGVyIGVudHJ5KTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKKyAgICAgICAgdm9p
ZCBjb252ZXJ0Q2FsbGVlVG9WTShSZWdpc3RlcklEIGNhbGxlZSk7CiAKICAgICAgICAgVk0qIHZt
KCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQogCkBAIC0xNTgsNiArMTU5LDE5IEBAIG5hbWVzcGFj
ZSBKU0MgewogI2VuZGlmCiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJm
YWNlSklUOjpjb252ZXJ0Q2FsbGVlVG9WTShSZWdpc3RlcklEIGNhbGxlZSkKKyAgICB7CisgICAg
ICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBl
cnM6Ok5vblplcm8sIGNhbGxlZSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lzZUFs
bG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgYW5kUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgY2FsbGVlKTsKKyAgICAgICAg
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlLCBNYXJrZWRCbG9jazo6b2Zmc2V0
T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZzZXRPZlZNKCkpLCBjYWxsZWUpOwor
ICAgICAgICBhdXRvIGxvYWRlZENhc2UgPSBqdW1wKCk7CisKKyAgICAgICAgcHJlY2lzZUFsbG9j
YXRpb25DYXNlLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGNhbGxlZSwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1Nl
dDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIGNhbGxl
ZSk7CisKKyAgICAgICAgbG9hZGVkQ2FzZS5saW5rKHRoaXMpOworICAgIH0KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRDb21tb24uaAppbmRleCA5NTFkNzY5ZDY5MjQuLmFmZWVjYmFjMDdiMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50Q29tbW9uLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50Q29tbW9uLmgKQEAgLTI5LDcgKzI5LDcg
QEAKIC8vIC0gUHJpbnRzIGV2ZXJ5IGluc3RydWN0aW9uIGV4ZWN1dGVkIGlmIE9wdGlvbnM6OnRy
YWNlTExJbnRFeGVjdXRpb24oKSBpcyBlbmFibGVkLgogLy8gLSBQcmludHMgc29tZSBpbmZvcm1h
dGlvbiBmb3Igc29tZSBvZiB0aGUgbW9yZSBzdWJ0bGUgc2xvdyBwYXRocyBpZgogLy8gICBPcHRp
b25zOjp0cmFjZUxMSW50U2xvd1BhdGgoKSBpcyBlbmFibGVkLgotI2RlZmluZSBMTElOVF9UUkFD
SU5HIDAKKyNkZWZpbmUgTExJTlRfVFJBQ0lORyAxCiAKIC8vIERpc2FibGUgaW5saW5lIGFsbG9j
YXRpb24gaW4gdGhlIGludGVycHJldGVyLiBUaGlzIGlzIGdyZWF0IGlmIHlvdSdyZSBjaGFuZ2lu
ZwogLy8gaG93IHRoZSBHQyBhbGxvY2F0ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnREYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnREYXRhLmgKaW5kZXggNDcxZmI1ZDJmZDNiLi4zN2MxYWZlNmRlNzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgKQEAgLTMyMiw2ICszMjIsMjQgQEAgQUxXQVlTX0lO
TElORSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBnZXRXaWRlMzJDb2RlUHRyKFdhc21PcGNv
ZGVJRCBvcGNvZGVJRCkKICNlbmRpZgogfQogCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPiBnZXRDb2RlUmVmKFdhc21PcGNvZGVJ
RCBvcGNvZGVJRCkKK3sKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz46OmNy
ZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnZXRDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpKTsKK30KKwor
dGVtcGxhdGU8UHRyVGFnIHRhZz4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PHRhZz4gZ2V0V2lkZTE2Q29kZVJlZihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCit7CisgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
Z2V0V2lkZTE2Q29kZVB0cjx0YWc+KG9wY29kZUlEKSk7Cit9CisKK3RlbXBsYXRlPFB0clRhZyB0
YWc+CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+IGdldFdpZGUzMkNv
ZGVSZWYoV2FzbU9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8dGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdldFdpZGUzMkNvZGVQdHI8
dGFnPihvcGNvZGVJRCkpOworfQorCiB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogQUxXQVlTX0lOTElO
RSBMTEludENvZGUgZ2V0Q29kZUZ1bmN0aW9uUHRyKFdhc21PcGNvZGVJRCBvcGNvZGVJRCkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAKaW5k
ZXggYjkxM2VlZGFiMGM0Li4xZTkxZWFmOWY1MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwCkBAIC00OSw2ICs0OSwxOCBAQCBJbnN0cnVj
dGlvbiogcmV0dXJuVG9UaHJvdyhWTSYgdm0pCiAgICAgcmV0dXJuIExMSW50OjpleGNlcHRpb25J
bnN0cnVjdGlvbnMoKTsKIH0KIAorSW5zdHJ1Y3Rpb24qIHdhc21SZXR1cm5Ub1Rocm93KFZNJiB2
bSkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworI2lmIExMSU5UX1RSQUNJTkcKKyAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6dHJhY2VMTEludFNsb3dQYXRoKCkpKSB7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgZGF0YUxvZygiVGhyb3dp
bmcgZXhjZXB0aW9uICIsIEpTVmFsdWUoc2NvcGUuZXhjZXB0aW9uKCkpLCAiIChyZXR1cm5Ub1Ro
cm93KS5cbiIpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBMTEludDo6d2FzbUV4Y2VwdGlv
bkluc3RydWN0aW9ucygpOworfQorCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4gY2FsbFRvVGhyb3coVk0mIHZtKQogewogICAgIFVOVVNFRF9QQVJBTSh2bSk7
CkBAIC05Miw0ICsxMDQsMzIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+IGhhbmRsZUNhdGNoKE9wY29kZVNpemUgc2l6ZSkKICAgICByZXR1cm4ge307CiB9
CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5kbGVX
YXNtQ2F0Y2goT3Bjb2RlU2l6ZSBzaXplKQoreworICAgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNh
c2UgT3Bjb2RlU2l6ZTo6TmFycm93OgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4od2FzbV9jYXRjaCk7CisgICAgY2FzZSBPcGNvZGVTaXpl
OjpXaWRlMTY6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0V2lkZTE2Q29kZVJlZjxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPih3YXNtX2NhdGNoKTsKKyAgICBjYXNlIE9wY29kZVNpemU6OldpZGUz
MjoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRXaWRlMzJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+KHdhc21fY2F0Y2gpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiB7fTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+IGhhbmRsZVdhc21DYXRjaEFsbChPcGNvZGVTaXplIHNpemUpCit7
CisgICAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSBPcGNvZGVTaXplOjpOYXJyb3c6CisgICAg
ICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPih3YXNt
X2NhdGNoX2FsbCk7CisgICAgY2FzZSBPcGNvZGVTaXplOjpXaWRlMTY6CisgICAgICAgIHJldHVy
biBMTEludDo6Z2V0V2lkZTE2Q29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPih3YXNtX2Nh
dGNoX2FsbCk7CisgICAgY2FzZSBPcGNvZGVTaXplOjpXaWRlMzI6CisgICAgICAgIHJldHVybiBM
TEludDo6Z2V0V2lkZTMyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPih3YXNtX2NhdGNo
X2FsbCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIHt9OworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6TExJbnQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuaAppbmRleCA4MDZiMTlmNjYwNTguLmRh
MGU3MGQyZjVhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RXhjZXB0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2Vw
dGlvbnMuaApAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgTExJbnQgewogLy8gYmV0d2VlbiAx
IGFuZCA5IHNsb3RzIHdpbGwgZ2l2ZSB5b3UgYW4gImluc3RydWN0aW9uIiB0aGF0IHRocmVhZHMg
dG8gdGhlCiAvLyBpbnRlcnByZXRlcidzIGV4Y2VwdGlvbiBoYW5kbGVyLgogSW5zdHJ1Y3Rpb24q
IHJldHVyblRvVGhyb3coVk0mKTsKK0luc3RydWN0aW9uKiB3YXNtUmV0dXJuVG9UaHJvdyhWTSYp
OwogCiAvLyBVc2UgdGhpcyB3aGVuIHlvdSdyZSB0aHJvd2luZyB0byBhIGNhbGwgdGh1bmsuCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gY2FsbFRvVGhyb3co
Vk0mKTsKQEAgLTQ5LDQgKzUwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+IGNhbGxUb1Rocm93KFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhj
ZXB0aW9uSGFuZGxlclB0clRhZz4gaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24oVk0mKTsKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5kbGVDYXRjaChPcGNv
ZGVTaXplKTsKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
IGhhbmRsZVdhc21DYXRjaChPcGNvZGVTaXplKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPiBoYW5kbGVXYXNtQ2F0Y2hBbGwoT3Bjb2RlU2l6ZSk7CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9X
ZWJBc3NlbWJseS5hc20KaW5kZXggNDM2Y2Y2NjQ5MGQ3Li4zOWI1NWRmMzc3N2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5hc20KKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbQpAQCAtMjU2LDYgKzI1Niw4
IEBAIG1hY3JvIHRocm93RXhjZXB0aW9uKGV4Y2VwdGlvbikKIGVuZAogCiBtYWNybyBjYWxsV2Fz
bVNsb3dQYXRoKHNsb3dQYXRoKQorICAgICMgVE9ETzogaXMgdGhpcyBjb3JyZWN0PyBvciBkbyB3
ZSBuZWVkIHRvIHN0b3JlIGluIHRoZSBzbG93IHBhdGgKKyAgICBzdG9yZWkgUEMsIEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0KICAgICBwcmVwYXJlU3RhdGVGb3JD
Q2FsbCgpCiAgICAgbW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKQEAgLTI3NCw2ICsyNzYs
MTQgQEAgbWFjcm8gY2FsbFdhc21DYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKICAgICBh
Y3Rpb24ocjAsIHIxKQogZW5kCiAKK21hY3JvIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNhbGwo
KQorICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB3czEKKyAgICBsb2FkaSBXYXNtOjpGdW5jdGlv
bkNvZGVCbG9jazo6bV9udW1DYWxsZWVMb2NhbHNbd3MxXSwgd3MxCisgICAgbHNoaWZ0cCAzLCB3
czEKKyAgICBhZGRwIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLCB3czEKKyAgICBzdWJw
IGNmciwgd3MxLCBzcAorZW5kCisKIG1hY3JvIHdhc21Qcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIs
IGNvZGVCbG9ja1NldHRlciwgbG9hZFdhc21JbnN0YW5jZSkKICAgICAjIFNldCB1cCB0aGUgY2Fs
bCBmcmFtZSBhbmQgY2hlY2sgaWYgd2Ugc2hvdWxkIE9TUi4KICAgICBwcmVzZXJ2ZUNhbGxlclBD
QW5kQ0ZSKCkKQEAgLTMzMywxNSArMzQzLDE5IEBAIG1hY3JvIHRyYWNlRXhlY3V0aW9uKCkKICAg
ICBlbmQKIGVuZAogCi0jIExlc3MgY29udmVuaWVudCwgYnV0IHJlcXVpcmVkIGZvciBvcGNvZGVz
IHRoYXQgY29sbGlkZSB3aXRoIHJlc2VydmVkIGluc3RydWN0aW9ucyAoZS5nLiB3YXNtX25vcCkK
LW1hY3JvIHVucHJlZml4ZWRXYXNtT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBmbikKLSAg
ICBjb21tb25PcChvcGNvZGVOYW1lLCB0cmFjZUV4ZWN1dGlvbiwgbWFjcm8oc2l6ZSkKK21hY3Jv
IGNvbW1vbldhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHByb2xvZ3VlLCBmbikKKyAg
ICBjb21tb25PcChvcGNvZGVOYW1lLCBwcm9sb2d1ZSwgbWFjcm8oc2l6ZSkKICAgICAgICAgZm4o
bWFjcm8oZm4yKQogICAgICAgICAgICAgZm4yKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgc2l6
ZSkKICAgICAgICAgZW5kKQogICAgIGVuZCkKIGVuZAogCisjIExlc3MgY29udmVuaWVudCwgYnV0
IHJlcXVpcmVkIGZvciBvcGNvZGVzIHRoYXQgY29sbGlkZSB3aXRoIHJlc2VydmVkIGluc3RydWN0
aW9ucyAoZS5nLiB3YXNtX25vcCkKK21hY3JvIHVucHJlZml4ZWRXYXNtT3Aob3Bjb2RlTmFtZSwg
b3Bjb2RlU3RydWN0LCBmbikKKyAgICBjb21tb25XYXNtT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3Ry
dWN0LCB0cmFjZUV4ZWN1dGlvbiwgZm4pCitlbmQKKwogbWFjcm8gd2FzbU9wKG9wY29kZU5hbWUs
IG9wY29kZVN0cnVjdCwgZm4pCiAgICAgdW5wcmVmaXhlZFdhc21PcCh3YXNtXyVvcGNvZGVOYW1l
JSwgb3Bjb2RlU3RydWN0LCBmbikKIGVuZApAQCAtNTEyLDYgKzUyNiwxNiBAQCBvcCh3YXNtX2Z1
bmN0aW9uX3Byb2xvZ3VlX25vX3RscywgbWFjcm8gKCkKICAgICB3YXNtTmV4dEluc3RydWN0aW9u
KCkKIGVuZCkKIAorbWFjcm8ganVtcFRvRXhjZXB0aW9uKCkKKyAgICBpZiBBUk02NEUKKyAgICAg
ICAgbW92ZSByMCwgYTAKKyAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpv
ZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OmV4Y2VwdGlvbkhhbmRs
ZXIpICogUHRyU2l6ZSwgYTEKKyAgICAgICAgam1wIFthMV0sIE5hdGl2ZVRvSklUR2F0ZVB0clRh
ZyAjIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKKyAgICBlbHNlCisgICAgICAgIGptcCByMCwgRXhj
ZXB0aW9uSGFuZGxlclB0clRhZworICAgIGVuZAorZW5kCisKIG9wKHdhc21fdGhyb3dfZnJvbV9z
bG93X3BhdGhfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAgICBsb2FkcCBXYXNtOjpJbnN0YW5jZTo6
bV9wb2ludGVyVG9Ub3BFbnRyeUZyYW1lW3dhc21JbnN0YW5jZV0sIHQ1CiAgICAgbG9hZHAgW3Q1
XSwgdDUKQEAgLTUyMywxNCArNTQ3LDcgQEAgb3Aod2FzbV90aHJvd19mcm9tX3Nsb3dfcGF0aF90
cmFtcG9saW5lLCBtYWNybyAoKQogICAgICMgU2xvdyBwYXRocyBhbmQgdGhlIHRocm93RXhjZXB0
aW9uIG1hY3JvIHN0b3JlIHRoZSBleGNlcHRpb24gY29kZSBpbiB0aGUgQXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgc2xvdAogICAgIGxvYWRpIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsg
UGF5bG9hZE9mZnNldFtjZnJdLCBhMwogICAgIGNDYWxsNChfc2xvd19wYXRoX3dhc21fdGhyb3df
ZXhjZXB0aW9uKQotCi0gICAgaWYgQVJNNjRFCi0gICAgICAgIG1vdmUgcjAsIGEwCi0gICAgICAg
IGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFw
ICsgKGNvbnN0ZXhwciBHYXRlOjpleGNlcHRpb25IYW5kbGVyKSAqIFB0clNpemUsIGExCi0gICAg
ICAgIGptcCBbYTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBFeGNlcHRpb25IYW5kbGVyUHRy
VGFnCi0gICAgZWxzZQotICAgICAgICBqbXAgcjAsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLSAg
ICBlbmQKKyAgICBqdW1wVG9FeGNlcHRpb24oKQogZW5kKQogCiBtYWNybyB3YXNtX3Rocm93X2Zy
b21fZmF1bHRfaGFuZGxlcihpbnN0YW5jZSkKQEAgLTU0MywxNCArNTYwLDcgQEAgbWFjcm8gd2Fz
bV90aHJvd19mcm9tX2ZhdWx0X2hhbmRsZXIoaW5zdGFuY2UpCiAgICAgbW92ZSAwLCBhMQogICAg
IG1vdmUgY2ZyLCBhMAogICAgIGNDYWxsNChfc2xvd19wYXRoX3dhc21fdGhyb3dfZXhjZXB0aW9u
KQotCi0gICAgaWYgQVJNNjRFCi0gICAgICAgIG1vdmUgcjAsIGEwCi0gICAgICAgIGxlYXAgSlND
Q29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0
ZXhwciBHYXRlOjpleGNlcHRpb25IYW5kbGVyKSAqIFB0clNpemUsIGExCi0gICAgICAgIGptcCBb
YTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBFeGNlcHRpb25IYW5kbGVyUHRyVGFnCi0gICAg
ZWxzZQotICAgICAgICBqbXAgcjAsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLSAgICBlbmQKKyAg
ICBqdW1wVG9FeGNlcHRpb24oKQogZW5kCiAKIG9wKHdhc21fdGhyb3dfZnJvbV9mYXVsdF9oYW5k
bGVyX3RyYW1wb2xpbmVfZmFzdFRMUywgbWFjcm8gKCkKQEAgLTgxMSwxMSArODIxLDcgQEAgbWFj
cm8gc2xvd1BhdGhGb3JXYXNtQ2FsbChjdHgsIHNsb3dQYXRoLCBzdG9yZVdhc21JbnN0YW5jZSkK
ICAgICAgICAgICAgICAgICBkZWZpbmVSZXR1cm5MYWJlbChvcGNvZGVOYW1lLCBzaXplKQogICAg
ICAgICAgICAgZW5kKQogCi0gICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgd3MxCi0g
ICAgICAgICAgICBsb2FkaSBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6bV9udW1DYWxsZWVMb2Nh
bHNbd3MxXSwgd3MxCi0gICAgICAgICAgICBsc2hpZnRwIDMsIHdzMQotICAgICAgICAgICAgYWRk
cCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCwgd3MxCi0gICAgICAgICAgICBzdWJwIGNm
ciwgd3MxLCBzcAorICAgICAgICAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCiAK
ICAgICAgICAgICAgICMgV2UgbmVlZCB0byBzZXQgUEMgdG8gbG9hZCBpbmZvcm1hdGlvbiBmcm9t
IHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0sIGJ1dCB3ZQogICAgICAgICAgICAgIyBuZWVkIHRvIHBy
ZXNlcnZlIGl0cyBjdXJyZW50IHZhbHVlIHNpbmNlIGl0IG1pZ2h0IGNvbnRhaW4gYSByZXR1cm4g
dmFsdWUKQEAgLTI4MDQsMyArMjgxMCw5NCBAQCB3YXNtT3AoYXRvbWljX2ZlbmNlLCBXYXNtRHJv
cEtlZXAsIG1hY3JvKGN0eCkKICAgICBmZW5jZQogICAgIGRpc3BhdGNoKGN0eCkKIGVuZCkKKwor
d2FzbU9wKHRocm93LCBXYXNtVGhyb3csIG1hY3JvKGN0eCkKKyAgICBsb2FkcCBXYXNtOjpJbnN0
YW5jZTo6bV9wb2ludGVyVG9Ub3BFbnRyeUZyYW1lW3dhc21JbnN0YW5jZV0sIHQ1CisgICAgbG9h
ZHAgW3Q1XSwgdDUKKyAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih0NSkKKworICAgIGNhbGxXYXNtU2xvd1BhdGgoX3Nsb3dfcGF0aF93YXNtX3Rocm93KQor
ICAgIGp1bXBUb0V4Y2VwdGlvbigpCitlbmQpCisKK3dhc21PcChyZXRocm93LCBXYXNtUmV0aHJv
dywgbWFjcm8oY3R4KQorICAgIGNhbGxXYXNtU2xvd1BhdGgoX3Nsb3dfcGF0aF93YXNtX3JldGhy
b3cpCisgICAganVtcFRvRXhjZXB0aW9uKCkKK2VuZCkKKworY29tbW9uV2FzbU9wKHdhc21fY2F0
Y2gsIFdhc21DYXRjaCwgbWFjcm8oKSBlbmQsIG1hY3JvKGN0eCkKKyAgICBsb2FkcCBDYWxsZWVb
Y2ZyXSwgdDMKKyAgICBjb252ZXJ0Q2FsbGVlVG9WTSh0MykKKyAgICByZXN0b3JlQ2FsbGVlU2F2
ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodDMsIHQwKQorCisgICAgbG9hZHAg
Vk06OmNhbGxlZUZvcldhc21DYXRjaFt0M10sIHdzMQorICAgIHN0b3JlcCAwLCBWTTo6Y2FsbGVl
Rm9yV2FzbUNhdGNoW3QzXQorICAgIHN0b3JlcCB3czEsIENhbGxlZVtjZnJdCisKKyAgICBsb2Fk
cCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hbdDNdLCBjZnIKKyAgICBzdG9yZXAgMCwgVk06OmNhbGxG
cmFtZUZvckNhdGNoW3QzXQorCisgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCisK
KyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKKyAgICBsb2FkcCBXYXNtOjpGdW5jdGlvbkNv
ZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyW1BCXSwgUEIKKyAgICBsb2FkcCBWTTo6
dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93W3QzXSwgUEMKKyAgICBzdWJwIFBCLCBQQworCisg
ICAgIyBUT0RPOiBuZWVkcyBub24tVExTIHZlcnNpb24KKyAgICBzdG9yZVdhc21JbnN0YW5jZVRv
VExTKHdhc21JbnN0YW5jZSkKKyAgICByZWxvYWRNZW1vcnlSZWdpc3RlcnNGcm9tSW5zdGFuY2Uo
d2FzbUluc3RhbmNlLCB3czAsIHdzMSkKKworICAgIGNhbGxXYXNtU2xvd1BhdGgoX3Nsb3dfcGF0
aF93YXNtX3JldHJpZXZlX2FuZF9jbGVhcl9leGNlcHRpb24pCisgICAgbW92ZSByMSwgdDEKKwor
ICAgIHdnZXR1KGN0eCwgbV9zdGFydE9mZnNldCwgdDIpCisgICAgd2dldHUoY3R4LCBtX2FyZ3Vt
ZW50Q291bnQsIHQzKQorCisgICAgbHNoaWZ0aSAzLCB0MgorICAgIHN1YnAgY2ZyLCB0MiwgdDIK
KworLmNvcHlMb29wOgorICAgIGJ0aXogdDMsIC5kb25lCisgICAgbG9hZHEgW3QxXSwgdDYKKyAg
ICBzdG9yZXEgdDYsIFt0Ml0KKyAgICBzdWJpIDEsIHQzCisgICAgc3VicCA4LCB0MgorICAgIGFk
ZHAgOCwgdDEKKyAgICBqbXAgLmNvcHlMb29wCisKKy5kb25lOgorICAgIHRyYWNlRXhlY3V0aW9u
KCkKKworICAgIGRpc3BhdGNoKGN0eCkKK2VuZCkKKworY29tbW9uV2FzbU9wKHdhc21fY2F0Y2hf
YWxsLCBXYXNtQ2F0Y2hBbGwsIG1hY3JvKCkgZW5kLCBtYWNybyhjdHgpCisgICAgbG9hZHAgQ2Fs
bGVlW2Nmcl0sIHQzCisgICAgY29udmVydENhbGxlZVRvVk0odDMpCisgICAgcmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHQzLCB0MCkKKworICAgIGxv
YWRwIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hbdDNdLCB3czEKKyAgICBzdG9yZXAgMCwgVk06OmNh
bGxlZUZvcldhc21DYXRjaFt0M10KKyAgICBzdG9yZXAgd3MxLCBDYWxsZWVbY2ZyXQorCisgICAg
bG9hZHAgVk06OmNhbGxGcmFtZUZvckNhdGNoW3QzXSwgY2ZyCisgICAgc3RvcmVwIDAsIFZNOjpj
YWxsRnJhbWVGb3JDYXRjaFt0M10KKworICAgIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNhbGwo
KQorCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgbG9hZHAgV2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCisgICAgbG9hZHAg
Vk06OnRhcmdldEludGVycHJldGVyUENGb3JUaHJvd1t0M10sIFBDCisgICAgc3VicCBQQiwgUEMK
KworICAgICMgVE9ETzogbmVlZHMgbm9uLVRMUyB2ZXJzaW9uCisgICAgc3RvcmVXYXNtSW5zdGFu
Y2VUb1RMUyh3YXNtSW5zdGFuY2UpCisgICAgcmVsb2FkTWVtb3J5UmVnaXN0ZXJzRnJvbUluc3Rh
bmNlKHdhc21JbnN0YW5jZSwgd3MwLCB3czEpCisKKyAgICBjYWxsV2FzbVNsb3dQYXRoKF9zbG93
X3BhdGhfd2FzbV9yZXRyaWV2ZV9hbmRfY2xlYXJfZXhjZXB0aW9uKQorCisgICAgdHJhY2VFeGVj
dXRpb24oKQorCisgICAgZGlzcGF0Y2goY3R4KQorZW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAppbmRleCBkZmI5MzE4OGMwOGYuLjFlYjNl
NWNlZWFmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJ
bnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0
YW5jZS5jcHAKQEAgLTQwLDYgKzQwLDcgQEAgRXJyb3JJbnN0YW5jZTo6RXJyb3JJbnN0YW5jZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFcnJvclR5cGUgZXJyb3JUeXBlKQogICAgICwg
bV9vdXRPZk1lbW9yeUVycm9yKGZhbHNlKQogICAgICwgbV9lcnJvckluZm9NYXRlcmlhbGl6ZWQo
ZmFsc2UpCiAgICAgLCBtX25hdGl2ZUdldHRlclR5cGVFcnJvcihmYWxzZSkKKyAgICAsIG1fY2F0
Y2hhYmxlRnJvbVdhc20odHJ1ZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JJbnN0YW5jZS5oCmluZGV4IDdkMmU2NDMyNmE4MS4uZWZmNWU5ODcyNGI5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCkBAIC04
MCw2ICs4MCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROYXRpdmVHZXR0ZXJUeXBlRXJyb3Io
KSB7IG1fbmF0aXZlR2V0dGVyVHlwZUVycm9yID0gdHJ1ZTsgfQogICAgIGJvb2wgaXNOYXRpdmVH
ZXR0ZXJUeXBlRXJyb3IoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUdldHRlclR5cGVFcnJvcjsg
fQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHZvaWQgc2V0Q2F0Y2hhYmxlRnJvbVdh
c20oYm9vbCBmbGFnKSB7IG1fY2F0Y2hhYmxlRnJvbVdhc20gPSBmbGFnOyB9CisgICAgYm9vbCBp
c0NhdGNoYWJsZUZyb21XYXNtKCkgY29uc3QgeyByZXR1cm4gbV9jYXRjaGFibGVGcm9tV2FzbTsg
fQorI2VuZGlmCisKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc2FuaXRpemVkVG9TdHJp
bmcoSlNHbG9iYWxPYmplY3QqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc2FuaXRp
emVkTWVzc2FnZVN0cmluZyhKU0dsb2JhbE9iamVjdCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IFN0cmluZyBzYW5pdGl6ZWROYW1lU3RyaW5nKEpTR2xvYmFsT2JqZWN0Kik7CkBAIC0xMTYsNiAr
MTIxLDkgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV9vdXRPZk1lbW9yeUVycm9yIDogMTsKICAg
ICBib29sIG1fZXJyb3JJbmZvTWF0ZXJpYWxpemVkIDogMTsKICAgICBib29sIG1fbmF0aXZlR2V0
dGVyVHlwZUVycm9yIDogMTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgYm9vbCBtX2Nh
dGNoYWJsZUZyb21XYXNtIDogMTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5k
ZXggMDZmNjUzZWNiZjg0Li4wN2RkZjFlNTAwODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTE1Myw2ICsxNTMsNyBAQAogI2lu
Y2x1ZGUgIkpTV2Vha1NldC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHkuaCIKICNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlHbG9iYWwuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9y
LmgiCkBAIC0xNjAsNiArMTYxLDcgQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRl
ICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxhenlDbGFzc1N0cnVjdHVyZUlubGluZXMuaCIK
ICNpbmNsdWRlICJMYXp5UHJvcGVydHlJbmxpbmVzLmgiCkBAIC0yMjAsNiArMjIyLDggQEAKICNp
bmNsdWRlICJXZWFrU2V0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJv
dG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oIgor
I2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZS5oIgpAQCAtMjM2LDYg
KzI0MCw4IEBACiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUuaCIK
ICNpbmNsdWRlICJXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJXZWJB
c3NlbWJseVRhYmxlUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWdDb25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgiCiAjaW5jbHVkZSA8
d3RmL1JhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDEy
OGIzOTkxMGRkOC4uY2UyYzFiZjc4ZDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTE2OSwxNCArMTY5LDE2IEBAIGNvbnN0ZXhwciBi
b29sIHR5cGVFeHBvc2VkQnlEZWZhdWx0ID0gdHJ1ZTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKICNkZWZpbmUgRk9SX0VBQ0hfV0VCQVNTRU1CTFlfQ09OU1RSVUNUT1JfVFlQRShtYWNybykg
XAotICAgIG1hY3JvKFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yLCB3ZWJBc3NlbWJseUNvbXBpbGVF
cnJvciwgd2ViQXNzZW1ibHlDb21waWxlRXJyb3IsIEVycm9ySW5zdGFuY2UsICAgICAgICAgICAg
IENvbXBpbGVFcnJvciwgZXJyb3IsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCisgICAgbWFjcm8o
V2ViQXNzZW1ibHlDb21waWxlRXJyb3IsIHdlYkFzc2VtYmx5Q29tcGlsZUVycm9yLCB3ZWJBc3Nl
bWJseUNvbXBpbGVFcnJvciwgRXJyb3JJbnN0YW5jZSwgICAgICAgICAgICAgQ29tcGlsZUVycm9y
LCBlcnJvciwgIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlF
eGNlcHRpb24sICAgIHdlYkFzc2VtYmx5RXhjZXB0aW9uLCAgICB3ZWJBc3NlbWJseUV4Y2VwdGlv
biwgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiwgICAgRXhjZXB0aW9uLCAgICBvYmplY3QsIHR5
cGVFeHBvc2VkQnlEZWZhdWx0KSBcCiAgICAgbWFjcm8oV2ViQXNzZW1ibHlHbG9iYWwsICAgICAg
IHdlYkFzc2VtYmx5R2xvYmFsLCAgICAgICB3ZWJBc3NlbWJseUdsb2JhbCwgICAgICAgSlNXZWJB
c3NlbWJseUdsb2JhbCwgICAgICAgR2xvYmFsLCAgICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlE
ZWZhdWx0KSBcCiAgICAgbWFjcm8oV2ViQXNzZW1ibHlJbnN0YW5jZSwgICAgIHdlYkFzc2VtYmx5
SW5zdGFuY2UsICAgICB3ZWJBc3NlbWJseUluc3RhbmNlLCAgICAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlLCAgICAgSW5zdGFuY2UsICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCi0g
ICAgbWFjcm8oV2ViQXNzZW1ibHlMaW5rRXJyb3IsICAgIHdlYkFzc2VtYmx5TGlua0Vycm9yLCAg
ICB3ZWJBc3NlbWJseUxpbmtFcnJvciwgICAgRXJyb3JJbnN0YW5jZSwgICAgICAgICAgICAgTGlu
a0Vycm9yLCAgICBlcnJvciwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKKyAgICBtYWNybyhXZWJB
c3NlbWJseUxpbmtFcnJvciwgICAgd2ViQXNzZW1ibHlMaW5rRXJyb3IsICAgIHdlYkFzc2VtYmx5
TGlua0Vycm9yLCAgICBFcnJvckluc3RhbmNlLCAgICAgICAgICAgICBMaW5rRXJyb3IsICAgIGVy
cm9yLCAgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKICAgICBtYWNybyhXZWJBc3NlbWJseU1lbW9y
eSwgICAgICAgd2ViQXNzZW1ibHlNZW1vcnksICAgICAgIHdlYkFzc2VtYmx5TWVtb3J5LCAgICAg
ICBKU1dlYkFzc2VtYmx5TWVtb3J5LCAgICAgICBNZW1vcnksICAgICAgIG9iamVjdCwgdHlwZUV4
cG9zZWRCeURlZmF1bHQpIFwKICAgICBtYWNybyhXZWJBc3NlbWJseU1vZHVsZSwgICAgICAgd2Vi
QXNzZW1ibHlNb2R1bGUsICAgICAgIHdlYkFzc2VtYmx5TW9kdWxlLCAgICAgICBKU1dlYkFzc2Vt
Ymx5TW9kdWxlLCAgICAgICBNb2R1bGUsICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1
bHQpIFwKLSAgICBtYWNybyhXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciwgd2ViQXNzZW1ibHlSdW50
aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVudGltZUVycm9yLCBFcnJvckluc3RhbmNlLCAgICAgICAg
ICAgICBSdW50aW1lRXJyb3IsIGVycm9yLCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAotICAgIG1h
Y3JvKFdlYkFzc2VtYmx5VGFibGUsICAgICAgICB3ZWJBc3NlbWJseVRhYmxlLCAgICAgICAgd2Vi
QXNzZW1ibHlUYWJsZSwgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIFRhYmxlLCAg
ICAgICAgb2JqZWN0LCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkKKyAgICBtYWNybyhXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvciwgd2ViQXNzZW1ibHlSdW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVudGlt
ZUVycm9yLCBFcnJvckluc3RhbmNlLCAgICAgICAgICAgICBSdW50aW1lRXJyb3IsIGVycm9yLCAg
dHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKKyAgICBtYWNybyhXZWJBc3NlbWJseVRhYmxlLCAgICAg
ICAgd2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIHdlYkFzc2VtYmx5VGFibGUsICAgICAgICBKU1dl
YkFzc2VtYmx5VGFibGUsICAgICAgICBUYWJsZSwgICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRC
eURlZmF1bHQpIFwKKyAgICBtYWNybyhXZWJBc3NlbWJseVRhZywgICAgICAgICAgd2ViQXNzZW1i
bHlUYWcsICAgICAgICAgIHdlYkFzc2VtYmx5VGFnLCAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFn
LCAgICAgICAgICBUYWcsICAgICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIAog
I2Vsc2UKICNkZWZpbmUgRk9SX0VBQ0hfV0VCQVNTRU1CTFlfQ09OU1RSVUNUT1JfVFlQRShtYWNy
bykKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKaW5kZXggNWE0MDUyODg4ZTQ2Li4zZDgyMGI3NGM0NWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTEyOSwxMSArMTI5LDEzIEBACiAjaW5jbHVkZSAiSlNX
ZWFrT2JqZWN0UmVmLmgiCiAjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5R2xvYmFsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIK
KyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIK
ICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJNaW5pbXVtUmVzZXJ2ZWRab25lU2l6
ZS5oIgpAQCAtMzM0LDYgKzMzNiw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBo
ZWFwVHlwZSwgV1RGOjpSdW5Mb29wKiBydW5Mb29wLCBib29sKiBzdWNjZXNzKQogICAgICwgaW50
bFNlZ21lbnRzSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEludGxTZWdtZW50
cz4oKSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgLCB3ZWJBc3NlbWJseUNvZGVCbG9j
a0hlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrPigpKQorICAgICwgd2ViQXNzZW1ibHlFeGNlcHRpb25IZWFwQ2VsbFR5cGUoSXNvSGVhcENl
bGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseUV4Y2VwdGlvbj4oKSkKICAgICAsIHdlYkFzc2Vt
Ymx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8V2ViQXNzZW1i
bHlGdW5jdGlvbj4oKSkKICAgICAsIHdlYkFzc2VtYmx5R2xvYmFsSGVhcENlbGxUeXBlKElzb0hl
YXBDZWxsVHlwZTo6Y3JlYXRlPEpTV2ViQXNzZW1ibHlHbG9iYWw+KCkpCiAgICAgLCB3ZWJBc3Nl
bWJseUluc3RhbmNlSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZT4oKSkKQEAgLTM0MSw2ICszNDQsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlw
ZSwgSGVhcFR5cGUgaGVhcFR5cGUsIFdURjo6UnVuTG9vcCogcnVuTG9vcCwgYm9vbCogc3VjY2Vz
cykKICAgICAsIHdlYkFzc2VtYmx5TW9kdWxlSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6
Y3JlYXRlPEpTV2ViQXNzZW1ibHlNb2R1bGU+KCkpCiAgICAgLCB3ZWJBc3NlbWJseU1vZHVsZVJl
Y29yZEhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZD4oKSkKICAgICAsIHdlYkFzc2VtYmx5VGFibGVIZWFwQ2VsbFR5cGUoSXNvSGVhcENl
bGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseVRhYmxlPigpKQorICAgICwgd2ViQXNzZW1ibHlU
YWdIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseVRhZz4o
KSkKICNlbmRpZgogICAgICwgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiUHJpbWl0
aXZlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhlYXAsIGF1eGlsaWFyeUhlYXBDZWxsVHlwZS5nZXQo
KSwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpIC8vIEhhc2g6MHgzZTdjZDc2Mgog
ICAgICwganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2UgQXV4
aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5SGVhcENlbGxUeXBlLmdldCgpLCBqc1ZhbHVlR2lnYWNh
Z2VBbGxvY2F0b3IuZ2V0KCkpIC8vIEhhc2g6MHgyNDFlOTQ2CkBAIC0xNjI1LDYgKzE2MjksNyBA
QCBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRzU3Bh
Y2UsIGludGxTZWdtZW50c0hlYXBDZWxsVAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhqc1RvV2FzbUlDQ2FsbGVlU3BhY2Us
IGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVG9XYXNtSUNDYWxsZWUpCiBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSwgd2Vi
QXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2spIC8vIEhhc2g6MHg5YWQ5OTVjZAorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKHdlYkFzc2VtYmx5RXhjZXB0aW9uU3BhY2UsIHdlYkFzc2VtYmx5RXhjZXB0aW9uSGVh
cENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKQogRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZSwgd2ViQXNz
ZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZS5nZXQoKSwgV2ViQXNzZW1ibHlGdW5jdGlvbikgLy8g
SGFzaDoweDhiN2MzMmRiCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
d2ViQXNzZW1ibHlHbG9iYWxTcGFjZSwgd2ViQXNzZW1ibHlHbG9iYWxIZWFwQ2VsbFR5cGUuZ2V0
KCksIEpTV2ViQXNzZW1ibHlHbG9iYWwpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1cod2ViQXNzZW1ibHlJbnN0YW5jZVNwYWNlLCB3ZWJBc3NlbWJseUluc3RhbmNlSGVh
cENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UpCkBAIC0xNjMyLDYgKzE2Mzcs
NyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlN
ZW1vcnlTcGFjZSwgd2ViQXNzZW1ibHlNZW1vcgogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5TW9kdWxlU3BhY2UsIHdlYkFzc2VtYmx5TW9kdWxlSGVh
cENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5TW9kdWxlKQogRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3BhY2UsIHdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkSGVhcENlbGxUeXBlLmdldCgpLCBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZCkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJs
eVRhYmxlU3BhY2UsIHdlYkFzc2VtYmx5VGFibGVIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNz
ZW1ibHlUYWJsZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJB
c3NlbWJseVRhZ1NwYWNlLCB3ZWJBc3NlbWJseVRhZ0hlYXBDZWxsVHlwZS5nZXQoKSwgSlNXZWJB
c3NlbWJseVRhZykKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbikgLy8gSGFzaDoweGQ0YTVmZjAxCiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggNGIyNGM2MTdlOTBhLi4xYWVlMjY1OWNjODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMjksNiArMjksNyBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJDYWxsRGF0YS5oIgorI2luY2x1ZGUgIkNhbGxlZUJpdHMuaCIK
ICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiQ29tcGxldGVT
dWJzcGFjZS5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKQEAgLTU1LDYgKzU2LDcg
QEAKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIlZNVHJhcHMuaCIKICNp
bmNsdWRlICJXYXNtQ29udGV4dC5oIgorI2luY2x1ZGUgIldhc21UYWcuaCIKICNpbmNsdWRlICJX
YXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CkBAIC00NTAsNiArNDUyLDcgQEAgcHVibGlj
OgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IGludGxTZWdtZW50c0hlYXBD
ZWxsVHlwZTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgc3RkOjp1bmlxdWVfcHRyPElz
b0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlFeGNlcHRpb25IZWFwQ2Vs
bFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlG
dW5jdGlvbkhlYXBDZWxsVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBl
PiB3ZWJBc3NlbWJseUdsb2JhbEhlYXBDZWxsVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNv
SGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUluc3RhbmNlSGVhcENlbGxUeXBlOwpAQCAtNDU3LDYg
KzQ2MCw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3
ZWJBc3NlbWJseU1vZHVsZUhlYXBDZWxsVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVh
cENlbGxUeXBlPiB3ZWJBc3NlbWJseU1vZHVsZVJlY29yZEhlYXBDZWxsVHlwZTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseVRhYmxlSGVhcENlbGxUeXBl
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5VGFnSGVh
cENlbGxUeXBlOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoSklUKQpAQCAtNjIyLDYgKzYyNiw3IEBA
IHB1YmxpYzoKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihqc1RvV2FzbUlDQ2FsbGVlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlKQorICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlFeGNlcHRpb25TcGFj
ZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5RnVu
Y3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFz
c2VtYmx5R2xvYmFsU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Uih3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UpCkBAIC02MjksNiArNjM0LDcgQEAgcHVibGljOgog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlNb2R1bGVT
cGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Uih3ZWJBc3NlbWJseVRhYmxlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUih3ZWJBc3NlbWJseVRhZ1NwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIod2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TcGFjZSkKICNlbmRpZgogCkBA
IC04OTgsNiArOTA0LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihWTSwgY2FsbEZyYW1lRm9yQ2F0Y2gpOwogICAgIH0KIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
Y2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoVk0sIGNhbGxlZUZvcldhc21DYXRjaCk7CisgICAgfQorCiAgICAgc3RhdGljIHB0
cmRpZmZfdCB0b3BFbnRyeUZyYW1lT2Zmc2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoVk0sIHRvcEVudHJ5RnJhbWUpOwpAQCAtOTkyLDYgKzEwMDMsNyBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgdmFyYXJnc0xlbmd0aDsKICAgICBDYWxsRnJhbWUqIG5ld0NhbGxG
cmFtZVJldHVyblZhbHVlOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lRm9yQ2F0Y2g7CisgICAg
Q2FsbGVlQml0cyBjYWxsZWVGb3JXYXNtQ2F0Y2g7CiAgICAgdm9pZCogdGFyZ2V0TWFjaGluZVBD
Rm9yVGhyb3c7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIHRhcmdldEludGVycHJldGVyUENGb3JU
aHJvdzsKICAgICB1aW50MzJfdCBvc3JFeGl0SW5kZXg7CkBAIC0xMzA2LDYgKzEzMTgsMTAgQEAg
cHJpdmF0ZToKICAgICBMb2NrIG1fbG9vcEhpbnRFeGVjdXRpb25Db3VudExvY2s7CiAgICAgSGFz
aE1hcDxjb25zdCBJbnN0cnVjdGlvbiosIHN0ZDo6cGFpcjx1bnNpZ25lZCwgc3RkOjp1bmlxdWVf
cHRyPHVpbnRwdHJfdD4+PiBtX2xvb3BIaW50RXhlY3V0aW9uQ291bnRzOwogCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorICAgIFZlY3RvcjxXYXNtOjpUYWc+IG1fd2FzbVRhZ3M7CisjZW5kaWYK
KwogICAgIFZNKiBtX3ByZXY7IC8vIFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgog
ICAgIFZNKiBtX25leHQ7IC8vIFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcApp
bmRleCBmOWMyOTQ2MDA2MTguLmZkMzMzNTU4MmVkMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCkBAIC0xNDcsNyArMTQ3LDEyIEBA
IHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29u
dHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tU
eXBlOjpJZjsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250cm9sRGF0YSYg
Y29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeTsg
fQorICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNoKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9s
KSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2g7IH0KKyAg
ICAgICAgc3RhdGljIGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkg
eyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoOyB9CiAgICAg
ICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsg
cmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbDsgfQorICAg
ICAgICBzdGF0aWMgYm9vbCBpc0xvb3AoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0
dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wOyB9CisgICAgICAgIHN0
YXRpYyBib29sIGlzQmxvY2soY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNv
bnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpCbG9jazsgfQogCiAgICAgICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICB7CkBAIC0xNjQsNiArMTY5LDEy
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpUb3BMZXZlbDoKICAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIlRvcExldmVsOiAiKTsKICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpUcnk6CisgICAgICAgICAgICAgICAgb3V0
LnByaW50KCJUcnk6ICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBCbG9ja1R5cGU6OkNhdGNoOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiQ2F0Y2g6ICIp
OworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb3V0
LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOwog
ICAgICAgICAgICAgaWYgKHNwZWNpYWwpCkBAIC0zMTQsNiArMzI1LDE2IEBAIHB1YmxpYzoKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJiwg
Y29uc3QgU3RhY2smKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRF
bHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOwogCisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkVHJ5KEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3Rh
Y2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjayk7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hUb1VucmVhY2hhYmxl
KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBDb250cm9sVHlwZSYs
IFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRD
YXRjaEFsbChTdGFjayYsQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShDb250cm9sVHlwZSYs
IENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
RGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9s
VHlwZSYpOworCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJu
KGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhw
cmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERh
dGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKQEAgLTI5
ODIsNiArMzAwMyw1OCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJs
ZShDb250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9
CiAKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smICwg
Q29udHJvbFR5cGUmICwgU3RhY2smICkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7
IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkLCBjb25zdCBT
aWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7
IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNp
Z25lZCAsIGNvbnN0IFNpZ25hdHVyZSYgLCBDb250cm9sVHlwZSYgLCBSZXN1bHRMaXN0JiApIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsKFN0YWNr
JiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9Owor
fQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRy
b2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRGVs
ZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIFN0YWNrJikgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIFVOVVNFRF9QQVJBTShleGNlcHRpb25JbmRleCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5
cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKwogYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBTdGFj
ayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ2FsbEluZm9ybWF0aW9u
IHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZv
cigqZGF0YS5zaWduYXR1cmUoKSwgQ2FsbFJvbGU6OkNhbGxlZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggMDgxY2MyYjI1NWVm
Li4wMWJjNzk3YmJiNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKQEAgLTQ4LDYgKzQ4LDggQEAKICNpbmNsdWRlICJCM1dhc21Cb3Vu
ZHNDaGVja1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKKyNp
bmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKICNp
bmNsdWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKQEAgLTgzLDE4ICs4NSwzMSBAQCBzdGF0aWMg
Y29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogfQogCitjbGFzcyBCM0lSR2VuZXJh
dG9yOworc3RydWN0IFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgeworICAgIHZvaWQgZ2VuZXJh
dGUoQ0NhbGxIZWxwZXJzJiwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYsIEIz
SVJHZW5lcmF0b3IqKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG1fY2FsbFNpdGVJbmRleDsKKyAg
ICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKIGNsYXNzIEIzSVJHZW5lcmF0b3IgewogcHVibGlj
OgotICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVmFsdWUqOworICAgIHVzaW5nIEV4cHJlc3Np
b25UeXBlID0gVmFyaWFibGUqOwogICAgIHVzaW5nIFJlc3VsdExpc3QgPSBWZWN0b3I8RXhwcmVz
c2lvblR5cGUsIDg+OwogCiAgICAgc3RydWN0IENvbnRyb2xEYXRhIHsKLSAgICAgICAgQ29udHJv
bERhdGEoUHJvY2VkdXJlJiBwcm9jLCBPcmlnaW4gb3JpZ2luLCBCbG9ja1NpZ25hdHVyZSBzaWdu
YXR1cmUsIEJsb2NrVHlwZSB0eXBlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24sIEJhc2ljQmxv
Y2sqIHNwZWNpYWwgPSBudWxscHRyKQorICAgICAgICBDb250cm9sRGF0YShQcm9jZWR1cmUmIHBy
b2MsIE9yaWdpbiBvcmlnaW4sIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgQmxvY2tUeXBlIHR5
cGUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uLCBCYXNpY0Js
b2NrKiBzcGVjaWFsID0gbnVsbHB0cikKICAgICAgICAgICAgIDogY29udHJvbEJsb2NrVHlwZSh0
eXBlKQogICAgICAgICAgICAgLCBtX3NpZ25hdHVyZShzaWduYXR1cmUpCisgICAgICAgICAgICAs
IG1fc3RhY2tTaXplKHN0YWNrU2l6ZSkKICAgICAgICAgICAgICwgY29udGludWF0aW9uKGNvbnRp
bnVhdGlvbikKICAgICAgICAgICAgICwgc3BlY2lhbChzcGVjaWFsKQogICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQodHlwZSAhPSBCbG9ja1R5cGU6OlRyeSAmJiB0eXBlICE9IEJsb2NrVHlw
ZTo6Q2F0Y2gpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0gQmxvY2tUeXBlOjpUb3BMZXZlbCkK
KyAgICAgICAgICAgICAgICBtX3N0YWNrU2l6ZSAtPSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQo
KTsKKwogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQmxvY2tUeXBlOjpMb29wKSB7CiAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3Vu
dCgpOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIHBoaXMuYXBwZW5kKHByb2MuYWRkPFZhbHVl
PihQaGksIHRvQjNUeXBlKHNpZ25hdHVyZS0+YXJndW1lbnQoaSkpLCBvcmlnaW4pKTsKQEAgLTEw
NCwxMiArMTE5LDM3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAg
ICAgIENvbnRyb2xEYXRhKFByb2NlZHVyZSYgcHJvYywgT3JpZ2luIG9yaWdpbiwgQmxvY2tTaWdu
YXR1cmUgc2lnbmF0dXJlLCBCbG9ja1R5cGUgdHlwZSwgdW5zaWduZWQgc3RhY2tTaXplLCBCYXNp
Y0Jsb2NrKiBjb250aW51YXRpb24sIHVuc2lnbmVkIHRyeVN0YXJ0LCB1bnNpZ25lZCB0cnlEZXB0
aCkKKyAgICAgICAgICAgIDogY29udHJvbEJsb2NrVHlwZSh0eXBlKQorICAgICAgICAgICAgLCBt
X3NpZ25hdHVyZShzaWduYXR1cmUpCisgICAgICAgICAgICAsIG1fc3RhY2tTaXplKHN0YWNrU2l6
ZSkKKyAgICAgICAgICAgICwgY29udGludWF0aW9uKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAg
ICwgc3BlY2lhbChudWxscHRyKQorICAgICAgICAgICAgLCBtX3RyeVN0YXJ0KHRyeVN0YXJ0KQor
ICAgICAgICAgICAgLCBtX3RyeURlcHRoKHRyeURlcHRoKQorICAgICAgICB7CisgICAgICAgICAg
ICBVTlVTRURfUEFSQU0ocHJvYyk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPnJldHVybkNv
dW50KCk7ICsraSkKKyAgICAgICAgICAgICAgICBwaGlzLmFwcGVuZChwcm9jLmFkZDxWYWx1ZT4o
UGhpLCB0b0IzVHlwZShzaWduYXR1cmUtPnJldHVyblR5cGUoaSkpLCBvcmlnaW4pKTsKKyAgICAg
ICAgfQorCiAgICAgICAgIENvbnRyb2xEYXRhKCkKICAgICAgICAgewogICAgICAgICB9CiAKICAg
ICAgICAgc3RhdGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1
cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9CisgICAgICAgIHN0YXRp
YyBib29sIGlzVHJ5KGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9s
LmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VHJ5OyB9CisgICAgICAgIHN0YXRpYyBib29sIGlz
QW55Q2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxv
Y2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpDYXRjaDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1Rv
cExldmVsKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2Nr
VHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWw7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNM
b29wKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlw
ZSgpID09IEJsb2NrVHlwZTo6TG9vcDsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0Jsb2NrKGNv
bnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09
IEJsb2NrVHlwZTo6QmxvY2s7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNDYXRjaChjb25zdCBD
b250cm9sRGF0YSYgY29udHJvbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoY29udHJvbC5i
bG9ja1R5cGUoKSAhPSBCbG9ja1R5cGU6OkNhdGNoKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiBjb250cm9sLmNhdGNoS2luZCgpID09IENhdGNoS2lu
ZDo6Q2F0Y2g7CisgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKICAgICAgICAgewpAQCAtMTI2LDYgKzE2NiwxMiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBjYXNlIEJsb2NrVHlwZTo6VG9wTGV2ZWw6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50
KCJUb3BMZXZlbDogIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEJsb2NrVHlwZTo6VHJ5OgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVHJ5OiAiKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpDYXRjaDoK
KyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkNhdGNoOiAiKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5wcmludCgiQ29udGludWF0aW9u
OiAiLCAqY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKICAgICAgICAgICAgIGlmIChzcGVj
aWFsKQpAQCAtMTU0LDYgKzIwMCwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzcGVjaWFsID0g
bnVsbHB0cjsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgY29udmVydFRyeVRvQ2F0Y2godW5z
aWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVmFyaWFibGUqIGV4Y2VwdGlvbikKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VHJ5KTsKKyAg
ICAgICAgICAgIGNvbnRyb2xCbG9ja1R5cGUgPSBCbG9ja1R5cGU6OkNhdGNoOworICAgICAgICAg
ICAgbV9jYXRjaEtpbmQgPSBDYXRjaEtpbmQ6OkNhdGNoOworICAgICAgICAgICAgbV90cnlFbmQg
PSB0cnlFbmRDYWxsU2l0ZUluZGV4OworICAgICAgICAgICAgbV9leGNlcHRpb24gPSBleGNlcHRp
b247CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNvbnZlcnRUcnlUb0NhdGNoQWxsKHVuc2ln
bmVkIHRyeUVuZENhbGxTaXRlSW5kZXgsIFZhcmlhYmxlKiBleGNlcHRpb24pCisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVChibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSk7CisgICAg
ICAgICAgICBjb250cm9sQmxvY2tUeXBlID0gQmxvY2tUeXBlOjpDYXRjaDsKKyAgICAgICAgICAg
IG1fY2F0Y2hLaW5kID0gQ2F0Y2hLaW5kOjpDYXRjaEFsbDsKKyAgICAgICAgICAgIG1fdHJ5RW5k
ID0gdHJ5RW5kQ2FsbFNpdGVJbmRleDsKKyAgICAgICAgICAgIG1fZXhjZXB0aW9uID0gZXhjZXB0
aW9uOworICAgICAgICB9CisKICAgICAgICAgU2lnbmF0dXJlQXJnQ291bnQgYnJhbmNoVGFyZ2V0
QXJpdHkoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpMb29wKQpAQCAtMTY5LDEzICsyMzMsNTEgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpOwogICAgICAgICB9CiAKKyAgICAg
ICAgdW5zaWduZWQgdHJ5U3RhcnQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBjb250cm9sQmxvY2tUeXBl
ID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fdHJ5U3RhcnQ7Cisg
ICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlFbmQoKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsK
KyAgICAgICAgICAgIHJldHVybiBtX3RyeUVuZDsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2ln
bmVkIHRyeURlcHRoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRy
b2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlwZSA9PSBCbG9j
a1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeURlcHRoOworICAgICAgICB9
CisKKyAgICAgICAgQ2F0Y2hLaW5kIGNhdGNoS2luZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAg
ICAgICAgICAgcmV0dXJuIG1fY2F0Y2hLaW5kOworICAgICAgICB9CisKKyAgICAgICAgVmFyaWFi
bGUqIGV4Y2VwdGlvbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250
cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1f
ZXhjZXB0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zdGFja1NpemU7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBCM0lSR2VuZXJhdG9yOwogICAgICAgICBCbG9ja1R5cGUgY29udHJvbEJsb2NrVHlw
ZTsKICAgICAgICAgQmxvY2tTaWduYXR1cmUgbV9zaWduYXR1cmU7CisgICAgICAgIHVuc2lnbmVk
IG1fc3RhY2tTaXplOwogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb247CiAgICAgICAg
IEJhc2ljQmxvY2sqIHNwZWNpYWw7Ci0gICAgICAgIFJlc3VsdExpc3QgcGhpczsKKyAgICAgICAg
VmVjdG9yPFZhbHVlKj4gcGhpczsKKyAgICAgICAgdW5zaWduZWQgbV90cnlTdGFydDsKKyAgICAg
ICAgdW5zaWduZWQgbV90cnlFbmQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5RGVwdGg7CisgICAg
ICAgIENhdGNoS2luZCBtX2NhdGNoS2luZDsKKyAgICAgICAgVmFyaWFibGUqIG1fZXhjZXB0aW9u
OwogICAgIH07CiAKICAgICB1c2luZyBDb250cm9sVHlwZSA9IENvbnRyb2xEYXRhOwpAQCAtMjcz
LDYgKzM3NSwxNiBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsK
IAorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRyeShCbG9ja1NpZ25h
dHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYg
bmV3U3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNo
KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRy
b2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3Qg
U2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGwoU3RhY2smLENvbnRyb2xUeXBlJik7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGxUb1VucmVhY2hh
YmxlKENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlw
ZSYsIENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkVGhyb3codW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4m
IGFyZ3MsIFN0YWNrJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
UmV0aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5cGUmKTsKKwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNr
JiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgU3Rh
Y2smIHJldHVyblZhbHVlcyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xE
YXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywgY29uc3QgU3RhY2sm
IGV4cHJlc3Npb25TdGFjayk7CkBAIC0yODYsMjAgKzM5OCwzNiBAQCBwdWJsaWM6CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRh
YmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3Ms
IFJlc3VsdExpc3QmIHJlc3VsdHMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZENhbGxSZWYoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYg
YXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBlbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lv
blR5cGUgY2FsbGVlQ29kZSwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgYXJncywgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBWYWx1ZSogY2FsbGVl
Q29kZSwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVz
dWx0TGlzdCYpOwogICAgIEIzOjpWYWx1ZSogY3JlYXRlQ2FsbFBhdGNocG9pbnQoQmFzaWNCbG9j
ayosIE9yaWdpbiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJn
cywgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoUGF0Y2hwb2ludFZhbHVlKik+JiBwYXRjaHBvaW50
RnVuY3Rvcik7CiAKICAgICB2b2lkIGR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiwgY29uc3QgU3Rh
Y2sqIGV4cHJlc3Npb25TdGFjayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8
QjNJUkdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKICAgICB2b2lk
IGRpZEZpbmlzaFBhcnNpbmdMb2NhbHMoKSB7IH0KLSAgICB2b2lkIGRpZFBvcFZhbHVlRnJvbVN0
YWNrKCkgeyB9CisgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsgLS1tX3N0YWNrU2l6
ZTsgfQogCiAgICAgVmFsdWUqIGNvbnN0YW50KEIzOjpUeXBlLCB1aW50NjRfdCBiaXRzLCBzdGQ6
Om9wdGlvbmFsPE9yaWdpbj4gPSBzdGQ6Om51bGxvcHQpOwogICAgIFZhbHVlKiBmcmFtZVBvaW50
ZXIoKTsKKyAgICB2b2lkIGluc2VydEVudHJ5U3dpdGNoKCk7CiAgICAgdm9pZCBpbnNlcnRDb25z
dGFudHMoKTsKIAogICAgIEIzOjpUeXBlIHRvQjNSZXN1bHRUeXBlKEJsb2NrU2lnbmF0dXJlKTsK
IAorICAgIHZvaWQgYWRkU3RhY2tNYXAodW5zaWduZWQgY2FsbFNpdGVJbmRleCwgU3RhY2tNYXAm
JiBzdGFja21hcCkKKyAgICB7CisgICAgICAgIG1fc3RhY2ttYXBzLmFkZChDYWxsU2l0ZUluZGV4
KGNhbGxTaXRlSW5kZXgpLCBXVEZNb3ZlKHN0YWNrbWFwKSk7CisgICAgfQorCisgICAgU3RhY2tN
YXBzJiYgdGFrZVN0YWNrbWFwcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX3N0
YWNrbWFwcyk7CisgICAgfQorCisgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgdGFr
ZUV4Y2VwdGlvbkhhbmRsZXJzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fZXhj
ZXB0aW9uSGFuZGxlcnMpOworICAgIH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGVtaXRFeGNlcHRp
b25DaGVjayhDQ2FsbEhlbHBlcnMmLCBFeGNlcHRpb25UeXBlKTsKIApAQCAtMzA3LDI5ICs0MzUs
MzQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVtaXRMb29wVGllclVwQ2hlY2sodWludDMyX3QgbG9v
cEluZGV4LCBjb25zdCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIGNvbnN0IFN0YWNrJiBuZXdTdGFj
ayk7CiAKICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXJGb3JKU1dyYXBwZXIoKTsKLSAgICBFeHBy
ZXNzaW9uVHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKKyAgICBWYWx1ZSogZW1p
dENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwg
dWludDMyX3Qgc2l6ZU9mT3ApOwogICAgIEIzOjpLaW5kIG1lbW9yeUtpbmQoQjM6Ok9wY29kZSBt
ZW1vcnlPcCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBFeHBy
ZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOwotICAgIHZvaWQgZW1pdFN0b3Jl
T3AoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZh
bHVlLCB1aW50MzJfdCBvZmZzZXQpOworICAgIFZhbHVlKiBlbWl0TG9hZE9wKExvYWRPcFR5cGUs
IFZhbHVlKiBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOworICAgIHZvaWQgZW1pdFN0b3JlT3Ao
U3RvcmVPcFR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSogdmFsdWUsIHVpbnQzMl90IG9mZnNl
dCk7CiAKLSAgICBFeHByZXNzaW9uVHlwZSBzYW5pdGl6ZUF0b21pY1Jlc3VsdChFeHRBdG9taWNP
cFR5cGUsIFR5cGUsIEV4cHJlc3Npb25UeXBlIHJlc3VsdCk7Ci0gICAgRXhwcmVzc2lvblR5cGUg
ZW1pdEF0b21pY0xvYWRPcChFeHRBdG9taWNPcFR5cGUsIFR5cGUsIEV4cHJlc3Npb25UeXBlIHBv
aW50ZXIsIHVpbnQzMl90IG9mZnNldCk7Ci0gICAgdm9pZCBlbWl0QXRvbWljU3RvcmVPcChFeHRB
dG9taWNPcFR5cGUsIFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBl
IHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwotICAgIEV4cHJlc3Npb25UeXBlIGVtaXRBdG9taWNC
aW5hcnlSTVdPcChFeHRBdG9taWNPcFR5cGUsIFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIs
IEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwotICAgIEV4cHJlc3Npb25U
eXBlIGVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2UoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBFeHBy
ZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSBleHBlY3RlZCwgRXhwcmVzc2lvblR5
cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisgICAgVmFsdWUqIHNhbml0aXplQXRvbWljUmVz
dWx0KEV4dEF0b21pY09wVHlwZSwgVHlwZSwgVmFsdWUqIHJlc3VsdCk7CisgICAgVmFsdWUqIGVt
aXRBdG9taWNMb2FkT3AoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1ZSogcG9pbnRlciwgdWlu
dDMyX3Qgb2Zmc2V0KTsKKyAgICB2b2lkIGVtaXRBdG9taWNTdG9yZU9wKEV4dEF0b21pY09wVHlw
ZSwgVHlwZSwgVmFsdWUqIHBvaW50ZXIsIFZhbHVlKiB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsK
KyAgICBWYWx1ZSogZW1pdEF0b21pY0JpbmFyeVJNV09wKEV4dEF0b21pY09wVHlwZSwgVHlwZSwg
VmFsdWUqIHBvaW50ZXIsIFZhbHVlKiB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBWYWx1
ZSogZW1pdEF0b21pY0NvbXBhcmVFeGNoYW5nZShFeHRBdG9taWNPcFR5cGUsIFR5cGUsIFZhbHVl
KiBwb2ludGVyLCBWYWx1ZSogZXhwZWN0ZWQsIFZhbHVlKiB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0
KTsKIAotICAgIHZvaWQgdW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUgcGhpLCBjb25zdCBFeHBy
ZXNzaW9uVHlwZSBzb3VyY2UpOwotICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3Qg
U3RhY2smIHJlc3VsdFN0YWNrLCBjb25zdCBSZXN1bHRMaXN0JiBzdGFjayk7CisgICAgdm9pZCB1
bmlmeShWYWx1ZSogcGhpLCBjb25zdCBFeHByZXNzaW9uVHlwZSBzb3VyY2UpOworICAgIHZvaWQg
dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgU3RhY2smIHJlc3VsdFN0YWNrLCBjb25zdCBDb250
cm9sRGF0YSYgYmxvY2spOwogCi0gICAgdm9pZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9w
Y29kZSwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQpOworICAgIHZv
aWQgZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUsIFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQpOwogCi0gICAgaW50MzJfdCBXQVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1
c09mZnNldChFeHByZXNzaW9uVHlwZSYsIHVpbnQzMl90KTsKLSAgICBFeHByZXNzaW9uVHlwZSBX
QVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhFeHRB
dG9taWNPcFR5cGUsIEV4cHJlc3Npb25UeXBlLCB1aW50MzJfdCk7CisgICAgaW50MzJfdCBXQVJO
X1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNldChWYWx1ZSomLCB1aW50MzJfdCk7
CisgICAgVmFsdWUqIFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9y
QXRvbWljT3BzKEV4dEF0b21pY09wVHlwZSwgVmFsdWUqLCB1aW50MzJfdCk7CiAKICAgICB2b2lk
IHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1
ZSopOwogICAgIGVudW0gY2xhc3MgUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgeyBObywgWWVzIH07
CiAgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3Rh
Y2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1ZSogaW5zdGFuY2UsIFByb2Nl
ZHVyZSYsIEJhc2ljQmxvY2sqKTsKIAorICAgIFZhbHVlKiBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIo
dW5zaWduZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBwb2ludGVyLCBCMzo6VHlwZSk7CisgICAg
dm9pZCBjb25uZWN0Q29udHJvbEVudHJ5KHVuc2lnbmVkJiBpbmRleEluQnVmZmVyLCBWYWx1ZSog
cG9pbnRlciwgQ29udHJvbERhdGEmIGRhdGEsIFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRy
b2xEYXRhJiBjdXJyZW50RGF0YSwgYm9vbCBmaWxsTG9vcFBoaXMgPSBmYWxzZSk7CisgICAgVmFs
dWUqIGVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5kLCBDb250cm9sVHlwZSYsIHVuc2lnbmVkIGV4Y2Vw
dGlvbkluZGV4ID0gMCk7CisgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBwcmVwYXJlUGF0
Y2hwb2ludEZvckV4Y2VwdGlvbnMoQmFzaWNCbG9jayosIFBhdGNocG9pbnRWYWx1ZSopOworCiAg
ICAgT3JpZ2luIG9yaWdpbigpOwogCiAgICAgdWludDMyX3Qgb3V0ZXJMb29wSW5kZXgoKSBjb25z
dApAQCAtMzM5LDYgKzQ3Miw2MiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXRlckxv
b3BzLmxhc3QoKTsKICAgICB9CiAKKyAgICBFeHByZXNzaW9uVHlwZSBwdXNoKFR5cGUgdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBwdXNoKHRvQjNUeXBlKHR5cGUpKTsKKyAgICB9CisKKyAg
ICBFeHByZXNzaW9uVHlwZSBwdXNoKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICArK21f
c3RhY2tTaXplOworICAgICAgICBpZiAobV9zdGFja1NpemUgPiBtX21heFN0YWNrU2l6ZSkgewor
ICAgICAgICAgICAgbV9tYXhTdGFja1NpemUgPSBtX3N0YWNrU2l6ZTsKKyAgICAgICAgICAgIFZh
cmlhYmxlKiB2YXIgPSBtX3Byb2MuYWRkVmFyaWFibGUodHlwZSk7CisgICAgICAgICAgICBtX3N0
YWNrLmFwcGVuZCh2YXIpOworICAgICAgICAgICAgcmV0dXJuIHZhcjsKKyAgICAgICAgfQorCisg
ICAgICAgIFZhcmlhYmxlKiB2YXIgPSBtX3N0YWNrW21fc3RhY2tTaXplIC0gMV07CisgICAgICAg
IGlmICh2YXItPnR5cGUoKSA9PSB0eXBlKQorICAgICAgICAgICAgcmV0dXJuIHZhcjsKKworICAg
ICAgICB2YXIgPSBtX3Byb2MuYWRkVmFyaWFibGUodHlwZSk7CisgICAgICAgIG1fc3RhY2tbbV9z
dGFja1NpemUgLSAxXSA9IHZhcjsKKyAgICAgICAgcmV0dXJuIHZhcjsKKyAgICB9CisKKyAgICBF
eHByZXNzaW9uVHlwZSBwdXNoKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZhcmlhYmxl
KiB2YXIgPSBwdXNoKHZhbHVlLT50eXBlKCkpOworICAgICAgICBzZXQodmFyLCB2YWx1ZSk7Cisg
ICAgICAgIHJldHVybiB2YXI7CisgICAgfQorCisgICAgVmFsdWUqIGdldChCYXNpY0Jsb2NrKiBi
bG9jaywgVmFyaWFibGUqIHZhcmlhYmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBvcmlnaW4oKSwgdmFyaWFi
bGUpOworICAgIH0KKworICAgIFZhbHVlKiBnZXQoVmFyaWFibGUqIHZhcmlhYmxlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdldChtX2N1cnJlbnRCbG9jaywgdmFyaWFibGUpOworICAgIH0KKwor
ICAgIFZhbHVlKiBzZXQoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxlKiBkc3QsIFZhbHVlKiBz
cmMpCisgICAgeworICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVl
PihtX3Byb2MsIEIzOjpTZXQsIG9yaWdpbigpLCBkc3QsIHNyYyk7CisgICAgfQorCisgICAgVmFs
dWUqIHNldChWYXJpYWJsZSogZHN0LCBWYWx1ZSogc3JjKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHNldChtX2N1cnJlbnRCbG9jaywgZHN0LCBzcmMpOworICAgIH0KKworICAgIFZhbHVlKiBzZXQo
VmFyaWFibGUqIGRzdCwgVmFyaWFibGUqIHNyYykKKyAgICB7CisgICAgICAgIHJldHVybiBzZXQo
ZHN0LCBnZXQoc3JjKSk7CisgICAgfQorCiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRv
cj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OwogICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBt
X2luZm87CiAgICAgY29uc3QgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZyB9OwpAQCAtMzQ4LDEwICs1MzcsMTIgQEAgcHJpdmF0ZToKICAgICBUaWVyVXBDb3Vu
dCogbV90aWVyVXAgeyBudWxscHRyIH07CiAKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKLSAgICBC
YXNpY0Jsb2NrKiBtX3Jvb3RCbG9jayB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IG1fcm9vdEJsb2NrczsKKyAgICBCYXNpY0Jsb2NrKiBtX3RvcExldmVsQmxvY2s7CiAgICAg
QmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAgVmVjdG9yPHVpbnQz
Ml90PiBtX291dGVyTG9vcHM7CiAgICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9sb2NhbHM7CisgICAg
VmVjdG9yPFZhcmlhYmxlKj4gbV9zdGFjazsKICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3QgZWFjaCBjYWxsIHNpdGUg
YW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVk
IHdpdGguCiAgICAgdW5zaWduZWQmIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKICAgICBI
YXNoTWFwPFZhbHVlS2V5LCBWYWx1ZSo+IG1fY29uc3RhbnRQb29sOwpAQCAtMzczLDEwICs1NjQs
MjYgQEAgcHJpdmF0ZToKIAogICAgIHVpbnQzMl90IG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzIHsg
MCB9OwogICAgIHVuc2lnbmVkIG1fbnVtSW1wb3J0RnVuY3Rpb25zOworCisgICAgQ2hlY2tlZDx1
bnNpZ25lZD4gbV90cnlEZXB0aCB7IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX2NhbGxT
aXRlSW5kZXggeyAwIH07CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9zdGFja1NpemUgeyAwIH07
CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9tYXhTdGFja1NpemUgeyAwIH07CisgICAgU3RhY2tN
YXBzIG1fc3RhY2ttYXBzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2Vw
dGlvbkhhbmRsZXJzOwogfTsKIAordm9pZCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpnZW5l
cmF0ZShDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zLCBCM0lSR2VuZXJhdG9yKiBnZW5lcmF0b3IpIGNvbnN0Cit7CisgICAgU3RhY2tN
YXAgdmFsdWVzOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2Zmc2V0OyBpIDwgcGFyYW1zLnZh
bHVlKCktPm51bUNoaWxkcmVuKCk7ICsraSkKKyAgICAgICAgdmFsdWVzLmNvbnN0cnVjdEFuZEFw
cGVuZChwYXJhbXNbaV0sIHBhcmFtcy52YWx1ZSgpLT5jaGlsZChpKS0+dHlwZSgpKTsKKyAgICBn
ZW5lcmF0b3ItPmFkZFN0YWNrTWFwKG1fY2FsbFNpdGVJbmRleCwgV1RGTW92ZSh2YWx1ZXMpKTsK
KyAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX2NhbGxTaXRlSW5k
ZXgpLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpOworfQorCiAvLyBNZW1vcnkgYWNjZXNzZXMgaW4gV2ViQXNzZW1ibHkgaGF2
ZSB1bnNpZ25lZCAzMi1iaXQgb2Zmc2V0cywgd2hlcmVhcyB0aGV5IGhhdmUgc2lnbmVkIDMyLWJp
dCBvZmZzZXRzIGluIEIzLgotaW50MzJfdCBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVz
T2Zmc2V0KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVpbnQzMl90IG9mZnNldCkKK2ludDMyX3QgQjNJ
UkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChWYWx1ZSomIHB0ciwgdWludDMyX3Qg
b2Zmc2V0KQogewogICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSA+IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpIHsK
ICAgICAgICAgcHRyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBB
ZGQsIG9yaWdpbigpLCBwdHIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpKTsKQEAgLTQyOCw4ICs2MzUsOSBAQCBCM0lSR2Vu
ZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9j
ZWR1cmUmIHByb2NlZHVyZQogICAgICwgbV9jb25zdGFudEluc2VydGlvblZhbHVlcyhtX3Byb2Mp
CiAgICAgLCBtX251bUltcG9ydEZ1bmN0aW9ucyhpbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkK
IHsKLSAgICBtX3Jvb3RCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAgIG1fY3VycmVudEJs
b2NrID0gbV9yb290QmxvY2s7CisgICAgbV90b3BMZXZlbEJsb2NrID0gbV9wcm9jLmFkZEJsb2Nr
KCk7CisgICAgbV9yb290QmxvY2tzLmFwcGVuZChtX3Byb2MuYWRkQmxvY2soKSk7CisgICAgbV9j
dXJyZW50QmxvY2sgPSBtX3Jvb3RCbG9ja3NbMF07CiAKICAgICAvLyBGSVhNRSB3ZSBkb24ndCBy
ZWFsbHkgbmVlZCB0byBwaW4gcmVnaXN0ZXJzIGhlcmUgaWYgdGhlcmUncyBubyBtZW1vcnkuIEl0
IG1ha2VzIHdhc20gLT4gd2FzbSB0aHVua3Mgc2ltcGxlciBmb3Igbm93LiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NjIzCiAgICAgY29uc3QgUGlubmVkUmVnaXN0
ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKQEAgLTQ2MSw2
ICs2NjksMjYgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgfSk7CiAgICAgfQog
CisgICAgeworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBnZXRJbnN0YW5jZSA9IG1fdG9w
TGV2ZWxCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgcG9pbnRl
clR5cGUoKSwgT3JpZ2luKCkpOworICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQor
ICAgICAgICAgICAgZ2V0SW5zdGFuY2UtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRj
aFJlZ2lzdGVycygpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQmVj
YXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3Rl
ciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBj
YWxsZXIgc2lkZS4KKyAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBB
cmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIu
CisgICAgICAgICAgICBnZXRJbnN0YW5jZS0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGdldEluc3RhbmNlLT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGdldEluc3RhbmNlLT5yZXN1bHRDb25zdHJhaW50cyA9IHsgVmFsdWVSZXA6OnJl
ZyhtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpIH07CisgICAgICAgIH0KKyAgICAgICAgZ2V0SW5z
dGFuY2UtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIGlmIChDb250ZXh0
Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OmxvYWRXYXNtQ29udGV4
dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBq
aXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UocGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IGdldEluc3RhbmNlOwor
ICAgIH0KKwogICAgIHsKICAgICAgICAgYXV0byogY2FsbGVlTW92ZUxvY2F0aW9uID0gJmNvbXBp
bGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb247CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSA8IFdhc21DYWxsaW5nQ29udmVu
dGlvbjo6aGVhZGVyU2l6ZUluQnl0ZXMsICJXZSByZWx5IG9uIHRoaXMgaGVyZSBmb3Igbm93LiIp
OwpAQCAtNDk0LDE3ICs3MjIsMTAgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICB9CiAK
ICAgICB7Ci0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHN0YWNrT3ZlcmZsb3dDaGVjayA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBw
b2ludGVyVHlwZSgpLCBPcmlnaW4oKSk7Ci0gICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IHN0YWNr
T3ZlcmZsb3dDaGVjazsKKyAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogc3RhY2tPdmVyZmxv
d0NoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIFZvaWQsIE9yaWdpbigpKTsKKyAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5hcHBl
bmRTb21lUmVnaXN0ZXIoaW5zdGFuY2VWYWx1ZSgpKTsKICAgICAgICAgc3RhY2tPdmVyZmxvd0No
ZWNrLT5hcHBlbmRTb21lUmVnaXN0ZXIoZnJhbWVQb2ludGVyKCkpOwogICAgICAgICBzdGFja092
ZXJmbG93Q2hlY2stPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygp
KTsKLSAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dEluc3Rh
bmNlIHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUg
aXQgaW4gdGhlIGNhbGxlciBzaWRlLgotICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB1cyBm
cm9tIHVzaW5nIEFyZ3VtZW50UmVnIHRvIHRoaXMgKGxvZ2ljYWxseSkgaW1tdXRhYmxlIHBpbm5l
ZCByZWdpc3Rlci4KLSAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+ZWZmZWN0cy53cml0
ZXNQaW5uZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+ZWZmZWN0
cy5yZWFkc1Bpbm5lZCA9IHRydWU7Ci0gICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPnJl
c3VsdENvbnN0cmFpbnRzID0geyBWYWx1ZVJlcDo6cmVnKG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQ
UikgfTsKLSAgICAgICAgfQogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPm51bUdQU2NyYXRj
aFJlZ2lzdGVycyA9IDI7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgewogICAgICAgICAgICAgY29uc3QgQ2hlY2tlZDxpbnQzMl90PiB3YXNtRnJh
bWVTaXplID0gcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKTsKQEAgLTUyNiwxOSArNzQ3LDE1IEBA
IEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGlu
Zm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICBib29sIG5lZWRVbmRlcmZsb3dD
aGVjayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGVja1NpemUpID4gT3B0aW9uczo6cmVzZXJ2
ZWRab25lU2l6ZSgpOwogICAgICAgICAgICAgYm9vbCBuZWVkc092ZXJmbG93Q2hlY2sgPSBtX21h
a2VzQ2FsbHMgfHwgd2FzbUZyYW1lU2l6ZSA+PSBzdGF0aWNfY2FzdDxpbnQzMl90PihtaW5pbXVt
UGFyZW50Q2hlY2tTaXplKSB8fCBuZWVkVW5kZXJmbG93Q2hlY2s7CiAKLSAgICAgICAgICAgIEdQ
UlJlZyBjb250ZXh0SW5zdGFuY2UgPSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyBwYXJhbXNbMF0u
Z3ByKCkgOiBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7Ci0KICAgICAgICAgICAgIC8vIFRoaXMg
YWxsb3dzIGxlYWYgZnVuY3Rpb25zIHRvIG5vdCBkbyBzdGFjayBjaGVja3MgaWYgdGhlaXIgZnJh
bWUgc2l6ZSBpcyB3aXRoaW4KICAgICAgICAgICAgIC8vIGNlcnRhaW4gbGltaXRzIHNpbmNlIHRo
ZWlyIGNhbGxlciB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGUgY2hlY2suCiAgICAgICAgICAg
ICBpZiAobmVlZHNPdmVyZmxvd0NoZWNrKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIEdQ
UlJlZyBjb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMF0uZ3ByKCk7CiAgICAgICAgICAgICAgICAg
R1BSUmVnIGZwID0gcGFyYW1zWzFdLmdwcigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKIAotICAgICAgICAgICAgICAgIGlmIChDb250ZXh0
Ojp1c2VGYXN0VExTKCkpCi0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJ
bnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOwotCiAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9m
Q2FjaGVkU3RhY2tMaW1pdCgpKSwgc2NyYXRjaDIpOwogICAgICAgICAgICAgICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNoZWNrU2l6ZSksIGZwLCBzY3JhdGNoMSk7
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG92ZXJmbG93OwpAQCAt
NTQ4LDEyICs3NjUsNiBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbb3ZlcmZsb3ddIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29kZUxvY2F0aW9u
TGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd1N0YWNr
T3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiBDb250
ZXh0Ojp1c2VGYXN0VExTKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBObyBvdmVyZmxvdyBjaGVj
ayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRvIGJlIGNv
cnJlY3QuCi0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYg
YWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5l
ZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWRXYXNt
Q29udGV4dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIC8vIFdlIHNhaWQgd2UnZCByZXR1cm4gYSBwb2ludGVyLiBXZSBkb24n
dCBhY3R1YWxseSBuZWVkIHRvIGJlY2F1c2UgaXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBwYXRjaHBv
aW50IGNvbnNlcnZhdGl2ZWx5IHNhaWQgaXQgaGFkIGVmZmVjdHMgKHBvdGVudGlhbCBzdGFjayBj
aGVjaykgd2hpY2ggcHJldmVudCBpdCBmcm9tIGdldHRpbmcgcmVtb3ZlZC4KICAgICAgICAgICAg
IH0KICAgICAgICAgfSk7CiAgICAgfQpAQCAtNjM0LDYgKzg0NSw1OCBAQCBWYWx1ZSogQjNJUkdl
bmVyYXRvcjo6ZnJhbWVQb2ludGVyKCkKICAgICByZXR1cm4gbV9mcmFtZVBvaW50ZXI7CiB9CiAK
K3ZvaWQgQjNJUkdlbmVyYXRvcjo6aW5zZXJ0RW50cnlTd2l0Y2goKQoreworICAgIG1fcHJvYy5z
ZXROdW1FbnRyeXBvaW50cyhtX3Jvb3RCbG9ja3Muc2l6ZSgpKTsKKworICAgIFJlZjxCMzo6QWly
OjpQcm9sb2d1ZUdlbmVyYXRvcj4gY2F0Y2hQcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJl
ZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oW10gKENDYWxsSGVscGVy
cyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICBqaXQuZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0g
aml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1l
bnQpKTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIE1hcmtlZEJs
b2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1w
KCk7CisKKyAgICAgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Qw
LCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRP
ZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgR1BSSW5mbzo6cmVnVDAp
OworCisgICAgICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0KKyAgICAg
ICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDMpOworCisgICAgICAgIGppdC5sb2FkNjQo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9yV2FzbUNh
dGNoT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgICAgIGppdC5zdG9yZVB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMCwgVk06OmNhbGxlZUZvcldhc21DYXRjaE9mZnNldCgpKSk7CisgICAgICAg
IGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDMsIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSk7CisKKyAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVn
VDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CisKKyAgICAgICAgaml0LnByb2Jl
KFtdKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKKyAgICAgICAgICAgIENhbGxTaXRl
SW5kZXggY2FsbFNpdGVJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpOworICAgICAg
ICAgICAgT3B0aW1pemluZ0pJVENhbGxlZSogY2FsbGVlID0gYml0d2lzZV9jYXN0PE9wdGltaXpp
bmdKSVRDYWxsZWUqPihjYWxsRnJhbWUtPmNhbGxlZSgpLmFzV2FzbUNhbGxlZSgpKTsKKyAgICAg
ICAgICAgIGNvbnN0IFN0YWNrTWFwJiBzdGFja21hcCA9IGNhbGxlZS0+c3RhY2ttYXAoY2FsbFNp
dGVJbmRleCk7CisgICAgICAgICAgICBWTSogdm0gPSBjb250ZXh0LmdwcjxWTSo+KEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgICAgIHVpbnQ2NF90KiBidWZmZXIgPSB2bS0+d2FzbUNvbnRleHQu
c2NyYXRjaEJ1ZmZlckZvclNpemUoc3RhY2ttYXAuc2l6ZSgpICogOCk7CisgICAgICAgICAgICBs
b2FkVmFsdWVzSW50b0J1ZmZlcihjb250ZXh0LCBzdGFja21hcCwgYnVmZmVyKTsKKworICAgICAg
ICAgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGJ1ZmZlcik7CisgICAgICAgIH0sIG51bGxwdHIpOworCisgICAgICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgfSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fcm9vdEJsb2Nrcy5z
aXplKCk7ICsraSkgeworICAgICAgICBtX3Byb2MuY29kZSgpLnNldFByb2xvZ3VlRm9yRW50cnlw
b2ludChpLCBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yLmNvcHlSZWYoKSk7CisgICAgfQorCisgICAg
bV9jdXJyZW50QmxvY2sgPSBtX3RvcExldmVsQmxvY2s7CisgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFbnRyeVN3aXRjaCwgT3JpZ2luKCkpOworICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3Jvb3RCbG9ja3MpCisgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmRTdWNjZXNzb3IoRnJlcXVlbnRlZEJsb2NrKGJsb2NrKSk7Cit9CisKIHZvaWQgQjNJ
UkdlbmVyYXRvcjo6aW5zZXJ0Q29uc3RhbnRzKCkKIHsKICAgICBtX2NvbnN0YW50SW5zZXJ0aW9u
VmFsdWVzLmV4ZWN1dGUobV9wcm9jLmF0KDApKTsKQEAgLTcwNSwyMCArOTY4LDIxIEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAt
PiBQYXJ0aWFsUmVzdWx0CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJl
c3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBCMzo6RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgQjM6OkVxdWFsLCBvcmlnaW4oKSwgZ2V0KHZhbHVlKSwgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIC8vIEZJWE1FOiBF
bWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk4NTA2Pi4KLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFs
dWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkV4dGVybnJlZiksIG9yaWdpbigpLAorICAgIFZh
bHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4o
bV9wcm9jLCB0b0IzVHlwZShUeXBlczo6RXh0ZXJucmVmKSwgb3JpZ2luKCksCiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
dGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0V2FzbVRhYmxlRWxlbWVu
dCkpLAotICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgaW5kZXgpOworICAg
ICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZ2V0KGluZGV4KSk7CiAKICAgICB7
CisgICAgICAgIHJlc3VsdCA9IHB1c2gocmVzdWx0VmFsdWUpOwogICAgICAgICBDaGVja1ZhbHVl
KiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBD
aGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigp
LCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
ewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlw
ZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC03MzMsNyArOTk3LDcgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRUYWJsZVNldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlw
ZSBpbmRleCwgRXhwcmUKICAgICAvLyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODUwNj4uCiAgICAgYXV0byBzaG91bGRU
aHJvdyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBCMzo6
SW50MzIsIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvblNldFdhc21UYWJsZUVsZW1lbnQpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgp
LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgdGFibGVJbmRleCksIGluZGV4LCB2YWx1ZSk7CisgICAgICAgIGluc3RhbmNlVmFsdWUoKSwg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHRhYmxlSW5kZXgpLCBnZXQoaW5kZXgpLCBnZXQodmFsdWUpKTsKIAogICAgIHsKICAgICAgICAg
Q2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+
KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLApAQCAtNzUxLDI2ICsxMDE1LDI2IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkUmVmRnVuYyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhCiB7CiAgICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxpbmUgPGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1MDY+LgogCi0gICAgcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEIzOjpJbnQ2
NCwgb3JpZ2luKCksCisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KG1fcHJvYywgQjM6OkludDY0LCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdD
RnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmVmRnVuYykpLAotICAgICAg
ICBpbnN0YW5jZVZhbHVlKCksIGFkZENvbnN0YW50KFR5cGVzOjpJMzIsIGluZGV4KSk7CisgICAg
ICAgIGluc3RhbmNlVmFsdWUoKSwgY29uc3RhbnQodG9CM1R5cGUoVHlwZXM6OkkzMiksIGluZGV4
KSkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJs
ZUluaXQodW5zaWduZWQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNz
aW9uVHlwZSBkc3RPZmZzZXQsIEV4cHJlc3Npb25UeXBlIHNyY09mZnNldCwgRXhwcmVzc2lvblR5
cGUgbGVuZ3RoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIG1fcHJvYywg
dG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxP
cGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UYWJsZUluaXQpKSwKICAgICAgICAgaW5zdGFu
Y2VWYWx1ZSgpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgZWxlbWVudEluZGV4KSwKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgp
LAotICAgICAgICBkc3RPZmZzZXQsIHNyY09mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgZ2V0KGRz
dE9mZnNldCksIGdldChzcmNPZmZzZXQpLCBnZXQobGVuZ3RoKSk7CiAKICAgICB7CiAgICAgICAg
IENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVl
PihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOwor
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVh
bCwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBF
eGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTc5NCwzMSArMTA1OCwz
MSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVsZW1Ecm9wKHVuc2lnbmVkIGVsZW1lbnRJbmRl
eCkgLT4gUGFydGlhbFJlc3VsdAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZVNpemUodW5z
aWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9y
aWdpbigpLAorICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2Fs
bFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRXYXNtVGFibGVTaXpl
KSksCi0gICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpKTsKKyAgICAgICAgaW5z
dGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgdGFibGVJbmRleCkpKTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJl
c3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4o
KSwKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1
ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFn
Q0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVRhYmxlR3JvdykpLAotICAg
ICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZmlsbCwgZGVsdGEpOworICAgICAg
ICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZ2V0KGZpbGwpLCBnZXQoZGVsdGEpKSk7
CiAKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlRmls
bCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBvZmZzZXQsIEV4cHJlc3Npb25U
eXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAg
YXV0byByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJv
YywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAorICAgIFZhbHVlKiByZXN1bHRWYWx1
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlw
ZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlv
blB0clRhZz4ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCkpLAotICAgICAgICBpbnN0YW5jZVZhbHVl
KCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCB0YWJsZUluZGV4KSwgb2Zmc2V0LCBmaWxsLCBjb3VudCk7CisgICAgICAgIGluc3RhbmNl
VmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIHRhYmxlSW5kZXgpLCBnZXQob2Zmc2V0KSwgZ2V0KGZpbGwpLCBnZXQoY291bnQp
KTsKIAogICAgIHsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2lu
KCksIHJlc3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOwogCiAg
ICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRF
eGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVGFibGVBY2Nlc3Mp
OwpAQCAtODMwLDE3ICsxMDk0LDE3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxs
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhwCiAKIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkVGFibGVDb3B5KHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2ln
bmVkIHNyY1RhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGRzdE9mZnNldCwgRXhwcmVzc2lvblR5
cGUgc3JjT2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBsZW5ndGgpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
LSAgICBhdXRvIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4o
CisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2Fs
bFZhbHVlPigKICAgICAgICAgbV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCks
CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVRh
YmxlQ29weSkpLAogICAgICAgICBpbnN0YW5jZVZhbHVlKCksCiAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBkc3RUYWJsZUlu
ZGV4KSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIHNyY1RhYmxlSW5kZXgpLAotICAgICAgICBkc3RPZmZzZXQsIHNyY09m
ZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgZ2V0KGRzdE9mZnNldCksIGdldChzcmNPZmZzZXQpLCBn
ZXQobGVuZ3RoKSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwK
LSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1
YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
MCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0
aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1Rh
YmxlQWNjZXNzKTsKQEAgLTg1Myw3ICsxMTE3LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRU
YWJsZUNvcHkodW5zaWduZWQgZHN0VGFibGVJbmRleCwgdW5zaWduZWQgc3JjVGFibGVJbmRleCwK
IGF1dG8gQjNJUkdlbmVyYXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV9sb2NhbHNbaW5k
ZXhdKTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFs
dWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSk7CisgICAgcmVz
dWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJv
YywgQjM6OkdldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSkpOwogICAgIHJldHVybiB7IH07
CiB9CiAKQEAgLTg2Nyw3ICsxMTMxLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRVbnJlYWNo
YWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJH
ZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBFeHByZXNz
aW9uVHlwZSBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3Vs
dAorYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0
YW5jZSwgVmFsdWUqIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgLy8gRG8gYSBjb250ZXh0IHN3aXRjaCBpZiBuZWVkZWQuCiAgICAgewpA
QCAtOTE2LDcgKzExODAsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwo
VmFsdWUqIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZQogICAgIH0KIAogICAg
IEIzOjpUeXBlIHJldHVyblR5cGUgPSB0b0IzUmVzdWx0VHlwZSgmc2lnbmF0dXJlKTsKLSAgICBF
eHByZXNzaW9uVHlwZSBjYWxsUmVzdWx0ID0gY3JlYXRlQ2FsbFBhdGNocG9pbnQobV9jdXJyZW50
QmxvY2ssIG9yaWdpbigpLCBzaWduYXR1cmUsIGFyZ3MsCisgICAgVmFsdWUqIGNhbGxSZXN1bHQg
PSBjcmVhdGVDYWxsUGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIHNpZ25hdHVy
ZSwgYXJncywKICAgICAgICAgc2NvcGVkTGFtYmRhUmVmPHZvaWQoUGF0Y2hwb2ludFZhbHVlKik+
KFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSAtPiB2b2lkIHsKICAgICAgICAgICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwpAQCAtOTI4LDggKzExOTIsMTAg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0
YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGUKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2Ji
ZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5k
c0NoZWNraW5nKSk7CiAKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVDb2Rl
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIFBhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKG1fY3VycmVu
dEJsb2NrLCBwYXRjaHBvaW50KTsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgaGFuZGxlLmdlbmVyYXRl
KGppdCwgcGFyYW1zLCB0aGlzKTsKICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcGFy
YW1zLnByb2MoKS5yZXN1bHRDb3VudChyZXR1cm5UeXBlKV0uZ3ByKCksIFdhc21FbnRyeVB0clRh
Zyk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSkpOwpAQCAtOTQxLDExICsxMjA3LDExIEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFu
Y2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlCiAgICAgY2FzZSBCMzo6VHVwbGU6IHsKICAgICAgICAg
Y29uc3QgVmVjdG9yPEIzOjpUeXBlPiYgdHVwbGUgPSBtX3Byb2MudHVwbGVGb3JUeXBlKHJldHVy
blR5cGUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJldHVy
bkNvdW50KCk7ICsraSkKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0dXBsZVtpXSwgY2Fs
bFJlc3VsdCwgaSkpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaChtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHVwbGVbaV0s
IGNhbGxSZXN1bHQsIGkpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OiB7
Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKGNhbGxSZXN1bHQpOworICAgICAgICByZXN1bHRzLmFw
cGVuZChwdXNoKGNhbGxSZXN1bHQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KQEAg
LTk1OCw5ICsxMjI0LDkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZh
bHVlKiBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGUKIAogYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKKyAgICBy
ZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9j
LCBJbnQzMiwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uR3Jvd01lbW9yeSkpLAotICAgICAgICBmcmFtZVBvaW50ZXIoKSwgaW5zdGFu
Y2VWYWx1ZSgpLCBkZWx0YSk7CisgICAgICAgIGZyYW1lUG9pbnRlcigpLCBpbnN0YW5jZVZhbHVl
KCksIGdldChkZWx0YSkpKTsKIAogICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJl
c3RvcmVDYWNoZWRTdGFja0xpbWl0OjpObywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgp
LCBtX3Byb2MsIG1fY3VycmVudEJsb2NrKTsKIApAQCAtOTgwLDIyICsxMjQ2LDIyIEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgVmFsdWUqIG51bVBhZ2VzID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaU2hyLCBvcmlnaW4oKSwKICAgICAgICAgc2l6ZSwgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHNo
aWZ0VmFsdWUpKTsKIAotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbigpLCBudW1QYWdlcyk7CisgICAgcmVzdWx0ID0gcHVz
aChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4o
KSwgbnVtUGFnZXMpKTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkTWVtb3J5RmlsbChFeHByZXNzaW9uVHlwZSBkc3RBZGRyZXNzLCBFeHByZXNzaW9uVHlw
ZSB0YXJnZXRWYWx1ZSwgRXhwcmVzc2lvblR5cGUgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
LSAgICBhdXRvIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4o
CisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2Fs
bFZhbHVlPigKICAgICAgICAgbV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCks
CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbU1l
bW9yeUZpbGwpKSwKICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLAotICAgICAgICBkc3RBZGRyZXNz
LCB0YXJnZXRWYWx1ZSwgY291bnQpOworICAgICAgICBnZXQoZHN0QWRkcmVzcyksIGdldCh0YXJn
ZXRWYWx1ZSksIGdldChjb3VudCkpOwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVj
ayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywg
b3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1
bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAg
ICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0
T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC0xMDA3LDE2ICsxMjczLDE2IEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkTWVtb3J5RmlsbChFeHByZXNzaW9uVHlwZSBkc3RBZGRyZXNzLCBFeHByZXNz
aW9uVHlwZSB0YXJnCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5SW5pdCh1bnNpZ25l
ZCBkYXRhU2VnbWVudEluZGV4LCBFeHByZXNzaW9uVHlwZSBkc3RBZGRyZXNzLCBFeHByZXNzaW9u
VHlwZSBzcmNBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSBsZW5ndGgpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1
ZT4oCisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
Q2FsbFZhbHVlPigKICAgICAgICAgbV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2lu
KCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2Fz
bU1lbW9yeUluaXQpKSwKICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLAogICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZGF0YVNl
Z21lbnRJbmRleCksCi0gICAgICAgIGRzdEFkZHJlc3MsIHNyY0FkZHJlc3MsIGxlbmd0aCk7Cisg
ICAgICAgIGdldChkc3RBZGRyZXNzKSwgZ2V0KHNyY0FkZHJlc3MpLCBnZXQobGVuZ3RoKSk7CiAK
ICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBy
ZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAg
ICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0
aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAg
LTEwMjgsMTUgKzEyOTQsMTUgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlJbml0KHVu
c2lnbmVkIGRhdGFTZWdtZW50SW5kZXgsIEV4cHJlc3Npb25UeXBlIGRzdEEKIAogYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRNZW1vcnlDb3B5KEV4cHJlc3Npb25UeXBlIGRzdEFkZHJlc3MsIEV4cHJl
c3Npb25UeXBlIHNyY0FkZHJlc3MsIEV4cHJlc3Npb25UeXBlIGNvdW50KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxs
VmFsdWU+KAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9y
aWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bldhc21NZW1vcnlDb3B5KSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwKLSAgICAgICAgZHN0
QWRkcmVzcywgc3JjQWRkcmVzcywgY291bnQpOworICAgICAgICBnZXQoZHN0QWRkcmVzcyksIGdl
dChzcmNBZGRyZXNzKSwgZ2V0KGNvdW50KSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUq
IGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENo
ZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCks
IHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBl
OjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTEwNjAsNyArMTMyNiw3IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkRGF0YURyb3AodW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCkgLT4gUGFy
dGlhbFJlc3VsdAogYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV9s
b2NhbHNbaW5kZXhdKTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFs
dWU+KG1fcHJvYywgQjM6OlNldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSwgdmFsdWUpOwor
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6
U2V0LCBvcmlnaW4oKSwgbV9sb2NhbHNbaW5kZXhdLCBnZXQodmFsdWUpKTsKICAgICByZXR1cm4g
eyB9OwogfQogCkBAIC0xMDcwLDEyICsxMzM2LDEyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6Z2V0
R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
CiAgICAgVmFsdWUqIGdsb2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNl
VmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSk7
CiAgICAgc3dpdGNoIChnbG9iYWwuYmluZGluZ01vZGUpIHsKICAgICBjYXNlIFdhc206Okdsb2Jh
bEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6RW1iZWRkZWRJbkluc3RhbmNlOgotICAgICAgICBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHRvQjNUeXBlKGdsb2JhbC50eXBlKSwgb3JpZ2luKCksIGdsb2JhbHNBcnJheSwgc2FmZUNh
c3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHJlc3VsdCA9
IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCB0b0IzVHlwZShnbG9iYWwudHlwZSksIG9yaWdpbigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0
PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOiB7
CiAgICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1h
dGlvbjo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAgIFZhbHVlKiBwb2ludGVyID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBCMzo6SW50
NjQsIG9yaWdpbigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKGdsb2JhbC50eXBlKSwgb3Jp
Z2luKCksIHBvaW50ZXIpOworICAgICAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUoZ2xvYmFsLnR5cGUp
LCBvcmlnaW4oKSwgcG9pbnRlcikpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQpAQCAt
MTA4OSwxNCArMTM1NSwxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZQogICAgIFZhbHVlKiBn
bG9iYWxzQXJyYXkgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVD
YXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSkpOwogICAgIHN3aXRjaCAo
Z2xvYmFsLmJpbmRpbmdNb2RlKSB7CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6
QmluZGluZ01vZGU6OkVtYmVkZGVkSW5JbnN0YW5jZToKLSAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIHZhbHVlLCBn
bG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkp
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IFN0b3JlLCBvcmlnaW4oKSwgZ2V0KHZhbHVlKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQz
Ml90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAgICAgaWYgKGlzUmVmVHlwZShn
bG9iYWwudHlwZSkpCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyRm9ySlNXcmFwcGVyKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRp
bmdNb2RlOjpQb3J0YWJsZTogewogICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0g
V2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpOwogICAgICAgICBW
YWx1ZSogcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgQjM6OkludDY0LCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxp
bnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIHZhbHVl
LCBwb2ludGVyKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIGdldCh2YWx1ZSksIHBvaW50ZXIpOwogICAgICAg
ICAvLyBXZSBlbWl0IGEgd3JpdGUtYmFycmllciBvbnRvIEpTV2ViQXNzZW1ibHlHbG9iYWwsIG5v
dCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UuCiAgICAgICAgIGlmIChpc1JlZlR5cGUoZ2xvYmFsLnR5
cGUpKSB7CiAgICAgICAgICAgICBWYWx1ZSogaW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigp
LCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZk93
bmVyKCkpKTsKQEAgLTExOTksNyArMTQ2NSw3IEBAIGlubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6
OmVtaXRXcml0ZUJhcnJpZXJGb3JKU1dyYXBwZXIoKQogICAgIG1fY3VycmVudEJsb2NrID0gY29u
dGludWF0aW9uOwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0Fu
ZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwg
dWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQoraW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpl
bWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihWYWx1ZSogcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0
LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQ
Uik7CiAKQEAgLTEyNjgsNyArMTUzNCw3IEBAIGlubGluZSBCMzo6S2luZCBCM0lSR2VuZXJhdG9y
OjptZW1vcnlLaW5kKEIzOjpPcGNvZGUgbWVtb3J5T3ApCiAgICAgcmV0dXJuIG1lbW9yeU9wOwog
fQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBv
cCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK2lubGluZSBWYWx1
ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBWYWx1ZSogcG9pbnRl
ciwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBpbnQzMl90IG9mZnNldCA9IGZpeHVwUG9pbnRl
clBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CiAKQEAgLTEzMzgsOCArMTYwNCw5IEBAIGlu
bGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBFeHBy
ZXNzaW9uVHlwZSBwb2ludGVyLCB1CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25U
eXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4
cHJlc3Npb25UeXBlIHBvaW50ZXJWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90
IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBwb2ludGVyID0gZ2V0KHBv
aW50ZXJWYXIpOwogICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIpOwogCiAgICAg
aWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXplT2ZMb2FkT3Ao
b3ApKSkpIHsKQEAgLTEzNTYsNyArMTYyMyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6bG9hZChM
b2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYKICAg
ICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOgogICAgICAgICBjYXNlIExvYWRPcFR5cGU6
OkkzMkxvYWQxNlU6CiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOgotICAgICAg
ICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50MzIsIDApOworICAgICAgICAgICAgcmVzdWx0ID0g
cHVzaChjb25zdGFudChJbnQzMiwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDhTOgogICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExv
YWQ4VToKQEAgLTEzNjUsMTggKzE2MzIsMTggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExv
YWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJgogICAg
ICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6CiAgICAgICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STY0TG9hZDoKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgotICAgICAg
ICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50NjQsIDApOworICAgICAgICAgICAgcmVzdWx0ID0g
cHVzaChjb25zdGFudChJbnQ2NCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEZs
b2F0LCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoRmxvYXQsIDApKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6Ci0g
ICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChEb3VibGUsIDApOworICAgICAgICAgICAgcmVz
dWx0ID0gcHVzaChjb25zdGFudChEb3VibGUsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZW1pdExvYWRPcChvcCwgZW1p
dENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3Ap
KSwgb2Zmc2V0KTsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChlbWl0TG9hZE9wKG9wLCBlbWl0Q2hl
Y2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkxvYWRPcChvcCkpLCBv
ZmZzZXQpKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xNDAyLDcgKzE2NjksNyBAQCBpbmxp
bmUgdWludDMyX3Qgc2l6ZU9mU3RvcmVPcChTdG9yZU9wVHlwZSBvcCkKIH0KIAogCi1pbmxpbmUg
dm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCitp
bmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgVmFs
dWUqIHBvaW50ZXIsIFZhbHVlKiB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBpbnQz
Ml90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CiAK
QEAgLTE0MzcsOCArMTcwNCwxMCBAQCBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3Rv
cmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRQogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6c3RvcmUo
U3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZh
bHVlLCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRv
cjo6c3RvcmUoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXJWYXIsIEV4cHJl
c3Npb25UeXBlIHZhbHVlVmFyLCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
KyAgICBWYWx1ZSogcG9pbnRlciA9IGdldChwb2ludGVyVmFyKTsKKyAgICBWYWx1ZSogdmFsdWUg
PSBnZXQodmFsdWVWYXIpOwogICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIpOwog
CiAgICAgaWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXplT2ZT
dG9yZU9wKG9wKSkpKSB7CkBAIC0xNDY0LDkgKzE3MzMsOSBAQCBpbmxpbmUgdWludDMyX3Qgc2l6
ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3MoRXh0QXRvbWljT3BUeXBlIG9wKQogICAgIHJldHVybiBi
eXRlc0ZvcldpZHRoKGFjY2Vzc1dpZHRoKG9wKSk7CiB9CiAKLWlubGluZSBWYWx1ZSogQjNJUkdl
bmVyYXRvcjo6c2FuaXRpemVBdG9taWNSZXN1bHQoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZh
bHVlVHlwZSwgRXhwcmVzc2lvblR5cGUgcmVzdWx0KQoraW5saW5lIFZhbHVlKiBCM0lSR2VuZXJh
dG9yOjpzYW5pdGl6ZUF0b21pY1Jlc3VsdChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVU
eXBlLCBWYWx1ZSogcmVzdWx0KQogewotICAgIGF1dG8gc2FuaXRpemUzMiA9IFsmXShFeHByZXNz
aW9uVHlwZSByZXN1bHQpIHsKKyAgICBhdXRvIHNhbml0aXplMzIgPSBbJl0oVmFsdWUqIHJlc3Vs
dCkgewogICAgICAgICBzd2l0Y2ggKGFjY2Vzc1dpZHRoKG9wKSkgewogICAgICAgICBjYXNlIEIz
OjpXaWR0aDg6CiAgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLCByZXN1bHQsIGNvbnN0YW50KEludDMyLCAw
eGZmKSk7CkBAIC0xNDkxLDcgKzE3NjAsNyBAQCBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6
OnNhbml0aXplQXRvbWljUmVzdWx0KEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZQogICAg
IH0KIH0KIAotVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXRGb3JB
dG9taWNPcHMoRXh0QXRvbWljT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwdHIsIHVpbnQzMl90
IG9mZnNldCkKK1ZhbHVlKiBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9y
QXRvbWljT3BzKEV4dEF0b21pY09wVHlwZSBvcCwgVmFsdWUqIHB0ciwgdWludDMyX3Qgb2Zmc2V0
KQogewogICAgIGF1dG8gcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgcHRyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSk7CiAgICAgaWYgKGFjY2Vzc1dp
ZHRoKG9wKSAhPSBCMzo6V2lkdGg4KSB7CkBAIC0xNTA0LDExICsxNzczLDExIEBAIFZhbHVlKiBC
M0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKEV4dEF0b21p
Y09wVHlwZSBvcCwgRXhwCiAgICAgcmV0dXJuIHBvaW50ZXI7CiB9CiAKLWlubGluZSBWYWx1ZSog
QjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY0xvYWRPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUg
dmFsdWVUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQoraW5s
aW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWljTG9hZE9wKEV4dEF0b21pY09wVHlw
ZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQog
ewogICAgIHBvaW50ZXIgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKG9wLCBw
b2ludGVyLCB1b2Zmc2V0KTsKIAotICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlID0gbnVsbHB0cjsK
KyAgICBWYWx1ZSogdmFsdWUgPSBudWxscHRyOwogICAgIHN3aXRjaCAoYWNjZXNzV2lkdGgob3Ap
KSB7CiAgICAgY2FzZSBCMzo6V2lkdGg4OgogICAgIGNhc2UgQjM6OldpZHRoMTY6CkBAIC0xNTM3
LDIyICsxODA2LDIyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljTG9hZChFeHRBdG9taWNP
cFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBFeHByZXNzaW9uVHlwCiAKICAgICAgICAgc3dpdGNo
ICh2YWx1ZVR5cGUua2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6Ci0gICAgICAg
ICAgICByZXN1bHQgPSBjb25zdGFudChJbnQzMiwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBw
dXNoKGNvbnN0YW50KEludDMyLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBUeXBlS2luZDo6STY0OgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50NjQsIDAp
OworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQ2NCwgMCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9IGVs
c2UKLSAgICAgICAgcmVzdWx0ID0gZW1pdEF0b21pY0xvYWRPcChvcCwgdmFsdWVUeXBlLCBlbWl0
Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkF0b21pY09wTWVt
b3J5QWNjZXNzKG9wKSksIG9mZnNldCk7CisgICAgICAgIHJlc3VsdCA9IHB1c2goZW1pdEF0b21p
Y0xvYWRPcChvcCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihnZXQocG9p
bnRlciksIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgb2Zmc2V0KSk7
CiAKICAgICByZXR1cm4geyB9OwogfQogCi1pbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0
QXRvbWljU3RvcmVPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBFeHByZXNz
aW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkK
K2lubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNTdG9yZU9wKEV4dEF0b21pY09w
VHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSogdmFsdWUsIHVp
bnQzMl90IHVvZmZzZXQpCiB7CiAgICAgcG9pbnRlciA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXRG
b3JBdG9taWNPcHMob3AsIHBvaW50ZXIsIHVvZmZzZXQpOwogCkBAIC0xNTczLDEyICsxODQyLDEy
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljU3RvcmUoRXh0QXRvbWljT3BUeXBlIG9wLCBU
eXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0
aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAg
ICAgICAgIH0pOwogICAgIH0gZWxzZQotICAgICAgICBlbWl0QXRvbWljU3RvcmVPcChvcCwgdmFs
dWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVP
ZkF0b21pY09wTWVtb3J5QWNjZXNzKG9wKSksIHZhbHVlLCBvZmZzZXQpOworICAgICAgICBlbWl0
QXRvbWljU3RvcmVPcChvcCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihn
ZXQocG9pbnRlciksIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgZ2V0
KHZhbHVlKSwgb2Zmc2V0KTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKLWlubGluZSBWYWx1ZSog
QjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY0JpbmFyeVJNV09wKEV4dEF0b21pY09wVHlwZSBvcCwg
VHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZh
bHVlLCB1aW50MzJfdCB1b2Zmc2V0KQoraW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0
QXRvbWljQmluYXJ5Uk1XT3AoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgVmFs
dWUqIHBvaW50ZXIsIFZhbHVlKiB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBwb2lu
dGVyID0gZml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhvcCwgcG9pbnRlciwgdW9m
ZnNldCk7CiAKQEAgLTE2NjMsMjIgKzE5MzIsMjIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphdG9t
aWNCaW5hcnlSTVcoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2kK
IAogICAgICAgICBzd2l0Y2ggKHZhbHVlVHlwZS5raW5kKSB7CiAgICAgICAgIGNhc2UgVHlwZUtp
bmQ6OkkzMjoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDMyLCAwKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50MzIsIDApKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJNjQ6Ci0gICAgICAgICAgICByZXN1bHQgPSBj
b25zdGFudChJbnQ2NCwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50KElu
dDY0LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICByZXN1bHQgPSBlbWl0QXRvbWljQmluYXJ5Uk1X
T3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zm
c2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKKyAg
ICAgICAgcmVzdWx0ID0gcHVzaChlbWl0QXRvbWljQmluYXJ5Uk1XT3Aob3AsIHZhbHVlVHlwZSwg
ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBvZmZzZXQsIHNpemVPZkF0
b21pY09wTWVtb3J5QWNjZXNzKG9wKSksIGdldCh2YWx1ZSksIG9mZnNldCkpOwogCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNDb21wYXJlRXhj
aGFuZ2UoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5cGUg
cG9pbnRlciwgRXhwcmVzc2lvblR5cGUgZXhwZWN0ZWQsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1
aW50MzJfdCB1b2Zmc2V0KQorVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNDb21wYXJl
RXhjaGFuZ2UoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgVmFsdWUqIHBvaW50
ZXIsIFZhbHVlKiBleHBlY3RlZCwgVmFsdWUqIHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQogewog
ICAgIHBvaW50ZXIgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKG9wLCBwb2lu
dGVyLCB1b2Zmc2V0KTsKIApAQCAtMTc4OCwzNiArMjA1Nyw0MSBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmF0b21pY0NvbXBhcmVFeGNoYW5nZShFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVU
eXBlLCBFeAogCiAgICAgICAgIHN3aXRjaCAodmFsdWVUeXBlLmtpbmQpIHsKICAgICAgICAgY2Fz
ZSBUeXBlS2luZDo6STMyOgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50MzIsIDAp
OworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQzMiwgMCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6Okk2NDoKLSAgICAgICAgICAgIHJl
c3VsdCA9IGNvbnN0YW50KEludDY0LCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29u
c3RhbnQoSW50NjQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGVtaXRBdG9taWND
b21wYXJlRXhjaGFuZ2Uob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIo
cG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCBleHBlY3Rl
ZCwgdmFsdWUsIG9mZnNldCk7CisgICAgICAgIHJlc3VsdCA9IHB1c2goZW1pdEF0b21pY0NvbXBh
cmVFeGNoYW5nZShvcCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihnZXQo
cG9pbnRlciksIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgZ2V0KGV4
cGVjdGVkKSwgZ2V0KHZhbHVlKSwgb2Zmc2V0KSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCi1h
dXRvIEIzSVJHZW5lcmF0b3I6OmF0b21pY1dhaXQoRXh0QXRvbWljT3BUeXBlIG9wLCBFeHByZXNz
aW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgdGlt
ZW91dCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFs
UmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmF0b21pY1dhaXQoRXh0QXRvbWljT3BUeXBlIG9w
LCBFeHByZXNzaW9uVHlwZSBwb2ludGVyVmFyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZVZhciwgRXhw
cmVzc2lvblR5cGUgdGltZW91dFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qg
b2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIHBvaW50ZXIgPSBnZXQocG9p
bnRlclZhcik7CisgICAgVmFsdWUqIHZhbHVlID0gZ2V0KHZhbHVlVmFyKTsKKyAgICBWYWx1ZSog
dGltZW91dCA9IGdldCh0aW1lb3V0VmFyKTsKKyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBudWxs
cHRyOwogICAgIGlmIChvcCA9PSBFeHRBdG9taWNPcFR5cGU6Ok1lbW9yeUF0b21pY1dhaXQzMikg
ewotICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+
KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAorICAgICAgICByZXN1bHRWYWx1ZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCiAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1lbW9y
eUF0b21pY1dhaXQzMikpLAogICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBwb2ludGVyLCBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
b2Zmc2V0KSwgdmFsdWUsIHRpbWVvdXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3Jp
Z2luKCksCisgICAgICAgIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
Q2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1
bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWVtb3J5QXRvbWljV2FpdDY0KSksCiAg
ICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCksIHBvaW50ZXIsIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpLCB2YWx1ZSwgdGlt
ZW91dCk7CiAgICAgfQogCiAgICAgeworICAgICAgICByZXN1bHQgPSBwdXNoKHJlc3VsdFZhbHVl
KTsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIHJl
c3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOwogCiAgICAg
ICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNl
cHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsK
QEAgLTE4MjksMTMgKzIxMDMsMTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KEV4
dEF0b21pY09wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmUKIAogYXV0byBC
M0lSR2VuZXJhdG9yOjphdG9taWNOb3RpZnkoRXh0QXRvbWljT3BUeXBlLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSBjb3VudCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwg
dWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwK
KyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxs
VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxP
cGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1lbW9yeUF0b21pY05vdGlmeSkpLAotICAgICAgICBp
bnN0YW5jZVZhbHVlKCksIHBvaW50ZXIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpLCBjb3VudCk7Ci0KKyAgICAgICAgaW5z
dGFuY2VWYWx1ZSgpLCBnZXQocG9pbnRlciksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpLCBnZXQoY291bnQpKTsKICAgICB7
CisgICAgICAgIHJlc3VsdCA9IHB1c2gocmVzdWx0VmFsdWUpOwogICAgICAgICBDaGVja1ZhbHVl
KiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBD
aGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9y
aWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0
aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOwpAQCAtMTg1MSw4ICsyMTI1LDkgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWNGZW5jZShFeHRBdG9taWNPcFR5cGUsIHVpbnQ4X3Qp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0
b3I6OnRydW5jU2F0dXJhdGVkKEV4dDFPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIGFyZywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCwgVHlwZSByZXR1cm5UeXBlLCBUeXBlKSAtPiBQYXJ0aWFsUmVz
dWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OnRydW5jU2F0dXJhdGVkKEV4dDFPcFR5cGUgb3AsIEV4
cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgVHlwZSByZXR1cm5U
eXBlLCBUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdW
YXIpOwogICAgIFZhbHVlKiBtYXhGbG9hdCA9IG51bGxwdHI7CiAgICAgVmFsdWUqIG1pbkZsb2F0
ID0gbnVsbHB0cjsKICAgICBWYWx1ZSogc2lnbkJpdENvbnN0YW50ID0gbnVsbHB0cjsKQEAgLTIw
MDIsMjYgKzIyNzcsMjYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjp0cnVuY1NhdHVyYXRlZChFeHQx
T3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb24KICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksCiAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRo
YW4sIG9yaWdpbigpLCBhcmcsIG1pbkZsb2F0KSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwKICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdp
bigpLCBhcmcsIG1heEZsb2F0KSwKICAgICAgICAgICAgIHBhdGNocG9pbnQsIG1heFJlc3VsdCks
Ci0gICAgICAgIHJlcXVpcmVzTmFOQ2hlY2sgPyBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgYXJnLCBhcmcpLCBtaW5SZXN1bHQs
IHplcm8pIDogbWluUmVzdWx0KTsKKyAgICAgICAgcmVxdWlyZXNOYU5DaGVjayA/IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBh
cmcsIGFyZyksIG1pblJlc3VsdCwgemVybykgOiBtaW5SZXN1bHQpKTsKIAogICAgIHJldHVybiB7
IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2lu
KCksIGNvbmRpdGlvbiwgbm9uWmVybywgemVybyk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBn
ZXQoY29uZGl0aW9uKSwgZ2V0KG5vblplcm8pLCBnZXQoemVybykpKTsKICAgICByZXR1cm4geyB9
OwogfQogCiBCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRD
b25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKQogewogCi0gICAgcmV0dXJuIGNvbnN0
YW50KHRvQjNUeXBlKHR5cGUpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHB1c2goY29uc3RhbnQodG9C
M1R5cGUodHlwZSksIHZhbHVlKSk7CiB9CiAKIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdEVudHJ5
VGllclVwQ2hlY2soKQpAQCAtMjA4MiwyMCArMjM1NywyMSBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6
OmVtaXRMb29wVGllclVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4LCBjb25zdCBTdGFjayYgZW5j
bG9zaQogCiAgICAgVmFsdWUqIGNvdW50RG93bkxvY2F0aW9uID0gY29uc3RhbnQocG9pbnRlclR5
cGUoKSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJm1fdGllclVwLT5tX2NvdW50ZXIpLCBvcmln
aW4pOwogCi0gICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBzdGFja21hcDsKLSAgICBmb3IgKGF1
dG8mIGxvY2FsIDogbV9sb2NhbHMpIHsKLSAgICAgICAgVmFsdWUqIHJlc3VsdCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBvcmlnaW4s
IGxvY2FsKTsKLSAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHJlc3VsdCk7Ci0gICAgfQorICAgIFZl
Y3RvcjxWYWx1ZSo+IHN0YWNrbWFwOworICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykK
KyAgICAgICAgc3RhY2ttYXAuYXBwZW5kKGdldChsb2NhbCkpOwogICAgIGZvciAodW5zaWduZWQg
Y29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygp
LnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgYXV0byYgZGF0YSA9IG1fcGFyc2Vy
LT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOwogICAgICAgICBhdXRv
JiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4
XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKICAgICAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24g
dmFsdWUgOiBleHByZXNzaW9uU3RhY2spCi0gICAgICAgICAgICBzdGFja21hcC5hcHBlbmQodmFs
dWUpOworICAgICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKGdldCh2YWx1ZSkpOworICAgICAgICBp
ZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpCisgICAgICAgICAgICBzdGFja21hcC5h
cHBlbmQoZ2V0KGRhdGEuZXhjZXB0aW9uKCkpKTsKICAgICB9CiAgICAgZm9yIChUeXBlZEV4cHJl
c3Npb24gdmFsdWUgOiBlbmNsb3NpbmdTdGFjaykKLSAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHZh
bHVlKTsKKyAgICAgICAgc3RhY2ttYXAuYXBwZW5kKGdldCh2YWx1ZSkpOwogICAgIGZvciAoVHlw
ZWRFeHByZXNzaW9uIHZhbHVlIDogbmV3U3RhY2spCi0gICAgICAgIHN0YWNrbWFwLmFwcGVuZCh2
YWx1ZSk7CisgICAgICAgIHN0YWNrbWFwLmFwcGVuZChnZXQodmFsdWUpKTsKIAogICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2ggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRW
YWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKTsKICAgICBFZmZlY3RzIGVmZmVjdHMgPSBF
ZmZlY3RzOjpub25lKCk7CkBAIC0yMTQwLDkzICsyNDE2LDczIEBAIHZvaWQgQjNJUkdlbmVyYXRv
cjo6ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgsIGNvbnN0IFN0YWNrJiBl
bmNsb3NpCiAgICAgfSk7CiB9CiAKK1ZhbHVlKiBCM0lSR2VuZXJhdG9yOjpsb2FkRnJvbVNjcmF0
Y2hCdWZmZXIodW5zaWduZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBwb2ludGVyLCBCMzo6VHlw
ZSB0eXBlKQoreworICAgIHNpemVfdCBvZmZzZXQgPSBzaXplb2YodWludDY0X3QpICogaW5kZXhJ
bkJ1ZmZlcisrOworICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUuaXNOdW1lcmljKCkpOworICAgIHJl
dHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IHR5cGUsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworfQorCit2b2lkIEIzSVJHZW5lcmF0
b3I6OmNvbm5lY3RDb250cm9sRW50cnkodW5zaWduZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBw
b2ludGVyLCBDb250cm9sRGF0YSYgZGF0YSwgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgQ29udHJv
bERhdGEmIGN1cnJlbnREYXRhLCBib29sIGZpbGxMb29wUGhpcykKK3sKKyAgICAvLyBGb3IgZWFj
aCBzdGFjayBlbnRyeSBlbmNsb3NlZCBieSB0aGlzIGxvb3Agd2UgbmVlZCB0byByZXBsYWNlIHRo
ZSB2YWx1ZSB3aXRoIGEgcGhpIHNvIHdlIGNhbiBmaWxsIGl0IG9uIE9TUiBlbnRyeS4KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA9IGV4cHJlc3Npb25TdGFja1tpXTsKKyAgICAg
ICAgYXV0byAqbG9hZCA9IGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihpbmRleEluQnVmZmVyLCBwb2lu
dGVyLCB2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgaWYgKGZpbGxMb29wUGhpcykKKyAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCBsb2FkLCBkYXRhLnBoaXNbaV0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBvcmlnaW4o
KSwgdmFsdWUudmFsdWUoKSwgbG9hZCk7CisgICAgfQorICAgIGlmIChDb250cm9sVHlwZTo6aXNB
bnlDYXRjaChkYXRhKSAmJiAmZGF0YSAhPSAmY3VycmVudERhdGEpIHsKKyAgICAgICAgYXV0byAq
bG9hZCA9IGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihpbmRleEluQnVmZmVyLCBwb2ludGVyLCBwb2lu
dGVyVHlwZSgpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihtX3Byb2MsIFNldCwgb3JpZ2luKCksIGRhdGEuZXhjZXB0aW9uKCksIGxvYWQpOworICAg
IH0KK307CisKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWdu
YXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIGJsb2NrLCBTdGFjayYg
bmV3U3RhY2ssIHVpbnQzMl90IGxvb3BJbmRleCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEJh
c2ljQmxvY2sqIGJvZHkgPSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBjb250
aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKIAotICAgIGJsb2NrID0gQ29udHJvbERhdGEo
bV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6Okxvb3AsIGNvbnRpbnVhdGlv
biwgYm9keSk7CisgICAgYmxvY2sgPSBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWdu
YXR1cmUsIEJsb2NrVHlwZTo6TG9vcCwgbV9zdGFja1NpemUsIGNvbnRpbnVhdGlvbiwgYm9keSk7
CisgICAgLy9zcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsK
KwogICAgIHVuc2lnbmVkIG9mZnNldCA9IGVuY2xvc2luZ1N0YWNrLnNpemUoKSAtIHNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CiAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1
ZSA9IGVuY2xvc2luZ1N0YWNrLmF0KG9mZnNldCArIGkpOwotICAgICAgICBhdXRvKiB1cHNpbG9u
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHZhbHVlKTsKICAgICAgICAgVmFsdWUqIHBoaSA9IGJsb2NrLnBoaXNbaV07CisgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBnZXQodmFsdWUpLCBwaGkpOwogICAgICAgICBib2R5LT5hcHBlbmQocGhpKTsKLSAgICAgICAg
dXBzaWxvbi0+c2V0UGhpKHBoaSk7Ci0gICAgICAgIG5ld1N0YWNrLmNvbnN0cnVjdEFuZEFwcGVu
ZCh2YWx1ZS50eXBlKCksIHBoaSk7CisgICAgICAgIHNldChib2R5LCB2YWx1ZSwgcGhpKTsKKyAg
ICAgICAgbmV3U3RhY2suYXBwZW5kKHZhbHVlKTsKICAgICB9CisgICAgZW5jbG9zaW5nU3RhY2su
c2hyaW5rKG9mZnNldCk7CiAKICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGJvZHkpOwogICAgIGlmIChsb29wSW5kZXggPT0g
bV9sb29wSW5kZXhGb3JPU1JFbnRyeSkgewogICAgICAgICBkYXRhTG9nTG5JZihXYXNtQjNJUkdl
bmVyYXRvckludGVybmFsOjp2ZXJib3NlLCAiU2V0dGluZyB1cCBmb3IgT1NSIGVudHJ5Iik7CiAK
LSAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Jvb3RCbG9jazsKLSAgICAgICAgVmFsdWUqIHBv
aW50ZXIgPSBtX3Jvb3RCbG9jay0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KG1fcHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIG1fY3VycmVudEJsb2Nr
ID0gbV9yb290QmxvY2tzWzBdOworICAgICAgICBWYWx1ZSogcG9pbnRlciA9IG1fcm9vdEJsb2Nr
c1swXS0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAKICAgICAgICAgdW5zaWduZWQgaW5kZXhJbkJ1ZmZlciA9IDA7
Ci0gICAgICAgIGF1dG8gbG9hZEZyb21TY3JhdGNoQnVmZmVyID0gWyZdIChCMzo6VHlwZSB0eXBl
KSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gc2l6ZW9mKHVpbnQ2NF90KSAqIGluZGV4
SW5CdWZmZXIrKzsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUuaXNOdW1lcmljKCkp
OwotICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgTG9hZCwgdHlwZSwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7Ci0gICAg
ICAgIH07CiAKICAgICAgICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKQotICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwg
T3JpZ2luKCksIGxvY2FsLCBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIobG9jYWwtPnR5cGUoKSkpOwot
Ci0gICAgICAgIGF1dG8gY29ubmVjdENvbnRyb2xFbnRyeSA9IFsmXShjb25zdCBDb250cm9sRGF0
YSYgZGF0YSwgU3RhY2smIGV4cHJlc3Npb25TdGFjaykgewotICAgICAgICAgICAgLy8gRm9yIGVh
Y2ggc3RhY2sgZW50cnkgZW5jbG9zZWQgYnkgdGhpcyBsb29wIHdlIG5lZWQgdG8gcmVwbGFjZSB0
aGUgdmFsdWUgd2l0aCBhIHBoaSBzbyB3ZSBjYW4gZmlsbCBpdCBvbiBPU1IgZW50cnkuCi0gICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jayA9IG51bGxwdHI7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBibG9ja0luZGV4ID0gMDsKLSAgICAgICAgICAgIEIzOjpJbnNlcnRpb25TZXQgaW5z
ZXJ0aW9uU2V0KG1fcHJvYyk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgVHlwZWRFeHBy
ZXNzaW9uIHZhbHVlID0gZXhwcmVzc2lvblN0YWNrW2ldOwotICAgICAgICAgICAgICAgIGlmICh2
YWx1ZS0+aXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICsraW5kZXhJbkJ1ZmZl
cjsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5vd25lciAhPSBzb3VyY2VCbG9jaykgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoc291cmNlQmxvY2spCi0gICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuZXhlY3V0ZShzb3VyY2VCbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIEFT
U0VSVChpbnNlcnRpb25TZXQuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuSWYoV2FzbUIzSVJHZW5lcmF0b3JJbnRlcm5hbDo6dmVyYm9zZSAmJiBzb3VyY2VCbG9jaywg
IkV4ZWN1dGVkIGluc2VydGlvbiBzZXQgaW50bzogIiwgKnNvdXJjZUJsb2NrKTsKLSAgICAgICAg
ICAgICAgICAgICAgYmxvY2tJbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZUJs
b2NrID0gdmFsdWUtPm93bmVyOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHdoaWxlIChzb3VyY2VCbG9jay0+YXQoYmxvY2tJbmRleCsrKSAhPSB2YWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGJsb2NrSW5kZXggPCBzb3VyY2VCbG9jay0+c2l6ZSgpKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoc291cmNlQmxvY2stPmF0KGJsb2NrSW5kZXggLSAxKSA9PSB2
YWx1ZSk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvKiBwaGkgPSBkYXRhLmNvbnRpbnVhdGlvbi0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFBoaSwgIHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmln
aW4oKSk7Ci0gICAgICAgICAgICAgICAgZXhwcmVzc2lvblN0YWNrW2ldID0gVHlwZWRFeHByZXNz
aW9uIHsgdmFsdWUudHlwZSgpLCBwaGkgfTsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCB2YWx1ZS0+b3JpZ2luKCksIGxvYWRG
cm9tU2NyYXRjaEJ1ZmZlcih2YWx1ZS0+dHlwZSgpKSwgcGhpKTsKLQotICAgICAgICAgICAgICAg
IGF1dG8qIHNvdXJjZVVwc2lsb24gPSBtX3Byb2MuYWRkPFVwc2lsb25WYWx1ZT4odmFsdWUtPm9y
aWdpbigpLCB2YWx1ZSwgcGhpKTsKLSAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
VmFsdWUoYmxvY2tJbmRleCwgc291cmNlVXBzaWxvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoc291cmNlQmxvY2spCi0gICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1
dGUoc291cmNlQmxvY2spOwotICAgICAgICB9OworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIGxvY2FsLCBs
b2FkRnJvbVNjcmF0Y2hCdWZmZXIoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgbG9jYWwtPnR5cGUo
KSkpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbElu
ZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsK
ICAgICAgICAgICAgIGF1dG8mIGRhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJv
bEluZGV4XS5jb250cm9sRGF0YTsKICAgICAgICAgICAgIGF1dG8mIGV4cHJlc3Npb25TdGFjayA9
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lv
blN0YWNrOwotICAgICAgICAgICAgY29ubmVjdENvbnRyb2xFbnRyeShkYXRhLCBleHByZXNzaW9u
U3RhY2spOworICAgICAgICAgICAgY29ubmVjdENvbnRyb2xFbnRyeShpbmRleEluQnVmZmVyLCBw
b2ludGVyLCBkYXRhLCBleHByZXNzaW9uU3RhY2ssIGJsb2NrKTsKICAgICAgICAgfQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsr
aSkgewotICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlID0gZW5jbG9zaW5nU3RhY2su
YXQob2Zmc2V0ICsgaSk7Ci0gICAgICAgICAgICBWYWx1ZSogcGhpID0gYmxvY2sucGhpc1tpXTsK
LSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3By
b2MsIHZhbHVlLT5vcmlnaW4oKSwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKHZhbHVlLT50eXBlKCkp
LCBwaGkpOwotICAgICAgICB9Ci0gICAgICAgIGVuY2xvc2luZ1N0YWNrLnNocmluayhvZmZzZXQp
OwotICAgICAgICBjb25uZWN0Q29udHJvbEVudHJ5KGJsb2NrLCBlbmNsb3NpbmdTdGFjayk7Cisg
ICAgICAgIGNvbm5lY3RDb250cm9sRW50cnkoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgYmxvY2ss
IGVuY2xvc2luZ1N0YWNrLCBibG9jayk7CisgICAgICAgIGNvbm5lY3RDb250cm9sRW50cnkoaW5k
ZXhJbkJ1ZmZlciwgcG9pbnRlciwgYmxvY2ssIG5ld1N0YWNrLCBibG9jaywgdHJ1ZSk7CiAKICAg
ICAgICAgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID0gaW5kZXhJbkJ1ZmZlcjsKICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9y
aWdpbigpLCBib2R5KTsKICAgICAgICAgYm9keS0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50Qmxv
Y2spOwotICAgIH0gZWxzZQotICAgICAgICBlbmNsb3NpbmdTdGFjay5zaHJpbmsob2Zmc2V0KTsK
KyAgICB9CiAKICAgICBtX2N1cnJlbnRCbG9jayA9IGJvZHk7CiAgICAgZW1pdExvb3BUaWVyVXBD
aGVjayhsb29wSW5kZXgsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CkBAIC0yMjM1LDcgKzI0
OTEsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0
dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbgogCiBCM0lSR2VuZXJhdG9yOjpDb250cm9s
RGF0YSBCM0lSR2VuZXJhdG9yOjphZGRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUp
CiB7Ci0gICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgT3JpZ2luKCksIHNpZ25hdHVyZSwg
QmxvY2tUeXBlOjpUb3BMZXZlbCwgbV9wcm9jLmFkZEJsb2NrKCkpOworICAgIHJldHVybiBDb250
cm9sRGF0YShtX3Byb2MsIE9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6VG9wTGV2ZWws
IG1fc3RhY2tTaXplLCBtX3Byb2MuYWRkQmxvY2soKSk7CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQmxvY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3Rh
Y2ssIENvbnRyb2xUeXBlJiBuZXdCbG9jaywgU3RhY2smIG5ld1N0YWNrKSAtPiBQYXJ0aWFsUmVz
dWx0CkBAIC0yMjQzLDcgKzI0OTksNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEJsb2NrKEJs
b2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDbwogICAgIEJh
c2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwogCiAgICAgc3BsaXRT
dGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7Ci0gICAgbmV3QmxvY2sg
PSBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6Qmxv
Y2ssIGNvbnRpbnVhdGlvbik7CisgICAgbmV3QmxvY2sgPSBDb250cm9sRGF0YShtX3Byb2MsIG9y
aWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6QmxvY2ssIG1fc3RhY2tTaXplLCBjb250aW51
YXRpb24pOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTIyNTUsMjAgKzI1MTEsMjAgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEJsb2NrU2ln
bmF0dXJlIHNpZ25hdHVyZSwgU3QKICAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IG1fcHJvYy5h
ZGRCbG9jaygpOwogICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9j
aygpOwogCi0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6
QnJhbmNoLCBvcmlnaW4oKSwgY29uZGl0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBnZXQoY29uZGl0aW9uKSk7
CiAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRha2Vu
KSwgRnJlcXVlbnRlZEJsb2NrKG5vdFRha2VuKSk7CiAgICAgdGFrZW4tPmFkZFByZWRlY2Vzc29y
KG1fY3VycmVudEJsb2NrKTsKICAgICBub3RUYWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50
QmxvY2spOwogCiAgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKICAgICBzcGxpdFN0YWNrKHNp
Z25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKLSAgICByZXN1bHQgPSBDb250cm9s
RGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6SWYsIGNvbnRpbnVh
dGlvbiwgbm90VGFrZW4pOworICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2lu
KCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpJZiwgbV9zdGFja1NpemUsIGNvbnRpbnVhdGlvbiwg
bm90VGFrZW4pOwogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
RWxzZShDb250cm9sRGF0YSYgZGF0YSwgY29uc3QgU3RhY2smIGN1cnJlbnRTdGFjaykgLT4gUGFy
dGlhbFJlc3VsdAogewotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0
YS5waGlzKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEpOwog
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBv
cmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOwogICAgIHJldHVybiBhZGRFbHNlVG9VbnJlYWNo
YWJsZShkYXRhKTsKIH0KQEAgLTIyNzYsMTEgKzI1MzIsMjQ4IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkRWxzZShDb250cm9sRGF0YSYgZGF0YSwgY29uc3QgU3RhY2smIGN1cnJlbnRTdGFjaykg
LT4gUGFyCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xE
YXRhJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKGRhdGEuYmxvY2tUeXBl
KCkgPT0gQmxvY2tUeXBlOjpJZik7CisgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgp
ICsgZGF0YS5tX3NpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOwogICAgIG1fY3VycmVudEJsb2Nr
ID0gZGF0YS5zcGVjaWFsOwogICAgIGRhdGEuY29udmVydElmVG9CbG9jaygpOwogICAgIHJldHVy
biB7IH07CiB9CiAKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFj
ayYgbmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICArK21fdHJ5RGVwdGg7CisKKyAg
ICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICBzcGxp
dFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKKyAgICByZXN1bHQg
PSBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6VHJ5
LCBtX3N0YWNrU2l6ZSwgY29udGludWF0aW9uLCArK21fY2FsbFNpdGVJbmRleCwgbV90cnlEZXB0
aCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYXRjaCh1
bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFN0YWNr
JiBjdXJyZW50U3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNr
LCBkYXRhKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJv
YywgSnVtcCwgb3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4gYWRkQ2F0
Y2hUb1VucmVhY2hhYmxlKGV4Y2VwdGlvbkluZGV4LCBzaWduYXR1cmUsIGRhdGEsIHJlc3VsdHMp
OworfQorCitQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIEIzSVJHZW5lcmF0b3I6OnByZXBhcmVQ
YXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhCYXNpY0Jsb2NrKiBibG9jaywgUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaCkKK3sKKyAgICArK21fY2FsbFNpdGVJbmRleDsKKworICAgIFZlY3RvcjxWYWx1ZSo+
IHN0YWNrbWFwOworICAgIE9yaWdpbiBvcmlnaW4gPSB0aGlzLT5vcmlnaW4oKTsKKyAgICBmb3Ig
KFZhcmlhYmxlKiBsb2NhbCA6IG1fbG9jYWxzKSB7CisgICAgICAgIFZhbHVlKiByZXN1bHQgPSBi
bG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luLCBs
b2NhbCk7CisgICAgICAgIHN0YWNrbWFwLmFwcGVuZChyZXN1bHQpOworICAgIH0KKyAgICBmb3Ig
KHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250
cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAgICAgIENvbnRyb2xEYXRh
JiBkYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uY29udHJvbERh
dGE7CisgICAgICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0
YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgZm9y
IChWYXJpYWJsZSogdmFsdWUgOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgICAgICBzdGFja21h
cC5hcHBlbmQoZ2V0KGJsb2NrLCB2YWx1ZSkpOworICAgICAgICBpZiAoQ29udHJvbFR5cGU6Omlz
QW55Q2F0Y2goZGF0YSkpCisgICAgICAgICAgICBzdGFja21hcC5hcHBlbmQoZ2V0KGJsb2NrLCBk
YXRhLmV4Y2VwdGlvbigpKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gcGF0Y2gt
Pm51bUNoaWxkcmVuKCk7CisgICAgaWYgKHBhdGNoLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAg
b2Zmc2V0Kys7CisKKyAgICBwYXRjaC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKyAg
ICBwYXRjaC0+YXBwZW5kVmVjdG9yV2l0aFJlcChzdGFja21hcCwgVmFsdWVSZXA6OkxhdGVDb2xk
QW55KTsKKworICAgIHJldHVybiBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIHsgbV9jYWxsU2l0
ZUluZGV4LCBvZmZzZXQgfTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5y
ZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIFZhbHVlKiBvcGVyYXRpb25SZXN1bHQgPSBlbWl0Q2F0Y2hJbXBsKENhdGNo
S2luZDo6Q2F0Y2gsIGRhdGEsIGV4Y2VwdGlvbkluZGV4KTsKKyAgICBWYWx1ZSogcGF5bG9hZCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25SZXN1bHQsIDEpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgVHlw
ZSB0eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNU
eXBlKHR5cGUpLCBvcmlnaW4oKSwgcGF5bG9hZCwgaSAqIHNpemVvZih1aW50NjRfdCkpOworICAg
ICAgICByZXN1bHRzLmFwcGVuZChwdXNoKHZhbHVlKSk7CisgICAgfQorICAgIHJldHVybiB7IH07
Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwoU3RhY2smIGN1cnJlbnRTdGFj
aywgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVl
c1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgZGF0YS5jb250aW51YXRp
b24pOworICAgIHJldHVybiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoZGF0YSk7Cit9CisKK2F1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBk
YXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENhdGNoSW1wbChDYXRjaEtpbmQ6OkNh
dGNoQWxsLCBkYXRhKTsKKyAgICByZXR1cm4geyB9OworfQorCitWYWx1ZSogQjNJUkdlbmVyYXRv
cjo6ZW1pdENhdGNoSW1wbChDYXRjaEtpbmQga2luZCwgQ29udHJvbFR5cGUmIGRhdGEsIHVuc2ln
bmVkIGV4Y2VwdGlvbkluZGV4KQoreworICAgIG1fY3VycmVudEJsb2NrID0gbV9wcm9jLmFkZEJs
b2NrKCk7CisgICAgbV9yb290QmxvY2tzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CisgICAgbV9z
dGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOworCisgICAgaWYgKENvbnRyb2xUeXBlOjppc1Ry
eShkYXRhKSkgeworICAgICAgICBpZiAoa2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoKQorICAgICAg
ICAgICAgZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaCgrK21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFk
ZFZhcmlhYmxlKHBvaW50ZXJUeXBlKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0
YS5jb252ZXJ0VHJ5VG9DYXRjaEFsbCgrK21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFkZFZhcmlh
YmxlKHBvaW50ZXJUeXBlKCkpKTsKKyAgICB9CisKKyAgICBIYW5kbGVyVHlwZSBoYW5kbGVyVHlw
ZSA9IGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCA/IEhhbmRsZXJUeXBlOjpDYXRjaCA6IEhhbmRs
ZXJUeXBlOjpDYXRjaEFsbDsKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IGhhbmRs
ZXJUeXBlLCBkYXRhLnRyeVN0YXJ0KCksIGRhdGEudHJ5RW5kKCksIDAsIG1fdHJ5RGVwdGgsIGV4
Y2VwdGlvbkluZGV4IH0pOworCisgICAgVmFsdWUqIHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisKKyAgICB1bnNpZ25lZCBpbmRleEluQnVmZmVyID0gMDsKKworICAgIGZv
ciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIGxvY2FsLCBsb2FkRnJv
bVNjcmF0Y2hCdWZmZXIoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgbG9jYWwtPnR5cGUoKSkpOwor
CisgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3Bh
cnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgeworICAgICAgICBh
dXRvJiBjb250cm9sRGF0YSA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhd
LmNvbnRyb2xEYXRhOworICAgICAgICBhdXRvJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+
Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAg
ICAgICAgY29ubmVjdENvbnRyb2xFbnRyeShpbmRleEluQnVmZmVyLCBwb2ludGVyLCBjb250cm9s
RGF0YSwgZXhwcmVzc2lvblN0YWNrLCBkYXRhKTsKKyAgICB9CisKKyAgICBQYXRjaHBvaW50VmFs
dWUqIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIG1fcHJvYy5hZGRUdXBsZSh7IHBvaW50ZXJUeXBlKCksIHBvaW50ZXJUeXBlKCkgfSks
IG9yaWdpbigpKTsKKyAgICByZXN1bHQtPmVmZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7Cisg
ICAgcmVzdWx0LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7
CisgICAgUmVnaXN0ZXJTZXQgY2xvYmJlckxhdGUgPSBSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdp
c3RlcnNGb3JKU0NhbGwoKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICByZXN1bHQtPmNsb2JiZXJMYXRlKGNsb2JiZXJMYXRlKTsKKyAgICByZXN1bHQt
PmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHJl
c3VsdC0+cmVzdWx0Q29uc3RyYWludHMuYXBwZW5kKFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKKyAgICByZXN1bHQtPnJlc3VsdENvbnN0cmFpbnRzLmFwcGVuZChWYWx1
ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSMikpOworICAgIHJlc3VsdC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1zWzJdLmdwcigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGpp
dC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhj
YWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21SZXRyaWV2ZUFu
ZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAg
ICBWYWx1ZSogZXhjZXB0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxFeHRyYWN0VmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXJUeXBlKCksIHJlc3VsdCwgMCk7CisgICAgc2V0
KGRhdGEuZXhjZXB0aW9uKCksIGV4Y2VwdGlvbik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiB0YXJnZXQsIENv
bnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZERlbGVn
YXRlVG9VbnJlYWNoYWJsZSh0YXJnZXQsIGRhdGEpOworfQorCithdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgdGFyZ2V0LCBDb250cm9sVHlw
ZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuc2lnbmVkIHRhcmdldERlcHRoID0g
MDsKKyAgICBpZiAoQ29udHJvbFR5cGU6OmlzVHJ5KHRhcmdldCkpCisgICAgICAgIHRhcmdldERl
cHRoID0gdGFyZ2V0LnRyeURlcHRoKCk7CisKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVu
ZCh7IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSwgZGF0YS50cnlTdGFydCgpLCArK21fY2FsbFNpdGVJ
bmRleCwgMCwgbV90cnlEZXB0aCwgdGFyZ2V0RGVwdGggfSk7CisgICAgcmV0dXJuIHsgfTsKK30K
KworYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaCA9IG1fcHJvYy5hZGQ8UGF0Y2hwb2ludFZhbHVl
PihCMzo6Vm9pZCwgb3JpZ2luKCkpOworICAgIHBhdGNoLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1
ZTsKKyAgICBwYXRjaC0+YXBwZW5kKGluc3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCisg
ICAgICAgIHBhdGNoLT5hcHBlbmQoZ2V0KGFyZ3NbaV0pLCBWYWx1ZVJlcDo6c3RhY2tBcmd1bWVu
dChpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgIHBhdGNoLT5jbG9iYmVyKFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgUmVnaXN0ZXJTZXQgY2xvYmJl
ckxhdGUgPSBSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKTsKKyAgICBj
bG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjbG9iYmVyTGF0ZS5h
ZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6
YXJndW1lbnRHUFIyKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIz
KTsKKyAgICBwYXRjaC0+Y2xvYmJlckxhdGUoY2xvYmJlckxhdGUpOworICAgIHBhdGNoLT5udW1H
UFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFu
ZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKG1fY3VycmVudEJsb2NrLCBwYXRj
aCk7CisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpcywgZXhjZXB0aW9uSW5kZXgsIGhhbmRs
ZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOworICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2go
MCk7CisgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CisKKyAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5z
dGFuY2U6Om9mZnNldE9mT3duZXIoKSksIHNjcmF0Y2gpOworICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVs
cGVyczo6Tm9uWmVybywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lz
ZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNo
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
LCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZz
ZXRPZlZNKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5q
dW1wKCk7CisKKyAgICAgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIFBy
ZWNpc2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0o
KSAtIFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBzY3JhdGNoKTsKKworICAgICAg
ICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOworICAgICAgICB9CisgICAgICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHNjcmF0Y2gpOworCisg
ICAgICAgIGppdC5tb3ZlKHBhcmFtc1swXS5ncHIoKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMSk7CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoZXhjZXB0aW9uSW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMyk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3Bl
cmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOworICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2Nh
bGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtVGhyb3cp
KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChwYXRj
aCk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJldGhy
b3codW5zaWduZWQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCA9IG1fcHJvYy5hZGQ8UGF0Y2hwb2ludFZhbHVlPihCMzo6
Vm9pZCwgb3JpZ2luKCkpOworICAgIHBhdGNoLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1Nj
cmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgUmVnaXN0ZXJTZXQgY2xvYmJlckxhdGU7CisgICAgY2xv
YmJlckxhdGUuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2xvYmJlckxhdGUuYWRk
KEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgY2xvYmJlckxhdGUuYWRkKEdQUkluZm86OmFy
Z3VtZW50R1BSMik7CisgICAgcGF0Y2gtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOworICAgIHBh
dGNoLT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAg
ICBwYXRjaC0+YXBwZW5kU29tZVJlZ2lzdGVyKGZyYW1lUG9pbnRlcigpKTsKKyAgICBwYXRjaC0+
YXBwZW5kKGdldChkYXRhLmV4Y2VwdGlvbigpKSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7Cisg
ICAgcGF0Y2gtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMobV9jdXJy
ZW50QmxvY2ssIHBhdGNoKTsKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBoYW5kbGVd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKKworICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2go
MCk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0u
Z3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0
cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxpZ25tZW50KSk7CisgICAgICAgICAgICBqaXQu
YW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNr
KSwgc2NyYXRjaCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFya2VkQmxvY2s6OkZv
b3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBhdXRvIGxvYWRlZENh
c2UgPSBqaXQuanVtcCgpOworCisgICAgICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGlu
aygmaml0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0Ojpv
ZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgc2NyYXRjaCk7
CisKKyAgICAgICAgICAgIGxvYWRlZENhc2UubGluaygmaml0KTsKKyAgICAgICAgfQorICAgICAg
ICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihzY3Jh
dGNoKTsKKworICAgICAgICBqaXQubW92ZShwYXJhbXNbMF0uZ3ByKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIGppdC5tb3ZlKHBhcmFtc1sxXS5ncHIoKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1zWzJdLmdwcigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMp
OworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0
clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBFeGNl
cHRpb25IYW5kbGVyUHRyVGFnKTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGws
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVJldGhyb3cpKTsKKyAg
ICAgICAgfSk7CisgICAgfSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChwYXRjaCk7CisK
KyAgICByZXR1cm4geyB9OworfQorCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25z
dCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICBDYWxsSW5mb3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKG1fcGFyc2VyLT5zaWduYXR1cmUoKSwgQ2FsbFJv
bGU6OkNhbGxlZSk7CkBAIC0yMzAwLDEwICsyNzkzLDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykg
LT4KICAgICAgICAgQjM6OlZhbHVlUmVwIHJlcCA9IHdhc21DYWxsSW5mby5yZXN1bHRzW2ldOwog
ICAgICAgICBpZiAocmVwLmlzU3RhY2soKSkgewogICAgICAgICAgICAgQjM6OlZhbHVlKiBhZGRy
ZXNzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkFk
ZCwgT3JpZ2luKCksIGZyYW1lUG9pbnRlcigpLCBjb25zdGFudChwb2ludGVyVHlwZSgpLCByZXAu
b2Zmc2V0RnJvbUZQKCkpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
QjM6Ok1lbW9yeVZhbHVlPihtX3Byb2MsIEIzOjpTdG9yZSwgT3JpZ2luKCksIHJldHVyblZhbHVl
c1tvZmZzZXQgKyBpXSwgYWRkcmVzcyk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4obV9wcm9jLCBCMzo6U3RvcmUsIE9yaWdpbigpLCBnZXQo
cmV0dXJuVmFsdWVzW29mZnNldCArIGldKSwgYWRkcmVzcyk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBBU1NFUlQocmVwLmlzUmVnKCkpOwotICAgICAgICAgICAgcGF0Y2gtPmFwcGVu
ZChyZXR1cm5WYWx1ZXNbb2Zmc2V0ICsgaV0sIHJlcCk7CisgICAgICAgICAgICBwYXRjaC0+YXBw
ZW5kKGdldChyZXR1cm5WYWx1ZXNbb2Zmc2V0ICsgaV0pLCByZXApOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0yMzEzLDEyICsyODA2LDEyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJu
KGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykgLT4KIAogYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3Vs
dAogewotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YS5waGlzKTsK
KyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMsIGRhdGEpOwogCiAgICAgQmFz
aWNCbG9jayogdGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9ja0ZvckJyYW5jaCgpOwogICAgIGlmIChj
b25kaXRpb24pIHsKICAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFk
ZEJsb2NrKCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGNvbmRpdGlvbik7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGdldChj
b25kaXRpb24pKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVl
bnRlZEJsb2NrKHRhcmdldCksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKICAgICAg
ICAgdGFyZ2V0LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CiAgICAgICAgIGNvbnRp
bnVhdGlvbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwpAQCAtMjMzMywxMSArMjgy
NiwxMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9sRGF0YSYgZGF0YSwg
RXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0
YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgU3RhY2smIGV4
cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFVOVVNFRF9QQVJBTShleHBy
ZXNzaW9uU3RhY2spOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7
ICsraSkKLSAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCB0YXJn
ZXRzW2ldLT5waGlzKTsKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ss
IGRlZmF1bHRUYXJnZXQucGhpcyk7CisgICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJl
c3Npb25TdGFjaywgKnRhcmdldHNbaV0pOworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJl
c3Npb25TdGFjaywgZGVmYXVsdFRhcmdldCk7CiAKLSAgICBTd2l0Y2hWYWx1ZSogc3dpdGNoVmFs
dWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFN3aXRjaFZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCBjb25kaXRpb24pOworICAgIFN3aXRjaFZhbHVlKiBzd2l0Y2hWYWx1ZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8U3dpdGNoVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGdldChjb25k
aXRpb24pKTsKICAgICBzd2l0Y2hWYWx1ZS0+c2V0RmFsbFRocm91Z2goRnJlcXVlbnRlZEJsb2Nr
KGRlZmF1bHRUYXJnZXQudGFyZ2V0QmxvY2tGb3JCcmFuY2goKSkpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsraSkKICAgICAgICAgc3dpdGNoVmFsdWUtPmFw
cGVuZENhc2UoU3dpdGNoQ2FzZShpLCBGcmVxdWVudGVkQmxvY2sodGFyZ2V0c1tpXS0+dGFyZ2V0
QmxvY2tGb3JCcmFuY2goKSkpKTsKQEAgLTIzNTEsNyArMjg0NSw3IEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIGV4cHJlc3Npb25TdGFj
aykgLT4gUGFyCiAKICAgICBBU1NFUlQoZXhwcmVzc2lvblN0YWNrLnNpemUoKSA9PSBkYXRhLnNp
Z25hdHVyZSgpLT5yZXR1cm5Db3VudCgpKTsKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSAhPSBC
bG9ja1R5cGU6Okxvb3ApCi0gICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25T
dGFjaywgZGF0YS5waGlzKTsKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lv
blN0YWNrLCBkYXRhKTsKIAogICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFs
dWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOwogICAgIGRhdGEu
Y29udGludWF0aW9uLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CkBAIC0yMzYzLDMw
ICsyODU3LDM0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250
cm9sRW50cnkmIGVudHJ5LCBjb25zdCBTdGFjayYgZXhwcmVzCiB7CiAgICAgQ29udHJvbERhdGEm
IGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsKICAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuY29u
dGludWF0aW9uOworICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKIAogICAgIGlm
IChkYXRhLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKICAgICAgICAgZGF0YS5zcGVj
aWFsLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgbV9jdXJy
ZW50QmxvY2spOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNzb3IoZGF0YS5z
cGVjaWFsKTsKLSAgICB9CisgICAgfSBlbHNlIGlmIChkYXRhLmJsb2NrVHlwZSgpID09IEJsb2Nr
VHlwZTo6VHJ5IHx8IGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpDYXRjaCkKKyAgICAg
ICAgLS1tX3RyeURlcHRoOwogCiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBl
OjpMb29wKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25hdHVy
ZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKICAgICAgICAgICAgIFZhbHVlKiByZXN1bHQgPSBk
YXRhLnBoaXNbaV07CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7
Ci0gICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRB
cHBlbmQoZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChkYXRh
LnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpLCBwdXNoKHJlc3VsdCkpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgbV9vdXRlckxvb3BzLnJlbW92ZUxhc3QoKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCk7
ICsraSkgewotICAgICAgICAgICAgaWYgKGkgPCBleHByZXNzaW9uU3RhY2suc2l6ZSgpKQorICAg
ICAgICAgICAgaWYgKGkgPCBleHByZXNzaW9uU3RhY2suc2l6ZSgpKSB7CisgICAgICAgICAgICAg
ICAgKyttX3N0YWNrU2l6ZTsKICAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Np
b25TdGFjay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ldKTsKLSAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBUeXBlIHJldHVyblR5cGUgPSBk
YXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpOwotICAgICAgICAgICAgICAgIGVudHJ5LmVu
Y2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChyZXR1cm5UeXBlLCBjb25z
dGFudCh0b0IzVHlwZShyZXR1cm5UeXBlKSwgMHhiYmFkYmVlZikpOworICAgICAgICAgICAgICAg
IGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChyZXR1cm5U
eXBlLCBwdXNoKGNvbnN0YW50KHRvQjNUeXBlKHJldHVyblR5cGUpLCAweGJiYWRiZWVmKSkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCisKICAgICAvLyBUb3BMZXZlbCBkb2Vz
IG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2Ug
ZW1pdCBhIHJldHVybiBoZXJlLgogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpID09IEJsb2NrVHlw
ZTo6VG9wTGV2ZWwpCiAgICAgICAgIHJldHVybiBhZGRSZXR1cm4oZW50cnkuY29udHJvbERhdGEs
IGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKQEAgLTI0MDAsMTIgKzI4OTgsMTIgQEAg
QjM6OlZhbHVlKiBCM0lSR2VuZXJhdG9yOjpjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2Nr
KiBibG9jaywgT3JpZ2luIG9yaWdpbiwKICAgICBWZWN0b3I8QjM6OkNvbnN0cmFpbmVkVmFsdWU+
IGNvbnN0cmFpbmVkQXJndW1lbnRzOwogICAgIENhbGxJbmZvcm1hdGlvbiB3YXNtQ2FsbEluZm8g
PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3Ioc2lnbmF0dXJlKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkKLSAgICAgICAg
Y29uc3RyYWluZWRBcmd1bWVudHMuYXBwZW5kKEIzOjpDb25zdHJhaW5lZFZhbHVlKGFyZ3NbaV0s
IHdhc21DYWxsSW5mby5wYXJhbXNbaV0pKTsKKyAgICAgICAgY29uc3RyYWluZWRBcmd1bWVudHMu
YXBwZW5kKEIzOjpDb25zdHJhaW5lZFZhbHVlKGdldChibG9jaywgYXJnc1tpXSksIHdhc21DYWxs
SW5mby5wYXJhbXNbaV0pKTsKIAogICAgIG1fcHJvYy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5C
eXRlcyhXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCB3YXNt
Q2FsbEluZm8uaGVhZGVyQW5kQXJndW1lbnRTdGFja1NpemVJbkJ5dGVzKSk7CiAKICAgICBCMzo6
VHlwZSByZXR1cm5UeXBlID0gdG9CM1Jlc3VsdFR5cGUoJnNpZ25hdHVyZSk7Ci0gICAgQjM6OlBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9p
bnRWYWx1ZT4obV9wcm9jLCByZXR1cm5UeXBlLCBvcmlnaW4pOworICAgIFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCA9IG1fcHJvYy5hZGQ8UGF0Y2hwb2ludFZhbHVlPihyZXR1cm5UeXBlLCBv
cmlnaW4pOwogICAgIHBhdGNocG9pbnQtPmNsb2JiZXJFYXJseShSZWdpc3RlclNldDo6bWFjcm9T
Y3JhdGNoUmVnaXN0ZXJzKCkpOwogICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVy
U2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKICAgICBwYXRjaHBvaW50RnVuY3Rv
cihwYXRjaHBvaW50KTsKQEAgLTI0MTcsNiArMjkxNSw3IEBAIEIzOjpWYWx1ZSogQjNJUkdlbmVy
YXRvcjo6Y3JlYXRlQ2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmxvY2ssIE9yaWdpbiBvcmln
aW4sCiAgICAgICAgICAgICByZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoQjM6OlZhbHVlUmVwKHZh
bHVlTG9jYXRpb24pKTsKICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludHMgPSBX
VEZNb3ZlKHJlc3VsdENvbnN0cmFpbnRzKTsKICAgICB9CisgICAgYmxvY2stPmFwcGVuZChwYXRj
aHBvaW50KTsKICAgICByZXR1cm4gcGF0Y2hwb2ludDsKIH0KIApAQCAtMjQzOCwxMSArMjkzNywx
MSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8QjM6
OlR5cGU+JiB0dXBsZSA9IG1fcHJvYy50dXBsZUZvclR5cGUocmV0dXJuVHlwZSk7CiAgICAgICAg
ICAgICBBU1NFUlQoc2lnbmF0dXJlLnJldHVybkNvdW50KCkgPT0gdHVwbGUuc2l6ZSgpKTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQo
KTsgKytpKQotICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0dXBsZVtpXSwgY2FsbFJl
c3VsdCwgaSkpOworICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2gobV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxFeHRyYWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHR1cGxlW2ld
LCBjYWxsUmVzdWx0LCBpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgZGVmYXVsdDogewotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoY2FsbFJlc3VsdCk7Cisg
ICAgICAgICAgICByZXN1bHRzLmFwcGVuZChwdXNoKGNhbGxSZXN1bHQpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0NzEsOCArMjk3MCwxMCBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5
IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBj
aGVja2luZy4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8g
ZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQog
ICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0gICAgICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
ZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKGlzV2FzbUJsb2NrLCBw
YXRjaHBvaW50KTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3Ro
aXMsIGhhbmRsZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CiAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGpp
dCwgcGFyYW1zLCB0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1
bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsK
QEAgLTI0OTgsOCArMjk5OSwxMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMy
X3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAg
ICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRv
IHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJv
dW5kc0NoZWNraW5nKSk7Ci0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFtyZXR1cm5UeXBlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIFBhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKGlzRW1iZWRk
ZXJCbG9jaywgcGF0Y2hwb2ludCk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFt0aGlzLCBoYW5kbGUsIHJldHVyblR5cGVdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
KyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsK
ICAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3BhcmFtcy5wcm9jKCkucmVzdWx0
Q291bnQocmV0dXJuVHlwZSldLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwogICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgfSkpOwpAQCAtMjUyNyw4ICszMDMwLDEwIEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgdGhl
IHNpemUgcmVnaXN0ZXIgc2luY2UgdGhlIExMSW50IGFsd2F5cyBib3VuZHMgY2hlY2tzCiAgICAg
ICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcgfHwgbV9pbmZv
Lm1lbW9yeS5pc1NoYXJlZCgpKQogICAgICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9i
YmVyTGF0ZShSZWdpc3RlclNldCB7IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkuYm91bmRzQ2hl
Y2tpbmdTaXplUmVnaXN0ZXIgfSk7Ci0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAg
ICAgICAgICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNo
cG9pbnRGb3JFeGNlcHRpb25zKG1fY3VycmVudEJsb2NrLCBwYXRjaHBvaW50KTsKKyAgICAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3RoaXMsIGhhbmRsZSwgdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2Fm
ZVBhdGNoYWJsZU5lYXJDYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFz
ayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21U
b1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVu
dHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKQEAgLTI1NDMsNyArMzA0OCw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5k
aXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVJbmRleCA9IGFyZ3MudGFrZUxh
c3QoKTsKKyAgICBWYWx1ZSogY2FsbGVlSW5kZXggPSBnZXQoYXJncy50YWtlTGFzdCgpKTsKICAg
ICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CiAKICAg
ICBtX21ha2VzQ2FsbHMgPSB0cnVlOwpAQCAtMjU1MiwxMSArMzA1NywxMSBAQCBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdAogICAgIC8vIGNhbiBiZSB0byB0aGUgZW1iZWRkZXIgZm9yIG91ciBzdGFj
ayBjaGVjayBjYWxjdWxhdGlvbi4KICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6
bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5z
aXplKCkpKTsKIAotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXI7Ci0g
ICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVyOwotICAgIEV4cHJlc3Npb25UeXBlIGNh
bGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGg7CisgICAgVmFsdWUqIGNhbGxhYmxlRnVuY3Rpb25C
dWZmZXI7CisgICAgVmFsdWUqIGluc3RhbmNlc0J1ZmZlcjsKKyAgICBWYWx1ZSogY2FsbGFibGVG
dW5jdGlvbkJ1ZmZlckxlbmd0aDsKICAgICB7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHRhYmxl
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBw
b2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICAgICAgVmFsdWUqIHRhYmxlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgp
LCBvcmlnaW4oKSwKICAgICAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJf
dD4oSW5zdGFuY2U6Om9mZnNldE9mVGFibGVQdHIobV9udW1JbXBvcnRGdW5jdGlvbnMsIHRhYmxl
SW5kZXgpKSk7CiAgICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9y
aWdpbigpLAogICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KEZ1bmNSZWZUYWJs
ZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSkpOwpAQCAtMjU3OCwxNyArMzA4MywxNyBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdAogCiAgICAgY2FsbGVlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksIGNhbGxlZUluZGV4KTsKIAot
ICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb247CisgICAgVmFsdWUqIGNhbGxhYmxl
RnVuY3Rpb247CiAgICAgewogICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRh
YmxlIGluZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZvci4KLSAgICAgICAgRXhwcmVzc2lvblR5
cGUgb2Zmc2V0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBNdWws
IG9yaWdpbigpLAorICAgICAgICBWYWx1ZSogb2Zmc2V0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBNdWwsIG9yaWdpbigpLAogICAgICAgICAgICAgY2FsbGVlSW5k
ZXgsIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uKSkpOwogICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uQnVm
ZmVyLCBvZmZzZXQpOwogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQgaXNuJ3QuIEFuICJp
bnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlhbGl6ZWQuCiAg
ICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2UgY2FuIGp1c3Qg
bGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRleCBpcyAwLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCiAgICAgICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OnNpZ25hdHVy
ZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3VtZXMgaTY0Iik7
Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNpZ25hdHVyZUluZGV4ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2NCwgb3JpZ2lu
KCksIGNhbGxhYmxlRnVuY3Rpb24sIHNhZmVDYXN0PGludDMyX3Q+KFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSkpOworICAgICAgICBWYWx1ZSog
Y2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgc2Fm
ZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZTaWdu
YXR1cmVJbmRleCgpKSk7CiAgICAgICAgIHsKICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNr
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBv
cmlnaW4oKSwKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwKQEAgLTI2MDIsNyArMzEwNyw3IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0CiAKICAgICAgICAgLy8gQ2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVz
IHRoZSB2YWx1ZSB3ZSBleHBlY3QuCiAgICAgICAgIHsKLSAgICAgICAgICAgIEV4cHJlc3Npb25U
eXBlIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChz
aWduYXR1cmUpKTsKKyAgICAgICAgICAgIFZhbHVlKiBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlKSk7CiAgICAgICAgICAgICBDaGVj
a1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9w
cm9jLCBDaGVjaywgb3JpZ2luKCksCiAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBOb3RFcXVhbCwgb3JpZ2luKCksIGNhbGxlZVNpZ25hdHVy
ZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KSk7CiAKQEAgLTI2MTYsNyArMzEyMSw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0CiAgICAgICAgIGNhbGxlZUluZGV4LCBjb25zdGFudChw
b2ludGVyVHlwZSgpLCBzaXplb2YoSW5zdGFuY2UqKSkpOwogICAgIFZhbHVlKiBjYWxsZWVJbnN0
YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgaW5zdGFuY2VzQnVmZmVyLCBvZmZz
ZXQpKTsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4o
KSwKKyAgICBWYWx1ZSogY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9p
bnRlclR5cGUoKSwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sCiAgICAgICAgICAgICBzYWZl
Q2FzdDxpbnQzMl90PihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkVudHJ5
cG9pbnRMb2FkTG9jYXRpb24oKSkpKTsKIApAQCAtMjYyNSw3ICszMTMwLDcgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXQKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRM
aXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgRXhwcmVzc2lvblR5cGUgY2Fs
bGVlID0gYXJncy50YWtlTGFzdCgpOworICAgIFZhbHVlKiBjYWxsZWUgPSBnZXQoYXJncy50YWtl
TGFzdCgpKTsKICAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNp
emUoKSk7CiAgICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsKIApAQCAtMjY0MiwyNCArMzE0NywyNyBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxSZWYoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZQogICAgIFZhbHVlKiBjYWxsZWVJbnN0YW5jZSA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRl
clR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwganNDYWxsZWVJbnN0YW5jZSwgaW5zdGFuY2VPZmZz
ZXQpKTsKIAotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdp
bigpLAorICAgIFZhbHVlKiBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBw
b2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY2FsbGVlLAogICAgICAgICAgICAgc2FmZUNhc3Q8aW50
MzJfdD4oV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2Nh
dGlvbigpKSkpOwogCiAgICAgcmV0dXJuIGVtaXRJbmRpcmVjdENhbGwoY2FsbGVlSW5zdGFuY2Us
IGNhbGxlZUNvZGUsIHNpZ25hdHVyZSwgYXJncywgcmVzdWx0cyk7CiB9CiAKLXZvaWQgQjNJUkdl
bmVyYXRvcjo6dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUgcGhpLCBjb25zdCBFeHByZXNzaW9u
VHlwZSBzb3VyY2UpCit2b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5KFZhbHVlKiBwaGksIGNvbnN0
IEV4cHJlc3Npb25UeXBlIHNvdXJjZSkKIHsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgc291cmNlLCBwaGkpOworICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnZXQo
c291cmNlKSwgcGhpKTsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhC
bG9jayhjb25zdCBTdGFjayYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdCkK
K3ZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgU3RhY2smIHJl
c3VsdFN0YWNrLCBjb25zdCBDb250cm9sRGF0YSYgYmxvY2spCiB7Ci0gICAgQVNTRVJUKHJlc3Vs
dC5zaXplKCkgPD0gcmVzdWx0U3RhY2suc2l6ZSgpKTsKKyAgICBjb25zdCBWZWN0b3I8VmFsdWUq
PiYgcGhpcyA9IGJsb2NrLnBoaXM7CisgICAgc2l6ZV90IHJlc3VsdFNpemUgPSBwaGlzLnNpemUo
KTsKKworICAgIEFTU0VSVChyZXN1bHRTaXplIDw9IHJlc3VsdFN0YWNrLnNpemUoKSk7CiAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKLSAgICAgICAgdW5p
ZnkocmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxIC0gaV0sIHJlc3VsdFN0YWNrLmF0KHJlc3VsdFN0
YWNrLnNpemUoKSAtIDEgLSBpKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRT
aXplOyArK2kpCisgICAgICAgIHVuaWZ5KHBoaXNbcmVzdWx0U2l6ZSAtIDEgLSBpXSwgcmVzdWx0
U3RhY2suYXQocmVzdWx0U3RhY2suc2l6ZSgpIC0gMSAtIGkpKTsKIH0KIAogc3RhdGljIHZvaWQg
ZHVtcEV4cHJlc3Npb25TdGFjayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBjb25zdCBCM0lS
R2VuZXJhdG9yOjpTdGFjayYgZXhwcmVzc2lvblN0YWNrKQpAQCAtMjcwMyw4ICszMjExLDExIEBA
IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJz
ZUFuZENvbXBpbGUoQ29tcGlsYXRpb25DCiAKICAgICBjb21waWxhdGlvbkNvbnRleHQuZW1iZWRk
ZXJFbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAgY29tcGls
YXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+
KCk7CisgICAgY29tcGlsYXRpb25Db250ZXh0LnByb2NlZHVyZSA9IG1ha2VVbmlxdWU8UHJvY2Vk
dXJlPigpOwogCi0gICAgUHJvY2VkdXJlIHByb2NlZHVyZTsKKyAgICBQcm9jZWR1cmUmIHByb2Nl
ZHVyZSA9ICpjb21waWxhdGlvbkNvbnRleHQucHJvY2VkdXJlOworCisgICAgY29tcGlsYXRpb25D
b250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAK
ICAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRlcihbXSAoUHJpbnRTdHJlYW0mIG91dCwgT3Jp
Z2luIG9yaWdpbikgewogICAgICAgICBpZiAob3JpZ2luLmRhdGEoKSkKQEAgLTI3MjUsNiArMzIz
Niw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5n
PiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25DCiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdl
bmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rp
b24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKKyAgICBpckdlbmVyYXRvci5pbnNlcnRFbnRyeVN3
aXRjaCgpOwogICAgIGlyR2VuZXJhdG9yLmluc2VydENvbnN0YW50cygpOwogCiAgICAgcHJvY2Vk
dXJlLnJlc2V0UmVhY2hhYmlsaXR5KCk7CkBAIC0yNzM2LDE4ICszMjQ4LDQzIEBAIEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGUoQ29tcGlsYXRpb25DCiAgICAgZGF0YUxvZ0lmKFdhc21CM0lSR2VuZXJhdG9ySW50ZXJuYWw6
OnZlcmJvc2UsICJQb3N0IFNTQTogIiwgcHJvY2VkdXJlKTsKICAgICAKICAgICB7CisgICAgICAg
IGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY29tcGlsYXRpb25Nb2RlKSkKKyAgICAgICAg
ICAgIHByb2NlZHVyZS5jb2RlKCkuc2V0RGlzYXNzZW1ibGVyKG1ha2VVbmlxdWU8QjM6OkFpcjo6
RGlzYXNzZW1ibGVyPigpKTsKICAgICAgICAgQjM6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2Nl
ZHVyZSk7CiAgICAgICAgIEIzOjpnZW5lcmF0ZShwcm9jZWR1cmUsICpjb21waWxhdGlvbkNvbnRl
eHQud2FzbUVudHJ5cG9pbnRKSVQpOwogICAgICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVu
dHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7CiAgICAg
ICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvY2VkdXJlLmNh
bGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOwogICAgIH0KIAorICAgIHJlc3VsdC0+c3Rh
Y2ttYXBzID0gaXJHZW5lcmF0b3IudGFrZVN0YWNrbWFwcygpOworICAgIHJlc3VsdC0+ZXhjZXB0
aW9uSGFuZGxlcnMgPSBpckdlbmVyYXRvci50YWtlRXhjZXB0aW9uSGFuZGxlcnMoKTsKKwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMoVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYgaGFu
ZGxlcnMsIGNvbnN0IEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBjb25zdCBDb21waWxhdGlv
bkNvbnRleHQmIGNvbnRleHQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgaWYgKCFj
b250ZXh0LnByb2NlZHVyZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgZW50cnlw
b2ludEluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBudW1FbnRyeXBvaW50cyA9IGNvbnRleHQucHJv
Y2VkdXJlLT5udW1FbnRyeXBvaW50cygpOworICAgIGZvciAoY29uc3QgVW5saW5rZWRIYW5kbGVy
SW5mbyYgaGFuZGxlckluZm8gOiBmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZW50cnlwb2ludEluZGV4IDwgbnVtRW50cnlwb2ludHMpOworICAg
ICAgICBpZiAoaGFuZGxlckluZm8ubV90eXBlID09IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSkgewor
ICAgICAgICAgICAgaGFuZGxlcnMuYXBwZW5kKHsgfSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgICsrZW50cnlwb2ludEluZGV4OworICAgICAgICBoYW5kbGVy
cy5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KGNv
bnRleHQucHJvY2VkdXJlLT5jb2RlKCkuZW50cnlwb2ludExhYmVsKGVudHJ5cG9pbnRJbmRleCkp
KTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoZW50cnlwb2ludEluZGV4ID09IG51bUVudHJ5
cG9pbnRzIC0gMSk7Cit9CisKIC8vIEN1c3RvbSB3YXNtIG9wcy4gVGhlc2UgYXJlIHRoZSBvbmVz
IHRvbyBtZXNzeSB0byBkbyBpbiB3YXNtLmpzb24uCiAKLXZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1p
dENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUgb3BlcmF0aW9uLCBFeHByZXNzaW9uVHlwZSBs
ZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCkKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNr
c0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUgb3BlcmF0aW9uLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJp
Z2h0KQogewogICAgIEFTU0VSVChvcGVyYXRpb24gPT0gRGl2IHx8IG9wZXJhdGlvbiA9PSBNb2Qg
fHwgb3BlcmF0aW9uID09IFVEaXYgfHwgb3BlcmF0aW9uID09IFVNb2QpOwogICAgIGNvbnN0IEIz
OjpUeXBlIHR5cGUgPSBsZWZ0LT50eXBlKCk7CkBAIC0yNzc2LDEwNiArMzMxMywxMjUgQEAgdm9p
ZCBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSBvcGVyYXRp
b24sIEV4cHJlc3Npb25UeXBlIGwKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMkRpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25U
eXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVm
dFZhciwgRXhwcmVzc2lvblR5cGUgcmlnaHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gRGl2OworICAgIFZh
bHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVlKiByaWdodCA9IGdldChyaWdodFZh
cik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVz
dWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCkpOwogICAgIHJl
dHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVM+KEV4cHJlc3Npb25UeXBlIGxlZnRWYXIsIEV4cHJl
c3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IE1vZDsKKyAgICBWYWx1ZSogbGVmdCA9
IGdldChsZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVt
aXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hpbGwob3ApLCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCkpOwogICAg
IHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJEaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdo
dCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnRWYXIsIEV4
cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVEaXY7CisgICAgVmFsdWUqIGxl
ZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFyKTsKICAg
ICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyUmVtVT4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5
cGUgcmlnaHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
ICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVU1vZDsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChs
ZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVj
a3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7
CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0
ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4oRXhw
cmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjREaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZh
ciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0
IEIzOjpPcGNvZGUgb3AgPSBEaXY7CisgICAgVmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7Cisg
ICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JE
aXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3Vs
dCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3Jp
Z2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8Pgot
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KEV4cHJlc3Npb25UeXBl
IGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtUz4o
RXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5cGUgcmlnaHRWYXIsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBjb25zdCBCMzo6T3Bjb2Rl
IG9wID0gTW9kOworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVlKiBy
aWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0
LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0g
cHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIGNoaWxsKG9wKSwg
b3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8
PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlU+KEV4cHJlc3Npb25U
eXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2
VT4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5cGUgcmlnaHRWYXIsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBjb25zdCBCMzo6T3Bj
b2RlIG9wID0gVURpdjsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChsZWZ0VmFyKTsKKyAgICBWYWx1
ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwg
bGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gcHVz
aChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4oRXhwcmVzc2lvblR5cGUgbGVmdCwg
RXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNz
aW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBV
TW9kOworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVlKiByaWdodCA9
IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdo
dCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMkN0ej4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwog
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hw
b2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5jb3VudFRyYWlsaW5nWmVyb3Mz
MihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50
OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAog
dGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0ej4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihFeHByZXNzaW9uVHlw
ZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAg
ICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
SW50NjQsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6
U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAg
ICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczY0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBd
LmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9u
ZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBv
aW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyUG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJn
VmFyKTsKICNpZiBDUFUoWDg2XzY0KQogICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHND
b3VudFBvcHVsYXRpb24oKSkgewogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQz
Miwgb3JpZ2luKCkpOwpAQCAtMjg4NCwxOSArMzQ0MCwyMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyUG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eXBlJgogICAgICAgICAgICAgaml0LmNvdW50UG9wdWxhdGlvbjMyKHBhcmFtc1sxXS5ncHIoKSwg
cGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAgfSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVj
dHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAg
ICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogI2VuZGlmCiAKICAgICBWYWx1ZSogZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvblBvcGNvdW50MzIpKTsKLSAgICByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLCBF
ZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpOworICAgIHJlc3VsdCA9IHB1c2gobV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4o
KSwgRWZmZWN0czo6bm9uZSgpLCBmdW5jQWRkcmVzcywgYXJnKSk7CiAgICAgcmV0dXJuIHsgfTsK
IH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFBv
cGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihF
eHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAjaWYgQ1BVKFg4Nl82NCkK
ICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9uKCkpIHsKICAg
ICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKQEAgLTI5MDUs
MTkgKzM0NjIsMjAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFBvcGNu
dD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYKICAgICAgICAgICAgIGppdC5j
b3VudFBvcHVsYXRpb242NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAg
ICAgIH0pOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwot
ICAgICAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICAgICByZXN1bHQgPSBwdXNoKHBhdGNo
cG9pbnQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICNlbmRpZgogCiAgICAgVmFsdWUq
IGZ1bmNBZGRyZXNzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Q
b3Bjb3VudDY0KSk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2Fs
bFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLCBmdW5jQWRk
cmVzcywgYXJnKTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwgZnVu
Y0FkZHJlc3MsIGFyZykpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdl
dChhcmdWYXIpOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIERvdWJsZSwgb3JpZ2luKCkp
OwogICAgIGlmIChpc1g4NigpKQogICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdp
c3RlcnMgPSAxOwpAQCAtMjkzMiwxMyArMzQ5MCwxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPEY2NENvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZQogI2VuZGlmCiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5v
bmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hw
b2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFy
ZyA9IGdldChhcmdWYXIpOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEZsb2F0LCBvcmln
aW4oKSk7CiAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRj
aFJlZ2lzdGVycyA9IDE7CkBAIC0yOTUzLDY1ICszNTEyLDcwIEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uCiAjZW5kaWYKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0
czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChw
YXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9
IGdldChhcmdWYXIpOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIERvdWJsZSwgb3JpZ2lu
KCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
OwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQucm91
bmRUb3dhcmROZWFyZXN0SW50RG91YmxlKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigp
KTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwot
ICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsK
ICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyTmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyTmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIp
OwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEZsb2F0LCBvcmlnaW4oKSk7CiAgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5yb3VuZFRvd2FyZE5lYXJl
c3RJbnRGbG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CiAgICAgfSk7CiAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBw
YXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4o
RXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZh
bHVlPihtX3Byb2MsIERvdWJsZSwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChh
cmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgewogICAgICAgICBqaXQucm91bmRUb3dhcmRaZXJvRG91YmxlKHBhcmFtc1sxXS5m
cHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
ID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0
ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1h
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyVHJ1bmM+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9uVHlwZSBhcmdWYXIs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSog
YXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIG9y
aWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0
LnJvdW5kVG93YXJkWmVyb0Zsb2F0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsK
ICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAg
IHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAg
ICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFy
KTsKICAgICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0
X3Q+KC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1p
bigpKSkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1
aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptaW4oKSkgLSAxLjApKTsKICAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCkBAIC0zMDI4LDEz
ICszNTkyLDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NG
NjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiAgICAgICAgIGppdC50cnVuY2F0
ZURvdWJsZVRvSW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0p
OwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0
ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVy
biB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAg
IFZhbHVlKiBtYXggPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90Pigtc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOwog
ICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90Pihz
dGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7
CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzA1MSwxNCArMzYxNiwxNSBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvSW50MzIocGFy
YW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAg
ICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIAogdGVt
cGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2ND4o
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHBy
ZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1heCA9IGNv
bnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIC0yLjApKTsKICAgICBWYWx1
ZSogbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC0xLjApKTsK
ICAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCkBAIC0zMDc1LDEzICszNjQxLDE0IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5CiAgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvVWludDMyKHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7Cisg
ICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1w
bGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPihF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJl
c3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0gY29u
c3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0Pigt
Mi4wKSkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVp
bnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKICAgICBWYWx1ZSogb3V0T2ZCb3Vu
ZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3Jp
Z2luKCksCkBAIC0zMDk4LDEzICszNjY1LDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiAg
ICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9VaW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNb
MF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNo
cG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9
IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4oLXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ2NF90Pjo6bWluKCkpKSk7CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0
d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50NjRfdD46Om1pbigpKSkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMx
MjEsMTMgKzM2ODksMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRy
dW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRy
dW5jYXRlRG91YmxlVG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAg
ICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICBy
ZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7
CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90
PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigp
KSAqIC0yLjApKTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KC0xLjApKTsKICAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCkBAIC0zMTY0
LDEzICszNzMzLDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVu
Y1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiAgICAgICAgIGppdC50cnVu
Y2F0ZURvdWJsZVRvVWludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpLCBzY3Jh
dGNoLCBjb25zdGFudCk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVj
dHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2go
cGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmdWYXIs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSog
YXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3
aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ2NF90Pjo6bWluKCkpKSk7CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBi
aXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDY0X3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCkBAIC0z
MTg3LDEzICszNzU3LDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRU
cnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiAgICAgICAgIGppdC50
cnVuY2F0ZUZsb2F0VG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAg
ICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICBy
ZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7
CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+
KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkg
KiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQo
RmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0xLjApKSk7
CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzIzMCw3ICszODAxLDcgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb1VpbnQ2NChwYXJh
bXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSwgc2NyYXRjaCwgY29uc3RhbnQpOwogICAgIH0p
OwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0
ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVy
biB7IH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5oCmluZGV4IDFkNjYyMTBlMWI1MC4uMjg5MWQxZTQ0ZjNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTQwLDcgKzQwLDEzIEBA
CiAKIGV4dGVybiAiQyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKIAotbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQjMgewor
Y2xhc3MgUHJvY2VkdXJlOworfQorCituYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIE1lbW9yeUlu
Zm9ybWF0aW9uOwogCkBAIC00OCwxMCArNTQsMTMgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4
dCB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENDYWxsSGVscGVycz4gZW1iZWRkZXJFbnRyeXBvaW50
SklUOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDQ2FsbEhlbHBlcnM+IHdhc21FbnRyeXBvaW50SklU
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiB3YXNtRW50cnlwb2ludEJ5
cHJvZHVjdHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpQcm9jZWR1cmU+IHByb2NlZHVyZSB7
IG51bGxwdHIgfTsKIH07CiAKIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3Qg
RnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqID0g
bnVsbHB0cik7CiAKK3ZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoVmVjdG9y
PENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYgaGFuZGxlcnMsIGNv
bnN0IEludGVybmFsRnVuY3Rpb24qLCBjb25zdCBDb21waWxhdGlvbkNvbnRleHQmLCBMaW5rQnVm
ZmVyJik7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFlfQjNKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQkJRUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxh
bi5jcHAKaW5kZXggYWYyZmM3MmJhY2JiLi40NjZhMjYwYmZmMjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKQEAgLTY2LDYgKzY2LDcgQEAgYm9vbCBCQlFQ
bGFuOjpwcmVwYXJlSW1wbCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fd2FzbUlu
dGVybmFsRnVuY3Rpb25zLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX2V4Y2VwdGlv
bkhhbmRsZXJMb2NhdGlvbnMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fY29tcGls
YXRpb25Db250ZXh0cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV90aWVyVXBDb3Vu
dHMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogCkBAIC0xMDksNiArMTEwLDkgQEAgdm9pZCBC
QlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAorICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPj4gZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBmdW5jdGlvbi5nZXQoKSwg
Y29udGV4dCwgbGlua0J1ZmZlcik7CisKICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlID0g
bV9mdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3Vu
dCgpOwogICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbbV9mdW5jdGlvbkluZGV4XTsK
ICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoc2lnbmF0dXJlSW5kZXgpOwpAQCAtMTE4LDcgKzEyMiw3IEBAIHZvaWQgQkJRUGxhbjo6d29y
ayhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgIHsKLSAgICAgICAgUmVmPEJCUUNhbGxl
ZT4gY2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2lu
dCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24t
PmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKHRpZXJVcCksIFdURk1vdmUodW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMpKTsKKyAgICAgICAgUmVmPEJCUUNhbGxlZT4gY2FsbGVlID0gQkJR
Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbklu
ZGV4U3BhY2UpLCBXVEZNb3ZlKHRpZXJVcCksIFdURk1vdmUodW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5leGNl
cHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOwogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVM
b2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKICAgICAgICAgQVNT
RVJUKCFtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0pOwogICAgICAg
ICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7CkBAIC0xOTQsMTEgKzE5OCwxNSBA
QCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gQkJRUGxhbjo6Y29tcGlsZUZ1bmN0
aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZQogICAgIGJvb2wgZm9yY2VVc2luZ0IzID0gZmFsc2U7
CiAgICAgaWYgKE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpICYmIG1f
bW9kdWxlSW5mb3JtYXRpb24tPmNvZGVTZWN0aW9uU2l6ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJs
eUJCUUFpck1vZGVUaHJlc2hvbGQoKSkKICAgICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKKyAg
ICBlbHNlIGlmICghbV9tb2R1bGVJbmZvcm1hdGlvbi0+bV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNl
cHRpb25zLnF1aWNrR2V0KGZ1bmN0aW9uSW5kZXgpKQorICAgICAgICBmb3JjZVVzaW5nQjMgPSB0
cnVlOworICAgIGVsc2UgaWYgKCFPcHRpb25zOjp3YXNtQkJRVXNlc0FpcigpKQorICAgICAgICBm
b3JjZVVzaW5nQjMgPSB0cnVlOwogCi0gICAgaWYgKCFmb3JjZVVzaW5nQjMgJiYgT3B0aW9uczo6
d2FzbUJCUVVzZXNBaXIoKSkKLSAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VB
bmRDb21waWxlQWlyKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5k
ZXgsIHRpZXJVcCk7Ci0gICAgZWxzZQorICAgIGlmIChmb3JjZVVzaW5nQjMpCiAgICAgICAgIHBh
cnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwg
c2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6
OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCk7CisgICAgZWxzZQor
ICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIoY29udGV4
dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIAogICAg
IGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBMb2NrZXIg
bG9ja2VyIHsgbV9sb2NrIH07CkBAIC0yMjIsMTMgKzIzMCwxNSBAQCB2b2lkIEJCUVBsYW46OmRp
ZENvbXBsZXRlQ29tcGlsYXRpb24oKQogICAgICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVu
Y3Rpb25Db3VudCgpOwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKICAgICAgICAgeworICAg
ICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0
aW9uc1tmdW5jdGlvbkluZGV4XS5nZXQoKTsKICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6V2FzbSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAg
QmFzZTo6ZmFpbChtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rp
b24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fd2FzbUludGVy
bmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFr
ZVVuaXF1ZTxDb21waWxhdGlvbj4oCisgICAgICAgICAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxl
ckxvY2F0aW9ucyhtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0sIGZ1
bmN0aW9uLCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5lbnRy
eXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4oCiAgICAgICAgICAg
ICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldl
YkFzc2VtYmx5IEJCUSBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNp
Z25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1l
KGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdl
dChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAg
IFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgfQpA
QCAtMjcyLDcgKzI4Miw3IEBAIHZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3Qg
Q2FsbGVlSW5pdGlhbGl6ZXImIGNhbGxiYWNrKQogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24q
IGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4
XS5nZXQoKTsKICAgICAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGludGVybmFsRnVu
Y3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsK
LSAgICAgICAgUmVmPEJCUUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6
OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNl
LCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFj
ZSksIFdURk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1v
dmUobV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7Cisg
ICAgICAgIFJlZjxCQlFDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gQkJRQ2FsbGVlOjpj
cmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwg
bV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2Up
LCBXVEZNb3ZlKG1fdGllclVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3Zl
KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1v
dmUoZnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRs
ZXJzKSwgV1RGTW92ZShtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbaW50ZXJuYWxGdW5jdGlv
bkluZGV4XSkpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rp
b24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50cnlwb2lu
dENhbGxlZS5wdHIoKSkpOwogCiAgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRl
eCwgV1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBv
aW50Q2FsbGVlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QkJRUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAppbmRl
eCBkYmVmYzU0YWQ3NTAuLmRjMDAyMjc1NjYyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQkJRUGxhbi5oCkBAIC04Myw2ICs4Myw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBDb21waWxhdGlvbkNvbnRleHQmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mLCBUaWVyVXBDb3VudCopOwogCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CisgICAgVmVjdG9yPFZlY3RvcjxD
b2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4+IG1fZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9uczsKICAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIERlZmF1bHRIYXNoPHVpbnQzMl90PiwgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0
aW9uczsKICAgICBWZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4
dHM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4+IG1fdGllclVwQ291
bnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAppbmRleCAyMWQ5
N2IxM2NlZTAuLmVjZDAwYmVmMWVlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNhbGxlZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAorI2luY2x1ZGUgIkxMSW50RXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWVSZWdp
c3RyeS5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogCkBAIC01Niw2ICs1
NywxNSBAQCB2b2lkIENhbGxlZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIG91
dC5wcmludChtYWtlU3RyaW5nKG1faW5kZXhPck5hbWUpKTsKIH0KIAorY29uc3QgSGFuZGxlcklu
Zm8qIENhbGxlZTo6aGFuZGxlckZvckluZGV4KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgsIGNvbnN0
IFRhZyogdGFnKQoreworICAgIGlmICghbV9udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgp
KQorICAgICAgICBsaW5rRXhjZXB0aW9uSGFuZGxlcnModm0pOworICAgIHJldHVybiBIYW5kbGVy
SW5mbzo6aGFuZGxlckZvckluZGV4KG1fZXhjZXB0aW9uSGFuZGxlcnMsIGluZGV4LCB0YWcpOwor
fQorCiBKSVRDYWxsZWU6OkpJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUgY29tcGlsYXRp
b25Nb2RlLCBFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKICAgICA6IENhbGxlZShjb21waWxhdGlv
bk1vZGUpCiAgICAgLCBtX2VudHJ5cG9pbnQoV1RGTW92ZShlbnRyeXBvaW50KSkKQEAgLTY5LDYg
Kzc5LDMzIEBAIEpJVENhbGxlZTo6SklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21w
aWxhdGlvbk1vZGUsIEVudHJ5cG9pbnQmJiBlbnRyeXBvCiB7CiB9CiAKK0xMSW50Q2FsbGVlOjpM
TEludENhbGxlZShzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IGNvZGVCbG9jaywg
c2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+
JiYgbmFtZSkKKyAgICA6IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZSwg
aW5kZXgsIFdURk1vdmUobmFtZSkpCisgICAgLCBtX2NvZGVCbG9jayhXVEZNb3ZlKGNvZGVCbG9j
aykpCit7CisgICAgbV9udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzID0gbV9jb2RlQmxvY2stPm51
bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsKK30KKwordm9pZCBMTEludENhbGxlZTo6bGlua0V4
Y2VwdGlvbkhhbmRsZXJzKFZNJiB2bSkKK3sKKyAgICBJbnN0YW5jZSogaW5zdGFuY2UgPSB2bS53
YXNtQ29udGV4dC5sb2FkKCk7CisgICAgaWYgKHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5u
dW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKKyAgICAgICAgbV9leGNlcHRpb25IYW5kbGVy
cy5yZXNpemVUb0ZpdChjb3VudCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykgeworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5r
ZWRIYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAg
ICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fZXhjZXB0aW9uSGFuZGxlcnNbaV07CisgICAgICAg
ICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICptX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQo
dW5saW5rZWRIYW5kbGVyLm1fdGFyZ2V0KS5wdHIoKTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHRhcmdldDsKKyAgICAgICAgICAgIGlmICh1
bmxpbmtlZEhhbmRsZXIubV90eXBlID09IEhhbmRsZXJUeXBlOjpDYXRjaCkKKyAgICAgICAgICAg
ICAgICB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihM
TEludDo6aGFuZGxlV2FzbUNhdGNoKGluc3RydWN0aW9uLndpZHRoPFdhc21PcGNvZGVUcmFpdHM+
KCkpLmNvZGUoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGFyZ2V0ID0g
Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZVdh
c21DYXRjaEFsbChpbnN0cnVjdGlvbi53aWR0aDxXYXNtT3Bjb2RlVHJhaXRzPigpKS5jb2RlKCkp
OworCisgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUoaW5zdGFuY2UsIHVubGlua2VkSGFu
ZGxlciwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBMTEludENhbGxlZTo6
c2V0RW50cnlwb2ludChNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRy
eXBvaW50KQogewogICAgIG1fZW50cnlwb2ludCA9IGVudHJ5cG9pbnQ7CkBAIC0xMDQsNiArMTQx
LDM4IEBAIHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPiBMTEludENhbGxlZTo6cmFuZ2UoKSBjb25z
dAogICAgIHJldHVybiB7IG51bGxwdHIsIG51bGxwdHIgfTsKIH0KIAordm9pZCBPcHRpbWl6aW5n
SklUQ2FsbGVlOjpsaW5rRXhjZXB0aW9uSGFuZGxlcnMoVk0mIHZtKQoreworICAgIEluc3RhbmNl
KiBpbnN0YW5jZSA9IHZtLndhc21Db250ZXh0LmxvYWQoKTsKKworICAgIHNpemVfdCBjb3VudCA9
IG1fdW5saW5rZWRFeGNlcHRpb25IYW5kbGVycy5zaXplKCk7CisgICAgbV9leGNlcHRpb25IYW5k
bGVycy5yZXNpemVUb0ZpdChjb3VudCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKSB7CisgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9leGNlcHRpb25IYW5k
bGVyc1tpXTsKKyAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5k
bGVyID0gbV91bmxpbmtlZEV4Y2VwdGlvbkhhbmRsZXJzW2ldOworICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBsb2NhdGlvbiA9IG1fZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9uc1tpXTsKKyAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKGluc3RhbmNlLCB1
bmxpbmtlZEhhbmRsZXIsIGxvY2F0aW9uKTsKKyAgICB9CisgICAgbV91bmxpbmtlZEV4Y2VwdGlv
bkhhbmRsZXJzLmNsZWFyKCk7CisgICAgbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLmNsZWFy
KCk7Cit9CisKK2NvbnN0IFZlY3RvcjxPU1JFbnRyeVZhbHVlPiYgT3B0aW1pemluZ0pJVENhbGxl
ZTo6c3RhY2ttYXAoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KSBjb25zdAoreworICAgIGF1
dG8gaXRlciA9IG1fc3RhY2ttYXBzLmZpbmQoY2FsbFNpdGVJbmRleCk7CisgICAgaWYgKGl0ZXIg
PT0gbV9zdGFja21hcHMuZW5kKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX3N0YWNr
bWFwcykgeworICAgICAgICAgICAgZGF0YUxvZyhwYWlyLmtleS5iaXRzKCksICI6ICIpOworICAg
ICAgICAgICAgZm9yIChhdXRvIHZhbHVlIDogcGFpci52YWx1ZSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKHZhbHVlLCAiLCAiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiIik7CisgICAgICAg
IH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBtX3N0YWNrbWFwcy5lbmQoKSk7
CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworfQorCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGVlLmgKaW5kZXggMDgxZGI3NmU0MmY5Li43NzE1MzZmNDA5MmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKQEAgLTMyLDcgKzMyLDkgQEAKICNp
bmNsdWRlICJXYXNtQ29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgog
I2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIldhc21IYW5kbGVy
SW5mby5oIgogI2luY2x1ZGUgIldhc21JbmRleE9yTmFtZS5oIgorI2luY2x1ZGUgIldhc21MTElu
dFRpZXJVcENvdW50ZXIuaCIKICNpbmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKICNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIApAQCAtNTksNiArNjEsOCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygp
ID0gMDsKICAgICB2aXJ0dWFsIHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPiByYW5nZSgpIGNvbnN0
ID0gMDsKIAorICAgIGNvbnN0IEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9ySW5kZXgoVk0mLCB1bnNp
Z25lZCwgY29uc3QgVGFnKik7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCiAgICAg
dmlydHVhbCB2b2lkIHNldE9TUkVudHJ5Q2FsbGVlKFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4m
JikKICAgICB7CkBAIC02OCwxMyArNzIsMjQgQEAgcHVibGljOgogCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIEZ1bmN0aW9uQ29kZUJsb2NrKiBmdW5j
dGlvbkNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogcHJvdGVjdGVkOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUsIHNpemVfdCwgc3RkOjpw
YWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmKTsKIAorICAgIHZpcnR1YWwg
dm9pZCBsaW5rRXhjZXB0aW9uSGFuZGxlcnMoVk0mKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgQ29tcGlsYXRpb25N
b2RlIG1fY29tcGlsYXRpb25Nb2RlOwogICAgIEluZGV4T3JOYW1lIG1faW5kZXhPck5hbWU7CisK
K3Byb3RlY3RlZDoKKyAgICB1bnNpZ25lZCBtX251bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMgeyAw
IH07CisgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwogfTsKIAog
Y2xhc3MgSklUQ2FsbGVlIDogcHVibGljIENhbGxlZSB7CkBAIC05OSw2NCArMTE0LDg2IEBAIHBy
aXZhdGU6CiAgICAgV2FzbTo6RW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7CiB9OwogCi0jaWYgRU5B
QkxFKFdFQkFTU0VNQkxZX0IzSklUKQotY2xhc3MgT01HQ2FsbGVlIGZpbmFsIDogcHVibGljIEpJ
VENhbGxlZSB7CitjbGFzcyBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgZmluYWwgOiBwdWJsaWMg
SklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE9NR0NhbGxlZT4gY3JlYXRlKFdh
c206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25z
dCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQorICAgIHN0YXRpYyBSZWY8RW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPTUdDYWxsZWUoV1RGTW92ZShlbnRyeXBv
aW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKFdURk1v
dmUoZW50cnlwb2ludCkpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgT01HQ2FsbGVlKFdhc206
OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBO
YW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQotICAgICAgICA6IEpJVENhbGxlZShXYXNtOjpDb21w
aWxhdGlvbk1vZGU6Ok9NR01vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3Zl
KG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKQorICAgIEVtYmVkZGVyRW50cnlwb2ludENh
bGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKKyAgICAgICAgOiBKSVRDYWxsZWUo
V2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpFbWJlZGRlckVudHJ5cG9pbnRNb2RlLCBXVEZNb3ZlKGVu
dHJ5cG9pbnQpKQogICAgIHsKICAgICB9CiB9OwogCi1jbGFzcyBPTUdGb3JPU1JFbnRyeUNhbGxl
ZSBmaW5hbCA6IHB1YmxpYyBKSVRDYWxsZWUgeworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0Iz
SklUKQorY2xhc3MgT3B0aW1pemluZ0pJVENhbGxlZSA6IHB1YmxpYyBKSVRDYWxsZWUgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNyZWF0ZShXYXNtOjpF
bnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFt
ZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mJiB1bmxpbmtlZENhbGxzKQorICAgIGNvbnN0IFZlY3RvcjxPU1JFbnRyeVZhbHVlPiYg
c3RhY2ttYXAoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KSBjb25zdDsKKworcHJvdGVjdGVk
OgorICAgIE9wdGltaXppbmdKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIG1vZGUsIFdh
c206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25z
dCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3Rv
cjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZv
PiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBK
SVRDYWxsZWUobW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSks
IFdURk1vdmUodW5saW5rZWRDYWxscykpCisgICAgICAgICwgbV9zdGFja21hcHMoV1RGTW92ZShz
dGFja21hcHMpKQorICAgICAgICAsIG1fdW5saW5rZWRFeGNlcHRpb25IYW5kbGVycyhXVEZNb3Zl
KGV4Y2VwdGlvbkhhbmRsZXJzKSkKKyAgICAgICAgLCBtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMoV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdURk1vdmUoZW50cnlwb2lu
dCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBsb29w
SW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV91bmxpbmtlZEV4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSA9PSBtX2V4Y2VwdGlvbkhhbmRsZXJM
b2NhdGlvbnMuc2l6ZSgpKTsKKyAgICAgICAgbV9udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzID0g
bV91bmxpbmtlZEV4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsKICAgICB9CiAKLSAgICB1bnNpZ25l
ZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplOyB9Ci0gICAgdWludDMyX3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9sb29wSW5kZXg7IH0KKyAgICB2b2lkIGxpbmtFeGNlcHRpb25IYW5kbGVycyhWTSYpIGZp
bmFsOwogCiBwcml2YXRlOgotICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdhc206OkVudHJ5cG9p
bnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVm
UHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYm
IHVubGlua2VkQ2FsbHMpCi0gICAgICAgIDogSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9k
ZTo6T01HRm9yT1NSRW50cnlNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92
ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkKLSAgICAgICAgLCBtX29zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKLSAgICAgICAgLCBtX2xv
b3BJbmRleChsb29wSW5kZXgpCisgICAgSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBWZWN0b3I8T1NS
RW50cnlWYWx1ZT4+IG1fc3RhY2ttYXBzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZv
PiBtX3VubGlua2VkRXhjZXB0aW9uSGFuZGxlcnM7CisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxh
YmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiBtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnM7
Cit9OworCitjbGFzcyBPTUdDYWxsZWUgZmluYWwgOiBwdWJsaWMgT3B0aW1pemluZ0pJVENhbGxl
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxPTUdDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRy
eXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSos
IFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiYgdW5saW5rZWRDYWxscywgSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBWZWN0b3I8T1NSRW50
cnlWYWx1ZT4+JiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiBleGNl
cHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpCiAgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBPTUdDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdU
Rk1vdmUobmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwg
V1RGTW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucykpKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emU7Ci0gICAgdWludDMyX3QgbV9sb29wSW5kZXg7Citwcml2YXRlOgorICAgIE9NR0NhbGxlZShX
YXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29u
c3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscywgSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBWZWN0
b3I8T1NSRW50cnlWYWx1ZT4+JiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5m
bz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpCisgICAgICAgIDog
T3B0aW1pemluZ0pJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIFdURk1v
dmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2Fs
bHMpLCBXVEZNb3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZN
b3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKQorICAgIHsKKyAgICB9CiB9OwotI2VuZGlm
CiAKLWNsYXNzIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSBmaW5hbCA6IHB1YmxpYyBKSVRDYWxs
ZWUgeworY2xhc3MgT01HRm9yT1NSRW50cnlDYWxsZWUgZmluYWwgOiBwdWJsaWMgT3B0aW1pemlu
Z0pJVENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbWJlZGRlckVudHJ5cG9pbnRD
YWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKKyAgICBzdGF0aWMg
UmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5
cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNl
Y3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQz
Ml90IGxvb3BJbmRleCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRD
YWxscywgSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4+JiYgc3Rh
Y2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywg
VmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2Vw
dGlvbkhhbmRsZXJMb2NhdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeUNhbGxlZShXVEZNb3ZlKGVudHJ5
cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwg
bG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKHN0YWNrbWFwcyksIFdU
Rk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMpKSk7CiAgICAgfQogCisgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsgfQorICAgIHVpbnQz
Ml90IGxvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9vcEluZGV4OyB9CisKIHByaXZhdGU6
Ci0gICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBv
aW50KQotICAgICAgICA6IEpJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkVtYmVkZGVy
RW50cnlwb2ludE1vZGUsIFdURk1vdmUoZW50cnlwb2ludCkpCisgICAgT01HRm9yT1NSRW50cnlD
YWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpw
YWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscywgSGFzaE1hcDxDYWxsU2l0ZUluZGV4
LCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4+JiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5k
bGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpCisgICAg
ICAgIDogT3B0aW1pemluZ0pJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9T
UkVudHJ5TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdU
Rk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShleGNlcHRp
b25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpCisgICAgICAg
ICwgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUp
CisgICAgICAgICwgbV9sb29wSW5kZXgobG9vcEluZGV4KQogICAgIHsKICAgICB9CisKKyAgICB1
bnNpZ25lZCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CisgICAgdWludDMyX3QgbV9sb29w
SW5kZXg7CiB9OwogCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQotY2xhc3MgQkJRQ2Fs
bGVlIGZpbmFsIDogcHVibGljIEpJVENhbGxlZSB7CitjbGFzcyBCQlFDYWxsZWUgZmluYWwgOiBw
dWJsaWMgT3B0aW1pemluZ0pJVENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxCQlFD
YWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4
LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3Rk
Ojp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQorICAgIHN0YXRpYyBSZWY8QkJRQ2FsbGVl
PiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3Rk
OjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5p
cXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscywgSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBWZWN0b3I8
T1NSRW50cnlWYWx1ZT4+JiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4m
JiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCQlFDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5k
ZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodGllclVwQ291bnQpLCBXVEZNb3ZlKHVubGlua2Vk
Q2FsbHMpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJCUUNhbGxlZShXVEZNb3Zl
KGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0aWVyVXBDb3VudCks
IFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShleGNl
cHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpKTsKICAg
ICB9CiAKICAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUoKSB7IHJldHVy
biBtX29zckVudHJ5Q2FsbGVlLmdldCgpOyB9CkBAIC0xNzcsOCArMjE0LDggQEAgcHVibGljOgog
ICAgIFRpZXJVcENvdW50KiB0aWVyVXBDb3VudCgpIHsgcmV0dXJuIG1fdGllclVwQ291bnQuZ2V0
KCk7IH0KIAogcHJpdmF0ZToKLSAgICBCQlFDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5
cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNl
Y3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3Vu
dCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKLSAgICAg
ICAgOiBKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBXVEZNb3ZlKGVu
dHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkK
KyAgICBCQlFDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRl
eCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0
ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscywgSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBW
ZWN0b3I8T1NSRW50cnlWYWx1ZT4+JiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVy
SW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpCisgICAgICAg
IDogT3B0aW1pemluZ0pJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIFdU
Rk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2Vk
Q2FsbHMpLCBXVEZNb3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBX
VEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKQogICAgICAgICAsIG1fdGllclVwQ291
bnQoV1RGTW92ZSh0aWVyVXBDb3VudCkpCiAgICAgewogICAgIH0KQEAgLTIxOCwxNSArMjU1LDE1
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBMTEludFRpZXJVcENvdW50ZXImIHRpZXJVcENvdW50
ZXIoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+dGllclVwQ291bnRlcigpOyB9CisgICAgRnVuY3Rp
b25Db2RlQmxvY2sqIGZ1bmN0aW9uQ29kZUJsb2NrKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9j
b2RlQmxvY2suZ2V0KCk7IH0KICNlbmRpZgogCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBsaW5rRXhj
ZXB0aW9uSGFuZGxlcnMoVk0mKSBmaW5hbDsKKwogcHJpdmF0ZToKLSAgICBMTEludENhbGxlZShz
dGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IGNvZGVCbG9jaywgc2l6ZV90IGluZGV4
LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKLSAg
ICAgICAgOiBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpMTEludE1vZGUsIGluZGV4LCBX
VEZNb3ZlKG5hbWUpKQotICAgICAgICAsIG1fY29kZUJsb2NrKFdURk1vdmUoY29kZUJsb2NrKSkK
LSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fY29kZUJsb2NrKTsKLSAgICB9CisgICAg
TExJbnRDYWxsZWUoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgc2l6ZV90IGlu
ZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYpOworCiAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCiAgICAgUmVmUHRyPEpJVENhbGxlZT4gbV9y
ZXBsYWNlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCBj
MGNiMzFiN2NiZjAuLmZkMzIzNmJlNzYzNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Gb3JtYXQuaApAQCAtMjksMTEgKzI5LDE0IEBACiAKICNpbmNsdWRlICJDb2RlTG9jYXRpb24u
aCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlckF0T2Zmc2V0
TGlzdC5oIgorI2luY2x1ZGUgIldhc21IYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIldhc21NZW1v
cnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21OYW1lLmgiCiAjaW5jbHVkZSAiV2FzbU5h
bWVTZWN0aW9uLmgiCisjaW5jbHVkZSAiV2FzbU9TUkVudHJ5RGF0YS5oIgogI2luY2x1ZGUgIldh
c21PcHMuaCIKICNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25h
dHVyZS5oIgpAQCAtNzYsNiArNzksMjAgQEAgaW5saW5lIGJvb2wgaXNWYWx1ZVR5cGUoVHlwZSB0
eXBlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAoraW5saW5lIEpTU3RyaW5nKiB0eXBlVG9TdHJp
bmcoVk0mIHZtLCBUeXBlS2luZCB0eXBlKQoreworICAgICNkZWZpbmUgVFlQRV9DQVNFKG1hY3Jv
TmFtZSwgdmFsdWUsIGIzLCBpbmMsIHdhc21OYW1lKSBcCisgICAgICAgIGNhc2UgVHlwZUtpbmQ6
Om1hY3JvTmFtZTogXAorICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwg
I3dhc21OYW1lKTsgXAorCisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBGT1JfRUFDSF9XQVNN
X1RZUEUoVFlQRV9DQVNFKQorICAgIH0KKworICAgICN1bmRlZiBUWVBFX0NBU0UKK30KKwogaW5s
aW5lIGJvb2wgaXNTdWJ0eXBlKFR5cGUgc3ViLCBUeXBlIHBhcmVudCkKIHsKICAgICBpZiAoc3Vi
LmlzTnVsbGFibGUoKSAmJiAhcGFyZW50LmlzTnVsbGFibGUoKSkKQEAgLTExNSw2ICsxMzIsNyBA
QCBlbnVtIGNsYXNzIEV4dGVybmFsS2luZCA6IHVpbnQ4X3QgewogICAgIFRhYmxlID0gMSwKICAg
ICBNZW1vcnkgPSAyLAogICAgIEdsb2JhbCA9IDMsCisgICAgRXhjZXB0aW9uID0gNCwKIH07CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEludD4KQEAgLTEyNSw2ICsxNDMsNyBAQCBpbmxpbmUgYm9vbCBp
c1ZhbGlkRXh0ZXJuYWxLaW5kKEludCB2YWwpCiAgICAgY2FzZSBzdGF0aWNfY2FzdDxJbnQ+KEV4
dGVybmFsS2luZDo6VGFibGUpOgogICAgIGNhc2Ugc3RhdGljX2Nhc3Q8SW50PihFeHRlcm5hbEtp
bmQ6Ok1lbW9yeSk6CiAgICAgY2FzZSBzdGF0aWNfY2FzdDxJbnQ+KEV4dGVybmFsS2luZDo6R2xv
YmFsKToKKyAgICBjYXNlIHN0YXRpY19jYXN0PEludD4oRXh0ZXJuYWxLaW5kOjpFeGNlcHRpb24p
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTM0
LDYgKzE1Myw3IEBAIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6
OkZ1bmN0aW9uKSA9PSAwLCAiV2FzbSBuZWVkcyBGdW5jdGlvCiBzdGF0aWNfYXNzZXJ0KHN0YXRp
Y19jYXN0PGludD4oRXh0ZXJuYWxLaW5kOjpUYWJsZSkgICAgPT0gMSwgIldhc20gbmVlZHMgVGFi
bGUgdG8gaGF2ZSB0aGUgdmFsdWUgMSIpOwogc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+
KEV4dGVybmFsS2luZDo6TWVtb3J5KSAgID09IDIsICJXYXNtIG5lZWRzIE1lbW9yeSB0byBoYXZl
IHRoZSB2YWx1ZSAyIik7CiBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGludD4oRXh0ZXJuYWxL
aW5kOjpHbG9iYWwpICAgPT0gMywgIldhc20gbmVlZHMgR2xvYmFsIHRvIGhhdmUgdGhlIHZhbHVl
IDMiKTsKK3N0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6OkV4Y2Vw
dGlvbikgICA9PSA0LCAiV2FzbSBuZWVkcyBFeGNlcHRpb24gdG8gaGF2ZSB0aGUgdmFsdWUgNCIp
OwogCiBpbmxpbmUgY29uc3QgY2hhciogbWFrZVN0cmluZyhFeHRlcm5hbEtpbmQga2luZCkKIHsK
QEAgLTE0Miw2ICsxNjIsNyBAQCBpbmxpbmUgY29uc3QgY2hhciogbWFrZVN0cmluZyhFeHRlcm5h
bEtpbmQga2luZCkKICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHJldHVybiAidGFibGUi
OwogICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHJldHVybiAibWVtb3J5IjsKICAgICBj
YXNlIEV4dGVybmFsS2luZDo6R2xvYmFsOiByZXR1cm4gImdsb2JhbCI7CisgICAgY2FzZSBFeHRl
cm5hbEtpbmQ6OkV4Y2VwdGlvbjogcmV0dXJuICJ0YWciOwogICAgIH0KICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAiPyI7CkBAIC0zNzIsNiArMzkzLDggQEAg
c3RydWN0IEVudHJ5cG9pbnQgewogc3RydWN0IEludGVybmFsRnVuY3Rpb24gewogICAgIFdURl9N
QUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8
V2FzbUVudHJ5UHRyVGFnPiBjYWxsZWVNb3ZlTG9jYXRpb247CisgICAgU3RhY2tNYXBzIHN0YWNr
bWFwczsKKyAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gZXhjZXB0aW9uSGFuZGxlcnM7
CiAgICAgRW50cnlwb2ludCBlbnRyeXBvaW50OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAppbmRleCBlYTc1ZmUyZjZiMGYu
LjcyZjNlNjQxMzJjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uQ29kZUJsb2NrLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOCArMjgsMTAgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiSGFuZGxl
ckluZm8uaCIKICNpbmNsdWRlICJJbnN0cnVjdGlvblN0cmVhbS5oIgogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgIldhc21IYW5kbGVySW5mby5oIgogI2luY2x1
ZGUgIldhc21MTEludFRpZXJVcENvdW50ZXIuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTEyMCw2ICsxMjIsMTAgQEAgcHVibGljOgogICAgIGNv
bnN0IEp1bXBUYWJsZSYganVtcFRhYmxlKHVuc2lnbmVkIHRhYmxlSW5kZXgpIGNvbnN0OwogICAg
IHVuc2lnbmVkIG51bWJlck9mSnVtcFRhYmxlcygpIGNvbnN0OwogCisgICAgc2l6ZV90IG51bWJl
ck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbkhhbmRsZXJz
LnNpemUoKTsgfQorICAgIFVubGlua2VkSGFuZGxlckluZm8mIGV4Y2VwdGlvbkhhbmRsZXIoaW50
IGluZGV4KSB7IHJldHVybiBtX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQorICAgIHZvaWQg
YWRkRXhjZXB0aW9uSGFuZGxlcihjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyKSB7
IG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKGhhbmRsZXIpOyB9CisKIHByaXZhdGU6CiAgICAg
dXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQsIGludD47CiAKQEAgLTEzOSw2ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIE91dE9mTGlu
ZUp1bXBUYXJnZXRzIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHM7CiAgICAgTExJbnRUaWVyVXBDb3Vu
dGVyIG1fdGllclVwQ291bnRlcjsKICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2p1bXBUYWJsZXM7
CisgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CiB9
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRleCA0ZTZiODMyMjA0MDcuLmM1ZTY0NDMy
NzczMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9u
UGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFy
c2VyLmgKQEAgLTM3LDcgKzM3LDE0IEBAIGVudW0gY2xhc3MgQmxvY2tUeXBlIHsKICAgICBJZiwK
ICAgICBCbG9jaywKICAgICBMb29wLAotICAgIFRvcExldmVsCisgICAgVG9wTGV2ZWwsCisgICAg
VHJ5LAorICAgIENhdGNoLAorfTsKKworZW51bSBjbGFzcyBDYXRjaEtpbmQgeworICAgIENhdGNo
LAorICAgIENhdGNoQWxsLAogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRW5jbG9zaW5nU3RhY2ss
IHR5cGVuYW1lIE5ld1N0YWNrPgpAQCAtMTQ3LDYgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbmRleEZvckxvY2FsKHVpbnQzMl90
Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbmRleEZvckds
b2JhbCh1aW50MzJfdCYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlRnVuY3Rpb25JbmRleCh1aW50MzJfdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIHBhcnNlRXhjZXB0aW9uSW5kZXgodWludDMyX3QmKTsKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJyYW5jaFRhcmdldCh1aW50MzJfdCYpOwogCiAg
ICAgc3RydWN0IFRhYmxlSW5pdEltbWVkaWF0ZXMgewpAQCAtMjExLDYgKzIxOSwxMiBAQCBwcml2
YXRlOgogICAgIHVuc2lnbmVkIG1fbG9vcEluZGV4IHsgMCB9OwogfTsKIAordGVtcGxhdGU8dHlw
ZW5hbWUgQ29udHJvbFR5cGU+CitzdGF0aWMgYm9vbCBpc1RyeU9yQ2F0Y2goQ29udHJvbFR5cGUm
IGRhdGEpCit7CisgICAgcmV0dXJuIENvbnRyb2xUeXBlOjppc1RyeShkYXRhKSB8fCBDb250cm9s
VHlwZTo6aXNDYXRjaChkYXRhKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIEZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihDb250ZXh0JiBjb250ZXh0LCBj
b25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykKICAg
ICA6IFBhcnNlcihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCkKQEAgLTU3NSw2ICs1ODks
MTYgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VGdW5jdGlvbkluZGV4KHVp
bnQzMl90JiByZXN1bHRJbmRleCkgLT4gUGFydGkKICAgICByZXR1cm4geyB9OwogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2VFeGNlcHRpb25JbmRleCh1aW50MzJfdCYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgdWludDMyX3QgZXhjZXB0aW9uSW5kZXg7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoZXhjZXB0aW9uSW5kZXgpLCAiY2FuJ3QgcGFyc2UgZXhjZXB0aW9uIGluZGV4
Iik7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihleGNlcHRpb25JbmRleCA+PSBtX2luZm8u
ZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSwgImV4Y2VwdGlvbiBpbmRleCAiLCBleGNlcHRpb25J
bmRleCwgIiBpcyBpbnZhbGlkLCBsaW1pdCBpcyAiLCBtX2luZm8uZXhjZXB0aW9uSW5kZXhTcGFj
ZVNpemUoKSk7CisgICAgcmVzdWx0ID0gZXhjZXB0aW9uSW5kZXg7CisgICAgcmV0dXJuIHsgfTsK
K30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnBhcnNlQnJhbmNoVGFyZ2V0KHVpbnQzMl90JiByZXN1bHRUYXJnZXQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKQEAgLTEzMzMsNiArMTM1NywxMTkgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllf
U1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAg
Y2FzZSBUcnk6IHsKKyAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5s
aW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCB0cnkncyBzaWduYXR1cmUiKTsKKworICAgICAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGlubGluZVNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyBhcmd1bWVudHMgb24gc3RhY2sgZm9y
IHRyeSBibG9jay4gVHJ5ZSBleHBlY3RzICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3Vu
dCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgd2VyZSBwcmVz
ZW50LiBUcnkgYmxvY2sgaGFzIHNpZ25hdHVyZTogIiwgaW5saW5lU2lnbmF0dXJlLT50b1N0cmlu
ZygpKTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgp
IC0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAg
ICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFja1tvZmZzZXQg
KyBpXS50eXBlKCkgIT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKSwgIlRyeSBleHBlY3Rz
IHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5h
cmd1bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBtX2V4cHJlc3Npb25T
dGFja1tpXS50eXBlKCkua2luZCk7CisKKyAgICAgICAgaW50NjRfdCBvbGRTaXplID0gbV9leHBy
ZXNzaW9uU3RhY2suc2l6ZSgpOworICAgICAgICBTdGFjayBuZXdTdGFjazsKKyAgICAgICAgQ29u
dHJvbFR5cGUgY29udHJvbDsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkVHJ5
KGlubGluZVNpZ25hdHVyZSwgbV9leHByZXNzaW9uU3RhY2ssIGNvbnRyb2wsIG5ld1N0YWNrKSk7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU2l6ZSwgb2xkU2l6ZSAtIG1fZXhwcmVzc2lvblN0
YWNrLnNpemUoKSA9PSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgICAg
IEFTU0VSVChuZXdTdGFjay5zaXplKCkgPT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCkpOworCisgICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZCh7IFdURk1vdmUobV9leHByZXNz
aW9uU3RhY2spLCB7IH0sIFdURk1vdmUoY29udHJvbCkgfSk7CisgICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrID0gV1RGTW92ZShuZXdTdGFjayk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgY2FzZSBDYXRjaDogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fY29udHJv
bFN0YWNrLnNpemUoKSA9PSAxLCAiY2FuJ3QgdXNlIGNhdGNoIGJsb2NrIGF0IHRoZSB0b3AtbGV2
ZWwgb2YgYSBmdW5jdGlvbiIpOworCisgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4Owor
ICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhj
ZXB0aW9uSW5kZXgpKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBt
X2luZm8uc2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRl
eCk7CisgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlID0gU2lnbmF0
dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisKKyAgICAgICAgQ29udHJvbEVu
dHJ5JiBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisgICAgICAgIFdBU01f
VkFMSURBVE9SX0ZBSUxfSUYoIWlzVHJ5T3JDYXRjaChjb250cm9sRW50cnkuY29udHJvbERhdGEp
LCAiY2F0Y2ggYmxvY2sgaXNuJ3QgYXNzb2NpYXRlZCB0byBhIHRyeSIpOworICAgICAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOwor
CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsKKyAgICAgICAgU3RhY2sgcHJlQ2F0Y2hTdGFj
azsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc3dhcChwcmVDYXRjaFN0YWNrKTsKKyAgICAg
ICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2goZXhjZXB0aW9uSW5kZXgsIGV4Y2Vw
dGlvblNpZ25hdHVyZSwgcHJlQ2F0Y2hTdGFjaywgY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhLCBy
ZXN1bHRzKSk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSA9PSByZXN1bHRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAg
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2ln
bmF0dXJlLmFyZ3VtZW50KGkpLCByZXN1bHRzW2ldKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBjYXNlIENhdGNoQWxsOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
bV9jb250cm9sU3RhY2suc2l6ZSgpID09IDEsICJjYW4ndCB1c2UgY2F0Y2ggYmxvY2sgYXQgdGhl
IHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBjb250
cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisKKyAgICAgICAgV0FTTV9WQUxJREFU
T1JfRkFJTF9JRighaXNUcnlPckNhdGNoKGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSksICJjYXRj
aCBibG9jayBpc24ndCBhc3NvY2lhdGVkIHRvIGEgdHJ5Iik7CisgICAgICAgIFdBU01fRkFJTF9J
Rl9IRUxQRVJfRkFJTFModW5pZnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSk7CisKKyAgICAg
ICAgUmVzdWx0TGlzdCByZXN1bHRzOworICAgICAgICBTdGFjayBwcmVDYXRjaFN0YWNrOworICAg
ICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKHByZUNhdGNoU3RhY2spOworICAgICAgICBXQVNN
X1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYXRjaEFsbChwcmVDYXRjaFN0YWNrLCBjb250cm9sRW50
cnkuY29udHJvbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNl
IERlbGVnYXRlOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2su
c2l6ZSgpID09IDEsICJjYW4ndCB1c2UgZGVsZWdhdGUgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1
bmN0aW9uIik7CisKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENv
bnRyb2xFbnRyeSBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOworICAg
ICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnkoY29udHJvbEVu
dHJ5LmNvbnRyb2xEYXRhKSwgImRlbGVnYXRlIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsK
KworICAgICAgICBDb250cm9sVHlwZSYgdGFyZ2V0RGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29u
dHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdLmNvbnRyb2xEYXRhOworICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnkodGFyZ2V0RGF0YSkgJiYgIUNv
bnRyb2xUeXBlOjppc1RvcExldmVsKHRhcmdldERhdGEpLCAiZGVsZWdhdGUgdGFyZ2V0IGlzbid0
IGEgdHJ5IG9yIHRoZSB0b3AgbGV2ZWwgYmxvY2siKTsKKworICAgICAgICBXQVNNX1RSWV9BRERf
VE9fQ09OVEVYVChhZGREZWxlZ2F0ZSh0YXJnZXREYXRhLCBjb250cm9sRW50cnkuY29udHJvbERh
dGEpKTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeShjb250cm9sRW50
cnkuY29udHJvbERhdGEpKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZW5kQmxv
Y2soY29udHJvbEVudHJ5LCBtX2V4cHJlc3Npb25TdGFjaykpOworICAgICAgICBtX2V4cHJlc3Np
b25TdGFjay5zd2FwKGNvbnRyb2xFbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgY2FzZSBUaHJvdzogeworICAgICAgICB1aW50
MzJfdCBleGNlcHRpb25JbmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhw
YXJzZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisgICAgICAgIFNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUV4Y2VwdGlvbklu
ZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOworICAgICAgICBjb25zdCBTaWduYXR1cmUmIGV4Y2Vw
dGlvblNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OworCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2suc2l6
ZSgpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIlRvbyBmZXcgYXJndW1l
bnRzIG9uIHN0YWNrIGZvciB0aGUgZXhjZXB0aW9uIGJlaW5nIHRocm93bi4gVGhlIGV4Y2VwdGlv
biBleHBlY3RzICIsIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICIsIGJ1dCBv
bmx5ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB3ZXJlIHByZXNlbnQuIEV4Y2VwdGlv
biBoYXMgc2lnbmF0dXJlOiAiLCBleGNlcHRpb25TaWduYXR1cmUudG9TdHJpbmcoKSk7CisgICAg
ICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGV4Y2VwdGlv
blNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CisgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4gYXJnczsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJncy50cnlSZXNlcnZlQ2Fw
YWNpdHkoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0
ZSBlbm91Z2ggbWVtb3J5IGZvciB0aHJvdydzICIsIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCksICIgYXJndW1lbnRzIik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAg
IFR5cGVkRXhwcmVzc2lvbiBhcmcgPSBtX2V4cHJlc3Npb25TdGFjay5hdChvZmZzZXQgKyBpKTsK
KyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoYXJnLnR5cGUoKSAhPSBleGNlcHRp
b25TaWduYXR1cmUuYXJndW1lbnQoaSksICJUaGUgZXhjZXB0aW9uIGJlaW5nIHRocm93biBleHBl
Y3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCAiLCBpLCAiIHRvIGJlICIsIGV4Y2VwdGlvblNpZ25h
dHVyZS5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBhcmcudHlw
ZSgpLmtpbmQpOworICAgICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQoYXJnKTsKKyAgICAg
ICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1ZUZyb21TdGFjaygpOworICAgICAgICB9CisgICAg
ICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhvZmZzZXQpOworCisgICAgICAgIFdBU01fVFJZ
X0FERF9UT19DT05URVhUKGFkZFRocm93KGV4Y2VwdGlvbkluZGV4LCBhcmdzLCBtX2V4cHJlc3Np
b25TdGFjaykpOworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIFJldGhyb3c6IHsKKyAgICAgICAgdWludDMyX3Qg
dGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFy
Z2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250cm9sU3Rh
Y2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7CisgICAg
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEp
LCAicmV0aHJvdyBkb2Vzbid0IHJlZmVyIHRvIGEgY2F0Y2ggYmxvY2siKTsKKworICAgICAgICBX
QVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRSZXRocm93KHRhcmdldCwgZGF0YSkpOworICAgICAg
ICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
ICAgICBjYXNlIEJyOgogICAgIGNhc2UgQnJJZjogewogICAgICAgICB1aW50MzJfdCB0YXJnZXQ7
CkBAIC0xNDg3LDYgKzE2MjQsNjAgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCisgICAgY2FzZSBDYXRjaDogeworICAgICAgICB1aW50MzJfdCBleGNl
cHRpb25JbmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2Vw
dGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2Uo
ZXhjZXB0aW9uSW5kZXgpOworICAgICAgICBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25h
dHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworCisgICAg
ICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKKyAgICAgICAgICAgIHJldHVybiB7IH07
CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9jb250cm9sU3RhY2subGFzdCgpOwor
ICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1RyeU9yQ2F0Y2goZGF0YS5jb250cm9s
RGF0YSksICJjYXRjaCBibG9jayBpc24ndCBhc3NvY2lhdGVkIHRvIGEgdHJ5Iik7CisKKyAgICAg
ICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDA7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0g
eyB9OworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CisgICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRleCwgZXhjZXB0aW9u
U2lnbmF0dXJlLCBkYXRhLmNvbnRyb2xEYXRhLCByZXN1bHRzKSk7CisKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSByZXN1bHRzLnNp
emUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5j
b25zdHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkpLCByZXN1bHRz
W2ldKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIENhdGNoQWxsOiB7
CisgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKKyAgICAgICAgICAgIHJldHVy
biB7IH07CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9jb250cm9sU3RhY2subGFz
dCgpOworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMDsKKyAgICAgICAgbV9leHByZXNz
aW9uU3RhY2sgPSB7IH07CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzVHJ5T3JD
YXRjaChkYXRhLmNvbnRyb2xEYXRhKSwgImNhdGNoIGJsb2NrIGlzbid0IGFzc29jaWF0ZWQgdG8g
YSB0cnkiKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2hBbGxUb1Vu
cmVhY2hhYmxlKGRhdGEuY29udHJvbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBjYXNlIERlbGVnYXRlOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9j
b250cm9sU3RhY2suc2l6ZSgpID09IDEsICJjYW4ndCB1c2UgZGVsZWdhdGUgYXQgdGhlIHRvcC1s
ZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAg
ICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOwor
CisgICAgICAgIENvbnRyb2xFbnRyeSBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay50YWtl
TGFzdCgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNU
cnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSwgImRlbGVnYXRlIGlzbid0IGFzc29jaWF0ZWQg
dG8gYSB0cnkiKTsKKworICAgICAgICBDb250cm9sVHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNr
W21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdLmNvbnRyb2xEYXRhOworICAgICAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkgJiYgIUNv
bnRyb2xUeXBlOjppc1RvcExldmVsKGRhdGEpLCAiZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5
IGJsb2NrIik7CisKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRGVsZWdhdGVU
b1VucmVhY2hhYmxlKGRhdGEsIGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworICAgICAgICBT
dGFjayBlbXB0eVN0YWNrOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbmRU
b1VucmVhY2hhYmxlKGNvbnRyb2xFbnRyeSwgZW1wdHlTdGFjaykpOworICAgICAgICBtX2V4cHJl
c3Npb25TdGFjay5zd2FwKGNvbnRyb2xFbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorCiAgICAgY2FzZSBFbmQ6IHsKICAgICAgICAgaWYg
KG1fdW5yZWFjaGFibGVCbG9ja3MgPT0gMSkgewogICAgICAgICAgICAgQ29udHJvbEVudHJ5IGRh
dGEgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOwpAQCAtMTQ5NSw4ICsxNjg2LDEwIEBAIGF1
dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkg
LT4gUGFydGlhbFJlc3VsdAogICAgICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gV1RG
TW92ZShkYXRhLmVsc2VCbG9ja1N0YWNrKTsKICAgICAgICAgICAgICAgICBXQVNNX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKHVuaWZ5KGRhdGEuY29udHJvbERhdGEpKTsKICAgICAgICAgICAgICAgICBX
QVNNX1RSWV9BRERfVE9fQ09OVEVYVChlbmRCbG9jayhkYXRhLCBtX2V4cHJlc3Npb25TdGFjaykp
OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoYWRkRW5kVG9VbnJlYWNoYWJsZShkYXRhKSk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIFN0YWNrIGVtcHR5U3RhY2s7CisgICAgICAgICAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQoYWRkRW5kVG9VbnJlYWNoYWJsZShkYXRhLCBlbXB0eVN0YWNrKSk7
CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoZGF0
YS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CiAgICAgICAgIH0KQEAgLTE1MDYsNiArMTY5OSw3
IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNz
aW9uKCkgLT4gUGFydGlhbFJlc3VsdAogCiAgICAgY2FzZSBMb29wOgogICAgIGNhc2UgSWY6Cisg
ICAgY2FzZSBUcnk6CiAgICAgY2FzZSBCbG9jazogewogICAgICAgICBtX3VucmVhY2hhYmxlQmxv
Y2tzKys7CiAgICAgICAgIEJsb2NrU2lnbmF0dXJlIHVudXNlZDsKQEAgLTE1NzcsMTIgKzE3NzEs
MjAgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJl
c3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgfQogCiAgICAgY2FzZSBCcjoKLSAgICBjYXNl
IEJySWY6IHsKKyAgICBjYXNlIEJySWY6CisgICAgY2FzZSBSZXRocm93OiB7CiAgICAgICAgIHVp
bnQzMl90IHRhcmdldDsKICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUJy
YW5jaFRhcmdldCh0YXJnZXQpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKKyAgICBj
YXNlIFRocm93OiB7CisgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4OworICAgICAgICBX
QVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhjZXB0aW9uSW5k
ZXgpKTsKKworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIGNhc2UgSTMyQ29uc3Q6
IHsKICAgICAgICAgaW50MzJfdCB1bnVzZWQ7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFySW50MzIodW51c2VkKSwgImNhbid0IGdldCBpbW1lZGlhdGUgZm9yICIsIG1fY3Vy
cmVudE9wY29kZSwgIiBpbiB1bnJlYWNoYWJsZSBjb250ZXh0Iik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLmQ0ZGRhMzEzYTE3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5mby5jcHAKQEAgLTAsMCArMSwxMDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21IYW5kbGVySW5mby5oIgorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCisKK25hbWVzcGFjZSBK
U0MgeworbmFtZXNwYWNlIFdhc20geworCit2b2lkIEhhbmRsZXJJbmZvOjppbml0aWFsaXplKElu
c3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRJbmZv
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbGFiZWwpCit7
CisgICAgbV90eXBlID0gdW5saW5rZWRJbmZvLm1fdHlwZTsKKyAgICBtX3N0YXJ0ID0gdW5saW5r
ZWRJbmZvLm1fc3RhcnQ7CisgICAgbV9lbmQgPSB1bmxpbmtlZEluZm8ubV9lbmQ7CisgICAgbV90
YXJnZXQgPSB1bmxpbmtlZEluZm8ubV90YXJnZXQ7CisgICAgbV90cnlEZXB0aCA9IHVubGlua2Vk
SW5mby5tX3RyeURlcHRoOworICAgIG1fbmF0aXZlQ29kZSA9IGxhYmVsOworCisgICAgc3dpdGNo
IChtX3R5cGUpIHsKKyAgICBjYXNlIEhhbmRsZXJUeXBlOjpDYXRjaDoKKyAgICAgICAgbV90YWcg
PSAmaW5zdGFuY2UtPnRhZyh1bmxpbmtlZEluZm8ubV9leGNlcHRpb25JbmRleE9yRGVsZWdhdGVU
YXJnZXQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSGFuZGxlclR5cGU6OkNhdGNoQWxs
OgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgSGFuZGxlclR5cGU6OkRlbGVnYXRlOgorICAg
ICAgICBtX2RlbGVnYXRlVGFyZ2V0ID0gdW5saW5rZWRJbmZvLm1fZXhjZXB0aW9uSW5kZXhPckRl
bGVnYXRlVGFyZ2V0OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2NvbnN0IEhhbmRsZXJJ
bmZvKiBIYW5kbGVySW5mbzo6aGFuZGxlckZvckluZGV4KGNvbnN0IFZlY3RvcjxIYW5kbGVySW5m
bz4mIGV4ZXB0aW9uSGFuZGxlcnMsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBXYXNtOjpUYWcqIGV4
Y2VwdGlvblRhZykKK3sKKyAgICBib29sIGRlbGVnYXRpbmcgPSBmYWxzZTsKKyAgICB1bnNpZ25l
ZCBkZWxlZ2F0ZVRhcmdldCA9IDA7CisgICAgZm9yIChhdXRvJiBoYW5kbGVyIDogZXhlcHRpb25I
YW5kbGVycykgeworICAgICAgICAvLyBIYW5kbGVycyBhcmUgb3JkZXJlZCBpbm5lcm1vc3QgZmly
c3QsIHNvIHRoZSBmaXJzdCBoYW5kbGVyIHdlIGVuY291bnRlcgorICAgICAgICAvLyB0aGF0IGNv
bnRhaW5zIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyB0aGUgY29ycmVjdCBoYW5kbGVyIHRvIHVzZS4K
KyAgICAgICAgLy8gVGhpcyBpbmRleCB1c2VkIGlzIGVpdGhlciB0aGUgQnl0ZWNvZGVPZmZzZXQg
b3IgYSBDYWxsU2l0ZUluZGV4LgorICAgICAgICBpZiAoaGFuZGxlci5tX3N0YXJ0IDw9IGluZGV4
ICYmIGhhbmRsZXIubV9lbmQgPiBpbmRleCkgeworICAgICAgICAgICAgaWYgKGRlbGVnYXRpbmcp
IHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5tX3RyeURlcHRoICE9IGRlbGVnYXRlVGFy
Z2V0KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBkZWxl
Z2F0aW5nID0gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgbWF0Y2gg
PSBmYWxzZTsKKyAgICAgICAgICAgIHN3aXRjaCAoaGFuZGxlci5tX3R5cGUpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIEhhbmRsZXJUeXBlOjpDYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgbWF0
Y2ggPSBleGNlcHRpb25UYWcgJiYgKmhhbmRsZXIubV90YWcgPT0gKmV4Y2VwdGlvblRhZzsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBIYW5kbGVyVHlw
ZTo6Q2F0Y2hBbGw6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBIYW5kbGVyVHlwZTo6RGVs
ZWdhdGU6CisgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRpbmcgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBkZWxlZ2F0ZVRhcmdldCA9IGhhbmRsZXIubV9kZWxlZ2F0ZVRhcmdldDsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghbWF0Y2gpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHJldHVy
biAmaGFuZGxlcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJ
bmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhkYTc3YzhiZmUxNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5mby5o
CkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNs
dWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgSW5zdGFuY2U7CitjbGFzcyBUYWc7
CisKK2VudW0gY2xhc3MgSGFuZGxlclR5cGUgeworICAgIENhdGNoID0gMCwKKyAgICBDYXRjaEFs
bCA9IDEsCisgICAgRGVsZWdhdGUgPSAyLAorfTsKKworc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7
CisgICAgSGFuZGxlclR5cGUgbV90eXBlOworICAgIHVpbnQzMl90IG1fc3RhcnQ7CisgICAgdWlu
dDMyX3QgbV9lbmQ7CisgICAgdWludDMyX3QgbV90YXJnZXQ7CisgICAgdWludDMyX3QgbV90cnlE
ZXB0aDsKKyAgICB1aW50MzJfdCBtX2V4Y2VwdGlvbkluZGV4T3JEZWxlZ2F0ZVRhcmdldDsKK307
CisKK3N0cnVjdCBVbmxpbmtlZEhhbmRsZXJJbmZvIDogcHVibGljIEhhbmRsZXJJbmZvQmFzZSB7
CisgICAgVW5saW5rZWRIYW5kbGVySW5mbygpCisgICAgeworICAgIH0KKworICAgIFVubGlua2Vk
SGFuZGxlckluZm8oSGFuZGxlclR5cGUgaGFuZGxlclR5cGUsIHVpbnQzMl90IHN0YXJ0LCB1aW50
MzJfdCBlbmQsIHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgdHJ5RGVwdGgsIHVpbnQzMl90IGV4
Y2VwdGlvbkluZGV4T3JEZWxlZ2F0ZVRhcmdldCkKKyAgICB7CisgICAgICAgIG1fdHlwZSA9IGhh
bmRsZXJUeXBlOworICAgICAgICBtX3N0YXJ0ID0gc3RhcnQ7CisgICAgICAgIG1fZW5kID0gZW5k
OworICAgICAgICBtX3RhcmdldCA9IHRhcmdldDsKKyAgICAgICAgbV90cnlEZXB0aCA9IHRyeURl
cHRoOworICAgICAgICBtX2V4Y2VwdGlvbkluZGV4T3JEZWxlZ2F0ZVRhcmdldCA9IGV4Y2VwdGlv
bkluZGV4T3JEZWxlZ2F0ZVRhcmdldDsKKyAgICB9Cit9OworCitzdHJ1Y3QgSGFuZGxlckluZm8g
OiBwdWJsaWMgSGFuZGxlckluZm9CYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgSGFuZGxlckluZm8q
IGhhbmRsZXJGb3JJbmRleChjb25zdCBWZWN0b3I8SGFuZGxlckluZm8+JiBleGVwdGlvbkhhbmRs
ZXJzLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgV2FzbTo6VGFnKiBleGNlcHRpb25UYWcpOworCisg
ICAgdm9pZCBpbml0aWFsaXplKEluc3RhbmNlKiwgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPik7CisKKyAgICBj
b25zdCBXYXNtOjpUYWcmIHRhZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBl
ID09IEhhbmRsZXJUeXBlOjpDYXRjaCk7CisgICAgICAgIHJldHVybiAqbV90YWc7CisgICAgfQor
CisgICAgdW5zaWduZWQgZGVsZWdhdGVUYXJnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBIYW5kbGVyVHlwZTo6RGVsZWdhdGUpOworICAgICAgICByZXR1cm4gbV9k
ZWxlZ2F0ZVRhcmdldDsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4gbV9uYXRpdmVDb2RlOworCitwcml2YXRlOgorICAgIHVuaW9uIHsK
KyAgICAgICAgY29uc3QgV2FzbTo6VGFnKiBtX3RhZzsKKyAgICAgICAgdW5zaWduZWQgbV9kZWxl
Z2F0ZVRhcmdldDsKKyAgICB9OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtSW5zdGFuY2UuY3BwCmluZGV4IGZmZDc1YzhkMGM4Zi4uNmZjYjdmMTNkNWIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKQEAgLTkwLDcgKzkw
LDkgQEAgUmVmPEluc3RhbmNlPiBJbnN0YW5jZTo6Y3JlYXRlKENvbnRleHQqIGNvbnRleHQsIFJl
ZjxNb2R1bGU+JiYgbW9kdWxlLCBFbnRyeUZyYW0KICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyAo
Tm90TnVsbCwgZmFzdE1hbGxvYyhhbGxvY2F0aW9uU2l6ZShtb2R1bGUtPm1vZHVsZUluZm9ybWF0
aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpLCBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCku
dGFibGVDb3VudCgpKSkpIEluc3RhbmNlKGNvbnRleHQsIFdURk1vdmUobW9kdWxlKSwgcG9pbnRl
clRvVG9wRW50cnlGcmFtZSwgcG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCwgV1RGTW92ZShzdG9y
ZVRvcENhbGxGcmFtZSkpKTsKIH0KIAotSW5zdGFuY2U6On5JbnN0YW5jZSgpIHsgfQorSW5zdGFu
Y2U6On5JbnN0YW5jZSgpCit7Cit9CiAKIHNpemVfdCBJbnN0YW5jZTo6ZXh0cmFNZW1vcnlBbGxv
Y2F0ZWQoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2Uu
aAppbmRleCA2MGUxNGNiNWFjMDYuLmEyYWQ2NWE3ZGI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTIxMCw2ICsyMTAsMTAgQEAgcHVibGljOgogICAg
ICAgICBtX3N0b3JlVG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CiAgICAgfQogCisgICAgdm9pZCBh
ZGRUYWcoY29uc3QgVGFnJiB0YWcpIHsgbV90YWdzLmFwcGVuZChtYWtlUmVmKHRhZykpOyB9Cisg
ICAgdm9pZCBhZGRUYWcoVGFnJiYgdGFnKSB7IG1fdGFncy5hcHBlbmQoYWRvcHRSZWYodGFnKSk7
IH0KKyAgICBjb25zdCBUYWcmIHRhZyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV90YWdz
W2ldOyB9CisKIHByaXZhdGU6CiAgICAgSW5zdGFuY2UoQ29udGV4dCosIFJlZjxNb2R1bGU+JiYs
IEVudHJ5RnJhbWUqKiwgdm9pZCoqLCBTdG9yZVRvcENhbGxGcmFtZUNhbGxiYWNrJiYpOwogICAg
IApAQCAtMjM3LDYgKzI0MSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVm
PEdsb2JhbD4sIEludEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPHVpbnQzMl90Pj4gbV9saW5rZWRHbG9iYWxzOwogICAgIEJpdFZlY3RvciBtX3Bhc3Np
dmVFbGVtZW50czsKICAgICBCaXRWZWN0b3IgbV9wYXNzaXZlRGF0YVNlZ21lbnRzOworICAgIFZl
Y3RvcjxSZWZQdHI8Y29uc3QgVGFnPj4gbV90YWdzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dEdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5l
cmF0b3IuY3BwCmluZGV4IDgxYTVjZGJjYWUzMi4uYTEwZmFmODlhYjJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKQEAgLTYyLDgg
KzYyLDI2IEBAIHB1YmxpYzoKICAgICAgICAgUmVmPExhYmVsPiBtX2FsdGVybmF0ZTsKICAgICB9
OwogCi0gICAgc3RydWN0IENvbnRyb2xUeXBlIDogcHVibGljIFZhcmlhbnQ8Q29udHJvbExvb3As
IENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWY+IHsKLSAgICAgICAgdXNp
bmcgQmFzZSA9IFZhcmlhbnQ8Q29udHJvbExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJs
b2NrLCBDb250cm9sSWY+OworICAgIHN0cnVjdCBDb250cm9sVHJ5IHsKKyAgICAgICAgUmVmPExh
YmVsPiBtX3RyeTsKKyAgICAgICAgdW5zaWduZWQgbV90cnlEZXB0aDsKKyAgICB9OworCisgICAg
c3RydWN0IENvbnRyb2xDYXRjaCB7CisgICAgICAgIENhdGNoS2luZCBtX2tpbmQ7CisgICAgICAg
IFJlZjxMYWJlbD4gbV90cnlTdGFydDsKKyAgICAgICAgUmVmPExhYmVsPiBtX3RyeUVuZDsKKyAg
ICAgICAgdW5zaWduZWQgbV90cnlEZXB0aDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fZXhj
ZXB0aW9uOworICAgIH07CisKKyAgICBzdHJ1Y3QgQ2F0Y2hSZXdyaXRlSW5mbyB7CisgICAgICAg
IHVuc2lnbmVkIG1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5RGVw
dGg7CisgICAgfTsKKworICAgIHN0cnVjdCBDb250cm9sVHlwZSA6IHB1YmxpYyBWYXJpYW50PENv
bnRyb2xMb29wLCBDb250cm9sVG9wTGV2ZWwsIENvbnRyb2xCbG9jaywgQ29udHJvbElmLCBDb250
cm9sVHJ5LCBDb250cm9sQ2F0Y2g+IHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IFZhcmlhbnQ8Q29u
dHJvbExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWYsIENvbnRy
b2xUcnksIENvbnRyb2xDYXRjaD47CiAKICAgICAgICAgQ29udHJvbFR5cGUoKQogICAgICAgICAg
ICAgOiBCYXNlKENvbnRyb2xCbG9jayB7IH0pCkBAIC05MCw4ICsxMDgsMjkgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbElm
IHsgV1RGTW92ZShhbHRlcm5hdGUpIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIGJv
b2wgaXNJZihjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxDb250cm9sSWY+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBDb250cm9s
VHlwZSB0cnlfKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBS
ZWY8TGFiZWw+JiYgdHJ5XywgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbiwgdW5zaWduZWQg
dHJ5RGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWdu
YXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNv
bnRpbnVhdGlvbiksIENvbnRyb2xUcnkgeyBXVEZNb3ZlKHRyeV8pLCB0cnlEZXB0aCB9KTsKKyAg
ICAgICAgfQorCisgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBjYXRjaF8oQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZjxMYWJlbD4mJiB0cnlTdGFydCwg
UmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbiwgUmVmPExhYmVsPiB0cnlFbmQsIHVuc2lnbmVk
IHRyeURlcHRoLCBWaXJ0dWFsUmVnaXN0ZXIgZXhjZXB0aW9uKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUt
PmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sQ2F0Y2ggeyBD
YXRjaEtpbmQ6OkNhdGNoLCBXVEZNb3ZlKHRyeVN0YXJ0KSwgV1RGTW92ZSh0cnlFbmQpLCB0cnlE
ZXB0aCwgZXhjZXB0aW9uIH0pOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgaXNM
b29wKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPENvbnRyb2xMb29wPihjb250cm9sKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1Rv
cExldmVsKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPENvbnRyb2xUb3BMZXZlbD4oY29udHJvbCk7IH0KKyAgICAgICAgc3RhdGljIGJv
b2wgaXNCbG9jayhjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxDb250cm9sQmxvY2s+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBi
b29sIGlzSWYoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8Q29udHJvbElmPihjb250cm9sKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBp
c1RyeShjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxDb250cm9sVHJ5Pihjb250cm9sKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0Fu
eUNhdGNoKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPENvbnRyb2xDYXRjaD4oY29udHJvbCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wg
aXNDYXRjaChjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xDYXRjaD4oY29udHJvbCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgQ29udHJvbENhdGNoIGNh
dGNoXyA9IFdURjo6Z2V0PENvbnRyb2xDYXRjaD4oY29udHJvbCk7CisgICAgICAgICAgICByZXR1
cm4gY2F0Y2hfLm1fa2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoOworICAgICAgICB9CiAKICAgICAg
ICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1NpemU7IH0KICAg
ICAgICAgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1
cmU7IH0KQEAgLTE1MiwxNyArMTkxLDI0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBjb21waWxp
bmc6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOwogICAgIH0KIAotICAgIExMSW50R2VuZXJh
dG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29u
c3QgU2lnbmF0dXJlJik7CisgICAgTExJbnRHZW5lcmF0b3IoTW9kdWxlSW5mb3JtYXRpb24mLCB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKTsKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4gZmluYWxpemUoKTsKIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wY29kZT4KKyAgICB2b2lkIHJlcGF0Y2goY29uc3QgQ2F0Y2hSZXdyaXRlSW5mbyYp
OworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhwcmVzc2lvbkxpc3RBLCB0eXBlbmFtZSBFeHBy
ZXNzaW9uTGlzdEI+CiAgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNz
aW9uTGlzdEEmIGRlc3RpbmF0aW9ucywgY29uc3QgRXhwcmVzc2lvbkxpc3RCJiB2YWx1ZXMpCiAg
ICAgewogICAgICAgICBBU1NFUlQoZGVzdGluYXRpb25zLnNpemUoKSA8PSB2YWx1ZXMuc2l6ZSgp
KTsKICAgICAgICAgYXV0byBvZmZzZXQgPSB2YWx1ZXMuc2l6ZSgpIC0gZGVzdGluYXRpb25zLnNp
emUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIGRlc3RpbmF0aW9uc1tpXSwg
dmFsdWVzW29mZnNldCArIGldKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXN0
aW5hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8mIHNyYyA9IHZhbHVlc1tv
ZmZzZXQgKyBpXTsKKyAgICAgICAgICAgIGF1dG8mIGRzdCA9IGRlc3RpbmF0aW9uc1tpXTsKKyAg
ICAgICAgICAgIGlmICgoVmlydHVhbFJlZ2lzdGVyKXNyYyAhPSAoVmlydHVhbFJlZ2lzdGVyKWRz
dCkKKyAgICAgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIGRzdCwgc3JjKTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIGVudW0gTm9Db25zaXN0ZW5jeUNoZWNrVGFnIHsgTm9Db25zaXN0
ZW5jeUNoZWNrIH07CkBAIC0yNDMsMTEgKzI4OSwyMSBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sVHlwZSYsIFN0YWNrJik7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUo
Q29udHJvbFR5cGUmKTsKIAorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYg
cmVzdWx0LCBTdGFjayYgbmV3U3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUm
LCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGwoU3RhY2smLCBD
b250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENh
dGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZVRvVW5yZWFj
aGFibGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJik7CisKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbFR5
cGUmLCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbFR5cGUmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250
cm9sVHlwZSo+JiB0YXJnZXRzLCBDb250cm9sVHlwZSYgZGVmYXVsdFRhcmdldHMsIFN0YWNrJiBl
eHByZXNzaW9uU3RhY2spOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVu
ZEJsb2NrKENvbnRyb2xFbnRyeSYsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwotICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVu
dHJ5JiwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9IHsgfSwgYm9vbCB1bnJlYWNoYWJs
ZSA9IHRydWUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRv
VW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiwgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgYm9vbCB1
bnJlYWNoYWJsZSA9IHRydWUpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlLCBjb25zdCBTdGFjayYpOwogCiAgICAgLy8gQ2Fs
bHMKQEAgLTMzNyw3ICszOTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgV2FzbURyb3BLZWVw
OjplbWl0KHRoaXMsIHN0YXJ0T2Zmc2V0LCBkcm9wLCBrZWVwKTsKICAgICB9CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0YWNrLCB0eXBl
bmFtZSBGdW5jdG9yPgogICAgIHZvaWQgd2Fsa0V4cHJlc3Npb25TdGFjayhTdGFjayYgZXhwcmVz
c2lvblN0YWNrLCB1bnNpZ25lZCBzdGFja1NpemUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAg
ICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBleHByZXNzaW9uU3RhY2suc2l6ZSgpOyBp
ID4gMDsgLS1pKSB7CkBAIC0zNDYsNyArNDAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAg
IH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgU3RhY2ssIHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCB3YWxrRXhwcmVzc2lvblN0YWNr
KFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewog
ICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGV4cHJlc3Npb25TdGFjaywgbV9zdGFja1NpemUs
IGZ1bmN0b3IpOwpAQCAtMzU1LDcgKzQxMSw4IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHdhbGtFeHByZXNzaW9uU3RhY2soQ29udHJvbEVudHJ5
JiBlbnRyeSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIHdhbGtFeHBy
ZXNzaW9uU3RhY2soZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2ssIGVudHJ5LmNvbnRyb2xE
YXRhLnN0YWNrU2l6ZSgpLCBmdW5jdG9yKTsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplID0g
ZW50cnkuY29udHJvbERhdGEuc3RhY2tTaXplKCk7CisgICAgICAgIHdhbGtFeHByZXNzaW9uU3Rh
Y2soZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2ssIHN0YWNrU2l6ZSwgZnVuY3Rvcik7CiAg
ICAgfQogCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkKQEAgLTM4MSw3ICs0MzgsNyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhTdGFjayYg
ZXhwcmVzc2lvblN0YWNrLCBOb0NvbnNpc3RlbmN5Q2hlY2tUYWcpCiAgICAgewotICAgICAgICB3
YWxrRXhwcmVzc2lvblN0YWNrKGV4cHJlc3Npb25TdGFjaywgWyZdKFR5cGVkRXhwcmVzc2lvbiYg
ZXhwcmVzc2lvbiwgVmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsKKyAgICAgICAgd2Fsa0V4cHJlc3Np
b25TdGFjayhleHByZXNzaW9uU3RhY2ssIFsmXShhdXRvJiBleHByZXNzaW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgc2xvdCkgewogICAgICAgICAgICAgQVNTRVJUKGV4cHJlc3Npb24udmFsdWUoKSA9PSBz
bG90IHx8IGV4cHJlc3Npb24udmFsdWUoKS5pc0NvbnN0YW50KCkgfHwgZXhwcmVzc2lvbi52YWx1
ZSgpLmlzQXJndW1lbnQoKSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZXhwcmVzc2lvbi52YWx1
ZSgpLnRvTG9jYWwoKSkgPCBtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsKICAgICAgICAgICAgIGlm
IChleHByZXNzaW9uLnZhbHVlKCkgPT0gc2xvdCkKICAgICAgICAgICAgICAgICByZXR1cm47CkBA
IC00MTcsNiArNDc0LDggQEAgcHJpdmF0ZToKICAgICAgICAgbV9zdGFja1NpemUgKz0gbmV3U3Rh
Y2suc2l6ZSgpOwogICAgIH0KIAorICAgIHZvaWQgZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0
Y2goQ29udHJvbFR5cGUmLCBTdGFjayYpOworCiAgICAgc3RydWN0IFN3aXRjaEVudHJ5IHsKICAg
ICAgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQ7CiAgICAgICAgIGludCoganVt
cFRhcmdldDsKQEAgLTQyOSw3ICs0ODgsNyBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICBGdW5j
dGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OwotICAgIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CisgICAgTW9kdWxlSW5mb3JtYXRpb24mIG1f
aW5mbzsKICAgICBjb25zdCB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5kZXggeyBVSU5UX01BWCB9Owog
ICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IG1fbm9ybWFsaXplZEFyZ3VtZW50czsKICAgICBI
YXNoTWFwPExhYmVsKiwgVmVjdG9yPFN3aXRjaEVudHJ5Pj4gbV9zd2l0Y2hlczsKQEAgLTQ0MCw5
ICs0OTksMTIgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAyPiBtX3Jl
c3VsdHM7CiAgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9zdGFja1NpemUgeyAwIH07CiAgICAgQ2hl
Y2tlZDx1bnNpZ25lZD4gbV9tYXhTdGFja1NpemUgeyAwIH07CisgICAgQ2hlY2tlZDx1bnNpZ25l
ZD4gbV90cnlEZXB0aCB7IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX21heFRyeURlcHRo
IHsgMCB9OworICAgIGJvb2wgbV91c2VzRXhjZXB0aW9ucyB7IGZhbHNlIH07CiB9OwogCi1FeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5k
Q29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5j
dGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQorRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29k
ZShjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdWludDMy
X3QgZnVuY3Rpb25JbmRleCkKIHsKICAgICBMTEludEdlbmVyYXRvciBsbGludEdlbmVyYXRvcihp
bmZvLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmUpOwogICAgIEZ1bmN0aW9uUGFyc2VyPExMSW50
R2VuZXJhdG9yPiBwYXJzZXIobGxpbnRHZW5lcmF0b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9u
TGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOwpAQCAtNDY2LDcgKzUyOCw3IEBAIHN0YXRpYyBUaHJl
YWRTcGVjaWZpYzxCdWZmZXI+JiB0aHJlYWRTcGVjaWZpY0J1ZmZlcigpCiAgICAgcmV0dXJuICp0
aHJlYWRTcGVjaWZpY0J1ZmZlclB0cjsKIH0KIAotTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJh
dG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
LCBjb25zdCBTaWduYXR1cmUmKQorTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKE1vZHVs
ZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmKQogICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKG1ha2VVbmlxdWU8RnVuY3Rpb25Db2Rl
QmxvY2s+KGZ1bmN0aW9uSW5kZXgpLCAwKQogICAgICwgbV9pbmZvKGluZm8pCiAgICAgLCBtX2Z1
bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKQEAgLTQ4NSw5ICs1NDcsMjIgQEAgTExJbnRHZW5l
cmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNp
Z25lZCBmdW5jdGlvbkkKICAgICBXYXNtRW50ZXI6OmVtaXQodGhpcyk7CiB9CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIE9wY29kZT4KK3ZvaWQgTExJbnRHZW5lcmF0b3I6OnJlcGF0Y2goY29uc3QgQ2F0
Y2hSZXdyaXRlSW5mbyYgaW5mbykKK3sKKyAgICBhdXRvIHJlZiA9IG1fd3JpdGVyLnJlZihpbmZv
Lm1faW5zdHJ1Y3Rpb25PZmZzZXQpOworICAgIE9wY29kZSogaW5zdHJ1Y3Rpb24gPSByZWYtPmNh
c3Q8T3Bjb2RlLCBXYXNtT3Bjb2RlVHJhaXRzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBleGNl
cHRpb25SZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fbWF4U3RhY2tTaXplICsg
aW5mby5tX3RyeURlcHRoIC0gMSk7CisgICAgaW5zdHJ1Y3Rpb24tPnNldEV4Y2VwdGlvbihleGNl
cHRpb25SZWdpc3RlciwgW10oKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICB9KTsKK30KKwogc3Rk
Ojp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBMTEludEdlbmVyYXRvcjo6ZmluYWxpemUo
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29kZUJsb2NrKTsKKwogICAgIHNpemVfdCBudW1D
YWxsZWVMb2NhbHMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdp
c3RlcnMoKSwgbV9tYXhTdGFja1NpemUpOwogICAgIG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxv
Y2FscyA9IG51bUNhbGxlZUxvY2FsczsKICAgICBSRUxFQVNFX0FTU0VSVChudW1DYWxsZWVMb2Nh
bHMgPT0gbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlTG9jYWxzKTsKQEAgLTUwMCw2ICs1NzUsOSBA
QCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IExMSW50R2VuZXJhdG9yOjpmaW5h
bGl6ZSgpCiAgICAgUkVMRUFTRV9BU1NFUlQodXNlZEJ1ZmZlci5jYXBhY2l0eSgpID09IG9sZENh
cGFjaXR5KTsKICAgICAqdGhyZWFkU3BlY2lmaWMgPSBXVEZNb3ZlKHVzZWRCdWZmZXIpOwogCisg
ICAgaWYgKCFtX3VzZXNFeGNlcHRpb25zKQorICAgICAgICBtX2luZm8ubV9mdW5jdGlvbkRvZXNO
b3RVc2VFeGNlcHRpb25zLnF1aWNrU2V0KG1fZnVuY3Rpb25JbmRleCk7CisKICAgICByZXR1cm4g
V1RGTW92ZShtX2NvZGVCbG9jayk7CiB9CiAKQEAgLTkwNiw2ICs5ODQsNyBAQCBhdXRvIExMSW50
R2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xv
c2luZ1N0YWNrLCBDbwogCiAgICAgYmxvY2sgPSBDb250cm9sVHlwZTo6bG9vcChzaWduYXR1cmUs
IG1fc3RhY2tTaXplLCBXVEZNb3ZlKGJvZHkpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbikpOwogCisg
ICAgVmVjdG9yPHVuc2lnbmVkPiB1bnJlc29sdmVkT2Zmc2V0czsKICAgICBWZWN0b3I8VmlydHVh
bFJlZ2lzdGVyPiBvc3JFbnRyeURhdGE7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1f
Y29kZUJsb2NrLT5tX251bUFyZ3VtZW50czsgaSsrKQogICAgICAgICBvc3JFbnRyeURhdGEuYXBw
ZW5kKG1fbm9ybWFsaXplZEFyZ3VtZW50c1tpXSk7CkBAIC05MTYsOSArOTk1LDEyIEBAIGF1dG8g
TExJbnRHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYg
ZW5jbG9zaW5nU3RhY2ssIENvCiAgICAgZm9yICh1aW50MzJfdCBpID0gZ3ByQ291bnQgKyBmcHJD
b3VudCArIG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0ZXJzOyBpIDwgbV9jb2RlQmxvY2st
Pm1fbnVtVmFyczsgaSsrKQogICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNv
bnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbElu
ZGV4KSB7CisgICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFj
aygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7CiAgICAgICAgIFN0YWNrJiBleHByZXNzaW9u
U3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4
cHJlc3Npb25TdGFjazsKICAgICAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gZXhwcmVzc2lvbiA6
IGV4cHJlc3Npb25TdGFjaykKICAgICAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQoZXhwcmVz
c2lvbik7CisgICAgICAgIGlmIChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRhKSkKKyAgICAg
ICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQoV1RGOjpnZXQ8Q29udHJvbENhdGNoPihkYXRhKS5t
X2V4Y2VwdGlvbik7CiAgICAgfQogICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIGV4cHJlc3Npb24g
OiBlbmNsb3NpbmdTdGFjaykKICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZChleHByZXNzaW9u
KTsKQEAgLTk3NSw2ICsxMDU3LDE1MiBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbHNlVG9V
bnJlYWNoYWJsZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVy
biB7IH07CiB9CiAKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRyeShCbG9ja1NpZ25hdHVyZSBz
aWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3Rh
Y2smIG5ld1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgbV91c2VzRXhjZXB0aW9ucyA9
IHRydWU7CisgICAgKyttX3RyeURlcHRoOworICAgIGlmIChtX21heFRyeURlcHRoIDwgbV90cnlE
ZXB0aCkKKyAgICAgICAgbV9tYXhUcnlEZXB0aCA9IG1fdHJ5RGVwdGg7CisKKyAgICBzcGxpdFN0
YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKKyAgICBSZWY8TGFiZWw+
IHRyeUxhYmVsID0gbmV3RW1pdHRlZExhYmVsKCk7CisgICAgUmVmPExhYmVsPiBjb250aW51YXRp
b24gPSBuZXdMYWJlbCgpOworICAgIHJlc3VsdCA9IENvbnRyb2xUeXBlOjp0cnlfKHNpZ25hdHVy
ZSwgbV9zdGFja1NpemUsIFdURk1vdmUodHJ5TGFiZWwpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiks
IG1fdHJ5RGVwdGgpOworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgTExJbnRHZW5lcmF0b3I6
OmZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKENvbnRyb2xUeXBlJiBkYXRhLCBTdGFjayYg
ZXhwcmVzc2lvblN0YWNrKQoreworICAgIGlmICghQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0
YSkpCisgICAgICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKGV4cHJlc3Npb25TdGFj
ayk7CisgICAgZWxzZSB7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGRhdGEuc3RhY2tTaXpl
KCkpOworICAgICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiYgdmFsdWUgOiBleHByZXNzaW9uU3Rh
Y2spIHsKKyAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgZHN0LCB2YWx1ZSk7CisgICAg
ICAgICAgICB2YWx1ZSA9IFR5cGVkRXhwcmVzc2lvbiB7IHZhbHVlLnR5cGUoKSwgZHN0IH07Cisg
ICAgICAgICAgICBkc3QgLT0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBXYXNtSm1wOjplbWl0
KHRoaXMsIGRhdGEubV9jb250aW51YXRpb24tPmJpbmQodGhpcykpOworfQorCithdXRvIExMSW50
R2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBleGNlcHRpb25TaWduYXR1cmUsIFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xU
eXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
ZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2goZGF0YSwgZXhwcmVzc2lvblN0YWNrKTsKKyAg
ICByZXR1cm4gYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb25T
aWduYXR1cmUsIGRhdGEsIHJlc3VsdHMpOworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjphZGRD
YXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVy
ZSYgZXhjZXB0aW9uU2lnbmF0dXJlLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVz
dWx0cykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOwor
ICAgIFJlZjxMYWJlbD4gY2F0Y2hMYWJlbCA9IG5ld0VtaXR0ZWRMYWJlbCgpOworCisgICAgbV9z
dGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOworICAgIFZpcnR1YWxSZWdpc3RlciBleGNlcHRp
b24gPSBwdXNoKCk7CisgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbFRyeT4o
ZGF0YSkpIHsKKyAgICAgICAgQ29udHJvbFRyeSYgdHJ5XyA9IFdURjo6Z2V0PENvbnRyb2xUcnk+
KGRhdGEpOworICAgICAgICBkYXRhID0gQ29udHJvbFR5cGU6OmNhdGNoXyhkYXRhLm1fc2lnbmF0
dXJlLCBkYXRhLnN0YWNrU2l6ZSgpLCBXVEZNb3ZlKHRyeV8ubV90cnkpLCBXVEZNb3ZlKGRhdGEu
bV9jb250aW51YXRpb24pLCBjYXRjaExhYmVsLCB0cnlfLm1fdHJ5RGVwdGgsIGV4Y2VwdGlvbik7
CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2goKSk7CisK
KyAgICBXYXNtQ2F0Y2g6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBleGNlcHRpb25J
bmRleCwgZXhjZXB0aW9uLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCByZXN1
bHRzLmlzRW1wdHkoKSA/IDAgOiAtcmVzdWx0c1swXS5vZmZzZXQoKSk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytp
KSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSByZXN1bHRzW2ldOworICAgICAgICBU
eXBlIHR5cGUgPSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSk7CisgICAgICAgIHN3aXRj
aCAodHlwZS5raW5kKSB7CisgICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkYzMjoKKyAgICAg
ICAgICAgIFdhc21GMzJSZWludGVycHJldEkzMjo6ZW1pdCh0aGlzLCBkc3QsIGRzdCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjY0OgorICAgICAg
ICAgICAgV2FzbUY2NFJlaW50ZXJwcmV0STY0OjplbWl0KHRoaXMsIGRzdCwgZHN0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJMzI6CisgICAgICAg
IGNhc2UgV2FzbTo6VHlwZUtpbmQ6Okk2NDoKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6
RXh0ZXJucmVmOgorICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGdW5jcmVmOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBDb250cm9sQ2F0Y2gmIGNhdGNoXyA9IFdURjo6Z2V0PENvbnRyb2xDYXRjaD4oZGF0YSk7
CisgICAgY2F0Y2hfLm1fa2luZCA9IENhdGNoS2luZDo6Q2F0Y2g7CisgICAgbV9jb2RlQmxvY2st
PmFkZEV4Y2VwdGlvbkhhbmRsZXIoeyBIYW5kbGVyVHlwZTo6Q2F0Y2gsIGNhdGNoXy5tX3RyeVN0
YXJ0LT5sb2NhdGlvbigpLCBjYXRjaF8ubV90cnlFbmQtPmxvY2F0aW9uKCksIGNhdGNoTGFiZWwt
PmxvY2F0aW9uKCksIG1fdHJ5RGVwdGgsIGV4Y2VwdGlvbkluZGV4IH0pOworCisgICAgcmV0dXJu
IHsgfTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwoU3RhY2smIGV4cHJl
c3Npb25TdGFjaywgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBm
aW5hbGl6ZVByZXZpb3VzQmxvY2tGb3JDYXRjaChkYXRhLCBleHByZXNzaW9uU3RhY2spOworICAg
IFdhc21KbXA6OmVtaXQodGhpcywgZGF0YS5tX2NvbnRpbnVhdGlvbi0+YmluZCh0aGlzKSk7Cisg
ICAgcmV0dXJuIGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShkYXRhKTsKK30KKworYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CisgICAgUmVm
PExhYmVsPiBjYXRjaExhYmVsID0gbmV3RW1pdHRlZExhYmVsKCk7CisgICAgbV9zdGFja1NpemUg
PSBkYXRhLnN0YWNrU2l6ZSgpOworICAgIFZpcnR1YWxSZWdpc3RlciBleGNlcHRpb24gPSBwdXNo
KCk7CisgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbFRyeT4oZGF0YSkpIHsK
KyAgICAgICAgQ29udHJvbFRyeSYgdHJ5XyA9IFdURjo6Z2V0PENvbnRyb2xUcnk+KGRhdGEpOwor
ICAgICAgICBkYXRhID0gQ29udHJvbFR5cGU6OmNhdGNoXyhkYXRhLm1fc2lnbmF0dXJlLCBkYXRh
LnN0YWNrU2l6ZSgpLCBXVEZNb3ZlKHRyeV8ubV90cnkpLCBXVEZNb3ZlKGRhdGEubV9jb250aW51
YXRpb24pLCBjYXRjaExhYmVsLCB0cnlfLm1fdHJ5RGVwdGgsIGV4Y2VwdGlvbik7CisgICAgfQor
ICAgIENvbnRyb2xDYXRjaCYgY2F0Y2hfID0gV1RGOjpnZXQ8Q29udHJvbENhdGNoPihkYXRhKTsK
KyAgICBjYXRjaF8ubV9raW5kID0gQ2F0Y2hLaW5kOjpDYXRjaEFsbDsKKworICAgIFdhc21DYXRj
aEFsbDo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGV4Y2VwdGlvbik7CisgICAgbV9j
b2RlQmxvY2stPmFkZEV4Y2VwdGlvbkhhbmRsZXIoeyBIYW5kbGVyVHlwZTo6Q2F0Y2hBbGwsIGNh
dGNoXy5tX3RyeVN0YXJ0LT5sb2NhdGlvbigpLCBjYXRjaF8ubV90cnlFbmQtPmxvY2F0aW9uKCks
IGNhdGNoTGFiZWwtPmxvY2F0aW9uKCksIG1fdHJ5RGVwdGgsIDAgfSk7CisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmIHRh
cmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4g
YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKHRhcmdldCwgZGF0YSk7Cit9CisKK2F1dG8gTExJbnRH
ZW5lcmF0b3I6OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgdGFyZ2V0LCBD
b250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIG1fdXNlc0V4Y2VwdGlv
bnMgPSB0cnVlOworICAgIFJlZjxMYWJlbD4gZGVsZWdhdGVMYWJlbCA9IG5ld0VtaXR0ZWRMYWJl
bCgpOworCisgICAgQVNTRVJUKENvbnRyb2xUeXBlOjppc1RyeSh0YXJnZXQpIHx8IENvbnRyb2xU
eXBlOjppc1RvcExldmVsKHRhcmdldCkpOworICAgIHVuc2lnbmVkIHRhcmdldERlcHRoID0gQ29u
dHJvbFR5cGU6OmlzVHJ5KHRhcmdldCkgPyBXVEY6OmdldDxDb250cm9sVHJ5Pih0YXJnZXQpLm1f
dHJ5RGVwdGggOiAwOworCisgICAgQ29udHJvbFRyeSYgdHJ5XyA9IFdURjo6Z2V0PENvbnRyb2xU
cnk+KGRhdGEpOworICAgIG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKHsgSGFuZGxl
clR5cGU6OkRlbGVnYXRlLCB0cnlfLm1fdHJ5LT5sb2NhdGlvbigpLCBkZWxlZ2F0ZUxhYmVsLT5s
b2NhdGlvbigpLCAwLCBtX3RyeURlcHRoLCB0YXJnZXREZXB0aCB9KTsKKyAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
VGhyb3codW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIFN0YWNrJikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0
cnVlOworICAgIHdhbGtFeHByZXNzaW9uU3RhY2soYXJncywgWyZdKFZpcnR1YWxSZWdpc3RlciYg
YXJnLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgeworICAgICAgICBpZiAoYXJnID09IHNsb3QpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgc2xvdCwgYXJn
KTsKKyAgICAgICAgYXJnID0gc2xvdDsKKyAgICB9KTsKKyAgICBXYXNtVGhyb3c6OmVtaXQodGhp
cywgZXhjZXB0aW9uSW5kZXgsIGFyZ3MuaXNFbXB0eSgpID8gdmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoMCkgOiBhcmdzWzBdKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIExMSW50R2VuZXJh
dG9yOjphZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOworICAgIEFTU0VSVChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPENvbnRyb2xDYXRjaD4oZGF0YSkpOworICAgIENvbnRyb2xDYXRjaCBj
YXRjaF8gPSBXVEY6OmdldDxDb250cm9sQ2F0Y2g+KGRhdGEpOworICAgIFdhc21SZXRocm93Ojpl
bWl0PE9wY29kZVNpemU6OldpZGUzMj4odGhpcywgY2F0Y2hfLm1fZXhjZXB0aW9uKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29u
dHJvbFR5cGUmIGRhdGEsIFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
ICAgICBpZiAoIWRhdGEubV9zaWduYXR1cmUtPnJldHVybkNvdW50KCkpIHsKQEAgLTEwNDksMTkg
KzEyNzcsMzEgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBl
bnRyeSwgU3RhY2smIGV4cHJlc3Npb25TdGFjaykgLT4gUGEKIHsKICAgICAvLyBGSVhNRTogV2Ug
b25seSBuZWVkIHRvIG1hdGVyaWFsaXplIGNvbnN0YW50cyBoZXJlIGlmIHRoZXJlIGV4aXN0cyBh
IGp1bXAgdG8gdGhpcyBsYWJlbAogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDM2NTcKLSAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHBy
ZXNzaW9uU3RhY2spOworICAgIGZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKGVudHJ5LmNv
bnRyb2xEYXRhLCBleHByZXNzaW9uU3RhY2spOwogICAgIHJldHVybiBhZGRFbmRUb1VucmVhY2hh
YmxlKGVudHJ5LCBleHByZXNzaW9uU3RhY2ssIGZhbHNlKTsKIH0KIAogCi1hdXRvIExMSW50R2Vu
ZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0
YWNrJiBleHByZXNzaW9uU3RhY2ssIGJvb2wgdW5yZWFjaGFibGUpIC0+IFBhcnRpYWxSZXN1bHQK
K2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBl
bnRyeSwgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgYm9vbCB1bnJlYWNoYWJsZSkgLT4gUGFydGlh
bFJlc3VsdAogewogICAgIENvbnRyb2xUeXBlJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CiAK
LSAgICBSRUxFQVNFX0FTU0VSVCh1bnJlYWNoYWJsZSB8fCBtX3N0YWNrU2l6ZSA9PSBkYXRhLnN0
YWNrU2l6ZSgpICsgZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CisgICAgdW5zaWdu
ZWQgc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKKyAgICBpZiAoQ29udHJvbFR5cGU6Omlz
QW55Q2F0Y2goZW50cnkuY29udHJvbERhdGEpKSB7CisgICAgICAgIC8vZm9yIChUeXBlZEV4cHJl
c3Npb24mIHJlZyA6IGV4cHJlc3Npb25TdGFjaykgeworICAgICAgICAgICAgLy9WaXJ0dWFsUmVn
aXN0ZXIgbmV3VGFyZ2V0ID0gcmVnLnZhbHVlKCkgKyAxOworICAgICAgICAgICAgLy9XYXNtTW92
OjplbWl0KHRoaXMsIG5ld1RhcmdldCwgcmVnKTsKKyAgICAgICAgICAgIC8vcmVnID0gVHlwZWRF
eHByZXNzaW9uIHsgcmVnLnR5cGUoKSwgbmV3VGFyZ2V0IH07CisgICAgICAgIC8vfQorICAgICAg
ICArK3N0YWNrU2l6ZTsgLy8gQWNjb3VudCBmb3IgdGhlIGNhdWdodCBleGNlcHRpb24KKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlQodW5yZWFjaGFibGUgfHwgbV9zdGFja1NpemUgPT0gIHN0YWNr
U2l6ZSArIGRhdGEubV9zaWduYXR1cmUtPnJldHVybkNvdW50KCkpOwogCiAgICAgbV9zdGFja1Np
emUgPSBkYXRhLnN0YWNrU2l6ZSgpOwogCisgICAgaWYgKENvbnRyb2xUeXBlOjppc1RyeShkYXRh
KSB8fCBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xDYXRjaD4oZGF0YSkpCisgICAgICAg
IC0tbV90cnlEZXB0aDsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fc2ln
bmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byBkbyBhIGNvbnNpc3RlbmN5IGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBqdXN0IHJlc2V0IHRoZSBz
dGFjayBzaXplCiAgICAgICAgIC8vIGFyZSBwdXNoaW5nIG5ldyB2YWx1ZXMsIHdoaWxlIHdlIGFs
cmVhZHkgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgaW4gdGhlIHN0YWNrLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaAppbmRleCA4YTE2MDM4MjZjMTAu
LmMwMTJmYjFlZTcxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUxMSW50R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxM
SW50R2VuZXJhdG9yLmgKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7
CiBjbGFzcyBTaWduYXR1cmU7CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiAKLUV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKK0V4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgTW9k
dWxlSW5mb3JtYXRpb24mLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxpbWl0cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oCmlu
ZGV4IGNmOGI0NDYwMzY4MS4uZjhmMDUzYjU4NjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUxpbWl0cy5oCkBAIC00MSw2ICs0MSw3IEBAIGNvbnN0ZXhwciBzaXplX3QgbWF4VHlw
ZXMgPSAxMDAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhGdW5jdGlvbnMgPSAxMDAwMDAwOwog
Y29uc3RleHByIHNpemVfdCBtYXhJbXBvcnRzID0gMTAwMDAwOwogY29uc3RleHByIHNpemVfdCBt
YXhFeHBvcnRzID0gMTAwMDAwOworY29uc3RleHByIHNpemVfdCBtYXhFeGNlcHRpb25zID0gMTAw
MDAwOwogY29uc3RleHByIHNpemVfdCBtYXhHbG9iYWxzID0gMTAwMDAwMDsKIGNvbnN0ZXhwciBz
aXplX3QgbWF4RGF0YVNlZ21lbnRzID0gMTAwMDAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcAppbmRleCAzNTQ5MWNmZTU0
MTAuLmM2ZThiOGM3ZmViOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwCkBAIC0zNiw2ICszNiw3IEBAIE1vZHVsZUluZm9y
bWF0aW9uOjpNb2R1bGVJbmZvcm1hdGlvbigpCiAgICAgOiBuYW1lU2VjdGlvbihOYW1lU2VjdGlv
bjo6Y3JlYXRlKCkpCiB7CiB9CisKIE1vZHVsZUluZm9ybWF0aW9uOjp+TW9kdWxlSW5mb3JtYXRp
b24oKSB7IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKaW5kZXggYTJiMGY4MzZj
ODljLi4zMjhjNmJjYTZiZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCkBAIC01OCw4ICs1OCwyMiBAQCBzdHJ1Y3QgTW9kdWxl
SW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRp
b24+IHsKICAgICAgICAgICAgIDogaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVu
Y3Rpb25JbmRleCAtIGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCldOwogICAg
IH0KIAorICAgIHNpemVfdCBleGNlcHRpb25JbmRleFNwYWNlU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpICsgaW50ZXJuYWxFeGNlcHRp
b25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQorICAgIGJvb2wgaXNJbXBvcnRlZEV4Y2VwdGlv
bkZyb21FeGNlcHRpb25JbmRleFNwYWNlKHNpemVfdCBleGNlcHRpb25JbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChleGNlcHRpb25JbmRleCA8IGV4Y2VwdGlvbkluZGV4U3BhY2VT
aXplKCkpOworICAgICAgICByZXR1cm4gZXhjZXB0aW9uSW5kZXggPCBpbXBvcnRFeGNlcHRpb25T
aWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICB9CisgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShzaXplX3QgZXhjZXB0aW9uSW5kZXgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNJbXBvcnRlZEV4Y2VwdGlvbkZyb21FeGNlcHRp
b25JbmRleFNwYWNlKGV4Y2VwdGlvbkluZGV4KQorICAgICAgICAgICAgPyBpbXBvcnRFeGNlcHRp
b25TaWduYXR1cmVJbmRpY2VzW2V4Y2VwdGlvbkluZGV4XQorICAgICAgICAgICAgOiBpbnRlcm5h
bEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXNbZXhjZXB0aW9uSW5kZXggLSBpbXBvcnRFeGNlcHRp
b25TaWduYXR1cmVJbmRpY2VzLnNpemUoKV07CisgICAgfQorCiAgICAgdWludDMyX3QgaW1wb3J0
RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlcy5zaXplKCk7IH0KICAgICB1aW50MzJfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25z
dCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAg
ICB1aW50MzJfdCBpbXBvcnRFeGNlcHRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEV4
Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9CiAKICAgICAvLyBDdXJyZW50bHksIG91
ciB3YXNtIGltcGxlbWVudGF0aW9uIGFsbG93cyBvbmx5IG9uZSBtZW1vcnkgYW5kIHRhYmxlLgog
ICAgIC8vIElmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoaXMgbGltaXRhdGlvbiwgd2Ugd291bGQgaGF2
ZSBNZW1vcnlJbmZvcm1hdGlvbiBhbmQgVGFibGVJbmZvcm1hdGlvbiBpbiB0aGUgVmVjdG9ycy4K
QEAgLTc2LDkgKzkwLDE0IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxNb2R1bGVJbmZvcm1hdGlvbj4gewogICAgIGJvb2wgaXNEZWNsYXJl
ZEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2RlY2xhcmVkRnVuY3Rp
b25zLmNvbnRhaW5zKGluZGV4KTsgfQogICAgIHZvaWQgYWRkRGVjbGFyZWRGdW5jdGlvbih1aW50
MzJfdCBpbmRleCkgeyBtX2RlY2xhcmVkRnVuY3Rpb25zLnNldChpbmRleCk7IH0KIAorICAgIGJv
b2wgaXNEZWNsYXJlZEV4Y2VwdGlvbih1aW50MzJfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9k
ZWNsYXJlZEV4Y2VwdGlvbnMuY29udGFpbnMoaW5kZXgpOyB9CisgICAgdm9pZCBhZGREZWNsYXJl
ZEV4Y2VwdGlvbih1aW50MzJfdCBpbmRleCkgeyBtX2RlY2xhcmVkRXhjZXB0aW9ucy5zZXQoaW5k
ZXgpOyB9CisKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1
cmVJbmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxTaWdu
YXR1cmVJbmRleD4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7CisgICAgVmVjdG9y
PFNpZ25hdHVyZUluZGV4PiBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzOworICAgIFZl
Y3RvcjxTaWduYXR1cmVJbmRleD4gaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzOwog
ICAgIFZlY3RvcjxSZWY8U2lnbmF0dXJlPj4gdXNlZFNpZ25hdHVyZXM7CiAKICAgICBNZW1vcnlJ
bmZvcm1hdGlvbiBtZW1vcnk7CkBAIC05OCw2ICsxMTcsOCBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3Jt
YXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsK
ICAgICB1aW50MzJfdCBudW1iZXJPZkRhdGFTZWdtZW50cyB7IDAgfTsKIAogICAgIEJpdFZlY3Rv
ciBtX2RlY2xhcmVkRnVuY3Rpb25zOworICAgIEJpdFZlY3RvciBtX2RlY2xhcmVkRXhjZXB0aW9u
czsKKyAgICBCaXRWZWN0b3IgbV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zOwogICAgIG11
dGFibGUgQml0VmVjdG9yIG1fcmVmZXJlbmNlZEZ1bmN0aW9uczsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKaW5k
ZXggZTg3ZTIxYjU5ZjY2Li44ZTE0N2U1ZDc0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCkBAIC05MSwxNiArOTEs
MjAgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBJbnRlcm5hbEZ1bmN0aW9uKiBpbnRlcm5hbEZ1
bmN0aW9uID0gcGFyc2VBbmRDb21waWxlUmVzdWx0LT5nZXQoKTsKKyAgICBWZWN0b3I8Q29kZUxv
Y2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IGV4Y2VwdGlvbkhhbmRsZXJMb2Nh
dGlvbnM7CisgICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucywgaW50ZXJuYWxGdW5jdGlvbiwgY29udGV4dCwgbGlua0J1ZmZlcik7CisK
ICAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4o
CiAgICAgICAgIEZJTkFMSVpFX1dBU01fQ09ERV9GT1JfTU9ERShDb21waWxhdGlvbk1vZGU6Ok9N
R0Zvck9TUkVudHJ5TW9kZSwgbGlua0J1ZmZlciwgSklUQ29tcGlsYXRpb25QdHJUYWcsICJXZWJB
c3NlbWJseSBPTUdGb3JPU1JFbnRyeSBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVuY3Rp
b25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmco
SW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1l
U2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAg
ICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKIAotICAgIG9t
Z0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VBbmRDb21waWxl
UmVzdWx0LnZhbHVlKCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CisgICAgb21n
RW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9u
LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOwogCiAgICAgQVNTRVJUKG1fY29kZUJs
b2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7Ci0gICAgUmVmPE9N
R0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxlZTo6Y3JlYXRl
KFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSk7Cisg
ICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxl
ZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENh
bGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGludGVy
bmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVy
TG9jYXRpb25zKSk7CiAgICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50
ZXIocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2Fs
bGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hQb2ludGVyKGludGVybmFsRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2Fs
bGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKIAogICAgICAgICBMb2NrZXIgbG9ja2Vy
IHsgbV9jb2RlQmxvY2stPm1fbG9jayB9OwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxs
ZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR1BsYW4uY3BwCmluZGV4IDRjOGQ0YzQzMjEyMy4uMjcyMWE0MjJlZGI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC04OCwxNyArODgsMjEg
QEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgICAgICByZXR1cm47
CiAgICAgfQogCisgICAgSW50ZXJuYWxGdW5jdGlvbiogaW50ZXJuYWxGdW5jdGlvbiA9IHBhcnNl
QW5kQ29tcGlsZVJlc3VsdC0+Z2V0KCk7CisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zOworICAgIGNv
bXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMs
IGludGVybmFsRnVuY3Rpb24sIGNvbnRleHQsIGxpbmtCdWZmZXIpOworCiAgICAgb21nRW50cnlw
b2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8Q29tcGlsYXRpb24+KAogICAgICAgICBGSU5B
TElaRV9XQVNNX0NPREVfRk9SX01PREUoQ29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBsaW5rQnVm
ZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9NRyBmdW5jdGlvblslaV0g
JXMgbmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5h
c2NpaSgpLmRhdGEoKSksCiAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5
cHJvZHVjdHMpKTsKIAotICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdU
Rk1vdmUocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyk7CisgICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RG
TW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOwog
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29k
ZUJsb2NrRm9yKG1vZGUoKSkpOwotICAgICAgICBSZWY8T01HQ2FsbGVlPiBjYWxsZWUgPSBPTUdD
YWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2Us
IG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNl
KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoUG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0
aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOworICAgICAgICBSZWY8T01H
Q2FsbGVlPiBjYWxsZWUgPSBPTUdDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQp
LCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5n
ZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShp
bnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmV4
Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSk7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9uLT5j
YWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CiAg
ICAgICAgIEFTU0VSVCghbV9jb2RlQmxvY2stPm1fb21nQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhd
KTsKICAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlEYXRhLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlEYXRhLmgKaW5kZXggZDQxZWQ3OTMy
YjMwLi4wODdlMGY0OTM3ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PU1JFbnRyeURhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T1NSRW50cnlEYXRhLmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlf
QjNKSVQpCiAKICNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCi0jaW5jbHVkZSAiV2FzbUZvcm1hdC5o
IgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKQEAgLTQ3LDYgKzQ2LDkgQEAgcHJpdmF0ZToKICAgICBCMzo6VHlwZSBtX3R5cGU7CiB9
OwogCit1c2luZyBTdGFja01hcCA9IFZlY3RvcjxPU1JFbnRyeVZhbHVlPjsKK3VzaW5nIFN0YWNr
TWFwcyA9IEhhc2hNYXA8Q2FsbFNpdGVJbmRleCwgU3RhY2tNYXA+OworCiBjbGFzcyBPU1JFbnRy
eURhdGEgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9TUkVudHJ5RGF0YSk7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC01OSwxMiArNjEsMTIgQEAgcHVibGljOgogCiAgICAg
dWludDMyX3QgZnVuY3Rpb25JbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25JbmRleDsg
fQogICAgIHVpbnQzMl90IGxvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9vcEluZGV4OyB9
Ci0gICAgVmVjdG9yPE9TUkVudHJ5VmFsdWU+JiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsg
fQorICAgIFN0YWNrTWFwJiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsgfQogCiBwcml2YXRl
OgogICAgIHVpbnQzMl90IG1fZnVuY3Rpb25JbmRleDsKICAgICB1aW50MzJfdCBtX2xvb3BJbmRl
eDsKLSAgICBWZWN0b3I8T1NSRW50cnlWYWx1ZT4gbV92YWx1ZXM7CisgICAgU3RhY2tNYXAgbV92
YWx1ZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCmluZGV4IGFlOGIwODllMmM4MC4uZTIx
M2Y1Nzg5MDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bl
cmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlv
bnMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKICNp
bmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0SW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
IgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKQEAgLTEwNCwyNCArMTA1
LDEwIEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJPTUdSZXBsYWNlbWVudENvbXBpbGUoVGllclVwQ291
bnQmIHRpZXJVcCwgT01HQ2FsbGVlKiByZXBsYWNlCiAgICAgfQogfQogCi1TVVBQUkVTU19BU0FO
Ci1zdGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRl
eHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgY2FsbGVlLCBPTUdGb3JPU1JFbnRyeUNhbGxlZSYgb3Ny
RW50cnlDYWxsZWUsIE9TUkVudHJ5RGF0YSYgb3NyRW50cnlEYXRhKQordm9pZCBsb2FkVmFsdWVz
SW50b0J1ZmZlcihQcm9iZTo6Q29udGV4dCYgY29udGV4dCwgY29uc3QgU3RhY2tNYXAmIHZhbHVl
cywgdWludDY0X3QqIGJ1ZmZlcikKIHsKLSAgICBhdXRvIHJldHVybldpdGhvdXRPU1JFbnRyeSA9
IFsmXSB7Ci0gICAgICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPSAwOwot
ICAgIH07Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChvc3JFbnRyeUNhbGxlZS5vc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplKCkgPT0gb3NyRW50cnlEYXRhLnZhbHVlcygpLnNpemUoKSk7Ci0KLSAgICB1
aW50NjRfdCogYnVmZmVyID0gaW5zdGFuY2UtPmNvbnRleHQoKS0+c2NyYXRjaEJ1ZmZlckZvclNp
emUob3NyRW50cnlDYWxsZWUub3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpKTsKLSAgICBpZiAo
IWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHJldHVybldpdGhvdXRPU1JFbnRyeSgpOwotCi0gICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBvc3JFbnRyeURhdGEuZnVuY3Rpb25J
bmRleCgpLCAiOk9NRyBPU1IgZW50cnk6IGdvdCBlbnRyeSBjYWxsZWUgIiwgUmF3UG9pbnRlcigm
b3NyRW50cnlDYWxsZWUpKTsKLQotICAgIC8vIDEuIFBsYWNlIHJlcXVpcmVkIHZhbHVlcyBpbiBz
Y3JhdGNoIGJ1ZmZlci4KLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBvc3JF
bnRyeURhdGEudmFsdWVzKCkuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IE9TUkVu
dHJ5VmFsdWUmIHZhbHVlID0gb3NyRW50cnlEYXRhLnZhbHVlcygpW2luZGV4XTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCB2YWx1ZXMuc2l6ZSgpOyArK2luZGV4KSB7Cisg
ICAgICAgIGNvbnN0IE9TUkVudHJ5VmFsdWUmIHZhbHVlID0gdmFsdWVzW2luZGV4XTsKICAgICAg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT01HIE9TUiBlbnRyeSB2YWx1
ZXNbIiwgaW5kZXgsICJdICIsIHZhbHVlLnR5cGUoKSwgIiAiLCB2YWx1ZSk7CiAgICAgICAgIGlm
ICh2YWx1ZS5pc0dQUigpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUoKS5raW5k
KCkpIHsKQEAgLTE2MywyMSArMTUwLDQwIEBAIHN0YXRpYyB2b2lkIGRvT1NSRW50cnkoSW5zdGFu
Y2UqIGluc3RhbmNlLCBQcm9iZTo6Q29udGV4dCYgY29udGV4dCwgQkJRQ2FsbGVlJiBjCiAgICAg
ICAgICAgICAgICAgKmJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGJ1ZmZlciArIGluZGV4KSA9ICpi
aXR3aXNlX2Nhc3Q8dWludDY0X3QqPihiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGNvbnRleHQuZnAo
KSkgKyB2YWx1ZS5vZmZzZXRGcm9tRlAoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUuaXNTdGFja0FyZ3VtZW50KCkpIHsK
LSAgICAgICAgICAgIHN3aXRjaCAodmFsdWUudHlwZSgpLmtpbmQoKSkgewotICAgICAgICAgICAg
Y2FzZSBCMzo6RmxvYXQ6Ci0gICAgICAgICAgICAgICAgKmJpdHdpc2VfY2FzdDxmbG9hdCo+KGJ1
ZmZlciArIGluZGV4KSA9ICpiaXR3aXNlX2Nhc3Q8ZmxvYXQqPihiaXR3aXNlX2Nhc3Q8dWludDhf
dCo+KGNvbnRleHQuc3AoKSkgKyB2YWx1ZS5vZmZzZXRGcm9tU1AoKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEIzOjpEb3VibGU6Ci0gICAgICAgICAgICAgICAg
KmJpdHdpc2VfY2FzdDxkb3VibGUqPihidWZmZXIgKyBpbmRleCkgPSAqYml0d2lzZV9jYXN0PGRv
dWJsZSo+KGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oY29udGV4dC5zcCgpKSArIHZhbHVlLm9mZnNl
dEZyb21TUCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgKmJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGJ1ZmZlciArIGluZGV4
KSA9ICpiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGNvbnRl
eHQuc3AoKSkgKyB2YWx1ZS5vZmZzZXRGcm9tU1AoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9CisgICAgICAgIC8vfSBlbHNlIGlmICh2YWx1ZS5pc1N0YWNrQXJndW1l
bnQoKSkgeworICAgICAgICAgICAgLy9zd2l0Y2ggKHZhbHVlLnR5cGUoKS5raW5kKCkpIHsKKyAg
ICAgICAgICAgIC8vY2FzZSBCMzo6RmxvYXQ6CisgICAgICAgICAgICAgICAgLy8qYml0d2lzZV9j
YXN0PGZsb2F0Kj4oYnVmZmVyICsgaW5kZXgpID0gKmJpdHdpc2VfY2FzdDxmbG9hdCo+KGJpdHdp
c2VfY2FzdDx1aW50OF90Kj4oY29udGV4dC5zcCgpKSArIHZhbHVlLm9mZnNldEZyb21TUCgpKTsK
KyAgICAgICAgICAgICAgICAvL2JyZWFrOworICAgICAgICAgICAgLy9jYXNlIEIzOjpEb3VibGU6
CisgICAgICAgICAgICAgICAgLy8qYml0d2lzZV9jYXN0PGRvdWJsZSo+KGJ1ZmZlciArIGluZGV4
KSA9ICpiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb250ZXh0
LnNwKCkpICsgdmFsdWUub2Zmc2V0RnJvbVNQKCkpOworICAgICAgICAgICAgICAgIC8vYnJlYWs7
CisgICAgICAgICAgICAvL2RlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8qYml0d2lzZV9jYXN0
PHVpbnQ2NF90Kj4oYnVmZmVyICsgaW5kZXgpID0gKmJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGJp
dHdpc2VfY2FzdDx1aW50OF90Kj4oY29udGV4dC5zcCgpKSArIHZhbHVlLm9mZnNldEZyb21TUCgp
KTsKKyAgICAgICAgICAgICAgICAvL2JyZWFrOworICAgICAgICAgICAgLy99CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Cit9
CisKK1NVUFBSRVNTX0FTQU4KK3N0YXRpYyB2b2lkIGRvT1NSRW50cnkoSW5zdGFuY2UqIGluc3Rh
bmNlLCBQcm9iZTo6Q29udGV4dCYgY29udGV4dCwgQkJRQ2FsbGVlJiBjYWxsZWUsIE9NR0Zvck9T
UkVudHJ5Q2FsbGVlJiBvc3JFbnRyeUNhbGxlZSwgT1NSRW50cnlEYXRhJiBvc3JFbnRyeURhdGEp
Cit7CisgICAgYXV0byByZXR1cm5XaXRob3V0T1NSRW50cnkgPSBbJl0geworICAgICAgICBjb250
ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0gMDsKKyAgICB9OworCisgICAgUkVMRUFT
RV9BU1NFUlQob3NyRW50cnlDYWxsZWUub3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpID09IG9z
ckVudHJ5RGF0YS52YWx1ZXMoKS5zaXplKCkpOworCisgICAgdWludDY0X3QqIGJ1ZmZlciA9IGlu
c3RhbmNlLT5jb250ZXh0KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKG9zckVudHJ5Q2FsbGVlLm9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJl
dHVybiByZXR1cm5XaXRob3V0T1NSRW50cnkoKTsKKworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgb3NyRW50cnlEYXRhLmZ1bmN0aW9uSW5kZXgoKSwgIjpPTUcgT1NSIGVu
dHJ5OiBnb3QgZW50cnkgY2FsbGVlICIsIFJhd1BvaW50ZXIoJm9zckVudHJ5Q2FsbGVlKSk7CisK
KyAgICAvLyAxLiBQbGFjZSByZXF1aXJlZCB2YWx1ZXMgaW4gc2NyYXRjaCBidWZmZXIuCisgICAg
bG9hZFZhbHVlc0ludG9CdWZmZXIoY29udGV4dCwgb3NyRW50cnlEYXRhLnZhbHVlcygpLCBidWZm
ZXIpOwogCiAgICAgLy8gMi4gUmVzdG9yZSBjYWxsZWUgc2F2ZXMuCiAgICAgUmVnaXN0ZXJTZXQg
ZG9udFJlc3RvcmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKQEAg
LTY1NywxMiArNjYzLDEyIEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Hcm93
TWVtb3J5LCBpbnQzMl90LCAodm9pZCogY2FsbEZyYW1lLCBJbnN0YW5jCiAgICAgcmV0dXJuIGdy
b3duLnZhbHVlKCkucGFnZUNvdW50KCk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25XYXNtTWVtb3J5RmlsbCwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMy
X3QgZHN0QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFsdWUsIHVpbnQzMl90IGNvdW50KSkKK0pT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5RmlsbCwgc2l6ZV90LCAo
SW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCB0YXJnZXRW
YWx1ZSwgdWludDMyX3QgY291bnQpKQogewogICAgIHJldHVybiBpbnN0YW5jZS0+bWVtb3J5KCkt
PmZpbGwoZHN0QWRkcmVzcywgc3RhdGljX2Nhc3Q8dWludDhfdD4odGFyZ2V0VmFsdWUpLCBjb3Vu
dCk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5Q29w
eSwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMy
X3Qgc3JjQWRkcmVzcywgdWludDMyX3QgY291bnQpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21NZW1vcnlDb3B5LCBzaXplX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVp
bnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGNvdW50KSkK
IHsKICAgICByZXR1cm4gaW5zdGFuY2UtPm1lbW9yeSgpLT5jb3B5KGRzdEFkZHJlc3MsIHNyY0Fk
ZHJlc3MsIGNvdW50KTsKIH0KQEAgLTcxMCwxMiArNzE2LDEyIEBAIHN0YXRpYyBib29sIHNldFdh
c21UYWJsZUVsZW1lbnQoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1
aW50MzJfCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25TZXRXYXNtVGFibGVFbGVtZW50LCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1
bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBzaWduZWRJbmRleCwgRW5jb2RlZEpTVmFsdWUg
ZW5jVmFsdWUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNldFdhc21UYWJs
ZUVsZW1lbnQsIHNpemVfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRl
eCwgdWludDMyX3Qgc2lnbmVkSW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY1ZhbHVlKSkKIHsKICAg
ICByZXR1cm4gc2V0V2FzbVRhYmxlRWxlbWVudChpbnN0YW5jZSwgdGFibGVJbmRleCwgc2lnbmVk
SW5kZXgsIGVuY1ZhbHVlKTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bldhc21UYWJsZUluaXQsIGJvb2wsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGVsZW1l
bnRJbmRleCwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3QgZHN0T2Zmc2V0LCB1aW50MzJf
dCBzcmNPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uV2FzbVRhYmxlSW5pdCwgc2l6ZV90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNp
Z25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IGRzdE9mZnNl
dCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKQogewogICAgIEFTU0VSVChl
bGVtZW50SW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS5lbGVt
ZW50Q291bnQoKSk7CiAgICAgQVNTRVJUKHRhYmxlSW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCku
bW9kdWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50KCkpOwpAQCAtNzYwLDcgKzc2Niw3IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVHcm93LCBpbnQzMl90LCAo
SW5zdGFuY2UqIGluc3RhbmNlLCB1CiAgICAgcmV0dXJuIG9sZFNpemU7CiB9CiAKLUpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVGaWxsLCBib29sLCAoSW5zdGFuY2Uq
IGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBvZmZzZXQsIEVuY29kZWRK
U1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50KSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25XYXNtVGFibGVGaWxsLCBzaXplX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2ln
bmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IG9mZnNldCwgRW5jb2RlZEpTVmFsdWUgZmlsbCwgdWlu
dDMyX3QgY291bnQpKQogewogICAgIEFTU0VSVCh0YWJsZUluZGV4IDwgaW5zdGFuY2UtPm1vZHVs
ZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgpKTsKIApAQCAtNzc2LDcgKzc4Miw3
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVGaWxsLCBib29s
LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVDb3B5LCBib29sLCAoSW5zdGFu
Y2UqIGluc3RhbmNlLCB1bnNpZ25lZCBkc3RUYWJsZUluZGV4LCB1bnNpZ25lZCBzcmNUYWJsZUlu
ZGV4LCBpbnQzMl90IGRzdE9mZnNldCwgaW50MzJfdCBzcmNPZmZzZXQsIGludDMyX3QgbGVuZ3Ro
KSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVDb3B5LCBzaXpl
X3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVk
IHNyY1RhYmxlSW5kZXgsIGludDMyX3QgZHN0T2Zmc2V0LCBpbnQzMl90IHNyY09mZnNldCwgaW50
MzJfdCBsZW5ndGgpKQogewogICAgIEFTU0VSVChkc3RUYWJsZUluZGV4IDwgaW5zdGFuY2UtPm1v
ZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgpKTsKICAgICBBU1NFUlQoc3Jj
VGFibGVJbmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxl
Q291bnQoKSk7CkBAIC05MDMsNyArOTA5LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbk1lbW9yeUF0b21pY05vdGlmeSwgaW50MzJfdCwgKEluc3RhbmNlKiBpbnN0YW4KICAg
ICByZXR1cm4gUGFya2luZ0xvdDo6dW5wYXJrQ291bnQocG9pbnRlciwgY291bnQpOwogfQogCi1K
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUluaXQsIGJvb2wsIChJ
bnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgsIHVpbnQzMl90IGRz
dEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGxlbmd0aCkpCitKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUluaXQsIHNpemVfdCwgKEluc3Rh
bmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCwgdWludDMyX3QgZHN0QWRk
cmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgbGVuZ3RoKSkKIHsKICAgICBBU1NF
UlQoZGF0YVNlZ21lbnRJbmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlv
bigpLmRhdGFTZWdtZW50c0NvdW50KCkpOwogICAgIHJldHVybiBpbnN0YW5jZS0+bWVtb3J5SW5p
dChkc3RBZGRyZXNzLCBzcmNBZGRyZXNzLCBsZW5ndGgsIGRhdGFTZWdtZW50SW5kZXgpOwpAQCAt
OTE1LDYgKzkyMSw2NSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbURh
dGFEcm9wLCB2b2lkLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZwogICAgIGluc3RhbmNlLT5k
YXRhRHJvcChkYXRhU2VnbWVudEluZGV4KTsKIH0KIAorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21UaHJvdywgdm9pZCosIChJbnN0YW5jZSogaW5zdGFuY2UsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgRW5jb2RlZEpTVmFsdWUqIGFy
Z3VtZW50cykpCit7CisgICAgaW5zdGFuY2UtPnN0b3JlVG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7
CisKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3du
ZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRhZyA9IGluc3RhbmNlLT50YWcoZXhjZXB0aW9u
SW5kZXgpOworCisgICAgRml4ZWRWZWN0b3I8dWludDY0X3Q+IHZhbHVlcyh0YWcucGFyYW1ldGVy
Q291bnQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhZy5wYXJhbWV0ZXJDb3Vu
dCgpOyArK2kpCisgICAgICAgIHZhbHVlc1tpXSA9IGFyZ3VtZW50c1tpXTsKKworICAgIEpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUV4Y2VwdGlvblN0cnVjdHVyZSgpLCB0
YWcsIFdURk1vdmUodmFsdWVzKSk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBleGNlcHRpb24pOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1l
KTsKKyAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNTRVJUKCEhdm0u
dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRo
aXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChi
b3RoIG9wX2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uKQorICAgIC8v
IHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUg
YmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNv
bXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2Fs
bGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJh
bWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAv
LyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1v
dmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJh
bWUtPmNhbGxlZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3Rh
dGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4oanNJbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5l
UENGb3JUaHJvdzsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21S
ZXRocm93LCB2b2lkKiwgKEluc3RhbmNlKiBpbnN0YW5jZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEVuY29kZWRKU1ZhbHVlIHRocm93blZhbHVlKSkKK3sKKyAgICBpbnN0YW5jZS0+c3RvcmVUb3BD
YWxsRnJhbWUoY2FsbEZyYW1lKTsKKworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0
YW5jZSA9IGluc3RhbmNlLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgSlNWYWx1ZTo6ZGVjb2RlKHRocm93blZhbHVlKSk7CisKKyAgICBnZW5l
cmljVW53aW5kKHZtLCBjYWxsRnJhbWUpOworICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNh
dGNoKTsKKyAgICBBU1NFUlQoISF2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CisgICAgLy8g
RklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhpcyBpcyBhIHRvdGFs
IGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGxsaW50X2hhbmRsZV91bmNh
dWdodF9leGNlcHRpb24pCisgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVs
ZCB0byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQorICAg
IC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIu
KSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KKyAgICAvLyBmb3IgZXhjZXB0
aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3Rl
ciBiZWZvcmUganVtcGluZworICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2Ug
ZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAorICAgIHZtLmNhbGxl
ZUZvcldhc21DYXRjaCA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgYml0d2lzZV9jYXN0PHVp
bnQ2NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSldID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihqc0luc3RhbmNlLT5tb2R1bGUoKSk7CisgICAg
cmV0dXJuIHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93OworfQorCiBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24sIHZvaWQqLCAoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIFdhc206OkV4Y2VwdGlvblR5cGUgdHlwZSwgSW5zdGFuY2UqIHdhc21JbnN0YW5j
ZSkpCiB7CiAgICAgd2FzbUluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFtZShjYWxsRnJhbWUpOwpA
QCAtOTMxLDcgKzk5Niw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNt
VG9KU0V4Y2VwdGlvbiwgdm9pZCosIChDYWxsRnJhbWUqIGNhbGxGcmFtCiAgICAgICAgIGlmICh0
eXBlID09IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZsb3cpCiAgICAgICAgICAgICBlcnJvciA9
IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBlcnJvciA9IGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFs
T2JqZWN0LCB2bSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBlKSk7Cisg
ICAgICAgICAgICBlcnJvciA9IGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFs
T2JqZWN0LCB2bSwgdHlwZSk7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgZXJyb3IpOwogICAgIH0KIApAQCAtOTQ1LDEwICsxMDEwLDM0IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbiwgdm9pZCosIChD
YWxsRnJhbWUqIGNhbGxGcmFtCiAgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxs
RnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKICAg
ICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCBy
ZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxs
RnJhbWUtPmNhbGxlZSgpOwogICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlb
c3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1
aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVsZSgpKTsKICAgICByZXR1cm4gdm0udGFyZ2V0TWFjaGlu
ZVBDRm9yVGhyb3c7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNt
UmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCBQb2ludGVyUGFpciwgKEluc3Rh
bmNlKiBpbnN0YW5jZSkpCit7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3RhbmNl
ID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKKyAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgUkVMRUFTRV9BU1NFUlQoISF0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKTsKKworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gdGhyb3dTY29wZS5leGNl
cHRpb24oKTsKKyAgICBKU1ZhbHVlIHRocm93blZhbHVlID0gZXhjZXB0aW9uLT52YWx1ZSgpOwor
CisgICAgLy8gV2Ugd2FudCB0byBjbGVhciB0aGUgZXhjZXB0aW9uIGhlcmUgcmF0aGVyIHRoYW4g
aW4gdGhlIGNhdGNoIHByb2xvZ3VlCisgICAgLy8gSklUIGNvZGUgYmVjYXVzZSBjbGVhcmluZyBp
dCBhbHNvIGVudGFpbHMgY2xlYXJpbmcgYSBiaXQgaW4gYW4gQXRvbWljCisgICAgLy8gYml0IGZp
ZWxkIGluIFZNVHJhcHMuCisgICAgdGhyb3dTY29wZS5jbGVhckV4Y2VwdGlvbigpOworCisgICAg
dm9pZCogcGF5bG9hZCA9IG51bGxwdHI7CisgICAgaWYgKEpTV2ViQXNzZW1ibHlFeGNlcHRpb24q
IHdhc21FeGNlcHRpb24gPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPih2
bSwgdGhyb3duVmFsdWUpKQorICAgICAgICBwYXlsb2FkID0gYml0d2lzZV9jYXN0PHZvaWQqPih3
YXNtRXhjZXB0aW9uLT5wYXlsb2FkKCkuZGF0YSgpKTsKKyAgICByZXR1cm4gUG9pbnRlclBhaXIg
eyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFsdWU6OmVuY29kZSh0aHJvd25WYWx1ZSkpLCBwYXls
b2FkIH07Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKIElHTk9SRV9XQVJOSU5H
U19FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRp
b25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5oCmluZGV4
IGVlYmU1Yjc2NGJhOC4uNWVjN2E1OTQ3Y2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PcGVyYXRpb25zLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKU0NKU1Zh
bHVlLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhSZXR1cm5UeXBlLmgiCiAjaW5jbHVkZSAiV2FzbUV4
Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNtT1NSRW50cnlEYXRhLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC00Niw2ICs0Nyw4IEBAIG5hbWVzcGFjZSBXYXNtIHsKIGNsYXNzIEluc3Rh
bmNlOwogY2xhc3MgU2lnbmF0dXJlOwogCit2b2lkIGxvYWRWYWx1ZXNJbnRvQnVmZmVyKFByb2Jl
OjpDb250ZXh0JiwgY29uc3QgU3RhY2tNYXAmLCB1aW50NjRfdCogYnVmZmVyKTsKKwogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uV2FzbVRyaWdnZXJPU1JFbnRyeU5vdywgdm9pZCwgKFByb2JlOjpDb250ZXh0JikpOwogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVHJpZ2dlclRpZXJVcE5vdywgdm9p
ZCwgKEluc3RhbmNlKiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCkpOwpAQCAtNjYsMjYgKzY5LDM0
IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVdyaXRlQmFycmllclNs
b3dQYXRoLCB2b2lkLCAoSlNDZWxsKiwgVk0qCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblBvcGNvdW50MzIsIHVpbnQzMl90LCAoaW50MzJfdCkpOwogSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25Qb3Bjb3VudDY0LCB1aW50NjRfdCwgKGludDY0X3QpKTsKIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR3Jvd01lbW9yeSwgaW50MzJfdCwgKHZv
aWQqLCBJbnN0YW5jZSosIGludDMyX3QpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uV2FzbU1lbW9yeUZpbGwsIGJvb2wsIChJbnN0YW5jZSosIHVpbnQzMl90IGRzdEFkZHJl
c3MsIHVpbnQzMl90IHRhcmdldFZhbHVlLCB1aW50MzJfdCBjb3VudCkpOwotSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSwgYm9vbCwgKEluc3RhbmNlKiwg
dWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgY291bnQp
KTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUZpbGwsIHNp
emVfdCwgKEluc3RhbmNlKiwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFs
dWUsIHVpbnQzMl90IGNvdW50KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bldhc21NZW1vcnlDb3B5LCBzaXplX3QsIChJbnN0YW5jZSosIHVpbnQzMl90IGRzdEFkZHJlc3Ms
IHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGNvdW50KSk7CiAKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V2FzbVRhYmxlRWxlbWVudCwgRW5jb2RlZEpTVmFsdWUs
IChJbnN0YW5jZSosIHVuc2lnbmVkLCBpbnQzMl90KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblNldFdhc21UYWJsZUVsZW1lbnQsIGJvb2wsIChJbnN0YW5jZSosIHVuc2ln
bmVkLCB1aW50MzJfdCwgRW5jb2RlZEpTVmFsdWUgZW5jVmFsdWUpKTsKK0pTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxlbWVudCwgc2l6ZV90LCAoSW5zdGFu
Y2UqLCB1bnNpZ25lZCwgdWludDMyX3QsIEVuY29kZWRKU1ZhbHVlIGVuY1ZhbHVlKSk7CiBKU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZWZGdW5jLCBFbmNvZGVkSlNWYWx1
ZSwgKEluc3RhbmNlKiwgdWludDMyX3QpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uV2FzbVRhYmxlSW5pdCwgYm9vbCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZWxlbWVudElu
ZGV4LCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNy
Y09mZnNldCwgdWludDMyX3QgbGVuZ3RoKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbldhc21UYWJsZUluaXQsIHNpemVfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZWxlbWVu
dEluZGV4LCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90
IHNyY09mZnNldCwgdWludDMyX3QgbGVuZ3RoKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21FbGVtRHJvcCwgdm9pZCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZWxlbWVu
dEluZGV4KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUdy
b3csIGludDMyX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkLCBFbmNvZGVkSlNWYWx1ZSBmaWxsLCB1
aW50MzJfdCBkZWx0YSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNt
VGFibGVGaWxsLCBib29sLCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgdWludDMyX3Qgb2Zmc2V0LCBF
bmNvZGVkSlNWYWx1ZSBmaWxsLCB1aW50MzJfdCBjb3VudCkpOwotSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVDb3B5LCBib29sLCAoSW5zdGFuY2UqLCB1bnNpZ25l
ZCBkc3RUYWJsZUluZGV4LCB1bnNpZ25lZCBzcmNUYWJsZUluZGV4LCBpbnQzMl90IGRzdE9mZnNl
dCwgaW50MzJfdCBzcmNPZmZzZXQsIGludDMyX3QgbGVuZ3RoKSk7CitKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUZpbGwsIHNpemVfdCwgKEluc3RhbmNlKiwgdW5z
aWduZWQsIHVpbnQzMl90IG9mZnNldCwgRW5jb2RlZEpTVmFsdWUgZmlsbCwgdWludDMyX3QgY291
bnQpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlQ29weSwg
c2l6ZV90LCAoSW5zdGFuY2UqLCB1bnNpZ25lZCBkc3RUYWJsZUluZGV4LCB1bnNpZ25lZCBzcmNU
YWJsZUluZGV4LCBpbnQzMl90IGRzdE9mZnNldCwgaW50MzJfdCBzcmNPZmZzZXQsIGludDMyX3Qg
bGVuZ3RoKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFdhc21UYWJs
ZVNpemUsIGludDMyX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkKSk7CiAKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uTWVtb3J5QXRvbWljV2FpdDMyLCBpbnQzMl90LCAoSW5zdGFu
Y2UqIGluc3RhbmNlLCB1bnNpZ25lZCBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIHVpbnQzMl90IHZh
bHVlLCBpbnQ2NF90IHRpbWVvdXQpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uTWVtb3J5QXRvbWljV2FpdDY0LCBpbnQzMl90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNp
Z25lZCBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIHVpbnQ2NF90IHZhbHVlLCBpbnQ2NF90IHRpbWVv
dXQpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTWVtb3J5QXRvbWljTm90
aWZ5LCBpbnQzMl90LCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGludDMyX3QpKTsK
LUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUluaXQsIGJvb2ws
IChJbnN0YW5jZSosIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgsIHVpbnQzMl90IGRzdEFkZHJl
c3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGxlbmd0aCkpOworSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5SW5pdCwgc2l6ZV90LCAoSW5zdGFuY2Uq
LCB1bnNpZ25lZCBkYXRhU2VnbWVudEluZGV4LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJf
dCBzcmNBZGRyZXNzLCB1aW50MzJfdCBsZW5ndGgpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uV2FzbURhdGFEcm9wLCB2b2lkLCAoSW5zdGFuY2UqLCB1bnNpZ25lZCBkYXRh
U2VnbWVudEluZGV4KSk7CiAKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bVRocm93LCB2b2lkKiwgKEluc3RhbmNlKiwgQ2FsbEZyYW1lKiwgdW5zaWduZWQgZXhjZXB0aW9u
SW5kZXgsIEVuY29kZWRKU1ZhbHVlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25XYXNtUmV0aHJvdywgdm9pZCosIChJbnN0YW5jZSosIENhbGxGcmFtZSosIEVuY29kZWRK
U1ZhbHVlIHRocm93blZhbHVlKSk7CisKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uV2FzbVRvSlNFeGNlcHRpb24sIHZvaWQqLCAoQ2FsbEZyYW1lKiwgV2FzbTo6RXhjZXB0aW9u
VHlwZSwgSW5zdGFuY2UqKSk7CitzdHJ1Y3QgUG9pbnRlclBhaXIgeworICAgIHZvaWQqIGZpcnN0
OworICAgIHZvaWQqIHNlY29uZDsKK307CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbldhc21SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsIFBvaW50ZXJQYWly
LCAoSW5zdGFuY2UqKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcAppbmRleCAwZjhj
Y2I3ZTJjM2IuLjM1MmI5ZGE5MDVkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcApAQCAtOTEsNiArOTEsNyBAQCBhdXRvIFNlY3Rpb25Q
YXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIW1faW5mby0+Z2xvYmFscy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgZ2xvYmFs
cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMg
YmVsb3cuCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRzLnRyeVJlc2Vy
dmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZv
ciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnRzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0
ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFtX2luZm8tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNp
dHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1w
b3J0Q291bnQsICIgaW1wb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZXMiKTsgLy8gRklYTUUgdGhpcyBv
dmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgorICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlS
ZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9y
eSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0IGV4Y2VwdGlvbiBzaWduYXR1cmVzIik7IC8v
IEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4K
IAogICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1w
b3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7CiAgICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsK
QEAgLTE0Miw2ICsxNDMsMTkgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCgpIC0+
IFBhcnRpYWxSZXN1bHQKICAgICAgICAgICAgIG1faW5mby0+Z2xvYmFscy51bmNoZWNrZWRBcHBl
bmQoV1RGTW92ZShnbG9iYWwpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAg
ICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsKKyAgICAgICAgICAgIHVpbnQ4X3Qg
dGFnVHlwZTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgodGFn
VHlwZSksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0IGV4Y2VwdGlvbidz
IHRhZyB0eXBlIik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhZ1R5cGUsIGlt
cG9ydE51bWJlciwgInRoIEltcG9ydCBleGNlcHRpb24gaGFzIHRhZyB0eXBlICIsIHRhZ1R5cGUs
ICIgYnV0IHRoZSBvbmx5IHN1cHBvcnRlZCB0YWcgdHlwZSBpcyAwIik7CisKKyAgICAgICAgICAg
IHVpbnQzMl90IGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4OworICAgICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2Fu
J3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGV4Y2VwdGlvbiBzaWduYXR1cmUg
aW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIici
KTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhjZXB0aW9uU2lnbmF0dXJlSW5k
ZXggPj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICJpbnZhbGlkIGV4Y2VwdGlvbiBz
aWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZXhjZXB0aW9uU2ln
bmF0dXJlSW5kZXgsICIgaXMgb3V0IG9mIHJhbmdlIG9mICIsIG1faW5mby0+dXNlZFNpZ25hdHVy
ZXMuc2l6ZSgpLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmll
bGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmltcG9ydEV4
Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOworICAgICAgICAgICAgU2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dXNl
ZFNpZ25hdHVyZXNbZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXhdKTsKKyAgICAgICAgICAgIG1faW5m
by0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0
dXJlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgfQogCiAg
ICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1vZHVsZVN0
cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7CkBAIC0zNTgs
NiArMzcyLDExIEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VFeHBvcnQoKSAtPiBQYXJ0aWFs
UmVzdWx0CiAgICAgICAgICAgICAgICAgZ2xvYmFsLmJpbmRpbmdNb2RlID0gR2xvYmFsSW5mb3Jt
YXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsKKyAgICAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5mby0+ZXhjZXB0aW9uSW5kZXhT
cGFjZVNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGV4Y2VwdGlv
biBudW1iZXIgIiwga2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGV4Y2VwdGlvbiBpbmRleCBz
cGFjZSAiLCBtX2luZm8tPmV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCksICIsIG5hbWVkICciLCBm
aWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIG1faW5mby0+YWRkRGVjbGFyZWRFeGNlcHRp
b24oa2luZEluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIH0K
IAogICAgICAgICBtX2luZm8tPmV4cG9ydHMudW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZShmaWVs
ZFN0cmluZyksIGtpbmQsIGtpbmRJbmRleCB9KTsKQEAgLTgxNyw2ICs4MzYsMjcgQEAgYXV0byBT
ZWN0aW9uUGFyc2VyOjpwYXJzZURhdGFDb3VudCgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICByZXR1
cm4geyB9OwogfQogCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRXhjZXB0aW9uKCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGV4Y2VwdGlvbkNvdW50OworICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4Y2VwdGlvbkNvdW50KSwgImNhbid0IGdldCBF
eGNlcHRpb24gc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleGNl
cHRpb25Db3VudCA+IG1heEV4Y2VwdGlvbnMsICJFeHBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRv
byBiaWcgIiwgZXhjZXB0aW9uQ291bnQsICIgbWF4aW11bSAiLCBtYXhFeGNlcHRpb25zKTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJl
SW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9uQ291bnQpLCAiY2FuJ3QgYWxsb2Nh
dGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgZXhjZXB0aW9uQ291bnQsICIgZXhjZXB0aW9ucyIpOwor
CisgICAgZm9yICh1aW50MzJfdCBleGNlcHRpb25OdW1iZXIgPSAwOyBleGNlcHRpb25OdW1iZXIg
PCBleGNlcHRpb25Db3VudDsgKytleGNlcHRpb25OdW1iZXIpIHsKKyAgICAgICAgdWludDhfdCB0
YWdUeXBlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KHRhZ1R5cGUp
LCAiY2FuJ3QgZ2V0ICIsIGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2VwdGlvbiB0YWcgdHlwZSIp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhZ1R5cGUsIGV4Y2VwdGlvbk51bWJlciwg
InRoIEV4Y2VwdGlvbiBoYXMgdGFnIHR5cGUgIiwgdGFnVHlwZSwgIiBidXQgdGhlIG9ubHkgc3Vw
cG9ydGVkIHRhZyB0eXBlIGlzIDAiKTsKKworICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSwg
ImNhbid0IGdldCAiLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24ncyB0eXBlIG51bWJl
ciIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9pbmZvLT51
c2VkU2lnbmF0dXJlcy5zaXplKCksIGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2VwdGlvbiB0eXBl
IG51bWJlciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOworICAgICAgICBTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2Vk
U2lnbmF0dXJlc1t0eXBlTnVtYmVyXSk7CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxFeGNlcHRp
b25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7CisgICAg
fQorCisgICAgcmV0dXJuIHsgfTsKK30KIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VDdXN0b20o
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ3VzdG9tU2VjdGlvbiBzZWN0aW9uOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaAppbmRleCBmMzY5ZTdiODZjYWYuLmJl
ZjIwNzAxZjQwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNl
Y3Rpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgK
QEAgLTQ1LDcgKzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKICAgICBt
YWNybyhFbGVtZW50LCAgICA5LCAiRWxlbWVudHMgc2VjdGlvbiIpIFwKICAgICBtYWNybyhDb2Rl
LCAgICAgIDEwLCAiRnVuY3Rpb24gYm9kaWVzIChjb2RlKSIpIFwKICAgICBtYWNybyhEYXRhLCAg
ICAgIDExLCAiRGF0YSBzZWdtZW50cyIpIFwKLSAgICBtYWNybyhEYXRhQ291bnQsIDEyLCAiRGF0
YSBjb3VudCIpCisgICAgbWFjcm8oRGF0YUNvdW50LCAxMiwgIkRhdGEgY291bnQiKSBcCisgICAg
bWFjcm8oRXhjZXB0aW9uLCAxMywgIkV4Y2VwdGlvbiBkZWNsYXJhdGlvbnMiKSBcCiAKIGVudW0g
Y2xhc3MgU2VjdGlvbiA6IHVpbnQ4X3QgewogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgQmVn
aW4gaXMgbGVzcyB0aGFuIGV2ZXJ5IG90aGVyIHNlY3Rpb24gbnVtYmVyIGFuZCB0aGF0IEN1c3Rv
bSBpcyBncmVhdGVyLgpAQCAtOTAsNiArOTEsMTAgQEAgaW5saW5lIGJvb2wgdmFsaWRhdGVPcmRl
cihTZWN0aW9uIHByZXZpb3VzS25vd24sIFNlY3Rpb24gbmV4dCkKICAgICBBU1NFUlQoaXNLbm93
blNlY3Rpb24ocHJldmlvdXNLbm93bikgfHwgcHJldmlvdXNLbm93biA9PSBTZWN0aW9uOjpCZWdp
bik7CiAgICAgaWYgKHByZXZpb3VzS25vd24gPT0gU2VjdGlvbjo6RGF0YUNvdW50ICYmIG5leHQg
PT0gU2VjdGlvbjo6Q29kZSkKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHByZXZpb3Vz
S25vd24gPT0gU2VjdGlvbjo6RXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gbmV4dCA+PSBTZWN0
aW9uOjpHbG9iYWw7CisgICAgaWYgKG5leHQgPT0gU2VjdGlvbjo6RXhjZXB0aW9uKQorICAgICAg
ICByZXR1cm4gcHJldmlvdXNLbm93biA8PSBTZWN0aW9uOjpNZW1vcnk7CiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KHByZXZpb3VzS25vd24pIDwgc3RhdGljX2Nhc3Q8dWludDhfdD4o
bmV4dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21T
aWduYXR1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5j
cHAKaW5kZXggOWNhNjhmNWUwMGIyLi42YjliYmY3MTNhMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwCkBAIC05OSw3ICs5OSw3IEBAIFJlZlB0cjxT
aWduYXR1cmU+IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlKFNpZ25hdHVyZUFyZ0NvdW50IHJldHVybkNv
dW50LCBTaWduYXR1cmVBCiAKIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWduYXR1cmVJbmZvcm1h
dGlvbigpCiB7Ci0jZGVmaW5lIE1BS0VfVEhVTktfU0lHTkFUVVJFKHR5cGUsIGVuYywgc3RyLCB2
YWwpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIE1BS0VfVEhVTktfU0lHTkFU
VVJFKHR5cGUsIGVuYywgc3RyLCB2YWwsIF8pICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChUeXBlS2luZDo6dHlwZSAhPSBUeXBlS2luZDo6
Vm9pZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBSZWZQdHI8
U2lnbmF0dXJlPiBzaWcgPSBTaWduYXR1cmU6OnRyeUNyZWF0ZSgxLCAwKTsgICAgICAgICAgICBc
CkBAIC0xNjgsNiArMTY4LDEwIEBAIHN0cnVjdCBQYXJhbWV0ZXJUeXBlcyB7CiAKIFJlZlB0cjxT
aWduYXR1cmU+IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpzaWduYXR1cmVGb3IoY29uc3QgVmVjdG9y
PFR5cGUsIDE+JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3MpCiB7CisgICAgaWYg
Y29uc3RleHByIChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdHMuY29u
dGFpbnMoV2FzbTo6VHlwZXM6OlZvaWQpKTsKKyAgICAgICAgQVNTRVJUKCFhcmdzLmNvbnRhaW5z
KFdhc206OlR5cGVzOjpWb2lkKSk7CisgICAgfQogICAgIFNpZ25hdHVyZUluZm9ybWF0aW9uJiBp
bmZvID0gc2luZ2xldG9uKCk7CiAgICAgTG9ja2VyIGxvY2tlciB7IGluZm8ubV9sb2NrIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKaW5kZXggZTc4
Nzg2NTVlNDAxLi5jMzU1MTlmNDNhYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TbG93UGF0aHMuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiSklURXhjZXB0
aW9ucy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRl
ICJXYXNtQkJRUGxhbi5oIgpAQCAtNTg2LDYgKzU4OCwxMDAgQEAgV0FTTV9TTE9XX1BBVEhfREVD
TChtZW1vcnlfYXRvbWljX25vdGlmeSkKICAgICBXQVNNX1JFVFVSTihyZXN1bHQpOwogfQogCitX
QVNNX1NMT1dfUEFUSF9ERUNMKHRocm93KQoreworICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxG
cmFtZShjYWxsRnJhbWUpOworCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3RhbmNl
ID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKKyAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHBjLT5hczxXYXNt
VGhyb3csIFdhc21PcGNvZGVUcmFpdHM+KCk7CisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcgPSBp
bnN0YW5jZS0+dGFnKGluc3RydWN0aW9uLm1fZXhjZXB0aW9uSW5kZXgpOworCisgICAgRml4ZWRW
ZWN0b3I8dWludDY0X3Q+IHZhbHVlcyh0YWcucGFyYW1ldGVyQ291bnQoKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRhZy5wYXJhbWV0ZXJDb3VudCgpOyArK2kpCisgICAgICAgIHZh
bHVlc1tpXSA9IFJFQUQoKGluc3RydWN0aW9uLm1fZmlyc3RWYWx1ZSAtIGkpKS5lbmNvZGVkSlNW
YWx1ZSgpOworCisgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogZXhjZXB0aW9uID0gSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RXhj
ZXB0aW9uU3RydWN0dXJlKCksIHRhZywgV1RGTW92ZSh2YWx1ZXMpKTsKKyAgICB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGV4Y2VwdGlvbik7CisKKyAgICBnZW5lcmlj
VW53aW5kKHZtLCBjYWxsRnJhbWUpOworICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNo
KTsKKyAgICBBU1NFUlQoISF2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CisgICAgLy8gRklY
TUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhpcyBpcyBhIHRvdGFsIGhh
Y2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGxsaW50X2hhbmRsZV91bmNhdWdo
dF9leGNlcHRpb24pCisgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0
byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQorICAgIC8v
IHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIuKSBX
ZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KKyAgICAvLyBmb3IgZXhjZXB0aW9u
cyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBi
ZWZvcmUganVtcGluZworICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlk
IHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCisgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAorICAgIHZtLmNhbGxlZUZv
cldhc21DYXRjaCA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2
NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSld
ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihqc0luc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgV0FT
TV9SRVRVUk5fVFdPKHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93LCBudWxscHRyKTsKK30KKwor
V0FTTV9TTE9XX1BBVEhfREVDTChyZXRocm93KQoreworICAgIGluc3RhbmNlLT5zdG9yZVRvcENh
bGxGcmFtZShjYWxsRnJhbWUpOworCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3Rh
bmNlID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKKyAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHBjLT5hczxX
YXNtUmV0aHJvdywgV2FzbU9wY29kZVRyYWl0cz4oKTsKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9
IFJFQUQoaW5zdHJ1Y3Rpb24ubV9leGNlcHRpb24pLmpzVmFsdWUoKTsKKyAgICB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGV4Y2VwdGlvbik7CisKKyAgICBnZW5lcmlj
VW53aW5kKHZtLCBjYWxsRnJhbWUpOworICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNo
KTsKKyAgICBBU1NFUlQoISF2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CisgICAgLy8gRklY
TUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhpcyBpcyBhIHRvdGFsIGhh
Y2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGxsaW50X2hhbmRsZV91bmNhdWdo
dF9leGNlcHRpb24pCisgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0
byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQorICAgIC8v
IHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIuKSBX
ZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KKyAgICAvLyBmb3IgZXhjZXB0aW9u
cyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBi
ZWZvcmUganVtcGluZworICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlk
IHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCisgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAorICAgIHZtLmNhbGxlZUZv
cldhc21DYXRjaCA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2
NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSld
ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihqc0luc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgV0FT
TV9SRVRVUk5fVFdPKHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93LCBudWxscHRyKTsKK30KKwor
V0FTTV9TTE9XX1BBVEhfREVDTChyZXRyaWV2ZV9hbmRfY2xlYXJfZXhjZXB0aW9uKQoreworICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJ
bnN0YW5jZSA9IGluc3RhbmNlLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgp
OworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCEhdGhyb3dT
Y29wZS5leGNlcHRpb24oKSk7CisKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHRocm93U2Nv
cGUuZXhjZXB0aW9uKCk7CisgICAgSlNWYWx1ZSB0aHJvd25WYWx1ZSA9IGV4Y2VwdGlvbi0+dmFs
dWUoKTsKKworICAgIHZvaWQqIHBheWxvYWQgPSBudWxscHRyOworICAgIGlmIChwYy0+aXM8V2Fz
bUNhdGNoLCBXYXNtT3Bjb2RlVHJhaXRzPigpKSB7CisgICAgICAgIEpTV2ViQXNzZW1ibHlFeGNl
cHRpb24qIHdhc21FeGNlcHRpb24gPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRp
b24qPih2bSwgdGhyb3duVmFsdWUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghIXdhc21FeGNl
cHRpb24pOworICAgICAgICBwYXlsb2FkID0gYml0d2lzZV9jYXN0PHZvaWQqPih3YXNtRXhjZXB0
aW9uLT5wYXlsb2FkKCkuZGF0YSgpKTsKKyAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IHBjLT5h
czxXYXNtQ2F0Y2gsIFdhc21PcGNvZGVUcmFpdHM+KCk7CisgICAgICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihpbnN0cnVjdGlvbi5tX2V4Y2VwdGlvbikgPSB0aHJvd25WYWx1ZTsKKyAgICB9IGVs
c2UgeworICAgICAgICBhdXRvIGluc3RydWN0aW9uID0gcGMtPmFzPFdhc21DYXRjaEFsbCwgV2Fz
bU9wY29kZVRyYWl0cz4oKTsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGluc3RydWN0
aW9uLm1fZXhjZXB0aW9uKSA9IHRocm93blZhbHVlOworICAgIH0KKworICAgIC8vIFdlIHdhbnQg
dG8gY2xlYXIgdGhlIGV4Y2VwdGlvbiBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBjYXRjaCBwcm9s
b2d1ZQorICAgIC8vIEpJVCBjb2RlIGJlY2F1c2UgY2xlYXJpbmcgaXQgYWxzbyBlbnRhaWxzIGNs
ZWFyaW5nIGEgYml0IGluIGFuIEF0b21pYworICAgIC8vIGJpdCBmaWVsZCBpbiBWTVRyYXBzLgor
ICAgIHRocm93U2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICBXQVNNX1JFVFVSTl9UV08ocGMs
IHBheWxvYWQpOworfQorCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhf
d2FzbV90aHJvd19leGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0
aW9uKiBwYywgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpFeGNlcHRpb25UeXBlIGV4
Y2VwdGlvblR5cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21TbG93UGF0aHMuaAppbmRleCA3NzYyMTE4MzM4YTcuLmI2NGNlN2NkZTQx
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuaApAQCAtODMs
NiArODMsOSBAQCBXQVNNX1NMT1dfUEFUSF9ISURERU5fREVDTChzZXRfZ2xvYmFsX3JlZl9wb3J0
YWJsZV9iaW5kaW5nKTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9yeV9hdG9taWNf
d2FpdDMyKTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9yeV9hdG9taWNfd2FpdDY0
KTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9yeV9hdG9taWNfbm90aWZ5KTsKK1dB
U01fU0xPV19QQVRIX0hJRERFTl9ERUNMKHRocm93KTsKK1dBU01fU0xPV19QQVRIX0hJRERFTl9E
RUNMKHJldGhyb3cpOworV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wocmV0cmlldmVfYW5kX2Ns
ZWFyX2V4Y2VwdGlvbik7CiAKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0
aF93YXNtX3Rocm93X2V4Y2VwdGlvbihDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbiosIFdh
c206Okluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6RXhjZXB0aW9uVHlwZSkgUkVGRVJFTkNFRF9G
Uk9NX0FTTSBXVEZfSU5URVJOQUw7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93
X3BhdGhfd2FzbV9wb3Bjb3VudChjb25zdCBJbnN0cnVjdGlvbiogcGMsIHVpbnQzMl90KSBSRUZF
UkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKaW5kZXggZmE1NTJlZmZmMTc0Li4xMmNk
YWE5NjVlYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJl
YW1pbmdQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJl
YW1pbmdQYXJzZXIuY3BwCkBAIC0xMTcsNiArMTE3LDcgQEAgYXV0byBTdHJlYW1pbmdQYXJzZXI6
OnBhcnNlQ29kZVNlY3Rpb25TaXplKHVpbnQzMl90IGZ1bmN0aW9uQ291bnQpIC0+IFN0YXRlCiAg
ICAgbV9mdW5jdGlvbkNvdW50ID0gZnVuY3Rpb25Db3VudDsKICAgICBtX2Z1bmN0aW9uSW5kZXgg
PSAwOwogICAgIG1fY29kZU9mZnNldCA9IG1fb2Zmc2V0OworICAgIG1faW5mby0+bV9mdW5jdGlv
bkRvZXNOb3RVc2VFeGNlcHRpb25zLmVuc3VyZVNpemUoZnVuY3Rpb25Db3VudCk7CiAKICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uQ291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpLCAiQ29kZSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBmdW5j
dGlvbkNvdW50KTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uQ291bnQgIT0gbV9p
bmZvLT5mdW5jdGlvbnMuc2l6ZSgpLCAiQ29kZSBzZWN0aW9uIGNvdW50ICIsIGZ1bmN0aW9uQ291
bnQsICIgZXhjZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBtX2luZm8t
PmZ1bmN0aW9ucy5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRhZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjRlYzY3MzYyMzJmMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuY3BwCkBA
IC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbVRhZy5oIgorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBXYXNtIHsKKwor
dWludDMyX3QgVGFnOjpzX2lkID0gMDsKKworfX0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAuLmNmODE3ODI5ZjI4YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuaApAQCAtMCwwICsxLDYyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFRhZyA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxUYWc+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUYWcpOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
VGFnPiBjcmVhdGUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIHsgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgVGFnKHNpZ25hdHVyZSkpOyB9CisKKyAgICBTaWduYXR1cmVBcmdDb3VudCBwYXJhbWV0
ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7IH0K
KyAgICBUeXBlIHBhcmFtZXRlcihTaWduYXR1cmVBcmdDb3VudCBpKSBjb25zdCB7IHJldHVybiBt
X3NpZ25hdHVyZS0+YXJndW1lbnQoaSk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBU
YWcmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lkID09IG90aGVyLm1faWQ7IH0KKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgVGFnJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pZCAhPSBvdGhl
ci5tX2lkOyB9CisKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2lnbmF0dXJlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGFnKGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlKQorICAgICAgICA6IG1faWQoKytzX2lkKQorICAgICAgICAsIG1fc2ln
bmF0dXJlKG1ha2VSZWYoc2lnbmF0dXJlKSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHVp
bnQzMl90IHNfaWQ7CisgICAgdWludDMyX3QgbV9pZDsKKyAgICBSZWY8Y29uc3QgU2lnbmF0dXJl
PiBtX3NpZ25hdHVyZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
aHVua3MuY3BwCmluZGV4IDc5ZDFiY2ZmODlmYi4uZmVjMmExMzc3OWJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDggKzI4LDExIEBACiAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UuaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0ludGVy
ZmFjZUpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRl
eHQuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJX
YXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCmluZGV4IGMyMzVjZmU2Mjk1ZS4uZjQ1ZGViMmE1
OTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklu
bGluZXNIZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21C
M0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQppbmRleCAxZTM4MGRlZjFjZDguLjk2NzdlYjgz
ZDk2YSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNt
QjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkKQEAgLTE0NCw3
ICsxNDQsNyBAQCBjbGFzcyBDb2RlR2VuZXJhdG9yOgogICAgICAgICAgICAgc2VsZi5hZHZhbmNl
KCkKICAgICAgICAgICAgIHNlbGYuY29uc3VtZSgiKSIpCiAgICAgICAgIGVsaWYgYXJndW1lbnRS
ZWdleC5tYXRjaChzZWxmLnRva2VuKCkpOgotICAgICAgICAgICAgcmVzdWx0ID0gImFyZyIgKyBz
ZWxmLnRva2VuKClbMTpdCisgICAgICAgICAgICByZXN1bHQgPSAiZ2V0KGFyZyIgKyBzZWxmLnRv
a2VuKClbMTpdICsgIikiCiAgICAgICAgICAgICBzZWxmLmFkdmFuY2UoKQogICAgICAgICBlbHNl
OgogICAgICAgICAgICAgb3AgPSBzZWxmLnRva2VuKCkKQEAgLTE1NiwxMyArMTU2LDE2IEBAIGNs
YXNzIENvZGVHZW5lcmF0b3I6CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCisgICAgZGVmIG1h
a2VSZXN1bHQoc2VsZiwgcmVzdWx0VmFsdWUpOgorICAgICAgICByZXR1cm4gcmVzdWx0VmFsdWUg
KyAiO1xuIiArICJyZXN1bHQgPSBwdXNoKHJlc3VsdFZhbHVlLT50eXBlKCkpO1xuIiArICJtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBvcmlnaW4o
KSwgcmVzdWx0LCByZXN1bHRWYWx1ZSk7IgorCiAgICAgZGVmIGdlbmVyYXRlKHNlbGYsIHdhc21P
cCk6CiAgICAgICAgIGlmIGxlbihzZWxmLnRva2VucykgPT0gMToKLSAgICAgICAgICAgIHBhcmFt
cyA9IFsiYXJnIiArIHN0cihwYXJhbSkgZm9yIHBhcmFtIGluIHJhbmdlKGxlbih3YXNtT3BbInBh
cmFtZXRlciJdKSldCi0gICAgICAgICAgICByZXR1cm4gIiAgICByZXN1bHQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjoiICsgc2VsZi50b2tlbigpICsgIiwg
b3JpZ2luKCksICIgKyAiLCAiLmpvaW4ocGFyYW1zKSArICIpIgorICAgICAgICAgICAgcGFyYW1z
ID0gWyJnZXQoYXJnIiArIHN0cihwYXJhbSkgKyAiKSIgZm9yIHBhcmFtIGluIHJhbmdlKGxlbih3
YXNtT3BbInBhcmFtZXRlciJdKSldCisgICAgICAgICAgICByZXR1cm4gc2VsZi5tYWtlUmVzdWx0
KCIgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBCMzo6IiArIHNlbGYudG9rZW4oKSArICIsIG9yaWdpbigpLCAiICsgIiwgIi5q
b2luKHBhcmFtcykgKyAiKSIpCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuZ2VuZXJhdGVPcGNvZGUo
KQotICAgICAgICBzZWxmLmNvZGUuYXBwZW5kKCJyZXN1bHQgPSAiICsgcmVzdWx0KQotICAgICAg
ICByZXR1cm4gIiAgICAiICsgIiAgICBcbiIuam9pbihzZWxmLmNvZGUpCisgICAgICAgIHNlbGYu
Y29kZS5hcHBlbmQoIlZhbHVlKiByZXN1bHRWYWx1ZSA9ICIgKyByZXN1bHQpCisgICAgICAgIHJl
dHVybiBzZWxmLm1ha2VSZXN1bHQoIiAgICAiICsgIiAgICBcbiIuam9pbihzZWxmLmNvZGUpKQog
CiAKIGRlZiB0ZW1wKGluZGV4KToKQEAgLTE5MSw3ICsxOTQsNyBAQCBkZWYgZ2VuZXJhdGVTaW1w
bGVDb2RlKG9wKToKICAgICByZXR1cm4gIiIiCiB0ZW1wbGF0ZTw+IGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjoiIiIgKyB3YXNtLnRvQ3BwKG9wWyJuYW1lIl0pICsgIj4oIiArICIs
ICIuam9pbihhcmdzKSArICIiIikgLT4gUGFydGlhbFJlc3VsdAogewotIiIiICsgZ2VuZXJhdGVC
M0NvZGUob3Bjb2RlLCBiM29wKSArICIiIjsKKyIiIiArIGdlbmVyYXRlQjNDb2RlKG9wY29kZSwg
YjNvcCkgKyAiIiIKICAgICByZXR1cm4geyB9OwogfQogIiIiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKaW5kZXggODVlMTljZTU4
MTZlLi4xODVjNTYzZDZkYWQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKQEAgLTUzLDcgKzUzLDcgQEAgZGVmIGNwcE1hY3Jv
KHdhc21PcGNvZGUsIHZhbHVlLCBiMywgaW5jLCAqZXh0cmFBcmdzKToKIGRlZiB0eXBlTWFjcm9p
emVyKCk6CiAgICAgaW5jID0gMAogICAgIGZvciB0eSBpbiB3YXNtLnR5cGVzOgotICAgICAgICB5
aWVsZCBjcHBNYWNybyh0eSwgd2FzbS50eXBlc1t0eV1bInZhbHVlIl0sIHdhc20udHlwZXNbdHld
WyJiM3R5cGUiXSwgaW5jKQorICAgICAgICB5aWVsZCBjcHBNYWNybyh0eSwgd2FzbS50eXBlc1t0
eV1bInZhbHVlIl0sIHdhc20udHlwZXNbdHldWyJiM3R5cGUiXSwgaW5jLCB0eSkKICAgICAgICAg
aW5jICs9IDEKIAogdHlwZV9kZWZpbml0aW9ucyA9IFsiI2RlZmluZSBGT1JfRUFDSF9XQVNNX1RZ
UEUobWFjcm8pIl0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseS5jcHAKaW5kZXggNzE4YmNiOTc1NTZlLi43OGYxNzZhYjYzYTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCkBAIC03OCw2ICs3OCw3
IEBAIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJs
eSIsICZCYXNlOjpzX2luZm8sICZ3ZWJBc3NlCiAvKiBTb3VyY2UgZm9yIEpTV2ViQXNzZW1ibHku
bHV0LmgKIEBiZWdpbiB3ZWJBc3NlbWJseVRhYmxlCiAgIENvbXBpbGVFcnJvciAgICBjcmVhdGVX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvciAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjaworICBFeGNl
cHRpb24gICAgICAgY3JlYXRlV2ViQXNzZW1ibHlFeGNlcHRpb24gICAgIERvbnRFbnVtfFByb3Bl
cnR5Q2FsbGJhY2sKICAgR2xvYmFsICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5R2xvYmFsICAg
ICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIEluc3RhbmNlICAgICAgICBjcmVhdGVX
ZWJBc3NlbWJseUluc3RhbmNlICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBMaW5r
RXJyb3IgICAgICAgY3JlYXRlV2ViQXNzZW1ibHlMaW5rRXJyb3IgICAgIERvbnRFbnVtfFByb3Bl
cnR5Q2FsbGJhY2sKQEAgLTg1LDYgKzg2LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1i
bHk6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5IiwgJkJhc2U6OnNfaW5mbywgJndlYkFzc2UKICAg
TW9kdWxlICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5TW9kdWxlICAgICAgICBEb250RW51bXxQ
cm9wZXJ0eUNhbGxiYWNrCiAgIFJ1bnRpbWVFcnJvciAgICBjcmVhdGVXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvciAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBUYWJsZSAgICAgICAgICAgY3Jl
YXRlV2ViQXNzZW1ibHlUYWJsZSAgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKKyAg
VGFnICAgICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5VGFnICAgICAgICAgICBEb250RW51bXxQ
cm9wZXJ0eUNhbGxiYWNrCiAgIGNvbXBpbGUgICAgICAgICB3ZWJBc3NlbWJseUNvbXBpbGVGdW5j
ICAgICAgICAgRnVuY3Rpb24gMQogICBpbnN0YW50aWF0ZSAgICAgd2ViQXNzZW1ibHlJbnN0YW50
aWF0ZUZ1bmMgICAgIEZ1bmN0aW9uIDEKICAgdmFsaWRhdGUgICAgICAgIHdlYkFzc2VtYmx5VmFs
aWRhdGVGdW5jICAgICAgICBGdW5jdGlvbiAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTRmMzYxZmZjYzIzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5j
cHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpzX2luZm8g
PSB7ICJXZWJBc3NlbWJseS5FeGNlcHRpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlFeGNlcHRpb24pIH07CisKK0pT
V2ViQXNzZW1ibHlFeGNlcHRpb246OkpTV2ViQXNzZW1ibHlFeGNlcHRpb24oVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcsIEZpeGVkVmVjdG9yPHVpbnQ2
NF90PiYmIHBheWxvYWQpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3RhZyht
YWtlUmVmKHRhZykpCisgICAgLCBtX3BheWxvYWQoV1RGTW92ZShwYXlsb2FkKSkKK3sKK30KKwor
dm9pZCBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1i
bHlFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworCisgICAg
YXV0byogZXhjZXB0aW9uID0ganNDYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPihjZWxsKTsK
KyAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IGV4Y2VwdGlvbi0+dGFnKCku
c2lnbmF0dXJlKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBpZiAoaXNSZWZUeXBlKHNpZ25hdHVyZS5hcmd1
bWVudChpKSkpCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChiaXR3aXNlX2Nhc3Q8V3JpdGVC
YXJyaWVyPFVua25vd24+PihleGNlcHRpb24tPnBheWxvYWQoKVtpXSkpOworICAgIH0KK30KKwor
REVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlFeGNlcHRpb24pOworCit2b2lkIEpT
V2ViQXNzZW1ibHlFeGNlcHRpb246OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIHN0YXRp
Y19jYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPihjZWxsKS0+SlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbjo6fkpTV2ViQXNzZW1ibHlFeGNlcHRpb24oKTsKK30KKworSlNWYWx1ZSBKU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uOjpnZXRBcmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWdu
ZWQgaSkgY29uc3QKK3sKKyAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IHRh
ZygpLnNpZ25hdHVyZSgpOworICAgIEFTU0VSVChpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSk7CisgICAgcmV0dXJuIHRvSlNWYWx1ZShnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVu
dChpKSwgcGF5bG9hZCgpW2ldKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kOTM5NGM2YjdlZmEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiV2FzbVRhZy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbiA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7Citw
dWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0OworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKworICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKiBjZWxsKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5RXhjZXB0
aW9uU3BhY2U8bW9kZT4oKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhFcnJvckluc3RhbmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcsIEZpeGVkVmVjdG9yPHVpbnQ2NF90
PiYmIHBheWxvYWQpCisgICAgeworICAgICAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBleGNl
cHRpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5RXhjZXB0aW9u
Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbih2bSwgc3RydWN0dXJlLCB0YWcsIFdU
Rk1vdmUocGF5bG9hZCkpOworICAgICAgICBleGNlcHRpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgICB9CisKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOworCisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcoKSBjb25zdCB7IHJldHVybiBtX3Rh
Zy5nZXQoKTsgfQorICAgIGNvbnN0IEZpeGVkVmVjdG9yPHVpbnQ2NF90PiYgcGF5bG9hZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGF5bG9hZDsgfQorICAgIEpTVmFsdWUgZ2V0QXJnKEpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbihWTSYsIFN0cnVjdHVyZSosIGNvbnN0IFdhc206OlRhZyYsIEZpeGVkVmVjdG9yPHVp
bnQ2NF90PiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIFJlZjxj
b25zdCBXYXNtOjpUYWc+IG1fdGFnOworICAgIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiBtX3BheWxv
YWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SGVscGVycy5oCmluZGV4IGQ4ZjI2NTBjYWE1OC4uYjYyMGVkY2EyOGE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU1NvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5oIgpAQCAtMTQ0LDYgKzE0NSw3NSBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
ZGVmYXVsdFZhbHVlRm9yUmVmZXJlbmNlVHlwZShjb25zdCBXYXNtOjpUeXBlIHR5cGUpCiAgICAg
cmV0dXJuIGpzTnVsbCgpOwogfQogCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgdG9KU1ZhbHVlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFdhc206OlR5cGUgdHlwZSwgdWludDY0
X3QgYml0cykKK3sKKyAgICBzd2l0Y2ggKHR5cGUua2luZCkgeworICAgIGNhc2UgV2FzbTo6VHlw
ZUtpbmQ6OlZvaWQ6CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIGNhc2UgV2Fz
bTo6VHlwZUtpbmQ6OkkzMjoKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KGJpdHMpKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGMzI6CisgICAgICAgIHJl
dHVybiBqc051bWJlcihiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PGludDMyX3Q+KGJp
dHMpKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjY0OgorICAgICAgICByZXR1cm4ganNO
dW1iZXIoYml0d2lzZV9jYXN0PGRvdWJsZT4oYml0cykpOworICAgIGNhc2UgV2FzbTo6VHlwZUtp
bmQ6Okk2NDoKKyAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oYml0cykpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6
OkV4dGVybnJlZjoKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGdW5jcmVmOgorICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PEpTVmFsdWU+KGJpdHMpOworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBKU1ZhbHVlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdWludDY0X3QgZnJvbUpTVmFsdWUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgV2FzbTo6VHlwZSB0eXBlLCBKU1Zh
bHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgc3dpdGNoICh0eXBlLmtpbmQp
IHsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpUeXBlSWR4OgorICAgIGNhc2UgV2FzbTo6VHlw
ZUtpbmQ6OkZ1bmNyZWY6IHsKKyAgICAgICAgYm9vbCBpc051bGxhYmxlID0gdHlwZS5pc051bGxh
YmxlKCk7CisgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IG51bGxw
dHI7CisgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0
aW9uID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKCFpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZt
LCB2YWx1ZSwgd2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSAmJiAoIWlzTnVsbGFi
bGUgfHwgIXZhbHVlLmlzTnVsbCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Io
Z2xvYmFsT2JqZWN0LCB2bSwgIkZ1bmNyZWYgbXVzdCBiZSBhbiBleHBvcnRlZCB3YXNtIGZ1bmN0
aW9uIikpOworICAgICAgICBpZiAodHlwZS5raW5kID09IFdhc206OlR5cGVLaW5kOjpUeXBlSWR4
ICYmICh3YXNtRnVuY3Rpb24gfHwgd2FzbVdyYXBwZXJGdW5jdGlvbikpIHsKKyAgICAgICAgICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IHBhcmFtSW5kZXggPSB0eXBlLmluZGV4OworICAgICAgICAg
ICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggYXJnSW5kZXg7CisgICAgICAgICAgICBpZiAod2FzbUZ1
bmN0aW9uKQorICAgICAgICAgICAgICAgIGFyZ0luZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1
cmVJbmRleCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ0luZGV4ID0g
d2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgIGlmIChw
YXJhbUluZGV4ICE9IGFyZ0luZGV4KQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3IoZ2xvYmFsT2JqZWN0LCB2bSwgIkFyZ3VtZW50IGZ1bmN0aW9uIGRpZCBub3QgbWF0Y2ggdGhl
IHJlZmVyZW5jZSB0eXBlIikpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIFdhc206OlR5cGVLaW5kOjpFeHRlcm5yZWY6CisgICAgICAgIGlmICghdHlwZS5pc051
bGxhYmxlKCkgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUV4
Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yKGdsb2JhbE9iamVjdCwgdm0sICJOb24tbnVsbCBFeHRlcm5yZWYgY2Fubm90IGJlIG51bGwi
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkkzMjoKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB2YWx1ZS50b0ludDMyKGdsb2JhbE9iamVjdCkp
OworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6Okk2NDoKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLnRvQmlnSW50NjQoZ2xvYmFs
T2JqZWN0KSkpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkYzMjoKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQo
Z2xvYmFsT2JqZWN0KSkpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkY2NDoKKyAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLnRv
TnVtYmVyKGdsb2JhbE9iamVjdCkpKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpWb2lkOgor
ICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkZ1bmM6CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6
UmVmTnVsbDoKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpSZWY6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCA2NmRhMTBh
NzgwMDMuLjFkN2Y0NmNkNjgzMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCkBAIC0yMTYsNiArMjE2LDcgQEAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRyeUNyZWF0ZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6
RnVuY3Rpb246CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6CiAgICAg
ICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZToKKyAgICAgICAgY2FzZSBXYXNtOjpF
eHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbjoKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBj
YXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OgogICAgICAgICAgICAgYnJlYWs7CkBAIC0y
NDIsNiArMjQzLDcgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnRyeUNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBjYXNlIFdhc206
OkV4dGVybmFsS2luZDo6RnVuY3Rpb246CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5k
OjpHbG9iYWw6CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZToKKyAgICAg
ICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbjoKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvci5jcHAKaW5kZXggMTAyMmE1MjI3NDMyLi5iMTAyOTdmZWRhYjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3IuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM3LDYgKzM3LDEzIEBAIEpTT2JqZWN0KiBjcmVhdGVKU1dlYkFzc2VtYmx5
UnVudGltZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwKICAgICBB
U1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKICAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3Jl
YXRlKGdsb2JhbE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlSdW50aW1lRXJy
b3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSwgSlNWYWx1ZSgpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIs
IFR5cGVOb3RoaW5nLCBFcnJvclR5cGU6OkVycm9yLCB0cnVlKTsKIH0KKworSlNPYmplY3QqIGNy
ZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVk0mIHZtLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUpCit7CisgICAgRXJyb3JJbnN0YW5j
ZSogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgZ2xvYmFs
T2JqZWN0LT53ZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBXYXNtOjplcnJvck1l
c3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5cGUpLCBKU1ZhbHVlKCksIGRlZmF1bHRTb3VyY2VBcHBl
bmRlciwgVHlwZU5vdGhpbmcsIEVycm9yVHlwZTo6RXJyb3IsIHRydWUpOworICAgIGVycm9yLT5z
ZXRDYXRjaGFibGVGcm9tV2FzbShmYWxzZSk7CisgICAgcmV0dXJuIGVycm9yOworfQogICAgIAog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaAppbmRleCBiZTQxMzA5MGQzMjcu
LmM4NmI2M2Y5MTJkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsMTIgQEAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJFcnJvckluc3RhbmNlLmgiCisjaW5jbHVk
ZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIEpTT2JqZWN0KiBj
cmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBjb25z
dCBTdHJpbmcmKTsKK0pTT2JqZWN0KiBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKEpT
R2xvYmFsT2JqZWN0KiwgVk0mLCBXYXNtOjpFeGNlcHRpb25UeXBlKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVRhZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45NTYy
NmQzZjFiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFnLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgIldhc21UYWcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBK
U1dlYkFzc2VtYmx5VGFnOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5UYWciLCAmQmFzZTo6c19p
bmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlU
YWcpIH07CisKK0pTV2ViQXNzZW1ibHlUYWcqIEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBXYXNtOjpUYWcmIHRhZykKK3sKKyAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsK
KyAgICBhdXRvKiBqc1RhZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1i
bHlUYWc+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5VGFnKHZtLCBzdHJ1Y3R1cmUsIHRhZyk7Cisg
ICAganNUYWctPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4ganNUYWc7Cit9CisKK1N0
cnVjdHVyZSogSlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitKU1dlYkFzc2VtYmx5
VGFnOjpKU1dlYkFzc2VtYmx5VGFnKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IFdhc206OlRhZyYgdGFnKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV90YWco
bWFrZVJlZih0YWcpKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LjdhMmJmNDNkYjc3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWcuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtVGFnLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKU1dlYkFzc2VtYmx5VGFnIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CisgICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1
cm4gdm0ud2ViQXNzZW1ibHlUYWdTcGFjZTxtb2RlPigpOworICAgIH0KKworICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNXZWJBc3NlbWJs
eVRhZyogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBjb25zdCBXYXNt
OjpUYWcmKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcoKSBjb25z
dCB7IHJldHVybiBtX3RhZzsgfQorICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJl
KCkgY29uc3QgeyByZXR1cm4gdGFnKCkuc2lnbmF0dXJlKCk7IH0KKworcHJpdmF0ZToKKyAgICBK
U1dlYkFzc2VtYmx5VGFnKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgV2FzbTo6VGFnJik7CisKKyAg
ICBjb25zdCBSZWY8Y29uc3QgV2FzbTo6VGFnPiBtX3RhZzsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNv
bnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjVm
NGE1ZjQ0ODZiNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMTE3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCIK
KworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKKyNpbmNsdWRlICJX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oIgorCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlF
eGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENs
YXNzSW5mbyBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJGdW5j
dGlvbiIsICZCYXNlOjpzX2luZm8sICZjb25zdHJ1Y3RvclRhYmxlV2ViQXNzZW1ibHlFeGNlcHRp
b24sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlFeGNlcHRpb25Db25z
dHJ1Y3RvcikgfTsKKworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihjYWxsSlNXZWJBc3NlbWJseUV4Y2VwdGlvbik7CisKKy8qIFNvdXJjZSBmb3IgV2ViQXNzZW1i
bHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaAorIEBiZWdpbiBjb25zdHJ1Y3RvclRhYmxlV2Vi
QXNzZW1ibHlFeGNlcHRpb24KKyBAZW5kCisgKi8KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlFeGNlcHRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgYXV0byYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIEpTVmFsdWUgdGFnVmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIEpTVmFs
dWUgdGFnUGFyYW1ldGVycyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSk7CisKKyAgICBhdXRvIHRh
ZyA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhZyo+KHZtLCB0YWdWYWx1ZSk7CisgICAg
aWYgKCF0YWcpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRpb24gY29uc3RydWN0b3IgZXhwZWN0cyB0aGUgZmly
c3QgYXJndW1lbnQgdG8gYmUgYSBXZWJBc3NlbWJseS5UYWciKTsKKworICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIHZhbHVlczsKKyAgICBmb3JFYWNoSW5JdGVyYWJsZShnbG9iYWxPYmplY3QsIHRh
Z1BhcmFtZXRlcnMsIFsmXSAoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbmV4dFZhbHVl
KSB7CisgICAgICAgIHZhbHVlcy5hcHBlbmQobmV4dFZhbHVlKTsKKyAgICB9KTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0g
dGFnLT5zaWduYXR1cmUoKS5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRpb24gY29u
c3RydWN0b3IgZXhwZWN0cyB0aGUgbnVtYmVyIG9mIHBhcmVtZXRlcnMgaW4gV2ViQXNzZW1ibHku
VGFnIHRvIG1hdGNoIHRoZSB0YWdzIHBhcmFtZXRlciBjb3VudC4iKTsKKworICAgIC8vIEFueSBH
QydkIHZhbHVlcyBpbiBoZXJlIHdpbGwgYmUgbWFya2VkIGJ5IHRoZSBNYXJrZWRBcnVnZW1lbnRC
dWZmZXIgdW50aWwgc3RvcmVkIGluIHRoZSBFeGNlcHRpb24uCisgICAgRml4ZWRWZWN0b3I8dWlu
dDY0X3Q+IHBheWxvYWQodmFsdWVzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBwYXlsb2FkW2ldID0gZnJvbUpTVmFs
dWUoZ2xvYmFsT2JqZWN0LCB0YWctPnNpZ25hdHVyZSgpLmFyZ3VtZW50KGkpLCB2YWx1ZXMuYXQo
aSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKwor
ICAgIEpTT2JqZWN0KiBuZXdUYXJnZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgp
KTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUo
dm0sIHdlYkFzc2VtYmx5RXhjZXB0aW9uU3RydWN0dXJlLCBuZXdUYXJnZXQsIGNhbGxGcmFtZS0+
anNDYWxsZWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlF
eGNlcHRpb246OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCB0YWctPnRhZygpLCBXVEZNb3ZlKHBheWxv
YWQpKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbEpTV2ViQXNzZW1ibHlF
eGNlcHRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKK3sK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25z
dHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIikpOworfQorCitXZWJBc3NlbWJseUV4Y2VwdGlv
bkNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUq
IHRoaXNQcm90b3R5cGUpCit7CisgICAgYXV0byogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yPih2bS5oZWFwKSkg
V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBjb25z
dHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUpOworICAgIHJldHVybiBj
b25zdHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhjZXB0aW9u
Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgMSwg
IkV4Y2VwdGlvbiJfcywgUHJvcGVydHlBZGRpdGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFu
c2l0aW9uKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVs
ZXRlKTsKK30KKworV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6V2ViQXNzZW1ibHlF
eGNlcHRpb25Db25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlLCBjYWxsSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiwgY29uc3RydWN0
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbikKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hN2JjOTIzNTQ1NTMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBXZWJBc3NlbWJseUV4Y2Vw
dGlvblByb3RvdHlwZTsKKworY2xhc3MgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3RvciBm
aW5hbCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIElu
dGVybmFsRnVuY3Rpb24gQmFzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxl
OworCisgICAgc3RhdGljIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IqIGNyZWF0ZShW
TSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlKik7CisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseUV4
Y2VwdGlvbkNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYsIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlKik7Cit9OworU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ciwgSW50ZXJuYWxGdW5jdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uM2MzNmM0Nzk4NWEzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRp
b25Qcm90b3R5cGUuY3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKKyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTih3ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvRnVuY0dldEFyZyk7CitzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTih3ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvRnVuY0lzKTsKK30K
KworI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmx1dC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90
eXBlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5FeGNlcHRpb24iLCAmQmFzZTo6c19pbmZvLCAm
cHJvdG90eXBlVGFibGVXZWJBc3NlbWJseUV4Y2VwdGlvbiwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSkgfTsKKworLyogU291cmNlIGZv
ciBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5sdXQuaAorIEBiZWdpbiBwcm90b3R5cGVU
YWJsZVdlYkFzc2VtYmx5RXhjZXB0aW9uCisgZ2V0QXJnICAgd2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b0Z1bmNHZXRBcmcgICBGdW5jdGlvbiAyCisgaXMgICB3ZWJBc3NlbWJseUV4Y2VwdGlvblBy
b3RvRnVuY0lzICAgRnVuY3Rpb24gMQorIEBlbmQKKyAqLworCitXZWJBc3NlbWJseUV4Y2VwdGlv
blByb3RvdHlwZSogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgYXV0byogb2Jq
ZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90
b3R5cGU+KHZtLmhlYXApKSBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSh2bSwgc3RydWN0
dXJlKTsKKyAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gb2JqZWN0
OworfQorCitTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJU
KGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKK30KKworV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5
cGU6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK0FMV0FZU19JTkxJTkUg
c3RhdGljIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIGdldEV4Y2VwdGlvbihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgaWYgKFVOTElLRUxZKCF0aGlzVmFsdWUuaXNDZWxsKCkpKSB7CisgICAgICAgIHRo
cm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyAgICBhdXRvKiB0YWcgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPih2
bSwgdGhpc1ZhbHVlLmFzQ2VsbCgpKTsKKyAgICBpZiAoTElLRUxZKHRhZykpCisgICAgICAgIHJl
dHVybiB0YWc7CisgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFz
c2VtYmx5LkV4Y2VwdGlvbiBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1FeGNlcHRpb24gb2JqZWN0
Il9zKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQUxXQVlTX0lOTElORSBzdGF0aWMgSlNX
ZWJBc3NlbWJseVRhZyogZ2V0VGFnKFZNJiB2bSwgSlNWYWx1ZSB0YWdWYWx1ZSkKK3sKKyAgICBp
ZiAoIXRhZ1ZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFnKj4odm0sIHRhZ1ZhbHVlLmFzQ2VsbCgp
KTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2VtYmx5RXhjZXB0aW9uUHJv
dG9GdW5jR2V0QXJnLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGNvbnN0IGF1dG8m
IGZvcm1hdE1lc3NhZ2UgPSBbJl0oY29uc3QgYXV0byYgbWVzc2FnZSkgeworICAgICAgICByZXR1
cm4gbWFrZVN0cmluZygiV2ViQXNzZW1ibHkuRXhjZXB0aW9uLmdldEFyZygpOiAiLCBtZXNzYWdl
KTsKKyAgICB9OworICAgIGNvbnN0IGF1dG8mIHR5cGVFcnJvciA9IFsmXShjb25zdCBhdXRvJiBt
ZXNzYWdlKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgZm9ybWF0TWVzc2FnZShtZXNzYWdlKSk7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1
ZSgpOworICAgIH07CisKKyAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBqc0V4Y2VwdGlvbiA9
IGdldEV4Y2VwdGlvbihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAg
ICBKU1dlYkFzc2VtYmx5VGFnKiB0YWcgPSBnZXRUYWcodm0sIGNhbGxGcmFtZS0+YXJndW1lbnQo
MCkpOworICAgIGlmICghdGFnKQorICAgICAgICByZXR1cm4gdHlwZUVycm9yKCJGaXJzdCBhcmd1
bWVudCBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuVGFnIik7CisKKyAgICBpZiAoanNFeGNlcHRpb24t
PnRhZygpICE9IHRhZy0+dGFnKCkpCisgICAgICAgIHJldHVybiB0eXBlRXJyb3IoIkZpcnN0IGFy
Z3VtZW50IGRvZXMgbm90IG1hdGNoIHRoZSBleGNlcHRpb24gdGFnIik7CisKKyAgICB1aW50MzJf
dCBpbmRleCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSkudG9VSW50MzIoZ2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoaW5kZXggPj0gdGFnLT50YWcoKS5wYXJhbWV0ZXJDb3VudCgpKSB7CisgICAgICAg
IHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGZvcm1hdE1lc3NhZ2Uo
IkluZGV4IG91dCBvZiByYW5nZSIpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7
CisgICAgfQorCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShqc0V4Y2VwdGlvbi0+Z2V0QXJnKGdsb2JhbE9iamVjdCwgaW5kZXgpKSk7Cit9CisKK0pT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTih3ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvRnVuY0lzLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQorewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIGpz
RXhjZXB0aW9uID0gZ2V0RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKworICAgIEpTV2ViQXNzZW1ibHlUYWcqIHRhZyA9IGdldFRhZyh2bSwgY2FsbEZyYW1l
LT5hcmd1bWVudCgwKSk7CisgICAgaWYgKCF0YWcpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uLmlzKCk6IEZp
cnN0IGFyZ3VtZW50IG11c3QgYmUgYSBXZWJBc3NlbWJseS5UYWciKTsKKyAgICAgICAgcmV0dXJu
IGVuY29kZWRKU1ZhbHVlKCk7CisgICAgfQorCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oanNFeGNlcHRpb24tPnRhZygpID09IHRh
Zy0+dGFnKCkpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kYzIxMDZkOGI5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlw
ZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlIGZp
bmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2Ug
PSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CisgICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUV4Y2VwdGlvblBy
b3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqIGNyZWF0ZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERF
Q0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlw
ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcAppbmRleCAzYWIzYzNkNWNiNWMuLjE5NzE4ZGNlNjk5NiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKQEAgLTc4
LDUxICs3OCw5IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgV2FzbTo6SW5zdGFuY2Uq
IHdhc21JbnN0YW5jZSA9ICZpbnN0YW5jZS0+aW5zdGFuY2UoKTsKIAogICAgIGZvciAodW5zaWdu
ZWQgYXJnSW5kZXggPSAwOyBhcmdJbmRleCA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsr
YXJnSW5kZXgpIHsKLSAgICAgICAgSlNWYWx1ZSBhcmcgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KGFy
Z0luZGV4KTsKLSAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoYXJnSW5kZXgpLmtp
bmQpIHsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STMyOgotICAgICAgICAgICAgYXJn
ID0gSlNWYWx1ZTo6ZGVjb2RlKGFyZy50b0ludDMyKGdsb2JhbE9iamVjdCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlR5cGVJZHg6Ci0gICAgICAg
IGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkZ1bmNyZWY6IHsKLSAgICAgICAgICAgIGJvb2wgaXNOdWxs
YWJsZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdJbmRleCkuaXNOdWxsYWJsZSgpOwotICAgICAg
ICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0gbnVsbHB0cjsKLSAgICAg
ICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uID0g
bnVsbHB0cjsKLSAgICAgICAgICAgIGlmICghaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwg
YXJnLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pICYmICghaXNOdWxsYWJsZSB8
fCAhYXJnLmlzTnVsbCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgIkZ1bmNyZWYgbXVzdCBiZSBhbiBleHBvcnRl
ZCB3YXNtIGZ1bmN0aW9uIikpKTsKLSAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQo
YXJnSW5kZXgpLmtpbmQgPT0gV2FzbTo6VHlwZUtpbmQ6OlR5cGVJZHggJiYgKHdhc21GdW5jdGlv
biB8fCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewotICAgICAgICAgICAgICAgIFdhc206OlNpZ25h
dHVyZUluZGV4IHBhcmFtSW5kZXggPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnSW5kZXgpLmluZGV4
OwotICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGFyZ0luZGV4OwotICAgICAg
ICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgIGFyZ0luZGV4
ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgYXJnSW5kZXggPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWdu
YXR1cmVJbmRleCgpOwotICAgICAgICAgICAgICAgIGlmIChwYXJhbUluZGV4ICE9IGFyZ0luZGV4
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Io
Z2xvYmFsT2JqZWN0LCB2bSwgIkFyZ3VtZW50IGZ1bmN0aW9uIGRpZCBub3QgbWF0Y2ggdGhlIHJl
ZmVyZW5jZSB0eXBlIikpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkV4dGVybnJlZjoKLSAgICAgICAg
ICAgIGlmICghc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ0luZGV4KS5pc051bGxhYmxlKCkgJiYgYXJn
LmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dF
eGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvcihnbG9iYWxPYmplY3QsIHZtLCAiTm9uLW51bGwgRXh0ZXJucmVmIGNhbm5vdCBiZSBudWxs
IikpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJ
NjQ6Ci0gICAgICAgICAgICBhcmcgPSBKU1ZhbHVlOjpkZWNvZGUoYml0d2lzZV9jYXN0PHVpbnQ2
NF90PihhcmcudG9CaWdJbnQ2NChnbG9iYWxPYmplY3QpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjMyOgotICAgICAgICAgICAgYXJnID0gSlNW
YWx1ZTo6ZGVjb2RlKGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oYXJnLnRvRmxvYXQoZ2xvYmFsT2Jq
ZWN0KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6
OkY2NDoKLSAgICAgICAgICAgIGFyZyA9IEpTVmFsdWU6OmRlY29kZShiaXR3aXNlX2Nhc3Q8dWlu
dDY0X3Q+KGFyZy50b051bWJlcihnbG9iYWxPYmplY3QpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6Vm9pZDoKLSAgICAgICAgY2FzZSBXYXNtOjpU
eXBlS2luZDo6RnVuYzoKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6UmVmTnVsbDoKLSAg
ICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6UmVmOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQorICAgICAgICB1aW50NjRfdCB2YWx1ZSA9IGZy
b21KU1ZhbHVlKGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ0luZGV4KSwgY2Fs
bEZyYW1lLT5hcmd1bWVudChhcmdJbmRleCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICAgICAgYm94ZWRBcmdzLmFwcGVuZChhcmcp
OworICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogICAg
IH0KIAogICAgIC8vIFdoZW4gd2UgZG9uJ3QgdXNlIGZhc3QgVExTIHRvIHN0b3JlIHRoZSBjb250
ZXh0LCB0aGUgSlMKQEAgLTE1MiwxMCArMTEwLDYgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwK
ICAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsKICAgICBBU1NFUlQoJndhc21G
dW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFuY2UoKSA9PSB2bS53YXNtQ29udGV4dC5sb2FkKCkp
OwogICAgIEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dhc20od2FzbUZ1bmN0
aW9uLT5qc0VudHJ5cG9pbnQoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksICZ2
bSwgJnByb3RvQ2FsbEZyYW1lKTsKLSAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlz
IGluIGEgcmVnaXN0ZXIgb3Igb24gdGhlIHN0YWNrIHNpbmNlIGl0J3Mgc3RvcmVkIGluIFZlY3Rv
cjxKU1ZhbHVlPi4KLSAgICAvLyBUaGlzIHByb2JhYmx5IGlzbid0IHN0cmljdGx5IG5lY2Vzc2Fy
eSwgc2luY2UgdGhlIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHNob3VsZCBrZWVwIHRoZSBpbnN0YW5j
ZQotICAgIC8vIGFsaXZlLiBCdXQgaXQncyBnb29kIGh5Z2llbmUuCi0gICAgaW5zdGFuY2UtPnVz
ZSgpOwogICAgIGlmIChwcmV2V2FzbUluc3RhbmNlICE9IHdhc21JbnN0YW5jZSkgewogICAgICAg
ICAvLyBUaGlzIGlzIGp1c3QgZm9yIHNvbWUgZXh0cmEgc2FmZXR5IGluc3RlYWQgb2YgbGVhdmlu
ZyBhIGNhY2hlZAogICAgICAgICAvLyB2YWx1ZSBpbiB0aGVyZS4gSWYgd2UgZXZlciBmb3JnZXQg
dG8gc2V0IHRoZSB2YWx1ZSB0byBiZSBhIHJlYWwKQEAgLTE2OCw2ICsxMjIsMTEgQEAgSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwKICAgICB2bS53YXNtQ29udGV4dC5zdG9yZShwcmV2V2FzbUluc3Rh
bmNlLCB2bS5zb2Z0U3RhY2tMaW1pdCgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogCisgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBpbiBhIHJlZ2lz
dGVyIG9yIG9uIHRoZSBzdGFjayBzaW5jZSBpdCdzIHN0b3JlZCBpbiBWZWN0b3I8SlNWYWx1ZT4u
CisgICAgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksIHNpbmNlIHRo
ZSBXZWJBc3NlbWJseUZ1bmN0aW9uKiBzaG91bGQga2VlcCB0aGUgaW5zdGFuY2UKKyAgICAvLyBh
bGl2ZS4gQnV0IGl0J3MgZ29vZCBoeWdpZW5lLgorICAgIGluc3RhbmNlLT51c2UoKTsKKwogICAg
IHJldHVybiByYXdSZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCBkYjQwOTJhZDY5
NDguLmY3YjA4N2JmNTg5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtMzcsNiArMzcsNyBAQAog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseVRhZy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1
bmN0aW9uLmgiCkBAIC0xMzAsNiArMTMxLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6bGlua0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGkKICAg
ICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOgogICAgICAgICBjYXNlIFdh
c206OkV4dGVybmFsS2luZDo6R2xvYmFsOgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2lu
ZDo6VGFibGU6CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9y
eToKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzYzLDcgKzM2NSw3IEBAIHZvaWQgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2lu
ZDo6VGFibGU6IHsKLSAgICAgICAgICAgIC8vIDcuIE90aGVyd2lzZSAoaSBpcyBhIHRhYmxlIGlt
cG9ydCk6CisgICAgICAgICAgICAvLyA3LiBJZiBpIGlzIGEgdGFibGUgaW1wb3J0OgogICAgICAg
ICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3Nl
bWJseVRhYmxlKj4odm0sIHZhbHVlKTsKICAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEg
V2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4K
ICAgICAgICAgICAgIGlmICghdGFibGUpCkBAIC0zOTQsNiArMzk2LDIyIEBAIHZvaWQgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNh
c2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsKKyAgICAgICAgICAgIEpTV2ViQXNz
ZW1ibHlUYWcqIHRhZyA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhZyo+KHZtLCB2YWx1
ZSk7CisgICAgICAgICAgICBpZiAoIXRhZykKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0
aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0
RmFpbE1lc3NhZ2UoaW1wb3J0LCAiVGFnIGltcG9ydCIsICJpcyBub3QgYW4gaW5zdGFuY2Ugb2Yg
V2ViQXNzZW1ibHkuVGFnIikpKTsKKworICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXgg
ZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEV4Y2VwdGlv
blNpZ25hdHVyZUluZGljZXNbaW1wb3J0LmtpbmRJbmRleF07CisgICAgICAgICAgICBVTlVTRURf
VkFSSUFCTEUoZXhwZWN0ZWRTaWduYXR1cmVJbmRleCk7CisKKyAgICAgICAgICAgIGlmIChleHBl
Y3RlZFNpZ25hdHVyZUluZGV4ICE9IHRhZy0+dGFnKCkuc2lnbmF0dXJlKCkuaW5kZXgoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJy
b3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiaW1wb3J0ZWQg
VGFnIiwgInNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBpbXBvcnRlZCBXZWJBc3NlbWJseSBU
YWcncyBzaWduYXR1cmUiKSkpOworCisgICAgICAgICAgICBtX2luc3RhbmNlLT5pbnN0YW5jZSgp
LmFkZFRhZyh0YWctPnRhZygpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNh
c2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpAQCAtNDIxLDYgKzQzOSw5IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6Omxp
bmtJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBpCiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBmb3IgKFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
IDogbW9kdWxlSW5mb3JtYXRpb24uaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzKQor
ICAgICAgICBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmFkZFRhZyhXYXNtOjpUYWc6OmNyZWF0ZShX
YXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KSkubGVha1JlZigp
KTsKKwogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQgPSBjb2RlQmxvY2stPmZ1bmN0
aW9uSW1wb3J0Q291bnQoKTsKICAgICBhdXRvIG1ha2VGdW5jdGlvbldyYXBwZXIgPSBbJl0gKHVp
bnQzMl90IGluZGV4KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgLy8gSWYgd2UgYWxyZWFkeSBtYWRl
IGEgd3JhcHBlciwgZG8gbm90IG1ha2UgYSBuZXcgb25lLgpAQCAtNTU3LDYgKzU3OCwxMCBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU09iamVjdCogaQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbjog
eworICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm1fd2ViQXNzZW1ibHlUYWdTdHJ1Y3R1cmUu
Z2V0KGdsb2JhbE9iamVjdCksIG1faW5zdGFuY2UtPmluc3RhbmNlKCkudGFnKGV4cC5raW5kSW5k
ZXgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAg
ICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0
cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODY1ZjhjN2I2ZTEzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25z
dHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlUYWdDb25zdHJ1Y3Rvci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5j
bHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKKyNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKKyNpbmNs
dWRlICJXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29u
c3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0
aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKSB9OworCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihjYWxsSlNXZWJBc3NlbWJseVRhZyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFnKTsKKworSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWcsIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICAKKyAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHku
VGFnIGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlIHRhZyB0eXBlIGFzIHRoZSBmaXJzdCBhcmd1bWVu
dC4iX3MpOworCisgICAgSlNWYWx1ZSB0YWdUeXBlVmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApOworICAgIEpTVmFsdWUgc2lnbmF0dXJlT2JqZWN0ID0gdGFnVHlwZVZhbHVlLmdldChnbG9i
YWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJhbWV0ZXJzIl9zKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlmICghc2lnbmF0dXJl
T2JqZWN0LmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWcgY29uc3RydWN0b3IgZXhwZWN0cyBhIHRh
ZyB0eXBlIHdpdGggdGhlICdwYXJhbWV0ZXJzJyBwcm9wZXJ0eS4iX3MpOworCisgICAgVmVjdG9y
PFdhc206OlR5cGU+IHBhcmFtZXRlcnM7CisgICAgZm9yRWFjaEluSXRlcmFibGUoZ2xvYmFsT2Jq
ZWN0LCBzaWduYXR1cmVPYmplY3QsIFsmXSAoYXV0byYgdm0sIGF1dG8qIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBuZXh0VHlwZSkgLT4gdm9pZCB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBXYXNtOjpUeXBlIHR5cGU7CisgICAgICAgIFN0
cmluZyB2YWx1ZVN0cmluZyA9IG5leHRUeXBlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIGlmICh2YWx1
ZVN0cmluZyA9PSAiaTMyIl9zKQorICAgICAgICAgICAgdHlwZSA9IFdhc206OlR5cGVzOjpJMzI7
CisgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09ICJpNjQiX3MpCisgICAgICAgICAgICB0
eXBlID0gV2FzbTo6VHlwZXM6Okk2NDsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVTdHJpbmcgPT0g
ImYzMiJfcykKKyAgICAgICAgICAgIHR5cGUgPSBXYXNtOjpUeXBlczo6RjMyOworICAgICAgICBl
bHNlIGlmICh2YWx1ZVN0cmluZyA9PSAiZjY0Il9zKQorICAgICAgICAgICAgdHlwZSA9IFdhc206
OlR5cGVzOjpGNjQ7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09ICJhbnlmdW5jIl9z
KQorICAgICAgICAgICAgdHlwZSA9IFdhc206OlR5cGVzOjpGdW5jcmVmOworICAgICAgICBlbHNl
IGlmICh2YWx1ZVN0cmluZyA9PSAiZXh0ZXJucmVmIl9zKQorICAgICAgICAgICAgdHlwZSA9IFdh
c206OlR5cGVzOjpFeHRlcm5yZWY7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LlRhZyBjb25zdHJ1Y3Rv
ciBleHBlY3RzIHRoZSAncGFyYW1ldGVycycgZmllbGQgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IHRv
IGJlIGEgc2VxdWVuY2Ugb2YgV2ViQXNzZW1ibHkgdmFsdWUgdHlwZXMuIl9zKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHR5cGUp
OworICAgIH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBS
ZWZQdHI8V2FzbTo6U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1h
dGlvbjo6c2lnbmF0dXJlRm9yKHsgfSwgcGFyYW1ldGVycyk7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBKU0NfR0VUX0RFUklWRURfU1RSVUNUVVJFKHZtLCB3ZWJBc3NlbWJseVRhZ1N0cnVj
dHVyZSwgYXNPYmplY3QoY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSksIGNhbGxGcmFtZS0+anNDYWxs
ZWUoKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNX
ZWJBc3NlbWJseVRhZzo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgV2FzbTo6
VGFnOjpjcmVhdGUoKnNpZ25hdHVyZSkuZ2V0KCkpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihjYWxsSlNXZWJBc3NlbWJseVRhZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSopKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWciKSk7Cit9CisKK0pTV2Vi
QXNzZW1ibHlUYWcqIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OmNyZWF0ZVRhZyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgV2FzbTo6
VGFnJiB0YWcpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBuZXdUYXJn
ZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUodm0sIHdlYkFzc2VtYmx5VGFnU3Ry
dWN0dXJlLCBuZXdUYXJnZXQsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUs
IHRhZykpOworfQorCitXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKiBXZWJBc3NlbWJseVRhZ0Nv
bnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1i
bHlUYWdQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCit7CisgICAgYXV0byogY29uc3RydWN0b3Ig
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yPih2
bS5oZWFwKSkgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBj
b25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUpOworICAgIHJldHVy
biBjb25zdHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0
b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqIHByb3Rv
dHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgMSwgIlRhZyJfcywgUHJvcGVy
dHlBZGRpdGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFuc2l0aW9uKTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90
b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpE
b250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKK30KKworV2ViQXNzZW1i
bHlUYWdDb25zdHJ1Y3Rvcjo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjYWxsSlNXZWJBc3Nl
bWJseVRhZywgY29uc3RydWN0SlNXZWJBc3NlbWJseVRhZykKK3sKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3Iu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjkxZTJmMWQ4MDZlOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiV2Fz
bU9wcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseVRhZzsKK2Ns
YXNzIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlOworCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBU
YWc7Cit9CisKK2NsYXNzIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IgZmluYWwgOiBwdWJsaWMg
SW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9u
IEJhc2U7CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvciogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqKTsKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwor
CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWcqIGNyZWF0ZVRhZyhKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSosIGNvbnN0IFdhc206OlRhZyYpOworCisgICAgREVDTEFSRV9JTkZPOworCitw
cml2YXRlOgorICAgIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqKTsK
K307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseVRhZ0Nv
bnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40OTNkNDE3YzE4YWMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZS5jcHAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlU
YWdQcm90b3R5cGUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIk9i
amVjdENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2VtYmx5VGFnUHJv
dG9GdW5jVHlwZSk7Cit9CisKKyNpbmNsdWRlICJXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5sdXQu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFnIiwgJkJhc2U6OnNfaW5mbywgJnBy
b3RvdHlwZVRhYmxlV2ViQXNzZW1ibHlUYWcsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUpIH07CisKKy8qIFNvdXJjZSBmb3IgV2ViQXNzZW1ibHlU
YWdQcm90b3R5cGUubHV0LmgKKyBAYmVnaW4gcHJvdG90eXBlVGFibGVXZWJBc3NlbWJseVRhZwor
IHR5cGUgICB3ZWJBc3NlbWJseVRhZ1Byb3RvRnVuY1R5cGUgICBGdW5jdGlvbiAwCisgQGVuZAor
ICovCisKKworV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBl
OjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
eworICAgIGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2Vt
Ymx5VGFnUHJvdG90eXBlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUodm0sIHN0
cnVjdHVyZSk7CisgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIG9i
amVjdDsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworfQorCit2b2lkIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0
cyh2bSwgaW5mbygpKSk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9O
KCk7Cit9CisKK1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlOjpXZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJl
KQoreworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1dlYkFzc2VtYmx5VGFnKiBnZXRUYWco
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2VsbCgpKSkg
eworICAgICAgICB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlTm90QW5P
YmplY3RFcnJvcihnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSkpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgYXV0byogdGFnID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5
VGFnKj4odm0sIHRoaXNWYWx1ZS5hc0NlbGwoKSk7CisgICAgaWYgKExJS0VMWSh0YWcpKQorICAg
ICAgICByZXR1cm4gdGFnOworICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJXZWJBc3NlbWJseS5UYWcgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tVGFnIG9iamVjdCJfcyk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih3ZWJB
c3NlbWJseVRhZ1Byb3RvRnVuY1R5cGUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
SlNXZWJBc3NlbWJseVRhZyoganNUYWcgPSBnZXRUYWcoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworCisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcgPSBqc1RhZy0+dGFnKCk7
CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGFnLnBhcmFtZXRlckNvdW50KCk7ICsraSkKKyAgICAgICAgYXJnTGlzdC5hcHBl
bmQoV2FzbTo6dHlwZVRvU3RyaW5nKHZtLCB0YWcucGFyYW1ldGVyKGkpLmtpbmQpKTsKKworICAg
IGlmIChVTkxJS0VMWShhcmdMaXN0Lmhhc092ZXJmbG93ZWQoKSkpIHsKKyAgICAgICAgdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVy
biBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAgIEpTQXJyYXkqIHBhcmFtZXRlcnMgPSBj
b25zdHJ1Y3RBcnJheShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEFycmF5QWxsb2NhdGlvblBy
b2ZpbGUqPihudWxscHRyKSwgYXJnTGlzdCk7CisgICAgSlNPYmplY3QqIHR5cGUgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBl
KCksIDEpOworICAgIHR5cGUtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInBhcmFtZXRlcnMiKSwgcGFyYW1ldGVycyk7CisKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodHlwZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjI0MzJmOWM4OWJkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90
b3R5cGUuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisK
KyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgV2ViQXNz
ZW1ibHlUYWdQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJs
aWM6CisgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFz
U3RhdGljUHJvcGVydHlUYWJsZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdl
YkFzc2VtYmx5VGFnUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlOworICAgIH0KKworICAgIHN0YXRpYyBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSog
Y3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwor
CisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFdlYkFzc2VtYmx5VGFnUHJvdG90
eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24KaW5kZXggNGY4ZGQ5ZTNkMjEzLi5hNDM1MTBm
NGY4NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20uanNvbgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24KQEAgLTIzLDM0ICsyMywz
OCBAQAogICAgICJibG9ja190eXBlIjogWyJpMzIiLCAiaTY0IiwgImYzMiIsICJmNjQiLCAidm9p
ZCIsICJleHRlcm5yZWYiLCAiZnVuY3JlZiJdLAogICAgICJyZWZfdHlwZSI6IFsiZnVuY3JlZiIs
ICJleHRlcm5yZWYiLCAidHlwZV9pZHgiXSwKICAgICAiZXh0ZXJuYWxfa2luZCI6IHsKLSAgICAg
ICAgIkZ1bmN0aW9uIjogeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDAgfSwKLSAgICAgICAg
IlRhYmxlIjogICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDEgfSwKLSAgICAgICAgIk1l
bW9yeSI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDIgfSwKLSAgICAgICAgIkdsb2Jh
bCI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDMgfQorICAgICAgICAiRnVuY3Rpb24i
OiAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMCB9LAorICAgICAgICAiVGFibGUiOiAg
ICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMSB9LAorICAgICAgICAiTWVtb3J5Ijog
ICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMiB9LAorICAgICAgICAiR2xvYmFsIjog
ICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMyB9LAorICAgICAgICAiRXhjZXB0aW9u
IjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogNCB9CiAgICAgfSwKICAgICAic2VjdGlv
biIgOiB7Ci0gICAgICAgICJUeXBlIjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAgMSwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIHNpZ25hdHVyZSBkZWNsYXJhdGlvbnMiIH0s
Ci0gICAgICAgICJJbXBvcnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMiwg
ImRlc2NyaXB0aW9uIjogIkltcG9ydCBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJGdW5jdGlv
biI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMywgImRlc2NyaXB0aW9uIjogIkZ1
bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAgIlRhYmxlIjogICAgeyAidHlwZSI6ICJ2
YXJ1aW50NyIsICJ2YWx1ZSI6ICA0LCAiZGVzY3JpcHRpb24iOiAiSW5kaXJlY3QgZnVuY3Rpb24g
dGFibGUgYW5kIG90aGVyIHRhYmxlcyIgfSwKLSAgICAgICAgIk1lbW9yeSI6ICAgeyAidHlwZSI6
ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA1LCAiZGVzY3JpcHRpb24iOiAiTWVtb3J5IGF0dHJpYnV0
ZXMiIH0sCi0gICAgICAgICJHbG9iYWwiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAgNiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJF
eHBvcnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNywgImRlc2NyaXB0aW9u
IjogIkV4cG9ydHMiIH0sCi0gICAgICAgICJTdGFydCI6ICAgIHsgInR5cGUiOiAidmFydWludDci
LCAidmFsdWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IGZ1bmN0aW9uIGRlY2xhcmF0aW9u
IiB9LAotICAgICAgICAiRWxlbWVudCI6ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjog
IDksICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9uIiB9LAotICAgICAgICAiQ29kZSI6
ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTAsICJkZXNjcmlwdGlvbiI6ICJG
dW5jdGlvbiBib2RpZXMgKGNvZGUpIiB9LAotICAgICAgICAiRGF0YSI6ICAgICB7ICJ0eXBlIjog
InZhcnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlwdGlvbiI6ICJEYXRhIHNlZ21lbnRzIiB9
CisgICAgICAgICJUeXBlIjogICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDEs
ICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBzaWduYXR1cmUgZGVjbGFyYXRpb25zIiB9LAorICAg
ICAgICAiSW1wb3J0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAyLCAiZGVz
Y3JpcHRpb24iOiAiSW1wb3J0IGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIkZ1bmN0aW9uIjog
IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMywgImRlc2NyaXB0aW9uIjogIkZ1bmN0
aW9uIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIlRhYmxlIjogICAgIHsgInR5cGUiOiAidmFy
dWludDciLCAidmFsdWUiOiAgNCwgImRlc2NyaXB0aW9uIjogIkluZGlyZWN0IGZ1bmN0aW9uIHRh
YmxlIGFuZCBvdGhlciB0YWJsZXMiIH0sCisgICAgICAgICJNZW1vcnkiOiAgICB7ICJ0eXBlIjog
InZhcnVpbnQ3IiwgInZhbHVlIjogIDUsICJkZXNjcmlwdGlvbiI6ICJNZW1vcnkgYXR0cmlidXRl
cyIgfSwKKyAgICAgICAgIkdsb2JhbCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAgNiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJF
eHBvcnQiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDcsICJkZXNjcmlwdGlv
biI6ICJFeHBvcnRzIiB9LAorICAgICAgICAiU3RhcnQiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50
NyIsICJ2YWx1ZSI6ICA4LCAiZGVzY3JpcHRpb24iOiAiU3RhcnQgZnVuY3Rpb24gZGVjbGFyYXRp
b24iIH0sCisgICAgICAgICJFbGVtZW50IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogIDksICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9uIiB9LAorICAgICAgICAiQ29k
ZSI6ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEwLCAiZGVzY3JpcHRpb24i
OiAiRnVuY3Rpb24gYm9kaWVzIChjb2RlKSIgfSwKKyAgICAgICAgIkRhdGEiOiAgICAgIHsgInR5
cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMSwgImRlc2NyaXB0aW9uIjogIkRhdGEgc2VnbWVu
dHMiIH0sCisgICAgICAgICJEYXRhQ291bnQiOiB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogMTIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgZGF0YSBzZWdtZW50cyIgfSwKKyAgICAg
ICAgIkV4Y2VwdGlvbiI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMywgImRlc2Ny
aXB0aW9uIjogIkV4Y2VwdGlvbiBkZWNsYXJhdGlvbnMiIH0KICAgICB9LAogICAgICJvcGNvZGUi
OiB7CiAgICAgICAgICJ1bnJlYWNoYWJsZSI6ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJv
bCIsICAgICJ2YWx1ZSI6ICAgMCwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1t
ZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAidHJhcCBpbW1lZGlhdGVseSIgfSwKKyAgICAgICAgIm5vcCI6ICAgICAgICAgICAgICAg
ICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAxLCAicmV0dXJuIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJubyBvcGVyYXRpb24iIH0sCiAgICAgICAgICJi
bG9jayI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6
ICAgMiwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1l
dGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFt
ZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gYSBz
ZXF1ZW5jZSBvZiBleHByZXNzaW9ucywgeWllbGRpbmcgMCBvciAxIHZhbHVlcyIgfSwKICAgICAg
ICAgImxvb3AiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZh
bHVlIjogICAzLCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJw
YXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBb
eyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdp
biBhIGJsb2NrIHdoaWNoIGNhbiBhbHNvIGZvcm0gY29udHJvbCBmbG93IGxvb3BzIiB9LAogICAg
ICAgICAiaWYiOiAgICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAi
dmFsdWUiOiAgIDQsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAg
InBhcmFtZXRlciI6IFsiYm9vbCJdLCAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6
IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJl
Z2luIGlmIGV4cHJlc3Npb24iIH0sCiAgICAgICAgICJlbHNlIjogICAgICAgICAgICAgICAgeyAi
Y2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNSwgInJldHVybiI6IFsiY29udHJv
bCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gZWxzZSBleHByZXNzaW9uIG9mIGlmIiB9LAot
ICAgICAgICAic2VsZWN0IjogICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAg
ICAidmFsdWUiOiAgMjcsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAgImltbWVkaWF0
ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
InNlbGVjdCBvbmUgb2YgdHdvIHZhbHVlcyBiYXNlZCBvbiBjb25kaXRpb24iIH0sCi0gICAgICAg
ICJhbm5vdGF0ZWRfc2VsZWN0IjogICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1
ZSI6ICAyOCwgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAgICAgICAgICAgICAgICAicGFy
YW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW3si
bmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291bnQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVy
IG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldCB0eXBlcyB2ZWN0b3IifSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjog
InRhcmdldF90eXBlcyIsICAgICAgICJ0eXBlIjogInZhbHVlX3R5cGUqIiwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0YXJnZXQgdHlwZXMg
dGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Ygc2VsZWN0IGluc3RydWN0aW9uIn1dLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBzYW1l
IGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRoIHRoZSBhbm5vdGF0aW9uIGZvciByZXN1bHQgdHlwZXMi
IH0sCisgICAgICAgICJ0cnkiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJv
bCIsICAgICJ2YWx1ZSI6ICAgNiwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAg
ICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1t
ZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiYmVnaW4gdHJ5IGV4cHJlc3Npb24iIH0sCisgICAgICAgICJjYXRjaCI6ICAgICAgICAg
ICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNywgInJldHVybiI6
IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4iLCAidHlw
ZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gY2F0Y2ggZXhwcmVzc2lvbiBv
ZiB0cnkiIH0sCisgICAgICAgICJ0aHJvdyI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
Y29udHJvbCIsICAgICJ2YWx1ZSI6ICAgOCwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAg
ICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4iLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAidGhyb3cgZXhjZXB0aW9uIiB9LAorICAgICAgICAicmV0aHJvdyI6ICAgICAg
ICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDksICJyZXR1cm4i
OiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVf
ZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInJldGhyb3cgdGhlIGV4Y2VwdGlvbiBh
dCB0aGUgdG9wIG9mIHRoZSBzdGFjayIgfSwKICAgICAgICAgImJyIjogICAgICAgICAgICAgICAg
ICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDEyLCAicmV0dXJuIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2RlcHRo
IiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJicmVhayB0aGF0IHRhcmdldHMgYW4gb3V0ZXIg
bmVzdGVkIGJsb2NrIiB9LAogICAgICAgICAiYnJfaWYiOiAgICAgICAgICAgICAgIHsgImNhdGVn
b3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTMsICJyZXR1cm4iOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6
ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogImNvbmRpdGlvbmFsIGJyZWFrIHRoYXQgdGFyZ2V0cyBhbiBvdXRl
ciBuZXN0ZWQgYmxvY2siIH0sCiAgICAgICAgICJicl90YWJsZSI6ICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxNCwgInJldHVybiI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfY291bnQiLCAgICJ0eXBl
IjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldF90YWJs
ZSJ9LApAQCAtNTgsOCArNjIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogImRlZmF1bHRfdGFyZ2V0Iiwg
InR5cGUiOiAidmFydWludDMyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhbiBvdXRlciBibG9jayBvciBsb29wIHRvIHdoaWNo
IHRvIGJyZWFrIGluIHRoZSBkZWZhdWx0IGNhc2UifV0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYnJhbmNoIHRhYmxlIGNvbnRyb2wg
ZmxvdyBjb25zdHJ1Y3QiIH0sCiAgICAgICAgICJyZXR1cm4iOiAgICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxNSwgInJldHVybiI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAicmV0dXJuIHplcm8gb3Igb25lIHZhbHVlIGZyb20gdGhpcyBm
dW5jdGlvbiIgfSwKKyAgICAgICAgImRlbGVnYXRlIjogICAgICAgICAgICB7ICJjYXRlZ29yeSI6
ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI0LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAg
ICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2RlcHRoIiwgInR5cGUiOiAidmFy
dWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJkZWxlZ2F0ZSB0byBhIHBhcmVudCB0cnkgYmxvY2siIH0sCisgICAgICAg
ICJjYXRjaF9hbGwiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1
ZSI6ICAyNSwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFy
YW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiY2F0Y2gg
ZXhjZXB0aW9ucyByZWdhcmRsZXNzIG9mIHRhZyIgfSwKICAgICAgICAgImRyb3AiOiAgICAgICAg
ICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI2LCAicmV0dXJu
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSJd
LCAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJpZ25vcmUgdmFsdWUiIH0sCi0gICAg
ICAgICJub3AiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2
YWx1ZSI6ICAgMSwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
cGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibm8g
b3BlcmF0aW9uIiB9LAorICAgICAgICAic2VsZWN0IjogICAgICAgICAgICAgIHsgImNhdGVnb3J5
IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAg
ICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVlcyBiYXNlZCBvbiBjb25kaXRp
b24iIH0sCisgICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAgeyAiY2F0ZWdvcnkiOiAiY29u
dHJvbCIsICAgICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAgICAi
aW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291bnQiLCAidHlwZSI6ICJ2YXJ1
aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldCB0eXBlcyB2ZWN0b3IifSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyJuYW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0eXBlIjogInZhbHVlX3R5cGUq
IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJ0YXJnZXQgdHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Ygc2VsZWN0IGluc3RydWN0aW9u
In1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogInRoZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRoIHRoZSBhbm5vdGF0aW9uIGZv
ciByZXN1bHQgdHlwZXMiIH0sCiAgICAgICAgICJlbmQiOiAgICAgICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMSwgInJldHVybiI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiZW5kIGEgYmxvY2ssIGxvb3AsIG9yIGlmIiB9LAogICAgICAg
ICAiaTMyLmNvbnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAidmFs
dWUiOiAgNjUsICJyZXR1cm4iOiBbImkzMiJdLCAgICAgICAgICAgICAgICAgICAgICAgICAgInBh
cmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7
Im5hbWUiOiAidmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJpbnQzMiJ9XSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImEgY29u
c3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTMyIiB9LAogICAgICAgICAiaTY0LmNvbnN0Ijog
ICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAidmFsdWUiOiAgNjYsICJyZXR1
cm4iOiBbImk2NCJdLCAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidmFsdWUi
LCAgICAgICAgICAidHlwZSI6ICJ2YXJpbnQ2NCJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImEgY29uc3RhbnQgdmFsdWUgaW50
ZXJwcmV0ZWQgYXMgaTY0IiB9LApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggMjhl
MGU4YWExYjEzLi43Zjg1N2IwZTQ2N2YgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpA
QCAtMTIyNywxNiArMTIyNywyMSBAQCBkZWYgcnVuV2ViQXNzZW1ibHlTdWl0ZSgqb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKQogICAgIG1vZHVsZXMgPSBEaXJbV0FTTVRFU1RTX1BBVEggKyAi
Ki5qcyJdLm1hcCB7IHxmfCBGaWxlLmJhc2VuYW1lKGYpIH0KICAgICBwcmVwYXJlRXh0cmFBYnNv
bHV0ZUZpbGVzKFdBU01URVNUU19QQVRILCBbIndhc20uanNvbiJdKQogICAgIHByZXBhcmVFeHRy
YVJlbGF0aXZlRmlsZXMobW9kdWxlcy5tYXAgeyB8ZnwgIi4uLyIgKyBmIH0sICRjb2xsZWN0aW9u
KQotICAgIHJ1bigiZGVmYXVsdC13YXNtIiwgIi1tIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgaWYgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
WzBdID09IDpub19tb2R1bGUKKyAgICAgIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucy5zaGlm
dAorICAgIGVsc2UKKyAgICAgIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucy51bnNoaWZ0ICIt
bSIKKyAgICBlbmQKKyAgICBydW4oImRlZmF1bHQtd2FzbSIsICooRlRMX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgIGlmICRtb2RlICE9ICJxdWljayIKLSAgICAg
ICAgcnVuKCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRM
U0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyIiwg
Ii1tIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLW0iLCAiLS1m
b3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXpp
bmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgIi0tdmVyaWZ5R0M9dHJ1ZSIsICoo
RlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4o
Indhc20tbm8tdGxzLWNvbnRleHQiLCAiLW0iLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9
ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAg
ICAgICAgcnVuKCJ3YXNtLXNsb3ctbWVtb3J5IiwgIi1tIiwgIi0tdXNlV2ViQXNzZW1ibHlGYXN0
TWVtb3J5PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykpCi0gICAgICAgIHJ1bigid2FzbS1iMyIsICItbSIsICItLXVzZVdhc21MTEludD1mYWxzZSIs
ICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigid2FzbS1haXIiLCAiLW0iLCAiLS11c2VXYXNt
TExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9u
PXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAg
ICAgICAgcnVuKCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5IiwgIi1tIiwgIi0tY29sbGVjdENv
bnRpbnVvdXNseT10cnVlIiwgIi0tdmVyaWZ5R0M9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKSBpZiBzaG91bGRDb2xsZWN0Q29udGludW91c2x5Pwor
ICAgICAgICBydW4oIndhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExT
Rm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tZWFnZXIiLCAq
KEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykpCisgICAgICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItLWZvcmNlQ29kZUJsb2Nr
VG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJ
c2xhbmRBbGxvY2F0aW9uPXRydWUiLCAiLS12ZXJpZnlHQz10cnVlIiwgKihGVExfT1BUSU9OUyAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1uby10bHMt
Y29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICooRlRMX09QVElP
TlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tc2xv
dy1tZW1vcnkiLCAiLS11c2VXZWJBc3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqKEZUTF9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWIz
IiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0td2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqKEZU
TF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3
YXNtLWFpciIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0
YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHki
LCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAiLS12ZXJpZnlHQz10cnVlIiwgKihGVExf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpIGlmIHNob3VsZENvbGxlY3RD
b250aW51b3VzbHk/CiAgICAgZW5kCiBlbmQKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440322</attachid>
            <date>2021-10-05 19:22:18 -0700</date>
            <delta_ts>2021-10-05 23:49:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229681-20211005192216.patch</filename>
            <type>text/plain</type>
            <size>703195</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
NGU1OWUzOWY3NjlmYjQ1YzFmMTkyMzNjN2M3NjZhNjAwMzViZDg4Li5jNmVlY2Y5ZmJmN2ZkNzhl
NTEzOTA5MDlkMmEwYWFjNDVkODNhNTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NTAgQEAKKzIwMjEtMDktMTYgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+IGFuZCBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCB0aGUgV2ViQXNzZW1ibHkgZXhjZXB0aW9uIGhhbmRsaW5nIHByb3Bvc2FsCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk2ODEKKyAg
ICAgICAgPHJkYXI6Ly84MTYwMzM4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlv
biBoYW5kbGluZyBwcm9wb3NhbCwgYXMgcGVyCisgICAgICAgIHRoZSBXSVAgc3BlYzogaHR0cHM6
Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2V4Y2VwdGlvbi1oYW5kbGluZworCisgICAgICAgIFRo
ZSBwcm9wb3NhbCBpbmNsdWRlcyA2IG5ldyBpbnN0cnVjdGlvbnM6IHRyeSwgY2F0Y2gsIGNhdGNo
X2FsbCwKKyAgICAgICAgZGVsZWdhdGUsIHRocm93IGFuZCByZXRocm93LiBBbGwgdGhlIGluc3Ry
dWN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5CisgICAgICAgIHRoZSBMTEludCBhbmQgQjMgZ2VuZXJh
dG9ycywgYnV0IG5vdCB5ZXQgc3VwcG9ydGVkIGluIEFpci4gQW55CisgICAgICAgIGZ1bmN0aW9u
cyB1c2UgZXhjZXB0aW9ucyB3aWxsIHVzZSBCMyBpbiBCQlEuCisKKyAgICAgICAgQSBmZXcgaW1w
b3J0YW50IG5vdGVzIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgLSBJbiBCMywg
c2luY2Ugd2UgY2FuIG5vdyBoYXZlIG11bHRpcGxlIGVudHJ5cG9pbnRzIChvbmUgZm9yIHRoZQor
ICAgICAgICBmdW5jdGlvbiBlbnRyeSArIDEgZm9yIGVhY2ggY2F0Y2gvY2F0Y2hfYWxsKSwgd2Ug
Y2FuIG5vIGxvbmdlciBqdXN0CisgICAgICAgIHJlcGxhY2UgZXZlcnkgdmFsdWUgaW4gdGhlIHN0
YWNrIHdpdGggYSBQaGkgd2hlbiB3ZSBmaW5kIGEgbmV3CisgICAgICAgIGVudHJ5cG9pbnQuIFRo
aXMgd29ya2VkIHNvIGZhciBiZWNhdXNlIG9mIHRoZSBhc3N1bXB0aW9uIHRoYXQgYW55CisgICAg
ICAgIGJsb2NrIGNvdWxkbid0IGFjY2VzcyBpdHMgZW5jbG9zaW5nIHN0YWNrLCBhbmQgc2luY2Ug
dGhlIGVuY2xvc2luZyBzdGFjaworICAgICAgICB3b3VsZCBvbmx5IGJlIGFjY2Vzc2libGUgd2hl
biB3ZSBleGl0ZWQgdGhlIGN1cnJlbnQgYmxvY2ssIHdlIGFkZGVkIFBoaXMKKyAgICAgICAgYXQg
dGhlIGVuZCBvZiBlYWNoIGJsb2NrIHdoZW4gd2UgaGFkIGEgbmV3IGVudHJ5cG9pbnQuIE5vdywg
c2luY2Ugd2UgaGF2ZSB0byBjYXB0dXJlIGFsbAorICAgICAgICBsaXZlIHZhbHVlcyBhdCBhbnkg
cG9pbnQgdGhhdCBtaWdodCB0aHJvdyAoY2FsbHMsIHRocm93IGFuZCByZXRocm93KSwKKyAgICAg
ICAgd2UgYnJlYWsgdGhhdCBhc3N1bXB0aW9uLiBUbyBzaW1wbGlmeSBhbGwgdGhlIHBvc3NpYmxl
IHdheXMgd2UgbWlnaHQKKyAgICAgICAgaGF2ZSB0byBtZXJnZSB0aGUgc3RhdGUgZnJvbSBtdWx0
aXBsZSBlbnRyeXBvaW50cyB3ZSBub3cgdXNlIEIzCisgICAgICAgIFZhcmlhYmxlcyB0byByZXBy
ZXNlbnQgc3RhY2sgc2xvdHMuCisgICAgICAgIC0gU29tZSBleHRyYSBpbmZvcm1hdGlvbiBpcyBy
ZXF1aXJlZCB0byBiZSBhYmxlIHRvIHByb3Blcmx5IHJlc3RvcmUKKyAgICAgICAgdGhlIHN0YXRl
IHdoZW4gY2F0Y2hpbmcgYW4gZXhjZXB0aW9uOgorICAgICAgICAgICAgLSBXZSBhZGRlZCBhIGZp
ZWxkIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2guIFRoaXMgZmllbGQgaXMgbmVjZXNzYXJ5CisgICAg
ICAgICAgICBiZWNhdXNlIHdoZW5ldmVyIHdlIHRocm93LCB3ZSBtaWdodCBlbmQgdXAgaW4gSmF2
YVNjcmlwdCwgd2hpY2gKKyAgICAgICAgICAgIGFzc3VtZXMgdGhlIGNhbGxlZSBpcyBhIGNlbGwg
YW5kIHVzZXMgaXQgdG8gZ2V0IHRoZSBWTSBhbmQgcmVzdG9yZQorICAgICAgICAgICAgY2FsbGVl
IHNhdmVzLiBUaGUgaXNzdWUgaXMgd2hlbiBjYXRjaGluZyBleGNlcHRpb25zIGluIHdhc20gd2UK
KyAgICAgICAgICAgIHN0aWxsIG5lZWQgdGhlIG9yaWdpbmFsIGNhbGxlZSwgYW5kIGlmIHRocm93
aW5nIGFuZCBjYXRjaGluZyBmcm9tCisgICAgICAgICAgICB0aGUgc2FtZSBmcmFtZSwgdGhhdCBj
YWxsIGZyYW1lIHNsb3QgaGFzIG5vdyBiZWVuIG92ZXJ3cml0dGVuLCBzbworICAgICAgICAgICAg
d2Ugc3RvcmUgaXRzIG9yaWdpbmFsIHZhbHVlIGluIHRoZSBWTSBmaWVsZC4KKyAgICAgICAgICAg
IC0gV2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZSBjdXJyZW50IFdhc20gSW5zdGFuY2UgaW50byB0
aGUgY2FsbAorICAgICAgICAgICAgZnJhbWUncyBzbG90IGZvciB0aGUgYHRoaXNgIGFyZ3VtZW50
LiBUaGUgaW5zdGFuY2UgaXMgdXNlZCBib3RoIGJ5CisgICAgICAgICAgICB0aGUgdW53aW5kZXIs
IHRvIGNoZWNrIGlmIHRoZSBleGNlcHRpb24gYmVpbmcgdGhyb3duIG1hdGNoZXMgdGhlCisgICAg
ICAgICAgICBleGNlcHRpb25zIGhhbmRsZWQgYnkgY2F0Y2ggY2FuZGlkYXRlcywgYW5kIGJ5IHRo
ZSBjYXRjaCBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgICAgIHdoaWNoIGlzIG5lY2Vzc2FyeSB3
aGVuIHRocm93aW5nIGZyb20gYSBjcm9zcyBpbnN0YW5jZSBjYWxsIHdoZXJlIGJvdGgKKyAgICAg
ICAgICAgIHRoZSBjYWxsZWUgc2F2ZSBvciBUTFMgd2lsbCBoYXZlIHRoZSBjYWxsZWUncyBpbnN0
YW5jZS4KKyAgICAgICAgICAgIC0gV2Ugc3RvcmUgdGhlIGN1cnJlbnQgb3Bjb2RlIGZvciB0aGUg
bGxpbnQsIG9yIHRoZQorICAgICAgICAgICAgY2FsbCBzaXRlIGluZGV4IGZvciBCMywgaW4gdGhl
IGNhbGwgZnJhbWUgc2xvdCBmb3IgdGhlIGFyZ3VtZW50CisgICAgICAgICAgICBjb3VudCB0YWcu
IFRoZSBjYWxsIHNpdGUgaW5kZXggaXMgdXNlZCBieSB0aGUgdW53aW5kZXIgdG8gY2hlY2sKKyAg
ICAgICAgICAgIGlmIGEgZ2l2ZW4gY2F0Y2ggY2FuIGhhbmRsZSB0aGUgZXhjZXB0aW9uIGJlaW5n
IHRocm93bi4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6Cisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9IYW5kbGVySW5mby5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6OkJhc2VJbnN0cnVj
dGlvbjo6bmFtZSBjb25zdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Omhhc2ggY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpkZWxldGVkVmFsdWUpOgorICAgICAgICAo
SlNDOjpDYWxsU2l0ZUluZGV4Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXhIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6Q2FsbFNp
dGVJbmRleEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkNhdGNoSW5mbzo6Q2F0Y2hJbmZvKToKKyAgICAgICAgKEpTQzo6
VW53aW5kRnVuY3Rvcjo6VW53aW5kRnVuY3Rvcik6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0
b3I6Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5k
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpD
YXRjaEluZm86OkNhdGNoSW5mbyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKToK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBq
aXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAg
ICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJ
VDo6Y29udmVydENhbGxlZVRvVk0pOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5oOgorICAg
ICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZVJlZik6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRX
aWRlMTZDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldFdpZGUzMkNvZGVSZWYpOgor
ICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50
Ojp3YXNtUmV0dXJuVG9UaHJvdyk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVXYXNtQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlV2FzbUNhdGNoQWxsKToKKyAgICAgICAg
KiBsbGludC9MTEludEV4Y2VwdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludE9mZnNldHNF
eHRyYWN0b3IuY3BwOgorICAgICAgICAqIGxsaW50L1dlYkFzc2VtYmx5LmFzbToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNl
OjpFcnJvckluc3RhbmNlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c2V0Q2F0Y2hhYmxlRnJvbVdhc20pOgorICAgICAg
ICAoSlNDOjpFcnJvckluc3RhbmNlOjppc0NhdGNoYWJsZUZyb21XYXNtIGNvbnN0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmNhbGxlZUZvcldhc21DYXRjaE9mZnNldCk6Cisg
ICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzVHJ5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0FueUNhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzQmxvY2spOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6Q29udHJvbERhdGEpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNUcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNBbnlDYXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpDb250cm9sRGF0YTo6aXNCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2gpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2hBbGwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6dHJ5U3Rh
cnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6dHJ5RW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGE6OnRyeURlcHRoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmNhdGNoS2luZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpleGNlcHRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6c3RhY2tTaXplIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZGlkUG9wVmFsdWVGcm9tU3RhY2sp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRTdGFja01hcCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnRha2VTdGFja21hcHMpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjp0YWtlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpwdXNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
c2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Z2Vu
ZXJhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpmaXh1cFBv
aW50ZXJQbHVzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnJlc3RvcmVX
ZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6aW5zZXJ0RW50cnlTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjppbnNlcnRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRSZWZJc051bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUYWJs
ZUdldCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkUmVmRnVuYyk6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlSW5pdCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRhYmxlQ29weSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6Omdl
dExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0
Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5RmlsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUluaXQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlDb3B5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpnZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpzZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hl
Y2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmVtaXRMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpzdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OnNhbml0aXplQXRvbWljUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNMb2FkT3ApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNMb2FkKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY1N0b3JlT3ApOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNTdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNCaW5hcnlSTVdPcCk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmF0b21pY0JpbmFyeVJNVyk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YXRvbWljTm90aWZ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6dHJ1bmNTYXR1cmF0ZWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRTZWxlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRMb29w
VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkRnJv
bVNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjb25u
ZWN0Q29udHJvbEVudHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
TG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNo
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRG
b3JFeGNlcHRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0
Y2hUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
Q2F0Y2hBbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYXRjaEFs
bFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0
Q2F0Y2hJbXBsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdh
dGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5y
ZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUaHJvdyk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbmRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEVuZFRv
VW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjcmVhdGVD
YWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENh
bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayk6CisgICAgICAgIChKU0M6Oldh
c206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVFeGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
ZW1pdENoZWNrc0Zvck1vZE9yRGl2KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1VPik6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4pOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0ej4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0
ej4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRP
cDxGNjRDb252ZXJ0VUk2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNT
RjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyVHJ1bmNTRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyVHJ1bmNVRjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0Pik6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0Pik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMy
Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNVRjMyPik6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAg
ICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpw
cmVwYXJlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBs
YW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpDYWxsZWU6OmhhbmRsZXJGb3JJbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2Fs
bGVlOjpMTEludENhbGxlZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2FsbGVlOjpsaW5r
RXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6aW5nSklUQ2Fs
bGVlOjpsaW5rRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6
aW5nSklUQ2FsbGVlOjpzdGFja21hcCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVl
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6aGFzRXhjZXB0aW9uSGFuZGxlcnMgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmZ1bmN0aW9uQ29kZUJsb2NrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6T3B0aW1pemluZ0pJVENhbGxlZTo6T3B0aW1pemluZ0pJ
VENhbGxlZSk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V2FzbUNhbGxpbmdDb252ZW50aW9uOjpjYWxsSW5mb3JtYXRpb25Gb3Ig
Y29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0eXBlVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjppc1ZhbGlkRXh0ZXJuYWxLaW5k
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVN0cmluZyk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxv
Y2s6Om51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpGdW5jdGlvbkNvZGVCbG9jazo6ZXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uQ29kZUJsb2NrOjphZGRFeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKiB3
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjppc1RyeU9yQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eGNlcHRpb25JbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20v
V2FzbUhhbmRsZXJJbmZvLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkhhbmRsZXJJ
bmZvOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmhhbmRs
ZXJGb3JJbmRleCk6CisgICAgICAgICogd2FzbS9XYXNtSGFuZGxlckluZm8uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlVubGlua2VkSGFuZGxlckluZm86OlVubGlua2VkSGFuZGxlcklu
Zm8pOgorICAgICAgICAoSlNDOjpXYXNtOjpIYW5kbGVySW5mbzo6dGFnIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmRlbGVnYXRlVGFyZ2V0IGNvbnN0KToKKyAgICAg
ICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojp+SW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmg6CisgICAgICAgIChK
U0M6Oldhc206Okluc3RhbmNlOjphZGRUYWcpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5j
ZTo6dGFnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6dHJ5Xyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6Y2F0Y2hfKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc0xvb3Ap
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmlzQmxv
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
SWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
VHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpp
c0FueUNhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xU
eXBlOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnVuaWZ5
VmFsdWVzV2l0aEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6Ondh
bGtFeHByZXNzaW9uU3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
bWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJz
ZUFuZENvbXBpbGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpMTEludEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpy
ZXBhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNh
bGxlcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRp
b25Gb3JDYWxsZWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZExvb3ApOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21MaW1pdHMuaDoKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5m
b3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmV4Y2Vw
dGlvbkluZGV4U3BhY2VTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb246OmlzSW1wb3J0ZWRFeGNlcHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25z
dCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpzaWduYXR1cmVJbmRl
eEZyb21FeGNlcHRpb25JbmRleFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlSW5mb3JtYXRpb246OmltcG9ydEV4Y2VwdGlvbkNvdW50IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmlzRGVjbGFyZWRFeGNlcHRpb24gY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6YWRkRGVjbGFyZWRFeGNlcHRp
b24pOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9X
YXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAqIHdhc20vV2FzbU9TUkVudHJ5RGF0YS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpPU1JF
bnRyeURhdGE6OnZhbHVlcyk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OmxvYWRWYWx1ZXNJbnRvQnVmZmVyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6ZG9PU1JFbnRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTik6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHdh
c20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFy
c2VyOjpwYXJzZUltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBh
cnNlRXhwb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFeGNl
cHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25zLmg6CisgICAgICAgIChKU0M6Oldh
c206OnZhbGlkYXRlT3JkZXIpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWduYXR1cmVJbmZvcm1h
dGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpzaWduYXR1
cmVGb3IpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpXQVNNX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0
aHMuaDoKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rpb25TaXplKToKKyAgICAg
ICAgKiB3YXNtL1dhc21UYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9XYXNt
VGFnLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdl
bmVyYXRvci5oLgorICAgICAgICAoSlNDOjpXYXNtOjpUYWc6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6Oldhc206OlRhZzo6cGFyYW1ldGVyQ291bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUYWc6OnBhcmFtZXRlciBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6c2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6VGFnOjpUYWcpOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5jcHA6CisgICAg
ICAgICogd2FzbS9XYXNtVGh1bmtzLmg6CisgICAgICAgICogd2FzbS9nZW5lcmF0ZVdhc21CM0lS
R2VuZXJhdG9ySW5saW5lc0hlYWRlci5weToKKyAgICAgICAgKENvZGVHZW5lcmF0b3IuZ2VuZXJh
dGVPcGNvZGUpOgorICAgICAgICAoQ29kZUdlbmVyYXRvci5tYWtlUmVzdWx0KToKKyAgICAgICAg
KENvZGVHZW5lcmF0b3IuZ2VuZXJhdGUpOgorICAgICAgICAqIHdhc20vZ2VuZXJhdGVXYXNtT3Bz
SGVhZGVyLnB5OgorICAgICAgICAodHlwZU1hY3JvaXplcik6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6SlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRp
b246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlv
bjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Z2V0
QXJnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnN1YnNwYWNlRm9y
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6dGFnIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6cGF5bG9hZCBjb25zdCk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjp0b0pTVmFsdWUpOgor
ICAgICAgICAoSlNDOjpmcm9tSlNWYWx1ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRy
eUNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwOgorICAgICAgICAo
SlNDOjpjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKToKKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eVRhZzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6SlNXZWJBc3NlbWJseVRh
Zyk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaC4K
KyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2Fz
bVRvSlMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3I6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAg
ICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OmdldEV4Y2VwdGlv
bik6CisgICAgICAgIChKU0M6OmdldFRhZyk6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1
Y3Rvcjo6Y3JlYXRlVGFnKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
OjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlUYWdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFnUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpnZXRUYWcp
OgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAq
IHdhc20vd2FzbS5qc29uOgorCiAyMDIxLTEwLTA1ICBQYXRyaWNrIEFuZ2xlICA8cGFuZ2xlQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTaG93IGNvbG9yIHNwYWNlIGZvciBj
YW52YXNlcyBpbiB0aGUgR3JhcGhpY3MgdGFiIG9uIHRoZSBvdmVydmlldyBjYXJkcwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxp
c3QgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dAppbmRleCAyODg1YjUxMDE3Y2MxYWUzZDg5MmVmM2M1ZjI3YTRiMTIzNzUzODQyLi4wNmIyMTc1
MTJjNmZiYzJkODUyNzI0YWFhNzZmYTU3OTRlM2RhZDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTk3LDYg
KzE5Nyw4IEBAICQoUFJPSkVDVF9ESVIpL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CiAk
KFBST0pFQ1RfRElSKS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCiAkKFBST0pFQ1RfRElSKS93
YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1Rf
RElSKS93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAorJChQUk9K
RUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAorJChQ
Uk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAKICQo
UFJPSkVDVF9ESVIpL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAKICQo
UFJPSkVDVF9ESVIpL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCiAkKFBS
T0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAg
LTIxMSw2ICsyMTMsOCBAQCAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yQ29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5
UnVudGltZUVycm9yUHJvdG90eXBlLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3Nl
bWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFibGVQcm90b3R5cGUuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5
VGFnQ29uc3RydWN0b3IuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFn
UHJvdG90eXBlLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS93YXNtLmpzb24KICQoUFJPSkVDVF9E
SVIpL3lhcnIvY3JlYXRlX3JlZ2V4X3RhYmxlcwogJChQUk9KRUNUX0RJUikveWFyci9nZW5lcmF0
ZVlhcnJDYW5vbmljYWxpemVVbmljb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggMmFkMjEzMWM1ODY2OWJk
MDU3NWM3YWY0MGE2YzQyN2E1OTRmNWMzZS4uY2IwNWQ4MjE2MmFkOWM0Y2ZmNjRjYTE4Y2FlYWUx
ODcxYmVjNmY2MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLW91dHB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtODIsNiArODIsOCBAQCAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2FzbUxMSW50R2VuZXJhdG9y
SW5saW5lcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlw
dENvcmUvV2FzbU9wcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2
YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaAogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ci5sdXQuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRD
b3JlL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlHbG9iYWxDb25z
dHJ1Y3Rvci5sdXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFT
Y3JpcHRDb3JlL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yLmx1dC5oCkBAIC05Niw2ICs5OCw4IEBAICQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNv
bnN0CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUv
V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUubHV0LmgKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVRhYmxlQ29uc3Ry
dWN0b3IubHV0LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2Ny
aXB0Q29yZS9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlUYWdDb25zdHJ1
Y3Rvci5sdXQuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3Jp
cHRDb3JlL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGVjYmNlNjdmNzhjMDAzNGMxNjZmNTBkNTg5
MmE2ZjA4YzVkYTQwZDYuLjc4OTc1NmYxMGY4YmRiODBjNTJmNGJlOTgwZjUzZjQ5MmEyZDFkNGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yMDMsNiAr
MjAzLDggQEAgT0JKRUNUX0xVVF9IRUFERVJTID0gXAogICAgIFRlbXBvcmFsVGltZVpvbmVQcm90
b3R5cGUubHV0LmggXAogICAgIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0
LmggXAogICAgIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmx1dC5oIFwKKyAgICBX
ZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvdHlwZS5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rv
ci5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUubHV0LmggXAogICAgIFdl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5sdXQuaCBcCkBAIC0yMTcsNiArMjE5LDggQEAg
T0JKRUNUX0xVVF9IRUFERVJTID0gXAogICAgIFdlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90
eXBlLmx1dC5oIFwKICAgICBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0LmggXAogICAg
IFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0LmggXAorICAgIFdlYkFzc2VtYmx5VGFnQ29u
c3RydWN0b3IubHV0LmggXAorICAgIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oIFwKICMK
IAogJChPQkpFQ1RfTFVUX0hFQURFUlMpOiAlLmx1dC5oIDogJS5jcHAgJChKYXZhU2NyaXB0Q29y
ZSkvY3JlYXRlX2hhc2hfdGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggY2Q5
ODBmZjRjMTBjNjI2ZTk1ODJlNzIzZmFmMjgwMTRkZGRlZDdkMy4uY2QwOGIwY2E5NjNkMWI1OGJk
OTA1ZTBjM2RiNTQ4NjM4ZDRlMTZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTc5Niw2ICs3OTYsNyBAQAogCQkxNDc4Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxlVHlw
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NkZB
NUE4MTM3OEY2QjAwMDM2MjdBMyAvKiBIYW5kbGVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVBNCAv
KiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3QjgzQUEwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRU
cmFuc2l0aW9uT3B0aW1pemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xv
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3Qjg0
NjIwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0ODUyMUQ4MjZFQUVCRkUwMENDMUQx
QSAvKiBXYXNtSGFuZGxlckluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8u
aCAqLzsgfTsKIAkJMTQ4NkE4QzAyNEFCRUQ0ODAwNzM5MjJEIC8qIEpTTG9ja1JlZlByaXZhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODZBOEJG
MjRBQkVEM0MwMDczOTIyRCAvKiBKU0xvY2tSZWZQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4NzRBRTYxNUVCREU0QTAwMkUzNTg3
IC8qIEpTU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0ODc0QUUyMTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4QTdCRjAxQjgyOTc1QTAwMkQ5
MTU3IC8qIElubGluZUNhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQ4QTdCRUUxQjgyOTc1QTAwMkQ5MTU3IC8qIElubGluZUNhbGxGcmFt
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04
MjcsNiArODI4LDEzIEBACiAJCTE0Q0E5NThCMTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9w
ZXJ0eUFuYWx5emVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNENBOTU4QTE2QUI1MERFMDA5MzhBMDYgLyogU3RhdGljUHJvcGVydHlBbmFseXplci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0Q0E5
NThEMTZBQjUwRkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDQTk1OEMxNkFCNTBGQTAw
OTM4QTA2IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTREMDFBNzcyMUZCMzUxRjAwQkM1NEU5IC8q
IEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0RDAxQTc2MjFGQjM1MDMwMEJDNTRFOSAvKiBKU1NjcmlwdFNvdXJj
ZVByb3ZpZGVyLmggKi87IH07CisJCTE0RDAxQkU2MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3Nl
bWJseVRhZ0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEQwMUJEQTI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25z
dHJ1Y3Rvci5oICovOyB9OworCQkxNEQwMUJFNzI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1i
bHlUYWdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0RDAxQkRCMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZS5oICovOyB9OworCQkxNEQwMUJFOTI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNl
cHRpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0RDAxQkREMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblBy
b3RvdHlwZS5oICovOyB9OworCQkxNEQwMUJFQzI2REVFRjM4MDBDQUUwRDAgLyogSlNXZWJBc3Nl
bWJseVRhZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTREMDFCRTAyNkRFRUYzNzAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlUYWcuaCAqLzsgfTsKKwkJ
MTREMDFCRUQyNkRFRUYzODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkUxMjZERUVG
MzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmggKi87IH07CisJCTE0RDAxQkVG
MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJFMzI2REVF
RjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oICovOyB9Owor
CQkxNEQwMUJGNTI2REVFRjUzMDBDQUUwRDAgLyogV2FzbVRhZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCRjMyNkRFRUY1MjAwQ0FFMEQwIC8q
IFdhc21UYWcuaCAqLzsgfTsKIAkJMTREMkYzREIxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNw
YWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQy
RjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERGMDREQTE2QjM5OTZEMDAxNkE1MTMg
LyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTRERjA0RDkxNkIzOTk2RDAwMTZBNTEzIC8qIFN0YXRpY1Byb3Bl
cnR5QW5hbHlzaXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEU4NEY5QTE0RUUxQUNDMDBE
NkQ1RDQgLyogV2Vha0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTM0NTksNiArMzQ2Nyw4IEBACiAJCTE0ODJCNzhBMEE0MzA1QUIwMDUx
N0NGQyAvKiBBUElDYXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUNh
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4MkI3RTEwQTQzMDc2MDAwNTE3
Q0ZDIC8qIEpTT2JqZWN0UmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
T2JqZWN0UmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODJCN0UyMEE0MzA3
NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU09iamVjdFJlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTE0ODUyMUQ1MjZFQUVCREYwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbUhhbmRsZXJJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMTQ4NTIxRDcyNkVBRUJGRTAwQ0MxRDFBIC8qIFdhc21IYW5kbGVySW5mby5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtSGFuZGxlckluZm8uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4NkE4QkUyNEFCRUQzQjAwNzM5MjJEIC8qIEpTTG9ja1Jl
Zi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0xvY2tSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDg2QThCRjI0QUJFRDNDMDA3MzkyMkQgLyogSlNMb2NrUmVmUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0xvY2tSZWZQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0ODc0QUUxMTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2NvcGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMzU0Miw2ICszNTUyLDIwIEBACiAJCTE0Q0MzQkEyMjEzOEEy
MzgwMDJENThCNiAvKiBJbnN0cnVjdGlvblN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnN0cnVjdGlvblN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNEQwMUE3NTIxRkIzNTAzMDBCQzU0RTkgLyogSlNTY3JpcHRTb3VyY2VQcm92aWRlci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTU2NyaXB0U291cmNlUHJvdmlkZXIubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RDAxQTc2MjFGQjM1MDMwMEJDNTRFOSAvKiBKU1Nj
cmlwdFNvdXJjZVByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU2NyaXB0U291cmNlUHJvdmlk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCREEyNkRFRUYzNzAwQ0FF
MEQwIC8qIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oOyBwYXRoID0ganMvV2ViQXNz
ZW1ibHlUYWdDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQw
MUJEQjI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaDsgcGF0
aCA9IGpzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTE0RDAxQkRDMjZERUVGMzcwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5RXhjZXB0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlF
eGNlcHRpb24uY3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkREMjZERUVGMzcwMENBRTBEMCAvKiBXZWJB
c3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oOyBwYXRoID0ganMvV2ViQXNzZW1i
bHlFeGNlcHRpb25Qcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRE
MDFCREUyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlUYWdDb25zdHJ1
Y3Rvci5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCREYyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFz
c2VtYmx5VGFnUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5VGFn
UHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRTAyNkRF
RUYzNzAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlUYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseVRhZy5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseVRh
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJFMTI2REVFRjM4MDBDQUUw
RDAgLyogSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5
RXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkUyMjZERUVG
MzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlw
ZS5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkUzMjZERUVGMzgwMENBRTBEMCAvKiBXZWJB
c3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaDsgcGF0aCA9IGpzL1dlYkFz
c2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTREMDFCRTQyNkRFRUYzODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlUYWcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseVRhZy5jcHA7IHBh
dGggPSBqcy9KU1dlYkFzc2VtYmx5VGFnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTREMDFCRTUyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1i
bHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseUV4Y2VwdGlv
bkNvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRjIy
NkRFRUY1MjAwQ0FFMEQwIC8qIFdhc21UYWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbVRhZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0
RDAxQkYzMjZERUVGNTIwMENBRTBEMCAvKiBXYXNtVGFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21UYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRE
MkYzRDkxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1hcmtlZFNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENMb29wU3RhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTREODU3NzQwQTQ2OTZDODAwMzIxNDZDIC8qIHRlc3RhcGkuanMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IG5hbWUgPSB0ZXN0YXBpLmpzOyBwYXRoID0gQVBJL3Rl
c3RzL3Rlc3RhcGkuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc3LDEwICs2
MzAxLDEwIEBACiAJCQkJMEYyNEU1M0IxN0VBOUY1OTAwQUJCMjE3IC8qIEFzc2VtYmx5SGVscGVy
cy5jcHAgKi8sCiAJCQkJMEYyNEU1M0MxN0VBOUY1OTAwQUJCMjE3IC8qIEFzc2VtYmx5SGVscGVy
cy5oICovLAogCQkJCTZCNzY3RTdBMjY3OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oICovLAotCQkJCTcyMzk5OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJ
VFBsYW4uY3BwICovLAotCQkJCTcyMzk5OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJ
VFBsYW4uaCAqLywKIAkJCQk1MkREMDAwNzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRD
b2RlLmNwcCAqLywKIAkJCQk1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRD
b2RlLmggKi8sCisJCQkJNzIzOTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxh
bi5jcHAgKi8sCisJCQkJNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxh
bi5oICovLAogCQkJCTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3Bw
ICovLAogCQkJCTBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywK
IAkJCQk2NUI4MzkyRDFCQUNBOUQzMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApA
QCAtNzE1MSw2ICs3MTc1LDggQEAKIAkJCQkxNDg3Q0UxNjIzNzc0MTAwMDA0NDQyOUMgLyogV2Fz
bUdlbmVyYXRvclRyYWl0cy5oICovLAogCQkJCUUzODM1MDA4MjM5MEQ5MzcwMDM2MzE2RCAvKiBX
YXNtR2xvYmFsLmNwcCAqLywKIAkJCQlFMzgzNTAwOTIzOTBEOTM3MDAzNjMxNkQgLyogV2FzbUds
b2JhbC5oICovLAorCQkJCTE0ODUyMUQ1MjZFQUVCREYwMENDMUQxQSAvKiBXYXNtSGFuZGxlcklu
Zm8uY3BwICovLAorCQkJCTE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlcklu
Zm8uaCAqLywKIAkJCQlBRDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1l
LmNwcCAqLywKIAkJCQlBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1l
LmggKi8sCiAJCQkJQUQ1QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAg
Ki8sCkBAIC03MjA4LDYgKzcyMzQsOCBAQAogCQkJCUUzQzczQTkwMjVCRkE3MzQwMEVGRTMwMyAv
KiBXYXNtU3RyZWFtaW5nUGxhbi5oICovLAogCQkJCUFENUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAv
KiBXYXNtVGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuaCAqLywKKwkJCQkxNEQwMUJGMjI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5jcHAg
Ki8sCisJCQkJMTREMDFCRjMyNkRFRUY1MjAwQ0FFMEQwIC8qIFdhc21UYWcuaCAqLywKIAkJCQk1
MjUwRDJDRjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCiAJCQkJNTI1MEQy
RDAxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLywKIAkJCQlFM0M2OTRCMjIzMDI2
ODc0MDA2RkJFNDIgLyogV2FzbVRpZXJVcENvdW50LmNwcCAqLywKQEAgLTkwOTEsNiArOTExOSw4
IEBACiAJCQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suaCAqLywKIAkJCQlBRDJGQ0JBNjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNv
bXBpbGVFcnJvci5jcHAgKi8sCiAJCQkJQUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3IuaCAqLywKKwkJCQkxNEQwMUJEQzI2REVFRjM3MDBDQUUwRDAg
LyogSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHAgKi8sCisJCQkJMTREMDFCRTEyNkRFRUYzODAw
Q0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLywKIAkJCQlFM0JGM0M0QzIzOTBE
MUUzMDA4QkM3NTIgLyogSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAgKi8sCiAJCQkJRTNCRjNDNEIy
MzkwRDFFMjAwOEJDNzUyIC8qIEpTV2ViQXNzZW1ibHlHbG9iYWwuaCAqLywKIAkJCQk3OTZGQjQz
OTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCAqLywKQEAgLTkxMDYs
MTIgKzkxMzYsMTggQEAKIAkJCQlBRDJGQ0JBRDFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvci5oICovLAogCQkJCUFEMkZDQkFFMURCNThEQTQwMEIzRTczNiAvKiBK
U1dlYkFzc2VtYmx5VGFibGUuY3BwICovLAogCQkJCUFEMkZDQkFGMURCNThEQTQwMEIzRTczNiAv
KiBKU1dlYkFzc2VtYmx5VGFibGUuaCAqLywKKwkJCQkxNEQwMUJFNDI2REVFRjM4MDBDQUUwRDAg
LyogSlNXZWJBc3NlbWJseVRhZy5jcHAgKi8sCisJCQkJMTREMDFCRTAyNkRFRUYzNzAwQ0FFMEQw
IC8qIEpTV2ViQXNzZW1ibHlUYWcuaCAqLywKIAkJCQlBREQwOUFFRjFGNUY2MjNGMDAxMzEzQzIg
LyogV2FzbVRvSlMuY3BwICovLAogCQkJCUFERDA5QUVFMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNt
VG9KUy5oICovLAogCQkJCUFEMkZDQkIwMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNv
bXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBRDJGQ0JCMTFEQjU4REE0MDBCM0U3
MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUFEMkZD
QkIyMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5j
cHAgKi8sCiAJCQkJQUQyRkNCQjMxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGls
ZUVycm9yUHJvdG90eXBlLmggKi8sCisJCQkJMTREMDFCRTUyNkRFRUYzODAwQ0FFMEQwIC8qIFdl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTE0RDAxQkUzMjZERUVG
MzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi8sCisJCQkJ
MTREMDFCRTIyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBl
LmNwcCAqLywKKwkJCQkxNEQwMUJERDI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNl
cHRpb25Qcm90b3R5cGUuaCAqLywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyogV2Vi
QXNzZW1ibHlGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8q
IFdlYkFzc2VtYmx5RnVuY3Rpb24uaCAqLywKIAkJCQk1MjEzMjI0MzFFQ0JDRTgyMDBGNjU2MTUg
LyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwICovLApAQCAtOTE0Niw2ICs5MTgyLDEwIEBA
CiAJCQkJQUQyRkNCQzExREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1
Y3Rvci5oICovLAogCQkJCUFEMkZDQkMyMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRh
YmxlUHJvdG90eXBlLmNwcCAqLywKIAkJCQlBRDJGQ0JDMzFEQjU4REE0MDBCM0U3MzYgLyogV2Vi
QXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oICovLAorCQkJCTE0RDAxQkRFMjZERUVGMzcwMENBRTBE
MCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQkxNEQwMUJEQTI2REVF
RjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oICovLAorCQkJCTE0RDAx
QkRGMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgKi8sCisJ
CQkJMTREMDFCREIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgg
Ki8sCiAJCQkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAqLywKIAkJCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uaCAqLywKIAkJCSk7CkBAIC05NDk2LDYgKzk1MzYsNyBAQAogCQkJ
CTUzRDQ0NERDMURBRjA4QUIwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUzNDFGQzcyMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVj
a1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJDNjNCMjFFNjBBRTQ3MDBDMTM4MzkgLyog
QjNXaWR0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJERDAwMDgyNkUwMzlCOTAwNTRFNDA4IC8q
IEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzIzOTk4RjcyNjVEQkNEQjAw
NTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYx
QTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTk2MzEsNyArOTY3Miw2IEBACiAJCQkJNURFNkU1QjMwRTE3
MjhFQzAwMTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM1
QzI0NjExRjc4OTI4RTAwNkVDNDBFIC8qIGNyZWF0ZV9yZWdleF90YWJsZXMgaW4gSGVhZGVycyAq
LywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWluLnB5IGluIEhlYWRlcnMg
Ki8sCi0JCQkJRTM4NkZEN0IyNkU4NjdCODAwRTRDMjhCIC8qIFRlbXBvcmFsUGxhaW5UaW1lQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBMTExMjQ2MTkyRkNFNzkwMDVFRTE4RCAv
KiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENE
NkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZERjE3
QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLApAQCAtOTczNSwxMCAr
OTc3NSw4IEBACiAJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERGR0Zsb3dNYXAuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVk
QXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdG
bHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJERDAwMDgyNkUwMzlCOTAwNTRFNDA4
IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUxQUIzRDhC
RTAwQkJCOEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY5Q0M4
OTE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUUzODZGRDdFMjZFODY3QjgwMEU0QzI4QiAvKiBUZW1wb3JhbFBsYWluVGltZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3Jh
cGguaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZBMThBNjAwNzAwMDFBMjdGOCAvKiBERkdH
cmFwaFNhZmVwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDI4MSw3ICsxMDMxOSw2IEBACiAJ
CQkJMEYyQjY2RjIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTM4NkZEN0YyNkU4NjdCODAwRTRDMjhC
IC8qIFRlbXBvcmFsUGxhaW5UaW1lUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJC
NjZGNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUzOTE3RTdCMUI3OTA2RkEwMDBFQkQzMyAvKiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjY2RjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDM5OCw2ICsxMDQzNSw3IEBACiAJCQkJ
QUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFMzFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJB
c3NlbWJseUNvbXBpbGVFcnJvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRUQyNkRFRUYz
ODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzQkYzQzREMjM5MEQxRTgwMDhCQzc1MiAvKiBKU1dlYkFzc2VtYmx5R2xvYmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhl
bHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTA0MDYsNiArMTA0NDQs
NyBAQAogCQkJCUFEMkZDQzA1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5TW9kdWxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFOTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRUIxREI1OERB
RDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRE
MDFCRUMyNkRFRUYzODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlUYWcuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9i
amVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDc0Myw2ICsxMDc4Miw5IEBACiAJCQkJQTNDN0VE
QkEyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Db25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTNDN0VEQjYyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRp
b25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY2RjE1MDIxMjY5M0Q0NTAwMDRCOThF
RiAvKiBUZW1wb3JhbE9iamVjdC5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzODZGRDdFMjZF
ODY3QjgwMEU0QzI4QiAvKiBUZW1wb3JhbFBsYWluVGltZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RTM4NkZEN0IyNkU4NjdCODAwRTRDMjhCIC8qIFRlbXBvcmFsUGxhaW5UaW1lQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAorCQkJCUUzODZGRDdGMjZFODY3QjgwMEU0QzI4QiAvKiBUZW1wb3Jh
bFBsYWluVGltZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMwRThBNTYyNkRFMkU0
ODAwREE0OTE1IC8qIFRlbXBvcmFsVGltZVpvbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMEU4
QTU3MjZERTJFNDgwMERBNDkxNSAvKiBUZW1wb3JhbFRpbWVab25lQ29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzMEU4QTU0MjZERTJFNDgwMERBNDkxNSAvKiBUZW1wb3JhbFRpbWVa
b25lUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwODI5LDYgKzEwODcxLDcgQEAKIAkJ
CQkxNDUwRkExQzIzNTdCREJFMDA5M0NENEQgLyogV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1M0Y0MEU4QjFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9u
UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzgzNTAwQTIzOTBEOTNCMDAzNjMxNkQgLyog
V2FzbUdsb2JhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTQ4NTIxRDgyNkVBRUJGRTAwQ0MxRDFB
IC8qIFdhc21IYW5kbGVySW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ4RkYzOTgxRUI1QkRC
MjAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2
RTIxRjY5OUVDMDAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QUQwMDY1OUUxRUNBQzgxMjAwMENBOTI2IC8qIFdhc21MaW1pdHMuaCBpbiBIZWFkZXJzICovLApA
QCAtMTA4NTksNiArMTA5MDIsNyBAQAogCQkJCUUzQTA1MzFBMjEzNDJCNjgwMDIyRUMxNCAvKiBX
YXNtU3RyZWFtaW5nUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0M3M0E5MTI1QkZBNzNC
MDBFRkUzMDMgLyogV2FzbVN0cmVhbWluZ1BsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMz
NkU2MUY2OUVDOTEwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0
RDAxQkY1MjZERUVGNTMwMENBRTBEMCAvKiBXYXNtVGFnLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MjUwRDJEMjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTNFOUUwQUYxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUQ1QzM2RUMxRjc1QUQ3QzAwMEJDQUFGIC8qIFdhc21Ub0pTLmggaW4gSGVh
ZGVycyAqLywKQEAgLTEwODkwLDYgKzEwOTM0LDggQEAKIAkJCQlBRDJGQ0MxNjFEQjU5Q0IyMDBC
M0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFEMkZDQkVGMURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBp
bGVFcnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTcxREI1OUNCMjAw
QjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMTREMDFCRUYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0
aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RDAxQkU5MjZERUVGMzgwMENB
RTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUQ0OTM3RDQxREREMjdERTAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUyMTMyMjQ2MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1
bmN0aW9uQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNCRjNDNTMyMzkwRDIwNTAwOEJDNzUy
IC8qIFdlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMTA5
MTcsNiArMTA5NjMsOCBAQAogCQkJCUFEMkZDQzIwMURCNTlDQjIwMEIzRTczNiAvKiBXZWJBc3Nl
bWJseVRhYmxlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JGRjFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQUQyRkNDMjExREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90
b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJFNjI2REVFRjM4MDBDQUUwRDAg
LyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFC
RTcyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MkY2QzM1RTFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDdBMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBXZWJLaXRBdmFpbGFiaWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEE2MUJENTk5
MzEwMEY0NTc1QyAvKiB3a2J1aWx0aW5zLnB5IGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQKaW5kZXggYTg1OTczZTdlZGNlMWI4MzcxMWUwMjkxOTcyYTMxYTQ0NmFmODUx
MC4uZjA0NDUxZDAzOGRiMzBjNzUxZjQ2YTlhNGQ3NDg2M2NiNmIyZDg1NSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dApAQCAtMTA3OSw2ICsxMDc5LDcgQEAgd2FzbS9XYXNtRmF1bHRTaWdu
YWxIYW5kbGVyLmNwcAogd2FzbS9XYXNtRm9ybWF0LmNwcAogd2FzbS9XYXNtRnVuY3Rpb25Db2Rl
QmxvY2suY3BwCiB3YXNtL1dhc21HbG9iYWwuY3BwCit3YXNtL1dhc21IYW5kbGVySW5mby5jcHAK
IHdhc20vV2FzbUluZGV4T3JOYW1lLmNwcAogd2FzbS9XYXNtSW5zdGFuY2UuY3BwCiB3YXNtL1dh
c21JbnN0YW5jZS5oCkBAIC0xMTA1LDYgKzExMDYsNyBAQCB3YXNtL1dhc21TdHJlYW1pbmdDb21w
aWxlci5jcHAKIHdhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKIHdhc20vV2FzbVN0cmVhbWlu
Z1BsYW4uY3BwCiB3YXNtL1dhc21UYWJsZS5jcHAKK3dhc20vV2FzbVRhZy5jcHAKIHdhc20vV2Fz
bVRodW5rcy5jcHAKIHdhc20vV2FzbVRpZXJVcENvdW50LmNwcAogd2FzbS9XYXNtVmFsdWVMb2Nh
dGlvbi5jcHAKQEAgLTExMTYsNiArMTExOCw3IEBAIHdhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5j
cHAKIHdhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAKK3dhc20vanMv
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5j
cHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmNwcApAQCAtMTEyMywxMCArMTEyNiwxMyBAQCB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNZW1vcnkuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJs
ZS5jcHAKK3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5jcHAKIHdhc20vanMvV2FzbVRvSlMuY3Bw
CiB3YXNtL2pzL1dhc21Ub0pTLmgKIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25z
dHJ1Y3Rvci5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuY3Bw
Cit3YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwCit3YXNtL2pzL1dl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAKIHdhc20vanMvV2Vi
QXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAKQEAgLTExNDQsNiArMTE1MCw4IEBAIHdhc20v
anMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5jcHAKIHdhc20vanMvV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVD
b25zdHJ1Y3Rvci5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAKK3dh
c20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAKK3dhc20vanMvV2ViQXNzZW1ibHlU
YWdQcm90b3R5cGUuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAog
CiB5YXJyL1JlZ3VsYXJFeHByZXNzaW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggOGNjNTUxNTZiNTdhYmNlNDljZWFiOTgyYzMx
NDdhOTg4OWQxNGY1Ni4uYmUyZThjODExZDZkZGQwYzE4NGJhNWVkNGQ5NTc5MzZmZDIyNThhMiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBA
IC0xODM5LDQgKzE4MzksMzYgQEAgb3AgOmF0b21pY19mZW5jZSwKICAgICBhcmdzOiB7CiAgICAg
fQogCitvcCA6dGhyb3csCisgICAgYXJnczogeworICAgICAgICBleGNlcHRpb25JbmRleDogdW5z
aWduZWQsCisgICAgICAgIGZpcnN0VmFsdWU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9CisKK29w
IDpyZXRocm93LAorICAgIGFyZ3M6IHsKKyAgICAgICAgZXhjZXB0aW9uOiBWaXJ0dWFsUmVnaXN0
ZXIsCisgICAgfQorCitvcF9ncm91cCA6Q2F0Y2gsCisgICAgWworICAgICAgICA6Y2F0Y2gsCisg
ICAgICAgIDpjYXRjaF9ub190bHMsCisgICAgXSwKKyAgICBhcmdzOiB7CisgICAgICAgIGV4Y2Vw
dGlvbkluZGV4OiB1bnNpZ25lZCwKKyAgICAgICAgZXhjZXB0aW9uOiBWaXJ0dWFsUmVnaXN0ZXIs
CisgICAgICAgIGFyZ3VtZW50Q291bnQ6IHVuc2lnbmVkLAorICAgICAgICBzdGFydE9mZnNldDog
dW5zaWduZWQsCisgICAgfQorCitvcF9ncm91cCA6Q2F0Y2hBbGwsCisgICAgWworICAgICAgICA6
Y2F0Y2hfYWxsLAorICAgICAgICA6Y2F0Y2hfYWxsX25vX3RscywKKyAgICBdLAorICAgIGFyZ3M6
IHsKKyAgICAgICAgZXhjZXB0aW9uOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgfQorCiBlbmRfc2Vj
dGlvbiA6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hh
bmRsZXJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8u
aAppbmRleCAwMWRkY2Y5Njk5YjQ4MDI5YTFiZDhiZWU0MDM0OTA0NzlhMWY5ZDdmLi42NmRmMDk5
OWYyMWIyNzRlMDk5OWJiNWEzODUyMzRkMTQ1MTVjOTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaApAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotZW51bSBjbGFzcyBIYW5kbGVyVHlwZSB7CitlbnVtIGNsYXNzIEhhbmRsZXJU
eXBlIDogdWludDhfdCB7CiAgICAgQ2F0Y2ggPSAwLAogICAgIEZpbmFsbHkgPSAxLAogICAgIFN5
bnRoZXNpemVkQ2F0Y2ggPSAyLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luc3RydWN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dHJ1Y3Rpb24uaAppbmRleCA2ODBlOTQwMWRjNjFmZjYzZGNiNWQ1ZTZmOWRlYmVjNDA2ODhiNDQ5
Li41MWYxZDAyZTE4MjU1OGM5YzI5MTJkODQwYzU4ODEwNDhjYTgwMWQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaApAQCAtODksNyArODksNyBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzID0gSlNPcGNvZGVUcmFpdHM+CiAg
ICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gVHJhaXRz
OjpvcGNvZGVOYW1lc1tvcGNvZGVJRCgpXTsKKyAgICAgICAgcmV0dXJuIFRyYWl0czo6b3Bjb2Rl
TmFtZXNbb3Bjb2RlSUQ8VHJhaXRzPigpXTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUcmFpdHMgPSBKU09wY29kZVRyYWl0cz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggNjNmZjRlZWNlNjI2YjVkOGRmZGVjMGM3MjNh
MWNkNzQ4ODcxYmM1YS4uOWVkZjU5Yjk2ODZhNWFkNmNlYTgzODNmNzQzMzMzNjBhMTljNmQ0MSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAK
QEAgLTEzMCw3ICsxMzAsOCBAQCB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0
ZWNvZGVPZmZzZXQoKSBjb25zdAogCiBCeXRlY29kZUluZGV4IENhbGxGcmFtZTo6Ynl0ZWNvZGVJ
bmRleCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7CisgICAgaWYg
KGNhbGxlZSgpLmlzV2FzbSgpKQorICAgICAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJ5dGVj
b2RlSW5kZXgoKTsKICAgICBpZiAoIWNvZGVCbG9jaygpKQogICAgICAgICByZXR1cm4gQnl0ZWNv
ZGVJbmRleCgwKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAppbmRleCAxY2FiMjI1YmNlMDM4ZDhmZTVlMWM0NTg5
MDNmZjM5ZDk1NmZmZjRhLi5kODY0YTI2OGNkN2NiNTA1YTQxMzNlMzcwY2MzMzlkOTU4NDI5YTRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCkBA
IC00NCw2ICs0NCwxMSBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgY2xhc3MgQ2FsbFNpdGVJbmRl
eCB7CiAgICAgcHVibGljOgogICAgICAgICBDYWxsU2l0ZUluZGV4KCkgPSBkZWZhdWx0OworCisg
ICAgICAgIENhbGxTaXRlSW5kZXgoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAg
ICAgICAgICAgOiBtX2JpdHMoZGVsZXRlZFZhbHVlKCkuYml0cygpKQorICAgICAgICB7CisgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KQogICAgICAgICAgICAgOiBtX2JpdHMoYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkKQEAgLTU3LDEzICs2MiwyNSBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fYml0czsgfQogICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuIG1fYml0cyA9PSBvdGhlci5tX2JpdHM7IH0KIAorICAgICAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QgeyByZXR1cm4gaW50SGFzaChtX2JpdHMpOyB9CisgICAgICAgIHN0YXRpYyBDYWxsU2l0
ZUluZGV4IGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIGZyb21CaXRzKHNfaW52YWxpZEluZGV4IC0g
MSk7IH0KKyAgICAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuICp0aGlzID09IGRlbGV0ZWRWYWx1ZSgpOyB9CisKICAgICAgICAgdWludDMyX3QgYml0cygp
IGNvbnN0IHsgcmV0dXJuIG1fYml0czsgfQogICAgICAgICBzdGF0aWMgQ2FsbFNpdGVJbmRleCBm
cm9tQml0cyh1aW50MzJfdCBiaXRzKSB7IHJldHVybiBDYWxsU2l0ZUluZGV4KGJpdHMpOyB9CiAK
ICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gQnl0
ZWNvZGVJbmRleChiaXRzKCkpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB1aW50MzJfdCBt
X2JpdHMgeyBCeXRlY29kZUluZGV4KCkub2Zmc2V0KCkgfTsKKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50MzJfdCBzX2ludmFsaWRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMy
X3Q+OjptYXgoKTsKKworICAgICAgICB1aW50MzJfdCBtX2JpdHMgeyBzX2ludmFsaWRJbmRleCB9
OworICAgIH07CisKKyAgICBzdHJ1Y3QgQ2FsbFNpdGVJbmRleEhhc2ggeworICAgICAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBDYWxsU2l0ZUluZGV4JiBrZXkpIHsgcmV0dXJuIGtleS5o
YXNoKCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2FsbFNpdGVJbmRleCYg
YSwgY29uc3QgQ2FsbFNpdGVJbmRleCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7
CiAgICAgfTsKIAogICAgIGNsYXNzIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IDogcHVibGljIENh
bGxTaXRlSW5kZXggewpAQCAtMzMyLDMgKzM0OSwxNSBAQCBKU19FWFBPUlRfUFJJVkFURSBib29s
IGlzRnJvbUpTQ29kZSh2b2lkKiByZXR1cm5BZGRyZXNzKTsKIAogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZh
dWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6Q2FsbFNpdGVJbmRl
eD4gOiBKU0M6OkNhbGxTaXRlSW5kZXhIYXNoIHsgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6Q2Fs
bFNpdGVJbmRleD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpDYWxsU2l0ZUluZGV4PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggOTEyNmVmNTU5ZjM1MzEyNTJlYjRkZDUyOWVk
YjQ3ZDNjZWZhYmEzYy4uZDg3NjI5MTA2NGIyNjljNmEyY2NlYmMxYjJmMDU2OTc1NDEyYjVlNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgog
I2luY2x1ZGUgIkpTTW9kdWxlUmVjb3JkLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIK
ICNpbmNsdWRlICJMaXRlcmFsUGFyc2VyLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay5oIgpAQCAtNTEyLDE1ICs1MTMsNTcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBu
b3RpZnlEZWJ1Z2dlck9mVW53aW5kaW5nKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAg
ICB9CiB9CiAKK0NhdGNoSW5mbzo6Q2F0Y2hJbmZvKGNvbnN0IEhhbmRsZXJJbmZvKiBoYW5kbGVy
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBtX3ZhbGlkID0gISFoYW5kbGVyOworICAg
IGlmIChtX3ZhbGlkKSB7CisgICAgICAgIG1fdHlwZSA9IGhhbmRsZXItPnR5cGUoKTsKKyAgICAg
ICAgbV9uYXRpdmVDb2RlID0gaGFuZGxlci0+bmF0aXZlQ29kZTsKKworICAgICAgICAvLyBoYW5k
bGVyLT50YXJnZXQgaXMgbWVhbmluZ2xlc3MgZm9yIGdldHRpbmcgYSBjb2RlIG9mZnNldCB3aGVu
IGNhdGNoaW5nCisgICAgICAgIC8vIHRoZSBleGNlcHRpb24gaW4gYSBERkcvRlRMIGZyYW1lLiBU
aGlzIGJ5dGVjb2RlIHRhcmdldCBvZmZzZXQgY291bGQgYmUKKyAgICAgICAgLy8gc29tZXRoaW5n
IHRoYXQncyBpbiBhbiBpbmxpbmVkIGZyYW1lLCB3aGljaCBtZWFucyBhbiBhcnJheSBhY2Nlc3MK
KyAgICAgICAgLy8gd2l0aCB0aGlzIGJ5dGVjb2RlIG9mZnNldCBpbiB0aGUgbWFjaGluZSBmcmFt
ZSBpcyB1dHRlcmx5IG1lYW5pbmdsZXNzCisgICAgICAgIC8vIGFuZCBjYW4gY2F1c2UgYW4gb3Zl
cmZsb3cuIE9TUiBleGl0IHByb3Blcmx5IGV4aXRzIHRvIGhhbmRsZXItPnRhcmdldAorICAgICAg
ICAvLyBpbiB0aGUgcHJvcGVyIGZyYW1lLgorICAgICAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCisgICAgICAgICAgICBtX2NhdGNoUENGb3JJ
bnRlcnByZXRlciA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaGFuZGxlci0+dGFyZ2V0
KS5wdHIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJwcmV0
ZXIgPSBudWxscHRyOworICAgIH0KK30KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK0NhdGNo
SW5mbzo6Q2F0Y2hJbmZvKGNvbnN0IFdhc206OkhhbmRsZXJJbmZvKiBoYW5kbGVyLCBjb25zdCBX
YXNtOjpDYWxsZWUqIGNhbGxlZSkKK3sKKyAgICBtX3ZhbGlkID0gISFoYW5kbGVyOworICAgIGlm
IChtX3ZhbGlkKSB7CisgICAgICAgIG1fdHlwZSA9IEhhbmRsZXJUeXBlOjpDYXRjaDsKKyAgICAg
ICAgbV9uYXRpdmVDb2RlID0gaGFuZGxlci0+bV9uYXRpdmVDb2RlOworICAgICAgICBpZiAoY29u
c3QgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxlZS0+ZnVuY3Rpb25D
b2RlQmxvY2soKSkKKyAgICAgICAgICAgIG1fY2F0Y2hQQ0ZvckludGVycHJldGVyID0gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChoYW5kbGVyLT5tX3RhcmdldCkucHRyKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fY2F0Y2hQQ0ZvckludGVycHJldGVyID0gbnVsbHB0cjsKKyAg
ICB9Cit9CisjZW5kaWYKKwogY2xhc3MgVW53aW5kRnVuY3RvciB7CiBwdWJsaWM6Ci0gICAgVW53
aW5kRnVuY3RvcihWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgYm9vbCBpc1Rlcm1pbmF0
aW9uLCBDb2RlQmxvY2sqJiBjb2RlQmxvY2ssIEhhbmRsZXJJbmZvKiYgaGFuZGxlcikKKyAgICBV
bndpbmRGdW5jdG9yKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBib29sIGlzVGVybWlu
YXRpb24sIEpTVmFsdWUgdGhyb3duVmFsdWUsIENvZGVCbG9jayomIGNvZGVCbG9jaywgQ2F0Y2hJ
bmZvJiBoYW5kbGVyKQogICAgICAgICA6IG1fdm0odm0pCiAgICAgICAgICwgbV9jYWxsRnJhbWUo
Y2FsbEZyYW1lKQogICAgICAgICAsIG1faXNUZXJtaW5hdGlvbihpc1Rlcm1pbmF0aW9uKQogICAg
ICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAgICAgLCBtX2hhbmRsZXIoaGFuZGxl
cikKICAgICB7CisgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7CisgICAgICAgICAgICBp
ZiAoSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogd2FzbUV4Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbio+KG1fdm0sIHRocm93blZhbHVlKSkgeworICAgICAgICAg
ICAgICAgIG1fY2F0Y2hhYmxlRnJvbVdhc20gPSB0cnVlOworICAgICAgICAgICAgICAgIG1fd2Fz
bVRhZyA9ICZ3YXNtRXhjZXB0aW9uLT50YWcoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoRXJy
b3JJbnN0YW5jZSogZXJyb3IgPSBqc0R5bmFtaWNDYXN0PEVycm9ySW5zdGFuY2UqPihtX3ZtLCB0
aHJvd25WYWx1ZSkpCisgICAgICAgICAgICAgICAgbV9jYXRjaGFibGVGcm9tV2FzbSA9IGVycm9y
LT5pc0NhdGNoYWJsZUZyb21XYXNtKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBTdGFja1Zp
c2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKQEAg
LTUyOSwxOSArNTcyLDMyIEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsRnJhbWUgPSB2aXNpdG9y
LT5jYWxsRnJhbWUoKTsKICAgICAgICAgbV9jb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2so
KTsKIAotICAgICAgICBtX2hhbmRsZXIgPSBudWxscHRyOworICAgICAgICBtX2hhbmRsZXIubV92
YWxpZCA9IGZhbHNlOwogICAgICAgICBpZiAobV9jb2RlQmxvY2spIHsKICAgICAgICAgICAgIGlm
ICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgbV9oYW5kbGVyID0gZmluZEV4
Y2VwdGlvbkhhbmRsZXIodmlzaXRvciwgbV9jb2RlQmxvY2ssIFJlcXVpcmVkSGFuZGxlcjo6QW55
SGFuZGxlcik7Ci0gICAgICAgICAgICAgICAgaWYgKG1faGFuZGxlcikKKyAgICAgICAgICAgICAg
ICBtX2hhbmRsZXIgPSB7IGZpbmRFeGNlcHRpb25IYW5kbGVyKHZpc2l0b3IsIG1fY29kZUJsb2Nr
LCBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpLCBtX2NvZGVCbG9jayB9OworICAgICAgICAg
ICAgICAgIGlmIChtX2hhbmRsZXIubV92YWxpZCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFN0YWNrVmlzaXRvcjo6RG9uZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotICAgICAgICBpZiAodmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxsKCkp
IHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBqc1RvV2FzbUlDQ2FsbGVlID0ganNEeW5hbWljQ2Fz
dDxKU1RvV2FzbUlDQ2FsbGVlKj4obV92bSwgdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkpKQor
ICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSA9IHZpc2l0b3ItPmNhbGxlZSgpOworICAgICAgICBp
ZiAoY2FsbGVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byoganNUb1dhc21JQ0Nh
bGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KG1fdm0sIGNhbGxlZS5hc0Nl
bGwoKSkpCiAgICAgICAgICAgICAgICAgbV92bS53YXNtQ29udGV4dC5zdG9yZShqc1RvV2FzbUlD
Q2FsbGVlLT5mdW5jdGlvbigpLT5wcmV2aW91c0luc3RhbmNlKG1fY2FsbEZyYW1lKSwgbV92bS5z
b2Z0U3RhY2tMaW1pdCgpKTsKKworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fY2F0Y2hhYmxl
RnJvbVdhc20gJiYgY2FsbGVlLmlzV2FzbSgpKSB7CisgICAgICAgICAgICBXYXNtOjpDYWxsZWUq
IHdhc21DYWxsZWUgPSBjYWxsZWUuYXNXYXNtQ2FsbGVlKCk7CisgICAgICAgICAgICBpZiAod2Fz
bUNhbGxlZS0+aGFzRXhjZXB0aW9uSGFuZGxlcnMoKSkgeworICAgICAgICAgICAgICAgIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqPihtX2NhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IG1fY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0
cygpOworICAgICAgICAgICAgICAgIG1faGFuZGxlciA9IHsgd2FzbUNhbGxlZS0+aGFuZGxlckZv
ckluZGV4KGpzSW5zdGFuY2UtPmluc3RhbmNlKCksIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgbV93
YXNtVGFnKSwgd2FzbUNhbGxlZSB9OworICAgICAgICAgICAgICAgIGlmIChtX2hhbmRsZXIubV92
YWxpZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCiAKQEAgLTU4OCwxMCArNjQ0LDEyIEBAIHBy
aXZhdGU6CiAgICAgQ2FsbEZyYW1lKiYgbV9jYWxsRnJhbWU7CiAgICAgYm9vbCBtX2lzVGVybWlu
YXRpb247CiAgICAgQ29kZUJsb2NrKiYgbV9jb2RlQmxvY2s7Ci0gICAgSGFuZGxlckluZm8qJiBt
X2hhbmRsZXI7CisgICAgQ2F0Y2hJbmZvJiBtX2hhbmRsZXI7CisgICAgY29uc3QgV2FzbTo6VGFn
KiBtX3dhc21UYWcgeyBudWxscHRyIH07CisgICAgYm9vbCBtX2NhdGNoYWJsZUZyb21XYXNtIHsg
ZmFsc2UgfTsKIH07CiAKLU5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVu
d2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24p
CitORVZFUl9JTkxJTkUgQ2F0Y2hJbmZvIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxs
RnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIApAQCAtNjA5LDE2ICs2NjcsMTMgQEAgTkVW
RVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZy
YW1lKiYgY2FsbEZyYW1lLCBFeGMKICAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNFRChzY29wZSwg
c2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2VwdGlvbiBoYW5k
bGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KLSAgICBIYW5kbGVy
SW5mbyogaGFuZGxlciA9IG51bGxwdHI7Ci0gICAgVW53aW5kRnVuY3RvciBmdW5jdG9yKHZtLCBj
YWxsRnJhbWUsIHZtLmlzVGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSwgY29kZUJsb2Nr
LCBoYW5kbGVyKTsKKyAgICBDYXRjaEluZm8gY2F0Y2hJbmZvOworICAgIFVud2luZEZ1bmN0b3Ig
ZnVuY3Rvcih2bSwgY2FsbEZyYW1lLCB2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlv
biksIGV4Y2VwdGlvblZhbHVlLCBjb2RlQmxvY2ssIGNhdGNoSW5mbyk7CiAgICAgU3RhY2tWaXNp
dG9yOjp2aXNpdDxTdGFja1Zpc2l0b3I6OlRlcm1pbmF0ZUlmVG9wRW50cnlGcmFtZUlzRW1wdHk+
KGNhbGxGcmFtZSwgdm0sIGZ1bmN0b3IpOwogICAgIGlmICh2bS5oYXNDaGVja3BvaW50T1NSU2lk
ZVN0YXRlKCkpCiAgICAgICAgIHZtLnBvcEFsbENoZWNrcG9pbnRPU1JTaWRlU3RhdGVVbnRpbChj
YWxsRnJhbWUpOwogCi0gICAgaWYgKCFoYW5kbGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIHJldHVybiBoYW5kbGVyOworICAgIHJldHVybiBjYXRjaEluZm87CiB9CiAKIHZvaWQg
SW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuaAppbmRleCAwYzNlZmUxMmU1MTA1Mzg4ZjZjZjI4NTExZDllYTVlNGVhZjMw
N2ZjLi41NTk0NjAyMGEzN2ZkNDA5ZDExNzljMDQ3N2VkOGRjMTM4YjkwNTIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAtNDMsNiAr
NDMsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitu
YW1lc3BhY2UgV2FzbSB7CitjbGFzcyBDYWxsZWU7CitzdHJ1Y3QgSGFuZGxlckluZm87Cit9Cisj
ZW5kaWYKKwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBFdmFsRXhlY3V0YWJsZTsK
ICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC01OCw2ICs2NSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGNsYXNzIEpTU2NvcGU7CiAgICAgY2xhc3MgU291cmNlQ29kZTsKICAgICBj
bGFzcyBTdGFja0ZyYW1lOworICAgIGVudW0gY2xhc3MgSGFuZGxlclR5cGUgOiB1aW50OF90Owog
ICAgIHN0cnVjdCBDYWxsRnJhbWVDbG9zdXJlOwogICAgIHN0cnVjdCBIYW5kbGVySW5mbzsKICAg
ICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CkBAIC04MSw2ICs4OSwyMiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgU3RhY2tGcmFtZU5hdGl2ZUNvZGUKICAgICB9OwogCisgICAgc3RydWN0IENhdGNo
SW5mbyB7CisgICAgICAgIENhdGNoSW5mbygpCisgICAgICAgICAgICA6IG1fdmFsaWQoZmFsc2Up
CisgICAgICAgIHsgfQorCisgICAgICAgIENhdGNoSW5mbyhjb25zdCBIYW5kbGVySW5mbyosIENv
ZGVCbG9jayopOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgQ2F0Y2hJbmZvKGNv
bnN0IFdhc206OkhhbmRsZXJJbmZvKiwgY29uc3QgV2FzbTo6Q2FsbGVlKik7CisjZW5kaWYKKwor
ICAgICAgICBib29sIG1fdmFsaWQ7CisgICAgICAgIEhhbmRsZXJUeXBlIG1fdHlwZTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1fbmF0aXZl
Q29kZTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIG1fY2F0Y2hQQ0ZvckludGVycHJldGVy
OworICAgIH07CisKICAgICBjbGFzcyBJbnRlcnByZXRlciB7CiAgICAgICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogICAgICAgICBmcmllbmQgY2xhc3MgQ2FjaGVkQ2FsbDsKQEAgLTExMiw3
ICsxMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGdldEFyZ3VtZW50c0Rh
dGEoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiomLCBwdHJkaWZmX3QmIGZpcnN0UGFyYW1ldGVySW5k
ZXgsIFJlZ2lzdGVyKiYgYXJndiwgaW50JiBhcmdjKTsKIAotICAgICAgICBORVZFUl9JTkxJTkUg
SGFuZGxlckluZm8qIHVud2luZChWTSYsIENhbGxGcmFtZSomLCBFeGNlcHRpb24qKTsKKyAgICAg
ICAgTkVWRVJfSU5MSU5FIENhdGNoSW5mbyB1bndpbmQoVk0mLCBDYWxsRnJhbWUqJiwgRXhjZXB0
aW9uKik7CiAgICAgICAgIHZvaWQgbm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRvQmVUaHJvd24o
Vk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIEV4Y2VwdGlvbiopOwogICAgICAgICBO
RVZFUl9JTkxJTkUgdm9pZCBkZWJ1ZyhDYWxsRnJhbWUqLCBEZWJ1Z0hvb2tUeXBlKTsKICAgICAg
ICAgc3RhdGljIFN0cmluZyBzdGFja1RyYWNlQXNTdHJpbmcoVk0mLCBjb25zdCBWZWN0b3I8U3Rh
Y2tGcmFtZT4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrVmlzaXRvci5jcHAKaW5kZXggNTdhMWJkYjZkYmQ1YjE2MDY5MWM2NTY1MGZjMGQ0NWRiZTgw
OWVhYi4uZGM1ZWNjZTA1ZWUzOWZiYmZlYmY1ZDliMmRiYjNiOTU2ZmQ2NmE1NiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKQEAg
LTE2NiwyMyArMTY2LDIwIEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1l
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBjb2RlT3JpCiAgICAgbV9mcmFtZS5t
X2lubGluZUNhbGxGcmFtZSA9IG51bGxwdHI7CiAjZW5kaWYKIAorICAgIG1fZnJhbWUubV9jb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIG1fZnJhbWUubV9ieXRlY29kZUlu
ZGV4ID0gIW1fZnJhbWUuY29kZUJsb2NrKCkgPyBCeXRlY29kZUluZGV4KDApCisgICAgICAgIDog
Y29kZU9yaWdpbiA/IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKQorICAgICAgICA6IGNhbGxG
cmFtZS0+Ynl0ZWNvZGVJbmRleCgpOworCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIGlm
IChjYWxsRnJhbWUtPmlzQW55V2FzbUNhbGxlZSgpKSB7CiAgICAgICAgIG1fZnJhbWUubV9pc1dh
c21GcmFtZSA9IHRydWU7CiAgICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBudWxscHRyOwot
ICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsKIAogICAg
ICAgICBpZiAobV9mcmFtZS5tX2NhbGxlZS5pc1dhc20oKSkKICAgICAgICAgICAgIG1fZnJhbWUu
bV93YXNtRnVuY3Rpb25JbmRleE9yTmFtZSA9IG1fZnJhbWUubV9jYWxsZWUuYXNXYXNtQ2FsbGVl
KCktPmluZGV4T3JOYW1lKCk7Ci0KLSAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAg
IG1fZnJhbWUubV9jb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIG1fZnJh
bWUubV9ieXRlY29kZUluZGV4ID0gIW1fZnJhbWUuY29kZUJsb2NrKCkgPyBCeXRlY29kZUluZGV4
KDApCi0gICAgICAgIDogY29kZU9yaWdpbiA/IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKQot
ICAgICAgICA6IGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpOwotCiB9CiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAppbmRleCBlZjJmY2I0MmYzNWZlNzJlNDRkZjNlMDIyNGIyZTkwOGIyNTVlZTk4Li5hOTFhOWRk
OTdhYmVlODc0OGQwNzY3YzMyM2FlY2E4ZDQ5OGViNGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCkBAIC03MDQsOSArNzA0LDQ3IEBAIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKEVudHJ5RnJhCiAjZW5kaWYKIAogICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUs
IHNjcmF0Y2gpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2
ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgcmVzdG9yZUNhbGxlZVNh
dmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3JhdGNoLCBza2lwTGlz
dCk7CiAKLSAgICBMb2FkUmVnU3Bvb2xlciBzcG9vbGVyKCp0aGlzLCBzY3JhdGNoKTsKKyAgICAv
LyBSZXN0b3JlIHRoZSBjYWxsZWUgc2F2ZSB2YWx1ZSBvZiB0aGUgc2NyYXRjaC4KKyAgICBSZWdp
c3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KHNjcmF0Y2hHUFJFbnRyeUlu
ZGV4KTsKKyAgICBBU1NFUlQoIWRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkp
OworICAgIEFTU0VSVChlbnRyeS5yZWcoKS5pc0dQUigpKTsKKyAgICBBU1NFUlQoc2NyYXRjaCA9
PSBlbnRyeS5yZWcoKS5ncHIoKSk7CisjaWYgQ1BVKEFSTTY0KQorICAgIFJlZ2lzdGVyQXRPZmZz
ZXQgZW50cnkyID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KHNjcmF0Y2hHUFJFbnRyeUluZGV4ICsgMSk7
CisgICAgQVNTRVJUX1VOVVNFRChlbnRyeTIsICFkb250UmVzdG9yZVJlZ2lzdGVycy5nZXQoZW50
cnkyLnJlZygpKSk7CisgICAgQVNTRVJUKGVudHJ5Mi5yZWcoKS5pc0dQUigpKTsKKyAgICBBU1NF
UlQodW51c2VkTmV4dFNsb3RHUFIgPT0gZW50cnkyLnJlZygpLmdwcigpKTsKKyAgICBsb2FkUGFp
cjY0KHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihlbnRyeS5vZmZzZXQoKSksIHNjcmF0Y2gsIHVudXNl
ZE5leHRTbG90R1BSKTsKKyNlbHNlCisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gsIGVudHJ5
Lm9mZnNldCgpKSwgc2NyYXRjaCk7CisjZW5kaWYKKworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
dG9wRW50cnlGcmFtZSk7CisjZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RF
UlMgPiAwCit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSUmVnIHZtR1BSLCBHUFJSZWcgc2NyYXRj
aEdQUikKK3sKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKKyAgICBs
b2FkUHRyKEFkZHJlc3Modm1HUFIsIFZNOjp0b3BFbnRyeUZyYW1lT2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXJJbXBsKHNjcmF0Y2hHUFIsIFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHZtR1BSKTsKKyNlbmRpZiAvLyBOVU1CRVJfT0ZfQ0FMTEVF
X1NBVkVTX1JFR0lTVEVSUyA+IDAKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGVu
dHJ5RnJhbWVHUFIsIGNvbnN0IFJlZ2lzdGVyU2V0JiBza2lwTGlzdCkKK3sKKyNpZiBOVU1CRVJf
T0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEVu
dHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIGVudHJ5RnJhbWVH
UFIpOworCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVnaXN0
ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOworICAgIHVuc2lnbmVkIHJlZ2lz
dGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOworCisgICAgTG9hZFJlZ1Nwb29sZXIg
c3Bvb2xlcigqdGhpcywgZW50cnlGcmFtZUdQUik7CiAKICAgICAvLyBSZXN0b3JlIGFsbCBjYWxs
ZWUgc2F2ZXMgZXhjZXB0IGZvciB0aGUgc2NyYXRjaC4KICAgICB1bnNpZ25lZCBpID0gMDsKQEAg
LTcyOCwyMyArNzY2LDkgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZl
c0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmEKICAgICB9CiAgICAgc3Bv
b2xlci5maW5hbGl6ZUZQUigpOwogCi0gICAgLy8gUmVzdG9yZSB0aGUgY2FsbGVlIHNhdmUgdmFs
dWUgb2YgdGhlIHNjcmF0Y2guCi0gICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxl
ZVNhdmVzLT5hdChzY3JhdGNoR1BSRW50cnlJbmRleCk7Ci0gICAgQVNTRVJUKCFkb250UmVzdG9y
ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKTsKLSAgICBBU1NFUlQoZW50cnkucmVnKCkuaXNH
UFIoKSk7Ci0gICAgQVNTRVJUKHNjcmF0Y2ggPT0gZW50cnkucmVnKCkuZ3ByKCkpOwotI2lmIENQ
VShBUk02NCkKLSAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5MiA9IGFsbENhbGxlZVNhdmVzLT5h
dChzY3JhdGNoR1BSRW50cnlJbmRleCArIDEpOwotICAgIEFTU0VSVF9VTlVTRUQoZW50cnkyLCAh
ZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5Mi5yZWcoKSkpOwotICAgIEFTU0VSVChlbnRy
eTIucmVnKCkuaXNHUFIoKSk7Ci0gICAgQVNTRVJUKHVudXNlZE5leHRTbG90R1BSID09IGVudHJ5
Mi5yZWcoKS5ncHIoKSk7Ci0gICAgbG9hZFBhaXI2NChzY3JhdGNoLCBUcnVzdGVkSW1tMzIoZW50
cnkub2Zmc2V0KCkpLCBzY3JhdGNoLCB1bnVzZWROZXh0U2xvdEdQUik7Ci0jZWxzZQotICAgIGxv
YWRQdHIoQWRkcmVzcyhzY3JhdGNoLCBlbnRyeS5vZmZzZXQoKSksIHNjcmF0Y2gpOwotI2VuZGlm
Ci0KICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOworICAgIFVOVVNFRF9Q
QVJBTSh2bUdQUik7CisgICAgVU5VU0VEX1BBUkFNKHNraXBMaXN0KTsKICNlbmRpZiAvLyBOVU1C
RVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggMGQyNTNkOTg4ZWMyODdjOGM5N2I1NmQ1
YTg3NDE1ZjExNjFiNThjYi4uOWE0NzlmNjcwYjZkNmVkOTFkNjg5OThiOWY5M2JmMTA2ZGU3ZmEw
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC00
MTMsNiArNDEzLDggQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgcmVzdG9yZUNhbGxlZVNh
dmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYpOworICAgIHZv
aWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEdQ
UlJlZyB2bUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpOworICAgIHZvaWQgcmVzdG9yZUNhbGxlZVNh
dmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgZW50cnlGcmFt
ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHNraXBMaXN0KTsKIAogICAgIHZvaWQgY29weUxMSW50QmFz
ZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcihFbnRyeUZyYW1lKiYsIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAppbmRleCA2ZDU4M2E0ODll
ZDUzMDMxOGNlMzA5NmM2NmIwMmU3ZDFjNThhNGJjLi5iODZlOWE0MTAzYzg1MDZjM2ZkYmJhYzU0
ZDdlOTRlNjY2MGFhZDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5jcHAKQEAgLTU0LDIxICs1NCwxNCBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gc2NvcGUu
ZXhjZXB0aW9uKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uKTsKLSAgICBIYW5kbGVy
SW5mbyogaGFuZGxlciA9IHZtLmludGVycHJldGVyLT51bndpbmQodm0sIGNhbGxGcmFtZSwgZXhj
ZXB0aW9uKTsgLy8gVGhpcyBtYXkgdXBkYXRlIGNhbGxGcmFtZS4KKyAgICBDYXRjaEluZm8gaGFu
ZGxlciA9IHZtLmludGVycHJldGVyLT51bndpbmQodm0sIGNhbGxGcmFtZSwgZXhjZXB0aW9uKTsg
Ly8gVGhpcyBtYXkgdXBkYXRlIGNhbGxGcmFtZS4KIAogICAgIHZvaWQqIGNhdGNoUm91dGluZTsK
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogY2F0Y2hQQ0ZvckludGVycHJldGVyID0gbnVsbHB0cjsK
LSAgICBpZiAoaGFuZGxlcikgewotICAgICAgICAvLyBoYW5kbGVyLT50YXJnZXQgaXMgbWVhbmlu
Z2xlc3MgZm9yIGdldHRpbmcgYSBjb2RlIG9mZnNldCB3aGVuIGNhdGNoaW5nCi0gICAgICAgIC8v
IHRoZSBleGNlcHRpb24gaW4gYSBERkcvRlRMIGZyYW1lLiBUaGlzIGJ5dGVjb2RlIHRhcmdldCBv
ZmZzZXQgY291bGQgYmUKLSAgICAgICAgLy8gc29tZXRoaW5nIHRoYXQncyBpbiBhbiBpbmxpbmVk
IGZyYW1lLCB3aGljaCBtZWFucyBhbiBhcnJheSBhY2Nlc3MKLSAgICAgICAgLy8gd2l0aCB0aGlz
IGJ5dGVjb2RlIG9mZnNldCBpbiB0aGUgbWFjaGluZSBmcmFtZSBpcyB1dHRlcmx5IG1lYW5pbmds
ZXNzCi0gICAgICAgIC8vIGFuZCBjYW4gY2F1c2UgYW4gb3ZlcmZsb3cuIE9TUiBleGl0IHByb3Bl
cmx5IGV4aXRzIHRvIGhhbmRsZXItPnRhcmdldAotICAgICAgICAvLyBpbiB0aGUgcHJvcGVyIGZy
YW1lLgotICAgICAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLT5qaXRUeXBlKCkpKQotICAgICAgICAgICAgY2F0Y2hQQ0ZvckludGVycHJldGVy
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoaGFuZGxlci0+dGFy
Z2V0KS5wdHIoKTsKKyAgICBpZiAoaGFuZGxlci5tX3ZhbGlkKSB7CisgICAgICAgIGNhdGNoUENG
b3JJbnRlcnByZXRlciA9IGhhbmRsZXIubV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXI7CiAjaWYgRU5B
QkxFKEpJVCkKLSAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci0+bmF0aXZlQ29kZS5leGVj
dXRhYmxlQWRkcmVzcygpOworICAgICAgICBjYXRjaFJvdXRpbmUgPSBoYW5kbGVyLm1fbmF0aXZl
Q29kZS5leGVjdXRhYmxlQWRkcmVzcygpOwogI2Vsc2UKICAgICAgICAgaWYgKGNhdGNoUENGb3JJ
bnRlcnByZXRlci0+aXNXaWRlMzIoKSkKICAgICAgICAgICAgIGNhdGNoUm91dGluZSA9IExMSW50
OjpnZXRXaWRlMzJDb2RlUHRyKGNhdGNoUENGb3JJbnRlcnByZXRlci0+b3Bjb2RlSUQoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKaW5kZXggN2NhMWI0ZTdj
M2ZkMDg0ZGQyN2FjMzg1MDZhYTljNmFlZDk1ZGViMC4uOTkyMjllNDk5MzE3YzEyYTFmMzRjYmVh
Y2RhZWM5MDE1MzgwOGFkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
U0ludGVyZmFjZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZh
Y2VKSVQuaApAQCAtNTcsNiArNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIg
ZW50cnkpOwogICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1
ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2VsbFRvQ2Fs
bEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKKyAg
ICAgICAgdm9pZCBjb252ZXJ0Q2FsbGVlVG9WTShSZWdpc3RlcklEIGNhbGxlZSk7CiAKICAgICAg
ICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQogCkBAIC0xNTgsNiArMTU5LDE5IEBA
IG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IEpTSW50ZXJmYWNlSklUOjpjb252ZXJ0Q2FsbGVlVG9WTShSZWdpc3RlcklEIGNhbGxlZSkKKyAg
ICB7CisgICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gYnJhbmNoVGVzdFB0cihD
Q2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
UHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgYW5kUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgY2FsbGVlKTsK
KyAgICAgICAgbG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlLCBNYXJrZWRCbG9j
azo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZzZXRPZlZNKCkpLCBj
YWxsZWUpOworICAgICAgICBhdXRvIGxvYWRlZENhc2UgPSBqdW1wKCk7CisKKyAgICAgICAgcHJl
Y2lzZUFsbG9jYXRpb25DYXNlLmxpbmsodGhpcyk7CisgICAgICAgIGxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGNhbGxlZSwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgp
ICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUo
KSksIGNhbGxlZSk7CisKKyAgICAgICAgbG9hZGVkQ2FzZS5saW5rKHRoaXMpOworICAgIH0KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCmluZGV4IDQ3MWZiNWQyZmQzYjgwOTM5NmE1MjNjZTMz
ZmNiMmE4NTk4MzZhY2IuLjM3YzFhZmU2ZGU3NmM4OTM1YWM3NDZkNjBmYjQ5N2QzMWU2ZTdjYTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgKQEAgLTMyMiw2ICszMjIs
MjQgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBnZXRXaWRlMzJD
b2RlUHRyKFdhc21PcGNvZGVJRCBvcGNvZGVJRCkKICNlbmRpZgogfQogCit0ZW1wbGF0ZTxQdHJU
YWcgdGFnPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPiBnZXRDb2Rl
UmVmKFdhc21PcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPHRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnZXRDb2RlUHRyPHRhZz4ob3Bj
b2RlSUQpKTsKK30KKwordGVtcGxhdGU8UHRyVGFnIHRhZz4KK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPHRhZz4gZ2V0V2lkZTE2Q29kZVJlZihXYXNtT3Bjb2RlSUQgb3Bjb2Rl
SUQpCit7CisgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+OjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoZ2V0V2lkZTE2Q29kZVB0cjx0YWc+KG9wY29kZUlEKSk7Cit9CisKK3Rl
bXBsYXRlPFB0clRhZyB0YWc+CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0
YWc+IGdldFdpZGUzMkNvZGVSZWYoV2FzbU9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdl
dFdpZGUzMkNvZGVQdHI8dGFnPihvcGNvZGVJRCkpOworfQorCiB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgogQUxXQVlTX0lOTElORSBMTEludENvZGUgZ2V0Q29kZUZ1bmN0aW9uUHRyKFdhc21PcGNvZGVJ
RCBvcGNvZGVJRCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludEV4Y2VwdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhj
ZXB0aW9ucy5jcHAKaW5kZXggYjkxM2VlZGFiMGM0MzBmYTc4NDYyOWJlMzA5MTI0MDBlNTY5OGMx
NC4uM2ZiYThkM2EwNWY0NDgyYmY3ZTMwMTNiNzNjMmM4MzAwNTlmNGQ3NiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAKQEAgLTQ5LDYgKzQ5
LDE4IEBAIEluc3RydWN0aW9uKiByZXR1cm5Ub1Rocm93KFZNJiB2bSkKICAgICByZXR1cm4gTExJ
bnQ6OmV4Y2VwdGlvbkluc3RydWN0aW9ucygpOwogfQogCitJbnN0cnVjdGlvbiogd2FzbVJldHVy
blRvVGhyb3coVk0mIHZtKQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7CisjaWYgTExJTlRfVFJB
Q0lORworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUxMSW50U2xvd1BhdGgoKSkpIHsK
KyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgICAgICBk
YXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgSlNWYWx1ZShzY29wZS5leGNlcHRpb24oKSks
ICIgKHJldHVyblRvVGhyb3cpLlxuIik7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIExMSW50
Ojp3YXNtRXhjZXB0aW9uSW5zdHJ1Y3Rpb25zKCk7Cit9CisKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBjYWxsVG9UaHJvdyhWTSYgdm0pCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHZtKTsKQEAgLTkyLDQgKzEwNCwzMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFuZGxlQ2F0Y2goT3Bjb2RlU2l6ZSBzaXplKQogICAg
IHJldHVybiB7fTsKIH0KIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+IGhhbmRsZVdhc21DYXRjaChPcGNvZGVTaXplIHNpemUpCit7CisgICAgc3dpdGNoIChz
aXplKSB7CisgICAgY2FzZSBPcGNvZGVTaXplOjpOYXJyb3c6CisgICAgICAgIHJldHVybiBMTElu
dDo6Z2V0Q29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPih3YXNtX2NhdGNoKTsKKyAgICBj
YXNlIE9wY29kZVNpemU6OldpZGUxNjoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRXaWRlMTZD
b2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KHdhc21fY2F0Y2gpOworICAgIGNhc2UgT3Bj
b2RlU2l6ZTo6V2lkZTMyOgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldFdpZGUzMkNvZGVSZWY8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4od2FzbV9jYXRjaCk7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGhhbmRsZVdhc21DYXRjaEFsbChPcGNv
ZGVTaXplIHNpemUpCit7CisgICAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSBPcGNvZGVTaXpl
OjpOYXJyb3c6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPih3YXNtX2NhdGNoX2FsbCk7CisgICAgY2FzZSBPcGNvZGVTaXplOjpXaWRlMTY6
CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0V2lkZTE2Q29kZVJlZjxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPih3YXNtX2NhdGNoX2FsbCk7CisgICAgY2FzZSBPcGNvZGVTaXplOjpXaWRlMzI6Cisg
ICAgICAgIHJldHVybiBMTEludDo6Z2V0V2lkZTMyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPih3YXNtX2NhdGNoX2FsbCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkxMSW50
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25z
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmgKaW5kZXgg
ODA2YjE5ZjY2MDU4NjZiODhjZTg0OTU4N2EwNDFhZGU0ZjM2ZDYyOS4uZGEwZTcwZDJmNWExMzA5
YmJlNWY0YmZlMWVhMzgwZjJkZTljOWZiNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludEV4Y2VwdGlvbnMuaApAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgTExJbnQg
ewogLy8gYmV0d2VlbiAxIGFuZCA5IHNsb3RzIHdpbGwgZ2l2ZSB5b3UgYW4gImluc3RydWN0aW9u
IiB0aGF0IHRocmVhZHMgdG8gdGhlCiAvLyBpbnRlcnByZXRlcidzIGV4Y2VwdGlvbiBoYW5kbGVy
LgogSW5zdHJ1Y3Rpb24qIHJldHVyblRvVGhyb3coVk0mKTsKK0luc3RydWN0aW9uKiB3YXNtUmV0
dXJuVG9UaHJvdyhWTSYpOwogCiAvLyBVc2UgdGhpcyB3aGVuIHlvdSdyZSB0aHJvd2luZyB0byBh
IGNhbGwgdGh1bmsuCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRh
Zz4gY2FsbFRvVGhyb3coVk0mKTsKQEAgLTQ5LDQgKzUwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGNhbGxUb1Rocm93KFZNJik7CiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFuZGxlVW5jYXVnaHRFeGNlcHRp
b24oVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBo
YW5kbGVDYXRjaChPcGNvZGVTaXplKTsKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+IGhhbmRsZVdhc21DYXRjaChPcGNvZGVTaXplKTsKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5kbGVXYXNtQ2F0Y2hBbGwoT3Bj
b2RlU2l6ZSk7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAppbmRleCA2
ZGY0Njg1MGUyYzdlYjk2ODk4ZWM0YzU3ZmNiNzdkZDg3NWQyZDUwLi5iMmNhYTE4NTQxMzBmZjhi
OTMxODA3NmQyN2RmZWJkZDIxMzM4NDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcApAQCAtNTMsNiArNTMsNyBAQAog
I2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkpTU3RyaW5n
LmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0
YW5jZS5oIgogI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgog
I2luY2x1ZGUgIkxMSW50T2ZmbGluZUFzbUNvbmZpZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9XZWJBc3NlbWJseS5hc20KaW5kZXggNDM2Y2Y2NjQ5MGQ3MWM1ZWU5YmIzMGU4NmZl
NmY0MmJhZWU3NmRmMS4uZmU5ODljODNhMTEwYjFjODM4NzQzZjk3MzJjOWEyYmNlNWFmZDU2ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCkBAIC0yNTYs
NiArMjU2LDcgQEAgbWFjcm8gdGhyb3dFeGNlcHRpb24oZXhjZXB0aW9uKQogZW5kCiAKIG1hY3Jv
IGNhbGxXYXNtU2xvd1BhdGgoc2xvd1BhdGgpCisgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdCiAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwo
KQogICAgIG1vdmUgY2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCkBAIC0yNzQsNiArMjc1LDE0IEBA
IG1hY3JvIGNhbGxXYXNtQ2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCiAgICAgYWN0aW9u
KHIwLCByMSkKIGVuZAogCittYWNybyByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKKyAg
ICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgd3MxCisgICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2Rl
QmxvY2s6Om1fbnVtQ2FsbGVlTG9jYWxzW3dzMV0sIHdzMQorICAgIGxzaGlmdHAgMywgd3MxCisg
ICAgYWRkcCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCwgd3MxCisgICAgc3VicCBjZnIs
IHdzMSwgc3AKK2VuZAorCiBtYWNybyB3YXNtUHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2Rl
QmxvY2tTZXR0ZXIsIGxvYWRXYXNtSW5zdGFuY2UpCiAgICAgIyBTZXQgdXAgdGhlIGNhbGwgZnJh
bWUgYW5kIGNoZWNrIGlmIHdlIHNob3VsZCBPU1IuCiAgICAgcHJlc2VydmVDYWxsZXJQQ0FuZENG
UigpCkBAIC0yODEsNiArMjkwLDkgQEAgbWFjcm8gd2FzbVByb2xvZ3VlKGNvZGVCbG9ja0dldHRl
ciwgY29kZUJsb2NrU2V0dGVyLCBsb2FkV2FzbUluc3RhbmNlKQogICAgIGxvYWRXYXNtSW5zdGFu
Y2UoKQogICAgIHJlbG9hZE1lbW9yeVJlZ2lzdGVyc0Zyb21JbnN0YW5jZSh3YXNtSW5zdGFuY2Us
IHdzMCwgd3MxKQogCisgICAgbG9hZHAgV2FzbTo6SW5zdGFuY2U6Om1fb3duZXJbd2FzbUluc3Rh
bmNlXSwgd3MwCisgICAgc3RvcmVwIHdzMCwgVGhpc0FyZ3VtZW50T2Zmc2V0W2Nmcl0KKwogICAg
IGNvZGVCbG9ja0dldHRlcih3czApCiAgICAgY29kZUJsb2NrU2V0dGVyKHdzMCkKIApAQCAtMzMz
LDE1ICszNDUsMTkgQEAgbWFjcm8gdHJhY2VFeGVjdXRpb24oKQogICAgIGVuZAogZW5kCiAKLSMg
TGVzcyBjb252ZW5pZW50LCBidXQgcmVxdWlyZWQgZm9yIG9wY29kZXMgdGhhdCBjb2xsaWRlIHdp
dGggcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb25zIChlLmcuIHdhc21fbm9wKQotbWFjcm8gdW5wcmVmaXhl
ZFdhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGZuKQotICAgIGNvbW1vbk9wKG9wY29k
ZU5hbWUsIHRyYWNlRXhlY3V0aW9uLCBtYWNybyhzaXplKQorbWFjcm8gY29tbW9uV2FzbU9wKG9w
Y29kZU5hbWUsIG9wY29kZVN0cnVjdCwgcHJvbG9ndWUsIGZuKQorICAgIGNvbW1vbk9wKG9wY29k
ZU5hbWUsIHByb2xvZ3VlLCBtYWNybyhzaXplKQogICAgICAgICBmbihtYWNybyhmbjIpCiAgICAg
ICAgICAgICBmbjIob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBzaXplKQogICAgICAgICBlbmQp
CiAgICAgZW5kKQogZW5kCiAKKyMgTGVzcyBjb252ZW5pZW50LCBidXQgcmVxdWlyZWQgZm9yIG9w
Y29kZXMgdGhhdCBjb2xsaWRlIHdpdGggcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb25zIChlLmcuIHdhc21f
bm9wKQorbWFjcm8gdW5wcmVmaXhlZFdhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGZu
KQorICAgIGNvbW1vbldhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHRyYWNlRXhlY3V0
aW9uLCBmbikKK2VuZAorCiBtYWNybyB3YXNtT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBm
bikKICAgICB1bnByZWZpeGVkV2FzbU9wKHdhc21fJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3Qs
IGZuKQogZW5kCkBAIC01MTIsNiArNTI4LDE2IEBAIG9wKHdhc21fZnVuY3Rpb25fcHJvbG9ndWVf
bm9fdGxzLCBtYWNybyAoKQogICAgIHdhc21OZXh0SW5zdHJ1Y3Rpb24oKQogZW5kKQogCittYWNy
byBqdW1wVG9FeGNlcHRpb24oKQorICAgIGlmIEFSTTY0RQorICAgICAgICBtb3ZlIHIwLCBhMAor
ICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmln
R2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6ZXhjZXB0aW9uSGFuZGxlcikgKiBQdHJTaXplLCBh
MQorICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgRXhjZXB0aW9uSGFu
ZGxlclB0clRhZworICAgIGVsc2UKKyAgICAgICAgam1wIHIwLCBFeGNlcHRpb25IYW5kbGVyUHRy
VGFnCisgICAgZW5kCitlbmQKKwogb3Aod2FzbV90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9s
aW5lLCBtYWNybyAoKQogICAgIGxvYWRwIFdhc206Okluc3RhbmNlOjptX3BvaW50ZXJUb1RvcEVu
dHJ5RnJhbWVbd2FzbUluc3RhbmNlXSwgdDUKICAgICBsb2FkcCBbdDVdLCB0NQpAQCAtNTIzLDE0
ICs1NDksNyBAQCBvcCh3YXNtX3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUsIG1hY3Jv
ICgpCiAgICAgIyBTbG93IHBhdGhzIGFuZCB0aGUgdGhyb3dFeGNlcHRpb24gbWFjcm8gc3RvcmUg
dGhlIGV4Y2VwdGlvbiBjb2RlIGluIHRoZSBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyBzbG90
CiAgICAgbG9hZGkgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBQYXlsb2FkT2Zmc2V0W2Nm
cl0sIGEzCiAgICAgY0NhbGw0KF9zbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24pCi0KLSAg
ICBpZiBBUk02NEUKLSAgICAgICAgbW92ZSByMCwgYTAKLSAgICAgICAgbGVhcCBKU0NDb25maWcg
KyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdh
dGU6OmV4Y2VwdGlvbkhhbmRsZXIpICogUHRyU2l6ZSwgYTEKLSAgICAgICAgam1wIFthMV0sIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZyAjIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLSAgICBlbHNlCi0g
ICAgICAgIGptcCByMCwgRXhjZXB0aW9uSGFuZGxlclB0clRhZwotICAgIGVuZAorICAgIGp1bXBU
b0V4Y2VwdGlvbigpCiBlbmQpCiAKIG1hY3JvIHdhc21fdGhyb3dfZnJvbV9mYXVsdF9oYW5kbGVy
KGluc3RhbmNlKQpAQCAtNTQzLDE0ICs1NjIsNyBAQCBtYWNybyB3YXNtX3Rocm93X2Zyb21fZmF1
bHRfaGFuZGxlcihpbnN0YW5jZSkKICAgICBtb3ZlIDAsIGExCiAgICAgbW92ZSBjZnIsIGEwCiAg
ICAgY0NhbGw0KF9zbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24pCi0KLSAgICBpZiBBUk02
NEUKLSAgICAgICAgbW92ZSByMCwgYTAKLSAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4
cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OmV4Y2Vw
dGlvbkhhbmRsZXIpICogUHRyU2l6ZSwgYTEKLSAgICAgICAgam1wIFthMV0sIE5hdGl2ZVRvSklU
R2F0ZVB0clRhZyAjIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLSAgICBlbHNlCi0gICAgICAgIGpt
cCByMCwgRXhjZXB0aW9uSGFuZGxlclB0clRhZwotICAgIGVuZAorICAgIGp1bXBUb0V4Y2VwdGlv
bigpCiBlbmQKIAogb3Aod2FzbV90aHJvd19mcm9tX2ZhdWx0X2hhbmRsZXJfdHJhbXBvbGluZV9m
YXN0VExTLCBtYWNybyAoKQpAQCAtNzcwLDExICs3ODIsMTEgQEAgbWFjcm8gc2xvd1BhdGhGb3JX
YXNtQ2FsbChjdHgsIHNsb3dQYXRoLCBzdG9yZVdhc21JbnN0YW5jZSkKIAogICAgICAgICAgICAg
IyBMb2FkIHJlZ2lzdGVycyBmcm9tIHN0YWNrCiAgICAgICAgICAgICBmb3JFYWNoQXJndW1lbnRH
UFIobWFjcm8gKG9mZnNldCwgZ3ByKQotICAgICAgICAgICAgICAgIGxvYWRxIENhbGxGcmFtZUhl
YWRlclNpemUgKyBvZmZzZXRbc3AsIHdzMSwgOF0sIGdwcgorICAgICAgICAgICAgICAgIGxvYWRx
IENhbGxGcmFtZUhlYWRlclNpemUgKyA4ICsgb2Zmc2V0W3NwLCB3czEsIDhdLCBncHIKICAgICAg
ICAgICAgIGVuZCkKIAogICAgICAgICAgICAgZm9yRWFjaEFyZ3VtZW50RlBSKG1hY3JvIChvZmZz
ZXQsIGZwcikKLSAgICAgICAgICAgICAgICBsb2FkZCBDYWxsRnJhbWVIZWFkZXJTaXplICsgb2Zm
c2V0W3NwLCB3czEsIDhdLCBmcHIKKyAgICAgICAgICAgICAgICBsb2FkZCBDYWxsRnJhbWVIZWFk
ZXJTaXplICsgOCArIG9mZnNldFtzcCwgd3MxLCA4XSwgZnByCiAgICAgICAgICAgICBlbmQpCiAK
ICAgICAgICAgICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCkBAIC04MTEsMTEgKzgy
Myw3IEBAIG1hY3JvIHNsb3dQYXRoRm9yV2FzbUNhbGwoY3R4LCBzbG93UGF0aCwgc3RvcmVXYXNt
SW5zdGFuY2UpCiAgICAgICAgICAgICAgICAgZGVmaW5lUmV0dXJuTGFiZWwob3Bjb2RlTmFtZSwg
c2l6ZSkKICAgICAgICAgICAgIGVuZCkKIAotICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nm
cl0sIHdzMQotICAgICAgICAgICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1fbnVt
Q2FsbGVlTG9jYWxzW3dzMV0sIHdzMQotICAgICAgICAgICAgbHNoaWZ0cCAzLCB3czEKLSAgICAg
ICAgICAgIGFkZHAgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwsIHdzMQotICAgICAgICAg
ICAgc3VicCBjZnIsIHdzMSwgc3AKKyAgICAgICAgICAgIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRl
ckNhbGwoKQogCiAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gc2V0IFBDIHRvIGxvYWQgaW5mb3Jt
YXRpb24gZnJvbSB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLCBidXQgd2UKICAgICAgICAgICAgICMg
bmVlZCB0byBwcmVzZXJ2ZSBpdHMgY3VycmVudCB2YWx1ZSBzaW5jZSBpdCBtaWdodCBjb250YWlu
IGEgcmV0dXJuIHZhbHVlCkBAIC04MzYsMTEgKzg0NCwxMSBAQCBtYWNybyBzbG93UGF0aEZvcldh
c21DYWxsKGN0eCwgc2xvd1BhdGgsIHN0b3JlV2FzbUluc3RhbmNlKQogICAgICAgICAgICAgd2dl
dHUoY3R4LCBtX251bWJlck9mU3RhY2tBcmdzLCB3czApCiAgICAgICAgICAgICBtb3ZlIG1lbW9y
eUJhc2UsIFBDCiAgICAgICAgICAgICBmb3JFYWNoQXJndW1lbnRHUFIobWFjcm8gKG9mZnNldCwg
Z3ByKQotICAgICAgICAgICAgICAgIHN0b3JlcSBncHIsIENhbGxGcmFtZUhlYWRlclNpemUgKyBv
ZmZzZXRbd3MxLCB3czAsIDhdCisgICAgICAgICAgICAgICAgc3RvcmVxIGdwciwgQ2FsbEZyYW1l
SGVhZGVyU2l6ZSArIDggKyBvZmZzZXRbd3MxLCB3czAsIDhdCiAgICAgICAgICAgICBlbmQpCiAK
ICAgICAgICAgICAgIGZvckVhY2hBcmd1bWVudEZQUihtYWNybyAob2Zmc2V0LCBmcHIpCi0gICAg
ICAgICAgICAgICAgc3RvcmVkIGZwciwgQ2FsbEZyYW1lSGVhZGVyU2l6ZSArIG9mZnNldFt3czEs
IHdzMCwgOF0KKyAgICAgICAgICAgICAgICBzdG9yZWQgZnByLCBDYWxsRnJhbWVIZWFkZXJTaXpl
ICsgOCArIG9mZnNldFt3czEsIHdzMCwgOF0KICAgICAgICAgICAgIGVuZCkKIAogICAgICAgICAg
ICAgbG9hZGkgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2ZyXSwgUEMK
QEAgLTI4MDQsMyArMjgxMiwxMTQgQEAgd2FzbU9wKGF0b21pY19mZW5jZSwgV2FzbURyb3BLZWVw
LCBtYWNybyhjdHgpCiAgICAgZmVuY2UKICAgICBkaXNwYXRjaChjdHgpCiBlbmQpCisKK3dhc21P
cCh0aHJvdywgV2FzbVRocm93LCBtYWNybyhjdHgpCisgICAgbG9hZHAgV2FzbTo6SW5zdGFuY2U6
Om1fcG9pbnRlclRvVG9wRW50cnlGcmFtZVt3YXNtSW5zdGFuY2VdLCB0NQorICAgIGxvYWRwIFt0
NV0sIHQ1CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dDUpCisKKyAgICBjYWxsV2FzbVNsb3dQYXRoKF9zbG93X3BhdGhfd2FzbV90aHJvdykKKyAgICBq
dW1wVG9FeGNlcHRpb24oKQorZW5kKQorCit3YXNtT3AocmV0aHJvdywgV2FzbVJldGhyb3csIG1h
Y3JvKGN0eCkKKyAgICBjYWxsV2FzbVNsb3dQYXRoKF9zbG93X3BhdGhfd2FzbV9yZXRocm93KQor
ICAgIGp1bXBUb0V4Y2VwdGlvbigpCitlbmQpCisKK21hY3JvIGNhdGNoSW1wbChjdHgsIHN0b3Jl
V2FzbUluc3RhbmNlKQorICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MworICAgIGNvbnZlcnRDYWxs
ZWVUb1ZNKHQzKQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih0MywgdDApCisKKyAgICBsb2FkcCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoW3Qz
XSwgd3MxCisgICAgc3RvcmVwIDAsIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hbdDNdCisgICAgc3Rv
cmVwIHdzMSwgQ2FsbGVlW2Nmcl0KKworICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JDYXRjaFt0
M10sIGNmcgorICAgIHN0b3JlcCAwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hbdDNdCisKKyAgICBy
ZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKKworICAgIGxvYWRwIFRoaXNBcmd1bWVudE9m
ZnNldFtjZnJdLCB3YXNtSW5zdGFuY2UKKyAgICBsb2FkcCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om1faW5zdGFuY2Vbd2FzbUluc3RhbmNlXSwgd2FzbUluc3RhbmNlCisgICAgc3RvcmVXYXNtSW5z
dGFuY2Uod2FzbUluc3RhbmNlKQorICAgIHJlbG9hZE1lbW9yeVJlZ2lzdGVyc0Zyb21JbnN0YW5j
ZSh3YXNtSW5zdGFuY2UsIHdzMCwgd3MxKQorCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBC
CisgICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zUmF3UG9p
bnRlcltQQl0sIFBCCisgICAgbG9hZHAgVk06OnRhcmdldEludGVycHJldGVyUENGb3JUaHJvd1t0
M10sIFBDCisgICAgc3VicCBQQiwgUEMKKworICAgIGNhbGxXYXNtU2xvd1BhdGgoX3Nsb3dfcGF0
aF93YXNtX3JldHJpZXZlX2FuZF9jbGVhcl9leGNlcHRpb24pCisgICAgbW92ZSByMSwgdDEKKwor
ICAgIHdnZXR1KGN0eCwgbV9zdGFydE9mZnNldCwgdDIpCisgICAgd2dldHUoY3R4LCBtX2FyZ3Vt
ZW50Q291bnQsIHQzKQorCisgICAgbHNoaWZ0aSAzLCB0MgorICAgIHN1YnAgY2ZyLCB0MiwgdDIK
KworLmNvcHlMb29wOgorICAgIGJ0aXogdDMsIC5kb25lCisgICAgbG9hZHEgW3QxXSwgdDYKKyAg
ICBzdG9yZXEgdDYsIFt0Ml0KKyAgICBzdWJpIDEsIHQzCisgICAgIyBGSVhNRTogVXNlIGFybSBz
dG9yZS1hZGQvc3ViIGluc3RydWN0aW9ucyBpbiB3YXNtIExMSW50IGNhdGNoCisgICAgIyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjEwCisgICAgc3VicCA4LCB0
MgorICAgIGFkZHAgOCwgdDEKKyAgICBqbXAgLmNvcHlMb29wCisKKy5kb25lOgorICAgIHRyYWNl
RXhlY3V0aW9uKCkKKworICAgIGRpc3BhdGNoKGN0eCkKK2VuZAorCitjb21tb25XYXNtT3Aod2Fz
bV9jYXRjaCwgV2FzbUNhdGNoLCBtYWNybygpIGVuZCwgbWFjcm8oY3R4KQorICAgIGNhdGNoSW1w
bChjdHgsIHN0b3JlV2FzbUluc3RhbmNlVG9UTFMpCitlbmQpCisKK2NvbW1vbldhc21PcCh3YXNt
X2NhdGNoX25vX3RscywgV2FzbUNhdGNoLCBtYWNybygpIGVuZCwgbWFjcm8oY3R4KQorICAgIGNh
dGNoSW1wbChjdHgsIG1hY3JvKGluc3RhbmNlKSBlbmQpCitlbmQpCisKK21hY3JvIGNhdGNoQWxs
SW1wbChjdHgsIHN0b3JlV2FzbUluc3RhbmNlKQorICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0Mwor
ICAgIGNvbnZlcnRDYWxsZWVUb1ZNKHQzKQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0MywgdDApCisKKyAgICBsb2FkcCBWTTo6Y2FsbGVl
Rm9yV2FzbUNhdGNoW3QzXSwgd3MxCisgICAgc3RvcmVwIDAsIFZNOjpjYWxsZWVGb3JXYXNtQ2F0
Y2hbdDNdCisgICAgc3RvcmVwIHdzMSwgQ2FsbGVlW2Nmcl0KKworICAgIGxvYWRwIFZNOjpjYWxs
RnJhbWVGb3JDYXRjaFt0M10sIGNmcgorICAgIHN0b3JlcCAwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0
Y2hbdDNdCisKKyAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKKworICAgIGxvYWRw
IFRoaXNBcmd1bWVudE9mZnNldFtjZnJdLCB3YXNtSW5zdGFuY2UKKyAgICBsb2FkcCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Om1faW5zdGFuY2Vbd2FzbUluc3RhbmNlXSwgd2FzbUluc3RhbmNlCisg
ICAgc3RvcmVXYXNtSW5zdGFuY2Uod2FzbUluc3RhbmNlKQorICAgIHJlbG9hZE1lbW9yeVJlZ2lz
dGVyc0Zyb21JbnN0YW5jZSh3YXNtSW5zdGFuY2UsIHdzMCwgd3MxKQorCisgICAgbG9hZHAgQ29k
ZUJsb2NrW2Nmcl0sIFBCCisgICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1faW5z
dHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCisgICAgbG9hZHAgVk06OnRhcmdldEludGVycHJl
dGVyUENGb3JUaHJvd1t0M10sIFBDCisgICAgc3VicCBQQiwgUEMKKworICAgIGNhbGxXYXNtU2xv
d1BhdGgoX3Nsb3dfcGF0aF93YXNtX3JldHJpZXZlX2FuZF9jbGVhcl9leGNlcHRpb24pCisKKyAg
ICB0cmFjZUV4ZWN1dGlvbigpCisKKyAgICBkaXNwYXRjaChjdHgpCitlbmQKKworY29tbW9uV2Fz
bU9wKHdhc21fY2F0Y2hfYWxsLCBXYXNtQ2F0Y2hBbGwsIG1hY3JvKCkgZW5kLCBtYWNybyhjdHgp
CisgICAgY2F0Y2hBbGxJbXBsKGN0eCwgc3RvcmVXYXNtSW5zdGFuY2VUb1RMUykKK2VuZCkKKwor
Y29tbW9uV2FzbU9wKHdhc21fY2F0Y2hfYWxsX25vX3RscywgV2FzbUNhdGNoQWxsLCBtYWNybygp
IGVuZCwgbWFjcm8oY3R4KQorICAgIGNhdGNoQWxsSW1wbChjdHgsIG1hY3JvKGluc3RhbmNlKSBl
bmQpCitlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ckluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFu
Y2UuY3BwCmluZGV4IGRmYjkzMTg4YzA4ZmQ4ZGJhZDNiZjdmODVlMTg1MmI1MjQwNmI1ZDYuLjFl
YjNlNWNlZWFmZmQwMzUzODY1OTM5ZDRlNTllYmE1NzkxZmEwZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCkBAIC00MCw2ICs0MCw3IEBA
IEVycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgRXJyb3JUeXBlIGVycm9yVHlwZSkKICAgICAsIG1fb3V0T2ZNZW1vcnlFcnJvcihmYWxzZSkK
ICAgICAsIG1fZXJyb3JJbmZvTWF0ZXJpYWxpemVkKGZhbHNlKQogICAgICwgbV9uYXRpdmVHZXR0
ZXJUeXBlRXJyb3IoZmFsc2UpCisgICAgLCBtX2NhdGNoYWJsZUZyb21XYXNtKHRydWUpCiB7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFu
Y2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAppbmRl
eCA3ZDJlNjQzMjZhODFkYjZjNzcwYTQ2M2Q4Zjk2Mzc2NzNkZmIyOTNiLi5lZmY1ZTk4NzI0Yjkw
NjIxYjE4MjIwMjlhMDk1MDZiOWM3OTllMWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCkBAIC04MCw2ICs4MCwxMSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXROYXRpdmVHZXR0ZXJUeXBlRXJyb3IoKSB7IG1fbmF0aXZlR2V0dGVyVHlwZUVycm9y
ID0gdHJ1ZTsgfQogICAgIGJvb2wgaXNOYXRpdmVHZXR0ZXJUeXBlRXJyb3IoKSBjb25zdCB7IHJl
dHVybiBtX25hdGl2ZUdldHRlclR5cGVFcnJvcjsgfQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorICAgIHZvaWQgc2V0Q2F0Y2hhYmxlRnJvbVdhc20oYm9vbCBmbGFnKSB7IG1fY2F0Y2hhYmxl
RnJvbVdhc20gPSBmbGFnOyB9CisgICAgYm9vbCBpc0NhdGNoYWJsZUZyb21XYXNtKCkgY29uc3Qg
eyByZXR1cm4gbV9jYXRjaGFibGVGcm9tV2FzbTsgfQorI2VuZGlmCisKICAgICBKU19FWFBPUlRf
UFJJVkFURSBTdHJpbmcgc2FuaXRpemVkVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc2FuaXRpemVkTWVzc2FnZVN0cmluZyhKU0dsb2JhbE9i
amVjdCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzYW5pdGl6ZWROYW1lU3RyaW5n
KEpTR2xvYmFsT2JqZWN0Kik7CkBAIC0xMTYsNiArMTIxLDkgQEAgcHJvdGVjdGVkOgogICAgIGJv
b2wgbV9vdXRPZk1lbW9yeUVycm9yIDogMTsKICAgICBib29sIG1fZXJyb3JJbmZvTWF0ZXJpYWxp
emVkIDogMTsKICAgICBib29sIG1fbmF0aXZlR2V0dGVyVHlwZUVycm9yIDogMTsKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisgICAgYm9vbCBtX2NhdGNoYWJsZUZyb21XYXNtIDogMTsKKyNlbmRp
ZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggMjk3ZmNkNjk4ZmZiYTk0Yjc3MjZkZTY3
ZDE5YjI0MjU5NzAzYTMyYi4uMzE5ZTRiM2Q4YWIxODMwMDYwZjIyNTc2MWExOTJiY2NiODA0Mzdk
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcApAQCAtMTUzLDYgKzE1Myw3IEBACiAjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCiAjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3Iu
aCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUdsb2JhbC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKQEAgLTE2MCw2ICsxNjEsNyBAQAogI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVu
dGltZUVycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCisjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseVRhZy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAi
TGF6eUNsYXNzU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIkxhenlQcm9wZXJ0eUlubGlu
ZXMuaCIKQEAgLTIyMCw2ICsyMjIsOCBAQAogI2luY2x1ZGUgIldlYWtTZXRQcm90b3R5cGUuaCIK
ICNpbmNsdWRlICJXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3Nl
bWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlFeGNlcHRp
b25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5
R2xvYmFsUHJvdG90eXBlLmgiCkBAIC0yMzYsNiArMjQwLDggQEAKICNpbmNsdWRlICJXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCIKKyNp
bmNsdWRlICJXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1i
bHlUYWdQcm90b3R5cGUuaCIKICNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVk
ZSA8d3RmL1N5c3RlbVRyYWNpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggOTYxYzI0N2U5YTc5MmExYWZlNmM5Yzk4OTQwNzZm
MTRmNzA4MmRlYS4uMWJkY2M0ZGU3NGQwOTI0ZDM5Yzg0Zjk1MjVjNWUwYjNlNmFmNDEwZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC0x
NjksMTQgKzE2OSwxNiBAQCBjb25zdGV4cHIgYm9vbCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCA9IHRy
dWU7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAjZGVmaW5lIEZPUl9FQUNIX1dFQkFTU0VN
QkxZX0NPTlNUUlVDVE9SX1RZUEUobWFjcm8pIFwKLSAgICBtYWNybyhXZWJBc3NlbWJseUNvbXBp
bGVFcnJvciwgd2ViQXNzZW1ibHlDb21waWxlRXJyb3IsIHdlYkFzc2VtYmx5Q29tcGlsZUVycm9y
LCBFcnJvckluc3RhbmNlLCAgICAgICAgICAgICBDb21waWxlRXJyb3IsIGVycm9yLCB0eXBlRXhw
b3NlZEJ5RGVmYXVsdCkgXAorICAgIG1hY3JvKFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yLCB3ZWJB
c3NlbWJseUNvbXBpbGVFcnJvciwgd2ViQXNzZW1ibHlDb21waWxlRXJyb3IsIEVycm9ySW5zdGFu
Y2UsICAgICAgICAgICAgIENvbXBpbGVFcnJvciwgZXJyb3IsICB0eXBlRXhwb3NlZEJ5RGVmYXVs
dCkgXAorICAgIG1hY3JvKFdlYkFzc2VtYmx5RXhjZXB0aW9uLCAgICB3ZWJBc3NlbWJseUV4Y2Vw
dGlvbiwgICAgd2ViQXNzZW1ibHlFeGNlcHRpb24sICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24s
ICAgIEV4Y2VwdGlvbiwgICAgb2JqZWN0LCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAogICAgIG1h
Y3JvKFdlYkFzc2VtYmx5R2xvYmFsLCAgICAgICB3ZWJBc3NlbWJseUdsb2JhbCwgICAgICAgd2Vi
QXNzZW1ibHlHbG9iYWwsICAgICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwsICAgICAgIEdsb2JhbCwg
ICAgICAgb2JqZWN0LCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAogICAgIG1hY3JvKFdlYkFzc2Vt
Ymx5SW5zdGFuY2UsICAgICB3ZWJBc3NlbWJseUluc3RhbmNlLCAgICAgd2ViQXNzZW1ibHlJbnN0
YW5jZSwgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgICAgIEluc3RhbmNlLCAgICAgb2JqZWN0
LCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAotICAgIG1hY3JvKFdlYkFzc2VtYmx5TGlua0Vycm9y
LCAgICB3ZWJBc3NlbWJseUxpbmtFcnJvciwgICAgd2ViQXNzZW1ibHlMaW5rRXJyb3IsICAgIEVy
cm9ySW5zdGFuY2UsICAgICAgICAgICAgIExpbmtFcnJvciwgICAgZXJyb3IsIHR5cGVFeHBvc2Vk
QnlEZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlMaW5rRXJyb3IsICAgIHdlYkFzc2Vt
Ymx5TGlua0Vycm9yLCAgICB3ZWJBc3NlbWJseUxpbmtFcnJvciwgICAgRXJyb3JJbnN0YW5jZSwg
ICAgICAgICAgICAgTGlua0Vycm9yLCAgICBlcnJvciwgIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBc
CiAgICAgbWFjcm8oV2ViQXNzZW1ibHlNZW1vcnksICAgICAgIHdlYkFzc2VtYmx5TWVtb3J5LCAg
ICAgICB3ZWJBc3NlbWJseU1lbW9yeSwgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSwgICAgICAg
TWVtb3J5LCAgICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCiAgICAgbWFjcm8o
V2ViQXNzZW1ibHlNb2R1bGUsICAgICAgIHdlYkFzc2VtYmx5TW9kdWxlLCAgICAgICB3ZWJBc3Nl
bWJseU1vZHVsZSwgICAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSwgICAgICAgTW9kdWxlLCAgICAg
ICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCi0gICAgbWFjcm8oV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVudGltZUVycm9yLCB3ZWJBc3NlbWJseVJ1bnRpbWVF
cnJvciwgRXJyb3JJbnN0YW5jZSwgICAgICAgICAgICAgUnVudGltZUVycm9yLCBlcnJvciwgdHlw
ZUV4cG9zZWRCeURlZmF1bHQpIFwKLSAgICBtYWNybyhXZWJBc3NlbWJseVRhYmxlLCAgICAgICAg
d2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIHdlYkFzc2VtYmx5VGFibGUsICAgICAgICBKU1dlYkFz
c2VtYmx5VGFibGUsICAgICAgICBUYWJsZSwgICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURl
ZmF1bHQpCisgICAgbWFjcm8oV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVu
dGltZUVycm9yLCB3ZWJBc3NlbWJseVJ1bnRpbWVFcnJvciwgRXJyb3JJbnN0YW5jZSwgICAgICAg
ICAgICAgUnVudGltZUVycm9yLCBlcnJvciwgIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCisgICAg
bWFjcm8oV2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIHdlYkFzc2VtYmx5VGFibGUsICAgICAgICB3
ZWJBc3NlbWJseVRhYmxlLCAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlLCAgICAgICAgVGFibGUs
ICAgICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNz
ZW1ibHlUYWcsICAgICAgICAgIHdlYkFzc2VtYmx5VGFnLCAgICAgICAgICB3ZWJBc3NlbWJseVRh
ZywgICAgICAgICAgSlNXZWJBc3NlbWJseVRhZywgICAgICAgICAgVGFnLCAgICAgICAgICBvYmpl
Y3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSAKICNlbHNlCiAjZGVmaW5lIEZPUl9FQUNIX1dFQkFT
U0VNQkxZX0NPTlNUUlVDVE9SX1RZUEUobWFjcm8pCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKaW5kZXgg
NTQwMWZmMzgzMWQ4NjUwNzE1NWIxOTMyNGJlMzk3ZmZiZDMzZDkzNC4uZTA3ODMzZjQ3YWJjMWE0
YjA5MjQyMTVjNTc1N2JmNmViZGU1NjQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCkBAIC01NDMsNiArNTQzLDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3Nl
bWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZVRlbXBvcmFsLCBmYWxzZSwgTm9ybWFs
LCAiRXhwb3NlIHRoZSBUZW1wb3JhbCBvYmplY3QuIikgXAogICAgIHYoQm9vbCwgdXNlV2ViQXNz
ZW1ibHlUaHJlYWRpbmcsIHRydWUsIE5vcm1hbCwgIkFsbG93IGluc3RydWN0aW9ucyBmcm9tIHRo
ZSB3YXNtIHRocmVhZGluZyBzcGVjLiIpIFwKICAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5VHlw
ZWRGdW5jdGlvblJlZmVyZW5jZXMsIGZhbHNlLCBOb3JtYWwsICJBbGxvdyBmdW5jdGlvbiB0eXBl
cyBmcm9tIHRoZSB3YXNtIHR5cGVkIGZ1bmN0aW9uIHJlZmVyZW5jZXMgc3BlYy4iKSBcCisgICAg
dihCb29sLCB1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMsIHRydWUsIE5vcm1hbCwgIkFsbG93IHRo
ZSBuZXcgc2VjdGlvbiBhbmQgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHdhc20gZXhjZXB0aW9uIGhh
bmRsaW5nIHNwZWMuIikgXAogCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDk5NmEwNmRhYWJhODJjY2VmYjQzZGYzZjY1ZjEz
MWU2ZmRlNmVlMDcuLjM4ZTk1MTI5YmE5ZjAyMTEwYTFjNDNlMDUxYzRhYTY3OGM2ZmQwZDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTEyOSwxMSArMTI5LDEzIEBACiAj
aW5jbHVkZSAiSlNXZWFrT2JqZWN0UmVmLmgiCiAjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlF
eGNlcHRpb24uaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5R2xvYmFsLmgiCiAjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5o
IgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5VGFibGUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiSlNX
aXRoU2NvcGUuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJNaW5pbXVtUmVz
ZXJ2ZWRab25lU2l6ZS5oIgpAQCAtMzM0LDYgKzMzNiw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBl
LCBIZWFwVHlwZSBoZWFwVHlwZSwgV1RGOjpSdW5Mb29wKiBydW5Mb29wLCBib29sKiBzdWNjZXNz
KQogICAgICwgaW50bFNlZ21lbnRzSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRl
PEludGxTZWdtZW50cz4oKSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgLCB3ZWJBc3Nl
bWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrPigpKQorICAgICwgd2ViQXNzZW1ibHlFeGNlcHRpb25IZWFwQ2VsbFR5
cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseUV4Y2VwdGlvbj4oKSkKICAg
ICAsIHdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVh
dGU8V2ViQXNzZW1ibHlGdW5jdGlvbj4oKSkKICAgICAsIHdlYkFzc2VtYmx5R2xvYmFsSGVhcENl
bGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEpTV2ViQXNzZW1ibHlHbG9iYWw+KCkpCiAg
ICAgLCB3ZWJBc3NlbWJseUluc3RhbmNlSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3Jl
YXRlPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKSkKQEAgLTM0MSw2ICszNDQsNyBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUsIFdURjo6UnVuTG9vcCogcnVuTG9vcCwg
Ym9vbCogc3VjY2VzcykKICAgICAsIHdlYkFzc2VtYmx5TW9kdWxlSGVhcENlbGxUeXBlKElzb0hl
YXBDZWxsVHlwZTo6Y3JlYXRlPEpTV2ViQXNzZW1ibHlNb2R1bGU+KCkpCiAgICAgLCB3ZWJBc3Nl
bWJseU1vZHVsZVJlY29yZEhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxXZWJB
c3NlbWJseU1vZHVsZVJlY29yZD4oKSkKICAgICAsIHdlYkFzc2VtYmx5VGFibGVIZWFwQ2VsbFR5
cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseVRhYmxlPigpKQorICAgICwg
d2ViQXNzZW1ibHlUYWdIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJB
c3NlbWJseVRhZz4oKSkKICNlbmRpZgogICAgICwgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZSgiUHJpbWl0aXZlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhlYXAsIGF1eGlsaWFyeUhlYXBD
ZWxsVHlwZS5nZXQoKSwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpIC8vIEhhc2g6
MHgzZTdjZDc2MgogICAgICwganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIkpTVmFsdWUg
R2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5SGVhcENlbGxUeXBlLmdldCgpLCBq
c1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpIC8vIEhhc2g6MHgyNDFlOTQ2CkBAIC0xNjI5
LDYgKzE2MzMsNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50
bFNlZ21lbnRzU3BhY2UsIGludGxTZWdtZW50c0hlYXBDZWxsVAogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhqc1RvV2FzbUlD
Q2FsbGVlU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVG9XYXNtSUNDYWxsZWUpCiBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlDb2RlQmxv
Y2tTcGFjZSwgd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2spIC8vIEhhc2g6MHg5YWQ5OTVjZAorRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5RXhjZXB0aW9uU3BhY2UsIHdlYkFzc2VtYmx5
RXhjZXB0aW9uSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKQogRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5RnVuY3Rpb25T
cGFjZSwgd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZS5nZXQoKSwgV2ViQXNzZW1ibHlG
dW5jdGlvbikgLy8gSGFzaDoweDhiN2MzMmRiCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSX1NMT1cod2ViQXNzZW1ibHlHbG9iYWxTcGFjZSwgd2ViQXNzZW1ibHlHbG9iYWxIZWFw
Q2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlHbG9iYWwpCiBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlJbnN0YW5jZVNwYWNlLCB3ZWJBc3NlbWJs
eUluc3RhbmNlSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UpCkBAIC0x
NjM2LDYgKzE2NDEsNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
d2ViQXNzZW1ibHlNZW1vcnlTcGFjZSwgd2ViQXNzZW1ibHlNZW1vcgogRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5TW9kdWxlU3BhY2UsIHdlYkFzc2Vt
Ymx5TW9kdWxlSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5TW9kdWxlKQogRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
U3BhY2UsIHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkSGVhcENlbGxUeXBlLmdldCgpLCBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZCkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
Vyh3ZWJBc3NlbWJseVRhYmxlU3BhY2UsIHdlYkFzc2VtYmx5VGFibGVIZWFwQ2VsbFR5cGUuZ2V0
KCksIEpTV2ViQXNzZW1ibHlUYWJsZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyh3ZWJBc3NlbWJseVRhZ1NwYWNlLCB3ZWJBc3NlbWJseVRhZ0hlYXBDZWxsVHlwZS5n
ZXQoKSwgSlNXZWJBc3NlbWJseVRhZykKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyh3ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBl
LmdldCgpLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbikgLy8gSGFzaDoweGQ0YTVmZjAxCiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggN2E1OGIyNzllNjcwYTg0
MDNkMWYzOTQxMjM1N2Q1ZTc3MTEzZjU3OC4uYTM1NTRkM2RmM2M2MzJlYmVlNWJhNzQ2NjdjOWY5
OGQyYzYwNjU2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0yOSw2ICsyOSw3
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCisjaW5jbHVkZSAiQ2Fs
bGVlQml0cy5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKICNpbmNsdWRl
ICJDb21wbGV0ZVN1YnNwYWNlLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgpAQCAt
NTUsNiArNTYsNyBAQAogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiVk1U
cmFwcy5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCisjaW5jbHVkZSAiV2FzbVRhZy5oIgog
I2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0
b3IuaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KQEAgLTQ1MCw2ICs0NTIs
NyBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gaW50bFNl
Z21lbnRzSGVhcENlbGxUeXBlOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlw
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUV4Y2Vw
dGlvbkhlYXBDZWxsVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3
ZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29I
ZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5R2xvYmFsSGVhcENlbGxUeXBlOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5SW5zdGFuY2VIZWFwQ2VsbFR5cGU7
CkBAIC00NTcsNiArNDYwLDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFw
Q2VsbFR5cGU+IHdlYkFzc2VtYmx5TW9kdWxlSGVhcENlbGxUeXBlOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkSGVhcENlbGxUeXBl
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5VGFibGVI
ZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNz
ZW1ibHlUYWdIZWFwQ2VsbFR5cGU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCkBAIC02MjYs
NiArNjMwLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGpzVG9XYXNtSUNDYWxsZWVTcGFjZSkKICAgICBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5Q29kZUJsb2NrU3Bh
Y2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUV4
Y2VwdGlvblNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2Vi
QXNzZW1ibHlGdW5jdGlvblNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIod2ViQXNzZW1ibHlHbG9iYWxTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5SW5zdGFuY2VTcGFjZSkKQEAgLTYzMyw2ICs2MzgsNyBA
QCBwdWJsaWM6CiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3Nl
bWJseU1vZHVsZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5VGFibGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5VGFnU3BhY2UpCiAgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNlKQog
I2VuZGlmCiAKQEAgLTg5Niw2ICs5MDIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFZNLCBjYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgfQogCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBjYWxsZWVGb3JXYXNtQ2F0Y2hPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihWTSwgY2FsbGVlRm9yV2FzbUNhdGNoKTsKKyAgICB9CisKICAg
ICBzdGF0aWMgcHRyZGlmZl90IHRvcEVudHJ5RnJhbWVPZmZzZXQoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWTSwgdG9wRW50cnlGcmFtZSk7CkBAIC05OTAsNiArMTAw
MSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB2YXJhcmdzTGVuZ3RoOwogICAgIENhbGxGcmFt
ZSogbmV3Q2FsbEZyYW1lUmV0dXJuVmFsdWU7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWVGb3JD
YXRjaDsKKyAgICBDYWxsZWVCaXRzIGNhbGxlZUZvcldhc21DYXRjaDsKICAgICB2b2lkKiB0YXJn
ZXRNYWNoaW5lUENGb3JUaHJvdzsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogdGFyZ2V0SW50ZXJw
cmV0ZXJQQ0ZvclRocm93OwogICAgIHVpbnQzMl90IG9zckV4aXRJbmRleDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCmluZGV4IGY5YzI5
NDYwMDYxODczZDAwNDQ5OGE4MDA0NDY2MmNlMjE3ZjZiZTQuLjc5MjgyYjc3ZTc4NjE2MWQ1ZGYw
OGE2ZGY4MWE0MmZlZTExODM5ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcApAQCAtMTQ3LDcgKzE0NywxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0lmKGNvbnN0IENvbnRyb2xEYXRhJiBj
b250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWY7IH0K
KyAgICAgICAgc3RhdGljIGJvb2wgaXNUcnkoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsg
cmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUcnk7IH0KKyAgICAgICAg
c3RhdGljIGJvb2wgaXNDYXRjaChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4g
Y29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoOyB9CisgICAgICAgIHN0YXRp
YyBib29sIGlzQW55Q2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNv
bnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpDYXRjaDsgfQogICAgICAgICBzdGF0aWMg
Ym9vbCBpc1RvcExldmVsKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250
cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWw7IH0KKyAgICAgICAgc3RhdGlj
IGJvb2wgaXNMb29wKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9s
LmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcDsgfQorICAgICAgICBzdGF0aWMgYm9vbCBp
c0Jsb2NrKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2Nr
VHlwZSgpID09IEJsb2NrVHlwZTo6QmxvY2s7IH0KIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgewpAQCAtMTY0LDYgKzE2OSwxMiBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6VG9wTGV2ZWw6CiAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCJUb3BMZXZlbDogIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEJsb2NrVHlwZTo6VHJ5OgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVHJ5
OiAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBl
OjpDYXRjaDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkNhdGNoOiAiKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5wcmludCgiQ29u
dGludWF0aW9uOiAiLCAqY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKICAgICAgICAgICAg
IGlmIChzcGVjaWFsKQpAQCAtMzE0LDYgKzMyNSwxNiBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNr
Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFj
aGFibGUoQ29udHJvbERhdGEmKTsKIAorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9s
VHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWdu
YXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0
Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGwoU3Rh
Y2smLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5
cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZVRv
VW5yZWFjaGFibGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpOworICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJik7CisK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29u
dHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVs
dFRhcmdldHMsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwpAQCAtMjk4Miw2ICszMDAz
LDYwIEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xE
YXRhJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAorLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBXYXNtIGV4Y2VwdGlvbnMgaW4gdGhlIEFpciBnZW5lcmF0b3IK
Ky8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyMTEKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smLCBDb250cm9sVHlw
ZSYsIFN0YWNrJikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmLCBT
dGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCwgY29uc3Qg
U2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0JikgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwoU3RhY2smLCBDb250cm9sVHlwZSYp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsVG9V
bnJlYWNoYWJsZShDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFi
bGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiwgU3RhY2smKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVU5VU0VE
X1BBUkFNKGV4Y2VwdGlvbkluZGV4KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRS
ZXR1cm4oY29uc3QgQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBDYWxsSW5mb3JtYXRpb24gd2FzbUNhbGxJbmZvID0g
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKCpkYXRhLnNpZ25hdHVy
ZSgpLCBDYWxsUm9sZTo6Q2FsbGVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCAwODFjYzJiMjU1ZWZkOTU1NzFjM2U1OTExZTQz
NzgwYjc5NGNjM2EwLi5mZTZiMzhmM2NjM2MyYmQ0MWU1MDdiZmMzMTJlNGIwNjViOTg1MzZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
CkBAIC00OCw2ICs0OCw4IEBACiAjaW5jbHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIgog
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgiCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisjaW5jbHVkZSAiU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRl
eHRJbmxpbmVzLmgiCkBAIC04MywxOCArODUsMzMgQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZl
cmJvc2UgPSBmYWxzZTsKIH0KIH0KIAorY2xhc3MgQjNJUkdlbmVyYXRvcjsKK3N0cnVjdCBQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlIHsKKyAgICB2b2lkIGdlbmVyYXRlKENDYWxsSGVscGVycyYs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLCBCM0lSR2VuZXJhdG9yKikgY29u
c3Q7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfaW52YWxpZENhbGxTaXRlSW5k
ZXggPSAgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworCisgICAgdW5zaWdu
ZWQgbV9jYWxsU2l0ZUluZGV4IHtzX2ludmFsaWRDYWxsU2l0ZUluZGV4IH07CisgICAgdW5zaWdu
ZWQgbV9vZmZzZXQ7Cit9OworCiBjbGFzcyBCM0lSR2VuZXJhdG9yIHsKIHB1YmxpYzoKLSAgICB1
c2luZyBFeHByZXNzaW9uVHlwZSA9IFZhbHVlKjsKKyAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9
IFZhcmlhYmxlKjsKICAgICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBl
LCA4PjsKIAogICAgIHN0cnVjdCBDb250cm9sRGF0YSB7Ci0gICAgICAgIENvbnRyb2xEYXRhKFBy
b2NlZHVyZSYgcHJvYywgT3JpZ2luIG9yaWdpbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBC
bG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVj
aWFsID0gbnVsbHB0cikKKyAgICAgICAgQ29udHJvbERhdGEoUHJvY2VkdXJlJiBwcm9jLCBPcmln
aW4gb3JpZ2luLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIEJsb2NrVHlwZSB0eXBlLCB1bnNp
Z25lZCBzdGFja1NpemUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3Bl
Y2lhbCA9IG51bGxwdHIpCiAgICAgICAgICAgICA6IGNvbnRyb2xCbG9ja1R5cGUodHlwZSkKICAg
ICAgICAgICAgICwgbV9zaWduYXR1cmUoc2lnbmF0dXJlKQorICAgICAgICAgICAgLCBtX3N0YWNr
U2l6ZShzdGFja1NpemUpCiAgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24p
CiAgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKICAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUKHR5cGUgIT0gQmxvY2tUeXBlOjpUcnkgJiYgdHlwZSAhPSBCbG9ja1R5cGU6OkNhdGNo
KTsKKyAgICAgICAgICAgIGlmICh0eXBlICE9IEJsb2NrVHlwZTo6VG9wTGV2ZWwpCisgICAgICAg
ICAgICAgICAgbV9zdGFja1NpemUgLT0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisKICAg
ICAgICAgICAgIGlmICh0eXBlID09IEJsb2NrVHlwZTo6TG9vcCkgewogICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytp
KQogICAgICAgICAgICAgICAgICAgICBwaGlzLmFwcGVuZChwcm9jLmFkZDxWYWx1ZT4oUGhpLCB0
b0IzVHlwZShzaWduYXR1cmUtPmFyZ3VtZW50KGkpKSwgb3JpZ2luKSk7CkBAIC0xMDQsMTIgKzEy
MSwzNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBDb250
cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSwgQmxvY2tUeXBlIHR5cGUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgQmFzaWNCbG9jayog
Y29udGludWF0aW9uLCB1bnNpZ25lZCB0cnlTdGFydCwgdW5zaWduZWQgdHJ5RGVwdGgpCisgICAg
ICAgICAgICA6IGNvbnRyb2xCbG9ja1R5cGUodHlwZSkKKyAgICAgICAgICAgICwgbV9zaWduYXR1
cmUoc2lnbmF0dXJlKQorICAgICAgICAgICAgLCBtX3N0YWNrU2l6ZShzdGFja1NpemUpCisgICAg
ICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCisgICAgICAgICAgICAsIHNwZWNp
YWwobnVsbHB0cikKKyAgICAgICAgICAgICwgbV90cnlTdGFydCh0cnlTdGFydCkKKyAgICAgICAg
ICAgICwgbV90cnlEZXB0aCh0cnlEZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAgVU5VU0VE
X1BBUkFNKHByb2MpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKG9yaWdpbik7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOyAr
K2kpCisgICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5hZGQ8VmFsdWU+KFBoaSwgdG9C
M1R5cGUoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpKSwgb3JpZ2luKSk7CisgICAgICAgIH0KKwog
ICAgICAgICBDb250cm9sRGF0YSgpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHN0
YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRy
b2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZjsgfQorICAgICAgICBzdGF0aWMgYm9vbCBp
c1RyeShjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5
cGUoKSA9PSBCbG9ja1R5cGU6OlRyeTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0FueUNhdGNo
KGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgp
ID09IEJsb2NrVHlwZTo6Q2F0Y2g7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNUb3BMZXZlbChj
b25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9
PSBCbG9ja1R5cGU6OlRvcExldmVsOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzTG9vcChjb25z
dCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBC
bG9ja1R5cGU6Okxvb3A7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNCbG9jayhjb25zdCBDb250
cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5
cGU6OkJsb2NrOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29udHJvbERh
dGEmIGNvbnRyb2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250cm9sLmJsb2NrVHlw
ZSgpICE9IEJsb2NrVHlwZTo6Q2F0Y2gpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wuY2F0Y2hLaW5kKCkgPT0gQ2F0Y2hLaW5kOjpDYXRj
aDsKKyAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogICAgICAgICB7CkBAIC0xMjYsNiArMTY4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNh
c2UgQmxvY2tUeXBlOjpUb3BMZXZlbDoKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIlRvcExl
dmVsOiAiKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tU
eXBlOjpUcnk6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJUcnk6ICIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OkNhdGNoOgorICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiQ2F0Y2g6ICIpOworICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgb3V0LnByaW50KCJDb250aW51YXRpb246ICIsICpj
b250aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOwogICAgICAgICAgICAgaWYgKHNwZWNpYWwpCkBA
IC0xNTQsNiArMjAyLDI0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHNwZWNpYWwgPSBudWxscHRy
OwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBjb252ZXJ0VHJ5VG9DYXRjaCh1bnNpZ25lZCB0
cnlFbmRDYWxsU2l0ZUluZGV4LCBWYXJpYWJsZSogZXhjZXB0aW9uKQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUcnkpOworICAgICAgICAg
ICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6Q2F0Y2g7CisgICAgICAgICAgICBtX2Nh
dGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2g7CisgICAgICAgICAgICBtX3RyeUVuZCA9IHRyeUVu
ZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAgICBtX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgY29udmVydFRyeVRvQ2F0Y2hBbGwodW5zaWduZWQgdHJ5
RW5kQ2FsbFNpdGVJbmRleCwgVmFyaWFibGUqIGV4Y2VwdGlvbikKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VHJ5KTsKKyAgICAgICAgICAg
IGNvbnRyb2xCbG9ja1R5cGUgPSBCbG9ja1R5cGU6OkNhdGNoOworICAgICAgICAgICAgbV9jYXRj
aEtpbmQgPSBDYXRjaEtpbmQ6OkNhdGNoQWxsOworICAgICAgICAgICAgbV90cnlFbmQgPSB0cnlF
bmRDYWxsU2l0ZUluZGV4OworICAgICAgICAgICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247Cisg
ICAgICAgIH0KKwogICAgICAgICBTaWduYXR1cmVBcmdDb3VudCBicmFuY2hUYXJnZXRBcml0eSgp
IGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChibG9ja1R5cGUoKSA9PSBCbG9ja1R5
cGU6Okxvb3ApCkBAIC0xNjksMTMgKzIzNSw1MyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gbV9zaWduYXR1cmUtPnJldHVyblR5cGUoaSk7CiAgICAgICAgIH0KIAorICAgICAgICB1bnNp
Z25lZCB0cnlTdGFydCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250
cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6VHJ5IHx8IGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxv
Y2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV90cnlTdGFydDsKKyAgICAgICAg
fQorCisgICAgICAgIHVuc2lnbmVkIHRyeUVuZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAg
ICAgICAgcmV0dXJuIG1fdHJ5RW5kOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgdHJ5
RGVwdGgoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2Nr
VHlwZSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6
Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fdHJ5RGVwdGg7CisgICAgICAgIH0KKworICAg
ICAgICBDYXRjaEtpbmQgY2F0Y2hLaW5kKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAg
ICByZXR1cm4gbV9jYXRjaEtpbmQ7CisgICAgICAgIH0KKworICAgICAgICBWYXJpYWJsZSogZXhj
ZXB0aW9uKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9j
a1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV9leGNlcHRp
b247CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YWNrU2l6ZTsgfQorCiAgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gRklYTUU6IENv
bXByZXNzIEIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIGZpZWxkcyB1c2luZyBhbiB1bmlvbgor
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjEy
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBCM0lSR2VuZXJhdG9yOwogICAgICAgICBCbG9ja1R5cGUg
Y29udHJvbEJsb2NrVHlwZTsKICAgICAgICAgQmxvY2tTaWduYXR1cmUgbV9zaWduYXR1cmU7Cisg
ICAgICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOwogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51
YXRpb247CiAgICAgICAgIEJhc2ljQmxvY2sqIHNwZWNpYWw7Ci0gICAgICAgIFJlc3VsdExpc3Qg
cGhpczsKKyAgICAgICAgVmVjdG9yPFZhbHVlKj4gcGhpczsKKyAgICAgICAgdW5zaWduZWQgbV90
cnlTdGFydDsKKyAgICAgICAgdW5zaWduZWQgbV90cnlFbmQ7CisgICAgICAgIHVuc2lnbmVkIG1f
dHJ5RGVwdGg7CisgICAgICAgIENhdGNoS2luZCBtX2NhdGNoS2luZDsKKyAgICAgICAgVmFyaWFi
bGUqIG1fZXhjZXB0aW9uOwogICAgIH07CiAKICAgICB1c2luZyBDb250cm9sVHlwZSA9IENvbnRy
b2xEYXRhOwpAQCAtMjczLDYgKzM3OSwxNiBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJik7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUo
Q29udHJvbERhdGEmKTsKIAorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYg
cmVzdWx0LCBTdGFjayYgbmV3U3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUm
LCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGwoU3RhY2smLCBD
b250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENh
dGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZVRvVW5yZWFj
aGFibGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJik7CisKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbERh
dGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25k
aXRpb24sIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0
IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdl
dHMsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwpAQCAtMjg2LDIwICs0MDIsMzYgQEAg
cHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRp
cmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsUmVmKGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwogICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7Ci0gICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5z
dGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3Rv
cjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5j
ZSwgVmFsdWUqIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmKTsKICAgICBCMzo6VmFsdWUqIGNyZWF0ZUNhbGxQYXRj
aHBvaW50KEJhc2ljQmxvY2sqLCBPcmlnaW4sIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFBhdGNocG9pbnRWYWx1
ZSopPiYgcGF0Y2hwb2ludEZ1bmN0b3IpOwogCiAgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRyb2xT
dGFjayYsIGNvbnN0IFN0YWNrKiBleHByZXNzaW9uU3RhY2spOwogICAgIHZvaWQgc2V0UGFyc2Vy
KEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJz
ZXI7IH07CiAgICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkgeyB9Ci0gICAgdm9pZCBk
aWRQb3BWYWx1ZUZyb21TdGFjaygpIHsgfQorICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2so
KSB7IC0tbV9zdGFja1NpemU7IH0KIAogICAgIFZhbHVlKiBjb25zdGFudChCMzo6VHlwZSwgdWlu
dDY0X3QgYml0cywgc3RkOjpvcHRpb25hbDxPcmlnaW4+ID0gc3RkOjpudWxsb3B0KTsKICAgICBW
YWx1ZSogZnJhbWVQb2ludGVyKCk7CisgICAgdm9pZCBpbnNlcnRFbnRyeVN3aXRjaCgpOwogICAg
IHZvaWQgaW5zZXJ0Q29uc3RhbnRzKCk7CiAKICAgICBCMzo6VHlwZSB0b0IzUmVzdWx0VHlwZShC
bG9ja1NpZ25hdHVyZSk7CiAKKyAgICB2b2lkIGFkZFN0YWNrTWFwKHVuc2lnbmVkIGNhbGxTaXRl
SW5kZXgsIFN0YWNrTWFwJiYgc3RhY2ttYXApCisgICAgeworICAgICAgICBtX3N0YWNrbWFwcy5h
ZGQoQ2FsbFNpdGVJbmRleChjYWxsU2l0ZUluZGV4KSwgV1RGTW92ZShzdGFja21hcCkpOworICAg
IH0KKworICAgIFN0YWNrTWFwcyYmIHRha2VTdGFja21hcHMoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdURk1vdmUobV9zdGFja21hcHMpOworICAgIH0KKworICAgIFZlY3RvcjxVbmxpbmtlZEhh
bmRsZXJJbmZvPiYmIHRha2VFeGNlcHRpb25IYW5kbGVycygpCisgICAgeworICAgICAgICByZXR1
cm4gV1RGTW92ZShtX2V4Y2VwdGlvbkhhbmRsZXJzKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
dm9pZCBlbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAK
QEAgLTMwNywyOCArNDM5LDMzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBlbWl0TG9vcFRpZXJVcENo
ZWNrKHVpbnQzMl90IGxvb3BJbmRleCwgY29uc3QgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBjb25z
dCBTdGFjayYgbmV3U3RhY2spOwogCiAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyRm9ySlNXcmFw
cGVyKCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7
CisgICAgVmFsdWUqIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKFZhbHVlKiBwb2ludGVyLCB1
aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKICAgICBCMzo6S2luZCBtZW1vcnlL
aW5kKEIzOjpPcGNvZGUgbWVtb3J5T3ApOwotICAgIEV4cHJlc3Npb25UeXBlIGVtaXRMb2FkT3Ao
TG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KTsKLSAg
ICB2b2lkIGVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBF
eHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBWYWx1ZSogZW1pdExv
YWRPcChMb2FkT3BUeXBlLCBWYWx1ZSogcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICB2
b2lkIGVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUqLCB1aW50
MzJfdCBvZmZzZXQpOwogCi0gICAgRXhwcmVzc2lvblR5cGUgc2FuaXRpemVBdG9taWNSZXN1bHQo
RXh0QXRvbWljT3BUeXBlLCBUeXBlLCBFeHByZXNzaW9uVHlwZSByZXN1bHQpOwotICAgIEV4cHJl
c3Npb25UeXBlIGVtaXRBdG9taWNMb2FkT3AoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBFeHByZXNz
aW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOwotICAgIHZvaWQgZW1pdEF0b21pY1N0
b3JlT3AoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHBy
ZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKLSAgICBFeHByZXNzaW9uVHlwZSBl
bWl0QXRvbWljQmluYXJ5Uk1XT3AoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKLSAgICBF
eHByZXNzaW9uVHlwZSBlbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0b21pY09wVHlwZSwg
VHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgZXhwZWN0ZWQsIEV4
cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworICAgIFZhbHVlKiBzYW5pdGl6
ZUF0b21pY1Jlc3VsdChFeHRBdG9taWNPcFR5cGUsIFR5cGUsIFZhbHVlKiByZXN1bHQpOworICAg
IFZhbHVlKiBlbWl0QXRvbWljTG9hZE9wKEV4dEF0b21pY09wVHlwZSwgVHlwZSwgVmFsdWUqIHBv
aW50ZXIsIHVpbnQzMl90IG9mZnNldCk7CisgICAgdm9pZCBlbWl0QXRvbWljU3RvcmVPcChFeHRB
dG9taWNPcFR5cGUsIFR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSosIHVpbnQzMl90IG9mZnNl
dCk7CisgICAgVmFsdWUqIGVtaXRBdG9taWNCaW5hcnlSTVdPcChFeHRBdG9taWNPcFR5cGUsIFR5
cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSosIHVpbnQzMl90IG9mZnNldCk7CisgICAgVmFsdWUq
IGVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2UoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1ZSog
cG9pbnRlciwgVmFsdWUqIGV4cGVjdGVkLCBWYWx1ZSosIHVpbnQzMl90IG9mZnNldCk7CiAKLSAg
ICB2b2lkIHVuaWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBlIHBoaSwgY29uc3QgRXhwcmVzc2lvblR5
cGUgc291cmNlKTsKLSAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IFN0YWNrJiBy
ZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgc3RhY2spOworICAgIHZvaWQgdW5pZnkoVmFs
dWUqIHBoaSwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291cmNlKTsKKyAgICB2b2lkIHVuaWZ5VmFs
dWVzV2l0aEJsb2NrKGNvbnN0IFN0YWNrJiByZXN1bHRTdGFjaywgY29uc3QgQ29udHJvbERhdGEm
IGJsb2NrKTsKIAotICAgIHZvaWQgZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUsIEV4
cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KTsKKyAgICB2b2lkIGVtaXRD
aGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KTsK
IAotICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQo
RXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgV0FSTl9VTlVT
RURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNPcHMoRXh0QXRvbWljT3BU
eXBlLCBFeHByZXNzaW9uVHlwZSwgdWludDMyX3QpOworICAgIGludDMyX3QgV0FSTl9VTlVTRURf
UkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoVmFsdWUqJiwgdWludDMyX3QpOworICAgIFZh
bHVlKiBXQVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09w
cyhFeHRBdG9taWNPcFR5cGUsIFZhbHVlKiwgdWludDMyX3QpOwogCiAgICAgdm9pZCByZXN0b3Jl
V2FzbUNvbnRleHRJbnN0YW5jZShQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKiwgVmFsdWUqKTsKICAg
ICBlbnVtIGNsYXNzIFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHsgTm8sIFllcyB9OwotICAgIHZv
aWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQs
IGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmLCBC
YXNpY0Jsb2NrKik7CisgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0
b3JlQ2FjaGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1ZSogaW5z
dGFuY2UsIFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBib29sIHJlc3RvcmVJbnN0YW5jZSA9IHRy
dWUpOworCisgICAgVmFsdWUqIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcih1bnNpZ25lZCYgaW5kZXhJ
bkJ1ZmZlciwgVmFsdWUqIHBvaW50ZXIsIEIzOjpUeXBlKTsKKyAgICB2b2lkIGNvbm5lY3RDb250
cm9sRW50cnkodW5zaWduZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBwb2ludGVyLCBDb250cm9s
RGF0YSYsIFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xEYXRhJiBjdXJyZW50RGF0YSwg
Ym9vbCBmaWxsTG9vcFBoaXMgPSBmYWxzZSk7CisgICAgVmFsdWUqIGVtaXRDYXRjaEltcGwoQ2F0
Y2hLaW5kLCBDb250cm9sVHlwZSYsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4ID0gMCk7CisgICAg
UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMo
QmFzaWNCbG9jayosIFBhdGNocG9pbnRWYWx1ZSopOwogCiAgICAgT3JpZ2luIG9yaWdpbigpOwog
CkBAIC0zMzksNiArNDc2LDYyIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dGVyTG9v
cHMubGFzdCgpOwogICAgIH0KIAorICAgIEV4cHJlc3Npb25UeXBlIHB1c2goVHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHB1c2godG9CM1R5cGUodHlwZSkpOworICAgIH0KKworICAg
IEV4cHJlc3Npb25UeXBlIHB1c2goQjM6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgICsrbV9z
dGFja1NpemU7CisgICAgICAgIGlmIChtX3N0YWNrU2l6ZSA+IG1fbWF4U3RhY2tTaXplKSB7Cisg
ICAgICAgICAgICBtX21heFN0YWNrU2l6ZSA9IG1fc3RhY2tTaXplOworICAgICAgICAgICAgVmFy
aWFibGUqIHZhciA9IG1fcHJvYy5hZGRWYXJpYWJsZSh0eXBlKTsKKyAgICAgICAgICAgIG1fc3Rh
Y2suYXBwZW5kKHZhcik7CisgICAgICAgICAgICByZXR1cm4gdmFyOworICAgICAgICB9CisKKyAg
ICAgICAgVmFyaWFibGUqIHZhciA9IG1fc3RhY2tbbV9zdGFja1NpemUgLSAxXTsKKyAgICAgICAg
aWYgKHZhci0+dHlwZSgpID09IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gdmFyOworCisgICAg
ICAgIHZhciA9IG1fcHJvYy5hZGRWYXJpYWJsZSh0eXBlKTsKKyAgICAgICAgbV9zdGFja1ttX3N0
YWNrU2l6ZSAtIDFdID0gdmFyOworICAgICAgICByZXR1cm4gdmFyOworICAgIH0KKworICAgIEV4
cHJlc3Npb25UeXBlIHB1c2goVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgVmFyaWFibGUq
IHZhciA9IHB1c2godmFsdWUtPnR5cGUoKSk7CisgICAgICAgIHNldCh2YXIsIHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHZhcjsKKyAgICB9CisKKyAgICBWYWx1ZSogZ2V0KEJhc2ljQmxvY2sqIGJs
b2NrLCBWYXJpYWJsZSogdmFyaWFibGUpCisgICAgeworICAgICAgICByZXR1cm4gYmxvY2stPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9yaWdpbigpLCB2YXJpYWJs
ZSk7CisgICAgfQorCisgICAgVmFsdWUqIGdldChWYXJpYWJsZSogdmFyaWFibGUpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2V0KG1fY3VycmVudEJsb2NrLCB2YXJpYWJsZSk7CisgICAgfQorCisg
ICAgVmFsdWUqIHNldChCYXNpY0Jsb2NrKiBibG9jaywgVmFyaWFibGUqIGRzdCwgVmFsdWUqIHNy
YykKKyAgICB7CisgICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KG1fcHJvYywgQjM6OlNldCwgb3JpZ2luKCksIGRzdCwgc3JjKTsKKyAgICB9CisKKyAgICBWYWx1
ZSogc2V0KFZhcmlhYmxlKiBkc3QsIFZhbHVlKiBzcmMpCisgICAgeworICAgICAgICByZXR1cm4g
c2V0KG1fY3VycmVudEJsb2NrLCBkc3QsIHNyYyk7CisgICAgfQorCisgICAgVmFsdWUqIHNldChW
YXJpYWJsZSogZHN0LCBWYXJpYWJsZSogc3JjKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldChk
c3QsIGdldChzcmMpKTsKKyAgICB9CisKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9y
PiogbV9wYXJzZXIgeyBudWxscHRyIH07CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1f
aW5mbzsKICAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0No
ZWNraW5nIH07CkBAIC0zNDgsMTAgKzU0MSwxMiBAQCBwcml2YXRlOgogICAgIFRpZXJVcENvdW50
KiBtX3RpZXJVcCB7IG51bGxwdHIgfTsKIAogICAgIFByb2NlZHVyZSYgbV9wcm9jOwotICAgIEJh
c2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gbV9yb290QmxvY2tzOworICAgIEJhc2ljQmxvY2sqIG1fdG9wTGV2ZWxCbG9jazsKICAgICBC
YXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8dWludDMy
X3Q+IG1fb3V0ZXJMb29wczsKICAgICBWZWN0b3I8VmFyaWFibGUqPiBtX2xvY2FsczsKKyAgICBW
ZWN0b3I8VmFyaWFibGUqPiBtX3N0YWNrOwogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBh
bmQgdGhlIGZ1bmN0aW9uIGluZGV4IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQg
d2l0aC4KICAgICB1bnNpZ25lZCYgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwogICAgIEhh
c2hNYXA8VmFsdWVLZXksIFZhbHVlKj4gbV9jb25zdGFudFBvb2w7CkBAIC0zNjUsNiArNTYwLDcg
QEAgcHJpdmF0ZToKIAogICAgIFZhbHVlKiBtX2luc3RhbmNlVmFsdWUgeyBudWxscHRyIH07IC8v
IEFsd2F5cyB1c2UgdGhlIGFjY2Vzc29yIGJlbG93IHRvIGVuc3VyZSB0aGUgaW5zdGFuY2UgdmFs
dWUgaXMgbWF0ZXJpYWxpemVkIHdoZW4gdXNlZC4KICAgICBib29sIG1fdXNlc0luc3RhbmNlVmFs
dWUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNDYXRjaCB7IGZhbHNlIH07CiAgICAgVmFsdWUq
IGluc3RhbmNlVmFsdWUoKQogICAgIHsKICAgICAgICAgbV91c2VzSW5zdGFuY2VWYWx1ZSA9IHRy
dWU7CkBAIC0zNzMsMTAgKzU2OSwyOSBAQCBwcml2YXRlOgogCiAgICAgdWludDMyX3QgbV9tYXhO
dW1KU0NhbGxBcmd1bWVudHMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9udW1JbXBvcnRGdW5jdGlv
bnM7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX3RyeURlcHRoIHsgMCB9OworICAgIENoZWNr
ZWQ8dW5zaWduZWQ+IG1fY2FsbFNpdGVJbmRleCB7IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVk
PiBtX3N0YWNrU2l6ZSB7IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX21heFN0YWNrU2l6
ZSB7IDAgfTsKKyAgICBTdGFja01hcHMgbV9zdGFja21hcHM7CisgICAgVmVjdG9yPFVubGlua2Vk
SGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CiB9OwogCit2b2lkIFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGU6OmdlbmVyYXRlKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMsIEIzSVJHZW5lcmF0b3IqIGdlbmVyYXRvcikg
Y29uc3QKK3sKKyAgICBpZiAobV9jYWxsU2l0ZUluZGV4ID09IHNfaW52YWxpZENhbGxTaXRlSW5k
ZXgpCisgICAgICAgIHJldHVybjsKKworICAgIFN0YWNrTWFwIHZhbHVlczsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX29mZnNldDsgaSA8IHBhcmFtcy52YWx1ZSgpLT5udW1DaGlsZHJlbigpOyAr
K2kpCisgICAgICAgIHZhbHVlcy5jb25zdHJ1Y3RBbmRBcHBlbmQocGFyYW1zW2ldLCBwYXJhbXMu
dmFsdWUoKS0+Y2hpbGQoaSktPnR5cGUoKSk7CisgICAgZ2VuZXJhdG9yLT5hZGRTdGFja01hcCht
X2NhbGxTaXRlSW5kZXgsIFdURk1vdmUodmFsdWVzKSk7CisgICAgaml0LnN0b3JlMzIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9jYWxsU2l0ZUluZGV4KSwgQ0NhbGxIZWxwZXJzOjp0YWdG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKK30KKwogLy8g
TWVtb3J5IGFjY2Vzc2VzIGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNl
dHMsIHdoZXJlYXMgdGhleSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KLWludDMy
X3QgQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYg
cHRyLCB1aW50MzJfdCBvZmZzZXQpCitpbnQzMl90IEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRl
clBsdXNPZmZzZXQoVmFsdWUqJiBwdHIsIHVpbnQzMl90IG9mZnNldCkKIHsKICAgICBpZiAoc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7CiAgICAgICAgIHB0ciA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgcHRyLCBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zm
c2V0KSk7CkBAIC00MjgsOCArNjQzLDkgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAs
IG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXMobV9wcm9jKQogICAgICwgbV9udW1JbXBvcnRGdW5j
dGlvbnMoaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCiB7Ci0gICAgbV9yb290QmxvY2sgPSBt
X3Byb2MuYWRkQmxvY2soKTsKLSAgICBtX2N1cnJlbnRCbG9jayA9IG1fcm9vdEJsb2NrOworICAg
IG1fdG9wTGV2ZWxCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgIG1fcm9vdEJsb2Nrcy5h
cHBlbmQobV9wcm9jLmFkZEJsb2NrKCkpOworICAgIG1fY3VycmVudEJsb2NrID0gbV9yb290Qmxv
Y2tzWzBdOwogCiAgICAgLy8gRklYTUUgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gcGluIHJlZ2lz
dGVycyBoZXJlIGlmIHRoZXJlJ3Mgbm8gbWVtb3J5LiBJdCBtYWtlcyB3YXNtIC0+IHdhc20gdGh1
bmtzIHNpbXBsZXIgZm9yIG5vdy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NjYyMwogICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBp
bm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CkBAIC00NjEsNiArNjc3LDI2IEBAIEIzSVJHZW5lcmF0
b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVy
ZSYgcHJvY2VkdXJlCiAgICAgICAgIH0pOwogICAgIH0KIAorICAgIHsKKyAgICAgICAgQjM6OlBh
dGNocG9pbnRWYWx1ZSogZ2V0SW5zdGFuY2UgPSBtX3RvcExldmVsQmxvY2stPmFwcGVuZE5ldzxC
Mzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpKTsKKyAg
ICAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgICAgIGdldEluc3RhbmNl
LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNs
b2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUg
aXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCisgICAgICAgICAg
ICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9n
aWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgorICAgICAgICAgICAgZ2V0SW5zdGFu
Y2UtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gZmFsc2U7CisgICAgICAgICAgICBnZXRJbnN0YW5j
ZS0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICBnZXRJbnN0YW5jZS0+
cmVzdWx0Q29uc3RyYWludHMgPSB7IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEluc3RhbmNl
R1BSKSB9OworICAgICAgICB9CisgICAgICAgIGdldEluc3RhbmNlLT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAg
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNo
KGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3Jh
dGNoUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3Rh
bmNlKHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAg
ICBtX2luc3RhbmNlVmFsdWUgPSBnZXRJbnN0YW5jZTsKKyAgICB9CisKICAgICB7CiAgICAgICAg
IGF1dG8qIGNhbGxlZU1vdmVMb2NhdGlvbiA9ICZjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0
aW9uOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHNp
emVvZihSZWdpc3RlcikgPCBXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNpemVJbkJ5dGVz
LCAiV2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5vdy4iKTsKQEAgLTQ5NCwxNyArNzMwLDEwIEBA
IEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGlu
Zm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgfQogCiAgICAgewotICAgICAgICBCMzo6UGF0
Y2hwb2ludFZhbHVlKiBzdGFja092ZXJmbG93Q2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCkp
OwotICAgICAgICBtX2luc3RhbmNlVmFsdWUgPSBzdGFja092ZXJmbG93Q2hlY2s7CisgICAgICAg
IEIzOjpQYXRjaHBvaW50VmFsdWUqIHN0YWNrT3ZlcmZsb3dDaGVjayA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBWb2lkLCBPcmlnaW4oKSk7
CisgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+YXBwZW5kU29tZVJlZ2lzdGVyKGluc3RhbmNl
VmFsdWUoKSk7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+YXBwZW5kU29tZVJlZ2lzdGVy
KGZyYW1lUG9pbnRlcigpKTsKICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5jbG9iYmVyKFJl
Z2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIGlmICghQ29udGV4
dDo6dXNlRmFzdFRMUygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9X
YXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBhbmQgZG9lcyBu
b3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4K
LSAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBBcmd1bWVudFJlZyB0
byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIuCi0gICAgICAgICAg
ICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMud3JpdGVzUGlubmVkID0gZmFsc2U7Ci0gICAg
ICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwot
ICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5yZXN1bHRDb25zdHJhaW50cyA9IHsgVmFs
dWVSZXA6OnJlZyhtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpIH07Ci0gICAgICAgIH0KICAgICAg
ICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAyOwogICAgICAg
ICBzdGFja092ZXJmbG93Q2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAg
ICAgIGNvbnN0IENoZWNrZWQ8aW50MzJfdD4gd2FzbUZyYW1lU2l6ZSA9IHBhcmFtcy5wcm9jKCku
ZnJhbWVTaXplKCk7CkBAIC01MjYsMTkgKzc1NSwxNSBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2Vu
ZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVy
ZQogICAgICAgICAgICAgYm9vbCBuZWVkVW5kZXJmbG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oY2hlY2tTaXplKSA+IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKTsKICAgICAgICAg
ICAgIGJvb2wgbmVlZHNPdmVyZmxvd0NoZWNrID0gbV9tYWtlc0NhbGxzIHx8IHdhc21GcmFtZVNp
emUgPj0gc3RhdGljX2Nhc3Q8aW50MzJfdD4obWluaW11bVBhcmVudENoZWNrU2l6ZSkgfHwgbmVl
ZFVuZGVyZmxvd0NoZWNrOwogCi0gICAgICAgICAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0g
Q29udGV4dDo6dXNlRmFzdFRMUygpID8gcGFyYW1zWzBdLmdwcigpIDogbV93YXNtQ29udGV4dElu
c3RhbmNlR1BSOwotCiAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBsZWFmIGZ1bmN0aW9ucyB0
byBub3QgZG8gc3RhY2sgY2hlY2tzIGlmIHRoZWlyIGZyYW1lIHNpemUgaXMgd2l0aGluCiAgICAg
ICAgICAgICAvLyBjZXJ0YWluIGxpbWl0cyBzaW5jZSB0aGVpciBjYWxsZXIgd291bGQgaGF2ZSBh
bHJlYWR5IGRvbmUgdGhlIGNoZWNrLgogICAgICAgICAgICAgaWYgKG5lZWRzT3ZlcmZsb3dDaGVj
aykgewogICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0g
cGFyYW1zWzBdLmdwcigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyBmcCA9IHBhcmFtc1sxXS5n
cHIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBwYXJhbXMuZ3BTY3JhdGNo
KDApOwogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHBhcmFtcy5ncFNjcmF0Y2go
MSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQotICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNl
KTsKLQogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhj
b250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIHNj
cmF0Y2gyKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKC1jaGVja1NpemUpLCBmcCwgc2NyYXRjaDEpOwogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBvdmVyZmxvdzsKQEAgLTU0OCwxMiArNzczLDYgQEAgQjNJUkdl
bmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJv
Y2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW292ZXJm
bG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihU
aHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dl
bmVyYXRvcikuY29kZSgpKSk7CiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVkLCBidXQgdGhlIGlu
c3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0LgotICAgICAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxs
SGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVy
KCkpOwotICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0
SW5zdGFuY2UpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBz
YWlkIHdlJ2QgcmV0dXJuIGEgcG9pbnRlci4gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBiZWNh
dXNlIGl0IGlzbid0IHVzZWQsIGJ1dCB0aGUgcGF0Y2hwb2ludCBjb25zZXJ2YXRpdmVseSBzYWlk
IGl0IGhhZCBlZmZlY3RzIChwb3RlbnRpYWwgc3RhY2sgY2hlY2spIHdoaWNoIHByZXZlbnQgaXQg
ZnJvbSBnZXR0aW5nIHJlbW92ZWQuCiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0K
QEAgLTU2NCw5ICs3ODMsMTAgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgbV9j
dXJyZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9y
OjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCBy
ZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwg
VmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrKQordm9p
ZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2Fj
aGVkU3RhY2tMaW1pdCByZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3Jt
YXRpb24mIG1lbW9yeSwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxv
Y2sqIGJsb2NrLCBib29sIHJlc3RvcmVJbnN0YW5jZSkKIHsKLSAgICByZXN0b3JlV2FzbUNvbnRl
eHRJbnN0YW5jZShwcm9jLCBibG9jaywgaW5zdGFuY2UpOworICAgIGlmIChyZXN0b3JlSW5zdGFu
Y2UpCisgICAgICAgIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHByb2MsIGJsb2NrLCBpbnN0
YW5jZSk7CiAKICAgICBpZiAocmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgPT0gUmVzdG9yZUNhY2hl
ZFN0YWNrTGltaXQ6OlllcykgewogICAgICAgICAvLyBUaGUgSW5zdGFuY2UgY2FjaGVzIHRoZSBz
dGFjayBsaW1pdCwgYnV0IGFsc28ga25vd3Mgd2hlcmUgaXRzIGNhbm9uaWNhbCBsb2NhdGlvbiBp
cy4KQEAgLTYzNCw5ICs4NTQsNzggQEAgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmZyYW1lUG9pbnRl
cigpCiAgICAgcmV0dXJuIG1fZnJhbWVQb2ludGVyOwogfQogCit2b2lkIEIzSVJHZW5lcmF0b3I6
Omluc2VydEVudHJ5U3dpdGNoKCkKK3sKKyAgICBtX3Byb2Muc2V0TnVtRW50cnlwb2ludHMobV9y
b290QmxvY2tzLnNpemUoKSk7CisKKyAgICBSZWY8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+
IGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6OlByb2xv
Z3VlR2VuZXJhdG9yRnVuY3Rpb24+KFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29k
ZSYgY29kZSkgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CisKKyAgICAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogSGFuZGxpbmcgcHJlY2lzZSBhbGxvY2F0aW9ucyBpbiBXYXNtQjNJ
UkdlbmVyYXRvciBjYXRjaCBlbnRyeXBvaW50cyBtaWdodCBiZSB1bm5lY2Vzc2FyeQorICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTIxMwor
ICAgICAgICAgICAgYXV0byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0
cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihQcmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICAg
ICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJs
b2NrTWFzayksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9v
dGVyICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKKworICAgICAgICAg
ICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFByZWNpc2VBbGxvY2F0
aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0oKSAtIFByZWNpc2VB
bGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgICAg
IGxvYWRlZENhc2UubGluaygmaml0KTsKKyAgICAgICAgfQorICAgICAgICBqaXQucmVzdG9yZUNh
bGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEdQUkluZm86OnJlZ1Qw
LCBHUFJJbmZvOjpyZWdUMyk7CisKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0KCkpLCBH
UFJJbmZvOjpyZWdUMyk7CisgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwg
Vk06OmNhbGxlZUZvcldhc21DYXRjaE9mZnNldCgpKSk7CisgICAgICAgIGppdC5lbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDMsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisK
KyAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAs
IFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOworICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsRnJh
bWVGb3JDYXRjaE9mZnNldCgpKSk7CisKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDMsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbnN0YW5jZSgpKSwgR1BSSW5mbzo6cmVnVDMpOworICAg
ICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OnJlZ1QzKTsKKworICAg
ICAgICBqaXQucHJvYmUoW10oUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOworICAgICAg
ICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUlu
ZGV4KCk7CisgICAgICAgICAgICBPcHRpbWl6aW5nSklUQ2FsbGVlKiBjYWxsZWUgPSBiaXR3aXNl
X2Nhc3Q8T3B0aW1pemluZ0pJVENhbGxlZSo+KGNhbGxGcmFtZS0+Y2FsbGVlKCkuYXNXYXNtQ2Fs
bGVlKCkpOworICAgICAgICAgICAgY29uc3QgU3RhY2tNYXAmIHN0YWNrbWFwID0gY2FsbGVlLT5z
dGFja21hcChjYWxsU2l0ZUluZGV4KTsKKyAgICAgICAgICAgIFZNKiB2bSA9IGNvbnRleHQuZ3By
PFZNKj4oR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgdWludDY0X3QqIGJ1ZmZlciA9IHZt
LT53YXNtQ29udGV4dC5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzdGFja21hcC5zaXplKCkgKiA4KTsK
KyAgICAgICAgICAgIGxvYWRWYWx1ZXNJbnRvQnVmZmVyKGNvbnRleHQsIHN0YWNrbWFwLCBidWZm
ZXIpOworCisgICAgICAgICAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYnVmZmVyKTsKKyAgICAgICAgfSwgbnVsbHB0cik7CisK
KyAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFt
ZVNpemUoKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICB9KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PCBtX3Jvb3RCbG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJvYy5jb2RlKCkuc2V0UHJv
bG9ndWVGb3JFbnRyeXBvaW50KGksIGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IuY29weVJlZigpKTsK
KworICAgIG1fY3VycmVudEJsb2NrID0gbV90b3BMZXZlbEJsb2NrOworICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRW50cnlTd2l0Y2gsIE9yaWdpbigpKTsKKyAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9yb290QmxvY2tzKQorICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kU3VjY2Vzc29yKEZyZXF1ZW50ZWRCbG9jayhibG9jaykpOworfQorCiB2
b2lkIEIzSVJHZW5lcmF0b3I6Omluc2VydENvbnN0YW50cygpCiB7CiAgICAgbV9jb25zdGFudElu
c2VydGlvblZhbHVlcy5leGVjdXRlKG1fcHJvYy5hdCgwKSk7CisKKyAgICBpZiAoIW1faGFzQ2F0
Y2gpCisgICAgICAgIHJldHVybjsKKworICAgIFZhbHVlKiBqc0luc3RhbmNlID0gbV9wcm9jLmFk
ZDxNZW1vcnlWYWx1ZT4oTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIGluc3RhbmNlVmFs
dWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSkpOworICAg
IFZhbHVlKiBzdG9yZSA9IG1fcHJvYy5hZGQ8QjM6Ok1lbW9yeVZhbHVlPihCMzo6U3RvcmUsIE9y
aWdpbigpLCBqc0luc3RhbmNlLCBmcmFtZVBvaW50ZXIoKSwgc2FmZUNhc3Q8aW50MzJfdD4oQ2Fs
bEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX3Jvb3RCbG9ja3NbMF07CisgICAgbV9jb25zdGFudEluc2VydGlv
blZhbHVlcy5pbnNlcnRWYWx1ZSgwLCBqc0luc3RhbmNlKTsKKyAgICBtX2NvbnN0YW50SW5zZXJ0
aW9uVmFsdWVzLmluc2VydFZhbHVlKDAsIHN0b3JlKTsKKyAgICBtX2NvbnN0YW50SW5zZXJ0aW9u
VmFsdWVzLmV4ZWN1dGUoYmxvY2spOwogfQogCiBCMzo6VHlwZSBCM0lSR2VuZXJhdG9yOjp0b0Iz
UmVzdWx0VHlwZShCbG9ja1NpZ25hdHVyZSByZXR1cm5UeXBlKQpAQCAtNzA1LDIwICs5OTQsMjEg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZWZJc051
bGwoRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEIzOjpFcXVhbCwgb3JpZ2luKCksIHZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSkpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCBnZXQodmFsdWUpLCBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpKTsKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZFRhYmxlR2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgLy8g
RklYTUU6IEVtaXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTg1MDY+LgotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBlczo6RXh0ZXJucmVmKSwgb3JpZ2luKCks
CisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2Fs
bFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpFeHRlcm5yZWYpLCBvcmlnaW4oKSwKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRXYXNtVGFi
bGVFbGVtZW50KSksCi0gICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpLCBpbmRl
eCk7CisgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpLCBnZXQoaW5kZXgpKTsK
IAogICAgIHsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChyZXN1bHRWYWx1ZSk7CiAgICAgICAgIENo
ZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPiht
X3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwg
b3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNl
cHRpb25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTczMyw3ICsxMDIzLDcgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZVNldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHBy
ZXNzaW9uVHlwZSBpbmRleCwgRXhwcmUKICAgICAvLyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODUwNj4uCiAgICAgYXV0
byBzaG91bGRUaHJvdyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9w
cm9jLCBCMzo6SW50MzIsIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvblNldFdhc21UYWJsZUVsZW1lbnQpKSwKLSAgICAgICAgaW5zdGFu
Y2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgdGFibGVJbmRleCksIGluZGV4LCB2YWx1ZSk7CisgICAgICAgIGluc3RhbmNl
VmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIHRhYmxlSW5kZXgpLCBnZXQoaW5kZXgpLCBnZXQodmFsdWUpKTsKIAogICAgIHsK
ICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENo
ZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLApAQCAtNzUxLDI2ICsxMDQxLDI2IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmVmRnVuYyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhCiB7CiAgICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxp
bmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1MDY+LgogCi0g
ICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2Ms
IEIzOjpJbnQ2NCwgb3JpZ2luKCksCisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgQjM6OkludDY0LCBvcmlnaW4oKSwKICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmVmRnVuYykp
LAotICAgICAgICBpbnN0YW5jZVZhbHVlKCksIGFkZENvbnN0YW50KFR5cGVzOjpJMzIsIGluZGV4
KSk7CisgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgY29uc3RhbnQodG9CM1R5cGUoVHlwZXM6Okkz
MiksIGluZGV4KSkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRUYWJsZUluaXQodW5zaWduZWQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCB0YWJsZUluZGV4
LCBFeHByZXNzaW9uVHlwZSBkc3RPZmZzZXQsIEV4cHJlc3Npb25UeXBlIHNyY09mZnNldCwgRXhw
cmVzc2lvblR5cGUgbGVuZ3RoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVlKiByZXN1
bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAg
IG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NG
dW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UYWJsZUluaXQpKSwKICAgICAg
ICAgaW5zdGFuY2VWYWx1ZSgpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZWxlbWVudEluZGV4KSwKICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRh
YmxlSW5kZXgpLAotICAgICAgICBkc3RPZmZzZXQsIHNyY09mZnNldCwgbGVuZ3RoKTsKKyAgICAg
ICAgZ2V0KGRzdE9mZnNldCksIGdldChzcmNPZmZzZXQpLCBnZXQobGVuZ3RoKSk7CiAKICAgICB7
CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
aGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQs
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVj
ay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hl
Y2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTc5NCwz
MSArMTA4NCwzMSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVsZW1Ecm9wKHVuc2lnbmVkIGVs
ZW1lbnRJbmRleCkgLT4gUGFydGlhbFJlc3VsdAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJs
ZVNpemUodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KLSAgICByZXN1bHQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6
OkkzMiksIG9yaWdpbigpLAorICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRXYXNt
VGFibGVTaXplKSksCi0gICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpKTsKKyAg
ICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJbmRleCkpKTsKIAogICAgIHJldHVybiB7IH07
CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5k
ZXgsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIp
LCBvcmlnaW4oKSwKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVRhYmxlR3Jv
dykpLAotICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZmlsbCwgZGVsdGEp
OworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZ2V0KGZpbGwpLCBnZXQo
ZGVsdGEpKSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZFRhYmxlRmlsbCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBvZmZzZXQsIEV4
cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0
CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFs
dWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAorICAgIFZhbHVlKiBy
ZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9j
LCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9u
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCkpLAotICAgICAgICBpbnN0
YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgb2Zmc2V0LCBmaWxsLCBjb3VudCk7CisgICAgICAg
IGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpLCBnZXQob2Zmc2V0KSwgZ2V0KGZpbGwpLCBn
ZXQoY291bnQpKTsKIAogICAgIHsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAot
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVh
bCwgb3JpZ2luKCksIHJlc3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAw
KSkpOwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRo
aXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVGFi
bGVBY2Nlc3MpOwpAQCAtODMwLDE3ICsxMTIwLDE3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
VGFibGVGaWxsKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhw
CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVDb3B5KHVuc2lnbmVkIGRzdFRhYmxlSW5k
ZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGRzdE9mZnNldCwgRXhw
cmVzc2lvblR5cGUgc3JjT2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBsZW5ndGgpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0Nh
bGxWYWx1ZT4oCisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgbV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwg
b3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uV2FzbVRhYmxlQ29weSkpLAogICAgICAgICBpbnN0YW5jZVZhbHVlKCksCiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBk
c3RUYWJsZUluZGV4KSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHNyY1RhYmxlSW5kZXgpLAotICAgICAgICBkc3RPZmZz
ZXQsIHNyY09mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgZ2V0KGRzdE9mZnNldCksIGdldChzcmNP
ZmZzZXQpLCBnZXQobGVuZ3RoKSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNr
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBv
cmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3Vs
dFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAg
ICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTg1Myw3ICsxMTQzLDcgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRUYWJsZUNvcHkodW5zaWduZWQgZHN0VGFibGVJbmRleCwgdW5zaWduZWQgc3JjVGFi
bGVJbmRleCwKIGF1dG8gQjNJUkdlbmVyYXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV9s
b2NhbHNbaW5kZXhdKTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
cmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSk7
CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFs
dWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSkpOwogICAgIHJl
dHVybiB7IH07CiB9CiAKQEAgLTg2Nyw3ICsxMTU3LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRVbnJlYWNoYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCi1h
dXRvIEIzSVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNl
LCBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFy
dGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBj
YWxsZWVJbnN0YW5jZSwgVmFsdWUqIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgLy8gRG8gYSBjb250ZXh0IHN3aXRjaCBpZiBuZWVkZWQu
CiAgICAgewpAQCAtOTE2LDcgKzEyMDYsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVtaXRJbmRp
cmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZQogICAg
IH0KIAogICAgIEIzOjpUeXBlIHJldHVyblR5cGUgPSB0b0IzUmVzdWx0VHlwZSgmc2lnbmF0dXJl
KTsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsUmVzdWx0ID0gY3JlYXRlQ2FsbFBhdGNocG9pbnQo
bV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBzaWduYXR1cmUsIGFyZ3MsCisgICAgVmFsdWUqIGNh
bGxSZXN1bHQgPSBjcmVhdGVDYWxsUGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCks
IHNpZ25hdHVyZSwgYXJncywKICAgICAgICAgc2NvcGVkTGFtYmRhUmVmPHZvaWQoUGF0Y2hwb2lu
dFZhbHVlKik+KFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSAtPiB2b2lkIHsKICAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAg
ICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwpAQCAtOTI4LDgg
KzEyMTgsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBj
YWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGUKICAgICAgICAgICAgIHBhdGNocG9p
bnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nKSk7CiAKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChj
YWxsZWVDb2RlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25z
KG1fY3VycmVudEJsb2NrLCBwYXRjaHBvaW50KTsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgaGFuZGxl
LmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKICAgICAgICAgICAgICAgICBqaXQuY2FsbChw
YXJhbXNbcGFyYW1zLnByb2MoKS5yZXN1bHRDb3VudChyZXR1cm5UeXBlKV0uZ3ByKCksIFdhc21F
bnRyeVB0clRhZyk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSkpOwpAQCAtOTQxLDExICsx
MjMzLDExIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2Fs
bGVlSW5zdGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlCiAgICAgY2FzZSBCMzo6VHVwbGU6IHsK
ICAgICAgICAgY29uc3QgVmVjdG9yPEIzOjpUeXBlPiYgdHVwbGUgPSBtX3Byb2MudHVwbGVGb3JU
eXBlKHJldHVyblR5cGUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0
dXJlLnJldHVybkNvdW50KCk7ICsraSkKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0dXBs
ZVtpXSwgY2FsbFJlc3VsdCwgaSkpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaCht
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
dHVwbGVbaV0sIGNhbGxSZXN1bHQsIGkpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBk
ZWZhdWx0OiB7Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKGNhbGxSZXN1bHQpOworICAgICAgICBy
ZXN1bHRzLmFwcGVuZChwdXNoKGNhbGxSZXN1bHQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIH0KQEAgLTk1OCw5ICsxMjUwLDkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJl
Y3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGUKIAogYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4o
KSwKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1
ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uR3Jvd01lbW9yeSkpLAotICAgICAgICBmcmFtZVBvaW50ZXIo
KSwgaW5zdGFuY2VWYWx1ZSgpLCBkZWx0YSk7CisgICAgICAgIGZyYW1lUG9pbnRlcigpLCBpbnN0
YW5jZVZhbHVlKCksIGdldChkZWx0YSkpKTsKIAogICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2Jh
bFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpObywgbV9pbmZvLm1lbW9yeSwgaW5zdGFu
Y2VWYWx1ZSgpLCBtX3Byb2MsIG1fY3VycmVudEJsb2NrKTsKIApAQCAtOTgwLDIyICsxMjcyLDIy
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgVmFsdWUqIG51bVBhZ2VzID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaU2hyLCBvcmlnaW4oKSwKICAgICAgICAg
c2l6ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIHNoaWZ0VmFsdWUpKTsKIAotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbigpLCBudW1QYWdlcyk7CisgICAgcmVz
dWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5j
LCBvcmlnaW4oKSwgbnVtUGFnZXMpKTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkTWVtb3J5RmlsbChFeHByZXNzaW9uVHlwZSBkc3RBZGRyZXNzLCBFeHBy
ZXNzaW9uVHlwZSB0YXJnZXRWYWx1ZSwgRXhwcmVzc2lvblR5cGUgY291bnQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0Nh
bGxWYWx1ZT4oCisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgbV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwg
b3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uV2FzbU1lbW9yeUZpbGwpKSwKICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLAotICAgICAgICBk
c3RBZGRyZXNzLCB0YXJnZXRWYWx1ZSwgY291bnQpOworICAgICAgICBnZXQoZHN0QWRkcmVzcyks
IGdldCh0YXJnZXRWYWx1ZSksIGdldChjb3VudCkpOwogCiAgICAgewogICAgICAgICBDaGVja1Zh
bHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9j
LCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdp
bigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9u
VHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC0xMDA3LDE2ICsxMjk5LDE2IEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5RmlsbChFeHByZXNzaW9uVHlwZSBkc3RBZGRyZXNz
LCBFeHByZXNzaW9uVHlwZSB0YXJnCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5SW5p
dCh1bnNpZ25lZCBkYXRhU2VnbWVudEluZGV4LCBFeHByZXNzaW9uVHlwZSBkc3RBZGRyZXNzLCBF
eHByZXNzaW9uVHlwZSBzcmNBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSBsZW5ndGgpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q0NhbGxWYWx1ZT4oCisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgbV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMy
KSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uV2FzbU1lbW9yeUluaXQpKSwKICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLAogICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgZGF0YVNlZ21lbnRJbmRleCksCi0gICAgICAgIGRzdEFkZHJlc3MsIHNyY0FkZHJlc3MsIGxl
bmd0aCk7CisgICAgICAgIGdldChkc3RBZGRyZXNzKSwgZ2V0KHNyY0FkZHJlc3MpLCBnZXQobGVu
Z3RoKSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9y
aWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsK
IAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5l
bWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNj
ZXNzKTsKQEAgLTEwMjgsMTUgKzEzMjAsMTUgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRNZW1v
cnlJbml0KHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgsIEV4cHJlc3Npb25UeXBlIGRzdEEKIAog
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlDb3B5KEV4cHJlc3Npb25UeXBlIGRzdEFkZHJl
c3MsIEV4cHJlc3Npb25UeXBlIHNyY0FkZHJlc3MsIEV4cHJlc3Npb25UeXBlIGNvdW50KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6
OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbldhc21NZW1vcnlDb3B5KSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwKLSAg
ICAgICAgZHN0QWRkcmVzcywgc3JjQWRkcmVzcywgY291bnQpOworICAgICAgICBnZXQoZHN0QWRk
cmVzcyksIGdldChzcmNBZGRyZXNzKSwgZ2V0KGNvdW50KSk7CiAKICAgICB7CiAgICAgICAgIENo
ZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPiht
X3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwg
b3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNl
cHRpb25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTEwNjAsNyArMTM1Miw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRGF0YURyb3AodW5zaWduZWQgZGF0YVNlZ21lbnRJbmRl
eCkgLT4gUGFydGlhbFJlc3VsdAogYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBB
U1NFUlQobV9sb2NhbHNbaW5kZXhdKTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
cmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSwg
dmFsdWUpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9w
cm9jLCBCMzo6U2V0LCBvcmlnaW4oKSwgbV9sb2NhbHNbaW5kZXhdLCBnZXQodmFsdWUpKTsKICAg
ICByZXR1cm4geyB9OwogfQogCkBAIC0xMDcwLDEyICsxMzYyLDEyIEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsCiAgICAgVmFsdWUqIGdsb2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCks
IGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mR2xv
YmFscygpKSk7CiAgICAgc3dpdGNoIChnbG9iYWwuYmluZGluZ01vZGUpIHsKICAgICBjYXNlIFdh
c206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6RW1iZWRkZWRJbkluc3RhbmNlOgot
ICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHRvQjNUeXBlKGdsb2JhbC50eXBlKSwgb3JpZ2luKCksIGdsb2JhbHNBcnJh
eSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAg
IHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCB0b0IzVHlwZShnbG9iYWwudHlwZSksIG9yaWdpbigpLCBnbG9iYWxzQXJyYXks
IHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBv
cnRhYmxlOiB7CiAgICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9i
YWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAgIFZhbHVlKiBwb2lu
dGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCBCMzo6SW50NjQsIG9yaWdpbigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGlu
ZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKGdsb2JhbC50
eXBlKSwgb3JpZ2luKCksIHBvaW50ZXIpOworICAgICAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUoZ2xv
YmFsLnR5cGUpLCBvcmlnaW4oKSwgcG9pbnRlcikpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgfQpAQCAtMTA4OSwxNCArMTM4MSwxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OnNldEdsb2Jh
bCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZQogICAg
IFZhbHVlKiBnbG9iYWxzQXJyYXkgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVl
KCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSkpOwogICAg
IHN3aXRjaCAoZ2xvYmFsLmJpbmRpbmdNb2RlKSB7CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZv
cm1hdGlvbjo6QmluZGluZ01vZGU6OkVtYmVkZGVkSW5JbnN0YW5jZToKLSAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCks
IHZhbHVlLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJl
Z2lzdGVyKSkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgZ2V0KHZhbHVlKSwgZ2xvYmFsc0FycmF5LCBzYWZl
Q2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAgICAgaWYgKGlz
UmVmVHlwZShnbG9iYWwudHlwZSkpCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyRm9ySlNX
cmFwcGVyKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRp
b246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTogewogICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFi
aWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpOwog
ICAgICAgICBWYWx1ZSogcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgQjM6OkludDY0LCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBz
YWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2lu
KCksIHZhbHVlLCBwb2ludGVyKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIGdldCh2YWx1ZSksIHBvaW50ZXIp
OwogICAgICAgICAvLyBXZSBlbWl0IGEgd3JpdGUtYmFycmllciBvbnRvIEpTV2ViQXNzZW1ibHlH
bG9iYWwsIG5vdCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UuCiAgICAgICAgIGlmIChpc1JlZlR5cGUo
Z2xvYmFsLnR5cGUpKSB7CiAgICAgICAgICAgICBWYWx1ZSogaW5zdGFuY2UgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpv
ZmZzZXRPZk93bmVyKCkpKTsKQEAgLTExOTksNyArMTQ5MSw3IEBAIGlubGluZSB2b2lkIEIzSVJH
ZW5lcmF0b3I6OmVtaXRXcml0ZUJhcnJpZXJGb3JKU1dyYXBwZXIoKQogICAgIG1fY3VycmVudEJs
b2NrID0gY29udGludWF0aW9uOwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVt
aXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90
IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQoraW5saW5lIFZhbHVlKiBCM0lSR2Vu
ZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihWYWx1ZSogcG9pbnRlciwgdWludDMy
X3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1fbWVt
b3J5QmFzZUdQUik7CiAKQEAgLTEyNjgsNyArMTU2MCw3IEBAIGlubGluZSBCMzo6S2luZCBCM0lS
R2VuZXJhdG9yOjptZW1vcnlLaW5kKEIzOjpPcGNvZGUgbWVtb3J5T3ApCiAgICAgcmV0dXJuIG1l
bW9yeU9wOwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9h
ZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK2lu
bGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBWYWx1
ZSogcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBpbnQzMl90IG9mZnNldCA9IGZp
eHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CiAKQEAgLTEzMzgsOCArMTYz
MCw5IEBAIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBl
IG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4
cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9m
ZnNldCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5
cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXJWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQs
IHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBwb2ludGVy
ID0gZ2V0KHBvaW50ZXJWYXIpOwogICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIp
OwogCiAgICAgaWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXpl
T2ZMb2FkT3Aob3ApKSkpIHsKQEAgLTEzNTYsNyArMTY0OSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9u
VHlwZSYKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOgogICAgICAgICBjYXNlIExv
YWRPcFR5cGU6OkkzMkxvYWQxNlU6CiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhV
OgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50MzIsIDApOworICAgICAgICAgICAg
cmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQzMiwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhTOgogICAgICAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQ4VToKQEAgLTEzNjUsMTggKzE2NTgsMTggQEAgYXV0byBCM0lSR2VuZXJhdG9y
Ojpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25U
eXBlJgogICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6CiAgICAgICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDoKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZV
OgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50NjQsIDApOworICAgICAgICAgICAg
cmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQ2NCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNv
bnN0YW50KEZsb2F0LCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoRmxv
YXQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkY2
NExvYWQ6Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChEb3VibGUsIDApOworICAgICAg
ICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChEb3VibGUsIDApKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZW1pdExvYWRP
cChvcCwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZM
b2FkT3Aob3ApKSwgb2Zmc2V0KTsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChlbWl0TG9hZE9wKG9w
LCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkxvYWRP
cChvcCkpLCBvZmZzZXQpKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xNDAyLDcgKzE2OTUs
NyBAQCBpbmxpbmUgdWludDMyX3Qgc2l6ZU9mU3RvcmVPcChTdG9yZU9wVHlwZSBvcCkKIH0KIAog
Ci1pbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwg
RXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVv
ZmZzZXQpCitpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlw
ZSBvcCwgVmFsdWUqIHBvaW50ZXIsIFZhbHVlKiB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKIHsK
ICAgICBpbnQzMl90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9m
ZnNldCk7CiAKQEAgLTE0MzcsOCArMTczMCwxMCBAQCBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9y
OjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRQog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRv
cjo6c3RvcmUoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Np
b25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJ
UkdlbmVyYXRvcjo6c3RvcmUoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXJW
YXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlVmFyLCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKKyAgICBWYWx1ZSogcG9pbnRlciA9IGdldChwb2ludGVyVmFyKTsKKyAgICBWYWx1
ZSogdmFsdWUgPSBnZXQodmFsdWVWYXIpOwogICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0g
SW50MzIpOwogCiAgICAgaWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0
LCBzaXplT2ZTdG9yZU9wKG9wKSkpKSB7CkBAIC0xNDY0LDkgKzE3NTksOSBAQCBpbmxpbmUgdWlu
dDMyX3Qgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3MoRXh0QXRvbWljT3BUeXBlIG9wKQogICAg
IHJldHVybiBieXRlc0ZvcldpZHRoKGFjY2Vzc1dpZHRoKG9wKSk7CiB9CiAKLWlubGluZSBWYWx1
ZSogQjNJUkdlbmVyYXRvcjo6c2FuaXRpemVBdG9taWNSZXN1bHQoRXh0QXRvbWljT3BUeXBlIG9w
LCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5cGUgcmVzdWx0KQoraW5saW5lIFZhbHVlKiBC
M0lSR2VuZXJhdG9yOjpzYW5pdGl6ZUF0b21pY1Jlc3VsdChFeHRBdG9taWNPcFR5cGUgb3AsIFR5
cGUgdmFsdWVUeXBlLCBWYWx1ZSogcmVzdWx0KQogewotICAgIGF1dG8gc2FuaXRpemUzMiA9IFsm
XShFeHByZXNzaW9uVHlwZSByZXN1bHQpIHsKKyAgICBhdXRvIHNhbml0aXplMzIgPSBbJl0oVmFs
dWUqIHJlc3VsdCkgewogICAgICAgICBzd2l0Y2ggKGFjY2Vzc1dpZHRoKG9wKSkgewogICAgICAg
ICBjYXNlIEIzOjpXaWR0aDg6CiAgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLCByZXN1bHQsIGNvbnN0YW50
KEludDMyLCAweGZmKSk7CkBAIC0xNDkxLDcgKzE3ODYsNyBAQCBpbmxpbmUgVmFsdWUqIEIzSVJH
ZW5lcmF0b3I6OnNhbml0aXplQXRvbWljUmVzdWx0KEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2
YWx1ZQogICAgIH0KIH0KIAotVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNP
ZmZzZXRGb3JBdG9taWNPcHMoRXh0QXRvbWljT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwdHIs
IHVpbnQzMl90IG9mZnNldCkKK1ZhbHVlKiBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVz
T2Zmc2V0Rm9yQXRvbWljT3BzKEV4dEF0b21pY09wVHlwZSBvcCwgVmFsdWUqIHB0ciwgdWludDMy
X3Qgb2Zmc2V0KQogewogICAgIGF1dG8gcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgcHRyLCBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSk7CiAgICAgaWYg
KGFjY2Vzc1dpZHRoKG9wKSAhPSBCMzo6V2lkdGg4KSB7CkBAIC0xNTA0LDExICsxNzk5LDExIEBA
IFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3Bz
KEV4dEF0b21pY09wVHlwZSBvcCwgRXhwCiAgICAgcmV0dXJuIHBvaW50ZXI7CiB9CiAKLWlubGlu
ZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY0xvYWRPcChFeHRBdG9taWNPcFR5cGUg
b3AsIFR5cGUgdmFsdWVUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCB1b2Zm
c2V0KQoraW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWljTG9hZE9wKEV4dEF0
b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCB1aW50MzJfdCB1
b2Zmc2V0KQogewogICAgIHBvaW50ZXIgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWlj
T3BzKG9wLCBwb2ludGVyLCB1b2Zmc2V0KTsKIAotICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlID0g
bnVsbHB0cjsKKyAgICBWYWx1ZSogdmFsdWUgPSBudWxscHRyOwogICAgIHN3aXRjaCAoYWNjZXNz
V2lkdGgob3ApKSB7CiAgICAgY2FzZSBCMzo6V2lkdGg4OgogICAgIGNhc2UgQjM6OldpZHRoMTY6
CkBAIC0xNTM3LDIyICsxODMyLDIyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljTG9hZChF
eHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBFeHByZXNzaW9uVHlwCiAKICAgICAg
ICAgc3dpdGNoICh2YWx1ZVR5cGUua2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6
Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChJbnQzMiwgMCk7CisgICAgICAgICAgICBy
ZXN1bHQgPSBwdXNoKGNvbnN0YW50KEludDMyLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBUeXBlS2luZDo6STY0OgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQo
SW50NjQsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQ2NCwgMCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZW1pdEF0b21pY0xvYWRPcChvcCwgdmFsdWVU
eXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkF0
b21pY09wTWVtb3J5QWNjZXNzKG9wKSksIG9mZnNldCk7CisgICAgICAgIHJlc3VsdCA9IHB1c2go
ZW1pdEF0b21pY0xvYWRPcChvcCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRl
cihnZXQocG9pbnRlciksIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwg
b2Zmc2V0KSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCi1pbmxpbmUgdm9pZCBCM0lSR2VuZXJh
dG9yOjplbWl0QXRvbWljU3RvcmVPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBl
LCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qg
dW9mZnNldCkKK2lubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNTdG9yZU9wKEV4
dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSog
dmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCiB7CiAgICAgcG9pbnRlciA9IGZpeHVwUG9pbnRlclBs
dXNPZmZzZXRGb3JBdG9taWNPcHMob3AsIHBvaW50ZXIsIHVvZmZzZXQpOwogCkBAIC0xNTczLDEy
ICsxODY4LDEyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljU3RvcmUoRXh0QXRvbWljT3BU
eXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5CiAgICAgICAgICAgICB0aGlzLT5l
bWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFj
Y2Vzcyk7CiAgICAgICAgIH0pOwogICAgIH0gZWxzZQotICAgICAgICBlbWl0QXRvbWljU3RvcmVP
cChvcCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZz
ZXQsIHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNzKG9wKSksIHZhbHVlLCBvZmZzZXQpOworICAg
ICAgICBlbWl0QXRvbWljU3RvcmVPcChvcCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJl
UG9pbnRlcihnZXQocG9pbnRlciksIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mo
b3ApKSwgZ2V0KHZhbHVlKSwgb2Zmc2V0KTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKLWlubGlu
ZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY0JpbmFyeVJNV09wKEV4dEF0b21pY09w
VHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Np
b25UeXBlIHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQoraW5saW5lIFZhbHVlKiBCM0lSR2VuZXJh
dG9yOjplbWl0QXRvbWljQmluYXJ5Uk1XT3AoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVl
VHlwZSwgVmFsdWUqIHBvaW50ZXIsIFZhbHVlKiB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKIHsK
ICAgICBwb2ludGVyID0gZml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhvcCwgcG9p
bnRlciwgdW9mZnNldCk7CiAKQEAgLTE2NjMsMjIgKzE5NTgsMjIgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphdG9taWNCaW5hcnlSTVcoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwg
RXhwcmVzc2kKIAogICAgICAgICBzd2l0Y2ggKHZhbHVlVHlwZS5raW5kKSB7CiAgICAgICAgIGNh
c2UgVHlwZUtpbmQ6OkkzMjoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDMyLCAw
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50MzIsIDApKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJNjQ6Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBjb25zdGFudChJbnQ2NCwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNv
bnN0YW50KEludDY0LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICByZXN1bHQgPSBlbWl0QXRvbWlj
QmluYXJ5Uk1XT3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9p
bnRlciwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCB2YWx1ZSwgb2Zm
c2V0KTsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChlbWl0QXRvbWljQmluYXJ5Uk1XT3Aob3AsIHZh
bHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBvZmZzZXQs
IHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNzKG9wKSksIGdldCh2YWx1ZSksIG9mZnNldCkpOwog
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWND
b21wYXJlRXhjaGFuZ2UoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgZXhwZWN0ZWQsIEV4cHJlc3Npb25UeXBl
IHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQorVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9t
aWNDb21wYXJlRXhjaGFuZ2UoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgVmFs
dWUqIHBvaW50ZXIsIFZhbHVlKiBleHBlY3RlZCwgVmFsdWUqIHZhbHVlLCB1aW50MzJfdCB1b2Zm
c2V0KQogewogICAgIHBvaW50ZXIgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3Bz
KG9wLCBwb2ludGVyLCB1b2Zmc2V0KTsKIApAQCAtMTc4OCwzNiArMjA4Myw0MSBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmF0b21pY0NvbXBhcmVFeGNoYW5nZShFeHRBdG9taWNPcFR5cGUgb3AsIFR5
cGUgdmFsdWVUeXBlLCBFeAogCiAgICAgICAgIHN3aXRjaCAodmFsdWVUeXBlLmtpbmQpIHsKICAg
ICAgICAgY2FzZSBUeXBlS2luZDo6STMyOgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQo
SW50MzIsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQzMiwgMCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6Okk2NDoKLSAgICAg
ICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDY0LCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IHB1c2goY29uc3RhbnQoSW50NjQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGVt
aXRBdG9taWNDb21wYXJlRXhjaGFuZ2Uob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFy
ZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkp
LCBleHBlY3RlZCwgdmFsdWUsIG9mZnNldCk7CisgICAgICAgIHJlc3VsdCA9IHB1c2goZW1pdEF0
b21pY0NvbXBhcmVFeGNoYW5nZShvcCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9p
bnRlcihnZXQocG9pbnRlciksIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3Ap
KSwgZ2V0KGV4cGVjdGVkKSwgZ2V0KHZhbHVlKSwgb2Zmc2V0KSk7CiAKICAgICByZXR1cm4geyB9
OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmF0b21pY1dhaXQoRXh0QXRvbWljT3BUeXBlIG9w
LCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lv
blR5cGUgdGltZW91dCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KSAt
PiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmF0b21pY1dhaXQoRXh0QXRvbWlj
T3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyVmFyLCBFeHByZXNzaW9uVHlwZSB2YWx1
ZVZhciwgRXhwcmVzc2lvblR5cGUgdGltZW91dFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwg
dWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIHBvaW50ZXIg
PSBnZXQocG9pbnRlclZhcik7CisgICAgVmFsdWUqIHZhbHVlID0gZ2V0KHZhbHVlVmFyKTsKKyAg
ICBWYWx1ZSogdGltZW91dCA9IGdldCh0aW1lb3V0VmFyKTsKKyAgICBWYWx1ZSogcmVzdWx0VmFs
dWUgPSBudWxscHRyOwogICAgIGlmIChvcCA9PSBFeHRBdG9taWNPcFR5cGU6Ok1lbW9yeUF0b21p
Y1dhaXQzMikgewotICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEND
YWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAorICAgICAgICByZXN1bHRWYWx1ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3Jp
Z2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbk1lbW9yeUF0b21pY1dhaXQzMikpLAogICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBw
b2ludGVyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgb2Zmc2V0KSwgdmFsdWUsIHRpbWVvdXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJ
bnQzMiwgb3JpZ2luKCksCisgICAgICAgIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWVtb3J5QXRvbWljV2Fp
dDY0KSksCiAgICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCksIHBvaW50ZXIsIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpLCB2
YWx1ZSwgdGltZW91dCk7CiAgICAgfQogCiAgICAgeworICAgICAgICByZXN1bHQgPSBwdXNoKHJl
c3VsdFZhbHVlKTsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3Jp
Z2luKCksIHJlc3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkp
OwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMt
PmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5
QWNjZXNzKTsKQEAgLTE4MjksMTMgKzIxMjksMTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphdG9t
aWNXYWl0KEV4dEF0b21pY09wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmUK
IAogYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWNOb3RpZnkoRXh0QXRvbWljT3BUeXBlLCBFeHBy
ZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSBjb3VudCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBv
cmlnaW4oKSwKKyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NG
dW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1lbW9yeUF0b21pY05vdGlmeSkpLAot
ICAgICAgICBpbnN0YW5jZVZhbHVlKCksIHBvaW50ZXIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpLCBjb3VudCk7Ci0KKyAg
ICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBnZXQocG9pbnRlciksIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpLCBnZXQoY291bnQp
KTsKICAgICB7CisgICAgICAgIHJlc3VsdCA9IHB1c2gocmVzdWx0VmFsdWUpOwogICAgICAgICBD
aGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
bV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsK
KyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVz
c1RoYW4sIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGpp
dCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOwpAQCAtMTg1MSw4ICsy
MTUxLDkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWNGZW5jZShFeHRBdG9taWNPcFR5cGUs
IHVpbnQ4X3QpIC0+IFBhcnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIz
SVJHZW5lcmF0b3I6OnRydW5jU2F0dXJhdGVkKEV4dDFPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgVHlwZSByZXR1cm5UeXBlLCBUeXBlKSAtPiBQ
YXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OnRydW5jU2F0dXJhdGVkKEV4dDFPcFR5
cGUgb3AsIEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgVHlw
ZSByZXR1cm5UeXBlLCBUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9
IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXhGbG9hdCA9IG51bGxwdHI7CiAgICAgVmFsdWUq
IG1pbkZsb2F0ID0gbnVsbHB0cjsKICAgICBWYWx1ZSogc2lnbkJpdENvbnN0YW50ID0gbnVsbHB0
cjsKQEAgLTIwMDIsMjYgKzIzMDMsMjYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjp0cnVuY1NhdHVy
YXRlZChFeHQxT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb24KICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwKKyAgICByZXN1bHQgPSBwdXNo
KG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3Jp
Z2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
R3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbkZsb2F0KSwKICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwKICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1Ro
YW4sIG9yaWdpbigpLCBhcmcsIG1heEZsb2F0KSwKICAgICAgICAgICAgIHBhdGNocG9pbnQsIG1h
eFJlc3VsdCksCi0gICAgICAgIHJlcXVpcmVzTmFOQ2hlY2sgPyBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgYXJnLCBhcmcpLCBt
aW5SZXN1bHQsIHplcm8pIDogbWluUmVzdWx0KTsKKyAgICAgICAgcmVxdWlyZXNOYU5DaGVjayA/
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3Jp
Z2luKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9y
aWdpbigpLCBhcmcsIGFyZyksIG1pblJlc3VsdCwgemVybykgOiBtaW5SZXN1bHQpKTsKIAogICAg
IHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUg
emVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVj
dCwgb3JpZ2luKCksIGNvbmRpdGlvbiwgbm9uWmVybywgemVybyk7CisgICAgcmVzdWx0ID0gcHVz
aChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9y
aWdpbigpLCBnZXQoY29uZGl0aW9uKSwgZ2V0KG5vblplcm8pLCBnZXQoemVybykpKTsKICAgICBy
ZXR1cm4geyB9OwogfQogCiBCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBCM0lSR2VuZXJh
dG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKQogewogCi0gICAgcmV0
dXJuIGNvbnN0YW50KHRvQjNUeXBlKHR5cGUpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHB1c2goY29u
c3RhbnQodG9CM1R5cGUodHlwZSksIHZhbHVlKSk7CiB9CiAKIHZvaWQgQjNJUkdlbmVyYXRvcjo6
ZW1pdEVudHJ5VGllclVwQ2hlY2soKQpAQCAtMjA4MiwyMCArMjM4MywyMSBAQCB2b2lkIEIzSVJH
ZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4LCBjb25zdCBT
dGFjayYgZW5jbG9zaQogCiAgICAgVmFsdWUqIGNvdW50RG93bkxvY2F0aW9uID0gY29uc3RhbnQo
cG9pbnRlclR5cGUoKSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJm1fdGllclVwLT5tX2NvdW50
ZXIpLCBvcmlnaW4pOwogCi0gICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBzdGFja21hcDsKLSAg
ICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpIHsKLSAgICAgICAgVmFsdWUqIHJlc3VsdCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0
LCBvcmlnaW4sIGxvY2FsKTsKLSAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHJlc3VsdCk7Ci0gICAg
fQorICAgIFZlY3RvcjxWYWx1ZSo+IHN0YWNrbWFwOworICAgIGZvciAoYXV0byYgbG9jYWwgOiBt
X2xvY2FscykKKyAgICAgICAgc3RhY2ttYXAuYXBwZW5kKGdldChsb2NhbCkpOwogICAgIGZvciAo
dW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRy
b2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgYXV0byYgZGF0YSA9
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOwogICAg
ICAgICBhdXRvJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29u
dHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKICAgICAgICAgZm9yIChUeXBlZEV4
cHJlc3Npb24gdmFsdWUgOiBleHByZXNzaW9uU3RhY2spCi0gICAgICAgICAgICBzdGFja21hcC5h
cHBlbmQodmFsdWUpOworICAgICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKGdldCh2YWx1ZSkpOwor
ICAgICAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpCisgICAgICAgICAgICBz
dGFja21hcC5hcHBlbmQoZ2V0KGRhdGEuZXhjZXB0aW9uKCkpKTsKICAgICB9CiAgICAgZm9yIChU
eXBlZEV4cHJlc3Npb24gdmFsdWUgOiBlbmNsb3NpbmdTdGFjaykKLSAgICAgICAgc3RhY2ttYXAu
YXBwZW5kKHZhbHVlKTsKKyAgICAgICAgc3RhY2ttYXAuYXBwZW5kKGdldCh2YWx1ZSkpOwogICAg
IGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVlIDogbmV3U3RhY2spCi0gICAgICAgIHN0YWNrbWFw
LmFwcGVuZCh2YWx1ZSk7CisgICAgICAgIHN0YWNrbWFwLmFwcGVuZChnZXQodmFsdWUpKTsKIAog
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBh
dGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKTsKICAgICBFZmZlY3RzIGVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CkBAIC0yMTQwLDkzICsyNDQyLDcyIEBAIHZvaWQgQjNJ
UkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgsIGNvbnN0
IFN0YWNrJiBlbmNsb3NpCiAgICAgfSk7CiB9CiAKK1ZhbHVlKiBCM0lSR2VuZXJhdG9yOjpsb2Fk
RnJvbVNjcmF0Y2hCdWZmZXIodW5zaWduZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBwb2ludGVy
LCBCMzo6VHlwZSB0eXBlKQoreworICAgIHNpemVfdCBvZmZzZXQgPSBzaXplb2YodWludDY0X3Qp
ICogaW5kZXhJbkJ1ZmZlcisrOworICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUuaXNOdW1lcmljKCkp
OworICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIHR5cGUsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworfQorCit2b2lkIEIz
SVJHZW5lcmF0b3I6OmNvbm5lY3RDb250cm9sRW50cnkodW5zaWduZWQmIGluZGV4SW5CdWZmZXIs
IFZhbHVlKiBwb2ludGVyLCBDb250cm9sRGF0YSYgZGF0YSwgU3RhY2smIGV4cHJlc3Npb25TdGFj
aywgQ29udHJvbERhdGEmIGN1cnJlbnREYXRhLCBib29sIGZpbGxMb29wUGhpcykKK3sKKyAgICAv
LyBGb3IgZWFjaCBzdGFjayBlbnRyeSBlbmNsb3NlZCBieSB0aGlzIGxvb3Agd2UgbmVlZCB0byBy
ZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIGEgcGhpIHNvIHdlIGNhbiBmaWxsIGl0IG9uIE9TUiBlbnRy
eS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA9IGV4cHJlc3Npb25TdGFja1tp
XTsKKyAgICAgICAgYXV0byogbG9hZCA9IGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihpbmRleEluQnVm
ZmVyLCBwb2ludGVyLCB2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgaWYgKGZpbGxMb29wUGhpcykK
KyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBsb2FkLCBkYXRhLnBoaXNbaV0pOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0
LCBvcmlnaW4oKSwgdmFsdWUudmFsdWUoKSwgbG9hZCk7CisgICAgfQorICAgIGlmIChDb250cm9s
VHlwZTo6aXNBbnlDYXRjaChkYXRhKSAmJiAmZGF0YSAhPSAmY3VycmVudERhdGEpIHsKKyAgICAg
ICAgYXV0byogbG9hZCA9IGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihpbmRleEluQnVmZmVyLCBwb2lu
dGVyLCBwb2ludGVyVHlwZSgpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgb3JpZ2luKCksIGRhdGEuZXhjZXB0aW9uKCksIGxv
YWQpOworICAgIH0KK307CisKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25h
dHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIGJsb2Nr
LCBTdGFjayYgbmV3U3RhY2ssIHVpbnQzMl90IGxvb3BJbmRleCkgLT4gUGFydGlhbFJlc3VsdAog
ewogICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICBCYXNpY0Js
b2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKIAotICAgIGJsb2NrID0gQ29u
dHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6Okxvb3AsIGNv
bnRpbnVhdGlvbiwgYm9keSk7CisgICAgYmxvY2sgPSBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdp
bigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6TG9vcCwgbV9zdGFja1NpemUsIGNvbnRpbnVhdGlv
biwgYm9keSk7CisKICAgICB1bnNpZ25lZCBvZmZzZXQgPSBlbmNsb3NpbmdTdGFjay5zaXplKCkg
LSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAgICBUeXBlZEV4cHJl
c3Npb24gdmFsdWUgPSBlbmNsb3NpbmdTdGFjay5hdChvZmZzZXQgKyBpKTsKLSAgICAgICAgYXV0
byogdXBzaWxvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCB2YWx1ZSk7CiAgICAgICAgIFZhbHVlKiBwaGkgPSBibG9jay5waGlzW2ld
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgZ2V0KHZhbHVlKSwgcGhpKTsKICAgICAgICAgYm9keS0+YXBwZW5kKHBoaSk7
Ci0gICAgICAgIHVwc2lsb24tPnNldFBoaShwaGkpOwotICAgICAgICBuZXdTdGFjay5jb25zdHJ1
Y3RBbmRBcHBlbmQodmFsdWUudHlwZSgpLCBwaGkpOworICAgICAgICBzZXQoYm9keSwgdmFsdWUs
IHBoaSk7CisgICAgICAgIG5ld1N0YWNrLmFwcGVuZCh2YWx1ZSk7CiAgICAgfQorICAgIGVuY2xv
c2luZ1N0YWNrLnNocmluayhvZmZzZXQpOwogCiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBib2R5KTsKICAgICBpZiAobG9v
cEluZGV4ID09IG1fbG9vcEluZGV4Rm9yT1NSRW50cnkpIHsKICAgICAgICAgZGF0YUxvZ0xuSWYo
V2FzbUIzSVJHZW5lcmF0b3JJbnRlcm5hbDo6dmVyYm9zZSwgIlNldHRpbmcgdXAgZm9yIE9TUiBl
bnRyeSIpOwogCi0gICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9yb290QmxvY2s7Ci0gICAgICAg
IFZhbHVlKiBwb2ludGVyID0gbV9yb290QmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
PihtX3Byb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IG1fcm9vdEJsb2Nrc1swXTsKKyAgICAgICAgVmFsdWUqIHBvaW50ZXIgPSBt
X3Jvb3RCbG9ja3NbMF0tPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihtX3Byb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogCiAgICAgICAgIHVuc2lnbmVkIGluZGV4SW5C
dWZmZXIgPSAwOwotICAgICAgICBhdXRvIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlciA9IFsmXSAoQjM6
OlR5cGUgdHlwZSkgewotICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHNpemVvZih1aW50NjRf
dCkgKiBpbmRleEluQnVmZmVyKys7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0eXBlLmlz
TnVtZXJpYygpKTsKLSAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHR5cGUsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZz
ZXQpOwotICAgICAgICB9OwogCiAgICAgICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykK
LSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9w
cm9jLCBTZXQsIE9yaWdpbigpLCBsb2NhbCwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKGxvY2FsLT50
eXBlKCkpKTsKLQotICAgICAgICBhdXRvIGNvbm5lY3RDb250cm9sRW50cnkgPSBbJl0oY29uc3Qg
Q29udHJvbERhdGEmIGRhdGEsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spIHsKLSAgICAgICAgICAg
IC8vIEZvciBlYWNoIHN0YWNrIGVudHJ5IGVuY2xvc2VkIGJ5IHRoaXMgbG9vcCB3ZSBuZWVkIHRv
IHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggYSBwaGkgc28gd2UgY2FuIGZpbGwgaXQgb24gT1NSIGVu
dHJ5LgotICAgICAgICAgICAgQmFzaWNCbG9jayogc291cmNlQmxvY2sgPSBudWxscHRyOwotICAg
ICAgICAgICAgdW5zaWduZWQgYmxvY2tJbmRleCA9IDA7Ci0gICAgICAgICAgICBCMzo6SW5zZXJ0
aW9uU2V0IGluc2VydGlvblNldChtX3Byb2MpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAg
IFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA9IGV4cHJlc3Npb25TdGFja1tpXTsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWUtPmlzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgICAgICAgICArK2lu
ZGV4SW5CdWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3duZXIgIT0gc291cmNlQmxvY2sp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZUJsb2NrKQotICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc291cmNlQmxvY2spOwotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbklmKFdhc21CM0lSR2VuZXJhdG9ySW50ZXJuYWw6OnZlcmJvc2UgJiYgc291
cmNlQmxvY2ssICJFeGVjdXRlZCBpbnNlcnRpb24gc2V0IGludG86ICIsICpzb3VyY2VCbG9jayk7
Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXggPSAwOwotICAgICAgICAgICAgICAgICAg
ICBzb3VyY2VCbG9jayA9IHZhbHVlLT5vd25lcjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICB3aGlsZSAoc291cmNlQmxvY2stPmF0KGJsb2NrSW5kZXgrKykgIT0gdmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9ja0luZGV4IDwgc291cmNlQmxvY2stPnNp
emUoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNvdXJjZUJsb2NrLT5hdChibG9ja0luZGV4
IC0gMSkgPT0gdmFsdWUpOwotCi0gICAgICAgICAgICAgICAgYXV0byogcGhpID0gZGF0YS5jb250
aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksICB2YWx1ZS0+dHlwZSgpLCB2
YWx1ZS0+b3JpZ2luKCkpOwotICAgICAgICAgICAgICAgIGV4cHJlc3Npb25TdGFja1tpXSA9IFR5
cGVkRXhwcmVzc2lvbiB7IHZhbHVlLnR5cGUoKSwgcGhpIH07Ci0gICAgICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgdmFsdWUtPm9yaWdp
bigpLCBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIodmFsdWUtPnR5cGUoKSksIHBoaSk7Ci0KLSAgICAg
ICAgICAgICAgICBhdXRvKiBzb3VyY2VVcHNpbG9uID0gbV9wcm9jLmFkZDxVcHNpbG9uVmFsdWU+
KHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIHBoaSk7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydFZhbHVlKGJsb2NrSW5kZXgsIHNvdXJjZVVwc2lsb24pOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKHNvdXJjZUJsb2NrKQotICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5leGVjdXRlKHNvdXJjZUJsb2NrKTsKLSAgICAgICAgfTsKKyAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigp
LCBsb2NhbCwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIGxv
Y2FsLT50eXBlKCkpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7
IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJv
bEluZGV4KSB7CiAgICAgICAgICAgICBhdXRvJiBkYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFj
aygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7CiAgICAgICAgICAgICBhdXRvJiBleHByZXNz
aW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3Nl
ZEV4cHJlc3Npb25TdGFjazsKLSAgICAgICAgICAgIGNvbm5lY3RDb250cm9sRW50cnkoZGF0YSwg
ZXhwcmVzc2lvblN0YWNrKTsKKyAgICAgICAgICAgIGNvbm5lY3RDb250cm9sRW50cnkoaW5kZXhJ
bkJ1ZmZlciwgcG9pbnRlciwgZGF0YSwgZXhwcmVzc2lvblN0YWNrLCBibG9jayk7CiAgICAgICAg
IH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRD
b3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA9IGVuY2xv
c2luZ1N0YWNrLmF0KG9mZnNldCArIGkpOwotICAgICAgICAgICAgVmFsdWUqIHBoaSA9IGJsb2Nr
LnBoaXNbaV07Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25W
YWx1ZT4obV9wcm9jLCB2YWx1ZS0+b3JpZ2luKCksIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcih2YWx1
ZS0+dHlwZSgpKSwgcGhpKTsKLSAgICAgICAgfQotICAgICAgICBlbmNsb3NpbmdTdGFjay5zaHJp
bmsob2Zmc2V0KTsKLSAgICAgICAgY29ubmVjdENvbnRyb2xFbnRyeShibG9jaywgZW5jbG9zaW5n
U3RhY2spOworICAgICAgICBjb25uZWN0Q29udHJvbEVudHJ5KGluZGV4SW5CdWZmZXIsIHBvaW50
ZXIsIGJsb2NrLCBlbmNsb3NpbmdTdGFjaywgYmxvY2spOworICAgICAgICBjb25uZWN0Q29udHJv
bEVudHJ5KGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIGJsb2NrLCBuZXdTdGFjaywgYmxvY2ssIHRy
dWUpOwogCiAgICAgICAgIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IGluZGV4SW5CdWZm
ZXI7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBKdW1wLCBvcmlnaW4oKSwgYm9keSk7CiAgICAgICAgIGJvZHktPmFkZFByZWRlY2Vzc29yKG1f
Y3VycmVudEJsb2NrKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZW5jbG9zaW5nU3RhY2suc2hyaW5r
KG9mZnNldCk7CisgICAgfQogCiAgICAgbV9jdXJyZW50QmxvY2sgPSBib2R5OwogICAgIGVtaXRM
b29wVGllclVwQ2hlY2sobG9vcEluZGV4LCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwpAQCAt
MjIzNSw3ICsyNTE2LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0
dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb24KIAogQjNJUkdlbmVyYXRv
cjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUg
c2lnbmF0dXJlKQogewotICAgIHJldHVybiBDb250cm9sRGF0YShtX3Byb2MsIE9yaWdpbigpLCBz
aWduYXR1cmUsIEJsb2NrVHlwZTo6VG9wTGV2ZWwsIG1fcHJvYy5hZGRCbG9jaygpKTsKKyAgICBy
ZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBPcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6
OlRvcExldmVsLCBtX3N0YWNrU2l6ZSwgbV9wcm9jLmFkZEJsb2NrKCkpOwogfQogCiBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZEJsb2NrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVu
Y2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgbmV3QmxvY2ssIFN0YWNrJiBuZXdTdGFjaykgLT4g
UGFydGlhbFJlc3VsdApAQCAtMjI0Myw3ICsyNTI0LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRCbG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywg
Q28KICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKIAog
ICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwotICAg
IG5ld0Jsb2NrID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9j
a1R5cGU6OkJsb2NrLCBjb250aW51YXRpb24pOworICAgIG5ld0Jsb2NrID0gQ29udHJvbERhdGEo
bV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OkJsb2NrLCBtX3N0YWNrU2l6
ZSwgY29udGludWF0aW9uKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0yMjU1LDIwICsyNTM2
LDIwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0CiAgICAgQmFzaWNCbG9jayogbm90VGFrZW4g
PSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3By
b2MuYWRkQmxvY2soKTsKIAotICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGNvbmRpdGlvbik7CisgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgZ2V0KGNv
bmRpdGlvbikpOwogICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRC
bG9jayh0YWtlbiksIEZyZXF1ZW50ZWRCbG9jayhub3RUYWtlbikpOwogICAgIHRha2VuLT5hZGRQ
cmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CiAgICAgbm90VGFrZW4tPmFkZFByZWRlY2Vzc29y
KG1fY3VycmVudEJsb2NrKTsKIAogICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47CiAgICAgc3Bs
aXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7Ci0gICAgcmVzdWx0
ID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6Oklm
LCBjb250aW51YXRpb24sIG5vdFRha2VuKTsKKyAgICByZXN1bHQgPSBDb250cm9sRGF0YShtX3By
b2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6SWYsIG1fc3RhY2tTaXplLCBjb250
aW51YXRpb24sIG5vdFRha2VuKTsKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IFN0YWNrJiBjdXJyZW50U3Rh
Y2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50
U3RhY2ssIGRhdGEucGhpcyk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNr
LCBkYXRhKTsKICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJv
YywgSnVtcCwgb3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsKICAgICByZXR1cm4gYWRkRWxz
ZVRvVW5yZWFjaGFibGUoZGF0YSk7CiB9CkBAIC0yMjc2LDExICsyNTU3LDI1MyBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IFN0YWNrJiBjdXJy
ZW50U3RhY2spIC0+IFBhcgogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJs
ZShDb250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChkYXRh
LmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOworICAgIG1fc3RhY2tTaXplID0gZGF0YS5z
dGFja1NpemUoKSArIGRhdGEubV9zaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBtX2N1
cnJlbnRCbG9jayA9IGRhdGEuc3BlY2lhbDsKICAgICBkYXRhLmNvbnZlcnRJZlRvQmxvY2soKTsK
ICAgICByZXR1cm4geyB9OwogfQogCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRyeShCbG9ja1Np
Z25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJl
c3VsdCwgU3RhY2smIG5ld1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgKyttX3RyeURl
cHRoOworCisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7
CisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7Cisg
ICAgcmVzdWx0ID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9j
a1R5cGU6OlRyeSwgbV9zdGFja1NpemUsIGNvbnRpbnVhdGlvbiwgKyttX2NhbGxTaXRlSW5kZXgs
IG1fdHJ5RGVwdGgpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLCBTdGFjayYgY3VycmVudFN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYg
cmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1
cnJlbnRTdGFjaywgZGF0YSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgcmV0
dXJuIGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRleCwgc2lnbmF0dXJlLCBkYXRh
LCByZXN1bHRzKTsKK30KKworUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBCM0lSR2VuZXJhdG9y
OjpwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoQmFzaWNCbG9jayogYmxvY2ssIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2gpCit7CisgICAgKyttX2NhbGxTaXRlSW5kZXg7CisgICAgaWYgKCFt
X3RyeURlcHRoKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPFZhbHVlKj4gc3Rh
Y2ttYXA7CisgICAgT3JpZ2luIG9yaWdpbiA9IHRoaXMtPm9yaWdpbigpOworICAgIGZvciAoVmFy
aWFibGUqIGxvY2FsIDogbV9sb2NhbHMpIHsKKyAgICAgICAgVmFsdWUqIHJlc3VsdCA9IGJsb2Nr
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBvcmlnaW4sIGxvY2Fs
KTsKKyAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHJlc3VsdCk7CisgICAgfQorICAgIGZvciAodW5z
aWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xT
dGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgQ29udHJvbERhdGEmIGRh
dGEgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsK
KyAgICAgICAgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2so
KVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBmb3IgKFZh
cmlhYmxlKiB2YWx1ZSA6IGV4cHJlc3Npb25TdGFjaykKKyAgICAgICAgICAgIHN0YWNrbWFwLmFw
cGVuZChnZXQoYmxvY2ssIHZhbHVlKSk7CisgICAgICAgIGlmIChDb250cm9sVHlwZTo6aXNBbnlD
YXRjaChkYXRhKSkKKyAgICAgICAgICAgIHN0YWNrbWFwLmFwcGVuZChnZXQoYmxvY2ssIGRhdGEu
ZXhjZXB0aW9uKCkpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBwYXRjaC0+bnVt
Q2hpbGRyZW4oKTsKKyAgICBpZiAocGF0Y2gtPnR5cGUoKSAhPSBWb2lkKQorICAgICAgICBvZmZz
ZXQrKzsKKworICAgIHBhdGNoLT5lZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOworICAgIHBh
dGNoLT5hcHBlbmRWZWN0b3JXaXRoUmVwKHN0YWNrbWFwLCBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkp
OworCisgICAgcmV0dXJuIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgeyBtX2NhbGxTaXRlSW5k
ZXgsIG9mZnNldCB9OworfQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNo
YWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgVmFsdWUqIG9wZXJhdGlvblJlc3VsdCA9IGVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5k
OjpDYXRjaCwgZGF0YSwgZXhjZXB0aW9uSW5kZXgpOworICAgIFZhbHVlKiBwYXlsb2FkID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxFeHRyYWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBv
aW50ZXJUeXBlKCksIG9wZXJhdGlvblJlc3VsdCwgMSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBUeXBlIHR5
cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoaSk7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUo
dHlwZSksIG9yaWdpbigpLCBwYXlsb2FkLCBpICogc2l6ZW9mKHVpbnQ2NF90KSk7CisgICAgICAg
IHJlc3VsdHMuYXBwZW5kKHB1c2godmFsdWUpKTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30K
KworYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYXRjaEFsbChTdGFjayYgY3VycmVudFN0YWNrLCBD
b250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0
aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0YSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7
CisgICAgcmV0dXJuIGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShkYXRhKTsKK30KKworYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGRhdGEp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBlbWl0Q2F0Y2hJbXBsKENhdGNoS2luZDo6Q2F0Y2hB
bGwsIGRhdGEpOworICAgIHJldHVybiB7IH07Cit9CisKK1ZhbHVlKiBCM0lSR2VuZXJhdG9yOjpl
bWl0Q2F0Y2hJbXBsKENhdGNoS2luZCBraW5kLCBDb250cm9sVHlwZSYgZGF0YSwgdW5zaWduZWQg
ZXhjZXB0aW9uSW5kZXgpCit7CisgICAgbV9oYXNDYXRjaCA9IHRydWU7CisgICAgbV9jdXJyZW50
QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICBtX3Jvb3RCbG9ja3MuYXBwZW5kKG1fY3Vy
cmVudEJsb2NrKTsKKyAgICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCk7CisKKyAgICBp
ZiAoQ29udHJvbFR5cGU6OmlzVHJ5KGRhdGEpKSB7CisgICAgICAgIGlmIChraW5kID09IENhdGNo
S2luZDo6Q2F0Y2gpCisgICAgICAgICAgICBkYXRhLmNvbnZlcnRUcnlUb0NhdGNoKCsrbV9jYWxs
U2l0ZUluZGV4LCBtX3Byb2MuYWRkVmFyaWFibGUocG9pbnRlclR5cGUoKSkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBkYXRhLmNvbnZlcnRUcnlUb0NhdGNoQWxsKCsrbV9jYWxsU2l0ZUlu
ZGV4LCBtX3Byb2MuYWRkVmFyaWFibGUocG9pbnRlclR5cGUoKSkpOworICAgIH0KKworICAgIEhh
bmRsZXJUeXBlIGhhbmRsZXJUeXBlID0ga2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoID8gSGFuZGxl
clR5cGU6OkNhdGNoIDogSGFuZGxlclR5cGU6OkNhdGNoQWxsOworICAgIG1fZXhjZXB0aW9uSGFu
ZGxlcnMuYXBwZW5kKHsgaGFuZGxlclR5cGUsIGRhdGEudHJ5U3RhcnQoKSwgZGF0YS50cnlFbmQo
KSwgMCwgbV90cnlEZXB0aCwgZXhjZXB0aW9uSW5kZXggfSk7CisKKyAgICByZXN0b3JlV2ViQXNz
ZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVt
b3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIGZhbHNlKTsKKwor
ICAgIFZhbHVlKiBwb2ludGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworCisgICAg
dW5zaWduZWQgaW5kZXhJbkJ1ZmZlciA9IDA7CisKKyAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9s
b2NhbHMpCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4o
bV9wcm9jLCBTZXQsIE9yaWdpbigpLCBsb2NhbCwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKGluZGV4
SW5CdWZmZXIsIHBvaW50ZXIsIGxvY2FsLT50eXBlKCkpKTsKKworICAgIGZvciAodW5zaWduZWQg
Y29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygp
LnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgYXV0byYgY29udHJvbERhdGEgPSBt
X3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKKyAgICAg
ICAgYXV0byYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRy
b2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGNvbm5lY3RDb250cm9s
RW50cnkoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgY29udHJvbERhdGEsIGV4cHJlc3Npb25TdGFj
aywgZGF0YSk7CisgICAgfQorCisgICAgUGF0Y2hwb2ludFZhbHVlKiByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBtX3Byb2MuYWRkVHVw
bGUoeyBwb2ludGVyVHlwZSgpLCBwb2ludGVyVHlwZSgpIH0pLCBvcmlnaW4oKSk7CisgICAgcmVz
dWx0LT5lZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOworICAgIHJlc3VsdC0+Y2xvYmJlcihS
ZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgIFJlZ2lzdGVyU2V0IGNs
b2JiZXJMYXRlID0gUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCk7Cisg
ICAgY2xvYmJlckxhdGUuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcmVzdWx0LT5j
bG9iYmVyTGF0ZShjbG9iYmVyTGF0ZSk7CisgICAgcmVzdWx0LT5hcHBlbmQoaW5zdGFuY2VWYWx1
ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICByZXN1bHQtPnJlc3VsdENvbnN0cmFp
bnRzLmFwcGVuZChWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAg
cmVzdWx0LT5yZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIpKTsKKyAgICByZXN1bHQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Cisg
ICAgICAgIGppdC5tb3ZlKHBhcmFtc1syXS5ncHIoKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJU
YWcpOworICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0
Y2hhYmxlKSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgVmFsdWUqIGV4Y2VwdGlvbiA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBwb2ludGVyVHlwZSgpLCByZXN1bHQsIDApOworICAgIHNldChkYXRhLmV4Y2VwdGlvbigpLCBl
eGNlcHRpb24pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYXV0byBCM0lSR2VuZXJhdG9y
OjphZGREZWxlZ2F0ZShDb250cm9sVHlwZSYgdGFyZ2V0LCBDb250cm9sVHlwZSYgZGF0YSkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUodGFy
Z2V0LCBkYXRhKTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFj
aGFibGUoQ29udHJvbFR5cGUmIHRhcmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICB1bnNpZ25lZCB0YXJnZXREZXB0aCA9IDA7CisgICAgaWYgKENvbnRyb2xU
eXBlOjppc1RyeSh0YXJnZXQpKQorICAgICAgICB0YXJnZXREZXB0aCA9IHRhcmdldC50cnlEZXB0
aCgpOworCisgICAgbV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoeyBIYW5kbGVyVHlwZTo6RGVs
ZWdhdGUsIGRhdGEudHJ5U3RhcnQoKSwgKyttX2NhbGxTaXRlSW5kZXgsIDAsIG1fdHJ5RGVwdGgs
IHRhcmdldERlcHRoIH0pOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkVGhyb3codW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIFN0YWNrJikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2ggPSBtX3Byb2MuYWRkPFBhdGNocG9pbnRWYWx1ZT4oQjM6OlZvaWQsIG9yaWdpbigp
KTsKKyAgICBwYXRjaC0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7CisgICAgcGF0Y2gtPmFwcGVu
ZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQorICAgICAgICBwYXRjaC0+YXBwZW5k
KGdldChhcmdzW2ldKSwgVmFsdWVSZXA6OnN0YWNrQXJndW1lbnQoaSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpKTsKKyAgICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNo
UmVnaXN0ZXJzKCkpOworICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJMYXRlID0gUmVnaXN0ZXJTZXQ6
OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCk7CisgICAgY2xvYmJlckxhdGUuYWRkKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2xvYmJlckxhdGUuYWRkKEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgY2xvYmJlckxhdGUuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAg
Y2xvYmJlckxhdGUuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgcGF0Y2gtPmNsb2Ji
ZXJMYXRlKGNsb2JiZXJMYXRlKTsKKyAgICBwYXRjaC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0g
MTsKKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBv
aW50Rm9yRXhjZXB0aW9ucyhtX2N1cnJlbnRCbG9jaywgcGF0Y2gpOworICAgIHBhdGNoLT5zZXRH
ZW5lcmF0b3IoW3RoaXMsIGV4Y2VwdGlvbkluZGV4LCBoYW5kbGVdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2ggPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICBoYW5kbGUu
Z2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOworCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZk93bmVy
KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBwcmVjaXNlQWxsb2Nh
dGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0
Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxp
Z25tZW50KSk7CisgICAgICAgICAgICBqaXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgTWFya2VkQmxvY2s6Om9mZnNl
dE9mRm9vdGVyICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgc2NyYXRjaCk7
CisgICAgICAgICAgICBhdXRvIGxvYWRlZENhc2UgPSBqaXQuanVtcCgpOworCisgICAgICAgICAg
ICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluaygmaml0KTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zm
c2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlv
bjo6aGVhZGVyU2l6ZSgpKSwgc2NyYXRjaCk7CisKKyAgICAgICAgICAgIGxvYWRlZENhc2UubGlu
aygmaml0KTsKKyAgICAgICAgfQorICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihzY3JhdGNoKTsKKworICAgICAgICBqaXQubW92ZShwYXJh
bXNbMF0uZ3ByKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4Y2VwdGlvbkluZGV4KSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAg
ICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVy
UHRyVGFnKTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVRocm93KSk7CisgICAgICAgIH0pOworICAg
IH0pOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocGF0Y2gpOworCisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9s
VHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0
Y2ggPSBtX3Byb2MuYWRkPFBhdGNocG9pbnRWYWx1ZT4oQjM6OlZvaWQsIG9yaWdpbigpKTsKKyAg
ICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwor
ICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJMYXRlOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIHBh
dGNoLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1ZTsKKyAgICBwYXRjaC0+YXBwZW5kKGluc3RhbmNl
VmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2gtPmFwcGVuZFNvbWVS
ZWdpc3RlcihmcmFtZVBvaW50ZXIoKSk7CisgICAgcGF0Y2gtPmFwcGVuZChnZXQoZGF0YS5leGNl
cHRpb24oKSksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNoLT5udW1HUFNjcmF0
Y2hSZWdpc3RlcnMgPSAxOworICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0g
cHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKG1fY3VycmVudEJsb2NrLCBwYXRjaCk7Cisg
ICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpcywgaGFuZGxlXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2ggPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zm
c2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcHJl
Y2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25a
ZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxsb2NhdGlv
bjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIE1hcmtlZEJs
b2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSks
IHNjcmF0Y2gpOworICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKKwor
ICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgUHJlY2lzZUFsbG9j
YXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lz
ZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOworCisgICAgICAgICAgICBsb2Fk
ZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7CisKKyAgICAgICAgaml0
Lm1vdmUocGFyYW1zWzBdLmdwcigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBq
aXQubW92ZShwYXJhbXNbMV0uZ3ByKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAg
IGppdC5tb3ZlKHBhcmFtc1syXS5ncHIoKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICAg
ICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQu
ZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7
CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbldhc21SZXRocm93KSk7CisgICAgICAgIH0pOworICAgIH0pOwor
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocGF0Y2gpOworCisgICAgcmV0dXJuIHsgfTsKK30K
KwogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25z
dCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ2FsbEluZm9y
bWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1h
dGlvbkZvcihtX3BhcnNlci0+c2lnbmF0dXJlKCksIENhbGxSb2xlOjpDYWxsZWUpOwpAQCAtMjMw
MCwxMCArMjgyMywxMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250
cm9sRGF0YSYsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+CiAgICAgICAgIEIzOjpWYWx1
ZVJlcCByZXAgPSB3YXNtQ2FsbEluZm8ucmVzdWx0c1tpXTsKICAgICAgICAgaWYgKHJlcC5pc1N0
YWNrKCkpIHsKICAgICAgICAgICAgIEIzOjpWYWx1ZSogYWRkcmVzcyA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpBZGQsIE9yaWdpbigpLCBmcmFtZVBv
aW50ZXIoKSwgY29uc3RhbnQocG9pbnRlclR5cGUoKSwgcmVwLm9mZnNldEZyb21GUCgpKSk7Ci0g
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4obV9w
cm9jLCBCMzo6U3RvcmUsIE9yaWdpbigpLCByZXR1cm5WYWx1ZXNbb2Zmc2V0ICsgaV0sIGFkZHJl
c3MpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6TWVtb3J5VmFs
dWU+KG1fcHJvYywgQjM6OlN0b3JlLCBPcmlnaW4oKSwgZ2V0KHJldHVyblZhbHVlc1tvZmZzZXQg
KyBpXSksIGFkZHJlc3MpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKHJl
cC5pc1JlZygpKTsKLSAgICAgICAgICAgIHBhdGNoLT5hcHBlbmQocmV0dXJuVmFsdWVzW29mZnNl
dCArIGldLCByZXApOworICAgICAgICAgICAgcGF0Y2gtPmFwcGVuZChnZXQocmV0dXJuVmFsdWVz
W29mZnNldCArIGldKSwgcmVwKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjMxMywxMiArMjgz
NiwxMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYs
IGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
QnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0
IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICB1bmlmeVZhbHVl
c1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMsIGRhdGEucGhpcyk7CisgICAgdW5pZnlWYWx1ZXNXaXRo
QmxvY2socmV0dXJuVmFsdWVzLCBkYXRhKTsKIAogICAgIEJhc2ljQmxvY2sqIHRhcmdldCA9IGRh
dGEudGFyZ2V0QmxvY2tGb3JCcmFuY2goKTsKICAgICBpZiAoY29uZGl0aW9uKSB7CiAgICAgICAg
IEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdp
bigpLCBjb25kaXRpb24pOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBnZXQoY29uZGl0aW9uKSk7CiAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQpLCBG
cmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CiAgICAgICAgIHRhcmdldC0+YWRkUHJlZGVj
ZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgICAgICBjb250aW51YXRpb24tPmFkZFByZWRlY2Vz
c29yKG1fY3VycmVudEJsb2NrKTsKQEAgLTIzMzMsMTEgKzI4NTYsMTIgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgY29uc3QKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5
cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJv
bERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFBh
cnRpYWxSZXN1bHQKIHsKKyAgICBVTlVTRURfUEFSQU0oZXhwcmVzc2lvblN0YWNrKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHVuaWZ5
VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgdGFyZ2V0c1tpXS0+cGhpcyk7Ci0gICAg
dW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkZWZhdWx0VGFyZ2V0LnBoaXMp
OworICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssICp0YXJnZXRz
W2ldKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRlZmF1bHRU
YXJnZXQpOwogCi0gICAgU3dpdGNoVmFsdWUqIHN3aXRjaFZhbHVlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxTd2l0Y2hWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgY29uZGl0aW9uKTsKKyAg
ICBTd2l0Y2hWYWx1ZSogc3dpdGNoVmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFN3
aXRjaFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnZXQoY29uZGl0aW9uKSk7CiAgICAgc3dpdGNo
VmFsdWUtPnNldEZhbGxUaHJvdWdoKEZyZXF1ZW50ZWRCbG9jayhkZWZhdWx0VGFyZ2V0LnRhcmdl
dEJsb2NrRm9yQnJhbmNoKCkpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMu
c2l6ZSgpOyArK2kpCiAgICAgICAgIHN3aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3aXRjaENhc2Uo
aSwgRnJlcXVlbnRlZEJsb2NrKHRhcmdldHNbaV0tPnRhcmdldEJsb2NrRm9yQnJhbmNoKCkpKSk7
CkBAIC0yMzUxLDcgKzI4NzUsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRy
b2xFbnRyeSYgZW50cnksIFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFBhcgogCiAgICAgQVNT
RVJUKGV4cHJlc3Npb25TdGFjay5zaXplKCkgPT0gZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291
bnQoKSk7CiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBlOjpMb29wKQotICAg
ICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEucGhpcyk7Cisg
ICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGF0YSk7CiAKICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3Jp
Z2luKCksIGRhdGEuY29udGludWF0aW9uKTsKICAgICBkYXRhLmNvbnRpbnVhdGlvbi0+YWRkUHJl
ZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwpAQCAtMjM2MywzMCArMjg4NywzNCBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgY29u
c3QgU3RhY2smIGV4cHJlcwogewogICAgIENvbnRyb2xEYXRhJiBkYXRhID0gZW50cnkuY29udHJv
bERhdGE7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLmNvbnRpbnVhdGlvbjsKKyAgICBtX3N0
YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCk7CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSA9
PSBCbG9ja1R5cGU6OklmKSB7CiAgICAgICAgIGRhdGEuc3BlY2lhbC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFkZFByZWRlY2Vzc29yKGRhdGEuc3BlY2lhbCk7Ci0gICAgfQorICAg
IH0gZWxzZSBpZiAoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBkYXRhLmJs
b2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2gpCisgICAgICAgIC0tbV90cnlEZXB0aDsKIAog
ICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpICE9IEJsb2NrVHlwZTo6TG9vcCkgewogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsg
KytpKSB7CiAgICAgICAgICAgICBWYWx1ZSogcmVzdWx0ID0gZGF0YS5waGlzW2ldOwogICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwotICAgICAgICAgICAgZW50cnku
ZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRhdGEuc2lnbmF0dXJl
KCktPnJldHVyblR5cGUoaSksIHJlc3VsdCk7CisgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4
cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJu
VHlwZShpKSwgcHVzaChyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAg
IG1fb3V0ZXJMb29wcy5yZW1vdmVMYXN0KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKSkKKyAgICAgICAgICAgIGlmIChpIDwgZXhw
cmVzc2lvblN0YWNrLnNpemUoKSkgeworICAgICAgICAgICAgICAgICsrbV9zdGFja1NpemU7CiAg
ICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGV4cHJl
c3Npb25TdGFja1tpXSk7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgVHlwZSByZXR1cm5UeXBlID0gZGF0YS5zaWduYXR1cmUoKS0+cmV0
dXJuVHlwZShpKTsKLSAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFj
ay5jb25zdHJ1Y3RBbmRBcHBlbmQocmV0dXJuVHlwZSwgY29uc3RhbnQodG9CM1R5cGUocmV0dXJu
VHlwZSksIDB4YmJhZGJlZWYpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJl
c3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQocmV0dXJuVHlwZSwgcHVzaChjb25zdGFudCh0
b0IzVHlwZShyZXR1cm5UeXBlKSwgMHhiYmFkYmVlZikpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KIAorCiAgICAgLy8gVG9wTGV2ZWwgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBh
ZnRlciB0aGlzIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGVtaXQgYSByZXR1cm4gaGVyZS4K
ICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsKQogICAgICAg
ICByZXR1cm4gYWRkUmV0dXJuKGVudHJ5LmNvbnRyb2xEYXRhLCBlbnRyeS5lbmNsb3NlZEV4cHJl
c3Npb25TdGFjayk7CkBAIC0yNDAwLDEyICsyOTI4LDEyIEBAIEIzOjpWYWx1ZSogQjNJUkdlbmVy
YXRvcjo6Y3JlYXRlQ2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmxvY2ssIE9yaWdpbiBvcmln
aW4sCiAgICAgVmVjdG9yPEIzOjpDb25zdHJhaW5lZFZhbHVlPiBjb25zdHJhaW5lZEFyZ3VtZW50
czsKICAgICBDYWxsSW5mb3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKHNpZ25hdHVyZSk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAgIGNvbnN0cmFpbmVkQXJndW1lbnRz
LmFwcGVuZChCMzo6Q29uc3RyYWluZWRWYWx1ZShhcmdzW2ldLCB3YXNtQ2FsbEluZm8ucGFyYW1z
W2ldKSk7CisgICAgICAgIGNvbnN0cmFpbmVkQXJndW1lbnRzLmFwcGVuZChCMzo6Q29uc3RyYWlu
ZWRWYWx1ZShnZXQoYmxvY2ssIGFyZ3NbaV0pLCB3YXNtQ2FsbEluZm8ucGFyYW1zW2ldKSk7CiAK
ICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUluQnl0ZXMoV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgd2FzbUNhbGxJbmZvLmhlYWRlckFuZEFy
Z3VtZW50U3RhY2tTaXplSW5CeXRlcykpOwogCiAgICAgQjM6OlR5cGUgcmV0dXJuVHlwZSA9IHRv
QjNSZXN1bHRUeXBlKCZzaWduYXR1cmUpOwotICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgcmV0
dXJuVHlwZSwgb3JpZ2luKTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX3By
b2MuYWRkPFBhdGNocG9pbnRWYWx1ZT4ocmV0dXJuVHlwZSwgb3JpZ2luKTsKICAgICBwYXRjaHBv
aW50LT5jbG9iYmVyRWFybHkoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsK
ICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3Rl
cnNGb3JKU0NhbGwoKSk7CiAgICAgcGF0Y2hwb2ludEZ1bmN0b3IocGF0Y2hwb2ludCk7CkBAIC0y
NDE3LDYgKzI5NDUsNyBAQCBCMzo6VmFsdWUqIEIzSVJHZW5lcmF0b3I6OmNyZWF0ZUNhbGxQYXRj
aHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBPcmlnaW4gb3JpZ2luLAogICAgICAgICAgICAgcmVz
dWx0Q29uc3RyYWludHMuYXBwZW5kKEIzOjpWYWx1ZVJlcCh2YWx1ZUxvY2F0aW9uKSk7CiAgICAg
ICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnRzID0gV1RGTW92ZShyZXN1bHRDb25zdHJh
aW50cyk7CiAgICAgfQorICAgIGJsb2NrLT5hcHBlbmQocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJu
IHBhdGNocG9pbnQ7CiB9CiAKQEAgLTI0MzgsMTEgKzI5NjcsMTEgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLAogICAgICAgICAgICAgY29uc3QgVmVjdG9yPEIzOjpUeXBlPiYgdHVwbGUgPSBtX3By
b2MudHVwbGVGb3JUeXBlKHJldHVyblR5cGUpOwogICAgICAgICAgICAgQVNTRVJUKHNpZ25hdHVy
ZS5yZXR1cm5Db3VudCgpID09IHR1cGxlLnNpemUoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJldHVybkNvdW50KCk7ICsraSkKLSAgICAgICAgICAg
ICAgICByZXN1bHRzLmFwcGVuZChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHVwbGVbaV0sIGNhbGxSZXN1bHQsIGkpKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHRzLmFwcGVuZChwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8RXh0
cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0dXBsZVtpXSwgY2FsbFJlc3VsdCwgaSkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKGNhbGxSZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQocHVzaChjYWxsUmVzdWx0KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICB9CkBAIC0yNDcxLDggKzMwMDAsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRD
YWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAog
ICAgICAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUg
Y2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCiAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgICAgICAgICBwYXRj
aHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAg
ICAgICAgICAgICAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQ
YXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhpc1dhc21CbG9jaywgcGF0Y2hwb2ludCk7CisgICAgICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBoYW5kbGUsIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Cisg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNh
ZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21F
bnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CkBAIC0yNDk4LDggKzMwMjksMTAg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlz
dGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBi
b3VuZHMgY2hlY2tpbmcuCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBo
YXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzIxODEKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdp
c3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwotICAg
ICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcmV0dXJuVHlwZV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKKyAgICAgICAgICAgICAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHBy
ZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhpc0VtYmVkZGVyQmxvY2ssIHBhdGNocG9pbnQp
OworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdGhpcywgaGFuZGxl
LCByZXR1cm5UeXBlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAg
IGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAg
IGppdC5jYWxsKHBhcmFtc1twYXJhbXMucHJvYygpLnJlc3VsdENvdW50KHJldHVyblR5cGUpXS5n
cHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IH0pKTsKQEAgLTI1MjcsOCArMzA2MCwxMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwo
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAg
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIHRoZSBzaXplIHJlZ2lzdGVyIHNpbmNl
IHRoZSBMTEludCBhbHdheXMgYm91bmRzIGNoZWNrcwogICAgICAgICAgICAgICAgIGlmIChtX21v
ZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nIHx8IG1faW5mby5tZW1vcnkuaXNTaGFyZWQoKSkK
ICAgICAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQg
eyBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyIH0p
OwotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICBQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyht
X2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFt0aGlzLCBoYW5kbGUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5j
dGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGhh
bmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgp
OwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewog
ICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7
IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1
bmN0aW9uSW5kZXggfSk7CkBAIC0yNTQzLDcgKzMwNzgsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxl
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgRXhw
cmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CisgICAgVmFsdWUqIGNh
bGxlZUluZGV4ID0gZ2V0KGFyZ3MudGFrZUxhc3QoKSk7CiAgICAgQVNTRVJUKHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogCiAgICAgbV9tYWtlc0NhbGxzID0gdHJ1
ZTsKQEAgLTI1NTIsMTEgKzMwODcsMTEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5k
aXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKICAgICAv
LyBjYW4gYmUgdG8gdGhlIGVtYmVkZGVyIGZvciBvdXIgc3RhY2sgY2hlY2sgY2FsY3VsYXRpb24u
CiAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFy
Z3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CiAKLSAgICBFeHBy
ZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyOwotICAgIEV4cHJlc3Npb25UeXBlIGlu
c3RhbmNlc0J1ZmZlcjsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVy
TGVuZ3RoOworICAgIFZhbHVlKiBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyOworICAgIFZhbHVlKiBp
bnN0YW5jZXNCdWZmZXI7CisgICAgVmFsdWUqIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGg7
CiAgICAgewotICAgICAgICBFeHByZXNzaW9uVHlwZSB0YWJsZSA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2lu
KCksCisgICAgICAgIFZhbHVlKiB0YWJsZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAg
ICAgICBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRP
ZlRhYmxlUHRyKG1fbnVtSW1wb3J0RnVuY3Rpb25zLCB0YWJsZUluZGV4KSkpOwogICAgICAgICBj
YWxsYWJsZUZ1bmN0aW9uQnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgICAg
IHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihGdW5jUmVmVGFibGU6Om9mZnNldE9mRnVuY3Rpb25z
KCkpKTsKQEAgLTI1NzgsMTcgKzMxMTMsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxs
SW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKIAog
ICAgIGNhbGxlZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBaRXh0MzIsIG9yaWdpbigpLCBjYWxsZWVJbmRleCk7CiAKLSAgICBFeHByZXNzaW9uVHlwZSBj
YWxsYWJsZUZ1bmN0aW9uOworICAgIFZhbHVlKiBjYWxsYWJsZUZ1bmN0aW9uOwogICAgIHsKICAg
ICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0IGluIHRoZSB0YWJsZSBpbmRleCBzcGFjZSB3ZSBh
cmUgbG9va2luZyBmb3IuCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIG9mZnNldCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKKyAgICAgICAg
VmFsdWUqIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
TXVsLCBvcmlnaW4oKSwKICAgICAgICAgICAgIGNhbGxlZUluZGV4LCBjb25zdGFudChwb2ludGVy
VHlwZSgpLCBzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbikpKTsKICAgICAgICAg
Y2FsbGFibGVGdW5jdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQWRkLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgb2Zmc2V0KTsKIAogICAg
ICAgICAvLyBDaGVjayB0aGF0IHRoZSBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGlzIGlu
aXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5k
ZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgogICAgICAgICAvLyBGSVhNRTogd2hl
biB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJl
Y2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMAogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpzaWduYXR1cmVJbmRleCkgPT0gc2l6ZW9mKHVp
bnQ2NF90KSwgIkxvYWQgY29kZWdlbiBhc3N1bWVzIGk2NCIpOwotICAgICAgICBFeHByZXNzaW9u
VHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9u
LCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRP
ZlNpZ25hdHVyZUluZGV4KCkpKTsKKyAgICAgICAgVmFsdWUqIGNhbGxlZVNpZ25hdHVyZUluZGV4
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJ
bnQ2NCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIHNhZmVDYXN0PGludDMyX3Q+KFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSkpOwogICAg
ICAgICB7CiAgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCiAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3Jp
Z2luKCksCkBAIC0yNjAyLDcgKzMxMzcsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJ
bmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdAogCiAg
ICAgICAgIC8vIENoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyB0aGUgdmFsdWUgd2UgZXhwZWN0
LgogICAgICAgICB7Ci0gICAgICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25hdHVy
ZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlKSk7CisgICAgICAg
ICAgICBWYWx1ZSogZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmVJbmZvcm1hdGlv
bjo6Z2V0KHNpZ25hdHVyZSkpOwogICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigp
LAogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgTm90RXF1YWwsIG9yaWdpbigpLCBjYWxsZWVTaWduYXR1cmVJbmRleCwgZXhwZWN0ZWRTaWdu
YXR1cmVJbmRleCkpOwogCkBAIC0yNjE2LDcgKzMxNTEsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdAogICAgICAgICBjYWxsZWVJbmRleCwgY29uc3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9m
KEluc3RhbmNlKikpKTsKICAgICBWYWx1ZSogY2FsbGVlSW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9y
aWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEFkZCwgb3JpZ2luKCksIGluc3RhbmNlc0J1ZmZlciwgb2Zmc2V0KSk7Ci0gICAgRXhwcmVzc2lv
blR5cGUgY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgVmFsdWUqIGNhbGxl
ZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigp
LCBjYWxsYWJsZUZ1bmN0aW9uLAogICAgICAgICAgICAgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkp
KSk7CiAKQEAgLTI2MjUsNyArMzE2MCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbElu
ZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0CiAKIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFy
dGlhbFJlc3VsdAogewotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZSA9IGFyZ3MudGFrZUxhc3Qo
KTsKKyAgICBWYWx1ZSogY2FsbGVlID0gZ2V0KGFyZ3MudGFrZUxhc3QoKSk7CiAgICAgQVNTRVJU
KHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogICAgIG1fbWFrZXND
YWxscyA9IHRydWU7CiAKQEAgLTI2NDIsMjQgKzMxNzcsMjcgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRDYWxsUmVmKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lv
blR5cGUKICAgICBWYWx1ZSogY2FsbGVlSW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3Jp
Z2luKCksIGpzQ2FsbGVlSW5zdGFuY2UsIGluc3RhbmNlT2Zmc2V0KSk7CiAKLSAgICBFeHByZXNz
aW9uVHlwZSBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICBWYWx1ZSogY2Fs
bGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2lu
KCksIGNhbGxlZSwKICAgICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+KFdlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSkpKTsKIAogICAgIHJl
dHVybiBlbWl0SW5kaXJlY3RDYWxsKGNhbGxlZUluc3RhbmNlLCBjYWxsZWVDb2RlLCBzaWduYXR1
cmUsIGFyZ3MsIHJlc3VsdHMpOwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5KGNvbnN0
IEV4cHJlc3Npb25UeXBlIHBoaSwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291cmNlKQordm9pZCBC
M0lSR2VuZXJhdG9yOjp1bmlmeShWYWx1ZSogcGhpLCBjb25zdCBFeHByZXNzaW9uVHlwZSBzb3Vy
Y2UpCiB7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIHNvdXJjZSwgcGhpKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ2V0KHNvdXJjZSksIHBoaSk7CiB9CiAK
LXZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgU3RhY2smIHJl
c3VsdFN0YWNrLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHQpCit2b2lkIEIzSVJHZW5lcmF0b3I6
OnVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IFN0YWNrJiByZXN1bHRTdGFjaywgY29uc3QgQ29u
dHJvbERhdGEmIGJsb2NrKQogewotICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpIDw9IHJlc3VsdFN0
YWNrLnNpemUoKSk7CisgICAgY29uc3QgVmVjdG9yPFZhbHVlKj4mIHBoaXMgPSBibG9jay5waGlz
OworICAgIHNpemVfdCByZXN1bHRTaXplID0gcGhpcy5zaXplKCk7CiAKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKLSAgICAgICAgdW5pZnkocmVzdWx0W3Jl
c3VsdC5zaXplKCkgLSAxIC0gaV0sIHJlc3VsdFN0YWNrLmF0KHJlc3VsdFN0YWNrLnNpemUoKSAt
IDEgLSBpKSk7CisgICAgQVNTRVJUKHJlc3VsdFNpemUgPD0gcmVzdWx0U3RhY2suc2l6ZSgpKTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0U2l6ZTsgKytpKQorICAgICAgICB1
bmlmeShwaGlzW3Jlc3VsdFNpemUgLSAxIC0gaV0sIHJlc3VsdFN0YWNrLmF0KHJlc3VsdFN0YWNr
LnNpemUoKSAtIDEgLSBpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBFeHByZXNzaW9uU3RhY2so
Y29uc3QgQ29tbWFQcmludGVyJiBjb21tYSwgY29uc3QgQjNJUkdlbmVyYXRvcjo6U3RhY2smIGV4
cHJlc3Npb25TdGFjaykKQEAgLTI3MDMsOCArMzI0MSwxMSBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0
aW9uQwogCiAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IG1h
a2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50
cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOworICAgIGNvbXBpbGF0aW9u
Q29udGV4dC5wcm9jZWR1cmUgPSBtYWtlVW5pcXVlPFByb2NlZHVyZT4oKTsKKworICAgIFByb2Nl
ZHVyZSYgcHJvY2VkdXJlID0gKmNvbXBpbGF0aW9uQ29udGV4dC5wcm9jZWR1cmU7CiAKLSAgICBQ
cm9jZWR1cmUgcHJvY2VkdXJlOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2lu
dEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogCiAgICAgcHJvY2VkdXJlLnNldE9y
aWdpblByaW50ZXIoW10gKFByaW50U3RyZWFtJiBvdXQsIE9yaWdpbiBvcmlnaW4pIHsKICAgICAg
ICAgaWYgKG9yaWdpbi5kYXRhKCkpCkBAIC0yNzI1LDYgKzMyNjYsNyBAQCBFeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENv
bXBpbGF0aW9uQwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihpckdl
bmVyYXRvciwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWdu
YXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNl
KCkpOwogCisgICAgaXJHZW5lcmF0b3IuaW5zZXJ0RW50cnlTd2l0Y2goKTsKICAgICBpckdlbmVy
YXRvci5pbnNlcnRDb25zdGFudHMoKTsKIAogICAgIHByb2NlZHVyZS5yZXNldFJlYWNoYWJpbGl0
eSgpOwpAQCAtMjczNiwxOCArMzI3OCw0MyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQwogICAg
IGRhdGFMb2dJZihXYXNtQjNJUkdlbmVyYXRvckludGVybmFsOjp2ZXJib3NlLCAiUG9zdCBTU0E6
ICIsIHByb2NlZHVyZSk7CiAgICAgCiAgICAgeworICAgICAgICBpZiAoc2hvdWxkRHVtcERpc2Fz
c2VtYmx5Rm9yKGNvbXBpbGF0aW9uTW9kZSkpCisgICAgICAgICAgICBwcm9jZWR1cmUuY29kZSgp
LnNldERpc2Fzc2VtYmxlcihtYWtlVW5pcXVlPEIzOjpBaXI6OkRpc2Fzc2VtYmxlcj4oKSk7CiAg
ICAgICAgIEIzOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUpOwogICAgICAgICBCMzo6
Z2VuZXJhdGUocHJvY2VkdXJlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklU
KTsKICAgICAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cyA9
IHByb2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpOwogICAgICAgICByZXN1bHQtPmVudHJ5cG9p
bnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHByb2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9m
ZnNldExpc3QoKTsKICAgICB9CiAKKyAgICByZXN1bHQtPnN0YWNrbWFwcyA9IGlyR2VuZXJhdG9y
LnRha2VTdGFja21hcHMoKTsKKyAgICByZXN1bHQtPmV4Y2VwdGlvbkhhbmRsZXJzID0gaXJHZW5l
cmF0b3IudGFrZUV4Y2VwdGlvbkhhbmRsZXJzKCk7CisKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Cit2b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKFZlY3RvcjxDb2RlTG9jYXRp
b25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJbnRlcm5h
bEZ1bmN0aW9uKiBmdW5jdGlvbiwgY29uc3QgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0LCBM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKQoreworICAgIGlmICghY29udGV4dC5wcm9jZWR1cmUpCisg
ICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDA7CisgICAg
dW5zaWduZWQgbnVtRW50cnlwb2ludHMgPSBjb250ZXh0LnByb2NlZHVyZS0+bnVtRW50cnlwb2lu
dHMoKTsKKyAgICBmb3IgKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXJJbmZvIDog
ZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVu
dHJ5cG9pbnRJbmRleCA8IG51bUVudHJ5cG9pbnRzKTsKKyAgICAgICAgaWYgKGhhbmRsZXJJbmZv
Lm1fdHlwZSA9PSBIYW5kbGVyVHlwZTo6RGVsZWdhdGUpIHsKKyAgICAgICAgICAgIGhhbmRsZXJz
LmFwcGVuZCh7IH0pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICArK2VudHJ5cG9pbnRJbmRleDsKKyAgICAgICAgaGFuZGxlcnMuYXBwZW5kKGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihjb250ZXh0LnByb2NlZHVyZS0+Y29k
ZSgpLmVudHJ5cG9pbnRMYWJlbChlbnRyeXBvaW50SW5kZXgpKSk7CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUKGVudHJ5cG9pbnRJbmRleCA9PSBudW1FbnRyeXBvaW50cyAtIDEpOworfQorCiAv
LyBDdXN0b20gd2FzbSBvcHMuIFRoZXNlIGFyZSB0aGUgb25lcyB0b28gbWVzc3kgdG8gZG8gaW4g
d2FzbS5qc29uLgogCi12b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JNb2RPckRpdihC
Mzo6T3Bjb2RlIG9wZXJhdGlvbiwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUg
cmlnaHQpCit2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bj
b2RlIG9wZXJhdGlvbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKIHsKICAgICBBU1NFUlQo
b3BlcmF0aW9uID09IERpdiB8fCBvcGVyYXRpb24gPT0gTW9kIHx8IG9wZXJhdGlvbiA9PSBVRGl2
IHx8IG9wZXJhdGlvbiA9PSBVTW9kKTsKICAgICBjb25zdCBCMzo6VHlwZSB0eXBlID0gbGVmdC0+
dHlwZSgpOwpAQCAtMjc3NiwxMDYgKzMzNDMsMTI1IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1p
dENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUgb3BlcmF0aW9uLCBFeHByZXNzaW9uVHlwZSBs
CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJE
aXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMkRpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnRWYXIsIEV4cHJlc3Npb25UeXBl
IHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IERpdjsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChsZWZ0
VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVja3NG
b3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7Cisg
ICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1w
bGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4oRXhwcmVz
c2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIz
OjpPcGNvZGUgb3AgPSBNb2Q7CisgICAgVmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAg
VmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYo
b3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICBy
ZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hp
bGwob3ApLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0
ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2VT4oRXhw
cmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJEaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZh
ciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0
IEIzOjpPcGNvZGUgb3AgPSBVRGl2OworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOwor
ICAgIFZhbHVlKiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9y
RGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1
bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9y
aWdpbigpLCBsZWZ0LCByaWdodCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4K
LWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1VPihFeHByZXNzaW9uVHlw
ZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVU+
KEV4cHJlc3Npb25UeXBlIGxlZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29k
ZSBvcCA9IFVNb2Q7CisgICAgVmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUq
IHJpZ2h0ID0gZ2V0KHJpZ2h0VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxl
ZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2go
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4
cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4oRXhwcmVzc2lv
blR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5cGUgcmlnaHRWYXIsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gRGl2
OworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVlKiByaWdodCA9IGdl
dChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7
Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBv
cCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCkp
OwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlw
ZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KEV4cHJlc3Npb25UeXBlIGxlZnRW
YXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IE1vZDsKKyAgICBWYWx1
ZSogbGVmdCA9IGdldChsZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIp
OwogICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3Vs
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hpbGwob3ApLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9u
VHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlU+KEV4cHJlc3Npb25UeXBlIGxl
ZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVEaXY7CisgICAg
VmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0
VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmln
aW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhw
cmVzc2lvblR5cGUgcmlnaHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVU1vZDsKKyAgICBWYWx1ZSogbGVm
dCA9IGdldChsZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAg
IGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0
LCByaWdodCk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9
OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
Q3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KEV4cHJl
c3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4o
bV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZh
bHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zMzIocGFyYW1zWzFdLmdwcigpLCBw
YXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZl
Y3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNo
KHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChh
cmdWYXIpOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CiAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5jb3VudFRyYWls
aW5nWmVyb3M2NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgfSk7CiAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBw
YXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUG9wY250
PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAjaWYgQ1BVKFg4Nl82
NCkKICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9uKCkpIHsK
ICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKQEAgLTI4
ODQsMTkgKzM0NzAsMjAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBv
cGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYKICAgICAgICAgICAgIGpp
dC5jb3VudFBvcHVsYXRpb24zMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAg
ICAgICAgIH0pOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgp
OwotICAgICAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICAgICByZXN1bHQgPSBwdXNoKHBh
dGNocG9pbnQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICNlbmRpZgogCiAgICAgVmFs
dWUqIGZ1bmNBZGRyZXNzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25Qb3Bjb3VudDMyKSk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
Q2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLCBmdW5j
QWRkcmVzcywgYXJnKTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwg
ZnVuY0FkZHJlc3MsIGFyZykpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnVmFy
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUq
IGFyZyA9IGdldChhcmdWYXIpOwogI2lmIENQVShYODZfNjQpCiAgICAgaWYgKE1hY3JvQXNzZW1i
bGVyOjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CiAgICAgICAgIFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVl
PihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CkBAIC0yOTA1LDE5ICszNDkyLDIwIEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmCiAgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uNjQocGFy
YW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICB9KTsKICAgICAgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICAgICAgcmVzdWx0ID0gcGF0
Y2hwb2ludDsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAjZW5kaWYKIAogICAgIFZhbHVlKiBmdW5jQWRkcmVzcyA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFn
Q0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uUG9wY291bnQ2NCkpOwotICAgIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQ2
NCwgb3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwgZnVuY0FkZHJlc3MsIGFyZyk7CisgICAgcmVz
dWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywg
SW50NjQsIG9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpKTsKICAg
ICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PEY2NENvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVy
dFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBEb3VibGUsIG9yaWdpbigpKTsKICAgICBpZiAoaXNYODYoKSkK
ICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKQEAgLTI5MzIs
MTMgKzM1MjAsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4o
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmUKICNlbmRpZgogICAgIH0pOwog
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0g
cGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7
IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAg
ICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBGbG9hdCwgb3JpZ2luKCkpOwogICAgIGlmIChpc1g4
NigpKQogICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwpAQCAt
Mjk1Myw2NSArMzU0Miw3MCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvbgogI2VuZGlmCiAgICAg
fSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1
bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkY2NE5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NE5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQ
YXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBh
dGNocG9pbnRWYWx1ZT4obV9wcm9jLCBEb3VibGUsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50
LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludERv
dWJsZShwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CiAgICAgfSk7CiAgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBv
aW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJl
c3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4
cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1
ZT4obV9wcm9jLCBGbG9hdCwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcs
IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgewogICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0SW50RmxvYXQocGFyYW1zWzFd
LmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVj
dHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1
bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4K
LWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZ1Zh
ciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVl
KiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBEb3VibGUs
IG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJl
Z2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAg
aml0LnJvdW5kVG93YXJkWmVyb0RvdWJsZShwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIo
KSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsK
LSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwog
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEZsb2F0LCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hw
b2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5yb3VuZFRvd2FyZFplcm9GbG9h
dChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50
OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAog
dGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2
ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihF
eHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1heCA9
IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91
YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSog
bWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0
PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpIC0gMS4wKSk7CiAg
ICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzAyOCwxMyArMzYyMiwxNCBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDMyKHBhcmFt
c1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAg
cmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0
ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Np
b25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAog
eworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0gY29uc3Rh
bnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6
Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSogbWluID0gY29u
c3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOwogICAgIFZhbHVlKiBvdXRPZkJv
dW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBv
cmlnaW4oKSwKQEAgLTMwNTEsMTQgKzM2NDYsMTUgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkK
ICAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb0ludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1z
WzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6
bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRj
aHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFy
ZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRz
PGludDMyX3Q+OjptaW4oKSkgKiAtMi4wKSk7CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0YW50KERv
dWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PigtMS4wKSk7CiAgICAgVmFsdWUqIG91dE9mQm91
bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9y
aWdpbigpLApAQCAtMzA3NSwxMyArMzY3MSwxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQog
ICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFt
c1swXS5ncHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6
Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0
Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJn
ID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNl
X2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDMyX3Q+OjptaW4oKSkgKiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKICAgICBWYWx1ZSog
bWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8
ZmxvYXQ+KC0xLjApKSk7CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzA5OCwxMyAr
MzY5NSwxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMy
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVG
bG9hdFRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsK
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9
IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4g
eyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRU
cnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBW
YWx1ZSogbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC1zdGF0
aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOwog
ICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4o
c3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkp
KTsKICAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCkBAIC0zMTIxLDEzICszNzE5LDE0IEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5CiAgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50NjQo
cGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsK
KyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRl
bXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGNjQ+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhw
cmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXggPSBj
b25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91Ymxl
PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiAtMi4wKSk7CiAgICAgVmFs
dWUqIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PigtMS4wKSk7
CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzE2NCwxMyArMzc2MywxNCBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb1VpbnQ2NChw
YXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSwgc2NyYXRjaCwgY29uc3RhbnQpOwogICAg
IH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVz
dWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJl
dHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwog
ICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90Pigt
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkp
OwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90
PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkp
KSk7CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzE4NywxMyArMzc4NywxNCBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvSW50NjQo
cGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsK
KyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRl
bXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhw
cmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXggPSBj
b25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KC0yLjApKSk7CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8
dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PigtMS4wKSkpOwogICAgIFZhbHVlKiBvdXRPZkJv
dW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBv
cmlnaW4oKSwKQEAgLTMyMzAsNyArMzgzMSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiAg
ICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9VaW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNb
MF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50KTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAg
cmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCAxZDY2MjEw
ZTFiNTA0M2E5YTQxZmE2MTNmNTIyNDkzYWVlMzA3NDdhLi4yODkxZDFlNDRmM2FmMzdkODYxOTM0
NjZmOWRjOTdlNmI4ZGQ2MTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmgKQEAgLTQwLDcgKzQwLDEzIEBACiAKIGV4dGVybiAiQyIgdm9pZCBk
dW1wUHJvY2VkdXJlKHZvaWQqKTsKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
K25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQjMgeworY2xhc3MgUHJvY2VkdXJlOworfQor
CituYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIE1lbW9yeUluZm9ybWF0aW9uOwogCkBAIC00OCwx
MCArNTQsMTMgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPENDYWxsSGVscGVycz4gZW1iZWRkZXJFbnRyeXBvaW50SklUOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxDQ2FsbEhlbHBlcnM+IHdhc21FbnRyeXBvaW50SklUOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxPcGFxdWVCeXByb2R1Y3RzPiB3YXNtRW50cnlwb2ludEJ5cHJvZHVjdHM7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEIzOjpQcm9jZWR1cmU+IHByb2NlZHVyZSB7IG51bGxwdHIgfTsKIH07CiAKIEV4
cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFu
ZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3Qg
U2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5
TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBs
b29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0cik7CiAKK3ZvaWQgY29t
cHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYgaGFuZGxlcnMsIGNvbnN0IEludGVybmFsRnVuY3Rpb24q
LCBjb25zdCBDb21waWxhdGlvbkNvbnRleHQmLCBMaW5rQnVmZmVyJik7CisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKaW5kZXggYWYyZmM3MmJh
Y2JiMzRjOGIzMzU3OGQ5MDdiMzdjNjAyNDBmYjlmYi4uNDY2YTI2MGJmZjI0OGJkYjQyNTkzYjA0
YzcwN2U1ZmI4OTFlYWFjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmNwcApAQCAtNjYsNiArNjYsNyBAQCBib29sIEJCUVBsYW46OnByZXBhcmVJbXBsKCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMucmVzaXpl
KGZ1bmN0aW9ucy5zaXplKCkpOworICAgIG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucy5yZXNp
emUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShm
dW5jdGlvbnMuc2l6ZSgpKTsKICAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rpb25zLnNp
emUoKSk7CiAKQEAgLTEwOSw2ICsxMTAsOSBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgVmVjdG9yPENv
ZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiBleGNlcHRpb25IYW5kbGVy
TG9jYXRpb25zOworICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKGV4Y2VwdGlv
bkhhbmRsZXJMb2NhdGlvbnMsIGZ1bmN0aW9uLmdldCgpLCBjb250ZXh0LCBsaW5rQnVmZmVyKTsK
KwogICAgIHNpemVfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5kZXggKyBtX21v
ZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CiAgICAgU2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9u
U2lnbmF0dXJlSW5kaWNlc1ttX2Z1bmN0aW9uSW5kZXhdOwogICAgIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CkBA
IC0xMTgsNyArMTIyLDcgQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVm
Zm9ydCkKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5
cG9pbnQ7CiAgICAgewotICAgICAgICBSZWY8QkJRQ2FsbGVlPiBjYWxsZWUgPSBCQlFDYWxsZWU6
OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNl
LCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFj
ZSksIFdURk1vdmUodGllclVwKSwgV1RGTW92ZSh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykpOwor
ICAgICAgICBSZWY8QkJRQ2FsbGVlPiBjYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3Zl
KGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9y
bWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodGll
clVwKSwgV1RGTW92ZSh1bmxpbmtlZFdhc21Ub1dhc21DYWxscyksIFdURk1vdmUoZnVuY3Rpb24t
PnN0YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92
ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpi
b3hXYXNtKGNhbGxlZS5wdHIoKSkpOwogICAgICAgICBBU1NFUlQoIW1fY29kZUJsb2NrLT5tX2Ji
cUNhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSk7CiAgICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUt
PmVudHJ5cG9pbnQoKTsKQEAgLTE5NCwxMSArMTk4LDE1IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRl
cm5hbEZ1bmN0aW9uPiBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25J
bmRlCiAgICAgYm9vbCBmb3JjZVVzaW5nQjMgPSBmYWxzZTsKICAgICBpZiAoT3B0aW9uczo6d2Vi
QXNzZW1ibHlCQlFBaXJNb2RlVGhyZXNob2xkKCkgJiYgbV9tb2R1bGVJbmZvcm1hdGlvbi0+Y29k
ZVNlY3Rpb25TaXplID49IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgp
KQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOworICAgIGVsc2UgaWYgKCFtX21vZHVsZUlu
Zm9ybWF0aW9uLT5tX2Z1bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlvbnMucXVpY2tHZXQoZnVuY3Rp
b25JbmRleCkpCisgICAgICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7CisgICAgZWxzZSBpZiAoIU9w
dGlvbnM6Ondhc21CQlFVc2VzQWlyKCkpCisgICAgICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7CiAK
LSAgICBpZiAoIWZvcmNlVXNpbmdCMyAmJiBPcHRpb25zOjp3YXNtQkJRVXNlc0FpcigpKQotICAg
ICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIoY29udGV4dCwg
ZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1fbW9kdWxlSW5m
b3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKLSAgICBlbHNl
CisgICAgaWYgKGZvcmNlVXNpbmdCMykKICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0g
cGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0
aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRl
eCwgVUlOVDMyX01BWCwgdGllclVwKTsKKyAgICBlbHNlCisgICAgICAgIHBhcnNlQW5kQ29tcGls
ZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUFpcihjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJl
LCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9t
b2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXApOwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFu
ZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKQEAg
LTIyMiwxMyArMjMwLDE1IEBAIHZvaWQgQkJRUGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbigp
CiAgICAgICAgIGNvbnN0IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5k
ZXggKyBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CiAgICAgICAg
IEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlv
bkluZGV4U3BhY2VTaXplKCkpOwogICAgICAgICB7CisgICAgICAgICAgICBJbnRlcm5hbEZ1bmN0
aW9uKiBmdW5jdGlvbiA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLmdl
dCgpOwogICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRy
eXBvaW50SklULCBudWxscHRyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpXYXNtLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkpIHsKICAgICAgICAgICAgICAgICBCYXNlOjpmYWlsKG1ha2VTdHJpbmco
Ik91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6
Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25J
bmRleF0tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigK
KyAgICAgICAgICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKG1fZXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24sIGNvbnRleHQsIGxpbmtC
dWZmZXIpOworICAgICAgICAgICAgZnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBt
YWtlVW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgQkJRIGZ1bmN0aW9u
WyVpXSAlcyBuYW1lICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNj
aWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBt
X21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkp
KS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21F
bnRyeXBvaW50Qnlwcm9kdWN0cykpOwogICAgICAgICB9CkBAIC0yNzIsNyArMjgyLDcgQEAgdm9p
ZCBCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBDYWxsZWVJbml0aWFsaXplciYgY2Fs
bGJhY2spCiAKICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRl
cm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwogICAgICAgICBzaXpl
X3QgZnVuY3Rpb25JbmRleFNwYWNlID0gaW50ZXJuYWxGdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgICAgICBSZWY8QkJRQ2FsbGVl
PiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rp
b24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24t
Pm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZShtX3RpZXJVcENv
dW50c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShtX3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pKTsKKyAgICAgICAgUmVmPEJCUUNhbGxlZT4g
d2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9u
LT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5u
YW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90aWVyVXBDb3Vu
dHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dhc21D
YWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShmdW5jdGlvbi0+c3RhY2ttYXBz
KSwgV1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKG1fZXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9u
LCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7CiAKICAg
ICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50
cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmluZGV4IGRiZWZjNTRhZDc1MDA1YTcwZDFl
MWFmOTYwMDAxNzRmOGVjYmRiM2YuLmRjMDAyMjc1NjYyMjUxYjhhYjBmMDdkZWFiMDk4NmU5N2Nm
ZTZhMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaApAQCAtODMs
NiArODMsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9u
PiBjb21waWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25Db250
ZXh0JiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgVGllclVwQ291bnQqKTsKIAog
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4+IG1fd2FzbUludGVy
bmFsRnVuY3Rpb25zOworICAgIFZlY3RvcjxWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4+PiBtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnM7CiAgICAgSGFz
aE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBEZWZhdWx0
SGFzaDx1aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMy
X3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgVmVjdG9yPENvbXBp
bGF0aW9uQ29udGV4dD4gbV9jb21waWxhdGlvbkNvbnRleHRzOwogICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8VGllclVwQ291bnQ+PiBtX3RpZXJVcENvdW50czsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKaW5kZXggMjFkOTdiMTNjZWUwYzY1ZTE2MzFjNzZkMjU4
OTMzMzM1MzJlZTk0MC4uYjQ2NmI3ZmNlYjgwYTNlMjcyNzk5ZjM3NWZhZDBiZGRhYWJkOTQ1YiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkxMSW50RXhjZXB0
aW9ucy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldhc21D
YWxsaW5nQ29udmVudGlvbi5oIgogCkBAIC01Niw2ICs1NywxMiBAQCB2b2lkIENhbGxlZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIG91dC5wcmludChtYWtlU3RyaW5nKG1faW5k
ZXhPck5hbWUpKTsKIH0KIAorY29uc3QgSGFuZGxlckluZm8qIENhbGxlZTo6aGFuZGxlckZvcklu
ZGV4KEluc3RhbmNlJiBpbnN0YW5jZSwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IFRhZyogdGFnKQor
eworICAgIEFTU0VSVChoYXNFeGNlcHRpb25IYW5kbGVycygpKTsKKyAgICByZXR1cm4gSGFuZGxl
ckluZm86OmhhbmRsZXJGb3JJbmRleChpbnN0YW5jZSwgbV9leGNlcHRpb25IYW5kbGVycywgaW5k
ZXgsIHRhZyk7Cit9CisKIEpJVENhbGxlZTo6SklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9k
ZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQogICAgIDogQ2FsbGVl
KGNvbXBpbGF0aW9uTW9kZSkKICAgICAsIG1fZW50cnlwb2ludChXVEZNb3ZlKGVudHJ5cG9pbnQp
KQpAQCAtNjksNiArNzYsMzIgQEAgSklUQ2FsbGVlOjpKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRp
b25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgRW50cnlwb2ludCYmIGVudHJ5cG8KIHsKIH0KIAorTExJ
bnRDYWxsZWU6OkxMSW50Q2FsbGVlKHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4g
Y29kZUJsb2NrLCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5h
bWVTZWN0aW9uPj4mJiBuYW1lKQorICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6
TExJbnRNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKKyAgICAsIG1fY29kZUJsb2NrKFdURk1v
dmUoY29kZUJsb2NrKSkKK3sKKyAgICBsaW5rRXhjZXB0aW9uSGFuZGxlcnMoKTsKK30KKwordm9p
ZCBMTEludENhbGxlZTo6bGlua0V4Y2VwdGlvbkhhbmRsZXJzKCkKK3sKKyAgICBpZiAoc2l6ZV90
IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgeworICAg
ICAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBVbmxp
bmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9u
SGFuZGxlcihpKTsKKyAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9leGNlcHRp
b25IYW5kbGVyc1tpXTsKKyAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKm1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIubV90YXJnZXQpLnB0cigpOwor
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gdGFy
Z2V0OworICAgICAgICAgICAgaWYgKHVubGlua2VkSGFuZGxlci5tX3R5cGUgPT0gSGFuZGxlclR5
cGU6OkNhdGNoKQorICAgICAgICAgICAgICAgIHRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVXYXNtQ2F0Y2goaW5zdHJ1Y3Rpb24u
d2lkdGg8V2FzbU9wY29kZVRyYWl0cz4oKSkuY29kZSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPihMTEludDo6aGFuZGxlV2FzbUNhdGNoQWxsKGluc3RydWN0aW9uLndpZHRoPFdhc21P
cGNvZGVUcmFpdHM+KCkpLmNvZGUoKSk7CisKKyAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6
ZSh1bmxpbmtlZEhhbmRsZXIsIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQg
TExJbnRDYWxsZWU6OnNldEVudHJ5cG9pbnQoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRy
eVB0clRhZz4gZW50cnlwb2ludCkKIHsKICAgICBtX2VudHJ5cG9pbnQgPSBlbnRyeXBvaW50OwpA
QCAtMTA0LDYgKzEzNywzNiBAQCBzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4gTExJbnRDYWxsZWU6
OnJhbmdlKCkgY29uc3QKICAgICByZXR1cm4geyBudWxscHRyLCBudWxscHRyIH07CiB9CiAKK3Zv
aWQgT3B0aW1pemluZ0pJVENhbGxlZTo6bGlua0V4Y2VwdGlvbkhhbmRsZXJzKCkKK3sKKyAgICBz
aXplX3QgY291bnQgPSBtX3VubGlua2VkRXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpOworICAgIG1f
ZXhjZXB0aW9uSGFuZGxlcnMucmVzaXplVG9GaXQoY291bnQpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1f
ZXhjZXB0aW9uSGFuZGxlcnNbaV07CisgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8m
IHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRFeGNlcHRpb25IYW5kbGVyc1tpXTsKKyAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbG9jYXRpb24gPSBt
X2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbaV07CisgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6
ZSh1bmxpbmtlZEhhbmRsZXIsIGxvY2F0aW9uKTsKKyAgICB9CisgICAgbV91bmxpbmtlZEV4Y2Vw
dGlvbkhhbmRsZXJzLmNsZWFyKCk7CisgICAgbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLmNs
ZWFyKCk7Cit9CisKK2NvbnN0IFZlY3RvcjxPU1JFbnRyeVZhbHVlPiYgT3B0aW1pemluZ0pJVENh
bGxlZTo6c3RhY2ttYXAoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KSBjb25zdAoreworICAg
IGF1dG8gaXRlciA9IG1fc3RhY2ttYXBzLmZpbmQoY2FsbFNpdGVJbmRleCk7CisgICAgaWYgKGl0
ZXIgPT0gbV9zdGFja21hcHMuZW5kKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX3N0
YWNrbWFwcykgeworICAgICAgICAgICAgZGF0YUxvZyhwYWlyLmtleS5iaXRzKCksICI6ICIpOwor
ICAgICAgICAgICAgZm9yIChhdXRvIHZhbHVlIDogcGFpci52YWx1ZSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKHZhbHVlLCAiLCAiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiIik7CisgICAg
ICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBtX3N0YWNrbWFwcy5lbmQo
KSk7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworfQorCisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ2FsbGVlLmgKaW5kZXggMDgxZGI3NmU0MmY5ZTQwZTQzYjkyYzk4MmFmY2Q4
Y2U5NTBiYjFlMS4uN2Q2OWQ2MjZkOGMzZjBkOTM3ZTFkMGI1MDI1MDNjOTRiNWJmMTU0NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaApAQCAtMzIsNyArMzIsOSBAQAog
I2luY2x1ZGUgIldhc21Db21waWxhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0Lmgi
CiAjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiV2FzbUhhbmRs
ZXJJbmZvLmgiCiAjaW5jbHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCisjaW5jbHVkZSAiV2FzbUxM
SW50VGllclVwQ291bnRlci5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgogI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCkBAIC01OSw2ICs2MSwxMCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVy
cygpID0gMDsKICAgICB2aXJ0dWFsIHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPiByYW5nZSgpIGNv
bnN0ID0gMDsKIAorICAgIGNvbnN0IEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9ySW5kZXgoSW5zdGFu
Y2UmLCB1bnNpZ25lZCwgY29uc3QgVGFnKik7CisKKyAgICBib29sIGhhc0V4Y2VwdGlvbkhhbmRs
ZXJzKCkgY29uc3QgeyByZXR1cm4gISFtX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsgfQorCiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogICAgIHZpcnR1YWwgdm9pZCBzZXRPU1JFbnRy
eUNhbGxlZShSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+JiYpCiAgICAgewpAQCAtNjgsNiArNzQs
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAg
IHZpcnR1YWwgRnVuY3Rpb25Db2RlQmxvY2sqIGZ1bmN0aW9uQ29kZUJsb2NrKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVlKFdh
c206OkNvbXBpbGF0aW9uTW9kZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVlKFdhc206
OkNvbXBpbGF0aW9uTW9kZSwgc2l6ZV90LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxO
YW1lU2VjdGlvbj4+JiYpOwpAQCAtNzUsNiArODMsOSBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgog
ICAgIENvbXBpbGF0aW9uTW9kZSBtX2NvbXBpbGF0aW9uTW9kZTsKICAgICBJbmRleE9yTmFtZSBt
X2luZGV4T3JOYW1lOworCitwcm90ZWN0ZWQ6CisgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiBtX2V4
Y2VwdGlvbkhhbmRsZXJzOwogfTsKIAogY2xhc3MgSklUQ2FsbGVlIDogcHVibGljIENhbGxlZSB7
CkBAIC05OSw2NCArMTEwLDg2IEBAIHByaXZhdGU6CiAgICAgV2FzbTo6RW50cnlwb2ludCBtX2Vu
dHJ5cG9pbnQ7CiB9OwogCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQotY2xhc3MgT01H
Q2FsbGVlIGZpbmFsIDogcHVibGljIEpJVENhbGxlZSB7CitjbGFzcyBFbWJlZGRlckVudHJ5cG9p
bnRDYWxsZWUgZmluYWwgOiBwdWJsaWMgSklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPE9NR0NhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXpl
X3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBu
YW1lLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQorICAg
IHN0YXRpYyBSZWY8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlw
b2ludCYmIGVudHJ5cG9pbnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBP
TUdDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1v
dmUodW5saW5rZWRDYWxscykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCkpKTsKICAgICB9CiAKIHByaXZh
dGU6Ci0gICAgT01HQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3Qg
aW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1l
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQotICAgICAg
ICA6IEpJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIFdURk1vdmUoZW50
cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKQor
ICAgIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2lu
dCkKKyAgICAgICAgOiBKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpFbWJlZGRlckVu
dHJ5cG9pbnRNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpKQogICAgIHsKICAgICB9CiB9OwogCi1j
bGFzcyBPTUdGb3JPU1JFbnRyeUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBKSVRDYWxsZWUgeworCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQorY2xhc3MgT3B0aW1pemluZ0pJVENhbGxlZSA6
IHB1YmxpYyBKSVRDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8T01HRm9yT1NSRW50
cnlDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGlu
ZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwg
dW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4LCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQorICAgIGNvbnN0
IFZlY3RvcjxPU1JFbnRyeVZhbHVlPiYgc3RhY2ttYXAoQ2FsbFNpdGVJbmRleCkgY29uc3Q7CisK
K3Byb3RlY3RlZDoKKyAgICBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9k
ZSBtb2RlLCBXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6
OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscywgSGFzaE1hcDxDYWxsU2l0ZUlu
ZGV4LCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4+JiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRI
YW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVs
PEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpCisg
ICAgICAgIDogSklUQ2FsbGVlKG1vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZN
b3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKQorICAgICAgICAsIG1fc3RhY2ttYXBz
KFdURk1vdmUoc3RhY2ttYXBzKSkKKyAgICAgICAgLCBtX3VubGlua2VkRXhjZXB0aW9uSGFuZGxl
cnMoV1RGTW92ZShleGNlcHRpb25IYW5kbGVycykpCisgICAgICAgICwgbV9leGNlcHRpb25IYW5k
bGVyTG9jYXRpb25zKFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeUNhbGxlZShXVEZNb3Zl
KGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSwgbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fdW5saW5rZWRFeGNlcHRpb25IYW5kbGVycy5zaXplKCkgPT0gbV9leGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zLnNpemUoKSk7CisgICAgICAgIGxpbmtFeGNlcHRpb25IYW5kbGVy
cygpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSBj
b25zdCB7IHJldHVybiBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7IH0KLSAgICB1aW50MzJf
dCBsb29wSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2xvb3BJbmRleDsgfQotCiBwcml2YXRlOgot
ICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBz
aXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4m
JiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29w
SW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMpCi0g
ICAgICAgIDogSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlN
b2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1
bmxpbmtlZENhbGxzKSkKLSAgICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKLSAgICAgICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgp
CisgICAgdm9pZCBsaW5rRXhjZXB0aW9uSGFuZGxlcnMoKTsKKworICAgIEhhc2hNYXA8Q2FsbFNp
dGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiBtX3N0YWNrbWFwczsKKyAgICBWZWN0b3I8
VW5saW5rZWRIYW5kbGVySW5mbz4gbV91bmxpbmtlZEV4Y2VwdGlvbkhhbmRsZXJzOworICAgIFZl
Y3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4gbV9leGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zOworfTsKKworY2xhc3MgT01HQ2FsbGVlIGZpbmFsIDogcHVibGlj
IE9wdGltaXppbmdKSVRDYWxsZWUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8T01HQ2FsbGVl
PiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3Rk
OjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hNYXA8Q2FsbFNpdGVJ
bmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2Vk
SGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJl
bDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQog
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HQ2FsbGVlKFdURk1vdmUoZW50
cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBX
VEZNb3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4
Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKSk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgbV9vc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplOwotICAgIHVpbnQzMl90IG1fbG9vcEluZGV4OworcHJpdmF0
ZToKKyAgICBPTUdDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBp
bmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hNYXA8
Q2FsbFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVjdG9y
PFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9j
YXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9j
YXRpb25zKQorICAgICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25N
b2RlOjpPTUdNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwg
V1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2Vw
dGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkKKyAgICB7
CisgICAgfQogfTsKLSNlbmRpZgogCi1jbGFzcyBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgZmlu
YWwgOiBwdWJsaWMgSklUQ2FsbGVlIHsKK2NsYXNzIE9NR0Zvck9TUkVudHJ5Q2FsbGVlIGZpbmFs
IDogcHVibGljIE9wdGltaXppbmdKSVRDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5
cG9pbnQpCisgICAgc3RhdGljIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY3JlYXRlKFdhc206
OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBO
YW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hNYXA8Q2FsbFNpdGVJbmRleCwgVmVjdG9yPE9T
UkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYg
ZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKFdURk1vdmUoZW50
cnlwb2ludCkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50cnlD
YWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUsIGxvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RG
TW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNl
cHRpb25IYW5kbGVyTG9jYXRpb25zKSkpOwogICAgIH0KIAorICAgIHVuc2lnbmVkIG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX29zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemU7IH0KKyAgICB1aW50MzJfdCBsb29wSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2xvb3BJ
bmRleDsgfQorCiBwcml2YXRlOgotICAgIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXYXNtOjpF
bnRyeXBvaW50JiYgZW50cnlwb2ludCkKLSAgICAgICAgOiBKSVRDYWxsZWUoV2FzbTo6Q29tcGls
YXRpb25Nb2RlOjpFbWJlZGRlckVudHJ5cG9pbnRNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpKQor
ICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBz
aXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4m
JiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29w
SW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhh
c2hNYXA8Q2FsbFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywg
VmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxD
b2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5k
bGVyTG9jYXRpb25zKQorICAgICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUoV2FzbTo6Q29tcGls
YXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4
LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKHN0YWNrbWFw
cyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJM
b2NhdGlvbnMpKQorICAgICAgICAsIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZShvc3JFbnRy
eVNjcmF0Y2hCdWZmZXJTaXplKQorICAgICAgICAsIG1fbG9vcEluZGV4KGxvb3BJbmRleCkKICAg
ICB7CiAgICAgfQorCisgICAgdW5zaWduZWQgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwor
ICAgIHVpbnQzMl90IG1fbG9vcEluZGV4OwogfTsKIAotI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9C
M0pJVCkKLWNsYXNzIEJCUUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBKSVRDYWxsZWUgeworY2xhc3Mg
QkJRQ2FsbGVlIGZpbmFsIDogcHVibGljIE9wdGltaXppbmdKSVRDYWxsZWUgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8QkJRQ2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5
cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNl
Y3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3Vu
dCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKKyAgICBz
dGF0aWMgUmVmPEJCUUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50
LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9u
Pj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hNYXA8Q2Fs
bFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVjdG9yPFVu
bGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRp
b25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRp
b25zKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQkJRQ2FsbGVlKFdURk1v
dmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50
KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBCQlFDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdU
Rk1vdmUodGllclVwQ291bnQpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKHN0YWNr
bWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRs
ZXJMb2NhdGlvbnMpKSk7CiAgICAgfQogCiAgICAgT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVu
dHJ5Q2FsbGVlKCkgeyByZXR1cm4gbV9vc3JFbnRyeUNhbGxlZS5nZXQoKTsgfQpAQCAtMTc3LDgg
KzIxMCw4IEBAIHB1YmxpYzoKICAgICBUaWVyVXBDb3VudCogdGllclVwQ291bnQoKSB7IHJldHVy
biBtX3RpZXJVcENvdW50LmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgQkJRQ2FsbGVlKFdhc206
OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBO
YW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVw
Q291bnQ+JiYgdGllclVwQ291bnQsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVu
bGlua2VkQ2FsbHMpCi0gICAgICAgIDogSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6
QkJRTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1v
dmUodW5saW5rZWRDYWxscykpCisgICAgQkJRQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRy
eXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVT
ZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291
bnQsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hN
YXA8Q2FsbFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVj
dG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2Rl
TG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVy
TG9jYXRpb25zKQorICAgICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRp
b25Nb2RlOjpCQlFNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1l
KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4
Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkKICAg
ICAgICAgLCBtX3RpZXJVcENvdW50KFdURk1vdmUodGllclVwQ291bnQpKQogICAgIHsKICAgICB9
CkBAIC0yMTgsMTUgKzI1MSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgTExJbnRUaWVyVXBD
b3VudGVyJiB0aWVyVXBDb3VudGVyKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPnRpZXJVcENvdW50
ZXIoKTsgfQorICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBmdW5jdGlvbkNvZGVCbG9jaygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToK
LSAgICBMTEludENhbGxlZShzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IGNvZGVC
bG9jaywgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2Vj
dGlvbj4+JiYgbmFtZSkKLSAgICAgICAgOiBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpM
TEludE1vZGUsIGluZGV4LCBXVEZNb3ZlKG5hbWUpKQotICAgICAgICAsIG1fY29kZUJsb2NrKFdU
Rk1vdmUoY29kZUJsb2NrKSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fY29kZUJs
b2NrKTsKLSAgICB9CisgICAgTExJbnRDYWxsZWUoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29k
ZUJsb2NrPiwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1l
U2VjdGlvbj4+JiYpOworCisgICAgdm9pZCBsaW5rRXhjZXB0aW9uSGFuZGxlcnMoKTsKIAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKICAgICBSZWZQdHI8SklUQ2FsbGVlPiBtX3JlcGxh
Y2VtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxp
bmdDb252ZW50aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaAppbmRleCA2YzAyNmUwOGE0MDllOTk1ZDQzMThkZmIxODA0NjI2ZDBmYWQxNzVm
Li43YmYwMDFlZDkyZWZjYmFmYzBmYmM4YTUwYjRiZjYyNzI1ZDJjY2U1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaApAQCAtMTI1
LDcgKzEyNSw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCByZXN1bHRzSW5jbHVkZUk2NCA9IGZh
bHNlOwogICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKICAgICAgICAgc2l6ZV90
IGZwQXJndW1lbnRDb3VudCA9IDA7Ci0gICAgICAgIHNpemVfdCBhcmdTdGFja09mZnNldCA9IGhl
YWRlclNpemVJbkJ5dGVzOworICAgICAgICBzaXplX3QgYXJnU3RhY2tPZmZzZXQgPSBoZWFkZXJT
aXplSW5CeXRlcyArIHNpemVvZihSZWdpc3Rlcik7CiAgICAgICAgIGlmIChyb2xlID09IENhbGxS
b2xlOjpDYWxsZXIpCiAgICAgICAgICAgICBhcmdTdGFja09mZnNldCAtPSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQyk7CiAKQEAgLTEzNiw3ICsxMzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICAgICAgZ3BBcmd1bWVudENvdW50ID0gMDsKICAgICAgICAgZnBBcmd1bWVudENvdW50ID0gMDsK
LSAgICAgICAgc2l6ZV90IHJlc3VsdFN0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6ZUluQnl0ZXM7Cisg
ICAgICAgIHNpemVfdCByZXN1bHRTdGFja09mZnNldCA9IGhlYWRlclNpemVJbkJ5dGVzICsgc2l6
ZW9mKFJlZ2lzdGVyKTsKICAgICAgICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcikKICAg
ICAgICAgICAgIHJlc3VsdFN0YWNrT2Zmc2V0IC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IGMwY2IzMWI3Y2Jm
MDA2YWEwMTkzNmMxZjQ0NmQ2YjE4OWYwZGUxNTUuLjBhMGM4YWY4ZTgyZmViNmRiYmNlZjAyYmJl
MTA3NzM0MThhZGY1NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgK
QEAgLTI5LDExICsyOSwxNCBAQAogCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVk
ZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKKyNp
bmNsdWRlICJXYXNtSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRp
b24uaCIKICNpbmNsdWRlICJXYXNtTmFtZS5oIgogI2luY2x1ZGUgIldhc21OYW1lU2VjdGlvbi5o
IgorI2luY2x1ZGUgIldhc21PU1JFbnRyeURhdGEuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAj
aW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIKQEAg
LTc2LDYgKzc5LDE5IEBAIGlubGluZSBib29sIGlzVmFsdWVUeXBlKFR5cGUgdHlwZSkKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK2lubGluZSBKU1N0cmluZyogdHlwZVRvU3RyaW5nKFZNJiB2bSwg
VHlwZUtpbmQgdHlwZSkKK3sKKyNkZWZpbmUgVFlQRV9DQVNFKG1hY3JvTmFtZSwgdmFsdWUsIGIz
LCBpbmMsIHdhc21OYW1lKSBcCisgICAgY2FzZSBUeXBlS2luZDo6bWFjcm9OYW1lOiBcCisgICAg
ICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0sICN3YXNtTmFtZSk7IFwKKworICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICBGT1JfRUFDSF9XQVNNX1RZUEUoVFlQRV9DQVNFKQorICAg
IH0KKworI3VuZGVmIFRZUEVfQ0FTRQorfQorCiBpbmxpbmUgYm9vbCBpc1N1YnR5cGUoVHlwZSBz
dWIsIFR5cGUgcGFyZW50KQogewogICAgIGlmIChzdWIuaXNOdWxsYWJsZSgpICYmICFwYXJlbnQu
aXNOdWxsYWJsZSgpKQpAQCAtMTE1LDYgKzEzMSw3IEBAIGVudW0gY2xhc3MgRXh0ZXJuYWxLaW5k
IDogdWludDhfdCB7CiAgICAgVGFibGUgPSAxLAogICAgIE1lbW9yeSA9IDIsCiAgICAgR2xvYmFs
ID0gMywKKyAgICBFeGNlcHRpb24gPSA0LAogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSW50PgpA
QCAtMTI1LDYgKzE0Miw3IEBAIGlubGluZSBib29sIGlzVmFsaWRFeHRlcm5hbEtpbmQoSW50IHZh
bCkKICAgICBjYXNlIHN0YXRpY19jYXN0PEludD4oRXh0ZXJuYWxLaW5kOjpUYWJsZSk6CiAgICAg
Y2FzZSBzdGF0aWNfY2FzdDxJbnQ+KEV4dGVybmFsS2luZDo6TWVtb3J5KToKICAgICBjYXNlIHN0
YXRpY19jYXN0PEludD4oRXh0ZXJuYWxLaW5kOjpHbG9iYWwpOgorICAgIGNhc2Ugc3RhdGljX2Nh
c3Q8SW50PihFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbik6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzQsNiArMTUyLDcgQEAgc3RhdGljX2Fzc2Vy
dChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6RnVuY3Rpb24pID09IDAsICJXYXNtIG5l
ZWRzIEZ1bmN0aW8KIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6
OlRhYmxlKSAgICA9PSAxLCAiV2FzbSBuZWVkcyBUYWJsZSB0byBoYXZlIHRoZSB2YWx1ZSAxIik7
CiBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGludD4oRXh0ZXJuYWxLaW5kOjpNZW1vcnkpICAg
PT0gMiwgIldhc20gbmVlZHMgTWVtb3J5IHRvIGhhdmUgdGhlIHZhbHVlIDIiKTsKIHN0YXRpY19h
c3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6Okdsb2JhbCkgICA9PSAzLCAiV2Fz
bSBuZWVkcyBHbG9iYWwgdG8gaGF2ZSB0aGUgdmFsdWUgMyIpOworc3RhdGljX2Fzc2VydChzdGF0
aWNfY2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6RXhjZXB0aW9uKSAgID09IDQsICJXYXNtIG5lZWRz
IEV4Y2VwdGlvbiB0byBoYXZlIHRoZSB2YWx1ZSA0Iik7CiAKIGlubGluZSBjb25zdCBjaGFyKiBt
YWtlU3RyaW5nKEV4dGVybmFsS2luZCBraW5kKQogewpAQCAtMTQyLDYgKzE2MSw3IEBAIGlubGlu
ZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKEV4dGVybmFsS2luZCBraW5kKQogICAgIGNhc2UgRXh0
ZXJuYWxLaW5kOjpUYWJsZTogcmV0dXJuICJ0YWJsZSI7CiAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6
Ok1lbW9yeTogcmV0dXJuICJtZW1vcnkiOwogICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6
IHJldHVybiAiZ2xvYmFsIjsKKyAgICBjYXNlIEV4dGVybmFsS2luZDo6RXhjZXB0aW9uOiByZXR1
cm4gInRhZyI7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
cmV0dXJuICI/IjsKQEAgLTM3Miw2ICszOTIsOCBAQCBzdHJ1Y3QgRW50cnlwb2ludCB7CiBzdHJ1
Y3QgSW50ZXJuYWxGdW5jdGlvbiB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVE
OwogICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+IGNhbGxlZU1v
dmVMb2NhdGlvbjsKKyAgICBTdGFja01hcHMgc3RhY2ttYXBzOworICAgIFZlY3RvcjxVbmxpbmtl
ZEhhbmRsZXJJbmZvPiBleGNlcHRpb25IYW5kbGVyczsKICAgICBFbnRyeXBvaW50IGVudHJ5cG9p
bnQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVu
Y3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
bkNvZGVCbG9jay5oCmluZGV4IGVhNzVmZTJmNmIwZjlhM2YxNGU3OTNlZDExMjc4ZWZkMGUwOWFj
NzEuLjcyZjNlNjQxMzJjMTdiOTUxMWEzZWJlYTZjNjBkMDAyNGIzMjdiNTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDgg
KzI4LDEwIEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVD
b252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSW5zdHJ1
Y3Rpb25TdHJlYW0uaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNs
dWRlICJXYXNtSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJXYXNtTExJbnRUaWVyVXBDb3VudGVy
LmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0x
MjAsNiArMTIyLDEwIEBAIHB1YmxpYzoKICAgICBjb25zdCBKdW1wVGFibGUmIGp1bXBUYWJsZSh1
bnNpZ25lZCB0YWJsZUluZGV4KSBjb25zdDsKICAgICB1bnNpZ25lZCBudW1iZXJPZkp1bXBUYWJs
ZXMoKSBjb25zdDsKIAorICAgIHNpemVfdCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9leGNlcHRpb25IYW5kbGVycy5zaXplKCk7IH0KKyAgICBVbmxpbmtlZEhh
bmRsZXJJbmZvJiBleGNlcHRpb25IYW5kbGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9leGNlcHRp
b25IYW5kbGVyc1tpbmRleF07IH0KKyAgICB2b2lkIGFkZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3Qg
VW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlcikgeyBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVu
ZChoYW5kbGVyKTsgfQorCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRz
ID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwogCkBAIC0xMzksNiAr
MTQ1LDcgQEAgcHJpdmF0ZToKICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1
bXBUYXJnZXRzOwogICAgIExMSW50VGllclVwQ291bnRlciBtX3RpZXJVcENvdW50ZXI7CiAgICAg
VmVjdG9yPEp1bXBUYWJsZT4gbV9qdW1wVGFibGVzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRs
ZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
blBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2Vy
LmgKaW5kZXggNGU2YjgzMjIwNDA3NzZhMjUxNzIyZWVhMjE4ZjQ2YzJjMzk5MTMxMC4uZmFkN2Q3
NjhlYjEwZjZiNTQ5YzdjODkxOGMxNzZkZTVmMTJmZDY2NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTM3LDcgKzM3LDE0IEBAIGVu
dW0gY2xhc3MgQmxvY2tUeXBlIHsKICAgICBJZiwKICAgICBCbG9jaywKICAgICBMb29wLAotICAg
IFRvcExldmVsCisgICAgVG9wTGV2ZWwsCisgICAgVHJ5LAorICAgIENhdGNoLAorfTsKKworZW51
bSBjbGFzcyBDYXRjaEtpbmQgeworICAgIENhdGNoLAorICAgIENhdGNoQWxsLAogfTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgRW5jbG9zaW5nU3RhY2ssIHR5cGVuYW1lIE5ld1N0YWNrPgpAQCAtMTQ3
LDYgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gcGFyc2VJbmRleEZvckxvY2FsKHVpbnQzMl90Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VJbmRleEZvckdsb2JhbCh1aW50MzJfdCYpOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25JbmRleCh1aW50MzJfdCYp
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXhjZXB0aW9uSW5k
ZXgodWludDMyX3QmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZUJyYW5jaFRhcmdldCh1aW50MzJfdCYpOwogCiAgICAgc3RydWN0IFRhYmxlSW5pdEltbWVkaWF0
ZXMgewpAQCAtMjExLDYgKzIxOSwxMiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbG9vcElu
ZGV4IHsgMCB9OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgQ29udHJvbFR5cGU+CitzdGF0aWMg
Ym9vbCBpc1RyeU9yQ2F0Y2goQ29udHJvbFR5cGUmIGRhdGEpCit7CisgICAgcmV0dXJuIENvbnRy
b2xUeXBlOjppc1RyeShkYXRhKSB8fCBDb250cm9sVHlwZTo6aXNDYXRjaChkYXRhKTsKK30KKwog
dGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5j
dGlvblBhcnNlcihDb250ZXh0JiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0
LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykKICAgICA6IFBhcnNlcihmdW5jdGlvblN0YXJ0LCBm
dW5jdGlvbkxlbmd0aCkKQEAgLTU3NSw2ICs1ODksMTYgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VGdW5jdGlvbkluZGV4KHVpbnQzMl90JiByZXN1bHRJbmRleCkgLT4gUGFy
dGkKICAgICByZXR1cm4geyB9OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYXV0
byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeGNlcHRpb25JbmRleCh1aW50MzJfdCYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgZXhjZXB0aW9uSW5kZXg7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhjZXB0aW9uSW5kZXgp
LCAiY2FuJ3QgcGFyc2UgZXhjZXB0aW9uIGluZGV4Iik7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRihleGNlcHRpb25JbmRleCA+PSBtX2luZm8uZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSwg
ImV4Y2VwdGlvbiBpbmRleCAiLCBleGNlcHRpb25JbmRleCwgIiBpcyBpbnZhbGlkLCBsaW1pdCBp
cyAiLCBtX2luZm8uZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAgcmVzdWx0ID0gZXhj
ZXB0aW9uSW5kZXg7CisgICAgcmV0dXJuIHsgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29u
dGV4dD4KIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQnJhbmNoVGFyZ2V0KHVp
bnQzMl90JiByZXN1bHRUYXJnZXQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKQEAgLTEzMzMsNiArMTM1
NywxMzEgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgY2FzZSBUcnk6IHsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNt
IGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAgQmxvY2tTaWduYXR1cmUg
aW5saW5lU2lnbmF0dXJlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2Nr
U2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCB0cnkncyBzaWdu
YXR1cmUiKTsKKworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0
YWNrLnNpemUoKSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyBh
cmd1bWVudHMgb24gc3RhY2sgZm9yIHRyeSBibG9jay4gVHJ5ZSBleHBlY3RzICIsIGlubGluZVNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25TdGFj
ay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBUcnkgYmxvY2sgaGFzIHNpZ25hdHVyZTogIiwgaW5s
aW5lU2lnbmF0dXJlLT50b1N0cmluZygpKTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9l
eHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3Vt
ZW50Q291bnQoKTsgKytpKQorICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4
cHJlc3Npb25TdGFja1tvZmZzZXQgKyBpXS50eXBlKCkgIT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1
bWVudChpKSwgIlRyeSBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUg
IiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMg
dHlwZSAiLCBtX2V4cHJlc3Npb25TdGFja1tpXS50eXBlKCkua2luZCk7CisKKyAgICAgICAgaW50
NjRfdCBvbGRTaXplID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOworICAgICAgICBTdGFjayBu
ZXdTdGFjazsKKyAgICAgICAgQ29udHJvbFR5cGUgY29udHJvbDsKKyAgICAgICAgV0FTTV9UUllf
QUREX1RPX0NPTlRFWFQoYWRkVHJ5KGlubGluZVNpZ25hdHVyZSwgbV9leHByZXNzaW9uU3RhY2ss
IGNvbnRyb2wsIG5ld1N0YWNrKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU2l6ZSwgb2xk
U2l6ZSAtIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA9PSBpbmxpbmVTaWduYXR1cmUtPmFyZ3Vt
ZW50Q291bnQoKSk7CisgICAgICAgIEFTU0VSVChuZXdTdGFjay5zaXplKCkgPT0gaW5saW5lU2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCkpOworCisgICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVu
ZCh7IFdURk1vdmUobV9leHByZXNzaW9uU3RhY2spLCB7IH0sIFdURk1vdmUoY29udHJvbCkgfSk7
CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gV1RGTW92ZShuZXdTdGFjayk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCisgICAgY2FzZSBDYXRjaDogeworICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20g
ZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKG1fY29udHJvbFN0YWNrLnNpemUoKSA9PSAxLCAiY2FuJ3QgdXNlIGNhdGNoIGJsb2NrIGF0
IHRoZSB0b3AtbGV2ZWwgb2YgYSBmdW5jdGlvbiIpOworCisgICAgICAgIHVpbnQzMl90IGV4Y2Vw
dGlvbkluZGV4OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0
aW9uSW5kZXgoZXhjZXB0aW9uSW5kZXgpKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtX2luZm8uc2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShl
eGNlcHRpb25JbmRleCk7CisgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0
dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisKKyAgICAg
ICAgQ29udHJvbEVudHJ5JiBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7Cisg
ICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzVHJ5T3JDYXRjaChjb250cm9sRW50cnku
Y29udHJvbERhdGEpLCAiY2F0Y2ggYmxvY2sgaXNuJ3QgYXNzb2NpYXRlZCB0byBhIHRyeSIpOwor
ICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KGNvbnRyb2xFbnRyeS5jb250
cm9sRGF0YSkpOworCisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsKKyAgICAgICAgU3RhY2sg
cHJlQ2F0Y2hTdGFjazsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc3dhcChwcmVDYXRjaFN0
YWNrKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2goZXhjZXB0aW9u
SW5kZXgsIGV4Y2VwdGlvblNpZ25hdHVyZSwgcHJlQ2F0Y2hTdGFjaywgY29udHJvbEVudHJ5LmNv
bnRyb2xEYXRhLCByZXN1bHRzKSk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9u
U2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSByZXN1bHRzLnNpemUoKSk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
OyArK2kpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQo
ZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkpLCByZXN1bHRzW2ldKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIENhdGNoQWxsOiB7CisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBl
eGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09IDEsICJjYW4ndCB1c2UgY2F0Y2ggYmxvY2sgYXQg
dGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBj
b250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisKKyAgICAgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRighaXNUcnlPckNhdGNoKGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSksICJj
YXRjaCBibG9jayBpc24ndCBhc3NvY2lhdGVkIHRvIGEgdHJ5Iik7CisgICAgICAgIFdBU01fRkFJ
TF9JRl9IRUxQRVJfRkFJTFModW5pZnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSk7CisKKyAg
ICAgICAgUmVzdWx0TGlzdCByZXN1bHRzOworICAgICAgICBTdGFjayBwcmVDYXRjaFN0YWNrOwor
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKHByZUNhdGNoU3RhY2spOworICAgICAgICBX
QVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYXRjaEFsbChwcmVDYXRjaFN0YWNrLCBjb250cm9s
RW50cnkuY29udHJvbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBj
YXNlIERlbGVnYXRlOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVz
ZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxl
ZCIpOworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suc2l6ZSgp
ID09IDEsICJjYW4ndCB1c2UgZGVsZWdhdGUgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9u
Iik7CisKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xF
bnRyeSBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOworICAgICAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnkoY29udHJvbEVudHJ5LmNv
bnRyb2xEYXRhKSwgImRlbGVnYXRlIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKworICAg
ICAgICBDb250cm9sVHlwZSYgdGFyZ2V0RGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0
YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdLmNvbnRyb2xEYXRhOworICAgICAgICBXQVNNX1ZBTElE
QVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnkodGFyZ2V0RGF0YSkgJiYgIUNvbnRyb2xU
eXBlOjppc1RvcExldmVsKHRhcmdldERhdGEpLCAiZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5
IG9yIHRoZSB0b3AgbGV2ZWwgYmxvY2siKTsKKworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09O
VEVYVChhZGREZWxlZ2F0ZSh0YXJnZXREYXRhLCBjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsK
KyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeShjb250cm9sRW50cnkuY29u
dHJvbERhdGEpKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZW5kQmxvY2soY29u
dHJvbEVudHJ5LCBtX2V4cHJlc3Npb25TdGFjaykpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFj
ay5zd2FwKGNvbnRyb2xFbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfQorCisgICAgY2FzZSBUaHJvdzogeworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhj
ZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICB1aW50MzJfdCBleGNlcHRpb25J
bmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbklu
ZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0
aW9uSW5kZXgpOworICAgICAgICBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworCisgICAgICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIDwgZXhjZXB0aW9u
U2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIlRvbyBmZXcgYXJndW1lbnRzIG9uIHN0YWNrIGZv
ciB0aGUgZXhjZXB0aW9uIGJlaW5nIHRocm93bi4gVGhlIGV4Y2VwdGlvbiBleHBlY3RzICIsIGV4
Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5ICIsIG1fZXhwcmVz
c2lvblN0YWNrLnNpemUoKSwgIiB3ZXJlIHByZXNlbnQuIEV4Y2VwdGlvbiBoYXMgc2lnbmF0dXJl
OiAiLCBleGNlcHRpb25TaWduYXR1cmUudG9TdHJpbmcoKSk7CisgICAgICAgIHVuc2lnbmVkIG9m
ZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7CisgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4gYXJnczsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9u
U2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5
IGZvciB0aHJvdydzICIsIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICIgYXJn
dW1lbnRzIik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lv
biBhcmcgPSBtX2V4cHJlc3Npb25TdGFjay5hdChvZmZzZXQgKyBpKTsKKyAgICAgICAgICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYoYXJnLnR5cGUoKSAhPSBleGNlcHRpb25TaWduYXR1cmUuYXJn
dW1lbnQoaSksICJUaGUgZXhjZXB0aW9uIGJlaW5nIHRocm93biBleHBlY3RzIHRoZSBhcmd1bWVu
dCBhdCBpbmRleCAiLCBpLCAiIHRvIGJlICIsIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudChp
KS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBhcmcudHlwZSgpLmtpbmQpOworICAg
ICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQoYXJnKTsKKyAgICAgICAgICAgIG1fY29udGV4
dC5kaWRQb3BWYWx1ZUZyb21TdGFjaygpOworICAgICAgICB9CisgICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLnNocmluayhvZmZzZXQpOworCisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhU
KGFkZFRocm93KGV4Y2VwdGlvbkluZGV4LCBhcmdzLCBtX2V4cHJlc3Npb25TdGFjaykpOworICAg
ICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBjYXNlIFJldGhyb3c6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0
aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5v
dCBlbmFibGVkIik7CisKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZB
SUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAg
IENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgp
IC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYoIUNvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpLCAicmV0aHJvdyBkb2Vzbid0IHJlZmVy
IHRvIGEgY2F0Y2ggYmxvY2siKTsKKworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChh
ZGRSZXRocm93KHRhcmdldCwgZGF0YSkpOworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0g
MTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjYXNlIEJyOgogICAgIGNhc2Ug
QnJJZjogewogICAgICAgICB1aW50MzJfdCB0YXJnZXQ7CkBAIC0xNDg3LDYgKzE2MzYsNjYgQEAg
YXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24o
KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgY2Fz
ZSBDYXRjaDogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJB
c3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsK
KworICAgICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lG
X0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisgICAg
ICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4
RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOworICAgICAgICBjb25zdCBT
aWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlSW5kZXgpOworCisgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkK
KyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0g
bV9jb250cm9sU3RhY2subGFzdCgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFp
c1RyeU9yQ2F0Y2goZGF0YS5jb250cm9sRGF0YSksICJjYXRjaCBibG9jayBpc24ndCBhc3NvY2lh
dGVkIHRvIGEgdHJ5Iik7CisKKyAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDA7CisgICAg
ICAgIG1fZXhwcmVzc2lvblN0YWNrID0geyB9OworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7
CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhdGNoVG9VbnJlYWNoYWJsZShl
eGNlcHRpb25JbmRleCwgZXhjZXB0aW9uU2lnbmF0dXJlLCBkYXRhLmNvbnRyb2xEYXRhLCByZXN1
bHRzKSk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKSA9PSByZXN1bHRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAg
ICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0
dXJlLmFyZ3VtZW50KGkpLCByZXN1bHRzW2ldKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBjYXNlIENhdGNoQWxsOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9w
dGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBu
b3QgZW5hYmxlZCIpOworCisgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKKyAg
ICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9j
b250cm9sU3RhY2subGFzdCgpOworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMDsKKyAg
ICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSB7IH07CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoIWlzVHJ5T3JDYXRjaChkYXRhLmNvbnRyb2xEYXRhKSwgImNhdGNoIGJsb2NrIGlzbid0
IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQo
YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKGRhdGEuY29udHJvbERhdGEpKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIERlbGVnYXRlOiB7CisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBl
eGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09IDEsICJjYW4ndCB1c2UgZGVsZWdhdGUgYXQgdGhl
IHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0Owor
ICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdl
dCkpOworCisgICAgICAgIENvbnRyb2xFbnRyeSBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFj
ay50YWtlTGFzdCgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlw
ZTo6aXNUcnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSwgImRlbGVnYXRlIGlzbid0IGFzc29j
aWF0ZWQgdG8gYSB0cnkiKTsKKworICAgICAgICBDb250cm9sVHlwZSYgZGF0YSA9IG1fY29udHJv
bFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdLmNvbnRyb2xEYXRhOwor
ICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkg
JiYgIUNvbnRyb2xUeXBlOjppc1RvcExldmVsKGRhdGEpLCAiZGVsZWdhdGUgdGFyZ2V0IGlzbid0
IGEgdHJ5IGJsb2NrIik7CisKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRGVs
ZWdhdGVUb1VucmVhY2hhYmxlKGRhdGEsIGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworICAg
ICAgICBTdGFjayBlbXB0eVN0YWNrOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChh
ZGRFbmRUb1VucmVhY2hhYmxlKGNvbnRyb2xFbnRyeSwgZW1wdHlTdGFjaykpOworICAgICAgICBt
X2V4cHJlc3Npb25TdGFjay5zd2FwKGNvbnRyb2xFbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFj
ayk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCiAgICAgY2FzZSBFbmQ6IHsKICAgICAg
ICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MgPT0gMSkgewogICAgICAgICAgICAgQ29udHJvbEVu
dHJ5IGRhdGEgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOwpAQCAtMTQ5NSw4ICsxNzA0LDEw
IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNz
aW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNr
ID0gV1RGTW92ZShkYXRhLmVsc2VCbG9ja1N0YWNrKTsKICAgICAgICAgICAgICAgICBXQVNNX0ZB
SUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KGRhdGEuY29udHJvbERhdGEpKTsKICAgICAgICAgICAg
ICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChlbmRCbG9jayhkYXRhLCBtX2V4cHJlc3Npb25T
dGFjaykpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgV0FTTV9UUllfQURE
X1RPX0NPTlRFWFQoYWRkRW5kVG9VbnJlYWNoYWJsZShkYXRhKSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIFN0YWNrIGVtcHR5U3RhY2s7CisgICAgICAgICAgICAgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRW5kVG9VbnJlYWNoYWJsZShkYXRhLCBlbXB0eVN0
YWNrKSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3
YXAoZGF0YS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CiAgICAgICAgIH0KQEAgLTE1MDQsNiAr
MTcxNSwxMCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxl
RXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAKKyAgICBjYXNlIFRyeToKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6
dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFi
bGVkIik7CisgICAgICAgIEZBTExUSFJPVUdIOworCiAgICAgY2FzZSBMb29wOgogICAgIGNhc2Ug
SWY6CiAgICAgY2FzZSBCbG9jazogewpAQCAtMTU3Niw2ICsxNzkxLDE2IEBAIGF1dG8gRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlh
bFJlc3VsdAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAorICAgIGNhc2UgUmV0aHJvdzog
eworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4
Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKyAgICAgICAg
dWludDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNl
QnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9j
b250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERh
dGE7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjppc0FueUNh
dGNoKGRhdGEpLCAicmV0aHJvdyBkb2Vzbid0IHJlZmVyIHRvIGEgY2F0Y2ggYmxvY2siKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjYXNlIEJyOgogICAgIGNhc2UgQnJJZjog
ewogICAgICAgICB1aW50MzJfdCB0YXJnZXQ7CkBAIC0xNTgzLDYgKzE4MDgsMTUgQEAgYXV0byBG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQ
YXJ0aWFsUmVzdWx0CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgY2FzZSBUaHJv
dzogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJs
eUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAg
ICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjYXNlIEkzMkNvbnN0OiB7CiAgICAgICAgIGludDMy
X3QgdW51c2VkOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDMyKHVu
dXNlZCksICJjYW4ndCBnZXQgaW1tZWRpYXRlIGZvciAiLCBtX2N1cnJlbnRPcGNvZGUsICIgaW4g
dW5yZWFjaGFibGUgY29udGV4dCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21IYW5kbGVySW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDg1NzQ3NTdkNmNhMzVjYmVlZDMyZWNlZmY3
MmNjNjZhMjFhODQ5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21IYW5kbGVySW5mby5jcHAKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldhc21IYW5kbGVySW5mby5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisj
aW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIFdh
c20geworCit2b2lkIEhhbmRsZXJJbmZvOjppbml0aWFsaXplKGNvbnN0IFVubGlua2VkSGFuZGxl
ckluZm8mIHVubGlua2VkSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+IGxhYmVsKQoreworICAgIG1fdHlwZSA9IHVubGlua2VkSW5mby5tX3R5cGU7Cisg
ICAgbV9zdGFydCA9IHVubGlua2VkSW5mby5tX3N0YXJ0OworICAgIG1fZW5kID0gdW5saW5rZWRJ
bmZvLm1fZW5kOworICAgIG1fdGFyZ2V0ID0gdW5saW5rZWRJbmZvLm1fdGFyZ2V0OworICAgIG1f
dHJ5RGVwdGggPSB1bmxpbmtlZEluZm8ubV90cnlEZXB0aDsKKyAgICBtX25hdGl2ZUNvZGUgPSBs
YWJlbDsKKworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBIYW5kbGVyVHlwZTo6Q2F0
Y2g6CisgICAgICAgIG1fdGFnID0gdW5saW5rZWRJbmZvLm1fZXhjZXB0aW9uSW5kZXhPckRlbGVn
YXRlVGFyZ2V0OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSGFuZGxlclR5cGU6OkNhdGNo
QWxsOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgSGFuZGxlclR5cGU6OkRlbGVnYXRlOgor
ICAgICAgICBtX2RlbGVnYXRlVGFyZ2V0ID0gdW5saW5rZWRJbmZvLm1fZXhjZXB0aW9uSW5kZXhP
ckRlbGVnYXRlVGFyZ2V0OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2NvbnN0IEhhbmRs
ZXJJbmZvKiBIYW5kbGVySW5mbzo6aGFuZGxlckZvckluZGV4KEluc3RhbmNlJiBpbnN0YW5jZSwg
Y29uc3QgVmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhlcHRpb25IYW5kbGVycywgdW5zaWduZWQgaW5k
ZXgsIGNvbnN0IFdhc206OlRhZyogZXhjZXB0aW9uVGFnKQoreworICAgIGJvb2wgZGVsZWdhdGlu
ZyA9IGZhbHNlOworICAgIHVuc2lnbmVkIGRlbGVnYXRlVGFyZ2V0ID0gMDsKKyAgICBmb3IgKGF1
dG8mIGhhbmRsZXIgOiBleGVwdGlvbkhhbmRsZXJzKSB7CisgICAgICAgIC8vIEhhbmRsZXJzIGFy
ZSBvcmRlcmVkIGlubmVybW9zdCBmaXJzdCwgc28gdGhlIGZpcnN0IGhhbmRsZXIgd2UgZW5jb3Vu
dGVyCisgICAgICAgIC8vIHRoYXQgY29udGFpbnMgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIHRoZSBj
b3JyZWN0IGhhbmRsZXIgdG8gdXNlLgorICAgICAgICAvLyBUaGlzIGluZGV4IHVzZWQgaXMgZWl0
aGVyIHRoZSBCeXRlY29kZU9mZnNldCBvciBhIENhbGxTaXRlSW5kZXguCisgICAgICAgIGlmICho
YW5kbGVyLm1fc3RhcnQgPD0gaW5kZXggJiYgaGFuZGxlci5tX2VuZCA+IGluZGV4KSB7CisgICAg
ICAgICAgICBpZiAoZGVsZWdhdGluZykgeworICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLm1f
dHJ5RGVwdGggIT0gZGVsZWdhdGVUYXJnZXQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIGRlbGVnYXRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgYm9vbCBtYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgc3dpdGNoIChoYW5k
bGVyLm1fdHlwZSkgeworICAgICAgICAgICAgY2FzZSBIYW5kbGVyVHlwZTo6Q2F0Y2g6CisgICAg
ICAgICAgICAgICAgbWF0Y2ggPSBleGNlcHRpb25UYWcgJiYgaW5zdGFuY2UudGFnKGhhbmRsZXIu
bV90YWcpID09ICpleGNlcHRpb25UYWc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEhhbmRsZXJUeXBlOjpDYXRjaEFsbDoKKyAgICAgICAgICAgICAgICBtYXRjaCA9
IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEhhbmRsZXJU
eXBlOjpEZWxlZ2F0ZToKKyAgICAgICAgICAgICAgICBkZWxlZ2F0aW5nID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBkZWxlZ2F0ZVRhcmdldCA9IGhhbmRsZXIubV9kZWxlZ2F0ZVRhcmdldDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFt
YXRjaCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgcmV0dXJuICZo
YW5kbGVyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5mby5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmMyNTExOTNkMjEzMTc5ZWJkZTk5NTQ0YzI1M2VkNDk4OWQyZjY0M2UKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaApAQCAt
MCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAi
Q29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIEpT
QyB7CituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIEluc3RhbmNlOworY2xhc3MgVGFnOworCitl
bnVtIGNsYXNzIEhhbmRsZXJUeXBlIHsKKyAgICBDYXRjaCA9IDAsCisgICAgQ2F0Y2hBbGwgPSAx
LAorICAgIERlbGVnYXRlID0gMiwKK307CisKK3N0cnVjdCBIYW5kbGVySW5mb0Jhc2UgeworICAg
IEhhbmRsZXJUeXBlIG1fdHlwZTsKKyAgICB1aW50MzJfdCBtX3N0YXJ0OworICAgIHVpbnQzMl90
IG1fZW5kOworICAgIHVpbnQzMl90IG1fdGFyZ2V0OworICAgIHVpbnQzMl90IG1fdHJ5RGVwdGg7
CisgICAgdWludDMyX3QgbV9leGNlcHRpb25JbmRleE9yRGVsZWdhdGVUYXJnZXQ7Cit9OworCitz
dHJ1Y3QgVW5saW5rZWRIYW5kbGVySW5mbyA6IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgeworICAg
IFVubGlua2VkSGFuZGxlckluZm8oKQorICAgIHsKKyAgICB9CisKKyAgICBVbmxpbmtlZEhhbmRs
ZXJJbmZvKEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3Qg
ZW5kLCB1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHRyeURlcHRoLCB1aW50MzJfdCBleGNlcHRp
b25JbmRleE9yRGVsZWdhdGVUYXJnZXQpCisgICAgeworICAgICAgICBtX3R5cGUgPSBoYW5kbGVy
VHlwZTsKKyAgICAgICAgbV9zdGFydCA9IHN0YXJ0OworICAgICAgICBtX2VuZCA9IGVuZDsKKyAg
ICAgICAgbV90YXJnZXQgPSB0YXJnZXQ7CisgICAgICAgIG1fdHJ5RGVwdGggPSB0cnlEZXB0aDsK
KyAgICAgICAgbV9leGNlcHRpb25JbmRleE9yRGVsZWdhdGVUYXJnZXQgPSBleGNlcHRpb25JbmRl
eE9yRGVsZWdhdGVUYXJnZXQ7CisgICAgfQorfTsKKworc3RydWN0IEhhbmRsZXJJbmZvIDogcHVi
bGljIEhhbmRsZXJJbmZvQmFzZSB7CisgICAgc3RhdGljIGNvbnN0IEhhbmRsZXJJbmZvKiBoYW5k
bGVyRm9ySW5kZXgoSW5zdGFuY2UmLCBjb25zdCBWZWN0b3I8SGFuZGxlckluZm8+JiBleGVwdGlv
bkhhbmRsZXJzLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgV2FzbTo6VGFnKiBleGNlcHRpb25UYWcp
OworCisgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4pOworCisgICAgdW5zaWdu
ZWQgdGFnKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSGFuZGxlclR5
cGU6OkNhdGNoKTsKKyAgICAgICAgcmV0dXJuIG1fdGFnOworICAgIH0KKworICAgIHVuc2lnbmVk
IGRlbGVnYXRlVGFyZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0g
SGFuZGxlclR5cGU6OkRlbGVnYXRlKTsKKyAgICAgICAgcmV0dXJuIG1fZGVsZWdhdGVUYXJnZXQ7
CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IG1fbmF0aXZlQ29kZTsKKworcHJpdmF0ZToKKyAgICB1bmlvbiB7CisgICAgICAgIHVuc2ln
bmVkIG1fdGFnOworICAgICAgICB1bnNpZ25lZCBtX2RlbGVnYXRlVGFyZ2V0OworICAgIH07Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3Rh
bmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKaW5k
ZXggZmZkNzVjOGQwYzhmOWFiNzMxZjdjYjQ5YTg0MmQ5MDY1YjgyODNiNi4uNmZjYjdmMTNkNWIy
ZTJjZGNkNDNjY2M2MTAwZWZlYzU0M2IxOTQwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtSW5zdGFuY2UuY3BwCkBAIC05MCw3ICs5MCw5IEBAIFJlZjxJbnN0YW5jZT4gSW5z
dGFuY2U6OmNyZWF0ZShDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgRW50
cnlGcmFtCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2MoYWxs
b2NhdGlvblNpemUobW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291
bnQoKSwgbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSkpKSBJbnN0YW5j
ZShjb250ZXh0LCBXVEZNb3ZlKG1vZHVsZSksIHBvaW50ZXJUb1RvcEVudHJ5RnJhbWUsIHBvaW50
ZXJUb0FjdHVhbFN0YWNrTGltaXQsIFdURk1vdmUoc3RvcmVUb3BDYWxsRnJhbWUpKSk7CiB9CiAK
LUluc3RhbmNlOjp+SW5zdGFuY2UoKSB7IH0KK0luc3RhbmNlOjp+SW5zdGFuY2UoKQoreworfQog
CiBzaXplX3QgSW5zdGFuY2U6OmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkgY29uc3QKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKaW5kZXggNjBlMTRjYjVhYzA2NTgy
NDQzNDM3ODA5ZDU0NjMzZWRmNzFjYzhiOS4uMDgyNzNlZGI4MDljOGNiZjNiMTY4NGY1MTE4ZTQ4
NDYyYWRhMDNmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUlu
c3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgK
QEAgLTIxMCw2ICsyMTAsMTAgQEAgcHVibGljOgogICAgICAgICBtX3N0b3JlVG9wQ2FsbEZyYW1l
KGNhbGxGcmFtZSk7CiAgICAgfQogCisgICAgdm9pZCBhZGRUYWcoY29uc3QgVGFnJiB0YWcpIHsg
bV90YWdzLmFwcGVuZChSZWYgeyB0YWcgfSk7IH0KKyAgICB2b2lkIGFkZFRhZyhUYWcmJiB0YWcp
IHsgbV90YWdzLmFwcGVuZChhZG9wdFJlZih0YWcpKTsgfQorICAgIGNvbnN0IFRhZyYgdGFnKHVu
c2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX3RhZ3NbaV07IH0KKwogcHJpdmF0ZToKICAgICBJ
bnN0YW5jZShDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgRW50cnlGcmFtZSoqLCB2b2lkKiosIFN0
b3JlVG9wQ2FsbEZyYW1lQ2FsbGJhY2smJik7CiAgICAgCkBAIC0yMzcsNiArMjQxLDcgQEAgcHJp
dmF0ZToKICAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWY8R2xvYmFsPiwgSW50SGFzaDx1aW50MzJf
dD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2xpbmtl
ZEdsb2JhbHM7CiAgICAgQml0VmVjdG9yIG1fcGFzc2l2ZUVsZW1lbnRzOwogICAgIEJpdFZlY3Rv
ciBtX3Bhc3NpdmVEYXRhU2VnbWVudHM7CisgICAgVmVjdG9yPFJlZlB0cjxjb25zdCBUYWc+PiBt
X3RhZ3M7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKaW5kZXggODFhNWNkYmNh
ZTMyODZiZTMyY2E0OTBkZTQ1ZWUzYWZmNzgxOTg1Ni4uMzU3NjY2YmRjM2Q2NWRlNDU3MGZkNTVl
ODk5YzY2ZWVkMTI4M2MxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC02Miw4ICs2MiwyNiBAQCBwdWJsaWM6CiAgICAgICAg
IFJlZjxMYWJlbD4gbV9hbHRlcm5hdGU7CiAgICAgfTsKIAotICAgIHN0cnVjdCBDb250cm9sVHlw
ZSA6IHB1YmxpYyBWYXJpYW50PENvbnRyb2xMb29wLCBDb250cm9sVG9wTGV2ZWwsIENvbnRyb2xC
bG9jaywgQ29udHJvbElmPiB7Ci0gICAgICAgIHVzaW5nIEJhc2UgPSBWYXJpYW50PENvbnRyb2xM
b29wLCBDb250cm9sVG9wTGV2ZWwsIENvbnRyb2xCbG9jaywgQ29udHJvbElmPjsKKyAgICBzdHJ1
Y3QgQ29udHJvbFRyeSB7CisgICAgICAgIFJlZjxMYWJlbD4gbV90cnk7CisgICAgICAgIHVuc2ln
bmVkIG1fdHJ5RGVwdGg7CisgICAgfTsKKworICAgIHN0cnVjdCBDb250cm9sQ2F0Y2ggeworICAg
ICAgICBDYXRjaEtpbmQgbV9raW5kOworICAgICAgICBSZWY8TGFiZWw+IG1fdHJ5U3RhcnQ7Cisg
ICAgICAgIFJlZjxMYWJlbD4gbV90cnlFbmQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5RGVwdGg7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX2V4Y2VwdGlvbjsKKyAgICB9OworCisgICAgc3Ry
dWN0IENhdGNoUmV3cml0ZUluZm8geworICAgICAgICB1bnNpZ25lZCBtX2luc3RydWN0aW9uT2Zm
c2V0OworICAgICAgICB1bnNpZ25lZCBtX3RyeURlcHRoOworICAgIH07CisKKyAgICBzdHJ1Y3Qg
Q29udHJvbFR5cGUgOiBwdWJsaWMgVmFyaWFudDxDb250cm9sTG9vcCwgQ29udHJvbFRvcExldmVs
LCBDb250cm9sQmxvY2ssIENvbnRyb2xJZiwgQ29udHJvbFRyeSwgQ29udHJvbENhdGNoPiB7Cisg
ICAgICAgIHVzaW5nIEJhc2UgPSBWYXJpYW50PENvbnRyb2xMb29wLCBDb250cm9sVG9wTGV2ZWws
IENvbnRyb2xCbG9jaywgQ29udHJvbElmLCBDb250cm9sVHJ5LCBDb250cm9sQ2F0Y2g+OwogCiAg
ICAgICAgIENvbnRyb2xUeXBlKCkKICAgICAgICAgICAgIDogQmFzZShDb250cm9sQmxvY2sgeyB9
KQpAQCAtOTAsOCArMTA4LDI5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBDb250cm9s
VHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBX
VEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xJZiB7IFdURk1vdmUoYWx0ZXJuYXRlKSB9KTsK
ICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJvbFR5cGUm
IGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbElmPihjb250
cm9sKTsgfQorICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgY3JlYXRlVHJ5KEJsb2NrU2lnbmF0
dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWY8TGFiZWw+JiYgdHJ5TGFiZWws
IFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24sIHVuc2lnbmVkIHRyeURlcHRoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUg
LSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250
cm9sVHJ5IHsgV1RGTW92ZSh0cnlMYWJlbCksIHRyeURlcHRoIH0pOworICAgICAgICB9CisKKyAg
ICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGNyZWF0ZUNhdGNoKEJsb2NrU2lnbmF0dXJlIHNpZ25h
dHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWY8TGFiZWw+JiYgdHJ5U3RhcnQsIFJlZlB0cjxM
YWJlbD4mJiBjb250aW51YXRpb24sIFJlZjxMYWJlbD4gdHJ5RW5kLCB1bnNpZ25lZCB0cnlEZXB0
aCwgVmlydHVhbFJlZ2lzdGVyIGV4Y2VwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbENhdGNoIHsgQ2F0Y2hLaW5k
OjpDYXRjaCwgV1RGTW92ZSh0cnlTdGFydCksIFdURk1vdmUodHJ5RW5kKSwgdHJ5RGVwdGgsIGV4
Y2VwdGlvbiB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBib29sIGlzTG9vcChjb25z
dCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxD
b250cm9sTG9vcD4oY29udHJvbCk7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNUb3BMZXZlbChj
b25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxDb250cm9sVG9wTGV2ZWw+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQmxv
Y2soY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8Q29udHJvbEJsb2NrPihjb250cm9sKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0lm
KGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPENvbnRyb2xJZj4oY29udHJvbCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNUcnkoY29u
c3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
Q29udHJvbFRyeT4oY29udHJvbCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNBbnlDYXRjaChj
b25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxDb250cm9sQ2F0Y2g+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2go
Y29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQ2F0Y2g+KGNvbnRyb2wpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIENvbnRyb2xDYXRjaCBjYXRjaERhdGEg
PSBXVEY6OmdldDxDb250cm9sQ2F0Y2g+KGNvbnRyb2wpOworICAgICAgICAgICAgcmV0dXJuIGNh
dGNoRGF0YS5tX2tpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaDsKKyAgICAgICAgfQogCiAgICAgICAg
IHVuc2lnbmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tTaXplOyB9CiAgICAg
ICAgIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJl
OyB9CkBAIC0xNTIsMTcgKzE5MSwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBmYWlsZWQgY29tcGlsaW5n
OiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKICAgICB9CiAKLSAgICBMTEludEdlbmVyYXRv
cihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYpOworICAgIExMSW50R2VuZXJhdG9yKE1vZHVsZUluZm9ybWF0aW9uJiwgdW5z
aWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJik7CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IGZpbmFsaXplKCk7CiAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcGNvZGU+CisgICAgdm9pZCByZXBhdGNoKGNvbnN0IENhdGNoUmV3cml0ZUluZm8mKTsK
KwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4cHJlc3Npb25MaXN0QSwgdHlwZW5hbWUgRXhwcmVz
c2lvbkxpc3RCPgogICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lv
bkxpc3RBJiBkZXN0aW5hdGlvbnMsIGNvbnN0IEV4cHJlc3Npb25MaXN0QiYgdmFsdWVzKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGRlc3RpbmF0aW9ucy5zaXplKCkgPD0gdmFsdWVzLnNpemUoKSk7
CiAgICAgICAgIGF1dG8gb2Zmc2V0ID0gdmFsdWVzLnNpemUoKSAtIGRlc3RpbmF0aW9ucy5zaXpl
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVzdGluYXRpb25zLnNpemUoKTsg
KytpKQotICAgICAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBkZXN0aW5hdGlvbnNbaV0sIHZh
bHVlc1tvZmZzZXQgKyBpXSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVzdGlu
YXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvJiBzcmMgPSB2YWx1ZXNbb2Zm
c2V0ICsgaV07CisgICAgICAgICAgICBhdXRvJiBkc3QgPSBkZXN0aW5hdGlvbnNbaV07CisgICAg
ICAgICAgICBpZiAoKFZpcnR1YWxSZWdpc3RlcilzcmMgIT0gKFZpcnR1YWxSZWdpc3Rlcilkc3Qp
CisgICAgICAgICAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBkc3QsIHNyYyk7CisgICAgICAg
IH0KICAgICB9CiAKICAgICBlbnVtIE5vQ29uc2lzdGVuY3lDaGVja1RhZyB7IE5vQ29uc2lzdGVu
Y3lDaGVjayB9OwpAQCAtMjQzLDExICsyODksMjEgQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbFR5cGUmLCBTdGFjayYpOwogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENv
bnRyb2xUeXBlJik7CiAKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRU
cnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJl
c3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwg
U3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsKFN0YWNrJiwgQ29u
dHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRj
aEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRyb2xUeXBlJik7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRGVsZWdhdGVUb1VucmVhY2hh
YmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9sVHlwZSYpOworCiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xUeXBl
JiwgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkQnJhbmNoKENvbnRyb2xUeXBlJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBT
dGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJv
bFR5cGUqPiYgdGFyZ2V0cywgQ29udHJvbFR5cGUmIGRlZmF1bHRUYXJnZXRzLCBTdGFjayYgZXhw
cmVzc2lvblN0YWNrKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRC
bG9jayhDb250cm9sRW50cnkmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRy
eSYsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSB7IH0sIGJvb2wgdW5yZWFjaGFibGUg
PSB0cnVlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYsIFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIGJvb2wgdW5y
ZWFjaGFibGUgPSB0cnVlKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBl
bmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSwgY29uc3QgU3RhY2smKTsKIAogICAgIC8vIENhbGxz
CkBAIC0zMzcsNyArMzkzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFdhc21Ecm9wS2VlcDo6
ZW1pdCh0aGlzLCBzdGFydE9mZnNldCwgZHJvcCwga2VlcCk7CiAgICAgfQogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdGFjaywgdHlwZW5h
bWUgRnVuY3Rvcj4KICAgICB2b2lkIHdhbGtFeHByZXNzaW9uU3RhY2soU3RhY2smIGV4cHJlc3Np
b25TdGFjaywgdW5zaWduZWQgc3RhY2tTaXplLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAg
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgaSA+
IDA7IC0taSkgewpAQCAtMzQ2LDcgKzQwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFN0YWNrLCB0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgd2Fsa0V4cHJlc3Npb25TdGFjayhT
dGFjayYgZXhwcmVzc2lvblN0YWNrLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAg
ICAgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhleHByZXNzaW9uU3RhY2ssIG1fc3RhY2tTaXplLCBm
dW5jdG9yKTsKQEAgLTM1NSw3ICs0MTEsOCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CiAgICAgdm9pZCB3YWxrRXhwcmVzc2lvblN0YWNrKENvbnRyb2xFbnRyeSYg
ZW50cnksIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICB3YWxrRXhwcmVz
c2lvblN0YWNrKGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLCBlbnRyeS5jb250cm9sRGF0
YS5zdGFja1NpemUoKSwgZnVuY3Rvcik7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSA9IGVu
dHJ5LmNvbnRyb2xEYXRhLnN0YWNrU2l6ZSgpOworICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNr
KGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLCBzdGFja1NpemUsIGZ1bmN0b3IpOwogICAg
IH0KIAogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpCkBAIC0zODEsNyArNDM4LDcgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgbWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMoU3RhY2smIGV4
cHJlc3Npb25TdGFjaywgTm9Db25zaXN0ZW5jeUNoZWNrVGFnKQogICAgIHsKLSAgICAgICAgd2Fs
a0V4cHJlc3Npb25TdGFjayhleHByZXNzaW9uU3RhY2ssIFsmXShUeXBlZEV4cHJlc3Npb24mIGV4
cHJlc3Npb24sIFZpcnR1YWxSZWdpc3RlciBzbG90KSB7CisgICAgICAgIHdhbGtFeHByZXNzaW9u
U3RhY2soZXhwcmVzc2lvblN0YWNrLCBbJl0oYXV0byYgZXhwcmVzc2lvbiwgVmlydHVhbFJlZ2lz
dGVyIHNsb3QpIHsKICAgICAgICAgICAgIEFTU0VSVChleHByZXNzaW9uLnZhbHVlKCkgPT0gc2xv
dCB8fCBleHByZXNzaW9uLnZhbHVlKCkuaXNDb25zdGFudCgpIHx8IGV4cHJlc3Npb24udmFsdWUo
KS5pc0FyZ3VtZW50KCkgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4cHJlc3Npb24udmFsdWUo
KS50b0xvY2FsKCkpIDwgbV9jb2RlQmxvY2stPm1fbnVtVmFycyk7CiAgICAgICAgICAgICBpZiAo
ZXhwcmVzc2lvbi52YWx1ZSgpID09IHNsb3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
NDE3LDYgKzQ3NCw4IEBAIHByaXZhdGU6CiAgICAgICAgIG1fc3RhY2tTaXplICs9IG5ld1N0YWNr
LnNpemUoKTsKICAgICB9CiAKKyAgICB2b2lkIGZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNo
KENvbnRyb2xUeXBlJiwgU3RhY2smKTsKKwogICAgIHN0cnVjdCBTd2l0Y2hFbnRyeSB7CiAgICAg
ICAgIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0OwogICAgICAgICBpbnQqIGp1bXBU
YXJnZXQ7CkBAIC00MjksNyArNDg4LDcgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgRnVuY3Rp
b25QYXJzZXI8TExJbnRHZW5lcmF0b3I+KiBtX3BhcnNlciB7IG51bGxwdHIgfTsKLSAgICBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOworICAgIE1vZHVsZUluZm9ybWF0aW9uJiBtX2lu
Zm87CiAgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4IHsgVUlOVF9NQVggfTsKICAg
ICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBtX25vcm1hbGl6ZWRBcmd1bWVudHM7CiAgICAgSGFz
aE1hcDxMYWJlbCosIFZlY3RvcjxTd2l0Y2hFbnRyeT4+IG1fc3dpdGNoZXM7CkBAIC00NDAsOSAr
NDk5LDEyIEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4gbV9yZXN1
bHRzOwogICAgIENoZWNrZWQ8dW5zaWduZWQ+IG1fc3RhY2tTaXplIHsgMCB9OwogICAgIENoZWNr
ZWQ8dW5zaWduZWQ+IG1fbWF4U3RhY2tTaXplIHsgMCB9OworICAgIENoZWNrZWQ8dW5zaWduZWQ+
IG1fdHJ5RGVwdGggeyAwIH07CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9tYXhUcnlEZXB0aCB7
IDAgfTsKKyAgICBib29sIG1fdXNlc0V4Y2VwdGlvbnMgeyBmYWxzZSB9OwogfTsKIAotRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rp
b25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgdWludDMyX3QgZnVuY3Rpb25JbmRleCkKK0V4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUo
Y29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgpCiB7CiAgICAgTExJbnRHZW5lcmF0b3IgbGxpbnRHZW5lcmF0b3IoaW5m
bywgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlKTsKICAgICBGdW5jdGlvblBhcnNlcjxMTEludEdl
bmVyYXRvcj4gcGFyc2VyKGxsaW50R2VuZXJhdG9yLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxl
bmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKQEAgLTQ2Niw3ICs1MjgsNyBAQCBzdGF0aWMgVGhyZWFk
U3BlY2lmaWM8QnVmZmVyPiYgdGhyZWFkU3BlY2lmaWNCdWZmZXIoKQogICAgIHJldHVybiAqdGhy
ZWFkU3BlY2lmaWNCdWZmZXJQdHI7CiB9CiAKLUxMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRv
cihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlJikKK0xMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcihNb2R1bGVJ
bmZvcm1hdGlvbiYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJl
JikKICAgICA6IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZShtYWtlVW5pcXVlPEZ1bmN0aW9uQ29kZUJs
b2NrPihmdW5jdGlvbkluZGV4KSwgMCkKICAgICAsIG1faW5mbyhpbmZvKQogICAgICwgbV9mdW5j
dGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCkBAIC00ODUsOSArNTQ3LDIyIEBAIExMSW50R2VuZXJh
dG9yOjpMTEludEdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWdu
ZWQgZnVuY3Rpb25JCiAgICAgV2FzbUVudGVyOjplbWl0KHRoaXMpOwogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGNvZGU+Cit2b2lkIExMSW50R2VuZXJhdG9yOjpyZXBhdGNoKGNvbnN0IENhdGNo
UmV3cml0ZUluZm8mIGluZm8pCit7CisgICAgYXV0byByZWYgPSBtX3dyaXRlci5yZWYoaW5mby5t
X2luc3RydWN0aW9uT2Zmc2V0KTsKKyAgICBPcGNvZGUqIGluc3RydWN0aW9uID0gcmVmLT5jYXN0
PE9wY29kZSwgV2FzbU9wY29kZVRyYWl0cz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZXhjZXB0
aW9uUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX21heFN0YWNrU2l6ZSArIGlu
Zm8ubV90cnlEZXB0aCAtIDEpOworICAgIGluc3RydWN0aW9uLT5zZXRFeGNlcHRpb24oZXhjZXB0
aW9uUmVnaXN0ZXIsIFtdKCkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgfSk7Cit9CisKIHN0ZDo6
dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4gTExJbnRHZW5lcmF0b3I6OmZpbmFsaXplKCkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2NvZGVCbG9jayk7CisKICAgICBzaXplX3QgbnVtQ2Fs
bGVlTG9jYWxzID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0
ZXJzKCksIG1fbWF4U3RhY2tTaXplKTsKICAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVMb2Nh
bHMgPSBudW1DYWxsZWVMb2NhbHM7CiAgICAgUkVMRUFTRV9BU1NFUlQobnVtQ2FsbGVlTG9jYWxz
ID09IG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxvY2Fscyk7CkBAIC01MDAsNiArNTc1LDkgQEAg
c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBMTEludEdlbmVyYXRvcjo6ZmluYWxp
emUoKQogICAgIFJFTEVBU0VfQVNTRVJUKHVzZWRCdWZmZXIuY2FwYWNpdHkoKSA9PSBvbGRDYXBh
Y2l0eSk7CiAgICAgKnRocmVhZFNwZWNpZmljID0gV1RGTW92ZSh1c2VkQnVmZmVyKTsKIAorICAg
IGlmICghbV91c2VzRXhjZXB0aW9ucykKKyAgICAgICAgbV9pbmZvLm1fZnVuY3Rpb25Eb2VzTm90
VXNlRXhjZXB0aW9ucy5xdWlja1NldChtX2Z1bmN0aW9uSW5kZXgpOworCiAgICAgcmV0dXJuIFdU
Rk1vdmUobV9jb2RlQmxvY2spOwogfQogCkBAIC01ODAsNyArNjU4LDcgQEAgYXV0byBMTEludEdl
bmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlKSAtPiBMTEkKIAogICAgIC8vIEZJWE1FOiB3ZSBhcmUgYWxsb2NhdGluZyB0aGUgZXh0cmEg
c3BhY2UgZm9yIHRoZSBhcmd1bWVudC9yZXR1cm4gY291bnQgaW4gb3JkZXIgdG8gYXZvaWQgaW50
ZXJmZXJlbmNlLCBidXQgd2UgY291bGQgZG8gYmV0dGVyCiAgICAgLy8gTk9URTogV2UgaW5jcmVh
c2UgYXJnIGNvdW50IGJ5IDEgZm9yIHRoZSBjYXNlIG9mIGluZGlyZWN0IGNhbGxzCi0gICAgbV9z
dGFja1NpemUgKz0gc3RkOjptYXgoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSArIDEsIHNpZ25h
dHVyZS5yZXR1cm5Db3VudCgpKSArIGdwckNvdW50ICsgZnByQ291bnQgKyBzdGFja0NvdW50ICsg
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7CisgICAgbV9zdGFja1NpemUgKz0gc3Rk
OjptYXgoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSArIDEsIHNpZ25hdHVyZS5yZXR1cm5Db3Vu
dCgpKSArIGdwckNvdW50ICsgZnByQ291bnQgKyBzdGFja0NvdW50ICsgQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnMgKyAxOwogICAgIGlmIChtX3N0YWNrU2l6ZS52YWx1ZSgpICUgc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkKICAgICAgICAgKyttX3N0YWNrU2l6ZTsKICAgICBpZiAo
bV9tYXhTdGFja1NpemUgPCBtX3N0YWNrU2l6ZSkKQEAgLTU5MSw3ICs2NjksNyBAQCBhdXRvIExM
SW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUpIC0+IExMSQogICAgIFJlc3VsdExpc3QgdGVtcG9yYXJ5UmVzdWx0cyhzaWduYXR1
cmUucmV0dXJuQ291bnQoKSk7CiAKICAgICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9IG1f
c3RhY2tTaXplOwotICAgIGNvbnN0IHVuc2lnbmVkIGJhc2UgPSBzdGFja09mZnNldCAtIENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOworICAgIGNvbnN0IHVuc2lnbmVkIGJhc2UgPSBz
dGFja09mZnNldCAtIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzIC0gMTsKIAogICAg
IGNvbnN0IHVpbnQzMl90IGdwckxpbWl0ID0gYmFzZSAtIHN0YWNrQ291bnQgLSBncHJDb3VudDsK
ICAgICBjb25zdCB1aW50MzJfdCBmcHJMaW1pdCA9IGdwckxpbWl0IC0gZnByQ291bnQ7CkBAIC02
ODMsNyArNzYxLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2Fs
bGVlKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBWZWMKIAogICAgIHVpbnQzMl90IGdw
ckluZGV4ID0gMDsKICAgICB1aW50MzJfdCBmcHJJbmRleCA9IGdwckNvdW50OwotICAgIHVpbnQz
Ml90IHN0YWNrSW5kZXggPSAwOworICAgIHVpbnQzMl90IHN0YWNrSW5kZXggPSAxOwogICAgIGNv
bnN0IHVpbnQzMl90IG1heEdQUkluZGV4ID0gZ3ByQ291bnQ7CiAgICAgY29uc3QgdWludDMyX3Qg
bWF4RlBSSW5kZXggPSBtYXhHUFJJbmRleCArIGZwckNvdW50OwogCkBAIC03MzEsNyArODA5LDcg
QEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgY29uc3QgdWludDMyX3QgbWF4RlBSSW5kZXgg
PSBncHJDb3VudCArIGZwckNvdW50OwogICAgIHVpbnQzMl90IGdwckluZGV4ID0gMDsKICAgICB1
aW50MzJfdCBmcHJJbmRleCA9IG1heEdQUkluZGV4OwotICAgIHVpbnQzMl90IHN0YWNrSW5kZXgg
PSAwOworICAgIHVpbnQzMl90IHN0YWNrSW5kZXggPSAxOwogCiAgICAgVmVjdG9yPFZpcnR1YWxS
ZWdpc3Rlcj4gcmVnaXN0ZXJBcmd1bWVudHMoZ3ByQ291bnQgKyBmcHJDb3VudCk7CiAgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGdwckNvdW50ICsgZnByQ291bnQ7IGkrKykKQEAgLTkwNiw2
ICs5ODQsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDbwogCiAgICAgYmxvY2sgPSBDb250cm9s
VHlwZTo6bG9vcChzaWduYXR1cmUsIG1fc3RhY2tTaXplLCBXVEZNb3ZlKGJvZHkpLCBXVEZNb3Zl
KGNvbnRpbnVhdGlvbikpOwogCisgICAgVmVjdG9yPHVuc2lnbmVkPiB1bnJlc29sdmVkT2Zmc2V0
czsKICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBvc3JFbnRyeURhdGE7CiAgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5tX251bUFyZ3VtZW50czsgaSsrKQogICAg
ICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKG1fbm9ybWFsaXplZEFyZ3VtZW50c1tpXSk7CkBAIC05
MTYsOSArOTk1LDEyIEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvCiAgICAgZm9yICh1aW50MzJf
dCBpID0gZ3ByQ291bnQgKyBmcHJDb3VudCArIG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0
ZXJzOyBpIDwgbV9jb2RlQmxvY2stPm1fbnVtVmFyczsgaSsrKQogICAgICAgICBvc3JFbnRyeURh
dGEuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2so
KS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0g
bV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7CiAgICAg
ICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29u
dHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKICAgICAgICAgZm9yIChUeXBlZEV4
cHJlc3Npb24gZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKICAgICAgICAgICAgIG9zckVu
dHJ5RGF0YS5hcHBlbmQoZXhwcmVzc2lvbik7CisgICAgICAgIGlmIChDb250cm9sVHlwZTo6aXNB
bnlDYXRjaChkYXRhKSkKKyAgICAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQoV1RGOjpnZXQ8
Q29udHJvbENhdGNoPihkYXRhKS5tX2V4Y2VwdGlvbik7CiAgICAgfQogICAgIGZvciAoVHlwZWRF
eHByZXNzaW9uIGV4cHJlc3Npb24gOiBlbmNsb3NpbmdTdGFjaykKICAgICAgICAgb3NyRW50cnlE
YXRhLmFwcGVuZChleHByZXNzaW9uKTsKQEAgLTk3NSw2ICsxMDU3LDE1OSBAQCBhdXRvIExMSW50
R2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFy
dGlhbFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9CiAKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFk
ZFRyeShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29u
dHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CisgICAgKyttX3RyeURlcHRoOworICAgIGlmICht
X21heFRyeURlcHRoIDwgbV90cnlEZXB0aCkKKyAgICAgICAgbV9tYXhUcnlEZXB0aCA9IG1fdHJ5
RGVwdGg7CisKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0
YWNrKTsKKyAgICBSZWY8TGFiZWw+IHRyeUxhYmVsID0gbmV3RW1pdHRlZExhYmVsKCk7CisgICAg
UmVmPExhYmVsPiBjb250aW51YXRpb24gPSBuZXdMYWJlbCgpOworICAgIHJlc3VsdCA9IENvbnRy
b2xUeXBlOjpjcmVhdGVUcnkoc2lnbmF0dXJlLCBtX3N0YWNrU2l6ZSwgV1RGTW92ZSh0cnlMYWJl
bCksIFdURk1vdmUoY29udGludWF0aW9uKSwgbV90cnlEZXB0aCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordm9pZCBMTEludEdlbmVyYXRvcjo6ZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2go
Q29udHJvbFR5cGUmIGRhdGEsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spCit7CisgICAgaWYgKCFD
b250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRhKSkKKyAgICAgICAgbWF0ZXJpYWxpemVDb25zdGFu
dHNBbmRMb2NhbHMoZXhwcmVzc2lvblN0YWNrKTsKKyAgICBlbHNlIHsKKyAgICAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoZGF0YS5zdGFja1NpemUoKSk7CisgICAgICAgIGZvciAoVHlwZWRFeHByZXNz
aW9uJiB2YWx1ZSA6IGV4cHJlc3Npb25TdGFjaykgeworICAgICAgICAgICAgV2FzbU1vdjo6ZW1p
dCh0aGlzLCBkc3QsIHZhbHVlKTsKKyAgICAgICAgICAgIHZhbHVlID0gVHlwZWRFeHByZXNzaW9u
IHsgdmFsdWUudHlwZSgpLCBkc3QgfTsKKyAgICAgICAgICAgIGRzdCAtPSAxOworICAgICAgICB9
CisgICAgfQorICAgIFdhc21KbXA6OmVtaXQodGhpcywgZGF0YS5tX2NvbnRpbnVhdGlvbi0+Ymlu
ZCh0aGlzKSk7Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkIGV4
Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSwgU3RhY2sm
IGV4cHJlc3Npb25TdGFjaywgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBmaW5hbGl6ZVByZXZpb3VzQmxvY2tGb3JDYXRjaChk
YXRhLCBleHByZXNzaW9uU3RhY2spOworICAgIHJldHVybiBhZGRDYXRjaFRvVW5yZWFjaGFibGUo
ZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvblNpZ25hdHVyZSwgZGF0YSwgcmVzdWx0cyk7Cit9CisK
K2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNl
cHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBleGNlcHRpb25TaWduYXR1cmUsIENvbnRyb2xU
eXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
bV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CisgICAgUmVmPExhYmVsPiBjYXRjaExhYmVsID0gbmV3
RW1pdHRlZExhYmVsKCk7CisKKyAgICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGV4Y2VwdGlvbiA9IHB1c2goKTsKKyAgICBpZiAoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxDb250cm9sVHJ5PihkYXRhKSkgeworICAgICAgICBDb250cm9sVHJ5JiB0
cnlEYXRhID0gV1RGOjpnZXQ8Q29udHJvbFRyeT4oZGF0YSk7CisgICAgICAgIGRhdGEgPSBDb250
cm9sVHlwZTo6Y3JlYXRlQ2F0Y2goZGF0YS5tX3NpZ25hdHVyZSwgZGF0YS5zdGFja1NpemUoKSwg
V1RGTW92ZSh0cnlEYXRhLm1fdHJ5KSwgV1RGTW92ZShkYXRhLm1fY29udGludWF0aW9uKSwgY2F0
Y2hMYWJlbCwgdHJ5RGF0YS5tX3RyeURlcHRoLCBleGNlcHRpb24pOworICAgIH0KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsg
KytpKQorICAgICAgICByZXN1bHRzLmFwcGVuZChwdXNoKCkpOworCisgICAgaWYgKENvbnRleHQ6
OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgV2FzbUNhdGNoOjplbWl0KHRoaXMsIGV4Y2VwdGlvbklu
ZGV4LCBleGNlcHRpb24sIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIHJlc3Vs
dHMuaXNFbXB0eSgpID8gMCA6IC1yZXN1bHRzWzBdLm9mZnNldCgpKTsKKyAgICBlbHNlCisgICAg
ICAgIFdhc21DYXRjaE5vVGxzOjplbWl0KHRoaXMsIGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb24s
IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIHJlc3VsdHMuaXNFbXB0eSgpID8g
MCA6IC1yZXN1bHRzWzBdLm9mZnNldCgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IHJlc3VsdHNbaV07CisgICAgICAgIFR5cGUgdHlwZSA9IGV4Y2Vw
dGlvblNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQpIHsK
KyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjMyOgorICAgICAgICAgICAgV2FzbUYzMlJl
aW50ZXJwcmV0STMyOjplbWl0KHRoaXMsIGRzdCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGNjQ6CisgICAgICAgICAgICBXYXNtRjY0UmVp
bnRlcnByZXRJNjQ6OmVtaXQodGhpcywgZHN0LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkkzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBl
S2luZDo6STY0OgorICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpFeHRlcm5yZWY6CisgICAg
ICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkZ1bmNyZWY6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIENvbnRyb2xDYXRj
aCYgY2F0Y2hEYXRhID0gV1RGOjpnZXQ8Q29udHJvbENhdGNoPihkYXRhKTsKKyAgICBjYXRjaERh
dGEubV9raW5kID0gQ2F0Y2hLaW5kOjpDYXRjaDsKKyAgICBtX2NvZGVCbG9jay0+YWRkRXhjZXB0
aW9uSGFuZGxlcih7IEhhbmRsZXJUeXBlOjpDYXRjaCwgY2F0Y2hEYXRhLm1fdHJ5U3RhcnQtPmxv
Y2F0aW9uKCksIGNhdGNoRGF0YS5tX3RyeUVuZC0+bG9jYXRpb24oKSwgY2F0Y2hMYWJlbC0+bG9j
YXRpb24oKSwgbV90cnlEZXB0aCwgZXhjZXB0aW9uSW5kZXggfSk7CisKKyAgICByZXR1cm4geyB9
OworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbChTdGFjayYgZXhwcmVzc2lv
blN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGZpbmFs
aXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKGRhdGEsIGV4cHJlc3Npb25TdGFjayk7CisgICAgV2Fz
bUptcDo6ZW1pdCh0aGlzLCBkYXRhLm1fY29udGludWF0aW9uLT5iaW5kKHRoaXMpKTsKKyAgICBy
ZXR1cm4gYWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKGRhdGEpOworfQorCithdXRvIExMSW50R2Vu
ZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICBSZWY8TGFi
ZWw+IGNhdGNoTGFiZWwgPSBuZXdFbWl0dGVkTGFiZWwoKTsKKyAgICBtX3N0YWNrU2l6ZSA9IGRh
dGEuc3RhY2tTaXplKCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGV4Y2VwdGlvbiA9IHB1c2goKTsK
KyAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sVHJ5PihkYXRhKSkgeworICAg
ICAgICBDb250cm9sVHJ5JiB0cnlEYXRhID0gV1RGOjpnZXQ8Q29udHJvbFRyeT4oZGF0YSk7Cisg
ICAgICAgIGRhdGEgPSBDb250cm9sVHlwZTo6Y3JlYXRlQ2F0Y2goZGF0YS5tX3NpZ25hdHVyZSwg
ZGF0YS5zdGFja1NpemUoKSwgV1RGTW92ZSh0cnlEYXRhLm1fdHJ5KSwgV1RGTW92ZShkYXRhLm1f
Y29udGludWF0aW9uKSwgY2F0Y2hMYWJlbCwgdHJ5RGF0YS5tX3RyeURlcHRoLCBleGNlcHRpb24p
OworICAgIH0KKyAgICBDb250cm9sQ2F0Y2gmIGNhdGNoRGF0YSA9IFdURjo6Z2V0PENvbnRyb2xD
YXRjaD4oZGF0YSk7CisgICAgY2F0Y2hEYXRhLm1fa2luZCA9IENhdGNoS2luZDo6Q2F0Y2hBbGw7
CisKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBXYXNtQ2F0Y2hBbGw6
OmVtaXQodGhpcywgZXhjZXB0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIFdhc21DYXRjaEFsbE5v
VGxzOjplbWl0KHRoaXMsIGV4Y2VwdGlvbik7CisKKyAgICBtX2NvZGVCbG9jay0+YWRkRXhjZXB0
aW9uSGFuZGxlcih7IEhhbmRsZXJUeXBlOjpDYXRjaEFsbCwgY2F0Y2hEYXRhLm1fdHJ5U3RhcnQt
PmxvY2F0aW9uKCksIGNhdGNoRGF0YS5tX3RyeUVuZC0+bG9jYXRpb24oKSwgY2F0Y2hMYWJlbC0+
bG9jYXRpb24oKSwgbV90cnlEZXB0aCwgMCB9KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IExMSW50R2VuZXJhdG9yOjphZGREZWxlZ2F0ZShDb250cm9sVHlwZSYgdGFyZ2V0LCBDb250cm9s
VHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGREZWxlZ2F0ZVRv
VW5yZWFjaGFibGUodGFyZ2V0LCBkYXRhKTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
RGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiB0YXJnZXQsIENvbnRyb2xUeXBlJiBk
YXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7Cisg
ICAgUmVmPExhYmVsPiBkZWxlZ2F0ZUxhYmVsID0gbmV3RW1pdHRlZExhYmVsKCk7CisKKyAgICBB
U1NFUlQoQ29udHJvbFR5cGU6OmlzVHJ5KHRhcmdldCkgfHwgQ29udHJvbFR5cGU6OmlzVG9wTGV2
ZWwodGFyZ2V0KSk7CisgICAgdW5zaWduZWQgdGFyZ2V0RGVwdGggPSBDb250cm9sVHlwZTo6aXNU
cnkodGFyZ2V0KSA/IFdURjo6Z2V0PENvbnRyb2xUcnk+KHRhcmdldCkubV90cnlEZXB0aCA6IDA7
CisKKyAgICBDb250cm9sVHJ5JiB0cnlEYXRhID0gV1RGOjpnZXQ8Q29udHJvbFRyeT4oZGF0YSk7
CisgICAgbV9jb2RlQmxvY2stPmFkZEV4Y2VwdGlvbkhhbmRsZXIoeyBIYW5kbGVyVHlwZTo6RGVs
ZWdhdGUsIHRyeURhdGEubV90cnktPmxvY2F0aW9uKCksIGRlbGVnYXRlTGFiZWwtPmxvY2F0aW9u
KCksIDAsIG1fdHJ5RGVwdGgsIHRhcmdldERlcHRoIH0pOworICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjphZGRUaHJvdyh1
bnNpZ25lZCBleGNlcHRpb25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3Rh
Y2smKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7Cisg
ICAgd2Fsa0V4cHJlc3Npb25TdGFjayhhcmdzLCBbJl0oVmlydHVhbFJlZ2lzdGVyJiBhcmcsIFZp
cnR1YWxSZWdpc3RlciBzbG90KSB7CisgICAgICAgIGlmIChhcmcgPT0gc2xvdCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBzbG90LCBhcmcpOworICAg
ICAgICBhcmcgPSBzbG90OworICAgIH0pOworICAgIFdhc21UaHJvdzo6ZW1pdCh0aGlzLCBleGNl
cHRpb25JbmRleCwgYXJncy5pc0VtcHR5KCkgPyB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgwKSA6
IGFyZ3NbMF0pOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFk
ZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8Q29udHJvbENhdGNoPihkYXRhKSk7CisgICAgQ29udHJvbENhdGNoIGNhdGNoRGF0
YSA9IFdURjo6Z2V0PENvbnRyb2xDYXRjaD4oZGF0YSk7CisgICAgV2FzbVJldGhyb3c6OmVtaXQo
dGhpcywgY2F0Y2hEYXRhLm1fZXhjZXB0aW9uKTsKKyAgICByZXR1cm4geyB9OworfQorCiBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbFR5cGUmIGRhdGEsIFN0YWNr
JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBpZiAoIWRhdGEubV9zaWdu
YXR1cmUtPnJldHVybkNvdW50KCkpIHsKQEAgLTEwNDksMTkgKzEyODQsMjUgQEAgYXV0byBMTElu
dEdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIGV4cHJlc3Np
b25TdGFjaykgLT4gUGEKIHsKICAgICAvLyBGSVhNRTogV2Ugb25seSBuZWVkIHRvIG1hdGVyaWFs
aXplIGNvbnN0YW50cyBoZXJlIGlmIHRoZXJlIGV4aXN0cyBhIGp1bXAgdG8gdGhpcyBsYWJlbAog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM2NTcKLSAg
ICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNzaW9uU3RhY2spOworICAgIGZp
bmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKGVudHJ5LmNvbnRyb2xEYXRhLCBleHByZXNzaW9u
U3RhY2spOwogICAgIHJldHVybiBhZGRFbmRUb1VucmVhY2hhYmxlKGVudHJ5LCBleHByZXNzaW9u
U3RhY2ssIGZhbHNlKTsKIH0KIAogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVh
Y2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2ss
IGJvb2wgdW5yZWFjaGFibGUpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gTExJbnRHZW5lcmF0b3I6
OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIGV4cHJlc3Np
b25TdGFjaywgYm9vbCB1bnJlYWNoYWJsZSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIENvbnRy
b2xUeXBlJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CiAKLSAgICBSRUxFQVNFX0FTU0VSVCh1
bnJlYWNoYWJsZSB8fCBtX3N0YWNrU2l6ZSA9PSBkYXRhLnN0YWNrU2l6ZSgpICsgZGF0YS5tX3Np
Z25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CisgICAgdW5zaWduZWQgc3RhY2tTaXplID0gZGF0YS5z
dGFja1NpemUoKTsKKyAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZW50cnkuY29udHJv
bERhdGEpKQorICAgICAgICArK3N0YWNrU2l6ZTsgLy8gQWNjb3VudCBmb3IgdGhlIGNhdWdodCBl
eGNlcHRpb24KKyAgICBSRUxFQVNFX0FTU0VSVCh1bnJlYWNoYWJsZSB8fCBtX3N0YWNrU2l6ZSA9
PSAgc3RhY2tTaXplICsgZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CiAKICAgICBt
X3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCk7CiAKKyAgICBpZiAoQ29udHJvbFR5cGU6Omlz
VHJ5KGRhdGEpIHx8IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbENhdGNoPihkYXRhKSkK
KyAgICAgICAgLS1tX3RyeURlcHRoOworCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRh
dGEubV9zaWduYXR1cmUtPnJldHVybkNvdW50KCk7ICsraSkgewogICAgICAgICAvLyBXZSBkb24n
dCB3YW50IHRvIGRvIGEgY29uc2lzdGVuY3kgY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGp1c3QgcmVz
ZXQgdGhlIHN0YWNrIHNpemUKICAgICAgICAgLy8gYXJlIHB1c2hpbmcgbmV3IHZhbHVlcywgd2hp
bGUgd2UgYWxyZWFkeSBoYXZlIHRoZSBzYW1lIHZhbHVlcyBpbiB0aGUgc3RhY2suCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5oCmluZGV4IDhhMTYw
MzgyNmMxMDBlYmZmMDhhMDMwNmY2MmVkMTk3YmJjZWZmNWIuLmMwMTJmYjFlZTcxNGFmOTgyM2Rh
MjZjNmMzNGQ4YWI3NzJlYjQ1NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21MTEludEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21MTEludEdlbmVyYXRvci5oCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEZ1bmN0aW9uQ29k
ZUJsb2NrOwogY2xhc3MgU2lnbmF0dXJlOwogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwogCi1F
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVy
ZSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CitF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVy
ZSYsIE1vZHVsZUluZm9ybWF0aW9uJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MaW1pdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MaW1p
dHMuaAppbmRleCBjZjhiNDQ2MDM2ODExMjNlY2MyNWNmYzM3MjQ5OGI1ZjViNThjOTg2Li5mOGYw
NTNiNTg2MGU3ZGY5N2RiNDQ2NGFhMGVhMTc0OGQ5Yjg3ZjM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxpbWl0cy5oCkBAIC00MSw2ICs0MSw3IEBAIGNvbnN0ZXhwciBzaXplX3Qg
bWF4VHlwZXMgPSAxMDAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhGdW5jdGlvbnMgPSAxMDAw
MDAwOwogY29uc3RleHByIHNpemVfdCBtYXhJbXBvcnRzID0gMTAwMDAwOwogY29uc3RleHByIHNp
emVfdCBtYXhFeHBvcnRzID0gMTAwMDAwOworY29uc3RleHByIHNpemVfdCBtYXhFeGNlcHRpb25z
ID0gMTAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhHbG9iYWxzID0gMTAwMDAwMDsKIGNvbnN0
ZXhwciBzaXplX3QgbWF4RGF0YVNlZ21lbnRzID0gMTAwMDAwOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcAppbmRleCAzNTQ5
MWNmZTU0MTA1NzNhYmQzNWJhMzliNzU2MDdkODZjMjY4ZGI2Li5jNmU4YjhjN2ZlYjljYzIwOGVi
Mjc5NmVhN2YyYTQyMDRkNDA3NjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAKQEAgLTM2LDYgKzM2LDcgQEAgTW9kdWxl
SW5mb3JtYXRpb246Ok1vZHVsZUluZm9ybWF0aW9uKCkKICAgICA6IG5hbWVTZWN0aW9uKE5hbWVT
ZWN0aW9uOjpjcmVhdGUoKSkKIHsKIH0KKwogTW9kdWxlSW5mb3JtYXRpb246On5Nb2R1bGVJbmZv
cm1hdGlvbigpIHsgfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaAppbmRleCBhMmIw
ZjgzNmM4OWMyMGVlZTI0YjlhYjM0YmUxMDFjMjg1MTQwMzUyLi4zMjhjNmJjYTZiZmE2NjJiNTNl
OWM4YzhkYTlhY2IxOGY1MDQ0YWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaApAQCAtNTgsOCArNTgsMjIgQEAgc3RydWN0IE1v
ZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9y
bWF0aW9uPiB7CiAgICAgICAgICAgICA6IGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2Vz
W2Z1bmN0aW9uSW5kZXggLSBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpXTsK
ICAgICB9CiAKKyAgICBzaXplX3QgZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSBjb25zdCB7IHJl
dHVybiBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSArIGludGVybmFsRXhj
ZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICBib29sIGlzSW1wb3J0ZWRFeGNl
cHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShzaXplX3QgZXhjZXB0aW9uSW5kZXgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoZXhjZXB0aW9uSW5kZXggPCBleGNlcHRpb25JbmRleFNw
YWNlU2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkluZGV4IDwgaW1wb3J0RXhjZXB0
aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7CisgICAgfQorICAgIFNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2Uoc2l6ZV90IGV4Y2VwdGlvbkluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW1wb3J0ZWRFeGNlcHRpb25Gcm9tRXhj
ZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRleCkKKyAgICAgICAgICAgID8gaW1wb3J0RXhj
ZXB0aW9uU2lnbmF0dXJlSW5kaWNlc1tleGNlcHRpb25JbmRleF0KKyAgICAgICAgICAgIDogaW50
ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzW2V4Y2VwdGlvbkluZGV4IC0gaW1wb3J0RXhj
ZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCldOworICAgIH0KKwogICAgIHVpbnQzMl90IGlt
cG9ydEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlvblNpZ25hdHVy
ZUluZGljZXMuc2l6ZSgpOyB9CiAgICAgdWludDMyX3QgaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkg
Y29uc3QgeyByZXR1cm4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9
CisgICAgdWludDMyX3QgaW1wb3J0RXhjZXB0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbXBv
cnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQogCiAgICAgLy8gQ3VycmVudGx5
LCBvdXIgd2FzbSBpbXBsZW1lbnRhdGlvbiBhbGxvd3Mgb25seSBvbmUgbWVtb3J5IGFuZCB0YWJs
ZS4KICAgICAvLyBJZiB3ZSBuZWVkIHRvIHJlbW92ZSB0aGlzIGxpbWl0YXRpb24sIHdlIHdvdWxk
IGhhdmUgTWVtb3J5SW5mb3JtYXRpb24gYW5kIFRhYmxlSW5mb3JtYXRpb24gaW4gdGhlIFZlY3Rv
cnMuCkBAIC03Niw5ICs5MCwxNCBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICBib29sIGlzRGVj
bGFyZWRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9kZWNsYXJlZEZ1
bmN0aW9ucy5jb250YWlucyhpbmRleCk7IH0KICAgICB2b2lkIGFkZERlY2xhcmVkRnVuY3Rpb24o
dWludDMyX3QgaW5kZXgpIHsgbV9kZWNsYXJlZEZ1bmN0aW9ucy5zZXQoaW5kZXgpOyB9CiAKKyAg
ICBib29sIGlzRGVjbGFyZWRFeGNlcHRpb24odWludDMyX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVjbGFyZWRFeGNlcHRpb25zLmNvbnRhaW5zKGluZGV4KTsgfQorICAgIHZvaWQgYWRkRGVj
bGFyZWRFeGNlcHRpb24odWludDMyX3QgaW5kZXgpIHsgbV9kZWNsYXJlZEV4Y2VwdGlvbnMuc2V0
KGluZGV4KTsgfQorCiAgICAgVmVjdG9yPEltcG9ydD4gaW1wb3J0czsKICAgICBWZWN0b3I8U2ln
bmF0dXJlSW5kZXg+IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlczsKICAgICBWZWN0b3I8
U2lnbmF0dXJlSW5kZXg+IGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOworICAgIFZl
Y3RvcjxTaWduYXR1cmVJbmRleD4gaW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlczsKKyAg
ICBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+IGludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNl
czsKICAgICBWZWN0b3I8UmVmPFNpZ25hdHVyZT4+IHVzZWRTaWduYXR1cmVzOwogCiAgICAgTWVt
b3J5SW5mb3JtYXRpb24gbWVtb3J5OwpAQCAtOTgsNiArMTE3LDggQEAgc3RydWN0IE1vZHVsZUlu
Zm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9u
PiB7CiAgICAgdWludDMyX3QgbnVtYmVyT2ZEYXRhU2VnbWVudHMgeyAwIH07CiAKICAgICBCaXRW
ZWN0b3IgbV9kZWNsYXJlZEZ1bmN0aW9uczsKKyAgICBCaXRWZWN0b3IgbV9kZWNsYXJlZEV4Y2Vw
dGlvbnM7CisgICAgQml0VmVjdG9yIG1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9uczsKICAg
ICBtdXRhYmxlIEJpdFZlY3RvciBtX3JlZmVyZW5jZWRGdW5jdGlvbnM7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3Bw
CmluZGV4IDBkNDMzOGQ2NTkyMTMyMmYwMjgwZGVmNjlkNTgzNjE2YjQ5ZDYxY2IuLjYxMDMxNjFj
MWMyZjAyNGMyOTRjMGZlMTU0MGZlYmM3NTJiOWRkYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCkBAIC05MSwxNiAr
OTEsMjAgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBJbnRlcm5hbEZ1bmN0aW9uKiBpbnRlcm5h
bEZ1bmN0aW9uID0gcGFyc2VBbmRDb21waWxlUmVzdWx0LT5nZXQoKTsKKyAgICBWZWN0b3I8Q29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IGV4Y2VwdGlvbkhhbmRsZXJM
b2NhdGlvbnM7CisgICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoZXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9ucywgaW50ZXJuYWxGdW5jdGlvbiwgY29udGV4dCwgbGlua0J1ZmZlcik7
CisKICAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlv
bj4oCiAgICAgICAgIEZJTkFMSVpFX1dBU01fQ09ERV9GT1JfTU9ERShDb21waWxhdGlvbk1vZGU6
Ok9NR0Zvck9TUkVudHJ5TW9kZSwgbGlua0J1ZmZlciwgSklUQ29tcGlsYXRpb25QdHJUYWcsICJX
ZWJBc3NlbWJseSBPTUdGb3JPU1JFbnRyeSBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVu
Y3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJp
bmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5u
YW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAg
ICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKIAotICAg
IG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VBbmRDb21w
aWxlUmVzdWx0LnZhbHVlKCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CisgICAg
b21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShpbnRlcm5hbEZ1bmN0
aW9uLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOwogCiAgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7Ci0gICAgUmVm
PE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxlZTo6Y3Jl
YXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBvc3JFbnRy
eVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSk7
CisgICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNh
bGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwg
bV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2Up
LCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtl
ZENhbGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGlu
dGVybmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5k
bGVyTG9jYXRpb25zKSk7CiAgICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBv
aW50ZXIocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwg
Q2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hQb2ludGVyKGludGVybmFsRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwg
Q2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKIAogICAgICAgICBMb2NrZXIgbG9j
a2VyIHsgbV9jb2RlQmxvY2stPm1fbG9jayB9OwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBj
YWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9NR1BsYW4uY3BwCmluZGV4IDVlNzlmMWJjOTg1YzY1ZDVjYmJhZjg3ODRiZGI0ODkw
ZGM4ZTYyNTAuLmY4ZWUwMDA4MDg5OWRjNmFhNTY1YjIyYWQ5MzNjOTNkMzRhYTJiZTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKQEAgLTg4LDE3ICs4OCwy
MSBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKKyAgICBJbnRlcm5hbEZ1bmN0aW9uKiBpbnRlcm5hbEZ1bmN0aW9uID0gcGFy
c2VBbmRDb21waWxlUmVzdWx0LT5nZXQoKTsKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnM7CisgICAg
Y29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9u
cywgaW50ZXJuYWxGdW5jdGlvbiwgY29udGV4dCwgbGlua0J1ZmZlcik7CisKICAgICBvbWdFbnRy
eXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4oCiAgICAgICAgIEZJ
TkFMSVpFX1dBU01fQ09ERV9GT1JfTU9ERShDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIGxpbmtC
dWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgT01HIGZ1bmN0aW9uWyVp
XSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1f
bW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkp
LmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50
Qnlwcm9kdWN0cykpOwogCi0gICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0g
V1RGTW92ZShwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+ZW50cnlwb2ludC5jYWxsZWVT
YXZlUmVnaXN0ZXJzKTsKKyAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBX
VEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7
CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50
OwogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5j
b2RlQmxvY2tGb3IobW9kZSgpKSk7Ci0gICAgICAgIFJlZjxPTUdDYWxsZWU+IGNhbGxlZSA9IE9N
R0NhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFj
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3Bh
Y2UpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hQb2ludGVyKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5jYWxsZWVNb3ZlTG9j
YXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisgICAgICAgIFJlZjxP
TUdDYWxsZWU+IGNhbGxlZSA9IE9NR0NhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2lu
dCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24t
PmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3Zl
KGludGVybmFsRnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+
ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGludGVybmFsRnVuY3Rpb24t
PmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsK
ICAgICAgICAgQVNTRVJUKCFtX2NvZGVCbG9jay0+bV9vbWdDYWxsZWVzW21fZnVuY3Rpb25JbmRl
eF0pOwogICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeURhdGEuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeURhdGEuaAppbmRleCBkNDFlZDc5
MzJiMzBlOWFhMGFlODc2M2JhODJhNjEyY2FmN2U2NDhiLi4wODdlMGY0OTM3ZmNiZTU0NTFiMDVm
MTYzMDNhOTFiMmI4NTg3MjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT1NSRW50cnlEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9TUkVudHJ5RGF0YS5oCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
X0IzSklUKQogCiAjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgotI2luY2x1ZGUgIldhc21Gb3JtYXQu
aCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CkBAIC00Nyw2ICs0Niw5IEBAIHByaXZhdGU6CiAgICAgQjM6OlR5cGUgbV90eXBlOwog
fTsKIAordXNpbmcgU3RhY2tNYXAgPSBWZWN0b3I8T1NSRW50cnlWYWx1ZT47Cit1c2luZyBTdGFj
a01hcHMgPSBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFN0YWNrTWFwPjsKKwogY2xhc3MgT1NSRW50
cnlEYXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPU1JFbnRyeURhdGEpOwogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTksMTIgKzYxLDEyIEBAIHB1YmxpYzoKIAogICAg
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uSW5kZXg7
IH0KICAgICB1aW50MzJfdCBsb29wSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2xvb3BJbmRleDsg
fQotICAgIFZlY3RvcjxPU1JFbnRyeVZhbHVlPiYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7
IH0KKyAgICBTdGFja01hcCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KIAogcHJpdmF0
ZToKICAgICB1aW50MzJfdCBtX2Z1bmN0aW9uSW5kZXg7CiAgICAgdWludDMyX3QgbV9sb29wSW5k
ZXg7Ci0gICAgVmVjdG9yPE9TUkVudHJ5VmFsdWU+IG1fdmFsdWVzOworICAgIFN0YWNrTWFwIG1f
dmFsdWVzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAppbmRleCA4NWI0MjRmYjE4NDg5MzA4
ZGYyN2Y5YTYxN2U3ZjczMGY2M2UyNTY5Li5kYWJhZWU3ZWI4MmQ3MWJkZGIxMjk3YzAxYjNlM2Zl
ZGE1M2Q3NzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bl
cmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlv
bnMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKICNp
bmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0SW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
IgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKQEAgLTEwNSwyNCArMTA2
LDEwIEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJPTUdSZXBsYWNlbWVudENvbXBpbGUoVGllclVwQ291
bnQmIHRpZXJVcCwgT01HQ2FsbGVlKiByZXBsYWNlCiAgICAgfQogfQogCi1TVVBQUkVTU19BU0FO
Ci1zdGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRl
eHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgY2FsbGVlLCBPTUdGb3JPU1JFbnRyeUNhbGxlZSYgb3Ny
RW50cnlDYWxsZWUsIE9TUkVudHJ5RGF0YSYgb3NyRW50cnlEYXRhKQordm9pZCBsb2FkVmFsdWVz
SW50b0J1ZmZlcihQcm9iZTo6Q29udGV4dCYgY29udGV4dCwgY29uc3QgU3RhY2tNYXAmIHZhbHVl
cywgdWludDY0X3QqIGJ1ZmZlcikKIHsKLSAgICBhdXRvIHJldHVybldpdGhvdXRPU1JFbnRyeSA9
IFsmXSB7Ci0gICAgICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPSAwOwot
ICAgIH07Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChvc3JFbnRyeUNhbGxlZS5vc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplKCkgPT0gb3NyRW50cnlEYXRhLnZhbHVlcygpLnNpemUoKSk7Ci0KLSAgICB1
aW50NjRfdCogYnVmZmVyID0gaW5zdGFuY2UtPmNvbnRleHQoKS0+c2NyYXRjaEJ1ZmZlckZvclNp
emUob3NyRW50cnlDYWxsZWUub3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpKTsKLSAgICBpZiAo
IWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHJldHVybldpdGhvdXRPU1JFbnRyeSgpOwotCi0gICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBvc3JFbnRyeURhdGEuZnVuY3Rpb25J
bmRleCgpLCAiOk9NRyBPU1IgZW50cnk6IGdvdCBlbnRyeSBjYWxsZWUgIiwgUmF3UG9pbnRlcigm
b3NyRW50cnlDYWxsZWUpKTsKLQotICAgIC8vIDEuIFBsYWNlIHJlcXVpcmVkIHZhbHVlcyBpbiBz
Y3JhdGNoIGJ1ZmZlci4KLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBvc3JF
bnRyeURhdGEudmFsdWVzKCkuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IE9TUkVu
dHJ5VmFsdWUmIHZhbHVlID0gb3NyRW50cnlEYXRhLnZhbHVlcygpW2luZGV4XTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCB2YWx1ZXMuc2l6ZSgpOyArK2luZGV4KSB7Cisg
ICAgICAgIGNvbnN0IE9TUkVudHJ5VmFsdWUmIHZhbHVlID0gdmFsdWVzW2luZGV4XTsKICAgICAg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT01HIE9TUiBlbnRyeSB2YWx1
ZXNbIiwgaW5kZXgsICJdICIsIHZhbHVlLnR5cGUoKSwgIiAiLCB2YWx1ZSk7CiAgICAgICAgIGlm
ICh2YWx1ZS5pc0dQUigpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUoKS5raW5k
KCkpIHsKQEAgLTE2NCwyMSArMTUxLDI4IEBAIHN0YXRpYyB2b2lkIGRvT1NSRW50cnkoSW5zdGFu
Y2UqIGluc3RhbmNlLCBQcm9iZTo6Q29udGV4dCYgY29udGV4dCwgQkJRQ2FsbGVlJiBjCiAgICAg
ICAgICAgICAgICAgKmJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGJ1ZmZlciArIGluZGV4KSA9ICpi
aXR3aXNlX2Nhc3Q8dWludDY0X3QqPihiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGNvbnRleHQuZnAo
KSkgKyB2YWx1ZS5vZmZzZXRGcm9tRlAoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUuaXNTdGFja0FyZ3VtZW50KCkpIHsK
LSAgICAgICAgICAgIHN3aXRjaCAodmFsdWUudHlwZSgpLmtpbmQoKSkgewotICAgICAgICAgICAg
Y2FzZSBCMzo6RmxvYXQ6Ci0gICAgICAgICAgICAgICAgKmJpdHdpc2VfY2FzdDxmbG9hdCo+KGJ1
ZmZlciArIGluZGV4KSA9ICpiaXR3aXNlX2Nhc3Q8ZmxvYXQqPihiaXR3aXNlX2Nhc3Q8dWludDhf
dCo+KGNvbnRleHQuc3AoKSkgKyB2YWx1ZS5vZmZzZXRGcm9tU1AoKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEIzOjpEb3VibGU6Ci0gICAgICAgICAgICAgICAg
KmJpdHdpc2VfY2FzdDxkb3VibGUqPihidWZmZXIgKyBpbmRleCkgPSAqYml0d2lzZV9jYXN0PGRv
dWJsZSo+KGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oY29udGV4dC5zcCgpKSArIHZhbHVlLm9mZnNl
dEZyb21TUCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgKmJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGJ1ZmZlciArIGluZGV4
KSA9ICpiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGNvbnRl
eHQuc3AoKSkgKyB2YWx1ZS5vZmZzZXRGcm9tU1AoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Cit9CisKK1NVUFBSRVNTX0FTQU4KK3N0YXRpYyB2b2lk
IGRvT1NSRW50cnkoSW5zdGFuY2UqIGluc3RhbmNlLCBQcm9iZTo6Q29udGV4dCYgY29udGV4dCwg
QkJRQ2FsbGVlJiBjYWxsZWUsIE9NR0Zvck9TUkVudHJ5Q2FsbGVlJiBvc3JFbnRyeUNhbGxlZSwg
T1NSRW50cnlEYXRhJiBvc3JFbnRyeURhdGEpCit7CisgICAgYXV0byByZXR1cm5XaXRob3V0T1NS
RW50cnkgPSBbJl0geworICAgICAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjAp
ID0gMDsKKyAgICB9OworCisgICAgUkVMRUFTRV9BU1NFUlQob3NyRW50cnlDYWxsZWUub3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSgpID09IG9zckVudHJ5RGF0YS52YWx1ZXMoKS5zaXplKCkpOwor
CisgICAgdWludDY0X3QqIGJ1ZmZlciA9IGluc3RhbmNlLT5jb250ZXh0KCktPnNjcmF0Y2hCdWZm
ZXJGb3JTaXplKG9zckVudHJ5Q2FsbGVlLm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSk7Cisg
ICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiByZXR1cm5XaXRob3V0T1NSRW50cnkoKTsK
KworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgb3NyRW50cnlEYXRhLmZ1
bmN0aW9uSW5kZXgoKSwgIjpPTUcgT1NSIGVudHJ5OiBnb3QgZW50cnkgY2FsbGVlICIsIFJhd1Bv
aW50ZXIoJm9zckVudHJ5Q2FsbGVlKSk7CisKKyAgICAvLyAxLiBQbGFjZSByZXF1aXJlZCB2YWx1
ZXMgaW4gc2NyYXRjaCBidWZmZXIuCisgICAgbG9hZFZhbHVlc0ludG9CdWZmZXIoY29udGV4dCwg
b3NyRW50cnlEYXRhLnZhbHVlcygpLCBidWZmZXIpOwogCiAgICAgLy8gMi4gUmVzdG9yZSBjYWxs
ZWUgc2F2ZXMuCiAgICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmVSZWdpc3RlcnMgPSBSZWdpc3Rl
clNldDo6c3RhY2tSZWdpc3RlcnMoKTsKQEAgLTY1OCwxMiArNjUyLDEyIEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Hcm93TWVtb3J5LCBpbnQzMl90LCAodm9pZCogY2FsbEZy
YW1lLCBJbnN0YW5jCiAgICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNvdW50KCk7CiB9CiAK
LUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5RmlsbCwgYm9vbCwg
KEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0
VmFsdWUsIHVpbnQzMl90IGNvdW50KSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtTWVtb3J5RmlsbCwgc2l6ZV90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBk
c3RBZGRyZXNzLCB1aW50MzJfdCB0YXJnZXRWYWx1ZSwgdWludDMyX3QgY291bnQpKQogewogICAg
IHJldHVybiBpbnN0YW5jZS0+bWVtb3J5KCktPmZpbGwoZHN0QWRkcmVzcywgc3RhdGljX2Nhc3Q8
dWludDhfdD4odGFyZ2V0VmFsdWUpLCBjb3VudCk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwg
dWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgY291bnQp
KQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlDb3B5LCBzaXpl
X3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNy
Y0FkZHJlc3MsIHVpbnQzMl90IGNvdW50KSkKIHsKICAgICByZXR1cm4gaW5zdGFuY2UtPm1lbW9y
eSgpLT5jb3B5KGRzdEFkZHJlc3MsIHNyY0FkZHJlc3MsIGNvdW50KTsKIH0KQEAgLTcxMSwxMiAr
NzA1LDEyIEBAIHN0YXRpYyBib29sIHNldFdhc21UYWJsZUVsZW1lbnQoSW5zdGFuY2UqIGluc3Rh
bmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25TZXRXYXNtVGFibGVFbGVtZW50LCBi
b29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBz
aWduZWRJbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jVmFsdWUpKQorSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblNldFdhc21UYWJsZUVsZW1lbnQsIHNpemVfdCwgKEluc3RhbmNlKiBp
bnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3Qgc2lnbmVkSW5kZXgsIEVuY29k
ZWRKU1ZhbHVlIGVuY1ZhbHVlKSkKIHsKICAgICByZXR1cm4gc2V0V2FzbVRhYmxlRWxlbWVudChp
bnN0YW5jZSwgdGFibGVJbmRleCwgc2lnbmVkSW5kZXgsIGVuY1ZhbHVlKTsKIH0KIAotSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUluaXQsIGJvb2wsIChJbnN0YW5j
ZSogaW5zdGFuY2UsIHVuc2lnbmVkIGVsZW1lbnRJbmRleCwgdW5zaWduZWQgdGFibGVJbmRleCwg
dWludDMyX3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkp
CitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlSW5pdCwgc2l6ZV90
LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRh
YmxlSW5kZXgsIHVpbnQzMl90IGRzdE9mZnNldCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJf
dCBsZW5ndGgpKQogewogICAgIEFTU0VSVChlbGVtZW50SW5kZXggPCBpbnN0YW5jZS0+bW9kdWxl
KCkubW9kdWxlSW5mb3JtYXRpb24oKS5lbGVtZW50Q291bnQoKSk7CiAgICAgQVNTRVJUKHRhYmxl
SW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50
KCkpOwpAQCAtNzYxLDcgKzc1NSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtVGFibGVHcm93LCBpbnQzMl90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1CiAgICAgcmV0
dXJuIG9sZFNpemU7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNt
VGFibGVGaWxsLCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4
LCB1aW50MzJfdCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50KSkK
K0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVGaWxsLCBzaXplX3Qs
IChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IG9mZnNl
dCwgRW5jb2RlZEpTVmFsdWUgZmlsbCwgdWludDMyX3QgY291bnQpKQogewogICAgIEFTU0VSVCh0
YWJsZUluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVD
b3VudCgpKTsKIApAQCAtNzc3LDcgKzc3MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25XYXNtVGFibGVGaWxsLCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25X
YXNtVGFibGVDb3B5LCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBkc3RUYWJs
ZUluZGV4LCB1bnNpZ25lZCBzcmNUYWJsZUluZGV4LCBpbnQzMl90IGRzdE9mZnNldCwgaW50MzJf
dCBzcmNPZmZzZXQsIGludDMyX3QgbGVuZ3RoKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25XYXNtVGFibGVDb3B5LCBzaXplX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2ln
bmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsIGludDMyX3QgZHN0T2Zm
c2V0LCBpbnQzMl90IHNyY09mZnNldCwgaW50MzJfdCBsZW5ndGgpKQogewogICAgIEFTU0VSVChk
c3RUYWJsZUluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkudGFi
bGVDb3VudCgpKTsKICAgICBBU1NFUlQoc3JjVGFibGVJbmRleCA8IGluc3RhbmNlLT5tb2R1bGUo
KS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSk7CkBAIC05MDQsNyArODk4LDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk1lbW9yeUF0b21pY05vdGlmeSwgaW50
MzJfdCwgKEluc3RhbmNlKiBpbnN0YW4KICAgICByZXR1cm4gUGFya2luZ0xvdDo6dW5wYXJrQ291
bnQocG9pbnRlciwgY291bnQpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uV2FzbU1lbW9yeUluaXQsIGJvb2wsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGRh
dGFTZWdtZW50SW5kZXgsIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3Ms
IHVpbnQzMl90IGxlbmd0aCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bU1lbW9yeUluaXQsIHNpemVfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZGF0YVNl
Z21lbnRJbmRleCwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWlu
dDMyX3QgbGVuZ3RoKSkKIHsKICAgICBBU1NFUlQoZGF0YVNlZ21lbnRJbmRleCA8IGluc3RhbmNl
LT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLmRhdGFTZWdtZW50c0NvdW50KCkpOwogICAg
IHJldHVybiBpbnN0YW5jZS0+bWVtb3J5SW5pdChkc3RBZGRyZXNzLCBzcmNBZGRyZXNzLCBsZW5n
dGgsIGRhdGFTZWdtZW50SW5kZXgpOwpAQCAtOTE2LDYgKzkxMCw2NSBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbURhdGFEcm9wLCB2b2lkLCAoSW5zdGFuY2UqIGluc3Rh
bmNlLCB1bnNpZwogICAgIGluc3RhbmNlLT5kYXRhRHJvcChkYXRhU2VnbWVudEluZGV4KTsKIH0K
IAorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UaHJvdywgdm9pZCosIChJ
bnN0YW5jZSogaW5zdGFuY2UsIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgRW5jb2RlZEpTVmFsdWUqIGFyZ3VtZW50cykpCit7CisgICAgaW5zdGFuY2UtPnN0
b3JlVG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOwor
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmpl
Y3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRh
ZyA9IGluc3RhbmNlLT50YWcoZXhjZXB0aW9uSW5kZXgpOworCisgICAgRml4ZWRWZWN0b3I8dWlu
dDY0X3Q+IHZhbHVlcyh0YWcucGFyYW1ldGVyQ291bnQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRhZy5wYXJhbWV0ZXJDb3VudCgpOyArK2kpCisgICAgICAgIHZhbHVlc1tpXSA9
IGFyZ3VtZW50c1tpXTsKKworICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIGV4Y2VwdGlvbiA9
IEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3Nl
bWJseUV4Y2VwdGlvblN0cnVjdHVyZSgpLCB0YWcsIFdURk1vdmUodmFsdWVzKSk7CisgICAgdGhy
b3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBleGNlcHRpb24pOworCisgICAg
Z2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVG
b3JDYXRjaCk7CisgICAgQVNTRVJUKCEhdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAg
IC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0
b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBsbGludF9oYW5kbGVf
dW5jYXVnaHRfZXhjZXB0aW9uKQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUg
ZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUK
KyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2lu
dGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4
Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVn
aXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElm
IHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5j
YWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJhbWUtPmNhbGxlZSgpOworICAgIGJpdHdpc2VfY2Fz
dDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oanNJbnN0YW5jZS0+bW9kdWxlKCkpOwor
ICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKK30KKworSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZXRocm93LCB2b2lkKiwgKEluc3RhbmNlKiBpbnN0
YW5jZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIHRocm93blZhbHVlKSkK
K3sKKyAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKworICAgIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGluc3RhbmNlLT5vd25lcjxKU1dlYkFz
c2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpz
SW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgSlNWYWx1ZTo6ZGVjb2Rl
KHRocm93blZhbHVlKSk7CisKKyAgICBnZW5lcmljVW53aW5kKHZtLCBjYWxsRnJhbWUpOworICAg
IEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICBBU1NFUlQoISF2bS50YXJnZXRN
YWNoaW5lUENGb3JUaHJvdyk7CisgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0
ZXI6CisgICAgLy8gVGhpcyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3Bf
Y2F0Y2ggYW5kIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb24pCisgICAgLy8gcmVxdWly
ZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNlbGlu
ZSBKSVQgZG9lcyBub3QgcmVxdWlyZQorICAgIC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQg
d2l0aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNv
bnZlbnRpb24KKyAgICAvLyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNh
dGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBiZWZvcmUganVtcGluZworICAgIC8vIHRvIHRo
ZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlz
IHRlcnJpYmxlIGhhY2suCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3MDQ0MAorICAgIHZtLmNhbGxlZUZvcldhc21DYXRjaCA9IGNhbGxGcmFtZS0+Y2Fs
bGVlKCk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2Fz
dDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihq
c0luc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgcmV0dXJuIHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRo
cm93OworfQorCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRvSlNFeGNl
cHRpb24sIHZvaWQqLCAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFdhc206OkV4Y2VwdGlvblR5cGUg
dHlwZSwgSW5zdGFuY2UqIHdhc21JbnN0YW5jZSkpCiB7CiAgICAgd2FzbUluc3RhbmNlLT5zdG9y
ZVRvcENhbGxGcmFtZShjYWxsRnJhbWUpOwpAQCAtOTMyLDcgKzk4NSw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbiwgdm9pZCosIChDYWxsRnJh
bWUqIGNhbGxGcmFtCiAgICAgICAgIGlmICh0eXBlID09IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3Zl
cmZsb3cpCiAgICAgICAgICAgICBlcnJvciA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihnbG9i
YWxPYmplY3QpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvciA9IGNyZWF0ZUpTV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgV2FzbTo6ZXJyb3JNZXNzYWdl
Rm9yRXhjZXB0aW9uVHlwZSh0eXBlKSk7CisgICAgICAgICAgICBlcnJvciA9IGNyZWF0ZUpTV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgdHlwZSk7CiAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZXJyb3IpOwogICAgIH0KIApA
QCAtOTQ2LDEwICs5OTksMzQgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldh
c21Ub0pTRXhjZXB0aW9uLCB2b2lkKiwgKENhbGxGcmFtZSogY2FsbEZyYW0KICAgICAvLyBmb3Ig
ZXhjZXB0aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSBy
ZWdpc3RlciBiZWZvcmUganVtcGluZwogICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4g
SWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAorICAgIHZt
LmNhbGxlZUZvcldhc21DYXRjaCA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CiAgICAgYml0d2lzZV9j
YXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSldID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOwog
ICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKIH0KIAorSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRj
aGFibGUsIFBvaW50ZXJQYWlyLCAoSW5zdGFuY2UqIGluc3RhbmNlKSkKK3sKKyAgICBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJs
eUluc3RhbmNlPigpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3Rh
bmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBSRUxF
QVNFX0FTU0VSVCghIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworCisgICAgRXhjZXB0aW9uKiBl
eGNlcHRpb24gPSB0aHJvd1Njb3BlLmV4Y2VwdGlvbigpOworICAgIEpTVmFsdWUgdGhyb3duVmFs
dWUgPSBleGNlcHRpb24tPnZhbHVlKCk7CisKKyAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBl
eGNlcHRpb24gaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgY2F0Y2ggcHJvbG9ndWUKKyAgICAvLyBK
SVQgY29kZSBiZWNhdXNlIGNsZWFyaW5nIGl0IGFsc28gZW50YWlscyBjbGVhcmluZyBhIGJpdCBp
biBhbiBBdG9taWMKKyAgICAvLyBiaXQgZmllbGQgaW4gVk1UcmFwcy4KKyAgICB0aHJvd1Njb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CisKKyAgICB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cjsKKyAgICBp
ZiAoSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogd2FzbUV4Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbio+KHZtLCB0aHJvd25WYWx1ZSkpCisgICAgICAgIHBheWxv
YWQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHdhc21FeGNlcHRpb24tPnBheWxvYWQoKS5kYXRhKCkp
OworICAgIHJldHVybiBQb2ludGVyUGFpciB7IGJpdHdpc2VfY2FzdDx2b2lkKj4oSlNWYWx1ZTo6
ZW5jb2RlKHRocm93blZhbHVlKSksIHBheWxvYWQgfTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KIAogSUdOT1JFX1dBUk5JTkdTX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PcGVyYXRpb25zLmgKaW5kZXggZWViZTViNzY0YmE4OTc4Yzk0NDJlYjUxODI4MTA4
NzJjNjcyNGNhNC4uNWVjN2E1OTQ3Y2M3MzhjM2IyYjliYjI1ZDdlNWE2MDhmMWIyNmVkOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5oCkBAIC0zMiw2ICsz
Miw3IEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoUmV0dXJu
VHlwZS5oIgogI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisjaW5jbHVkZSAiV2FzbU9T
UkVudHJ5RGF0YS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDYsNiArNDcsOCBAQCBuYW1l
c3BhY2UgV2FzbSB7CiBjbGFzcyBJbnN0YW5jZTsKIGNsYXNzIFNpZ25hdHVyZTsKIAordm9pZCBs
b2FkVmFsdWVzSW50b0J1ZmZlcihQcm9iZTo6Q29udGV4dCYsIGNvbnN0IFN0YWNrTWFwJiwgdWlu
dDY0X3QqIGJ1ZmZlcik7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCiBKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UcmlnZ2VyT1NSRW50cnlOb3csIHZvaWQs
IChQcm9iZTo6Q29udGV4dCYpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
V2FzbVRyaWdnZXJUaWVyVXBOb3csIHZvaWQsIChJbnN0YW5jZSosIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgpKTsKQEAgLTY2LDI2ICs2OSwzNCBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbldhc21Xcml0ZUJhcnJpZXJTbG93UGF0aCwgdm9pZCwgKEpTQ2VsbCosIFZNKgogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Qb3Bjb3VudDMyLCB1aW50MzJfdCwgKGlu
dDMyX3QpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUG9wY291bnQ2NCwg
dWludDY0X3QsIChpbnQ2NF90KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkdyb3dNZW1vcnksIGludDMyX3QsICh2b2lkKiwgSW5zdGFuY2UqLCBpbnQzMl90KSk7Ci1KU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlGaWxsLCBib29sLCAoSW5z
dGFuY2UqLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCB0YXJnZXRWYWx1ZSwgdWludDMy
X3QgY291bnQpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9y
eUNvcHksIGJvb2wsIChJbnN0YW5jZSosIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNy
Y0FkZHJlc3MsIHVpbnQzMl90IGNvdW50KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbldhc21NZW1vcnlGaWxsLCBzaXplX3QsIChJbnN0YW5jZSosIHVpbnQzMl90IGRzdEFk
ZHJlc3MsIHVpbnQzMl90IHRhcmdldFZhbHVlLCB1aW50MzJfdCBjb3VudCkpOworSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSwgc2l6ZV90LCAoSW5zdGFu
Y2UqLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1aW50MzJfdCBj
b3VudCkpOwogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFdhc21UYWJs
ZUVsZW1lbnQsIEVuY29kZWRKU1ZhbHVlLCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgaW50MzJfdCkp
OwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25TZXRXYXNtVGFibGVFbGVtZW50
LCBib29sLCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgdWludDMyX3QsIEVuY29kZWRKU1ZhbHVlIGVu
Y1ZhbHVlKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNldFdhc21UYWJs
ZUVsZW1lbnQsIHNpemVfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQsIHVpbnQzMl90LCBFbmNvZGVk
SlNWYWx1ZSBlbmNWYWx1ZSkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25X
YXNtUmVmRnVuYywgRW5jb2RlZEpTVmFsdWUsIChJbnN0YW5jZSosIHVpbnQzMl90KSk7Ci1KU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUluaXQsIGJvb2wsIChJbnN0
YW5jZSosIHVuc2lnbmVkIGVsZW1lbnRJbmRleCwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMy
X3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkpOworSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVJbml0LCBzaXplX3QsIChJ
bnN0YW5jZSosIHVuc2lnbmVkIGVsZW1lbnRJbmRleCwgdW5zaWduZWQgdGFibGVJbmRleCwgdWlu
dDMyX3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkpOwog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtRWxlbURyb3AsIHZvaWQsIChJ
bnN0YW5jZSosIHVuc2lnbmVkIGVsZW1lbnRJbmRleCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25XYXNtVGFibGVHcm93LCBpbnQzMl90LCAoSW5zdGFuY2UqLCB1bnNpZ25l
ZCwgRW5jb2RlZEpTVmFsdWUgZmlsbCwgdWludDMyX3QgZGVsdGEpKTsKLUpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwgYm9vbCwgKEluc3RhbmNlKiwgdW5z
aWduZWQsIHVpbnQzMl90IG9mZnNldCwgRW5jb2RlZEpTVmFsdWUgZmlsbCwgdWludDMyX3QgY291
bnQpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlQ29weSwg
Ym9vbCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZHN0VGFibGVJbmRleCwgdW5zaWduZWQgc3JjVGFi
bGVJbmRleCwgaW50MzJfdCBkc3RPZmZzZXQsIGludDMyX3Qgc3JjT2Zmc2V0LCBpbnQzMl90IGxl
bmd0aCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVGaWxs
LCBzaXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkLCB1aW50MzJfdCBvZmZzZXQsIEVuY29kZWRK
U1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21UYWJsZUNvcHksIHNpemVfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZHN0
VGFibGVJbmRleCwgdW5zaWduZWQgc3JjVGFibGVJbmRleCwgaW50MzJfdCBkc3RPZmZzZXQsIGlu
dDMyX3Qgc3JjT2Zmc2V0LCBpbnQzMl90IGxlbmd0aCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25HZXRXYXNtVGFibGVTaXplLCBpbnQzMl90LCAoSW5zdGFuY2UqLCB1bnNp
Z25lZCkpOwogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk1lbW9yeUF0b21p
Y1dhaXQzMiwgaW50MzJfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgYmFzZSwgdW5z
aWduZWQgb2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgaW50NjRfdCB0aW1lb3V0KSk7CiBKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk1lbW9yeUF0b21pY1dhaXQ2NCwgaW50MzJfdCwg
KEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgYmFzZSwgdW5zaWduZWQgb2Zmc2V0LCB1aW50
NjRfdCB2YWx1ZSwgaW50NjRfdCB0aW1lb3V0KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbk1lbW9yeUF0b21pY05vdGlmeSwgaW50MzJfdCwgKEluc3RhbmNlKiwgdW5zaWdu
ZWQsIHVuc2lnbmVkLCBpbnQzMl90KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbldhc21NZW1vcnlJbml0LCBib29sLCAoSW5zdGFuY2UqLCB1bnNpZ25lZCBkYXRhU2VnbWVu
dEluZGV4LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1aW50MzJf
dCBsZW5ndGgpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9y
eUluaXQsIHNpemVfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCwgdWlu
dDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgbGVuZ3RoKSk7
CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21EYXRhRHJvcCwgdm9pZCwg
KEluc3RhbmNlKiwgdW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCkpOwogCitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UaHJvdywgdm9pZCosIChJbnN0YW5jZSosIENhbGxG
cmFtZSosIHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBFbmNvZGVkSlNWYWx1ZSopKTsKK0pTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVJldGhyb3csIHZvaWQqLCAoSW5zdGFu
Y2UqLCBDYWxsRnJhbWUqLCBFbmNvZGVkSlNWYWx1ZSB0aHJvd25WYWx1ZSkpOworCiBKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uLCB2b2lkKiwgKENh
bGxGcmFtZSosIFdhc206OkV4Y2VwdGlvblR5cGUsIEluc3RhbmNlKikpOworc3RydWN0IFBvaW50
ZXJQYWlyIHsKKyAgICB2b2lkKiBmaXJzdDsKKyAgICB2b2lkKiBzZWNvbmQ7Cit9OworSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlv
bklmQ2F0Y2hhYmxlLCBQb2ludGVyUGFpciwgKEluc3RhbmNlKikpOwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2Vj
dGlvblBhcnNlci5jcHAKaW5kZXggMGY4Y2NiN2UyYzNiNjQxMTYzNWNkOWY1YjA0OGIzNTYzMjA1
ZmE3NC4uY2ZkYWZmZGQ3YTQyY2M4MWU1YmEzYTYxZTRiYWU4ZWY1ZWNiZDNiYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcApAQCAtOTEs
NiArOTEsOCBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJl
c3VsdAogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+Z2xvYmFscy50cnlSZXNlcnZl
Q2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
IiwgaW1wb3J0Q291bnQsICIgZ2xvYmFscyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVz
IHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
bV9pbmZvLT5pbXBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBh
bGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnRzIik7IC8v
IEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4K
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0IGZ1bmN0aW9uIHNpZ25h
dHVyZXMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklY
TUVzIGJlbG93LgorICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSkK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRFeGNlcHRpb25TaWdu
YXR1cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxv
Y2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnQgZXhjZXB0aW9u
IHNpZ25hdHVyZXMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0
aGUgRklYTUVzIGJlbG93LgogCiAgICAgZm9yICh1aW50MzJfdCBpbXBvcnROdW1iZXIgPSAwOyBp
bXBvcnROdW1iZXIgPCBpbXBvcnRDb3VudDsgKytpbXBvcnROdW1iZXIpIHsKICAgICAgICAgdWlu
dDMyX3QgbW9kdWxlTGVuOwpAQCAtMTQyLDYgKzE0NCwyMSBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6
OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICAgICAgbV9pbmZvLT5nbG9i
YWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbjogeworICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNl
cHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAg
ICAgIHVpbnQ4X3QgdGFnVHlwZTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVUludDgodGFnVHlwZSksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0
IGV4Y2VwdGlvbidzIHRhZyB0eXBlIik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHRhZ1R5cGUsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCBleGNlcHRpb24gaGFzIHRhZyB0eXBl
ICIsIHRhZ1R5cGUsICIgYnV0IHRoZSBvbmx5IHN1cHBvcnRlZCB0YWcgdHlwZSBpcyAwIik7CisK
KyAgICAgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4OworICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhjZXB0aW9uU2lnbmF0dXJl
SW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGV4Y2VwdGlv
biBzaWduYXR1cmUgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVs
ZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhjZXB0aW9u
U2lnbmF0dXJlSW5kZXggPj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICJpbnZhbGlk
IGV4Y2VwdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwg
ZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXgsICIgaXMgb3V0IG9mIHJhbmdlIG9mICIsIG1faW5mby0+
dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBm
aWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBraW5kSW5kZXggPSBtX2lu
Zm8tPmltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOworICAgICAgICAgICAg
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KG1faW5mby0+dXNlZFNpZ25hdHVyZXNbZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXhdKTsKKyAgICAg
ICAgICAgIG1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRB
cHBlbmQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICAgICAgfQogCiAgICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZN
b3ZlKG1vZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXgg
fSk7CkBAIC0zNTgsNiArMzc1LDEzIEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VFeHBvcnQo
KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgICAgICAgICAgZ2xvYmFsLmJpbmRpbmdNb2RlID0g
R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsK
KyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5
RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAg
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCA+PSBtX2luZm8tPmV4Y2VwdGlv
bkluZGV4U3BhY2VTaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBl
eGNlcHRpb24gbnVtYmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBleGNlcHRpb24g
aW5kZXggc3BhY2UgIiwgbV9pbmZvLT5leGNlcHRpb25JbmRleFNwYWNlU2l6ZSgpLCAiLCBuYW1l
ZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBtX2luZm8tPmFkZERlY2xhcmVk
RXhjZXB0aW9uKGtpbmRJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICB9CiAKICAgICAgICAgbV9pbmZvLT5leHBvcnRzLnVuY2hlY2tlZEFwcGVuZCh7IFdURk1v
dmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7CkBAIC04MTcsNiArODQxLDI5IEBA
IGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VEYXRhQ291bnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAorYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUV4Y2VwdGlvbigp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1
c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJs
ZWQiKTsKKworICAgIHVpbnQzMl90IGV4Y2VwdGlvbkNvdW50OworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGV4Y2VwdGlvbkNvdW50KSwgImNhbid0IGdldCBFeGNlcHRp
b24gc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleGNlcHRpb25D
b3VudCA+IG1heEV4Y2VwdGlvbnMsICJFeHBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcg
IiwgZXhjZXB0aW9uQ291bnQsICIgbWF4aW11bSAiLCBtYXhFeGNlcHRpb25zKTsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNl
cy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9uQ291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5v
dWdoIG1lbW9yeSBmb3IgIiwgZXhjZXB0aW9uQ291bnQsICIgZXhjZXB0aW9ucyIpOworCisgICAg
Zm9yICh1aW50MzJfdCBleGNlcHRpb25OdW1iZXIgPSAwOyBleGNlcHRpb25OdW1iZXIgPCBleGNl
cHRpb25Db3VudDsgKytleGNlcHRpb25OdW1iZXIpIHsKKyAgICAgICAgdWludDhfdCB0YWdUeXBl
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KHRhZ1R5cGUpLCAiY2Fu
J3QgZ2V0ICIsIGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2VwdGlvbiB0YWcgdHlwZSIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhZ1R5cGUsIGV4Y2VwdGlvbk51bWJlciwgInRoIEV4
Y2VwdGlvbiBoYXMgdGFnIHR5cGUgIiwgdGFnVHlwZSwgIiBidXQgdGhlIG9ubHkgc3VwcG9ydGVk
IHRhZyB0eXBlIGlzIDAiKTsKKworICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSwgImNhbid0
IGdldCAiLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24ncyB0eXBlIG51bWJlciIpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9pbmZvLT51c2VkU2ln
bmF0dXJlcy5zaXplKCksIGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2VwdGlvbiB0eXBlIG51bWJl
ciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0
dXJlc1t0eXBlTnVtYmVyXSk7CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxFeGNlcHRpb25TaWdu
YXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHsgfTsKK30KIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VDdXN0b20oKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgQ3VzdG9tU2VjdGlvbiBzZWN0aW9uOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaAppbmRleCBmMzY5ZTdiODZjYWZhOTNhZDNmODNh
ZDYwY2EwODdjOGY1ODgwZWNhLi5iZWYyMDcwMWY0MGZlNDBiNGEyOGEwYWRjZmM0N2Y2YmYwZDVi
ZmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaApAQCAtNDUs
NyArNDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogICAgIG1hY3JvKEVs
ZW1lbnQsICAgIDksICJFbGVtZW50cyBzZWN0aW9uIikgXAogICAgIG1hY3JvKENvZGUsICAgICAg
MTAsICJGdW5jdGlvbiBib2RpZXMgKGNvZGUpIikgXAogICAgIG1hY3JvKERhdGEsICAgICAgMTEs
ICJEYXRhIHNlZ21lbnRzIikgXAotICAgIG1hY3JvKERhdGFDb3VudCwgMTIsICJEYXRhIGNvdW50
IikKKyAgICBtYWNybyhEYXRhQ291bnQsIDEyLCAiRGF0YSBjb3VudCIpIFwKKyAgICBtYWNybyhF
eGNlcHRpb24sIDEzLCAiRXhjZXB0aW9uIGRlY2xhcmF0aW9ucyIpIFwKIAogZW51bSBjbGFzcyBT
ZWN0aW9uIDogdWludDhfdCB7CiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCBCZWdpbiBpcyBs
ZXNzIHRoYW4gZXZlcnkgb3RoZXIgc2VjdGlvbiBudW1iZXIgYW5kIHRoYXQgQ3VzdG9tIGlzIGdy
ZWF0ZXIuCkBAIC05MCw2ICs5MSwxMCBAQCBpbmxpbmUgYm9vbCB2YWxpZGF0ZU9yZGVyKFNlY3Rp
b24gcHJldmlvdXNLbm93biwgU2VjdGlvbiBuZXh0KQogICAgIEFTU0VSVChpc0tub3duU2VjdGlv
bihwcmV2aW91c0tub3duKSB8fCBwcmV2aW91c0tub3duID09IFNlY3Rpb246OkJlZ2luKTsKICAg
ICBpZiAocHJldmlvdXNLbm93biA9PSBTZWN0aW9uOjpEYXRhQ291bnQgJiYgbmV4dCA9PSBTZWN0
aW9uOjpDb2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocHJldmlvdXNLbm93biA9
PSBTZWN0aW9uOjpFeGNlcHRpb24pCisgICAgICAgIHJldHVybiBuZXh0ID49IFNlY3Rpb246Okds
b2JhbDsKKyAgICBpZiAobmV4dCA9PSBTZWN0aW9uOjpFeGNlcHRpb24pCisgICAgICAgIHJldHVy
biBwcmV2aW91c0tub3duIDw9IFNlY3Rpb246Ok1lbW9yeTsKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dWludDhfdD4ocHJldmlvdXNLbm93bikgPCBzdGF0aWNfY2FzdDx1aW50OF90PihuZXh0KTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVy
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAppbmRl
eCA3MWFhYjNkZjc1NzIyZDQwOGM1MThjMTNmNTM4NWMzYWY5YTQ4MDA2Li5mOWE1NjFiODUwZmM1
YzE5MzlkMGVmNTllOGE5ZmQyYjYwNTk3OGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtU2lnbmF0dXJlLmNwcApAQCAtOTYsNyArOTYsNyBAQCBSZWZQdHI8U2lnbmF0dXJl
PiBTaWduYXR1cmU6OnRyeUNyZWF0ZShTaWduYXR1cmVBcmdDb3VudCByZXR1cm5Db3VudCwgU2ln
bmF0dXJlQQogCiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6U2lnbmF0dXJlSW5mb3JtYXRpb24oKQog
ewotI2RlZmluZSBNQUtFX1RIVU5LX1NJR05BVFVSRSh0eXBlLCBlbmMsIHN0ciwgdmFsKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBNQUtFX1RIVU5LX1NJR05BVFVSRSh0eXBl
LCBlbmMsIHN0ciwgdmFsLCBfKSAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICBpZiAoVHlwZUtpbmQ6OnR5cGUgIT0gVHlwZUtpbmQ6OlZvaWQpIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgUmVmUHRyPFNpZ25hdHVy
ZT4gc2lnID0gU2lnbmF0dXJlOjp0cnlDcmVhdGUoMSwgMCk7ICAgICAgICAgICAgXApAQCAtMTY1
LDYgKzE2NSwxMCBAQCBzdHJ1Y3QgUGFyYW1ldGVyVHlwZXMgewogCiBSZWZQdHI8U2lnbmF0dXJl
PiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6c2lnbmF0dXJlRm9yKGNvbnN0IFZlY3RvcjxUeXBlLCAx
PiYgcmVzdWx0cywgY29uc3QgVmVjdG9yPFR5cGU+JiBhcmdzKQogeworICAgIGlmIGNvbnN0ZXhw
ciAoQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHRzLmNvbnRhaW5zKFdh
c206OlR5cGVzOjpWb2lkKSk7CisgICAgICAgIEFTU0VSVCghYXJncy5jb250YWlucyhXYXNtOjpU
eXBlczo6Vm9pZCkpOworICAgIH0KICAgICBTaWduYXR1cmVJbmZvcm1hdGlvbiYgaW5mbyA9IHNp
bmdsZXRvbigpOwogICAgIExvY2tlciBsb2NrZXIgeyBpbmZvLm1fbG9jayB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IGQ5ZmFmNWQ1OWQ5
OWY1ZTkwNGMzYTdiMjQwMDdkMDkxZmQxZDljMTcuLmFkNTEzNWU3YWQ2NTc4YzM5NzYxYmQ3ZDNi
NTY4YTBmZDJiZjYwNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93
UGF0aHMuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAj
aW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgor
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJXYXNtQkJR
UGxhbi5oIgpAQCAtNTg2LDYgKzU4OCwxMTEgQEAgV0FTTV9TTE9XX1BBVEhfREVDTChtZW1vcnlf
YXRvbWljX25vdGlmeSkKICAgICBXQVNNX1JFVFVSTihyZXN1bHQpOwogfQogCitXQVNNX1NMT1df
UEFUSF9ERUNMKHRocm93KQoreworICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFtZShjYWxs
RnJhbWUpOworCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3RhbmNlID0gaW5zdGFu
Y2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKKyAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHBjLT5hczxXYXNtVGhyb3csIFdh
c21PcGNvZGVUcmFpdHM+KCk7CisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcgPSBpbnN0YW5jZS0+
dGFnKGluc3RydWN0aW9uLm1fZXhjZXB0aW9uSW5kZXgpOworCisgICAgRml4ZWRWZWN0b3I8dWlu
dDY0X3Q+IHZhbHVlcyh0YWcucGFyYW1ldGVyQ291bnQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRhZy5wYXJhbWV0ZXJDb3VudCgpOyArK2kpCisgICAgICAgIHZhbHVlc1tpXSA9
IFJFQUQoKGluc3RydWN0aW9uLm1fZmlyc3RWYWx1ZSAtIGkpKS5lbmNvZGVkSlNWYWx1ZSgpOwor
CisgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogZXhjZXB0aW9uID0gSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RXhjZXB0aW9uU3Ry
dWN0dXJlKCksIHRhZywgV1RGTW92ZSh2YWx1ZXMpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbihnbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGV4Y2VwdGlvbik7CisKKyAgICBnZW5lcmljVW53aW5kKHZt
LCBjYWxsRnJhbWUpOworICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICBB
U1NFUlQoISF2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CisgICAgLy8gRklYTUU6IFdlIGNv
dWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhpcyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0
aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRp
b24pCisgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRo
ZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQorICAgIC8vIHRoaXMgc2lu
Y2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBt
YWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KKyAgICAvLyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBs
b2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBiZWZvcmUganVt
cGluZworICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdl
IGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAorICAgIHZtLmNhbGxlZUZvcldhc21DYXRj
aCA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2Fs
bEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gYml0d2lz
ZV9jYXN0PHVpbnQ2NF90Pihqc0luc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgV0FTTV9SRVRVUk5f
VFdPKHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93LCBudWxscHRyKTsKK30KKworV0FTTV9TTE9X
X1BBVEhfREVDTChyZXRocm93KQoreworICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFtZShj
YWxsRnJhbWUpOworCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3RhbmNlID0gaW5z
dGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHBjLT5hczxXYXNtUmV0aHJv
dywgV2FzbU9wY29kZVRyYWl0cz4oKTsKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IFJFQUQoaW5z
dHJ1Y3Rpb24ubV9leGNlcHRpb24pLmpzVmFsdWUoKTsKKyAgICB0aHJvd0V4Y2VwdGlvbihnbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGV4Y2VwdGlvbik7CisKKyAgICBnZW5lcmljVW53aW5kKHZt
LCBjYWxsRnJhbWUpOworICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICBB
U1NFUlQoISF2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CisgICAgLy8gRklYTUU6IFdlIGNv
dWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhpcyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0
aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRp
b24pCisgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRo
ZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQorICAgIC8vIHRoaXMgc2lu
Y2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBt
YWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KKyAgICAvLyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBs
b2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBiZWZvcmUganVt
cGluZworICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdl
IGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAorICAgIHZtLmNhbGxlZUZvcldhc21DYXRj
aCA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2Fs
bEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gYml0d2lz
ZV9jYXN0PHVpbnQ2NF90Pihqc0luc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgV0FTTV9SRVRVUk5f
VFdPKHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93LCBudWxscHRyKTsKK30KKworV0FTTV9TTE9X
X1BBVEhfREVDTChyZXRyaWV2ZV9hbmRfY2xlYXJfZXhjZXB0aW9uKQoreworICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9
IGluc3RhbmNlLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCEhdGhyb3dTY29wZS5leGNl
cHRpb24oKSk7CisKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHRocm93U2NvcGUuZXhjZXB0
aW9uKCk7CisgICAgSlNWYWx1ZSB0aHJvd25WYWx1ZSA9IGV4Y2VwdGlvbi0+dmFsdWUoKTsKKyAg
ICB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cjsKKworICAgIGNvbnN0IGF1dG8mIGhhbmRsZUNhdGNo
QWxsID0gWyZdKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uKSB7CisgICAgICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihpbnN0cnVjdGlvbi5tX2V4Y2VwdGlvbikgPSB0aHJvd25WYWx1ZTsKKyAgICB9
OworCisgICAgY29uc3QgYXV0byYgaGFuZGxlQ2F0Y2ggPSBbJl0oY29uc3QgYXV0byYgaW5zdHJ1
Y3Rpb24pIHsKKyAgICAgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogd2FzbUV4Y2VwdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2VwdGlvbio+KHZtLCB0aHJvd25WYWx1ZSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhd2FzbUV4Y2VwdGlvbik7CisgICAgICAgIHBheWxv
YWQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHdhc21FeGNlcHRpb24tPnBheWxvYWQoKS5kYXRhKCkp
OworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoaW5zdHJ1Y3Rpb24ubV9leGNlcHRpb24p
ID0gdGhyb3duVmFsdWU7CisgICAgfTsKKworICAgIGlmIChwYy0+aXM8V2FzbUNhdGNoLCBXYXNt
T3Bjb2RlVHJhaXRzPigpKQorICAgICAgICBoYW5kbGVDYXRjaChwYy0+YXM8V2FzbUNhdGNoLCBX
YXNtT3Bjb2RlVHJhaXRzPigpKTsKKyAgICBlbHNlIGlmIChwYy0+aXM8V2FzbUNhdGNoQWxsLCBX
YXNtT3Bjb2RlVHJhaXRzPigpKQorICAgICAgICBoYW5kbGVDYXRjaEFsbChwYy0+YXM8V2FzbUNh
dGNoQWxsLCBXYXNtT3Bjb2RlVHJhaXRzPigpKTsKKyAgICBlbHNlIGlmIChwYy0+aXM8V2FzbUNh
dGNoTm9UbHMsIFdhc21PcGNvZGVUcmFpdHM+KCkpCisgICAgICAgIGhhbmRsZUNhdGNoKHBjLT5h
czxXYXNtQ2F0Y2hOb1RscywgV2FzbU9wY29kZVRyYWl0cz4oKSk7CisgICAgZWxzZSBpZiAocGMt
PmlzPFdhc21DYXRjaEFsbE5vVGxzLCBXYXNtT3Bjb2RlVHJhaXRzPigpKQorICAgICAgICBoYW5k
bGVDYXRjaEFsbChwYy0+YXM8V2FzbUNhdGNoQWxsTm9UbHMsIFdhc21PcGNvZGVUcmFpdHM+KCkp
OworICAgIGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAg
IC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIGV4Y2VwdGlvbiBoZXJlIHJhdGhlciB0aGFuIGluIHRo
ZSBjYXRjaCBwcm9sb2d1ZQorICAgIC8vIEpJVCBjb2RlIGJlY2F1c2UgY2xlYXJpbmcgaXQgYWxz
byBlbnRhaWxzIGNsZWFyaW5nIGEgYml0IGluIGFuIEF0b21pYworICAgIC8vIGJpdCBmaWVsZCBp
biBWTVRyYXBzLgorICAgIHRocm93U2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICBXQVNNX1JF
VFVSTl9UV08ocGMsIHBheWxvYWQpOworfQorCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBzbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNv
bnN0IEluc3RydWN0aW9uKiBwYywgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpFeGNl
cHRpb25UeXBlIGV4Y2VwdGlvblR5cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuaAppbmRleCA3NzYyMTE4MzM4YTdi
NzA2OTY5YjI1YjUyY2UxNmUyYzNkYzdiZDRlLi5iNjRjZTdjZGU0MWFhYTA2ODk3ZThmZmZlZDgy
YThkMDY0MzJkZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U2xvd1BhdGhzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRo
cy5oCkBAIC04Myw2ICs4Myw5IEBAIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKHNldF9nbG9i
YWxfcmVmX3BvcnRhYmxlX2JpbmRpbmcpOwogV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wobWVt
b3J5X2F0b21pY193YWl0MzIpOwogV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wobWVtb3J5X2F0
b21pY193YWl0NjQpOwogV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wobWVtb3J5X2F0b21pY19u
b3RpZnkpOworV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wodGhyb3cpOworV0FTTV9TTE9XX1BB
VEhfSElEREVOX0RFQ0wocmV0aHJvdyk7CitXQVNNX1NMT1dfUEFUSF9ISURERU5fREVDTChyZXRy
aWV2ZV9hbmRfY2xlYXJfZXhjZXB0aW9uKTsKIAogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5
cGUgc2xvd19wYXRoX3dhc21fdGhyb3dfZXhjZXB0aW9uKENhbGxGcmFtZSosIGNvbnN0IEluc3Ry
dWN0aW9uKiwgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpFeGNlcHRpb25UeXBlKSBS
RUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIHNsb3dfcGF0aF93YXNtX3BvcGNvdW50KGNvbnN0IEluc3RydWN0aW9uKiBwYywgdWlu
dDMyX3QpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAppbmRleCBmYTU1MmVm
ZmYxNzQxZWNiNWE0YjZjMmY4OWZjYTA5NzU5ZWUzMTVkLi4xMmNkYWE5NjVlYTk4YmExOGFjMjcx
NmRjYzc2ZTgyNzA4NTAyMTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcApAQCAtMTE3LDYgKzExNyw3IEBAIGF1dG8gU3RyZWFt
aW5nUGFyc2VyOjpwYXJzZUNvZGVTZWN0aW9uU2l6ZSh1aW50MzJfdCBmdW5jdGlvbkNvdW50KSAt
PiBTdGF0ZQogICAgIG1fZnVuY3Rpb25Db3VudCA9IGZ1bmN0aW9uQ291bnQ7CiAgICAgbV9mdW5j
dGlvbkluZGV4ID0gMDsKICAgICBtX2NvZGVPZmZzZXQgPSBtX29mZnNldDsKKyAgICBtX2luZm8t
Pm1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9ucy5lbnN1cmVTaXplKGZ1bmN0aW9uQ291bnQp
OwogCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkNvdW50ID09IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBi
aWcgIiwgZnVuY3Rpb25Db3VudCk7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkNv
dW50ICE9IG1faW5mby0+ZnVuY3Rpb25zLnNpemUoKSwgIkNvZGUgc2VjdGlvbiBjb3VudCAiLCBm
dW5jdGlvbkNvdW50LCAiIGV4Y2VlZHMgdGhlIGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMg
IiwgbV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UYWcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRhZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGVjNjczNjIzMmYwNzIxZmM2MjU3ZDQ3OTQxNzE3YjUyNjJi
YmVlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWcuY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbVRhZy5oIgor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBX
YXNtIHsKKwordWludDMyX3QgVGFnOjpzX2lkID0gMDsKKworfX0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UYWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lMDM5NTNkNWQ2ZWVmYzkzMzgxZmM5MGU2NGY1YjcyZWMzMGQxNDc5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhZy5oCkBAIC0wLDAgKzEsNjIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21TaWduYXR1
cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgVGFnIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRhZz4geworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRhZyk7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxUYWc+IGNyZWF0ZShjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBUYWcoc2lnbmF0dXJlKSk7IH0KKworICAgIFNpZ25hdHVyZUFyZ0NvdW50
IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50Q291
bnQoKTsgfQorICAgIFR5cGUgcGFyYW1ldGVyKFNpZ25hdHVyZUFyZ0NvdW50IGkpIGNvbnN0IHsg
cmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudChpKTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFRhZyYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faWQgPT0gb3RoZXIubV9pZDsgfQor
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUYWcmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lk
ICE9IG90aGVyLm1faWQ7IH0KKworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV9zaWduYXR1cmUuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBUYWcoY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCisgICAgICAgIDogbV9pZCgrK3NfaWQpCisgICAgICAg
ICwgbV9zaWduYXR1cmUoUmVmIHsgc2lnbmF0dXJlIH0pCisgICAgeworICAgIH0KKworICAgIHN0
YXRpYyB1aW50MzJfdCBzX2lkOworICAgIHVpbnQzMl90IG1faWQ7CisgICAgUmVmPGNvbnN0IFNp
Z25hdHVyZT4gbV9zaWduYXR1cmU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGh1bmtzLmNwcAppbmRleCA3OWQxYmNmZjg5ZmIwNGUyMmVkNTRmMmY2NDA4YmUwOWYy
OTNkMGMzLi5mZWMyYTEzNzc5YmYyN2Y2NDhmYWEzOGE1ZWY4NjQ4ZTA5NDg1YzFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDggKzI4LDExIEBA
CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJK
U0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJQcm9i
ZUNvbnRleHQuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCmluZGV4IGMyMzVjZmU2Mjk1ZTY2OWFl
NWE4MGVlOGYyNTJlYTZjYTI0MzFiODMuLmY0NWRlYjJhNTk2Y2FhMjU3ZTMzMWVkMjFlZjA5ZTA2
YjA1ZWM1MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVu
a3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJh
dG9ySW5saW5lc0hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRl
V2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5CmluZGV4IDFlMzgwZGVmMWNkOGNiNjc2
MDc1ZWQzMjU1NzliMGY1MWQxYmNlNTUuLjk2NzdlYjgzZDk2YTdhZDY0ZmI1MTQ3YTQyYjRhODU4
ZDk1OTQwNDcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRl
V2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5CkBAIC0x
NDQsNyArMTQ0LDcgQEAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKICAgICAgICAgICAgIHNlbGYuYWR2
YW5jZSgpCiAgICAgICAgICAgICBzZWxmLmNvbnN1bWUoIikiKQogICAgICAgICBlbGlmIGFyZ3Vt
ZW50UmVnZXgubWF0Y2goc2VsZi50b2tlbigpKToKLSAgICAgICAgICAgIHJlc3VsdCA9ICJhcmci
ICsgc2VsZi50b2tlbigpWzE6XQorICAgICAgICAgICAgcmVzdWx0ID0gImdldChhcmciICsgc2Vs
Zi50b2tlbigpWzE6XSArICIpIgogICAgICAgICAgICAgc2VsZi5hZHZhbmNlKCkKICAgICAgICAg
ZWxzZToKICAgICAgICAgICAgIG9wID0gc2VsZi50b2tlbigpCkBAIC0xNTYsMTMgKzE1NiwxNiBA
QCBjbGFzcyBDb2RlR2VuZXJhdG9yOgogCiAgICAgICAgIHJldHVybiByZXN1bHQKIAorICAgIGRl
ZiBtYWtlUmVzdWx0KHNlbGYsIHJlc3VsdFZhbHVlKToKKyAgICAgICAgcmV0dXJuIHJlc3VsdFZh
bHVlICsgIjtcbiIgKyAicmVzdWx0ID0gcHVzaChyZXN1bHRWYWx1ZS0+dHlwZSgpKTtcbiIgKyAi
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgb3Jp
Z2luKCksIHJlc3VsdCwgcmVzdWx0VmFsdWUpOyIKKwogICAgIGRlZiBnZW5lcmF0ZShzZWxmLCB3
YXNtT3ApOgogICAgICAgICBpZiBsZW4oc2VsZi50b2tlbnMpID09IDE6Ci0gICAgICAgICAgICBw
YXJhbXMgPSBbImFyZyIgKyBzdHIocGFyYW0pIGZvciBwYXJhbSBpbiByYW5nZShsZW4od2FzbU9w
WyJwYXJhbWV0ZXIiXSkpXQotICAgICAgICAgICAgcmV0dXJuICIgICAgcmVzdWx0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6IiArIHNlbGYudG9rZW4oKSAr
ICIsIG9yaWdpbigpLCAiICsgIiwgIi5qb2luKHBhcmFtcykgKyAiKSIKKyAgICAgICAgICAgIHBh
cmFtcyA9IFsiZ2V0KGFyZyIgKyBzdHIocGFyYW0pICsgIikiIGZvciBwYXJhbSBpbiByYW5nZShs
ZW4od2FzbU9wWyJwYXJhbWV0ZXIiXSkpXQorICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFrZVJl
c3VsdCgiICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQjM6OiIgKyBzZWxmLnRva2VuKCkgKyAiLCBvcmlnaW4oKSwgIiArICIs
ICIuam9pbihwYXJhbXMpICsgIikiKQogICAgICAgICByZXN1bHQgPSBzZWxmLmdlbmVyYXRlT3Bj
b2RlKCkKLSAgICAgICAgc2VsZi5jb2RlLmFwcGVuZCgicmVzdWx0ID0gIiArIHJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuICIgICAgIiArICIgICAgXG4iLmpvaW4oc2VsZi5jb2RlKQorICAgICAgICBz
ZWxmLmNvZGUuYXBwZW5kKCJWYWx1ZSogcmVzdWx0VmFsdWUgPSAiICsgcmVzdWx0KQorICAgICAg
ICByZXR1cm4gc2VsZi5tYWtlUmVzdWx0KCIgICAgIiArICIgICAgXG4iLmpvaW4oc2VsZi5jb2Rl
KSkKIAogCiBkZWYgdGVtcChpbmRleCk6CkBAIC0xOTEsNyArMTk0LDcgQEAgZGVmIGdlbmVyYXRl
U2ltcGxlQ29kZShvcCk6CiAgICAgcmV0dXJuICIiIgogdGVtcGxhdGU8PiBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6IiIiICsgd2FzbS50b0NwcChvcFsibmFtZSJdKSArICI+KCIg
KyAiLCAiLmpvaW4oYXJncykgKyAiIiIpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSIiIiArIGdlbmVy
YXRlQjNDb2RlKG9wY29kZSwgYjNvcCkgKyAiIiI7CisiIiIgKyBnZW5lcmF0ZUIzQ29kZShvcGNv
ZGUsIGIzb3ApICsgIiIiCiAgICAgcmV0dXJuIHsgfTsKIH0KICIiIgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CmluZGV4IGMyMGJm
YTU0MmUwODY0YmNkMGFmODI4ZTc5ZDY5MjA4MDRhNTcyMzcuLjdjY2ZjYWZjNmFmYjMyMTA4Y2I0
YTUwOWM1YjkyMDcyYTgxYzc2MjQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKQEAgLTUzLDcgKzUzLDcgQEAgZGVmIGNwcE1h
Y3JvKHdhc21PcGNvZGUsIHZhbHVlLCBiMywgaW5jLCAqZXh0cmFBcmdzKToKIGRlZiB0eXBlTWFj
cm9pemVyKCk6CiAgICAgaW5jID0gMAogICAgIGZvciB0eSBpbiB3YXNtLnR5cGVzOgotICAgICAg
ICB5aWVsZCBjcHBNYWNybyh0eSwgd2FzbS50eXBlc1t0eV1bInZhbHVlIl0sIHdhc20udHlwZXNb
dHldWyJiM3R5cGUiXSwgaW5jKQorICAgICAgICB5aWVsZCBjcHBNYWNybyh0eSwgd2FzbS50eXBl
c1t0eV1bInZhbHVlIl0sIHdhc20udHlwZXNbdHldWyJiM3R5cGUiXSwgaW5jLCB0eSkKICAgICAg
ICAgaW5jICs9IDEKIAogdHlwZV9kZWZpbml0aW9ucyA9IFsiI2RlZmluZSBGT1JfRUFDSF9XQVNN
X1RZUEUobWFjcm8pIl0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseS5jcHAKaW5kZXggNzE4YmNiOTc1NTZlZjQ1YTgyZDNkYjllNGJhMDc3NTgwYmJjOWU1
Ni4uNzhmMTc2YWI2M2EyNjVlMTU0OWQ1ZDcyY2IzNjJjYTdlODU0N2NkYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKQEAgLTc4LDYgKzc4
LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHk6OnNfaW5mbyA9IHsgIldlYkFzc2Vt
Ymx5IiwgJkJhc2U6OnNfaW5mbywgJndlYkFzc2UKIC8qIFNvdXJjZSBmb3IgSlNXZWJBc3NlbWJs
eS5sdXQuaAogQGJlZ2luIHdlYkFzc2VtYmx5VGFibGUKICAgQ29tcGlsZUVycm9yICAgIGNyZWF0
ZVdlYkFzc2VtYmx5Q29tcGlsZUVycm9yICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCisgIEV4
Y2VwdGlvbiAgICAgICBjcmVhdGVXZWJBc3NlbWJseUV4Y2VwdGlvbiAgICAgRG9udEVudW18UHJv
cGVydHlDYWxsYmFjawogICBHbG9iYWwgICAgICAgICAgY3JlYXRlV2ViQXNzZW1ibHlHbG9iYWwg
ICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKICAgSW5zdGFuY2UgICAgICAgIGNyZWF0
ZVdlYkFzc2VtYmx5SW5zdGFuY2UgICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIExp
bmtFcnJvciAgICAgICBjcmVhdGVXZWJBc3NlbWJseUxpbmtFcnJvciAgICAgRG9udEVudW18UHJv
cGVydHlDYWxsYmFjawpAQCAtODUsNiArODYsNyBAQCBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3Nl
bWJseTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkiLCAmQmFzZTo6c19pbmZvLCAmd2ViQXNzZQog
ICBNb2R1bGUgICAgICAgICAgY3JlYXRlV2ViQXNzZW1ibHlNb2R1bGUgICAgICAgIERvbnRFbnVt
fFByb3BlcnR5Q2FsbGJhY2sKICAgUnVudGltZUVycm9yICAgIGNyZWF0ZVdlYkFzc2VtYmx5UnVu
dGltZUVycm9yICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIFRhYmxlICAgICAgICAgICBj
cmVhdGVXZWJBc3NlbWJseVRhYmxlICAgICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawor
ICBUYWcgICAgICAgICAgICAgY3JlYXRlV2ViQXNzZW1ibHlUYWcgICAgICAgICAgIERvbnRFbnVt
fFByb3BlcnR5Q2FsbGJhY2sKICAgY29tcGlsZSAgICAgICAgIHdlYkFzc2VtYmx5Q29tcGlsZUZ1
bmMgICAgICAgICBGdW5jdGlvbiAxCiAgIGluc3RhbnRpYXRlICAgICB3ZWJBc3NlbWJseUluc3Rh
bnRpYXRlRnVuYyAgICAgRnVuY3Rpb24gMQogICB2YWxpZGF0ZSAgICAgICAgd2ViQXNzZW1ibHlW
YWxpZGF0ZUZ1bmMgICAgICAgIEZ1bmN0aW9uIDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTAzZDQzMDMzY2VhZDVmMWI0M2I2Y2Q2NTFmMzZhNzg1MmZmMDE4OAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24u
Y3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbi5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBK
U1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5FeGNlcHRpb24i
LCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
V2ViQXNzZW1ibHlFeGNlcHRpb24pIH07CisKK0pTV2ViQXNzZW1ibHlFeGNlcHRpb246OkpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgV2Fz
bTo6VGFnJiB0YWcsIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiYmIHBheWxvYWQpCisgICAgOiBCYXNl
KHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3RhZyhSZWYgeyB0YWcgfSkKKyAgICAsIG1fcGF5bG9h
ZChXVEZNb3ZlKHBheWxvYWQpKQoreworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlFeGNlcHRpb246
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4oY2VsbCwgdmlzaXRvcik7CisKKyAgICBhdXRvKiBleGNlcHRpb24gPSBqc0Nhc3Q8SlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbio+KGNlbGwpOworICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYg
c2lnbmF0dXJlID0gZXhjZXB0aW9uLT50YWcoKS5zaWduYXR1cmUoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAg
IGlmIChpc1JlZlR5cGUoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSkKKyAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4+KGV4Y2VwdGlvbi0+
cGF5bG9hZCgpW2ldKSk7CisgICAgfQorfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbik7CisKK3ZvaWQgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2VwdGlv
bio+KGNlbGwpLT5KU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjp+SlNXZWJBc3NlbWJseUV4Y2VwdGlv
bigpOworfQorCitKU1ZhbHVlIEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmdldEFyZyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpKSBjb25zdAoreworICAgIGNvbnN0IFdh
c206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gdGFnKCkuc2lnbmF0dXJlKCk7CisgICAgQVNTRVJU
KGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICByZXR1cm4gdG9KU1ZhbHVlKGds
b2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50KGkpLCBwYXlsb2FkKClbaV0pOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRp
b24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRp
b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wM2I5YTMyZjk1YjE5NGRlZThjMTU0NmIyZGM1ZDk5NGQ3MmM2M2Ni
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbi5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21UYWcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24gOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3Qg
eworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0Rlc3RydWN0aWJsZU9iamVjdDsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlFeGNlcHRp
b25TcGFjZTxtb2RlPigpOworICAgIH0KKworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KEVycm9ySW5zdGFuY2VUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisg
ICAgc3RhdGljIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBjb25zdCBXYXNtOjpUYWcmIHRhZywgRml4ZWRWZWN0b3I8dWludDY0X3Q+
JiYgcGF5bG9hZCkKKyAgICB7CisgICAgICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIGV4Y2Vw
dGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlFeGNlcHRpb24+
KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKHZtLCBzdHJ1Y3R1cmUsIHRhZywgV1RG
TW92ZShwYXlsb2FkKSk7CisgICAgICAgIGV4Y2VwdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgIH0KKworICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CisKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFn
LmdldCgpOyB9CisgICAgY29uc3QgRml4ZWRWZWN0b3I8dWludDY0X3Q+JiBwYXlsb2FkKCkgY29u
c3QgeyByZXR1cm4gbV9wYXlsb2FkOyB9CisgICAgSlNWYWx1ZSBnZXRBcmcoSlNHbG9iYWxPYmpl
Y3QqLCB1bnNpZ25lZCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBKU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgV2FzbTo6VGFnJiwgRml4ZWRWZWN0b3I8dWlu
dDY0X3Q+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworCisgICAgUmVmPGNv
bnN0IFdhc206OlRhZz4gbV90YWc7CisgICAgRml4ZWRWZWN0b3I8dWludDY0X3Q+IG1fcGF5bG9h
ZDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlIZWxwZXJzLmgKaW5kZXggZDhmMjY1MGNhYTU4NjcyMzU0YmQ1ZjM5ZjdkZWFiNjQxMGQwMDU0
Yy4uYjYyMGVkY2EyOGE5ZTI0MjlmMTIwY2UxOTY3YTNiMGMxMTIxMzU3MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRl
ICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNs
dWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uaCIKQEAgLTE0NCw2ICsxNDUsNzUgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGRl
ZmF1bHRWYWx1ZUZvclJlZmVyZW5jZVR5cGUoY29uc3QgV2FzbTo6VHlwZSB0eXBlKQogICAgIHJl
dHVybiBqc051bGwoKTsKIH0KIAorQUxXQVlTX0lOTElORSBKU1ZhbHVlIHRvSlNWYWx1ZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXYXNtOjpUeXBlIHR5cGUsIHVpbnQ2NF90
IGJpdHMpCit7CisgICAgc3dpdGNoICh0eXBlLmtpbmQpIHsKKyAgICBjYXNlIFdhc206OlR5cGVL
aW5kOjpWb2lkOgorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBjYXNlIFdhc206
OlR5cGVLaW5kOjpJMzI6CisgICAgICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQz
Ml90PihiaXRzKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjMyOgorICAgICAgICByZXR1
cm4ganNOdW1iZXIoYml0d2lzZV9jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxpbnQzMl90PihiaXRz
KSkpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkY2NDoKKyAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKGJpdHdpc2VfY2FzdDxkb3VibGU+KGJpdHMpKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5k
OjpJNjQ6CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PGludDY0X3Q+KGJpdHMpKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpF
eHRlcm5yZWY6CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RnVuY3JlZjoKKyAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxKU1ZhbHVlPihiaXRzKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gSlNWYWx1ZSgpOworfQorCitBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGZyb21KU1ZhbHVlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFdhc206OlR5cGUgdHlwZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHN3aXRjaCAodHlwZS5raW5kKSB7
CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6VHlwZUlkeDoKKyAgICBjYXNlIFdhc206OlR5cGVL
aW5kOjpGdW5jcmVmOiB7CisgICAgICAgIGJvb2wgaXNOdWxsYWJsZSA9IHR5cGUuaXNOdWxsYWJs
ZSgpOworICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb24gPSBudWxscHRy
OworICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlv
biA9IG51bGxwdHI7CisgICAgICAgIGlmICghaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwg
dmFsdWUsIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlvbikgJiYgKCFpc051bGxhYmxl
IHx8ICF2YWx1ZS5pc051bGwoKSkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUV4Y2VwdGlv
bihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKGds
b2JhbE9iamVjdCwgdm0sICJGdW5jcmVmIG11c3QgYmUgYW4gZXhwb3J0ZWQgd2FzbSBmdW5jdGlv
biIpKTsKKyAgICAgICAgaWYgKHR5cGUua2luZCA9PSBXYXNtOjpUeXBlS2luZDo6VHlwZUlkeCAm
JiAod2FzbUZ1bmN0aW9uIHx8IHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7CisgICAgICAgICAgICBX
YXNtOjpTaWduYXR1cmVJbmRleCBwYXJhbUluZGV4ID0gdHlwZS5pbmRleDsKKyAgICAgICAgICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IGFyZ0luZGV4OworICAgICAgICAgICAgaWYgKHdhc21GdW5j
dGlvbikKKyAgICAgICAgICAgICAgICBhcmdJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJl
SW5kZXgoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmdJbmRleCA9IHdh
c21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICBpZiAocGFy
YW1JbmRleCAhPSBhcmdJbmRleCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUV4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9y
KGdsb2JhbE9iamVjdCwgdm0sICJBcmd1bWVudCBmdW5jdGlvbiBkaWQgbm90IG1hdGNoIHRoZSBy
ZWZlcmVuY2UgdHlwZSIpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBXYXNtOjpUeXBlS2luZDo6RXh0ZXJucmVmOgorICAgICAgICBpZiAoIXR5cGUuaXNOdWxs
YWJsZSgpICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FeGNl
cHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
cihnbG9iYWxPYmplY3QsIHZtLCAiTm9uLW51bGwgRXh0ZXJucmVmIGNhbm5vdCBiZSBudWxsIikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJMzI6CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdmFsdWUudG9JbnQzMihnbG9iYWxPYmplY3QpKTsK
KyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJNjQ6CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS50b0JpZ0ludDY0KGdsb2JhbE9i
amVjdCkpKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGMzI6CisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGds
b2JhbE9iamVjdCkpKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGNjQ6CisgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS50b051
bWJlcihnbG9iYWxPYmplY3QpKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6Vm9pZDoKKyAg
ICBjYXNlIFdhc206OlR5cGVLaW5kOjpGdW5jOgorICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlJl
Zk51bGw6CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6UmVmOgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKaW5kZXggNjZkYTEwYTc4
MDAzZGIyN2ExOTE4MmU5YjFiMGMzYzgwNWQ0YTNiNi4uMWQ3ZjQ2Y2Q2ODMwNDVlYWI2NDZiODcy
ZjU3OGVkNzUwMjI1Y2JmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCkBAIC0yMTYsNiArMjE2LDcgQEAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRyeUNyZWF0ZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RnVu
Y3Rpb246CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6CiAgICAgICAg
IGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZToKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRl
cm5hbEtpbmQ6OkV4Y2VwdGlvbjoKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBjYXNl
IFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OgogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNDIs
NiArMjQzLDcgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OnRyeUNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBjYXNlIFdhc206OkV4
dGVybmFsS2luZDo6RnVuY3Rpb246CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpH
bG9iYWw6CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZToKKyAgICAgICAg
Y2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbjoKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5k
ZXggNTZmNThmOTU0MzQ5Mzk1OWI4MjZkMWY5NzNhOGYyYjBkNWNmNzY5Zi4uOTc0ZDZkN2JhNWU3
YTU4NzhhODhiNmMxMTZkNTJhZGU1MzhiYWY3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTQ4LDYgKzQ4LDgg
QEAgY2xhc3MgQ29kZUJsb2NrOwogfQogCiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgZmlu
YWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKKwogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2Jq
ZWN0OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvci5jcHAKaW5kZXggMTAyMmE1MjI3NDMyOTY3YWVhYTUyYjhiODk3NDY3
OTNiZmFmZjRkYi4uYjEwMjk3ZmVkYWI3NWZhMjM3YzU3NjZlNzExOTMyNDI0MjY0ODY3ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNiArMzcsMTMgQEAgSlNPYmplY3QqIGNyZWF0ZUpTV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZt
LAogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwogICAgIHJldHVybiBFcnJvckluc3Rh
bmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseVJ1
bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlLCBKU1ZhbHVlKCksIGRlZmF1bHRTb3VyY2VB
cHBlbmRlciwgVHlwZU5vdGhpbmcsIEVycm9yVHlwZTo6RXJyb3IsIHRydWUpOwogfQorCitKU09i
amVjdCogY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBWTSYgdm0sIFdhc206OkV4Y2VwdGlvblR5cGUgdHlwZSkKK3sKKyAgICBFcnJv
ckluc3RhbmNlKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QsIHZt
LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5UnVudGltZUVycm9yU3RydWN0dXJlKCksIFdhc206
OmVycm9yTWVzc2FnZUZvckV4Y2VwdGlvblR5cGUodHlwZSksIEpTVmFsdWUoKSwgZGVmYXVsdFNv
dXJjZUFwcGVuZGVyLCBUeXBlTm90aGluZywgRXJyb3JUeXBlOjpFcnJvciwgdHJ1ZSk7CisgICAg
ZXJyb3ItPnNldENhdGNoYWJsZUZyb21XYXNtKGZhbHNlKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9
CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oCmluZGV4IGJlNDEz
MDkwZDMyNzRjNjE4ZmFmZDQ5YjExNjdiMGQyMjI3Y2U1ZmMuLmM4NmI2M2Y5MTJkM2NmNDFkMWM2
YzQ5MGMwODk2MzljYjdiMGIzZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTAgKzI4LDEyIEBA
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiRXJyb3JJbnN0YW5jZS5oIgor
I2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBKU09i
amVjdCogY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihKU0dsb2JhbE9iamVjdCosIFZN
JiwgY29uc3QgU3RyaW5nJik7CitKU09iamVjdCogY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvcihKU0dsb2JhbE9iamVjdCosIFZNJiwgV2FzbTo6RXhjZXB0aW9uVHlwZSk7CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFnLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4ZDU2MGYwNzEwNmU0ZDBhY2JhNTVhMzNh
NzQyYzcwOTc3MzdiMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworI2luY2x1ZGUgIldhc21UYWcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNz
SW5mbyBKU1dlYkFzc2VtYmx5VGFnOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5UYWciLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNz
ZW1ibHlUYWcpIH07CisKK0pTV2ViQXNzZW1ibHlUYWcqIEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBXYXNtOjpUYWcmIHRhZykKK3sKKyAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBhdXRvKiBqc1RhZyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2Vi
QXNzZW1ibHlUYWc+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5VGFnKHZtLCBzdHJ1Y3R1cmUsIHRh
Zyk7CisgICAganNUYWctPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4ganNUYWc7Cit9
CisKK1N0cnVjdHVyZSogSlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitKU1dlYkFz
c2VtYmx5VGFnOjpKU1dlYkFzc2VtYmx5VGFnKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGNvbnN0IFdhc206OlRhZyYgdGFnKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwg
bV90YWcoUmVmIHsgdGFnIH0pCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVRhZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhMmJmNDNkYjc3ZTU3ZmQ1MWI4MGMx
OTAzZjIyY2U5OWMwYTdlZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbVRhZy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseVRhZyBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgorICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHZtLndlYkFzc2VtYmx5VGFnU3BhY2U8bW9kZT4oKTsKKyAgICB9CisKKyAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTV2ViQXNz
ZW1ibHlUYWcqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgY29uc3Qg
V2FzbTo6VGFnJik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIGNvbnN0IFdhc206OlRhZyYgdGFnKCkg
Y29uc3QgeyByZXR1cm4gbV90YWc7IH0KKyAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25h
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIHRhZygpLnNpZ25hdHVyZSgpOyB9CisKK3ByaXZhdGU6Cisg
ICAgSlNXZWJBc3NlbWJseVRhZyhWTSYsIFN0cnVjdHVyZSosIGNvbnN0IFdhc206OlRhZyYpOwor
CisgICAgY29uc3QgUmVmPGNvbnN0IFdhc206OlRhZz4gbV90YWc7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAppbmRleCBmNjdmMjQyYTc4OTEzYWU1YzAyYWE1
NjhlOTlhYzY1Y2RiYjgwZmRlLi5kNjVmYzYxMjFiNjA5MGJkN2YyZDQwZDAzYmI0NWVlN2FhNjQw
MjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCkBAIC05
OCw3ICs5OCw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJU
YWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0mIHZtCiAgICAgICAgIHVuc2lnbmVkIG1h
cnNoYWxsZWRHUFJzID0gMDsKICAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwog
ICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0
QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICB1
bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgdW5zaWduZWQgZnJPZmZz
ZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0g
PCBhcmdDb3VudDsgKythcmdOdW0pIHsKICAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25h
dHVyZS5hcmd1bWVudChhcmdOdW0pOwogICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlLmtpbmQp
IHsKQEAgLTE2Miw3ICsxNjIsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2Fz
bUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICB1
bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9IDA7CiAgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRG
UFJzID0gMDsKICAgICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVT
bG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsK
LSAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lz
dGVycyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHVuc2ln
bmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAKICAgICAgICAgYXV0byBtYXJzaGFsbEZQUiA9IFsm
XSAoRlBSUmVnIGZwclJlZykgewogICAgICAgICAgICAgaml0LnB1cmlmeU5hTihmcHJSZWcpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNl
cHRpb25Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjRhNWY0NDg2YjRm
MTdjOGZmZmM4NzA3NDExNTAyYjg2N2U2OWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAK
QEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlFeGNlcHRp
b25Db25zdHJ1Y3Rvci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAi
SXRlcmF0b3JPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVy
cy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmgiCisKKyNpbmNs
dWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmx1dC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3I6
OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgJmNvbnN0cnVjdG9yVGFibGVX
ZWJBc3NlbWJseUV4Y2VwdGlvbiwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3Nl
bWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yKSB9OworCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKTsKK3N0YXRpYyBKU0NfREVD
TEFSRV9IT1NUX0ZVTkNUSU9OKGNhbGxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKTsKKworLyogU291
cmNlIGZvciBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmx1dC5oCisgQGJlZ2luIGNv
bnN0cnVjdG9yVGFibGVXZWJBc3NlbWJseUV4Y2VwdGlvbgorIEBlbmQKKyAqLworCitKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0SlNXZWJBc3NlbWJseUV4Y2VwdGlvbiwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBh
dXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgSlNWYWx1ZSB0YWdWYWx1ZSA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7CisgICAgSlNWYWx1ZSB0YWdQYXJhbWV0ZXJzID0gY2FsbEZyYW1lLT5hcmd1bWVudCgx
KTsKKworICAgIGF1dG8gdGFnID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFnKj4odm0s
IHRhZ1ZhbHVlKTsKKyAgICBpZiAoIXRhZykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3Rv
ciBleHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIFdlYkFzc2VtYmx5LlRhZyIpOwor
CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgdmFsdWVzOworICAgIGZvckVhY2hJbkl0ZXJhYmxl
KGdsb2JhbE9iamVjdCwgdGFnUGFyYW1ldGVycywgWyZdIChWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBuZXh0VmFsdWUpIHsKKyAgICAgICAgdmFsdWVzLmFwcGVuZChuZXh0VmFsdWUpOwor
ICAgIH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBpZiAo
dmFsdWVzLnNpemUoKSAhPSB0YWctPnNpZ25hdHVyZSgpLmFyZ3VtZW50Q291bnQoKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2Vt
Ymx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciBleHBlY3RzIHRoZSBudW1iZXIgb2YgcGFyZW1ldGVy
cyBpbiBXZWJBc3NlbWJseS5UYWcgdG8gbWF0Y2ggdGhlIHRhZ3MgcGFyYW1ldGVyIGNvdW50LiIp
OworCisgICAgLy8gQW55IEdDJ2QgdmFsdWVzIGluIGhlcmUgd2lsbCBiZSBtYXJrZWQgYnkgdGhl
IE1hcmtlZEFydWdlbWVudEJ1ZmZlciB1bnRpbCBzdG9yZWQgaW4gdGhlIEV4Y2VwdGlvbi4KKyAg
ICBGaXhlZFZlY3Rvcjx1aW50NjRfdD4gcGF5bG9hZCh2YWx1ZXMuc2l6ZSgpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHBheWxv
YWRbaV0gPSBmcm9tSlNWYWx1ZShnbG9iYWxPYmplY3QsIHRhZy0+c2lnbmF0dXJlKCkuYXJndW1l
bnQoaSksIHZhbHVlcy5hdChpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgfQorCisgICAgSlNPYmplY3QqIG5ld1RhcmdldCA9IGFzT2JqZWN0KGNhbGxG
cmFtZS0+bmV3VGFyZ2V0KCkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNDX0dFVF9E
RVJJVkVEX1NUUlVDVFVSRSh2bSwgd2ViQXNzZW1ibHlFeGNlcHRpb25TdHJ1Y3R1cmUsIG5ld1Rh
cmdldCwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoSlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHRhZy0+dGFn
KCksIFdURk1vdmUocGF5bG9hZCkpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihj
YWxsSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSopKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRpb24iKSk7Cit9CisKK1dl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKK3sKKyAgICBhdXRvKiBjb25zdHJ1Y3Rv
ciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3I+KHZtLmhlYXApKSBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yKHZtLCBzdHJ1
Y3R1cmUpOworICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgdGhpc1Byb3RvdHlw
ZSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworfQorCitTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5
RXhjZXB0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEludGVy
bmFsRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgV2Vi
QXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJB
c3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSogcHJvdG90eXBlKQoreworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtLCAxLCAiRXhjZXB0aW9uIl9zLCBQcm9wZXJ0eUFkZGl0aW9uTW9kZTo6V2l0
aG91dFN0cnVjdHVyZVRyYW5zaXRpb24pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHByb3RvdHlwZSwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnREZWxldGUpOworfQorCitXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNhbGxKU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uLCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKQoreworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0
aW9uQ29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hN2JjOTIzNTQ1NTMwZGU1ODU5NzBlOGRjZTdj
NjAwNjkwNGFiMTMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU7CisKK2NsYXNzIFdlYkFzc2VtYmx5RXhjZXB0
aW9uQ29uc3RydWN0b3IgZmluYWwgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3Rh
dGljUHJvcGVydHlUYWJsZTsKKworICAgIHN0YXRpYyBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0
cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6Cisg
ICAgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSop
OworfTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5RXhj
ZXB0aW9uQ29uc3RydWN0b3IsIEludGVybmFsRnVuY3Rpb24pOworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90
eXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zYzM2YzQ3OTg1YTMyNGMxYjM4OTkzNWVmMWExYjkxMWFhZjVm
OGU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmgiCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CitzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTih3ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvRnVuY0dldEFyZyk7
CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih3ZWJBc3NlbWJseUV4Y2VwdGlvblBy
b3RvRnVuY0lzKTsKK30KKworI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBl
Lmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5
RXhjZXB0aW9uUHJvdG90eXBlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5FeGNlcHRpb24iLCAm
QmFzZTo6c19pbmZvLCAmcHJvdG90eXBlVGFibGVXZWJBc3NlbWJseUV4Y2VwdGlvbiwgbnVsbHB0
ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSkgfTsK
KworLyogU291cmNlIGZvciBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5sdXQuaAorIEBi
ZWdpbiBwcm90b3R5cGVUYWJsZVdlYkFzc2VtYmx5RXhjZXB0aW9uCisgZ2V0QXJnICAgd2ViQXNz
ZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNHZXRBcmcgICBGdW5jdGlvbiAyCisgaXMgICB3ZWJBc3Nl
bWJseUV4Y2VwdGlvblByb3RvRnVuY0lzICAgRnVuY3Rpb24gMQorIEBlbmQKKyAqLworCitXZWJB
c3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6
OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7
CisgICAgYXV0byogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1i
bHlFeGNlcHRpb25Qcm90b3R5cGU+KHZtLmhlYXApKSBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICByZXR1cm4gb2JqZWN0OworfQorCitTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKK30KKworV2ViQXNzZW1ibHlF
eGNlcHRpb25Qcm90b3R5cGU6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisK
K0FMV0FZU19JTkxJTkUgc3RhdGljIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIGdldEV4Y2VwdGlv
bihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKFVOTElLRUxZKCF0aGlzVmFsdWUuaXNDZWxsKCkp
KSB7CisgICAgICAgIHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RB
bk9iamVjdEVycm9yKGdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlKSk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKyAgICBhdXRvKiB0YWcgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1i
bHlFeGNlcHRpb24qPih2bSwgdGhpc1ZhbHVlLmFzQ2VsbCgpKTsKKyAgICBpZiAoTElLRUxZKHRh
ZykpCisgICAgICAgIHJldHVybiB0YWc7CisgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIldlYkFzc2VtYmx5LkV4Y2VwdGlvbiBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1F
eGNlcHRpb24gb2JqZWN0Il9zKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQUxXQVlTX0lO
TElORSBzdGF0aWMgSlNXZWJBc3NlbWJseVRhZyogZ2V0VGFnKFZNJiB2bSwgSlNWYWx1ZSB0YWdW
YWx1ZSkKK3sKKyAgICBpZiAoIXRhZ1ZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFnKj4odm0sIHRh
Z1ZhbHVlLmFzQ2VsbCgpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2Vt
Ymx5RXhjZXB0aW9uUHJvdG9GdW5jR2V0QXJnLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGNvbnN0IGF1dG8mIGZvcm1hdE1lc3NhZ2UgPSBbJl0oY29uc3QgYXV0byYgbWVzc2FnZSkg
eworICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiV2ViQXNzZW1ibHkuRXhjZXB0aW9uLmdldEFy
ZygpOiAiLCBtZXNzYWdlKTsKKyAgICB9OworICAgIGNvbnN0IGF1dG8mIHR5cGVFcnJvciA9IFsm
XShjb25zdCBhdXRvJiBtZXNzYWdlKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgZm9ybWF0TWVzc2FnZShtZXNzYWdlKSk7CisgICAgICAgIHJldHVy
biBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH07CisKKyAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9u
KiBqc0V4Y2VwdGlvbiA9IGdldEV4Y2VwdGlvbihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFnKiB0YWcgPSBnZXRUYWcodm0sIGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkpOworICAgIGlmICghdGFnKQorICAgICAgICByZXR1cm4gdHlwZUVy
cm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuVGFnIik7CisKKyAgICBp
ZiAoanNFeGNlcHRpb24tPnRhZygpICE9IHRhZy0+dGFnKCkpCisgICAgICAgIHJldHVybiB0eXBl
RXJyb3IoIkZpcnN0IGFyZ3VtZW50IGRvZXMgbm90IG1hdGNoIHRoZSBleGNlcHRpb24gdGFnIik7
CisKKyAgICB1aW50MzJfdCBpbmRleCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSkudG9VSW50MzIo
Z2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoaW5kZXggPj0gdGFnLT50YWcoKS5wYXJhbWV0ZXJDb3Vu
dCgpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGZvcm1hdE1lc3NhZ2UoIkluZGV4IG91dCBvZiByYW5nZSIpKTsKKyAgICAgICAgcmV0dXJuIGVu
Y29kZWRKU1ZhbHVlKCk7CisgICAgfQorCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsIEpTVmFsdWU6OmVuY29kZShqc0V4Y2VwdGlvbi0+Z2V0QXJnKGdsb2JhbE9iamVjdCwgaW5k
ZXgpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih3ZWJBc3NlbWJseUV4Y2VwdGlv
blByb3RvRnVuY0lzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTV2ViQXNzZW1i
bHlFeGNlcHRpb24qIGpzRXhjZXB0aW9uID0gZ2V0RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIEpTV2ViQXNzZW1ibHlUYWcqIHRhZyA9IGdldFRh
Zyh2bSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKCF0YWcpIHsKKyAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCAiV2ViQXNzZW1ibHkuRXhj
ZXB0aW9uLmlzKCk6IEZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBXZWJBc3NlbWJseS5UYWciKTsK
KyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgfQorCisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oanNFeGNlcHRp
b24tPnRhZygpID09IHRhZy0+dGFnKCkpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZGMyMTA2ZDhiOTkzMWZkYTRhMGU5NGI2MWZiNWM3ZTFlYTM0OGRiYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG90eXBlLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKKyNpbmNsdWRlICJK
U09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgV2ViQXNzZW1ibHlFeGNlcHRp
b25Qcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGlj
UHJvcGVydHlUYWJsZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2Vzcz4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2Vt
Ymx5RXhjZXB0aW9uUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlOworICAgIH0KKworICAgIHN0YXRpYyBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZSogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUpOworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFdlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IDNhYjNjM2Q1Y2I1YzkwMDliZWMyYjZkODBkNDQ0Yzgw
YzE0M2VhZGUuLjE5NzE4ZGNlNjk5NjkwMDFlZTEyZDY0NGY4NjI0NWUwMTczNjViMDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uY3BwCkBAIC03OCw1MSArNzgsOSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdl
YkFzc2VtYmx5RnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIFdh
c206Okluc3RhbmNlKiB3YXNtSW5zdGFuY2UgPSAmaW5zdGFuY2UtPmluc3RhbmNlKCk7CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4ID0gMDsgYXJnSW5kZXggPCBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpOyArK2FyZ0luZGV4KSB7Ci0gICAgICAgIEpTVmFsdWUgYXJnID0gY2FsbEZyYW1l
LT5hcmd1bWVudChhcmdJbmRleCk7Ci0gICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50
KGFyZ0luZGV4KS5raW5kKSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkkzMjoKLSAg
ICAgICAgICAgIGFyZyA9IEpTVmFsdWU6OmRlY29kZShhcmcudG9JbnQzMihnbG9iYWxPYmplY3Qp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpUeXBl
SWR4OgotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGdW5jcmVmOiB7Ci0gICAgICAgICAg
ICBib29sIGlzTnVsbGFibGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnSW5kZXgpLmlzTnVsbGFi
bGUoKTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IG51
bGxwdHI7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBw
ZXJGdW5jdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAoIWlzV2ViQXNzZW1ibHlIb3N0
RnVuY3Rpb24odm0sIGFyZywgd2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSAmJiAo
IWlzTnVsbGFibGUgfHwgIWFyZy5pc051bGwoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVK
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sICJGdW5jcmVmIG11c3Qg
YmUgYW4gZXhwb3J0ZWQgd2FzbSBmdW5jdGlvbiIpKSk7Ci0gICAgICAgICAgICBpZiAoc2lnbmF0
dXJlLmFyZ3VtZW50KGFyZ0luZGV4KS5raW5kID09IFdhc206OlR5cGVLaW5kOjpUeXBlSWR4ICYm
ICh3YXNtRnVuY3Rpb24gfHwgd2FzbVdyYXBwZXJGdW5jdGlvbikpIHsKLSAgICAgICAgICAgICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBwYXJhbUluZGV4ID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFy
Z0luZGV4KS5pbmRleDsKLSAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBhcmdJ
bmRleDsKLSAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQotICAgICAgICAgICAgICAg
ICAgICBhcmdJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFyZ0luZGV4ID0gd2FzbVdyYXBwZXJG
dW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICBpZiAocGFyYW1JbmRl
eCAhPSBhcmdJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5
UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sICJBcmd1bWVudCBmdW5jdGlvbiBkaWQgbm90
IG1hdGNoIHRoZSByZWZlcmVuY2UgdHlwZSIpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpFeHRlcm5y
ZWY6Ci0gICAgICAgICAgICBpZiAoIXNpZ25hdHVyZS5hcmd1bWVudChhcmdJbmRleCkuaXNOdWxs
YWJsZSgpICYmIGFyZy5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgIk5vbi1udWxsIEV4dGVybnJlZiBj
YW5ub3QgYmUgbnVsbCIpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXYXNt
OjpUeXBlS2luZDo6STY0OgotICAgICAgICAgICAgYXJnID0gSlNWYWx1ZTo6ZGVjb2RlKGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4oYXJnLnRvQmlnSW50NjQoZ2xvYmFsT2JqZWN0KSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkYzMjoKLSAgICAgICAg
ICAgIGFyZyA9IEpTVmFsdWU6OmRlY29kZShiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGFyZy50b0Zs
b2F0KGdsb2JhbE9iamVjdCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdh
c206OlR5cGVLaW5kOjpGNjQ6Ci0gICAgICAgICAgICBhcmcgPSBKU1ZhbHVlOjpkZWNvZGUoYml0
d2lzZV9jYXN0PHVpbnQ2NF90PihhcmcudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlZvaWQ6Ci0gICAgICAg
IGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkZ1bmM6Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6
OlJlZk51bGw6Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlJlZjoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KKyAgICAgICAgdWludDY0
X3QgdmFsdWUgPSBmcm9tSlNWYWx1ZShnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudChh
cmdJbmRleCksIGNhbGxGcmFtZS0+YXJndW1lbnQoYXJnSW5kZXgpKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgICAgIGJveGVkQXJn
cy5hcHBlbmQoYXJnKTsKKyAgICAgICAgYm94ZWRBcmdzLmFwcGVuZChKU1ZhbHVlOjpkZWNvZGUo
dmFsdWUpKTsKICAgICB9CiAKICAgICAvLyBXaGVuIHdlIGRvbid0IHVzZSBmYXN0IFRMUyB0byBz
dG9yZSB0aGUgY29udGV4dCwgdGhlIEpTCkBAIC0xNTIsMTAgKzExMCw2IEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsCiAgICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKSk7CiAgICAg
QVNTRVJUKCZ3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNlKCkgPT0gdm0ud2FzbUNv
bnRleHQubG9hZCgpKTsKICAgICBFbmNvZGVkSlNWYWx1ZSByYXdSZXN1bHQgPSB2bUVudHJ5VG9X
YXNtKHdhc21GdW5jdGlvbi0+anNFbnRyeXBvaW50KE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxl
QWRkcmVzcygpLCAmdm0sICZwcm90b0NhbGxGcmFtZSk7Ci0gICAgLy8gV2UgbmVlZCB0byBtYWtl
IHN1cmUgdGhpcyBpcyBpbiBhIHJlZ2lzdGVyIG9yIG9uIHRoZSBzdGFjayBzaW5jZSBpdCdzIHN0
b3JlZCBpbiBWZWN0b3I8SlNWYWx1ZT4uCi0gICAgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBzdHJp
Y3RseSBuZWNlc3NhcnksIHNpbmNlIHRoZSBXZWJBc3NlbWJseUZ1bmN0aW9uKiBzaG91bGQga2Vl
cCB0aGUgaW5zdGFuY2UKLSAgICAvLyBhbGl2ZS4gQnV0IGl0J3MgZ29vZCBoeWdpZW5lLgotICAg
IGluc3RhbmNlLT51c2UoKTsKICAgICBpZiAocHJldldhc21JbnN0YW5jZSAhPSB3YXNtSW5zdGFu
Y2UpIHsKICAgICAgICAgLy8gVGhpcyBpcyBqdXN0IGZvciBzb21lIGV4dHJhIHNhZmV0eSBpbnN0
ZWFkIG9mIGxlYXZpbmcgYSBjYWNoZWQKICAgICAgICAgLy8gdmFsdWUgaW4gdGhlcmUuIElmIHdl
IGV2ZXIgZm9yZ2V0IHRvIHNldCB0aGUgdmFsdWUgdG8gYmUgYSByZWFsCkBAIC0xNjgsNiArMTIy
LDExIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgdm0ud2FzbUNvbnRleHQuc3RvcmUo
cHJldldhc21JbnN0YW5jZSwgdm0uc29mdFN0YWNrTGltaXQoKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAorICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMg
aXMgaW4gYSByZWdpc3RlciBvciBvbiB0aGUgc3RhY2sgc2luY2UgaXQncyBzdG9yZWQgaW4gVmVj
dG9yPEpTVmFsdWU+LgorICAgIC8vIFRoaXMgcHJvYmFibHkgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNz
YXJ5LCBzaW5jZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlvbiogc2hvdWxkIGtlZXAgdGhlIGluc3Rh
bmNlCisgICAgLy8gYWxpdmUuIEJ1dCBpdCdzIGdvb2QgaHlnaWVuZS4KKyAgICBpbnN0YW5jZS0+
dXNlKCk7CisKICAgICByZXR1cm4gcmF3UmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5k
ZXggZGI0MDkyYWQ2OTQ4MmY3YTA5ZDNiZTFmNzUyMzQyMmQ5ZDVhZjEzZC4uZjdiMDg3YmY1ODky
YmYyNmJmZTYzZTVlMzhjZmFkMjAyYmFiYTIxNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtMzcs
NiArMzcsNyBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxl
LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhZy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJX
ZWJBc3NlbWJseUZ1bmN0aW9uLmgiCkBAIC0xMzAsNiArMTMxLDcgQEAgdm9pZCBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZDo6bGlua0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqIGkKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOgogICAg
ICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xvYmFsOgogICAgICAgICBjYXNlIFdhc206
OkV4dGVybmFsS2luZDo6VGFibGU6CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpF
eGNlcHRpb246CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5h
bEtpbmQ6Ok1lbW9yeToKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzYzLDcgKzM2NSw3IEBA
IHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTT2JqZWN0KiBpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFdhc206
OkV4dGVybmFsS2luZDo6VGFibGU6IHsKLSAgICAgICAgICAgIC8vIDcuIE90aGVyd2lzZSAoaSBp
cyBhIHRhYmxlIGltcG9ydCk6CisgICAgICAgICAgICAvLyA3LiBJZiBpIGlzIGEgdGFibGUgaW1w
b3J0OgogICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGpzRHluYW1pY0Nh
c3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4odm0sIHZhbHVlKTsKICAgICAgICAgICAgIC8vIGkuIElm
IHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5
LkxpbmtFcnJvci4KICAgICAgICAgICAgIGlmICghdGFibGUpCkBAIC0zOTQsNiArMzk2LDIyIEBA
IHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTT2JqZWN0KiBpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsKKyAgICAgICAg
ICAgIEpTV2ViQXNzZW1ibHlUYWcqIHRhZyA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRh
Zyo+KHZtLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXRhZykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0
LCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiVGFnIGltcG9ydCIsICJpcyBub3QgYW4g
aW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFnIikpKTsKKworICAgICAgICAgICAgV2FzbTo6U2ln
bmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmlt
cG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXNbaW1wb3J0LmtpbmRJbmRleF07CisgICAgICAg
ICAgICBVTlVTRURfVkFSSUFCTEUoZXhwZWN0ZWRTaWduYXR1cmVJbmRleCk7CisKKyAgICAgICAg
ICAgIGlmIChleHBlY3RlZFNpZ25hdHVyZUluZGV4ICE9IHRhZy0+dGFnKCkuc2lnbmF0dXJlKCku
aW5kZXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0
LCAiaW1wb3J0ZWQgVGFnIiwgInNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBpbXBvcnRlZCBX
ZWJBc3NlbWJseSBUYWcncyBzaWduYXR1cmUiKSkpOworCisgICAgICAgICAgICBtX2luc3RhbmNl
LT5pbnN0YW5jZSgpLmFkZFRhZyh0YWctPnRhZygpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtNDIxLDYgKzQzOSw5IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQ6OmxpbmtJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
KiBpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBmb3IgKFdhc206OlNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4IDogbW9kdWxlSW5mb3JtYXRpb24uaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1
cmVJbmRpY2VzKQorICAgICAgICBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmFkZFRhZyhXYXNtOjpU
YWc6OmNyZWF0ZShXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4
KSkubGVha1JlZigpKTsKKwogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQgPSBjb2Rl
QmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKICAgICBhdXRvIG1ha2VGdW5jdGlvbldyYXBw
ZXIgPSBbJl0gKHVpbnQzMl90IGluZGV4KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgLy8gSWYgd2Ug
YWxyZWFkeSBtYWRlIGEgd3JhcHBlciwgZG8gbm90IG1ha2UgYSBuZXcgb25lLgpAQCAtNTU3LDYg
KzU3OCwxMCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1wbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogaQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6
OkV4Y2VwdGlvbjogeworICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTV2ViQXNzZW1ibHlU
YWc6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm1fd2ViQXNzZW1ibHlU
YWdTdHJ1Y3R1cmUuZ2V0KGdsb2JhbE9iamVjdCksIG1faW5zdGFuY2UtPmluc3RhbmNlKCkudGFn
KGV4cC5raW5kSW5kZXgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IH0KIAogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3Iu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjg2NWY4YzdiNmUxMzI2ZjdkZDdjY2Q1ZjA0N2MzOTNhZjY1N2M3MDUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVRhZ0NvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5o
IgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRh
Zy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6c19pbmZv
ID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IpIH07CisKK3N0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNhbGxKU1dlYkFzc2VtYmx5VGFnKTsKK3N0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWcpOworCitKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0SlNXZWJBc3NlbWJseVRhZywgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIAorICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJX
ZWJBc3NlbWJseS5UYWcgY29uc3RydWN0b3IgZXhwZWN0cyB0aGUgdGFnIHR5cGUgYXMgdGhlIGZp
cnN0IGFyZ3VtZW50LiJfcyk7CisKKyAgICBKU1ZhbHVlIHRhZ1R5cGVWYWx1ZSA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBzaWduYXR1cmVPYmplY3QgPSB0YWdUeXBlVmFs
dWUuZ2V0KGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcmFtZXRl
cnMiX3MpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYg
KCFzaWduYXR1cmVPYmplY3QuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LlRhZyBjb25zdHJ1Y3RvciBl
eHBlY3RzIGEgdGFnIHR5cGUgd2l0aCB0aGUgJ3BhcmFtZXRlcnMnIHByb3BlcnR5LiJfcyk7CisK
KyAgICBWZWN0b3I8V2FzbTo6VHlwZT4gcGFyYW1ldGVyczsKKyAgICBmb3JFYWNoSW5JdGVyYWJs
ZShnbG9iYWxPYmplY3QsIHNpZ25hdHVyZU9iamVjdCwgWyZdIChhdXRvJiB2bSwgYXV0byogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIG5leHRUeXBlKSAtPiB2b2lkIHsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIFdhc206OlR5cGUgdHlwZTsK
KyAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nID0gbmV4dFR5cGUudG9XVEZTdHJpbmcoZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAg
ICAgaWYgKHZhbHVlU3RyaW5nID09ICJpMzIiX3MpCisgICAgICAgICAgICB0eXBlID0gV2FzbTo6
VHlwZXM6OkkzMjsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVTdHJpbmcgPT0gImk2NCJfcykKKyAg
ICAgICAgICAgIHR5cGUgPSBXYXNtOjpUeXBlczo6STY0OworICAgICAgICBlbHNlIGlmICh2YWx1
ZVN0cmluZyA9PSAiZjMyIl9zKQorICAgICAgICAgICAgdHlwZSA9IFdhc206OlR5cGVzOjpGMzI7
CisgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09ICJmNjQiX3MpCisgICAgICAgICAgICB0
eXBlID0gV2FzbTo6VHlwZXM6OkY2NDsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVTdHJpbmcgPT0g
ImFueWZ1bmMiX3MpCisgICAgICAgICAgICB0eXBlID0gV2FzbTo6VHlwZXM6OkZ1bmNyZWY7Cisg
ICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09ICJleHRlcm5yZWYiX3MpCisgICAgICAgICAg
ICB0eXBlID0gV2FzbTo6VHlwZXM6OkV4dGVybnJlZjsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuVGFn
IGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlICdwYXJhbWV0ZXJzJyBmaWVsZCBvZiB0aGUgZmlyc3Qg
YXJndW1lbnQgdG8gYmUgYSBzZXF1ZW5jZSBvZiBXZWJBc3NlbWJseSB2YWx1ZSB0eXBlcy4iX3Mp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcGFyYW1ldGVycy5h
cHBlbmQodHlwZSk7CisgICAgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKworICAgIFJlZlB0cjxXYXNtOjpTaWduYXR1cmU+IHNpZ25hdHVyZSA9IFdhc206OlNpZ25h
dHVyZUluZm9ybWF0aW9uOjpzaWduYXR1cmVGb3IoeyB9LCBwYXJhbWV0ZXJzKTsKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUodm0sIHdlYkFzc2Vt
Ymx5VGFnU3RydWN0dXJlLCBhc09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgpKSwgY2FsbEZy
YW1lLT5qc0NhbGxlZSgpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShKU1dlYkFzc2VtYmx5VGFnOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCBXYXNtOjpUYWc6OmNyZWF0ZSgqc2lnbmF0dXJlKS5nZXQoKSkpKTsKK30KKworSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGNhbGxKU1dlYkFzc2VtYmx5VGFnLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVu
Y3Rpb25UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LlRhZyIpKTsK
K30KKworSlNXZWJBc3NlbWJseVRhZyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3JlYXRl
VGFnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBj
b25zdCBXYXNtOjpUYWcmIHRhZykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmpl
Y3QqIG5ld1RhcmdldCA9IGFzT2JqZWN0KGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCkpOworICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gSlNDX0dFVF9ERVJJVkVEX1NUUlVDVFVSRSh2bSwgd2ViQXNz
ZW1ibHlUYWdTdHJ1Y3R1cmUsIG5ld1RhcmdldCwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSwgdGFnKSk7Cit9CisKK1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IqIFdlYkFz
c2VtYmx5VGFnQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKK3sKKyAgICBhdXRvKiBj
b25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5VGFnQ29u
c3RydWN0b3I+KHZtLmhlYXApKSBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1
cmUpOworICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgdGhpc1Byb3RvdHlwZSk7
CisgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworfQorCitTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5VGFn
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEludGVybmFsRnVuY3Rp
b25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlU
YWdDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseVRhZ1Byb3Rv
dHlwZSogcHJvdG90eXBlKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCAxLCAiVGFn
Il9zLCBQcm9wZXJ0eUFkZGl0aW9uTW9kZTo6V2l0aG91dFN0cnVjdHVyZVRyYW5zaXRpb24pOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUsIHByb3RvdHlwZSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworfQor
CitXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yOjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNh
bGxKU1dlYkFzc2VtYmx5VGFnLCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFnKQoreworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25z
dHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdD
b25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxZTJmMWQ4MDZlOTAyMWVkODU3NWZhYzViMzgxNmMx
Mzk5YTMxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2lu
Y2x1ZGUgIldhc21PcHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1i
bHlUYWc7CitjbGFzcyBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTsKKworbmFtZXNwYWNlIFdhc20g
eworY2xhc3MgVGFnOworfQorCitjbGFzcyBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yIGZpbmFs
IDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVkZWYgSW50ZXJu
YWxGdW5jdGlvbiBCYXNlOworCisgICAgc3RhdGljIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3Iq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlKik7CisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKTsKKworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5VGFnKiBjcmVhdGVUYWcoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqLCBjb25zdCBXYXNtOjpUYWcmKTsKKworICAgIERFQ0xBUkVf
SU5GTzsKKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKFZNJiwgU3Ry
dWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5VGFnUHJv
dG90eXBlKik7Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNz
ZW1ibHlUYWdDb25zdHJ1Y3RvciwgSW50ZXJuYWxGdW5jdGlvbik7CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ5M2Q0MTdjMThhYzg0YTcyOTRkMmU5MTQyYTU0MzMxZjI2MzA0MDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRh
Z1Byb3RvdHlwZS5jcHAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2Vt
Ymx5VGFnUHJvdG9GdW5jVHlwZSk7Cit9CisKKyNpbmNsdWRlICJXZWJBc3NlbWJseVRhZ1Byb3Rv
dHlwZS5sdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3Nl
bWJseVRhZ1Byb3RvdHlwZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFnIiwgJkJhc2U6OnNf
aW5mbywgJnByb3RvdHlwZVRhYmxlV2ViQXNzZW1ibHlUYWcsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUpIH07CisKKy8qIFNvdXJjZSBmb3IgV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGUubHV0LmgKKyBAYmVnaW4gcHJvdG90eXBlVGFibGVXZWJBc3Nl
bWJseVRhZworIHR5cGUgICB3ZWJBc3NlbWJseVRhZ1Byb3RvRnVuY1R5cGUgICBGdW5jdGlvbiAw
CisgQGVuZAorICovCisKKworV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqIFdlYkFzc2VtYmx5VGFn
UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQoreworICAgIGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlUYWdQcm90b3R5
cGUodm0sIHN0cnVjdHVyZSk7CisgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAg
cmV0dXJuIG9iamVjdDsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9U
UkFOU0lUSU9OKCk7Cit9CisKK1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlOjpXZWJBc3NlbWJseVRh
Z1Byb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlKQoreworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1dlYkFzc2VtYmx5VGFn
KiBnZXRUYWcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlz
Q2VsbCgpKSkgeworICAgICAgICB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3Jl
YXRlTm90QW5PYmplY3RFcnJvcihnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSkpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgYXV0byogdGFnID0ganNEeW5hbWljQ2FzdDxKU1dl
YkFzc2VtYmx5VGFnKj4odm0sIHRoaXNWYWx1ZS5hc0NlbGwoKSk7CisgICAgaWYgKExJS0VMWSh0
YWcpKQorICAgICAgICByZXR1cm4gdGFnOworICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWcgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tVGFnIG9i
amVjdCJfcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTih3ZWJBc3NlbWJseVRhZ1Byb3RvRnVuY1R5cGUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgSlNXZWJBc3NlbWJseVRhZyoganNUYWcgPSBnZXRUYWcoZ2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworCisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcgPSBqc1Rh
Zy0+dGFnKCk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdGFnLnBhcmFtZXRlckNvdW50KCk7ICsraSkKKyAgICAgICAgYXJn
TGlzdC5hcHBlbmQoV2FzbTo6dHlwZVRvU3RyaW5nKHZtLCB0YWcucGFyYW1ldGVyKGkpLmtpbmQp
KTsKKworICAgIGlmIChVTkxJS0VMWShhcmdMaXN0Lmhhc092ZXJmbG93ZWQoKSkpIHsKKyAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAg
ICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAgIEpTQXJyYXkqIHBhcmFt
ZXRlcnMgPSBjb25zdHJ1Y3RBcnJheShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEFycmF5QWxs
b2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgYXJnTGlzdCk7CisgICAgSlNPYmplY3QqIHR5cGUg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0
UHJvdG90eXBlKCksIDEpOworICAgIHR5cGUtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInBhcmFtZXRlcnMiKSwgcGFyYW1ldGVycyk7CisKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodHlwZSkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmYyNDMyZjljODliZGNkYTdkYzdiOTQxODQ3NjJiMjUyNmI1OWJiNmMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVRhZ1Byb3RvdHlwZS5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hB
UkFCTEUoV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2U7CisgICAgfQorCisgICAgc3RhdGljIFdlYkFzc2VtYmx5VGFnUHJv
dG90eXBlKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgV2ViQXNzZW1ibHlU
YWdQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20uanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20uanNvbgppbmRleCA0ZjhkZDllM2QyMTM0
MzUwMDAwMDZlMjQxNDZiMDE5NGM5YWM4OGYxLi5hNDM1MTBmNGY4NDczMDM4NjQzYzE2NWMzYzMw
ODE0OGYwNzUwNGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNt
Lmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCkBAIC0yMywz
NCArMjMsMzggQEAKICAgICAiYmxvY2tfdHlwZSI6IFsiaTMyIiwgImk2NCIsICJmMzIiLCAiZjY0
IiwgInZvaWQiLCAiZXh0ZXJucmVmIiwgImZ1bmNyZWYiXSwKICAgICAicmVmX3R5cGUiOiBbImZ1
bmNyZWYiLCAiZXh0ZXJucmVmIiwgInR5cGVfaWR4Il0sCiAgICAgImV4dGVybmFsX2tpbmQiOiB7
Ci0gICAgICAgICJGdW5jdGlvbiI6IHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAwIH0sCi0g
ICAgICAgICJUYWJsZSI6ICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAxIH0sCi0gICAg
ICAgICJNZW1vcnkiOiAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAyIH0sCi0gICAgICAg
ICJHbG9iYWwiOiAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAzIH0KKyAgICAgICAgIkZ1
bmN0aW9uIjogICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDAgfSwKKyAgICAgICAgIlRh
YmxlIjogICAgICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDEgfSwKKyAgICAgICAgIk1l
bW9yeSI6ICAgICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDIgfSwKKyAgICAgICAgIkds
b2JhbCI6ICAgICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDMgfSwKKyAgICAgICAgIkV4
Y2VwdGlvbiI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDQgfQogICAgIH0sCiAgICAg
InNlY3Rpb24iIDogewotICAgICAgICAiVHlwZSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3Iiwg
InZhbHVlIjogIDEsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBzaWduYXR1cmUgZGVjbGFyYXRp
b25zIiB9LAotICAgICAgICAiSW1wb3J0IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogIDIsICJkZXNjcmlwdGlvbiI6ICJJbXBvcnQgZGVjbGFyYXRpb25zIiB9LAotICAgICAgICAi
RnVuY3Rpb24iOiB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDMsICJkZXNjcmlwdGlv
biI6ICJGdW5jdGlvbiBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJUYWJsZSI6ICAgIHsgInR5
cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNCwgImRlc2NyaXB0aW9uIjogIkluZGlyZWN0IGZ1
bmN0aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMiIH0sCi0gICAgICAgICJNZW1vcnkiOiAgIHsg
InR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNSwgImRlc2NyaXB0aW9uIjogIk1lbW9yeSBh
dHRyaWJ1dGVzIiB9LAotICAgICAgICAiR2xvYmFsIjogICB7ICJ0eXBlIjogInZhcnVpbnQ3Iiwg
InZhbHVlIjogIDYsICJkZXNjcmlwdGlvbiI6ICJHbG9iYWwgZGVjbGFyYXRpb25zIiB9LAotICAg
ICAgICAiRXhwb3J0IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDcsICJkZXNj
cmlwdGlvbiI6ICJFeHBvcnRzIiB9LAotICAgICAgICAiU3RhcnQiOiAgICB7ICJ0eXBlIjogInZh
cnVpbnQ3IiwgInZhbHVlIjogIDgsICJkZXNjcmlwdGlvbiI6ICJTdGFydCBmdW5jdGlvbiBkZWNs
YXJhdGlvbiIgfSwKLSAgICAgICAgIkVsZW1lbnQiOiAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2
YWx1ZSI6ICA5LCAiZGVzY3JpcHRpb24iOiAiRWxlbWVudHMgc2VjdGlvbiIgfSwKLSAgICAgICAg
IkNvZGUiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEwLCAiZGVzY3JpcHRp
b24iOiAiRnVuY3Rpb24gYm9kaWVzIChjb2RlKSIgfSwKLSAgICAgICAgIkRhdGEiOiAgICAgeyAi
dHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDExLCAiZGVzY3JpcHRpb24iOiAiRGF0YSBzZWdt
ZW50cyIgfQorICAgICAgICAiVHlwZSI6ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1
ZSI6ICAxLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0aW9ucyIg
fSwKKyAgICAgICAgIkltcG9ydCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAg
MiwgImRlc2NyaXB0aW9uIjogIkltcG9ydCBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJGdW5j
dGlvbiI6ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDMsICJkZXNjcmlwdGlvbiI6
ICJGdW5jdGlvbiBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJUYWJsZSI6ICAgICB7ICJ0eXBl
IjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDQsICJkZXNjcmlwdGlvbiI6ICJJbmRpcmVjdCBmdW5j
dGlvbiB0YWJsZSBhbmQgb3RoZXIgdGFibGVzIiB9LAorICAgICAgICAiTWVtb3J5IjogICAgeyAi
dHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA1LCAiZGVzY3JpcHRpb24iOiAiTWVtb3J5IGF0
dHJpYnV0ZXMiIH0sCisgICAgICAgICJHbG9iYWwiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3Iiwg
InZhbHVlIjogIDYsICJkZXNjcmlwdGlvbiI6ICJHbG9iYWwgZGVjbGFyYXRpb25zIiB9LAorICAg
ICAgICAiRXhwb3J0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA3LCAiZGVz
Y3JpcHRpb24iOiAiRXhwb3J0cyIgfSwKKyAgICAgICAgIlN0YXJ0IjogICAgIHsgInR5cGUiOiAi
dmFydWludDciLCAidmFsdWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IGZ1bmN0aW9uIGRl
Y2xhcmF0aW9uIiB9LAorICAgICAgICAiRWxlbWVudCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIs
ICJ2YWx1ZSI6ICA5LCAiZGVzY3JpcHRpb24iOiAiRWxlbWVudHMgc2VjdGlvbiIgfSwKKyAgICAg
ICAgIkNvZGUiOiAgICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMCwgImRlc2Ny
aXB0aW9uIjogIkZ1bmN0aW9uIGJvZGllcyAoY29kZSkiIH0sCisgICAgICAgICJEYXRhIjogICAg
ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlwdGlvbiI6ICJEYXRh
IHNlZ21lbnRzIiB9LAorICAgICAgICAiRGF0YUNvdW50IjogeyAidHlwZSI6ICJ2YXJ1aW50NyIs
ICJ2YWx1ZSI6IDEyLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIGRhdGEgc2VnbWVudHMiIH0s
CisgICAgICAgICJFeGNlcHRpb24iOiB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTMs
ICJkZXNjcmlwdGlvbiI6ICJFeGNlcHRpb24gZGVjbGFyYXRpb25zIiB9CiAgICAgfSwKICAgICAi
b3Bjb2RlIjogewogICAgICAgICAidW5yZWFjaGFibGUiOiAgICAgICAgIHsgImNhdGVnb3J5Ijog
ImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDAsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogInRyYXAgaW1tZWRpYXRlbHkiIH0sCisgICAgICAgICJub3AiOiAgICAgICAg
ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMSwgInJldHVy
biI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibm8gb3BlcmF0aW9uIiB9LAogICAg
ICAgICAiYmxvY2siOiAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAi
dmFsdWUiOiAgIDIsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAg
InBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6
IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJl
Z2luIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnMsIHlpZWxkaW5nIDAgb3IgMSB2YWx1ZXMiIH0s
CiAgICAgICAgICJsb29wIjogICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIs
ICAgICJ2YWx1ZSI6ICAgMywgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAg
ICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRp
YXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiYmVnaW4gYSBibG9jayB3aGljaCBjYW4gYWxzbyBmb3JtIGNvbnRyb2wgZmxvdyBsb29wcyIg
fSwKICAgICAgICAgImlmIjogICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9s
IiwgICAgInZhbHVlIjogICA0LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAg
ICAgICAgICJwYXJhbWV0ZXIiOiBbImJvb2wiXSwgICAgICAgICAgICAgICAgICAgICAgICJpbW1l
ZGlhdGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJiZWdpbiBpZiBleHByZXNzaW9uIiB9LAogICAgICAgICAiZWxzZSI6ICAgICAgICAgICAg
ICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDUsICJyZXR1cm4iOiBb
ImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGVsc2UgZXhwcmVzc2lvbiBvZiBp
ZiIgfSwKLSAgICAgICAgInNlbGVjdCI6ICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250
cm9sIiwgICAgInZhbHVlIjogIDI3LCAicmV0dXJuIjogWyJwcmV2Il0sICAgICAgICAgICAgICAg
ICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wiXSwgICAgICAgICJp
bW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJzZWxlY3Qgb25lIG9mIHR3byB2YWx1ZXMgYmFzZWQgb24gY29uZGl0aW9uIiB9LAot
ICAgICAgICAiYW5ub3RhdGVkX3NlbGVjdCI6ICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAg
ICAidmFsdWUiOiAgMjgsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAgImltbWVkaWF0
ZSI6IFt7Im5hbWUiOiAidGFyZ2V0X3R5cGVzX2NvdW50IiwgInR5cGUiOiAidmFydWludDMyIiwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
Im51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YXJnZXQgdHlwZXMgdmVjdG9yIn0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsi
bmFtZSI6ICJ0YXJnZXRfdHlwZXMiLCAgICAgICAidHlwZSI6ICJ2YWx1ZV90eXBlKiIsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGFyZ2V0
IHR5cGVzIHRoYXQgaW5kaWNhdGUgcmVzdWx0IG9mIHNlbGVjdCBpbnN0cnVjdGlvbiJ9XSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0
aGUgc2FtZSBhcyBqdXN0IHNlbGVjdCBidXQgd2l0aCB0aGUgYW5ub3RhdGlvbiBmb3IgcmVzdWx0
IHR5cGVzIiB9LAorICAgICAgICAidHJ5IjogICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5Ijog
ImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDYsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAg
ICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogImJlZ2luIHRyeSBleHByZXNzaW9uIiB9LAorICAgICAgICAiY2F0Y2giOiAg
ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDcsICJy
ZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZXhu
IiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGNhdGNoIGV4cHJl
c3Npb24gb2YgdHJ5IiB9LAorICAgICAgICAidGhyb3ciOiAgICAgICAgICAgICAgIHsgImNhdGVn
b3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDgsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwg
ICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZXhuIiwgInR5cGUiOiAidmFydWludDMy
In1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogInRocm93IGV4Y2VwdGlvbiIgfSwKKyAgICAgICAgInJldGhyb3ci
OiAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA5LCAi
cmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJl
bGF0aXZlX2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJyZXRocm93IHRoZSBleGNl
cHRpb24gYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2siIH0sCiAgICAgICAgICJiciI6ICAgICAgICAg
ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMiwgInJldHVy
biI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2
ZV9kZXB0aCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYnJlYWsgdGhhdCB0YXJnZXRzIGFu
IG91dGVyIG5lc3RlZCBibG9jayIgfSwKICAgICAgICAgImJyX2lmIjogICAgICAgICAgICAgICB7
ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDEzLCAicmV0dXJuIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2RlcHRoIiwg
InR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJjb25kaXRpb25hbCBicmVhayB0aGF0IHRhcmdldHMg
YW4gb3V0ZXIgbmVzdGVkIGJsb2NrIiB9LAogICAgICAgICAiYnJfdGFibGUiOiAgICAgICAgICAg
IHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTQsICJyZXR1cm4iOiBbXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidGFyZ2V0X2NvdW50Iiwg
ICAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIm51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YXJn
ZXRfdGFibGUifSwKQEAgLTU4LDggKzYyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsibmFtZSI6ICJkZWZhdWx0X3Rh
cmdldCIsICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYW4gb3V0ZXIgYmxvY2sgb3IgbG9vcCB0
byB3aGljaCB0byBicmVhayBpbiB0aGUgZGVmYXVsdCBjYXNlIn1dLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJyYW5jaCB0YWJsZSBj
b250cm9sIGZsb3cgY29uc3RydWN0IiB9LAogICAgICAgICAicmV0dXJuIjogICAgICAgICAgICAg
IHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTUsICJyZXR1cm4iOiBbXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInJldHVybiB6ZXJvIG9yIG9uZSB2YWx1ZSBmcm9t
IHRoaXMgZnVuY3Rpb24iIH0sCisgICAgICAgICJkZWxlZ2F0ZSI6ICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNCwgInJldHVybiI6IFsiY29udHJvbCJd
LCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2ZV9kZXB0aCIsICJ0eXBl
IjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiZGVsZWdhdGUgdG8gYSBwYXJlbnQgdHJ5IGJsb2NrIiB9LAor
ICAgICAgICAiY2F0Y2hfYWxsIjogICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAg
ICAidmFsdWUiOiAgMjUsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAg
ICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0
ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
ImNhdGNoIGV4Y2VwdGlvbnMgcmVnYXJkbGVzcyBvZiB0YWciIH0sCiAgICAgICAgICJkcm9wIjog
ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNiwg
InJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjog
WyJhbnkiXSwgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiaWdub3JlIHZhbHVlIiB9
LAotICAgICAgICAibm9wIjogICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wi
LCAgICAidmFsdWUiOiAgIDEsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIm5vIG9wZXJhdGlvbiIgfSwKKyAgICAgICAgInNlbGVjdCI6ICAgICAgICAgICAgICB7ICJj
YXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI3LCAicmV0dXJuIjogWyJwcmV2Il0s
ICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJv
b2wiXSwgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJzZWxlY3Qgb25lIG9mIHR3byB2YWx1ZXMgYmFzZWQgb24g
Y29uZGl0aW9uIiB9LAorICAgICAgICAiYW5ub3RhdGVkX3NlbGVjdCI6ICAgIHsgImNhdGVnb3J5
IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjgsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAg
ICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidGFyZ2V0X3R5cGVzX2NvdW50IiwgInR5cGUi
OiAidmFydWludDMyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIm51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YXJnZXQgdHlwZXMgdmVj
dG9yIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsibmFtZSI6ICJ0YXJnZXRfdHlwZXMiLCAgICAgICAidHlwZSI6ICJ2YWx1
ZV90eXBlKiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAidGFyZ2V0IHR5cGVzIHRoYXQgaW5kaWNhdGUgcmVzdWx0IG9mIHNlbGVjdCBpbnN0
cnVjdGlvbiJ9XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJ0aGUgc2FtZSBhcyBqdXN0IHNlbGVjdCBidXQgd2l0aCB0aGUgYW5ub3Rh
dGlvbiBmb3IgcmVzdWx0IHR5cGVzIiB9LAogICAgICAgICAiZW5kIjogICAgICAgICAgICAgICAg
IHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTEsICJyZXR1cm4iOiBbXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImVuZCBhIGJsb2NrLCBsb29wLCBvciBpZiIgfSwK
ICAgICAgICAgImkzMi5jb25zdCI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJzcGVjaWFsIiwg
ICAgInZhbHVlIjogIDY1LCAicmV0dXJuIjogWyJpMzIiXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlh
dGUiOiBbeyJuYW1lIjogInZhbHVlIiwgICAgICAgICAgInR5cGUiOiAidmFyaW50MzIifV0sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJhIGNvbnN0YW50IHZhbHVlIGludGVycHJldGVkIGFzIGkzMiIgfSwKICAgICAgICAgImk2NC5j
b25zdCI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJzcGVjaWFsIiwgICAgInZhbHVlIjogIDY2
LCAicmV0dXJuIjogWyJpNjQiXSwgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIi
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjog
InZhbHVlIiwgICAgICAgICAgInR5cGUiOiAidmFyaW50NjQifV0sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhIGNvbnN0YW50IHZh
bHVlIGludGVycHJldGVkIGFzIGk2NCIgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0MWYwZGFlMDRkYmMyMTIzMGJkODJhMzE3OTQxZDA0ODgx
MDEyOWRmLi43NDNhOGZkNmY5Y2QwNjM1Nzk3M2MzNzYxY2JlM2FjNzc5MjA2MTNlIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMjEtMTAtMDUgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgSW1wbGVtZW50IHRoZSBXZWJBc3NlbWJseSBleGNlcHRpb24gaGFuZGxpbmcgcHJvcG9z
YWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTY4
MQorICAgICAgICA8cmRhcjovLzgxNjAzMzg3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwog
MjAyMS0xMC0wNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEFkZCBhbiBlbnRpdGxlbWVudCBjaGVjayB0byBvbmx5IGFsbG93IEFkQXR0cmli
dXRpb25EYWVtb24gdG8gYmUgY29ubmVjdGVkIHRvIGJ5IHRoZSBuZXR3b3JrIHByb2Nlc3MKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9TY3Jp
cHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IGUwODE2ZGMwNTYxYjE4MGE5ZWZiNjY3OGRi
ODJjYzY0NmUxOWI0ODEuLmRkZjk0N2RlYjc3MjM4MmIyODk2MDk3ZGE2NGMxM2I4MGNhMmFmMTgg
MTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIvVG9v
bHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtMTIyNywxNiArMTIyNywyMSBAQCBk
ZWYgcnVuV2ViQXNzZW1ibHlTdWl0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogICAg
IG1vZHVsZXMgPSBEaXJbV0FTTVRFU1RTX1BBVEggKyAiKi5qcyJdLm1hcCB7IHxmfCBGaWxlLmJh
c2VuYW1lKGYpIH0KICAgICBwcmVwYXJlRXh0cmFBYnNvbHV0ZUZpbGVzKFdBU01URVNUU19QQVRI
LCBbIndhc20uanNvbiJdKQogICAgIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXMobW9kdWxlcy5t
YXAgeyB8ZnwgIi4uLyIgKyBmIH0sICRjb2xsZWN0aW9uKQotICAgIHJ1bigiZGVmYXVsdC13YXNt
IiwgIi1tIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisg
ICAgaWYgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zWzBdID09IDpub19tb2R1bGUKKyAgICAg
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucy5zaGlmdAorICAgIGVsc2UKKyAgICAgIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucy51bnNoaWZ0ICItbSIKKyAgICBlbmQKKyAgICBydW4oImRl
ZmF1bHQtd2FzbSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
KQogICAgIGlmICRtb2RlICE9ICJxdWljayIKLSAgICAgICAgcnVuKCJ3YXNtLW5vLWNqaXQteWVz
LXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAq
KEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyIiwgIi1tIiwgKihGVExfT1BUSU9OUyArIEVB
R0VSX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4o
Indhc20tZWFnZXItamV0dGlzb24iLCAiLW0iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25E
dWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2Nh
dGlvbj10cnVlIiwgIi0tdmVyaWZ5R0M9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tbm8tdGxzLWNvbnRleHQiLCAi
LW0iLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLXNsb3ctbWVt
b3J5IiwgIi1tIiwgIi0tdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNlIiwgKihGVExfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigid2FzbS1i
MyIsICItbSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNl
IiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAg
IHJ1bigid2FzbS1haXIiLCAiLW0iLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5k
b21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLWNvbGxlY3Qt
Y29udGludW91c2x5IiwgIi1tIiwgIi0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIiwgIi0tdmVy
aWZ5R0M9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
KSBpZiBzaG91bGRDb2xsZWN0Q29udGludW91c2x5PworICAgICAgICBydW4oIndhc20tbm8tY2pp
dC15ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICoo
RlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
bnMpKQorICAgICAgICBydW4oIndhc20tZWFnZXIiLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1l
YWdlci1qZXR0aXNvbiIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRy
dWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAi
LS12ZXJpZnlHQz10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1uby10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNG
b3JXYXNtQ29udGV4dD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAiLS11c2VXZWJBc3Nl
bWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lm
aWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWIzIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNl
IiwgIi0td2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWFpciIsICItLXVzZVdhc21MTElu
dD1mYWxzZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1
ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAg
ICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5
PXRydWUiLCAiLS12ZXJpZnlHQz10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucykpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5kCiBl
bmQKIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwpp
bmRleCA0NjcyMzIzZDQ4NWIzMGI5Y2JjNDU4YTRlN2M1MmRlODZmNzllYjU4Li4zNjU1NDU2Yzhi
ZDFiZDc1YjI4NTBlNzlhNTZiMGQ3Y2UyYzc0YjhkIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5n
ZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzNiBAQAorMjAyMS0xMC0w
NSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1l
bnQgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlvbiBoYW5kbGluZyBwcm9wb3NhbAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5NjgxCisgICAgICAgIDxy
ZGFyOi8vODE2MDMzODc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIG5ldyB0ZXN0cyBmb3IgdGhlIGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQgaW1w
b3J0IGEgc2V0IG9mIHRlc3RzIHVzZWQgYnkgVjggaW50byB3YXNtL3Y4LgorCisgICAgICAgICog
d2FzbS55YW1sOgorICAgICAgICAqIHdhc20vQnVpbGRlci5qczoKKyAgICAgICAgKGNvbnN0Ll9p
bXBvcnRFeGNlcHRpb25Db250aW51YXRpb24udHlwZS5JbXBvcnQuZmllbGQpOgorICAgICAgICAo
ZXhwb3J0LmRlZmF1bHQuQnVpbGRlci5wcm90b3R5cGUuX3JlZ2lzdGVyU2VjdGlvbkJ1aWxkZXJz
LmNvbnN0LnNlY3Rpb24uaW4uV0FTTS5kZXNjcmlwdGlvbi5zZWN0aW9uLnN3aXRjaC5zZWN0aW9u
LmNhc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUudGhpcy5zZWN0aW9uKToKKyAgICAgICAgKGNvbnN0
Ll9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbi50eXBlLkV4cG9ydC5maWVsZCk6IERlbGV0ZWQu
CisgICAgICAgIChjb25zdC5fZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAqIHdhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qczoKKyAgICAgICAgKGNv
bnN0LmVtaXR0ZXJzLkltcG9ydCk6CisgICAgICAgIChjb25zdC5lbWl0dGVycy5FeHBvcnQpOgor
ICAgICAgICAoY29uc3QuZW1pdHRlcnMuRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL2Fzc2Vy
dC5qczoKKyAgICAgICAgKiB3YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzOgorICAg
ICAgICAoSW1wb3J0QmVmb3JlVHlwZVNlY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNt
L3N0cmVzcy9jYXRjaC13aXRoLWRlbGVnYXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5C
dWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0
cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKGFzc2VydC50aHJvd3MpOgor
ICAgICAgICAqIHdhc20vc3RyZXNzL2NyZWF0ZS10YWctZnJvbS5qczogQWRkZWQuCisgICAgICAg
ICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLTIuanM6IEFkZGVkLgorICAg
ICAgICAodGVzdCk6CisgICAgICAgIChhc3NlcnQuZXEpOgorICAgICAgICAqIHdhc20vc3RyZXNz
L2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0zLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgor
ICAgICAgICAoYXNzZXJ0LmVxKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jv
c3MtaW5zdGFuY2UuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgIChhc3NlcnQu
dGhyb3dzKToKKyAgICAgICAgKGluc3RCLm5ldy5XZWJBc3NlbWJseS5JbnN0YW5jZSk6CisgICAg
ICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWxpdmVuZXNzLXRpZXItdXAuanM6IEFkZGVkLgor
ICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQu
YXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2F0Y2gpOgorICAgICAgICAoYXNz
ZXJ0LmVxLik6CisgICAgICAgIChhc3NlcnQuZXEpOgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4
Y2VwdGlvbi1tdWx0aXBsZS1pbnN0YW5jZXMuanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1
aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3Ry
aW5nX2FwcGVhcmVkX2hlcmUuY29uc3QubW9kdWxlLm5ldy5XZWJBc3NlbWJseS5Nb2R1bGUpOgor
ICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQu
YXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW5zdC5leHBvcnRzLnRocm93KToK
KyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLWRlbGVnYXRlLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1w
b3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLnRlc3RTaW1wbGVUaHJvd0Rl
bGVnYXRlKToKKyAgICAgICAgKHRlc3RUaHJvd0RlbGVnYXRlU2tpcCk6CisgICAgICAgICh0ZXN0
RGVsZWdhdGVDYWxsZXIpOgorICAgICAgICAodGVzdFNpbXBsZURlbGVnYXRlTWVyZ2UpOgorICAg
ICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtdGhyb3ctY2F0Y2guanM6IEFkZGVk
LgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBv
cnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUudGVzdFNpbXBsZVRyeUNhdGNo
KToKKyAgICAgICAgKHRlc3RTaW1wbGVUcnlDYXRjaEFsbCk6CisgICAgICAgICh0ZXN0Q2FsbFRy
eUNhdGNoKToKKyAgICAgICAgKHRlc3RDYWxsVHJ5Q2F0Y2hBbGwpOgorICAgICAgICAodGVzdFNp
bXBsZVRyeUNhdGNoVmFsdWUpOgorICAgICAgICAodGVzdENhbGxUcnlDYXRjaFZhbHVlKToKKyAg
ICAgICAgKHRlc3RTdGFja1RyeUNhdGNoKToKKyAgICAgICAgKHRlc3RMaXZlQWZ0ZXJUcnlDYXRj
aCk6CisgICAgICAgICh0ZXN0TGl2ZUFmdGVyVHJ5Q2F0Y2hBbGwpOgorICAgICAgICAodGVzdFVu
aWZ5VHJ5Q2F0Y2hDYXRjaCk6CisgICAgICAgICh0ZXN0VW5pZnlUcnlDYXRjaENhdGNoQWxsKToK
KyAgICAgICAgKHRlc3RVbmlmeVRyeU5vVGhyb3cpOgorICAgICAgICAodGVzdFVuaWZ5VHJ5Tm9D
YXRjaCk6CisgICAgICAgICh0ZXN0TmVzdGVkQ2F0Y2gpOgorICAgICAgICAqIHdhc20vc3RyZXNz
L2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLWNhdGNoYWxsLXJldGhyb3cuanM6IEFk
ZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5p
bXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2FsbGJhY2spOgorICAg
ICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLWNhdGNo
YWxsLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVh
cmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxi
YWNrKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8t
d2FzbS5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBl
YXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5jYWxs
YmFjayk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdXQtb2Ytd2Fz
bS5qczogQWRkZWQuCisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdmVy
LXdhc20uanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBw
ZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2Fs
bGJhY2spOgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi10cmFwLmpzOiBBZGRlZC4K
KyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0
LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLnRlc3RDYW5ub3RDYXRjaFVucmVh
Y2hhYmxlKToKKyAgICAgICAgKHRlc3RDYW5ub3RDYXRjaE9PQik6CisgICAgICAgICh0ZXN0V2Fz
bUFQSVRocm93KToKKyAgICAgICAgKHRlc3RKU0NhdGNoQW5kUmV0aHJvdyk6CisgICAgICAgICog
d2FzbS9zdHJlc3MvcmV0aHJvdy1mcm9tLWNhdGNoLXRvLWNhdGNoLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFz
c2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKiB3YXNt
L3N0cmVzcy9yZXRocm93LXRvLWNhdGNoLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWls
ZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmlu
Z19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKGFzc2VydC50aHJvd3MuY2FsbGJh
Y2spOgorICAgICAgICAoYXNzZXJ0LnRocm93cyk6CisgICAgICAgICogd2FzbS9zdHJlc3MvcmV0
aHJvdy10by1kZWxlZ2F0ZS10by1jYXRjaC5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVp
bGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJp
bmdfYXBwZWFyZWRfaGVyZSk6CisgICAgICAgIChhc3NlcnQuZXEuZXhuLmdldEFyZyk6CisgICAg
ICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAgICAgKGFzc2VydC50aHJvd3MuY2FsbGJhY2spOgor
ICAgICAgICAoYXNzZXJ0LmVxKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9zaW1wbGUtZXhwb3J0
LWV4Y2VwdGlvbi5qczogQWRkZWQuCisgICAgICAgICogd2FzbS92OC9MSUNFTlNFOiBBZGRlZC4K
KyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMtYXBpLmpzOiBBZGRlZC4KKyAgICAgICAgKFRl
c3RJbXBvcnQpOgorICAgICAgICAoVGVzdEltcG9ydEV4cG9ydCk6CisgICAgICAgIChUZXN0RXhj
ZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yV2l0
aFBheWxvYWQpOgorICAgICAgICAoVGVzdENhdGNoSlNFeGNlcHRpb24uanNfZnVuYyk6CisgICAg
ICAgIChqc19mdW5jKToKKyAgICAgICAgKFRlc3RDYXRjaEpTKToKKyAgICAgICAgKFRlc3RDYXRj
aEpTRXhjZXB0aW9uV2l0aFBheWxvYWQpOgorICAgICAgICAoVGVzdEdldEFyZyk6CisgICAgICAg
ICogd2FzbS92OC9leGNlcHRpb25zLWV4cG9ydC5qczogQWRkZWQuCisgICAgICAgIChUZXN0RXhw
b3J0TXVsdGlwbGUpOgorICAgICAgICAoVGVzdEV4cG9ydE91dE9mQm91bmRzKToKKyAgICAgICAg
KiB3YXNtL3Y4L2V4Y2VwdGlvbnMtZXh0ZXJucmVmLmpzOiBBZGRlZC4KKyAgICAgICAgKFRlc3RU
aHJvd1JlZk51bGwpOgorICAgICAgICAoVGVzdFRocm93UmVmUGFyYW0pOgorICAgICAgICAqIHdh
c20vdjgvZXhjZXB0aW9ucy1pbXBvcnQuanM6IEFkZGVkLgorICAgICAgICAoTmV3RXhwb3J0ZWRU
YWcpOgorICAgICAgICAoVGVzdEltcG9ydFNpbXBsZSk6CisgICAgICAgIChUZXN0SW1wb3J0TWlz
c2luZyk6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLXJldGhyb3cuanM6IEFkZGVkLgor
ICAgICAgICAoVGVzdFJldGhyb3dJbkNhdGNoKToKKyAgICAgICAgKFRlc3RSZXRocm93SW5DYXRj
aEFsbCk6CisgICAgICAgIChUZXN0UmV0aHJvd05lc3RlZCk6CisgICAgICAgIChUZXN0UmV0aHJv
d1JlY2F0Y2gpOgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy1zaGFyZWQuanM6IEFkZGVk
LgorICAgICAgICAoTmV3RXhwb3J0ZWRFeGNlcHRpb24pOgorICAgICAgICAoVGVzdFNpbmdsZUlu
c3RhbmNlLmxldC5pbnN0YW5jZS5idWlsZGVyLmluc3RhbnRpYXRlLik6CisgICAgICAgIChUZXN0
U2luZ2xlSW5zdGFuY2UpOgorICAgICAgICAoVGVzdE11bHRpSW5zdGFuY2VOb25TaGFyZWQubGV0
Lmluc3RhbmNlMi5idWlsZGVyLmluc3RhbnRpYXRlLik6CisgICAgICAgIChUZXN0TXVsdGlJbnN0
YW5jZVNoYXJlZC5sZXQuaW5zdGFuY2UyLmJ1aWxkZXIuaW5zdGFudGlhdGUuKToKKyAgICAgICAg
KFRlc3RNdWx0aU1vZHVsZVNoYXJlZC5sZXQuaW5zdGFuY2UyLmJ1aWxkZXIyLmluc3RhbnRpYXRl
Lik6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLXR5cGUtcmVmbGVjdGlvbi5qczogQWRk
ZWQuCisgICAgICAgIChUZXN0RXhwb3J0KToKKyAgICAgICAgKFRlc3RJbXBvcnRFeHBvcnQpOgor
ICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy11dGlscy5qczogQWRkZWQuCisgICAgICAgIChh
c3NlcnRXYXNtVGhyb3dzKToKKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMuanM6IEFkZGVk
LgorICAgICAgICAoVGVzdFRocm93U2ltcGxlKToKKyAgICAgICAgKFRlc3RDYXRjaFNpbXBsZSk6
CisgICAgICAgIChUZXN0VHJhcE5vdENhdWdodCk6CisgICAgICAgIChUZXN0VHJhcFZpYUpTTm90
Q2F1Z2h0LmpzX2ltcG9ydCk6CisgICAgICAgIChUZXN0TWFudWFsbHlUaHJvd25SdW50aW1lRXJy
b3JDYXVnaHQudGhyb3dfZXhjKToKKyAgICAgICAgKFRlc3RNYW51YWxseVRocm93blJ1bnRpbWVF
cnJvckNhdWdodCk6CisgICAgICAgIChUZXN0RXhuV2l0aFdhc21Qcm90b05vdENhdWdodC5qc19p
bXBvcnQpOgorICAgICAgICAoVGVzdEV4bldpdGhXYXNtUHJvdG9Ob3RDYXVnaHQpOgorICAgICAg
ICAoVGVzdFN0YWNrT3ZlcmZsb3dOb3RDYXVnaHQuc3RhY2tfb3ZlcmZsb3cpOgorICAgICAgICAo
VGVzdFN0YWNrT3ZlcmZsb3dOb3RDYXVnaHQpOgorICAgICAgICAoVGVzdFRocm93UGFyYW1JKToK
KyAgICAgICAgKFRlc3RUaHJvd1BhcmFtRik6CisgICAgICAgIChUZXN0VGhyb3dQYXJhbUwpOgor
ICAgICAgICAoVGVzdFRocm93UGFyYW1EKToKKyAgICAgICAgKFRlc3RDYXRjaENyb3NzRnVuY3Rp
b25zLnRocm93X3ZhbHVlKToKKyAgICAgICAgKFRlc3RDYXRjaENyb3NzRnVuY3Rpb25zLnRocm93
X3N0cmluZyk6CisgICAgICAgIChUZXN0Q2F0Y2hDcm9zc0Z1bmN0aW9ucy50aHJvd191bmRlZmlu
ZWQpOgorICAgICAgICAoVGVzdENhdGNoQ3Jvc3NGdW5jdGlvbnMudGhyb3dfZnApOgorICAgICAg
ICAoVGVzdENhdGNoQ3Jvc3NGdW5jdGlvbnMudGhyb3dfbGFyZ2UpOgorICAgICAgICAoVGVzdERl
bGVnYXRlTm9UaHJvdyk6CisgICAgICAgIChUZXN0RGVsZWdhdGVUaHJvdyk6CisgICAgICAgIChU
ZXN0RGVsZWdhdGVUaHJvd05vQ2F0Y2gpOgorICAgICAgICAoVGVzdERlbGVnYXRlTWVyZ2UpOgor
ICAgICAgICAoVGVzdERlbGVnYXRlMSk6CisgICAgICAgIChUZXN0RGVsZWdhdGVVbnJlYWNoYWJs
ZSk6CisgICAgICAgIChUZXN0RGVsZWdhdGVUb0NhbGxlcik6CisgICAgICAgIChUZXN0VW5yZWFj
aGFibGVJbkNhdGNoQWxsKToKKyAgICAgICAgKFRlc3RUaHJvd1dpdGhMb2NhbCk6CisgICAgICAg
IChUZXN0Q2F0Y2hsZXNzVHJ5KToKKyAgICAgICAgKiB3YXNtL3Y4L21qc3VuaXQuanM6IEFkZGVk
LgorICAgICAgICAoTWpzVW5pdEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgKE1qc1VuaXRBc3Nl
cnRpb25FcnJvci5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoY2F0Y2gpOgorICAgICAg
ICAoY2xhc3NPZik6CisgICAgICAgIChWYWx1ZU9mKToKKyAgICAgICAgKHByZXR0eVByaW50ZWQp
OgorICAgICAgICAocHJldHR5UHJpbnRlZEFycmF5RWxlbWVudCk6CisgICAgICAgIChmYWlsV2l0
aE1lc3NhZ2UpOgorICAgICAgICAoZm9ybWF0RmFpbHVyZVRleHQpOgorICAgICAgICAoZmFpbCk6
CisgICAgICAgIChkZWVwT2JqZWN0RXF1YWxzKToKKyAgICAgICAgKGRlZXBFcXVhbHMpOgorICAg
ICAgICAoYXNzZXJ0U2FtZSk6CisgICAgICAgIChhc3NlcnROb3RTYW1lKToKKyAgICAgICAgKGFz
c2VydEVxdWFscyk6CisgICAgICAgIChhc3NlcnROb3RFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0
RXF1YWxzRGVsdGEpOgorICAgICAgICAoYXNzZXJ0QXJyYXlFcXVhbHMpOgorICAgICAgICAoYXNz
ZXJ0UHJvcGVydGllc0VxdWFsKToKKyAgICAgICAgKGFzc2VydFRvU3RyaW5nRXF1YWxzKToKKyAg
ICAgICAgKGFzc2VydFRydWUpOgorICAgICAgICAoYXNzZXJ0RmFsc2UpOgorICAgICAgICAoYXNz
ZXJ0TnVsbCk6CisgICAgICAgIChhc3NlcnROb3ROdWxsKToKKyAgICAgICAgKGV4ZWN1dGVDb2Rl
KToKKyAgICAgICAgKGNoZWNrRXhjZXB0aW9uKToKKyAgICAgICAgKGFzc2VydFRocm93cyk6Cisg
ICAgICAgIChhc3NlcnRUaHJvd3NFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0VGhyb3dzQXN5bmMp
OgorICAgICAgICAoYXNzZXJ0SW5zdGFuY2VvZik6CisgICAgICAgIChhc3NlcnREb2VzTm90VGhy
b3cpOgorICAgICAgICAoYXNzZXJ0VW5yZWFjaGFibGUpOgorICAgICAgICAoYXNzZXJ0Q29udGFp
bnMpOgorICAgICAgICAoYXNzZXJ0TWF0Y2hlcyk6CisgICAgICAgIChjb25jYXRlbmF0ZUVycm9y
cyk6CisgICAgICAgIChhc3NlcnRQcm9taXNlUmVzdWx0KToKKyAgICAgICAgKE9wdGltaXphdGlv
blN0YXR1cyk6CisgICAgICAgIChhc3NlcnRVbm9wdGltaXplZCk6CisgICAgICAgIChhc3NlcnRP
cHRpbWl6ZWQpOgorICAgICAgICAoaXNOZXZlck9wdGltaXplTGl0ZU1vZGUpOgorICAgICAgICAo
aXNOZXZlck9wdGltaXplKToKKyAgICAgICAgKGlzQWx3YXlzT3B0aW1pemUpOgorICAgICAgICAo
aXNJbnRlcnByZXRlZCk6CisgICAgICAgIChpc0Jhc2VsaW5lKToKKyAgICAgICAgKGlzVW5vcHRp
bWl6ZWQpOgorICAgICAgICAoaXNPcHRpbWl6ZWQpOgorICAgICAgICAoaXNUdXJib0Zhbm5lZCk6
CisgICAgICAgIChNanNVbml0QXNzZXJ0aW9uRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpOgorICAg
ICAgICAqIHdhc20vdjgvd2FzbS1tb2R1bGUtYnVpbGRlci5qczogQWRkZWQuCisgICAgICAgIChi
eXRlcyk6CisgICAgICAgICh3YXNtT3B0UmVmVHlwZSk6CisgICAgICAgICh3YXNtUmVmVHlwZSk6
CisgICAgICAgICh3YXNtUnR0KToKKyAgICAgICAgKHdhc21SdHROb0RlcHRoKToKKyAgICAgICAg
KG1ha2VTaWcpOgorICAgICAgICAobWFrZVNpZ192X3gpOgorICAgICAgICAobWFrZVNpZ194X3Yp
OgorICAgICAgICAobWFrZVNpZ192X3h4KToKKyAgICAgICAgKG1ha2VTaWdfcl92KToKKyAgICAg
ICAgKG1ha2VTaWdfcl94KToKKyAgICAgICAgKG1ha2VTaWdfcl94eCk6CisgICAgICAgIChkZWZp
bmVXYXNtT3Bjb2RlKToKKyAgICAgICAgKGFzc2VydFRyYXBzKToKKyAgICAgICAgKEJpbmFyeSk6
CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVuc3VyZV9zcGFjZSk6CisgICAgICAgIChCaW5h
cnkucHJvdG90eXBlLnRydW5jX2J1ZmZlcik6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLnJl
c2V0KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF91OCk6CisgICAgICAgIChCaW5h
cnkucHJvdG90eXBlLmVtaXRfdTE2KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF91
MzIpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2xlYl91KToKKyAgICAgICAgKEJp
bmFyeS5wcm90b3R5cGUuZW1pdF91MzJ2KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1p
dF91NjR2KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF9ieXRlcyk6CisgICAgICAg
IChCaW5hcnkucHJvdG90eXBlLmVtaXRfc3RyaW5nKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5
cGUuZW1pdF9oZWFwX3R5cGUpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X3R5cGUp
OgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUpOgor
ICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2luaXRfZXhwcik6CisgICAgICAgIChCaW5h
cnkucHJvdG90eXBlLmVtaXRfaGVhZGVyKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1p
dF9zZWN0aW9uKToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIpOgorICAgICAgICAoV2Fz
bUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUubnVtTG9jYWxOYW1lcyk6CisgICAgICAgIChXYXNt
RnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5leHBvcnRBcyk6CisgICAgICAgIChXYXNtRnVuY3Rp
b25CdWlsZGVyLnByb3RvdHlwZS5leHBvcnRGdW5jKToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1
aWxkZXIucHJvdG90eXBlLnNldENvbXBpbGF0aW9uSGludCk6CisgICAgICAgIChXYXNtRnVuY3Rp
b25CdWlsZGVyLnByb3RvdHlwZS5hZGRCb2R5KToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxk
ZXIucHJvdG90eXBlLmFkZEJvZHlXaXRoRW5kKToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxk
ZXIucHJvdG90eXBlLmdldE51bUxvY2Fscyk6CisgICAgICAgIChXYXNtRnVuY3Rpb25CdWlsZGVy
LnByb3RvdHlwZS5hZGRMb2NhbHMpOgorICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90
b3R5cGUuZW5kKToKKyAgICAgICAgKFdhc21Jbml0RXhwci5JMzJDb25zdCk6CisgICAgICAgIChX
YXNtSW5pdEV4cHIuSTY0Q29uc3QpOgorICAgICAgICAoV2FzbUluaXRFeHByLkYzMkNvbnN0KToK
KyAgICAgICAgKFdhc21Jbml0RXhwci5GNjRDb25zdCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIu
UzEyOENvbnN0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5HbG9iYWxHZXQpOgorICAgICAgICAo
V2FzbUluaXRFeHByLlJlZkZ1bmMpOgorICAgICAgICAoV2FzbUluaXRFeHByLlJlZk51bGwpOgor
ICAgICAgICAoV2FzbUluaXRFeHByLlN0cnVjdE5ld1dpdGhSdHQpOgorICAgICAgICAoV2FzbUlu
aXRFeHByLlN0cnVjdE5ldyk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuU3RydWN0TmV3RGVmYXVs
dFdpdGhSdHQpOgorICAgICAgICAoV2FzbUluaXRFeHByLlN0cnVjdE5ld0RlZmF1bHQpOgorICAg
ICAgICAoV2FzbUluaXRFeHByLkFycmF5SW5pdCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuQXJy
YXlJbml0U3RhdGljKToKKyAgICAgICAgKFdhc21Jbml0RXhwci5SdHRDYW5vbik6CisgICAgICAg
IChXYXNtSW5pdEV4cHIuUnR0U3ViKToKKyAgICAgICAgKFdhc21Jbml0RXhwci5SdHRGcmVzaFN1
Yik6CisgICAgICAgIChXYXNtSW5pdEV4cHIuZGVmYXVsdEZvcik6CisgICAgICAgIChXYXNtSW5p
dEV4cHIpOgorICAgICAgICAoV2FzbUdsb2JhbEJ1aWxkZXIpOgorICAgICAgICAoV2FzbUdsb2Jh
bEJ1aWxkZXIucHJvdG90eXBlLmV4cG9ydEFzKToKKyAgICAgICAgKFdhc21UYWJsZUJ1aWxkZXIp
OgorICAgICAgICAoV2FzbVRhYmxlQnVpbGRlci5wcm90b3R5cGUuZXhwb3J0QXMpOgorICAgICAg
ICAobWFrZUZpZWxkKToKKyAgICAgICAgKFdhc21TdHJ1Y3QpOgorICAgICAgICAoV2FzbVN0cnVj
dFN1YnR5cGUpOgorICAgICAgICAoV2FzbUFycmF5KToKKyAgICAgICAgKFdhc21BcnJheVN1YnR5
cGUpOgorICAgICAgICAoV2FzbUVsZW1TZWdtZW50KToKKyAgICAgICAgKFdhc21FbGVtU2VnbWVu
dC5wcm90b3R5cGUuaXNfYWN0aXZlKToKKyAgICAgICAgKFdhc21FbGVtU2VnbWVudC5wcm90b3R5
cGUuaXNfcGFzc2l2ZSk6CisgICAgICAgIChXYXNtRWxlbVNlZ21lbnQucHJvdG90eXBlLmlzX2Rl
Y2xhcmF0aXZlKToKKyAgICAgICAgKFdhc21FbGVtU2VnbWVudC5wcm90b3R5cGUuZXhwcmVzc2lv
bnNfYXNfZWxlbWVudHMpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIpOgorICAgICAgICAo
V2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZFN0YXJ0KToKKyAgICAgICAgKFdhc21Nb2R1
bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRNZW1vcnkpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxk
ZXIucHJvdG90eXBlLmFkZE1lbW9yeTY0KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnBy
b3RvdHlwZS5hZGRFeHBsaWNpdFNlY3Rpb24pOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIu
cHJvdG90eXBlLnN0cmluZ1RvQnl0ZXMpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJv
dG90eXBlLmNyZWF0ZUN1c3RvbVNlY3Rpb24pOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIu
cHJvdG90eXBlLmFkZEN1c3RvbVNlY3Rpb24pOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIu
cHJvdG90eXBlLmFkZFR5cGUpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBl
LmFkZFN0cnVjdCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkU3Ry
dWN0U3VidHlwZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkQXJy
YXkpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEFycmF5U3VidHlw
ZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkR2xvYmFsKToKKyAg
ICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRUYWJsZSk6CisgICAgICAgIChX
YXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkVGFnKToKKyAgICAgICAgKFdhc21Nb2R1bGVC
dWlsZGVyLnByb3RvdHlwZS5hZGRGdW5jdGlvbik6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRl
ci5wcm90b3R5cGUuYWRkSW1wb3J0KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3Rv
dHlwZS5hZGRJbXBvcnRlZEdsb2JhbCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90
b3R5cGUuYWRkSW1wb3J0ZWRNZW1vcnkpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJv
dG90eXBlLmFkZEltcG9ydGVkVGFibGUpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJv
dG90eXBlLmFkZEltcG9ydGVkVGFnKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3Rv
dHlwZS5hZGRFeHBvcnQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFk
ZEV4cG9ydE9mS2luZCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuc2V0
Q29tcGlsYXRpb25IaW50KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5h
ZGREYXRhU2VnbWVudCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRk
UGFzc2l2ZURhdGFTZWdtZW50KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlw
ZS5leHBvcnRNZW1vcnlBcyk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUu
YWRkQWN0aXZlRWxlbWVudFNlZ21lbnQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJv
dG90eXBlLmFkZFBhc3NpdmVFbGVtZW50U2VnbWVudCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVp
bGRlci5wcm90b3R5cGUuYWRkRGVjbGFyYXRpdmVFbGVtZW50U2VnbWVudCk6CisgICAgICAgIChX
YXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYXBwZW5kVG9UYWJsZSk6CisgICAgICAgIChXYXNt
TW9kdWxlQnVpbGRlci5wcm90b3R5cGUuc2V0VGFibGVCb3VuZHMpOgorICAgICAgICAoV2FzbU1v
ZHVsZUJ1aWxkZXIucHJvdG90eXBlLnNldE5hbWUpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxk
ZXIucHJvdG90eXBlLnRvQnVmZmVyKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3Rv
dHlwZS50b0FycmF5KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5pbnN0
YW50aWF0ZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYXN5bmNJbnN0
YW50aWF0ZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUudG9Nb2R1bGUp
OgorICAgICAgICAod2FzbVNpZ25lZExlYik6CisgICAgICAgICh3YXNtVW5zaWduZWRMZWIpOgor
ICAgICAgICAod2FzbUkzMkNvbnN0KToKKyAgICAgICAgKHdhc21JNjRDb25zdCk6CisgICAgICAg
ICh3YXNtRjMyQ29uc3QpOgorICAgICAgICAod2FzbUY2NENvbnN0KToKKyAgICAgICAgKHdhc21T
MTI4Q29uc3QpOgorICAgICAgICAoZ2V0T3Bjb2RlTmFtZSk6CisgICAgICAgICogd2FzbS93YXNt
Lmpzb246CisKIDIwMjEtMTAtMDUgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIENvZGVCbG9jayBzaG91bGQgbm90IGFkZC9yZW1vdmUgTG9vcEhpbnRFeGVjdXRpb25D
b3VudGVycy4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS55YW1sIGIvSlNUZXN0cy93YXNtLnlh
bWwKaW5kZXggMmVjYjYzNGRiZjViMmJlZTcyY2RkMTNjNDAxNzliZjJmNWU5NGJjMS4uMWY0NTFi
YzkxMThjY2FjMzM5ODk3MGVhNDliMjU4OWNhZjMzY2MyNyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93
YXNtLnlhbWwKKysrIGIvSlNUZXN0cy93YXNtLnlhbWwKQEAgLTQ1LDYgKzQ1LDggQEAKICAgY21k
OiBydW5XZWJBc3NlbWJseSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogLSBwYXRoOiB3YXNtL3Nl
bGYtdGVzdC8KICAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlIHVubGVzcyBwYXJzZVJ1bkNvbW1h
bmRzCistIHBhdGg6IHdhc20vdjgvCisgIGNtZDogcnVuV2ViQXNzZW1ibHlTdWl0ZSg6bm9fbW9k
dWxlLCAibWpzdW5pdC5qcyIpIHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCiAKIC0gcGF0aDogd2Fz
bS9yZWZlcmVuY2VzLXNwZWMtdGVzdHMvZWxlbS53YXN0LmpzCiAgIGNtZDogcnVuV2ViQXNzZW1i
bHlSZWZlcmVuY2VTcGVjVGVzdCA6bm9ybWFsCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vQnVp
bGRlci5qcyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCmluZGV4IDMyZmZlNmJiYjU2MWE1MzMz
ODU3ZWQyMzFiMDQ3YTdmMmFmYmYxMTUuLjExMDFmNzI1Y2NkZGIwY2MxZTg5YTA1YzdhZGQ3YmI0
OWQyZjU5N2MgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCisrKyBiL0pTVGVz
dHMvd2FzbS9CdWlsZGVyLmpzCkBAIC0xMjgsNiArMTI4LDE4IEBAIGNvbnN0IF9pbXBvcnRUYWJs
ZUNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewogICAg
IH07CiB9OwogCitjb25zdCBfaW1wb3J0RXhjZXB0aW9uQ29udGludWF0aW9uID0gKGJ1aWxkZXIs
IHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CisgICAgcmV0dXJuIChtb2R1bGUsIGZpZWxkLCB0
eXBlKSA9PiB7CisgICAgICAgIGFzc2VydC5pc1N0cmluZyhtb2R1bGUsIGBJbXBvcnQgZnVuY3Rp
b24gbW9kdWxlIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke21vZHVsZX0iYCk7CisgICAgICAg
IGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEltcG9ydCBmdW5jdGlvbiBmaWVsZCBzaG91bGQgYmUg
YSBzdHJpbmcsIGdvdCAiJHtmaWVsZH0iYCk7CisgICAgICAgIGNvbnN0IHR5cGVTZWN0aW9uID0g
YnVpbGRlci5fZ2V0U2VjdGlvbigiVHlwZSIpOworICAgICAgICB0eXBlID0gX21heWJlUmVnaXN0
ZXJUeXBlKGJ1aWxkZXIsIHR5cGUpOworICAgICAgICBjb25zdCB0YWcgPSAwOworICAgICAgICBz
ZWN0aW9uLmRhdGEucHVzaCh7IGZpZWxkLCB0eXBlLCB0YWcsIGtpbmQ6ICJFeGNlcHRpb24iLCBt
b2R1bGUgfSk7CisgICAgICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKG5leHRCdWls
ZGVyKTsKKyAgICB9Cit9OworCiBjb25zdCBfZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24gPSAo
YnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKICAgICByZXR1cm4gKGZpZWxkLCBp
bmRleCwgdHlwZSkgPT4gewogICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBFeHBvcnQg
ZnVuY3Rpb24gZmllbGQgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOwpAQCAt
MjE1LDYgKzIyNywxNCBAQCBjb25zdCBfZXhwb3J0VGFibGVDb250aW51YXRpb24gPSAoYnVpbGRl
ciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKICAgICB9CiB9OwogCitjb25zdCBfZXhwb3J0
RXhjZXB0aW9uQ29udGludWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9
PiB7CisgICAgcmV0dXJuIChmaWVsZCwgaW5kZXgpID0+IHsKKyAgICAgICAgYXNzZXJ0LmlzTnVt
YmVyKGluZGV4LCBgRXhjZXB0aW9uIGV4cG9ydHMgb25seSBzdXBwb3J0IG51bWJlciBpbmRpY2Vz
YCk7CisgICAgICAgIHNlY3Rpb24uZGF0YS5wdXNoKHtmaWVsZCwga2luZDogIkV4Y2VwdGlvbiIs
IGluZGV4fSk7CisgICAgICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKG5leHRCdWls
ZGVyKTsKKyAgICB9Cit9OworCiBjb25zdCBfaW1wb3J0R2xvYmFsQ29udGludWF0aW9uID0gKGJ1
aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CiAgICAgcmV0dXJuICgpID0+IHsKICAg
ICAgICAgY29uc3QgZ2xvYmFsQnVpbGRlciA9IHsKQEAgLTMwNyw2ICszMjcsNyBAQCBjb25zdCBf
Y2hlY2tJbW1zID0gKG9wLCBpbW1zLCBleHBlY3RlZEltbXMsIHJldCkgPT4gewogICAgICAgICBj
YXNlICJ0YXJnZXRfdGFibGUiOiBicmVhazsgLy8gaW1wcm92ZSBjaGVja2luZyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNDIxCiAgICAgICAgIGNhc2UgInJlc2Vy
dmVkIjogYnJlYWs7IC8vIGltcHJvdmUgY2hlY2tpbmcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MzQyMQogICAgICAgICBjYXNlICJ0YWJsZV9pbmRleCI6IGJyZWFr
OyAvLyBpbXByb3ZlIGNoZWNraW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjM0MjEKKyAgICAgICAgY2FzZSAiZXhuIjogYnJlYWs7CiAgICAgICAgIGNhc2UgInJl
ZnR5cGUiOgogICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShXQVNNLmlzVmFsaWRSZWZUeXBlKGlt
bXNbaWR4XSksIGBJbnZhbGlkIHJlZiB0eXBlIG9uICR7b3B9OiAiJHtpbW1zW2lkeF19ImApOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0zMzUsMTEgKzM1NiwxMyBAQCBjb25zdCBfY3JlYXRlRnVu
Y3Rpb25CdWlsZGVyID0gKGZ1bmMsIGJ1aWxkZXIsIHByZXZpb3VzQnVpbGRlcikgPT4gewogICAg
ICAgICAgICAgICAgIG5leHRCdWlsZGVyID0gZnVuY3Rpb25CdWlsZGVyOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAiRW5kIjoKKyAgICAgICAgICAgIGNhc2UgIkRl
bGVnYXRlIjoKICAgICAgICAgICAgICAgICBuZXh0QnVpbGRlciA9IHByZXZpb3VzQnVpbGRlcjsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgIkJsb2NrIjoKICAgICAg
ICAgICAgIGNhc2UgIkxvb3AiOgogICAgICAgICAgICAgY2FzZSAiSWYiOgorICAgICAgICAgICAg
Y2FzZSAiVHJ5IjoKICAgICAgICAgICAgICAgICBuZXh0QnVpbGRlciA9IF9jcmVhdGVGdW5jdGlv
bkJ1aWxkZXIoZnVuYywgYnVpbGRlciwgZnVuY3Rpb25CdWlsZGVyKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTQ4OCw2ICs1MTEsNyBAQCBleHBvcnQgZGVmYXVs
dCBjbGFzcyBCdWlsZGVyIHsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5GdW5j
dGlvbiA9IF9pbXBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVy
KTsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5NZW1vcnkgPSBfaW1wb3J0TWVt
b3J5Q29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAg
ICAgICBpbXBvcnRCdWlsZGVyLlRhYmxlID0gX2ltcG9ydFRhYmxlQ29udGludWF0aW9uKHRoaXMs
IHMsIGltcG9ydEJ1aWxkZXIpOworICAgICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLkV4
Y2VwdGlvbiA9IF9pbXBvcnRFeGNlcHRpb25Db250aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVp
bGRlcik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9y
KGltcG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC01MzEsNiArNTU1LDIzIEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewog
ICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAg
IGNhc2UgIkV4Y2VwdGlvbiI6IHsKKyAgICAgICAgICAgICAgICB0aGlzW3NlY3Rpb25dID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLl9hZGRTZWN0aW9u
KHNlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhQnVpbGRlciA9IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEVuZDogKCkgPT4gdGhpcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFNpZ25hdHVyZTogKHNpZ25hdHVyZSkgPT4geworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxldCB0eXBlID0gX21heWJlUmVnaXN0ZXJUeXBlKHRoaXMsIHNpZ25hdHVyZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5kYXRhLnB1c2goeyB0YWc6IDAsIHR5cGUgfSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlG
b3IoZGF0YUJ1aWxkZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIHdlIGFkZCB0YWdzIHdpdGggbm9uLXplcm8gdmFsdWUgdGhlbiB3
ZSBjYW4gYWRkIGEgbmV3IG1lbWJlci4KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IoZGF0YUJ1aWxkZXIpOwor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisKICAgICAgICAgICAgIGNhc2UgIkdsb2JhbCI6CiAgICAgICAgICAgICAgICAgdGhpc1tzZWN0
aW9uXSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5f
YWRkU2VjdGlvbihzZWN0aW9uKTsKQEAgLTU2OSw2ICs2MTAsNyBAQCBleHBvcnQgZGVmYXVsdCBj
bGFzcyBCdWlsZGVyIHsKICAgICAgICAgICAgICAgICAgICAgZXhwb3J0QnVpbGRlci5GdW5jdGlv
biA9IF9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBleHBvcnRCdWlsZGVyKTsK
ICAgICAgICAgICAgICAgICAgICAgZXhwb3J0QnVpbGRlci5NZW1vcnkgPSBfZXhwb3J0TWVtb3J5
Q29udGludWF0aW9uKHRoaXMsIHMsIGV4cG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgICAg
ICBleHBvcnRCdWlsZGVyLlRhYmxlID0gX2V4cG9ydFRhYmxlQ29udGludWF0aW9uKHRoaXMsIHMs
IGV4cG9ydEJ1aWxkZXIpOworICAgICAgICAgICAgICAgICAgICBleHBvcnRCdWlsZGVyLkV4Y2Vw
dGlvbiA9IF9leHBvcnRFeGNlcHRpb25Db250aW51YXRpb24odGhpcywgcywgZXhwb3J0QnVpbGRl
cik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKGV4
cG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC03MzcsMTUgKzc3OSw2IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAg
ICAgICAgICAgZm9yIChjb25zdCBzIG9mIHRoaXMuX3NlY3Rpb25zKQogICAgICAgICAgICAgICAg
IGlmIChudW1iZXIgIT09IF91bmtub3duU2VjdGlvbklkKQogICAgICAgICAgICAgICAgICAgICBh
c3NlcnQuZmFsc3kocy5uYW1lID09PSBuYW1lICYmIHMuaWQgPT09IG51bWJlciwgYENhbm5vdCBo
YXZlIHR3byBzZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgIiR7bmFtZX0iIGFuZCBJRCAke251
bWJlcn1gKTsKLSAgICAgICAgICAgIC8vIENoZWNrIG9yZGVyaW5nLgotICAgICAgICAgICAgaWYg
KChudW1iZXIgIT09IF91bmtub3duU2VjdGlvbklkKSAmJiAodGhpcy5fc2VjdGlvbnMubGVuZ3Ro
ICE9PSAwKSkgewotICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9zZWN0aW9ucy5s
ZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5f
c2VjdGlvbnNbaV0uaWQgPT09IF91bmtub3duU2VjdGlvbklkKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydC5sZSh0aGlzLl9zZWN0
aW9uc1tpXS5pZCwgbnVtYmVyLCBgQmFkIHNlY3Rpb24gb3JkZXJpbmc6ICIke3RoaXMuX3NlY3Rp
b25zW2ldLm5hbWV9IiBjYW5ub3QgcHJlY2VkZSAiJHtuYW1lfSJgKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIGNvbnN0IHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZTogbmFtZSwgaWQ6IG51bWJl
ciwgZGF0YTogW10gfSwgZXh0cmFPYmplY3QgfHwge30pOwogICAgICAgICB0aGlzLl9zZWN0aW9u
cy5wdXNoKHMpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlC
aW5hcnkuanMgYi9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwppbmRl
eCAzNThiYjQ4MmQ0ZTA3MzI2YTIwZTU4OTM0ZTU1MjkyYmI1NTE2MzcwLi5lOWM1NzYyNjBmNWQy
ZTViNjdmYWU4YTNkYjUwZTZjNzQxNjg4ODE3IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vQnVp
bGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcworKysgYi9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJB
c3NlbWJseUJpbmFyeS5qcwpAQCAtMTQzLDYgKzE0MywxMCBAQCBjb25zdCBlbWl0dGVycyA9IHsK
ICAgICAgICAgICAgIGNhc2UgIkdsb2JhbCI6CiAgICAgICAgICAgICAgICAgcHV0R2xvYmFsVHlw
ZShiaW4sIGVudHJ5Lmdsb2JhbERlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgIkV4Y2VwdGlvbiI6CisgICAgICAgICAgICAgICAgcHV0KGJpbiwg
InZhcnVpbnQzMiIsIGVudHJ5LnRhZyk7CisgICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVp
bnQzMiIsIGVudHJ5LnR5cGUpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfSwKQEAgLTE4NSw2ICsxODksNyBAQCBjb25zdCBlbWl0dGVycyA9
IHsKICAgICAgICAgICAgIGNhc2UgIkZ1bmN0aW9uIjoKICAgICAgICAgICAgIGNhc2UgIk1lbW9y
eSI6CiAgICAgICAgICAgICBjYXNlICJUYWJsZSI6CisgICAgICAgICAgICBjYXNlICJFeGNlcHRp
b24iOgogICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBlbnRyeS5pbmRleCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcg
RXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IHVuZXhwZWN0ZWQga2luZCAke2VudHJ5Lmtp
bmR9YCk7CkBAIC0yNTQsNiArMjU5LDE0IEBAIGNvbnN0IGVtaXR0ZXJzID0gewogICAgICAgICAg
ICAgICAgIHB1dChiaW4sICJ1aW50OCIsIGJ5dGUpOwogICAgICAgICB9CiAgICAgfSwKKworICAg
IEV4Y2VwdGlvbjogKHNlY3Rpb24sIGJpbikgPT4geworICAgICAgICBwdXQoYmluLCAidmFydWlu
dDMyIiwgc2VjdGlvbi5kYXRhLmxlbmd0aCk7CisgICAgICAgIGZvciAoY29uc3QgZXhuIG9mIHNl
Y3Rpb24uZGF0YSkgeworICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGV4bi50YWcp
OworICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGV4bi50eXBlKTsKKyAgICAgICAg
fQorICAgIH0sCiB9OwogCiBleHBvcnQgY29uc3QgQmluYXJ5ID0gKHByZWFtYmxlLCBzZWN0aW9u
cykgPT4gewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Fzc2VydC5qcyBiL0pTVGVzdHMvd2Fz
bS9hc3NlcnQuanMKaW5kZXggNmZkYjY1YTRkYWRkYzBkNzdhNzI0YzAxOTJkOGZiNTNiZjEwYmY2
OC4uOTQ4MzhkOTdlZjU1MGY2MWZkMjM4NmMzZjJhYmQ4ZWY5MjM2ZTQwMiAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL2Fzc2VydC5qcworKysgYi9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCkBAIC0x
MjQsNyArMTI0LDcgQEAgY29uc3QgX3Rocm93cyA9IChmdW5jLCB0eXBlLCBtZXNzYWdlLCAuLi5h
cmdzKSA9PiB7CiAgICAgdHJ5IHsKICAgICAgICAgZnVuYyguLi5hcmdzKTsKICAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICAgIGlmIChlIGluc3RhbmNlb2YgdHlwZSAmJiBlLm1lc3NhZ2UuaW5kZXhP
ZihtZXNzYWdlKSA+PSAwKQorICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIHR5cGUgJiYgKHR5cGVv
ZihlLm1lc3NhZ2UpID09ICJ1bmRlZmluZWQiIHx8IGUubWVzc2FnZS5pbmRleE9mKG1lc3NhZ2Up
ID49IDApKQogICAgICAgICAgICAgcmV0dXJuIGU7CiAgICAgICAgIF9mYWlsKGBFeHBlY3RlZCB0
byB0aHJvdyBhICR7dHlwZS5uYW1lfSB3aXRoIG1lc3NhZ2UgIiR7bWVzc2FnZX0iLCBnb3QgJHtl
Lm5hbWV9IHdpdGggbWVzc2FnZSAiJHtlLm1lc3NhZ2V9ImApOwogICAgIH0KZGlmZiAtLWdpdCBh
L0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcyBiL0pTVGVzdHMvd2Fz
bS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcwppbmRleCBiYjFiOTdiMTlkNWNjMWM3OGI1
ZjAwN2RjNjkwYWFkYmQ3MGQyMGY4Li4yMDlmMjBiNzZiYmE4YjcwYzUxNzIxZWU0NTY4M2QxZjc2
MDMyYTZmIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpT
T04uanMKKysrIGIvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzCkBA
IC0xNDAsMTEgKzE0MCw2IEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2Up
ID0+IHsKICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCAwKTsKIH0pKCk7
CiAKLShmdW5jdGlvbiBJbXBvcnRCZWZvcmVUeXBlU2VjdGlvbnMoKSB7Ci0gICAgY29uc3QgYiA9
IChuZXcgQnVpbGRlcigpKS5JbXBvcnQoKS5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+
IGIuVHlwZSgpLCBFcnJvciwgYEV4cGVjdGVkOiAiMiIgPiAiMSI6IEJhZCBzZWN0aW9uIG9yZGVy
aW5nOiAiSW1wb3J0IiBjYW5ub3QgcHJlY2VkZSAiVHlwZSJgKTsKLX0pKCk7Ci0KIChmdW5jdGlv
biBJbXBvcnRGdW5jdGlvbldpdGhvdXRUeXBlU2VjdGlvbigpIHsKICAgICBjb25zdCBpID0gKG5l
dyBCdWlsZGVyKCkpLkltcG9ydCgpOwogICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaS5GdW5jdGlv
bigiZm9vIiwgImJhciIsIDApLCBFcnJvciwgYFNob3VsZG4ndCBiZSB1bmRlZmluZWQ6IENhbiBu
b3QgdXNlIHR5cGUgMCBpZiBhIHR5cGUgc2VjdGlvbiBpcyBub3QgcHJlc2VudGApOwpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9jYXRjaC13aXRoLWRlbGVnYXRlLmpzIGIvSlNUZXN0
cy93YXNtL3N0cmVzcy9jYXRjaC13aXRoLWRlbGVnYXRlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMGJlZjU5
M2NjNDIzNjJiMjJhZTI5OTc2NDJiMzI4NTE0ODg1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3dhc20vc3RyZXNzL2NhdGNoLXdpdGgtZGVsZWdhdGUuanMKQEAgLTAsMCArMSw5MCBAQAor
aW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBm
cm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAg
ICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAi
Y2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6
IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAg
ICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAg
ICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAg
ICAgICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAg
ICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
Y29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRl
eHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9v
OworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3Nl
bWJseS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNl
LmV4cG9ydHMuY2FsbCgpLCAzKTsKKworICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBw
YXJhbWV0ZXJzOiBbXSB9KTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5j
YWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQorCisKK3sKKyAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0
OiAidm9pZCIgfSkKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImNvbnRleHQiLCAidGFnIiwgeyBw
YXJhbXM6IFsiaTMyIl0sIHJldDogInZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAu
RnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1z
OiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAg
ICAgICAuRXhjZXB0aW9uKCJmb28iLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIi
IH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAg
ICAgICAgICAgLkRlbGVnYXRlKDApCisgICAgICAgICAgICAuQ2F0Y2goMSkKKyAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0
KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAg
IGxldCBvdGhlclRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbImkzMiJd
fSkKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUs
IHsgY29udGV4dDogeyBjYWxsYmFjaywgdGFnOiBvdGhlclRhZyB9fSk7CisKKyAgICBsZXQgdGFn
ID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisgICAgbGV0IGFyZ3MgPSBbXTsKKworICAgIGZ1bmN0
aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9u
KHRhZywgYXJncyk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2Fs
bCgpLCAzKTsKKworICAgIHRhZyA9IG90aGVyVGFnOworICAgIGFyZ3MgPSBbMTAwXTsKKworICAg
IGxldCBleG4gPSBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1i
bHkuRXhjZXB0aW9uKTsKKyAgICBhc3NlcnQuZXEoZXhuLmdldEFyZyh0YWcsIDApLCAxMDApOwor
fQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9jcmVhdGUtdGFnLWZyb20uanMgYi9K
U1Rlc3RzL3dhc20vc3RyZXNzL2NyZWF0ZS10YWctZnJvbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMjc4ZDZj
MjE3NmNmYjU4MTRhZmFlNzY4NGYxOWZkNTY4MTAxZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3N0cmVzcy9jcmVhdGUtdGFnLWZyb20uanMKQEAgLTAsMCArMSwyMiBAQAoraW1w
b3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworbGV0IHBhcmFtZXRlcnMgPSBb
ImkzMiIsICJmMzIiLCAiZXh0ZXJucmVmIl07CisKK2Fzc2VydC50aHJvd3MoV2ViQXNzZW1ibHku
VGFnLCBUeXBlRXJyb3IsICJjYWxsaW5nIFdlYkFzc2VtYmx5LlRhZyBjb25zdHJ1Y3RvciB3aXRo
b3V0IG5ldyBpcyBpbnZhbGlkIik7CitsZXQgcGFzc2VkUGFyYW1ldGVycyA9IHsgcGFyYW1ldGVy
cyB9OworbGV0IHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcocGFzc2VkUGFyYW1ldGVycyk7CisK
K2Fzc2VydC50cnV0aHkodGFnLnR5cGUoKSAhPT0gcGFzc2VkUGFyYW1ldGVycywgIlRhZyB0eXBl
IHNob3VsZCByZXR1cm4gYSBmcmVzaCBvYmplY3QiKTsKK2Fzc2VydC5lcSh0YWcudHlwZSgpLnBh
cmFtZXRlcnMsIHBhcmFtZXRlcnMsICJUYWdzIHR5cGUgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRo
ZSBwYXJhbWV0ZXJzIHBhc3NlZCBpbiIpOworCithc3NlcnQudGhyb3dzKFdlYkFzc2VtYmx5LkV4
Y2VwdGlvbiwgVHlwZUVycm9yLCAiY2FsbGluZyBXZWJBc3NlbWJseS5FeGNlcHRpb24gY29uc3Ry
dWN0b3Igd2l0aG91dCBuZXcgaXMgaW52YWxpZCIpOworCitsZXQgZXhjZXB0aW9uID0gbmV3IFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFsxLCAyLjUsIHBhcmFtZXRlcnNdKTsKK2Fzc2VydC50
cnV0aHkoZXhjZXB0aW9uLmlzKHRhZykpOworYXNzZXJ0LmVxKGV4Y2VwdGlvbi5nZXRBcmcodGFn
LCAwKSwgMSk7Cithc3NlcnQuZXEoZXhjZXB0aW9uLmdldEFyZyh0YWcsIDEpLCAyLjUpOworYXNz
ZXJ0LmVxKGV4Y2VwdGlvbi5nZXRBcmcodGFnLCAyKSwgcGFyYW1ldGVycyk7CisKK2Fzc2VydC50
aHJvd3MoKCkgPT4gZXhjZXB0aW9uLmdldEFyZyh0YWcsIDMpLCBSYW5nZUVycm9yLCAiV2ViQXNz
ZW1ibHkuRXhjZXB0aW9uLmdldEFyZygpOiBJbmRleCBvdXQgb2YgcmFuZ2UiKTsKKworYXNzZXJ0
LmVxKFdlYkFzc2VtYmx5LkV4Y2VwdGlvbi5wcm90b3R5cGUuX19wcm90b19fLCBPYmplY3QucHJv
dG90eXBlKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3Mt
aW5zdGFuY2UtMi5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3Rh
bmNlLTIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGVjN2ZiYWQwNzU4OTU1ZWEyZjhlNDM0MjgxNDE3Yzk2ZjAw
ZGI3MwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNy
b3NzLWluc3RhbmNlLTIuanMKQEAgLTAsMCArMSw5MCBAQAorCitpbXBvcnQgQnVpbGRlciBmcm9t
ICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycK
KworY29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7Citjb25zdCBudW1QYWdlcyA9IDE7CisKK3Zh
ciBpbnN0QTsKK3ZhciBpbnN0QjsKK3ZhciBncm93OwordmFyIG1lbW9yeURlc2NyaXB0aW9uID0g
e2luaXRpYWw6IDB9OwordmFyIG1lbSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVtb3J5RGVz
Y3JpcHRpb24pOworCitmdW5jdGlvbiB0ZXN0KCkgeworICAgIGFzc2VydC5lcShpbnN0QS5leHBv
cnRzLm1haW4oNDIpLCA0Mik7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsK
KyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5NZW1v
cnkoImNvbnRleHQiLCAibWVtIiwgbWVtb3J5RGVzY3JpcHRpb24pCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImNvbnRleHQiLCAiZ3JvdyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRp
b24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oInRyYW1wb2xpbmUiKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0cmFtcG9saW5lIiwgeyBwYXJhbXM6
IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1i
bHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJp
bik7CisgICAgaW5zdEIgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7CisgICAg
ICAgIGNvbnRleHQ6IHsKKyAgICAgICAgICAgIG1lbSwKKyAgICAgICAgICAgIGdyb3coKSB7IGlu
c3RBLmV4cG9ydHMuZ3JvdygxKTsgfSwKKyAgICAgICAgfQorICAgIH0pOworfQorCit7CisgICAg
Y29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLklt
cG9ydCgpCisgICAgICAgICAgICAuTWVtb3J5KCJjb250ZXh0IiwgIm1lbSIsIG1lbW9yeURlc2Ny
aXB0aW9uKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0IiwgInRyYW1wb2xpbmUiLCB7
IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVu
Y3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBb
XX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYWlu
IikKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZ3JvdyIpCisgICAgICAgIC5FbmQoKQorICAgICAg
ICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oIm1haW4iLCB7IHBhcmFtczogWyJpMzIi
XSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAg
ICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAg
ICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgw
KQorICAgICAgICAgICAgICAgICAgICAuSTMyTG9hZCgwLCAwKQorICAgICAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImdyb3ciLCB7
IHBhcmFtczogWyJpMzIiXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgICAgICAuR2V0TG9j
YWwoMCkKKyAgICAgICAgICAgICAgICAuR3Jvd01lbW9yeSgwKQorICAgICAgICAgICAgICAgIC5J
MzJDb25zdCg0MikKKyAgICAgICAgICAgICAgICAuSTMyU3RvcmUoMCwgMCkKKyAgICAgICAgICAg
ICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisg
ICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBpbnN0QSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHsKKyAgICAgICAgY29udGV4dDogeworICAgICAgICAgICAgbWVt
LAorICAgICAgICAgICAgdHJhbXBvbGluZTogaW5zdEIuZXhwb3J0cy50cmFtcG9saW5lLAorICAg
ICAgICB9CisgICAgfSk7Cit9CisKK3Rlc3QoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9z
dHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLTMuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNz
L2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0zLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhODk4MGJlYjkzZjZj
MmMzMDY0YzJjYzkxNGVhYzFhMTM0YzA0ODAKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dh
c20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0zLmpzCkBAIC0wLDAgKzEsNzUgQEAK
K2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQg
ZnJvbSAnLi4vYXNzZXJ0LmpzJworCitjb25zdCBwYWdlU2l6ZSA9IDY0ICogMTAyNDsKK2NvbnN0
IG51bVBhZ2VzID0gMTsKKwordmFyIGluc3RBOwordmFyIGluc3RCOwordmFyIGdyb3c7Cit2YXIg
bWVtb3J5RGVzY3JpcHRpb24gPSB7aW5pdGlhbDogbnVtUGFnZXN9OwordmFyIG1lbSA9IG5ldyBX
ZWJBc3NlbWJseS5NZW1vcnkobWVtb3J5RGVzY3JpcHRpb24pOworCitmdW5jdGlvbiB0ZXN0KCkg
eworICAgIGFzc2VydC5lcShpbnN0QS5leHBvcnRzLm1haW4oKSwgNDIpOworfQorCit7CisgICAg
Y29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLklt
cG9ydCgpCisgICAgICAgICAgICAuTWVtb3J5KCJjb250ZXh0IiwgIm1lbSIsIHsgaW5pdGlhbDog
MCB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhw
b3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigidGhyb3ciKQorICAgICAgICAgICAgLkV4Y2Vw
dGlvbigiZXgiLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJ0aHJvdyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAg
ICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkK
KworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1v
ZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBpbnN0QiA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBtZW06IG5ldyBXZWJBc3NlbWJs
eS5NZW1vcnkoeyBpbml0aWFsOiAwIH0pIH0gfSk7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAg
ICAgICAgIC5NZW1vcnkoImNvbnRleHQiLCAibWVtIiwgbWVtb3J5RGVzY3JpcHRpb24pCisgICAg
ICAgICAgICAuRnVuY3Rpb24oImNvbnRleHQiLCAidGhyb3ciLCB7IHBhcmFtczogW10sIHJldDog
InZvaWQiIH0pCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJjb250ZXh0IiwgImV4IiwgeyBwYXJh
bXM6IFtdIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbImkzMiJdfSkuRW5kKCkKKyAg
ICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oIm1haW4iKQorICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYWluIiwgeyBw
YXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisg
ICAgICAgICAgICAgICAgLkkzMkNvbnN0KDQyKQorICAgICAgICAgICAgICAgIC5JMzJTdG9yZSgw
LCAwKQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5D
YWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAg
IC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAg
ICAgICAgICAgLkkzMkxvYWQoMCwgMCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3Nl
bWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YmluKTsKKyAgICBpbnN0QSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29u
dGV4dDogeyAuLi5pbnN0Qi5leHBvcnRzLCBtZW0gfSB9KTsKK30KKwordGVzdCgpOwpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UuanMgYi9K
U1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jYzY3YzkxODY5ZTJhYjJkYmU3MGQ1Y2VjMWU3ZjI1Nzg5OGI1OGY2Ci0tLSAvZGV2L251bGwK
KysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UuanMKQEAg
LTAsMCArMSw1OCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9y
dCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3ZhciBpbnN0QTsKK3ZhciBpbnN0
QjsKKworZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBhc3NlcnQudGhyb3dzKGluc3RBLmV4cG9ydHMu
bWFpbiwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uLCAid2FzbSBleGNlcHRpb24iKTsKK30KKworewor
ICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJh
bXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
InRocm93IikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigidGhyb3ciLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAg
ICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisg
ICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBpbnN0QiA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUpOworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7
CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImNvbnRleHQiLCAidGhyb3ciLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRp
b24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFsiaTMyIiwgImkzMiJdfSkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oIm1haW4iKQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYWluIiwgeyBwYXJhbXM6
IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAg
ICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAg
ICAgICAgICAgICAgLkkzMkFkZCgpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1i
bHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJp
bik7CisgICAgaW5zdEEgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRl
eHQ6IHsgdGhyb3c6IGluc3RCLmV4cG9ydHMudGhyb3cgfSB9KTsKK30KKwordGVzdCgpOwpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tbGl2ZW5lc3MtdGllci11cC5q
cyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWxpdmVuZXNzLXRpZXItdXAuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOGU2MDUyNDBkMjE1ZWIxNDIxMDJjODVmMWM5ODAzNTI0Yzg1YzZmMgotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWxpdmVuZXNzLXRpZXIt
dXAuanMKQEAgLTAsMCArMSw4NyBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5q
cycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25z
dCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rp
b24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIC5TaWduYXR1cmUo
eyBwYXJhbXM6IFsiaTMyIl19KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigidGFn
IiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5j
dGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9LCBbImkzMiJdKQorICAgICAg
ICAgICAgICAgIC5JMzJDb25zdCgxZTYpCisgICAgICAgICAgICAgICAgLlNldExvY2FsKDApCisg
ICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0
KDQyKQorICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAuQ2F0
Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkxvb3AoInZvaWQiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgLkJsb2NrKCJ2b2lkIiwgYiA9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGIuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMyRXF6
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQnJJZigwKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJT
dWIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5TZXRMb2NhbCgwKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5CcigxKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAgICAg
LlJldGhyb3coMCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgp
OworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBj
b25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworICAgIGNv
bnN0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMudGFnOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0
YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbiwgIndhc20gZXhjZXB0aW9u
Iik7CisgICAgdHJ5IHsKKyAgICAgICAgaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCk7CisgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICBhc3NlcnQudHJ1dGh5KGUuaXModGFnKSk7CisgICAgICAgIGFz
c2VydC5lcShlLmdldEFyZyh0YWcsIDApLCA0Mik7CisgICAgfQorfQorCit7CisgICAgY29uc3Qg
YiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgp
LkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIi
IH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24o
KS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0
aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAg
IC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pCisgICAg
ICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkxvb3AoInZvaWQiKQor
ICAgICAgICAgICAgICAgICAgICAuQ2FsbCgyKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJ2
b2lkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAg
ICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC5JMzJFcXooKQorICAgICAgICAgICAgICAgICAgICAgICAgLkJy
SWYoMSkKKyAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigid3JhcHBlciIsIHsg
cGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCkKKworICAgIHZhciBjb3VudGVyID0gMWU1OworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9k
dWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2s6IGZ1bmN0aW9uKCkgeyBpZiAoIS0tY291bnRlcikg
cmV0dXJuIHRydWU7fSB9IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2Fs
bCgpLCAwKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLW11
bHRpcGxlLWluc3RhbmNlcy5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLW11bHRp
cGxlLWluc3RhbmNlcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTAyNjc5YTlkMTFhMWJlODEzMDhkNjE3Yjk3
ZGFjOWFhN2YzMGVlCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNl
cHRpb24tbXVsdGlwbGUtaW5zdGFuY2VzLmpzCkBAIC0wLDAgKzEsMzIgQEAKK2ltcG9ydCBCdWls
ZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNz
ZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCku
RW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNp
Z25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigidGhyb3ciKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigidGFnIiwgMCkK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
dGhyb3ciLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAgICAgLlRy
eSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAg
IC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5FbmQoKQorCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOwor
ICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICB7Cisg
ICAgICAgIGxldCBpbnN0ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7CisgICAg
ICAgIGluc3QuZXhwb3J0cy50aHJvdygpOworICAgIH0KKyAgICB7CisgICAgICAgIGxldCBpbnN0
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7CisgICAgICAgIGluc3QuZXhwb3J0
cy50aHJvdygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhj
ZXB0aW9uLXNpbXBsZS1kZWxlZ2F0ZS5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9u
LXNpbXBsZS1kZWxlZ2F0ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjEyYThlZjI5NjJjYjExYzk0NmQwYzVm
ZDgwZjRhMDZmZGE0Yzc5Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9l
eGNlcHRpb24tc2ltcGxlLWRlbGVnYXRlLmpzCkBAIC0wLDAgKzEsMTI1IEBACitpbXBvcnQgQnVp
bGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fz
c2VydC5qcycKKworZnVuY3Rpb24gdGVzdFNpbXBsZVRocm93RGVsZWdhdGUoKSB7CisgICAgY29u
c3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119
KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAg
LkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQor
ICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoInZv
aWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAg
ICAgIC5EZWxlZ2F0ZSgwKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAg
ICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJs
eSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmlu
KTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUs
IHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRj
aGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2li
bGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFRocm93RGVsZWdhdGVTa2lwKCkgeworICAgIGNvbnN0
IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlv
bigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSku
RW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5F
eGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAg
ICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJpMzIi
KQorICAgICAgICAgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgICAgICAgICAuRGVsZWdhdGUo
MSkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAg
ICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAg
ICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0g
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdl
YkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5j
ZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93
biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0RGVsZWdh
dGVDYWxsZXIoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCku
RW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNp
Z25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24o
ImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAg
ICAgICAgICAgICAgIC5DYWxsKDEpCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAgICAgLkVuZCgpCisKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbDIiLCB7IHBhcmFtczog
W10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAg
ICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UaHJvdygw
KQorICAgICAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMSkKKyAgICAgICAgICAgICAgICAuQ2F0
Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0
IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1i
bHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9y
dHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20g
SlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVEZWxlZ2F0
ZU1lcmdlKCl7CisgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisg
ICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0
KDMpCisgICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7
CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNv
bnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKyAg
ICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMpOworfQorCit0ZXN0U2ltcGxl
VGhyb3dEZWxlZ2F0ZSgpOwordGVzdFRocm93RGVsZWdhdGVTa2lwKCk7Cit0ZXN0RGVsZWdhdGVD
YWxsZXIoKTsKK3Rlc3RTaW1wbGVEZWxlZ2F0ZU1lcmdlKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtdGhyb3ctY2F0Y2guanMgYi9KU1Rlc3RzL3dh
c20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtdGhyb3ctY2F0Y2guanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTA5
NzQwMTVmNzMwMWRlYmU2YjRkNjYyZTM1YjA5MmZlNDhlMGM3NgotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXNpbXBsZS10aHJvdy1jYXRjaC5qcwpAQCAt
MCwwICsxLDQxNCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9y
dCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVU
cnlDYXRjaCgpeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWdu
YXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJj
YWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczog
W10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAg
ICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAu
Q2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4g
PSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNh
bGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNo
b3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlVHJ5Q2F0Y2hBbGwo
KXsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisg
ICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6
ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5UaHJv
dygwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkNhdGNoQWxs
KCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldl
YkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNl
KG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwg
MiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBi
ZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0Q2FsbFRyeUNhdGNoKCl7CisgICAgY29u
c3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119
KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAg
LkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQor
ICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgxKQorICAgICAg
ICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorCisgICAgICAgICAgICAuRnVuY3Rpb24oImNh
bGwyIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRocm93
KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMu
Y2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMg
c2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RDYWxsVHJ5Q2F0Y2hBbGwo
KXsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisg
ICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6
ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxs
KDEpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikK
KyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiY2FsbDIiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAg
ICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisg
ICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBX
ZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFu
Y2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJv
d24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBs
ZVRyeUNhdGNoVmFsdWUoKXsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5
cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9u
KCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbImkzMiJdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgp
LkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwi
LCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisg
ICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlRocm93KDApCisg
ICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCku
Z2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwor
ICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9
KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5n
IGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIp
OworfQorCitmdW5jdGlvbiB0ZXN0Q2FsbFRyeUNhdGNoVmFsdWUoKXsKKyAgICBjb25zdCBiID0g
bmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5F
bmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbImkzMiJdfSku
RW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5F
eGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAg
ICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMSkKKyAgICAgICAg
ICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKwor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsMiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9
KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5UaHJvdygw
KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4g
PSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNh
bGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNo
b3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0U3RhY2tUcnlDYXRjaCgpewor
ICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJh
bXM6IFsiaTMyIl19KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQor
ICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAg
IC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0
OiAiaTMyIiB9KQorICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAvLyBUT0RP
OiBidWlsZGVyIGVycm9yCisgICAgICAgICAgICAuVHJ5KHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6
ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuQ2F0Y2go
MCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQo
KQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3Qg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNl
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5l
cShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20g
dGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0
ZXN0TGl2ZUFmdGVyVHJ5Q2F0Y2goKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Cisg
ICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkuRW5kKCkKKyAgICAgICAgLkV4cG9y
dCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNh
bGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMikKKyAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAg
LlRocm93KDApCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMu
Y2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMg
c2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RMaXZlQWZ0ZXJUcnlDYXRj
aEFsbCgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQo
KQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0
dXJlKHsgcGFyYW1zOiBbXSB9KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNh
bGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAg
ICAgICAgIC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAg
ICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNh
dGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3Nz
aWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0VW5pZnlUcnlDYXRjaENhdGNoKCkgeworICAgIGNv
bnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKQorICAgICAgICAgICAgLlNpZ25hdHVy
ZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0p
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVGhyb3coMSkKKyAgICAgICAg
ICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAg
ICAgICAgICAgICAgLkNhdGNoKDEpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQor
ICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQo
KQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3Qg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNl
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5l
cShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20g
dGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0
ZXN0VW5pZnlUcnlDYXRjaENhdGNoQWxsKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAg
IC5FeGNlcHRpb24oKQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAg
ICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBh
cmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAg
ICAgICAgICAgICAgICAgICAuVGhyb3coMSkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAg
ICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkNhdGNoQWxs
KCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMu
Y2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMg
c2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RVbmlmeVRyeU5vVGhyb3co
KSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpCisgICAgICAgICAg
ICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBh
cmFtczogW10gfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQor
ICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25z
dCgyKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOwor
ICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25z
dCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAg
ICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBv
cnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKwor
ZnVuY3Rpb24gdGVzdFVuaWZ5VHJ5Tm9DYXRjaCgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxk
ZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0p
CisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikK
KyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9
IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5z
dGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2Fs
bCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hv
dWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3ROZXN0ZWRDYXRjaCAoKXsKKyAg
ICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAu
RnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1z
OiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7
IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5HZXRMb2Nh
bCgwKQorICAgICAgICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAu
VGhyb3coMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAg
ICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAg
ICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgLlRocm93
KDApCisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisgICAgY29uc3QgYmluID0gYi5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5j
ZShtb2R1bGUpOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbiwgIndhc20gZXhjZXB0aW9uIik7Cit9CisKK3Rlc3RTaW1wbGVU
cnlDYXRjaCgpOwordGVzdFNpbXBsZVRyeUNhdGNoQWxsKCk7Cit0ZXN0U2ltcGxlVHJ5Q2F0Y2hW
YWx1ZSgpOwordGVzdENhbGxUcnlDYXRjaCgpOwordGVzdENhbGxUcnlDYXRjaEFsbCgpOwordGVz
dENhbGxUcnlDYXRjaFZhbHVlKCk7Cit0ZXN0TGl2ZUFmdGVyVHJ5Q2F0Y2goKTsKK3Rlc3RMaXZl
QWZ0ZXJUcnlDYXRjaEFsbCgpOwordGVzdFVuaWZ5VHJ5Q2F0Y2hDYXRjaCgpOwordGVzdFVuaWZ5
VHJ5Q2F0Y2hDYXRjaEFsbCgpOwordGVzdFVuaWZ5VHJ5Tm9UaHJvdygpOwordGVzdFVuaWZ5VHJ5
Tm9DYXRjaCgpOworCisvLyBUT0RPOiBlbmFibGUgdGhpcyB0ZXN0CisvLyB0ZXN0U3RhY2tUcnlD
YXRjaCgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3du
LWZyb20tanMtdG8td2FzbS1jYXRjaGFsbC1yZXRocm93LmpzIGIvSlNUZXN0cy93YXNtL3N0cmVz
cy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS1jYXRjaGFsbC1yZXRocm93LmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZiNGMzMGQ5MWFjNmJhMzc1NDEwNDdiYzY1MjNmYWJhZjExYmI0MmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1q
cy10by13YXNtLWNhdGNoYWxsLXJldGhyb3cuanMKQEAgLTAsMCArMSw0MSBAQAoraW1wb3J0IEJ1
aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9h
c3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUo
KS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2si
LCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5k
KCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNl
cHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAg
ICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAg
ICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAg
ICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlJldGhyb3coMCkKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25z
dCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxl
dCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkg
eworICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAg
IH0KKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJs
eS5FeGNlcHRpb24pOworCisgICAgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRl
cnM6IFtdIH0pOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNz
L2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLWNhdGNoYWxsLmpzIGIvSlNUZXN0cy93
YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS1jYXRjaGFsbC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zN2U0YTQ0YjFmZWM0MTZkMzg0Yzc5NDk5Zjk4YmY5NDY2OWNiNjRjCi0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20t
anMtdG8td2FzbS1jYXRjaGFsbC5qcwpAQCAtMCwwICsxLDQwIEBACitpbXBvcnQgQnVpbGRlciBm
cm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5q
cycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigi
Zm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAg
LlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5J
MzJDb25zdCgxKQorICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
IC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGlu
c3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNh
bGxiYWNrIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKworICAg
IGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhj
ZXB0aW9uKHRhZywgW10pOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRz
LmNhbGwoKSwgMiwgImNhdGNoX2FsbGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJv
bSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKKworICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5U
YWcoeyBwYXJhbWV0ZXJzOiBbXSB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRz
LmNhbGwoKSwgMiwgImNhdGNoX2FsbGluZyBhbiBvcGFxdWUgd2FzbSB0YWcgdGhyb3duIGZyb20g
SlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3Ry
ZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLmpzIGIvSlNUZXN0cy93YXNtL3N0
cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NTAx
OTIwMGM5ZmQ5ZjJmNjFmYWI0Mzg3NDA2ZTg2NmJjMzJmNzY5Ci0tLSAvZGV2L251bGwKKysrIGIv
SlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS5qcwpA
QCAtMCwwICsxLDQwIEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1w
b3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBu
ZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5j
dGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSku
RW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNp
Z25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24o
ImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAg
ICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAg
LkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmlu
ID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5J
bnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBsZXQgdGFn
ID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAg
ICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9CisK
KyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBl
eHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKKwor
ICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbXSB9KTsKKworICAg
IGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRp
b24pOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3du
LW91dC1vZi13YXNtLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLW91
dC1vZi13YXNtLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4ZTMzMDFlM2I4MDAzYTUyYTJkZTYzMzU4Njc2OWZm
ODkwODJmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlv
bi10aHJvd24tb3V0LW9mLXdhc20uanMKQEAgLTAsMCArMSwyNCBAQAoraW1wb3J0IEJ1aWxkZXIg
ZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQu
anMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQo
KQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0
dXJlKHsgcGFyYW1zOiBbXSB9KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNh
bGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuSTMy
Q29uc3QoMSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworICAgIGNvbnN0
IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1i
bHkuSW5zdGFuY2UobW9kdWxlKTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93
YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLW92ZXItd2FzbS5qcyBiL0pTVGVzdHMvd2FzbS9z
dHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdmVyLXdhc20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTlmNGMyZTkw
MzFlOWVkNDlkZTY5NzFjOTcxYjY0MGJlZTI0YWZjMwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVz
dHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdmVyLXdhc20uanMKQEAgLTAsMCArMSwz
MCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFz
c2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIo
KTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRl
eHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBw
YXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAg
ICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAu
Q29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDog
ImkzMiIgfSkKKyAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAuSTMyQ29uc3QoMSkK
KyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0g
Yi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0
YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBmdW5jdGlvbiBj
YWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbihpbnN0
YW5jZS5leHBvcnRzLmZvbywgW10pOworICAgIH0KKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFu
Y2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24sICJ3YXNtIGV4Y2VwdGlvbiIp
OworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdHJhcC5qcyBi
L0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRyYXAuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGZkZjUz
ZWI1MDVjMzkwYjQwYmYxNTM1NWI2ZDUzNzJlNTYwZTkxYgotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRyYXAuanMKQEAgLTAsMCArMSwxMzQgQEAKK2lt
cG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJv
bSAnLi4vYXNzZXJ0LmpzJworCitmdW5jdGlvbiB0ZXN0Q2Fubm90Q2F0Y2hVbnJlYWNoYWJsZSgp
IHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgIC5GdW5j
dGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAg
ICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVW5yZWFjaGFibGUoKQor
ICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25z
dCgxKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
IC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGlu
c3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7CisKKyAgICBhc3NlcnQu
dGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAi
VW5yZWFjaGFibGUgY29kZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIik7Cit9CisKK2Z1bmN0aW9u
IHRlc3RDYW5ub3RDYXRjaE9PQigpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAg
ICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuTWVt
b3J5KCkKKyAgICAgICAgICAgIC5Jbml0aWFsTWF4UGFnZXMoMCwgMSkKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAg
LkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsg
cGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisg
ICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxMDI0KQorICAgICAgICAgICAgICAgICAgICAu
STMyTG9hZCgwLCAwKQorICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7
CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHku
UnVudGltZUVycm9yLCAiT3V0IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNzIik7Cit9CisKK2Z1bmN0
aW9uIHRlc3RXYXNtQVBJVGhyb3coKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Cisg
ICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0Iiwg
ImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAu
RnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAg
ICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5j
ZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBmdW5jdGlvbiBjYWxs
YmFjaygpIHsKKyAgICAgICAgbmV3IFdlYkFzc2VtYmx5Lkdsb2JhbCh7CisgICAgICAgICAgICB2
YWx1ZTogJ2FueWZ1bmMnCisgICAgICAgIH0sIHt9KTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEo
aW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDEpOworfQorZnVuY3Rpb24gdGVzdEpTQ2F0Y2hBbmRS
ZXRocm93KCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsg
cGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5k
KCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxs
IiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5
KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAg
ICAgICAgLkkzMkVxeigpCisgICAgICAgICAgICAgICAgICAgIC5JZigidm9pZCIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAuVW5yZWFjaGFibGUoKQorICAgICAgICAgICAgICAgICAgICAuRWxz
ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAg
ICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAg
ICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKwor
ICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOwor
CisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBp
bnN0YW5jZS5leHBvcnRzLmNhbGwoMCk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAg
ICAgdGhyb3cgZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzc2VydC50aHJvd3MoKCkgPT4g
aW5zdGFuY2UuZXhwb3J0cy5jYWxsKDEpLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsICJVbnJl
YWNoYWJsZSBjb2RlIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQiKTsKK30KKwordGVzdENhbm5vdENh
dGNoVW5yZWFjaGFibGUoKTsKK3Rlc3RDYW5ub3RDYXRjaE9PQigpOwordGVzdFdhc21BUElUaHJv
dygpOwordGVzdEpTQ2F0Y2hBbmRSZXRocm93KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
c3RyZXNzL3JldGhyb3ctZnJvbS1jYXRjaC10by1jYXRjaC5qcyBiL0pTVGVzdHMvd2FzbS9zdHJl
c3MvcmV0aHJvdy1mcm9tLWNhdGNoLXRvLWNhdGNoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkZmRhNmQ4YTY5
MTE4NGQ5OTk1NTVkMThlOGQ5ZWU1MWJlNGFlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3dhc20vc3RyZXNzL3JldGhyb3ctZnJvbS1jYXRjaC10by1jYXRjaC5qcwpAQCAtMCwwICsxLDQ1
IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNz
ZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4
dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBh
cmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAg
ICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
aTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgIC5UcnkoImkzMiIp
CisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkK
KyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAg
ICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
IC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRh
ZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7Cisg
ICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAgfQor
CisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKKworICAgIHRhZyA9
IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbXSB9KTsKKworICAgIGFzc2VydC50
aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LXRvLWNhdGNoLmpzIGIvSlNU
ZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LXRvLWNhdGNoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmMWNiYTQz
ZGNiNWI0NGQ5YWU2NGZkYzU3OWEwYzhhNjU1MDNmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3dhc20vc3RyZXNzL3JldGhyb3ctdG8tY2F0Y2guanMKQEAgLTAsMCArMSw4OCBAQAoraW1w
b3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9t
ICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBi
LlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2Fs
bGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtd
fSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAg
IC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAg
ICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAg
ICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAg
ICAgICAgIC5SZXRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5DYXRj
aCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRhZyA9IGlu
c3RhbmNlLmV4cG9ydHMuZm9vOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAg
IHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAgfQorCisgICAg
YXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKKworICAgIHRhZyA9IG5ldyBX
ZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbXSB9KTsKKworICAgIGFzc2VydC50aHJvd3Mo
aW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQorCit7Cisg
ICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAg
LkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAu
RXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
YWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIi
KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlJldGhyb3coMCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAg
IGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBp
bnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBj
YWxsYmFjayB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAg
ICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4
Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsKCksIDMpOworCisgICAgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRl
cnM6IFtdIH0pOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNz
L3JldGhyb3ctdG8tZGVsZWdhdGUtdG8tY2F0Y2guanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3Jl
dGhyb3ctdG8tZGVsZWdhdGUtdG8tY2F0Y2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA0NzljMGNlYTIzYjYw
ZTM5NTVhMWI1MTc0OTFmYjRmNzZlZTdhZAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2Fz
bS9zdHJlc3MvcmV0aHJvdy10by1kZWxlZ2F0ZS10by1jYXRjaC5qcwpAQCAtMCwwICsxLDI1OSBA
QAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2Vy
dCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsK
KyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5j
dGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkK
KyAgICAgICAgICAgIC5FeGNlcHRpb24oImNvbnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMy
Il0sIHJldDogInZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5F
bmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgp
CisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0
aW9uKCJmb28iLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAg
ICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQor
ICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgICAg
IC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAgICAgICAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQorICAgICAgICAgICAgLkNhdGNoKDEpCisg
ICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3Nl
bWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YmluKTsKKyAgICBsZXQgb3RoZXJUYWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVy
czogWyJpMzIiXX0pCisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2ssIHRhZzogb3RoZXJUYWcgfX0pOworCisg
ICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworICAgIGxldCBhcmdzID0gW107CisK
KyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5
LkV4Y2VwdGlvbih0YWcsIGFyZ3MpOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5l
eHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0YWcgPSBvdGhlclRhZzsKKyAgICBhcmdzID0gWzEw
MF07CisKKyAgICBsZXQgZXhuID0gYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGws
IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgICAgYXNzZXJ0LmVxKGV4bi5nZXRBcmcodGFnLCAw
KSwgMTAwKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250
ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAg
ICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJ0YWciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAi
dm9pZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIs
IDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5Ucnko
ImkzMiIpCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAg
LkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAg
ICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMSkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgICAgICAgICAgLlJldGhyb3coMSkK
KyAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkK
KworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1v
ZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgb3RoZXJUYWcgPSBu
ZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIiXX0pCisgICAgY29uc3QgaW5z
dGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2Fs
bGJhY2ssIHRhZzogb3RoZXJUYWcgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9y
dHMuZm9vOworICAgIGxldCBhcmdzID0gW107CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsK
KyAgICAgICAgbGV0IGV4biA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBhcmdzKTsK
KyAgICAgICAgdGFnID0gb3RoZXJUYWc7CisgICAgICAgIGFyZ3MgPSBbMTAwXTsKKyAgICAgICAg
dGhyb3cgZXhuOworICAgIH0KKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5j
YWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBC
dWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAg
ICAgICAuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDog
InZvaWQiIH0pCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJjb250ZXh0IiwgInRhZyIsIHsgcGFy
YW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczog
W119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAg
ICAgLkV4Y2VwdGlvbigiZm9vIiwgMSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9
KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQor
ICAgICAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAgICAg
LkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAg
ICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMy
IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhdGNo
QWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuUmV0aHJvdygxKQorICAgICAgICAgICAgICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5EZWxl
Z2F0ZSgxKQorICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMykKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5F
bmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29u
c3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGxldCBvdGhlclRh
ZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbImkzMiJdfSkKKyAgICBjb25z
dCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDog
eyBjYWxsYmFjaywgdGFnOiBvdGhlclRhZyB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2Uu
ZXhwb3J0cy5mb287CisgICAgbGV0IGFyZ3MgPSBbXTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNr
KCkgeworICAgICAgICBsZXQgZXhuID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIGFy
Z3MpOworICAgICAgICB0YWcgPSBvdGhlclRhZzsKKyAgICAgICAgYXJncyA9IFsxMDBdOworICAg
ICAgICB0aHJvdyBleG47CisgICAgfQorCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBv
cnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9CisKKworeworICAgIGNvbnN0IGIg
PSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtd
LCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJ0YWci
LCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBw
YXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAg
ICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAu
Q29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDog
ImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLlRyeSgi
aTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAg
ICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5J
MzJDb25zdCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgLlJldGhyb3coMCkKKyAgICAgICAg
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgLkRlbGVnYXRlKDApCisgICAgICAg
ICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7
CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGxl
dCBvdGhlclRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbImkzMiJdfSkK
KyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsg
Y29udGV4dDogeyBjYWxsYmFjaywgdGFnOiBvdGhlclRhZyB9fSk7CisKKyAgICBsZXQgdGFnID0g
b3RoZXJUYWc7CisgICAgbGV0IGFyZ3MgPSBbMTAwXTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNr
KCkgeworICAgICAgICBsZXQgZXhuID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIGFy
Z3MpOworICAgICAgICB0aHJvdyBleG47CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNl
LmV4cG9ydHMuY2FsbCgpLCAxMDApOworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVy
KCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQi
IH0pCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJjb250ZXh0IiwgInRhZyIsIHsgcGFyYW1zOiBb
ImkzMiJdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9u
KCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4
Y2VwdGlvbigiZm9vIiwgMSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAg
ICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAg
ICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwo
MCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAg
ICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuUmV0aHJvdygxKQorICAgICAgICAgICAgICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgw
KQorICAgICAgICAgICAgLkNhdGNoKDEpCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKwor
CisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVs
ZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgb3RoZXJUYWcgPSBuZXcg
V2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIiXX0pCisgICAgY29uc3QgaW5zdGFu
Y2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJh
Y2ssIHRhZzogb3RoZXJUYWcgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMu
Zm9vOworICAgIGxldCBhcmdzID0gW107CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAg
ICAgICAgbGV0IGV4biA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBhcmdzKTsKKyAg
ICAgICAgdGFnID0gb3RoZXJUYWc7CisgICAgICAgIGFyZ3MgPSBbMTAwXTsKKyAgICAgICAgdGhy
b3cgZXhuOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwg
Myk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL3NpbXBsZS1leHBvcnQtZXhj
ZXB0aW9uLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9zaW1wbGUtZXhwb3J0LWV4Y2VwdGlvbi5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yYjk2OTk5NzUzZDNhNGFkMDg2YTBlY2U1ODk4Mjg0ZjhmY2I4YjcwCi0t
LSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9zaW1wbGUtZXhwb3J0LWV4Y2Vw
dGlvbi5qcwpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVy
LmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNv
bnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFsi
aTMyIl19KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRXhjZXB0aW9uKCJmb28iLCAwKS5FbmQo
KQorCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1v
ZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworCisgICAgYXNzZXJ0Lmluc3RhbmNl
b2YoaW5zdGFuY2UuZXhwb3J0cy5mb28sIFdlYkFzc2VtYmx5LlRhZyk7Cit9CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vdjgvTElDRU5TRSBiL0pTVGVzdHMvd2FzbS92OC9MSUNFTlNFCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjUzZDljNDdlMzNjMTgyOTI3NDFmMWU0MDg5MGM4ZmUyZDYyOTk2NDYKLS0tIC9kZXYv
bnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvTElDRU5TRQpAQCAtMCwwICsxLDYyIEBACitUaGlz
IGxpY2Vuc2UgYXBwbGllcyB0byBhbGwgcGFydHMgb2YgVjggdGhhdCBhcmUgbm90IGV4dGVybmFs
bHkKK21haW50YWluZWQgbGlicmFyaWVzLiAgVGhlIGV4dGVybmFsbHkgbWFpbnRhaW5lZCBsaWJy
YXJpZXMgdXNlZCBieSBWOAorYXJlOgorCisgIC0gUENSRSB0ZXN0IHN1aXRlLCBsb2NhdGVkIGlu
CisgICAgdGVzdC9tanN1bml0L3RoaXJkX3BhcnR5L3JlZ2V4cC1wY3JlL3JlZ2V4cC1wY3JlLmpz
LiAgVGhpcyBpcyBiYXNlZCBvbiB0aGUKKyAgICB0ZXN0IHN1aXRlIGZyb20gUENSRS03LjMsIHdo
aWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBVbml2ZXJzaXR5CisgICAgb2YgQ2FtYnJpZGdlIGFu
ZCBHb29nbGUsIEluYy4gIFRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCisgICAgYXJl
IGVtYmVkZGVkIGluIHJlZ2V4cC1wY3JlLmpzLgorCisgIC0gTGF5b3V0IHRlc3RzLCBsb2NhdGVk
IGluIHRlc3QvbWpzdW5pdC90aGlyZF9wYXJ0eS9vYmplY3Qta2V5cy4gIFRoZXNlIGFyZQorICAg
IGJhc2VkIG9uIGxheW91dCB0ZXN0cyBmcm9tIHdlYmtpdC5vcmcgd2hpY2ggYXJlIGNvcHlyaWdo
dGVkIGJ5CisgICAgQXBwbGUgQ29tcHV0ZXIsIEluYy4gYW5kIHJlbGVhc2VkIHVuZGVyIGEgMy1j
bGF1c2UgQlNEIGxpY2Vuc2UuCisKKyAgLSBTdHJvbmd0YWxrIGFzc2VtYmxlciwgdGhlIGJhc2lz
IG9mIHRoZSBmaWxlcyBhc3NlbWJsZXItYXJtLWlubC5oLAorICAgIGFzc2VtYmxlci1hcm0uY2Ms
IGFzc2VtYmxlci1hcm0uaCwgYXNzZW1ibGVyLWlhMzItaW5sLmgsCisgICAgYXNzZW1ibGVyLWlh
MzIuY2MsIGFzc2VtYmxlci1pYTMyLmgsIGFzc2VtYmxlci14NjQtaW5sLmgsCisgICAgYXNzZW1i
bGVyLXg2NC5jYywgYXNzZW1ibGVyLXg2NC5oLCBhc3NlbWJsZXItbWlwcy1pbmwuaCwKKyAgICBh
c3NlbWJsZXItbWlwcy5jYywgYXNzZW1ibGVyLW1pcHMuaCwgYXNzZW1ibGVyLmNjIGFuZCBhc3Nl
bWJsZXIuaC4KKyAgICBUaGlzIGNvZGUgaXMgY29weXJpZ2h0ZWQgYnkgU3VuIE1pY3Jvc3lzdGVt
cyBJbmMuIGFuZCByZWxlYXNlZAorICAgIHVuZGVyIGEgMy1jbGF1c2UgQlNEIGxpY2Vuc2UuCisK
KyAgLSBWYWxncmluZCBjbGllbnQgQVBJIGhlYWRlciwgbG9jYXRlZCBhdCBzcmMvdGhpcmRfcGFy
dHkvdmFsZ3JpbmQvdmFsZ3JpbmQuaAorICAgIFRoaXMgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEJT
RCBsaWNlbnNlLgorCisgIC0gVGhlIFdhc20gQy9DKysgQVBJIGhlYWRlcnMsIGxvY2F0ZWQgYXQg
dGhpcmRfcGFydHkvd2FzbS1hcGkvd2FzbS57aCxoaH0KKyAgICBUaGlzIGlzIHJlbGVhc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgbGljZW5zZS4gVGhlIEFQSSdzIHVwc3RyZWFtIHByb3RvdHlwZQorICAg
IGltcGxlbWVudGF0aW9uIGFsc28gZm9ybWVkIHRoZSBiYXNpcyBvZiBWOCdzIGltcGxlbWVudGF0
aW9uIGluCisgICAgc3JjL3dhc20vYy1hcGkuY2MuCisKK1RoZXNlIGxpYnJhcmllcyBoYXZlIHRo
ZWlyIG93biBsaWNlbnNlczsgd2UgcmVjb21tZW5kIHlvdSByZWFkIHRoZW0sCithcyB0aGVpciB0
ZXJtcyBtYXkgZGlmZmVyIGZyb20gdGhlIHRlcm1zIGJlbG93LgorCitGdXJ0aGVyIGxpY2Vuc2Ug
aW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgZmlsZXMgbG9jYXRlZCBpbiAKK3N1
Yi1kaXJlY3Rvcmllcy4KKworQ29weXJpZ2h0IDIwMTQsIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKwor
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgICBkaXNjbGFpbWVy
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
CitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4
Y2VwdGlvbnMtYXBpLmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtYXBpLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjkxZDUzNjgxNDU2YzY1ZWM4NjcxOGI4NWUxYWZkNmZjMGZkODk3NjUKLS0tIC9kZXYv
bnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1hcGkuanMKQEAgLTAsMCArMSwy
MzIgQEAKKy8vIENvcHlyaWdodCAyMDIxIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorCisvLyBGbGFnczogLS1leHBlcmltZW50YWwtd2FzbS1laCAtLWV4cGVyaW1lbnRhbC13
YXNtLXJlZnR5cGVzCisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKKworKGZ1bmN0
aW9uIFRlc3RJbXBvcnQoKSB7CisKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJs
eS5UYWcoKSwgVHlwZUVycm9yLAorICAgICAgL2V4cGVjdHMgdGhlIHRhZyB0eXBlIGFzIHRoZSBm
aXJzdCBhcmd1bWVudC8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5LlRh
Zyh7fSksIFR5cGVFcnJvciwKKyAgICAgIC9leHBlY3RzIGEgdGFnIHR5cGUgd2l0aCB0aGUgJ3Bh
cmFtZXRlcnMnIHByb3BlcnR5Lyk7CisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuVGFnKHtwYXJhbWV0ZXJzOiBbJ2ZvbyddfSksIFR5cGVFcnJvciwKKyAgICAgIC9leHBlY3Rz
IHRoZSAncGFyYW1ldGVycycgZmllbGQgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgc2Vx
dWVuY2Ugb2YgV2ViQXNzZW1ibHkgdmFsdWUgdHlwZXMvKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+
IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IHt9fSksIFR5cGVFcnJvciwKKyAgICAg
IC9UeXBlIGVycm9yLyk7CisKKyAgbGV0IGpzX2V4Y2VwdF9pMzIgPSBuZXcgV2ViQXNzZW1ibHku
VGFnKHtwYXJhbWV0ZXJzOiBbJ2kzMiddfSk7CisgIGxldCBqc19leGNlcHRfdiA9IG5ldyBXZWJB
c3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFtdfSk7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21N
b2R1bGVCdWlsZGVyKCk7CisgIGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2ln
X3ZfaSk7CisKKyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUo
eyBtOiB7IGV4OiBqc19leGNlcHRfaTMyIH19KSk7CisgIGFzc2VydFRocm93cygKKyAgICAgICgp
ID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4OiBqc19leGNlcHRfdiB9fSksIFdlYkFz
c2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9pbXBvcnRlZCBUYWcgbTpleCBzaWduYXR1cmUgZG9l
c24ndCBtYXRjaCB0aGUgaW1wb3J0ZWQgV2ViQXNzZW1ibHkgVGFnJ3Mgc2lnbmF0dXJlLyk7Cisg
IGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4
OiBqc19leGNlcHRfdiB9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9pbXBvcnRl
ZCBUYWcgbTpleCBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgaW1wb3J0ZWQgV2ViQXNzZW1i
bHkgVGFnJ3Mgc2lnbmF0dXJlLyk7CisgIGFzc2VydFRydWUoanNfZXhjZXB0X2kzMi50b1N0cmlu
ZygpID09ICJbb2JqZWN0IFdlYkFzc2VtYmx5LlRhZ10iKTsKK30pKCk7CisKKyhmdW5jdGlvbiBU
ZXN0RXhwb3J0KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOwor
ICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4
cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9
IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRUcnVlKE9iamVjdC5wcm90b3R5cGUu
aGFzT3duUHJvcGVydHkuY2FsbChpbnN0YW5jZS5leHBvcnRzLCAnZXgnKSk7CisgIGFzc2VydEVx
dWFscygib2JqZWN0IiwgdHlwZW9mIGluc3RhbmNlLmV4cG9ydHMuZXgpOworICBhc3NlcnRJbnN0
YW5jZW9mKGluc3RhbmNlLmV4cG9ydHMuZXgsIFdlYkFzc2VtYmx5LlRhZyk7CisgIGFzc2VydFNh
bWUoaW5zdGFuY2UuZXhwb3J0cy5leC5jb25zdHJ1Y3RvciwgV2ViQXNzZW1ibHkuVGFnKTsKK30p
KCk7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0RXhwb3J0KCkgeworCisgIGxldCBqc19leF9pMzIg
PSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbJ2kzMiddfSk7CisgIGxldCBidWls
ZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBpbmRleCA9IGJ1aWxkZXIuYWRk
SW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3ZfaSk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZL
aW5kKCJleCIsIGtFeHRlcm5hbFRhZywgaW5kZXgpOworCisgIGxldCBpbnN0YW5jZSA9IGJ1aWxk
ZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4OiBqc19leF9pMzIgfX0pOworICBsZXQgcmVzID0gaW5z
dGFuY2UuZXhwb3J0cy5leDsKKyAgYXNzZXJ0RXF1YWxzKHJlcywganNfZXhfaTMyKTsKK30pKCk7
CisKKworKGZ1bmN0aW9uIFRlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcigpIHsKKyAgLy8gQ2hlY2sg
ZXJyb3JzLgorICBsZXQganNfdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczog
W119KTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oMCks
IFR5cGVFcnJvciwKKyAgICAgIC9XZWJBc3NlbWJseS5FeGNlcHRpb24gY29uc3RydWN0b3IgZXhw
ZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBXZWJBc3NlbWJseS5UYWcvKTsKKyAgYXNz
ZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oe30pLCBUeXBlRXJyb3Is
CisgICAgICAvV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlIGZp
cnN0IGFyZ3VtZW50IHRvIGJlIGEgV2ViQXNzZW1ibHkuVGFnLyk7CisgIGFzc2VydFRocm93cygo
KSA9PiBXZWJBc3NlbWJseS5FeGNlcHRpb24oanNfdGFnKSwgVHlwZUVycm9yLAorICAgICAgL2Nh
bGxpbmcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGNvbnN0cnVjdG9yIHdpdGhvdXQgbmV3IGlzIGlu
dmFsaWQvKTsKKyAgbGV0IGpzX2V4Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24o
anNfdGFnLCBbXSk7CisKKyAgLy8gQ2hlY2sgcHJvdG90eXBlLgorICBhc3NlcnRTYW1lKFdlYkFz
c2VtYmx5LkV4Y2VwdGlvbi5wcm90b3R5cGUsIGpzX2V4Y2VwdGlvbi5fX3Byb3RvX18pOworICBh
c3NlcnRUcnVlKGpzX2V4Y2VwdGlvbiBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7
CisKKyAgLy8gQ2hlY2sgcHJvdG90eXBlIG9mIGEgdGhyb3duIGV4Y2VwdGlvbi4KKyAgbGV0IGJ1
aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IHdhc21fdGFnID0gYnVpbGRl
ci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIGtTaWdf
dl92KQorICAgICAgLmFkZEJvZHkoW2tFeHByVGhyb3csIHdhc21fdGFnXSkuZXhwb3J0RnVuYygp
OworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIHRyeSB7CisgICAg
aW5zdGFuY2UuZXhwb3J0cy50aHJvdygpOworICB9IGNhdGNoIChlKSB7CisgICAgYXNzZXJ0VHJ1
ZShlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgfQorfSkoKTsKKworKGZ1
bmN0aW9uIFRlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcldpdGhQYXlsb2FkKCkgeworICBsZXQgdGFn
ID0gbmV3IFdlYkFzc2VtYmx5LlRhZygKKyAgICAgIHtwYXJhbWV0ZXJzOiBbJ2kzMicsICdmMzIn
LCAnaTY0JywgJ2Y2NCcsICdleHRlcm5yZWYnXX0pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbigKKyAgICAgIHRhZywgWzFuLCAyLCAzbiwgNCwge31dKSwg
VHlwZUVycm9yKTsKKyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+IG5ldyBXZWJBc3NlbWJseS5F
eGNlcHRpb24odGFnLCBbMywgNCwgNW4sIDYsIHt9XSkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRl
c3RDYXRjaEpTRXhjZXB0aW9uKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVp
bGRlcigpOworICBsZXQganNfdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczog
W119KTsKKyAgbGV0IGpzX2Z1bmNfaW5kZXggPSBidWlsZGVyLmFkZEltcG9ydCgnbScsICdqc19m
dW5jJywga1NpZ192X3YpOworICBsZXQganNfdGFnX2luZGV4ID0gYnVpbGRlci5hZGRJbXBvcnRl
ZFRhZygibSIsICJqc190YWciLCBrU2lnX3Zfdik7CisgIGxldCB0YWdfaW5kZXggPSBidWlsZGVy
LmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJ3YXNtX3RhZyIs
IGtFeHRlcm5hbFRhZywgdGFnX2luZGV4KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2gi
LCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMy
LAorICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwganNfZnVuY19pbmRleCwKKyAgICAgICAga0V4
cHJJMzJDb25zdCwgMCwKKyAgICAgICAga0V4cHJDYXRjaCwganNfdGFnX2luZGV4LAorICAgICAg
ICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICBrRXhwckNhdGNoLCB0YWdfaW5kZXgsCisgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRG
dW5jKCk7CisgIGxldCB0YWc7CisgIGZ1bmN0aW9uIGpzX2Z1bmMoKSB7CisgICAgdGhyb3cgbmV3
IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsKKyAgfQorICBsZXQgaW5zdGFuY2UgPSBi
dWlsZGVyLmluc3RhbnRpYXRlKHttOiB7anNfZnVuYywganNfdGFnfX0pOworICB0YWcgPSBqc190
YWc7CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoKCkpOworICB0YWcg
PSBpbnN0YW5jZS5leHBvcnRzLndhc21fdGFnOworICBhc3NlcnRFcXVhbHMoMiwgaW5zdGFuY2Uu
ZXhwb3J0cy5jYXRjaCgpKTsKK30pKCk7CisKK2Z1bmN0aW9uIFRlc3RDYXRjaEpTKHR5cGVzX3N0
ciwgdHlwZXMsIHZhbHVlcykgeworICAvLyBDcmVhdGUgYSBKUyBleGNlcHRpb24sIGNhdGNoIGl0
IGluIHdhc20gYW5kIGNoZWNrIHRoZSB1bnBhY2tlZCB2YWx1ZShzKS4KKyAgbGV0IGJ1aWxkZXIg
PSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGpzX3RhZyA9IG5ldyBXZWJBc3NlbWJs
eS5UYWcoe3BhcmFtZXRlcnM6IHR5cGVzX3N0cn0pOworICBsZXQganNfZnVuY19pbmRleCA9IGJ1
aWxkZXIuYWRkSW1wb3J0KCdtJywgJ2pzX2Z1bmMnLCBrU2lnX3Zfdik7CisgIGxldCBzaWcxID0g
bWFrZVNpZyh0eXBlcywgW10pOworICBsZXQgc2lnMiA9IG1ha2VTaWcoW10sIHR5cGVzKTsKKyAg
bGV0IGpzX3RhZ19pbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAianNfdGFnIiwg
c2lnMSk7CisgIGxldCB0YWdfaW5kZXggPSBidWlsZGVyLmFkZFRhZyhzaWcxKTsKKyAgbGV0IHJl
dHVybl90eXBlID0gYnVpbGRlci5hZGRUeXBlKHNpZzIpOworICBidWlsZGVyLmFkZEV4cG9ydE9m
S2luZCgid2FzbV90YWciLCBrRXh0ZXJuYWxUYWcsIHRhZ19pbmRleCk7CisgIGJ1aWxkZXIuYWRk
RnVuY3Rpb24oImNhdGNoIiwgc2lnMikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJU
cnksIHJldHVybl90eXBlLAorICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwganNfZnVuY19pbmRl
eCwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAga0V4cHJDYXRjaCwganNfdGFn
X2luZGV4LAorICAgICAgICBrRXhwckNhdGNoLCB0YWdfaW5kZXgsCisgICAgICAgIGtFeHByRW5k
CisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBleGNlcHRpb247CisgIGZ1bmN0aW9uIGpz
X2Z1bmMoKSB7CisgICAgdGhyb3cgZXhjZXB0aW9uOworICB9CisgIGxldCBleHBlY3RlZCA9IHZh
bHVlcy5sZW5ndGggPT0gMSA/IHZhbHVlc1swXSA6IHZhbHVlczsKKyAgbGV0IGluc3RhbmNlID0g
YnVpbGRlci5pbnN0YW50aWF0ZSh7bToge2pzX2Z1bmMsIGpzX3RhZ319KTsKKyAgZXhjZXB0aW9u
ID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbihqc190YWcsIHZhbHVlcyk7CisgIGFzc2VydEVx
dWFscyhleHBlY3RlZCwgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaCgpKTsKKyAgZXhjZXB0aW9uID0g
bmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbihpbnN0YW5jZS5leHBvcnRzLndhc21fdGFnLCB2YWx1
ZXMpOworICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGluc3RhbmNlLmV4cG9ydHMuY2F0Y2goKSk7
Cit9CisKKyhmdW5jdGlvbiBUZXN0Q2F0Y2hKU0V4Y2VwdGlvbldpdGhQYXlsb2FkKCkgeworICBU
ZXN0Q2F0Y2hKUyhbJ2kzMiddLCBba1dhc21JMzJdLCBbMV0pOworICBUZXN0Q2F0Y2hKUyhbJ2k2
NCddLCBba1dhc21JNjRdLCBbMm5dKTsKKyAgVGVzdENhdGNoSlMoWydmMzInXSwgW2tXYXNtRjMy
XSwgWzNdKTsKKyAgVGVzdENhdGNoSlMoWydmNjQnXSwgW2tXYXNtRjY0XSwgWzRdKTsKKyAgVGVz
dENhdGNoSlMoWydleHRlcm5yZWYnXSwgW2tXYXNtRXh0ZXJuUmVmXSwgW3t2YWx1ZTogNX1dKTsK
KyAgVGVzdENhdGNoSlMoWydpMzInLCAnaTY0JywgJ2YzMicsICdmNjQnLCAnZXh0ZXJucmVmJ10s
CisgICAgICAgICAgICAgIFtrV2FzbUkzMiwga1dhc21JNjQsIGtXYXNtRjMyLCBrV2FzbUY2NCwg
a1dhc21FeHRlcm5SZWZdLAorICAgICAgICAgICAgICBbNiwgN24sIDgsIDksIHt2YWx1ZTogMTB9
XSk7Cit9KSgpOworCitmdW5jdGlvbiBUZXN0R2V0QXJnSGVscGVyKHR5cGVzX3N0ciwgdHlwZXMs
IHZhbHVlcykgeworICBsZXQgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczog
dHlwZXNfc3RyfSk7CisgIGxldCBleGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9u
KHRhZywgdmFsdWVzKTsKKyAgZm9yIChpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7Cisg
ICAgYXNzZXJ0RXF1YWxzKGV4Y2VwdGlvbi5nZXRBcmcodGFnLCBpKSwgdmFsdWVzW2ldKTsKKyAg
fQorCisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBzaWcg
PSBtYWtlU2lnKHR5cGVzLCBbXSk7CisgIGxldCB0YWdfaW5kZXggPSBidWlsZGVyLmFkZEltcG9y
dGVkVGFnKCJtIiwgInQiLCBzaWcpOworICBsZXQgYm9keSA9IFtdOworICBmb3IgKGkgPSAwOyBp
IDwgdHlwZXMubGVuZ3RoOyArK2kpIHsKKyAgICBib2R5LnB1c2goa0V4cHJMb2NhbEdldCwgaSk7
CisgIH0KKyAgYm9keS5wdXNoKGtFeHByVGhyb3csIHRhZ19pbmRleCk7CisgIGJ1aWxkZXIuYWRk
RnVuY3Rpb24oInRocm93Iiwgc2lnKQorICAgICAgLmFkZEJvZHkoYm9keSkuZXhwb3J0RnVuYygp
OworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsnbSc6IHsndCc6IHRhZ319
KTsKKyAgdHJ5IHsKKyAgICBpbnN0YW5jZS5leHBvcnRzLnRocm93KC4uLnZhbHVlcyk7CisgIH0g
Y2F0Y2ggKGUpIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgIGFzc2VydEVxdWFscyhlLmdldEFyZyh0YWcsIGkpLCB2YWx1ZXNbaV0pOworICAgIH0KKyAg
fQorfQorCisoZnVuY3Rpb24gVGVzdEdldEFyZygpIHsKKyAgLy8gQ2hlY2sgZXJyb3JzLgorICBs
ZXQgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogWydpMzInXX0pOworICBs
ZXQgZXhjZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFswXSk7CisgIGFz
c2VydFRocm93cygoKSA9PiBleGNlcHRpb24uZ2V0QXJnKDAsIDApLCBUeXBlRXJyb3IsCisgICAg
ICAvRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIFdlYkFzc2VtYmx5LlRhZy8pOworICBhc3NlcnRU
aHJvd3MoKCkgPT4gZXhjZXB0aW9uLmdldEFyZyh7fSwgMCksIFR5cGVFcnJvciwKKyAgICAgIC9G
aXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuVGFnLyk7CisgIC8vYXNzZXJ0VGhy
b3dzKCgpID0+IGV4Y2VwdGlvbi5nZXRBcmcodGFnLCB1bmRlZmluZWQpLCBUeXBlRXJyb3IsCisg
ICAgICAvLy9JbmRleCBtdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgdmFsaWQgbnVtYmVyLyk7Cisg
IGFzc2VydFRocm93cygoKSA9PiBleGNlcHRpb24uZ2V0QXJnKHRhZywgMHhGRkZGRkZGRiksIFJh
bmdlRXJyb3IsCisgICAgICAvSW5kZXggb3V0IG9mIHJhbmdlLyk7CisgIGxldCB3cm9uZ190YWcg
PSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbJ2kzMiddfSk7CisgIGFzc2VydFRo
cm93cygoKSA9PiBleGNlcHRpb24uZ2V0QXJnKHdyb25nX3RhZywgMCksIFR5cGVFcnJvciwKKyAg
ICAgIC9GaXJzdCBhcmd1bWVudCBkb2VzIG5vdCBtYXRjaCB0aGUgZXhjZXB0aW9uIHRhZy8pOwor
CisgIC8vIENoZWNrIGRlY29kaW5nLgorICBUZXN0R2V0QXJnSGVscGVyKFsnaTMyJ10sIFtrV2Fz
bUkzMl0sIFsxXSk7CisgIFRlc3RHZXRBcmdIZWxwZXIoWydpNjQnXSwgW2tXYXNtSTY0XSwgWzJu
XSk7CisgIFRlc3RHZXRBcmdIZWxwZXIoWydmMzInXSwgW2tXYXNtRjMyXSwgWzNdKTsKKyAgVGVz
dEdldEFyZ0hlbHBlcihbJ2Y2NCddLCBba1dhc21GNjRdLCBbNF0pOworICBUZXN0R2V0QXJnSGVs
cGVyKFsnZXh0ZXJucmVmJ10sIFtrV2FzbUV4dGVyblJlZl0sIFt7dmFsOiA1fV0pOworICBUZXN0
R2V0QXJnSGVscGVyKFsnaTMyJywgJ2k2NCcsICdmMzInLCAnZjY0JywgJ2V4dGVybnJlZiddLCBb
a1dhc21JMzIsIGtXYXNtSTY0LCBrV2FzbUYzMiwga1dhc21GNjQsIGtXYXNtRXh0ZXJuUmVmXSwg
WzUsIDZuLCA3LCA4LCB7dmFsOiA5fV0pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RFeGNlcHRp
b25JcygpIHsKKyAgbGV0IHRhZzEgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBb
XX0pOworICBsZXQgdGFnMiA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFtdfSk7
CisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHt9LCBbXSks
IFR5cGVFcnJvciwKKyAgICAgIC9leHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIFdl
YkFzc2VtYmx5LlRhZy8pOworCisgIGxldCBleGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHkuRXhj
ZXB0aW9uKHRhZzEsIFtdKTsKKyAgYXNzZXJ0VHJ1ZShleGNlcHRpb24uaXModGFnMSkpOworICBh
c3NlcnRGYWxzZShleGNlcHRpb24uaXModGFnMikpOworCisgIGFzc2VydFRocm93cygoKSA9PiBl
eGNlcHRpb24uaXMuYXBwbHkoe30sIHRhZzEpLCBUeXBlRXJyb3IsCisgICAgICAvV2ViQXNzZW1i
bHkuRXhjZXB0aW9uIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLUV4Y2VwdGlvbiBvYmplY3QvKTsK
K30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1leHBvcnQuanMg
Yi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1leHBvcnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGM5Njkw
ZjViODhmN2U1NDNjZGM5M2Q5MWNjMWE4MTgzZDgzODNiZgotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWV4cG9ydC5qcwpAQCAtMCwwICsxLDUzIEBACisvLyBD
b3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8g
RmxhZ3M6IC0tZXhwb3NlLXdhc20gLS1leHBlcmltZW50YWwtd2FzbS1laAorCitsb2FkKCJ3YXNt
LW1vZHVsZS1idWlsZGVyLmpzIik7CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0TXVsdGlwbGUoKSB7
CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQx
ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIuYWRk
VGFnKGtTaWdfdl9pKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4MWEiLCBrRXh0ZXJu
YWxUYWcsIGV4Y2VwdDEpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgxYiIsIGtFeHRl
cm5hbFRhZywgZXhjZXB0MSk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDIiLCBrRXh0
ZXJuYWxUYWcsIGV4Y2VwdDIpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRl
KCk7CisKKyAgYXNzZXJ0VHJ1ZShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo
aW5zdGFuY2UuZXhwb3J0cywgJ2V4MWEnKSk7CisgIGFzc2VydFRydWUoT2JqZWN0LnByb3RvdHlw
ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGluc3RhbmNlLmV4cG9ydHMsICdleDFiJykpOworICBhc3Nl
cnRUcnVlKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnN0YW5jZS5leHBv
cnRzLCAnZXgyJykpOworICAvLyBGSVhNRTogZml4IGJyb2tlbiB2OCB3YXNtIGV4Y2VwdGlvbnMg
dGVzdHMKKyAgLy8gYXNzZXJ0U2FtZShpbnN0YW5jZS5leHBvcnRzLmV4MWEsIGluc3RhbmNlLmV4
cG9ydHMuZXgxYik7CisgIGFzc2VydE5vdFNhbWUoaW5zdGFuY2UuZXhwb3J0cy5leDFhLCBpbnN0
YW5jZS5leHBvcnRzLmV4Mik7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEV4cG9ydE91dE9mQm91
bmRzKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQg
ZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9m
S2luZCgiZXhfb29iIiwga0V4dGVybmFsVGFnLCBleGNlcHQgKyAxKTsKKyAgYXNzZXJ0VGhyb3dz
KAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSgpLCBXZWJBc3NlbWJseS5Db21waWxl
RXJyb3IsCisgICAgICAvV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAz
MTogMHRoIEV4cG9ydCBoYXMgaW52YWxpZCBleGNlcHRpb24gbnVtYmVyIDEgaXQgZXhjZWVkcyB0
aGUgZXhjZXB0aW9uIGluZGV4IHNwYWNlIDEsIG5hbWVkICdleF9vb2InLyk7Cit9KSgpOworCiso
ZnVuY3Rpb24gVGVzdEV4cG9ydFNhbWVOYW1lVHdpY2UoKSB7CisgIGxldCBidWlsZGVyID0gbmV3
IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2ln
X3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhj
ZXB0KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNl
cHQpOworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKCks
IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwKKyAgICAgIC9XZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDMwOiBkdXBsaWNhdGUgZXhwb3J0OiAnZXgnLyk7Cit9KSgpOwor
CisoZnVuY3Rpb24gVGVzdEV4cG9ydE1vZHVsZUdldEV4cG9ydHMoKSB7CisgIGxldCBidWlsZGVy
ID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRh
ZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRh
ZywgZXhjZXB0KTsKKyAgbGV0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci50b0J1ZmZlcigpKTsKKworICBsZXQgZXhwb3J0cyA9IFdlYkFzc2VtYmx5Lk1vZHVsZS5leHBv
cnRzKG1vZHVsZSk7CisgIGFzc2VydEFycmF5RXF1YWxzKFt7IG5hbWU6ICJleCIsIGtpbmQ6ICJ0
YWciIH1dLCBleHBvcnRzKTsKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhj
ZXB0aW9ucy1leHRlcm5yZWYuanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1leHRlcm5y
ZWYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZWJiZGEzN2YxNmViMTUwMzI0OTA5ZDZiNmM1MGZkYWE4ZDA0OGQ1
NAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWV4dGVybnJl
Zi5qcwpAQCAtMCwwICsxLDk2IEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVjdCBh
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwZXJpbWVudGFsLXdhc20tZWgg
LS1leHBlcmltZW50YWwtd2FzbS1yZWZ0eXBlcyAtLWFsbG93LW5hdGl2ZXMtc3ludGF4CisKK2xv
YWQoIndhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKK2xvYWQoImV4Y2VwdGlvbnMtdXRpbHMuanMi
KTsKKworLy8gVGVzdCB0aGUgZW5jb2Rpbmcgb2YgYSB0aHJvd24gZXhjZXB0aW9uIHdpdGggYSBu
dWxsLXJlZiB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dSZWZOdWxsKCkgeworICBsZXQgYnVp
bGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X3IpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19udWxsIiwga1Np
Z192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByUmVmTnVsbCwga0V4dGVyblJl
ZkNvZGUsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQp
OworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2Fz
bVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW251bGxdLCAoKSA9PiBpbnN0
YW5jZS5leHBvcnRzLnRocm93X251bGwoKSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nL2Nh
dGNoaW5nIHRoZSBudWxsLXJlZiB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFJlZk51
bGwoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBl
eGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfcik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24o
InRocm93X2NhdGNoX251bGwiLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAg
a0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAg
ICAga0V4cHJJMzJFcXosCisgICAgICAgICAga0V4cHJJZiwga1dhc21JMzIsCisgICAgICAgICAg
ICBrRXhwclJlZk51bGwsIGtFeHRlcm5SZWZDb2RlLAorICAgICAgICAgICAga0V4cHJUaHJvdywg
ZXhjZXB0LAorICAgICAgICAgIGtFeHByRWxzZSwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3Qs
IDQyLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisg
ICAgICAgICAga0V4cHJSZWZJc051bGwsCisgICAgICAgICAga0V4cHJJZiwga1dhc21JMzIsCisg
ICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyMywKKyAgICAgICAgICBrRXhwckVsc2UsCisgICAg
ICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBr
RXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktp
bmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVy
Lmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnRo
cm93X2NhdGNoX251bGwoMCkpOworICBhc3NlcnRFcXVhbHMoNDIsIGluc3RhbmNlLmV4cG9ydHMu
dGhyb3dfY2F0Y2hfbnVsbCgxKSk7Cit9KSgpOworCisvLyBUZXN0IHRoZSBlbmNvZGluZyBvZiBh
IHRocm93biBleGNlcHRpb24gd2l0aCBhIHJlZmVyZW5jZSB0eXBlIHZhbHVlLgorKGZ1bmN0aW9u
IFRlc3RUaHJvd1JlZlBhcmFtKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVp
bGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3IpOworICBidWls
ZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19wYXJhbSIsIGtTaWdfdl9yKQorICAgICAgLmFkZEJvZHko
WworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQs
CisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIs
IGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50
aWF0ZSgpOworICBsZXQgbyA9IG5ldyBPYmplY3QoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGlu
c3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbb10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMu
dGhyb3dfcGFyYW0obykpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5l
eHBvcnRzLmV4LCBbMV0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oMSkpOwor
ICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbMi4zXSwg
KCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSgyLjMpKTsKKyAgYXNzZXJ0V2FzbVRo
cm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWyJzdHIiXSwgKCkgPT4gaW5zdGFu
Y2UuZXhwb3J0cy50aHJvd19wYXJhbSgic3RyIikpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2lu
Zy9jYXRjaGluZyB0aGUgcmVmZXJlbmNlIHR5cGUgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93
Q2F0Y2hSZWZQYXJhbSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIo
KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9yKTsKKyAgYnVpbGRlci5h
ZGRGdW5jdGlvbigidGhyb3dfY2F0Y2hfcGFyYW0iLCBrU2lnX3JfcikKKyAgICAgIC5hZGRCb2R5
KFsKKyAgICAgICAga0V4cHJUcnksIGtFeHRlcm5SZWZDb2RlLAorICAgICAgICAgIGtFeHByTG9j
YWxHZXQsIDAsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICBrRXhwckNh
dGNoLCBleGNlcHQsCisgICAgICAgICAgLy8gZmFsbC10aHJvdWdoCisgICAgICAgIGtFeHByRW5k
LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgi
LCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoKTsKKyAgbGV0IG8gPSBuZXcgT2JqZWN0KCk7CisKKyAgYXNzZXJ0RXF1YWxzKG8sIGlu
c3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0obykpOworICBhc3NlcnRFcXVhbHMoMSwg
aW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgxKSk7CisgIGFzc2VydEVxdWFscygy
LjMsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oMi4zKSk7CisgIGFzc2VydEVx
dWFscygic3RyIiwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgic3RyIikpOwor
fSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWltcG9ydC5qcyBi
L0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWltcG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTRmMGEw
NTZiZmNmN2NjMDMzNWVkZmIwYzcxMmU1NWI1ZTcxYTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtaW1wb3J0LmpzCkBAIC0wLDAgKzEsOTAgQEAKKy8vIENv
cHlyaWdodCAyMDE4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBG
bGFnczogLS1leHBvc2Utd2FzbSAtLWV4cGVyaW1lbnRhbC13YXNtLWVoCisKK2xvYWQoIndhc20t
bW9kdWxlLWJ1aWxkZXIuanMiKTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJldHVybiBhIG5l
dyBleHBvcnRlZCBleGNlcHRpb24gd2l0aCB0aGUge2tTaWdfdl92fSB0eXBlCisvLyBzaWduYXR1
cmUgZnJvbSBhbiBhbm9ueW1vdXMgbW9kdWxlLiBUaGUgdW5kZXJseWluZyBtb2R1bGUgaXMgdGhy
b3duIGF3YXkuCisvLyBUaGlzIGFsbG93cyB0ZXN0cyB0byByZWFzb24gc29sZWx5IGFib3V0IGlt
cG9ydGluZyBleGNlcHRpb25zLgorZnVuY3Rpb24gTmV3RXhwb3J0ZWRUYWcoKSB7CisgIGxldCBi
dWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCB0YWcgPSBidWlsZGVyLmFk
ZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJ0Iiwga0V4dGVybmFs
VGFnLCB0YWcpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIHJl
dHVybiBpbnN0YW5jZS5leHBvcnRzLnQ7Cit9CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0U2ltcGxl
KCkgeworICBsZXQgZXhwb3J0ZWQgPSBOZXdFeHBvcnRlZFRhZygpOworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRJbXBv
cnRlZFRhZygibSIsICJleCIsIGtTaWdfdl92KTsKKworICBhc3NlcnREb2VzTm90VGhyb3coKCkg
PT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IGV4cG9ydGVkIH19KSk7Cit9KSgpOwor
CisoZnVuY3Rpb24gVGVzdEltcG9ydE11bHRpcGxlKCkgeworICBsZXQgZXhwb3J0ZWQgPSBOZXdF
eHBvcnRlZFRhZygpOworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOwor
ICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgxIiwga1NpZ192
X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgyIiwg
a1NpZ192X3YpOworICBsZXQgZXhjZXB0MyA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAg
YnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4MiIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Mik7Cisg
IGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDMiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDMpOwor
ICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDE6IGV4cG9ydGVk
LCBleDI6IGV4cG9ydGVkIH19KTsKKworICBhc3NlcnRUcnVlKGV4Y2VwdDEgPCBleGNlcHQzICYm
IGV4Y2VwdDIgPCBleGNlcHQzKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgaW5zdGFuY2Uu
ZXhwb3J0cy5leDEpOworICAvLyBGSVhNRTogZml4IGJyb2tlbiB2OCB3YXNtIGV4Y2VwdGlvbnMg
dGVzdHMKKyAgLy8gYXNzZXJ0U2FtZShleHBvcnRlZCwgaW5zdGFuY2UuZXhwb3J0cy5leDIpOwor
ICBhc3NlcnROb3RTYW1lKGV4cG9ydGVkLCBpbnN0YW5jZS5leHBvcnRzLmV4Myk7Cit9KSgpOwor
CisoZnVuY3Rpb24gVGVzdEltcG9ydE1pc3NpbmcoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdh
c21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFn
KCJtIiwgImV4Iiwga1NpZ192X3YpOworCisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1
aWxkZXIuaW5zdGFudGlhdGUoe30pLCBUeXBlRXJyb3IsCisgICAgICAvaW1wb3J0IG06ZXggbXVz
dCBiZSBhbiBvYmplY3QvKTsKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5p
bnN0YW50aWF0ZSh7IG06IHt9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9UYWcg
aW1wb3J0IG06ZXggaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhZy8pOworfSko
KTsKKworKGZ1bmN0aW9uIFRlc3RJbXBvcnRWYWx1ZU1pc21hdGNoKCkgeworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRJ
bXBvcnRlZFRhZygibSIsICJleCIsIGtTaWdfdl92KTsKKworICBhc3NlcnRUaHJvd3MoCisgICAg
ICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDogMjMgfX0pLCBXZWJBc3NlbWJs
eS5MaW5rRXJyb3IsCisgICAgICAvVGFnIGltcG9ydCBtOmV4IGlzIG5vdCBhbiBpbnN0YW5jZSBv
ZiBXZWJBc3NlbWJseS5UYWcvKTsKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRl
ci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IHt9IH19KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAor
ICAgICAgL1RhZyBpbXBvcnQgbTpleCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHku
VGFnLyk7CisgIHZhciBtb25rZXkgPSBPYmplY3QuY3JlYXRlKE5ld0V4cG9ydGVkVGFnKCkpOwor
ICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBl
eDogbW9ua2V5IH19KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAorICAgICAgL1RhZyBpbXBvcnQg
bTpleCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFnLyk7Cit9KSgpOworCiso
ZnVuY3Rpb24gVGVzdEltcG9ydFNpZ25hdHVyZU1pc21hdGNoKCkgeworICBsZXQgZXhwb3J0ZWQg
PSBOZXdFeHBvcnRlZFRhZygpOworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleCIsIGtT
aWdfdl9pKTsKKworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRp
YXRlKHsgbTogeyBleDogZXhwb3J0ZWQgfX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAg
ICAvaW1wb3J0ZWQgVGFnIG06ZXggc2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIGltcG9ydGVk
IFdlYkFzc2VtYmx5IFRhZydzIHNpZ25hdHVyZS8pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJ
bXBvcnRNb2R1bGVHZXRJbXBvcnRzKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJl
eCIsIGtTaWdfdl92KTsKKyAgbGV0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci50b0J1ZmZlcigpKTsKKworICBsZXQgaW1wb3J0cyA9IFdlYkFzc2VtYmx5Lk1vZHVsZS5p
bXBvcnRzKG1vZHVsZSk7CisgIGFzc2VydEFycmF5RXF1YWxzKFt7IG1vZHVsZTogIm0iLCBuYW1l
OiAiZXgiLCBraW5kOiAidGFnIiB9XSwgaW1wb3J0cyk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtcmV0aHJvdy5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNl
cHRpb25zLXJldGhyb3cuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTIzMzliZWYyZjY5NDJiZDVmNmU1ZWIzNWQ3
MTg5YzJjYWM1OTBhOAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRp
b25zLXJldGhyb3cuanMKQEAgLTAsMCArMSwxNDIgQEAKKy8vIENvcHlyaWdodCAyMDE4IHRoZSBW
OCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1leHBvc2Utd2Fz
bSAtLWV4cGVyaW1lbnRhbC13YXNtLWVoIC0tYWxsb3ctbmF0aXZlcy1zeW50YXgKKworbG9hZCgi
d2FzbS1tb2R1bGUtYnVpbGRlci5qcyIpOworbG9hZCgiZXhjZXB0aW9ucy11dGlscy5qcyIpOwor
CisvLyBUZXN0IHRoYXQgcmV0aHJvdyBleHByZXNzaW9ucyBjYW4gdGFyZ2V0IGNhdGNoIGJsb2Nr
cy4KKyhmdW5jdGlvbiBUZXN0UmV0aHJvd0luQ2F0Y2goKSB7CisgIGxldCBidWlsZGVyID0gbmV3
IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2ln
X3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInJldGhyb3cwIiwga1NpZ192X3YpCisgICAg
ICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4
cHJUaHJvdywgZXhjZXB0LAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAg
a0V4cHJSZXRocm93LCAwLAorICAgICAgICBrRXhwckVuZCwKKyAgXSkuZXhwb3J0RnVuYygpOwor
ICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJyZXRocm93MSIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJv
ZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUaHJvdywg
ZXhjZXB0LAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJMb2Nh
bEdldCwgMCwKKyAgICAgICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICBrRXhwcklmLCBrV2Fz
bVZvaWQsCisgICAgICAgICAgICBrRXhwclJldGhyb3csIDEsCisgICAgICAgICAga0V4cHJFbmQs
CisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMjMsCisgICAgICAgIGtFeHByRW5kCisgIF0pLmV4
cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFn
LCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAg
YXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW10sICgpID0+
IGluc3RhbmNlLmV4cG9ydHMucmV0aHJvdzAoKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFu
Y2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnJldGhy
b3cxKDApKTsKKyAgYXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3cxKDEp
KTsKK30pKCk7CisKKy8vIFRlc3QgdGhhdCByZXRocm93IGV4cHJlc3Npb25zIGNhbiB0YXJnZXQg
Y2F0Y2gtYWxsIGJsb2Nrcy4KKyhmdW5jdGlvbiBUZXN0UmV0aHJvd0luQ2F0Y2hBbGwoKSB7Cisg
IGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBi
dWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInJldGhyb3cw
Iiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZv
aWQsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICBrRXhwckNhdGNoQWxs
LAorICAgICAgICAgIGtFeHByUmV0aHJvdywgMCwKKyAgICAgICAga0V4cHJFbmQsCisgIF0pLmV4
cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigicmV0aHJvdzEiLCBrU2lnX2lfaSkK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAg
IGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBr
RXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBySTMyRXF6LAorICAgICAgICAgIGtFeHBy
SWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByUmV0aHJvdywgMSwKKyAgICAgICAgICBr
RXhwckVuZCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyMywKKyAgICAgICAga0V4cHJFbmQK
KyAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0
ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUo
KTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBb
XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93MCgpKTsKKyAgYXNzZXJ0V2FzbVRocm93
cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9y
dHMucmV0aHJvdzEoMCkpOworICBhc3NlcnRFcXVhbHMoMjMsIGluc3RhbmNlLmV4cG9ydHMucmV0
aHJvdzEoMSkpOworfSkoKTsKKworLy8gVGVzdCB0aGF0IHJldGhyb3cgZXhwcmVzc2lvbiBwcm9w
ZXJseSB0YXJnZXQgdGhlIGNvcnJlY3Qgc3Vycm91bmRpbmcgdHJ5CisvLyBibG9jayBldmVuIGlu
IHRoZSBwcmVzZW5jZSBvZiBtdWx0aXBsZSBoYW5kbGVycyBiZWluZyBpbnZvbHZlZC4KKyhmdW5j
dGlvbiBUZXN0UmV0aHJvd05lc3RlZCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7Cisg
IGxldCBleGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1
bmN0aW9uKCJyZXRocm93X25lc3RlZCIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAg
ICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MiwK
KyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MiwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21J
MzIsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQxLAorICAgICAgICAgIGtFeHByQ2F0
Y2gsIGV4Y2VwdDEsCisgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAg
a0V4cHJJMzJDb25zdCwgMCwKKyAgICAgICAgICAgIGtFeHBySTMyRXEsCisgICAgICAgICAgICBr
RXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgIGtFeHByUmV0aHJvdywgMSwKKyAgICAg
ICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAgICBrRXhwckkzMkVxLAorICAgICAgICAg
ICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAgICBrRXhwclJldGhyb3csIDIsCisg
ICAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIzLAorICAg
ICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckVuZCwKKyAgXSkuZXhwb3J0RnVuYygpOwor
ICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgxIiwga0V4dGVybmFsVGFnLCBleGNlcHQxKTsK
KyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4MiIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Mik7
CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNt
VGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4MSwgW10sICgpID0+IGluc3RhbmNl
LmV4cG9ydHMucmV0aHJvd19uZXN0ZWQoMCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNl
LCBpbnN0YW5jZS5leHBvcnRzLmV4MiwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMucmV0aHJv
d19uZXN0ZWQoMSkpOworICBhc3NlcnRFcXVhbHMoMjMsIGluc3RhbmNlLmV4cG9ydHMucmV0aHJv
d19uZXN0ZWQoMikpOworfSkoKTsKKworLy8gVGVzdCB0aGF0IGFuIGV4Y2VwdGlvbiBiZWluZyBy
ZXRocm93IGNhbiBiZSBjYXVnaHQgYnkgYW5vdGhlciBsb2NhbCBjYXRjaAorLy8gYmxvY2sgaW4g
dGhlIHNhbWUgZnVuY3Rpb24gd2l0aG91dCBldmVyIHVud2luZGluZyB0aGUgYWN0aXZhdGlvbi4K
KyhmdW5jdGlvbiBUZXN0UmV0aHJvd1JlY2F0Y2goKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdh
c21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zf
dik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInJldGhyb3dfcmVjYXRjaCIsIGtTaWdfaV9pKQor
ICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAg
a0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAg
ICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAg
ICAgICAgICAgIGtFeHBySTMyRXF6LAorICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAor
ICAgICAgICAgICAgICBrRXhwclJldGhyb3csIDIsCisgICAgICAgICAgICBrRXhwckVuZCwKKyAg
ICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDQyLAorICAgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2Vw
dCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIzLAorICAgICAgICAgIGtFeHByRW5kLAor
ICAgICAgICBrRXhwckVuZCwKKyAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9y
dE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1
aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMjMsIGluc3RhbmNlLmV4cG9y
dHMucmV0aHJvd19yZWNhdGNoKDApKTsKKyAgYXNzZXJ0RXF1YWxzKDQyLCBpbnN0YW5jZS5leHBv
cnRzLnJldGhyb3dfcmVjYXRjaCgxKSk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L3Y4L2V4Y2VwdGlvbnMtc2hhcmVkLmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtc2hh
cmVkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg1MmY1YmE4YTEzNzE2MWZmNzU3NzVhNGM5ZTIxMGY5MGNkMjg4
MzUKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1zaGFyZWQu
anMKQEAgLTAsMCArMSwxNTMgQEAKKy8vIENvcHlyaWdodCAyMDE4IHRoZSBWOCBwcm9qZWN0IGF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1leHBvc2Utd2FzbSAtLWV4cGVyaW1l
bnRhbC13YXNtLWVoCisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKKworLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHJldHVybiBhIG5ldyBleHBvcnRlZCBleGNlcHRpb24gd2l0aCB0aGUg
e2tTaWdfdl92fSB0eXBlCisvLyBzaWduYXR1cmUgZnJvbSBhbiBhbm9ueW1vdXMgbW9kdWxlLiBU
aGUgdW5kZXJseWluZyBtb2R1bGUgaXMgdGhyb3duIGF3YXkuCitmdW5jdGlvbiBOZXdFeHBvcnRl
ZEV4Y2VwdGlvbigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsK
KyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRF
eHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2Ug
PSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIHJldHVybiBpbnN0YW5jZS5leHBvcnRzLmV4Owor
fQorCisvLyBDaGVjayB0aGF0IGFuIGluc3RhbmNlIG1hdGNoZXMgYW4gZXhjZXB0aW9uIHRocm93
biBieSBpdHNlbGYsIGV2ZW4gd2hlbiB0aGUKKy8vIGV4Y2VwdGlvbiBpcyByZS10aHJvd24gYnkg
YSByZWd1bGFyIEphdmFTY3JpcHQgZnVuY3Rpb24uCisoZnVuY3Rpb24gVGVzdFNpbmdsZUluc3Rh
bmNlKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQg
c2lnX2luZGV4ID0gYnVpbGRlci5hZGRUeXBlKGtTaWdfdl92KTsKKyAgbGV0IGZ1biA9IGJ1aWxk
ZXIuYWRkSW1wb3J0KCJtIiwgImYiLCBzaWdfaW5kZXgpOworICBsZXQgZXhjZXB0ID0gYnVpbGRl
ci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIGtTaWdf
dl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRocm93LCBleGNlcHQKKyAgICAg
IF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2giLCBrU2lnX3Zf
dikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAg
ICAgICBrRXhwckNhbGxGdW5jdGlvbiwgZnVuLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQs
CisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgZXhfb2Jq
ID0gbmV3IEVycm9yKCJteSBleGNlcHRpb24iKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5p
bnN0YW50aWF0ZSh7IG06IHsgZjogZnVuY3Rpb24oKSB7IHRocm93IGV4X29iaiB9fX0pOworCisg
IGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93KCksIFdlYkFzc2VtYmx5
LkV4Y2VwdGlvbik7CisgIGFzc2VydFRocm93c0VxdWFscygoKSA9PiBpbnN0YW5jZS5leHBvcnRz
LmNhdGNoKCksIGV4X29iaik7CisgIHRyeSB7CisgICAgaW5zdGFuY2UuZXhwb3J0cy50aHJvdygp
OworICB9IGNhdGNoIChlKSB7CisgICAgZXhfb2JqID0gZTsKKyAgfQorICBhc3NlcnREb2VzTm90
VGhyb3coKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5jYXRjaCgpKTsKK30pKCk7CisKKy8vIENoZWNr
IHRoYXQgdHdvIGluc3RhbmNlcyBkaXN0aW5ndWlzaCB0aGVpciBpbmRpdmlkdWFsIGV4Y2VwdGlv
bnMgaWYgdGhleSBhcmUKKy8vIG5vdCBzaGFyZWQsIGV2ZW4gd2hlbiBkZWNsYXJlZCBieSB0aGUg
c2FtZSB1bmRlcmx5aW5nIG1vZHVsZS4KKyhmdW5jdGlvbiBUZXN0TXVsdGlJbnN0YW5jZU5vblNo
YXJlZCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0
IHNpZ19pbmRleCA9IGJ1aWxkZXIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBmdW4gPSBidWls
ZGVyLmFkZEltcG9ydCgibSIsICJmIiwgc2lnX2luZGV4KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2ln
X3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0CisgICAg
ICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoIiwga1NpZ192
X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAg
ICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGZ1biwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0
LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGV4X29i
aiA9IG5ldyBFcnJvcigibXkgZXhjZXB0aW9uIik7CisgIGxldCBpbnN0YW5jZTEgPSBidWlsZGVy
Lmluc3RhbnRpYXRlKHsgbTogeyBmOiBhc3NlcnRVbnJlYWNoYWJsZSB9fSk7CisgIGxldCBpbnN0
YW5jZTIgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBmOiBmdW5jdGlvbigpIHsgdGhyb3cg
ZXhfb2JqIH19fSk7CisKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlMS5leHBvcnRzLnRo
cm93KCksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFzc2VydFRocm93c0VxdWFscygoKSA9
PiBpbnN0YW5jZTIuZXhwb3J0cy5jYXRjaCgpLCBleF9vYmopOworICB0cnkgeworICAgIGluc3Rh
bmNlMS5leHBvcnRzLnRocm93KCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBleF9vYmogPSBlOwor
ICB9CisgIGFzc2VydFRocm93c0VxdWFscygoKSA9PiBpbnN0YW5jZTIuZXhwb3J0cy5jYXRjaCgp
LCBleF9vYmopOworfSkoKTsKKworLy8gQ2hlY2sgdGhhdCB0d28gaW5zdGFuY2VzIG1hdGNoIHRo
ZWlyIGV4Y2VwdGlvbnMgaWYgdGhleSBhcmUgc2hhcmVkIHByb3Blcmx5LAorLy8gZXZlbiBpZiB0
aGUgbG9jYWwgZXhjZXB0aW9uIGluZGV4IG9mIGV4cG9ydCBhbmQgaW1wb3J0IGlzIGRpZmZlcmVu
dC4KKyhmdW5jdGlvbiBUZXN0TXVsdGlJbnN0YW5jZVNoYXJlZCgpIHsKKyAgbGV0IGJ1aWxkZXIg
PSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IHNpZ19pbmRleCA9IGJ1aWxkZXIuYWRk
VHlwZShrU2lnX3Zfdik7CisgIGxldCBmdW4gPSBidWlsZGVyLmFkZEltcG9ydCgibSIsICJmIiwg
c2lnX2luZGV4KTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwg
ImV4MSIsIGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zf
dik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2Vw
dDIpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIGtTaWdfdl92KQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwclRocm93LCBleGNlcHQyCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoIiwga1NpZ192X3YpCisgICAgICAuYWRk
Qm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxs
RnVuY3Rpb24sIGZ1biwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAgICAgICAga0V4
cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBleF9vYmogPSBuZXcgRXJyb3Io
Im15IGV4Y2VwdGlvbiIpOworICBsZXQgaW5zdGFuY2UxID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7
IG06IHsgZjogYXNzZXJ0VW5yZWFjaGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleDE6IE5ld0V4cG9ydGVkRXhjZXB0aW9uKCkgfX0pOworICBsZXQg
aW5zdGFuY2UyID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZjogZnVuY3Rpb24oKSB7IHRo
cm93IGV4X29iaiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXgxOiBpbnN0YW5jZTEuZXhwb3J0cy5leDIgfX0pOworCisgIGFzc2VydFRocm93cygoKSA9
PiBpbnN0YW5jZTEuZXhwb3J0cy50aHJvdygpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICBh
c3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2goKSwgZXhfb2Jq
KTsKKyAgdHJ5IHsKKyAgICBpbnN0YW5jZTEuZXhwb3J0cy50aHJvdygpOworICB9IGNhdGNoIChl
KSB7CisgICAgZXhfb2JqID0gZTsKKyAgfQorICBhc3NlcnREb2VzTm90VGhyb3coKCkgPT4gaW5z
dGFuY2UyLmV4cG9ydHMuY2F0Y2goKSk7Cit9KSgpOworCisvLyBDaGVjayB0aGF0IHR3byBpbnN0
YW5jZXMgYmFzZWQgb24gZGlmZmVyZW50IG1vZHVsZXMgbWF0Y2ggdGhlaXIgZXhjZXB0aW9ucyBp
ZgorLy8gdGhleSBhcmUgc2hhcmVkIHByb3Blcmx5LCBldmVuIGlmIHRoZSBsb2NhbCBleGNlcHRp
b24gaW5kZXggaXMgZGlmZmVyZW50LgorKGZ1bmN0aW9uIFRlc3RNdWx0aU1vZHVsZVNoYXJlZCgp
IHsKKyAgbGV0IGJ1aWxkZXIxID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNl
cHQxID0gYnVpbGRlcjEuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVy
MS5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyMS5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4
dGVybmFsVGFnLCBleGNlcHQyKTsKKyAgYnVpbGRlcjEuYWRkRnVuY3Rpb24oInRocm93Iiwga1Np
Z192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDIKKyAg
ICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGJ1aWxkZXIyID0gbmV3IFdhc21Nb2R1bGVCdWls
ZGVyKCk7CisgIGxldCBzaWdfaW5kZXggPSBidWlsZGVyMi5hZGRUeXBlKGtTaWdfdl92KTsKKyAg
bGV0IGZ1biA9IGJ1aWxkZXIyLmFkZEltcG9ydCgibSIsICJmIiwgc2lnX2luZGV4KTsKKyAgbGV0
IGV4Y2VwdCA9IGJ1aWxkZXIyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X3YpOwor
ICBidWlsZGVyMi5hZGRGdW5jdGlvbigiY2F0Y2giLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5
KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxGdW5j
dGlvbiwgZnVuLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByRW5k
LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgZXhfb2JqID0gbmV3IEVycm9yKCJteSBl
eGNlcHRpb24iKTsKKyAgbGV0IGluc3RhbmNlMSA9IGJ1aWxkZXIxLmluc3RhbnRpYXRlKCk7Cisg
IGxldCBpbnN0YW5jZTIgPSBidWlsZGVyMi5pbnN0YW50aWF0ZSh7IG06IHsgZjogZnVuY3Rpb24o
KSB7IHRocm93IGV4X29iaiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4OiBpbnN0YW5jZTEuZXhwb3J0cy5leCB9fSk7CisKKyAgYXNzZXJ0VGhyb3dz
KCgpID0+IGluc3RhbmNlMS5leHBvcnRzLnRocm93KCksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7
CisgIGFzc2VydFRocm93c0VxdWFscygoKSA9PiBpbnN0YW5jZTIuZXhwb3J0cy5jYXRjaCgpLCBl
eF9vYmopOworICB0cnkgeworICAgIGluc3RhbmNlMS5leHBvcnRzLnRocm93KCk7CisgIH0gY2F0
Y2ggKGUpIHsKKyAgICBleF9vYmogPSBlOworICB9CisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9
PiBpbnN0YW5jZTIuZXhwb3J0cy5jYXRjaCgpKTsKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3dhc20vdjgvZXhjZXB0aW9ucy10eXBlLXJlZmxlY3Rpb24uanMgYi9KU1Rlc3RzL3dhc20vdjgv
ZXhjZXB0aW9ucy10eXBlLXJlZmxlY3Rpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRjMjBlZGFlOGUwMjM1
YWJmN2MyZTE5ZWJjNzE4MGZhYjA4Y2Y1OQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2Fz
bS92OC9leGNlcHRpb25zLXR5cGUtcmVmbGVjdGlvbi5qcwpAQCAtMCwwICsxLDQ3IEBACisvLyBD
b3B5cmlnaHQgMjAyMSB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8g
RmxhZ3M6IC0tZXhwZXJpbWVudGFsLXdhc20tZWggLS1leHBlcmltZW50YWwtd2FzbS10eXBlLXJl
ZmxlY3Rpb24KKworbG9hZCgid2FzbS1tb2R1bGUtYnVpbGRlci5qcyIpOworCitsZXQgdGVzdGNh
c2VzID0gWwore3R5cGVzOiB7cGFyYW1ldGVyczpbXX0sIHNpZzoga1NpZ192X3Z9LAore3R5cGVz
OiB7cGFyYW1ldGVyczpbImkzMiJdfSwgc2lnOiBrU2lnX3ZfaX0sCit7dHlwZXM6IHtwYXJhbWV0
ZXJzOlsiaTY0Il19LCBzaWc6IGtTaWdfdl9sfSwKK3t0eXBlczoge3BhcmFtZXRlcnM6WyJmNjQi
LCAiZjY0IiwgImkzMiJdfSwgc2lnOiBrU2lnX3ZfZGRpfSwKK3t0eXBlczoge3BhcmFtZXRlcnM6
WyJmMzIiXX0sIHNpZzoga1NpZ192X2Z9LAorXTsKKworKGZ1bmN0aW9uIFRlc3RFeHBvcnQoKSB7
CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisKKyAgdGVzdGNhc2Vz
LmZvckVhY2goZnVuY3Rpb24oZXhwZWN0ZWQsIGkpIHsKKyAgICBsZXQgZXhjZXB0ID0gYnVpbGRl
ci5hZGRUYWcoZXhwZWN0ZWQuc2lnKTsKKyAgICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgi
ICsgaSwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICB9KTsKKworICBsZXQgaW5zdGFuY2UgPSBi
dWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIHRlc3RjYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGV4cGVj
dGVkLCBpKSB7CisgICAgYXNzZXJ0RXF1YWxzKGluc3RhbmNlLmV4cG9ydHNbImV4IiArIGldLnR5
cGUoKSwgZXhwZWN0ZWQudHlwZXMpOworICB9KTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0SW1w
b3J0RXhwb3J0KCkgeworCisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7
CisgIGxldCBpbXBvcnRzID0ge206IHt9fTsKKworICB0ZXN0Y2FzZXMuZm9yRWFjaChmdW5jdGlv
bihleHBlY3RlZCwgaSkgeworICAgIGxldCB0ID0gbmV3IFdlYkFzc2VtYmx5LlRhZyhleHBlY3Rl
ZC50eXBlcyk7CisgICAgbGV0IGluZGV4ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJl
eCIgKyBpLCBleHBlY3RlZC5zaWcpOworICAgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIg
KyBpLCBrRXh0ZXJuYWxUYWcsIGluZGV4KTsKKyAgICBpbXBvcnRzLm1bImV4IiArIGldID0gdDsK
KyAgfSk7CisKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZShpbXBvcnRzKTsK
KyAgdGVzdGNhc2VzLmZvckVhY2goZnVuY3Rpb24oZXhwZWN0ZWQsIGkpIHsKKyAgICBhc3NlcnRF
cXVhbHMoaW5zdGFuY2UuZXhwb3J0c1siZXgiICsgaV0udHlwZSgpLCBleHBlY3RlZC50eXBlcyk7
CisgIH0pCit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtdXRp
bHMuanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy11dGlscy5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
YmUxOTE5ZGVlNjgwMzIzY2ViMDkzOTY0ZmU2MWE5NWYwNmRlNjk3Ci0tLSAvZGV2L251bGwKKysr
IGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtdXRpbHMuanMKQEAgLTAsMCArMSwyNyBAQAor
Ly8gQ29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisK
Ky8vIEZsYWdzOiAtLWFsbG93LW5hdGl2ZXMtc3ludGF4CisKKy8vIFRoaXMgZmlsZSBpcyBpbnRl
bmRlZCB0byBiZSBsb2FkZWQgYnkgb3RoZXIgdGVzdHMgdG8gcHJvdmlkZSB1dGlsaXR5IG1ldGhv
ZHMKKy8vIHJlcXVpcmluZyBuYXRpdmVzIHN5bnRheCAoYW5kIGhlbmNlIG5vdCBzdWl0ZWQgZm9y
IHRoZSBtanN1bml0LmpzIGZpbGUpLgorCitmdW5jdGlvbiBhc3NlcnRXYXNtVGhyb3dzKGluc3Rh
bmNlLCB0YWcsIHZhbHVlcywgY29kZSkgeworICB0cnkgeworICAgIGlmICh0eXBlb2YgY29kZSA9
PT0gJ2Z1bmN0aW9uJykgeworICAgICAgY29kZSgpOworICAgIH0gZWxzZSB7CisgICAgICBldmFs
KGNvZGUpOworICAgIH0KKyAgfSBjYXRjaCAoZSkgeworICAgIGFzc2VydEluc3RhbmNlb2YoZSwg
V2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgICBhc3NlcnRUcnVlKGUuaXModGFnKSk7CisgICAg
YXNzZXJ0RXF1YWxzKHZhbHVlcy5sZW5ndGgsIHRhZy50eXBlKCkucGFyYW1ldGVycy5sZW5ndGgp
OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgKytpKQorICAgICAgYXNz
ZXJ0RXF1YWxzKHZhbHVlc1tpXSwgZS5nZXRBcmcodGFnLCBpKSk7CisgICAgcmV0dXJuOyAgLy8g
U3VjY2Vzcy4KKyAgfQorICB0aHJvdyBuZXcgTWpzVW5pdEFzc2VydGlvbkVycm9yKCdEaWQgbm90
IHRocm93IGV4cGVjdGVkIDwnICsgdGFnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnPiB3aXRoIHZhbHVlczogJyArIHZhbHVlcyk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3dhc20vdjgvZXhjZXB0aW9ucy5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc5MTU1MDQ1MDQ5ODgxNzMwN2QyOTQ3NTAyYWIyYWZiYzA0YzYyYTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy5qcwpAQCAtMCwwICsxLDEw
ODcgQEAKKy8vIENvcHlyaWdodCAyMDE4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorCisvLyBGbGFnczogLS1leHBvc2Utd2FzbSAtLWV4cGVyaW1lbnRhbC13YXNtLWVoIC0t
YWxsb3ctbmF0aXZlcy1zeW50YXgKKworbG9hZCgid2FzbS1tb2R1bGUtYnVpbGRlci5qcyIpOwor
bG9hZCgiZXhjZXB0aW9ucy11dGlscy5qcyIpOworCisvLyBUaGUgZm9sbG93aW5nIG1ldGhvZCBk
b2Vzbid0IGF0dGVtcHQgdG8gY2F0Y2ggYW4gcmFpc2VkIGV4Y2VwdGlvbi4KKyhmdW5jdGlvbiBU
ZXN0VGhyb3dTaW1wbGUoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVy
KCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oInRocm93X2lmX3BhcmFtX25vdF96ZXJvIiwga1NpZ19pX2kpCisgICAgICAu
YWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHBySTMyQ29u
c3QsIDAsCisgICAgICAgIGtFeHBySTMyTmUsCisgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwK
KyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAg
ICBrRXhwckkzMkNvbnN0LCAxCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRk
RXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNl
ID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5l
eHBvcnRzLnRocm93X2lmX3BhcmFtX25vdF96ZXJvKDApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhp
bnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMu
dGhyb3dfaWZfcGFyYW1fbm90X3plcm8oMTApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5j
ZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3df
aWZfcGFyYW1fbm90X3plcm8oLTEpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhhdCBlbXB0eSB0cnkv
Y2F0Y2ggYmxvY2tzIHdvcmsuCisoZnVuY3Rpb24gVGVzdENhdGNoRW1wdHlCbG9ja3MoKSB7Cisg
IGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBi
dWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoX2Vt
cHR5X3RyeSIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwg
a1dhc21Wb2lkLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByRW5k
LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3Rh
bnRpYXRlKCk7CisKKyAgYXNzZXJ0RG9lc05vdFRocm93KGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hf
ZW1wdHlfdHJ5KTsKK30pKCk7CisKKy8vIE5vdyB0aGF0IHdlIGtub3cgdGhyb3dpbmcgd29ya3Ms
IHdlIHRlc3QgY2F0Y2hpbmcgdGhlIGV4Y2VwdGlvbnMgd2UgcmFpc2UuCisoZnVuY3Rpb24gVGVz
dENhdGNoU2ltcGxlKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigp
OworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFk
ZEZ1bmN0aW9uKCJzaW1wbGVfdGhyb3dfY2F0Y2hfdG9fMF8xIiwga1NpZ19pX2kpCisgICAgICAu
YWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxv
Y2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBySTMyRXF6LAorICAgICAgICAgIGtFeHBySWYsIGtX
YXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhw
ckVuZCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCA0MiwKKyAgICAgICAga0V4cHJDYXRjaCwg
ZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIzLAorICAgICAgICBrRXhwckVuZAor
ICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRp
YXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnNpbXBsZV90aHJv
d19jYXRjaF90b18wXzEoMCkpOworICBhc3NlcnRFcXVhbHMoNDIsIGluc3RhbmNlLmV4cG9ydHMu
c2ltcGxlX3Rocm93X2NhdGNoX3RvXzBfMSgxKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdFRy
YXBOb3RDYXVnaHQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7
CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3VucmVhY2hhYmxlX2luX3RyeScsIGtTaWdfdl92KQor
ICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAg
IGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgIGtFeHBy
RW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5z
dGFudGlhdGUoKTsKKworICBhc3NlcnRUcmFwcyhrVHJhcFVucmVhY2hhYmxlLCAoKSA9PiBpbnN0
YW5jZS5leHBvcnRzLnVucmVhY2hhYmxlX2luX3RyeSgpKTsKK30pKCk7CisKKyhmdW5jdGlvbiBU
ZXN0VHJhcEluQ2FsbGVlTm90Q2F1Z2h0KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9k
dWxlQnVpbGRlcigpOworICBsZXQgZnVuY19kaXYgPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCdkaXYn
LCBrU2lnX2lfaWkpLmFkZEJvZHkoWworICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAga0V4cHJM
b2NhbEdldCwgMSwKKyAgICBrRXhwckkzMkRpdlUKKyAgXSk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rp
b24oJ3RyYXBfaW5fY2FsbGVlJywga1NpZ19pX2lpKQorICAgICAgLmFkZEJvZHkoWworICAgICAg
ICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAg
ICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBmdW5j
X2Rpdi5pbmRleCwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBrRXhwckkzMkNv
bnN0LCAxMSwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0
IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygzLCBp
bnN0YW5jZS5leHBvcnRzLnRyYXBfaW5fY2FsbGVlKDcsIDIpKTsKKyAgYXNzZXJ0VHJhcHMoa1Ry
YXBEaXZCeVplcm8sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudHJhcF9pbl9jYWxsZWUoMSwgMCkp
OworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RUcmFwVmlhSlNOb3RDYXVnaHQoKSB7CisgIGxldCBi
dWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBpbXAgPSBidWlsZGVyLmFk
ZEltcG9ydCgnaW1wJywgJ29ydCcsIGtTaWdfaV92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbign
ZGl2Jywga1NpZ19pX2lpKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0
LCAwLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICBrRXhwckkzMkRpdlUKKyAg
ICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbignY2FsbF9pbXBvcnQn
LCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMy
LAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBpbXAsCisgICAgICAgIGtFeHByQ2F0Y2hB
bGwsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMTEsCisgICAgICAgIGtFeHByRW5kCisgICAg
ICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBleGNlcHRpb24gPSB1bmRlZmluZWQ7CisgIGxldCBp
bnN0YW5jZTsKKyAgZnVuY3Rpb24ganNfaW1wb3J0KCkgeworICAgIHRyeSB7CisgICAgICBpbnN0
YW5jZS5leHBvcnRzLmRpdigxLCAwKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBleGNlcHRp
b24gPSBlOworICAgIH0KKyAgICB0aHJvdyBleGNlcHRpb247CisgIH0KKyAgaW5zdGFuY2UgPSBi
dWlsZGVyLmluc3RhbnRpYXRlKHtpbXA6IHtvcnQ6IGpzX2ltcG9ydH19KTsKKworICBsZXQgY2F1
Z2h0ID0gdW5kZWZpbmVkOworICB0cnkgeworICAgIGxldCByZXMgPSBpbnN0YW5jZS5leHBvcnRz
LmNhbGxfaW1wb3J0KCk7CisgICAgYXNzZXJ0VW5yZWFjaGFibGUoJ2NhbGxfaW1wb3J0IHNob3Vs
ZCB0cmFwLCBidXQgcmV0dXJuZWQgd2l0aCAnICsgcmVzKTsKKyAgfSBjYXRjaCAoZSkgeworICAg
IGNhdWdodCA9IGU7CisgIH0KKyAgYXNzZXJ0U2FtZShleGNlcHRpb24sIGNhdWdodCk7CisgIGFz
c2VydFRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGxfaW1wb3J0LCBXZWJBc3NlbWJseS5SdW50
aW1lRXJyb3IsIGtUcmFwTXNnc1trVHJhcERpdkJ5WmVyb10pOworfSkoKTsKKworKGZ1bmN0aW9u
IFRlc3RNYW51YWxseVRocm93blJ1bnRpbWVFcnJvckNhdWdodCgpIHsKKyAgbGV0IGJ1aWxkZXIg
PSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGltcCA9IGJ1aWxkZXIuYWRkSW1wb3J0
KCdpbXAnLCAnb3J0Jywga1NpZ19pX3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCdjYWxsX2lt
cG9ydCcsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dh
c21JMzIsCisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGltcCwKKyAgICAgICAga0V4cHJD
YXRjaEFsbCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxMSwKKyAgICAgICAga0V4cHJFbmQK
KyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgZnVuY3Rpb24gdGhyb3dfZXhjKCkgeworICAgIHRo
cm93IG5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoJ015IHVzZXIgdGV4dCcpOworICB9Cisg
IGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoe2ltcDoge29ydDogdGhyb3dfZXhj
fX0pOworCisgIGFzc2VydEVxdWFscygxMSwgaW5zdGFuY2UuZXhwb3J0cy5jYWxsX2ltcG9ydCgp
KTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhuV2l0aFdhc21Qcm90b05vdENhdWdodCgpIHsK
KyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9
IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGltcCA9IGJ1aWxkZXIuYWRkSW1wb3J0
KCdpbXAnLCAnb3J0Jywga1NpZ192X3YpOworICBsZXQgdGhyb3dfZm4gPSBidWlsZGVyLmFkZEZ1
bmN0aW9uKCd0aHJvdycsIGtTaWdfdl92KQorICAgICAgICAgICAgICAgICAgICAgLmFkZEJvZHko
W2tFeHByVGhyb3csIGV4Y2VwdF0pCisgICAgICAgICAgICAgICAgICAgICAuZXhwb3J0RnVuYygp
OworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ192X3YpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIC8vIENhbGxpbmcgInRocm93IiBkaXJlY3RseSBzaG91bGQgcHJvZHVjZSB0
aGUgZXhwZWN0ZWQgZXhjZXB0aW9uLgorICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAg
ICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCB0aHJvd19mbi5pbmRleCwKKyAgICAgICAga0V4cHJD
YXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgLy8gQ2FsbGluZyB0aHJv
dWdoIEpTIHByb2R1Y2VzIGEgd3JhcHBlZCBleGNlcHRpb25zIHdoaWNoIGRvZXMgbm90IG1hdGNo
CisgICAgICAgIC8vIHRoZSBjYXRjaC4KKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAg
ICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgaW1wLAorICAgICAgICBrRXhwckNhdGNoLCBleGNl
cHQsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0
YW5jZTsKKyAgbGV0IHdyYXBwZWRfZXhuOworICBmdW5jdGlvbiBqc19pbXBvcnQoKSB7CisgICAg
dHJ5IHsKKyAgICAgIGluc3RhbmNlLmV4cG9ydHMudGhyb3coKTsKKyAgICB9IGNhdGNoIChlKSB7
CisgICAgICB3cmFwcGVkX2V4biA9IG5ldyBFcnJvcigpOworICAgICAgd3JhcHBlZF9leG4uX19w
cm90b19fID0gZTsKKyAgICAgIHRocm93IHdyYXBwZWRfZXhuOworICAgIH0KKyAgfQorICBpbnN0
YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoe2ltcDoge29ydDoganNfaW1wb3J0fX0pOworICBs
ZXQgY2F1Z2h0ID0gdW5kZWZpbmVkOworICB0cnkgeworICAgIGluc3RhbmNlLmV4cG9ydHMudGVz
dCgpOworICB9IGNhdGNoIChlKSB7CisgICAgY2F1Z2h0ID0gZTsKKyAgfQorICBhc3NlcnRUcnVl
KCEhY2F1Z2h0LCAnc2hvdWxkIGhhdmUgdHJhcHBlZCcpOworICBhc3NlcnRFcXVhbHMoY2F1Z2h0
LCB3cmFwcGVkX2V4bik7CisgIGFzc2VydEluc3RhbmNlb2YoY2F1Z2h0Ll9fcHJvdG9fXywgV2Vi
QXNzZW1ibHkuRXhjZXB0aW9uKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0U3RhY2tPdmVyZmxv
d05vdENhdWdodCgpIHsKKyAgZnVuY3Rpb24gc3RhY2tfb3ZlcmZsb3coKSB7CisgICAgLy8lVGhy
b3dTdGFja092ZXJmbG93KCk7CisgIH0KKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IHNpZ192X3YgPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X3YpOworICBs
ZXQga1N0YWNrT3ZlcmZsb3cgPSBidWlsZGVyLmFkZEltcG9ydCgnJywgJ3N0YWNrX292ZXJmbG93
Jywgc2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3RyeV9zdGFja19vdmVyZmxvdycs
IGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lk
LAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCAwLAorICAgICAgICBrRXhwckNhdGNoQWxs
LAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFu
Y2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsnJzogeydzdGFja19vdmVyZmxvdyc6IHN0YWNrX292
ZXJmbG93fX0pOworCisgIGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRyeV9z
dGFja19vdmVyZmxvdygpLAorICAgICAgUmFuZ2VFcnJvciwgJ01heGltdW0gY2FsbCBzdGFjayBz
aXplIGV4Y2VlZGVkJyk7Cit9KTsKKy8vIEZJWE1FOiBuZWVkcyBzdGFjayBvdmVyZmxvdyBoZWxw
ZXIKKy8vKCk7CisKKy8vIFRlc3QgdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggd2hpY2ggZXhjZXB0
aW9uIHdhcyB0aHJvd24gYnkgdXNpbmcgYSBjYXNjYWRlZAorLy8gc2VxdWVuY2Ugb2YgbmVzdGVk
IHRyeSBibG9ja3Mgd2l0aCBhIHNpbmdsZSBjYXRjaCBibG9jayBlYWNoLgorKGZ1bmN0aW9uIFRl
c3RDYXRjaENvbXBsZXgxKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4
Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQzID0gYnVpbGRl
ci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaF9jb21wbGV4
Iiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkz
MiwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckxvY2Fs
R2V0LCAwLAorICAgICAgICAgICAga0V4cHJJMzJFcXosCisgICAgICAgICAgICBrRXhwcklmLCBr
V2FzbVZvaWQsCisgICAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDEsCisgICAgICAgICAg
ICBrRXhwckVsc2UsCisgICAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAgICAgIGtFeHBySTMyRXEsCisgICAgICAg
ICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAgICBrRXhwclRocm93LCBl
eGNlcHQyLAorICAgICAgICAgICAgICBrRXhwckVsc2UsCisgICAgICAgICAgICAgICAga0V4cHJU
aHJvdywgZXhjZXB0MywKKyAgICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICBrRXhw
ckVuZCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgICAga0V4cHJDYXRj
aCwgZXhjZXB0MSwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDMsCisgICAgICAgICAga0V4
cHJFbmQsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDIsCisgICAgICAgICAga0V4cHJJMzJD
b25zdCwgNCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1
aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Myk7CisgIGxl
dCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMywg
aW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9jb21wbGV4KDApKTsKKyAgYXNzZXJ0RXF1YWxzKDQsIGlu
c3RhbmNlLmV4cG9ydHMuY2F0Y2hfY29tcGxleCgxKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5z
dGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmNh
dGNoX2NvbXBsZXgoMikpOworfSkoKTsKKworLy8gVGVzdCB0aGF0IHdlIGNhbiBkaXN0aW5ndWlz
aCB3aGljaCBleGNlcHRpb24gd2FzIHRocm93biBieSB1c2luZyBhIHNpbmdsZQorLy8gdHJ5IGJs
b2NrIHdpdGggbXVsdGlwbGUgYXNzb2NpYXRlZCBjYXRjaCBibG9ja3MgaW4gc2VxdWVuY2UuCiso
ZnVuY3Rpb24gVGVzdENhdGNoQ29tcGxleDIoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21N
b2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3Yp
OworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2Vw
dDMgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNh
dGNoX2NvbXBsZXgiLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJU
cnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4
cHJJMzJFcXosCisgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4
cHJUaHJvdywgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckVsc2UsCisgICAgICAgICAgICBrRXhw
ckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICAg
IGtFeHBySTMyRXEsCisgICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAg
ICAgIGtFeHByVGhyb3csIGV4Y2VwdDIsCisgICAgICAgICAgICBrRXhwckVsc2UsCisgICAgICAg
ICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDMsCisgICAgICAgICAgICBrRXhwckVuZCwKKyAgICAg
ICAgICBrRXhwckVuZCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhw
ckNhdGNoLCBleGNlcHQxLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDMsCisgICAgICAgIGtF
eHByQ2F0Y2gsIGV4Y2VwdDIsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgNCwKKyAgICAgICAg
a0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZL
aW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Myk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxk
ZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMywgaW5zdGFuY2UuZXhwb3J0cy5j
YXRjaF9jb21wbGV4KDApKTsKKyAgYXNzZXJ0RXF1YWxzKDQsIGluc3RhbmNlLmV4cG9ydHMuY2F0
Y2hfY29tcGxleCgxKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4
cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmNhdGNoX2NvbXBsZXgoMikpOwor
fSkoKTsKKworLy8gVGVzdCB0aHJvd2luZyBhbiBleGNlcHRpb24gd2l0aCBtdWx0aXBsZSB2YWx1
ZXMuCisoZnVuY3Rpb24gVGVzdFRocm93TXVsdGlwbGVWYWx1ZXMoKSB7CisgIGxldCBidWlsZGVy
ID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRh
ZyhrU2lnX3ZfaWkpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd18xXzIiLCBrU2lnX3Zf
dikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAg
a0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSku
ZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxU
YWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKwor
ICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbMSwgMl0s
ICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfMV8yKCkpOworfSkoKTsKKworLy8gVGVzdCB0
aHJvd2luZy9jYXRjaGluZyB0aGUgaTMyIHBhcmFtZXRlciB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0
VGhyb3dDYXRjaFBhcmFtSSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9pKTsKKyAgYnVpbGRl
ci5hZGRGdW5jdGlvbigidGhyb3dfY2F0Y2hfcGFyYW0iLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRC
b2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxH
ZXQsIDAsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMy
Q29uc3QsIDIsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclJl
dHVybiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMCwgaW5z
dGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgwKSk7CisgIGFzc2VydEVxdWFscygxLCBp
bnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDEpKTsKKyAgYXNzZXJ0RXF1YWxzKDEw
LCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDEwKSk7Cit9KSgpOworCisvLyBU
ZXN0IHRoZSBlbmNvZGluZyBvZiBhIHRocm93biBleGNlcHRpb24gd2l0aCBhbiBpbnRlZ2VyIGV4
Y2VwdGlvbi4KKyhmdW5jdGlvbiBUZXN0VGhyb3dQYXJhbUkoKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3ZfaSk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X3BhcmFtIiwga1NpZ192X2kp
CisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtF
eHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRF
eHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2Ug
PSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwg
aW5zdGFuY2UuZXhwb3J0cy5leCwgWzVdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3Bh
cmFtKDUpKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5l
eCwgWzQyNDI0Ml0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oNDI0MjQyKSk7
Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nL2NhdGNoaW5nIHRoZSBmMzIgcGFyYW1ldGVyIHZh
bHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd0NhdGNoUGFyYW1GKCkgeworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWco
a1NpZ192X2YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19jYXRjaF9wYXJhbSIsIGtT
aWdfZl9mKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21GMzIsCisg
ICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQs
CisgICAgICAgICAga0V4cHJGMzJDb25zdCwgMCwgMCwgMCwgMCwKKyAgICAgICAga0V4cHJDYXRj
aCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByUmV0dXJuLAorICAgICAgICBrRXhwckVuZCwKKyAg
ICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0
ZSgpOworCisgIGFzc2VydEVxdWFscyg1LjAsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hf
cGFyYW0oNS4wKSk7CisgIGFzc2VydEVxdWFscygxMC41LCBpbnN0YW5jZS5leHBvcnRzLnRocm93
X2NhdGNoX3BhcmFtKDEwLjUpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEg
dGhyb3duIGV4Y2VwdGlvbiB3aXRoIGEgZmxvYXQgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93
UGFyYW1GKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBs
ZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2YpOworICBidWlsZGVyLmFkZEZ1bmN0
aW9uKCJ0aHJvd19wYXJhbSIsIGtTaWdfdl9mKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBr
RXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5l
eHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRh
ZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisg
IGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFs1LjBdLCAo
KSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDUuMCkpOworICBhc3NlcnRXYXNtVGhy
b3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbMTAuNV0sICgpID0+IGluc3RhbmNl
LmV4cG9ydHMudGhyb3dfcGFyYW0oMTAuNSkpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2luZy9j
YXRjaGluZyBhbiBJNjQgdmFsdWUKKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFBhcmFtTCgpIHsK
KyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9
IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9sKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3df
Y2F0Y2hfcGFyYW0iLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRMb2NhbHMoa1dhc21JNjQsIDEpCisg
ICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHBy
STY0VUNvbnZlcnRJMzIsCisgICAgICAgIGtFeHByTG9jYWxTZXQsIDEsCisgICAgICAgIGtFeHBy
VHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICAgIGtF
eHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBr
RXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAg
ICBrRXhwckk2NEVxLAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtSTMyLAorICAgICAgICAgICAg
a0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICBrRXhwckVsc2UsCisgICAgICAgICAgICBrRXhw
ckkzMkNvbnN0LCAwLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckVuZCwKKyAg
ICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0
ZSgpOworCisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3Bh
cmFtKDUpKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hf
cGFyYW0oMCkpOworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRj
aF9wYXJhbSgtMSkpOworfSkoKTsKKworLy8gVGVzdCB0aGUgZW5jb2Rpbmcgb2YgYSB0aHJvd24g
ZXhjZXB0aW9uIHdpdGggYW4gSTY0IHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd1BhcmFtTCgp
IHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2Vw
dCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9sKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhy
b3dfcGFyYW0iLCBrU2lnX3ZfaWkpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9j
YWxHZXQsIDAsCisgICAgICAgIGtFeHBySTY0VUNvbnZlcnRJMzIsCisgICAgICAgIGtFeHBySTY0
Q29uc3QsIDMyLAorICAgICAgICBrRXhwckk2NFNobCwKKyAgICAgICAga0V4cHJMb2NhbEdldCwg
MSwKKyAgICAgICAga0V4cHJJNjRVQ29udmVydEkzMiwKKyAgICAgICAga0V4cHJJNjRJb3IsCisg
ICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVp
bGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQg
aW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhp
bnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzQyOTQ5NjcyOTY1bl0sICgpID0+IGluc3Rh
bmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oMTAsIDUpKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0
YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWy00Mjk0OTY3Mjgzbl0sICgpID0+IGluc3RhbmNl
LmV4cG9ydHMudGhyb3dfcGFyYW0oLTEsIDEzKSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5n
L2NhdGNoaW5nIHRoZSBGNjQgcGFyYW1ldGVyIHZhbHVlCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0
Y2hQYXJhbUQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7Cisg
IGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfZCk7CisgIGJ1aWxkZXIuYWRkRnVu
Y3Rpb24oInRocm93X2NhdGNoX3BhcmFtIiwga1NpZ19kX2QpCisgICAgICAuYWRkQm9keShbCisg
ICAgICAgIGtFeHByVHJ5LCBrV2FzbUY2NCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAor
ICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckY2NENvbnN0LCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAg
ICAgICAga0V4cHJSZXR1cm4sCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVu
YygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0
RXF1YWxzKDUuMCwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSg1LjApKTsKKyAg
YXNzZXJ0RXF1YWxzKDEwLjUsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oMTAu
NSkpOworfSkoKTsKKworLy8gVGVzdCB0aGUgZW5jb2Rpbmcgb2YgYSB0aHJvd24gZXhjZXB0aW9u
IHdpdGggYW4gZjY0IHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd1BhcmFtRCgpIHsKKyAgbGV0
IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl9kKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfcGFyYW0i
LCBrU2lnX3ZfZikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwK
KyAgICAgICAga0V4cHJGNjRDb252ZXJ0RjMyLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQs
CisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIs
IGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50
aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMu
ZXgsIFs1LjBdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDUuMCkpOworICBh
c3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbMTAwMDAwMDBd
LCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDEwMDAwMDAwLjUpKTsKK30pKCk7
CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgY29tcHV0ZWQgcGFyYW1ldGVyIHZhbHVlLgor
KGZ1bmN0aW9uIFRlc3RUaHJvd1BhcmFtQ29tcHV0ZWQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3
IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2ln
X3ZfaSk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X2V4cHJfd2l0aF9wYXJhbXMiLCBr
U2lnX3ZfZGRpKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICAvLyBwMiAqIChwMCArIG1pbihw
MCwgcDEpKXwwIC0gMjAKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMiwKKyAgICAgICAga0V4cHJM
b2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJMb2Nh
bEdldCwgMSwKKyAgICAgICAga0V4cHJGNjRNaW4sCisgICAgICAgIGtFeHByRjY0QWRkLAorICAg
ICAgICBrRXhwckkzMlNDb252ZXJ0RjY0LAorICAgICAgICBrRXhwckkzMk11bCwKKyAgICAgICAg
a0V4cHJJMzJDb25zdCwgMjAsCisgICAgICAgIGtFeHBySTMyU3ViLAorICAgICAgICBrRXhwclRo
cm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5jKCkKKyAgYnVpbGRlci5hZGRFeHBvcnRP
ZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWls
ZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFu
Y2UuZXhwb3J0cy5leCwgWy04XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19leHByX3dp
dGhfcGFyYW1zKDEuNSwgMi41LCA0KSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGlu
c3RhbmNlLmV4cG9ydHMuZXgsIFsxMl0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfZXhw
cl93aXRoX3BhcmFtcyg1LjcsIDIuNSwgNCkpOworfSkoKTsKKworLy8gTm93IHRoYXQgd2Uga25v
dyBjYXRjaGluZyB3b3JrcyBsb2NhbGx5LCB3ZSB0ZXN0IGNhdGNoaW5nIGV4Y2VwdGlvbnMgdGhh
dAorLy8gY3Jvc3MgZnVuY3Rpb24gYm91bmRhcmllcyBhbmQvb3IgcmFpc2VkIGJ5IEphdmFTY3Jp
cHQuCisoZnVuY3Rpb24gVGVzdENhdGNoQ3Jvc3NGdW5jdGlvbnMoKSB7CisgIGxldCBidWlsZGVy
ID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRh
ZyhrU2lnX3ZfaSk7CisKKyAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0aHJvd2luZyBmcm9tIEpT
LiBJdCBpcyBpbXBvcnRlZCBieSB0aGUgV2FzbSBtb2R1bGUKKyAgLy8gYXMgdGhyb3dfaS4KKyAg
ZnVuY3Rpb24gdGhyb3dfdmFsdWUodmFsdWUpIHsKKyAgICB0aHJvdyB2YWx1ZTsKKyAgfQorICBs
ZXQgc2lnX2luZGV4ID0gYnVpbGRlci5hZGRUeXBlKGtTaWdfdl9pKTsKKyAgbGV0IGtKU1Rocm93
SSA9IGJ1aWxkZXIuYWRkSW1wb3J0KCIiLCAidGhyb3dfaSIsIHNpZ19pbmRleCk7CisKKyAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRoYXQgdGhyb3dzIGEgc3RyaW5nLiBXYXNtIHNob3VsZCBub3QgY2F0
Y2ggaXQuCisgIGZ1bmN0aW9uIHRocm93X3N0cmluZygpIHsKKyAgICB0aHJvdyAidXNlIHdhc20i
OworICB9CisgIHNpZ19pbmRleCA9IGJ1aWxkZXIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBr
SlNUaHJvd1N0cmluZyA9IGJ1aWxkZXIuYWRkSW1wb3J0KCIiLCAidGhyb3dfc3RyaW5nIiwgc2ln
X2luZGV4KTsKKworICAvLyBIZWxwZXIgZnVuY3Rpb24gdGhhdCB0aHJvd3MgdW5kZWZpbmVkLiBX
YXNtIHNob3VsZCBub3QgY2F0Y2ggaXQuCisgIGZ1bmN0aW9uIHRocm93X3VuZGVmaW5lZCgpIHsK
KyAgICB0aHJvdyB1bmRlZmluZWQ7CisgIH0KKyAgbGV0IGtKU1Rocm93VW5kZWZpbmVkID0gYnVp
bGRlci5hZGRJbXBvcnQoIiIsICJ0aHJvd191bmRlZmluZWQiLCBzaWdfaW5kZXgpOworCisgIC8v
IEhlbHBlciBmdW5jdGlvbiB0aGF0IHRocm93cyBhbiBmcC4gV2FzbSBzaG91bGQgbm90IGNhdGNo
IGl0LgorICBmdW5jdGlvbiB0aHJvd19mcCgpIHsKKyAgICB0aHJvdyAxMC41OworICB9CisgIGxl
dCBrSlNUaHJvd0ZQID0gYnVpbGRlci5hZGRJbXBvcnQoIiIsICJ0aHJvd19mcCIsIHNpZ19pbmRl
eCk7CisKKyAgLy8gSGVscGVyIGZ1bmN0aW9uIHRoYXQgdGhyb3dzIGEgbGFyZ2UgbnVtYmVyLiBX
YXNtIHNob3VsZCBub3QgY2F0Y2ggaXQuCisgIGZ1bmN0aW9uIHRocm93X2xhcmdlKCkgeworICAg
IHRocm93IDFlKzI4OworICB9CisgIGxldCBrSlNUaHJvd0xhcmdlID0gYnVpbGRlci5hZGRJbXBv
cnQoIiIsICJ0aHJvd19sYXJnZSIsIHNpZ19pbmRleCk7CisKKyAgLy8gSGVscGVyIGZ1bmN0aW9u
IGZvciB0aHJvd2luZyBmcm9tIFdlYkFzc2VtYmx5LgorICBsZXQga1dhc21UaHJvd0Z1bmN0aW9u
ID0KKyAgICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIGtTaWdfdl9pKQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwclRocm93LCBl
eGNlcHQsCisgICAgICBdKQorICAgICAgLmluZGV4OworCisgIC8vIFNjZW5hcmlvIDE6IFRocm93
IGFuZCBjYXRjaCBhcHBlYXIgb24gdGhlIHNhbWUgZnVuY3Rpb24uIFRoaXMgc2hvdWxkCisgIC8v
IGhhcHBlbiBpbiBjYXNlIG9mIGlubGluaW5nLCBmb3IgZXhhbXBsZS4KKyAgYnVpbGRlci5hZGRG
dW5jdGlvbigic2FtZV9zY29wZSIsIGtTaWdfaV9pKQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtF
eHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4
cHJJMzJDb25zdCwgMCwKKyAgICAgICAga0V4cHJJMzJOZSwKKyAgICAgICAga0V4cHJJZiwga1dh
c21Wb2lkLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJUaHJv
dywgZXhjZXB0LAorICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgIGtFeHByRW5k
LAorICAgICAgICBrRXhwckkzMkNvbnN0LCA2MywKKyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwK
KyAgICAgIGtFeHByRW5kCisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oInNhbWVfc2NvcGVfaWdub3JlIiwga1NpZ19pX2kpCisgICAgLmFkZEJvZHko
WworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwg
MCwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJVbnJlYWNo
YWJsZSwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwckVuZCwKKyAg
ICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigic2FtZV9z
Y29wZV9tdWx0aXBsZSIsIGtTaWdfaV9pKQorICAgIC8vIHBhdGggPSAwOworICAgIC8vCisgICAg
Ly8gdHJ5IHsKKyAgICAvLyAgIHRyeSB7CisgICAgLy8gICAgIHRyeSB7CisgICAgLy8gICAgICAg
aWYgKHAgPT0gMSkKKyAgICAvLyAgICAgICAgIHRocm93IDE7CisgICAgLy8gICAgICAgcGF0aCB8
PSAyCisgICAgLy8gICAgIH0gY2F0Y2ggKHYpIHsKKyAgICAvLyAgICAgICBwYXRoIHw9IHYgfCA0
OworICAgIC8vICAgICAgIHRocm93IHBhdGg7CisgICAgLy8gICAgIH0KKyAgICAvLyAgICAgaWYg
KHAgPT0gMikKKyAgICAvLyAgICAgICB0aHJvdyBwYXRofDg7CisgICAgLy8gICAgIHBhdGggfD0g
MTY7CisgICAgLy8gICB9IGNhdGNoICh2KSB7CisgICAgLy8gICAgIHBhdGggfD0gdiB8IDMyOwor
ICAgIC8vICAgICB0aHJvdyBwYXRoOworICAgIC8vICAgfQorICAgIC8vICAgaWYgKHAgPT0gMykK
KyAgICAvLyAgICAgdGhyb3cgcGF0aHw2NDsKKyAgICAvLyAgIHBhdGggfD0gMTI4CisgICAgLy8g
fSBjYXRjaCAodikgeworICAgIC8vICAgcGF0aCB8PSB2IHwgMjU2OworICAgIC8vIH0KKyAgICAv
LworICAgIC8vIHJldHVybiBwYXRoOworICAgIC8vCisgICAgLy8gcCA9PSAxIC0+IHBhdGggPT0g
MjkzCisgICAgLy8gcCA9PSAyIC0+IHBhdGggPT0gMjk4CisgICAgLy8gcCA9PSAzIC0+IHBhdGgg
PT0gMzM4CisgICAgLy8gZWxzZSAgIC0+IHBhdGggPT0gMTQ2CisgICAgLmFkZExvY2FscyhrV2Fz
bUkzMiwgMSkKKyAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAg
ICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwclRyeSwga1dhc21J
MzIsCisgICAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDEsCisgICAgICAgICAgICAgIGtFeHBySTMyRXEsCisgICAgICAgICAgICAgIGtF
eHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAg
ICAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICAgICAgICBrRXhwclVu
cmVhY2hhYmxlLAorICAgICAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgICAga0V4cHJJ
MzJDb25zdCwgMiwKKyAgICAgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICAg
ICAga0V4cHJJMzJDb25zdCwgNCwKKyAgICAgICAgICAgICAga0V4cHJJMzJJb3IsCisgICAgICAg
ICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICAgICAga0V4cHJVbnJlYWNoYWJs
ZSwKKyAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAga0V4cHJMb2NhbFRlZSwgMSwK
KyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0
LCAyLAorICAgICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNt
Vm9pZCwKKyAgICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAgICAgICAga0V4
cHJJMzJDb25zdCwgOCwKKyAgICAgICAgICAgICAga0V4cHJJMzJJb3IsCisgICAgICAgICAgICAg
IGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAg
ICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMTYsCisgICAg
ICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAg
ICAgICAgICBrRXhwckkzMkNvbnN0LCAzMiwKKyAgICAgICAgICAgIGtFeHBySTMySW9yLAorICAg
ICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgICAga0V4cHJVbnJlYWNoYWJs
ZSwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICBrRXhwckxvY2FsVGVlLCAxLAorICAg
ICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMywKKyAg
ICAgICAgICBrRXhwckkzMkVxLAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAg
ICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAvKjY0
PSovIDE5MiwgMCwKKyAgICAgICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICAgICAga0V4cHJU
aHJvdywgZXhjZXB0LAorICAgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAgICBr
RXhwckVuZCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAvKjEyOD0qLyAxMjgsIDEsCisgICAg
ICAgICAga0V4cHJJMzJJb3IsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAg
ICBrRXhwckkzMkNvbnN0LCAvKjI1Nj0qLyAxMjgsIDIsCisgICAgICAgICAga0V4cHJJMzJJb3Is
CisgICAgICAgIGtFeHByRW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICAvLyBT
Y2VuYXJpbyAyOiBDYXRjaGVzIGFuIGV4Y2VwdGlvbiByYWlzZWQgZnJvbSB0aGUgZGlyZWN0IGNh
bGxlZS4KKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiZnJvbV9kaXJlY3RfY2FsbGVlIiwga1NpZ19p
X2kpCisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICBr
RXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwga1dhc21UaHJvd0Z1
bmN0aW9uLAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAga0V4cHJDYXRjaCwgZXhj
ZXB0LAorICAgICAga0V4cHJFbmQsCisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIC8v
IFNjZW5hcmlvIDM6IENhdGNoZXMgYW4gZXhjZXB0aW9uIHJhaXNlZCBmcm9tIGFuIGluZGlyZWN0
IGNhbGxlZS4KKyAgbGV0IHNpZ192X2kgPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X2kpOworICBi
dWlsZGVyLmFwcGVuZFRvVGFibGUoW2tXYXNtVGhyb3dGdW5jdGlvbiwga1dhc21UaHJvd0Z1bmN0
aW9uXSk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImZyb21faW5kaXJlY3RfY2FsbGVlIiwga1Np
Z19pX2lpKQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAg
ICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAg
a0V4cHJDYWxsSW5kaXJlY3QsIHNpZ192X2ksIGtUYWJsZVplcm8sCisgICAgICAgIGtFeHByVW5y
ZWFjaGFibGUsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICBrRXhwckVuZAorICAg
IF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICAvLyBTY2VuYXJpbyA0OiBEb2VzIG5vdCBjYXRj
aCBhbiBleGNlcHRpb24gcmFpc2VkIGluIEpTLCBldmVuIGlmIHByaW1pdGl2ZQorICAvLyB2YWx1
ZXMgYXJlIGJlaW5nIHVzZWQgYXMgZXhjZXB0aW9ucy4KKyAgYnVpbGRlci5hZGRGdW5jdGlvbigi
aV9mcm9tX2pzIiwga1NpZ19pX2kpCisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtX
YXNtSTMyLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckNhbGxGdW5j
dGlvbiwga0pTVGhyb3dJLAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAga0V4cHJD
YXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAga0V4cHJFbmQs
CisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInN0
cmluZ19mcm9tX2pzIiwga1NpZ192X3YpCisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnks
IGtXYXNtVm9pZCwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtKU1Rocm93U3RyaW5nLAor
ICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAg
ICAga0V4cHJFbmQsCisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRk
RnVuY3Rpb24oImZwX2Zyb21fanMiLCBrU2lnX3ZfdikKKyAgICAuYWRkQm9keShbCisgICAgICBr
RXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwga0pTVGhyb3dG
UCwKKyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwK
KyAgICAgIGtFeHByRW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJsYXJnZV9mcm9tX2pzIiwga1NpZ192X3YpCisgICAgLmFkZEJvZHkoWwor
ICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtK
U1Rocm93TGFyZ2UsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByVW5y
ZWFjaGFibGUsCisgICAgICBrRXhwckVuZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisK
KyAgYnVpbGRlci5hZGRGdW5jdGlvbigidW5kZWZpbmVkX2Zyb21fanMiLCBrU2lnX3ZfdikKKyAg
ICAuYWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICBrRXhwckNh
bGxGdW5jdGlvbiwga0pTVGhyb3dVbmRlZmluZWQsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQs
CisgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICBrRXhwckVuZCwKKyAgICBdKQorICAg
IC5leHBvcnRGdW5jKCk7CisKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7
IiI6IHsKKyAgICAgIHRocm93X2k6IHRocm93X3ZhbHVlLAorICAgICAgdGhyb3dfc3RyaW5nOiB0
aHJvd19zdHJpbmcsCisgICAgICB0aHJvd19mcDogdGhyb3dfZnAsCisgICAgICB0aHJvd19sYXJn
ZSwgdGhyb3dfbGFyZ2UsCisgICAgICB0aHJvd191bmRlZmluZWQ6IHRocm93X3VuZGVmaW5lZAor
ICB9fSk7CisKKyAgYXNzZXJ0RXF1YWxzKDYzLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGUo
MCkpOworICBhc3NlcnRFcXVhbHMoMTAyNCwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlKDEw
MjQpKTsKKyAgYXNzZXJ0RXF1YWxzKC0zLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGUoLTMp
KTsKKyAgYXNzZXJ0RXF1YWxzKC0xLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfaWdub3Jl
KC0xKSk7CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfaWdu
b3JlKDEpKTsKKyAgYXNzZXJ0RXF1YWxzKDB4N0ZGRkZGRkYsIGluc3RhbmNlLmV4cG9ydHMuc2Ft
ZV9zY29wZV9pZ25vcmUoMHg3RkZGRkZGRikpOworICBhc3NlcnRFcXVhbHMoMTAyNCwgaW5zdGFu
Y2UuZXhwb3J0cy5zYW1lX3Njb3BlX2lnbm9yZSgxMDI0KSk7CisgIGFzc2VydEVxdWFscygtMSwg
aW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX2lnbm9yZSgtMSkpOworICBhc3NlcnRFcXVhbHMo
MjkzLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfbXVsdGlwbGUoMSkpOworICBhc3NlcnRF
cXVhbHMoMjk4LCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfbXVsdGlwbGUoMikpOworICBh
c3NlcnRFcXVhbHMoMzM4LCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfbXVsdGlwbGUoMykp
OworICBhc3NlcnRFcXVhbHMoMTQ2LCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfbXVsdGlw
bGUoMCkpOworICBhc3NlcnRFcXVhbHMoLTEwMDI0LCBpbnN0YW5jZS5leHBvcnRzLmZyb21fZGly
ZWN0X2NhbGxlZSgtMTAwMjQpKTsKKyAgYXNzZXJ0RXF1YWxzKDMzMzQzMzMsIGluc3RhbmNlLmV4
cG9ydHMuZnJvbV9kaXJlY3RfY2FsbGVlKDMzMzQzMzMpKTsKKyAgYXNzZXJ0RXF1YWxzKC0xLCBp
bnN0YW5jZS5leHBvcnRzLmZyb21fZGlyZWN0X2NhbGxlZSgweEZGRkZGRkZGKSk7CisgIGFzc2Vy
dEVxdWFscygweDdGRkZGRkZGLCBpbnN0YW5jZS5leHBvcnRzLmZyb21fZGlyZWN0X2NhbGxlZSgw
eDdGRkZGRkZGKSk7CisgIGFzc2VydEVxdWFscygxMCwgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2lu
ZGlyZWN0X2NhbGxlZSgxMCwgMCkpOworICBhc3NlcnRFcXVhbHMoNzcsIGluc3RhbmNlLmV4cG9y
dHMuZnJvbV9pbmRpcmVjdF9jYWxsZWUoNzcsIDEpKTsKKworICBhc3NlcnRUaHJvd3NFcXVhbHMo
KCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5pX2Zyb21fanMoMTApLCAxMCk7CisgIGFzc2VydFRocm93
c0VxdWFscygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmlfZnJvbV9qcygtMTApLCAtMTApOworICBh
c3NlcnRUaHJvd3NFcXVhbHMoaW5zdGFuY2UuZXhwb3J0cy5zdHJpbmdfZnJvbV9qcywgInVzZSB3
YXNtIik7CisgIGFzc2VydFRocm93c0VxdWFscyhpbnN0YW5jZS5leHBvcnRzLmZwX2Zyb21fanMs
IDEwLjUpOworICBhc3NlcnRUaHJvd3NFcXVhbHMoaW5zdGFuY2UuZXhwb3J0cy5sYXJnZV9mcm9t
X2pzLCAxZSsyOCk7CisgIGFzc2VydFRocm93c0VxdWFscyhpbnN0YW5jZS5leHBvcnRzLnVuZGVm
aW5lZF9mcm9tX2pzLCB1bmRlZmluZWQpOworfSkoKTsKKworLy8gRGVsZWdhdGUgd2l0aCBhIHRy
eSBibG9jayB0aGF0IG5ldmVyIHRocm93cy4KKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVOb1Rocm93
KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhj
ZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbign
dGVzdCcsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dh
c21JMzIsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJJ
MzJDb25zdCwgMSwKKyAgICAgICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICBrRXhwckNh
dGNoLCBleGNlcHQxLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHBy
RW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGVzdCgpKTsKK30p
KCk7CisKKy8vIERlbGVnYXRlIGV4Y2VwdGlvbiBoYW5kbGluZyB0byBvdXRlciB0cnkvY2F0Y2gg
YmxvY2suCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlVGhyb3coKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGxldCB0aHJvd19pZiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93Jywg
a1NpZ192X2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwK
KyAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBl
eGNlcHQsCisgICAgICAgICAga0V4cHJFbmRdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRk
RnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4
cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAg
ICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgdGhy
b3dfaWYuaW5kZXgsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgIGtF
eHByRGVsZWdhdGUsIDAsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBr
RXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscygx
LCBpbnN0YW5jZS5leHBvcnRzLnRlc3QoMCkpOworICBhc3NlcnRFcXVhbHMoMiwgaW5zdGFuY2Uu
ZXhwb3J0cy50ZXN0KDEpKTsKK30pKCk7CisKKy8vIE5vIGNhdGNoIGJsb2NrIG1hdGNoaW5nIHRo
ZSBleGNlcHRpb24gaW4gdGhlIGRlbGVnYXRlIHRhcmdldC4KKyhmdW5jdGlvbiBUZXN0RGVsZWdh
dGVUaHJvd05vQ2F0Y2goKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVy
KCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhj
ZXB0MiA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IHRocm93X2ZuID0gYnVpbGRl
ci5hZGRGdW5jdGlvbigndGhyb3cnLCBrU2lnX3ZfdikKKyAgICAgICAgICAgICAgICAgICAgIC5h
ZGRCb2R5KFtrRXhwclRocm93LCBleGNlcHQxXSkKKyAgICAgICAgICAgICAgICAgICAgIC5leHBv
cnRGdW5jKCk7CisgIGxldCB0aHJvd19mbl8yID0gYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3df
MicsIGtTaWdfdl92KQorICAgICAgICAgICAgICAgICAgICAgLmFkZEJvZHkoW2tFeHByVGhyb3cs
IGV4Y2VwdDJdKQorICAgICAgICAgICAgICAgICAgICAgLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRl
ci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAg
ICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAg
ICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIHRocm93X2ZuLmluZGV4LAorICAgICAgICAgICAg
a0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICBr
RXhwckNhdGNoLCBleGNlcHQyLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAg
IGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBpbnN0YW5jZSA9IGJ1aWxkZXIu
aW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0VGhyb3dzKGluc3RhbmNlLmV4cG9ydHMudGVzdCwgV2Vi
QXNzZW1ibHkuRXhjZXB0aW9uKTsKK30pKCk7CisKKy8vIENoZWNrIHRoYXQgdGhlIGV4Y2VwdGlv
biBpcyBtZXJnZWQgcHJvcGVybHkgd2hlbiBib3RoIHNjb3BlcyBjYW4gdGhyb3cuCisoZnVuY3Rp
b24gVGVzdERlbGVnYXRlTWVyZ2UoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBs
ZXQgZXhjZXB0MiA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgLy8gdGhyb3dfZm46IDAg
LT4gcmV0dXJucworICAvLyAgICAgICAgICAgMSAtPiB0aHJvdyBleGNlcHQxCisgIC8vICAgICAg
ICAgICAyIC0+IHRocm93IGV4Y2VwdDIKKyAgbGV0IHRocm93X2ZuID0gYnVpbGRlci5hZGRGdW5j
dGlvbigndGhyb3cnLCBrU2lnX3ZfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAgICBrRXhw
ckJsb2NrLCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwckJsb2NrLCBrV2FzbVZvaWQsCisg
ICAgICAgICAgICAgIGtFeHByQmxvY2ssIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAgICBrRXhw
ckxvY2FsR2V0LCAwLAorICAgICAgICAgICAgICAgIGtFeHByQnJUYWJsZSwgMiwgMCwgMSwgMiwK
KyAgICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICAgIGtFeHByUmV0dXJuLAorICAg
ICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQxLAorICAg
ICAgICAgIGtFeHByRW5kLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDJdKQorICAgICAg
LmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfaV9paSkK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAg
IGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIHRocm93X2Zu
LmluZGV4LAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHBy
TG9jYWxHZXQsIDEsCisgICAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgdGhyb3dfZm4uaW5k
ZXgsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgIGtFeHByRGVsZWdh
dGUsIDAsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAgICAgICAga0V4cHJJMzJD
b25zdCwgMiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGlu
c3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMoMiwgaW5zdGFu
Y2UuZXhwb3J0cy50ZXN0KDEsIDApKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlLmV4
cG9ydHMudGVzdCgyLCAwKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgYXNzZXJ0RXF1YWxz
KDIsIGluc3RhbmNlLmV4cG9ydHMudGVzdCgwLCAxKSk7CisgIGFzc2VydFRocm93cygoKSA9PiBp
bnN0YW5jZS5leHBvcnRzLnRlc3QoMCwgMiksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFz
c2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRlc3QoMCwgMCkpOworfSkoKTsKKworLy8g
RGVsZWdhdGUgdG8gc2Vjb25kIGVuY2xvc2luZyB0cnkgc2NvcGUuCisoZnVuY3Rpb24gVGVzdERl
bGVnYXRlMSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAg
bGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IHRocm93X2ZuID0g
YnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3cnLCBrU2lnX3ZfdikKKyAgICAgICAgICAgICAgICAg
ICAgIC5hZGRCb2R5KFtrRXhwclRocm93LCBleGNlcHRdKQorICAgICAgICAgICAgICAgICAgICAg
LmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfaV92KQor
ICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAg
a0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAg
ICAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgdGhyb3dfZm4uaW5kZXgsCisgICAgICAgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAgICBrRXhwckRlbGVnYXRlLCAxLAorICAg
ICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIs
CisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAg
ICAgICBrRXhwckkzMkNvbnN0LCAzLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9y
dEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVx
dWFscygzLCBpbnN0YW5jZS5leHBvcnRzLnRlc3QoKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVz
dERlbGVnYXRlVW5yZWFjaGFibGUoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBs
ZXQgZXhjZXB0MiA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5j
dGlvbigndGVzdCcsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRy
eSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICAg
IGtFeHByVGhyb3csIGV4Y2VwdDEsCisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAg
ICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQxLAorICAg
ICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDIsCisg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgMywKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5l
eHBvcnRGdW5jKCk7CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3Nl
cnRFcXVhbHMoMiwgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KCkpOworfSkoKTsKKworKGZ1bmN0aW9u
IFRlc3REZWxlZ2F0ZVRvQ2FsbGVyKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBi
dWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisg
ICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtVm9p
ZCwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckRlbGVn
YXRlLCAxLAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICBrRXhwckVuZAorICAgICAg
XSkuZXhwb3J0RnVuYygpOworICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAg
YXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMudGVzdCgpLCBXZWJBc3NlbWJseS5F
eGNlcHRpb24pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RUaHJvd0JlZm9yZVVucmVhY2hhYmxl
KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhj
ZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0
aHJvd19iZWZvcmVfdW5yZWFjaGFibGUnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAg
ICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwK
KyAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAg
ICAgICAgIGtFeHBySTMyQ29uc3QsIDQyLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4
cG9ydEZ1bmMoKTsKKworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7Cisg
IGFzc2VydEVxdWFscyg0MiwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19iZWZvcmVfdW5yZWFjaGFi
bGUoKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdFVucmVhY2hhYmxlSW5DYXRjaEFsbCgpIHsK
KyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9
IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3df
YmVmb3JlX3VucmVhY2hhYmxlJywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAg
IGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAg
ICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAg
ICBrRXhwckkzMkNvbnN0LCA0MiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRG
dW5jKCk7CisKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworfSkoKTsK
KworKGZ1bmN0aW9uIFRlc3RUaHJvd1dpdGhMb2NhbCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcg
V2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdf
dl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3dfd2l0aF9sb2NhbCcsIGtTaWdfaV92
KQorICAgIC5hZGRMb2NhbHMoa1dhc21JMzIsIDQpCisgICAgLmFkZEJvZHkoWworICAgICAgICBr
RXhwckkzMkNvbnN0LCA0MiwKKyAgICAgICAga0V4cHJGNjRDb25zdCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwKKyAgICAgICAga0V4cHJUcnksIGtXYXNtRjMyLAorICAgICAgICAgIGtFeHByVGhy
b3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBrRXhwckYzMkNv
bnN0LCAwLCAwLCAwLCAwLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJEcm9wLCAg
Ly8gRHJvcCB0aGUgZjMyLgorICAgICAgICBrRXhwckRyb3AsICAvLyBEcm9wIHRoZSBmNjQuCisg
ICAgICAgIC8vIExlYXZlIHRoZSAnNDInIG9uIHRoZSBzdGFjay4KKyAgICBdKS5leHBvcnRGdW5j
KCk7CisKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRF
cXVhbHMoNDIsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfd2l0aF9sb2NhbCgpKTsKK30pKCk7CisK
KyhmdW5jdGlvbiBUZXN0Q2F0Y2hsZXNzVHJ5KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNt
TW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3Yp
OworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCdjYXRjaGxlc3NfdHJ5Jywga1NpZ192X2kpCisgICAg
LmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHBy
TG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAg
a0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckVu
ZCwKKyAgICBdKS5leHBvcnRGdW5jKCk7CisKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4
Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3Rh
bnRpYXRlKCk7CisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmNh
dGNobGVzc190cnkoMCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5l
eHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5jYXRjaGxlc3NfdHJ5KDEpKTsK
K30pKCk7CisKKy8vIERlbGVnYXRlIHRvIGEgcmVndWxhciBibG9jayBpbnNpZGUgYSB0cnkgYmxv
Y2suCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlVG9CbG9jaygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBu
ZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtT
aWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfaV92KQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJC
bG9jaywga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAg
ICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDAs
CisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAg
ICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9y
dEZ1bmMoKTsKKyAgICBhc3NlcnRUaHJvd3MoKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSgpLCBF
cnJvciwgL2RlbGVnYXRlIHRhcmdldCBpc24ndCBhIHRyeSBibG9jay8pOworfSkoKTsKKworLy8g
RGVsZWdhdGUgdG8gYSByZWd1bGFyIGJsb2NrIHdpdGggbm8gb3V0ZXIgdHJ5IChkZWxlZ2F0ZSB0
byBjYWxsZXIpLgorKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZVRvQ2FsbGVyV2l0aEJsb2NrKCkgewor
ICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0g
YnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywg
a1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByQmxvY2ssIGtXYXNtVm9p
ZCwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJv
dywgZXhjZXB0LAorICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDAsCisgICAgICAgIGtFeHByRW5k
CisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGFzc2VydFRocm93cygoKSA9PiBidWlsZGVyLmlu
c3RhbnRpYXRlKCksIEVycm9yLCAvZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5IGJsb2NrLyk7
Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L21qc3VuaXQuanMgYi9KU1Rlc3Rz
L3dhc20vdjgvbWpzdW5pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MjQ1NWJhYTYxNjk2NmY4ZDBhNmI5ZGUx
ZGEzMjExZmZhMmRhMzYyCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L21qc3Vu
aXQuanMKQEAgLTAsMCArMSw4MjYgQEAKKy8vIENvcHlyaWdodCAyMDA4IHRoZSBWOCBwcm9qZWN0
IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnVu
Y3Rpb24gTWpzVW5pdEFzc2VydGlvbkVycm9yKG1lc3NhZ2UpIHsKKyAgdGhpcy5tZXNzYWdlID0g
bWVzc2FnZTsKKyAgLy8gVGVtcG9yYXJpbHkgaW5zdGFsbCBhIGN1c3RvbSBzdGFjayB0cmFjZSBm
b3JtYXR0ZXIgYW5kIHJlc3RvcmUgdGhlCisgIC8vIHByZXZpb3VzIHZhbHVlLgorICBsZXQgcHJl
dlByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7CisgIHRyeSB7Cisg
ICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBNanNVbml0QXNzZXJ0aW9uRXJyb3IucHJlcGFy
ZVN0YWNrVHJhY2U7CisgICAgLy8gVGhpcyBhbGxvd3MgZmV0Y2hpbmcgdGhlIHN0YWNrIHRyYWNl
IHVzaW5nIFRyeUNhdGNoOjpTdGFja1RyYWNlLgorICAgIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3Io
Ik1qc1VuaXRBc3NlcnRpb25FcnJvciIpLnN0YWNrOworICB9IGZpbmFsbHkgeworICAgIEVycm9y
LnByZXBhcmVTdGFja1RyYWNlID0gcHJldlByZXBhcmVTdGFja1RyYWNlOworICB9Cit9CisKKy8q
CisgKiBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgaW4gYWxsIG1pbmkganN1bml0IHRlc3QgY2FzZXMu
ICBUaGUgdGVzdAorICogZnJhbWV3b3JrIGV4cGVjdHMgbGluZXMgdGhhdCBzaWduYWwgZmFpbGVk
IHRlc3RzIHRvIHN0YXJ0IHdpdGgKKyAqIHRoZSBmLXdvcmQgYW5kIGlnbm9yZSBhbGwgb3RoZXIg
bGluZXMuCisgKi8KKworTWpzVW5pdEFzc2VydGlvbkVycm9yLnByb3RvdHlwZS50b1N0cmluZyA9
IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRoaXMubWVzc2FnZSArICJcblxuU3RhY2s6ICIgKyB0
aGlzLnN0YWNrOworfTsKKworCisvLyBFeHBlY3RlZCBhbmQgZm91bmQgdmFsdWVzIHRoZSBzYW1l
IG9iamVjdHMsIG9yIHRoZSBzYW1lIHByaW1pdGl2ZQorLy8gdmFsdWVzLgorLy8gRm9yIGtub3du
IHByaW1pdGl2ZSB2YWx1ZXMsIHBsZWFzZSB1c2UgYXNzZXJ0RXF1YWxzLgordmFyIGFzc2VydFNh
bWU7CisKKy8vIEludmVyc2Ugb2YgYXNzZXJ0U2FtZS4KK3ZhciBhc3NlcnROb3RTYW1lOworCisv
LyBFeHBlY3RlZCBhbmQgZm91bmQgdmFsdWVzIGFyZSBpZGVudGljYWwgcHJpbWl0aXZlIHZhbHVl
cyBvciBmdW5jdGlvbnMKKy8vIG9yIHNpbWlsYXJseSBzdHJ1Y3R1cmVkIG9iamVjdHMgKGNoZWNr
aW5nIGludGVybmFsIHByb3BlcnRpZXMKKy8vIG9mLCBlLmcuLCBOdW1iZXIgYW5kIERhdGUgb2Jq
ZWN0cywgdGhlIGVsZW1lbnRzIG9mIGFycmF5cworLy8gYW5kIHRoZSBwcm9wZXJ0aWVzIG9mIG5v
bi1BcnJheSBvYmplY3RzKS4KK3ZhciBhc3NlcnRFcXVhbHM7CisKKy8vIERlZXAgZXF1YWxpdHkg
cHJlZGljYXRlIHVzZWQgYnkgYXNzZXJ0RXF1YWxzLgordmFyIGRlZXBFcXVhbHM7CisKKy8vIEV4
cGVjdGVkIGFuZCBmb3VuZCB2YWx1ZXMgYXJlIG5vdCBpZGVudGljYWwgcHJpbWl0aXZlIHZhbHVl
cyBvciBmdW5jdGlvbnMKKy8vIG9yIHNpbWlsYXJseSBzdHJ1Y3R1cmVkIG9iamVjdHMgKGNoZWNr
aW5nIGludGVybmFsIHByb3BlcnRpZXMKKy8vIG9mLCBlLmcuLCBOdW1iZXIgYW5kIERhdGUgb2Jq
ZWN0cywgdGhlIGVsZW1lbnRzIG9mIGFycmF5cworLy8gYW5kIHRoZSBwcm9wZXJ0aWVzIG9mIG5v
bi1BcnJheSBvYmplY3RzKS4KK3ZhciBhc3NlcnROb3RFcXVhbHM7CisKKy8vIFRoZSBkaWZmZXJl
bmNlIGJldHdlZW4gZXhwZWN0ZWQgYW5kIGZvdW5kIHZhbHVlIGlzIHdpdGhpbiBjZXJ0YWluIHRv
bGVyYW5jZS4KK3ZhciBhc3NlcnRFcXVhbHNEZWx0YTsKKworLy8gVGhlIGZvdW5kIG9iamVjdCBp
cyBhbiBBcnJheSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhbmQgZWxlbWVudHMKKy8vIGFzIHRoZSBl
eHBlY3RlZCBvYmplY3QuIFRoZSBleHBlY3RlZCBvYmplY3QgZG9lc24ndCBuZWVkIHRvIGJlIGFu
IEFycmF5LAorLy8gYXMgbG9uZyBhcyBpdCdzICJhcnJheS1pc2giLgordmFyIGFzc2VydEFycmF5
RXF1YWxzOworCisvLyBUaGUgZm91bmQgb2JqZWN0IG11c3QgaGF2ZSB0aGUgc2FtZSBlbnVtZXJh
YmxlIHByb3BlcnRpZXMgYXMgdGhlCisvLyBleHBlY3RlZCBvYmplY3QuIFRoZSB0eXBlIG9mIG9i
amVjdCBpc24ndCBjaGVja2VkLgordmFyIGFzc2VydFByb3BlcnRpZXNFcXVhbDsKKworLy8gQXNz
ZXJ0IHRoYXQgdGhlIHN0cmluZyBjb252ZXJzaW9uIG9mIHRoZSBmb3VuZCB2YWx1ZSBpcyBlcXVh
bCB0bworLy8gdGhlIGV4cGVjdGVkIHN0cmluZy4gT25seSBrZXB0IGZvciBiYWNrd2FyZHMgY29t
cGF0aWJpbGl0eSwgcGxlYXNlCisvLyBjaGVjayB0aGUgcmVhbCBzdHJ1Y3R1cmUgb2YgdGhlIGZv
dW5kIHZhbHVlLgordmFyIGFzc2VydFRvU3RyaW5nRXF1YWxzOworCisvLyBDaGVja3MgdGhhdCB0
aGUgZm91bmQgdmFsdWUgaXMgdHJ1ZS4gVXNlIHdpdGggYm9vbGVhbiBleHByZXNzaW9ucworLy8g
Zm9yIHRlc3RzIHRoYXQgZG9lc24ndCBoYXZlIHRoZWlyIG93biBhc3NlcnRYWFggZnVuY3Rpb24u
Cit2YXIgYXNzZXJ0VHJ1ZTsKKworLy8gQ2hlY2tzIHRoYXQgdGhlIGZvdW5kIHZhbHVlIGlzIGZh
bHNlLgordmFyIGFzc2VydEZhbHNlOworCisvLyBDaGVja3MgdGhhdCB0aGUgZm91bmQgdmFsdWUg
aXMgbnVsbC4gS2VwdCBmb3IgaGlzdG9yaWNhbCBjb21wYXRpYmlsaXR5LAorLy8gcGxlYXNlIGp1
c3QgdXNlIGFzc2VydEVxdWFscyhudWxsLCBleHBlY3RlZCkuCit2YXIgYXNzZXJ0TnVsbDsKKwor
Ly8gQ2hlY2tzIHRoYXQgdGhlIGZvdW5kIHZhbHVlIGlzICpub3QqIG51bGwuCit2YXIgYXNzZXJ0
Tm90TnVsbDsKKworLy8gQXNzZXJ0IHRoYXQgdGhlIHBhc3NlZCBmdW5jdGlvbiBvciBldmFsIGNv
ZGUgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KKy8vIFRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQg
aXMgYW4gZXhjZXB0aW9uIGNvbnN0cnVjdG9yIHRoYXQgdGhlCisvLyB0aHJvd24gZXhjZXB0aW9u
IGlzIGNoZWNrZWQgYWdhaW5zdCB3aXRoICJpbnN0YW5jZW9mIi4KKy8vIFRoZSBvcHRpb25hbCB0
aGlyZCBhcmd1bWVudCBpcyBhIG1lc3NhZ2UgdHlwZSBzdHJpbmcgb3IgUmVnRXhwIG9iamVjdCB0
aGF0IGlzCisvLyBjb21wYXJlZCB0byB0aGUgbWVzc2FnZSBvZiB0aGUgdGhyb3duIGV4Y2VwdGlv
bi4KK3ZhciBhc3NlcnRUaHJvd3M7CisKKy8vIEFzc2VydCB0aGF0IHRoZSBwYXNzZWQgZnVuY3Rp
b24gdGhyb3dzIGFuIGV4Y2VwdGlvbi4KKy8vIFRoZSBleGNlcHRpb24gaXMgY2hlY2tlZCBhZ2Fp
bnN0IHRoZSBzZWNvbmQgYXJndW1lbnQgdXNpbmcgYXNzZXJ0RXF1YWxzLgordmFyIGFzc2VydFRo
cm93c0VxdWFsczsKKworLy8gQXNzZXJ0IHRoYXQgdGhlIHBhc3NlZCBwcm9taXNlIGRvZXMgbm90
IHJlc29sdmUsIGJ1dCBldmVudHVhbGx5IHRocm93cyBhbgorLy8gZXhjZXB0aW9uLiBUaGUgb3B0
aW9uYWwgc2Vjb25kIGFyZ3VtZW50IGlzIGFuIGV4Y2VwdGlvbiBjb25zdHJ1Y3RvciB0aGF0IHRo
ZQorLy8gdGhyb3duIGV4Y2VwdGlvbiBpcyBjaGVja2VkIGFnYWluc3Qgd2l0aCAiaW5zdGFuY2Vv
ZiIuCisvLyBUaGUgb3B0aW9uYWwgdGhpcmQgYXJndW1lbnQgaXMgYSBtZXNzYWdlIHR5cGUgc3Ry
aW5nIG9yIFJlZ0V4cCBvYmplY3QgdGhhdCBpcworLy8gY29tcGFyZWQgdG8gdGhlIG1lc3NhZ2Ug
b2YgdGhlIHRocm93biBleGNlcHRpb24uCit2YXIgYXNzZXJ0VGhyb3dzQXN5bmM7CisKKy8vIEFz
c2VydCB0aGF0IHRoZSBwYXNzZWQgZnVuY3Rpb24gb3IgZXZhbCBjb2RlIGRvZXMgbm90IHRocm93
IGFuIGV4Y2VwdGlvbi4KK3ZhciBhc3NlcnREb2VzTm90VGhyb3c7CisKKy8vIEFzc2VydHMgdGhh
dCB0aGUgZm91bmQgdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnN0cnVjdG9yIHBhc3Nl
ZAorLy8gYXMgdGhlIHNlY29uZCBhcmd1bWVudC4KK3ZhciBhc3NlcnRJbnN0YW5jZW9mOworCisv
LyBBc3NlcnQgdGhhdCB0aGlzIGNvZGUgaXMgbmV2ZXIgZXhlY3V0ZWQgKGkuZS4sIGFsd2F5cyBm
YWlscyBpZiBleGVjdXRlZCkuCit2YXIgYXNzZXJ0VW5yZWFjaGFibGU7CisKKy8vIEFzc2VydCB0
aGF0IHRoZSBmdW5jdGlvbiBjb2RlIGlzIChub3QpIG9wdGltaXplZC4KKy8vIE9ubHkgd29ya3Mg
d2l0aCAtLWFsbG93LW5hdGl2ZXMtc3ludGF4LgordmFyIGFzc2VydE9wdGltaXplZDsKK3ZhciBh
c3NlcnRVbm9wdGltaXplZDsKKworLy8gQXNzZXJ0IHRoYXQgYSBzdHJpbmcgY29udGFpbnMgYW5v
dGhlciBleHBlY3RlZCBzdWJzdHJpbmcuCit2YXIgYXNzZXJ0Q29udGFpbnM7CisKKy8vIEFzc2Vy
dCB0aGF0IGEgc3RyaW5nIG1hdGNoZXMgYSBnaXZlbiByZWdleC4KK3ZhciBhc3NlcnRNYXRjaGVz
OworCisvLyBBc3NlcnQgdGhhdCBhIHByb21pc2UgcmVzb2x2ZXMgb3IgcmVqZWN0cy4KKy8vIFBh
cmFtZXRlcnM6CisvLyB7cHJvbWlzZX0gLSB0aGUgcHJvbWlzZQorLy8ge3N1Y2Nlc3N9IC0gb3B0
aW9uYWwgLSBhIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhl
CisvLyAgICAgICAgICAgICByZXNvbHZpbmcgcHJvbWlzZS4KKy8vICB7ZmFpbH0gLSAgIG9wdGlv
bmFsIC0gYSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZQor
Ly8gICAgICAgICAgICAgcmVqZWN0aW5nIHByb21pc2UuIElmIHRoZSBwcm9taXNlIGlzIHJlamVj
dGVkIGJ1dCBubyB7ZmFpbH0KKy8vICAgICAgICAgICAgIGNhbGxiYWNrIGlzIHNldCwgdGhlIGVy
cm9yIGlzIHByb3BhZ2F0ZWQgb3V0IG9mIHRoZSBwcm9taXNlCisvLyAgICAgICAgICAgICBjaGFp
bi4KK3ZhciBhc3NlcnRQcm9taXNlUmVzdWx0OworCit2YXIgcHJvbWlzZVRlc3RDaGFpbjsKK3Zh
ciBwcm9taXNlVGVzdENvdW50ID0gMDsKKworLy8gVGhlc2UgYml0cyBtdXN0IGJlIGluIHN5bmMg
d2l0aCBiaXRzIGRlZmluZWQgaW4gUnVudGltZV9HZXRPcHRpbWl6YXRpb25TdGF0dXMKK3ZhciBW
OE9wdGltaXphdGlvblN0YXR1cyA9IHsKKyAga0lzRnVuY3Rpb246IDEgPDwgMCwKKyAga05ldmVy
T3B0aW1pemU6IDEgPDwgMSwKKyAga0Fsd2F5c09wdGltaXplOiAxIDw8IDIsCisgIGtNYXliZURl
b3B0ZWQ6IDEgPDwgMywKKyAga09wdGltaXplZDogMSA8PCA0LAorICBrVHVyYm9GYW5uZWQ6IDEg
PDwgNSwKKyAga0ludGVycHJldGVkOiAxIDw8IDYsCisgIGtNYXJrZWRGb3JPcHRpbWl6YXRpb246
IDEgPDwgNywKKyAga01hcmtlZEZvckNvbmN1cnJlbnRPcHRpbWl6YXRpb246IDEgPDwgOCwKKyAg
a09wdGltaXppbmdDb25jdXJyZW50bHk6IDEgPDwgOSwKKyAga0lzRXhlY3V0aW5nOiAxIDw8IDEw
LAorICBrVG9wbW9zdEZyYW1lSXNUdXJib0Zhbm5lZDogMSA8PCAxMSwKKyAga0xpdGVNb2RlOiAx
IDw8IDEyLAorICBrTWFya2VkRm9yRGVvcHRpbWl6YXRpb246IDEgPDwgMTMsCisgIGtCYXNlbGlu
ZTogMSA8PCAxNCwKKyAga1RvcG1vc3RGcmFtZUlzSW50ZXJwcmV0ZWQ6IDEgPDwgMTUsCisgIGtU
b3Btb3N0RnJhbWVJc0Jhc2VsaW5lOiAxIDw8IDE2LAorfTsKKworLy8gUmV0dXJucyB0cnVlIGlm
IC0tbGl0ZS1tb2RlIGlzIG9uIGFuZCB3ZSBjYW4ndCBldmVyIHR1cm4gb24gb3B0aW1pemF0aW9u
LgordmFyIGlzTmV2ZXJPcHRpbWl6ZUxpdGVNb2RlOworCisvLyBSZXR1cm5zIHRydWUgaWYgLS1u
by1vcHQgbW9kZSBpcyBvbi4KK3ZhciBpc05ldmVyT3B0aW1pemU7CisKKy8vIFJldHVybnMgdHJ1
ZSBpZiAtLWFsd2F5cy1vcHQgbW9kZSBpcyBvbi4KK3ZhciBpc0Fsd2F5c09wdGltaXplOworCisv
LyBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24gaW4gaW50ZXJwcmV0ZWQuCit2YXIgaXNJ
bnRlcnByZXRlZDsKKworLy8gUmV0dXJucyB0cnVlIGlmIGdpdmVuIGZ1bmN0aW9uIGluIGJhc2Vs
aW5lLgordmFyIGlzQmFzZWxpbmU7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBmdW5jdGlv
biBpbiB1bm9wdGltaXplZCAoaW50ZXJwcmV0ZWQgb3IgYmFzZWxpbmUpLgordmFyIGlzVW5vcHRp
bWl6ZWQ7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBmdW5jdGlvbiBpcyBvcHRpbWl6ZWQu
Cit2YXIgaXNPcHRpbWl6ZWQ7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBmdW5jdGlvbiBp
cyBjb21waWxlZCBieSBUdXJib0Zhbi4KK3ZhciBpc1R1cmJvRmFubmVkOworCisvLyBNb25rZXkt
cGF0Y2hhYmxlIGFsbC1wdXJwb3NlIGZhaWx1cmUgaGFuZGxlci4KK3ZhciBmYWlsV2l0aE1lc3Nh
Z2U7CisKKy8vIFJldHVybnMgdGhlIGZvcm1hdHRlZCBmYWlsdXJlIHRleHQuICBVc2VkIGJ5IHRl
c3QtYXN5bmMuanMuCit2YXIgZm9ybWF0RmFpbHVyZVRleHQ7CisKKy8vIFJldHVybnMgYSBwcmV0
dHktcHJpbnRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhc3NlZCB2YWx1ZS4KK3Zh
ciBwcmV0dHlQcmludGVkOworCisoZnVuY3Rpb24gKCkgeyAgLy8gU2NvcGUgZm9yIHV0aWxpdHkg
ZnVuY3Rpb25zLgorCisgIHZhciBPYmplY3RQcm90b3R5cGVUb1N0cmluZyA9IE9iamVjdC5wcm90
b3R5cGUudG9TdHJpbmc7CisgIHZhciBOdW1iZXJQcm90b3R5cGVWYWx1ZU9mID0gTnVtYmVyLnBy
b3RvdHlwZS52YWx1ZU9mOworICB2YXIgQm9vbGVhblByb3RvdHlwZVZhbHVlT2YgPSBCb29sZWFu
LnByb3RvdHlwZS52YWx1ZU9mOworICB2YXIgU3RyaW5nUHJvdG90eXBlVmFsdWVPZiA9IFN0cmlu
Zy5wcm90b3R5cGUudmFsdWVPZjsKKyAgdmFyIERhdGVQcm90b3R5cGVWYWx1ZU9mID0gRGF0ZS5w
cm90b3R5cGUudmFsdWVPZjsKKyAgdmFyIFJlZ0V4cFByb3RvdHlwZVRvU3RyaW5nID0gUmVnRXhw
LnByb3RvdHlwZS50b1N0cmluZzsKKyAgdmFyIEFycmF5UHJvdG90eXBlRm9yRWFjaCA9IEFycmF5
LnByb3RvdHlwZS5mb3JFYWNoOworICB2YXIgQXJyYXlQcm90b3R5cGVKb2luID0gQXJyYXkucHJv
dG90eXBlLmpvaW47CisgIHZhciBBcnJheVByb3RvdHlwZU1hcCA9IEFycmF5LnByb3RvdHlwZS5t
YXA7CisgIHZhciBBcnJheVByb3RvdHlwZVB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDsKKyAg
dmFyIEpTT05TdHJpbmdpZnkgPSBKU09OLnN0cmluZ2lmeTsKKworICB2YXIgQmlnSW50UHJvdG90
eXBlVmFsdWVPZjsKKyAgLy8gVE9ETyhuZWlzKTogUmVtb3ZlIHRyeS1jYXRjaCBvbmNlIEJpZ0lu
dHMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4KKyAgdHJ5IHsKKyAgICBCaWdJbnRQcm90b3R5cGVW
YWx1ZU9mID0gQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mOworICB9IGNhdGNoIChlKSB7fQorCisg
IGZ1bmN0aW9uIGNsYXNzT2Yob2JqZWN0KSB7CisgICAgLy8gQXJndW1lbnQgbXVzdCBub3QgYmUg
bnVsbCBvciB1bmRlZmluZWQuCisgICAgdmFyIHN0cmluZyA9IE9iamVjdFByb3RvdHlwZVRvU3Ry
aW5nLmNhbGwob2JqZWN0KTsKKyAgICAvLyBTdHJpbmcgaGFzIGZvcm1hdCBbb2JqZWN0IDxDbGFz
c05hbWU+XS4KKyAgICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZyg4LCBzdHJpbmcubGVuZ3RoIC0g
MSk7CisgIH0KKworCisgIGZ1bmN0aW9uIFZhbHVlT2YodmFsdWUpIHsKKyAgICBzd2l0Y2ggKGNs
YXNzT2YodmFsdWUpKSB7CisgICAgICBjYXNlICJOdW1iZXIiOgorICAgICAgICByZXR1cm4gTnVt
YmVyUHJvdG90eXBlVmFsdWVPZi5jYWxsKHZhbHVlKTsKKyAgICAgIGNhc2UgIkJpZ0ludCI6Cisg
ICAgICAgIHJldHVybiBCaWdJbnRQcm90b3R5cGVWYWx1ZU9mLmNhbGwodmFsdWUpOworICAgICAg
Y2FzZSAiU3RyaW5nIjoKKyAgICAgICAgcmV0dXJuIFN0cmluZ1Byb3RvdHlwZVZhbHVlT2YuY2Fs
bCh2YWx1ZSk7CisgICAgICBjYXNlICJCb29sZWFuIjoKKyAgICAgICAgcmV0dXJuIEJvb2xlYW5Q
cm90b3R5cGVWYWx1ZU9mLmNhbGwodmFsdWUpOworICAgICAgY2FzZSAiRGF0ZSI6CisgICAgICAg
IHJldHVybiBEYXRlUHJvdG90eXBlVmFsdWVPZi5jYWxsKHZhbHVlKTsKKyAgICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisgIH0KKworCisgIHByZXR0eVByaW50ZWQg
PSBmdW5jdGlvbiBwcmV0dHlQcmludGVkKHZhbHVlKSB7CisgICAgc3dpdGNoICh0eXBlb2YgdmFs
dWUpIHsKKyAgICAgIGNhc2UgInN0cmluZyI6CisgICAgICAgIHJldHVybiBKU09OU3RyaW5naWZ5
KHZhbHVlKTsKKyAgICAgIGNhc2UgImJpZ2ludCI6CisgICAgICAgIHJldHVybiBTdHJpbmcodmFs
dWUpICsgIm4iOworICAgICAgY2FzZSAibnVtYmVyIjoKKyAgICAgICAgaWYgKHZhbHVlID09PSAw
ICYmICgxIC8gdmFsdWUpIDwgMCkgcmV0dXJuICItMCI7CisgICAgICAgIC8vIEZBTExUSFJPVUdI
LgorICAgICAgY2FzZSAiYm9vbGVhbiI6CisgICAgICBjYXNlICJ1bmRlZmluZWQiOgorICAgICAg
Y2FzZSAiZnVuY3Rpb24iOgorICAgICAgY2FzZSAic3ltYm9sIjoKKyAgICAgICAgcmV0dXJuIFN0
cmluZyh2YWx1ZSk7CisgICAgICBjYXNlICJvYmplY3QiOgorICAgICAgICBpZiAodmFsdWUgPT09
IG51bGwpIHJldHVybiAibnVsbCI7CisgICAgICAgIHZhciBvYmplY3RDbGFzcyA9IGNsYXNzT2Yo
dmFsdWUpOworICAgICAgICBzd2l0Y2ggKG9iamVjdENsYXNzKSB7CisgICAgICAgICAgY2FzZSAi
TnVtYmVyIjoKKyAgICAgICAgICBjYXNlICJCaWdJbnQiOgorICAgICAgICAgIGNhc2UgIlN0cmlu
ZyI6CisgICAgICAgICAgY2FzZSAiQm9vbGVhbiI6CisgICAgICAgICAgY2FzZSAiRGF0ZSI6Cisg
ICAgICAgICAgICByZXR1cm4gb2JqZWN0Q2xhc3MgKyAiKCIgKyBwcmV0dHlQcmludGVkKFZhbHVl
T2YodmFsdWUpKSArICIpIjsKKyAgICAgICAgICBjYXNlICJSZWdFeHAiOgorICAgICAgICAgICAg
cmV0dXJuIFJlZ0V4cFByb3RvdHlwZVRvU3RyaW5nLmNhbGwodmFsdWUpOworICAgICAgICAgIGNh
c2UgIkFycmF5IjoKKyAgICAgICAgICAgIHZhciBtYXBwZWQgPSBBcnJheVByb3RvdHlwZU1hcC5j
YWxsKAorICAgICAgICAgICAgICAgIHZhbHVlLCBwcmV0dHlQcmludGVkQXJyYXlFbGVtZW50KTsK
KyAgICAgICAgICAgIHZhciBqb2luZWQgPSBBcnJheVByb3RvdHlwZUpvaW4uY2FsbChtYXBwZWQs
ICIsIik7CisgICAgICAgICAgICByZXR1cm4gIlsiICsgam9pbmVkICsgIl0iOworICAgICAgICAg
IGNhc2UgIlVpbnQ4QXJyYXkiOgorICAgICAgICAgIGNhc2UgIkludDhBcnJheSI6CisgICAgICAg
ICAgY2FzZSAiSW50MTZBcnJheSI6CisgICAgICAgICAgY2FzZSAiVWludDE2QXJyYXkiOgorICAg
ICAgICAgIGNhc2UgIlVpbnQzMkFycmF5IjoKKyAgICAgICAgICBjYXNlICJJbnQzMkFycmF5IjoK
KyAgICAgICAgICBjYXNlICJGbG9hdDMyQXJyYXkiOgorICAgICAgICAgIGNhc2UgIkZsb2F0NjRB
cnJheSI6CisgICAgICAgICAgICB2YXIgam9pbmVkID0gQXJyYXlQcm90b3R5cGVKb2luLmNhbGwo
dmFsdWUsICIsIik7CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Q2xhc3MgKyAiKFsiICsgam9p
bmVkICsgIl0pIjsKKyAgICAgICAgICBjYXNlICJPYmplY3QiOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBvYmplY3RDbGFzcyArICIo
IiArIFN0cmluZyh2YWx1ZSkgKyAiKSI7CisgICAgICAgIH0KKyAgICAgICAgLy8gY2xhc3NPZigp
IHJldHVybmVkICJPYmplY3QiLgorICAgICAgICB2YXIgbmFtZSA9IHZhbHVlLmNvbnN0cnVjdG9y
Lm5hbWU7CisgICAgICAgIGlmIChuYW1lKSByZXR1cm4gbmFtZSArICIoKSI7CisgICAgICAgIHJl
dHVybiAiT2JqZWN0KCkiOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICItLSB1bmtu
b3duIHZhbHVlIC0tIjsKKyAgICB9CisgIH0KKworCisgIGZ1bmN0aW9uIHByZXR0eVByaW50ZWRB
cnJheUVsZW1lbnQodmFsdWUsIGluZGV4LCBhcnJheSkgeworICAgIGlmICh2YWx1ZSA9PT0gdW5k
ZWZpbmVkICYmICEoaW5kZXggaW4gYXJyYXkpKSByZXR1cm4gIiI7CisgICAgcmV0dXJuIHByZXR0
eVByaW50ZWQodmFsdWUpOworICB9CisKKworICBmYWlsV2l0aE1lc3NhZ2UgPSBmdW5jdGlvbiBm
YWlsV2l0aE1lc3NhZ2UobWVzc2FnZSkgeworICAgIHRocm93IG5ldyBNanNVbml0QXNzZXJ0aW9u
RXJyb3IobWVzc2FnZSk7CisgIH0KKworICBmb3JtYXRGYWlsdXJlVGV4dCA9IGZ1bmN0aW9uKGV4
cGVjdGVkVGV4dCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAgdmFyIG1lc3NhZ2UgPSAiRmFpbCIg
KyAidXJlIjsKKyAgICBpZiAobmFtZV9vcHQpIHsKKyAgICAgIC8vIEZpeCB0aGlzIHdoZW4gd2Ug
ZGl0Y2ggdGhlIG9sZCB0ZXN0IHJ1bm5lci4KKyAgICAgIG1lc3NhZ2UgKz0gIiAoIiArIG5hbWVf
b3B0ICsgIikiOworICAgIH0KKworICAgIHZhciBmb3VuZFRleHQgPSBwcmV0dHlQcmludGVkKGZv
dW5kKTsKKyAgICBpZiAoZXhwZWN0ZWRUZXh0Lmxlbmd0aCA8PSA0MCAmJiBmb3VuZFRleHQubGVu
Z3RoIDw9IDQwKSB7CisgICAgICBtZXNzYWdlICs9ICI6IGV4cGVjdGVkIDwiICsgZXhwZWN0ZWRU
ZXh0ICsgIj4gZm91bmQgPCIgKyBmb3VuZFRleHQgKyAiPiI7CisgICAgfSBlbHNlIHsKKyAgICAg
IG1lc3NhZ2UgKz0gIjpcbmV4cGVjdGVkOlxuIiArIGV4cGVjdGVkVGV4dCArICJcbmZvdW5kOlxu
IiArIGZvdW5kVGV4dDsKKyAgICB9CisgICAgcmV0dXJuIG1lc3NhZ2U7CisgIH0KKworICBmdW5j
dGlvbiBmYWlsKGV4cGVjdGVkVGV4dCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAgcmV0dXJuIGZh
aWxXaXRoTWVzc2FnZShmb3JtYXRGYWlsdXJlVGV4dChleHBlY3RlZFRleHQsIGZvdW5kLCBuYW1l
X29wdCkpOworICB9CisKKworICBmdW5jdGlvbiBkZWVwT2JqZWN0RXF1YWxzKGEsIGIpIHsKKyAg
ICB2YXIgYVByb3BzID0gT2JqZWN0LmtleXMoYSk7CisgICAgYVByb3BzLnNvcnQoKTsKKyAgICB2
YXIgYlByb3BzID0gT2JqZWN0LmtleXMoYik7CisgICAgYlByb3BzLnNvcnQoKTsKKyAgICBpZiAo
IWRlZXBFcXVhbHMoYVByb3BzLCBiUHJvcHMpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYVByb3BzLmxlbmd0aDsgaSsrKSB7CisgICAgICBp
ZiAoIWRlZXBFcXVhbHMoYVthUHJvcHNbaV1dLCBiW2FQcm9wc1tpXV0pKSB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworCisg
IGRlZXBFcXVhbHMgPSBmdW5jdGlvbiBkZWVwRXF1YWxzKGEsIGIpIHsKKyAgICBpZiAoYSA9PT0g
YikgeworICAgICAgLy8gQ2hlY2sgZm9yIC0wLgorICAgICAgaWYgKGEgPT09IDApIHJldHVybiAo
MSAvIGEpID09PSAoMSAvIGIpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh0
eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHJldHVybiBmYWxzZTsKKyAgICBpZiAodHlwZW9mIGEgPT09
ICJudW1iZXIiKSByZXR1cm4gaXNOYU4oYSkgJiYgaXNOYU4oYik7CisgICAgaWYgKHR5cGVvZiBh
ICE9PSAib2JqZWN0IiAmJiB0eXBlb2YgYSAhPT0gImZ1bmN0aW9uIikgcmV0dXJuIGZhbHNlOwor
ICAgIC8vIE5laXRoZXIgYSBub3IgYiBpcyBwcmltaXRpdmUuCisgICAgdmFyIG9iamVjdENsYXNz
ID0gY2xhc3NPZihhKTsKKyAgICBpZiAob2JqZWN0Q2xhc3MgIT09IGNsYXNzT2YoYikpIHJldHVy
biBmYWxzZTsKKyAgICBpZiAob2JqZWN0Q2xhc3MgPT09ICJSZWdFeHAiKSB7CisgICAgICAvLyBG
b3IgUmVnRXhwLCBqdXN0IGNvbXBhcmUgcGF0dGVybiBhbmQgZmxhZ3MgdXNpbmcgaXRzIHRvU3Ry
aW5nLgorICAgICAgcmV0dXJuIFJlZ0V4cFByb3RvdHlwZVRvU3RyaW5nLmNhbGwoYSkgPT09Cisg
ICAgICAgICAgICAgUmVnRXhwUHJvdG90eXBlVG9TdHJpbmcuY2FsbChiKTsKKyAgICB9CisgICAg
Ly8gRnVuY3Rpb25zIGFyZSBvbmx5IGlkZW50aWNhbCB0byB0aGVtc2VsdmVzLgorICAgIGlmIChv
YmplY3RDbGFzcyA9PT0gIkZ1bmN0aW9uIikgcmV0dXJuIGZhbHNlOworICAgIGlmIChvYmplY3RD
bGFzcyA9PT0gIkFycmF5IikgeworICAgICAgdmFyIGVsZW1lbnRDb3VudCA9IDA7CisgICAgICBp
ZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
IH0KKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgeworICAgICAgICBp
ZiAoIWRlZXBFcXVhbHMoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAob2JqZWN0Q2xhc3MgPT09ICJTdHJpbmciIHx8
IG9iamVjdENsYXNzID09PSAiTnVtYmVyIiB8fAorICAgICAgb2JqZWN0Q2xhc3MgPT09ICJCaWdJ
bnQiIHx8IG9iamVjdENsYXNzID09PSAiQm9vbGVhbiIgfHwKKyAgICAgIG9iamVjdENsYXNzID09
PSAiRGF0ZSIpIHsKKyAgICAgIGlmIChWYWx1ZU9mKGEpICE9PSBWYWx1ZU9mKGIpKSByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiBkZWVwT2JqZWN0RXF1YWxzKGEsIGIpOworICB9CisK
KyAgYXNzZXJ0U2FtZSA9IGZ1bmN0aW9uIGFzc2VydFNhbWUoZXhwZWN0ZWQsIGZvdW5kLCBuYW1l
X29wdCkgeworICAgIGlmIChPYmplY3QuaXMoZXhwZWN0ZWQsIGZvdW5kKSkgcmV0dXJuOworICAg
IGZhaWwocHJldHR5UHJpbnRlZChleHBlY3RlZCksIGZvdW5kLCBuYW1lX29wdCk7CisgIH07CisK
KyAgYXNzZXJ0Tm90U2FtZSA9IGZ1bmN0aW9uIGFzc2VydE5vdFNhbWUoZXhwZWN0ZWQsIGZvdW5k
LCBuYW1lX29wdCkgeworICAgIGlmICghT2JqZWN0LmlzKGV4cGVjdGVkLCBmb3VuZCkpIHJldHVy
bjsKKyAgICBmYWlsKCJub3Qgc2FtZSBhcyAiICsgcHJldHR5UHJpbnRlZChleHBlY3RlZCksIGZv
dW5kLCBuYW1lX29wdCk7CisgIH0KKworICBhc3NlcnRFcXVhbHMgPSBmdW5jdGlvbiBhc3NlcnRF
cXVhbHMoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCkgeworICAgIGlmICghZGVlcEVxdWFscyhm
b3VuZCwgZXhwZWN0ZWQpKSB7CisgICAgICBmYWlsKHByZXR0eVByaW50ZWQoZXhwZWN0ZWQpLCBm
b3VuZCwgbmFtZV9vcHQpOworICAgIH0KKyAgfTsKKworICBhc3NlcnROb3RFcXVhbHMgPSBmdW5j
dGlvbiBhc3NlcnROb3RFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCkgeworICAgIGlm
IChkZWVwRXF1YWxzKGZvdW5kLCBleHBlY3RlZCkpIHsKKyAgICAgIGZhaWwoIm5vdCBlcXVhbHMg
dG8gIiArIHByZXR0eVByaW50ZWQoZXhwZWN0ZWQpLCBmb3VuZCwgbmFtZV9vcHQpOworICAgIH0K
KyAgfTsKKworCisgIGFzc2VydEVxdWFsc0RlbHRhID0KKyAgICAgIGZ1bmN0aW9uIGFzc2VydEVx
dWFsc0RlbHRhKGV4cGVjdGVkLCBmb3VuZCwgZGVsdGEsIG5hbWVfb3B0KSB7CisgICAgaWYgKE1h
dGguYWJzKGV4cGVjdGVkIC0gZm91bmQpID4gZGVsdGEpIHsKKyAgICAgIGZhaWwocHJldHR5UHJp
bnRlZChleHBlY3RlZCkgKyAiICstICIgKyBwcmV0dHlQcmludGVkKGRlbHRhKSwgZm91bmQsIG5h
bWVfb3B0KTsKKyAgICB9CisgIH07CisKKworICBhc3NlcnRBcnJheUVxdWFscyA9IGZ1bmN0aW9u
IGFzc2VydEFycmF5RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgICB2YXIg
c3RhcnQgPSAiIjsKKyAgICBpZiAobmFtZV9vcHQpIHsKKyAgICAgIHN0YXJ0ID0gbmFtZV9vcHQg
KyAiIC0gIjsKKyAgICB9CisgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmxlbmd0aCwgZm91bmQu
bGVuZ3RoLCBzdGFydCArICJhcnJheSBsZW5ndGgiKTsKKyAgICBpZiAoZXhwZWN0ZWQubGVuZ3Ro
ID09PSBmb3VuZC5sZW5ndGgpIHsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWQu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkW2ldLCBmb3VuZFtp
XSwKKyAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICsgImFycmF5IGVsZW1lbnQgYXQgaW5kZXgg
IiArIGkpOworICAgICAgfQorICAgIH0KKyAgfTsKKworCisgIGFzc2VydFByb3BlcnRpZXNFcXVh
bCA9IGZ1bmN0aW9uIGFzc2VydFByb3BlcnRpZXNFcXVhbChleHBlY3RlZCwgZm91bmQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
X29wdCkgeworICAgIC8vIENoZWNrIHByb3BlcnRpZXMgb25seS4KKyAgICBpZiAoIWRlZXBPYmpl
Y3RFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kKSkgeworICAgICAgZmFpbChleHBlY3RlZCwgZm91bmQs
IG5hbWVfb3B0KTsKKyAgICB9CisgIH07CisKKworICBhc3NlcnRUb1N0cmluZ0VxdWFscyA9IGZ1
bmN0aW9uIGFzc2VydFRvU3RyaW5nRXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX29wdCkgewor
ICAgIGlmIChleHBlY3RlZCAhPT0gU3RyaW5nKGZvdW5kKSkgeworICAgICAgZmFpbChleHBlY3Rl
ZCwgZm91bmQsIG5hbWVfb3B0KTsKKyAgICB9CisgIH07CisKKworICBhc3NlcnRUcnVlID0gZnVu
Y3Rpb24gYXNzZXJ0VHJ1ZSh2YWx1ZSwgbmFtZV9vcHQpIHsKKyAgICBhc3NlcnRFcXVhbHModHJ1
ZSwgdmFsdWUsIG5hbWVfb3B0KTsKKyAgfTsKKworCisgIGFzc2VydEZhbHNlID0gZnVuY3Rpb24g
YXNzZXJ0RmFsc2UodmFsdWUsIG5hbWVfb3B0KSB7CisgICAgYXNzZXJ0RXF1YWxzKGZhbHNlLCB2
YWx1ZSwgbmFtZV9vcHQpOworICB9OworCisKKyAgYXNzZXJ0TnVsbCA9IGZ1bmN0aW9uIGFzc2Vy
dE51bGwodmFsdWUsIG5hbWVfb3B0KSB7CisgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7CisgICAg
ICBmYWlsKCJudWxsIiwgdmFsdWUsIG5hbWVfb3B0KTsKKyAgICB9CisgIH07CisKKworICBhc3Nl
cnROb3ROdWxsID0gZnVuY3Rpb24gYXNzZXJ0Tm90TnVsbCh2YWx1ZSwgbmFtZV9vcHQpIHsKKyAg
ICBpZiAodmFsdWUgPT09IG51bGwpIHsKKyAgICAgIGZhaWwoIm5vdCBudWxsIiwgdmFsdWUsIG5h
bWVfb3B0KTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gZXhlY3V0ZUNvZGUoY29kZSkgewor
ICAgIGlmICh0eXBlb2YgY29kZSA9PT0gJ2Z1bmN0aW9uJykgIHJldHVybiBjb2RlKCk7CisgICAg
aWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJykgcmV0dXJuIGV2YWwoY29kZSk7CisgICAgZmFp
bFdpdGhNZXNzYWdlKAorICAgICAgICAnR2l2ZW4gY29kZSBpcyBuZWl0aGVyIGZ1bmN0aW9uIG5v
ciBzdHJpbmcsIGJ1dCAnICsgKHR5cGVvZiBjb2RlKSArCisgICAgICAgICc6IDwnICsgcHJldHR5
UHJpbnRlZChjb2RlKSArICc+Jyk7CisgIH0KKworICBmdW5jdGlvbiBjaGVja0V4Y2VwdGlvbihl
LCB0eXBlX29wdCwgY2F1c2Vfb3B0KSB7CisgICAgaWYgKHR5cGVfb3B0ICE9PSB1bmRlZmluZWQp
IHsKKyAgICAgIGFzc2VydEVxdWFscygnZnVuY3Rpb24nLCB0eXBlb2YgdHlwZV9vcHQpOworICAg
ICAgYXNzZXJ0SW5zdGFuY2VvZihlLCB0eXBlX29wdCk7CisgICAgfQorICAgIGlmIChSZWdFeHAg
IT09IHVuZGVmaW5lZCAmJiBjYXVzZV9vcHQgaW5zdGFuY2VvZiBSZWdFeHApIHsKKyAgICAgIGFz
c2VydE1hdGNoZXMoY2F1c2Vfb3B0LCBlLm1lc3NhZ2UsICdFcnJvciBtZXNzYWdlJyk7CisgICAg
fSBlbHNlIGlmIChjYXVzZV9vcHQgIT09IHVuZGVmaW5lZCkgeworICAgICAgYXNzZXJ0RXF1YWxz
KGNhdXNlX29wdCwgZS5tZXNzYWdlLCAnRXJyb3IgbWVzc2FnZScpOworICAgIH0KKyAgfQorCisg
IGFzc2VydFRocm93cyA9IGZ1bmN0aW9uIGFzc2VydFRocm93cyhjb2RlLCB0eXBlX29wdCwgY2F1
c2Vfb3B0KSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHR5cGVfb3B0ID09PSB1
bmRlZmluZWQpIHsKKyAgICAgIGZhaWxXaXRoTWVzc2FnZSgnaW52YWxpZCB1c2Ugb2YgYXNzZXJ0
VGhyb3dzLCB1bmtub3duIHR5cGVfb3B0IGdpdmVuJyk7CisgICAgfQorICAgIGlmICh0eXBlX29w
dCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0eXBlX29wdCAhPT0gJ2Z1bmN0aW9uJykgeworICAg
ICAgZmFpbFdpdGhNZXNzYWdlKAorICAgICAgICAgICdpbnZhbGlkIHVzZSBvZiBhc3NlcnRUaHJv
d3MsIG1heWJlIHlvdSB3YW50IGFzc2VydFRocm93c0VxdWFscycpOworICAgIH0KKyAgICB0cnkg
eworICAgICAgZXhlY3V0ZUNvZGUoY29kZSk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgY2hl
Y2tFeGNlcHRpb24oZSwgdHlwZV9vcHQsIGNhdXNlX29wdCk7CisgICAgICByZXR1cm47CisgICAg
fQorICAgIGxldCBtc2cgPSAnRGlkIG5vdCB0aHJvdyBleGNlcHRpb24nOworICAgIGlmICh0eXBl
X29wdCAhPT0gdW5kZWZpbmVkICYmIHR5cGVfb3B0Lm5hbWUgIT09IHVuZGVmaW5lZCkKKyAgICAg
IG1zZyArPSAnLCBleHBlY3RlZCAnICsgdHlwZV9vcHQubmFtZTsKKyAgICBmYWlsV2l0aE1lc3Nh
Z2UobXNnKTsKKyAgfTsKKworICBhc3NlcnRUaHJvd3NFcXVhbHMgPSBmdW5jdGlvbiBhc3NlcnRU
aHJvd3NFcXVhbHMoZnVuLCB2YWwpIHsKKyAgICB0cnkgeworICAgICAgZnVuKCk7CisgICAgfSBj
YXRjaCAoZSkgeworICAgICAgYXNzZXJ0U2FtZSh2YWwsIGUpOworICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBmYWlsV2l0aE1lc3NhZ2UoJ0RpZCBub3QgdGhyb3cgZXhjZXB0aW9uLCBleHBlY3Rl
ZCAnICsgcHJldHR5UHJpbnRlZCh2YWwpKTsKKyAgfTsKKworICBhc3NlcnRUaHJvd3NBc3luYyA9
IGZ1bmN0aW9uIGFzc2VydFRocm93c0FzeW5jKHByb21pc2UsIHR5cGVfb3B0LCBjYXVzZV9vcHQp
IHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdHlwZV9vcHQgPT09IHVuZGVmaW5l
ZCkgeworICAgICAgZmFpbFdpdGhNZXNzYWdlKCdpbnZhbGlkIHVzZSBvZiBhc3NlcnRUaHJvd3Ms
IHVua25vd24gdHlwZV9vcHQgZ2l2ZW4nKTsKKyAgICB9CisgICAgaWYgKHR5cGVfb3B0ICE9PSB1
bmRlZmluZWQgJiYgdHlwZW9mIHR5cGVfb3B0ICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICBmYWls
V2l0aE1lc3NhZ2UoCisgICAgICAgICAgJ2ludmFsaWQgdXNlIG9mIGFzc2VydFRocm93cywgbWF5
YmUgeW91IHdhbnQgYXNzZXJ0VGhyb3dzRXF1YWxzJyk7CisgICAgfQorICAgIGxldCBtc2cgPSAn
UHJvbWlzZSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbic7CisgICAgaWYgKHR5cGVfb3B0ICE9PSB1
bmRlZmluZWQgJiYgdHlwZV9vcHQubmFtZSAhPT0gdW5kZWZpbmVkKQorICAgICAgbXNnICs9ICcs
IGV4cGVjdGVkICcgKyB0eXBlX29wdC5uYW1lOworICAgIHJldHVybiBhc3NlcnRQcm9taXNlUmVz
dWx0KAorICAgICAgICBwcm9taXNlLAorICAgICAgICAvLyBVc2Ugc2V0VGltZW91dCB0byB0aHJv
dyB0aGUgZXJyb3IgYWdhaW4gdG8gZ2V0IG91dCBvZiB0aGUgcHJvbWlzZQorICAgICAgICAvLyBj
aGFpbi4KKyAgICAgICAgcmVzID0+IHNldFRpbWVvdXQoXyA9PiBmYWlsKCc8dGhyb3c+JywgcmVz
LCBtc2cpLCAwKSwKKyAgICAgICAgZSA9PiBjaGVja0V4Y2VwdGlvbihlLCB0eXBlX29wdCwgY2F1
c2Vfb3B0KSk7CisgIH07CisKKyAgYXNzZXJ0SW5zdGFuY2VvZiA9IGZ1bmN0aW9uIGFzc2VydElu
c3RhbmNlb2Yob2JqLCB0eXBlKSB7CisgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgdHlwZSkpIHsK
KyAgICAgIHZhciBhY3R1YWxUeXBlTmFtZSA9IG51bGw7CisgICAgICB2YXIgYWN0dWFsQ29uc3Ry
dWN0b3IgPSBvYmogJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikuY29uc3RydWN0b3I7Cisg
ICAgICBpZiAodHlwZW9mIGFjdHVhbENvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKSB7CisgICAg
ICAgIGFjdHVhbFR5cGVOYW1lID0gYWN0dWFsQ29uc3RydWN0b3IubmFtZSB8fCBTdHJpbmcoYWN0
dWFsQ29uc3RydWN0b3IpOworICAgICAgfQorICAgICAgZmFpbFdpdGhNZXNzYWdlKAorICAgICAg
ICAgICdPYmplY3QgPCcgKyBwcmV0dHlQcmludGVkKG9iaikgKyAnPiBpcyBub3QgYW4gaW5zdGFu
Y2Ugb2YgPCcgKworICAgICAgICAgICh0eXBlLm5hbWUgfHwgdHlwZSkgKyAnPicgKworICAgICAg
ICAgIChhY3R1YWxUeXBlTmFtZSA/ICcgYnV0IG9mIDwnICsgYWN0dWFsVHlwZU5hbWUgKyAnPicg
OiAnJykpOworICAgIH0KKyAgfTsKKworICBhc3NlcnREb2VzTm90VGhyb3cgPSBmdW5jdGlvbiBh
c3NlcnREb2VzTm90VGhyb3coY29kZSwgbmFtZV9vcHQpIHsKKyAgICB0cnkgeworICAgICAgZXhl
Y3V0ZUNvZGUoY29kZSk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgaWYgKGUgaW5zdGFuY2Vv
ZiBNanNVbml0QXNzZXJ0aW9uRXJyb3IpIHRocm93IGU7CisgICAgICBmYWlsV2l0aE1lc3NhZ2Uo
InRocmV3IGFuIGV4Y2VwdGlvbjogIiArIChlLm1lc3NhZ2UgfHwgZSkpOworICAgIH0KKyAgfTsK
KworICBhc3NlcnRVbnJlYWNoYWJsZSA9IGZ1bmN0aW9uIGFzc2VydFVucmVhY2hhYmxlKG5hbWVf
b3B0KSB7CisgICAgLy8gRml4IHRoaXMgd2hlbiB3ZSBkaXRjaCB0aGUgb2xkIHRlc3QgcnVubmVy
LgorICAgIHZhciBtZXNzYWdlID0gIkZhaWwiICsgInVyZTogdW5yZWFjaGFibGUiOworICAgIGlm
IChuYW1lX29wdCkgeworICAgICAgbWVzc2FnZSArPSAiIC0gIiArIG5hbWVfb3B0OworICAgIH0K
KyAgICBmYWlsV2l0aE1lc3NhZ2UobWVzc2FnZSk7CisgIH07CisKKyAgYXNzZXJ0Q29udGFpbnMg
PSBmdW5jdGlvbihzdWIsIHZhbHVlLCBuYW1lX29wdCkgeworICAgIGlmICh2YWx1ZSA9PSBudWxs
ID8gKHN1YiAhPSBudWxsKSA6IHZhbHVlLmluZGV4T2Yoc3ViKSA9PSAtMSkgeworICAgICAgZmFp
bCgiY29udGFpbnMgJyIgKyBTdHJpbmcoc3ViKSArICInIiwgdmFsdWUsIG5hbWVfb3B0KTsKKyAg
ICB9CisgIH07CisKKyAgYXNzZXJ0TWF0Y2hlcyA9IGZ1bmN0aW9uKHJlZ2V4cCwgc3RyLCBuYW1l
X29wdCkgeworICAgIGlmICghKHJlZ2V4cCBpbnN0YW5jZW9mIFJlZ0V4cCkpIHsKKyAgICAgIHJl
Z2V4cCA9IG5ldyBSZWdFeHAocmVnZXhwKTsKKyAgICB9CisgICAgaWYgKCFzdHIubWF0Y2gocmVn
ZXhwKSkgeworICAgICAgZmFpbCgic2hvdWxkIG1hdGNoICciICsgcmVnZXhwICsgIiciLCBzdHIs
IG5hbWVfb3B0KTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gY29uY2F0ZW5hdGVFcnJvcnMo
c3RhY2ssIGV4Y2VwdGlvbikgeworICAgIC8vIElmIHRoZSBleGNlcHRpb24gZG9lcyBub3QgY29u
dGFpbiBhIHN0YWNrIHRyYWNlLCB3cmFwIGl0IGluIGEgbmV3IEVycm9yLgorICAgIGlmICghZXhj
ZXB0aW9uLnN0YWNrKSBleGNlcHRpb24gPSBuZXcgRXJyb3IoZXhjZXB0aW9uKTsKKworICAgIC8v
IElmIHRoZSBleGNlcHRpb24gYWxyZWFkeSBwcm92aWRlcyBhIHNwZWNpYWwgc3RhY2sgdHJhY2Us
IHdlIGRvIG5vdCBtb2RpZnkKKyAgICAvLyBpdC4KKyAgICBpZiAodHlwZW9mIGV4Y2VwdGlvbi5z
dGFjayAhPT0gJ3N0cmluZycpIHsKKyAgICAgIHJldHVybiBleGNlcHRpb247CisgICAgfQorICAg
IGV4Y2VwdGlvbi5zdGFjayA9IHN0YWNrICsgJ1xuXG4nICsgZXhjZXB0aW9uLnN0YWNrOworICAg
IHJldHVybiBleGNlcHRpb247CisgIH0KKworICBhc3NlcnRQcm9taXNlUmVzdWx0ID0gZnVuY3Rp
b24ocHJvbWlzZSwgc3VjY2VzcywgZmFpbCkgeworICAgIGlmIChzdWNjZXNzICE9PSB1bmRlZmlu
ZWQpIGFzc2VydEVxdWFscygnZnVuY3Rpb24nLCB0eXBlb2Ygc3VjY2Vzcyk7CisgICAgaWYgKGZh
aWwgIT09IHVuZGVmaW5lZCkgYXNzZXJ0RXF1YWxzKCdmdW5jdGlvbicsIHR5cGVvZiBmYWlsKTsK
KyAgICBhc3NlcnRJbnN0YW5jZW9mKHByb21pc2UsIFByb21pc2UpOworICAgIGNvbnN0IHN0YWNr
ID0gKG5ldyBFcnJvcigpKS5zdGFjazsKKworICAgIHZhciB0ZXN0X3Byb21pc2UgPSBwcm9taXNl
LnRoZW4oCisgICAgICAgIHJlc3VsdCA9PiB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IGlmICgtLXByb21pc2VUZXN0Q291bnQgPT0gMCkgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cisg
ICAgICAgICAgICBpZiAoc3VjY2VzcyAhPT0gdW5kZWZpbmVkKSBzdWNjZXNzKHJlc3VsdCk7Cisg
ICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8g
dGhyb3cgdGhlIGVycm9yIGFnYWluIHRvIGdldCBvdXQgb2YgdGhlIHByb21pc2UKKyAgICAgICAg
ICAgIC8vIGNoYWluLgorICAgICAgICAgICAgc2V0VGltZW91dChfID0+IHsKKyAgICAgICAgICAg
ICAgdGhyb3cgY29uY2F0ZW5hdGVFcnJvcnMoc3RhY2ssIGUpOworICAgICAgICAgICAgfSwgMCk7
CisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICByZXN1bHQgPT4geworICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICBpZiAoLS1wcm9taXNlVGVzdENvdW50ID09IDApIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgaWYgKGZhaWwgPT09IHVuZGVmaW5lZCkgdGhy
b3cgcmVzdWx0OworICAgICAgICAgICAgZmFpbChyZXN1bHQpOworICAgICAgICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIHRocm93IHRoZSBlcnJvciBh
Z2FpbiB0byBnZXQgb3V0IG9mIHRoZSBwcm9taXNlCisgICAgICAgICAgICAvLyBjaGFpbi4KKyAg
ICAgICAgICAgIHNldFRpbWVvdXQoXyA9PiB7CisgICAgICAgICAgICAgIHRocm93IGNvbmNhdGVu
YXRlRXJyb3JzKHN0YWNrLCBlKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CisKKyAgICBpZiAoIXByb21pc2VUZXN0Q2hhaW4pIHByb21pc2VUZXN0Q2hhaW4g
PSBQcm9taXNlLnJlc29sdmUoKTsKKyAgICAvLyB3YWl0VW50aWxEb25lIGlzIGlkZW1wb3RlbnQu
CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgKytwcm9taXNlVGVzdENvdW50
OworICAgIHJldHVybiBwcm9taXNlVGVzdENoYWluLnRoZW4odGVzdF9wcm9taXNlKTsKKyAgfTsK
KworICB2YXIgT3B0aW1pemF0aW9uU3RhdHVzSW1wbCA9IHVuZGVmaW5lZDsKKworICB2YXIgT3B0
aW1pemF0aW9uU3RhdHVzID0gZnVuY3Rpb24oZnVuKSB7CisgICAgaWYgKE9wdGltaXphdGlvblN0
YXR1c0ltcGwgPT09IHVuZGVmaW5lZCkgeworICAgICAgdHJ5IHsKKyAgICAgICAgT3B0aW1pemF0
aW9uU3RhdHVzSW1wbCA9IG5ldyBGdW5jdGlvbigKKyAgICAgICAgICAgICJmdW4iLCAicmV0dXJu
ICVHZXRPcHRpbWl6YXRpb25TdGF0dXMoZnVuKTsiKTsKKyAgICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJuYXRpdmVzIHN5bnRheCBub3QgYWxsb3dlZCIpOworICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gT3B0aW1pemF0aW9uU3RhdHVzSW1wbChmdW4pOworICB9
CisKKyAgYXNzZXJ0VW5vcHRpbWl6ZWQgPSBmdW5jdGlvbiBhc3NlcnRVbm9wdGltaXplZCgKKyAg
ICAgIGZ1biwgbmFtZV9vcHQsIHNraXBfaWZfbWF5YmVfZGVvcHRlZCA9IHRydWUpIHsKKyAgICB2
YXIgb3B0X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1cyhmdW4pOworICAgIC8vIFRlc3RzIHRo
YXQgdXNlIGFzc2VydFVub3B0aW1pemVkKCkgZG8gbm90IG1ha2Ugc2Vuc2UgaWYgLS1hbHdheXMt
b3B0CisgICAgLy8gb3B0aW9uIGlzIHByb3ZpZGVkLiBTdWNoIHRlc3RzIG11c3QgYWRkIC0tbm8t
YWx3YXlzLW9wdCB0byBmbGFncyBjb21tZW50LgorICAgIGFzc2VydEZhbHNlKChvcHRfc3RhdHVz
ICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0Fsd2F5c09wdGltaXplKSAhPT0gMCwKKyAgICAgICAg
ICAgICAgICAidGVzdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggLS1hbHdheXMtb3B0Iik7Cisg
ICAgYXNzZXJ0VHJ1ZSgob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtJc0Z1bmN0
aW9uKSAhPT0gMCwgbmFtZV9vcHQpOworICAgIGlmIChza2lwX2lmX21heWJlX2Rlb3B0ZWQgJiYK
KyAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rTWF5YmVEZW9wdGVk
KSAhPT0gMCkgeworICAgICAgLy8gV2hlbiAtLWRlb3B0LWV2ZXJ5LW4tdGltZXMgZmxhZyBpcyBz
cGVjaWZpZWQgaXQncyBubyBsb25nZXIgZ3VhcmFudGVlZAorICAgICAgLy8gdGhhdCBwYXJ0aWN1
bGFyIGZ1bmN0aW9uIGlzIHN0aWxsIGRlb3B0aW1pemVkLCBzbyBrZWVwIHJ1bm5pbmcgdGhlIHRl
c3QKKyAgICAgIC8vIHRvIHN0cmVzcyB0ZXN0IHRoZSBkZW9wdGltaXplci4KKyAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgdmFyIGlzX29wdGltaXplZCA9IChvcHRfc3RhdHVzICYgVjhPcHRpbWl6
YXRpb25TdGF0dXMua09wdGltaXplZCkgIT09IDA7CisgICAgYXNzZXJ0RmFsc2UoaXNfb3B0aW1p
emVkLCBuYW1lX29wdCk7CisgIH0KKworICBhc3NlcnRPcHRpbWl6ZWQgPSBmdW5jdGlvbiBhc3Nl
cnRPcHRpbWl6ZWQoCisgICAgICBmdW4sIG5hbWVfb3B0LCBza2lwX2lmX21heWJlX2Rlb3B0ZWQg
PSB0cnVlKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXMoZnVuKTsK
KyAgICAvLyBUZXN0cyB0aGF0IHVzZSBhc3NlcnRPcHRpbWl6ZWQoKSBkbyBub3QgbWFrZSBzZW5z
ZSBmb3IgTGl0ZSBtb2RlIHdoZXJlCisgICAgLy8gb3B0aW1pemF0aW9uIGlzIGFsd2F5cyBkaXNh
YmxlZCwgZXhwbGljaXRseSBleGl0IHRoZSB0ZXN0IHdpdGggYSB3YXJuaW5nLgorICAgIGlmIChv
cHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0xpdGVNb2RlKSB7CisgICAgICBwcmlu
dCgiV2FybmluZzogVGVzdCB1c2VzIGFzc2VydE9wdGltaXplZCBpbiBMaXRlIG1vZGUsIHNraXBw
aW5nIHRlc3QuIik7CisgICAgICB0ZXN0UnVubmVyLnF1aXQoMCk7CisgICAgfQorICAgIC8vIFRl
c3RzIHRoYXQgdXNlIGFzc2VydE9wdGltaXplZCgpIGRvIG5vdCBtYWtlIHNlbnNlIGlmIC0tbm8t
b3B0CisgICAgLy8gb3B0aW9uIGlzIHByb3ZpZGVkLiBTdWNoIHRlc3RzIG11c3QgYWRkIC0tb3B0
IHRvIGZsYWdzIGNvbW1lbnQuCisgICAgYXNzZXJ0RmFsc2UoKG9wdF9zdGF0dXMgJiBWOE9wdGlt
aXphdGlvblN0YXR1cy5rTmV2ZXJPcHRpbWl6ZSkgIT09IDAsCisgICAgICAgICAgICAgICAgInRl
c3QgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIC0tbm8tb3B0Iik7CisgICAgYXNzZXJ0VHJ1ZSgK
KyAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikg
IT09IDAsCisgICAgICAgICdzaG91bGQgYmUgYSBmdW5jdGlvbjogJyArIG5hbWVfb3B0KTsKKyAg
ICBpZiAoc2tpcF9pZl9tYXliZV9kZW9wdGVkICYmCisgICAgICAgIChvcHRfc3RhdHVzICYgVjhP
cHRpbWl6YXRpb25TdGF0dXMua01heWJlRGVvcHRlZCkgIT09IDApIHsKKyAgICAgIC8vIFdoZW4g
LS1kZW9wdC1ldmVyeS1uLXRpbWVzIGZsYWcgaXMgc3BlY2lmaWVkIGl0J3Mgbm8gbG9uZ2VyIGd1
YXJhbnRlZWQKKyAgICAgIC8vIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpcyBzdGlsbCBvcHRp
bWl6ZWQsIHNvIGtlZXAgcnVubmluZyB0aGUgdGVzdAorICAgICAgLy8gdG8gc3RyZXNzIHRlc3Qg
dGhlIGRlb3B0aW1pemVyLgorICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhc3NlcnRUcnVlKAor
ICAgICAgICAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtPcHRpbWl6ZWQpICE9
PSAwLAorICAgICAgICAnc2hvdWxkIGJlIG9wdGltaXplZDogJyArIG5hbWVfb3B0KTsKKyAgfQor
CisgIGlzTmV2ZXJPcHRpbWl6ZUxpdGVNb2RlID0gZnVuY3Rpb24gaXNOZXZlck9wdGltaXplTGl0
ZU1vZGUoKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXModW5kZWZp
bmVkLCAiIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMu
a0xpdGVNb2RlKSAhPT0gMDsKKyAgfQorCisgIGlzTmV2ZXJPcHRpbWl6ZSA9IGZ1bmN0aW9uIGlz
TmV2ZXJPcHRpbWl6ZSgpIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1
cyh1bmRlZmluZWQsICIiKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlv
blN0YXR1cy5rTmV2ZXJPcHRpbWl6ZSkgIT09IDA7CisgIH0KKworICBpc0Fsd2F5c09wdGltaXpl
ID0gZnVuY3Rpb24gaXNBbHdheXNPcHRpbWl6ZSgpIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9w
dGltaXphdGlvblN0YXR1cyh1bmRlZmluZWQsICIiKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMg
JiBWOE9wdGltaXphdGlvblN0YXR1cy5rQWx3YXlzT3B0aW1pemUpICE9PSAwOworICB9CisKKyAg
aXNJbnRlcnByZXRlZCA9IGZ1bmN0aW9uIGlzSW50ZXJwcmV0ZWQoZnVuKSB7CisgICAgdmFyIG9w
dF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXMoZnVuLCAiIik7CisgICAgYXNzZXJ0VHJ1ZSgo
b3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtJc0Z1bmN0aW9uKSAhPT0gMCwKKyAg
ICAgICAgICAgICAgICJub3QgYSBmdW5jdGlvbiIpOworICAgIHJldHVybiAob3B0X3N0YXR1cyAm
IFY4T3B0aW1pemF0aW9uU3RhdHVzLmtPcHRpbWl6ZWQpID09PSAwICYmCisgICAgICAgICAgIChv
cHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0ludGVycHJldGVkKSAhPT0gMDsKKyAg
fQorCisgIGlzQmFzZWxpbmUgPSBmdW5jdGlvbiBpc0Jhc2VsaW5lKGZ1bikgeworICAgIHZhciBv
cHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKGZ1biwgIiIpOworICAgIGFzc2VydFRydWUo
KG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisg
ICAgICAgICAgICAgICAibm90IGEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMg
JiBWOE9wdGltaXphdGlvblN0YXR1cy5rT3B0aW1pemVkKSA9PT0gMCAmJgorICAgICAgICAgICAo
b3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtCYXNlbGluZSkgIT09IDA7CisgIH0K
KworICBpc1Vub3B0aW1pemVkID0gZnVuY3Rpb24gaXNVbm9wdGltaXplZChmdW4pIHsKKyAgICBy
ZXR1cm4gaXNJbnRlcnByZXRlZChmdW4pIHx8IGlzQmFzZWxpbmUoZnVuKTsKKyAgfQorCisgIGlz
T3B0aW1pemVkID0gZnVuY3Rpb24gaXNPcHRpbWl6ZWQoZnVuKSB7CisgICAgdmFyIG9wdF9zdGF0
dXMgPSBPcHRpbWl6YXRpb25TdGF0dXMoZnVuLCAiIik7CisgICAgYXNzZXJ0VHJ1ZSgob3B0X3N0
YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtJc0Z1bmN0aW9uKSAhPT0gMCwKKyAgICAgICAg
ICAgICAgICJub3QgYSBmdW5jdGlvbiIpOworICAgIHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0
aW1pemF0aW9uU3RhdHVzLmtPcHRpbWl6ZWQpICE9PSAwOworICB9CisKKyAgaXNUdXJib0Zhbm5l
ZCA9IGZ1bmN0aW9uIGlzVHVyYm9GYW5uZWQoZnVuKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBP
cHRpbWl6YXRpb25TdGF0dXMoZnVuLCAiIik7CisgICAgYXNzZXJ0VHJ1ZSgob3B0X3N0YXR1cyAm
IFY4T3B0aW1pemF0aW9uU3RhdHVzLmtJc0Z1bmN0aW9uKSAhPT0gMCwKKyAgICAgICAgICAgICAg
ICJub3QgYSBmdW5jdGlvbiIpOworICAgIHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0
aW9uU3RhdHVzLmtPcHRpbWl6ZWQpICE9PSAwICYmCisgICAgICAgICAgIChvcHRfc3RhdHVzICYg
VjhPcHRpbWl6YXRpb25TdGF0dXMua1R1cmJvRmFubmVkKSAhPT0gMDsKKyAgfQorCisgIC8vIEN1
c3RvbSBWOC1zcGVjaWZpYyBzdGFjayB0cmFjZSBmb3JtYXR0ZXIgdGhhdCBpcyB0ZW1wb3Jhcmls
eSBpbnN0YWxsZWQgb24KKyAgLy8gdGhlIEVycm9yIG9iamVjdC4KKyAgTWpzVW5pdEFzc2VydGlv
bkVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnVuY3Rpb24oZXJyb3IsIHN0YWNrKSB7CisgICAg
Ly8gVHJpZ2dlciBkZWZhdWx0IGZvcm1hdHRpbmcgd2l0aCByZWN1cnNpb24uCisgICAgdHJ5IHsK
KyAgICAgIC8vIEZpbHRlci1vdXQgYWxsIGJ1dCB0aGUgZmlyc3QgbWpzdW5pdCBmcmFtZS4KKyAg
ICAgIGxldCBmaWx0ZXJlZFN0YWNrID0gW107CisgICAgICBsZXQgaW5NanN1bml0ID0gdHJ1ZTsK
KyAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
bGV0IGZyYW1lID0gc3RhY2tbaV07CisgICAgICAgIGlmIChpbk1qc3VuaXQpIHsKKyAgICAgICAg
ICBsZXQgZmlsZSA9IGZyYW1lLmdldEZpbGVOYW1lKCk7CisgICAgICAgICAgaWYgKCFmaWxlIHx8
ICFmaWxlLmVuZHNXaXRoKCJtanN1bml0LmpzIikpIHsKKyAgICAgICAgICAgIGluTWpzdW5pdCA9
IGZhbHNlOworICAgICAgICAgICAgLy8gUHVzaCB0aGUgbGFzdCBtanN1bml0IGZyYW1lLCB0eXBp
Y2FsbHkgY29udGFpbmluZyB0aGUgYXNzZXJ0aW9uCisgICAgICAgICAgICAvLyBmdW5jdGlvbi4K
KyAgICAgICAgICAgIGlmIChpID4gMCkgQXJyYXlQcm90b3R5cGVQdXNoLmNhbGwoZmlsdGVyZWRT
dGFjaywgc3RhY2tbaS0xXSk7CisgICAgICAgICAgICBBcnJheVByb3RvdHlwZVB1c2guY2FsbChm
aWx0ZXJlZFN0YWNrLCBzdGFja1tpXSk7CisgICAgICAgICAgfQorICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisgICAgICAgIEFycmF5UHJvdG90eXBlUHVzaC5jYWxsKGZpbHRlcmVkU3Rh
Y2ssIGZyYW1lKTsKKyAgICAgIH0KKyAgICAgIHN0YWNrID0gZmlsdGVyZWRTdGFjazsKKworICAg
ICAgLy8gSW5mZXIgZnVuY3Rpb24gbmFtZXMgYW5kIGNhbGN1bGF0ZSB7bWF4X25hbWVfbGVuZ3Ro
fQorICAgICAgbGV0IG1heF9uYW1lX2xlbmd0aCA9IDA7CisgICAgICBBcnJheVByb3RvdHlwZUZv
ckVhY2guY2FsbChzdGFjaywgZWFjaCA9PiB7CisgICAgICAgIGxldCBuYW1lID0gZWFjaC5nZXRG
dW5jdGlvbk5hbWUoKTsKKyAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgbmFtZSA9ICIiOworICAg
ICAgICBpZiAoZWFjaC5pc0V2YWwoKSkgeworICAgICAgICAgIG5hbWUgPSBuYW1lOworICAgICAg
ICB9IGVsc2UgaWYgKGVhY2guaXNDb25zdHJ1Y3RvcigpKSB7CisgICAgICAgICAgbmFtZSA9ICJu
ZXcgIiArIG5hbWU7CisgICAgICAgIH0gZWxzZSBpZiAoZWFjaC5pc05hdGl2ZSgpKSB7CisgICAg
ICAgICAgbmFtZSA9ICJuYXRpdmUgIiArIG5hbWU7CisgICAgICAgIH0gZWxzZSBpZiAoIWVhY2gu
aXNUb3BsZXZlbCgpKSB7CisgICAgICAgICAgbmFtZSA9IGVhY2guZ2V0VHlwZU5hbWUoKSArICIu
IiArIG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgZWFjaC5uYW1lID0gbmFtZTsKKyAgICAgICAg
bWF4X25hbWVfbGVuZ3RoID0gTWF0aC5tYXgobmFtZS5sZW5ndGgsIG1heF9uYW1lX2xlbmd0aCkK
KyAgICAgIH0pOworCisgICAgICAvLyBGb3JtYXQgc3RhY2sgZnJhbWVzLgorICAgICAgc3RhY2sg
PSBBcnJheVByb3RvdHlwZU1hcC5jYWxsKHN0YWNrLCBlYWNoID0+IHsKKyAgICAgICAgbGV0IGZy
YW1lID0gIiAgICBhdCAiICsgZWFjaC5uYW1lLnBhZEVuZChtYXhfbmFtZV9sZW5ndGgpOworICAg
ICAgICBsZXQgZmlsZU5hbWUgPSBlYWNoLmdldEZpbGVOYW1lKCk7CisgICAgICAgIGlmIChlYWNo
LmlzRXZhbCgpKSByZXR1cm4gZnJhbWUgKyAiICIgKyBlYWNoLmdldEV2YWxPcmlnaW4oKTsKKyAg
ICAgICAgZnJhbWUgKz0gIiAiICsgKGZpbGVOYW1lID8gZmlsZU5hbWUgOiAiIik7CisgICAgICAg
IGxldCBsaW5lPSBlYWNoLmdldExpbmVOdW1iZXIoKTsKKyAgICAgICAgZnJhbWUgKz0gIiAiICsg
KGxpbmUgPyBsaW5lIDogIiIpOworICAgICAgICBsZXQgY29sdW1uID0gZWFjaC5nZXRDb2x1bW5O
dW1iZXIoKTsKKyAgICAgICAgZnJhbWUgKz0gKGNvbHVtbiA/ICI6IiArIGNvbHVtbiA6ICIiKTsK
KyAgICAgICAgcmV0dXJuIGZyYW1lOworICAgICAgfSk7CisgICAgICByZXR1cm4gIiIgKyBlcnJv
ci5tZXNzYWdlICsgIlxuIiArIEFycmF5UHJvdG90eXBlSm9pbi5jYWxsKHN0YWNrLCAiXG4iKTsK
KyAgICB9IGNhdGNoIChlKSB7fTsKKyAgICByZXR1cm4gZXJyb3Iuc3RhY2s7CisgIH0KK30pKCk7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvd2FzbS1tb2R1bGUtYnVpbGRlci5qcyBiL0pT
VGVzdHMvd2FzbS92OC93YXNtLW1vZHVsZS1idWlsZGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2N2VkODRk
MGU1OWYyODUyYWNhNGE1MjIzZmQ1OWU5ZmVkZjdiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3dhc20vdjgvd2FzbS1tb2R1bGUtYnVpbGRlci5qcwpAQCAtMCwwICsxLDIxNjkgQEAKKy8v
IENvcHlyaWdodCAyMDE2IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisv
LyBVc2VkIGZvciBlbmNvZGluZyBmMzIgYW5kIGRvdWJsZSBjb25zdGFudHMgdG8gYml0cy4KK2xl
dCBieXRlX3ZpZXcgPSBuZXcgVWludDhBcnJheSg4KTsKK2xldCBkYXRhX3ZpZXcgPSBuZXcgRGF0
YVZpZXcoYnl0ZV92aWV3LmJ1ZmZlcik7CisKKy8vIFRoZSBieXRlcyBmdW5jdGlvbiByZWNlaXZl
cyBvbmUgb2YKKy8vICAtIHNldmVyYWwgYXJndW1lbnRzLCBlYWNoIG9mIHdoaWNoIGlzIGVpdGhl
ciBhIG51bWJlciBvciBhIHN0cmluZyBvZiBsZW5ndGgKKy8vICAgIDE7IGlmIGl0J3MgYSBzdHJp
bmcsIHRoZSBjaGFyY29kZSBvZiB0aGUgY29udGFpbmVkIGNoYXJhY3RlciBpcyB1c2VkLgorLy8g
IC0gYSBzaW5nbGUgYXJyYXkgYXJndW1lbnQgY29udGFpbmluZyB0aGUgYWN0dWFsIGFyZ3VtZW50
cworLy8gIC0gYSBzaW5nbGUgc3RyaW5nOyB0aGUgcmV0dXJuZWQgYnVmZmVyIHdpbGwgY29udGFp
biB0aGUgY2hhciBjb2RlcyBvZiBhbGwKKy8vICAgIGNvbnRhaW5lZCBjaGFyYWN0ZXJzLgorZnVu
Y3Rpb24gYnl0ZXMoLi4uaW5wdXQpIHsKKyAgaWYgKGlucHV0Lmxlbmd0aCA9PSAxICYmIHR5cGVv
ZiBpbnB1dFswXSA9PSAnYXJyYXknKSBpbnB1dCA9IGlucHV0WzBdOworICBpZiAoaW5wdXQubGVu
Z3RoID09IDEgJiYgdHlwZW9mIGlucHV0WzBdID09ICdzdHJpbmcnKSB7CisgICAgbGV0IGxlbiA9
IGlucHV0WzBdLmxlbmd0aDsKKyAgICBsZXQgdmlldyA9IG5ldyBVaW50OEFycmF5KGxlbik7Cisg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykgdmlld1tpXSA9IGlucHV0WzBdLmNoYXJD
b2RlQXQoaSk7CisgICAgcmV0dXJuIHZpZXcuYnVmZmVyOworICB9CisgIGxldCB2aWV3ID0gbmV3
IFVpbnQ4QXJyYXkoaW5wdXQubGVuZ3RoKTsKKyAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5s
ZW5ndGg7IGkrKykgeworICAgIGxldCB2YWwgPSBpbnB1dFtpXTsKKyAgICBpZiAodHlwZW9mIHZh
bCA9PSAnc3RyaW5nJykgeworICAgICAgaWYgKHZhbC5sZW5ndGggIT0gMSkgeworICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyBpbnB1dHMgbXVzdCBoYXZlIGxlbmd0aCAxJyk7CisgICAg
ICB9CisgICAgICB2YWwgPSB2YWwuY2hhckNvZGVBdCgwKTsKKyAgICB9CisgICAgdmlld1tpXSA9
IHZhbCB8IDA7CisgIH0KKyAgcmV0dXJuIHZpZXcuYnVmZmVyOworfQorCisvLyBIZWFkZXIgZGVj
bGFyYXRpb24gY29uc3RhbnRzCit2YXIga1dhc21IMCA9IDA7Cit2YXIga1dhc21IMSA9IDB4NjE7
Cit2YXIga1dhc21IMiA9IDB4NzM7Cit2YXIga1dhc21IMyA9IDB4NmQ7CisKK3ZhciBrV2FzbVYw
ID0gMHgxOwordmFyIGtXYXNtVjEgPSAwOwordmFyIGtXYXNtVjIgPSAwOwordmFyIGtXYXNtVjMg
PSAwOworCit2YXIga0hlYWRlclNpemUgPSA4OwordmFyIGtQYWdlU2l6ZSA9IDY1NTM2OwordmFy
IGtTcGVjTWF4UGFnZXMgPSA2NTUzNjsKK3ZhciBrTWF4VmFySW50MzJTaXplID0gNTsKK3ZhciBr
TWF4VmFySW50NjRTaXplID0gMTA7CisKK2xldCBrRGVjbE5vTG9jYWxzID0gMDsKKworLy8gU2Vj
dGlvbiBkZWNsYXJhdGlvbiBjb25zdGFudHMKK2xldCBrVW5rbm93blNlY3Rpb25Db2RlID0gMDsK
K2xldCBrVHlwZVNlY3Rpb25Db2RlID0gMTsgICAgICAgIC8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBk
ZWNsYXJhdGlvbnMKK2xldCBrSW1wb3J0U2VjdGlvbkNvZGUgPSAyOyAgICAgIC8vIEltcG9ydCBk
ZWNsYXJhdGlvbnMKK2xldCBrRnVuY3Rpb25TZWN0aW9uQ29kZSA9IDM7ICAgIC8vIEZ1bmN0aW9u
IGRlY2xhcmF0aW9ucworbGV0IGtUYWJsZVNlY3Rpb25Db2RlID0gNDsgICAgICAgLy8gSW5kaXJl
Y3QgZnVuY3Rpb24gdGFibGUgYW5kIG90aGVyIHRhYmxlcworbGV0IGtNZW1vcnlTZWN0aW9uQ29k
ZSA9IDU7ICAgICAgLy8gTWVtb3J5IGF0dHJpYnV0ZXMKK2xldCBrR2xvYmFsU2VjdGlvbkNvZGUg
PSA2OyAgICAgIC8vIEdsb2JhbCBkZWNsYXJhdGlvbnMKK2xldCBrRXhwb3J0U2VjdGlvbkNvZGUg
PSA3OyAgICAgIC8vIEV4cG9ydHMKK2xldCBrU3RhcnRTZWN0aW9uQ29kZSA9IDg7ICAgICAgIC8v
IFN0YXJ0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uCitsZXQga0VsZW1lbnRTZWN0aW9uQ29kZSA9IDk7
ICAgICAvLyBFbGVtZW50cyBzZWN0aW9uCitsZXQga0NvZGVTZWN0aW9uQ29kZSA9IDEwOyAgICAg
ICAvLyBGdW5jdGlvbiBjb2RlCitsZXQga0RhdGFTZWN0aW9uQ29kZSA9IDExOyAgICAgICAvLyBE
YXRhIHNlZ21lbnRzCitsZXQga0RhdGFDb3VudFNlY3Rpb25Db2RlID0gMTI7ICAvLyBEYXRhIHNl
Z21lbnQgY291bnQgKGJldHdlZW4gRWxlbWVudCAmIENvZGUpCitsZXQga1RhZ1NlY3Rpb25Db2Rl
ID0gMTM7ICAgICAgICAvLyBUYWcgc2VjdGlvbiAoYmV0d2VlbiBNZW1vcnkgJiBHbG9iYWwpCisK
Ky8vIE5hbWUgc2VjdGlvbiB0eXBlcworbGV0IGtNb2R1bGVOYW1lQ29kZSA9IDA7CitsZXQga0Z1
bmN0aW9uTmFtZXNDb2RlID0gMTsKK2xldCBrTG9jYWxOYW1lc0NvZGUgPSAyOworCitsZXQga1dh
c21GdW5jdGlvblR5cGVGb3JtID0gMHg2MDsKK2xldCBrV2FzbVN0cnVjdFR5cGVGb3JtID0gMHg1
ZjsKK2xldCBrV2FzbUFycmF5VHlwZUZvcm0gPSAweDVlOworbGV0IGtXYXNtRnVuY3Rpb25TdWJ0
eXBlRm9ybSA9IDB4NWQ7CitsZXQga1dhc21TdHJ1Y3RTdWJ0eXBlRm9ybSA9IDB4NWM7CitsZXQg
a1dhc21BcnJheVN1YnR5cGVGb3JtID0gMHg1YjsKKworbGV0IGtMaW1pdHNOb01heGltdW0gPSAw
eDAwOworbGV0IGtMaW1pdHNXaXRoTWF4aW11bSA9IDB4MDE7CitsZXQga0xpbWl0c1NoYXJlZE5v
TWF4aW11bSA9IDB4MDI7CitsZXQga0xpbWl0c1NoYXJlZFdpdGhNYXhpbXVtID0gMHgwMzsKK2xl
dCBrTGltaXRzTWVtb3J5NjROb01heGltdW0gPSAweDA0OworbGV0IGtMaW1pdHNNZW1vcnk2NFdp
dGhNYXhpbXVtID0gMHgwNTsKKworLy8gU2VnbWVudCBmbGFncworbGV0IGtBY3RpdmVOb0luZGV4
ID0gMDsKK2xldCBrUGFzc2l2ZSA9IDE7CitsZXQga0FjdGl2ZVdpdGhJbmRleCA9IDI7CitsZXQg
a0RlY2xhcmF0aXZlID0gMzsKK2xldCBrUGFzc2l2ZVdpdGhFbGVtZW50cyA9IDU7CitsZXQga0Rl
Y2xhcmF0aXZlV2l0aEVsZW1lbnRzID0gNzsKKworLy8gRnVuY3Rpb24gZGVjbGFyYXRpb24gZmxh
Z3MKK2xldCBrRGVjbEZ1bmN0aW9uTmFtZSA9IDB4MDE7CitsZXQga0RlY2xGdW5jdGlvbkltcG9y
dCA9IDB4MDI7CitsZXQga0RlY2xGdW5jdGlvbkxvY2FscyA9IDB4MDQ7CitsZXQga0RlY2xGdW5j
dGlvbkV4cG9ydCA9IDB4MDg7CisKKy8vIFZhbHVlIHR5cGVzIGFuZCByZWxhdGVkCitsZXQga1dh
c21Wb2lkID0gMHg0MDsKK2xldCBrV2FzbUkzMiA9IDB4N2Y7CitsZXQga1dhc21JNjQgPSAweDdl
OworbGV0IGtXYXNtRjMyID0gMHg3ZDsKK2xldCBrV2FzbUY2NCA9IDB4N2M7CitsZXQga1dhc21T
MTI4ID0gMHg3YjsKK2xldCBrV2FzbUk4ID0gMHg3YTsKK2xldCBrV2FzbUkxNiA9IDB4Nzk7CisK
Ky8vIFRoZXNlIGFyZSBkZWZpbmVkIGFzIG5lZ2F0aXZlIGludGVnZXJzIHRvIGRpc3Rpbmd1aXNo
IHRoZW0gZnJvbSBwb3NpdGl2ZSB0eXBlCisvLyBpbmRpY2VzLgorbGV0IGtXYXNtRnVuY1JlZiA9
IC0weDEwOworbGV0IGtXYXNtQW55RnVuYyA9IGtXYXNtRnVuY1JlZjsgIC8vIEFsaWFzIG5hbWVk
IGFzIGluIHRoZSBKUyBBUEkgc3BlYworbGV0IGtXYXNtRXh0ZXJuUmVmID0gLTB4MTE7CitsZXQg
a1dhc21BbnlSZWYgPSAtMHgxMjsKK2xldCBrV2FzbUVxUmVmID0gLTB4MTM7CitsZXQga1dhc21J
MzFSZWYgPSAtMHgxNjsKK2xldCBrV2FzbURhdGFSZWYgPSAtMHgxOTsKKworLy8gVXNlIHRoZSBw
b3NpdGl2ZS1ieXRlIHZlcnNpb25zIGluc2lkZSBmdW5jdGlvbiBib2RpZXMuCitsZXQga0xlYjEy
OE1hc2sgPSAweDdmOworbGV0IGtGdW5jUmVmQ29kZSA9IGtXYXNtRnVuY1JlZiAmIGtMZWIxMjhN
YXNrOworbGV0IGtBbnlGdW5jQ29kZSA9IGtGdW5jUmVmQ29kZTsgIC8vIEFsaWFzIG5hbWVkIGFz
IGluIHRoZSBKUyBBUEkgc3BlYworbGV0IGtFeHRlcm5SZWZDb2RlID0ga1dhc21FeHRlcm5SZWYg
JiBrTGViMTI4TWFzazsKK2xldCBrQW55UmVmQ29kZSA9IGtXYXNtQW55UmVmICYga0xlYjEyOE1h
c2s7CitsZXQga0VxUmVmQ29kZSA9IGtXYXNtRXFSZWYgJiBrTGViMTI4TWFzazsKK2xldCBrSTMx
UmVmQ29kZSA9IGtXYXNtSTMxUmVmICAmIGtMZWIxMjhNYXNrOworbGV0IGtEYXRhUmVmQ29kZSA9
IGtXYXNtRGF0YVJlZiAgJiBrTGViMTI4TWFzazsKKworbGV0IGtXYXNtT3B0UmVmID0gMHg2YzsK
K2xldCBrV2FzbVJlZiA9IDB4NmI7CitmdW5jdGlvbiB3YXNtT3B0UmVmVHlwZShoZWFwX3R5cGUp
IHsKKyAgcmV0dXJuIHtvcGNvZGU6IGtXYXNtT3B0UmVmLCBoZWFwX3R5cGU6IGhlYXBfdHlwZX07
Cit9CitmdW5jdGlvbiB3YXNtUmVmVHlwZShoZWFwX3R5cGUpIHsKKyAgcmV0dXJuIHtvcGNvZGU6
IGtXYXNtUmVmLCBoZWFwX3R5cGU6IGhlYXBfdHlwZX07Cit9CisKK2xldCBrV2FzbVJ0dFdpdGhE
ZXB0aCA9IDB4Njk7CitmdW5jdGlvbiB3YXNtUnR0KGluZGV4LCBkZXB0aCkgeworICBpZiAoaW5k
ZXggPCAwKSB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGluZyBub24tbmVnYXRpdmUgdHlwZSBpbmRl
eCIpOworICByZXR1cm4ge29wY29kZToga1dhc21SdHRXaXRoRGVwdGgsIGluZGV4OiBpbmRleCwg
ZGVwdGg6IGRlcHRofTsKK30KK2xldCBrV2FzbVJ0dCA9IDB4Njg7CitmdW5jdGlvbiB3YXNtUnR0
Tm9EZXB0aChpbmRleCkgeworICBpZiAoaW5kZXggPCAwKSB0aHJvdyBuZXcgRXJyb3IoIkV4cGVj
dGluZyBub24tbmVnYXRpdmUgdHlwZSBpbmRleCIpOworICByZXR1cm4ge29wY29kZToga1dhc21S
dHQsIGluZGV4OiBpbmRleH07Cit9CisKK2xldCBrRXh0ZXJuYWxGdW5jdGlvbiA9IDA7CitsZXQg
a0V4dGVybmFsVGFibGUgPSAxOworbGV0IGtFeHRlcm5hbE1lbW9yeSA9IDI7CitsZXQga0V4dGVy
bmFsR2xvYmFsID0gMzsKK2xldCBrRXh0ZXJuYWxUYWcgPSA0OworCitsZXQga1RhYmxlWmVybyA9
IDA7CitsZXQga01lbW9yeVplcm8gPSAwOworbGV0IGtTZWdtZW50WmVybyA9IDA7CisKK2xldCBr
RXhjZXB0aW9uQXR0cmlidXRlID0gMDsKKworLy8gVXNlZnVsIHNpZ25hdHVyZXMKK2xldCBrU2ln
X2lfaSA9IG1ha2VTaWcoW2tXYXNtSTMyXSwgW2tXYXNtSTMyXSk7CitsZXQga1NpZ19sX2wgPSBt
YWtlU2lnKFtrV2FzbUk2NF0sIFtrV2FzbUk2NF0pOworbGV0IGtTaWdfaV9sID0gbWFrZVNpZyhb
a1dhc21JNjRdLCBba1dhc21JMzJdKTsKK2xldCBrU2lnX2lfaWkgPSBtYWtlU2lnKFtrV2FzbUkz
Miwga1dhc21JMzJdLCBba1dhc21JMzJdKTsKK2xldCBrU2lnX2lfaWlpID0gbWFrZVNpZyhba1dh
c21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMl0sIFtrV2FzbUkzMl0pOworbGV0IGtTaWdfdl9paWlp
ID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJdLCBbXSk7
CitsZXQga1NpZ19mX2ZmID0gbWFrZVNpZyhba1dhc21GMzIsIGtXYXNtRjMyXSwgW2tXYXNtRjMy
XSk7CitsZXQga1NpZ19kX2RkID0gbWFrZVNpZyhba1dhc21GNjQsIGtXYXNtRjY0XSwgW2tXYXNt
RjY0XSk7CitsZXQga1NpZ19sX2xsID0gbWFrZVNpZyhba1dhc21JNjQsIGtXYXNtSTY0XSwgW2tX
YXNtSTY0XSk7CitsZXQga1NpZ19pX2RkID0gbWFrZVNpZyhba1dhc21GNjQsIGtXYXNtRjY0XSwg
W2tXYXNtSTMyXSk7CitsZXQga1NpZ192X3YgPSBtYWtlU2lnKFtdLCBbXSk7CitsZXQga1NpZ19p
X3YgPSBtYWtlU2lnKFtdLCBba1dhc21JMzJdKTsKK2xldCBrU2lnX2xfdiA9IG1ha2VTaWcoW10s
IFtrV2FzbUk2NF0pOworbGV0IGtTaWdfZl92ID0gbWFrZVNpZyhbXSwgW2tXYXNtRjMyXSk7Cits
ZXQga1NpZ19kX3YgPSBtYWtlU2lnKFtdLCBba1dhc21GNjRdKTsKK2xldCBrU2lnX3ZfaSA9IG1h
a2VTaWcoW2tXYXNtSTMyXSwgW10pOworbGV0IGtTaWdfdl9paSA9IG1ha2VTaWcoW2tXYXNtSTMy
LCBrV2FzbUkzMl0sIFtdKTsKK2xldCBrU2lnX3ZfaWlpID0gbWFrZVNpZyhba1dhc21JMzIsIGtX
YXNtSTMyLCBrV2FzbUkzMl0sIFtdKTsKK2xldCBrU2lnX3ZfbCA9IG1ha2VTaWcoW2tXYXNtSTY0
XSwgW10pOworbGV0IGtTaWdfdl9kID0gbWFrZVNpZyhba1dhc21GNjRdLCBbXSk7CitsZXQga1Np
Z192X2RkID0gbWFrZVNpZyhba1dhc21GNjQsIGtXYXNtRjY0XSwgW10pOworbGV0IGtTaWdfdl9k
ZGkgPSBtYWtlU2lnKFtrV2FzbUY2NCwga1dhc21GNjQsIGtXYXNtSTMyXSwgW10pOworbGV0IGtT
aWdfaWlfdiA9IG1ha2VTaWcoW10sIFtrV2FzbUkzMiwga1dhc21JMzJdKTsKK2xldCBrU2lnX2lp
aV92ID0gbWFrZVNpZyhbXSwgW2tXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJdKTsKK2xldCBr
U2lnX2lpX2kgPSBtYWtlU2lnKFtrV2FzbUkzMl0sIFtrV2FzbUkzMiwga1dhc21JMzJdKTsKK2xl
dCBrU2lnX2lpaV9pID0gbWFrZVNpZyhba1dhc21JMzJdLCBba1dhc21JMzIsIGtXYXNtSTMyLCBr
V2FzbUkzMl0pOworbGV0IGtTaWdfaWlfaWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dhc21JMzJd
LCBba1dhc21JMzIsIGtXYXNtSTMyXSk7CitsZXQga1NpZ19paWlfaWkgPSBtYWtlU2lnKFtrV2Fz
bUkzMiwga1dhc21JMzJdLCBba1dhc21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMl0pOworCitsZXQg
a1NpZ192X2YgPSBtYWtlU2lnKFtrV2FzbUYzMl0sIFtdKTsKK2xldCBrU2lnX2ZfZiA9IG1ha2VT
aWcoW2tXYXNtRjMyXSwgW2tXYXNtRjMyXSk7CitsZXQga1NpZ19mX2QgPSBtYWtlU2lnKFtrV2Fz
bUY2NF0sIFtrV2FzbUYzMl0pOworbGV0IGtTaWdfZF9kID0gbWFrZVNpZyhba1dhc21GNjRdLCBb
a1dhc21GNjRdKTsKK2xldCBrU2lnX3JfciA9IG1ha2VTaWcoW2tXYXNtRXh0ZXJuUmVmXSwgW2tX
YXNtRXh0ZXJuUmVmXSk7CitsZXQga1NpZ19hX2EgPSBtYWtlU2lnKFtrV2FzbUFueUZ1bmNdLCBb
a1dhc21BbnlGdW5jXSk7CitsZXQga1NpZ19pX3IgPSBtYWtlU2lnKFtrV2FzbUV4dGVyblJlZl0s
IFtrV2FzbUkzMl0pOworbGV0IGtTaWdfdl9yID0gbWFrZVNpZyhba1dhc21FeHRlcm5SZWZdLCBb
XSk7CitsZXQga1NpZ192X2EgPSBtYWtlU2lnKFtrV2FzbUFueUZ1bmNdLCBbXSk7CitsZXQga1Np
Z192X3JyID0gbWFrZVNpZyhba1dhc21FeHRlcm5SZWYsIGtXYXNtRXh0ZXJuUmVmXSwgW10pOwor
bGV0IGtTaWdfdl9hYSA9IG1ha2VTaWcoW2tXYXNtQW55RnVuYywga1dhc21BbnlGdW5jXSwgW10p
OworbGV0IGtTaWdfcl92ID0gbWFrZVNpZyhbXSwgW2tXYXNtRXh0ZXJuUmVmXSk7CitsZXQga1Np
Z19hX3YgPSBtYWtlU2lnKFtdLCBba1dhc21BbnlGdW5jXSk7CitsZXQga1NpZ19hX2kgPSBtYWtl
U2lnKFtrV2FzbUkzMl0sIFtrV2FzbUFueUZ1bmNdKTsKK2xldCBrU2lnX3NfaSA9IG1ha2VTaWco
W2tXYXNtSTMyXSwgW2tXYXNtUzEyOF0pOworbGV0IGtTaWdfaV9zID0gbWFrZVNpZyhba1dhc21T
MTI4XSwgW2tXYXNtSTMyXSk7CisKK2Z1bmN0aW9uIG1ha2VTaWcocGFyYW1zLCByZXN1bHRzKSB7
CisgIHJldHVybiB7cGFyYW1zOiBwYXJhbXMsIHJlc3VsdHM6IHJlc3VsdHN9OworfQorCitmdW5j
dGlvbiBtYWtlU2lnX3ZfeCh4KSB7CisgIHJldHVybiBtYWtlU2lnKFt4XSwgW10pOworfQorCitm
dW5jdGlvbiBtYWtlU2lnX3hfdih4KSB7CisgIHJldHVybiBtYWtlU2lnKFtdLCBbeF0pOworfQor
CitmdW5jdGlvbiBtYWtlU2lnX3ZfeHgoeCkgeworICByZXR1cm4gbWFrZVNpZyhbeCwgeF0sIFtd
KTsKK30KKworZnVuY3Rpb24gbWFrZVNpZ19yX3YocikgeworICByZXR1cm4gbWFrZVNpZyhbXSwg
W3JdKTsKK30KKworZnVuY3Rpb24gbWFrZVNpZ19yX3gociwgeCkgeworICByZXR1cm4gbWFrZVNp
ZyhbeF0sIFtyXSk7Cit9CisKK2Z1bmN0aW9uIG1ha2VTaWdfcl94eChyLCB4KSB7CisgIHJldHVy
biBtYWtlU2lnKFt4LCB4XSwgW3JdKTsKK30KKworLy8gT3Bjb2RlcworY29uc3Qga1dhc21PcGNv
ZGVzID0geworICAnVW5yZWFjaGFibGUnOiAweDAwLAorICAnTm9wJzogMHgwMSwKKyAgJ0Jsb2Nr
JzogMHgwMiwKKyAgJ0xvb3AnOiAweDAzLAorICAnSWYnOiAweDA0LAorICAnRWxzZSc6IDB4MDUs
CisgICdUcnknOiAweDA2LAorICAnQ2F0Y2gnOiAweDA3LAorICAnVGhyb3cnOiAweDA4LAorICAn
UmV0aHJvdyc6IDB4MDksCisgICdDYXRjaEFsbCc6IDB4MTksCisgICdFbmQnOiAweDBiLAorICAn
QnInOiAweDBjLAorICAnQnJJZic6IDB4MGQsCisgICdCclRhYmxlJzogMHgwZSwKKyAgJ1JldHVy
bic6IDB4MGYsCisgICdDYWxsRnVuY3Rpb24nOiAweDEwLAorICAnQ2FsbEluZGlyZWN0JzogMHgx
MSwKKyAgJ1JldHVybkNhbGwnOiAweDEyLAorICAnUmV0dXJuQ2FsbEluZGlyZWN0JzogMHgxMywK
KyAgJ0NhbGxSZWYnOiAweDE0LAorICAnUmV0dXJuQ2FsbFJlZic6IDB4MTUsCisgICdMZXQnOiAw
eDE3LAorICAnRGVsZWdhdGUnOiAweDE4LAorICAnRHJvcCc6IDB4MWEsCisgICdTZWxlY3QnOiAw
eDFiLAorICAnU2VsZWN0V2l0aFR5cGUnOiAweDFjLAorICAnTG9jYWxHZXQnOiAweDIwLAorICAn
TG9jYWxTZXQnOiAweDIxLAorICAnTG9jYWxUZWUnOiAweDIyLAorICAnR2xvYmFsR2V0JzogMHgy
MywKKyAgJ0dsb2JhbFNldCc6IDB4MjQsCisgICdUYWJsZUdldCc6IDB4MjUsCisgICdUYWJsZVNl
dCc6IDB4MjYsCisgICdJMzJMb2FkTWVtJzogMHgyOCwKKyAgJ0k2NExvYWRNZW0nOiAweDI5LAor
ICAnRjMyTG9hZE1lbSc6IDB4MmEsCisgICdGNjRMb2FkTWVtJzogMHgyYiwKKyAgJ0kzMkxvYWRN
ZW04Uyc6IDB4MmMsCisgICdJMzJMb2FkTWVtOFUnOiAweDJkLAorICAnSTMyTG9hZE1lbTE2Uyc6
IDB4MmUsCisgICdJMzJMb2FkTWVtMTZVJzogMHgyZiwKKyAgJ0k2NExvYWRNZW04Uyc6IDB4MzAs
CisgICdJNjRMb2FkTWVtOFUnOiAweDMxLAorICAnSTY0TG9hZE1lbTE2Uyc6IDB4MzIsCisgICdJ
NjRMb2FkTWVtMTZVJzogMHgzMywKKyAgJ0k2NExvYWRNZW0zMlMnOiAweDM0LAorICAnSTY0TG9h
ZE1lbTMyVSc6IDB4MzUsCisgICdJMzJTdG9yZU1lbSc6IDB4MzYsCisgICdJNjRTdG9yZU1lbSc6
IDB4MzcsCisgICdGMzJTdG9yZU1lbSc6IDB4MzgsCisgICdGNjRTdG9yZU1lbSc6IDB4MzksCisg
ICdJMzJTdG9yZU1lbTgnOiAweDNhLAorICAnSTMyU3RvcmVNZW0xNic6IDB4M2IsCisgICdJNjRT
dG9yZU1lbTgnOiAweDNjLAorICAnSTY0U3RvcmVNZW0xNic6IDB4M2QsCisgICdJNjRTdG9yZU1l
bTMyJzogMHgzZSwKKyAgJ01lbW9yeVNpemUnOiAweDNmLAorICAnTWVtb3J5R3Jvdyc6IDB4NDAs
CisgICdJMzJDb25zdCc6IDB4NDEsCisgICdJNjRDb25zdCc6IDB4NDIsCisgICdGMzJDb25zdCc6
IDB4NDMsCisgICdGNjRDb25zdCc6IDB4NDQsCisgICdJMzJFcXonOiAweDQ1LAorICAnSTMyRXEn
OiAweDQ2LAorICAnSTMyTmUnOiAweDQ3LAorICAnSTMyTHRTJzogMHg0OCwKKyAgJ0kzMkx0VSc6
IDB4NDksCisgICdJMzJHdFMnOiAweDRhLAorICAnSTMyR3RVJzogMHg0YiwKKyAgJ0kzMkxlUyc6
IDB4NGMsCisgICdJMzJMZVUnOiAweDRkLAorICAnSTMyR2VTJzogMHg0ZSwKKyAgJ0kzMkdlVSc6
IDB4NGYsCisgICdJNjRFcXonOiAweDUwLAorICAnSTY0RXEnOiAweDUxLAorICAnSTY0TmUnOiAw
eDUyLAorICAnSTY0THRTJzogMHg1MywKKyAgJ0k2NEx0VSc6IDB4NTQsCisgICdJNjRHdFMnOiAw
eDU1LAorICAnSTY0R3RVJzogMHg1NiwKKyAgJ0k2NExlUyc6IDB4NTcsCisgICdJNjRMZVUnOiAw
eDU4LAorICAnSTY0R2VTJzogMHg1OSwKKyAgJ0k2NEdlVSc6IDB4NWEsCisgICdGMzJFcSc6IDB4
NWIsCisgICdGMzJOZSc6IDB4NWMsCisgICdGMzJMdCc6IDB4NWQsCisgICdGMzJHdCc6IDB4NWUs
CisgICdGMzJMZSc6IDB4NWYsCisgICdGMzJHZSc6IDB4NjAsCisgICdGNjRFcSc6IDB4NjEsCisg
ICdGNjROZSc6IDB4NjIsCisgICdGNjRMdCc6IDB4NjMsCisgICdGNjRHdCc6IDB4NjQsCisgICdG
NjRMZSc6IDB4NjUsCisgICdGNjRHZSc6IDB4NjYsCisgICdJMzJDbHonOiAweDY3LAorICAnSTMy
Q3R6JzogMHg2OCwKKyAgJ0kzMlBvcGNudCc6IDB4NjksCisgICdJMzJBZGQnOiAweDZhLAorICAn
STMyU3ViJzogMHg2YiwKKyAgJ0kzMk11bCc6IDB4NmMsCisgICdJMzJEaXZTJzogMHg2ZCwKKyAg
J0kzMkRpdlUnOiAweDZlLAorICAnSTMyUmVtUyc6IDB4NmYsCisgICdJMzJSZW1VJzogMHg3MCwK
KyAgJ0kzMkFuZCc6IDB4NzEsCisgICdJMzJJb3InOiAweDcyLAorICAnSTMyWG9yJzogMHg3MywK
KyAgJ0kzMlNobCc6IDB4NzQsCisgICdJMzJTaHJTJzogMHg3NSwKKyAgJ0kzMlNoclUnOiAweDc2
LAorICAnSTMyUm9sJzogMHg3NywKKyAgJ0kzMlJvcic6IDB4NzgsCisgICdJNjRDbHonOiAweDc5
LAorICAnSTY0Q3R6JzogMHg3YSwKKyAgJ0k2NFBvcGNudCc6IDB4N2IsCisgICdJNjRBZGQnOiAw
eDdjLAorICAnSTY0U3ViJzogMHg3ZCwKKyAgJ0k2NE11bCc6IDB4N2UsCisgICdJNjREaXZTJzog
MHg3ZiwKKyAgJ0k2NERpdlUnOiAweDgwLAorICAnSTY0UmVtUyc6IDB4ODEsCisgICdJNjRSZW1V
JzogMHg4MiwKKyAgJ0k2NEFuZCc6IDB4ODMsCisgICdJNjRJb3InOiAweDg0LAorICAnSTY0WG9y
JzogMHg4NSwKKyAgJ0k2NFNobCc6IDB4ODYsCisgICdJNjRTaHJTJzogMHg4NywKKyAgJ0k2NFNo
clUnOiAweDg4LAorICAnSTY0Um9sJzogMHg4OSwKKyAgJ0k2NFJvcic6IDB4OGEsCisgICdGMzJB
YnMnOiAweDhiLAorICAnRjMyTmVnJzogMHg4YywKKyAgJ0YzMkNlaWwnOiAweDhkLAorICAnRjMy
Rmxvb3InOiAweDhlLAorICAnRjMyVHJ1bmMnOiAweDhmLAorICAnRjMyTmVhcmVzdEludCc6IDB4
OTAsCisgICdGMzJTcXJ0JzogMHg5MSwKKyAgJ0YzMkFkZCc6IDB4OTIsCisgICdGMzJTdWInOiAw
eDkzLAorICAnRjMyTXVsJzogMHg5NCwKKyAgJ0YzMkRpdic6IDB4OTUsCisgICdGMzJNaW4nOiAw
eDk2LAorICAnRjMyTWF4JzogMHg5NywKKyAgJ0YzMkNvcHlTaWduJzogMHg5OCwKKyAgJ0Y2NEFi
cyc6IDB4OTksCisgICdGNjROZWcnOiAweDlhLAorICAnRjY0Q2VpbCc6IDB4OWIsCisgICdGNjRG
bG9vcic6IDB4OWMsCisgICdGNjRUcnVuYyc6IDB4OWQsCisgICdGNjROZWFyZXN0SW50JzogMHg5
ZSwKKyAgJ0Y2NFNxcnQnOiAweDlmLAorICAnRjY0QWRkJzogMHhhMCwKKyAgJ0Y2NFN1Yic6IDB4
YTEsCisgICdGNjRNdWwnOiAweGEyLAorICAnRjY0RGl2JzogMHhhMywKKyAgJ0Y2NE1pbic6IDB4
YTQsCisgICdGNjRNYXgnOiAweGE1LAorICAnRjY0Q29weVNpZ24nOiAweGE2LAorICAnSTMyQ29u
dmVydEk2NCc6IDB4YTcsCisgICdJMzJTQ29udmVydEYzMic6IDB4YTgsCisgICdJMzJVQ29udmVy
dEYzMic6IDB4YTksCisgICdJMzJTQ29udmVydEY2NCc6IDB4YWEsCisgICdJMzJVQ29udmVydEY2
NCc6IDB4YWIsCisgICdJNjRTQ29udmVydEkzMic6IDB4YWMsCisgICdJNjRVQ29udmVydEkzMic6
IDB4YWQsCisgICdJNjRTQ29udmVydEYzMic6IDB4YWUsCisgICdJNjRVQ29udmVydEYzMic6IDB4
YWYsCisgICdJNjRTQ29udmVydEY2NCc6IDB4YjAsCisgICdJNjRVQ29udmVydEY2NCc6IDB4YjEs
CisgICdGMzJTQ29udmVydEkzMic6IDB4YjIsCisgICdGMzJVQ29udmVydEkzMic6IDB4YjMsCisg
ICdGMzJTQ29udmVydEk2NCc6IDB4YjQsCisgICdGMzJVQ29udmVydEk2NCc6IDB4YjUsCisgICdG
MzJDb252ZXJ0RjY0JzogMHhiNiwKKyAgJ0Y2NFNDb252ZXJ0STMyJzogMHhiNywKKyAgJ0Y2NFVD
b252ZXJ0STMyJzogMHhiOCwKKyAgJ0Y2NFNDb252ZXJ0STY0JzogMHhiOSwKKyAgJ0Y2NFVDb252
ZXJ0STY0JzogMHhiYSwKKyAgJ0Y2NENvbnZlcnRGMzInOiAweGJiLAorICAnSTMyUmVpbnRlcnBy
ZXRGMzInOiAweGJjLAorICAnSTY0UmVpbnRlcnByZXRGNjQnOiAweGJkLAorICAnRjMyUmVpbnRl
cnByZXRJMzInOiAweGJlLAorICAnRjY0UmVpbnRlcnByZXRJNjQnOiAweGJmLAorICAnSTMyU0V4
dGVuZEk4JzogMHhjMCwKKyAgJ0kzMlNFeHRlbmRJMTYnOiAweGMxLAorICAnSTY0U0V4dGVuZEk4
JzogMHhjMiwKKyAgJ0k2NFNFeHRlbmRJMTYnOiAweGMzLAorICAnSTY0U0V4dGVuZEkzMic6IDB4
YzQsCisgICdSZWZOdWxsJzogMHhkMCwKKyAgJ1JlZklzTnVsbCc6IDB4ZDEsCisgICdSZWZGdW5j
JzogMHhkMiwKKyAgJ1JlZkFzTm9uTnVsbCc6IDB4ZDMsCisgICdCck9uTnVsbCc6IDB4ZDQsCisg
ICdSZWZFcSc6IDB4ZDUsCisgICdCck9uTm9uTnVsbCc6IDB4ZDYKK307CisKK2Z1bmN0aW9uIGRl
ZmluZVdhc21PcGNvZGUobmFtZSwgdmFsdWUpIHsKKyAgaWYgKGdsb2JhbFRoaXMua1dhc21PcGNv
ZGVOYW1lcyA9PT0gdW5kZWZpbmVkKSB7CisgICAgZ2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVz
ID0ge307CisgIH0KKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIG5hbWUsIHt2
YWx1ZTogdmFsdWV9KTsKKyAgaWYgKGdsb2JhbFRoaXMua1dhc21PcGNvZGVOYW1lc1t2YWx1ZV0g
IT09IHVuZGVmaW5lZCkgeworICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIHdhc20gb3Bj
b2RlOiAke3ZhbHVlfS4gUHJldmlvdXMgbmFtZTogJHsKKyAgICAgICAgZ2xvYmFsVGhpcy5rV2Fz
bU9wY29kZU5hbWVzW3ZhbHVlXX0sIG5ldyBuYW1lOiAke25hbWV9YCk7CisgIH0KKyAgZ2xvYmFs
VGhpcy5rV2FzbU9wY29kZU5hbWVzW3ZhbHVlXSA9IG5hbWU7Cit9Citmb3IgKGxldCBuYW1lIGlu
IGtXYXNtT3Bjb2RlcykgeworICBkZWZpbmVXYXNtT3Bjb2RlKGBrRXhwciR7bmFtZX1gLCBrV2Fz
bU9wY29kZXNbbmFtZV0pOworfQorCisvLyBQcmVmaXggb3Bjb2RlcworY29uc3Qga1ByZWZpeE9w
Y29kZXMgPSB7CisgICdHQyc6IDB4ZmIsCisgICdOdW1lcmljJzogMHhmYywKKyAgJ1NpbWQnOiAw
eGZkLAorICAnQXRvbWljJzogMHhmZQorfTsKK2ZvciAobGV0IHByZWZpeCBpbiBrUHJlZml4T3Bj
b2RlcykgeworICBkZWZpbmVXYXNtT3Bjb2RlKGBrJHtwcmVmaXh9UHJlZml4YCwga1ByZWZpeE9w
Y29kZXNbcHJlZml4XSk7Cit9CisKKy8vIEdDIG9wY29kZXMKK2xldCBrRXhwclN0cnVjdE5ld1dp
dGhSdHQgPSAweDAxOworbGV0IGtFeHByU3RydWN0TmV3RGVmYXVsdFdpdGhSdHQgPSAweDAyOwor
bGV0IGtFeHByU3RydWN0R2V0ID0gMHgwMzsKK2xldCBrRXhwclN0cnVjdEdldFMgPSAweDA0Owor
bGV0IGtFeHByU3RydWN0R2V0VSA9IDB4MDU7CitsZXQga0V4cHJTdHJ1Y3RTZXQgPSAweDA2Owor
bGV0IGtFeHByU3RydWN0TmV3ID0gMHgwNzsKK2xldCBrRXhwclN0cnVjdE5ld0RlZmF1bHQgPSAw
eDA4OworbGV0IGtFeHByQXJyYXlOZXdXaXRoUnR0ID0gMHgxMTsKK2xldCBrRXhwckFycmF5TmV3
RGVmYXVsdFdpdGhSdHQgPSAweDEyOworbGV0IGtFeHByQXJyYXlHZXQgPSAweDEzOworbGV0IGtF
eHByQXJyYXlHZXRTID0gMHgxNDsKK2xldCBrRXhwckFycmF5R2V0VSA9IDB4MTU7CitsZXQga0V4
cHJBcnJheVNldCA9IDB4MTY7CitsZXQga0V4cHJBcnJheUxlbiA9IDB4MTc7CitsZXQga0V4cHJB
cnJheUNvcHkgPSAweDE4OworbGV0IGtFeHByQXJyYXlJbml0ID0gMHgxOTsKK2xldCBrRXhwckFy
cmF5SW5pdFN0YXRpYyA9IDB4MWE7CitsZXQga0V4cHJBcnJheU5ldyA9IDB4MWI7CitsZXQga0V4
cHJBcnJheU5ld0RlZmF1bHQgPSAweDFjOworbGV0IGtFeHBySTMxTmV3ID0gMHgyMDsKK2xldCBr
RXhwckkzMUdldFMgPSAweDIxOworbGV0IGtFeHBySTMxR2V0VSA9IDB4MjI7CitsZXQga0V4cHJS
dHRDYW5vbiA9IDB4MzA7CitsZXQga0V4cHJSdHRTdWIgPSAweDMxOworbGV0IGtFeHByUnR0RnJl
c2hTdWIgPSAweDMyOworbGV0IGtFeHByUmVmVGVzdCA9IDB4NDA7CitsZXQga0V4cHJSZWZDYXN0
ID0gMHg0MTsKK2xldCBrRXhwckJyT25DYXN0ID0gMHg0MjsKK2xldCBrRXhwckJyT25DYXN0RmFp
bCA9IDB4NDM7CitsZXQga0V4cHJSZWZUZXN0U3RhdGljID0gMHg0NDsKK2xldCBrRXhwclJlZkNh
c3RTdGF0aWMgPSAweDQ1OworbGV0IGtFeHByQnJPbkNhc3RTdGF0aWMgPSAweDQ2OworbGV0IGtF
eHByQnJPbkNhc3RTdGF0aWNGYWlsID0gMHg0NzsKK2xldCBrRXhwclJlZklzRnVuYyA9IDB4NTA7
CitsZXQga0V4cHJSZWZJc0RhdGEgPSAweDUxOworbGV0IGtFeHByUmVmSXNJMzEgPSAweDUyOwor
bGV0IGtFeHByUmVmQXNGdW5jID0gMHg1ODsKK2xldCBrRXhwclJlZkFzRGF0YSA9IDB4NTk7Cits
ZXQga0V4cHJSZWZBc0kzMSA9IDB4NWE7CitsZXQga0V4cHJCck9uRnVuYyA9IDB4NjA7CitsZXQg
a0V4cHJCck9uRGF0YSA9IDB4NjE7CitsZXQga0V4cHJCck9uSTMxID0gMHg2MjsKKworLy8gTnVt
ZXJpYyBvcGNvZGVzLgorbGV0IGtFeHBySTMyU0NvbnZlcnRTYXRGMzIgPSAweDAwOworbGV0IGtF
eHBySTMyVUNvbnZlcnRTYXRGMzIgPSAweDAxOworbGV0IGtFeHBySTMyU0NvbnZlcnRTYXRGNjQg
PSAweDAyOworbGV0IGtFeHBySTMyVUNvbnZlcnRTYXRGNjQgPSAweDAzOworbGV0IGtFeHBySTY0
U0NvbnZlcnRTYXRGMzIgPSAweDA0OworbGV0IGtFeHBySTY0VUNvbnZlcnRTYXRGMzIgPSAweDA1
OworbGV0IGtFeHBySTY0U0NvbnZlcnRTYXRGNjQgPSAweDA2OworbGV0IGtFeHBySTY0VUNvbnZl
cnRTYXRGNjQgPSAweDA3OworbGV0IGtFeHByTWVtb3J5SW5pdCA9IDB4MDg7CitsZXQga0V4cHJE
YXRhRHJvcCA9IDB4MDk7CitsZXQga0V4cHJNZW1vcnlDb3B5ID0gMHgwYTsKK2xldCBrRXhwck1l
bW9yeUZpbGwgPSAweDBiOworbGV0IGtFeHByVGFibGVJbml0ID0gMHgwYzsKK2xldCBrRXhwckVs
ZW1Ecm9wID0gMHgwZDsKK2xldCBrRXhwclRhYmxlQ29weSA9IDB4MGU7CitsZXQga0V4cHJUYWJs
ZUdyb3cgPSAweDBmOworbGV0IGtFeHByVGFibGVTaXplID0gMHgxMDsKK2xldCBrRXhwclRhYmxl
RmlsbCA9IDB4MTE7CisKKy8vIEF0b21pYyBvcGNvZGVzLgorbGV0IGtFeHByQXRvbWljTm90aWZ5
ID0gMHgwMDsKK2xldCBrRXhwckkzMkF0b21pY1dhaXQgPSAweDAxOworbGV0IGtFeHBySTY0QXRv
bWljV2FpdCA9IDB4MDI7CitsZXQga0V4cHJJMzJBdG9taWNMb2FkID0gMHgxMDsKK2xldCBrRXhw
ckkzMkF0b21pY0xvYWQ4VSA9IDB4MTI7CitsZXQga0V4cHJJMzJBdG9taWNMb2FkMTZVID0gMHgx
MzsKK2xldCBrRXhwckkzMkF0b21pY1N0b3JlID0gMHgxNzsKK2xldCBrRXhwckkzMkF0b21pY1N0
b3JlOFUgPSAweDE5OworbGV0IGtFeHBySTMyQXRvbWljU3RvcmUxNlUgPSAweDFhOworbGV0IGtF
eHBySTMyQXRvbWljQWRkID0gMHgxZTsKK2xldCBrRXhwckkzMkF0b21pY0FkZDhVID0gMHgyMDsK
K2xldCBrRXhwckkzMkF0b21pY0FkZDE2VSA9IDB4MjE7CitsZXQga0V4cHJJMzJBdG9taWNTdWIg
PSAweDI1OworbGV0IGtFeHBySTMyQXRvbWljU3ViOFUgPSAweDI3OworbGV0IGtFeHBySTMyQXRv
bWljU3ViMTZVID0gMHgyODsKK2xldCBrRXhwckkzMkF0b21pY0FuZCA9IDB4MmM7CitsZXQga0V4
cHJJMzJBdG9taWNBbmQ4VSA9IDB4MmU7CitsZXQga0V4cHJJMzJBdG9taWNBbmQxNlUgPSAweDJm
OworbGV0IGtFeHBySTMyQXRvbWljT3IgPSAweDMzOworbGV0IGtFeHBySTMyQXRvbWljT3I4VSA9
IDB4MzU7CitsZXQga0V4cHJJMzJBdG9taWNPcjE2VSA9IDB4MzY7CitsZXQga0V4cHJJMzJBdG9t
aWNYb3IgPSAweDNhOworbGV0IGtFeHBySTMyQXRvbWljWG9yOFUgPSAweDNjOworbGV0IGtFeHBy
STMyQXRvbWljWG9yMTZVID0gMHgzZDsKK2xldCBrRXhwckkzMkF0b21pY0V4Y2hhbmdlID0gMHg0
MTsKK2xldCBrRXhwckkzMkF0b21pY0V4Y2hhbmdlOFUgPSAweDQzOworbGV0IGtFeHBySTMyQXRv
bWljRXhjaGFuZ2UxNlUgPSAweDQ0OworbGV0IGtFeHBySTMyQXRvbWljQ29tcGFyZUV4Y2hhbmdl
ID0gMHg0ODsKK2xldCBrRXhwckkzMkF0b21pY0NvbXBhcmVFeGNoYW5nZThVID0gMHg0YTsKK2xl
dCBrRXhwckkzMkF0b21pY0NvbXBhcmVFeGNoYW5nZTE2VSA9IDB4NGI7CisKK2xldCBrRXhwckk2
NEF0b21pY0xvYWQgPSAweDExOworbGV0IGtFeHBySTY0QXRvbWljTG9hZDhVID0gMHgxNDsKK2xl
dCBrRXhwckk2NEF0b21pY0xvYWQxNlUgPSAweDE1OworbGV0IGtFeHBySTY0QXRvbWljTG9hZDMy
VSA9IDB4MTY7CitsZXQga0V4cHJJNjRBdG9taWNTdG9yZSA9IDB4MTg7CitsZXQga0V4cHJJNjRB
dG9taWNTdG9yZThVID0gMHgxYjsKK2xldCBrRXhwckk2NEF0b21pY1N0b3JlMTZVID0gMHgxYzsK
K2xldCBrRXhwckk2NEF0b21pY1N0b3JlMzJVID0gMHgxZDsKK2xldCBrRXhwckk2NEF0b21pY0Fk
ZCA9IDB4MWY7CitsZXQga0V4cHJJNjRBdG9taWNBZGQ4VSA9IDB4MjI7CitsZXQga0V4cHJJNjRB
dG9taWNBZGQxNlUgPSAweDIzOworbGV0IGtFeHBySTY0QXRvbWljQWRkMzJVID0gMHgyNDsKK2xl
dCBrRXhwckk2NEF0b21pY1N1YiA9IDB4MjY7CitsZXQga0V4cHJJNjRBdG9taWNTdWI4VSA9IDB4
Mjk7CitsZXQga0V4cHJJNjRBdG9taWNTdWIxNlUgPSAweDJhOworbGV0IGtFeHBySTY0QXRvbWlj
U3ViMzJVID0gMHgyYjsKK2xldCBrRXhwckk2NEF0b21pY0FuZCA9IDB4MmQ7CitsZXQga0V4cHJJ
NjRBdG9taWNBbmQ4VSA9IDB4MzA7CitsZXQga0V4cHJJNjRBdG9taWNBbmQxNlUgPSAweDMxOwor
bGV0IGtFeHBySTY0QXRvbWljQW5kMzJVID0gMHgzMjsKK2xldCBrRXhwckk2NEF0b21pY09yID0g
MHgzNDsKK2xldCBrRXhwckk2NEF0b21pY09yOFUgPSAweDM3OworbGV0IGtFeHBySTY0QXRvbWlj
T3IxNlUgPSAweDM4OworbGV0IGtFeHBySTY0QXRvbWljT3IzMlUgPSAweDM5OworbGV0IGtFeHBy
STY0QXRvbWljWG9yID0gMHgzYjsKK2xldCBrRXhwckk2NEF0b21pY1hvcjhVID0gMHgzZTsKK2xl
dCBrRXhwckk2NEF0b21pY1hvcjE2VSA9IDB4M2Y7CitsZXQga0V4cHJJNjRBdG9taWNYb3IzMlUg
PSAweDQwOworbGV0IGtFeHBySTY0QXRvbWljRXhjaGFuZ2UgPSAweDQyOworbGV0IGtFeHBySTY0
QXRvbWljRXhjaGFuZ2U4VSA9IDB4NDU7CitsZXQga0V4cHJJNjRBdG9taWNFeGNoYW5nZTE2VSA9
IDB4NDY7CitsZXQga0V4cHJJNjRBdG9taWNFeGNoYW5nZTMyVSA9IDB4NDc7CitsZXQga0V4cHJJ
NjRBdG9taWNDb21wYXJlRXhjaGFuZ2UgPSAweDQ5CitsZXQga0V4cHJJNjRBdG9taWNDb21wYXJl
RXhjaGFuZ2U4VSA9IDB4NGM7CitsZXQga0V4cHJJNjRBdG9taWNDb21wYXJlRXhjaGFuZ2UxNlUg
PSAweDRkOworbGV0IGtFeHBySTY0QXRvbWljQ29tcGFyZUV4Y2hhbmdlMzJVID0gMHg0ZTsKKwor
Ly8gU2ltZCBvcGNvZGVzLgorbGV0IGtFeHByUzEyOExvYWRNZW0gPSAweDAwOworbGV0IGtFeHBy
UzEyOExvYWQ4eDhTID0gMHgwMTsKK2xldCBrRXhwclMxMjhMb2FkOHg4VSA9IDB4MDI7CitsZXQg
a0V4cHJTMTI4TG9hZDE2eDRTID0gMHgwMzsKK2xldCBrRXhwclMxMjhMb2FkMTZ4NFUgPSAweDA0
OworbGV0IGtFeHByUzEyOExvYWQzMngyUyA9IDB4MDU7CitsZXQga0V4cHJTMTI4TG9hZDMyeDJV
ID0gMHgwNjsKK2xldCBrRXhwclMxMjhMb2FkOFNwbGF0ID0gMHgwNzsKK2xldCBrRXhwclMxMjhM
b2FkMTZTcGxhdCA9IDB4MDg7CitsZXQga0V4cHJTMTI4TG9hZDMyU3BsYXQgPSAweDA5OworbGV0
IGtFeHByUzEyOExvYWQ2NFNwbGF0ID0gMHgwYTsKK2xldCBrRXhwclMxMjhTdG9yZU1lbSA9IDB4
MGI7CitsZXQga0V4cHJTMTI4Q29uc3QgPSAweDBjOworbGV0IGtFeHBySTh4MTZTaHVmZmxlID0g
MHgwZDsKK2xldCBrRXhwckk4eDE2U3dpenpsZSA9IDB4MGU7CisKK2xldCBrRXhwckk4eDE2U3Bs
YXQgPSAweDBmOworbGV0IGtFeHBySTE2eDhTcGxhdCA9IDB4MTA7CitsZXQga0V4cHJJMzJ4NFNw
bGF0ID0gMHgxMTsKK2xldCBrRXhwckk2NHgyU3BsYXQgPSAweDEyOworbGV0IGtFeHByRjMyeDRT
cGxhdCA9IDB4MTM7CitsZXQga0V4cHJGNjR4MlNwbGF0ID0gMHgxNDsKK2xldCBrRXhwckk4eDE2
RXh0cmFjdExhbmVTID0gMHgxNTsKK2xldCBrRXhwckk4eDE2RXh0cmFjdExhbmVVID0gMHgxNjsK
K2xldCBrRXhwckk4eDE2UmVwbGFjZUxhbmUgPSAweDE3OworbGV0IGtFeHBySTE2eDhFeHRyYWN0
TGFuZVMgPSAweDE4OworbGV0IGtFeHBySTE2eDhFeHRyYWN0TGFuZVUgPSAweDE5OworbGV0IGtF
eHBySTE2eDhSZXBsYWNlTGFuZSA9IDB4MWE7CitsZXQga0V4cHJJMzJ4NEV4dHJhY3RMYW5lID0g
MHgxYjsKK2xldCBrRXhwckkzMng0UmVwbGFjZUxhbmUgPSAweDFjOworbGV0IGtFeHBySTY0eDJF
eHRyYWN0TGFuZSA9IDB4MWQ7CitsZXQga0V4cHJJNjR4MlJlcGxhY2VMYW5lID0gMHgxZTsKK2xl
dCBrRXhwckYzMng0RXh0cmFjdExhbmUgPSAweDFmOworbGV0IGtFeHByRjMyeDRSZXBsYWNlTGFu
ZSA9IDB4MjA7CitsZXQga0V4cHJGNjR4MkV4dHJhY3RMYW5lID0gMHgyMTsKK2xldCBrRXhwckY2
NHgyUmVwbGFjZUxhbmUgPSAweDIyOworbGV0IGtFeHBySTh4MTZFcSA9IDB4MjM7CitsZXQga0V4
cHJJOHgxNk5lID0gMHgyNDsKK2xldCBrRXhwckk4eDE2THRTID0gMHgyNTsKK2xldCBrRXhwckk4
eDE2THRVID0gMHgyNjsKK2xldCBrRXhwckk4eDE2R3RTID0gMHgyNzsKK2xldCBrRXhwckk4eDE2
R3RVID0gMHgyODsKK2xldCBrRXhwckk4eDE2TGVTID0gMHgyOTsKK2xldCBrRXhwckk4eDE2TGVV
ID0gMHgyYTsKK2xldCBrRXhwckk4eDE2R2VTID0gMHgyYjsKK2xldCBrRXhwckk4eDE2R2VVID0g
MHgyYzsKK2xldCBrRXhwckkxNng4RXEgPSAweDJkOworbGV0IGtFeHBySTE2eDhOZSA9IDB4MmU7
CitsZXQga0V4cHJJMTZ4OEx0UyA9IDB4MmY7CitsZXQga0V4cHJJMTZ4OEx0VSA9IDB4MzA7Cits
ZXQga0V4cHJJMTZ4OEd0UyA9IDB4MzE7CitsZXQga0V4cHJJMTZ4OEd0VSA9IDB4MzI7CitsZXQg
a0V4cHJJMTZ4OExlUyA9IDB4MzM7CitsZXQga0V4cHJJMTZ4OExlVSA9IDB4MzQ7CitsZXQga0V4
cHJJMTZ4OEdlUyA9IDB4MzU7CitsZXQga0V4cHJJMTZ4OEdlVSA9IDB4MzY7CitsZXQga0V4cHJJ
MzJ4NEVxID0gMHgzNzsKK2xldCBrRXhwckkzMng0TmUgPSAweDM4OworbGV0IGtFeHBySTMyeDRM
dFMgPSAweDM5OworbGV0IGtFeHBySTMyeDRMdFUgPSAweDNhOworbGV0IGtFeHBySTMyeDRHdFMg
PSAweDNiOworbGV0IGtFeHBySTMyeDRHdFUgPSAweDNjOworbGV0IGtFeHBySTMyeDRMZVMgPSAw
eDNkOworbGV0IGtFeHBySTMyeDRMZVUgPSAweDNlOworbGV0IGtFeHBySTMyeDRHZVMgPSAweDNm
OworbGV0IGtFeHBySTMyeDRHZVUgPSAweDQwOworbGV0IGtFeHByRjMyeDRFcSA9IDB4NDE7Cits
ZXQga0V4cHJGMzJ4NE5lID0gMHg0MjsKK2xldCBrRXhwckYzMng0THQgPSAweDQzOworbGV0IGtF
eHByRjMyeDRHdCA9IDB4NDQ7CitsZXQga0V4cHJGMzJ4NExlID0gMHg0NTsKK2xldCBrRXhwckYz
Mng0R2UgPSAweDQ2OworbGV0IGtFeHByRjY0eDJFcSA9IDB4NDc7CitsZXQga0V4cHJGNjR4Mk5l
ID0gMHg0ODsKK2xldCBrRXhwckY2NHgyTHQgPSAweDQ5OworbGV0IGtFeHByRjY0eDJHdCA9IDB4
NGE7CitsZXQga0V4cHJGNjR4MkxlID0gMHg0YjsKK2xldCBrRXhwckY2NHgyR2UgPSAweDRjOwor
bGV0IGtFeHByUzEyOE5vdCA9IDB4NGQ7CitsZXQga0V4cHJTMTI4QW5kID0gMHg0ZTsKK2xldCBr
RXhwclMxMjhBbmROb3QgPSAweDRmOworbGV0IGtFeHByUzEyOE9yID0gMHg1MDsKK2xldCBrRXhw
clMxMjhYb3IgPSAweDUxOworbGV0IGtFeHByUzEyOFNlbGVjdCA9IDB4NTI7CitsZXQga0V4cHJW
MTI4QW55VHJ1ZSA9IDB4NTM7CitsZXQga0V4cHJTMTI4TG9hZDhMYW5lID0gMHg1NDsKK2xldCBr
RXhwclMxMjhMb2FkMTZMYW5lID0gMHg1NTsKK2xldCBrRXhwclMxMjhMb2FkMzJMYW5lID0gMHg1
NjsKK2xldCBrRXhwclMxMjhMb2FkNjRMYW5lID0gMHg1NzsKK2xldCBrRXhwclMxMjhTdG9yZThM
YW5lID0gMHg1ODsKK2xldCBrRXhwclMxMjhTdG9yZTE2TGFuZSA9IDB4NTk7CitsZXQga0V4cHJT
MTI4U3RvcmUzMkxhbmUgPSAweDVhOworbGV0IGtFeHByUzEyOFN0b3JlNjRMYW5lID0gMHg1YjsK
K2xldCBrRXhwclMxMjhMb2FkMzJaZXJvID0gMHg1YzsKK2xldCBrRXhwclMxMjhMb2FkNjRaZXJv
ID0gMHg1ZDsKK2xldCBrRXhwckYzMng0RGVtb3RlRjY0eDJaZXJvID0gMHg1ZTsKK2xldCBrRXhw
ckY2NHgyUHJvbW90ZUxvd0YzMng0ID0gMHg1ZjsKK2xldCBrRXhwckk4eDE2QWJzID0gMHg2MDsK
K2xldCBrRXhwckk4eDE2TmVnID0gMHg2MTsKK2xldCBrRXhwckk4eDE2UG9wY250ID0gMHg2MjsK
K2xldCBrRXhwckk4eDE2QWxsVHJ1ZSA9IDB4NjM7CitsZXQga0V4cHJJOHgxNkJpdE1hc2sgPSAw
eDY0OworbGV0IGtFeHBySTh4MTZTQ29udmVydEkxNng4ID0gMHg2NTsKK2xldCBrRXhwckk4eDE2
VUNvbnZlcnRJMTZ4OCA9IDB4NjY7CitsZXQga0V4cHJGMzJ4NENlaWwgPSAweDY3OworbGV0IGtF
eHByRjMyeDRGbG9vciA9IDB4Njg7CitsZXQga0V4cHJGMzJ4NFRydW5jID0gMHg2OTsKK2xldCBr
RXhwckYzMng0TmVhcmVzdEludCA9IDB4NmE7CitsZXQga0V4cHJJOHgxNlNobCA9IDB4NmI7Cits
ZXQga0V4cHJJOHgxNlNoclMgPSAweDZjOworbGV0IGtFeHBySTh4MTZTaHJVID0gMHg2ZDsKK2xl
dCBrRXhwckk4eDE2QWRkID0gMHg2ZTsKK2xldCBrRXhwckk4eDE2QWRkU2F0UyA9IDB4NmY7Cits
ZXQga0V4cHJJOHgxNkFkZFNhdFUgPSAweDcwOworbGV0IGtFeHBySTh4MTZTdWIgPSAweDcxOwor
bGV0IGtFeHBySTh4MTZTdWJTYXRTID0gMHg3MjsKK2xldCBrRXhwckk4eDE2U3ViU2F0VSA9IDB4
NzM7CitsZXQga0V4cHJGNjR4MkNlaWwgPSAweDc0OworbGV0IGtFeHByRjY0eDJGbG9vciA9IDB4
NzU7CitsZXQga0V4cHJJOHgxNk1pblMgPSAweDc2OworbGV0IGtFeHBySTh4MTZNaW5VID0gMHg3
NzsKK2xldCBrRXhwckk4eDE2TWF4UyA9IDB4Nzg7CitsZXQga0V4cHJJOHgxNk1heFUgPSAweDc5
OworbGV0IGtFeHByRjY0eDJUcnVuYyA9IDB4N2E7CitsZXQga0V4cHJJOHgxNlJvdW5kaW5nQXZl
cmFnZVUgPSAweDdiOworbGV0IGtFeHBySTE2eDhFeHRBZGRQYWlyd2lzZUk4eDE2UyA9IDB4N2M7
CitsZXQga0V4cHJJMTZ4OEV4dEFkZFBhaXJ3aXNlSTh4MTZVID0gMHg3ZDsKK2xldCBrRXhwckkz
Mng0RXh0QWRkUGFpcndpc2VJMTZ4OFMgPSAweDdlOworbGV0IGtFeHBySTMyeDRFeHRBZGRQYWly
d2lzZUkxNng4VSA9IDB4N2Y7CitsZXQga0V4cHJJMTZ4OEFicyA9IDB4ODA7CitsZXQga0V4cHJJ
MTZ4OE5lZyA9IDB4ODE7CitsZXQga0V4cHJJMTZ4OFExNU11bFJTYXRTID0gMHg4MjsKK2xldCBr
RXhwckkxNng4QWxsVHJ1ZSA9IDB4ODM7CitsZXQga0V4cHJJMTZ4OEJpdE1hc2sgPSAweDg0Owor
bGV0IGtFeHBySTE2eDhTQ29udmVydEkzMng0ID0gMHg4NTsKK2xldCBrRXhwckkxNng4VUNvbnZl
cnRJMzJ4NCA9IDB4ODY7CitsZXQga0V4cHJJMTZ4OFNDb252ZXJ0STh4MTZMb3cgPSAweDg3Owor
bGV0IGtFeHBySTE2eDhTQ29udmVydEk4eDE2SGlnaCA9IDB4ODg7CitsZXQga0V4cHJJMTZ4OFVD
b252ZXJ0STh4MTZMb3cgPSAweDg5OworbGV0IGtFeHBySTE2eDhVQ29udmVydEk4eDE2SGlnaCA9
IDB4OGE7CitsZXQga0V4cHJJMTZ4OFNobCA9IDB4OGI7CitsZXQga0V4cHJJMTZ4OFNoclMgPSAw
eDhjOworbGV0IGtFeHBySTE2eDhTaHJVID0gMHg4ZDsKK2xldCBrRXhwckkxNng4QWRkID0gMHg4
ZTsKK2xldCBrRXhwckkxNng4QWRkU2F0UyA9IDB4OGY7CitsZXQga0V4cHJJMTZ4OEFkZFNhdFUg
PSAweDkwOworbGV0IGtFeHBySTE2eDhTdWIgPSAweDkxOworbGV0IGtFeHBySTE2eDhTdWJTYXRT
ID0gMHg5MjsKK2xldCBrRXhwckkxNng4U3ViU2F0VSA9IDB4OTM7CitsZXQga0V4cHJGNjR4Mk5l
YXJlc3RJbnQgPSAweDk0OworbGV0IGtFeHBySTE2eDhNdWwgPSAweDk1OworbGV0IGtFeHBySTE2
eDhNaW5TID0gMHg5NjsKK2xldCBrRXhwckkxNng4TWluVSA9IDB4OTc7CitsZXQga0V4cHJJMTZ4
OE1heFMgPSAweDk4OworbGV0IGtFeHBySTE2eDhNYXhVID0gMHg5OTsKK2xldCBrRXhwckkxNng4
Um91bmRpbmdBdmVyYWdlVSA9IDB4OWI7CitsZXQga0V4cHJJMTZ4OEV4dE11bExvd0k4eDE2UyA9
IDB4OWM7CitsZXQga0V4cHJJMTZ4OEV4dE11bEhpZ2hJOHgxNlMgPSAweDlkOworbGV0IGtFeHBy
STE2eDhFeHRNdWxMb3dJOHgxNlUgPSAweDllOworbGV0IGtFeHBySTE2eDhFeHRNdWxIaWdoSTh4
MTZVID0gMHg5ZjsKK2xldCBrRXhwckkzMng0QWJzID0gMHhhMDsKK2xldCBrRXhwckkzMng0TmVn
ID0gMHhhMTsKK2xldCBrRXhwckkzMng0QWxsVHJ1ZSA9IDB4YTM7CitsZXQga0V4cHJJMzJ4NEJp
dE1hc2sgPSAweGE0OworbGV0IGtFeHBySTMyeDRTQ29udmVydEkxNng4TG93ID0gMHhhNzsKK2xl
dCBrRXhwckkzMng0U0NvbnZlcnRJMTZ4OEhpZ2ggPSAweGE4OworbGV0IGtFeHBySTMyeDRVQ29u
dmVydEkxNng4TG93ID0gMHhhOTsKK2xldCBrRXhwckkzMng0VUNvbnZlcnRJMTZ4OEhpZ2ggPSAw
eGFhOworbGV0IGtFeHBySTMyeDRTaGwgPSAweGFiOworbGV0IGtFeHBySTMyeDRTaHJTID0gMHhh
YzsKK2xldCBrRXhwckkzMng0U2hyVSA9IDB4YWQ7CitsZXQga0V4cHJJMzJ4NEFkZCA9IDB4YWU7
CitsZXQga0V4cHJJMzJ4NFN1YiA9IDB4YjE7CitsZXQga0V4cHJJMzJ4NE11bCA9IDB4YjU7Cits
ZXQga0V4cHJJMzJ4NE1pblMgPSAweGI2OworbGV0IGtFeHBySTMyeDRNaW5VID0gMHhiNzsKK2xl
dCBrRXhwckkzMng0TWF4UyA9IDB4Yjg7CitsZXQga0V4cHJJMzJ4NE1heFUgPSAweGI5OworbGV0
IGtFeHBySTMyeDREb3RJMTZ4OFMgPSAweGJhOworbGV0IGtFeHBySTMyeDRFeHRNdWxMb3dJMTZ4
OFMgPSAweGJjOworbGV0IGtFeHBySTMyeDRFeHRNdWxIaWdoSTE2eDhTID0gMHhiZDsKK2xldCBr
RXhwckkzMng0RXh0TXVsTG93STE2eDhVID0gMHhiZTsKK2xldCBrRXhwckkzMng0RXh0TXVsSGln
aEkxNng4VSA9IDB4YmY7CitsZXQga0V4cHJJNjR4MkFicyA9IDB4YzA7CitsZXQga0V4cHJJNjR4
Mk5lZyA9IDB4YzE7CitsZXQga0V4cHJJNjR4MkFsbFRydWUgPSAweGMzOworbGV0IGtFeHBySTY0
eDJCaXRNYXNrID0gMHhjNDsKK2xldCBrRXhwckk2NHgyU0NvbnZlcnRJMzJ4NExvdyA9IDB4Yzc7
CitsZXQga0V4cHJJNjR4MlNDb252ZXJ0STMyeDRIaWdoID0gMHhjODsKK2xldCBrRXhwckk2NHgy
VUNvbnZlcnRJMzJ4NExvdyA9IDB4Yzk7CitsZXQga0V4cHJJNjR4MlVDb252ZXJ0STMyeDRIaWdo
ID0gMHhjYTsKK2xldCBrRXhwckk2NHgyU2hsID0gMHhjYjsKK2xldCBrRXhwckk2NHgyU2hyUyA9
IDB4Y2M7CitsZXQga0V4cHJJNjR4MlNoclUgPSAweGNkOworbGV0IGtFeHBySTY0eDJBZGQgPSAw
eGNlOworbGV0IGtFeHBySTY0eDJTdWIgPSAweGQxOworbGV0IGtFeHBySTY0eDJNdWwgPSAweGQ1
OworbGV0IGtFeHBySTY0eDJFcSA9IDB4ZDY7CitsZXQga0V4cHJJNjR4Mk5lID0gMHhkNzsKK2xl
dCBrRXhwckk2NHgyTHRTID0gMHhkODsKK2xldCBrRXhwckk2NHgyR3RTID0gMHhkOTsKK2xldCBr
RXhwckk2NHgyTGVTID0gMHhkYTsKK2xldCBrRXhwckk2NHgyR2VTID0gMHhkYjsKK2xldCBrRXhw
ckk2NHgyRXh0TXVsTG93STMyeDRTID0gMHhkYzsKK2xldCBrRXhwckk2NHgyRXh0TXVsSGlnaEkz
Mng0UyA9IDB4ZGQ7CitsZXQga0V4cHJJNjR4MkV4dE11bExvd0kzMng0VSA9IDB4ZGU7CitsZXQg
a0V4cHJJNjR4MkV4dE11bEhpZ2hJMzJ4NFUgPSAweGRmOworbGV0IGtFeHByRjMyeDRBYnMgPSAw
eGUwOworbGV0IGtFeHByRjMyeDROZWcgPSAweGUxOworbGV0IGtFeHByRjMyeDRTcXJ0ID0gMHhl
MzsKK2xldCBrRXhwckYzMng0QWRkID0gMHhlNDsKK2xldCBrRXhwckYzMng0U3ViID0gMHhlNTsK
K2xldCBrRXhwckYzMng0TXVsID0gMHhlNjsKK2xldCBrRXhwckYzMng0RGl2ID0gMHhlNzsKK2xl
dCBrRXhwckYzMng0TWluID0gMHhlODsKK2xldCBrRXhwckYzMng0TWF4ID0gMHhlOTsKK2xldCBr
RXhwckYzMng0UG1pbiA9IDB4ZWE7CitsZXQga0V4cHJGMzJ4NFBtYXggPSAweGViOworbGV0IGtF
eHByRjY0eDJBYnMgPSAweGVjOworbGV0IGtFeHByRjY0eDJOZWcgPSAweGVkOworbGV0IGtFeHBy
RjY0eDJTcXJ0ID0gMHhlZjsKK2xldCBrRXhwckY2NHgyQWRkID0gMHhmMDsKK2xldCBrRXhwckY2
NHgyU3ViID0gMHhmMTsKK2xldCBrRXhwckY2NHgyTXVsID0gMHhmMjsKK2xldCBrRXhwckY2NHgy
RGl2ID0gMHhmMzsKK2xldCBrRXhwckY2NHgyTWluID0gMHhmNDsKK2xldCBrRXhwckY2NHgyTWF4
ID0gMHhmNTsKK2xldCBrRXhwckY2NHgyUG1pbiA9IDB4ZjY7CitsZXQga0V4cHJGNjR4MlBtYXgg
PSAweGY3OworbGV0IGtFeHBySTMyeDRTQ29udmVydEYzMng0ID0gMHhmODsKK2xldCBrRXhwckkz
Mng0VUNvbnZlcnRGMzJ4NCA9IDB4Zjk7CitsZXQga0V4cHJGMzJ4NFNDb252ZXJ0STMyeDQgPSAw
eGZhOworbGV0IGtFeHByRjMyeDRVQ29udmVydEkzMng0ID0gMHhmYjsKK2xldCBrRXhwckkzMng0
VHJ1bmNTYXRGNjR4MlNaZXJvID0gMHhmYzsKK2xldCBrRXhwckkzMng0VHJ1bmNTYXRGNjR4MlVa
ZXJvID0gMHhmZDsKK2xldCBrRXhwckY2NHgyQ29udmVydExvd0kzMng0UyA9IDB4ZmU7CitsZXQg
a0V4cHJGNjR4MkNvbnZlcnRMb3dJMzJ4NFUgPSAweGZmOworCisvLyBDb21waWxhdGlvbiBoaW50
IGNvbnN0YW50cy4KK2xldCBrQ29tcGlsYXRpb25IaW50U3RyYXRlZ3lEZWZhdWx0ID0gMHgwMDsK
K2xldCBrQ29tcGlsYXRpb25IaW50U3RyYXRlZ3lMYXp5ID0gMHgwMTsKK2xldCBrQ29tcGlsYXRp
b25IaW50U3RyYXRlZ3lFYWdlciA9IDB4MDI7CitsZXQga0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5
TGF6eUJhc2VsaW5lRWFnZXJUb3BUaWVyID0gMHgwMzsKK2xldCBrQ29tcGlsYXRpb25IaW50VGll
ckRlZmF1bHQgPSAweDAwOworbGV0IGtDb21waWxhdGlvbkhpbnRUaWVyQmFzZWxpbmUgPSAweDAx
OworbGV0IGtDb21waWxhdGlvbkhpbnRUaWVyT3B0aW1pemVkID0gMHgwMjsKKworbGV0IGtUcmFw
VW5yZWFjaGFibGUgPSAwOworbGV0IGtUcmFwTWVtT3V0T2ZCb3VuZHMgPSAxOworbGV0IGtUcmFw
RGl2QnlaZXJvID0gMjsKK2xldCBrVHJhcERpdlVucmVwcmVzZW50YWJsZSA9IDM7CitsZXQga1Ry
YXBSZW1CeVplcm8gPSA0OworbGV0IGtUcmFwRmxvYXRVbnJlcHJlc2VudGFibGUgPSA1OworbGV0
IGtUcmFwVGFibGVPdXRPZkJvdW5kcyA9IDY7CitsZXQga1RyYXBGdW5jU2lnTWlzbWF0Y2ggPSA3
OworbGV0IGtUcmFwVW5hbGlnbmVkQWNjZXNzID0gODsKK2xldCBrVHJhcERhdGFTZWdtZW50RHJv
cHBlZCA9IDk7CitsZXQga1RyYXBFbGVtU2VnbWVudERyb3BwZWQgPSAxMDsKK2xldCBrVHJhcFJl
dGhyb3dOdWxsID0gMTE7CisKK2xldCBrVHJhcE1zZ3MgPSBbCisgIC9VbnJlYWNoYWJsZS8sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgJ21lbW9yeSBhY2Nlc3Mg
b3V0IG9mIGJvdW5kcycsICAgICAgICAgICAgICAgICAgICAvLyAtLQorICAvRGl2aXNpb24gYnkg
emVyby8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdkaXZpZGUgcmVz
dWx0IHVucmVwcmVzZW50YWJsZScsICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgJ3JlbWFpbmRl
ciBieSB6ZXJvJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtLQorICAnZmxvYXQg
dW5yZXByZXNlbnRhYmxlIGluIGludGVnZXIgcmFuZ2UnLCAgICAgICAgIC8vIC0tCisgICd0YWJs
ZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzJywgICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgJ251
bGwgZnVuY3Rpb24gb3IgZnVuY3Rpb24gc2lnbmF0dXJlIG1pc21hdGNoJywgICAvLyAtLQorICAn
b3BlcmF0aW9uIGRvZXMgbm90IHN1cHBvcnQgdW5hbGlnbmVkIGFjY2Vzc2VzJywgIC8vIC0tCisg
ICdkYXRhIHNlZ21lbnQgaGFzIGJlZW4gZHJvcHBlZCcsICAgICAgICAgICAgICAgICAgLy8gLS0K
KyAgJ2VsZW1lbnQgc2VnbWVudCBoYXMgYmVlbiBkcm9wcGVkJywgICAgICAgICAgICAgICAvLyAt
LQorICAncmV0aHJvd2luZyBudWxsIHZhbHVlJyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IC0tCitdOworCisvLyBUaGlzIHJlcXVpcmVzIHRlc3QvbWpzdW5pdC9tanN1bml0LmpzLgorZnVu
Y3Rpb24gYXNzZXJ0VHJhcHModHJhcCwgY29kZSkgeworICBhc3NlcnRUaHJvd3MoY29kZSwgV2Vi
QXNzZW1ibHkuUnVudGltZUVycm9yLCBrVHJhcE1zZ3NbdHJhcF0pOworfQorCitjbGFzcyBCaW5h
cnkgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICB0aGlzLmxlbmd0aCA9IDA7CisgICAgdGhpcy5i
dWZmZXIgPSBuZXcgVWludDhBcnJheSg4MTkyKTsKKyAgfQorCisgIGVuc3VyZV9zcGFjZShuZWVk
ZWQpIHsKKyAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoIC0gdGhpcy5sZW5ndGggPj0gbmVlZGVk
KSByZXR1cm47CisgICAgbGV0IG5ld19jYXBhY2l0eSA9IHRoaXMuYnVmZmVyLmxlbmd0aCAqIDI7
CisgICAgd2hpbGUgKG5ld19jYXBhY2l0eSAtIHRoaXMubGVuZ3RoIDwgbmVlZGVkKSBuZXdfY2Fw
YWNpdHkgKj0gMjsKKyAgICBsZXQgbmV3X2J1ZmZlciA9IG5ldyBVaW50OEFycmF5KG5ld19jYXBh
Y2l0eSk7CisgICAgbmV3X2J1ZmZlci5zZXQodGhpcy5idWZmZXIpOworICAgIHRoaXMuYnVmZmVy
ID0gbmV3X2J1ZmZlcjsKKyAgfQorCisgIHRydW5jX2J1ZmZlcigpIHsKKyAgICByZXR1cm4gbmV3
IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIuYnVmZmVyLCAwLCB0aGlzLmxlbmd0aCk7CisgIH0KKwor
ICByZXNldCgpIHsKKyAgICB0aGlzLmxlbmd0aCA9IDA7CisgIH0KKworICBlbWl0X3U4KHZhbCkg
eworICAgIHRoaXMuZW5zdXJlX3NwYWNlKDEpOworICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3Ro
KytdID0gdmFsOworICB9CisKKyAgZW1pdF91MTYodmFsKSB7CisgICAgdGhpcy5lbnN1cmVfc3Bh
Y2UoMik7CisgICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWw7CisgICAgdGhpcy5i
dWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWwgPj4gODsKKyAgfQorCisgIGVtaXRfdTMyKHZhbCkg
eworICAgIHRoaXMuZW5zdXJlX3NwYWNlKDQpOworICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3Ro
KytdID0gdmFsOworICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdmFsID4+IDg7Cisg
ICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWwgPj4gMTY7CisgICAgdGhpcy5idWZm
ZXJbdGhpcy5sZW5ndGgrK10gPSB2YWwgPj4gMjQ7CisgIH0KKworICBlbWl0X2xlYl91KHZhbCwg
bWF4X2xlbikgeworICAgIHRoaXMuZW5zdXJlX3NwYWNlKG1heF9sZW4pOworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgbWF4X2xlbjsgKytpKSB7CisgICAgICBsZXQgdiA9IHZhbCAmIDB4ZmY7Cisg
ICAgICB2YWwgPSB2YWwgPj4+IDc7CisgICAgICBpZiAodmFsID09IDApIHsKKyAgICAgICAgdGhp
cy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2OworICAgICAgICByZXR1cm47CisgICAgICB9Cisg
ICAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHYgfCAweDgwOworICAgIH0KKyAgICB0
aHJvdyBuZXcgRXJyb3IoJ0xlYiB2YWx1ZSBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICcgKyBt
YXhfbGVuKTsKKyAgfQorCisgIGVtaXRfdTMydih2YWwpIHsKKyAgICB0aGlzLmVtaXRfbGViX3Uo
dmFsLCBrTWF4VmFySW50MzJTaXplKTsKKyAgfQorCisgIGVtaXRfdTY0dih2YWwpIHsKKyAgICB0
aGlzLmVtaXRfbGViX3UodmFsLCBrTWF4VmFySW50NjRTaXplKTsKKyAgfQorCisgIGVtaXRfYnl0
ZXMoZGF0YSkgeworICAgIHRoaXMuZW5zdXJlX3NwYWNlKGRhdGEubGVuZ3RoKTsKKyAgICB0aGlz
LmJ1ZmZlci5zZXQoZGF0YSwgdGhpcy5sZW5ndGgpOworICAgIHRoaXMubGVuZ3RoICs9IGRhdGEu
bGVuZ3RoOworICB9CisKKyAgZW1pdF9zdHJpbmcoc3RyaW5nKSB7CisgICAgLy8gV2hlbiB0ZXN0
aW5nIGlsbGVnYWwgbmFtZXMsIHdlIHBhc3MgYSBieXRlIGFycmF5IGRpcmVjdGx5LgorICAgIGlm
IChzdHJpbmcgaW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgdGhpcy5lbWl0X3UzMnYoc3RyaW5n
Lmxlbmd0aCk7CisgICAgICB0aGlzLmVtaXRfYnl0ZXMoc3RyaW5nKTsKKyAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHRoZSBoYWNreSB3YXkgdG8gY29udmVydCBhIEphdmFT
Y3JpcHQgc3RyaW5nIHRvIGEgVVRGOCBlbmNvZGVkCisgICAgLy8gc3RyaW5nIG9ubHkgY29udGFp
bmluZyBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXJzLgorICAgIGxldCBzdHJpbmdfdXRmOCA9IHVuZXNj
YXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmcpKTsKKyAgICB0aGlzLmVtaXRfdTMydihzdHJp
bmdfdXRmOC5sZW5ndGgpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nX3V0ZjgubGVu
Z3RoOyBpKyspIHsKKyAgICAgIHRoaXMuZW1pdF91OChzdHJpbmdfdXRmOC5jaGFyQ29kZUF0KGkp
KTsKKyAgICB9CisgIH0KKworICBlbWl0X2hlYXBfdHlwZShoZWFwX3R5cGUpIHsKKyAgICB0aGlz
LmVtaXRfYnl0ZXMod2FzbVNpZ25lZExlYihoZWFwX3R5cGUsIGtNYXhWYXJJbnQzMlNpemUpKTsK
KyAgfQorCisgIGVtaXRfdHlwZSh0eXBlKSB7CisgICAgaWYgKCh0eXBlb2YgdHlwZSkgPT0gJ251
bWJlcicpIHsKKyAgICAgIHRoaXMuZW1pdF91OCh0eXBlID49IDAgPyB0eXBlIDogdHlwZSAmIGtM
ZWIxMjhNYXNrKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5lbWl0X3U4KHR5cGUub3Bjb2Rl
KTsKKyAgICAgIGlmICgnZGVwdGgnIGluIHR5cGUpIHRoaXMuZW1pdF91OCh0eXBlLmRlcHRoKTsK
KyAgICAgIHRoaXMuZW1pdF9oZWFwX3R5cGUodHlwZS5oZWFwX3R5cGUpOworICAgIH0KKyAgfQor
CisgIGVtaXRfaW5pdF9leHByX3JlY3Vyc2l2ZShleHByKSB7CisgICAgc3dpdGNoIChleHByLmtp
bmQpIHsKKyAgICAgIGNhc2Uga0V4cHJHbG9iYWxHZXQ6CisgICAgICAgIHRoaXMuZW1pdF91OChr
RXhwckdsb2JhbEdldCk7CisgICAgICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIudmFsdWUpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJJMzJDb25zdDoKKyAgICAgICAgdGhpcy5lbWl0
X2J5dGVzKHdhc21JMzJDb25zdChleHByLnZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBrRXhwckk2NENvbnN0OgorICAgICAgICB0aGlzLmVtaXRfYnl0ZXMod2FzbUk2NENvbnN0
KGV4cHIudmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByRjMyQ29uc3Q6
CisgICAgICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNtRjMyQ29uc3QoZXhwci52YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJGNjRDb25zdDoKKyAgICAgICAgdGhpcy5lbWl0
X2J5dGVzKHdhc21GNjRDb25zdChleHByLnZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBrU2ltZFByZWZpeDoKKyAgICAgICAgdGhpcy5lbWl0X2J5dGVzKHdhc21TMTI4Q29uc3Qo
ZXhwci52YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJSZWZGdW5jOgor
ICAgICAgICB0aGlzLmVtaXRfdTgoa0V4cHJSZWZGdW5jKTsKKyAgICAgICAgdGhpcy5lbWl0X3Uz
MnYoZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwclJlZk51bGw6
CisgICAgICAgIHRoaXMuZW1pdF91OChrRXhwclJlZk51bGwpOworICAgICAgICB0aGlzLmVtaXRf
aGVhcF90eXBlKGV4cHIudmFsdWUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJT
dHJ1Y3ROZXc6CisgICAgICBjYXNlIGtFeHByU3RydWN0TmV3V2l0aFJ0dDoKKyAgICAgIGNhc2Ug
a0V4cHJTdHJ1Y3ROZXdEZWZhdWx0OgorICAgICAgY2FzZSBrRXhwclN0cnVjdE5ld0RlZmF1bHRX
aXRoUnR0OgorICAgICAgICBmb3IgKGxldCBvcGVyYW5kIG9mIGV4cHIub3BlcmFuZHMpIHsKKyAg
ICAgICAgICB0aGlzLmVtaXRfaW5pdF9leHByX3JlY3Vyc2l2ZShvcGVyYW5kKTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLmVtaXRfdTgoa0dDUHJlZml4KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4
KGV4cHIua2luZCk7CisgICAgICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIudmFsdWUpOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJBcnJheUluaXQ6CisgICAgICBjYXNlIGtFeHByQXJy
YXlJbml0U3RhdGljOgorICAgICAgICBmb3IgKGxldCBvcGVyYW5kIG9mIGV4cHIub3BlcmFuZHMp
IHsKKyAgICAgICAgICB0aGlzLmVtaXRfaW5pdF9leHByX3JlY3Vyc2l2ZShvcGVyYW5kKTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLmVtaXRfdTgoa0dDUHJlZml4KTsKKyAgICAgICAgdGhpcy5l
bWl0X3U4KGV4cHIua2luZCk7CisgICAgICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIudmFsdWUpOwor
ICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLm9wZXJhbmRzLmxlbmd0aCAtIDEpOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJSdHRDYW5vbjoKKyAgICAgICAgdGhpcy5lbWl0X3U4
KGtHQ1ByZWZpeCk7CisgICAgICAgIHRoaXMuZW1pdF91OChrRXhwclJ0dENhbm9uKTsKKyAgICAg
ICAgdGhpcy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBrRXhwclJ0dFN1YjoKKyAgICAgICAgdGhpcy5lbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUoZXhw
ci5wYXJlbnQpOworICAgICAgICB0aGlzLmVtaXRfdTgoa0djUHJlZml4KTsKKyAgICAgICAgdGhp
cy5lbWl0X3U4KGtFeHByUnR0U3ViKTsKKyAgICAgICAgdGhpcy5lbWl0X3UzMnYoZXhwci52YWx1
ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwclJ0dEZyZXNoU3ViOgorICAgICAg
ICB0aGlzLmVtaXRfaW5pdF9leHByX3JlY3Vyc2l2ZShleHByLnBhcmVudCk7CisgICAgICAgIHRo
aXMuZW1pdF91OChrR2NQcmVmaXgpOworICAgICAgICB0aGlzLmVtaXRfdTgoa0V4cHJSdHRGcmVz
aFN1Yik7CisgICAgICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIudmFsdWUpOworICAgICAgICBicmVh
azsKKyAgICB9CisgIH0KKworICBlbWl0X2luaXRfZXhwcihleHByKSB7CisgICAgdGhpcy5lbWl0
X2luaXRfZXhwcl9yZWN1cnNpdmUoZXhwcik7CisgICAgdGhpcy5lbWl0X3U4KGtFeHByRW5kKTsK
KyAgfQorCisgIGVtaXRfaGVhZGVyKCkgeworICAgIHRoaXMuZW1pdF9ieXRlcyhbCisgICAgICBr
V2FzbUgwLCBrV2FzbUgxLCBrV2FzbUgyLCBrV2FzbUgzLCBrV2FzbVYwLCBrV2FzbVYxLCBrV2Fz
bVYyLCBrV2FzbVYzCisgICAgXSk7CisgIH0KKworICBlbWl0X3NlY3Rpb24oc2VjdGlvbl9jb2Rl
LCBjb250ZW50X2dlbmVyYXRvcikgeworICAgIC8vIEVtaXQgc2VjdGlvbiBuYW1lLgorICAgIHRo
aXMuZW1pdF91OChzZWN0aW9uX2NvZGUpOworICAgIC8vIEVtaXQgdGhlIHNlY3Rpb24gdG8gYSB0
ZW1wb3JhcnkgYnVmZmVyOiBpdHMgZnVsbCBsZW5ndGggaXNuJ3Qga25vdyB5ZXQuCisgICAgY29u
c3Qgc2VjdGlvbiA9IG5ldyBCaW5hcnk7CisgICAgY29udGVudF9nZW5lcmF0b3Ioc2VjdGlvbik7
CisgICAgLy8gRW1pdCBzZWN0aW9uIGxlbmd0aC4KKyAgICB0aGlzLmVtaXRfdTMydihzZWN0aW9u
Lmxlbmd0aCk7CisgICAgLy8gQ29weSB0aGUgdGVtcG9yYXJ5IGJ1ZmZlci4KKyAgICAvLyBBdm9p
ZCBzcHJlYWQgYmVjYXVzZSB7c2VjdGlvbn0gY2FuIGJlIGh1Z2UuCisgICAgdGhpcy5lbWl0X2J5
dGVzKHNlY3Rpb24udHJ1bmNfYnVmZmVyKCkpOworICB9Cit9CisKK2NsYXNzIFdhc21GdW5jdGlv
bkJ1aWxkZXIgeworICAvLyBFbmNvZGluZyBvZiBsb2NhbCBuYW1lczogYSBzdHJpbmcgY29ycmVz
cG9uZHMgdG8gYSBsb2NhbCBuYW1lLAorICAvLyBhIG51bWJlciBuIGNvcnJlc3BvbmRzIHRvIG4g
dW5kZWZpbmVkIG5hbWVzLgorICBjb25zdHJ1Y3Rvcihtb2R1bGUsIG5hbWUsIHR5cGVfaW5kZXgs
IGFyZ19uYW1lcykgeworICAgIHRoaXMubW9kdWxlID0gbW9kdWxlOworICAgIHRoaXMubmFtZSA9
IG5hbWU7CisgICAgdGhpcy50eXBlX2luZGV4ID0gdHlwZV9pbmRleDsKKyAgICB0aGlzLmJvZHkg
PSBbXTsKKyAgICB0aGlzLmxvY2FscyA9IFtdOworICAgIHRoaXMubG9jYWxfbmFtZXMgPSBhcmdf
bmFtZXM7CisgICAgdGhpcy5ib2R5X29mZnNldCA9IHVuZGVmaW5lZDsgIC8vIE5vdCB2YWxpZCB1
bnRpbCBtb2R1bGUgaXMgc2VyaWFsaXplZC4KKyAgfQorCisgIG51bUxvY2FsTmFtZXMoKSB7Cisg
ICAgbGV0IG51bV9sb2NhbF9uYW1lcyA9IDA7CisgICAgZm9yIChsZXQgbG9jX25hbWUgb2YgdGhp
cy5sb2NhbF9uYW1lcykgeworICAgICAgaWYgKHR5cGVvZiBsb2NfbmFtZSA9PSAnc3RyaW5nJykg
KytudW1fbG9jYWxfbmFtZXM7CisgICAgfQorICAgIHJldHVybiBudW1fbG9jYWxfbmFtZXM7Cisg
IH0KKworICBleHBvcnRBcyhuYW1lKSB7CisgICAgdGhpcy5tb2R1bGUuYWRkRXhwb3J0KG5hbWUs
IHRoaXMuaW5kZXgpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgZXhwb3J0RnVuYygpIHsK
KyAgICB0aGlzLmV4cG9ydEFzKHRoaXMubmFtZSk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKwor
ICBzZXRDb21waWxhdGlvbkhpbnQoc3RyYXRlZ3ksIGJhc2VsaW5lVGllciwgdG9wVGllcikgewor
ICAgIHRoaXMubW9kdWxlLnNldENvbXBpbGF0aW9uSGludChzdHJhdGVneSwgYmFzZWxpbmVUaWVy
LCB0b3BUaWVyLCB0aGlzLmluZGV4KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZEJv
ZHkoYm9keSkgeworICAgIGZvciAobGV0IGIgb2YgYm9keSkgeworICAgICAgaWYgKHR5cGVvZiBi
ICE9PSAnbnVtYmVyJyB8fCAoYiAmICh+MHhGRikpICE9PSAwKSB7CisgICAgICAgIHRocm93IG5l
dyBFcnJvcigKKyAgICAgICAgICAgICdpbnZhbGlkIGJvZHkgKGVudHJpZXMgbXVzdCBiZSA4IGJp
dCBudW1iZXJzKTogJyArIGJvZHkpOworICAgICAgfQorICAgIH0KKyAgICB0aGlzLmJvZHkgPSBi
b2R5LnNsaWNlKCk7CisgICAgLy8gQXV0b21hdGljYWxseSBhZGQgdGhlIGVuZCBmb3IgdGhlIGZ1
bmN0aW9uIGJsb2NrIHRvIHRoZSBib2R5LgorICAgIHRoaXMuYm9keS5wdXNoKGtFeHByRW5kKTsK
KyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZEJvZHlXaXRoRW5kKGJvZHkpIHsKKyAgICB0
aGlzLmJvZHkgPSBib2R5OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgZ2V0TnVtTG9jYWxz
KCkgeworICAgIGxldCB0b3RhbF9sb2NhbHMgPSAwOworICAgIGZvciAobGV0IGwgb2YgdGhpcy5s
b2NhbHMpIHsKKyAgICAgIHRvdGFsX2xvY2FscyArPSBsLmNvdW50CisgICAgfQorICAgIHJldHVy
biB0b3RhbF9sb2NhbHM7CisgIH0KKworICBhZGRMb2NhbHModHlwZSwgY291bnQsIG5hbWVzKSB7
CisgICAgdGhpcy5sb2NhbHMucHVzaCh7dHlwZTogdHlwZSwgY291bnQ6IGNvdW50fSk7CisgICAg
bmFtZXMgPSBuYW1lcyB8fCBbXTsKKyAgICBpZiAobmFtZXMubGVuZ3RoID4gY291bnQpIHRocm93
IG5ldyBFcnJvcigndG9vIG1hbnkgbG9jYWxzIG5hbWVzIGdpdmVuJyk7CisgICAgdGhpcy5sb2Nh
bF9uYW1lcy5wdXNoKC4uLm5hbWVzKTsKKyAgICBpZiAoY291bnQgPiBuYW1lcy5sZW5ndGgpIHRo
aXMubG9jYWxfbmFtZXMucHVzaChjb3VudCAtIG5hbWVzLmxlbmd0aCk7CisgICAgcmV0dXJuIHRo
aXM7CisgIH0KKworICBlbmQoKSB7CisgICAgcmV0dXJuIHRoaXMubW9kdWxlOworICB9Cit9CisK
K2NsYXNzIFdhc21Jbml0RXhwciB7CisgIHN0YXRpYyBJMzJDb25zdCh2YWx1ZSkgeworICAgIHJl
dHVybiB7a2luZDoga0V4cHJJMzJDb25zdCwgdmFsdWU6IHZhbHVlfTsKKyAgfQorICBzdGF0aWMg
STY0Q29uc3QodmFsdWUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHBySTY0Q29uc3QsIHZhbHVl
OiB2YWx1ZX07CisgIH0KKyAgc3RhdGljIEYzMkNvbnN0KHZhbHVlKSB7CisgICAgcmV0dXJuIHtr
aW5kOiBrRXhwckYzMkNvbnN0LCB2YWx1ZTogdmFsdWV9OworICB9CisgIHN0YXRpYyBGNjRDb25z
dCh2YWx1ZSkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJGNjRDb25zdCwgdmFsdWU6IHZhbHVl
fTsKKyAgfQorICBzdGF0aWMgUzEyOENvbnN0KHZhbHVlKSB7CisgICAgcmV0dXJuIHtraW5kOiBr
U2ltZFByZWZpeCwgdmFsdWU6IHZhbHVlfTsKKyAgfQorICBzdGF0aWMgR2xvYmFsR2V0KGluZGV4
KSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckdsb2JhbEdldCwgdmFsdWU6IGluZGV4fTsKKyAg
fQorICBzdGF0aWMgUmVmRnVuYyhpbmRleCkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJSZWZG
dW5jLCB2YWx1ZTogaW5kZXh9OworICB9CisgIHN0YXRpYyBSZWZOdWxsKHR5cGUpIHsKKyAgICBy
ZXR1cm4ge2tpbmQ6IGtFeHByUmVmTnVsbCwgdmFsdWU6IHR5cGV9OworICB9CisgIHN0YXRpYyBT
dHJ1Y3ROZXdXaXRoUnR0KHR5cGUsIGFyZ3MpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByU3Ry
dWN0TmV3V2l0aFJ0dCwgdmFsdWU6IHR5cGUsIG9wZXJhbmRzOiBhcmdzfTsKKyAgfQorICBzdGF0
aWMgU3RydWN0TmV3KHR5cGUsIGFyZ3MpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByU3RydWN0
TmV3LCB2YWx1ZTogdHlwZSwgb3BlcmFuZHM6IGFyZ3N9OworICB9CisgIHN0YXRpYyBTdHJ1Y3RO
ZXdEZWZhdWx0V2l0aFJ0dCh0eXBlLCBydHQpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByU3Ry
dWN0TmV3RGVmYXVsdFdpdGhSdHQsIHZhbHVlOiB0eXBlLCBvcGVyYW5kczogW3J0dF19OworICB9
CisgIHN0YXRpYyBTdHJ1Y3ROZXdEZWZhdWx0KHR5cGUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtF
eHByU3RydWN0TmV3RGVmYXVsdCwgdmFsdWU6IHR5cGUsIG9wZXJhbmRzOiBbXX07CisgIH0KKyAg
c3RhdGljIEFycmF5SW5pdCh0eXBlLCBhcmdzKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckFy
cmF5SW5pdCwgdmFsdWU6IHR5cGUsIG9wZXJhbmRzOiBhcmdzfTsKKyAgfQorICBzdGF0aWMgQXJy
YXlJbml0U3RhdGljKHR5cGUsIGFyZ3MpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByQXJyYXlJ
bml0U3RhdGljLCB2YWx1ZTogdHlwZSwgb3BlcmFuZHM6IGFyZ3N9OworICB9CisgIHN0YXRpYyBS
dHRDYW5vbih0eXBlKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclJ0dENhbm9uLCB2YWx1ZTog
dHlwZX07CisgIH0KKyAgc3RhdGljIFJ0dFN1Yih0eXBlLCBwYXJlbnQpIHsKKyAgICByZXR1cm4g
e2tpbmQ6IGtFeHByUnR0U3ViLCB2YWx1ZTogdHlwZSwgcGFyZW50OiBwYXJlbnR9OworICB9Cisg
IHN0YXRpYyBSdHRGcmVzaFN1Yih0eXBlLCBwYXJlbnQpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtF
eHByUnR0RnJlc2hTdWIsIHZhbHVlOiB0eXBlLCBwYXJlbnQ6IHBhcmVudH07CisgIH0KKworICBz
dGF0aWMgZGVmYXVsdEZvcih0eXBlKSB7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICBjYXNl
IGtXYXNtSTMyOgorICAgICAgICByZXR1cm4gdGhpcy5JMzJDb25zdCgwKTsKKyAgICAgIGNhc2Ug
a1dhc21JNjQ6CisgICAgICAgIHJldHVybiB0aGlzLkk2NENvbnN0KDApOworICAgICAgY2FzZSBr
V2FzbUYzMjoKKyAgICAgICAgcmV0dXJuIHRoaXMuRjMyQ29uc3QoMCk7CisgICAgICBjYXNlIGtX
YXNtRjY0OgorICAgICAgICByZXR1cm4gdGhpcy5GNjRDb25zdCgwKTsKKyAgICAgIGNhc2Uga1dh
c21TMTI4OgorICAgICAgICByZXR1cm4gdGhpcy5TMTI4Q29uc3QobmV3IEFycmF5KDE2KS5maWxs
KDApKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICgodHlwZW9mIHR5cGUpICE9ICdudW1i
ZXInICYmIHR5cGUub3Bjb2RlICE9IGtXYXNtT3B0UmVmKSB7CisgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJOb24tZGVmYXVsdGFibGUgdHlwZSIpOworICAgICAgICB9CisgICAgICAgIGxldCBo
ZWFwX3R5cGUgPSAodHlwZW9mIHR5cGUpID09ICdudW1iZXInID8gdHlwZSA6IHR5cGUuaGVhcF90
eXBlOworICAgICAgICByZXR1cm4gdGhpcy5SZWZOdWxsKGhlYXBfdHlwZSk7CisgICAgfQorICB9
Cit9CisKK2NsYXNzIFdhc21HbG9iYWxCdWlsZGVyIHsKKyAgLy8ge2luaXR9IHNob3VsZCBiZSBj
b25zdHJ1Y3RlZCB3aXRoIFdhc21Jbml0RXhwci4KKyAgY29uc3RydWN0b3IobW9kdWxlLCB0eXBl
LCBtdXRhYmxlLCBpbml0KSB7CisgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7CisgICAgdGhpcy50
eXBlID0gdHlwZTsKKyAgICB0aGlzLm11dGFibGUgPSBtdXRhYmxlOworICAgIHRoaXMuaW5pdCA9
IGluaXQ7CisgIH0KKworICBleHBvcnRBcyhuYW1lKSB7CisgICAgdGhpcy5tb2R1bGUuZXhwb3J0
cy5wdXNoKAorICAgICAgICB7bmFtZTogbmFtZSwga2luZDoga0V4dGVybmFsR2xvYmFsLCBpbmRl
eDogdGhpcy5pbmRleH0pOworICAgIHJldHVybiB0aGlzOworICB9Cit9CisKK2NsYXNzIFdhc21U
YWJsZUJ1aWxkZXIgeworICBjb25zdHJ1Y3Rvcihtb2R1bGUsIHR5cGUsIGluaXRpYWxfc2l6ZSwg
bWF4X3NpemUsIGluaXRfZXhwcikgeworICAgIHRoaXMubW9kdWxlID0gbW9kdWxlOworICAgIHRo
aXMudHlwZSA9IHR5cGU7CisgICAgdGhpcy5pbml0aWFsX3NpemUgPSBpbml0aWFsX3NpemU7Cisg
ICAgdGhpcy5oYXNfbWF4ID0gbWF4X3NpemUgIT09IHVuZGVmaW5lZDsKKyAgICB0aGlzLm1heF9z
aXplID0gbWF4X3NpemU7CisgICAgdGhpcy5pbml0X2V4cHIgPSBpbml0X2V4cHI7CisgICAgdGhp
cy5oYXNfaW5pdCA9IGluaXRfZXhwciAhPT0gdW5kZWZpbmVkOworICB9CisKKyAgZXhwb3J0QXMo
bmFtZSkgeworICAgIHRoaXMubW9kdWxlLmV4cG9ydHMucHVzaCgKKyAgICAgICAge25hbWU6IG5h
bWUsIGtpbmQ6IGtFeHRlcm5hbFRhYmxlLCBpbmRleDogdGhpcy5pbmRleH0pOworICAgIHJldHVy
biB0aGlzOworICB9Cit9CisKK2Z1bmN0aW9uIG1ha2VGaWVsZCh0eXBlLCBtdXRhYmlsaXR5KSB7
CisgIGlmICgodHlwZW9mIG11dGFiaWxpdHkpICE9ICdib29sZWFuJykgeworICAgIHRocm93IG5l
dyBFcnJvcignZmllbGQgbXV0YWJpbGl0eSBtdXN0IGJlIGJvb2xlYW4nKTsKKyAgfQorICByZXR1
cm4ge3R5cGU6IHR5cGUsIG11dGFiaWxpdHk6IG11dGFiaWxpdHl9OworfQorCitjbGFzcyBXYXNt
U3RydWN0IHsKKyAgY29uc3RydWN0b3IoZmllbGRzKSB7CisgICAgaWYgKCFBcnJheS5pc0FycmF5
KGZpZWxkcykpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignc3RydWN0IGZpZWxkcyBtdXN0IGJl
IGFuIGFycmF5Jyk7CisgICAgfQorICAgIHRoaXMuZmllbGRzID0gZmllbGRzOworICAgIHRoaXMu
dHlwZV9mb3JtID0ga1dhc21TdHJ1Y3RUeXBlRm9ybTsKKyAgfQorfQorCitjbGFzcyBXYXNtU3Ry
dWN0U3VidHlwZSBleHRlbmRzIFdhc21TdHJ1Y3QgeworICBjb25zdHJ1Y3RvcihmaWVsZHMsIHN1
cGVydHlwZV9pZHgpIHsKKyAgICBzdXBlcihmaWVsZHMpOworICAgIHRoaXMuc3VwZXJ0eXBlID0g
c3VwZXJ0eXBlX2lkeDsKKyAgICB0aGlzLnR5cGVfZm9ybSA9IGtXYXNtU3RydWN0U3VidHlwZUZv
cm07CisgIH0KK30KKworY2xhc3MgV2FzbUFycmF5IHsKKyAgY29uc3RydWN0b3IodHlwZSwgbXV0
YWJpbGl0eSkgeworICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAgaWYgKCFtdXRhYmlsaXR5KSB0
aHJvdyBuZXcgRXJyb3IoIkltbXV0YWJsZSBhcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0Iik7
CisgICAgdGhpcy5tdXRhYmlsaXR5ID0gbXV0YWJpbGl0eTsKKyAgICB0aGlzLnR5cGVfZm9ybSA9
IGtXYXNtQXJyYXlUeXBlRm9ybTsKKyAgfQorfQorCitjbGFzcyBXYXNtQXJyYXlTdWJ0eXBlIGV4
dGVuZHMgV2FzbUFycmF5IHsKKyAgY29uc3RydWN0b3IodHlwZSwgbXV0YWJpbGl0eSwgc3VwZXJ0
eXBlX2lkeCkgeworICAgIHN1cGVyKHR5cGUsIG11dGFiaWxpdHkpOworICAgIHRoaXMuc3VwZXJ0
eXBlID0gc3VwZXJ0eXBlX2lkeDsKKyAgICB0aGlzLnR5cGVfZm9ybSA9IGtXYXNtQXJyYXlTdWJ0
eXBlRm9ybTsKKyAgfQorfQorY2xhc3MgV2FzbUVsZW1TZWdtZW50IHsKKyAgY29uc3RydWN0b3Io
dGFibGUsIG9mZnNldCwgdHlwZSwgZWxlbWVudHMsIGlzX2RlY2wpIHsKKyAgICB0aGlzLnRhYmxl
ID0gdGFibGU7CisgICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7CisgICAgdGhpcy50eXBlID0gdHlw
ZTsKKyAgICB0aGlzLmVsZW1lbnRzID0gZWxlbWVudHM7CisgICAgdGhpcy5pc19kZWNsID0gaXNf
ZGVjbDsKKyAgICAvLyBJbnZhcmlhbnQgY2hlY2tzLgorICAgIGlmICgodGFibGUgPT09IHVuZGVm
aW5lZCkgIT0gKG9mZnNldCA9PT0gdW5kZWZpbmVkKSkgeworICAgICAgdGhyb3cgbmV3IEVycm9y
KCJpbnZhbGlkIGVsZW1lbnQgc2VnbWVudCIpOworICAgIH0KKyAgICBmb3IgKGxldCBlbGVtIG9m
IGVsZW1lbnRzKSB7CisgICAgICBpZiAoKCh0eXBlb2YgZWxlbSkgPT0gJ251bWJlcicpICE9ICh0
eXBlID09PSB1bmRlZmluZWQpKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiaW52YWxpZCBl
bGVtZW50Iik7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaXNfYWN0aXZlKCkgeworICAgIHJl
dHVybiB0aGlzLnRhYmxlICE9PSB1bmRlZmluZWQ7CisgIH0KKworICBpc19wYXNzaXZlKCkgewor
ICAgIHJldHVybiB0aGlzLnRhYmxlID09PSB1bmRlZmluZWQgJiYgIXRoaXMuaXNfZGVjbDsKKyAg
fQorCisgIGlzX2RlY2xhcmF0aXZlKCkgeworICAgIHJldHVybiB0aGlzLnRhYmxlID09PSB1bmRl
ZmluZWQgJiYgdGhpcy5pc19kZWNsOworICB9CisKKyAgZXhwcmVzc2lvbnNfYXNfZWxlbWVudHMo
KSB7CisgICAgcmV0dXJuIHRoaXMudHlwZSAhPT0gdW5kZWZpbmVkOworICB9Cit9CisKK2NsYXNz
IFdhc21Nb2R1bGVCdWlsZGVyIHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgdGhpcy50eXBlcyA9
IFtdOworICAgIHRoaXMuaW1wb3J0cyA9IFtdOworICAgIHRoaXMuZXhwb3J0cyA9IFtdOworICAg
IHRoaXMuZ2xvYmFscyA9IFtdOworICAgIHRoaXMudGFibGVzID0gW107CisgICAgdGhpcy50YWdz
ID0gW107CisgICAgdGhpcy5mdW5jdGlvbnMgPSBbXTsKKyAgICB0aGlzLmNvbXBpbGF0aW9uX2hp
bnRzID0gW107CisgICAgdGhpcy5lbGVtZW50X3NlZ21lbnRzID0gW107CisgICAgdGhpcy5kYXRh
X3NlZ21lbnRzID0gW107CisgICAgdGhpcy5leHBsaWNpdCA9IFtdOworICAgIHRoaXMubnVtX2lt
cG9ydGVkX2Z1bmNzID0gMDsKKyAgICB0aGlzLm51bV9pbXBvcnRlZF9nbG9iYWxzID0gMDsKKyAg
ICB0aGlzLm51bV9pbXBvcnRlZF90YWJsZXMgPSAwOworICAgIHRoaXMubnVtX2ltcG9ydGVkX3Rh
Z3MgPSAwOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRkU3RhcnQoc3RhcnRfaW5kZXgp
IHsKKyAgICB0aGlzLnN0YXJ0X2luZGV4ID0gc3RhcnRfaW5kZXg7CisgICAgcmV0dXJuIHRoaXM7
CisgIH0KKworICBhZGRNZW1vcnkobWluLCBtYXgsIGV4cG9ydGVkLCBzaGFyZWQpIHsKKyAgICB0
aGlzLm1lbW9yeSA9IHsKKyAgICAgIG1pbjogbWluLAorICAgICAgbWF4OiBtYXgsCisgICAgICBl
eHBvcnRlZDogZXhwb3J0ZWQsCisgICAgICBzaGFyZWQ6IHNoYXJlZCB8fCBmYWxzZSwKKyAgICAg
IGlzX21lbW9yeTY0OiBmYWxzZQorICAgIH07CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBh
ZGRNZW1vcnk2NChtaW4sIG1heCwgZXhwb3J0ZWQpIHsKKyAgICB0aGlzLm1lbW9yeSA9IHsKKyAg
ICAgIG1pbjogbWluLAorICAgICAgbWF4OiBtYXgsCisgICAgICBleHBvcnRlZDogZXhwb3J0ZWQs
CisgICAgICBzaGFyZWQ6IGZhbHNlLAorICAgICAgaXNfbWVtb3J5NjQ6IHRydWUKKyAgICB9Owor
ICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRkRXhwbGljaXRTZWN0aW9uKGJ5dGVzKSB7Cisg
ICAgdGhpcy5leHBsaWNpdC5wdXNoKGJ5dGVzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisg
IHN0cmluZ1RvQnl0ZXMobmFtZSkgeworICAgIHZhciByZXN1bHQgPSBuZXcgQmluYXJ5KCk7Cisg
ICAgcmVzdWx0LmVtaXRfdTMydihuYW1lLmxlbmd0aCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBuYW1lLmxlbmd0aDsgaSsrKSB7CisgICAgICByZXN1bHQuZW1pdF91OChuYW1lLmNoYXJDb2Rl
QXQoaSkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnRydW5jX2J1ZmZlcigpCisgIH0KKwor
ICBjcmVhdGVDdXN0b21TZWN0aW9uKG5hbWUsIGJ5dGVzKSB7CisgICAgbmFtZSA9IHRoaXMuc3Ry
aW5nVG9CeXRlcyhuYW1lKTsKKyAgICB2YXIgc2VjdGlvbiA9IG5ldyBCaW5hcnkoKTsKKyAgICBz
ZWN0aW9uLmVtaXRfdTgoMCk7CisgICAgc2VjdGlvbi5lbWl0X3UzMnYobmFtZS5sZW5ndGggKyBi
eXRlcy5sZW5ndGgpOworICAgIHNlY3Rpb24uZW1pdF9ieXRlcyhuYW1lKTsKKyAgICBzZWN0aW9u
LmVtaXRfYnl0ZXMoYnl0ZXMpOworICAgIHJldHVybiBzZWN0aW9uLnRydW5jX2J1ZmZlcigpOwor
ICB9CisKKyAgYWRkQ3VzdG9tU2VjdGlvbihuYW1lLCBieXRlcykgeworICAgIHRoaXMuZXhwbGlj
aXQucHVzaCh0aGlzLmNyZWF0ZUN1c3RvbVNlY3Rpb24obmFtZSwgYnl0ZXMpKTsKKyAgfQorCisg
IGFkZFR5cGUodHlwZSkgeworICAgIHRoaXMudHlwZXMucHVzaCh0eXBlKTsKKyAgICB2YXIgcGwg
PSB0eXBlLnBhcmFtcy5sZW5ndGg7ICAgLy8gc2hvdWxkIGhhdmUgcGFyYW1zCisgICAgdmFyIHJs
ID0gdHlwZS5yZXN1bHRzLmxlbmd0aDsgIC8vIHNob3VsZCBoYXZlIHJlc3VsdHMKKyAgICByZXR1
cm4gdGhpcy50eXBlcy5sZW5ndGggLSAxOworICB9CisKKyAgYWRkU3RydWN0KGZpZWxkcykgewor
ICAgIHRoaXMudHlwZXMucHVzaChuZXcgV2FzbVN0cnVjdChmaWVsZHMpKTsKKyAgICByZXR1cm4g
dGhpcy50eXBlcy5sZW5ndGggLSAxOworICB9CisKKyAga0dlbmVyaWNTdXBlclR5cGUgPSAweEZG
RkZGRkZFOworICBhZGRTdHJ1Y3RTdWJ0eXBlKGZpZWxkcywgc3VwZXJ0eXBlX2lkeCA9IHRoaXMu
a0dlbmVyaWNTdXBlclR5cGUpIHsKKyAgICB0aGlzLnR5cGVzLnB1c2gobmV3IFdhc21TdHJ1Y3RT
dWJ0eXBlKGZpZWxkcywgc3VwZXJ0eXBlX2lkeCkpOworICAgIHJldHVybiB0aGlzLnR5cGVzLmxl
bmd0aCAtIDE7CisgIH0KKworICBhZGRBcnJheSh0eXBlLCBtdXRhYmlsaXR5KSB7CisgICAgdGhp
cy50eXBlcy5wdXNoKG5ldyBXYXNtQXJyYXkodHlwZSwgbXV0YWJpbGl0eSkpOworICAgIHJldHVy
biB0aGlzLnR5cGVzLmxlbmd0aCAtIDE7CisgIH0KKworICBhZGRBcnJheVN1YnR5cGUodHlwZSwg
bXV0YWJpbGl0eSwgc3VwZXJ0eXBlX2lkeCA9IHRoaXMua0dlbmVyaWNTdXBlclR5cGUpIHsKKyAg
ICB0aGlzLnR5cGVzLnB1c2gobmV3IFdhc21BcnJheVN1YnR5cGUodHlwZSwgbXV0YWJpbGl0eSwg
c3VwZXJ0eXBlX2lkeCkpOworICAgIHJldHVybiB0aGlzLnR5cGVzLmxlbmd0aCAtIDE7CisgIH0K
KworICBhZGRHbG9iYWwodHlwZSwgbXV0YWJsZSwgaW5pdCkgeworICAgIGlmIChpbml0ID09PSB1
bmRlZmluZWQpIGluaXQgPSBXYXNtSW5pdEV4cHIuZGVmYXVsdEZvcih0eXBlKTsKKyAgICBsZXQg
Z2xvYiA9IG5ldyBXYXNtR2xvYmFsQnVpbGRlcih0aGlzLCB0eXBlLCBtdXRhYmxlLCBpbml0KTsK
KyAgICBnbG9iLmluZGV4ID0gdGhpcy5nbG9iYWxzLmxlbmd0aCArIHRoaXMubnVtX2ltcG9ydGVk
X2dsb2JhbHM7CisgICAgdGhpcy5nbG9iYWxzLnB1c2goZ2xvYik7CisgICAgcmV0dXJuIGdsb2I7
CisgIH0KKworICBhZGRUYWJsZSgKKyAgICAgIHR5cGUsIGluaXRpYWxfc2l6ZSwgbWF4X3NpemUg
PSB1bmRlZmluZWQsIGluaXRfZXhwciA9IHVuZGVmaW5lZCkgeworICAgIGlmICh0eXBlID09IGtX
YXNtSTMyIHx8IHR5cGUgPT0ga1dhc21JNjQgfHwgdHlwZSA9PSBrV2FzbUYzMiB8fAorICAgICAg
ICB0eXBlID09IGtXYXNtRjY0IHx8IHR5cGUgPT0ga1dhc21TMTI4IHx8IHR5cGUgPT0ga1dhc21W
b2lkKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RhYmxlcyBtdXN0IGJlIG9mIGEgcmVmZXJl
bmNlIHR5cGUnKTsKKyAgICB9CisgICAgbGV0IHRhYmxlID0gbmV3IFdhc21UYWJsZUJ1aWxkZXIo
CisgICAgICAgIHRoaXMsIHR5cGUsIGluaXRpYWxfc2l6ZSwgbWF4X3NpemUsIGluaXRfZXhwcik7
CisgICAgdGFibGUuaW5kZXggPSB0aGlzLnRhYmxlcy5sZW5ndGggKyB0aGlzLm51bV9pbXBvcnRl
ZF90YWJsZXM7CisgICAgdGhpcy50YWJsZXMucHVzaCh0YWJsZSk7CisgICAgcmV0dXJuIHRhYmxl
OworICB9CisKKyAgYWRkVGFnKHR5cGUpIHsKKyAgICBsZXQgdHlwZV9pbmRleCA9ICh0eXBlb2Yg
dHlwZSkgPT0gJ251bWJlcicgPyB0eXBlIDogdGhpcy5hZGRUeXBlKHR5cGUpOworICAgIGxldCB0
YWdfaW5kZXggPSB0aGlzLnRhZ3MubGVuZ3RoICsgdGhpcy5udW1faW1wb3J0ZWRfdGFnczsKKyAg
ICB0aGlzLnRhZ3MucHVzaCh0eXBlX2luZGV4KTsKKyAgICByZXR1cm4gdGFnX2luZGV4OworICB9
CisKKyAgYWRkRnVuY3Rpb24obmFtZSwgdHlwZSwgYXJnX25hbWVzKSB7CisgICAgYXJnX25hbWVz
ID0gYXJnX25hbWVzIHx8IFtdOworICAgIGxldCB0eXBlX2luZGV4ID0gKHR5cGVvZiB0eXBlKSA9
PSAnbnVtYmVyJyA/IHR5cGUgOiB0aGlzLmFkZFR5cGUodHlwZSk7CisgICAgbGV0IG51bV9hcmdz
ID0gdGhpcy50eXBlc1t0eXBlX2luZGV4XS5wYXJhbXMubGVuZ3RoOworICAgIGlmIChudW1fYXJn
cyA8IGFyZ19uYW1lcy5sZW5ndGgpCisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvbyBtYW55IGFy
ZyBuYW1lcyBwcm92aWRlZCcpOworICAgIGlmIChudW1fYXJncyA+IGFyZ19uYW1lcy5sZW5ndGgp
CisgICAgICBhcmdfbmFtZXMucHVzaChudW1fYXJncyAtIGFyZ19uYW1lcy5sZW5ndGgpOworICAg
IGxldCBmdW5jID0gbmV3IFdhc21GdW5jdGlvbkJ1aWxkZXIodGhpcywgbmFtZSwgdHlwZV9pbmRl
eCwgYXJnX25hbWVzKTsKKyAgICBmdW5jLmluZGV4ID0gdGhpcy5mdW5jdGlvbnMubGVuZ3RoICsg
dGhpcy5udW1faW1wb3J0ZWRfZnVuY3M7CisgICAgdGhpcy5mdW5jdGlvbnMucHVzaChmdW5jKTsK
KyAgICByZXR1cm4gZnVuYzsKKyAgfQorCisgIGFkZEltcG9ydChtb2R1bGUsIG5hbWUsIHR5cGUp
IHsKKyAgICBpZiAodGhpcy5mdW5jdGlvbnMubGVuZ3RoICE9IDApIHsKKyAgICAgIHRocm93IG5l
dyBFcnJvcignSW1wb3J0ZWQgZnVuY3Rpb25zIG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGxvY2Fs
IG9uZXMnKTsKKyAgICB9CisgICAgbGV0IHR5cGVfaW5kZXggPSAodHlwZW9mIHR5cGUpID09ICdu
dW1iZXInID8gdHlwZSA6IHRoaXMuYWRkVHlwZSh0eXBlKTsKKyAgICB0aGlzLmltcG9ydHMucHVz
aCh7CisgICAgICBtb2R1bGU6IG1vZHVsZSwKKyAgICAgIG5hbWU6IG5hbWUsCisgICAgICBraW5k
OiBrRXh0ZXJuYWxGdW5jdGlvbiwKKyAgICAgIHR5cGVfaW5kZXg6IHR5cGVfaW5kZXgKKyAgICB9
KTsKKyAgICByZXR1cm4gdGhpcy5udW1faW1wb3J0ZWRfZnVuY3MrKzsKKyAgfQorCisgIGFkZElt
cG9ydGVkR2xvYmFsKG1vZHVsZSwgbmFtZSwgdHlwZSwgbXV0YWJsZSA9IGZhbHNlKSB7CisgICAg
aWYgKHRoaXMuZ2xvYmFscy5sZW5ndGggIT0gMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdJ
bXBvcnRlZCBnbG9iYWxzIG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGxvY2FsIG9uZXMnKTsKKyAg
ICB9CisgICAgbGV0IG8gPSB7CisgICAgICBtb2R1bGU6IG1vZHVsZSwKKyAgICAgIG5hbWU6IG5h
bWUsCisgICAgICBraW5kOiBrRXh0ZXJuYWxHbG9iYWwsCisgICAgICB0eXBlOiB0eXBlLAorICAg
ICAgbXV0YWJsZTogbXV0YWJsZQorICAgIH07CisgICAgdGhpcy5pbXBvcnRzLnB1c2gobyk7Cisg
ICAgcmV0dXJuIHRoaXMubnVtX2ltcG9ydGVkX2dsb2JhbHMrKzsKKyAgfQorCisgIGFkZEltcG9y
dGVkTWVtb3J5KG1vZHVsZSwgbmFtZSwgaW5pdGlhbCA9IDAsIG1heGltdW0sIHNoYXJlZCkgewor
ICAgIGxldCBvID0geworICAgICAgbW9kdWxlOiBtb2R1bGUsCisgICAgICBuYW1lOiBuYW1lLAor
ICAgICAga2luZDoga0V4dGVybmFsTWVtb3J5LAorICAgICAgaW5pdGlhbDogaW5pdGlhbCwKKyAg
ICAgIG1heGltdW06IG1heGltdW0sCisgICAgICBzaGFyZWQ6IHNoYXJlZAorICAgIH07CisgICAg
dGhpcy5pbXBvcnRzLnB1c2gobyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBhZGRJbXBv
cnRlZFRhYmxlKG1vZHVsZSwgbmFtZSwgaW5pdGlhbCwgbWF4aW11bSwgdHlwZSkgeworICAgIGlm
ICh0aGlzLnRhYmxlcy5sZW5ndGggIT0gMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXBv
cnRlZCB0YWJsZXMgbXVzdCBiZSBkZWNsYXJlZCBiZWZvcmUgbG9jYWwgb25lcycpOworICAgIH0K
KyAgICBsZXQgbyA9IHsKKyAgICAgIG1vZHVsZTogbW9kdWxlLAorICAgICAgbmFtZTogbmFtZSwK
KyAgICAgIGtpbmQ6IGtFeHRlcm5hbFRhYmxlLAorICAgICAgaW5pdGlhbDogaW5pdGlhbCwKKyAg
ICAgIG1heGltdW06IG1heGltdW0sCisgICAgICB0eXBlOiB0eXBlIHx8IGtXYXNtRnVuY1JlZgor
ICAgIH07CisgICAgdGhpcy5pbXBvcnRzLnB1c2gobyk7CisgICAgcmV0dXJuIHRoaXMubnVtX2lt
cG9ydGVkX3RhYmxlcysrOworICB9CisKKyAgYWRkSW1wb3J0ZWRUYWcobW9kdWxlLCBuYW1lLCB0
eXBlKSB7CisgICAgaWYgKHRoaXMudGFncy5sZW5ndGggIT0gMCkgeworICAgICAgdGhyb3cgbmV3
IEVycm9yKCdJbXBvcnRlZCB0YWdzIG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGxvY2FsIG9uZXMn
KTsKKyAgICB9CisgICAgbGV0IHR5cGVfaW5kZXggPSAodHlwZW9mIHR5cGUpID09ICdudW1iZXIn
ID8gdHlwZSA6IHRoaXMuYWRkVHlwZSh0eXBlKTsKKyAgICBsZXQgbyA9IHsKKyAgICAgIG1vZHVs
ZTogbW9kdWxlLAorICAgICAgbmFtZTogbmFtZSwKKyAgICAgIGtpbmQ6IGtFeHRlcm5hbFRhZywK
KyAgICAgIHR5cGVfaW5kZXg6IHR5cGVfaW5kZXgKKyAgICB9OworICAgIHRoaXMuaW1wb3J0cy5w
dXNoKG8pOworICAgIHJldHVybiB0aGlzLm51bV9pbXBvcnRlZF90YWdzKys7CisgIH0KKworICBh
ZGRFeHBvcnQobmFtZSwgaW5kZXgpIHsKKyAgICB0aGlzLmV4cG9ydHMucHVzaCh7bmFtZTogbmFt
ZSwga2luZDoga0V4dGVybmFsRnVuY3Rpb24sIGluZGV4OiBpbmRleH0pOworICAgIHJldHVybiB0
aGlzOworICB9CisKKyAgYWRkRXhwb3J0T2ZLaW5kKG5hbWUsIGtpbmQsIGluZGV4KSB7CisgICAg
aWYgKGluZGV4ID09PSB1bmRlZmluZWQgJiYga2luZCAhPSBrRXh0ZXJuYWxUYWJsZSAmJgorICAg
ICAgICBraW5kICE9IGtFeHRlcm5hbE1lbW9yeSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKAor
ICAgICAgICAgICdJbmRleCBmb3IgZXhwb3J0cyBvdGhlciB0aGFuIHRhYmxlcy9tZW1vcmllcyBt
dXN0IGJlIHByb3ZpZGVkJyk7CisgICAgfQorICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYm
ICh0eXBlb2YgaW5kZXgpICE9ICdudW1iZXInKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lu
ZGV4IGZvciBleHBvcnRzIG11c3QgYmUgYSBudW1iZXInKQorICAgIH0KKyAgICB0aGlzLmV4cG9y
dHMucHVzaCh7bmFtZTogbmFtZSwga2luZDoga2luZCwgaW5kZXg6IGluZGV4fSk7CisgICAgcmV0
dXJuIHRoaXM7CisgIH0KKworICBzZXRDb21waWxhdGlvbkhpbnQoc3RyYXRlZ3ksIGJhc2VsaW5l
VGllciwgdG9wVGllciwgaW5kZXgpIHsKKyAgICB0aGlzLmNvbXBpbGF0aW9uX2hpbnRzW2luZGV4
XSA9IHsKKyAgICAgIHN0cmF0ZWd5OiBzdHJhdGVneSwKKyAgICAgIGJhc2VsaW5lVGllcjogYmFz
ZWxpbmVUaWVyLAorICAgICAgdG9wVGllcjogdG9wVGllcgorICAgIH07CisgICAgcmV0dXJuIHRo
aXM7CisgIH0KKworICBhZGREYXRhU2VnbWVudChhZGRyLCBkYXRhLCBpc19nbG9iYWwgPSBmYWxz
ZSkgeworICAgIHRoaXMuZGF0YV9zZWdtZW50cy5wdXNoKAorICAgICAgICB7YWRkcjogYWRkciwg
ZGF0YTogZGF0YSwgaXNfZ2xvYmFsOiBpc19nbG9iYWwsIGlzX2FjdGl2ZTogdHJ1ZX0pOworICAg
IHJldHVybiB0aGlzLmRhdGFfc2VnbWVudHMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGFkZFBhc3Np
dmVEYXRhU2VnbWVudChkYXRhKSB7CisgICAgdGhpcy5kYXRhX3NlZ21lbnRzLnB1c2goe2RhdGE6
IGRhdGEsIGlzX2FjdGl2ZTogZmFsc2V9KTsKKyAgICByZXR1cm4gdGhpcy5kYXRhX3NlZ21lbnRz
Lmxlbmd0aCAtIDE7CisgIH0KKworICBleHBvcnRNZW1vcnlBcyhuYW1lKSB7CisgICAgdGhpcy5l
eHBvcnRzLnB1c2goe25hbWU6IG5hbWUsIGtpbmQ6IGtFeHRlcm5hbE1lbW9yeSwgaW5kZXg6IDB9
KTsKKyAgfQorCisgIC8vIHtvZmZzZXR9IGlzIGFuIGluaXRpYWxpemVyIGV4cHJlc3Npb24uCisg
IC8vIElmIHt0eXBlfSBpcyB1bmRlZmluZWQsIHRoZW4ge2VsZW1lbnRzfSBhcmUgZnVuY3Rpb24g
aW5kaWNlcy4gT3RoZXJ3aXNlLAorICAvLyB0aGV5IGFyZSBpbml0aWFsaXplciBleHByZXNzaW9u
cy4KKyAgYWRkQWN0aXZlRWxlbWVudFNlZ21lbnQodGFibGUsIG9mZnNldCwgZWxlbWVudHMsIHR5
cGUpIHsKKyAgICB0aGlzLmVsZW1lbnRfc2VnbWVudHMucHVzaCgKKyAgICAgICAgbmV3IFdhc21F
bGVtU2VnbWVudCh0YWJsZSwgb2Zmc2V0LCB0eXBlLCBlbGVtZW50cywgZmFsc2UpKTsKKyAgICBy
ZXR1cm4gdGhpcy5lbGVtZW50X3NlZ21lbnRzLmxlbmd0aCAtIDE7CisgIH0KKworICAvLyBJZiB7
dHlwZX0gaXMgdW5kZWZpbmVkLCB0aGVuIHtlbGVtZW50c30gYXJlIGZ1bmN0aW9uIGluZGljZXMu
IE90aGVyd2lzZSwKKyAgLy8gdGhleSBhcmUgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbnMuCisgIGFk
ZFBhc3NpdmVFbGVtZW50U2VnbWVudChlbGVtZW50cywgdHlwZSkgeworICAgIHRoaXMuZWxlbWVu
dF9zZWdtZW50cy5wdXNoKAorICAgICAgbmV3IFdhc21FbGVtU2VnbWVudCh1bmRlZmluZWQsIHVu
ZGVmaW5lZCwgdHlwZSwgZWxlbWVudHMsIGZhbHNlKSk7CisgICAgcmV0dXJuIHRoaXMuZWxlbWVu
dF9zZWdtZW50cy5sZW5ndGggLSAxOworICB9CisKKyAgLy8gSWYge3R5cGV9IGlzIHVuZGVmaW5l
ZCwgdGhlbiB7ZWxlbWVudHN9IGFyZSBmdW5jdGlvbiBpbmRpY2VzLiBPdGhlcndpc2UsCisgIC8v
IHRoZXkgYXJlIGluaXRpYWxpemVyIGV4cHJlc3Npb25zLgorICBhZGREZWNsYXJhdGl2ZUVsZW1l
bnRTZWdtZW50KGVsZW1lbnRzLCB0eXBlKSB7CisgICAgdGhpcy5lbGVtZW50X3NlZ21lbnRzLnB1
c2goCisgICAgICBuZXcgV2FzbUVsZW1TZWdtZW50KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0eXBl
LCBlbGVtZW50cywgdHJ1ZSkpOworICAgIHJldHVybiB0aGlzLmVsZW1lbnRfc2VnbWVudHMubGVu
Z3RoIC0gMTsKKyAgfQorCisgIGFwcGVuZFRvVGFibGUoYXJyYXkpIHsKKyAgICBmb3IgKGxldCBu
IG9mIGFycmF5KSB7CisgICAgICBpZiAodHlwZW9mIG4gIT0gJ251bWJlcicpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcignaW52YWxpZCB0YWJsZSAoZW50cmllcyBoYXZlIHRvIGJlIG51bWJlcnMp
OiAnICsgYXJyYXkpOworICAgIH0KKyAgICBpZiAodGhpcy50YWJsZXMubGVuZ3RoID09IDApIHsK
KyAgICAgIHRoaXMuYWRkVGFibGUoa1dhc21BbnlGdW5jLCAwKTsKKyAgICB9CisgICAgLy8gQWRq
dXN0IHRoZSB0YWJsZSB0byB0aGUgY29ycmVjdCBzaXplLgorICAgIGxldCB0YWJsZSA9IHRoaXMu
dGFibGVzWzBdOworICAgIGNvbnN0IGJhc2UgPSB0YWJsZS5pbml0aWFsX3NpemU7CisgICAgY29u
c3QgdGFibGVfc2l6ZSA9IGJhc2UgKyBhcnJheS5sZW5ndGg7CisgICAgdGFibGUuaW5pdGlhbF9z
aXplID0gdGFibGVfc2l6ZTsKKyAgICBpZiAodGFibGUuaGFzX21heCAmJiB0YWJsZV9zaXplID4g
dGFibGUubWF4X3NpemUpIHsKKyAgICAgIHRhYmxlLm1heF9zaXplID0gdGFibGVfc2l6ZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRoaXMuYWRkQWN0aXZlRWxlbWVudFNlZ21lbnQoMCwgV2FzbUluaXRF
eHByLkkzMkNvbnN0KGJhc2UpLCBhcnJheSk7CisgIH0KKworICBzZXRUYWJsZUJvdW5kcyhtaW4s
IG1heCA9IHVuZGVmaW5lZCkgeworICAgIGlmICh0aGlzLnRhYmxlcy5sZW5ndGggIT0gMCkgewor
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdGFibGUgYm91bmRzIG9mIHRhYmxlIFwnMFwnIGhh
dmUgYWxyZWFkeSBiZWVuIHNldC4nKTsKKyAgICB9CisgICAgdGhpcy5hZGRUYWJsZShrV2FzbUFu
eUZ1bmMsIG1pbiwgbWF4KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHNldE5hbWUobmFt
ZSkgeworICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICB0
b0J1ZmZlcihkZWJ1ZyA9IGZhbHNlKSB7CisgICAgbGV0IGJpbmFyeSA9IG5ldyBCaW5hcnk7Cisg
ICAgbGV0IHdhc20gPSB0aGlzOworCisgICAgLy8gQWRkIGhlYWRlcgorICAgIGJpbmFyeS5lbWl0
X2hlYWRlcigpOworCisgICAgLy8gQWRkIHR5cGUgc2VjdGlvbgorICAgIGlmICh3YXNtLnR5cGVz
Lmxlbmd0aCA+IDApIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIHR5cGVzIEAg
JyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrVHlwZVNlY3Rp
b25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS50eXBl
cy5sZW5ndGgpOworICAgICAgICBmb3IgKGxldCB0eXBlIG9mIHdhc20udHlwZXMpIHsKKyAgICAg
ICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFdhc21TdHJ1Y3QpIHsKKyAgICAgICAgICAgIHNlY3Rp
b24uZW1pdF91OCh0eXBlLnR5cGVfZm9ybSk7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMy
dih0eXBlLmZpZWxkcy5sZW5ndGgpOworICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdHlw
ZS5maWVsZHMpIHsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUoZmllbGQudHlwZSk7
CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChmaWVsZC5tdXRhYmlsaXR5ID8gMSA6IDAp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBXYXNtU3Ry
dWN0U3VidHlwZSkgeworICAgICAgICAgICAgICBpZiAodHlwZS5zdXBlcnR5cGUgPT09IHRoaXMu
a0dlbmVyaWNTdXBlclR5cGUpIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0Rh
dGFSZWZDb2RlKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZWN0
aW9uLmVtaXRfaGVhcF90eXBlKHR5cGUuc3VwZXJ0eXBlKTsKKyAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFdhc21BcnJh
eSkgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KHR5cGUudHlwZV9mb3JtKTsKKyAgICAg
ICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKHR5cGUudHlwZSk7CisgICAgICAgICAgICBzZWN0aW9u
LmVtaXRfdTgodHlwZS5tdXRhYmlsaXR5ID8gMSA6IDApOworICAgICAgICAgICAgaWYgKHR5cGUg
aW5zdGFuY2VvZiBXYXNtQXJyYXlTdWJ0eXBlKSB7CisgICAgICAgICAgICAgIGlmICh0eXBlLnN1
cGVydHlwZSA9PT0gdGhpcy5rR2VuZXJpY1N1cGVyVHlwZSkgeworICAgICAgICAgICAgICAgIHNl
Y3Rpb24uZW1pdF91OChrRGF0YVJlZkNvZGUpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF9oZWFwX3R5cGUodHlwZS5zdXBlcnR5cGUpOworICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHNlY3Rpb24uZW1pdF91OChrV2FzbUZ1bmN0aW9uVHlwZUZvcm0pOworICAgICAgICAgICAg
c2VjdGlvbi5lbWl0X3UzMnYodHlwZS5wYXJhbXMubGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAo
bGV0IHBhcmFtIG9mIHR5cGUucGFyYW1zKSB7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90
eXBlKHBhcmFtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2
KHR5cGUucmVzdWx0cy5sZW5ndGgpOworICAgICAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHR5
cGUucmVzdWx0cykgeworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShyZXN1bHQpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQor
CisgICAgLy8gQWRkIGltcG9ydHMgc2VjdGlvbgorICAgIGlmICh3YXNtLmltcG9ydHMubGVuZ3Ro
ID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgaW1wb3J0cyBAICcgKyBi
aW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa0ltcG9ydFNlY3Rpb25D
b2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS5pbXBvcnRz
Lmxlbmd0aCk7CisgICAgICAgIGZvciAobGV0IGltcCBvZiB3YXNtLmltcG9ydHMpIHsKKyAgICAg
ICAgICBzZWN0aW9uLmVtaXRfc3RyaW5nKGltcC5tb2R1bGUpOworICAgICAgICAgIHNlY3Rpb24u
ZW1pdF9zdHJpbmcoaW1wLm5hbWUgfHwgJycpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChp
bXAua2luZCk7CisgICAgICAgICAgaWYgKGltcC5raW5kID09IGtFeHRlcm5hbEZ1bmN0aW9uKSB7
CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihpbXAudHlwZV9pbmRleCk7CisgICAgICAg
ICAgfSBlbHNlIGlmIChpbXAua2luZCA9PSBrRXh0ZXJuYWxHbG9iYWwpIHsKKyAgICAgICAgICAg
IHNlY3Rpb24uZW1pdF90eXBlKGltcC50eXBlKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91
OChpbXAubXV0YWJsZSk7CisgICAgICAgICAgfSBlbHNlIGlmIChpbXAua2luZCA9PSBrRXh0ZXJu
YWxNZW1vcnkpIHsKKyAgICAgICAgICAgIHZhciBoYXNfbWF4ID0gKHR5cGVvZiBpbXAubWF4aW11
bSkgIT0gJ3VuZGVmaW5lZCc7CisgICAgICAgICAgICB2YXIgaXNfc2hhcmVkID0gKHR5cGVvZiBp
bXAuc2hhcmVkKSAhPSAndW5kZWZpbmVkJzsKKyAgICAgICAgICAgIGlmIChpc19zaGFyZWQpIHsK
KyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGhhc19tYXggPyAzIDogMik7ICAvLyBmbGFn
cworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGhh
c19tYXggPyAxIDogMCk7ICAvLyBmbGFncworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3UzMnYoaW1wLmluaXRpYWwpOyAgICAgICAgICAgICAgIC8vIGluaXRpYWwKKyAg
ICAgICAgICAgIGlmIChoYXNfbWF4KSBzZWN0aW9uLmVtaXRfdTMydihpbXAubWF4aW11bSk7ICAv
LyBtYXhpbXVtCisgICAgICAgICAgfSBlbHNlIGlmIChpbXAua2luZCA9PSBrRXh0ZXJuYWxUYWJs
ZSkgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUoaW1wLnR5cGUpOworICAgICAgICAg
ICAgdmFyIGhhc19tYXggPSAodHlwZW9mIGltcC5tYXhpbXVtKSAhPSAndW5kZWZpbmVkJzsKKyAg
ICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChoYXNfbWF4ID8gMSA6IDApOyAgICAgICAgICAgICAv
LyBmbGFncworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoaW1wLmluaXRpYWwpOyAgICAg
ICAgICAgICAgIC8vIGluaXRpYWwKKyAgICAgICAgICAgIGlmIChoYXNfbWF4KSBzZWN0aW9uLmVt
aXRfdTMydihpbXAubWF4aW11bSk7ICAvLyBtYXhpbXVtCisgICAgICAgICAgfSBlbHNlIGlmIChp
bXAua2luZCA9PSBrRXh0ZXJuYWxUYWcpIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2
KGtFeGNlcHRpb25BdHRyaWJ1dGUpOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoaW1w
LnR5cGVfaW5kZXgpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoJ3Vua25vd24vdW5zdXBwb3J0ZWQgaW1wb3J0IGtpbmQgJyArIGltcC5raW5kKTsKKyAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCBmdW5j
dGlvbnMgZGVjbGFyYXRpb25zCisgICAgaWYgKHdhc20uZnVuY3Rpb25zLmxlbmd0aCA+IDApIHsK
KyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGZ1bmN0aW9uIGRlY2xzIEAgJyArIGJp
bmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrRnVuY3Rpb25TZWN0aW9u
Q29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20uZnVuY3Rp
b25zLmxlbmd0aCk7CisgICAgICAgIGZvciAobGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsK
KyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihmdW5jLnR5cGVfaW5kZXgpOworICAgICAgICB9
CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgdGFibGUgc2VjdGlvbgorICAgIGlmICh3
YXNtLnRhYmxlcy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGlu
ZyB0YWJsZXMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9u
KGtUYWJsZVNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3Uz
MnYod2FzbS50YWJsZXMubGVuZ3RoKTsKKyAgICAgICAgZm9yIChsZXQgdGFibGUgb2Ygd2FzbS50
YWJsZXMpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZSh0YWJsZS50eXBlKTsKKyAgICAg
ICAgICBzZWN0aW9uLmVtaXRfdTgodGFibGUuaGFzX21heCk7CisgICAgICAgICAgc2VjdGlvbi5l
bWl0X3UzMnYodGFibGUuaW5pdGlhbF9zaXplKTsKKyAgICAgICAgICBpZiAodGFibGUuaGFzX21h
eCkgc2VjdGlvbi5lbWl0X3UzMnYodGFibGUubWF4X3NpemUpOworICAgICAgICAgIGlmICh0YWJs
ZS5oYXNfaW5pdCkgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcih0YWJsZS5p
bml0X2V4cHIpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisg
ICAgLy8gQWRkIG1lbW9yeSBzZWN0aW9uCisgICAgaWYgKHdhc20ubWVtb3J5ICE9PSB1bmRlZmlu
ZWQpIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIG1lbW9yeSBAICcgKyBiaW5h
cnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa01lbW9yeVNlY3Rpb25Db2Rl
LCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDEpOyAgLy8gb25lIG1lbW9y
eSBlbnRyeQorICAgICAgICBjb25zdCBoYXNfbWF4ID0gd2FzbS5tZW1vcnkubWF4ICE9PSB1bmRl
ZmluZWQ7CisgICAgICAgIGlmICh3YXNtLm1lbW9yeS5pc19tZW1vcnk2NCkgeworICAgICAgICAg
IGlmICh3YXNtLm1lbW9yeS5zaGFyZWQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign
c2hhcmluZyBtZW1vcnk2NCBpcyBub3Qgc3VwcG9ydGVkICh5ZXQpJyk7CisgICAgICAgICAgfQor
ICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgKKyAgICAgICAgICAgICAgaGFzX21heCA/IGtMaW1p
dHNNZW1vcnk2NFdpdGhNYXhpbXVtIDoga0xpbWl0c01lbW9yeTY0Tm9NYXhpbXVtKTsKKyAgICAg
ICAgICBzZWN0aW9uLmVtaXRfdTY0dih3YXNtLm1lbW9yeS5taW4pOworICAgICAgICAgIGlmICho
YXNfbWF4KSBzZWN0aW9uLmVtaXRfdTY0dih3YXNtLm1lbW9yeS5tYXgpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgKKyAgICAgICAgICAgICAgd2FzbS5tZW1v
cnkuc2hhcmVkID8KKyAgICAgICAgICAgICAgICAgIChoYXNfbWF4ID8ga0xpbWl0c1NoYXJlZFdp
dGhNYXhpbXVtIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xpbWl0c1NoYXJlZE5v
TWF4aW11bSkgOgorICAgICAgICAgICAgICAgICAgKGhhc19tYXggPyBrTGltaXRzV2l0aE1heGlt
dW0gOiBrTGltaXRzTm9NYXhpbXVtKSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2Fz
bS5tZW1vcnkubWluKTsKKyAgICAgICAgICBpZiAoaGFzX21heCkgc2VjdGlvbi5lbWl0X3UzMnYo
d2FzbS5tZW1vcnkubWF4KTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8g
QWRkIHRhZyBzZWN0aW9uLgorICAgIGlmICh3YXNtLnRhZ3MubGVuZ3RoID4gMCkgeworICAgICAg
aWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgdGFncyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAg
ICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1RhZ1NlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAg
ICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS50YWdzLmxlbmd0aCk7CisgICAgICAgIGZvciAo
bGV0IHR5cGVfaW5kZXggb2Ygd2FzbS50YWdzKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3Uz
MnYoa0V4Y2VwdGlvbkF0dHJpYnV0ZSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYodHlw
ZV9pbmRleCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCBnbG9i
YWwgc2VjdGlvbi4KKyAgICBpZiAod2FzbS5nbG9iYWxzLmxlbmd0aCA+IDApIHsKKyAgICAgIGlm
IChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGdsb2JhbHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7Cisg
ICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtHbG9iYWxTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7
CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20uZ2xvYmFscy5sZW5ndGgpOworICAgICAg
ICBmb3IgKGxldCBnbG9iYWwgb2Ygd2FzbS5nbG9iYWxzKSB7CisgICAgICAgICAgc2VjdGlvbi5l
bWl0X3R5cGUoZ2xvYmFsLnR5cGUpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChnbG9iYWwu
bXV0YWJsZSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcihnbG9iYWwuaW5pdCk7
CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCBleHBvcnQgdGFibGUu
CisgICAgdmFyIG1lbV9leHBvcnQgPSAod2FzbS5tZW1vcnkgIT09IHVuZGVmaW5lZCAmJiB3YXNt
Lm1lbW9yeS5leHBvcnRlZCk7CisgICAgdmFyIGV4cG9ydHNfY291bnQgPSB3YXNtLmV4cG9ydHMu
bGVuZ3RoICsgKG1lbV9leHBvcnQgPyAxIDogMCk7CisgICAgaWYgKGV4cG9ydHNfY291bnQgPiAw
KSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBleHBvcnRzIEAgJyArIGJpbmFy
eS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrRXhwb3J0U2VjdGlvbkNvZGUs
IHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihleHBvcnRzX2NvdW50KTsK
KyAgICAgICAgZm9yIChsZXQgZXhwIG9mIHdhc20uZXhwb3J0cykgeworICAgICAgICAgIHNlY3Rp
b24uZW1pdF9zdHJpbmcoZXhwLm5hbWUpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChleHAu
a2luZCk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoZXhwLmluZGV4KTsKKyAgICAgICAg
fQorICAgICAgICBpZiAobWVtX2V4cG9ydCkgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF9zdHJp
bmcoJ21lbW9yeScpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChrRXh0ZXJuYWxNZW1vcnkp
OworICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgwKTsKKyAgICAgICAgfQorICAgICAgfSk7Cisg
ICAgfQorCisgICAgLy8gQWRkIHN0YXJ0IGZ1bmN0aW9uIHNlY3Rpb24uCisgICAgaWYgKHdhc20u
c3RhcnRfaW5kZXggIT09IHVuZGVmaW5lZCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1p
dHRpbmcgc3RhcnQgZnVuY3Rpb24gQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnku
ZW1pdF9zZWN0aW9uKGtTdGFydFNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2Vj
dGlvbi5lbWl0X3UzMnYod2FzbS5zdGFydF9pbmRleCk7CisgICAgICB9KTsKKyAgICB9CisKKyAg
ICAvLyBBZGQgZWxlbWVudCBzZWdtZW50cworICAgIGlmICh3YXNtLmVsZW1lbnRfc2VnbWVudHMu
bGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgZWxlbWVudCBz
ZWdtZW50cyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24o
a0VsZW1lbnRTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHZhciBzZWdtZW50cyA9
IHdhc20uZWxlbWVudF9zZWdtZW50czsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoc2VnbWVu
dHMubGVuZ3RoKTsKKworICAgICAgICBmb3IgKGxldCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7Cisg
ICAgICAgICAgLy8gRW1pdCBmbGFnIGFuZCBoZWFkZXIuCisgICAgICAgICAgLy8gRWFjaCBjYXNl
IGJlbG93IGNvcnJlc3BvbmRzIHRvIGEgZmxhZyBmcm9tCisgICAgICAgICAgLy8gaHR0cHM6Ly93
ZWJhc3NlbWJseS5naXRodWIuaW8vc3BlYy9jb3JlL2JpbmFyeS9tb2R1bGVzLmh0bWwjZWxlbWVu
dC1zZWN0aW9uCisgICAgICAgICAgLy8gKG5vdCBpbiBpbmNyZWFzaW5nIG9yZGVyKS4KKyAgICAg
ICAgICBpZiAoc2VnbWVudC5pc19hY3RpdmUoKSkgeworICAgICAgICAgICAgaWYgKHNlZ21lbnQu
dGFibGUgPT0gMCAmJiBzZWdtZW50LnR5cGUgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAg
ICBpZiAoc2VnbWVudC5leHByZXNzaW9uc19hc19lbGVtZW50cygpKSB7CisgICAgICAgICAgICAg
ICAgc2VjdGlvbi5lbWl0X3U4KDB4MDQpOworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF9p
bml0X2V4cHIoc2VnbWVudC5vZmZzZXQpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDAwKQorICAgICAgICAgICAgICAgIHNlY3Rpb24u
ZW1pdF9pbml0X2V4cHIoc2VnbWVudC5vZmZzZXQpOworICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBpZiAoc2VnbWVudC5leHByZXNzaW9uc19hc19l
bGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDYpOworICAg
ICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHNlZ21lbnQudGFibGUpOworICAgICAgICAg
ICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIoc2VnbWVudC5vZmZzZXQpOworICAgICAgICAg
ICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKHNlZ21lbnQudHlwZSk7CisgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDIpOworICAgICAgICAg
ICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHNlZ21lbnQudGFibGUpOworICAgICAgICAgICAgICAg
IHNlY3Rpb24uZW1pdF9pbml0X2V4cHIoc2VnbWVudC5vZmZzZXQpOworICAgICAgICAgICAgICAg
IHNlY3Rpb24uZW1pdF91OChrRXh0ZXJuYWxGdW5jdGlvbik7CisgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHNlZ21lbnQu
ZXhwcmVzc2lvbnNfYXNfZWxlbWVudHMoKSkgeworICAgICAgICAgICAgICBpZiAoc2VnbWVudC5p
c19wYXNzaXZlKCkpIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwNSk7Cisg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4
MDcpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKHNl
Z21lbnQudHlwZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBpZiAoc2Vn
bWVudC5pc19wYXNzaXZlKCkpIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgw
MSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0
X3U4KDB4MDMpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91
OChrRXh0ZXJuYWxGdW5jdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAg
ICAgICAgLy8gRW1pdCBlbGVtZW50cy4KKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWdt
ZW50LmVsZW1lbnRzLmxlbmd0aCk7CisgICAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBzZWdt
ZW50LmVsZW1lbnRzKSB7CisgICAgICAgICAgICBpZiAoc2VnbWVudC5leHByZXNzaW9uc19hc19l
bGVtZW50cygpKSB7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIoZWxlbWVu
dCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMy
dihlbGVtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
IH0pCisgICAgfQorCisgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBwYXNzaXZlIGRhdGEgc2VnbWVu
dHMsIGFkZCB0aGUgRGF0YUNvdW50IHNlY3Rpb24uCisgICAgaWYgKHdhc20uZGF0YV9zZWdtZW50
cy5zb21lKHNlZyA9PiAhc2VnLmlzX2FjdGl2ZSkpIHsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rp
b24oa0RhdGFDb3VudFNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5l
bWl0X3UzMnYod2FzbS5kYXRhX3NlZ21lbnRzLmxlbmd0aCk7CisgICAgICB9KTsKKyAgICB9CisK
KyAgICAvLyBJZiB0aGVyZSBhcmUgY29tcGlsYXRpb24gaGludHMgYWRkIGEgY3VzdG9tIHNlY3Rp
b24gJ2NvbXBpbGF0aW9uSGludHMnCisgICAgLy8gYWZ0ZXIgdGhlIGZ1bmN0aW9uIHNlY3Rpb24g
YW5kIGJlZm9yZSB0aGUgY29kZSBzZWN0aW9uLgorICAgIGlmICh3YXNtLmNvbXBpbGF0aW9uX2hp
bnRzLmxlbmd0aCA+IDApIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGNvbXBp
bGF0aW9uIGhpbnRzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgLy8gQnVpbGQgY3VzdG9t
IHNlY3Rpb24gcGF5bG9hZC4KKyAgICAgIGxldCBwYXlsb2FkQmluYXJ5ID0gbmV3IEJpbmFyeSgp
OworICAgICAgbGV0IGltcGxpY2l0X2NvbXBpbGF0aW9uX2hpbnRzX2NvdW50ID0gd2FzbS5mdW5j
dGlvbnMubGVuZ3RoOworICAgICAgcGF5bG9hZEJpbmFyeS5lbWl0X3UzMnYoaW1wbGljaXRfY29t
cGlsYXRpb25faGludHNfY291bnQpOworCisgICAgICAvLyBEZWZhdWx0cyB0byB0aGUgY29tcGls
ZXIncyBjaG9pY2UgaWYgbm8gYmV0dGVyIGhpbnQgd2FzIGdpdmVuICgweDAwKS4KKyAgICAgIGxl
dCBkZWZhdWx0SGludEJ5dGUgPSBrQ29tcGlsYXRpb25IaW50U3RyYXRlZ3lEZWZhdWx0IHwKKyAg
ICAgICAgICAoa0NvbXBpbGF0aW9uSGludFRpZXJEZWZhdWx0IDw8IDIpIHwKKyAgICAgICAgICAo
a0NvbXBpbGF0aW9uSGludFRpZXJEZWZhdWx0IDw8IDQpOworCisgICAgICAvLyBFbWl0IGhpbnQg
Ynl0ZSBmb3IgZXZlcnkgZnVuY3Rpb24gZGVmaW5lZCBpbiB0aGlzIG1vZHVsZS4KKyAgICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgaW1wbGljaXRfY29tcGlsYXRpb25faGludHNfY291bnQ7IGkrKykg
eworICAgICAgICBsZXQgaW5kZXggPSB3YXNtLm51bV9pbXBvcnRlZF9mdW5jcyArIGk7CisgICAg
ICAgIHZhciBoaW50Qnl0ZTsKKyAgICAgICAgaWYgKGluZGV4IGluIHdhc20uY29tcGlsYXRpb25f
aGludHMpIHsKKyAgICAgICAgICBsZXQgaGludCA9IHdhc20uY29tcGlsYXRpb25faGludHNbaW5k
ZXhdOworICAgICAgICAgIGhpbnRCeXRlID0KKyAgICAgICAgICAgICAgaGludC5zdHJhdGVneSB8
IChoaW50LmJhc2VsaW5lVGllciA8PCAyKSB8IChoaW50LnRvcFRpZXIgPDwgNCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgaGludEJ5dGUgPSBkZWZhdWx0SGludEJ5dGU7CisgICAgICAg
IH0KKyAgICAgICAgcGF5bG9hZEJpbmFyeS5lbWl0X3U4KGhpbnRCeXRlKTsKKyAgICAgIH0KKwor
ICAgICAgLy8gRmluYWxpemUgYXMgY3VzdG9tIHNlY3Rpb24uCisgICAgICBsZXQgbmFtZSA9ICdj
b21waWxhdGlvbkhpbnRzJzsKKyAgICAgIGxldCBieXRlcyA9IHRoaXMuY3JlYXRlQ3VzdG9tU2Vj
dGlvbihuYW1lLCBwYXlsb2FkQmluYXJ5LnRydW5jX2J1ZmZlcigpKTsKKyAgICAgIGJpbmFyeS5l
bWl0X2J5dGVzKGJ5dGVzKTsKKyAgICB9CisKKyAgICAvLyBBZGQgZnVuY3Rpb24gYm9kaWVzLgor
ICAgIGlmICh3YXNtLmZ1bmN0aW9ucy5sZW5ndGggPiAwKSB7CisgICAgICAvLyBlbWl0IGZ1bmN0
aW9uIGJvZGllcworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgY29kZSBAICcgKyBi
aW5hcnkubGVuZ3RoKTsKKyAgICAgIGxldCBzZWN0aW9uX2xlbmd0aCA9IDA7CisgICAgICBiaW5h
cnkuZW1pdF9zZWN0aW9uKGtDb2RlU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBz
ZWN0aW9uLmVtaXRfdTMydih3YXNtLmZ1bmN0aW9ucy5sZW5ndGgpOworICAgICAgICBsZXQgaGVh
ZGVyID0gbmV3IEJpbmFyeTsKKyAgICAgICAgZm9yIChsZXQgZnVuYyBvZiB3YXNtLmZ1bmN0aW9u
cykgeworICAgICAgICAgIGhlYWRlci5yZXNldCgpOworICAgICAgICAgIC8vIEZ1bmN0aW9uIGJv
ZHkgbGVuZ3RoIHdpbGwgYmUgcGF0Y2hlZCBsYXRlci4KKyAgICAgICAgICBsZXQgbG9jYWxfZGVj
bHMgPSBmdW5jLmxvY2FscyB8fCBbXTsKKyAgICAgICAgICBoZWFkZXIuZW1pdF91MzJ2KGxvY2Fs
X2RlY2xzLmxlbmd0aCk7CisgICAgICAgICAgZm9yIChsZXQgZGVjbCBvZiBsb2NhbF9kZWNscykg
eworICAgICAgICAgICAgaGVhZGVyLmVtaXRfdTMydihkZWNsLmNvdW50KTsKKyAgICAgICAgICAg
IGhlYWRlci5lbWl0X3R5cGUoZGVjbC50eXBlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3UzMnYoaGVhZGVyLmxlbmd0aCArIGZ1bmMuYm9keS5sZW5ndGgpOworICAgICAg
ICAgIHNlY3Rpb24uZW1pdF9ieXRlcyhoZWFkZXIudHJ1bmNfYnVmZmVyKCkpOworICAgICAgICAg
IC8vIFNldCB0byBzZWN0aW9uIG9mZnNldCBmb3Igbm93LCB3aWxsIHVwZGF0ZS4KKyAgICAgICAg
ICBmdW5jLmJvZHlfb2Zmc2V0ID0gc2VjdGlvbi5sZW5ndGg7CisgICAgICAgICAgc2VjdGlvbi5l
bWl0X2J5dGVzKGZ1bmMuYm9keSk7CisgICAgICAgIH0KKyAgICAgICAgc2VjdGlvbl9sZW5ndGgg
PSBzZWN0aW9uLmxlbmd0aDsKKyAgICAgIH0pOworICAgICAgZm9yIChsZXQgZnVuYyBvZiB3YXNt
LmZ1bmN0aW9ucykgeworICAgICAgICBmdW5jLmJvZHlfb2Zmc2V0ICs9IGJpbmFyeS5sZW5ndGgg
LSBzZWN0aW9uX2xlbmd0aDsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBZGQgZGF0YSBzZWdt
ZW50cy4KKyAgICBpZiAod2FzbS5kYXRhX3NlZ21lbnRzLmxlbmd0aCA+IDApIHsKKyAgICAgIGlm
IChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGRhdGEgc2VnbWVudHMgQCAnICsgYmluYXJ5Lmxlbmd0
aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtEYXRhU2VjdGlvbkNvZGUsIHNlY3Rpb24g
PT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLmRhdGFfc2VnbWVudHMubGVuZ3Ro
KTsKKyAgICAgICAgZm9yIChsZXQgc2VnIG9mIHdhc20uZGF0YV9zZWdtZW50cykgeworICAgICAg
ICAgIGlmIChzZWcuaXNfYWN0aXZlKSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMCk7
ICAvLyBsaW5lYXIgbWVtb3J5IGluZGV4IDAgLyBmbGFncworICAgICAgICAgICAgaWYgKHNlZy5p
c19nbG9iYWwpIHsKKyAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZXIgaXMgYSBnbG9iYWwgdmFy
aWFibGUKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHByR2xvYmFsR2V0KTsKKyAg
ICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoc2VnLmFkZHIpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZXIgaXMgYSBjb25zdGFudAorICAgICAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0V4cHJJMzJDb25zdCk7CisgICAgICAgICAgICAgIHNl
Y3Rpb24uZW1pdF91MzJ2KHNlZy5hZGRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNl
Y3Rpb24uZW1pdF91OChrRXhwckVuZCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHNlY3Rpb24uZW1pdF91OChrUGFzc2l2ZSk7ICAvLyBmbGFncworICAgICAgICAgIH0KKyAgICAg
ICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWcuZGF0YS5sZW5ndGgpOworICAgICAgICAgIHNlY3Rp
b24uZW1pdF9ieXRlcyhzZWcuZGF0YSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKwor
ICAgIC8vIEFkZCBhbnkgZXhwbGljaXRseSBhZGRlZCBzZWN0aW9ucworICAgIGZvciAobGV0IGV4
cCBvZiB3YXNtLmV4cGxpY2l0KSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBl
eHBsaWNpdCBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X2J5dGVzKGV4
cCk7CisgICAgfQorCisgICAgLy8gQWRkIG5hbWVzLgorICAgIGxldCBudW1fZnVuY3Rpb25fbmFt
ZXMgPSAwOworICAgIGxldCBudW1fZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFtZXMgPSAwOworICAg
IGZvciAobGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsKKyAgICAgIGlmIChmdW5jLm5hbWUg
IT09IHVuZGVmaW5lZCkgKytudW1fZnVuY3Rpb25fbmFtZXM7CisgICAgICBpZiAoZnVuYy5udW1M
b2NhbE5hbWVzKCkgPiAwKSArK251bV9mdW5jdGlvbnNfd2l0aF9sb2NhbF9uYW1lczsKKyAgICB9
CisgICAgaWYgKG51bV9mdW5jdGlvbl9uYW1lcyA+IDAgfHwgbnVtX2Z1bmN0aW9uc193aXRoX2xv
Y2FsX25hbWVzID4gMCB8fAorICAgICAgICB3YXNtLm5hbWUgIT09IHVuZGVmaW5lZCkgeworICAg
ICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgbmFtZXMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7
CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtVbmtub3duU2VjdGlvbkNvZGUsIHNlY3Rpb24g
PT4geworICAgICAgICBzZWN0aW9uLmVtaXRfc3RyaW5nKCduYW1lJyk7CisgICAgICAgIC8vIEVt
aXQgbW9kdWxlIG5hbWUuCisgICAgICAgIGlmICh3YXNtLm5hbWUgIT09IHVuZGVmaW5lZCkgewor
ICAgICAgICAgIHNlY3Rpb24uZW1pdF9zZWN0aW9uKGtNb2R1bGVOYW1lQ29kZSwgbmFtZV9zZWN0
aW9uID0+IHsKKyAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0X3N0cmluZyh3YXNtLm5hbWUp
OworICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIC8vIEVtaXQgZnVuY3Rpb24gbmFt
ZXMuCisgICAgICAgIGlmIChudW1fZnVuY3Rpb25fbmFtZXMgPiAwKSB7CisgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3NlY3Rpb24oa0Z1bmN0aW9uTmFtZXNDb2RlLCBuYW1lX3NlY3Rpb24gPT4gewor
ICAgICAgICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfdTMydihudW1fZnVuY3Rpb25fbmFtZXMpOwor
ICAgICAgICAgICAgZm9yIChsZXQgZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgeworICAgICAgICAg
ICAgICBpZiAoZnVuYy5uYW1lID09PSB1bmRlZmluZWQpIGNvbnRpbnVlOworICAgICAgICAgICAg
ICBuYW1lX3NlY3Rpb24uZW1pdF91MzJ2KGZ1bmMuaW5kZXgpOworICAgICAgICAgICAgICBuYW1l
X3NlY3Rpb24uZW1pdF9zdHJpbmcoZnVuYy5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorICAgICAgICAvLyBFbWl0IGxvY2FsIG5hbWVzLgorICAgICAgICBp
ZiAobnVtX2Z1bmN0aW9uc193aXRoX2xvY2FsX25hbWVzID4gMCkgeworICAgICAgICAgIHNlY3Rp
b24uZW1pdF9zZWN0aW9uKGtMb2NhbE5hbWVzQ29kZSwgbmFtZV9zZWN0aW9uID0+IHsKKyAgICAg
ICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0X3UzMnYobnVtX2Z1bmN0aW9uc193aXRoX2xvY2FsX25h
bWVzKTsKKyAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsKKyAg
ICAgICAgICAgICAgaWYgKGZ1bmMubnVtTG9jYWxOYW1lcygpID09IDApIGNvbnRpbnVlOworICAg
ICAgICAgICAgICBuYW1lX3NlY3Rpb24uZW1pdF91MzJ2KGZ1bmMuaW5kZXgpOworICAgICAgICAg
ICAgICBuYW1lX3NlY3Rpb24uZW1pdF91MzJ2KGZ1bmMubnVtTG9jYWxOYW1lcygpKTsKKyAgICAg
ICAgICAgICAgbGV0IG5hbWVfaW5kZXggPSAwOworICAgICAgICAgICAgICBmb3IgKGxldCBpID0g
MDsgaSA8IGZ1bmMubG9jYWxfbmFtZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodHlwZW9mIGZ1bmMubG9jYWxfbmFtZXNbaV0gPT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAg
ICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0X3UzMnYobmFtZV9pbmRleCk7CisgICAgICAgICAgICAg
ICAgICBuYW1lX3NlY3Rpb24uZW1pdF9zdHJpbmcoZnVuYy5sb2NhbF9uYW1lc1tpXSk7CisgICAg
ICAgICAgICAgICAgICBuYW1lX2luZGV4Kys7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgIG5hbWVfaW5kZXggKz0gZnVuYy5sb2NhbF9uYW1lc1tpXTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGJpbmFyeS50cnVu
Y19idWZmZXIoKTsKKyAgfQorCisgIHRvQXJyYXkoZGVidWcgPSBmYWxzZSkgeworICAgIHJldHVy
biBBcnJheS5mcm9tKHRoaXMudG9CdWZmZXIoZGVidWcpKTsKKyAgfQorCisgIGluc3RhbnRpYXRl
KGZmaSkgeworICAgIGxldCBtb2R1bGUgPSB0aGlzLnRvTW9kdWxlKCk7CisgICAgbGV0IGluc3Rh
bmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgZmZpKTsKKyAgICByZXR1cm4g
aW5zdGFuY2U7CisgIH0KKworICBhc3luY0luc3RhbnRpYXRlKGZmaSkgeworICAgIHJldHVybiBX
ZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh0aGlzLnRvQnVmZmVyKCksIGZmaSkKKyAgICAgICAgLnRo
ZW4oKHttb2R1bGUsIGluc3RhbmNlfSkgPT4gaW5zdGFuY2UpOworICB9CisKKyAgdG9Nb2R1bGUo
ZGVidWcgPSBmYWxzZSkgeworICAgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKHRoaXMu
dG9CdWZmZXIoZGVidWcpKTsKKyAgfQorfQorCitmdW5jdGlvbiB3YXNtU2lnbmVkTGViKHZhbCwg
bWF4X2xlbiA9IDUpIHsKKyAgbGV0IHJlcyA9IFtdOworICBmb3IgKGxldCBpID0gMDsgaSA8IG1h
eF9sZW47ICsraSkgeworICAgIGxldCB2ID0gdmFsICYgMHg3ZjsKKyAgICAvLyBJZiB7dn0gc2ln
bi1leHRlbmRlZCBmcm9tIDcgdG8gMzIgYml0cyBpcyBlcXVhbCB0byB2YWwsIHdlIGFyZSBkb25l
LgorICAgIGlmICgoKHYgPDwgMjUpID4+IDI1KSA9PSB2YWwpIHsKKyAgICAgIHJlcy5wdXNoKHYp
OworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgcmVzLnB1c2godiB8IDB4ODApOworICAg
IHZhbCA9IHZhbCA+PiA3OworICB9CisgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICdMZWIgdmFs
dWUgPCcgKyB2YWwgKyAnPiBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICcgKyBtYXhfbGVuKTsK
K30KKworZnVuY3Rpb24gd2FzbVVuc2lnbmVkTGViKHZhbCwgbWF4X2xlbiA9IDUpIHsKKyAgbGV0
IHJlcyA9IFtdOworICBmb3IgKGxldCBpID0gMDsgaSA8IG1heF9sZW47ICsraSkgeworICAgIGxl
dCB2ID0gdmFsICYgMHg3ZjsKKyAgICBpZiAodiA9PSB2YWwpIHsKKyAgICAgIHJlcy5wdXNoKHYp
OworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgcmVzLnB1c2godiB8IDB4ODApOworICAg
IHZhbCA9IHZhbCA+Pj4gNzsKKyAgfQorICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAnTGViIHZh
bHVlIDwnICsgdmFsICsgJz4gZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAnICsgbWF4X2xlbik7
Cit9CisKK2Z1bmN0aW9uIHdhc21JMzJDb25zdCh2YWwpIHsKKyAgcmV0dXJuIFtrRXhwckkzMkNv
bnN0LCAuLi53YXNtU2lnbmVkTGViKHZhbCwgNSldOworfQorCisvLyBOb3RlOiBTaW5jZSB7dmFs
fSBpcyBhIEpTIG51bWJlciwgdGhlIGdlbmVyYXRlZCBjb25zdGFudCBvbmx5IGhhcyA1MyBiaXRz
IG9mCisvLyBwcmVjaXNpb24uCitmdW5jdGlvbiB3YXNtSTY0Q29uc3QodmFsKSB7CisgIHJldHVy
biBba0V4cHJJNjRDb25zdCwgLi4ud2FzbVNpZ25lZExlYih2YWwsIDEwKV07Cit9CisKK2Z1bmN0
aW9uIHdhc21GMzJDb25zdChmKSB7CisgIC8vIFdyaXRlIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIg
YXQgb2Zmc2V0IDAuCisgIGRhdGFfdmlldy5zZXRGbG9hdDMyKDAsIGYsIHRydWUpOworICByZXR1
cm4gWworICAgIGtFeHByRjMyQ29uc3QsIGJ5dGVfdmlld1swXSwgYnl0ZV92aWV3WzFdLCBieXRl
X3ZpZXdbMl0sIGJ5dGVfdmlld1szXQorICBdOworfQorCitmdW5jdGlvbiB3YXNtRjY0Q29uc3Qo
ZikgeworICAvLyBXcml0ZSBpbiBsaXR0bGUtZW5kaWFuIG9yZGVyIGF0IG9mZnNldCAwLgorICBk
YXRhX3ZpZXcuc2V0RmxvYXQ2NCgwLCBmLCB0cnVlKTsKKyAgcmV0dXJuIFsKKyAgICBrRXhwckY2
NENvbnN0LCBieXRlX3ZpZXdbMF0sIGJ5dGVfdmlld1sxXSwgYnl0ZV92aWV3WzJdLCBieXRlX3Zp
ZXdbM10sCisgICAgYnl0ZV92aWV3WzRdLCBieXRlX3ZpZXdbNV0sIGJ5dGVfdmlld1s2XSwgYnl0
ZV92aWV3WzddCisgIF07Cit9CisKK2Z1bmN0aW9uIHdhc21TMTI4Q29uc3QoZikgeworICAvLyBX
cml0ZSBpbiBsaXR0bGUtZW5kaWFuIG9yZGVyIGF0IG9mZnNldCAwLgorICByZXR1cm4gW2tTaW1k
UHJlZml4LCBrRXhwclMxMjhDb25zdCwgLi4uZl07Cit9CisKK2Z1bmN0aW9uIGdldE9wY29kZU5h
bWUob3Bjb2RlKSB7CisgIHJldHVybiBnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXM/LltvcGNv
ZGVdID8/ICd1bmtub3duJzsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS93YXNtLmpzb24g
Yi9KU1Rlc3RzL3dhc20vd2FzbS5qc29uCmluZGV4IDRmOGRkOWUzZDIxMzQzNTAwMDAwNmUyNDE0
NmIwMTk0YzlhYzg4ZjEuLjlkMjI1ZTRlODIyNDk2NjA0NDRmZjQxYWViYmEyN2M2NGM3NmVlZjEg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS93YXNtLmpzb24KKysrIGIvSlNUZXN0cy93YXNtL3dh
c20uanNvbgpAQCAtMjMsMzQgKzIzLDM4IEBACiAgICAgImJsb2NrX3R5cGUiOiBbImkzMiIsICJp
NjQiLCAiZjMyIiwgImY2NCIsICJ2b2lkIiwgImV4dGVybnJlZiIsICJmdW5jcmVmIl0sCiAgICAg
InJlZl90eXBlIjogWyJmdW5jcmVmIiwgImV4dGVybnJlZiIsICJ0eXBlX2lkeCJdLAogICAgICJl
eHRlcm5hbF9raW5kIjogewotICAgICAgICAiRnVuY3Rpb24iOiB7ICJ0eXBlIjogInVpbnQ4Iiwg
InZhbHVlIjogMCB9LAotICAgICAgICAiVGFibGUiOiAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZh
bHVlIjogMSB9LAotICAgICAgICAiTWVtb3J5IjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVl
IjogMiB9LAotICAgICAgICAiR2xvYmFsIjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjog
MyB9CisgICAgICAgICJGdW5jdGlvbiI6ICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAw
IH0sCisgICAgICAgICJUYWJsZSI6ICAgICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAx
IH0sCisgICAgICAgICJNZW1vcnkiOiAgICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAy
IH0sCisgICAgICAgICJHbG9iYWwiOiAgICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAz
IH0sCisgICAgICAgICJFeGNlcHRpb24iOiAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiA0
IH0KICAgICB9LAogICAgICJzZWN0aW9uIiA6IHsKLSAgICAgICAgIlR5cGUiOiAgICAgeyAidHlw
ZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAxLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gc2ln
bmF0dXJlIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAgIkltcG9ydCI6ICAgeyAidHlwZSI6ICJ2
YXJ1aW50NyIsICJ2YWx1ZSI6ICAyLCAiZGVzY3JpcHRpb24iOiAiSW1wb3J0IGRlY2xhcmF0aW9u
cyIgfSwKLSAgICAgICAgIkZ1bmN0aW9uIjogeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6
ICAzLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gZGVjbGFyYXRpb25zIiB9LAotICAgICAgICAi
VGFibGUiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDQsICJkZXNjcmlwdGlv
biI6ICJJbmRpcmVjdCBmdW5jdGlvbiB0YWJsZSBhbmQgb3RoZXIgdGFibGVzIiB9LAotICAgICAg
ICAiTWVtb3J5IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDUsICJkZXNjcmlw
dGlvbiI6ICJNZW1vcnkgYXR0cmlidXRlcyIgfSwKLSAgICAgICAgIkdsb2JhbCI6ICAgeyAidHlw
ZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA2LCAiZGVzY3JpcHRpb24iOiAiR2xvYmFsIGRlY2xh
cmF0aW9ucyIgfSwKLSAgICAgICAgIkV4cG9ydCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2
YWx1ZSI6ICA3LCAiZGVzY3JpcHRpb24iOiAiRXhwb3J0cyIgfSwKLSAgICAgICAgIlN0YXJ0Ijog
ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA4LCAiZGVzY3JpcHRpb24iOiAiU3Rh
cnQgZnVuY3Rpb24gZGVjbGFyYXRpb24iIH0sCi0gICAgICAgICJFbGVtZW50IjogIHsgInR5cGUi
OiAidmFydWludDciLCAidmFsdWUiOiAgOSwgImRlc2NyaXB0aW9uIjogIkVsZW1lbnRzIHNlY3Rp
b24iIH0sCi0gICAgICAgICJDb2RlIjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAxMCwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIGJvZGllcyAoY29kZSkiIH0sCi0gICAgICAg
ICJEYXRhIjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMSwgImRlc2NyaXB0
aW9uIjogIkRhdGEgc2VnbWVudHMiIH0KKyAgICAgICAgIlR5cGUiOiAgICAgIHsgInR5cGUiOiAi
dmFydWludDciLCAidmFsdWUiOiAgMSwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIHNpZ25hdHVy
ZSBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJJbXBvcnQiOiAgICB7ICJ0eXBlIjogInZhcnVp
bnQ3IiwgInZhbHVlIjogIDIsICJkZXNjcmlwdGlvbiI6ICJJbXBvcnQgZGVjbGFyYXRpb25zIiB9
LAorICAgICAgICAiRnVuY3Rpb24iOiAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAz
LCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gZGVjbGFyYXRpb25zIiB9LAorICAgICAgICAiVGFi
bGUiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA0LCAiZGVzY3JpcHRpb24i
OiAiSW5kaXJlY3QgZnVuY3Rpb24gdGFibGUgYW5kIG90aGVyIHRhYmxlcyIgfSwKKyAgICAgICAg
Ik1lbW9yeSI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNSwgImRlc2NyaXB0
aW9uIjogIk1lbW9yeSBhdHRyaWJ1dGVzIiB9LAorICAgICAgICAiRXhjZXB0aW9uIjogeyAidHlw
ZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEzLCAiZGVzY3JpcHRpb24iOiAiRXhjZXB0aW9uIGRl
Y2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIkdsb2JhbCI6ICAgIHsgInR5cGUiOiAidmFydWludDci
LCAidmFsdWUiOiAgNiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlvbnMiIH0sCisg
ICAgICAgICJFeHBvcnQiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDcsICJk
ZXNjcmlwdGlvbiI6ICJFeHBvcnRzIiB9LAorICAgICAgICAiU3RhcnQiOiAgICAgeyAidHlwZSI6
ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA4LCAiZGVzY3JpcHRpb24iOiAiU3RhcnQgZnVuY3Rpb24g
ZGVjbGFyYXRpb24iIH0sCisgICAgICAgICJFbGVtZW50IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3
IiwgInZhbHVlIjogIDksICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9uIiB9LAorICAg
ICAgICAiQ29kZSI6ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEwLCAiZGVz
Y3JpcHRpb24iOiAiRnVuY3Rpb24gYm9kaWVzIChjb2RlKSIgfSwKKyAgICAgICAgIkRhdGEiOiAg
ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMSwgImRlc2NyaXB0aW9uIjogIkRh
dGEgc2VnbWVudHMiIH0sCisgICAgICAgICJEYXRhQ291bnQiOiB7ICJ0eXBlIjogInZhcnVpbnQ3
IiwgInZhbHVlIjogMTIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgZGF0YSBzZWdtZW50cyIg
fQogICAgIH0sCiAgICAgIm9wY29kZSI6IHsKICAgICAgICAgInVucmVhY2hhYmxlIjogICAgICAg
ICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAwLCAicmV0dXJuIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0cmFwIGltbWVkaWF0ZWx5IiB9LAorICAgICAg
ICAibm9wIjogICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFs
dWUiOiAgIDEsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBh
cmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIm5vIG9w
ZXJhdGlvbiIgfSwKICAgICAgICAgImJsb2NrIjogICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6
ICJjb250cm9sIiwgICAgInZhbHVlIjogICAyLCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAg
ICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJiZWdpbiBhIHNlcXVlbmNlIG9mIGV4cHJlc3Npb25zLCB5aWVsZGluZyAw
IG9yIDEgdmFsdWVzIiB9LAogICAgICAgICAibG9vcCI6ICAgICAgICAgICAgICAgIHsgImNhdGVn
b3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDMsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwg
ICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlw
ZSJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGEgYmxvY2sgd2hpY2ggY2FuIGFsc28gZm9ybSBjb250
cm9sIGZsb3cgbG9vcHMiIH0sCiAgICAgICAgICJpZiI6ICAgICAgICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNCwgInJldHVybiI6IFsiY29udHJvbCJd
LCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJib29sIl0sICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190
eXBlIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gaWYgZXhwcmVzc2lvbiIgfSwKICAgICAgICAgImVs
c2UiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjog
ICA1LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0
ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBlbHNl
IGV4cHJlc3Npb24gb2YgaWYiIH0sCi0gICAgICAgICJzZWxlY3QiOiAgICAgICAgICAgICAgeyAi
Y2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNywgInJldHVybiI6IFsicHJldiJd
LCAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJi
b29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAic2VsZWN0IG9uZSBvZiB0d28gdmFsdWVzIGJhc2VkIG9u
IGNvbmRpdGlvbiIgfSwKLSAgICAgICAgImFubm90YXRlZF9zZWxlY3QiOiAgICB7ICJjYXRlZ29y
eSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI4LCAicmV0dXJuIjogWyJwcmV2Il0sICAgICAg
ICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wiXSwg
ICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInRhcmdldF90eXBlc19jb3VudCIsICJ0eXBl
IjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFyZ2V0IHR5cGVzIHZl
Y3RvciJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7Im5hbWUiOiAidGFyZ2V0X3R5cGVzIiwgICAgICAgInR5cGUiOiAidmFs
dWVfdHlwZSoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogInRhcmdldCB0eXBlcyB0aGF0IGluZGljYXRlIHJlc3VsdCBvZiBzZWxlY3QgaW5z
dHJ1Y3Rpb24ifV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAidGhlIHNhbWUgYXMganVzdCBzZWxlY3QgYnV0IHdpdGggdGhlIGFubm90
YXRpb24gZm9yIHJlc3VsdCB0eXBlcyIgfSwKKyAgICAgICAgInRyeSI6ICAgICAgICAgICAgICAg
ICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA2LCAicmV0dXJuIjogWyJj
b250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjog
ImJsb2NrX3R5cGUifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiB0cnkgZXhwcmVzc2lvbiIgfSwKKyAg
ICAgICAgImNhdGNoIjogICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAg
InZhbHVlIjogICA3LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAg
ICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUi
OiBbeyJuYW1lIjogImV4biIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJi
ZWdpbiBjYXRjaCBleHByZXNzaW9uIG9mIHRyeSIgfSwKKyAgICAgICAgInRocm93IjogICAgICAg
ICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA4LCAicmV0dXJu
IjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImV4biIsICJ0
eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aHJvdyBleGNlcHRpb24iIH0sCisg
ICAgICAgICJyZXRocm93IjogICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAg
ICJ2YWx1ZSI6ICAgOSwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAg
ICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRl
IjogW3sibmFtZSI6ICJyZWxhdGl2ZV9kZXB0aCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
cmV0aHJvdyB0aGUgZXhjZXB0aW9uIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIiB9LAogICAgICAg
ICAiYnIiOiAgICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFs
dWUiOiAgMTIsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBh
cmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7
Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJyZWFr
IHRoYXQgdGFyZ2V0cyBhbiBvdXRlciBuZXN0ZWQgYmxvY2siIH0sCiAgICAgICAgICJicl9pZiI6
ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMywg
InJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJy
ZWxhdGl2ZV9kZXB0aCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiY29uZGl0aW9uYWwgYnJl
YWsgdGhhdCB0YXJnZXRzIGFuIG91dGVyIG5lc3RlZCBibG9jayIgfSwKICAgICAgICAgImJyX3Rh
YmxlIjogICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDE0
LCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIi
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjog
InRhcmdldF9jb3VudCIsICAgInR5cGUiOiAidmFydWludDMyIiwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJudW1iZXIgb2YgZW50
cmllcyBpbiB0aGUgdGFyZ2V0X3RhYmxlIn0sCkBAIC01OCw4ICs2MiwxMyBAQAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Im5h
bWUiOiAiZGVmYXVsdF90YXJnZXQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImFuIG91dGVy
IGJsb2NrIG9yIGxvb3AgdG8gd2hpY2ggdG8gYnJlYWsgaW4gdGhlIGRlZmF1bHQgY2FzZSJ9XSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJicmFuY2ggdGFibGUgY29udHJvbCBmbG93IGNvbnN0cnVjdCIgfSwKICAgICAgICAgInJldHVy
biI6ICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDE1
LCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIi
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJyZXR1cm4gemVybyBv
ciBvbmUgdmFsdWUgZnJvbSB0aGlzIGZ1bmN0aW9uIiB9LAorICAgICAgICAiZGVsZWdhdGUiOiAg
ICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjQsICJyZXR1
cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRp
dmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImRlbGVnYXRlIHRvIGEgcGFyZW50
IHRyeSBibG9jayIgfSwKKyAgICAgICAgImNhdGNoX2FsbCI6ICAgICAgICAgICB7ICJjYXRlZ29y
eSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI1LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAg
ICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJjYXRjaCBleGNlcHRpb25zIHJlZ2FyZGxlc3Mgb2YgdGFnIiB9LAog
ICAgICAgICAiZHJvcCI6ICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAg
ICAidmFsdWUiOiAgMjYsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInBhcmFtZXRlciI6IFsiYW55Il0sICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0
ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
Imlnbm9yZSB2YWx1ZSIgfSwKLSAgICAgICAgIm5vcCI6ICAgICAgICAgICAgICAgICB7ICJjYXRl
Z29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAxLCAicmV0dXJuIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJubyBvcGVyYXRpb24iIH0sCisgICAgICAgICJzZWxlY3QiOiAg
ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNywgInJl
dHVybiI6IFsicHJldiJdLCAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJh
bnkiLCAicHJldiIsICJib29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAic2VsZWN0IG9uZSBvZiB0d28g
dmFsdWVzIGJhc2VkIG9uIGNvbmRpdGlvbiIgfSwKKyAgICAgICAgImFubm90YXRlZF9zZWxlY3Qi
OiAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI4LCAicmV0dXJuIjog
WyJwcmV2Il0sICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJw
cmV2IiwgImJvb2wiXSwgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInRhcmdldF90eXBl
c19jb3VudCIsICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJudW1iZXIgb2YgZW50cmllcyBpbiB0aGUg
dGFyZ2V0IHR5cGVzIHZlY3RvciJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Im5hbWUiOiAidGFyZ2V0X3R5cGVzIiwgICAg
ICAgInR5cGUiOiAidmFsdWVfdHlwZSoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogInRhcmdldCB0eXBlcyB0aGF0IGluZGljYXRlIHJlc3Vs
dCBvZiBzZWxlY3QgaW5zdHJ1Y3Rpb24ifV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIHNhbWUgYXMganVzdCBzZWxlY3QgYnV0
IHdpdGggdGhlIGFubm90YXRpb24gZm9yIHJlc3VsdCB0eXBlcyIgfSwKICAgICAgICAgImVuZCI6
ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDEx
LCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIi
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJlbmQgYSBibG9jaywg
bG9vcCwgb3IgaWYiIH0sCiAgICAgICAgICJpMzIuY29uc3QiOiAgICAgICAgICAgeyAiY2F0ZWdv
cnkiOiAic3BlY2lhbCIsICAgICJ2YWx1ZSI6ICA2NSwgInJldHVybiI6IFsiaTMyIl0sICAgICAg
ICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ2YWx1ZSIsICAgICAgICAgICJ0eXBlIjog
InZhcmludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiYSBjb25zdGFudCB2YWx1ZSBpbnRlcnByZXRlZCBhcyBpMzIiIH0s
CiAgICAgICAgICJpNjQuY29uc3QiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAic3BlY2lhbCIs
ICAgICJ2YWx1ZSI6ICA2NiwgInJldHVybiI6IFsiaTY0Il0sICAgICAgICAgICAgICAgICAgICAg
ICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRp
YXRlIjogW3sibmFtZSI6ICJ2YWx1ZSIsICAgICAgICAgICJ0eXBlIjogInZhcmludDY0In1dLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiYSBjb25zdGFudCB2YWx1ZSBpbnRlcnByZXRlZCBhcyBpNjQiIH0sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440337</attachid>
            <date>2021-10-05 23:49:40 -0700</date>
            <delta_ts>2021-10-06 08:07:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229681-20211005234939.patch</filename>
            <type>text/plain</type>
            <size>708878</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
NGU1OWUzOWY3NjlmYjQ1YzFmMTkyMzNjN2M3NjZhNjAwMzViZDg4Li5jNmVlY2Y5ZmJmN2ZkNzhl
NTEzOTA5MDlkMmEwYWFjNDVkODNhNTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NTAgQEAKKzIwMjEtMDktMTYgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+IGFuZCBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCB0aGUgV2ViQXNzZW1ibHkgZXhjZXB0aW9uIGhhbmRsaW5nIHByb3Bvc2FsCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk2ODEKKyAg
ICAgICAgPHJkYXI6Ly84MTYwMzM4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlv
biBoYW5kbGluZyBwcm9wb3NhbCwgYXMgcGVyCisgICAgICAgIHRoZSBXSVAgc3BlYzogaHR0cHM6
Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2V4Y2VwdGlvbi1oYW5kbGluZworCisgICAgICAgIFRo
ZSBwcm9wb3NhbCBpbmNsdWRlcyA2IG5ldyBpbnN0cnVjdGlvbnM6IHRyeSwgY2F0Y2gsIGNhdGNo
X2FsbCwKKyAgICAgICAgZGVsZWdhdGUsIHRocm93IGFuZCByZXRocm93LiBBbGwgdGhlIGluc3Ry
dWN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5CisgICAgICAgIHRoZSBMTEludCBhbmQgQjMgZ2VuZXJh
dG9ycywgYnV0IG5vdCB5ZXQgc3VwcG9ydGVkIGluIEFpci4gQW55CisgICAgICAgIGZ1bmN0aW9u
cyB1c2UgZXhjZXB0aW9ucyB3aWxsIHVzZSBCMyBpbiBCQlEuCisKKyAgICAgICAgQSBmZXcgaW1w
b3J0YW50IG5vdGVzIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgLSBJbiBCMywg
c2luY2Ugd2UgY2FuIG5vdyBoYXZlIG11bHRpcGxlIGVudHJ5cG9pbnRzIChvbmUgZm9yIHRoZQor
ICAgICAgICBmdW5jdGlvbiBlbnRyeSArIDEgZm9yIGVhY2ggY2F0Y2gvY2F0Y2hfYWxsKSwgd2Ug
Y2FuIG5vIGxvbmdlciBqdXN0CisgICAgICAgIHJlcGxhY2UgZXZlcnkgdmFsdWUgaW4gdGhlIHN0
YWNrIHdpdGggYSBQaGkgd2hlbiB3ZSBmaW5kIGEgbmV3CisgICAgICAgIGVudHJ5cG9pbnQuIFRo
aXMgd29ya2VkIHNvIGZhciBiZWNhdXNlIG9mIHRoZSBhc3N1bXB0aW9uIHRoYXQgYW55CisgICAg
ICAgIGJsb2NrIGNvdWxkbid0IGFjY2VzcyBpdHMgZW5jbG9zaW5nIHN0YWNrLCBhbmQgc2luY2Ug
dGhlIGVuY2xvc2luZyBzdGFjaworICAgICAgICB3b3VsZCBvbmx5IGJlIGFjY2Vzc2libGUgd2hl
biB3ZSBleGl0ZWQgdGhlIGN1cnJlbnQgYmxvY2ssIHdlIGFkZGVkIFBoaXMKKyAgICAgICAgYXQg
dGhlIGVuZCBvZiBlYWNoIGJsb2NrIHdoZW4gd2UgaGFkIGEgbmV3IGVudHJ5cG9pbnQuIE5vdywg
c2luY2Ugd2UgaGF2ZSB0byBjYXB0dXJlIGFsbAorICAgICAgICBsaXZlIHZhbHVlcyBhdCBhbnkg
cG9pbnQgdGhhdCBtaWdodCB0aHJvdyAoY2FsbHMsIHRocm93IGFuZCByZXRocm93KSwKKyAgICAg
ICAgd2UgYnJlYWsgdGhhdCBhc3N1bXB0aW9uLiBUbyBzaW1wbGlmeSBhbGwgdGhlIHBvc3NpYmxl
IHdheXMgd2UgbWlnaHQKKyAgICAgICAgaGF2ZSB0byBtZXJnZSB0aGUgc3RhdGUgZnJvbSBtdWx0
aXBsZSBlbnRyeXBvaW50cyB3ZSBub3cgdXNlIEIzCisgICAgICAgIFZhcmlhYmxlcyB0byByZXBy
ZXNlbnQgc3RhY2sgc2xvdHMuCisgICAgICAgIC0gU29tZSBleHRyYSBpbmZvcm1hdGlvbiBpcyBy
ZXF1aXJlZCB0byBiZSBhYmxlIHRvIHByb3Blcmx5IHJlc3RvcmUKKyAgICAgICAgdGhlIHN0YXRl
IHdoZW4gY2F0Y2hpbmcgYW4gZXhjZXB0aW9uOgorICAgICAgICAgICAgLSBXZSBhZGRlZCBhIGZp
ZWxkIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2guIFRoaXMgZmllbGQgaXMgbmVjZXNzYXJ5CisgICAg
ICAgICAgICBiZWNhdXNlIHdoZW5ldmVyIHdlIHRocm93LCB3ZSBtaWdodCBlbmQgdXAgaW4gSmF2
YVNjcmlwdCwgd2hpY2gKKyAgICAgICAgICAgIGFzc3VtZXMgdGhlIGNhbGxlZSBpcyBhIGNlbGwg
YW5kIHVzZXMgaXQgdG8gZ2V0IHRoZSBWTSBhbmQgcmVzdG9yZQorICAgICAgICAgICAgY2FsbGVl
IHNhdmVzLiBUaGUgaXNzdWUgaXMgd2hlbiBjYXRjaGluZyBleGNlcHRpb25zIGluIHdhc20gd2UK
KyAgICAgICAgICAgIHN0aWxsIG5lZWQgdGhlIG9yaWdpbmFsIGNhbGxlZSwgYW5kIGlmIHRocm93
aW5nIGFuZCBjYXRjaGluZyBmcm9tCisgICAgICAgICAgICB0aGUgc2FtZSBmcmFtZSwgdGhhdCBj
YWxsIGZyYW1lIHNsb3QgaGFzIG5vdyBiZWVuIG92ZXJ3cml0dGVuLCBzbworICAgICAgICAgICAg
d2Ugc3RvcmUgaXRzIG9yaWdpbmFsIHZhbHVlIGluIHRoZSBWTSBmaWVsZC4KKyAgICAgICAgICAg
IC0gV2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZSBjdXJyZW50IFdhc20gSW5zdGFuY2UgaW50byB0
aGUgY2FsbAorICAgICAgICAgICAgZnJhbWUncyBzbG90IGZvciB0aGUgYHRoaXNgIGFyZ3VtZW50
LiBUaGUgaW5zdGFuY2UgaXMgdXNlZCBib3RoIGJ5CisgICAgICAgICAgICB0aGUgdW53aW5kZXIs
IHRvIGNoZWNrIGlmIHRoZSBleGNlcHRpb24gYmVpbmcgdGhyb3duIG1hdGNoZXMgdGhlCisgICAg
ICAgICAgICBleGNlcHRpb25zIGhhbmRsZWQgYnkgY2F0Y2ggY2FuZGlkYXRlcywgYW5kIGJ5IHRo
ZSBjYXRjaCBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgICAgIHdoaWNoIGlzIG5lY2Vzc2FyeSB3
aGVuIHRocm93aW5nIGZyb20gYSBjcm9zcyBpbnN0YW5jZSBjYWxsIHdoZXJlIGJvdGgKKyAgICAg
ICAgICAgIHRoZSBjYWxsZWUgc2F2ZSBvciBUTFMgd2lsbCBoYXZlIHRoZSBjYWxsZWUncyBpbnN0
YW5jZS4KKyAgICAgICAgICAgIC0gV2Ugc3RvcmUgdGhlIGN1cnJlbnQgb3Bjb2RlIGZvciB0aGUg
bGxpbnQsIG9yIHRoZQorICAgICAgICAgICAgY2FsbCBzaXRlIGluZGV4IGZvciBCMywgaW4gdGhl
IGNhbGwgZnJhbWUgc2xvdCBmb3IgdGhlIGFyZ3VtZW50CisgICAgICAgICAgICBjb3VudCB0YWcu
IFRoZSBjYWxsIHNpdGUgaW5kZXggaXMgdXNlZCBieSB0aGUgdW53aW5kZXIgdG8gY2hlY2sKKyAg
ICAgICAgICAgIGlmIGEgZ2l2ZW4gY2F0Y2ggY2FuIGhhbmRsZSB0aGUgZXhjZXB0aW9uIGJlaW5n
IHRocm93bi4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6Cisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9IYW5kbGVySW5mby5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6OkJhc2VJbnN0cnVj
dGlvbjo6bmFtZSBjb25zdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Omhhc2ggY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpkZWxldGVkVmFsdWUpOgorICAgICAgICAo
SlNDOjpDYWxsU2l0ZUluZGV4Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXhIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6Q2FsbFNp
dGVJbmRleEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkNhdGNoSW5mbzo6Q2F0Y2hJbmZvKToKKyAgICAgICAgKEpTQzo6
VW53aW5kRnVuY3Rvcjo6VW53aW5kRnVuY3Rvcik6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0
b3I6Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5k
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpD
YXRjaEluZm86OkNhdGNoSW5mbyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKToK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBq
aXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAg
ICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJ
VDo6Y29udmVydENhbGxlZVRvVk0pOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5oOgorICAg
ICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZVJlZik6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRX
aWRlMTZDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldFdpZGUzMkNvZGVSZWYpOgor
ICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50
Ojp3YXNtUmV0dXJuVG9UaHJvdyk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVXYXNtQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlV2FzbUNhdGNoQWxsKToKKyAgICAgICAg
KiBsbGludC9MTEludEV4Y2VwdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludE9mZnNldHNF
eHRyYWN0b3IuY3BwOgorICAgICAgICAqIGxsaW50L1dlYkFzc2VtYmx5LmFzbToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNl
OjpFcnJvckluc3RhbmNlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c2V0Q2F0Y2hhYmxlRnJvbVdhc20pOgorICAgICAg
ICAoSlNDOjpFcnJvckluc3RhbmNlOjppc0NhdGNoYWJsZUZyb21XYXNtIGNvbnN0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmNhbGxlZUZvcldhc21DYXRjaE9mZnNldCk6Cisg
ICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzVHJ5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0FueUNhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzQmxvY2spOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6Q29udHJvbERhdGEpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNUcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNBbnlDYXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpDb250cm9sRGF0YTo6aXNCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2gpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2hBbGwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6dHJ5U3Rh
cnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6dHJ5RW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGE6OnRyeURlcHRoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmNhdGNoS2luZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpleGNlcHRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6c3RhY2tTaXplIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZGlkUG9wVmFsdWVGcm9tU3RhY2sp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRTdGFja01hcCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnRha2VTdGFja21hcHMpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjp0YWtlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpwdXNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
c2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Z2Vu
ZXJhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpmaXh1cFBv
aW50ZXJQbHVzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnJlc3RvcmVX
ZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6aW5zZXJ0RW50cnlTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjppbnNlcnRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRSZWZJc051bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUYWJs
ZUdldCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkUmVmRnVuYyk6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlSW5pdCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRhYmxlQ29weSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6Omdl
dExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0
Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5RmlsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUluaXQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlDb3B5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpnZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpzZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hl
Y2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmVtaXRMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpzdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OnNhbml0aXplQXRvbWljUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNMb2FkT3ApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNMb2FkKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY1N0b3JlT3ApOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNTdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNCaW5hcnlSTVdPcCk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmF0b21pY0JpbmFyeVJNVyk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YXRvbWljTm90aWZ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6dHJ1bmNTYXR1cmF0ZWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRTZWxlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRMb29w
VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkRnJv
bVNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjb25u
ZWN0Q29udHJvbEVudHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
TG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNo
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRG
b3JFeGNlcHRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0
Y2hUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
Q2F0Y2hBbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYXRjaEFs
bFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0
Q2F0Y2hJbXBsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdh
dGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5y
ZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUaHJvdyk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbmRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEVuZFRv
VW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjcmVhdGVD
YWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENh
bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayk6CisgICAgICAgIChKU0M6Oldh
c206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVFeGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
ZW1pdENoZWNrc0Zvck1vZE9yRGl2KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1VPik6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4pOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0ej4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0
ej4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRP
cDxGNjRDb252ZXJ0VUk2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNT
RjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyVHJ1bmNTRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyVHJ1bmNVRjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0Pik6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0Pik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMy
Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNVRjMyPik6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAg
ICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpw
cmVwYXJlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBs
YW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpDYWxsZWU6OmhhbmRsZXJGb3JJbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2Fs
bGVlOjpMTEludENhbGxlZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2FsbGVlOjpsaW5r
RXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6aW5nSklUQ2Fs
bGVlOjpsaW5rRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6
aW5nSklUQ2FsbGVlOjpzdGFja21hcCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVl
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6aGFzRXhjZXB0aW9uSGFuZGxlcnMgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmZ1bmN0aW9uQ29kZUJsb2NrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6T3B0aW1pemluZ0pJVENhbGxlZTo6T3B0aW1pemluZ0pJ
VENhbGxlZSk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V2FzbUNhbGxpbmdDb252ZW50aW9uOjpjYWxsSW5mb3JtYXRpb25Gb3Ig
Y29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0eXBlVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjppc1ZhbGlkRXh0ZXJuYWxLaW5k
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVN0cmluZyk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxv
Y2s6Om51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpGdW5jdGlvbkNvZGVCbG9jazo6ZXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uQ29kZUJsb2NrOjphZGRFeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKiB3
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjppc1RyeU9yQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eGNlcHRpb25JbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20v
V2FzbUhhbmRsZXJJbmZvLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkhhbmRsZXJJ
bmZvOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmhhbmRs
ZXJGb3JJbmRleCk6CisgICAgICAgICogd2FzbS9XYXNtSGFuZGxlckluZm8uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlVubGlua2VkSGFuZGxlckluZm86OlVubGlua2VkSGFuZGxlcklu
Zm8pOgorICAgICAgICAoSlNDOjpXYXNtOjpIYW5kbGVySW5mbzo6dGFnIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmRlbGVnYXRlVGFyZ2V0IGNvbnN0KToKKyAgICAg
ICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojp+SW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmg6CisgICAgICAgIChK
U0M6Oldhc206Okluc3RhbmNlOjphZGRUYWcpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5j
ZTo6dGFnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6dHJ5Xyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6Y2F0Y2hfKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc0xvb3Ap
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmlzQmxv
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
SWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
VHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpp
c0FueUNhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xU
eXBlOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnVuaWZ5
VmFsdWVzV2l0aEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6Ondh
bGtFeHByZXNzaW9uU3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
bWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJz
ZUFuZENvbXBpbGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpMTEludEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpy
ZXBhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNh
bGxlcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRp
b25Gb3JDYWxsZWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZExvb3ApOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21MaW1pdHMuaDoKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5m
b3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmV4Y2Vw
dGlvbkluZGV4U3BhY2VTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb246OmlzSW1wb3J0ZWRFeGNlcHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25z
dCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpzaWduYXR1cmVJbmRl
eEZyb21FeGNlcHRpb25JbmRleFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlSW5mb3JtYXRpb246OmltcG9ydEV4Y2VwdGlvbkNvdW50IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmlzRGVjbGFyZWRFeGNlcHRpb24gY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6YWRkRGVjbGFyZWRFeGNlcHRp
b24pOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9X
YXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAqIHdhc20vV2FzbU9TUkVudHJ5RGF0YS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpPU1JF
bnRyeURhdGE6OnZhbHVlcyk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OmxvYWRWYWx1ZXNJbnRvQnVmZmVyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6ZG9PU1JFbnRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTik6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHdh
c20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFy
c2VyOjpwYXJzZUltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBh
cnNlRXhwb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFeGNl
cHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25zLmg6CisgICAgICAgIChKU0M6Oldh
c206OnZhbGlkYXRlT3JkZXIpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWduYXR1cmVJbmZvcm1h
dGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpzaWduYXR1
cmVGb3IpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpXQVNNX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0
aHMuaDoKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rpb25TaXplKToKKyAgICAg
ICAgKiB3YXNtL1dhc21UYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9XYXNt
VGFnLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdl
bmVyYXRvci5oLgorICAgICAgICAoSlNDOjpXYXNtOjpUYWc6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6Oldhc206OlRhZzo6cGFyYW1ldGVyQ291bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUYWc6OnBhcmFtZXRlciBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6c2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6VGFnOjpUYWcpOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5jcHA6CisgICAg
ICAgICogd2FzbS9XYXNtVGh1bmtzLmg6CisgICAgICAgICogd2FzbS9nZW5lcmF0ZVdhc21CM0lS
R2VuZXJhdG9ySW5saW5lc0hlYWRlci5weToKKyAgICAgICAgKENvZGVHZW5lcmF0b3IuZ2VuZXJh
dGVPcGNvZGUpOgorICAgICAgICAoQ29kZUdlbmVyYXRvci5tYWtlUmVzdWx0KToKKyAgICAgICAg
KENvZGVHZW5lcmF0b3IuZ2VuZXJhdGUpOgorICAgICAgICAqIHdhc20vZ2VuZXJhdGVXYXNtT3Bz
SGVhZGVyLnB5OgorICAgICAgICAodHlwZU1hY3JvaXplcik6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6SlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRp
b246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlv
bjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Z2V0
QXJnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnN1YnNwYWNlRm9y
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6dGFnIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6cGF5bG9hZCBjb25zdCk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjp0b0pTVmFsdWUpOgor
ICAgICAgICAoSlNDOjpmcm9tSlNWYWx1ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRy
eUNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwOgorICAgICAgICAo
SlNDOjpjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKToKKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eVRhZzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6SlNXZWJBc3NlbWJseVRh
Zyk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaC4K
KyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2Fz
bVRvSlMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3I6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAg
ICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OmdldEV4Y2VwdGlv
bik6CisgICAgICAgIChKU0M6OmdldFRhZyk6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1
Y3Rvcjo6Y3JlYXRlVGFnKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
OjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlUYWdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFnUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpnZXRUYWcp
OgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAq
IHdhc20vd2FzbS5qc29uOgorCiAyMDIxLTEwLTA1ICBQYXRyaWNrIEFuZ2xlICA8cGFuZ2xlQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTaG93IGNvbG9yIHNwYWNlIGZvciBj
YW52YXNlcyBpbiB0aGUgR3JhcGhpY3MgdGFiIG9uIHRoZSBvdmVydmlldyBjYXJkcwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGY0YWM2OGM5MjY4ZWQyYjIxZDQ5MTNlZWY0
NDVhYjhiOGVmN2NhM2QuLjU0Y2QyM2VjMjY0ZDE4ZjQ3ZDI1ODBkN2U3MWMxYTUxM2MzZDMyYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTYwMyw2ICs2MDMsNyBAQCBz
ZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgYjMvQjND
b21tb24uaAogICAgIGIzL0IzVHlwZS5oCisgICAgYjMvQjNWYWx1ZVJlcC5oCiAKICAgICBiaW5k
aW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuaAogICAgIGJpbmRpbmdzL1NjcmlwdE9iamVjdC5oCkBA
IC0xMjE4LDYgKzEyMTksNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogICAgIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCiAgICAgd2FzbS9XYXNt
Rm9ybWF0LmgKICAgICB3YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCisgICAgd2FzbS9XYXNt
SGFuZGxlckluZm8uaAogICAgIHdhc20vV2FzbUluZGV4T3JOYW1lLmgKICAgICB3YXNtL1dhc21M
TEludFRpZXJVcENvdW50ZXIuaAogICAgIHdhc20vV2FzbU1lbW9yeS5oCkBAIC0xMjI2LDEyICsx
MjI4LDE0IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgd2FzbS9XYXNtTW9kdWxlLmgKICAgICB3YXNtL1dhc21OYW1lLmgKICAgICB3YXNtL1dhc21O
YW1lU2VjdGlvbi5oCisgICAgd2FzbS9XYXNtT1NSRW50cnlEYXRhLmgKICAgICB3YXNtL1dhc21Q
YWdlQ291bnQuaAogICAgIHdhc20vV2FzbVNlY3Rpb25zLmgKICAgICB3YXNtL1dhc21TaWduYXR1
cmUuaAogICAgIHdhc20vV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmgKICAgICB3YXNtL1dhc21TdHJl
YW1pbmdQYXJzZXIuaAogICAgIHdhc20vV2FzbVRpZXJVcENvdW50LmgKKyAgICB3YXNtL1dhc21W
YWx1ZUxvY2F0aW9uLmgKIAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseS5oCiAgICAgd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggMjg4NWI1MTAxN2NjMWFlM2Q4
OTJlZjNjNWYyN2E0YjEyMzc1Mzg0Mi4uMDZiMjE3NTEyYzZmYmMyZDg1MjcyNGFhYTc2ZmE1Nzk0
ZTNkYWQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2Vz
LWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTE5Nyw2ICsxOTcsOCBAQCAkKFBST0pFQ1RfRElSKS93
YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5LmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVF
cnJvckNvbnN0cnVjdG9yLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseUNv
bXBpbGVFcnJvclByb3RvdHlwZS5jcHAKKyQoUFJPSkVDVF9ESVIpL3dhc20vanMvV2ViQXNzZW1i
bHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAKKyQoUFJPSkVDVF9ESVIpL3dhc20vanMvV2ViQXNz
ZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFz
c2VtYmx5R2xvYmFsQ29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFz
c2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0yMTEsNiArMjEzLDggQEAgJChQUk9KRUNU
X0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmNwcAogJChQ
Uk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5jcHAK
ICQoUFJPSkVDVF9ESVIpL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAog
JChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAorJChQ
Uk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcAorJChQUk9K
RUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAKICQoUFJPSkVDVF9E
SVIpL3dhc20vd2FzbS5qc29uCiAkKFBST0pFQ1RfRElSKS95YXJyL2NyZWF0ZV9yZWdleF90YWJs
ZXMKICQoUFJPSkVDVF9ESVIpL3lhcnIvZ2VuZXJhdGVZYXJyQ2Fub25pY2FsaXplVW5pY29kZQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54
Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54
Y2ZpbGVsaXN0CmluZGV4IDJhZDIxMzFjNTg2NjliZDA1NzVjN2FmNDBhNmM0MjdhNTk0ZjVjM2Uu
LmNiMDVkODIxNjJhZDljNGNmZjY0Y2ExOGNhZWFlMTg3MWJlYzZmNjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QK
QEAgLTgyLDYgKzgyLDggQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0ph
dmFTY3JpcHRDb3JlL1dhc21MTEludEdlbmVyYXRvcklubGluZXMuaAogJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dhc21PcHMuaAogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5Q29t
cGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5s
dXQuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3Jl
L1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IubHV0LmgKKyQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseUV4Y2VwdGlvblBy
b3RvdHlwZS5sdXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFT
Y3JpcHRDb3JlL1dlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0b3IubHV0LmgKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseUdsb2Jh
bFByb3RvdHlwZS5sdXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0ph
dmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5sdXQuaApAQCAtOTYs
NiArOTgsOCBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlw
dENvcmUvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5UnVudGltZUVycm9yUHJv
dG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNj
cmlwdENvcmUvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5oCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlUYWJsZVBy
b3RvdHlwZS5sdXQuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFT
Y3JpcHRDb3JlL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IubHV0LmgKKyQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVRhZ1Byb3Rv
dHlwZS5sdXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpp
bmRleCBlY2JjZTY3Zjc4YzAwMzRjMTY2ZjUwZDU4OTJhNmYwOGM1ZGE0MGQ2Li43ODk3NTZmMTBm
OGJkYjgwYzUyZjRiZTk4MGY1M2Y0OTJhMmQxZDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjAzLDYgKzIwMyw4IEBAIE9CSkVDVF9MVVRfSEVBREVS
UyA9IFwKICAgICBUZW1wb3JhbFRpbWVab25lUHJvdG90eXBlLmx1dC5oIFwKICAgICBXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBXZWJBc3NlbWJseUNvbXBp
bGVFcnJvclByb3RvdHlwZS5sdXQuaCBcCisgICAgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1
Y3Rvci5sdXQuaCBcCisgICAgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUubHV0LmggXAog
ICAgIFdlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0b3IubHV0LmggXAogICAgIFdlYkFzc2VtYmx5
R2xvYmFsUHJvdG90eXBlLmx1dC5oIFwKICAgICBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0
b3IubHV0LmggXApAQCAtMjE3LDYgKzIxOSw4IEBAIE9CSkVDVF9MVVRfSEVBREVSUyA9IFwKICAg
ICBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5sdXQuaCBcCiAgICAgV2ViQXNzZW1i
bHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBl
Lmx1dC5oIFwKKyAgICBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBXZWJB
c3NlbWJseVRhZ1Byb3RvdHlwZS5sdXQuaCBcCiAjCiAKICQoT0JKRUNUX0xVVF9IRUFERVJTKTog
JS5sdXQuaCA6ICUuY3BwICQoSmF2YVNjcmlwdENvcmUpL2NyZWF0ZV9oYXNoX3RhYmxlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGNkOTgwZmY0YzEwYzYyNmU5NTgyZTcyM2ZhZjI4
MDE0ZGRkZWQ3ZDMuLmZhNDUwOTI0ZmY3MGU5MWYyODU0NzE0NmZkMzc3ZDEzYTE4ZGUwMTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NjMsNyArNjYzLDcgQEAKIAkJMEZFQzg1
NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNV
c2VDb3VudHMuaCAqLzsgfTsKIAkJMEZFQzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi87IH07CiAJCTBGRUM4NTQ0MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICov
OyB9OwotCQkwRkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLzsgfTsKKwkJMEZFQzg1NDcxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQzg1NkUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTQ5MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmggKi87IH07CiAJCTBGRUM4
NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcu
aCAqLzsgfTsKIAkJMEZFQzg1NzIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTREMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi87IH07CkBAIC03OTYsNiArNzk2LDcg
QEAKIAkJMTQ3ODI5N0IxMzc5RThBODAwQTdDMkEzIC8qIEhhbmRsZVR5cGVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDZGQTVBODEzNzhGNkIwMDAz
NjI3QTMgLyogSGFuZGxlVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5z
aXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGlt
aXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0N0I4NDYyMEU2REU2QjEwMDQ3
NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkxNDg1MjFEODI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRs
ZXJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDg1MjFENzI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4NkE4QzAyNEFCRUQ0ODAw
NzM5MjJEIC8qIEpTTG9ja1JlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODZBOEJGMjRBQkVEM0MwMDczOTIyRCAvKiBKU0xvY2tSZWZQ
cml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMTQ4NzRBRTYxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODc0QUUyMTVFQkRFNEEwMDJFMzU4NyAv
KiBKU1Njb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTQ4QTdCRjAxQjgyOTc1QTAwMkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4QTdCRUUxQjgyOTc1
QTAwMkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04MjcsNiArODI4LDEzIEBACiAJCTE0Q0E5NThCMTZB
QjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNENBOTU4QTE2QUI1MERFMDA5MzhBMDYg
LyogU3RhdGljUHJvcGVydHlBbmFseXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0Q0E5NThEMTZBQjUwRkEwMDkzOEEwNiAvKiBPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTRDQTk1OEMxNkFCNTBGQTAwOTM4QTA2IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MTREMDFBNzcyMUZCMzUxRjAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQTc2MjFGQjM1
MDMwMEJDNTRFOSAvKiBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLmggKi87IH07CisJCTE0RDAxQkU2
MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJEQTI2REVFRjM3MDBD
QUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oICovOyB9OworCQkxNEQwMUJFNzI2
REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkRCMjZERUVGMzcwMENBRTBE
MCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oICovOyB9OworCQkxNEQwMUJFOTI2REVFRjM4
MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkREMjZERUVGMzcwMENBRTBE
MCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oICovOyB9OworCQkxNEQwMUJFQzI2
REVFRjM4MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCRTAyNkRFRUYzNzAwQ0FFMEQwIC8qIEpT
V2ViQXNzZW1ibHlUYWcuaCAqLzsgfTsKKwkJMTREMDFCRUQyNkRFRUYzODAwQ0FFMEQwIC8qIEpT
V2ViQXNzZW1ibHlFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0RDAxQkUxMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uLmggKi87IH07CisJCTE0RDAxQkVGMjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJs
eUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNEQwMUJFMzI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNl
cHRpb25Db25zdHJ1Y3Rvci5oICovOyB9OworCQkxNEQwMUJGNTI2REVFRjUzMDBDQUUwRDAgLyog
V2FzbVRhZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTREMDFCRjMyNkRFRUY1MjAwQ0FFMEQwIC8qIFdhc21UYWcuaCAqLzsgfTsKIAkJMTREMkYzREIx
MzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2Vk
U3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxNERGMDREQTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRERjA0RDkxNkIz
OTk2RDAwMTZBNTEzIC8qIFN0YXRpY1Byb3BlcnR5QW5hbHlzaXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1
RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNEU4NEY5QTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEyNjQsNyArMTI3Miw3
IEBACiAJCTg2MjgxRUYwMjVCNjE2MDAwMDM2NzAwNCAvKiBDaGVja1ByaXZhdGVCcmFuZFZhcmlh
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2Mjgx
RUVGMjVCNjE2MDAwMDM2NzAwNCAvKiBDaGVja1ByaXZhdGVCcmFuZFZhcmlhbnQuaCAqLzsgfTsK
IAkJODYyODFFRjQyNUI2MUFGMDAwMzY3MDA0IC8qIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjI4MUVGMzI1
QjYxQUYwMDAzNjcwMDQgLyogQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuaCAqLzsgfTsKIAkJODYz
QjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYzQjIzREYwRkM2MEU2MjAw
NzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTg2M0ZCQzVBMjVCMDkzQjkwMEY2QzkzMCAvKiBX
YXNtVmFsdWVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODYzRkJDNTgyNUIwOTNCOTAwRjZDOTMwIC8qIFdhc21WYWx1ZUxvY2F0aW9uLmgg
Ki87IH07CisJCTg2M0ZCQzVBMjVCMDkzQjkwMEY2QzkzMCAvKiBXYXNtVmFsdWVMb2NhdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYzRkJDNTgy
NUIwOTNCOTAwRjZDOTMwIC8qIFdhc21WYWx1ZUxvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY1QTMwRjExMzUwMDdFMTAwQ0RCNDlF
IC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NjVBMzBGMDEzNTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGlu
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4
NjVEQTBDNTI1Qjg5NTc0MDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY1REEwQzQyNUI4OTU3
NDAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFZhcmlhbnQuaCAqLzsgfTsKIAkJODY1REEwQzgy
NUI4OTYwQzAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY1REEwQzcyNUI4OTYwQzAwODc1Nzcy
IC8qIFNldFByaXZhdGVCcmFuZFN0YXR1cy5oICovOyB9OwpAQCAtMTkzNSw3ICsxOTQzLDcgQEAK
IAkJRTNCRkE1RDAyMUU4NTNBMTAwOUMwRUJBIC8qIERGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0eS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCRkE1Q0Qy
MUU4NTNBMTAwOUMwRUJBIC8qIERGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0eS5oICovOyB9OwogCQlF
M0JGRDBCQzFEQUY4MDhFMDA2NURFQTIgLyogQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQkZEMEJBMURBRjgw
N0MwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5oICovOyB9OwogCQlFM0MyOTVE
RDFFRDJDQkRBMDBEMzAxNkYgLyogT2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQzI5
NURDMUVEMkNCQUEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hw
b2ludC5oICovOyB9OwotCQlFM0M2OTRCMzIzMDI2ODc3MDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTND
Njk0QjEyMzAyNjg3MzAwNkZCRTQyIC8qIFdhc21PU1JFbnRyeURhdGEuaCAqLzsgfTsKKwkJRTND
Njk0QjMyMzAyNjg3NzAwNkZCRTQyIC8qIFdhc21PU1JFbnRyeURhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQzY5NEIxMjMwMjY4NzMwMDZGQkU0
MiAvKiBXYXNtT1NSRW50cnlEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTNDNzNBOTEyNUJGQTczQjAwRUZFMzAzIC8qIFdhc21TdHJlYW1p
bmdQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
M0M3M0E5MDI1QkZBNzM0MDBFRkUzMDMgLyogV2FzbVN0cmVhbWluZ1BsYW4uaCAqLzsgfTsKIAkJ
RTNDNzlDQUIxREI5QTREQzAwRDFFQ0E0IC8qIERPTUpJVEVmZmVjdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNDNzlDQUExREI5QTRENjAwRDFFQ0E0
IC8qIERPTUpJVEVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUUzQzhFRDQzMjNBMURCQ0IwMDEzMTk1OCAvKiBJc29JbmxpbmVkSGVhcENl
bGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
M0M4RUQ0MjIzQTFEQkM1MDAxMzE5NTggLyogSXNvSW5saW5lZEhlYXBDZWxsVHlwZS5oICovOyB9
OwpAQCAtMzQ1OSw2ICszNDY3LDggQEAKIAkJMTQ4MkI3OEEwQTQzMDVBQjAwNTE3Q0ZDIC8qIEFQ
SUNhc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJQ2FzdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDgyQjdFMTBBNDMwNzYwMDA1MTdDRkMgLyogSlNP
YmplY3RSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPYmplY3RSZWYu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4MkI3RTIwQTQzMDc2MDAwNTE3Q0ZD
IC8qIEpTT2JqZWN0UmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTT2JqZWN0UmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQ4NTIxRDUy
NkVBRUJERjAwQ0MxRDFBIC8qIFdhc21IYW5kbGVySW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtSGFuZGxlckluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDg1
MjFENzI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21IYW5kbGVySW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDg2QThCRTI0QUJFRDNCMDA3MzkyMkQgLyogSlNMb2NrUmVmLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTTG9ja1JlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0ODZBOEJGMjRBQkVEM0MwMDczOTIyRCAvKiBKU0xvY2tSZWZQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTTG9ja1JlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQ4NzRBRTExNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zNTQyLDYgKzM1NTIsMjAgQEAKIAkJMTRDQzNCQTIyMTM4QTIzODAwMkQ1OEI2
IC8qIEluc3RydWN0aW9uU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluc3RydWN0aW9uU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RDAx
QTc1MjFGQjM1MDMwMEJDNTRFOSAvKiBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTREMDFBNzYyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNl
UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJEQTI2REVFRjM3MDBDQUUwRDAgLyogV2Vi
QXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRhZ0Nv
bnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRCMjZERUVG
MzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oOyBwYXRoID0ganMvV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRE
MDFCREMyNkRFRUYzNzAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5j
cHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMTREMDFCREQyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFz
c2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseUV4Y2VwdGlv
blByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJERTI2REVF
RjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcDsg
cGF0aCA9IGpzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxNEQwMUJERjI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdQ
cm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNz
ZW1ibHlUYWdQcm90b3R5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJFMDI2REVFRjM3MDBDQUUw
RDAgLyogSlNXZWJBc3NlbWJseVRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBKU1dlYkFzc2VtYmx5VGFnLmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5VGFnLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkUxMjZERUVGMzgwMENBRTBEMCAvKiBKU1dl
YkFzc2VtYmx5RXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpT
V2ViQXNzZW1ibHlFeGNlcHRpb24uaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRTIyNkRFRUYzODAwQ0FFMEQw
IC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcDsgcGF0
aCA9IGpzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMTREMDFCRTMyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhj
ZXB0aW9uQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2Vi
QXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlFeGNl
cHRpb25Db25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJF
NDI2REVFRjM4MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5VGFnLmNwcDsgcGF0aCA9IGpzL0pT
V2ViQXNzZW1ibHlUYWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJF
NTI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUV4Y2VwdGlv
bkNvbnN0cnVjdG9yLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJGMjI2REVFRjUyMDBD
QUUwRDAgLyogV2FzbVRhZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtVGFnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRjMyNkRF
RUY1MjAwQ0FFMEQwIC8qIFdhc21UYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2FzbVRhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQyRjNEOTEzOUY0
QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFya2VkU3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRENzky
NjQwREFBMDNGQjAwMUE5RjA1IC8qIENMb29wU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ0xvb3BTdGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuamF2YXNjcmlwdDsgbmFtZSA9IHRlc3RhcGkuanM7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFw
aS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzcsMTAgKzYzMDEsMTAgQEAK
IAkJCQkwRjI0RTUzQjE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywK
IAkJCQkwRjI0RTUzQzE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmggKi8sCiAJ
CQkJNkI3NjdFN0EyNjc5MUYyNzAwMTdGOEQxIC8qIEFzc2VtYmx5SGVscGVyc1Nwb29sZXJzLmgg
Ki8sCi0JCQkJNzIzOTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5jcHAg
Ki8sCi0JCQkJNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5oICov
LAogCQkJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICov
LAogCQkJCTUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLywK
KwkJCQk3MjM5OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywK
KwkJCQk3MjM5OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCiAJ
CQkJMEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJ
MEY2NEIyNzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1Qjgz
OTJEMUJBQ0E5RDMwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC03MTUxLDYg
KzcxNzUsOCBAQAogCQkJCTE0ODdDRTE2MjM3NzQxMDAwMDQ0NDI5QyAvKiBXYXNtR2VuZXJhdG9y
VHJhaXRzLmggKi8sCiAJCQkJRTM4MzUwMDgyMzkwRDkzNzAwMzYzMTZEIC8qIFdhc21HbG9iYWwu
Y3BwICovLAogCQkJCUUzODM1MDA5MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNtR2xvYmFsLmggKi8s
CisJCQkJMTQ4NTIxRDUyNkVBRUJERjAwQ0MxRDFBIC8qIFdhc21IYW5kbGVySW5mby5jcHAgKi8s
CisJCQkJMTQ4NTIxRDcyNkVBRUJGRTAwQ0MxRDFBIC8qIFdhc21IYW5kbGVySW5mby5oICovLAog
CQkJCUFEOEZGMzk2MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuY3BwICovLAog
CQkJCUFEOEZGMzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAqLywKIAkJ
CQlBRDVDMzZERTFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmNwcCAqLywKQEAgLTcy
MDgsNiArNzIzNCw4IEBACiAJCQkJRTNDNzNBOTAyNUJGQTczNDAwRUZFMzAzIC8qIFdhc21TdHJl
YW1pbmdQbGFuLmggKi8sCiAJCQkJQUQ1QzM2RTMxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJs
ZS5jcHAgKi8sCiAJCQkJQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5oICov
LAorCQkJCTE0RDAxQkYyMjZERUVGNTIwMENBRTBEMCAvKiBXYXNtVGFnLmNwcCAqLywKKwkJCQkx
NEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICovLAogCQkJCTUyNTBEMkNGMUU4
REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCAqLywKIAkJCQk1MjUwRDJEMDFFOERBMDVB
MDAyOUE5MzIgLyogV2FzbVRodW5rcy5oICovLAogCQkJCUUzQzY5NEIyMjMwMjY4NzQwMDZGQkU0
MiAvKiBXYXNtVGllclVwQ291bnQuY3BwICovLApAQCAtOTA5MSw2ICs5MTE5LDggQEAKIAkJCQlB
RDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICovLAog
CQkJCUFEMkZDQkE2MURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9y
LmNwcCAqLywKIAkJCQlBRDJGQ0JBNzFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNv
bXBpbGVFcnJvci5oICovLAorCQkJCTE0RDAxQkRDMjZERUVGMzcwMENBRTBEMCAvKiBKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uLmNwcCAqLywKKwkJCQkxNEQwMUJFMTI2REVFRjM4MDBDQUUwRDAgLyog
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oICovLAogCQkJCUUzQkYzQzRDMjM5MEQxRTMwMDhCQzc1
MiAvKiBKU1dlYkFzc2VtYmx5R2xvYmFsLmNwcCAqLywKIAkJCQlFM0JGM0M0QjIzOTBEMUUyMDA4
QkM3NTIgLyogSlNXZWJBc3NlbWJseUdsb2JhbC5oICovLAogCQkJCTc5NkZCNDM5MURGRjhDM0Yw
MDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovLApAQCAtOTEwNiwxMiArOTEzNiwx
OCBAQAogCQkJCUFEMkZDQkFEMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yLmggKi8sCiAJCQkJQUQyRkNCQUUxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHlUYWJsZS5jcHAgKi8sCiAJCQkJQUQyRkNCQUYxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNz
ZW1ibHlUYWJsZS5oICovLAorCQkJCTE0RDAxQkU0MjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFz
c2VtYmx5VGFnLmNwcCAqLywKKwkJCQkxNEQwMUJFMDI2REVFRjM3MDBDQUUwRDAgLyogSlNXZWJB
c3NlbWJseVRhZy5oICovLAogCQkJCUFERDA5QUVGMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9K
Uy5jcHAgKi8sCiAJCQkJQUREMDlBRUUxRjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmggKi8s
CiAJCQkJQUQyRkNCQjAxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9y
Q29uc3RydWN0b3IuY3BwICovLAogCQkJCUFEMkZDQkIxMURCNThEQTQwMEIzRTczNiAvKiBXZWJB
c3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmggKi8sCiAJCQkJQUQyRkNCQjIxREI1OERB
NDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcCAqLywKIAkJ
CQlBRDJGQ0JCMzFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUuaCAqLywKKwkJCQkxNEQwMUJFNTI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlF
eGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAgKi8sCisJCQkJMTREMDFCRTMyNkRFRUYzODAwQ0FFMEQw
IC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCAqLywKKwkJCQkxNEQwMUJFMjI2
REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwICovLAor
CQkJCTE0RDAxQkREMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZS5oICovLAogCQkJCUFENDkzN0M5MURERDI3MzQwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1
bmN0aW9uLmNwcCAqLywKIAkJCQlBRDQ5MzdDQTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1i
bHlGdW5jdGlvbi5oICovLAogCQkJCTUyMTMyMjQzMUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZS5jcHAgKi8sCkBAIC05MTQ2LDYgKzkxODIsMTAgQEAKIAkJCQlBRDJG
Q0JDMTFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmggKi8s
CiAJCQkJQUQyRkNCQzIxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5
cGUuY3BwICovLAogCQkJCUFEMkZDQkMzMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRh
YmxlUHJvdG90eXBlLmggKi8sCisJCQkJMTREMDFCREUyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFz
c2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTE0RDAxQkRBMjZERUVGMzcwMENBRTBE
MCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi8sCisJCQkJMTREMDFCREYyNkRFRUYz
NzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmNwcCAqLywKKwkJCQkxNEQwMUJE
QjI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaCAqLywKIAkJCQk1
MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3Bw
ICovLAogCQkJCTUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5oICovLAogCQkJKTsKQEAgLTk0OTYsNiArOTUzNiw3IEBACiAJCQkJNTNENDQ0REMx
REFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTM0MUZDNzIxREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkM2M0IyMUU2MEFFNDcwMEMxMzgzOSAvKiBCM1dpZHRoLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxpbmVK
SVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MjM5OThGNzI2NURCQ0RCMDA1Nzg2N0YgLyog
QmFzZWxpbmVKSVRQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY4RjFBMDMxMDA5MDA2
QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNB
QzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtOTYzMSw3ICs5NjcyLDYgQEAKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0
MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4gSGVhZGVycyAqLywKIAkJCQk1MzVDMjQ2MTFGNzg5
MjhFMDA2RUM0MEUgLyogY3JlYXRlX3JlZ2V4X3RhYmxlcyBpbiBIZWFkZXJzICovLAogCQkJCTk5
NTlFOTJCMUJEMTdGQTQwMDFBQTQxMyAvKiBjc3NtaW4ucHkgaW4gSGVhZGVycyAqLywKLQkJCQlF
Mzg2RkQ3QjI2RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWVDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3RvbUdl
dHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhG
IC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdCNkI1QUIwMEE3
QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzM1LDEwICs5Nzc1LDggQEAK
IAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0
LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTgg
LyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5MTkzQUM2MEEw
MDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTM4NkZEN0Uy
NkU4NjdCODAwRTRDMjhCIC8qIFRlbXBvcmFsUGxhaW5UaW1lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyRkNDRkExOEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBv
aW50LmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjgxLDcgKzEwMzE5LDYgQEAKIAkJCQkwRjJCNjZG
MjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKLQkJCQlFMzg2RkQ3RjI2RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9y
YWxQbGFpblRpbWVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzk4LDYgKzEwNDM1LDcgQEAKIAkJCQlBRDVDMzZFQjFG
NzVBRDczMDAwQkNBQUYgLyogSlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ5
RTg1MkYxRThBMEM3QzAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFEMkZDQkUzMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Q29t
cGlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJFRDI2REVFRjM4MDBDQUUwRDAg
LyogSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNCRjNDNEQy
MzkwRDFFODAwOEJDNzUyIC8qIEpTV2ViQXNzZW1ibHlHbG9iYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTc5NkZCNDNBMURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRTUxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDQwNiw2ICsxMDQ0NCw3IEBACiAJCQkJ
QUQyRkNDMDUxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlNb2R1bGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFEMkZDQkU5MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5UnVu
dGltZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFQjFEQjU4REFEMDBCM0U3MzYg
LyogSlNXZWJBc3NlbWJseVRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJFQzI2REVF
RjM4MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0
MjU2NjIxNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkUzQzYxOTE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQyRTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNXcmFwcGVyT2JqZWN0LmggaW4g
SGVhZGVycyAqLywKQEAgLTEwNzQzLDYgKzEwNzgyLDkgQEAKIAkJCQlBM0M3RURCQTI2QjBEQjM4
MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBM0M3RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjZGMTUwMjEyNjkzRDQ1MDAwNEI5OEVGIC8qIFRlbXBv
cmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM4NkZEN0UyNkU4NjdCODAwRTRD
MjhCIC8qIFRlbXBvcmFsUGxhaW5UaW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzg2RkQ3QjI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWVDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRTM4NkZEN0YyNkU4NjdCODAwRTRDMjhCIC8qIFRlbXBvcmFsUGxhaW5UaW1l
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzBFOEE1NjI2REUyRTQ4MDBEQTQ5MTUg
LyogVGVtcG9yYWxUaW1lWm9uZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMwRThBNTcyNkRFMkU0
ODAwREE0OTE1IC8qIFRlbXBvcmFsVGltZVpvbmVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTMwRThBNTQyNkRFMkU0ODAwREE0OTE1IC8qIFRlbXBvcmFsVGltZVpvbmVQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTA4MjksNiArMTA4NzEsNyBAQAogCQkJCTE0NTBGQTFD
MjM1N0JEQkUwMDkzQ0Q0RCAvKiBXYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzODM1MDBBMjM5MEQ5M0IwMDM2MzE2RCAvKiBXYXNtR2xvYmFs
LmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDg1MjFEODI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhh
bmRsZXJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDhGRjM5ODFFQjVCREIyMDA4N0ZGODIg
LyogV2FzbUluZGV4T3JOYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFMjFGNjk5RUMw
MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDAwNjU5RTFF
Q0FDODEyMDAwQ0E5MjYgLyogV2FzbUxpbWl0cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDg1OSw2
ICsxMDkwMiw3IEBACiAJCQkJRTNBMDUzMUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJlYW1p
bmdQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzQzczQTkxMjVCRkE3M0IwMEVGRTMwMyAv
KiBXYXNtU3RyZWFtaW5nUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RTYxRjY5RUM5
MTAwMEJDQUFGIC8qIFdhc21UYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRjUyNkRF
RUY1MzAwQ0FFMEQwIC8qIFdhc21UYWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyNTBEMkQyMUU4
REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0U5RTBB
RjFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDVDMzZFQzFGNzVBRDdDMDAwQkNBQUYgLyogV2FzbVRvSlMuaCBpbiBIZWFkZXJzICovLApA
QCAtMTA4OTAsNiArMTA5MzQsOCBAQAogCQkJCUFEMkZDQzE2MURCNTlDQjIwMEIzRTczNiAvKiBX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUQyRkNCRUYxREI1OERBRDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0MxNzFEQjU5Q0IyMDBCM0U3MzYgLyog
V2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkxNEQwMUJFRjI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRTkyNkRFRUYzODAwQ0FFMEQwIC8qIFdl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDQ5MzdE
NDFEREQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTIxMzIyNDYxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0JGM0M1MzIzOTBEMjA1MDA4QkM3NTIgLyogV2ViQXNz
ZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDkxNyw2ICsxMDk2
Myw4IEBACiAJCQkJQUQyRkNDMjAxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVD
b25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkZGMURCNThEQUQwMEIz
RTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
RDJGQ0MyMTFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0RDAxQkU2MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3Nl
bWJseVRhZ0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJFNzI2REVFRjM4
MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0N0EwRTE2RjVDRDAwQjM0NDYwIC8qIFdlYktpdEF2
YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlEQTAwQTYxQkQ1OTkzMTAwRjQ1NzVD
IC8qIHdrYnVpbHRpbnMucHkgaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dAppbmRleCBhODU5NzNlN2VkY2UxYjgzNzExZTAyOTE5NzJhMzFhNDQ2YWY4NTEwLi5mMDQ0NTFk
MDM4ZGIzMGM3NTFmNDZhOWE0ZDc0ODYzY2I2YjJkODU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0CkBAIC0xMDc5LDYgKzEwNzksNyBAQCB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIu
Y3BwCiB3YXNtL1dhc21Gb3JtYXQuY3BwCiB3YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5jcHAK
IHdhc20vV2FzbUdsb2JhbC5jcHAKK3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcAogd2FzbS9XYXNt
SW5kZXhPck5hbWUuY3BwCiB3YXNtL1dhc21JbnN0YW5jZS5jcHAKIHdhc20vV2FzbUluc3RhbmNl
LmgKQEAgLTExMDUsNiArMTEwNiw3IEBAIHdhc20vV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmNwcAog
d2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAogd2FzbS9XYXNtU3RyZWFtaW5nUGxhbi5jcHAK
IHdhc20vV2FzbVRhYmxlLmNwcAord2FzbS9XYXNtVGFnLmNwcAogd2FzbS9XYXNtVGh1bmtzLmNw
cAogd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCiB3YXNtL1dhc21WYWx1ZUxvY2F0aW9uLmNwcApA
QCAtMTExNiw2ICsxMTE4LDcgQEAgd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAogd2FzbS9q
cy9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcAord2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAogd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlMaW5rRXJy
b3IuY3BwCkBAIC0xMTIzLDEwICsxMTI2LDEzIEBAIHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9y
eS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKIHdhc20vanMvSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvci5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAord2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFnLmNwcAogd2FzbS9qcy9XYXNtVG9KUy5jcHAKIHdhc20vanMv
V2FzbVRvSlMuaAogd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNw
cAogd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAKK3dhc20vanMv
V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAKK3dhc20vanMvV2ViQXNzZW1ibHlF
eGNlcHRpb25Qcm90b3R5cGUuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCiB3
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseUds
b2JhbENvbnN0cnVjdG9yLmNwcApAQCAtMTE0NCw2ICsxMTUwLDggQEAgd2FzbS9qcy9XZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRp
bWVFcnJvclByb3RvdHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9y
LmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAord2FzbS9qcy9XZWJB
c3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcAord2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCiAKIHlhcnIvUmVn
dWxhckV4cHJlc3Npb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgppbmRleCA4Y2M1NTE1NmI1N2FiY2U0OWNlYWI5ODJjMzE0N2E5ODg5ZDE0
ZjU2Li5iZTJlOGM4MTFkNmRkZDBjMTg0YmE1ZWQ0ZDk1NzkzNmZkMjI1OGEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTE4MzksNCAr
MTgzOSwzNiBAQCBvcCA6YXRvbWljX2ZlbmNlLAogICAgIGFyZ3M6IHsKICAgICB9CiAKK29wIDp0
aHJvdywKKyAgICBhcmdzOiB7CisgICAgICAgIGV4Y2VwdGlvbkluZGV4OiB1bnNpZ25lZCwKKyAg
ICAgICAgZmlyc3RWYWx1ZTogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0KKworb3AgOnJldGhyb3cs
CisgICAgYXJnczogeworICAgICAgICBleGNlcHRpb246IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9
CisKK29wX2dyb3VwIDpDYXRjaCwKKyAgICBbCisgICAgICAgIDpjYXRjaCwKKyAgICAgICAgOmNh
dGNoX25vX3RscywKKyAgICBdLAorICAgIGFyZ3M6IHsKKyAgICAgICAgZXhjZXB0aW9uSW5kZXg6
IHVuc2lnbmVkLAorICAgICAgICBleGNlcHRpb246IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAg
YXJndW1lbnRDb3VudDogdW5zaWduZWQsCisgICAgICAgIHN0YXJ0T2Zmc2V0OiB1bnNpZ25lZCwK
KyAgICB9CisKK29wX2dyb3VwIDpDYXRjaEFsbCwKKyAgICBbCisgICAgICAgIDpjYXRjaF9hbGws
CisgICAgICAgIDpjYXRjaF9hbGxfbm9fdGxzLAorICAgIF0sCisgICAgYXJnczogeworICAgICAg
ICBleGNlcHRpb246IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9CisKIGVuZF9zZWN0aW9uIDpXYXNt
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCmluZGV4IDAx
ZGRjZjk2OTliNDgwMjlhMWJkOGJlZTQwMzQ5MDQ3OWExZjlkN2YuLjY2ZGYwOTk5ZjIxYjI3NGUw
OTk5YmI1YTM4NTIzNGQxNDUxNWM5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9IYW5kbGVySW5mby5oCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1lbnVtIGNsYXNzIEhhbmRsZXJUeXBlIHsKK2VudW0gY2xhc3MgSGFuZGxlclR5cGUgOiB1aW50
OF90IHsKICAgICBDYXRjaCA9IDAsCiAgICAgRmluYWxseSA9IDEsCiAgICAgU3ludGhlc2l6ZWRD
YXRjaCA9IDIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dHJ1Y3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5o
CmluZGV4IDY4MGU5NDAxZGM2MWZmNjNkY2I1ZDVlNmY5ZGViZWM0MDY4OGI0NDkuLjUxZjFkMDJl
MTgyNTU4YzljMjkxMmQ4NDBjNTg4MTA0OGNhODAxZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHMgPSBKU09wY29kZVRyYWl0cz4KICAgICBjb25zdCBj
aGFyKiBuYW1lKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBUcmFpdHM6Om9wY29kZU5h
bWVzW29wY29kZUlEKCldOworICAgICAgICByZXR1cm4gVHJhaXRzOjpvcGNvZGVOYW1lc1tvcGNv
ZGVJRDxUcmFpdHM+KCldOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cyA9
IEpTT3Bjb2RlVHJhaXRzPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmNwcAppbmRleCA2M2ZmNGVlY2U2MjZiNWQ4ZGZkZWMwYzcyM2ExY2Q3NDg4NzFi
YzVhLi45ZWRmNTliOTY4NmE1YWQ2Y2VhODM4M2Y3NDMzMzM2MGExOWM2ZDQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtMTMwLDcg
KzEzMCw4IEBAIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNl
dCgpIGNvbnN0CiAKIEJ5dGVjb2RlSW5kZXggQ2FsbEZyYW1lOjpieXRlY29kZUluZGV4KCkgY29u
c3QKIHsKLSAgICBBU1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsKKyAgICBpZiAoY2FsbGVlKCku
aXNXYXNtKCkpCisgICAgICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgp
OwogICAgIGlmICghY29kZUJsb2NrKCkpCiAgICAgICAgIHJldHVybiBCeXRlY29kZUluZGV4KDAp
OwogI2lmIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5oCmluZGV4IDFjYWIyMjViY2UwMzhkOGZlNWUxYzQ1ODkwM2ZmMzlkOTU2
ZmZmNGEuLmQ4NjRhMjY4Y2Q3Y2I1MDVhNDEzM2UzNzBjYzMzOWQ5NTg0MjlhNGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTQ0LDYgKzQ0
LDExIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICBjbGFzcyBDYWxsU2l0ZUluZGV4IHsKICAgICBw
dWJsaWM6CiAgICAgICAgIENhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgQ2Fs
bFNpdGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgICAgICA6
IG1fYml0cyhkZWxldGVkVmFsdWUoKS5iaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgZXhwbGljaXQgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCiAgICAgICAgICAgICA6IG1fYml0cyhieXRlY29kZUluZGV4Lm9mZnNldCgpKQpA
QCAtNTcsMTMgKzYyLDI1IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9iaXRzOyB9CiAgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBDYWxsU2l0ZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9iaXRz
ID09IG90aGVyLm1fYml0czsgfQogCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJl
dHVybiBpbnRIYXNoKG1fYml0cyk7IH0KKyAgICAgICAgc3RhdGljIENhbGxTaXRlSW5kZXggZGVs
ZXRlZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoc19pbnZhbGlkSW5kZXggLSAxKTsgfQorICAg
ICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gKnRoaXMg
PT0gZGVsZXRlZFZhbHVlKCk7IH0KKwogICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9iaXRzOyB9CiAgICAgICAgIHN0YXRpYyBDYWxsU2l0ZUluZGV4IGZyb21CaXRzKHVp
bnQzMl90IGJpdHMpIHsgcmV0dXJuIENhbGxTaXRlSW5kZXgoYml0cyk7IH0KIAogICAgICAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBCeXRlY29kZUluZGV4
KGJpdHMoKSk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQzMl90IG1fYml0cyB7IEJ5
dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSB9OworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQz
Ml90IHNfaW52YWxpZEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
OworCisgICAgICAgIHVpbnQzMl90IG1fYml0cyB7IHNfaW52YWxpZEluZGV4IH07CisgICAgfTsK
KworICAgIHN0cnVjdCBDYWxsU2l0ZUluZGV4SGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IENhbGxTaXRlSW5kZXgmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQor
ICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDYWxsU2l0ZUluZGV4JiBhLCBjb25zdCBD
YWxsU2l0ZUluZGV4JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKICAgICB9Owog
CiAgICAgY2xhc3MgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJbmRl
eCB7CkBAIC0zMzIsMyArMzQ5LDE1IEBAIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNGcm9tSlND
b2RlKHZvaWQqIHJldHVybkFkZHJlc3MpOwogCiAKIH0gLy8gbmFtZXNwYWNlIEpTQworCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpDYWxsU2l0ZUluZGV4PiA6IEpTQzo6
Q2FsbFNpdGVJbmRleEhhc2ggeyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpDYWxsU2l0ZUluZGV4
PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkNhbGxTaXRlSW5kZXg+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAppbmRleCA5MTI2ZWY1NTlmMzUzMTI1MmViNGRkNTI5ZWRiNDdkM2NlZmFi
YTNjLi5kODc2MjkxMDY0YjI2OWM2YTJjY2ViYzFiMmYwNTY5NzU0MTJiNWU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTUy
LDYgKzUyLDcgQEAKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAi
SlNNb2R1bGVSZWNvcmQuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUg
IkxpdGVyYWxQYXJzZXIuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCkBA
IC01MTIsMTUgKzUxMyw1NyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIG5vdGlmeURlYnVn
Z2VyT2ZVbndpbmRpbmcoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgIH0KIH0KIAor
Q2F0Y2hJbmZvOjpDYXRjaEluZm8oY29uc3QgSGFuZGxlckluZm8qIGhhbmRsZXIsIENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIG1fdmFsaWQgPSAhIWhhbmRsZXI7CisgICAgaWYgKG1fdmFs
aWQpIHsKKyAgICAgICAgbV90eXBlID0gaGFuZGxlci0+dHlwZSgpOworICAgICAgICBtX25hdGl2
ZUNvZGUgPSBoYW5kbGVyLT5uYXRpdmVDb2RlOworCisgICAgICAgIC8vIGhhbmRsZXItPnRhcmdl
dCBpcyBtZWFuaW5nbGVzcyBmb3IgZ2V0dGluZyBhIGNvZGUgb2Zmc2V0IHdoZW4gY2F0Y2hpbmcK
KyAgICAgICAgLy8gdGhlIGV4Y2VwdGlvbiBpbiBhIERGRy9GVEwgZnJhbWUuIFRoaXMgYnl0ZWNv
ZGUgdGFyZ2V0IG9mZnNldCBjb3VsZCBiZQorICAgICAgICAvLyBzb21ldGhpbmcgdGhhdCdzIGlu
IGFuIGlubGluZWQgZnJhbWUsIHdoaWNoIG1lYW5zIGFuIGFycmF5IGFjY2VzcworICAgICAgICAv
LyB3aXRoIHRoaXMgYnl0ZWNvZGUgb2Zmc2V0IGluIHRoZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVy
bHkgbWVhbmluZ2xlc3MKKyAgICAgICAgLy8gYW5kIGNhbiBjYXVzZSBhbiBvdmVyZmxvdy4gT1NS
IGV4aXQgcHJvcGVybHkgZXhpdHMgdG8gaGFuZGxlci0+dGFyZ2V0CisgICAgICAgIC8vIGluIHRo
ZSBwcm9wZXIgZnJhbWUuCisgICAgICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNv
ZGVCbG9jay0+aml0VHlwZSgpKSkKKyAgICAgICAgICAgIG1fY2F0Y2hQQ0ZvckludGVycHJldGVy
ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChoYW5kbGVyLT50YXJnZXQpLnB0cigpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NhdGNoUENGb3JJbnRlcnByZXRlciA9IG51bGxw
dHI7CisgICAgfQorfQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorQ2F0Y2hJbmZvOjpDYXRj
aEluZm8oY29uc3QgV2FzbTo6SGFuZGxlckluZm8qIGhhbmRsZXIsIGNvbnN0IFdhc206OkNhbGxl
ZSogY2FsbGVlKQoreworICAgIG1fdmFsaWQgPSAhIWhhbmRsZXI7CisgICAgaWYgKG1fdmFsaWQp
IHsKKyAgICAgICAgbV90eXBlID0gSGFuZGxlclR5cGU6OkNhdGNoOworICAgICAgICBtX25hdGl2
ZUNvZGUgPSBoYW5kbGVyLT5tX25hdGl2ZUNvZGU7CisgICAgICAgIGlmIChjb25zdCBXYXNtOjpG
dW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbGVlLT5mdW5jdGlvbkNvZGVCbG9jaygp
KQorICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGhhbmRsZXItPm1fdGFyZ2V0KS5wdHIoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBudWxscHRyOworICAgIH0KK30KKyNl
bmRpZgorCiBjbGFzcyBVbndpbmRGdW5jdG9yIHsKIHB1YmxpYzoKLSAgICBVbndpbmRGdW5jdG9y
KFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBib29sIGlzVGVybWluYXRpb24sIENvZGVC
bG9jayomIGNvZGVCbG9jaywgSGFuZGxlckluZm8qJiBoYW5kbGVyKQorICAgIFVud2luZEZ1bmN0
b3IoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIGJvb2wgaXNUZXJtaW5hdGlvbiwgSlNW
YWx1ZSB0aHJvd25WYWx1ZSwgQ29kZUJsb2NrKiYgY29kZUJsb2NrLCBDYXRjaEluZm8mIGhhbmRs
ZXIpCiAgICAgICAgIDogbV92bSh2bSkKICAgICAgICAgLCBtX2NhbGxGcmFtZShjYWxsRnJhbWUp
CiAgICAgICAgICwgbV9pc1Rlcm1pbmF0aW9uKGlzVGVybWluYXRpb24pCiAgICAgICAgICwgbV9j
b2RlQmxvY2soY29kZUJsb2NrKQogICAgICAgICAsIG1faGFuZGxlcihoYW5kbGVyKQogICAgIHsK
KyAgICAgICAgaWYgKCFtX2lzVGVybWluYXRpb24pIHsKKyAgICAgICAgICAgIGlmIChKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uKiB3YXNtRXhjZXB0aW9uID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uKj4obV92bSwgdGhyb3duVmFsdWUpKSB7CisgICAgICAgICAgICAgICAgbV9j
YXRjaGFibGVGcm9tV2FzbSA9IHRydWU7CisgICAgICAgICAgICAgICAgbV93YXNtVGFnID0gJndh
c21FeGNlcHRpb24tPnRhZygpOworICAgICAgICAgICAgfSBlbHNlIGlmIChFcnJvckluc3RhbmNl
KiBlcnJvciA9IGpzRHluYW1pY0Nhc3Q8RXJyb3JJbnN0YW5jZSo+KG1fdm0sIHRocm93blZhbHVl
KSkKKyAgICAgICAgICAgICAgICBtX2NhdGNoYWJsZUZyb21XYXNtID0gZXJyb3ItPmlzQ2F0Y2hh
YmxlRnJvbVdhc20oKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIFN0YWNrVmlzaXRvcjo6U3Rh
dHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdApAQCAtNTI5LDE5ICs1
NzIsMzIgQEAgcHVibGljOgogICAgICAgICBtX2NhbGxGcmFtZSA9IHZpc2l0b3ItPmNhbGxGcmFt
ZSgpOwogICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogCi0gICAg
ICAgIG1faGFuZGxlciA9IG51bGxwdHI7CisgICAgICAgIG1faGFuZGxlci5tX3ZhbGlkID0gZmFs
c2U7CiAgICAgICAgIGlmIChtX2NvZGVCbG9jaykgewogICAgICAgICAgICAgaWYgKCFtX2lzVGVy
bWluYXRpb24pIHsKLSAgICAgICAgICAgICAgICBtX2hhbmRsZXIgPSBmaW5kRXhjZXB0aW9uSGFu
ZGxlcih2aXNpdG9yLCBtX2NvZGVCbG9jaywgUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsK
LSAgICAgICAgICAgICAgICBpZiAobV9oYW5kbGVyKQorICAgICAgICAgICAgICAgIG1faGFuZGxl
ciA9IHsgZmluZEV4Y2VwdGlvbkhhbmRsZXIodmlzaXRvciwgbV9jb2RlQmxvY2ssIFJlcXVpcmVk
SGFuZGxlcjo6QW55SGFuZGxlciksIG1fY29kZUJsb2NrIH07CisgICAgICAgICAgICAgICAgaWYg
KG1faGFuZGxlci5tX3ZhbGlkKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNp
dG9yOjpEb25lOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCi0gICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUoKS5pc0NlbGwoKSkgewotICAgICAg
ICAgICAgaWYgKGF1dG8qIGpzVG9XYXNtSUNDYWxsZWUgPSBqc0R5bmFtaWNDYXN0PEpTVG9XYXNt
SUNDYWxsZWUqPihtX3ZtLCB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSkpCisgICAgICAgIENh
bGxlZUJpdHMgY2FsbGVlID0gdmlzaXRvci0+Y2FsbGVlKCk7CisgICAgICAgIGlmIChjYWxsZWUu
aXNDZWxsKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBqc1RvV2FzbUlDQ2FsbGVlID0ganNE
eW5hbWljQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4obV92bSwgY2FsbGVlLmFzQ2VsbCgpKSkKICAg
ICAgICAgICAgICAgICBtX3ZtLndhc21Db250ZXh0LnN0b3JlKGpzVG9XYXNtSUNDYWxsZWUtPmZ1
bmN0aW9uKCktPnByZXZpb3VzSW5zdGFuY2UobV9jYWxsRnJhbWUpLCBtX3ZtLnNvZnRTdGFja0xp
bWl0KCkpOworCisgICAgICAgIH0KKworICAgICAgICBpZiAobV9jYXRjaGFibGVGcm9tV2FzbSAm
JiBjYWxsZWUuaXNXYXNtKCkpIHsKKyAgICAgICAgICAgIFdhc206OkNhbGxlZSogd2FzbUNhbGxl
ZSA9IGNhbGxlZS5hc1dhc21DYWxsZWUoKTsKKyAgICAgICAgICAgIGlmICh3YXNtQ2FsbGVlLT5o
YXNFeGNlcHRpb25IYW5kbGVycygpKSB7CisgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBqc0luc3RhbmNlID0ganNDYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KG1fY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZXhjZXB0aW9u
SGFuZGxlckluZGV4ID0gbV9jYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CisgICAg
ICAgICAgICAgICAgbV9oYW5kbGVyID0geyB3YXNtQ2FsbGVlLT5oYW5kbGVyRm9ySW5kZXgoanNJ
bnN0YW5jZS0+aW5zdGFuY2UoKSwgZXhjZXB0aW9uSGFuZGxlckluZGV4LCBtX3dhc21UYWcpLCB3
YXNtQ2FsbGVlIH07CisgICAgICAgICAgICAgICAgaWYgKG1faGFuZGxlci5tX3ZhbGlkKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOworICAgICAgICAgICAg
fQogICAgICAgICB9CiAjZW5kaWYKIApAQCAtNTg4LDEwICs2NDQsMTIgQEAgcHJpdmF0ZToKICAg
ICBDYWxsRnJhbWUqJiBtX2NhbGxGcmFtZTsKICAgICBib29sIG1faXNUZXJtaW5hdGlvbjsKICAg
ICBDb2RlQmxvY2sqJiBtX2NvZGVCbG9jazsKLSAgICBIYW5kbGVySW5mbyomIG1faGFuZGxlcjsK
KyAgICBDYXRjaEluZm8mIG1faGFuZGxlcjsKKyAgICBjb25zdCBXYXNtOjpUYWcqIG1fd2FzbVRh
ZyB7IG51bGxwdHIgfTsKKyAgICBib29sIG1fY2F0Y2hhYmxlRnJvbVdhc20geyBmYWxzZSB9Owog
fTsKIAotTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2
bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKK05FVkVSX0lO
TElORSBDYXRjaEluZm8gSW50ZXJwcmV0ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNh
bGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwogCkBAIC02MDksMTYgKzY2NywxMyBAQCBORVZFUl9JTkxJTkUg
SGFuZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxs
RnJhbWUsIEV4YwogICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VEKHNjb3BlLCBzY29wZS5leGNl
cHRpb24oKSk7CiAKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBDLCB1
bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgotICAgIEhhbmRsZXJJbmZvKiBoYW5k
bGVyID0gbnVsbHB0cjsKLSAgICBVbndpbmRGdW5jdG9yIGZ1bmN0b3Iodm0sIGNhbGxGcmFtZSwg
dm0uaXNUZXJtaW5hdGlvbkV4Y2VwdGlvbihleGNlcHRpb24pLCBjb2RlQmxvY2ssIGhhbmRsZXIp
OworICAgIENhdGNoSW5mbyBjYXRjaEluZm87CisgICAgVW53aW5kRnVuY3RvciBmdW5jdG9yKHZt
LCBjYWxsRnJhbWUsIHZtLmlzVGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSwgZXhjZXB0
aW9uVmFsdWUsIGNvZGVCbG9jaywgY2F0Y2hJbmZvKTsKICAgICBTdGFja1Zpc2l0b3I6OnZpc2l0
PFN0YWNrVmlzaXRvcjo6VGVybWluYXRlSWZUb3BFbnRyeUZyYW1lSXNFbXB0eT4oY2FsbEZyYW1l
LCB2bSwgZnVuY3Rvcik7CiAgICAgaWYgKHZtLmhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSkK
ICAgICAgICAgdm0ucG9wQWxsQ2hlY2twb2ludE9TUlNpZGVTdGF0ZVVudGlsKGNhbGxGcmFtZSk7
CiAKLSAgICBpZiAoIWhhbmRsZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0
dXJuIGhhbmRsZXI7CisgICAgcmV0dXJuIGNhdGNoSW5mbzsKIH0KIAogdm9pZCBJbnRlcnByZXRl
cjo6bm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRvQmVUaHJvd24oVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNl
cHRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5oCmluZGV4IDBjM2VmZTEyZTUxMDUzODhmNmNmMjg1MTFkOWVhNWU0ZWFmMzA3ZmMuLjU1OTQ2
MDIwYTM3ZmQ0MDlkMTE3OWMwNDc3ZWQ4ZGMxMzhiOTA1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCkBAIC00Myw2ICs0MywxMyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK25hbWVzcGFjZSBX
YXNtIHsKK2NsYXNzIENhbGxlZTsKK3N0cnVjdCBIYW5kbGVySW5mbzsKK30KKyNlbmRpZgorCiAg
ICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEV2YWxFeGVjdXRhYmxlOwogICAgIGNsYXNz
IEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTU4LDYgKzY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgY2xhc3MgSlNTY29wZTsKICAgICBjbGFzcyBTb3VyY2VDb2RlOwogICAgIGNsYXNzIFN0YWNr
RnJhbWU7CisgICAgZW51bSBjbGFzcyBIYW5kbGVyVHlwZSA6IHVpbnQ4X3Q7CiAgICAgc3RydWN0
IENhbGxGcmFtZUNsb3N1cmU7CiAgICAgc3RydWN0IEhhbmRsZXJJbmZvOwogICAgIHN0cnVjdCBJ
bnN0cnVjdGlvbjsKQEAgLTgxLDYgKzg5LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBT
dGFja0ZyYW1lTmF0aXZlQ29kZQogICAgIH07CiAKKyAgICBzdHJ1Y3QgQ2F0Y2hJbmZvIHsKKyAg
ICAgICAgQ2F0Y2hJbmZvKCkKKyAgICAgICAgICAgIDogbV92YWxpZChmYWxzZSkKKyAgICAgICAg
eyB9CisKKyAgICAgICAgQ2F0Y2hJbmZvKGNvbnN0IEhhbmRsZXJJbmZvKiwgQ29kZUJsb2NrKik7
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBDYXRjaEluZm8oY29uc3QgV2FzbTo6
SGFuZGxlckluZm8qLCBjb25zdCBXYXNtOjpDYWxsZWUqKTsKKyNlbmRpZgorCisgICAgICAgIGJv
b2wgbV92YWxpZDsKKyAgICAgICAgSGFuZGxlclR5cGUgbV90eXBlOworICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbV9uYXRpdmVDb2RlOworICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXI7CisgICAgfTsK
KwogICAgIGNsYXNzIEludGVycHJldGVyIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRDYWxsOwpAQCAtMTEyLDcgKzEzNiw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZ2V0QXJndW1lbnRzRGF0YShDYWxsRnJh
bWUqLCBKU0Z1bmN0aW9uKiYsIHB0cmRpZmZfdCYgZmlyc3RQYXJhbWV0ZXJJbmRleCwgUmVnaXN0
ZXIqJiBhcmd2LCBpbnQmIGFyZ2MpOwogCi0gICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5m
byogdW53aW5kKFZNJiwgQ2FsbEZyYW1lKiYsIEV4Y2VwdGlvbiopOworICAgICAgICBORVZFUl9J
TkxJTkUgQ2F0Y2hJbmZvIHVud2luZChWTSYsIENhbGxGcmFtZSomLCBFeGNlcHRpb24qKTsKICAg
ICAgICAgdm9pZCBub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bihWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgRXhjZXB0aW9uKik7CiAgICAgICAgIE5FVkVSX0lOTElO
RSB2b2lkIGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9va1R5cGUpOwogICAgICAgICBzdGF0aWMg
U3RyaW5nIHN0YWNrVHJhY2VBc1N0cmluZyhWTSYsIGNvbnN0IFZlY3RvcjxTdGFja0ZyYW1lPiYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcAppbmRleCA1N2ExYmRiNmRiZDViMTYwNjkxYzY1NjUwZmMwZDQ1ZGJlODA5ZWFiLi5kYzVl
Y2NlMDVlZTM5ZmJiZmViZjVkOWIyZGJiM2I5NTZmZDY2YTU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApAQCAtMTY2LDIzICsx
NjYsMjAgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmkKICAgICBtX2ZyYW1lLm1faW5saW5lQ2Fs
bEZyYW1lID0gbnVsbHB0cjsKICNlbmRpZgogCisgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgbV9mcmFtZS5tX2J5dGVjb2RlSW5kZXggPSAhbV9m
cmFtZS5jb2RlQmxvY2soKSA/IEJ5dGVjb2RlSW5kZXgoMCkKKyAgICAgICAgOiBjb2RlT3JpZ2lu
ID8gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpCisgICAgICAgIDogY2FsbEZyYW1lLT5ieXRl
Y29kZUluZGV4KCk7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgaWYgKGNhbGxGcmFt
ZS0+aXNBbnlXYXNtQ2FsbGVlKCkpIHsKICAgICAgICAgbV9mcmFtZS5tX2lzV2FzbUZyYW1lID0g
dHJ1ZTsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgICAgIG1f
ZnJhbWUubV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwogCiAgICAgICAgIGlmICht
X2ZyYW1lLm1fY2FsbGVlLmlzV2FzbSgpKQogICAgICAgICAgICAgbV9mcmFtZS5tX3dhc21GdW5j
dGlvbkluZGV4T3JOYW1lID0gbV9mcmFtZS5tX2NhbGxlZS5hc1dhc21DYWxsZWUoKS0+aW5kZXhP
ck5hbWUoKTsKLQotICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAgbV9mcmFtZS5t
X2NvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgbV9mcmFtZS5tX2J5dGVj
b2RlSW5kZXggPSAhbV9mcmFtZS5jb2RlQmxvY2soKSA/IEJ5dGVjb2RlSW5kZXgoMCkKLSAgICAg
ICAgOiBjb2RlT3JpZ2luID8gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpCi0gICAgICAgIDog
Y2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCk7Ci0KIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4IGVm
MmZjYjQyZjM1ZmU3MmU0NGRmM2UwMjI0YjJlOTA4YjI1NWVlOTguLmE5MWE5ZGQ5N2FiZWU4NzQ4
ZDA3NjdjMzIzYWVjYThkNDk4ZWI0YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAKQEAgLTcwNCw5ICs3MDQsNDcgQEAgdm9pZCBBc3NlbWJseUhl
bHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
RW50cnlGcmEKICNlbmRpZgogCiAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJz
QnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHNjcmF0Y2gsIHNraXBMaXN0KTsKIAotICAg
IExvYWRSZWdTcG9vbGVyIHNwb29sZXIoKnRoaXMsIHNjcmF0Y2gpOworICAgIC8vIFJlc3RvcmUg
dGhlIGNhbGxlZSBzYXZlIHZhbHVlIG9mIHRoZSBzY3JhdGNoLgorICAgIFJlZ2lzdGVyQXRPZmZz
ZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoc2NyYXRjaEdQUkVudHJ5SW5kZXgpOworICAg
IEFTU0VSVCghZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSk7CisgICAgQVNT
RVJUKGVudHJ5LnJlZygpLmlzR1BSKCkpOworICAgIEFTU0VSVChzY3JhdGNoID09IGVudHJ5LnJl
ZygpLmdwcigpKTsKKyNpZiBDUFUoQVJNNjQpCisgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeTIg
PSBhbGxDYWxsZWVTYXZlcy0+YXQoc2NyYXRjaEdQUkVudHJ5SW5kZXggKyAxKTsKKyAgICBBU1NF
UlRfVU5VU0VEKGVudHJ5MiwgIWRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRyeTIucmVnKCkp
KTsKKyAgICBBU1NFUlQoZW50cnkyLnJlZygpLmlzR1BSKCkpOworICAgIEFTU0VSVCh1bnVzZWRO
ZXh0U2xvdEdQUiA9PSBlbnRyeTIucmVnKCkuZ3ByKCkpOworICAgIGxvYWRQYWlyNjQoc2NyYXRj
aCwgVHJ1c3RlZEltbTMyKGVudHJ5Lm9mZnNldCgpKSwgc2NyYXRjaCwgdW51c2VkTmV4dFNsb3RH
UFIpOworI2Vsc2UKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgZW50cnkub2Zmc2V0KCkp
LCBzY3JhdGNoKTsKKyNlbmRpZgorCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZy
YW1lKTsKKyNlbmRpZiAvLyBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKK30K
Kwordm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJSZWcgdm1HUFIsIEdQUlJlZyBzY3JhdGNoR1BSKQorewor
I2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorICAgIGxvYWRQdHIoQWRk
cmVzcyh2bUdQUiwgVk06OnRvcEVudHJ5RnJhbWVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
IHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwo
c2NyYXRjaEdQUiwgUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0odm1HUFIpOworI2VuZGlmIC8vIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVH
SVNURVJTID4gMAorfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVz
RnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgZW50cnlGcmFtZUdQ
UiwgY29uc3QgUmVnaXN0ZXJTZXQmIHNraXBMaXN0KQoreworI2lmIE5VTUJFUl9PRl9DQUxMRUVf
U0FWRVNfUkVHSVNURVJTID4gMAorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6
Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgZW50cnlGcmFtZUdQUik7CisKKyAg
ICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1D
YWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CisgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9
IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7CisKKyAgICBMb2FkUmVnU3Bvb2xlciBzcG9vbGVyKCp0
aGlzLCBlbnRyeUZyYW1lR1BSKTsKIAogICAgIC8vIFJlc3RvcmUgYWxsIGNhbGxlZSBzYXZlcyBl
eGNlcHQgZm9yIHRoZSBzY3JhdGNoLgogICAgIHVuc2lnbmVkIGkgPSAwOwpAQCAtNzI4LDIzICs3
NjYsOSBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYQogICAgIH0KICAgICBzcG9vbGVyLmZpbmFs
aXplRlBSKCk7CiAKLSAgICAvLyBSZXN0b3JlIHRoZSBjYWxsZWUgc2F2ZSB2YWx1ZSBvZiB0aGUg
c2NyYXRjaC4KLSAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0
KHNjcmF0Y2hHUFJFbnRyeUluZGV4KTsKLSAgICBBU1NFUlQoIWRvbnRSZXN0b3JlUmVnaXN0ZXJz
LmdldChlbnRyeS5yZWcoKSkpOwotICAgIEFTU0VSVChlbnRyeS5yZWcoKS5pc0dQUigpKTsKLSAg
ICBBU1NFUlQoc2NyYXRjaCA9PSBlbnRyeS5yZWcoKS5ncHIoKSk7Ci0jaWYgQ1BVKEFSTTY0KQot
ICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkyID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KHNjcmF0Y2hH
UFJFbnRyeUluZGV4ICsgMSk7Ci0gICAgQVNTRVJUX1VOVVNFRChlbnRyeTIsICFkb250UmVzdG9y
ZVJlZ2lzdGVycy5nZXQoZW50cnkyLnJlZygpKSk7Ci0gICAgQVNTRVJUKGVudHJ5Mi5yZWcoKS5p
c0dQUigpKTsKLSAgICBBU1NFUlQodW51c2VkTmV4dFNsb3RHUFIgPT0gZW50cnkyLnJlZygpLmdw
cigpKTsKLSAgICBsb2FkUGFpcjY0KHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihlbnRyeS5vZmZzZXQo
KSksIHNjcmF0Y2gsIHVudXNlZE5leHRTbG90R1BSKTsKLSNlbHNlCi0gICAgbG9hZFB0cihBZGRy
ZXNzKHNjcmF0Y2gsIGVudHJ5Lm9mZnNldCgpKSwgc2NyYXRjaCk7Ci0jZW5kaWYKLQogI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKHZtR1BS
KTsKKyAgICBVTlVTRURfUEFSQU0oc2tpcExpc3QpOwogI2VuZGlmIC8vIE5VTUJFUl9PRl9DQUxM
RUVfU0FWRVNfUkVHSVNURVJTID4gMAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAppbmRleCAwZDI1M2Q5ODhlYzI4N2M4Yzk3YjU2ZDVhODc0MTVmMTE2
MWI1OGNiLi45YTQ3OWY2NzBiNmQ2ZWQ5MWQ2ODk5OGI5ZjkzYmYxMDZkZTdmYTBhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTQxMyw2ICs0MTMs
OCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJik7CisgICAgdm9pZCByZXN0b3Jl
Q2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSUmVnIHZtR1BS
LCBHUFJSZWcgc2NyYXRjaEdQUik7CisgICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBlbnRyeUZyYW1lLCBjb25zdCBS
ZWdpc3RlclNldCYgc2tpcExpc3QpOwogCiAgICAgdm9pZCBjb3B5TExJbnRCYXNlbGluZUNhbGxl
ZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVu
dHJ5RnJhbWUqJiwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IDZkNTgzYTQ4OWVkNTMwMzE4Y2Uz
MDk2YzY2YjAyZTdkMWM1OGE0YmMuLmI4NmU5YTQxMDNjODUwNmMzZmRiYmFjNTRkN2U5NGU2NjYw
YWFkOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApA
QCAtNTQsMjEgKzU0LDE0IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogCiAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24o
KTsKICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb24pOwotICAgIEhhbmRsZXJJbmZvKiBoYW5k
bGVyID0gdm0uaW50ZXJwcmV0ZXItPnVud2luZCh2bSwgY2FsbEZyYW1lLCBleGNlcHRpb24pOyAv
LyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lLgorICAgIENhdGNoSW5mbyBoYW5kbGVyID0gdm0u
aW50ZXJwcmV0ZXItPnVud2luZCh2bSwgY2FsbEZyYW1lLCBleGNlcHRpb24pOyAvLyBUaGlzIG1h
eSB1cGRhdGUgY2FsbEZyYW1lLgogCiAgICAgdm9pZCogY2F0Y2hSb3V0aW5lOwogICAgIGNvbnN0
IEluc3RydWN0aW9uKiBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBudWxscHRyOwotICAgIGlmICho
YW5kbGVyKSB7Ci0gICAgICAgIC8vIGhhbmRsZXItPnRhcmdldCBpcyBtZWFuaW5nbGVzcyBmb3Ig
Z2V0dGluZyBhIGNvZGUgb2Zmc2V0IHdoZW4gY2F0Y2hpbmcKLSAgICAgICAgLy8gdGhlIGV4Y2Vw
dGlvbiBpbiBhIERGRy9GVEwgZnJhbWUuIFRoaXMgYnl0ZWNvZGUgdGFyZ2V0IG9mZnNldCBjb3Vs
ZCBiZQotICAgICAgICAvLyBzb21ldGhpbmcgdGhhdCdzIGluIGFuIGlubGluZWQgZnJhbWUsIHdo
aWNoIG1lYW5zIGFuIGFycmF5IGFjY2VzcwotICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNvZGUg
b2Zmc2V0IGluIHRoZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKLSAgICAg
ICAgLy8gYW5kIGNhbiBjYXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhpdHMg
dG8gaGFuZGxlci0+dGFyZ2V0Ci0gICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCi0gICAg
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
PmppdFR5cGUoKSkpCi0gICAgICAgICAgICBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5hdChoYW5kbGVyLT50YXJnZXQpLnB0cigp
OworICAgIGlmIChoYW5kbGVyLm1fdmFsaWQpIHsKKyAgICAgICAgY2F0Y2hQQ0ZvckludGVycHJl
dGVyID0gaGFuZGxlci5tX2NhdGNoUENGb3JJbnRlcnByZXRlcjsKICNpZiBFTkFCTEUoSklUKQot
ICAgICAgICBjYXRjaFJvdXRpbmUgPSBoYW5kbGVyLT5uYXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgICAgIGNhdGNoUm91dGluZSA9IGhhbmRsZXIubV9uYXRpdmVDb2RlLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CiAjZWxzZQogICAgICAgICBpZiAoY2F0Y2hQQ0ZvckludGVycHJldGVy
LT5pc1dpZGUzMigpKQogICAgICAgICAgICAgY2F0Y2hSb3V0aW5lID0gTExJbnQ6OmdldFdpZGUz
MkNvZGVQdHIoY2F0Y2hQQ0ZvckludGVycHJldGVyLT5vcGNvZGVJRCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRleCA3Y2ExYjRlN2MzZmQwODRkZDI3
YWMzODUwNmFhOWM2YWVkOTVkZWIwLi45OTIyOWU0OTkzMTdjMTJhMWYzNGNiZWFjZGFlYzkwMTUz
ODA4YWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNl
SklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCkBA
IC01Nyw2ICs1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CiAg
ICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFs
UmVnaXN0ZXIgZW50cnkpOwogICAgICAgICB2b2lkIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOworICAgICAgICB2b2lk
IGNvbnZlcnRDYWxsZWVUb1ZNKFJlZ2lzdGVySUQgY2FsbGVlKTsKIAogICAgICAgICBWTSogdm0o
KSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CiAKQEAgLTE1OCw2ICsxNTksMTkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAjZW5kaWYKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZh
Y2VKSVQ6OmNvbnZlcnRDYWxsZWVUb1ZNKFJlZ2lzdGVySUQgY2FsbGVlKQorICAgIHsKKyAgICAg
ICAgYXV0byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBicmFuY2hUZXN0UHRyKENDYWxsSGVscGVy
czo6Tm9uWmVybywgY2FsbGVlLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxs
b2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICBhbmRQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBjYWxsZWUpOworICAgICAgICBs
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWUsIE1hcmtlZEJsb2NrOjpvZmZzZXRP
ZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIGNhbGxlZSk7Cisg
ICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGp1bXAoKTsKKworICAgICAgICBwcmVjaXNlQWxsb2Nh
dGlvbkNhc2UubGluayh0aGlzKTsKKyAgICAgICAgbG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoY2FsbGVlLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0
OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgY2FsbGVl
KTsKKworICAgICAgICBsb2FkZWRDYXNlLmxpbmsodGhpcyk7CisgICAgfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnREYXRhLmgKaW5kZXggNDcxZmI1ZDJmZDNiODA5Mzk2YTUyM2NlMzNmY2IyYTg1OTgz
NmFjYi4uMzdjMWFmZTZkZTc2Yzg5MzVhYzc0NmQ2MGZiNDk3ZDMxZTZlN2NhOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaApAQCAtMzIyLDYgKzMyMiwyNCBAQCBBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNvZGVQdHIoV2Fz
bU9wY29kZUlEIG9wY29kZUlEKQogI2VuZGlmCiB9CiAKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+IGdldENvZGVSZWYoV2FzbU9w
Y29kZUlEIG9wY29kZUlEKQoreworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFn
Pjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdldENvZGVQdHI8dGFnPihvcGNvZGVJRCkpOwor
fQorCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8dGFnPiBnZXRXaWRlMTZDb2RlUmVmKFdhc21PcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihnZXRXaWRlMTZDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpKTsKK30KKwordGVtcGxhdGU8UHRy
VGFnIHRhZz4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz4gZ2V0V2lk
ZTMyQ29kZVJlZihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCit7CisgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjx0YWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2V0V2lkZTMyQ29k
ZVB0cjx0YWc+KG9wY29kZUlEKSk7Cit9CisKIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBBTFdBWVNf
SU5MSU5FIExMSW50Q29kZSBnZXRDb2RlRnVuY3Rpb25QdHIoV2FzbU9wY29kZUlEIG9wY29kZUlE
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0
aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNw
cAppbmRleCBiOTEzZWVkYWIwYzQzMGZhNzg0NjI5YmUzMDkxMjQwMGU1Njk4YzE0Li4zZmJhOGQz
YTA1ZjQ0ODJiZjdlMzAxM2I3M2MyYzgzMDA1OWY0ZDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcApAQCAtNDksNiArNDksMTggQEAgSW5z
dHJ1Y3Rpb24qIHJldHVyblRvVGhyb3coVk0mIHZtKQogICAgIHJldHVybiBMTEludDo6ZXhjZXB0
aW9uSW5zdHJ1Y3Rpb25zKCk7CiB9CiAKK0luc3RydWN0aW9uKiB3YXNtUmV0dXJuVG9UaHJvdyhW
TSYgdm0pCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyNpZiBMTElOVF9UUkFDSU5HCisgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlTExJbnRTbG93UGF0aCgpKSkgeworICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgIGRhdGFMb2coIlRo
cm93aW5nIGV4Y2VwdGlvbiAiLCBKU1ZhbHVlKHNjb3BlLmV4Y2VwdGlvbigpKSwgIiAocmV0dXJu
VG9UaHJvdykuXG4iKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gTExJbnQ6Ondhc21FeGNl
cHRpb25JbnN0cnVjdGlvbnMoKTsKK30KKwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+IGNhbGxUb1Rocm93KFZNJiB2bSkKIHsKICAgICBVTlVTRURfUEFSQU0o
dm0pOwpAQCAtOTIsNCArMTA0LDMyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPiBoYW5kbGVDYXRjaChPcGNvZGVTaXplIHNpemUpCiAgICAgcmV0dXJuIHt9
OwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFu
ZGxlV2FzbUNhdGNoKE9wY29kZVNpemUgc2l6ZSkKK3sKKyAgICBzd2l0Y2ggKHNpemUpIHsKKyAg
ICBjYXNlIE9wY29kZVNpemU6Ok5hcnJvdzoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2Rl
UmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KHdhc21fY2F0Y2gpOworICAgIGNhc2UgT3Bjb2Rl
U2l6ZTo6V2lkZTE2OgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldFdpZGUxNkNvZGVSZWY8RXhj
ZXB0aW9uSGFuZGxlclB0clRhZz4od2FzbV9jYXRjaCk7CisgICAgY2FzZSBPcGNvZGVTaXplOjpX
aWRlMzI6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0V2lkZTMyQ29kZVJlZjxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPih3YXNtX2NhdGNoKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFuZGxlV2FzbUNhdGNoQWxsKE9wY29kZVNpemUgc2l6
ZSkKK3sKKyAgICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIE9wY29kZVNpemU6Ok5hcnJvdzoK
KyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
KHdhc21fY2F0Y2hfYWxsKTsKKyAgICBjYXNlIE9wY29kZVNpemU6OldpZGUxNjoKKyAgICAgICAg
cmV0dXJuIExMSW50OjpnZXRXaWRlMTZDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KHdh
c21fY2F0Y2hfYWxsKTsKKyAgICBjYXNlIE9wY29kZVNpemU6OldpZGUzMjoKKyAgICAgICAgcmV0
dXJuIExMSW50OjpnZXRXaWRlMzJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KHdhc21f
Y2F0Y2hfYWxsKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4geyB9OworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6TExJbnQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuaAppbmRleCA4MDZiMTlmNjYw
NTg2NmI4OGNlODQ5NTg3YTA0MWFkZTRmMzZkNjI5Li5kYTBlNzBkMmY1YTEzMDliYmU1ZjRiZmUx
ZWEzODBmMmRlOWM5ZmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRFeGNlcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RXhjZXB0aW9ucy5oCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBMTEludCB7CiAvLyBiZXR3
ZWVuIDEgYW5kIDkgc2xvdHMgd2lsbCBnaXZlIHlvdSBhbiAiaW5zdHJ1Y3Rpb24iIHRoYXQgdGhy
ZWFkcyB0byB0aGUKIC8vIGludGVycHJldGVyJ3MgZXhjZXB0aW9uIGhhbmRsZXIuCiBJbnN0cnVj
dGlvbiogcmV0dXJuVG9UaHJvdyhWTSYpOworSW5zdHJ1Y3Rpb24qIHdhc21SZXR1cm5Ub1Rocm93
KFZNJik7CiAKIC8vIFVzZSB0aGlzIHdoZW4geW91J3JlIHRocm93aW5nIHRvIGEgY2FsbCB0aHVu
ay4KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBjYWxsVG9U
aHJvdyhWTSYpOwpAQCAtNDksNCArNTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4gY2FsbFRvVGhyb3coVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbihWTSYpOwog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGhhbmRsZUNhdGNo
KE9wY29kZVNpemUpOwogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4gaGFuZGxlV2FzbUNhdGNoKE9wY29kZVNpemUpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGhhbmRsZVdhc21DYXRjaEFsbChPcGNvZGVTaXplKTsK
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkxMSW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCmluZGV4IDZkZjQ2ODUwZTJj
N2ViOTY4OThlYzRjNTdmY2I3N2RkODc1ZDJkNTAuLmIyY2FhMTg1NDEzMGZmOGI5MzE4MDc2ZDI3
ZGZlYmRkMjEzMzg0NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludE9mZnNldHNFeHRyYWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAi
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNs
dWRlICJKU1R5cGVJbmZvLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAj
aW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAi
TExJbnRPZmZsaW5lQXNtQ29uZmlnLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dl
YkFzc2VtYmx5LmFzbQppbmRleCA0MzZjZjY2NDkwZDcxYzVlZTliYjMwZTg2ZmU2ZjQyYmFlZTc2
ZGYxLi5mZTk4OWM4M2ExMTBiMWM4Mzg3NDNmOTczMmM5YTJiY2U1YWZkNTZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5hc20KQEAgLTI1Niw2ICsyNTYsNyBA
QCBtYWNybyB0aHJvd0V4Y2VwdGlvbihleGNlcHRpb24pCiBlbmQKIAogbWFjcm8gY2FsbFdhc21T
bG93UGF0aChzbG93UGF0aCkKKyAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzICsgVGFnT2Zmc2V0W2Nmcl0KICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92
ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKQEAgLTI3NCw2ICsyNzUsMTQgQEAgbWFjcm8gY2Fs
bFdhc21DYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKICAgICBhY3Rpb24ocjAsIHIxKQog
ZW5kCiAKK21hY3JvIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNhbGwoKQorICAgIGxvYWRwIENv
ZGVCbG9ja1tjZnJdLCB3czEKKyAgICBsb2FkaSBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6bV9u
dW1DYWxsZWVMb2NhbHNbd3MxXSwgd3MxCisgICAgbHNoaWZ0cCAzLCB3czEKKyAgICBhZGRwIG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLCB3czEKKyAgICBzdWJwIGNmciwgd3MxLCBzcAor
ZW5kCisKIG1hY3JvIHdhc21Qcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9ja1NldHRl
ciwgbG9hZFdhc21JbnN0YW5jZSkKICAgICAjIFNldCB1cCB0aGUgY2FsbCBmcmFtZSBhbmQgY2hl
Y2sgaWYgd2Ugc2hvdWxkIE9TUi4KICAgICBwcmVzZXJ2ZUNhbGxlclBDQW5kQ0ZSKCkKQEAgLTI4
MSw2ICsyOTAsOSBAQCBtYWNybyB3YXNtUHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxv
Y2tTZXR0ZXIsIGxvYWRXYXNtSW5zdGFuY2UpCiAgICAgbG9hZFdhc21JbnN0YW5jZSgpCiAgICAg
cmVsb2FkTWVtb3J5UmVnaXN0ZXJzRnJvbUluc3RhbmNlKHdhc21JbnN0YW5jZSwgd3MwLCB3czEp
CiAKKyAgICBsb2FkcCBXYXNtOjpJbnN0YW5jZTo6bV9vd25lclt3YXNtSW5zdGFuY2VdLCB3czAK
KyAgICBzdG9yZXAgd3MwLCBUaGlzQXJndW1lbnRPZmZzZXRbY2ZyXQorCiAgICAgY29kZUJsb2Nr
R2V0dGVyKHdzMCkKICAgICBjb2RlQmxvY2tTZXR0ZXIod3MwKQogCkBAIC0zMzMsMTUgKzM0NSwx
OSBAQCBtYWNybyB0cmFjZUV4ZWN1dGlvbigpCiAgICAgZW5kCiBlbmQKIAotIyBMZXNzIGNvbnZl
bmllbnQsIGJ1dCByZXF1aXJlZCBmb3Igb3Bjb2RlcyB0aGF0IGNvbGxpZGUgd2l0aCByZXNlcnZl
ZCBpbnN0cnVjdGlvbnMgKGUuZy4gd2FzbV9ub3ApCi1tYWNybyB1bnByZWZpeGVkV2FzbU9wKG9w
Y29kZU5hbWUsIG9wY29kZVN0cnVjdCwgZm4pCi0gICAgY29tbW9uT3Aob3Bjb2RlTmFtZSwgdHJh
Y2VFeGVjdXRpb24sIG1hY3JvKHNpemUpCittYWNybyBjb21tb25XYXNtT3Aob3Bjb2RlTmFtZSwg
b3Bjb2RlU3RydWN0LCBwcm9sb2d1ZSwgZm4pCisgICAgY29tbW9uT3Aob3Bjb2RlTmFtZSwgcHJv
bG9ndWUsIG1hY3JvKHNpemUpCiAgICAgICAgIGZuKG1hY3JvKGZuMikKICAgICAgICAgICAgIGZu
MihvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHNpemUpCiAgICAgICAgIGVuZCkKICAgICBlbmQp
CiBlbmQKIAorIyBMZXNzIGNvbnZlbmllbnQsIGJ1dCByZXF1aXJlZCBmb3Igb3Bjb2RlcyB0aGF0
IGNvbGxpZGUgd2l0aCByZXNlcnZlZCBpbnN0cnVjdGlvbnMgKGUuZy4gd2FzbV9ub3ApCittYWNy
byB1bnByZWZpeGVkV2FzbU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgZm4pCisgICAgY29t
bW9uV2FzbU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgdHJhY2VFeGVjdXRpb24sIGZuKQor
ZW5kCisKIG1hY3JvIHdhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGZuKQogICAgIHVu
cHJlZml4ZWRXYXNtT3Aod2FzbV8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgZm4pCiBlbmQK
QEAgLTUxMiw2ICs1MjgsMTYgQEAgb3Aod2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHMsIG1h
Y3JvICgpCiAgICAgd2FzbU5leHRJbnN0cnVjdGlvbigpCiBlbmQpCiAKK21hY3JvIGp1bXBUb0V4
Y2VwdGlvbigpCisgICAgaWYgQVJNNjRFCisgICAgICAgIG1vdmUgcjAsIGEwCisgICAgICAgIGxl
YXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsg
KGNvbnN0ZXhwciBHYXRlOjpleGNlcHRpb25IYW5kbGVyKSAqIFB0clNpemUsIGExCisgICAgICAg
IGptcCBbYTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBFeGNlcHRpb25IYW5kbGVyUHRyVGFn
CisgICAgZWxzZQorICAgICAgICBqbXAgcjAsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKKyAgICBl
bmQKK2VuZAorCiBvcCh3YXNtX3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUsIG1hY3Jv
ICgpCiAgICAgbG9hZHAgV2FzbTo6SW5zdGFuY2U6Om1fcG9pbnRlclRvVG9wRW50cnlGcmFtZVt3
YXNtSW5zdGFuY2VdLCB0NQogICAgIGxvYWRwIFt0NV0sIHQ1CkBAIC01MjMsMTQgKzU0OSw3IEBA
IG9wKHdhc21fdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAgICAj
IFNsb3cgcGF0aHMgYW5kIHRoZSB0aHJvd0V4Y2VwdGlvbiBtYWNybyBzdG9yZSB0aGUgZXhjZXB0
aW9uIGNvZGUgaW4gdGhlIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHNsb3QKICAgICBsb2Fk
aSBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFBheWxvYWRPZmZzZXRbY2ZyXSwgYTMKICAg
ICBjQ2FsbDQoX3Nsb3dfcGF0aF93YXNtX3Rocm93X2V4Y2VwdGlvbikKLQotICAgIGlmIEFSTTY0
RQotICAgICAgICBtb3ZlIHIwLCBhMAotICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhw
ciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6ZXhjZXB0
aW9uSGFuZGxlcikgKiBQdHJTaXplLCBhMQotICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRH
YXRlUHRyVGFnICMgRXhjZXB0aW9uSGFuZGxlclB0clRhZwotICAgIGVsc2UKLSAgICAgICAgam1w
IHIwLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnCi0gICAgZW5kCisgICAganVtcFRvRXhjZXB0aW9u
KCkKIGVuZCkKIAogbWFjcm8gd2FzbV90aHJvd19mcm9tX2ZhdWx0X2hhbmRsZXIoaW5zdGFuY2Up
CkBAIC01NDMsMTQgKzU2Miw3IEBAIG1hY3JvIHdhc21fdGhyb3dfZnJvbV9mYXVsdF9oYW5kbGVy
KGluc3RhbmNlKQogICAgIG1vdmUgMCwgYTEKICAgICBtb3ZlIGNmciwgYTAKICAgICBjQ2FsbDQo
X3Nsb3dfcGF0aF93YXNtX3Rocm93X2V4Y2VwdGlvbikKLQotICAgIGlmIEFSTTY0RQotICAgICAg
ICBtb3ZlIHIwLCBhMAotICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9m
ZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6ZXhjZXB0aW9uSGFuZGxl
cikgKiBQdHJTaXplLCBhMQotICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFn
ICMgRXhjZXB0aW9uSGFuZGxlclB0clRhZwotICAgIGVsc2UKLSAgICAgICAgam1wIHIwLCBFeGNl
cHRpb25IYW5kbGVyUHRyVGFnCi0gICAgZW5kCisgICAganVtcFRvRXhjZXB0aW9uKCkKIGVuZAog
CiBvcCh3YXNtX3Rocm93X2Zyb21fZmF1bHRfaGFuZGxlcl90cmFtcG9saW5lX2Zhc3RUTFMsIG1h
Y3JvICgpCkBAIC03NzAsMTEgKzc4MiwxMSBAQCBtYWNybyBzbG93UGF0aEZvcldhc21DYWxsKGN0
eCwgc2xvd1BhdGgsIHN0b3JlV2FzbUluc3RhbmNlKQogCiAgICAgICAgICAgICAjIExvYWQgcmVn
aXN0ZXJzIGZyb20gc3RhY2sKICAgICAgICAgICAgIGZvckVhY2hBcmd1bWVudEdQUihtYWNybyAo
b2Zmc2V0LCBncHIpCi0gICAgICAgICAgICAgICAgbG9hZHEgQ2FsbEZyYW1lSGVhZGVyU2l6ZSAr
IG9mZnNldFtzcCwgd3MxLCA4XSwgZ3ByCisgICAgICAgICAgICAgICAgbG9hZHEgQ2FsbEZyYW1l
SGVhZGVyU2l6ZSArIDggKyBvZmZzZXRbc3AsIHdzMSwgOF0sIGdwcgogICAgICAgICAgICAgZW5k
KQogCiAgICAgICAgICAgICBmb3JFYWNoQXJndW1lbnRGUFIobWFjcm8gKG9mZnNldCwgZnByKQot
ICAgICAgICAgICAgICAgIGxvYWRkIENhbGxGcmFtZUhlYWRlclNpemUgKyBvZmZzZXRbc3AsIHdz
MSwgOF0sIGZwcgorICAgICAgICAgICAgICAgIGxvYWRkIENhbGxGcmFtZUhlYWRlclNpemUgKyA4
ICsgb2Zmc2V0W3NwLCB3czEsIDhdLCBmcHIKICAgICAgICAgICAgIGVuZCkKIAogICAgICAgICAg
ICAgYWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKQEAgLTgxMSwxMSArODIzLDcgQEAgbWFj
cm8gc2xvd1BhdGhGb3JXYXNtQ2FsbChjdHgsIHNsb3dQYXRoLCBzdG9yZVdhc21JbnN0YW5jZSkK
ICAgICAgICAgICAgICAgICBkZWZpbmVSZXR1cm5MYWJlbChvcGNvZGVOYW1lLCBzaXplKQogICAg
ICAgICAgICAgZW5kKQogCi0gICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgd3MxCi0g
ICAgICAgICAgICBsb2FkaSBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6bV9udW1DYWxsZWVMb2Nh
bHNbd3MxXSwgd3MxCi0gICAgICAgICAgICBsc2hpZnRwIDMsIHdzMQotICAgICAgICAgICAgYWRk
cCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCwgd3MxCi0gICAgICAgICAgICBzdWJwIGNm
ciwgd3MxLCBzcAorICAgICAgICAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCiAK
ICAgICAgICAgICAgICMgV2UgbmVlZCB0byBzZXQgUEMgdG8gbG9hZCBpbmZvcm1hdGlvbiBmcm9t
IHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0sIGJ1dCB3ZQogICAgICAgICAgICAgIyBuZWVkIHRvIHBy
ZXNlcnZlIGl0cyBjdXJyZW50IHZhbHVlIHNpbmNlIGl0IG1pZ2h0IGNvbnRhaW4gYSByZXR1cm4g
dmFsdWUKQEAgLTgzNiwxMSArODQ0LDExIEBAIG1hY3JvIHNsb3dQYXRoRm9yV2FzbUNhbGwoY3R4
LCBzbG93UGF0aCwgc3RvcmVXYXNtSW5zdGFuY2UpCiAgICAgICAgICAgICB3Z2V0dShjdHgsIG1f
bnVtYmVyT2ZTdGFja0FyZ3MsIHdzMCkKICAgICAgICAgICAgIG1vdmUgbWVtb3J5QmFzZSwgUEMK
ICAgICAgICAgICAgIGZvckVhY2hBcmd1bWVudEdQUihtYWNybyAob2Zmc2V0LCBncHIpCi0gICAg
ICAgICAgICAgICAgc3RvcmVxIGdwciwgQ2FsbEZyYW1lSGVhZGVyU2l6ZSArIG9mZnNldFt3czEs
IHdzMCwgOF0KKyAgICAgICAgICAgICAgICBzdG9yZXEgZ3ByLCBDYWxsRnJhbWVIZWFkZXJTaXpl
ICsgOCArIG9mZnNldFt3czEsIHdzMCwgOF0KICAgICAgICAgICAgIGVuZCkKIAogICAgICAgICAg
ICAgZm9yRWFjaEFyZ3VtZW50RlBSKG1hY3JvIChvZmZzZXQsIGZwcikKLSAgICAgICAgICAgICAg
ICBzdG9yZWQgZnByLCBDYWxsRnJhbWVIZWFkZXJTaXplICsgb2Zmc2V0W3dzMSwgd3MwLCA4XQor
ICAgICAgICAgICAgICAgIHN0b3JlZCBmcHIsIENhbGxGcmFtZUhlYWRlclNpemUgKyA4ICsgb2Zm
c2V0W3dzMSwgd3MwLCA4XQogICAgICAgICAgICAgZW5kKQogCiAgICAgICAgICAgICBsb2FkaSBB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdLCBQQwpAQCAtMjgwNCwz
ICsyODEyLDExNCBAQCB3YXNtT3AoYXRvbWljX2ZlbmNlLCBXYXNtRHJvcEtlZXAsIG1hY3JvKGN0
eCkKICAgICBmZW5jZQogICAgIGRpc3BhdGNoKGN0eCkKIGVuZCkKKword2FzbU9wKHRocm93LCBX
YXNtVGhyb3csIG1hY3JvKGN0eCkKKyAgICBsb2FkcCBXYXNtOjpJbnN0YW5jZTo6bV9wb2ludGVy
VG9Ub3BFbnRyeUZyYW1lW3dhc21JbnN0YW5jZV0sIHQ1CisgICAgbG9hZHAgW3Q1XSwgdDUKKyAg
ICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0NSkKKworICAg
IGNhbGxXYXNtU2xvd1BhdGgoX3Nsb3dfcGF0aF93YXNtX3Rocm93KQorICAgIGp1bXBUb0V4Y2Vw
dGlvbigpCitlbmQpCisKK3dhc21PcChyZXRocm93LCBXYXNtUmV0aHJvdywgbWFjcm8oY3R4KQor
ICAgIGNhbGxXYXNtU2xvd1BhdGgoX3Nsb3dfcGF0aF93YXNtX3JldGhyb3cpCisgICAganVtcFRv
RXhjZXB0aW9uKCkKK2VuZCkKKworbWFjcm8gY2F0Y2hJbXBsKGN0eCwgc3RvcmVXYXNtSW5zdGFu
Y2UpCisgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQzCisgICAgY29udmVydENhbGxlZVRvVk0odDMp
CisgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHQzLCB0MCkKKworICAgIGxvYWRwIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hbdDNdLCB3czEKKyAg
ICBzdG9yZXAgMCwgVk06OmNhbGxlZUZvcldhc21DYXRjaFt0M10KKyAgICBzdG9yZXAgd3MxLCBD
YWxsZWVbY2ZyXQorCisgICAgbG9hZHAgVk06OmNhbGxGcmFtZUZvckNhdGNoW3QzXSwgY2ZyCisg
ICAgc3RvcmVwIDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaFt0M10KKworICAgIHJlc3RvcmVTdGFj
a1BvaW50ZXJBZnRlckNhbGwoKQorCisgICAgbG9hZHAgVGhpc0FyZ3VtZW50T2Zmc2V0W2Nmcl0s
IHdhc21JbnN0YW5jZQorICAgIGxvYWRwIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6bV9pbnN0YW5j
ZVt3YXNtSW5zdGFuY2VdLCB3YXNtSW5zdGFuY2UKKyAgICBzdG9yZVdhc21JbnN0YW5jZSh3YXNt
SW5zdGFuY2UpCisgICAgcmVsb2FkTWVtb3J5UmVnaXN0ZXJzRnJvbUluc3RhbmNlKHdhc21JbnN0
YW5jZSwgd3MwLCB3czEpCisKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKKyAgICBsb2Fk
cCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyW1BCXSwg
UEIKKyAgICBsb2FkcCBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93W3QzXSwgUEMKKyAg
ICBzdWJwIFBCLCBQQworCisgICAgY2FsbFdhc21TbG93UGF0aChfc2xvd19wYXRoX3dhc21fcmV0
cmlldmVfYW5kX2NsZWFyX2V4Y2VwdGlvbikKKyAgICBtb3ZlIHIxLCB0MQorCisgICAgd2dldHUo
Y3R4LCBtX3N0YXJ0T2Zmc2V0LCB0MikKKyAgICB3Z2V0dShjdHgsIG1fYXJndW1lbnRDb3VudCwg
dDMpCisKKyAgICBsc2hpZnRpIDMsIHQyCisgICAgc3VicCBjZnIsIHQyLCB0MgorCisuY29weUxv
b3A6CisgICAgYnRpeiB0MywgLmRvbmUKKyAgICBsb2FkcSBbdDFdLCB0NgorICAgIHN0b3JlcSB0
NiwgW3QyXQorICAgIHN1YmkgMSwgdDMKKyAgICAjIEZJWE1FOiBVc2UgYXJtIHN0b3JlLWFkZC9z
dWIgaW5zdHJ1Y3Rpb25zIGluIHdhc20gTExJbnQgY2F0Y2gKKyAgICAjIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyMTAKKyAgICBzdWJwIDgsIHQyCisgICAgYWRk
cCA4LCB0MQorICAgIGptcCAuY29weUxvb3AKKworLmRvbmU6CisgICAgdHJhY2VFeGVjdXRpb24o
KQorCisgICAgZGlzcGF0Y2goY3R4KQorZW5kCisKK2NvbW1vbldhc21PcCh3YXNtX2NhdGNoLCBX
YXNtQ2F0Y2gsIG1hY3JvKCkgZW5kLCBtYWNybyhjdHgpCisgICAgY2F0Y2hJbXBsKGN0eCwgc3Rv
cmVXYXNtSW5zdGFuY2VUb1RMUykKK2VuZCkKKworY29tbW9uV2FzbU9wKHdhc21fY2F0Y2hfbm9f
dGxzLCBXYXNtQ2F0Y2gsIG1hY3JvKCkgZW5kLCBtYWNybyhjdHgpCisgICAgY2F0Y2hJbXBsKGN0
eCwgbWFjcm8oaW5zdGFuY2UpIGVuZCkKK2VuZCkKKworbWFjcm8gY2F0Y2hBbGxJbXBsKGN0eCwg
c3RvcmVXYXNtSW5zdGFuY2UpCisgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQzCisgICAgY29udmVy
dENhbGxlZVRvVk0odDMpCisgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHQzLCB0MCkKKworICAgIGxvYWRwIFZNOjpjYWxsZWVGb3JXYXNtQ2F0
Y2hbdDNdLCB3czEKKyAgICBzdG9yZXAgMCwgVk06OmNhbGxlZUZvcldhc21DYXRjaFt0M10KKyAg
ICBzdG9yZXAgd3MxLCBDYWxsZWVbY2ZyXQorCisgICAgbG9hZHAgVk06OmNhbGxGcmFtZUZvckNh
dGNoW3QzXSwgY2ZyCisgICAgc3RvcmVwIDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaFt0M10KKwor
ICAgIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNhbGwoKQorCisgICAgbG9hZHAgVGhpc0FyZ3Vt
ZW50T2Zmc2V0W2Nmcl0sIHdhc21JbnN0YW5jZQorICAgIGxvYWRwIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6bV9pbnN0YW5jZVt3YXNtSW5zdGFuY2VdLCB3YXNtSW5zdGFuY2UKKyAgICBzdG9yZVdh
c21JbnN0YW5jZSh3YXNtSW5zdGFuY2UpCisgICAgcmVsb2FkTWVtb3J5UmVnaXN0ZXJzRnJvbUlu
c3RhbmNlKHdhc21JbnN0YW5jZSwgd3MwLCB3czEpCisKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2Zy
XSwgUEIKKyAgICBsb2FkcCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNS
YXdQb2ludGVyW1BCXSwgUEIKKyAgICBsb2FkcCBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRo
cm93W3QzXSwgUEMKKyAgICBzdWJwIFBCLCBQQworCisgICAgY2FsbFdhc21TbG93UGF0aChfc2xv
d19wYXRoX3dhc21fcmV0cmlldmVfYW5kX2NsZWFyX2V4Y2VwdGlvbikKKworICAgIHRyYWNlRXhl
Y3V0aW9uKCkKKworICAgIGRpc3BhdGNoKGN0eCkKK2VuZAorCitjb21tb25XYXNtT3Aod2FzbV9j
YXRjaF9hbGwsIFdhc21DYXRjaEFsbCwgbWFjcm8oKSBlbmQsIG1hY3JvKGN0eCkKKyAgICBjYXRj
aEFsbEltcGwoY3R4LCBzdG9yZVdhc21JbnN0YW5jZVRvVExTKQorZW5kKQorCitjb21tb25XYXNt
T3Aod2FzbV9jYXRjaF9hbGxfbm9fdGxzLCBXYXNtQ2F0Y2hBbGwsIG1hY3JvKCkgZW5kLCBtYWNy
byhjdHgpCisgICAgY2F0Y2hBbGxJbXBsKGN0eCwgbWFjcm8oaW5zdGFuY2UpIGVuZCkKK2VuZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKaW5k
ZXggZGZiOTMxODhjMDhmZDhkYmFkM2JmN2Y4NWUxODUyYjUyNDA2YjVkNi4uMWViM2U1Y2VlYWZm
ZDAzNTM4NjU5MzlkNGU1OWViYTU3OTFmYTBlNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKQEAgLTQwLDYgKzQwLDcgQEAgRXJyb3JJbnN0
YW5jZTo6RXJyb3JJbnN0YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFcnJvclR5
cGUgZXJyb3JUeXBlKQogICAgICwgbV9vdXRPZk1lbW9yeUVycm9yKGZhbHNlKQogICAgICwgbV9l
cnJvckluZm9NYXRlcmlhbGl6ZWQoZmFsc2UpCiAgICAgLCBtX25hdGl2ZUdldHRlclR5cGVFcnJv
cihmYWxzZSkKKyAgICAsIG1fY2F0Y2hhYmxlRnJvbVdhc20odHJ1ZSkKIHsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCmluZGV4IDdkMmU2NDMy
NmE4MWRiNmM3NzBhNDYzZDhmOTYzNzY3M2RmYjI5M2IuLmVmZjVlOTg3MjRiOTA2MjFiMTgyMjAy
OWEwOTUwNmI5Yzc5OWUxZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9ySW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckluc3RhbmNlLmgKQEAgLTgwLDYgKzgwLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5h
dGl2ZUdldHRlclR5cGVFcnJvcigpIHsgbV9uYXRpdmVHZXR0ZXJUeXBlRXJyb3IgPSB0cnVlOyB9
CiAgICAgYm9vbCBpc05hdGl2ZUdldHRlclR5cGVFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmF0
aXZlR2V0dGVyVHlwZUVycm9yOyB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgdm9p
ZCBzZXRDYXRjaGFibGVGcm9tV2FzbShib29sIGZsYWcpIHsgbV9jYXRjaGFibGVGcm9tV2FzbSA9
IGZsYWc7IH0KKyAgICBib29sIGlzQ2F0Y2hhYmxlRnJvbVdhc20oKSBjb25zdCB7IHJldHVybiBt
X2NhdGNoYWJsZUZyb21XYXNtOyB9CisjZW5kaWYKKwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0
cmluZyBzYW5pdGl6ZWRUb1N0cmluZyhKU0dsb2JhbE9iamVjdCopOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFN0cmluZyBzYW5pdGl6ZWRNZXNzYWdlU3RyaW5nKEpTR2xvYmFsT2JqZWN0Kik7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNhbml0aXplZE5hbWVTdHJpbmcoSlNHbG9iYWxP
YmplY3QqKTsKQEAgLTExNiw2ICsxMjEsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX291dE9m
TWVtb3J5RXJyb3IgOiAxOwogICAgIGJvb2wgbV9lcnJvckluZm9NYXRlcmlhbGl6ZWQgOiAxOwog
ICAgIGJvb2wgbV9uYXRpdmVHZXR0ZXJUeXBlRXJyb3IgOiAxOworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKyAgICBib29sIG1fY2F0Y2hhYmxlRnJvbVdhc20gOiAxOworI2VuZGlmCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAppbmRleCAyOTdmY2Q2OThmZmJhOTRiNzcyNmRlNjdkMTliMjQyNTk3
MDNhMzJiLi4zMTllNGIzZDhhYjE4MzAwNjBmMjI1NzYxYTE5MmJjY2I4MDQzN2Q0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0x
NTMsNiArMTUzLDcgQEAKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5R2xv
YmFsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUxpbmtFcnJvci5oIgpAQCAtMTYwLDYgKzE2MSw3IEBACiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Iu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5VGFnLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMYXp5Q2xhc3NT
dHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGF6eVByb3BlcnR5SW5saW5lcy5oIgpAQCAt
MjIwLDYgKzIyMiw4IEBACiAjaW5jbHVkZSAiV2Vha1NldFByb3RvdHlwZS5oIgogI2luY2x1ZGUg
IldlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0
aW9uQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlw
ZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNsdWRlICJXZWJBc3Nl
bWJseUdsb2JhbENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlHbG9iYWxQcm90
b3R5cGUuaCIKQEAgLTIzNiw2ICsyNDAsOCBAQAogI2luY2x1ZGUgIldlYkFzc2VtYmx5UnVudGlt
ZUVycm9yUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVRhZ1Byb3Rv
dHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU3lz
dGVtVHJhY2luZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAppbmRleCA5NjFjMjQ3ZTlhNzkyYTFhZmU2YzljOTg5NDA3NmYxNGY3MDgyZGVh
Li4xYmRjYzRkZTc0ZDA5MjRkMzljODRmOTUyNWM1ZTBiM2U2YWY0MTBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTE2OSwxNCArMTY5
LDE2IEBAIGNvbnN0ZXhwciBib29sIHR5cGVFeHBvc2VkQnlEZWZhdWx0ID0gdHJ1ZTsKIAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKICNkZWZpbmUgRk9SX0VBQ0hfV0VCQVNTRU1CTFlfQ09OU1RS
VUNUT1JfVFlQRShtYWNybykgXAotICAgIG1hY3JvKFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yLCB3
ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgd2ViQXNzZW1ibHlDb21waWxlRXJyb3IsIEVycm9ySW5z
dGFuY2UsICAgICAgICAgICAgIENvbXBpbGVFcnJvciwgZXJyb3IsIHR5cGVFeHBvc2VkQnlEZWZh
dWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlDb21waWxlRXJyb3IsIHdlYkFzc2VtYmx5Q29t
cGlsZUVycm9yLCB3ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgRXJyb3JJbnN0YW5jZSwgICAgICAg
ICAgICAgQ29tcGlsZUVycm9yLCBlcnJvciwgIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCisgICAg
bWFjcm8oV2ViQXNzZW1ibHlFeGNlcHRpb24sICAgIHdlYkFzc2VtYmx5RXhjZXB0aW9uLCAgICB3
ZWJBc3NlbWJseUV4Y2VwdGlvbiwgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiwgICAgRXhjZXB0
aW9uLCAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCiAgICAgbWFjcm8oV2ViQXNz
ZW1ibHlHbG9iYWwsICAgICAgIHdlYkFzc2VtYmx5R2xvYmFsLCAgICAgICB3ZWJBc3NlbWJseUds
b2JhbCwgICAgICAgSlNXZWJBc3NlbWJseUdsb2JhbCwgICAgICAgR2xvYmFsLCAgICAgICBvYmpl
Y3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCiAgICAgbWFjcm8oV2ViQXNzZW1ibHlJbnN0YW5j
ZSwgICAgIHdlYkFzc2VtYmx5SW5zdGFuY2UsICAgICB3ZWJBc3NlbWJseUluc3RhbmNlLCAgICAg
SlNXZWJBc3NlbWJseUluc3RhbmNlLCAgICAgSW5zdGFuY2UsICAgICBvYmplY3QsIHR5cGVFeHBv
c2VkQnlEZWZhdWx0KSBcCi0gICAgbWFjcm8oV2ViQXNzZW1ibHlMaW5rRXJyb3IsICAgIHdlYkFz
c2VtYmx5TGlua0Vycm9yLCAgICB3ZWJBc3NlbWJseUxpbmtFcnJvciwgICAgRXJyb3JJbnN0YW5j
ZSwgICAgICAgICAgICAgTGlua0Vycm9yLCAgICBlcnJvciwgdHlwZUV4cG9zZWRCeURlZmF1bHQp
IFwKKyAgICBtYWNybyhXZWJBc3NlbWJseUxpbmtFcnJvciwgICAgd2ViQXNzZW1ibHlMaW5rRXJy
b3IsICAgIHdlYkFzc2VtYmx5TGlua0Vycm9yLCAgICBFcnJvckluc3RhbmNlLCAgICAgICAgICAg
ICBMaW5rRXJyb3IsICAgIGVycm9yLCAgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKICAgICBtYWNy
byhXZWJBc3NlbWJseU1lbW9yeSwgICAgICAgd2ViQXNzZW1ibHlNZW1vcnksICAgICAgIHdlYkFz
c2VtYmx5TWVtb3J5LCAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5LCAgICAgICBNZW1vcnksICAg
ICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKICAgICBtYWNybyhXZWJBc3NlbWJs
eU1vZHVsZSwgICAgICAgd2ViQXNzZW1ibHlNb2R1bGUsICAgICAgIHdlYkFzc2VtYmx5TW9kdWxl
LCAgICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlLCAgICAgICBNb2R1bGUsICAgICAgIG9iamVjdCwg
dHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKLSAgICBtYWNybyhXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
ciwgd2ViQXNzZW1ibHlSdW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVudGltZUVycm9yLCBFcnJv
ckluc3RhbmNlLCAgICAgICAgICAgICBSdW50aW1lRXJyb3IsIGVycm9yLCB0eXBlRXhwb3NlZEJ5
RGVmYXVsdCkgXAotICAgIG1hY3JvKFdlYkFzc2VtYmx5VGFibGUsICAgICAgICB3ZWJBc3NlbWJs
eVRhYmxlLCAgICAgICAgd2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJs
ZSwgICAgICAgIFRhYmxlLCAgICAgICAgb2JqZWN0LCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkKKyAg
ICBtYWNybyhXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciwgd2ViQXNzZW1ibHlSdW50aW1lRXJyb3Is
IHdlYkFzc2VtYmx5UnVudGltZUVycm9yLCBFcnJvckluc3RhbmNlLCAgICAgICAgICAgICBSdW50
aW1lRXJyb3IsIGVycm9yLCAgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKKyAgICBtYWNybyhXZWJB
c3NlbWJseVRhYmxlLCAgICAgICAgd2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIHdlYkFzc2VtYmx5
VGFibGUsICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUsICAgICAgICBUYWJsZSwgICAgICAgIG9i
amVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKKyAgICBtYWNybyhXZWJBc3NlbWJseVRhZywg
ICAgICAgICAgd2ViQXNzZW1ibHlUYWcsICAgICAgICAgIHdlYkFzc2VtYmx5VGFnLCAgICAgICAg
ICBKU1dlYkFzc2VtYmx5VGFnLCAgICAgICAgICBUYWcsICAgICAgICAgIG9iamVjdCwgdHlwZUV4
cG9zZWRCeURlZmF1bHQpIAogI2Vsc2UKICNkZWZpbmUgRk9SX0VBQ0hfV0VCQVNTRU1CTFlfQ09O
U1RSVUNUT1JfVFlQRShtYWNybykKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCA1NDAxZmYzODMx
ZDg2NTA3MTU1YjE5MzI0YmUzOTdmZmJkMzNkOTM0Li5lMDc4MzNmNDdhYmMxYTRiMDkyNDIxNWM1
NzU3YmY2ZWJkZTU2NDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnNMaXN0LmgKQEAgLTU0Myw2ICs1NDMsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1l
bW9yeSgpOwogICAgIHYoQm9vbCwgdXNlVGVtcG9yYWwsIGZhbHNlLCBOb3JtYWwsICJFeHBvc2Ug
dGhlIFRlbXBvcmFsIG9iamVjdC4iKSBcCiAgICAgdihCb29sLCB1c2VXZWJBc3NlbWJseVRocmVh
ZGluZywgdHJ1ZSwgTm9ybWFsLCAiQWxsb3cgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHdhc20gdGhy
ZWFkaW5nIHNwZWMuIikgXAogICAgIHYoQm9vbCwgdXNlV2ViQXNzZW1ibHlUeXBlZEZ1bmN0aW9u
UmVmZXJlbmNlcywgZmFsc2UsIE5vcm1hbCwgIkFsbG93IGZ1bmN0aW9uIHR5cGVzIGZyb20gdGhl
IHdhc20gdHlwZWQgZnVuY3Rpb24gcmVmZXJlbmNlcyBzcGVjLiIpIFwKKyAgICB2KEJvb2wsIHVz
ZVdlYkFzc2VtYmx5RXhjZXB0aW9ucywgdHJ1ZSwgTm9ybWFsLCAiQWxsb3cgdGhlIG5ldyBzZWN0
aW9uIGFuZCBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgd2FzbSBleGNlcHRpb24gaGFuZGxpbmcgc3Bl
Yy4iKSBcCiAKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKaW5kZXggOTk2YTA2ZGFhYmE4MmNjZWZiNDNkZjNmNjVmMTMxZTZmZGU2ZWUw
Ny4uMzhlOTUxMjliYTlmMDIxMTBhMWM0M2UwNTFjNGFhNjc4YzZmZDBkMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMTI5LDExICsxMjksMTMgQEAKICNpbmNsdWRlICJK
U1dlYWtPYmplY3RSZWYuaCIKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5o
IgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlHbG9iYWwuaCIKICNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWJsZS5o
IgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRlICJKU1dpdGhTY29wZS5o
IgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk1pbmltdW1SZXNlcnZlZFpvbmVT
aXplLmgiCkBAIC0zMzQsNiArMzM2LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlLCBXVEY6OlJ1bkxvb3AqIHJ1bkxvb3AsIGJvb2wqIHN1Y2Nlc3MpCiAgICAgLCBp
bnRsU2VnbWVudHNIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SW50bFNlZ21l
bnRzPigpKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAsIHdlYkFzc2VtYmx5Q29kZUJs
b2NrSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s+KCkpCisgICAgLCB3ZWJBc3NlbWJseUV4Y2VwdGlvbkhlYXBDZWxsVHlwZShJc29IZWFw
Q2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uPigpKQogICAgICwgd2ViQXNz
ZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxXZWJBc3Nl
bWJseUZ1bmN0aW9uPigpKQogICAgICwgd2ViQXNzZW1ibHlHbG9iYWxIZWFwQ2VsbFR5cGUoSXNv
SGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseUdsb2JhbD4oKSkKICAgICAsIHdlYkFz
c2VtYmx5SW5zdGFuY2VIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJB
c3NlbWJseUluc3RhbmNlPigpKQpAQCAtMzQxLDYgKzM0NCw3IEBAIFZNOjpWTShWTVR5cGUgdm1U
eXBlLCBIZWFwVHlwZSBoZWFwVHlwZSwgV1RGOjpSdW5Mb29wKiBydW5Mb29wLCBib29sKiBzdWNj
ZXNzKQogICAgICwgd2ViQXNzZW1ibHlNb2R1bGVIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBl
OjpjcmVhdGU8SlNXZWJBc3NlbWJseU1vZHVsZT4oKSkKICAgICAsIHdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkPigpKQogICAgICwgd2ViQXNzZW1ibHlUYWJsZUhlYXBDZWxsVHlwZShJc29IZWFw
Q2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5VGFibGU+KCkpCisgICAgLCB3ZWJBc3NlbWJs
eVRhZ0hlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5VGFn
PigpKQogI2VuZGlmCiAgICAgLCBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlKCJQcmlt
aXRpdmUgR2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5SGVhcENlbGxUeXBlLmdl
dCgpLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkgLy8gSGFzaDoweDNlN2NkNzYy
CiAgICAgLCBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiSlNWYWx1ZSBHaWdhY2FnZSBB
dXhpbGlhcnkiLCBoZWFwLCBhdXhpbGlhcnlIZWFwQ2VsbFR5cGUuZ2V0KCksIGpzVmFsdWVHaWdh
Y2FnZUFsbG9jYXRvci5nZXQoKSkgLy8gSGFzaDoweDI0MWU5NDYKQEAgLTE2MjksNiArMTYzMyw3
IEBAIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsU2VnbWVudHNT
cGFjZSwgaW50bFNlZ21lbnRzSGVhcENlbGxUCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpzVG9XYXNtSUNDYWxsZWVTcGFj
ZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUb1dhc21JQ0NhbGxlZSkKIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlLCB3
ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5nZXQoKSwgSlNXZWJBc3NlbWJseUNvZGVC
bG9jaykgLy8gSGFzaDoweDlhZDk5NWNkCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1cod2ViQXNzZW1ibHlFeGNlcHRpb25TcGFjZSwgd2ViQXNzZW1ibHlFeGNlcHRpb25I
ZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24pCiBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlGdW5jdGlvblNwYWNlLCB3ZWJB
c3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmdldCgpLCBXZWJBc3NlbWJseUZ1bmN0aW9uKSAv
LyBIYXNoOjB4OGI3YzMyZGIKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
Vyh3ZWJBc3NlbWJseUdsb2JhbFNwYWNlLCB3ZWJBc3NlbWJseUdsb2JhbEhlYXBDZWxsVHlwZS5n
ZXQoKSwgSlNXZWJBc3NlbWJseUdsb2JhbCkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyh3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UsIHdlYkFzc2VtYmx5SW5zdGFuY2VI
ZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkKQEAgLTE2MzYsNiArMTY0
MSw3IEBAIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJs
eU1lbW9yeVNwYWNlLCB3ZWJBc3NlbWJseU1lbW9yCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlNb2R1bGVTcGFjZSwgd2ViQXNzZW1ibHlNb2R1bGVI
ZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlNb2R1bGUpCiBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTcGFjZSwgd2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmRIZWFwQ2VsbFR5cGUuZ2V0KCksIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2Vt
Ymx5VGFibGVTcGFjZSwgd2ViQXNzZW1ibHlUYWJsZUhlYXBDZWxsVHlwZS5nZXQoKSwgSlNXZWJB
c3NlbWJseVRhYmxlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdl
YkFzc2VtYmx5VGFnU3BhY2UsIHdlYkFzc2VtYmx5VGFnSGVhcENlbGxUeXBlLmdldCgpLCBKU1dl
YkFzc2VtYmx5VGFnKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKSAvLyBIYXNoOjB4ZDRhNWZmMDEKICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA3YTU4YjI3OWU2NzBhODQwM2QxZjM5NDEy
MzU3ZDVlNzcxMTNmNTc4Li5hYTg5YjI4YWRlMmYyNWI2Y2M4NDQwZDYxNGJjOTQ3YWUzYmE0Zjc0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKKyNpbmNsdWRlICJDYWxsZWVCaXRzLmgi
CiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIkNvbXBsZXRl
U3Vic3BhY2UuaCIKICNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCkBAIC00NTAsNiArNDUx
LDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IGludGxT
ZWdtZW50c0hlYXBDZWxsVHlwZTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgc3RkOjp1
bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5
cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlFeGNl
cHRpb25IZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4g
d2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNv
SGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUdsb2JhbEhlYXBDZWxsVHlwZTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUluc3RhbmNlSGVhcENlbGxUeXBl
OwpAQCAtNDU3LDYgKzQ1OSw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVh
cENlbGxUeXBlPiB3ZWJBc3NlbWJseU1vZHVsZUhlYXBDZWxsVHlwZTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseU1vZHVsZVJlY29yZEhlYXBDZWxsVHlw
ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseVRhYmxl
SGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFz
c2VtYmx5VGFnSGVhcENlbGxUeXBlOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoSklUKQpAQCAtNjI2
LDYgKzYyOSw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1RvV2FzbUlDQ2FsbGVlU3BhY2UpCiAgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUNvZGVCbG9ja1Nw
YWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlF
eGNlcHRpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdl
YkFzc2VtYmx5RnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKHdlYkFzc2VtYmx5R2xvYmFsU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UpCkBAIC02MzMsNiArNjM3LDcg
QEAgcHVibGljOgogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNz
ZW1ibHlNb2R1bGVTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVRhYmxlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVRhZ1NwYWNlKQogICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TcGFjZSkK
ICNlbmRpZgogCkBAIC04OTYsNiArOTAxLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihWTSwgY2FsbEZyYW1lRm9yQ2F0Y2gpOwogICAgIH0KIAorICAgIHN0YXRp
YyBwdHJkaWZmX3QgY2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGNhbGxlZUZvcldhc21DYXRjaCk7CisgICAgfQorCiAg
ICAgc3RhdGljIHB0cmRpZmZfdCB0b3BFbnRyeUZyYW1lT2Zmc2V0KCkKICAgICB7CiAgICAgICAg
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcEVudHJ5RnJhbWUpOwpAQCAtOTkwLDYgKzEw
MDAsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgdmFyYXJnc0xlbmd0aDsKICAgICBDYWxsRnJh
bWUqIG5ld0NhbGxGcmFtZVJldHVyblZhbHVlOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lRm9y
Q2F0Y2g7CisgICAgQ2FsbGVlQml0cyBjYWxsZWVGb3JXYXNtQ2F0Y2g7CiAgICAgdm9pZCogdGFy
Z2V0TWFjaGluZVBDRm9yVGhyb3c7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIHRhcmdldEludGVy
cHJldGVyUENGb3JUaHJvdzsKICAgICB1aW50MzJfdCBvc3JFeGl0SW5kZXg7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAppbmRleCBmOWMy
OTQ2MDA2MTg3M2QwMDQ0OThhODAwNDQ2NjJjZTIxN2Y2YmU0Li43OTI4MmI3N2U3ODYxNjFkNWRm
MDhhNmRmODFhNDJmZWUxMTgzOWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTE0Nyw3ICsxNDcsMTIgQEAgcHVibGljOgog
ICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sRGF0YSYg
Y29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9
CisgICAgICAgIHN0YXRpYyBib29sIGlzVHJ5KGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7
IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VHJ5OyB9CisgICAgICAg
IHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJu
IGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpDYXRjaDsgfQorICAgICAgICBzdGF0
aWMgYm9vbCBpc0FueUNhdGNoKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBj
b250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2g7IH0KICAgICAgICAgc3RhdGlj
IGJvb2wgaXNUb3BMZXZlbChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29u
dHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsOyB9CisgICAgICAgIHN0YXRp
YyBib29sIGlzTG9vcChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJv
bC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3A7IH0KKyAgICAgICAgc3RhdGljIGJvb2wg
aXNCbG9jayhjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9j
a1R5cGUoKSA9PSBCbG9ja1R5cGU6OkJsb2NrOyB9CiAKICAgICAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIHsKQEAgLTE2NCw2ICsxNjksMTIgQEAgcHVibGlj
OgogICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRvcExldmVsOgogICAgICAgICAgICAgICAg
IG91dC5wcmludCgiVG9wTGV2ZWw6ICIpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBCbG9ja1R5cGU6OlRyeToKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIlRy
eTogIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJsb2NrVHlw
ZTo6Q2F0Y2g6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJDYXRjaDogIik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvdXQucHJpbnQoIkNv
bnRpbnVhdGlvbjogIiwgKmNvbnRpbnVhdGlvbiwgIiwgU3BlY2lhbDogIik7CiAgICAgICAgICAg
ICBpZiAoc3BlY2lhbCkKQEAgLTMxNCw2ICszMjUsMTYgQEAgcHVibGljOgogICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBTdGFj
ayYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVh
Y2hhYmxlKENvbnRyb2xEYXRhJik7CiAKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJv
bFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2ln
bmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQg
ZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlz
dCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsKFN0
YWNrJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRyb2xU
eXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRGVsZWdhdGVU
b1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9sVHlwZSYpOwor
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENv
bnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5
cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1
bHRUYXJnZXRzLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKQEAgLTI5ODIsNiArMzAw
Myw2MCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9s
RGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9CiAKKy8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3IgV2FzbSBleGNlcHRpb25zIGluIHRoZSBBaXIgZ2VuZXJhdG9y
CisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjExCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiwgQ29udHJvbFR5
cGUmLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCwgY29uc3QgU2lnbmF0dXJlJiwg
U3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQsIGNvbnN0
IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUm
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRv
VW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRyb2xUeXBlJikgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hh
YmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYsIFN0YWNrJikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFVOVVNF
RF9QQVJBTShleGNlcHRpb25JbmRleCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKwogYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
UmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVz
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9
IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcigqZGF0YS5zaWduYXR1
cmUoKSwgQ2FsbFJvbGU6OkNhbGxlZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggMDgxY2MyYjI1NWVmZDk1NTcxYzNlNTkxMWU0
Mzc4MGI3OTRjYzNhMC4uZmU2YjM4ZjNjYzNjMmJkNDFlNTA3YmZjMzEyZTRiMDY1Yjk4NTM2YiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cApAQCAtNDgsNiArNDgsOCBAQAogI2luY2x1ZGUgIkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIK
ICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgorI2luY2x1ZGUgIlNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2luY2x1ZGUgIldhc21Db250
ZXh0SW5saW5lcy5oIgpAQCAtODMsMTggKzg1LDMzIEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiB9CiB9CiAKK2NsYXNzIEIzSVJHZW5lcmF0b3I7CitzdHJ1Y3QgUGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7CisgICAgdm9pZCBnZW5lcmF0ZShDQ2FsbEhlbHBlcnMm
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiwgQjNJUkdlbmVyYXRvciopIGNv
bnN0OworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX2ludmFsaWRDYWxsU2l0ZUlu
ZGV4ID0gIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKworICAgIHVuc2ln
bmVkIG1fY2FsbFNpdGVJbmRleCB7c19pbnZhbGlkQ2FsbFNpdGVJbmRleCB9OworICAgIHVuc2ln
bmVkIG1fb2Zmc2V0OworfTsKKwogY2xhc3MgQjNJUkdlbmVyYXRvciB7CiBwdWJsaWM6Ci0gICAg
dXNpbmcgRXhwcmVzc2lvblR5cGUgPSBWYWx1ZSo7CisgICAgdXNpbmcgRXhwcmVzc2lvblR5cGUg
PSBWYXJpYWJsZSo7CiAgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlw
ZSwgOD47CiAKICAgICBzdHJ1Y3QgQ29udHJvbERhdGEgewotICAgICAgICBDb250cm9sRGF0YShQ
cm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwg
QmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3Bl
Y2lhbCA9IG51bGxwdHIpCisgICAgICAgIENvbnRyb2xEYXRhKFByb2NlZHVyZSYgcHJvYywgT3Jp
Z2luIG9yaWdpbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBCbG9ja1R5cGUgdHlwZSwgdW5z
aWduZWQgc3RhY2tTaXplLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24sIEJhc2ljQmxvY2sqIHNw
ZWNpYWwgPSBudWxscHRyKQogICAgICAgICAgICAgOiBjb250cm9sQmxvY2tUeXBlKHR5cGUpCiAg
ICAgICAgICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKKyAgICAgICAgICAgICwgbV9zdGFj
a1NpemUoc3RhY2tTaXplKQogICAgICAgICAgICAgLCBjb250aW51YXRpb24oY29udGludWF0aW9u
KQogICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwpCiAgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVCh0eXBlICE9IEJsb2NrVHlwZTo6VHJ5ICYmIHR5cGUgIT0gQmxvY2tUeXBlOjpDYXRj
aCk7CisgICAgICAgICAgICBpZiAodHlwZSAhPSBCbG9ja1R5cGU6OlRvcExldmVsKQorICAgICAg
ICAgICAgICAgIG1fc3RhY2tTaXplIC09IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworCiAg
ICAgICAgICAgICBpZiAodHlwZSA9PSBCbG9ja1R5cGU6Okxvb3ApIHsKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsr
aSkKICAgICAgICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5hZGQ8VmFsdWU+KFBoaSwg
dG9CM1R5cGUoc2lnbmF0dXJlLT5hcmd1bWVudChpKSksIG9yaWdpbikpOwpAQCAtMTA0LDEyICsx
MjEsMzcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgQ29u
dHJvbERhdGEoUHJvY2VkdXJlJiBwcm9jLCBPcmlnaW4gb3JpZ2luLCBCbG9ja1NpZ25hdHVyZSBz
aWduYXR1cmUsIEJsb2NrVHlwZSB0eXBlLCB1bnNpZ25lZCBzdGFja1NpemUsIEJhc2ljQmxvY2sq
IGNvbnRpbnVhdGlvbiwgdW5zaWduZWQgdHJ5U3RhcnQsIHVuc2lnbmVkIHRyeURlcHRoKQorICAg
ICAgICAgICAgOiBjb250cm9sQmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAsIG1fc2lnbmF0
dXJlKHNpZ25hdHVyZSkKKyAgICAgICAgICAgICwgbV9zdGFja1NpemUoc3RhY2tTaXplKQorICAg
ICAgICAgICAgLCBjb250aW51YXRpb24oY29udGludWF0aW9uKQorICAgICAgICAgICAgLCBzcGVj
aWFsKG51bGxwdHIpCisgICAgICAgICAgICAsIG1fdHJ5U3RhcnQodHJ5U3RhcnQpCisgICAgICAg
ICAgICAsIG1fdHJ5RGVwdGgodHJ5RGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIFVOVVNF
RF9QQVJBTShwcm9jKTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShvcmlnaW4pOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsg
KytpKQorICAgICAgICAgICAgICAgIHBoaXMuYXBwZW5kKHByb2MuYWRkPFZhbHVlPihQaGksIHRv
QjNUeXBlKHNpZ25hdHVyZS0+cmV0dXJuVHlwZShpKSksIG9yaWdpbikpOworICAgICAgICB9CisK
ICAgICAgICAgQ29udHJvbERhdGEoKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBz
dGF0aWMgYm9vbCBpc0lmKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250
cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWY7IH0KKyAgICAgICAgc3RhdGljIGJvb2wg
aXNUcnkoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tU
eXBlKCkgPT0gQmxvY2tUeXBlOjpUcnk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNBbnlDYXRj
aChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUo
KSA9PSBCbG9ja1R5cGU6OkNhdGNoOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwo
Y29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkg
PT0gQmxvY2tUeXBlOjpUb3BMZXZlbDsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0xvb3AoY29u
c3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpMb29wOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQmxvY2soY29uc3QgQ29u
dHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tU
eXBlOjpCbG9jazsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNoKGNvbnN0IENvbnRyb2xE
YXRhJiBjb250cm9sKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udHJvbC5ibG9ja1R5
cGUoKSAhPSBCbG9ja1R5cGU6OkNhdGNoKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiBjb250cm9sLmNhdGNoS2luZCgpID09IENhdGNoS2luZDo6Q2F0
Y2g7CisgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKICAgICAgICAgewpAQCAtMTI2LDYgKzE2OCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBj
YXNlIEJsb2NrVHlwZTo6VG9wTGV2ZWw6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJUb3BM
ZXZlbDogIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJsb2Nr
VHlwZTo6VHJ5OgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVHJ5OiAiKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpDYXRjaDoKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIkNhdGNoOiAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5wcmludCgiQ29udGludWF0aW9uOiAiLCAq
Y29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKICAgICAgICAgICAgIGlmIChzcGVjaWFsKQpA
QCAtMTU0LDYgKzIwMiwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0
cjsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgY29udmVydFRyeVRvQ2F0Y2godW5zaWduZWQg
dHJ5RW5kQ2FsbFNpdGVJbmRleCwgVmFyaWFibGUqIGV4Y2VwdGlvbikKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VHJ5KTsKKyAgICAgICAg
ICAgIGNvbnRyb2xCbG9ja1R5cGUgPSBCbG9ja1R5cGU6OkNhdGNoOworICAgICAgICAgICAgbV9j
YXRjaEtpbmQgPSBDYXRjaEtpbmQ6OkNhdGNoOworICAgICAgICAgICAgbV90cnlFbmQgPSB0cnlF
bmRDYWxsU2l0ZUluZGV4OworICAgICAgICAgICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGNvbnZlcnRUcnlUb0NhdGNoQWxsKHVuc2lnbmVkIHRy
eUVuZENhbGxTaXRlSW5kZXgsIFZhcmlhYmxlKiBleGNlcHRpb24pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSk7CisgICAgICAgICAg
ICBjb250cm9sQmxvY2tUeXBlID0gQmxvY2tUeXBlOjpDYXRjaDsKKyAgICAgICAgICAgIG1fY2F0
Y2hLaW5kID0gQ2F0Y2hLaW5kOjpDYXRjaEFsbDsKKyAgICAgICAgICAgIG1fdHJ5RW5kID0gdHJ5
RW5kQ2FsbFNpdGVJbmRleDsKKyAgICAgICAgICAgIG1fZXhjZXB0aW9uID0gZXhjZXB0aW9uOwor
ICAgICAgICB9CisKICAgICAgICAgU2lnbmF0dXJlQXJnQ291bnQgYnJhbmNoVGFyZ2V0QXJpdHko
KSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoYmxvY2tUeXBlKCkgPT0gQmxvY2tU
eXBlOjpMb29wKQpAQCAtMTY5LDEzICsyMzUsNTMgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0
dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpOwogICAgICAgICB9CiAKKyAgICAgICAgdW5z
aWduZWQgdHJ5U3RhcnQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY29u
dHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBjb250cm9sQmxvY2tUeXBlID09IEJs
b2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fdHJ5U3RhcnQ7CisgICAgICAg
IH0KKworICAgICAgICB1bnNpZ25lZCB0cnlFbmQoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX3RyeUVuZDsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHRy
eURlcHRoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9j
a1R5cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6
OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeURlcHRoOworICAgICAgICB9CisKKyAg
ICAgICAgQ2F0Y2hLaW5kIGNhdGNoS2luZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAg
ICAgcmV0dXJuIG1fY2F0Y2hLaW5kOworICAgICAgICB9CisKKyAgICAgICAgVmFyaWFibGUqIGV4
Y2VwdGlvbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxv
Y2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fZXhjZXB0
aW9uOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFja1NpemU7IH0KKwogICAgIHByaXZhdGU6CisgICAgICAgIC8vIEZJWE1FOiBD
b21wcmVzcyBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBmaWVsZHMgdXNpbmcgYW4gdW5pb24K
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTIx
MgogICAgICAgICBmcmllbmQgY2xhc3MgQjNJUkdlbmVyYXRvcjsKICAgICAgICAgQmxvY2tUeXBl
IGNvbnRyb2xCbG9ja1R5cGU7CiAgICAgICAgIEJsb2NrU2lnbmF0dXJlIG1fc2lnbmF0dXJlOwor
ICAgICAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKICAgICAgICAgQmFzaWNCbG9jayogY29udGlu
dWF0aW9uOwogICAgICAgICBCYXNpY0Jsb2NrKiBzcGVjaWFsOwotICAgICAgICBSZXN1bHRMaXN0
IHBoaXM7CisgICAgICAgIFZlY3RvcjxWYWx1ZSo+IHBoaXM7CisgICAgICAgIHVuc2lnbmVkIG1f
dHJ5U3RhcnQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5RW5kOworICAgICAgICB1bnNpZ25lZCBt
X3RyeURlcHRoOworICAgICAgICBDYXRjaEtpbmQgbV9jYXRjaEtpbmQ7CisgICAgICAgIFZhcmlh
YmxlKiBtX2V4Y2VwdGlvbjsKICAgICB9OwogCiAgICAgdXNpbmcgQ29udHJvbFR5cGUgPSBDb250
cm9sRGF0YTsKQEAgLTI3Myw2ICszNzksMTYgQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYpOwog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxl
KENvbnRyb2xEYXRhJik7CiAKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUm
IHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJl
JiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0
aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsKFN0YWNrJiwg
Q29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRD
YXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRyb2xUeXBlJik7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRGVsZWdhdGVUb1VucmVh
Y2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9sVHlwZSYpOworCiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xE
YXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29u
ZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25z
dCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJn
ZXRzLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKQEAgLTI4NiwyMCArNDAyLDM2IEBA
IHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5k
aXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CiAgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOwotICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUlu
c3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFu
Y2UsIFZhbHVlKiBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7CiAgICAgQjM6OlZhbHVlKiBjcmVhdGVDYWxsUGF0
Y2hwb2ludChCYXNpY0Jsb2NrKiwgT3JpZ2luLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBjb25zdCBTY29wZWRMYW1iZGE8dm9pZChQYXRjaHBvaW50VmFs
dWUqKT4mIHBhdGNocG9pbnRGdW5jdG9yKTsKIAogICAgIHZvaWQgZHVtcChjb25zdCBDb250cm9s
U3RhY2smLCBjb25zdCBTdGFjayogZXhwcmVzc2lvblN0YWNrKTsKICAgICB2b2lkIHNldFBhcnNl
cihGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFy
c2VyOyB9OwogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2FscygpIHsgfQotICAgIHZvaWQg
ZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IH0KKyAgICB2b2lkIGRpZFBvcFZhbHVlRnJvbVN0YWNr
KCkgeyAtLW1fc3RhY2tTaXplOyB9CiAKICAgICBWYWx1ZSogY29uc3RhbnQoQjM6OlR5cGUsIHVp
bnQ2NF90IGJpdHMsIHN0ZDo6b3B0aW9uYWw8T3JpZ2luPiA9IHN0ZDo6bnVsbG9wdCk7CiAgICAg
VmFsdWUqIGZyYW1lUG9pbnRlcigpOworICAgIHZvaWQgaW5zZXJ0RW50cnlTd2l0Y2goKTsKICAg
ICB2b2lkIGluc2VydENvbnN0YW50cygpOwogCiAgICAgQjM6OlR5cGUgdG9CM1Jlc3VsdFR5cGUo
QmxvY2tTaWduYXR1cmUpOwogCisgICAgdm9pZCBhZGRTdGFja01hcCh1bnNpZ25lZCBjYWxsU2l0
ZUluZGV4LCBTdGFja01hcCYmIHN0YWNrbWFwKQorICAgIHsKKyAgICAgICAgbV9zdGFja21hcHMu
YWRkKENhbGxTaXRlSW5kZXgoY2FsbFNpdGVJbmRleCksIFdURk1vdmUoc3RhY2ttYXApKTsKKyAg
ICB9CisKKyAgICBTdGFja01hcHMmJiB0YWtlU3RhY2ttYXBzKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBXVEZNb3ZlKG1fc3RhY2ttYXBzKTsKKyAgICB9CisKKyAgICBWZWN0b3I8VW5saW5rZWRI
YW5kbGVySW5mbz4mJiB0YWtlRXhjZXB0aW9uSGFuZGxlcnMoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdURk1vdmUobV9leGNlcHRpb25IYW5kbGVycyk7CisgICAgfQorCiBwcml2YXRlOgogICAg
IHZvaWQgZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOwog
CkBAIC0zMDcsMjggKzQzOSwzMyBAQCBwcml2YXRlOgogICAgIHZvaWQgZW1pdExvb3BUaWVyVXBD
aGVjayh1aW50MzJfdCBsb29wSW5kZXgsIGNvbnN0IFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgY29u
c3QgU3RhY2smIG5ld1N0YWNrKTsKIAogICAgIHZvaWQgZW1pdFdyaXRlQmFycmllckZvckpTV3Jh
cHBlcigpOwotICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4
cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3Ap
OworICAgIFZhbHVlKiBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihWYWx1ZSogcG9pbnRlciwg
dWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CiAgICAgQjM6OktpbmQgbWVtb3J5
S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9wKTsKLSAgICBFeHByZXNzaW9uVHlwZSBlbWl0TG9hZE9w
KExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7Ci0g
ICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
RXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisgICAgVmFsdWUqIGVtaXRM
b2FkT3AoTG9hZE9wVHlwZSwgVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7CisgICAg
dm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgVmFsdWUqIHBvaW50ZXIsIFZhbHVlKiwgdWlu
dDMyX3Qgb2Zmc2V0KTsKIAotICAgIEV4cHJlc3Npb25UeXBlIHNhbml0aXplQXRvbWljUmVzdWx0
KEV4dEF0b21pY09wVHlwZSwgVHlwZSwgRXhwcmVzc2lvblR5cGUgcmVzdWx0KTsKLSAgICBFeHBy
ZXNzaW9uVHlwZSBlbWl0QXRvbWljTG9hZE9wKEV4dEF0b21pY09wVHlwZSwgVHlwZSwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KTsKLSAgICB2b2lkIGVtaXRBdG9taWNT
dG9yZU9wKEV4dEF0b21pY09wVHlwZSwgVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhw
cmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7Ci0gICAgRXhwcmVzc2lvblR5cGUg
ZW1pdEF0b21pY0JpbmFyeVJNV09wKEV4dEF0b21pY09wVHlwZSwgVHlwZSwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7Ci0gICAg
RXhwcmVzc2lvblR5cGUgZW1pdEF0b21pY0NvbXBhcmVFeGNoYW5nZShFeHRBdG9taWNPcFR5cGUs
IFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVkLCBF
eHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBWYWx1ZSogc2FuaXRp
emVBdG9taWNSZXN1bHQoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1ZSogcmVzdWx0KTsKKyAg
ICBWYWx1ZSogZW1pdEF0b21pY0xvYWRPcChFeHRBdG9taWNPcFR5cGUsIFR5cGUsIFZhbHVlKiBw
b2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOworICAgIHZvaWQgZW1pdEF0b21pY1N0b3JlT3AoRXh0
QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUqLCB1aW50MzJfdCBvZmZz
ZXQpOworICAgIFZhbHVlKiBlbWl0QXRvbWljQmluYXJ5Uk1XT3AoRXh0QXRvbWljT3BUeXBlLCBU
eXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUqLCB1aW50MzJfdCBvZmZzZXQpOworICAgIFZhbHVl
KiBlbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0b21pY09wVHlwZSwgVHlwZSwgVmFsdWUq
IHBvaW50ZXIsIFZhbHVlKiBleHBlY3RlZCwgVmFsdWUqLCB1aW50MzJfdCBvZmZzZXQpOwogCi0g
ICAgdm9pZCB1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSBwaGksIGNvbnN0IEV4cHJlc3Npb25U
eXBlIHNvdXJjZSk7Ci0gICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYg
cmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHN0YWNrKTsKKyAgICB2b2lkIHVuaWZ5KFZh
bHVlKiBwaGksIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSk7CisgICAgdm9pZCB1bmlmeVZh
bHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYgcmVzdWx0U3RhY2ssIGNvbnN0IENvbnRyb2xEYXRh
JiBibG9jayk7CiAKLSAgICB2b2lkIGVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlLCBF
eHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCk7CisgICAgdm9pZCBlbWl0
Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCk7
CiAKLSAgICBpbnQzMl90IFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0
KEV4cHJlc3Npb25UeXBlJiwgdWludDMyX3QpOwotICAgIEV4cHJlc3Npb25UeXBlIFdBUk5fVU5V
U0VEX1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKEV4dEF0b21pY09w
VHlwZSwgRXhwcmVzc2lvblR5cGUsIHVpbnQzMl90KTsKKyAgICBpbnQzMl90IFdBUk5fVU5VU0VE
X1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KFZhbHVlKiYsIHVpbnQzMl90KTsKKyAgICBW
YWx1ZSogV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNP
cHMoRXh0QXRvbWljT3BUeXBlLCBWYWx1ZSosIHVpbnQzMl90KTsKIAogICAgIHZvaWQgcmVzdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiwgQmFzaWNCbG9jayosIFZhbHVlKik7CiAg
ICAgZW51bSBjbGFzcyBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCB7IE5vLCBZZXMgfTsKLSAgICB2
b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0
LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiwg
QmFzaWNCbG9jayopOworICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVz
dG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiwgVmFsdWUqIGlu
c3RhbmNlLCBQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKiwgYm9vbCByZXN0b3JlSW5zdGFuY2UgPSB0
cnVlKTsKKworICAgIFZhbHVlKiBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIodW5zaWduZWQmIGluZGV4
SW5CdWZmZXIsIFZhbHVlKiBwb2ludGVyLCBCMzo6VHlwZSk7CisgICAgdm9pZCBjb25uZWN0Q29u
dHJvbEVudHJ5KHVuc2lnbmVkJiBpbmRleEluQnVmZmVyLCBWYWx1ZSogcG9pbnRlciwgQ29udHJv
bERhdGEmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBDb250cm9sRGF0YSYgY3VycmVudERhdGEs
IGJvb2wgZmlsbExvb3BQaGlzID0gZmFsc2UpOworICAgIFZhbHVlKiBlbWl0Q2F0Y2hJbXBsKENh
dGNoS2luZCwgQ29udHJvbFR5cGUmLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCA9IDApOworICAg
IFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25z
KEJhc2ljQmxvY2sqLCBQYXRjaHBvaW50VmFsdWUqKTsKIAogICAgIE9yaWdpbiBvcmlnaW4oKTsK
IApAQCAtMzM5LDYgKzQ3Niw2MiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXRlckxv
b3BzLmxhc3QoKTsKICAgICB9CiAKKyAgICBFeHByZXNzaW9uVHlwZSBwdXNoKFR5cGUgdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBwdXNoKHRvQjNUeXBlKHR5cGUpKTsKKyAgICB9CisKKyAg
ICBFeHByZXNzaW9uVHlwZSBwdXNoKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICArK21f
c3RhY2tTaXplOworICAgICAgICBpZiAobV9zdGFja1NpemUgPiBtX21heFN0YWNrU2l6ZSkgewor
ICAgICAgICAgICAgbV9tYXhTdGFja1NpemUgPSBtX3N0YWNrU2l6ZTsKKyAgICAgICAgICAgIFZh
cmlhYmxlKiB2YXIgPSBtX3Byb2MuYWRkVmFyaWFibGUodHlwZSk7CisgICAgICAgICAgICBtX3N0
YWNrLmFwcGVuZCh2YXIpOworICAgICAgICAgICAgcmV0dXJuIHZhcjsKKyAgICAgICAgfQorCisg
ICAgICAgIFZhcmlhYmxlKiB2YXIgPSBtX3N0YWNrW21fc3RhY2tTaXplIC0gMV07CisgICAgICAg
IGlmICh2YXItPnR5cGUoKSA9PSB0eXBlKQorICAgICAgICAgICAgcmV0dXJuIHZhcjsKKworICAg
ICAgICB2YXIgPSBtX3Byb2MuYWRkVmFyaWFibGUodHlwZSk7CisgICAgICAgIG1fc3RhY2tbbV9z
dGFja1NpemUgLSAxXSA9IHZhcjsKKyAgICAgICAgcmV0dXJuIHZhcjsKKyAgICB9CisKKyAgICBF
eHByZXNzaW9uVHlwZSBwdXNoKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZhcmlhYmxl
KiB2YXIgPSBwdXNoKHZhbHVlLT50eXBlKCkpOworICAgICAgICBzZXQodmFyLCB2YWx1ZSk7Cisg
ICAgICAgIHJldHVybiB2YXI7CisgICAgfQorCisgICAgVmFsdWUqIGdldChCYXNpY0Jsb2NrKiBi
bG9jaywgVmFyaWFibGUqIHZhcmlhYmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBvcmlnaW4oKSwgdmFyaWFi
bGUpOworICAgIH0KKworICAgIFZhbHVlKiBnZXQoVmFyaWFibGUqIHZhcmlhYmxlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdldChtX2N1cnJlbnRCbG9jaywgdmFyaWFibGUpOworICAgIH0KKwor
ICAgIFZhbHVlKiBzZXQoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxlKiBkc3QsIFZhbHVlKiBz
cmMpCisgICAgeworICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVl
PihtX3Byb2MsIEIzOjpTZXQsIG9yaWdpbigpLCBkc3QsIHNyYyk7CisgICAgfQorCisgICAgVmFs
dWUqIHNldChWYXJpYWJsZSogZHN0LCBWYWx1ZSogc3JjKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHNldChtX2N1cnJlbnRCbG9jaywgZHN0LCBzcmMpOworICAgIH0KKworICAgIFZhbHVlKiBzZXQo
VmFyaWFibGUqIGRzdCwgVmFyaWFibGUqIHNyYykKKyAgICB7CisgICAgICAgIHJldHVybiBzZXQo
ZHN0LCBnZXQoc3JjKSk7CisgICAgfQorCiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRv
cj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OwogICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBt
X2luZm87CiAgICAgY29uc3QgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZyB9OwpAQCAtMzQ4LDEwICs1NDEsMTIgQEAgcHJpdmF0ZToKICAgICBUaWVyVXBDb3Vu
dCogbV90aWVyVXAgeyBudWxscHRyIH07CiAKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKLSAgICBC
YXNpY0Jsb2NrKiBtX3Jvb3RCbG9jayB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IG1fcm9vdEJsb2NrczsKKyAgICBCYXNpY0Jsb2NrKiBtX3RvcExldmVsQmxvY2s7CiAgICAg
QmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAgVmVjdG9yPHVpbnQz
Ml90PiBtX291dGVyTG9vcHM7CiAgICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9sb2NhbHM7CisgICAg
VmVjdG9yPFZhcmlhYmxlKj4gbV9zdGFjazsKICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3QgZWFjaCBjYWxsIHNpdGUg
YW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVk
IHdpdGguCiAgICAgdW5zaWduZWQmIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKICAgICBI
YXNoTWFwPFZhbHVlS2V5LCBWYWx1ZSo+IG1fY29uc3RhbnRQb29sOwpAQCAtMzY1LDYgKzU2MCw3
IEBAIHByaXZhdGU6CiAKICAgICBWYWx1ZSogbV9pbnN0YW5jZVZhbHVlIHsgbnVsbHB0ciB9OyAv
LyBBbHdheXMgdXNlIHRoZSBhY2Nlc3NvciBiZWxvdyB0byBlbnN1cmUgdGhlIGluc3RhbmNlIHZh
bHVlIGlzIG1hdGVyaWFsaXplZCB3aGVuIHVzZWQuCiAgICAgYm9vbCBtX3VzZXNJbnN0YW5jZVZh
bHVlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzQ2F0Y2ggeyBmYWxzZSB9OwogICAgIFZhbHVl
KiBpbnN0YW5jZVZhbHVlKCkKICAgICB7CiAgICAgICAgIG1fdXNlc0luc3RhbmNlVmFsdWUgPSB0
cnVlOwpAQCAtMzczLDEwICs1NjksMjkgQEAgcHJpdmF0ZToKIAogICAgIHVpbnQzMl90IG1fbWF4
TnVtSlNDYWxsQXJndW1lbnRzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtSW1wb3J0RnVuY3Rp
b25zOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV90cnlEZXB0aCB7IDAgfTsKKyAgICBDaGVj
a2VkPHVuc2lnbmVkPiBtX2NhbGxTaXRlSW5kZXggeyAwIH07CisgICAgQ2hlY2tlZDx1bnNpZ25l
ZD4gbV9zdGFja1NpemUgeyAwIH07CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9tYXhTdGFja1Np
emUgeyAwIH07CisgICAgU3RhY2tNYXBzIG1fc3RhY2ttYXBzOworICAgIFZlY3RvcjxVbmxpbmtl
ZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwogfTsKIAordm9pZCBQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlOjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCBCM0lSR2VuZXJhdG9yKiBnZW5lcmF0b3Ip
IGNvbnN0Cit7CisgICAgaWYgKG1fY2FsbFNpdGVJbmRleCA9PSBzX2ludmFsaWRDYWxsU2l0ZUlu
ZGV4KQorICAgICAgICByZXR1cm47CisKKyAgICBTdGFja01hcCB2YWx1ZXM7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9vZmZzZXQ7IGkgPCBwYXJhbXMudmFsdWUoKS0+bnVtQ2hpbGRyZW4oKTsg
KytpKQorICAgICAgICB2YWx1ZXMuY29uc3RydWN0QW5kQXBwZW5kKHBhcmFtc1tpXSwgcGFyYW1z
LnZhbHVlKCktPmNoaWxkKGkpLT50eXBlKCkpOworICAgIGdlbmVyYXRvci0+YWRkU3RhY2tNYXAo
bV9jYWxsU2l0ZUluZGV4LCBXVEZNb3ZlKHZhbHVlcykpOworICAgIGppdC5zdG9yZTMyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKG1fY2FsbFNpdGVJbmRleCksIENDYWxsSGVscGVyczo6dGFn
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7Cit9CisKIC8v
IE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJseSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZz
ZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQgMzItYml0IG9mZnNldHMgaW4gQjMuCi1pbnQz
Ml90IEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUm
IHB0ciwgdWludDMyX3Qgb2Zmc2V0KQoraW50MzJfdCBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50
ZXJQbHVzT2Zmc2V0KFZhbHVlKiYgcHRyLCB1aW50MzJfdCBvZmZzZXQpCiB7CiAgICAgaWYgKHN0
YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkgewogICAgICAgICBwdHIgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIHB0ciwgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG9m
ZnNldCkpOwpAQCAtNDI4LDggKzY0Myw5IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3Io
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAg
LCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzKG1fcHJvYykKICAgICAsIG1fbnVtSW1wb3J0RnVu
Y3Rpb25zKGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpKQogewotICAgIG1fcm9vdEJsb2NrID0g
bV9wcm9jLmFkZEJsb2NrKCk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBtX3Jvb3RCbG9jazsKKyAg
ICBtX3RvcExldmVsQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICBtX3Jvb3RCbG9ja3Mu
YXBwZW5kKG1fcHJvYy5hZGRCbG9jaygpKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fcm9vdEJs
b2Nrc1swXTsKIAogICAgIC8vIEZJWE1FIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIHBpbiByZWdp
c3RlcnMgaGVyZSBpZiB0aGVyZSdzIG5vIG1lbW9yeS4gSXQgbWFrZXMgd2FzbSAtPiB3YXNtIHRo
dW5rcyBzaW1wbGVyIGZvciBub3cuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjY2MjMKICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQ
aW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAtNDYxLDYgKzY3NywyNiBAQCBCM0lSR2VuZXJh
dG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1
cmUmIHByb2NlZHVyZQogICAgICAgICB9KTsKICAgICB9CiAKKyAgICB7CisgICAgICAgIEIzOjpQ
YXRjaHBvaW50VmFsdWUqIGdldEluc3RhbmNlID0gbV90b3BMZXZlbEJsb2NrLT5hcHBlbmROZXc8
QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSk7Cisg
ICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgICAgICBnZXRJbnN0YW5j
ZS0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBj
bG9iYmVycyB3YXNtQ29udGV4dEluc3RhbmNlIHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3Jl
IGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgorICAgICAgICAg
ICAgLy8gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIEFyZ3VtZW50UmVnIHRvIHRoaXMgKGxv
Z2ljYWxseSkgaW1tdXRhYmxlIHBpbm5lZCByZWdpc3Rlci4KKyAgICAgICAgICAgIGdldEluc3Rh
bmNlLT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IGZhbHNlOworICAgICAgICAgICAgZ2V0SW5zdGFu
Y2UtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgZ2V0SW5zdGFuY2Ut
PnJlc3VsdENvbnN0cmFpbnRzID0geyBWYWx1ZVJlcDo6cmVnKG1fd2FzbUNvbnRleHRJbnN0YW5j
ZUdQUikgfTsKKyAgICAgICAgfQorICAgICAgICBnZXRJbnN0YW5jZS0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAg
ICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRj
aChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2Ny
YXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0
YW5jZShwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAg
ICAgbV9pbnN0YW5jZVZhbHVlID0gZ2V0SW5zdGFuY2U7CisgICAgfQorCiAgICAgewogICAgICAg
ICBhdXRvKiBjYWxsZWVNb3ZlTG9jYXRpb24gPSAmY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2Nh
dGlvbjsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBz
aXplb2YoUmVnaXN0ZXIpIDwgV2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRl
cywgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CkBAIC00OTQsMTcgKzczMCwxMCBA
QCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBp
bmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgIH0KIAogICAgIHsKLSAgICAgICAgQjM6OlBh
dGNocG9pbnRWYWx1ZSogc3RhY2tPdmVyZmxvd0NoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigp
KTsKLSAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gc3RhY2tPdmVyZmxvd0NoZWNrOworICAgICAg
ICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBzdGFja092ZXJmbG93Q2hlY2sgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgVm9pZCwgT3JpZ2luKCkp
OworICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmFwcGVuZFNvbWVSZWdpc3RlcihpbnN0YW5j
ZVZhbHVlKCkpOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmFwcGVuZFNvbWVSZWdpc3Rl
cihmcmFtZVBvaW50ZXIoKSk7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+Y2xvYmJlcihS
ZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotICAgICAgICBpZiAoIUNvbnRl
eHQ6OnVzZUZhc3RUTFMoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRv
V2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRvZXMg
bm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUu
Ci0gICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcg
dG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgotICAgICAgICAg
ICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IGZhbHNlOwotICAg
ICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsK
LSAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+cmVzdWx0Q29uc3RyYWludHMgPSB7IFZh
bHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSB9OwotICAgICAgICB9CiAgICAg
ICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMjsKICAgICAg
ICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICBjb25zdCBDaGVja2VkPGludDMyX3Q+IHdhc21GcmFtZVNpemUgPSBwYXJhbXMucHJvYygp
LmZyYW1lU2l6ZSgpOwpAQCAtNTI2LDE5ICs3NTUsMTUgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1
cmUKICAgICAgICAgICAgIGJvb2wgbmVlZFVuZGVyZmxvd0NoZWNrID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNoZWNrU2l6ZSkgPiBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCk7CiAgICAgICAg
ICAgICBib29sIG5lZWRzT3ZlcmZsb3dDaGVjayA9IG1fbWFrZXNDYWxscyB8fCB3YXNtRnJhbWVT
aXplID49IHN0YXRpY19jYXN0PGludDMyX3Q+KG1pbmltdW1QYXJlbnRDaGVja1NpemUpIHx8IG5l
ZWRVbmRlcmZsb3dDaGVjazsKIAotICAgICAgICAgICAgR1BSUmVnIGNvbnRleHRJbnN0YW5jZSA9
IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHBhcmFtc1swXS5ncHIoKSA6IG1fd2FzbUNvbnRleHRJ
bnN0YW5jZUdQUjsKLQogICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgbGVhZiBmdW5jdGlvbnMg
dG8gbm90IGRvIHN0YWNrIGNoZWNrcyBpZiB0aGVpciBmcmFtZSBzaXplIGlzIHdpdGhpbgogICAg
ICAgICAgICAgLy8gY2VydGFpbiBsaW1pdHMgc2luY2UgdGhlaXIgY2FsbGVyIHdvdWxkIGhhdmUg
YWxyZWFkeSBkb25lIHRoZSBjaGVjay4KICAgICAgICAgICAgIGlmIChuZWVkc092ZXJmbG93Q2hl
Y2spIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGNvbnRleHRJbnN0YW5jZSA9
IHBhcmFtc1swXS5ncHIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgZnAgPSBwYXJhbXNbMV0u
Z3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcGFyYW1zLmdwU2NyYXRj
aCgwKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBwYXJhbXMuZ3BTY3JhdGNo
KDEpOwogCi0gICAgICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJbnN0YW5j
ZSk7Ci0KICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Y29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBz
Y3JhdGNoMik7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigtY2hlY2tTaXplKSwgZnAsIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7CkBAIC01NDgsMTIgKzc3Myw2IEBAIEIzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFBy
b2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtvdmVy
Zmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4o
VGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewot
ICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93IGNoZWNrIGlzIG5lZWRlZCwgYnV0IHRoZSBp
bnN0YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMgdG8gYmUgY29ycmVjdC4KLSAgICAgICAgICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2Fs
bEhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3Rl
cigpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4
dEluc3RhbmNlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ug
c2FpZCB3ZSdkIHJldHVybiBhIHBvaW50ZXIuIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gYmVj
YXVzZSBpdCBpc24ndCB1c2VkLCBidXQgdGhlIHBhdGNocG9pbnQgY29uc2VydmF0aXZlbHkgc2Fp
ZCBpdCBoYWQgZWZmZWN0cyAocG90ZW50aWFsIHN0YWNrIGNoZWNrKSB3aGljaCBwcmV2ZW50IGl0
IGZyb20gZ2V0dGluZyByZW1vdmVkLgogICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAgICB9
CkBAIC01NjQsOSArNzgzLDEwIEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgIG1f
Y3VycmVudEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CiB9CiAKLXZvaWQgQjNJUkdlbmVyYXRv
cjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQg
cmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnks
IFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaykKK3Zv
aWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNh
Y2hlZFN0YWNrTGltaXQgcmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9y
bWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Js
b2NrKiBibG9jaywgYm9vbCByZXN0b3JlSW5zdGFuY2UpCiB7Ci0gICAgcmVzdG9yZVdhc21Db250
ZXh0SW5zdGFuY2UocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKKyAgICBpZiAocmVzdG9yZUluc3Rh
bmNlKQorICAgICAgICByZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShwcm9jLCBibG9jaywgaW5z
dGFuY2UpOwogCiAgICAgaWYgKHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0ID09IFJlc3RvcmVDYWNo
ZWRTdGFja0xpbWl0OjpZZXMpIHsKICAgICAgICAgLy8gVGhlIEluc3RhbmNlIGNhY2hlcyB0aGUg
c3RhY2sgbGltaXQsIGJ1dCBhbHNvIGtub3dzIHdoZXJlIGl0cyBjYW5vbmljYWwgbG9jYXRpb24g
aXMuCkBAIC02MzQsOSArODU0LDc4IEBAIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpmcmFtZVBvaW50
ZXIoKQogICAgIHJldHVybiBtX2ZyYW1lUG9pbnRlcjsKIH0KIAordm9pZCBCM0lSR2VuZXJhdG9y
OjppbnNlcnRFbnRyeVN3aXRjaCgpCit7CisgICAgbV9wcm9jLnNldE51bUVudHJ5cG9pbnRzKG1f
cm9vdEJsb2Nrcy5zaXplKCkpOworCisgICAgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9y
PiBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6QWlyOjpQcm9s
b2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNv
ZGUmIGNvZGUpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOworCisgICAgICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gRklYTUU6IEhhbmRsaW5nIHByZWNpc2UgYWxsb2NhdGlvbnMgaW4gV2FzbUIz
SVJHZW5lcmF0b3IgY2F0Y2ggZW50cnlwb2ludHMgbWlnaHQgYmUgdW5uZWNlc3NhcnkKKyAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyMTMK
KyAgICAgICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQ
dHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoUHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAg
ICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpi
bG9ja01hc2spLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkZv
b3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1wKCk7CisKKyAgICAgICAg
ICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBQcmVjaXNlQWxsb2Nh
dGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNl
QWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgICAg
ICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LnJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJJbmZvOjpyZWdU
MCwgR1BSSW5mbzo6cmVnVDMpOworCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxlZUZvcldhc21DYXRjaE9mZnNldCgpKSwg
R1BSSW5mbzo6cmVnVDMpOworICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAs
IFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hPZmZzZXQoKSkpOworICAgICAgICBqaXQuZW1pdFB1dFRv
Q2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QzLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwor
CisgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Qw
LCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihu
dWxscHRyKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbEZy
YW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOworCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mSW5zdGFuY2UoKSksIEdQUkluZm86OnJlZ1QzKTsKKyAg
ICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjpyZWdUMyk7CisKKyAg
ICAgICAgaml0LnByb2JlKFtdKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKKyAgICAg
ICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJ
bmRleCgpOworICAgICAgICAgICAgT3B0aW1pemluZ0pJVENhbGxlZSogY2FsbGVlID0gYml0d2lz
ZV9jYXN0PE9wdGltaXppbmdKSVRDYWxsZWUqPihjYWxsRnJhbWUtPmNhbGxlZSgpLmFzV2FzbUNh
bGxlZSgpKTsKKyAgICAgICAgICAgIGNvbnN0IFN0YWNrTWFwJiBzdGFja21hcCA9IGNhbGxlZS0+
c3RhY2ttYXAoY2FsbFNpdGVJbmRleCk7CisgICAgICAgICAgICBWTSogdm0gPSBjb250ZXh0Lmdw
cjxWTSo+KEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIHVpbnQ2NF90KiBidWZmZXIgPSB2
bS0+d2FzbUNvbnRleHQuc2NyYXRjaEJ1ZmZlckZvclNpemUoc3RhY2ttYXAuc2l6ZSgpICogOCk7
CisgICAgICAgICAgICBsb2FkVmFsdWVzSW50b0J1ZmZlcihjb250ZXh0LCBzdGFja21hcCwgYnVm
ZmVyKTsKKworICAgICAgICAgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSA9
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJ1ZmZlcik7CisgICAgICAgIH0sIG51bGxwdHIpOwor
CisgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJh
bWVTaXplKCkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisgICAgfSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgbV9yb290QmxvY2tzLnNpemUoKTsgKytpKQorICAgICAgICBtX3Byb2MuY29kZSgpLnNldFBy
b2xvZ3VlRm9yRW50cnlwb2ludChpLCBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yLmNvcHlSZWYoKSk7
CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fdG9wTGV2ZWxCbG9jazsKKyAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVudHJ5U3dpdGNoLCBPcmlnaW4oKSk7Cisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcm9vdEJsb2NrcykKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZFN1Y2Nlc3NvcihGcmVxdWVudGVkQmxvY2soYmxvY2spKTsKK30KKwog
dm9pZCBCM0lSR2VuZXJhdG9yOjppbnNlcnRDb25zdGFudHMoKQogewogICAgIG1fY29uc3RhbnRJ
bnNlcnRpb25WYWx1ZXMuZXhlY3V0ZShtX3Byb2MuYXQoMCkpOworCisgICAgaWYgKCFtX2hhc0Nh
dGNoKQorICAgICAgICByZXR1cm47CisKKyAgICBWYWx1ZSoganNJbnN0YW5jZSA9IG1fcHJvYy5h
ZGQ8TWVtb3J5VmFsdWU+KExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLCBpbnN0YW5jZVZh
bHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpKTsKKyAg
ICBWYWx1ZSogc3RvcmUgPSBtX3Byb2MuYWRkPEIzOjpNZW1vcnlWYWx1ZT4oQjM6OlN0b3JlLCBP
cmlnaW4oKSwganNJbnN0YW5jZSwgZnJhbWVQb2ludGVyKCksIHNhZmVDYXN0PGludDMyX3Q+KENh
bGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihSZWdpc3RlcikpKTsKKworICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9yb290QmxvY2tzWzBdOworICAgIG1fY29uc3RhbnRJbnNlcnRp
b25WYWx1ZXMuaW5zZXJ0VmFsdWUoMCwganNJbnN0YW5jZSk7CisgICAgbV9jb25zdGFudEluc2Vy
dGlvblZhbHVlcy5pbnNlcnRWYWx1ZSgwLCBzdG9yZSk7CisgICAgbV9jb25zdGFudEluc2VydGlv
blZhbHVlcy5leGVjdXRlKGJsb2NrKTsKIH0KIAogQjM6OlR5cGUgQjNJUkdlbmVyYXRvcjo6dG9C
M1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlwZSkKQEAgLTcwNSwyMCArOTk0LDIx
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmVmSXNO
dWxsKEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpKTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBvcmlnaW4oKSwgZ2V0KHZhbHVlKSwgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBp
bmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIC8v
IEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk4NTA2Pi4KLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkV4dGVybnJlZiksIG9yaWdpbigp
LAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0Nh
bGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBlczo6RXh0ZXJucmVmKSwgb3JpZ2luKCksCiAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0V2FzbVRh
YmxlRWxlbWVudCkpLAotICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgaW5k
ZXgpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZ2V0KGluZGV4KSk7
CiAKICAgICB7CisgICAgICAgIHJlc3VsdCA9IHB1c2gocmVzdWx0VmFsdWUpOwogICAgICAgICBD
aGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
bV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWws
IG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhj
ZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC03MzMsNyArMTAyMyw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVTZXQodW5zaWduZWQgdGFibGVJbmRleCwgRXhw
cmVzc2lvblR5cGUgaW5kZXgsIEV4cHJlCiAgICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxpbmUg
PGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1MDY+LgogICAgIGF1
dG8gc2hvdWxkVGhyb3cgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1f
cHJvYywgQjM6OkludDMyLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25TZXRXYXNtVGFibGVFbGVtZW50KSksCi0gICAgICAgIGluc3Rh
bmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIHRhYmxlSW5kZXgpLCBpbmRleCwgdmFsdWUpOworICAgICAgICBpbnN0YW5j
ZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZ2V0KGluZGV4KSwgZ2V0KHZhbHVlKSk7CiAKICAgICB7
CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
aGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKQEAgLTc1MSwyNiArMTA0MSwyNiBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJlZkZ1bmModWludDMyX3QgaW5kZXgsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYQogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5s
aW5lIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KIAot
ICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9j
LCBCMzo6SW50NjQsIG9yaWdpbigpLAorICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEIzOjpJbnQ2NCwgb3JpZ2luKCksCiAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVJlZkZ1bmMp
KSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBhZGRDb25zdGFudChUeXBlczo6STMyLCBpbmRl
eCkpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIGNvbnN0YW50KHRvQjNUeXBlKFR5cGVzOjpJ
MzIpLCBpbmRleCkpKTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkVGFibGVJbml0KHVuc2lnbmVkIGVsZW1lbnRJbmRleCwgdW5zaWduZWQgdGFibGVJbmRl
eCwgRXhwcmVzc2lvblR5cGUgZHN0T2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBzcmNPZmZzZXQsIEV4
cHJlc3Npb25UeXBlIGxlbmd0aCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGF1dG8gcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICBWYWx1ZSogcmVz
dWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAg
ICBtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdD
RnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtVGFibGVJbml0KSksCiAgICAg
ICAgIGluc3RhbmNlVmFsdWUoKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGVsZW1lbnRJbmRleCksCiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0
YWJsZUluZGV4KSwKLSAgICAgICAgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIGxlbmd0aCk7CisgICAg
ICAgIGdldChkc3RPZmZzZXQpLCBnZXQoc3JjT2Zmc2V0KSwgZ2V0KGxlbmd0aCkpOwogCiAgICAg
ewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0
LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hl
Y2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNo
ZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC03OTQs
MzEgKzEwODQsMzEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbGVtRHJvcCh1bnNpZ25lZCBl
bGVtZW50SW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFi
bGVTaXplKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKICAgICAvLyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODUwNj4uCi0gICAgcmVzdWx0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKFR5cGVz
OjpJMzIpLCBvcmlnaW4oKSwKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCks
CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0V2Fz
bVRhYmxlU2l6ZSkpLAotICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSk7Cisg
ICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpKSk7CiAKICAgICByZXR1cm4geyB9
OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyh1bnNpZ25lZCB0YWJsZUlu
ZGV4LCBFeHByZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMy
KSwgb3JpZ2luKCksCisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UYWJsZUdy
b3cpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJbmRleCksIGZpbGwsIGRlbHRh
KTsKKyAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJbmRleCksIGdldChmaWxsKSwgZ2V0
KGRlbHRhKSkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRUYWJsZUZpbGwodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgb2Zmc2V0LCBF
eHByZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBjb3VudCkgLT4gUGFydGlhbFJlc3Vs
dAogewotICAgIGF1dG8gcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZh
bHVlPihtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKKyAgICBWYWx1ZSog
cmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJv
YywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlv
bjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UYWJsZUZpbGwpKSwKLSAgICAgICAgaW5z
dGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgdGFibGVJbmRleCksIG9mZnNldCwgZmlsbCwgY291bnQpOworICAgICAg
ICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZ2V0KG9mZnNldCksIGdldChmaWxsKSwg
Z2V0KGNvdW50KSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwK
LSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1
YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
MCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0
aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1Rh
YmxlQWNjZXNzKTsKQEAgLTgzMCwxNyArMTEyMCwxNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZFRhYmxlRmlsbCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBvZmZzZXQsIEV4
cAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlQ29weSh1bnNpZ25lZCBkc3RUYWJsZUlu
ZGV4LCB1bnNpZ25lZCBzcmNUYWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBkc3RPZmZzZXQsIEV4
cHJlc3Npb25UeXBlIHNyY09mZnNldCwgRXhwcmVzc2lvblR5cGUgbGVuZ3RoKSAtPiBQYXJ0aWFs
UmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEND
YWxsVmFsdWU+KAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiks
IG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbldhc21UYWJsZUNvcHkpKSwKICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLAogICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
ZHN0VGFibGVJbmRleCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzcmNUYWJsZUluZGV4KSwKLSAgICAgICAgZHN0T2Zm
c2V0LCBzcmNPZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGdldChkc3RPZmZzZXQpLCBnZXQoc3Jj
T2Zmc2V0KSwgZ2V0KGxlbmd0aCkpOwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVj
ayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywg
b3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1
bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAg
ICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0
T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC04NTMsNyArMTE0Myw3IEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkVGFibGVDb3B5KHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1Rh
YmxlSW5kZXgsCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmdldExvY2FsKHVpbnQzMl90IGluZGV4LCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKG1f
bG9jYWxzW2luZGV4XSk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0p
OworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihtX3Byb2MsIEIzOjpHZXQsIG9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0pKTsKICAgICBy
ZXR1cm4geyB9OwogfQogCkBAIC04NjcsNyArMTE1Nyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAot
YXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5j
ZSwgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBh
cnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSog
Y2FsbGVlSW5zdGFuY2UsIFZhbHVlKiBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIC8vIERvIGEgY29udGV4dCBzd2l0Y2ggaWYgbmVlZGVk
LgogICAgIHsKQEAgLTkxNiw3ICsxMjA2LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5k
aXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGUKICAg
ICB9CiAKICAgICBCMzo6VHlwZSByZXR1cm5UeXBlID0gdG9CM1Jlc3VsdFR5cGUoJnNpZ25hdHVy
ZSk7Ci0gICAgRXhwcmVzc2lvblR5cGUgY2FsbFJlc3VsdCA9IGNyZWF0ZUNhbGxQYXRjaHBvaW50
KG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBhcmdzLAorICAgIFZhbHVlKiBj
YWxsUmVzdWx0ID0gY3JlYXRlQ2FsbFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIG9yaWdpbigp
LCBzaWduYXR1cmUsIGFyZ3MsCiAgICAgICAgIHNjb3BlZExhbWJkYVJlZjx2b2lkKFBhdGNocG9p
bnRWYWx1ZSopPihbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgLT4gdm9pZCB7CiAg
ICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CiAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKQEAgLTkyOCw4
ICsxMjE4LDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSog
Y2FsbGVlSW5zdGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlCiAgICAgICAgICAgICBwYXRjaHBv
aW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlN
b2RlOjpCb3VuZHNDaGVja2luZykpOwogCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
Y2FsbGVlQ29kZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9u
cyhtX2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCk7CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIGhhbmRs
ZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICAgICAgaml0LmNhbGwo
cGFyYW1zW3BhcmFtcy5wcm9jKCkucmVzdWx0Q291bnQocmV0dXJuVHlwZSldLmdwcigpLCBXYXNt
RW50cnlQdHJUYWcpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pKTsKQEAgLTk0MSwxMSAr
MTIzMywxMSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNh
bGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZQogICAgIGNhc2UgQjM6OlR1cGxlOiB7
CiAgICAgICAgIGNvbnN0IFZlY3RvcjxCMzo6VHlwZT4mIHR1cGxlID0gbV9wcm9jLnR1cGxlRm9y
VHlwZShyZXR1cm5UeXBlKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25h
dHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHVw
bGVbaV0sIGNhbGxSZXN1bHQsIGkpKTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2go
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxFeHRyYWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHR1cGxlW2ldLCBjYWxsUmVzdWx0LCBpKSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ZGVmYXVsdDogewotICAgICAgICByZXN1bHRzLmFwcGVuZChjYWxsUmVzdWx0KTsKKyAgICAgICAg
cmVzdWx0cy5hcHBlbmQocHVzaChjYWxsUmVzdWx0KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICB9CkBAIC05NTgsOSArMTI1MCw5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdEluZGly
ZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlCiAKIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2lu
KCksCisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFs
dWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbkdyb3dNZW1vcnkpKSwKLSAgICAgICAgZnJhbWVQb2ludGVy
KCksIGluc3RhbmNlVmFsdWUoKSwgZGVsdGEpOworICAgICAgICBmcmFtZVBvaW50ZXIoKSwgaW5z
dGFuY2VWYWx1ZSgpLCBnZXQoZGVsdGEpKSk7CiAKICAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9i
YWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6Tm8sIG1faW5mby5tZW1vcnksIGluc3Rh
bmNlVmFsdWUoKSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CiAKQEAgLTk4MCwyMiArMTI3Miwy
MiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogICAgIFZhbHVlKiBudW1QYWdlcyA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWlNociwgb3JpZ2luKCksCiAgICAgICAg
IHNpemUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCBzaGlmdFZhbHVlKSk7CiAKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgbnVtUGFnZXMpOworICAgIHJl
c3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVu
Yywgb3JpZ2luKCksIG51bVBhZ2VzKSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE1lbW9yeUZpbGwoRXhwcmVzc2lvblR5cGUgZHN0QWRkcmVzcywgRXhw
cmVzc2lvblR5cGUgdGFyZ2V0VmFsdWUsIEV4cHJlc3Npb25UeXBlIGNvdW50KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEND
YWxsVmFsdWU+KAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiks
IG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbldhc21NZW1vcnlGaWxsKSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwKLSAgICAgICAg
ZHN0QWRkcmVzcywgdGFyZ2V0VmFsdWUsIGNvdW50KTsKKyAgICAgICAgZ2V0KGRzdEFkZHJlc3Mp
LCBnZXQodGFyZ2V0VmFsdWUpLCBnZXQoY291bnQpKTsKIAogICAgIHsKICAgICAgICAgQ2hlY2tW
YWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJv
YywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdCwgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CisgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmln
aW4oKSwgcmVzdWx0VmFsdWUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlv
blR5cGU6Ok91dE9mQm91bmRzVGFibGVBY2Nlc3MpOwpAQCAtMTAwNywxNiArMTI5OSwxNiBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUZpbGwoRXhwcmVzc2lvblR5cGUgZHN0QWRkcmVz
cywgRXhwcmVzc2lvblR5cGUgdGFyZwogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUlu
aXQodW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCwgRXhwcmVzc2lvblR5cGUgZHN0QWRkcmVzcywg
RXhwcmVzc2lvblR5cGUgc3JjQWRkcmVzcywgRXhwcmVzc2lvblR5cGUgbGVuZ3RoKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6Okkz
MiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRy
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbldhc21NZW1vcnlJbml0KSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwKICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIGRhdGFTZWdtZW50SW5kZXgpLAotICAgICAgICBkc3RBZGRyZXNzLCBzcmNBZGRyZXNzLCBs
ZW5ndGgpOworICAgICAgICBnZXQoZHN0QWRkcmVzcyksIGdldChzcmNBZGRyZXNzKSwgZ2V0KGxl
bmd0aCkpOwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBv
cmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7
CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+
ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFj
Y2Vzcyk7CkBAIC0xMDI4LDE1ICsxMzIwLDE1IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTWVt
b3J5SW5pdCh1bnNpZ25lZCBkYXRhU2VnbWVudEluZGV4LCBFeHByZXNzaW9uVHlwZSBkc3RBCiAK
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5Q29weShFeHByZXNzaW9uVHlwZSBkc3RBZGRy
ZXNzLCBFeHByZXNzaW9uVHlwZSBzcmNBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSBjb3VudCkgLT4g
UGFydGlhbFJlc3VsdAogewotICAgIGF1dG8gcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDQ2FsbFZhbHVlPigKKyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICBtX3Byb2MsIHRvQjNUeXBlKFR5cGVz
OjpJMzIpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSkpLAogICAgICAgICBpbnN0YW5jZVZhbHVlKCksCi0g
ICAgICAgIGRzdEFkZHJlc3MsIHNyY0FkZHJlc3MsIGNvdW50KTsKKyAgICAgICAgZ2V0KGRzdEFk
ZHJlc3MpLCBnZXQoc3JjQWRkcmVzcyksIGdldChjb3VudCkpOwogCiAgICAgewogICAgICAgICBD
aGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
bV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWws
IG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhj
ZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC0xMDYwLDcgKzEzNTIsNyBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZERhdGFEcm9wKHVuc2lnbmVkIGRhdGFTZWdtZW50SW5k
ZXgpIC0+IFBhcnRpYWxSZXN1bHQKIGF1dG8gQjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAg
QVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIG9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0s
IHZhbHVlKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1f
cHJvYywgQjM6OlNldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSwgZ2V0KHZhbHVlKSk7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTA3MCwxMiArMTM2MiwxMiBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbAogICAgIFZhbHVlKiBnbG9iYWxzQXJyYXkgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigp
LCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkds
b2JhbHMoKSkpOwogICAgIHN3aXRjaCAoZ2xvYmFsLmJpbmRpbmdNb2RlKSB7CiAgICAgY2FzZSBX
YXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OkVtYmVkZGVkSW5JbnN0YW5jZToK
LSAgICAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkLCB0b0IzVHlwZShnbG9iYWwudHlwZSksIG9yaWdpbigpLCBnbG9iYWxzQXJy
YXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAg
ICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgdG9CM1R5cGUoZ2xvYmFsLnR5cGUpLCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5
LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQ
b3J0YWJsZTogewogICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xv
YmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpOwogICAgICAgICBWYWx1ZSogcG9p
bnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgQjM6OkludDY0LCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90Pihp
bmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgcmVzdWx0ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlwZShnbG9iYWwu
dHlwZSksIG9yaWdpbigpLCBwb2ludGVyKTsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKGds
b2JhbC50eXBlKSwgb3JpZ2luKCksIHBvaW50ZXIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIH0KQEAgLTEwODksMTQgKzEzODEsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9i
YWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKICAg
ICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1
ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpKTsKICAg
ICBzd2l0Y2ggKGdsb2JhbC5iaW5kaW5nTW9kZSkgewogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5m
b3JtYXRpb246OkJpbmRpbmdNb2RlOjpFbWJlZGRlZEluSW5zdGFuY2U6Ci0gICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigp
LCB2YWx1ZSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihS
ZWdpc3RlcikpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIGdldCh2YWx1ZSksIGdsb2JhbHNBcnJheSwgc2Fm
ZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgIGlmIChp
c1JlZlR5cGUoZ2xvYmFsLnR5cGUpKQogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllckZvckpT
V3JhcHBlcigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0
aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6IHsKICAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRh
YmlsaXR5ID09IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsK
ICAgICAgICAgVmFsdWUqIHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIEIzOjpJbnQ2NCwgb3JpZ2luKCksIGdsb2JhbHNBcnJheSwg
c2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdp
bigpLCB2YWx1ZSwgcG9pbnRlcik7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCBnZXQodmFsdWUpLCBwb2ludGVy
KTsKICAgICAgICAgLy8gV2UgZW1pdCBhIHdyaXRlLWJhcnJpZXIgb250byBKU1dlYkFzc2VtYmx5
R2xvYmFsLCBub3QgSlNXZWJBc3NlbWJseUluc3RhbmNlLgogICAgICAgICBpZiAoaXNSZWZUeXBl
KGdsb2JhbC50eXBlKSkgewogICAgICAgICAgICAgVmFsdWUqIGluc3RhbmNlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgp
LCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6
b2Zmc2V0T2ZPd25lcigpKSk7CkBAIC0xMTk5LDcgKzE0OTEsNyBAQCBpbmxpbmUgdm9pZCBCM0lS
R2VuZXJhdG9yOjplbWl0V3JpdGVCYXJyaWVyRm9ySlNXcmFwcGVyKCkKICAgICBtX2N1cnJlbnRC
bG9jayA9IGNvbnRpbnVhdGlvbjsKIH0KIAotaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpl
bWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJf
dCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wZXJhdGlvbikKK2lubGluZSBWYWx1ZSogQjNJUkdl
bmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoVmFsdWUqIHBvaW50ZXIsIHVpbnQz
Ml90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQogewogICAgIEFTU0VSVChtX21l
bW9yeUJhc2VHUFIpOwogCkBAIC0xMjY4LDcgKzE1NjAsNyBAQCBpbmxpbmUgQjM6OktpbmQgQjNJ
UkdlbmVyYXRvcjo6bWVtb3J5S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9wKQogICAgIHJldHVybiBt
ZW1vcnlPcDsKIH0KIAotaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0TG9hZE9wKExv
YWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IHVvZmZzZXQpCitp
bmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgVmFs
dWUqIHBvaW50ZXIsIHVpbnQzMl90IHVvZmZzZXQpCiB7CiAgICAgaW50MzJfdCBvZmZzZXQgPSBm
aXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIHVvZmZzZXQpOwogCkBAIC0xMzM4LDggKzE2
MzAsOSBAQCBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlw
ZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBv
ZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BU
eXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogcG9pbnRl
ciA9IGdldChwb2ludGVyVmFyKTsKICAgICBBU1NFUlQocG9pbnRlci0+dHlwZSgpID09IEludDMy
KTsKIAogICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6
ZU9mTG9hZE9wKG9wKSkpKSB7CkBAIC0xMzU2LDcgKzE2NDksNyBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lv
blR5cGUmCiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKICAgICAgICAgY2FzZSBM
b2FkT3BUeXBlOjpJMzJMb2FkMTZVOgogICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4
VToKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDMyLCAwKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50MzIsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzoKICAgICAgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkOFU6CkBAIC0xMzY1LDE4ICsxNjU4LDE4IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9u
VHlwZSYKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOgogICAgICAgICBjYXNl
IExvYWRPcFR5cGU6Okk2NExvYWQ6CiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2
VToKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDY0LCAwKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50NjQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6Ci0gICAgICAgICAgICByZXN1bHQgPSBj
b25zdGFudChGbG9hdCwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50KEZs
b2F0LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpG
NjRMb2FkOgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoRG91YmxlLCAwKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoRG91YmxlLCAwKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCiAgICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGVtaXRMb2Fk
T3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9m
TG9hZE9wKG9wKSksIG9mZnNldCk7CisgICAgICAgIHJlc3VsdCA9IHB1c2goZW1pdExvYWRPcChv
cCwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2Fk
T3Aob3ApKSwgb2Zmc2V0KSk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTQwMiw3ICsxNjk1
LDcgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCiB9CiAK
IAotaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3As
IEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCB1
b2Zmc2V0KQoraW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5
cGUgb3AsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSogdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCiB7
CiAgICAgaW50MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIHVv
ZmZzZXQpOwogCkBAIC0xNDM3LDggKzE3MzAsMTAgQEAgaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRv
cjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEUK
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1hdXRvIEIzSVJHZW5lcmF0
b3I6OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNz
aW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIz
SVJHZW5lcmF0b3I6OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVy
VmFyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZVZhciwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CisgICAgVmFsdWUqIHBvaW50ZXIgPSBnZXQocG9pbnRlclZhcik7CisgICAgVmFs
dWUqIHZhbHVlID0gZ2V0KHZhbHVlVmFyKTsKICAgICBBU1NFUlQocG9pbnRlci0+dHlwZSgpID09
IEludDMyKTsKIAogICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNl
dCwgc2l6ZU9mU3RvcmVPcChvcCkpKSkgewpAQCAtMTQ2NCw5ICsxNzU5LDkgQEAgaW5saW5lIHVp
bnQzMl90IHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNzKEV4dEF0b21pY09wVHlwZSBvcCkKICAg
ICByZXR1cm4gYnl0ZXNGb3JXaWR0aChhY2Nlc3NXaWR0aChvcCkpOwogfQogCi1pbmxpbmUgVmFs
dWUqIEIzSVJHZW5lcmF0b3I6OnNhbml0aXplQXRvbWljUmVzdWx0KEV4dEF0b21pY09wVHlwZSBv
cCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3Npb25UeXBlIHJlc3VsdCkKK2lubGluZSBWYWx1ZSog
QjNJUkdlbmVyYXRvcjo6c2FuaXRpemVBdG9taWNSZXN1bHQoRXh0QXRvbWljT3BUeXBlIG9wLCBU
eXBlIHZhbHVlVHlwZSwgVmFsdWUqIHJlc3VsdCkKIHsKLSAgICBhdXRvIHNhbml0aXplMzIgPSBb
Jl0oRXhwcmVzc2lvblR5cGUgcmVzdWx0KSB7CisgICAgYXV0byBzYW5pdGl6ZTMyID0gWyZdKFZh
bHVlKiByZXN1bHQpIHsKICAgICAgICAgc3dpdGNoIChhY2Nlc3NXaWR0aChvcCkpIHsKICAgICAg
ICAgY2FzZSBCMzo6V2lkdGg4OgogICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwgcmVzdWx0LCBjb25zdGFu
dChJbnQzMiwgMHhmZikpOwpAQCAtMTQ5MSw3ICsxNzg2LDcgQEAgaW5saW5lIFZhbHVlKiBCM0lS
R2VuZXJhdG9yOjpzYW5pdGl6ZUF0b21pY1Jlc3VsdChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUg
dmFsdWUKICAgICB9CiB9CiAKLVZhbHVlKiBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVz
T2Zmc2V0Rm9yQXRvbWljT3BzKEV4dEF0b21pY09wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcHRy
LCB1aW50MzJfdCBvZmZzZXQpCitWYWx1ZSogQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1
c09mZnNldEZvckF0b21pY09wcyhFeHRBdG9taWNPcFR5cGUgb3AsIFZhbHVlKiBwdHIsIHVpbnQz
Ml90IG9mZnNldCkKIHsKICAgICBhdXRvIHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIHB0ciwgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG9mZnNldCkpOwogICAgIGlm
IChhY2Nlc3NXaWR0aChvcCkgIT0gQjM6OldpZHRoOCkgewpAQCAtMTUwNCwxMSArMTc5OSwxMSBA
QCBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09w
cyhFeHRBdG9taWNPcFR5cGUgb3AsIEV4cAogICAgIHJldHVybiBwb2ludGVyOwogfQogCi1pbmxp
bmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNMb2FkT3AoRXh0QXRvbWljT3BUeXBl
IG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9m
ZnNldCkKK2lubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY0xvYWRPcChFeHRB
dG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBWYWx1ZSogcG9pbnRlciwgdWludDMyX3Qg
dW9mZnNldCkKIHsKICAgICBwb2ludGVyID0gZml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21p
Y09wcyhvcCwgcG9pbnRlciwgdW9mZnNldCk7CiAKLSAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZSA9
IG51bGxwdHI7CisgICAgVmFsdWUqIHZhbHVlID0gbnVsbHB0cjsKICAgICBzd2l0Y2ggKGFjY2Vz
c1dpZHRoKG9wKSkgewogICAgIGNhc2UgQjM6OldpZHRoODoKICAgICBjYXNlIEIzOjpXaWR0aDE2
OgpAQCAtMTUzNywyMiArMTgzMiwyMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmF0b21pY0xvYWQo
RXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5cAogCiAgICAg
ICAgIHN3aXRjaCAodmFsdWVUeXBlLmtpbmQpIHsKICAgICAgICAgY2FzZSBUeXBlS2luZDo6STMy
OgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50MzIsIDApOworICAgICAgICAgICAg
cmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQzMiwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgVHlwZUtpbmQ6Okk2NDoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50
KEludDY0LCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50NjQsIDAp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGVtaXRBdG9taWNMb2FkT3Aob3AsIHZhbHVl
VHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZB
dG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCBvZmZzZXQpOworICAgICAgICByZXN1bHQgPSBwdXNo
KGVtaXRBdG9taWNMb2FkT3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50
ZXIoZ2V0KHBvaW50ZXIpLCBvZmZzZXQsIHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNzKG9wKSks
IG9mZnNldCkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotaW5saW5lIHZvaWQgQjNJUkdlbmVy
YXRvcjo6ZW1pdEF0b21pY1N0b3JlT3AoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlw
ZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90
IHVvZmZzZXQpCitpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWljU3RvcmVPcChF
eHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUq
IHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQogewogICAgIHBvaW50ZXIgPSBmaXh1cFBvaW50ZXJQ
bHVzT2Zmc2V0Rm9yQXRvbWljT3BzKG9wLCBwb2ludGVyLCB1b2Zmc2V0KTsKIApAQCAtMTU3Mywx
MiArMTg2OCwxMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmF0b21pY1N0b3JlKEV4dEF0b21pY09w
VHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3Npb25UeQogICAgICAgICAgICAgdGhpcy0+
ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlB
Y2Nlc3MpOwogICAgICAgICB9KTsKICAgICB9IGVsc2UKLSAgICAgICAgZW1pdEF0b21pY1N0b3Jl
T3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zm
c2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKKyAg
ICAgICAgZW1pdEF0b21pY1N0b3JlT3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFy
ZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBvZmZzZXQsIHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNz
KG9wKSksIGdldCh2YWx1ZSksIG9mZnNldCk7CiAKICAgICByZXR1cm4geyB9OwogfQogCi1pbmxp
bmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNCaW5hcnlSTVdPcChFeHRBdG9taWNP
cFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNz
aW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKK2lubGluZSBWYWx1ZSogQjNJUkdlbmVy
YXRvcjo6ZW1pdEF0b21pY0JpbmFyeVJNV09wKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1
ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSogdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCiB7
CiAgICAgcG9pbnRlciA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNPcHMob3AsIHBv
aW50ZXIsIHVvZmZzZXQpOwogCkBAIC0xNjYzLDIyICsxOTU4LDIyIEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YXRvbWljQmluYXJ5Uk1XKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUs
IEV4cHJlc3NpCiAKICAgICAgICAgc3dpdGNoICh2YWx1ZVR5cGUua2luZCkgewogICAgICAgICBj
YXNlIFR5cGVLaW5kOjpJMzI6Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChJbnQzMiwg
MCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50KEludDMyLCAwKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBlS2luZDo6STY0OgotICAgICAgICAgICAg
cmVzdWx0ID0gY29uc3RhbnQoSW50NjQsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChj
b25zdGFudChJbnQ2NCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZW1pdEF0b21p
Y0JpbmFyeVJNV09wKG9wLCB2YWx1ZVR5cGUsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBv
aW50ZXIsIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgdmFsdWUsIG9m
ZnNldCk7CisgICAgICAgIHJlc3VsdCA9IHB1c2goZW1pdEF0b21pY0JpbmFyeVJNV09wKG9wLCB2
YWx1ZVR5cGUsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKGdldChwb2ludGVyKSwgb2Zmc2V0
LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCBnZXQodmFsdWUpLCBvZmZzZXQpKTsK
IAogICAgIHJldHVybiB7IH07CiB9CiAKLVZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWlj
Q29tcGFyZUV4Y2hhbmdlKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJl
c3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVkLCBFeHByZXNzaW9uVHlw
ZSB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKK1ZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0QXRv
bWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIFZh
bHVlKiBwb2ludGVyLCBWYWx1ZSogZXhwZWN0ZWQsIFZhbHVlKiB2YWx1ZSwgdWludDMyX3QgdW9m
ZnNldCkKIHsKICAgICBwb2ludGVyID0gZml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09w
cyhvcCwgcG9pbnRlciwgdW9mZnNldCk7CiAKQEAgLTE3ODgsMzYgKzIwODMsNDEgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphdG9taWNDb21wYXJlRXhjaGFuZ2UoRXh0QXRvbWljT3BUeXBlIG9wLCBU
eXBlIHZhbHVlVHlwZSwgRXgKIAogICAgICAgICBzd2l0Y2ggKHZhbHVlVHlwZS5raW5kKSB7CiAg
ICAgICAgIGNhc2UgVHlwZUtpbmQ6OkkzMjoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50
KEludDMyLCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50MzIsIDAp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJNjQ6Ci0gICAg
ICAgICAgICByZXN1bHQgPSBjb25zdGFudChJbnQ2NCwgMCk7CisgICAgICAgICAgICByZXN1bHQg
PSBwdXNoKGNvbnN0YW50KEludDY0LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICByZXN1bHQgPSBl
bWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKG9wLCB2YWx1ZVR5cGUsIGVtaXRDaGVja0FuZFByZXBh
cmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3Ap
KSwgZXhwZWN0ZWQsIHZhbHVlLCBvZmZzZXQpOworICAgICAgICByZXN1bHQgPSBwdXNoKGVtaXRB
dG9taWNDb21wYXJlRXhjaGFuZ2Uob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBv
aW50ZXIoZ2V0KHBvaW50ZXIpLCBvZmZzZXQsIHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNzKG9w
KSksIGdldChleHBlY3RlZCksIGdldCh2YWx1ZSksIG9mZnNldCkpOwogCiAgICAgcmV0dXJuIHsg
fTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KEV4dEF0b21pY09wVHlwZSBv
cCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Np
b25UeXBlIHRpbWVvdXQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkg
LT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KEV4dEF0b21p
Y09wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlclZhciwgRXhwcmVzc2lvblR5cGUgdmFs
dWVWYXIsIEV4cHJlc3Npb25UeXBlIHRpbWVvdXRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQs
IHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBwb2ludGVy
ID0gZ2V0KHBvaW50ZXJWYXIpOworICAgIFZhbHVlKiB2YWx1ZSA9IGdldCh2YWx1ZVZhcik7Cisg
ICAgVmFsdWUqIHRpbWVvdXQgPSBnZXQodGltZW91dFZhcik7CisgICAgVmFsdWUqIHJlc3VsdFZh
bHVlID0gbnVsbHB0cjsKICAgICBpZiAob3AgPT0gRXh0QXRvbWljT3BUeXBlOjpNZW1vcnlBdG9t
aWNXYWl0MzIpIHsKLSAgICAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
Q2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKKyAgICAgICAgcmVzdWx0VmFsdWUg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9y
aWdpbigpLAogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25NZW1vcnlBdG9taWNXYWl0MzIpKSwKICAgICAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwg
cG9pbnRlciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIG9mZnNldCksIHZhbHVlLCB0aW1lb3V0KTsKICAgICB9IGVsc2UgewotICAgICAg
ICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywg
SW50MzIsIG9yaWdpbigpLAorICAgICAgICByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCiAgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1lbW9yeUF0b21pY1dh
aXQ2NCkpLAogICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBwb2ludGVyLCBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSwg
dmFsdWUsIHRpbWVvdXQpOwogICAgIH0KIAogICAgIHsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChy
ZXN1bHRWYWx1ZSk7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9y
aWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkp
KTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlz
LT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9y
eUFjY2Vzcyk7CkBAIC0xODI5LDEzICsyMTI5LDEzIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRv
bWljV2FpdChFeHRBdG9taWNPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJl
CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljTm90aWZ5KEV4dEF0b21pY09wVHlwZSwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgY291bnQsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3Vs
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwg
b3JpZ2luKCksCisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdD
RnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NZW1vcnlBdG9taWNOb3RpZnkpKSwK
LSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBwb2ludGVyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSwgY291bnQpOwotCisg
ICAgICAgIGluc3RhbmNlVmFsdWUoKSwgZ2V0KHBvaW50ZXIpLCBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSwgZ2V0KGNvdW50
KSk7CiAgICAgeworICAgICAgICByZXN1bHQgPSBwdXNoKHJlc3VsdFZhbHVlKTsKICAgICAgICAg
Q2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+
KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIHJlc3VsdCwgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7
CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExl
c3NUaGFuLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOwogCiAgICAgICAgIGNoZWNrLT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKQEAgLTE4NTEsOCAr
MjE1MSw5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljRmVuY2UoRXh0QXRvbWljT3BUeXBl
LCB1aW50OF90KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBC
M0lSR2VuZXJhdG9yOjp0cnVuY1NhdHVyYXRlZChFeHQxT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIFR5cGUgcmV0dXJuVHlwZSwgVHlwZSkgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjp0cnVuY1NhdHVyYXRlZChFeHQxT3BU
eXBlIG9wLCBFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIFR5
cGUgcmV0dXJuVHlwZSwgVHlwZSkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcg
PSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4RmxvYXQgPSBudWxscHRyOwogICAgIFZhbHVl
KiBtaW5GbG9hdCA9IG51bGxwdHI7CiAgICAgVmFsdWUqIHNpZ25CaXRDb25zdGFudCA9IG51bGxw
dHI7CkBAIC0yMDAyLDI2ICsyMzAzLDI2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6dHJ1bmNTYXR1
cmF0ZWQoRXh0MU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksCisgICAgcmVzdWx0ID0gcHVz
aChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9y
aWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgYXJnLCBtaW5GbG9hdCksCiAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksCiAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NU
aGFuLCBvcmlnaW4oKSwgYXJnLCBtYXhGbG9hdCksCiAgICAgICAgICAgICBwYXRjaHBvaW50LCBt
YXhSZXN1bHQpLAotICAgICAgICByZXF1aXJlc05hTkNoZWNrID8gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIGFyZywgYXJnKSwg
bWluUmVzdWx0LCB6ZXJvKSA6IG1pblJlc3VsdCk7CisgICAgICAgIHJlcXVpcmVzTmFOQ2hlY2sg
PyBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9y
aWdpbigpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBv
cmlnaW4oKSwgYXJnLCBhcmcpLCBtaW5SZXN1bHQsIHplcm8pIDogbWluUmVzdWx0KSk7CiAKICAg
ICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNz
aW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBl
IHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxl
Y3QsIG9yaWdpbigpLCBjb25kaXRpb24sIG5vblplcm8sIHplcm8pOworICAgIHJlc3VsdCA9IHB1
c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBv
cmlnaW4oKSwgZ2V0KGNvbmRpdGlvbiksIGdldChub25aZXJvKSwgZ2V0KHplcm8pKSk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAogQjNJUkdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgQjNJUkdlbmVy
YXRvcjo6YWRkQ29uc3RhbnQoVHlwZSB0eXBlLCB1aW50NjRfdCB2YWx1ZSkKIHsKIAotICAgIHJl
dHVybiBjb25zdGFudCh0b0IzVHlwZSh0eXBlKSwgdmFsdWUpOworICAgIHJldHVybiBwdXNoKGNv
bnN0YW50KHRvQjNUeXBlKHR5cGUpLCB2YWx1ZSkpOwogfQogCiB2b2lkIEIzSVJHZW5lcmF0b3I6
OmVtaXRFbnRyeVRpZXJVcENoZWNrKCkKQEAgLTIwODIsMjAgKzIzODMsMjEgQEAgdm9pZCBCM0lS
R2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKHVpbnQzMl90IGxvb3BJbmRleCwgY29uc3Qg
U3RhY2smIGVuY2xvc2kKIAogICAgIFZhbHVlKiBjb3VudERvd25Mb2NhdGlvbiA9IGNvbnN0YW50
KHBvaW50ZXJUeXBlKCksIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KCZtX3RpZXJVcC0+bV9jb3Vu
dGVyKSwgb3JpZ2luKTsKIAotICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4gc3RhY2ttYXA7Ci0g
ICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKSB7Ci0gICAgICAgIFZhbHVlKiByZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6Okdl
dCwgb3JpZ2luLCBsb2NhbCk7Ci0gICAgICAgIHN0YWNrbWFwLmFwcGVuZChyZXN1bHQpOwotICAg
IH0KKyAgICBWZWN0b3I8VmFsdWUqPiBzdGFja21hcDsKKyAgICBmb3IgKGF1dG8mIGxvY2FsIDog
bV9sb2NhbHMpCisgICAgICAgIHN0YWNrbWFwLmFwcGVuZChnZXQobG9jYWwpKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250
cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAgICAgIGF1dG8mIGRhdGEg
PSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKICAg
ICAgICAgYXV0byYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2Nv
bnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CiAgICAgICAgIGZvciAoVHlwZWRF
eHByZXNzaW9uIHZhbHVlIDogZXhwcmVzc2lvblN0YWNrKQotICAgICAgICAgICAgc3RhY2ttYXAu
YXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgIHN0YWNrbWFwLmFwcGVuZChnZXQodmFsdWUpKTsK
KyAgICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpKQorICAgICAgICAgICAg
c3RhY2ttYXAuYXBwZW5kKGdldChkYXRhLmV4Y2VwdGlvbigpKSk7CiAgICAgfQogICAgIGZvciAo
VHlwZWRFeHByZXNzaW9uIHZhbHVlIDogZW5jbG9zaW5nU3RhY2spCi0gICAgICAgIHN0YWNrbWFw
LmFwcGVuZCh2YWx1ZSk7CisgICAgICAgIHN0YWNrbWFwLmFwcGVuZChnZXQodmFsdWUpKTsKICAg
ICBmb3IgKFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA6IG5ld1N0YWNrKQotICAgICAgICBzdGFja21h
cC5hcHBlbmQodmFsdWUpOworICAgICAgICBzdGFja21hcC5hcHBlbmQoZ2V0KHZhbHVlKSk7CiAK
ICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIG9yaWdpbik7CiAgICAgRWZmZWN0cyBl
ZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwpAQCAtMjE0MCw5MyArMjQ0Miw3MiBAQCB2b2lkIEIz
SVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4LCBjb25z
dCBTdGFjayYgZW5jbG9zaQogICAgIH0pOwogfQogCitWYWx1ZSogQjNJUkdlbmVyYXRvcjo6bG9h
ZEZyb21TY3JhdGNoQnVmZmVyKHVuc2lnbmVkJiBpbmRleEluQnVmZmVyLCBWYWx1ZSogcG9pbnRl
ciwgQjM6OlR5cGUgdHlwZSkKK3sKKyAgICBzaXplX3Qgb2Zmc2V0ID0gc2l6ZW9mKHVpbnQ2NF90
KSAqIGluZGV4SW5CdWZmZXIrKzsKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlLmlzTnVtZXJpYygp
KTsKKyAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCB0eXBlLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKK30KKwordm9pZCBC
M0lSR2VuZXJhdG9yOjpjb25uZWN0Q29udHJvbEVudHJ5KHVuc2lnbmVkJiBpbmRleEluQnVmZmVy
LCBWYWx1ZSogcG9pbnRlciwgQ29udHJvbERhdGEmIGRhdGEsIFN0YWNrJiBleHByZXNzaW9uU3Rh
Y2ssIENvbnRyb2xEYXRhJiBjdXJyZW50RGF0YSwgYm9vbCBmaWxsTG9vcFBoaXMpCit7CisgICAg
Ly8gRm9yIGVhY2ggc3RhY2sgZW50cnkgZW5jbG9zZWQgYnkgdGhpcyBsb29wIHdlIG5lZWQgdG8g
cmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBhIHBoaSBzbyB3ZSBjYW4gZmlsbCBpdCBvbiBPU1IgZW50
cnkuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCk7
IGkrKykgeworICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBleHByZXNzaW9uU3RhY2tb
aV07CisgICAgICAgIGF1dG8qIGxvYWQgPSBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIoaW5kZXhJbkJ1
ZmZlciwgcG9pbnRlciwgdmFsdWUtPnR5cGUoKSk7CisgICAgICAgIGlmIChmaWxsTG9vcFBoaXMp
CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgbG9hZCwgZGF0YS5waGlzW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNl
dCwgb3JpZ2luKCksIHZhbHVlLnZhbHVlKCksIGxvYWQpOworICAgIH0KKyAgICBpZiAoQ29udHJv
bFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkgJiYgJmRhdGEgIT0gJmN1cnJlbnREYXRhKSB7CisgICAg
ICAgIGF1dG8qIGxvYWQgPSBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIoaW5kZXhJbkJ1ZmZlciwgcG9p
bnRlciwgcG9pbnRlclR5cGUoKSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIG9yaWdpbigpLCBkYXRhLmV4Y2VwdGlvbigpLCBs
b2FkKTsKKyAgICB9Cit9OworCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWdu
YXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBibG9j
aywgU3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29wSW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICBCYXNpY0Jsb2NrKiBib2R5ID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNC
bG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAKLSAgICBibG9jayA9IENv
bnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpMb29wLCBj
b250aW51YXRpb24sIGJvZHkpOworICAgIGJsb2NrID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmln
aW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6Okxvb3AsIG1fc3RhY2tTaXplLCBjb250aW51YXRp
b24sIGJvZHkpOworCiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gZW5jbG9zaW5nU3RhY2suc2l6ZSgp
IC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgVHlwZWRFeHBy
ZXNzaW9uIHZhbHVlID0gZW5jbG9zaW5nU3RhY2suYXQob2Zmc2V0ICsgaSk7Ci0gICAgICAgIGF1
dG8qIHVwc2lsb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgdmFsdWUpOwogICAgICAgICBWYWx1ZSogcGhpID0gYmxvY2sucGhpc1tp
XTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIGdldCh2YWx1ZSksIHBoaSk7CiAgICAgICAgIGJvZHktPmFwcGVuZChwaGkp
OwotICAgICAgICB1cHNpbG9uLT5zZXRQaGkocGhpKTsKLSAgICAgICAgbmV3U3RhY2suY29uc3Ry
dWN0QW5kQXBwZW5kKHZhbHVlLnR5cGUoKSwgcGhpKTsKKyAgICAgICAgc2V0KGJvZHksIHZhbHVl
LCBwaGkpOworICAgICAgICBuZXdTdGFjay5hcHBlbmQodmFsdWUpOwogICAgIH0KKyAgICBlbmNs
b3NpbmdTdGFjay5zaHJpbmsob2Zmc2V0KTsKIAogICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgYm9keSk7CiAgICAgaWYgKGxv
b3BJbmRleCA9PSBtX2xvb3BJbmRleEZvck9TUkVudHJ5KSB7CiAgICAgICAgIGRhdGFMb2dMbklm
KFdhc21CM0lSR2VuZXJhdG9ySW50ZXJuYWw6OnZlcmJvc2UsICJTZXR0aW5nIHVwIGZvciBPU1Ig
ZW50cnkiKTsKIAotICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fcm9vdEJsb2NrOwotICAgICAg
ICBWYWx1ZSogcG9pbnRlciA9IG1fcm9vdEJsb2NrLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4obV9wcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgbV9j
dXJyZW50QmxvY2sgPSBtX3Jvb3RCbG9ja3NbMF07CisgICAgICAgIFZhbHVlKiBwb2ludGVyID0g
bV9yb290QmxvY2tzWzBdLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4obV9wcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAogICAgICAgICB1bnNpZ25lZCBpbmRleElu
QnVmZmVyID0gMDsKLSAgICAgICAgYXV0byBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIgPSBbJl0gKEIz
OjpUeXBlIHR5cGUpIHsKLSAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBzaXplb2YodWludDY0
X3QpICogaW5kZXhJbkJ1ZmZlcisrOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodHlwZS5p
c051bWVyaWMoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0eXBlLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zm
c2V0KTsKLSAgICAgICAgfTsKIAogICAgICAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2NhbHMp
Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1f
cHJvYywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihsb2NhbC0+
dHlwZSgpKSk7Ci0KLSAgICAgICAgYXV0byBjb25uZWN0Q29udHJvbEVudHJ5ID0gWyZdKGNvbnN0
IENvbnRyb2xEYXRhJiBkYXRhLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSB7Ci0gICAgICAgICAg
ICAvLyBGb3IgZWFjaCBzdGFjayBlbnRyeSBlbmNsb3NlZCBieSB0aGlzIGxvb3Agd2UgbmVlZCB0
byByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIGEgcGhpIHNvIHdlIGNhbiBmaWxsIGl0IG9uIE9TUiBl
bnRyeS4KLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrID0gbnVsbHB0cjsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGJsb2NrSW5kZXggPSAwOwotICAgICAgICAgICAgQjM6Okluc2Vy
dGlvblNldCBpbnNlcnRpb25TZXQobV9wcm9jKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBleHByZXNzaW9uU3RhY2suc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBleHByZXNzaW9uU3RhY2tbaV07Ci0gICAgICAgICAg
ICAgICAgaWYgKHZhbHVlLT5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgKytp
bmRleEluQnVmZmVyOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodmFsdWUtPm93bmVyICE9IHNvdXJjZUJsb2Nr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VCbG9jaykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKHNvdXJjZUJsb2NrKTsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGluc2VydGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZihXYXNtQjNJUkdlbmVyYXRvckludGVybmFsOjp2ZXJib3NlICYmIHNv
dXJjZUJsb2NrLCAiRXhlY3V0ZWQgaW5zZXJ0aW9uIHNldCBpbnRvOiAiLCAqc291cmNlQmxvY2sp
OwotICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4ID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgc291cmNlQmxvY2sgPSB2YWx1ZS0+b3duZXI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgd2hpbGUgKHNvdXJjZUJsb2NrLT5hdChibG9ja0luZGV4KyspICE9IHZhbHVl
KQotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2tJbmRleCA8IHNvdXJjZUJsb2NrLT5z
aXplKCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChzb3VyY2VCbG9jay0+YXQoYmxvY2tJbmRl
eCAtIDEpID09IHZhbHVlKTsKLQotICAgICAgICAgICAgICAgIGF1dG8qIHBoaSA9IGRhdGEuY29u
dGludWF0aW9uLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgUGhpLCAgdmFsdWUtPnR5cGUoKSwg
dmFsdWUtPm9yaWdpbigpKTsKLSAgICAgICAgICAgICAgICBleHByZXNzaW9uU3RhY2tbaV0gPSBU
eXBlZEV4cHJlc3Npb24geyB2YWx1ZS50eXBlKCksIHBoaSB9OwotICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIHZhbHVlLT5vcmln
aW4oKSwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKHZhbHVlLT50eXBlKCkpLCBwaGkpOwotCi0gICAg
ICAgICAgICAgICAgYXV0byogc291cmNlVXBzaWxvbiA9IG1fcHJvYy5hZGQ8VXBzaWxvblZhbHVl
Pih2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLCBwaGkpOwotICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnRWYWx1ZShibG9ja0luZGV4LCBzb3VyY2VVcHNpbG9uKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChzb3VyY2VCbG9jaykKLSAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuZXhlY3V0ZShzb3VyY2VCbG9jayk7Ci0gICAgICAgIH07CisgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4o
KSwgbG9jYWwsIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihpbmRleEluQnVmZmVyLCBwb2ludGVyLCBs
b2NhbC0+dHlwZSgpKSk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAw
OyBjb250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRy
b2xJbmRleCkgewogICAgICAgICAgICAgYXV0byYgZGF0YSA9IG1fcGFyc2VyLT5jb250cm9sU3Rh
Y2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOwogICAgICAgICAgICAgYXV0byYgZXhwcmVz
c2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9z
ZWRFeHByZXNzaW9uU3RhY2s7Ci0gICAgICAgICAgICBjb25uZWN0Q29udHJvbEVudHJ5KGRhdGEs
IGV4cHJlc3Npb25TdGFjayk7CisgICAgICAgICAgICBjb25uZWN0Q29udHJvbEVudHJ5KGluZGV4
SW5CdWZmZXIsIHBvaW50ZXIsIGRhdGEsIGV4cHJlc3Npb25TdGFjaywgYmxvY2spOwogICAgICAg
ICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBlbmNs
b3NpbmdTdGFjay5hdChvZmZzZXQgKyBpKTsKLSAgICAgICAgICAgIFZhbHVlKiBwaGkgPSBibG9j
ay5waGlzW2ldOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9u
VmFsdWU+KG1fcHJvYywgdmFsdWUtPm9yaWdpbigpLCBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIodmFs
dWUtPnR5cGUoKSksIHBoaSk7Ci0gICAgICAgIH0KLSAgICAgICAgZW5jbG9zaW5nU3RhY2suc2hy
aW5rKG9mZnNldCk7Ci0gICAgICAgIGNvbm5lY3RDb250cm9sRW50cnkoYmxvY2ssIGVuY2xvc2lu
Z1N0YWNrKTsKKyAgICAgICAgY29ubmVjdENvbnRyb2xFbnRyeShpbmRleEluQnVmZmVyLCBwb2lu
dGVyLCBibG9jaywgZW5jbG9zaW5nU3RhY2ssIGJsb2NrKTsKKyAgICAgICAgY29ubmVjdENvbnRy
b2xFbnRyeShpbmRleEluQnVmZmVyLCBwb2ludGVyLCBibG9jaywgbmV3U3RhY2ssIGJsb2NrLCB0
cnVlKTsKIAogICAgICAgICBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSBpbmRleEluQnVm
ZmVyOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJv
YywgSnVtcCwgb3JpZ2luKCksIGJvZHkpOwogICAgICAgICBib2R5LT5hZGRQcmVkZWNlc3Nvciht
X2N1cnJlbnRCbG9jayk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVuY2xvc2luZ1N0YWNrLnNocmlu
ayhvZmZzZXQpOworICAgIH0KIAogICAgIG1fY3VycmVudEJsb2NrID0gYm9keTsKICAgICBlbWl0
TG9vcFRpZXJVcENoZWNrKGxvb3BJbmRleCwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKQEAg
LTIyMzUsNyArMjUxNiw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25h
dHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29uCiAKIEIzSVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhIEIzSVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKEJsb2NrU2lnbmF0dXJl
IHNpZ25hdHVyZSkKIHsKLSAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBPcmlnaW4oKSwg
c2lnbmF0dXJlLCBCbG9ja1R5cGU6OlRvcExldmVsLCBtX3Byb2MuYWRkQmxvY2soKSk7CisgICAg
cmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgT3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBl
OjpUb3BMZXZlbCwgbV9zdGFja1NpemUsIG1fcHJvYy5hZGRCbG9jaygpKTsKIH0KIAogYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRCbG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBl
bmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIG5ld0Jsb2NrLCBTdGFjayYgbmV3U3RhY2spIC0+
IFBhcnRpYWxSZXN1bHQKQEAgLTIyNDMsNyArMjUyNCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQmxvY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ss
IENvCiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAK
ICAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKLSAg
ICBuZXdCbG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxv
Y2tUeXBlOjpCbG9jaywgY29udGludWF0aW9uKTsKKyAgICBuZXdCbG9jayA9IENvbnRyb2xEYXRh
KG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywgbV9zdGFja1Np
emUsIGNvbnRpbnVhdGlvbik7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMjI1NSwyMCArMjUz
NiwyMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdAogICAgIEJhc2ljQmxvY2sqIG5vdFRha2Vu
ID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9w
cm9jLmFkZEJsb2NrKCk7CiAKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBjb25kaXRpb24pOworICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGdldChj
b25kaXRpb24pKTsKICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVk
QmxvY2sodGFrZW4pLCBGcmVxdWVudGVkQmxvY2sobm90VGFrZW4pKTsKICAgICB0YWtlbi0+YWRk
UHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgIG5vdFRha2VuLT5hZGRQcmVkZWNlc3Nv
cihtX2N1cnJlbnRCbG9jayk7CiAKICAgICBtX2N1cnJlbnRCbG9jayA9IHRha2VuOwogICAgIHNw
bGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwotICAgIHJlc3Vs
dCA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpJ
ZiwgY29udGludWF0aW9uLCBub3RUYWtlbik7CisgICAgcmVzdWx0ID0gQ29udHJvbERhdGEobV9w
cm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OklmLCBtX3N0YWNrU2l6ZSwgY29u
dGludWF0aW9uLCBub3RUYWtlbik7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBTdGFjayYgY3VycmVudFN0
YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVu
dFN0YWNrLCBkYXRhLnBoaXMpOworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFj
aywgZGF0YSk7CiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3By
b2MsIEp1bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CiAgICAgcmV0dXJuIGFkZEVs
c2VUb1VucmVhY2hhYmxlKGRhdGEpOwogfQpAQCAtMjI3NiwxMSArMjU1NywyNTMgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBTdGFjayYgY3Vy
cmVudFN0YWNrKSAtPiBQYXIKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFi
bGUoQ29udHJvbERhdGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoZGF0
YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICBtX3N0YWNrU2l6ZSA9IGRhdGEu
c3RhY2tTaXplKCkgKyBkYXRhLm1fc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CiAgICAgbV9j
dXJyZW50QmxvY2sgPSBkYXRhLnNwZWNpYWw7CiAgICAgZGF0YS5jb252ZXJ0SWZUb0Jsb2NrKCk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tT
aWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBy
ZXN1bHQsIFN0YWNrJiBuZXdTdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgICsrbV90cnlE
ZXB0aDsKKworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygp
OworICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwor
ICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxv
Y2tUeXBlOjpUcnksIG1fc3RhY2tTaXplLCBjb250aW51YXRpb24sICsrbV9jYWxsU2l0ZUluZGV4
LCBtX3RyeURlcHRoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwgU3RhY2smIGN1cnJlbnRTdGFjaywgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3Qm
IHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhj
dXJyZW50U3RhY2ssIGRhdGEpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9s
VmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOworICAgIHJl
dHVybiBhZGRDYXRjaFRvVW5yZWFjaGFibGUoZXhjZXB0aW9uSW5kZXgsIHNpZ25hdHVyZSwgZGF0
YSwgcmVzdWx0cyk7Cit9CisKK1BhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgQjNJUkdlbmVyYXRv
cjo6cHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKEJhc2ljQmxvY2sqIGJsb2NrLCBQYXRj
aHBvaW50VmFsdWUqIHBhdGNoKQoreworICAgICsrbV9jYWxsU2l0ZUluZGV4OworICAgIGlmICgh
bV90cnlEZXB0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxWYWx1ZSo+IHN0
YWNrbWFwOworICAgIE9yaWdpbiBvcmlnaW4gPSB0aGlzLT5vcmlnaW4oKTsKKyAgICBmb3IgKFZh
cmlhYmxlKiBsb2NhbCA6IG1fbG9jYWxzKSB7CisgICAgICAgIFZhbHVlKiByZXN1bHQgPSBibG9j
ay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luLCBsb2Nh
bCk7CisgICAgICAgIHN0YWNrbWFwLmFwcGVuZChyZXN1bHQpOworICAgIH0KKyAgICBmb3IgKHVu
c2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9s
U3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAgICAgIENvbnRyb2xEYXRhJiBk
YXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7
CisgICAgICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNr
KClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgZm9yIChW
YXJpYWJsZSogdmFsdWUgOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgICAgICBzdGFja21hcC5h
cHBlbmQoZ2V0KGJsb2NrLCB2YWx1ZSkpOworICAgICAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55
Q2F0Y2goZGF0YSkpCisgICAgICAgICAgICBzdGFja21hcC5hcHBlbmQoZ2V0KGJsb2NrLCBkYXRh
LmV4Y2VwdGlvbigpKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gcGF0Y2gtPm51
bUNoaWxkcmVuKCk7CisgICAgaWYgKHBhdGNoLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgb2Zm
c2V0Kys7CisKKyAgICBwYXRjaC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKyAgICBw
YXRjaC0+YXBwZW5kVmVjdG9yV2l0aFJlcChzdGFja21hcCwgVmFsdWVSZXA6OkxhdGVDb2xkQW55
KTsKKworICAgIHJldHVybiBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIHsgbV9jYWxsU2l0ZUlu
ZGV4LCBvZmZzZXQgfTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFj
aGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIFZhbHVlKiBvcGVyYXRpb25SZXN1bHQgPSBlbWl0Q2F0Y2hJbXBsKENhdGNoS2lu
ZDo6Q2F0Y2gsIGRhdGEsIGV4Y2VwdGlvbkluZGV4KTsKKyAgICBWYWx1ZSogcGF5bG9hZCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBw
b2ludGVyVHlwZSgpLCBvcGVyYXRpb25SZXN1bHQsIDEpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgVHlwZSB0
eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBl
KHR5cGUpLCBvcmlnaW4oKSwgcGF5bG9hZCwgaSAqIHNpemVvZih1aW50NjRfdCkpOworICAgICAg
ICByZXN1bHRzLmFwcGVuZChwdXNoKHZhbHVlKSk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwoU3RhY2smIGN1cnJlbnRTdGFjaywg
Q29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dp
dGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24p
OworICAgIHJldHVybiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoZGF0YSk7Cit9CisKK2F1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBkYXRh
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENhdGNoSW1wbChDYXRjaEtpbmQ6OkNhdGNo
QWxsLCBkYXRhKTsKKyAgICByZXR1cm4geyB9OworfQorCitWYWx1ZSogQjNJUkdlbmVyYXRvcjo6
ZW1pdENhdGNoSW1wbChDYXRjaEtpbmQga2luZCwgQ29udHJvbFR5cGUmIGRhdGEsIHVuc2lnbmVk
IGV4Y2VwdGlvbkluZGV4KQoreworICAgIG1faGFzQ2F0Y2ggPSB0cnVlOworICAgIG1fY3VycmVu
dEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgbV9yb290QmxvY2tzLmFwcGVuZChtX2N1
cnJlbnRCbG9jayk7CisgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOworCisgICAg
aWYgKENvbnRyb2xUeXBlOjppc1RyeShkYXRhKSkgeworICAgICAgICBpZiAoa2luZCA9PSBDYXRj
aEtpbmQ6OkNhdGNoKQorICAgICAgICAgICAgZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaCgrK21fY2Fs
bFNpdGVJbmRleCwgbV9wcm9jLmFkZFZhcmlhYmxlKHBvaW50ZXJUeXBlKCkpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaEFsbCgrK21fY2FsbFNpdGVJ
bmRleCwgbV9wcm9jLmFkZFZhcmlhYmxlKHBvaW50ZXJUeXBlKCkpKTsKKyAgICB9CisKKyAgICBI
YW5kbGVyVHlwZSBoYW5kbGVyVHlwZSA9IGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCA/IEhhbmRs
ZXJUeXBlOjpDYXRjaCA6IEhhbmRsZXJUeXBlOjpDYXRjaEFsbDsKKyAgICBtX2V4Y2VwdGlvbkhh
bmRsZXJzLmFwcGVuZCh7IGhhbmRsZXJUeXBlLCBkYXRhLnRyeVN0YXJ0KCksIGRhdGEudHJ5RW5k
KCksIDAsIG1fdHJ5RGVwdGgsIGV4Y2VwdGlvbkluZGV4IH0pOworCisgICAgcmVzdG9yZVdlYkFz
c2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1l
bW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBmYWxzZSk7CisK
KyAgICBWYWx1ZSogcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKworICAg
IHVuc2lnbmVkIGluZGV4SW5CdWZmZXIgPSAwOworCisgICAgZm9yIChhdXRvJiBsb2NhbCA6IG1f
bG9jYWxzKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihpbmRl
eEluQnVmZmVyLCBwb2ludGVyLCBsb2NhbC0+dHlwZSgpKSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2so
KS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAgICAgIGF1dG8mIGNvbnRyb2xEYXRhID0g
bV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7CisgICAg
ICAgIGF1dG8mIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250
cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBjb25uZWN0Q29udHJv
bEVudHJ5KGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIGNvbnRyb2xEYXRhLCBleHByZXNzaW9uU3Rh
Y2ssIGRhdGEpOworICAgIH0KKworICAgIFBhdGNocG9pbnRWYWx1ZSogcmVzdWx0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgbV9wcm9jLmFkZFR1
cGxlKHsgcG9pbnRlclR5cGUoKSwgcG9pbnRlclR5cGUoKSB9KSwgb3JpZ2luKCkpOworICAgIHJl
c3VsdC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKyAgICByZXN1bHQtPmNsb2JiZXIo
UmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBSZWdpc3RlclNldCBj
bG9iYmVyTGF0ZSA9IFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpOwor
ICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJlc3VsdC0+
Y2xvYmJlckxhdGUoY2xvYmJlckxhdGUpOworICAgIHJlc3VsdC0+YXBwZW5kKGluc3RhbmNlVmFs
dWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcmVzdWx0LT5yZXN1bHRDb25zdHJh
aW50cy5hcHBlbmQoVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAg
IHJlc3VsdC0+cmVzdWx0Q29uc3RyYWludHMuYXBwZW5kKFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIyKSk7CisgICAgcmVzdWx0LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwor
ICAgICAgICBqaXQubW92ZShwYXJhbXNbMl0uZ3ByKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRy
VGFnKTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNh
dGNoYWJsZSkpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIFZhbHVlKiBleGNlcHRpb24g
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgcG9pbnRlclR5cGUoKSwgcmVzdWx0LCAwKTsKKyAgICBzZXQoZGF0YS5leGNlcHRpb24oKSwg
ZXhjZXB0aW9uKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmIHRhcmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKHRh
cmdldCwgZGF0YSk7Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVh
Y2hhYmxlKENvbnRyb2xUeXBlJiB0YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgdW5zaWduZWQgdGFyZ2V0RGVwdGggPSAwOworICAgIGlmIChDb250cm9s
VHlwZTo6aXNUcnkodGFyZ2V0KSkKKyAgICAgICAgdGFyZ2V0RGVwdGggPSB0YXJnZXQudHJ5RGVw
dGgoKTsKKworICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKHsgSGFuZGxlclR5cGU6OkRl
bGVnYXRlLCBkYXRhLnRyeVN0YXJ0KCksICsrbV9jYWxsU2l0ZUluZGV4LCAwLCBtX3RyeURlcHRo
LCB0YXJnZXREZXB0aCB9KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+JiBhcmdzLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFs
dWUqIHBhdGNoID0gbV9wcm9jLmFkZDxQYXRjaHBvaW50VmFsdWU+KEIzOjpWb2lkLCBvcmlnaW4o
KSk7CisgICAgcGF0Y2gtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOworICAgIHBhdGNoLT5hcHBl
bmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAgcGF0Y2gtPmFwcGVu
ZChnZXQoYXJnc1tpXSksIFZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KGkgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CisgICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRj
aFJlZ2lzdGVycygpKTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyTGF0ZSA9IFJlZ2lzdGVyU2V0
Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAg
IGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIHBhdGNoLT5jbG9i
YmVyTGF0ZShjbG9iYmVyTGF0ZSk7CisgICAgcGF0Y2gtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9
IDE7CisgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hw
b2ludEZvckV4Y2VwdGlvbnMobV9jdXJyZW50QmxvY2ssIHBhdGNoKTsKKyAgICBwYXRjaC0+c2V0
R2VuZXJhdG9yKFt0aGlzLCBleGNlcHRpb25JbmRleCwgaGFuZGxlXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKKyAgICAgICAgaGFuZGxl
LmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25l
cigpKSwgc2NyYXRjaCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcHJlY2lzZUFsbG9j
YXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3Jh
dGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFs
aWdubWVudCkpOworICAgICAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIE1hcmtlZEJsb2NrOjpvZmZz
ZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIHNjcmF0Y2gp
OworICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKKworICAgICAgICAg
ICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgUHJlY2lzZUFsbG9jYXRpb246Om9m
ZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRp
b246OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOworCisgICAgICAgICAgICBsb2FkZWRDYXNlLmxp
bmsoJmppdCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7CisKKyAgICAgICAgaml0Lm1vdmUocGFy
YW1zWzBdLmdwcigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBqaXQubW92ZShH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAg
ICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihleGNlcHRpb25JbmRleCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAg
ICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxl
clB0clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UaHJvdykpOworICAgICAgICB9KTsKKyAg
ICB9KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHBhdGNoKTsKKworICAgIHJldHVybiB7
IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJv
bFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBh
dGNoID0gbV9wcm9jLmFkZDxQYXRjaHBvaW50VmFsdWU+KEIzOjpWb2lkLCBvcmlnaW4oKSk7Cisg
ICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsK
KyAgICBSZWdpc3RlclNldCBjbG9iYmVyTGF0ZTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBw
YXRjaC0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7CisgICAgcGF0Y2gtPmFwcGVuZChpbnN0YW5j
ZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNoLT5hcHBlbmRTb21l
UmVnaXN0ZXIoZnJhbWVQb2ludGVyKCkpOworICAgIHBhdGNoLT5hcHBlbmQoZ2V0KGRhdGEuZXhj
ZXB0aW9uKCkpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaC0+bnVtR1BTY3Jh
dGNoUmVnaXN0ZXJzID0gMTsKKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9
IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhtX2N1cnJlbnRCbG9jaywgcGF0Y2gpOwor
ICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3RoaXMsIGhhbmRsZV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKKyAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9m
ZnNldE9mT3duZXIoKSksIHNjcmF0Y2gpOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHBy
ZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9u
WmVybywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lzZUFsbG9jYXRp
b246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBNYXJrZWRC
bG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZzZXRPZlZNKCkp
LCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1wKCk7CisK
KyAgICAgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIFByZWNpc2VBbGxv
Y2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0oKSAtIFByZWNp
c2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBzY3JhdGNoKTsKKworICAgICAgICAgICAgbG9h
ZGVkQ2FzZS5saW5rKCZqaXQpOworICAgICAgICB9CisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHNjcmF0Y2gpOworCisgICAgICAgIGpp
dC5tb3ZlKHBhcmFtc1swXS5ncHIoKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAg
aml0Lm1vdmUocGFyYW1zWzFdLmdwcigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAg
ICBqaXQubW92ZShwYXJhbXNbMl0uZ3ByKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAg
ICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CisgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0
LmZhckp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcp
OworICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmV0aHJvdykpOworICAgICAgICB9KTsKKyAgICB9KTsK
KyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHBhdGNoKTsKKworICAgIHJldHVybiB7IH07Cit9
CisKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29u
c3QgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIENhbGxJbmZv
cm1hdGlvbiB3YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3Jt
YXRpb25Gb3IobV9wYXJzZXItPnNpZ25hdHVyZSgpLCBDYWxsUm9sZTo6Q2FsbGVlKTsKQEAgLTIz
MDAsMTAgKzI4MjMsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29u
dHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPgogICAgICAgICBCMzo6VmFs
dWVSZXAgcmVwID0gd2FzbUNhbGxJbmZvLnJlc3VsdHNbaV07CiAgICAgICAgIGlmIChyZXAuaXNT
dGFjaygpKSB7CiAgICAgICAgICAgICBCMzo6VmFsdWUqIGFkZHJlc3MgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QWRkLCBPcmlnaW4oKSwgZnJhbWVQ
b2ludGVyKCksIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHJlcC5vZmZzZXRGcm9tRlAoKSkpOwot
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6TWVtb3J5VmFsdWU+KG1f
cHJvYywgQjM6OlN0b3JlLCBPcmlnaW4oKSwgcmV0dXJuVmFsdWVzW29mZnNldCArIGldLCBhZGRy
ZXNzKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6Ok1lbW9yeVZh
bHVlPihtX3Byb2MsIEIzOjpTdG9yZSwgT3JpZ2luKCksIGdldChyZXR1cm5WYWx1ZXNbb2Zmc2V0
ICsgaV0pLCBhZGRyZXNzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChy
ZXAuaXNSZWcoKSk7Ci0gICAgICAgICAgICBwYXRjaC0+YXBwZW5kKHJldHVyblZhbHVlc1tvZmZz
ZXQgKyBpXSwgcmVwKTsKKyAgICAgICAgICAgIHBhdGNoLT5hcHBlbmQoZ2V0KHJldHVyblZhbHVl
c1tvZmZzZXQgKyBpXSksIHJlcCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIzMTMsMTIgKzI4
MzYsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEm
LCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPgogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZEJyYW5jaChDb250cm9sRGF0YSYgZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25z
dCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgdW5pZnlWYWx1
ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnBoaXMpOworICAgIHVuaWZ5VmFsdWVzV2l0
aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YSk7CiAKICAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBk
YXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CiAgICAgaWYgKGNvbmRpdGlvbikgewogICAgICAg
ICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBvcmln
aW4oKSwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgZ2V0KGNvbmRpdGlvbikpOwogICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sodGFyZ2V0KSwg
RnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikpOwogICAgICAgICB0YXJnZXQtPmFkZFByZWRl
Y2Vzc29yKG1fY3VycmVudEJsb2NrKTsKICAgICAgICAgY29udGludWF0aW9uLT5hZGRQcmVkZWNl
c3NvcihtX2N1cnJlbnRCbG9jayk7CkBAIC0yMzMzLDExICsyODU2LDEyIEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25k
aXRpb24sIGNvbnN0CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRy
b2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CisgICAgVU5VU0VEX1BBUkFNKGV4cHJlc3Npb25TdGFjayk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKQotICAgICAgICB1bmlm
eVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIHRhcmdldHNbaV0tPnBoaXMpOwotICAg
IHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGVmYXVsdFRhcmdldC5waGlz
KTsKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCAqdGFyZ2V0
c1tpXSk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkZWZhdWx0
VGFyZ2V0KTsKIAotICAgIFN3aXRjaFZhbHVlKiBzd2l0Y2hWYWx1ZSA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8U3dpdGNoVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGNvbmRpdGlvbik7Cisg
ICAgU3dpdGNoVmFsdWUqIHN3aXRjaFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxT
d2l0Y2hWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ2V0KGNvbmRpdGlvbikpOwogICAgIHN3aXRj
aFZhbHVlLT5zZXRGYWxsVGhyb3VnaChGcmVxdWVudGVkQmxvY2soZGVmYXVsdFRhcmdldC50YXJn
ZXRCbG9ja0ZvckJyYW5jaCgpKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRz
LnNpemUoKTsgKytpKQogICAgICAgICBzd2l0Y2hWYWx1ZS0+YXBwZW5kQ2FzZShTd2l0Y2hDYXNl
KGksIEZyZXF1ZW50ZWRCbG9jayh0YXJnZXRzW2ldLT50YXJnZXRCbG9ja0ZvckJyYW5jaCgpKSkp
OwpAQCAtMjM1MSw3ICsyODc1LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjplbmRCbG9jayhDb250
cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXIKIAogICAgIEFT
U0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgpID09IGRhdGEuc2lnbmF0dXJlKCktPnJldHVybkNv
dW50KCkpOwogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpICE9IEJsb2NrVHlwZTo6TG9vcCkKLSAg
ICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkYXRhLnBoaXMpOwor
ICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEpOwogCiAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9y
aWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CiAgICAgZGF0YS5jb250aW51YXRpb24tPmFkZFBy
ZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKQEAgLTIzNjMsMzAgKzI4ODcsMzQgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNv
bnN0IFN0YWNrJiBleHByZXMKIHsKICAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRy
b2xEYXRhOwogICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5jb250aW51YXRpb247CisgICAgbV9z
dGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOwogCiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkg
PT0gQmxvY2tUeXBlOjpJZikgewogICAgICAgICBkYXRhLnNwZWNpYWwtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CiAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hZGRQcmVkZWNlc3NvcihkYXRhLnNwZWNpYWwpOwotICAgIH0KKyAg
ICB9IGVsc2UgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUcnkgfHwgZGF0YS5i
bG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoKQorICAgICAgICAtLW1fdHJ5RGVwdGg7CiAK
ICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5cGU6Okxvb3ApIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCk7
ICsraSkgewogICAgICAgICAgICAgVmFsdWUqIHJlc3VsdCA9IGRhdGEucGhpc1tpXTsKICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgICAgIGVudHJ5
LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChkYXRhLnNpZ25hdHVy
ZSgpLT5yZXR1cm5UeXBlKGkpLCByZXN1bHQpOworICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRF
eHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRhdGEuc2lnbmF0dXJlKCktPnJldHVy
blR5cGUoaSksIHB1c2gocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAg
ICBtX291dGVyTG9vcHMucmVtb3ZlTGFzdCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBpZiAoaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkpCisgICAgICAgICAgICBpZiAoaSA8IGV4
cHJlc3Npb25TdGFjay5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICArK21fc3RhY2tTaXplOwog
ICAgICAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChleHBy
ZXNzaW9uU3RhY2tbaV0pOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIFR5cGUgcmV0dXJuVHlwZSA9IGRhdGEuc2lnbmF0dXJlKCktPnJl
dHVyblR5cGUoaSk7Ci0gICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3Rh
Y2suY29uc3RydWN0QW5kQXBwZW5kKHJldHVyblR5cGUsIGNvbnN0YW50KHRvQjNUeXBlKHJldHVy
blR5cGUpLCAweGJiYWRiZWVmKSk7CisgICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHBy
ZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHJldHVyblR5cGUsIHB1c2goY29uc3RhbnQo
dG9CM1R5cGUocmV0dXJuVHlwZSksIDB4YmJhZGJlZWYpKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiAKKwogICAgIC8vIFRvcExldmVsIGRvZXMgbm90IGhhdmUgYW55IGNvZGUg
YWZ0ZXIgdGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0IGEgcmV0dXJuIGhlcmUu
CiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbCkKICAgICAg
ICAgcmV0dXJuIGFkZFJldHVybihlbnRyeS5jb250cm9sRGF0YSwgZW50cnkuZW5jbG9zZWRFeHBy
ZXNzaW9uU3RhY2spOwpAQCAtMjQwMCwxMiArMjkyOCwxMiBAQCBCMzo6VmFsdWUqIEIzSVJHZW5l
cmF0b3I6OmNyZWF0ZUNhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBPcmlnaW4gb3Jp
Z2luLAogICAgIFZlY3RvcjxCMzo6Q29uc3RyYWluZWRWYWx1ZT4gY29uc3RyYWluZWRBcmd1bWVu
dHM7CiAgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5nQ29udmVu
dGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcihzaWduYXR1cmUpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQotICAgICAgICBjb25zdHJhaW5lZEFyZ3VtZW50
cy5hcHBlbmQoQjM6OkNvbnN0cmFpbmVkVmFsdWUoYXJnc1tpXSwgd2FzbUNhbGxJbmZvLnBhcmFt
c1tpXSkpOworICAgICAgICBjb25zdHJhaW5lZEFyZ3VtZW50cy5hcHBlbmQoQjM6OkNvbnN0cmFp
bmVkVmFsdWUoZ2V0KGJsb2NrLCBhcmdzW2ldKSwgd2FzbUNhbGxJbmZvLnBhcmFtc1tpXSkpOwog
CiAgICAgbV9wcm9jLnJlcXVlc3RDYWxsQXJnQXJlYVNpemVJbkJ5dGVzKFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHdhc21DYWxsSW5mby5oZWFkZXJBbmRB
cmd1bWVudFN0YWNrU2l6ZUluQnl0ZXMpKTsKIAogICAgIEIzOjpUeXBlIHJldHVyblR5cGUgPSB0
b0IzUmVzdWx0VHlwZSgmc2lnbmF0dXJlKTsKLSAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRj
aHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIHJl
dHVyblR5cGUsIG9yaWdpbik7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9w
cm9jLmFkZDxQYXRjaHBvaW50VmFsdWU+KHJldHVyblR5cGUsIG9yaWdpbik7CiAgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7
CiAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0
ZXJzRm9ySlNDYWxsKCkpOwogICAgIHBhdGNocG9pbnRGdW5jdG9yKHBhdGNocG9pbnQpOwpAQCAt
MjQxNyw2ICsyOTQ1LDcgQEAgQjM6OlZhbHVlKiBCM0lSR2VuZXJhdG9yOjpjcmVhdGVDYWxsUGF0
Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9jaywgT3JpZ2luIG9yaWdpbiwKICAgICAgICAgICAgIHJl
c3VsdENvbnN0cmFpbnRzLmFwcGVuZChCMzo6VmFsdWVSZXAodmFsdWVMb2NhdGlvbikpOwogICAg
ICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50cyA9IFdURk1vdmUocmVzdWx0Q29uc3Ry
YWludHMpOwogICAgIH0KKyAgICBibG9jay0+YXBwZW5kKHBhdGNocG9pbnQpOwogICAgIHJldHVy
biBwYXRjaHBvaW50OwogfQogCkBAIC0yNDM4LDExICsyOTY3LDExIEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxCMzo6VHlwZT4mIHR1cGxlID0gbV9w
cm9jLnR1cGxlRm9yVHlwZShyZXR1cm5UeXBlKTsKICAgICAgICAgICAgIEFTU0VSVChzaWduYXR1
cmUucmV0dXJuQ291bnQoKSA9PSB0dXBsZS5zaXplKCkpOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxFeHRyYWN0VmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHR1cGxlW2ldLCBjYWxsUmVzdWx0LCBpKSk7CisgICAgICAg
ICAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4
dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHVwbGVbaV0sIGNhbGxSZXN1bHQsIGkpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OiB7Ci0gICAg
ICAgICAgICByZXN1bHRzLmFwcGVuZChjYWxsUmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKHB1c2goY2FsbFJlc3VsdCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMjQ3MSw4ICszMDAwLDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwK
ICAgICAgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJl
IGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVt
b3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Cisg
ICAgICAgICAgICAgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJl
UGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoaXNXYXNtQmxvY2ssIHBhdGNocG9pbnQpOworICAgICAg
ICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdGhpcywgaGFuZGxlLCB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwor
ICAgICAgICAgICAgICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwog
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRT
YWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNt
RW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwpAQCAtMjQ5OCw4ICszMDI5LDEw
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAvLyBXZSBwZXNzaW1p
c3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMg
Ym91bmRzIGNoZWNraW5nLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qg
aGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcyMTgxCiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVn
aXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKLSAg
ICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3JldHVyblR5cGVdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgICAgICAgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBw
cmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoaXNFbWJlZGRlckJsb2NrLCBwYXRjaHBvaW50
KTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3RoaXMsIGhhbmRs
ZSwgcmV0dXJuVHlwZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAg
ICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICAgICAgICAgICAg
ICBqaXQuY2FsbChwYXJhbXNbcGFyYW1zLnByb2MoKS5yZXN1bHRDb3VudChyZXR1cm5UeXBlKV0u
Z3ByKCksIFdhc21FbnRyeVB0clRhZyk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICB9KSk7CkBAIC0yNTI3LDggKzMwNjAsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxs
KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAg
ICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciB0aGUgc2l6ZSByZWdpc3RlciBzaW5j
ZSB0aGUgTExJbnQgYWx3YXlzIGJvdW5kcyBjaGVja3MKICAgICAgICAgICAgICAgICBpZiAobV9t
b2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZyB8fCBtX2luZm8ubWVtb3J5LmlzU2hhcmVkKCkp
CiAgICAgICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0
IHsgUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS5ib3VuZHNDaGVja2luZ1NpemVSZWdpc3RlciB9
KTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICAgICAgUGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMo
bV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQpOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbdGhpcywgaGFuZGxlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVu
Y3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICBo
YW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwo
KTsKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQo
eyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBm
dW5jdGlvbkluZGV4IH0pOwpAQCAtMjU0Myw3ICszMDc4LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJs
ZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewotICAgIEV4
cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgpOworICAgIFZhbHVlKiBj
YWxsZWVJbmRleCA9IGdldChhcmdzLnRha2VMYXN0KCkpOwogICAgIEFTU0VSVChzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKIAogICAgIG1fbWFrZXNDYWxscyA9IHRy
dWU7CkBAIC0yNTUyLDExICszMDg3LDExIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbElu
ZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0CiAgICAg
Ly8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBmb3Igb3VyIHN0YWNrIGNoZWNrIGNhbGN1bGF0aW9u
LgogICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxB
cmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOwogCi0gICAgRXhw
cmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlcjsKLSAgICBFeHByZXNzaW9uVHlwZSBp
bnN0YW5jZXNCdWZmZXI7Ci0gICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
ckxlbmd0aDsKKyAgICBWYWx1ZSogY2FsbGFibGVGdW5jdGlvbkJ1ZmZlcjsKKyAgICBWYWx1ZSog
aW5zdGFuY2VzQnVmZmVyOworICAgIFZhbHVlKiBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3Ro
OwogICAgIHsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdp
bigpLAorICAgICAgICBWYWx1ZSogdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAgICAg
ICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0
T2ZUYWJsZVB0cihtX251bUltcG9ydEZ1bmN0aW9ucywgdGFibGVJbmRleCkpKTsKICAgICAgICAg
Y2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgICAg
ICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oRnVuY1JlZlRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9u
cygpKSk7CkBAIC0yNTc4LDE3ICszMTEzLDE3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0CiAK
ICAgICBjYWxsZWVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgWkV4dDMyLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgpOwogCi0gICAgRXhwcmVzc2lvblR5cGUg
Y2FsbGFibGVGdW5jdGlvbjsKKyAgICBWYWx1ZSogY2FsbGFibGVGdW5jdGlvbjsKICAgICB7CiAg
ICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBpbiB0aGUgdGFibGUgaW5kZXggc3BhY2Ugd2Ug
YXJlIGxvb2tpbmcgZm9yLgotICAgICAgICBFeHByZXNzaW9uVHlwZSBvZmZzZXQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwgb3JpZ2luKCksCisgICAgICAg
IFZhbHVlKiBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IE11bCwgb3JpZ2luKCksCiAgICAgICAgICAgICBjYWxsZWVJbmRleCwgY29uc3RhbnQocG9pbnRl
clR5cGUoKSwgc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24pKSk7CiAgICAgICAg
IGNhbGxhYmxlRnVuY3Rpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEFkZCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIsIG9mZnNldCk7CiAKICAg
ICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBpcyBp
bml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUlu
ZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4KICAgICAgICAgLy8gRklYTUU6IHdo
ZW4gd2UgaGF2ZSB0cmFwIGhhbmRsZXJzLCB3ZSBjYW4ganVzdCBsZXQgdGhlIGNhbGwgZmFpbCBi
ZWNhdXNlIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4IGlzIDAuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcyMTAKICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpID09IHNpemVvZih1
aW50NjRfdCksICJMb2FkIGNvZGVnZW4gYXNzdW1lcyBpNjQiKTsKLSAgICAgICAgRXhwcmVzc2lv
blR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlv
biwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0
T2ZTaWduYXR1cmVJbmRleCgpKSk7CisgICAgICAgIFZhbHVlKiBjYWxsZWVTaWduYXR1cmVJbmRl
eCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
SW50NjQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90PihXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkpKTsKICAg
ICAgICAgewogICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAogICAgICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9y
aWdpbigpLApAQCAtMjYwMiw3ICszMTM3LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxs
SW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKIAog
ICAgICAgICAvLyBDaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgdGhlIHZhbHVlIHdlIGV4cGVj
dC4KICAgICAgICAgewotICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUgZXhwZWN0ZWRTaWduYXR1
cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpOworICAgICAg
ICAgICAgVmFsdWUqIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChzaWduYXR1cmUpKTsKICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4o
KSwKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIE5vdEVxdWFsLCBvcmlnaW4oKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgsIGV4cGVjdGVkU2ln
bmF0dXJlSW5kZXgpKTsKIApAQCAtMjYxNiw3ICszMTUxLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXQKICAgICAgICAgY2FsbGVlSW5kZXgsIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVv
ZihJbnN0YW5jZSopKSk7CiAgICAgVmFsdWUqIGNhbGxlZUluc3RhbmNlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBBZGQsIG9yaWdpbigpLCBpbnN0YW5jZXNCdWZmZXIsIG9mZnNldCkpOwotICAgIEV4cHJlc3Np
b25UeXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgIFZhbHVlKiBjYWxs
ZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4o
KSwgY2FsbGFibGVGdW5jdGlvbiwKICAgICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+KFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigp
KSkpOwogCkBAIC0yNjI1LDcgKzMxNjAsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJ
bmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdAogCiBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxSZWYoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWUgPSBhcmdzLnRha2VMYXN0
KCk7CisgICAgVmFsdWUqIGNhbGxlZSA9IGdldChhcmdzLnRha2VMYXN0KCkpOwogICAgIEFTU0VS
VChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKICAgICBtX21ha2Vz
Q2FsbHMgPSB0cnVlOwogCkBAIC0yNjQyLDI0ICszMTc3LDI3IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlCiAgICAgVmFsdWUqIGNhbGxlZUluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9y
aWdpbigpLCBqc0NhbGxlZUluc3RhbmNlLCBpbnN0YW5jZU9mZnNldCkpOwogCi0gICAgRXhwcmVz
c2lvblR5cGUgY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgVmFsdWUqIGNh
bGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdp
bigpLCBjYWxsZWUsCiAgICAgICAgICAgICBzYWZlQ2FzdDxpbnQzMl90PihXZWJBc3NlbWJseUZ1
bmN0aW9uQmFzZTo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkpKSk7CiAKICAgICBy
ZXR1cm4gZW1pdEluZGlyZWN0Q2FsbChjYWxsZWVJbnN0YW5jZSwgY2FsbGVlQ29kZSwgc2lnbmF0
dXJlLCBhcmdzLCByZXN1bHRzKTsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeShjb25z
dCBFeHByZXNzaW9uVHlwZSBwaGksIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSkKK3ZvaWQg
QjNJUkdlbmVyYXRvcjo6dW5pZnkoVmFsdWUqIHBoaSwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291
cmNlKQogewotICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBzb3VyY2UsIHBoaSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGdldChzb3VyY2UpLCBwaGkpOwogfQog
Ci12b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IFN0YWNrJiBy
ZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0KQordm9pZCBCM0lSR2VuZXJhdG9y
Ojp1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYgcmVzdWx0U3RhY2ssIGNvbnN0IENv
bnRyb2xEYXRhJiBibG9jaykKIHsKLSAgICBBU1NFUlQocmVzdWx0LnNpemUoKSA8PSByZXN1bHRT
dGFjay5zaXplKCkpOworICAgIGNvbnN0IFZlY3RvcjxWYWx1ZSo+JiBwaGlzID0gYmxvY2sucGhp
czsKKyAgICBzaXplX3QgcmVzdWx0U2l6ZSA9IHBoaXMuc2l6ZSgpOwogCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kpCi0gICAgICAgIHVuaWZ5KHJlc3VsdFty
ZXN1bHQuc2l6ZSgpIC0gMSAtIGldLCByZXN1bHRTdGFjay5hdChyZXN1bHRTdGFjay5zaXplKCkg
LSAxIC0gaSkpOworICAgIEFTU0VSVChyZXN1bHRTaXplIDw9IHJlc3VsdFN0YWNrLnNpemUoKSk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdFNpemU7ICsraSkKKyAgICAgICAg
dW5pZnkocGhpc1tyZXN1bHRTaXplIC0gMSAtIGldLCByZXN1bHRTdGFjay5hdChyZXN1bHRTdGFj
ay5zaXplKCkgLSAxIC0gaSkpOwogfQogCiBzdGF0aWMgdm9pZCBkdW1wRXhwcmVzc2lvblN0YWNr
KGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEIzSVJHZW5lcmF0b3I6OlN0YWNrJiBl
eHByZXNzaW9uU3RhY2spCkBAIC0yNzAzLDggKzMyNDEsMTEgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxh
dGlvbkMKIAogICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBt
YWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVu
dHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKKyAgICBjb21waWxhdGlv
bkNvbnRleHQucHJvY2VkdXJlID0gbWFrZVVuaXF1ZTxQcm9jZWR1cmU+KCk7CisKKyAgICBQcm9j
ZWR1cmUmIHByb2NlZHVyZSA9ICpjb21waWxhdGlvbkNvbnRleHQucHJvY2VkdXJlOwogCi0gICAg
UHJvY2VkdXJlIHByb2NlZHVyZTsKKyAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9p
bnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKIAogICAgIHByb2NlZHVyZS5zZXRP
cmlnaW5QcmludGVyKFtdIChQcmludFN0cmVhbSYgb3V0LCBPcmlnaW4gb3JpZ2luKSB7CiAgICAg
ICAgIGlmIChvcmlnaW4uZGF0YSgpKQpAQCAtMjcyNSw2ICszMjY2LDcgQEAgRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShD
b21waWxhdGlvbkMKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoaXJH
ZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2ln
bmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJz
ZSgpKTsKIAorICAgIGlyR2VuZXJhdG9yLmluc2VydEVudHJ5U3dpdGNoKCk7CiAgICAgaXJHZW5l
cmF0b3IuaW5zZXJ0Q29uc3RhbnRzKCk7CiAKICAgICBwcm9jZWR1cmUucmVzZXRSZWFjaGFiaWxp
dHkoKTsKQEAgLTI3MzYsMTggKzMyNzgsNDMgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkMKICAg
ICBkYXRhTG9nSWYoV2FzbUIzSVJHZW5lcmF0b3JJbnRlcm5hbDo6dmVyYm9zZSwgIlBvc3QgU1NB
OiAiLCBwcm9jZWR1cmUpOwogICAgIAogICAgIHsKKyAgICAgICAgaWYgKHNob3VsZER1bXBEaXNh
c3NlbWJseUZvcihjb21waWxhdGlvbk1vZGUpKQorICAgICAgICAgICAgcHJvY2VkdXJlLmNvZGUo
KS5zZXREaXNhc3NlbWJsZXIobWFrZVVuaXF1ZTxCMzo6QWlyOjpEaXNhc3NlbWJsZXI+KCkpOwog
ICAgICAgICBCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJlKTsKICAgICAgICAgQjM6
OmdlbmVyYXRlKHByb2NlZHVyZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJ
VCk7CiAgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMg
PSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKICAgICAgICAgcmVzdWx0LT5lbnRyeXBv
aW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KCk7CiAgICAgfQogCisgICAgcmVzdWx0LT5zdGFja21hcHMgPSBpckdlbmVyYXRv
ci50YWtlU3RhY2ttYXBzKCk7CisgICAgcmVzdWx0LT5leGNlcHRpb25IYW5kbGVycyA9IGlyR2Vu
ZXJhdG9yLnRha2VFeGNlcHRpb25IYW5kbGVycygpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAordm9pZCBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhWZWN0b3I8Q29kZUxvY2F0
aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiBoYW5kbGVycywgY29uc3QgSW50ZXJu
YWxGdW5jdGlvbiogZnVuY3Rpb24sIGNvbnN0IENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCwg
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBpZiAoIWNvbnRleHQucHJvY2VkdXJlKQor
ICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAwOworICAg
IHVuc2lnbmVkIG51bUVudHJ5cG9pbnRzID0gY29udGV4dC5wcm9jZWR1cmUtPm51bUVudHJ5cG9p
bnRzKCk7CisgICAgZm9yIChjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVySW5mbyA6
IGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycykgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChl
bnRyeXBvaW50SW5kZXggPCBudW1FbnRyeXBvaW50cyk7CisgICAgICAgIGlmIChoYW5kbGVySW5m
by5tX3R5cGUgPT0gSGFuZGxlclR5cGU6OkRlbGVnYXRlKSB7CisgICAgICAgICAgICBoYW5kbGVy
cy5hcHBlbmQoeyB9KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgKytlbnRyeXBvaW50SW5kZXg7CisgICAgICAgIGhhbmRsZXJzLmFwcGVuZChsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oY29udGV4dC5wcm9jZWR1cmUtPmNv
ZGUoKS5lbnRyeXBvaW50TGFiZWwoZW50cnlwb2ludEluZGV4KSkpOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVChlbnRyeXBvaW50SW5kZXggPT0gbnVtRW50cnlwb2ludHMgLSAxKTsKK30KKwog
Ly8gQ3VzdG9tIHdhc20gb3BzLiBUaGVzZSBhcmUgdGhlIG9uZXMgdG9vIG1lc3N5IHRvIGRvIGlu
IHdhc20uanNvbi4KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9yTW9kT3JEaXYo
QjM6Ok9wY29kZSBvcGVyYXRpb24sIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBl
IHJpZ2h0KQordm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9w
Y29kZSBvcGVyYXRpb24sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCiB7CiAgICAgQVNTRVJU
KG9wZXJhdGlvbiA9PSBEaXYgfHwgb3BlcmF0aW9uID09IE1vZCB8fCBvcGVyYXRpb24gPT0gVURp
diB8fCBvcGVyYXRpb24gPT0gVU1vZCk7CiAgICAgY29uc3QgQjM6OlR5cGUgdHlwZSA9IGxlZnQt
PnR5cGUoKTsKQEAgLTI3NzYsMTA2ICszMzQzLDEyNSBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVt
aXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlIG9wZXJhdGlvbiwgRXhwcmVzc2lvblR5cGUg
bAogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
RGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJEaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlw
ZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewog
ICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBEaXY7CisgICAgVmFsdWUqIGxlZnQgPSBnZXQobGVm
dFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFyKTsKICAgICBlbWl0Q2hlY2tz
Rm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwor
ICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVt
cGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVM+KEV4cHJl
c3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyUmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5cGUgcmlnaHRWYXIs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBjb25zdCBC
Mzo6T3Bjb2RlIG9wID0gTW9kOworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAg
IFZhbHVlKiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2
KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAg
cmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIGNo
aWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAog
dGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KEV4
cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyRGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5cGUgcmlnaHRW
YXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBjb25z
dCBCMzo6T3Bjb2RlIG9wID0gVURpdjsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChsZWZ0VmFyKTsK
KyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVja3NGb3JNb2RP
ckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVz
dWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+
Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtVT4oRXhwcmVzc2lvblR5
cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1V
PihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNv
ZGUgb3AgPSBVTW9kOworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVl
KiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBs
ZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNo
KG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBs
ZWZ0LCByaWdodCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBF
eHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlM+KEV4cHJlc3Np
b25UeXBlIGxlZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IERp
djsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChsZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBn
ZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQp
OwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
b3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQp
KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0UmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5
cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0
VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBNb2Q7CisgICAgVmFs
dWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFy
KTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIGNoaWxsKG9wKSwg
b3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hpbGwob3ApLCBvcmlnaW4oKSwgbGVmdCwgcmln
aHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lv
blR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPihFeHByZXNzaW9uVHlwZSBs
ZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBVRGl2OworICAg
IFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVlKiByaWdodCA9IGdldChyaWdo
dFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAg
cmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3Jp
Z2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCkpOwogICAg
IHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdo
dCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnRWYXIsIEV4
cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVNb2Q7CisgICAgVmFsdWUqIGxl
ZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFyKTsKICAg
ICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MkN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6PihFeHBy
ZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+
KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczMyKHBhcmFtc1sxXS5ncHIoKSwg
cGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZm
ZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVz
aChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQo
YXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOwog
ICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAg
IHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQuY291bnRUcmFp
bGluZ1plcm9zNjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwog
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0g
cGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7
IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBvcGNu
dD4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogI2lmIENQVShYODZf
NjQpCiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7
CiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CkBAIC0y
ODg0LDE5ICszNDcwLDIwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJQ
b3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmCiAgICAgICAgICAgICBq
aXQuY291bnRQb3B1bGF0aW9uMzIocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwog
ICAgICAgICB9KTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUo
KTsKLSAgICAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChw
YXRjaHBvaW50KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAjZW5kaWYKIAogICAgIFZh
bHVlKiBmdW5jQWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uUG9wY291bnQzMikpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwgZnVu
Y0FkZHJlc3MsIGFyZyk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLCBFZmZlY3RzOjpub25lKCks
IGZ1bmNBZGRyZXNzLCBhcmcpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1h
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZ1Zh
ciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVl
KiBhcmcgPSBnZXQoYXJnVmFyKTsKICNpZiBDUFUoWDg2XzY0KQogICAgIGlmIChNYWNyb0Fzc2Vt
Ymxlcjo6c3VwcG9ydHNDb3VudFBvcHVsYXRpb24oKSkgewogICAgICAgICBQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1
ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOwpAQCAtMjkwNSwxOSArMzQ5MiwyMCBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJgogICAgICAgICAgICAgaml0LmNvdW50UG9wdWxhdGlvbjY0KHBh
cmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAgfSk7CiAgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgICAgIHJlc3VsdCA9IHBh
dGNocG9pbnQ7CisgICAgICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogI2VuZGlmCiAKICAgICBWYWx1ZSogZnVuY0FkZHJlc3MgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRh
Z0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblBvcGNvdW50NjQpKTsKLSAgICBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50
NjQsIG9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpOworICAgIHJl
c3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2Ms
IEludDY0LCBvcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLCBmdW5jQWRkcmVzcywgYXJnKSk7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRP
cDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPEY2NENvbnZl
cnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRj
aHBvaW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBvcmlnaW4oKSk7CiAgICAgaWYgKGlzWDg2KCkp
CiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CkBAIC0yOTMy
LDEzICszNTIwLDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlCiAjZW5kaWYKICAgICB9KTsK
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9
IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4g
eyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjMyQ29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYz
MkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIG9yaWdpbigpKTsKICAgICBpZiAoaXNY
ODYoKSkKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKQEAg
LTI5NTMsNjUgKzM1NDIsNzAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYz
MkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb24KICNlbmRpZgogICAg
IH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVz
dWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJl
dHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
NjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5yb3VuZFRvd2FyZE5lYXJlc3RJbnRE
b3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOwogICAgIH0pOwogICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hw
b2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9
CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZWFy
ZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZWFyZXN0PihF
eHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFs
dWU+KG1fcHJvYywgRmxvYXQsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJn
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludEZsb2F0KHBhcmFtc1sx
XS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVz
dWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+
Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmdW
YXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1
ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRG91Ymxl
LCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVS
ZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
IGppdC5yb3VuZFRvd2FyZFplcm9Eb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnBy
KCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQp
OwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyVHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsK
ICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBGbG9hdCwgb3JpZ2luKCkpOwogICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQucm91bmRUb3dhcmRaZXJvRmxv
YXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOwogICAgIH0pOwogICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2lu
dDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAK
IHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NG
NjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2ND4o
RXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXgg
PSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLXN0YXRpY19jYXN0PGRv
dWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CiAgICAgVmFsdWUq
IG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2Fz
dDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAtIDEuMCkpOwog
ICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMwMjgsMTMgKzM2MjIsMTQgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9JbnQzMihwYXJh
bXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAg
IHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxh
dGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0YzMj4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHByZXNz
aW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0
YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CiAgICAgVmFsdWUqIG1pbiA9IGNv
bnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSogb3V0T2ZC
b3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwg
b3JpZ2luKCksCkBAIC0zMDUxLDE0ICszNjQ2LDE1IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
CiAgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9JbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFt
c1swXS5ncHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6
Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0
Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZ1Zhciwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBh
cmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3
aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWluKCkpICogLTIuMCkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChE
b3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOwogICAgIFZhbHVlKiBvdXRPZkJv
dW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBv
cmlnaW4oKSwKQEAgLTMwNzUsMTMgKzM2NzEsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkK
ICAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJh
bXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3Rz
Ojpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBh
dGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFy
ZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChGbG9hdCwgYml0d2lz
ZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0yLjApKSk7CiAgICAgVmFsdWUq
IG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0
PGZsb2F0PigtMS4wKSkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMwOTgsMTMg
KzM2OTUsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUYz
Mj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRl
RmxvYXRUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgfSk7
CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQg
PSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJu
IHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAg
VmFsdWUqIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigtc3Rh
dGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsK
ICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkp
KSk7CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzEyMSwxMyArMzcxOSwxNCBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDY0
KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7
CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0
ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGNjQ+KEV4
cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0g
Y29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJs
ZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogLTIuMCkpOwogICAgIFZh
bHVlKiBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkp
OwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMxNjQsMTMgKzM3NjMsMTQgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50NjQo
cGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50KTsKICAg
ICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJl
c3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICBy
ZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsK
ICAgICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4o
LXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkp
KTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJf
dD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigp
KSkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMxODcsMTMgKzM3ODcsMTQgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb0ludDY0
KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7
CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0
ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMy
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+KEV4
cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0g
Y29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0
PigtMi4wKSkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0
PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKICAgICBWYWx1ZSogb3V0T2ZC
b3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwg
b3JpZ2luKCksCkBAIC0zMjMwLDcgKzM4MzEsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQog
ICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1z
WzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAg
IHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKaW5kZXggMWQ2NjIx
MGUxYjUwNDNhOWE0MWZhNjEzZjUyMjQ5M2FlZTMwNzQ3YS4uMjg5MWQxZTQ0ZjNhZjM3ZDg2MTkz
NDY2ZjlkYzk3ZTZiOGRkNjE5YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5oCkBAIC00MCw3ICs0MCwxMyBAQAogCiBleHRlcm4gIkMiIHZvaWQg
ZHVtcFByb2NlZHVyZSh2b2lkKik7CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEIzIHsKK2NsYXNzIFByb2NlZHVyZTsKK30K
KworbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBNZW1vcnlJbmZvcm1hdGlvbjsKIApAQCAtNDgs
MTAgKzU0LDEzIEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogICAgIHN0ZDo6dW5pcXVl
X3B0cjxDQ2FsbEhlbHBlcnM+IGVtYmVkZGVyRW50cnlwb2ludEpJVDsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q0NhbGxIZWxwZXJzPiB3YXNtRW50cnlwb2ludEpJVDsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8T3BhcXVlQnlwcm9kdWN0cz4gd2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxCMzo6UHJvY2VkdXJlPiBwcm9jZWR1cmUgeyBudWxscHRyIH07CiB9OwogCiBF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VB
bmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0
IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIHVuc2lnbmVkJiBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9y
eU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3Qg
bG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIpOwogCit2b2lkIGNv
bXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxF
eGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJbnRlcm5hbEZ1bmN0aW9u
KiwgY29uc3QgQ29tcGlsYXRpb25Db250ZXh0JiwgTGlua0J1ZmZlciYpOworCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4IGFmMmZjNzJi
YWNiYjM0YzhiMzM1NzhkOTA3YjM3YzYwMjQwZmI5ZmIuLjQ2NmEyNjBiZmYyNDhiZGI0MjU5M2Iw
NGM3MDdlNWZiODkxZWFhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5jcHAKQEAgLTY2LDYgKzY2LDcgQEAgYm9vbCBCQlFQbGFuOjpwcmVwYXJlSW1wbCgpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnJlc2l6
ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMucmVz
aXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fY29tcGlsYXRpb25Db250ZXh0cy5yZXNpemUo
ZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV90aWVyVXBDb3VudHMucmVzaXplKGZ1bmN0aW9ucy5z
aXplKCkpOwogCkBAIC0xMDksNiArMTEwLDkgQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIFZlY3RvcjxD
b2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4gZXhjZXB0aW9uSGFuZGxl
ckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhleGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zLCBmdW5jdGlvbi5nZXQoKSwgY29udGV4dCwgbGlua0J1ZmZlcik7
CisKICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gbV9mdW5jdGlvbkluZGV4ICsgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwogICAgIFNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlv
blNpZ25hdHVyZUluZGljZXNbbV9mdW5jdGlvbkluZGV4XTsKICAgICBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwpA
QCAtMTE4LDcgKzEyMiw3IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRy
eXBvaW50OwogICAgIHsKLSAgICAgICAgUmVmPEJCUUNhbGxlZT4gY2FsbGVlID0gQkJRQ2FsbGVl
OjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFj
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3Bh
Y2UpLCBXVEZNb3ZlKHRpZXJVcCksIFdURk1vdmUodW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpKTsK
KyAgICAgICAgUmVmPEJCUUNhbGxlZT4gY2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92
ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKHRp
ZXJVcCksIFdURk1vdmUodW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpLCBXVEZNb3ZlKGZ1bmN0aW9u
LT5zdGFja21hcHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1v
dmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6
Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKICAgICAgICAgQVNTRVJUKCFtX2NvZGVCbG9jay0+bV9i
YnFDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0pOwogICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVl
LT5lbnRyeXBvaW50KCk7CkBAIC0xOTQsMTEgKzE5OCwxNSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4gQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZQogICAgIGJvb2wgZm9yY2VVc2luZ0IzID0gZmFsc2U7CiAgICAgaWYgKE9wdGlvbnM6Ondl
YkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpICYmIG1fbW9kdWxlSW5mb3JtYXRpb24tPmNv
ZGVTZWN0aW9uU2l6ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJlc2hvbGQo
KSkKICAgICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKKyAgICBlbHNlIGlmICghbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+bV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrR2V0KGZ1bmN0
aW9uSW5kZXgpKQorICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOworICAgIGVsc2UgaWYgKCFP
cHRpb25zOjp3YXNtQkJRVXNlc0FpcigpKQorICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwog
Ci0gICAgaWYgKCFmb3JjZVVzaW5nQjMgJiYgT3B0aW9uczo6d2FzbUJCUVVzZXNBaXIoKSkKLSAg
ICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWlyKGNvbnRleHQs
IGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7Ci0gICAgZWxz
ZQorICAgIGlmIChmb3JjZVVzaW5nQjMpCiAgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9
IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5k
ZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCk7CisgICAgZWxzZQorICAgICAgICBwYXJzZUFuZENvbXBp
bGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVy
ZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1f
bW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VB
bmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CkBA
IC0yMjIsMTMgKzIzMCwxNSBAQCB2b2lkIEJCUVBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRpb24o
KQogICAgICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBmdW5jdGlvbklu
ZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwogICAgICAg
ICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rp
b25JbmRleFNwYWNlU2l6ZSgpKTsKICAgICAgICAgeworICAgICAgICAgICAgSW50ZXJuYWxGdW5j
dGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS5n
ZXQoKTsKICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50
cnlwb2ludEpJVCwgbnVsbHB0ciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6V2FzbSwgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZh
aWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAgQmFzZTo6ZmFpbChtYWtlU3RyaW5n
KCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5n
OjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9u
SW5kZXhdLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4o
CisgICAgICAgICAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhtX2V4Y2VwdGlv
bkhhbmRsZXJMb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLCBjb250ZXh0LCBsaW5r
QnVmZmVyKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0g
bWFrZVVuaXF1ZTxDb21waWxhdGlvbj4oCiAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShs
aW5rQnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IEJCUSBmdW5jdGlv
blslaV0gJXMgbmFtZSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFz
Y2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwg
bV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2Up
KSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNt
RW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgfQpAQCAtMjcyLDcgKzI4Miw3IEBAIHZv
aWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2FsbGVlSW5pdGlhbGl6ZXImIGNh
bGxiYWNrKQogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50
ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKICAgICAgICAgc2l6
ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGludGVybmFsRnVuY3Rpb25JbmRleCArIG1fbW9kdWxl
SW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKLSAgICAgICAgUmVmPEJCUUNhbGxl
ZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0
aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9u
LT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90aWVyVXBD
b3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dh
c21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7CisgICAgICAgIFJlZjxCQlFDYWxsZWU+
IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlv
bi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKG1fdGllclVwQ291
bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUoZnVuY3Rpb24tPnN0YWNrbWFw
cyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShtX2V4Y2Vw
dGlvbkhhbmRsZXJMb2NhdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSkpOwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlv
biwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50cnlwb2ludENhbGxlZS5wdHIoKSkpOwogCiAg
ICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RGTW92ZShlbWJlZGRlckVu
dHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAppbmRleCBkYmVmYzU0YWQ3NTAwNWE3MGQx
ZTFhZjk2MDAwMTc0ZjhlY2JkYjNmLi5kYzAwMjI3NTY2MjI1MWI4YWIwZjA3ZGVhYjA5ODZlOTdj
ZmU2YTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxh
bi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKQEAgLTgz
LDYgKzgzLDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlv
bj4gY29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvbXBpbGF0aW9uQ29u
dGV4dCYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIFRpZXJVcENvdW50Kik7CiAK
ICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+PiBtX3dhc21JbnRl
cm5hbEZ1bmN0aW9uczsKKyAgICBWZWN0b3I8VmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+Pj4gbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zOwogICAgIEhh
c2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRGVmYXVs
dEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQz
Ml90Pj4gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3RvcjxDb21w
aWxhdGlvbkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKICAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPFRpZXJVcENvdW50Pj4gbV90aWVyVXBDb3VudHM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwCmluZGV4IDIxZDk3YjEzY2VlMGM2NWUxNjMxYzc2ZDI1
ODkzMzMzNTMyZWU5NDAuLmI0NjZiN2ZjZWI4MGEzZTI3Mjc5OWYzNzVmYWQwYmRkYWFiZDk0NWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJMTEludEV4Y2Vw
dGlvbnMuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXYXNt
Q2FsbGluZ0NvbnZlbnRpb24uaCIKIApAQCAtNTYsNiArNTcsMTIgQEAgdm9pZCBDYWxsZWU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBvdXQucHJpbnQobWFrZVN0cmluZyhtX2lu
ZGV4T3JOYW1lKSk7CiB9CiAKK2NvbnN0IEhhbmRsZXJJbmZvKiBDYWxsZWU6OmhhbmRsZXJGb3JJ
bmRleChJbnN0YW5jZSYgaW5zdGFuY2UsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBUYWcqIHRhZykK
K3sKKyAgICBBU1NFUlQoaGFzRXhjZXB0aW9uSGFuZGxlcnMoKSk7CisgICAgcmV0dXJuIEhhbmRs
ZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgoaW5zdGFuY2UsIG1fZXhjZXB0aW9uSGFuZGxlcnMsIGlu
ZGV4LCB0YWcpOworfQorCiBKSVRDYWxsZWU6OkpJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1v
ZGUgY29tcGlsYXRpb25Nb2RlLCBFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKICAgICA6IENhbGxl
ZShjb21waWxhdGlvbk1vZGUpCiAgICAgLCBtX2VudHJ5cG9pbnQoV1RGTW92ZShlbnRyeXBvaW50
KSkKQEAgLTY5LDYgKzc2LDMyIEBAIEpJVENhbGxlZTo6SklUQ2FsbGVlKFdhc206OkNvbXBpbGF0
aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5cG9pbnQmJiBlbnRyeXBvCiB7CiB9CiAKK0xM
SW50Q2FsbGVlOjpMTEludENhbGxlZShzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+
IGNvZGVCbG9jaywgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxO
YW1lU2VjdGlvbj4+JiYgbmFtZSkKKyAgICA6IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6
OkxMSW50TW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCisgICAgLCBtX2NvZGVCbG9jayhXVEZN
b3ZlKGNvZGVCbG9jaykpCit7CisgICAgbGlua0V4Y2VwdGlvbkhhbmRsZXJzKCk7Cit9CisKK3Zv
aWQgTExJbnRDYWxsZWU6OmxpbmtFeGNlcHRpb25IYW5kbGVycygpCit7CisgICAgaWYgKHNpemVf
dCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKKyAg
ICAgICAgbV9leGNlcHRpb25IYW5kbGVycy5yZXNpemVUb0ZpdChjb3VudCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgY29uc3QgVW5s
aW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlv
bkhhbmRsZXIoaSk7CisgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fZXhjZXB0
aW9uSGFuZGxlcnNbaV07CisgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICptX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVyLm1fdGFyZ2V0KS5wdHIoKTsK
KyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHRh
cmdldDsKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZEhhbmRsZXIubV90eXBlID09IEhhbmRsZXJU
eXBlOjpDYXRjaCkKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxF
eGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6aGFuZGxlV2FzbUNhdGNoKGluc3RydWN0aW9u
LndpZHRoPFdhc21PcGNvZGVUcmFpdHM+KCkpLmNvZGUoKSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4oTExJbnQ6OmhhbmRsZVdhc21DYXRjaEFsbChpbnN0cnVjdGlvbi53aWR0aDxXYXNt
T3Bjb2RlVHJhaXRzPigpKS5jb2RlKCkpOworCisgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxp
emUodW5saW5rZWRIYW5kbGVyLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfQorfQorCiB2b2lk
IExMSW50Q2FsbGVlOjpzZXRFbnRyeXBvaW50KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50
cnlQdHJUYWc+IGVudHJ5cG9pbnQpCiB7CiAgICAgbV9lbnRyeXBvaW50ID0gZW50cnlwb2ludDsK
QEAgLTEwNCw2ICsxMzcsMzYgQEAgc3RkOjp0dXBsZTx2b2lkKiwgdm9pZCo+IExMSW50Q2FsbGVl
OjpyYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbnVsbHB0ciB9OwogfQogCit2
b2lkIE9wdGltaXppbmdKSVRDYWxsZWU6OmxpbmtFeGNlcHRpb25IYW5kbGVycygpCit7CisgICAg
c2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZEV4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsKKyAgICBt
X2V4Y2VwdGlvbkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBt
X2V4Y2VwdGlvbkhhbmRsZXJzW2ldOworICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZv
JiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkRXhjZXB0aW9uSGFuZGxlcnNbaV07CisgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGxvY2F0aW9uID0g
bV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zW2ldOworICAgICAgICBoYW5kbGVyLmluaXRpYWxp
emUodW5saW5rZWRIYW5kbGVyLCBsb2NhdGlvbik7CisgICAgfQorICAgIG1fdW5saW5rZWRFeGNl
cHRpb25IYW5kbGVycy5jbGVhcigpOworICAgIG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucy5j
bGVhcigpOworfQorCitjb25zdCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4mIE9wdGltaXppbmdKSVRD
YWxsZWU6OnN0YWNrbWFwKENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkgY29uc3QKK3sKKyAg
ICBhdXRvIGl0ZXIgPSBtX3N0YWNrbWFwcy5maW5kKGNhbGxTaXRlSW5kZXgpOworICAgIGlmIChp
dGVyID09IG1fc3RhY2ttYXBzLmVuZCgpKSB7CisgICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9z
dGFja21hcHMpIHsKKyAgICAgICAgICAgIGRhdGFMb2cocGFpci5rZXkuYml0cygpLCAiOiAiKTsK
KyAgICAgICAgICAgIGZvciAoYXV0byB2YWx1ZSA6IHBhaXIudmFsdWUpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZyh2YWx1ZSwgIiwgIik7CisgICAgICAgICAgICBkYXRhTG9nTG4oIiIpOworICAg
ICAgICB9CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gbV9zdGFja21hcHMuZW5k
KCkpOworICAgIHJldHVybiBpdGVyLT52YWx1ZTsKK30KKworCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxlZS5oCmluZGV4IDA4MWRiNzZlNDJmOWU0MGU0M2I5MmM5ODJhZmNk
OGNlOTUwYmIxZTEuLjdkNjlkNjI2ZDhjM2YwZDkzN2UxZDBiNTAyNTAzYzk0YjViZjE1NDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKQEAgLTMyLDcgKzMyLDkgQEAK
ICNpbmNsdWRlICJXYXNtQ29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5o
IgogI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIldhc21IYW5k
bGVySW5mby5oIgogI2luY2x1ZGUgIldhc21JbmRleE9yTmFtZS5oIgorI2luY2x1ZGUgIldhc21M
TEludFRpZXJVcENvdW50ZXIuaCIKICNpbmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKICNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIApAQCAtNTksNiArNjEsMTAgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSA9IDA7CiAgICAgdmlydHVhbCBzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4gcmFuZ2UoKSBj
b25zdCA9IDA7CiAKKyAgICBjb25zdCBIYW5kbGVySW5mbyogaGFuZGxlckZvckluZGV4KEluc3Rh
bmNlJiwgdW5zaWduZWQsIGNvbnN0IFRhZyopOworCisgICAgYm9vbCBoYXNFeGNlcHRpb25IYW5k
bGVycygpIGNvbnN0IHsgcmV0dXJuICEhbV9leGNlcHRpb25IYW5kbGVycy5zaXplKCk7IH0KKwog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKICAgICB2aXJ0dWFsIHZvaWQgc2V0T1NSRW50
cnlDYWxsZWUoUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiYmKQogICAgIHsKQEAgLTY4LDYgKzc0
LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKKyAg
ICB2aXJ0dWFsIEZ1bmN0aW9uQ29kZUJsb2NrKiBmdW5jdGlvbkNvZGVCbG9jaygpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKwogcHJvdGVjdGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxlZShX
YXNtOjpDb21waWxhdGlvbk1vZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxlZShXYXNt
OjpDb21waWxhdGlvbk1vZGUsIHNpemVfdCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8
TmFtZVNlY3Rpb24+PiYmKTsKQEAgLTc1LDYgKzgzLDkgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToK
ICAgICBDb21waWxhdGlvbk1vZGUgbV9jb21waWxhdGlvbk1vZGU7CiAgICAgSW5kZXhPck5hbWUg
bV9pbmRleE9yTmFtZTsKKworcHJvdGVjdGVkOgorICAgIFZlY3RvcjxIYW5kbGVySW5mbz4gbV9l
eGNlcHRpb25IYW5kbGVyczsKIH07CiAKIGNsYXNzIEpJVENhbGxlZSA6IHB1YmxpYyBDYWxsZWUg
ewpAQCAtOTksNjQgKzExMCw4NiBAQCBwcml2YXRlOgogICAgIFdhc206OkVudHJ5cG9pbnQgbV9l
bnRyeXBvaW50OwogfTsKIAotI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKLWNsYXNzIE9N
R0NhbGxlZSBmaW5hbCA6IHB1YmxpYyBKSVRDYWxsZWUgeworY2xhc3MgRW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlIGZpbmFsIDogcHVibGljIEpJVENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxPTUdDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6
ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYg
bmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKKyAg
ICBzdGF0aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5
cG9pbnQmJiBlbnRyeXBvaW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
T01HQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKHVubGlua2VkQ2FsbHMpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpKSk7CiAgICAgfQogCiBwcml2
YXRlOgotICAgIE9NR0NhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90
IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFt
ZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKLSAgICAg
ICAgOiBKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBXVEZNb3ZlKGVu
dHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkK
KyAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9p
bnQpCisgICAgICAgIDogSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6RW1iZWRkZXJF
bnRyeXBvaW50TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSkKICAgICB7CiAgICAgfQogfTsKIAot
Y2xhc3MgT01HRm9yT1NSRW50cnlDYWxsZWUgZmluYWwgOiBwdWJsaWMgSklUQ2FsbGVlIHsKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKK2NsYXNzIE9wdGltaXppbmdKSVRDYWxsZWUg
OiBwdWJsaWMgSklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBp
bmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUs
IHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKKyAgICBjb25z
dCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4mIHN0YWNrbWFwKENhbGxTaXRlSW5kZXgpIGNvbnN0Owor
Citwcm90ZWN0ZWQ6CisgICAgT3B0aW1pemluZ0pJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1v
ZGUgbW9kZSwgV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3Rk
OjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hNYXA8Q2FsbFNpdGVJ
bmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2Vk
SGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJl
bDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQor
ICAgICAgICA6IEpJVENhbGxlZShtb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RG
TW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkKKyAgICAgICAgLCBtX3N0YWNrbWFw
cyhXVEZNb3ZlKHN0YWNrbWFwcykpCisgICAgICAgICwgbV91bmxpbmtlZEV4Y2VwdGlvbkhhbmRs
ZXJzKFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpKQorICAgICAgICAsIG1fZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucyhXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50cnlDYWxsZWUoV1RGTW92
ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUsIGxvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtX3VubGlua2VkRXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpID09IG1fZXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9ucy5zaXplKCkpOworICAgICAgICBsaW5rRXhjZXB0aW9uSGFuZGxl
cnMoKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOyB9Ci0gICAgdWludDMy
X3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9sb29wSW5kZXg7IH0KLQogcHJpdmF0ZToK
LSAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwg
c2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+
JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9v
cEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQot
ICAgICAgICA6IEpJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5
TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUo
dW5saW5rZWRDYWxscykpCi0gICAgICAgICwgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCi0gICAgICAgICwgbV9sb29wSW5kZXgobG9vcEluZGV4
KQorICAgIHZvaWQgbGlua0V4Y2VwdGlvbkhhbmRsZXJzKCk7CisKKyAgICBIYXNoTWFwPENhbGxT
aXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4gbV9zdGFja21hcHM7CisgICAgVmVjdG9y
PFVubGlua2VkSGFuZGxlckluZm8+IG1fdW5saW5rZWRFeGNlcHRpb25IYW5kbGVyczsKKyAgICBW
ZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IG1fZXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9uczsKK307CisKK2NsYXNzIE9NR0NhbGxlZSBmaW5hbCA6IHB1Ymxp
YyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE9NR0NhbGxl
ZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0
ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBIYXNoTWFwPENhbGxTaXRl
SW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtl
ZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFi
ZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykK
ICAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0NhbGxlZShXVEZNb3ZlKGVu
dHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwg
V1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShl
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIG1fb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKLSAgICB1aW50MzJfdCBtX2xvb3BJbmRleDsKK3ByaXZh
dGU6CisgICAgT01HQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3Qg
aW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1l
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBIYXNoTWFw
PENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMsIFZlY3Rv
cjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxv
Y2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxv
Y2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9u
TW9kZTo6T01HTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSks
IFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShleGNl
cHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpCisgICAg
eworICAgIH0KIH07Ci0jZW5kaWYKIAotY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlIGZp
bmFsIDogcHVibGljIEpJVENhbGxlZSB7CitjbGFzcyBPTUdGb3JPU1JFbnRyeUNhbGxlZSBmaW5h
bCA6IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRy
eXBvaW50KQorICAgIHN0YXRpYyBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNyZWF0ZShXYXNt
OjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3Qg
TmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxP
U1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYm
IGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXVEZNb3ZlKGVu
dHJ5cG9pbnQpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVudHJ5
Q2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBvc3JFbnRy
eVNjcmF0Y2hCdWZmZXJTaXplLCBsb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdU
Rk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhj
ZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpKTsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBvc3JFbnRy
eVNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplOyB9CisgICAgdWludDMyX3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9sb29w
SW5kZXg7IH0KKwogcHJpdmF0ZToKLSAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoV2FzbTo6
RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCi0gICAgICAgIDogSklUQ2FsbGVlKFdhc206OkNvbXBp
bGF0aW9uTW9kZTo6RW1iZWRkZXJFbnRyeXBvaW50TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSkK
KyAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwg
c2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+
JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9v
cEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBI
YXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMs
IFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8
Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206OkNvbXBp
bGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRl
eCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21h
cHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVy
TG9jYXRpb25zKSkKKyAgICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSkKKyAgICAgICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgpCiAg
ICAgewogICAgIH0KKworICAgIHVuc2lnbmVkIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsK
KyAgICB1aW50MzJfdCBtX2xvb3BJbmRleDsKIH07CiAKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFlf
QjNKSVQpCi1jbGFzcyBCQlFDYWxsZWUgZmluYWwgOiBwdWJsaWMgSklUQ2FsbGVlIHsKK2NsYXNz
IEJCUUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEJCUUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRy
eXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVT
ZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291
bnQsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMpCisgICAg
c3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2lu
dCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlv
bj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50LCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBIYXNoTWFwPENh
bGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMsIFZlY3RvcjxV
bmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0
aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJCUUNhbGxlZShXVEZN
b3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0aWVyVXBDb3Vu
dCksIFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQkJRQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBX
VEZNb3ZlKHRpZXJVcENvdW50KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFj
a21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5k
bGVyTG9jYXRpb25zKSkpOwogICAgIH0KIAogICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JF
bnRyeUNhbGxlZSgpIHsgcmV0dXJuIG1fb3NyRW50cnlDYWxsZWUuZ2V0KCk7IH0KQEAgLTE3Nyw4
ICsyMTAsOCBAQCBwdWJsaWM6CiAgICAgVGllclVwQ291bnQqIHRpZXJVcENvdW50KCkgeyByZXR1
cm4gbV90aWVyVXBDb3VudC5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIEJCUUNhbGxlZShXYXNt
OjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3Qg
TmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJV
cENvdW50PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1
bmxpbmtlZENhbGxzKQotICAgICAgICA6IEpJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6
OkJCUU1vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKHVubGlua2VkQ2FsbHMpKQorICAgIEJCUUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50
cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1l
U2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENv
dW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBIYXNo
TWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMsIFZl
Y3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxl
ckxvY2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0
aW9uTW9kZTo6QkJRTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFt
ZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShl
eGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpCiAg
ICAgICAgICwgbV90aWVyVXBDb3VudChXVEZNb3ZlKHRpZXJVcENvdW50KSkKICAgICB7CiAgICAg
fQpAQCAtMjE4LDE1ICsyNTEsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIExMSW50VGllclVw
Q291bnRlciYgdGllclVwQ291bnRlcigpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT50aWVyVXBDb3Vu
dGVyKCk7IH0KKyAgICBGdW5jdGlvbkNvZGVCbG9jayogZnVuY3Rpb25Db2RlQmxvY2soKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQogI2VuZGlmCiAKIHByaXZhdGU6
Ci0gICAgTExJbnRDYWxsZWUoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBjb2Rl
QmxvY2ssIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNl
Y3Rpb24+PiYmIG5hbWUpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6
TExJbnRNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBtX2NvZGVCbG9jayhX
VEZNb3ZlKGNvZGVCbG9jaykpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2NvZGVC
bG9jayk7Ci0gICAgfQorICAgIExMSW50Q2FsbGVlKHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4sIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFt
ZVNlY3Rpb24+PiYmKTsKKworICAgIHZvaWQgbGlua0V4Y2VwdGlvbkhhbmRsZXJzKCk7CiAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCiAgICAgUmVmUHRyPEpJVENhbGxlZT4gbV9yZXBs
YWNlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
aW5nQ29udmVudGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgKaW5kZXggNmMwMjZlMDhhNDA5ZTk5NWQ0MzE4ZGZiMTgwNDYyNmQwZmFkMTc1
Zi4uN2JmMDAxZWQ5MmVmY2JhZmMwZmJjOGE1MGI0YmY2MjcyNWQyY2NlNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKQEAgLTEy
NSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgcmVzdWx0c0luY2x1ZGVJNjQgPSBm
YWxzZTsKICAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7CiAgICAgICAgIHNpemVf
dCBmcEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAgICBzaXplX3QgYXJnU3RhY2tPZmZzZXQgPSBo
ZWFkZXJTaXplSW5CeXRlczsKKyAgICAgICAgc2l6ZV90IGFyZ1N0YWNrT2Zmc2V0ID0gaGVhZGVy
U2l6ZUluQnl0ZXMgKyBzaXplb2YoUmVnaXN0ZXIpOwogICAgICAgICBpZiAocm9sZSA9PSBDYWxs
Um9sZTo6Q2FsbGVyKQogICAgICAgICAgICAgYXJnU3RhY2tPZmZzZXQgLT0gc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpOwogCkBAIC0xMzYsNyArMTM2LDcgQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgICAgIGdwQXJndW1lbnRDb3VudCA9IDA7CiAgICAgICAgIGZwQXJndW1lbnRDb3VudCA9IDA7
Ci0gICAgICAgIHNpemVfdCByZXN1bHRTdGFja09mZnNldCA9IGhlYWRlclNpemVJbkJ5dGVzOwor
ICAgICAgICBzaXplX3QgcmVzdWx0U3RhY2tPZmZzZXQgPSBoZWFkZXJTaXplSW5CeXRlcyArIHNp
emVvZihSZWdpc3Rlcik7CiAgICAgICAgIGlmIChyb2xlID09IENhbGxSb2xlOjpDYWxsZXIpCiAg
ICAgICAgICAgICByZXN1bHRTdGFja09mZnNldCAtPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCBjMGNiMzFiN2Ni
ZjAwNmFhMDE5MzZjMWY0NDZkNmIxODlmMGRlMTU1Li40OWRmOTUxNTQ3YzA4YTk4MTEwNTA3ZWVl
YzMxMTY4ZWY3YzVhOGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5o
CkBAIC0yOSwxMSArMjksMTMgQEAKIAogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgogI2luY2x1
ZGUgIklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiCiAj
aW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU5hbWUuaCIK
ICNpbmNsdWRlICJXYXNtTmFtZVNlY3Rpb24uaCIKKyNpbmNsdWRlICJXYXNtT1NSRW50cnlEYXRh
LmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKICNp
bmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCkBAIC01MCw2ICs1Miw3IEBAIG5hbWVzcGFjZSBXYXNt
IHsKIAogc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dDsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlv
bjsKK3N0cnVjdCBVbmxpbmtlZEhhbmRsZXJJbmZvOwogCiB1c2luZyBCbG9ja1NpZ25hdHVyZSA9
IGNvbnN0IFNpZ25hdHVyZSo7CiAKQEAgLTc2LDYgKzc5LDE5IEBAIGlubGluZSBib29sIGlzVmFs
dWVUeXBlKFR5cGUgdHlwZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2lubGluZSBKU1N0cmlu
ZyogdHlwZVRvU3RyaW5nKFZNJiB2bSwgVHlwZUtpbmQgdHlwZSkKK3sKKyNkZWZpbmUgVFlQRV9D
QVNFKG1hY3JvTmFtZSwgdmFsdWUsIGIzLCBpbmMsIHdhc21OYW1lKSBcCisgICAgY2FzZSBUeXBl
S2luZDo6bWFjcm9OYW1lOiBcCisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0s
ICN3YXNtTmFtZSk7IFwKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBGT1JfRUFDSF9X
QVNNX1RZUEUoVFlQRV9DQVNFKQorICAgIH0KKworI3VuZGVmIFRZUEVfQ0FTRQorfQorCiBpbmxp
bmUgYm9vbCBpc1N1YnR5cGUoVHlwZSBzdWIsIFR5cGUgcGFyZW50KQogewogICAgIGlmIChzdWIu
aXNOdWxsYWJsZSgpICYmICFwYXJlbnQuaXNOdWxsYWJsZSgpKQpAQCAtMTE1LDYgKzEzMSw3IEBA
IGVudW0gY2xhc3MgRXh0ZXJuYWxLaW5kIDogdWludDhfdCB7CiAgICAgVGFibGUgPSAxLAogICAg
IE1lbW9yeSA9IDIsCiAgICAgR2xvYmFsID0gMywKKyAgICBFeGNlcHRpb24gPSA0LAogfTsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgSW50PgpAQCAtMTI1LDYgKzE0Miw3IEBAIGlubGluZSBib29sIGlz
VmFsaWRFeHRlcm5hbEtpbmQoSW50IHZhbCkKICAgICBjYXNlIHN0YXRpY19jYXN0PEludD4oRXh0
ZXJuYWxLaW5kOjpUYWJsZSk6CiAgICAgY2FzZSBzdGF0aWNfY2FzdDxJbnQ+KEV4dGVybmFsS2lu
ZDo6TWVtb3J5KToKICAgICBjYXNlIHN0YXRpY19jYXN0PEludD4oRXh0ZXJuYWxLaW5kOjpHbG9i
YWwpOgorICAgIGNhc2Ugc3RhdGljX2Nhc3Q8SW50PihFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbik6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzQs
NiArMTUyLDcgQEAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6
RnVuY3Rpb24pID09IDAsICJXYXNtIG5lZWRzIEZ1bmN0aW8KIHN0YXRpY19hc3NlcnQoc3RhdGlj
X2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6OlRhYmxlKSAgICA9PSAxLCAiV2FzbSBuZWVkcyBUYWJs
ZSB0byBoYXZlIHRoZSB2YWx1ZSAxIik7CiBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGludD4o
RXh0ZXJuYWxLaW5kOjpNZW1vcnkpICAgPT0gMiwgIldhc20gbmVlZHMgTWVtb3J5IHRvIGhhdmUg
dGhlIHZhbHVlIDIiKTsKIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRlcm5hbEtp
bmQ6Okdsb2JhbCkgICA9PSAzLCAiV2FzbSBuZWVkcyBHbG9iYWwgdG8gaGF2ZSB0aGUgdmFsdWUg
MyIpOworc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6RXhjZXB0
aW9uKSAgID09IDQsICJXYXNtIG5lZWRzIEV4Y2VwdGlvbiB0byBoYXZlIHRoZSB2YWx1ZSA0Iik7
CiAKIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKEV4dGVybmFsS2luZCBraW5kKQogewpA
QCAtMTQyLDYgKzE2MSw3IEBAIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKEV4dGVybmFs
S2luZCBraW5kKQogICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTogcmV0dXJuICJ0YWJsZSI7
CiAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogcmV0dXJuICJtZW1vcnkiOwogICAgIGNh
c2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHJldHVybiAiZ2xvYmFsIjsKKyAgICBjYXNlIEV4dGVy
bmFsS2luZDo6RXhjZXB0aW9uOiByZXR1cm4gInRhZyI7CiAgICAgfQogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuICI/IjsKQEAgLTM3Miw2ICszOTIsOCBAQCBz
dHJ1Y3QgRW50cnlwb2ludCB7CiBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbiB7CiAgICAgV1RGX01B
S0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxX
YXNtRW50cnlQdHJUYWc+IGNhbGxlZU1vdmVMb2NhdGlvbjsKKyAgICBTdGFja01hcHMgc3RhY2tt
YXBzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBleGNlcHRpb25IYW5kbGVyczsK
ICAgICBFbnRyeXBvaW50IGVudHJ5cG9pbnQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCmluZGV4IGVhNzVmZTJmNmIwZjlh
M2YxNGU3OTNlZDExMjc4ZWZkMGUwOWFjNzEuLjcyZjNlNjQxMzJjMTdiOTUxMWEzZWJlYTZjNjBk
MDAyNGIzMjdiNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvbkNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvbkNvZGVCbG9jay5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDggKzI4LDEwIEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkhhbmRsZXJJ
bmZvLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKICNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtSGFuZGxlckluZm8uaCIKICNpbmNsdWRl
ICJXYXNtTExJbnRUaWVyVXBDb3VudGVyLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0xMjAsNiArMTIyLDEwIEBAIHB1YmxpYzoKICAgICBjb25z
dCBKdW1wVGFibGUmIGp1bXBUYWJsZSh1bnNpZ25lZCB0YWJsZUluZGV4KSBjb25zdDsKICAgICB1
bnNpZ25lZCBudW1iZXJPZkp1bXBUYWJsZXMoKSBjb25zdDsKIAorICAgIHNpemVfdCBudW1iZXJP
ZkV4Y2VwdGlvbkhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV9leGNlcHRpb25IYW5kbGVycy5z
aXplKCk7IH0KKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5kbGVyKGludCBp
bmRleCkgeyByZXR1cm4gbV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07IH0KKyAgICB2b2lkIGFk
ZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlcikgeyBt
X2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZChoYW5kbGVyKTsgfQorCiBwcml2YXRlOgogICAgIHVz
aW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zm
c2V0LCBpbnQ+OwogCkBAIC0xMzksNiArMTQ1LDcgQEAgcHJpdmF0ZToKICAgICBPdXRPZkxpbmVK
dW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIExMSW50VGllclVwQ291bnRl
ciBtX3RpZXJVcENvdW50ZXI7CiAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qdW1wVGFibGVzOwor
ICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggNGU2YjgzMjIwNDA3NzZhMjUxNzIyZWVh
MjE4ZjQ2YzJjMzk5MTMxMC4uZmFkN2Q3NjhlYjEwZjZiNTQ5YzdjODkxOGMxNzZkZTVmMTJmZDY2
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFy
c2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2Vy
LmgKQEAgLTM3LDcgKzM3LDE0IEBAIGVudW0gY2xhc3MgQmxvY2tUeXBlIHsKICAgICBJZiwKICAg
ICBCbG9jaywKICAgICBMb29wLAotICAgIFRvcExldmVsCisgICAgVG9wTGV2ZWwsCisgICAgVHJ5
LAorICAgIENhdGNoLAorfTsKKworZW51bSBjbGFzcyBDYXRjaEtpbmQgeworICAgIENhdGNoLAor
ICAgIENhdGNoQWxsLAogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRW5jbG9zaW5nU3RhY2ssIHR5
cGVuYW1lIE5ld1N0YWNrPgpAQCAtMTQ3LDYgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbmRleEZvckxvY2FsKHVpbnQzMl90Jik7
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbmRleEZvckdsb2Jh
bCh1aW50MzJfdCYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNl
RnVuY3Rpb25JbmRleCh1aW50MzJfdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlRXhjZXB0aW9uSW5kZXgodWludDMyX3QmKTsKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJyYW5jaFRhcmdldCh1aW50MzJfdCYpOwogCiAgICAg
c3RydWN0IFRhYmxlSW5pdEltbWVkaWF0ZXMgewpAQCAtMjExLDYgKzIxOSwxMiBAQCBwcml2YXRl
OgogICAgIHVuc2lnbmVkIG1fbG9vcEluZGV4IHsgMCB9OwogfTsKIAordGVtcGxhdGU8dHlwZW5h
bWUgQ29udHJvbFR5cGU+CitzdGF0aWMgYm9vbCBpc1RyeU9yQ2F0Y2goQ29udHJvbFR5cGUmIGRh
dGEpCit7CisgICAgcmV0dXJuIENvbnRyb2xUeXBlOjppc1RyeShkYXRhKSB8fCBDb250cm9sVHlw
ZTo6aXNDYXRjaChkYXRhKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihDb250ZXh0JiBjb250ZXh0LCBjb25z
dCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykKICAgICA6
IFBhcnNlcihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCkKQEAgLTU3NSw2ICs1ODksMTYg
QEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VGdW5jdGlvbkluZGV4KHVpbnQz
Ml90JiByZXN1bHRJbmRleCkgLT4gUGFydGkKICAgICByZXR1cm4geyB9OwogfQogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb250ZXh0PgorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eGNlcHRpb25JbmRleCh1aW50MzJfdCYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
dWludDMyX3QgZXhjZXB0aW9uSW5kZXg7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIoZXhjZXB0aW9uSW5kZXgpLCAiY2FuJ3QgcGFyc2UgZXhjZXB0aW9uIGluZGV4Iik7
CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihleGNlcHRpb25JbmRleCA+PSBtX2luZm8uZXhj
ZXB0aW9uSW5kZXhTcGFjZVNpemUoKSwgImV4Y2VwdGlvbiBpbmRleCAiLCBleGNlcHRpb25JbmRl
eCwgIiBpcyBpbnZhbGlkLCBsaW1pdCBpcyAiLCBtX2luZm8uZXhjZXB0aW9uSW5kZXhTcGFjZVNp
emUoKSk7CisgICAgcmVzdWx0ID0gZXhjZXB0aW9uSW5kZXg7CisgICAgcmV0dXJuIHsgfTsKK30K
KwogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlQnJhbmNoVGFyZ2V0KHVpbnQzMl90JiByZXN1bHRUYXJnZXQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKQEAgLTEzMzMsNiArMTM1NywxMzEgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RP
UkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgY2Fz
ZSBUcnk6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNz
ZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisK
KyAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlOworICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJl
KSwgImNhbid0IGdldCB0cnkncyBzaWduYXR1cmUiKTsKKworICAgICAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGlubGluZVNpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpLCAiVG9vIGZldyBhcmd1bWVudHMgb24gc3RhY2sgZm9yIHRyeSBibG9jay4g
VHJ5ZSBleHBlY3RzICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiLCBidXQg
b25seSAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBUcnkgYmxv
Y2sgaGFzIHNpZ25hdHVyZTogIiwgaW5saW5lU2lnbmF0dXJlLT50b1N0cmluZygpKTsKKyAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gaW5saW5lU2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICAgICAgV0FT
TV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFja1tvZmZzZXQgKyBpXS50eXBlKCkg
IT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKSwgIlRyeSBleHBlY3RzIHRoZSBhcmd1bWVu
dCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKS5r
aW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBtX2V4cHJlc3Npb25TdGFja1tpXS50eXBl
KCkua2luZCk7CisKKyAgICAgICAgaW50NjRfdCBvbGRTaXplID0gbV9leHByZXNzaW9uU3RhY2su
c2l6ZSgpOworICAgICAgICBTdGFjayBuZXdTdGFjazsKKyAgICAgICAgQ29udHJvbFR5cGUgY29u
dHJvbDsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkVHJ5KGlubGluZVNpZ25h
dHVyZSwgbV9leHByZXNzaW9uU3RhY2ssIGNvbnRyb2wsIG5ld1N0YWNrKSk7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQob2xkU2l6ZSwgb2xkU2l6ZSAtIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA9
PSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgICAgIEFTU0VSVChuZXdT
dGFjay5zaXplKCkgPT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOworCisgICAg
ICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZCh7IFdURk1vdmUobV9leHByZXNzaW9uU3RhY2spLCB7
IH0sIFdURk1vdmUoY29udHJvbCkgfSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gV1RG
TW92ZShuZXdTdGFjayk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgY2FzZSBD
YXRjaDogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3Nl
bWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fY29udHJvbFN0YWNrLnNpemUoKSA9PSAxLCAi
Y2FuJ3QgdXNlIGNhdGNoIGJsb2NrIGF0IHRoZSB0b3AtbGV2ZWwgb2YgYSBmdW5jdGlvbiIpOwor
CisgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4OworICAgICAgICBXQVNNX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhjZXB0aW9uSW5kZXgpKTsKKyAgICAg
ICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8uc2lnbmF0dXJlSW5kZXhG
cm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRleCk7CisgICAgICAgIGNvbnN0IFNp
Z25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChz
aWduYXR1cmVJbmRleCk7CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBjb250cm9sRW50cnkgPSBt
X2NvbnRyb2xTdGFjay5sYXN0KCk7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlz
VHJ5T3JDYXRjaChjb250cm9sRW50cnkuY29udHJvbERhdGEpLCAiY2F0Y2ggYmxvY2sgaXNuJ3Qg
YXNzb2NpYXRlZCB0byBhIHRyeSIpOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHVuaWZ5KGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworCisgICAgICAgIFJlc3VsdExpc3Qg
cmVzdWx0czsKKyAgICAgICAgU3RhY2sgcHJlQ2F0Y2hTdGFjazsKKyAgICAgICAgbV9leHByZXNz
aW9uU3RhY2suc3dhcChwcmVDYXRjaFN0YWNrKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoYWRkQ2F0Y2goZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvblNpZ25hdHVyZSwgcHJlQ2F0
Y2hTdGFjaywgY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhLCByZXN1bHRzKSk7CisKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSByZXN1
bHRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25T
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25T
dGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkpLCBy
ZXN1bHRzW2ldKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIENhdGNo
QWxsOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2Vt
Ymx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09IDEsICJj
YW4ndCB1c2UgY2F0Y2ggYmxvY2sgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisK
KyAgICAgICAgQ29udHJvbEVudHJ5JiBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay5sYXN0
KCk7CisKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNUcnlPckNhdGNoKGNvbnRy
b2xFbnRyeS5jb250cm9sRGF0YSksICJjYXRjaCBibG9jayBpc24ndCBhc3NvY2lhdGVkIHRvIGEg
dHJ5Iik7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFModW5pZnkoY29udHJvbEVu
dHJ5LmNvbnRyb2xEYXRhKSk7CisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRzOworICAgICAg
ICBTdGFjayBwcmVDYXRjaFN0YWNrOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKHBy
ZUNhdGNoU3RhY2spOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYXRjaEFs
bChwcmVDYXRjaFN0YWNrLCBjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIERlbGVnYXRlOiB7CisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBl
eGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09IDEsICJjYW4ndCB1c2UgZGVsZWdhdGUgYXQgdGhl
IHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0Owor
ICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdl
dCkpOworCisgICAgICAgIENvbnRyb2xFbnRyeSBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFj
ay50YWtlTGFzdCgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlw
ZTo6aXNUcnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSwgImRlbGVnYXRlIGlzbid0IGFzc29j
aWF0ZWQgdG8gYSB0cnkiKTsKKworICAgICAgICBDb250cm9sVHlwZSYgdGFyZ2V0RGF0YSA9IG1f
Y29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdLmNvbnRyb2xE
YXRhOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnko
dGFyZ2V0RGF0YSkgJiYgIUNvbnRyb2xUeXBlOjppc1RvcExldmVsKHRhcmdldERhdGEpLCAiZGVs
ZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5IG9yIHRoZSB0b3AgbGV2ZWwgYmxvY2siKTsKKworICAg
ICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGREZWxlZ2F0ZSh0YXJnZXREYXRhLCBjb250
cm9sRW50cnkuY29udHJvbERhdGEpKTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
Uyh1bmlmeShjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKyAgICAgICAgV0FTTV9UUllfQURE
X1RPX0NPTlRFWFQoZW5kQmxvY2soY29udHJvbEVudHJ5LCBtX2V4cHJlc3Npb25TdGFjaykpOwor
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKGNvbnRyb2xFbnRyeS5lbmNsb3NlZEV4cHJl
c3Npb25TdGFjayk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgY2FzZSBUaHJv
dzogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJs
eUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAg
ICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisgICAgICAgIFNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUV4
Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOworICAgICAgICBjb25zdCBTaWduYXR1
cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0
dXJlSW5kZXgpOworCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9u
U3RhY2suc2l6ZSgpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIlRvbyBm
ZXcgYXJndW1lbnRzIG9uIHN0YWNrIGZvciB0aGUgZXhjZXB0aW9uIGJlaW5nIHRocm93bi4gVGhl
IGV4Y2VwdGlvbiBleHBlY3RzICIsIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCks
ICIsIGJ1dCBvbmx5ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB3ZXJlIHByZXNlbnQu
IEV4Y2VwdGlvbiBoYXMgc2lnbmF0dXJlOiAiLCBleGNlcHRpb25TaWduYXR1cmUudG9TdHJpbmco
KSk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAt
IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CisgICAgICAgIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4gYXJnczsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJncy50cnlS
ZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSksICJjYW4n
dCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciB0aHJvdydzICIsIGV4Y2VwdGlvblNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIik7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAg
ICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBhcmcgPSBtX2V4cHJlc3Npb25TdGFjay5hdChvZmZz
ZXQgKyBpKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoYXJnLnR5cGUoKSAh
PSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSksICJUaGUgZXhjZXB0aW9uIGJlaW5nIHRo
cm93biBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCAiLCBpLCAiIHRvIGJlICIsIGV4Y2Vw
dGlvblNpZ25hdHVyZS5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAi
LCBhcmcudHlwZSgpLmtpbmQpOworICAgICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQoYXJn
KTsKKyAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1ZUZyb21TdGFjaygpOworICAgICAg
ICB9CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhvZmZzZXQpOworCisgICAgICAg
IFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFRocm93KGV4Y2VwdGlvbkluZGV4LCBhcmdzLCBt
X2V4cHJlc3Npb25TdGFjaykpOworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIFJldGhyb3c6IHsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCks
ICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAgdWludDMyX3Qg
dGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFy
Z2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250cm9sU3Rh
Y2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7CisgICAg
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEp
LCAicmV0aHJvdyBkb2Vzbid0IHJlZmVyIHRvIGEgY2F0Y2ggYmxvY2siKTsKKworICAgICAgICBX
QVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRSZXRocm93KHRhcmdldCwgZGF0YSkpOworICAgICAg
ICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
ICAgICBjYXNlIEJyOgogICAgIGNhc2UgQnJJZjogewogICAgICAgICB1aW50MzJfdCB0YXJnZXQ7
CkBAIC0xNDg3LDYgKzE2MzYsNjYgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCisgICAgY2FzZSBDYXRjaDogeworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0
aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRl
eDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4
KGV4Y2VwdGlvbkluZGV4KSk7CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9u
SW5kZXgpOworICAgICAgICBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworCisgICAgICAgIGlmICht
X3VucmVhY2hhYmxlQmxvY2tzID4gMSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAg
ICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9jb250cm9sU3RhY2subGFzdCgpOworICAgICAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1RyeU9yQ2F0Y2goZGF0YS5jb250cm9sRGF0YSksICJj
YXRjaCBibG9jayBpc24ndCBhc3NvY2lhdGVkIHRvIGEgdHJ5Iik7CisKKyAgICAgICAgbV91bnJl
YWNoYWJsZUJsb2NrcyA9IDA7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0geyB9OworICAg
ICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhU
KGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRleCwgZXhjZXB0aW9uU2lnbmF0dXJl
LCBkYXRhLmNvbnRyb2xEYXRhLCByZXN1bHRzKSk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSByZXN1bHRzLnNpemUoKSk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RB
bmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkpLCByZXN1bHRzW2ldKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIENhdGNoQWxsOiB7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygp
LCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIGlmIChtX3Vu
cmVhY2hhYmxlQmxvY2tzID4gMSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAg
Q29udHJvbEVudHJ5JiBkYXRhID0gbV9jb250cm9sU3RhY2subGFzdCgpOworICAgICAgICBtX3Vu
cmVhY2hhYmxlQmxvY2tzID0gMDsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSB7IH07Cisg
ICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzVHJ5T3JDYXRjaChkYXRhLmNvbnRyb2xE
YXRhKSwgImNhdGNoIGJsb2NrIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKyAgICAgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKGRhdGEuY29u
dHJvbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIERlbGVn
YXRlOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2Vt
Ymx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09IDEsICJj
YW4ndCB1c2UgZGVsZWdhdGUgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisKKyAg
ICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xFbnRyeSBjb250
cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOworICAgICAgICBXQVNNX1ZBTElE
QVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRh
KSwgImRlbGVnYXRlIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKworICAgICAgICBDb250
cm9sVHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEg
LSB0YXJnZXRdLmNvbnRyb2xEYXRhOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFD
b250cm9sVHlwZTo6aXNUcnkoZGF0YSkgJiYgIUNvbnRyb2xUeXBlOjppc1RvcExldmVsKGRhdGEp
LCAiZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5IGJsb2NrIik7CisKKyAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQoYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKGRhdGEsIGNvbnRyb2xF
bnRyeS5jb250cm9sRGF0YSkpOworICAgICAgICBTdGFjayBlbXB0eVN0YWNrOworICAgICAgICBX
QVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbmRUb1VucmVhY2hhYmxlKGNvbnRyb2xFbnRyeSwg
ZW1wdHlTdGFjaykpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKGNvbnRyb2xFbnRy
eS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CiAgICAgY2FzZSBFbmQ6IHsKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MgPT0gMSkg
ewogICAgICAgICAgICAgQ29udHJvbEVudHJ5IGRhdGEgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFz
dCgpOwpAQCAtMTQ5NSw4ICsxNzA0LDEwIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICAg
ICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gV1RGTW92ZShkYXRhLmVsc2VCbG9ja1N0YWNrKTsK
ICAgICAgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KGRhdGEuY29u
dHJvbERhdGEpKTsKICAgICAgICAgICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChlbmRC
bG9jayhkYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRW5kVG9VbnJlYWNoYWJsZShk
YXRhKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFN0YWNrIGVtcHR5
U3RhY2s7CisgICAgICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRW5kVG9V
bnJlYWNoYWJsZShkYXRhLCBlbXB0eVN0YWNrKSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoZGF0YS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7
CiAgICAgICAgIH0KQEAgLTE1MDQsNiArMTcxNSwxMCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKKyAgICBjYXNlIFRyeToKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNt
IGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisgICAgICAgIEZBTExUSFJPVUdIOworCiAg
ICAgY2FzZSBMb29wOgogICAgIGNhc2UgSWY6CiAgICAgY2FzZSBCbG9jazogewpAQCAtMTU3Niw2
ICsxNzkxLDE2IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFi
bGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIAorICAgIGNhc2UgUmV0aHJvdzogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFP
cHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUg
bm90IGVuYWJsZWQiKTsKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZB
SUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAg
IENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgp
IC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYoIUNvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpLCAicmV0aHJvdyBkb2Vzbid0IHJlZmVy
IHRvIGEgY2F0Y2ggYmxvY2siKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBj
YXNlIEJyOgogICAgIGNhc2UgQnJJZjogewogICAgICAgICB1aW50MzJfdCB0YXJnZXQ7CkBAIC0x
NTgzLDYgKzE4MDgsMTUgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJl
YWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCisgICAgY2FzZSBUaHJvdzogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBh
cmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRleDsKKyAg
ICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4KGV4Y2Vw
dGlvbkluZGV4KSk7CisKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjYXNlIEkz
MkNvbnN0OiB7CiAgICAgICAgIGludDMyX3QgdW51c2VkOwogICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhckludDMyKHVudXNlZCksICJjYW4ndCBnZXQgaW1tZWRpYXRlIGZvciAi
LCBtX2N1cnJlbnRPcGNvZGUsICIgaW4gdW5yZWFjaGFibGUgY29udGV4dCIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5mby5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU3
YmNmNDliYjJjZWExNzUwZmZiNmJmMWU1NWE3ODIzZGYxMzYyMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5mby5jcHAKQEAgLTAsMCAr
MSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21IYW5kbGVySW5mby5oIgorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCisjaW5jbHVk
ZSAiV2FzbVRhZy5oIgorCituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBXYXNtIHsKKwordm9p
ZCBIYW5kbGVySW5mbzo6aW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxp
bmtlZEluZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBs
YWJlbCkKK3sKKyAgICBtX3R5cGUgPSB1bmxpbmtlZEluZm8ubV90eXBlOworICAgIG1fc3RhcnQg
PSB1bmxpbmtlZEluZm8ubV9zdGFydDsKKyAgICBtX2VuZCA9IHVubGlua2VkSW5mby5tX2VuZDsK
KyAgICBtX3RhcmdldCA9IHVubGlua2VkSW5mby5tX3RhcmdldDsKKyAgICBtX3RyeURlcHRoID0g
dW5saW5rZWRJbmZvLm1fdHJ5RGVwdGg7CisgICAgbV9uYXRpdmVDb2RlID0gbGFiZWw7CisKKyAg
ICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSGFuZGxlclR5cGU6OkNhdGNoOgorICAgICAg
ICBtX3RhZyA9IHVubGlua2VkSW5mby5tX2V4Y2VwdGlvbkluZGV4T3JEZWxlZ2F0ZVRhcmdldDsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhhbmRsZXJUeXBlOjpDYXRjaEFsbDoKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZToKKyAgICAgICAgbV9k
ZWxlZ2F0ZVRhcmdldCA9IHVubGlua2VkSW5mby5tX2V4Y2VwdGlvbkluZGV4T3JEZWxlZ2F0ZVRh
cmdldDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitjb25zdCBIYW5kbGVySW5mbyogSGFu
ZGxlckluZm86OmhhbmRsZXJGb3JJbmRleChJbnN0YW5jZSYgaW5zdGFuY2UsIGNvbnN0IFZlY3Rv
cjxIYW5kbGVySW5mbz4mIGV4ZXB0aW9uSGFuZGxlcnMsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBX
YXNtOjpUYWcqIGV4Y2VwdGlvblRhZykKK3sKKyAgICBib29sIGRlbGVnYXRpbmcgPSBmYWxzZTsK
KyAgICB1bnNpZ25lZCBkZWxlZ2F0ZVRhcmdldCA9IDA7CisgICAgZm9yIChhdXRvJiBoYW5kbGVy
IDogZXhlcHRpb25IYW5kbGVycykgeworICAgICAgICAvLyBIYW5kbGVycyBhcmUgb3JkZXJlZCBp
bm5lcm1vc3QgZmlyc3QsIHNvIHRoZSBmaXJzdCBoYW5kbGVyIHdlIGVuY291bnRlcgorICAgICAg
ICAvLyB0aGF0IGNvbnRhaW5zIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyB0aGUgY29ycmVjdCBoYW5k
bGVyIHRvIHVzZS4KKyAgICAgICAgLy8gVGhpcyBpbmRleCB1c2VkIGlzIGVpdGhlciB0aGUgQnl0
ZWNvZGVPZmZzZXQgb3IgYSBDYWxsU2l0ZUluZGV4LgorICAgICAgICBpZiAoaGFuZGxlci5tX3N0
YXJ0IDw9IGluZGV4ICYmIGhhbmRsZXIubV9lbmQgPiBpbmRleCkgeworICAgICAgICAgICAgaWYg
KGRlbGVnYXRpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5tX3RyeURlcHRoICE9
IGRlbGVnYXRlVGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICBkZWxlZ2F0aW5nID0gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGJvb2wgbWF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgIHN3aXRjaCAoaGFuZGxlci5tX3R5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgSGFuZGxlclR5cGU6OkNhdGNoOgorICAgICAgICAgICAgICAg
IG1hdGNoID0gZXhjZXB0aW9uVGFnICYmIGluc3RhbmNlLnRhZyhoYW5kbGVyLm1fdGFnKSA9PSAq
ZXhjZXB0aW9uVGFnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBI
YW5kbGVyVHlwZTo6Q2F0Y2hBbGw6CisgICAgICAgICAgICAgICAgbWF0Y2ggPSB0cnVlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBIYW5kbGVyVHlwZTo6RGVsZWdh
dGU6CisgICAgICAgICAgICAgICAgZGVsZWdhdGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAg
ZGVsZWdhdGVUYXJnZXQgPSBoYW5kbGVyLm1fZGVsZWdhdGVUYXJnZXQ7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbWF0Y2gpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHJldHVybiAmaGFuZGxlcjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMjUxMTkz
ZDIxMzE3OWViZGU5OTU0NGMyNTNlZDQ5ODlkMmY2NDNlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmgKQEAgLTAsMCArMSw5OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkNvZGVMb2NhdGlv
bi5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBKU0MgeworbmFtZXNw
YWNlIFdhc20geworCitjbGFzcyBJbnN0YW5jZTsKK2NsYXNzIFRhZzsKKworZW51bSBjbGFzcyBI
YW5kbGVyVHlwZSB7CisgICAgQ2F0Y2ggPSAwLAorICAgIENhdGNoQWxsID0gMSwKKyAgICBEZWxl
Z2F0ZSA9IDIsCit9OworCitzdHJ1Y3QgSGFuZGxlckluZm9CYXNlIHsKKyAgICBIYW5kbGVyVHlw
ZSBtX3R5cGU7CisgICAgdWludDMyX3QgbV9zdGFydDsKKyAgICB1aW50MzJfdCBtX2VuZDsKKyAg
ICB1aW50MzJfdCBtX3RhcmdldDsKKyAgICB1aW50MzJfdCBtX3RyeURlcHRoOworICAgIHVpbnQz
Ml90IG1fZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0OworfTsKKworc3RydWN0IFVubGlu
a2VkSGFuZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9CYXNlIHsKKyAgICBVbmxpbmtlZEhh
bmRsZXJJbmZvKCkKKyAgICB7CisgICAgfQorCisgICAgVW5saW5rZWRIYW5kbGVySW5mbyhIYW5k
bGVyVHlwZSBoYW5kbGVyVHlwZSwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCwgdWludDMy
X3QgdGFyZ2V0LCB1aW50MzJfdCB0cnlEZXB0aCwgdWludDMyX3QgZXhjZXB0aW9uSW5kZXhPckRl
bGVnYXRlVGFyZ2V0KQorICAgIHsKKyAgICAgICAgbV90eXBlID0gaGFuZGxlclR5cGU7CisgICAg
ICAgIG1fc3RhcnQgPSBzdGFydDsKKyAgICAgICAgbV9lbmQgPSBlbmQ7CisgICAgICAgIG1fdGFy
Z2V0ID0gdGFyZ2V0OworICAgICAgICBtX3RyeURlcHRoID0gdHJ5RGVwdGg7CisgICAgICAgIG1f
ZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0ID0gZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRl
VGFyZ2V0OworICAgIH0KK307CisKK3N0cnVjdCBIYW5kbGVySW5mbyA6IHB1YmxpYyBIYW5kbGVy
SW5mb0Jhc2UgeworICAgIHN0YXRpYyBjb25zdCBIYW5kbGVySW5mbyogaGFuZGxlckZvckluZGV4
KEluc3RhbmNlJiwgY29uc3QgVmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhlcHRpb25IYW5kbGVycywg
dW5zaWduZWQgaW5kZXgsIGNvbnN0IFdhc206OlRhZyogZXhjZXB0aW9uVGFnKTsKKworICAgIHZv
aWQgaW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KTsKKworICAgIHVuc2lnbmVkIHRhZygpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IEhhbmRsZXJUeXBlOjpDYXRjaCk7
CisgICAgICAgIHJldHVybiBtX3RhZzsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBkZWxlZ2F0ZVRh
cmdldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IEhhbmRsZXJUeXBl
OjpEZWxlZ2F0ZSk7CisgICAgICAgIHJldHVybiBtX2RlbGVnYXRlVGFyZ2V0OworICAgIH0KKwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBtX25hdGl2
ZUNvZGU7CisKK3ByaXZhdGU6CisgICAgdW5pb24geworICAgICAgICB1bnNpZ25lZCBtX3RhZzsK
KyAgICAgICAgdW5zaWduZWQgbV9kZWxlZ2F0ZVRhcmdldDsKKyAgICB9OworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCmluZGV4IGZmZDc1Yzhk
MGM4ZjlhYjczMWY3Y2I0OWE4NDJkOTA2NWI4MjgzYjYuLjAyNTRhMGMxMDI5N2FiOGRlMTg1NGVh
ODBjOWRhYWU0YzFlYTQ4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21JbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUlu
c3RhbmNlLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCiAjaW5j
bHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlu
bGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVGFnLmgiCiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0
aG1ldGljLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CkBAIC05MCw3ICs5
MSw5IEBAIFJlZjxJbnN0YW5jZT4gSW5zdGFuY2U6OmNyZWF0ZShDb250ZXh0KiBjb250ZXh0LCBS
ZWY8TW9kdWxlPiYmIG1vZHVsZSwgRW50cnlGcmFtCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
KE5vdE51bGwsIGZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemUobW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSwgbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigp
LnRhYmxlQ291bnQoKSkpKSBJbnN0YW5jZShjb250ZXh0LCBXVEZNb3ZlKG1vZHVsZSksIHBvaW50
ZXJUb1RvcEVudHJ5RnJhbWUsIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQsIFdURk1vdmUoc3Rv
cmVUb3BDYWxsRnJhbWUpKSk7CiB9CiAKLUluc3RhbmNlOjp+SW5zdGFuY2UoKSB7IH0KK0luc3Rh
bmNlOjp+SW5zdGFuY2UoKQoreworfQogCiBzaXplX3QgSW5zdGFuY2U6OmV4dHJhTWVtb3J5QWxs
b2NhdGVkKCkgY29uc3QKIHsKQEAgLTI5Nyw2ICszMDAsMTYgQEAgdm9pZCBJbnN0YW5jZTo6bGlu
a0dsb2JhbCh1bnNpZ25lZCBpLCBSZWY8R2xvYmFsPiYmIGdsb2JhbCkKICAgICBtX2xpbmtlZEds
b2JhbHMuc2V0KGksIFdURk1vdmUoZ2xvYmFsKSk7CiB9CiAKK3ZvaWQgSW5zdGFuY2U6OmFkZFRh
Zyhjb25zdCBUYWcmIHRhZykKK3sKKyAgICBtX3RhZ3MuYXBwZW5kKFJlZiB7IHRhZyB9KTsKK30K
Kwordm9pZCBJbnN0YW5jZTo6YWRkVGFnKFRhZyYmIHRhZykKK3sKKyAgICBtX3RhZ3MuYXBwZW5k
KGFkb3B0UmVmKHRhZykpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuaAppbmRleCA2MGUxNGNiNWFjMDY1ODI0NDM0Mzc4MDlkNTQ2MzNlZGY3MWNjOGI5
Li5kYjk3NGQxMzBkMjcyODU3YWNjMzRkZGU1OGRlMTRmNDM1MjE0NGE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApAQCAtMjEwLDYgKzIxMCwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIG1fc3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKICAgICB9CiAKKyAg
ICB2b2lkIGFkZFRhZyhjb25zdCBUYWcmKTsKKyAgICB2b2lkIGFkZFRhZyhUYWcmJik7CisgICAg
Y29uc3QgVGFnJiB0YWcodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fdGFnc1tpXTsgfQor
CiBwcml2YXRlOgogICAgIEluc3RhbmNlKENvbnRleHQqLCBSZWY8TW9kdWxlPiYmLCBFbnRyeUZy
YW1lKiosIHZvaWQqKiwgU3RvcmVUb3BDYWxsRnJhbWVDYWxsYmFjayYmKTsKICAgICAKQEAgLTIz
Nyw2ICsyNDEsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDMyX3QsIFJlZjxHbG9iYWw+
LCBJbnRIYXNoPHVpbnQzMl90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1
aW50MzJfdD4+IG1fbGlua2VkR2xvYmFsczsKICAgICBCaXRWZWN0b3IgbV9wYXNzaXZlRWxlbWVu
dHM7CiAgICAgQml0VmVjdG9yIG1fcGFzc2l2ZURhdGFTZWdtZW50czsKKyAgICBWZWN0b3I8UmVm
UHRyPGNvbnN0IFRhZz4+IG1fdGFnczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNw
cAppbmRleCA4MWE1Y2RiY2FlMzI4NmJlMzJjYTQ5MGRlNDVlZTNhZmY3ODE5ODU2Li4zNTc2NjZi
ZGMzZDY1ZGU0NTcwZmQ1NWU4OTljNjZlZWQxMjgzYzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKQEAgLTYyLDggKzYyLDI2IEBA
IHB1YmxpYzoKICAgICAgICAgUmVmPExhYmVsPiBtX2FsdGVybmF0ZTsKICAgICB9OwogCi0gICAg
c3RydWN0IENvbnRyb2xUeXBlIDogcHVibGljIFZhcmlhbnQ8Q29udHJvbExvb3AsIENvbnRyb2xU
b3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWY+IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9
IFZhcmlhbnQ8Q29udHJvbExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250
cm9sSWY+OworICAgIHN0cnVjdCBDb250cm9sVHJ5IHsKKyAgICAgICAgUmVmPExhYmVsPiBtX3Ry
eTsKKyAgICAgICAgdW5zaWduZWQgbV90cnlEZXB0aDsKKyAgICB9OworCisgICAgc3RydWN0IENv
bnRyb2xDYXRjaCB7CisgICAgICAgIENhdGNoS2luZCBtX2tpbmQ7CisgICAgICAgIFJlZjxMYWJl
bD4gbV90cnlTdGFydDsKKyAgICAgICAgUmVmPExhYmVsPiBtX3RyeUVuZDsKKyAgICAgICAgdW5z
aWduZWQgbV90cnlEZXB0aDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fZXhjZXB0aW9uOwor
ICAgIH07CisKKyAgICBzdHJ1Y3QgQ2F0Y2hSZXdyaXRlSW5mbyB7CisgICAgICAgIHVuc2lnbmVk
IG1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5RGVwdGg7CisgICAg
fTsKKworICAgIHN0cnVjdCBDb250cm9sVHlwZSA6IHB1YmxpYyBWYXJpYW50PENvbnRyb2xMb29w
LCBDb250cm9sVG9wTGV2ZWwsIENvbnRyb2xCbG9jaywgQ29udHJvbElmLCBDb250cm9sVHJ5LCBD
b250cm9sQ2F0Y2g+IHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IFZhcmlhbnQ8Q29udHJvbExvb3As
IENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWYsIENvbnRyb2xUcnksIENv
bnRyb2xDYXRjaD47CiAKICAgICAgICAgQ29udHJvbFR5cGUoKQogICAgICAgICAgICAgOiBCYXNl
KENvbnRyb2xCbG9jayB7IH0pCkBAIC05MCw4ICsxMDgsMjkgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5h
cmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbElmIHsgV1RGTW92
ZShhbHRlcm5hdGUpIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIGJvb2wgaXNJZihj
b25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxDb250cm9sSWY+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBjcmVh
dGVUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZjxM
YWJlbD4mJiB0cnlMYWJlbCwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbiwgdW5zaWduZWQg
dHJ5RGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWdu
YXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNv
bnRpbnVhdGlvbiksIENvbnRyb2xUcnkgeyBXVEZNb3ZlKHRyeUxhYmVsKSwgdHJ5RGVwdGggfSk7
CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgY3JlYXRlQ2F0Y2goQmxv
Y2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZjxMYWJlbD4mJiB0
cnlTdGFydCwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbiwgUmVmPExhYmVsPiB0cnlFbmQs
IHVuc2lnbmVkIHRyeURlcHRoLCBWaXJ0dWFsUmVnaXN0ZXIgZXhjZXB0aW9uKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBz
aWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9s
Q2F0Y2ggeyBDYXRjaEtpbmQ6OkNhdGNoLCBXVEZNb3ZlKHRyeVN0YXJ0KSwgV1RGTW92ZSh0cnlF
bmQpLCB0cnlEZXB0aCwgZXhjZXB0aW9uIH0pOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGlj
IGJvb2wgaXNMb29wKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29wPihjb250cm9sKTsgfQogICAgICAgICBzdGF0aWMg
Ym9vbCBpc1RvcExldmVsKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xUb3BMZXZlbD4oY29udHJvbCk7IH0KKyAgICAgICAg
c3RhdGljIGJvb2wgaXNCbG9jayhjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4g
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQmxvY2s+KGNvbnRyb2wpOyB9CisgICAgICAg
IHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbElmPihjb250cm9sKTsgfQorICAgICAgICBzdGF0
aWMgYm9vbCBpc1RyeShjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxDb250cm9sVHJ5Pihjb250cm9sKTsgfQorICAgICAgICBzdGF0aWMg
Ym9vbCBpc0FueUNhdGNoKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xDYXRjaD4oY29udHJvbCk7IH0KKyAgICAgICAgc3Rh
dGljIGJvb2wgaXNDYXRjaChjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xDYXRjaD4oY29u
dHJvbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgQ29udHJv
bENhdGNoIGNhdGNoRGF0YSA9IFdURjo6Z2V0PENvbnRyb2xDYXRjaD4oY29udHJvbCk7CisgICAg
ICAgICAgICByZXR1cm4gY2F0Y2hEYXRhLm1fa2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoOworICAg
ICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
dGFja1NpemU7IH0KICAgICAgICAgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaWduYXR1cmU7IH0KQEAgLTE1MiwxNyArMTkxLDI0IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxl
IGZhaWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOwogICAgIH0KIAot
ICAgIExMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJik7CisgICAgTExJbnRHZW5lcmF0b3IoTW9kdWxl
SW5mb3JtYXRpb24mLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKTsK
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4gZmluYWxpemUoKTsKIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KKyAgICB2b2lkIHJlcGF0Y2goY29uc3QgQ2F0
Y2hSZXdyaXRlSW5mbyYpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhwcmVzc2lvbkxpc3RB
LCB0eXBlbmFtZSBFeHByZXNzaW9uTGlzdEI+CiAgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9j
ayhjb25zdCBFeHByZXNzaW9uTGlzdEEmIGRlc3RpbmF0aW9ucywgY29uc3QgRXhwcmVzc2lvbkxp
c3RCJiB2YWx1ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoZGVzdGluYXRpb25zLnNpemUoKSA8
PSB2YWx1ZXMuc2l6ZSgpKTsKICAgICAgICAgYXV0byBvZmZzZXQgPSB2YWx1ZXMuc2l6ZSgpIC0g
ZGVzdGluYXRpb25zLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXN0
aW5hdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIGRl
c3RpbmF0aW9uc1tpXSwgdmFsdWVzW29mZnNldCArIGldKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8m
IHNyYyA9IHZhbHVlc1tvZmZzZXQgKyBpXTsKKyAgICAgICAgICAgIGF1dG8mIGRzdCA9IGRlc3Rp
bmF0aW9uc1tpXTsKKyAgICAgICAgICAgIGlmICgoVmlydHVhbFJlZ2lzdGVyKXNyYyAhPSAoVmly
dHVhbFJlZ2lzdGVyKWRzdCkKKyAgICAgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIGRz
dCwgc3JjKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGVudW0gTm9Db25zaXN0ZW5jeUNoZWNr
VGFnIHsgTm9Db25zaXN0ZW5jeUNoZWNrIH07CkBAIC0yNDMsMTEgKzI4OSwyMSBAQCBwdWJsaWM6
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sVHlw
ZSYsIFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxz
ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKIAorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNr
LCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBj
b25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoVG9VbnJlYWNoYWJsZSh1
bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBS
ZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0
Y2hBbGwoU3RhY2smLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwg
Q29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRE
ZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlv
bkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xU
eXBlJik7CisKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4o
Y29uc3QgQ29udHJvbFR5cGUmLCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbFR5cGUmLCBFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNv
bnN0IFZlY3RvcjxDb250cm9sVHlwZSo+JiB0YXJnZXRzLCBDb250cm9sVHlwZSYgZGVmYXVsdFRh
cmdldHMsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIFN0YWNrJiBleHByZXNzaW9uU3Rh
Y2spOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFj
aGFibGUoQ29udHJvbEVudHJ5JiwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9IHsgfSwg
Ym9vbCB1bnJlYWNoYWJsZSA9IHRydWUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiwgU3RhY2smIGV4cHJlc3Np
b25TdGFjaywgYm9vbCB1bnJlYWNoYWJsZSA9IHRydWUpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlLCBjb25zdCBTdGFjayYp
OwogCiAgICAgLy8gQ2FsbHMKQEAgLTMzNyw3ICszOTMsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgV2FzbURyb3BLZWVwOjplbWl0KHRoaXMsIHN0YXJ0T2Zmc2V0LCBkcm9wLCBrZWVwKTsKICAg
ICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFN0YWNrLCB0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgd2Fsa0V4cHJlc3Npb25TdGFj
ayhTdGFjayYgZXhwcmVzc2lvblN0YWNrLCB1bnNpZ25lZCBzdGFja1NpemUsIGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBleHByZXNzaW9u
U3RhY2suc2l6ZSgpOyBpID4gMDsgLS1pKSB7CkBAIC0zNDYsNyArNDAyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgU3RhY2ssIHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCB3YWxr
RXhwcmVzc2lvblN0YWNrKFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCiAgICAgewogICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGV4cHJlc3Npb25TdGFj
aywgbV9zdGFja1NpemUsIGZ1bmN0b3IpOwpAQCAtMzU1LDcgKzQxMSw4IEBAIHByaXZhdGU6CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHdhbGtFeHByZXNzaW9uU3Rh
Y2soQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0g
ICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2ss
IGVudHJ5LmNvbnRyb2xEYXRhLnN0YWNrU2l6ZSgpLCBmdW5jdG9yKTsKKyAgICAgICAgdW5zaWdu
ZWQgc3RhY2tTaXplID0gZW50cnkuY29udHJvbERhdGEuc3RhY2tTaXplKCk7CisgICAgICAgIHdh
bGtFeHByZXNzaW9uU3RhY2soZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2ssIHN0YWNrU2l6
ZSwgZnVuY3Rvcik7CiAgICAgfQogCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkKQEAgLTM4
MSw3ICs0MzgsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBtYXRlcmlhbGl6ZUNvbnN0YW50c0Fu
ZExvY2FscyhTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBOb0NvbnNpc3RlbmN5Q2hlY2tUYWcpCiAg
ICAgewotICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGV4cHJlc3Npb25TdGFjaywgWyZdKFR5
cGVkRXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsKKyAgICAg
ICAgd2Fsa0V4cHJlc3Npb25TdGFjayhleHByZXNzaW9uU3RhY2ssIFsmXShhdXRvJiBleHByZXNz
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgewogICAgICAgICAgICAgQVNTRVJUKGV4cHJlc3Np
b24udmFsdWUoKSA9PSBzbG90IHx8IGV4cHJlc3Npb24udmFsdWUoKS5pc0NvbnN0YW50KCkgfHwg
ZXhwcmVzc2lvbi52YWx1ZSgpLmlzQXJndW1lbnQoKSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZXhwcmVzc2lvbi52YWx1ZSgpLnRvTG9jYWwoKSkgPCBtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsK
ICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLnZhbHVlKCkgPT0gc2xvdCkKICAgICAgICAgICAg
ICAgICByZXR1cm47CkBAIC00MTcsNiArNDc0LDggQEAgcHJpdmF0ZToKICAgICAgICAgbV9zdGFj
a1NpemUgKz0gbmV3U3RhY2suc2l6ZSgpOwogICAgIH0KIAorICAgIHZvaWQgZmluYWxpemVQcmV2
aW91c0Jsb2NrRm9yQ2F0Y2goQ29udHJvbFR5cGUmLCBTdGFjayYpOworCiAgICAgc3RydWN0IFN3
aXRjaEVudHJ5IHsKICAgICAgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQ7CiAg
ICAgICAgIGludCoganVtcFRhcmdldDsKQEAgLTQyOSw3ICs0ODgsNyBAQCBwcml2YXRlOgogICAg
IH07CiAKICAgICBGdW5jdGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVs
bHB0ciB9OwotICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CisgICAgTW9kdWxl
SW5mb3JtYXRpb24mIG1faW5mbzsKICAgICBjb25zdCB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5kZXgg
eyBVSU5UX01BWCB9OwogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IG1fbm9ybWFsaXplZEFy
Z3VtZW50czsKICAgICBIYXNoTWFwPExhYmVsKiwgVmVjdG9yPFN3aXRjaEVudHJ5Pj4gbV9zd2l0
Y2hlczsKQEAgLTQ0MCw5ICs0OTksMTIgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8VmlydHVhbFJl
Z2lzdGVyLCAyPiBtX3Jlc3VsdHM7CiAgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9zdGFja1NpemUg
eyAwIH07CiAgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9tYXhTdGFja1NpemUgeyAwIH07CisgICAg
Q2hlY2tlZDx1bnNpZ25lZD4gbV90cnlEZXB0aCB7IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVk
PiBtX21heFRyeURlcHRoIHsgMCB9OworICAgIGJvb2wgbV91c2VzRXhjZXB0aW9ucyB7IGZhbHNl
IH07CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBT
dHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3Rh
cnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQorRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFu
ZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVu
Y3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgdWludDMyX3QgZnVuY3Rpb25JbmRleCkKIHsKICAgICBMTEludEdlbmVyYXRvciBs
bGludEdlbmVyYXRvcihpbmZvLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmUpOwogICAgIEZ1bmN0
aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiBwYXJzZXIobGxpbnRHZW5lcmF0b3IsIGZ1bmN0aW9u
U3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOwpAQCAtNDY2LDcgKzUyOCw3
IEBAIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxCdWZmZXI+JiB0aHJlYWRTcGVjaWZpY0J1ZmZlcigp
CiAgICAgcmV0dXJuICp0aHJlYWRTcGVjaWZpY0J1ZmZlclB0cjsKIH0KIAotTExJbnRHZW5lcmF0
b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKQorTExJbnRHZW5lcmF0b3I6OkxMSW50
R2VuZXJhdG9yKE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
LCBjb25zdCBTaWduYXR1cmUmKQogICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKG1ha2VVbmlx
dWU8RnVuY3Rpb25Db2RlQmxvY2s+KGZ1bmN0aW9uSW5kZXgpLCAwKQogICAgICwgbV9pbmZvKGlu
Zm8pCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKQEAgLTQ4NSw5ICs1NDcs
MjIgQEAgTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkkKICAgICBXYXNtRW50ZXI6OmVtaXQodGhpcyk7
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3ZvaWQgTExJbnRHZW5lcmF0b3I6OnJl
cGF0Y2goY29uc3QgQ2F0Y2hSZXdyaXRlSW5mbyYgaW5mbykKK3sKKyAgICBhdXRvIHJlZiA9IG1f
d3JpdGVyLnJlZihpbmZvLm1faW5zdHJ1Y3Rpb25PZmZzZXQpOworICAgIE9wY29kZSogaW5zdHJ1
Y3Rpb24gPSByZWYtPmNhc3Q8T3Bjb2RlLCBXYXNtT3Bjb2RlVHJhaXRzPigpOworICAgIFZpcnR1
YWxSZWdpc3RlciBleGNlcHRpb25SZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1f
bWF4U3RhY2tTaXplICsgaW5mby5tX3RyeURlcHRoIC0gMSk7CisgICAgaW5zdHJ1Y3Rpb24tPnNl
dEV4Y2VwdGlvbihleGNlcHRpb25SZWdpc3RlciwgW10oKSB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICB9KTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBMTEludEdlbmVy
YXRvcjo6ZmluYWxpemUoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29kZUJsb2NrKTsKKwog
ICAgIHNpemVfdCBudW1DYWxsZWVMb2NhbHMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgbV9tYXhTdGFja1NpemUpOwogICAgIG1fY29kZUJsb2Nr
LT5tX251bUNhbGxlZUxvY2FscyA9IG51bUNhbGxlZUxvY2FsczsKICAgICBSRUxFQVNFX0FTU0VS
VChudW1DYWxsZWVMb2NhbHMgPT0gbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlTG9jYWxzKTsKQEAg
LTUwMCw2ICs1NzUsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IExMSW50
R2VuZXJhdG9yOjpmaW5hbGl6ZSgpCiAgICAgUkVMRUFTRV9BU1NFUlQodXNlZEJ1ZmZlci5jYXBh
Y2l0eSgpID09IG9sZENhcGFjaXR5KTsKICAgICAqdGhyZWFkU3BlY2lmaWMgPSBXVEZNb3ZlKHVz
ZWRCdWZmZXIpOwogCisgICAgaWYgKCFtX3VzZXNFeGNlcHRpb25zKQorICAgICAgICBtX2luZm8u
bV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrU2V0KG1fZnVuY3Rpb25JbmRleCk7
CisKICAgICByZXR1cm4gV1RGTW92ZShtX2NvZGVCbG9jayk7CiB9CiAKQEAgLTU4MCw3ICs2NTgs
NyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IExMSQogCiAgICAgLy8gRklYTUU6IHdlIGFyZSBhbGxv
Y2F0aW5nIHRoZSBleHRyYSBzcGFjZSBmb3IgdGhlIGFyZ3VtZW50L3JldHVybiBjb3VudCBpbiBv
cmRlciB0byBhdm9pZCBpbnRlcmZlcmVuY2UsIGJ1dCB3ZSBjb3VsZCBkbyBiZXR0ZXIKICAgICAv
LyBOT1RFOiBXZSBpbmNyZWFzZSBhcmcgY291bnQgYnkgMSBmb3IgdGhlIGNhc2Ugb2YgaW5kaXJl
Y3QgY2FsbHMKLSAgICBtX3N0YWNrU2l6ZSArPSBzdGQ6Om1heChzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpICsgMSwgc2lnbmF0dXJlLnJldHVybkNvdW50KCkpICsgZ3ByQ291bnQgKyBmcHJDb3Vu
dCArIHN0YWNrQ291bnQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKKyAgICBt
X3N0YWNrU2l6ZSArPSBzdGQ6Om1heChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpICsgMSwgc2ln
bmF0dXJlLnJldHVybkNvdW50KCkpICsgZ3ByQ291bnQgKyBmcHJDb3VudCArIHN0YWNrQ291bnQg
KyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIDE7CiAgICAgaWYgKG1fc3RhY2tT
aXplLnZhbHVlKCkgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKQogICAgICAgICArK21fc3Rh
Y2tTaXplOwogICAgIGlmIChtX21heFN0YWNrU2l6ZSA8IG1fc3RhY2tTaXplKQpAQCAtNTkxLDcg
KzY2OSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAgICAgUmVzdWx0TGlzdCB0ZW1wb3Jh
cnlSZXN1bHRzKHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpKTsKIAogICAgIGNvbnN0IHVuc2lnbmVk
IHN0YWNrT2Zmc2V0ID0gbV9zdGFja1NpemU7Ci0gICAgY29uc3QgdW5zaWduZWQgYmFzZSA9IHN0
YWNrT2Zmc2V0IC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7CisgICAgY29uc3Qg
dW5zaWduZWQgYmFzZSA9IHN0YWNrT2Zmc2V0IC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdp
c3RlcnMgLSAxOwogCiAgICAgY29uc3QgdWludDMyX3QgZ3ByTGltaXQgPSBiYXNlIC0gc3RhY2tD
b3VudCAtIGdwckNvdW50OwogICAgIGNvbnN0IHVpbnQzMl90IGZwckxpbWl0ID0gZ3ByTGltaXQg
LSBmcHJDb3VudDsKQEAgLTY4Myw3ICs3NjEsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxs
SW5mb3JtYXRpb25Gb3JDYWxsZWUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFZlYwog
CiAgICAgdWludDMyX3QgZ3BySW5kZXggPSAwOwogICAgIHVpbnQzMl90IGZwckluZGV4ID0gZ3By
Q291bnQ7Ci0gICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7CisgICAgdWludDMyX3Qgc3RhY2tJ
bmRleCA9IDE7CiAgICAgY29uc3QgdWludDMyX3QgbWF4R1BSSW5kZXggPSBncHJDb3VudDsKICAg
ICBjb25zdCB1aW50MzJfdCBtYXhGUFJJbmRleCA9IG1heEdQUkluZGV4ICsgZnByQ291bnQ7CiAK
QEAgLTczMSw3ICs4MDksNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBjb25zdCB1aW50
MzJfdCBtYXhGUFJJbmRleCA9IGdwckNvdW50ICsgZnByQ291bnQ7CiAgICAgdWludDMyX3QgZ3By
SW5kZXggPSAwOwogICAgIHVpbnQzMl90IGZwckluZGV4ID0gbWF4R1BSSW5kZXg7Ci0gICAgdWlu
dDMyX3Qgc3RhY2tJbmRleCA9IDA7CisgICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDE7CiAKICAg
ICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiByZWdpc3RlckFyZ3VtZW50cyhncHJDb3VudCArIGZw
ckNvdW50KTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZ3ByQ291bnQgKyBmcHJDb3Vu
dDsgaSsrKQpAQCAtOTA2LDYgKzk4NCw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExvb3Ao
QmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvCiAKICAg
ICBibG9jayA9IENvbnRyb2xUeXBlOjpsb29wKHNpZ25hdHVyZSwgbV9zdGFja1NpemUsIFdURk1v
dmUoYm9keSksIFdURk1vdmUoY29udGludWF0aW9uKSk7CiAKKyAgICBWZWN0b3I8dW5zaWduZWQ+
IHVucmVzb2x2ZWRPZmZzZXRzOwogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IG9zckVudHJ5
RGF0YTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm1fbnVtQXJn
dW1lbnRzOyBpKyspCiAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQobV9ub3JtYWxpemVkQXJn
dW1lbnRzW2ldKTsKQEAgLTkxNiw5ICs5OTUsMTIgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
TG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ28K
ICAgICBmb3IgKHVpbnQzMl90IGkgPSBncHJDb3VudCArIGZwckNvdW50ICsgbnVtYmVyT2ZMTElu
dENhbGxlZVNhdmVSZWdpc3RlcnM7IGkgPCBtX2NvZGVCbG9jay0+bV9udW1WYXJzOyBpKyspCiAg
ICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOwog
ICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJz
ZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgQ29u
dHJvbFR5cGUmIGRhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5j
b250cm9sRGF0YTsKICAgICAgICAgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5j
b250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOwogICAg
ICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKQog
ICAgICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZChleHByZXNzaW9uKTsKKyAgICAgICAgaWYg
KENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpKQorICAgICAgICAgICAgb3NyRW50cnlEYXRh
LmFwcGVuZChXVEY6OmdldDxDb250cm9sQ2F0Y2g+KGRhdGEpLm1fZXhjZXB0aW9uKTsKICAgICB9
CiAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gZXhwcmVzc2lvbiA6IGVuY2xvc2luZ1N0YWNrKQog
ICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKGV4cHJlc3Npb24pOwpAQCAtOTc1LDYgKzEwNTcs
MTU5IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xU
eXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAorYXV0byBM
TEludEdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVu
Y2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICArK21fdHJ5
RGVwdGg7CisgICAgaWYgKG1fbWF4VHJ5RGVwdGggPCBtX3RyeURlcHRoKQorICAgICAgICBtX21h
eFRyeURlcHRoID0gbV90cnlEZXB0aDsKKworICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNs
b3NpbmdTdGFjaywgbmV3U3RhY2spOworICAgIFJlZjxMYWJlbD4gdHJ5TGFiZWwgPSBuZXdFbWl0
dGVkTGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+IGNvbnRpbnVhdGlvbiA9IG5ld0xhYmVsKCk7Cisg
ICAgcmVzdWx0ID0gQ29udHJvbFR5cGU6OmNyZWF0ZVRyeShzaWduYXR1cmUsIG1fc3RhY2tTaXpl
LCBXVEZNb3ZlKHRyeUxhYmVsKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBtX3RyeURlcHRoKTsK
KyAgICByZXR1cm4geyB9OworfQorCit2b2lkIExMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZVByZXZp
b3VzQmxvY2tGb3JDYXRjaChDb250cm9sVHlwZSYgZGF0YSwgU3RhY2smIGV4cHJlc3Npb25TdGFj
aykKK3sKKyAgICBpZiAoIUNvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpKQorICAgICAgICBt
YXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNzaW9uU3RhY2spOworICAgIGVsc2Ug
eworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChkYXRhLnN0YWNrU2l6ZSgpKTsKKyAgICAgICAg
Zm9yIChUeXBlZEV4cHJlc3Npb24mIHZhbHVlIDogZXhwcmVzc2lvblN0YWNrKSB7CisgICAgICAg
ICAgICBXYXNtTW92OjplbWl0KHRoaXMsIGRzdCwgdmFsdWUpOworICAgICAgICAgICAgdmFsdWUg
PSBUeXBlZEV4cHJlc3Npb24geyB2YWx1ZS50eXBlKCksIGRzdCB9OworICAgICAgICAgICAgZHN0
IC09IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgV2FzbUptcDo6ZW1pdCh0aGlzLCBkYXRhLm1f
Y29udGludWF0aW9uLT5iaW5kKHRoaXMpKTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
Q2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9u
U2lnbmF0dXJlLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSwgUmVz
dWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGZpbmFsaXplUHJldmlv
dXNCbG9ja0ZvckNhdGNoKGRhdGEsIGV4cHJlc3Npb25TdGFjayk7CisgICAgcmV0dXJuIGFkZENh
dGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRleCwgZXhjZXB0aW9uU2lnbmF0dXJlLCBkYXRh
LCByZXN1bHRzKTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hh
YmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNp
Z25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICBSZWY8TGFiZWw+
IGNhdGNoTGFiZWwgPSBuZXdFbWl0dGVkTGFiZWwoKTsKKworICAgIG1fc3RhY2tTaXplID0gZGF0
YS5zdGFja1NpemUoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZXhjZXB0aW9uID0gcHVzaCgpOwor
ICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xUcnk+KGRhdGEpKSB7CisgICAg
ICAgIENvbnRyb2xUcnkmIHRyeURhdGEgPSBXVEY6OmdldDxDb250cm9sVHJ5PihkYXRhKTsKKyAg
ICAgICAgZGF0YSA9IENvbnRyb2xUeXBlOjpjcmVhdGVDYXRjaChkYXRhLm1fc2lnbmF0dXJlLCBk
YXRhLnN0YWNrU2l6ZSgpLCBXVEZNb3ZlKHRyeURhdGEubV90cnkpLCBXVEZNb3ZlKGRhdGEubV9j
b250aW51YXRpb24pLCBjYXRjaExhYmVsLCB0cnlEYXRhLm1fdHJ5RGVwdGgsIGV4Y2VwdGlvbik7
CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2goKSk7CisK
KyAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBXYXNtQ2F0Y2g6OmVtaXQo
dGhpcywgZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvbiwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKSwgcmVzdWx0cy5pc0VtcHR5KCkgPyAwIDogLXJlc3VsdHNbMF0ub2Zmc2V0KCkp
OworICAgIGVsc2UKKyAgICAgICAgV2FzbUNhdGNoTm9UbHM6OmVtaXQodGhpcywgZXhjZXB0aW9u
SW5kZXgsIGV4Y2VwdGlvbiwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgcmVz
dWx0cy5pc0VtcHR5KCkgPyAwIDogLXJlc3VsdHNbMF0ub2Zmc2V0KCkpOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsr
aSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gcmVzdWx0c1tpXTsKKyAgICAgICAg
VHlwZSB0eXBlID0gZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBzd2l0
Y2ggKHR5cGUua2luZCkgeworICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGMzI6CisgICAg
ICAgICAgICBXYXNtRjMyUmVpbnRlcnByZXRJMzI6OmVtaXQodGhpcywgZHN0LCBkc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkY2NDoKKyAgICAg
ICAgICAgIFdhc21GNjRSZWludGVycHJldEk2NDo6ZW1pdCh0aGlzLCBkc3QsIGRzdCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STMyOgorICAgICAg
ICBjYXNlIFdhc206OlR5cGVLaW5kOjpJNjQ6CisgICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6
OkV4dGVybnJlZjoKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RnVuY3JlZjoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgQ29udHJvbENhdGNoJiBjYXRjaERhdGEgPSBXVEY6OmdldDxDb250cm9sQ2F0Y2g+KGRh
dGEpOworICAgIGNhdGNoRGF0YS5tX2tpbmQgPSBDYXRjaEtpbmQ6OkNhdGNoOworICAgIG1fY29k
ZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKHsgSGFuZGxlclR5cGU6OkNhdGNoLCBjYXRjaERh
dGEubV90cnlTdGFydC0+bG9jYXRpb24oKSwgY2F0Y2hEYXRhLm1fdHJ5RW5kLT5sb2NhdGlvbigp
LCBjYXRjaExhYmVsLT5sb2NhdGlvbigpLCBtX3RyeURlcHRoLCBleGNlcHRpb25JbmRleCB9KTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhdGNoQWxs
KFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2goZGF0YSwgZXhwcmVzc2lv
blN0YWNrKTsKKyAgICBXYXNtSm1wOjplbWl0KHRoaXMsIGRhdGEubV9jb250aW51YXRpb24tPmJp
bmQodGhpcykpOworICAgIHJldHVybiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoZGF0YSk7Cit9
CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9s
VHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0
cnVlOworICAgIFJlZjxMYWJlbD4gY2F0Y2hMYWJlbCA9IG5ld0VtaXR0ZWRMYWJlbCgpOworICAg
IG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZXhj
ZXB0aW9uID0gcHVzaCgpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xU
cnk+KGRhdGEpKSB7CisgICAgICAgIENvbnRyb2xUcnkmIHRyeURhdGEgPSBXVEY6OmdldDxDb250
cm9sVHJ5PihkYXRhKTsKKyAgICAgICAgZGF0YSA9IENvbnRyb2xUeXBlOjpjcmVhdGVDYXRjaChk
YXRhLm1fc2lnbmF0dXJlLCBkYXRhLnN0YWNrU2l6ZSgpLCBXVEZNb3ZlKHRyeURhdGEubV90cnkp
LCBXVEZNb3ZlKGRhdGEubV9jb250aW51YXRpb24pLCBjYXRjaExhYmVsLCB0cnlEYXRhLm1fdHJ5
RGVwdGgsIGV4Y2VwdGlvbik7CisgICAgfQorICAgIENvbnRyb2xDYXRjaCYgY2F0Y2hEYXRhID0g
V1RGOjpnZXQ8Q29udHJvbENhdGNoPihkYXRhKTsKKyAgICBjYXRjaERhdGEubV9raW5kID0gQ2F0
Y2hLaW5kOjpDYXRjaEFsbDsKKworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAg
ICAgIFdhc21DYXRjaEFsbDo6ZW1pdCh0aGlzLCBleGNlcHRpb24pOworICAgIGVsc2UKKyAgICAg
ICAgV2FzbUNhdGNoQWxsTm9UbHM6OmVtaXQodGhpcywgZXhjZXB0aW9uKTsKKworICAgIG1fY29k
ZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKHsgSGFuZGxlclR5cGU6OkNhdGNoQWxsLCBjYXRj
aERhdGEubV90cnlTdGFydC0+bG9jYXRpb24oKSwgY2F0Y2hEYXRhLm1fdHJ5RW5kLT5sb2NhdGlv
bigpLCBjYXRjaExhYmVsLT5sb2NhdGlvbigpLCBtX3RyeURlcHRoLCAwIH0pOworICAgIHJldHVy
biB7IH07Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZERlbGVnYXRlKENvbnRyb2xUeXBl
JiB0YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0
dXJuIGFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZSh0YXJnZXQsIGRhdGEpOworfQorCithdXRvIExM
SW50R2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIHRhcmdl
dCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNl
cHRpb25zID0gdHJ1ZTsKKyAgICBSZWY8TGFiZWw+IGRlbGVnYXRlTGFiZWwgPSBuZXdFbWl0dGVk
TGFiZWwoKTsKKworICAgIEFTU0VSVChDb250cm9sVHlwZTo6aXNUcnkodGFyZ2V0KSB8fCBDb250
cm9sVHlwZTo6aXNUb3BMZXZlbCh0YXJnZXQpKTsKKyAgICB1bnNpZ25lZCB0YXJnZXREZXB0aCA9
IENvbnRyb2xUeXBlOjppc1RyeSh0YXJnZXQpID8gV1RGOjpnZXQ8Q29udHJvbFRyeT4odGFyZ2V0
KS5tX3RyeURlcHRoIDogMDsKKworICAgIENvbnRyb2xUcnkmIHRyeURhdGEgPSBXVEY6OmdldDxD
b250cm9sVHJ5PihkYXRhKTsKKyAgICBtX2NvZGVCbG9jay0+YWRkRXhjZXB0aW9uSGFuZGxlcih7
IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSwgdHJ5RGF0YS5tX3RyeS0+bG9jYXRpb24oKSwgZGVsZWdh
dGVMYWJlbC0+bG9jYXRpb24oKSwgMCwgbV90cnlEZXB0aCwgdGFyZ2V0RGVwdGggfSk7CisgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJbnRHZW5l
cmF0b3I6OmFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNl
cHRpb25zID0gdHJ1ZTsKKyAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGFyZ3MsIFsmXShWaXJ0dWFs
UmVnaXN0ZXImIGFyZywgVmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsKKyAgICAgICAgaWYgKGFyZyA9
PSBzbG90KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMs
IHNsb3QsIGFyZyk7CisgICAgICAgIGFyZyA9IHNsb3Q7CisgICAgfSk7CisgICAgV2FzbVRocm93
OjplbWl0KHRoaXMsIGV4Y2VwdGlvbkluZGV4LCBhcmdzLmlzRW1wdHkoKSA/IHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKDApIDogYXJnc1swXSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBM
TEludEdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICBBU1NF
UlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQ2F0Y2g+KGRhdGEpKTsKKyAgICBDb250
cm9sQ2F0Y2ggY2F0Y2hEYXRhID0gV1RGOjpnZXQ8Q29udHJvbENhdGNoPihkYXRhKTsKKyAgICBX
YXNtUmV0aHJvdzo6ZW1pdCh0aGlzLCBjYXRjaERhdGEubV9leGNlcHRpb24pOworICAgIHJldHVy
biB7IH07Cit9CisKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9s
VHlwZSYgZGF0YSwgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAogewogICAg
IGlmICghZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSkgewpAQCAtMTA0OSwxOSArMTI4
NCwyNSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5
LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYQogewogICAgIC8vIEZJWE1FOiBXZSBvbmx5
IG5lZWQgdG8gbWF0ZXJpYWxpemUgY29uc3RhbnRzIGhlcmUgaWYgdGhlcmUgZXhpc3RzIGEganVt
cCB0byB0aGlzIGxhYmVsCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMzY1NwotICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKGV4cHJlc3Np
b25TdGFjayk7CisgICAgZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2goZW50cnkuY29udHJv
bERhdGEsIGV4cHJlc3Npb25TdGFjayk7CiAgICAgcmV0dXJuIGFkZEVuZFRvVW5yZWFjaGFibGUo
ZW50cnksIGV4cHJlc3Npb25TdGFjaywgZmFsc2UpOwogfQogCiAKLWF1dG8gTExJbnRHZW5lcmF0
b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2sm
IGV4cHJlc3Npb25TdGFjaywgYm9vbCB1bnJlYWNoYWJsZSkgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5
LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBib29sIHVucmVhY2hhYmxlKSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CiAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsKIAotICAg
IFJFTEVBU0VfQVNTRVJUKHVucmVhY2hhYmxlIHx8IG1fc3RhY2tTaXplID09IGRhdGEuc3RhY2tT
aXplKCkgKyBkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKTsKKyAgICB1bnNpZ25lZCBz
dGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOworICAgIGlmIChDb250cm9sVHlwZTo6aXNBbnlD
YXRjaChlbnRyeS5jb250cm9sRGF0YSkpCisgICAgICAgICsrc3RhY2tTaXplOyAvLyBBY2NvdW50
IGZvciB0aGUgY2F1Z2h0IGV4Y2VwdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKHVucmVhY2hhYmxl
IHx8IG1fc3RhY2tTaXplID09ICBzdGFja1NpemUgKyBkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5D
b3VudCgpKTsKIAogICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKIAorICAgIGlm
IChDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkgfHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250
cm9sQ2F0Y2g+KGRhdGEpKQorICAgICAgICAtLW1fdHJ5RGVwdGg7CisKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKSB7CiAg
ICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG8gYSBjb25zaXN0ZW5jeSBjaGVjayBoZXJlIGJl
Y2F1c2Ugd2UganVzdCByZXNldCB0aGUgc3RhY2sgc2l6ZQogICAgICAgICAvLyBhcmUgcHVzaGlu
ZyBuZXcgdmFsdWVzLCB3aGlsZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHNhbWUgdmFsdWVzIGluIHRo
ZSBzdGFjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dEdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJh
dG9yLmgKaW5kZXggOGExNjAzODI2YzEwMGViZmYwOGEwMzA2ZjYyZWQxOTdiYmNlZmY1Yi4uYzAx
MmZiMWVlNzE0YWY5ODIzZGEyNmM2YzM0ZDhhYjc3MmViNDU1MiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKQEAgLTM2LDcgKzM2LDcgQEAg
Y2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBTaWduYXR1cmU7CiBzdHJ1Y3QgTW9kdWxl
SW5mb3JtYXRpb247CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9j
az4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVf
dCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4KTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9j
az4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVf
dCwgY29uc3QgU2lnbmF0dXJlJiwgTW9kdWxlSW5mb3JtYXRpb24mLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxpbWl0cy5oCmluZGV4IGNmOGI0NDYwMzY4MTEyM2VjYzI1Y2ZjMzcyNDk4
YjVmNWI1OGM5ODYuLmY4ZjA1M2I1ODYwZTdkZjk3ZGI0NDY0YWEwZWExNzQ4ZDliODdmMzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MaW1pdHMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmgKQEAgLTQxLDYgKzQxLDcgQEAg
Y29uc3RleHByIHNpemVfdCBtYXhUeXBlcyA9IDEwMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1h
eEZ1bmN0aW9ucyA9IDEwMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEltcG9ydHMgPSAxMDAw
MDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEV4cG9ydHMgPSAxMDAwMDA7Citjb25zdGV4cHIgc2l6
ZV90IG1heEV4Y2VwdGlvbnMgPSAxMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEdsb2JhbHMg
PSAxMDAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhEYXRhU2VnbWVudHMgPSAxMDAwMDA7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1h
dGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRp
b24uY3BwCmluZGV4IDM1NDkxY2ZlNTQxMDU3M2FiZDM1YmEzOWI3NTYwN2Q4NmMyNjhkYjYuLmM2
ZThiOGM3ZmViOWNjMjA4ZWIyNzk2ZWE3ZjJhNDIwNGQ0MDc2NzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcApAQCAtMzYs
NiArMzYsNyBAQCBNb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3JtYXRpb24oKQogICAgIDog
bmFtZVNlY3Rpb24oTmFtZVNlY3Rpb246OmNyZWF0ZSgpKQogewogfQorCiBNb2R1bGVJbmZvcm1h
dGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKCkgeyB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5m
b3JtYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1h
dGlvbi5oCmluZGV4IGEyYjBmODM2Yzg5YzIwZWVlMjRiOWFiMzRiZTEwMWMyODUxNDAzNTIuLjMy
OGM2YmNhNmJmYTY2MmI1M2U5YzhjOGRhOWFjYjE4ZjUwNDRhYzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCkBAIC01OCw4ICs1
OCwyMiBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICAgICAgICAgIDogaW50ZXJuYWxGdW5jdGlv
blNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleCAtIGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlcy5zaXplKCldOwogICAgIH0KIAorICAgIHNpemVfdCBleGNlcHRpb25JbmRleFNwYWNl
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6
ZSgpICsgaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQorICAgIGJv
b2wgaXNJbXBvcnRlZEV4Y2VwdGlvbkZyb21FeGNlcHRpb25JbmRleFNwYWNlKHNpemVfdCBleGNl
cHRpb25JbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChleGNlcHRpb25JbmRleCA8
IGV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCkpOworICAgICAgICByZXR1cm4gZXhjZXB0aW9uSW5k
ZXggPCBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICB9CisgICAg
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShzaXpl
X3QgZXhjZXB0aW9uSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNJbXBvcnRl
ZEV4Y2VwdGlvbkZyb21FeGNlcHRpb25JbmRleFNwYWNlKGV4Y2VwdGlvbkluZGV4KQorICAgICAg
ICAgICAgPyBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzW2V4Y2VwdGlvbkluZGV4XQor
ICAgICAgICAgICAgOiBpbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXNbZXhjZXB0aW9u
SW5kZXggLSBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKV07CisgICAgfQor
CiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9y
dEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KICAgICB1aW50MzJfdCBpbnRlcm5h
bEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlcy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbXBvcnRFeGNlcHRpb25Db3VudCgpIGNv
bnN0IHsgcmV0dXJuIGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9CiAK
ICAgICAvLyBDdXJyZW50bHksIG91ciB3YXNtIGltcGxlbWVudGF0aW9uIGFsbG93cyBvbmx5IG9u
ZSBtZW1vcnkgYW5kIHRhYmxlLgogICAgIC8vIElmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoaXMgbGlt
aXRhdGlvbiwgd2Ugd291bGQgaGF2ZSBNZW1vcnlJbmZvcm1hdGlvbiBhbmQgVGFibGVJbmZvcm1h
dGlvbiBpbiB0aGUgVmVjdG9ycy4KQEAgLTc2LDkgKzkwLDE0IEBAIHN0cnVjdCBNb2R1bGVJbmZv
cm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1bGVJbmZvcm1hdGlvbj4g
ewogICAgIGJvb2wgaXNEZWNsYXJlZEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2RlY2xhcmVkRnVuY3Rpb25zLmNvbnRhaW5zKGluZGV4KTsgfQogICAgIHZvaWQgYWRk
RGVjbGFyZWRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkgeyBtX2RlY2xhcmVkRnVuY3Rpb25zLnNl
dChpbmRleCk7IH0KIAorICAgIGJvb2wgaXNEZWNsYXJlZEV4Y2VwdGlvbih1aW50MzJfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9kZWNsYXJlZEV4Y2VwdGlvbnMuY29udGFpbnMoaW5kZXgpOyB9
CisgICAgdm9pZCBhZGREZWNsYXJlZEV4Y2VwdGlvbih1aW50MzJfdCBpbmRleCkgeyBtX2RlY2xh
cmVkRXhjZXB0aW9ucy5zZXQoaW5kZXgpOyB9CisKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRz
OwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVy
ZUluZGljZXM7CisgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbXBvcnRFeGNlcHRpb25TaWdu
YXR1cmVJbmRpY2VzOworICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW50ZXJuYWxFeGNlcHRp
b25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxSZWY8U2lnbmF0dXJlPj4gdXNlZFNpZ25h
dHVyZXM7CiAKICAgICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1vcnk7CkBAIC05OCw2ICsxMTcsOCBA
QCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICB1aW50MzJfdCBudW1iZXJPZkRhdGFTZWdtZW50cyB7
IDAgfTsKIAogICAgIEJpdFZlY3RvciBtX2RlY2xhcmVkRnVuY3Rpb25zOworICAgIEJpdFZlY3Rv
ciBtX2RlY2xhcmVkRXhjZXB0aW9uczsKKyAgICBCaXRWZWN0b3IgbV9mdW5jdGlvbkRvZXNOb3RV
c2VFeGNlcHRpb25zOwogICAgIG11dGFibGUgQml0VmVjdG9yIG1fcmVmZXJlbmNlZEZ1bmN0aW9u
czsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdG
b3JPU1JFbnRyeVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5jcHAKaW5kZXggMGQ0MzM4ZDY1OTIxMzIyZjAyODBkZWY2OWQ1ODM2MTZi
NDlkNjFjYi4uNjEwMzE2MWMxYzJmMDI0YzI5NGMwZmUxNTQwZmViYzc1MmI5ZGRjNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxh
bi5jcHAKQEAgLTkxLDE2ICs5MSwyMCBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayhD
b21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIEludGVybmFs
RnVuY3Rpb24qIGludGVybmFsRnVuY3Rpb24gPSBwYXJzZUFuZENvbXBpbGVSZXN1bHQtPmdldCgp
OworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4g
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxv
Y2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb250
ZXh0LCBsaW5rQnVmZmVyKTsKKwogICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtl
VW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfV0FTTV9DT0RFX0ZPUl9NT0RF
KENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBsaW5rQnVmZmVyLCBKSVRDb21w
aWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9NR0Zvck9TUkVudHJ5IGZ1bmN0aW9uWyVpXSAl
cyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgp
LmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9k
dWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFz
Y2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlw
cm9kdWN0cykpOwogCi0gICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RG
TW92ZShwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+ZW50cnlwb2ludC5jYWxsZWVTYXZl
UmVnaXN0ZXJzKTsKKyAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZN
b3ZlKGludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CiAK
ICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvciht
b2RlKCkpKTsKLSAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNhbGxlZSA9IE9NR0Zvck9T
UkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRl
eFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5k
ZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4LCBXVEZNb3Zl
KHVubGlua2VkQ2FsbHMpKTsKKyAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNhbGxlZSA9
IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVu
Y3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1
bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4
LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPnN0YWNr
bWFwcyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZN
b3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKICAgICB7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+Y2Fs
bGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoaW50ZXJuYWxGdW5jdGlvbi0+Y2Fs
bGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwogCiAg
ICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NvZGVCbG9jay0+bV9sb2NrIH07CiAgICAgICAgIGZv
ciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKaW5kZXggNWU3OWYxYmM5ODVjNjVk
NWNiYmFmODc4NGJkYjQ4OTBkYzhlNjI1MC4uZjhlZTAwMDgwODk5ZGM2YWE1NjViMjJhZDkzM2M5
M2QzNGFhMmJlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9N
R1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cApAQCAtODgsMTcgKzg4LDIxIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9y
dCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIEludGVybmFsRnVuY3Rpb24qIGludGVy
bmFsRnVuY3Rpb24gPSBwYXJzZUFuZENvbXBpbGVSZXN1bHQtPmdldCgpOworICAgIFZlY3RvcjxD
b2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4gZXhjZXB0aW9uSGFuZGxl
ckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhleGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb250ZXh0LCBsaW5rQnVmZmVy
KTsKKwogICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0
aW9uPigKICAgICAgICAgRklOQUxJWkVfV0FTTV9DT0RFX0ZPUl9NT0RFKENvbXBpbGF0aW9uTW9k
ZTo6T01HTW9kZSwgbGlua0J1ZmZlciwgSklUQ29tcGlsYXRpb25QdHJUYWcsICJXZWJBc3NlbWJs
eSBPTUcgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVy
ZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0
aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5j
dGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICBXVEZNb3ZlKGNvbnRl
eHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAKLSAgICBvbWdFbnRyeXBvaW50LmNhbGxl
ZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5l
bnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVl
U2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQ
dHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgewogICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRy
KCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKLSAgICAgICAgUmVmPE9NR0Nh
bGxlZT4gY2FsbGVlID0gT01HQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwg
ZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0
KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodW5saW5rZWRDYWxscykpOwotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVl
KCktPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkp
KTsKKyAgICAgICAgUmVmPE9NR0NhbGxlZT4gY2FsbGVlID0gT01HQ2FsbGVlOjpjcmVhdGUoV1RG
TW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0
aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodW5saW5r
ZWRDYWxscyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShp
bnRlcm5hbEZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucykpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIo
aW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNt
KGNhbGxlZS5wdHIoKSkpOwogICAgICAgICBBU1NFUlQoIW1fY29kZUJsb2NrLT5tX29tZ0NhbGxl
ZXNbbV9mdW5jdGlvbkluZGV4XSk7CiAgICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUtPmVudHJ5
cG9pbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9T
UkVudHJ5RGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9TUkVudHJ5RGF0
YS5oCmluZGV4IGQ0MWVkNzkzMmIzMGU5YWEwYWU4NzYzYmE4MmE2MTJjYWY3ZTY0OGIuLmQ5M2Yz
NDJjZTY0MmQyYzY2MzlmNjkwNjU5ZTZhMjViM2EwYTc4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeURhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlEYXRhLmgKQEAgLTI3LDggKzI3LDggQEAKIAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKIAorI2luY2x1ZGUgIkIzVHlwZS5oIgogI2luY2x1
ZGUgIkIzVmFsdWVSZXAuaCIKLSNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpAQCAtNDcsNiAr
NDcsOSBAQCBwcml2YXRlOgogICAgIEIzOjpUeXBlIG1fdHlwZTsKIH07CiAKK3VzaW5nIFN0YWNr
TWFwID0gVmVjdG9yPE9TUkVudHJ5VmFsdWU+OwordXNpbmcgU3RhY2tNYXBzID0gSGFzaE1hcDxD
YWxsU2l0ZUluZGV4LCBTdGFja01hcD47CisKIGNsYXNzIE9TUkVudHJ5RGF0YSB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoT1NSRW50cnlEYXRhKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKQEAgLTU5LDEyICs2MiwxMiBAQCBwdWJsaWM6CiAKICAgICB1aW50MzJfdCBmdW5jdGlv
bkluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbkluZGV4OyB9CiAgICAgdWludDMyX3Qg
bG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9sb29wSW5kZXg7IH0KLSAgICBWZWN0b3I8T1NS
RW50cnlWYWx1ZT4mIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAgU3RhY2tNYXAm
IHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAKIHByaXZhdGU6CiAgICAgdWludDMyX3Qg
bV9mdW5jdGlvbkluZGV4OwogICAgIHVpbnQzMl90IG1fbG9vcEluZGV4OwotICAgIFZlY3RvcjxP
U1JFbnRyeVZhbHVlPiBtX3ZhbHVlczsKKyAgICBTdGFja01hcCBtX3ZhbHVlczsKIH07CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggODViNDI0ZmIxODQ4OTMwOGRmMjdmOWE2MTdlN2Y3MzBm
NjNlMjU2OS4uZGFiYWVlN2ViODJkNzFiZGRiMTI5N2MwMWIzZTNmZWRhNTNkNzc4ZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1
ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdElubGluZXMuaCIKKyNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBl
cnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5UnVudGltZUVycm9yLmgiCkBAIC0xMDUsMjQgKzEwNiwxMCBAQCBzdGF0aWMgdm9p
ZCB0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21waWxlKFRpZXJVcENvdW50JiB0aWVyVXAsIE9NR0Nh
bGxlZSogcmVwbGFjZQogICAgIH0KIH0KIAotU1VQUFJFU1NfQVNBTgotc3RhdGljIHZvaWQgZG9P
U1JFbnRyeShJbnN0YW5jZSogaW5zdGFuY2UsIFByb2JlOjpDb250ZXh0JiBjb250ZXh0LCBCQlFD
YWxsZWUmIGNhbGxlZSwgT01HRm9yT1NSRW50cnlDYWxsZWUmIG9zckVudHJ5Q2FsbGVlLCBPU1JF
bnRyeURhdGEmIG9zckVudHJ5RGF0YSkKK3ZvaWQgbG9hZFZhbHVlc0ludG9CdWZmZXIoUHJvYmU6
OkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0YWNrTWFwJiB2YWx1ZXMsIHVpbnQ2NF90KiBidWZm
ZXIpCiB7Ci0gICAgYXV0byByZXR1cm5XaXRob3V0T1NSRW50cnkgPSBbJl0gewotICAgICAgICBj
b250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0gMDsKLSAgICB9OwotCi0gICAgUkVM
RUFTRV9BU1NFUlQob3NyRW50cnlDYWxsZWUub3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpID09
IG9zckVudHJ5RGF0YS52YWx1ZXMoKS5zaXplKCkpOwotCi0gICAgdWludDY0X3QqIGJ1ZmZlciA9
IGluc3RhbmNlLT5jb250ZXh0KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKG9zckVudHJ5Q2FsbGVl
Lm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAg
IHJldHVybiByZXR1cm5XaXRob3V0T1NSRW50cnkoKTsKLQotICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgb3NyRW50cnlEYXRhLmZ1bmN0aW9uSW5kZXgoKSwgIjpPTUcgT1NS
IGVudHJ5OiBnb3QgZW50cnkgY2FsbGVlICIsIFJhd1BvaW50ZXIoJm9zckVudHJ5Q2FsbGVlKSk7
Ci0KLSAgICAvLyAxLiBQbGFjZSByZXF1aXJlZCB2YWx1ZXMgaW4gc2NyYXRjaCBidWZmZXIuCi0g
ICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgb3NyRW50cnlEYXRhLnZhbHVlcygp
LnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBPU1JFbnRyeVZhbHVlJiB2YWx1ZSA9
IG9zckVudHJ5RGF0YS52YWx1ZXMoKVtpbmRleF07CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgdmFsdWVzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBPU1JF
bnRyeVZhbHVlJiB2YWx1ZSA9IHZhbHVlc1tpbmRleF07CiAgICAgICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9NRyBPU1IgZW50cnkgdmFsdWVzWyIsIGluZGV4LCAiXSAi
LCB2YWx1ZS50eXBlKCksICIgIiwgdmFsdWUpOwogICAgICAgICBpZiAodmFsdWUuaXNHUFIoKSkg
ewogICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKCkua2luZCgpKSB7CkBAIC0xNjQsMjEg
KzE1MSwyOCBAQCBzdGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJv
YmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgYwogICAgICAgICAgICAgICAgICpiaXR3
aXNlX2Nhc3Q8dWludDY0X3QqPihidWZmZXIgKyBpbmRleCkgPSAqYml0d2lzZV9jYXN0PHVpbnQ2
NF90Kj4oYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb250ZXh0LmZwKCkpICsgdmFsdWUub2Zmc2V0
RnJvbUZQKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKHZhbHVlLmlzU3RhY2tBcmd1bWVudCgpKSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKHZhbHVlLnR5cGUoKS5raW5kKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQjM6OkZsb2F0Ogot
ICAgICAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8ZmxvYXQqPihidWZmZXIgKyBpbmRleCkgPSAq
Yml0d2lzZV9jYXN0PGZsb2F0Kj4oYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb250ZXh0LnNwKCkp
ICsgdmFsdWUub2Zmc2V0RnJvbVNQKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBCMzo6RG91YmxlOgotICAgICAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8ZG91
YmxlKj4oYnVmZmVyICsgaW5kZXgpID0gKmJpdHdpc2VfY2FzdDxkb3VibGUqPihiaXR3aXNlX2Nh
c3Q8dWludDhfdCo+KGNvbnRleHQuc3AoKSkgKyB2YWx1ZS5vZmZzZXRGcm9tU1AoKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICpiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihidWZmZXIgKyBpbmRleCkgPSAqYml0d2lzZV9jYXN0
PHVpbnQ2NF90Kj4oYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb250ZXh0LnNwKCkpICsgdmFsdWUu
b2Zmc2V0RnJvbVNQKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQorfQorCitTVVBQUkVTU19BU0FOCitzdGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3Rh
bmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgY2FsbGVl
LCBPTUdGb3JPU1JFbnRyeUNhbGxlZSYgb3NyRW50cnlDYWxsZWUsIE9TUkVudHJ5RGF0YSYgb3Ny
RW50cnlEYXRhKQoreworICAgIGF1dG8gcmV0dXJuV2l0aG91dE9TUkVudHJ5ID0gWyZdIHsKKyAg
ICAgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSA9IDA7CisgICAgfTsKKwor
ICAgIFJFTEVBU0VfQVNTRVJUKG9zckVudHJ5Q2FsbGVlLm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUoKSA9PSBvc3JFbnRyeURhdGEudmFsdWVzKCkuc2l6ZSgpKTsKKworICAgIHVpbnQ2NF90KiBi
dWZmZXIgPSBpbnN0YW5jZS0+Y29udGV4dCgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShvc3JFbnRy
eUNhbGxlZS5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkpOworICAgIGlmICghYnVmZmVyKQor
ICAgICAgICByZXR1cm4gcmV0dXJuV2l0aG91dE9TUkVudHJ5KCk7CisKKyAgICBkYXRhTG9nTG5J
ZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIG9zckVudHJ5RGF0YS5mdW5jdGlvbkluZGV4KCksICI6
T01HIE9TUiBlbnRyeTogZ290IGVudHJ5IGNhbGxlZSAiLCBSYXdQb2ludGVyKCZvc3JFbnRyeUNh
bGxlZSkpOworCisgICAgLy8gMS4gUGxhY2UgcmVxdWlyZWQgdmFsdWVzIGluIHNjcmF0Y2ggYnVm
ZmVyLgorICAgIGxvYWRWYWx1ZXNJbnRvQnVmZmVyKGNvbnRleHQsIG9zckVudHJ5RGF0YS52YWx1
ZXMoKSwgYnVmZmVyKTsKIAogICAgIC8vIDIuIFJlc3RvcmUgY2FsbGVlIHNhdmVzLgogICAgIFJl
Z2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0
ZXJzKCk7CkBAIC02NTgsMTIgKzY1MiwxMiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uR3Jvd01lbW9yeSwgaW50MzJfdCwgKHZvaWQqIGNhbGxGcmFtZSwgSW5zdGFuYwogICAg
IHJldHVybiBncm93bi52YWx1ZSgpLnBhZ2VDb3VudCgpOwogfQogCi1KU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUZpbGwsIGJvb2wsIChJbnN0YW5jZSogaW5zdGFu
Y2UsIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHRhcmdldFZhbHVlLCB1aW50MzJfdCBj
b3VudCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUZpbGws
IHNpemVfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMy
X3QgdGFyZ2V0VmFsdWUsIHVpbnQzMl90IGNvdW50KSkKIHsKICAgICByZXR1cm4gaW5zdGFuY2Ut
Pm1lbW9yeSgpLT5maWxsKGRzdEFkZHJlc3MsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRhcmdldFZh
bHVlKSwgY291bnQpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bU1lbW9yeUNvcHksIGJvb2wsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IGRzdEFkZHJl
c3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGNvdW50KSkKK0pTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSwgc2l6ZV90LCAoSW5zdGFuY2UqIGlu
c3RhbmNlLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1aW50MzJf
dCBjb3VudCkpCiB7CiAgICAgcmV0dXJuIGluc3RhbmNlLT5tZW1vcnkoKS0+Y29weShkc3RBZGRy
ZXNzLCBzcmNBZGRyZXNzLCBjb3VudCk7CiB9CkBAIC03MTEsMTIgKzcwNSwxMiBAQCBzdGF0aWMg
Ym9vbCBzZXRXYXNtVGFibGVFbGVtZW50KEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFi
bGVJbmRleCwgdWludDMyXwogICAgIHJldHVybiB0cnVlOwogfQogCi1KU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxlbWVudCwgYm9vbCwgKEluc3RhbmNlKiBp
bnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3Qgc2lnbmVkSW5kZXgsIEVuY29k
ZWRKU1ZhbHVlIGVuY1ZhbHVlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25T
ZXRXYXNtVGFibGVFbGVtZW50LCBzaXplX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVk
IHRhYmxlSW5kZXgsIHVpbnQzMl90IHNpZ25lZEluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNWYWx1
ZSkpCiB7CiAgICAgcmV0dXJuIHNldFdhc21UYWJsZUVsZW1lbnQoaW5zdGFuY2UsIHRhYmxlSW5k
ZXgsIHNpZ25lZEluZGV4LCBlbmNWYWx1ZSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtVGFibGVJbml0LCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNp
Z25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IGRzdE9mZnNl
dCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKQorSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUluaXQsIHNpemVfdCwgKEluc3RhbmNlKiBpbnN0
YW5jZSwgdW5zaWduZWQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJf
dCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY09mZnNldCwgdWludDMyX3QgbGVuZ3RoKSkKIHsKICAg
ICBBU1NFUlQoZWxlbWVudEluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0
aW9uKCkuZWxlbWVudENvdW50KCkpOwogICAgIEFTU0VSVCh0YWJsZUluZGV4IDwgaW5zdGFuY2Ut
Pm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgpKTsKQEAgLTc2MSw3ICs3
NTUsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlR3Jvdywg
aW50MzJfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdQogICAgIHJldHVybiBvbGRTaXplOwogfQog
Ci1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwgYm9vbCwg
KEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3Qgb2Zmc2V0
LCBFbmNvZGVkSlNWYWx1ZSBmaWxsLCB1aW50MzJfdCBjb3VudCkpCitKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwgc2l6ZV90LCAoSW5zdGFuY2UqIGluc3Rh
bmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVl
IGZpbGwsIHVpbnQzMl90IGNvdW50KSkKIHsKICAgICBBU1NFUlQodGFibGVJbmRleCA8IGluc3Rh
bmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSk7CiAKQEAgLTc3
Nyw3ICs3NzEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxl
RmlsbCwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaQogICAgIHJldHVybiB0cnVlOwog
fQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlQ29weSwgYm9v
bCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZHN0VGFibGVJbmRleCwgdW5zaWduZWQg
c3JjVGFibGVJbmRleCwgaW50MzJfdCBkc3RPZmZzZXQsIGludDMyX3Qgc3JjT2Zmc2V0LCBpbnQz
Ml90IGxlbmd0aCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxl
Q29weSwgc2l6ZV90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBkc3RUYWJsZUluZGV4
LCB1bnNpZ25lZCBzcmNUYWJsZUluZGV4LCBpbnQzMl90IGRzdE9mZnNldCwgaW50MzJfdCBzcmNP
ZmZzZXQsIGludDMyX3QgbGVuZ3RoKSkKIHsKICAgICBBU1NFUlQoZHN0VGFibGVJbmRleCA8IGlu
c3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSk7CiAgICAg
QVNTRVJUKHNyY1RhYmxlSW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRp
b24oKS50YWJsZUNvdW50KCkpOwpAQCAtOTA0LDcgKzg5OCw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNOb3RpZnksIGludDMyX3QsIChJbnN0YW5jZSog
aW5zdGFuCiAgICAgcmV0dXJuIFBhcmtpbmdMb3Q6OnVucGFya0NvdW50KHBvaW50ZXIsIGNvdW50
KTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlJbml0
LCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBkYXRhU2VnbWVudEluZGV4LCB1
aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1aW50MzJfdCBsZW5ndGgp
KQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlJbml0LCBzaXpl
X3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgsIHVpbnQz
Ml90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGxlbmd0aCkpCiB7
CiAgICAgQVNTRVJUKGRhdGFTZWdtZW50SW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxl
SW5mb3JtYXRpb24oKS5kYXRhU2VnbWVudHNDb3VudCgpKTsKICAgICByZXR1cm4gaW5zdGFuY2Ut
Pm1lbW9yeUluaXQoZHN0QWRkcmVzcywgc3JjQWRkcmVzcywgbGVuZ3RoLCBkYXRhU2VnbWVudElu
ZGV4KTsKQEAgLTkxNiw2ICs5MTAsNjUgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbldhc21EYXRhRHJvcCwgdm9pZCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWcKICAgICBp
bnN0YW5jZS0+ZGF0YURyb3AoZGF0YVNlZ21lbnRJbmRleCk7CiB9CiAKK0pTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtVGhyb3csIHZvaWQqLCAoSW5zdGFuY2UqIGluc3RhbmNl
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIEVuY29kZWRK
U1ZhbHVlKiBhcmd1bWVudHMpKQoreworICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFtZShj
YWxsRnJhbWUpOworCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3RhbmNlID0gaW5z
dGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcgPSBpbnN0YW5jZS0+dGFn
KGV4Y2VwdGlvbkluZGV4KTsKKworICAgIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiB2YWx1ZXModGFn
LnBhcmFtZXRlckNvdW50KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWcucGFy
YW1ldGVyQ291bnQoKTsgKytpKQorICAgICAgICB2YWx1ZXNbaV0gPSBhcmd1bWVudHNbaV07CisK
KyAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBleGNlcHRpb24gPSBKU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlFeGNlcHRpb25TdHJ1
Y3R1cmUoKSwgdGFnLCBXVEZNb3ZlKHZhbHVlcykpOworICAgIHRocm93RXhjZXB0aW9uKGdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgZXhjZXB0aW9uKTsKKworICAgIGdlbmVyaWNVbndpbmQodm0s
IGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKCEhdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgIEFT
U0VSVCghIXZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKKyAgICAvLyBGSVhNRTogV2UgY291
bGQgbWFrZSB0aGlzIGJldHRlcjoKKyAgICAvLyBUaGlzIGlzIGEgdG90YWwgaGFjaywgYnV0IHRo
ZSBsbGludCAoYm90aCBvcF9jYXRjaCBhbmQgbGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlv
bikKKyAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVlIGZpZWxkIHRvIGxvYWQgdGhl
IFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJlCisgICAgLy8gdGhpcyBzaW5j
ZSBpdCBpcyBjb21waWxlZCB3aXRoIGEgY29uc3RhbnQgVk0gcG9pbnRlci4pIFdlIGNvdWxkIG1h
a2UgdGhlIGNhbGxpbmcgY29udmVudGlvbgorICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0IGxv
YWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1w
aW5nCisgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2Ug
Y291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCisgICAgdm0uY2FsbGVlRm9yV2FzbUNhdGNo
ID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKKyAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihjYWxs
RnJhbWUpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KGpzSW5zdGFuY2UtPm1vZHVsZSgpKTsKKyAgICByZXR1cm4gdm0udGFy
Z2V0TWFjaGluZVBDRm9yVGhyb3c7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25XYXNtUmV0aHJvdywgdm9pZCosIChJbnN0YW5jZSogaW5zdGFuY2UsIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSB0aHJvd25WYWx1ZSkpCit7CisgICAgaW5zdGFuY2Ut
PnN0b3JlVG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigp
OworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxP
YmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICB0aHJvd0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIEpTVmFsdWU6OmRlY29kZSh0aHJvd25WYWx1ZSkpOwor
CisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoISF2bS5jYWxs
RnJhbWVGb3JDYXRjaCk7CisgICAgQVNTRVJUKCEhdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cp
OworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgYmV0dGVyOgorICAgIC8vIFRoaXMg
aXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBsbGludF9o
YW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uKQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBj
YWxsZWUgZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJl
cXVpcmUKKyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBW
TSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8g
Zm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJh
bWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRs
ZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAg
ICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJhbWUtPmNhbGxlZSgpOworICAgIGJpdHdp
c2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oanNJbnN0YW5jZS0+bW9kdWxl
KCkpOworICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKK30KKwogSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uLCB2b2lkKiwgKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUsIEluc3RhbmNlKiB3
YXNtSW5zdGFuY2UpKQogewogICAgIHdhc21JbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2Fs
bEZyYW1lKTsKQEAgLTkzMiw3ICs5ODUsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uV2FzbVRvSlNFeGNlcHRpb24sIHZvaWQqLCAoQ2FsbEZyYW1lKiBjYWxsRnJhbQogICAg
ICAgICBpZiAodHlwZSA9PSBFeGNlcHRpb25UeXBlOjpTdGFja092ZXJmbG93KQogICAgICAgICAg
ICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yKGdsb2JhbE9iamVjdCwgdm0sIFdhc206OmVycm9yTWVzc2FnZUZvckV4Y2VwdGlvblR5cGUo
dHlwZSkpOworICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yKGdsb2JhbE9iamVjdCwgdm0sIHR5cGUpOwogICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGVycm9yKTsKICAgICB9CiAKQEAgLTk0NiwxMCArOTk5LDM0
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbiwg
dm9pZCosIChDYWxsRnJhbWUqIGNhbGxGcmFtCiAgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3Qg
bG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1
bXBpbmcKICAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3
ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0
Y2ggPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwogICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNh
bGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVsZSgpKTsKICAgICByZXR1cm4gdm0udGFy
Z2V0TWFjaGluZVBDRm9yVGhyb3c7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCBQb2ludGVyUGFp
ciwgKEluc3RhbmNlKiBpbnN0YW5jZSkpCit7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBq
c0luc3RhbmNlID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0
KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgUkVMRUFTRV9BU1NFUlQoISF0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKTsKKworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gdGhyb3dT
Y29wZS5leGNlcHRpb24oKTsKKyAgICBKU1ZhbHVlIHRocm93blZhbHVlID0gZXhjZXB0aW9uLT52
YWx1ZSgpOworCisgICAgLy8gV2Ugd2FudCB0byBjbGVhciB0aGUgZXhjZXB0aW9uIGhlcmUgcmF0
aGVyIHRoYW4gaW4gdGhlIGNhdGNoIHByb2xvZ3VlCisgICAgLy8gSklUIGNvZGUgYmVjYXVzZSBj
bGVhcmluZyBpdCBhbHNvIGVudGFpbHMgY2xlYXJpbmcgYSBiaXQgaW4gYW4gQXRvbWljCisgICAg
Ly8gYml0IGZpZWxkIGluIFZNVHJhcHMuCisgICAgdGhyb3dTY29wZS5jbGVhckV4Y2VwdGlvbigp
OworCisgICAgdm9pZCogcGF5bG9hZCA9IG51bGxwdHI7CisgICAgaWYgKEpTV2ViQXNzZW1ibHlF
eGNlcHRpb24qIHdhc21FeGNlcHRpb24gPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlFeGNl
cHRpb24qPih2bSwgdGhyb3duVmFsdWUpKQorICAgICAgICBwYXlsb2FkID0gYml0d2lzZV9jYXN0
PHZvaWQqPih3YXNtRXhjZXB0aW9uLT5wYXlsb2FkKCkuZGF0YSgpKTsKKyAgICByZXR1cm4gUG9p
bnRlclBhaXIgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFsdWU6OmVuY29kZSh0aHJvd25WYWx1
ZSkpLCBwYXlsb2FkIH07Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKIElHTk9S
RV9XQVJOSU5HU19FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9u
cy5oCmluZGV4IGVlYmU1Yjc2NGJhODk3OGM5NDQyZWI1MTgyODEwODcyYzY3MjRjYTQuLjVlYzdh
NTk0N2NjNzM4YzNiMmI5YmIyNWQ3ZTVhNjA4ZjFiMjZlZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJTbG93UGF0aFJldHVyblR5cGUuaCIKICNpbmNsdWRl
ICJXYXNtRXhjZXB0aW9uVHlwZS5oIgorI2luY2x1ZGUgIldhc21PU1JFbnRyeURhdGEuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ2LDYgKzQ3LDggQEAgbmFtZXNwYWNlIFdhc20gewogY2xh
c3MgSW5zdGFuY2U7CiBjbGFzcyBTaWduYXR1cmU7CiAKK3ZvaWQgbG9hZFZhbHVlc0ludG9CdWZm
ZXIoUHJvYmU6OkNvbnRleHQmLCBjb25zdCBTdGFja01hcCYsIHVpbnQ2NF90KiBidWZmZXIpOwor
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtVHJpZ2dlck9TUkVudHJ5Tm93LCB2b2lkLCAoUHJvYmU6OkNvbnRleHQm
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UcmlnZ2VyVGllclVw
Tm93LCB2b2lkLCAoSW5zdGFuY2UqLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KSk7CkBAIC02Niwy
NiArNjksMzQgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtV3JpdGVC
YXJyaWVyU2xvd1BhdGgsIHZvaWQsIChKU0NlbGwqLCBWTSoKIEpTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uUG9wY291bnQzMiwgdWludDMyX3QsIChpbnQzMl90KSk7CiBKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblBvcGNvdW50NjQsIHVpbnQ2NF90LCAoaW50NjRf
dCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Hcm93TWVtb3J5LCBpbnQz
Ml90LCAodm9pZCosIEluc3RhbmNlKiwgaW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25XYXNtTWVtb3J5RmlsbCwgYm9vbCwgKEluc3RhbmNlKiwgdWludDMyX3Qg
ZHN0QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFsdWUsIHVpbnQzMl90IGNvdW50KSk7Ci1KU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlDb3B5LCBib29sLCAoSW5z
dGFuY2UqLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1aW50MzJf
dCBjb3VudCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5
RmlsbCwgc2l6ZV90LCAoSW5zdGFuY2UqLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCB0
YXJnZXRWYWx1ZSwgdWludDMyX3QgY291bnQpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uV2FzbU1lbW9yeUNvcHksIHNpemVfdCwgKEluc3RhbmNlKiwgdWludDMyX3QgZHN0
QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgY291bnQpKTsKIAogSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXYXNtVGFibGVFbGVtZW50LCBFbmNvZGVk
SlNWYWx1ZSwgKEluc3RhbmNlKiwgdW5zaWduZWQsIGludDMyX3QpKTsKLUpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxlbWVudCwgYm9vbCwgKEluc3RhbmNl
KiwgdW5zaWduZWQsIHVpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSBlbmNWYWx1ZSkpOworSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25TZXRXYXNtVGFibGVFbGVtZW50LCBzaXplX3Qs
IChJbnN0YW5jZSosIHVuc2lnbmVkLCB1aW50MzJfdCwgRW5jb2RlZEpTVmFsdWUgZW5jVmFsdWUp
KTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVJlZkZ1bmMsIEVuY29k
ZWRKU1ZhbHVlLCAoSW5zdGFuY2UqLCB1aW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25XYXNtVGFibGVJbml0LCBib29sLCAoSW5zdGFuY2UqLCB1bnNpZ25lZCBl
bGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IGRzdE9mZnNldCwgdWlu
dDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlSW5pdCwgc2l6ZV90LCAoSW5zdGFuY2UqLCB1bnNpZ25l
ZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IGRzdE9mZnNldCwg
dWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKTsKIEpTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uV2FzbUVsZW1Ecm9wLCB2b2lkLCAoSW5zdGFuY2UqLCB1bnNpZ25l
ZCBlbGVtZW50SW5kZXgpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bVRhYmxlR3JvdywgaW50MzJfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQsIEVuY29kZWRKU1ZhbHVl
IGZpbGwsIHVpbnQzMl90IGRlbHRhKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbldhc21UYWJsZUZpbGwsIGJvb2wsIChJbnN0YW5jZSosIHVuc2lnbmVkLCB1aW50MzJfdCBv
ZmZzZXQsIEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50KSk7Ci1KU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUNvcHksIGJvb2wsIChJbnN0YW5jZSos
IHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsIGludDMyX3Qg
ZHN0T2Zmc2V0LCBpbnQzMl90IHNyY09mZnNldCwgaW50MzJfdCBsZW5ndGgpKTsKK0pTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwgc2l6ZV90LCAoSW5zdGFu
Y2UqLCB1bnNpZ25lZCwgdWludDMyX3Qgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSBmaWxsLCB1aW50
MzJfdCBjb3VudCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFi
bGVDb3B5LCBzaXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2ln
bmVkIHNyY1RhYmxlSW5kZXgsIGludDMyX3QgZHN0T2Zmc2V0LCBpbnQzMl90IHNyY09mZnNldCwg
aW50MzJfdCBsZW5ndGgpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
V2FzbVRhYmxlU2l6ZSwgaW50MzJfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQpKTsKIAogSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNXYWl0MzIsIGludDMyX3Qs
IChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIG9mZnNldCwgdWlu
dDMyX3QgdmFsdWUsIGludDY0X3QgdGltZW91dCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25NZW1vcnlBdG9taWNXYWl0NjQsIGludDMyX3QsIChJbnN0YW5jZSogaW5zdGFu
Y2UsIHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIG9mZnNldCwgdWludDY0X3QgdmFsdWUsIGludDY0
X3QgdGltZW91dCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlB
dG9taWNOb3RpZnksIGludDMyX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkLCB1bnNpZ25lZCwgaW50
MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5SW5p
dCwgYm9vbCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCwgdWludDMyX3Qg
ZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgbGVuZ3RoKSk7CitKU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlJbml0LCBzaXplX3QsIChJ
bnN0YW5jZSosIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgsIHVpbnQzMl90IGRzdEFkZHJlc3Ms
IHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGxlbmd0aCkpOwogSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtRGF0YURyb3AsIHZvaWQsIChJbnN0YW5jZSosIHVuc2ln
bmVkIGRhdGFTZWdtZW50SW5kZXgpKTsKIAorSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25XYXNtVGhyb3csIHZvaWQqLCAoSW5zdGFuY2UqLCBDYWxsRnJhbWUqLCB1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgRW5jb2RlZEpTVmFsdWUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbldhc21SZXRocm93LCB2b2lkKiwgKEluc3RhbmNlKiwgQ2FsbEZyYW1lKiwg
RW5jb2RlZEpTVmFsdWUgdGhyb3duVmFsdWUpKTsKKwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbiwgdm9pZCosIChDYWxsRnJhbWUqLCBXYXNtOjpF
eGNlcHRpb25UeXBlLCBJbnN0YW5jZSopKTsKK3N0cnVjdCBQb2ludGVyUGFpciB7CisgICAgdm9p
ZCogZmlyc3Q7CisgICAgdm9pZCogc2Vjb25kOworfTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uV2FzbVJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgUG9p
bnRlclBhaXIsIChJbnN0YW5jZSopKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwCmlu
ZGV4IDBmOGNjYjdlMmMzYjY0MTE2MzVjZDlmNWIwNDhiMzU2MzIwNWZhNzQuLmNmZGFmZmRkN2E0
MmNjODFlNWJhM2E2MWU0YmFlOGVmNWVjYmQzYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKQEAgLTkxLDYgKzkxLDggQEAgYXV0byBT
ZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENv
dW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAi
IGdsb2JhbHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUg
RklYTUVzIGJlbG93LgogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0cy50
cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXIt
YWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCiAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9y
ICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1F
IHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKyAgICBp
ZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCkpCisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlS
ZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9y
eSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0IGV4Y2VwdGlvbiBzaWduYXR1cmVzIik7IC8v
IEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4K
IAogICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1w
b3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7CiAgICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsK
QEAgLTE0Miw2ICsxNDQsMjEgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCgpIC0+
IFBhcnRpYWxSZXN1bHQKICAgICAgICAgICAgIG1faW5mby0+Z2xvYmFscy51bmNoZWNrZWRBcHBl
bmQoV1RGTW92ZShnbG9iYWwpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAg
ICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsKKyAgICAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBl
eGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgICAgICB1aW50OF90IHRhZ1R5
cGU7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KHRhZ1R5cGUp
LCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCBleGNlcHRpb24ncyB0YWcg
dHlwZSIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0YWdUeXBlLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQgZXhjZXB0aW9uIGhhcyB0YWcgdHlwZSAiLCB0YWdUeXBlLCAiIGJ1
dCB0aGUgb25seSBzdXBwb3J0ZWQgdGFnIHR5cGUgaXMgMCIpOworCisgICAgICAgICAgICB1aW50
MzJfdCBleGNlcHRpb25TaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4KSwgImNhbid0IGdl
dCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBleGNlcHRpb24gc2lnbmF0dXJlIGluIG1v
ZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7Cisg
ICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4ID49
IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBleGNlcHRpb24gc2lnbmF0
dXJlIGZvciAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQsICIsIGV4Y2VwdGlvblNpZ25hdHVy
ZUluZGV4LCAiIGlzIG91dCBvZiByYW5nZSBvZiAiLCBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnNp
emUoKSwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3Ry
aW5nLCAiJyIpOworICAgICAgICAgICAga2luZEluZGV4ID0gbV9pbmZvLT5pbXBvcnRFeGNlcHRp
b25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRTaWdu
YXR1cmVzW2V4Y2VwdGlvblNpZ25hdHVyZUluZGV4XSk7CisgICAgICAgICAgICBtX2luZm8tPmlt
cG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUlu
ZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAg
ICBtX2luZm8tPmltcG9ydHMudW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZShtb2R1bGVTdHJpbmcp
LCBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4IH0pOwpAQCAtMzU4LDYgKzM3
NSwxMyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRXhwb3J0KCkgLT4gUGFydGlhbFJlc3Vs
dAogICAgICAgICAgICAgICAgIGdsb2JhbC5iaW5kaW5nTW9kZSA9IEdsb2JhbEluZm9ybWF0aW9u
OjpCaW5kaW5nTW9kZTo6UG9ydGFibGU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQor
ICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6RXhjZXB0aW9uOiB7CisgICAgICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndh
c20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5leGNlcHRpb25JbmRleFNwYWNlU2l6ZSgp
LCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGludmFsaWQgZXhjZXB0aW9uIG51bWJlciAi
LCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZXhjZXB0aW9uIGluZGV4IHNwYWNlICIsIG1f
aW5mby0+ZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxkU3RyaW5n
LCAiJyIpOworICAgICAgICAgICAgbV9pbmZvLT5hZGREZWNsYXJlZEV4Y2VwdGlvbihraW5kSW5k
ZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAg
IG1faW5mby0+ZXhwb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwg
a2luZCwga2luZEluZGV4IH0pOwpAQCAtODE3LDYgKzg0MSwyOSBAQCBhdXRvIFNlY3Rpb25QYXJz
ZXI6OnBhcnNlRGF0YUNvdW50KCkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9
CiAKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VFeGNlcHRpb24oKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNl
cHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICB1aW50
MzJfdCBleGNlcHRpb25Db3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMihleGNlcHRpb25Db3VudCksICJjYW4ndCBnZXQgRXhjZXB0aW9uIHNlY3Rpb24ncyBjb3Vu
dCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhjZXB0aW9uQ291bnQgPiBtYXhFeGNlcHRp
b25zLCAiRXhwb3J0IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGV4Y2VwdGlvbkNvdW50
LCAiIG1heGltdW0gIiwgbWF4RXhjZXB0aW9ucyk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
bV9pbmZvLT5pbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGV4Y2VwdGlvbkNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIs
IGV4Y2VwdGlvbkNvdW50LCAiIGV4Y2VwdGlvbnMiKTsKKworICAgIGZvciAodWludDMyX3QgZXhj
ZXB0aW9uTnVtYmVyID0gMDsgZXhjZXB0aW9uTnVtYmVyIDwgZXhjZXB0aW9uQ291bnQ7ICsrZXhj
ZXB0aW9uTnVtYmVyKSB7CisgICAgICAgIHVpbnQ4X3QgdGFnVHlwZTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VVSW50OCh0YWdUeXBlKSwgImNhbid0IGdldCAiLCBleGNlcHRp
b25OdW1iZXIsICJ0aCBFeGNlcHRpb24gdGFnIHR5cGUiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRih0YWdUeXBlLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24gaGFzIHRhZyB0
eXBlICIsIHRhZ1R5cGUsICIgYnV0IHRoZSBvbmx5IHN1cHBvcnRlZCB0YWcgdHlwZSBpcyAwIik7
CisKKyAgICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIodHlwZU51bWJlciksICJjYW4ndCBnZXQgIiwgZXhjZXB0aW9u
TnVtYmVyLCAidGggRXhjZXB0aW9uJ3MgdHlwZSBudW1iZXIiKTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCBl
eGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24gdHlwZSBudW1iZXIgaXMgaW52YWxpZCAiLCB0
eXBlTnVtYmVyKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dXNlZFNpZ25hdHVyZXNbdHlwZU51bWJlcl0p
OworICAgICAgICBtX2luZm8tPmludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNo
ZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9
CiBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKCkgLT4gUGFydGlhbFJlc3VsdAogewog
ICAgIEN1c3RvbVNlY3Rpb24gc2VjdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNlY3Rpb25zLmgKaW5kZXggZjM2OWU3Yjg2Y2FmYTkzYWQzZjgzYWQ2MGNhMDg3YzhmNTg4MGVj
YS4uYmVmMjA3MDFmNDBmZTQwYjRhMjhhMGFkY2ZjNDdmNmJmMGQ1YmZmMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKQEAgLTQ1LDcgKzQ1LDggQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKICAgICBtYWNybyhFbGVtZW50LCAgICA5LCAiRWxl
bWVudHMgc2VjdGlvbiIpIFwKICAgICBtYWNybyhDb2RlLCAgICAgIDEwLCAiRnVuY3Rpb24gYm9k
aWVzIChjb2RlKSIpIFwKICAgICBtYWNybyhEYXRhLCAgICAgIDExLCAiRGF0YSBzZWdtZW50cyIp
IFwKLSAgICBtYWNybyhEYXRhQ291bnQsIDEyLCAiRGF0YSBjb3VudCIpCisgICAgbWFjcm8oRGF0
YUNvdW50LCAxMiwgIkRhdGEgY291bnQiKSBcCisgICAgbWFjcm8oRXhjZXB0aW9uLCAxMywgIkV4
Y2VwdGlvbiBkZWNsYXJhdGlvbnMiKSBcCiAKIGVudW0gY2xhc3MgU2VjdGlvbiA6IHVpbnQ4X3Qg
ewogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgQmVnaW4gaXMgbGVzcyB0aGFuIGV2ZXJ5IG90
aGVyIHNlY3Rpb24gbnVtYmVyIGFuZCB0aGF0IEN1c3RvbSBpcyBncmVhdGVyLgpAQCAtOTAsNiAr
OTEsMTAgQEAgaW5saW5lIGJvb2wgdmFsaWRhdGVPcmRlcihTZWN0aW9uIHByZXZpb3VzS25vd24s
IFNlY3Rpb24gbmV4dCkKICAgICBBU1NFUlQoaXNLbm93blNlY3Rpb24ocHJldmlvdXNLbm93bikg
fHwgcHJldmlvdXNLbm93biA9PSBTZWN0aW9uOjpCZWdpbik7CiAgICAgaWYgKHByZXZpb3VzS25v
d24gPT0gU2VjdGlvbjo6RGF0YUNvdW50ICYmIG5leHQgPT0gU2VjdGlvbjo6Q29kZSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHByZXZpb3VzS25vd24gPT0gU2VjdGlvbjo6RXhjZXB0
aW9uKQorICAgICAgICByZXR1cm4gbmV4dCA+PSBTZWN0aW9uOjpHbG9iYWw7CisgICAgaWYgKG5l
eHQgPT0gU2VjdGlvbjo6RXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gcHJldmlvdXNLbm93biA8
PSBTZWN0aW9uOjpNZW1vcnk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHByZXZp
b3VzS25vd24pIDwgc3RhdGljX2Nhc3Q8dWludDhfdD4obmV4dCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKaW5kZXggNzFhYWIzZGY3NTcyMmQ0
MDhjNTE4YzEzZjUzODVjM2FmOWE0ODAwNi4uZjlhNTYxYjg1MGZjNWMxOTM5ZDBlZjU5ZThhOWZk
MmI2MDU5NzhmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNp
Z25hdHVyZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVy
ZS5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgUmVmUHRyPFNpZ25hdHVyZT4gU2lnbmF0dXJlOjp0cnlD
cmVhdGUoU2lnbmF0dXJlQXJnQ291bnQgcmV0dXJuQ291bnQsIFNpZ25hdHVyZUEKIAogU2lnbmF0
dXJlSW5mb3JtYXRpb246OlNpZ25hdHVyZUluZm9ybWF0aW9uKCkKIHsKLSNkZWZpbmUgTUFLRV9U
SFVOS19TSUdOQVRVUkUodHlwZSwgZW5jLCBzdHIsIHZhbCkgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyNkZWZpbmUgTUFLRV9USFVOS19TSUdOQVRVUkUodHlwZSwgZW5jLCBzdHIsIHZhbCwg
XykgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg
aWYgKFR5cGVLaW5kOjp0eXBlICE9IFR5cGVLaW5kOjpWb2lkKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IHNpZyA9IFNpZ25hdHVy
ZTo6dHJ5Q3JlYXRlKDEsIDApOyAgICAgICAgICAgIFwKQEAgLTE2NSw2ICsxNjUsMTAgQEAgc3Ry
dWN0IFBhcmFtZXRlclR5cGVzIHsKIAogUmVmUHRyPFNpZ25hdHVyZT4gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OnNpZ25hdHVyZUZvcihjb25zdCBWZWN0b3I8VHlwZSwgMT4mIHJlc3VsdHMsIGNvbnN0
IFZlY3RvcjxUeXBlPiYgYXJncykKIHsKKyAgICBpZiBjb25zdGV4cHIgKEFTU0VSVF9FTkFCTEVE
KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0cy5jb250YWlucyhXYXNtOjpUeXBlczo6Vm9pZCkp
OworICAgICAgICBBU1NFUlQoIWFyZ3MuY29udGFpbnMoV2FzbTo6VHlwZXM6OlZvaWQpKTsKKyAg
ICB9CiAgICAgU2lnbmF0dXJlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5nbGV0b24oKTsKICAgICBM
b2NrZXIgbG9ja2VyIHsgaW5mby5tX2xvY2sgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtU2xvd1BhdGhzLmNwcAppbmRleCBkOWZhZjVkNTlkOTlmNWU5MDRjM2E3YjI0MDA3
ZDA5MWZkMWQ5YzE3Li5hZDUxMzVlN2FkNjU3OGMzOTc2MWJkN2QzYjU2OGEwZmQyYmY2MDYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtMjks
NiArMjksOCBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rl
U3RydWN0cy5oIgorI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAj
aW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiV2FzbUJCUVBsYW4uaCIKQEAgLTU4Niw2
ICs1ODgsMTExIEBAIFdBU01fU0xPV19QQVRIX0RFQ0wobWVtb3J5X2F0b21pY19ub3RpZnkpCiAg
ICAgV0FTTV9SRVRVUk4ocmVzdWx0KTsKIH0KIAorV0FTTV9TTE9XX1BBVEhfREVDTCh0aHJvdykK
K3sKKyAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKworICAgIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGluc3RhbmNlLT5vd25lcjxKU1dlYkFz
c2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpz
SW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IGF1dG8gaW5zdHJ1Y3Rpb24gPSBwYy0+YXM8V2FzbVRocm93LCBXYXNtT3Bjb2RlVHJhaXRzPigp
OworICAgIGNvbnN0IFdhc206OlRhZyYgdGFnID0gaW5zdGFuY2UtPnRhZyhpbnN0cnVjdGlvbi5t
X2V4Y2VwdGlvbkluZGV4KTsKKworICAgIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiB2YWx1ZXModGFn
LnBhcmFtZXRlckNvdW50KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWcucGFy
YW1ldGVyQ291bnQoKTsgKytpKQorICAgICAgICB2YWx1ZXNbaV0gPSBSRUFEKChpbnN0cnVjdGlv
bi5tX2ZpcnN0VmFsdWUgLSBpKSkuZW5jb2RlZEpTVmFsdWUoKTsKKworICAgIEpTV2ViQXNzZW1i
bHlFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUV4Y2VwdGlvblN0cnVjdHVyZSgpLCB0YWcsIFdU
Rk1vdmUodmFsdWVzKSk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBleGNlcHRpb24pOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1lKTsKKyAg
ICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNTRVJUKCEhdm0udGFyZ2V0
TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgYmV0
dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9w
X2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uKQorICAgIC8vIHJlcXVp
cmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUgYmFzZWxp
bmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVk
IHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBj
b252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JD
YXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAvLyB0byB0
aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhp
cyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJhbWUtPmNh
bGxlZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nh
c3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4o
anNJbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIFdBU01fUkVUVVJOX1RXTyh2bS50YXJnZXRNYWNo
aW5lUENGb3JUaHJvdywgbnVsbHB0cik7Cit9CisKK1dBU01fU0xPV19QQVRIX0RFQ0wocmV0aHJv
dykKK3sKKyAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKworICAg
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGluc3RhbmNlLT5vd25lcjxKU1dl
YkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwYy0+YXM8V2FzbVJldGhyb3csIFdhc21PcGNvZGVUcmFp
dHM+KCk7CisgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBSRUFEKGluc3RydWN0aW9uLm1fZXhjZXB0
aW9uKS5qc1ZhbHVlKCk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBleGNlcHRpb24pOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1lKTsKKyAg
ICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNTRVJUKCEhdm0udGFyZ2V0
TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgYmV0
dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9w
X2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uKQorICAgIC8vIHJlcXVp
cmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUgYmFzZWxp
bmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVk
IHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBj
b252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JD
YXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAvLyB0byB0
aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhp
cyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJhbWUtPmNh
bGxlZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nh
c3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4o
anNJbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIFdBU01fUkVUVVJOX1RXTyh2bS50YXJnZXRNYWNo
aW5lUENGb3JUaHJvdywgbnVsbHB0cik7Cit9CisKK1dBU01fU0xPV19QQVRIX0RFQ0wocmV0cmll
dmVfYW5kX2NsZWFyX2V4Y2VwdGlvbikKK3sKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8
SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBSRUxFQVNFX0FTU0VSVCghIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworCisgICAg
RXhjZXB0aW9uKiBleGNlcHRpb24gPSB0aHJvd1Njb3BlLmV4Y2VwdGlvbigpOworICAgIEpTVmFs
dWUgdGhyb3duVmFsdWUgPSBleGNlcHRpb24tPnZhbHVlKCk7CisgICAgdm9pZCogcGF5bG9hZCA9
IG51bGxwdHI7CisKKyAgICBjb25zdCBhdXRvJiBoYW5kbGVDYXRjaEFsbCA9IFsmXShjb25zdCBh
dXRvJiBpbnN0cnVjdGlvbikgeworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoaW5zdHJ1
Y3Rpb24ubV9leGNlcHRpb24pID0gdGhyb3duVmFsdWU7CisgICAgfTsKKworICAgIGNvbnN0IGF1
dG8mIGhhbmRsZUNhdGNoID0gWyZdKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uKSB7CisgICAgICAg
IEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIHdhc21FeGNlcHRpb24gPSBqc0R5bmFtaWNDYXN0PEpT
V2ViQXNzZW1ibHlFeGNlcHRpb24qPih2bSwgdGhyb3duVmFsdWUpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVCghIXdhc21FeGNlcHRpb24pOworICAgICAgICBwYXlsb2FkID0gYml0d2lzZV9jYXN0
PHZvaWQqPih3YXNtRXhjZXB0aW9uLT5wYXlsb2FkKCkuZGF0YSgpKTsKKyAgICAgICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGluc3RydWN0aW9uLm1fZXhjZXB0aW9uKSA9IHRocm93blZhbHVlOwor
ICAgIH07CisKKyAgICBpZiAocGMtPmlzPFdhc21DYXRjaCwgV2FzbU9wY29kZVRyYWl0cz4oKSkK
KyAgICAgICAgaGFuZGxlQ2F0Y2gocGMtPmFzPFdhc21DYXRjaCwgV2FzbU9wY29kZVRyYWl0cz4o
KSk7CisgICAgZWxzZSBpZiAocGMtPmlzPFdhc21DYXRjaEFsbCwgV2FzbU9wY29kZVRyYWl0cz4o
KSkKKyAgICAgICAgaGFuZGxlQ2F0Y2hBbGwocGMtPmFzPFdhc21DYXRjaEFsbCwgV2FzbU9wY29k
ZVRyYWl0cz4oKSk7CisgICAgZWxzZSBpZiAocGMtPmlzPFdhc21DYXRjaE5vVGxzLCBXYXNtT3Bj
b2RlVHJhaXRzPigpKQorICAgICAgICBoYW5kbGVDYXRjaChwYy0+YXM8V2FzbUNhdGNoTm9UbHMs
IFdhc21PcGNvZGVUcmFpdHM+KCkpOworICAgIGVsc2UgaWYgKHBjLT5pczxXYXNtQ2F0Y2hBbGxO
b1RscywgV2FzbU9wY29kZVRyYWl0cz4oKSkKKyAgICAgICAgaGFuZGxlQ2F0Y2hBbGwocGMtPmFz
PFdhc21DYXRjaEFsbE5vVGxzLCBXYXNtT3Bjb2RlVHJhaXRzPigpKTsKKyAgICBlbHNlCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAvLyBXZSB3YW50IHRvIGNs
ZWFyIHRoZSBleGNlcHRpb24gaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgY2F0Y2ggcHJvbG9ndWUK
KyAgICAvLyBKSVQgY29kZSBiZWNhdXNlIGNsZWFyaW5nIGl0IGFsc28gZW50YWlscyBjbGVhcmlu
ZyBhIGJpdCBpbiBhbiBBdG9taWMKKyAgICAvLyBiaXQgZmllbGQgaW4gVk1UcmFwcy4KKyAgICB0
aHJvd1Njb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgV0FTTV9SRVRVUk5fVFdPKHBjLCBwYXls
b2FkKTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX3dhc21f
dGhyb3dfZXhjZXB0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiog
cGMsIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6RXhjZXB0aW9uVHlwZSBleGNlcHRp
b25UeXBlKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtU2xvd1BhdGhzLmgKaW5kZXggNzc2MjExODMzOGE3YjcwNjk2OWIyNWI1MmNlMTZl
MmMzZGM3YmQ0ZS4uYjY0Y2U3Y2RlNDFhYWEwNjg5N2U4ZmZmZWQ4MmE4ZDA2NDMyZGZkMCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuaApAQCAtODMsNiArODMs
OSBAQCBXQVNNX1NMT1dfUEFUSF9ISURERU5fREVDTChzZXRfZ2xvYmFsX3JlZl9wb3J0YWJsZV9i
aW5kaW5nKTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9yeV9hdG9taWNfd2FpdDMy
KTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9yeV9hdG9taWNfd2FpdDY0KTsKIFdB
U01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9yeV9hdG9taWNfbm90aWZ5KTsKK1dBU01fU0xP
V19QQVRIX0hJRERFTl9ERUNMKHRocm93KTsKK1dBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKHJl
dGhyb3cpOworV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wocmV0cmlldmVfYW5kX2NsZWFyX2V4
Y2VwdGlvbik7CiAKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF93YXNt
X3Rocm93X2V4Y2VwdGlvbihDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbiosIFdhc206Oklu
c3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6RXhjZXB0aW9uVHlwZSkgUkVGRVJFTkNFRF9GUk9NX0FT
TSBXVEZfSU5URVJOQUw7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhf
d2FzbV9wb3Bjb3VudChjb25zdCBJbnN0cnVjdGlvbiogcGMsIHVpbnQzMl90KSBSRUZFUkVOQ0VE
X0ZST01fQVNNIFdURl9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKaW5kZXggZmE1NTJlZmZmMTc0MWVjYjVhNGI2YzJm
ODlmY2EwOTc1OWVlMzE1ZC4uMTJjZGFhOTY1ZWE5OGJhMThhYzI3MTZkY2M3NmU4MjcwODUwMjEw
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAKQEAgLTExNyw2ICsxMTcsNyBAQCBhdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VD
b2RlU2VjdGlvblNpemUodWludDMyX3QgZnVuY3Rpb25Db3VudCkgLT4gU3RhdGUKICAgICBtX2Z1
bmN0aW9uQ291bnQgPSBmdW5jdGlvbkNvdW50OwogICAgIG1fZnVuY3Rpb25JbmRleCA9IDA7CiAg
ICAgbV9jb2RlT2Zmc2V0ID0gbV9vZmZzZXQ7CisgICAgbV9pbmZvLT5tX2Z1bmN0aW9uRG9lc05v
dFVzZUV4Y2VwdGlvbnMuZW5zdXJlU2l6ZShmdW5jdGlvbkNvdW50KTsKIAogICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGZ1bmN0aW9uQ291
bnQpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCAhPSBtX2luZm8tPmZ1
bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwgZnVuY3Rpb25Db3VudCwgIiBl
eGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25zICIsIG1faW5mby0+ZnVuY3Rp
b25zLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGFnLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRlYzY3MzYyMzJmMDcyMWZjNjI1N2Q0Nzk0MTcxN2I1MjYyYmJlZTUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmNwcApAQCAtMCwwICsx
LDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21UYWcuaCIKKworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgV2FzbSB7CisKK3VpbnQzMl90
IFRhZzo6c19pZCA9IDA7CisKK319IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTAzOTUzZDVkNmVlZmM5
MzM4MWZjOTBlNjRmNWI3MmVjMzBkMTQ3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UYWcuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFRhZyA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxUYWc+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShUYWcpOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VGFnPiBjcmVh
dGUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGFn
KHNpZ25hdHVyZSkpOyB9CisKKyAgICBTaWduYXR1cmVBcmdDb3VudCBwYXJhbWV0ZXJDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7IH0KKyAgICBUeXBl
IHBhcmFtZXRlcihTaWduYXR1cmVBcmdDb3VudCBpKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVy
ZS0+YXJndW1lbnQoaSk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUYWcmIG90aGVy
KSBjb25zdCB7IHJldHVybiBtX2lkID09IG90aGVyLm1faWQ7IH0KKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgVGFnJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pZCAhPSBvdGhlci5tX2lkOyB9
CisKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2ln
bmF0dXJlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGFnKGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlKQorICAgICAgICA6IG1faWQoKytzX2lkKQorICAgICAgICAsIG1fc2lnbmF0dXJlKFJl
ZiB7IHNpZ25hdHVyZSB9KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdWludDMyX3Qgc19p
ZDsKKyAgICB1aW50MzJfdCBtX2lkOworICAgIFJlZjxjb25zdCBTaWduYXR1cmU+IG1fc2lnbmF0
dXJlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAK
aW5kZXggNzlkMWJjZmY4OWZiMDRlMjJlZDU0ZjJmNjQwOGJlMDlmMjkzZDBjMy4uZmVjMmExMzc3
OWJmMjdmNjQ4ZmFhMzhhNWVmODY0OGUwOTQ4NWMxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRodW5rcy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw4ICsyOCwxMSBAQAogCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgi
CiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIK
ICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5j
bHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUV4Y2VwdGlv
blR5cGUuaCIKICNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21UaHVua3MuaAppbmRleCBjMjM1Y2ZlNjI5NWU2NjlhZTVhODBlZThmMjUyZWE2Y2Ey
NDMxYjgzLi5mNDVkZWIyYTU5NmNhYTI1N2UzMzFlZDIxZWYwOWUwNmIwNWVjNTFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9y
SW5saW5lc0hlYWRlci5weQppbmRleCAxZTM4MGRlZjFjZDhjYjY3NjA3NWVkMzI1NTc5YjBmNTFk
MWJjZTU1Li45Njc3ZWI4M2Q5NmE3YWQ2NGZiNTE0N2E0MmI0YTg1OGQ5NTk0MDQ3IDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9y
SW5saW5lc0hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0
ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQpAQCAtMTQ0LDcgKzE0NCw3IEBAIGNs
YXNzIENvZGVHZW5lcmF0b3I6CiAgICAgICAgICAgICBzZWxmLmFkdmFuY2UoKQogICAgICAgICAg
ICAgc2VsZi5jb25zdW1lKCIpIikKICAgICAgICAgZWxpZiBhcmd1bWVudFJlZ2V4Lm1hdGNoKHNl
bGYudG9rZW4oKSk6Ci0gICAgICAgICAgICByZXN1bHQgPSAiYXJnIiArIHNlbGYudG9rZW4oKVsx
Ol0KKyAgICAgICAgICAgIHJlc3VsdCA9ICJnZXQoYXJnIiArIHNlbGYudG9rZW4oKVsxOl0gKyAi
KSIKICAgICAgICAgICAgIHNlbGYuYWR2YW5jZSgpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICBvcCA9IHNlbGYudG9rZW4oKQpAQCAtMTU2LDEzICsxNTYsMTYgQEAgY2xhc3MgQ29kZUdlbmVy
YXRvcjoKIAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKKyAgICBkZWYgbWFrZVJlc3VsdChzZWxm
LCByZXN1bHRWYWx1ZSk6CisgICAgICAgIHJldHVybiByZXN1bHRWYWx1ZSArICI7XG4iICsgInJl
c3VsdCA9IHB1c2gocmVzdWx0VmFsdWUtPnR5cGUoKSk7XG4iICsgIm1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIG9yaWdpbigpLCByZXN1bHQsIHJl
c3VsdFZhbHVlKTsiCisKICAgICBkZWYgZ2VuZXJhdGUoc2VsZiwgd2FzbU9wKToKICAgICAgICAg
aWYgbGVuKHNlbGYudG9rZW5zKSA9PSAxOgotICAgICAgICAgICAgcGFyYW1zID0gWyJhcmciICsg
c3RyKHBhcmFtKSBmb3IgcGFyYW0gaW4gcmFuZ2UobGVuKHdhc21PcFsicGFyYW1ldGVyIl0pKV0K
LSAgICAgICAgICAgIHJldHVybiAiICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQjM6OiIgKyBzZWxmLnRva2VuKCkgKyAiLCBvcmlnaW4oKSwgIiAr
ICIsICIuam9pbihwYXJhbXMpICsgIikiCisgICAgICAgICAgICBwYXJhbXMgPSBbImdldChhcmci
ICsgc3RyKHBhcmFtKSArICIpIiBmb3IgcGFyYW0gaW4gcmFuZ2UobGVuKHdhc21PcFsicGFyYW1l
dGVyIl0pKV0KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1ha2VSZXN1bHQoIiAgICBWYWx1ZSog
cmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIz
OjoiICsgc2VsZi50b2tlbigpICsgIiwgb3JpZ2luKCksICIgKyAiLCAiLmpvaW4ocGFyYW1zKSAr
ICIpIikKICAgICAgICAgcmVzdWx0ID0gc2VsZi5nZW5lcmF0ZU9wY29kZSgpCi0gICAgICAgIHNl
bGYuY29kZS5hcHBlbmQoInJlc3VsdCA9ICIgKyByZXN1bHQpCi0gICAgICAgIHJldHVybiAiICAg
ICIgKyAiICAgIFxuIi5qb2luKHNlbGYuY29kZSkKKyAgICAgICAgc2VsZi5jb2RlLmFwcGVuZCgi
VmFsdWUqIHJlc3VsdFZhbHVlID0gIiArIHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHNlbGYubWFr
ZVJlc3VsdCgiICAgICIgKyAiICAgIFxuIi5qb2luKHNlbGYuY29kZSkpCiAKIAogZGVmIHRlbXAo
aW5kZXgpOgpAQCAtMTkxLDcgKzE5NCw3IEBAIGRlZiBnZW5lcmF0ZVNpbXBsZUNvZGUob3ApOgog
ICAgIHJldHVybiAiIiIKIHRlbXBsYXRlPD4gYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OiIiIiArIHdhc20udG9DcHAob3BbIm5hbWUiXSkgKyAiPigiICsgIiwgIi5qb2luKGFyZ3Mp
ICsgIiIiKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0iIiIgKyBnZW5lcmF0ZUIzQ29kZShvcGNvZGUs
IGIzb3ApICsgIiIiOworIiIiICsgZ2VuZXJhdGVCM0NvZGUob3Bjb2RlLCBiM29wKSArICIiIgog
ICAgIHJldHVybiB7IH07CiB9CiAiIiIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQppbmRleCBjMjBiZmE1NDJlMDg2NGJjZDBhZjgy
OGU3OWQ2OTIwODA0YTU3MjM3Li43Y2NmY2FmYzZhZmIzMjEwOGNiNGE1MDljNWI5MjA3MmE4MWM3
NjI0IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21P
cHNIZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNt
T3BzSGVhZGVyLnB5CkBAIC01Myw3ICs1Myw3IEBAIGRlZiBjcHBNYWNybyh3YXNtT3Bjb2RlLCB2
YWx1ZSwgYjMsIGluYywgKmV4dHJhQXJncyk6CiBkZWYgdHlwZU1hY3JvaXplcigpOgogICAgIGlu
YyA9IDAKICAgICBmb3IgdHkgaW4gd2FzbS50eXBlczoKLSAgICAgICAgeWllbGQgY3BwTWFjcm8o
dHksIHdhc20udHlwZXNbdHldWyJ2YWx1ZSJdLCB3YXNtLnR5cGVzW3R5XVsiYjN0eXBlIl0sIGlu
YykKKyAgICAgICAgeWllbGQgY3BwTWFjcm8odHksIHdhc20udHlwZXNbdHldWyJ2YWx1ZSJdLCB3
YXNtLnR5cGVzW3R5XVsiYjN0eXBlIl0sIGluYywgdHkpCiAgICAgICAgIGluYyArPSAxCiAKIHR5
cGVfZGVmaW5pdGlvbnMgPSBbIiNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9UWVBFKG1hY3JvKSJdCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCmluZGV4
IDcxOGJjYjk3NTU2ZWY0NWE4MmQzZGI5ZTRiYTA3NzU4MGJiYzllNTYuLjc4ZjE3NmFiNjNhMjY1
ZTE1NDlkNWQ3MmNiMzYyY2E3ZTg1NDdjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCkBAIC03OCw2ICs3OCw3IEBAIGNvbnN0IENsYXNz
SW5mbyBKU1dlYkFzc2VtYmx5OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseSIsICZCYXNlOjpzX2lu
Zm8sICZ3ZWJBc3NlCiAvKiBTb3VyY2UgZm9yIEpTV2ViQXNzZW1ibHkubHV0LmgKIEBiZWdpbiB3
ZWJBc3NlbWJseVRhYmxlCiAgIENvbXBpbGVFcnJvciAgICBjcmVhdGVXZWJBc3NlbWJseUNvbXBp
bGVFcnJvciAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjaworICBFeGNlcHRpb24gICAgICAgY3Jl
YXRlV2ViQXNzZW1ibHlFeGNlcHRpb24gICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKICAg
R2xvYmFsICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5R2xvYmFsICAgICAgICBEb250RW51bXxQ
cm9wZXJ0eUNhbGxiYWNrCiAgIEluc3RhbmNlICAgICAgICBjcmVhdGVXZWJBc3NlbWJseUluc3Rh
bmNlICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBMaW5rRXJyb3IgICAgICAgY3Jl
YXRlV2ViQXNzZW1ibHlMaW5rRXJyb3IgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKQEAg
LTg1LDYgKzg2LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHk6OnNfaW5mbyA9IHsg
IldlYkFzc2VtYmx5IiwgJkJhc2U6OnNfaW5mbywgJndlYkFzc2UKICAgTW9kdWxlICAgICAgICAg
IGNyZWF0ZVdlYkFzc2VtYmx5TW9kdWxlICAgICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNr
CiAgIFJ1bnRpbWVFcnJvciAgICBjcmVhdGVXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciAgRG9udEVu
dW18UHJvcGVydHlDYWxsYmFjawogICBUYWJsZSAgICAgICAgICAgY3JlYXRlV2ViQXNzZW1ibHlU
YWJsZSAgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKKyAgVGFnICAgICAgICAgICAg
IGNyZWF0ZVdlYkFzc2VtYmx5VGFnICAgICAgICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNr
CiAgIGNvbXBpbGUgICAgICAgICB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jICAgICAgICAgRnVuY3Rp
b24gMQogICBpbnN0YW50aWF0ZSAgICAgd2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1bmMgICAgIEZ1
bmN0aW9uIDEKICAgdmFsaWRhdGUgICAgICAgIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jICAgICAg
ICBGdW5jdGlvbiAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwM2Q0MzAzM2NlYWQ1ZjFi
NDNiNmNkNjUxZjM2YTc4NTJmZjAxODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcApAQCAtMCwwICsxLDc5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbjo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uKSB9OworCitKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpKU1dlYkFzc2VtYmx5RXhjZXB0aW9u
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFdhc206OlRhZyYgdGFnLCBGaXhl
ZFZlY3Rvcjx1aW50NjRfdD4mJiBwYXlsb2FkKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
ICAgICwgbV90YWcoUmVmIHsgdGFnIH0pCisgICAgLCBtX3BheWxvYWQoV1RGTW92ZShwYXlsb2Fk
KSkKK3sKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0
b3IpOworCisgICAgYXV0byogZXhjZXB0aW9uID0ganNDYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRp
b24qPihjZWxsKTsKKyAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IGV4Y2Vw
dGlvbi0+dGFnKCkuc2lnbmF0dXJlKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBpZiAoaXNSZWZUeXBlKHNp
Z25hdHVyZS5hcmd1bWVudChpKSkpCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChiaXR3aXNl
X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+PihleGNlcHRpb24tPnBheWxvYWQoKVtpXSkpOwor
ICAgIH0KK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlFeGNlcHRpb24p
OworCit2b2lkIEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQor
eworICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPihjZWxsKS0+SlNXZWJB
c3NlbWJseUV4Y2VwdGlvbjo6fkpTV2ViQXNzZW1ibHlFeGNlcHRpb24oKTsKK30KKworSlNWYWx1
ZSBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpnZXRBcmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgdW5zaWduZWQgaSkgY29uc3QKK3sKKyAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IHRhZygpLnNpZ25hdHVyZSgpOworICAgIEFTU0VSVChpIDwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSk7CisgICAgcmV0dXJuIHRvSlNWYWx1ZShnbG9iYWxPYmplY3QsIHNpZ25h
dHVyZS5hcmd1bWVudChpKSwgcGF5bG9hZCgpW2ldKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDNiOWEzMmY5NWIxOTRkZWU4YzE1NDZiMmRjNWQ5OTRkNzJjNjNjYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24u
aApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNs
dWRlICJXYXNtVGFnLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1dlYkFzc2VtYmx5
RXhjZXB0aW9uIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cyBtb2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5RXhjZXB0aW9uU3BhY2U8bW9kZT4oKTsK
KyAgICB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhFcnJvckluc3RhbmNlVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgV2FzbTo6VGFnJiB0YWcsIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiYmIHBheWxvYWQpCisgICAg
eworICAgICAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBleGNlcHRpb24gPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uPih2bS5oZWFwKSkgSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbih2bSwgc3RydWN0dXJlLCB0YWcsIFdURk1vdmUocGF5bG9hZCkpOwor
ICAgICAgICBleGNlcHRpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIGV4
Y2VwdGlvbjsKKyAgICB9CisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCisgICAgY29u
c3QgV2FzbTo6VGFnJiB0YWcoKSBjb25zdCB7IHJldHVybiBtX3RhZy5nZXQoKTsgfQorICAgIGNv
bnN0IEZpeGVkVmVjdG9yPHVpbnQ2NF90PiYgcGF5bG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF5
bG9hZDsgfQorICAgIEpTVmFsdWUgZ2V0QXJnKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpIGNv
bnN0OworCitwcm90ZWN0ZWQ6CisgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbihWTSYsIFN0cnVj
dHVyZSosIGNvbnN0IFdhc206OlRhZyYsIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiYmKTsKKworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIFJlZjxjb25zdCBXYXNtOjpUYWc+IG1f
dGFnOworICAgIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiBtX3BheWxvYWQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCmluZGV4
IGQ4ZjI2NTBjYWE1ODY3MjM1NGJkNWYzOWY3ZGVhYjY0MTBkMDA1NGMuLmI2MjBlZGNhMjhhOWUy
NDI5ZjEyMGNlMTk2N2EzYjBjMTEyMTM1NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaApAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgog
I2luY2x1ZGUgIkpTU291cmNlQ29kZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlG
dW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgiCkBAIC0x
NDQsNiArMTQ1LDc1IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBkZWZhdWx0VmFsdWVGb3JSZWZl
cmVuY2VUeXBlKGNvbnN0IFdhc206OlR5cGUgdHlwZSkKICAgICByZXR1cm4ganNOdWxsKCk7CiB9
CiAKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSB0b0pTVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgV2FzbTo6VHlwZSB0eXBlLCB1aW50NjRfdCBiaXRzKQoreworICAgIHN3
aXRjaCAodHlwZS5raW5kKSB7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6Vm9pZDoKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STMyOgor
ICAgICAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYml0cykpOworICAg
IGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkYzMjoKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGJpdHdp
c2VfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4oYml0cykpKTsKKyAgICBjYXNlIFdh
c206OlR5cGVLaW5kOjpGNjQ6CisgICAgICAgIHJldHVybiBqc051bWJlcihiaXR3aXNlX2Nhc3Q8
ZG91YmxlPihiaXRzKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STY0OgorICAgICAgICBy
ZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnQ2
NF90PihiaXRzKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RXh0ZXJucmVmOgorICAgIGNh
c2UgV2FzbTo6VHlwZUtpbmQ6OkZ1bmNyZWY6CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZT4oYml0cyk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEpTVmFsdWUoKTsKK30K
KworQUxXQVlTX0lOTElORSB1aW50NjRfdCBmcm9tSlNWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBXYXNtOjpUeXBlIHR5cGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBzd2l0Y2ggKHR5cGUua2luZCkgeworICAgIGNhc2UgV2FzbTo6
VHlwZUtpbmQ6OlR5cGVJZHg6CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RnVuY3JlZjogewor
ICAgICAgICBib29sIGlzTnVsbGFibGUgPSB0eXBlLmlzTnVsbGFibGUoKTsKKyAgICAgICAgV2Vi
QXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rpb24gPSBudWxscHRyOworICAg
ICAgICBpZiAoIWlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIHZhbHVlLCB3YXNtRnVuY3Rp
b24sIHdhc21XcmFwcGVyRnVuY3Rpb24pICYmICghaXNOdWxsYWJsZSB8fCAhdmFsdWUuaXNOdWxs
KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAi
RnVuY3JlZiBtdXN0IGJlIGFuIGV4cG9ydGVkIHdhc20gZnVuY3Rpb24iKSk7CisgICAgICAgIGlm
ICh0eXBlLmtpbmQgPT0gV2FzbTo6VHlwZUtpbmQ6OlR5cGVJZHggJiYgKHdhc21GdW5jdGlvbiB8
fCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgeworICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5k
ZXggcGFyYW1JbmRleCA9IHR5cGUuaW5kZXg7CisgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJ
bmRleCBhcmdJbmRleDsKKyAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCisgICAgICAgICAg
ICAgICAgYXJnSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJnSW5kZXggPSB3YXNtV3JhcHBlckZ1bmN0aW9u
LT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgaWYgKHBhcmFtSW5kZXggIT0gYXJnSW5k
ZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZt
LCAiQXJndW1lbnQgZnVuY3Rpb24gZGlkIG5vdCBtYXRjaCB0aGUgcmVmZXJlbmNlIHR5cGUiKSk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV2FzbTo6VHlwZUtp
bmQ6OkV4dGVybnJlZjoKKyAgICAgICAgaWYgKCF0eXBlLmlzTnVsbGFibGUoKSAmJiB2YWx1ZS5p
c051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXhjZXB0aW9uKGdsb2JhbE9iamVj
dCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2
bSwgIk5vbi1udWxsIEV4dGVybnJlZiBjYW5ub3QgYmUgbnVsbCIpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STMyOgorICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIHZhbHVlLnRvSW50MzIoZ2xvYmFsT2JqZWN0KSk7CisgICAgY2FzZSBXYXNtOjpU
eXBlS2luZDo6STY0OgorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4odmFsdWUudG9CaWdJbnQ2NChnbG9iYWxPYmplY3QpKSk7CisgICAgY2Fz
ZSBXYXNtOjpUeXBlS2luZDo6RjMyOgorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChnbG9iYWxPYmplY3QpKSk7Cisg
ICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjY0OgorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0
KSkpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlZvaWQ6CisgICAgY2FzZSBXYXNtOjpUeXBl
S2luZDo6RnVuYzoKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpSZWZOdWxsOgorICAgIGNhc2Ug
V2FzbTo6VHlwZUtpbmQ6OlJlZjoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29k
ZSh2YWx1ZSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmluZGV4IDY2ZGExMGE3ODAwM2RiMjdhMTkxODJlOWIx
YjBjM2M4MDVkNGEzYjYuLjFkN2Y0NmNkNjgzMDQ1ZWFiNjQ2Yjg3MmY1NzhlZDc1MDIyNWNiZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcApAQCAtMjE2LDYgKzIxNiw3IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjp0cnlDcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOgogICAgICAgICBj
YXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xvYmFsOgogICAgICAgICBjYXNlIFdhc206OkV4dGVy
bmFsS2luZDo6VGFibGU6CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpFeGNlcHRp
b246CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtp
bmQ6Ok1lbW9yeToKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQyLDYgKzI0Myw3IEBAIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjp0cnlDcmVhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0
aW9uOgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xvYmFsOgogICAgICAgICBj
YXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWxLaW5kOjpFeGNlcHRpb246CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFdh
c206OkV4dGVybmFsS2luZDo6TWVtb3J5OiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCmluZGV4IDU2ZjU4Zjk1NDM0OTM5
NTliODI2ZDFmOTczYThmMmIwZDVjZjc2OWYuLjk3NGQ2ZDdiYTVlN2E1ODc4YTg4YjZjMTE2ZDUy
YWRlNTM4YmFmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCkBAIC00OCw2ICs0OCw4IEBAIGNsYXNzIENvZGVCbG9j
azsKIH0KIAogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlIGZpbmFsIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgeworICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisK
IHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Iu
Y3BwCmluZGV4IDEwMjJhNTIyNzQzMjk2N2FlYWE1MmI4Yjg5NzQ2NzkzYmZhZmY0ZGIuLmIxMDI5
N2ZlZGFiNzVmYTIzN2M1NzY2ZTcxMTkzMjQyNDI2NDg2N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Iu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM3LDYgKzM3LDEzIEBAIEpTT2JqZWN0KiBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwKICAgICBBU1NFUlQoIW1l
c3NhZ2UuaXNFbXB0eSgpKTsKICAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2Jh
bE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1
cmUoKSwgbWVzc2FnZSwgSlNWYWx1ZSgpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIFR5cGVOb3Ro
aW5nLCBFcnJvclR5cGU6OkVycm9yLCB0cnVlKTsKIH0KKworSlNPYmplY3QqIGNyZWF0ZUpTV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZt
LCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUpCit7CisgICAgRXJyb3JJbnN0YW5jZSogZXJyb3Ig
PSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgZ2xvYmFsT2JqZWN0LT53
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBXYXNtOjplcnJvck1lc3NhZ2VGb3JF
eGNlcHRpb25UeXBlKHR5cGUpLCBKU1ZhbHVlKCksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgVHlw
ZU5vdGhpbmcsIEVycm9yVHlwZTo6RXJyb3IsIHRydWUpOworICAgIGVycm9yLT5zZXRDYXRjaGFi
bGVGcm9tV2FzbShmYWxzZSk7CisgICAgcmV0dXJuIGVycm9yOworfQogICAgIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaAppbmRleCBiZTQxMzA5MGQzMjc0YzYxOGZhZmQ0
OWIxMTY3YjBkMjIyN2NlNWZjLi5jODZiNjNmOTEyZDNjZjQxZDFjNmM0OTBjMDg5NjM5Y2I3YjBi
M2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEwICsyOCwxMiBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIkVycm9ySW5zdGFuY2UuaCIKKyNpbmNsdWRlICJXYXNtRXhj
ZXB0aW9uVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogSlNPYmplY3QqIGNyZWF0ZUpTV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBWTSYsIGNvbnN0IFN0cmluZyYp
OworSlNPYmplY3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9iYWxPYmpl
Y3QqLCBWTSYsIFdhc206OkV4Y2VwdGlvblR5cGUpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
Zy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iOGQ1NjBmMDcxMDZlNGQwYWNiYTU1YTMzYTc0MmM3MDk3NzM3YjFiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVRhZy5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5VGFnLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNt
VGFnLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJs
eVRhZzo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFnIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5VGFnKSB9OworCitK
U1dlYkFzc2VtYmx5VGFnKiBKU1dlYkFzc2VtYmx5VGFnOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgV2FzbTo6
VGFnJiB0YWcpCit7CisgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisgICAgYXV0byog
anNUYWcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5VGFnPih2bS5o
ZWFwKSkgSlNXZWJBc3NlbWJseVRhZyh2bSwgc3RydWN0dXJlLCB0YWcpOworICAgIGpzVGFnLT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIGpzVGFnOworfQorCitTdHJ1Y3R1cmUqIEpT
V2ViQXNzZW1ibHlUYWc6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworSlNXZWJBc3NlbWJseVRhZzo6SlNXZWJB
c3NlbWJseVRhZyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBXYXNtOjpUYWcm
IHRhZykKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fdGFnKFJlZiB7IHRhZyB9
KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlU
YWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43YTJiZjQzZGI3N2U1N2ZkNTFiODBjMTkwM2YyMmNlOTljMGE3ZWUx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseVRhZy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKworI2luY2x1ZGUgIldhc21UYWcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
V2ViQXNzZW1ibHlUYWcgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6
CisgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KKyAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS53ZWJBc3Nl
bWJseVRhZ1NwYWNlPG1vZGU+KCk7CisgICAgfQorCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
KworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1dlYkFzc2VtYmx5VGFnKiBjcmVhdGUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGNvbnN0IFdhc206OlRhZyYpOworICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSk7CisKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1f
dGFnOyB9CisgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUoKSBjb25zdCB7IHJl
dHVybiB0YWcoKS5zaWduYXR1cmUoKTsgfQorCitwcml2YXRlOgorICAgIEpTV2ViQXNzZW1ibHlU
YWcoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBXYXNtOjpUYWcmKTsKKworICAgIGNvbnN0IFJlZjxj
b25zdCBXYXNtOjpUYWc+IG1fdGFnOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
YXNtVG9KUy5jcHAKaW5kZXggZjY3ZjI0MmE3ODkxM2FlNWMwMmFhNTY4ZTk5YWM2NWNkYmI4MGZk
ZS4uZDY1ZmM2MTIxYjYwOTBiZDdmMmQ0MGQwM2JiNDVlZTdhYTY0MDIzNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApAQCAtOTgsNyArOTgsNyBAQCBFeHBl
Y3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1
cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9IDA7
CiAgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKICAgICAgICAgdW5zaWduZWQg
Y2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQg
PSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lU2xv
dDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJn
TnVtKSB7CiAgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJn
TnVtKTsKICAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZS5raW5kKSB7CkBAIC0xNjIsNyArMTYy
LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJp
bmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxl
ZEdQUnMgPSAwOwogICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7CiAgICAgICAg
IHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVu
dCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIHVuc2lnbmVk
IGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENh
bGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpOwogCiAgICAgICAgIGF1dG8gbWFyc2hhbGxGUFIgPSBbJl0gKEZQUlJlZyBmcHJSZWcp
IHsKICAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oZnByUmVnKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25D
b25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY0YTVmNDQ4NmI0ZjE3YzhmZmZjODcwNzQxMTUw
MmI4NjdlNjlmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMTE3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCIK
KworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKKyNpbmNsdWRlICJX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oIgorCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlF
eGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENs
YXNzSW5mbyBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJGdW5j
dGlvbiIsICZCYXNlOjpzX2luZm8sICZjb25zdHJ1Y3RvclRhYmxlV2ViQXNzZW1ibHlFeGNlcHRp
b24sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlFeGNlcHRpb25Db25z
dHJ1Y3RvcikgfTsKKworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihjYWxsSlNXZWJBc3NlbWJseUV4Y2VwdGlvbik7CisKKy8qIFNvdXJjZSBmb3IgV2ViQXNzZW1i
bHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaAorIEBiZWdpbiBjb25zdHJ1Y3RvclRhYmxlV2Vi
QXNzZW1ibHlFeGNlcHRpb24KKyBAZW5kCisgKi8KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlFeGNlcHRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgYXV0byYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIEpTVmFsdWUgdGFnVmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIEpTVmFs
dWUgdGFnUGFyYW1ldGVycyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSk7CisKKyAgICBhdXRvIHRh
ZyA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhZyo+KHZtLCB0YWdWYWx1ZSk7CisgICAg
aWYgKCF0YWcpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRpb24gY29uc3RydWN0b3IgZXhwZWN0cyB0aGUgZmly
c3QgYXJndW1lbnQgdG8gYmUgYSBXZWJBc3NlbWJseS5UYWciKTsKKworICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIHZhbHVlczsKKyAgICBmb3JFYWNoSW5JdGVyYWJsZShnbG9iYWxPYmplY3QsIHRh
Z1BhcmFtZXRlcnMsIFsmXSAoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbmV4dFZhbHVl
KSB7CisgICAgICAgIHZhbHVlcy5hcHBlbmQobmV4dFZhbHVlKTsKKyAgICB9KTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0g
dGFnLT5zaWduYXR1cmUoKS5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRpb24gY29u
c3RydWN0b3IgZXhwZWN0cyB0aGUgbnVtYmVyIG9mIHBhcmVtZXRlcnMgaW4gV2ViQXNzZW1ibHku
VGFnIHRvIG1hdGNoIHRoZSB0YWdzIHBhcmFtZXRlciBjb3VudC4iKTsKKworICAgIC8vIEFueSBH
QydkIHZhbHVlcyBpbiBoZXJlIHdpbGwgYmUgbWFya2VkIGJ5IHRoZSBNYXJrZWRBcnVnZW1lbnRC
dWZmZXIgdW50aWwgc3RvcmVkIGluIHRoZSBFeGNlcHRpb24uCisgICAgRml4ZWRWZWN0b3I8dWlu
dDY0X3Q+IHBheWxvYWQodmFsdWVzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBwYXlsb2FkW2ldID0gZnJvbUpTVmFs
dWUoZ2xvYmFsT2JqZWN0LCB0YWctPnNpZ25hdHVyZSgpLmFyZ3VtZW50KGkpLCB2YWx1ZXMuYXQo
aSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKwor
ICAgIEpTT2JqZWN0KiBuZXdUYXJnZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgp
KTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUo
dm0sIHdlYkFzc2VtYmx5RXhjZXB0aW9uU3RydWN0dXJlLCBuZXdUYXJnZXQsIGNhbGxGcmFtZS0+
anNDYWxsZWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlF
eGNlcHRpb246OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCB0YWctPnRhZygpLCBXVEZNb3ZlKHBheWxv
YWQpKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbEpTV2ViQXNzZW1ibHlF
eGNlcHRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKK3sK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25z
dHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIikpOworfQorCitXZWJBc3NlbWJseUV4Y2VwdGlv
bkNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUq
IHRoaXNQcm90b3R5cGUpCit7CisgICAgYXV0byogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yPih2bS5oZWFwKSkg
V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBjb25z
dHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUpOworICAgIHJldHVybiBj
b25zdHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhjZXB0aW9u
Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgMSwg
IkV4Y2VwdGlvbiJfcywgUHJvcGVydHlBZGRpdGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFu
c2l0aW9uKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVs
ZXRlKTsKK30KKworV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6V2ViQXNzZW1ibHlF
eGNlcHRpb25Db25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlLCBjYWxsSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiwgY29uc3RydWN0
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbikKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYTdiYzkyMzU0NTUzMGRlNTg1OTcwZThkY2U3YzYwMDY5MDRhYjEzMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RXhjZXB0aW9uQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5RXhjZXB0
aW9uUHJvdG90eXBlOworCitjbGFzcyBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yIGZp
bmFsIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVkZWYgSW50
ZXJuYWxGdW5jdGlvbiBCYXNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7
CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3RvciogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqKTsKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUpOworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFdlYkFzc2VtYmx5RXhj
ZXB0aW9uQ29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqKTsKK307CitTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9y
LCBJbnRlcm5hbEZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uM2MzNmM0Nzk4NWEzMjRjMWIzODk5MzVlZjFhMWI5MTFhYWY1ZjhlNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9u
UHJvdG90eXBlLmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJB
c3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0Mgeworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04od2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNHZXRBcmcpOworc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNJcyk7Cit9CisK
KyNpbmNsdWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5sdXQuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlw
ZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIiwgJkJhc2U6OnNfaW5mbywgJnBy
b3RvdHlwZVRhYmxlV2ViQXNzZW1ibHlFeGNlcHRpb24sIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUpIH07CisKKy8qIFNvdXJjZSBmb3Ig
V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUubHV0LmgKKyBAYmVnaW4gcHJvdG90eXBlVGFi
bGVXZWJBc3NlbWJseUV4Y2VwdGlvbgorIGdldEFyZyAgIHdlYkFzc2VtYmx5RXhjZXB0aW9uUHJv
dG9GdW5jR2V0QXJnICAgRnVuY3Rpb24gMgorIGlzICAgd2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90
b0Z1bmNJcyAgIEZ1bmN0aW9uIDEKKyBAZW5kCisgKi8KKworV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUqIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGF1dG8qIG9iamVj
dCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90
eXBlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUodm0sIHN0cnVjdHVy
ZSk7CisgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIG9iamVjdDsK
K30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChp
bmhlcml0cyh2bSwgaW5mbygpKSk7Cit9CisKK1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBl
OjpXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCitBTFdBWVNfSU5MSU5FIHN0
YXRpYyBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBnZXRFeGNlcHRpb24oSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2VsbCgpKSkgeworICAgICAgICB0aHJv
d1ZNRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihnbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cisg
ICAgYXV0byogdGFnID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKj4odm0s
IHRoaXNWYWx1ZS5hc0NlbGwoKSk7CisgICAgaWYgKExJS0VMWSh0YWcpKQorICAgICAgICByZXR1
cm4gdGFnOworICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3Nl
bWJseS5FeGNlcHRpb24gb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tRXhjZXB0aW9uIG9iamVjdCJf
cyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIEpTV2Vi
QXNzZW1ibHlUYWcqIGdldFRhZyhWTSYgdm0sIEpTVmFsdWUgdGFnVmFsdWUpCit7CisgICAgaWYg
KCF0YWdWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhZyo+KHZtLCB0YWdWYWx1ZS5hc0NlbGwoKSk7
Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih3ZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
RnVuY0dldEFyZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBjb25zdCBhdXRvJiBm
b3JtYXRNZXNzYWdlID0gWyZdKGNvbnN0IGF1dG8mIG1lc3NhZ2UpIHsKKyAgICAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5LkV4Y2VwdGlvbi5nZXRBcmcoKTogIiwgbWVzc2FnZSk7
CisgICAgfTsKKyAgICBjb25zdCBhdXRvJiB0eXBlRXJyb3IgPSBbJl0oY29uc3QgYXV0byYgbWVz
c2FnZSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGZvcm1hdE1lc3NhZ2UobWVzc2FnZSkpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUo
KTsKKyAgICB9OworCisgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbioganNFeGNlcHRpb24gPSBn
ZXRFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworCisgICAg
SlNXZWJBc3NlbWJseVRhZyogdGFnID0gZ2V0VGFnKHZtLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
KTsKKyAgICBpZiAoIXRhZykKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJvcigiRmlyc3QgYXJndW1l
bnQgbXVzdCBiZSBhIFdlYkFzc2VtYmx5LlRhZyIpOworCisgICAgaWYgKGpzRXhjZXB0aW9uLT50
YWcoKSAhPSB0YWctPnRhZygpKQorICAgICAgICByZXR1cm4gdHlwZUVycm9yKCJGaXJzdCBhcmd1
bWVudCBkb2VzIG5vdCBtYXRjaCB0aGUgZXhjZXB0aW9uIHRhZyIpOworCisgICAgdWludDMyX3Qg
aW5kZXggPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpLnRvVUludDMyKGdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKGluZGV4ID49IHRhZy0+dGFnKCkucGFyYW1ldGVyQ291bnQoKSkgeworICAgICAgICB0
aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBmb3JtYXRNZXNzYWdlKCJJ
bmRleCBvdXQgb2YgcmFuZ2UiKSk7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwor
ICAgIH0KKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNFeGNlcHRpb24tPmdldEFyZyhnbG9iYWxPYmplY3QsIGluZGV4KSkpOworfQorCitKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNJcywgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBqc0V4
Y2VwdGlvbiA9IGdldEV4Y2VwdGlvbihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFnKiB0YWcgPSBnZXRUYWcodm0sIGNhbGxGcmFtZS0+
YXJndW1lbnQoMCkpOworICAgIGlmICghdGFnKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgIldlYkFzc2VtYmx5LkV4Y2VwdGlvbi5pcygpOiBGaXJz
dCBhcmd1bWVudCBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuVGFnIik7CisgICAgICAgIHJldHVybiBl
bmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGpzRXhjZXB0aW9uLT50YWcoKSA9PSB0YWct
PnRhZygpKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjMjEwNmQ4
Yjk5MzFmZGE0YTBlOTRiNjFmYjVjN2UxZWEzNDhkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5o
CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1
ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlIGZpbmFs
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBK
U05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CisgICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICBTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9
CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqIGNyZWF0ZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xB
UkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZShW
TSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cAppbmRleCAzYWIzYzNkNWNiNWM5MDA5YmVjMmI2ZDgwZDQ0NGM4MGMxNDNlYWRlLi4xOTcxOGRj
ZTY5OTY5MDAxZWUxMmQ2NDRmODYyNDVlMDE3MzY1YjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtNzgsNTEg
Kzc4LDkgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9u
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBXYXNtOjpJbnN0YW5jZSogd2Fz
bUluc3RhbmNlID0gJmluc3RhbmNlLT5pbnN0YW5jZSgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBh
cmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKythcmdJ
bmRleCkgewotICAgICAgICBKU1ZhbHVlIGFyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoYXJnSW5k
ZXgpOwotICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChhcmdJbmRleCkua2luZCkg
ewotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJMzI6Ci0gICAgICAgICAgICBhcmcgPSBK
U1ZhbHVlOjpkZWNvZGUoYXJnLnRvSW50MzIoZ2xvYmFsT2JqZWN0KSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6VHlwZUlkeDoKLSAgICAgICAgY2Fz
ZSBXYXNtOjpUeXBlS2luZDo6RnVuY3JlZjogewotICAgICAgICAgICAgYm9vbCBpc051bGxhYmxl
ID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ0luZGV4KS5pc051bGxhYmxlKCk7Ci0gICAgICAgICAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb24gPSBudWxscHRyOwotICAgICAgICAg
ICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rpb24gPSBudWxs
cHRyOwotICAgICAgICAgICAgaWYgKCFpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBhcmcs
IHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlvbikgJiYgKCFpc051bGxhYmxlIHx8ICFh
cmcuaXNOdWxsKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAiRnVuY3JlZiBtdXN0IGJlIGFuIGV4cG9ydGVkIHdh
c20gZnVuY3Rpb24iKSkpOwotICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChhcmdJ
bmRleCkua2luZCA9PSBXYXNtOjpUeXBlS2luZDo6VHlwZUlkeCAmJiAod2FzbUZ1bmN0aW9uIHx8
IHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJl
SW5kZXggcGFyYW1JbmRleCA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdJbmRleCkuaW5kZXg7Ci0g
ICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggYXJnSW5kZXg7Ci0gICAgICAgICAg
ICAgICAgaWYgKHdhc21GdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAgYXJnSW5kZXggPSB3
YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBhcmdJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVy
ZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtSW5kZXggIT0gYXJnSW5kZXgpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
Z2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9i
YWxPYmplY3QsIHZtLCAiQXJndW1lbnQgZnVuY3Rpb24gZGlkIG5vdCBtYXRjaCB0aGUgcmVmZXJl
bmNlIHR5cGUiKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RXh0ZXJucmVmOgotICAgICAgICAgICAg
aWYgKCFzaWduYXR1cmUuYXJndW1lbnQoYXJnSW5kZXgpLmlzTnVsbGFibGUoKSAmJiBhcmcuaXNO
dWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9y
KGdsb2JhbE9iamVjdCwgdm0sICJOb24tbnVsbCBFeHRlcm5yZWYgY2Fubm90IGJlIG51bGwiKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6Okk2NDoK
LSAgICAgICAgICAgIGFyZyA9IEpTVmFsdWU6OmRlY29kZShiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KGFyZy50b0JpZ0ludDY0KGdsb2JhbE9iamVjdCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGMzI6Ci0gICAgICAgICAgICBhcmcgPSBKU1ZhbHVl
OjpkZWNvZGUoYml0d2lzZV9jYXN0PHVpbnQzMl90PihhcmcudG9GbG9hdChnbG9iYWxPYmplY3Qp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjY0
OgotICAgICAgICAgICAgYXJnID0gSlNWYWx1ZTo6ZGVjb2RlKGJpdHdpc2VfY2FzdDx1aW50NjRf
dD4oYXJnLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpWb2lkOgotICAgICAgICBjYXNlIFdhc206OlR5cGVL
aW5kOjpGdW5jOgotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpSZWZOdWxsOgotICAgICAg
ICBjYXNlIFdhc206OlR5cGVLaW5kOjpSZWY6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICB9CisgICAgICAgIHVpbnQ2NF90IHZhbHVlID0gZnJvbUpT
VmFsdWUoZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnQoYXJnSW5kZXgpLCBjYWxsRnJh
bWUtPmFyZ3VtZW50KGFyZ0luZGV4KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKGFyZyk7Cisg
ICAgICAgIGJveGVkQXJncy5hcHBlbmQoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiAgICAgfQog
CiAgICAgLy8gV2hlbiB3ZSBkb24ndCB1c2UgZmFzdCBUTFMgdG8gc3RvcmUgdGhlIGNvbnRleHQs
IHRoZSBKUwpAQCAtMTUyLDEwICsxMTAsNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2Fs
bFdlYkFzc2VtYmx5RnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAg
IEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkpOwogICAgIEFTU0VSVCgmd2FzbUZ1bmN0
aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5jZSgpID09IHZtLndhc21Db250ZXh0LmxvYWQoKSk7CiAg
ICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1FbnRyeVRvV2FzbSh3YXNtRnVuY3Rpb24t
PmpzRW50cnlwb2ludChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgJnZtLCAm
cHJvdG9DYWxsRnJhbWUpOwotICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgaW4g
YSByZWdpc3RlciBvciBvbiB0aGUgc3RhY2sgc2luY2UgaXQncyBzdG9yZWQgaW4gVmVjdG9yPEpT
VmFsdWU+LgotICAgIC8vIFRoaXMgcHJvYmFibHkgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBz
aW5jZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlvbiogc2hvdWxkIGtlZXAgdGhlIGluc3RhbmNlCi0g
ICAgLy8gYWxpdmUuIEJ1dCBpdCdzIGdvb2QgaHlnaWVuZS4KLSAgICBpbnN0YW5jZS0+dXNlKCk7
CiAgICAgaWYgKHByZXZXYXNtSW5zdGFuY2UgIT0gd2FzbUluc3RhbmNlKSB7CiAgICAgICAgIC8v
IFRoaXMgaXMganVzdCBmb3Igc29tZSBleHRyYSBzYWZldHkgaW5zdGVhZCBvZiBsZWF2aW5nIGEg
Y2FjaGVkCiAgICAgICAgIC8vIHZhbHVlIGluIHRoZXJlLiBJZiB3ZSBldmVyIGZvcmdldCB0byBz
ZXQgdGhlIHZhbHVlIHRvIGJlIGEgcmVhbApAQCAtMTY4LDYgKzEyMiwxMSBAQCBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LAogICAgIHZtLndhc21Db250ZXh0LnN0b3JlKHByZXZXYXNtSW5zdGFuY2Us
IHZtLnNvZnRTdGFja0xpbWl0KCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKKyAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGluIGEgcmVnaXN0ZXIg
b3Igb24gdGhlIHN0YWNrIHNpbmNlIGl0J3Mgc3RvcmVkIGluIFZlY3RvcjxKU1ZhbHVlPi4KKyAg
ICAvLyBUaGlzIHByb2JhYmx5IGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSwgc2luY2UgdGhlIFdl
YkFzc2VtYmx5RnVuY3Rpb24qIHNob3VsZCBrZWVwIHRoZSBpbnN0YW5jZQorICAgIC8vIGFsaXZl
LiBCdXQgaXQncyBnb29kIGh5Z2llbmUuCisgICAgaW5zdGFuY2UtPnVzZSgpOworCiAgICAgcmV0
dXJuIHJhd1Jlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IGRiNDA5MmFkNjk0ODJm
N2EwOWQzYmUxZjc1MjM0MjJkOWQ1YWYxM2QuLmY3YjA4N2JmNTg5MmJmMjZiZmU2M2U1ZTM4Y2Zh
ZDIwMmJhYmEyMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlv
bi5oIgpAQCAtMTMwLDYgKzEzMSw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6Omxp
bmtJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBpCiAgICAgICAg
IGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjoKICAgICAgICAgY2FzZSBXYXNtOjpF
eHRlcm5hbEtpbmQ6Okdsb2JhbDoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRh
YmxlOgorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RXhjZXB0aW9uOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6CiAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTM2Myw3ICszNjUsNyBAQCB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09i
amVjdCogaQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRh
YmxlOiB7Ci0gICAgICAgICAgICAvLyA3LiBPdGhlcndpc2UgKGkgaXMgYSB0YWJsZSBpbXBvcnQp
OgorICAgICAgICAgICAgLy8gNy4gSWYgaSBpcyBhIHRhYmxlIGltcG9ydDoKICAgICAgICAgICAg
IEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlU
YWJsZSo+KHZtLCB2YWx1ZSk7CiAgICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFz
c2VtYmx5LlRhYmxlIG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCiAgICAg
ICAgICAgICBpZiAoIXRhYmxlKQpAQCAtMzk0LDYgKzM5NiwyMiBAQCB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09i
amVjdCogaQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIFdh
c206OkV4dGVybmFsS2luZDo6RXhjZXB0aW9uOiB7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5
VGFnKiB0YWcgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlUYWcqPih2bSwgdmFsdWUpOwor
ICAgICAgICAgICAgaWYgKCF0YWcpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihj
cmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxN
ZXNzYWdlKGltcG9ydCwgIlRhZyBpbXBvcnQiLCAiaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFz
c2VtYmx5LlRhZyIpKSk7CisKKyAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGV4cGVj
dGVkU2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRFeGNlcHRpb25TaWdu
YXR1cmVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOworICAgICAgICAgICAgVU5VU0VEX1ZBUklB
QkxFKGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpOworCisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRT
aWduYXR1cmVJbmRleCAhPSB0YWctPnRhZygpLnNpZ25hdHVyZSgpLmluZGV4KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGds
b2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydGVkIFRhZyIs
ICJzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgaW1wb3J0ZWQgV2ViQXNzZW1ibHkgVGFnJ3Mg
c2lnbmF0dXJlIikpKTsKKworICAgICAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5hZGRU
YWcodGFnLT50YWcoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIFdh
c206OkV4dGVybmFsS2luZDo6TWVtb3J5OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTQyMSw2ICs0MzksOSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1w
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogaQogICAgICAgICB9CiAg
ICAgfQogCisgICAgZm9yIChXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA6IG1v
ZHVsZUluZm9ybWF0aW9uLmludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcykKKyAgICAg
ICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5hZGRUYWcoV2FzbTo6VGFnOjpjcmVhdGUoV2FzbTo6
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkpLmxlYWtSZWYoKSk7CisK
ICAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50ID0gY29kZUJsb2NrLT5mdW5jdGlvbklt
cG9ydENvdW50KCk7CiAgICAgYXV0byBtYWtlRnVuY3Rpb25XcmFwcGVyID0gWyZdICh1aW50MzJf
dCBpbmRleCkgLT4gSlNWYWx1ZSB7CiAgICAgICAgIC8vIElmIHdlIGFscmVhZHkgbWFkZSBhIHdy
YXBwZXIsIGRvIG5vdCBtYWtlIGEgbmV3IG9uZS4KQEAgLTU1Nyw2ICs1NzgsMTAgQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlua0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNPYmplY3QqIGkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsKKyAg
ICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1dlYkFzc2VtYmx5VGFnOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5tX3dlYkFzc2VtYmx5VGFnU3RydWN0dXJlLmdldChn
bG9iYWxPYmplY3QpLCBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLnRhZyhleHAua2luZEluZGV4KSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6
OmZyb21VVEY4KGV4cC5maWVsZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
NjVmOGM3YjZlMTMyNmY3ZGQ3Y2NkNWYwNDdjMzkzYWY2NTdjNzA1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
ci5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlU
YWdDb25zdHJ1Y3Rvci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAi
RXJyb3IuaCIKKyNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKKyNpbmNsdWRlICJX
ZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xh
c3NJbmZvIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJB
c3NlbWJseVRhZ0NvbnN0cnVjdG9yKSB9OworCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTihjYWxsSlNXZWJBc3NlbWJseVRhZyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTihjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFnKTsKKworSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWcsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAK
KyAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuVGFnIGNv
bnN0cnVjdG9yIGV4cGVjdHMgdGhlIHRhZyB0eXBlIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4iX3Mp
OworCisgICAgSlNWYWx1ZSB0YWdUeXBlVmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwor
ICAgIEpTVmFsdWUgc2lnbmF0dXJlT2JqZWN0ID0gdGFnVHlwZVZhbHVlLmdldChnbG9iYWxPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJhbWV0ZXJzIl9zKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlmICghc2lnbmF0dXJlT2JqZWN0
LmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWcgY29uc3RydWN0b3IgZXhwZWN0cyBhIHRhZyB0eXBl
IHdpdGggdGhlICdwYXJhbWV0ZXJzJyBwcm9wZXJ0eS4iX3MpOworCisgICAgVmVjdG9yPFdhc206
OlR5cGU+IHBhcmFtZXRlcnM7CisgICAgZm9yRWFjaEluSXRlcmFibGUoZ2xvYmFsT2JqZWN0LCBz
aWduYXR1cmVPYmplY3QsIFsmXSAoYXV0byYgdm0sIGF1dG8qIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBuZXh0VHlwZSkgLT4gdm9pZCB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgICAgICBXYXNtOjpUeXBlIHR5cGU7CisgICAgICAgIFN0cmluZyB2
YWx1ZVN0cmluZyA9IG5leHRUeXBlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIGlmICh2YWx1ZVN0cmlu
ZyA9PSAiaTMyIl9zKQorICAgICAgICAgICAgdHlwZSA9IFdhc206OlR5cGVzOjpJMzI7CisgICAg
ICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09ICJpNjQiX3MpCisgICAgICAgICAgICB0eXBlID0g
V2FzbTo6VHlwZXM6Okk2NDsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVTdHJpbmcgPT0gImYzMiJf
cykKKyAgICAgICAgICAgIHR5cGUgPSBXYXNtOjpUeXBlczo6RjMyOworICAgICAgICBlbHNlIGlm
ICh2YWx1ZVN0cmluZyA9PSAiZjY0Il9zKQorICAgICAgICAgICAgdHlwZSA9IFdhc206OlR5cGVz
OjpGNjQ7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09ICJhbnlmdW5jIl9zKQorICAg
ICAgICAgICAgdHlwZSA9IFdhc206OlR5cGVzOjpGdW5jcmVmOworICAgICAgICBlbHNlIGlmICh2
YWx1ZVN0cmluZyA9PSAiZXh0ZXJucmVmIl9zKQorICAgICAgICAgICAgdHlwZSA9IFdhc206OlR5
cGVzOjpFeHRlcm5yZWY7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LlRhZyBjb25zdHJ1Y3RvciBleHBl
Y3RzIHRoZSAncGFyYW1ldGVycycgZmllbGQgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEg
c2VxdWVuY2Ugb2YgV2ViQXNzZW1ibHkgdmFsdWUgdHlwZXMuIl9zKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHR5cGUpOworICAg
IH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBSZWZQdHI8
V2FzbTo6U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6
c2lnbmF0dXJlRm9yKHsgfSwgcGFyYW1ldGVycyk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBKU0NfR0VUX0RFUklWRURfU1RSVUNUVVJFKHZtLCB3ZWJBc3NlbWJseVRhZ1N0cnVjdHVyZSwg
YXNPYmplY3QoY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSksIGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3Nl
bWJseVRhZzo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgV2FzbTo6VGFnOjpj
cmVhdGUoKnNpZ25hdHVyZSkuZ2V0KCkpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihjYWxsSlNXZWJBc3NlbWJseVRhZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSopKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWciKSk7Cit9CisKK0pTV2ViQXNzZW1i
bHlUYWcqIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OmNyZWF0ZVRhZyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgV2FzbTo6VGFnJiB0
YWcpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBuZXdUYXJnZXQgPSBh
c09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUodm0sIHdlYkFzc2VtYmx5VGFnU3RydWN0dXJl
LCBuZXdUYXJnZXQsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
V2ViQXNzZW1ibHlUYWc6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHRhZykp
OworfQorCitXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVj
dG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlUYWdQ
cm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCit7CisgICAgYXV0byogY29uc3RydWN0b3IgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yPih2bS5oZWFw
KSkgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBjb25zdHJ1
Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUpOworICAgIHJldHVybiBjb25z
dHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqIHByb3RvdHlwZSkK
K3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgMSwgIlRhZyJfcywgUHJvcGVydHlBZGRp
dGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFuc2l0aW9uKTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUs
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVs
ZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKK30KKworV2ViQXNzZW1ibHlUYWdD
b25zdHJ1Y3Rvcjo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjYWxsSlNXZWJBc3NlbWJseVRh
ZywgY29uc3RydWN0SlNXZWJBc3NlbWJseVRhZykKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45MWUyZjFkODA2ZTkwMjFlZDg1NzVmYWM1YjM4MTZjMTM5OWEzMTU5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdD
b25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJXYXNtT3BzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1dlYkFzc2VtYmx5VGFnOworY2xhc3MgV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGU7CisKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIFRhZzsKK30K
KworY2xhc3MgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvciBmaW5hbCA6IHB1YmxpYyBJbnRlcm5h
bEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsK
KworICAgIHN0YXRpYyBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1
Y3R1cmUqLCBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBz
dGF0aWMgSlNXZWJBc3NlbWJseVRhZyogY3JlYXRlVGFnKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZy
YW1lKiwgY29uc3QgV2FzbTo6VGFnJik7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6
CisgICAgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSopOworfTsKK1NU
QVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0
b3IsIEludGVybmFsRnVuY3Rpb24pOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OTNkNDE3
YzE4YWM4NGE3Mjk0ZDJlOTE0MmE1NDMzMWYyNjMwNDA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwCkBA
IC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnUHJvdG90
eXBlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJPYmplY3RDb25z
dHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKworbmFtZXNwYWNlIEpTQyB7Citz
dGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih3ZWJBc3NlbWJseVRhZ1Byb3RvRnVuY1R5
cGUpOworfQorCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUubHV0LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlUYWdQcm90b3R5cGU6
OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5LlRhZyIsICZCYXNlOjpzX2luZm8sICZwcm90b3R5cGVU
YWJsZVdlYkFzc2VtYmx5VGFnLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2Vt
Ymx5VGFnUHJvdG90eXBlKSB9OworCisvKiBTb3VyY2UgZm9yIFdlYkFzc2VtYmx5VGFnUHJvdG90
eXBlLmx1dC5oCisgQGJlZ2luIHByb3RvdHlwZVRhYmxlV2ViQXNzZW1ibHlUYWcKKyB0eXBlICAg
d2ViQXNzZW1ibHlUYWdQcm90b0Z1bmNUeXBlICAgRnVuY3Rpb24gMAorIEBlbmQKKyAqLworCisK
K1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTo6Y3JlYXRl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBh
dXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUp
OworICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBvYmplY3Q7Cit9
CisKK1N0cnVjdHVyZSogV2ViQXNzZW1ibHlUYWdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
eworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwor
dm9pZCBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorewor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOworfQor
CitXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTo6V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30K
KworQUxXQVlTX0lOTElORSBzdGF0aWMgSlNXZWJBc3NlbWJseVRhZyogZ2V0VGFnKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBpZiAoVU5MSUtFTFkoIXRoaXNWYWx1ZS5pc0NlbGwoKSkpIHsKKyAgICAg
ICAgdGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFuT2JqZWN0RXJy
b3IoZ2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorICAgIGF1dG8qIHRhZyA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhZyo+KHZt
LCB0aGlzVmFsdWUuYXNDZWxsKCkpOworICAgIGlmIChMSUtFTFkodGFnKSkKKyAgICAgICAgcmV0
dXJuIHRhZzsKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNz
ZW1ibHkuVGFnIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLVRhZyBvYmplY3QiX3MpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlU
YWdQcm90b0Z1bmNUeXBlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTV2ViQXNz
ZW1ibHlUYWcqIGpzVGFnID0gZ2V0VGFnKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKworICAgIGNvbnN0IFdhc206OlRhZyYgdGFnID0ganNUYWctPnRhZygpOworCisgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRhZy5wYXJhbWV0ZXJDb3VudCgpOyArK2kpCisgICAgICAgIGFyZ0xpc3QuYXBwZW5kKFdhc206
OnR5cGVUb1N0cmluZyh2bSwgdGFnLnBhcmFtZXRlcihpKS5raW5kKSk7CisKKyAgICBpZiAoVU5M
SUtFTFkoYXJnTGlzdC5oYXNPdmVyZmxvd2VkKCkpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZW5jb2Rl
ZEpTVmFsdWUoKTsKKyAgICB9CisKKyAgICBKU0FycmF5KiBwYXJhbWV0ZXJzID0gY29uc3RydWN0
QXJyYXkoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4o
bnVsbHB0ciksIGFyZ0xpc3QpOworICAgIEpTT2JqZWN0KiB0eXBlID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCAxKTsK
KyAgICB0eXBlLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJh
bWV0ZXJzIiksIHBhcmFtZXRlcnMpOworCisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgSlNWYWx1ZTo6ZW5jb2RlKHR5cGUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMjQz
MmY5Yzg5YmRjZGE3ZGM3Yjk0MTg0NzYyYjI1MjZiNTliYjZjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaApA
QCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRl
ICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgV2ViQXNzZW1ibHlUYWdQ
cm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJv
cGVydHlUYWJsZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2Vzcz4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7
CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5
VGFnUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
OworICAgIH0KKworICAgIHN0YXRpYyBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSogY3JlYXRlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVD
TEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlKFZNJiwg
U3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS93YXNtLmpzb24KaW5kZXggNGY4ZGQ5ZTNkMjEzNDM1MDAwMDA2ZTI0MTQ2YjAx
OTRjOWFjODhmMS4uYTQzNTEwZjRmODQ3MzAzODY0M2MxNjVjM2MzMDgxNDhmMDc1MDRhZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20uanNvbgpAQCAtMjMsMzQgKzIzLDM4IEBACiAgICAg
ImJsb2NrX3R5cGUiOiBbImkzMiIsICJpNjQiLCAiZjMyIiwgImY2NCIsICJ2b2lkIiwgImV4dGVy
bnJlZiIsICJmdW5jcmVmIl0sCiAgICAgInJlZl90eXBlIjogWyJmdW5jcmVmIiwgImV4dGVybnJl
ZiIsICJ0eXBlX2lkeCJdLAogICAgICJleHRlcm5hbF9raW5kIjogewotICAgICAgICAiRnVuY3Rp
b24iOiB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMCB9LAotICAgICAgICAiVGFibGUiOiAg
ICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMSB9LAotICAgICAgICAiTWVtb3J5IjogICB7
ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMiB9LAotICAgICAgICAiR2xvYmFsIjogICB7ICJ0
eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMyB9CisgICAgICAgICJGdW5jdGlvbiI6ICAgIHsgInR5
cGUiOiAidWludDgiLCAidmFsdWUiOiAwIH0sCisgICAgICAgICJUYWJsZSI6ICAgICAgIHsgInR5
cGUiOiAidWludDgiLCAidmFsdWUiOiAxIH0sCisgICAgICAgICJNZW1vcnkiOiAgICAgIHsgInR5
cGUiOiAidWludDgiLCAidmFsdWUiOiAyIH0sCisgICAgICAgICJHbG9iYWwiOiAgICAgIHsgInR5
cGUiOiAidWludDgiLCAidmFsdWUiOiAzIH0sCisgICAgICAgICJFeGNlcHRpb24iOiAgIHsgInR5
cGUiOiAidWludDgiLCAidmFsdWUiOiA0IH0KICAgICB9LAogICAgICJzZWN0aW9uIiA6IHsKLSAg
ICAgICAgIlR5cGUiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAxLCAiZGVz
Y3JpcHRpb24iOiAiRnVuY3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAg
IkltcG9ydCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAyLCAiZGVzY3JpcHRp
b24iOiAiSW1wb3J0IGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAgIkZ1bmN0aW9uIjogeyAidHlw
ZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAzLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gZGVj
bGFyYXRpb25zIiB9LAotICAgICAgICAiVGFibGUiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3Iiwg
InZhbHVlIjogIDQsICJkZXNjcmlwdGlvbiI6ICJJbmRpcmVjdCBmdW5jdGlvbiB0YWJsZSBhbmQg
b3RoZXIgdGFibGVzIiB9LAotICAgICAgICAiTWVtb3J5IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3
IiwgInZhbHVlIjogIDUsICJkZXNjcmlwdGlvbiI6ICJNZW1vcnkgYXR0cmlidXRlcyIgfSwKLSAg
ICAgICAgIkdsb2JhbCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA2LCAiZGVz
Y3JpcHRpb24iOiAiR2xvYmFsIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAgIkV4cG9ydCI6ICAg
eyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA3LCAiZGVzY3JpcHRpb24iOiAiRXhwb3J0
cyIgfSwKLSAgICAgICAgIlN0YXJ0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6
ICA4LCAiZGVzY3JpcHRpb24iOiAiU3RhcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24iIH0sCi0gICAg
ICAgICJFbGVtZW50IjogIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgOSwgImRlc2Ny
aXB0aW9uIjogIkVsZW1lbnRzIHNlY3Rpb24iIH0sCi0gICAgICAgICJDb2RlIjogICAgIHsgInR5
cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMCwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIGJv
ZGllcyAoY29kZSkiIH0sCi0gICAgICAgICJEYXRhIjogICAgIHsgInR5cGUiOiAidmFydWludDci
LCAidmFsdWUiOiAxMSwgImRlc2NyaXB0aW9uIjogIkRhdGEgc2VnbWVudHMiIH0KKyAgICAgICAg
IlR5cGUiOiAgICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMSwgImRlc2NyaXB0
aW9uIjogIkZ1bmN0aW9uIHNpZ25hdHVyZSBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJJbXBv
cnQiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDIsICJkZXNjcmlwdGlvbiI6
ICJJbXBvcnQgZGVjbGFyYXRpb25zIiB9LAorICAgICAgICAiRnVuY3Rpb24iOiAgeyAidHlwZSI6
ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAzLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gZGVjbGFy
YXRpb25zIiB9LAorICAgICAgICAiVGFibGUiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2
YWx1ZSI6ICA0LCAiZGVzY3JpcHRpb24iOiAiSW5kaXJlY3QgZnVuY3Rpb24gdGFibGUgYW5kIG90
aGVyIHRhYmxlcyIgfSwKKyAgICAgICAgIk1lbW9yeSI6ICAgIHsgInR5cGUiOiAidmFydWludDci
LCAidmFsdWUiOiAgNSwgImRlc2NyaXB0aW9uIjogIk1lbW9yeSBhdHRyaWJ1dGVzIiB9LAorICAg
ICAgICAiR2xvYmFsIjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA2LCAiZGVz
Y3JpcHRpb24iOiAiR2xvYmFsIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIkV4cG9ydCI6ICAg
IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNywgImRlc2NyaXB0aW9uIjogIkV4cG9y
dHMiIH0sCisgICAgICAgICJTdGFydCI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogIDgsICJkZXNjcmlwdGlvbiI6ICJTdGFydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiIgfSwKKyAg
ICAgICAgIkVsZW1lbnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgOSwgImRl
c2NyaXB0aW9uIjogIkVsZW1lbnRzIHNlY3Rpb24iIH0sCisgICAgICAgICJDb2RlIjogICAgICB7
ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTAsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlv
biBib2RpZXMgKGNvZGUpIiB9LAorICAgICAgICAiRGF0YSI6ICAgICAgeyAidHlwZSI6ICJ2YXJ1
aW50NyIsICJ2YWx1ZSI6IDExLCAiZGVzY3JpcHRpb24iOiAiRGF0YSBzZWdtZW50cyIgfSwKKyAg
ICAgICAgIkRhdGFDb3VudCI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMiwgImRl
c2NyaXB0aW9uIjogIk51bWJlciBvZiBkYXRhIHNlZ21lbnRzIiB9LAorICAgICAgICAiRXhjZXB0
aW9uIjogeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEzLCAiZGVzY3JpcHRpb24iOiAi
RXhjZXB0aW9uIGRlY2xhcmF0aW9ucyIgfQogICAgIH0sCiAgICAgIm9wY29kZSI6IHsKICAgICAg
ICAgInVucmVhY2hhYmxlIjogICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZh
bHVlIjogICAwLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw
YXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0cmFw
IGltbWVkaWF0ZWx5IiB9LAorICAgICAgICAibm9wIjogICAgICAgICAgICAgICAgIHsgImNhdGVn
b3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDEsICJyZXR1cm4iOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIm5vIG9wZXJhdGlvbiIgfSwKICAgICAgICAgImJsb2NrIjogICAg
ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAyLCAicmV0
dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInNpZyIs
ICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBhIHNlcXVlbmNlIG9m
IGV4cHJlc3Npb25zLCB5aWVsZGluZyAwIG9yIDEgdmFsdWVzIiB9LAogICAgICAgICAibG9vcCI6
ICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDMs
ICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6
IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAi
c2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGEgYmxvY2sg
d2hpY2ggY2FuIGFsc28gZm9ybSBjb250cm9sIGZsb3cgbG9vcHMiIH0sCiAgICAgICAgICJpZiI6
ICAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAg
NCwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVy
IjogWyJib29sIl0sICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6
ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gaWYgZXhw
cmVzc2lvbiIgfSwKICAgICAgICAgImVsc2UiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6
ICJjb250cm9sIiwgICAgInZhbHVlIjogICA1LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAg
ICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJiZWdpbiBlbHNlIGV4cHJlc3Npb24gb2YgaWYiIH0sCi0gICAgICAgICJz
ZWxlY3QiOiAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6
ICAyNywgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1l
dGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAic2VsZWN0IG9u
ZSBvZiB0d28gdmFsdWVzIGJhc2VkIG9uIGNvbmRpdGlvbiIgfSwKLSAgICAgICAgImFubm90YXRl
ZF9zZWxlY3QiOiAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI4LCAi
cmV0dXJuIjogWyJwcmV2Il0sICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBb
ImFueSIsICJwcmV2IiwgImJvb2wiXSwgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInRh
cmdldF90eXBlc19jb3VudCIsICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJudW1iZXIgb2YgZW50cmll
cyBpbiB0aGUgdGFyZ2V0IHR5cGVzIHZlY3RvciJ9LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Im5hbWUiOiAidGFyZ2V0X3R5
cGVzIiwgICAgICAgInR5cGUiOiAidmFsdWVfdHlwZSoiLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRhcmdldCB0eXBlcyB0aGF0IGluZGlj
YXRlIHJlc3VsdCBvZiBzZWxlY3QgaW5zdHJ1Y3Rpb24ifV0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIHNhbWUgYXMganVzdCBz
ZWxlY3QgYnV0IHdpdGggdGhlIGFubm90YXRpb24gZm9yIHJlc3VsdCB0eXBlcyIgfSwKKyAgICAg
ICAgInRyeSI6ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZh
bHVlIjogICA2LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJw
YXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBb
eyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdp
biB0cnkgZXhwcmVzc2lvbiIgfSwKKyAgICAgICAgImNhdGNoIjogICAgICAgICAgICAgICB7ICJj
YXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA3LCAicmV0dXJuIjogWyJjb250cm9s
Il0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImV4biIsICJ0eXBlIjogInZhcnVp
bnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBjYXRjaCBleHByZXNzaW9uIG9mIHRyeSIgfSwK
KyAgICAgICAgInRocm93IjogICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwg
ICAgInZhbHVlIjogICA4LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAg
ICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlh
dGUiOiBbeyJuYW1lIjogImV4biIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJ0aHJvdyBleGNlcHRpb24iIH0sCisgICAgICAgICJyZXRocm93IjogICAgICAgICAgICAgeyAi
Y2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgOSwgInJldHVybiI6IFsiY29udHJv
bCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2ZV9kZXB0aCIsICJ0
eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAicmV0aHJvdyB0aGUgZXhjZXB0aW9uIGF0IHRoZSB0b3Ag
b2YgdGhlIHN0YWNrIiB9LAogICAgICAgICAiYnIiOiAgICAgICAgICAgICAgICAgIHsgImNhdGVn
b3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTIsICJyZXR1cm4iOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6
ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogImJyZWFrIHRoYXQgdGFyZ2V0cyBhbiBvdXRlciBuZXN0ZWQgYmxv
Y2siIH0sCiAgICAgICAgICJicl9pZiI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29u
dHJvbCIsICAgICJ2YWx1ZSI6ICAxMywgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2ZV9kZXB0aCIsICJ0eXBlIjogInZhcnVpbnQz
MiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiY29uZGl0aW9uYWwgYnJlYWsgdGhhdCB0YXJnZXRzIGFuIG91dGVyIG5lc3RlZCBi
bG9jayIgfSwKICAgICAgICAgImJyX3RhYmxlIjogICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJj
b250cm9sIiwgICAgInZhbHVlIjogIDE0LCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInRhcmdldF9jb3VudCIsICAgInR5cGUiOiAidmFydWlu
dDMyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFyZ2V0X3RhYmxlIn0sCkBAIC01
OCw4ICs2MiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7Im5hbWUiOiAiZGVmYXVsdF90YXJnZXQiLCAidHlwZSI6ICJ2
YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogImFuIG91dGVyIGJsb2NrIG9yIGxvb3AgdG8gd2hpY2ggdG8gYnJlYWsg
aW4gdGhlIGRlZmF1bHQgY2FzZSJ9XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJicmFuY2ggdGFibGUgY29udHJvbCBmbG93IGNvbnN0
cnVjdCIgfSwKICAgICAgICAgInJldHVybiI6ICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJj
b250cm9sIiwgICAgInZhbHVlIjogIDE1LCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJyZXR1cm4gemVybyBvciBvbmUgdmFsdWUgZnJvbSB0aGlzIGZ1bmN0aW9uIiB9
LAorICAgICAgICAiZGVsZWdhdGUiOiAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wi
LCAgICAidmFsdWUiOiAgMjQsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAg
ICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogImRlbGVnYXRlIHRvIGEgcGFyZW50IHRyeSBibG9jayIgfSwKKyAgICAgICAgImNhdGNoX2Fs
bCI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI1LCAi
cmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJjYXRjaCBleGNlcHRpb25z
IHJlZ2FyZGxlc3Mgb2YgdGFnIiB9LAogICAgICAgICAiZHJvcCI6ICAgICAgICAgICAgICAgIHsg
ImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjYsICJyZXR1cm4iOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55Il0sICAgICAgICAg
ICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogImlnbm9yZSB2YWx1ZSIgfSwKLSAgICAgICAgIm5vcCI6
ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAx
LCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIi
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJubyBvcGVyYXRpb24i
IH0sCisgICAgICAgICJzZWxlY3QiOiAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJv
bCIsICAgICJ2YWx1ZSI6ICAyNywgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAgICAiaW1t
ZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAic2VsZWN0IG9uZSBvZiB0d28gdmFsdWVzIGJhc2VkIG9uIGNvbmRpdGlvbiIgfSwKKyAg
ICAgICAgImFubm90YXRlZF9zZWxlY3QiOiAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAg
InZhbHVlIjogIDI4LCAicmV0dXJuIjogWyJwcmV2Il0sICAgICAgICAgICAgICAgICAgICAgICAg
ICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wiXSwgICAgICAgICJpbW1lZGlhdGUi
OiBbeyJuYW1lIjogInRhcmdldF90eXBlc19jb3VudCIsICJ0eXBlIjogInZhcnVpbnQzMiIsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJu
dW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFyZ2V0IHR5cGVzIHZlY3RvciJ9LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Im5h
bWUiOiAidGFyZ2V0X3R5cGVzIiwgICAgICAgInR5cGUiOiAidmFsdWVfdHlwZSoiLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRhcmdldCB0
eXBlcyB0aGF0IGluZGljYXRlIHJlc3VsdCBvZiBzZWxlY3QgaW5zdHJ1Y3Rpb24ifV0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhl
IHNhbWUgYXMganVzdCBzZWxlY3QgYnV0IHdpdGggdGhlIGFubm90YXRpb24gZm9yIHJlc3VsdCB0
eXBlcyIgfSwKICAgICAgICAgImVuZCI6ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJj
b250cm9sIiwgICAgInZhbHVlIjogIDExLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJlbmQgYSBibG9jaywgbG9vcCwgb3IgaWYiIH0sCiAgICAgICAgICJpMzIuY29u
c3QiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAic3BlY2lhbCIsICAgICJ2YWx1ZSI6ICA2NSwg
InJldHVybiI6IFsiaTMyIl0sICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ2
YWx1ZSIsICAgICAgICAgICJ0eXBlIjogInZhcmludDMyIn1dLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYSBjb25zdGFudCB2YWx1
ZSBpbnRlcnByZXRlZCBhcyBpMzIiIH0sCiAgICAgICAgICJpNjQuY29uc3QiOiAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAic3BlY2lhbCIsICAgICJ2YWx1ZSI6ICA2NiwgInJldHVybiI6IFsiaTY0
Il0sICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ2YWx1ZSIsICAgICAgICAg
ICJ0eXBlIjogInZhcmludDY0In1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYSBjb25zdGFudCB2YWx1ZSBpbnRlcnByZXRlZCBh
cyBpNjQiIH0sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggNDFmMGRhZTA0ZGJjMjEyMzBiZDgyYTMxNzk0MWQwNDg4MTAxMjlkZi4uNzQzYThmZDZm
OWNkMDYzNTc5NzNjMzc2MWNiZTNhYzc3OTIwNjEzZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIxLTEwLTA1ICBU
YWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCB0
aGUgV2ViQXNzZW1ibHkgZXhjZXB0aW9uIGhhbmRsaW5nIHByb3Bvc2FsCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk2ODEKKyAgICAgICAgPHJkYXI6
Ly84MTYwMzM4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMjEtMTAtMDUgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgYW4g
ZW50aXRsZW1lbnQgY2hlY2sgdG8gb25seSBhbGxvdyBBZEF0dHJpYnV0aW9uRGFlbW9uIHRvIGJl
IGNvbm5lY3RlZCB0byBieSB0aGUgbmV0d29yayBwcm9jZXNzCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVz
cy10ZXN0cwppbmRleCBlMDgxNmRjMDU2MWIxODBhOWVmYjY2NzhkYjgyY2M2NDZlMTliNDgxLi5k
ZGY5NDdkZWI3NzIzODJiMjg5NjA5N2RhNjRjMTNiODBjYTJhZjE4IDEwMDc1NQotLS0gYS9Ub29s
cy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1zdHJlc3MtdGVzdHMKQEAgLTEyMjcsMTYgKzEyMjcsMjEgQEAgZGVmIHJ1bldlYkFzc2VtYmx5
U3VpdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICBtb2R1bGVzID0gRGlyW1dB
U01URVNUU19QQVRIICsgIiouanMiXS5tYXAgeyB8ZnwgRmlsZS5iYXNlbmFtZShmKSB9CiAgICAg
cHJlcGFyZUV4dHJhQWJzb2x1dGVGaWxlcyhXQVNNVEVTVFNfUEFUSCwgWyJ3YXNtLmpzb24iXSkK
ICAgICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzKG1vZHVsZXMubWFwIHsgfGZ8ICIuLi8iICsg
ZiB9LCAkY29sbGVjdGlvbikKLSAgICBydW4oImRlZmF1bHQtd2FzbSIsICItbSIsICooRlRMX09Q
VElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIGlmIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9uc1swXSA9PSA6bm9fbW9kdWxlCisgICAgICBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMuc2hpZnQKKyAgICBlbHNlCisgICAgICBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMudW5zaGlmdCAiLW0iCisgICAgZW5kCisgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAqKEZU
TF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICBpZiAkbW9kZSAh
PSAicXVpY2siCi0gICAgICAgIHJ1bigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsICIt
bSIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5P
X0NKSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1
bigid2FzbS1lYWdlciIsICItbSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRp
c29uIiwgIi1tIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIs
ICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICItLXZl
cmlmeUdDPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KSkKLSAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRM
U0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigid2FzbS1zbG93LW1lbW9yeSIsICItbSIsICItLXVz
ZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tYjMiLCAiLW0iLCAiLS11c2VX
YXNtTExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICooRlRMX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tYWlyIiwg
Ii1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxl
SXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigid2FzbS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsICIt
bSIsICItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSIsICItLXZlcmlmeUdDPXRydWUiLCAqKEZU
TF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkgaWYgc2hvdWxkQ29sbGVj
dENvbnRpbnVvdXNseT8KKyAgICAgICAgcnVuKCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0
IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9f
Q0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVu
KCJ3YXNtLWVhZ2VyIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAi
LS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9t
aXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgIi0tdmVyaWZ5R0M9dHJ1ZSIs
ICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBy
dW4oIndhc20tbm8tdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFs
c2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAg
ICAgcnVuKCJ3YXNtLXNsb3ctbWVtb3J5IiwgIi0tdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZh
bHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAg
ICAgIHJ1bigid2FzbS1iMyIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2Vz
QWlyPWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykp
CisgICAgICAgIHJ1bigid2FzbS1haXIiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VS
YW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWNvbGxl
Y3QtY29udGludW91c2x5IiwgIi0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIiwgIi0tdmVyaWZ5
R0M9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKSBp
ZiBzaG91bGRDb2xsZWN0Q29udGludW91c2x5PwogICAgIGVuZAogZW5kCiAKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDY3MjMyM2Q0ODVi
MzBiOWNiYzQ1OGE0ZTdjNTJkZTg2Zjc5ZWI1OC4uMzY1NTQ1NmM4YmQxYmQ3NWIyODUwZTc5YTU2
YjBkN2NlMmM3NGI4ZCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMzYgQEAKKzIwMjEtMTAtMDUgIFRhZGV1IFphZ2FsbG8g
IDx0emFnYWxsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IHRoZSBXZWJBc3NlbWJs
eSBleGNlcHRpb24gaGFuZGxpbmcgcHJvcG9zYWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTY4MQorICAgICAgICA8cmRhcjovLzgxNjAzMzg3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBuZXcg
dGVzdHMgZm9yIHRoZSBleGNlcHRpb24gaGFuZGxpbmcgYW5kIGltcG9ydCBhIHNldCBvZiB0ZXN0
cyB1c2VkIGJ5IFY4IGludG8gd2FzbS92OC4KKworICAgICAgICAqIHdhc20ueWFtbDoKKyAgICAg
ICAgKiB3YXNtL0J1aWxkZXIuanM6CisgICAgICAgIChjb25zdC5faW1wb3J0RXhjZXB0aW9uQ29u
dGludWF0aW9uLnR5cGUuSW1wb3J0LmZpZWxkKToKKyAgICAgICAgKGV4cG9ydC5kZWZhdWx0LkJ1
aWxkZXIucHJvdG90eXBlLl9yZWdpc3RlclNlY3Rpb25CdWlsZGVycy5jb25zdC5zZWN0aW9uLmlu
LldBU00uZGVzY3JpcHRpb24uc2VjdGlvbi5zd2l0Y2guc2VjdGlvbi5jYXNlLnN0cmluZ19hcHBl
YXJlZF9oZXJlLnRoaXMuc2VjdGlvbik6CisgICAgICAgIChjb25zdC5fZXhwb3J0RnVuY3Rpb25D
b250aW51YXRpb24udHlwZS5FeHBvcnQuZmllbGQpOiBEZWxldGVkLgorICAgICAgICAoY29uc3Qu
X2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL0J1
aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanM6CisgICAgICAgIChjb25zdC5lbWl0dGVycy5JbXBv
cnQpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuRXhwb3J0KToKKyAgICAgICAgKGNvbnN0LmVt
aXR0ZXJzLkV4Y2VwdGlvbik6CisgICAgICAgICogd2FzbS9hc3NlcnQuanM6CisgICAgICAgICog
d2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qczoKKyAgICAgICAgKEltcG9ydEJlZm9y
ZVR5cGVTZWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9zdHJlc3MvY2F0Y2gtd2l0
aC1kZWxlZ2F0ZS5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmlu
Z19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVy
ZS5jYWxsYmFjayk6CisgICAgICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAgICAgKiB3YXNtL3N0
cmVzcy9jcmVhdGUtdGFnLWZyb20uanM6IEFkZGVkLgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4
Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0yLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAg
ICAgICAoYXNzZXJ0LmVxKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3Mt
aW5zdGFuY2UtMy5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGFzc2VydC5l
cSk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLmpzOiBB
ZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAgICAgICAoYXNzZXJ0LnRocm93cyk6CisgICAgICAg
IChpbnN0Qi5uZXcuV2ViQXNzZW1ibHkuSW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vc3RyZXNz
L2V4Y2VwdGlvbi1saXZlbmVzcy10aWVyLXVwLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5C
dWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0
cmluZ19hcHBlYXJlZF9oZXJlLmNhdGNoKToKKyAgICAgICAgKGFzc2VydC5lcS4pOgorICAgICAg
ICAoYXNzZXJ0LmVxKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tbXVsdGlwbGUt
aW5zdGFuY2VzLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5n
X2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJl
LmNvbnN0Lm1vZHVsZS5uZXcuV2ViQXNzZW1ibHkuTW9kdWxlKToKKyAgICAgICAgKGltcG9ydC5C
dWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0
cmluZ19hcHBlYXJlZF9oZXJlLmluc3QuZXhwb3J0cy50aHJvdyk6CisgICAgICAgICogd2FzbS9z
dHJlc3MvZXhjZXB0aW9uLXNpbXBsZS1kZWxlZ2F0ZS5qczogQWRkZWQuCisgICAgICAgIChpbXBv
cnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJv
bS5zdHJpbmdfYXBwZWFyZWRfaGVyZS50ZXN0U2ltcGxlVGhyb3dEZWxlZ2F0ZSk6CisgICAgICAg
ICh0ZXN0VGhyb3dEZWxlZ2F0ZVNraXApOgorICAgICAgICAodGVzdERlbGVnYXRlQ2FsbGVyKToK
KyAgICAgICAgKHRlc3RTaW1wbGVEZWxlZ2F0ZU1lcmdlKToKKyAgICAgICAgKiB3YXNtL3N0cmVz
cy9leGNlcHRpb24tc2ltcGxlLXRocm93LWNhdGNoLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9y
dC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9t
LnN0cmluZ19hcHBlYXJlZF9oZXJlLnRlc3RTaW1wbGVUcnlDYXRjaCk6CisgICAgICAgICh0ZXN0
U2ltcGxlVHJ5Q2F0Y2hBbGwpOgorICAgICAgICAodGVzdENhbGxUcnlDYXRjaCk6CisgICAgICAg
ICh0ZXN0Q2FsbFRyeUNhdGNoQWxsKToKKyAgICAgICAgKHRlc3RTaW1wbGVUcnlDYXRjaFZhbHVl
KToKKyAgICAgICAgKHRlc3RDYWxsVHJ5Q2F0Y2hWYWx1ZSk6CisgICAgICAgICh0ZXN0U3RhY2tU
cnlDYXRjaCk6CisgICAgICAgICh0ZXN0TGl2ZUFmdGVyVHJ5Q2F0Y2gpOgorICAgICAgICAodGVz
dExpdmVBZnRlclRyeUNhdGNoQWxsKToKKyAgICAgICAgKHRlc3RVbmlmeVRyeUNhdGNoQ2F0Y2gp
OgorICAgICAgICAodGVzdFVuaWZ5VHJ5Q2F0Y2hDYXRjaEFsbCk6CisgICAgICAgICh0ZXN0VW5p
ZnlUcnlOb1Rocm93KToKKyAgICAgICAgKHRlc3RVbmlmeVRyeU5vQ2F0Y2gpOgorICAgICAgICAo
dGVzdE5lc3RlZENhdGNoKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3du
LWZyb20tanMtdG8td2FzbS1jYXRjaGFsbC1yZXRocm93LmpzOiBBZGRlZC4KKyAgICAgICAgKGlt
cG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5m
cm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKiB3YXNtL3N0cmVz
cy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS1jYXRjaGFsbC5qczogQWRkZWQuCisg
ICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5h
cy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5jYWxsYmFjayk6CisgICAgICAgICog
d2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20uanM6IEFkZGVkLgor
ICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQu
YXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2FsbGJhY2spOgorICAgICAgICAq
IHdhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3V0LW9mLXdhc20uanM6IEFkZGVkLgorICAg
ICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3Zlci13YXNtLmpzOiBBZGRlZC4K
KyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0
LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAg
KiB3YXNtL3N0cmVzcy9leGNlcHRpb24tdHJhcC5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQu
QnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5z
dHJpbmdfYXBwZWFyZWRfaGVyZS50ZXN0Q2Fubm90Q2F0Y2hVbnJlYWNoYWJsZSk6CisgICAgICAg
ICh0ZXN0Q2Fubm90Q2F0Y2hPT0IpOgorICAgICAgICAodGVzdFdhc21BUElUaHJvdyk6CisgICAg
ICAgICh0ZXN0SlNDYXRjaEFuZFJldGhyb3cpOgorICAgICAgICAqIHdhc20vc3RyZXNzL3JldGhy
b3ctZnJvbS1jYXRjaC10by1jYXRjaC5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRl
ci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS5jYWxsYmFjayk6CisgICAgICAgICogd2FzbS9zdHJlc3MvcmV0aHJvdy10
by1jYXRjaC5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19h
cHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5j
YWxsYmFjayk6CisgICAgICAgIChhc3NlcnQudGhyb3dzLmNhbGxiYWNrKToKKyAgICAgICAgKGFz
c2VydC50aHJvd3MpOgorICAgICAgICAqIHdhc20vc3RyZXNzL3JldGhyb3ctdG8tZGVsZWdhdGUt
dG8tY2F0Y2guanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUp
OgorICAgICAgICAoYXNzZXJ0LmVxLmV4bi5nZXRBcmcpOgorICAgICAgICAoYXNzZXJ0LnRocm93
cyk6CisgICAgICAgIChhc3NlcnQudGhyb3dzLmNhbGxiYWNrKToKKyAgICAgICAgKGFzc2VydC5l
cSk6CisgICAgICAgICogd2FzbS9zdHJlc3Mvc2ltcGxlLWV4cG9ydC1leGNlcHRpb24uanM6IEFk
ZGVkLgorICAgICAgICAqIHdhc20vdjgvTElDRU5TRTogQWRkZWQuCisgICAgICAgICogd2FzbS92
OC9leGNlcHRpb25zLWFwaS5qczogQWRkZWQuCisgICAgICAgIChUZXN0SW1wb3J0KToKKyAgICAg
ICAgKFRlc3RJbXBvcnRFeHBvcnQpOgorICAgICAgICAoVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9y
KToKKyAgICAgICAgKFRlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcldpdGhQYXlsb2FkKToKKyAgICAg
ICAgKFRlc3RDYXRjaEpTRXhjZXB0aW9uLmpzX2Z1bmMpOgorICAgICAgICAoanNfZnVuYyk6Cisg
ICAgICAgIChUZXN0Q2F0Y2hKUyk6CisgICAgICAgIChUZXN0Q2F0Y2hKU0V4Y2VwdGlvbldpdGhQ
YXlsb2FkKToKKyAgICAgICAgKFRlc3RHZXRBcmcpOgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0
aW9ucy1leHBvcnQuanM6IEFkZGVkLgorICAgICAgICAoVGVzdEV4cG9ydE11bHRpcGxlKToKKyAg
ICAgICAgKFRlc3RFeHBvcnRPdXRPZkJvdW5kcyk6CisgICAgICAgICogd2FzbS92OC9leGNlcHRp
b25zLWV4dGVybnJlZi5qczogQWRkZWQuCisgICAgICAgIChUZXN0VGhyb3dSZWZOdWxsKToKKyAg
ICAgICAgKFRlc3RUaHJvd1JlZlBhcmFtKToKKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMt
aW1wb3J0LmpzOiBBZGRlZC4KKyAgICAgICAgKE5ld0V4cG9ydGVkVGFnKToKKyAgICAgICAgKFRl
c3RJbXBvcnRTaW1wbGUpOgorICAgICAgICAoVGVzdEltcG9ydE1pc3NpbmcpOgorICAgICAgICAq
IHdhc20vdjgvZXhjZXB0aW9ucy1yZXRocm93LmpzOiBBZGRlZC4KKyAgICAgICAgKFRlc3RSZXRo
cm93SW5DYXRjaCk6CisgICAgICAgIChUZXN0UmV0aHJvd0luQ2F0Y2hBbGwpOgorICAgICAgICAo
VGVzdFJldGhyb3dOZXN0ZWQpOgorICAgICAgICAoVGVzdFJldGhyb3dSZWNhdGNoKToKKyAgICAg
ICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMtc2hhcmVkLmpzOiBBZGRlZC4KKyAgICAgICAgKE5ld0V4
cG9ydGVkRXhjZXB0aW9uKToKKyAgICAgICAgKFRlc3RTaW5nbGVJbnN0YW5jZS5sZXQuaW5zdGFu
Y2UuYnVpbGRlci5pbnN0YW50aWF0ZS4pOgorICAgICAgICAoVGVzdFNpbmdsZUluc3RhbmNlKToK
KyAgICAgICAgKFRlc3RNdWx0aUluc3RhbmNlTm9uU2hhcmVkLmxldC5pbnN0YW5jZTIuYnVpbGRl
ci5pbnN0YW50aWF0ZS4pOgorICAgICAgICAoVGVzdE11bHRpSW5zdGFuY2VTaGFyZWQubGV0Lmlu
c3RhbmNlMi5idWlsZGVyLmluc3RhbnRpYXRlLik6CisgICAgICAgIChUZXN0TXVsdGlNb2R1bGVT
aGFyZWQubGV0Lmluc3RhbmNlMi5idWlsZGVyMi5pbnN0YW50aWF0ZS4pOgorICAgICAgICAqIHdh
c20vdjgvZXhjZXB0aW9ucy10eXBlLXJlZmxlY3Rpb24uanM6IEFkZGVkLgorICAgICAgICAoVGVz
dEV4cG9ydCk6CisgICAgICAgIChUZXN0SW1wb3J0RXhwb3J0KToKKyAgICAgICAgKiB3YXNtL3Y4
L2V4Y2VwdGlvbnMtdXRpbHMuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0V2FzbVRocm93cyk6
CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKFRlc3RU
aHJvd1NpbXBsZSk6CisgICAgICAgIChUZXN0Q2F0Y2hTaW1wbGUpOgorICAgICAgICAoVGVzdFRy
YXBOb3RDYXVnaHQpOgorICAgICAgICAoVGVzdFRyYXBWaWFKU05vdENhdWdodC5qc19pbXBvcnQp
OgorICAgICAgICAoVGVzdE1hbnVhbGx5VGhyb3duUnVudGltZUVycm9yQ2F1Z2h0LnRocm93X2V4
Yyk6CisgICAgICAgIChUZXN0TWFudWFsbHlUaHJvd25SdW50aW1lRXJyb3JDYXVnaHQpOgorICAg
ICAgICAoVGVzdEV4bldpdGhXYXNtUHJvdG9Ob3RDYXVnaHQuanNfaW1wb3J0KToKKyAgICAgICAg
KFRlc3RFeG5XaXRoV2FzbVByb3RvTm90Q2F1Z2h0KToKKyAgICAgICAgKFRlc3RTdGFja092ZXJm
bG93Tm90Q2F1Z2h0LnN0YWNrX292ZXJmbG93KToKKyAgICAgICAgKFRlc3RTdGFja092ZXJmbG93
Tm90Q2F1Z2h0KToKKyAgICAgICAgKFRlc3RUaHJvd1BhcmFtSSk6CisgICAgICAgIChUZXN0VGhy
b3dQYXJhbUYpOgorICAgICAgICAoVGVzdFRocm93UGFyYW1MKToKKyAgICAgICAgKFRlc3RUaHJv
d1BhcmFtRCk6CisgICAgICAgIChUZXN0Q2F0Y2hDcm9zc0Z1bmN0aW9ucy50aHJvd192YWx1ZSk6
CisgICAgICAgIChUZXN0Q2F0Y2hDcm9zc0Z1bmN0aW9ucy50aHJvd19zdHJpbmcpOgorICAgICAg
ICAoVGVzdENhdGNoQ3Jvc3NGdW5jdGlvbnMudGhyb3dfdW5kZWZpbmVkKToKKyAgICAgICAgKFRl
c3RDYXRjaENyb3NzRnVuY3Rpb25zLnRocm93X2ZwKToKKyAgICAgICAgKFRlc3RDYXRjaENyb3Nz
RnVuY3Rpb25zLnRocm93X2xhcmdlKToKKyAgICAgICAgKFRlc3REZWxlZ2F0ZU5vVGhyb3cpOgor
ICAgICAgICAoVGVzdERlbGVnYXRlVGhyb3cpOgorICAgICAgICAoVGVzdERlbGVnYXRlVGhyb3dO
b0NhdGNoKToKKyAgICAgICAgKFRlc3REZWxlZ2F0ZU1lcmdlKToKKyAgICAgICAgKFRlc3REZWxl
Z2F0ZTEpOgorICAgICAgICAoVGVzdERlbGVnYXRlVW5yZWFjaGFibGUpOgorICAgICAgICAoVGVz
dERlbGVnYXRlVG9DYWxsZXIpOgorICAgICAgICAoVGVzdFVucmVhY2hhYmxlSW5DYXRjaEFsbCk6
CisgICAgICAgIChUZXN0VGhyb3dXaXRoTG9jYWwpOgorICAgICAgICAoVGVzdENhdGNobGVzc1Ry
eSk6CisgICAgICAgICogd2FzbS92OC9tanN1bml0LmpzOiBBZGRlZC4KKyAgICAgICAgKE1qc1Vu
aXRBc3NlcnRpb25FcnJvcik6CisgICAgICAgIChNanNVbml0QXNzZXJ0aW9uRXJyb3IucHJvdG90
eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKGNhdGNoKToKKyAgICAgICAgKGNsYXNzT2YpOgorICAg
ICAgICAoVmFsdWVPZik6CisgICAgICAgIChwcmV0dHlQcmludGVkKToKKyAgICAgICAgKHByZXR0
eVByaW50ZWRBcnJheUVsZW1lbnQpOgorICAgICAgICAoZmFpbFdpdGhNZXNzYWdlKToKKyAgICAg
ICAgKGZvcm1hdEZhaWx1cmVUZXh0KToKKyAgICAgICAgKGZhaWwpOgorICAgICAgICAoZGVlcE9i
amVjdEVxdWFscyk6CisgICAgICAgIChkZWVwRXF1YWxzKToKKyAgICAgICAgKGFzc2VydFNhbWUp
OgorICAgICAgICAoYXNzZXJ0Tm90U2FtZSk6CisgICAgICAgIChhc3NlcnRFcXVhbHMpOgorICAg
ICAgICAoYXNzZXJ0Tm90RXF1YWxzKToKKyAgICAgICAgKGFzc2VydEVxdWFsc0RlbHRhKToKKyAg
ICAgICAgKGFzc2VydEFycmF5RXF1YWxzKToKKyAgICAgICAgKGFzc2VydFByb3BlcnRpZXNFcXVh
bCk6CisgICAgICAgIChhc3NlcnRUb1N0cmluZ0VxdWFscyk6CisgICAgICAgIChhc3NlcnRUcnVl
KToKKyAgICAgICAgKGFzc2VydEZhbHNlKToKKyAgICAgICAgKGFzc2VydE51bGwpOgorICAgICAg
ICAoYXNzZXJ0Tm90TnVsbCk6CisgICAgICAgIChleGVjdXRlQ29kZSk6CisgICAgICAgIChjaGVj
a0V4Y2VwdGlvbik6CisgICAgICAgIChhc3NlcnRUaHJvd3MpOgorICAgICAgICAoYXNzZXJ0VGhy
b3dzRXF1YWxzKToKKyAgICAgICAgKGFzc2VydFRocm93c0FzeW5jKToKKyAgICAgICAgKGFzc2Vy
dEluc3RhbmNlb2YpOgorICAgICAgICAoYXNzZXJ0RG9lc05vdFRocm93KToKKyAgICAgICAgKGFz
c2VydFVucmVhY2hhYmxlKToKKyAgICAgICAgKGFzc2VydENvbnRhaW5zKToKKyAgICAgICAgKGFz
c2VydE1hdGNoZXMpOgorICAgICAgICAoY29uY2F0ZW5hdGVFcnJvcnMpOgorICAgICAgICAoYXNz
ZXJ0UHJvbWlzZVJlc3VsdCk6CisgICAgICAgIChPcHRpbWl6YXRpb25TdGF0dXMpOgorICAgICAg
ICAoYXNzZXJ0VW5vcHRpbWl6ZWQpOgorICAgICAgICAoYXNzZXJ0T3B0aW1pemVkKToKKyAgICAg
ICAgKGlzTmV2ZXJPcHRpbWl6ZUxpdGVNb2RlKToKKyAgICAgICAgKGlzTmV2ZXJPcHRpbWl6ZSk6
CisgICAgICAgIChpc0Fsd2F5c09wdGltaXplKToKKyAgICAgICAgKGlzSW50ZXJwcmV0ZWQpOgor
ICAgICAgICAoaXNCYXNlbGluZSk6CisgICAgICAgIChpc1Vub3B0aW1pemVkKToKKyAgICAgICAg
KGlzT3B0aW1pemVkKToKKyAgICAgICAgKGlzVHVyYm9GYW5uZWQpOgorICAgICAgICAoTWpzVW5p
dEFzc2VydGlvbkVycm9yLnByZXBhcmVTdGFja1RyYWNlKToKKyAgICAgICAgKiB3YXNtL3Y4L3dh
c20tbW9kdWxlLWJ1aWxkZXIuanM6IEFkZGVkLgorICAgICAgICAoYnl0ZXMpOgorICAgICAgICAo
d2FzbU9wdFJlZlR5cGUpOgorICAgICAgICAod2FzbVJlZlR5cGUpOgorICAgICAgICAod2FzbVJ0
dCk6CisgICAgICAgICh3YXNtUnR0Tm9EZXB0aCk6CisgICAgICAgIChtYWtlU2lnKToKKyAgICAg
ICAgKG1ha2VTaWdfdl94KToKKyAgICAgICAgKG1ha2VTaWdfeF92KToKKyAgICAgICAgKG1ha2VT
aWdfdl94eCk6CisgICAgICAgIChtYWtlU2lnX3Jfdik6CisgICAgICAgIChtYWtlU2lnX3JfeCk6
CisgICAgICAgIChtYWtlU2lnX3JfeHgpOgorICAgICAgICAoZGVmaW5lV2FzbU9wY29kZSk6Cisg
ICAgICAgIChhc3NlcnRUcmFwcyk6CisgICAgICAgIChCaW5hcnkpOgorICAgICAgICAoQmluYXJ5
LnByb3RvdHlwZS5lbnN1cmVfc3BhY2UpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS50cnVu
Y19idWZmZXIpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5yZXNldCk6CisgICAgICAgIChC
aW5hcnkucHJvdG90eXBlLmVtaXRfdTgpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0
X3UxNik6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfdTMyKToKKyAgICAgICAgKEJp
bmFyeS5wcm90b3R5cGUuZW1pdF9sZWJfdSk6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVt
aXRfdTMydik6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfdTY0dik6CisgICAgICAg
IChCaW5hcnkucHJvdG90eXBlLmVtaXRfYnl0ZXMpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlw
ZS5lbWl0X3N0cmluZyk6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfaGVhcF90eXBl
KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF90eXBlKToKKyAgICAgICAgKEJpbmFy
eS5wcm90b3R5cGUuZW1pdF9pbml0X2V4cHJfcmVjdXJzaXZlKToKKyAgICAgICAgKEJpbmFyeS5w
cm90b3R5cGUuZW1pdF9pbml0X2V4cHIpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0
X2hlYWRlcik6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfc2VjdGlvbik6CisgICAg
ICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyKToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIu
cHJvdG90eXBlLm51bUxvY2FsTmFtZXMpOgorICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5w
cm90b3R5cGUuZXhwb3J0QXMpOgorICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5
cGUuZXhwb3J0RnVuYyk6CisgICAgICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5z
ZXRDb21waWxhdGlvbkhpbnQpOgorICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5
cGUuYWRkQm9keSk6CisgICAgICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5hZGRC
b2R5V2l0aEVuZCk6CisgICAgICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5nZXRO
dW1Mb2NhbHMpOgorICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuYWRkTG9j
YWxzKToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLmVuZCk6CisgICAg
ICAgIChXYXNtSW5pdEV4cHIuSTMyQ29uc3QpOgorICAgICAgICAoV2FzbUluaXRFeHByLkk2NENv
bnN0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5GMzJDb25zdCk6CisgICAgICAgIChXYXNtSW5p
dEV4cHIuRjY0Q29uc3QpOgorICAgICAgICAoV2FzbUluaXRFeHByLlMxMjhDb25zdCk6CisgICAg
ICAgIChXYXNtSW5pdEV4cHIuR2xvYmFsR2V0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5SZWZG
dW5jKToKKyAgICAgICAgKFdhc21Jbml0RXhwci5SZWZOdWxsKToKKyAgICAgICAgKFdhc21Jbml0
RXhwci5TdHJ1Y3ROZXdXaXRoUnR0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5TdHJ1Y3ROZXcp
OgorICAgICAgICAoV2FzbUluaXRFeHByLlN0cnVjdE5ld0RlZmF1bHRXaXRoUnR0KToKKyAgICAg
ICAgKFdhc21Jbml0RXhwci5TdHJ1Y3ROZXdEZWZhdWx0KToKKyAgICAgICAgKFdhc21Jbml0RXhw
ci5BcnJheUluaXQpOgorICAgICAgICAoV2FzbUluaXRFeHByLkFycmF5SW5pdFN0YXRpYyk6Cisg
ICAgICAgIChXYXNtSW5pdEV4cHIuUnR0Q2Fub24pOgorICAgICAgICAoV2FzbUluaXRFeHByLlJ0
dFN1Yik6CisgICAgICAgIChXYXNtSW5pdEV4cHIuUnR0RnJlc2hTdWIpOgorICAgICAgICAoV2Fz
bUluaXRFeHByLmRlZmF1bHRGb3IpOgorICAgICAgICAoV2FzbUluaXRFeHByKToKKyAgICAgICAg
KFdhc21HbG9iYWxCdWlsZGVyKToKKyAgICAgICAgKFdhc21HbG9iYWxCdWlsZGVyLnByb3RvdHlw
ZS5leHBvcnRBcyk6CisgICAgICAgIChXYXNtVGFibGVCdWlsZGVyKToKKyAgICAgICAgKFdhc21U
YWJsZUJ1aWxkZXIucHJvdG90eXBlLmV4cG9ydEFzKToKKyAgICAgICAgKG1ha2VGaWVsZCk6Cisg
ICAgICAgIChXYXNtU3RydWN0KToKKyAgICAgICAgKFdhc21TdHJ1Y3RTdWJ0eXBlKToKKyAgICAg
ICAgKFdhc21BcnJheSk6CisgICAgICAgIChXYXNtQXJyYXlTdWJ0eXBlKToKKyAgICAgICAgKFdh
c21FbGVtU2VnbWVudCk6CisgICAgICAgIChXYXNtRWxlbVNlZ21lbnQucHJvdG90eXBlLmlzX2Fj
dGl2ZSk6CisgICAgICAgIChXYXNtRWxlbVNlZ21lbnQucHJvdG90eXBlLmlzX3Bhc3NpdmUpOgor
ICAgICAgICAoV2FzbUVsZW1TZWdtZW50LnByb3RvdHlwZS5pc19kZWNsYXJhdGl2ZSk6CisgICAg
ICAgIChXYXNtRWxlbVNlZ21lbnQucHJvdG90eXBlLmV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKToK
KyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVy
LnByb3RvdHlwZS5hZGRTdGFydCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5
cGUuYWRkTWVtb3J5KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRN
ZW1vcnk2NCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkRXhwbGlj
aXRTZWN0aW9uKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5zdHJpbmdU
b0J5dGVzKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5jcmVhdGVDdXN0
b21TZWN0aW9uKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRDdXN0
b21TZWN0aW9uKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRUeXBl
KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRTdHJ1Y3QpOgorICAg
ICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZFN0cnVjdFN1YnR5cGUpOgorICAg
ICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEFycmF5KToKKyAgICAgICAgKFdh
c21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRBcnJheVN1YnR5cGUpOgorICAgICAgICAoV2Fz
bU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEdsb2JhbCk6CisgICAgICAgIChXYXNtTW9kdWxl
QnVpbGRlci5wcm90b3R5cGUuYWRkVGFibGUpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIu
cHJvdG90eXBlLmFkZFRhZyk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUu
YWRkRnVuY3Rpb24pOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZElt
cG9ydCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkSW1wb3J0ZWRH
bG9iYWwpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEltcG9ydGVk
TWVtb3J5KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRJbXBvcnRl
ZFRhYmxlKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRJbXBvcnRl
ZFRhZyk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkRXhwb3J0KToK
KyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRFeHBvcnRPZktpbmQpOgor
ICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLnNldENvbXBpbGF0aW9uSGludCk6
CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkRGF0YVNlZ21lbnQpOgor
ICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZFBhc3NpdmVEYXRhU2VnbWVu
dCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuZXhwb3J0TWVtb3J5QXMp
OgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEFjdGl2ZUVsZW1lbnRT
ZWdtZW50KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRQYXNzaXZl
RWxlbWVudFNlZ21lbnQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFk
ZERlY2xhcmF0aXZlRWxlbWVudFNlZ21lbnQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIu
cHJvdG90eXBlLmFwcGVuZFRvVGFibGUpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJv
dG90eXBlLnNldFRhYmxlQm91bmRzKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3Rv
dHlwZS5zZXROYW1lKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS50b0J1
ZmZlcik6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUudG9BcnJheSk6Cisg
ICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuaW5zdGFudGlhdGUpOgorICAgICAg
ICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFzeW5jSW5zdGFudGlhdGUpOgorICAgICAg
ICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLnRvTW9kdWxlKToKKyAgICAgICAgKHdhc21T
aWduZWRMZWIpOgorICAgICAgICAod2FzbVVuc2lnbmVkTGViKToKKyAgICAgICAgKHdhc21JMzJD
b25zdCk6CisgICAgICAgICh3YXNtSTY0Q29uc3QpOgorICAgICAgICAod2FzbUYzMkNvbnN0KToK
KyAgICAgICAgKHdhc21GNjRDb25zdCk6CisgICAgICAgICh3YXNtUzEyOENvbnN0KToKKyAgICAg
ICAgKGdldE9wY29kZU5hbWUpOgorICAgICAgICAqIHdhc20vd2FzbS5qc29uOgorCiAyMDIxLTEw
LTA1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBDb2RlQmxvY2sg
c2hvdWxkIG5vdCBhZGQvcmVtb3ZlIExvb3BIaW50RXhlY3V0aW9uQ291bnRlcnMuCmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3dhc20ueWFtbCBiL0pTVGVzdHMvd2FzbS55YW1sCmluZGV4IDJlY2I2MzRk
YmY1YjJiZWU3MmNkZDEzYzQwMTc5YmYyZjVlOTRiYzEuLjFmNDUxYmM5MTE4Y2NhYzMzOTg5NzBl
YTQ5YjI1ODljYWYzM2NjMjcgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS55YW1sCisrKyBiL0pT
VGVzdHMvd2FzbS55YW1sCkBAIC00NSw2ICs0NSw4IEBACiAgIGNtZDogcnVuV2ViQXNzZW1ibHkg
dW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2FzbS9zZWxmLXRlc3QvCiAgIGNtZDog
cnVuV2ViQXNzZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcworLSBwYXRoOiB3YXNt
L3Y4LworICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUoOm5vX21vZHVsZSwgIm1qc3VuaXQuanMi
KSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogCiAtIHBhdGg6IHdhc20vcmVmZXJlbmNlcy1zcGVj
LXRlc3RzL2VsZW0ud2FzdC5qcwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5UmVmZXJlbmNlU3BlY1Rl
c3QgOm5vcm1hbApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMgYi9KU1Rlc3Rz
L3dhc20vQnVpbGRlci5qcwppbmRleCAzMmZmZTZiYmI1NjFhNTMzMzg1N2VkMjMxYjA0N2E3ZjJh
ZmJmMTE1Li4xMTAxZjcyNWNjZGRiMGNjMWU4OWEwNWM3YWRkN2JiNDlkMmY1OTdjIDEwMDY0NAot
LS0gYS9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcworKysgYi9KU1Rlc3RzL3dhc20vQnVpbGRlci5q
cwpAQCAtMTI4LDYgKzEyOCwxOCBAQCBjb25zdCBfaW1wb3J0VGFibGVDb250aW51YXRpb24gPSAo
YnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKICAgICB9OwogfTsKIAorY29uc3Qg
X2ltcG9ydEV4Y2VwdGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVp
bGRlcikgPT4geworICAgIHJldHVybiAobW9kdWxlLCBmaWVsZCwgdHlwZSkgPT4geworICAgICAg
ICBhc3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1wb3J0IGZ1bmN0aW9uIG1vZHVsZSBzaG91bGQg
YmUgYSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOworICAgICAgICBhc3NlcnQuaXNTdHJpbmco
ZmllbGQsIGBJbXBvcnQgZnVuY3Rpb24gZmllbGQgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7
ZmllbGR9ImApOworICAgICAgICBjb25zdCB0eXBlU2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rp
b24oIlR5cGUiKTsKKyAgICAgICAgdHlwZSA9IF9tYXliZVJlZ2lzdGVyVHlwZShidWlsZGVyLCB0
eXBlKTsKKyAgICAgICAgY29uc3QgdGFnID0gMDsKKyAgICAgICAgc2VjdGlvbi5kYXRhLnB1c2go
eyBmaWVsZCwgdHlwZSwgdGFnLCBraW5kOiAiRXhjZXB0aW9uIiwgbW9kdWxlIH0pOworICAgICAg
ICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihuZXh0QnVpbGRlcik7CisgICAgfQorfTsK
KwogY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rpb24s
IG5leHRCdWlsZGVyKSA9PiB7CiAgICAgcmV0dXJuIChmaWVsZCwgaW5kZXgsIHR5cGUpID0+IHsK
ICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKGZpZWxkLCBgRXhwb3J0IGZ1bmN0aW9uIGZpZWxkIHNo
b3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKQEAgLTIxNSw2ICsyMjcsMTQgQEAg
Y29uc3QgX2V4cG9ydFRhYmxlQ29udGludWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRC
dWlsZGVyKSA9PiB7CiAgICAgfQogfTsKIAorY29uc3QgX2V4cG9ydEV4Y2VwdGlvbkNvbnRpbnVh
dGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4geworICAgIHJldHVybiAo
ZmllbGQsIGluZGV4KSA9PiB7CisgICAgICAgIGFzc2VydC5pc051bWJlcihpbmRleCwgYEV4Y2Vw
dGlvbiBleHBvcnRzIG9ubHkgc3VwcG9ydCBudW1iZXIgaW5kaWNlc2ApOworICAgICAgICBzZWN0
aW9uLmRhdGEucHVzaCh7ZmllbGQsIGtpbmQ6ICJFeGNlcHRpb24iLCBpbmRleH0pOworICAgICAg
ICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihuZXh0QnVpbGRlcik7CisgICAgfQorfTsK
KwogY29uc3QgX2ltcG9ydEdsb2JhbENvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBu
ZXh0QnVpbGRlcikgPT4gewogICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgIGNvbnN0IGdsb2Jh
bEJ1aWxkZXIgPSB7CkBAIC0zMDcsNiArMzI3LDcgQEAgY29uc3QgX2NoZWNrSW1tcyA9IChvcCwg
aW1tcywgZXhwZWN0ZWRJbW1zLCByZXQpID0+IHsKICAgICAgICAgY2FzZSAidGFyZ2V0X3RhYmxl
IjogYnJlYWs7IC8vIGltcHJvdmUgY2hlY2tpbmcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MzQyMQogICAgICAgICBjYXNlICJyZXNlcnZlZCI6IGJyZWFrOyAvLyBp
bXByb3ZlIGNoZWNraW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjM0MjEKICAgICAgICAgY2FzZSAidGFibGVfaW5kZXgiOiBicmVhazsgLy8gaW1wcm92ZSBjaGVj
a2luZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNDIxCisgICAg
ICAgIGNhc2UgImV4biI6IGJyZWFrOwogICAgICAgICBjYXNlICJyZWZ0eXBlIjoKICAgICAgICAg
ICAgIGFzc2VydC50cnV0aHkoV0FTTS5pc1ZhbGlkUmVmVHlwZShpbW1zW2lkeF0pLCBgSW52YWxp
ZCByZWYgdHlwZSBvbiAke29wfTogIiR7aW1tc1tpZHhdfSJgKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMzM1LDExICszNTYsMTMgQEAgY29uc3QgX2NyZWF0ZUZ1bmN0aW9uQnVpbGRlciA9IChm
dW5jLCBidWlsZGVyLCBwcmV2aW91c0J1aWxkZXIpID0+IHsKICAgICAgICAgICAgICAgICBuZXh0
QnVpbGRlciA9IGZ1bmN0aW9uQnVpbGRlcjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgIkVuZCI6CisgICAgICAgICAgICBjYXNlICJEZWxlZ2F0ZSI6CiAgICAgICAg
ICAgICAgICAgbmV4dEJ1aWxkZXIgPSBwcmV2aW91c0J1aWxkZXI7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlICJCbG9jayI6CiAgICAgICAgICAgICBjYXNlICJMb29w
IjoKICAgICAgICAgICAgIGNhc2UgIklmIjoKKyAgICAgICAgICAgIGNhc2UgIlRyeSI6CiAgICAg
ICAgICAgICAgICAgbmV4dEJ1aWxkZXIgPSBfY3JlYXRlRnVuY3Rpb25CdWlsZGVyKGZ1bmMsIGJ1
aWxkZXIsIGZ1bmN0aW9uQnVpbGRlcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CkBAIC00ODgsNiArNTExLDcgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7
CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuRnVuY3Rpb24gPSBfaW1wb3J0RnVu
Y3Rpb25Db250aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAg
ICAgICAgIGltcG9ydEJ1aWxkZXIuTWVtb3J5ID0gX2ltcG9ydE1lbW9yeUNvbnRpbnVhdGlvbih0
aGlzLCBzLCBpbXBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRl
ci5UYWJsZSA9IF9pbXBvcnRUYWJsZUNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVy
KTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5FeGNlcHRpb24gPSBfaW1wb3J0
RXhjZXB0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihpbXBvcnRCdWlsZGVyKTsK
ICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTMxLDYgKzU1
NSwyMyBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsKICAgICAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgICAgICBjYXNlICJFeGNlcHRpb24i
OiB7CisgICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZGF0YUJ1aWxkZXIgPSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBFbmQ6ICgpID0+IHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU6
IChzaWduYXR1cmUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHlwZSA9
IF9tYXliZVJlZ2lzdGVyVHlwZSh0aGlzLCBzaWduYXR1cmUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHMuZGF0YS5wdXNoKHsgdGFnOiAwLCB0eXBlIH0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKGRhdGFCdWlsZGVyKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBhZGQgdGFncyB3aXRoIG5vbi16ZXJvIHZhbHVlIHRoZW4gd2UgY2FuIGFkZCBhIG5ldyBt
ZW1iZXIuCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKGRhdGFCdWlsZGVyKTsKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBj
YXNlICJHbG9iYWwiOgogICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlv
bik7CkBAIC01NjksNiArNjEwLDcgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAg
ICAgICAgICAgICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuRnVuY3Rpb24gPSBfZXhwb3J0RnVuY3Rp
b25Db250aW51YXRpb24odGhpcywgcywgZXhwb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAgICAg
ICAgIGV4cG9ydEJ1aWxkZXIuTWVtb3J5ID0gX2V4cG9ydE1lbW9yeUNvbnRpbnVhdGlvbih0aGlz
LCBzLCBleHBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAgICAgZXhwb3J0QnVpbGRlci5U
YWJsZSA9IF9leHBvcnRUYWJsZUNvbnRpbnVhdGlvbih0aGlzLCBzLCBleHBvcnRCdWlsZGVyKTsK
KyAgICAgICAgICAgICAgICAgICAgZXhwb3J0QnVpbGRlci5FeGNlcHRpb24gPSBfZXhwb3J0RXhj
ZXB0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGV4cG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihleHBvcnRCdWlsZGVyKTsKICAg
ICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzM3LDE1ICs3Nzks
NiBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsKICAgICAgICAgICAgIGZvciAoY29u
c3QgcyBvZiB0aGlzLl9zZWN0aW9ucykKICAgICAgICAgICAgICAgICBpZiAobnVtYmVyICE9PSBf
dW5rbm93blNlY3Rpb25JZCkKICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmZhbHN5KHMubmFt
ZSA9PT0gbmFtZSAmJiBzLmlkID09PSBudW1iZXIsIGBDYW5ub3QgaGF2ZSB0d28gc2VjdGlvbnMg
d2l0aCB0aGUgc2FtZSBuYW1lICIke25hbWV9IiBhbmQgSUQgJHtudW1iZXJ9YCk7Ci0gICAgICAg
ICAgICAvLyBDaGVjayBvcmRlcmluZy4KLSAgICAgICAgICAgIGlmICgobnVtYmVyICE9PSBfdW5r
bm93blNlY3Rpb25JZCkgJiYgKHRoaXMuX3NlY3Rpb25zLmxlbmd0aCAhPT0gMCkpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fc2VjdGlvbnMubGVuZ3RoIC0gMTsgaSA+PSAw
OyAtLWkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NlY3Rpb25zW2ldLmlkID09
PSBfdW5rbm93blNlY3Rpb25JZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgICAgICBhc3NlcnQubGUodGhpcy5fc2VjdGlvbnNbaV0uaWQsIG51bWJl
ciwgYEJhZCBzZWN0aW9uIG9yZGVyaW5nOiAiJHt0aGlzLl9zZWN0aW9uc1tpXS5uYW1lfSIgY2Fu
bm90IHByZWNlZGUgIiR7bmFtZX0iYCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBjb25zdCBz
ID0gT2JqZWN0LmFzc2lnbih7IG5hbWU6IG5hbWUsIGlkOiBudW1iZXIsIGRhdGE6IFtdIH0sIGV4
dHJhT2JqZWN0IHx8IHt9KTsKICAgICAgICAgdGhpcy5fc2VjdGlvbnMucHVzaChzKTsKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzIGIvSlNUZXN0
cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMKaW5kZXggMzU4YmI0ODJkNGUwNzMy
NmEyMGU1ODkzNGU1NTI5MmJiNTUxNjM3MC4uZTljNTc2MjYwZjVkMmU1YjY3ZmFlOGEzZGI1MGU2
Yzc0MTY4ODgxNyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlC
aW5hcnkuanMKKysrIGIvSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMK
QEAgLTE0Myw2ICsxNDMsMTAgQEAgY29uc3QgZW1pdHRlcnMgPSB7CiAgICAgICAgICAgICBjYXNl
ICJHbG9iYWwiOgogICAgICAgICAgICAgICAgIHB1dEdsb2JhbFR5cGUoYmluLCBlbnRyeS5nbG9i
YWxEZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
ICJFeGNlcHRpb24iOgorICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBlbnRy
eS50YWcpOworICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBlbnRyeS50eXBl
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0sCkBAIC0xODUsNiArMTg5LDcgQEAgY29uc3QgZW1pdHRlcnMgPSB7CiAgICAgICAgICAgICBj
YXNlICJGdW5jdGlvbiI6CiAgICAgICAgICAgICBjYXNlICJNZW1vcnkiOgogICAgICAgICAgICAg
Y2FzZSAiVGFibGUiOgorICAgICAgICAgICAgY2FzZSAiRXhjZXB0aW9uIjoKICAgICAgICAgICAg
ICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZW50cnkuaW5kZXgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1lbnRh
dGlvbiBwcm9ibGVtOiB1bmV4cGVjdGVkIGtpbmQgJHtlbnRyeS5raW5kfWApOwpAQCAtMjU0LDYg
KzI1OSwxNCBAQCBjb25zdCBlbWl0dGVycyA9IHsKICAgICAgICAgICAgICAgICBwdXQoYmluLCAi
dWludDgiLCBieXRlKTsKICAgICAgICAgfQogICAgIH0sCisKKyAgICBFeGNlcHRpb246IChzZWN0
aW9uLCBiaW4pID0+IHsKKyAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIHNlY3Rpb24uZGF0
YS5sZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0IGV4biBvZiBzZWN0aW9uLmRhdGEpIHsKKyAg
ICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBleG4udGFnKTsKKyAgICAgICAgICAgIHB1
dChiaW4sICJ2YXJ1aW50MzIiLCBleG4udHlwZSk7CisgICAgICAgIH0KKyAgICB9LAogfTsKIAog
ZXhwb3J0IGNvbnN0IEJpbmFyeSA9IChwcmVhbWJsZSwgc2VjdGlvbnMpID0+IHsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9hc3NlcnQuanMgYi9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCmluZGV4
IDZmZGI2NWE0ZGFkZGMwZDc3YTcyNGMwMTkyZDhmYjUzYmYxMGJmNjguLjk0ODM4ZDk3ZWY1NTBm
NjFmZDIzODZjM2YyYWJkOGVmOTIzNmU0MDIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9hc3Nl
cnQuanMKKysrIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwpAQCAtMTI0LDcgKzEyNCw3IEBAIGNv
bnN0IF90aHJvd3MgPSAoZnVuYywgdHlwZSwgbWVzc2FnZSwgLi4uYXJncykgPT4gewogICAgIHRy
eSB7CiAgICAgICAgIGZ1bmMoLi4uYXJncyk7CiAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICBp
ZiAoZSBpbnN0YW5jZW9mIHR5cGUgJiYgZS5tZXNzYWdlLmluZGV4T2YobWVzc2FnZSkgPj0gMCkK
KyAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiB0eXBlICYmICh0eXBlb2YoZS5tZXNzYWdlKSA9PSAi
dW5kZWZpbmVkIiB8fCBlLm1lc3NhZ2UuaW5kZXhPZihtZXNzYWdlKSA+PSAwKSkKICAgICAgICAg
ICAgIHJldHVybiBlOwogICAgICAgICBfZmFpbChgRXhwZWN0ZWQgdG8gdGhyb3cgYSAke3R5cGUu
bmFtZX0gd2l0aCBtZXNzYWdlICIke21lc3NhZ2V9IiwgZ290ICR7ZS5uYW1lfSB3aXRoIG1lc3Nh
Z2UgIiR7ZS5tZXNzYWdlfSJgKTsKICAgICB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc2Vs
Zi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMgYi9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3Rf
QnVpbGRlckpTT04uanMKaW5kZXggYmIxYjk3YjE5ZDVjYzFjNzhiNWYwMDdkYzY5MGFhZGJkNzBk
MjBmOC4uMjA5ZjIwYjc2YmJhOGI3MGM1MTcyMWVlNDU2ODNkMWY3NjAzMmE2ZiAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzCisrKyBiL0pTVGVz
dHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcwpAQCAtMTQwLDExICsxNDAsNiBA
QCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZuLCBtZXNzYWdlKSA9PiB7CiAgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMCk7CiB9KSgpOwogCi0oZnVuY3Rpb24gSW1w
b3J0QmVmb3JlVHlwZVNlY3Rpb25zKCkgewotICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSku
SW1wb3J0KCkuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBiLlR5cGUoKSwgRXJyb3Is
IGBFeHBlY3RlZDogIjIiID4gIjEiOiBCYWQgc2VjdGlvbiBvcmRlcmluZzogIkltcG9ydCIgY2Fu
bm90IHByZWNlZGUgIlR5cGUiYCk7Ci19KSgpOwotCiAoZnVuY3Rpb24gSW1wb3J0RnVuY3Rpb25X
aXRob3V0VHlwZVNlY3Rpb24oKSB7CiAgICAgY29uc3QgaSA9IChuZXcgQnVpbGRlcigpKS5JbXBv
cnQoKTsKICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGkuRnVuY3Rpb24oImZvbyIsICJiYXIiLCAw
KSwgRXJyb3IsIGBTaG91bGRuJ3QgYmUgdW5kZWZpbmVkOiBDYW4gbm90IHVzZSB0eXBlIDAgaWYg
YSB0eXBlIHNlY3Rpb24gaXMgbm90IHByZXNlbnRgKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS9zdHJlc3MvY2F0Y2gtd2l0aC1kZWxlZ2F0ZS5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvY2F0
Y2gtd2l0aC1kZWxlZ2F0ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzBiZWY1OTNjYzQyMzYyYjIyYWUyOTk3
NjQyYjMyODUxNDg4NTQyCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9j
YXRjaC13aXRoLWRlbGVnYXRlLmpzCkBAIC0wLDAgKzEsOTAgQEAKK2ltcG9ydCBCdWlsZGVyIGZy
b20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0Lmpz
JworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJh
bXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQor
ICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJm
b28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAu
VHJ5KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2Fs
bCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkRlbGVnYXRl
KDApCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykK
KyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQor
CisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9k
dWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0g
bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19
KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKworICAgIGZ1bmN0aW9u
IGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRh
ZywgW10pOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwg
Myk7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7
CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHku
RXhjZXB0aW9uKTsKK30KKworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAg
Yi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAg
ICAgICAgICAuRXhjZXB0aW9uKCJjb250ZXh0IiwgInRhZyIsIHsgcGFyYW1zOiBbImkzMiJdLCBy
ZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigi
Zm9vIiwgMSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAg
LlRyeSgiaTMyIikKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNh
bGwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5EZWxlZ2F0
ZSgwKQorICAgICAgICAgICAgLkNhdGNoKDEpCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkK
KworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1v
ZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgb3RoZXJUYWcgPSBu
ZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIiXX0pCisgICAgY29uc3QgaW5z
dGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2Fs
bGJhY2ssIHRhZzogb3RoZXJUYWcgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9y
dHMuZm9vOworICAgIGxldCBhcmdzID0gW107CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsK
KyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIGFyZ3MpOworICAg
IH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0
YWcgPSBvdGhlclRhZzsKKyAgICBhcmdzID0gWzEwMF07CisKKyAgICBsZXQgZXhuID0gYXNzZXJ0
LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cisg
ICAgYXNzZXJ0LmVxKGV4bi5nZXRBcmcodGFnLCAwKSwgMTAwKTsKK30KZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS9zdHJlc3MvY3JlYXRlLXRhZy1mcm9tLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVz
cy9jcmVhdGUtdGFnLWZyb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjI3OGQ2YzIxNzZjZmI1ODE0YWZhZTc2
ODRmMTlmZDU2ODEwMWZhOQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mv
Y3JlYXRlLXRhZy1mcm9tLmpzCkBAIC0wLDAgKzEsMjIgQEAKK2ltcG9ydCAqIGFzIGFzc2VydCBm
cm9tICcuLi9hc3NlcnQuanMnCisKK2xldCBwYXJhbWV0ZXJzID0gWyJpMzIiLCAiZjMyIiwgImV4
dGVybnJlZiJdOworCithc3NlcnQudGhyb3dzKFdlYkFzc2VtYmx5LlRhZywgVHlwZUVycm9yLCAi
Y2FsbGluZyBXZWJBc3NlbWJseS5UYWcgY29uc3RydWN0b3Igd2l0aG91dCBuZXcgaXMgaW52YWxp
ZCIpOworbGV0IHBhc3NlZFBhcmFtZXRlcnMgPSB7IHBhcmFtZXRlcnMgfTsKK2xldCB0YWcgPSBu
ZXcgV2ViQXNzZW1ibHkuVGFnKHBhc3NlZFBhcmFtZXRlcnMpOworCithc3NlcnQudHJ1dGh5KHRh
Zy50eXBlKCkgIT09IHBhc3NlZFBhcmFtZXRlcnMsICJUYWcgdHlwZSBzaG91bGQgcmV0dXJuIGEg
ZnJlc2ggb2JqZWN0Iik7Cithc3NlcnQuZXEodGFnLnR5cGUoKS5wYXJhbWV0ZXJzLCBwYXJhbWV0
ZXJzLCAiVGFncyB0eXBlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgcGFyYW1ldGVycyBwYXNz
ZWQgaW4iKTsKKworYXNzZXJ0LnRocm93cyhXZWJBc3NlbWJseS5FeGNlcHRpb24sIFR5cGVFcnJv
ciwgImNhbGxpbmcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGNvbnN0cnVjdG9yIHdpdGhvdXQgbmV3
IGlzIGludmFsaWQiKTsKKworbGV0IGV4Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRp
b24odGFnLCBbMSwgMi41LCBwYXJhbWV0ZXJzXSk7Cithc3NlcnQudHJ1dGh5KGV4Y2VwdGlvbi5p
cyh0YWcpKTsKK2Fzc2VydC5lcShleGNlcHRpb24uZ2V0QXJnKHRhZywgMCksIDEpOworYXNzZXJ0
LmVxKGV4Y2VwdGlvbi5nZXRBcmcodGFnLCAxKSwgMi41KTsKK2Fzc2VydC5lcShleGNlcHRpb24u
Z2V0QXJnKHRhZywgMiksIHBhcmFtZXRlcnMpOworCithc3NlcnQudGhyb3dzKCgpID0+IGV4Y2Vw
dGlvbi5nZXRBcmcodGFnLCAzKSwgUmFuZ2VFcnJvciwgIldlYkFzc2VtYmx5LkV4Y2VwdGlvbi5n
ZXRBcmcoKTogSW5kZXggb3V0IG9mIHJhbmdlIik7CisKK2Fzc2VydC5lcShXZWJBc3NlbWJseS5F
eGNlcHRpb24ucHJvdG90eXBlLl9fcHJvdG9fXywgT2JqZWN0LnByb3RvdHlwZSkKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLTIuanMgYi9K
U1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0yLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjBlYzdmYmFkMDc1ODk1NWVhMmY4ZTQzNDI4MTQxN2M5NmYwMGRiNzMKLS0tIC9kZXYvbnVs
bAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0yLmpz
CkBAIC0wLDAgKzEsOTAgQEAKKworaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycK
K2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK2NvbnN0IHBhZ2VTaXpl
ID0gNjQgKiAxMDI0OworY29uc3QgbnVtUGFnZXMgPSAxOworCit2YXIgaW5zdEE7Cit2YXIgaW5z
dEI7Cit2YXIgZ3JvdzsKK3ZhciBtZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiAwfTsKK3Zh
ciBtZW0gPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KG1lbW9yeURlc2NyaXB0aW9uKTsKKworZnVu
Y3Rpb24gdGVzdCgpIHsKKyAgICBhc3NlcnQuZXEoaW5zdEEuZXhwb3J0cy5tYWluKDQyKSwgNDIp
OworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5k
KCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuTWVtb3J5KCJjb250ZXh0IiwgIm1l
bSIsIG1lbW9yeURlc2NyaXB0aW9uKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0Iiwg
Imdyb3ciLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJ0cmFtcG9saW5lIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigidHJhbXBvbGluZSIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIg
fSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
IC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGluc3RCID0g
bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeworICAgICAgICBjb250ZXh0OiB7Cisg
ICAgICAgICAgICBtZW0sCisgICAgICAgICAgICBncm93KCkgeyBpbnN0QS5leHBvcnRzLmdyb3co
MSk7IH0sCisgICAgICAgIH0KKyAgICB9KTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVp
bGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAg
ICAgLk1lbW9yeSgiY29udGV4dCIsICJtZW0iLCBtZW1vcnlEZXNjcmlwdGlvbikKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJ0cmFtcG9saW5lIiwgeyBwYXJhbXM6IFtdLCByZXQ6
ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAg
ICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAg
ICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigibWFpbiIpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImdyb3ciKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJtYWluIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgw
KQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgICAgICAuQ2F0
Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAg
ICAgICAgLkkzMkxvYWQoMCwgMCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJncm93IiwgeyBwYXJhbXM6IFsiaTMyIl0s
IHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAg
ICAgICAgLkdyb3dNZW1vcnkoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoNDIpCisgICAg
ICAgICAgICAgICAgLkkzMlN0b3JlKDAsIDApCisgICAgICAgICAgICAgICAgLlRocm93KDApCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgaW5zdEEgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxl
LCB7CisgICAgICAgIGNvbnRleHQ6IHsKKyAgICAgICAgICAgIG1lbSwKKyAgICAgICAgICAgIHRy
YW1wb2xpbmU6IGluc3RCLmV4cG9ydHMudHJhbXBvbGluZSwKKyAgICAgICAgfQorICAgIH0pOwor
fQorCit0ZXN0KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1j
cm9zcy1pbnN0YW5jZS0zLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3Mt
aW5zdGFuY2UtMy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTg5ODBiZWI5M2Y2YzJjMzA2NGMyY2M5MTRlYWMx
YTEzNGMwNDgwCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRp
b24tY3Jvc3MtaW5zdGFuY2UtMy5qcwpAQCAtMCwwICsxLDc1IEBACitpbXBvcnQgQnVpbGRlciBm
cm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5q
cycKKworY29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7Citjb25zdCBudW1QYWdlcyA9IDE7CisK
K3ZhciBpbnN0QTsKK3ZhciBpbnN0QjsKK3ZhciBncm93OwordmFyIG1lbW9yeURlc2NyaXB0aW9u
ID0ge2luaXRpYWw6IG51bVBhZ2VzfTsKK3ZhciBtZW0gPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5
KG1lbW9yeURlc2NyaXB0aW9uKTsKKworZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBhc3NlcnQuZXEo
aW5zdEEuZXhwb3J0cy5tYWluKCksIDQyKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVp
bGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAg
ICAgLk1lbW9yeSgiY29udGV4dCIsICJtZW0iLCB7IGluaXRpYWw6IDAgfSkKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWdu
YXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oInRocm93IikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImV4IiwgMCkKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigidGhy
b3ciLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAgICAgLlRocm93
KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgaW5zdEIgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2Uo
bW9kdWxlLCB7IGNvbnRleHQ6IHsgbWVtOiBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsgaW5pdGlh
bDogMCB9KSB9IH0pOworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAg
Yi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuTWVtb3J5KCJj
b250ZXh0IiwgIm1lbSIsIG1lbW9yeURlc2NyaXB0aW9uKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjb250ZXh0IiwgInRocm93IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAg
ICAgICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJleCIsIHsgcGFyYW1zOiBbXSB9KQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigp
LlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYWluIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigibWFpbiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
aTMyIiB9KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgIC5J
MzJDb25zdCg0MikKKyAgICAgICAgICAgICAgICAuSTMyU3RvcmUoMCwgMCkKKyAgICAgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAg
ICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJMb2Fk
KDAsIDApCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAg
ICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgaW5zdEEg
PSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgLi4uaW5zdEIu
ZXhwb3J0cywgbWVtIH0gfSk7Cit9CisKK3Rlc3QoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVz
cy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2M2N2M5MTg2OWUyYWIy
ZGJlNzBkNWNlYzFlN2YyNTc4OThiNThmNgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2Fz
bS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLmpzCkBAIC0wLDAgKzEsNTggQEAKK2lt
cG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJv
bSAnLi4vYXNzZXJ0LmpzJworCit2YXIgaW5zdEE7Cit2YXIgaW5zdEI7CisKK2Z1bmN0aW9uIHRl
c3QoKSB7CisgICAgYXNzZXJ0LnRocm93cyhpbnN0QS5leHBvcnRzLm1haW4sIFdlYkFzc2VtYmx5
LkV4Y2VwdGlvbiwgIndhc20gZXhjZXB0aW9uIik7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisg
ICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvdyIpCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oInRocm93Iiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRocm93KDApCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgaW5zdEIgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxl
KTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0Iiwg
InRocm93IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbImkzMiIsICJpMzIiXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJtYWluIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigibWFpbiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9
KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5DYWxs
KDApCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJB
ZGQoKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
IC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGluc3RBID0g
bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IHRocm93OiBpbnN0
Qi5leHBvcnRzLnRocm93IH0gfSk7Cit9CisKK3Rlc3QoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS9zdHJlc3MvZXhjZXB0aW9uLWxpdmVuZXNzLXRpZXItdXAuanMgYi9KU1Rlc3RzL3dhc20v
c3RyZXNzL2V4Y2VwdGlvbi1saXZlbmVzcy10aWVyLXVwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlNjA1MjQw
ZDIxNWViMTQyMTAyYzg1ZjFjOTgwMzUyNGM4NWM2ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1saXZlbmVzcy10aWVyLXVwLmpzCkBAIC0wLDAgKzEs
ODcgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBh
c3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVy
KCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAg
ICAgLkV4Y2VwdGlvbigpCisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbImkzMiJd
fSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oInRhZyIsIDApCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBh
cmFtczogW10sIHJldDogImkzMiIgfSwgWyJpMzIiXSkKKyAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMWU2KQorICAgICAgICAgICAgICAgIC5TZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5U
cnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCg0MikKKyAgICAgICAgICAg
ICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAg
ICAgICAgICAgIC5Mb29wKCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5CbG9jaygi
dm9pZCIsIGIgPT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLkdldExvY2FsKDAp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkVxeigpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLkJySWYoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3Qo
MSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMyU3ViKCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuU2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuQnIoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAg
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAg
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisK
KworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1
bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBu
ZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKyAgICBjb25zdCB0YWcgPSBpbnN0YW5j
ZS5leHBvcnRzLnRhZzsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxs
LCBXZWJBc3NlbWJseS5FeGNlcHRpb24sICJ3YXNtIGV4Y2VwdGlvbiIpOworICAgIHRyeSB7Cisg
ICAgICAgIGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgYXNzZXJ0LnRydXRoeShlLmlzKHRhZykpOworICAgICAgICBhc3NlcnQuZXEoZS5nZXRBcmco
dGFnLCAwKSwgNDIpOworICAgIH0KK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4
dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KS5FbmQoKQorICAgICAg
ICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFy
YW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwi
LCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5HZXRM
b2NhbCgwKQorICAgICAgICAgICAgICAgIC5Mb29wKCJ2b2lkIikKKyAgICAgICAgICAgICAgICAg
ICAgLkNhbGwoMikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAg
ICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgICAg
ICAuSTMyRXF6KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5CcklmKDEpCisgICAgICAgICAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oIndyYXBwZXIiLCB7IHBhcmFtczogW10sIHJldDog
InZvaWQiIH0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKyAgICB2YXIg
Y291bnRlciA9IDFlNTsKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7Cisg
ICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0
IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7
IGNhbGxiYWNrOiBmdW5jdGlvbigpIHsgaWYgKCEtLWNvdW50ZXIpIHJldHVybiB0cnVlO30gfSB9
KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMCk7Cit9CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1tdWx0aXBsZS1pbnN0YW5jZXMu
anMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1tdWx0aXBsZS1pbnN0YW5jZXMuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzEwMjY3OWE5ZDExYTFiZTgxMzA4ZDYxN2I5N2RhYzlhYTdmMzBlZQotLS0g
L2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLW11bHRpcGxlLWlu
c3RhbmNlcy5qcwpAQCAtMCwwICsxLDMyIEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWls
ZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAg
IGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6
IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oInRo
cm93IikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oInRhZyIsIDApCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oInRocm93IiwgeyBwYXJhbXM6
IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAg
ICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKwor
ICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgeworICAgICAgICBsZXQgaW5zdCA9
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworICAgICAgICBpbnN0LmV4cG9ydHMu
dGhyb3coKTsKKyAgICB9CisgICAgeworICAgICAgICBsZXQgaW5zdCA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUpOworICAgICAgICBpbnN0LmV4cG9ydHMudGhyb3coKTsKKyAgICB9
Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtZGVs
ZWdhdGUuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtZGVsZWdhdGUu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYmIxMmE4ZWYyOTYyY2IxMWM5NDZkMGM1ZmQ4MGY0YTA2ZmRhNGM3OQot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXNpbXBsZS1k
ZWxlZ2F0ZS5qcwpAQCAtMCwwICsxLDEyNSBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVp
bGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK2Z1bmN0
aW9uIHRlc3RTaW1wbGVUaHJvd0RlbGVnYXRlKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRl
cigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIs
IDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAu
VHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMCkK
KyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0
KDIpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBj
b25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5z
dGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNz
ZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQg
d2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0
aW9uIHRlc3RUaHJvd0RlbGVnYXRlU2tpcCgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIo
KTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAw
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRy
eSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5UaHJv
dygwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkRlbGVnYXRlKDEpCisgICAgICAgICAgICAg
ICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisg
ICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAg
ICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5j
ZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCks
IDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQg
YmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdERlbGVnYXRlQ2FsbGVyKCkgeworICAg
IGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6
IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAg
ICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuQ2Fs
bCgxKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwyIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0p
CisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgi
dm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAg
ICAgICAgLkRlbGVnYXRlKDEpCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAg
ICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNh
dGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3Nz
aWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlRGVsZWdhdGVNZXJnZSgpeworIGNvbnN0
IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlv
bigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxs
IikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5U
cnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAg
ICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKwor
CisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVs
ZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5l
dyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisgICAgYXNzZXJ0LmVxKGluc3Rh
bmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKK30KKwordGVzdFNpbXBsZVRocm93RGVsZWdhdGUoKTsK
K3Rlc3RUaHJvd0RlbGVnYXRlU2tpcCgpOwordGVzdERlbGVnYXRlQ2FsbGVyKCk7Cit0ZXN0U2lt
cGxlRGVsZWdhdGVNZXJnZSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNl
cHRpb24tc2ltcGxlLXRocm93LWNhdGNoLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRp
b24tc2ltcGxlLXRocm93LWNhdGNoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwOTc0MDE1ZjczMDFkZWJlNmI0
ZDY2MmUzNWIwOTJmZTQ4ZTBjNzYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3Ry
ZXNzL2V4Y2VwdGlvbi1zaW1wbGUtdGhyb3ctY2F0Y2guanMKQEAgLTAsMCArMSw0MTQgQEAKK2lt
cG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJv
bSAnLi4vYXNzZXJ0LmpzJworCitmdW5jdGlvbiB0ZXN0U2ltcGxlVHJ5Q2F0Y2goKXsKKyAgICBj
b25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVu
Y3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBb
XX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAg
ICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0p
CisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgp
LmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
KyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsg
fSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGlu
ZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUi
KTsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZVRyeUNhdGNoQWxsKCl7CisgICAgY29uc3QgYiA9
IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCku
RW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQo
KQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2Vw
dGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAg
ICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAg
ICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgp
OworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBj
b25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisK
KyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBl
eHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30K
KworZnVuY3Rpb24gdGVzdENhbGxUcnlDYXRjaCgpeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRl
cigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIs
IDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5Ucnko
ImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQor
ICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuRW5kKCkKKworICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsMiIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwg
eyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNo
aW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJs
ZSIpOworfQorCitmdW5jdGlvbiB0ZXN0Q2FsbFRyeUNhdGNoQWxsKCl7CisgICAgY29uc3QgYiA9
IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCku
RW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQo
KQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2Vw
dGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAg
ICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgxKQorICAgICAgICAgICAg
LkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgIC5FbmQoKQorCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwyIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRocm93KDApCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgp
LCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxk
IGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVUcnlDYXRjaFZhbHVlKCl7
CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBh
cmFtczogWyJpMzIiXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIp
CisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5J
MzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkNhdGNo
KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5k
KCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5j
ZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQu
ZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNt
IHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24g
dGVzdENhbGxUcnlDYXRjaFZhbHVlKCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Cisg
ICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAw
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJp
MzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDEpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisKKyAgICAgICAgICAgIC5GdW5j
dGlvbigiY2FsbDIiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgp
LmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
KyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsg
fSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGlu
ZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUi
KTsKK30KKworZnVuY3Rpb24gdGVzdFN0YWNrVHJ5Q2F0Y2goKXsKKyAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbImkzMiJdfSkuRW5k
KCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNl
cHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAg
ICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAg
ICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLy8gVE9ETzogYnVpbGRlciBlcnJvcgor
ICAgICAgICAgICAgLlRyeSh7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KQorICAgICAg
ICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3Qg
YmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBK
UyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdExpdmVBZnRlclRyeUNh
dGNoKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1
cmUoeyBwYXJhbXM6IFtdIH0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2Fs
bCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtd
LCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAg
ICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAg
ICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwg
eyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNo
aW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJs
ZSIpOworfQorCitmdW5jdGlvbiB0ZXN0TGl2ZUFmdGVyVHJ5Q2F0Y2hBbGwoKSB7CisgICAgY29u
c3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW10g
fSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAg
IC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lk
IikKKyAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgLkNhdGNo
QWxsKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAg
IGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBp
bnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBh
c3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRl
ZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVu
Y3Rpb24gdGVzdFVuaWZ5VHJ5Q2F0Y2hDYXRjaCgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxk
ZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0p
CisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikK
KyAgICAgICAgICAgICAgICAgICAgLlRocm93KDEpCisgICAgICAgICAgICAgICAgLkNhdGNoKDAp
CisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5DYXRj
aCgxKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3Qg
YmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBK
UyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFVuaWZ5VHJ5Q2F0Y2hD
YXRjaEFsbCgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5F
bmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkKKyAg
ICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pCisgICAgICAgICAgICAuU2lnbmF0
dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNv
ZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJp
MzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAg
LlRocm93KDEpCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAg
IC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwg
eyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNo
aW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJs
ZSIpOworfQorCitmdW5jdGlvbiB0ZXN0VW5pZnlUcnlOb1Rocm93KCkgeworICAgIGNvbnN0IGIg
PSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBh
cmFtczogW10gfSkKKyAgICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2Fs
bCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAu
VHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAg
ICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAg
ICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKwor
ICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3Rh
bmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhy
b3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RVbmlm
eVRyeU5vQ2F0Y2goKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBl
KCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigp
CisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAgICAgLlNp
Z25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FeHBvcnQo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAgICAg
IC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0
OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAg
ICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCku
Z2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwor
ICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9
KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5n
IGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIp
OworfQorCitmdW5jdGlvbiB0ZXN0TmVzdGVkQ2F0Y2ggKCl7CisgICAgY29uc3QgYiA9IG5ldyBC
dWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFsiaTMyIl0s
IHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAg
ICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAg
ICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAgICAgLkNh
dGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCkKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
Y29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKworICAg
IGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRp
b24sICJ3YXNtIGV4Y2VwdGlvbiIpOworfQorCit0ZXN0U2ltcGxlVHJ5Q2F0Y2goKTsKK3Rlc3RT
aW1wbGVUcnlDYXRjaEFsbCgpOwordGVzdFNpbXBsZVRyeUNhdGNoVmFsdWUoKTsKK3Rlc3RDYWxs
VHJ5Q2F0Y2goKTsKK3Rlc3RDYWxsVHJ5Q2F0Y2hBbGwoKTsKK3Rlc3RDYWxsVHJ5Q2F0Y2hWYWx1
ZSgpOwordGVzdExpdmVBZnRlclRyeUNhdGNoKCk7Cit0ZXN0TGl2ZUFmdGVyVHJ5Q2F0Y2hBbGwo
KTsKK3Rlc3RVbmlmeVRyeUNhdGNoQ2F0Y2goKTsKK3Rlc3RVbmlmeVRyeUNhdGNoQ2F0Y2hBbGwo
KTsKK3Rlc3RVbmlmeVRyeU5vVGhyb3coKTsKK3Rlc3RVbmlmeVRyeU5vQ2F0Y2goKTsKKworLy8g
VE9ETzogZW5hYmxlIHRoaXMgdGVzdAorLy8gdGVzdFN0YWNrVHJ5Q2F0Y2goKTsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20t
Y2F0Y2hhbGwtcmV0aHJvdy5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93
bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwtcmV0aHJvdy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYjRjMzBk
OTFhYzZiYTM3NTQxMDQ3YmM2NTIzZmFiYWYxMWJiNDJkCi0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS1jYXRjaGFs
bC1yZXRocm93LmpzCkBAIC0wLDAgKzEsNDEgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1
aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7Cisg
ICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAg
LkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAu
RXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
YWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIi
KQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEp
CisgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQor
ICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3Nl
bWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1
bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2Uu
ZXhwb3J0cy5mb287CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cg
bmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQu
dGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKwor
ICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbXSB9KTsKKworICAg
IGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRp
b24pOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3du
LWZyb20tanMtdG8td2FzbS1jYXRjaGFsbC5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0
aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzdlNGE0
NGIxZmVjNDE2ZDM4NGM3OTQ5OWY5OGJmOTQ2NjljYjY0YwotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hh
bGwuanMKQEAgLTAsMCArMSw0MCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5q
cycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25z
dCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0
KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZv
aWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRp
b24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1
bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7
IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAg
ICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAg
ICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAg
Y29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAg
ICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAgICBmdW5jdGlvbiBjYWxsYmFj
aygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsK
KyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRj
aF9hbGxpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBv
c3NpYmxlIik7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczog
W10gfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRj
aF9hbGxpbmcgYW4gb3BhcXVlIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3Nz
aWJsZSIpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhy
b3duLWZyb20tanMtdG8td2FzbS5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRo
cm93bi1mcm9tLWpzLXRvLXdhc20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjUwMTkyMDBjOWZkOWYyZjYxZmFi
NDM4NzQwNmU4NjZiYzMyZjc2OQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJl
c3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20uanMKQEAgLTAsMCArMSw0MCBAQAor
aW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBm
cm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAg
ICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAi
Y2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6
IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAg
ICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAg
ICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHko
KS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7
CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7
IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9y
dHMuZm9vOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBX
ZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGlu
c3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcg
dGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7CisKKyAgICB0YWcgPSBuZXcgV2Vi
QXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGlu
c3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdXQtb2Ytd2FzbS5qcyBi
L0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdXQtb2Ytd2FzbS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hOGUzMzAxZTNiODAwM2E1MmEyZGU2MzM1ODY3NjlmZjg5MDgyZjhlCi0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLW91dC1vZi13
YXNtLmpzCkBAIC0wLDAgKzEsMjQgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIu
anMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29u
c3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW10g
fSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAg
IC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1i
bHkuRXhjZXB0aW9uKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0
aW9uLXRocm93bi1vdmVyLXdhc20uanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10
aHJvd24tb3Zlci13YXNtLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5ZjRjMmU5MDMxZTllZDQ5ZGU2OTcxYzk3
MWI2NDBiZWUyNGFmYzMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4
Y2VwdGlvbi10aHJvd24tb3Zlci13YXNtLmpzCkBAIC0wLDAgKzEsMzAgQEAKK2ltcG9ydCBCdWls
ZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNz
ZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCku
RW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5F
bmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgp
CisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0
aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAg
ICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7Cisg
ICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNv
bnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAg
ICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oaW5zdGFuY2UuZXhwb3J0cy5mb28s
IFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwg
V2ViQXNzZW1ibHkuRXhjZXB0aW9uLCAid2FzbSBleGNlcHRpb24iKTsKK30KZGlmZiAtLWdpdCBh
L0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRyYXAuanMgYi9KU1Rlc3RzL3dhc20vc3Ry
ZXNzL2V4Y2VwdGlvbi10cmFwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmZGY1M2ViNTA1YzM5MGI0MGJmMTUz
NTViNmQ1MzcyZTU2MGU5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNz
L2V4Y2VwdGlvbi10cmFwLmpzCkBAIC0wLDAgKzEsMTM0IEBACitpbXBvcnQgQnVpbGRlciBmcm9t
ICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycK
KworZnVuY3Rpb24gdGVzdENhbm5vdENhdGNoVW5yZWFjaGFibGUoKSB7CisgICAgY29uc3QgYiA9
IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCku
RW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxs
IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMy
IikKKyAgICAgICAgICAgICAgICAgICAgLlVucmVhY2hhYmxlKCkKKyAgICAgICAgICAgICAgICAu
Q2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAg
Y29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5l
eHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgIlVucmVhY2hhYmxlIGNvZGUg
c2hvdWxkIG5vdCBiZSBleGVjdXRlZCIpOworfQorCitmdW5jdGlvbiB0ZXN0Q2Fubm90Q2F0Y2hP
T0IoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLk1lbW9yeSgpCisgICAgICAgICAg
ICAuSW5pdGlhbE1heFBhZ2VzKDAsIDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRXhwb3J0
KCkKKyAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAu
Q29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDog
ImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoMTAyNCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkxvYWQoMCwgMCkKKyAg
ICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3Qo
MSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNv
bnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0
YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworCisgICAgYXNzZXJ0LnRo
cm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgIk91
dCBvZiBib3VuZHMgbWVtb3J5IGFjY2VzcyIpOworfQorCitmdW5jdGlvbiB0ZXN0V2FzbUFQSVRo
cm93KCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikK
KyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNv
bnN0KDApCisgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAg
LkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
Y29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRl
eHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAg
IG5ldyBXZWJBc3NlbWJseS5HbG9iYWwoeworICAgICAgICAgICAgdmFsdWU6ICdhbnlmdW5jJwor
ICAgICAgICB9LCB7fSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMu
Y2FsbCgpLCAxKTsKK30KK2Z1bmN0aW9uIHRlc3RKU0NhdGNoQW5kUmV0aHJvdygpIHsKKyAgICBj
b25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1w
b3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDog
InZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbImkz
MiJdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAg
ICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJFcXooKQor
ICAgICAgICAgICAgICAgICAgICAuSWYoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAgICAg
LlVucmVhY2hhYmxlKCkKKyAgICAgICAgICAgICAgICAgICAgLkVsc2UoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisg
ICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBi
LldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3Rh
bmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGZ1bmN0aW9uIGNh
bGxiYWNrKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaW5zdGFuY2UuZXhwb3J0cy5j
YWxsKDApOworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMu
Y2FsbCgxKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAiVW5yZWFjaGFibGUgY29kZSBzaG91
bGQgbm90IGJlIGV4ZWN1dGVkIik7Cit9CisKK3Rlc3RDYW5ub3RDYXRjaFVucmVhY2hhYmxlKCk7
Cit0ZXN0Q2Fubm90Q2F0Y2hPT0IoKTsKK3Rlc3RXYXNtQVBJVGhyb3coKTsKK3Rlc3RKU0NhdGNo
QW5kUmV0aHJvdygpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LWZy
b20tY2F0Y2gtdG8tY2F0Y2guanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ctZnJvbS1j
YXRjaC10by1jYXRjaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZGZkYTZkOGE2OTExODRkOTk5NTU1ZDE4ZThk
OWVlNTFiZTRhZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRo
cm93LWZyb20tY2F0Y2gtdG8tY2F0Y2guanMKQEAgLTAsMCArMSw0NSBAQAoraW1wb3J0IEJ1aWxk
ZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3Nl
cnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5F
bmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7
IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVu
ZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkK
KyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRp
b24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAg
ICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAg
IC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuQ2F0
Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuUmV0
aHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwg
eyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBv
cnRzLmZvbzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcg
V2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAgIH0KKworICAgIGFzc2VydC5lcShp
bnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHku
VGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4
cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVz
dHMvd2FzbS9zdHJlc3MvcmV0aHJvdy10by1jYXRjaC5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mv
cmV0aHJvdy10by1jYXRjaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjFjYmE0M2RjYjViNDRkOWFlNjRmZGM1
NzlhMGM4YTY1NTAzZjdkCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9y
ZXRocm93LXRvLWNhdGNoLmpzCkBAIC0wLDAgKzEsODggQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20g
Jy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJwor
Cit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAg
ICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6
IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAg
IC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28i
LCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5
KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgw
KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkNhdGNoQWxsKCkK
KyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuUmV0aHJvdygw
KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0
KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAg
IGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250
ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZv
bzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcgV2ViQXNz
ZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5j
ZS5leHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsg
cGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMu
Y2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcg
QnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlv
bigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5k
KCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25h
dHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNh
bGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgIC5U
cnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25z
dCgyKQorICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAg
IGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisg
ICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworCisgICAgZnVuY3Rpb24gY2FsbGJh
Y2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7
CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKKwor
ICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbXSB9KTsKKworICAg
IGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRp
b24pOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LXRvLWRlbGVn
YXRlLXRvLWNhdGNoLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LXRvLWRlbGVnYXRl
LXRvLWNhdGNoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwNDc5YzBjZWEyM2I2MGUzOTU1YTFiNTE3NDkxZmI0
Zjc2ZWU3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ct
dG8tZGVsZWdhdGUtdG8tY2F0Y2guanMKQEAgLTAsMCArMSwyNTkgQEAKK2ltcG9ydCBCdWlsZGVy
IGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0
LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5k
KCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNvbnRleHQiLCAi
Y2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAuRXhj
ZXB0aW9uKCJjb250ZXh0IiwgInRhZyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0
KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMSkKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2Fs
bCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikK
KyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJp
MzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAuUmV0aHJvdygwKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAg
ICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5DYXRjaCgxKQorICAgICAgICAgICAgICAgIC5J
MzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAg
ICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90
aGVyVGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAg
IGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250
ZXh0OiB7IGNhbGxiYWNrLCB0YWc6IG90aGVyVGFnIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0
YW5jZS5leHBvcnRzLmZvbzsKKyAgICBsZXQgYXJncyA9IFtdOworCisgICAgZnVuY3Rpb24gY2Fs
bGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBh
cmdzKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMp
OworCisgICAgdGFnID0gb3RoZXJUYWc7CisgICAgYXJncyA9IFsxMDBdOworCisgICAgbGV0IGV4
biA9IGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNl
cHRpb24pOworICAgIGFzc2VydC5lcShleG4uZ2V0QXJnKHRhZywgMCksIDEwMCk7Cit9CisKK3sK
KyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAg
ICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImNv
bnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogInZvaWQiIH0pCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCku
U2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlv
bigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAxKQorICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJh
bXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAg
ICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisg
ICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAu
Q2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAg
ICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3Qo
MikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5SZXRocm93KDEpCisgICAgICAgICAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkRlbGVnYXRl
KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdlYkFzc2VtYmx5LlRh
Zyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFz
c2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrLCB0YWc6IG90aGVy
VGFnIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKyAgICBsZXQg
YXJncyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIGxldCBleG4g
PSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7CisgICAgICAgIHRhZyA9IG90
aGVyVGFnOworICAgICAgICBhcmdzID0gWzEwMF07CisgICAgICAgIHRocm93IGV4bjsKKyAgICB9
CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHku
RXhjZXB0aW9uKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIu
VHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
b250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAg
ICAgICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJ0YWciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0
OiAidm9pZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisg
ICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAg
ICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZv
byIsIDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5U
cnkoImkzMiIpCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAg
ICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAg
ICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNo
QWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLlJldGhyb3coMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMSkKKyAgICAgICAg
ICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29u
c3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgb3RoZXJUYWcgPSBuZXcgV2ViQXNzZW1i
bHkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIiXX0pCisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2ssIHRhZzog
b3RoZXJUYWcgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworICAg
IGxldCBhcmdzID0gW107CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgbGV0
IGV4biA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBhcmdzKTsKKyAgICAgICAgdGFn
ID0gb3RoZXJUYWc7CisgICAgICAgIGFyZ3MgPSBbMTAwXTsKKyAgICAgICAgdGhyb3cgZXhuOwor
ICAgIH0KKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3Nl
bWJseS5FeGNlcHRpb24pOworfQorCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsK
KyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5j
dGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkK
KyAgICAgICAgICAgIC5FeGNlcHRpb24oImNvbnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMy
Il0sIHJldDogInZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5F
bmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgp
CisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0
aW9uKCJmb28iLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAg
ICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQor
ICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgICAg
IC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAgICAgICAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQorICAgICAgICAgICAgLkNhdGNoKDApCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKwor
CisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVs
ZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgb3RoZXJUYWcgPSBuZXcg
V2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIiXX0pCisgICAgY29uc3QgaW5zdGFu
Y2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJh
Y2ssIHRhZzogb3RoZXJUYWcgfX0pOworCisgICAgbGV0IHRhZyA9IG90aGVyVGFnOworICAgIGxl
dCBhcmdzID0gWzEwMF07CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgbGV0
IGV4biA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBhcmdzKTsKKyAgICAgICAgdGhy
b3cgZXhuOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwg
MTAwKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0
IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAg
LkV4Y2VwdGlvbigiY29udGV4dCIsICJ0YWciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAidm9p
ZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAg
IC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDEp
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkz
MiIpCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRy
eSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3Qo
MSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLlJl
dGhyb3coMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5D
YXRjaCgxKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9
IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7
IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrLCB0YWc6IG90aGVyVGFn
IH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKyAgICBsZXQgYXJn
cyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIGxldCBleG4gPSBu
ZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7CisgICAgICAgIHRhZyA9IG90aGVy
VGFnOworICAgICAgICBhcmdzID0gWzEwMF07CisgICAgICAgIHRocm93IGV4bjsKKyAgICB9CisK
KyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMpOworfQpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9zaW1wbGUtZXhwb3J0LWV4Y2VwdGlvbi5qcyBiL0pTVGVz
dHMvd2FzbS9zdHJlc3Mvc2ltcGxlLWV4cG9ydC1leGNlcHRpb24uanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmI5
Njk5OTc1M2QzYTRhZDA4NmEwZWNlNTg5ODI4NGY4ZmNiOGI3MAotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvd2FzbS9zdHJlc3Mvc2ltcGxlLWV4cG9ydC1leGNlcHRpb24uanMKQEAgLTAsMCAr
MSwxNiBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFz
IGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxk
ZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbImkzMiJdfSkuRW5kKCkKKyAg
ICAgICAgLkV4cG9ydCgpLkV4Y2VwdGlvbigiZm9vIiwgMCkuRW5kKCkKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlKTsKKworICAgIGFzc2VydC5pbnN0YW5jZW9mKGluc3RhbmNlLmV4cG9y
dHMuZm9vLCBXZWJBc3NlbWJseS5UYWcpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4
L0xJQ0VOU0UgYi9KU1Rlc3RzL3dhc20vdjgvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41M2Q5YzQ3ZTMz
YzE4MjkyNzQxZjFlNDA4OTBjOGZlMmQ2Mjk5NjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0
cy93YXNtL3Y4L0xJQ0VOU0UKQEAgLTAsMCArMSw2MiBAQAorVGhpcyBsaWNlbnNlIGFwcGxpZXMg
dG8gYWxsIHBhcnRzIG9mIFY4IHRoYXQgYXJlIG5vdCBleHRlcm5hbGx5CittYWludGFpbmVkIGxp
YnJhcmllcy4gIFRoZSBleHRlcm5hbGx5IG1haW50YWluZWQgbGlicmFyaWVzIHVzZWQgYnkgVjgK
K2FyZToKKworICAtIFBDUkUgdGVzdCBzdWl0ZSwgbG9jYXRlZCBpbgorICAgIHRlc3QvbWpzdW5p
dC90aGlyZF9wYXJ0eS9yZWdleHAtcGNyZS9yZWdleHAtcGNyZS5qcy4gIFRoaXMgaXMgYmFzZWQg
b24gdGhlCisgICAgdGVzdCBzdWl0ZSBmcm9tIFBDUkUtNy4zLCB3aGljaCBpcyBjb3B5cmlnaHRl
ZCBieSB0aGUgVW5pdmVyc2l0eQorICAgIG9mIENhbWJyaWRnZSBhbmQgR29vZ2xlLCBJbmMuICBU
aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQorICAgIGFyZSBlbWJlZGRlZCBpbiByZWdl
eHAtcGNyZS5qcy4KKworICAtIExheW91dCB0ZXN0cywgbG9jYXRlZCBpbiB0ZXN0L21qc3VuaXQv
dGhpcmRfcGFydHkvb2JqZWN0LWtleXMuICBUaGVzZSBhcmUKKyAgICBiYXNlZCBvbiBsYXlvdXQg
dGVzdHMgZnJvbSB3ZWJraXQub3JnIHdoaWNoIGFyZSBjb3B5cmlnaHRlZCBieQorICAgIEFwcGxl
IENvbXB1dGVyLCBJbmMuIGFuZCByZWxlYXNlZCB1bmRlciBhIDMtY2xhdXNlIEJTRCBsaWNlbnNl
LgorCisgIC0gU3Ryb25ndGFsayBhc3NlbWJsZXIsIHRoZSBiYXNpcyBvZiB0aGUgZmlsZXMgYXNz
ZW1ibGVyLWFybS1pbmwuaCwKKyAgICBhc3NlbWJsZXItYXJtLmNjLCBhc3NlbWJsZXItYXJtLmgs
IGFzc2VtYmxlci1pYTMyLWlubC5oLAorICAgIGFzc2VtYmxlci1pYTMyLmNjLCBhc3NlbWJsZXIt
aWEzMi5oLCBhc3NlbWJsZXIteDY0LWlubC5oLAorICAgIGFzc2VtYmxlci14NjQuY2MsIGFzc2Vt
Ymxlci14NjQuaCwgYXNzZW1ibGVyLW1pcHMtaW5sLmgsCisgICAgYXNzZW1ibGVyLW1pcHMuY2Ms
IGFzc2VtYmxlci1taXBzLmgsIGFzc2VtYmxlci5jYyBhbmQgYXNzZW1ibGVyLmguCisgICAgVGhp
cyBjb2RlIGlzIGNvcHlyaWdodGVkIGJ5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBhbmQgcmVsZWFz
ZWQKKyAgICB1bmRlciBhIDMtY2xhdXNlIEJTRCBsaWNlbnNlLgorCisgIC0gVmFsZ3JpbmQgY2xp
ZW50IEFQSSBoZWFkZXIsIGxvY2F0ZWQgYXQgc3JjL3RoaXJkX3BhcnR5L3ZhbGdyaW5kL3ZhbGdy
aW5kLmgKKyAgICBUaGlzIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBCU0QgbGljZW5zZS4KKworICAt
IFRoZSBXYXNtIEMvQysrIEFQSSBoZWFkZXJzLCBsb2NhdGVkIGF0IHRoaXJkX3BhcnR5L3dhc20t
YXBpL3dhc20ue2gsaGh9CisgICAgVGhpcyBpcyByZWxlYXNlZCB1bmRlciB0aGUgQXBhY2hlIGxp
Y2Vuc2UuIFRoZSBBUEkncyB1cHN0cmVhbSBwcm90b3R5cGUKKyAgICBpbXBsZW1lbnRhdGlvbiBh
bHNvIGZvcm1lZCB0aGUgYmFzaXMgb2YgVjgncyBpbXBsZW1lbnRhdGlvbiBpbgorICAgIHNyYy93
YXNtL2MtYXBpLmNjLgorCitUaGVzZSBsaWJyYXJpZXMgaGF2ZSB0aGVpciBvd24gbGljZW5zZXM7
IHdlIHJlY29tbWVuZCB5b3UgcmVhZCB0aGVtLAorYXMgdGhlaXIgdGVybXMgbWF5IGRpZmZlciBm
cm9tIHRoZSB0ZXJtcyBiZWxvdy4KKworRnVydGhlciBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBi
ZSBmb3VuZCBpbiBMSUNFTlNFIGZpbGVzIGxvY2F0ZWQgaW4gCitzdWItZGlyZWN0b3JpZXMuCisK
K0NvcHlyaWdodCAyMDE0LCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgICB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWFwaS5qcyBi
L0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWFwaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWQ1MzY4MTQ1
NmM2NWVjODY3MThiODVlMWFmZDZmYzBmZDg5NzY1Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0
cy93YXNtL3Y4L2V4Y2VwdGlvbnMtYXBpLmpzCkBAIC0wLDAgKzEsMjMyIEBACisvLyBDb3B5cmln
aHQgMjAyMSB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6
IC0tZXhwZXJpbWVudGFsLXdhc20tZWggLS1leHBlcmltZW50YWwtd2FzbS1yZWZ0eXBlcworCits
b2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0KCkg
eworCisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuVGFnKCksIFR5cGVFcnJv
ciwKKyAgICAgIC9leHBlY3RzIHRoZSB0YWcgdHlwZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQvKTsK
KyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5UYWcoe30pLCBUeXBlRXJyb3Is
CisgICAgICAvZXhwZWN0cyBhIHRhZyB0eXBlIHdpdGggdGhlICdwYXJhbWV0ZXJzJyBwcm9wZXJ0
eS8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVy
czogWydmb28nXX0pLCBUeXBlRXJyb3IsCisgICAgICAvZXhwZWN0cyB0aGUgJ3BhcmFtZXRlcnMn
IGZpZWxkIG9mIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIHNlcXVlbmNlIG9mIFdlYkFzc2Vt
Ymx5IHZhbHVlIHR5cGVzLyk7CisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
VGFnKHtwYXJhbWV0ZXJzOiB7fX0pLCBUeXBlRXJyb3IsCisgICAgICAvVHlwZSBlcnJvci8pOwor
CisgIGxldCBqc19leGNlcHRfaTMyID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczog
WydpMzInXX0pOworICBsZXQganNfZXhjZXB0X3YgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJh
bWV0ZXJzOiBbXX0pOworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOwor
ICBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X2kpOworCisgIGFzc2Vy
dERvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDoganNfZXhj
ZXB0X2kzMiB9fSkpOworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3Rh
bnRpYXRlKHsgbTogeyBleDoganNfZXhjZXB0X3YgfX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3Is
CisgICAgICAvaW1wb3J0ZWQgVGFnIG06ZXggc2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIGlt
cG9ydGVkIFdlYkFzc2VtYmx5IFRhZydzIHNpZ25hdHVyZS8pOworICBhc3NlcnRUaHJvd3MoCisg
ICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDoganNfZXhjZXB0X3YgfX0p
LCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvaW1wb3J0ZWQgVGFnIG06ZXggc2lnbmF0
dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIGltcG9ydGVkIFdlYkFzc2VtYmx5IFRhZydzIHNpZ25hdHVy
ZS8pOworICBhc3NlcnRUcnVlKGpzX2V4Y2VwdF9pMzIudG9TdHJpbmcoKSA9PSAiW29iamVjdCBX
ZWJBc3NlbWJseS5UYWddIik7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEV4cG9ydCgpIHsKKyAg
bGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1
aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwg
a0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRp
YXRlKCk7CisKKyAgYXNzZXJ0VHJ1ZShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh
bGwoaW5zdGFuY2UuZXhwb3J0cywgJ2V4JykpOworICBhc3NlcnRFcXVhbHMoIm9iamVjdCIsIHR5
cGVvZiBpbnN0YW5jZS5leHBvcnRzLmV4KTsKKyAgYXNzZXJ0SW5zdGFuY2VvZihpbnN0YW5jZS5l
eHBvcnRzLmV4LCBXZWJBc3NlbWJseS5UYWcpOworICBhc3NlcnRTYW1lKGluc3RhbmNlLmV4cG9y
dHMuZXguY29uc3RydWN0b3IsIFdlYkFzc2VtYmx5LlRhZyk7Cit9KSgpOworCisoZnVuY3Rpb24g
VGVzdEltcG9ydEV4cG9ydCgpIHsKKworICBsZXQganNfZXhfaTMyID0gbmV3IFdlYkFzc2VtYmx5
LlRhZyh7cGFyYW1ldGVyczogWydpMzInXX0pOworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9k
dWxlQnVpbGRlcigpOworICBsZXQgaW5kZXggPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwg
ImV4Iiwga1NpZ192X2kpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJu
YWxUYWcsIGluZGV4KTsKKworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsg
bTogeyBleDoganNfZXhfaTMyIH19KTsKKyAgbGV0IHJlcyA9IGluc3RhbmNlLmV4cG9ydHMuZXg7
CisgIGFzc2VydEVxdWFscyhyZXMsIGpzX2V4X2kzMik7Cit9KSgpOworCisKKyhmdW5jdGlvbiBU
ZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoKSB7CisgIC8vIENoZWNrIGVycm9ycy4KKyAgbGV0IGpz
X3RhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFtdfSk7CisgIGFzc2VydFRo
cm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKDApLCBUeXBlRXJyb3IsCisgICAg
ICAvV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlIGZpcnN0IGFy
Z3VtZW50IHRvIGJlIGEgV2ViQXNzZW1ibHkuVGFnLyk7CisgIGFzc2VydFRocm93cygoKSA9PiBu
ZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHt9KSwgVHlwZUVycm9yLAorICAgICAgL1dlYkFzc2Vt
Ymx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciBleHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBi
ZSBhIFdlYkFzc2VtYmx5LlRhZy8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gV2ViQXNzZW1ibHku
RXhjZXB0aW9uKGpzX3RhZyksIFR5cGVFcnJvciwKKyAgICAgIC9jYWxsaW5nIFdlYkFzc2VtYmx5
LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciB3aXRob3V0IG5ldyBpcyBpbnZhbGlkLyk7CisgIGxldCBq
c19leGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKGpzX3RhZywgW10pOworCisg
IC8vIENoZWNrIHByb3RvdHlwZS4KKyAgYXNzZXJ0U2FtZShXZWJBc3NlbWJseS5FeGNlcHRpb24u
cHJvdG90eXBlLCBqc19leGNlcHRpb24uX19wcm90b19fKTsKKyAgYXNzZXJ0VHJ1ZShqc19leGNl
cHRpb24gaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworCisgIC8vIENoZWNrIHBy
b3RvdHlwZSBvZiBhIHRocm93biBleGNlcHRpb24uCisgIGxldCBidWlsZGVyID0gbmV3IFdhc21N
b2R1bGVCdWlsZGVyKCk7CisgIGxldCB3YXNtX3RhZyA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRC
b2R5KFtrRXhwclRocm93LCB3YXNtX3RhZ10pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNl
ID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICB0cnkgeworICAgIGluc3RhbmNlLmV4cG9ydHMu
dGhyb3coKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGFzc2VydFRydWUoZSBpbnN0YW5jZW9mIFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIH0KK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhjZXB0
aW9uQ29uc3RydWN0b3JXaXRoUGF5bG9hZCgpIHsKKyAgbGV0IHRhZyA9IG5ldyBXZWJBc3NlbWJs
eS5UYWcoCisgICAgICB7cGFyYW1ldGVyczogWydpMzInLCAnZjMyJywgJ2k2NCcsICdmNjQnLCAn
ZXh0ZXJucmVmJ119KTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5FeGNl
cHRpb24oCisgICAgICB0YWcsIFsxbiwgMiwgM24sIDQsIHt9XSksIFR5cGVFcnJvcik7CisgIGFz
c2VydERvZXNOb3RUaHJvdygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgWzMs
IDQsIDVuLCA2LCB7fV0pKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0Q2F0Y2hKU0V4Y2VwdGlv
bigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGpz
X3RhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFtdfSk7CisgIGxldCBqc19m
dW5jX2luZGV4ID0gYnVpbGRlci5hZGRJbXBvcnQoJ20nLCAnanNfZnVuYycsIGtTaWdfdl92KTsK
KyAgbGV0IGpzX3RhZ19pbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAianNfdGFn
Iiwga1NpZ192X3YpOworICBsZXQgdGFnX2luZGV4ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3Yp
OworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgid2FzbV90YWciLCBrRXh0ZXJuYWxUYWcsIHRh
Z19pbmRleCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoIiwga1NpZ19pX3YpCisgICAg
ICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAga0V4cHJD
YWxsRnVuY3Rpb24sIGpzX2Z1bmNfaW5kZXgsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDAsCisg
ICAgICAgIGtFeHByQ2F0Y2gsIGpzX3RhZ19pbmRleCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwg
MSwKKyAgICAgICAga0V4cHJDYXRjaCwgdGFnX2luZGV4LAorICAgICAgICBrRXhwckkzMkNvbnN0
LCAyLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgdGFn
OworICBmdW5jdGlvbiBqc19mdW5jKCkgeworICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNl
cHRpb24odGFnLCBbXSk7CisgIH0KKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0
ZSh7bToge2pzX2Z1bmMsIGpzX3RhZ319KTsKKyAgdGFnID0ganNfdGFnOworICBhc3NlcnRFcXVh
bHMoMSwgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaCgpKTsKKyAgdGFnID0gaW5zdGFuY2UuZXhwb3J0
cy53YXNtX3RhZzsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3RhbmNlLmV4cG9ydHMuY2F0Y2goKSk7
Cit9KSgpOworCitmdW5jdGlvbiBUZXN0Q2F0Y2hKUyh0eXBlc19zdHIsIHR5cGVzLCB2YWx1ZXMp
IHsKKyAgLy8gQ3JlYXRlIGEgSlMgZXhjZXB0aW9uLCBjYXRjaCBpdCBpbiB3YXNtIGFuZCBjaGVj
ayB0aGUgdW5wYWNrZWQgdmFsdWUocykuCisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBqc190YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJz
OiB0eXBlc19zdHJ9KTsKKyAgbGV0IGpzX2Z1bmNfaW5kZXggPSBidWlsZGVyLmFkZEltcG9ydCgn
bScsICdqc19mdW5jJywga1NpZ192X3YpOworICBsZXQgc2lnMSA9IG1ha2VTaWcodHlwZXMsIFtd
KTsKKyAgbGV0IHNpZzIgPSBtYWtlU2lnKFtdLCB0eXBlcyk7CisgIGxldCBqc190YWdfaW5kZXgg
PSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImpzX3RhZyIsIHNpZzEpOworICBsZXQgdGFn
X2luZGV4ID0gYnVpbGRlci5hZGRUYWcoc2lnMSk7CisgIGxldCByZXR1cm5fdHlwZSA9IGJ1aWxk
ZXIuYWRkVHlwZShzaWcyKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoIndhc21fdGFnIiwg
a0V4dGVybmFsVGFnLCB0YWdfaW5kZXgpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaCIs
IHNpZzIpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCByZXR1cm5fdHlwZSwK
KyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGpzX2Z1bmNfaW5kZXgsCisgICAgICAgIGtFeHBy
VW5yZWFjaGFibGUsCisgICAgICAgIGtFeHByQ2F0Y2gsIGpzX3RhZ19pbmRleCwKKyAgICAgICAg
a0V4cHJDYXRjaCwgdGFnX2luZGV4LAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0
RnVuYygpOworICBsZXQgZXhjZXB0aW9uOworICBmdW5jdGlvbiBqc19mdW5jKCkgeworICAgIHRo
cm93IGV4Y2VwdGlvbjsKKyAgfQorICBsZXQgZXhwZWN0ZWQgPSB2YWx1ZXMubGVuZ3RoID09IDEg
PyB2YWx1ZXNbMF0gOiB2YWx1ZXM7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlh
dGUoe206IHtqc19mdW5jLCBqc190YWd9fSk7CisgIGV4Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJs
eS5FeGNlcHRpb24oanNfdGFnLCB2YWx1ZXMpOworICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGlu
c3RhbmNlLmV4cG9ydHMuY2F0Y2goKSk7CisgIGV4Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJseS5F
eGNlcHRpb24oaW5zdGFuY2UuZXhwb3J0cy53YXNtX3RhZywgdmFsdWVzKTsKKyAgYXNzZXJ0RXF1
YWxzKGV4cGVjdGVkLCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoKCkpOworfQorCisoZnVuY3Rpb24g
VGVzdENhdGNoSlNFeGNlcHRpb25XaXRoUGF5bG9hZCgpIHsKKyAgVGVzdENhdGNoSlMoWydpMzIn
XSwgW2tXYXNtSTMyXSwgWzFdKTsKKyAgVGVzdENhdGNoSlMoWydpNjQnXSwgW2tXYXNtSTY0XSwg
WzJuXSk7CisgIFRlc3RDYXRjaEpTKFsnZjMyJ10sIFtrV2FzbUYzMl0sIFszXSk7CisgIFRlc3RD
YXRjaEpTKFsnZjY0J10sIFtrV2FzbUY2NF0sIFs0XSk7CisgIFRlc3RDYXRjaEpTKFsnZXh0ZXJu
cmVmJ10sIFtrV2FzbUV4dGVyblJlZl0sIFt7dmFsdWU6IDV9XSk7CisgIFRlc3RDYXRjaEpTKFsn
aTMyJywgJ2k2NCcsICdmMzInLCAnZjY0JywgJ2V4dGVybnJlZiddLAorICAgICAgICAgICAgICBb
a1dhc21JMzIsIGtXYXNtSTY0LCBrV2FzbUYzMiwga1dhc21GNjQsIGtXYXNtRXh0ZXJuUmVmXSwK
KyAgICAgICAgICAgICAgWzYsIDduLCA4LCA5LCB7dmFsdWU6IDEwfV0pOworfSkoKTsKKworZnVu
Y3Rpb24gVGVzdEdldEFyZ0hlbHBlcih0eXBlc19zdHIsIHR5cGVzLCB2YWx1ZXMpIHsKKyAgbGV0
IHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IHR5cGVzX3N0cn0pOworICBs
ZXQgZXhjZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIHZhbHVlcyk7Cisg
IGZvciAoaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7ICsraSkgeworICAgIGFzc2VydEVxdWFscyhl
eGNlcHRpb24uZ2V0QXJnKHRhZywgaSksIHZhbHVlc1tpXSk7CisgIH0KKworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgc2lnID0gbWFrZVNpZyh0eXBlcywg
W10pOworICBsZXQgdGFnX2luZGV4ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJ0Iiwg
c2lnKTsKKyAgbGV0IGJvZHkgPSBbXTsKKyAgZm9yIChpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsg
KytpKSB7CisgICAgYm9keS5wdXNoKGtFeHByTG9jYWxHZXQsIGkpOworICB9CisgIGJvZHkucHVz
aChrRXhwclRocm93LCB0YWdfaW5kZXgpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvdyIs
IHNpZykKKyAgICAgIC5hZGRCb2R5KGJvZHkpLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNl
ID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7J20nOiB7J3QnOiB0YWd9fSk7CisgIHRyeSB7CisgICAg
aW5zdGFuY2UuZXhwb3J0cy50aHJvdyguLi52YWx1ZXMpOworICB9IGNhdGNoIChlKSB7CisgICAg
Zm9yIChpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgICBhc3NlcnRFcXVhbHMo
ZS5nZXRBcmcodGFnLCBpKSwgdmFsdWVzW2ldKTsKKyAgICB9CisgIH0KK30KKworKGZ1bmN0aW9u
IFRlc3RHZXRBcmcoKSB7CisgIC8vIENoZWNrIGVycm9ycy4KKyAgbGV0IHRhZyA9IG5ldyBXZWJB
c3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFsnaTMyJ119KTsKKyAgbGV0IGV4Y2VwdGlvbiA9IG5l
dyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbMF0pOworICBhc3NlcnRUaHJvd3MoKCkgPT4g
ZXhjZXB0aW9uLmdldEFyZygwLCAwKSwgVHlwZUVycm9yLAorICAgICAgL0ZpcnN0IGFyZ3VtZW50
IG11c3QgYmUgYSBXZWJBc3NlbWJseS5UYWcvKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGV4Y2Vw
dGlvbi5nZXRBcmcoe30sIDApLCBUeXBlRXJyb3IsCisgICAgICAvRmlyc3QgYXJndW1lbnQgbXVz
dCBiZSBhIFdlYkFzc2VtYmx5LlRhZy8pOworICAvL2Fzc2VydFRocm93cygoKSA9PiBleGNlcHRp
b24uZ2V0QXJnKHRhZywgdW5kZWZpbmVkKSwgVHlwZUVycm9yLAorICAgICAgLy8vSW5kZXggbXVz
dCBiZSBjb252ZXJ0aWJsZSB0byBhIHZhbGlkIG51bWJlci8pOworICBhc3NlcnRUaHJvd3MoKCkg
PT4gZXhjZXB0aW9uLmdldEFyZyh0YWcsIDB4RkZGRkZGRkYpLCBSYW5nZUVycm9yLAorICAgICAg
L0luZGV4IG91dCBvZiByYW5nZS8pOworICBsZXQgd3JvbmdfdGFnID0gbmV3IFdlYkFzc2VtYmx5
LlRhZyh7cGFyYW1ldGVyczogWydpMzInXX0pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0
aW9uLmdldEFyZyh3cm9uZ190YWcsIDApLCBUeXBlRXJyb3IsCisgICAgICAvRmlyc3QgYXJndW1l
bnQgZG9lcyBub3QgbWF0Y2ggdGhlIGV4Y2VwdGlvbiB0YWcvKTsKKworICAvLyBDaGVjayBkZWNv
ZGluZy4KKyAgVGVzdEdldEFyZ0hlbHBlcihbJ2kzMiddLCBba1dhc21JMzJdLCBbMV0pOworICBU
ZXN0R2V0QXJnSGVscGVyKFsnaTY0J10sIFtrV2FzbUk2NF0sIFsybl0pOworICBUZXN0R2V0QXJn
SGVscGVyKFsnZjMyJ10sIFtrV2FzbUYzMl0sIFszXSk7CisgIFRlc3RHZXRBcmdIZWxwZXIoWydm
NjQnXSwgW2tXYXNtRjY0XSwgWzRdKTsKKyAgVGVzdEdldEFyZ0hlbHBlcihbJ2V4dGVybnJlZidd
LCBba1dhc21FeHRlcm5SZWZdLCBbe3ZhbDogNX1dKTsKKyAgVGVzdEdldEFyZ0hlbHBlcihbJ2kz
MicsICdpNjQnLCAnZjMyJywgJ2Y2NCcsICdleHRlcm5yZWYnXSwgW2tXYXNtSTMyLCBrV2FzbUk2
NCwga1dhc21GMzIsIGtXYXNtRjY0LCBrV2FzbUV4dGVyblJlZl0sIFs1LCA2biwgNywgOCwge3Zh
bDogOX1dKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhjZXB0aW9uSXMoKSB7CisgIGxldCB0
YWcxID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogW119KTsKKyAgbGV0IHRhZzIg
PSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbXX0pOworICBhc3NlcnRUaHJvd3Mo
KCkgPT4gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih7fSwgW10pLCBUeXBlRXJyb3IsCisgICAg
ICAvZXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBXZWJBc3NlbWJseS5UYWcvKTsK
KworICBsZXQgZXhjZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcxLCBbXSk7
CisgIGFzc2VydFRydWUoZXhjZXB0aW9uLmlzKHRhZzEpKTsKKyAgYXNzZXJ0RmFsc2UoZXhjZXB0
aW9uLmlzKHRhZzIpKTsKKworICBhc3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0aW9uLmlzLmFwcGx5
KHt9LCB0YWcxKSwgVHlwZUVycm9yLAorICAgICAgL1dlYkFzc2VtYmx5LkV4Y2VwdGlvbiBvcGVy
YXRpb24gY2FsbGVkIG9uIG5vbi1FeGNlcHRpb24gb2JqZWN0Lyk7Cit9KSgpOwpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXhwb3J0LmpzIGIvSlNUZXN0cy93YXNtL3Y4
L2V4Y2VwdGlvbnMtZXhwb3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBjOTY5MGY1Yjg4ZjdlNTQzY2RjOTNk
OTFjYzFhODE4M2Q4MzgzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhj
ZXB0aW9ucy1leHBvcnQuanMKQEAgLTAsMCArMSw1MyBAQAorLy8gQ29weXJpZ2h0IDIwMTggdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cG9zZS13
YXNtIC0tZXhwZXJpbWVudGFsLXdhc20tZWgKKworbG9hZCgid2FzbS1tb2R1bGUtYnVpbGRlci5q
cyIpOworCisoZnVuY3Rpb24gVGVzdEV4cG9ydE11bHRpcGxlKCkgeworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFn
KGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfaSk7Cisg
IGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDFhIiwga0V4dGVybmFsVGFnLCBleGNlcHQxKTsK
KyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4MWIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDEp
OworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgyIiwga0V4dGVybmFsVGFnLCBleGNlcHQy
KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFRy
dWUoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGluc3RhbmNlLmV4cG9ydHMs
ICdleDFhJykpOworICBhc3NlcnRUcnVlKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku
Y2FsbChpbnN0YW5jZS5leHBvcnRzLCAnZXgxYicpKTsKKyAgYXNzZXJ0VHJ1ZShPYmplY3QucHJv
dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5zdGFuY2UuZXhwb3J0cywgJ2V4MicpKTsKKyAg
Ly8gRklYTUU6IGZpeCBicm9rZW4gdjggd2FzbSBleGNlcHRpb25zIHRlc3RzCisgIC8vIGFzc2Vy
dFNhbWUoaW5zdGFuY2UuZXhwb3J0cy5leDFhLCBpbnN0YW5jZS5leHBvcnRzLmV4MWIpOworICBh
c3NlcnROb3RTYW1lKGluc3RhbmNlLmV4cG9ydHMuZXgxYSwgaW5zdGFuY2UuZXhwb3J0cy5leDIp
OworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RFeHBvcnRPdXRPZkJvdW5kcygpIHsKKyAgbGV0IGJ1
aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIu
YWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4X29vYiIsIGtF
eHRlcm5hbFRhZywgZXhjZXB0ICsgMSk7CisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1
aWxkZXIuaW5zdGFudGlhdGUoKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLAorICAgICAgL1dl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzE6IDB0aCBFeHBvcnQgaGFz
IGludmFsaWQgZXhjZXB0aW9uIG51bWJlciAxIGl0IGV4Y2VlZHMgdGhlIGV4Y2VwdGlvbiBpbmRl
eCBzcGFjZSAxLCBuYW1lZCAnZXhfb29iJy8pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RFeHBv
cnRTYW1lTmFtZVR3aWNlKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVy
LmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGJ1aWxkZXIu
YWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgYXNzZXJ0VGhy
b3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSgpLCBXZWJBc3NlbWJseS5Db21w
aWxlRXJyb3IsCisgICAgICAvV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAzMDogZHVwbGljYXRlIGV4cG9ydDogJ2V4Jy8pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RF
eHBvcnRNb2R1bGVHZXRFeHBvcnRzKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBi
dWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxl
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIudG9CdWZmZXIoKSk7CisK
KyAgbGV0IGV4cG9ydHMgPSBXZWJBc3NlbWJseS5Nb2R1bGUuZXhwb3J0cyhtb2R1bGUpOworICBh
c3NlcnRBcnJheUVxdWFscyhbeyBuYW1lOiAiZXgiLCBraW5kOiAidGFnIiB9XSwgZXhwb3J0cyk7
Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXh0ZXJucmVm
LmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXh0ZXJucmVmLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmViYmRhMzdmMTZlYjE1MDMyNDkwOWQ2YjZjNTBmZGFhOGQwNDhkNTQKLS0tIC9kZXYvbnVsbAor
KysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1leHRlcm5yZWYuanMKQEAgLTAsMCArMSw5
NiBAQAorLy8gQ29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisKKy8vIEZsYWdzOiAtLWV4cGVyaW1lbnRhbC13YXNtLWVoIC0tZXhwZXJpbWVudGFsLXdh
c20tcmVmdHlwZXMgLS1hbGxvdy1uYXRpdmVzLXN5bnRheAorCitsb2FkKCJ3YXNtLW1vZHVsZS1i
dWlsZGVyLmpzIik7Citsb2FkKCJleGNlcHRpb25zLXV0aWxzLmpzIik7CisKKy8vIFRlc3QgdGhl
IGVuY29kaW5nIG9mIGEgdGhyb3duIGV4Y2VwdGlvbiB3aXRoIGEgbnVsbC1yZWYgdmFsdWUuCiso
ZnVuY3Rpb24gVGVzdFRocm93UmVmTnVsbCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1v
ZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9yKTsK
KyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfbnVsbCIsIGtTaWdfdl92KQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwclJlZk51bGwsIGtFeHRlcm5SZWZDb2RlLAorICAgICAgICBr
RXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRk
RXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNl
ID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2Us
IGluc3RhbmNlLmV4cG9ydHMuZXgsIFtudWxsXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJv
d19udWxsKCkpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2luZy9jYXRjaGluZyB0aGUgbnVsbC1y
ZWYgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hSZWZOdWxsKCkgeworICBsZXQgYnVp
bGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X3IpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19jYXRjaF9udWxs
Iiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkz
MiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBySTMyRXF6LAor
ICAgICAgICAgIGtFeHBySWYsIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJSZWZOdWxsLCBr
RXh0ZXJuUmVmQ29kZSwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAg
ICBrRXhwckVsc2UsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCA0MiwKKyAgICAgICAgICBr
RXhwckVuZCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByUmVm
SXNOdWxsLAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJJ
MzJDb25zdCwgMjMsCisgICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAga0V4cHJVbnJl
YWNoYWJsZSwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBd
KS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5h
bFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOwor
CisgIGFzc2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9udWxsKDAp
KTsKKyAgYXNzZXJ0RXF1YWxzKDQyLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX251bGwo
MSkpOworfSkoKTsKKworLy8gVGVzdCB0aGUgZW5jb2Rpbmcgb2YgYSB0aHJvd24gZXhjZXB0aW9u
IHdpdGggYSByZWZlcmVuY2UgdHlwZSB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dSZWZQYXJh
bSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4
Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9yKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigi
dGhyb3dfcGFyYW0iLCBrU2lnX3ZfcikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJM
b2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSkuZXhwb3J0
RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4
Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgbGV0IG8g
PSBuZXcgT2JqZWN0KCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2Uu
ZXhwb3J0cy5leCwgW29dLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKG8pKTsK
KyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzFdLCAo
KSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDEpKTsKKyAgYXNzZXJ0V2FzbVRocm93
cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzIuM10sICgpID0+IGluc3RhbmNlLmV4
cG9ydHMudGhyb3dfcGFyYW0oMi4zKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGlu
c3RhbmNlLmV4cG9ydHMuZXgsIFsic3RyIl0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3df
cGFyYW0oInN0ciIpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcvY2F0Y2hpbmcgdGhlIHJl
ZmVyZW5jZSB0eXBlIHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd0NhdGNoUmVmUGFyYW0oKSB7
CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQg
PSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfcik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93
X2NhdGNoX3BhcmFtIiwga1NpZ19yX3IpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBy
VHJ5LCBrRXh0ZXJuUmVmQ29kZSwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAg
ICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAg
ICAgICAgIC8vIGZhbGwtdGhyb3VnaAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9y
dEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBl
eGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGxldCBv
ID0gbmV3IE9iamVjdCgpOworCisgIGFzc2VydEVxdWFscyhvLCBpbnN0YW5jZS5leHBvcnRzLnRo
cm93X2NhdGNoX3BhcmFtKG8pKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMu
dGhyb3dfY2F0Y2hfcGFyYW0oMSkpOworICBhc3NlcnRFcXVhbHMoMi4zLCBpbnN0YW5jZS5leHBv
cnRzLnRocm93X2NhdGNoX3BhcmFtKDIuMykpOworICBhc3NlcnRFcXVhbHMoInN0ciIsIGluc3Rh
bmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oInN0ciIpKTsKK30pKCk7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1pbXBvcnQuanMgYi9KU1Rlc3RzL3dhc20vdjgv
ZXhjZXB0aW9ucy1pbXBvcnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E0ZjBhMDU2YmZjZjdjYzAzMzVlZGZi
MGM3MTJlNTViNWU3MWE0OAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9leGNl
cHRpb25zLWltcG9ydC5qcwpAQCAtMCwwICsxLDkwIEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUg
VjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwb3NlLXdh
c20gLS1leHBlcmltZW50YWwtd2FzbS1laAorCitsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpz
Iik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byByZXR1cm4gYSBuZXcgZXhwb3J0ZWQgZXhjZXB0
aW9uIHdpdGggdGhlIHtrU2lnX3Zfdn0gdHlwZQorLy8gc2lnbmF0dXJlIGZyb20gYW4gYW5vbnlt
b3VzIG1vZHVsZS4gVGhlIHVuZGVybHlpbmcgbW9kdWxlIGlzIHRocm93biBhd2F5LgorLy8gVGhp
cyBhbGxvd3MgdGVzdHMgdG8gcmVhc29uIHNvbGVseSBhYm91dCBpbXBvcnRpbmcgZXhjZXB0aW9u
cy4KK2Z1bmN0aW9uIE5ld0V4cG9ydGVkVGFnKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNt
TW9kdWxlQnVpbGRlcigpOworICBsZXQgdGFnID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOwor
ICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgidCIsIGtFeHRlcm5hbFRhZywgdGFnKTsKKyAgbGV0
IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICByZXR1cm4gaW5zdGFuY2UuZXhw
b3J0cy50OworfQorCisoZnVuY3Rpb24gVGVzdEltcG9ydFNpbXBsZSgpIHsKKyAgbGV0IGV4cG9y
dGVkID0gTmV3RXhwb3J0ZWRUYWcoKTsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgi
LCBrU2lnX3Zfdik7CisKKyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoeyBtOiB7IGV4OiBleHBvcnRlZCB9fSkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJ
bXBvcnRNdWx0aXBsZSgpIHsKKyAgbGV0IGV4cG9ydGVkID0gTmV3RXhwb3J0ZWRUYWcoKTsKKyAg
bGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBi
dWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4MSIsIGtTaWdfdl92KTsKKyAgbGV0IGV4Y2Vw
dDIgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4MiIsIGtTaWdfdl92KTsKKyAgbGV0
IGV4Y2VwdDMgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0
T2ZLaW5kKCJleDIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDIpOworICBidWlsZGVyLmFkZEV4cG9y
dE9mS2luZCgiZXgzIiwga0V4dGVybmFsVGFnLCBleGNlcHQzKTsKKyAgbGV0IGluc3RhbmNlID0g
YnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXgxOiBleHBvcnRlZCwgZXgyOiBleHBvcnRlZCB9
fSk7CisKKyAgYXNzZXJ0VHJ1ZShleGNlcHQxIDwgZXhjZXB0MyAmJiBleGNlcHQyIDwgZXhjZXB0
Myk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGluc3RhbmNlLmV4cG9ydHMuZXgxKTsKKyAg
Ly8gRklYTUU6IGZpeCBicm9rZW4gdjggd2FzbSBleGNlcHRpb25zIHRlc3RzCisgIC8vIGFzc2Vy
dFNhbWUoZXhwb3J0ZWQsIGluc3RhbmNlLmV4cG9ydHMuZXgyKTsKKyAgYXNzZXJ0Tm90U2FtZShl
eHBvcnRlZCwgaW5zdGFuY2UuZXhwb3J0cy5leDMpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJ
bXBvcnRNaXNzaW5nKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigp
OworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleCIsIGtTaWdf
dl92KTsKKworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRl
KHt9KSwgVHlwZUVycm9yLAorICAgICAgL2ltcG9ydCBtOmV4IG11c3QgYmUgYW4gb2JqZWN0Lyk7
CisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7
fX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvVGFnIGltcG9ydCBtOmV4IGlzIG5v
dCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWcvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBU
ZXN0SW1wb3J0VmFsdWVNaXNtYXRjaCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAi
ZXgiLCBrU2lnX3Zfdik7CisKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5p
bnN0YW50aWF0ZSh7IG06IHsgZXg6IDIzIH19KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAorICAg
ICAgL1RhZyBpbXBvcnQgbTpleCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFn
Lyk7CisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBt
OiB7IGV4OiB7fSB9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9UYWcgaW1wb3J0
IG06ZXggaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhZy8pOworICB2YXIgbW9u
a2V5ID0gT2JqZWN0LmNyZWF0ZShOZXdFeHBvcnRlZFRhZygpKTsKKyAgYXNzZXJ0VGhyb3dzKAor
ICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IG1vbmtleSB9fSksIFdl
YkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9UYWcgaW1wb3J0IG06ZXggaXMgbm90IGFuIGlu
c3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhZy8pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJbXBv
cnRTaWduYXR1cmVNaXNtYXRjaCgpIHsKKyAgbGV0IGV4cG9ydGVkID0gTmV3RXhwb3J0ZWRUYWco
KTsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2Vw
dCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3ZfaSk7CisKKyAgYXNz
ZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IGV4
cG9ydGVkIH19KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAorICAgICAgL2ltcG9ydGVkIFRhZyBt
OmV4IHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBpbXBvcnRlZCBXZWJBc3NlbWJseSBUYWcn
cyBzaWduYXR1cmUvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0TW9kdWxlR2V0SW1w
b3J0cygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0
IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3Zfdik7Cisg
IGxldCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIudG9CdWZmZXIoKSk7
CisKKyAgbGV0IGltcG9ydHMgPSBXZWJBc3NlbWJseS5Nb2R1bGUuaW1wb3J0cyhtb2R1bGUpOwor
ICBhc3NlcnRBcnJheUVxdWFscyhbeyBtb2R1bGU6ICJtIiwgbmFtZTogImV4Iiwga2luZDogInRh
ZyIgfV0sIGltcG9ydHMpOworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNl
cHRpb25zLXJldGhyb3cuanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1yZXRocm93Lmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjkyMzM5YmVmMmY2OTQyYmQ1ZjZlNWViMzVkNzE4OWMyY2FjNTkwYTgKLS0t
IC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1yZXRocm93LmpzCkBA
IC0wLDAgKzEsMTQyIEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVjdCBhdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwb3NlLXdhc20gLS1leHBlcmltZW50YWwt
d2FzbS1laCAtLWFsbG93LW5hdGl2ZXMtc3ludGF4CisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxk
ZXIuanMiKTsKK2xvYWQoImV4Y2VwdGlvbnMtdXRpbHMuanMiKTsKKworLy8gVGVzdCB0aGF0IHJl
dGhyb3cgZXhwcmVzc2lvbnMgY2FuIHRhcmdldCBjYXRjaCBibG9ja3MuCisoZnVuY3Rpb24gVGVz
dFJldGhyb3dJbkNhdGNoKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJyZXRocm93MCIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAg
ICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwK
KyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByUmV0aHJvdywgMCwK
KyAgICAgICAga0V4cHJFbmQsCisgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5j
dGlvbigicmV0aHJvdzEiLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4
cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAg
a0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAg
ICAga0V4cHJJMzJFcXosCisgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAg
ICAga0V4cHJSZXRocm93LCAxLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDIzLAorICAgICAgICBrRXhwckVuZAorICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1
aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0
IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3Mo
aW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRz
LnJldGhyb3cwKCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBv
cnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93MSgwKSk7CisgIGFzc2Vy
dEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93MSgxKSk7Cit9KSgpOworCisvLyBU
ZXN0IHRoYXQgcmV0aHJvdyBleHByZXNzaW9ucyBjYW4gdGFyZ2V0IGNhdGNoLWFsbCBibG9ja3Mu
CisoZnVuY3Rpb24gVGVzdFJldGhyb3dJbkNhdGNoQWxsKCkgeworICBsZXQgYnVpbGRlciA9IG5l
dyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJyZXRocm93MCIsIGtTaWdfdl92KQorICAg
ICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtF
eHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBrRXhw
clJldGhyb3csIDAsCisgICAgICAgIGtFeHByRW5kLAorICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1
aWxkZXIuYWRkRnVuY3Rpb24oInJldGhyb3cxIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShb
CisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNl
cHQsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwK
KyAgICAgICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisg
ICAgICAgICAgICBrRXhwclJldGhyb3csIDEsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAg
ICAga0V4cHJJMzJDb25zdCwgMjMsCisgICAgICAgIGtFeHByRW5kCisgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQp
OworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2Fz
bVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW10sICgpID0+IGluc3RhbmNl
LmV4cG9ydHMucmV0aHJvdzAoKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3Rh
bmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3cxKDApKTsK
KyAgYXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3cxKDEpKTsKK30pKCk7
CisKKy8vIFRlc3QgdGhhdCByZXRocm93IGV4cHJlc3Npb24gcHJvcGVybHkgdGFyZ2V0IHRoZSBj
b3JyZWN0IHN1cnJvdW5kaW5nIHRyeQorLy8gYmxvY2sgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2Yg
bXVsdGlwbGUgaGFuZGxlcnMgYmVpbmcgaW52b2x2ZWQuCisoZnVuY3Rpb24gVGVzdFJldGhyb3dO
ZXN0ZWQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxl
dCBleGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1
aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigicmV0aHJvd19u
ZXN0ZWQiLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtX
YXNtSTMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDIsCisgICAgICAgIGtFeHByQ2F0
Y2gsIGV4Y2VwdDIsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAg
a0V4cHJUaHJvdywgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQxLAorICAg
ICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDAs
CisgICAgICAgICAgICBrRXhwckkzMkVxLAorICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lk
LAorICAgICAgICAgICAgICBrRXhwclJldGhyb3csIDEsCisgICAgICAgICAgICBrRXhwckVuZCwK
KyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0
LCAxLAorICAgICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNt
Vm9pZCwKKyAgICAgICAgICAgICAga0V4cHJSZXRocm93LCAyLAorICAgICAgICAgICAga0V4cHJF
bmQsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyMywKKyAgICAgICAgICBrRXhwckVuZCwK
KyAgICAgICAga0V4cHJFbmQsCisgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBv
cnRPZktpbmQoImV4MSIsIGtFeHRlcm5hbFRhZywgZXhjZXB0MSk7CisgIGJ1aWxkZXIuYWRkRXhw
b3J0T2ZLaW5kKCJleDIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDIpOworICBsZXQgaW5zdGFuY2Ug
PSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwg
aW5zdGFuY2UuZXhwb3J0cy5leDEsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3df
bmVzdGVkKDApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0
cy5leDIsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3dfbmVzdGVkKDEpKTsKKyAg
YXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3dfbmVzdGVkKDIpKTsKK30p
KCk7CisKKy8vIFRlc3QgdGhhdCBhbiBleGNlcHRpb24gYmVpbmcgcmV0aHJvdyBjYW4gYmUgY2F1
Z2h0IGJ5IGFub3RoZXIgbG9jYWwgY2F0Y2gKKy8vIGJsb2NrIGluIHRoZSBzYW1lIGZ1bmN0aW9u
IHdpdGhvdXQgZXZlciB1bndpbmRpbmcgdGhlIGFjdGl2YXRpb24uCisoZnVuY3Rpb24gVGVzdFJl
dGhyb3dSZWNhdGNoKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigp
OworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFk
ZEZ1bmN0aW9uKCJyZXRocm93X3JlY2F0Y2giLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2Vw
dCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByVHJ5LCBrV2Fz
bUkzMiwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICBrRXhwckkz
MkVxeiwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAga0V4
cHJSZXRocm93LCAyLAorICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICBrRXhwckkz
MkNvbnN0LCA0MiwKKyAgICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAgICBr
RXhwckkzMkNvbnN0LCAyMywKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJFbmQs
CisgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4
dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRl
KCk7CisKKyAgYXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3dfcmVjYXRj
aCgwKSk7CisgIGFzc2VydEVxdWFscyg0MiwgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X3JlY2F0
Y2goMSkpOworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXNo
YXJlZC5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXNoYXJlZC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44NTJmNWJhOGExMzcxNjFmZjc1Nzc1YTRjOWUyMTBmOTBjZDI4ODM1Ci0tLSAvZGV2L251bGwK
KysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtc2hhcmVkLmpzCkBAIC0wLDAgKzEsMTUz
IEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKworLy8gRmxhZ3M6IC0tZXhwb3NlLXdhc20gLS1leHBlcmltZW50YWwtd2FzbS1laAorCits
b2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBy
ZXR1cm4gYSBuZXcgZXhwb3J0ZWQgZXhjZXB0aW9uIHdpdGggdGhlIHtrU2lnX3Zfdn0gdHlwZQor
Ly8gc2lnbmF0dXJlIGZyb20gYW4gYW5vbnltb3VzIG1vZHVsZS4gVGhlIHVuZGVybHlpbmcgbW9k
dWxlIGlzIHRocm93biBhd2F5LgorZnVuY3Rpb24gTmV3RXhwb3J0ZWRFeGNlcHRpb24oKSB7Cisg
IGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBi
dWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIs
IGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50
aWF0ZSgpOworICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy5leDsKK30KKworLy8gQ2hlY2sgdGhh
dCBhbiBpbnN0YW5jZSBtYXRjaGVzIGFuIGV4Y2VwdGlvbiB0aHJvd24gYnkgaXRzZWxmLCBldmVu
IHdoZW4gdGhlCisvLyBleGNlcHRpb24gaXMgcmUtdGhyb3duIGJ5IGEgcmVndWxhciBKYXZhU2Ny
aXB0IGZ1bmN0aW9uLgorKGZ1bmN0aW9uIFRlc3RTaW5nbGVJbnN0YW5jZSgpIHsKKyAgbGV0IGJ1
aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IHNpZ19pbmRleCA9IGJ1aWxk
ZXIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBmdW4gPSBidWlsZGVyLmFkZEltcG9ydCgibSIs
ICJmIiwgc2lnX2luZGV4KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRC
b2R5KFsKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0CisgICAgICBdKS5leHBvcnRGdW5jKCk7
CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoIiwga1NpZ192X3YpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxsRnVu
Y3Rpb24sIGZ1biwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwckVu
ZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGV4X29iaiA9IG5ldyBFcnJvcigibXkg
ZXhjZXB0aW9uIik7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7
IGY6IGZ1bmN0aW9uKCkgeyB0aHJvdyBleF9vYmogfX19KTsKKworICBhc3NlcnRUaHJvd3MoKCkg
PT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvdygpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICBh
c3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5jYXRjaCgpLCBleF9vYmop
OworICB0cnkgeworICAgIGluc3RhbmNlLmV4cG9ydHMudGhyb3coKTsKKyAgfSBjYXRjaCAoZSkg
eworICAgIGV4X29iaiA9IGU7CisgIH0KKyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+IGluc3Rh
bmNlLmV4cG9ydHMuY2F0Y2goKSk7Cit9KSgpOworCisvLyBDaGVjayB0aGF0IHR3byBpbnN0YW5j
ZXMgZGlzdGluZ3Vpc2ggdGhlaXIgaW5kaXZpZHVhbCBleGNlcHRpb25zIGlmIHRoZXkgYXJlCisv
LyBub3Qgc2hhcmVkLCBldmVuIHdoZW4gZGVjbGFyZWQgYnkgdGhlIHNhbWUgdW5kZXJseWluZyBt
b2R1bGUuCisoZnVuY3Rpb24gVGVzdE11bHRpSW5zdGFuY2VOb25TaGFyZWQoKSB7CisgIGxldCBi
dWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBzaWdfaW5kZXggPSBidWls
ZGVyLmFkZFR5cGUoa1NpZ192X3YpOworICBsZXQgZnVuID0gYnVpbGRlci5hZGRJbXBvcnQoIm0i
LCAiZiIsIHNpZ19pbmRleCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zf
dik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93Iiwga1NpZ192X3YpCisgICAgICAuYWRk
Qm9keShbCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdAorICAgICAgXSkuZXhwb3J0RnVuYygp
OworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaCIsIGtTaWdfdl92KQorICAgICAgLmFkZEJv
ZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByQ2FsbEZ1
bmN0aW9uLCBmdW4sCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJF
bmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBleF9vYmogPSBuZXcgRXJyb3IoIm15
IGV4Y2VwdGlvbiIpOworICBsZXQgaW5zdGFuY2UxID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06
IHsgZjogYXNzZXJ0VW5yZWFjaGFibGUgfX0pOworICBsZXQgaW5zdGFuY2UyID0gYnVpbGRlci5p
bnN0YW50aWF0ZSh7IG06IHsgZjogZnVuY3Rpb24oKSB7IHRocm93IGV4X29iaiB9fX0pOworCisg
IGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZTEuZXhwb3J0cy50aHJvdygpLCBXZWJBc3NlbWJs
eS5FeGNlcHRpb24pOworICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UyLmV4cG9y
dHMuY2F0Y2goKSwgZXhfb2JqKTsKKyAgdHJ5IHsKKyAgICBpbnN0YW5jZTEuZXhwb3J0cy50aHJv
dygpOworICB9IGNhdGNoIChlKSB7CisgICAgZXhfb2JqID0gZTsKKyAgfQorICBhc3NlcnRUaHJv
d3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2goKSwgZXhfb2JqKTsKK30pKCk7
CisKKy8vIENoZWNrIHRoYXQgdHdvIGluc3RhbmNlcyBtYXRjaCB0aGVpciBleGNlcHRpb25zIGlm
IHRoZXkgYXJlIHNoYXJlZCBwcm9wZXJseSwKKy8vIGV2ZW4gaWYgdGhlIGxvY2FsIGV4Y2VwdGlv
biBpbmRleCBvZiBleHBvcnQgYW5kIGltcG9ydCBpcyBkaWZmZXJlbnQuCisoZnVuY3Rpb24gVGVz
dE11bHRpSW5zdGFuY2VTaGFyZWQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBzaWdfaW5kZXggPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X3YpOwor
ICBsZXQgZnVuID0gYnVpbGRlci5hZGRJbXBvcnQoIm0iLCAiZiIsIHNpZ19pbmRleCk7CisgIGxl
dCBleGNlcHQxID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleDEiLCBrU2lnX3Zfdik7
CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFk
ZEV4cG9ydE9mS2luZCgiZXgyIiwga0V4dGVybmFsVGFnLCBleGNlcHQyKTsKKyAgYnVpbGRlci5h
ZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAg
a0V4cHJUaHJvdywgZXhjZXB0MgorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFk
ZEZ1bmN0aW9uKCJjYXRjaCIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBr
RXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBmdW4sCisg
ICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSku
ZXhwb3J0RnVuYygpOworICBsZXQgZXhfb2JqID0gbmV3IEVycm9yKCJteSBleGNlcHRpb24iKTsK
KyAgbGV0IGluc3RhbmNlMSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGY6IGFzc2VydFVu
cmVhY2hhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXgxOiBOZXdFeHBvcnRlZEV4Y2VwdGlvbigpIH19KTsKKyAgbGV0IGluc3RhbmNlMiA9IGJ1aWxk
ZXIuaW5zdGFudGlhdGUoeyBtOiB7IGY6IGZ1bmN0aW9uKCkgeyB0aHJvdyBleF9vYmogfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4MTogaW5zdGFuY2Ux
LmV4cG9ydHMuZXgyIH19KTsKKworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UxLmV4cG9y
dHMudGhyb3coKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxz
KCgpID0+IGluc3RhbmNlMi5leHBvcnRzLmNhdGNoKCksIGV4X29iaik7CisgIHRyeSB7CisgICAg
aW5zdGFuY2UxLmV4cG9ydHMudGhyb3coKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGV4X29iaiA9
IGU7CisgIH0KKyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+IGluc3RhbmNlMi5leHBvcnRzLmNh
dGNoKCkpOworfSkoKTsKKworLy8gQ2hlY2sgdGhhdCB0d28gaW5zdGFuY2VzIGJhc2VkIG9uIGRp
ZmZlcmVudCBtb2R1bGVzIG1hdGNoIHRoZWlyIGV4Y2VwdGlvbnMgaWYKKy8vIHRoZXkgYXJlIHNo
YXJlZCBwcm9wZXJseSwgZXZlbiBpZiB0aGUgbG9jYWwgZXhjZXB0aW9uIGluZGV4IGlzIGRpZmZl
cmVudC4KKyhmdW5jdGlvbiBUZXN0TXVsdGlNb2R1bGVTaGFyZWQoKSB7CisgIGxldCBidWlsZGVy
MSA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIxLmFk
ZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlcjEuYWRkVGFnKGtTaWdfdl92
KTsKKyAgYnVpbGRlcjEuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0
Mik7CisgIGJ1aWxkZXIxLmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIGtTaWdfdl92KQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwclRocm93LCBleGNlcHQyCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGxldCBidWlsZGVyMiA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgc2ln
X2luZGV4ID0gYnVpbGRlcjIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBmdW4gPSBidWlsZGVy
Mi5hZGRJbXBvcnQoIm0iLCAiZiIsIHNpZ19pbmRleCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVy
Mi5hZGRJbXBvcnRlZFRhZygibSIsICJleCIsIGtTaWdfdl92KTsKKyAgYnVpbGRlcjIuYWRkRnVu
Y3Rpb24oImNhdGNoIiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBy
VHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGZ1biwKKyAgICAg
ICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9y
dEZ1bmMoKTsKKyAgbGV0IGV4X29iaiA9IG5ldyBFcnJvcigibXkgZXhjZXB0aW9uIik7CisgIGxl
dCBpbnN0YW5jZTEgPSBidWlsZGVyMS5pbnN0YW50aWF0ZSgpOworICBsZXQgaW5zdGFuY2UyID0g
YnVpbGRlcjIuaW5zdGFudGlhdGUoeyBtOiB7IGY6IGZ1bmN0aW9uKCkgeyB0aHJvdyBleF9vYmog
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleDogaW5z
dGFuY2UxLmV4cG9ydHMuZXggfX0pOworCisgIGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZTEu
ZXhwb3J0cy50aHJvdygpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICBhc3NlcnRUaHJvd3NF
cXVhbHMoKCkgPT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2goKSwgZXhfb2JqKTsKKyAgdHJ5IHsK
KyAgICBpbnN0YW5jZTEuZXhwb3J0cy50aHJvdygpOworICB9IGNhdGNoIChlKSB7CisgICAgZXhf
b2JqID0gZTsKKyAgfQorICBhc3NlcnREb2VzTm90VGhyb3coKCkgPT4gaW5zdGFuY2UyLmV4cG9y
dHMuY2F0Y2goKSk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlv
bnMtdHlwZS1yZWZsZWN0aW9uLmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtdHlwZS1y
ZWZsZWN0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0YzIwZWRhZThlMDIzNWFiZjdjMmUxOWViYzcxODBm
YWIwOGNmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy10
eXBlLXJlZmxlY3Rpb24uanMKQEAgLTAsMCArMSw0NyBAQAorLy8gQ29weXJpZ2h0IDIwMjEgdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cGVyaW1l
bnRhbC13YXNtLWVoIC0tZXhwZXJpbWVudGFsLXdhc20tdHlwZS1yZWZsZWN0aW9uCisKK2xvYWQo
Indhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKKworbGV0IHRlc3RjYXNlcyA9IFsKK3t0eXBlczog
e3BhcmFtZXRlcnM6W119LCBzaWc6IGtTaWdfdl92fSwKK3t0eXBlczoge3BhcmFtZXRlcnM6WyJp
MzIiXX0sIHNpZzoga1NpZ192X2l9LAore3R5cGVzOiB7cGFyYW1ldGVyczpbImk2NCJdfSwgc2ln
OiBrU2lnX3ZfbH0sCit7dHlwZXM6IHtwYXJhbWV0ZXJzOlsiZjY0IiwgImY2NCIsICJpMzIiXX0s
IHNpZzoga1NpZ192X2RkaX0sCit7dHlwZXM6IHtwYXJhbWV0ZXJzOlsiZjMyIl19LCBzaWc6IGtT
aWdfdl9mfSwKK107CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0KCkgeworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworCisgIHRlc3RjYXNlcy5mb3JFYWNoKGZ1bmN0aW9u
KGV4cGVjdGVkLCBpKSB7CisgICAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGV4cGVjdGVk
LnNpZyk7CisgICAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4IiArIGksIGtFeHRlcm5hbFRh
ZywgZXhjZXB0KTsKKyAgfSk7CisKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0
ZSgpOworICB0ZXN0Y2FzZXMuZm9yRWFjaChmdW5jdGlvbihleHBlY3RlZCwgaSkgeworICAgIGFz
c2VydEVxdWFscyhpbnN0YW5jZS5leHBvcnRzWyJleCIgKyBpXS50eXBlKCksIGV4cGVjdGVkLnR5
cGVzKTsKKyAgfSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEltcG9ydEV4cG9ydCgpIHsKKwor
ICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgaW1wb3J0cyA9
IHttOiB7fX07CisKKyAgdGVzdGNhc2VzLmZvckVhY2goZnVuY3Rpb24oZXhwZWN0ZWQsIGkpIHsK
KyAgICBsZXQgdCA9IG5ldyBXZWJBc3NlbWJseS5UYWcoZXhwZWN0ZWQudHlwZXMpOworICAgIGxl
dCBpbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiICsgaSwgZXhwZWN0ZWQu
c2lnKTsKKyAgICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiICsgaSwga0V4dGVybmFsVGFn
LCBpbmRleCk7CisgICAgaW1wb3J0cy5tWyJleCIgKyBpXSA9IHQ7CisgIH0pOworCisgIGxldCBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoaW1wb3J0cyk7CisgIHRlc3RjYXNlcy5mb3JF
YWNoKGZ1bmN0aW9uKGV4cGVjdGVkLCBpKSB7CisgICAgYXNzZXJ0RXF1YWxzKGluc3RhbmNlLmV4
cG9ydHNbImV4IiArIGldLnR5cGUoKSwgZXhwZWN0ZWQudHlwZXMpOworICB9KQorfSkoKTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXV0aWxzLmpzIGIvSlNUZXN0cy93
YXNtL3Y4L2V4Y2VwdGlvbnMtdXRpbHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGJlMTkxOWRlZTY4MDMyM2Nl
YjA5Mzk2NGZlNjFhOTVmMDZkZTY5NwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92
OC9leGNlcHRpb25zLXV0aWxzLmpzCkBAIC0wLDAgKzEsMjcgQEAKKy8vIENvcHlyaWdodCAyMDE4
IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1hbGxv
dy1uYXRpdmVzLXN5bnRheAorCisvLyBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgbG9hZGVk
IGJ5IG90aGVyIHRlc3RzIHRvIHByb3ZpZGUgdXRpbGl0eSBtZXRob2RzCisvLyByZXF1aXJpbmcg
bmF0aXZlcyBzeW50YXggKGFuZCBoZW5jZSBub3Qgc3VpdGVkIGZvciB0aGUgbWpzdW5pdC5qcyBm
aWxlKS4KKworZnVuY3Rpb24gYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgdGFnLCB2YWx1ZXMs
IGNvZGUpIHsKKyAgdHJ5IHsKKyAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdmdW5jdGlvbicpIHsK
KyAgICAgIGNvZGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgZXZhbChjb2RlKTsKKyAgICB9Cisg
IH0gY2F0Y2ggKGUpIHsKKyAgICBhc3NlcnRJbnN0YW5jZW9mKGUsIFdlYkFzc2VtYmx5LkV4Y2Vw
dGlvbik7CisgICAgYXNzZXJ0VHJ1ZShlLmlzKHRhZykpOworICAgIGFzc2VydEVxdWFscyh2YWx1
ZXMubGVuZ3RoLCB0YWcudHlwZSgpLnBhcmFtZXRlcnMubGVuZ3RoKTsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7ICsraSkKKyAgICAgIGFzc2VydEVxdWFscyh2YWx1ZXNb
aV0sIGUuZ2V0QXJnKHRhZywgaSkpOworICAgIHJldHVybjsgIC8vIFN1Y2Nlc3MuCisgIH0KKyAg
dGhyb3cgbmV3IE1qc1VuaXRBc3NlcnRpb25FcnJvcignRGlkIG5vdCB0aHJvdyBleHBlY3RlZCA8
JyArIHRhZyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJz4gd2l0aCB2YWx1
ZXM6ICcgKyB2YWx1ZXMpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlv
bnMuanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OTE1NTA0
NTA0OTg4MTczMDdkMjk0NzUwMmFiMmFmYmMwNGM2MmE0Ci0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMuanMKQEAgLTAsMCArMSwxMDg3IEBACisvLyBDb3B5cmln
aHQgMjAxOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6
IC0tZXhwb3NlLXdhc20gLS1leHBlcmltZW50YWwtd2FzbS1laCAtLWFsbG93LW5hdGl2ZXMtc3lu
dGF4CisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKK2xvYWQoImV4Y2VwdGlvbnMt
dXRpbHMuanMiKTsKKworLy8gVGhlIGZvbGxvd2luZyBtZXRob2QgZG9lc24ndCBhdHRlbXB0IHRv
IGNhdGNoIGFuIHJhaXNlZCBleGNlcHRpb24uCisoZnVuY3Rpb24gVGVzdFRocm93U2ltcGxlKCkg
eworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0
ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJv
d19pZl9wYXJhbV9ub3RfemVybyIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAg
ICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckkzMkNvbnN0LCAwLAorICAgICAgICBr
RXhwckkzMk5lLAorICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJU
aHJvdywgZXhjZXB0LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwg
MQorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgi
LCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19pZl9w
YXJhbV9ub3RfemVybygwKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNl
LmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X2lmX3BhcmFtX25v
dF96ZXJvKDEwKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9y
dHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X2lmX3BhcmFtX25vdF96ZXJv
KC0xKSk7Cit9KSgpOworCisvLyBUZXN0IHRoYXQgZW1wdHkgdHJ5L2NhdGNoIGJsb2NrcyB3b3Jr
LgorKGZ1bmN0aW9uIFRlc3RDYXRjaEVtcHR5QmxvY2tzKCkgeworICBsZXQgYnVpbGRlciA9IG5l
dyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaF9lbXB0eV90cnkiLCBrU2lnX3Zf
dikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAg
ICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9y
dEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFz
c2VydERvZXNOb3RUaHJvdyhpbnN0YW5jZS5leHBvcnRzLmNhdGNoX2VtcHR5X3RyeSk7Cit9KSgp
OworCisvLyBOb3cgdGhhdCB3ZSBrbm93IHRocm93aW5nIHdvcmtzLCB3ZSB0ZXN0IGNhdGNoaW5n
IHRoZSBleGNlcHRpb25zIHdlIHJhaXNlLgorKGZ1bmN0aW9uIFRlc3RDYXRjaFNpbXBsZSgpIHsK
KyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9
IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigic2ltcGxl
X3Rocm93X2NhdGNoX3RvXzBfMSIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAg
ICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAg
ICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAg
ICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAg
a0V4cHJJMzJDb25zdCwgNDIsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAg
ICBrRXhwckkzMkNvbnN0LCAyMywKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1
bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2Vy
dEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5zaW1wbGVfdGhyb3dfY2F0Y2hfdG9fMF8xKDAp
KTsKKyAgYXNzZXJ0RXF1YWxzKDQyLCBpbnN0YW5jZS5leHBvcnRzLnNpbXBsZV90aHJvd19jYXRj
aF90b18wXzEoMSkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RUcmFwTm90Q2F1Z2h0KCkgewor
ICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBidWlsZGVyLmFkZEZ1
bmN0aW9uKCd1bnJlYWNoYWJsZV9pbl90cnknLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwclVucmVhY2hhYmxl
LAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhw
b3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAg
YXNzZXJ0VHJhcHMoa1RyYXBVbnJlYWNoYWJsZSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy51bnJl
YWNoYWJsZV9pbl90cnkoKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdFRyYXBJbkNhbGxlZU5v
dENhdWdodCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAg
bGV0IGZ1bmNfZGl2ID0gYnVpbGRlci5hZGRGdW5jdGlvbignZGl2Jywga1NpZ19pX2lpKS5hZGRC
b2R5KFsKKyAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAg
a0V4cHJJMzJEaXZVCisgIF0pOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0cmFwX2luX2NhbGxl
ZScsIGtTaWdfaV9paSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNt
STMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJMb2NhbEdl
dCwgMSwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgZnVuY19kaXYuaW5kZXgsCisgICAg
ICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMTEsCisgICAgICAg
IGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxk
ZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMywgaW5zdGFuY2UuZXhwb3J0cy50
cmFwX2luX2NhbGxlZSg3LCAyKSk7CisgIGFzc2VydFRyYXBzKGtUcmFwRGl2QnlaZXJvLCAoKSA9
PiBpbnN0YW5jZS5leHBvcnRzLnRyYXBfaW5fY2FsbGVlKDEsIDApKTsKK30pKCk7CisKKyhmdW5j
dGlvbiBUZXN0VHJhcFZpYUpTTm90Q2F1Z2h0KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNt
TW9kdWxlQnVpbGRlcigpOworICBsZXQgaW1wID0gYnVpbGRlci5hZGRJbXBvcnQoJ2ltcCcsICdv
cnQnLCBrU2lnX2lfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ2RpdicsIGtTaWdfaV9paSkK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4
cHJMb2NhbEdldCwgMSwKKyAgICAgICAga0V4cHJJMzJEaXZVCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ2NhbGxfaW1wb3J0Jywga1NpZ19pX3YpCisgICAg
ICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhw
ckNhbGxGdW5jdGlvbiwgaW1wLAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICAgIGtF
eHBySTMyQ29uc3QsIDExLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygp
OworICBsZXQgZXhjZXB0aW9uID0gdW5kZWZpbmVkOworICBsZXQgaW5zdGFuY2U7CisgIGZ1bmN0
aW9uIGpzX2ltcG9ydCgpIHsKKyAgICB0cnkgeworICAgICAgaW5zdGFuY2UuZXhwb3J0cy5kaXYo
MSwgMCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgZXhjZXB0aW9uID0gZTsKKyAgICB9Cisg
ICAgdGhyb3cgZXhjZXB0aW9uOworICB9CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0
ZSh7aW1wOiB7b3J0OiBqc19pbXBvcnR9fSk7CisKKyAgbGV0IGNhdWdodCA9IHVuZGVmaW5lZDsK
KyAgdHJ5IHsKKyAgICBsZXQgcmVzID0gaW5zdGFuY2UuZXhwb3J0cy5jYWxsX2ltcG9ydCgpOwor
ICAgIGFzc2VydFVucmVhY2hhYmxlKCdjYWxsX2ltcG9ydCBzaG91bGQgdHJhcCwgYnV0IHJldHVy
bmVkIHdpdGggJyArIHJlcyk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBjYXVnaHQgPSBlOworICB9
CisgIGFzc2VydFNhbWUoZXhjZXB0aW9uLCBjYXVnaHQpOworICBhc3NlcnRUaHJvd3MoaW5zdGFu
Y2UuZXhwb3J0cy5jYWxsX2ltcG9ydCwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCBrVHJhcE1z
Z3Nba1RyYXBEaXZCeVplcm9dKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0TWFudWFsbHlUaHJv
d25SdW50aW1lRXJyb3JDYXVnaHQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBpbXAgPSBidWlsZGVyLmFkZEltcG9ydCgnaW1wJywgJ29ydCcsIGtT
aWdfaV92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbignY2FsbF9pbXBvcnQnLCBrU2lnX2lfdikK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAg
IGtFeHByQ2FsbEZ1bmN0aW9uLCBpbXAsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAg
ICAga0V4cHJJMzJDb25zdCwgMTEsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRG
dW5jKCk7CisgIGZ1bmN0aW9uIHRocm93X2V4YygpIHsKKyAgICB0aHJvdyBuZXcgV2ViQXNzZW1i
bHkuUnVudGltZUVycm9yKCdNeSB1c2VyIHRleHQnKTsKKyAgfQorICBsZXQgaW5zdGFuY2UgPSBi
dWlsZGVyLmluc3RhbnRpYXRlKHtpbXA6IHtvcnQ6IHRocm93X2V4Y319KTsKKworICBhc3NlcnRF
cXVhbHMoMTEsIGluc3RhbmNlLmV4cG9ydHMuY2FsbF9pbXBvcnQoKSk7Cit9KSgpOworCisoZnVu
Y3Rpb24gVGVzdEV4bldpdGhXYXNtUHJvdG9Ob3RDYXVnaHQoKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGxldCBpbXAgPSBidWlsZGVyLmFkZEltcG9ydCgnaW1wJywgJ29ydCcsIGtT
aWdfdl92KTsKKyAgbGV0IHRocm93X2ZuID0gYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3cnLCBr
U2lnX3ZfdikKKyAgICAgICAgICAgICAgICAgICAgIC5hZGRCb2R5KFtrRXhwclRocm93LCBleGNl
cHRdKQorICAgICAgICAgICAgICAgICAgICAgLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRG
dW5jdGlvbigndGVzdCcsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICAvLyBD
YWxsaW5nICJ0aHJvdyIgZGlyZWN0bHkgc2hvdWxkIHByb2R1Y2UgdGhlIGV4cGVjdGVkIGV4Y2Vw
dGlvbi4KKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxG
dW5jdGlvbiwgdGhyb3dfZm4uaW5kZXgsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAg
ICAgICAga0V4cHJFbmQsCisgICAgICAgIC8vIENhbGxpbmcgdGhyb3VnaCBKUyBwcm9kdWNlcyBh
IHdyYXBwZWQgZXhjZXB0aW9ucyB3aGljaCBkb2VzIG5vdCBtYXRjaAorICAgICAgICAvLyB0aGUg
Y2F0Y2guCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxs
RnVuY3Rpb24sIGltcCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhw
ckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2U7CisgIGxldCB3cmFw
cGVkX2V4bjsKKyAgZnVuY3Rpb24ganNfaW1wb3J0KCkgeworICAgIHRyeSB7CisgICAgICBpbnN0
YW5jZS5leHBvcnRzLnRocm93KCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgd3JhcHBlZF9l
eG4gPSBuZXcgRXJyb3IoKTsKKyAgICAgIHdyYXBwZWRfZXhuLl9fcHJvdG9fXyA9IGU7CisgICAg
ICB0aHJvdyB3cmFwcGVkX2V4bjsKKyAgICB9CisgIH0KKyAgaW5zdGFuY2UgPSBidWlsZGVyLmlu
c3RhbnRpYXRlKHtpbXA6IHtvcnQ6IGpzX2ltcG9ydH19KTsKKyAgbGV0IGNhdWdodCA9IHVuZGVm
aW5lZDsKKyAgdHJ5IHsKKyAgICBpbnN0YW5jZS5leHBvcnRzLnRlc3QoKTsKKyAgfSBjYXRjaCAo
ZSkgeworICAgIGNhdWdodCA9IGU7CisgIH0KKyAgYXNzZXJ0VHJ1ZSghIWNhdWdodCwgJ3Nob3Vs
ZCBoYXZlIHRyYXBwZWQnKTsKKyAgYXNzZXJ0RXF1YWxzKGNhdWdodCwgd3JhcHBlZF9leG4pOwor
ICBhc3NlcnRJbnN0YW5jZW9mKGNhdWdodC5fX3Byb3RvX18sIFdlYkFzc2VtYmx5LkV4Y2VwdGlv
bik7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdFN0YWNrT3ZlcmZsb3dOb3RDYXVnaHQoKSB7Cisg
IGZ1bmN0aW9uIHN0YWNrX292ZXJmbG93KCkgeworICAgIC8vJVRocm93U3RhY2tPdmVyZmxvdygp
OworICB9CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBz
aWdfdl92ID0gYnVpbGRlci5hZGRUeXBlKGtTaWdfdl92KTsKKyAgbGV0IGtTdGFja092ZXJmbG93
ID0gYnVpbGRlci5hZGRJbXBvcnQoJycsICdzdGFja19vdmVyZmxvdycsIHNpZ192X3YpOworICBi
dWlsZGVyLmFkZEZ1bmN0aW9uKCd0cnlfc3RhY2tfb3ZlcmZsb3cnLCBrU2lnX3ZfdikKKyAgICAg
IC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhw
ckNhbGxGdW5jdGlvbiwgMCwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAga0V4cHJF
bmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0
YW50aWF0ZSh7Jyc6IHsnc3RhY2tfb3ZlcmZsb3cnOiBzdGFja19vdmVyZmxvd319KTsKKworICBh
c3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50cnlfc3RhY2tfb3ZlcmZsb3coKSwK
KyAgICAgIFJhbmdlRXJyb3IsICdNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZCcpOwor
fSk7CisvLyBGSVhNRTogbmVlZHMgc3RhY2sgb3ZlcmZsb3cgaGVscGVyCisvLygpOworCisvLyBU
ZXN0IHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHdoaWNoIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGJ5
IHVzaW5nIGEgY2FzY2FkZWQKKy8vIHNlcXVlbmNlIG9mIG5lc3RlZCB0cnkgYmxvY2tzIHdpdGgg
YSBzaW5nbGUgY2F0Y2ggYmxvY2sgZWFjaC4KKyhmdW5jdGlvbiBUZXN0Q2F0Y2hDb21wbGV4MSgp
IHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2Vw
dDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MyA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2hfY29tcGxleCIsIGtTaWdfaV9pKQorICAg
ICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4
cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAg
ICAgIGtFeHBySTMyRXF6LAorICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAg
ICAgICAgICBrRXhwclRocm93LCBleGNlcHQxLAorICAgICAgICAgICAga0V4cHJFbHNlLAorICAg
ICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0
LCAxLAorICAgICAgICAgICAgICBrRXhwckkzMkVxLAorICAgICAgICAgICAgICBrRXhwcklmLCBr
V2FzbVZvaWQsCisgICAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MiwKKyAgICAgICAg
ICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDMsCisg
ICAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAg
ICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAg
ICAgICAgICBrRXhwckkzMkNvbnN0LCAzLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBr
RXhwckNhdGNoLCBleGNlcHQyLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDQsCisgICAgICAg
IGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9m
S2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDMpOworICBsZXQgaW5zdGFuY2UgPSBidWls
ZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDMsIGluc3RhbmNlLmV4cG9ydHMu
Y2F0Y2hfY29tcGxleCgwKSk7CisgIGFzc2VydEVxdWFscyg0LCBpbnN0YW5jZS5leHBvcnRzLmNh
dGNoX2NvbXBsZXgoMSkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5l
eHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9jb21wbGV4KDIpKTsK
K30pKCk7CisKKy8vIFRlc3QgdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggd2hpY2ggZXhjZXB0aW9u
IHdhcyB0aHJvd24gYnkgdXNpbmcgYSBzaW5nbGUKKy8vIHRyeSBibG9jayB3aXRoIG11bHRpcGxl
IGFzc29jaWF0ZWQgY2F0Y2ggYmxvY2tzIGluIHNlcXVlbmNlLgorKGZ1bmN0aW9uIFRlc3RDYXRj
aENvbXBsZXgyKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOwor
ICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIg
PSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQzID0gYnVpbGRlci5hZGRU
YWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaF9jb21wbGV4Iiwga1Np
Z19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAg
ICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBySTMyRXF6LAorICAgICAg
ICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDEs
CisgICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAg
ICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAgICBrRXhwckkzMkVxLAorICAg
ICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAgICBrRXhwclRocm93LCBl
eGNlcHQyLAorICAgICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAgICBrRXhwclRocm93
LCBleGNlcHQzLAorICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAga0V4cHJFbmQsCisg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwK
KyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAzLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQy
LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAg
XSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJu
YWxUYWcsIGV4Y2VwdDMpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7
CisKKyAgYXNzZXJ0RXF1YWxzKDMsIGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hfY29tcGxleCgwKSk7
CisgIGFzc2VydEVxdWFscyg0LCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoX2NvbXBsZXgoMSkpOwor
ICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkg
PT4gaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9jb21wbGV4KDIpKTsKK30pKCk7CisKKy8vIFRlc3Qg
dGhyb3dpbmcgYW4gZXhjZXB0aW9uIHdpdGggbXVsdGlwbGUgdmFsdWVzLgorKGZ1bmN0aW9uIFRl
c3RUaHJvd011bHRpcGxlVmFsdWVzKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2lpKTsKKyAg
YnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfMV8yIiwga1NpZ192X3YpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDIs
CisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAg
YnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBs
ZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93
cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzEsIDJdLCAoKSA9PiBpbnN0YW5jZS5l
eHBvcnRzLnRocm93XzFfMigpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcvY2F0Y2hpbmcg
dGhlIGkzMiBwYXJhbWV0ZXIgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hQYXJhbUko
KSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNl
cHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfaSk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRo
cm93X2NhdGNoX3BhcmFtIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtF
eHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAg
IGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAg
ICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJSZXR1cm4sCisgICAgICAgIGtF
eHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVy
Lmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDAsIGluc3RhbmNlLmV4cG9ydHMudGhy
b3dfY2F0Y2hfcGFyYW0oMCkpOworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50
aHJvd19jYXRjaF9wYXJhbSgxKSk7CisgIGFzc2VydEVxdWFscygxMCwgaW5zdGFuY2UuZXhwb3J0
cy50aHJvd19jYXRjaF9wYXJhbSgxMCkpOworfSkoKTsKKworLy8gVGVzdCB0aGUgZW5jb2Rpbmcg
b2YgYSB0aHJvd24gZXhjZXB0aW9uIHdpdGggYW4gaW50ZWdlciBleGNlcHRpb24uCisoZnVuY3Rp
b24gVGVzdFRocm93UGFyYW1JKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVp
bGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2kpOworICBidWls
ZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19wYXJhbSIsIGtTaWdfdl9pKQorICAgICAgLmFkZEJvZHko
WworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQs
CisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIs
IGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50
aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMu
ZXgsIFs1XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSg1KSk7CisgIGFzc2Vy
dFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFs0MjQyNDJdLCAoKSA9
PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDQyNDI0MikpOworfSkoKTsKKworLy8gVGVz
dCB0aHJvd2luZy9jYXRjaGluZyB0aGUgZjMyIHBhcmFtZXRlciB2YWx1ZS4KKyhmdW5jdGlvbiBU
ZXN0VGhyb3dDYXRjaFBhcmFtRigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9mKTsKKyAgYnVp
bGRlci5hZGRGdW5jdGlvbigidGhyb3dfY2F0Y2hfcGFyYW0iLCBrU2lnX2ZfZikKKyAgICAgIC5h
ZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtRjMyLAorICAgICAgICAgIGtFeHByTG9j
YWxHZXQsIDAsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHBy
RjMyQ29uc3QsIDAsIDAsIDAsIDAsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAg
ICAgICBrRXhwclJldHVybiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRF
cXVhbHMoNS4wLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDUuMCkpOworICBh
c3NlcnRFcXVhbHMoMTAuNSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgxMC41
KSk7Cit9KSgpOworCisvLyBUZXN0IHRoZSBlbmNvZGluZyBvZiBhIHRocm93biBleGNlcHRpb24g
d2l0aCBhIGZsb2F0IHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd1BhcmFtRigpIHsKKyAgbGV0
IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl9mKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfcGFyYW0i
LCBrU2lnX3ZfZikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwK
KyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBi
dWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxl
dCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dz
KGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbNS4wXSwgKCkgPT4gaW5zdGFuY2UuZXhw
b3J0cy50aHJvd19wYXJhbSg1LjApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5z
dGFuY2UuZXhwb3J0cy5leCwgWzEwLjVdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3Bh
cmFtKDEwLjUpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcvY2F0Y2hpbmcgYW4gSTY0IHZh
bHVlCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hQYXJhbUwoKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3ZfbCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X2NhdGNoX3BhcmFtIiwga1Np
Z19pX2kpCisgICAgICAuYWRkTG9jYWxzKGtXYXNtSTY0LCAxKQorICAgICAgLmFkZEJvZHkoWwor
ICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckk2NFVDb252ZXJ0STMyLAor
ICAgICAgICBrRXhwckxvY2FsU2V0LCAxLAorICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisg
ICAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQs
CisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0
LAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAgICAga0V4cHJJNjRFcSwKKyAg
ICAgICAgICBrRXhwcklmLCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEs
CisgICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMCwKKyAg
ICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRF
cXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSg1KSk7CisgIGFzc2Vy
dEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDApKTsKKyAgYXNz
ZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oLTEpKTsKK30p
KCk7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3duIGV4Y2VwdGlvbiB3aXRoIGFu
IEk2NCB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dQYXJhbUwoKSB7CisgIGxldCBidWlsZGVy
ID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRh
ZyhrU2lnX3ZfbCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X3BhcmFtIiwga1NpZ192
X2lpKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAg
ICBrRXhwckk2NFVDb252ZXJ0STMyLAorICAgICAgICBrRXhwckk2NENvbnN0LCAzMiwKKyAgICAg
ICAga0V4cHJJNjRTaGwsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAgIGtFeHBy
STY0VUNvbnZlcnRJMzIsCisgICAgICAgIGtFeHBySTY0SW9yLAorICAgICAgICBrRXhwclRocm93
LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZL
aW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRl
ci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNl
LmV4cG9ydHMuZXgsIFs0Mjk0OTY3Mjk2NW5dLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93
X3BhcmFtKDEwLCA1KSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4
cG9ydHMuZXgsIFstNDI5NDk2NzI4M25dLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3Bh
cmFtKC0xLCAxMykpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2luZy9jYXRjaGluZyB0aGUgRjY0
IHBhcmFtZXRlciB2YWx1ZQorKGZ1bmN0aW9uIFRlc3RUaHJvd0NhdGNoUGFyYW1EKCkgeworICBs
ZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVp
bGRlci5hZGRUYWcoa1NpZ192X2QpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19jYXRj
aF9wYXJhbSIsIGtTaWdfZF9kKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwg
a1dhc21GNjQsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwclRo
cm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJGNjRDb25zdCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByUmV0dXJu
LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3Rh
bmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFscyg1LjAsIGluc3Rh
bmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oNS4wKSk7CisgIGFzc2VydEVxdWFscygxMC41
LCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDEwLjUpKTsKK30pKCk7CisKKy8v
IFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3duIGV4Y2VwdGlvbiB3aXRoIGFuIGY2NCB2YWx1
ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dQYXJhbUQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdh
c21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zf
ZCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X3BhcmFtIiwga1NpZ192X2YpCisgICAg
ICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByRjY0
Q29udmVydEYzMiwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSkuZXhwb3J0
RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4
Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3Nl
cnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbNS4wXSwgKCkgPT4g
aW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSg1LjApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhp
bnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzEwMDAwMDAwXSwgKCkgPT4gaW5zdGFuY2Uu
ZXhwb3J0cy50aHJvd19wYXJhbSgxMDAwMDAwMC41KSk7Cit9KSgpOworCisvLyBUZXN0IHRoZSBl
bmNvZGluZyBvZiBhIGNvbXB1dGVkIHBhcmFtZXRlciB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhy
b3dQYXJhbUNvbXB1dGVkKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2kpOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJ0aHJvd19leHByX3dpdGhfcGFyYW1zIiwga1NpZ192X2RkaSkKKyAgICAg
IC5hZGRCb2R5KFsKKyAgICAgICAgLy8gcDIgKiAocDAgKyBtaW4ocDAsIHAxKSl8MCAtIDIwCisg
ICAgICAgIGtFeHByTG9jYWxHZXQsIDIsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAg
ICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAg
IGtFeHByRjY0TWluLAorICAgICAgICBrRXhwckY2NEFkZCwKKyAgICAgICAga0V4cHJJMzJTQ29u
dmVydEY2NCwKKyAgICAgICAga0V4cHJJMzJNdWwsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDIw
LAorICAgICAgICBrRXhwckkzMlN1YiwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAg
ICAgXSkuZXhwb3J0RnVuYygpCisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRl
cm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgp
OworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFst
OF0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfZXhwcl93aXRoX3BhcmFtcygxLjUsIDIu
NSwgNCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4
LCBbMTJdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X2V4cHJfd2l0aF9wYXJhbXMoNS43
LCAyLjUsIDQpKTsKK30pKCk7CisKKy8vIE5vdyB0aGF0IHdlIGtub3cgY2F0Y2hpbmcgd29ya3Mg
bG9jYWxseSwgd2UgdGVzdCBjYXRjaGluZyBleGNlcHRpb25zIHRoYXQKKy8vIGNyb3NzIGZ1bmN0
aW9uIGJvdW5kYXJpZXMgYW5kL29yIHJhaXNlZCBieSBKYXZhU2NyaXB0LgorKGZ1bmN0aW9uIFRl
c3RDYXRjaENyb3NzRnVuY3Rpb25zKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2kpOworCisg
IC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGhyb3dpbmcgZnJvbSBKUy4gSXQgaXMgaW1wb3J0ZWQg
YnkgdGhlIFdhc20gbW9kdWxlCisgIC8vIGFzIHRocm93X2kuCisgIGZ1bmN0aW9uIHRocm93X3Zh
bHVlKHZhbHVlKSB7CisgICAgdGhyb3cgdmFsdWU7CisgIH0KKyAgbGV0IHNpZ19pbmRleCA9IGJ1
aWxkZXIuYWRkVHlwZShrU2lnX3ZfaSk7CisgIGxldCBrSlNUaHJvd0kgPSBidWlsZGVyLmFkZElt
cG9ydCgiIiwgInRocm93X2kiLCBzaWdfaW5kZXgpOworCisgIC8vIEhlbHBlciBmdW5jdGlvbiB0
aGF0IHRocm93cyBhIHN0cmluZy4gV2FzbSBzaG91bGQgbm90IGNhdGNoIGl0LgorICBmdW5jdGlv
biB0aHJvd19zdHJpbmcoKSB7CisgICAgdGhyb3cgInVzZSB3YXNtIjsKKyAgfQorICBzaWdfaW5k
ZXggPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X3YpOworICBsZXQga0pTVGhyb3dTdHJpbmcgPSBi
dWlsZGVyLmFkZEltcG9ydCgiIiwgInRocm93X3N0cmluZyIsIHNpZ19pbmRleCk7CisKKyAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRoYXQgdGhyb3dzIHVuZGVmaW5lZC4gV2FzbSBzaG91bGQgbm90IGNh
dGNoIGl0LgorICBmdW5jdGlvbiB0aHJvd191bmRlZmluZWQoKSB7CisgICAgdGhyb3cgdW5kZWZp
bmVkOworICB9CisgIGxldCBrSlNUaHJvd1VuZGVmaW5lZCA9IGJ1aWxkZXIuYWRkSW1wb3J0KCIi
LCAidGhyb3dfdW5kZWZpbmVkIiwgc2lnX2luZGV4KTsKKworICAvLyBIZWxwZXIgZnVuY3Rpb24g
dGhhdCB0aHJvd3MgYW4gZnAuIFdhc20gc2hvdWxkIG5vdCBjYXRjaCBpdC4KKyAgZnVuY3Rpb24g
dGhyb3dfZnAoKSB7CisgICAgdGhyb3cgMTAuNTsKKyAgfQorICBsZXQga0pTVGhyb3dGUCA9IGJ1
aWxkZXIuYWRkSW1wb3J0KCIiLCAidGhyb3dfZnAiLCBzaWdfaW5kZXgpOworCisgIC8vIEhlbHBl
ciBmdW5jdGlvbiB0aGF0IHRocm93cyBhIGxhcmdlIG51bWJlci4gV2FzbSBzaG91bGQgbm90IGNh
dGNoIGl0LgorICBmdW5jdGlvbiB0aHJvd19sYXJnZSgpIHsKKyAgICB0aHJvdyAxZSsyODsKKyAg
fQorICBsZXQga0pTVGhyb3dMYXJnZSA9IGJ1aWxkZXIuYWRkSW1wb3J0KCIiLCAidGhyb3dfbGFy
Z2UiLCBzaWdfaW5kZXgpOworCisgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGhyb3dpbmcgZnJv
bSBXZWJBc3NlbWJseS4KKyAgbGV0IGtXYXNtVGhyb3dGdW5jdGlvbiA9CisgICAgYnVpbGRlci5h
ZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAg
a0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSkK
KyAgICAgIC5pbmRleDsKKworICAvLyBTY2VuYXJpbyAxOiBUaHJvdyBhbmQgY2F0Y2ggYXBwZWFy
IG9uIHRoZSBzYW1lIGZ1bmN0aW9uLiBUaGlzIHNob3VsZAorICAvLyBoYXBwZW4gaW4gY2FzZSBv
ZiBpbmxpbmluZywgZm9yIGV4YW1wbGUuCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInNhbWVfc2Nv
cGUiLCBrU2lnX2lfaSkKKyAgICAuYWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21JMzIs
CisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDAsCisg
ICAgICAgIGtFeHBySTMyTmUsCisgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAg
ICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAg
ICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJJ
MzJDb25zdCwgNjMsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICBrRXhwckVuZAor
ICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJzYW1l
X3Njb3BlX2lnbm9yZSIsIGtTaWdfaV9pKQorICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJU
cnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4
cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgIGtF
eHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgXSkKKyAgICAuZXhwb3J0
RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInNhbWVfc2NvcGVfbXVsdGlwbGUiLCBr
U2lnX2lfaSkKKyAgICAvLyBwYXRoID0gMDsKKyAgICAvLworICAgIC8vIHRyeSB7CisgICAgLy8g
ICB0cnkgeworICAgIC8vICAgICB0cnkgeworICAgIC8vICAgICAgIGlmIChwID09IDEpCisgICAg
Ly8gICAgICAgICB0aHJvdyAxOworICAgIC8vICAgICAgIHBhdGggfD0gMgorICAgIC8vICAgICB9
IGNhdGNoICh2KSB7CisgICAgLy8gICAgICAgcGF0aCB8PSB2IHwgNDsKKyAgICAvLyAgICAgICB0
aHJvdyBwYXRoOworICAgIC8vICAgICB9CisgICAgLy8gICAgIGlmIChwID09IDIpCisgICAgLy8g
ICAgICAgdGhyb3cgcGF0aHw4OworICAgIC8vICAgICBwYXRoIHw9IDE2OworICAgIC8vICAgfSBj
YXRjaCAodikgeworICAgIC8vICAgICBwYXRoIHw9IHYgfCAzMjsKKyAgICAvLyAgICAgdGhyb3cg
cGF0aDsKKyAgICAvLyAgIH0KKyAgICAvLyAgIGlmIChwID09IDMpCisgICAgLy8gICAgIHRocm93
IHBhdGh8NjQ7CisgICAgLy8gICBwYXRoIHw9IDEyOAorICAgIC8vIH0gY2F0Y2ggKHYpIHsKKyAg
ICAvLyAgIHBhdGggfD0gdiB8IDI1NjsKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyByZXR1cm4g
cGF0aDsKKyAgICAvLworICAgIC8vIHAgPT0gMSAtPiBwYXRoID09IDI5MworICAgIC8vIHAgPT0g
MiAtPiBwYXRoID09IDI5OAorICAgIC8vIHAgPT0gMyAtPiBwYXRoID09IDMzOAorICAgIC8vIGVs
c2UgICAtPiBwYXRoID09IDE0NgorICAgIC5hZGRMb2NhbHMoa1dhc21JMzIsIDEpCisgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUcnks
IGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAg
ICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAg
ICAgICAgICAgICBrRXhwckkzMkVxLAorICAgICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQs
CisgICAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICAgICAgICBrRXhw
clRocm93LCBleGNlcHQsCisgICAgICAgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAg
ICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAg
ICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAgICAgIGtFeHBySTMyQ29uc3Qs
IDQsCisgICAgICAgICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICAgICAgICBrRXhwclRocm93
LCBleGNlcHQsCisgICAgICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgICAgICBr
RXhwckVuZCwKKyAgICAgICAgICAgIGtFeHByTG9jYWxUZWUsIDEsCisgICAgICAgICAgICBrRXhw
ckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAgICAg
IGtFeHBySTMyRXEsCisgICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAg
ICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDgsCisg
ICAgICAgICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICAgICAgICBrRXhwclRocm93LCBleGNl
cHQsCisgICAgICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgICAgICBrRXhwckVu
ZCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDE2LAorICAgICAgICAgICAga0V4cHJJMzJJ
b3IsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgICAga0V4cHJJMzJD
b25zdCwgMzIsCisgICAgICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAgICAgIGtFeHByVGhy
b3csIGV4Y2VwdCwKKyAgICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgICAga0V4
cHJFbmQsCisgICAgICAgICAga0V4cHJMb2NhbFRlZSwgMSwKKyAgICAgICAgICBrRXhwckxvY2Fs
R2V0LCAwLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDMsCisgICAgICAgICAga0V4cHJJMzJF
cSwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwckxvY2Fs
R2V0LCAxLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgLyo2ND0qLyAxOTIsIDAsCisgICAg
ICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAg
ICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAg
ICAga0V4cHJJMzJDb25zdCwgLyoxMjg9Ki8gMTI4LCAxLAorICAgICAgICAgIGtFeHBySTMySW9y
LAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwg
LyoyNTY9Ki8gMTI4LCAyLAorICAgICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICBrRXhwckVu
ZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgLy8gU2NlbmFyaW8gMjogQ2F0Y2hl
cyBhbiBleGNlcHRpb24gcmFpc2VkIGZyb20gdGhlIGRpcmVjdCBjYWxsZWUuCisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oImZyb21fZGlyZWN0X2NhbGxlZSIsIGtTaWdfaV9pKQorICAgIC5hZGRCb2R5
KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwK
KyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtXYXNtVGhyb3dGdW5jdGlvbiwKKyAgICAgICAg
a0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgIGtFeHBy
RW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICAvLyBTY2VuYXJpbyAzOiBDYXRj
aGVzIGFuIGV4Y2VwdGlvbiByYWlzZWQgZnJvbSBhbiBpbmRpcmVjdCBjYWxsZWUuCisgIGxldCBz
aWdfdl9pID0gYnVpbGRlci5hZGRUeXBlKGtTaWdfdl9pKTsKKyAgYnVpbGRlci5hcHBlbmRUb1Rh
YmxlKFtrV2FzbVRocm93RnVuY3Rpb24sIGtXYXNtVGhyb3dGdW5jdGlvbl0pOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJmcm9tX2luZGlyZWN0X2NhbGxlZSIsIGtTaWdfaV9paSkKKyAgICAuYWRk
Qm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgIGtFeHByTG9jYWxHZXQs
IDAsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAgIGtFeHByQ2FsbEluZGlyZWN0
LCBzaWdfdl9pLCBrVGFibGVaZXJvLAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAg
a0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAga0V4cHJFbmQKKyAgICBdKQorICAgIC5leHBvcnRG
dW5jKCk7CisKKyAgLy8gU2NlbmFyaW8gNDogRG9lcyBub3QgY2F0Y2ggYW4gZXhjZXB0aW9uIHJh
aXNlZCBpbiBKUywgZXZlbiBpZiBwcmltaXRpdmUKKyAgLy8gdmFsdWVzIGFyZSBiZWluZyB1c2Vk
IGFzIGV4Y2VwdGlvbnMuCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImlfZnJvbV9qcyIsIGtTaWdf
aV9pKQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAg
a0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtKU1Rocm93SSwK
KyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAg
ICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByRW5kLAorICAgIF0pCisgICAgLmV4
cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJzdHJpbmdfZnJvbV9qcyIsIGtT
aWdfdl92KQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAg
ICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrSlNUaHJvd1N0cmluZywKKyAgICAgIGtFeHByQ2F0Y2gs
IGV4Y2VwdCwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByRW5kLAorICAg
IF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJmcF9mcm9t
X2pzIiwga1NpZ192X3YpCisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtXYXNtVm9p
ZCwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtKU1Rocm93RlAsCisgICAgICBrRXhwckNh
dGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICBrRXhwckVuZCwK
KyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigibGFy
Z2VfZnJvbV9qcyIsIGtTaWdfdl92KQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBr
V2FzbVZvaWQsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrSlNUaHJvd0xhcmdlLAorICAg
ICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAg
a0V4cHJFbmQsCisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVu
Y3Rpb24oInVuZGVmaW5lZF9mcm9tX2pzIiwga1NpZ192X3YpCisgICAgLmFkZEJvZHkoWworICAg
ICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtKU1Ro
cm93VW5kZWZpbmVkLAorICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwclVu
cmVhY2hhYmxlLAorICAgICAga0V4cHJFbmQsCisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOwor
CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyIiOiB7CisgICAgICB0aHJv
d19pOiB0aHJvd192YWx1ZSwKKyAgICAgIHRocm93X3N0cmluZzogdGhyb3dfc3RyaW5nLAorICAg
ICAgdGhyb3dfZnA6IHRocm93X2ZwLAorICAgICAgdGhyb3dfbGFyZ2UsIHRocm93X2xhcmdlLAor
ICAgICAgdGhyb3dfdW5kZWZpbmVkOiB0aHJvd191bmRlZmluZWQKKyAgfX0pOworCisgIGFzc2Vy
dEVxdWFscyg2MywgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlKDApKTsKKyAgYXNzZXJ0RXF1
YWxzKDEwMjQsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZSgxMDI0KSk7CisgIGFzc2VydEVx
dWFscygtMywgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlKC0zKSk7CisgIGFzc2VydEVxdWFs
cygtMSwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX2lnbm9yZSgtMSkpOworICBhc3NlcnRF
cXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX2lnbm9yZSgxKSk7CisgIGFzc2Vy
dEVxdWFscygweDdGRkZGRkZGLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfaWdub3JlKDB4
N0ZGRkZGRkYpKTsKKyAgYXNzZXJ0RXF1YWxzKDEwMjQsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9z
Y29wZV9pZ25vcmUoMTAyNCkpOworICBhc3NlcnRFcXVhbHMoLTEsIGluc3RhbmNlLmV4cG9ydHMu
c2FtZV9zY29wZV9pZ25vcmUoLTEpKTsKKyAgYXNzZXJ0RXF1YWxzKDI5MywgaW5zdGFuY2UuZXhw
b3J0cy5zYW1lX3Njb3BlX211bHRpcGxlKDEpKTsKKyAgYXNzZXJ0RXF1YWxzKDI5OCwgaW5zdGFu
Y2UuZXhwb3J0cy5zYW1lX3Njb3BlX211bHRpcGxlKDIpKTsKKyAgYXNzZXJ0RXF1YWxzKDMzOCwg
aW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX211bHRpcGxlKDMpKTsKKyAgYXNzZXJ0RXF1YWxz
KDE0NiwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX211bHRpcGxlKDApKTsKKyAgYXNzZXJ0
RXF1YWxzKC0xMDAyNCwgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2RpcmVjdF9jYWxsZWUoLTEwMDI0
KSk7CisgIGFzc2VydEVxdWFscygzMzM0MzMzLCBpbnN0YW5jZS5leHBvcnRzLmZyb21fZGlyZWN0
X2NhbGxlZSgzMzM0MzMzKSk7CisgIGFzc2VydEVxdWFscygtMSwgaW5zdGFuY2UuZXhwb3J0cy5m
cm9tX2RpcmVjdF9jYWxsZWUoMHhGRkZGRkZGRikpOworICBhc3NlcnRFcXVhbHMoMHg3RkZGRkZG
RiwgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2RpcmVjdF9jYWxsZWUoMHg3RkZGRkZGRikpOworICBh
c3NlcnRFcXVhbHMoMTAsIGluc3RhbmNlLmV4cG9ydHMuZnJvbV9pbmRpcmVjdF9jYWxsZWUoMTAs
IDApKTsKKyAgYXNzZXJ0RXF1YWxzKDc3LCBpbnN0YW5jZS5leHBvcnRzLmZyb21faW5kaXJlY3Rf
Y2FsbGVlKDc3LCAxKSk7CisKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzKCgpID0+IGluc3RhbmNlLmV4
cG9ydHMuaV9mcm9tX2pzKDEwKSwgMTApOworICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5z
dGFuY2UuZXhwb3J0cy5pX2Zyb21fanMoLTEwKSwgLTEwKTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxz
KGluc3RhbmNlLmV4cG9ydHMuc3RyaW5nX2Zyb21fanMsICJ1c2Ugd2FzbSIpOworICBhc3NlcnRU
aHJvd3NFcXVhbHMoaW5zdGFuY2UuZXhwb3J0cy5mcF9mcm9tX2pzLCAxMC41KTsKKyAgYXNzZXJ0
VGhyb3dzRXF1YWxzKGluc3RhbmNlLmV4cG9ydHMubGFyZ2VfZnJvbV9qcywgMWUrMjgpOworICBh
c3NlcnRUaHJvd3NFcXVhbHMoaW5zdGFuY2UuZXhwb3J0cy51bmRlZmluZWRfZnJvbV9qcywgdW5k
ZWZpbmVkKTsKK30pKCk7CisKKy8vIERlbGVnYXRlIHdpdGggYSB0cnkgYmxvY2sgdGhhdCBuZXZl
ciB0aHJvd3MuCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlTm9UaHJvdygpIHsKKyAgbGV0IGJ1aWxk
ZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFk
ZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfdikK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAg
IGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAg
ICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAg
ICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4
cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2Vy
dEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRlc3QoKSk7Cit9KSgpOworCisvLyBEZWxlZ2F0
ZSBleGNlcHRpb24gaGFuZGxpbmcgdG8gb3V0ZXIgdHJ5L2NhdGNoIGJsb2NrLgorKGZ1bmN0aW9u
IFRlc3REZWxlZ2F0ZVRocm93KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVp
bGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQg
dGhyb3dfaWYgPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvdycsIGtTaWdfdl9pKQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJJ
Ziwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAg
IGtFeHByRW5kXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywg
a1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwK
KyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckxvY2FsR2V0
LCAwLAorICAgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIHRocm93X2lmLmluZGV4LAorICAg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICBrRXhwckRlbGVnYXRlLCAwLAor
ICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwK
KyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGluc3RhbmNlID0g
YnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0
cy50ZXN0KDApKTsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3RhbmNlLmV4cG9ydHMudGVzdCgxKSk7
Cit9KSgpOworCisvLyBObyBjYXRjaCBibG9jayBtYXRjaGluZyB0aGUgZXhjZXB0aW9uIGluIHRo
ZSBkZWxlZ2F0ZSB0YXJnZXQuCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlVGhyb3dOb0NhdGNoKCkg
eworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0
MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFk
ZFRhZyhrU2lnX3Zfdik7CisgIGxldCB0aHJvd19mbiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Ro
cm93Jywga1NpZ192X3YpCisgICAgICAgICAgICAgICAgICAgICAuYWRkQm9keShba0V4cHJUaHJv
dywgZXhjZXB0MV0pCisgICAgICAgICAgICAgICAgICAgICAuZXhwb3J0RnVuYygpOworICBsZXQg
dGhyb3dfZm5fMiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93XzInLCBrU2lnX3ZfdikKKyAg
ICAgICAgICAgICAgICAgICAgIC5hZGRCb2R5KFtrRXhwclRocm93LCBleGNlcHQyXSkKKyAgICAg
ICAgICAgICAgICAgICAgIC5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rl
c3QnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNt
STMyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByQ2Fs
bEZ1bmN0aW9uLCB0aHJvd19mbi5pbmRleCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEs
CisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0
MiwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckVuZCwKKyAgICAg
IF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7Cisg
IGFzc2VydFRocm93cyhpbnN0YW5jZS5leHBvcnRzLnRlc3QsIFdlYkFzc2VtYmx5LkV4Y2VwdGlv
bik7Cit9KSgpOworCisvLyBDaGVjayB0aGF0IHRoZSBleGNlcHRpb24gaXMgbWVyZ2VkIHByb3Bl
cmx5IHdoZW4gYm90aCBzY29wZXMgY2FuIHRocm93LgorKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZU1l
cmdlKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQg
ZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWls
ZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIC8vIHRocm93X2ZuOiAwIC0+IHJldHVybnMKKyAgLy8g
ICAgICAgICAgIDEgLT4gdGhyb3cgZXhjZXB0MQorICAvLyAgICAgICAgICAgMiAtPiB0aHJvdyBl
eGNlcHQyCisgIGxldCB0aHJvd19mbiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93Jywga1Np
Z192X2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgICAga0V4cHJCbG9jaywga1dhc21Wb2lk
LAorICAgICAgICAgICAga0V4cHJCbG9jaywga1dhc21Wb2lkLAorICAgICAgICAgICAgICBrRXhw
ckJsb2NrLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAg
ICAgICAgICAgICAgICBrRXhwckJyVGFibGUsIDIsIDAsIDEsIDIsCisgICAgICAgICAgICAgIGtF
eHByRW5kLAorICAgICAgICAgICAgICBrRXhwclJldHVybiwKKyAgICAgICAgICAgIGtFeHByRW5k
LAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckVuZCwK
KyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQyXSkKKyAgICAgIC5leHBvcnRGdW5jKCk7Cisg
IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfaWkpCisgICAgICAuYWRkQm9keShb
CisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAw
LAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCB0aHJvd19mbi5pbmRleCwKKyAgICAgICAg
ICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAg
ICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIHRocm93X2ZuLmluZGV4LAorICAgICAgICAgICAg
a0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICBr
RXhwckNhdGNoLCBleGNlcHQxLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAg
IGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBpbnN0YW5jZSA9IGJ1aWxkZXIu
aW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3RhbmNlLmV4cG9ydHMudGVzdCgx
LCAwKSk7CisgIGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRlc3QoMiwgMCks
IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFzc2VydEVxdWFscygyLCBpbnN0YW5jZS5leHBv
cnRzLnRlc3QoMCwgMSkpOworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50
ZXN0KDAsIDIpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICBhc3NlcnRFcXVhbHMoMSwgaW5z
dGFuY2UuZXhwb3J0cy50ZXN0KDAsIDApKTsKK30pKCk7CisKKy8vIERlbGVnYXRlIHRvIHNlY29u
ZCBlbmNsb3NpbmcgdHJ5IHNjb3BlLgorKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZTEoKSB7CisgIGxl
dCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWls
ZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCB0aHJvd19mbiA9IGJ1aWxkZXIuYWRkRnVuY3Rp
b24oJ3Rocm93Jywga1NpZ192X3YpCisgICAgICAgICAgICAgICAgICAgICAuYWRkQm9keShba0V4
cHJUaHJvdywgZXhjZXB0XSkKKyAgICAgICAgICAgICAgICAgICAgIC5leHBvcnRGdW5jKCk7Cisg
IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkz
MiwKKyAgICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgICAga0V4cHJD
YWxsRnVuY3Rpb24sIHRocm93X2ZuLmluZGV4LAorICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0
LCAxLAorICAgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMSwKKyAgICAgICAgICBrRXhwckNhdGNo
LCBleGNlcHQsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICAgIGtFeHBy
RW5kLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJJMzJDb25z
dCwgMywKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGluc3Rh
bmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMoMywgaW5zdGFuY2Uu
ZXhwb3J0cy50ZXN0KCkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZVVucmVhY2hh
YmxlKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQg
ZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWls
ZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2ln
X2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAg
ICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNl
cHQxLAorICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDAsCisgICAgICAgICAga0V4cHJJMzJDb25z
dCwgMSwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckkzMkNv
bnN0LCAyLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQyLAorICAgICAgICAgIGtFeHBySTMy
Q29uc3QsIDMsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3Rh
bmNlLmV4cG9ydHMudGVzdCgpKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVUb0Nh
bGxlcigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0
IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlv
bigndGVzdCcsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwg
a1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAgICBr
RXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMSwKKyAgICAgICAg
a0V4cHJDYXRjaEFsbCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsK
KyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydFRocm93cygoKSA9
PiBpbnN0YW5jZS5leHBvcnRzLnRlc3QoKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30pKCk7
CisKKyhmdW5jdGlvbiBUZXN0VGhyb3dCZWZvcmVVbnJlYWNoYWJsZSgpIHsKKyAgbGV0IGJ1aWxk
ZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRk
VGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3dfYmVmb3JlX3VucmVh
Y2hhYmxlJywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBr
V2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJV
bnJlYWNoYWJsZSwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBrRXhwckkzMkNv
bnN0LCA0MiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisKKyAg
bGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMoNDIs
IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfYmVmb3JlX3VucmVhY2hhYmxlKCkpOworfSkoKTsKKwor
KGZ1bmN0aW9uIFRlc3RVbnJlYWNoYWJsZUluQ2F0Y2hBbGwoKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93X2JlZm9yZV91bnJlYWNoYWJs
ZScsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21J
MzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICBrRXhwckNhdGNoQWxs
LAorICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwg
NDIsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworCisgIGxldCBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0
VGhyb3dXaXRoTG9jYWwoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVy
KCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oJ3Rocm93X3dpdGhfbG9jYWwnLCBrU2lnX2lfdikKKyAgICAuYWRkTG9jYWxz
KGtXYXNtSTMyLCA0KQorICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJJMzJDb25zdCwgNDIs
CisgICAgICAgIGtFeHByRjY0Q29uc3QsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAg
IGtFeHByVHJ5LCBrV2FzbUYzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAg
ICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJGMzJDb25zdCwgMCwgMCwgMCwgMCwK
KyAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByRHJvcCwgIC8vIERyb3AgdGhlIGYzMi4K
KyAgICAgICAga0V4cHJEcm9wLCAgLy8gRHJvcCB0aGUgZjY0LgorICAgICAgICAvLyBMZWF2ZSB0
aGUgJzQyJyBvbiB0aGUgc3RhY2suCisgICAgXSkuZXhwb3J0RnVuYygpOworCisgIGxldCBpbnN0
YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDQyLCBpbnN0YW5j
ZS5leHBvcnRzLnRocm93X3dpdGhfbG9jYWwoKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdENh
dGNobGVzc1RyeSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsK
KyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRG
dW5jdGlvbignY2F0Y2hsZXNzX3RyeScsIGtTaWdfdl9pKQorICAgIC5hZGRCb2R5KFsKKyAgICAg
ICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAg
ICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2Vw
dCwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgXSkuZXhwb3J0
RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywg
ZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3Nl
cnREb2VzTm90VGhyb3coKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5jYXRjaGxlc3NfdHJ5KDApKTsK
KyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW10sICgp
ID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hsZXNzX3RyeSgxKSk7Cit9KSgpOworCisvLyBEZWxl
Z2F0ZSB0byBhIHJlZ3VsYXIgYmxvY2sgaW5zaWRlIGEgdHJ5IGJsb2NrLgorKGZ1bmN0aW9uIFRl
c3REZWxlZ2F0ZVRvQmxvY2soKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWls
ZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxk
ZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAg
ICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByQmxvY2ssIGtXYXNtSTMyLAor
ICAgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAgICBrRXhwclRocm93
LCBleGNlcHQsCisgICAgICAgICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICAgIGtFeHBy
RW5kLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJJMzJDb25z
dCwgMiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgICAgYXNz
ZXJ0VGhyb3dzKCgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoKSwgRXJyb3IsIC9kZWxlZ2F0ZSB0
YXJnZXQgaXNuJ3QgYSB0cnkgYmxvY2svKTsKK30pKCk7CisKKy8vIERlbGVnYXRlIHRvIGEgcmVn
dWxhciBibG9jayB3aXRoIG5vIG91dGVyIHRyeSAoZGVsZWdhdGUgdG8gY2FsbGVyKS4KKyhmdW5j
dGlvbiBUZXN0RGVsZWdhdGVUb0NhbGxlcldpdGhCbG9jaygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBu
ZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtT
aWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfdl92KQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICBrRXhwckJsb2NrLCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4
cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAg
ICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0
RnVuYygpOworICBhc3NlcnRUaHJvd3MoKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSgpLCBFcnJv
ciwgL2RlbGVnYXRlIHRhcmdldCBpc24ndCBhIHRyeSBibG9jay8pOworfSkoKTsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS92OC9tanN1bml0LmpzIGIvSlNUZXN0cy93YXNtL3Y4L21qc3VuaXQu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDI0NTViYWE2MTY5NjZmOGQwYTZiOWRlMWRhMzIxMWZmYTJkYTM2Mgot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9tanN1bml0LmpzCkBAIC0wLDAgKzEs
ODI2IEBACisvLyBDb3B5cmlnaHQgMjAwOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6Cisv
LworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisv
LyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8v
ICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Z1bmN0aW9uIE1qc1VuaXRBc3Nl
cnRpb25FcnJvcihtZXNzYWdlKSB7CisgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CisgIC8vIFRl
bXBvcmFyaWx5IGluc3RhbGwgYSBjdXN0b20gc3RhY2sgdHJhY2UgZm9ybWF0dGVyIGFuZCByZXN0
b3JlIHRoZQorICAvLyBwcmV2aW91cyB2YWx1ZS4KKyAgbGV0IHByZXZQcmVwYXJlU3RhY2tUcmFj
ZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOworICB0cnkgeworICAgIEVycm9yLnByZXBhcmVT
dGFja1RyYWNlID0gTWpzVW5pdEFzc2VydGlvbkVycm9yLnByZXBhcmVTdGFja1RyYWNlOworICAg
IC8vIFRoaXMgYWxsb3dzIGZldGNoaW5nIHRoZSBzdGFjayB0cmFjZSB1c2luZyBUcnlDYXRjaDo6
U3RhY2tUcmFjZS4KKyAgICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKCJNanNVbml0QXNzZXJ0aW9u
RXJyb3IiKS5zdGFjazsKKyAgfSBmaW5hbGx5IHsKKyAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFj
ZSA9IHByZXZQcmVwYXJlU3RhY2tUcmFjZTsKKyAgfQorfQorCisvKgorICogVGhpcyBmaWxlIGlz
IGluY2x1ZGVkIGluIGFsbCBtaW5pIGpzdW5pdCB0ZXN0IGNhc2VzLiAgVGhlIHRlc3QKKyAqIGZy
YW1ld29yayBleHBlY3RzIGxpbmVzIHRoYXQgc2lnbmFsIGZhaWxlZCB0ZXN0cyB0byBzdGFydCB3
aXRoCisgKiB0aGUgZi13b3JkIGFuZCBpZ25vcmUgYWxsIG90aGVyIGxpbmVzLgorICovCisKK01q
c1VuaXRBc3NlcnRpb25FcnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7Cisg
IHJldHVybiB0aGlzLm1lc3NhZ2UgKyAiXG5cblN0YWNrOiAiICsgdGhpcy5zdGFjazsKK307CisK
KworLy8gRXhwZWN0ZWQgYW5kIGZvdW5kIHZhbHVlcyB0aGUgc2FtZSBvYmplY3RzLCBvciB0aGUg
c2FtZSBwcmltaXRpdmUKKy8vIHZhbHVlcy4KKy8vIEZvciBrbm93biBwcmltaXRpdmUgdmFsdWVz
LCBwbGVhc2UgdXNlIGFzc2VydEVxdWFscy4KK3ZhciBhc3NlcnRTYW1lOworCisvLyBJbnZlcnNl
IG9mIGFzc2VydFNhbWUuCit2YXIgYXNzZXJ0Tm90U2FtZTsKKworLy8gRXhwZWN0ZWQgYW5kIGZv
dW5kIHZhbHVlcyBhcmUgaWRlbnRpY2FsIHByaW1pdGl2ZSB2YWx1ZXMgb3IgZnVuY3Rpb25zCisv
LyBvciBzaW1pbGFybHkgc3RydWN0dXJlZCBvYmplY3RzIChjaGVja2luZyBpbnRlcm5hbCBwcm9w
ZXJ0aWVzCisvLyBvZiwgZS5nLiwgTnVtYmVyIGFuZCBEYXRlIG9iamVjdHMsIHRoZSBlbGVtZW50
cyBvZiBhcnJheXMKKy8vIGFuZCB0aGUgcHJvcGVydGllcyBvZiBub24tQXJyYXkgb2JqZWN0cyku
Cit2YXIgYXNzZXJ0RXF1YWxzOworCisvLyBEZWVwIGVxdWFsaXR5IHByZWRpY2F0ZSB1c2VkIGJ5
IGFzc2VydEVxdWFscy4KK3ZhciBkZWVwRXF1YWxzOworCisvLyBFeHBlY3RlZCBhbmQgZm91bmQg
dmFsdWVzIGFyZSBub3QgaWRlbnRpY2FsIHByaW1pdGl2ZSB2YWx1ZXMgb3IgZnVuY3Rpb25zCisv
LyBvciBzaW1pbGFybHkgc3RydWN0dXJlZCBvYmplY3RzIChjaGVja2luZyBpbnRlcm5hbCBwcm9w
ZXJ0aWVzCisvLyBvZiwgZS5nLiwgTnVtYmVyIGFuZCBEYXRlIG9iamVjdHMsIHRoZSBlbGVtZW50
cyBvZiBhcnJheXMKKy8vIGFuZCB0aGUgcHJvcGVydGllcyBvZiBub24tQXJyYXkgb2JqZWN0cyku
Cit2YXIgYXNzZXJ0Tm90RXF1YWxzOworCisvLyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGV4cGVj
dGVkIGFuZCBmb3VuZCB2YWx1ZSBpcyB3aXRoaW4gY2VydGFpbiB0b2xlcmFuY2UuCit2YXIgYXNz
ZXJ0RXF1YWxzRGVsdGE7CisKKy8vIFRoZSBmb3VuZCBvYmplY3QgaXMgYW4gQXJyYXkgd2l0aCB0
aGUgc2FtZSBsZW5ndGggYW5kIGVsZW1lbnRzCisvLyBhcyB0aGUgZXhwZWN0ZWQgb2JqZWN0LiBU
aGUgZXhwZWN0ZWQgb2JqZWN0IGRvZXNuJ3QgbmVlZCB0byBiZSBhbiBBcnJheSwKKy8vIGFzIGxv
bmcgYXMgaXQncyAiYXJyYXktaXNoIi4KK3ZhciBhc3NlcnRBcnJheUVxdWFsczsKKworLy8gVGhl
IGZvdW5kIG9iamVjdCBtdXN0IGhhdmUgdGhlIHNhbWUgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGFz
IHRoZQorLy8gZXhwZWN0ZWQgb2JqZWN0LiBUaGUgdHlwZSBvZiBvYmplY3QgaXNuJ3QgY2hlY2tl
ZC4KK3ZhciBhc3NlcnRQcm9wZXJ0aWVzRXF1YWw7CisKKy8vIEFzc2VydCB0aGF0IHRoZSBzdHJp
bmcgY29udmVyc2lvbiBvZiB0aGUgZm91bmQgdmFsdWUgaXMgZXF1YWwgdG8KKy8vIHRoZSBleHBl
Y3RlZCBzdHJpbmcuIE9ubHkga2VwdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHBsZWFz
ZQorLy8gY2hlY2sgdGhlIHJlYWwgc3RydWN0dXJlIG9mIHRoZSBmb3VuZCB2YWx1ZS4KK3ZhciBh
c3NlcnRUb1N0cmluZ0VxdWFsczsKKworLy8gQ2hlY2tzIHRoYXQgdGhlIGZvdW5kIHZhbHVlIGlz
IHRydWUuIFVzZSB3aXRoIGJvb2xlYW4gZXhwcmVzc2lvbnMKKy8vIGZvciB0ZXN0cyB0aGF0IGRv
ZXNuJ3QgaGF2ZSB0aGVpciBvd24gYXNzZXJ0WFhYIGZ1bmN0aW9uLgordmFyIGFzc2VydFRydWU7
CisKKy8vIENoZWNrcyB0aGF0IHRoZSBmb3VuZCB2YWx1ZSBpcyBmYWxzZS4KK3ZhciBhc3NlcnRG
YWxzZTsKKworLy8gQ2hlY2tzIHRoYXQgdGhlIGZvdW5kIHZhbHVlIGlzIG51bGwuIEtlcHQgZm9y
IGhpc3RvcmljYWwgY29tcGF0aWJpbGl0eSwKKy8vIHBsZWFzZSBqdXN0IHVzZSBhc3NlcnRFcXVh
bHMobnVsbCwgZXhwZWN0ZWQpLgordmFyIGFzc2VydE51bGw7CisKKy8vIENoZWNrcyB0aGF0IHRo
ZSBmb3VuZCB2YWx1ZSBpcyAqbm90KiBudWxsLgordmFyIGFzc2VydE5vdE51bGw7CisKKy8vIEFz
c2VydCB0aGF0IHRoZSBwYXNzZWQgZnVuY3Rpb24gb3IgZXZhbCBjb2RlIHRocm93cyBhbiBleGNl
cHRpb24uCisvLyBUaGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IGlzIGFuIGV4Y2VwdGlvbiBj
b25zdHJ1Y3RvciB0aGF0IHRoZQorLy8gdGhyb3duIGV4Y2VwdGlvbiBpcyBjaGVja2VkIGFnYWlu
c3Qgd2l0aCAiaW5zdGFuY2VvZiIuCisvLyBUaGUgb3B0aW9uYWwgdGhpcmQgYXJndW1lbnQgaXMg
YSBtZXNzYWdlIHR5cGUgc3RyaW5nIG9yIFJlZ0V4cCBvYmplY3QgdGhhdCBpcworLy8gY29tcGFy
ZWQgdG8gdGhlIG1lc3NhZ2Ugb2YgdGhlIHRocm93biBleGNlcHRpb24uCit2YXIgYXNzZXJ0VGhy
b3dzOworCisvLyBBc3NlcnQgdGhhdCB0aGUgcGFzc2VkIGZ1bmN0aW9uIHRocm93cyBhbiBleGNl
cHRpb24uCisvLyBUaGUgZXhjZXB0aW9uIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgc2Vjb25kIGFy
Z3VtZW50IHVzaW5nIGFzc2VydEVxdWFscy4KK3ZhciBhc3NlcnRUaHJvd3NFcXVhbHM7CisKKy8v
IEFzc2VydCB0aGF0IHRoZSBwYXNzZWQgcHJvbWlzZSBkb2VzIG5vdCByZXNvbHZlLCBidXQgZXZl
bnR1YWxseSB0aHJvd3MgYW4KKy8vIGV4Y2VwdGlvbi4gVGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1
bWVudCBpcyBhbiBleGNlcHRpb24gY29uc3RydWN0b3IgdGhhdCB0aGUKKy8vIHRocm93biBleGNl
cHRpb24gaXMgY2hlY2tlZCBhZ2FpbnN0IHdpdGggImluc3RhbmNlb2YiLgorLy8gVGhlIG9wdGlv
bmFsIHRoaXJkIGFyZ3VtZW50IGlzIGEgbWVzc2FnZSB0eXBlIHN0cmluZyBvciBSZWdFeHAgb2Jq
ZWN0IHRoYXQgaXMKKy8vIGNvbXBhcmVkIHRvIHRoZSBtZXNzYWdlIG9mIHRoZSB0aHJvd24gZXhj
ZXB0aW9uLgordmFyIGFzc2VydFRocm93c0FzeW5jOworCisvLyBBc3NlcnQgdGhhdCB0aGUgcGFz
c2VkIGZ1bmN0aW9uIG9yIGV2YWwgY29kZSBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24uCit2
YXIgYXNzZXJ0RG9lc05vdFRocm93OworCisvLyBBc3NlcnRzIHRoYXQgdGhlIGZvdW5kIHZhbHVl
IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBjb25zdHJ1Y3RvciBwYXNzZWQKKy8vIGFzIHRoZSBzZWNv
bmQgYXJndW1lbnQuCit2YXIgYXNzZXJ0SW5zdGFuY2VvZjsKKworLy8gQXNzZXJ0IHRoYXQgdGhp
cyBjb2RlIGlzIG5ldmVyIGV4ZWN1dGVkIChpLmUuLCBhbHdheXMgZmFpbHMgaWYgZXhlY3V0ZWQp
LgordmFyIGFzc2VydFVucmVhY2hhYmxlOworCisvLyBBc3NlcnQgdGhhdCB0aGUgZnVuY3Rpb24g
Y29kZSBpcyAobm90KSBvcHRpbWl6ZWQuCisvLyBPbmx5IHdvcmtzIHdpdGggLS1hbGxvdy1uYXRp
dmVzLXN5bnRheC4KK3ZhciBhc3NlcnRPcHRpbWl6ZWQ7Cit2YXIgYXNzZXJ0VW5vcHRpbWl6ZWQ7
CisKKy8vIEFzc2VydCB0aGF0IGEgc3RyaW5nIGNvbnRhaW5zIGFub3RoZXIgZXhwZWN0ZWQgc3Vi
c3RyaW5nLgordmFyIGFzc2VydENvbnRhaW5zOworCisvLyBBc3NlcnQgdGhhdCBhIHN0cmluZyBt
YXRjaGVzIGEgZ2l2ZW4gcmVnZXguCit2YXIgYXNzZXJ0TWF0Y2hlczsKKworLy8gQXNzZXJ0IHRo
YXQgYSBwcm9taXNlIHJlc29sdmVzIG9yIHJlamVjdHMuCisvLyBQYXJhbWV0ZXJzOgorLy8ge3By
b21pc2V9IC0gdGhlIHByb21pc2UKKy8vIHtzdWNjZXNzfSAtIG9wdGlvbmFsIC0gYSBjYWxsYmFj
ayB3aGljaCBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZQorLy8gICAgICAgICAgICAg
cmVzb2x2aW5nIHByb21pc2UuCisvLyAge2ZhaWx9IC0gICBvcHRpb25hbCAtIGEgY2FsbGJhY2sg
d2hpY2ggaXMgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUKKy8vICAgICAgICAgICAgIHJl
amVjdGluZyBwcm9taXNlLiBJZiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCBidXQgbm8ge2ZhaWx9
CisvLyAgICAgICAgICAgICBjYWxsYmFjayBpcyBzZXQsIHRoZSBlcnJvciBpcyBwcm9wYWdhdGVk
IG91dCBvZiB0aGUgcHJvbWlzZQorLy8gICAgICAgICAgICAgY2hhaW4uCit2YXIgYXNzZXJ0UHJv
bWlzZVJlc3VsdDsKKwordmFyIHByb21pc2VUZXN0Q2hhaW47Cit2YXIgcHJvbWlzZVRlc3RDb3Vu
dCA9IDA7CisKKy8vIFRoZXNlIGJpdHMgbXVzdCBiZSBpbiBzeW5jIHdpdGggYml0cyBkZWZpbmVk
IGluIFJ1bnRpbWVfR2V0T3B0aW1pemF0aW9uU3RhdHVzCit2YXIgVjhPcHRpbWl6YXRpb25TdGF0
dXMgPSB7CisgIGtJc0Z1bmN0aW9uOiAxIDw8IDAsCisgIGtOZXZlck9wdGltaXplOiAxIDw8IDEs
CisgIGtBbHdheXNPcHRpbWl6ZTogMSA8PCAyLAorICBrTWF5YmVEZW9wdGVkOiAxIDw8IDMsCisg
IGtPcHRpbWl6ZWQ6IDEgPDwgNCwKKyAga1R1cmJvRmFubmVkOiAxIDw8IDUsCisgIGtJbnRlcnBy
ZXRlZDogMSA8PCA2LAorICBrTWFya2VkRm9yT3B0aW1pemF0aW9uOiAxIDw8IDcsCisgIGtNYXJr
ZWRGb3JDb25jdXJyZW50T3B0aW1pemF0aW9uOiAxIDw8IDgsCisgIGtPcHRpbWl6aW5nQ29uY3Vy
cmVudGx5OiAxIDw8IDksCisgIGtJc0V4ZWN1dGluZzogMSA8PCAxMCwKKyAga1RvcG1vc3RGcmFt
ZUlzVHVyYm9GYW5uZWQ6IDEgPDwgMTEsCisgIGtMaXRlTW9kZTogMSA8PCAxMiwKKyAga01hcmtl
ZEZvckRlb3B0aW1pemF0aW9uOiAxIDw8IDEzLAorICBrQmFzZWxpbmU6IDEgPDwgMTQsCisgIGtU
b3Btb3N0RnJhbWVJc0ludGVycHJldGVkOiAxIDw8IDE1LAorICBrVG9wbW9zdEZyYW1lSXNCYXNl
bGluZTogMSA8PCAxNiwKK307CisKKy8vIFJldHVybnMgdHJ1ZSBpZiAtLWxpdGUtbW9kZSBpcyBv
biBhbmQgd2UgY2FuJ3QgZXZlciB0dXJuIG9uIG9wdGltaXphdGlvbi4KK3ZhciBpc05ldmVyT3B0
aW1pemVMaXRlTW9kZTsKKworLy8gUmV0dXJucyB0cnVlIGlmIC0tbm8tb3B0IG1vZGUgaXMgb24u
Cit2YXIgaXNOZXZlck9wdGltaXplOworCisvLyBSZXR1cm5zIHRydWUgaWYgLS1hbHdheXMtb3B0
IG1vZGUgaXMgb24uCit2YXIgaXNBbHdheXNPcHRpbWl6ZTsKKworLy8gUmV0dXJucyB0cnVlIGlm
IGdpdmVuIGZ1bmN0aW9uIGluIGludGVycHJldGVkLgordmFyIGlzSW50ZXJwcmV0ZWQ7CisKKy8v
IFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBmdW5jdGlvbiBpbiBiYXNlbGluZS4KK3ZhciBpc0Jhc2Vs
aW5lOworCisvLyBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24gaW4gdW5vcHRpbWl6ZWQg
KGludGVycHJldGVkIG9yIGJhc2VsaW5lKS4KK3ZhciBpc1Vub3B0aW1pemVkOworCisvLyBSZXR1
cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24gaXMgb3B0aW1pemVkLgordmFyIGlzT3B0aW1pemVk
OworCisvLyBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24gaXMgY29tcGlsZWQgYnkgVHVy
Ym9GYW4uCit2YXIgaXNUdXJib0Zhbm5lZDsKKworLy8gTW9ua2V5LXBhdGNoYWJsZSBhbGwtcHVy
cG9zZSBmYWlsdXJlIGhhbmRsZXIuCit2YXIgZmFpbFdpdGhNZXNzYWdlOworCisvLyBSZXR1cm5z
IHRoZSBmb3JtYXR0ZWQgZmFpbHVyZSB0ZXh0LiAgVXNlZCBieSB0ZXN0LWFzeW5jLmpzLgordmFy
IGZvcm1hdEZhaWx1cmVUZXh0OworCisvLyBSZXR1cm5zIGEgcHJldHR5LXByaW50ZWQgc3RyaW5n
IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXNzZWQgdmFsdWUuCit2YXIgcHJldHR5UHJpbnRlZDsK
KworKGZ1bmN0aW9uICgpIHsgIC8vIFNjb3BlIGZvciB1dGlsaXR5IGZ1bmN0aW9ucy4KKworICB2
YXIgT2JqZWN0UHJvdG90eXBlVG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwor
ICB2YXIgTnVtYmVyUHJvdG90eXBlVmFsdWVPZiA9IE51bWJlci5wcm90b3R5cGUudmFsdWVPZjsK
KyAgdmFyIEJvb2xlYW5Qcm90b3R5cGVWYWx1ZU9mID0gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVP
ZjsKKyAgdmFyIFN0cmluZ1Byb3RvdHlwZVZhbHVlT2YgPSBTdHJpbmcucHJvdG90eXBlLnZhbHVl
T2Y7CisgIHZhciBEYXRlUHJvdG90eXBlVmFsdWVPZiA9IERhdGUucHJvdG90eXBlLnZhbHVlT2Y7
CisgIHZhciBSZWdFeHBQcm90b3R5cGVUb1N0cmluZyA9IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJp
bmc7CisgIHZhciBBcnJheVByb3RvdHlwZUZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFj
aDsKKyAgdmFyIEFycmF5UHJvdG90eXBlSm9pbiA9IEFycmF5LnByb3RvdHlwZS5qb2luOworICB2
YXIgQXJyYXlQcm90b3R5cGVNYXAgPSBBcnJheS5wcm90b3R5cGUubWFwOworICB2YXIgQXJyYXlQ
cm90b3R5cGVQdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7CisgIHZhciBKU09OU3RyaW5naWZ5
ID0gSlNPTi5zdHJpbmdpZnk7CisKKyAgdmFyIEJpZ0ludFByb3RvdHlwZVZhbHVlT2Y7CisgIC8v
IFRPRE8obmVpcyk6IFJlbW92ZSB0cnktY2F0Y2ggb25jZSBCaWdJbnRzIGFyZSBlbmFibGVkIGJ5
IGRlZmF1bHQuCisgIHRyeSB7CisgICAgQmlnSW50UHJvdG90eXBlVmFsdWVPZiA9IEJpZ0ludC5w
cm90b3R5cGUudmFsdWVPZjsKKyAgfSBjYXRjaCAoZSkge30KKworICBmdW5jdGlvbiBjbGFzc09m
KG9iamVjdCkgeworICAgIC8vIEFyZ3VtZW50IG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVk
LgorICAgIHZhciBzdHJpbmcgPSBPYmplY3RQcm90b3R5cGVUb1N0cmluZy5jYWxsKG9iamVjdCk7
CisgICAgLy8gU3RyaW5nIGhhcyBmb3JtYXQgW29iamVjdCA8Q2xhc3NOYW1lPl0uCisgICAgcmV0
dXJuIHN0cmluZy5zdWJzdHJpbmcoOCwgc3RyaW5nLmxlbmd0aCAtIDEpOworICB9CisKKworICBm
dW5jdGlvbiBWYWx1ZU9mKHZhbHVlKSB7CisgICAgc3dpdGNoIChjbGFzc09mKHZhbHVlKSkgewor
ICAgICAgY2FzZSAiTnVtYmVyIjoKKyAgICAgICAgcmV0dXJuIE51bWJlclByb3RvdHlwZVZhbHVl
T2YuY2FsbCh2YWx1ZSk7CisgICAgICBjYXNlICJCaWdJbnQiOgorICAgICAgICByZXR1cm4gQmln
SW50UHJvdG90eXBlVmFsdWVPZi5jYWxsKHZhbHVlKTsKKyAgICAgIGNhc2UgIlN0cmluZyI6Cisg
ICAgICAgIHJldHVybiBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mLmNhbGwodmFsdWUpOworICAgICAg
Y2FzZSAiQm9vbGVhbiI6CisgICAgICAgIHJldHVybiBCb29sZWFuUHJvdG90eXBlVmFsdWVPZi5j
YWxsKHZhbHVlKTsKKyAgICAgIGNhc2UgIkRhdGUiOgorICAgICAgICByZXR1cm4gRGF0ZVByb3Rv
dHlwZVZhbHVlT2YuY2FsbCh2YWx1ZSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
dmFsdWU7CisgICAgfQorICB9CisKKworICBwcmV0dHlQcmludGVkID0gZnVuY3Rpb24gcHJldHR5
UHJpbnRlZCh2YWx1ZSkgeworICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7CisgICAgICBjYXNl
ICJzdHJpbmciOgorICAgICAgICByZXR1cm4gSlNPTlN0cmluZ2lmeSh2YWx1ZSk7CisgICAgICBj
YXNlICJiaWdpbnQiOgorICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKSArICJuIjsKKyAgICAg
IGNhc2UgIm51bWJlciI6CisgICAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiAoMSAvIHZhbHVlKSA8
IDApIHJldHVybiAiLTAiOworICAgICAgICAvLyBGQUxMVEhST1VHSC4KKyAgICAgIGNhc2UgImJv
b2xlYW4iOgorICAgICAgY2FzZSAidW5kZWZpbmVkIjoKKyAgICAgIGNhc2UgImZ1bmN0aW9uIjoK
KyAgICAgIGNhc2UgInN5bWJvbCI6CisgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpOworICAg
ICAgY2FzZSAib2JqZWN0IjoKKyAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gIm51
bGwiOworICAgICAgICB2YXIgb2JqZWN0Q2xhc3MgPSBjbGFzc09mKHZhbHVlKTsKKyAgICAgICAg
c3dpdGNoIChvYmplY3RDbGFzcykgeworICAgICAgICAgIGNhc2UgIk51bWJlciI6CisgICAgICAg
ICAgY2FzZSAiQmlnSW50IjoKKyAgICAgICAgICBjYXNlICJTdHJpbmciOgorICAgICAgICAgIGNh
c2UgIkJvb2xlYW4iOgorICAgICAgICAgIGNhc2UgIkRhdGUiOgorICAgICAgICAgICAgcmV0dXJu
IG9iamVjdENsYXNzICsgIigiICsgcHJldHR5UHJpbnRlZChWYWx1ZU9mKHZhbHVlKSkgKyAiKSI7
CisgICAgICAgICAgY2FzZSAiUmVnRXhwIjoKKyAgICAgICAgICAgIHJldHVybiBSZWdFeHBQcm90
b3R5cGVUb1N0cmluZy5jYWxsKHZhbHVlKTsKKyAgICAgICAgICBjYXNlICJBcnJheSI6CisgICAg
ICAgICAgICB2YXIgbWFwcGVkID0gQXJyYXlQcm90b3R5cGVNYXAuY2FsbCgKKyAgICAgICAgICAg
ICAgICB2YWx1ZSwgcHJldHR5UHJpbnRlZEFycmF5RWxlbWVudCk7CisgICAgICAgICAgICB2YXIg
am9pbmVkID0gQXJyYXlQcm90b3R5cGVKb2luLmNhbGwobWFwcGVkLCAiLCIpOworICAgICAgICAg
ICAgcmV0dXJuICJbIiArIGpvaW5lZCArICJdIjsKKyAgICAgICAgICBjYXNlICJVaW50OEFycmF5
IjoKKyAgICAgICAgICBjYXNlICJJbnQ4QXJyYXkiOgorICAgICAgICAgIGNhc2UgIkludDE2QXJy
YXkiOgorICAgICAgICAgIGNhc2UgIlVpbnQxNkFycmF5IjoKKyAgICAgICAgICBjYXNlICJVaW50
MzJBcnJheSI6CisgICAgICAgICAgY2FzZSAiSW50MzJBcnJheSI6CisgICAgICAgICAgY2FzZSAi
RmxvYXQzMkFycmF5IjoKKyAgICAgICAgICBjYXNlICJGbG9hdDY0QXJyYXkiOgorICAgICAgICAg
ICAgdmFyIGpvaW5lZCA9IEFycmF5UHJvdG90eXBlSm9pbi5jYWxsKHZhbHVlLCAiLCIpOworICAg
ICAgICAgICAgcmV0dXJuIG9iamVjdENsYXNzICsgIihbIiArIGpvaW5lZCArICJdKSI7CisgICAg
ICAgICAgY2FzZSAiT2JqZWN0IjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Q2xhc3MgKyAiKCIgKyBTdHJpbmcodmFsdWUp
ICsgIikiOworICAgICAgICB9CisgICAgICAgIC8vIGNsYXNzT2YoKSByZXR1cm5lZCAiT2JqZWN0
Ii4KKyAgICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lOworICAgICAgICBp
ZiAobmFtZSkgcmV0dXJuIG5hbWUgKyAiKCkiOworICAgICAgICByZXR1cm4gIk9iamVjdCgpIjsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiLS0gdW5rbm93biB2YWx1ZSAtLSI7Cisg
ICAgfQorICB9CisKKworICBmdW5jdGlvbiBwcmV0dHlQcmludGVkQXJyYXlFbGVtZW50KHZhbHVl
LCBpbmRleCwgYXJyYXkpIHsKKyAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGluZGV4
IGluIGFycmF5KSkgcmV0dXJuICIiOworICAgIHJldHVybiBwcmV0dHlQcmludGVkKHZhbHVlKTsK
KyAgfQorCisKKyAgZmFpbFdpdGhNZXNzYWdlID0gZnVuY3Rpb24gZmFpbFdpdGhNZXNzYWdlKG1l
c3NhZ2UpIHsKKyAgICB0aHJvdyBuZXcgTWpzVW5pdEFzc2VydGlvbkVycm9yKG1lc3NhZ2UpOwor
ICB9CisKKyAgZm9ybWF0RmFpbHVyZVRleHQgPSBmdW5jdGlvbihleHBlY3RlZFRleHQsIGZvdW5k
LCBuYW1lX29wdCkgeworICAgIHZhciBtZXNzYWdlID0gIkZhaWwiICsgInVyZSI7CisgICAgaWYg
KG5hbWVfb3B0KSB7CisgICAgICAvLyBGaXggdGhpcyB3aGVuIHdlIGRpdGNoIHRoZSBvbGQgdGVz
dCBydW5uZXIuCisgICAgICBtZXNzYWdlICs9ICIgKCIgKyBuYW1lX29wdCArICIpIjsKKyAgICB9
CisKKyAgICB2YXIgZm91bmRUZXh0ID0gcHJldHR5UHJpbnRlZChmb3VuZCk7CisgICAgaWYgKGV4
cGVjdGVkVGV4dC5sZW5ndGggPD0gNDAgJiYgZm91bmRUZXh0Lmxlbmd0aCA8PSA0MCkgeworICAg
ICAgbWVzc2FnZSArPSAiOiBleHBlY3RlZCA8IiArIGV4cGVjdGVkVGV4dCArICI+IGZvdW5kIDwi
ICsgZm91bmRUZXh0ICsgIj4iOworICAgIH0gZWxzZSB7CisgICAgICBtZXNzYWdlICs9ICI6XG5l
eHBlY3RlZDpcbiIgKyBleHBlY3RlZFRleHQgKyAiXG5mb3VuZDpcbiIgKyBmb3VuZFRleHQ7Cisg
ICAgfQorICAgIHJldHVybiBtZXNzYWdlOworICB9CisKKyAgZnVuY3Rpb24gZmFpbChleHBlY3Rl
ZFRleHQsIGZvdW5kLCBuYW1lX29wdCkgeworICAgIHJldHVybiBmYWlsV2l0aE1lc3NhZ2UoZm9y
bWF0RmFpbHVyZVRleHQoZXhwZWN0ZWRUZXh0LCBmb3VuZCwgbmFtZV9vcHQpKTsKKyAgfQorCisK
KyAgZnVuY3Rpb24gZGVlcE9iamVjdEVxdWFscyhhLCBiKSB7CisgICAgdmFyIGFQcm9wcyA9IE9i
amVjdC5rZXlzKGEpOworICAgIGFQcm9wcy5zb3J0KCk7CisgICAgdmFyIGJQcm9wcyA9IE9iamVj
dC5rZXlzKGIpOworICAgIGJQcm9wcy5zb3J0KCk7CisgICAgaWYgKCFkZWVwRXF1YWxzKGFQcm9w
cywgYlByb3BzKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKCFkZWVwRXF1YWxzKGFb
YVByb3BzW2ldXSwgYlthUHJvcHNbaV1dKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisKKworICBkZWVwRXF1YWxzID0gZnVu
Y3Rpb24gZGVlcEVxdWFscyhhLCBiKSB7CisgICAgaWYgKGEgPT09IGIpIHsKKyAgICAgIC8vIENo
ZWNrIGZvciAtMC4KKyAgICAgIGlmIChhID09PSAwKSByZXR1cm4gKDEgLyBhKSA9PT0gKDEgLyBi
KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAodHlwZW9mIGEgIT09IHR5cGVv
ZiBiKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKHR5cGVvZiBhID09PSAibnVtYmVyIikgcmV0dXJu
IGlzTmFOKGEpICYmIGlzTmFOKGIpOworICAgIGlmICh0eXBlb2YgYSAhPT0gIm9iamVjdCIgJiYg
dHlwZW9mIGEgIT09ICJmdW5jdGlvbiIpIHJldHVybiBmYWxzZTsKKyAgICAvLyBOZWl0aGVyIGEg
bm9yIGIgaXMgcHJpbWl0aXZlLgorICAgIHZhciBvYmplY3RDbGFzcyA9IGNsYXNzT2YoYSk7Cisg
ICAgaWYgKG9iamVjdENsYXNzICE9PSBjbGFzc09mKGIpKSByZXR1cm4gZmFsc2U7CisgICAgaWYg
KG9iamVjdENsYXNzID09PSAiUmVnRXhwIikgeworICAgICAgLy8gRm9yIFJlZ0V4cCwganVzdCBj
b21wYXJlIHBhdHRlcm4gYW5kIGZsYWdzIHVzaW5nIGl0cyB0b1N0cmluZy4KKyAgICAgIHJldHVy
biBSZWdFeHBQcm90b3R5cGVUb1N0cmluZy5jYWxsKGEpID09PQorICAgICAgICAgICAgIFJlZ0V4
cFByb3RvdHlwZVRvU3RyaW5nLmNhbGwoYik7CisgICAgfQorICAgIC8vIEZ1bmN0aW9ucyBhcmUg
b25seSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcy4KKyAgICBpZiAob2JqZWN0Q2xhc3MgPT09ICJG
dW5jdGlvbiIpIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0Q2xhc3MgPT09ICJBcnJheSIp
IHsKKyAgICAgIHZhciBlbGVtZW50Q291bnQgPSAwOworICAgICAgaWYgKGEubGVuZ3RoICE9PSBi
Lmxlbmd0aCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKCFkZWVwRXF1YWxzKGFb
aV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgaWYgKG9iamVjdENsYXNzID09PSAiU3RyaW5nIiB8fCBvYmplY3RDbGFzcyA9PT0g
Ik51bWJlciIgfHwKKyAgICAgIG9iamVjdENsYXNzID09PSAiQmlnSW50IiB8fCBvYmplY3RDbGFz
cyA9PT0gIkJvb2xlYW4iIHx8CisgICAgICBvYmplY3RDbGFzcyA9PT0gIkRhdGUiKSB7CisgICAg
ICBpZiAoVmFsdWVPZihhKSAhPT0gVmFsdWVPZihiKSkgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gZGVlcE9iamVjdEVxdWFscyhhLCBiKTsKKyAgfQorCisgIGFzc2VydFNhbWUgPSBm
dW5jdGlvbiBhc3NlcnRTYW1lKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgICBpZiAo
T2JqZWN0LmlzKGV4cGVjdGVkLCBmb3VuZCkpIHJldHVybjsKKyAgICBmYWlsKHByZXR0eVByaW50
ZWQoZXhwZWN0ZWQpLCBmb3VuZCwgbmFtZV9vcHQpOworICB9OworCisgIGFzc2VydE5vdFNhbWUg
PSBmdW5jdGlvbiBhc3NlcnROb3RTYW1lKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAg
ICBpZiAoIU9iamVjdC5pcyhleHBlY3RlZCwgZm91bmQpKSByZXR1cm47CisgICAgZmFpbCgibm90
IHNhbWUgYXMgIiArIHByZXR0eVByaW50ZWQoZXhwZWN0ZWQpLCBmb3VuZCwgbmFtZV9vcHQpOwor
ICB9CisKKyAgYXNzZXJ0RXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBm
b3VuZCwgbmFtZV9vcHQpIHsKKyAgICBpZiAoIWRlZXBFcXVhbHMoZm91bmQsIGV4cGVjdGVkKSkg
eworICAgICAgZmFpbChwcmV0dHlQcmludGVkKGV4cGVjdGVkKSwgZm91bmQsIG5hbWVfb3B0KTsK
KyAgICB9CisgIH07CisKKyAgYXNzZXJ0Tm90RXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0Tm90RXF1
YWxzKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgICBpZiAoZGVlcEVxdWFscyhmb3Vu
ZCwgZXhwZWN0ZWQpKSB7CisgICAgICBmYWlsKCJub3QgZXF1YWxzIHRvICIgKyBwcmV0dHlQcmlu
dGVkKGV4cGVjdGVkKSwgZm91bmQsIG5hbWVfb3B0KTsKKyAgICB9CisgIH07CisKKworICBhc3Nl
cnRFcXVhbHNEZWx0YSA9CisgICAgICBmdW5jdGlvbiBhc3NlcnRFcXVhbHNEZWx0YShleHBlY3Rl
ZCwgZm91bmQsIGRlbHRhLCBuYW1lX29wdCkgeworICAgIGlmIChNYXRoLmFicyhleHBlY3RlZCAt
IGZvdW5kKSA+IGRlbHRhKSB7CisgICAgICBmYWlsKHByZXR0eVByaW50ZWQoZXhwZWN0ZWQpICsg
IiArLSAiICsgcHJldHR5UHJpbnRlZChkZWx0YSksIGZvdW5kLCBuYW1lX29wdCk7CisgICAgfQor
ICB9OworCisKKyAgYXNzZXJ0QXJyYXlFcXVhbHMgPSBmdW5jdGlvbiBhc3NlcnRBcnJheUVxdWFs
cyhleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAgdmFyIHN0YXJ0ID0gIiI7CisgICAg
aWYgKG5hbWVfb3B0KSB7CisgICAgICBzdGFydCA9IG5hbWVfb3B0ICsgIiAtICI7CisgICAgfQor
ICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5sZW5ndGgsIGZvdW5kLmxlbmd0aCwgc3RhcnQgKyAi
YXJyYXkgbGVuZ3RoIik7CisgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gZm91bmQubGVuZ3Ro
KSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFtpXSwgZm91bmRbaV0sCisgICAgICAgICAgICAg
ICAgICAgICBzdGFydCArICJhcnJheSBlbGVtZW50IGF0IGluZGV4ICIgKyBpKTsKKyAgICAgIH0K
KyAgICB9CisgIH07CisKKworICBhc3NlcnRQcm9wZXJ0aWVzRXF1YWwgPSBmdW5jdGlvbiBhc3Nl
cnRQcm9wZXJ0aWVzRXF1YWwoZXhwZWN0ZWQsIGZvdW5kLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9vcHQpIHsKKyAgICAvLyBD
aGVjayBwcm9wZXJ0aWVzIG9ubHkuCisgICAgaWYgKCFkZWVwT2JqZWN0RXF1YWxzKGV4cGVjdGVk
LCBmb3VuZCkpIHsKKyAgICAgIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCk7CisgICAg
fQorICB9OworCisKKyAgYXNzZXJ0VG9TdHJpbmdFcXVhbHMgPSBmdW5jdGlvbiBhc3NlcnRUb1N0
cmluZ0VxdWFscyhleHBlY3RlZCwgZm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9vcHQpIHsKKyAgICBpZiAoZXhwZWN0ZWQg
IT09IFN0cmluZyhmb3VuZCkpIHsKKyAgICAgIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29w
dCk7CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0VHJ1ZSA9IGZ1bmN0aW9uIGFzc2VydFRydWUo
dmFsdWUsIG5hbWVfb3B0KSB7CisgICAgYXNzZXJ0RXF1YWxzKHRydWUsIHZhbHVlLCBuYW1lX29w
dCk7CisgIH07CisKKworICBhc3NlcnRGYWxzZSA9IGZ1bmN0aW9uIGFzc2VydEZhbHNlKHZhbHVl
LCBuYW1lX29wdCkgeworICAgIGFzc2VydEVxdWFscyhmYWxzZSwgdmFsdWUsIG5hbWVfb3B0KTsK
KyAgfTsKKworCisgIGFzc2VydE51bGwgPSBmdW5jdGlvbiBhc3NlcnROdWxsKHZhbHVlLCBuYW1l
X29wdCkgeworICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkgeworICAgICAgZmFpbCgibnVsbCIsIHZh
bHVlLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0Tm90TnVsbCA9IGZ1bmN0
aW9uIGFzc2VydE5vdE51bGwodmFsdWUsIG5hbWVfb3B0KSB7CisgICAgaWYgKHZhbHVlID09PSBu
dWxsKSB7CisgICAgICBmYWlsKCJub3QgbnVsbCIsIHZhbHVlLCBuYW1lX29wdCk7CisgICAgfQor
ICB9OworCisgIGZ1bmN0aW9uIGV4ZWN1dGVDb2RlKGNvZGUpIHsKKyAgICBpZiAodHlwZW9mIGNv
ZGUgPT09ICdmdW5jdGlvbicpICByZXR1cm4gY29kZSgpOworICAgIGlmICh0eXBlb2YgY29kZSA9
PT0gJ3N0cmluZycpIHJldHVybiBldmFsKGNvZGUpOworICAgIGZhaWxXaXRoTWVzc2FnZSgKKyAg
ICAgICAgJ0dpdmVuIGNvZGUgaXMgbmVpdGhlciBmdW5jdGlvbiBub3Igc3RyaW5nLCBidXQgJyAr
ICh0eXBlb2YgY29kZSkgKworICAgICAgICAnOiA8JyArIHByZXR0eVByaW50ZWQoY29kZSkgKyAn
PicpOworICB9CisKKyAgZnVuY3Rpb24gY2hlY2tFeGNlcHRpb24oZSwgdHlwZV9vcHQsIGNhdXNl
X29wdCkgeworICAgIGlmICh0eXBlX29wdCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBhc3NlcnRF
cXVhbHMoJ2Z1bmN0aW9uJywgdHlwZW9mIHR5cGVfb3B0KTsKKyAgICAgIGFzc2VydEluc3RhbmNl
b2YoZSwgdHlwZV9vcHQpOworICAgIH0KKyAgICBpZiAoUmVnRXhwICE9PSB1bmRlZmluZWQgJiYg
Y2F1c2Vfb3B0IGluc3RhbmNlb2YgUmVnRXhwKSB7CisgICAgICBhc3NlcnRNYXRjaGVzKGNhdXNl
X29wdCwgZS5tZXNzYWdlLCAnRXJyb3IgbWVzc2FnZScpOworICAgIH0gZWxzZSBpZiAoY2F1c2Vf
b3B0ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIGFzc2VydEVxdWFscyhjYXVzZV9vcHQsIGUubWVz
c2FnZSwgJ0Vycm9yIG1lc3NhZ2UnKTsKKyAgICB9CisgIH0KKworICBhc3NlcnRUaHJvd3MgPSBm
dW5jdGlvbiBhc3NlcnRUaHJvd3MoY29kZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkgeworICAgIGlm
IChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlX29wdCA9PT0gdW5kZWZpbmVkKSB7CisgICAg
ICBmYWlsV2l0aE1lc3NhZ2UoJ2ludmFsaWQgdXNlIG9mIGFzc2VydFRocm93cywgdW5rbm93biB0
eXBlX29wdCBnaXZlbicpOworICAgIH0KKyAgICBpZiAodHlwZV9vcHQgIT09IHVuZGVmaW5lZCAm
JiB0eXBlb2YgdHlwZV9vcHQgIT09ICdmdW5jdGlvbicpIHsKKyAgICAgIGZhaWxXaXRoTWVzc2Fn
ZSgKKyAgICAgICAgICAnaW52YWxpZCB1c2Ugb2YgYXNzZXJ0VGhyb3dzLCBtYXliZSB5b3Ugd2Fu
dCBhc3NlcnRUaHJvd3NFcXVhbHMnKTsKKyAgICB9CisgICAgdHJ5IHsKKyAgICAgIGV4ZWN1dGVD
b2RlKGNvZGUpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGNoZWNrRXhjZXB0aW9uKGUsIHR5
cGVfb3B0LCBjYXVzZV9vcHQpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBsZXQgbXNnID0g
J0RpZCBub3QgdGhyb3cgZXhjZXB0aW9uJzsKKyAgICBpZiAodHlwZV9vcHQgIT09IHVuZGVmaW5l
ZCAmJiB0eXBlX29wdC5uYW1lICE9PSB1bmRlZmluZWQpCisgICAgICBtc2cgKz0gJywgZXhwZWN0
ZWQgJyArIHR5cGVfb3B0Lm5hbWU7CisgICAgZmFpbFdpdGhNZXNzYWdlKG1zZyk7CisgIH07CisK
KyAgYXNzZXJ0VGhyb3dzRXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0VGhyb3dzRXF1YWxzKGZ1biwg
dmFsKSB7CisgICAgdHJ5IHsKKyAgICAgIGZ1bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
IGFzc2VydFNhbWUodmFsLCBlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZmFpbFdpdGhN
ZXNzYWdlKCdEaWQgbm90IHRocm93IGV4Y2VwdGlvbiwgZXhwZWN0ZWQgJyArIHByZXR0eVByaW50
ZWQodmFsKSk7CisgIH07CisKKyAgYXNzZXJ0VGhyb3dzQXN5bmMgPSBmdW5jdGlvbiBhc3NlcnRU
aHJvd3NBc3luYyhwcm9taXNlLCB0eXBlX29wdCwgY2F1c2Vfb3B0KSB7CisgICAgaWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPiAxICYmIHR5cGVfb3B0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgIGZhaWxX
aXRoTWVzc2FnZSgnaW52YWxpZCB1c2Ugb2YgYXNzZXJ0VGhyb3dzLCB1bmtub3duIHR5cGVfb3B0
IGdpdmVuJyk7CisgICAgfQorICAgIGlmICh0eXBlX29wdCAhPT0gdW5kZWZpbmVkICYmIHR5cGVv
ZiB0eXBlX29wdCAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAgZmFpbFdpdGhNZXNzYWdlKAorICAg
ICAgICAgICdpbnZhbGlkIHVzZSBvZiBhc3NlcnRUaHJvd3MsIG1heWJlIHlvdSB3YW50IGFzc2Vy
dFRocm93c0VxdWFscycpOworICAgIH0KKyAgICBsZXQgbXNnID0gJ1Byb21pc2UgZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24nOworICAgIGlmICh0eXBlX29wdCAhPT0gdW5kZWZpbmVkICYmIHR5cGVf
b3B0Lm5hbWUgIT09IHVuZGVmaW5lZCkKKyAgICAgIG1zZyArPSAnLCBleHBlY3RlZCAnICsgdHlw
ZV9vcHQubmFtZTsKKyAgICByZXR1cm4gYXNzZXJ0UHJvbWlzZVJlc3VsdCgKKyAgICAgICAgcHJv
bWlzZSwKKyAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gdGhyb3cgdGhlIGVycm9yIGFnYWlu
IHRvIGdldCBvdXQgb2YgdGhlIHByb21pc2UKKyAgICAgICAgLy8gY2hhaW4uCisgICAgICAgIHJl
cyA9PiBzZXRUaW1lb3V0KF8gPT4gZmFpbCgnPHRocm93PicsIHJlcywgbXNnKSwgMCksCisgICAg
ICAgIGUgPT4gY2hlY2tFeGNlcHRpb24oZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkpOworICB9Owor
CisgIGFzc2VydEluc3RhbmNlb2YgPSBmdW5jdGlvbiBhc3NlcnRJbnN0YW5jZW9mKG9iaiwgdHlw
ZSkgeworICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIHR5cGUpKSB7CisgICAgICB2YXIgYWN0dWFs
VHlwZU5hbWUgPSBudWxsOworICAgICAgdmFyIGFjdHVhbENvbnN0cnVjdG9yID0gb2JqICYmIE9i
amVjdC5nZXRQcm90b3R5cGVPZihvYmopLmNvbnN0cnVjdG9yOworICAgICAgaWYgKHR5cGVvZiBh
Y3R1YWxDb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICBhY3R1YWxUeXBlTmFt
ZSA9IGFjdHVhbENvbnN0cnVjdG9yLm5hbWUgfHwgU3RyaW5nKGFjdHVhbENvbnN0cnVjdG9yKTsK
KyAgICAgIH0KKyAgICAgIGZhaWxXaXRoTWVzc2FnZSgKKyAgICAgICAgICAnT2JqZWN0IDwnICsg
cHJldHR5UHJpbnRlZChvYmopICsgJz4gaXMgbm90IGFuIGluc3RhbmNlIG9mIDwnICsKKyAgICAg
ICAgICAodHlwZS5uYW1lIHx8IHR5cGUpICsgJz4nICsKKyAgICAgICAgICAoYWN0dWFsVHlwZU5h
bWUgPyAnIGJ1dCBvZiA8JyArIGFjdHVhbFR5cGVOYW1lICsgJz4nIDogJycpKTsKKyAgICB9Cisg
IH07CisKKyAgYXNzZXJ0RG9lc05vdFRocm93ID0gZnVuY3Rpb24gYXNzZXJ0RG9lc05vdFRocm93
KGNvZGUsIG5hbWVfb3B0KSB7CisgICAgdHJ5IHsKKyAgICAgIGV4ZWN1dGVDb2RlKGNvZGUpOwor
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGlmIChlIGluc3RhbmNlb2YgTWpzVW5pdEFzc2VydGlv
bkVycm9yKSB0aHJvdyBlOworICAgICAgZmFpbFdpdGhNZXNzYWdlKCJ0aHJldyBhbiBleGNlcHRp
b246ICIgKyAoZS5tZXNzYWdlIHx8IGUpKTsKKyAgICB9CisgIH07CisKKyAgYXNzZXJ0VW5yZWFj
aGFibGUgPSBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZShuYW1lX29wdCkgeworICAgIC8vIEZp
eCB0aGlzIHdoZW4gd2UgZGl0Y2ggdGhlIG9sZCB0ZXN0IHJ1bm5lci4KKyAgICB2YXIgbWVzc2Fn
ZSA9ICJGYWlsIiArICJ1cmU6IHVucmVhY2hhYmxlIjsKKyAgICBpZiAobmFtZV9vcHQpIHsKKyAg
ICAgIG1lc3NhZ2UgKz0gIiAtICIgKyBuYW1lX29wdDsKKyAgICB9CisgICAgZmFpbFdpdGhNZXNz
YWdlKG1lc3NhZ2UpOworICB9OworCisgIGFzc2VydENvbnRhaW5zID0gZnVuY3Rpb24oc3ViLCB2
YWx1ZSwgbmFtZV9vcHQpIHsKKyAgICBpZiAodmFsdWUgPT0gbnVsbCA/IChzdWIgIT0gbnVsbCkg
OiB2YWx1ZS5pbmRleE9mKHN1YikgPT0gLTEpIHsKKyAgICAgIGZhaWwoImNvbnRhaW5zICciICsg
U3RyaW5nKHN1YikgKyAiJyIsIHZhbHVlLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisgIGFz
c2VydE1hdGNoZXMgPSBmdW5jdGlvbihyZWdleHAsIHN0ciwgbmFtZV9vcHQpIHsKKyAgICBpZiAo
IShyZWdleHAgaW5zdGFuY2VvZiBSZWdFeHApKSB7CisgICAgICByZWdleHAgPSBuZXcgUmVnRXhw
KHJlZ2V4cCk7CisgICAgfQorICAgIGlmICghc3RyLm1hdGNoKHJlZ2V4cCkpIHsKKyAgICAgIGZh
aWwoInNob3VsZCBtYXRjaCAnIiArIHJlZ2V4cCArICInIiwgc3RyLCBuYW1lX29wdCk7CisgICAg
fQorICB9OworCisgIGZ1bmN0aW9uIGNvbmNhdGVuYXRlRXJyb3JzKHN0YWNrLCBleGNlcHRpb24p
IHsKKyAgICAvLyBJZiB0aGUgZXhjZXB0aW9uIGRvZXMgbm90IGNvbnRhaW4gYSBzdGFjayB0cmFj
ZSwgd3JhcCBpdCBpbiBhIG5ldyBFcnJvci4KKyAgICBpZiAoIWV4Y2VwdGlvbi5zdGFjaykgZXhj
ZXB0aW9uID0gbmV3IEVycm9yKGV4Y2VwdGlvbik7CisKKyAgICAvLyBJZiB0aGUgZXhjZXB0aW9u
IGFscmVhZHkgcHJvdmlkZXMgYSBzcGVjaWFsIHN0YWNrIHRyYWNlLCB3ZSBkbyBub3QgbW9kaWZ5
CisgICAgLy8gaXQuCisgICAgaWYgKHR5cGVvZiBleGNlcHRpb24uc3RhY2sgIT09ICdzdHJpbmcn
KSB7CisgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgIH0KKyAgICBleGNlcHRpb24uc3RhY2sg
PSBzdGFjayArICdcblxuJyArIGV4Y2VwdGlvbi5zdGFjazsKKyAgICByZXR1cm4gZXhjZXB0aW9u
OworICB9CisKKyAgYXNzZXJ0UHJvbWlzZVJlc3VsdCA9IGZ1bmN0aW9uKHByb21pc2UsIHN1Y2Nl
c3MsIGZhaWwpIHsKKyAgICBpZiAoc3VjY2VzcyAhPT0gdW5kZWZpbmVkKSBhc3NlcnRFcXVhbHMo
J2Z1bmN0aW9uJywgdHlwZW9mIHN1Y2Nlc3MpOworICAgIGlmIChmYWlsICE9PSB1bmRlZmluZWQp
IGFzc2VydEVxdWFscygnZnVuY3Rpb24nLCB0eXBlb2YgZmFpbCk7CisgICAgYXNzZXJ0SW5zdGFu
Y2VvZihwcm9taXNlLCBQcm9taXNlKTsKKyAgICBjb25zdCBzdGFjayA9IChuZXcgRXJyb3IoKSku
c3RhY2s7CisKKyAgICB2YXIgdGVzdF9wcm9taXNlID0gcHJvbWlzZS50aGVuKAorICAgICAgICBy
ZXN1bHQgPT4geworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoLS1wcm9taXNlVGVz
dENvdW50ID09IDApIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgaWYgKHN1
Y2Nlc3MgIT09IHVuZGVmaW5lZCkgc3VjY2VzcyhyZXN1bHQpOworICAgICAgICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIHRocm93IHRoZSBlcnJvciBh
Z2FpbiB0byBnZXQgb3V0IG9mIHRoZSBwcm9taXNlCisgICAgICAgICAgICAvLyBjaGFpbi4KKyAg
ICAgICAgICAgIHNldFRpbWVvdXQoXyA9PiB7CisgICAgICAgICAgICAgIHRocm93IGNvbmNhdGVu
YXRlRXJyb3JzKHN0YWNrLCBlKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgcmVzdWx0ID0+IHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAg
ICAgaWYgKC0tcHJvbWlzZVRlc3RDb3VudCA9PSAwKSB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgICAgIGlmIChmYWlsID09PSB1bmRlZmluZWQpIHRocm93IHJlc3VsdDsKKyAgICAg
ICAgICAgIGZhaWwocmVzdWx0KTsKKyAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAg
ICAvLyBVc2Ugc2V0VGltZW91dCB0byB0aHJvdyB0aGUgZXJyb3IgYWdhaW4gdG8gZ2V0IG91dCBv
ZiB0aGUgcHJvbWlzZQorICAgICAgICAgICAgLy8gY2hhaW4uCisgICAgICAgICAgICBzZXRUaW1l
b3V0KF8gPT4geworICAgICAgICAgICAgICB0aHJvdyBjb25jYXRlbmF0ZUVycm9ycyhzdGFjaywg
ZSk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAg
aWYgKCFwcm9taXNlVGVzdENoYWluKSBwcm9taXNlVGVzdENoYWluID0gUHJvbWlzZS5yZXNvbHZl
KCk7CisgICAgLy8gd2FpdFVudGlsRG9uZSBpcyBpZGVtcG90ZW50LgorICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICsrcHJvbWlzZVRlc3RDb3VudDsKKyAgICByZXR1cm4gcHJv
bWlzZVRlc3RDaGFpbi50aGVuKHRlc3RfcHJvbWlzZSk7CisgIH07CisKKyAgdmFyIE9wdGltaXph
dGlvblN0YXR1c0ltcGwgPSB1bmRlZmluZWQ7CisKKyAgdmFyIE9wdGltaXphdGlvblN0YXR1cyA9
IGZ1bmN0aW9uKGZ1bikgeworICAgIGlmIChPcHRpbWl6YXRpb25TdGF0dXNJbXBsID09PSB1bmRl
ZmluZWQpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIE9wdGltaXphdGlvblN0YXR1c0ltcGwgPSBu
ZXcgRnVuY3Rpb24oCisgICAgICAgICAgICAiZnVuIiwgInJldHVybiAlR2V0T3B0aW1pemF0aW9u
U3RhdHVzKGZ1bik7Iik7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRocm93IG5ldyBF
cnJvcigibmF0aXZlcyBzeW50YXggbm90IGFsbG93ZWQiKTsKKyAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIE9wdGltaXphdGlvblN0YXR1c0ltcGwoZnVuKTsKKyAgfQorCisgIGFzc2VydFVub3B0
aW1pemVkID0gZnVuY3Rpb24gYXNzZXJ0VW5vcHRpbWl6ZWQoCisgICAgICBmdW4sIG5hbWVfb3B0
LCBza2lwX2lmX21heWJlX2Rlb3B0ZWQgPSB0cnVlKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBP
cHRpbWl6YXRpb25TdGF0dXMoZnVuKTsKKyAgICAvLyBUZXN0cyB0aGF0IHVzZSBhc3NlcnRVbm9w
dGltaXplZCgpIGRvIG5vdCBtYWtlIHNlbnNlIGlmIC0tYWx3YXlzLW9wdAorICAgIC8vIG9wdGlv
biBpcyBwcm92aWRlZC4gU3VjaCB0ZXN0cyBtdXN0IGFkZCAtLW5vLWFsd2F5cy1vcHQgdG8gZmxh
Z3MgY29tbWVudC4KKyAgICBhc3NlcnRGYWxzZSgob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9u
U3RhdHVzLmtBbHdheXNPcHRpbWl6ZSkgIT09IDAsCisgICAgICAgICAgICAgICAgInRlc3QgZG9l
cyBub3QgbWFrZSBzZW5zZSB3aXRoIC0tYWx3YXlzLW9wdCIpOworICAgIGFzc2VydFRydWUoKG9w
dF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsIG5hbWVf
b3B0KTsKKyAgICBpZiAoc2tpcF9pZl9tYXliZV9kZW9wdGVkICYmCisgICAgICAgIChvcHRfc3Rh
dHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua01heWJlRGVvcHRlZCkgIT09IDApIHsKKyAgICAg
IC8vIFdoZW4gLS1kZW9wdC1ldmVyeS1uLXRpbWVzIGZsYWcgaXMgc3BlY2lmaWVkIGl0J3Mgbm8g
bG9uZ2VyIGd1YXJhbnRlZWQKKyAgICAgIC8vIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpcyBz
dGlsbCBkZW9wdGltaXplZCwgc28ga2VlcCBydW5uaW5nIHRoZSB0ZXN0CisgICAgICAvLyB0byBz
dHJlc3MgdGVzdCB0aGUgZGVvcHRpbWl6ZXIuCisgICAgICByZXR1cm47CisgICAgfQorICAgIHZh
ciBpc19vcHRpbWl6ZWQgPSAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtPcHRp
bWl6ZWQpICE9PSAwOworICAgIGFzc2VydEZhbHNlKGlzX29wdGltaXplZCwgbmFtZV9vcHQpOwor
ICB9CisKKyAgYXNzZXJ0T3B0aW1pemVkID0gZnVuY3Rpb24gYXNzZXJ0T3B0aW1pemVkKAorICAg
ICAgZnVuLCBuYW1lX29wdCwgc2tpcF9pZl9tYXliZV9kZW9wdGVkID0gdHJ1ZSkgeworICAgIHZh
ciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKGZ1bik7CisgICAgLy8gVGVzdHMgdGhh
dCB1c2UgYXNzZXJ0T3B0aW1pemVkKCkgZG8gbm90IG1ha2Ugc2Vuc2UgZm9yIExpdGUgbW9kZSB3
aGVyZQorICAgIC8vIG9wdGltaXphdGlvbiBpcyBhbHdheXMgZGlzYWJsZWQsIGV4cGxpY2l0bHkg
ZXhpdCB0aGUgdGVzdCB3aXRoIGEgd2FybmluZy4KKyAgICBpZiAob3B0X3N0YXR1cyAmIFY4T3B0
aW1pemF0aW9uU3RhdHVzLmtMaXRlTW9kZSkgeworICAgICAgcHJpbnQoIldhcm5pbmc6IFRlc3Qg
dXNlcyBhc3NlcnRPcHRpbWl6ZWQgaW4gTGl0ZSBtb2RlLCBza2lwcGluZyB0ZXN0LiIpOworICAg
ICAgdGVzdFJ1bm5lci5xdWl0KDApOworICAgIH0KKyAgICAvLyBUZXN0cyB0aGF0IHVzZSBhc3Nl
cnRPcHRpbWl6ZWQoKSBkbyBub3QgbWFrZSBzZW5zZSBpZiAtLW5vLW9wdAorICAgIC8vIG9wdGlv
biBpcyBwcm92aWRlZC4gU3VjaCB0ZXN0cyBtdXN0IGFkZCAtLW9wdCB0byBmbGFncyBjb21tZW50
LgorICAgIGFzc2VydEZhbHNlKChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua05l
dmVyT3B0aW1pemUpICE9PSAwLAorICAgICAgICAgICAgICAgICJ0ZXN0IGRvZXMgbm90IG1ha2Ug
c2Vuc2Ugd2l0aCAtLW5vLW9wdCIpOworICAgIGFzc2VydFRydWUoCisgICAgICAgIChvcHRfc3Rh
dHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAwLAorICAgICAgICAn
c2hvdWxkIGJlIGEgZnVuY3Rpb246ICcgKyBuYW1lX29wdCk7CisgICAgaWYgKHNraXBfaWZfbWF5
YmVfZGVvcHRlZCAmJgorICAgICAgICAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVz
LmtNYXliZURlb3B0ZWQpICE9PSAwKSB7CisgICAgICAvLyBXaGVuIC0tZGVvcHQtZXZlcnktbi10
aW1lcyBmbGFnIGlzIHNwZWNpZmllZCBpdCdzIG5vIGxvbmdlciBndWFyYW50ZWVkCisgICAgICAv
LyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgc3RpbGwgb3B0aW1pemVkLCBzbyBrZWVwIHJ1
bm5pbmcgdGhlIHRlc3QKKyAgICAgIC8vIHRvIHN0cmVzcyB0ZXN0IHRoZSBkZW9wdGltaXplci4K
KyAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXNzZXJ0VHJ1ZSgKKyAgICAgICAgKG9wdF9zdGF0
dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rT3B0aW1pemVkKSAhPT0gMCwKKyAgICAgICAgJ3No
b3VsZCBiZSBvcHRpbWl6ZWQ6ICcgKyBuYW1lX29wdCk7CisgIH0KKworICBpc05ldmVyT3B0aW1p
emVMaXRlTW9kZSA9IGZ1bmN0aW9uIGlzTmV2ZXJPcHRpbWl6ZUxpdGVNb2RlKCkgeworICAgIHZh
ciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKHVuZGVmaW5lZCwgIiIpOworICAgIHJl
dHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtMaXRlTW9kZSkgIT09IDA7
CisgIH0KKworICBpc05ldmVyT3B0aW1pemUgPSBmdW5jdGlvbiBpc05ldmVyT3B0aW1pemUoKSB7
CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXModW5kZWZpbmVkLCAiIik7
CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua05ldmVyT3B0
aW1pemUpICE9PSAwOworICB9CisKKyAgaXNBbHdheXNPcHRpbWl6ZSA9IGZ1bmN0aW9uIGlzQWx3
YXlzT3B0aW1pemUoKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXMo
dW5kZWZpbmVkLCAiIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25T
dGF0dXMua0Fsd2F5c09wdGltaXplKSAhPT0gMDsKKyAgfQorCisgIGlzSW50ZXJwcmV0ZWQgPSBm
dW5jdGlvbiBpc0ludGVycHJldGVkKGZ1bikgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1p
emF0aW9uU3RhdHVzKGZ1biwgIiIpOworICAgIGFzc2VydFRydWUoKG9wdF9zdGF0dXMgJiBWOE9w
dGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAgICAgICAgICAgICAibm90
IGEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0
YXR1cy5rT3B0aW1pemVkKSA9PT0gMCAmJgorICAgICAgICAgICAob3B0X3N0YXR1cyAmIFY4T3B0
aW1pemF0aW9uU3RhdHVzLmtJbnRlcnByZXRlZCkgIT09IDA7CisgIH0KKworICBpc0Jhc2VsaW5l
ID0gZnVuY3Rpb24gaXNCYXNlbGluZShmdW4pIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGlt
aXphdGlvblN0YXR1cyhmdW4sICIiKTsKKyAgICBhc3NlcnRUcnVlKChvcHRfc3RhdHVzICYgVjhP
cHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAwLAorICAgICAgICAgICAgICAgIm5v
dCBhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25T
dGF0dXMua09wdGltaXplZCkgPT09IDAgJiYKKyAgICAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9w
dGltaXphdGlvblN0YXR1cy5rQmFzZWxpbmUpICE9PSAwOworICB9CisKKyAgaXNVbm9wdGltaXpl
ZCA9IGZ1bmN0aW9uIGlzVW5vcHRpbWl6ZWQoZnVuKSB7CisgICAgcmV0dXJuIGlzSW50ZXJwcmV0
ZWQoZnVuKSB8fCBpc0Jhc2VsaW5lKGZ1bik7CisgIH0KKworICBpc09wdGltaXplZCA9IGZ1bmN0
aW9uIGlzT3B0aW1pemVkKGZ1bikgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9u
U3RhdHVzKGZ1biwgIiIpOworICAgIGFzc2VydFRydWUoKG9wdF9zdGF0dXMgJiBWOE9wdGltaXph
dGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAgICAgICAgICAgICAibm90IGEgZnVu
Y3Rpb24iKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5r
T3B0aW1pemVkKSAhPT0gMDsKKyAgfQorCisgIGlzVHVyYm9GYW5uZWQgPSBmdW5jdGlvbiBpc1R1
cmJvRmFubmVkKGZ1bikgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVz
KGZ1biwgIiIpOworICAgIGFzc2VydFRydWUoKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0
YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAgICAgICAgICAgICAibm90IGEgZnVuY3Rpb24i
KTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rT3B0aW1p
emVkKSAhPT0gMCAmJgorICAgICAgICAgICAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3Rh
dHVzLmtUdXJib0Zhbm5lZCkgIT09IDA7CisgIH0KKworICAvLyBDdXN0b20gVjgtc3BlY2lmaWMg
c3RhY2sgdHJhY2UgZm9ybWF0dGVyIHRoYXQgaXMgdGVtcG9yYXJpbHkgaW5zdGFsbGVkIG9uCisg
IC8vIHRoZSBFcnJvciBvYmplY3QuCisgIE1qc1VuaXRBc3NlcnRpb25FcnJvci5wcmVwYXJlU3Rh
Y2tUcmFjZSA9IGZ1bmN0aW9uKGVycm9yLCBzdGFjaykgeworICAgIC8vIFRyaWdnZXIgZGVmYXVs
dCBmb3JtYXR0aW5nIHdpdGggcmVjdXJzaW9uLgorICAgIHRyeSB7CisgICAgICAvLyBGaWx0ZXIt
b3V0IGFsbCBidXQgdGhlIGZpcnN0IG1qc3VuaXQgZnJhbWUuCisgICAgICBsZXQgZmlsdGVyZWRT
dGFjayA9IFtdOworICAgICAgbGV0IGluTWpzdW5pdCA9IHRydWU7CisgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGxldCBmcmFtZSA9IHN0YWNr
W2ldOworICAgICAgICBpZiAoaW5NanN1bml0KSB7CisgICAgICAgICAgbGV0IGZpbGUgPSBmcmFt
ZS5nZXRGaWxlTmFtZSgpOworICAgICAgICAgIGlmICghZmlsZSB8fCAhZmlsZS5lbmRzV2l0aCgi
bWpzdW5pdC5qcyIpKSB7CisgICAgICAgICAgICBpbk1qc3VuaXQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIC8vIFB1c2ggdGhlIGxhc3QgbWpzdW5pdCBmcmFtZSwgdHlwaWNhbGx5IGNvbnRhaW5pbmcg
dGhlIGFzc2VydGlvbgorICAgICAgICAgICAgLy8gZnVuY3Rpb24uCisgICAgICAgICAgICBpZiAo
aSA+IDApIEFycmF5UHJvdG90eXBlUHVzaC5jYWxsKGZpbHRlcmVkU3RhY2ssIHN0YWNrW2ktMV0p
OworICAgICAgICAgICAgQXJyYXlQcm90b3R5cGVQdXNoLmNhbGwoZmlsdGVyZWRTdGFjaywgc3Rh
Y2tbaV0pOworICAgICAgICAgIH0KKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBBcnJheVByb3RvdHlwZVB1c2guY2FsbChmaWx0ZXJlZFN0YWNrLCBmcmFtZSk7CisgICAg
ICB9CisgICAgICBzdGFjayA9IGZpbHRlcmVkU3RhY2s7CisKKyAgICAgIC8vIEluZmVyIGZ1bmN0
aW9uIG5hbWVzIGFuZCBjYWxjdWxhdGUge21heF9uYW1lX2xlbmd0aH0KKyAgICAgIGxldCBtYXhf
bmFtZV9sZW5ndGggPSAwOworICAgICAgQXJyYXlQcm90b3R5cGVGb3JFYWNoLmNhbGwoc3RhY2ss
IGVhY2ggPT4geworICAgICAgICBsZXQgbmFtZSA9IGVhY2guZ2V0RnVuY3Rpb25OYW1lKCk7Cisg
ICAgICAgIGlmIChuYW1lID09IG51bGwpIG5hbWUgPSAiIjsKKyAgICAgICAgaWYgKGVhY2guaXNF
dmFsKCkpIHsKKyAgICAgICAgICBuYW1lID0gbmFtZTsKKyAgICAgICAgfSBlbHNlIGlmIChlYWNo
LmlzQ29uc3RydWN0b3IoKSkgeworICAgICAgICAgIG5hbWUgPSAibmV3ICIgKyBuYW1lOworICAg
ICAgICB9IGVsc2UgaWYgKGVhY2guaXNOYXRpdmUoKSkgeworICAgICAgICAgIG5hbWUgPSAibmF0
aXZlICIgKyBuYW1lOworICAgICAgICB9IGVsc2UgaWYgKCFlYWNoLmlzVG9wbGV2ZWwoKSkgewor
ICAgICAgICAgIG5hbWUgPSBlYWNoLmdldFR5cGVOYW1lKCkgKyAiLiIgKyBuYW1lOworICAgICAg
ICB9CisgICAgICAgIGVhY2gubmFtZSA9IG5hbWU7CisgICAgICAgIG1heF9uYW1lX2xlbmd0aCA9
IE1hdGgubWF4KG5hbWUubGVuZ3RoLCBtYXhfbmFtZV9sZW5ndGgpCisgICAgICB9KTsKKworICAg
ICAgLy8gRm9ybWF0IHN0YWNrIGZyYW1lcy4KKyAgICAgIHN0YWNrID0gQXJyYXlQcm90b3R5cGVN
YXAuY2FsbChzdGFjaywgZWFjaCA9PiB7CisgICAgICAgIGxldCBmcmFtZSA9ICIgICAgYXQgIiAr
IGVhY2gubmFtZS5wYWRFbmQobWF4X25hbWVfbGVuZ3RoKTsKKyAgICAgICAgbGV0IGZpbGVOYW1l
ID0gZWFjaC5nZXRGaWxlTmFtZSgpOworICAgICAgICBpZiAoZWFjaC5pc0V2YWwoKSkgcmV0dXJu
IGZyYW1lICsgIiAiICsgZWFjaC5nZXRFdmFsT3JpZ2luKCk7CisgICAgICAgIGZyYW1lICs9ICIg
IiArIChmaWxlTmFtZSA/IGZpbGVOYW1lIDogIiIpOworICAgICAgICBsZXQgbGluZT0gZWFjaC5n
ZXRMaW5lTnVtYmVyKCk7CisgICAgICAgIGZyYW1lICs9ICIgIiArIChsaW5lID8gbGluZSA6ICIi
KTsKKyAgICAgICAgbGV0IGNvbHVtbiA9IGVhY2guZ2V0Q29sdW1uTnVtYmVyKCk7CisgICAgICAg
IGZyYW1lICs9IChjb2x1bW4gPyAiOiIgKyBjb2x1bW4gOiAiIik7CisgICAgICAgIHJldHVybiBm
cmFtZTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuICIiICsgZXJyb3IubWVzc2FnZSArICJcbiIg
KyBBcnJheVByb3RvdHlwZUpvaW4uY2FsbChzdGFjaywgIlxuIik7CisgICAgfSBjYXRjaCAoZSkg
e307CisgICAgcmV0dXJuIGVycm9yLnN0YWNrOworICB9Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL3Y4L3dhc20tbW9kdWxlLWJ1aWxkZXIuanMgYi9KU1Rlc3RzL3dhc20vdjgvd2Fz
bS1tb2R1bGUtYnVpbGRlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NjdlZDg0ZDBlNTlmMjg1MmFjYTRhNTIy
M2ZkNTllOWZlZGY3YjEwCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L3dhc20t
bW9kdWxlLWJ1aWxkZXIuanMKQEAgLTAsMCArMSwyMTY5IEBACisvLyBDb3B5cmlnaHQgMjAxNiB0
aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gVXNlZCBmb3IgZW5jb2Rp
bmcgZjMyIGFuZCBkb3VibGUgY29uc3RhbnRzIHRvIGJpdHMuCitsZXQgYnl0ZV92aWV3ID0gbmV3
IFVpbnQ4QXJyYXkoOCk7CitsZXQgZGF0YV92aWV3ID0gbmV3IERhdGFWaWV3KGJ5dGVfdmlldy5i
dWZmZXIpOworCisvLyBUaGUgYnl0ZXMgZnVuY3Rpb24gcmVjZWl2ZXMgb25lIG9mCisvLyAgLSBz
ZXZlcmFsIGFyZ3VtZW50cywgZWFjaCBvZiB3aGljaCBpcyBlaXRoZXIgYSBudW1iZXIgb3IgYSBz
dHJpbmcgb2YgbGVuZ3RoCisvLyAgICAxOyBpZiBpdCdzIGEgc3RyaW5nLCB0aGUgY2hhcmNvZGUg
b2YgdGhlIGNvbnRhaW5lZCBjaGFyYWN0ZXIgaXMgdXNlZC4KKy8vICAtIGEgc2luZ2xlIGFycmF5
IGFyZ3VtZW50IGNvbnRhaW5pbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMKKy8vICAtIGEgc2luZ2xl
IHN0cmluZzsgdGhlIHJldHVybmVkIGJ1ZmZlciB3aWxsIGNvbnRhaW4gdGhlIGNoYXIgY29kZXMg
b2YgYWxsCisvLyAgICBjb250YWluZWQgY2hhcmFjdGVycy4KK2Z1bmN0aW9uIGJ5dGVzKC4uLmlu
cHV0KSB7CisgIGlmIChpbnB1dC5sZW5ndGggPT0gMSAmJiB0eXBlb2YgaW5wdXRbMF0gPT0gJ2Fy
cmF5JykgaW5wdXQgPSBpbnB1dFswXTsKKyAgaWYgKGlucHV0Lmxlbmd0aCA9PSAxICYmIHR5cGVv
ZiBpbnB1dFswXSA9PSAnc3RyaW5nJykgeworICAgIGxldCBsZW4gPSBpbnB1dFswXS5sZW5ndGg7
CisgICAgbGV0IHZpZXcgPSBuZXcgVWludDhBcnJheShsZW4pOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgbGVuOyBpKyspIHZpZXdbaV0gPSBpbnB1dFswXS5jaGFyQ29kZUF0KGkpOworICAgIHJl
dHVybiB2aWV3LmJ1ZmZlcjsKKyAgfQorICBsZXQgdmlldyA9IG5ldyBVaW50OEFycmF5KGlucHV0
Lmxlbmd0aCk7CisgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHsKKyAg
ICBsZXQgdmFsID0gaW5wdXRbaV07CisgICAgaWYgKHR5cGVvZiB2YWwgPT0gJ3N0cmluZycpIHsK
KyAgICAgIGlmICh2YWwubGVuZ3RoICE9IDEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdz
dHJpbmcgaW5wdXRzIG11c3QgaGF2ZSBsZW5ndGggMScpOworICAgICAgfQorICAgICAgdmFsID0g
dmFsLmNoYXJDb2RlQXQoMCk7CisgICAgfQorICAgIHZpZXdbaV0gPSB2YWwgfCAwOworICB9Cisg
IHJldHVybiB2aWV3LmJ1ZmZlcjsKK30KKworLy8gSGVhZGVyIGRlY2xhcmF0aW9uIGNvbnN0YW50
cwordmFyIGtXYXNtSDAgPSAwOwordmFyIGtXYXNtSDEgPSAweDYxOwordmFyIGtXYXNtSDIgPSAw
eDczOwordmFyIGtXYXNtSDMgPSAweDZkOworCit2YXIga1dhc21WMCA9IDB4MTsKK3ZhciBrV2Fz
bVYxID0gMDsKK3ZhciBrV2FzbVYyID0gMDsKK3ZhciBrV2FzbVYzID0gMDsKKwordmFyIGtIZWFk
ZXJTaXplID0gODsKK3ZhciBrUGFnZVNpemUgPSA2NTUzNjsKK3ZhciBrU3BlY01heFBhZ2VzID0g
NjU1MzY7Cit2YXIga01heFZhckludDMyU2l6ZSA9IDU7Cit2YXIga01heFZhckludDY0U2l6ZSA9
IDEwOworCitsZXQga0RlY2xOb0xvY2FscyA9IDA7CisKKy8vIFNlY3Rpb24gZGVjbGFyYXRpb24g
Y29uc3RhbnRzCitsZXQga1Vua25vd25TZWN0aW9uQ29kZSA9IDA7CitsZXQga1R5cGVTZWN0aW9u
Q29kZSA9IDE7ICAgICAgICAvLyBGdW5jdGlvbiBzaWduYXR1cmUgZGVjbGFyYXRpb25zCitsZXQg
a0ltcG9ydFNlY3Rpb25Db2RlID0gMjsgICAgICAvLyBJbXBvcnQgZGVjbGFyYXRpb25zCitsZXQg
a0Z1bmN0aW9uU2VjdGlvbkNvZGUgPSAzOyAgICAvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbnMKK2xl
dCBrVGFibGVTZWN0aW9uQ29kZSA9IDQ7ICAgICAgIC8vIEluZGlyZWN0IGZ1bmN0aW9uIHRhYmxl
IGFuZCBvdGhlciB0YWJsZXMKK2xldCBrTWVtb3J5U2VjdGlvbkNvZGUgPSA1OyAgICAgIC8vIE1l
bW9yeSBhdHRyaWJ1dGVzCitsZXQga0dsb2JhbFNlY3Rpb25Db2RlID0gNjsgICAgICAvLyBHbG9i
YWwgZGVjbGFyYXRpb25zCitsZXQga0V4cG9ydFNlY3Rpb25Db2RlID0gNzsgICAgICAvLyBFeHBv
cnRzCitsZXQga1N0YXJ0U2VjdGlvbkNvZGUgPSA4OyAgICAgICAvLyBTdGFydCBmdW5jdGlvbiBk
ZWNsYXJhdGlvbgorbGV0IGtFbGVtZW50U2VjdGlvbkNvZGUgPSA5OyAgICAgLy8gRWxlbWVudHMg
c2VjdGlvbgorbGV0IGtDb2RlU2VjdGlvbkNvZGUgPSAxMDsgICAgICAgLy8gRnVuY3Rpb24gY29k
ZQorbGV0IGtEYXRhU2VjdGlvbkNvZGUgPSAxMTsgICAgICAgLy8gRGF0YSBzZWdtZW50cworbGV0
IGtEYXRhQ291bnRTZWN0aW9uQ29kZSA9IDEyOyAgLy8gRGF0YSBzZWdtZW50IGNvdW50IChiZXR3
ZWVuIEVsZW1lbnQgJiBDb2RlKQorbGV0IGtUYWdTZWN0aW9uQ29kZSA9IDEzOyAgICAgICAgLy8g
VGFnIHNlY3Rpb24gKGJldHdlZW4gTWVtb3J5ICYgR2xvYmFsKQorCisvLyBOYW1lIHNlY3Rpb24g
dHlwZXMKK2xldCBrTW9kdWxlTmFtZUNvZGUgPSAwOworbGV0IGtGdW5jdGlvbk5hbWVzQ29kZSA9
IDE7CitsZXQga0xvY2FsTmFtZXNDb2RlID0gMjsKKworbGV0IGtXYXNtRnVuY3Rpb25UeXBlRm9y
bSA9IDB4NjA7CitsZXQga1dhc21TdHJ1Y3RUeXBlRm9ybSA9IDB4NWY7CitsZXQga1dhc21BcnJh
eVR5cGVGb3JtID0gMHg1ZTsKK2xldCBrV2FzbUZ1bmN0aW9uU3VidHlwZUZvcm0gPSAweDVkOwor
bGV0IGtXYXNtU3RydWN0U3VidHlwZUZvcm0gPSAweDVjOworbGV0IGtXYXNtQXJyYXlTdWJ0eXBl
Rm9ybSA9IDB4NWI7CisKK2xldCBrTGltaXRzTm9NYXhpbXVtID0gMHgwMDsKK2xldCBrTGltaXRz
V2l0aE1heGltdW0gPSAweDAxOworbGV0IGtMaW1pdHNTaGFyZWROb01heGltdW0gPSAweDAyOwor
bGV0IGtMaW1pdHNTaGFyZWRXaXRoTWF4aW11bSA9IDB4MDM7CitsZXQga0xpbWl0c01lbW9yeTY0
Tm9NYXhpbXVtID0gMHgwNDsKK2xldCBrTGltaXRzTWVtb3J5NjRXaXRoTWF4aW11bSA9IDB4MDU7
CisKKy8vIFNlZ21lbnQgZmxhZ3MKK2xldCBrQWN0aXZlTm9JbmRleCA9IDA7CitsZXQga1Bhc3Np
dmUgPSAxOworbGV0IGtBY3RpdmVXaXRoSW5kZXggPSAyOworbGV0IGtEZWNsYXJhdGl2ZSA9IDM7
CitsZXQga1Bhc3NpdmVXaXRoRWxlbWVudHMgPSA1OworbGV0IGtEZWNsYXJhdGl2ZVdpdGhFbGVt
ZW50cyA9IDc7CisKKy8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uIGZsYWdzCitsZXQga0RlY2xGdW5j
dGlvbk5hbWUgPSAweDAxOworbGV0IGtEZWNsRnVuY3Rpb25JbXBvcnQgPSAweDAyOworbGV0IGtE
ZWNsRnVuY3Rpb25Mb2NhbHMgPSAweDA0OworbGV0IGtEZWNsRnVuY3Rpb25FeHBvcnQgPSAweDA4
OworCisvLyBWYWx1ZSB0eXBlcyBhbmQgcmVsYXRlZAorbGV0IGtXYXNtVm9pZCA9IDB4NDA7Cits
ZXQga1dhc21JMzIgPSAweDdmOworbGV0IGtXYXNtSTY0ID0gMHg3ZTsKK2xldCBrV2FzbUYzMiA9
IDB4N2Q7CitsZXQga1dhc21GNjQgPSAweDdjOworbGV0IGtXYXNtUzEyOCA9IDB4N2I7CitsZXQg
a1dhc21JOCA9IDB4N2E7CitsZXQga1dhc21JMTYgPSAweDc5OworCisvLyBUaGVzZSBhcmUgZGVm
aW5lZCBhcyBuZWdhdGl2ZSBpbnRlZ2VycyB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gcG9zaXRp
dmUgdHlwZQorLy8gaW5kaWNlcy4KK2xldCBrV2FzbUZ1bmNSZWYgPSAtMHgxMDsKK2xldCBrV2Fz
bUFueUZ1bmMgPSBrV2FzbUZ1bmNSZWY7ICAvLyBBbGlhcyBuYW1lZCBhcyBpbiB0aGUgSlMgQVBJ
IHNwZWMKK2xldCBrV2FzbUV4dGVyblJlZiA9IC0weDExOworbGV0IGtXYXNtQW55UmVmID0gLTB4
MTI7CitsZXQga1dhc21FcVJlZiA9IC0weDEzOworbGV0IGtXYXNtSTMxUmVmID0gLTB4MTY7Cits
ZXQga1dhc21EYXRhUmVmID0gLTB4MTk7CisKKy8vIFVzZSB0aGUgcG9zaXRpdmUtYnl0ZSB2ZXJz
aW9ucyBpbnNpZGUgZnVuY3Rpb24gYm9kaWVzLgorbGV0IGtMZWIxMjhNYXNrID0gMHg3ZjsKK2xl
dCBrRnVuY1JlZkNvZGUgPSBrV2FzbUZ1bmNSZWYgJiBrTGViMTI4TWFzazsKK2xldCBrQW55RnVu
Y0NvZGUgPSBrRnVuY1JlZkNvZGU7ICAvLyBBbGlhcyBuYW1lZCBhcyBpbiB0aGUgSlMgQVBJIHNw
ZWMKK2xldCBrRXh0ZXJuUmVmQ29kZSA9IGtXYXNtRXh0ZXJuUmVmICYga0xlYjEyOE1hc2s7Cits
ZXQga0FueVJlZkNvZGUgPSBrV2FzbUFueVJlZiAmIGtMZWIxMjhNYXNrOworbGV0IGtFcVJlZkNv
ZGUgPSBrV2FzbUVxUmVmICYga0xlYjEyOE1hc2s7CitsZXQga0kzMVJlZkNvZGUgPSBrV2FzbUkz
MVJlZiAgJiBrTGViMTI4TWFzazsKK2xldCBrRGF0YVJlZkNvZGUgPSBrV2FzbURhdGFSZWYgICYg
a0xlYjEyOE1hc2s7CisKK2xldCBrV2FzbU9wdFJlZiA9IDB4NmM7CitsZXQga1dhc21SZWYgPSAw
eDZiOworZnVuY3Rpb24gd2FzbU9wdFJlZlR5cGUoaGVhcF90eXBlKSB7CisgIHJldHVybiB7b3Bj
b2RlOiBrV2FzbU9wdFJlZiwgaGVhcF90eXBlOiBoZWFwX3R5cGV9OworfQorZnVuY3Rpb24gd2Fz
bVJlZlR5cGUoaGVhcF90eXBlKSB7CisgIHJldHVybiB7b3Bjb2RlOiBrV2FzbVJlZiwgaGVhcF90
eXBlOiBoZWFwX3R5cGV9OworfQorCitsZXQga1dhc21SdHRXaXRoRGVwdGggPSAweDY5OworZnVu
Y3Rpb24gd2FzbVJ0dChpbmRleCwgZGVwdGgpIHsKKyAgaWYgKGluZGV4IDwgMCkgdGhyb3cgbmV3
IEVycm9yKCJFeHBlY3Rpbmcgbm9uLW5lZ2F0aXZlIHR5cGUgaW5kZXgiKTsKKyAgcmV0dXJuIHtv
cGNvZGU6IGtXYXNtUnR0V2l0aERlcHRoLCBpbmRleDogaW5kZXgsIGRlcHRoOiBkZXB0aH07Cit9
CitsZXQga1dhc21SdHQgPSAweDY4OworZnVuY3Rpb24gd2FzbVJ0dE5vRGVwdGgoaW5kZXgpIHsK
KyAgaWYgKGluZGV4IDwgMCkgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3Rpbmcgbm9uLW5lZ2F0aXZl
IHR5cGUgaW5kZXgiKTsKKyAgcmV0dXJuIHtvcGNvZGU6IGtXYXNtUnR0LCBpbmRleDogaW5kZXh9
OworfQorCitsZXQga0V4dGVybmFsRnVuY3Rpb24gPSAwOworbGV0IGtFeHRlcm5hbFRhYmxlID0g
MTsKK2xldCBrRXh0ZXJuYWxNZW1vcnkgPSAyOworbGV0IGtFeHRlcm5hbEdsb2JhbCA9IDM7Cits
ZXQga0V4dGVybmFsVGFnID0gNDsKKworbGV0IGtUYWJsZVplcm8gPSAwOworbGV0IGtNZW1vcnla
ZXJvID0gMDsKK2xldCBrU2VnbWVudFplcm8gPSAwOworCitsZXQga0V4Y2VwdGlvbkF0dHJpYnV0
ZSA9IDA7CisKKy8vIFVzZWZ1bCBzaWduYXR1cmVzCitsZXQga1NpZ19pX2kgPSBtYWtlU2lnKFtr
V2FzbUkzMl0sIFtrV2FzbUkzMl0pOworbGV0IGtTaWdfbF9sID0gbWFrZVNpZyhba1dhc21JNjRd
LCBba1dhc21JNjRdKTsKK2xldCBrU2lnX2lfbCA9IG1ha2VTaWcoW2tXYXNtSTY0XSwgW2tXYXNt
STMyXSk7CitsZXQga1NpZ19pX2lpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMyXSwgW2tX
YXNtSTMyXSk7CitsZXQga1NpZ19pX2lpaSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMiwg
a1dhc21JMzJdLCBba1dhc21JMzJdKTsKK2xldCBrU2lnX3ZfaWlpaSA9IG1ha2VTaWcoW2tXYXNt
STMyLCBrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSwgW10pOworbGV0IGtTaWdfZl9mZiA9
IG1ha2VTaWcoW2tXYXNtRjMyLCBrV2FzbUYzMl0sIFtrV2FzbUYzMl0pOworbGV0IGtTaWdfZF9k
ZCA9IG1ha2VTaWcoW2tXYXNtRjY0LCBrV2FzbUY2NF0sIFtrV2FzbUY2NF0pOworbGV0IGtTaWdf
bF9sbCA9IG1ha2VTaWcoW2tXYXNtSTY0LCBrV2FzbUk2NF0sIFtrV2FzbUk2NF0pOworbGV0IGtT
aWdfaV9kZCA9IG1ha2VTaWcoW2tXYXNtRjY0LCBrV2FzbUY2NF0sIFtrV2FzbUkzMl0pOworbGV0
IGtTaWdfdl92ID0gbWFrZVNpZyhbXSwgW10pOworbGV0IGtTaWdfaV92ID0gbWFrZVNpZyhbXSwg
W2tXYXNtSTMyXSk7CitsZXQga1NpZ19sX3YgPSBtYWtlU2lnKFtdLCBba1dhc21JNjRdKTsKK2xl
dCBrU2lnX2ZfdiA9IG1ha2VTaWcoW10sIFtrV2FzbUYzMl0pOworbGV0IGtTaWdfZF92ID0gbWFr
ZVNpZyhbXSwgW2tXYXNtRjY0XSk7CitsZXQga1NpZ192X2kgPSBtYWtlU2lnKFtrV2FzbUkzMl0s
IFtdKTsKK2xldCBrU2lnX3ZfaWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dhc21JMzJdLCBbXSk7
CitsZXQga1NpZ192X2lpaSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJd
LCBbXSk7CitsZXQga1NpZ192X2wgPSBtYWtlU2lnKFtrV2FzbUk2NF0sIFtdKTsKK2xldCBrU2ln
X3ZfZCA9IG1ha2VTaWcoW2tXYXNtRjY0XSwgW10pOworbGV0IGtTaWdfdl9kZCA9IG1ha2VTaWco
W2tXYXNtRjY0LCBrV2FzbUY2NF0sIFtdKTsKK2xldCBrU2lnX3ZfZGRpID0gbWFrZVNpZyhba1dh
c21GNjQsIGtXYXNtRjY0LCBrV2FzbUkzMl0sIFtdKTsKK2xldCBrU2lnX2lpX3YgPSBtYWtlU2ln
KFtdLCBba1dhc21JMzIsIGtXYXNtSTMyXSk7CitsZXQga1NpZ19paWlfdiA9IG1ha2VTaWcoW10s
IFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSk7CitsZXQga1NpZ19paV9pID0gbWFrZVNp
Zyhba1dhc21JMzJdLCBba1dhc21JMzIsIGtXYXNtSTMyXSk7CitsZXQga1NpZ19paWlfaSA9IG1h
a2VTaWcoW2tXYXNtSTMyXSwgW2tXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJdKTsKK2xldCBr
U2lnX2lpX2lpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMyXSwgW2tXYXNtSTMyLCBrV2Fz
bUkzMl0pOworbGV0IGtTaWdfaWlpX2lpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMyXSwg
W2tXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJdKTsKKworbGV0IGtTaWdfdl9mID0gbWFrZVNp
Zyhba1dhc21GMzJdLCBbXSk7CitsZXQga1NpZ19mX2YgPSBtYWtlU2lnKFtrV2FzbUYzMl0sIFtr
V2FzbUYzMl0pOworbGV0IGtTaWdfZl9kID0gbWFrZVNpZyhba1dhc21GNjRdLCBba1dhc21GMzJd
KTsKK2xldCBrU2lnX2RfZCA9IG1ha2VTaWcoW2tXYXNtRjY0XSwgW2tXYXNtRjY0XSk7CitsZXQg
a1NpZ19yX3IgPSBtYWtlU2lnKFtrV2FzbUV4dGVyblJlZl0sIFtrV2FzbUV4dGVyblJlZl0pOwor
bGV0IGtTaWdfYV9hID0gbWFrZVNpZyhba1dhc21BbnlGdW5jXSwgW2tXYXNtQW55RnVuY10pOwor
bGV0IGtTaWdfaV9yID0gbWFrZVNpZyhba1dhc21FeHRlcm5SZWZdLCBba1dhc21JMzJdKTsKK2xl
dCBrU2lnX3ZfciA9IG1ha2VTaWcoW2tXYXNtRXh0ZXJuUmVmXSwgW10pOworbGV0IGtTaWdfdl9h
ID0gbWFrZVNpZyhba1dhc21BbnlGdW5jXSwgW10pOworbGV0IGtTaWdfdl9yciA9IG1ha2VTaWco
W2tXYXNtRXh0ZXJuUmVmLCBrV2FzbUV4dGVyblJlZl0sIFtdKTsKK2xldCBrU2lnX3ZfYWEgPSBt
YWtlU2lnKFtrV2FzbUFueUZ1bmMsIGtXYXNtQW55RnVuY10sIFtdKTsKK2xldCBrU2lnX3JfdiA9
IG1ha2VTaWcoW10sIFtrV2FzbUV4dGVyblJlZl0pOworbGV0IGtTaWdfYV92ID0gbWFrZVNpZyhb
XSwgW2tXYXNtQW55RnVuY10pOworbGV0IGtTaWdfYV9pID0gbWFrZVNpZyhba1dhc21JMzJdLCBb
a1dhc21BbnlGdW5jXSk7CitsZXQga1NpZ19zX2kgPSBtYWtlU2lnKFtrV2FzbUkzMl0sIFtrV2Fz
bVMxMjhdKTsKK2xldCBrU2lnX2lfcyA9IG1ha2VTaWcoW2tXYXNtUzEyOF0sIFtrV2FzbUkzMl0p
OworCitmdW5jdGlvbiBtYWtlU2lnKHBhcmFtcywgcmVzdWx0cykgeworICByZXR1cm4ge3BhcmFt
czogcGFyYW1zLCByZXN1bHRzOiByZXN1bHRzfTsKK30KKworZnVuY3Rpb24gbWFrZVNpZ192X3go
eCkgeworICByZXR1cm4gbWFrZVNpZyhbeF0sIFtdKTsKK30KKworZnVuY3Rpb24gbWFrZVNpZ194
X3YoeCkgeworICByZXR1cm4gbWFrZVNpZyhbXSwgW3hdKTsKK30KKworZnVuY3Rpb24gbWFrZVNp
Z192X3h4KHgpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW3gsIHhdLCBbXSk7Cit9CisKK2Z1bmN0aW9u
IG1ha2VTaWdfcl92KHIpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW10sIFtyXSk7Cit9CisKK2Z1bmN0
aW9uIG1ha2VTaWdfcl94KHIsIHgpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW3hdLCBbcl0pOworfQor
CitmdW5jdGlvbiBtYWtlU2lnX3JfeHgociwgeCkgeworICByZXR1cm4gbWFrZVNpZyhbeCwgeF0s
IFtyXSk7Cit9CisKKy8vIE9wY29kZXMKK2NvbnN0IGtXYXNtT3Bjb2RlcyA9IHsKKyAgJ1VucmVh
Y2hhYmxlJzogMHgwMCwKKyAgJ05vcCc6IDB4MDEsCisgICdCbG9jayc6IDB4MDIsCisgICdMb29w
JzogMHgwMywKKyAgJ0lmJzogMHgwNCwKKyAgJ0Vsc2UnOiAweDA1LAorICAnVHJ5JzogMHgwNiwK
KyAgJ0NhdGNoJzogMHgwNywKKyAgJ1Rocm93JzogMHgwOCwKKyAgJ1JldGhyb3cnOiAweDA5LAor
ICAnQ2F0Y2hBbGwnOiAweDE5LAorICAnRW5kJzogMHgwYiwKKyAgJ0JyJzogMHgwYywKKyAgJ0Jy
SWYnOiAweDBkLAorICAnQnJUYWJsZSc6IDB4MGUsCisgICdSZXR1cm4nOiAweDBmLAorICAnQ2Fs
bEZ1bmN0aW9uJzogMHgxMCwKKyAgJ0NhbGxJbmRpcmVjdCc6IDB4MTEsCisgICdSZXR1cm5DYWxs
JzogMHgxMiwKKyAgJ1JldHVybkNhbGxJbmRpcmVjdCc6IDB4MTMsCisgICdDYWxsUmVmJzogMHgx
NCwKKyAgJ1JldHVybkNhbGxSZWYnOiAweDE1LAorICAnTGV0JzogMHgxNywKKyAgJ0RlbGVnYXRl
JzogMHgxOCwKKyAgJ0Ryb3AnOiAweDFhLAorICAnU2VsZWN0JzogMHgxYiwKKyAgJ1NlbGVjdFdp
dGhUeXBlJzogMHgxYywKKyAgJ0xvY2FsR2V0JzogMHgyMCwKKyAgJ0xvY2FsU2V0JzogMHgyMSwK
KyAgJ0xvY2FsVGVlJzogMHgyMiwKKyAgJ0dsb2JhbEdldCc6IDB4MjMsCisgICdHbG9iYWxTZXQn
OiAweDI0LAorICAnVGFibGVHZXQnOiAweDI1LAorICAnVGFibGVTZXQnOiAweDI2LAorICAnSTMy
TG9hZE1lbSc6IDB4MjgsCisgICdJNjRMb2FkTWVtJzogMHgyOSwKKyAgJ0YzMkxvYWRNZW0nOiAw
eDJhLAorICAnRjY0TG9hZE1lbSc6IDB4MmIsCisgICdJMzJMb2FkTWVtOFMnOiAweDJjLAorICAn
STMyTG9hZE1lbThVJzogMHgyZCwKKyAgJ0kzMkxvYWRNZW0xNlMnOiAweDJlLAorICAnSTMyTG9h
ZE1lbTE2VSc6IDB4MmYsCisgICdJNjRMb2FkTWVtOFMnOiAweDMwLAorICAnSTY0TG9hZE1lbThV
JzogMHgzMSwKKyAgJ0k2NExvYWRNZW0xNlMnOiAweDMyLAorICAnSTY0TG9hZE1lbTE2VSc6IDB4
MzMsCisgICdJNjRMb2FkTWVtMzJTJzogMHgzNCwKKyAgJ0k2NExvYWRNZW0zMlUnOiAweDM1LAor
ICAnSTMyU3RvcmVNZW0nOiAweDM2LAorICAnSTY0U3RvcmVNZW0nOiAweDM3LAorICAnRjMyU3Rv
cmVNZW0nOiAweDM4LAorICAnRjY0U3RvcmVNZW0nOiAweDM5LAorICAnSTMyU3RvcmVNZW04Jzog
MHgzYSwKKyAgJ0kzMlN0b3JlTWVtMTYnOiAweDNiLAorICAnSTY0U3RvcmVNZW04JzogMHgzYywK
KyAgJ0k2NFN0b3JlTWVtMTYnOiAweDNkLAorICAnSTY0U3RvcmVNZW0zMic6IDB4M2UsCisgICdN
ZW1vcnlTaXplJzogMHgzZiwKKyAgJ01lbW9yeUdyb3cnOiAweDQwLAorICAnSTMyQ29uc3QnOiAw
eDQxLAorICAnSTY0Q29uc3QnOiAweDQyLAorICAnRjMyQ29uc3QnOiAweDQzLAorICAnRjY0Q29u
c3QnOiAweDQ0LAorICAnSTMyRXF6JzogMHg0NSwKKyAgJ0kzMkVxJzogMHg0NiwKKyAgJ0kzMk5l
JzogMHg0NywKKyAgJ0kzMkx0Uyc6IDB4NDgsCisgICdJMzJMdFUnOiAweDQ5LAorICAnSTMyR3RT
JzogMHg0YSwKKyAgJ0kzMkd0VSc6IDB4NGIsCisgICdJMzJMZVMnOiAweDRjLAorICAnSTMyTGVV
JzogMHg0ZCwKKyAgJ0kzMkdlUyc6IDB4NGUsCisgICdJMzJHZVUnOiAweDRmLAorICAnSTY0RXF6
JzogMHg1MCwKKyAgJ0k2NEVxJzogMHg1MSwKKyAgJ0k2NE5lJzogMHg1MiwKKyAgJ0k2NEx0Uyc6
IDB4NTMsCisgICdJNjRMdFUnOiAweDU0LAorICAnSTY0R3RTJzogMHg1NSwKKyAgJ0k2NEd0VSc6
IDB4NTYsCisgICdJNjRMZVMnOiAweDU3LAorICAnSTY0TGVVJzogMHg1OCwKKyAgJ0k2NEdlUyc6
IDB4NTksCisgICdJNjRHZVUnOiAweDVhLAorICAnRjMyRXEnOiAweDViLAorICAnRjMyTmUnOiAw
eDVjLAorICAnRjMyTHQnOiAweDVkLAorICAnRjMyR3QnOiAweDVlLAorICAnRjMyTGUnOiAweDVm
LAorICAnRjMyR2UnOiAweDYwLAorICAnRjY0RXEnOiAweDYxLAorICAnRjY0TmUnOiAweDYyLAor
ICAnRjY0THQnOiAweDYzLAorICAnRjY0R3QnOiAweDY0LAorICAnRjY0TGUnOiAweDY1LAorICAn
RjY0R2UnOiAweDY2LAorICAnSTMyQ2x6JzogMHg2NywKKyAgJ0kzMkN0eic6IDB4NjgsCisgICdJ
MzJQb3BjbnQnOiAweDY5LAorICAnSTMyQWRkJzogMHg2YSwKKyAgJ0kzMlN1Yic6IDB4NmIsCisg
ICdJMzJNdWwnOiAweDZjLAorICAnSTMyRGl2Uyc6IDB4NmQsCisgICdJMzJEaXZVJzogMHg2ZSwK
KyAgJ0kzMlJlbVMnOiAweDZmLAorICAnSTMyUmVtVSc6IDB4NzAsCisgICdJMzJBbmQnOiAweDcx
LAorICAnSTMySW9yJzogMHg3MiwKKyAgJ0kzMlhvcic6IDB4NzMsCisgICdJMzJTaGwnOiAweDc0
LAorICAnSTMyU2hyUyc6IDB4NzUsCisgICdJMzJTaHJVJzogMHg3NiwKKyAgJ0kzMlJvbCc6IDB4
NzcsCisgICdJMzJSb3InOiAweDc4LAorICAnSTY0Q2x6JzogMHg3OSwKKyAgJ0k2NEN0eic6IDB4
N2EsCisgICdJNjRQb3BjbnQnOiAweDdiLAorICAnSTY0QWRkJzogMHg3YywKKyAgJ0k2NFN1Yic6
IDB4N2QsCisgICdJNjRNdWwnOiAweDdlLAorICAnSTY0RGl2Uyc6IDB4N2YsCisgICdJNjREaXZV
JzogMHg4MCwKKyAgJ0k2NFJlbVMnOiAweDgxLAorICAnSTY0UmVtVSc6IDB4ODIsCisgICdJNjRB
bmQnOiAweDgzLAorICAnSTY0SW9yJzogMHg4NCwKKyAgJ0k2NFhvcic6IDB4ODUsCisgICdJNjRT
aGwnOiAweDg2LAorICAnSTY0U2hyUyc6IDB4ODcsCisgICdJNjRTaHJVJzogMHg4OCwKKyAgJ0k2
NFJvbCc6IDB4ODksCisgICdJNjRSb3InOiAweDhhLAorICAnRjMyQWJzJzogMHg4YiwKKyAgJ0Yz
Mk5lZyc6IDB4OGMsCisgICdGMzJDZWlsJzogMHg4ZCwKKyAgJ0YzMkZsb29yJzogMHg4ZSwKKyAg
J0YzMlRydW5jJzogMHg4ZiwKKyAgJ0YzMk5lYXJlc3RJbnQnOiAweDkwLAorICAnRjMyU3FydCc6
IDB4OTEsCisgICdGMzJBZGQnOiAweDkyLAorICAnRjMyU3ViJzogMHg5MywKKyAgJ0YzMk11bCc6
IDB4OTQsCisgICdGMzJEaXYnOiAweDk1LAorICAnRjMyTWluJzogMHg5NiwKKyAgJ0YzMk1heCc6
IDB4OTcsCisgICdGMzJDb3B5U2lnbic6IDB4OTgsCisgICdGNjRBYnMnOiAweDk5LAorICAnRjY0
TmVnJzogMHg5YSwKKyAgJ0Y2NENlaWwnOiAweDliLAorICAnRjY0Rmxvb3InOiAweDljLAorICAn
RjY0VHJ1bmMnOiAweDlkLAorICAnRjY0TmVhcmVzdEludCc6IDB4OWUsCisgICdGNjRTcXJ0Jzog
MHg5ZiwKKyAgJ0Y2NEFkZCc6IDB4YTAsCisgICdGNjRTdWInOiAweGExLAorICAnRjY0TXVsJzog
MHhhMiwKKyAgJ0Y2NERpdic6IDB4YTMsCisgICdGNjRNaW4nOiAweGE0LAorICAnRjY0TWF4Jzog
MHhhNSwKKyAgJ0Y2NENvcHlTaWduJzogMHhhNiwKKyAgJ0kzMkNvbnZlcnRJNjQnOiAweGE3LAor
ICAnSTMyU0NvbnZlcnRGMzInOiAweGE4LAorICAnSTMyVUNvbnZlcnRGMzInOiAweGE5LAorICAn
STMyU0NvbnZlcnRGNjQnOiAweGFhLAorICAnSTMyVUNvbnZlcnRGNjQnOiAweGFiLAorICAnSTY0
U0NvbnZlcnRJMzInOiAweGFjLAorICAnSTY0VUNvbnZlcnRJMzInOiAweGFkLAorICAnSTY0U0Nv
bnZlcnRGMzInOiAweGFlLAorICAnSTY0VUNvbnZlcnRGMzInOiAweGFmLAorICAnSTY0U0NvbnZl
cnRGNjQnOiAweGIwLAorICAnSTY0VUNvbnZlcnRGNjQnOiAweGIxLAorICAnRjMyU0NvbnZlcnRJ
MzInOiAweGIyLAorICAnRjMyVUNvbnZlcnRJMzInOiAweGIzLAorICAnRjMyU0NvbnZlcnRJNjQn
OiAweGI0LAorICAnRjMyVUNvbnZlcnRJNjQnOiAweGI1LAorICAnRjMyQ29udmVydEY2NCc6IDB4
YjYsCisgICdGNjRTQ29udmVydEkzMic6IDB4YjcsCisgICdGNjRVQ29udmVydEkzMic6IDB4Yjgs
CisgICdGNjRTQ29udmVydEk2NCc6IDB4YjksCisgICdGNjRVQ29udmVydEk2NCc6IDB4YmEsCisg
ICdGNjRDb252ZXJ0RjMyJzogMHhiYiwKKyAgJ0kzMlJlaW50ZXJwcmV0RjMyJzogMHhiYywKKyAg
J0k2NFJlaW50ZXJwcmV0RjY0JzogMHhiZCwKKyAgJ0YzMlJlaW50ZXJwcmV0STMyJzogMHhiZSwK
KyAgJ0Y2NFJlaW50ZXJwcmV0STY0JzogMHhiZiwKKyAgJ0kzMlNFeHRlbmRJOCc6IDB4YzAsCisg
ICdJMzJTRXh0ZW5kSTE2JzogMHhjMSwKKyAgJ0k2NFNFeHRlbmRJOCc6IDB4YzIsCisgICdJNjRT
RXh0ZW5kSTE2JzogMHhjMywKKyAgJ0k2NFNFeHRlbmRJMzInOiAweGM0LAorICAnUmVmTnVsbCc6
IDB4ZDAsCisgICdSZWZJc051bGwnOiAweGQxLAorICAnUmVmRnVuYyc6IDB4ZDIsCisgICdSZWZB
c05vbk51bGwnOiAweGQzLAorICAnQnJPbk51bGwnOiAweGQ0LAorICAnUmVmRXEnOiAweGQ1LAor
ICAnQnJPbk5vbk51bGwnOiAweGQ2Cit9OworCitmdW5jdGlvbiBkZWZpbmVXYXNtT3Bjb2RlKG5h
bWUsIHZhbHVlKSB7CisgIGlmIChnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXMgPT09IHVuZGVm
aW5lZCkgeworICAgIGdsb2JhbFRoaXMua1dhc21PcGNvZGVOYW1lcyA9IHt9OworICB9CisgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBuYW1lLCB7dmFsdWU6IHZhbHVlfSk7Cisg
IGlmIChnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXNbdmFsdWVdICE9PSB1bmRlZmluZWQpIHsK
KyAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSB3YXNtIG9wY29kZTogJHt2YWx1ZX0uIFBy
ZXZpb3VzIG5hbWU6ICR7CisgICAgICAgIGdsb2JhbFRoaXMua1dhc21PcGNvZGVOYW1lc1t2YWx1
ZV19LCBuZXcgbmFtZTogJHtuYW1lfWApOworICB9CisgIGdsb2JhbFRoaXMua1dhc21PcGNvZGVO
YW1lc1t2YWx1ZV0gPSBuYW1lOworfQorZm9yIChsZXQgbmFtZSBpbiBrV2FzbU9wY29kZXMpIHsK
KyAgZGVmaW5lV2FzbU9wY29kZShga0V4cHIke25hbWV9YCwga1dhc21PcGNvZGVzW25hbWVdKTsK
K30KKworLy8gUHJlZml4IG9wY29kZXMKK2NvbnN0IGtQcmVmaXhPcGNvZGVzID0geworICAnR0Mn
OiAweGZiLAorICAnTnVtZXJpYyc6IDB4ZmMsCisgICdTaW1kJzogMHhmZCwKKyAgJ0F0b21pYyc6
IDB4ZmUKK307Citmb3IgKGxldCBwcmVmaXggaW4ga1ByZWZpeE9wY29kZXMpIHsKKyAgZGVmaW5l
V2FzbU9wY29kZShgayR7cHJlZml4fVByZWZpeGAsIGtQcmVmaXhPcGNvZGVzW3ByZWZpeF0pOwor
fQorCisvLyBHQyBvcGNvZGVzCitsZXQga0V4cHJTdHJ1Y3ROZXdXaXRoUnR0ID0gMHgwMTsKK2xl
dCBrRXhwclN0cnVjdE5ld0RlZmF1bHRXaXRoUnR0ID0gMHgwMjsKK2xldCBrRXhwclN0cnVjdEdl
dCA9IDB4MDM7CitsZXQga0V4cHJTdHJ1Y3RHZXRTID0gMHgwNDsKK2xldCBrRXhwclN0cnVjdEdl
dFUgPSAweDA1OworbGV0IGtFeHByU3RydWN0U2V0ID0gMHgwNjsKK2xldCBrRXhwclN0cnVjdE5l
dyA9IDB4MDc7CitsZXQga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0ID0gMHgwODsKK2xldCBrRXhwckFy
cmF5TmV3V2l0aFJ0dCA9IDB4MTE7CitsZXQga0V4cHJBcnJheU5ld0RlZmF1bHRXaXRoUnR0ID0g
MHgxMjsKK2xldCBrRXhwckFycmF5R2V0ID0gMHgxMzsKK2xldCBrRXhwckFycmF5R2V0UyA9IDB4
MTQ7CitsZXQga0V4cHJBcnJheUdldFUgPSAweDE1OworbGV0IGtFeHByQXJyYXlTZXQgPSAweDE2
OworbGV0IGtFeHByQXJyYXlMZW4gPSAweDE3OworbGV0IGtFeHByQXJyYXlDb3B5ID0gMHgxODsK
K2xldCBrRXhwckFycmF5SW5pdCA9IDB4MTk7CitsZXQga0V4cHJBcnJheUluaXRTdGF0aWMgPSAw
eDFhOworbGV0IGtFeHByQXJyYXlOZXcgPSAweDFiOworbGV0IGtFeHByQXJyYXlOZXdEZWZhdWx0
ID0gMHgxYzsKK2xldCBrRXhwckkzMU5ldyA9IDB4MjA7CitsZXQga0V4cHJJMzFHZXRTID0gMHgy
MTsKK2xldCBrRXhwckkzMUdldFUgPSAweDIyOworbGV0IGtFeHByUnR0Q2Fub24gPSAweDMwOwor
bGV0IGtFeHByUnR0U3ViID0gMHgzMTsKK2xldCBrRXhwclJ0dEZyZXNoU3ViID0gMHgzMjsKK2xl
dCBrRXhwclJlZlRlc3QgPSAweDQwOworbGV0IGtFeHByUmVmQ2FzdCA9IDB4NDE7CitsZXQga0V4
cHJCck9uQ2FzdCA9IDB4NDI7CitsZXQga0V4cHJCck9uQ2FzdEZhaWwgPSAweDQzOworbGV0IGtF
eHByUmVmVGVzdFN0YXRpYyA9IDB4NDQ7CitsZXQga0V4cHJSZWZDYXN0U3RhdGljID0gMHg0NTsK
K2xldCBrRXhwckJyT25DYXN0U3RhdGljID0gMHg0NjsKK2xldCBrRXhwckJyT25DYXN0U3RhdGlj
RmFpbCA9IDB4NDc7CitsZXQga0V4cHJSZWZJc0Z1bmMgPSAweDUwOworbGV0IGtFeHByUmVmSXNE
YXRhID0gMHg1MTsKK2xldCBrRXhwclJlZklzSTMxID0gMHg1MjsKK2xldCBrRXhwclJlZkFzRnVu
YyA9IDB4NTg7CitsZXQga0V4cHJSZWZBc0RhdGEgPSAweDU5OworbGV0IGtFeHByUmVmQXNJMzEg
PSAweDVhOworbGV0IGtFeHByQnJPbkZ1bmMgPSAweDYwOworbGV0IGtFeHByQnJPbkRhdGEgPSAw
eDYxOworbGV0IGtFeHByQnJPbkkzMSA9IDB4NjI7CisKKy8vIE51bWVyaWMgb3Bjb2Rlcy4KK2xl
dCBrRXhwckkzMlNDb252ZXJ0U2F0RjMyID0gMHgwMDsKK2xldCBrRXhwckkzMlVDb252ZXJ0U2F0
RjMyID0gMHgwMTsKK2xldCBrRXhwckkzMlNDb252ZXJ0U2F0RjY0ID0gMHgwMjsKK2xldCBrRXhw
ckkzMlVDb252ZXJ0U2F0RjY0ID0gMHgwMzsKK2xldCBrRXhwckk2NFNDb252ZXJ0U2F0RjMyID0g
MHgwNDsKK2xldCBrRXhwckk2NFVDb252ZXJ0U2F0RjMyID0gMHgwNTsKK2xldCBrRXhwckk2NFND
b252ZXJ0U2F0RjY0ID0gMHgwNjsKK2xldCBrRXhwckk2NFVDb252ZXJ0U2F0RjY0ID0gMHgwNzsK
K2xldCBrRXhwck1lbW9yeUluaXQgPSAweDA4OworbGV0IGtFeHByRGF0YURyb3AgPSAweDA5Owor
bGV0IGtFeHByTWVtb3J5Q29weSA9IDB4MGE7CitsZXQga0V4cHJNZW1vcnlGaWxsID0gMHgwYjsK
K2xldCBrRXhwclRhYmxlSW5pdCA9IDB4MGM7CitsZXQga0V4cHJFbGVtRHJvcCA9IDB4MGQ7Cits
ZXQga0V4cHJUYWJsZUNvcHkgPSAweDBlOworbGV0IGtFeHByVGFibGVHcm93ID0gMHgwZjsKK2xl
dCBrRXhwclRhYmxlU2l6ZSA9IDB4MTA7CitsZXQga0V4cHJUYWJsZUZpbGwgPSAweDExOworCisv
LyBBdG9taWMgb3Bjb2Rlcy4KK2xldCBrRXhwckF0b21pY05vdGlmeSA9IDB4MDA7CitsZXQga0V4
cHJJMzJBdG9taWNXYWl0ID0gMHgwMTsKK2xldCBrRXhwckk2NEF0b21pY1dhaXQgPSAweDAyOwor
bGV0IGtFeHBySTMyQXRvbWljTG9hZCA9IDB4MTA7CitsZXQga0V4cHJJMzJBdG9taWNMb2FkOFUg
PSAweDEyOworbGV0IGtFeHBySTMyQXRvbWljTG9hZDE2VSA9IDB4MTM7CitsZXQga0V4cHJJMzJB
dG9taWNTdG9yZSA9IDB4MTc7CitsZXQga0V4cHJJMzJBdG9taWNTdG9yZThVID0gMHgxOTsKK2xl
dCBrRXhwckkzMkF0b21pY1N0b3JlMTZVID0gMHgxYTsKK2xldCBrRXhwckkzMkF0b21pY0FkZCA9
IDB4MWU7CitsZXQga0V4cHJJMzJBdG9taWNBZGQ4VSA9IDB4MjA7CitsZXQga0V4cHJJMzJBdG9t
aWNBZGQxNlUgPSAweDIxOworbGV0IGtFeHBySTMyQXRvbWljU3ViID0gMHgyNTsKK2xldCBrRXhw
ckkzMkF0b21pY1N1YjhVID0gMHgyNzsKK2xldCBrRXhwckkzMkF0b21pY1N1YjE2VSA9IDB4Mjg7
CitsZXQga0V4cHJJMzJBdG9taWNBbmQgPSAweDJjOworbGV0IGtFeHBySTMyQXRvbWljQW5kOFUg
PSAweDJlOworbGV0IGtFeHBySTMyQXRvbWljQW5kMTZVID0gMHgyZjsKK2xldCBrRXhwckkzMkF0
b21pY09yID0gMHgzMzsKK2xldCBrRXhwckkzMkF0b21pY09yOFUgPSAweDM1OworbGV0IGtFeHBy
STMyQXRvbWljT3IxNlUgPSAweDM2OworbGV0IGtFeHBySTMyQXRvbWljWG9yID0gMHgzYTsKK2xl
dCBrRXhwckkzMkF0b21pY1hvcjhVID0gMHgzYzsKK2xldCBrRXhwckkzMkF0b21pY1hvcjE2VSA9
IDB4M2Q7CitsZXQga0V4cHJJMzJBdG9taWNFeGNoYW5nZSA9IDB4NDE7CitsZXQga0V4cHJJMzJB
dG9taWNFeGNoYW5nZThVID0gMHg0MzsKK2xldCBrRXhwckkzMkF0b21pY0V4Y2hhbmdlMTZVID0g
MHg0NDsKK2xldCBrRXhwckkzMkF0b21pY0NvbXBhcmVFeGNoYW5nZSA9IDB4NDg7CitsZXQga0V4
cHJJMzJBdG9taWNDb21wYXJlRXhjaGFuZ2U4VSA9IDB4NGE7CitsZXQga0V4cHJJMzJBdG9taWND
b21wYXJlRXhjaGFuZ2UxNlUgPSAweDRiOworCitsZXQga0V4cHJJNjRBdG9taWNMb2FkID0gMHgx
MTsKK2xldCBrRXhwckk2NEF0b21pY0xvYWQ4VSA9IDB4MTQ7CitsZXQga0V4cHJJNjRBdG9taWNM
b2FkMTZVID0gMHgxNTsKK2xldCBrRXhwckk2NEF0b21pY0xvYWQzMlUgPSAweDE2OworbGV0IGtF
eHBySTY0QXRvbWljU3RvcmUgPSAweDE4OworbGV0IGtFeHBySTY0QXRvbWljU3RvcmU4VSA9IDB4
MWI7CitsZXQga0V4cHJJNjRBdG9taWNTdG9yZTE2VSA9IDB4MWM7CitsZXQga0V4cHJJNjRBdG9t
aWNTdG9yZTMyVSA9IDB4MWQ7CitsZXQga0V4cHJJNjRBdG9taWNBZGQgPSAweDFmOworbGV0IGtF
eHBySTY0QXRvbWljQWRkOFUgPSAweDIyOworbGV0IGtFeHBySTY0QXRvbWljQWRkMTZVID0gMHgy
MzsKK2xldCBrRXhwckk2NEF0b21pY0FkZDMyVSA9IDB4MjQ7CitsZXQga0V4cHJJNjRBdG9taWNT
dWIgPSAweDI2OworbGV0IGtFeHBySTY0QXRvbWljU3ViOFUgPSAweDI5OworbGV0IGtFeHBySTY0
QXRvbWljU3ViMTZVID0gMHgyYTsKK2xldCBrRXhwckk2NEF0b21pY1N1YjMyVSA9IDB4MmI7Cits
ZXQga0V4cHJJNjRBdG9taWNBbmQgPSAweDJkOworbGV0IGtFeHBySTY0QXRvbWljQW5kOFUgPSAw
eDMwOworbGV0IGtFeHBySTY0QXRvbWljQW5kMTZVID0gMHgzMTsKK2xldCBrRXhwckk2NEF0b21p
Y0FuZDMyVSA9IDB4MzI7CitsZXQga0V4cHJJNjRBdG9taWNPciA9IDB4MzQ7CitsZXQga0V4cHJJ
NjRBdG9taWNPcjhVID0gMHgzNzsKK2xldCBrRXhwckk2NEF0b21pY09yMTZVID0gMHgzODsKK2xl
dCBrRXhwckk2NEF0b21pY09yMzJVID0gMHgzOTsKK2xldCBrRXhwckk2NEF0b21pY1hvciA9IDB4
M2I7CitsZXQga0V4cHJJNjRBdG9taWNYb3I4VSA9IDB4M2U7CitsZXQga0V4cHJJNjRBdG9taWNY
b3IxNlUgPSAweDNmOworbGV0IGtFeHBySTY0QXRvbWljWG9yMzJVID0gMHg0MDsKK2xldCBrRXhw
ckk2NEF0b21pY0V4Y2hhbmdlID0gMHg0MjsKK2xldCBrRXhwckk2NEF0b21pY0V4Y2hhbmdlOFUg
PSAweDQ1OworbGV0IGtFeHBySTY0QXRvbWljRXhjaGFuZ2UxNlUgPSAweDQ2OworbGV0IGtFeHBy
STY0QXRvbWljRXhjaGFuZ2UzMlUgPSAweDQ3OworbGV0IGtFeHBySTY0QXRvbWljQ29tcGFyZUV4
Y2hhbmdlID0gMHg0OQorbGV0IGtFeHBySTY0QXRvbWljQ29tcGFyZUV4Y2hhbmdlOFUgPSAweDRj
OworbGV0IGtFeHBySTY0QXRvbWljQ29tcGFyZUV4Y2hhbmdlMTZVID0gMHg0ZDsKK2xldCBrRXhw
ckk2NEF0b21pY0NvbXBhcmVFeGNoYW5nZTMyVSA9IDB4NGU7CisKKy8vIFNpbWQgb3Bjb2Rlcy4K
K2xldCBrRXhwclMxMjhMb2FkTWVtID0gMHgwMDsKK2xldCBrRXhwclMxMjhMb2FkOHg4UyA9IDB4
MDE7CitsZXQga0V4cHJTMTI4TG9hZDh4OFUgPSAweDAyOworbGV0IGtFeHByUzEyOExvYWQxNng0
UyA9IDB4MDM7CitsZXQga0V4cHJTMTI4TG9hZDE2eDRVID0gMHgwNDsKK2xldCBrRXhwclMxMjhM
b2FkMzJ4MlMgPSAweDA1OworbGV0IGtFeHByUzEyOExvYWQzMngyVSA9IDB4MDY7CitsZXQga0V4
cHJTMTI4TG9hZDhTcGxhdCA9IDB4MDc7CitsZXQga0V4cHJTMTI4TG9hZDE2U3BsYXQgPSAweDA4
OworbGV0IGtFeHByUzEyOExvYWQzMlNwbGF0ID0gMHgwOTsKK2xldCBrRXhwclMxMjhMb2FkNjRT
cGxhdCA9IDB4MGE7CitsZXQga0V4cHJTMTI4U3RvcmVNZW0gPSAweDBiOworbGV0IGtFeHByUzEy
OENvbnN0ID0gMHgwYzsKK2xldCBrRXhwckk4eDE2U2h1ZmZsZSA9IDB4MGQ7CitsZXQga0V4cHJJ
OHgxNlN3aXp6bGUgPSAweDBlOworCitsZXQga0V4cHJJOHgxNlNwbGF0ID0gMHgwZjsKK2xldCBr
RXhwckkxNng4U3BsYXQgPSAweDEwOworbGV0IGtFeHBySTMyeDRTcGxhdCA9IDB4MTE7CitsZXQg
a0V4cHJJNjR4MlNwbGF0ID0gMHgxMjsKK2xldCBrRXhwckYzMng0U3BsYXQgPSAweDEzOworbGV0
IGtFeHByRjY0eDJTcGxhdCA9IDB4MTQ7CitsZXQga0V4cHJJOHgxNkV4dHJhY3RMYW5lUyA9IDB4
MTU7CitsZXQga0V4cHJJOHgxNkV4dHJhY3RMYW5lVSA9IDB4MTY7CitsZXQga0V4cHJJOHgxNlJl
cGxhY2VMYW5lID0gMHgxNzsKK2xldCBrRXhwckkxNng4RXh0cmFjdExhbmVTID0gMHgxODsKK2xl
dCBrRXhwckkxNng4RXh0cmFjdExhbmVVID0gMHgxOTsKK2xldCBrRXhwckkxNng4UmVwbGFjZUxh
bmUgPSAweDFhOworbGV0IGtFeHBySTMyeDRFeHRyYWN0TGFuZSA9IDB4MWI7CitsZXQga0V4cHJJ
MzJ4NFJlcGxhY2VMYW5lID0gMHgxYzsKK2xldCBrRXhwckk2NHgyRXh0cmFjdExhbmUgPSAweDFk
OworbGV0IGtFeHBySTY0eDJSZXBsYWNlTGFuZSA9IDB4MWU7CitsZXQga0V4cHJGMzJ4NEV4dHJh
Y3RMYW5lID0gMHgxZjsKK2xldCBrRXhwckYzMng0UmVwbGFjZUxhbmUgPSAweDIwOworbGV0IGtF
eHByRjY0eDJFeHRyYWN0TGFuZSA9IDB4MjE7CitsZXQga0V4cHJGNjR4MlJlcGxhY2VMYW5lID0g
MHgyMjsKK2xldCBrRXhwckk4eDE2RXEgPSAweDIzOworbGV0IGtFeHBySTh4MTZOZSA9IDB4MjQ7
CitsZXQga0V4cHJJOHgxNkx0UyA9IDB4MjU7CitsZXQga0V4cHJJOHgxNkx0VSA9IDB4MjY7Cits
ZXQga0V4cHJJOHgxNkd0UyA9IDB4Mjc7CitsZXQga0V4cHJJOHgxNkd0VSA9IDB4Mjg7CitsZXQg
a0V4cHJJOHgxNkxlUyA9IDB4Mjk7CitsZXQga0V4cHJJOHgxNkxlVSA9IDB4MmE7CitsZXQga0V4
cHJJOHgxNkdlUyA9IDB4MmI7CitsZXQga0V4cHJJOHgxNkdlVSA9IDB4MmM7CitsZXQga0V4cHJJ
MTZ4OEVxID0gMHgyZDsKK2xldCBrRXhwckkxNng4TmUgPSAweDJlOworbGV0IGtFeHBySTE2eDhM
dFMgPSAweDJmOworbGV0IGtFeHBySTE2eDhMdFUgPSAweDMwOworbGV0IGtFeHBySTE2eDhHdFMg
PSAweDMxOworbGV0IGtFeHBySTE2eDhHdFUgPSAweDMyOworbGV0IGtFeHBySTE2eDhMZVMgPSAw
eDMzOworbGV0IGtFeHBySTE2eDhMZVUgPSAweDM0OworbGV0IGtFeHBySTE2eDhHZVMgPSAweDM1
OworbGV0IGtFeHBySTE2eDhHZVUgPSAweDM2OworbGV0IGtFeHBySTMyeDRFcSA9IDB4Mzc7Cits
ZXQga0V4cHJJMzJ4NE5lID0gMHgzODsKK2xldCBrRXhwckkzMng0THRTID0gMHgzOTsKK2xldCBr
RXhwckkzMng0THRVID0gMHgzYTsKK2xldCBrRXhwckkzMng0R3RTID0gMHgzYjsKK2xldCBrRXhw
ckkzMng0R3RVID0gMHgzYzsKK2xldCBrRXhwckkzMng0TGVTID0gMHgzZDsKK2xldCBrRXhwckkz
Mng0TGVVID0gMHgzZTsKK2xldCBrRXhwckkzMng0R2VTID0gMHgzZjsKK2xldCBrRXhwckkzMng0
R2VVID0gMHg0MDsKK2xldCBrRXhwckYzMng0RXEgPSAweDQxOworbGV0IGtFeHByRjMyeDROZSA9
IDB4NDI7CitsZXQga0V4cHJGMzJ4NEx0ID0gMHg0MzsKK2xldCBrRXhwckYzMng0R3QgPSAweDQ0
OworbGV0IGtFeHByRjMyeDRMZSA9IDB4NDU7CitsZXQga0V4cHJGMzJ4NEdlID0gMHg0NjsKK2xl
dCBrRXhwckY2NHgyRXEgPSAweDQ3OworbGV0IGtFeHByRjY0eDJOZSA9IDB4NDg7CitsZXQga0V4
cHJGNjR4Mkx0ID0gMHg0OTsKK2xldCBrRXhwckY2NHgyR3QgPSAweDRhOworbGV0IGtFeHByRjY0
eDJMZSA9IDB4NGI7CitsZXQga0V4cHJGNjR4MkdlID0gMHg0YzsKK2xldCBrRXhwclMxMjhOb3Qg
PSAweDRkOworbGV0IGtFeHByUzEyOEFuZCA9IDB4NGU7CitsZXQga0V4cHJTMTI4QW5kTm90ID0g
MHg0ZjsKK2xldCBrRXhwclMxMjhPciA9IDB4NTA7CitsZXQga0V4cHJTMTI4WG9yID0gMHg1MTsK
K2xldCBrRXhwclMxMjhTZWxlY3QgPSAweDUyOworbGV0IGtFeHByVjEyOEFueVRydWUgPSAweDUz
OworbGV0IGtFeHByUzEyOExvYWQ4TGFuZSA9IDB4NTQ7CitsZXQga0V4cHJTMTI4TG9hZDE2TGFu
ZSA9IDB4NTU7CitsZXQga0V4cHJTMTI4TG9hZDMyTGFuZSA9IDB4NTY7CitsZXQga0V4cHJTMTI4
TG9hZDY0TGFuZSA9IDB4NTc7CitsZXQga0V4cHJTMTI4U3RvcmU4TGFuZSA9IDB4NTg7CitsZXQg
a0V4cHJTMTI4U3RvcmUxNkxhbmUgPSAweDU5OworbGV0IGtFeHByUzEyOFN0b3JlMzJMYW5lID0g
MHg1YTsKK2xldCBrRXhwclMxMjhTdG9yZTY0TGFuZSA9IDB4NWI7CitsZXQga0V4cHJTMTI4TG9h
ZDMyWmVybyA9IDB4NWM7CitsZXQga0V4cHJTMTI4TG9hZDY0WmVybyA9IDB4NWQ7CitsZXQga0V4
cHJGMzJ4NERlbW90ZUY2NHgyWmVybyA9IDB4NWU7CitsZXQga0V4cHJGNjR4MlByb21vdGVMb3dG
MzJ4NCA9IDB4NWY7CitsZXQga0V4cHJJOHgxNkFicyA9IDB4NjA7CitsZXQga0V4cHJJOHgxNk5l
ZyA9IDB4NjE7CitsZXQga0V4cHJJOHgxNlBvcGNudCA9IDB4NjI7CitsZXQga0V4cHJJOHgxNkFs
bFRydWUgPSAweDYzOworbGV0IGtFeHBySTh4MTZCaXRNYXNrID0gMHg2NDsKK2xldCBrRXhwckk4
eDE2U0NvbnZlcnRJMTZ4OCA9IDB4NjU7CitsZXQga0V4cHJJOHgxNlVDb252ZXJ0STE2eDggPSAw
eDY2OworbGV0IGtFeHByRjMyeDRDZWlsID0gMHg2NzsKK2xldCBrRXhwckYzMng0Rmxvb3IgPSAw
eDY4OworbGV0IGtFeHByRjMyeDRUcnVuYyA9IDB4Njk7CitsZXQga0V4cHJGMzJ4NE5lYXJlc3RJ
bnQgPSAweDZhOworbGV0IGtFeHBySTh4MTZTaGwgPSAweDZiOworbGV0IGtFeHBySTh4MTZTaHJT
ID0gMHg2YzsKK2xldCBrRXhwckk4eDE2U2hyVSA9IDB4NmQ7CitsZXQga0V4cHJJOHgxNkFkZCA9
IDB4NmU7CitsZXQga0V4cHJJOHgxNkFkZFNhdFMgPSAweDZmOworbGV0IGtFeHBySTh4MTZBZGRT
YXRVID0gMHg3MDsKK2xldCBrRXhwckk4eDE2U3ViID0gMHg3MTsKK2xldCBrRXhwckk4eDE2U3Vi
U2F0UyA9IDB4NzI7CitsZXQga0V4cHJJOHgxNlN1YlNhdFUgPSAweDczOworbGV0IGtFeHByRjY0
eDJDZWlsID0gMHg3NDsKK2xldCBrRXhwckY2NHgyRmxvb3IgPSAweDc1OworbGV0IGtFeHBySTh4
MTZNaW5TID0gMHg3NjsKK2xldCBrRXhwckk4eDE2TWluVSA9IDB4Nzc7CitsZXQga0V4cHJJOHgx
Nk1heFMgPSAweDc4OworbGV0IGtFeHBySTh4MTZNYXhVID0gMHg3OTsKK2xldCBrRXhwckY2NHgy
VHJ1bmMgPSAweDdhOworbGV0IGtFeHBySTh4MTZSb3VuZGluZ0F2ZXJhZ2VVID0gMHg3YjsKK2xl
dCBrRXhwckkxNng4RXh0QWRkUGFpcndpc2VJOHgxNlMgPSAweDdjOworbGV0IGtFeHBySTE2eDhF
eHRBZGRQYWlyd2lzZUk4eDE2VSA9IDB4N2Q7CitsZXQga0V4cHJJMzJ4NEV4dEFkZFBhaXJ3aXNl
STE2eDhTID0gMHg3ZTsKK2xldCBrRXhwckkzMng0RXh0QWRkUGFpcndpc2VJMTZ4OFUgPSAweDdm
OworbGV0IGtFeHBySTE2eDhBYnMgPSAweDgwOworbGV0IGtFeHBySTE2eDhOZWcgPSAweDgxOwor
bGV0IGtFeHBySTE2eDhRMTVNdWxSU2F0UyA9IDB4ODI7CitsZXQga0V4cHJJMTZ4OEFsbFRydWUg
PSAweDgzOworbGV0IGtFeHBySTE2eDhCaXRNYXNrID0gMHg4NDsKK2xldCBrRXhwckkxNng4U0Nv
bnZlcnRJMzJ4NCA9IDB4ODU7CitsZXQga0V4cHJJMTZ4OFVDb252ZXJ0STMyeDQgPSAweDg2Owor
bGV0IGtFeHBySTE2eDhTQ29udmVydEk4eDE2TG93ID0gMHg4NzsKK2xldCBrRXhwckkxNng4U0Nv
bnZlcnRJOHgxNkhpZ2ggPSAweDg4OworbGV0IGtFeHBySTE2eDhVQ29udmVydEk4eDE2TG93ID0g
MHg4OTsKK2xldCBrRXhwckkxNng4VUNvbnZlcnRJOHgxNkhpZ2ggPSAweDhhOworbGV0IGtFeHBy
STE2eDhTaGwgPSAweDhiOworbGV0IGtFeHBySTE2eDhTaHJTID0gMHg4YzsKK2xldCBrRXhwckkx
Nng4U2hyVSA9IDB4OGQ7CitsZXQga0V4cHJJMTZ4OEFkZCA9IDB4OGU7CitsZXQga0V4cHJJMTZ4
OEFkZFNhdFMgPSAweDhmOworbGV0IGtFeHBySTE2eDhBZGRTYXRVID0gMHg5MDsKK2xldCBrRXhw
ckkxNng4U3ViID0gMHg5MTsKK2xldCBrRXhwckkxNng4U3ViU2F0UyA9IDB4OTI7CitsZXQga0V4
cHJJMTZ4OFN1YlNhdFUgPSAweDkzOworbGV0IGtFeHByRjY0eDJOZWFyZXN0SW50ID0gMHg5NDsK
K2xldCBrRXhwckkxNng4TXVsID0gMHg5NTsKK2xldCBrRXhwckkxNng4TWluUyA9IDB4OTY7Cits
ZXQga0V4cHJJMTZ4OE1pblUgPSAweDk3OworbGV0IGtFeHBySTE2eDhNYXhTID0gMHg5ODsKK2xl
dCBrRXhwckkxNng4TWF4VSA9IDB4OTk7CitsZXQga0V4cHJJMTZ4OFJvdW5kaW5nQXZlcmFnZVUg
PSAweDliOworbGV0IGtFeHBySTE2eDhFeHRNdWxMb3dJOHgxNlMgPSAweDljOworbGV0IGtFeHBy
STE2eDhFeHRNdWxIaWdoSTh4MTZTID0gMHg5ZDsKK2xldCBrRXhwckkxNng4RXh0TXVsTG93STh4
MTZVID0gMHg5ZTsKK2xldCBrRXhwckkxNng4RXh0TXVsSGlnaEk4eDE2VSA9IDB4OWY7CitsZXQg
a0V4cHJJMzJ4NEFicyA9IDB4YTA7CitsZXQga0V4cHJJMzJ4NE5lZyA9IDB4YTE7CitsZXQga0V4
cHJJMzJ4NEFsbFRydWUgPSAweGEzOworbGV0IGtFeHBySTMyeDRCaXRNYXNrID0gMHhhNDsKK2xl
dCBrRXhwckkzMng0U0NvbnZlcnRJMTZ4OExvdyA9IDB4YTc7CitsZXQga0V4cHJJMzJ4NFNDb252
ZXJ0STE2eDhIaWdoID0gMHhhODsKK2xldCBrRXhwckkzMng0VUNvbnZlcnRJMTZ4OExvdyA9IDB4
YTk7CitsZXQga0V4cHJJMzJ4NFVDb252ZXJ0STE2eDhIaWdoID0gMHhhYTsKK2xldCBrRXhwckkz
Mng0U2hsID0gMHhhYjsKK2xldCBrRXhwckkzMng0U2hyUyA9IDB4YWM7CitsZXQga0V4cHJJMzJ4
NFNoclUgPSAweGFkOworbGV0IGtFeHBySTMyeDRBZGQgPSAweGFlOworbGV0IGtFeHBySTMyeDRT
dWIgPSAweGIxOworbGV0IGtFeHBySTMyeDRNdWwgPSAweGI1OworbGV0IGtFeHBySTMyeDRNaW5T
ID0gMHhiNjsKK2xldCBrRXhwckkzMng0TWluVSA9IDB4Yjc7CitsZXQga0V4cHJJMzJ4NE1heFMg
PSAweGI4OworbGV0IGtFeHBySTMyeDRNYXhVID0gMHhiOTsKK2xldCBrRXhwckkzMng0RG90STE2
eDhTID0gMHhiYTsKK2xldCBrRXhwckkzMng0RXh0TXVsTG93STE2eDhTID0gMHhiYzsKK2xldCBr
RXhwckkzMng0RXh0TXVsSGlnaEkxNng4UyA9IDB4YmQ7CitsZXQga0V4cHJJMzJ4NEV4dE11bExv
d0kxNng4VSA9IDB4YmU7CitsZXQga0V4cHJJMzJ4NEV4dE11bEhpZ2hJMTZ4OFUgPSAweGJmOwor
bGV0IGtFeHBySTY0eDJBYnMgPSAweGMwOworbGV0IGtFeHBySTY0eDJOZWcgPSAweGMxOworbGV0
IGtFeHBySTY0eDJBbGxUcnVlID0gMHhjMzsKK2xldCBrRXhwckk2NHgyQml0TWFzayA9IDB4YzQ7
CitsZXQga0V4cHJJNjR4MlNDb252ZXJ0STMyeDRMb3cgPSAweGM3OworbGV0IGtFeHBySTY0eDJT
Q29udmVydEkzMng0SGlnaCA9IDB4Yzg7CitsZXQga0V4cHJJNjR4MlVDb252ZXJ0STMyeDRMb3cg
PSAweGM5OworbGV0IGtFeHBySTY0eDJVQ29udmVydEkzMng0SGlnaCA9IDB4Y2E7CitsZXQga0V4
cHJJNjR4MlNobCA9IDB4Y2I7CitsZXQga0V4cHJJNjR4MlNoclMgPSAweGNjOworbGV0IGtFeHBy
STY0eDJTaHJVID0gMHhjZDsKK2xldCBrRXhwckk2NHgyQWRkID0gMHhjZTsKK2xldCBrRXhwckk2
NHgyU3ViID0gMHhkMTsKK2xldCBrRXhwckk2NHgyTXVsID0gMHhkNTsKK2xldCBrRXhwckk2NHgy
RXEgPSAweGQ2OworbGV0IGtFeHBySTY0eDJOZSA9IDB4ZDc7CitsZXQga0V4cHJJNjR4Mkx0UyA9
IDB4ZDg7CitsZXQga0V4cHJJNjR4Mkd0UyA9IDB4ZDk7CitsZXQga0V4cHJJNjR4MkxlUyA9IDB4
ZGE7CitsZXQga0V4cHJJNjR4MkdlUyA9IDB4ZGI7CitsZXQga0V4cHJJNjR4MkV4dE11bExvd0kz
Mng0UyA9IDB4ZGM7CitsZXQga0V4cHJJNjR4MkV4dE11bEhpZ2hJMzJ4NFMgPSAweGRkOworbGV0
IGtFeHBySTY0eDJFeHRNdWxMb3dJMzJ4NFUgPSAweGRlOworbGV0IGtFeHBySTY0eDJFeHRNdWxI
aWdoSTMyeDRVID0gMHhkZjsKK2xldCBrRXhwckYzMng0QWJzID0gMHhlMDsKK2xldCBrRXhwckYz
Mng0TmVnID0gMHhlMTsKK2xldCBrRXhwckYzMng0U3FydCA9IDB4ZTM7CitsZXQga0V4cHJGMzJ4
NEFkZCA9IDB4ZTQ7CitsZXQga0V4cHJGMzJ4NFN1YiA9IDB4ZTU7CitsZXQga0V4cHJGMzJ4NE11
bCA9IDB4ZTY7CitsZXQga0V4cHJGMzJ4NERpdiA9IDB4ZTc7CitsZXQga0V4cHJGMzJ4NE1pbiA9
IDB4ZTg7CitsZXQga0V4cHJGMzJ4NE1heCA9IDB4ZTk7CitsZXQga0V4cHJGMzJ4NFBtaW4gPSAw
eGVhOworbGV0IGtFeHByRjMyeDRQbWF4ID0gMHhlYjsKK2xldCBrRXhwckY2NHgyQWJzID0gMHhl
YzsKK2xldCBrRXhwckY2NHgyTmVnID0gMHhlZDsKK2xldCBrRXhwckY2NHgyU3FydCA9IDB4ZWY7
CitsZXQga0V4cHJGNjR4MkFkZCA9IDB4ZjA7CitsZXQga0V4cHJGNjR4MlN1YiA9IDB4ZjE7Cits
ZXQga0V4cHJGNjR4Mk11bCA9IDB4ZjI7CitsZXQga0V4cHJGNjR4MkRpdiA9IDB4ZjM7CitsZXQg
a0V4cHJGNjR4Mk1pbiA9IDB4ZjQ7CitsZXQga0V4cHJGNjR4Mk1heCA9IDB4ZjU7CitsZXQga0V4
cHJGNjR4MlBtaW4gPSAweGY2OworbGV0IGtFeHByRjY0eDJQbWF4ID0gMHhmNzsKK2xldCBrRXhw
ckkzMng0U0NvbnZlcnRGMzJ4NCA9IDB4Zjg7CitsZXQga0V4cHJJMzJ4NFVDb252ZXJ0RjMyeDQg
PSAweGY5OworbGV0IGtFeHByRjMyeDRTQ29udmVydEkzMng0ID0gMHhmYTsKK2xldCBrRXhwckYz
Mng0VUNvbnZlcnRJMzJ4NCA9IDB4ZmI7CitsZXQga0V4cHJJMzJ4NFRydW5jU2F0RjY0eDJTWmVy
byA9IDB4ZmM7CitsZXQga0V4cHJJMzJ4NFRydW5jU2F0RjY0eDJVWmVybyA9IDB4ZmQ7CitsZXQg
a0V4cHJGNjR4MkNvbnZlcnRMb3dJMzJ4NFMgPSAweGZlOworbGV0IGtFeHByRjY0eDJDb252ZXJ0
TG93STMyeDRVID0gMHhmZjsKKworLy8gQ29tcGlsYXRpb24gaGludCBjb25zdGFudHMuCitsZXQg
a0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5RGVmYXVsdCA9IDB4MDA7CitsZXQga0NvbXBpbGF0aW9u
SGludFN0cmF0ZWd5TGF6eSA9IDB4MDE7CitsZXQga0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5RWFn
ZXIgPSAweDAyOworbGV0IGtDb21waWxhdGlvbkhpbnRTdHJhdGVneUxhenlCYXNlbGluZUVhZ2Vy
VG9wVGllciA9IDB4MDM7CitsZXQga0NvbXBpbGF0aW9uSGludFRpZXJEZWZhdWx0ID0gMHgwMDsK
K2xldCBrQ29tcGlsYXRpb25IaW50VGllckJhc2VsaW5lID0gMHgwMTsKK2xldCBrQ29tcGlsYXRp
b25IaW50VGllck9wdGltaXplZCA9IDB4MDI7CisKK2xldCBrVHJhcFVucmVhY2hhYmxlID0gMDsK
K2xldCBrVHJhcE1lbU91dE9mQm91bmRzID0gMTsKK2xldCBrVHJhcERpdkJ5WmVybyA9IDI7Cits
ZXQga1RyYXBEaXZVbnJlcHJlc2VudGFibGUgPSAzOworbGV0IGtUcmFwUmVtQnlaZXJvID0gNDsK
K2xldCBrVHJhcEZsb2F0VW5yZXByZXNlbnRhYmxlID0gNTsKK2xldCBrVHJhcFRhYmxlT3V0T2ZC
b3VuZHMgPSA2OworbGV0IGtUcmFwRnVuY1NpZ01pc21hdGNoID0gNzsKK2xldCBrVHJhcFVuYWxp
Z25lZEFjY2VzcyA9IDg7CitsZXQga1RyYXBEYXRhU2VnbWVudERyb3BwZWQgPSA5OworbGV0IGtU
cmFwRWxlbVNlZ21lbnREcm9wcGVkID0gMTA7CitsZXQga1RyYXBSZXRocm93TnVsbCA9IDExOwor
CitsZXQga1RyYXBNc2dzID0gWworICAvVW5yZWFjaGFibGUvLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIC0tCisgICdtZW1vcnkgYWNjZXNzIG91dCBvZiBib3VuZHMnLCAg
ICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgL0RpdmlzaW9uIGJ5IHplcm8vLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAtLQorICAnZGl2aWRlIHJlc3VsdCB1bnJlcHJlc2VudGFi
bGUnLCAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdyZW1haW5kZXIgYnkgemVybycsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgJ2Zsb2F0IHVucmVwcmVzZW50YWJsZSBp
biBpbnRlZ2VyIHJhbmdlJywgICAgICAgICAvLyAtLQorICAndGFibGUgaW5kZXggaXMgb3V0IG9m
IGJvdW5kcycsICAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdudWxsIGZ1bmN0aW9uIG9yIGZ1
bmN0aW9uIHNpZ25hdHVyZSBtaXNtYXRjaCcsICAgLy8gLS0KKyAgJ29wZXJhdGlvbiBkb2VzIG5v
dCBzdXBwb3J0IHVuYWxpZ25lZCBhY2Nlc3NlcycsICAvLyAtLQorICAnZGF0YSBzZWdtZW50IGhh
cyBiZWVuIGRyb3BwZWQnLCAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdlbGVtZW50IHNlZ21l
bnQgaGFzIGJlZW4gZHJvcHBlZCcsICAgICAgICAgICAgICAgLy8gLS0KKyAgJ3JldGhyb3dpbmcg
bnVsbCB2YWx1ZScgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtLQorXTsKKworLy8gVGhp
cyByZXF1aXJlcyB0ZXN0L21qc3VuaXQvbWpzdW5pdC5qcy4KK2Z1bmN0aW9uIGFzc2VydFRyYXBz
KHRyYXAsIGNvZGUpIHsKKyAgYXNzZXJ0VGhyb3dzKGNvZGUsIFdlYkFzc2VtYmx5LlJ1bnRpbWVF
cnJvciwga1RyYXBNc2dzW3RyYXBdKTsKK30KKworY2xhc3MgQmluYXJ5IHsKKyAgY29uc3RydWN0
b3IoKSB7CisgICAgdGhpcy5sZW5ndGggPSAwOworICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4
QXJyYXkoODE5Mik7CisgIH0KKworICBlbnN1cmVfc3BhY2UobmVlZGVkKSB7CisgICAgaWYgKHRo
aXMuYnVmZmVyLmxlbmd0aCAtIHRoaXMubGVuZ3RoID49IG5lZWRlZCkgcmV0dXJuOworICAgIGxl
dCBuZXdfY2FwYWNpdHkgPSB0aGlzLmJ1ZmZlci5sZW5ndGggKiAyOworICAgIHdoaWxlIChuZXdf
Y2FwYWNpdHkgLSB0aGlzLmxlbmd0aCA8IG5lZWRlZCkgbmV3X2NhcGFjaXR5ICo9IDI7CisgICAg
bGV0IG5ld19idWZmZXIgPSBuZXcgVWludDhBcnJheShuZXdfY2FwYWNpdHkpOworICAgIG5ld19i
dWZmZXIuc2V0KHRoaXMuYnVmZmVyKTsKKyAgICB0aGlzLmJ1ZmZlciA9IG5ld19idWZmZXI7Cisg
IH0KKworICB0cnVuY19idWZmZXIoKSB7CisgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHRoaXMu
YnVmZmVyLmJ1ZmZlciwgMCwgdGhpcy5sZW5ndGgpOworICB9CisKKyAgcmVzZXQoKSB7CisgICAg
dGhpcy5sZW5ndGggPSAwOworICB9CisKKyAgZW1pdF91OCh2YWwpIHsKKyAgICB0aGlzLmVuc3Vy
ZV9zcGFjZSgxKTsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbDsKKyAgfQor
CisgIGVtaXRfdTE2KHZhbCkgeworICAgIHRoaXMuZW5zdXJlX3NwYWNlKDIpOworICAgIHRoaXMu
YnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdmFsOworICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3Ro
KytdID0gdmFsID4+IDg7CisgIH0KKworICBlbWl0X3UzMih2YWwpIHsKKyAgICB0aGlzLmVuc3Vy
ZV9zcGFjZSg0KTsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbDsKKyAgICB0
aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbCA+PiA4OworICAgIHRoaXMuYnVmZmVyW3Ro
aXMubGVuZ3RoKytdID0gdmFsID4+IDE2OworICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3RoKytd
ID0gdmFsID4+IDI0OworICB9CisKKyAgZW1pdF9sZWJfdSh2YWwsIG1heF9sZW4pIHsKKyAgICB0
aGlzLmVuc3VyZV9zcGFjZShtYXhfbGVuKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heF9s
ZW47ICsraSkgeworICAgICAgbGV0IHYgPSB2YWwgJiAweGZmOworICAgICAgdmFsID0gdmFsID4+
PiA3OworICAgICAgaWYgKHZhbCA9PSAwKSB7CisgICAgICAgIHRoaXMuYnVmZmVyW3RoaXMubGVu
Z3RoKytdID0gdjsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgdGhpcy5idWZmZXJb
dGhpcy5sZW5ndGgrK10gPSB2IHwgMHg4MDsKKyAgICB9CisgICAgdGhyb3cgbmV3IEVycm9yKCdM
ZWIgdmFsdWUgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAnICsgbWF4X2xlbik7CisgIH0KKwor
ICBlbWl0X3UzMnYodmFsKSB7CisgICAgdGhpcy5lbWl0X2xlYl91KHZhbCwga01heFZhckludDMy
U2l6ZSk7CisgIH0KKworICBlbWl0X3U2NHYodmFsKSB7CisgICAgdGhpcy5lbWl0X2xlYl91KHZh
bCwga01heFZhckludDY0U2l6ZSk7CisgIH0KKworICBlbWl0X2J5dGVzKGRhdGEpIHsKKyAgICB0
aGlzLmVuc3VyZV9zcGFjZShkYXRhLmxlbmd0aCk7CisgICAgdGhpcy5idWZmZXIuc2V0KGRhdGEs
IHRoaXMubGVuZ3RoKTsKKyAgICB0aGlzLmxlbmd0aCArPSBkYXRhLmxlbmd0aDsKKyAgfQorCisg
IGVtaXRfc3RyaW5nKHN0cmluZykgeworICAgIC8vIFdoZW4gdGVzdGluZyBpbGxlZ2FsIG5hbWVz
LCB3ZSBwYXNzIGEgYnl0ZSBhcnJheSBkaXJlY3RseS4KKyAgICBpZiAoc3RyaW5nIGluc3RhbmNl
b2YgQXJyYXkpIHsKKyAgICAgIHRoaXMuZW1pdF91MzJ2KHN0cmluZy5sZW5ndGgpOworICAgICAg
dGhpcy5lbWl0X2J5dGVzKHN0cmluZyk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
VGhpcyBpcyB0aGUgaGFja3kgd2F5IHRvIGNvbnZlcnQgYSBKYXZhU2NyaXB0IHN0cmluZyB0byBh
IFVURjggZW5jb2RlZAorICAgIC8vIHN0cmluZyBvbmx5IGNvbnRhaW5pbmcgc2luZ2xlLWJ5dGUg
Y2hhcmFjdGVycy4KKyAgICBsZXQgc3RyaW5nX3V0ZjggPSB1bmVzY2FwZShlbmNvZGVVUklDb21w
b25lbnQoc3RyaW5nKSk7CisgICAgdGhpcy5lbWl0X3UzMnYoc3RyaW5nX3V0ZjgubGVuZ3RoKTsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ191dGY4Lmxlbmd0aDsgaSsrKSB7CisgICAg
ICB0aGlzLmVtaXRfdTgoc3RyaW5nX3V0ZjguY2hhckNvZGVBdChpKSk7CisgICAgfQorICB9CisK
KyAgZW1pdF9oZWFwX3R5cGUoaGVhcF90eXBlKSB7CisgICAgdGhpcy5lbWl0X2J5dGVzKHdhc21T
aWduZWRMZWIoaGVhcF90eXBlLCBrTWF4VmFySW50MzJTaXplKSk7CisgIH0KKworICBlbWl0X3R5
cGUodHlwZSkgeworICAgIGlmICgodHlwZW9mIHR5cGUpID09ICdudW1iZXInKSB7CisgICAgICB0
aGlzLmVtaXRfdTgodHlwZSA+PSAwID8gdHlwZSA6IHR5cGUgJiBrTGViMTI4TWFzayk7CisgICAg
fSBlbHNlIHsKKyAgICAgIHRoaXMuZW1pdF91OCh0eXBlLm9wY29kZSk7CisgICAgICBpZiAoJ2Rl
cHRoJyBpbiB0eXBlKSB0aGlzLmVtaXRfdTgodHlwZS5kZXB0aCk7CisgICAgICB0aGlzLmVtaXRf
aGVhcF90eXBlKHR5cGUuaGVhcF90eXBlKTsKKyAgICB9CisgIH0KKworICBlbWl0X2luaXRfZXhw
cl9yZWN1cnNpdmUoZXhwcikgeworICAgIHN3aXRjaCAoZXhwci5raW5kKSB7CisgICAgICBjYXNl
IGtFeHByR2xvYmFsR2V0OgorICAgICAgICB0aGlzLmVtaXRfdTgoa0V4cHJHbG9iYWxHZXQpOwor
ICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIGtFeHBySTMyQ29uc3Q6CisgICAgICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNtSTMyQ29u
c3QoZXhwci52YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJJNjRDb25z
dDoKKyAgICAgICAgdGhpcy5lbWl0X2J5dGVzKHdhc21JNjRDb25zdChleHByLnZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwckYzMkNvbnN0OgorICAgICAgICB0aGlzLmVt
aXRfYnl0ZXMod2FzbUYzMkNvbnN0KGV4cHIudmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIGtFeHByRjY0Q29uc3Q6CisgICAgICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNtRjY0Q29u
c3QoZXhwci52YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1NpbWRQcmVmaXg6
CisgICAgICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNtUzEyOENvbnN0KGV4cHIudmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByUmVmRnVuYzoKKyAgICAgICAgdGhpcy5lbWl0
X3U4KGtFeHByUmVmRnVuYyk7CisgICAgICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIudmFsdWUpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJSZWZOdWxsOgorICAgICAgICB0aGlzLmVt
aXRfdTgoa0V4cHJSZWZOdWxsKTsKKyAgICAgICAgdGhpcy5lbWl0X2hlYXBfdHlwZShleHByLnZh
bHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByU3RydWN0TmV3OgorICAgICAg
Y2FzZSBrRXhwclN0cnVjdE5ld1dpdGhSdHQ6CisgICAgICBjYXNlIGtFeHByU3RydWN0TmV3RGVm
YXVsdDoKKyAgICAgIGNhc2Uga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0V2l0aFJ0dDoKKyAgICAgICAg
Zm9yIChsZXQgb3BlcmFuZCBvZiBleHByLm9wZXJhbmRzKSB7CisgICAgICAgICAgdGhpcy5lbWl0
X2luaXRfZXhwcl9yZWN1cnNpdmUob3BlcmFuZCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5l
bWl0X3U4KGtHQ1ByZWZpeCk7CisgICAgICAgIHRoaXMuZW1pdF91OChleHByLmtpbmQpOworICAg
ICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIGtFeHByQXJyYXlJbml0OgorICAgICAgY2FzZSBrRXhwckFycmF5SW5pdFN0YXRpYzoKKyAg
ICAgICAgZm9yIChsZXQgb3BlcmFuZCBvZiBleHByLm9wZXJhbmRzKSB7CisgICAgICAgICAgdGhp
cy5lbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUob3BlcmFuZCk7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5lbWl0X3U4KGtHQ1ByZWZpeCk7CisgICAgICAgIHRoaXMuZW1pdF91OChleHByLmtpbmQp
OworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAgdGhpcy5lbWl0
X3UzMnYoZXhwci5vcGVyYW5kcy5sZW5ndGggLSAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIGtFeHByUnR0Q2Fub246CisgICAgICAgIHRoaXMuZW1pdF91OChrR0NQcmVmaXgpOworICAg
ICAgICB0aGlzLmVtaXRfdTgoa0V4cHJSdHRDYW5vbik7CisgICAgICAgIHRoaXMuZW1pdF91MzJ2
KGV4cHIudmFsdWUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJSdHRTdWI6Cisg
ICAgICAgIHRoaXMuZW1pdF9pbml0X2V4cHJfcmVjdXJzaXZlKGV4cHIucGFyZW50KTsKKyAgICAg
ICAgdGhpcy5lbWl0X3U4KGtHY1ByZWZpeCk7CisgICAgICAgIHRoaXMuZW1pdF91OChrRXhwclJ0
dFN1Yik7CisgICAgICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIudmFsdWUpOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2Uga0V4cHJSdHRGcmVzaFN1YjoKKyAgICAgICAgdGhpcy5lbWl0X2luaXRf
ZXhwcl9yZWN1cnNpdmUoZXhwci5wYXJlbnQpOworICAgICAgICB0aGlzLmVtaXRfdTgoa0djUHJl
Zml4KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtFeHByUnR0RnJlc2hTdWIpOworICAgICAgICB0
aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisK
KyAgZW1pdF9pbml0X2V4cHIoZXhwcikgeworICAgIHRoaXMuZW1pdF9pbml0X2V4cHJfcmVjdXJz
aXZlKGV4cHIpOworICAgIHRoaXMuZW1pdF91OChrRXhwckVuZCk7CisgIH0KKworICBlbWl0X2hl
YWRlcigpIHsKKyAgICB0aGlzLmVtaXRfYnl0ZXMoWworICAgICAga1dhc21IMCwga1dhc21IMSwg
a1dhc21IMiwga1dhc21IMywga1dhc21WMCwga1dhc21WMSwga1dhc21WMiwga1dhc21WMworICAg
IF0pOworICB9CisKKyAgZW1pdF9zZWN0aW9uKHNlY3Rpb25fY29kZSwgY29udGVudF9nZW5lcmF0
b3IpIHsKKyAgICAvLyBFbWl0IHNlY3Rpb24gbmFtZS4KKyAgICB0aGlzLmVtaXRfdTgoc2VjdGlv
bl9jb2RlKTsKKyAgICAvLyBFbWl0IHRoZSBzZWN0aW9uIHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlcjog
aXRzIGZ1bGwgbGVuZ3RoIGlzbid0IGtub3cgeWV0LgorICAgIGNvbnN0IHNlY3Rpb24gPSBuZXcg
QmluYXJ5OworICAgIGNvbnRlbnRfZ2VuZXJhdG9yKHNlY3Rpb24pOworICAgIC8vIEVtaXQgc2Vj
dGlvbiBsZW5ndGguCisgICAgdGhpcy5lbWl0X3UzMnYoc2VjdGlvbi5sZW5ndGgpOworICAgIC8v
IENvcHkgdGhlIHRlbXBvcmFyeSBidWZmZXIuCisgICAgLy8gQXZvaWQgc3ByZWFkIGJlY2F1c2Ug
e3NlY3Rpb259IGNhbiBiZSBodWdlLgorICAgIHRoaXMuZW1pdF9ieXRlcyhzZWN0aW9uLnRydW5j
X2J1ZmZlcigpKTsKKyAgfQorfQorCitjbGFzcyBXYXNtRnVuY3Rpb25CdWlsZGVyIHsKKyAgLy8g
RW5jb2Rpbmcgb2YgbG9jYWwgbmFtZXM6IGEgc3RyaW5nIGNvcnJlc3BvbmRzIHRvIGEgbG9jYWwg
bmFtZSwKKyAgLy8gYSBudW1iZXIgbiBjb3JyZXNwb25kcyB0byBuIHVuZGVmaW5lZCBuYW1lcy4K
KyAgY29uc3RydWN0b3IobW9kdWxlLCBuYW1lLCB0eXBlX2luZGV4LCBhcmdfbmFtZXMpIHsKKyAg
ICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKKyAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIHRoaXMu
dHlwZV9pbmRleCA9IHR5cGVfaW5kZXg7CisgICAgdGhpcy5ib2R5ID0gW107CisgICAgdGhpcy5s
b2NhbHMgPSBbXTsKKyAgICB0aGlzLmxvY2FsX25hbWVzID0gYXJnX25hbWVzOworICAgIHRoaXMu
Ym9keV9vZmZzZXQgPSB1bmRlZmluZWQ7ICAvLyBOb3QgdmFsaWQgdW50aWwgbW9kdWxlIGlzIHNl
cmlhbGl6ZWQuCisgIH0KKworICBudW1Mb2NhbE5hbWVzKCkgeworICAgIGxldCBudW1fbG9jYWxf
bmFtZXMgPSAwOworICAgIGZvciAobGV0IGxvY19uYW1lIG9mIHRoaXMubG9jYWxfbmFtZXMpIHsK
KyAgICAgIGlmICh0eXBlb2YgbG9jX25hbWUgPT0gJ3N0cmluZycpICsrbnVtX2xvY2FsX25hbWVz
OworICAgIH0KKyAgICByZXR1cm4gbnVtX2xvY2FsX25hbWVzOworICB9CisKKyAgZXhwb3J0QXMo
bmFtZSkgeworICAgIHRoaXMubW9kdWxlLmFkZEV4cG9ydChuYW1lLCB0aGlzLmluZGV4KTsKKyAg
ICByZXR1cm4gdGhpczsKKyAgfQorCisgIGV4cG9ydEZ1bmMoKSB7CisgICAgdGhpcy5leHBvcnRB
cyh0aGlzLm5hbWUpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgc2V0Q29tcGlsYXRpb25I
aW50KHN0cmF0ZWd5LCBiYXNlbGluZVRpZXIsIHRvcFRpZXIpIHsKKyAgICB0aGlzLm1vZHVsZS5z
ZXRDb21waWxhdGlvbkhpbnQoc3RyYXRlZ3ksIGJhc2VsaW5lVGllciwgdG9wVGllciwgdGhpcy5p
bmRleCk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBhZGRCb2R5KGJvZHkpIHsKKyAgICBm
b3IgKGxldCBiIG9mIGJvZHkpIHsKKyAgICAgIGlmICh0eXBlb2YgYiAhPT0gJ251bWJlcicgfHwg
KGIgJiAofjB4RkYpKSAhPT0gMCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAg
ICAgICAnaW52YWxpZCBib2R5IChlbnRyaWVzIG11c3QgYmUgOCBiaXQgbnVtYmVycyk6ICcgKyBi
b2R5KTsKKyAgICAgIH0KKyAgICB9CisgICAgdGhpcy5ib2R5ID0gYm9keS5zbGljZSgpOworICAg
IC8vIEF1dG9tYXRpY2FsbHkgYWRkIHRoZSBlbmQgZm9yIHRoZSBmdW5jdGlvbiBibG9jayB0byB0
aGUgYm9keS4KKyAgICB0aGlzLmJvZHkucHVzaChrRXhwckVuZCk7CisgICAgcmV0dXJuIHRoaXM7
CisgIH0KKworICBhZGRCb2R5V2l0aEVuZChib2R5KSB7CisgICAgdGhpcy5ib2R5ID0gYm9keTsK
KyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGdldE51bUxvY2FscygpIHsKKyAgICBsZXQgdG90
YWxfbG9jYWxzID0gMDsKKyAgICBmb3IgKGxldCBsIG9mIHRoaXMubG9jYWxzKSB7CisgICAgICB0
b3RhbF9sb2NhbHMgKz0gbC5jb3VudAorICAgIH0KKyAgICByZXR1cm4gdG90YWxfbG9jYWxzOwor
ICB9CisKKyAgYWRkTG9jYWxzKHR5cGUsIGNvdW50LCBuYW1lcykgeworICAgIHRoaXMubG9jYWxz
LnB1c2goe3R5cGU6IHR5cGUsIGNvdW50OiBjb3VudH0pOworICAgIG5hbWVzID0gbmFtZXMgfHwg
W107CisgICAgaWYgKG5hbWVzLmxlbmd0aCA+IGNvdW50KSB0aHJvdyBuZXcgRXJyb3IoJ3RvbyBt
YW55IGxvY2FscyBuYW1lcyBnaXZlbicpOworICAgIHRoaXMubG9jYWxfbmFtZXMucHVzaCguLi5u
YW1lcyk7CisgICAgaWYgKGNvdW50ID4gbmFtZXMubGVuZ3RoKSB0aGlzLmxvY2FsX25hbWVzLnB1
c2goY291bnQgLSBuYW1lcy5sZW5ndGgpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgZW5k
KCkgeworICAgIHJldHVybiB0aGlzLm1vZHVsZTsKKyAgfQorfQorCitjbGFzcyBXYXNtSW5pdEV4
cHIgeworICBzdGF0aWMgSTMyQ29uc3QodmFsdWUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHBy
STMyQ29uc3QsIHZhbHVlOiB2YWx1ZX07CisgIH0KKyAgc3RhdGljIEk2NENvbnN0KHZhbHVlKSB7
CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckk2NENvbnN0LCB2YWx1ZTogdmFsdWV9OworICB9Cisg
IHN0YXRpYyBGMzJDb25zdCh2YWx1ZSkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJGMzJDb25z
dCwgdmFsdWU6IHZhbHVlfTsKKyAgfQorICBzdGF0aWMgRjY0Q29uc3QodmFsdWUpIHsKKyAgICBy
ZXR1cm4ge2tpbmQ6IGtFeHByRjY0Q29uc3QsIHZhbHVlOiB2YWx1ZX07CisgIH0KKyAgc3RhdGlj
IFMxMjhDb25zdCh2YWx1ZSkgeworICAgIHJldHVybiB7a2luZDoga1NpbWRQcmVmaXgsIHZhbHVl
OiB2YWx1ZX07CisgIH0KKyAgc3RhdGljIEdsb2JhbEdldChpbmRleCkgeworICAgIHJldHVybiB7
a2luZDoga0V4cHJHbG9iYWxHZXQsIHZhbHVlOiBpbmRleH07CisgIH0KKyAgc3RhdGljIFJlZkZ1
bmMoaW5kZXgpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByUmVmRnVuYywgdmFsdWU6IGluZGV4
fTsKKyAgfQorICBzdGF0aWMgUmVmTnVsbCh0eXBlKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhw
clJlZk51bGwsIHZhbHVlOiB0eXBlfTsKKyAgfQorICBzdGF0aWMgU3RydWN0TmV3V2l0aFJ0dCh0
eXBlLCBhcmdzKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclN0cnVjdE5ld1dpdGhSdHQsIHZh
bHVlOiB0eXBlLCBvcGVyYW5kczogYXJnc307CisgIH0KKyAgc3RhdGljIFN0cnVjdE5ldyh0eXBl
LCBhcmdzKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclN0cnVjdE5ldywgdmFsdWU6IHR5cGUs
IG9wZXJhbmRzOiBhcmdzfTsKKyAgfQorICBzdGF0aWMgU3RydWN0TmV3RGVmYXVsdFdpdGhSdHQo
dHlwZSwgcnR0KSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclN0cnVjdE5ld0RlZmF1bHRXaXRo
UnR0LCB2YWx1ZTogdHlwZSwgb3BlcmFuZHM6IFtydHRdfTsKKyAgfQorICBzdGF0aWMgU3RydWN0
TmV3RGVmYXVsdCh0eXBlKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclN0cnVjdE5ld0RlZmF1
bHQsIHZhbHVlOiB0eXBlLCBvcGVyYW5kczogW119OworICB9CisgIHN0YXRpYyBBcnJheUluaXQo
dHlwZSwgYXJncykgeworICAgIHJldHVybiB7a2luZDoga0V4cHJBcnJheUluaXQsIHZhbHVlOiB0
eXBlLCBvcGVyYW5kczogYXJnc307CisgIH0KKyAgc3RhdGljIEFycmF5SW5pdFN0YXRpYyh0eXBl
LCBhcmdzKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckFycmF5SW5pdFN0YXRpYywgdmFsdWU6
IHR5cGUsIG9wZXJhbmRzOiBhcmdzfTsKKyAgfQorICBzdGF0aWMgUnR0Q2Fub24odHlwZSkgewor
ICAgIHJldHVybiB7a2luZDoga0V4cHJSdHRDYW5vbiwgdmFsdWU6IHR5cGV9OworICB9CisgIHN0
YXRpYyBSdHRTdWIodHlwZSwgcGFyZW50KSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclJ0dFN1
YiwgdmFsdWU6IHR5cGUsIHBhcmVudDogcGFyZW50fTsKKyAgfQorICBzdGF0aWMgUnR0RnJlc2hT
dWIodHlwZSwgcGFyZW50KSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclJ0dEZyZXNoU3ViLCB2
YWx1ZTogdHlwZSwgcGFyZW50OiBwYXJlbnR9OworICB9CisKKyAgc3RhdGljIGRlZmF1bHRGb3Io
dHlwZSkgeworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgY2FzZSBrV2FzbUkzMjoKKyAgICAg
ICAgcmV0dXJuIHRoaXMuSTMyQ29uc3QoMCk7CisgICAgICBjYXNlIGtXYXNtSTY0OgorICAgICAg
ICByZXR1cm4gdGhpcy5JNjRDb25zdCgwKTsKKyAgICAgIGNhc2Uga1dhc21GMzI6CisgICAgICAg
IHJldHVybiB0aGlzLkYzMkNvbnN0KDApOworICAgICAgY2FzZSBrV2FzbUY2NDoKKyAgICAgICAg
cmV0dXJuIHRoaXMuRjY0Q29uc3QoMCk7CisgICAgICBjYXNlIGtXYXNtUzEyODoKKyAgICAgICAg
cmV0dXJuIHRoaXMuUzEyOENvbnN0KG5ldyBBcnJheSgxNikuZmlsbCgwKSk7CisgICAgICBkZWZh
dWx0OgorICAgICAgICBpZiAoKHR5cGVvZiB0eXBlKSAhPSAnbnVtYmVyJyAmJiB0eXBlLm9wY29k
ZSAhPSBrV2FzbU9wdFJlZikgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm9uLWRlZmF1
bHRhYmxlIHR5cGUiKTsKKyAgICAgICAgfQorICAgICAgICBsZXQgaGVhcF90eXBlID0gKHR5cGVv
ZiB0eXBlKSA9PSAnbnVtYmVyJyA/IHR5cGUgOiB0eXBlLmhlYXBfdHlwZTsKKyAgICAgICAgcmV0
dXJuIHRoaXMuUmVmTnVsbChoZWFwX3R5cGUpOworICAgIH0KKyAgfQorfQorCitjbGFzcyBXYXNt
R2xvYmFsQnVpbGRlciB7CisgIC8vIHtpbml0fSBzaG91bGQgYmUgY29uc3RydWN0ZWQgd2l0aCBX
YXNtSW5pdEV4cHIuCisgIGNvbnN0cnVjdG9yKG1vZHVsZSwgdHlwZSwgbXV0YWJsZSwgaW5pdCkg
eworICAgIHRoaXMubW9kdWxlID0gbW9kdWxlOworICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAg
dGhpcy5tdXRhYmxlID0gbXV0YWJsZTsKKyAgICB0aGlzLmluaXQgPSBpbml0OworICB9CisKKyAg
ZXhwb3J0QXMobmFtZSkgeworICAgIHRoaXMubW9kdWxlLmV4cG9ydHMucHVzaCgKKyAgICAgICAg
e25hbWU6IG5hbWUsIGtpbmQ6IGtFeHRlcm5hbEdsb2JhbCwgaW5kZXg6IHRoaXMuaW5kZXh9KTsK
KyAgICByZXR1cm4gdGhpczsKKyAgfQorfQorCitjbGFzcyBXYXNtVGFibGVCdWlsZGVyIHsKKyAg
Y29uc3RydWN0b3IobW9kdWxlLCB0eXBlLCBpbml0aWFsX3NpemUsIG1heF9zaXplLCBpbml0X2V4
cHIpIHsKKyAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOwor
ICAgIHRoaXMuaW5pdGlhbF9zaXplID0gaW5pdGlhbF9zaXplOworICAgIHRoaXMuaGFzX21heCA9
IG1heF9zaXplICE9PSB1bmRlZmluZWQ7CisgICAgdGhpcy5tYXhfc2l6ZSA9IG1heF9zaXplOwor
ICAgIHRoaXMuaW5pdF9leHByID0gaW5pdF9leHByOworICAgIHRoaXMuaGFzX2luaXQgPSBpbml0
X2V4cHIgIT09IHVuZGVmaW5lZDsKKyAgfQorCisgIGV4cG9ydEFzKG5hbWUpIHsKKyAgICB0aGlz
Lm1vZHVsZS5leHBvcnRzLnB1c2goCisgICAgICAgIHtuYW1lOiBuYW1lLCBraW5kOiBrRXh0ZXJu
YWxUYWJsZSwgaW5kZXg6IHRoaXMuaW5kZXh9KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorfQor
CitmdW5jdGlvbiBtYWtlRmllbGQodHlwZSwgbXV0YWJpbGl0eSkgeworICBpZiAoKHR5cGVvZiBt
dXRhYmlsaXR5KSAhPSAnYm9vbGVhbicpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpZWxkIG11
dGFiaWxpdHkgbXVzdCBiZSBib29sZWFuJyk7CisgIH0KKyAgcmV0dXJuIHt0eXBlOiB0eXBlLCBt
dXRhYmlsaXR5OiBtdXRhYmlsaXR5fTsKK30KKworY2xhc3MgV2FzbVN0cnVjdCB7CisgIGNvbnN0
cnVjdG9yKGZpZWxkcykgeworICAgIGlmICghQXJyYXkuaXNBcnJheShmaWVsZHMpKSB7CisgICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ3N0cnVjdCBmaWVsZHMgbXVzdCBiZSBhbiBhcnJheScpOworICAg
IH0KKyAgICB0aGlzLmZpZWxkcyA9IGZpZWxkczsKKyAgICB0aGlzLnR5cGVfZm9ybSA9IGtXYXNt
U3RydWN0VHlwZUZvcm07CisgIH0KK30KKworY2xhc3MgV2FzbVN0cnVjdFN1YnR5cGUgZXh0ZW5k
cyBXYXNtU3RydWN0IHsKKyAgY29uc3RydWN0b3IoZmllbGRzLCBzdXBlcnR5cGVfaWR4KSB7Cisg
ICAgc3VwZXIoZmllbGRzKTsKKyAgICB0aGlzLnN1cGVydHlwZSA9IHN1cGVydHlwZV9pZHg7Cisg
ICAgdGhpcy50eXBlX2Zvcm0gPSBrV2FzbVN0cnVjdFN1YnR5cGVGb3JtOworICB9Cit9CisKK2Ns
YXNzIFdhc21BcnJheSB7CisgIGNvbnN0cnVjdG9yKHR5cGUsIG11dGFiaWxpdHkpIHsKKyAgICB0
aGlzLnR5cGUgPSB0eXBlOworICAgIGlmICghbXV0YWJpbGl0eSkgdGhyb3cgbmV3IEVycm9yKCJJ
bW11dGFibGUgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIHlldCIpOworICAgIHRoaXMubXV0YWJp
bGl0eSA9IG11dGFiaWxpdHk7CisgICAgdGhpcy50eXBlX2Zvcm0gPSBrV2FzbUFycmF5VHlwZUZv
cm07CisgIH0KK30KKworY2xhc3MgV2FzbUFycmF5U3VidHlwZSBleHRlbmRzIFdhc21BcnJheSB7
CisgIGNvbnN0cnVjdG9yKHR5cGUsIG11dGFiaWxpdHksIHN1cGVydHlwZV9pZHgpIHsKKyAgICBz
dXBlcih0eXBlLCBtdXRhYmlsaXR5KTsKKyAgICB0aGlzLnN1cGVydHlwZSA9IHN1cGVydHlwZV9p
ZHg7CisgICAgdGhpcy50eXBlX2Zvcm0gPSBrV2FzbUFycmF5U3VidHlwZUZvcm07CisgIH0KK30K
K2NsYXNzIFdhc21FbGVtU2VnbWVudCB7CisgIGNvbnN0cnVjdG9yKHRhYmxlLCBvZmZzZXQsIHR5
cGUsIGVsZW1lbnRzLCBpc19kZWNsKSB7CisgICAgdGhpcy50YWJsZSA9IHRhYmxlOworICAgIHRo
aXMub2Zmc2V0ID0gb2Zmc2V0OworICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAgdGhpcy5lbGVt
ZW50cyA9IGVsZW1lbnRzOworICAgIHRoaXMuaXNfZGVjbCA9IGlzX2RlY2w7CisgICAgLy8gSW52
YXJpYW50IGNoZWNrcy4KKyAgICBpZiAoKHRhYmxlID09PSB1bmRlZmluZWQpICE9IChvZmZzZXQg
PT09IHVuZGVmaW5lZCkpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiaW52YWxpZCBlbGVtZW50
IHNlZ21lbnQiKTsKKyAgICB9CisgICAgZm9yIChsZXQgZWxlbSBvZiBlbGVtZW50cykgeworICAg
ICAgaWYgKCgodHlwZW9mIGVsZW0pID09ICdudW1iZXInKSAhPSAodHlwZSA9PT0gdW5kZWZpbmVk
KSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZWxlbWVudCIpOworICAgICAg
fQorICAgIH0KKyAgfQorCisgIGlzX2FjdGl2ZSgpIHsKKyAgICByZXR1cm4gdGhpcy50YWJsZSAh
PT0gdW5kZWZpbmVkOworICB9CisKKyAgaXNfcGFzc2l2ZSgpIHsKKyAgICByZXR1cm4gdGhpcy50
YWJsZSA9PT0gdW5kZWZpbmVkICYmICF0aGlzLmlzX2RlY2w7CisgIH0KKworICBpc19kZWNsYXJh
dGl2ZSgpIHsKKyAgICByZXR1cm4gdGhpcy50YWJsZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuaXNf
ZGVjbDsKKyAgfQorCisgIGV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkgeworICAgIHJldHVybiB0
aGlzLnR5cGUgIT09IHVuZGVmaW5lZDsKKyAgfQorfQorCitjbGFzcyBXYXNtTW9kdWxlQnVpbGRl
ciB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMudHlwZXMgPSBbXTsKKyAgICB0aGlzLmlt
cG9ydHMgPSBbXTsKKyAgICB0aGlzLmV4cG9ydHMgPSBbXTsKKyAgICB0aGlzLmdsb2JhbHMgPSBb
XTsKKyAgICB0aGlzLnRhYmxlcyA9IFtdOworICAgIHRoaXMudGFncyA9IFtdOworICAgIHRoaXMu
ZnVuY3Rpb25zID0gW107CisgICAgdGhpcy5jb21waWxhdGlvbl9oaW50cyA9IFtdOworICAgIHRo
aXMuZWxlbWVudF9zZWdtZW50cyA9IFtdOworICAgIHRoaXMuZGF0YV9zZWdtZW50cyA9IFtdOwor
ICAgIHRoaXMuZXhwbGljaXQgPSBbXTsKKyAgICB0aGlzLm51bV9pbXBvcnRlZF9mdW5jcyA9IDA7
CisgICAgdGhpcy5udW1faW1wb3J0ZWRfZ2xvYmFscyA9IDA7CisgICAgdGhpcy5udW1faW1wb3J0
ZWRfdGFibGVzID0gMDsKKyAgICB0aGlzLm51bV9pbXBvcnRlZF90YWdzID0gMDsKKyAgICByZXR1
cm4gdGhpczsKKyAgfQorCisgIGFkZFN0YXJ0KHN0YXJ0X2luZGV4KSB7CisgICAgdGhpcy5zdGFy
dF9pbmRleCA9IHN0YXJ0X2luZGV4OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRkTWVt
b3J5KG1pbiwgbWF4LCBleHBvcnRlZCwgc2hhcmVkKSB7CisgICAgdGhpcy5tZW1vcnkgPSB7Cisg
ICAgICBtaW46IG1pbiwKKyAgICAgIG1heDogbWF4LAorICAgICAgZXhwb3J0ZWQ6IGV4cG9ydGVk
LAorICAgICAgc2hhcmVkOiBzaGFyZWQgfHwgZmFsc2UsCisgICAgICBpc19tZW1vcnk2NDogZmFs
c2UKKyAgICB9OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRkTWVtb3J5NjQobWluLCBt
YXgsIGV4cG9ydGVkKSB7CisgICAgdGhpcy5tZW1vcnkgPSB7CisgICAgICBtaW46IG1pbiwKKyAg
ICAgIG1heDogbWF4LAorICAgICAgZXhwb3J0ZWQ6IGV4cG9ydGVkLAorICAgICAgc2hhcmVkOiBm
YWxzZSwKKyAgICAgIGlzX21lbW9yeTY0OiB0cnVlCisgICAgfTsKKyAgICByZXR1cm4gdGhpczsK
KyAgfQorCisgIGFkZEV4cGxpY2l0U2VjdGlvbihieXRlcykgeworICAgIHRoaXMuZXhwbGljaXQu
cHVzaChieXRlcyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBzdHJpbmdUb0J5dGVzKG5h
bWUpIHsKKyAgICB2YXIgcmVzdWx0ID0gbmV3IEJpbmFyeSgpOworICAgIHJlc3VsdC5lbWl0X3Uz
MnYobmFtZS5sZW5ndGgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkr
KykgeworICAgICAgcmVzdWx0LmVtaXRfdTgobmFtZS5jaGFyQ29kZUF0KGkpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdC50cnVuY19idWZmZXIoKQorICB9CisKKyAgY3JlYXRlQ3VzdG9tU2Vj
dGlvbihuYW1lLCBieXRlcykgeworICAgIG5hbWUgPSB0aGlzLnN0cmluZ1RvQnl0ZXMobmFtZSk7
CisgICAgdmFyIHNlY3Rpb24gPSBuZXcgQmluYXJ5KCk7CisgICAgc2VjdGlvbi5lbWl0X3U4KDAp
OworICAgIHNlY3Rpb24uZW1pdF91MzJ2KG5hbWUubGVuZ3RoICsgYnl0ZXMubGVuZ3RoKTsKKyAg
ICBzZWN0aW9uLmVtaXRfYnl0ZXMobmFtZSk7CisgICAgc2VjdGlvbi5lbWl0X2J5dGVzKGJ5dGVz
KTsKKyAgICByZXR1cm4gc2VjdGlvbi50cnVuY19idWZmZXIoKTsKKyAgfQorCisgIGFkZEN1c3Rv
bVNlY3Rpb24obmFtZSwgYnl0ZXMpIHsKKyAgICB0aGlzLmV4cGxpY2l0LnB1c2godGhpcy5jcmVh
dGVDdXN0b21TZWN0aW9uKG5hbWUsIGJ5dGVzKSk7CisgIH0KKworICBhZGRUeXBlKHR5cGUpIHsK
KyAgICB0aGlzLnR5cGVzLnB1c2godHlwZSk7CisgICAgdmFyIHBsID0gdHlwZS5wYXJhbXMubGVu
Z3RoOyAgIC8vIHNob3VsZCBoYXZlIHBhcmFtcworICAgIHZhciBybCA9IHR5cGUucmVzdWx0cy5s
ZW5ndGg7ICAvLyBzaG91bGQgaGF2ZSByZXN1bHRzCisgICAgcmV0dXJuIHRoaXMudHlwZXMubGVu
Z3RoIC0gMTsKKyAgfQorCisgIGFkZFN0cnVjdChmaWVsZHMpIHsKKyAgICB0aGlzLnR5cGVzLnB1
c2gobmV3IFdhc21TdHJ1Y3QoZmllbGRzKSk7CisgICAgcmV0dXJuIHRoaXMudHlwZXMubGVuZ3Ro
IC0gMTsKKyAgfQorCisgIGtHZW5lcmljU3VwZXJUeXBlID0gMHhGRkZGRkZGRTsKKyAgYWRkU3Ry
dWN0U3VidHlwZShmaWVsZHMsIHN1cGVydHlwZV9pZHggPSB0aGlzLmtHZW5lcmljU3VwZXJUeXBl
KSB7CisgICAgdGhpcy50eXBlcy5wdXNoKG5ldyBXYXNtU3RydWN0U3VidHlwZShmaWVsZHMsIHN1
cGVydHlwZV9pZHgpKTsKKyAgICByZXR1cm4gdGhpcy50eXBlcy5sZW5ndGggLSAxOworICB9CisK
KyAgYWRkQXJyYXkodHlwZSwgbXV0YWJpbGl0eSkgeworICAgIHRoaXMudHlwZXMucHVzaChuZXcg
V2FzbUFycmF5KHR5cGUsIG11dGFiaWxpdHkpKTsKKyAgICByZXR1cm4gdGhpcy50eXBlcy5sZW5n
dGggLSAxOworICB9CisKKyAgYWRkQXJyYXlTdWJ0eXBlKHR5cGUsIG11dGFiaWxpdHksIHN1cGVy
dHlwZV9pZHggPSB0aGlzLmtHZW5lcmljU3VwZXJUeXBlKSB7CisgICAgdGhpcy50eXBlcy5wdXNo
KG5ldyBXYXNtQXJyYXlTdWJ0eXBlKHR5cGUsIG11dGFiaWxpdHksIHN1cGVydHlwZV9pZHgpKTsK
KyAgICByZXR1cm4gdGhpcy50eXBlcy5sZW5ndGggLSAxOworICB9CisKKyAgYWRkR2xvYmFsKHR5
cGUsIG11dGFibGUsIGluaXQpIHsKKyAgICBpZiAoaW5pdCA9PT0gdW5kZWZpbmVkKSBpbml0ID0g
V2FzbUluaXRFeHByLmRlZmF1bHRGb3IodHlwZSk7CisgICAgbGV0IGdsb2IgPSBuZXcgV2FzbUds
b2JhbEJ1aWxkZXIodGhpcywgdHlwZSwgbXV0YWJsZSwgaW5pdCk7CisgICAgZ2xvYi5pbmRleCA9
IHRoaXMuZ2xvYmFscy5sZW5ndGggKyB0aGlzLm51bV9pbXBvcnRlZF9nbG9iYWxzOworICAgIHRo
aXMuZ2xvYmFscy5wdXNoKGdsb2IpOworICAgIHJldHVybiBnbG9iOworICB9CisKKyAgYWRkVGFi
bGUoCisgICAgICB0eXBlLCBpbml0aWFsX3NpemUsIG1heF9zaXplID0gdW5kZWZpbmVkLCBpbml0
X2V4cHIgPSB1bmRlZmluZWQpIHsKKyAgICBpZiAodHlwZSA9PSBrV2FzbUkzMiB8fCB0eXBlID09
IGtXYXNtSTY0IHx8IHR5cGUgPT0ga1dhc21GMzIgfHwKKyAgICAgICAgdHlwZSA9PSBrV2FzbUY2
NCB8fCB0eXBlID09IGtXYXNtUzEyOCB8fCB0eXBlID09IGtXYXNtVm9pZCkgeworICAgICAgdGhy
b3cgbmV3IEVycm9yKCdUYWJsZXMgbXVzdCBiZSBvZiBhIHJlZmVyZW5jZSB0eXBlJyk7CisgICAg
fQorICAgIGxldCB0YWJsZSA9IG5ldyBXYXNtVGFibGVCdWlsZGVyKAorICAgICAgICB0aGlzLCB0
eXBlLCBpbml0aWFsX3NpemUsIG1heF9zaXplLCBpbml0X2V4cHIpOworICAgIHRhYmxlLmluZGV4
ID0gdGhpcy50YWJsZXMubGVuZ3RoICsgdGhpcy5udW1faW1wb3J0ZWRfdGFibGVzOworICAgIHRo
aXMudGFibGVzLnB1c2godGFibGUpOworICAgIHJldHVybiB0YWJsZTsKKyAgfQorCisgIGFkZFRh
Zyh0eXBlKSB7CisgICAgbGV0IHR5cGVfaW5kZXggPSAodHlwZW9mIHR5cGUpID09ICdudW1iZXIn
ID8gdHlwZSA6IHRoaXMuYWRkVHlwZSh0eXBlKTsKKyAgICBsZXQgdGFnX2luZGV4ID0gdGhpcy50
YWdzLmxlbmd0aCArIHRoaXMubnVtX2ltcG9ydGVkX3RhZ3M7CisgICAgdGhpcy50YWdzLnB1c2go
dHlwZV9pbmRleCk7CisgICAgcmV0dXJuIHRhZ19pbmRleDsKKyAgfQorCisgIGFkZEZ1bmN0aW9u
KG5hbWUsIHR5cGUsIGFyZ19uYW1lcykgeworICAgIGFyZ19uYW1lcyA9IGFyZ19uYW1lcyB8fCBb
XTsKKyAgICBsZXQgdHlwZV9pbmRleCA9ICh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicgPyB0eXBl
IDogdGhpcy5hZGRUeXBlKHR5cGUpOworICAgIGxldCBudW1fYXJncyA9IHRoaXMudHlwZXNbdHlw
ZV9pbmRleF0ucGFyYW1zLmxlbmd0aDsKKyAgICBpZiAobnVtX2FyZ3MgPCBhcmdfbmFtZXMubGVu
Z3RoKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCd0b28gbWFueSBhcmcgbmFtZXMgcHJvdmlkZWQn
KTsKKyAgICBpZiAobnVtX2FyZ3MgPiBhcmdfbmFtZXMubGVuZ3RoKQorICAgICAgYXJnX25hbWVz
LnB1c2gobnVtX2FyZ3MgLSBhcmdfbmFtZXMubGVuZ3RoKTsKKyAgICBsZXQgZnVuYyA9IG5ldyBX
YXNtRnVuY3Rpb25CdWlsZGVyKHRoaXMsIG5hbWUsIHR5cGVfaW5kZXgsIGFyZ19uYW1lcyk7Cisg
ICAgZnVuYy5pbmRleCA9IHRoaXMuZnVuY3Rpb25zLmxlbmd0aCArIHRoaXMubnVtX2ltcG9ydGVk
X2Z1bmNzOworICAgIHRoaXMuZnVuY3Rpb25zLnB1c2goZnVuYyk7CisgICAgcmV0dXJuIGZ1bmM7
CisgIH0KKworICBhZGRJbXBvcnQobW9kdWxlLCBuYW1lLCB0eXBlKSB7CisgICAgaWYgKHRoaXMu
ZnVuY3Rpb25zLmxlbmd0aCAhPSAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcG9ydGVk
IGZ1bmN0aW9ucyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2NhbCBvbmVzJyk7CisgICAgfQor
ICAgIGxldCB0eXBlX2luZGV4ID0gKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVyJyA/IHR5cGUgOiB0
aGlzLmFkZFR5cGUodHlwZSk7CisgICAgdGhpcy5pbXBvcnRzLnB1c2goeworICAgICAgbW9kdWxl
OiBtb2R1bGUsCisgICAgICBuYW1lOiBuYW1lLAorICAgICAga2luZDoga0V4dGVybmFsRnVuY3Rp
b24sCisgICAgICB0eXBlX2luZGV4OiB0eXBlX2luZGV4CisgICAgfSk7CisgICAgcmV0dXJuIHRo
aXMubnVtX2ltcG9ydGVkX2Z1bmNzKys7CisgIH0KKworICBhZGRJbXBvcnRlZEdsb2JhbChtb2R1
bGUsIG5hbWUsIHR5cGUsIG11dGFibGUgPSBmYWxzZSkgeworICAgIGlmICh0aGlzLmdsb2JhbHMu
bGVuZ3RoICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignSW1wb3J0ZWQgZ2xvYmFscyBt
dXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2NhbCBvbmVzJyk7CisgICAgfQorICAgIGxldCBvID0g
eworICAgICAgbW9kdWxlOiBtb2R1bGUsCisgICAgICBuYW1lOiBuYW1lLAorICAgICAga2luZDog
a0V4dGVybmFsR2xvYmFsLAorICAgICAgdHlwZTogdHlwZSwKKyAgICAgIG11dGFibGU6IG11dGFi
bGUKKyAgICB9OworICAgIHRoaXMuaW1wb3J0cy5wdXNoKG8pOworICAgIHJldHVybiB0aGlzLm51
bV9pbXBvcnRlZF9nbG9iYWxzKys7CisgIH0KKworICBhZGRJbXBvcnRlZE1lbW9yeShtb2R1bGUs
IG5hbWUsIGluaXRpYWwgPSAwLCBtYXhpbXVtLCBzaGFyZWQpIHsKKyAgICBsZXQgbyA9IHsKKyAg
ICAgIG1vZHVsZTogbW9kdWxlLAorICAgICAgbmFtZTogbmFtZSwKKyAgICAgIGtpbmQ6IGtFeHRl
cm5hbE1lbW9yeSwKKyAgICAgIGluaXRpYWw6IGluaXRpYWwsCisgICAgICBtYXhpbXVtOiBtYXhp
bXVtLAorICAgICAgc2hhcmVkOiBzaGFyZWQKKyAgICB9OworICAgIHRoaXMuaW1wb3J0cy5wdXNo
KG8pOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRkSW1wb3J0ZWRUYWJsZShtb2R1bGUs
IG5hbWUsIGluaXRpYWwsIG1heGltdW0sIHR5cGUpIHsKKyAgICBpZiAodGhpcy50YWJsZXMubGVu
Z3RoICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignSW1wb3J0ZWQgdGFibGVzIG11c3Qg
YmUgZGVjbGFyZWQgYmVmb3JlIGxvY2FsIG9uZXMnKTsKKyAgICB9CisgICAgbGV0IG8gPSB7Cisg
ICAgICBtb2R1bGU6IG1vZHVsZSwKKyAgICAgIG5hbWU6IG5hbWUsCisgICAgICBraW5kOiBrRXh0
ZXJuYWxUYWJsZSwKKyAgICAgIGluaXRpYWw6IGluaXRpYWwsCisgICAgICBtYXhpbXVtOiBtYXhp
bXVtLAorICAgICAgdHlwZTogdHlwZSB8fCBrV2FzbUZ1bmNSZWYKKyAgICB9OworICAgIHRoaXMu
aW1wb3J0cy5wdXNoKG8pOworICAgIHJldHVybiB0aGlzLm51bV9pbXBvcnRlZF90YWJsZXMrKzsK
KyAgfQorCisgIGFkZEltcG9ydGVkVGFnKG1vZHVsZSwgbmFtZSwgdHlwZSkgeworICAgIGlmICh0
aGlzLnRhZ3MubGVuZ3RoICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignSW1wb3J0ZWQg
dGFncyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2NhbCBvbmVzJyk7CisgICAgfQorICAgIGxl
dCB0eXBlX2luZGV4ID0gKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVyJyA/IHR5cGUgOiB0aGlzLmFk
ZFR5cGUodHlwZSk7CisgICAgbGV0IG8gPSB7CisgICAgICBtb2R1bGU6IG1vZHVsZSwKKyAgICAg
IG5hbWU6IG5hbWUsCisgICAgICBraW5kOiBrRXh0ZXJuYWxUYWcsCisgICAgICB0eXBlX2luZGV4
OiB0eXBlX2luZGV4CisgICAgfTsKKyAgICB0aGlzLmltcG9ydHMucHVzaChvKTsKKyAgICByZXR1
cm4gdGhpcy5udW1faW1wb3J0ZWRfdGFncysrOworICB9CisKKyAgYWRkRXhwb3J0KG5hbWUsIGlu
ZGV4KSB7CisgICAgdGhpcy5leHBvcnRzLnB1c2goe25hbWU6IG5hbWUsIGtpbmQ6IGtFeHRlcm5h
bEZ1bmN0aW9uLCBpbmRleDogaW5kZXh9KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFk
ZEV4cG9ydE9mS2luZChuYW1lLCBraW5kLCBpbmRleCkgeworICAgIGlmIChpbmRleCA9PT0gdW5k
ZWZpbmVkICYmIGtpbmQgIT0ga0V4dGVybmFsVGFibGUgJiYKKyAgICAgICAga2luZCAhPSBrRXh0
ZXJuYWxNZW1vcnkpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAnSW5kZXgg
Zm9yIGV4cG9ydHMgb3RoZXIgdGhhbiB0YWJsZXMvbWVtb3JpZXMgbXVzdCBiZSBwcm92aWRlZCcp
OworICAgIH0KKyAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIGluZGV4KSAh
PSAnbnVtYmVyJykgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmRleCBmb3IgZXhwb3J0cyBt
dXN0IGJlIGEgbnVtYmVyJykKKyAgICB9CisgICAgdGhpcy5leHBvcnRzLnB1c2goe25hbWU6IG5h
bWUsIGtpbmQ6IGtpbmQsIGluZGV4OiBpbmRleH0pOworICAgIHJldHVybiB0aGlzOworICB9CisK
KyAgc2V0Q29tcGlsYXRpb25IaW50KHN0cmF0ZWd5LCBiYXNlbGluZVRpZXIsIHRvcFRpZXIsIGlu
ZGV4KSB7CisgICAgdGhpcy5jb21waWxhdGlvbl9oaW50c1tpbmRleF0gPSB7CisgICAgICBzdHJh
dGVneTogc3RyYXRlZ3ksCisgICAgICBiYXNlbGluZVRpZXI6IGJhc2VsaW5lVGllciwKKyAgICAg
IHRvcFRpZXI6IHRvcFRpZXIKKyAgICB9OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRk
RGF0YVNlZ21lbnQoYWRkciwgZGF0YSwgaXNfZ2xvYmFsID0gZmFsc2UpIHsKKyAgICB0aGlzLmRh
dGFfc2VnbWVudHMucHVzaCgKKyAgICAgICAge2FkZHI6IGFkZHIsIGRhdGE6IGRhdGEsIGlzX2ds
b2JhbDogaXNfZ2xvYmFsLCBpc19hY3RpdmU6IHRydWV9KTsKKyAgICByZXR1cm4gdGhpcy5kYXRh
X3NlZ21lbnRzLmxlbmd0aCAtIDE7CisgIH0KKworICBhZGRQYXNzaXZlRGF0YVNlZ21lbnQoZGF0
YSkgeworICAgIHRoaXMuZGF0YV9zZWdtZW50cy5wdXNoKHtkYXRhOiBkYXRhLCBpc19hY3RpdmU6
IGZhbHNlfSk7CisgICAgcmV0dXJuIHRoaXMuZGF0YV9zZWdtZW50cy5sZW5ndGggLSAxOworICB9
CisKKyAgZXhwb3J0TWVtb3J5QXMobmFtZSkgeworICAgIHRoaXMuZXhwb3J0cy5wdXNoKHtuYW1l
OiBuYW1lLCBraW5kOiBrRXh0ZXJuYWxNZW1vcnksIGluZGV4OiAwfSk7CisgIH0KKworICAvLyB7
b2Zmc2V0fSBpcyBhbiBpbml0aWFsaXplciBleHByZXNzaW9uLgorICAvLyBJZiB7dHlwZX0gaXMg
dW5kZWZpbmVkLCB0aGVuIHtlbGVtZW50c30gYXJlIGZ1bmN0aW9uIGluZGljZXMuIE90aGVyd2lz
ZSwKKyAgLy8gdGhleSBhcmUgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbnMuCisgIGFkZEFjdGl2ZUVs
ZW1lbnRTZWdtZW50KHRhYmxlLCBvZmZzZXQsIGVsZW1lbnRzLCB0eXBlKSB7CisgICAgdGhpcy5l
bGVtZW50X3NlZ21lbnRzLnB1c2goCisgICAgICAgIG5ldyBXYXNtRWxlbVNlZ21lbnQodGFibGUs
IG9mZnNldCwgdHlwZSwgZWxlbWVudHMsIGZhbHNlKSk7CisgICAgcmV0dXJuIHRoaXMuZWxlbWVu
dF9zZWdtZW50cy5sZW5ndGggLSAxOworICB9CisKKyAgLy8gSWYge3R5cGV9IGlzIHVuZGVmaW5l
ZCwgdGhlbiB7ZWxlbWVudHN9IGFyZSBmdW5jdGlvbiBpbmRpY2VzLiBPdGhlcndpc2UsCisgIC8v
IHRoZXkgYXJlIGluaXRpYWxpemVyIGV4cHJlc3Npb25zLgorICBhZGRQYXNzaXZlRWxlbWVudFNl
Z21lbnQoZWxlbWVudHMsIHR5cGUpIHsKKyAgICB0aGlzLmVsZW1lbnRfc2VnbWVudHMucHVzaCgK
KyAgICAgIG5ldyBXYXNtRWxlbVNlZ21lbnQodW5kZWZpbmVkLCB1bmRlZmluZWQsIHR5cGUsIGVs
ZW1lbnRzLCBmYWxzZSkpOworICAgIHJldHVybiB0aGlzLmVsZW1lbnRfc2VnbWVudHMubGVuZ3Ro
IC0gMTsKKyAgfQorCisgIC8vIElmIHt0eXBlfSBpcyB1bmRlZmluZWQsIHRoZW4ge2VsZW1lbnRz
fSBhcmUgZnVuY3Rpb24gaW5kaWNlcy4gT3RoZXJ3aXNlLAorICAvLyB0aGV5IGFyZSBpbml0aWFs
aXplciBleHByZXNzaW9ucy4KKyAgYWRkRGVjbGFyYXRpdmVFbGVtZW50U2VnbWVudChlbGVtZW50
cywgdHlwZSkgeworICAgIHRoaXMuZWxlbWVudF9zZWdtZW50cy5wdXNoKAorICAgICAgbmV3IFdh
c21FbGVtU2VnbWVudCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHlwZSwgZWxlbWVudHMsIHRydWUp
KTsKKyAgICByZXR1cm4gdGhpcy5lbGVtZW50X3NlZ21lbnRzLmxlbmd0aCAtIDE7CisgIH0KKwor
ICBhcHBlbmRUb1RhYmxlKGFycmF5KSB7CisgICAgZm9yIChsZXQgbiBvZiBhcnJheSkgeworICAg
ICAgaWYgKHR5cGVvZiBuICE9ICdudW1iZXInKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lu
dmFsaWQgdGFibGUgKGVudHJpZXMgaGF2ZSB0byBiZSBudW1iZXJzKTogJyArIGFycmF5KTsKKyAg
ICB9CisgICAgaWYgKHRoaXMudGFibGVzLmxlbmd0aCA9PSAwKSB7CisgICAgICB0aGlzLmFkZFRh
YmxlKGtXYXNtQW55RnVuYywgMCk7CisgICAgfQorICAgIC8vIEFkanVzdCB0aGUgdGFibGUgdG8g
dGhlIGNvcnJlY3Qgc2l6ZS4KKyAgICBsZXQgdGFibGUgPSB0aGlzLnRhYmxlc1swXTsKKyAgICBj
b25zdCBiYXNlID0gdGFibGUuaW5pdGlhbF9zaXplOworICAgIGNvbnN0IHRhYmxlX3NpemUgPSBi
YXNlICsgYXJyYXkubGVuZ3RoOworICAgIHRhYmxlLmluaXRpYWxfc2l6ZSA9IHRhYmxlX3NpemU7
CisgICAgaWYgKHRhYmxlLmhhc19tYXggJiYgdGFibGVfc2l6ZSA+IHRhYmxlLm1heF9zaXplKSB7
CisgICAgICB0YWJsZS5tYXhfc2l6ZSA9IHRhYmxlX3NpemU7CisgICAgfQorICAgIHJldHVybiB0
aGlzLmFkZEFjdGl2ZUVsZW1lbnRTZWdtZW50KDAsIFdhc21Jbml0RXhwci5JMzJDb25zdChiYXNl
KSwgYXJyYXkpOworICB9CisKKyAgc2V0VGFibGVCb3VuZHMobWluLCBtYXggPSB1bmRlZmluZWQp
IHsKKyAgICBpZiAodGhpcy50YWJsZXMubGVuZ3RoICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBF
cnJvcignVGhlIHRhYmxlIGJvdW5kcyBvZiB0YWJsZSBcJzBcJyBoYXZlIGFscmVhZHkgYmVlbiBz
ZXQuJyk7CisgICAgfQorICAgIHRoaXMuYWRkVGFibGUoa1dhc21BbnlGdW5jLCBtaW4sIG1heCk7
CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBzZXROYW1lKG5hbWUpIHsKKyAgICB0aGlzLm5h
bWUgPSBuYW1lOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgdG9CdWZmZXIoZGVidWcgPSBm
YWxzZSkgeworICAgIGxldCBiaW5hcnkgPSBuZXcgQmluYXJ5OworICAgIGxldCB3YXNtID0gdGhp
czsKKworICAgIC8vIEFkZCBoZWFkZXIKKyAgICBiaW5hcnkuZW1pdF9oZWFkZXIoKTsKKworICAg
IC8vIEFkZCB0eXBlIHNlY3Rpb24KKyAgICBpZiAod2FzbS50eXBlcy5sZW5ndGggPiAwKSB7Cisg
ICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyB0eXBlcyBAICcgKyBiaW5hcnkubGVuZ3Ro
KTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1R5cGVTZWN0aW9uQ29kZSwgc2VjdGlvbiA9
PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20udHlwZXMubGVuZ3RoKTsKKyAgICAg
ICAgZm9yIChsZXQgdHlwZSBvZiB3YXNtLnR5cGVzKSB7CisgICAgICAgICAgaWYgKHR5cGUgaW5z
dGFuY2VvZiBXYXNtU3RydWN0KSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgodHlwZS50
eXBlX2Zvcm0pOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYodHlwZS5maWVsZHMubGVu
Z3RoKTsKKyAgICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHR5cGUuZmllbGRzKSB7CisgICAg
ICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKGZpZWxkLnR5cGUpOworICAgICAgICAgICAgICBz
ZWN0aW9uLmVtaXRfdTgoZmllbGQubXV0YWJpbGl0eSA/IDEgOiAwKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh0eXBlIGluc3RhbmNlb2YgV2FzbVN0cnVjdFN1YnR5cGUpIHsKKyAg
ICAgICAgICAgICAgaWYgKHR5cGUuc3VwZXJ0eXBlID09PSB0aGlzLmtHZW5lcmljU3VwZXJUeXBl
KSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtEYXRhUmVmQ29kZSk7CisgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2hlYXBfdHlw
ZSh0eXBlLnN1cGVydHlwZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBXYXNtQXJyYXkpIHsKKyAgICAgICAgICAg
IHNlY3Rpb24uZW1pdF91OCh0eXBlLnR5cGVfZm9ybSk7CisgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfdHlwZSh0eXBlLnR5cGUpOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KHR5cGUubXV0
YWJpbGl0eSA/IDEgOiAwKTsKKyAgICAgICAgICAgIGlmICh0eXBlIGluc3RhbmNlb2YgV2FzbUFy
cmF5U3VidHlwZSkgeworICAgICAgICAgICAgICBpZiAodHlwZS5zdXBlcnR5cGUgPT09IHRoaXMu
a0dlbmVyaWNTdXBlclR5cGUpIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0Rh
dGFSZWZDb2RlKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZWN0
aW9uLmVtaXRfaGVhcF90eXBlKHR5cGUuc3VwZXJ0eXBlKTsKKyAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRf
dTgoa1dhc21GdW5jdGlvblR5cGVGb3JtKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2
KHR5cGUucGFyYW1zLmxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKGxldCBwYXJhbSBvZiB0eXBl
LnBhcmFtcykgeworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShwYXJhbSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih0eXBlLnJlc3VsdHMubGVu
Z3RoKTsKKyAgICAgICAgICAgIGZvciAobGV0IHJlc3VsdCBvZiB0eXBlLnJlc3VsdHMpIHsKKyAg
ICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUocmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCBpbXBv
cnRzIHNlY3Rpb24KKyAgICBpZiAod2FzbS5pbXBvcnRzLmxlbmd0aCA+IDApIHsKKyAgICAgIGlm
IChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGltcG9ydHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7Cisg
ICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtJbXBvcnRTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7
CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20uaW1wb3J0cy5sZW5ndGgpOworICAgICAg
ICBmb3IgKGxldCBpbXAgb2Ygd2FzbS5pbXBvcnRzKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0
X3N0cmluZyhpbXAubW9kdWxlKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfc3RyaW5nKGltcC5u
YW1lIHx8ICcnKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoaW1wLmtpbmQpOworICAgICAg
ICAgIGlmIChpbXAua2luZCA9PSBrRXh0ZXJuYWxGdW5jdGlvbikgeworICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3UzMnYoaW1wLnR5cGVfaW5kZXgpOworICAgICAgICAgIH0gZWxzZSBpZiAoaW1w
LmtpbmQgPT0ga0V4dGVybmFsR2xvYmFsKSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlw
ZShpbXAudHlwZSk7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoaW1wLm11dGFibGUpOwor
ICAgICAgICAgIH0gZWxzZSBpZiAoaW1wLmtpbmQgPT0ga0V4dGVybmFsTWVtb3J5KSB7CisgICAg
ICAgICAgICB2YXIgaGFzX21heCA9ICh0eXBlb2YgaW1wLm1heGltdW0pICE9ICd1bmRlZmluZWQn
OworICAgICAgICAgICAgdmFyIGlzX3NoYXJlZCA9ICh0eXBlb2YgaW1wLnNoYXJlZCkgIT0gJ3Vu
ZGVmaW5lZCc7CisgICAgICAgICAgICBpZiAoaXNfc2hhcmVkKSB7CisgICAgICAgICAgICAgIHNl
Y3Rpb24uZW1pdF91OChoYXNfbWF4ID8gMyA6IDIpOyAgLy8gZmxhZ3MKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChoYXNfbWF4ID8gMSA6IDApOyAg
Ly8gZmxhZ3MKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGlt
cC5pbml0aWFsKTsgICAgICAgICAgICAgICAvLyBpbml0aWFsCisgICAgICAgICAgICBpZiAoaGFz
X21heCkgc2VjdGlvbi5lbWl0X3UzMnYoaW1wLm1heGltdW0pOyAgLy8gbWF4aW11bQorICAgICAg
ICAgIH0gZWxzZSBpZiAoaW1wLmtpbmQgPT0ga0V4dGVybmFsVGFibGUpIHsKKyAgICAgICAgICAg
IHNlY3Rpb24uZW1pdF90eXBlKGltcC50eXBlKTsKKyAgICAgICAgICAgIHZhciBoYXNfbWF4ID0g
KHR5cGVvZiBpbXAubWF4aW11bSkgIT0gJ3VuZGVmaW5lZCc7CisgICAgICAgICAgICBzZWN0aW9u
LmVtaXRfdTgoaGFzX21heCA/IDEgOiAwKTsgICAgICAgICAgICAgLy8gZmxhZ3MKKyAgICAgICAg
ICAgIHNlY3Rpb24uZW1pdF91MzJ2KGltcC5pbml0aWFsKTsgICAgICAgICAgICAgICAvLyBpbml0
aWFsCisgICAgICAgICAgICBpZiAoaGFzX21heCkgc2VjdGlvbi5lbWl0X3UzMnYoaW1wLm1heGlt
dW0pOyAgLy8gbWF4aW11bQorICAgICAgICAgIH0gZWxzZSBpZiAoaW1wLmtpbmQgPT0ga0V4dGVy
bmFsVGFnKSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihrRXhjZXB0aW9uQXR0cmli
dXRlKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGltcC50eXBlX2luZGV4KTsKKyAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duL3Vu
c3VwcG9ydGVkIGltcG9ydCBraW5kICcgKyBpbXAua2luZCk7CisgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgZnVuY3Rpb25zIGRlY2xhcmF0aW9u
cworICAgIGlmICh3YXNtLmZ1bmN0aW9ucy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcp
IHByaW50KCdlbWl0dGluZyBmdW5jdGlvbiBkZWNscyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAg
ICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa0Z1bmN0aW9uU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4g
eworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLmZ1bmN0aW9ucy5sZW5ndGgpOworICAg
ICAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAgICAgICAgc2VjdGlv
bi5lbWl0X3UzMnYoZnVuYy50eXBlX2luZGV4KTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAg
fQorCisgICAgLy8gQWRkIHRhYmxlIHNlY3Rpb24KKyAgICBpZiAod2FzbS50YWJsZXMubGVuZ3Ro
ID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgdGFibGVzIEAgJyArIGJp
bmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrVGFibGVTZWN0aW9uQ29k
ZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20udGFibGVzLmxl
bmd0aCk7CisgICAgICAgIGZvciAobGV0IHRhYmxlIG9mIHdhc20udGFibGVzKSB7CisgICAgICAg
ICAgc2VjdGlvbi5lbWl0X3R5cGUodGFibGUudHlwZSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0
X3U4KHRhYmxlLmhhc19tYXgpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHRhYmxlLmlu
aXRpYWxfc2l6ZSk7CisgICAgICAgICAgaWYgKHRhYmxlLmhhc19tYXgpIHNlY3Rpb24uZW1pdF91
MzJ2KHRhYmxlLm1heF9zaXplKTsKKyAgICAgICAgICBpZiAodGFibGUuaGFzX2luaXQpIHsKKyAg
ICAgICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIodGFibGUuaW5pdF9leHByKTsKKyAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCBtZW1vcnkg
c2VjdGlvbgorICAgIGlmICh3YXNtLm1lbW9yeSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBpZiAo
ZGVidWcpIHByaW50KCdlbWl0dGluZyBtZW1vcnkgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAg
ICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtNZW1vcnlTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7Cisg
ICAgICAgIHNlY3Rpb24uZW1pdF91OCgxKTsgIC8vIG9uZSBtZW1vcnkgZW50cnkKKyAgICAgICAg
Y29uc3QgaGFzX21heCA9IHdhc20ubWVtb3J5Lm1heCAhPT0gdW5kZWZpbmVkOworICAgICAgICBp
ZiAod2FzbS5tZW1vcnkuaXNfbWVtb3J5NjQpIHsKKyAgICAgICAgICBpZiAod2FzbS5tZW1vcnku
c2hhcmVkKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NoYXJpbmcgbWVtb3J5NjQg
aXMgbm90IHN1cHBvcnRlZCAoeWV0KScpOworICAgICAgICAgIH0KKyAgICAgICAgICBzZWN0aW9u
LmVtaXRfdTgoCisgICAgICAgICAgICAgIGhhc19tYXggPyBrTGltaXRzTWVtb3J5NjRXaXRoTWF4
aW11bSA6IGtMaW1pdHNNZW1vcnk2NE5vTWF4aW11bSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0
X3U2NHYod2FzbS5tZW1vcnkubWluKTsKKyAgICAgICAgICBpZiAoaGFzX21heCkgc2VjdGlvbi5l
bWl0X3U2NHYod2FzbS5tZW1vcnkubWF4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBz
ZWN0aW9uLmVtaXRfdTgoCisgICAgICAgICAgICAgIHdhc20ubWVtb3J5LnNoYXJlZCA/CisgICAg
ICAgICAgICAgICAgICAoaGFzX21heCA/IGtMaW1pdHNTaGFyZWRXaXRoTWF4aW11bSA6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGtMaW1pdHNTaGFyZWROb01heGltdW0pIDoKKyAgICAg
ICAgICAgICAgICAgIChoYXNfbWF4ID8ga0xpbWl0c1dpdGhNYXhpbXVtIDoga0xpbWl0c05vTWF4
aW11bSkpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20ubWVtb3J5Lm1pbik7Cisg
ICAgICAgICAgaWYgKGhhc19tYXgpIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20ubWVtb3J5Lm1heCk7
CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCB0YWcgc2VjdGlvbi4K
KyAgICBpZiAod2FzbS50YWdzLmxlbmd0aCA+IDApIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQo
J2VtaXR0aW5nIHRhZ3MgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9z
ZWN0aW9uKGtUYWdTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1p
dF91MzJ2KHdhc20udGFncy5sZW5ndGgpOworICAgICAgICBmb3IgKGxldCB0eXBlX2luZGV4IG9m
IHdhc20udGFncykgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGtFeGNlcHRpb25BdHRy
aWJ1dGUpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHR5cGVfaW5kZXgpOworICAgICAg
ICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgZ2xvYmFsIHNlY3Rpb24uCisgICAg
aWYgKHdhc20uZ2xvYmFscy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdl
bWl0dGluZyBnbG9iYWxzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRf
c2VjdGlvbihrR2xvYmFsU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9u
LmVtaXRfdTMydih3YXNtLmdsb2JhbHMubGVuZ3RoKTsKKyAgICAgICAgZm9yIChsZXQgZ2xvYmFs
IG9mIHdhc20uZ2xvYmFscykgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKGdsb2JhbC50
eXBlKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoZ2xvYmFsLm11dGFibGUpOworICAgICAg
ICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIoZ2xvYmFsLmluaXQpOworICAgICAgICB9CisgICAg
ICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgZXhwb3J0IHRhYmxlLgorICAgIHZhciBtZW1fZXhw
b3J0ID0gKHdhc20ubWVtb3J5ICE9PSB1bmRlZmluZWQgJiYgd2FzbS5tZW1vcnkuZXhwb3J0ZWQp
OworICAgIHZhciBleHBvcnRzX2NvdW50ID0gd2FzbS5leHBvcnRzLmxlbmd0aCArIChtZW1fZXhw
b3J0ID8gMSA6IDApOworICAgIGlmIChleHBvcnRzX2NvdW50ID4gMCkgeworICAgICAgaWYgKGRl
YnVnKSBwcmludCgnZW1pdHRpbmcgZXhwb3J0cyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAg
IGJpbmFyeS5lbWl0X3NlY3Rpb24oa0V4cG9ydFNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAg
ICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoZXhwb3J0c19jb3VudCk7CisgICAgICAgIGZvciAobGV0
IGV4cCBvZiB3YXNtLmV4cG9ydHMpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfc3RyaW5nKGV4
cC5uYW1lKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoZXhwLmtpbmQpOworICAgICAgICAg
IHNlY3Rpb24uZW1pdF91MzJ2KGV4cC5pbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1l
bV9leHBvcnQpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfc3RyaW5nKCdtZW1vcnknKTsKKyAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0V4dGVybmFsTWVtb3J5KTsKKyAgICAgICAgICBzZWN0
aW9uLmVtaXRfdTgoMCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFk
ZCBzdGFydCBmdW5jdGlvbiBzZWN0aW9uLgorICAgIGlmICh3YXNtLnN0YXJ0X2luZGV4ICE9PSB1
bmRlZmluZWQpIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIHN0YXJ0IGZ1bmN0
aW9uIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrU3Rh
cnRTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdh
c20uc3RhcnRfaW5kZXgpOworICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIGVsZW1lbnQg
c2VnbWVudHMKKyAgICBpZiAod2FzbS5lbGVtZW50X3NlZ21lbnRzLmxlbmd0aCA+IDApIHsKKyAg
ICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGVsZW1lbnQgc2VnbWVudHMgQCAnICsgYmlu
YXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtFbGVtZW50U2VjdGlvbkNv
ZGUsIHNlY3Rpb24gPT4geworICAgICAgICB2YXIgc2VnbWVudHMgPSB3YXNtLmVsZW1lbnRfc2Vn
bWVudHM7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHNlZ21lbnRzLmxlbmd0aCk7CisKKyAg
ICAgICAgZm9yIChsZXQgc2VnbWVudCBvZiBzZWdtZW50cykgeworICAgICAgICAgIC8vIEVtaXQg
ZmxhZyBhbmQgaGVhZGVyLgorICAgICAgICAgIC8vIEVhY2ggY2FzZSBiZWxvdyBjb3JyZXNwb25k
cyB0byBhIGZsYWcgZnJvbQorICAgICAgICAgIC8vIGh0dHBzOi8vd2ViYXNzZW1ibHkuZ2l0aHVi
LmlvL3NwZWMvY29yZS9iaW5hcnkvbW9kdWxlcy5odG1sI2VsZW1lbnQtc2VjdGlvbgorICAgICAg
ICAgIC8vIChub3QgaW4gaW5jcmVhc2luZyBvcmRlcikuCisgICAgICAgICAgaWYgKHNlZ21lbnQu
aXNfYWN0aXZlKCkpIHsKKyAgICAgICAgICAgIGlmIChzZWdtZW50LnRhYmxlID09IDAgJiYgc2Vn
bWVudC50eXBlID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuZXhw
cmVzc2lvbnNfYXNfZWxlbWVudHMoKSkgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91
OCgweDA0KTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKHNlZ21lbnQu
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9u
LmVtaXRfdTgoMHgwMCkKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKHNl
Z21lbnQub2Zmc2V0KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgaWYgKHNlZ21lbnQuZXhwcmVzc2lvbnNfYXNfZWxlbWVudHMoKSkgeworICAg
ICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDA2KTsKKyAgICAgICAgICAgICAgICBzZWN0
aW9uLmVtaXRfdTMydihzZWdtZW50LnRhYmxlKTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfaW5pdF9leHByKHNlZ21lbnQub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfdHlwZShzZWdtZW50LnR5cGUpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDAyKTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfdTMydihzZWdtZW50LnRhYmxlKTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5p
dF9leHByKHNlZ21lbnQub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgo
a0V4dGVybmFsRnVuY3Rpb24pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzZWdtZW50LmV4cHJlc3Npb25zX2FzX2Vs
ZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuaXNfcGFzc2l2ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDUpOworICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDA3KTsKKyAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShzZWdtZW50LnR5cGUpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuaXNfcGFzc2l2ZSgp
KSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDEpOworICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDAzKTsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0V4dGVybmFsRnVuY3Rp
b24pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIC8vIEVtaXQgZWxl
bWVudHMuCisgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoc2VnbWVudC5lbGVtZW50cy5sZW5n
dGgpOworICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2Ygc2VnbWVudC5lbGVtZW50cykgewor
ICAgICAgICAgICAgaWYgKHNlZ21lbnQuZXhwcmVzc2lvbnNfYXNfZWxlbWVudHMoKSkgeworICAg
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKGVsZW1lbnQpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoZWxlbWVudCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KQorICAgIH0KKworICAg
IC8vIElmIHRoZXJlIGFyZSBhbnkgcGFzc2l2ZSBkYXRhIHNlZ21lbnRzLCBhZGQgdGhlIERhdGFD
b3VudCBzZWN0aW9uLgorICAgIGlmICh3YXNtLmRhdGFfc2VnbWVudHMuc29tZShzZWcgPT4gIXNl
Zy5pc19hY3RpdmUpKSB7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtEYXRhQ291bnRTZWN0
aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20uZGF0
YV9zZWdtZW50cy5sZW5ndGgpOworICAgICAgfSk7CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUg
YXJlIGNvbXBpbGF0aW9uIGhpbnRzIGFkZCBhIGN1c3RvbSBzZWN0aW9uICdjb21waWxhdGlvbkhp
bnRzJworICAgIC8vIGFmdGVyIHRoZSBmdW5jdGlvbiBzZWN0aW9uIGFuZCBiZWZvcmUgdGhlIGNv
ZGUgc2VjdGlvbi4KKyAgICBpZiAod2FzbS5jb21waWxhdGlvbl9oaW50cy5sZW5ndGggPiAwKSB7
CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBjb21waWxhdGlvbiBoaW50cyBAICcg
KyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIC8vIEJ1aWxkIGN1c3RvbSBzZWN0aW9uIHBheWxvYWQu
CisgICAgICBsZXQgcGF5bG9hZEJpbmFyeSA9IG5ldyBCaW5hcnkoKTsKKyAgICAgIGxldCBpbXBs
aWNpdF9jb21waWxhdGlvbl9oaW50c19jb3VudCA9IHdhc20uZnVuY3Rpb25zLmxlbmd0aDsKKyAg
ICAgIHBheWxvYWRCaW5hcnkuZW1pdF91MzJ2KGltcGxpY2l0X2NvbXBpbGF0aW9uX2hpbnRzX2Nv
dW50KTsKKworICAgICAgLy8gRGVmYXVsdHMgdG8gdGhlIGNvbXBpbGVyJ3MgY2hvaWNlIGlmIG5v
IGJldHRlciBoaW50IHdhcyBnaXZlbiAoMHgwMCkuCisgICAgICBsZXQgZGVmYXVsdEhpbnRCeXRl
ID0ga0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5RGVmYXVsdCB8CisgICAgICAgICAgKGtDb21waWxh
dGlvbkhpbnRUaWVyRGVmYXVsdCA8PCAyKSB8CisgICAgICAgICAgKGtDb21waWxhdGlvbkhpbnRU
aWVyRGVmYXVsdCA8PCA0KTsKKworICAgICAgLy8gRW1pdCBoaW50IGJ5dGUgZm9yIGV2ZXJ5IGZ1
bmN0aW9uIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUuCisgICAgICBmb3IgKGxldCBpID0gMDsgaSA8
IGltcGxpY2l0X2NvbXBpbGF0aW9uX2hpbnRzX2NvdW50OyBpKyspIHsKKyAgICAgICAgbGV0IGlu
ZGV4ID0gd2FzbS5udW1faW1wb3J0ZWRfZnVuY3MgKyBpOworICAgICAgICB2YXIgaGludEJ5dGU7
CisgICAgICAgIGlmIChpbmRleCBpbiB3YXNtLmNvbXBpbGF0aW9uX2hpbnRzKSB7CisgICAgICAg
ICAgbGV0IGhpbnQgPSB3YXNtLmNvbXBpbGF0aW9uX2hpbnRzW2luZGV4XTsKKyAgICAgICAgICBo
aW50Qnl0ZSA9CisgICAgICAgICAgICAgIGhpbnQuc3RyYXRlZ3kgfCAoaGludC5iYXNlbGluZVRp
ZXIgPDwgMikgfCAoaGludC50b3BUaWVyIDw8IDQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIGhpbnRCeXRlID0gZGVmYXVsdEhpbnRCeXRlOworICAgICAgICB9CisgICAgICAgIHBheWxv
YWRCaW5hcnkuZW1pdF91OChoaW50Qnl0ZSk7CisgICAgICB9CisKKyAgICAgIC8vIEZpbmFsaXpl
IGFzIGN1c3RvbSBzZWN0aW9uLgorICAgICAgbGV0IG5hbWUgPSAnY29tcGlsYXRpb25IaW50cyc7
CisgICAgICBsZXQgYnl0ZXMgPSB0aGlzLmNyZWF0ZUN1c3RvbVNlY3Rpb24obmFtZSwgcGF5bG9h
ZEJpbmFyeS50cnVuY19idWZmZXIoKSk7CisgICAgICBiaW5hcnkuZW1pdF9ieXRlcyhieXRlcyk7
CisgICAgfQorCisgICAgLy8gQWRkIGZ1bmN0aW9uIGJvZGllcy4KKyAgICBpZiAod2FzbS5mdW5j
dGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgLy8gZW1pdCBmdW5jdGlvbiBib2RpZXMKKyAgICAg
IGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGNvZGUgQCAnICsgYmluYXJ5Lmxlbmd0aCk7Cisg
ICAgICBsZXQgc2VjdGlvbl9sZW5ndGggPSAwOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihr
Q29kZVNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYo
d2FzbS5mdW5jdGlvbnMubGVuZ3RoKTsKKyAgICAgICAgbGV0IGhlYWRlciA9IG5ldyBCaW5hcnk7
CisgICAgICAgIGZvciAobGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsKKyAgICAgICAgICBo
ZWFkZXIucmVzZXQoKTsKKyAgICAgICAgICAvLyBGdW5jdGlvbiBib2R5IGxlbmd0aCB3aWxsIGJl
IHBhdGNoZWQgbGF0ZXIuCisgICAgICAgICAgbGV0IGxvY2FsX2RlY2xzID0gZnVuYy5sb2NhbHMg
fHwgW107CisgICAgICAgICAgaGVhZGVyLmVtaXRfdTMydihsb2NhbF9kZWNscy5sZW5ndGgpOwor
ICAgICAgICAgIGZvciAobGV0IGRlY2wgb2YgbG9jYWxfZGVjbHMpIHsKKyAgICAgICAgICAgIGhl
YWRlci5lbWl0X3UzMnYoZGVjbC5jb3VudCk7CisgICAgICAgICAgICBoZWFkZXIuZW1pdF90eXBl
KGRlY2wudHlwZSk7CisgICAgICAgICAgfQorICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGhl
YWRlci5sZW5ndGggKyBmdW5jLmJvZHkubGVuZ3RoKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRf
Ynl0ZXMoaGVhZGVyLnRydW5jX2J1ZmZlcigpKTsKKyAgICAgICAgICAvLyBTZXQgdG8gc2VjdGlv
biBvZmZzZXQgZm9yIG5vdywgd2lsbCB1cGRhdGUuCisgICAgICAgICAgZnVuYy5ib2R5X29mZnNl
dCA9IHNlY3Rpb24ubGVuZ3RoOworICAgICAgICAgIHNlY3Rpb24uZW1pdF9ieXRlcyhmdW5jLmJv
ZHkpOworICAgICAgICB9CisgICAgICAgIHNlY3Rpb25fbGVuZ3RoID0gc2VjdGlvbi5sZW5ndGg7
CisgICAgICB9KTsKKyAgICAgIGZvciAobGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsKKyAg
ICAgICAgZnVuYy5ib2R5X29mZnNldCArPSBiaW5hcnkubGVuZ3RoIC0gc2VjdGlvbl9sZW5ndGg7
CisgICAgICB9CisgICAgfQorCisgICAgLy8gQWRkIGRhdGEgc2VnbWVudHMuCisgICAgaWYgKHdh
c20uZGF0YV9zZWdtZW50cy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdl
bWl0dGluZyBkYXRhIHNlZ21lbnRzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5
LmVtaXRfc2VjdGlvbihrRGF0YVNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2Vj
dGlvbi5lbWl0X3UzMnYod2FzbS5kYXRhX3NlZ21lbnRzLmxlbmd0aCk7CisgICAgICAgIGZvciAo
bGV0IHNlZyBvZiB3YXNtLmRhdGFfc2VnbWVudHMpIHsKKyAgICAgICAgICBpZiAoc2VnLmlzX2Fj
dGl2ZSkgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDApOyAgLy8gbGluZWFyIG1lbW9y
eSBpbmRleCAwIC8gZmxhZ3MKKyAgICAgICAgICAgIGlmIChzZWcuaXNfZ2xvYmFsKSB7CisgICAg
ICAgICAgICAgIC8vIGluaXRpYWxpemVyIGlzIGEgZ2xvYmFsIHZhcmlhYmxlCisgICAgICAgICAg
ICAgIHNlY3Rpb24uZW1pdF91OChrRXhwckdsb2JhbEdldCk7CisgICAgICAgICAgICAgIHNlY3Rp
b24uZW1pdF91MzJ2KHNlZy5hZGRyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgIC8vIGluaXRpYWxpemVyIGlzIGEgY29uc3RhbnQKKyAgICAgICAgICAgICAgc2VjdGlvbi5l
bWl0X3U4KGtFeHBySTMyQ29uc3QpOworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihz
ZWcuYWRkcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0V4
cHJFbmQpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgo
a1Bhc3NpdmUpOyAgLy8gZmxhZ3MKKyAgICAgICAgICB9CisgICAgICAgICAgc2VjdGlvbi5lbWl0
X3UzMnYoc2VnLmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfYnl0ZXMoc2Vn
LmRhdGEpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgYW55IGV4
cGxpY2l0bHkgYWRkZWQgc2VjdGlvbnMKKyAgICBmb3IgKGxldCBleHAgb2Ygd2FzbS5leHBsaWNp
dCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgZXhwbGljaXQgQCAnICsgYmlu
YXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9ieXRlcyhleHApOworICAgIH0KKworICAg
IC8vIEFkZCBuYW1lcy4KKyAgICBsZXQgbnVtX2Z1bmN0aW9uX25hbWVzID0gMDsKKyAgICBsZXQg
bnVtX2Z1bmN0aW9uc193aXRoX2xvY2FsX25hbWVzID0gMDsKKyAgICBmb3IgKGxldCBmdW5jIG9m
IHdhc20uZnVuY3Rpb25zKSB7CisgICAgICBpZiAoZnVuYy5uYW1lICE9PSB1bmRlZmluZWQpICsr
bnVtX2Z1bmN0aW9uX25hbWVzOworICAgICAgaWYgKGZ1bmMubnVtTG9jYWxOYW1lcygpID4gMCkg
KytudW1fZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFtZXM7CisgICAgfQorICAgIGlmIChudW1fZnVu
Y3Rpb25fbmFtZXMgPiAwIHx8IG51bV9mdW5jdGlvbnNfd2l0aF9sb2NhbF9uYW1lcyA+IDAgfHwK
KyAgICAgICAgd2FzbS5uYW1lICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJp
bnQoJ2VtaXR0aW5nIG5hbWVzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVt
aXRfc2VjdGlvbihrVW5rbm93blNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2Vj
dGlvbi5lbWl0X3N0cmluZygnbmFtZScpOworICAgICAgICAvLyBFbWl0IG1vZHVsZSBuYW1lLgor
ICAgICAgICBpZiAod2FzbS5uYW1lICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICBzZWN0aW9u
LmVtaXRfc2VjdGlvbihrTW9kdWxlTmFtZUNvZGUsIG5hbWVfc2VjdGlvbiA9PiB7CisgICAgICAg
ICAgICBuYW1lX3NlY3Rpb24uZW1pdF9zdHJpbmcod2FzbS5uYW1lKTsKKyAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgICAgICAvLyBFbWl0IGZ1bmN0aW9uIG5hbWVzLgorICAgICAgICBpZiAo
bnVtX2Z1bmN0aW9uX25hbWVzID4gMCkgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF9zZWN0aW9u
KGtGdW5jdGlvbk5hbWVzQ29kZSwgbmFtZV9zZWN0aW9uID0+IHsKKyAgICAgICAgICAgIG5hbWVf
c2VjdGlvbi5lbWl0X3UzMnYobnVtX2Z1bmN0aW9uX25hbWVzKTsKKyAgICAgICAgICAgIGZvciAo
bGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsKKyAgICAgICAgICAgICAgaWYgKGZ1bmMubmFt
ZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgbmFtZV9zZWN0aW9uLmVt
aXRfdTMydihmdW5jLmluZGV4KTsKKyAgICAgICAgICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfc3Ry
aW5nKGZ1bmMubmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICAgICAgLy8gRW1pdCBsb2NhbCBuYW1lcy4KKyAgICAgICAgaWYgKG51bV9mdW5jdGlvbnNf
d2l0aF9sb2NhbF9uYW1lcyA+IDApIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfc2VjdGlvbihr
TG9jYWxOYW1lc0NvZGUsIG5hbWVfc2VjdGlvbiA9PiB7CisgICAgICAgICAgICBuYW1lX3NlY3Rp
b24uZW1pdF91MzJ2KG51bV9mdW5jdGlvbnNfd2l0aF9sb2NhbF9uYW1lcyk7CisgICAgICAgICAg
ICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAgICAgICAgICAgIGlmIChm
dW5jLm51bUxvY2FsTmFtZXMoKSA9PSAwKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgbmFtZV9z
ZWN0aW9uLmVtaXRfdTMydihmdW5jLmluZGV4KTsKKyAgICAgICAgICAgICAgbmFtZV9zZWN0aW9u
LmVtaXRfdTMydihmdW5jLm51bUxvY2FsTmFtZXMoKSk7CisgICAgICAgICAgICAgIGxldCBuYW1l
X2luZGV4ID0gMDsKKyAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmdW5jLmxvY2Fs
X25hbWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jLmxv
Y2FsX25hbWVzW2ldID09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAgICAgICBuYW1lX3NlY3Rp
b24uZW1pdF91MzJ2KG5hbWVfaW5kZXgpOworICAgICAgICAgICAgICAgICAgbmFtZV9zZWN0aW9u
LmVtaXRfc3RyaW5nKGZ1bmMubG9jYWxfbmFtZXNbaV0pOworICAgICAgICAgICAgICAgICAgbmFt
ZV9pbmRleCsrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBu
YW1lX2luZGV4ICs9IGZ1bmMubG9jYWxfbmFtZXNbaV07CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBiaW5hcnkudHJ1bmNfYnVmZmVyKCk7CisgIH0K
KworICB0b0FycmF5KGRlYnVnID0gZmFsc2UpIHsKKyAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlz
LnRvQnVmZmVyKGRlYnVnKSk7CisgIH0KKworICBpbnN0YW50aWF0ZShmZmkpIHsKKyAgICBsZXQg
bW9kdWxlID0gdGhpcy50b01vZHVsZSgpOworICAgIGxldCBpbnN0YW5jZSA9IG5ldyBXZWJBc3Nl
bWJseS5JbnN0YW5jZShtb2R1bGUsIGZmaSk7CisgICAgcmV0dXJuIGluc3RhbmNlOworICB9CisK
KyAgYXN5bmNJbnN0YW50aWF0ZShmZmkpIHsKKyAgICByZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFu
dGlhdGUodGhpcy50b0J1ZmZlcigpLCBmZmkpCisgICAgICAgIC50aGVuKCh7bW9kdWxlLCBpbnN0
YW5jZX0pID0+IGluc3RhbmNlKTsKKyAgfQorCisgIHRvTW9kdWxlKGRlYnVnID0gZmFsc2UpIHsK
KyAgICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSh0aGlzLnRvQnVmZmVyKGRlYnVnKSk7
CisgIH0KK30KKworZnVuY3Rpb24gd2FzbVNpZ25lZExlYih2YWwsIG1heF9sZW4gPSA1KSB7Cisg
IGxldCByZXMgPSBbXTsKKyAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhfbGVuOyArK2kpIHsKKyAg
ICBsZXQgdiA9IHZhbCAmIDB4N2Y7CisgICAgLy8gSWYge3Z9IHNpZ24tZXh0ZW5kZWQgZnJvbSA3
IHRvIDMyIGJpdHMgaXMgZXF1YWwgdG8gdmFsLCB3ZSBhcmUgZG9uZS4KKyAgICBpZiAoKCh2IDw8
IDI1KSA+PiAyNSkgPT0gdmFsKSB7CisgICAgICByZXMucHVzaCh2KTsKKyAgICAgIHJldHVybiBy
ZXM7CisgICAgfQorICAgIHJlcy5wdXNoKHYgfCAweDgwKTsKKyAgICB2YWwgPSB2YWwgPj4gNzsK
KyAgfQorICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAnTGViIHZhbHVlIDwnICsgdmFsICsgJz4g
ZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAnICsgbWF4X2xlbik7Cit9CisKK2Z1bmN0aW9uIHdh
c21VbnNpZ25lZExlYih2YWwsIG1heF9sZW4gPSA1KSB7CisgIGxldCByZXMgPSBbXTsKKyAgZm9y
IChsZXQgaSA9IDA7IGkgPCBtYXhfbGVuOyArK2kpIHsKKyAgICBsZXQgdiA9IHZhbCAmIDB4N2Y7
CisgICAgaWYgKHYgPT0gdmFsKSB7CisgICAgICByZXMucHVzaCh2KTsKKyAgICAgIHJldHVybiBy
ZXM7CisgICAgfQorICAgIHJlcy5wdXNoKHYgfCAweDgwKTsKKyAgICB2YWwgPSB2YWwgPj4+IDc7
CisgIH0KKyAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgJ0xlYiB2YWx1ZSA8JyArIHZhbCArICc+
IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJyArIG1heF9sZW4pOworfQorCitmdW5jdGlvbiB3
YXNtSTMyQ29uc3QodmFsKSB7CisgIHJldHVybiBba0V4cHJJMzJDb25zdCwgLi4ud2FzbVNpZ25l
ZExlYih2YWwsIDUpXTsKK30KKworLy8gTm90ZTogU2luY2Uge3ZhbH0gaXMgYSBKUyBudW1iZXIs
IHRoZSBnZW5lcmF0ZWQgY29uc3RhbnQgb25seSBoYXMgNTMgYml0cyBvZgorLy8gcHJlY2lzaW9u
LgorZnVuY3Rpb24gd2FzbUk2NENvbnN0KHZhbCkgeworICByZXR1cm4gW2tFeHBySTY0Q29uc3Qs
IC4uLndhc21TaWduZWRMZWIodmFsLCAxMCldOworfQorCitmdW5jdGlvbiB3YXNtRjMyQ29uc3Qo
ZikgeworICAvLyBXcml0ZSBpbiBsaXR0bGUtZW5kaWFuIG9yZGVyIGF0IG9mZnNldCAwLgorICBk
YXRhX3ZpZXcuc2V0RmxvYXQzMigwLCBmLCB0cnVlKTsKKyAgcmV0dXJuIFsKKyAgICBrRXhwckYz
MkNvbnN0LCBieXRlX3ZpZXdbMF0sIGJ5dGVfdmlld1sxXSwgYnl0ZV92aWV3WzJdLCBieXRlX3Zp
ZXdbM10KKyAgXTsKK30KKworZnVuY3Rpb24gd2FzbUY2NENvbnN0KGYpIHsKKyAgLy8gV3JpdGUg
aW4gbGl0dGxlLWVuZGlhbiBvcmRlciBhdCBvZmZzZXQgMC4KKyAgZGF0YV92aWV3LnNldEZsb2F0
NjQoMCwgZiwgdHJ1ZSk7CisgIHJldHVybiBbCisgICAga0V4cHJGNjRDb25zdCwgYnl0ZV92aWV3
WzBdLCBieXRlX3ZpZXdbMV0sIGJ5dGVfdmlld1syXSwgYnl0ZV92aWV3WzNdLAorICAgIGJ5dGVf
dmlld1s0XSwgYnl0ZV92aWV3WzVdLCBieXRlX3ZpZXdbNl0sIGJ5dGVfdmlld1s3XQorICBdOwor
fQorCitmdW5jdGlvbiB3YXNtUzEyOENvbnN0KGYpIHsKKyAgLy8gV3JpdGUgaW4gbGl0dGxlLWVu
ZGlhbiBvcmRlciBhdCBvZmZzZXQgMC4KKyAgcmV0dXJuIFtrU2ltZFByZWZpeCwga0V4cHJTMTI4
Q29uc3QsIC4uLmZdOworfQorCitmdW5jdGlvbiBnZXRPcGNvZGVOYW1lKG9wY29kZSkgeworICBy
ZXR1cm4gZ2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVzPy5bb3Bjb2RlXSA/PyAndW5rbm93bic7
Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vd2FzbS5qc29uIGIvSlNUZXN0cy93YXNtL3dh
c20uanNvbgppbmRleCA0ZjhkZDllM2QyMTM0MzUwMDAwMDZlMjQxNDZiMDE5NGM5YWM4OGYxLi45
ZDIyNWU0ZTgyMjQ5NjYwNDQ0ZmY0MWFlYmJhMjdjNjRjNzZlZWYxIDEwMDY0NAotLS0gYS9KU1Rl
c3RzL3dhc20vd2FzbS5qc29uCisrKyBiL0pTVGVzdHMvd2FzbS93YXNtLmpzb24KQEAgLTIzLDM0
ICsyMywzOCBAQAogICAgICJibG9ja190eXBlIjogWyJpMzIiLCAiaTY0IiwgImYzMiIsICJmNjQi
LCAidm9pZCIsICJleHRlcm5yZWYiLCAiZnVuY3JlZiJdLAogICAgICJyZWZfdHlwZSI6IFsiZnVu
Y3JlZiIsICJleHRlcm5yZWYiLCAidHlwZV9pZHgiXSwKICAgICAiZXh0ZXJuYWxfa2luZCI6IHsK
LSAgICAgICAgIkZ1bmN0aW9uIjogeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDAgfSwKLSAg
ICAgICAgIlRhYmxlIjogICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDEgfSwKLSAgICAg
ICAgIk1lbW9yeSI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDIgfSwKLSAgICAgICAg
Ikdsb2JhbCI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDMgfQorICAgICAgICAiRnVu
Y3Rpb24iOiAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMCB9LAorICAgICAgICAiVGFi
bGUiOiAgICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMSB9LAorICAgICAgICAiTWVt
b3J5IjogICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMiB9LAorICAgICAgICAiR2xv
YmFsIjogICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMyB9LAorICAgICAgICAiRXhj
ZXB0aW9uIjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogNCB9CiAgICAgfSwKICAgICAi
c2VjdGlvbiIgOiB7Ci0gICAgICAgICJUeXBlIjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAgMSwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIHNpZ25hdHVyZSBkZWNsYXJhdGlv
bnMiIH0sCi0gICAgICAgICJJbXBvcnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAgMiwgImRlc2NyaXB0aW9uIjogIkltcG9ydCBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJG
dW5jdGlvbiI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMywgImRlc2NyaXB0aW9u
IjogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAgIlRhYmxlIjogICAgeyAidHlw
ZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA0LCAiZGVzY3JpcHRpb24iOiAiSW5kaXJlY3QgZnVu
Y3Rpb24gdGFibGUgYW5kIG90aGVyIHRhYmxlcyIgfSwKLSAgICAgICAgIk1lbW9yeSI6ICAgeyAi
dHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA1LCAiZGVzY3JpcHRpb24iOiAiTWVtb3J5IGF0
dHJpYnV0ZXMiIH0sCi0gICAgICAgICJHbG9iYWwiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAgNiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlvbnMiIH0sCi0gICAg
ICAgICJFeHBvcnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNywgImRlc2Ny
aXB0aW9uIjogIkV4cG9ydHMiIH0sCi0gICAgICAgICJTdGFydCI6ICAgIHsgInR5cGUiOiAidmFy
dWludDciLCAidmFsdWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IGZ1bmN0aW9uIGRlY2xh
cmF0aW9uIiB9LAotICAgICAgICAiRWxlbWVudCI6ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZh
bHVlIjogIDksICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9uIiB9LAotICAgICAgICAi
Q29kZSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTAsICJkZXNjcmlwdGlv
biI6ICJGdW5jdGlvbiBib2RpZXMgKGNvZGUpIiB9LAotICAgICAgICAiRGF0YSI6ICAgICB7ICJ0
eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlwdGlvbiI6ICJEYXRhIHNlZ21l
bnRzIiB9CisgICAgICAgICJUeXBlIjogICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogIDEsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBzaWduYXR1cmUgZGVjbGFyYXRpb25zIiB9
LAorICAgICAgICAiSW1wb3J0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAy
LCAiZGVzY3JpcHRpb24iOiAiSW1wb3J0IGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIkZ1bmN0
aW9uIjogIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMywgImRlc2NyaXB0aW9uIjog
IkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIlRhYmxlIjogICAgIHsgInR5cGUi
OiAidmFydWludDciLCAidmFsdWUiOiAgNCwgImRlc2NyaXB0aW9uIjogIkluZGlyZWN0IGZ1bmN0
aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMiIH0sCisgICAgICAgICJNZW1vcnkiOiAgICB7ICJ0
eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDUsICJkZXNjcmlwdGlvbiI6ICJNZW1vcnkgYXR0
cmlidXRlcyIgfSwKKyAgICAgICAgIkV4Y2VwdGlvbiI6IHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAxMywgImRlc2NyaXB0aW9uIjogIkV4Y2VwdGlvbiBkZWNsYXJhdGlvbnMiIH0sCisg
ICAgICAgICJHbG9iYWwiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDYsICJk
ZXNjcmlwdGlvbiI6ICJHbG9iYWwgZGVjbGFyYXRpb25zIiB9LAorICAgICAgICAiRXhwb3J0Ijog
ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA3LCAiZGVzY3JpcHRpb24iOiAiRXhw
b3J0cyIgfSwKKyAgICAgICAgIlN0YXJ0IjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFs
dWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIiB9LAor
ICAgICAgICAiRWxlbWVudCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA5LCAi
ZGVzY3JpcHRpb24iOiAiRWxlbWVudHMgc2VjdGlvbiIgfSwKKyAgICAgICAgIkNvZGUiOiAgICAg
IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMCwgImRlc2NyaXB0aW9uIjogIkZ1bmN0
aW9uIGJvZGllcyAoY29kZSkiIH0sCisgICAgICAgICJEYXRhIjogICAgICB7ICJ0eXBlIjogInZh
cnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlwdGlvbiI6ICJEYXRhIHNlZ21lbnRzIiB9LAor
ICAgICAgICAiRGF0YUNvdW50IjogeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEyLCAi
ZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIGRhdGEgc2VnbWVudHMiIH0KICAgICB9LAogICAgICJv
cGNvZGUiOiB7CiAgICAgICAgICJ1bnJlYWNoYWJsZSI6ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
Y29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMCwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAidHJhcCBpbW1lZGlhdGVseSIgfSwKKyAgICAgICAgIm5vcCI6ICAgICAgICAg
ICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAxLCAicmV0dXJu
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJubyBvcGVyYXRpb24iIH0sCiAgICAg
ICAgICJibG9jayI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2
YWx1ZSI6ICAgMiwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAi
cGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjog
W3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVn
aW4gYSBzZXF1ZW5jZSBvZiBleHByZXNzaW9ucywgeWllbGRpbmcgMCBvciAxIHZhbHVlcyIgfSwK
ICAgICAgICAgImxvb3AiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwg
ICAgInZhbHVlIjogICAzLCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAg
ICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlh
dGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJiZWdpbiBhIGJsb2NrIHdoaWNoIGNhbiBhbHNvIGZvcm0gY29udHJvbCBmbG93IGxvb3BzIiB9
LAogICAgICAgICAiaWYiOiAgICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wi
LCAgICAidmFsdWUiOiAgIDQsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAg
ICAgICAgInBhcmFtZXRlciI6IFsiYm9vbCJdLCAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogImJlZ2luIGlmIGV4cHJlc3Npb24iIH0sCiAgICAgICAgICJlbHNlIjogICAgICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNSwgInJldHVybiI6IFsi
Y29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gZWxzZSBleHByZXNzaW9uIG9mIGlm
IiB9LAotICAgICAgICAic2VsZWN0IjogICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRy
b2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAgImlt
bWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVlcyBiYXNlZCBvbiBjb25kaXRpb24iIH0sCi0g
ICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAg
ICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAgICAiaW1tZWRpYXRl
IjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291bnQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
bnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldCB0eXBlcyB2ZWN0b3IifSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJu
YW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0eXBlIjogInZhbHVlX3R5cGUqIiwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0YXJnZXQg
dHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Ygc2VsZWN0IGluc3RydWN0aW9uIn1dLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRo
ZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRoIHRoZSBhbm5vdGF0aW9uIGZvciByZXN1bHQg
dHlwZXMiIH0sCisgICAgICAgICJ0cnkiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
Y29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNiwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAg
ICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiYmVnaW4gdHJ5IGV4cHJlc3Npb24iIH0sCisgICAgICAgICJjYXRjaCI6ICAg
ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNywgInJl
dHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4i
LCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gY2F0Y2ggZXhwcmVz
c2lvbiBvZiB0cnkiIH0sCisgICAgICAgICJ0aHJvdyI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdv
cnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgOCwgInJldHVybiI6IFsiY29udHJvbCJdLCAg
ICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4iLCAidHlwZSI6ICJ2YXJ1aW50MzIi
fV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAidGhyb3cgZXhjZXB0aW9uIiB9LAorICAgICAgICAicmV0aHJvdyI6
ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDksICJy
ZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVs
YXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInJldGhyb3cgdGhlIGV4Y2Vw
dGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayIgfSwKICAgICAgICAgImJyIjogICAgICAgICAg
ICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDEyLCAicmV0dXJu
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZl
X2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJicmVhayB0aGF0IHRhcmdldHMgYW4g
b3V0ZXIgbmVzdGVkIGJsb2NrIiB9LAogICAgICAgICAiYnJfaWYiOiAgICAgICAgICAgICAgIHsg
ImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTMsICJyZXR1cm4iOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAi
dHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogImNvbmRpdGlvbmFsIGJyZWFrIHRoYXQgdGFyZ2V0cyBh
biBvdXRlciBuZXN0ZWQgYmxvY2siIH0sCiAgICAgICAgICJicl90YWJsZSI6ICAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxNCwgInJldHVybiI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfY291bnQiLCAg
ICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdl
dF90YWJsZSJ9LApAQCAtNTgsOCArNjIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogImRlZmF1bHRfdGFy
Z2V0IiwgInR5cGUiOiAidmFydWludDMyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhbiBvdXRlciBibG9jayBvciBsb29wIHRv
IHdoaWNoIHRvIGJyZWFrIGluIHRoZSBkZWZhdWx0IGNhc2UifV0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYnJhbmNoIHRhYmxlIGNv
bnRyb2wgZmxvdyBjb25zdHJ1Y3QiIH0sCiAgICAgICAgICJyZXR1cm4iOiAgICAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxNSwgInJldHVybiI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAicmV0dXJuIHplcm8gb3Igb25lIHZhbHVlIGZyb20g
dGhpcyBmdW5jdGlvbiIgfSwKKyAgICAgICAgImRlbGVnYXRlIjogICAgICAgICAgICB7ICJjYXRl
Z29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI0LCAicmV0dXJuIjogWyJjb250cm9sIl0s
ICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2RlcHRoIiwgInR5cGUi
OiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJkZWxlZ2F0ZSB0byBhIHBhcmVudCB0cnkgYmxvY2siIH0sCisg
ICAgICAgICJjYXRjaF9hbGwiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAg
ICJ2YWx1ZSI6ICAyNSwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAg
ICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRl
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
Y2F0Y2ggZXhjZXB0aW9ucyByZWdhcmRsZXNzIG9mIHRhZyIgfSwKICAgICAgICAgImRyb3AiOiAg
ICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI2LCAi
cmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBb
ImFueSJdLCAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJpZ25vcmUgdmFsdWUiIH0s
Ci0gICAgICAgICJub3AiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIs
ICAgICJ2YWx1ZSI6ICAgMSwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRp
YXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAibm8gb3BlcmF0aW9uIiB9LAorICAgICAgICAic2VsZWN0IjogICAgICAgICAgICAgIHsgImNh
dGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4iOiBbInByZXYiXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9v
bCJdLCAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVlcyBiYXNlZCBvbiBj
b25kaXRpb24iIH0sCisgICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAgeyAiY2F0ZWdvcnki
OiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJldiJdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAg
ICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291bnQiLCAidHlwZSI6
ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldCB0eXBlcyB2ZWN0
b3IifSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyJuYW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0eXBlIjogInZhbHVl
X3R5cGUqIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJ0YXJnZXQgdHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Ygc2VsZWN0IGluc3Ry
dWN0aW9uIn1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogInRoZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRoIHRoZSBhbm5vdGF0
aW9uIGZvciByZXN1bHQgdHlwZXMiIH0sCiAgICAgICAgICJlbmQiOiAgICAgICAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMSwgInJldHVybiI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZW5kIGEgYmxvY2ssIGxvb3AsIG9yIGlmIiB9LAog
ICAgICAgICAiaTMyLmNvbnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAg
ICAidmFsdWUiOiAgNjUsICJyZXR1cm4iOiBbImkzMiJdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0
ZSI6IFt7Im5hbWUiOiAidmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJpbnQzMiJ9XSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
ImEgY29uc3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTMyIiB9LAogICAgICAgICAiaTY0LmNv
bnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAidmFsdWUiOiAgNjYs
ICJyZXR1cm4iOiBbImk2NCJdLCAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6
IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAi
dmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJpbnQ2NCJ9XSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImEgY29uc3RhbnQgdmFs
dWUgaW50ZXJwcmV0ZWQgYXMgaTY0IiB9LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440368</attachid>
            <date>2021-10-06 08:07:29 -0700</date>
            <delta_ts>2021-10-06 08:25:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229681-20211006080727.patch</filename>
            <type>text/plain</type>
            <size>706149</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
YzUyN2ZiNmZlZjIwNjViZWEzODc0OGJjOGE0MWI3MWQzZjljNmY5Li41NmIyNDM4ZTM3NzI4NGI2
MzU5MTg2NmFlZWNjYWE1Nzg4NTk5MjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NTAgQEAKKzIwMjEtMDktMTYgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+IGFuZCBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCB0aGUgV2ViQXNzZW1ibHkgZXhjZXB0aW9uIGhhbmRsaW5nIHByb3Bvc2FsCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk2ODEKKyAg
ICAgICAgPHJkYXI6Ly84MTYwMzM4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlv
biBoYW5kbGluZyBwcm9wb3NhbCwgYXMgcGVyCisgICAgICAgIHRoZSBXSVAgc3BlYzogaHR0cHM6
Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2V4Y2VwdGlvbi1oYW5kbGluZworCisgICAgICAgIFRo
ZSBwcm9wb3NhbCBpbmNsdWRlcyA2IG5ldyBpbnN0cnVjdGlvbnM6IHRyeSwgY2F0Y2gsIGNhdGNo
X2FsbCwKKyAgICAgICAgZGVsZWdhdGUsIHRocm93IGFuZCByZXRocm93LiBBbGwgdGhlIGluc3Ry
dWN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5CisgICAgICAgIHRoZSBMTEludCBhbmQgQjMgZ2VuZXJh
dG9ycywgYnV0IG5vdCB5ZXQgc3VwcG9ydGVkIGluIEFpci4gQW55CisgICAgICAgIGZ1bmN0aW9u
cyB1c2UgZXhjZXB0aW9ucyB3aWxsIHVzZSBCMyBpbiBCQlEuCisKKyAgICAgICAgQSBmZXcgaW1w
b3J0YW50IG5vdGVzIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgLSBJbiBCMywg
c2luY2Ugd2UgY2FuIG5vdyBoYXZlIG11bHRpcGxlIGVudHJ5cG9pbnRzIChvbmUgZm9yIHRoZQor
ICAgICAgICBmdW5jdGlvbiBlbnRyeSArIDEgZm9yIGVhY2ggY2F0Y2gvY2F0Y2hfYWxsKSwgd2Ug
Y2FuIG5vIGxvbmdlciBqdXN0CisgICAgICAgIHJlcGxhY2UgZXZlcnkgdmFsdWUgaW4gdGhlIHN0
YWNrIHdpdGggYSBQaGkgd2hlbiB3ZSBmaW5kIGEgbmV3CisgICAgICAgIGVudHJ5cG9pbnQuIFRo
aXMgd29ya2VkIHNvIGZhciBiZWNhdXNlIG9mIHRoZSBhc3N1bXB0aW9uIHRoYXQgYW55CisgICAg
ICAgIGJsb2NrIGNvdWxkbid0IGFjY2VzcyBpdHMgZW5jbG9zaW5nIHN0YWNrLCBhbmQgc2luY2Ug
dGhlIGVuY2xvc2luZyBzdGFjaworICAgICAgICB3b3VsZCBvbmx5IGJlIGFjY2Vzc2libGUgd2hl
biB3ZSBleGl0ZWQgdGhlIGN1cnJlbnQgYmxvY2ssIHdlIGFkZGVkIFBoaXMKKyAgICAgICAgYXQg
dGhlIGVuZCBvZiBlYWNoIGJsb2NrIHdoZW4gd2UgaGFkIGEgbmV3IGVudHJ5cG9pbnQuIE5vdywg
c2luY2Ugd2UgaGF2ZSB0byBjYXB0dXJlIGFsbAorICAgICAgICBsaXZlIHZhbHVlcyBhdCBhbnkg
cG9pbnQgdGhhdCBtaWdodCB0aHJvdyAoY2FsbHMsIHRocm93IGFuZCByZXRocm93KSwKKyAgICAg
ICAgd2UgYnJlYWsgdGhhdCBhc3N1bXB0aW9uLiBUbyBzaW1wbGlmeSBhbGwgdGhlIHBvc3NpYmxl
IHdheXMgd2UgbWlnaHQKKyAgICAgICAgaGF2ZSB0byBtZXJnZSB0aGUgc3RhdGUgZnJvbSBtdWx0
aXBsZSBlbnRyeXBvaW50cyB3ZSBub3cgdXNlIEIzCisgICAgICAgIFZhcmlhYmxlcyB0byByZXBy
ZXNlbnQgc3RhY2sgc2xvdHMuCisgICAgICAgIC0gU29tZSBleHRyYSBpbmZvcm1hdGlvbiBpcyBy
ZXF1aXJlZCB0byBiZSBhYmxlIHRvIHByb3Blcmx5IHJlc3RvcmUKKyAgICAgICAgdGhlIHN0YXRl
IHdoZW4gY2F0Y2hpbmcgYW4gZXhjZXB0aW9uOgorICAgICAgICAgICAgLSBXZSBhZGRlZCBhIGZp
ZWxkIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2guIFRoaXMgZmllbGQgaXMgbmVjZXNzYXJ5CisgICAg
ICAgICAgICBiZWNhdXNlIHdoZW5ldmVyIHdlIHRocm93LCB3ZSBtaWdodCBlbmQgdXAgaW4gSmF2
YVNjcmlwdCwgd2hpY2gKKyAgICAgICAgICAgIGFzc3VtZXMgdGhlIGNhbGxlZSBpcyBhIGNlbGwg
YW5kIHVzZXMgaXQgdG8gZ2V0IHRoZSBWTSBhbmQgcmVzdG9yZQorICAgICAgICAgICAgY2FsbGVl
IHNhdmVzLiBUaGUgaXNzdWUgaXMgd2hlbiBjYXRjaGluZyBleGNlcHRpb25zIGluIHdhc20gd2UK
KyAgICAgICAgICAgIHN0aWxsIG5lZWQgdGhlIG9yaWdpbmFsIGNhbGxlZSwgYW5kIGlmIHRocm93
aW5nIGFuZCBjYXRjaGluZyBmcm9tCisgICAgICAgICAgICB0aGUgc2FtZSBmcmFtZSwgdGhhdCBj
YWxsIGZyYW1lIHNsb3QgaGFzIG5vdyBiZWVuIG92ZXJ3cml0dGVuLCBzbworICAgICAgICAgICAg
d2Ugc3RvcmUgaXRzIG9yaWdpbmFsIHZhbHVlIGluIHRoZSBWTSBmaWVsZC4KKyAgICAgICAgICAg
IC0gV2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZSBjdXJyZW50IFdhc20gSW5zdGFuY2UgaW50byB0
aGUgY2FsbAorICAgICAgICAgICAgZnJhbWUncyBzbG90IGZvciB0aGUgYHRoaXNgIGFyZ3VtZW50
LiBUaGUgaW5zdGFuY2UgaXMgdXNlZCBib3RoIGJ5CisgICAgICAgICAgICB0aGUgdW53aW5kZXIs
IHRvIGNoZWNrIGlmIHRoZSBleGNlcHRpb24gYmVpbmcgdGhyb3duIG1hdGNoZXMgdGhlCisgICAg
ICAgICAgICBleGNlcHRpb25zIGhhbmRsZWQgYnkgY2F0Y2ggY2FuZGlkYXRlcywgYW5kIGJ5IHRo
ZSBjYXRjaCBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgICAgIHdoaWNoIGlzIG5lY2Vzc2FyeSB3
aGVuIHRocm93aW5nIGZyb20gYSBjcm9zcyBpbnN0YW5jZSBjYWxsIHdoZXJlIGJvdGgKKyAgICAg
ICAgICAgIHRoZSBjYWxsZWUgc2F2ZSBvciBUTFMgd2lsbCBoYXZlIHRoZSBjYWxsZWUncyBpbnN0
YW5jZS4KKyAgICAgICAgICAgIC0gV2Ugc3RvcmUgdGhlIGN1cnJlbnQgb3Bjb2RlIGZvciB0aGUg
bGxpbnQsIG9yIHRoZQorICAgICAgICAgICAgY2FsbCBzaXRlIGluZGV4IGZvciBCMywgaW4gdGhl
IGNhbGwgZnJhbWUgc2xvdCBmb3IgdGhlIGFyZ3VtZW50CisgICAgICAgICAgICBjb3VudCB0YWcu
IFRoZSBjYWxsIHNpdGUgaW5kZXggaXMgdXNlZCBieSB0aGUgdW53aW5kZXIgdG8gY2hlY2sKKyAg
ICAgICAgICAgIGlmIGEgZ2l2ZW4gY2F0Y2ggY2FuIGhhbmRsZSB0aGUgZXhjZXB0aW9uIGJlaW5n
IHRocm93bi4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6Cisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9IYW5kbGVySW5mby5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6OkJhc2VJbnN0cnVj
dGlvbjo6bmFtZSBjb25zdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Omhhc2ggY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpkZWxldGVkVmFsdWUpOgorICAgICAgICAo
SlNDOjpDYWxsU2l0ZUluZGV4Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXhIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6Q2FsbFNp
dGVJbmRleEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkNhdGNoSW5mbzo6Q2F0Y2hJbmZvKToKKyAgICAgICAgKEpTQzo6
VW53aW5kRnVuY3Rvcjo6VW53aW5kRnVuY3Rvcik6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0
b3I6Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5k
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpD
YXRjaEluZm86OkNhdGNoSW5mbyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKToK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBq
aXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAg
ICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJ
VDo6Y29udmVydENhbGxlZVRvVk0pOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5oOgorICAg
ICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZVJlZik6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRX
aWRlMTZDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldFdpZGUzMkNvZGVSZWYpOgor
ICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50
Ojp3YXNtUmV0dXJuVG9UaHJvdyk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVXYXNtQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlV2FzbUNhdGNoQWxsKToKKyAgICAgICAg
KiBsbGludC9MTEludEV4Y2VwdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludE9mZnNldHNF
eHRyYWN0b3IuY3BwOgorICAgICAgICAqIGxsaW50L1dlYkFzc2VtYmx5LmFzbToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNl
OjpFcnJvckluc3RhbmNlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c2V0Q2F0Y2hhYmxlRnJvbVdhc20pOgorICAgICAg
ICAoSlNDOjpFcnJvckluc3RhbmNlOjppc0NhdGNoYWJsZUZyb21XYXNtIGNvbnN0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmNhbGxlZUZvcldhc21DYXRjaE9mZnNldCk6Cisg
ICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzVHJ5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0FueUNhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzQmxvY2spOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6Q29udHJvbERhdGEpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNUcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNBbnlDYXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpDb250cm9sRGF0YTo6aXNCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2gpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2hBbGwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6dHJ5U3Rh
cnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6dHJ5RW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGE6OnRyeURlcHRoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmNhdGNoS2luZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpleGNlcHRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6c3RhY2tTaXplIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZGlkUG9wVmFsdWVGcm9tU3RhY2sp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRTdGFja01hcCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnRha2VTdGFja21hcHMpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjp0YWtlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpwdXNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
c2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Z2Vu
ZXJhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpmaXh1cFBv
aW50ZXJQbHVzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnJlc3RvcmVX
ZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6aW5zZXJ0RW50cnlTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjppbnNlcnRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRSZWZJc051bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUYWJs
ZUdldCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkUmVmRnVuYyk6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlSW5pdCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRhYmxlQ29weSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6Omdl
dExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0
Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5RmlsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUluaXQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlDb3B5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpnZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpzZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hl
Y2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmVtaXRMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpzdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OnNhbml0aXplQXRvbWljUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNMb2FkT3ApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNMb2FkKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY1N0b3JlT3ApOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNTdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNCaW5hcnlSTVdPcCk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmF0b21pY0JpbmFyeVJNVyk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YXRvbWljTm90aWZ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6dHJ1bmNTYXR1cmF0ZWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRTZWxlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRMb29w
VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkRnJv
bVNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjb25u
ZWN0Q29udHJvbEVudHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
TG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNo
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRG
b3JFeGNlcHRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0
Y2hUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
Q2F0Y2hBbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYXRjaEFs
bFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0
Q2F0Y2hJbXBsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdh
dGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5y
ZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUaHJvdyk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbmRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEVuZFRv
VW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjcmVhdGVD
YWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENh
bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayk6CisgICAgICAgIChKU0M6Oldh
c206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVFeGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
ZW1pdENoZWNrc0Zvck1vZE9yRGl2KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1VPik6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4pOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0ej4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0
ej4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRP
cDxGNjRDb252ZXJ0VUk2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNT
RjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyVHJ1bmNTRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyVHJ1bmNVRjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0Pik6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0Pik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMy
Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNVRjMyPik6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAg
ICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpw
cmVwYXJlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBs
YW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpDYWxsZWU6OmhhbmRsZXJGb3JJbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2Fs
bGVlOjpMTEludENhbGxlZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2FsbGVlOjpsaW5r
RXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6aW5nSklUQ2Fs
bGVlOjpsaW5rRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6
aW5nSklUQ2FsbGVlOjpzdGFja21hcCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVl
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6aGFzRXhjZXB0aW9uSGFuZGxlcnMgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmZ1bmN0aW9uQ29kZUJsb2NrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6T3B0aW1pemluZ0pJVENhbGxlZTo6T3B0aW1pemluZ0pJ
VENhbGxlZSk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V2FzbUNhbGxpbmdDb252ZW50aW9uOjpjYWxsSW5mb3JtYXRpb25Gb3Ig
Y29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0eXBlVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjppc1ZhbGlkRXh0ZXJuYWxLaW5k
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVN0cmluZyk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxv
Y2s6Om51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpGdW5jdGlvbkNvZGVCbG9jazo6ZXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uQ29kZUJsb2NrOjphZGRFeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKiB3
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjppc1RyeU9yQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eGNlcHRpb25JbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20v
V2FzbUhhbmRsZXJJbmZvLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkhhbmRsZXJJ
bmZvOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmhhbmRs
ZXJGb3JJbmRleCk6CisgICAgICAgICogd2FzbS9XYXNtSGFuZGxlckluZm8uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlVubGlua2VkSGFuZGxlckluZm86OlVubGlua2VkSGFuZGxlcklu
Zm8pOgorICAgICAgICAoSlNDOjpXYXNtOjpIYW5kbGVySW5mbzo6dGFnIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmRlbGVnYXRlVGFyZ2V0IGNvbnN0KToKKyAgICAg
ICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojp+SW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmg6CisgICAgICAgIChK
U0M6Oldhc206Okluc3RhbmNlOjphZGRUYWcpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5j
ZTo6dGFnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6dHJ5Xyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6Y2F0Y2hfKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc0xvb3Ap
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmlzQmxv
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
SWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
VHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpp
c0FueUNhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xU
eXBlOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnVuaWZ5
VmFsdWVzV2l0aEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6Ondh
bGtFeHByZXNzaW9uU3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
bWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJz
ZUFuZENvbXBpbGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpMTEludEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpy
ZXBhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNh
bGxlcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRp
b25Gb3JDYWxsZWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZExvb3ApOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21MaW1pdHMuaDoKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5m
b3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmV4Y2Vw
dGlvbkluZGV4U3BhY2VTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb246OmlzSW1wb3J0ZWRFeGNlcHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25z
dCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpzaWduYXR1cmVJbmRl
eEZyb21FeGNlcHRpb25JbmRleFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlSW5mb3JtYXRpb246OmltcG9ydEV4Y2VwdGlvbkNvdW50IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmlzRGVjbGFyZWRFeGNlcHRpb24gY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6YWRkRGVjbGFyZWRFeGNlcHRp
b24pOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9X
YXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAqIHdhc20vV2FzbU9TUkVudHJ5RGF0YS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpPU1JF
bnRyeURhdGE6OnZhbHVlcyk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OmxvYWRWYWx1ZXNJbnRvQnVmZmVyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6ZG9PU1JFbnRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTik6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHdh
c20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFy
c2VyOjpwYXJzZUltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBh
cnNlRXhwb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFeGNl
cHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25zLmg6CisgICAgICAgIChKU0M6Oldh
c206OnZhbGlkYXRlT3JkZXIpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWduYXR1cmVJbmZvcm1h
dGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpzaWduYXR1
cmVGb3IpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpXQVNNX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0
aHMuaDoKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rpb25TaXplKToKKyAgICAg
ICAgKiB3YXNtL1dhc21UYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9XYXNt
VGFnLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdl
bmVyYXRvci5oLgorICAgICAgICAoSlNDOjpXYXNtOjpUYWc6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6Oldhc206OlRhZzo6cGFyYW1ldGVyQ291bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUYWc6OnBhcmFtZXRlciBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6c2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6VGFnOjpUYWcpOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5jcHA6CisgICAg
ICAgICogd2FzbS9XYXNtVGh1bmtzLmg6CisgICAgICAgICogd2FzbS9nZW5lcmF0ZVdhc21CM0lS
R2VuZXJhdG9ySW5saW5lc0hlYWRlci5weToKKyAgICAgICAgKENvZGVHZW5lcmF0b3IuZ2VuZXJh
dGVPcGNvZGUpOgorICAgICAgICAoQ29kZUdlbmVyYXRvci5tYWtlUmVzdWx0KToKKyAgICAgICAg
KENvZGVHZW5lcmF0b3IuZ2VuZXJhdGUpOgorICAgICAgICAqIHdhc20vZ2VuZXJhdGVXYXNtT3Bz
SGVhZGVyLnB5OgorICAgICAgICAodHlwZU1hY3JvaXplcik6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6SlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRp
b246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlv
bjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Z2V0
QXJnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnN1YnNwYWNlRm9y
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6dGFnIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6cGF5bG9hZCBjb25zdCk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjp0b0pTVmFsdWUpOgor
ICAgICAgICAoSlNDOjpmcm9tSlNWYWx1ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRy
eUNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwOgorICAgICAgICAo
SlNDOjpjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKToKKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eVRhZzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6SlNXZWJBc3NlbWJseVRh
Zyk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaC4K
KyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2Fz
bVRvSlMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3I6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAg
ICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OmdldEV4Y2VwdGlv
bik6CisgICAgICAgIChKU0M6OmdldFRhZyk6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1
Y3Rvcjo6Y3JlYXRlVGFnKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
OjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlUYWdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFnUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpnZXRUYWcp
OgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAq
IHdhc20vd2FzbS5qc29uOgorCiAyMDIxLTEwLTA2ICBYYW4gTMOzcGV6ICA8eGFuQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0pTQ11bMzJiaXRdIFJlbW92ZSBhIGJ1bmNoIG9mIGNvbXBpbGVyIHdh
cm5pbmdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYjMyYzMwZjExMGY2
YTI5ZTJjODE2Zjg3YzU1NmExMmZkYmUwZDZjOC4uZmNmMGQ5YjZiZGZiOGFjOGExYjMyNTU3ZDRh
MTlkMWUyZmQwMjZjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTIy
LDYgKzEyMiw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9PQkpFQ1RfTFVUX1NPVVJDRVMKICAgICB3
YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBp
bGVFcnJvckNvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJy
b3JQcm90b3R5cGUuY3BwCisgICAgd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmNwcAorICAgIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwCiAg
ICAgd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMv
V2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0xMzYsNiArMTM4LDggQEAgc2V0KEphdmFTY3JpcHRD
b3JlX09CSkVDVF9MVVRfU09VUkNFUwogICAgIHdhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3JQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3Iu
Y3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAorICAgIHdhc20v
anMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAKKyAgICB3YXNtL2pzL1dlYkFzc2VtYmx5
VGFnUHJvdG90eXBlLmNwcAogKQogCiBzZXQoSmF2YVNjcmlwdENvcmVfRlJBTUVXT1JLUwpAQCAt
NjAzLDYgKzYwNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAKICAgICBiMy9CM0NvbW1vbi5oCiAgICAgYjMvQjNUeXBlLmgKKyAgICBiMy9CM1ZhbHVl
UmVwLmgKIAogICAgIGJpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCiAgICAgYmluZGluZ3Mv
U2NyaXB0T2JqZWN0LmgKQEAgLTEyMjAsNiArMTIyNSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmgKICAgICB3YXNtL1dhc21Gb3JtYXQuaAogICAgIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
LmgKKyAgICB3YXNtL1dhc21IYW5kbGVySW5mby5oCiAgICAgd2FzbS9XYXNtSW5kZXhPck5hbWUu
aAogICAgIHdhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCiAgICAgd2FzbS9XYXNtTWVtb3J5
LmgKQEAgLTEyMjgsMTIgKzEyMzQsMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICB3YXNtL1dhc21Nb2R1bGUuaAogICAgIHdhc20vV2FzbU5hbWUu
aAogICAgIHdhc20vV2FzbU5hbWVTZWN0aW9uLmgKKyAgICB3YXNtL1dhc21PU1JFbnRyeURhdGEu
aAogICAgIHdhc20vV2FzbVBhZ2VDb3VudC5oCiAgICAgd2FzbS9XYXNtU2VjdGlvbnMuaAogICAg
IHdhc20vV2FzbVNpZ25hdHVyZS5oCiAgICAgd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuaAog
ICAgIHdhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5oCiAgICAgd2FzbS9XYXNtVGllclVwQ291bnQu
aAorICAgIHdhc20vV2FzbVZhbHVlTG9jYXRpb24uaAogCiAgICAgd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmgKICAgICB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCAy
ODg1YjUxMDE3Y2MxYWUzZDg5MmVmM2M1ZjI3YTRiMTIzNzUzODQyLi4wNmIyMTc1MTJjNmZiYzJk
ODUyNzI0YWFhNzZmYTU3OTRlM2RhZDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTk3LDYgKzE5Nyw4IEBA
ICQoUFJPSkVDVF9ESVIpL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CiAkKFBST0pFQ1Rf
RElSKS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dl
YkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNt
L2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAorJChQUk9KRUNUX0RJUikv
d2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAorJChQUk9KRUNUX0RJ
Uikvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAKICQoUFJPSkVDVF9E
SVIpL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAKICQoUFJPSkVDVF9E
SVIpL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCiAkKFBST0pFQ1RfRElS
KS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTIxMSw2ICsy
MTMsOCBAQCAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29u
c3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yUHJvdG90eXBlLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
Q29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQ
cm90b3R5cGUuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBl
LmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS93YXNtLmpzb24KICQoUFJPSkVDVF9ESVIpL3lhcnIv
Y3JlYXRlX3JlZ2V4X3RhYmxlcwogJChQUk9KRUNUX0RJUikveWFyci9nZW5lcmF0ZVlhcnJDYW5v
bmljYWxpemVVbmljb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggMmFkMjEzMWM1ODY2OWJkMDU3NWM3YWY0
MGE2YzQyN2E1OTRmNWMzZS4uY2IwNWQ4MjE2MmFkOWM0Y2ZmNjRjYTE4Y2FlYWUxODcxYmVjNmY2
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdApAQCAtODIsNiArODIsOCBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2FzbUxMSW50R2VuZXJhdG9ySW5saW5lcy5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2Fz
bU9wcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENv
cmUvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaAogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5Q29tcGls
ZUVycm9yUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaAor
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFz
c2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5s
dXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3Jl
L1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmx1dC5oCkBAIC05Niw2ICs5OCw4IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0CiAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3JQcm90b3R5cGUubHV0LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9X
ZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5sdXQu
aAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dl
YkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCmluZGV4IGVjYmNlNjdmNzhjMDAzNGMxNjZmNTBkNTg5MmE2ZjA4YzVk
YTQwZDYuLjc4OTc1NmYxMGY4YmRiODBjNTJmNGJlOTgwZjUzZjQ5MmEyZDFkNGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yMDMsNiArMjAzLDggQEAg
T0JKRUNUX0xVVF9IRUFERVJTID0gXAogICAgIFRlbXBvcmFsVGltZVpvbmVQcm90b3R5cGUubHV0
LmggXAogICAgIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggXAogICAg
IFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJs
eUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJseUV4Y2VwdGlvblBy
b3RvdHlwZS5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5sdXQuaCBc
CiAgICAgV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUubHV0LmggXAogICAgIFdlYkFzc2VtYmx5
SW5zdGFuY2VDb25zdHJ1Y3Rvci5sdXQuaCBcCkBAIC0yMTcsNiArMjE5LDggQEAgT0JKRUNUX0xV
VF9IRUFERVJTID0gXAogICAgIFdlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmx1dC5o
IFwKICAgICBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0LmggXAogICAgIFdlYkFzc2Vt
Ymx5VGFibGVQcm90b3R5cGUubHV0LmggXAorICAgIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3Iu
bHV0LmggXAorICAgIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oIFwKICMKIAogJChPQkpF
Q1RfTFVUX0hFQURFUlMpOiAlLmx1dC5oIDogJS5jcHAgJChKYXZhU2NyaXB0Q29yZSkvY3JlYXRl
X2hhc2hfdGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGMzNTU0NTBkMjRm
NjlhOGM5MThmYmQzOTA1YjQyYmNiOTUwNzkzOC4uODg4OWIxMGZmMjI3YWMxNzQ5MTVjMWFkNTcx
ZWMzMzNhN2ExY2E0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY2Myw3ICs2
NjMsNyBAQAogCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovOyB9OwogCQkwRkVDODU0MjFCREFDREFDMDA4
MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLzsg
fTsKIAkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmggKi87IH07Ci0JCTBGRUM4NTQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlUmVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oICovOyB9OworCQkwRkVDODU0
NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVSZXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xv
cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3Jpbmcu
aCAqLzsgfTsKIAkJMEZFQzg1NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckFyZy5oICovOyB9OwogCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyog
QWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLzsgfTsK
QEAgLTc5Niw2ICs3OTYsNyBAQAogCQkxNDc4Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxl
VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NkZBNUE4MTM3OEY2QjAwMDM2MjdBMyAvKiBIYW5kbGVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVB
NCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3QjgzQUEwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNo
ZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5
U2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
Qjg0NjIwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0ODUyMUQ4MjZFQUVCRkUwMEND
MUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlcklu
Zm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NDg2QThDMDI0QUJFRDQ4MDA3MzkyMkQgLyogSlNMb2NrUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NkE4QkYyNEFCRUQzQzAwNzM5
MjJEIC8qIEpTTG9ja1JlZlByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NzRBRTIx
NUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDhBN0JGMDFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5l
Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDhBN0JFRTFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2FsbEZyYW1lLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNyw2ICs4MjgsMTMg
QEAKIAkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0E5NThB
MTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDQTk1OEQxNkFCNTBGQTAw
OTM4QTA2IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNEQwMUE3NzIxRkIzNTFGMDBCQzU0RTkgLyogSlNTY3JpcHRTb3Vy
Y2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTREMDFBNzYyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCAq
LzsgfTsKKwkJMTREMDFCRTYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
RDAxQkRBMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi87
IH07CisJCTE0RDAxQkU3MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFC
REIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggKi87IH07CisJ
CTE0RDAxQkU5MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFC
REQyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggKi87
IH07CisJCTE0RDAxQkVDMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJFMDI2REVF
RjM3MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5oICovOyB9OworCQkxNEQwMUJFRDI2REVF
RjM4MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCRTEyNkRFRUYzODAwQ0FFMEQwIC8q
IEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLzsgfTsKKwkJMTREMDFCRUYyNkRFRUYzODAwQ0FF
MEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkUzMjZERUVGMzgwMENBRTBEMCAv
KiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi87IH07CisJCTE0RDAxQkY1MjZE
RUVGNTMwMENBRTBEMCAvKiBXYXNtVGFnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICov
OyB9OwogCQkxNEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDJGM0Q5MTM5RjRCRTIw
MDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9w
ZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNERGMDREOTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RTg0
RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlBMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFr
QmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTI2NCw3ICsxMjcyLDcgQEAKIAkJODYyODFFRjAyNUI2MTYwMDAwMzY3MDA0IC8qIENoZWNr
UHJpdmF0ZUJyYW5kVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODYyODFFRUYyNUI2MTYwMDAwMzY3MDA0IC8qIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudC5oICovOyB9OwogCQk4NjI4MUVGNDI1QjYxQUYwMDAzNjcwMDQgLyogQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2MjgxRUYzMjVCNjFBRjAwMDM2NzAwNCAvKiBDaGVja1ByaXZhdGVCcmFuZFN0YXR1
cy5oICovOyB9OwogCQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NjNCMjNERjBGQzYwRTYyMDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJODYzRkJDNUEyNUIw
OTNCOTAwRjZDOTMwIC8qIFdhc21WYWx1ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjNGQkM1ODI1QjA5M0I5MDBGNkM5MzAgLyogV2Fz
bVZhbHVlTG9jYXRpb24uaCAqLzsgfTsKKwkJODYzRkJDNUEyNUIwOTNCOTAwRjZDOTMwIC8qIFdh
c21WYWx1ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NjNGQkM1ODI1QjA5M0I5MDBGNkM5MzAgLyogV2FzbVZhbHVlTG9jYXRpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjVBMzBG
MTEzNTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5RSAv
KiBKU0NKU1ZhbHVlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTg2NURBMEM1MjVCODk1NzQwMDg3NTc3MiAvKiBTZXRQcml2YXRlQnJh
bmRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NjVEQTBDNDI1Qjg5NTc0MDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oICov
OyB9OwogCQk4NjVEQTBDODI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjVEQTBD
NzI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmggKi87IH07CkBAIC0x
OTM3LDcgKzE5NDUsNyBAQAogCQlFM0JGQTVEMDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJl
ZEdsb2JhbFByb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFM0JGQTVDRDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJlZEdsb2JhbFByb3Bl
cnR5LmggKi87IH07CiAJCUUzQkZEMEJDMURBRjgwOEUwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25p
cHBldFBhcmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTNCRkQwQkExREFGODA3QzAwNjVERUEyIC8qIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmgg
Ki87IH07CiAJCUUzQzI5NUREMUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5n
ZUFkYXB0aXZlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTNDMjk1REMxRUQyQ0JBQTAwRDMwMTZGIC8qIE9iamVjdFByb3BlcnR5Q2hh
bmdlQWRhcHRpdmVXYXRjaHBvaW50LmggKi87IH07Ci0JCUUzQzY5NEIzMjMwMjY4NzcwMDZGQkU0
MiAvKiBXYXNtT1NSRW50cnlEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFM0M2OTRCMTIzMDI2ODczMDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5RGF0
YS5oICovOyB9OworCQlFM0M2OTRCMzIzMDI2ODc3MDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5RGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNDNjk0
QjEyMzAyNjg3MzAwNkZCRTQyIC8qIFdhc21PU1JFbnRyeURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFM0M3M0E5MTI1QkZBNzNCMDBFRkUz
MDMgLyogV2FzbVN0cmVhbWluZ1BsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzQzczQTkwMjVCRkE3MzQwMEVGRTMwMyAvKiBXYXNtU3RyZWFtaW5n
UGxhbi5oICovOyB9OwogCQlFM0M3OUNBQjFEQjlBNERDMDBEMUVDQTQgLyogRE9NSklURWZmZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0M3OUNB
QTFEQjlBNEQ2MDBEMUVDQTQgLyogRE9NSklURWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTNDOEVENDMyM0ExREJDQjAwMTMxOTU4IC8q
IElzb0lubGluZWRIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzQzhFRDQyMjNBMURCQzUwMDEzMTk1OCAvKiBJc29JbmxpbmVkSGVh
cENlbGxUeXBlLmggKi87IH07CkBAIC0zNDYxLDYgKzM0NjksOCBAQAogCQkxNDgyQjc4QTBBNDMw
NUFCMDA1MTdDRkMgLyogQVBJQ2FzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBUElDYXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODJCN0UxMEE0MzA3
NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU09iamVjdFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDgyQjdF
MjBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNPYmplY3RSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNDg1MjFENTI2RUFFQkRGMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21IYW5kbGVySW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUhhbmRsZXJJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODZBOEJFMjRBQkVEM0IwMDczOTIyRCAvKiBK
U0xvY2tSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNMb2NrUmVmLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4NkE4QkYyNEFCRUQzQzAwNzM5MjJEIC8qIEpTTG9ja1Jl
ZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNMb2NrUmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Njb3BlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1NDQsNiArMzU1NCwyMCBAQAogCQkxNENDM0JB
MjIxMzhBMjM4MDAyRDU4QjYgLyogSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5zdHJ1Y3Rpb25TdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTREMDFBNzUyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJv
dmlkZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQwMUE3NjIxRkIzNTAzMDBCQzU0RTkg
LyogSlNTY3JpcHRTb3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdFNvdXJj
ZVByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRBMjZERUVG
MzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaDsgcGF0aCA9IGpz
L1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTREMDFCREIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFnUHJvdG90eXBl
Lmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxNEQwMUJEQzI2REVFRjM3MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJERDI2REVFRjM3MDBDQUUwRDAg
LyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaDsgcGF0aCA9IGpzL1dl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTE0RDAxQkRFMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFn
Q29uc3RydWN0b3IuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRGMjZERUVGMzcwMENBRTBEMCAv
KiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHA7IHBhdGggPSBqcy9XZWJBc3Nl
bWJseVRhZ1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAx
QkUwMjZERUVGMzcwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlUYWcuaDsgcGF0aCA9IGpzL0pTV2ViQXNz
ZW1ibHlUYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRTEyNkRFRUYz
ODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJF
MjI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJFMzI2REVFRjM4MDBDQUUwRDAg
LyogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmg7IHBhdGggPSBq
cy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0RDAxQkU0MjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlUYWcu
Y3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseVRhZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0RDAxQkU1MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlv
bkNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlF
eGNlcHRpb25Db25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0
RDAxQkYyMjZERUVGNTIwMENBRTBEMCAvKiBXYXNtVGFnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UYWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRTcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUgLyogQ0xvb3BTdGFjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTG9vcFN0YWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0RDg1Nzc0MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gdGVzdGFwaS5qczsgcGF0aCA9
IEFQSS90ZXN0cy90ZXN0YXBpLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE1
NSw2ICs3MTc5LDggQEAKIAkJCQkxNDg3Q0UxNjIzNzc0MTAwMDA0NDQyOUMgLyogV2FzbUdlbmVy
YXRvclRyYWl0cy5oICovLAogCQkJCUUzODM1MDA4MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNtR2xv
YmFsLmNwcCAqLywKIAkJCQlFMzgzNTAwOTIzOTBEOTM3MDAzNjMxNkQgLyogV2FzbUdsb2JhbC5o
ICovLAorCQkJCTE0ODUyMUQ1MjZFQUVCREYwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uY3Bw
ICovLAorCQkJCTE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCAq
LywKIAkJCQlBRDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmNwcCAq
LywKIAkJCQlBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi8s
CiAJCQkJQUQ1QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8sCkBA
IC03MjEyLDYgKzcyMzgsOCBAQAogCQkJCUUzQzczQTkwMjVCRkE3MzQwMEVGRTMwMyAvKiBXYXNt
U3RyZWFtaW5nUGxhbi5oICovLAogCQkJCUFENUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUu
aCAqLywKKwkJCQkxNEQwMUJGMjI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5jcHAgKi8sCisJ
CQkJMTREMDFCRjMyNkRFRUY1MjAwQ0FFMEQwIC8qIFdhc21UYWcuaCAqLywKIAkJCQk1MjUwRDJD
RjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCiAJCQkJNTI1MEQyRDAxRThE
QTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLywKIAkJCQlFM0M2OTRCMjIzMDI2ODc0MDA2
RkJFNDIgLyogV2FzbVRpZXJVcENvdW50LmNwcCAqLywKQEAgLTkwOTcsNiArOTEyNSw4IEBACiAJ
CQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAq
LywKIAkJCQlBRDJGQ0JBNjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvci5jcHAgKi8sCiAJCQkJQUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3IuaCAqLywKKwkJCQkxNEQwMUJEQzI2REVFRjM3MDBDQUUwRDAgLyogSlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHAgKi8sCisJCQkJMTREMDFCRTEyNkRFRUYzODAwQ0FFMEQw
IC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLywKIAkJCQlFM0JGM0M0QzIzOTBEMUUzMDA4
QkM3NTIgLyogSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAgKi8sCiAJCQkJRTNCRjNDNEIyMzkwRDFF
MjAwOEJDNzUyIC8qIEpTV2ViQXNzZW1ibHlHbG9iYWwuaCAqLywKIAkJCQk3OTZGQjQzOTFERkY4
QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCAqLywKQEAgLTkxMTIsMTIgKzkx
NDIsMTggQEAKIAkJCQlBRDJGQ0JBRDFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvci5oICovLAogCQkJCUFEMkZDQkFFMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5VGFibGUuY3BwICovLAogCQkJCUFEMkZDQkFGMURCNThEQTQwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5VGFibGUuaCAqLywKKwkJCQkxNEQwMUJFNDI2REVFRjM4MDBDQUUwRDAgLyogSlNX
ZWJBc3NlbWJseVRhZy5jcHAgKi8sCisJCQkJMTREMDFCRTAyNkRFRUYzNzAwQ0FFMEQwIC8qIEpT
V2ViQXNzZW1ibHlUYWcuaCAqLywKIAkJCQlBREQwOUFFRjFGNUY2MjNGMDAxMzEzQzIgLyogV2Fz
bVRvSlMuY3BwICovLAogCQkJCUFERDA5QUVFMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5o
ICovLAogCQkJCUFEMkZDQkIwMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVF
cnJvckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBRDJGQ0JCMTFEQjU4REE0MDBCM0U3MzYgLyog
V2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUFEMkZDQkIyMURC
NThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAgKi8s
CiAJCQkJQUQyRkNCQjMxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9y
UHJvdG90eXBlLmggKi8sCisJCQkJMTREMDFCRTUyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2Vt
Ymx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTE0RDAxQkUzMjZERUVGMzgwMENB
RTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi8sCisJCQkJMTREMDFC
RTIyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcCAq
LywKKwkJCQkxNEQwMUJERDI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUuaCAqLywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb24uaCAqLywKIAkJCQk1MjEzMjI0MzFFQ0JDRTgyMDBGNjU2MTUgLyogV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwICovLApAQCAtOTE1Miw2ICs5MTg4LDEwIEBACiAJCQkJ
QUQyRkNCQzExREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5o
ICovLAogCQkJCUFEMkZDQkMyMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmNwcCAqLywKIAkJCQlBRDJGQ0JDMzFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZS5oICovLAorCQkJCTE0RDAxQkRFMjZERUVGMzcwMENBRTBEMCAvKiBX
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQkxNEQwMUJEQTI2REVFRjM3MDBD
QUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oICovLAorCQkJCTE0RDAxQkRGMjZE
RUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgKi8sCisJCQkJMTRE
MDFCREIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggKi8sCiAJ
CQkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmNwcCAqLywKIAkJCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLywKIAkJCSk7CkBAIC0xMDQwMiw2ICsxMDQ0Miw3IEBACiAJCQkJQUQ1
QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFMzFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRUQyNkRFRUYzODAw
Q0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUz
QkYzQzREMjM5MEQxRTgwMDhCQzc1MiAvKiBKU1dlYkFzc2VtYmx5R2xvYmFsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBl
cnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTA0MTAsNiArMTA0NTEsNyBA
QAogCQkJCUFEMkZDQzA1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5TW9kdWxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFOTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRUIxREI1OERBRDAw
QjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFC
RUMyNkRFRUYzODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlUYWcuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDgzNyw2ICsxMDg3OSw3IEBACiAJCQkJMTQ1MEZBMUMy
MzU3QkRCRTAwOTNDRDREIC8qIFdhc21GdW5jdGlvbkNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTM4MzUwMEEyMzkwRDkzQjAwMzYzMTZEIC8qIFdhc21HbG9iYWwu
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0ODUyMUQ4MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFu
ZGxlckluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAv
KiBXYXNtSW5kZXhPck5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkUyMUY2OTlFQzAw
MDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMDA2NTlFMUVD
QUM4MTIwMDBDQTkyNiAvKiBXYXNtTGltaXRzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwODY3LDYg
KzEwOTEwLDcgQEAKIAkJCQlFM0EwNTMxQTIxMzQyQjY4MDAyMkVDMTQgLyogV2FzbVN0cmVhbWlu
Z1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDNzNBOTEyNUJGQTczQjAwRUZFMzAzIC8q
IFdhc21TdHJlYW1pbmdQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkx
MDAwQkNBQUYgLyogV2FzbVRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJGNTI2REVF
RjUzMDBDQUUwRDAgLyogV2FzbVRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIxRThE
QTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRTlFMEFG
MUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDg5OCw2ICsxMDk0Miw4IEBACiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDJGQ0JFRjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzE3MURCNTlDQjIwMEIzRTczNiAvKiBX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTE0RDAxQkVGMjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJFOTI2REVFRjM4MDBDQUUwRDAgLyogV2Vi
QXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENDkzN0Q0
MURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MjEzMjI0NjFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUzQkYzQzUzMjM5MEQyMDUwMDhCQzc1MiAvKiBXZWJBc3Nl
bWJseUdsb2JhbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEwOTI1LDYgKzEwOTcx
LDggQEAKIAkJCQlBRDJGQ0MyMDFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRkYxREI1OERBRDAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
MkZDQzIxMURCNTlDQjIwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRTYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RDAxQkU3MjZERUVGMzgw
MENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ3QTBFMTZGNUNEMDBCMzQ0NjAgLyogV2ViS2l0QXZh
aWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBNjFCRDU5OTMxMDBGNDU3NUMg
Lyogd2tidWlsdGlucy5weSBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CmluZGV4IGE4NTk3M2U3ZWRjZTFiODM3MTFlMDI5MTk3MmEzMWE0NDZhZjg1MTAuLmYwNDQ1MWQw
MzhkYjMwYzc1MWY0NmE5YTRkNzQ4NjNjYjZiMmQ4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKQEAgLTEwNzksNiArMTA3OSw3IEBAIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5j
cHAKIHdhc20vV2FzbUZvcm1hdC5jcHAKIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmNwcAog
d2FzbS9XYXNtR2xvYmFsLmNwcAord2FzbS9XYXNtSGFuZGxlckluZm8uY3BwCiB3YXNtL1dhc21J
bmRleE9yTmFtZS5jcHAKIHdhc20vV2FzbUluc3RhbmNlLmNwcAogd2FzbS9XYXNtSW5zdGFuY2Uu
aApAQCAtMTEwNSw2ICsxMTA2LDcgQEAgd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuY3BwCiB3
YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCiB3YXNtL1dhc21TdHJlYW1pbmdQbGFuLmNwcAog
d2FzbS9XYXNtVGFibGUuY3BwCit3YXNtL1dhc21UYWcuY3BwCiB3YXNtL1dhc21UaHVua3MuY3Bw
CiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHAKIHdhc20vV2FzbVZhbHVlTG9jYXRpb24uY3BwCkBA
IC0xMTE2LDYgKzExMTgsNyBAQCB3YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHkuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwCit3YXNtL2pzL0pTV2ViQXNzZW1i
bHlFeGNlcHRpb24uY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUxpbmtFcnJv
ci5jcHAKQEAgLTExMjMsMTAgKzExMjYsMTMgQEAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5
LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCit3YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWcuY3BwCiB3YXNtL2pzL1dhc21Ub0pTLmNwcAogd2FzbS9qcy9X
YXNtVG9KUy5oCiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3Bw
CiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAord2FzbS9qcy9X
ZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAord2FzbS9qcy9XZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvdHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKIHdh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5R2xv
YmFsQ29uc3RydWN0b3IuY3BwCkBAIC0xMTQ0LDYgKzExNTAsOCBAQCB3YXNtL2pzL1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yUHJvdG90eXBlLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3Iu
Y3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCit3YXNtL2pzL1dlYkFz
c2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwCit3YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBl
LmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKIAogeWFyci9SZWd1
bGFyRXhwcmVzc2lvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCmluZGV4IDhjYzU1MTU2YjU3YWJjZTQ5Y2VhYjk4MmMzMTQ3YTk4ODlkMTRm
NTYuLmJlMmU4YzgxMWQ2ZGRkMGMxODRiYTVlZDRkOTU3OTM2ZmQyMjU4YTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtMTgzOSw0ICsx
ODM5LDM2IEBAIG9wIDphdG9taWNfZmVuY2UsCiAgICAgYXJnczogewogICAgIH0KIAorb3AgOnRo
cm93LAorICAgIGFyZ3M6IHsKKyAgICAgICAgZXhjZXB0aW9uSW5kZXg6IHVuc2lnbmVkLAorICAg
ICAgICBmaXJzdFZhbHVlOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgfQorCitvcCA6cmV0aHJvdywK
KyAgICBhcmdzOiB7CisgICAgICAgIGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0K
Kworb3BfZ3JvdXAgOkNhdGNoLAorICAgIFsKKyAgICAgICAgOmNhdGNoLAorICAgICAgICA6Y2F0
Y2hfbm9fdGxzLAorICAgIF0sCisgICAgYXJnczogeworICAgICAgICBleGNlcHRpb25JbmRleDog
dW5zaWduZWQsCisgICAgICAgIGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBh
cmd1bWVudENvdW50OiB1bnNpZ25lZCwKKyAgICAgICAgc3RhcnRPZmZzZXQ6IHVuc2lnbmVkLAor
ICAgIH0KKworb3BfZ3JvdXAgOkNhdGNoQWxsLAorICAgIFsKKyAgICAgICAgOmNhdGNoX2FsbCwK
KyAgICAgICAgOmNhdGNoX2FsbF9ub190bHMsCisgICAgXSwKKyAgICBhcmdzOiB7CisgICAgICAg
IGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0KKwogZW5kX3NlY3Rpb24gOldhc20K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKaW5kZXggMDFk
ZGNmOTY5OWI0ODAyOWExYmQ4YmVlNDAzNDkwNDc5YTFmOWQ3Zi4uNjZkZjA5OTlmMjFiMjc0ZTA5
OTliYjVhMzg1MjM0ZDE0NTE1Yzk4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0hhbmRsZXJJbmZvLmgKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWVudW0gY2xhc3MgSGFuZGxlclR5cGUgeworZW51bSBjbGFzcyBIYW5kbGVyVHlwZSA6IHVpbnQ4
X3QgewogICAgIENhdGNoID0gMCwKICAgICBGaW5hbGx5ID0gMSwKICAgICBTeW50aGVzaXplZENh
dGNoID0gMiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgK
aW5kZXggNjgwZTk0MDFkYzYxZmY2M2RjYjVkNWU2ZjlkZWJlYzQwNjg4YjQ0OS4uNTFmMWQwMmUx
ODI1NThjOWMyOTEyZDg0MGM1ODgxMDQ4Y2E4MDFkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cyA9IEpTT3Bjb2RlVHJhaXRzPgogICAgIGNvbnN0IGNo
YXIqIG5hbWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFRyYWl0czo6b3Bjb2RlTmFt
ZXNbb3Bjb2RlSUQoKV07CisgICAgICAgIHJldHVybiBUcmFpdHM6Om9wY29kZU5hbWVzW29wY29k
ZUlEPFRyYWl0cz4oKV07CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzID0g
SlNPcGNvZGVUcmFpdHM+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCmluZGV4IDYzZmY0ZWVjZTYyNmI1ZDhkZmRlYzBjNzIzYTFjZDc0ODg3MWJj
NWEuLjllZGY1OWI5Njg2YTVhZDZjZWE4MzgzZjc0MzMzMzYwYTE5YzZkNDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC0xMzAsNyAr
MTMwLDggQEAgdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0
KCkgY29uc3QKIAogQnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgoKSBjb25z
dAogewotICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOworICAgIGlmIChjYWxsZWUoKS5p
c1dhc20oKSkKKyAgICAgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCk7
CiAgICAgaWYgKCFjb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoMCk7
CiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgKaW5kZXggMWNhYjIyNWJjZTAzOGQ4ZmU1ZTFjNDU4OTAzZmYzOWQ5NTZm
ZmY0YS4uZDg2NGEyNjhjZDdjYjUwNWE0MTMzZTM3MGNjMzM5ZDk1ODQyOWE0YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApAQCAtNDQsNiArNDQs
MTEgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIGNsYXNzIENhbGxTaXRlSW5kZXggewogICAgIHB1
YmxpYzoKICAgICAgICAgQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsKKworICAgICAgICBDYWxs
U2l0ZUluZGV4KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgICAgIDog
bV9iaXRzKGRlbGV0ZWRWYWx1ZSgpLmJpdHMoKSkKKyAgICAgICAgeworICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKICAgICAgICAgICAgIDogbV9iaXRzKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpCkBA
IC01NywxMyArNjIsMjUgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2JpdHM7IH0KICAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2JpdHMg
PT0gb3RoZXIubV9iaXRzOyB9CiAKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0
dXJuIGludEhhc2gobV9iaXRzKTsgfQorICAgICAgICBzdGF0aWMgQ2FsbFNpdGVJbmRleCBkZWxl
dGVkVmFsdWUoKSB7IHJldHVybiBmcm9tQml0cyhzX2ludmFsaWRJbmRleCAtIDEpOyB9CisgICAg
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9
PSBkZWxldGVkVmFsdWUoKTsgfQorCiAgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJl
dHVybiBtX2JpdHM7IH0KICAgICAgICAgc3RhdGljIENhbGxTaXRlSW5kZXggZnJvbUJpdHModWlu
dDMyX3QgYml0cykgeyByZXR1cm4gQ2FsbFNpdGVJbmRleChiaXRzKTsgfQogCiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgo
Yml0cygpKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgQnl0
ZWNvZGVJbmRleCgpLm9mZnNldCgpIH07CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMy
X3Qgc19pbnZhbGlkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7
CisKKyAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgc19pbnZhbGlkSW5kZXggfTsKKyAgICB9Owor
CisgICAgc3RydWN0IENhbGxTaXRlSW5kZXhIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgQ2FsbFNpdGVJbmRleCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENhbGxTaXRlSW5kZXgmIGEsIGNvbnN0IENh
bGxTaXRlSW5kZXgmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogICAgIH07CiAK
ICAgICBjbGFzcyBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4
IHsKQEAgLTMzMiwzICszNDksMTUgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0Zyb21KU0Nv
ZGUodm9pZCogcmV0dXJuQWRkcmVzcyk7CiAKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVz
cGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkNhbGxTaXRlSW5kZXg+IDogSlNDOjpD
YWxsU2l0ZUluZGV4SGFzaCB7IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNo
VHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkNhbGxTaXRlSW5kZXg+
IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6Q2FsbFNpdGVJbmRleD4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCmluZGV4IDkxMjZlZjU1OWYzNTMxMjUyZWI0ZGQ1MjllZGI0N2QzY2VmYWJh
M2MuLjhkMTE0ZWQwMGYyYTE4MTExNmIwOTFjMWRhZDhiYmUwZWUzZTI4OGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtNTIs
NiArNTIsNyBAQAogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJK
U01vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAi
TGl0ZXJhbFBhcnNlci5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKQEAg
LTUxMiwxNSArNTEzLDU5IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbm90aWZ5RGVidWdn
ZXJPZlVud2luZGluZyhWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgfQogfQogCitD
YXRjaEluZm86OkNhdGNoSW5mbyhjb25zdCBIYW5kbGVySW5mbyogaGFuZGxlciwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit7CisgICAgbV92YWxpZCA9ICEhaGFuZGxlcjsKKyAgICBpZiAobV92YWxp
ZCkgeworICAgICAgICBtX3R5cGUgPSBoYW5kbGVyLT50eXBlKCk7CisgICAgICAgIG1fbmF0aXZl
Q29kZSA9IGhhbmRsZXItPm5hdGl2ZUNvZGU7CisKKyAgICAgICAgLy8gaGFuZGxlci0+dGFyZ2V0
IGlzIG1lYW5pbmdsZXNzIGZvciBnZXR0aW5nIGEgY29kZSBvZmZzZXQgd2hlbiBjYXRjaGluZwor
ICAgICAgICAvLyB0aGUgZXhjZXB0aW9uIGluIGEgREZHL0ZUTCBmcmFtZS4gVGhpcyBieXRlY29k
ZSB0YXJnZXQgb2Zmc2V0IGNvdWxkIGJlCisgICAgICAgIC8vIHNvbWV0aGluZyB0aGF0J3MgaW4g
YW4gaW5saW5lZCBmcmFtZSwgd2hpY2ggbWVhbnMgYW4gYXJyYXkgYWNjZXNzCisgICAgICAgIC8v
IHdpdGggdGhpcyBieXRlY29kZSBvZmZzZXQgaW4gdGhlIG1hY2hpbmUgZnJhbWUgaXMgdXR0ZXJs
eSBtZWFuaW5nbGVzcworICAgICAgICAvLyBhbmQgY2FuIGNhdXNlIGFuIG92ZXJmbG93LiBPU1Ig
ZXhpdCBwcm9wZXJseSBleGl0cyB0byBoYW5kbGVyLT50YXJnZXQKKyAgICAgICAgLy8gaW4gdGhl
IHByb3BlciBmcmFtZS4KKyAgICAgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXIg
PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPnRhcmdldCkucHRyKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY2F0Y2hQQ0ZvckludGVycHJldGVyID0gbnVsbHB0
cjsKKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitDYXRjaEluZm86OkNhdGNo
SW5mbyhjb25zdCBXYXNtOjpIYW5kbGVySW5mbyogaGFuZGxlciwgY29uc3QgV2FzbTo6Q2FsbGVl
KiBjYWxsZWUpCit7CisgICAgbV92YWxpZCA9ICEhaGFuZGxlcjsKKyAgICBpZiAobV92YWxpZCkg
eworICAgICAgICBtX3R5cGUgPSBIYW5kbGVyVHlwZTo6Q2F0Y2g7CisgICAgICAgIG1fbmF0aXZl
Q29kZSA9IGhhbmRsZXItPm1fbmF0aXZlQ29kZTsKKyAgICAgICAgaWYgKGNvbnN0IFdhc206OkZ1
bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUtPmZ1bmN0aW9uQ29kZUJsb2NrKCkp
CisgICAgICAgICAgICBtX2NhdGNoUENGb3JJbnRlcnByZXRlciA9IGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoaGFuZGxlci0+bV90YXJnZXQpLnB0cigpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX2NhdGNoUENGb3JJbnRlcnByZXRlciA9IG51bGxwdHI7CisgICAgfQorfQorI2Vu
ZGlmCisKIGNsYXNzIFVud2luZEZ1bmN0b3IgewogcHVibGljOgotICAgIFVud2luZEZ1bmN0b3Io
Vk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIGJvb2wgaXNUZXJtaW5hdGlvbiwgQ29kZUJs
b2NrKiYgY29kZUJsb2NrLCBIYW5kbGVySW5mbyomIGhhbmRsZXIpCisgICAgVW53aW5kRnVuY3Rv
cihWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgYm9vbCBpc1Rlcm1pbmF0aW9uLCBKU1Zh
bHVlIHRocm93blZhbHVlLCBDb2RlQmxvY2sqJiBjb2RlQmxvY2ssIENhdGNoSW5mbyYgaGFuZGxl
cikKICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkK
ICAgICAgICAgLCBtX2lzVGVybWluYXRpb24oaXNUZXJtaW5hdGlvbikKICAgICAgICAgLCBtX2Nv
ZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9oYW5kbGVyKGhhbmRsZXIpCiAgICAgewor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgaWYgKCFtX2lzVGVybWluYXRpb24pIHsK
KyAgICAgICAgICAgIGlmIChKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiB3YXNtRXhjZXB0aW9uID0g
anNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKj4obV92bSwgdGhyb3duVmFsdWUp
KSB7CisgICAgICAgICAgICAgICAgbV9jYXRjaGFibGVGcm9tV2FzbSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgbV93YXNtVGFnID0gJndhc21FeGNlcHRpb24tPnRhZygpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChFcnJvckluc3RhbmNlKiBlcnJvciA9IGpzRHluYW1pY0Nhc3Q8RXJyb3JJbnN0
YW5jZSo+KG1fdm0sIHRocm93blZhbHVlKSkKKyAgICAgICAgICAgICAgICBtX2NhdGNoYWJsZUZy
b21XYXNtID0gZXJyb3ItPmlzQ2F0Y2hhYmxlRnJvbVdhc20oKTsKKyAgICAgICAgfQorI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICB9CiAKICAgICBTdGFja1Zpc2l0b3I6OlN0YXR1
cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKQEAgLTUyOSwxOSArNTc0
LDMyIEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUo
KTsKICAgICAgICAgbV9jb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKIAotICAgICAg
ICBtX2hhbmRsZXIgPSBudWxscHRyOworICAgICAgICBtX2hhbmRsZXIubV92YWxpZCA9IGZhbHNl
OwogICAgICAgICBpZiAobV9jb2RlQmxvY2spIHsKICAgICAgICAgICAgIGlmICghbV9pc1Rlcm1p
bmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhhbmRs
ZXIodmlzaXRvciwgbV9jb2RlQmxvY2ssIFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7Ci0g
ICAgICAgICAgICAgICAgaWYgKG1faGFuZGxlcikKKyAgICAgICAgICAgICAgICBtX2hhbmRsZXIg
PSB7IGZpbmRFeGNlcHRpb25IYW5kbGVyKHZpc2l0b3IsIG1fY29kZUJsb2NrLCBSZXF1aXJlZEhh
bmRsZXI6OkFueUhhbmRsZXIpLCBtX2NvZGVCbG9jayB9OworICAgICAgICAgICAgICAgIGlmICht
X2hhbmRsZXIubV92YWxpZCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRv
cjo6RG9uZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQotICAgICAgICBpZiAodmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxsKCkpIHsKLSAgICAgICAg
ICAgIGlmIChhdXRvKiBqc1RvV2FzbUlDQ2FsbGVlID0ganNEeW5hbWljQ2FzdDxKU1RvV2FzbUlD
Q2FsbGVlKj4obV92bSwgdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkpKQorICAgICAgICBDYWxs
ZWVCaXRzIGNhbGxlZSA9IHZpc2l0b3ItPmNhbGxlZSgpOworICAgICAgICBpZiAoY2FsbGVlLmlz
Q2VsbCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byoganNUb1dhc21JQ0NhbGxlZSA9IGpzRHlu
YW1pY0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KG1fdm0sIGNhbGxlZS5hc0NlbGwoKSkpCiAgICAg
ICAgICAgICAgICAgbV92bS53YXNtQ29udGV4dC5zdG9yZShqc1RvV2FzbUlDQ2FsbGVlLT5mdW5j
dGlvbigpLT5wcmV2aW91c0luc3RhbmNlKG1fY2FsbEZyYW1lKSwgbV92bS5zb2Z0U3RhY2tMaW1p
dCgpKTsKKworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fY2F0Y2hhYmxlRnJvbVdhc20gJiYg
Y2FsbGVlLmlzV2FzbSgpKSB7CisgICAgICAgICAgICBXYXNtOjpDYWxsZWUqIHdhc21DYWxsZWUg
PSBjYWxsZWUuYXNXYXNtQ2FsbGVlKCk7CisgICAgICAgICAgICBpZiAod2FzbUNhbGxlZS0+aGFz
RXhjZXB0aW9uSGFuZGxlcnMoKSkgeworICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSoganNJbnN0YW5jZSA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihtX2NhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkhh
bmRsZXJJbmRleCA9IG1fY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOworICAgICAg
ICAgICAgICAgIG1faGFuZGxlciA9IHsgd2FzbUNhbGxlZS0+aGFuZGxlckZvckluZGV4KGpzSW5z
dGFuY2UtPmluc3RhbmNlKCksIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgbV93YXNtVGFnKSwgd2Fz
bUNhbGxlZSB9OworICAgICAgICAgICAgICAgIGlmIChtX2hhbmRsZXIubV92YWxpZCkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogI2VuZGlmCiAKQEAgLTU4OCwxMCArNjQ2LDE0IEBAIHByaXZhdGU6CiAgICAg
Q2FsbEZyYW1lKiYgbV9jYWxsRnJhbWU7CiAgICAgYm9vbCBtX2lzVGVybWluYXRpb247CiAgICAg
Q29kZUJsb2NrKiYgbV9jb2RlQmxvY2s7Ci0gICAgSGFuZGxlckluZm8qJiBtX2hhbmRsZXI7Cisg
ICAgQ2F0Y2hJbmZvJiBtX2hhbmRsZXI7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGNv
bnN0IFdhc206OlRhZyogbV93YXNtVGFnIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV9jYXRjaGFi
bGVGcm9tV2FzbSB7IGZhbHNlIH07CisjZW5kaWYKIH07CiAKLU5FVkVSX0lOTElORSBIYW5kbGVy
SW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwg
RXhjZXB0aW9uKiBleGNlcHRpb24pCitORVZFUl9JTkxJTkUgQ2F0Y2hJbmZvIEludGVycHJldGVy
Ojp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0
aW9uKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIApAQCAt
NjA5LDE2ICs2NzEsMTMgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6
dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGMKICAgICBFWENFUFRJT05f
QVNTRVJUX1VOVVNFRChzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgLy8gQ2FsY3Vs
YXRlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5l
Y2Vzc2FyeS4KLSAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IG51bGxwdHI7Ci0gICAgVW53aW5k
RnVuY3RvciBmdW5jdG9yKHZtLCBjYWxsRnJhbWUsIHZtLmlzVGVybWluYXRpb25FeGNlcHRpb24o
ZXhjZXB0aW9uKSwgY29kZUJsb2NrLCBoYW5kbGVyKTsKKyAgICBDYXRjaEluZm8gY2F0Y2hJbmZv
OworICAgIFVud2luZEZ1bmN0b3IgZnVuY3Rvcih2bSwgY2FsbEZyYW1lLCB2bS5pc1Rlcm1pbmF0
aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbiksIGV4Y2VwdGlvblZhbHVlLCBjb2RlQmxvY2ssIGNhdGNo
SW5mbyk7CiAgICAgU3RhY2tWaXNpdG9yOjp2aXNpdDxTdGFja1Zpc2l0b3I6OlRlcm1pbmF0ZUlm
VG9wRW50cnlGcmFtZUlzRW1wdHk+KGNhbGxGcmFtZSwgdm0sIGZ1bmN0b3IpOwogICAgIGlmICh2
bS5oYXNDaGVja3BvaW50T1NSU2lkZVN0YXRlKCkpCiAgICAgICAgIHZtLnBvcEFsbENoZWNrcG9p
bnRPU1JTaWRlU3RhdGVVbnRpbChjYWxsRnJhbWUpOwogCi0gICAgaWYgKCFoYW5kbGVyKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBoYW5kbGVyOworICAgIHJldHVybiBj
YXRjaEluZm87CiB9CiAKIHZvaWQgSW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRp
b25Ub0JlVGhyb3duKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCAwYzNlZmUxMmU1MTA1Mzg4
ZjZjZjI4NTExZDllYTVlNGVhZjMwN2ZjLi41NTk0NjAyMGEzN2ZkNDA5ZDExNzljMDQ3N2VkOGRj
MTM4YjkwNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuaApAQCAtNDMsNiArNDMsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBDYWxsZWU7CitzdHJ1
Y3QgSGFuZGxlckluZm87Cit9CisjZW5kaWYKKwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBj
bGFzcyBFdmFsRXhlY3V0YWJsZTsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC01
OCw2ICs2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTU2NvcGU7CiAgICAgY2xh
c3MgU291cmNlQ29kZTsKICAgICBjbGFzcyBTdGFja0ZyYW1lOworICAgIGVudW0gY2xhc3MgSGFu
ZGxlclR5cGUgOiB1aW50OF90OwogICAgIHN0cnVjdCBDYWxsRnJhbWVDbG9zdXJlOwogICAgIHN0
cnVjdCBIYW5kbGVySW5mbzsKICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CkBAIC04MSw2ICs4OSwy
MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RhY2tGcmFtZU5hdGl2ZUNvZGUKICAgICB9
OwogCisgICAgc3RydWN0IENhdGNoSW5mbyB7CisgICAgICAgIENhdGNoSW5mbygpCisgICAgICAg
ICAgICA6IG1fdmFsaWQoZmFsc2UpCisgICAgICAgIHsgfQorCisgICAgICAgIENhdGNoSW5mbyhj
b25zdCBIYW5kbGVySW5mbyosIENvZGVCbG9jayopOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KyAgICAgICAgQ2F0Y2hJbmZvKGNvbnN0IFdhc206OkhhbmRsZXJJbmZvKiwgY29uc3QgV2FzbTo6
Q2FsbGVlKik7CisjZW5kaWYKKworICAgICAgICBib29sIG1fdmFsaWQ7CisgICAgICAgIEhhbmRs
ZXJUeXBlIG1fdHlwZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+IG1fbmF0aXZlQ29kZTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIG1f
Y2F0Y2hQQ0ZvckludGVycHJldGVyOworICAgIH07CisKICAgICBjbGFzcyBJbnRlcnByZXRlciB7
CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICBmcmllbmQgY2xhc3Mg
Q2FjaGVkQ2FsbDsKQEAgLTExMiw3ICsxMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICB2b2lkIGdldEFyZ3VtZW50c0RhdGEoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiomLCBwdHJkaWZm
X3QmIGZpcnN0UGFyYW1ldGVySW5kZXgsIFJlZ2lzdGVyKiYgYXJndiwgaW50JiBhcmdjKTsKIAot
ICAgICAgICBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIHVud2luZChWTSYsIENhbGxGcmFtZSom
LCBFeGNlcHRpb24qKTsKKyAgICAgICAgTkVWRVJfSU5MSU5FIENhdGNoSW5mbyB1bndpbmQoVk0m
LCBDYWxsRnJhbWUqJiwgRXhjZXB0aW9uKik7CiAgICAgICAgIHZvaWQgbm90aWZ5RGVidWdnZXJP
ZkV4Y2VwdGlvblRvQmVUaHJvd24oVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIEV4
Y2VwdGlvbiopOwogICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBkZWJ1ZyhDYWxsRnJhbWUqLCBE
ZWJ1Z0hvb2tUeXBlKTsKICAgICAgICAgc3RhdGljIFN0cmluZyBzdGFja1RyYWNlQXNTdHJpbmco
Vk0mLCBjb25zdCBWZWN0b3I8U3RhY2tGcmFtZT4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKaW5kZXggNTdhMWJkYjZkYmQ1YjE2
MDY5MWM2NTY1MGZjMGQ0NWRiZTgwOWVhYi4uZGM1ZWNjZTA1ZWUzOWZiYmZlYmY1ZDliMmRiYjNi
OTU2ZmQ2NmE1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1N0YWNrVmlzaXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1N0YWNrVmlzaXRvci5jcHAKQEAgLTE2NiwyMyArMTY2LDIwIEBAIHZvaWQgU3RhY2tWaXNpdG9y
OjpyZWFkTm9uSW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBj
b2RlT3JpCiAgICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IG51bGxwdHI7CiAjZW5kaWYK
IAorICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAg
IG1fZnJhbWUubV9ieXRlY29kZUluZGV4ID0gIW1fZnJhbWUuY29kZUJsb2NrKCkgPyBCeXRlY29k
ZUluZGV4KDApCisgICAgICAgIDogY29kZU9yaWdpbiA/IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5k
ZXgoKQorICAgICAgICA6IGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpOworCiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogICAgIGlmIChjYWxsRnJhbWUtPmlzQW55V2FzbUNhbGxlZSgpKSB7CiAg
ICAgICAgIG1fZnJhbWUubV9pc1dhc21GcmFtZSA9IHRydWU7CiAgICAgICAgIG1fZnJhbWUubV9j
b2RlQmxvY2sgPSBudWxscHRyOwotICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoKTsKIAogICAgICAgICBpZiAobV9mcmFtZS5tX2NhbGxlZS5pc1dhc20oKSkK
ICAgICAgICAgICAgIG1fZnJhbWUubV93YXNtRnVuY3Rpb25JbmRleE9yTmFtZSA9IG1fZnJhbWUu
bV9jYWxsZWUuYXNXYXNtQ2FsbGVlKCktPmluZGV4T3JOYW1lKCk7Ci0KLSAgICAgICAgcmV0dXJu
OwogICAgIH0KICNlbmRpZgotICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwotICAgIG1fZnJhbWUubV9ieXRlY29kZUluZGV4ID0gIW1fZnJhbWUuY29kZUJs
b2NrKCkgPyBCeXRlY29kZUluZGV4KDApCi0gICAgICAgIDogY29kZU9yaWdpbiA/IGNvZGVPcmln
aW4tPmJ5dGVjb2RlSW5kZXgoKQotICAgICAgICA6IGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgp
OwotCiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAppbmRleCBlZjJmY2I0MmYzNWZlNzJlNDRkZjNlMDIyNGIy
ZTkwOGIyNTVlZTk4Li5hOTFhOWRkOTdhYmVlODc0OGQwNzY3YzMyM2FlY2E4ZDQ5OGViNGM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCkBAIC03
MDQsOSArNzA0LDQ3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhCiAjZW5kaWYKIAogICAgIGxv
YWRQdHIoJnRvcEVudHJ5RnJhbWUsIHNjcmF0Y2gpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
RW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgc2NyYXRjaCk7
CisgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
SW1wbChzY3JhdGNoLCBza2lwTGlzdCk7CiAKLSAgICBMb2FkUmVnU3Bvb2xlciBzcG9vbGVyKCp0
aGlzLCBzY3JhdGNoKTsKKyAgICAvLyBSZXN0b3JlIHRoZSBjYWxsZWUgc2F2ZSB2YWx1ZSBvZiB0
aGUgc2NyYXRjaC4KKyAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMt
PmF0KHNjcmF0Y2hHUFJFbnRyeUluZGV4KTsKKyAgICBBU1NFUlQoIWRvbnRSZXN0b3JlUmVnaXN0
ZXJzLmdldChlbnRyeS5yZWcoKSkpOworICAgIEFTU0VSVChlbnRyeS5yZWcoKS5pc0dQUigpKTsK
KyAgICBBU1NFUlQoc2NyYXRjaCA9PSBlbnRyeS5yZWcoKS5ncHIoKSk7CisjaWYgQ1BVKEFSTTY0
KQorICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkyID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KHNjcmF0
Y2hHUFJFbnRyeUluZGV4ICsgMSk7CisgICAgQVNTRVJUX1VOVVNFRChlbnRyeTIsICFkb250UmVz
dG9yZVJlZ2lzdGVycy5nZXQoZW50cnkyLnJlZygpKSk7CisgICAgQVNTRVJUKGVudHJ5Mi5yZWco
KS5pc0dQUigpKTsKKyAgICBBU1NFUlQodW51c2VkTmV4dFNsb3RHUFIgPT0gZW50cnkyLnJlZygp
LmdwcigpKTsKKyAgICBsb2FkUGFpcjY0KHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihlbnRyeS5vZmZz
ZXQoKSksIHNjcmF0Y2gsIHVudXNlZE5leHRTbG90R1BSKTsKKyNlbHNlCisgICAgbG9hZFB0cihB
ZGRyZXNzKHNjcmF0Y2gsIGVudHJ5Lm9mZnNldCgpKSwgc2NyYXRjaCk7CisjZW5kaWYKKworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7CisjZW5kaWYgLy8gTlVNQkVSX09G
X0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpy
ZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSUmVn
IHZtR1BSLCBHUFJSZWcgc2NyYXRjaEdQUikKK3sKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVT
X1JFR0lTVEVSUyA+IDAKKyAgICBsb2FkUHRyKEFkZHJlc3Modm1HUFIsIFZNOjp0b3BFbnRyeUZy
YW1lT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHNjcmF0Y2hHUFIsIFJlZ2lzdGVyU2V0Ojpz
dGFja1JlZ2lzdGVycygpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZtR1BSKTsKKyNlbmRp
ZiAvLyBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKK30KKwordm9pZCBBc3Nl
bWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlckltcGwoR1BSUmVnIGVudHJ5RnJhbWVHUFIsIGNvbnN0IFJlZ2lzdGVyU2V0JiBza2lw
TGlzdCkKK3sKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJP
ZmZzZXQoKSksIGVudHJ5RnJhbWVHUFIpOworCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFs
bENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygp
OworICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwor
CisgICAgTG9hZFJlZ1Nwb29sZXIgc3Bvb2xlcigqdGhpcywgZW50cnlGcmFtZUdQUik7CiAKICAg
ICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMgZXhjZXB0IGZvciB0aGUgc2NyYXRjaC4KICAg
ICB1bnNpZ25lZCBpID0gMDsKQEAgLTcyOCwyMyArNzY2LDkgQEAgdm9pZCBBc3NlbWJseUhlbHBl
cnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50
cnlGcmEKICAgICB9CiAgICAgc3Bvb2xlci5maW5hbGl6ZUZQUigpOwogCi0gICAgLy8gUmVzdG9y
ZSB0aGUgY2FsbGVlIHNhdmUgdmFsdWUgb2YgdGhlIHNjcmF0Y2guCi0gICAgUmVnaXN0ZXJBdE9m
ZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChzY3JhdGNoR1BSRW50cnlJbmRleCk7Ci0g
ICAgQVNTRVJUKCFkb250UmVzdG9yZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKTsKLSAgICBB
U1NFUlQoZW50cnkucmVnKCkuaXNHUFIoKSk7Ci0gICAgQVNTRVJUKHNjcmF0Y2ggPT0gZW50cnku
cmVnKCkuZ3ByKCkpOwotI2lmIENQVShBUk02NCkKLSAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5
MiA9IGFsbENhbGxlZVNhdmVzLT5hdChzY3JhdGNoR1BSRW50cnlJbmRleCArIDEpOwotICAgIEFT
U0VSVF9VTlVTRUQoZW50cnkyLCAhZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5Mi5yZWco
KSkpOwotICAgIEFTU0VSVChlbnRyeTIucmVnKCkuaXNHUFIoKSk7Ci0gICAgQVNTRVJUKHVudXNl
ZE5leHRTbG90R1BSID09IGVudHJ5Mi5yZWcoKS5ncHIoKSk7Ci0gICAgbG9hZFBhaXI2NChzY3Jh
dGNoLCBUcnVzdGVkSW1tMzIoZW50cnkub2Zmc2V0KCkpLCBzY3JhdGNoLCB1bnVzZWROZXh0U2xv
dEdQUik7Ci0jZWxzZQotICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoLCBlbnRyeS5vZmZzZXQo
KSksIHNjcmF0Y2gpOwotI2VuZGlmCi0KICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5
RnJhbWUpOworICAgIFVOVVNFRF9QQVJBTSh2bUdQUik7CisgICAgVU5VU0VEX1BBUkFNKHNraXBM
aXN0KTsKICNlbmRpZiAvLyBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggMGQy
NTNkOTg4ZWMyODdjOGM5N2I1NmQ1YTg3NDE1ZjExNjFiNThjYi4uOWE0NzlmNjcwYjZkNmVkOTFk
Njg5OThiOWY5M2JmMTA2ZGU3ZmEwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCkBAIC00MTMsNiArNDEzLDggQEAgcHVibGljOgogICAgIH0KIAogICAg
IHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihF
bnRyeUZyYW1lKiYpOworICAgIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKEdQUlJlZyB2bUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpOworICAg
IHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
SW1wbChHUFJSZWcgZW50cnlGcmFtZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHNraXBMaXN0KTsKIAog
ICAgIHZvaWQgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYsIGNvbnN0IFRlbXBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpIH0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEV4Y2VwdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25z
LmNwcAppbmRleCA2ZDU4M2E0ODllZDUzMDMxOGNlMzA5NmM2NmIwMmU3ZDFjNThhNGJjLi5iODZl
OWE0MTAzYzg1MDZjM2ZkYmJhYzU0ZDdlOTRlNjY2MGFhZDk5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKQEAgLTU0LDIxICs1NCwxNCBAQCB2b2lkIGdl
bmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogICAgIEV4Y2VwdGlv
biogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhj
ZXB0aW9uKTsKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IHZtLmludGVycHJldGVyLT51bndp
bmQodm0sIGNhbGxGcmFtZSwgZXhjZXB0aW9uKTsgLy8gVGhpcyBtYXkgdXBkYXRlIGNhbGxGcmFt
ZS4KKyAgICBDYXRjaEluZm8gaGFuZGxlciA9IHZtLmludGVycHJldGVyLT51bndpbmQodm0sIGNh
bGxGcmFtZSwgZXhjZXB0aW9uKTsgLy8gVGhpcyBtYXkgdXBkYXRlIGNhbGxGcmFtZS4KIAogICAg
IHZvaWQqIGNhdGNoUm91dGluZTsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY2F0Y2hQQ0Zvcklu
dGVycHJldGVyID0gbnVsbHB0cjsKLSAgICBpZiAoaGFuZGxlcikgewotICAgICAgICAvLyBoYW5k
bGVyLT50YXJnZXQgaXMgbWVhbmluZ2xlc3MgZm9yIGdldHRpbmcgYSBjb2RlIG9mZnNldCB3aGVu
IGNhdGNoaW5nCi0gICAgICAgIC8vIHRoZSBleGNlcHRpb24gaW4gYSBERkcvRlRMIGZyYW1lLiBU
aGlzIGJ5dGVjb2RlIHRhcmdldCBvZmZzZXQgY291bGQgYmUKLSAgICAgICAgLy8gc29tZXRoaW5n
IHRoYXQncyBpbiBhbiBpbmxpbmVkIGZyYW1lLCB3aGljaCBtZWFucyBhbiBhcnJheSBhY2Nlc3MK
LSAgICAgICAgLy8gd2l0aCB0aGlzIGJ5dGVjb2RlIG9mZnNldCBpbiB0aGUgbWFjaGluZSBmcmFt
ZSBpcyB1dHRlcmx5IG1lYW5pbmdsZXNzCi0gICAgICAgIC8vIGFuZCBjYW4gY2F1c2UgYW4gb3Zl
cmZsb3cuIE9TUiBleGl0IHByb3Blcmx5IGV4aXRzIHRvIGhhbmRsZXItPnRhcmdldAotICAgICAg
ICAvLyBpbiB0aGUgcHJvcGVyIGZyYW1lLgotICAgICAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKQotICAgICAgICAgICAg
Y2F0Y2hQQ0ZvckludGVycHJldGVyID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rp
b25zKCkuYXQoaGFuZGxlci0+dGFyZ2V0KS5wdHIoKTsKKyAgICBpZiAoaGFuZGxlci5tX3ZhbGlk
KSB7CisgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGhhbmRsZXIubV9jYXRjaFBDRm9y
SW50ZXJwcmV0ZXI7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFu
ZGxlci0+bmF0aXZlQ29kZS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBjYXRjaFJvdXRp
bmUgPSBoYW5kbGVyLm1fbmF0aXZlQ29kZS5leGVjdXRhYmxlQWRkcmVzcygpOwogI2Vsc2UKICAg
ICAgICAgaWYgKGNhdGNoUENGb3JJbnRlcnByZXRlci0+aXNXaWRlMzIoKSkKICAgICAgICAgICAg
IGNhdGNoUm91dGluZSA9IExMSW50OjpnZXRXaWRlMzJDb2RlUHRyKGNhdGNoUENGb3JJbnRlcnBy
ZXRlci0+b3Bjb2RlSUQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pTSW50ZXJmYWNlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNl
SklULmgKaW5kZXggN2NhMWI0ZTdjM2ZkMDg0ZGQyN2FjMzg1MDZhYTljNmFlZDk1ZGViMC4uOTky
MjllNDk5MzE3YzEyYTFmMzRjYmVhY2RhZWM5MDE1MzgwOGFkZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaApAQCAtNTcsNiArNTcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBm
cm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOwogICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKICAgICAgICAg
dm9pZCBlbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVh
bFJlZ2lzdGVyIGVudHJ5KTsKKyAgICAgICAgdm9pZCBjb252ZXJ0Q2FsbGVlVG9WTShSZWdpc3Rl
cklEIGNhbGxlZSk7CiAKICAgICAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQog
CkBAIC0xNTgsNiArMTU5LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgfQogCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjpjb252ZXJ0Q2FsbGVlVG9WTShS
ZWdpc3RlcklEIGNhbGxlZSkKKyAgICB7CisgICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25D
YXNlID0gYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZSwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsK
KyAgICAgICAgYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6
YmxvY2tNYXNrKSwgY2FsbGVlKTsKKyAgICAgICAgbG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoY2FsbGVlLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9v
dGVyOjpvZmZzZXRPZlZNKCkpLCBjYWxsZWUpOworICAgICAgICBhdXRvIGxvYWRlZENhc2UgPSBq
dW1wKCk7CisKKyAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsodGhpcyk7CisgICAg
ICAgIGxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZSwgUHJlY2lzZUFsbG9jYXRp
b246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lzZUFs
bG9jYXRpb246OmhlYWRlclNpemUoKSksIGNhbGxlZSk7CisKKyAgICAgICAgbG9hZGVkQ2FzZS5s
aW5rKHRoaXMpOworICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0
YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCmluZGV4IDQ3MWZi
NWQyZmQzYjgwOTM5NmE1MjNjZTMzZmNiMmE4NTk4MzZhY2IuLjM3YzFhZmU2ZGU3NmM4OTM1YWM3
NDZkNjBmYjQ5N2QzMWU2ZTdjYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRE
YXRhLmgKQEAgLTMyMiw2ICszMjIsMjQgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8dGFnPiBnZXRXaWRlMzJDb2RlUHRyKFdhc21PcGNvZGVJRCBvcGNvZGVJRCkKICNlbmRp
ZgogfQogCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8dGFnPiBnZXRDb2RlUmVmKFdhc21PcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
ZihnZXRDb2RlUHRyPHRhZz4ob3Bjb2RlSUQpKTsKK30KKwordGVtcGxhdGU8UHRyVGFnIHRhZz4K
K0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz4gZ2V0V2lkZTE2Q29kZVJl
ZihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCit7CisgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjx0YWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2V0V2lkZTE2Q29kZVB0cjx0YWc+
KG9wY29kZUlEKSk7Cit9CisKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+IGdldFdpZGUzMkNvZGVSZWYoV2FzbU9wY29kZUlEIG9w
Y29kZUlEKQoreworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPjo6Y3JlYXRl
U2VsZk1hbmFnZWRDb2RlUmVmKGdldFdpZGUzMkNvZGVQdHI8dGFnPihvcGNvZGVJRCkpOworfQor
CiB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogQUxXQVlTX0lOTElORSBMTEludENvZGUgZ2V0Q29kZUZ1
bmN0aW9uUHRyKFdhc21PcGNvZGVJRCBvcGNvZGVJRCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAKaW5kZXggYjkxM2VlZGFiMGM0MzBmYTc4
NDYyOWJlMzA5MTI0MDBlNTY5OGMxNC4uOGI0ZWYyMGMyNzMyNjBkZGVmNjk0ZDMwYTA3ZjY3NWYw
ODNmMzhiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhj
ZXB0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0
aW9ucy5jcHAKQEAgLTQ5LDYgKzQ5LDE4IEBAIEluc3RydWN0aW9uKiByZXR1cm5Ub1Rocm93KFZN
JiB2bSkKICAgICByZXR1cm4gTExJbnQ6OmV4Y2VwdGlvbkluc3RydWN0aW9ucygpOwogfQogCitJ
bnN0cnVjdGlvbiogd2FzbVJldHVyblRvVGhyb3coVk0mIHZtKQoreworICAgIFVOVVNFRF9QQVJB
TSh2bSk7CisjaWYgTExJTlRfVFJBQ0lORworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFj
ZUxMSW50U2xvd1BhdGgoKSkpIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOworICAgICAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgSlNWYWx1
ZShzY29wZS5leGNlcHRpb24oKSksICIgKHJldHVyblRvVGhyb3cpLlxuIik7CisgICAgfQorI2Vu
ZGlmCisgICAgcmV0dXJuIExMSW50Ojp3YXNtRXhjZXB0aW9uSW5zdHJ1Y3Rpb25zKCk7Cit9CisK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBjYWxsVG9UaHJv
dyhWTSYgdm0pCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKQEAgLTkyLDQgKzEwNCwzNCBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFuZGxlQ2F0Y2go
T3Bjb2RlU2l6ZSBzaXplKQogICAgIHJldHVybiB7fTsKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5k
bGVXYXNtQ2F0Y2goT3Bjb2RlU2l6ZSBzaXplKQoreworICAgIHN3aXRjaCAoc2l6ZSkgeworICAg
IGNhc2UgT3Bjb2RlU2l6ZTo6TmFycm93OgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVS
ZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4od2FzbV9jYXRjaCk7CisgICAgY2FzZSBPcGNvZGVT
aXplOjpXaWRlMTY6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0V2lkZTE2Q29kZVJlZjxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPih3YXNtX2NhdGNoKTsKKyAgICBjYXNlIE9wY29kZVNpemU6Oldp
ZGUzMjoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRXaWRlMzJDb2RlUmVmPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+KHdhc21fY2F0Y2gpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxF
eGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5kbGVXYXNtQ2F0Y2hBbGwoT3Bjb2RlU2l6ZSBzaXpl
KQoreworICAgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNhc2UgT3Bjb2RlU2l6ZTo6TmFycm93Ogor
ICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4o
d2FzbV9jYXRjaF9hbGwpOworICAgIGNhc2UgT3Bjb2RlU2l6ZTo6V2lkZTE2OgorICAgICAgICBy
ZXR1cm4gTExJbnQ6OmdldFdpZGUxNkNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4od2Fz
bV9jYXRjaF9hbGwpOworICAgIGNhc2UgT3Bjb2RlU2l6ZTo6V2lkZTMyOgorICAgICAgICByZXR1
cm4gTExJbnQ6OmdldFdpZGUzMkNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4od2FzbV9j
YXRjaF9hbGwpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB7IH07Cit9CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6TExJbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludEV4Y2VwdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dEV4Y2VwdGlvbnMuaAppbmRleCA4MDZiMTlmNjYwNTg2NmI4OGNlODQ5NTg3YTA0MWFkZTRmMzZk
NjI5Li5lNWY5MDIxZmFkYjhlZmNiMjU4N2MwY2E2MDE3NmViZjFkY2JhYzRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5oCkBAIC00Miw2ICs0Miw3
IEBAIG5hbWVzcGFjZSBMTEludCB7CiAvLyBiZXR3ZWVuIDEgYW5kIDkgc2xvdHMgd2lsbCBnaXZl
IHlvdSBhbiAiaW5zdHJ1Y3Rpb24iIHRoYXQgdGhyZWFkcyB0byB0aGUKIC8vIGludGVycHJldGVy
J3MgZXhjZXB0aW9uIGhhbmRsZXIuCiBJbnN0cnVjdGlvbiogcmV0dXJuVG9UaHJvdyhWTSYpOwor
SW5zdHJ1Y3Rpb24qIHdhc21SZXR1cm5Ub1Rocm93KFZNJik7CiAKIC8vIFVzZSB0aGlzIHdoZW4g
eW91J3JlIHRocm93aW5nIHRvIGEgY2FsbCB0aHVuay4KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxF
eGNlcHRpb25IYW5kbGVyUHRyVGFnPiBjYWxsVG9UaHJvdyhWTSYpOwpAQCAtNDksNCArNTAsOSBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gY2FsbFRvVGhy
b3coVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBo
YW5kbGVVbmNhdWdodEV4Y2VwdGlvbihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+IGhhbmRsZUNhdGNoKE9wY29kZVNpemUpOwogCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IGhhbmRsZVdhc21DYXRjaChPcGNvZGVTaXplKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxF
eGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5kbGVXYXNtQ2F0Y2hBbGwoT3Bjb2RlU2l6ZSk7Cisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6TExJ
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNF
eHRyYWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4
dHJhY3Rvci5jcHAKaW5kZXggNmRmNDY4NTBlMmM3ZWI5Njg5OGVjNGM1N2ZjYjc3ZGQ4NzVkMmQ1
MC4uYjJjYWExODU0MTMwZmY4YjkzMTgwNzZkMjdkZmViZGQyMTMzODQ0MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAK
QEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIK
ICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKKyNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKdW1wVGFibGUuaCIKICNpbmNs
dWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMTEludE9mZmxpbmVBc21Db25maWcuaCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5hc20gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCmluZGV4IDQzNmNmNjY0
OTBkNzFjNWVlOWJiMzBlODZmZTZmNDJiYWVlNzZkZjEuLmZlOTg5YzgzYTExMGIxYzgzODc0M2Y5
NzMyYzlhMmJjZTVhZmQ1NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9XZWJBc3NlbWJseS5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFz
c2VtYmx5LmFzbQpAQCAtMjU2LDYgKzI1Niw3IEBAIG1hY3JvIHRocm93RXhjZXB0aW9uKGV4Y2Vw
dGlvbikKIGVuZAogCiBtYWNybyBjYWxsV2FzbVNsb3dQYXRoKHNsb3dQYXRoKQorICAgIHN0b3Jl
aSBQQywgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2ZyXQogICAgIHBy
ZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQpA
QCAtMjc0LDYgKzI3NSwxNCBAQCBtYWNybyBjYWxsV2FzbUNhbGxTbG93UGF0aChzbG93UGF0aCwg
YWN0aW9uKQogICAgIGFjdGlvbihyMCwgcjEpCiBlbmQKIAorbWFjcm8gcmVzdG9yZVN0YWNrUG9p
bnRlckFmdGVyQ2FsbCgpCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHdzMQorICAgIGxvYWRp
IFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjptX251bUNhbGxlZUxvY2Fsc1t3czFdLCB3czEKKyAg
ICBsc2hpZnRwIDMsIHdzMQorICAgIGFkZHAgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGws
IHdzMQorICAgIHN1YnAgY2ZyLCB3czEsIHNwCitlbmQKKwogbWFjcm8gd2FzbVByb2xvZ3VlKGNv
ZGVCbG9ja0dldHRlciwgY29kZUJsb2NrU2V0dGVyLCBsb2FkV2FzbUluc3RhbmNlKQogICAgICMg
U2V0IHVwIHRoZSBjYWxsIGZyYW1lIGFuZCBjaGVjayBpZiB3ZSBzaG91bGQgT1NSLgogICAgIHBy
ZXNlcnZlQ2FsbGVyUENBbmRDRlIoKQpAQCAtMjgxLDYgKzI5MCw5IEBAIG1hY3JvIHdhc21Qcm9s
b2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9ja1NldHRlciwgbG9hZFdhc21JbnN0YW5jZSkK
ICAgICBsb2FkV2FzbUluc3RhbmNlKCkKICAgICByZWxvYWRNZW1vcnlSZWdpc3RlcnNGcm9tSW5z
dGFuY2Uod2FzbUluc3RhbmNlLCB3czAsIHdzMSkKIAorICAgIGxvYWRwIFdhc206Okluc3RhbmNl
OjptX293bmVyW3dhc21JbnN0YW5jZV0sIHdzMAorICAgIHN0b3JlcCB3czAsIFRoaXNBcmd1bWVu
dE9mZnNldFtjZnJdCisKICAgICBjb2RlQmxvY2tHZXR0ZXIod3MwKQogICAgIGNvZGVCbG9ja1Nl
dHRlcih3czApCiAKQEAgLTMzMywxNSArMzQ1LDE5IEBAIG1hY3JvIHRyYWNlRXhlY3V0aW9uKCkK
ICAgICBlbmQKIGVuZAogCi0jIExlc3MgY29udmVuaWVudCwgYnV0IHJlcXVpcmVkIGZvciBvcGNv
ZGVzIHRoYXQgY29sbGlkZSB3aXRoIHJlc2VydmVkIGluc3RydWN0aW9ucyAoZS5nLiB3YXNtX25v
cCkKLW1hY3JvIHVucHJlZml4ZWRXYXNtT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBmbikK
LSAgICBjb21tb25PcChvcGNvZGVOYW1lLCB0cmFjZUV4ZWN1dGlvbiwgbWFjcm8oc2l6ZSkKK21h
Y3JvIGNvbW1vbldhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHByb2xvZ3VlLCBmbikK
KyAgICBjb21tb25PcChvcGNvZGVOYW1lLCBwcm9sb2d1ZSwgbWFjcm8oc2l6ZSkKICAgICAgICAg
Zm4obWFjcm8oZm4yKQogICAgICAgICAgICAgZm4yKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwg
c2l6ZSkKICAgICAgICAgZW5kKQogICAgIGVuZCkKIGVuZAogCisjIExlc3MgY29udmVuaWVudCwg
YnV0IHJlcXVpcmVkIGZvciBvcGNvZGVzIHRoYXQgY29sbGlkZSB3aXRoIHJlc2VydmVkIGluc3Ry
dWN0aW9ucyAoZS5nLiB3YXNtX25vcCkKK21hY3JvIHVucHJlZml4ZWRXYXNtT3Aob3Bjb2RlTmFt
ZSwgb3Bjb2RlU3RydWN0LCBmbikKKyAgICBjb21tb25XYXNtT3Aob3Bjb2RlTmFtZSwgb3Bjb2Rl
U3RydWN0LCB0cmFjZUV4ZWN1dGlvbiwgZm4pCitlbmQKKwogbWFjcm8gd2FzbU9wKG9wY29kZU5h
bWUsIG9wY29kZVN0cnVjdCwgZm4pCiAgICAgdW5wcmVmaXhlZFdhc21PcCh3YXNtXyVvcGNvZGVO
YW1lJSwgb3Bjb2RlU3RydWN0LCBmbikKIGVuZApAQCAtNTEyLDYgKzUyOCwxNiBAQCBvcCh3YXNt
X2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RscywgbWFjcm8gKCkKICAgICB3YXNtTmV4dEluc3RydWN0
aW9uKCkKIGVuZCkKIAorbWFjcm8ganVtcFRvRXhjZXB0aW9uKCkKKyAgICBpZiBBUk02NEUKKyAg
ICAgICAgbW92ZSByMCwgYTAKKyAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlND
OjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OmV4Y2VwdGlvbkhh
bmRsZXIpICogUHRyU2l6ZSwgYTEKKyAgICAgICAgam1wIFthMV0sIE5hdGl2ZVRvSklUR2F0ZVB0
clRhZyAjIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKKyAgICBlbHNlCisgICAgICAgIGptcCByMCwg
RXhjZXB0aW9uSGFuZGxlclB0clRhZworICAgIGVuZAorZW5kCisKIG9wKHdhc21fdGhyb3dfZnJv
bV9zbG93X3BhdGhfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAgICBsb2FkcCBXYXNtOjpJbnN0YW5j
ZTo6bV9wb2ludGVyVG9Ub3BFbnRyeUZyYW1lW3dhc21JbnN0YW5jZV0sIHQ1CiAgICAgbG9hZHAg
W3Q1XSwgdDUKQEAgLTUyMywxNCArNTQ5LDcgQEAgb3Aod2FzbV90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lLCBtYWNybyAoKQogICAgICMgU2xvdyBwYXRocyBhbmQgdGhlIHRocm93RXhj
ZXB0aW9uIG1hY3JvIHN0b3JlIHRoZSBleGNlcHRpb24gY29kZSBpbiB0aGUgQXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgc2xvdAogICAgIGxvYWRpIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ICsgUGF5bG9hZE9mZnNldFtjZnJdLCBhMwogICAgIGNDYWxsNChfc2xvd19wYXRoX3dhc21fdGhy
b3dfZXhjZXB0aW9uKQotCi0gICAgaWYgQVJNNjRFCi0gICAgICAgIG1vdmUgcjAsIGEwCi0gICAg
ICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRl
TWFwICsgKGNvbnN0ZXhwciBHYXRlOjpleGNlcHRpb25IYW5kbGVyKSAqIFB0clNpemUsIGExCi0g
ICAgICAgIGptcCBbYTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBFeGNlcHRpb25IYW5kbGVy
UHRyVGFnCi0gICAgZWxzZQotICAgICAgICBqbXAgcjAsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcK
LSAgICBlbmQKKyAgICBqdW1wVG9FeGNlcHRpb24oKQogZW5kKQogCiBtYWNybyB3YXNtX3Rocm93
X2Zyb21fZmF1bHRfaGFuZGxlcihpbnN0YW5jZSkKQEAgLTU0MywxNCArNTYyLDcgQEAgbWFjcm8g
d2FzbV90aHJvd19mcm9tX2ZhdWx0X2hhbmRsZXIoaW5zdGFuY2UpCiAgICAgbW92ZSAwLCBhMQog
ICAgIG1vdmUgY2ZyLCBhMAogICAgIGNDYWxsNChfc2xvd19wYXRoX3dhc21fdGhyb3dfZXhjZXB0
aW9uKQotCi0gICAgaWYgQVJNNjRFCi0gICAgICAgIG1vdmUgcjAsIGEwCi0gICAgICAgIGxlYXAg
SlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNv
bnN0ZXhwciBHYXRlOjpleGNlcHRpb25IYW5kbGVyKSAqIFB0clNpemUsIGExCi0gICAgICAgIGpt
cCBbYTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBFeGNlcHRpb25IYW5kbGVyUHRyVGFnCi0g
ICAgZWxzZQotICAgICAgICBqbXAgcjAsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLSAgICBlbmQK
KyAgICBqdW1wVG9FeGNlcHRpb24oKQogZW5kCiAKIG9wKHdhc21fdGhyb3dfZnJvbV9mYXVsdF9o
YW5kbGVyX3RyYW1wb2xpbmVfZmFzdFRMUywgbWFjcm8gKCkKQEAgLTc3MCwxMSArNzgyLDExIEBA
IG1hY3JvIHNsb3dQYXRoRm9yV2FzbUNhbGwoY3R4LCBzbG93UGF0aCwgc3RvcmVXYXNtSW5zdGFu
Y2UpCiAKICAgICAgICAgICAgICMgTG9hZCByZWdpc3RlcnMgZnJvbSBzdGFjawogICAgICAgICAg
ICAgZm9yRWFjaEFyZ3VtZW50R1BSKG1hY3JvIChvZmZzZXQsIGdwcikKLSAgICAgICAgICAgICAg
ICBsb2FkcSBDYWxsRnJhbWVIZWFkZXJTaXplICsgb2Zmc2V0W3NwLCB3czEsIDhdLCBncHIKKyAg
ICAgICAgICAgICAgICBsb2FkcSBDYWxsRnJhbWVIZWFkZXJTaXplICsgOCArIG9mZnNldFtzcCwg
d3MxLCA4XSwgZ3ByCiAgICAgICAgICAgICBlbmQpCiAKICAgICAgICAgICAgIGZvckVhY2hBcmd1
bWVudEZQUihtYWNybyAob2Zmc2V0LCBmcHIpCi0gICAgICAgICAgICAgICAgbG9hZGQgQ2FsbEZy
YW1lSGVhZGVyU2l6ZSArIG9mZnNldFtzcCwgd3MxLCA4XSwgZnByCisgICAgICAgICAgICAgICAg
bG9hZGQgQ2FsbEZyYW1lSGVhZGVyU2l6ZSArIDggKyBvZmZzZXRbc3AsIHdzMSwgOF0sIGZwcgog
ICAgICAgICAgICAgZW5kKQogCiAgICAgICAgICAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXpl
LCBzcApAQCAtODExLDExICs4MjMsNyBAQCBtYWNybyBzbG93UGF0aEZvcldhc21DYWxsKGN0eCwg
c2xvd1BhdGgsIHN0b3JlV2FzbUluc3RhbmNlKQogICAgICAgICAgICAgICAgIGRlZmluZVJldHVy
bkxhYmVsKG9wY29kZU5hbWUsIHNpemUpCiAgICAgICAgICAgICBlbmQpCiAKLSAgICAgICAgICAg
IGxvYWRwIENvZGVCbG9ja1tjZnJdLCB3czEKLSAgICAgICAgICAgIGxvYWRpIFdhc206OkZ1bmN0
aW9uQ29kZUJsb2NrOjptX251bUNhbGxlZUxvY2Fsc1t3czFdLCB3czEKLSAgICAgICAgICAgIGxz
aGlmdHAgMywgd3MxCi0gICAgICAgICAgICBhZGRwIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsLCB3czEKLSAgICAgICAgICAgIHN1YnAgY2ZyLCB3czEsIHNwCisgICAgICAgICAgICByZXN0
b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKIAogICAgICAgICAgICAgIyBXZSBuZWVkIHRvIHNl
dCBQQyB0byBsb2FkIGluZm9ybWF0aW9uIGZyb20gdGhlIGluc3RydWN0aW9uIHN0cmVhbSwgYnV0
IHdlCiAgICAgICAgICAgICAjIG5lZWQgdG8gcHJlc2VydmUgaXRzIGN1cnJlbnQgdmFsdWUgc2lu
Y2UgaXQgbWlnaHQgY29udGFpbiBhIHJldHVybiB2YWx1ZQpAQCAtODM2LDExICs4NDQsMTEgQEAg
bWFjcm8gc2xvd1BhdGhGb3JXYXNtQ2FsbChjdHgsIHNsb3dQYXRoLCBzdG9yZVdhc21JbnN0YW5j
ZSkKICAgICAgICAgICAgIHdnZXR1KGN0eCwgbV9udW1iZXJPZlN0YWNrQXJncywgd3MwKQogICAg
ICAgICAgICAgbW92ZSBtZW1vcnlCYXNlLCBQQwogICAgICAgICAgICAgZm9yRWFjaEFyZ3VtZW50
R1BSKG1hY3JvIChvZmZzZXQsIGdwcikKLSAgICAgICAgICAgICAgICBzdG9yZXEgZ3ByLCBDYWxs
RnJhbWVIZWFkZXJTaXplICsgb2Zmc2V0W3dzMSwgd3MwLCA4XQorICAgICAgICAgICAgICAgIHN0
b3JlcSBncHIsIENhbGxGcmFtZUhlYWRlclNpemUgKyA4ICsgb2Zmc2V0W3dzMSwgd3MwLCA4XQog
ICAgICAgICAgICAgZW5kKQogCiAgICAgICAgICAgICBmb3JFYWNoQXJndW1lbnRGUFIobWFjcm8g
KG9mZnNldCwgZnByKQotICAgICAgICAgICAgICAgIHN0b3JlZCBmcHIsIENhbGxGcmFtZUhlYWRl
clNpemUgKyBvZmZzZXRbd3MxLCB3czAsIDhdCisgICAgICAgICAgICAgICAgc3RvcmVkIGZwciwg
Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIDggKyBvZmZzZXRbd3MxLCB3czAsIDhdCiAgICAgICAgICAg
ICBlbmQpCiAKICAgICAgICAgICAgIGxvYWRpIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsg
VGFnT2Zmc2V0W2Nmcl0sIFBDCkBAIC0yODA0LDMgKzI4MTIsMTE0IEBAIHdhc21PcChhdG9taWNf
ZmVuY2UsIFdhc21Ecm9wS2VlcCwgbWFjcm8oY3R4KQogICAgIGZlbmNlCiAgICAgZGlzcGF0Y2go
Y3R4KQogZW5kKQorCit3YXNtT3AodGhyb3csIFdhc21UaHJvdywgbWFjcm8oY3R4KQorICAgIGxv
YWRwIFdhc206Okluc3RhbmNlOjptX3BvaW50ZXJUb1RvcEVudHJ5RnJhbWVbd2FzbUluc3RhbmNl
XSwgdDUKKyAgICBsb2FkcCBbdDVdLCB0NQorICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHQ1KQorCisgICAgY2FsbFdhc21TbG93UGF0aChfc2xvd19wYXRo
X3dhc21fdGhyb3cpCisgICAganVtcFRvRXhjZXB0aW9uKCkKK2VuZCkKKword2FzbU9wKHJldGhy
b3csIFdhc21SZXRocm93LCBtYWNybyhjdHgpCisgICAgY2FsbFdhc21TbG93UGF0aChfc2xvd19w
YXRoX3dhc21fcmV0aHJvdykKKyAgICBqdW1wVG9FeGNlcHRpb24oKQorZW5kKQorCittYWNybyBj
YXRjaEltcGwoY3R4LCBzdG9yZVdhc21JbnN0YW5jZSkKKyAgICBsb2FkcCBDYWxsZWVbY2ZyXSwg
dDMKKyAgICBjb252ZXJ0Q2FsbGVlVG9WTSh0MykKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodDMsIHQwKQorCisgICAgbG9hZHAgVk06OmNh
bGxlZUZvcldhc21DYXRjaFt0M10sIHdzMQorICAgIHN0b3JlcCAwLCBWTTo6Y2FsbGVlRm9yV2Fz
bUNhdGNoW3QzXQorICAgIHN0b3JlcCB3czEsIENhbGxlZVtjZnJdCisKKyAgICBsb2FkcCBWTTo6
Y2FsbEZyYW1lRm9yQ2F0Y2hbdDNdLCBjZnIKKyAgICBzdG9yZXAgMCwgVk06OmNhbGxGcmFtZUZv
ckNhdGNoW3QzXQorCisgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCisKKyAgICBs
b2FkcCBUaGlzQXJndW1lbnRPZmZzZXRbY2ZyXSwgd2FzbUluc3RhbmNlCisgICAgbG9hZHAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjptX2luc3RhbmNlW3dhc21JbnN0YW5jZV0sIHdhc21JbnN0YW5j
ZQorICAgIHN0b3JlV2FzbUluc3RhbmNlKHdhc21JbnN0YW5jZSkKKyAgICByZWxvYWRNZW1vcnlS
ZWdpc3RlcnNGcm9tSW5zdGFuY2Uod2FzbUluc3RhbmNlLCB3czAsIHdzMSkKKworICAgIGxvYWRw
IENvZGVCbG9ja1tjZnJdLCBQQgorICAgIGxvYWRwIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpt
X2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgorICAgIGxvYWRwIFZNOjp0YXJnZXRJbnRl
cnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQworICAgIHN1YnAgUEIsIFBDCisKKyAgICBjYWxsV2Fz
bVNsb3dQYXRoKF9zbG93X3BhdGhfd2FzbV9yZXRyaWV2ZV9hbmRfY2xlYXJfZXhjZXB0aW9uKQor
ICAgIG1vdmUgcjEsIHQxCisKKyAgICB3Z2V0dShjdHgsIG1fc3RhcnRPZmZzZXQsIHQyKQorICAg
IHdnZXR1KGN0eCwgbV9hcmd1bWVudENvdW50LCB0MykKKworICAgIGxzaGlmdGkgMywgdDIKKyAg
ICBzdWJwIGNmciwgdDIsIHQyCisKKy5jb3B5TG9vcDoKKyAgICBidGl6IHQzLCAuZG9uZQorICAg
IGxvYWRxIFt0MV0sIHQ2CisgICAgc3RvcmVxIHQ2LCBbdDJdCisgICAgc3ViaSAxLCB0MworICAg
ICMgRklYTUU6IFVzZSBhcm0gc3RvcmUtYWRkL3N1YiBpbnN0cnVjdGlvbnMgaW4gd2FzbSBMTElu
dCBjYXRjaAorICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
MTIxMAorICAgIHN1YnAgOCwgdDIKKyAgICBhZGRwIDgsIHQxCisgICAgam1wIC5jb3B5TG9vcAor
CisuZG9uZToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisKKyAgICBkaXNwYXRjaChjdHgpCitlbmQK
KworY29tbW9uV2FzbU9wKHdhc21fY2F0Y2gsIFdhc21DYXRjaCwgbWFjcm8oKSBlbmQsIG1hY3Jv
KGN0eCkKKyAgICBjYXRjaEltcGwoY3R4LCBzdG9yZVdhc21JbnN0YW5jZVRvVExTKQorZW5kKQor
Citjb21tb25XYXNtT3Aod2FzbV9jYXRjaF9ub190bHMsIFdhc21DYXRjaCwgbWFjcm8oKSBlbmQs
IG1hY3JvKGN0eCkKKyAgICBjYXRjaEltcGwoY3R4LCBtYWNybyhpbnN0YW5jZSkgZW5kKQorZW5k
KQorCittYWNybyBjYXRjaEFsbEltcGwoY3R4LCBzdG9yZVdhc21JbnN0YW5jZSkKKyAgICBsb2Fk
cCBDYWxsZWVbY2ZyXSwgdDMKKyAgICBjb252ZXJ0Q2FsbGVlVG9WTSh0MykKKyAgICByZXN0b3Jl
Q2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodDMsIHQwKQorCisg
ICAgbG9hZHAgVk06OmNhbGxlZUZvcldhc21DYXRjaFt0M10sIHdzMQorICAgIHN0b3JlcCAwLCBW
TTo6Y2FsbGVlRm9yV2FzbUNhdGNoW3QzXQorICAgIHN0b3JlcCB3czEsIENhbGxlZVtjZnJdCisK
KyAgICBsb2FkcCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hbdDNdLCBjZnIKKyAgICBzdG9yZXAgMCwg
Vk06OmNhbGxGcmFtZUZvckNhdGNoW3QzXQorCisgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVy
Q2FsbCgpCisKKyAgICBsb2FkcCBUaGlzQXJndW1lbnRPZmZzZXRbY2ZyXSwgd2FzbUluc3RhbmNl
CisgICAgbG9hZHAgSlNXZWJBc3NlbWJseUluc3RhbmNlOjptX2luc3RhbmNlW3dhc21JbnN0YW5j
ZV0sIHdhc21JbnN0YW5jZQorICAgIHN0b3JlV2FzbUluc3RhbmNlKHdhc21JbnN0YW5jZSkKKyAg
ICByZWxvYWRNZW1vcnlSZWdpc3RlcnNGcm9tSW5zdGFuY2Uod2FzbUluc3RhbmNlLCB3czAsIHdz
MSkKKworICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgIGxvYWRwIFdhc206OkZ1bmN0
aW9uQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgorICAgIGxvYWRw
IFZNOjp0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQworICAgIHN1YnAgUEIsIFBD
CisKKyAgICBjYWxsV2FzbVNsb3dQYXRoKF9zbG93X3BhdGhfd2FzbV9yZXRyaWV2ZV9hbmRfY2xl
YXJfZXhjZXB0aW9uKQorCisgICAgdHJhY2VFeGVjdXRpb24oKQorCisgICAgZGlzcGF0Y2goY3R4
KQorZW5kCisKK2NvbW1vbldhc21PcCh3YXNtX2NhdGNoX2FsbCwgV2FzbUNhdGNoQWxsLCBtYWNy
bygpIGVuZCwgbWFjcm8oY3R4KQorICAgIGNhdGNoQWxsSW1wbChjdHgsIHN0b3JlV2FzbUluc3Rh
bmNlVG9UTFMpCitlbmQpCisKK2NvbW1vbldhc21PcCh3YXNtX2NhdGNoX2FsbF9ub190bHMsIFdh
c21DYXRjaEFsbCwgbWFjcm8oKSBlbmQsIG1hY3JvKGN0eCkKKyAgICBjYXRjaEFsbEltcGwoY3R4
LCBtYWNybyhpbnN0YW5jZSkgZW5kKQorZW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvckluc3RhbmNlLmNwcAppbmRleCBkZmI5MzE4OGMwOGZkOGRiYWQzYmY3Zjg1
ZTE4NTJiNTI0MDZiNWQ2Li5iNmNhNWJjNDIzNmI5ZDU2NWY1OGM4NmE5NzBjYTM3NjU1OTA5NTAy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNw
cApAQCAtNDAsNiArNDAsOSBAQCBFcnJvckluc3RhbmNlOjpFcnJvckluc3RhbmNlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVycm9yVHlwZSBlcnJvclR5cGUpCiAgICAgLCBtX291dE9m
TWVtb3J5RXJyb3IoZmFsc2UpCiAgICAgLCBtX2Vycm9ySW5mb01hdGVyaWFsaXplZChmYWxzZSkK
ICAgICAsIG1fbmF0aXZlR2V0dGVyVHlwZUVycm9yKGZhbHNlKQorI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKyAgICAsIG1fY2F0Y2hhYmxlRnJvbVdhc20odHJ1ZSkKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9ySW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9ySW5zdGFuY2UuaAppbmRleCA3ZDJlNjQzMjZhODFkYjZjNzcwYTQ2M2Q4Zjk2Mzc2NzNkZmIy
OTNiLi5lZmY1ZTk4NzI0YjkwNjIxYjE4MjIwMjlhMDk1MDZiOWM3OTllMWZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCkBAIC04MCw2ICs4MCwx
MSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROYXRpdmVHZXR0ZXJUeXBlRXJyb3IoKSB7IG1fbmF0
aXZlR2V0dGVyVHlwZUVycm9yID0gdHJ1ZTsgfQogICAgIGJvb2wgaXNOYXRpdmVHZXR0ZXJUeXBl
RXJyb3IoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUdldHRlclR5cGVFcnJvcjsgfQogCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHZvaWQgc2V0Q2F0Y2hhYmxlRnJvbVdhc20oYm9vbCBm
bGFnKSB7IG1fY2F0Y2hhYmxlRnJvbVdhc20gPSBmbGFnOyB9CisgICAgYm9vbCBpc0NhdGNoYWJs
ZUZyb21XYXNtKCkgY29uc3QgeyByZXR1cm4gbV9jYXRjaGFibGVGcm9tV2FzbTsgfQorI2VuZGlm
CisKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc2FuaXRpemVkVG9TdHJpbmcoSlNHbG9i
YWxPYmplY3QqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc2FuaXRpemVkTWVzc2Fn
ZVN0cmluZyhKU0dsb2JhbE9iamVjdCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBz
YW5pdGl6ZWROYW1lU3RyaW5nKEpTR2xvYmFsT2JqZWN0Kik7CkBAIC0xMTYsNiArMTIxLDkgQEAg
cHJvdGVjdGVkOgogICAgIGJvb2wgbV9vdXRPZk1lbW9yeUVycm9yIDogMTsKICAgICBib29sIG1f
ZXJyb3JJbmZvTWF0ZXJpYWxpemVkIDogMTsKICAgICBib29sIG1fbmF0aXZlR2V0dGVyVHlwZUVy
cm9yIDogMTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgYm9vbCBtX2NhdGNoYWJsZUZy
b21XYXNtIDogMTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggMjk3ZmNk
Njk4ZmZiYTk0Yjc3MjZkZTY3ZDE5YjI0MjU5NzAzYTMyYi4uMzE5ZTRiM2Q4YWIxODMwMDYwZjIy
NTc2MWExOTJiY2NiODA0MzdkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMTUzLDYgKzE1Myw3IEBACiAjaW5jbHVkZSAiSlNX
ZWFrU2V0LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseS5oIgogI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3IuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUdsb2JhbC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKQEAgLTE2
MCw2ICsxNjEsNyBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRh
YmxlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhZy5oIgogI2luY2x1ZGUgIkpTV2l0aFNj
b3BlLmgiCiAjaW5jbHVkZSAiTGF6eUNsYXNzU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUg
IkxhenlQcm9wZXJ0eUlubGluZXMuaCIKQEAgLTIyMCw2ICsyMjIsOCBAQAogI2luY2x1ZGUgIldl
YWtTZXRQcm90b3R5cGUuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCIK
KyNpbmNsdWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1
bmN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5oIgogI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmgiCkBAIC0yMzYsNiArMjQwLDggQEAK
ICNpbmNsdWRlICJXZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oIgogI2luY2x1ZGUg
IldlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFi
bGVQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmgiCisj
aW5jbHVkZSAiV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaCIKICNpbmNsdWRlIDx3dGYvUmFuZG9t
TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1N5c3RlbVRyYWNpbmcuaD4KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggOTYxYzI0N2U5YTc5
MmExYWZlNmM5Yzk4OTQwNzZmMTRmNzA4MmRlYS4uMWJkY2M0ZGU3NGQwOTI0ZDM5Yzg0Zjk1MjVj
NWUwYjNlNmFmNDEwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCkBAIC0xNjksMTQgKzE2OSwxNiBAQCBjb25zdGV4cHIgYm9vbCB0eXBlRXhw
b3NlZEJ5RGVmYXVsdCA9IHRydWU7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAjZGVmaW5l
IEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9SX1RZUEUobWFjcm8pIFwKLSAgICBtYWNy
byhXZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgd2ViQXNzZW1ibHlDb21waWxlRXJyb3IsIHdlYkFz
c2VtYmx5Q29tcGlsZUVycm9yLCBFcnJvckluc3RhbmNlLCAgICAgICAgICAgICBDb21waWxlRXJy
b3IsIGVycm9yLCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAorICAgIG1hY3JvKFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yLCB3ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgd2ViQXNzZW1ibHlDb21waWxl
RXJyb3IsIEVycm9ySW5zdGFuY2UsICAgICAgICAgICAgIENvbXBpbGVFcnJvciwgZXJyb3IsICB0
eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAorICAgIG1hY3JvKFdlYkFzc2VtYmx5RXhjZXB0aW9uLCAg
ICB3ZWJBc3NlbWJseUV4Y2VwdGlvbiwgICAgd2ViQXNzZW1ibHlFeGNlcHRpb24sICAgIEpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24sICAgIEV4Y2VwdGlvbiwgICAgb2JqZWN0LCB0eXBlRXhwb3NlZEJ5
RGVmYXVsdCkgXAogICAgIG1hY3JvKFdlYkFzc2VtYmx5R2xvYmFsLCAgICAgICB3ZWJBc3NlbWJs
eUdsb2JhbCwgICAgICAgd2ViQXNzZW1ibHlHbG9iYWwsICAgICAgIEpTV2ViQXNzZW1ibHlHbG9i
YWwsICAgICAgIEdsb2JhbCwgICAgICAgb2JqZWN0LCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAog
ICAgIG1hY3JvKFdlYkFzc2VtYmx5SW5zdGFuY2UsICAgICB3ZWJBc3NlbWJseUluc3RhbmNlLCAg
ICAgd2ViQXNzZW1ibHlJbnN0YW5jZSwgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgICAgIElu
c3RhbmNlLCAgICAgb2JqZWN0LCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAotICAgIG1hY3JvKFdl
YkFzc2VtYmx5TGlua0Vycm9yLCAgICB3ZWJBc3NlbWJseUxpbmtFcnJvciwgICAgd2ViQXNzZW1i
bHlMaW5rRXJyb3IsICAgIEVycm9ySW5zdGFuY2UsICAgICAgICAgICAgIExpbmtFcnJvciwgICAg
ZXJyb3IsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlMaW5r
RXJyb3IsICAgIHdlYkFzc2VtYmx5TGlua0Vycm9yLCAgICB3ZWJBc3NlbWJseUxpbmtFcnJvciwg
ICAgRXJyb3JJbnN0YW5jZSwgICAgICAgICAgICAgTGlua0Vycm9yLCAgICBlcnJvciwgIHR5cGVF
eHBvc2VkQnlEZWZhdWx0KSBcCiAgICAgbWFjcm8oV2ViQXNzZW1ibHlNZW1vcnksICAgICAgIHdl
YkFzc2VtYmx5TWVtb3J5LCAgICAgICB3ZWJBc3NlbWJseU1lbW9yeSwgICAgICAgSlNXZWJBc3Nl
bWJseU1lbW9yeSwgICAgICAgTWVtb3J5LCAgICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZh
dWx0KSBcCiAgICAgbWFjcm8oV2ViQXNzZW1ibHlNb2R1bGUsICAgICAgIHdlYkFzc2VtYmx5TW9k
dWxlLCAgICAgICB3ZWJBc3NlbWJseU1vZHVsZSwgICAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSwg
ICAgICAgTW9kdWxlLCAgICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCi0gICAg
bWFjcm8oV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVudGltZUVycm9yLCB3
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvciwgRXJyb3JJbnN0YW5jZSwgICAgICAgICAgICAgUnVudGlt
ZUVycm9yLCBlcnJvciwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKLSAgICBtYWNybyhXZWJBc3Nl
bWJseVRhYmxlLCAgICAgICAgd2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIHdlYkFzc2VtYmx5VGFi
bGUsICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUsICAgICAgICBUYWJsZSwgICAgICAgIG9iamVj
dCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpCisgICAgbWFjcm8oV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3IsIHdlYkFzc2VtYmx5UnVudGltZUVycm9yLCB3ZWJBc3NlbWJseVJ1bnRpbWVFcnJvciwgRXJy
b3JJbnN0YW5jZSwgICAgICAgICAgICAgUnVudGltZUVycm9yLCBlcnJvciwgIHR5cGVFeHBvc2Vk
QnlEZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIHdlYkFzc2Vt
Ymx5VGFibGUsICAgICAgICB3ZWJBc3NlbWJseVRhYmxlLCAgICAgICAgSlNXZWJBc3NlbWJseVRh
YmxlLCAgICAgICAgVGFibGUsICAgICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBc
CisgICAgbWFjcm8oV2ViQXNzZW1ibHlUYWcsICAgICAgICAgIHdlYkFzc2VtYmx5VGFnLCAgICAg
ICAgICB3ZWJBc3NlbWJseVRhZywgICAgICAgICAgSlNXZWJBc3NlbWJseVRhZywgICAgICAgICAg
VGFnLCAgICAgICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSAKICNlbHNlCiAjZGVm
aW5lIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9SX1RZUEUobWFjcm8pCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9uc0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgKaW5kZXggNTQwMWZmMzgzMWQ4NjUwNzE1NWIxOTMyNGJlMzk3ZmZiZDMzZDkz
NC4uZTA3ODMzZjQ3YWJjMWE0YjA5MjQyMTVjNTc1N2JmNmViZGU1NjQ2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCkBAIC01NDMsNiArNTQzLDcgQEAg
Ym9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZVRlbXBv
cmFsLCBmYWxzZSwgTm9ybWFsLCAiRXhwb3NlIHRoZSBUZW1wb3JhbCBvYmplY3QuIikgXAogICAg
IHYoQm9vbCwgdXNlV2ViQXNzZW1ibHlUaHJlYWRpbmcsIHRydWUsIE5vcm1hbCwgIkFsbG93IGlu
c3RydWN0aW9ucyBmcm9tIHRoZSB3YXNtIHRocmVhZGluZyBzcGVjLiIpIFwKICAgICB2KEJvb2ws
IHVzZVdlYkFzc2VtYmx5VHlwZWRGdW5jdGlvblJlZmVyZW5jZXMsIGZhbHNlLCBOb3JtYWwsICJB
bGxvdyBmdW5jdGlvbiB0eXBlcyBmcm9tIHRoZSB3YXNtIHR5cGVkIGZ1bmN0aW9uIHJlZmVyZW5j
ZXMgc3BlYy4iKSBcCisgICAgdihCb29sLCB1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMsIHRydWUs
IE5vcm1hbCwgIkFsbG93IHRoZSBuZXcgc2VjdGlvbiBhbmQgaW5zdHJ1Y3Rpb25zIGZyb20gdGhl
IHdhc20gZXhjZXB0aW9uIGhhbmRsaW5nIHNwZWMuIikgXAogCiAKIGVudW0gT3B0aW9uRXF1aXZh
bGVuY2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDk5NmEwNmRhYWJh
ODJjY2VmYjQzZGYzZjY1ZjEzMWU2ZmRlNmVlMDcuLjM4ZTk1MTI5YmE5ZjAyMTEwYTFjNDNlMDUx
YzRhYTY3OGM2ZmQwZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTEy
OSwxMSArMTI5LDEzIEBACiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0UmVmLmgiCiAjaW5jbHVkZSAi
SlNXZWFrU2V0LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5R2xv
YmFsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFn
LmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNp
bmNsdWRlICJNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIgpAQCAtMzM0LDYgKzMzNiw3IEBAIFZN
OjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSwgV1RGOjpSdW5Mb29wKiBydW5M
b29wLCBib29sKiBzdWNjZXNzKQogICAgICwgaW50bFNlZ21lbnRzSGVhcENlbGxUeXBlKElzb0hl
YXBDZWxsVHlwZTo6Y3JlYXRlPEludGxTZWdtZW50cz4oKSkKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5
cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPigpKQorICAgICwgd2ViQXNzZW1ibHlF
eGNlcHRpb25IZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJs
eUV4Y2VwdGlvbj4oKSkKICAgICAsIHdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUoSXNv
SGVhcENlbGxUeXBlOjpjcmVhdGU8V2ViQXNzZW1ibHlGdW5jdGlvbj4oKSkKICAgICAsIHdlYkFz
c2VtYmx5R2xvYmFsSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEpTV2ViQXNz
ZW1ibHlHbG9iYWw+KCkpCiAgICAgLCB3ZWJBc3NlbWJseUluc3RhbmNlSGVhcENlbGxUeXBlKElz
b0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKSkKQEAgLTM0MSw2
ICszNDQsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUsIFdURjo6
UnVuTG9vcCogcnVuTG9vcCwgYm9vbCogc3VjY2VzcykKICAgICAsIHdlYkFzc2VtYmx5TW9kdWxl
SGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEpTV2ViQXNzZW1ibHlNb2R1bGU+
KCkpCiAgICAgLCB3ZWJBc3NlbWJseU1vZHVsZVJlY29yZEhlYXBDZWxsVHlwZShJc29IZWFwQ2Vs
bFR5cGU6OmNyZWF0ZTxXZWJBc3NlbWJseU1vZHVsZVJlY29yZD4oKSkKICAgICAsIHdlYkFzc2Vt
Ymx5VGFibGVIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJs
eVRhYmxlPigpKQorICAgICwgd2ViQXNzZW1ibHlUYWdIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxU
eXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseVRhZz4oKSkKICNlbmRpZgogICAgICwgcHJpbWl0aXZl
R2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiUHJpbWl0aXZlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhl
YXAsIGF1eGlsaWFyeUhlYXBDZWxsVHlwZS5nZXQoKSwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0
b3IuZ2V0KCkpIC8vIEhhc2g6MHgzZTdjZDc2MgogICAgICwganNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5SGVh
cENlbGxUeXBlLmdldCgpLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpIC8vIEhhc2g6
MHgyNDFlOTQ2CkBAIC0xNjI5LDYgKzE2MzMsNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRzU3BhY2UsIGludGxTZWdtZW50c0hlYXBDZWxsVAog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhqc1RvV2FzbUlDQ2FsbGVlU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpT
VG9XYXNtSUNDYWxsZWUpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
d2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSwgd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5
cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spIC8vIEhhc2g6MHg5YWQ5OTVjZAorRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5RXhjZXB0aW9u
U3BhY2UsIHdlYkFzc2VtYmx5RXhjZXB0aW9uSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdl
YkFzc2VtYmx5RnVuY3Rpb25TcGFjZSwgd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZS5n
ZXQoKSwgV2ViQXNzZW1ibHlGdW5jdGlvbikgLy8gSGFzaDoweDhiN2MzMmRiCiBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlHbG9iYWxTcGFjZSwgd2Vi
QXNzZW1ibHlHbG9iYWxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlHbG9iYWwpCiBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlJbnN0YW5j
ZVNwYWNlLCB3ZWJBc3NlbWJseUluc3RhbmNlSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UpCkBAIC0xNjM2LDYgKzE2NDEsNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlNZW1vcnlTcGFjZSwgd2ViQXNzZW1ibHlNZW1v
cgogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5TW9k
dWxlU3BhY2UsIHdlYkFzc2VtYmx5TW9kdWxlSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkU3BhY2UsIHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkSGVhcENlbGxU
eXBlLmdldCgpLCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCkKIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseVRhYmxlU3BhY2UsIHdlYkFzc2VtYmx5VGFi
bGVIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlUYWJsZSkKK0RZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseVRhZ1NwYWNlLCB3ZWJBc3NlbWJs
eVRhZ0hlYXBDZWxsVHlwZS5nZXQoKSwgSlNXZWJBc3NlbWJseVRhZykKIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNl
LCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbikgLy8g
SGFzaDoweGQ0YTVmZjAxCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5k
ZXggN2E1OGIyNzllNjcwYTg0MDNkMWYzOTQxMjM1N2Q1ZTc3MTEzZjU3OC4uYWE4OWIyOGFkZTJm
MjViNmNjODQ0MGQ2MTRiYzk0N2FlM2JhNGY3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNhbGxEYXRh
LmgiCisjaW5jbHVkZSAiQ2FsbGVlQml0cy5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlv
bktpbmQuaCIKICNpbmNsdWRlICJDb21wbGV0ZVN1YnNwYWNlLmgiCiAjaW5jbHVkZSAiQ29uY3Vy
cmVudEpTTG9jay5oIgpAQCAtNDUwLDYgKzQ1MSw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiBpbnRsU2VnbWVudHNIZWFwQ2VsbFR5cGU7CiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29I
ZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5RXhjZXB0aW9uSGVhcENlbGxUeXBlOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5
cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlHbG9i
YWxIZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2Vi
QXNzZW1ibHlJbnN0YW5jZUhlYXBDZWxsVHlwZTsKQEAgLTQ1Nyw2ICs0NTksNyBAQCBwdWJsaWM6
CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlNb2R1bGVI
ZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmRIZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hl
YXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlUYWJsZUhlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseVRhZ0hlYXBDZWxsVHlwZTsKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTYyNiw2ICs2MjksNyBAQCBwdWJsaWM6CiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
anNUb1dhc21JQ0NhbGxlZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIod2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5RXhjZXB0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUZ1bmN0aW9uU3BhY2UpCiAgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUdsb2JhbFNwYWNl
KQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlJbnN0
YW5jZVNwYWNlKQpAQCAtNjMzLDYgKzYzNyw3IEBAIHB1YmxpYzoKICAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5TW9kdWxlU3BhY2UpCiAgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseU1vZHVsZVJlY29yZFNwYWNl
KQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlUYWJs
ZVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1i
bHlUYWdTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uU3BhY2UpCiAjZW5kaWYKIApAQCAtODk2LDYgKzkwMSwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGNhbGxGcmFtZUZv
ckNhdGNoKTsKICAgICB9CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IGNhbGxlZUZvcldhc21DYXRj
aE9mZnNldCgpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCBjYWxs
ZWVGb3JXYXNtQ2F0Y2gpOworICAgIH0KKwogICAgIHN0YXRpYyBwdHJkaWZmX3QgdG9wRW50cnlG
cmFtZU9mZnNldCgpCiAgICAgewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCB0
b3BFbnRyeUZyYW1lKTsKQEAgLTk5MCw2ICsxMDAwLDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVk
IHZhcmFyZ3NMZW5ndGg7CiAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWVSZXR1cm5WYWx1ZTsK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZUZvckNhdGNoOworICAgIENhbGxlZUJpdHMgY2FsbGVl
Rm9yV2FzbUNhdGNoOwogICAgIHZvaWQqIHRhcmdldE1hY2hpbmVQQ0ZvclRocm93OwogICAgIGNv
bnN0IEluc3RydWN0aW9uKiB0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3c7CiAgICAgdWludDMy
X3Qgb3NyRXhpdEluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21B
aXJJUkdlbmVyYXRvci5jcHAKaW5kZXggZjljMjk0NjAwNjE4NzNkMDA0NDk4YTgwMDQ0NjYyY2Uy
MTdmNmJlNC4uNzkyODJiNzdlNzg2MTYxZDVkZjA4YTZkZjgxYTQyZmVlMTE4MzlmYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCkBA
IC0xNDcsNyArMTQ3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBi
b29sIGlzSWYoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxv
Y2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZjsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShj
b25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9
PSBCbG9ja1R5cGU6OlRyeTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNoKGNvbnN0IENv
bnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2Nr
VHlwZTo6Q2F0Y2g7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250
cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5
cGU6OkNhdGNoOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJv
bERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBl
OjpUb3BMZXZlbDsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0xvb3AoY29uc3QgQ29udHJvbERh
dGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpM
b29wOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQmxvY2soY29uc3QgQ29udHJvbERhdGEmIGNv
bnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpCbG9jazsg
fQogCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICB7
CkBAIC0xNjQsNiArMTY5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBl
OjpUb3BMZXZlbDoKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIlRvcExldmVsOiAiKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpUcnk6Cisg
ICAgICAgICAgICAgICAgb3V0LnByaW50KCJUcnk6ICIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OkNhdGNoOgorICAgICAgICAgICAgICAgIG91
dC5wcmludCgiQ2F0Y2g6ICIpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgb3V0LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24s
ICIsIFNwZWNpYWw6ICIpOwogICAgICAgICAgICAgaWYgKHNwZWNpYWwpCkBAIC0zMTQsNiArMzI1
LDE2IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRF
bHNlKENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOwogCisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVHJ5KEJsb2NrU2lnbmF0dXJlLCBT
dGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFj
ayk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2godW5zaWdu
ZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFN0YWNrJiwgQ29udHJvbFR5cGUm
LCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbChTdGFjayYsIENvbnRyb2xUeXBlJik7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENv
bnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRGVs
ZWdhdGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYsIENv
bnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGhy
b3codW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3Ms
IFN0YWNrJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0aHJv
dyh1bnNpZ25lZCwgQ29udHJvbFR5cGUmKTsKKwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJiByZXR1
cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5j
aChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHJl
dHVyblZhbHVlcyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dp
dGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4m
IHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywgY29uc3QgU3RhY2smIGV4cHJl
c3Npb25TdGFjayk7CkBAIC0yOTgyLDYgKzMwMDMsNjAgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQK
ICAgICByZXR1cm4geyB9OwogfQogCisvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIFdhc20gZXhj
ZXB0aW9ucyBpbiB0aGUgQWlyIGdlbmVyYXRvcgorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMTIxMQorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KEJsb2Nr
U2lnbmF0dXJlLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgU3RhY2smKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2go
dW5zaWduZWQsIGNvbnN0IFNpZ25hdHVyZSYsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRM
aXN0JikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hU
b1VucmVhY2hhYmxlKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmLCBDb250cm9sVHlwZSYsIFJl
c3VsdExpc3QmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRD
YXRjaEFsbChTdGFjayYsIENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJikgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUoQ29udHJv
bFR5cGUmLCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYsIENvbnRyb2xUeXBl
JikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGhyb3codW5z
aWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mLCBTdGFjayYpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBVTlVTRURfUEFSQU0oZXhjZXB0aW9uSW5kZXgpOworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJldGhyb3codW5zaWdu
ZWQsIENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9
CisKIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYgZGF0
YSwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIENh
bGxJbmZvcm1hdGlvbiB3YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxs
SW5mb3JtYXRpb25Gb3IoKmRhdGEuc2lnbmF0dXJlKCksIENhbGxSb2xlOjpDYWxsZWUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4
IDA4MWNjMmIyNTVlZmQ5NTU3MWMzZTU5MTFlNDM3ODBiNzk0Y2MzYTAuLmZlNmIzOGYzY2MzYzJi
ZDQxZTUwN2JmYzMxMmU0YjA2NWI5ODUzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTQ4LDYgKzQ4LDggQEAKICNpbmNsdWRl
ICJCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJQcm9iZUNv
bnRleHQuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRl
ICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKQEAgLTgzLDE4ICs4NSwz
MyBAQCBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogfQogCitjbGFz
cyBCM0lSR2VuZXJhdG9yOworc3RydWN0IFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgeworICAg
IHZvaWQgZ2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYsIEIzSVJHZW5lcmF0b3IqKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgc19pbnZhbGlkQ2FsbFNpdGVJbmRleCA9ICBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCk7CisKKyAgICB1bnNpZ25lZCBtX2NhbGxTaXRlSW5kZXgge3NfaW52YWxp
ZENhbGxTaXRlSW5kZXggfTsKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKIGNsYXNzIEIz
SVJHZW5lcmF0b3IgewogcHVibGljOgotICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVmFsdWUq
OworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVmFyaWFibGUqOwogICAgIHVzaW5nIFJlc3Vs
dExpc3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDg+OwogCiAgICAgc3RydWN0IENvbnRyb2xE
YXRhIHsKLSAgICAgICAgQ29udHJvbERhdGEoUHJvY2VkdXJlJiBwcm9jLCBPcmlnaW4gb3JpZ2lu
LCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIEJsb2NrVHlwZSB0eXBlLCBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24sIEJhc2ljQmxvY2sqIHNwZWNpYWwgPSBudWxscHRyKQorICAgICAgICBDb250
cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSwgQmxvY2tUeXBlIHR5cGUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgQmFzaWNCbG9jayog
Y29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKICAgICAgICAgICAg
IDogY29udHJvbEJsb2NrVHlwZSh0eXBlKQogICAgICAgICAgICAgLCBtX3NpZ25hdHVyZShzaWdu
YXR1cmUpCisgICAgICAgICAgICAsIG1fc3RhY2tTaXplKHN0YWNrU2l6ZSkKICAgICAgICAgICAg
ICwgY29udGludWF0aW9uKGNvbnRpbnVhdGlvbikKICAgICAgICAgICAgICwgc3BlY2lhbChzcGVj
aWFsKQogICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQodHlwZSAhPSBCbG9ja1R5cGU6OlRy
eSAmJiB0eXBlICE9IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0g
QmxvY2tUeXBlOjpUb3BMZXZlbCkKKyAgICAgICAgICAgICAgICBtX3N0YWNrU2l6ZSAtPSBzaWdu
YXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKKwogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQmxvY2tU
eXBlOjpMb29wKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIHBoaXMu
YXBwZW5kKHByb2MuYWRkPFZhbHVlPihQaGksIHRvQjNUeXBlKHNpZ25hdHVyZS0+YXJndW1lbnQo
aSkpLCBvcmlnaW4pKTsKQEAgLTEwNCwxMiArMTIxLDM3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCisgICAgICAgIENvbnRyb2xEYXRhKFByb2NlZHVyZSYgcHJvYywgT3Jp
Z2luIG9yaWdpbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBCbG9ja1R5cGUgdHlwZSwgdW5z
aWduZWQgc3RhY2tTaXplLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24sIHVuc2lnbmVkIHRyeVN0
YXJ0LCB1bnNpZ25lZCB0cnlEZXB0aCkKKyAgICAgICAgICAgIDogY29udHJvbEJsb2NrVHlwZSh0
eXBlKQorICAgICAgICAgICAgLCBtX3NpZ25hdHVyZShzaWduYXR1cmUpCisgICAgICAgICAgICAs
IG1fc3RhY2tTaXplKHN0YWNrU2l6ZSkKKyAgICAgICAgICAgICwgY29udGludWF0aW9uKGNvbnRp
bnVhdGlvbikKKyAgICAgICAgICAgICwgc3BlY2lhbChudWxscHRyKQorICAgICAgICAgICAgLCBt
X3RyeVN0YXJ0KHRyeVN0YXJ0KQorICAgICAgICAgICAgLCBtX3RyeURlcHRoKHRyeURlcHRoKQor
ICAgICAgICB7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0ocHJvYyk7CisgICAgICAgICAgICBV
TlVTRURfUEFSQU0ob3JpZ2luKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaWduYXR1cmUtPnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAgICAgICAgICBwaGlzLmFw
cGVuZChwcm9jLmFkZDxWYWx1ZT4oUGhpLCB0b0IzVHlwZShzaWduYXR1cmUtPnJldHVyblR5cGUo
aSkpLCBvcmlnaW4pKTsKKyAgICAgICAgfQorCiAgICAgICAgIENvbnRyb2xEYXRhKCkKICAgICAg
ICAgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNJZihjb25zdCBDb250cm9s
RGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6
OklmOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzVHJ5KGNvbnN0IENvbnRyb2xEYXRhJiBjb250
cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VHJ5OyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGlzQW55Q2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wp
IHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpDYXRjaDsgfQogICAg
ICAgICBzdGF0aWMgYm9vbCBpc1RvcExldmVsKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7
IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWw7IH0KKyAg
ICAgICAgc3RhdGljIGJvb2wgaXNMb29wKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJl
dHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcDsgfQorICAgICAgICBz
dGF0aWMgYm9vbCBpc0Jsb2NrKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBj
b250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6QmxvY2s7IH0KKyAgICAgICAgc3RhdGlj
IGJvb2wgaXNDYXRjaChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvbnRyb2wuYmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBlOjpDYXRjaCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gY29udHJvbC5j
YXRjaEtpbmQoKSA9PSBDYXRjaEtpbmQ6OkNhdGNoOworICAgICAgICB9CiAKICAgICAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIHsKQEAgLTEyNiw2ICsxNjgs
MTIgQEAgcHVibGljOgogICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRvcExldmVsOgogICAg
ICAgICAgICAgICAgIG91dC5wcmludCgiVG9wTGV2ZWw6ICIpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRyeToKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIlRyeTogIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEJsb2NrVHlwZTo6Q2F0Y2g6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJDYXRjaDog
Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBv
dXQucHJpbnQoIkNvbnRpbnVhdGlvbjogIiwgKmNvbnRpbnVhdGlvbiwgIiwgU3BlY2lhbDogIik7
CiAgICAgICAgICAgICBpZiAoc3BlY2lhbCkKQEAgLTE1NCw2ICsyMDIsMjQgQEAgcHVibGljOgog
ICAgICAgICAgICAgc3BlY2lhbCA9IG51bGxwdHI7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lk
IGNvbnZlcnRUcnlUb0NhdGNoKHVuc2lnbmVkIHRyeUVuZENhbGxTaXRlSW5kZXgsIFZhcmlhYmxl
KiBleGNlcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChibG9ja1R5cGUoKSA9
PSBCbG9ja1R5cGU6OlRyeSk7CisgICAgICAgICAgICBjb250cm9sQmxvY2tUeXBlID0gQmxvY2tU
eXBlOjpDYXRjaDsKKyAgICAgICAgICAgIG1fY2F0Y2hLaW5kID0gQ2F0Y2hLaW5kOjpDYXRjaDsK
KyAgICAgICAgICAgIG1fdHJ5RW5kID0gdHJ5RW5kQ2FsbFNpdGVJbmRleDsKKyAgICAgICAgICAg
IG1fZXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjb252
ZXJ0VHJ5VG9DYXRjaEFsbCh1bnNpZ25lZCB0cnlFbmRDYWxsU2l0ZUluZGV4LCBWYXJpYWJsZSog
ZXhjZXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpUcnkpOworICAgICAgICAgICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlw
ZTo6Q2F0Y2g7CisgICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2hBbGw7
CisgICAgICAgICAgICBtX3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAg
ICBtX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCiAgICAgICAgIFNpZ25hdHVy
ZUFyZ0NvdW50IGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKQEAgLTE2OSwxMyArMjM1LDUz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+cmV0dXJuVHlwZShp
KTsKICAgICAgICAgfQogCisgICAgICAgIHVuc2lnbmVkIHRyeVN0YXJ0KCkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpU
cnkgfHwgY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAg
IHJldHVybiBtX3RyeVN0YXJ0OworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgdHJ5RW5k
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5cGUg
PT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV90cnlFbmQ7CisgICAg
ICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlEZXB0aCgpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6VHJ5IHx8IGNv
bnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4g
bV90cnlEZXB0aDsKKyAgICAgICAgfQorCisgICAgICAgIENhdGNoS2luZCBjYXRjaEtpbmQoKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBC
bG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2NhdGNoS2luZDsKKyAgICAg
ICAgfQorCisgICAgICAgIFZhcmlhYmxlKiBleGNlcHRpb24oKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2V4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHVu
c2lnbmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tTaXplOyB9CisKICAgICBw
cml2YXRlOgorICAgICAgICAvLyBGSVhNRTogQ29tcHJlc3MgQjNJUkdlbmVyYXRvcjo6Q29udHJv
bERhdGEgZmllbGRzIHVzaW5nIGFuIHVuaW9uCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyMTIKICAgICAgICAgZnJpZW5kIGNsYXNzIEIzSVJH
ZW5lcmF0b3I7CiAgICAgICAgIEJsb2NrVHlwZSBjb250cm9sQmxvY2tUeXBlOwogICAgICAgICBC
bG9ja1NpZ25hdHVyZSBtX3NpZ25hdHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9zdGFja1NpemU7
CiAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbjsKICAgICAgICAgQmFzaWNCbG9jayog
c3BlY2lhbDsKLSAgICAgICAgUmVzdWx0TGlzdCBwaGlzOworICAgICAgICBWZWN0b3I8VmFsdWUq
PiBwaGlzOworICAgICAgICB1bnNpZ25lZCBtX3RyeVN0YXJ0OworICAgICAgICB1bnNpZ25lZCBt
X3RyeUVuZDsKKyAgICAgICAgdW5zaWduZWQgbV90cnlEZXB0aDsKKyAgICAgICAgQ2F0Y2hLaW5k
IG1fY2F0Y2hLaW5kOworICAgICAgICBWYXJpYWJsZSogbV9leGNlcHRpb247CiAgICAgfTsKIAog
ICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CkBAIC0yNzMsNiArMzc5LDE2IEBA
IHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENv
bnRyb2xEYXRhJiwgY29uc3QgU3RhY2smKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOwogCisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVHJ5KEJsb2NrU2lnbmF0dXJlLCBTdGFjayYg
ZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjayk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2godW5zaWduZWQgZXhj
ZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBSZXN1
bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hU
b1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBD
b250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDYXRjaEFsbChTdGFjayYsIENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xU
eXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRGVsZWdhdGUo
Q29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYsIENvbnRyb2xU
eXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGhyb3codW5z
aWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFN0YWNr
Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0aHJvdyh1bnNp
Z25lZCwgQ29udHJvbFR5cGUmKTsKKwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1
ZXMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250
cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHJldHVyblZh
bHVlcyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdl
dHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywgY29uc3QgU3RhY2smIGV4cHJlc3Npb25T
dGFjayk7CkBAIC0yODYsMjAgKzQwMiwzNiBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNv
bnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3Qm
IHJlc3VsdHMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxS
ZWYoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0
TGlzdCYgcmVzdWx0cyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
VW5yZWFjaGFibGUoKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0
SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGVl
Q29kZSwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVz
dWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRJbmRp
cmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBWYWx1ZSogY2FsbGVlQ29kZSwgY29uc3Qg
U2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYpOwog
ICAgIEIzOjpWYWx1ZSogY3JlYXRlQ2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayosIE9yaWdpbiwg
Y29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgY29uc3QgU2Nv
cGVkTGFtYmRhPHZvaWQoUGF0Y2hwb2ludFZhbHVlKik+JiBwYXRjaHBvaW50RnVuY3Rvcik7CiAK
ICAgICB2b2lkIGR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiwgY29uc3QgU3RhY2sqIGV4cHJlc3Np
b25TdGFjayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRv
cj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKICAgICB2b2lkIGRpZEZpbmlzaFBh
cnNpbmdMb2NhbHMoKSB7IH0KLSAgICB2b2lkIGRpZFBvcFZhbHVlRnJvbVN0YWNrKCkgeyB9Cisg
ICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsgLS1tX3N0YWNrU2l6ZTsgfQogCiAgICAg
VmFsdWUqIGNvbnN0YW50KEIzOjpUeXBlLCB1aW50NjRfdCBiaXRzLCBzdGQ6Om9wdGlvbmFsPE9y
aWdpbj4gPSBzdGQ6Om51bGxvcHQpOwogICAgIFZhbHVlKiBmcmFtZVBvaW50ZXIoKTsKKyAgICB2
b2lkIGluc2VydEVudHJ5U3dpdGNoKCk7CiAgICAgdm9pZCBpbnNlcnRDb25zdGFudHMoKTsKIAog
ICAgIEIzOjpUeXBlIHRvQjNSZXN1bHRUeXBlKEJsb2NrU2lnbmF0dXJlKTsKIAorICAgIHZvaWQg
YWRkU3RhY2tNYXAodW5zaWduZWQgY2FsbFNpdGVJbmRleCwgU3RhY2tNYXAmJiBzdGFja21hcCkK
KyAgICB7CisgICAgICAgIG1fc3RhY2ttYXBzLmFkZChDYWxsU2l0ZUluZGV4KGNhbGxTaXRlSW5k
ZXgpLCBXVEZNb3ZlKHN0YWNrbWFwKSk7CisgICAgfQorCisgICAgU3RhY2tNYXBzJiYgdGFrZVN0
YWNrbWFwcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX3N0YWNrbWFwcyk7Cisg
ICAgfQorCisgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgdGFrZUV4Y2VwdGlvbkhh
bmRsZXJzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fZXhjZXB0aW9uSGFuZGxl
cnMpOworICAgIH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGVtaXRFeGNlcHRpb25DaGVjayhDQ2Fs
bEhlbHBlcnMmLCBFeGNlcHRpb25UeXBlKTsKIApAQCAtMzA3LDI4ICs0MzksMzMgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGVtaXRMb29wVGllclVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4LCBjb25z
dCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIGNvbnN0IFN0YWNrJiBuZXdTdGFjayk7CiAKICAgICB2
b2lkIGVtaXRXcml0ZUJhcnJpZXJGb3JKU1dyYXBwZXIoKTsKLSAgICBFeHByZXNzaW9uVHlwZSBl
bWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJf
dCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKKyAgICBWYWx1ZSogZW1pdENoZWNrQW5kUHJl
cGFyZVBvaW50ZXIoVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6
ZU9mT3ApOwogICAgIEIzOjpLaW5kIG1lbW9yeUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCk7Ci0g
ICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBw
b2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOwotICAgIHZvaWQgZW1pdFN0b3JlT3AoU3RvcmVPcFR5
cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJf
dCBvZmZzZXQpOworICAgIFZhbHVlKiBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIFZhbHVlKiBwb2lu
dGVyLCB1aW50MzJfdCBvZmZzZXQpOworICAgIHZvaWQgZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUs
IFZhbHVlKiBwb2ludGVyLCBWYWx1ZSosIHVpbnQzMl90IG9mZnNldCk7CiAKLSAgICBFeHByZXNz
aW9uVHlwZSBzYW5pdGl6ZUF0b21pY1Jlc3VsdChFeHRBdG9taWNPcFR5cGUsIFR5cGUsIEV4cHJl
c3Npb25UeXBlIHJlc3VsdCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdEF0b21pY0xvYWRPcChF
eHRBdG9taWNPcFR5cGUsIFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9m
ZnNldCk7Ci0gICAgdm9pZCBlbWl0QXRvbWljU3RvcmVPcChFeHRBdG9taWNPcFR5cGUsIFR5cGUs
IEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBv
ZmZzZXQpOwotICAgIEV4cHJlc3Npb25UeXBlIGVtaXRBdG9taWNCaW5hcnlSTVdPcChFeHRBdG9t
aWNPcFR5cGUsIFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZh
bHVlLCB1aW50MzJfdCBvZmZzZXQpOwotICAgIEV4cHJlc3Npb25UeXBlIGVtaXRBdG9taWNDb21w
YXJlRXhjaGFuZ2UoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVy
LCBFeHByZXNzaW9uVHlwZSBleHBlY3RlZCwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90
IG9mZnNldCk7CisgICAgVmFsdWUqIHNhbml0aXplQXRvbWljUmVzdWx0KEV4dEF0b21pY09wVHlw
ZSwgVHlwZSwgVmFsdWUqIHJlc3VsdCk7CisgICAgVmFsdWUqIGVtaXRBdG9taWNMb2FkT3AoRXh0
QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1ZSogcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KTsKKyAg
ICB2b2lkIGVtaXRBdG9taWNTdG9yZU9wKEV4dEF0b21pY09wVHlwZSwgVHlwZSwgVmFsdWUqIHBv
aW50ZXIsIFZhbHVlKiwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBWYWx1ZSogZW1pdEF0b21pY0Jp
bmFyeVJNV09wKEV4dEF0b21pY09wVHlwZSwgVHlwZSwgVmFsdWUqIHBvaW50ZXIsIFZhbHVlKiwg
dWludDMyX3Qgb2Zmc2V0KTsKKyAgICBWYWx1ZSogZW1pdEF0b21pY0NvbXBhcmVFeGNoYW5nZShF
eHRBdG9taWNPcFR5cGUsIFR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSogZXhwZWN0ZWQsIFZh
bHVlKiwgdWludDMyX3Qgb2Zmc2V0KTsKIAotICAgIHZvaWQgdW5pZnkoY29uc3QgRXhwcmVzc2lv
blR5cGUgcGhpLCBjb25zdCBFeHByZXNzaW9uVHlwZSBzb3VyY2UpOwotICAgIHZvaWQgdW5pZnlW
YWx1ZXNXaXRoQmxvY2soY29uc3QgU3RhY2smIHJlc3VsdFN0YWNrLCBjb25zdCBSZXN1bHRMaXN0
JiBzdGFjayk7CisgICAgdm9pZCB1bmlmeShWYWx1ZSogcGhpLCBjb25zdCBFeHByZXNzaW9uVHlw
ZSBzb3VyY2UpOworICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgU3RhY2smIHJl
c3VsdFN0YWNrLCBjb25zdCBDb250cm9sRGF0YSYgYmxvY2spOwogCi0gICAgdm9pZCBlbWl0Q2hl
Y2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lv
blR5cGUgcmlnaHQpOworICAgIHZvaWQgZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUs
IFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpOwogCi0gICAgaW50MzJfdCBXQVJOX1VOVVNFRF9S
RVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYsIHVpbnQzMl90KTsK
LSAgICBFeHByZXNzaW9uVHlwZSBXQVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09m
ZnNldEZvckF0b21pY09wcyhFeHRBdG9taWNPcFR5cGUsIEV4cHJlc3Npb25UeXBlLCB1aW50MzJf
dCk7CisgICAgaW50MzJfdCBXQVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNl
dChWYWx1ZSomLCB1aW50MzJfdCk7CisgICAgVmFsdWUqIFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1
cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKEV4dEF0b21pY09wVHlwZSwgVmFsdWUqLCB1
aW50MzJfdCk7CiAKICAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKFByb2NlZHVy
ZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwogICAgIGVudW0gY2xhc3MgUmVzdG9yZUNhY2hlZFN0
YWNrTGltaXQgeyBObywgWWVzIH07Ci0gICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxT
dGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBW
YWx1ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsKKyAgICB2b2lkIHJlc3Rv
cmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBN
ZW1vcnlJbmZvcm1hdGlvbiYsIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiwgQmFzaWNCbG9j
ayosIGJvb2wgcmVzdG9yZUluc3RhbmNlID0gdHJ1ZSk7CisKKyAgICBWYWx1ZSogbG9hZEZyb21T
Y3JhdGNoQnVmZmVyKHVuc2lnbmVkJiBpbmRleEluQnVmZmVyLCBWYWx1ZSogcG9pbnRlciwgQjM6
OlR5cGUpOworICAgIHZvaWQgY29ubmVjdENvbnRyb2xFbnRyeSh1bnNpZ25lZCYgaW5kZXhJbkJ1
ZmZlciwgVmFsdWUqIHBvaW50ZXIsIENvbnRyb2xEYXRhJiwgU3RhY2smIGV4cHJlc3Npb25TdGFj
aywgQ29udHJvbERhdGEmIGN1cnJlbnREYXRhLCBib29sIGZpbGxMb29wUGhpcyA9IGZhbHNlKTsK
KyAgICBWYWx1ZSogZW1pdENhdGNoSW1wbChDYXRjaEtpbmQsIENvbnRyb2xUeXBlJiwgdW5zaWdu
ZWQgZXhjZXB0aW9uSW5kZXggPSAwKTsKKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIHBy
ZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhCYXNpY0Jsb2NrKiwgUGF0Y2hwb2ludFZhbHVl
Kik7CiAKICAgICBPcmlnaW4gb3JpZ2luKCk7CiAKQEAgLTMzOSw2ICs0NzYsNjIgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIG1fb3V0ZXJMb29wcy5sYXN0KCk7CiAgICAgfQogCisgICAgRXhw
cmVzc2lvblR5cGUgcHVzaChUeXBlIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gcHVzaCh0
b0IzVHlwZSh0eXBlKSk7CisgICAgfQorCisgICAgRXhwcmVzc2lvblR5cGUgcHVzaChCMzo6VHlw
ZSB0eXBlKQorICAgIHsKKyAgICAgICAgKyttX3N0YWNrU2l6ZTsKKyAgICAgICAgaWYgKG1fc3Rh
Y2tTaXplID4gbV9tYXhTdGFja1NpemUpIHsKKyAgICAgICAgICAgIG1fbWF4U3RhY2tTaXplID0g
bV9zdGFja1NpemU7CisgICAgICAgICAgICBWYXJpYWJsZSogdmFyID0gbV9wcm9jLmFkZFZhcmlh
YmxlKHR5cGUpOworICAgICAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyKTsKKyAgICAgICAgICAg
IHJldHVybiB2YXI7CisgICAgICAgIH0KKworICAgICAgICBWYXJpYWJsZSogdmFyID0gbV9zdGFj
a1ttX3N0YWNrU2l6ZSAtIDFdOworICAgICAgICBpZiAodmFyLT50eXBlKCkgPT0gdHlwZSkKKyAg
ICAgICAgICAgIHJldHVybiB2YXI7CisKKyAgICAgICAgdmFyID0gbV9wcm9jLmFkZFZhcmlhYmxl
KHR5cGUpOworICAgICAgICBtX3N0YWNrW21fc3RhY2tTaXplIC0gMV0gPSB2YXI7CisgICAgICAg
IHJldHVybiB2YXI7CisgICAgfQorCisgICAgRXhwcmVzc2lvblR5cGUgcHVzaChWYWx1ZSogdmFs
dWUpCisgICAgeworICAgICAgICBWYXJpYWJsZSogdmFyID0gcHVzaCh2YWx1ZS0+dHlwZSgpKTsK
KyAgICAgICAgc2V0KHZhciwgdmFsdWUpOworICAgICAgICByZXR1cm4gdmFyOworICAgIH0KKwor
ICAgIFZhbHVlKiBnZXQoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxlKiB2YXJpYWJsZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJv
YywgQjM6OkdldCwgb3JpZ2luKCksIHZhcmlhYmxlKTsKKyAgICB9CisKKyAgICBWYWx1ZSogZ2V0
KFZhcmlhYmxlKiB2YXJpYWJsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQobV9jdXJyZW50
QmxvY2ssIHZhcmlhYmxlKTsKKyAgICB9CisKKyAgICBWYWx1ZSogc2V0KEJhc2ljQmxvY2sqIGJs
b2NrLCBWYXJpYWJsZSogZHN0LCBWYWx1ZSogc3JjKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJs
b2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6U2V0LCBvcmlnaW4oKSwg
ZHN0LCBzcmMpOworICAgIH0KKworICAgIFZhbHVlKiBzZXQoVmFyaWFibGUqIGRzdCwgVmFsdWUq
IHNyYykKKyAgICB7CisgICAgICAgIHJldHVybiBzZXQobV9jdXJyZW50QmxvY2ssIGRzdCwgc3Jj
KTsKKyAgICB9CisKKyAgICBWYWx1ZSogc2V0KFZhcmlhYmxlKiBkc3QsIFZhcmlhYmxlKiBzcmMp
CisgICAgeworICAgICAgICByZXR1cm4gc2V0KGRzdCwgZ2V0KHNyYykpOworICAgIH0KKwogICAg
IEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+KiBtX3BhcnNlciB7IG51bGxwdHIgfTsKICAg
ICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOwogICAgIGNvbnN0IE1lbW9yeU1vZGUg
bV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKQEAgLTM0OCwxMCArNTQxLDEy
IEBAIHByaXZhdGU6CiAgICAgVGllclVwQ291bnQqIG1fdGllclVwIHsgbnVsbHB0ciB9OwogCiAg
ICAgUHJvY2VkdXJlJiBtX3Byb2M7Ci0gICAgQmFzaWNCbG9jayogbV9yb290QmxvY2sgeyBudWxs
cHRyIH07CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX3Jvb3RCbG9ja3M7CisgICAgQmFzaWNC
bG9jayogbV90b3BMZXZlbEJsb2NrOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsg
bnVsbHB0ciB9OwogICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9vdXRlckxvb3BzOwogICAgIFZlY3Rv
cjxWYXJpYWJsZSo+IG1fbG9jYWxzOworICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fc3RhY2s7CiAg
ICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hvc2Ug
YWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgogICAgIHVuc2lnbmVkJiBtX29zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiBtX2Nv
bnN0YW50UG9vbDsKQEAgLTM2NSw2ICs1NjAsNyBAQCBwcml2YXRlOgogCiAgICAgVmFsdWUqIG1f
aW5zdGFuY2VWYWx1ZSB7IG51bGxwdHIgfTsgLy8gQWx3YXlzIHVzZSB0aGUgYWNjZXNzb3IgYmVs
b3cgdG8gZW5zdXJlIHRoZSBpbnN0YW5jZSB2YWx1ZSBpcyBtYXRlcmlhbGl6ZWQgd2hlbiB1c2Vk
LgogICAgIGJvb2wgbV91c2VzSW5zdGFuY2VWYWx1ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hh
c0NhdGNoIHsgZmFsc2UgfTsKICAgICBWYWx1ZSogaW5zdGFuY2VWYWx1ZSgpCiAgICAgewogICAg
ICAgICBtX3VzZXNJbnN0YW5jZVZhbHVlID0gdHJ1ZTsKQEAgLTM3MywxMCArNTY5LDI5IEBAIHBy
aXZhdGU6CiAKICAgICB1aW50MzJfdCBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUltcG9ydEZ1bmN0aW9uczsKKworICAgIENoZWNrZWQ8dW5zaWduZWQ+
IG1fdHJ5RGVwdGggeyAwIH07CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9jYWxsU2l0ZUluZGV4
IHsgMCB9OworICAgIENoZWNrZWQ8dW5zaWduZWQ+IG1fc3RhY2tTaXplIHsgMCB9OworICAgIENo
ZWNrZWQ8dW5zaWduZWQ+IG1fbWF4U3RhY2tTaXplIHsgMCB9OworICAgIFN0YWNrTWFwcyBtX3N0
YWNrbWFwczsKKyAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5k
bGVyczsKIH07CiAKK3ZvaWQgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Z2VuZXJhdGUoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cywgQjNJUkdlbmVyYXRvciogZ2VuZXJhdG9yKSBjb25zdAoreworICAgIGlmIChtX2NhbGxTaXRl
SW5kZXggPT0gc19pbnZhbGlkQ2FsbFNpdGVJbmRleCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
U3RhY2tNYXAgdmFsdWVzOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2Zmc2V0OyBpIDwgcGFy
YW1zLnZhbHVlKCktPm51bUNoaWxkcmVuKCk7ICsraSkKKyAgICAgICAgdmFsdWVzLmNvbnN0cnVj
dEFuZEFwcGVuZChwYXJhbXNbaV0sIHBhcmFtcy52YWx1ZSgpLT5jaGlsZChpKS0+dHlwZSgpKTsK
KyAgICBnZW5lcmF0b3ItPmFkZFN0YWNrTWFwKG1fY2FsbFNpdGVJbmRleCwgV1RGTW92ZSh2YWx1
ZXMpKTsKKyAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX2NhbGxT
aXRlSW5kZXgpLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcykpOworfQorCiAvLyBNZW1vcnkgYWNjZXNzZXMgaW4gV2ViQXNzZW1i
bHkgaGF2ZSB1bnNpZ25lZCAzMi1iaXQgb2Zmc2V0cywgd2hlcmVhcyB0aGV5IGhhdmUgc2lnbmVk
IDMyLWJpdCBvZmZzZXRzIGluIEIzLgotaW50MzJfdCBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50
ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVpbnQzMl90IG9mZnNldCkKK2ludDMy
X3QgQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChWYWx1ZSomIHB0ciwgdWlu
dDMyX3Qgb2Zmc2V0KQogewogICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSA+
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgo
KSkpIHsKICAgICAgICAgcHRyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBBZGQsIG9yaWdpbigpLCBwdHIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpKTsKQEAgLTQyOCw4ICs2NDMsOSBAQCBC
M0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICwgbV9jb25zdGFudEluc2VydGlvblZhbHVlcyht
X3Byb2MpCiAgICAgLCBtX251bUltcG9ydEZ1bmN0aW9ucyhpbmZvLmltcG9ydEZ1bmN0aW9uQ291
bnQoKSkKIHsKLSAgICBtX3Jvb3RCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAgIG1fY3Vy
cmVudEJsb2NrID0gbV9yb290QmxvY2s7CisgICAgbV90b3BMZXZlbEJsb2NrID0gbV9wcm9jLmFk
ZEJsb2NrKCk7CisgICAgbV9yb290QmxvY2tzLmFwcGVuZChtX3Byb2MuYWRkQmxvY2soKSk7Cisg
ICAgbV9jdXJyZW50QmxvY2sgPSBtX3Jvb3RCbG9ja3NbMF07CiAKICAgICAvLyBGSVhNRSB3ZSBk
b24ndCByZWFsbHkgbmVlZCB0byBwaW4gcmVnaXN0ZXJzIGhlcmUgaWYgdGhlcmUncyBubyBtZW1v
cnkuIEl0IG1ha2VzIHdhc20gLT4gd2FzbSB0aHVua3Mgc2ltcGxlciBmb3Igbm93LiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NjIzCiAgICAgY29uc3QgUGlubmVk
UmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKQEAg
LTQ2MSw2ICs2NzcsMjYgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgfSk7CiAg
ICAgfQogCisgICAgeworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBnZXRJbnN0YW5jZSA9
IG1fdG9wTGV2ZWxCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
cG9pbnRlclR5cGUoKSwgT3JpZ2luKCkpOworICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRM
UygpKQorICAgICAgICAgICAgZ2V0SW5zdGFuY2UtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3Jv
U2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSBy
ZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGlu
IHRoZSBjYWxsZXIgc2lkZS4KKyAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1
c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVn
aXN0ZXIuCisgICAgICAgICAgICBnZXRJbnN0YW5jZS0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIGdldEluc3RhbmNlLT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIGdldEluc3RhbmNlLT5yZXN1bHRDb25zdHJhaW50cyA9IHsgVmFsdWVS
ZXA6OnJlZyhtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpIH07CisgICAgICAgIH0KKyAgICAgICAg
Z2V0SW5zdGFuY2UtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIGlmIChD
b250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OmxvYWRXYXNt
Q29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
ICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UocGFyYW1zWzBdLmdwcigpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IGdldEluc3Rh
bmNlOworICAgIH0KKwogICAgIHsKICAgICAgICAgYXV0byogY2FsbGVlTW92ZUxvY2F0aW9uID0g
JmNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb247CiAgICAgICAgIHN0YXRpY19hc3NlcnQo
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSA8IFdhc21DYWxsaW5n
Q29udmVudGlvbjo6aGVhZGVyU2l6ZUluQnl0ZXMsICJXZSByZWx5IG9uIHRoaXMgaGVyZSBmb3Ig
bm93LiIpOwpAQCAtNDk0LDE3ICs3MzAsMTAgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRv
cihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAg
ICB9CiAKICAgICB7Ci0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHN0YWNrT3ZlcmZsb3dD
aGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9w
cm9jLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSk7Ci0gICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9
IHN0YWNrT3ZlcmZsb3dDaGVjazsKKyAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogc3RhY2tP
dmVyZmxvd0NoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZh
bHVlPihtX3Byb2MsIFZvaWQsIE9yaWdpbigpKTsKKyAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNr
LT5hcHBlbmRTb21lUmVnaXN0ZXIoaW5zdGFuY2VWYWx1ZSgpKTsKICAgICAgICAgc3RhY2tPdmVy
Zmxvd0NoZWNrLT5hcHBlbmRTb21lUmVnaXN0ZXIoZnJhbWVQb2ludGVyKCkpOwogICAgICAgICBz
dGFja092ZXJmbG93Q2hlY2stPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lz
dGVycygpKTsKLSAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4
dEluc3RhbmNlIHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJl
c3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgotICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50
cyB1cyBmcm9tIHVzaW5nIEFyZ3VtZW50UmVnIHRvIHRoaXMgKGxvZ2ljYWxseSkgaW1tdXRhYmxl
IHBpbm5lZCByZWdpc3Rlci4KLSAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+ZWZmZWN0
cy53cml0ZXNQaW5uZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+
ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7Ci0gICAgICAgICAgICBzdGFja092ZXJmbG93Q2hl
Y2stPnJlc3VsdENvbnN0cmFpbnRzID0geyBWYWx1ZVJlcDo6cmVnKG1fd2FzbUNvbnRleHRJbnN0
YW5jZUdQUikgfTsKLSAgICAgICAgfQogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPm51bUdQ
U2NyYXRjaFJlZ2lzdGVycyA9IDI7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgY29uc3QgQ2hlY2tlZDxpbnQzMl90PiB3
YXNtRnJhbWVTaXplID0gcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKTsKQEAgLTUyNiwxOSArNzU1
LDE1IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICBib29sIG5lZWRVbmRl
cmZsb3dDaGVjayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGVja1NpemUpID4gT3B0aW9uczo6
cmVzZXJ2ZWRab25lU2l6ZSgpOwogICAgICAgICAgICAgYm9vbCBuZWVkc092ZXJmbG93Q2hlY2sg
PSBtX21ha2VzQ2FsbHMgfHwgd2FzbUZyYW1lU2l6ZSA+PSBzdGF0aWNfY2FzdDxpbnQzMl90Piht
aW5pbXVtUGFyZW50Q2hlY2tTaXplKSB8fCBuZWVkVW5kZXJmbG93Q2hlY2s7CiAKLSAgICAgICAg
ICAgIEdQUlJlZyBjb250ZXh0SW5zdGFuY2UgPSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyBwYXJh
bXNbMF0uZ3ByKCkgOiBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7Ci0KICAgICAgICAgICAgIC8v
IFRoaXMgYWxsb3dzIGxlYWYgZnVuY3Rpb25zIHRvIG5vdCBkbyBzdGFjayBjaGVja3MgaWYgdGhl
aXIgZnJhbWUgc2l6ZSBpcyB3aXRoaW4KICAgICAgICAgICAgIC8vIGNlcnRhaW4gbGltaXRzIHNp
bmNlIHRoZWlyIGNhbGxlciB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGUgY2hlY2suCiAgICAg
ICAgICAgICBpZiAobmVlZHNPdmVyZmxvd0NoZWNrKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAg
ICAgIEdQUlJlZyBjb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMF0uZ3ByKCk7CiAgICAgICAgICAg
ICAgICAgR1BSUmVnIGZwID0gcGFyYW1zWzFdLmdwcigpOwogICAgICAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMSA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAgICAgICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKIAotICAgICAgICAgICAgICAgIGlmIChD
b250ZXh0Ojp1c2VGYXN0VExTKCkpCi0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNv
bnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOwotCiAgICAgICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9m
ZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2NyYXRjaDIpOwogICAgICAgICAgICAgICAgIGpp
dC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNoZWNrU2l6ZSksIGZwLCBzY3Jh
dGNoMSk7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG92ZXJmbG93
OwpAQCAtNTQ4LDEyICs3NzMsNiBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAg
ICAgICAgIGppdC5hZGRMaW5rVGFzayhbb3ZlcmZsb3ddIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CiAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJv
d1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAm
JiBDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBObyBvdmVyZmxv
dyBjaGVjayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRv
IGJlIGNvcnJlY3QuCi0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0
YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgaml0Lmxv
YWRXYXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIC8vIFdlIHNhaWQgd2UnZCByZXR1cm4gYSBwb2ludGVyLiBX
ZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGJlY2F1c2UgaXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBw
YXRjaHBvaW50IGNvbnNlcnZhdGl2ZWx5IHNhaWQgaXQgaGFkIGVmZmVjdHMgKHBvdGVudGlhbCBz
dGFjayBjaGVjaykgd2hpY2ggcHJldmVudCBpdCBmcm9tIGdldHRpbmcgcmVtb3ZlZC4KICAgICAg
ICAgICAgIH0KICAgICAgICAgfSk7CiAgICAgfQpAQCAtNTY0LDkgKzc4MywxMCBAQCBCM0lSR2Vu
ZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9j
ZWR1cmUmIHByb2NlZHVyZQogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fcHJvYy5hZGRCbG9j
aygpOwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0
YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0LCBjb25z
dCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBWYWx1ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYg
cHJvYywgQmFzaWNCbG9jayogYmxvY2spCit2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJB
c3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHJlc3RvcmVDYWNoZWRT
dGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBWYWx1ZSogaW5zdGFu
Y2UsIFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2ssIGJvb2wgcmVzdG9yZUluc3Rh
bmNlKQogewotICAgIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHByb2MsIGJsb2NrLCBpbnN0
YW5jZSk7CisgICAgaWYgKHJlc3RvcmVJbnN0YW5jZSkKKyAgICAgICAgcmVzdG9yZVdhc21Db250
ZXh0SW5zdGFuY2UocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKIAogICAgIGlmIChyZXN0b3JlQ2Fj
aGVkU3RhY2tMaW1pdCA9PSBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzKSB7CiAgICAgICAg
IC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMgdGhlIHN0YWNrIGxpbWl0LCBidXQgYWxzbyBrbm93cyB3
aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0aW9uIGlzLgpAQCAtNjM0LDkgKzg1NCw3OCBAQCBWYWx1
ZSogQjNJUkdlbmVyYXRvcjo6ZnJhbWVQb2ludGVyKCkKICAgICByZXR1cm4gbV9mcmFtZVBvaW50
ZXI7CiB9CiAKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6aW5zZXJ0RW50cnlTd2l0Y2goKQoreworICAg
IG1fcHJvYy5zZXROdW1FbnRyeXBvaW50cyhtX3Jvb3RCbG9ja3Muc2l6ZSgpKTsKKworICAgIFJl
ZjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4gY2F0Y2hQcm9sb2d1ZUdlbmVyYXRvciA9IGNy
ZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oW10gKEND
YWxsSGVscGVycyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICBqaXQu
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGluZyBw
cmVjaXNlIGFsbG9jYXRpb25zIGluIFdhc21CM0lSR2VuZXJhdG9yIGNhdGNoIGVudHJ5cG9pbnRz
IG1pZ2h0IGJlIHVubmVjZXNzYXJ5CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjEzCisgICAgICAgICAgICBhdXRvIHByZWNpc2VBbGxv
Y2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BS
SW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9u
OjpoYWxmQWxpZ25tZW50KSk7CisgICAgICAgICAgICBqaXQuYW5kUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpv
ZmZzZXRPZlZNKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBhdXRvIGxvYWRlZENh
c2UgPSBqaXQuanVtcCgpOworCisgICAgICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGlu
aygmaml0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMCwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vh
a1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIEdQ
UkluZm86OnJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOworICAg
ICAgICB9CisgICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QzKTsKKworICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZNOjpj
YWxsZWVGb3JXYXNtQ2F0Y2hPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAgaml0
LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0
KCkpKTsKKyAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJJbmZvOjpyZWdU
MywgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKworICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0
KCkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGppdC5zdG9yZVB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKKworICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihSZWdpc3Rlcikp
LCBHUFJJbmZvOjpyZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpyZWdUMywgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkluc3Rh
bmNlKCkpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5z
dGFuY2UoR1BSSW5mbzo6cmVnVDMpOworCisgICAgICAgIGppdC5wcm9iZShbXShQcm9iZTo6Q29u
dGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250
ZXh0LmZwPENhbGxGcmFtZSo+KCk7CisgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKTsKKyAgICAgICAgICAgIE9wdGltaXpp
bmdKSVRDYWxsZWUqIGNhbGxlZSA9IGJpdHdpc2VfY2FzdDxPcHRpbWl6aW5nSklUQ2FsbGVlKj4o
Y2FsbEZyYW1lLT5jYWxsZWUoKS5hc1dhc21DYWxsZWUoKSk7CisgICAgICAgICAgICBjb25zdCBT
dGFja01hcCYgc3RhY2ttYXAgPSBjYWxsZWUtPnN0YWNrbWFwKGNhbGxTaXRlSW5kZXgpOworICAg
ICAgICAgICAgVk0qIHZtID0gY29udGV4dC5ncHI8Vk0qPihHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgICAgICB1aW50NjRfdCogYnVmZmVyID0gdm0tPndhc21Db250ZXh0LnNjcmF0Y2hCdWZmZXJG
b3JTaXplKHN0YWNrbWFwLnNpemUoKSAqIDgpOworICAgICAgICAgICAgbG9hZFZhbHVlc0ludG9C
dWZmZXIoY29udGV4dCwgc3RhY2ttYXAsIGJ1ZmZlcik7CisKKyAgICAgICAgICAgIGNvbnRleHQu
Z3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihidWZm
ZXIpOworICAgICAgICB9LCBudWxscHRyKTsKKworICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIH0pOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fcm9vdEJsb2Nrcy5zaXplKCk7ICsraSkK
KyAgICAgICAgbV9wcm9jLmNvZGUoKS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQoaSwgY2F0Y2hQ
cm9sb2d1ZUdlbmVyYXRvci5jb3B5UmVmKCkpOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Rv
cExldmVsQmxvY2s7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBFbnRyeVN3aXRjaCwgT3JpZ2luKCkpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Jvb3RCbG9ja3MpCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRTdWNjZXNzb3IoRnJl
cXVlbnRlZEJsb2NrKGJsb2NrKSk7Cit9CisKIHZvaWQgQjNJUkdlbmVyYXRvcjo6aW5zZXJ0Q29u
c3RhbnRzKCkKIHsKICAgICBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzLmV4ZWN1dGUobV9wcm9j
LmF0KDApKTsKKworICAgIGlmICghbV9oYXNDYXRjaCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
VmFsdWUqIGpzSW5zdGFuY2UgPSBtX3Byb2MuYWRkPE1lbW9yeVZhbHVlPihMb2FkLCBwb2ludGVy
VHlwZSgpLCBPcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0
YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSk7CisgICAgVmFsdWUqIHN0b3JlID0gbV9wcm9jLmFkZDxC
Mzo6TWVtb3J5VmFsdWU+KEIzOjpTdG9yZSwgT3JpZ2luKCksIGpzSW5zdGFuY2UsIGZyYW1lUG9p
bnRlcigpLCBzYWZlQ2FzdDxpbnQzMl90PihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBz
aXplb2YoUmVnaXN0ZXIpKSk7CisKKyAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fcm9vdEJsb2Nr
c1swXTsKKyAgICBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzLmluc2VydFZhbHVlKDAsIGpzSW5z
dGFuY2UpOworICAgIG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXMuaW5zZXJ0VmFsdWUoMCwgc3Rv
cmUpOworICAgIG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXMuZXhlY3V0ZShibG9jayk7CiB9CiAK
IEIzOjpUeXBlIEIzSVJHZW5lcmF0b3I6OnRvQjNSZXN1bHRUeXBlKEJsb2NrU2lnbmF0dXJlIHJl
dHVyblR5cGUpCkBAIC03MDUsMjAgKzk5NCwyMSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEFy
Z3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAogCiBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBvcmlnaW4o
KSwgdmFsdWUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSk7CisgICAgcmVzdWx0ID0gcHVz
aChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpFcXVhbCwgb3Jp
Z2luKCksIGdldCh2YWx1ZSksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSkpOwogICAgIHJl
dHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVHZXQodW5zaWduZWQg
dGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICAvLyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODUwNj4uCi0gICAgcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBl
KFR5cGVzOjpFeHRlcm5yZWYpLCBvcmlnaW4oKSwKKyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlw
ZXM6OkV4dGVybnJlZiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbkdldFdhc21UYWJsZUVsZW1lbnQpKSwKLSAgICAgICAgaW5zdGFu
Y2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgdGFibGVJbmRleCksIGluZGV4KTsKKyAgICAgICAgaW5zdGFuY2VWYWx1ZSgp
LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgdGFibGVJbmRleCksIGdldChpbmRleCkpOwogCiAgICAgeworICAgICAgICByZXN1bHQgPSBw
dXNoKHJlc3VsdFZhbHVlKTsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwg
b3JpZ2luKCksIHJlc3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkp
OwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMt
PmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVGFibGVB
Y2Nlc3MpOwpAQCAtNzMzLDcgKzEwMjMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxl
U2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZQogICAg
IC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KICAgICBhdXRvIHNob3VsZFRocm93ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEIzOjpJbnQzMiwgb3JpZ2luKCksCiAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uU2V0V2FzbVRh
YmxlRWxlbWVudCkpLAotICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgaW5k
ZXgsIHZhbHVlKTsKKyAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJbmRleCksIGdldChp
bmRleCksIGdldCh2YWx1ZSkpOwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3Jp
Z2luKCksCkBAIC03NTEsMjYgKzEwNDEsMjYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZWZG
dW5jKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWEKIHsK
ICAgICAvLyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5ODUwNj4uCiAKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgQjM6OkludDY0LCBvcmlnaW4oKSwKKyAgICBy
ZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9j
LCBCMzo6SW50NjQsIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvbldhc21SZWZGdW5jKSksCi0gICAgICAgIGluc3RhbmNlVmFsdWUoKSwg
YWRkQ29uc3RhbnQoVHlwZXM6OkkzMiwgaW5kZXgpKTsKKyAgICAgICAgaW5zdGFuY2VWYWx1ZSgp
LCBjb25zdGFudCh0b0IzVHlwZShUeXBlczo6STMyKSwgaW5kZXgpKSk7CiAKICAgICByZXR1cm4g
eyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlSW5pdCh1bnNpZ25lZCBlbGVt
ZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGRzdE9mZnNldCwg
RXhwcmVzc2lvblR5cGUgc3JjT2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBsZW5ndGgpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q0NhbGxWYWx1ZT4oCisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgbV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMy
KSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uV2FzbVRhYmxlSW5pdCkpLAogICAgICAgICBpbnN0YW5jZVZhbHVlKCksCiAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBlbGVtZW50SW5kZXgpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJbmRleCksCi0gICAgICAgIGRzdE9mZnNl
dCwgc3JjT2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBnZXQoZHN0T2Zmc2V0KSwgZ2V0KHNyY09m
ZnNldCksIGdldChsZW5ndGgpKTsKIAogICAgIHsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9y
aWdpbigpLAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0
VmFsdWUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCAwKSkpOwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAg
ICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9m
Qm91bmRzVGFibGVBY2Nlc3MpOwpAQCAtNzk0LDMxICsxMDg0LDMxIEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkRWxlbURyb3AodW5zaWduZWQgZWxlbWVudEluZGV4KSAtPiBQYXJ0aWFsUmVzdWx0
CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSh1bnNpZ25lZCB0YWJsZUluZGV4LCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgLy8gRklYTUU6
IEVtaXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTg1MDY+LgotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxW
YWx1ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCisgICAgcmVzdWx0
ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9C
M1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbkdldFdhc21UYWJsZVNpemUpKSwKLSAgICAgICAgaW5zdGFu
Y2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgdGFibGVJbmRleCkpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJs
ZUluZGV4KSkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRUYWJsZUdyb3codW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgZmlsbCwgRXhw
cmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+
KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAorICAgIHJlc3VsdCA9IHB1
c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBl
KFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25XYXNtVGFibGVHcm93KSksCi0gICAgICAgIGluc3RhbmNlVmFsdWUo
KSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHRhYmxlSW5kZXgpLCBmaWxsLCBkZWx0YSk7CisgICAgICAgIGluc3RhbmNlVmFsdWUoKSwg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHRhYmxlSW5kZXgpLCBnZXQoZmlsbCksIGdldChkZWx0YSkpKTsKIAogICAgIHJldHVybiB7IH07
CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKHVuc2lnbmVkIHRhYmxlSW5k
ZXgsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhwcmVzc2lvblR5cGUgZmlsbCwgRXhwcmVzc2lv
blR5cGUgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBlczo6
STMyKSwgb3JpZ2luKCksCisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmln
aW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25X
YXNtVGFibGVGaWxsKSksCi0gICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpLCBv
ZmZzZXQsIGZpbGwsIGNvdW50KTsKKyAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJbmRl
eCksIGdldChvZmZzZXQpLCBnZXQoZmlsbCksIGdldChjb3VudCkpOwogCiAgICAgewogICAgICAg
ICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1
ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsK
KyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1
YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwg
RXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC04MzAsMTcgKzExMjAs
MTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUZpbGwodW5zaWduZWQgdGFibGVJbmRl
eCwgRXhwcmVzc2lvblR5cGUgb2Zmc2V0LCBFeHAKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRU
YWJsZUNvcHkodW5zaWduZWQgZHN0VGFibGVJbmRleCwgdW5zaWduZWQgc3JjVGFibGVJbmRleCwg
RXhwcmVzc2lvblR5cGUgZHN0T2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBzcmNPZmZzZXQsIEV4cHJl
c3Npb25UeXBlIGxlbmd0aCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGF1dG8gcmVzdWx0ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICBWYWx1ZSogcmVzdWx0
VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICBt
X3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVu
Y3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtVGFibGVDb3B5KSksCiAgICAgICAg
IGluc3RhbmNlVmFsdWUoKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGRzdFRhYmxlSW5kZXgpLAogICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgc3Jj
VGFibGVJbmRleCksCi0gICAgICAgIGRzdE9mZnNldCwgc3JjT2Zmc2V0LCBsZW5ndGgpOworICAg
ICAgICBnZXQoZHN0T2Zmc2V0KSwgZ2V0KHNyY09mZnNldCksIGdldChsZW5ndGgpKTsKIAogICAg
IHsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3Vs
dCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOwogCiAgICAgICAgIGNo
ZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25D
aGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVGFibGVBY2Nlc3MpOwpAQCAtODUz
LDcgKzExNDMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlQ29weSh1bnNpZ25lZCBk
c3RUYWJsZUluZGV4LCB1bnNpZ25lZCBzcmNUYWJsZUluZGV4LAogYXV0byBCM0lSR2VuZXJhdG9y
OjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogewogICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0pOwotICAgIHJlc3VsdCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0
LCBvcmlnaW4oKSwgbV9sb2NhbHNbaW5kZXhdKTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBvcmlnaW4o
KSwgbV9sb2NhbHNbaW5kZXhdKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtODY3LDcgKzEx
NTcsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKCkgLT4gUGFydGlhbFJl
c3VsdAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdEluZGly
ZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0
b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBWYWx1ZSogY2FsbGVl
Q29kZSwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4m
IGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICAvLyBE
byBhIGNvbnRleHQgc3dpdGNoIGlmIG5lZWRlZC4KICAgICB7CkBAIC05MTYsNyArMTIwNiw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFu
Y2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlCiAgICAgfQogCiAgICAgQjM6OlR5cGUgcmV0dXJuVHlw
ZSA9IHRvQjNSZXN1bHRUeXBlKCZzaWduYXR1cmUpOwotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxS
ZXN1bHQgPSBjcmVhdGVDYWxsUGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIHNp
Z25hdHVyZSwgYXJncywKKyAgICBWYWx1ZSogY2FsbFJlc3VsdCA9IGNyZWF0ZUNhbGxQYXRjaHBv
aW50KG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBhcmdzLAogICAgICAgICBz
Y29wZWRMYW1iZGFSZWY8dm9pZChQYXRjaHBvaW50VmFsdWUqKT4oWz1dIChQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQpIC0+IHZvaWQgewogICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cy53cml0ZXNQaW5uZWQgPSB0cnVlOwogICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5y
ZWFkc1Bpbm5lZCA9IHRydWU7CkBAIC05MjgsOCArMTIxOCwxMCBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlw
ZSBjYWxsZQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKIAogICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGNhbGxlZUNvZGUsIFZhbHVlUmVwOjpTb21lUmVn
aXN0ZXIpOworICAgICAgICAgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBw
cmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQp
OwogICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAg
ICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2go
aml0KTsKKyAgICAgICAgICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMp
OwogICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1twYXJhbXMucHJvYygpLnJlc3VsdENv
dW50KHJldHVyblR5cGUpXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKICAgICAgICAgICAgIH0p
OwogICAgICAgICB9KSk7CkBAIC05NDEsMTEgKzEyMzMsMTEgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUg
Y2FsbGUKICAgICBjYXNlIEIzOjpUdXBsZTogewogICAgICAgICBjb25zdCBWZWN0b3I8QjM6OlR5
cGU+JiB0dXBsZSA9IG1fcHJvYy50dXBsZUZvclR5cGUocmV0dXJuVHlwZSk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgKytpKQotICAg
ICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxFeHRyYWN0
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHR1cGxlW2ldLCBjYWxsUmVzdWx0LCBpKSk7CisgICAg
ICAgICAgICByZXN1bHRzLmFwcGVuZChwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8RXh0
cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0dXBsZVtpXSwgY2FsbFJlc3VsdCwgaSkpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgcmVzdWx0cy5h
cHBlbmQoY2FsbFJlc3VsdCk7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2goY2FsbFJlc3Vs
dCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQpAQCAtOTU4LDkgKzEyNTAsOSBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNl
LCBFeHByZXNzaW9uVHlwZSBjYWxsZQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1v
cnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxs
VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAorICAgIHJlc3VsdCA9IHB1c2gobV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Hcm93TWVt
b3J5KSksCi0gICAgICAgIGZyYW1lUG9pbnRlcigpLCBpbnN0YW5jZVZhbHVlKCksIGRlbHRhKTsK
KyAgICAgICAgZnJhbWVQb2ludGVyKCksIGluc3RhbmNlVmFsdWUoKSwgZ2V0KGRlbHRhKSkpOwog
CiAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGlt
aXQ6Ok5vLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fcHJvYywgbV9jdXJyZW50
QmxvY2spOwogCkBAIC05ODAsMjIgKzEyNzIsMjIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRD
dXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKICAg
ICBWYWx1ZSogbnVtUGFnZXMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIFpTaHIsIG9yaWdpbigpLAogICAgICAgICBzaXplLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgc2hpZnRWYWx1ZSkpOwogCi0gICAg
cmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywg
b3JpZ2luKCksIG51bVBhZ2VzKTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbigpLCBudW1QYWdlcykpOwogCiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlGaWxsKEV4
cHJlc3Npb25UeXBlIGRzdEFkZHJlc3MsIEV4cHJlc3Npb25UeXBlIHRhcmdldFZhbHVlLCBFeHBy
ZXNzaW9uVHlwZSBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGF1dG8gcmVzdWx0ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICBWYWx1ZSogcmVzdWx0
VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICBt
X3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVu
Y3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtTWVtb3J5RmlsbCkpLAogICAgICAg
ICBpbnN0YW5jZVZhbHVlKCksCi0gICAgICAgIGRzdEFkZHJlc3MsIHRhcmdldFZhbHVlLCBjb3Vu
dCk7CisgICAgICAgIGdldChkc3RBZGRyZXNzKSwgZ2V0KHRhcmdldFZhbHVlKSwgZ2V0KGNvdW50
KSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdp
bigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAog
ICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0
RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNz
KTsKQEAgLTEwMDcsMTYgKzEyOTksMTYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlG
aWxsKEV4cHJlc3Npb25UeXBlIGRzdEFkZHJlc3MsIEV4cHJlc3Npb25UeXBlIHRhcmcKIAogYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlJbml0KHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgs
IEV4cHJlc3Npb25UeXBlIGRzdEFkZHJlc3MsIEV4cHJlc3Npb25UeXBlIHNyY0FkZHJlc3MsIEV4
cHJlc3Npb25UeXBlIGxlbmd0aCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGF1dG8gcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICBWYWx1ZSogcmVz
dWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAg
ICBtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdD
RnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtTWVtb3J5SW5pdCkpLAogICAg
ICAgICBpbnN0YW5jZVZhbHVlKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBkYXRhU2VnbWVudEluZGV4KSwKLSAgICAg
ICAgZHN0QWRkcmVzcywgc3JjQWRkcmVzcywgbGVuZ3RoKTsKKyAgICAgICAgZ2V0KGRzdEFkZHJl
c3MpLCBnZXQoc3JjQWRkcmVzcyksIGdldChsZW5ndGgpKTsKIAogICAgIHsKICAgICAgICAgQ2hl
Y2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1f
cHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdCwgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CisgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBv
cmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2Vw
dGlvblR5cGU6Ok91dE9mQm91bmRzVGFibGVBY2Nlc3MpOwpAQCAtMTAyOCwxNSArMTMyMCwxNSBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUluaXQodW5zaWduZWQgZGF0YVNlZ21lbnRJ
bmRleCwgRXhwcmVzc2lvblR5cGUgZHN0QQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE1lbW9y
eUNvcHkoRXhwcmVzc2lvblR5cGUgZHN0QWRkcmVzcywgRXhwcmVzc2lvblR5cGUgc3JjQWRkcmVz
cywgRXhwcmVzc2lvblR5cGUgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBhdXRvIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgVmFsdWUq
IHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAg
ICAgICAgbV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
dGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbU1lbW9yeUNvcHkpKSwK
ICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLAotICAgICAgICBkc3RBZGRyZXNzLCBzcmNBZGRyZXNz
LCBjb3VudCk7CisgICAgICAgIGdldChkc3RBZGRyZXNzKSwgZ2V0KHNyY0FkZHJlc3MpLCBnZXQo
Y291bnQpKTsKIAogICAgIHsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwg
b3JpZ2luKCksIHJlc3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkp
OwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMt
PmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVGFibGVB
Y2Nlc3MpOwpAQCAtMTA2MCw3ICsxMzUyLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGREYXRh
RHJvcCh1bnNpZ25lZCBkYXRhU2VnbWVudEluZGV4KSAtPiBQYXJ0aWFsUmVzdWx0CiBhdXRvIEIz
SVJHZW5lcmF0b3I6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0pOwotICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6U2V0
LCBvcmlnaW4oKSwgbV9sb2NhbHNbaW5kZXhdLCB2YWx1ZSk7CisgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIG9yaWdpbigpLCBtX2xv
Y2Fsc1tpbmRleF0sIGdldCh2YWx1ZSkpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTEwNzAs
MTIgKzEzNjIsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3QgaW5k
ZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWwKICAgICBWYWx1ZSogZ2xvYmFs
c0FycmF5ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxp
bnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpKTsKICAgICBzd2l0Y2ggKGdsb2Jh
bC5iaW5kaW5nTW9kZSkgewogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRp
bmdNb2RlOjpFbWJlZGRlZEluSW5zdGFuY2U6Ci0gICAgICAgIHJlc3VsdCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUoZ2xvYmFs
LnR5cGUpLCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAq
IHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKGdsb2JhbC50
eXBlKSwgb3JpZ2luKCksIGdsb2JhbHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBz
aXplb2YoUmVnaXN0ZXIpKSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdhc206Okdsb2Jh
bEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6IHsKICAgICAgICAgQVNTRVJUKGds
b2JhbC5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpN
dXRhYmxlKTsKICAgICAgICAgVmFsdWUqIHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEIzOjpJbnQ2NCwgb3JpZ2luKCksIGdsb2Jh
bHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0g
ICAgICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgdG9CM1R5cGUoZ2xvYmFsLnR5cGUpLCBvcmlnaW4oKSwgcG9pbnRlcik7Cisg
ICAgICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlwZShnbG9iYWwudHlwZSksIG9yaWdpbigpLCBwb2ludGVy
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CkBAIC0xMDg5LDE0ICsxMzgxLDE0IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlCiAgICAgVmFsdWUqIGdsb2JhbHNBcnJheSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5
cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFu
Y2U6Om9mZnNldE9mR2xvYmFscygpKSk7CiAgICAgc3dpdGNoIChnbG9iYWwuYmluZGluZ01vZGUp
IHsKICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6RW1iZWRk
ZWRJbkluc3RhbmNlOgotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgdmFsdWUsIGdsb2JhbHNBcnJheSwgc2FmZUNh
c3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCBn
ZXQodmFsdWUpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9m
KFJlZ2lzdGVyKSkpOwogICAgICAgICBpZiAoaXNSZWZUeXBlKGdsb2JhbC50eXBlKSkKICAgICAg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXJGb3JKU1dyYXBwZXIoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOiB7
CiAgICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1h
dGlvbjo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAgIFZhbHVlKiBwb2ludGVyID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBCMzo6SW50
NjQsIG9yaWdpbigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50ZXIpOworICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBv
cmlnaW4oKSwgZ2V0KHZhbHVlKSwgcG9pbnRlcik7CiAgICAgICAgIC8vIFdlIGVtaXQgYSB3cml0
ZS1iYXJyaWVyIG9udG8gSlNXZWJBc3NlbWJseUdsb2JhbCwgbm90IEpTV2ViQXNzZW1ibHlJbnN0
YW5jZS4KICAgICAgICAgaWYgKGlzUmVmVHlwZShnbG9iYWwudHlwZSkpIHsKICAgICAgICAgICAg
IFZhbHVlKiBpbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwg
c2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSkpOwpAQCAtMTE5OSw3
ICsxNDkxLDcgQEAgaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFdyaXRlQmFycmllckZv
ckpTV3JhcHBlcigpCiAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CiB9CiAKLWlu
bGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVy
YXRpb24pCitpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQ
b2ludGVyKFZhbHVlKiBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9w
ZXJhdGlvbikKIHsKICAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSKTsKIApAQCAtMTI2OCw3ICsx
NTYwLDcgQEAgaW5saW5lIEIzOjpLaW5kIEIzSVJHZW5lcmF0b3I6Om1lbW9yeUtpbmQoQjM6Ok9w
Y29kZSBtZW1vcnlPcCkKICAgICByZXR1cm4gbWVtb3J5T3A7CiB9CiAKLWlubGluZSBWYWx1ZSog
QjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBw
b2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQoraW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpl
bWl0TG9hZE9wKExvYWRPcFR5cGUgb3AsIFZhbHVlKiBwb2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0
KQogewogICAgIGludDMyX3Qgb2Zmc2V0ID0gZml4dXBQb2ludGVyUGx1c09mZnNldChwb2ludGVy
LCB1b2Zmc2V0KTsKIApAQCAtMTMzOCw4ICsxNjMwLDkgQEAgaW5saW5lIFZhbHVlKiBCM0lSR2Vu
ZXJhdG9yOjplbWl0TG9hZE9wKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIs
IHUKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1hdXRvIEIzSVJHZW5l
cmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRv
IEIzSVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRl
clZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CisgICAgVmFsdWUqIHBvaW50ZXIgPSBnZXQocG9pbnRlclZhcik7CiAgICAgQVNT
RVJUKHBvaW50ZXItPnR5cGUoKSA9PSBJbnQzMik7CiAKICAgICBpZiAoVU5MSUtFTFkoc3VtT3Zl
cmZsb3dzPHVpbnQzMl90PihvZmZzZXQsIHNpemVPZkxvYWRPcChvcCkpKSkgewpAQCAtMTM1Niw3
ICsxNjQ5LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJl
c3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJgogICAgICAgICBjYXNlIExvYWRPcFR5
cGU6OkkzMkxvYWQ6CiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToKICAgICAg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25z
dGFudChJbnQzMiwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50KEludDMy
LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRM
b2FkOFM6CiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgpAQCAtMTM2NSwxOCAr
MTY1OCwxOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmCiAgICAgICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STY0TG9hZDMyUzoKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOgogICAgICAg
ICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25z
dGFudChJbnQ2NCwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50KEludDY0
LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJM
b2FkOgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoRmxvYXQsIDApOworICAgICAgICAg
ICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChGbG9hdCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKLSAgICAgICAgICAgIHJlc3VsdCA9
IGNvbnN0YW50KERvdWJsZSwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50
KERvdWJsZSwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgIH0gZWxz
ZQotICAgICAgICByZXN1bHQgPSBlbWl0TG9hZE9wKG9wLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9p
bnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkxvYWRPcChvcCkpLCBvZmZzZXQpOworICAgICAg
ICByZXN1bHQgPSBwdXNoKGVtaXRMb2FkT3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVy
KHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCkpOwogCiAgICAgcmV0
dXJuIHsgfTsKIH0KQEAgLTE0MDIsNyArMTY5NSw3IEBAIGlubGluZSB1aW50MzJfdCBzaXplT2ZT
dG9yZU9wKFN0b3JlT3BUeXBlIG9wKQogfQogCiAKLWlubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6
OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHBy
ZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKK2lubGluZSB2b2lkIEIzSVJHZW5l
cmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUq
IHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQogewogICAgIGludDMyX3Qgb2Zmc2V0ID0gZml4dXBQ
b2ludGVyUGx1c09mZnNldChwb2ludGVyLCB1b2Zmc2V0KTsKIApAQCAtMTQzNyw4ICsxNzMwLDEw
IEBAIGlubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9w
LCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNl
dCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjpzdG9yZShTdG9yZU9wVHlw
ZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlclZhciwgRXhwcmVzc2lvblR5cGUgdmFsdWVWYXIs
IHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBwb2ludGVy
ID0gZ2V0KHBvaW50ZXJWYXIpOworICAgIFZhbHVlKiB2YWx1ZSA9IGdldCh2YWx1ZVZhcik7CiAg
ICAgQVNTRVJUKHBvaW50ZXItPnR5cGUoKSA9PSBJbnQzMik7CiAKICAgICBpZiAoVU5MSUtFTFko
c3VtT3ZlcmZsb3dzPHVpbnQzMl90PihvZmZzZXQsIHNpemVPZlN0b3JlT3Aob3ApKSkpIHsKQEAg
LTE0NjQsOSArMTc1OSw5IEBAIGlubGluZSB1aW50MzJfdCBzaXplT2ZBdG9taWNPcE1lbW9yeUFj
Y2VzcyhFeHRBdG9taWNPcFR5cGUgb3ApCiAgICAgcmV0dXJuIGJ5dGVzRm9yV2lkdGgoYWNjZXNz
V2lkdGgob3ApKTsKIH0KIAotaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpzYW5pdGl6ZUF0
b21pY1Jlc3VsdChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBFeHByZXNzaW9u
VHlwZSByZXN1bHQpCitpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OnNhbml0aXplQXRvbWlj
UmVzdWx0KEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIFZhbHVlKiByZXN1bHQp
CiB7Ci0gICAgYXV0byBzYW5pdGl6ZTMyID0gWyZdKEV4cHJlc3Npb25UeXBlIHJlc3VsdCkgewor
ICAgIGF1dG8gc2FuaXRpemUzMiA9IFsmXShWYWx1ZSogcmVzdWx0KSB7CiAgICAgICAgIHN3aXRj
aCAoYWNjZXNzV2lkdGgob3ApKSB7CiAgICAgICAgIGNhc2UgQjM6OldpZHRoODoKICAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFu
ZCwgb3JpZ2luKCksIHJlc3VsdCwgY29uc3RhbnQoSW50MzIsIDB4ZmYpKTsKQEAgLTE0OTEsNyAr
MTc4Niw3IEBAIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6c2FuaXRpemVBdG9taWNSZXN1
bHQoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlCiAgICAgfQogfQogCi1WYWx1ZSogQjNJ
UkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhFeHRBdG9taWNP
cFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHB0ciwgdWludDMyX3Qgb2Zmc2V0KQorVmFsdWUqIEIz
SVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNPcHMoRXh0QXRvbWlj
T3BUeXBlIG9wLCBWYWx1ZSogcHRyLCB1aW50MzJfdCBvZmZzZXQpCiB7CiAgICAgYXV0byBwb2lu
dGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdp
bigpLCBwdHIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCBvZmZzZXQpKTsKICAgICBpZiAoYWNjZXNzV2lkdGgob3ApICE9IEIzOjpXaWR0
aDgpIHsKQEAgLTE1MDQsMTEgKzE3OTksMTEgQEAgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmZpeHVw
UG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNPcHMoRXh0QXRvbWljT3BUeXBlIG9wLCBFeHAKICAg
ICByZXR1cm4gcG9pbnRlcjsKIH0KIAotaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0
QXRvbWljTG9hZE9wKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IHVvZmZzZXQpCitpbmxpbmUgVmFsdWUqIEIzSVJHZW5l
cmF0b3I6OmVtaXRBdG9taWNMb2FkT3AoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlw
ZSwgVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90IHVvZmZzZXQpCiB7CiAgICAgcG9pbnRlciA9IGZp
eHVwUG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNPcHMob3AsIHBvaW50ZXIsIHVvZmZzZXQpOwog
Ci0gICAgRXhwcmVzc2lvblR5cGUgdmFsdWUgPSBudWxscHRyOworICAgIFZhbHVlKiB2YWx1ZSA9
IG51bGxwdHI7CiAgICAgc3dpdGNoIChhY2Nlc3NXaWR0aChvcCkpIHsKICAgICBjYXNlIEIzOjpX
aWR0aDg6CiAgICAgY2FzZSBCMzo6V2lkdGgxNjoKQEAgLTE1MzcsMjIgKzE4MzIsMjIgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphdG9taWNMb2FkKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1
ZVR5cGUsIEV4cHJlc3Npb25UeXAKIAogICAgICAgICBzd2l0Y2ggKHZhbHVlVHlwZS5raW5kKSB7
CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkkzMjoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0
YW50KEludDMyLCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50MzIs
IDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJNjQ6Ci0g
ICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChJbnQ2NCwgMCk7CisgICAgICAgICAgICByZXN1
bHQgPSBwdXNoKGNvbnN0YW50KEludDY0LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICByZXN1bHQg
PSBlbWl0QXRvbWljTG9hZE9wKG9wLCB2YWx1ZVR5cGUsIGVtaXRDaGVja0FuZFByZXBhcmVQb2lu
dGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgb2Zm
c2V0KTsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChlbWl0QXRvbWljTG9hZE9wKG9wLCB2YWx1ZVR5
cGUsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKGdldChwb2ludGVyKSwgb2Zmc2V0LCBzaXpl
T2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCBvZmZzZXQpKTsKIAogICAgIHJldHVybiB7IH07
CiB9CiAKLWlubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNTdG9yZU9wKEV4dEF0
b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4
cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQoraW5saW5lIHZvaWQgQjNJUkdl
bmVyYXRvcjo6ZW1pdEF0b21pY1N0b3JlT3AoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVl
VHlwZSwgVmFsdWUqIHBvaW50ZXIsIFZhbHVlKiB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKIHsK
ICAgICBwb2ludGVyID0gZml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhvcCwgcG9p
bnRlciwgdW9mZnNldCk7CiAKQEAgLTE1NzMsMTIgKzE4NjgsMTIgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphdG9taWNTdG9yZShFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBFeHBy
ZXNzaW9uVHkKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2Vw
dGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKICAgICAgICAgfSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIGVtaXRBdG9taWNTdG9yZU9wKG9wLCB2YWx1ZVR5cGUsIGVtaXRDaGVja0Fu
ZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nl
c3Mob3ApKSwgdmFsdWUsIG9mZnNldCk7CisgICAgICAgIGVtaXRBdG9taWNTdG9yZU9wKG9wLCB2
YWx1ZVR5cGUsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKGdldChwb2ludGVyKSwgb2Zmc2V0
LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCBnZXQodmFsdWUpLCBvZmZzZXQpOwog
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0
QXRvbWljQmluYXJ5Uk1XT3AoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZz
ZXQpCitpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNCaW5hcnlSTVdPcChF
eHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUq
IHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQogewogICAgIHBvaW50ZXIgPSBmaXh1cFBvaW50ZXJQ
bHVzT2Zmc2V0Rm9yQXRvbWljT3BzKG9wLCBwb2ludGVyLCB1b2Zmc2V0KTsKIApAQCAtMTY2Mywy
MiArMTk1OCwyMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmF0b21pY0JpbmFyeVJNVyhFeHRBdG9t
aWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBFeHByZXNzaQogCiAgICAgICAgIHN3aXRjaCAo
dmFsdWVUeXBlLmtpbmQpIHsKICAgICAgICAgY2FzZSBUeXBlS2luZDo6STMyOgotICAgICAgICAg
ICAgcmVzdWx0ID0gY29uc3RhbnQoSW50MzIsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVz
aChjb25zdGFudChJbnQzMiwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
VHlwZUtpbmQ6Okk2NDoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDY0LCAwKTsK
KyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50NjQsIDApKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfSBlbHNl
Ci0gICAgICAgIHJlc3VsdCA9IGVtaXRBdG9taWNCaW5hcnlSTVdPcChvcCwgdmFsdWVUeXBlLCBl
bWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkF0b21pY09w
TWVtb3J5QWNjZXNzKG9wKSksIHZhbHVlLCBvZmZzZXQpOworICAgICAgICByZXN1bHQgPSBwdXNo
KGVtaXRBdG9taWNCaW5hcnlSTVdPcChvcCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJl
UG9pbnRlcihnZXQocG9pbnRlciksIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mo
b3ApKSwgZ2V0KHZhbHVlKSwgb2Zmc2V0KSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCi1WYWx1
ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY0NvbXBhcmVFeGNoYW5nZShFeHRBdG9taWNPcFR5
cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9u
VHlwZSBleHBlY3RlZCwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCitW
YWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY0NvbXBhcmVFeGNoYW5nZShFeHRBdG9taWNP
cFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUqIGV4cGVjdGVk
LCBWYWx1ZSogdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCiB7CiAgICAgcG9pbnRlciA9IGZpeHVw
UG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNPcHMob3AsIHBvaW50ZXIsIHVvZmZzZXQpOwogCkBA
IC0xNzg4LDM2ICsyMDgzLDQxIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljQ29tcGFyZUV4
Y2hhbmdlKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4CiAKICAgICAgICAg
c3dpdGNoICh2YWx1ZVR5cGUua2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6Ci0g
ICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChJbnQzMiwgMCk7CisgICAgICAgICAgICByZXN1
bHQgPSBwdXNoKGNvbnN0YW50KEludDMyLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBUeXBlS2luZDo6STY0OgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50
NjQsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQ2NCwgMCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZW1pdEF0b21pY0NvbXBhcmVFeGNoYW5nZShvcCwg
dmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNp
emVPZkF0b21pY09wTWVtb3J5QWNjZXNzKG9wKSksIGV4cGVjdGVkLCB2YWx1ZSwgb2Zmc2V0KTsK
KyAgICAgICAgcmVzdWx0ID0gcHVzaChlbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKG9wLCB2YWx1
ZVR5cGUsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKGdldChwb2ludGVyKSwgb2Zmc2V0LCBz
aXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCBnZXQoZXhwZWN0ZWQpLCBnZXQodmFsdWUp
LCBvZmZzZXQpKTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6
YXRvbWljV2FpdChFeHRBdG9taWNPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4
cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSB0aW1lb3V0LCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdl
bmVyYXRvcjo6YXRvbWljV2FpdChFeHRBdG9taWNPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBv
aW50ZXJWYXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlVmFyLCBFeHByZXNzaW9uVHlwZSB0aW1lb3V0
VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKKyAgICBWYWx1ZSogcG9pbnRlciA9IGdldChwb2ludGVyVmFyKTsKKyAgICBWYWx1
ZSogdmFsdWUgPSBnZXQodmFsdWVWYXIpOworICAgIFZhbHVlKiB0aW1lb3V0ID0gZ2V0KHRpbWVv
dXRWYXIpOworICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG51bGxwdHI7CiAgICAgaWYgKG9wID09
IEV4dEF0b21pY09wVHlwZTo6TWVtb3J5QXRvbWljV2FpdDMyKSB7Ci0gICAgICAgIHJlc3VsdCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3Jp
Z2luKCksCisgICAgICAgIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
Q2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1
bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWVtb3J5QXRvbWljV2FpdDMyKSksCiAg
ICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCksIHBvaW50ZXIsIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpLCB2YWx1ZSwgdGlt
ZW91dCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKKyAgICAgICAgcmVz
dWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywg
SW50MzIsIG9yaWdpbigpLAogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25NZW1vcnlBdG9taWNXYWl0NjQpKSwKICAgICAgICAgICAgIGluc3RhbmNl
VmFsdWUoKSwgcG9pbnRlciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIG9mZnNldCksIHZhbHVlLCB0aW1lb3V0KTsKICAgICB9CiAKICAg
ICB7CisgICAgICAgIHJlc3VsdCA9IHB1c2gocmVzdWx0VmFsdWUpOwogICAgICAgICBDaGVja1Zh
bHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9j
LCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4s
IG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhj
ZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOwpAQCAtMTgyOSwxMyArMjEyOSwx
MyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmF0b21pY1dhaXQoRXh0QXRvbWljT3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmF0b21p
Y05vdGlmeShFeHRBdG9taWNPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Np
b25UeXBlIGNvdW50LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAorICAgIFZhbHVlKiByZXN1bHRW
YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQz
Miwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uTWVtb3J5QXRvbWljTm90aWZ5KSksCi0gICAgICAgIGluc3RhbmNlVmFsdWUoKSwgcG9p
bnRlciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIG9mZnNldCksIGNvdW50KTsKLQorICAgICAgICBpbnN0YW5jZVZhbHVlKCksIGdldChw
b2ludGVyKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIG9mZnNldCksIGdldChjb3VudCkpOwogICAgIHsKKyAgICAgICAgcmVzdWx0ID0g
cHVzaChyZXN1bHRWYWx1ZSk7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1Ro
YW4sIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIHJlc3VsdFZhbHVl
LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAg
ICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5k
c01lbW9yeUFjY2Vzcyk7CkBAIC0xODUxLDggKzIxNTEsOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmF0b21pY0ZlbmNlKEV4dEF0b21pY09wVHlwZSwgdWludDhfdCkgLT4gUGFydGlhbFJlc3VsdAog
ICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6dHJ1bmNTYXR1cmF0ZWQo
RXh0MU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
LCBUeXBlIHJldHVyblR5cGUsIFR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVy
YXRvcjo6dHJ1bmNTYXR1cmF0ZWQoRXh0MU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgYXJnVmFy
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCBUeXBlIHJldHVyblR5cGUsIFR5cGUpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1h
eEZsb2F0ID0gbnVsbHB0cjsKICAgICBWYWx1ZSogbWluRmxvYXQgPSBudWxscHRyOwogICAgIFZh
bHVlKiBzaWduQml0Q29uc3RhbnQgPSBudWxscHRyOwpAQCAtMjAwMiwyNiArMjMwMywyNiBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OnRydW5jU2F0dXJhdGVkKEV4dDFPcFR5cGUgb3AsIEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvbgogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3Qs
IG9yaWdpbigpLAorICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywg
bWluRmxvYXQpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLAogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4RmxvYXQp
LAogICAgICAgICAgICAgcGF0Y2hwb2ludCwgbWF4UmVzdWx0KSwKLSAgICAgICAgcmVxdWlyZXNO
YU5DaGVjayA/IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNl
bGVjdCwgb3JpZ2luKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
RXF1YWwsIG9yaWdpbigpLCBhcmcsIGFyZyksIG1pblJlc3VsdCwgemVybykgOiBtaW5SZXN1bHQp
OworICAgICAgICByZXF1aXJlc05hTkNoZWNrID8gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIGFyZywgYXJnKSwgbWluUmVzdWx0
LCB6ZXJvKSA6IG1pblJlc3VsdCkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9u
VHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgY29uZGl0aW9uLCBub25a
ZXJvLCB6ZXJvKTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIGdldChjb25kaXRpb24pLCBnZXQo
bm9uWmVybyksIGdldCh6ZXJvKSkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIEIzSVJHZW5lcmF0
b3I6OkV4cHJlc3Npb25UeXBlIEIzSVJHZW5lcmF0b3I6OmFkZENvbnN0YW50KFR5cGUgdHlwZSwg
dWludDY0X3QgdmFsdWUpCiB7CiAKLSAgICByZXR1cm4gY29uc3RhbnQodG9CM1R5cGUodHlwZSks
IHZhbHVlKTsKKyAgICByZXR1cm4gcHVzaChjb25zdGFudCh0b0IzVHlwZSh0eXBlKSwgdmFsdWUp
KTsKIH0KIAogdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0RW50cnlUaWVyVXBDaGVjaygpCkBAIC0y
MDgyLDIwICsyMzgzLDIxIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVj
ayh1aW50MzJfdCBsb29wSW5kZXgsIGNvbnN0IFN0YWNrJiBlbmNsb3NpCiAKICAgICBWYWx1ZSog
Y291bnREb3duTG9jYXRpb24gPSBjb25zdGFudChwb2ludGVyVHlwZSgpLCBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PigmbV90aWVyVXAtPm1fY291bnRlciksIG9yaWdpbik7CiAKLSAgICBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+IHN0YWNrbWFwOwotICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2Fs
cykgewotICAgICAgICBWYWx1ZSogcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9yaWdpbiwgbG9jYWwpOwotICAgICAgICBz
dGFja21hcC5hcHBlbmQocmVzdWx0KTsKLSAgICB9CisgICAgVmVjdG9yPFZhbHVlKj4gc3RhY2tt
YXA7CisgICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKQorICAgICAgICBzdGFja21hcC5h
cHBlbmQoZ2V0KGxvY2FsKSk7CiAgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBj
b250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJ
bmRleCkgeworICAgICAgICBhdXRvJiBkYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2Nv
bnRyb2xJbmRleF0uY29udHJvbERhdGE7CiAgICAgICAgIGF1dG8mIGV4cHJlc3Npb25TdGFjayA9
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lv
blN0YWNrOwogICAgICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA6IGV4cHJlc3Npb25T
dGFjaykKLSAgICAgICAgICAgIHN0YWNrbWFwLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICBz
dGFja21hcC5hcHBlbmQoZ2V0KHZhbHVlKSk7CisgICAgICAgIGlmIChDb250cm9sVHlwZTo6aXNB
bnlDYXRjaChkYXRhKSkKKyAgICAgICAgICAgIHN0YWNrbWFwLmFwcGVuZChnZXQoZGF0YS5leGNl
cHRpb24oKSkpOwogICAgIH0KICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA6IGVuY2xv
c2luZ1N0YWNrKQotICAgICAgICBzdGFja21hcC5hcHBlbmQodmFsdWUpOworICAgICAgICBzdGFj
a21hcC5hcHBlbmQoZ2V0KHZhbHVlKSk7CiAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gdmFsdWUg
OiBuZXdTdGFjaykKLSAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgc3Rh
Y2ttYXAuYXBwZW5kKGdldCh2YWx1ZSkpOwogCiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpW
b2lkLCBvcmlnaW4pOwogICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKQEAg
LTIxNDAsOTMgKzI0NDIsNzIgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENo
ZWNrKHVpbnQzMl90IGxvb3BJbmRleCwgY29uc3QgU3RhY2smIGVuY2xvc2kKICAgICB9KTsKIH0K
IAorVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmxvYWRGcm9tU2NyYXRjaEJ1ZmZlcih1bnNpZ25lZCYg
aW5kZXhJbkJ1ZmZlciwgVmFsdWUqIHBvaW50ZXIsIEIzOjpUeXBlIHR5cGUpCit7CisgICAgc2l6
ZV90IG9mZnNldCA9IHNpemVvZih1aW50NjRfdCkgKiBpbmRleEluQnVmZmVyKys7CisgICAgUkVM
RUFTRV9BU1NFUlQodHlwZS5pc051bWVyaWMoKSk7CisgICAgcmV0dXJuIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdHlwZSwgb3JpZ2luKCksIHBv
aW50ZXIsIG9mZnNldCk7Cit9CisKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6Y29ubmVjdENvbnRyb2xF
bnRyeSh1bnNpZ25lZCYgaW5kZXhJbkJ1ZmZlciwgVmFsdWUqIHBvaW50ZXIsIENvbnRyb2xEYXRh
JiBkYXRhLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBDb250cm9sRGF0YSYgY3VycmVudERhdGEs
IGJvb2wgZmlsbExvb3BQaGlzKQoreworICAgIC8vIEZvciBlYWNoIHN0YWNrIGVudHJ5IGVuY2xv
c2VkIGJ5IHRoaXMgbG9vcCB3ZSBuZWVkIHRvIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggYSBwaGkg
c28gd2UgY2FuIGZpbGwgaXQgb24gT1NSIGVudHJ5LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBleHByZXNzaW9uU3RhY2suc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgVHlwZWRFeHByZXNz
aW9uIHZhbHVlID0gZXhwcmVzc2lvblN0YWNrW2ldOworICAgICAgICBhdXRvKiBsb2FkID0gbG9h
ZEZyb21TY3JhdGNoQnVmZmVyKGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIHZhbHVlLT50eXBlKCkp
OworICAgICAgICBpZiAoZmlsbExvb3BQaGlzKQorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGxvYWQsIGRhdGEucGhp
c1tpXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIG9yaWdpbigpLCB2YWx1ZS52YWx1ZSgpLCBs
b2FkKTsKKyAgICB9CisgICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpICYmICZk
YXRhICE9ICZjdXJyZW50RGF0YSkgeworICAgICAgICBhdXRvKiBsb2FkID0gbG9hZEZyb21TY3Jh
dGNoQnVmZmVyKGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIHBvaW50ZXJUeXBlKCkpOworICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBv
cmlnaW4oKSwgZGF0YS5leGNlcHRpb24oKSwgbG9hZCk7CisgICAgfQorfTsKKwogYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xv
c2luZ1N0YWNrLCBDb250cm9sVHlwZSYgYmxvY2ssIFN0YWNrJiBuZXdTdGFjaywgdWludDMyX3Qg
bG9vcEluZGV4KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQmFzaWNCbG9jayogYm9keSA9IG1f
cHJvYy5hZGRCbG9jaygpOwogICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5h
ZGRCbG9jaygpOwogCi0gICAgYmxvY2sgPSBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBz
aWduYXR1cmUsIEJsb2NrVHlwZTo6TG9vcCwgY29udGludWF0aW9uLCBib2R5KTsKKyAgICBibG9j
ayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpM
b29wLCBtX3N0YWNrU2l6ZSwgY29udGludWF0aW9uLCBib2R5KTsKKwogICAgIHVuc2lnbmVkIG9m
ZnNldCA9IGVuY2xvc2luZ1N0YWNrLnNpemUoKSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQo
KTsgKytpKSB7CiAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA9IGVuY2xvc2luZ1N0YWNr
LmF0KG9mZnNldCArIGkpOwotICAgICAgICBhdXRvKiB1cHNpbG9uID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHZhbHVlKTsKICAgICAg
ICAgVmFsdWUqIHBoaSA9IGJsb2NrLnBoaXNbaV07CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnZXQodmFsdWUpLCBwaGkp
OwogICAgICAgICBib2R5LT5hcHBlbmQocGhpKTsKLSAgICAgICAgdXBzaWxvbi0+c2V0UGhpKHBo
aSk7Ci0gICAgICAgIG5ld1N0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZCh2YWx1ZS50eXBlKCksIHBo
aSk7CisgICAgICAgIHNldChib2R5LCB2YWx1ZSwgcGhpKTsKKyAgICAgICAgbmV3U3RhY2suYXBw
ZW5kKHZhbHVlKTsKICAgICB9CisgICAgZW5jbG9zaW5nU3RhY2suc2hyaW5rKG9mZnNldCk7CiAK
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwg
b3JpZ2luKCksIGJvZHkpOwogICAgIGlmIChsb29wSW5kZXggPT0gbV9sb29wSW5kZXhGb3JPU1JF
bnRyeSkgewogICAgICAgICBkYXRhTG9nTG5JZihXYXNtQjNJUkdlbmVyYXRvckludGVybmFsOjp2
ZXJib3NlLCAiU2V0dGluZyB1cCBmb3IgT1NSIGVudHJ5Iik7CiAKLSAgICAgICAgbV9jdXJyZW50
QmxvY2sgPSBtX3Jvb3RCbG9jazsKLSAgICAgICAgVmFsdWUqIHBvaW50ZXIgPSBtX3Jvb3RCbG9j
ay0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9yb290QmxvY2tzWzBd
OworICAgICAgICBWYWx1ZSogcG9pbnRlciA9IG1fcm9vdEJsb2Nrc1swXS0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CiAKICAgICAgICAgdW5zaWduZWQgaW5kZXhJbkJ1ZmZlciA9IDA7Ci0gICAgICAgIGF1dG8gbG9h
ZEZyb21TY3JhdGNoQnVmZmVyID0gWyZdIChCMzo6VHlwZSB0eXBlKSB7Ci0gICAgICAgICAgICBz
aXplX3Qgb2Zmc2V0ID0gc2l6ZW9mKHVpbnQ2NF90KSAqIGluZGV4SW5CdWZmZXIrKzsKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUuaXNOdW1lcmljKCkpOwotICAgICAgICAgICAgcmV0
dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
dHlwZSwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7Ci0gICAgICAgIH07CiAKICAgICAgICAg
Zm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKQotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIGxvY2FsLCBs
b2FkRnJvbVNjcmF0Y2hCdWZmZXIobG9jYWwtPnR5cGUoKSkpOwotCi0gICAgICAgIGF1dG8gY29u
bmVjdENvbnRyb2xFbnRyeSA9IFsmXShjb25zdCBDb250cm9sRGF0YSYgZGF0YSwgU3RhY2smIGV4
cHJlc3Npb25TdGFjaykgewotICAgICAgICAgICAgLy8gRm9yIGVhY2ggc3RhY2sgZW50cnkgZW5j
bG9zZWQgYnkgdGhpcyBsb29wIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBhIHBo
aSBzbyB3ZSBjYW4gZmlsbCBpdCBvbiBPU1IgZW50cnkuCi0gICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBzb3VyY2VCbG9jayA9IG51bGxwdHI7Ci0gICAgICAgICAgICB1bnNpZ25lZCBibG9ja0luZGV4
ID0gMDsKLSAgICAgICAgICAgIEIzOjpJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fcHJvYyk7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhwcmVzc2lvblN0YWNrLnNp
emUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlID0gZXhw
cmVzc2lvblN0YWNrW2ldOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNDb25zdGFudCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICsraW5kZXhJbkJ1ZmZlcjsKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHZhbHVlLT5vd25lciAhPSBzb3VyY2VCbG9jaykgewotICAgICAgICAgICAgICAgICAgICBpZiAo
c291cmNlQmxvY2spCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0
ZShzb3VyY2VCbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbnNlcnRpb25TZXQu
aXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUIzSVJHZW5l
cmF0b3JJbnRlcm5hbDo6dmVyYm9zZSAmJiBzb3VyY2VCbG9jaywgIkV4ZWN1dGVkIGluc2VydGlv
biBzZXQgaW50bzogIiwgKnNvdXJjZUJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2tJ
bmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZUJsb2NrID0gdmFsdWUtPm93bmVy
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHdoaWxlIChzb3VyY2VCbG9j
ay0+YXQoYmxvY2tJbmRleCsrKSAhPSB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGJsb2NrSW5kZXggPCBzb3VyY2VCbG9jay0+c2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoc291cmNlQmxvY2stPmF0KGJsb2NrSW5kZXggLSAxKSA9PSB2YWx1ZSk7Ci0KLSAgICAgICAg
ICAgICAgICBhdXRvKiBwaGkgPSBkYXRhLmNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIFBoaSwgIHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSk7Ci0gICAgICAgICAg
ICAgICAgZXhwcmVzc2lvblN0YWNrW2ldID0gVHlwZWRFeHByZXNzaW9uIHsgdmFsdWUudHlwZSgp
LCBwaGkgfTsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFVwc2ls
b25WYWx1ZT4obV9wcm9jLCB2YWx1ZS0+b3JpZ2luKCksIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcih2
YWx1ZS0+dHlwZSgpKSwgcGhpKTsKLQotICAgICAgICAgICAgICAgIGF1dG8qIHNvdXJjZVVwc2ls
b24gPSBtX3Byb2MuYWRkPFVwc2lsb25WYWx1ZT4odmFsdWUtPm9yaWdpbigpLCB2YWx1ZSwgcGhp
KTsKLSAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUoYmxvY2tJbmRleCwg
c291cmNlVXBzaWxvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc291cmNlQmxv
Y2spCi0gICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc291cmNlQmxvY2spOwot
ICAgICAgICB9OworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIGxvY2FsLCBsb2FkRnJvbVNjcmF0Y2hCdWZm
ZXIoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgbG9jYWwtPnR5cGUoKSkpOwogCiAgICAgICAgIGZv
ciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNv
bnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKICAgICAgICAgICAgIGF1dG8m
IGRhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0
YTsKICAgICAgICAgICAgIGF1dG8mIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9s
U3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOwotICAgICAgICAg
ICAgY29ubmVjdENvbnRyb2xFbnRyeShkYXRhLCBleHByZXNzaW9uU3RhY2spOworICAgICAgICAg
ICAgY29ubmVjdENvbnRyb2xFbnRyeShpbmRleEluQnVmZmVyLCBwb2ludGVyLCBkYXRhLCBleHBy
ZXNzaW9uU3RhY2ssIGJsb2NrKTsKICAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkgewotICAgICAgICAgICAg
VHlwZWRFeHByZXNzaW9uIHZhbHVlID0gZW5jbG9zaW5nU3RhY2suYXQob2Zmc2V0ICsgaSk7Ci0g
ICAgICAgICAgICBWYWx1ZSogcGhpID0gYmxvY2sucGhpc1tpXTsKLSAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIHZhbHVlLT5vcmlnaW4o
KSwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKHZhbHVlLT50eXBlKCkpLCBwaGkpOwotICAgICAgICB9
Ci0gICAgICAgIGVuY2xvc2luZ1N0YWNrLnNocmluayhvZmZzZXQpOwotICAgICAgICBjb25uZWN0
Q29udHJvbEVudHJ5KGJsb2NrLCBlbmNsb3NpbmdTdGFjayk7CisgICAgICAgIGNvbm5lY3RDb250
cm9sRW50cnkoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgYmxvY2ssIGVuY2xvc2luZ1N0YWNrLCBi
bG9jayk7CisgICAgICAgIGNvbm5lY3RDb250cm9sRW50cnkoaW5kZXhJbkJ1ZmZlciwgcG9pbnRl
ciwgYmxvY2ssIG5ld1N0YWNrLCBibG9jaywgdHJ1ZSk7CiAKICAgICAgICAgbV9vc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplID0gaW5kZXhJbkJ1ZmZlcjsKICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBib2R5KTsKICAg
ICAgICAgYm9keS0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwotICAgIH0gZWxzZQot
ICAgICAgICBlbmNsb3NpbmdTdGFjay5zaHJpbmsob2Zmc2V0KTsKKyAgICB9CiAKICAgICBtX2N1
cnJlbnRCbG9jayA9IGJvZHk7CiAgICAgZW1pdExvb3BUaWVyVXBDaGVjayhsb29wSW5kZXgsIGVu
Y2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CkBAIC0yMjM1LDcgKzI1MTYsNyBAQCBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9z
aW5nU3RhY2ssIENvbgogCiBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9y
OjphZGRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUpCiB7Ci0gICAgcmV0dXJuIENv
bnRyb2xEYXRhKG1fcHJvYywgT3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpUb3BMZXZl
bCwgbV9wcm9jLmFkZEJsb2NrKCkpOworICAgIHJldHVybiBDb250cm9sRGF0YShtX3Byb2MsIE9y
aWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6VG9wTGV2ZWwsIG1fc3RhY2tTaXplLCBtX3By
b2MuYWRkQmxvY2soKSk7CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQmxvY2soQmxvY2tT
aWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBu
ZXdCbG9jaywgU3RhY2smIG5ld1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CkBAIC0yMjQzLDcgKzI1
MjQsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEJsb2NrKEJsb2NrU2lnbmF0dXJlIHNpZ25h
dHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDbwogICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVh
dGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwogCiAgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVu
Y2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7Ci0gICAgbmV3QmxvY2sgPSBDb250cm9sRGF0YShtX3By
b2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6QmxvY2ssIGNvbnRpbnVhdGlvbik7
CisgICAgbmV3QmxvY2sgPSBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUs
IEJsb2NrVHlwZTo6QmxvY2ssIG1fc3RhY2tTaXplLCBjb250aW51YXRpb24pOwogICAgIHJldHVy
biB7IH07CiB9CiAKQEAgLTIyNTUsMjAgKzI1MzYsMjAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwg
U3QKICAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgIEJh
c2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwogCi0gICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwg
Y29uZGl0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEIzOjpCcmFuY2gsIG9yaWdpbigpLCBnZXQoY29uZGl0aW9uKSk7CiAgICAgbV9jdXJyZW50Qmxv
Y2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRha2VuKSwgRnJlcXVlbnRlZEJsb2Nr
KG5vdFRha2VuKSk7CiAgICAgdGFrZW4tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsK
ICAgICBub3RUYWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogCiAgICAgbV9j
dXJyZW50QmxvY2sgPSB0YWtlbjsKICAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5n
U3RhY2ssIG5ld1N0YWNrKTsKLSAgICByZXN1bHQgPSBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdp
bigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6SWYsIGNvbnRpbnVhdGlvbiwgbm90VGFrZW4pOwor
ICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxv
Y2tUeXBlOjpJZiwgbV9zdGFja1NpemUsIGNvbnRpbnVhdGlvbiwgbm90VGFrZW4pOwogICAgIHJl
dHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRWxzZShDb250cm9sRGF0YSYg
ZGF0YSwgY29uc3QgU3RhY2smIGN1cnJlbnRTdGFjaykgLT4gUGFydGlhbFJlc3VsdAogewotICAg
IHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0YS5waGlzKTsKKyAgICB1bmlm
eVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEpOwogICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgZGF0YS5jb250
aW51YXRpb24pOwogICAgIHJldHVybiBhZGRFbHNlVG9VbnJlYWNoYWJsZShkYXRhKTsKIH0KQEAg
LTIyNzYsMTEgKzI1NTcsMjUzIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRWxzZShDb250cm9s
RGF0YSYgZGF0YSwgY29uc3QgU3RhY2smIGN1cnJlbnRTdGFjaykgLT4gUGFyCiBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJiBkYXRhKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJ
Zik7CisgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpICsgZGF0YS5tX3NpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpOwogICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5zcGVjaWFsOwog
ICAgIGRhdGEuY29udmVydElmVG9CbG9jaygpOwogICAgIHJldHVybiB7IH07CiB9CiAKK2F1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVu
Y2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICArK21fdHJ5RGVwdGg7CisKKyAgICBCYXNpY0Jsb2NrKiBjb250
aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwg
ZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKKyAgICByZXN1bHQgPSBDb250cm9sRGF0YShtX3By
b2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6VHJ5LCBtX3N0YWNrU2l6ZSwgY29u
dGludWF0aW9uLCArK21fY2FsbFNpdGVJbmRleCwgbV90cnlEZXB0aCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25J
bmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFN0YWNrJiBjdXJyZW50U3RhY2ssIENv
bnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhKTsKKyAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCks
IGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4gYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKGV4
Y2VwdGlvbkluZGV4LCBzaWduYXR1cmUsIGRhdGEsIHJlc3VsdHMpOworfQorCitQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlIEIzSVJHZW5lcmF0b3I6OnByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0
aW9ucyhCYXNpY0Jsb2NrKiBibG9jaywgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaCkKK3sKKyAgICAr
K21fY2FsbFNpdGVJbmRleDsKKyAgICBpZiAoIW1fdHJ5RGVwdGgpCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICBWZWN0b3I8VmFsdWUqPiBzdGFja21hcDsKKyAgICBPcmlnaW4gb3JpZ2luID0g
dGhpcy0+b3JpZ2luKCk7CisgICAgZm9yIChWYXJpYWJsZSogbG9jYWwgOiBtX2xvY2Fscykgewor
ICAgICAgICBWYWx1ZSogcmVzdWx0ID0gYmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPiht
X3Byb2MsIEIzOjpHZXQsIG9yaWdpbiwgbG9jYWwpOworICAgICAgICBzdGFja21hcC5hcHBlbmQo
cmVzdWx0KTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250
cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRl
eCkgeworICAgICAgICBDb250cm9sRGF0YSYgZGF0YSA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2so
KVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOworICAgICAgICBTdGFjayYgZXhwcmVzc2lvblN0
YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHBy
ZXNzaW9uU3RhY2s7CisgICAgICAgIGZvciAoVmFyaWFibGUqIHZhbHVlIDogZXhwcmVzc2lvblN0
YWNrKQorICAgICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKGdldChibG9jaywgdmFsdWUpKTsKKyAg
ICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpKQorICAgICAgICAgICAgc3Rh
Y2ttYXAuYXBwZW5kKGdldChibG9jaywgZGF0YS5leGNlcHRpb24oKSkpOworICAgIH0KKworICAg
IHVuc2lnbmVkIG9mZnNldCA9IHBhdGNoLT5udW1DaGlsZHJlbigpOworICAgIGlmIChwYXRjaC0+
dHlwZSgpICE9IFZvaWQpCisgICAgICAgIG9mZnNldCsrOworCisgICAgcGF0Y2gtPmVmZmVjdHMu
ZXhpdHNTaWRld2F5cyA9IHRydWU7CisgICAgcGF0Y2gtPmFwcGVuZFZlY3RvcldpdGhSZXAoc3Rh
Y2ttYXAsIFZhbHVlUmVwOjpMYXRlQ29sZEFueSk7CisKKyAgICByZXR1cm4gUGF0Y2hwb2ludEV4
Y2VwdGlvbkhhbmRsZSB7IG1fY2FsbFNpdGVJbmRleCwgb2Zmc2V0IH07Cit9CisKK2F1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4
LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExp
c3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBWYWx1ZSogb3BlcmF0aW9uUmVz
dWx0ID0gZW1pdENhdGNoSW1wbChDYXRjaEtpbmQ6OkNhdGNoLCBkYXRhLCBleGNlcHRpb25JbmRl
eCk7CisgICAgVmFsdWUqIHBheWxvYWQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJh
Y3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uUmVzdWx0
LCAxKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKTsgKytpKSB7CisgICAgICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsK
KyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlwZSh0eXBlKSwgb3JpZ2luKCksIHBheWxvYWQsIGkg
KiBzaXplb2YodWludDY0X3QpKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaCh2YWx1ZSkp
OworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENh
dGNoQWxsKFN0YWNrJiBjdXJyZW50U3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhKTsK
KyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwg
b3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4gYWRkQ2F0Y2hBbGxUb1Vu
cmVhY2hhYmxlKGRhdGEpOworfQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsVG9V
bnJlYWNoYWJsZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVt
aXRDYXRjaEltcGwoQ2F0Y2hLaW5kOjpDYXRjaEFsbCwgZGF0YSk7CisgICAgcmV0dXJuIHsgfTsK
K30KKworVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5kIGtpbmQs
IENvbnRyb2xUeXBlJiBkYXRhLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCkKK3sKKyAgICBtX2hh
c0NhdGNoID0gdHJ1ZTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOwor
ICAgIG1fcm9vdEJsb2Nrcy5hcHBlbmQobV9jdXJyZW50QmxvY2spOworICAgIG1fc3RhY2tTaXpl
ID0gZGF0YS5zdGFja1NpemUoKTsKKworICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkp
IHsKKyAgICAgICAgaWYgKGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCkKKyAgICAgICAgICAgIGRh
dGEuY29udmVydFRyeVRvQ2F0Y2goKyttX2NhbGxTaXRlSW5kZXgsIG1fcHJvYy5hZGRWYXJpYWJs
ZShwb2ludGVyVHlwZSgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRhdGEuY29udmVy
dFRyeVRvQ2F0Y2hBbGwoKyttX2NhbGxTaXRlSW5kZXgsIG1fcHJvYy5hZGRWYXJpYWJsZShwb2lu
dGVyVHlwZSgpKSk7CisgICAgfQorCisgICAgSGFuZGxlclR5cGUgaGFuZGxlclR5cGUgPSBraW5k
ID09IENhdGNoS2luZDo6Q2F0Y2ggPyBIYW5kbGVyVHlwZTo6Q2F0Y2ggOiBIYW5kbGVyVHlwZTo6
Q2F0Y2hBbGw7CisgICAgbV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoeyBoYW5kbGVyVHlwZSwg
ZGF0YS50cnlTdGFydCgpLCBkYXRhLnRyeUVuZCgpLCAwLCBtX3RyeURlcHRoLCBleGNlcHRpb25J
bmRleCB9KTsKKworICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNo
ZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9wcm9j
LCBtX2N1cnJlbnRCbG9jaywgZmFsc2UpOworCisgICAgVmFsdWUqIHBvaW50ZXIgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisKKyAgICB1bnNpZ25lZCBpbmRleEluQnVmZmVyID0gMDsK
KworICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIGxvY2Fs
LCBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgbG9jYWwtPnR5
cGUoKSkpOworCisgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9sSW5k
ZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgewor
ICAgICAgICBhdXRvJiBjb250cm9sRGF0YSA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250
cm9sSW5kZXhdLmNvbnRyb2xEYXRhOworICAgICAgICBhdXRvJiBleHByZXNzaW9uU3RhY2sgPSBt
X3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjazsKKyAgICAgICAgY29ubmVjdENvbnRyb2xFbnRyeShpbmRleEluQnVmZmVyLCBwb2ludGVy
LCBjb250cm9sRGF0YSwgZXhwcmVzc2lvblN0YWNrLCBkYXRhKTsKKyAgICB9CisKKyAgICBQYXRj
aHBvaW50VmFsdWUqIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2lu
dFZhbHVlPihtX3Byb2MsIG1fcHJvYy5hZGRUdXBsZSh7IHBvaW50ZXJUeXBlKCksIHBvaW50ZXJU
eXBlKCkgfSksIG9yaWdpbigpKTsKKyAgICByZXN1bHQtPmVmZmVjdHMuZXhpdHNTaWRld2F5cyA9
IHRydWU7CisgICAgcmVzdWx0LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdp
c3RlcnMoKSk7CisgICAgUmVnaXN0ZXJTZXQgY2xvYmJlckxhdGUgPSBSZWdpc3RlclNldDo6dm9s
YXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICByZXN1bHQtPmNsb2JiZXJMYXRlKGNsb2JiZXJMYXRlKTsKKyAg
ICByZXN1bHQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
OworICAgIHJlc3VsdC0+cmVzdWx0Q29uc3RyYWludHMuYXBwZW5kKFZhbHVlUmVwOjpyZWcoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByZXN1bHQtPnJlc3VsdENvbnN0cmFpbnRzLmFw
cGVuZChWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSMikpOworICAgIHJlc3Vs
dC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1zWzJdLmdw
cigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
Y2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFz
ayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21S
ZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUpKTsKKyAgICAgICAgfSk7CisgICAg
fSk7CisKKyAgICBWYWx1ZSogZXhjZXB0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxF
eHRyYWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXJUeXBlKCksIHJlc3VsdCwgMCk7
CisgICAgc2V0KGRhdGEuZXhjZXB0aW9uKCksIGV4Y2VwdGlvbik7CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiB0
YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IGFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZSh0YXJnZXQsIGRhdGEpOworfQorCithdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgdGFyZ2V0LCBD
b250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuc2lnbmVkIHRhcmdl
dERlcHRoID0gMDsKKyAgICBpZiAoQ29udHJvbFR5cGU6OmlzVHJ5KHRhcmdldCkpCisgICAgICAg
IHRhcmdldERlcHRoID0gdGFyZ2V0LnRyeURlcHRoKCk7CisKKyAgICBtX2V4Y2VwdGlvbkhhbmRs
ZXJzLmFwcGVuZCh7IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSwgZGF0YS50cnlTdGFydCgpLCArK21f
Y2FsbFNpdGVJbmRleCwgMCwgbV90cnlEZXB0aCwgdGFyZ2V0RGVwdGggfSk7CisgICAgcmV0dXJu
IHsgfTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaCA9IG1fcHJvYy5hZGQ8UGF0Y2hw
b2ludFZhbHVlPihCMzo6Vm9pZCwgb3JpZ2luKCkpOworICAgIHBhdGNoLT5lZmZlY3RzLnRlcm1p
bmFsID0gdHJ1ZTsKKyAgICBwYXRjaC0+YXBwZW5kKGluc3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6
OlNvbWVSZWdpc3Rlcik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgp
OyArK2kpCisgICAgICAgIHBhdGNoLT5hcHBlbmQoZ2V0KGFyZ3NbaV0pLCBWYWx1ZVJlcDo6c3Rh
Y2tBcmd1bWVudChpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgIHBhdGNoLT5jbG9i
YmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgUmVnaXN0ZXJT
ZXQgY2xvYmJlckxhdGUgPSBSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwo
KTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjbG9i
YmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQo
R1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJn
dW1lbnRHUFIzKTsKKyAgICBwYXRjaC0+Y2xvYmJlckxhdGUoY2xvYmJlckxhdGUpOworICAgIHBh
dGNoLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKG1fY3VycmVudEJs
b2NrLCBwYXRjaCk7CisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpcywgZXhjZXB0aW9uSW5k
ZXgsIGhhbmRsZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHBhcmFtcy5n
cFNjcmF0Y2goMCk7CisgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7
CisKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5n
cHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSksIHNjcmF0Y2gpOworICAgICAgICB7Cisg
ICAgICAgICAgICBhdXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRy
KENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoUHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgICAgIGppdC5h
bmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2sp
LCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhzY3JhdGNoLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9v
dGVyOjpvZmZzZXRPZlZNKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2Fz
ZSA9IGppdC5qdW1wKCk7CisKKyAgICAgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5r
KCZqaXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNj
cmF0Y2gsIFByZWNpc2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9m
ZnNldE9mVk0oKSAtIFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBzY3JhdGNoKTsK
KworICAgICAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOworICAgICAgICB9CisgICAgICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHNjcmF0
Y2gpOworCisgICAgICAgIGppdC5tb3ZlKHBhcmFtc1swXS5ncHIoKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoZXhjZXB0aW9uSW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAg
ICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMyk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0
LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOworICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25X
YXNtVGhyb3cpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZChwYXRjaCk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaCA9IG1fcHJvYy5hZGQ8UGF0Y2hwb2ludFZh
bHVlPihCMzo6Vm9pZCwgb3JpZ2luKCkpOworICAgIHBhdGNoLT5jbG9iYmVyKFJlZ2lzdGVyU2V0
OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgUmVnaXN0ZXJTZXQgY2xvYmJlckxhdGU7
CisgICAgY2xvYmJlckxhdGUuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2xvYmJl
ckxhdGUuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgY2xvYmJlckxhdGUuYWRkKEdQ
UkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgcGF0Y2gtPmVmZmVjdHMudGVybWluYWwgPSB0cnVl
OworICAgIHBhdGNoLT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKKyAgICBwYXRjaC0+YXBwZW5kU29tZVJlZ2lzdGVyKGZyYW1lUG9pbnRlcigpKTsKKyAg
ICBwYXRjaC0+YXBwZW5kKGdldChkYXRhLmV4Y2VwdGlvbigpKSwgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CisgICAgcGF0Y2gtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlv
bnMobV9jdXJyZW50QmxvY2ssIHBhdGNoKTsKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFt0aGlz
LCBoYW5kbGVdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHBhcmFtcy5n
cFNjcmF0Y2goMCk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhw
YXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCBzY3JhdGNoKTsKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBqaXQuYnJh
bmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxpZ25tZW50KSk7CisgICAgICAg
ICAgICBqaXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6
YmxvY2tNYXNrKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFya2Vk
QmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBhdXRv
IGxvYWRlZENhc2UgPSBqaXQuanVtcCgpOworCisgICAgICAgICAgICBwcmVjaXNlQWxsb2NhdGlv
bkNhc2UubGluaygmaml0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBX
ZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwg
c2NyYXRjaCk7CisKKyAgICAgICAgICAgIGxvYWRlZENhc2UubGluaygmaml0KTsKKyAgICAgICAg
fQorICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcihzY3JhdGNoKTsKKworICAgICAgICBqaXQubW92ZShwYXJhbXNbMF0uZ3ByKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5tb3ZlKHBhcmFtc1sxXS5ncHIoKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1zWzJdLmdwcigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJh
bXMsIHRoaXMpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9w
ZXJhdGlvblB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFtj
YWxsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVJldGhy
b3cpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChw
YXRjaCk7CisKKyAgICByZXR1cm4geyB9OworfQorCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJl
dHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKICAgICBDYWxsSW5mb3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNh
bGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKG1fcGFyc2VyLT5zaWduYXR1cmUo
KSwgQ2FsbFJvbGU6OkNhbGxlZSk7CkBAIC0yMzAwLDEwICsyODIzLDEwIEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVy
blZhbHVlcykgLT4KICAgICAgICAgQjM6OlZhbHVlUmVwIHJlcCA9IHdhc21DYWxsSW5mby5yZXN1
bHRzW2ldOwogICAgICAgICBpZiAocmVwLmlzU3RhY2soKSkgewogICAgICAgICAgICAgQjM6OlZh
bHVlKiBhZGRyZXNzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OkFkZCwgT3JpZ2luKCksIGZyYW1lUG9pbnRlcigpLCBjb25zdGFudChwb2ludGVyVHlw
ZSgpLCByZXAub2Zmc2V0RnJvbUZQKCkpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8QjM6Ok1lbW9yeVZhbHVlPihtX3Byb2MsIEIzOjpTdG9yZSwgT3JpZ2luKCksIHJl
dHVyblZhbHVlc1tvZmZzZXQgKyBpXSwgYWRkcmVzcyk7CisgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4obV9wcm9jLCBCMzo6U3RvcmUsIE9yaWdp
bigpLCBnZXQocmV0dXJuVmFsdWVzW29mZnNldCArIGldKSwgYWRkcmVzcyk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQocmVwLmlzUmVnKCkpOwotICAgICAgICAgICAgcGF0
Y2gtPmFwcGVuZChyZXR1cm5WYWx1ZXNbb2Zmc2V0ICsgaV0sIHJlcCk7CisgICAgICAgICAgICBw
YXRjaC0+YXBwZW5kKGdldChyZXR1cm5WYWx1ZXNbb2Zmc2V0ICsgaV0pLCByZXApOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0yMzEzLDEyICsyODM2LDEyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykg
LT4KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFy
dGlhbFJlc3VsdAogewotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0
YS5waGlzKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMsIGRhdGEpOwog
CiAgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9ja0ZvckJyYW5jaCgpOwog
ICAgIGlmIChjb25kaXRpb24pIHsKICAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9wcm9jLmFkZEJsb2NrKCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGNvbmRpdGlvbik7CisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2lu
KCksIGdldChjb25kaXRpb24pKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3Nv
cnMoRnJlcXVlbnRlZEJsb2NrKHRhcmdldCksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24p
KTsKICAgICAgICAgdGFyZ2V0LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CiAgICAg
ICAgIGNvbnRpbnVhdGlvbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwpAQCAtMjMz
MywxMSArMjg1NiwxMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9sRGF0
YSYgZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdAogCiBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxD
b250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3Qg
U3RhY2smIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFVOVVNFRF9Q
QVJBTShleHByZXNzaW9uU3RhY2spOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0
cy5zaXplKCk7ICsraSkKLSAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0
YWNrLCB0YXJnZXRzW2ldLT5waGlzKTsKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNz
aW9uU3RhY2ssIGRlZmF1bHRUYXJnZXQucGhpcyk7CisgICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJs
b2NrKGV4cHJlc3Npb25TdGFjaywgKnRhcmdldHNbaV0pOworICAgIHVuaWZ5VmFsdWVzV2l0aEJs
b2NrKGV4cHJlc3Npb25TdGFjaywgZGVmYXVsdFRhcmdldCk7CiAKLSAgICBTd2l0Y2hWYWx1ZSog
c3dpdGNoVmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFN3aXRjaFZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBjb25kaXRpb24pOworICAgIFN3aXRjaFZhbHVlKiBzd2l0Y2hWYWx1ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8U3dpdGNoVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IGdldChjb25kaXRpb24pKTsKICAgICBzd2l0Y2hWYWx1ZS0+c2V0RmFsbFRocm91Z2goRnJlcXVl
bnRlZEJsb2NrKGRlZmF1bHRUYXJnZXQudGFyZ2V0QmxvY2tGb3JCcmFuY2goKSkpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsraSkKICAgICAgICAgc3dpdGNo
VmFsdWUtPmFwcGVuZENhc2UoU3dpdGNoQ2FzZShpLCBGcmVxdWVudGVkQmxvY2sodGFyZ2V0c1tp
XS0+dGFyZ2V0QmxvY2tGb3JCcmFuY2goKSkpKTsKQEAgLTIzNTEsNyArMjg3NSw3IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIGV4cHJl
c3Npb25TdGFjaykgLT4gUGFyCiAKICAgICBBU1NFUlQoZXhwcmVzc2lvblN0YWNrLnNpemUoKSA9
PSBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpKTsKICAgICBpZiAoZGF0YS5ibG9ja1R5
cGUoKSAhPSBCbG9ja1R5cGU6Okxvb3ApCi0gICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4
cHJlc3Npb25TdGFjaywgZGF0YS5waGlzKTsKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2so
ZXhwcmVzc2lvblN0YWNrLCBkYXRhKTsKIAogICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdD
b250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOwog
ICAgIGRhdGEuY29udGludWF0aW9uLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CkBA
IC0yMzYzLDMwICsyODg3LDM0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNo
YWJsZShDb250cm9sRW50cnkmIGVudHJ5LCBjb25zdCBTdGFjayYgZXhwcmVzCiB7CiAgICAgQ29u
dHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsKICAgICBtX2N1cnJlbnRCbG9jayA9
IGRhdGEuY29udGludWF0aW9uOworICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsK
IAogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKICAgICAgICAg
ZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4o
KSwgbV9jdXJyZW50QmxvY2spOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNz
b3IoZGF0YS5zcGVjaWFsKTsKLSAgICB9CisgICAgfSBlbHNlIGlmIChkYXRhLmJsb2NrVHlwZSgp
ID09IEJsb2NrVHlwZTo6VHJ5IHx8IGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpDYXRj
aCkKKyAgICAgICAgLS1tX3RyeURlcHRoOwogCiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgIT0g
QmxvY2tUeXBlOjpMb29wKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRh
LnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKICAgICAgICAgICAgIFZhbHVlKiBy
ZXN1bHQgPSBkYXRhLnBoaXNbaV07CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
KHJlc3VsdCk7Ci0gICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb25z
dHJ1Y3RBbmRBcHBlbmQoZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSwgcmVzdWx0KTsK
KyAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFw
cGVuZChkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpLCBwdXNoKHJlc3VsdCkpOwogICAg
ICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9vdXRlckxvb3BzLnJlbW92ZUxhc3QoKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJlKCktPnJldHVy
bkNvdW50KCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGkgPCBleHByZXNzaW9uU3RhY2suc2l6
ZSgpKQorICAgICAgICAgICAgaWYgKGkgPCBleHByZXNzaW9uU3RhY2suc2l6ZSgpKSB7CisgICAg
ICAgICAgICAgICAgKyttX3N0YWNrU2l6ZTsKICAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3Nl
ZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ldKTsKLSAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBUeXBlIHJldHVy
blR5cGUgPSBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpOwotICAgICAgICAgICAgICAg
IGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChyZXR1cm5U
eXBlLCBjb25zdGFudCh0b0IzVHlwZShyZXR1cm5UeXBlKSwgMHhiYmFkYmVlZikpOworICAgICAg
ICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVu
ZChyZXR1cm5UeXBlLCBwdXNoKGNvbnN0YW50KHRvQjNUeXBlKHJldHVyblR5cGUpLCAweGJiYWRi
ZWVmKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCisKICAgICAvLyBUb3BM
ZXZlbCBkb2VzIG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtl
IHN1cmUgd2UgZW1pdCBhIHJldHVybiBoZXJlLgogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpID09
IEJsb2NrVHlwZTo6VG9wTGV2ZWwpCiAgICAgICAgIHJldHVybiBhZGRSZXR1cm4oZW50cnkuY29u
dHJvbERhdGEsIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKQEAgLTI0MDAsMTIgKzI5
MjgsMTIgQEAgQjM6OlZhbHVlKiBCM0lSR2VuZXJhdG9yOjpjcmVhdGVDYWxsUGF0Y2hwb2ludChC
YXNpY0Jsb2NrKiBibG9jaywgT3JpZ2luIG9yaWdpbiwKICAgICBWZWN0b3I8QjM6OkNvbnN0cmFp
bmVkVmFsdWU+IGNvbnN0cmFpbmVkQXJndW1lbnRzOwogICAgIENhbGxJbmZvcm1hdGlvbiB3YXNt
Q2FsbEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3Ioc2ln
bmF0dXJlKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkK
LSAgICAgICAgY29uc3RyYWluZWRBcmd1bWVudHMuYXBwZW5kKEIzOjpDb25zdHJhaW5lZFZhbHVl
KGFyZ3NbaV0sIHdhc21DYWxsSW5mby5wYXJhbXNbaV0pKTsKKyAgICAgICAgY29uc3RyYWluZWRB
cmd1bWVudHMuYXBwZW5kKEIzOjpDb25zdHJhaW5lZFZhbHVlKGdldChibG9jaywgYXJnc1tpXSks
IHdhc21DYWxsSW5mby5wYXJhbXNbaV0pKTsKIAogICAgIG1fcHJvYy5yZXF1ZXN0Q2FsbEFyZ0Fy
ZWFTaXplSW5CeXRlcyhXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRl
cygpLCB3YXNtQ2FsbEluZm8uaGVhZGVyQW5kQXJndW1lbnRTdGFja1NpemVJbkJ5dGVzKSk7CiAK
ICAgICBCMzo6VHlwZSByZXR1cm5UeXBlID0gdG9CM1Jlc3VsdFR5cGUoJnNpZ25hdHVyZSk7Ci0g
ICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6
OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCByZXR1cm5UeXBlLCBvcmlnaW4pOworICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fcHJvYy5hZGQ8UGF0Y2hwb2ludFZhbHVlPihyZXR1
cm5UeXBlLCBvcmlnaW4pOwogICAgIHBhdGNocG9pbnQtPmNsb2JiZXJFYXJseShSZWdpc3RlclNl
dDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwogICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRl
KFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKICAgICBwYXRjaHBv
aW50RnVuY3RvcihwYXRjaHBvaW50KTsKQEAgLTI0MTcsNiArMjk0NSw3IEBAIEIzOjpWYWx1ZSog
QjNJUkdlbmVyYXRvcjo6Y3JlYXRlQ2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmxvY2ssIE9y
aWdpbiBvcmlnaW4sCiAgICAgICAgICAgICByZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoQjM6OlZh
bHVlUmVwKHZhbHVlTG9jYXRpb24pKTsKICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3Ry
YWludHMgPSBXVEZNb3ZlKHJlc3VsdENvbnN0cmFpbnRzKTsKICAgICB9CisgICAgYmxvY2stPmFw
cGVuZChwYXRjaHBvaW50KTsKICAgICByZXR1cm4gcGF0Y2hwb2ludDsKIH0KIApAQCAtMjQzOCwx
MSArMjk2NywxMSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICBjb25zdCBW
ZWN0b3I8QjM6OlR5cGU+JiB0dXBsZSA9IG1fcHJvYy50dXBsZUZvclR5cGUocmV0dXJuVHlwZSk7
CiAgICAgICAgICAgICBBU1NFUlQoc2lnbmF0dXJlLnJldHVybkNvdW50KCkgPT0gdHVwbGUuc2l6
ZSgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUucmV0
dXJuQ291bnQoKTsgKytpKQotICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0dXBsZVtp
XSwgY2FsbFJlc3VsdCwgaSkpOworICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2go
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxFeHRyYWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHR1cGxlW2ldLCBjYWxsUmVzdWx0LCBpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoY2FsbFJl
c3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChwdXNoKGNhbGxSZXN1bHQpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0NzEsOCArMzAwMCwx
MCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgLy8gV2UgcGVzc2lt
aXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlz
IGJvdW5kcyBjaGVja2luZy4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0
IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MjE4MQogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJl
Z2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0g
ICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIFBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKGlzV2Fz
bUJsb2NrLCBwYXRjaHBvaW50KTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoW3RoaXMsIGhhbmRsZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5k
ZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmdl
bmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMs
IGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25J
bmRleCB9KTsKQEAgLTI0OTgsOCArMzAyOSwxMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENh
bGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAg
ICAgICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBj
YWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAgICAgICAgICAgICAgIHBhdGNo
cG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9y
eU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFtyZXR1cm5UeXBlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25z
KGlzRW1iZWRkZXJCbG9jaywgcGF0Y2hwb2ludCk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBoYW5kbGUsIHJldHVyblR5cGVdIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAg
ICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1z
LCB0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3BhcmFtcy5wcm9j
KCkucmVzdWx0Q291bnQocmV0dXJuVHlwZSldLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSkpOwpAQCAtMjUyNyw4ICszMDYwLDEwIEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNs
b2JiZXIgdGhlIHNpemUgcmVnaXN0ZXIgc2luY2UgdGhlIExMSW50IGFsd2F5cyBib3VuZHMgY2hl
Y2tzCiAgICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcg
fHwgbV9pbmZvLm1lbW9yeS5pc1NoYXJlZCgpKQogICAgICAgICAgICAgICAgICAgICBwYXRjaHBv
aW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldCB7IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCku
Ym91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIgfSk7Ci0gICAgICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICAgICAgICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJl
cGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKG1fY3VycmVudEJsb2NrLCBwYXRjaHBvaW50KTsK
KyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3RoaXMsIGhhbmRsZSwg
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2go
aml0KTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0
aGlzKTsKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQu
dGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhd
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKQEAgLTI1NDMsNyAr
MzA3OCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKIAogYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVJbmRleCA9IGFy
Z3MudGFrZUxhc3QoKTsKKyAgICBWYWx1ZSogY2FsbGVlSW5kZXggPSBnZXQoYXJncy50YWtlTGFz
dCgpKTsKICAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUo
KSk7CiAKICAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOwpAQCAtMjU1MiwxMSArMzA4NywxMSBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdAogICAgIC8vIGNhbiBiZSB0byB0aGUgZW1iZWRkZXIgZm9y
IG91ciBzdGFjayBjaGVjayBjYWxjdWxhdGlvbi4KICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50
cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oYXJncy5zaXplKCkpKTsKIAotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25C
dWZmZXI7Ci0gICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVyOwotICAgIEV4cHJlc3Np
b25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGg7CisgICAgVmFsdWUqIGNhbGxhYmxl
RnVuY3Rpb25CdWZmZXI7CisgICAgVmFsdWUqIGluc3RhbmNlc0J1ZmZlcjsKKyAgICBWYWx1ZSog
Y2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aDsKICAgICB7Ci0gICAgICAgIEV4cHJlc3Npb25U
eXBlIHRhYmxlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICAgICAgVmFsdWUqIHRhYmxlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNh
c3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mVGFibGVQdHIobV9udW1JbXBvcnRGdW5jdGlv
bnMsIHRhYmxlSW5kZXgpKSk7CiAgICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIG9yaWdpbigpLAogICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KEZ1
bmNSZWZUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSkpOwpAQCAtMjU3OCwxNyArMzExMywxNyBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4
LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdAogCiAgICAgY2FsbGVlSW5kZXggPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksIGNhbGxlZUlu
ZGV4KTsKIAotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb247CisgICAgVmFsdWUq
IGNhbGxhYmxlRnVuY3Rpb247CiAgICAgewogICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQg
aW4gdGhlIHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZvci4KLSAgICAgICAgRXhw
cmVzc2lvblR5cGUgb2Zmc2V0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBNdWwsIG9yaWdpbigpLAorICAgICAgICBWYWx1ZSogb2Zmc2V0ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBNdWwsIG9yaWdpbigpLAogICAgICAgICAgICAg
Y2FsbGVlSW5kZXgsIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uKSkpOwogICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyLCBvZmZzZXQpOwogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQgaXNu
J3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlh
bGl6ZWQuCiAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2Ug
Y2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRl
eCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCiAg
ICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246
OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3Vt
ZXMgaTY0Iik7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNpZ25hdHVyZUluZGV4ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2
NCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIHNhZmVDYXN0PGludDMyX3Q+KFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSkpOworICAgICAg
ICBWYWx1ZSogY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgY2FsbGFibGVGdW5j
dGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zm
c2V0T2ZTaWduYXR1cmVJbmRleCgpKSk7CiAgICAgICAgIHsKICAgICAgICAgICAgIENoZWNrVmFs
dWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2Ms
IENoZWNrLCBvcmlnaW4oKSwKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwKQEAgLTI2MDIsNyArMzEzNyw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0CiAKICAgICAgICAgLy8gQ2hlY2sgdGhlIHNpZ25hdHVy
ZSBtYXRjaGVzIHRoZSB2YWx1ZSB3ZSBleHBlY3QuCiAgICAgICAgIHsKLSAgICAgICAgICAgIEV4
cHJlc3Npb25UeXBlIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChzaWduYXR1cmUpKTsKKyAgICAgICAgICAgIFZhbHVlKiBleHBlY3RlZFNpZ25hdHVy
ZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlKSk7CiAgICAgICAg
ICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tW
YWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCiAgICAgICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBOb3RFcXVhbCwgb3JpZ2luKCksIGNhbGxl
ZVNpZ25hdHVyZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KSk7CiAKQEAgLTI2MTYsNyAr
MzE1MSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRh
YmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0CiAgICAgICAgIGNhbGxlZUluZGV4LCBj
b25zdGFudChwb2ludGVyVHlwZSgpLCBzaXplb2YoSW5zdGFuY2UqKSkpOwogICAgIFZhbHVlKiBj
YWxsZWVJbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgaW5zdGFuY2VzQnVm
ZmVyLCBvZmZzZXQpKTsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgp
LCBvcmlnaW4oKSwKKyAgICBWYWx1ZSogY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCks
CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sCiAgICAgICAg
ICAgICBzYWZlQ2FzdDxpbnQzMl90PihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZz
ZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSkpKTsKIApAQCAtMjYyNSw3ICszMTYwLDcgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXQKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVm
KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgRXhwcmVzc2lv
blR5cGUgY2FsbGVlID0gYXJncy50YWtlTGFzdCgpOworICAgIFZhbHVlKiBjYWxsZWUgPSBnZXQo
YXJncy50YWtlTGFzdCgpKTsKICAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9
PSBhcmdzLnNpemUoKSk7CiAgICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsKIApAQCAtMjY0MiwyNCAr
MzE3NywyNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxSZWYoY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZQogICAgIFZhbHVlKiBjYWxsZWVJbnN0
YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwganNDYWxsZWVJbnN0YW5jZSwgaW5z
dGFuY2VPZmZzZXQpKTsKIAotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLAorICAgIFZhbHVlKiBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4o
KSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY2FsbGVlLAogICAgICAgICAgICAgc2Fm
ZUNhc3Q8aW50MzJfdD4oV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6Om9mZnNldE9mRW50cnlwb2lu
dExvYWRMb2NhdGlvbigpKSkpOwogCiAgICAgcmV0dXJuIGVtaXRJbmRpcmVjdENhbGwoY2FsbGVl
SW5zdGFuY2UsIGNhbGxlZUNvZGUsIHNpZ25hdHVyZSwgYXJncywgcmVzdWx0cyk7CiB9CiAKLXZv
aWQgQjNJUkdlbmVyYXRvcjo6dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUgcGhpLCBjb25zdCBF
eHByZXNzaW9uVHlwZSBzb3VyY2UpCit2b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5KFZhbHVlKiBw
aGksIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSkKIHsKLSAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgc291cmNlLCBwaGkpOwor
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCBnZXQoc291cmNlKSwgcGhpKTsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeVZh
bHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3Qm
IHJlc3VsdCkKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3Qg
U3RhY2smIHJlc3VsdFN0YWNrLCBjb25zdCBDb250cm9sRGF0YSYgYmxvY2spCiB7Ci0gICAgQVNT
RVJUKHJlc3VsdC5zaXplKCkgPD0gcmVzdWx0U3RhY2suc2l6ZSgpKTsKKyAgICBjb25zdCBWZWN0
b3I8VmFsdWUqPiYgcGhpcyA9IGJsb2NrLnBoaXM7CisgICAgc2l6ZV90IHJlc3VsdFNpemUgPSBw
aGlzLnNpemUoKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKTsg
KytpKQotICAgICAgICB1bmlmeShyZXN1bHRbcmVzdWx0LnNpemUoKSAtIDEgLSBpXSwgcmVzdWx0
U3RhY2suYXQocmVzdWx0U3RhY2suc2l6ZSgpIC0gMSAtIGkpKTsKKyAgICBBU1NFUlQocmVzdWx0
U2l6ZSA8PSByZXN1bHRTdGFjay5zaXplKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCByZXN1bHRTaXplOyArK2kpCisgICAgICAgIHVuaWZ5KHBoaXNbcmVzdWx0U2l6ZSAtIDEgLSBp
XSwgcmVzdWx0U3RhY2suYXQocmVzdWx0U3RhY2suc2l6ZSgpIC0gMSAtIGkpKTsKIH0KIAogc3Rh
dGljIHZvaWQgZHVtcEV4cHJlc3Npb25TdGFjayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBj
b25zdCBCM0lSR2VuZXJhdG9yOjpTdGFjayYgZXhwcmVzc2lvblN0YWNrKQpAQCAtMjcwMyw4ICsz
MjQxLDExIEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3Ry
aW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25DCiAKICAgICBjb21waWxhdGlvbkNvbnRl
eHQuZW1iZWRkZXJFbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAg
ICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2Fs
bEhlbHBlcnM+KCk7CisgICAgY29tcGlsYXRpb25Db250ZXh0LnByb2NlZHVyZSA9IG1ha2VVbmlx
dWU8UHJvY2VkdXJlPigpOworCisgICAgUHJvY2VkdXJlJiBwcm9jZWR1cmUgPSAqY29tcGlsYXRp
b25Db250ZXh0LnByb2NlZHVyZTsKIAotICAgIFByb2NlZHVyZSBwcm9jZWR1cmU7CisgICAgY29t
cGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBl
cnM+KCk7CiAKICAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRlcihbXSAoUHJpbnRTdHJlYW0m
IG91dCwgT3JpZ2luIG9yaWdpbikgewogICAgICAgICBpZiAob3JpZ2luLmRhdGEoKSkKQEAgLTI3
MjUsNiArMzI2Niw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9u
PiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25DCiAgICAgRnVuY3Rpb25QYXJz
ZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvbi5kYXRhLmRhdGEo
KSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlM
X0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKKyAgICBpckdlbmVyYXRvci5pbnNl
cnRFbnRyeVN3aXRjaCgpOwogICAgIGlyR2VuZXJhdG9yLmluc2VydENvbnN0YW50cygpOwogCiAg
ICAgcHJvY2VkdXJlLnJlc2V0UmVhY2hhYmlsaXR5KCk7CkBAIC0yNzM2LDE4ICszMjc4LDQzIEBA
IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJz
ZUFuZENvbXBpbGUoQ29tcGlsYXRpb25DCiAgICAgZGF0YUxvZ0lmKFdhc21CM0lSR2VuZXJhdG9y
SW50ZXJuYWw6OnZlcmJvc2UsICJQb3N0IFNTQTogIiwgcHJvY2VkdXJlKTsKICAgICAKICAgICB7
CisgICAgICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY29tcGlsYXRpb25Nb2RlKSkK
KyAgICAgICAgICAgIHByb2NlZHVyZS5jb2RlKCkuc2V0RGlzYXNzZW1ibGVyKG1ha2VVbmlxdWU8
QjM6OkFpcjo6RGlzYXNzZW1ibGVyPigpKTsKICAgICAgICAgQjM6OnByZXBhcmVGb3JHZW5lcmF0
aW9uKHByb2NlZHVyZSk7CiAgICAgICAgIEIzOjpnZW5lcmF0ZShwcm9jZWR1cmUsICpjb21waWxh
dGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQpOwogICAgICAgICBjb21waWxhdGlvbkNvbnRl
eHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3Rz
KCk7CiAgICAgICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJv
Y2VkdXJlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOwogICAgIH0KIAorICAgIHJl
c3VsdC0+c3RhY2ttYXBzID0gaXJHZW5lcmF0b3IudGFrZVN0YWNrbWFwcygpOworICAgIHJlc3Vs
dC0+ZXhjZXB0aW9uSGFuZGxlcnMgPSBpckdlbmVyYXRvci50YWtlRXhjZXB0aW9uSGFuZGxlcnMo
KTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRs
ZXJMb2NhdGlvbnMoVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+PiYgaGFuZGxlcnMsIGNvbnN0IEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBjb25zdCBD
b21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7Cisg
ICAgaWYgKCFjb250ZXh0LnByb2NlZHVyZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWdu
ZWQgZW50cnlwb2ludEluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBudW1FbnRyeXBvaW50cyA9IGNv
bnRleHQucHJvY2VkdXJlLT5udW1FbnRyeXBvaW50cygpOworICAgIGZvciAoY29uc3QgVW5saW5r
ZWRIYW5kbGVySW5mbyYgaGFuZGxlckluZm8gOiBmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnlwb2ludEluZGV4IDwgbnVtRW50cnlwb2lu
dHMpOworICAgICAgICBpZiAoaGFuZGxlckluZm8ubV90eXBlID09IEhhbmRsZXJUeXBlOjpEZWxl
Z2F0ZSkgeworICAgICAgICAgICAgaGFuZGxlcnMuYXBwZW5kKHsgfSk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgICsrZW50cnlwb2ludEluZGV4OworICAgICAg
ICBoYW5kbGVycy5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KGNvbnRleHQucHJvY2VkdXJlLT5jb2RlKCkuZW50cnlwb2ludExhYmVsKGVudHJ5cG9p
bnRJbmRleCkpKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoZW50cnlwb2ludEluZGV4ID09
IG51bUVudHJ5cG9pbnRzIC0gMSk7Cit9CisKIC8vIEN1c3RvbSB3YXNtIG9wcy4gVGhlc2UgYXJl
IHRoZSBvbmVzIHRvbyBtZXNzeSB0byBkbyBpbiB3YXNtLmpzb24uCiAKLXZvaWQgQjNJUkdlbmVy
YXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUgb3BlcmF0aW9uLCBFeHByZXNz
aW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCkKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6
ZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUgb3BlcmF0aW9uLCBWYWx1ZSogbGVmdCwg
VmFsdWUqIHJpZ2h0KQogewogICAgIEFTU0VSVChvcGVyYXRpb24gPT0gRGl2IHx8IG9wZXJhdGlv
biA9PSBNb2QgfHwgb3BlcmF0aW9uID09IFVEaXYgfHwgb3BlcmF0aW9uID09IFVNb2QpOwogICAg
IGNvbnN0IEIzOjpUeXBlIHR5cGUgPSBsZWZ0LT50eXBlKCk7CkBAIC0yNzc2LDEwNiArMzM0Mywx
MjUgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29k
ZSBvcGVyYXRpb24sIEV4cHJlc3Npb25UeXBlIGwKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4
cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2Uz4oRXhwcmVzc2lv
blR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5cGUgcmlnaHRWYXIsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gRGl2
OworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVlKiByaWdodCA9IGdl
dChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7
Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBv
cCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCkp
OwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlw
ZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVM+KEV4cHJlc3Npb25UeXBlIGxlZnRW
YXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IE1vZDsKKyAgICBWYWx1
ZSogbGVmdCA9IGdldChsZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIp
OwogICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3Vs
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hpbGwob3ApLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9u
VHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KEV4cHJlc3Npb25UeXBlIGxl
ZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVEaXY7CisgICAg
VmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0
VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmln
aW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMlJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtVT4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhw
cmVzc2lvblR5cGUgcmlnaHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVU1vZDsKKyAgICBWYWx1ZSogbGVm
dCA9IGdldChsZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAg
IGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0
LCByaWdodCk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9
OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
RGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjREaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlw
ZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewog
ICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBEaXY7CisgICAgVmFsdWUqIGxlZnQgPSBnZXQobGVm
dFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFyKTsKICAgICBlbWl0Q2hlY2tz
Rm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwor
ICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVt
cGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KEV4cHJl
c3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0UmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5cGUgcmlnaHRWYXIs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBjb25zdCBC
Mzo6T3Bjb2RlIG9wID0gTW9kOworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAg
IFZhbHVlKiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2
KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAg
cmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIGNo
aWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAog
dGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlU+KEV4
cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0RGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5cGUgcmlnaHRW
YXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBjb25z
dCBCMzo6T3Bjb2RlIG9wID0gVURpdjsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChsZWZ0VmFyKTsK
KyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVja3NGb3JNb2RP
ckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVz
dWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+
Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4oRXhwcmVzc2lvblR5
cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1V
PihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNv
ZGUgb3AgPSBVTW9kOworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVl
KiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBs
ZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNo
KG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBs
ZWZ0LCByaWdodCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMkN0ej4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChh
cmdWYXIpOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CiAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5jb3VudFRyYWls
aW5nWmVyb3MzMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgfSk7CiAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBw
YXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihFeHBy
ZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+
KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczY0KHBhcmFtc1sxXS5ncHIoKSwg
cGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZm
ZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVz
aChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcg
PSBnZXQoYXJnVmFyKTsKICNpZiBDUFUoWDg2XzY0KQogICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6
c3VwcG9ydHNDb3VudFBvcHVsYXRpb24oKSkgewogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9w
cm9jLCBJbnQzMiwgb3JpZ2luKCkpOwpAQCAtMjg4NCwxOSArMzQ3MCwyMCBAQCBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeXBlJgogICAgICAgICAgICAgaml0LmNvdW50UG9wdWxhdGlvbjMyKHBhcmFtc1sx
XS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAgfSk7CiAgICAgICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgICAgIHJlc3VsdCA9IHBhdGNocG9p
bnQ7CisgICAgICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogI2VuZGlmCiAKICAgICBWYWx1ZSogZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5j
dGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblBvcGNvdW50MzIpKTsKLSAgICByZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9y
aWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpOworICAgIHJlc3VsdCA9
IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMy
LCBvcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLCBmdW5jQWRkcmVzcywgYXJnKSk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
UG9wY250PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAjaWYgQ1BV
KFg4Nl82NCkKICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9u
KCkpIHsKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsK
QEAgLTI5MDUsMTkgKzM0OTIsMjAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYKICAgICAgICAg
ICAgIGppdC5jb3VudFBvcHVsYXRpb242NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIo
KSk7CiAgICAgICAgIH0pOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6
bm9uZSgpOwotICAgICAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICAgICByZXN1bHQgPSBw
dXNoKHBhdGNocG9pbnQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICNlbmRpZgogCiAg
ICAgVmFsdWUqIGZ1bmNBZGRyZXNzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0
clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25Qb3Bjb3VudDY0KSk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgp
LCBmdW5jQWRkcmVzcywgYXJnKTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCksIEVmZmVjdHM6Om5v
bmUoKSwgZnVuY0FkZHJlc3MsIGFyZykpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRl
PD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnVmFy
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUq
IGFyZyA9IGdldChhcmdWYXIpOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIERvdWJsZSwg
b3JpZ2luKCkpOwogICAgIGlmIChpc1g4NigpKQogICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNj
cmF0Y2hSZWdpc3RlcnMgPSAxOwpAQCAtMjkzMiwxMyArMzUyMCwxNCBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPEY2NENvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZQogI2VuZGlmCiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVm
ZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1
c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUg
YXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAg
VmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEZs
b2F0LCBvcmlnaW4oKSk7CiAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAgIHBhdGNocG9pbnQtPm51
bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CkBAIC0yOTUzLDY1ICszNTQyLDcwIEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uCiAjZW5kaWYKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
ID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0
ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1h
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJn
VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFs
dWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIERvdWJs
ZSwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAg
ICBqaXQucm91bmRUb3dhcmROZWFyZXN0SW50RG91YmxlKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1z
WzBdLmZwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6
bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRj
aHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyTmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdl
dChhcmdWYXIpOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEZsb2F0LCBvcmlnaW4oKSk7
CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5yb3VuZFRv
d2FyZE5lYXJlc3RJbnRGbG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CiAg
ICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICBy
ZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
NjRUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0
Y2hwb2ludFZhbHVlPihtX3Byb2MsIERvdWJsZSwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQt
PmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQucm91bmRUb3dhcmRaZXJvRG91YmxlKHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7Cisg
ICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1w
bGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyVHJ1bmM+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9uVHlw
ZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAg
ICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
RmxvYXQsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6
U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAg
ICAgICAgaml0LnJvdW5kVG93YXJkWmVyb0Zsb2F0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBd
LmZwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9u
ZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBv
aW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBn
ZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1pbigpKSkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRz
PGludDMyX3Q+OjptaW4oKSkgLSAxLjApKTsKICAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCkBA
IC0zMDI4LDEzICszNjIyLDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiAgICAgICAgIGpp
dC50cnVuY2F0ZURvdWJsZVRvSW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkp
OwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0g
ICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwog
ICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdW
YXIpOwogICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQz
Ml90Pigtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1p
bigpKSkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVp
bnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6
bWluKCkpKSk7CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzA1MSwxNCArMzY0Niwx
NSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRv
SW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hw
b2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9
CiAKIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRy
dW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNV
RjY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFsdWUq
IG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2Fz
dDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIC0yLjApKTsK
ICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KC0xLjApKTsKICAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCkBAIC0zMDc1LDEzICszNjcxLDE0
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiAgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRv
VWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNo
cG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9Owog
fQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1
bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VG
MzI+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSog
bWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0
PGZsb2F0PigtMi4wKSkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lz
ZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKICAgICBWYWx1ZSog
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJp
dEFuZCwgb3JpZ2luKCksCkBAIC0zMDk4LDEzICszNjk1LDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5CiAgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9VaW50MzIocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBF
ZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBw
dXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJn
VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFs
dWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChEb3VibGUs
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0YW50KERv
dWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4o
KSwKQEAgLTMxMjEsMTMgKzM3MTksMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAg
ICAgaml0LnRydW5jYXRlRG91YmxlVG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5n
cHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUo
KTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2lu
dCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0
KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0
PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRf
dD46Om1pbigpKSAqIC0yLjApKTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQoRG91YmxlLCBi
aXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC0xLjApKTsKICAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCks
CkBAIC0zMTY0LDEzICszNzYzLDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiAgICAgICAg
IGppdC50cnVuY2F0ZURvdWJsZVRvVWludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdw
cigpLCBzY3JhdGNoLCBjb25zdGFudCk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3Vs
dCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8Pgot
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlw
ZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAg
ICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KEZs
b2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0YW50
KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51
bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSogb3V0T2ZCb3VuZHMg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2lu
KCksCkBAIC0zMTg3LDEzICszNzg3LDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiAgICAg
ICAgIGppdC50cnVuY2F0ZUZsb2F0VG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5n
cHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUo
KTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2lu
dCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0
KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8
dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+
OjptaW4oKSkgKiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKICAgICBWYWx1ZSogbWluID0g
Y29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+
KC0xLjApKSk7CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzIzMCw3ICszODMxLDcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb1Vp
bnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSwgc2NyYXRjaCwgY29uc3RhbnQp
OwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0g
ICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwog
ICAgIHJldHVybiB7IH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5oCmluZGV4IDFkNjYyMTBlMWI1MDQzYTlhNDFmYTYxM2Y1MjI0OTNhZWUz
MDc0N2EuLjI4OTFkMWU0NGYzYWYzN2Q4NjE5MzQ2NmY5ZGM5N2U2YjhkZDYxOWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtNDAsNyAr
NDAsMTMgQEAKIAogZXh0ZXJuICJDIiB2b2lkIGR1bXBQcm9jZWR1cmUodm9pZCopOwogCi1uYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFj
ZSBCMyB7CitjbGFzcyBQcm9jZWR1cmU7Cit9CisKK25hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3Mg
TWVtb3J5SW5mb3JtYXRpb247CiAKQEAgLTQ4LDEwICs1NCwxMyBAQCBzdHJ1Y3QgQ29tcGlsYXRp
b25Db250ZXh0IHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0NhbGxIZWxwZXJzPiBlbWJlZGRlckVu
dHJ5cG9pbnRKSVQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENDYWxsSGVscGVycz4gd2FzbUVudHJ5
cG9pbnRKSVQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+IHdhc21FbnRy
eXBvaW50Qnlwcm9kdWN0czsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OlByb2NlZHVyZT4gcHJv
Y2VkdXJlIHsgbnVsbHB0ciB9OwogfTsKIAogRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQm
LCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBD
b3VudCogPSBudWxscHRyKTsKIAordm9pZCBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9u
cyhWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiBoYW5k
bGVycywgY29uc3QgSW50ZXJuYWxGdW5jdGlvbiosIGNvbnN0IENvbXBpbGF0aW9uQ29udGV4dCYs
IExpbmtCdWZmZXImKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CQlFQbGFuLmNwcAppbmRleCBhZjJmYzcyYmFjYmIzNGM4YjMzNTc4ZDkwN2IzN2M2MDI0MGZi
OWZiLi40NjZhMjYwYmZmMjQ4YmRiNDI1OTNiMDRjNzA3ZTVmYjg5MWVhYWMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC02Niw2ICs2Niw3IEBAIGJv
b2wgQkJRUGxhbjo6cHJlcGFyZUltcGwoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBt
X3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CisgICAgbV9l
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKICAgICBt
X2NvbXBpbGF0aW9uQ29udGV4dHMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fdGll
clVwQ291bnRzLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKIApAQCAtMTA5LDYgKzExMCw5IEBA
IHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4+IGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnM7CisgICAgY29tcHV0ZUV4Y2Vw
dGlvbkhhbmRsZXJMb2NhdGlvbnMoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucywgZnVuY3Rpb24u
Z2V0KCksIGNvbnRleHQsIGxpbmtCdWZmZXIpOworCiAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhT
cGFjZSA9IG1fZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0
aW9uQ291bnQoKTsKICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxl
SW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW21fZnVuY3Rpb25J
bmRleF07CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1h
dGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKQEAgLTExOCw3ICsxMjIsNyBAQCB2b2lkIEJCUVBs
YW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogCiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICB7Ci0gICAgICAgIFJlZjxC
QlFDYWxsZWU+IGNhbGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVu
dHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVT
ZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZSh0aWVyVXApLCBXVEZNb3Zl
KHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKSk7CisgICAgICAgIFJlZjxCQlFDYWxsZWU+IGNhbGxl
ZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5j
dGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVu
Y3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZSh0aWVyVXApLCBXVEZNb3ZlKHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzKSwgV1RGTW92ZShmdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShmdW5jdGlv
bi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMp
KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxs
ZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CiAgICAg
ICAgIEFTU0VSVCghbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdKTsK
ICAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwpAQCAtMTk0LDExICsx
OTgsMTUgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IEJCUVBsYW46OmNvbXBp
bGVGdW5jdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGUKICAgICBib29sIGZvcmNlVXNpbmdCMyA9
IGZhbHNlOwogICAgIGlmIChPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJlc2hvbGQo
KSAmJiBtX21vZHVsZUluZm9ybWF0aW9uLT5jb2RlU2VjdGlvblNpemUgPj0gT3B0aW9uczo6d2Vi
QXNzZW1ibHlCQlFBaXJNb2RlVGhyZXNob2xkKCkpCiAgICAgICAgIGZvcmNlVXNpbmdCMyA9IHRy
dWU7CisgICAgZWxzZSBpZiAoIW1fbW9kdWxlSW5mb3JtYXRpb24tPm1fZnVuY3Rpb25Eb2VzTm90
VXNlRXhjZXB0aW9ucy5xdWlja0dldChmdW5jdGlvbkluZGV4KSkKKyAgICAgICAgZm9yY2VVc2lu
Z0IzID0gdHJ1ZTsKKyAgICBlbHNlIGlmICghT3B0aW9uczo6d2FzbUJCUVVzZXNBaXIoKSkKKyAg
ICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKIAotICAgIGlmICghZm9yY2VVc2luZ0IzICYmIE9w
dGlvbnM6Ondhc21CQlFVc2VzQWlyKCkpCi0gICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9
IHBhcnNlQW5kQ29tcGlsZUFpcihjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5j
dGlvbkluZGV4LCB0aWVyVXApOwotICAgIGVsc2UKKyAgICBpZiAoZm9yY2VVc2luZ0IzKQogICAg
ICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVu
Y3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRp
b25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYLCB0aWVyVXApOworICAg
IGVsc2UKKyAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWly
KGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7
CiAKICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAg
TG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwpAQCAtMjIyLDEzICsyMzAsMTUgQEAgdm9pZCBCQlFQ
bGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKCkKICAgICAgICAgY29uc3QgdWludDMyX3QgZnVu
Y3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmlt
cG9ydEZ1bmN0aW9uQ291bnQoKTsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAgICAgICAg
IHsKKyAgICAgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJu
YWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0uZ2V0KCk7CiAgICAgICAgICAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6Oldhc20sIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkgewogICAgICAgICAg
ICAgICAgIEJhc2U6OmZhaWwobWFrZVN0cmluZygiT3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IGlu
IGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX3dh
c21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+ZW50cnlwb2ludC5jb21waWxhdGlv
biA9IG1ha2VVbmlxdWU8Q29tcGlsYXRpb24+KAorICAgICAgICAgICAgY29tcHV0ZUV4Y2VwdGlv
bkhhbmRsZXJMb2NhdGlvbnMobV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zW2Z1bmN0aW9uSW5k
ZXhdLCBmdW5jdGlvbiwgY29udGV4dCwgbGlua0J1ZmZlcik7CisgICAgICAgICAgICBmdW5jdGlv
bi0+ZW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8Q29tcGlsYXRpb24+KAogICAg
ICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29tcGlsYXRpb25QdHJU
YWcsICJXZWJBc3NlbWJseSBCQlEgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBmdW5jdGlvbklu
ZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRl
eE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0
aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAg
ICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAg
ICAgIH0KQEAgLTI3Miw3ICsyODIsNyBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVz
KGNvbnN0IENhbGxlZUluaXRpYWxpemVyJiBjYWxsYmFjaykKIAogICAgICAgICBJbnRlcm5hbEZ1
bmN0aW9uKiBmdW5jdGlvbiA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2ludGVybmFsRnVuY3Rp
b25JbmRleF0uZ2V0KCk7CiAgICAgICAgIHNpemVfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBpbnRl
cm5hbEZ1bmN0aW9uSW5kZXggKyBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNv
dW50KCk7Ci0gICAgICAgIFJlZjxCQlFDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gQkJR
Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbklu
ZGV4U3BhY2UpLCBXVEZNb3ZlKG1fdGllclVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0p
LCBXVEZNb3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4
XSkpOworICAgICAgICBSZWY8QkJRQ2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEJCUUNh
bGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4
U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRl
eFNwYWNlKSwgV1RGTW92ZShtX3RpZXJVcENvdW50c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwg
V1RGTW92ZShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2ludGVybmFsRnVuY3Rpb25JbmRleF0p
LCBXVEZNb3ZlKGZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5leGNlcHRp
b25IYW5kbGVycyksIFdURk1vdmUobV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zW2ludGVybmFs
RnVuY3Rpb25JbmRleF0pKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVy
KGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20od2FzbUVu
dHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKIAogICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0
aW9uSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSwgV1RGTW92ZSh3YXNt
RW50cnlwb2ludENhbGxlZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJCUVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmgKaW5kZXggZGJlZmM1NGFkNzUwMDVhNzBkMWUxYWY5NjAwMDE3NGY4ZWNiZGIzZi4uZGMwMDIy
NzU2NjIyNTFiOGFiMGYwN2RlYWIwOTg2ZTk3Y2ZlNmEyZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5oCkBAIC04Myw2ICs4Myw3IEBAIHByaXZhdGU6CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBDb21waWxhdGlvbkNvbnRleHQmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mLCBUaWVyVXBDb3VudCopOwogCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJ
bnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CisgICAgVmVjdG9yPFZl
Y3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4+IG1fZXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9uczsKICAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9w
dHI8SW50ZXJuYWxGdW5jdGlvbj4sIERlZmF1bHRIYXNoPHVpbnQzMl90PiwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5h
bEZ1bmN0aW9uczsKICAgICBWZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9u
Q29udGV4dHM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4+IG1fdGll
clVwQ291bnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxlZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAppbmRl
eCAyMWQ5N2IxM2NlZTBjNjVlMTYzMWM3NmQyNTg5MzMzMzUzMmVlOTQwLi5iNDY2YjdmY2ViODBh
M2UyNzI3OTlmMzc1ZmFkMGJkZGFhYmQ5NDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ2FsbGVlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogCisjaW5jbHVkZSAiTExJbnRFeGNlcHRpb25zLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxl
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAKQEAgLTU2
LDYgKzU3LDEyIEBAIHZvaWQgQ2FsbGVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAg
ICAgb3V0LnByaW50KG1ha2VTdHJpbmcobV9pbmRleE9yTmFtZSkpOwogfQogCitjb25zdCBIYW5k
bGVySW5mbyogQ2FsbGVlOjpoYW5kbGVyRm9ySW5kZXgoSW5zdGFuY2UmIGluc3RhbmNlLCB1bnNp
Z25lZCBpbmRleCwgY29uc3QgVGFnKiB0YWcpCit7CisgICAgQVNTRVJUKGhhc0V4Y2VwdGlvbkhh
bmRsZXJzKCkpOworICAgIHJldHVybiBIYW5kbGVySW5mbzo6aGFuZGxlckZvckluZGV4KGluc3Rh
bmNlLCBtX2V4Y2VwdGlvbkhhbmRsZXJzLCBpbmRleCwgdGFnKTsKK30KKwogSklUQ2FsbGVlOjpK
SVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgRW50cnlwb2lu
dCYmIGVudHJ5cG9pbnQpCiAgICAgOiBDYWxsZWUoY29tcGlsYXRpb25Nb2RlKQogICAgICwgbV9l
bnRyeXBvaW50KFdURk1vdmUoZW50cnlwb2ludCkpCkBAIC02OSw2ICs3NiwzMiBAQCBKSVRDYWxs
ZWU6OkpJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCBFbnRy
eXBvaW50JiYgZW50cnlwbwogewogfQogCitMTEludENhbGxlZTo6TExJbnRDYWxsZWUoc3RkOjp1
bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBjb2RlQmxvY2ssIHNpemVfdCBpbmRleCwgc3Rk
OjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUpCisgICAgOiBD
YWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpMTEludE1vZGUsIGluZGV4LCBXVEZNb3ZlKG5h
bWUpKQorICAgICwgbV9jb2RlQmxvY2soV1RGTW92ZShjb2RlQmxvY2spKQoreworICAgIGxpbmtF
eGNlcHRpb25IYW5kbGVycygpOworfQorCit2b2lkIExMSW50Q2FsbGVlOjpsaW5rRXhjZXB0aW9u
SGFuZGxlcnMoKQoreworICAgIGlmIChzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZFeGNlcHRpb25IYW5kbGVycygpKSB7CisgICAgICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMucmVz
aXplVG9GaXQoY291bnQpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBp
KyspIHsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFu
ZGxlciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgSGFu
ZGxlckluZm8mIGhhbmRsZXIgPSBtX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOworICAgICAgICAgICAg
YXV0byYgaW5zdHJ1Y3Rpb24gPSAqbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KHVubGlu
a2VkSGFuZGxlci5tX3RhcmdldCkucHRyKCk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiB0YXJnZXQ7CisgICAgICAgICAgICBpZiAodW5saW5r
ZWRIYW5kbGVyLm1fdHlwZSA9PSBIYW5kbGVyVHlwZTo6Q2F0Y2gpCisgICAgICAgICAgICAgICAg
dGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6
OmhhbmRsZVdhc21DYXRjaChpbnN0cnVjdGlvbi53aWR0aDxXYXNtT3Bjb2RlVHJhaXRzPigpKS5j
b2RlKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRhcmdldCA9IENvZGVM
b2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVXYXNtQ2F0
Y2hBbGwoaW5zdHJ1Y3Rpb24ud2lkdGg8V2FzbU9wY29kZVRyYWl0cz4oKSkuY29kZSgpKTsKKwor
ICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgdGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBMTEludENhbGxlZTo6c2V0RW50cnlwb2ludChN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50KQogewogICAg
IG1fZW50cnlwb2ludCA9IGVudHJ5cG9pbnQ7CkBAIC0xMDQsNiArMTM3LDM2IEBAIHN0ZDo6dHVw
bGU8dm9pZCosIHZvaWQqPiBMTEludENhbGxlZTo6cmFuZ2UoKSBjb25zdAogICAgIHJldHVybiB7
IG51bGxwdHIsIG51bGxwdHIgfTsKIH0KIAordm9pZCBPcHRpbWl6aW5nSklUQ2FsbGVlOjpsaW5r
RXhjZXB0aW9uSGFuZGxlcnMoKQoreworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRFeGNl
cHRpb25IYW5kbGVycy5zaXplKCk7CisgICAgbV9leGNlcHRpb25IYW5kbGVycy5yZXNpemVUb0Zp
dChjb3VudCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAg
ICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKyAgICAg
ICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtl
ZEV4Y2VwdGlvbkhhbmRsZXJzW2ldOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPiBsb2NhdGlvbiA9IG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uc1tp
XTsKKyAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgbG9jYXRpb24p
OworICAgIH0KKyAgICBtX3VubGlua2VkRXhjZXB0aW9uSGFuZGxlcnMuY2xlYXIoKTsKKyAgICBt
X2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMuY2xlYXIoKTsKK30KKworY29uc3QgVmVjdG9yPE9T
UkVudHJ5VmFsdWU+JiBPcHRpbWl6aW5nSklUQ2FsbGVlOjpzdGFja21hcChDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlSW5kZXgpIGNvbnN0Cit7CisgICAgYXV0byBpdGVyID0gbV9zdGFja21hcHMuZmlu
ZChjYWxsU2l0ZUluZGV4KTsKKyAgICBpZiAoaXRlciA9PSBtX3N0YWNrbWFwcy5lbmQoKSkgewor
ICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1fc3RhY2ttYXBzKSB7CisgICAgICAgICAgICBkYXRh
TG9nKHBhaXIua2V5LmJpdHMoKSwgIjogIik7CisgICAgICAgICAgICBmb3IgKGF1dG8gdmFsdWUg
OiBwYWlyLnZhbHVlKQorICAgICAgICAgICAgICAgIGRhdGFMb2codmFsdWUsICIsICIpOworICAg
ICAgICAgICAgZGF0YUxvZ0xuKCIiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVChpdGVyICE9IG1fc3RhY2ttYXBzLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlci0+dmFsdWU7
Cit9CisKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
YWxsZWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAppbmRleCAw
ODFkYjc2ZTQyZjllNDBlNDNiOTJjOTgyYWZjZDhjZTk1MGJiMWUxLi43ZDY5ZDYyNmQ4YzNmMGQ5
MzdlMWQwYjUwMjUwM2M5NGI1YmYxNTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ2FsbGVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNhbGxlZS5oCkBAIC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSAiV2FzbUNvbXBpbGF0aW9uTW9k
ZS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25Db2Rl
QmxvY2suaCIKKyNpbmNsdWRlICJXYXNtSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJXYXNtSW5k
ZXhPck5hbWUuaCIKKyNpbmNsdWRlICJXYXNtTExJbnRUaWVyVXBDb3VudGVyLmgiCiAjaW5jbHVk
ZSAiV2FzbVRpZXJVcENvdW50LmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CiAKQEAgLTU5LDYgKzYxLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgPSAwOwogICAgIHZpcnR1YWwgc3RkOjp0
dXBsZTx2b2lkKiwgdm9pZCo+IHJhbmdlKCkgY29uc3QgPSAwOwogCisgICAgY29uc3QgSGFuZGxl
ckluZm8qIGhhbmRsZXJGb3JJbmRleChJbnN0YW5jZSYsIHVuc2lnbmVkLCBjb25zdCBUYWcqKTsK
KworICAgIGJvb2wgaGFzRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiAhIW1fZXhj
ZXB0aW9uSGFuZGxlcnMuc2l6ZSgpOyB9CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQp
CiAgICAgdmlydHVhbCB2b2lkIHNldE9TUkVudHJ5Q2FsbGVlKFJlZjxPTUdGb3JPU1JFbnRyeUNh
bGxlZT4mJikKICAgICB7CkBAIC02OCw2ICs3NCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwogCisgICAgdmlydHVhbCBGdW5jdGlvbkNvZGVCbG9jayog
ZnVuY3Rpb25Db2RlQmxvY2soKSBjb25zdCB7IHJldHVybiAwOyB9CisKIHByb3RlY3RlZDoKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlLCBzaXplX3QsIHN0
ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJik7CkBAIC03NSw2ICs4
Myw5IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGls
YXRpb25Nb2RlOwogICAgIEluZGV4T3JOYW1lIG1faW5kZXhPck5hbWU7CisKK3Byb3RlY3RlZDoK
KyAgICBWZWN0b3I8SGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CiB9OwogCiBjbGFz
cyBKSVRDYWxsZWUgOiBwdWJsaWMgQ2FsbGVlIHsKQEAgLTk5LDY0ICsxMTAsODYgQEAgcHJpdmF0
ZToKICAgICBXYXNtOjpFbnRyeXBvaW50IG1fZW50cnlwb2ludDsKIH07CiAKLSNpZiBFTkFCTEUo
V0VCQVNTRU1CTFlfQjNKSVQpCi1jbGFzcyBPTUdDYWxsZWUgZmluYWwgOiBwdWJsaWMgSklUQ2Fs
bGVlIHsKK2NsYXNzIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSBmaW5hbCA6IHB1YmxpYyBKSVRD
YWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8T01HQ2FsbGVlPiBjcmVhdGUoV2FzbTo6
RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5h
bWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYmIHVubGlua2VkQ2FsbHMpCisgICAgc3RhdGljIFJlZjxFbWJlZGRlckVudHJ5cG9p
bnRDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0NhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQp
LCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoV1RGTW92ZShl
bnRyeXBvaW50KSkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBPTUdDYWxsZWUoV2FzbTo6RW50
cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUq
LCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYmIHVubGlua2VkQ2FsbHMpCi0gICAgICAgIDogSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0
aW9uTW9kZTo6T01HTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFt
ZSksIFdURk1vdmUodW5saW5rZWRDYWxscykpCisgICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVl
KFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQorICAgICAgICA6IEpJVENhbGxlZShXYXNt
OjpDb21waWxhdGlvbk1vZGU6OkVtYmVkZGVyRW50cnlwb2ludE1vZGUsIFdURk1vdmUoZW50cnlw
b2ludCkpCiAgICAgewogICAgIH0KIH07CiAKLWNsYXNzIE9NR0Zvck9TUkVudHJ5Q2FsbGVlIGZp
bmFsIDogcHVibGljIEpJVENhbGxlZSB7CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQp
CitjbGFzcyBPcHRpbWl6aW5nSklUQ2FsbGVlIDogcHVibGljIEpJVENhbGxlZSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5
cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwg
UmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYmIHVubGlua2VkQ2FsbHMpCisgICAgY29uc3QgVmVjdG9yPE9TUkVudHJ5VmFsdWU+JiBzdGFj
a21hcChDYWxsU2l0ZUluZGV4KSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIE9wdGltaXppbmdK
SVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIG1vZGUsIFdhc206OkVudHJ5cG9pbnQmJiBl
bnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5h
bWVTZWN0aW9uPj4mJiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxp
bmtlZENhbGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4m
JiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRs
ZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYg
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBKSVRDYWxsZWUobW9kZSwgV1RG
TW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodW5saW5rZWRD
YWxscykpCisgICAgICAgICwgbV9zdGFja21hcHMoV1RGTW92ZShzdGFja21hcHMpKQorICAgICAg
ICAsIG1fdW5saW5rZWRFeGNlcHRpb25IYW5kbGVycyhXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJz
KSkKKyAgICAgICAgLCBtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoV1RGTW92ZShleGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3Zl
KG5hbWUpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBsb29wSW5kZXgsIFdURk1vdmUodW5s
aW5rZWRDYWxscykpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZEV4Y2VwdGlv
bkhhbmRsZXJzLnNpemUoKSA9PSBtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMuc2l6ZSgpKTsK
KyAgICAgICAgbGlua0V4Y2VwdGlvbkhhbmRsZXJzKCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQg
b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZTsgfQotICAgIHVpbnQzMl90IGxvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9vcEluZGV4OyB9Ci0KIHByaXZhdGU6Ci0gICAgT01HRm9yT1NSRW50cnlDYWxsZWUoV2Fz
bTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0
IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKLSAgICAgICAgOiBKSVRDYWxsZWUoV2FzbTo6Q29t
cGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGlu
ZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKQotICAgICAgICAsIG1f
b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZShvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQotICAg
ICAgICAsIG1fbG9vcEluZGV4KGxvb3BJbmRleCkKKyAgICB2b2lkIGxpbmtFeGNlcHRpb25IYW5k
bGVycygpOworCisgICAgSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBWZWN0b3I8T1NSRW50cnlWYWx1
ZT4+IG1fc3RhY2ttYXBzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX3VubGlu
a2VkRXhjZXB0aW9uSGFuZGxlcnM7CisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+PiBtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnM7Cit9OworCitj
bGFzcyBPTUdDYWxsZWUgZmluYWwgOiBwdWJsaWMgT3B0aW1pemluZ0pJVENhbGxlZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxPTUdDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYg
ZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxO
YW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5s
aW5rZWRDYWxscywgSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4+
JiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5k
bGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYm
IGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpCiAgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBPTUdDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFt
ZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShl
eGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpKTsK
ICAgICB9CiAKLSAgICB1bnNpZ25lZCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7Ci0gICAg
dWludDMyX3QgbV9sb29wSW5kZXg7Citwcml2YXRlOgorICAgIE9NR0NhbGxlZShXYXNtOjpFbnRy
eXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSos
IFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiYgdW5saW5rZWRDYWxscywgSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBWZWN0b3I8T1NSRW50
cnlWYWx1ZT4+JiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiBleGNl
cHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpCisgICAgICAgIDogT3B0aW1pemlu
Z0pJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIFdURk1vdmUoZW50cnlw
b2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZN
b3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2Vw
dGlvbkhhbmRsZXJMb2NhdGlvbnMpKQorICAgIHsKKyAgICB9CiB9OwotI2VuZGlmCiAKLWNsYXNz
IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSBmaW5hbCA6IHB1YmxpYyBKSVRDYWxsZWUgeworY2xh
c3MgT01HRm9yT1NSRW50cnlDYWxsZWUgZmluYWwgOiBwdWJsaWMgT3B0aW1pemluZ0pJVENhbGxl
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+IGNy
ZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKKyAgICBzdGF0aWMgUmVmPE9NR0Zv
ck9TUkVudHJ5Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNp
emVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYm
IG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJ
bmRleCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscywgSGFz
aE1hcDxDYWxsU2l0ZUluZGV4LCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4+JiYgc3RhY2ttYXBzLCBW
ZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENv
ZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRs
ZXJMb2NhdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeUNhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBp
bmRleCwgV1RGTW92ZShuYW1lKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbG9vcEluZGV4
LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhj
ZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKSk7CiAg
ICAgfQogCisgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsgfQorICAgIHVpbnQzMl90IGxvb3BJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9vcEluZGV4OyB9CisKIHByaXZhdGU6Ci0gICAgRW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQotICAg
ICAgICA6IEpJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkVtYmVkZGVyRW50cnlwb2lu
dE1vZGUsIFdURk1vdmUoZW50cnlwb2ludCkpCisgICAgT01HRm9yT1NSRW50cnlDYWxsZWUoV2Fz
bTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0
IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscywgSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBWZWN0b3I8
T1NSRW50cnlWYWx1ZT4+JiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4m
JiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpCisgICAgICAgIDogT3B0
aW1pemluZ0pJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9k
ZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodW5s
aW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVy
cyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpCisgICAgICAgICwgbV9vc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCisgICAgICAg
ICwgbV9sb29wSW5kZXgobG9vcEluZGV4KQogICAgIHsKICAgICB9CisKKyAgICB1bnNpZ25lZCBt
X29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CisgICAgdWludDMyX3QgbV9sb29wSW5kZXg7CiB9
OwogCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQotY2xhc3MgQkJRQ2FsbGVlIGZpbmFs
IDogcHVibGljIEpJVENhbGxlZSB7CitjbGFzcyBCQlFDYWxsZWUgZmluYWwgOiBwdWJsaWMgT3B0
aW1pemluZ0pJVENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxCQlFDYWxsZWU+IGNy
ZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBh
aXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVf
cHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mJiB1bmxpbmtlZENhbGxzKQorICAgIHN0YXRpYyBSZWY8QkJRQ2FsbGVlPiBjcmVhdGUo
V2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNv
bnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxU
aWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiYgdW5saW5rZWRDYWxscywgSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBWZWN0b3I8T1NSRW50cnlW
YWx1ZT4+JiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRp
b25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBCQlFDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1v
dmUobmFtZSksIFdURk1vdmUodGllclVwQ291bnQpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJCUUNhbGxlZShXVEZNb3ZlKGVudHJ5cG9p
bnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0aWVyVXBDb3VudCksIFdURk1vdmUo
dW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShleGNlcHRpb25IYW5k
bGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpKTsKICAgICB9CiAKICAg
ICBPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUoKSB7IHJldHVybiBtX29zckVu
dHJ5Q2FsbGVlLmdldCgpOyB9CkBAIC0xNzcsOCArMjEwLDggQEAgcHVibGljOgogICAgIFRpZXJV
cENvdW50KiB0aWVyVXBDb3VudCgpIHsgcmV0dXJuIG1fdGllclVwQ291bnQuZ2V0KCk7IH0KIAog
cHJpdmF0ZToKLSAgICBCQlFDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNp
emVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYm
IG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKLSAgICAgICAgOiBKSVRD
YWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQp
LCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkKKyAgICBCQlFD
YWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpw
YWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVl
X3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiYgdW5saW5rZWRDYWxscywgSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBWZWN0b3I8T1NS
RW50cnlWYWx1ZT4+JiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiBl
eGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpCisgICAgICAgIDogT3B0aW1p
emluZ0pJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIFdURk1vdmUoZW50
cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBX
VEZNb3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4
Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKQogICAgICAgICAsIG1fdGllclVwQ291bnQoV1RGTW92
ZSh0aWVyVXBDb3VudCkpCiAgICAgewogICAgIH0KQEAgLTIxOCwxNSArMjUxLDEzIEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBMTEludFRpZXJVcENvdW50ZXImIHRpZXJVcENvdW50ZXIoKSB7IHJl
dHVybiBtX2NvZGVCbG9jay0+dGllclVwQ291bnRlcigpOyB9CisgICAgRnVuY3Rpb25Db2RlQmxv
Y2sqIGZ1bmN0aW9uQ29kZUJsb2NrKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jb2RlQmxvY2su
Z2V0KCk7IH0KICNlbmRpZgogCiBwcml2YXRlOgotICAgIExMSW50Q2FsbGVlKHN0ZDo6dW5pcXVl
X3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4gY29kZUJsb2NrLCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFp
cjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQotICAgICAgICA6IENh
bGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZSwgaW5kZXgsIFdURk1vdmUobmFt
ZSkpCi0gICAgICAgICwgbV9jb2RlQmxvY2soV1RGTW92ZShjb2RlQmxvY2spKQotICAgIHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9jb2RlQmxvY2spOwotICAgIH0KKyAgICBMTEludENhbGxl
ZShzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBzaXplX3QgaW5kZXgsIHN0ZDo6
cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJik7CisKKyAgICB2b2lkIGxp
bmtFeGNlcHRpb25IYW5kbGVycygpOwogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQog
ICAgIFJlZlB0cjxKSVRDYWxsZWU+IG1fcmVwbGFjZW1lbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCmluZGV4IDZjMDI2ZTA4YTQw
OWU5OTVkNDMxOGRmYjE4MDQ2MjZkMGZhZDE3NWYuLjdiZjAwMWVkOTJlZmNiYWZjMGZiYzhhNTBi
NGJmNjI3MjVkMmNjZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsaW5nQ29udmVudGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsaW5nQ29udmVudGlvbi5oCkBAIC0xMjUsNyArMTI1LDcgQEAgcHVibGljOgogICAgICAg
ICBib29sIHJlc3VsdHNJbmNsdWRlSTY0ID0gZmFsc2U7CiAgICAgICAgIHNpemVfdCBncEFyZ3Vt
ZW50Q291bnQgPSAwOwogICAgICAgICBzaXplX3QgZnBBcmd1bWVudENvdW50ID0gMDsKLSAgICAg
ICAgc2l6ZV90IGFyZ1N0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6ZUluQnl0ZXM7CisgICAgICAgIHNp
emVfdCBhcmdTdGFja09mZnNldCA9IGhlYWRlclNpemVJbkJ5dGVzICsgc2l6ZW9mKFJlZ2lzdGVy
KTsKICAgICAgICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcikKICAgICAgICAgICAgIGFy
Z1N0YWNrT2Zmc2V0IC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKIApAQCAtMTM2LDcgKzEz
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICBncEFyZ3VtZW50Q291bnQgPSAwOwog
ICAgICAgICBmcEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAgICBzaXplX3QgcmVzdWx0U3RhY2tP
ZmZzZXQgPSBoZWFkZXJTaXplSW5CeXRlczsKKyAgICAgICAgc2l6ZV90IHJlc3VsdFN0YWNrT2Zm
c2V0ID0gaGVhZGVyU2l6ZUluQnl0ZXMgKyBzaXplb2YoUmVnaXN0ZXIpOwogICAgICAgICBpZiAo
cm9sZSA9PSBDYWxsUm9sZTo6Q2FsbGVyKQogICAgICAgICAgICAgcmVzdWx0U3RhY2tPZmZzZXQg
LT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRm9ybWF0LmgKaW5kZXggYzBjYjMxYjdjYmYwMDZhYTAxOTM2YzFmNDQ2ZDZiMTg5ZjBkZTE1
NS4uNDlkZjk1MTU0N2MwOGE5ODExMDUwN2VlZWMzMTE2OGVmN2M1YThjMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtMjksMTEgKzI5LDEzIEBACiAKICNpbmNs
dWRlICJDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAi
SlNTdHJpbmcuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRl
ICJSZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgogI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlv
bi5oIgogI2luY2x1ZGUgIldhc21OYW1lLmgiCiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uLmgi
CisjaW5jbHVkZSAiV2FzbU9TUkVudHJ5RGF0YS5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKICNp
bmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZS5oIgpAQCAt
NTAsNiArNTIsNyBAQCBuYW1lc3BhY2UgV2FzbSB7CiAKIHN0cnVjdCBDb21waWxhdGlvbkNvbnRl
eHQ7CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CitzdHJ1Y3QgVW5saW5rZWRIYW5kbGVySW5m
bzsKIAogdXNpbmcgQmxvY2tTaWduYXR1cmUgPSBjb25zdCBTaWduYXR1cmUqOwogCkBAIC03Niw2
ICs3OSwxOSBAQCBpbmxpbmUgYm9vbCBpc1ZhbHVlVHlwZShUeXBlIHR5cGUpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCitpbmxpbmUgSlNTdHJpbmcqIHR5cGVUb1N0cmluZyhWTSYgdm0sIFR5cGVL
aW5kIHR5cGUpCit7CisjZGVmaW5lIFRZUEVfQ0FTRShtYWNyb05hbWUsIHZhbHVlLCBiMywgaW5j
LCB3YXNtTmFtZSkgXAorICAgIGNhc2UgVHlwZUtpbmQ6Om1hY3JvTmFtZTogXAorICAgICAgICBy
ZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAjd2FzbU5hbWUpOyBcCisKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgRk9SX0VBQ0hfV0FTTV9UWVBFKFRZUEVfQ0FTRSkKKyAgICB9CisK
KyN1bmRlZiBUWVBFX0NBU0UKK30KKwogaW5saW5lIGJvb2wgaXNTdWJ0eXBlKFR5cGUgc3ViLCBU
eXBlIHBhcmVudCkKIHsKICAgICBpZiAoc3ViLmlzTnVsbGFibGUoKSAmJiAhcGFyZW50LmlzTnVs
bGFibGUoKSkKQEAgLTExNSw2ICsxMzEsNyBAQCBlbnVtIGNsYXNzIEV4dGVybmFsS2luZCA6IHVp
bnQ4X3QgewogICAgIFRhYmxlID0gMSwKICAgICBNZW1vcnkgPSAyLAogICAgIEdsb2JhbCA9IDMs
CisgICAgRXhjZXB0aW9uID0gNCwKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEludD4KQEAgLTEy
NSw2ICsxNDIsNyBAQCBpbmxpbmUgYm9vbCBpc1ZhbGlkRXh0ZXJuYWxLaW5kKEludCB2YWwpCiAg
ICAgY2FzZSBzdGF0aWNfY2FzdDxJbnQ+KEV4dGVybmFsS2luZDo6VGFibGUpOgogICAgIGNhc2Ug
c3RhdGljX2Nhc3Q8SW50PihFeHRlcm5hbEtpbmQ6Ok1lbW9yeSk6CiAgICAgY2FzZSBzdGF0aWNf
Y2FzdDxJbnQ+KEV4dGVybmFsS2luZDo6R2xvYmFsKToKKyAgICBjYXNlIHN0YXRpY19jYXN0PElu
dD4oRXh0ZXJuYWxLaW5kOjpFeGNlcHRpb24pOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTM0LDYgKzE1Miw3IEBAIHN0YXRpY19hc3NlcnQoc3Rh
dGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uKSA9PSAwLCAiV2FzbSBuZWVkcyBG
dW5jdGlvCiBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGludD4oRXh0ZXJuYWxLaW5kOjpUYWJs
ZSkgICAgPT0gMSwgIldhc20gbmVlZHMgVGFibGUgdG8gaGF2ZSB0aGUgdmFsdWUgMSIpOwogc3Rh
dGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6TWVtb3J5KSAgID09IDIs
ICJXYXNtIG5lZWRzIE1lbW9yeSB0byBoYXZlIHRoZSB2YWx1ZSAyIik7CiBzdGF0aWNfYXNzZXJ0
KHN0YXRpY19jYXN0PGludD4oRXh0ZXJuYWxLaW5kOjpHbG9iYWwpICAgPT0gMywgIldhc20gbmVl
ZHMgR2xvYmFsIHRvIGhhdmUgdGhlIHZhbHVlIDMiKTsKK3N0YXRpY19hc3NlcnQoc3RhdGljX2Nh
c3Q8aW50PihFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbikgICA9PSA0LCAiV2FzbSBuZWVkcyBFeGNl
cHRpb24gdG8gaGF2ZSB0aGUgdmFsdWUgNCIpOwogCiBpbmxpbmUgY29uc3QgY2hhciogbWFrZVN0
cmluZyhFeHRlcm5hbEtpbmQga2luZCkKIHsKQEAgLTE0Miw2ICsxNjEsNyBAQCBpbmxpbmUgY29u
c3QgY2hhciogbWFrZVN0cmluZyhFeHRlcm5hbEtpbmQga2luZCkKICAgICBjYXNlIEV4dGVybmFs
S2luZDo6VGFibGU6IHJldHVybiAidGFibGUiOwogICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpNZW1v
cnk6IHJldHVybiAibWVtb3J5IjsKICAgICBjYXNlIEV4dGVybmFsS2luZDo6R2xvYmFsOiByZXR1
cm4gImdsb2JhbCI7CisgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbjogcmV0dXJuICJ0
YWciOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVy
biAiPyI7CkBAIC0zNzIsNiArMzkyLDggQEAgc3RydWN0IEVudHJ5cG9pbnQgewogc3RydWN0IElu
dGVybmFsRnVuY3Rpb24gewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKICAg
ICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiBjYWxsZWVNb3ZlTG9j
YXRpb247CisgICAgU3RhY2tNYXBzIHN0YWNrbWFwczsKKyAgICBWZWN0b3I8VW5saW5rZWRIYW5k
bGVySW5mbz4gZXhjZXB0aW9uSGFuZGxlcnM7CiAgICAgRW50cnlwb2ludCBlbnRyeXBvaW50Owog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9u
Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2Rl
QmxvY2suaAppbmRleCBlYTc1ZmUyZjZiMGY5YTNmMTRlNzkzZWQxMTI3OGVmZDBlMDlhYzcxLi43
MmYzZTY0MTMyYzE3Yjk1MTFhM2ViZWE2YzYwZDAwMjRiMzI3YjUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw4ICsyOCwx
MCBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVu
dGlvbnMuaCIKKyNpbmNsdWRlICJIYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9u
U3RyZWFtLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSAi
V2FzbUhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiV2FzbUxMSW50VGllclVwQ291bnRlci5oIgog
I2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMTIwLDYg
KzEyMiwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgSnVtcFRhYmxlJiBqdW1wVGFibGUodW5zaWdu
ZWQgdGFibGVJbmRleCkgY29uc3Q7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZKdW1wVGFibGVzKCkg
Y29uc3Q7CiAKKyAgICBzaXplX3QgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpOyB9CisgICAgVW5saW5rZWRIYW5kbGVy
SW5mbyYgZXhjZXB0aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZXhjZXB0aW9uSGFu
ZGxlcnNbaW5kZXhdOyB9CisgICAgdm9pZCBhZGRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IFVubGlu
a2VkSGFuZGxlckluZm8mIGhhbmRsZXIpIHsgbV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoaGFu
ZGxlcik7IH0KKwogcHJpdmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhh
c2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsKIApAQCAtMTM5LDYgKzE0NSw3
IEBAIHByaXZhdGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFy
Z2V0czsKICAgICBMTEludFRpZXJVcENvdW50ZXIgbV90aWVyVXBDb3VudGVyOwogICAgIFZlY3Rv
cjxKdW1wVGFibGU+IG1fanVtcFRhYmxlczsKKyAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5m
bz4gbV9leGNlcHRpb25IYW5kbGVyczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJz
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCmlu
ZGV4IDRlNmI4MzIyMDQwNzc2YTI1MTcyMmVlYTIxOGY0NmMyYzM5OTEzMTAuLmZhZDdkNzY4ZWIx
MGY2YjU0OWM3Yzg5MThjMTc2ZGU1ZjEyZmQ2NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCkBAIC0zNyw3ICszNywxNCBAQCBlbnVtIGNs
YXNzIEJsb2NrVHlwZSB7CiAgICAgSWYsCiAgICAgQmxvY2ssCiAgICAgTG9vcCwKLSAgICBUb3BM
ZXZlbAorICAgIFRvcExldmVsLAorICAgIFRyeSwKKyAgICBDYXRjaCwKK307CisKK2VudW0gY2xh
c3MgQ2F0Y2hLaW5kIHsKKyAgICBDYXRjaCwKKyAgICBDYXRjaEFsbCwKIH07CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEVuY2xvc2luZ1N0YWNrLCB0eXBlbmFtZSBOZXdTdGFjaz4KQEAgLTE0Nyw2ICsx
NTQsNyBAQCBwcml2YXRlOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlSW5kZXhGb3JMb2NhbCh1aW50MzJfdCYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIHBhcnNlSW5kZXhGb3JHbG9iYWwodWludDMyX3QmKTsKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUZ1bmN0aW9uSW5kZXgodWludDMyX3QmKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUV4Y2VwdGlvbkluZGV4KHVp
bnQzMl90Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VCcmFu
Y2hUYXJnZXQodWludDMyX3QmKTsKIAogICAgIHN0cnVjdCBUYWJsZUluaXRJbW1lZGlhdGVzIHsK
QEAgLTIxMSw2ICsyMTksMTIgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xvb3BJbmRleCB7
IDAgfTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRyb2xUeXBlPgorc3RhdGljIGJvb2wg
aXNUcnlPckNhdGNoKENvbnRyb2xUeXBlJiBkYXRhKQoreworICAgIHJldHVybiBDb250cm9sVHlw
ZTo6aXNUcnkoZGF0YSkgfHwgQ29udHJvbFR5cGU6OmlzQ2F0Y2goZGF0YSk7Cit9CisKIHRlbXBs
YXRlPHR5cGVuYW1lIENvbnRleHQ+CiBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6RnVuY3Rpb25Q
YXJzZXIoQ29udGV4dCYgY29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6
ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8pCiAgICAgOiBQYXJzZXIoZnVuY3Rpb25TdGFydCwgZnVuY3Rp
b25MZW5ndGgpCkBAIC01NzUsNiArNTg5LDE2IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRnVuY3Rpb25JbmRleCh1aW50MzJfdCYgcmVzdWx0SW5kZXgpIC0+IFBhcnRpCiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KK2F1dG8gRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhjZXB0aW9uSW5kZXgodWludDMyX3QmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4OworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4Y2VwdGlvbkluZGV4KSwgImNh
bid0IHBhcnNlIGV4Y2VwdGlvbiBpbmRleCIpOworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
ZXhjZXB0aW9uSW5kZXggPj0gbV9pbmZvLmV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCksICJleGNl
cHRpb24gaW5kZXggIiwgZXhjZXB0aW9uSW5kZXgsICIgaXMgaW52YWxpZCwgbGltaXQgaXMgIiwg
bV9pbmZvLmV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCkpOworICAgIHJlc3VsdCA9IGV4Y2VwdGlv
bkluZGV4OworICAgIHJldHVybiB7IH07Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+
CiBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUJyYW5jaFRhcmdldCh1aW50MzJf
dCYgcmVzdWx0VGFyZ2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CkBAIC0xMzMzLDYgKzEzNTcsMTMx
IEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAorICAgIGNhc2UgVHJ5OiB7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNl
cHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIEJsb2NrU2lnbmF0dXJlIGlubGlu
ZVNpZ25hdHVyZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VCbG9ja1NpZ25h
dHVyZShtX2luZm8sIGlubGluZVNpZ25hdHVyZSksICJjYW4ndCBnZXQgdHJ5J3Mgc2lnbmF0dXJl
Iik7CisKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFjay5z
aXplKCkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIlRvbyBmZXcgYXJndW1l
bnRzIG9uIHN0YWNrIGZvciB0cnkgYmxvY2suIFRyeWUgZXhwZWN0cyAiLCBpbmxpbmVTaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6
ZSgpLCAiIHdlcmUgcHJlc2VudC4gVHJ5IGJsb2NrIGhhcyBzaWduYXR1cmU6ICIsIGlubGluZVNp
Z25hdHVyZS0+dG9TdHJpbmcoKSk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVz
c2lvblN0YWNrLnNpemUoKSAtIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENv
dW50KCk7ICsraSkKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNz
aW9uU3RhY2tbb2Zmc2V0ICsgaV0udHlwZSgpICE9IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQo
aSksICJUcnkgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlICIsIGlu
bGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSkua2luZCwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUg
IiwgbV9leHByZXNzaW9uU3RhY2tbaV0udHlwZSgpLmtpbmQpOworCisgICAgICAgIGludDY0X3Qg
b2xkU2l6ZSA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsKKyAgICAgICAgU3RhY2sgbmV3U3Rh
Y2s7CisgICAgICAgIENvbnRyb2xUeXBlIGNvbnRyb2w7CisgICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGFkZFRyeShpbmxpbmVTaWduYXR1cmUsIG1fZXhwcmVzc2lvblN0YWNrLCBjb250
cm9sLCBuZXdTdGFjaykpOworICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZFNpemUsIG9sZFNpemUg
LSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgPT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENv
dW50KCkpOworICAgICAgICBBU1NFUlQobmV3U3RhY2suc2l6ZSgpID09IGlubGluZVNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpKTsKKworICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBlbmQoeyBX
VEZNb3ZlKG1fZXhwcmVzc2lvblN0YWNrKSwgeyB9LCBXVEZNb3ZlKGNvbnRyb2wpIH0pOworICAg
ICAgICBtX2V4cHJlc3Npb25TdGFjayA9IFdURk1vdmUobmV3U3RhY2spOworICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKworICAgIGNhc2UgQ2F0Y2g6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2Vw
dGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRiht
X2NvbnRyb2xTdGFjay5zaXplKCkgPT0gMSwgImNhbid0IHVzZSBjYXRjaCBibG9jayBhdCB0aGUg
dG9wLWxldmVsIG9mIGEgZnVuY3Rpb24iKTsKKworICAgICAgICB1aW50MzJfdCBleGNlcHRpb25J
bmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbklu
ZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0
aW9uSW5kZXgpOworICAgICAgICBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworCisgICAgICAgIENv
bnRyb2xFbnRyeSYgY29udHJvbEVudHJ5ID0gbV9jb250cm9sU3RhY2subGFzdCgpOworICAgICAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1RyeU9yQ2F0Y2goY29udHJvbEVudHJ5LmNvbnRy
b2xEYXRhKSwgImNhdGNoIGJsb2NrIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKyAgICAg
ICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeShjb250cm9sRW50cnkuY29udHJvbERh
dGEpKTsKKworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CisgICAgICAgIFN0YWNrIHByZUNh
dGNoU3RhY2s7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAocHJlQ2F0Y2hTdGFjayk7
CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhdGNoKGV4Y2VwdGlvbkluZGV4
LCBleGNlcHRpb25TaWduYXR1cmUsIHByZUNhdGNoU3RhY2ssIGNvbnRyb2xFbnRyeS5jb250cm9s
RGF0YSwgcmVzdWx0cykpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2VwdGlvblNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkgPT0gcmVzdWx0cy5zaXplKCkpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytp
KQorICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGV4Y2Vw
dGlvblNpZ25hdHVyZS5hcmd1bWVudChpKSwgcmVzdWx0c1tpXSk7CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgY2FzZSBDYXRjaEFsbDogeworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0
aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1f
Y29udHJvbFN0YWNrLnNpemUoKSA9PSAxLCAiY2FuJ3QgdXNlIGNhdGNoIGJsb2NrIGF0IHRoZSB0
b3AtbGV2ZWwgb2YgYSBmdW5jdGlvbiIpOworCisgICAgICAgIENvbnRyb2xFbnRyeSYgY29udHJv
bEVudHJ5ID0gbV9jb250cm9sU3RhY2subGFzdCgpOworCisgICAgICAgIFdBU01fVkFMSURBVE9S
X0ZBSUxfSUYoIWlzVHJ5T3JDYXRjaChjb250cm9sRW50cnkuY29udHJvbERhdGEpLCAiY2F0Y2gg
YmxvY2sgaXNuJ3QgYXNzb2NpYXRlZCB0byBhIHRyeSIpOworICAgICAgICBXQVNNX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKHVuaWZ5KGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworCisgICAgICAg
IFJlc3VsdExpc3QgcmVzdWx0czsKKyAgICAgICAgU3RhY2sgcHJlQ2F0Y2hTdGFjazsKKyAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suc3dhcChwcmVDYXRjaFN0YWNrKTsKKyAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2hBbGwocHJlQ2F0Y2hTdGFjaywgY29udHJvbEVudHJ5
LmNvbnRyb2xEYXRhKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgY2FzZSBE
ZWxlZ2F0ZTogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJB
c3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsK
KworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fY29udHJvbFN0YWNrLnNpemUoKSA9PSAx
LCAiY2FuJ3QgdXNlIGRlbGVnYXRlIGF0IHRoZSB0b3AtbGV2ZWwgb2YgYSBmdW5jdGlvbiIpOwor
CisgICAgICAgIHVpbnQzMl90IHRhcmdldDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9G
QUlMUyhwYXJzZUJyYW5jaFRhcmdldCh0YXJnZXQpKTsKKworICAgICAgICBDb250cm9sRW50cnkg
Y29udHJvbEVudHJ5ID0gbV9jb250cm9sU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRighQ29udHJvbFR5cGU6OmlzVHJ5KGNvbnRyb2xFbnRyeS5jb250cm9s
RGF0YSksICJkZWxlZ2F0ZSBpc24ndCBhc3NvY2lhdGVkIHRvIGEgdHJ5Iik7CisKKyAgICAgICAg
Q29udHJvbFR5cGUmIHRhcmdldERhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5z
aXplKCkgLSAxIC0gdGFyZ2V0XS5jb250cm9sRGF0YTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRighQ29udHJvbFR5cGU6OmlzVHJ5KHRhcmdldERhdGEpICYmICFDb250cm9sVHlwZTo6
aXNUb3BMZXZlbCh0YXJnZXREYXRhKSwgImRlbGVnYXRlIHRhcmdldCBpc24ndCBhIHRyeSBvciB0
aGUgdG9wIGxldmVsIGJsb2NrIik7CisKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQo
YWRkRGVsZWdhdGUodGFyZ2V0RGF0YSwgY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSk7CisgICAg
ICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFModW5pZnkoY29udHJvbEVudHJ5LmNvbnRyb2xE
YXRhKSk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGVuZEJsb2NrKGNvbnRyb2xF
bnRyeSwgbV9leHByZXNzaW9uU3RhY2spKTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc3dh
cChjb250cm9sRW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2spOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKworICAgIGNhc2UgVGhyb3c6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlv
bnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAgdWludDMyX3QgZXhjZXB0aW9uSW5kZXg7
CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VFeGNlcHRpb25JbmRleChl
eGNlcHRpb25JbmRleCkpOworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IG1faW5mby5zaWduYXR1cmVJbmRleEZyb21FeGNlcHRpb25JbmRleFNwYWNlKGV4Y2VwdGlvbklu
ZGV4KTsKKyAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBleGNlcHRpb25TaWduYXR1cmUgPSBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKworICAgICAgICBXQVNNX1ZB
TElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGV4Y2VwdGlvblNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCksICJUb28gZmV3IGFyZ3VtZW50cyBvbiBzdGFjayBmb3IgdGhl
IGV4Y2VwdGlvbiBiZWluZyB0aHJvd24uIFRoZSBleGNlcHRpb24gZXhwZWN0cyAiLCBleGNlcHRp
b25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25T
dGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBFeGNlcHRpb24gaGFzIHNpZ25hdHVyZTogIiwg
ZXhjZXB0aW9uU2lnbmF0dXJlLnRvU3RyaW5nKCkpOworICAgICAgICB1bnNpZ25lZCBvZmZzZXQg
PSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpOworICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IGFyZ3M7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3MudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4Y2VwdGlvblNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
dGhyb3cncyAiLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50
cyIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gYXJn
ID0gbV9leHByZXNzaW9uU3RhY2suYXQob2Zmc2V0ICsgaSk7CisgICAgICAgICAgICBXQVNNX1ZB
TElEQVRPUl9GQUlMX0lGKGFyZy50eXBlKCkgIT0gZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50
KGkpLCAiVGhlIGV4Y2VwdGlvbiBiZWluZyB0aHJvd24gZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQg
aW5kZXggIiwgaSwgIiB0byBiZSAiLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSkua2lu
ZCwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgYXJnLnR5cGUoKS5raW5kKTsKKyAgICAgICAg
ICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKGFyZyk7CisgICAgICAgICAgICBtX2NvbnRleHQuZGlk
UG9wVmFsdWVGcm9tU3RhY2soKTsKKyAgICAgICAgfQorICAgICAgICBtX2V4cHJlc3Npb25TdGFj
ay5zaHJpbmsob2Zmc2V0KTsKKworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRU
aHJvdyhleGNlcHRpb25JbmRleCwgYXJncywgbV9leHByZXNzaW9uU3RhY2spKTsKKyAgICAgICAg
bV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgY2FzZSBSZXRocm93OiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6
OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5h
YmxlZCIpOworCisgICAgICAgIHVpbnQzMl90IHRhcmdldDsKKyAgICAgICAgV0FTTV9GQUlMX0lG
X0hFTFBFUl9GQUlMUyhwYXJzZUJyYW5jaFRhcmdldCh0YXJnZXQpKTsKKworICAgICAgICBDb250
cm9sVHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEg
LSB0YXJnZXRdLmNvbnRyb2xEYXRhOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFD
b250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRhKSwgInJldGhyb3cgZG9lc24ndCByZWZlciB0byBh
IGNhdGNoIGJsb2NrIik7CisKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkUmV0
aHJvdyh0YXJnZXQsIGRhdGEpKTsKKyAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorCiAgICAgY2FzZSBCcjoKICAgICBjYXNlIEJySWY6
IHsKICAgICAgICAgdWludDMyX3QgdGFyZ2V0OwpAQCAtMTQ4Nyw2ICsxNjM2LDY2IEBAIGF1dG8g
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4g
UGFydGlhbFJlc3VsdAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAorICAgIGNhc2UgQ2F0
Y2g6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1i
bHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAg
ICAgICAgdWludDMyX3QgZXhjZXB0aW9uSW5kZXg7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQ
RVJfRkFJTFMocGFyc2VFeGNlcHRpb25JbmRleChleGNlcHRpb25JbmRleCkpOworICAgICAgICBT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1faW5mby5zaWduYXR1cmVJbmRleEZyb21F
eGNlcHRpb25JbmRleFNwYWNlKGV4Y2VwdGlvbkluZGV4KTsKKyAgICAgICAgY29uc3QgU2lnbmF0
dXJlJiBleGNlcHRpb25TaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZUluZGV4KTsKKworICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJsb2NrcyA+IDEpCisgICAg
ICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIENvbnRyb2xFbnRyeSYgZGF0YSA9IG1fY29u
dHJvbFN0YWNrLmxhc3QoKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNUcnlP
ckNhdGNoKGRhdGEuY29udHJvbERhdGEpLCAiY2F0Y2ggYmxvY2sgaXNuJ3QgYXNzb2NpYXRlZCB0
byBhIHRyeSIpOworCisgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAwOworICAgICAgICBt
X2V4cHJlc3Npb25TdGFjayA9IHsgfTsKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRzOworICAg
ICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYXRjaFRvVW5yZWFjaGFibGUoZXhjZXB0
aW9uSW5kZXgsIGV4Y2VwdGlvblNpZ25hdHVyZSwgZGF0YS5jb250cm9sRGF0YSwgcmVzdWx0cykp
OworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCkgPT0gcmVzdWx0cy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICAgICAg
bV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGV4Y2VwdGlvblNpZ25hdHVyZS5h
cmd1bWVudChpKSwgcmVzdWx0c1tpXSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgY2FzZSBDYXRjaEFsbDogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25z
Ojp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVu
YWJsZWQiKTsKKworICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJsb2NrcyA+IDEpCisgICAgICAg
ICAgICByZXR1cm4geyB9OworCisgICAgICAgIENvbnRyb2xFbnRyeSYgZGF0YSA9IG1fY29udHJv
bFN0YWNrLmxhc3QoKTsKKyAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDA7CisgICAgICAg
IG1fZXhwcmVzc2lvblN0YWNrID0geyB9OworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KCFpc1RyeU9yQ2F0Y2goZGF0YS5jb250cm9sRGF0YSksICJjYXRjaCBibG9jayBpc24ndCBhc3Nv
Y2lhdGVkIHRvIGEgdHJ5Iik7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENh
dGNoQWxsVG9VbnJlYWNoYWJsZShkYXRhLmNvbnRyb2xEYXRhKSk7CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgY2FzZSBEZWxlZ2F0ZTogeworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0
aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1f
Y29udHJvbFN0YWNrLnNpemUoKSA9PSAxLCAiY2FuJ3QgdXNlIGRlbGVnYXRlIGF0IHRoZSB0b3At
bGV2ZWwgb2YgYSBmdW5jdGlvbiIpOworCisgICAgICAgIHVpbnQzMl90IHRhcmdldDsKKyAgICAg
ICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUJyYW5jaFRhcmdldCh0YXJnZXQpKTsK
KworICAgICAgICBDb250cm9sRW50cnkgY29udHJvbEVudHJ5ID0gbV9jb250cm9sU3RhY2sudGFr
ZUxhc3QoKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighQ29udHJvbFR5cGU6Omlz
VHJ5KGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSksICJkZWxlZ2F0ZSBpc24ndCBhc3NvY2lhdGVk
IHRvIGEgdHJ5Iik7CisKKyAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFj
a1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0XS5jb250cm9sRGF0YTsKKyAgICAg
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighQ29udHJvbFR5cGU6OmlzVHJ5KGRhdGEpICYmICFD
b250cm9sVHlwZTo6aXNUb3BMZXZlbChkYXRhKSwgImRlbGVnYXRlIHRhcmdldCBpc24ndCBhIHRy
eSBibG9jayIpOworCisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZERlbGVnYXRl
VG9VbnJlYWNoYWJsZShkYXRhLCBjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKyAgICAgICAg
U3RhY2sgZW1wdHlTdGFjazsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRW5k
VG9VbnJlYWNoYWJsZShjb250cm9sRW50cnksIGVtcHR5U3RhY2spKTsKKyAgICAgICAgbV9leHBy
ZXNzaW9uU3RhY2suc3dhcChjb250cm9sRW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2spOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIGNhc2UgRW5kOiB7CiAgICAgICAgIGlm
IChtX3VucmVhY2hhYmxlQmxvY2tzID09IDEpIHsKICAgICAgICAgICAgIENvbnRyb2xFbnRyeSBk
YXRhID0gbV9jb250cm9sU3RhY2sudGFrZUxhc3QoKTsKQEAgLTE0OTUsOCArMTcwNCwxMCBAQCBh
dXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IFdU
Rk1vdmUoZGF0YS5lbHNlQmxvY2tTdGFjayk7CiAgICAgICAgICAgICAgICAgV0FTTV9GQUlMX0lG
X0hFTFBFUl9GQUlMUyh1bmlmeShkYXRhLmNvbnRyb2xEYXRhKSk7CiAgICAgICAgICAgICAgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZW5kQmxvY2soZGF0YSwgbV9leHByZXNzaW9uU3RhY2sp
KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIFdBU01fVFJZX0FERF9UT19D
T05URVhUKGFkZEVuZFRvVW5yZWFjaGFibGUoZGF0YSkpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBTdGFjayBlbXB0eVN0YWNrOworICAgICAgICAgICAgICAgIFdBU01f
VFJZX0FERF9UT19DT05URVhUKGFkZEVuZFRvVW5yZWFjaGFibGUoZGF0YSwgZW1wdHlTdGFjaykp
OworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKGRh
dGEuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2spOwogICAgICAgICB9CkBAIC0xNTA0LDYgKzE3MTUs
MTAgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJl
c3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisg
ICAgY2FzZSBUcnk6CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIp
OworICAgICAgICBGQUxMVEhST1VHSDsKKwogICAgIGNhc2UgTG9vcDoKICAgICBjYXNlIElmOgog
ICAgIGNhc2UgQmxvY2s6IHsKQEAgLTE1NzYsNiArMTc5MSwxNiBAQCBhdXRvIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1
bHQKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKKyAgICBjYXNlIFJldGhyb3c6IHsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRp
b25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisgICAgICAgIHVpbnQz
Ml90IHRhcmdldDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUJyYW5j
aFRhcmdldCh0YXJnZXQpKTsKKworICAgICAgICBDb250cm9sVHlwZSYgZGF0YSA9IG1fY29udHJv
bFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdLmNvbnRyb2xEYXRhOwor
ICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNBbnlDYXRjaChk
YXRhKSwgInJldGhyb3cgZG9lc24ndCByZWZlciB0byBhIGNhdGNoIGJsb2NrIik7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCiAgICAgY2FzZSBCcjoKICAgICBjYXNlIEJySWY6IHsKICAg
ICAgICAgdWludDMyX3QgdGFyZ2V0OwpAQCAtMTU4Myw2ICsxODA4LDE1IEBAIGF1dG8gRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlh
bFJlc3VsdAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAorICAgIGNhc2UgVGhyb3c6IHsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNl
cHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAg
dWludDMyX3QgZXhjZXB0aW9uSW5kZXg7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJ
TFMocGFyc2VFeGNlcHRpb25JbmRleChleGNlcHRpb25JbmRleCkpOworCisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQorCiAgICAgY2FzZSBJMzJDb25zdDogewogICAgICAgICBpbnQzMl90IHVu
dXNlZDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJJbnQzMih1bnVzZWQp
LCAiY2FuJ3QgZ2V0IGltbWVkaWF0ZSBmb3IgIiwgbV9jdXJyZW50T3Bjb2RlLCAiIGluIHVucmVh
Y2hhYmxlIGNvbnRleHQiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21IYW5kbGVySW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFu
ZGxlckluZm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1N2JjZjQ5YmIyY2VhMTc1MGZmYjZiZjFlNTVhNzgy
M2RmMTM2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtSGFuZGxlckluZm8uY3BwCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXYXNtSGFuZGxlckluZm8uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1
ZGUgIldhc21JbnN0YW5jZS5oIgorI2luY2x1ZGUgIldhc21UYWcuaCIKKworbmFtZXNwYWNlIEpT
QyB7CituYW1lc3BhY2UgV2FzbSB7CisKK3ZvaWQgSGFuZGxlckluZm86OmluaXRpYWxpemUoY29u
c3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbGFiZWwpCit7CisgICAgbV90eXBlID0gdW5saW5r
ZWRJbmZvLm1fdHlwZTsKKyAgICBtX3N0YXJ0ID0gdW5saW5rZWRJbmZvLm1fc3RhcnQ7CisgICAg
bV9lbmQgPSB1bmxpbmtlZEluZm8ubV9lbmQ7CisgICAgbV90YXJnZXQgPSB1bmxpbmtlZEluZm8u
bV90YXJnZXQ7CisgICAgbV90cnlEZXB0aCA9IHVubGlua2VkSW5mby5tX3RyeURlcHRoOworICAg
IG1fbmF0aXZlQ29kZSA9IGxhYmVsOworCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNl
IEhhbmRsZXJUeXBlOjpDYXRjaDoKKyAgICAgICAgbV90YWcgPSB1bmxpbmtlZEluZm8ubV9leGNl
cHRpb25JbmRleE9yRGVsZWdhdGVUYXJnZXQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBI
YW5kbGVyVHlwZTo6Q2F0Y2hBbGw6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBIYW5kbGVy
VHlwZTo6RGVsZWdhdGU6CisgICAgICAgIG1fZGVsZWdhdGVUYXJnZXQgPSB1bmxpbmtlZEluZm8u
bV9leGNlcHRpb25JbmRleE9yRGVsZWdhdGVUYXJnZXQ7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworY29uc3QgSGFuZGxlckluZm8qIEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgoSW5z
dGFuY2UmIGluc3RhbmNlLCBjb25zdCBWZWN0b3I8SGFuZGxlckluZm8+JiBleGVwdGlvbkhhbmRs
ZXJzLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgV2FzbTo6VGFnKiBleGNlcHRpb25UYWcpCit7Cisg
ICAgYm9vbCBkZWxlZ2F0aW5nID0gZmFsc2U7CisgICAgdW5zaWduZWQgZGVsZWdhdGVUYXJnZXQg
PSAwOworICAgIGZvciAoYXV0byYgaGFuZGxlciA6IGV4ZXB0aW9uSGFuZGxlcnMpIHsKKyAgICAg
ICAgLy8gSGFuZGxlcnMgYXJlIG9yZGVyZWQgaW5uZXJtb3N0IGZpcnN0LCBzbyB0aGUgZmlyc3Qg
aGFuZGxlciB3ZSBlbmNvdW50ZXIKKyAgICAgICAgLy8gdGhhdCBjb250YWlucyB0aGUgc291cmNl
IGFkZHJlc3MgaXMgdGhlIGNvcnJlY3QgaGFuZGxlciB0byB1c2UuCisgICAgICAgIC8vIFRoaXMg
aW5kZXggdXNlZCBpcyBlaXRoZXIgdGhlIEJ5dGVjb2RlT2Zmc2V0IG9yIGEgQ2FsbFNpdGVJbmRl
eC4KKyAgICAgICAgaWYgKGhhbmRsZXIubV9zdGFydCA8PSBpbmRleCAmJiBoYW5kbGVyLm1fZW5k
ID4gaW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChkZWxlZ2F0aW5nKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGhhbmRsZXIubV90cnlEZXB0aCAhPSBkZWxlZ2F0ZVRhcmdldCkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGVsZWdhdGluZyA9IGZhbHNlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG1hdGNoID0gZmFsc2U7CisgICAgICAg
ICAgICBzd2l0Y2ggKGhhbmRsZXIubV90eXBlKSB7CisgICAgICAgICAgICBjYXNlIEhhbmRsZXJU
eXBlOjpDYXRjaDoKKyAgICAgICAgICAgICAgICBtYXRjaCA9IGV4Y2VwdGlvblRhZyAmJiBpbnN0
YW5jZS50YWcoaGFuZGxlci5tX3RhZykgPT0gKmV4Y2VwdGlvblRhZzsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSGFuZGxlclR5cGU6OkNhdGNoQWxsOgorICAgICAg
ICAgICAgICAgIG1hdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgSGFuZGxlclR5cGU6OkRlbGVnYXRlOgorICAgICAgICAgICAgICAgIGRlbGVnYXRp
bmcgPSB0cnVlOworICAgICAgICAgICAgICAgIGRlbGVnYXRlVGFyZ2V0ID0gaGFuZGxlci5tX2Rl
bGVnYXRlVGFyZ2V0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICByZXR1cm4gJmhhbmRsZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21IYW5kbGVySW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRs
ZXJJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzI1MTE5M2QyMTMxNzllYmRlOTk1NDRjMjUzZWQ0OTg5ZDJm
NjQzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21I
YW5kbGVySW5mby5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorCituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgSW5zdGFuY2U7
CitjbGFzcyBUYWc7CisKK2VudW0gY2xhc3MgSGFuZGxlclR5cGUgeworICAgIENhdGNoID0gMCwK
KyAgICBDYXRjaEFsbCA9IDEsCisgICAgRGVsZWdhdGUgPSAyLAorfTsKKworc3RydWN0IEhhbmRs
ZXJJbmZvQmFzZSB7CisgICAgSGFuZGxlclR5cGUgbV90eXBlOworICAgIHVpbnQzMl90IG1fc3Rh
cnQ7CisgICAgdWludDMyX3QgbV9lbmQ7CisgICAgdWludDMyX3QgbV90YXJnZXQ7CisgICAgdWlu
dDMyX3QgbV90cnlEZXB0aDsKKyAgICB1aW50MzJfdCBtX2V4Y2VwdGlvbkluZGV4T3JEZWxlZ2F0
ZVRhcmdldDsKK307CisKK3N0cnVjdCBVbmxpbmtlZEhhbmRsZXJJbmZvIDogcHVibGljIEhhbmRs
ZXJJbmZvQmFzZSB7CisgICAgVW5saW5rZWRIYW5kbGVySW5mbygpCisgICAgeworICAgIH0KKwor
ICAgIFVubGlua2VkSGFuZGxlckluZm8oSGFuZGxlclR5cGUgaGFuZGxlclR5cGUsIHVpbnQzMl90
IHN0YXJ0LCB1aW50MzJfdCBlbmQsIHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgdHJ5RGVwdGgs
IHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4T3JEZWxlZ2F0ZVRhcmdldCkKKyAgICB7CisgICAgICAg
IG1fdHlwZSA9IGhhbmRsZXJUeXBlOworICAgICAgICBtX3N0YXJ0ID0gc3RhcnQ7CisgICAgICAg
IG1fZW5kID0gZW5kOworICAgICAgICBtX3RhcmdldCA9IHRhcmdldDsKKyAgICAgICAgbV90cnlE
ZXB0aCA9IHRyeURlcHRoOworICAgICAgICBtX2V4Y2VwdGlvbkluZGV4T3JEZWxlZ2F0ZVRhcmdl
dCA9IGV4Y2VwdGlvbkluZGV4T3JEZWxlZ2F0ZVRhcmdldDsKKyAgICB9Cit9OworCitzdHJ1Y3Qg
SGFuZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9CYXNlIHsKKyAgICBzdGF0aWMgY29uc3Qg
SGFuZGxlckluZm8qIGhhbmRsZXJGb3JJbmRleChJbnN0YW5jZSYsIGNvbnN0IFZlY3RvcjxIYW5k
bGVySW5mbz4mIGV4ZXB0aW9uSGFuZGxlcnMsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBXYXNtOjpU
YWcqIGV4Y2VwdGlvblRhZyk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgVW5saW5rZWRI
YW5kbGVySW5mbyYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFn
Pik7CisKKyAgICB1bnNpZ25lZCB0YWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
dHlwZSA9PSBIYW5kbGVyVHlwZTo6Q2F0Y2gpOworICAgICAgICByZXR1cm4gbV90YWc7CisgICAg
fQorCisgICAgdW5zaWduZWQgZGVsZWdhdGVUYXJnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fdHlwZSA9PSBIYW5kbGVyVHlwZTo6RGVsZWdhdGUpOworICAgICAgICByZXR1cm4g
bV9kZWxlZ2F0ZVRhcmdldDsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhj
ZXB0aW9uSGFuZGxlclB0clRhZz4gbV9uYXRpdmVDb2RlOworCitwcml2YXRlOgorICAgIHVuaW9u
IHsKKyAgICAgICAgdW5zaWduZWQgbV90YWc7CisgICAgICAgIHVuc2lnbmVkIG1fZGVsZWdhdGVU
YXJnZXQ7CisgICAgfTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUluc3RhbmNlLmNwcAppbmRleCBmZmQ3NWM4ZDBjOGY5YWI3MzFmN2NiNDlhODQyZDkwNjViODI4
M2I2Li4wMjU0YTBjMTAyOTdhYjhkZTE4NTRlYTgwYzlkYWFlNGMxZWE0ODBmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5o
IgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbVRhZy5o
IgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdhc20gewpAQCAtOTAsNyArOTEsOSBAQCBSZWY8SW5zdGFuY2U+IEluc3RhbmNl
OjpjcmVhdGUoQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIEVudHJ5RnJh
bQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IChOb3ROdWxsLCBmYXN0TWFsbG9jKGFsbG9jYXRp
b25TaXplKG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCks
IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50KCkpKSkgSW5zdGFuY2UoY29u
dGV4dCwgV1RGTW92ZShtb2R1bGUpLCBwb2ludGVyVG9Ub3BFbnRyeUZyYW1lLCBwb2ludGVyVG9B
Y3R1YWxTdGFja0xpbWl0LCBXVEZNb3ZlKHN0b3JlVG9wQ2FsbEZyYW1lKSkpOwogfQogCi1JbnN0
YW5jZTo6fkluc3RhbmNlKCkgeyB9CitJbnN0YW5jZTo6fkluc3RhbmNlKCkKK3sKK30KIAogc2l6
ZV90IEluc3RhbmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCgpIGNvbnN0CiB7CkBAIC0yOTcsNiAr
MzAwLDE2IEBAIHZvaWQgSW5zdGFuY2U6OmxpbmtHbG9iYWwodW5zaWduZWQgaSwgUmVmPEdsb2Jh
bD4mJiBnbG9iYWwpCiAgICAgbV9saW5rZWRHbG9iYWxzLnNldChpLCBXVEZNb3ZlKGdsb2JhbCkp
OwogfQogCit2b2lkIEluc3RhbmNlOjphZGRUYWcoY29uc3QgVGFnJiB0YWcpCit7CisgICAgbV90
YWdzLmFwcGVuZChSZWYgeyB0YWcgfSk7Cit9CisKK3ZvaWQgSW5zdGFuY2U6OmFkZFRhZyhUYWcm
JiB0YWcpCit7CisgICAgbV90YWdzLmFwcGVuZChhZG9wdFJlZih0YWcpKTsKK30KKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKaW5kZXggNjBlMTRjYjVhYzA2
NTgyNDQzNDM3ODA5ZDU0NjMzZWRmNzFjYzhiOS4uZGI5NzRkMTMwZDI3Mjg1N2FjYzM0ZGRlNThk
ZTE0ZjQzNTIxNDRhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNl
LmgKQEAgLTIxMCw2ICsyMTAsMTAgQEAgcHVibGljOgogICAgICAgICBtX3N0b3JlVG9wQ2FsbEZy
YW1lKGNhbGxGcmFtZSk7CiAgICAgfQogCisgICAgdm9pZCBhZGRUYWcoY29uc3QgVGFnJik7Cisg
ICAgdm9pZCBhZGRUYWcoVGFnJiYpOworICAgIGNvbnN0IFRhZyYgdGFnKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuICptX3RhZ3NbaV07IH0KKwogcHJpdmF0ZToKICAgICBJbnN0YW5jZShDb250
ZXh0KiwgUmVmPE1vZHVsZT4mJiwgRW50cnlGcmFtZSoqLCB2b2lkKiosIFN0b3JlVG9wQ2FsbEZy
YW1lQ2FsbGJhY2smJik7CiAgICAgCkBAIC0yMzcsNiArMjQxLDcgQEAgcHJpdmF0ZToKICAgICBI
YXNoTWFwPHVpbnQzMl90LCBSZWY8R2xvYmFsPiwgSW50SGFzaDx1aW50MzJfdD4sIFdURjo6VW5z
aWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2xpbmtlZEdsb2JhbHM7CiAg
ICAgQml0VmVjdG9yIG1fcGFzc2l2ZUVsZW1lbnRzOwogICAgIEJpdFZlY3RvciBtX3Bhc3NpdmVE
YXRhU2VnbWVudHM7CisgICAgVmVjdG9yPFJlZlB0cjxjb25zdCBUYWc+PiBtX3RhZ3M7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKaW5kZXggODFhNWNkYmNhZTMyODZiZTMyY2E0
OTBkZTQ1ZWUzYWZmNzgxOTg1Ni4uMzU3NjY2YmRjM2Q2NWRlNDU3MGZkNTVlODk5YzY2ZWVkMTI4
M2MxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5l
cmF0b3IuY3BwCkBAIC02Miw4ICs2MiwyNiBAQCBwdWJsaWM6CiAgICAgICAgIFJlZjxMYWJlbD4g
bV9hbHRlcm5hdGU7CiAgICAgfTsKIAotICAgIHN0cnVjdCBDb250cm9sVHlwZSA6IHB1YmxpYyBW
YXJpYW50PENvbnRyb2xMb29wLCBDb250cm9sVG9wTGV2ZWwsIENvbnRyb2xCbG9jaywgQ29udHJv
bElmPiB7Ci0gICAgICAgIHVzaW5nIEJhc2UgPSBWYXJpYW50PENvbnRyb2xMb29wLCBDb250cm9s
VG9wTGV2ZWwsIENvbnRyb2xCbG9jaywgQ29udHJvbElmPjsKKyAgICBzdHJ1Y3QgQ29udHJvbFRy
eSB7CisgICAgICAgIFJlZjxMYWJlbD4gbV90cnk7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5RGVw
dGg7CisgICAgfTsKKworICAgIHN0cnVjdCBDb250cm9sQ2F0Y2ggeworICAgICAgICBDYXRjaEtp
bmQgbV9raW5kOworICAgICAgICBSZWY8TGFiZWw+IG1fdHJ5U3RhcnQ7CisgICAgICAgIFJlZjxM
YWJlbD4gbV90cnlFbmQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5RGVwdGg7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBtX2V4Y2VwdGlvbjsKKyAgICB9OworCisgICAgc3RydWN0IENhdGNoUmV3
cml0ZUluZm8geworICAgICAgICB1bnNpZ25lZCBtX2luc3RydWN0aW9uT2Zmc2V0OworICAgICAg
ICB1bnNpZ25lZCBtX3RyeURlcHRoOworICAgIH07CisKKyAgICBzdHJ1Y3QgQ29udHJvbFR5cGUg
OiBwdWJsaWMgVmFyaWFudDxDb250cm9sTG9vcCwgQ29udHJvbFRvcExldmVsLCBDb250cm9sQmxv
Y2ssIENvbnRyb2xJZiwgQ29udHJvbFRyeSwgQ29udHJvbENhdGNoPiB7CisgICAgICAgIHVzaW5n
IEJhc2UgPSBWYXJpYW50PENvbnRyb2xMb29wLCBDb250cm9sVG9wTGV2ZWwsIENvbnRyb2xCbG9j
aywgQ29udHJvbElmLCBDb250cm9sVHJ5LCBDb250cm9sQ2F0Y2g+OwogCiAgICAgICAgIENvbnRy
b2xUeXBlKCkKICAgICAgICAgICAgIDogQmFzZShDb250cm9sQmxvY2sgeyB9KQpAQCAtOTAsOCAr
MTA4LDI5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1
cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRp
bnVhdGlvbiksIENvbnRyb2xJZiB7IFdURk1vdmUoYWx0ZXJuYXRlKSB9KTsKICAgICAgICAgfQog
Ci0gICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsg
cmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbElmPihjb250cm9sKTsgfQorICAg
ICAgICBzdGF0aWMgQ29udHJvbFR5cGUgY3JlYXRlVHJ5KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVy
ZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWY8TGFiZWw+JiYgdHJ5TGFiZWwsIFJlZlB0cjxMYWJl
bD4mJiBjb250aW51YXRpb24sIHVuc2lnbmVkIHRyeURlcHRoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUt
PmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sVHJ5IHsgV1RG
TW92ZSh0cnlMYWJlbCksIHRyeURlcHRoIH0pOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGlj
IENvbnRyb2xUeXBlIGNyZWF0ZUNhdGNoKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgdW5zaWdu
ZWQgc3RhY2tTaXplLCBSZWY8TGFiZWw+JiYgdHJ5U3RhcnQsIFJlZlB0cjxMYWJlbD4mJiBjb250
aW51YXRpb24sIFJlZjxMYWJlbD4gdHJ5RW5kLCB1bnNpZ25lZCB0cnlEZXB0aCwgVmlydHVhbFJl
Z2lzdGVyIGV4Y2VwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xU
eXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdU
Rk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbENhdGNoIHsgQ2F0Y2hLaW5kOjpDYXRjaCwgV1RG
TW92ZSh0cnlTdGFydCksIFdURk1vdmUodHJ5RW5kKSwgdHJ5RGVwdGgsIGV4Y2VwdGlvbiB9KTsK
KyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBib29sIGlzTG9vcChjb25zdCBDb250cm9sVHlw
ZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sTG9vcD4o
Y29udHJvbCk7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNUb3BMZXZlbChjb25zdCBDb250cm9s
VHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sVG9w
TGV2ZWw+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQmxvY2soY29uc3QgQ29u
dHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJv
bEJsb2NrPihjb250cm9sKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0lmKGNvbnN0IENvbnRy
b2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xJ
Zj4oY29udHJvbCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNUcnkoY29uc3QgQ29udHJvbFR5
cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbFRyeT4o
Y29udHJvbCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250cm9s
VHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQ2F0
Y2g+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29udHJv
bFR5cGUmIGNvbnRyb2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxDb250cm9sQ2F0Y2g+KGNvbnRyb2wpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIENvbnRyb2xDYXRjaCBjYXRjaERhdGEgPSBXVEY6OmdldDxD
b250cm9sQ2F0Y2g+KGNvbnRyb2wpOworICAgICAgICAgICAgcmV0dXJuIGNhdGNoRGF0YS5tX2tp
bmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaDsKKyAgICAgICAgfQogCiAgICAgICAgIHVuc2lnbmVkIHN0
YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tTaXplOyB9CiAgICAgICAgIEJsb2NrU2ln
bmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlOyB9CkBAIC0xNTIs
MTcgKzE5MSwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkUmVzdWx0KG1h
a2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBmYWlsZWQgY29tcGlsaW5nOiAiX3MsIG1ha2VT
dHJpbmcoYXJncykuLi4pKTsKICAgICB9CiAKLSAgICBMTEludEdlbmVyYXRvcihjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYp
OworICAgIExMSW50R2VuZXJhdG9yKE1vZHVsZUluZm9ybWF0aW9uJiwgdW5zaWduZWQgZnVuY3Rp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJik7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rp
b25Db2RlQmxvY2s+IGZpbmFsaXplKCk7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGU+
CisgICAgdm9pZCByZXBhdGNoKGNvbnN0IENhdGNoUmV3cml0ZUluZm8mKTsKKwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4cHJlc3Npb25MaXN0QSwgdHlwZW5hbWUgRXhwcmVzc2lvbkxpc3RCPgog
ICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3RBJiBkZXN0
aW5hdGlvbnMsIGNvbnN0IEV4cHJlc3Npb25MaXN0QiYgdmFsdWVzKQogICAgIHsKICAgICAgICAg
QVNTRVJUKGRlc3RpbmF0aW9ucy5zaXplKCkgPD0gdmFsdWVzLnNpemUoKSk7CiAgICAgICAgIGF1
dG8gb2Zmc2V0ID0gdmFsdWVzLnNpemUoKSAtIGRlc3RpbmF0aW9ucy5zaXplKCk7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVzdGluYXRpb25zLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBkZXN0aW5hdGlvbnNbaV0sIHZhbHVlc1tvZmZzZXQg
KyBpXSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVzdGluYXRpb25zLnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICBhdXRvJiBzcmMgPSB2YWx1ZXNbb2Zmc2V0ICsgaV07Cisg
ICAgICAgICAgICBhdXRvJiBkc3QgPSBkZXN0aW5hdGlvbnNbaV07CisgICAgICAgICAgICBpZiAo
KFZpcnR1YWxSZWdpc3RlcilzcmMgIT0gKFZpcnR1YWxSZWdpc3Rlcilkc3QpCisgICAgICAgICAg
ICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBkc3QsIHNyYyk7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICBlbnVtIE5vQ29uc2lzdGVuY3lDaGVja1RhZyB7IE5vQ29uc2lzdGVuY3lDaGVjayB9OwpA
QCAtMjQzLDExICsyODksMjEgQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbFR5cGUmLCBTdGFjayYpOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJik7
CiAKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUcnkoQmxvY2tTaWdu
YXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2sm
IG5ld1N0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRj
aCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250
cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbFRvVW5yZWFj
aGFibGUoQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xU
eXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgYXJncywgU3RhY2smKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9sVHlwZSYpOworCiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xUeXBlJiwgU3RhY2smIHJl
dHVyblZhbHVlcyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJh
bmNoKENvbnRyb2xUeXBlJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBTdGFjayYgcmV0dXJu
VmFsdWVzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2go
RXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbFR5cGUqPiYgdGFy
Z2V0cywgQ29udHJvbFR5cGUmIGRlZmF1bHRUYXJnZXRzLCBTdGFjayYgZXhwcmVzc2lvblN0YWNr
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9s
RW50cnkmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYsIGNvbnN0IFN0
YWNrJiBleHByZXNzaW9uU3RhY2sgPSB7IH0sIGJvb2wgdW5yZWFjaGFibGUgPSB0cnVlKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENv
bnRyb2xFbnRyeSYsIFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIGJvb2wgdW5yZWFjaGFibGUgPSB0
cnVlKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRUb3BMZXZlbChC
bG9ja1NpZ25hdHVyZSwgY29uc3QgU3RhY2smKTsKIAogICAgIC8vIENhbGxzCkBAIC0zMzcsNyAr
MzkzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFdhc21Ecm9wS2VlcDo6ZW1pdCh0aGlzLCBz
dGFydE9mZnNldCwgZHJvcCwga2VlcCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdGFjaywgdHlwZW5hbWUgRnVuY3Rvcj4K
ICAgICB2b2lkIHdhbGtFeHByZXNzaW9uU3RhY2soU3RhY2smIGV4cHJlc3Npb25TdGFjaywgdW5z
aWduZWQgc3RhY2tTaXplLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgaSA+IDA7IC0taSkgewpA
QCAtMzQ2LDcgKzQwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0YWNrLCB0eXBl
bmFtZSBGdW5jdG9yPgogICAgIHZvaWQgd2Fsa0V4cHJlc3Npb25TdGFjayhTdGFjayYgZXhwcmVz
c2lvblN0YWNrLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAgICAgICAgd2Fsa0V4
cHJlc3Npb25TdGFjayhleHByZXNzaW9uU3RhY2ssIG1fc3RhY2tTaXplLCBmdW5jdG9yKTsKQEAg
LTM1NSw3ICs0MTEsOCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CiAgICAgdm9pZCB3YWxrRXhwcmVzc2lvblN0YWNrKENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGVu
dHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLCBlbnRyeS5jb250cm9sRGF0YS5zdGFja1NpemUo
KSwgZnVuY3Rvcik7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSA9IGVudHJ5LmNvbnRyb2xE
YXRhLnN0YWNrU2l6ZSgpOworICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGVudHJ5LmVuY2xv
c2VkRXhwcmVzc2lvblN0YWNrLCBzdGFja1NpemUsIGZ1bmN0b3IpOwogICAgIH0KIAogICAgIHZv
aWQgY2hlY2tDb25zaXN0ZW5jeSgpCkBAIC0zODEsNyArNDM4LDcgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgbWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMoU3RhY2smIGV4cHJlc3Npb25TdGFj
aywgTm9Db25zaXN0ZW5jeUNoZWNrVGFnKQogICAgIHsKLSAgICAgICAgd2Fsa0V4cHJlc3Npb25T
dGFjayhleHByZXNzaW9uU3RhY2ssIFsmXShUeXBlZEV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFZp
cnR1YWxSZWdpc3RlciBzbG90KSB7CisgICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZXhwcmVz
c2lvblN0YWNrLCBbJl0oYXV0byYgZXhwcmVzc2lvbiwgVmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsK
ICAgICAgICAgICAgIEFTU0VSVChleHByZXNzaW9uLnZhbHVlKCkgPT0gc2xvdCB8fCBleHByZXNz
aW9uLnZhbHVlKCkuaXNDb25zdGFudCgpIHx8IGV4cHJlc3Npb24udmFsdWUoKS5pc0FyZ3VtZW50
KCkgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4cHJlc3Npb24udmFsdWUoKS50b0xvY2FsKCkp
IDwgbV9jb2RlQmxvY2stPm1fbnVtVmFycyk7CiAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi52
YWx1ZSgpID09IHNsb3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDE3LDYgKzQ3NCw4
IEBAIHByaXZhdGU6CiAgICAgICAgIG1fc3RhY2tTaXplICs9IG5ld1N0YWNrLnNpemUoKTsKICAg
ICB9CiAKKyAgICB2b2lkIGZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKENvbnRyb2xUeXBl
JiwgU3RhY2smKTsKKwogICAgIHN0cnVjdCBTd2l0Y2hFbnRyeSB7CiAgICAgICAgIEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0OwogICAgICAgICBpbnQqIGp1bXBUYXJnZXQ7CkBAIC00
MjksNyArNDg4LDcgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgRnVuY3Rpb25QYXJzZXI8TExJ
bnRHZW5lcmF0b3I+KiBtX3BhcnNlciB7IG51bGxwdHIgfTsKLSAgICBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgbV9pbmZvOworICAgIE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CiAgICAgY29u
c3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4IHsgVUlOVF9NQVggfTsKICAgICBWZWN0b3I8Vmly
dHVhbFJlZ2lzdGVyPiBtX25vcm1hbGl6ZWRBcmd1bWVudHM7CiAgICAgSGFzaE1hcDxMYWJlbCos
IFZlY3RvcjxTd2l0Y2hFbnRyeT4+IG1fc3dpdGNoZXM7CkBAIC00NDAsOSArNDk5LDEyIEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4gbV9yZXN1bHRzOwogICAgIENo
ZWNrZWQ8dW5zaWduZWQ+IG1fc3RhY2tTaXplIHsgMCB9OwogICAgIENoZWNrZWQ8dW5zaWduZWQ+
IG1fbWF4U3RhY2tTaXplIHsgMCB9OworICAgIENoZWNrZWQ8dW5zaWduZWQ+IG1fdHJ5RGVwdGgg
eyAwIH07CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9tYXhUcnlEZXB0aCB7IDAgfTsKKyAgICBi
b29sIG1fdXNlc0V4Y2VwdGlvbnMgeyBmYWxzZSB9OwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29k
ZShjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywg
dWludDMyX3QgZnVuY3Rpb25JbmRleCkKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlv
bkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhf
dCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgpCiB7CiAgICAgTExJbnRHZW5lcmF0b3IgbGxpbnRHZW5lcmF0b3IoaW5mbywgZnVuY3Rpb25J
bmRleCwgc2lnbmF0dXJlKTsKICAgICBGdW5jdGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj4gcGFy
c2VyKGxsaW50R2VuZXJhdG9yLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0
dXJlLCBpbmZvKTsKQEAgLTQ2Niw3ICs1MjgsNyBAQCBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8QnVm
ZmVyPiYgdGhyZWFkU3BlY2lmaWNCdWZmZXIoKQogICAgIHJldHVybiAqdGhyZWFkU3BlY2lmaWNC
dWZmZXJQdHI7CiB9CiAKLUxMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcihjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJikKK0xMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcihNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJikKICAgICA6IEJ5
dGVjb2RlR2VuZXJhdG9yQmFzZShtYWtlVW5pcXVlPEZ1bmN0aW9uQ29kZUJsb2NrPihmdW5jdGlv
bkluZGV4KSwgMCkKICAgICAsIG1faW5mbyhpbmZvKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1
bmN0aW9uSW5kZXgpCkBAIC00ODUsOSArNTQ3LDIyIEBAIExMSW50R2VuZXJhdG9yOjpMTEludEdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25J
CiAgICAgV2FzbUVudGVyOjplbWl0KHRoaXMpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNv
ZGU+Cit2b2lkIExMSW50R2VuZXJhdG9yOjpyZXBhdGNoKGNvbnN0IENhdGNoUmV3cml0ZUluZm8m
IGluZm8pCit7CisgICAgYXV0byByZWYgPSBtX3dyaXRlci5yZWYoaW5mby5tX2luc3RydWN0aW9u
T2Zmc2V0KTsKKyAgICBPcGNvZGUqIGluc3RydWN0aW9uID0gcmVmLT5jYXN0PE9wY29kZSwgV2Fz
bU9wY29kZVRyYWl0cz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZXhjZXB0aW9uUmVnaXN0ZXIg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX21heFN0YWNrU2l6ZSArIGluZm8ubV90cnlEZXB0
aCAtIDEpOworICAgIGluc3RydWN0aW9uLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uUmVnaXN0ZXIs
IFtdKCkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgfSk7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxG
dW5jdGlvbkNvZGVCbG9jaz4gTExJbnRHZW5lcmF0b3I6OmZpbmFsaXplKCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChtX2NvZGVCbG9jayk7CisKICAgICBzaXplX3QgbnVtQ2FsbGVlTG9jYWxzID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIG1fbWF4
U3RhY2tTaXplKTsKICAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVMb2NhbHMgPSBudW1DYWxs
ZWVMb2NhbHM7CiAgICAgUkVMRUFTRV9BU1NFUlQobnVtQ2FsbGVlTG9jYWxzID09IG1fY29kZUJs
b2NrLT5tX251bUNhbGxlZUxvY2Fscyk7CkBAIC01MDAsNiArNTc1LDkgQEAgc3RkOjp1bmlxdWVf
cHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBMTEludEdlbmVyYXRvcjo6ZmluYWxpemUoKQogICAgIFJF
TEVBU0VfQVNTRVJUKHVzZWRCdWZmZXIuY2FwYWNpdHkoKSA9PSBvbGRDYXBhY2l0eSk7CiAgICAg
KnRocmVhZFNwZWNpZmljID0gV1RGTW92ZSh1c2VkQnVmZmVyKTsKIAorICAgIGlmICghbV91c2Vz
RXhjZXB0aW9ucykKKyAgICAgICAgbV9pbmZvLm1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9u
cy5xdWlja1NldChtX2Z1bmN0aW9uSW5kZXgpOworCiAgICAgcmV0dXJuIFdURk1vdmUobV9jb2Rl
QmxvY2spOwogfQogCkBAIC01ODAsNyArNjU4LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2Fs
bEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBMTEkK
IAogICAgIC8vIEZJWE1FOiB3ZSBhcmUgYWxsb2NhdGluZyB0aGUgZXh0cmEgc3BhY2UgZm9yIHRo
ZSBhcmd1bWVudC9yZXR1cm4gY291bnQgaW4gb3JkZXIgdG8gYXZvaWQgaW50ZXJmZXJlbmNlLCBi
dXQgd2UgY291bGQgZG8gYmV0dGVyCiAgICAgLy8gTk9URTogV2UgaW5jcmVhc2UgYXJnIGNvdW50
IGJ5IDEgZm9yIHRoZSBjYXNlIG9mIGluZGlyZWN0IGNhbGxzCi0gICAgbV9zdGFja1NpemUgKz0g
c3RkOjptYXgoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSArIDEsIHNpZ25hdHVyZS5yZXR1cm5D
b3VudCgpKSArIGdwckNvdW50ICsgZnByQ291bnQgKyBzdGFja0NvdW50ICsgQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnM7CisgICAgbV9zdGFja1NpemUgKz0gc3RkOjptYXgoc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSArIDEsIHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpKSArIGdwckNv
dW50ICsgZnByQ291bnQgKyBzdGFja0NvdW50ICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdp
c3RlcnMgKyAxOwogICAgIGlmIChtX3N0YWNrU2l6ZS52YWx1ZSgpICUgc3RhY2tBbGlnbm1lbnRS
ZWdpc3RlcnMoKSkKICAgICAgICAgKyttX3N0YWNrU2l6ZTsKICAgICBpZiAobV9tYXhTdGFja1Np
emUgPCBtX3N0YWNrU2l6ZSkKQEAgLTU5MSw3ICs2NjksNyBAQCBhdXRvIExMSW50R2VuZXJhdG9y
OjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+
IExMSQogICAgIFJlc3VsdExpc3QgdGVtcG9yYXJ5UmVzdWx0cyhzaWduYXR1cmUucmV0dXJuQ291
bnQoKSk7CiAKICAgICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9IG1fc3RhY2tTaXplOwot
ICAgIGNvbnN0IHVuc2lnbmVkIGJhc2UgPSBzdGFja09mZnNldCAtIENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzOworICAgIGNvbnN0IHVuc2lnbmVkIGJhc2UgPSBzdGFja09mZnNldCAt
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzIC0gMTsKIAogICAgIGNvbnN0IHVpbnQz
Ml90IGdwckxpbWl0ID0gYmFzZSAtIHN0YWNrQ291bnQgLSBncHJDb3VudDsKICAgICBjb25zdCB1
aW50MzJfdCBmcHJMaW1pdCA9IGdwckxpbWl0IC0gZnByQ291bnQ7CkBAIC02ODMsNyArNzYxLDcg
QEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlKSAtPiBWZWMKIAogICAgIHVpbnQzMl90IGdwckluZGV4ID0gMDsK
ICAgICB1aW50MzJfdCBmcHJJbmRleCA9IGdwckNvdW50OwotICAgIHVpbnQzMl90IHN0YWNrSW5k
ZXggPSAwOworICAgIHVpbnQzMl90IHN0YWNrSW5kZXggPSAxOwogICAgIGNvbnN0IHVpbnQzMl90
IG1heEdQUkluZGV4ID0gZ3ByQ291bnQ7CiAgICAgY29uc3QgdWludDMyX3QgbWF4RlBSSW5kZXgg
PSBtYXhHUFJJbmRleCArIGZwckNvdW50OwogCkBAIC03MzEsNyArODA5LDcgQEAgYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQ
YXJ0aWFsUmVzdWx0CiAgICAgY29uc3QgdWludDMyX3QgbWF4RlBSSW5kZXggPSBncHJDb3VudCAr
IGZwckNvdW50OwogICAgIHVpbnQzMl90IGdwckluZGV4ID0gMDsKICAgICB1aW50MzJfdCBmcHJJ
bmRleCA9IG1heEdQUkluZGV4OwotICAgIHVpbnQzMl90IHN0YWNrSW5kZXggPSAwOworICAgIHVp
bnQzMl90IHN0YWNrSW5kZXggPSAxOwogCiAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gcmVn
aXN0ZXJBcmd1bWVudHMoZ3ByQ291bnQgKyBmcHJDb3VudCk7CiAgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IGdwckNvdW50ICsgZnByQ291bnQ7IGkrKykKQEAgLTkwNiw2ICs5ODQsNyBAQCBh
dXRvIExMSW50R2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3Rh
Y2smIGVuY2xvc2luZ1N0YWNrLCBDbwogCiAgICAgYmxvY2sgPSBDb250cm9sVHlwZTo6bG9vcChz
aWduYXR1cmUsIG1fc3RhY2tTaXplLCBXVEZNb3ZlKGJvZHkpLCBXVEZNb3ZlKGNvbnRpbnVhdGlv
bikpOwogCisgICAgVmVjdG9yPHVuc2lnbmVkPiB1bnJlc29sdmVkT2Zmc2V0czsKICAgICBWZWN0
b3I8VmlydHVhbFJlZ2lzdGVyPiBvc3JFbnRyeURhdGE7CiAgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IG1fY29kZUJsb2NrLT5tX251bUFyZ3VtZW50czsgaSsrKQogICAgICAgICBvc3JFbnRy
eURhdGEuYXBwZW5kKG1fbm9ybWFsaXplZEFyZ3VtZW50c1tpXSk7CkBAIC05MTYsOSArOTk1LDEy
IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJl
LCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvCiAgICAgZm9yICh1aW50MzJfdCBpID0gZ3ByQ291
bnQgKyBmcHJDb3VudCArIG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0ZXJzOyBpIDwgbV9j
b2RlQmxvY2stPm1fbnVtVmFyczsgaSsrKQogICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRl
eCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsr
Y29udHJvbEluZGV4KSB7CisgICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9wYXJzZXItPmNv
bnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7CiAgICAgICAgIFN0YWNrJiBl
eHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5l
bmNsb3NlZEV4cHJlc3Npb25TdGFjazsKICAgICAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gZXhw
cmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKICAgICAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBl
bmQoZXhwcmVzc2lvbik7CisgICAgICAgIGlmIChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRh
KSkKKyAgICAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQoV1RGOjpnZXQ8Q29udHJvbENhdGNo
PihkYXRhKS5tX2V4Y2VwdGlvbik7CiAgICAgfQogICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIGV4
cHJlc3Npb24gOiBlbmNsb3NpbmdTdGFjaykKICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZChl
eHByZXNzaW9uKTsKQEAgLTk3NSw2ICsxMDU3LDE1OSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjph
ZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAog
ICAgIHJldHVybiB7IH07CiB9CiAKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRyeShCbG9ja1Np
Z25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJl
c3VsdCwgU3RhY2smIG5ld1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgbV91c2VzRXhj
ZXB0aW9ucyA9IHRydWU7CisgICAgKyttX3RyeURlcHRoOworICAgIGlmIChtX21heFRyeURlcHRo
IDwgbV90cnlEZXB0aCkKKyAgICAgICAgbV9tYXhUcnlEZXB0aCA9IG1fdHJ5RGVwdGg7CisKKyAg
ICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKKyAgICBS
ZWY8TGFiZWw+IHRyeUxhYmVsID0gbmV3RW1pdHRlZExhYmVsKCk7CisgICAgUmVmPExhYmVsPiBj
b250aW51YXRpb24gPSBuZXdMYWJlbCgpOworICAgIHJlc3VsdCA9IENvbnRyb2xUeXBlOjpjcmVh
dGVUcnkoc2lnbmF0dXJlLCBtX3N0YWNrU2l6ZSwgV1RGTW92ZSh0cnlMYWJlbCksIFdURk1vdmUo
Y29udGludWF0aW9uKSwgbV90cnlEZXB0aCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBM
TEludEdlbmVyYXRvcjo6ZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2goQ29udHJvbFR5cGUm
IGRhdGEsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spCit7CisgICAgaWYgKCFDb250cm9sVHlwZTo6
aXNBbnlDYXRjaChkYXRhKSkKKyAgICAgICAgbWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMo
ZXhwcmVzc2lvblN0YWNrKTsKKyAgICBlbHNlIHsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
ZGF0YS5zdGFja1NpemUoKSk7CisgICAgICAgIGZvciAoVHlwZWRFeHByZXNzaW9uJiB2YWx1ZSA6
IGV4cHJlc3Npb25TdGFjaykgeworICAgICAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBkc3Qs
IHZhbHVlKTsKKyAgICAgICAgICAgIHZhbHVlID0gVHlwZWRFeHByZXNzaW9uIHsgdmFsdWUudHlw
ZSgpLCBkc3QgfTsKKyAgICAgICAgICAgIGRzdCAtPSAxOworICAgICAgICB9CisgICAgfQorICAg
IFdhc21KbXA6OmVtaXQodGhpcywgZGF0YS5tX2NvbnRpbnVhdGlvbi0+YmluZCh0aGlzKSk7Cit9
CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4
LCBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSwgU3RhY2smIGV4cHJlc3Npb25T
dGFjaywgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBmaW5hbGl6ZVByZXZpb3VzQmxvY2tGb3JDYXRjaChkYXRhLCBleHByZXNz
aW9uU3RhY2spOworICAgIHJldHVybiBhZGRDYXRjaFRvVW5yZWFjaGFibGUoZXhjZXB0aW9uSW5k
ZXgsIGV4Y2VwdGlvblNpZ25hdHVyZSwgZGF0YSwgcmVzdWx0cyk7Cit9CisKK2F1dG8gTExJbnRH
ZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiBleGNlcHRpb25TaWduYXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBS
ZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgbV91c2VzRXhjZXB0
aW9ucyA9IHRydWU7CisgICAgUmVmPExhYmVsPiBjYXRjaExhYmVsID0gbmV3RW1pdHRlZExhYmVs
KCk7CisKKyAgICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGV4Y2VwdGlvbiA9IHB1c2goKTsKKyAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxDb250cm9sVHJ5PihkYXRhKSkgeworICAgICAgICBDb250cm9sVHJ5JiB0cnlEYXRhID0gV1RG
OjpnZXQ8Q29udHJvbFRyeT4oZGF0YSk7CisgICAgICAgIGRhdGEgPSBDb250cm9sVHlwZTo6Y3Jl
YXRlQ2F0Y2goZGF0YS5tX3NpZ25hdHVyZSwgZGF0YS5zdGFja1NpemUoKSwgV1RGTW92ZSh0cnlE
YXRhLm1fdHJ5KSwgV1RGTW92ZShkYXRhLm1fY29udGludWF0aW9uKSwgY2F0Y2hMYWJlbCwgdHJ5
RGF0YS5tX3RyeURlcHRoLCBleGNlcHRpb24pOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAg
ICByZXN1bHRzLmFwcGVuZChwdXNoKCkpOworCisgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMo
KSkKKyAgICAgICAgV2FzbUNhdGNoOjplbWl0KHRoaXMsIGV4Y2VwdGlvbkluZGV4LCBleGNlcHRp
b24sIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIHJlc3VsdHMuaXNFbXB0eSgp
ID8gMCA6IC1yZXN1bHRzWzBdLm9mZnNldCgpKTsKKyAgICBlbHNlCisgICAgICAgIFdhc21DYXRj
aE5vVGxzOjplbWl0KHRoaXMsIGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb24sIGV4Y2VwdGlvblNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCksIHJlc3VsdHMuaXNFbXB0eSgpID8gMCA6IC1yZXN1bHRz
WzBdLm9mZnNldCgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25T
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IHJlc3VsdHNbaV07CisgICAgICAgIFR5cGUgdHlwZSA9IGV4Y2VwdGlvblNpZ25hdHVy
ZS5hcmd1bWVudChpKTsKKyAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBXYXNtOjpUeXBlS2luZDo6RjMyOgorICAgICAgICAgICAgV2FzbUYzMlJlaW50ZXJwcmV0STMy
OjplbWl0KHRoaXMsIGRzdCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFdhc206OlR5cGVLaW5kOjpGNjQ6CisgICAgICAgICAgICBXYXNtRjY0UmVpbnRlcnByZXRJNjQ6
OmVtaXQodGhpcywgZHN0LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
V2FzbTo6VHlwZUtpbmQ6OkkzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STY0Ogor
ICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpFeHRlcm5yZWY6CisgICAgICAgIGNhc2UgV2Fz
bTo6VHlwZUtpbmQ6OkZ1bmNyZWY6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIENvbnRyb2xDYXRjaCYgY2F0Y2hEYXRh
ID0gV1RGOjpnZXQ8Q29udHJvbENhdGNoPihkYXRhKTsKKyAgICBjYXRjaERhdGEubV9raW5kID0g
Q2F0Y2hLaW5kOjpDYXRjaDsKKyAgICBtX2NvZGVCbG9jay0+YWRkRXhjZXB0aW9uSGFuZGxlcih7
IEhhbmRsZXJUeXBlOjpDYXRjaCwgY2F0Y2hEYXRhLm1fdHJ5U3RhcnQtPmxvY2F0aW9uKCksIGNh
dGNoRGF0YS5tX3RyeUVuZC0+bG9jYXRpb24oKSwgY2F0Y2hMYWJlbC0+bG9jYXRpb24oKSwgbV90
cnlEZXB0aCwgZXhjZXB0aW9uSW5kZXggfSk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IExMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbChTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBDb250
cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGZpbmFsaXplUHJldmlvdXNC
bG9ja0ZvckNhdGNoKGRhdGEsIGV4cHJlc3Npb25TdGFjayk7CisgICAgV2FzbUptcDo6ZW1pdCh0
aGlzLCBkYXRhLm1fY29udGludWF0aW9uLT5iaW5kKHRoaXMpKTsKKyAgICByZXR1cm4gYWRkQ2F0
Y2hBbGxUb1VucmVhY2hhYmxlKGRhdGEpOworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjphZGRD
YXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICBSZWY8TGFiZWw+IGNhdGNoTGFi
ZWwgPSBuZXdFbWl0dGVkTGFiZWwoKTsKKyAgICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXpl
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGV4Y2VwdGlvbiA9IHB1c2goKTsKKyAgICBpZiAoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sVHJ5PihkYXRhKSkgeworICAgICAgICBDb250cm9s
VHJ5JiB0cnlEYXRhID0gV1RGOjpnZXQ8Q29udHJvbFRyeT4oZGF0YSk7CisgICAgICAgIGRhdGEg
PSBDb250cm9sVHlwZTo6Y3JlYXRlQ2F0Y2goZGF0YS5tX3NpZ25hdHVyZSwgZGF0YS5zdGFja1Np
emUoKSwgV1RGTW92ZSh0cnlEYXRhLm1fdHJ5KSwgV1RGTW92ZShkYXRhLm1fY29udGludWF0aW9u
KSwgY2F0Y2hMYWJlbCwgdHJ5RGF0YS5tX3RyeURlcHRoLCBleGNlcHRpb24pOworICAgIH0KKyAg
ICBDb250cm9sQ2F0Y2gmIGNhdGNoRGF0YSA9IFdURjo6Z2V0PENvbnRyb2xDYXRjaD4oZGF0YSk7
CisgICAgY2F0Y2hEYXRhLm1fa2luZCA9IENhdGNoS2luZDo6Q2F0Y2hBbGw7CisKKyAgICBpZiAo
Q29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBXYXNtQ2F0Y2hBbGw6OmVtaXQodGhpcywg
ZXhjZXB0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIFdhc21DYXRjaEFsbE5vVGxzOjplbWl0KHRo
aXMsIGV4Y2VwdGlvbik7CisKKyAgICBtX2NvZGVCbG9jay0+YWRkRXhjZXB0aW9uSGFuZGxlcih7
IEhhbmRsZXJUeXBlOjpDYXRjaEFsbCwgY2F0Y2hEYXRhLm1fdHJ5U3RhcnQtPmxvY2F0aW9uKCks
IGNhdGNoRGF0YS5tX3RyeUVuZC0+bG9jYXRpb24oKSwgY2F0Y2hMYWJlbC0+bG9jYXRpb24oKSwg
bV90cnlEZXB0aCwgMCB9KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIExMSW50R2VuZXJh
dG9yOjphZGREZWxlZ2F0ZShDb250cm9sVHlwZSYgdGFyZ2V0LCBDb250cm9sVHlwZSYgZGF0YSkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUo
dGFyZ2V0LCBkYXRhKTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1Vu
cmVhY2hhYmxlKENvbnRyb2xUeXBlJiB0YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CisgICAgUmVmPExhYmVs
PiBkZWxlZ2F0ZUxhYmVsID0gbmV3RW1pdHRlZExhYmVsKCk7CisKKyAgICBBU1NFUlQoQ29udHJv
bFR5cGU6OmlzVHJ5KHRhcmdldCkgfHwgQ29udHJvbFR5cGU6OmlzVG9wTGV2ZWwodGFyZ2V0KSk7
CisgICAgdW5zaWduZWQgdGFyZ2V0RGVwdGggPSBDb250cm9sVHlwZTo6aXNUcnkodGFyZ2V0KSA/
IFdURjo6Z2V0PENvbnRyb2xUcnk+KHRhcmdldCkubV90cnlEZXB0aCA6IDA7CisKKyAgICBDb250
cm9sVHJ5JiB0cnlEYXRhID0gV1RGOjpnZXQ8Q29udHJvbFRyeT4oZGF0YSk7CisgICAgbV9jb2Rl
QmxvY2stPmFkZEV4Y2VwdGlvbkhhbmRsZXIoeyBIYW5kbGVyVHlwZTo6RGVsZWdhdGUsIHRyeURh
dGEubV90cnktPmxvY2F0aW9uKCksIGRlbGVnYXRlTGFiZWwtPmxvY2F0aW9uKCksIDAsIG1fdHJ5
RGVwdGgsIHRhcmdldERlcHRoIH0pOworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNl
cHRpb25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CisgICAgd2Fsa0V4cHJl
c3Npb25TdGFjayhhcmdzLCBbJl0oVmlydHVhbFJlZ2lzdGVyJiBhcmcsIFZpcnR1YWxSZWdpc3Rl
ciBzbG90KSB7CisgICAgICAgIGlmIChhcmcgPT0gc2xvdCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBzbG90LCBhcmcpOworICAgICAgICBhcmcgPSBz
bG90OworICAgIH0pOworICAgIFdhc21UaHJvdzo6ZW1pdCh0aGlzLCBleGNlcHRpb25JbmRleCwg
YXJncy5pc0VtcHR5KCkgPyB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgwKSA6IGFyZ3NbMF0pOwor
ICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJldGhyb3codW5z
aWduZWQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgbV91c2Vz
RXhjZXB0aW9ucyA9IHRydWU7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29u
dHJvbENhdGNoPihkYXRhKSk7CisgICAgQ29udHJvbENhdGNoIGNhdGNoRGF0YSA9IFdURjo6Z2V0
PENvbnRyb2xDYXRjaD4oZGF0YSk7CisgICAgV2FzbVJldGhyb3c6OmVtaXQodGhpcywgY2F0Y2hE
YXRhLm1fZXhjZXB0aW9uKTsKKyAgICByZXR1cm4geyB9OworfQorCiBhdXRvIExMSW50R2VuZXJh
dG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbFR5cGUmIGRhdGEsIFN0YWNrJiByZXR1cm5WYWx1
ZXMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBpZiAoIWRhdGEubV9zaWduYXR1cmUtPnJldHVy
bkNvdW50KCkpIHsKQEAgLTEwNDksMTkgKzEyODQsMjUgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6
ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIGV4cHJlc3Npb25TdGFjaykgLT4g
UGEKIHsKICAgICAvLyBGSVhNRTogV2Ugb25seSBuZWVkIHRvIG1hdGVyaWFsaXplIGNvbnN0YW50
cyBoZXJlIGlmIHRoZXJlIGV4aXN0cyBhIGp1bXAgdG8gdGhpcyBsYWJlbAogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM2NTcKLSAgICBtYXRlcmlhbGl6
ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNzaW9uU3RhY2spOworICAgIGZpbmFsaXplUHJldmlv
dXNCbG9ja0ZvckNhdGNoKGVudHJ5LmNvbnRyb2xEYXRhLCBleHByZXNzaW9uU3RhY2spOwogICAg
IHJldHVybiBhZGRFbmRUb1VucmVhY2hhYmxlKGVudHJ5LCBleHByZXNzaW9uU3RhY2ssIGZhbHNl
KTsKIH0KIAogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRy
b2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIGJvb2wgdW5yZWFj
aGFibGUpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVuZFRvVW5y
ZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgYm9v
bCB1bnJlYWNoYWJsZSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIENvbnRyb2xUeXBlJiBkYXRh
ID0gZW50cnkuY29udHJvbERhdGE7CiAKLSAgICBSRUxFQVNFX0FTU0VSVCh1bnJlYWNoYWJsZSB8
fCBtX3N0YWNrU2l6ZSA9PSBkYXRhLnN0YWNrU2l6ZSgpICsgZGF0YS5tX3NpZ25hdHVyZS0+cmV0
dXJuQ291bnQoKSk7CisgICAgdW5zaWduZWQgc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsK
KyAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZW50cnkuY29udHJvbERhdGEpKQorICAg
ICAgICArK3N0YWNrU2l6ZTsgLy8gQWNjb3VudCBmb3IgdGhlIGNhdWdodCBleGNlcHRpb24KKyAg
ICBSRUxFQVNFX0FTU0VSVCh1bnJlYWNoYWJsZSB8fCBtX3N0YWNrU2l6ZSA9PSAgc3RhY2tTaXpl
ICsgZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CiAKICAgICBtX3N0YWNrU2l6ZSA9
IGRhdGEuc3RhY2tTaXplKCk7CiAKKyAgICBpZiAoQ29udHJvbFR5cGU6OmlzVHJ5KGRhdGEpIHx8
IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbENhdGNoPihkYXRhKSkKKyAgICAgICAgLS1t
X3RyeURlcHRoOworCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubV9zaWduYXR1
cmUtPnJldHVybkNvdW50KCk7ICsraSkgewogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRv
IGEgY29uc2lzdGVuY3kgY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGp1c3QgcmVzZXQgdGhlIHN0YWNr
IHNpemUKICAgICAgICAgLy8gYXJlIHB1c2hpbmcgbmV3IHZhbHVlcywgd2hpbGUgd2UgYWxyZWFk
eSBoYXZlIHRoZSBzYW1lIHZhbHVlcyBpbiB0aGUgc3RhY2suCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5oCmluZGV4IDhhMTYwMzgyNmMxMDBlYmZm
MDhhMDMwNmY2MmVkMTk3YmJjZWZmNWIuLmMwMTJmYjFlZTcxNGFmOTgyM2RhMjZjNmMzNGQ4YWI3
NzJlYjQ1NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdl
bmVyYXRvci5oCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xh
c3MgU2lnbmF0dXJlOwogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwogCi1FeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5
dGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CitFeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5
dGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIE1vZHVsZUlu
Zm9ybWF0aW9uJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21M
aW1pdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MaW1pdHMuaAppbmRleCBj
ZjhiNDQ2MDM2ODExMjNlY2MyNWNmYzM3MjQ5OGI1ZjViNThjOTg2Li5mOGYwNTNiNTg2MGU3ZGY5
N2RiNDQ2NGFhMGVhMTc0OGQ5Yjg3ZjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTGltaXRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUxpbWl0cy5oCkBAIC00MSw2ICs0MSw3IEBAIGNvbnN0ZXhwciBzaXplX3QgbWF4VHlwZXMgPSAx
MDAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhGdW5jdGlvbnMgPSAxMDAwMDAwOwogY29uc3Rl
eHByIHNpemVfdCBtYXhJbXBvcnRzID0gMTAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhFeHBv
cnRzID0gMTAwMDAwOworY29uc3RleHByIHNpemVfdCBtYXhFeGNlcHRpb25zID0gMTAwMDAwOwog
Y29uc3RleHByIHNpemVfdCBtYXhHbG9iYWxzID0gMTAwMDAwMDsKIGNvbnN0ZXhwciBzaXplX3Qg
bWF4RGF0YVNlZ21lbnRzID0gMTAwMDAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcAppbmRleCAzNTQ5MWNmZTU0MTA1NzNh
YmQzNWJhMzliNzU2MDdkODZjMjY4ZGI2Li5jNmU4YjhjN2ZlYjljYzIwOGViMjc5NmVhN2YyYTQy
MDRkNDA3NjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlSW5mb3JtYXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVJbmZvcm1hdGlvbi5jcHAKQEAgLTM2LDYgKzM2LDcgQEAgTW9kdWxlSW5mb3JtYXRpb246
Ok1vZHVsZUluZm9ybWF0aW9uKCkKICAgICA6IG5hbWVTZWN0aW9uKE5hbWVTZWN0aW9uOjpjcmVh
dGUoKSkKIHsKIH0KKwogTW9kdWxlSW5mb3JtYXRpb246On5Nb2R1bGVJbmZvcm1hdGlvbigpIHsg
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaAppbmRleCBhMmIwZjgzNmM4OWMyMGVl
ZTI0YjlhYjM0YmUxMDFjMjg1MTQwMzUyLi4zMjhjNmJjYTZiZmE2NjJiNTNlOWM4YzhkYTlhY2Ix
OGY1MDQ0YWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlSW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlSW5mb3JtYXRpb24uaApAQCAtNTgsOCArNTgsMjIgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0
aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7CiAg
ICAgICAgICAgICA6IGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5k
ZXggLSBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpXTsKICAgICB9CiAKKyAg
ICBzaXplX3QgZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSBjb25zdCB7IHJldHVybiBpbXBvcnRF
eGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSArIGludGVybmFsRXhjZXB0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICBib29sIGlzSW1wb3J0ZWRFeGNlcHRpb25Gcm9tRXhj
ZXB0aW9uSW5kZXhTcGFjZShzaXplX3QgZXhjZXB0aW9uSW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoZXhjZXB0aW9uSW5kZXggPCBleGNlcHRpb25JbmRleFNwYWNlU2l6ZSgpKTsK
KyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkluZGV4IDwgaW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJl
SW5kaWNlcy5zaXplKCk7CisgICAgfQorICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2Uoc2l6ZV90IGV4Y2VwdGlvbkluZGV4KSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzSW1wb3J0ZWRFeGNlcHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhT
cGFjZShleGNlcHRpb25JbmRleCkKKyAgICAgICAgICAgID8gaW1wb3J0RXhjZXB0aW9uU2lnbmF0
dXJlSW5kaWNlc1tleGNlcHRpb25JbmRleF0KKyAgICAgICAgICAgIDogaW50ZXJuYWxFeGNlcHRp
b25TaWduYXR1cmVJbmRpY2VzW2V4Y2VwdGlvbkluZGV4IC0gaW1wb3J0RXhjZXB0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCldOworICAgIH0KKwogICAgIHVpbnQzMl90IGltcG9ydEZ1bmN0aW9u
Q291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6
ZSgpOyB9CiAgICAgdWludDMyX3QgaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1
cm4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9CisgICAgdWludDMy
X3QgaW1wb3J0RXhjZXB0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRFeGNlcHRpb25T
aWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQogCiAgICAgLy8gQ3VycmVudGx5LCBvdXIgd2FzbSBp
bXBsZW1lbnRhdGlvbiBhbGxvd3Mgb25seSBvbmUgbWVtb3J5IGFuZCB0YWJsZS4KICAgICAvLyBJ
ZiB3ZSBuZWVkIHRvIHJlbW92ZSB0aGlzIGxpbWl0YXRpb24sIHdlIHdvdWxkIGhhdmUgTWVtb3J5
SW5mb3JtYXRpb24gYW5kIFRhYmxlSW5mb3JtYXRpb24gaW4gdGhlIFZlY3RvcnMuCkBAIC03Niw5
ICs5MCwxNCBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICBib29sIGlzRGVjbGFyZWRGdW5jdGlv
bih1aW50MzJfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9kZWNsYXJlZEZ1bmN0aW9ucy5jb250
YWlucyhpbmRleCk7IH0KICAgICB2b2lkIGFkZERlY2xhcmVkRnVuY3Rpb24odWludDMyX3QgaW5k
ZXgpIHsgbV9kZWNsYXJlZEZ1bmN0aW9ucy5zZXQoaW5kZXgpOyB9CiAKKyAgICBib29sIGlzRGVj
bGFyZWRFeGNlcHRpb24odWludDMyX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjbGFyZWRF
eGNlcHRpb25zLmNvbnRhaW5zKGluZGV4KTsgfQorICAgIHZvaWQgYWRkRGVjbGFyZWRFeGNlcHRp
b24odWludDMyX3QgaW5kZXgpIHsgbV9kZWNsYXJlZEV4Y2VwdGlvbnMuc2V0KGluZGV4KTsgfQor
CiAgICAgVmVjdG9yPEltcG9ydD4gaW1wb3J0czsKICAgICBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+
IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlczsKICAgICBWZWN0b3I8U2lnbmF0dXJlSW5k
ZXg+IGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOworICAgIFZlY3RvcjxTaWduYXR1
cmVJbmRleD4gaW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlczsKKyAgICBWZWN0b3I8U2ln
bmF0dXJlSW5kZXg+IGludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlczsKICAgICBWZWN0
b3I8UmVmPFNpZ25hdHVyZT4+IHVzZWRTaWduYXR1cmVzOwogCiAgICAgTWVtb3J5SW5mb3JtYXRp
b24gbWVtb3J5OwpAQCAtOTgsNiArMTE3LDggQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7CiAgICAgdWlu
dDMyX3QgbnVtYmVyT2ZEYXRhU2VnbWVudHMgeyAwIH07CiAKICAgICBCaXRWZWN0b3IgbV9kZWNs
YXJlZEZ1bmN0aW9uczsKKyAgICBCaXRWZWN0b3IgbV9kZWNsYXJlZEV4Y2VwdGlvbnM7CisgICAg
Qml0VmVjdG9yIG1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9uczsKICAgICBtdXRhYmxlIEJp
dFZlY3RvciBtX3JlZmVyZW5jZWRGdW5jdGlvbnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCmluZGV4IDBkNDMz
OGQ2NTkyMTMyMmYwMjgwZGVmNjlkNTgzNjE2YjQ5ZDYxY2IuLjYxMDMxNjFjMWMyZjAyNGMyOTRj
MGZlMTU0MGZlYmM3NTJiOWRkYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCkBAIC05MSwxNiArOTEsMjAgQEAgdm9p
ZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICBJbnRlcm5hbEZ1bmN0aW9uKiBpbnRlcm5hbEZ1bmN0aW9uID0g
cGFyc2VBbmRDb21waWxlUmVzdWx0LT5nZXQoKTsKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFi
ZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnM7Cisg
ICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucywgaW50ZXJuYWxGdW5jdGlvbiwgY29udGV4dCwgbGlua0J1ZmZlcik7CisKICAgICBvbWdF
bnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4oCiAgICAgICAg
IEZJTkFMSVpFX1dBU01fQ09ERV9GT1JfTU9ERShDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVu
dHJ5TW9kZSwgbGlua0J1ZmZlciwgSklUQ29tcGlsYXRpb25QdHJUYWcsICJXZWJBc3NlbWJseSBP
TUdGb3JPU1JFbnRyeSBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwg
c2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5h
bWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+
Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgIFdURk1v
dmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKIAotICAgIG9tZ0VudHJ5cG9p
bnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VBbmRDb21waWxlUmVzdWx0LnZh
bHVlKCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CisgICAgb21nRW50cnlwb2lu
dC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBv
aW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOwogCiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigp
ID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7Ci0gICAgUmVmPE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUo
b21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSk7CisgICAgUmVmPE9N
R0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxlZTo6Y3JlYXRl
KFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RG
TW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rp
b24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25z
KSk7CiAgICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIocGFyc2VB
bmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6
Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKGludGVybmFsRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6
Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKIAogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9jb2Rl
QmxvY2stPm1fbG9jayB9OwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21U
b1dhc21DYWxsc2l0ZXMoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9NR1BsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uY3BwCmluZGV4IDVlNzlmMWJjOTg1YzY1ZDVjYmJhZjg3ODRiZGI0ODkwZGM4ZTYyNTAuLmY4
ZWUwMDA4MDg5OWRjNmFhNTY1YjIyYWQ5MzNjOTNkMzRhYTJiZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKQEAgLTg4LDE3ICs4OCwyMSBAQCB2b2lkIE9N
R1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
KyAgICBJbnRlcm5hbEZ1bmN0aW9uKiBpbnRlcm5hbEZ1bmN0aW9uID0gcGFyc2VBbmRDb21waWxl
UmVzdWx0LT5nZXQoKTsKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4+IGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnM7CisgICAgY29tcHV0ZUV4Y2Vw
dGlvbkhhbmRsZXJMb2NhdGlvbnMoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucywgaW50ZXJuYWxG
dW5jdGlvbiwgY29udGV4dCwgbGlua0J1ZmZlcik7CisKICAgICBvbWdFbnRyeXBvaW50LmNvbXBp
bGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4oCiAgICAgICAgIEZJTkFMSVpFX1dBU01f
Q09ERV9GT1JfTU9ERShDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIGxpbmtCdWZmZXIsIEpJVENv
bXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgT01HIGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVz
IiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwg
bWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3Jt
YXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0
YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykp
OwogCi0gICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShwYXJz
ZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJz
KTsKKyAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKGludGVy
bmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CiAKICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3Io
bW9kZSgpKSk7Ci0gICAgICAgIFJlZjxPTUdDYWxsZWU+IGNhbGxlZSA9IE9NR0NhbGxlZTo6Y3Jl
YXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3Zl
KHVubGlua2VkQ2FsbHMpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVy
KHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxl
ZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisgICAgICAgIFJlZjxPTUdDYWxsZWU+IGNh
bGxlZSA9IE9NR0NhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9u
SW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlv
bkluZGV4U3BhY2UpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKGludGVybmFsRnVu
Y3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9uSGFu
ZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGludGVybmFsRnVuY3Rpb24tPmNhbGxlZU1vdmVM
b2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKICAgICAgICAgQVNT
RVJUKCFtX2NvZGVCbG9jay0+bV9vbWdDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0pOwogICAgICAg
ICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeURhdGEuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeURhdGEuaAppbmRleCBkNDFlZDc5MzJiMzBlOWFhMGFl
ODc2M2JhODJhNjEyY2FmN2U2NDhiLi5kOTNmMzQyY2U2NDJkMmM2NjM5ZjY5MDY1OWU2YTI1YjNh
MGE3ODI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50
cnlEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9TUkVudHJ5RGF0
YS5oCkBAIC0yNyw4ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCiAK
KyNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCi0jaW5jbHVkZSAi
V2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTQ3LDYgKzQ3LDkgQEAgcHJpdmF0ZToKICAgICBCMzo6VHlw
ZSBtX3R5cGU7CiB9OwogCit1c2luZyBTdGFja01hcCA9IFZlY3RvcjxPU1JFbnRyeVZhbHVlPjsK
K3VzaW5nIFN0YWNrTWFwcyA9IEhhc2hNYXA8Q2FsbFNpdGVJbmRleCwgU3RhY2tNYXA+OworCiBj
bGFzcyBPU1JFbnRyeURhdGEgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9TUkVudHJ5RGF0
YSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC01OSwxMiArNjIsMTIgQEAgcHVi
bGljOgogCiAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZnVu
Y3Rpb25JbmRleDsgfQogICAgIHVpbnQzMl90IGxvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9vcEluZGV4OyB9Ci0gICAgVmVjdG9yPE9TUkVudHJ5VmFsdWU+JiB2YWx1ZXMoKSB7IHJldHVy
biBtX3ZhbHVlczsgfQorICAgIFN0YWNrTWFwJiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsg
fQogCiBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fZnVuY3Rpb25JbmRleDsKICAgICB1aW50MzJf
dCBtX2xvb3BJbmRleDsKLSAgICBWZWN0b3I8T1NSRW50cnlWYWx1ZT4gbV92YWx1ZXM7CisgICAg
U3RhY2tNYXAgbV92YWx1ZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCmluZGV4IDg1YjQy
NGZiMTg0ODkzMDhkZjI3ZjlhNjE3ZTdmNzMwZjYzZTI1NjkuLmRhYmFlZTdlYjgyZDcxYmRkYjEy
OTdjMDFiM2UzZmVkYTUzZDc3OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT3BlcmF0aW9ucy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSklURXhjZXB0
aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIgog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgpAQCAt
MTA1LDI0ICsxMDYsMTAgQEAgc3RhdGljIHZvaWQgdHJpZ2dlck9NR1JlcGxhY2VtZW50Q29tcGls
ZShUaWVyVXBDb3VudCYgdGllclVwLCBPTUdDYWxsZWUqIHJlcGxhY2UKICAgICB9CiB9CiAKLVNV
UFBSRVNTX0FTQU4KLXN0YXRpYyB2b2lkIGRvT1NSRW50cnkoSW5zdGFuY2UqIGluc3RhbmNlLCBQ
cm9iZTo6Q29udGV4dCYgY29udGV4dCwgQkJRQ2FsbGVlJiBjYWxsZWUsIE9NR0Zvck9TUkVudHJ5
Q2FsbGVlJiBvc3JFbnRyeUNhbGxlZSwgT1NSRW50cnlEYXRhJiBvc3JFbnRyeURhdGEpCit2b2lk
IGxvYWRWYWx1ZXNJbnRvQnVmZmVyKFByb2JlOjpDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTdGFj
a01hcCYgdmFsdWVzLCB1aW50NjRfdCogYnVmZmVyKQogewotICAgIGF1dG8gcmV0dXJuV2l0aG91
dE9TUkVudHJ5ID0gWyZdIHsKLSAgICAgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSA9IDA7Ci0gICAgfTsKLQotICAgIFJFTEVBU0VfQVNTRVJUKG9zckVudHJ5Q2FsbGVlLm9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSA9PSBvc3JFbnRyeURhdGEudmFsdWVzKCkuc2l6ZSgp
KTsKLQotICAgIHVpbnQ2NF90KiBidWZmZXIgPSBpbnN0YW5jZS0+Y29udGV4dCgpLT5zY3JhdGNo
QnVmZmVyRm9yU2l6ZShvc3JFbnRyeUNhbGxlZS5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkp
OwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gcmV0dXJuV2l0aG91dE9TUkVudHJ5
KCk7Ci0KLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIG9zckVudHJ5RGF0
YS5mdW5jdGlvbkluZGV4KCksICI6T01HIE9TUiBlbnRyeTogZ290IGVudHJ5IGNhbGxlZSAiLCBS
YXdQb2ludGVyKCZvc3JFbnRyeUNhbGxlZSkpOwotCi0gICAgLy8gMS4gUGxhY2UgcmVxdWlyZWQg
dmFsdWVzIGluIHNjcmF0Y2ggYnVmZmVyLgotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IG9zckVudHJ5RGF0YS52YWx1ZXMoKS5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAg
Y29uc3QgT1NSRW50cnlWYWx1ZSYgdmFsdWUgPSBvc3JFbnRyeURhdGEudmFsdWVzKClbaW5kZXhd
OworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHZhbHVlcy5zaXplKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgY29uc3QgT1NSRW50cnlWYWx1ZSYgdmFsdWUgPSB2YWx1ZXNbaW5k
ZXhdOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJPTUcgT1NS
IGVudHJ5IHZhbHVlc1siLCBpbmRleCwgIl0gIiwgdmFsdWUudHlwZSgpLCAiICIsIHZhbHVlKTsK
ICAgICAgICAgaWYgKHZhbHVlLmlzR1BSKCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUu
dHlwZSgpLmtpbmQoKSkgewpAQCAtMTY0LDIxICsxNTEsMjggQEAgc3RhdGljIHZvaWQgZG9PU1JF
bnRyeShJbnN0YW5jZSogaW5zdGFuY2UsIFByb2JlOjpDb250ZXh0JiBjb250ZXh0LCBCQlFDYWxs
ZWUmIGMKICAgICAgICAgICAgICAgICAqYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oYnVmZmVyICsg
aW5kZXgpID0gKmJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGJpdHdpc2VfY2FzdDx1aW50OF90Kj4o
Y29udGV4dC5mcCgpKSArIHZhbHVlLm9mZnNldEZyb21GUCgpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc1N0YWNrQXJn
dW1lbnQoKSkgewotICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKCkua2luZCgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIEIzOjpGbG9hdDoKLSAgICAgICAgICAgICAgICAqYml0d2lzZV9jYXN0
PGZsb2F0Kj4oYnVmZmVyICsgaW5kZXgpID0gKmJpdHdpc2VfY2FzdDxmbG9hdCo+KGJpdHdpc2Vf
Y2FzdDx1aW50OF90Kj4oY29udGV4dC5zcCgpKSArIHZhbHVlLm9mZnNldEZyb21TUCgpKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQjM6OkRvdWJsZToKLSAgICAg
ICAgICAgICAgICAqYml0d2lzZV9jYXN0PGRvdWJsZSo+KGJ1ZmZlciArIGluZGV4KSA9ICpiaXR3
aXNlX2Nhc3Q8ZG91YmxlKj4oYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb250ZXh0LnNwKCkpICsg
dmFsdWUub2Zmc2V0RnJvbVNQKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAqYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oYnVm
ZmVyICsgaW5kZXgpID0gKmJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGJpdHdpc2VfY2FzdDx1aW50
OF90Kj4oY29udGV4dC5zcCgpKSArIHZhbHVlLm9mZnNldEZyb21TUCgpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KK30KKworU1VQUFJFU1NfQVNBTgor
c3RhdGljIHZvaWQgZG9PU1JFbnRyeShJbnN0YW5jZSogaW5zdGFuY2UsIFByb2JlOjpDb250ZXh0
JiBjb250ZXh0LCBCQlFDYWxsZWUmIGNhbGxlZSwgT01HRm9yT1NSRW50cnlDYWxsZWUmIG9zckVu
dHJ5Q2FsbGVlLCBPU1JFbnRyeURhdGEmIG9zckVudHJ5RGF0YSkKK3sKKyAgICBhdXRvIHJldHVy
bldpdGhvdXRPU1JFbnRyeSA9IFsmXSB7CisgICAgICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFy
Z3VtZW50R1BSMCkgPSAwOworICAgIH07CisKKyAgICBSRUxFQVNFX0FTU0VSVChvc3JFbnRyeUNh
bGxlZS5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkgPT0gb3NyRW50cnlEYXRhLnZhbHVlcygp
LnNpemUoKSk7CisKKyAgICB1aW50NjRfdCogYnVmZmVyID0gaW5zdGFuY2UtPmNvbnRleHQoKS0+
c2NyYXRjaEJ1ZmZlckZvclNpemUob3NyRW50cnlDYWxsZWUub3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSgpKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJldHVybldpdGhvdXRP
U1JFbnRyeSgpOworCisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBvc3JF
bnRyeURhdGEuZnVuY3Rpb25JbmRleCgpLCAiOk9NRyBPU1IgZW50cnk6IGdvdCBlbnRyeSBjYWxs
ZWUgIiwgUmF3UG9pbnRlcigmb3NyRW50cnlDYWxsZWUpKTsKKworICAgIC8vIDEuIFBsYWNlIHJl
cXVpcmVkIHZhbHVlcyBpbiBzY3JhdGNoIGJ1ZmZlci4KKyAgICBsb2FkVmFsdWVzSW50b0J1ZmZl
cihjb250ZXh0LCBvc3JFbnRyeURhdGEudmFsdWVzKCksIGJ1ZmZlcik7CiAKICAgICAvLyAyLiBS
ZXN0b3JlIGNhbGxlZSBzYXZlcy4KICAgICBSZWdpc3RlclNldCBkb250UmVzdG9yZVJlZ2lzdGVy
cyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwpAQCAtNjU4LDEyICs2NTIsMTIgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdyb3dNZW1vcnksIGludDMyX3QsICh2
b2lkKiBjYWxsRnJhbWUsIEluc3RhbmMKICAgICByZXR1cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291
bnQoKTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlG
aWxsLCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50
MzJfdCB0YXJnZXRWYWx1ZSwgdWludDMyX3QgY291bnQpKQorSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbldhc21NZW1vcnlGaWxsLCBzaXplX3QsIChJbnN0YW5jZSogaW5zdGFuY2Us
IHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHRhcmdldFZhbHVlLCB1aW50MzJfdCBjb3Vu
dCkpCiB7CiAgICAgcmV0dXJuIGluc3RhbmNlLT5tZW1vcnkoKS0+ZmlsbChkc3RBZGRyZXNzLCBz
dGF0aWNfY2FzdDx1aW50OF90Pih0YXJnZXRWYWx1ZSksIGNvdW50KTsKIH0KIAotSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlDb3B5LCBib29sLCAoSW5zdGFuY2Uq
IGluc3RhbmNlLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1aW50
MzJfdCBjb3VudCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9y
eUNvcHksIHNpemVfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZHN0QWRkcmVzcywg
dWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgY291bnQpKQogewogICAgIHJldHVybiBpbnN0
YW5jZS0+bWVtb3J5KCktPmNvcHkoZHN0QWRkcmVzcywgc3JjQWRkcmVzcywgY291bnQpOwogfQpA
QCAtNzExLDEyICs3MDUsMTIgQEAgc3RhdGljIGJvb2wgc2V0V2FzbVRhYmxlRWxlbWVudChJbnN0
YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl8KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNldFdhc21UYWJs
ZUVsZW1lbnQsIGJvb2wsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIHRhYmxlSW5kZXgs
IHVpbnQzMl90IHNpZ25lZEluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNWYWx1ZSkpCitKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxlbWVudCwgc2l6ZV90LCAo
SW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBzaWduZWRJ
bmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jVmFsdWUpKQogewogICAgIHJldHVybiBzZXRXYXNtVGFi
bGVFbGVtZW50KGluc3RhbmNlLCB0YWJsZUluZGV4LCBzaWduZWRJbmRleCwgZW5jVmFsdWUpOwog
fQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlSW5pdCwgYm9v
bCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCB0
YWJsZUluZGV4LCB1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY09mZnNldCwgdWludDMy
X3QgbGVuZ3RoKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVJ
bml0LCBzaXplX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGVsZW1lbnRJbmRleCwg
dW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNPZmZz
ZXQsIHVpbnQzMl90IGxlbmd0aCkpCiB7CiAgICAgQVNTRVJUKGVsZW1lbnRJbmRleCA8IGluc3Rh
bmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLmVsZW1lbnRDb3VudCgpKTsKICAgICBB
U1NFUlQodGFibGVJbmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigp
LnRhYmxlQ291bnQoKSk7CkBAIC03NjEsNyArNzU1LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbldhc21UYWJsZUdyb3csIGludDMyX3QsIChJbnN0YW5jZSogaW5zdGFuY2Us
IHUKICAgICByZXR1cm4gb2xkU2l6ZTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbldhc21UYWJsZUZpbGwsIGJvb2wsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVk
IHRhYmxlSW5kZXgsIHVpbnQzMl90IG9mZnNldCwgRW5jb2RlZEpTVmFsdWUgZmlsbCwgdWludDMy
X3QgY291bnQpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUZp
bGwsIHNpemVfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWlu
dDMyX3Qgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSBmaWxsLCB1aW50MzJfdCBjb3VudCkpCiB7CiAg
ICAgQVNTRVJUKHRhYmxlSW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRp
b24oKS50YWJsZUNvdW50KCkpOwogCkBAIC03NzcsNyArNzcxLDcgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUZpbGwsIGJvb2wsIChJbnN0YW5jZSogaW5zdGFu
Y2UsIHVuc2kKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21UYWJsZUNvcHksIGJvb2wsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2ln
bmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsIGludDMyX3QgZHN0T2Zm
c2V0LCBpbnQzMl90IHNyY09mZnNldCwgaW50MzJfdCBsZW5ndGgpKQorSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUNvcHksIHNpemVfdCwgKEluc3RhbmNlKiBpbnN0
YW5jZSwgdW5zaWduZWQgZHN0VGFibGVJbmRleCwgdW5zaWduZWQgc3JjVGFibGVJbmRleCwgaW50
MzJfdCBkc3RPZmZzZXQsIGludDMyX3Qgc3JjT2Zmc2V0LCBpbnQzMl90IGxlbmd0aCkpCiB7CiAg
ICAgQVNTRVJUKGRzdFRhYmxlSW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3Jt
YXRpb24oKS50YWJsZUNvdW50KCkpOwogICAgIEFTU0VSVChzcmNUYWJsZUluZGV4IDwgaW5zdGFu
Y2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgpKTsKQEAgLTkwNCw3
ICs4OTgsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTWVtb3J5QXRvbWlj
Tm90aWZ5LCBpbnQzMl90LCAoSW5zdGFuY2UqIGluc3RhbgogICAgIHJldHVybiBQYXJraW5nTG90
Ojp1bnBhcmtDb3VudChwb2ludGVyLCBjb3VudCk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25XYXNtTWVtb3J5SW5pdCwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwg
dW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qg
c3JjQWRkcmVzcywgdWludDMyX3QgbGVuZ3RoKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25XYXNtTWVtb3J5SW5pdCwgc2l6ZV90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNp
Z25lZCBkYXRhU2VnbWVudEluZGV4LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNB
ZGRyZXNzLCB1aW50MzJfdCBsZW5ndGgpKQogewogICAgIEFTU0VSVChkYXRhU2VnbWVudEluZGV4
IDwgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkuZGF0YVNlZ21lbnRzQ291
bnQoKSk7CiAgICAgcmV0dXJuIGluc3RhbmNlLT5tZW1vcnlJbml0KGRzdEFkZHJlc3MsIHNyY0Fk
ZHJlc3MsIGxlbmd0aCwgZGF0YVNlZ21lbnRJbmRleCk7CkBAIC05MTYsNiArOTEwLDY1IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtRGF0YURyb3AsIHZvaWQsIChJbnN0
YW5jZSogaW5zdGFuY2UsIHVuc2lnCiAgICAgaW5zdGFuY2UtPmRhdGFEcm9wKGRhdGFTZWdtZW50
SW5kZXgpOwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRocm93
LCB2b2lkKiwgKEluc3RhbmNlKiBpbnN0YW5jZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2ln
bmVkIGV4Y2VwdGlvbkluZGV4LCBFbmNvZGVkSlNWYWx1ZSogYXJndW1lbnRzKSkKK3sKKyAgICBp
bnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKworICAgIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGluc3RhbmNlLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5z
dGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzSW5zdGFuY2Ut
Pmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGNvbnN0IFdh
c206OlRhZyYgdGFnID0gaW5zdGFuY2UtPnRhZyhleGNlcHRpb25JbmRleCk7CisKKyAgICBGaXhl
ZFZlY3Rvcjx1aW50NjRfdD4gdmFsdWVzKHRhZy5wYXJhbWV0ZXJDb3VudCgpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFnLnBhcmFtZXRlckNvdW50KCk7ICsraSkKKyAgICAgICAg
dmFsdWVzW2ldID0gYXJndW1lbnRzW2ldOworCisgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiog
ZXhjZXB0aW9uID0gSlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QtPndlYkFzc2VtYmx5RXhjZXB0aW9uU3RydWN0dXJlKCksIHRhZywgV1RGTW92ZSh2YWx1ZXMp
KTsKKyAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGV4Y2VwdGlv
bik7CisKKyAgICBnZW5lcmljVW53aW5kKHZtLCBjYWxsRnJhbWUpOworICAgIEFTU0VSVCghIXZt
LmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICBBU1NFUlQoISF2bS50YXJnZXRNYWNoaW5lUENGb3JU
aHJvdyk7CisgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8g
VGhpcyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGxs
aW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb24pCisgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4g
dGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBu
b3QgcmVxdWlyZQorICAgIC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0
YW50IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KKyAg
ICAvLyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2Fs
bCBmcmFtZSByZWdpc3RlciBiZWZvcmUganVtcGluZworICAgIC8vIHRvIHRoZSBleGNlcHRpb24g
aGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhh
Y2suCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0
MAorICAgIHZtLmNhbGxlZUZvcldhc21DYXRjaCA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAg
Yml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSldID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihqc0luc3RhbmNlLT5t
b2R1bGUoKSk7CisgICAgcmV0dXJuIHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93OworfQorCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVJldGhyb3csIHZvaWQqLCAoSW5z
dGFuY2UqIGluc3RhbmNlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRW5jb2RlZEpTVmFsdWUgdGhy
b3duVmFsdWUpKQoreworICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFtZShjYWxsRnJhbWUp
OworCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3RhbmNlID0gaW5zdGFuY2UtPm93
bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBKU1Zh
bHVlOjpkZWNvZGUodGhyb3duVmFsdWUpKTsKKworICAgIGdlbmVyaWNVbndpbmQodm0sIGNhbGxG
cmFtZSk7CisgICAgQVNTRVJUKCEhdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgIEFTU0VSVCgh
IXZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKKyAgICAvLyBGSVhNRTogV2UgY291bGQgbWFr
ZSB0aGlzIGJldHRlcjoKKyAgICAvLyBUaGlzIGlzIGEgdG90YWwgaGFjaywgYnV0IHRoZSBsbGlu
dCAoYm90aCBvcF9jYXRjaCBhbmQgbGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbikKKyAg
ICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVlIGZpZWxkIHRvIGxvYWQgdGhlIFZNLiAo
VGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJlCisgICAgLy8gdGhpcyBzaW5jZSBpdCBp
cyBjb21waWxlZCB3aXRoIGEgY29uc3RhbnQgVk0gcG9pbnRlci4pIFdlIGNvdWxkIG1ha2UgdGhl
IGNhbGxpbmcgY29udmVudGlvbgorICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0IGxvYWQgY2Fs
bEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5nCisg
ICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQg
cmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCisgICAgdm0uY2FsbGVlRm9yV2FzbUNhdGNoID0gY2Fs
bEZyYW1lLT5jYWxsZWUoKTsKKyAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihjYWxsRnJhbWUp
W3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KGpzSW5zdGFuY2UtPm1vZHVsZSgpKTsKKyAgICByZXR1cm4gdm0udGFyZ2V0TWFj
aGluZVBDRm9yVGhyb3c7Cit9CisKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25X
YXNtVG9KU0V4Y2VwdGlvbiwgdm9pZCosIChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6RXhj
ZXB0aW9uVHlwZSB0eXBlLCBJbnN0YW5jZSogd2FzbUluc3RhbmNlKSkKIHsKICAgICB3YXNtSW5z
dGFuY2UtPnN0b3JlVG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CkBAIC05MzIsNyArOTg1LDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uLCB2b2lk
KiwgKENhbGxGcmFtZSogY2FsbEZyYW0KICAgICAgICAgaWYgKHR5cGUgPT0gRXhjZXB0aW9uVHlw
ZTo6U3RhY2tPdmVyZmxvdykKICAgICAgICAgICAgIGVycm9yID0gY3JlYXRlU3RhY2tPdmVyZmxv
d0Vycm9yKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVycm9yID0g
Y3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBXYXNtOjpl
cnJvck1lc3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5cGUpKTsKKyAgICAgICAgICAgIGVycm9yID0g
Y3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCB0eXBlKTsK
ICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBlcnJvcik7
CiAgICAgfQogCkBAIC05NDYsMTAgKzk5OSwzNCBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24sIHZvaWQqLCAoQ2FsbEZyYW1lKiBjYWxsRnJhbQog
ICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBj
YWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5nCiAgICAgLy8gdG8gdGhlIGV4Y2VwdGlv
biBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUg
aGFjay4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcw
NDQwCisgICAgdm0uY2FsbGVlRm9yV2FzbUNhdGNoID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKICAg
ICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihjYWxsRnJhbWUpW3N0YXRpY19jYXN0PGludD4oQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGluc3RhbmNlLT5t
b2R1bGUoKSk7CiAgICAgcmV0dXJuIHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93OwogfQogCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVJldHJpZXZlQW5kQ2xlYXJFeGNl
cHRpb25JZkNhdGNoYWJsZSwgUG9pbnRlclBhaXIsIChJbnN0YW5jZSogaW5zdGFuY2UpKQorewor
ICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGluc3RhbmNlLT5vd25lcjxK
U1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIFJFTEVBU0VfQVNTRVJUKCEhdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisKKyAgICBF
eGNlcHRpb24qIGV4Y2VwdGlvbiA9IHRocm93U2NvcGUuZXhjZXB0aW9uKCk7CisgICAgSlNWYWx1
ZSB0aHJvd25WYWx1ZSA9IGV4Y2VwdGlvbi0+dmFsdWUoKTsKKworICAgIC8vIFdlIHdhbnQgdG8g
Y2xlYXIgdGhlIGV4Y2VwdGlvbiBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBjYXRjaCBwcm9sb2d1
ZQorICAgIC8vIEpJVCBjb2RlIGJlY2F1c2UgY2xlYXJpbmcgaXQgYWxzbyBlbnRhaWxzIGNsZWFy
aW5nIGEgYml0IGluIGFuIEF0b21pYworICAgIC8vIGJpdCBmaWVsZCBpbiBWTVRyYXBzLgorICAg
IHRocm93U2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKworICAgIHZvaWQqIHBheWxvYWQgPSBudWxs
cHRyOworICAgIGlmIChKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiB3YXNtRXhjZXB0aW9uID0ganNE
eW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKj4odm0sIHRocm93blZhbHVlKSkKKyAg
ICAgICAgcGF5bG9hZCA9IGJpdHdpc2VfY2FzdDx2b2lkKj4od2FzbUV4Y2VwdGlvbi0+cGF5bG9h
ZCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIFBvaW50ZXJQYWlyIHsgYml0d2lzZV9jYXN0PHZvaWQq
PihKU1ZhbHVlOjplbmNvZGUodGhyb3duVmFsdWUpKSwgcGF5bG9hZCB9OworfQorCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQogCiBJR05PUkVfV0FSTklOR1NfRU5ECmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaAppbmRleCBlZWJlNWI3NjRiYTg5NzhjOTQ0
MmViNTE4MjgxMDg3MmM2NzI0Y2E0Li41ZWM3YTU5NDdjYzczOGMzYjJiOWJiMjVkN2U1YTYwOGYx
YjI2ZWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0
aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmgK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiU2xv
d1BhdGhSZXR1cm5UeXBlLmgiCiAjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKyNpbmNs
dWRlICJXYXNtT1NSRW50cnlEYXRhLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00Niw2ICs0
Nyw4IEBAIG5hbWVzcGFjZSBXYXNtIHsKIGNsYXNzIEluc3RhbmNlOwogY2xhc3MgU2lnbmF0dXJl
OwogCit2b2lkIGxvYWRWYWx1ZXNJbnRvQnVmZmVyKFByb2JlOjpDb250ZXh0JiwgY29uc3QgU3Rh
Y2tNYXAmLCB1aW50NjRfdCogYnVmZmVyKTsKKwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJ
VCkKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRyaWdnZXJPU1JFbnRy
eU5vdywgdm9pZCwgKFByb2JlOjpDb250ZXh0JikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtVHJpZ2dlclRpZXJVcE5vdywgdm9pZCwgKEluc3RhbmNlKiwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCkpOwpAQCAtNjYsMjYgKzY5LDM0IEBAIEpTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uV2FzbVdyaXRlQmFycmllclNsb3dQYXRoLCB2b2lkLCAoSlNDZWxs
KiwgVk0qCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblBvcGNvdW50MzIsIHVp
bnQzMl90LCAoaW50MzJfdCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
b3Bjb3VudDY0LCB1aW50NjRfdCwgKGludDY0X3QpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uR3Jvd01lbW9yeSwgaW50MzJfdCwgKHZvaWQqLCBJbnN0YW5jZSosIGludDMy
X3QpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUZpbGws
IGJvb2wsIChJbnN0YW5jZSosIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHRhcmdldFZh
bHVlLCB1aW50MzJfdCBjb3VudCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtTWVtb3J5Q29weSwgYm9vbCwgKEluc3RhbmNlKiwgdWludDMyX3QgZHN0QWRkcmVzcywg
dWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgY291bnQpKTsKK0pTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUZpbGwsIHNpemVfdCwgKEluc3RhbmNlKiwgdWlu
dDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFsdWUsIHVpbnQzMl90IGNvdW50KSk7
CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlDb3B5LCBzaXpl
X3QsIChJbnN0YW5jZSosIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3Ms
IHVpbnQzMl90IGNvdW50KSk7CiAKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
R2V0V2FzbVRhYmxlRWxlbWVudCwgRW5jb2RlZEpTVmFsdWUsIChJbnN0YW5jZSosIHVuc2lnbmVk
LCBpbnQzMl90KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNldFdhc21U
YWJsZUVsZW1lbnQsIGJvb2wsIChJbnN0YW5jZSosIHVuc2lnbmVkLCB1aW50MzJfdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jVmFsdWUpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
U2V0V2FzbVRhYmxlRWxlbWVudCwgc2l6ZV90LCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgdWludDMy
X3QsIEVuY29kZWRKU1ZhbHVlIGVuY1ZhbHVlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21SZWZGdW5jLCBFbmNvZGVkSlNWYWx1ZSwgKEluc3RhbmNlKiwgdWludDMy
X3QpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlSW5pdCwg
Ym9vbCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCB0YWJsZUlu
ZGV4LCB1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY09mZnNldCwgdWludDMyX3QgbGVu
Z3RoKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUluaXQs
IHNpemVfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCB0YWJs
ZUluZGV4LCB1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY09mZnNldCwgdWludDMyX3Qg
bGVuZ3RoKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21FbGVtRHJv
cCwgdm9pZCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZWxlbWVudEluZGV4KSk7CiBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUdyb3csIGludDMyX3QsIChJbnN0YW5j
ZSosIHVuc2lnbmVkLCBFbmNvZGVkSlNWYWx1ZSBmaWxsLCB1aW50MzJfdCBkZWx0YSkpOwotSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVGaWxsLCBib29sLCAoSW5z
dGFuY2UqLCB1bnNpZ25lZCwgdWludDMyX3Qgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSBmaWxsLCB1
aW50MzJfdCBjb3VudCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNt
VGFibGVDb3B5LCBib29sLCAoSW5zdGFuY2UqLCB1bnNpZ25lZCBkc3RUYWJsZUluZGV4LCB1bnNp
Z25lZCBzcmNUYWJsZUluZGV4LCBpbnQzMl90IGRzdE9mZnNldCwgaW50MzJfdCBzcmNPZmZzZXQs
IGludDMyX3QgbGVuZ3RoKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldh
c21UYWJsZUZpbGwsIHNpemVfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQsIHVpbnQzMl90IG9mZnNl
dCwgRW5jb2RlZEpTVmFsdWUgZmlsbCwgdWludDMyX3QgY291bnQpKTsKK0pTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlQ29weSwgc2l6ZV90LCAoSW5zdGFuY2UqLCB1
bnNpZ25lZCBkc3RUYWJsZUluZGV4LCB1bnNpZ25lZCBzcmNUYWJsZUluZGV4LCBpbnQzMl90IGRz
dE9mZnNldCwgaW50MzJfdCBzcmNPZmZzZXQsIGludDMyX3QgbGVuZ3RoKSk7CiBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFdhc21UYWJsZVNpemUsIGludDMyX3QsIChJbnN0
YW5jZSosIHVuc2lnbmVkKSk7CiAKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
TWVtb3J5QXRvbWljV2FpdDMyLCBpbnQzMl90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25l
ZCBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBpbnQ2NF90IHRpbWVvdXQp
KTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTWVtb3J5QXRvbWljV2FpdDY0
LCBpbnQzMl90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBiYXNlLCB1bnNpZ25lZCBv
ZmZzZXQsIHVpbnQ2NF90IHZhbHVlLCBpbnQ2NF90IHRpbWVvdXQpKTsKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uTWVtb3J5QXRvbWljTm90aWZ5LCBpbnQzMl90LCAoSW5zdGFu
Y2UqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGludDMyX3QpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUluaXQsIGJvb2wsIChJbnN0YW5jZSosIHVuc2lnbmVk
IGRhdGFTZWdtZW50SW5kZXgsIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJl
c3MsIHVpbnQzMl90IGxlbmd0aCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtTWVtb3J5SW5pdCwgc2l6ZV90LCAoSW5zdGFuY2UqLCB1bnNpZ25lZCBkYXRhU2VnbWVu
dEluZGV4LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1aW50MzJf
dCBsZW5ndGgpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbURhdGFE
cm9wLCB2b2lkLCAoSW5zdGFuY2UqLCB1bnNpZ25lZCBkYXRhU2VnbWVudEluZGV4KSk7CiAKK0pT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRocm93LCB2b2lkKiwgKEluc3Rh
bmNlKiwgQ2FsbEZyYW1lKiwgdW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIEVuY29kZWRKU1ZhbHVl
KikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0aHJvdywgdm9p
ZCosIChJbnN0YW5jZSosIENhbGxGcmFtZSosIEVuY29kZWRKU1ZhbHVlIHRocm93blZhbHVlKSk7
CisKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24s
IHZvaWQqLCAoQ2FsbEZyYW1lKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgSW5zdGFuY2UqKSk7Citz
dHJ1Y3QgUG9pbnRlclBhaXIgeworICAgIHZvaWQqIGZpcnN0OworICAgIHZvaWQqIHNlY29uZDsK
K307CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZXRyaWV2ZUFuZENs
ZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsIFBvaW50ZXJQYWlyLCAoSW5zdGFuY2UqKSk7CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcAppbmRleCAwZjhjY2I3ZTJjM2I2NDExNjM1Y2Q5ZjVi
MDQ4YjM1NjMyMDVmYTc0Li5jZmRhZmZkZDdhNDJjYzgxZTViYTNhNjFlNGJhZThlZjVlY2JkM2Jh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIu
Y3BwCkBAIC05MSw2ICs5MSw4IEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQoKSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5nbG9iYWxz
LnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2gg
bWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBnbG9iYWxzIik7IC8vIEZJWE1FIHRoaXMgb3Zl
ci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFtX2luZm8tPmltcG9ydHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50
KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGlt
cG9ydHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklY
TUVzIGJlbG93LgogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0RnVuY3Rp
b25TaWduYXR1cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4n
dCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnQgZnVu
Y3Rpb24gc2lnbmF0dXJlcyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2Ug
Zml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhj
ZXB0aW9ucygpKQorICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmltcG9ydEV4
Y2VwdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwg
ImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9y
dCBleGNlcHRpb24gc2lnbmF0dXJlcyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdo
ZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCiAKICAgICBmb3IgKHVpbnQzMl90IGltcG9ydE51
bWJlciA9IDA7IGltcG9ydE51bWJlciA8IGltcG9ydENvdW50OyArK2ltcG9ydE51bWJlcikgewog
ICAgICAgICB1aW50MzJfdCBtb2R1bGVMZW47CkBAIC0xNDIsNiArMTQ0LDIxIEBAIGF1dG8gU2Vj
dGlvblBhcnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgICAgICBt
X2luZm8tPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6RXhjZXB0
aW9uOiB7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJB
c3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsK
KworICAgICAgICAgICAgdWludDhfdCB0YWdUeXBlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VVSW50OCh0YWdUeXBlKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIs
ICJ0aCBJbXBvcnQgZXhjZXB0aW9uJ3MgdGFnIHR5cGUiKTsKKyAgICAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYodGFnVHlwZSwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0IGV4Y2VwdGlvbiBo
YXMgdGFnIHR5cGUgIiwgdGFnVHlwZSwgIiBidXQgdGhlIG9ubHkgc3VwcG9ydGVkIHRhZyB0eXBl
IGlzIDAiKTsKKworICAgICAgICAgICAgdWludDMyX3QgZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXg7
CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleGNlcHRp
b25TaWduYXR1cmVJbmRleCksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0
J3MgZXhjZXB0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmll
bGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihleGNlcHRpb25TaWduYXR1cmVJbmRleCA+PSBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnNpemUo
KSwgImludmFsaWQgZXhjZXB0aW9uIHNpZ25hdHVyZSBmb3IgIiwgaW1wb3J0TnVtYmVyLCAidGgg
SW1wb3J0LCAiLCBleGNlcHRpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2Yg
IiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVT
dHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIGtpbmRJ
bmRleCA9IG1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7Cisg
ICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9y
bWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1tleGNlcHRpb25TaWduYXR1cmVJbmRl
eF0pOworICAgICAgICAgICAgbV9pbmZvLT5pbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2Vz
LnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgbV9pbmZvLT5pbXBvcnRzLnVuY2hlY2tlZEFw
cGVuZCh7IFdURk1vdmUobW9kdWxlU3RyaW5nKSwgV1RGTW92ZShmaWVsZFN0cmluZyksIGtpbmQs
IGtpbmRJbmRleCB9KTsKQEAgLTM1OCw2ICszNzUsMTMgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpw
YXJzZUV4cG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgICAgICAgICBnbG9iYWwuYmlu
ZGluZ01vZGUgPSBHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkV4
Y2VwdGlvbjogeworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNl
V2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVk
Iik7CisKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5m
by0+ZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhh
cyBpbnZhbGlkIGV4Y2VwdGlvbiBudW1iZXIgIiwga2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhl
IGV4Y2VwdGlvbiBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmV4Y2VwdGlvbkluZGV4U3BhY2VTaXpl
KCksICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIG1faW5mby0+
YWRkRGVjbGFyZWRFeGNlcHRpb24oa2luZEluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBtX2luZm8tPmV4cG9ydHMudW5jaGVja2VkQXBw
ZW5kKHsgV1RGTW92ZShmaWVsZFN0cmluZyksIGtpbmQsIGtpbmRJbmRleCB9KTsKQEAgLTgxNyw2
ICs4NDEsMjkgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZURhdGFDb3VudCgpIC0+IFBhcnRp
YWxSZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNl
RXhjZXB0aW9uKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFy
ZSBub3QgZW5hYmxlZCIpOworCisgICAgdWludDMyX3QgZXhjZXB0aW9uQ291bnQ7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhjZXB0aW9uQ291bnQpLCAiY2FuJ3Qg
Z2V0IEV4Y2VwdGlvbiBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGV4Y2VwdGlvbkNvdW50ID4gbWF4RXhjZXB0aW9ucywgIkV4cG9ydCBzZWN0aW9uJ3MgY291bnQg
aXMgdG9vIGJpZyAiLCBleGNlcHRpb25Db3VudCwgIiBtYXhpbXVtICIsIG1heEV4Y2VwdGlvbnMp
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW50ZXJuYWxFeGNlcHRpb25TaWdu
YXR1cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShleGNlcHRpb25Db3VudCksICJjYW4ndCBh
bGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBleGNlcHRpb25Db3VudCwgIiBleGNlcHRpb25z
Iik7CisKKyAgICBmb3IgKHVpbnQzMl90IGV4Y2VwdGlvbk51bWJlciA9IDA7IGV4Y2VwdGlvbk51
bWJlciA8IGV4Y2VwdGlvbkNvdW50OyArK2V4Y2VwdGlvbk51bWJlcikgeworICAgICAgICB1aW50
OF90IHRhZ1R5cGU7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgodGFn
VHlwZSksICJjYW4ndCBnZXQgIiwgZXhjZXB0aW9uTnVtYmVyLCAidGggRXhjZXB0aW9uIHRhZyB0
eXBlIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFnVHlwZSwgZXhjZXB0aW9uTnVt
YmVyLCAidGggRXhjZXB0aW9uIGhhcyB0YWcgdHlwZSAiLCB0YWdUeXBlLCAiIGJ1dCB0aGUgb25s
eSBzdXBwb3J0ZWQgdGFnIHR5cGUgaXMgMCIpOworCisgICAgICAgIHVpbnQzMl90IHR5cGVOdW1i
ZXI7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHR5cGVOdW1i
ZXIpLCAiY2FuJ3QgZ2V0ICIsIGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2VwdGlvbidzIHR5cGUg
bnVtYmVyIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZU51bWJlciA+PSBtX2lu
Zm8tPnVzZWRTaWduYXR1cmVzLnNpemUoKSwgZXhjZXB0aW9uTnVtYmVyLCAidGggRXhjZXB0aW9u
IHR5cGUgbnVtYmVyIGlzIGludmFsaWQgIiwgdHlwZU51bWJlcik7CisgICAgICAgIFNpZ25hdHVy
ZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8t
PnVzZWRTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKKyAgICAgICAgbV9pbmZvLT5pbnRlcm5hbEV4
Y2VwdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsK
KyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQogYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUN1
c3RvbSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBDdXN0b21TZWN0aW9uIHNlY3Rpb247CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oCmluZGV4IGYzNjllN2I4NmNh
ZmE5M2FkM2Y4M2FkNjBjYTA4N2M4ZjU4ODBlY2EuLmJlZjIwNzAxZjQwZmU0MGI0YTI4YTBhZGNm
YzQ3ZjZiZjBkNWJmZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TZWN0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9u
cy5oCkBAIC00NSw3ICs0NSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAg
ICAgbWFjcm8oRWxlbWVudCwgICAgOSwgIkVsZW1lbnRzIHNlY3Rpb24iKSBcCiAgICAgbWFjcm8o
Q29kZSwgICAgICAxMCwgIkZ1bmN0aW9uIGJvZGllcyAoY29kZSkiKSBcCiAgICAgbWFjcm8oRGF0
YSwgICAgICAxMSwgIkRhdGEgc2VnbWVudHMiKSBcCi0gICAgbWFjcm8oRGF0YUNvdW50LCAxMiwg
IkRhdGEgY291bnQiKQorICAgIG1hY3JvKERhdGFDb3VudCwgMTIsICJEYXRhIGNvdW50IikgXAor
ICAgIG1hY3JvKEV4Y2VwdGlvbiwgMTMsICJFeGNlcHRpb24gZGVjbGFyYXRpb25zIikgXAogCiBl
bnVtIGNsYXNzIFNlY3Rpb24gOiB1aW50OF90IHsKICAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0
IEJlZ2luIGlzIGxlc3MgdGhhbiBldmVyeSBvdGhlciBzZWN0aW9uIG51bWJlciBhbmQgdGhhdCBD
dXN0b20gaXMgZ3JlYXRlci4KQEAgLTkwLDYgKzkxLDEwIEBAIGlubGluZSBib29sIHZhbGlkYXRl
T3JkZXIoU2VjdGlvbiBwcmV2aW91c0tub3duLCBTZWN0aW9uIG5leHQpCiAgICAgQVNTRVJUKGlz
S25vd25TZWN0aW9uKHByZXZpb3VzS25vd24pIHx8IHByZXZpb3VzS25vd24gPT0gU2VjdGlvbjo6
QmVnaW4pOwogICAgIGlmIChwcmV2aW91c0tub3duID09IFNlY3Rpb246OkRhdGFDb3VudCAmJiBu
ZXh0ID09IFNlY3Rpb246OkNvZGUpCiAgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChwcmV2
aW91c0tub3duID09IFNlY3Rpb246OkV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIG5leHQgPj0g
U2VjdGlvbjo6R2xvYmFsOworICAgIGlmIChuZXh0ID09IFNlY3Rpb246OkV4Y2VwdGlvbikKKyAg
ICAgICAgcmV0dXJuIHByZXZpb3VzS25vd24gPD0gU2VjdGlvbjo6TWVtb3J5OwogICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1aW50OF90PihwcmV2aW91c0tub3duKSA8IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KG5leHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2lnbmF0dXJlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1
cmUuY3BwCmluZGV4IDcxYWFiM2RmNzU3MjJkNDA4YzUxOGMxM2Y1Mzg1YzNhZjlhNDgwMDYuLmY5
YTU2MWI4NTBmYzVjMTkzOWQwZWY1OWU4YTlmZDJiNjA1OTc4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwCkBAIC05Niw3ICs5Niw3IEBAIFJlZlB0
cjxTaWduYXR1cmU+IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlKFNpZ25hdHVyZUFyZ0NvdW50IHJldHVy
bkNvdW50LCBTaWduYXR1cmVBCiAKIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWduYXR1cmVJbmZv
cm1hdGlvbigpCiB7Ci0jZGVmaW5lIE1BS0VfVEhVTktfU0lHTkFUVVJFKHR5cGUsIGVuYywgc3Ry
LCB2YWwpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIE1BS0VfVEhVTktfU0lH
TkFUVVJFKHR5cGUsIGVuYywgc3RyLCB2YWwsIF8pICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChUeXBlS2luZDo6dHlwZSAhPSBUeXBlS2lu
ZDo6Vm9pZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBSZWZQ
dHI8U2lnbmF0dXJlPiBzaWcgPSBTaWduYXR1cmU6OnRyeUNyZWF0ZSgxLCAwKTsgICAgICAgICAg
ICBcCkBAIC0xNjUsNiArMTY1LDEwIEBAIHN0cnVjdCBQYXJhbWV0ZXJUeXBlcyB7CiAKIFJlZlB0
cjxTaWduYXR1cmU+IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpzaWduYXR1cmVGb3IoY29uc3QgVmVj
dG9yPFR5cGUsIDE+JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3MpCiB7CisgICAg
aWYgY29uc3RleHByIChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdHMu
Y29udGFpbnMoV2FzbTo6VHlwZXM6OlZvaWQpKTsKKyAgICAgICAgQVNTRVJUKCFhcmdzLmNvbnRh
aW5zKFdhc206OlR5cGVzOjpWb2lkKSk7CisgICAgfQogICAgIFNpZ25hdHVyZUluZm9ybWF0aW9u
JiBpbmZvID0gc2luZ2xldG9uKCk7CiAgICAgTG9ja2VyIGxvY2tlciB7IGluZm8ubV9sb2NrIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKaW5kZXgg
ZDlmYWY1ZDU5ZDk5ZjVlOTA0YzNhN2IyNDAwN2QwOTFmZDFkOWMxNy4uYWQ1MTM1ZTdhZDY1Nzhj
Mzk3NjFiZDdkM2I1NjhhMGZkMmJmNjA2MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNsb3dQYXRocy5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKKyNpbmNsdWRlICJKSVRFeGNl
cHRpb25zLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1
ZGUgIldhc21CQlFQbGFuLmgiCkBAIC01ODYsNiArNTg4LDExMSBAQCBXQVNNX1NMT1dfUEFUSF9E
RUNMKG1lbW9yeV9hdG9taWNfbm90aWZ5KQogICAgIFdBU01fUkVUVVJOKHJlc3VsdCk7CiB9CiAK
K1dBU01fU0xPV19QQVRIX0RFQ0wodGhyb3cpCit7CisgICAgaW5zdGFuY2UtPnN0b3JlVG9wQ2Fs
bEZyYW1lKGNhbGxGcmFtZSk7CisKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFu
Y2UgPSBpbnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOworICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvIGluc3RydWN0aW9uID0gcGMtPmFzPFdh
c21UaHJvdywgV2FzbU9wY29kZVRyYWl0cz4oKTsKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRhZyA9
IGluc3RhbmNlLT50YWcoaW5zdHJ1Y3Rpb24ubV9leGNlcHRpb25JbmRleCk7CisKKyAgICBGaXhl
ZFZlY3Rvcjx1aW50NjRfdD4gdmFsdWVzKHRhZy5wYXJhbWV0ZXJDb3VudCgpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFnLnBhcmFtZXRlckNvdW50KCk7ICsraSkKKyAgICAgICAg
dmFsdWVzW2ldID0gUkVBRCgoaW5zdHJ1Y3Rpb24ubV9maXJzdFZhbHVlIC0gaSkpLmVuY29kZWRK
U1ZhbHVlKCk7CisKKyAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBleGNlcHRpb24gPSBKU1dl
YkFzc2VtYmx5RXhjZXB0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlF
eGNlcHRpb25TdHJ1Y3R1cmUoKSwgdGFnLCBXVEZNb3ZlKHZhbHVlcykpOworICAgIHRocm93RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZXhjZXB0aW9uKTsKKworICAgIGdlbmVy
aWNVbndpbmQodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKCEhdm0uY2FsbEZyYW1lRm9yQ2F0
Y2gpOworICAgIEFTU0VSVCghIXZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKKyAgICAvLyBG
SVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKKyAgICAvLyBUaGlzIGlzIGEgdG90YWwg
aGFjaywgYnV0IHRoZSBsbGludCAoYm90aCBvcF9jYXRjaCBhbmQgbGxpbnRfaGFuZGxlX3VuY2F1
Z2h0X2V4Y2VwdGlvbikKKyAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVlIGZpZWxk
IHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJlCisgICAg
Ly8gdGhpcyBzaW5jZSBpdCBpcyBjb21waWxlZCB3aXRoIGEgY29uc3RhbnQgVk0gcG9pbnRlci4p
IFdlIGNvdWxkIG1ha2UgdGhlIGNhbGxpbmcgY29udmVudGlvbgorICAgIC8vIGZvciBleGNlcHRp
b25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVy
IGJlZm9yZSBqdW1waW5nCisgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBk
aWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4KKyAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCisgICAgdm0uY2FsbGVl
Rm9yV2FzbUNhdGNoID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKKyAgICBiaXR3aXNlX2Nhc3Q8dWlu
dDY0X3QqPihjYWxsRnJhbWUpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGpzSW5zdGFuY2UtPm1vZHVsZSgpKTsKKyAgICBX
QVNNX1JFVFVSTl9UV08odm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3csIG51bGxwdHIpOworfQor
CitXQVNNX1NMT1dfUEFUSF9ERUNMKHJldGhyb3cpCit7CisgICAgaW5zdGFuY2UtPnN0b3JlVG9w
Q2FsbEZyYW1lKGNhbGxGcmFtZSk7CisKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5z
dGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOworICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvIGluc3RydWN0aW9uID0gcGMtPmFz
PFdhc21SZXRocm93LCBXYXNtT3Bjb2RlVHJhaXRzPigpOworICAgIEpTVmFsdWUgZXhjZXB0aW9u
ID0gUkVBRChpbnN0cnVjdGlvbi5tX2V4Y2VwdGlvbikuanNWYWx1ZSgpOworICAgIHRocm93RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZXhjZXB0aW9uKTsKKworICAgIGdlbmVy
aWNVbndpbmQodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKCEhdm0uY2FsbEZyYW1lRm9yQ2F0
Y2gpOworICAgIEFTU0VSVCghIXZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKKyAgICAvLyBG
SVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKKyAgICAvLyBUaGlzIGlzIGEgdG90YWwg
aGFjaywgYnV0IHRoZSBsbGludCAoYm90aCBvcF9jYXRjaCBhbmQgbGxpbnRfaGFuZGxlX3VuY2F1
Z2h0X2V4Y2VwdGlvbikKKyAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVlIGZpZWxk
IHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJlCisgICAg
Ly8gdGhpcyBzaW5jZSBpdCBpcyBjb21waWxlZCB3aXRoIGEgY29uc3RhbnQgVk0gcG9pbnRlci4p
IFdlIGNvdWxkIG1ha2UgdGhlIGNhbGxpbmcgY29udmVudGlvbgorICAgIC8vIGZvciBleGNlcHRp
b25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVy
IGJlZm9yZSBqdW1waW5nCisgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBk
aWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4KKyAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCisgICAgdm0uY2FsbGVl
Rm9yV2FzbUNhdGNoID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKKyAgICBiaXR3aXNlX2Nhc3Q8dWlu
dDY0X3QqPihjYWxsRnJhbWUpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGpzSW5zdGFuY2UtPm1vZHVsZSgpKTsKKyAgICBX
QVNNX1JFVFVSTl9UV08odm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3csIG51bGxwdHIpOworfQor
CitXQVNNX1NMT1dfUEFUSF9ERUNMKHJldHJpZXZlX2FuZF9jbGVhcl9leGNlcHRpb24pCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBq
c0luc3RhbmNlID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0
KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgUkVMRUFTRV9BU1NFUlQoISF0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKTsKKworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gdGhyb3dT
Y29wZS5leGNlcHRpb24oKTsKKyAgICBKU1ZhbHVlIHRocm93blZhbHVlID0gZXhjZXB0aW9uLT52
YWx1ZSgpOworICAgIHZvaWQqIHBheWxvYWQgPSBudWxscHRyOworCisgICAgY29uc3QgYXV0byYg
aGFuZGxlQ2F0Y2hBbGwgPSBbJl0oY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24pIHsKKyAgICAgICAg
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGluc3RydWN0aW9uLm1fZXhjZXB0aW9uKSA9IHRocm93blZh
bHVlOworICAgIH07CisKKyAgICBjb25zdCBhdXRvJiBoYW5kbGVDYXRjaCA9IFsmXShjb25zdCBh
dXRvJiBpbnN0cnVjdGlvbikgeworICAgICAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiB3YXNt
RXhjZXB0aW9uID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKj4odm0sIHRo
cm93blZhbHVlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoISF3YXNtRXhjZXB0aW9uKTsKKyAg
ICAgICAgcGF5bG9hZCA9IGJpdHdpc2VfY2FzdDx2b2lkKj4od2FzbUV4Y2VwdGlvbi0+cGF5bG9h
ZCgpLmRhdGEoKSk7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihpbnN0cnVjdGlvbi5t
X2V4Y2VwdGlvbikgPSB0aHJvd25WYWx1ZTsKKyAgICB9OworCisgICAgaWYgKHBjLT5pczxXYXNt
Q2F0Y2gsIFdhc21PcGNvZGVUcmFpdHM+KCkpCisgICAgICAgIGhhbmRsZUNhdGNoKHBjLT5hczxX
YXNtQ2F0Y2gsIFdhc21PcGNvZGVUcmFpdHM+KCkpOworICAgIGVsc2UgaWYgKHBjLT5pczxXYXNt
Q2F0Y2hBbGwsIFdhc21PcGNvZGVUcmFpdHM+KCkpCisgICAgICAgIGhhbmRsZUNhdGNoQWxsKHBj
LT5hczxXYXNtQ2F0Y2hBbGwsIFdhc21PcGNvZGVUcmFpdHM+KCkpOworICAgIGVsc2UgaWYgKHBj
LT5pczxXYXNtQ2F0Y2hOb1RscywgV2FzbU9wY29kZVRyYWl0cz4oKSkKKyAgICAgICAgaGFuZGxl
Q2F0Y2gocGMtPmFzPFdhc21DYXRjaE5vVGxzLCBXYXNtT3Bjb2RlVHJhaXRzPigpKTsKKyAgICBl
bHNlIGlmIChwYy0+aXM8V2FzbUNhdGNoQWxsTm9UbHMsIFdhc21PcGNvZGVUcmFpdHM+KCkpCisg
ICAgICAgIGhhbmRsZUNhdGNoQWxsKHBjLT5hczxXYXNtQ2F0Y2hBbGxOb1RscywgV2FzbU9wY29k
ZVRyYWl0cz4oKSk7CisgICAgZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworCisgICAgLy8gV2Ugd2FudCB0byBjbGVhciB0aGUgZXhjZXB0aW9uIGhlcmUgcmF0aGVy
IHRoYW4gaW4gdGhlIGNhdGNoIHByb2xvZ3VlCisgICAgLy8gSklUIGNvZGUgYmVjYXVzZSBjbGVh
cmluZyBpdCBhbHNvIGVudGFpbHMgY2xlYXJpbmcgYSBiaXQgaW4gYW4gQXRvbWljCisgICAgLy8g
Yml0IGZpZWxkIGluIFZNVHJhcHMuCisgICAgdGhyb3dTY29wZS5jbGVhckV4Y2VwdGlvbigpOwor
ICAgIFdBU01fUkVUVVJOX1RXTyhwYywgcGF5bG9hZCk7Cit9CisKIGV4dGVybiAiQyIgU2xvd1Bh
dGhSZXR1cm5UeXBlIHNsb3dfcGF0aF93YXNtX3Rocm93X2V4Y2VwdGlvbihDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2Us
IFdhc206OkV4Y2VwdGlvblR5cGUgZXhjZXB0aW9uVHlwZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
cGMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRo
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5oCmluZGV4IDc3
NjIxMTgzMzhhN2I3MDY5NjliMjViNTJjZTE2ZTJjM2RjN2JkNGUuLmI2NGNlN2NkZTQxYWFhMDY4
OTdlOGZmZmVkODJhOGQwNjQzMmRmZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2xvd1BhdGhzLmgKQEAgLTgzLDYgKzgzLDkgQEAgV0FTTV9TTE9XX1BBVEhfSElEREVOX0RF
Q0woc2V0X2dsb2JhbF9yZWZfcG9ydGFibGVfYmluZGluZyk7CiBXQVNNX1NMT1dfUEFUSF9ISURE
RU5fREVDTChtZW1vcnlfYXRvbWljX3dhaXQzMik7CiBXQVNNX1NMT1dfUEFUSF9ISURERU5fREVD
TChtZW1vcnlfYXRvbWljX3dhaXQ2NCk7CiBXQVNNX1NMT1dfUEFUSF9ISURERU5fREVDTChtZW1v
cnlfYXRvbWljX25vdGlmeSk7CitXQVNNX1NMT1dfUEFUSF9ISURERU5fREVDTCh0aHJvdyk7CitX
QVNNX1NMT1dfUEFUSF9ISURERU5fREVDTChyZXRocm93KTsKK1dBU01fU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHJldHJpZXZlX2FuZF9jbGVhcl9leGNlcHRpb24pOwogCiBleHRlcm4gIkMiIFNsb3dQ
YXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24oQ2FsbEZyYW1lKiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OkV4Y2Vw
dGlvblR5cGUpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOwogZXh0ZXJuICJDIiBT
bG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX3dhc21fcG9wY291bnQoY29uc3QgSW5zdHJ1Y3Rp
b24qIHBjLCB1aW50MzJfdCkgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCmlu
ZGV4IGZhNTUyZWZmZjE3NDFlY2I1YTRiNmMyZjg5ZmNhMDk3NTllZTMxNWQuLjEyY2RhYTk2NWVh
OThiYTE4YWMyNzE2ZGNjNzZlODI3MDg1MDIxMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCkBAIC0xMTcsNiArMTE3LDcgQEAg
YXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rpb25TaXplKHVpbnQzMl90IGZ1bmN0
aW9uQ291bnQpIC0+IFN0YXRlCiAgICAgbV9mdW5jdGlvbkNvdW50ID0gZnVuY3Rpb25Db3VudDsK
ICAgICBtX2Z1bmN0aW9uSW5kZXggPSAwOwogICAgIG1fY29kZU9mZnNldCA9IG1fb2Zmc2V0Owor
ICAgIG1faW5mby0+bV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLmVuc3VyZVNpemUoZnVu
Y3Rpb25Db3VudCk7CiAKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uQ291bnQgPT0g
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiQ29kZSBzZWN0aW9uJ3MgY291
bnQgaXMgdG9vIGJpZyAiLCBmdW5jdGlvbkNvdW50KTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGZ1bmN0aW9uQ291bnQgIT0gbV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgpLCAiQ29kZSBzZWN0aW9u
IGNvdW50ICIsIGZ1bmN0aW9uQ291bnQsICIgZXhjZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9m
IGZ1bmN0aW9ucyAiLCBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGFnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZWM2NzM2MjMyZjA3MjFmYzYyNTdkNDc5
NDE3MTdiNTI2MmJiZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRhZy5jcHAKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
YXNtVGFnLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFjZSBKU0Mgewor
bmFtZXNwYWNlIFdhc20geworCit1aW50MzJfdCBUYWc6OnNfaWQgPSAwOworCit9fSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRhZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhZy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmUwMzk1M2Q1ZDZlZWZjOTMzODFmYzkwZTY0ZjViNzJlYzMwZDE0NzkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmgKQEAg
LTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAi
V2FzbVNpZ25hdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitj
bGFzcyBUYWcgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGFnPiB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGFnKTsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPFRhZz4gY3JlYXRlKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFRhZyhzaWduYXR1cmUpKTsgfQorCisgICAgU2lnbmF0
dXJlQXJnQ291bnQgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpOyB9CisgICAgVHlwZSBwYXJhbWV0ZXIoU2lnbmF0dXJlQXJnQ291bnQg
aSkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50KGkpOyB9CisKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgVGFnJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pZCA9PSBvdGhl
ci5tX2lkOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRhZyYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuIG1faWQgIT0gb3RoZXIubV9pZDsgfQorCisgICAgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZS5nZXQoKTsgfQorCitwcml2YXRlOgor
ICAgIFRhZyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKKyAgICAgICAgOiBtX2lkKCsrc19p
ZCkKKyAgICAgICAgLCBtX3NpZ25hdHVyZShSZWYgeyBzaWduYXR1cmUgfSkKKyAgICB7CisgICAg
fQorCisgICAgc3RhdGljIHVpbnQzMl90IHNfaWQ7CisgICAgdWludDMyX3QgbV9pZDsKKyAgICBS
ZWY8Y29uc3QgU2lnbmF0dXJlPiBtX3NpZ25hdHVyZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCmluZGV4IDc5ZDFiY2ZmODlmYjA0ZTIyZWQ1NGYy
ZjY0MDhiZTA5ZjI5M2QwYzMuLmZlYzJhMTM3NzliZjI3ZjY0OGZhYTM4YTVlZjg2NDhlMDk0ODVj
MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
OCArMjgsMTEgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgor
I2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2lu
Y2x1ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCiAjaW5jbHVkZSAiV2FzbUluc3Rh
bmNlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKaW5kZXggYzIzNWNm
ZTYyOTVlNjY5YWU1YTgwZWU4ZjI1MmVhNmNhMjQzMWI4My4uZjQ1ZGViMmE1OTZjYWEyNTdlMzMx
ZWQyMWVmMDllMDZiMDVlYzUxYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVu
a3MuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2Fz
bUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkKaW5kZXggMWUzODBk
ZWYxY2Q4Y2I2NzYwNzVlZDMyNTU3OWIwZjUxZDFiY2U1NS4uOTY3N2ViODNkOTZhN2FkNjRmYjUx
NDdhNDJiNGE4NThkOTU5NDA0NyAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFk
ZXIucHkKQEAgLTE0NCw3ICsxNDQsNyBAQCBjbGFzcyBDb2RlR2VuZXJhdG9yOgogICAgICAgICAg
ICAgc2VsZi5hZHZhbmNlKCkKICAgICAgICAgICAgIHNlbGYuY29uc3VtZSgiKSIpCiAgICAgICAg
IGVsaWYgYXJndW1lbnRSZWdleC5tYXRjaChzZWxmLnRva2VuKCkpOgotICAgICAgICAgICAgcmVz
dWx0ID0gImFyZyIgKyBzZWxmLnRva2VuKClbMTpdCisgICAgICAgICAgICByZXN1bHQgPSAiZ2V0
KGFyZyIgKyBzZWxmLnRva2VuKClbMTpdICsgIikiCiAgICAgICAgICAgICBzZWxmLmFkdmFuY2Uo
KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3AgPSBzZWxmLnRva2VuKCkKQEAgLTE1Niwx
MyArMTU2LDE2IEBAIGNsYXNzIENvZGVHZW5lcmF0b3I6CiAKICAgICAgICAgcmV0dXJuIHJlc3Vs
dAogCisgICAgZGVmIG1ha2VSZXN1bHQoc2VsZiwgcmVzdWx0VmFsdWUpOgorICAgICAgICByZXR1
cm4gcmVzdWx0VmFsdWUgKyAiO1xuIiArICJyZXN1bHQgPSBwdXNoKHJlc3VsdFZhbHVlLT50eXBl
KCkpO1xuIiArICJtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJv
YywgU2V0LCBvcmlnaW4oKSwgcmVzdWx0LCByZXN1bHRWYWx1ZSk7IgorCiAgICAgZGVmIGdlbmVy
YXRlKHNlbGYsIHdhc21PcCk6CiAgICAgICAgIGlmIGxlbihzZWxmLnRva2VucykgPT0gMToKLSAg
ICAgICAgICAgIHBhcmFtcyA9IFsiYXJnIiArIHN0cihwYXJhbSkgZm9yIHBhcmFtIGluIHJhbmdl
KGxlbih3YXNtT3BbInBhcmFtZXRlciJdKSldCi0gICAgICAgICAgICByZXR1cm4gIiAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjoiICsgc2Vs
Zi50b2tlbigpICsgIiwgb3JpZ2luKCksICIgKyAiLCAiLmpvaW4ocGFyYW1zKSArICIpIgorICAg
ICAgICAgICAgcGFyYW1zID0gWyJnZXQoYXJnIiArIHN0cihwYXJhbSkgKyAiKSIgZm9yIHBhcmFt
IGluIHJhbmdlKGxlbih3YXNtT3BbInBhcmFtZXRlciJdKSldCisgICAgICAgICAgICByZXR1cm4g
c2VsZi5tYWtlUmVzdWx0KCIgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6IiArIHNlbGYudG9rZW4oKSArICIsIG9yaWdp
bigpLCAiICsgIiwgIi5qb2luKHBhcmFtcykgKyAiKSIpCiAgICAgICAgIHJlc3VsdCA9IHNlbGYu
Z2VuZXJhdGVPcGNvZGUoKQotICAgICAgICBzZWxmLmNvZGUuYXBwZW5kKCJyZXN1bHQgPSAiICsg
cmVzdWx0KQotICAgICAgICByZXR1cm4gIiAgICAiICsgIiAgICBcbiIuam9pbihzZWxmLmNvZGUp
CisgICAgICAgIHNlbGYuY29kZS5hcHBlbmQoIlZhbHVlKiByZXN1bHRWYWx1ZSA9ICIgKyByZXN1
bHQpCisgICAgICAgIHJldHVybiBzZWxmLm1ha2VSZXN1bHQoIiAgICAiICsgIiAgICBcbiIuam9p
bihzZWxmLmNvZGUpKQogCiAKIGRlZiB0ZW1wKGluZGV4KToKQEAgLTE5MSw3ICsxOTQsNyBAQCBk
ZWYgZ2VuZXJhdGVTaW1wbGVDb2RlKG9wKToKICAgICByZXR1cm4gIiIiCiB0ZW1wbGF0ZTw+IGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjoiIiIgKyB3YXNtLnRvQ3BwKG9wWyJuYW1l
Il0pICsgIj4oIiArICIsICIuam9pbihhcmdzKSArICIiIikgLT4gUGFydGlhbFJlc3VsdAogewot
IiIiICsgZ2VuZXJhdGVCM0NvZGUob3Bjb2RlLCBiM29wKSArICIiIjsKKyIiIiArIGdlbmVyYXRl
QjNDb2RlKG9wY29kZSwgYjNvcCkgKyAiIiIKICAgICByZXR1cm4geyB9OwogfQogIiIiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkK
aW5kZXggYzIwYmZhNTQyZTA4NjRiY2QwYWY4MjhlNzlkNjkyMDgwNGE1NzIzNy4uN2NjZmNhZmM2
YWZiMzIxMDhjYjRhNTA5YzViOTIwNzJhODFjNzYyNCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQpAQCAtNTMsNyArNTMsNyBA
QCBkZWYgY3BwTWFjcm8od2FzbU9wY29kZSwgdmFsdWUsIGIzLCBpbmMsICpleHRyYUFyZ3MpOgog
ZGVmIHR5cGVNYWNyb2l6ZXIoKToKICAgICBpbmMgPSAwCiAgICAgZm9yIHR5IGluIHdhc20udHlw
ZXM6Ci0gICAgICAgIHlpZWxkIGNwcE1hY3JvKHR5LCB3YXNtLnR5cGVzW3R5XVsidmFsdWUiXSwg
d2FzbS50eXBlc1t0eV1bImIzdHlwZSJdLCBpbmMpCisgICAgICAgIHlpZWxkIGNwcE1hY3JvKHR5
LCB3YXNtLnR5cGVzW3R5XVsidmFsdWUiXSwgd2FzbS50eXBlc1t0eV1bImIzdHlwZSJdLCBpbmMs
IHR5KQogICAgICAgICBpbmMgKz0gMQogCiB0eXBlX2RlZmluaXRpb25zID0gWyIjZGVmaW5lIEZP
Ul9FQUNIX1dBU01fVFlQRShtYWNybykiXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5LmNwcAppbmRleCA3MThiY2I5NzU1NmVmNDVhODJkM2RiOWU0YmEw
Nzc1ODBiYmM5ZTU2Li43OGYxNzZhYjYzYTI2NWUxNTQ5ZDVkNzJjYjM2MmNhN2U4NTQ3Y2RjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcApA
QCAtNzgsNiArNzgsNyBAQCBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseTo6c19pbmZvID0g
eyAiV2ViQXNzZW1ibHkiLCAmQmFzZTo6c19pbmZvLCAmd2ViQXNzZQogLyogU291cmNlIGZvciBK
U1dlYkFzc2VtYmx5Lmx1dC5oCiBAYmVnaW4gd2ViQXNzZW1ibHlUYWJsZQogICBDb21waWxlRXJy
b3IgICAgY3JlYXRlV2ViQXNzZW1ibHlDb21waWxlRXJyb3IgIERvbnRFbnVtfFByb3BlcnR5Q2Fs
bGJhY2sKKyAgRXhjZXB0aW9uICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5RXhjZXB0aW9uICAgICBE
b250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIEdsb2JhbCAgICAgICAgICBjcmVhdGVXZWJBc3Nl
bWJseUdsb2JhbCAgICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBJbnN0YW5jZSAg
ICAgICAgY3JlYXRlV2ViQXNzZW1ibHlJbnN0YW5jZSAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2Fs
bGJhY2sKICAgTGlua0Vycm9yICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5TGlua0Vycm9yICAgICBE
b250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCkBAIC04NSw2ICs4Niw3IEBAIGNvbnN0IENsYXNzSW5m
byBKU1dlYkFzc2VtYmx5OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseSIsICZCYXNlOjpzX2luZm8s
ICZ3ZWJBc3NlCiAgIE1vZHVsZSAgICAgICAgICBjcmVhdGVXZWJBc3NlbWJseU1vZHVsZSAgICAg
ICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBSdW50aW1lRXJyb3IgICAgY3JlYXRlV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKICAgVGFibGUg
ICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5VGFibGUgICAgICAgICBEb250RW51bXxQcm9wZXJ0
eUNhbGxiYWNrCisgIFRhZyAgICAgICAgICAgICBjcmVhdGVXZWJBc3NlbWJseVRhZyAgICAgICAg
ICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBjb21waWxlICAgICAgICAgd2ViQXNzZW1i
bHlDb21waWxlRnVuYyAgICAgICAgIEZ1bmN0aW9uIDEKICAgaW5zdGFudGlhdGUgICAgIHdlYkFz
c2VtYmx5SW5zdGFudGlhdGVGdW5jICAgICBGdW5jdGlvbiAxCiAgIHZhbGlkYXRlICAgICAgICB3
ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyAgICAgICAgRnVuY3Rpb24gMQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMDNkNDMwMzNjZWFkNWYxYjQzYjZjZDY1MWYzNmE3ODUyZmYwMTg4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUV4Y2VwdGlvbi5jcHAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5RXhjZXB0aW9uLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3Qg
Q2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5
LkV4Y2VwdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNXZWJBc3NlbWJseUV4Y2VwdGlvbikgfTsKKworSlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbjo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBXYXNtOjpUYWcmIHRhZywgRml4ZWRWZWN0b3I8dWludDY0X3Q+JiYgcGF5bG9hZCkK
KyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fdGFnKFJlZiB7IHRhZyB9KQorICAg
ICwgbV9wYXlsb2FkKFdURk1vdmUocGF5bG9hZCkpCit7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJs
eUV4Y2VwdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKworICAgIGF1dG8qIGV4Y2VwdGlvbiA9
IGpzQ2FzdDxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKj4oY2VsbCk7CisgICAgY29uc3QgV2FzbTo6
U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBleGNlcHRpb24tPnRhZygpLnNpZ25hdHVyZSgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kp
IHsKKyAgICAgICAgaWYgKGlzUmVmVHlwZShzaWduYXR1cmUuYXJndW1lbnQoaSkpKQorICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmQoYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPj4o
ZXhjZXB0aW9uLT5wYXlsb2FkKClbaV0pKTsKKyAgICB9Cit9CisKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKTsKKwordm9pZCBKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlFeGNlcHRpb246On5KU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uKCk7Cit9CisKK0pTVmFsdWUgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Z2V0
QXJnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkpIGNvbnN0Cit7Cisg
ICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSB0YWcoKS5zaWduYXR1cmUoKTsK
KyAgICBBU1NFUlQoaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOworICAgIHJldHVybiB0
b0pTVmFsdWUoZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnQoaSksIHBheWxvYWQoKVtp
XSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUV4Y2VwdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUV4Y2VwdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzYjlhMzJmOTViMTk0ZGVlOGMxNTQ2YjJkYzVk
OTk0ZDcyYzYzY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbVRhZy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiA6IHB1YmxpYyBKU0Rlc3RydWN0
aWJsZU9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsK
KworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KKyAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS53ZWJBc3Nl
bWJseUV4Y2VwdGlvblNwYWNlPG1vZGU+KCk7CisgICAgfQorCisgICAgREVDTEFSRV9FWFBPUlRf
SU5GTzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oRXJyb3JJbnN0YW5jZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogY3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFdhc206OlRhZyYgdGFnLCBGaXhlZFZlY3Rv
cjx1aW50NjRfdD4mJiBwYXlsb2FkKQorICAgIHsKKyAgICAgICAgSlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbiogZXhjZXB0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJs
eUV4Y2VwdGlvbj4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24odm0sIHN0cnVjdHVy
ZSwgdGFnLCBXVEZNb3ZlKHBheWxvYWQpKTsKKyAgICAgICAgZXhjZXB0aW9uLT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgICAgIHJldHVybiBleGNlcHRpb247CisgICAgfQorCisgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKKworICAgIGNvbnN0IFdhc206OlRhZyYgdGFnKCkgY29uc3QgeyBy
ZXR1cm4gbV90YWcuZ2V0KCk7IH0KKyAgICBjb25zdCBGaXhlZFZlY3Rvcjx1aW50NjRfdD4mIHBh
eWxvYWQoKSBjb25zdCB7IHJldHVybiBtX3BheWxvYWQ7IH0KKyAgICBKU1ZhbHVlIGdldEFyZyhK
U0dsb2JhbE9iamVjdCosIHVuc2lnbmVkKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIEpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBXYXNtOjpUYWcmLCBGaXhl
ZFZlY3Rvcjx1aW50NjRfdD4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisK
KyAgICBSZWY8Y29uc3QgV2FzbTo6VGFnPiBtX3RhZzsKKyAgICBGaXhlZFZlY3Rvcjx1aW50NjRf
dD4gbV9wYXlsb2FkOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUhlbHBlcnMuaAppbmRleCBkOGYyNjUwY2FhNTg2NzIzNTRiZDVmMzlmN2Rl
YWI2NDEwZDAwNTRjLi5iNjIwZWRjYTI4YTllMjQyOWYxMjBjZTE5NjdhM2IwYzExMjEzNTcxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVs
cGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlI
ZWxwZXJzLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5o
IgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU1NvdXJjZUNvZGUuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1h
dC5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNsdWRlICJXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5oIgpAQCAtMTQ0LDYgKzE0NSw3NSBAQCBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUgZGVmYXVsdFZhbHVlRm9yUmVmZXJlbmNlVHlwZShjb25zdCBXYXNtOjpUeXBlIHR5
cGUpCiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgdG9K
U1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFdhc206OlR5cGUgdHlw
ZSwgdWludDY0X3QgYml0cykKK3sKKyAgICBzd2l0Y2ggKHR5cGUua2luZCkgeworICAgIGNhc2Ug
V2FzbTo6VHlwZUtpbmQ6OlZvaWQ6CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkkzMjoKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KGJpdHMpKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGMzI6Cisg
ICAgICAgIHJldHVybiBqc051bWJlcihiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PGlu
dDMyX3Q+KGJpdHMpKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjY0OgorICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoYml0d2lzZV9jYXN0PGRvdWJsZT4oYml0cykpOworICAgIGNhc2UgV2Fz
bTo6VHlwZUtpbmQ6Okk2NDoKKyAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVGcm9tKGds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oYml0cykpOworICAgIGNhc2UgV2FzbTo6
VHlwZUtpbmQ6OkV4dGVybnJlZjoKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGdW5jcmVmOgor
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTVmFsdWU+KGJpdHMpOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBKU1ZhbHVlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdWludDY0X3QgZnJv
bUpTVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgV2FzbTo6VHlwZSB0
eXBlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgc3dpdGNoICh0
eXBlLmtpbmQpIHsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpUeXBlSWR4OgorICAgIGNhc2Ug
V2FzbTo6VHlwZUtpbmQ6OkZ1bmNyZWY6IHsKKyAgICAgICAgYm9vbCBpc051bGxhYmxlID0gdHlw
ZS5pc051bGxhYmxlKCk7CisgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlv
biA9IG51bGxwdHI7CisgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3Jh
cHBlckZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKCFpc1dlYkFzc2VtYmx5SG9zdEZ1
bmN0aW9uKHZtLCB2YWx1ZSwgd2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSAmJiAo
IWlzTnVsbGFibGUgfHwgIXZhbHVlLmlzTnVsbCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgIkZ1bmNyZWYgbXVzdCBiZSBhbiBleHBvcnRlZCB3
YXNtIGZ1bmN0aW9uIikpOworICAgICAgICBpZiAodHlwZS5raW5kID09IFdhc206OlR5cGVLaW5k
OjpUeXBlSWR4ICYmICh3YXNtRnVuY3Rpb24gfHwgd2FzbVdyYXBwZXJGdW5jdGlvbikpIHsKKyAg
ICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHBhcmFtSW5kZXggPSB0eXBlLmluZGV4Owor
ICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggYXJnSW5kZXg7CisgICAgICAgICAgICBp
ZiAod2FzbUZ1bmN0aW9uKQorICAgICAgICAgICAgICAgIGFyZ0luZGV4ID0gd2FzbUZ1bmN0aW9u
LT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFy
Z0luZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAg
ICAgIGlmIChwYXJhbUluZGV4ICE9IGFyZ0luZGV4KQorICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgIkFyZ3VtZW50IGZ1bmN0aW9uIGRpZCBub3Qg
bWF0Y2ggdGhlIHJlZmVyZW5jZSB0eXBlIikpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpFeHRlcm5yZWY6CisgICAgICAgIGlmICgh
dHlwZS5pc051bGxhYmxlKCkgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
dGhyb3dWTUV4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5
UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sICJOb24tbnVsbCBFeHRlcm5yZWYgY2Fubm90
IGJlIG51bGwiKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6Okkz
MjoKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB2YWx1ZS50b0ludDMyKGdsb2Jh
bE9iamVjdCkpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6Okk2NDoKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLnRvQmlnSW50
NjQoZ2xvYmFsT2JqZWN0KSkpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkYzMjoKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVl
LnRvRmxvYXQoZ2xvYmFsT2JqZWN0KSkpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkY2NDoK
KyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KHZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5k
OjpWb2lkOgorICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkZ1bmM6CisgICAgY2FzZSBXYXNtOjpU
eXBlS2luZDo6UmVmTnVsbDoKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpSZWY6CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRl
eCA2NmRhMTBhNzgwMDNkYjI3YTE5MTgyZTliMWIwYzNjODA1ZDRhM2I2Li4xZDdmNDZjZDY4MzA0
NWVhYjY0NmI4NzJmNTc4ZWQ3NTAyMjVjYmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKQEAgLTIxNiw2ICsy
MTYsNyBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dHJ5
Q3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWxLaW5kOjpGdW5jdGlvbjoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2Jh
bDoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOgorICAgICAgICBjYXNl
IFdhc206OkV4dGVybmFsS2luZDo6RXhjZXB0aW9uOgogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6CiAgICAgICAgICAgICBicmVh
azsKQEAgLTI0Miw2ICsyNDMsNyBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6dHJ5Q3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIGNh
c2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRl
cm5hbEtpbmQ6Okdsb2JhbDoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxl
OgorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RXhjZXB0aW9uOgogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaAppbmRleCA1NmY1OGY5NTQzNDkzOTU5YjgyNmQxZjk3M2E4ZjJiMGQ1Y2Y3NjlmLi45
NzRkNmQ3YmE1ZTdhNTg3OGE4OGI2YzExNmQ1MmFkZTUzOGJhZjcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaApAQCAt
NDgsNiArNDgsOCBAQCBjbGFzcyBDb2RlQmxvY2s7CiB9CiAKIGNsYXNzIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworCiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpT
Tm9uRmluYWxPYmplY3Q7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcAppbmRleCAxMDIyYTUyMjc0MzI5NjdhZWFh
NTJiOGI4OTc0Njc5M2JmYWZmNGRiLi5iMTAyOTdmZWRhYjc1ZmEyMzdjNTc2NmU3MTE5MzI0MjQy
NjQ4NjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw2ICszNywxMyBAQCBKU09iamVjdCog
Y3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBWTSYgdm0sCiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7CiAgICAgcmV0dXJu
IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QsIHZtLCBnbG9iYWxPYmplY3QtPndl
YkFzc2VtYmx5UnVudGltZUVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UsIEpTVmFsdWUoKSwgZGVm
YXVsdFNvdXJjZUFwcGVuZGVyLCBUeXBlTm90aGluZywgRXJyb3JUeXBlOjpFcnJvciwgdHJ1ZSk7
CiB9CisKK0pTT2JqZWN0KiBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlKQor
eworICAgIEVycm9ySW5zdGFuY2UqIGVycm9yID0gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2Jh
bE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1
cmUoKSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBlKSwgSlNWYWx1ZSgp
LCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIFR5cGVOb3RoaW5nLCBFcnJvclR5cGU6OkVycm9yLCB0
cnVlKTsKKyAgICBlcnJvci0+c2V0Q2F0Y2hhYmxlRnJvbVdhc20oZmFsc2UpOworICAgIHJldHVy
biBlcnJvcjsKK30KICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgK
aW5kZXggYmU0MTMwOTBkMzI3NGM2MThmYWZkNDliMTE2N2IwZDIyMjdjZTVmYy4uYzg2YjYzZjkx
MmQzY2Y0MWQxYzZjNDkwYzA4OTYzOWNiN2IwYjNmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwx
MCArMjgsMTIgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJFcnJvcklu
c3RhbmNlLmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKIEpTT2JqZWN0KiBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKEpTR2xvYmFs
T2JqZWN0KiwgVk0mLCBjb25zdCBTdHJpbmcmKTsKK0pTT2JqZWN0KiBjcmVhdGVKU1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBXYXNtOjpFeGNlcHRpb25UeXBl
KTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjhkNTYwZjA3MTA2ZTRk
MGFjYmE1NWEzM2E3NDJjNzA5NzczN2IxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWcuY3BwCkBAIC0wLDAgKzEsNTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhZy5oIgorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbVRhZy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlUYWc6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5
LlRhZyIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNXZWJBc3NlbWJseVRhZykgfTsKKworSlNXZWJBc3NlbWJseVRhZyogSlNXZWJBc3NlbWJs
eVRhZzo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFdhc206OlRhZyYgdGFnKQoreworICAgIFVOVVNFRF9QQVJB
TShnbG9iYWxPYmplY3QpOworICAgIGF1dG8qIGpzVGFnID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNXZWJBc3NlbWJseVRhZz4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlUYWcodm0sIHN0
cnVjdHVyZSwgdGFnKTsKKyAgICBqc1RhZy0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVy
biBqc1RhZzsKK30KKworU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5VGFnOjpjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9
CisKK0pTV2ViQXNzZW1ibHlUYWc6OkpTV2ViQXNzZW1ibHlUYWcoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUpCisgICAgLCBtX3RhZyhSZWYgeyB0YWcgfSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2EyYmY0M2RiNzdl
NTdmZDUxYjgwYzE5MDNmMjJjZTk5YzBhN2VlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWcuaApAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtVGFnLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1dlYkFzc2VtYmx5VGFnIGZpbmFsIDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFs
T2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
IG1vZGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
eworICAgICAgICByZXR1cm4gdm0ud2ViQXNzZW1ibHlUYWdTcGFjZTxtb2RlPigpOworICAgIH0K
KworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgSlNXZWJBc3NlbWJseVRhZyogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqLCBjb25zdCBXYXNtOjpUYWcmKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgY29uc3QgV2FzbTo6
VGFnJiB0YWcoKSBjb25zdCB7IHJldHVybiBtX3RhZzsgfQorICAgIGNvbnN0IFdhc206OlNpZ25h
dHVyZSYgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gdGFnKCkuc2lnbmF0dXJlKCk7IH0KKwor
cHJpdmF0ZToKKyAgICBKU1dlYkFzc2VtYmx5VGFnKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgV2Fz
bTo6VGFnJik7CisKKyAgICBjb25zdCBSZWY8Y29uc3QgV2FzbTo6VGFnPiBtX3RhZzsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCmluZGV4IGY2N2YyNDJhNzg5
MTNhZTVjMDJhYTU2OGU5OWFjNjVjZGJiODBmZGUuLmQ2NWZjNjEyMWI2MDkwYmQ3ZjJkNDBkMDNi
YjQ1ZWU3YWE2NDAyMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dhc21Ub0pTLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9K
Uy5jcHAKQEAgLTk4LDcgKzk4LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAg
dW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOwogICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVk
RlBScyA9IDA7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1l
U2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7
Ci0gICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdp
c3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1bnNp
Z25lZCBmck9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9
IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgewogICAgICAgICAgICAgVHlwZSBhcmdU
eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGFy
Z1R5cGUua2luZCkgewpAQCAtMTYyLDcgKzE2Miw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0mIHZt
CiAgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKICAgICAgICAgdW5zaWduZWQg
bWFyc2hhbGxlZEZQUnMgPSAwOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9
IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpOwotICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAg
ICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKIAogICAgICAgICBhdXRvIG1hcnNo
YWxsRlBSID0gWyZdIChGUFJSZWcgZnByUmVnKSB7CiAgICAgICAgICAgICBqaXQucHVyaWZ5TmFO
KGZwclJlZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVm
NGE1ZjQ0ODZiNGYxN2M4ZmZmYzg3MDc0MTE1MDJiODY3ZTY5ZjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0
cnVjdG9yLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJBc3Nl
bWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisK
KyNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUu
aCIKKworI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IubHV0LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlFeGNlcHRpb25D
b25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAmY29uc3Ry
dWN0b3JUYWJsZVdlYkFzc2VtYmx5RXhjZXB0aW9uLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IpIH07CisKK3N0YXRpYyBKU0NfREVD
TEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlFeGNlcHRpb24pOworc3Rh
dGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY2FsbEpTV2ViQXNzZW1ibHlFeGNlcHRpb24p
OworCisvKiBTb3VyY2UgZm9yIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IubHV0LmgK
KyBAYmVnaW4gY29uc3RydWN0b3JUYWJsZVdlYkFzc2VtYmx5RXhjZXB0aW9uCisgQGVuZAorICov
CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
KQoreworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVlIHRhZ1ZhbHVlID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIHRhZ1BhcmFtZXRlcnMgPSBjYWxsRnJhbWUt
PmFyZ3VtZW50KDEpOworCisgICAgYXV0byB0YWcgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1i
bHlUYWcqPih2bSwgdGFnVmFsdWUpOworICAgIGlmICghdGFnKQorICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuRXhjZXB0aW9u
IGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgV2ViQXNzZW1i
bHkuVGFnIik7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciB2YWx1ZXM7CisgICAgZm9yRWFj
aEluSXRlcmFibGUoZ2xvYmFsT2JqZWN0LCB0YWdQYXJhbWV0ZXJzLCBbJl0gKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIG5leHRWYWx1ZSkgeworICAgICAgICB2YWx1ZXMuYXBwZW5kKG5l
eHRWYWx1ZSk7CisgICAgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHRhZy0+c2lnbmF0dXJlKCkuYXJndW1lbnRDb3Vu
dCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlIG51bWJlciBv
ZiBwYXJlbWV0ZXJzIGluIFdlYkFzc2VtYmx5LlRhZyB0byBtYXRjaCB0aGUgdGFncyBwYXJhbWV0
ZXIgY291bnQuIik7CisKKyAgICAvLyBBbnkgR0MnZCB2YWx1ZXMgaW4gaGVyZSB3aWxsIGJlIG1h
cmtlZCBieSB0aGUgTWFya2VkQXJ1Z2VtZW50QnVmZmVyIHVudGlsIHN0b3JlZCBpbiB0aGUgRXhj
ZXB0aW9uLgorICAgIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiBwYXlsb2FkKHZhbHVlcy5zaXplKCkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgcGF5bG9hZFtpXSA9IGZyb21KU1ZhbHVlKGdsb2JhbE9iamVjdCwgdGFnLT5zaWduYXR1
cmUoKS5hcmd1bWVudChpKSwgdmFsdWVzLmF0KGkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKyAgICB9CisKKyAgICBKU09iamVjdCogbmV3VGFyZ2V0ID0gYXNP
YmplY3QoY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBKU0NfR0VUX0RFUklWRURfU1RSVUNUVVJFKHZtLCB3ZWJBc3NlbWJseUV4Y2VwdGlvblN0cnVj
dHVyZSwgbmV3VGFyZ2V0LCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
VmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpjcmVhdGUodm0sIHN0cnVjdHVy
ZSwgdGFnLT50YWcoKSwgV1RGTW92ZShwYXlsb2FkKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGNhbGxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rp
b25UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LkV4Y2VwdGlvbiIp
KTsKK30KKworV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3RvciogV2ViQXNzZW1ibHlFeGNl
cHRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQoreworICAgIGF1dG8q
IGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlFeGNl
cHRpb25Db25zdHJ1Y3Rvcj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0
b3Iodm0sIHN0cnVjdHVyZSk7CisgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCB0
aGlzUHJvdG90eXBlKTsKKyAgICByZXR1cm4gY29uc3RydWN0b3I7Cit9CisKK1N0cnVjdHVyZSog
V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oSW50ZXJuYWxGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30K
Kwordm9pZCBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlKiBwcm90b3R5cGUpCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIDEsICJFeGNlcHRpb24iX3MsIFByb3BlcnR5QWRkaXRp
b25Nb2RlOjpXaXRob3V0U3RydWN0dXJlVHJhbnNpdGlvbik7CisgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0g
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSk7Cit9CisKK1dlYkFzc2VtYmx5RXhjZXB0
aW9uQ29uc3RydWN0b3I6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY2FsbEpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24sIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlFeGNlcHRpb24pCit7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNl
cHRpb25Db25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3YmM5MjM1NDU1MzBkZTU4
NTk3MGU4ZGNlN2M2MDA2OTA0YWIxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmgKQEAgLTAs
MCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSW50
ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTsKKworY2xhc3MgV2ViQXNz
ZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3RvciBmaW5hbCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9u
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOworCisgICAgc3RhdGljIFdlYkFzc2VtYmx5RXhj
ZXB0aW9uQ29uc3RydWN0b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG90eXBlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKwor
cHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yKFZNJiwgU3RydWN0
dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5RXhjZXB0aW9u
UHJvdG90eXBlKik7Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2Vi
QXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3RvciwgSW50ZXJuYWxGdW5jdGlvbik7CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90
b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNl
cHRpb25Qcm90b3R5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjMzZjNDc5ODVhMzI0YzFiMzg5OTM1ZWYx
YTFiOTExYWFmNWY4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAKQEAgLTAsMCArMSwxNDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCIK
KworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXJJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKK3N0
YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG9G
dW5jR2V0QXJnKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2VtYmx5
RXhjZXB0aW9uUHJvdG9GdW5jSXMpOworfQorCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlFeGNlcHRp
b25Qcm90b3R5cGUubHV0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8g
V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5LkV4
Y2VwdGlvbiIsICZCYXNlOjpzX2luZm8sICZwcm90b3R5cGVUYWJsZVdlYkFzc2VtYmx5RXhjZXB0
aW9uLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJv
dG90eXBlKSB9OworCisvKiBTb3VyY2UgZm9yIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBl
Lmx1dC5oCisgQGJlZ2luIHByb3RvdHlwZVRhYmxlV2ViQXNzZW1ibHlFeGNlcHRpb24KKyBnZXRB
cmcgICB3ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvRnVuY0dldEFyZyAgIEZ1bmN0aW9uIDIKKyBp
cyAgIHdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG9GdW5jSXMgICBGdW5jdGlvbiAxCisgQGVuZAor
ICovCisKK1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlKiBXZWJBc3NlbWJseUV4Y2VwdGlv
blByb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKK3sKKyAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRp
b24odm0pOworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK1N0cnVjdHVyZSogV2ViQXNzZW1ibHlF
eGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBXZWJBc3NlbWJseUV4Y2Vw
dGlvblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworfQorCitX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5
cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVy
ZSkKK3sKK30KKworQUxXQVlTX0lOTElORSBzdGF0aWMgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiog
Z2V0RXhjZXB0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdGhpc1Zh
bHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoVU5MSUtFTFkoIXRoaXNWYWx1
ZS5pc0NlbGwoKSkpIHsKKyAgICAgICAgdGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
IGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGF1dG8qIHRhZyA9IGpzRHluYW1pY0Nhc3Q8
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbio+KHZtLCB0aGlzVmFsdWUuYXNDZWxsKCkpOworICAgIGlm
IChMSUtFTFkodGFnKSkKKyAgICAgICAgcmV0dXJuIHRhZzsKKyAgICB0aHJvd1R5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIG9wZXJhdGlvbiBjYWxs
ZWQgb24gbm9uLUV4Y2VwdGlvbiBvYmplY3QiX3MpOworICAgIHJldHVybiBudWxscHRyOworfQor
CitBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1dlYkFzc2VtYmx5VGFnKiBnZXRUYWcoVk0mIHZtLCBK
U1ZhbHVlIHRhZ1ZhbHVlKQoreworICAgIGlmICghdGFnVmFsdWUuaXNDZWxsKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlU
YWcqPih2bSwgdGFnVmFsdWUuYXNDZWxsKCkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04od2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNHZXRBcmcsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgY29uc3QgYXV0byYgZm9ybWF0TWVzc2FnZSA9IFsmXShjb25zdCBhdXRv
JiBtZXNzYWdlKSB7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJXZWJBc3NlbWJseS5FeGNl
cHRpb24uZ2V0QXJnKCk6ICIsIG1lc3NhZ2UpOworICAgIH07CisgICAgY29uc3QgYXV0byYgdHlw
ZUVycm9yID0gWyZdKGNvbnN0IGF1dG8mIG1lc3NhZ2UpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBmb3JtYXRNZXNzYWdlKG1lc3NhZ2UpKTsKKyAg
ICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgfTsKKworICAgIEpTV2ViQXNzZW1i
bHlFeGNlcHRpb24qIGpzRXhjZXB0aW9uID0gZ2V0RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIEpTV2ViQXNzZW1ibHlUYWcqIHRhZyA9IGdldFRh
Zyh2bSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKCF0YWcpCisgICAgICAgIHJl
dHVybiB0eXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBXZWJBc3NlbWJseS5UYWci
KTsKKworICAgIGlmIChqc0V4Y2VwdGlvbi0+dGFnKCkgIT0gdGFnLT50YWcoKSkKKyAgICAgICAg
cmV0dXJuIHR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgZG9lcyBub3QgbWF0Y2ggdGhlIGV4Y2Vw
dGlvbiB0YWciKTsKKworICAgIHVpbnQzMl90IGluZGV4ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgx
KS50b1VJbnQzMihnbG9iYWxPYmplY3QpOworICAgIGlmIChpbmRleCA+PSB0YWctPnRhZygpLnBh
cmFtZXRlckNvdW50KCkpIHsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgZm9ybWF0TWVzc2FnZSgiSW5kZXggb3V0IG9mIHJhbmdlIikpOworICAgICAg
ICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzRXhjZXB0aW9uLT5nZXRBcmcoZ2xvYmFs
T2JqZWN0LCBpbmRleCkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2Vt
Ymx5RXhjZXB0aW9uUHJvdG9GdW5jSXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbioganNFeGNlcHRpb24gPSBnZXRFeGNlcHRpb24oZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworCisgICAgSlNXZWJBc3NlbWJseVRhZyog
dGFnID0gZ2V0VGFnKHZtLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXRhZykg
eworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsICJXZWJB
c3NlbWJseS5FeGNlcHRpb24uaXMoKTogRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIFdlYkFzc2Vt
Ymx5LlRhZyIpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihqc0V4Y2VwdGlvbi0+dGFnKCkgPT0gdGFnLT50YWcoKSkpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90
b3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kYzIxMDZkOGI5OTMxZmRhNGEwZTk0YjYxZmI1YzdlMWVhMzQ4
ZGJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgor
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBXZWJBc3Nl
bWJseUV4Y2VwdGlvblByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4g
JnZtLnBsYWluT2JqZWN0U3BhY2U7CisgICAgfQorCisgICAgc3RhdGljIFdlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG90eXBlKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSop
OworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgV2Vi
QXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKaW5kZXggM2FiM2MzZDVjYjVjOTAwOWJlYzJi
NmQ4MGQ0NDRjODBjMTQzZWFkZS4uMTk3MThkY2U2OTk2OTAwMWVlMTJkNjQ0Zjg2MjQ1ZTAxNzM2
NWIwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHAKQEAgLTc4LDUxICs3OCw5IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsCiAgICAgV2FzbTo6SW5zdGFuY2UqIHdhc21JbnN0YW5jZSA9ICZpbnN0YW5jZS0+aW5zdGFu
Y2UoKTsKIAogICAgIGZvciAodW5zaWduZWQgYXJnSW5kZXggPSAwOyBhcmdJbmRleCA8IHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCk7ICsrYXJnSW5kZXgpIHsKLSAgICAgICAgSlNWYWx1ZSBhcmcg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KGFyZ0luZGV4KTsKLSAgICAgICAgc3dpdGNoIChzaWduYXR1
cmUuYXJndW1lbnQoYXJnSW5kZXgpLmtpbmQpIHsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2lu
ZDo6STMyOgotICAgICAgICAgICAgYXJnID0gSlNWYWx1ZTo6ZGVjb2RlKGFyZy50b0ludDMyKGds
b2JhbE9iamVjdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlw
ZUtpbmQ6OlR5cGVJZHg6Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkZ1bmNyZWY6IHsK
LSAgICAgICAgICAgIGJvb2wgaXNOdWxsYWJsZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdJbmRl
eCkuaXNOdWxsYWJsZSgpOwotICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1
bmN0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
KiB3YXNtV3JhcHBlckZ1bmN0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmICghaXNXZWJB
c3NlbWJseUhvc3RGdW5jdGlvbih2bSwgYXJnLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVu
Y3Rpb24pICYmICghaXNOdWxsYWJsZSB8fCAhYXJnLmlzTnVsbCgpKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgIkZ1
bmNyZWYgbXVzdCBiZSBhbiBleHBvcnRlZCB3YXNtIGZ1bmN0aW9uIikpKTsKLSAgICAgICAgICAg
IGlmIChzaWduYXR1cmUuYXJndW1lbnQoYXJnSW5kZXgpLmtpbmQgPT0gV2FzbTo6VHlwZUtpbmQ6
OlR5cGVJZHggJiYgKHdhc21GdW5jdGlvbiB8fCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewotICAg
ICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHBhcmFtSW5kZXggPSBzaWduYXR1cmUu
YXJndW1lbnQoYXJnSW5kZXgpLmluZGV4OwotICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVy
ZUluZGV4IGFyZ0luZGV4OwotICAgICAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCi0gICAg
ICAgICAgICAgICAgICAgIGFyZ0luZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYXJnSW5kZXggPSB3
YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOwotICAgICAgICAgICAgICAgIGlm
IChwYXJhbUluZGV4ICE9IGFyZ0luZGV4KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpT
V2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgIkFyZ3VtZW50IGZ1bmN0
aW9uIGRpZCBub3QgbWF0Y2ggdGhlIHJlZmVyZW5jZSB0eXBlIikpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtp
bmQ6OkV4dGVybnJlZjoKLSAgICAgICAgICAgIGlmICghc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ0lu
ZGV4KS5pc051bGxhYmxlKCkgJiYgYXJnLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3Jl
YXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAiTm9uLW51bGwg
RXh0ZXJucmVmIGNhbm5vdCBiZSBudWxsIikpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFdhc206OlR5cGVLaW5kOjpJNjQ6Ci0gICAgICAgICAgICBhcmcgPSBKU1ZhbHVlOjpk
ZWNvZGUoYml0d2lzZV9jYXN0PHVpbnQ2NF90PihhcmcudG9CaWdJbnQ2NChnbG9iYWxPYmplY3Qp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjMy
OgotICAgICAgICAgICAgYXJnID0gSlNWYWx1ZTo6ZGVjb2RlKGJpdHdpc2VfY2FzdDx1aW50MzJf
dD4oYXJnLnRvRmxvYXQoZ2xvYmFsT2JqZWN0KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkY2NDoKLSAgICAgICAgICAgIGFyZyA9IEpTVmFsdWU6
OmRlY29kZShiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGFyZy50b051bWJlcihnbG9iYWxPYmplY3Qp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6Vm9p
ZDoKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RnVuYzoKLSAgICAgICAgY2FzZSBXYXNt
OjpUeXBlS2luZDo6UmVmTnVsbDoKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6UmVmOgot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQorICAg
ICAgICB1aW50NjRfdCB2YWx1ZSA9IGZyb21KU1ZhbHVlKGdsb2JhbE9iamVjdCwgc2lnbmF0dXJl
LmFyZ3VtZW50KGFyZ0luZGV4KSwgY2FsbEZyYW1lLT5hcmd1bWVudChhcmdJbmRleCkpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICAg
ICAgYm94ZWRBcmdzLmFwcGVuZChhcmcpOworICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKEpTVmFs
dWU6OmRlY29kZSh2YWx1ZSkpOwogICAgIH0KIAogICAgIC8vIFdoZW4gd2UgZG9uJ3QgdXNlIGZh
c3QgVExTIHRvIHN0b3JlIHRoZSBjb250ZXh0LCB0aGUgSlMKQEAgLTE1MiwxMCArMTEwLDYgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5j
ZSgpKTsKICAgICBBU1NFUlQoJndhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFuY2UoKSA9
PSB2bS53YXNtQ29udGV4dC5sb2FkKCkpOwogICAgIEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9
IHZtRW50cnlUb1dhc20od2FzbUZ1bmN0aW9uLT5qc0VudHJ5cG9pbnQoTXVzdENoZWNrQXJpdHkp
LmV4ZWN1dGFibGVBZGRyZXNzKCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKTsKLSAgICAvLyBXZSBu
ZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGluIGEgcmVnaXN0ZXIgb3Igb24gdGhlIHN0YWNrIHNp
bmNlIGl0J3Mgc3RvcmVkIGluIFZlY3RvcjxKU1ZhbHVlPi4KLSAgICAvLyBUaGlzIHByb2JhYmx5
IGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSwgc2luY2UgdGhlIFdlYkFzc2VtYmx5RnVuY3Rpb24q
IHNob3VsZCBrZWVwIHRoZSBpbnN0YW5jZQotICAgIC8vIGFsaXZlLiBCdXQgaXQncyBnb29kIGh5
Z2llbmUuCi0gICAgaW5zdGFuY2UtPnVzZSgpOwogICAgIGlmIChwcmV2V2FzbUluc3RhbmNlICE9
IHdhc21JbnN0YW5jZSkgewogICAgICAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIHNvbWUgZXh0cmEg
c2FmZXR5IGluc3RlYWQgb2YgbGVhdmluZyBhIGNhY2hlZAogICAgICAgICAvLyB2YWx1ZSBpbiB0
aGVyZS4gSWYgd2UgZXZlciBmb3JnZXQgdG8gc2V0IHRoZSB2YWx1ZSB0byBiZSBhIHJlYWwKQEAg
LTE2OCw2ICsxMjIsMTEgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJs
eUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICB2bS53YXNtQ29u
dGV4dC5zdG9yZShwcmV2V2FzbUluc3RhbmNlLCB2bS5zb2Z0U3RhY2tMaW1pdCgpKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCisgICAgLy8gV2UgbmVlZCB0byBtYWtl
IHN1cmUgdGhpcyBpcyBpbiBhIHJlZ2lzdGVyIG9yIG9uIHRoZSBzdGFjayBzaW5jZSBpdCdzIHN0
b3JlZCBpbiBWZWN0b3I8SlNWYWx1ZT4uCisgICAgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBzdHJp
Y3RseSBuZWNlc3NhcnksIHNpbmNlIHRoZSBXZWJBc3NlbWJseUZ1bmN0aW9uKiBzaG91bGQga2Vl
cCB0aGUgaW5zdGFuY2UKKyAgICAvLyBhbGl2ZS4gQnV0IGl0J3MgZ29vZCBoeWdpZW5lLgorICAg
IGluc3RhbmNlLT51c2UoKTsKKwogICAgIHJldHVybiByYXdSZXN1bHQ7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcAppbmRleCBkYjQwOTJhZDY5NDgyZjdhMDlkM2JlMWY3NTIzNDIyZDlkNWFmMTNkLi5m
N2IwODdiZjU4OTJiZjI2YmZlNjNlNWUzOGNmYWQyMDJiYWJhMjE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
Y3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgogI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAi
T2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
I2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKQEAgLTEzMCw2ICsxMzEsNyBAQCB2b2lk
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogaQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RnVu
Y3Rpb246CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6CiAgICAgICAg
IGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZToKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRl
cm5hbEtpbmQ6OkV4Y2VwdGlvbjoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdh
c206OkV4dGVybmFsS2luZDo6TWVtb3J5OgogICAgICAgICAgICAgY29udGludWU7CkBAIC0zNjMs
NyArMzY1LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlua0ltcGwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGkKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZTogewotICAgICAgICAgICAgLy8gNy4gT3Ro
ZXJ3aXNlIChpIGlzIGEgdGFibGUgaW1wb3J0KToKKyAgICAgICAgICAgIC8vIDcuIElmIGkgaXMg
YSB0YWJsZSBpbXBvcnQ6CiAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0g
anNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFibGUqPih2bSwgdmFsdWUpOwogICAgICAgICAg
ICAgLy8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3QsIHRocm93IGEg
V2ViQXNzZW1ibHkuTGlua0Vycm9yLgogICAgICAgICAgICAgaWYgKCF0YWJsZSkKQEAgLTM5NCw2
ICszOTYsMjIgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlua0ltcGwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbjog
eworICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhZyogdGFnID0ganNEeW5hbWljQ2FzdDxKU1dl
YkFzc2VtYmx5VGFnKj4odm0sIHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghdGFnKQorICAgICAg
ICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihn
bG9iYWxPYmplY3QsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJUYWcgaW1wb3J0Iiwg
ImlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWciKSkpOworCisgICAgICAgICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5m
b3JtYXRpb24uaW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4
XTsKKyAgICAgICAgICAgIFVOVVNFRF9WQVJJQUJMRShleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsK
KworICAgICAgICAgICAgaWYgKGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggIT0gdGFnLT50YWcoKS5z
aWduYXR1cmUoKS5pbmRleCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBpbXBvcnRGYWlsTWVz
c2FnZShpbXBvcnQsICJpbXBvcnRlZCBUYWciLCAic2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhl
IGltcG9ydGVkIFdlYkFzc2VtYmx5IFRhZydzIHNpZ25hdHVyZSIpKSk7CisKKyAgICAgICAgICAg
IG1faW5zdGFuY2UtPmluc3RhbmNlKCkuYWRkVGFnKHRhZy0+dGFnKCkpOworICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC00MjEsNiArNDM5LDkgQEAgdm9pZCBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZDo6bGlua0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNPYmplY3QqIGkKICAgICAgICAgfQogICAgIH0KIAorICAgIGZvciAoV2FzbTo6U2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggOiBtb2R1bGVJbmZvcm1hdGlvbi5pbnRlcm5hbEV4Y2Vw
dGlvblNpZ25hdHVyZUluZGljZXMpCisgICAgICAgIG1faW5zdGFuY2UtPmluc3RhbmNlKCkuYWRk
VGFnKFdhc206OlRhZzo6Y3JlYXRlKFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2ln
bmF0dXJlSW5kZXgpKS5sZWFrUmVmKCkpOworCiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRD
b3VudCA9IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogICAgIGF1dG8gbWFrZUZ1
bmN0aW9uV3JhcHBlciA9IFsmXSAodWludDMyX3QgaW5kZXgpIC0+IEpTVmFsdWUgewogICAgICAg
ICAvLyBJZiB3ZSBhbHJlYWR5IG1hZGUgYSB3cmFwcGVyLCBkbyBub3QgbWFrZSBhIG5ldyBvbmUu
CkBAIC01NTcsNiArNTc4LDEwIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJ
bXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBpCiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIFdhc206OkV4
dGVybmFsS2luZDo6RXhjZXB0aW9uOiB7CisgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNX
ZWJBc3NlbWJseVRhZzo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+bV93
ZWJBc3NlbWJseVRhZ1N0cnVjdHVyZS5nZXQoZ2xvYmFsT2JqZWN0KSwgbV9pbnN0YW5jZS0+aW5z
dGFuY2UoKS50YWcoZXhwLmtpbmRJbmRleCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgfQogCiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChleHAuZmllbGQpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdD
b25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODY1ZjhjN2I2ZTEzMjZmN2RkN2NjZDVmMDQ3YzM5
M2FmNjU3YzcwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMTM3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaCIKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSXRlcmF0b3JP
cGVyYXRpb25zLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5VGFnLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseVRhZ0NvbnN0cnVj
dG9yOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvcikgfTsKKwor
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY2FsbEpTV2ViQXNzZW1ibHlUYWcpOwor
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0SlNXZWJBc3NlbWJseVRh
Zyk7CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFn
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgCisgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIldlYkFzc2VtYmx5LlRhZyBjb25zdHJ1Y3RvciBleHBlY3RzIHRoZSB0YWcgdHlw
ZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIl9zKTsKKworICAgIEpTVmFsdWUgdGFnVHlwZVZhbHVl
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIHNpZ25hdHVyZU9iamVjdCA9
IHRhZ1R5cGVWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAicGFyYW1ldGVycyJfcykpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisKKyAgICBpZiAoIXNpZ25hdHVyZU9iamVjdC5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuVGFnIGNv
bnN0cnVjdG9yIGV4cGVjdHMgYSB0YWcgdHlwZSB3aXRoIHRoZSAncGFyYW1ldGVycycgcHJvcGVy
dHkuIl9zKTsKKworICAgIFZlY3RvcjxXYXNtOjpUeXBlPiBwYXJhbWV0ZXJzOworICAgIGZvckVh
Y2hJbkl0ZXJhYmxlKGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlT2JqZWN0LCBbJl0gKGF1dG8mIHZt
LCBhdXRvKiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbmV4dFR5cGUpIC0+IHZvaWQgeworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgV2FzbTo6
VHlwZSB0eXBlOworICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmcgPSBuZXh0VHlwZS50b1dURlN0
cmluZyhnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgICAgICBpZiAodmFsdWVTdHJpbmcgPT0gImkzMiJfcykKKyAgICAgICAgICAgIHR5
cGUgPSBXYXNtOjpUeXBlczo6STMyOworICAgICAgICBlbHNlIGlmICh2YWx1ZVN0cmluZyA9PSAi
aTY0Il9zKQorICAgICAgICAgICAgdHlwZSA9IFdhc206OlR5cGVzOjpJNjQ7CisgICAgICAgIGVs
c2UgaWYgKHZhbHVlU3RyaW5nID09ICJmMzIiX3MpCisgICAgICAgICAgICB0eXBlID0gV2FzbTo6
VHlwZXM6OkYzMjsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVTdHJpbmcgPT0gImY2NCJfcykKKyAg
ICAgICAgICAgIHR5cGUgPSBXYXNtOjpUeXBlczo6RjY0OworICAgICAgICBlbHNlIGlmICh2YWx1
ZVN0cmluZyA9PSAiYW55ZnVuYyJfcykKKyAgICAgICAgICAgIHR5cGUgPSBXYXNtOjpUeXBlczo6
RnVuY3JlZjsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVTdHJpbmcgPT0gImV4dGVybnJlZiJfcykK
KyAgICAgICAgICAgIHR5cGUgPSBXYXNtOjpUeXBlczo6RXh0ZXJucmVmOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJB
c3NlbWJseS5UYWcgY29uc3RydWN0b3IgZXhwZWN0cyB0aGUgJ3BhcmFtZXRlcnMnIGZpZWxkIG9m
IHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIHNlcXVlbmNlIG9mIFdlYkFzc2VtYmx5IHZhbHVl
IHR5cGVzLiJfcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZCh0eXBlKTsKKyAgICB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworCisgICAgUmVmUHRyPFdhc206OlNpZ25hdHVyZT4gc2lnbmF0dXJlID0g
V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OnNpZ25hdHVyZUZvcih7IH0sIHBhcmFtZXRlcnMp
OworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNDX0dFVF9ERVJJVkVEX1NUUlVDVFVSRSh2
bSwgd2ViQXNzZW1ibHlUYWdTdHJ1Y3R1cmUsIGFzT2JqZWN0KGNhbGxGcmFtZS0+bmV3VGFyZ2V0
KCkpLCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIFdhc206OlRhZzo6Y3JlYXRlKCpzaWduYXR1cmUpLmdldCgpKSkpOwor
fQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbEpTV2ViQXNzZW1ibHlUYWcsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJl
Q2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1i
bHkuVGFnIikpOworfQorCitKU1dlYkFzc2VtYmx5VGFnKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVj
dG9yOjpjcmVhdGVUYWcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGNvbnN0IFdhc206OlRhZyYgdGFnKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBKU09iamVjdCogbmV3VGFyZ2V0ID0gYXNPYmplY3QoY2FsbEZyYW1lLT5uZXdUYXJnZXQo
KSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0NfR0VUX0RFUklWRURfU1RSVUNUVVJF
KHZtLCB3ZWJBc3NlbWJseVRhZ1N0cnVjdHVyZSwgbmV3VGFyZ2V0LCBjYWxsRnJhbWUtPmpzQ2Fs
bGVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1dlYkFzc2VtYmx5VGFnOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlLCB0YWcpKTsKK30KKworV2ViQXNzZW1ibHlUYWdDb25zdHJ1
Y3RvciogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQorewor
ICAgIGF1dG8qIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNz
ZW1ibHlUYWdDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3Io
dm0sIHN0cnVjdHVyZSk7CisgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCB0aGlz
UHJvdG90eXBlKTsKKyAgICByZXR1cm4gY29uc3RydWN0b3I7Cit9CisKK1N0cnVjdHVyZSogV2Vi
QXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSW50
ZXJuYWxGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBX
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdlYkFzc2Vt
Ymx5VGFnUHJvdG90eXBlKiBwcm90b3R5cGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sIDEsICJUYWciX3MsIFByb3BlcnR5QWRkaXRpb25Nb2RlOjpXaXRob3V0U3RydWN0dXJlVHJh
bnNpdGlvbik7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5
TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0g
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSk7Cit9CisKK1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OldlYkFzc2VtYmx5VGFnQ29u
c3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0
cnVjdHVyZSwgY2FsbEpTV2ViQXNzZW1ibHlUYWcsIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWcp
Cit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVRhZ0NvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseVRhZ0NvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFlMmYxZDgwNmU5MDIxZWQ4NTc1
ZmFjNWIzODE2YzEzOTlhMzE1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDYxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0
aW9uLmgiCisjaW5jbHVkZSAiV2FzbU9wcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
SlNXZWJBc3NlbWJseVRhZzsKK2NsYXNzIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlOworCituYW1l
c3BhY2UgV2FzbSB7CitjbGFzcyBUYWc7Cit9CisKK2NsYXNzIFdlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IgZmluYWwgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlUYWdD
b25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlUYWdQcm90b3R5
cGUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUpOworCisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWcqIGNyZWF0
ZVRhZyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIGNvbnN0IFdhc206OlRhZyYpOworCisg
ICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0
b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNz
ZW1ibHlUYWdQcm90b3R5cGUqKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uKTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3Rv
dHlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDkzZDQxN2MxOGFjODRhNzI5NGQyZTkxNDJhNTQzMzFmMjYz
MDQwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5VGFnUHJvdG90eXBlLmNwcApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXYXNtRm9y
bWF0LmgiCisKK25hbWVzcGFjZSBKU0Mgeworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04od2ViQXNzZW1ibHlUYWdQcm90b0Z1bmNUeXBlKTsKK30KKworI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5VGFnUHJvdG90eXBlLmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJ
bmZvIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5UYWci
LCAmQmFzZTo6c19pbmZvLCAmcHJvdG90eXBlVGFibGVXZWJBc3NlbWJseVRhZywgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSkgfTsKKworLyogU291
cmNlIGZvciBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5sdXQuaAorIEBiZWdpbiBwcm90b3R5cGVU
YWJsZVdlYkFzc2VtYmx5VGFnCisgdHlwZSAgIHdlYkFzc2VtYmx5VGFnUHJvdG9GdW5jVHlwZSAg
IEZ1bmN0aW9uIDAKKyBAZW5kCisgKi8KKworCitXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSogV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgYXV0byogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlUYWdQcm90b3R5cGU+KHZtLmhlYXApKSBXZWJBc3NlbWJs
eVRhZ1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5VGFn
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RB
R19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworV2ViQXNzZW1ibHlUYWdQcm90b3R5cGU6Oldl
YkFzc2VtYmx5VGFnUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIEpTV2Vi
QXNzZW1ibHlUYWcqIGdldFRhZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHRoaXNWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKFVOTElLRUxZKCF0
aGlzVmFsdWUuaXNDZWxsKCkpKSB7CisgICAgICAgIHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlKSk7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBhdXRvKiB0YWcgPSBqc0R5bmFt
aWNDYXN0PEpTV2ViQXNzZW1ibHlUYWcqPih2bSwgdGhpc1ZhbHVlLmFzQ2VsbCgpKTsKKyAgICBp
ZiAoTElLRUxZKHRhZykpCisgICAgICAgIHJldHVybiB0YWc7CisgICAgdGhyb3dUeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LlRhZyBvcGVyYXRpb24gY2FsbGVkIG9u
IG5vbi1UYWcgb2JqZWN0Il9zKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2VtYmx5VGFnUHJvdG9GdW5jVHlwZSwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFnKiBqc1RhZyA9IGdldFRhZyhnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBjb25zdCBXYXNtOjpUYWcm
IHRhZyA9IGpzVGFnLT50YWcoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWcucGFyYW1ldGVyQ291bnQoKTsgKytpKQor
ICAgICAgICBhcmdMaXN0LmFwcGVuZChXYXNtOjp0eXBlVG9TdHJpbmcodm0sIHRhZy5wYXJhbWV0
ZXIoaSkua2luZCkpOworCisgICAgaWYgKFVOTElLRUxZKGFyZ0xpc3QuaGFzT3ZlcmZsb3dlZCgp
KSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgfQorCisgICAgSlNB
cnJheSogcGFyYW1ldGVycyA9IGNvbnN0cnVjdEFycmF5KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBhcmdMaXN0KTsKKyAgICBKU09i
amVjdCogdHlwZSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT5vYmplY3RQcm90b3R5cGUoKSwgMSk7CisgICAgdHlwZS0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFyYW1ldGVycyIpLCBwYXJhbWV0ZXJzKTsKKworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0eXBlKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQ
cm90b3R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFn
UHJvdG90eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI0MzJmOWM4OWJkY2RhN2RjN2I5NDE4NDc2MmIyNTI2
YjU5YmI2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSwgQmFzZSk7CisgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisKKyAgICBzdGF0aWMgV2ViQXNz
ZW1ibHlUYWdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
Kik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBX
ZWJBc3NlbWJseVRhZ1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
d2FzbS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCmluZGV4IDRm
OGRkOWUzZDIxMzQzNTAwMDAwNmUyNDE0NmIwMTk0YzlhYzg4ZjEuLmE0MzUxMGY0Zjg0NzMwMzg2
NDNjMTY1YzNjMzA4MTQ4ZjA3NTA0YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL3dhc20uanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpz
b24KQEAgLTIzLDM0ICsyMywzOCBAQAogICAgICJibG9ja190eXBlIjogWyJpMzIiLCAiaTY0Iiwg
ImYzMiIsICJmNjQiLCAidm9pZCIsICJleHRlcm5yZWYiLCAiZnVuY3JlZiJdLAogICAgICJyZWZf
dHlwZSI6IFsiZnVuY3JlZiIsICJleHRlcm5yZWYiLCAidHlwZV9pZHgiXSwKICAgICAiZXh0ZXJu
YWxfa2luZCI6IHsKLSAgICAgICAgIkZ1bmN0aW9uIjogeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1
ZSI6IDAgfSwKLSAgICAgICAgIlRhYmxlIjogICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6
IDEgfSwKLSAgICAgICAgIk1lbW9yeSI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDIg
fSwKLSAgICAgICAgIkdsb2JhbCI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDMgfQor
ICAgICAgICAiRnVuY3Rpb24iOiAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMCB9LAor
ICAgICAgICAiVGFibGUiOiAgICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMSB9LAor
ICAgICAgICAiTWVtb3J5IjogICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMiB9LAor
ICAgICAgICAiR2xvYmFsIjogICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMyB9LAor
ICAgICAgICAiRXhjZXB0aW9uIjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogNCB9CiAg
ICAgfSwKICAgICAic2VjdGlvbiIgOiB7Ci0gICAgICAgICJUeXBlIjogICAgIHsgInR5cGUiOiAi
dmFydWludDciLCAidmFsdWUiOiAgMSwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIHNpZ25hdHVy
ZSBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJJbXBvcnQiOiAgIHsgInR5cGUiOiAidmFydWlu
dDciLCAidmFsdWUiOiAgMiwgImRlc2NyaXB0aW9uIjogIkltcG9ydCBkZWNsYXJhdGlvbnMiIH0s
Ci0gICAgICAgICJGdW5jdGlvbiI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMywg
ImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAgIlRhYmxl
IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA0LCAiZGVzY3JpcHRpb24iOiAi
SW5kaXJlY3QgZnVuY3Rpb24gdGFibGUgYW5kIG90aGVyIHRhYmxlcyIgfSwKLSAgICAgICAgIk1l
bW9yeSI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA1LCAiZGVzY3JpcHRpb24i
OiAiTWVtb3J5IGF0dHJpYnV0ZXMiIH0sCi0gICAgICAgICJHbG9iYWwiOiAgIHsgInR5cGUiOiAi
dmFydWludDciLCAidmFsdWUiOiAgNiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlv
bnMiIH0sCi0gICAgICAgICJFeHBvcnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAgNywgImRlc2NyaXB0aW9uIjogIkV4cG9ydHMiIH0sCi0gICAgICAgICJTdGFydCI6ICAgIHsg
InR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IGZ1
bmN0aW9uIGRlY2xhcmF0aW9uIiB9LAotICAgICAgICAiRWxlbWVudCI6ICB7ICJ0eXBlIjogInZh
cnVpbnQ3IiwgInZhbHVlIjogIDksICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9uIiB9
LAotICAgICAgICAiQ29kZSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTAs
ICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBib2RpZXMgKGNvZGUpIiB9LAotICAgICAgICAiRGF0
YSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlwdGlvbiI6
ICJEYXRhIHNlZ21lbnRzIiB9CisgICAgICAgICJUeXBlIjogICAgICB7ICJ0eXBlIjogInZhcnVp
bnQ3IiwgInZhbHVlIjogIDEsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBzaWduYXR1cmUgZGVj
bGFyYXRpb25zIiB9LAorICAgICAgICAiSW1wb3J0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIs
ICJ2YWx1ZSI6ICAyLCAiZGVzY3JpcHRpb24iOiAiSW1wb3J0IGRlY2xhcmF0aW9ucyIgfSwKKyAg
ICAgICAgIkZ1bmN0aW9uIjogIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMywgImRl
c2NyaXB0aW9uIjogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIlRhYmxlIjog
ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNCwgImRlc2NyaXB0aW9uIjogIklu
ZGlyZWN0IGZ1bmN0aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMiIH0sCisgICAgICAgICJNZW1v
cnkiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDUsICJkZXNjcmlwdGlvbiI6
ICJNZW1vcnkgYXR0cmlidXRlcyIgfSwKKyAgICAgICAgIkdsb2JhbCI6ICAgIHsgInR5cGUiOiAi
dmFydWludDciLCAidmFsdWUiOiAgNiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlv
bnMiIH0sCisgICAgICAgICJFeHBvcnQiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogIDcsICJkZXNjcmlwdGlvbiI6ICJFeHBvcnRzIiB9LAorICAgICAgICAiU3RhcnQiOiAgICAg
eyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA4LCAiZGVzY3JpcHRpb24iOiAiU3RhcnQg
ZnVuY3Rpb24gZGVjbGFyYXRpb24iIH0sCisgICAgICAgICJFbGVtZW50IjogICB7ICJ0eXBlIjog
InZhcnVpbnQ3IiwgInZhbHVlIjogIDksICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9u
IiB9LAorICAgICAgICAiQ29kZSI6ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6
IDEwLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gYm9kaWVzIChjb2RlKSIgfSwKKyAgICAgICAg
IkRhdGEiOiAgICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMSwgImRlc2NyaXB0
aW9uIjogIkRhdGEgc2VnbWVudHMiIH0sCisgICAgICAgICJEYXRhQ291bnQiOiB7ICJ0eXBlIjog
InZhcnVpbnQ3IiwgInZhbHVlIjogMTIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgZGF0YSBz
ZWdtZW50cyIgfSwKKyAgICAgICAgIkV4Y2VwdGlvbiI6IHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAxMywgImRlc2NyaXB0aW9uIjogIkV4Y2VwdGlvbiBkZWNsYXJhdGlvbnMiIH0KICAg
ICB9LAogICAgICJvcGNvZGUiOiB7CiAgICAgICAgICJ1bnJlYWNoYWJsZSI6ICAgICAgICAgeyAi
Y2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMCwgInJldHVybiI6IFtdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAidHJhcCBpbW1lZGlhdGVseSIgfSwKKyAgICAgICAgIm5v
cCI6ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjog
ICAxLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0
ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJubyBvcGVyYXRp
b24iIH0sCiAgICAgICAgICJibG9jayI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29u
dHJvbCIsICAgICJ2YWx1ZSI6ICAgMiwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAg
ICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiYmVnaW4gYSBzZXF1ZW5jZSBvZiBleHByZXNzaW9ucywgeWllbGRpbmcgMCBvciAx
IHZhbHVlcyIgfSwKICAgICAgICAgImxvb3AiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6
ICJjb250cm9sIiwgICAgInZhbHVlIjogICAzLCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAg
ICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJiZWdpbiBhIGJsb2NrIHdoaWNoIGNhbiBhbHNvIGZvcm0gY29udHJvbCBm
bG93IGxvb3BzIiB9LAogICAgICAgICAiaWYiOiAgICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5
IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDQsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAg
ICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYm9vbCJdLCAgICAgICAgICAgICAgICAg
ICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogImJlZ2luIGlmIGV4cHJlc3Npb24iIH0sCiAgICAgICAgICJlbHNlIjog
ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNSwg
InJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gZWxzZSBleHBy
ZXNzaW9uIG9mIGlmIiB9LAotICAgICAgICAic2VsZWN0IjogICAgICAgICAgICAgIHsgImNhdGVn
b3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4iOiBbInByZXYiXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJd
LCAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVlcyBiYXNlZCBvbiBjb25k
aXRpb24iIH0sCi0gICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAgeyAiY2F0ZWdvcnkiOiAi
Y29udHJvbCIsICAgICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAg
ICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291bnQiLCAidHlwZSI6ICJ2
YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldCB0eXBlcyB2ZWN0b3Ii
fSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeyJuYW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0eXBlIjogInZhbHVlX3R5
cGUqIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJ0YXJnZXQgdHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Ygc2VsZWN0IGluc3RydWN0
aW9uIn1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogInRoZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRoIHRoZSBhbm5vdGF0aW9u
IGZvciByZXN1bHQgdHlwZXMiIH0sCisgICAgICAgICJ0cnkiOiAgICAgICAgICAgICAgICAgeyAi
Y2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNiwgInJldHVybiI6IFsiY29udHJv
bCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9j
a190eXBlIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gdHJ5IGV4cHJlc3Npb24iIH0sCisgICAgICAg
ICJjYXRjaCI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1
ZSI6ICAgNywgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFy
YW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3si
bmFtZSI6ICJleG4iLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4g
Y2F0Y2ggZXhwcmVzc2lvbiBvZiB0cnkiIH0sCisgICAgICAgICJ0aHJvdyI6ICAgICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgOCwgInJldHVybiI6IFsi
Y29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4iLCAidHlwZSI6
ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhyb3cgZXhjZXB0aW9uIiB9LAorICAgICAg
ICAicmV0aHJvdyI6ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFs
dWUiOiAgIDksICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBh
cmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7
Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInJldGhy
b3cgdGhlIGV4Y2VwdGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayIgfSwKICAgICAgICAgImJy
IjogICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjog
IDEyLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0
ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1l
IjogInJlbGF0aXZlX2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJicmVhayB0aGF0
IHRhcmdldHMgYW4gb3V0ZXIgbmVzdGVkIGJsb2NrIiB9LAogICAgICAgICAiYnJfaWYiOiAgICAg
ICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTMsICJyZXR1
cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRp
dmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImNvbmRpdGlvbmFsIGJyZWFrIHRo
YXQgdGFyZ2V0cyBhbiBvdXRlciBuZXN0ZWQgYmxvY2siIH0sCiAgICAgICAgICJicl90YWJsZSI6
ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxNCwgInJl
dHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJn
ZXRfY291bnQiLCAgICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMg
aW4gdGhlIHRhcmdldF90YWJsZSJ9LApAQCAtNTgsOCArNjIsMTMgQEAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjog
ImRlZmF1bHRfdGFyZ2V0IiwgInR5cGUiOiAidmFydWludDMyIiwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhbiBvdXRlciBibG9j
ayBvciBsb29wIHRvIHdoaWNoIHRvIGJyZWFrIGluIHRoZSBkZWZhdWx0IGNhc2UifV0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYnJh
bmNoIHRhYmxlIGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3QiIH0sCiAgICAgICAgICJyZXR1cm4iOiAg
ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxNSwgInJl
dHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAicmV0dXJuIHplcm8gb3Igb25l
IHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbiIgfSwKKyAgICAgICAgImRlbGVnYXRlIjogICAgICAg
ICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI0LCAicmV0dXJuIjog
WyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2Rl
cHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJkZWxlZ2F0ZSB0byBhIHBhcmVudCB0cnkg
YmxvY2siIH0sCisgICAgICAgICJjYXRjaF9hbGwiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
Y29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNSwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAg
ICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiY2F0Y2ggZXhjZXB0aW9ucyByZWdhcmRsZXNzIG9mIHRhZyIgfSwKICAgICAg
ICAgImRyb3AiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZh
bHVlIjogIDI2LCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw
YXJhbWV0ZXIiOiBbImFueSJdLCAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJpZ25v
cmUgdmFsdWUiIH0sCi0gICAgICAgICJub3AiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnki
OiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMSwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAibm8gb3BlcmF0aW9uIiB9LAorICAgICAgICAic2VsZWN0IjogICAgICAg
ICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4i
OiBbInByZXYiXSwgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55Iiwg
InByZXYiLCAiYm9vbCJdLCAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVl
cyBiYXNlZCBvbiBjb25kaXRpb24iIH0sCisgICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJl
diJdLCAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIs
ICJib29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291
bnQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdl
dCB0eXBlcyB2ZWN0b3IifSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0
eXBlIjogInZhbHVlX3R5cGUqIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJ0YXJnZXQgdHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Yg
c2VsZWN0IGluc3RydWN0aW9uIn1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRo
IHRoZSBhbm5vdGF0aW9uIGZvciByZXN1bHQgdHlwZXMiIH0sCiAgICAgICAgICJlbmQiOiAgICAg
ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMSwgInJl
dHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZW5kIGEgYmxvY2ssIGxvb3As
IG9yIGlmIiB9LAogICAgICAgICAiaTMyLmNvbnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5Ijog
InNwZWNpYWwiLCAgICAidmFsdWUiOiAgNjUsICJyZXR1cm4iOiBbImkzMiJdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJp
bnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogImEgY29uc3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTMyIiB9LAogICAg
ICAgICAiaTY0LmNvbnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAi
dmFsdWUiOiAgNjYsICJyZXR1cm4iOiBbImk2NCJdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
InBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6
IFt7Im5hbWUiOiAidmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJpbnQ2NCJ9XSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImEg
Y29uc3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTY0IiB9LApkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGE5NDVhMGRhMzNiODNmNmJhZjM2Y2Nl
NzA3ZDdjMDcxYTQ5MWE5NzAuLmEyZmZmMWI3ZGNkNGUwMGNjODFkZGQzNWZlYzBhOWY3MzlhN2Jk
MzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMyBAQAorMjAyMS0xMC0wNSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxl
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlvbiBoYW5k
bGluZyBwcm9wb3NhbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI5NjgxCisgICAgICAgIDxyZGFyOi8vODE2MDMzODc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNz
LXRlc3RzOgorCiAyMDIxLTEwLTA2ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
IAogICAgICAgICBJbXBsZW1lbnQgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3B1c2gtYXBpLyNyZWNl
aXZpbmctYS1wdXNoLW1lc3NhZ2UKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1z
dHJlc3MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IGUw
ODE2ZGMwNTYxYjE4MGE5ZWZiNjY3OGRiODJjYzY0NmUxOWI0ODEuLmRkZjk0N2RlYjc3MjM4MmIy
ODk2MDk3ZGE2NGMxM2I4MGNhMmFmMTggMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1zdHJlc3MtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpA
QCAtMTIyNywxNiArMTIyNywyMSBAQCBkZWYgcnVuV2ViQXNzZW1ibHlTdWl0ZSgqb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKQogICAgIG1vZHVsZXMgPSBEaXJbV0FTTVRFU1RTX1BBVEggKyAi
Ki5qcyJdLm1hcCB7IHxmfCBGaWxlLmJhc2VuYW1lKGYpIH0KICAgICBwcmVwYXJlRXh0cmFBYnNv
bHV0ZUZpbGVzKFdBU01URVNUU19QQVRILCBbIndhc20uanNvbiJdKQogICAgIHByZXBhcmVFeHRy
YVJlbGF0aXZlRmlsZXMobW9kdWxlcy5tYXAgeyB8ZnwgIi4uLyIgKyBmIH0sICRjb2xsZWN0aW9u
KQotICAgIHJ1bigiZGVmYXVsdC13YXNtIiwgIi1tIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgaWYgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
WzBdID09IDpub19tb2R1bGUKKyAgICAgIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucy5zaGlm
dAorICAgIGVsc2UKKyAgICAgIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucy51bnNoaWZ0ICIt
bSIKKyAgICBlbmQKKyAgICBydW4oImRlZmF1bHQtd2FzbSIsICooRlRMX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgIGlmICRtb2RlICE9ICJxdWljayIKLSAgICAg
ICAgcnVuKCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRM
U0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyIiwg
Ii1tIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLW0iLCAiLS1m
b3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXpp
bmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgIi0tdmVyaWZ5R0M9dHJ1ZSIsICoo
RlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4o
Indhc20tbm8tdGxzLWNvbnRleHQiLCAiLW0iLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9
ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAg
ICAgICAgcnVuKCJ3YXNtLXNsb3ctbWVtb3J5IiwgIi1tIiwgIi0tdXNlV2ViQXNzZW1ibHlGYXN0
TWVtb3J5PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykpCi0gICAgICAgIHJ1bigid2FzbS1iMyIsICItbSIsICItLXVzZVdhc21MTEludD1mYWxzZSIs
ICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigid2FzbS1haXIiLCAiLW0iLCAiLS11c2VXYXNt
TExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9u
PXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAg
ICAgICAgcnVuKCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5IiwgIi1tIiwgIi0tY29sbGVjdENv
bnRpbnVvdXNseT10cnVlIiwgIi0tdmVyaWZ5R0M9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKSBpZiBzaG91bGRDb2xsZWN0Q29udGludW91c2x5Pwor
ICAgICAgICBydW4oIndhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExT
Rm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tZWFnZXIiLCAq
KEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykpCisgICAgICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItLWZvcmNlQ29kZUJsb2Nr
VG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJ
c2xhbmRBbGxvY2F0aW9uPXRydWUiLCAiLS12ZXJpZnlHQz10cnVlIiwgKihGVExfT1BUSU9OUyAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1uby10bHMt
Y29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICooRlRMX09QVElP
TlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tc2xv
dy1tZW1vcnkiLCAiLS11c2VXZWJBc3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqKEZUTF9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWIz
IiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0td2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqKEZU
TF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3
YXNtLWFpciIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0
YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHki
LCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAiLS12ZXJpZnlHQz10cnVlIiwgKihGVExf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpIGlmIHNob3VsZENvbGxlY3RD
b250aW51b3VzbHk/CiAgICAgZW5kCiBlbmQKIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VM
b2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBjZDI3ZDNmYWVkYTY5Y2Q5NGUzMWNiZjBhODMx
MTc3MzJmOTg4ZWFlLi45NzQ2OTEwMGYzM2UyMTMwYTI4MjhhMDVjNjNmYjg4Y2ZlYjEzZDZmIDEw
MDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDMzNiBAQAorMjAyMS0xMC0wNSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxl
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlvbiBoYW5k
bGluZyBwcm9wb3NhbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI5NjgxCisgICAgICAgIDxyZGFyOi8vODE2MDMzODc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG5ldyB0ZXN0cyBmb3IgdGhlIGV4
Y2VwdGlvbiBoYW5kbGluZyBhbmQgaW1wb3J0IGEgc2V0IG9mIHRlc3RzIHVzZWQgYnkgVjggaW50
byB3YXNtL3Y4LgorCisgICAgICAgICogd2FzbS55YW1sOgorICAgICAgICAqIHdhc20vQnVpbGRl
ci5qczoKKyAgICAgICAgKGNvbnN0Ll9pbXBvcnRFeGNlcHRpb25Db250aW51YXRpb24udHlwZS5J
bXBvcnQuZmllbGQpOgorICAgICAgICAoZXhwb3J0LmRlZmF1bHQuQnVpbGRlci5wcm90b3R5cGUu
X3JlZ2lzdGVyU2VjdGlvbkJ1aWxkZXJzLmNvbnN0LnNlY3Rpb24uaW4uV0FTTS5kZXNjcmlwdGlv
bi5zZWN0aW9uLnN3aXRjaC5zZWN0aW9uLmNhc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUudGhpcy5z
ZWN0aW9uKToKKyAgICAgICAgKGNvbnN0Ll9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbi50eXBl
LkV4cG9ydC5maWVsZCk6IERlbGV0ZWQuCisgICAgICAgIChjb25zdC5fZXhwb3J0RnVuY3Rpb25D
b250aW51YXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vQnVpbGRlcl9XZWJBc3NlbWJs
eUJpbmFyeS5qczoKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkltcG9ydCk6CisgICAgICAgIChj
b25zdC5lbWl0dGVycy5FeHBvcnQpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuRXhjZXB0aW9u
KToKKyAgICAgICAgKiB3YXNtL2Fzc2VydC5qczoKKyAgICAgICAgKiB3YXNtL3NlbGYtdGVzdC90
ZXN0X0J1aWxkZXJKU09OLmpzOgorICAgICAgICAoSW1wb3J0QmVmb3JlVHlwZVNlY3Rpb25zKTog
RGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL3N0cmVzcy9jYXRjaC13aXRoLWRlbGVnYXRlLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUu
aW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAg
ICAgICAgKGFzc2VydC50aHJvd3MpOgorICAgICAgICAqIHdhc20vc3RyZXNzL2NyZWF0ZS10YWct
ZnJvbS5qczogQWRkZWQuCisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWlu
c3RhbmNlLTIuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgIChhc3NlcnQuZXEp
OgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0zLmpzOiBB
ZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAgICAgICAoYXNzZXJ0LmVxKToKKyAgICAgICAgKiB3
YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UuanM6IEFkZGVkLgorICAgICAgICAo
dGVzdCk6CisgICAgICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAgICAgKGluc3RCLm5ldy5XZWJB
c3NlbWJseS5JbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWxpdmVu
ZXNzLXRpZXItdXAuanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJp
bmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hl
cmUuY2F0Y2gpOgorICAgICAgICAoYXNzZXJ0LmVxLik6CisgICAgICAgIChhc3NlcnQuZXEpOgor
ICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi1tdWx0aXBsZS1pbnN0YW5jZXMuanM6IEFk
ZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5p
bXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY29uc3QubW9kdWxlLm5l
dy5XZWJBc3NlbWJseS5Nb2R1bGUpOgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJp
bmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hl
cmUuaW5zdC5leHBvcnRzLnRocm93KToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24t
c2ltcGxlLWRlbGVnYXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20u
c3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJl
ZF9oZXJlLnRlc3RTaW1wbGVUaHJvd0RlbGVnYXRlKToKKyAgICAgICAgKHRlc3RUaHJvd0RlbGVn
YXRlU2tpcCk6CisgICAgICAgICh0ZXN0RGVsZWdhdGVDYWxsZXIpOgorICAgICAgICAodGVzdFNp
bXBsZURlbGVnYXRlTWVyZ2UpOgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1w
bGUtdGhyb3ctY2F0Y2guanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5z
dHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVk
X2hlcmUudGVzdFNpbXBsZVRyeUNhdGNoKToKKyAgICAgICAgKHRlc3RTaW1wbGVUcnlDYXRjaEFs
bCk6CisgICAgICAgICh0ZXN0Q2FsbFRyeUNhdGNoKToKKyAgICAgICAgKHRlc3RDYWxsVHJ5Q2F0
Y2hBbGwpOgorICAgICAgICAodGVzdFNpbXBsZVRyeUNhdGNoVmFsdWUpOgorICAgICAgICAodGVz
dENhbGxUcnlDYXRjaFZhbHVlKToKKyAgICAgICAgKHRlc3RTdGFja1RyeUNhdGNoKToKKyAgICAg
ICAgKHRlc3RMaXZlQWZ0ZXJUcnlDYXRjaCk6CisgICAgICAgICh0ZXN0TGl2ZUFmdGVyVHJ5Q2F0
Y2hBbGwpOgorICAgICAgICAodGVzdFVuaWZ5VHJ5Q2F0Y2hDYXRjaCk6CisgICAgICAgICh0ZXN0
VW5pZnlUcnlDYXRjaENhdGNoQWxsKToKKyAgICAgICAgKHRlc3RVbmlmeVRyeU5vVGhyb3cpOgor
ICAgICAgICAodGVzdFVuaWZ5VHJ5Tm9DYXRjaCk6CisgICAgICAgICh0ZXN0TmVzdGVkQ2F0Y2gp
OgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNt
LWNhdGNoYWxsLXJldGhyb3cuanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJv
bS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVh
cmVkX2hlcmUuY2FsbGJhY2spOgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJv
d24tZnJvbS1qcy10by13YXNtLWNhdGNoYWxsLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5C
dWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0
cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNl
cHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQu
QnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5z
dHJpbmdfYXBwZWFyZWRfaGVyZS5jYWxsYmFjayk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhj
ZXB0aW9uLXRocm93bi1vdXQtb2Ytd2FzbS5qczogQWRkZWQuCisgICAgICAgICogd2FzbS9zdHJl
c3MvZXhjZXB0aW9uLXRocm93bi1vdmVyLXdhc20uanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0
LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20u
c3RyaW5nX2FwcGVhcmVkX2hlcmUuY2FsbGJhY2spOgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4
Y2VwdGlvbi10cmFwLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3Ry
aW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9o
ZXJlLnRlc3RDYW5ub3RDYXRjaFVucmVhY2hhYmxlKToKKyAgICAgICAgKHRlc3RDYW5ub3RDYXRj
aE9PQik6CisgICAgICAgICh0ZXN0V2FzbUFQSVRocm93KToKKyAgICAgICAgKHRlc3RKU0NhdGNo
QW5kUmV0aHJvdyk6CisgICAgICAgICogd2FzbS9zdHJlc3MvcmV0aHJvdy1mcm9tLWNhdGNoLXRv
LWNhdGNoLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2Fw
cGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNh
bGxiYWNrKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9yZXRocm93LXRvLWNhdGNoLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1w
b3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAg
ICAgKGFzc2VydC50aHJvd3MuY2FsbGJhY2spOgorICAgICAgICAoYXNzZXJ0LnRocm93cyk6Cisg
ICAgICAgICogd2FzbS9zdHJlc3MvcmV0aHJvdy10by1kZWxlZ2F0ZS10by1jYXRjaC5qczogQWRk
ZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmlt
cG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZSk6CisgICAgICAgIChhc3Nl
cnQuZXEuZXhuLmdldEFyZyk6CisgICAgICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAgICAgKGFz
c2VydC50aHJvd3MuY2FsbGJhY2spOgorICAgICAgICAoYXNzZXJ0LmVxKToKKyAgICAgICAgKiB3
YXNtL3N0cmVzcy9zaW1wbGUtZXhwb3J0LWV4Y2VwdGlvbi5qczogQWRkZWQuCisgICAgICAgICog
d2FzbS92OC9MSUNFTlNFOiBBZGRlZC4KKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMtYXBp
LmpzOiBBZGRlZC4KKyAgICAgICAgKFRlc3RJbXBvcnQpOgorICAgICAgICAoVGVzdEltcG9ydEV4
cG9ydCk6CisgICAgICAgIChUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoVGVz
dEV4Y2VwdGlvbkNvbnN0cnVjdG9yV2l0aFBheWxvYWQpOgorICAgICAgICAoVGVzdENhdGNoSlNF
eGNlcHRpb24uanNfZnVuYyk6CisgICAgICAgIChqc19mdW5jKToKKyAgICAgICAgKFRlc3RDYXRj
aEpTKToKKyAgICAgICAgKFRlc3RDYXRjaEpTRXhjZXB0aW9uV2l0aFBheWxvYWQpOgorICAgICAg
ICAoVGVzdEdldEFyZyk6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLWV4cG9ydC5qczog
QWRkZWQuCisgICAgICAgIChUZXN0RXhwb3J0TXVsdGlwbGUpOgorICAgICAgICAoVGVzdEV4cG9y
dE91dE9mQm91bmRzKToKKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMtZXh0ZXJucmVmLmpz
OiBBZGRlZC4KKyAgICAgICAgKFRlc3RUaHJvd1JlZk51bGwpOgorICAgICAgICAoVGVzdFRocm93
UmVmUGFyYW0pOgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy1pbXBvcnQuanM6IEFkZGVk
LgorICAgICAgICAoTmV3RXhwb3J0ZWRUYWcpOgorICAgICAgICAoVGVzdEltcG9ydFNpbXBsZSk6
CisgICAgICAgIChUZXN0SW1wb3J0TWlzc2luZyk6CisgICAgICAgICogd2FzbS92OC9leGNlcHRp
b25zLXJldGhyb3cuanM6IEFkZGVkLgorICAgICAgICAoVGVzdFJldGhyb3dJbkNhdGNoKToKKyAg
ICAgICAgKFRlc3RSZXRocm93SW5DYXRjaEFsbCk6CisgICAgICAgIChUZXN0UmV0aHJvd05lc3Rl
ZCk6CisgICAgICAgIChUZXN0UmV0aHJvd1JlY2F0Y2gpOgorICAgICAgICAqIHdhc20vdjgvZXhj
ZXB0aW9ucy1zaGFyZWQuanM6IEFkZGVkLgorICAgICAgICAoTmV3RXhwb3J0ZWRFeGNlcHRpb24p
OgorICAgICAgICAoVGVzdFNpbmdsZUluc3RhbmNlLmxldC5pbnN0YW5jZS5idWlsZGVyLmluc3Rh
bnRpYXRlLik6CisgICAgICAgIChUZXN0U2luZ2xlSW5zdGFuY2UpOgorICAgICAgICAoVGVzdE11
bHRpSW5zdGFuY2VOb25TaGFyZWQubGV0Lmluc3RhbmNlMi5idWlsZGVyLmluc3RhbnRpYXRlLik6
CisgICAgICAgIChUZXN0TXVsdGlJbnN0YW5jZVNoYXJlZC5sZXQuaW5zdGFuY2UyLmJ1aWxkZXIu
aW5zdGFudGlhdGUuKToKKyAgICAgICAgKFRlc3RNdWx0aU1vZHVsZVNoYXJlZC5sZXQuaW5zdGFu
Y2UyLmJ1aWxkZXIyLmluc3RhbnRpYXRlLik6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25z
LXR5cGUtcmVmbGVjdGlvbi5qczogQWRkZWQuCisgICAgICAgIChUZXN0RXhwb3J0KToKKyAgICAg
ICAgKFRlc3RJbXBvcnRFeHBvcnQpOgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy11dGls
cy5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnRXYXNtVGhyb3dzKToKKyAgICAgICAgKiB3YXNt
L3Y4L2V4Y2VwdGlvbnMuanM6IEFkZGVkLgorICAgICAgICAoVGVzdFRocm93U2ltcGxlKToKKyAg
ICAgICAgKFRlc3RDYXRjaFNpbXBsZSk6CisgICAgICAgIChUZXN0VHJhcE5vdENhdWdodCk6Cisg
ICAgICAgIChUZXN0VHJhcFZpYUpTTm90Q2F1Z2h0LmpzX2ltcG9ydCk6CisgICAgICAgIChUZXN0
TWFudWFsbHlUaHJvd25SdW50aW1lRXJyb3JDYXVnaHQudGhyb3dfZXhjKToKKyAgICAgICAgKFRl
c3RNYW51YWxseVRocm93blJ1bnRpbWVFcnJvckNhdWdodCk6CisgICAgICAgIChUZXN0RXhuV2l0
aFdhc21Qcm90b05vdENhdWdodC5qc19pbXBvcnQpOgorICAgICAgICAoVGVzdEV4bldpdGhXYXNt
UHJvdG9Ob3RDYXVnaHQpOgorICAgICAgICAoVGVzdFN0YWNrT3ZlcmZsb3dOb3RDYXVnaHQuc3Rh
Y2tfb3ZlcmZsb3cpOgorICAgICAgICAoVGVzdFN0YWNrT3ZlcmZsb3dOb3RDYXVnaHQpOgorICAg
ICAgICAoVGVzdFRocm93UGFyYW1JKToKKyAgICAgICAgKFRlc3RUaHJvd1BhcmFtRik6CisgICAg
ICAgIChUZXN0VGhyb3dQYXJhbUwpOgorICAgICAgICAoVGVzdFRocm93UGFyYW1EKToKKyAgICAg
ICAgKFRlc3RDYXRjaENyb3NzRnVuY3Rpb25zLnRocm93X3ZhbHVlKToKKyAgICAgICAgKFRlc3RD
YXRjaENyb3NzRnVuY3Rpb25zLnRocm93X3N0cmluZyk6CisgICAgICAgIChUZXN0Q2F0Y2hDcm9z
c0Z1bmN0aW9ucy50aHJvd191bmRlZmluZWQpOgorICAgICAgICAoVGVzdENhdGNoQ3Jvc3NGdW5j
dGlvbnMudGhyb3dfZnApOgorICAgICAgICAoVGVzdENhdGNoQ3Jvc3NGdW5jdGlvbnMudGhyb3df
bGFyZ2UpOgorICAgICAgICAoVGVzdERlbGVnYXRlTm9UaHJvdyk6CisgICAgICAgIChUZXN0RGVs
ZWdhdGVUaHJvdyk6CisgICAgICAgIChUZXN0RGVsZWdhdGVUaHJvd05vQ2F0Y2gpOgorICAgICAg
ICAoVGVzdERlbGVnYXRlTWVyZ2UpOgorICAgICAgICAoVGVzdERlbGVnYXRlMSk6CisgICAgICAg
IChUZXN0RGVsZWdhdGVVbnJlYWNoYWJsZSk6CisgICAgICAgIChUZXN0RGVsZWdhdGVUb0NhbGxl
cik6CisgICAgICAgIChUZXN0VW5yZWFjaGFibGVJbkNhdGNoQWxsKToKKyAgICAgICAgKFRlc3RU
aHJvd1dpdGhMb2NhbCk6CisgICAgICAgIChUZXN0Q2F0Y2hsZXNzVHJ5KToKKyAgICAgICAgKiB3
YXNtL3Y4L21qc3VuaXQuanM6IEFkZGVkLgorICAgICAgICAoTWpzVW5pdEFzc2VydGlvbkVycm9y
KToKKyAgICAgICAgKE1qc1VuaXRBc3NlcnRpb25FcnJvci5wcm90b3R5cGUudG9TdHJpbmcpOgor
ICAgICAgICAoY2F0Y2gpOgorICAgICAgICAoY2xhc3NPZik6CisgICAgICAgIChWYWx1ZU9mKToK
KyAgICAgICAgKHByZXR0eVByaW50ZWQpOgorICAgICAgICAocHJldHR5UHJpbnRlZEFycmF5RWxl
bWVudCk6CisgICAgICAgIChmYWlsV2l0aE1lc3NhZ2UpOgorICAgICAgICAoZm9ybWF0RmFpbHVy
ZVRleHQpOgorICAgICAgICAoZmFpbCk6CisgICAgICAgIChkZWVwT2JqZWN0RXF1YWxzKToKKyAg
ICAgICAgKGRlZXBFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0U2FtZSk6CisgICAgICAgIChhc3Nl
cnROb3RTYW1lKToKKyAgICAgICAgKGFzc2VydEVxdWFscyk6CisgICAgICAgIChhc3NlcnROb3RF
cXVhbHMpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzRGVsdGEpOgorICAgICAgICAoYXNzZXJ0QXJy
YXlFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0UHJvcGVydGllc0VxdWFsKToKKyAgICAgICAgKGFz
c2VydFRvU3RyaW5nRXF1YWxzKToKKyAgICAgICAgKGFzc2VydFRydWUpOgorICAgICAgICAoYXNz
ZXJ0RmFsc2UpOgorICAgICAgICAoYXNzZXJ0TnVsbCk6CisgICAgICAgIChhc3NlcnROb3ROdWxs
KToKKyAgICAgICAgKGV4ZWN1dGVDb2RlKToKKyAgICAgICAgKGNoZWNrRXhjZXB0aW9uKToKKyAg
ICAgICAgKGFzc2VydFRocm93cyk6CisgICAgICAgIChhc3NlcnRUaHJvd3NFcXVhbHMpOgorICAg
ICAgICAoYXNzZXJ0VGhyb3dzQXN5bmMpOgorICAgICAgICAoYXNzZXJ0SW5zdGFuY2VvZik6Cisg
ICAgICAgIChhc3NlcnREb2VzTm90VGhyb3cpOgorICAgICAgICAoYXNzZXJ0VW5yZWFjaGFibGUp
OgorICAgICAgICAoYXNzZXJ0Q29udGFpbnMpOgorICAgICAgICAoYXNzZXJ0TWF0Y2hlcyk6Cisg
ICAgICAgIChjb25jYXRlbmF0ZUVycm9ycyk6CisgICAgICAgIChhc3NlcnRQcm9taXNlUmVzdWx0
KToKKyAgICAgICAgKE9wdGltaXphdGlvblN0YXR1cyk6CisgICAgICAgIChhc3NlcnRVbm9wdGlt
aXplZCk6CisgICAgICAgIChhc3NlcnRPcHRpbWl6ZWQpOgorICAgICAgICAoaXNOZXZlck9wdGlt
aXplTGl0ZU1vZGUpOgorICAgICAgICAoaXNOZXZlck9wdGltaXplKToKKyAgICAgICAgKGlzQWx3
YXlzT3B0aW1pemUpOgorICAgICAgICAoaXNJbnRlcnByZXRlZCk6CisgICAgICAgIChpc0Jhc2Vs
aW5lKToKKyAgICAgICAgKGlzVW5vcHRpbWl6ZWQpOgorICAgICAgICAoaXNPcHRpbWl6ZWQpOgor
ICAgICAgICAoaXNUdXJib0Zhbm5lZCk6CisgICAgICAgIChNanNVbml0QXNzZXJ0aW9uRXJyb3Iu
cHJlcGFyZVN0YWNrVHJhY2UpOgorICAgICAgICAqIHdhc20vdjgvd2FzbS1tb2R1bGUtYnVpbGRl
ci5qczogQWRkZWQuCisgICAgICAgIChieXRlcyk6CisgICAgICAgICh3YXNtT3B0UmVmVHlwZSk6
CisgICAgICAgICh3YXNtUmVmVHlwZSk6CisgICAgICAgICh3YXNtUnR0KToKKyAgICAgICAgKHdh
c21SdHROb0RlcHRoKToKKyAgICAgICAgKG1ha2VTaWcpOgorICAgICAgICAobWFrZVNpZ192X3gp
OgorICAgICAgICAobWFrZVNpZ194X3YpOgorICAgICAgICAobWFrZVNpZ192X3h4KToKKyAgICAg
ICAgKG1ha2VTaWdfcl92KToKKyAgICAgICAgKG1ha2VTaWdfcl94KToKKyAgICAgICAgKG1ha2VT
aWdfcl94eCk6CisgICAgICAgIChkZWZpbmVXYXNtT3Bjb2RlKToKKyAgICAgICAgKGFzc2VydFRy
YXBzKToKKyAgICAgICAgKEJpbmFyeSk6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVuc3Vy
ZV9zcGFjZSk6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLnRydW5jX2J1ZmZlcik6CisgICAg
ICAgIChCaW5hcnkucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUu
ZW1pdF91OCk6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfdTE2KToKKyAgICAgICAg
KEJpbmFyeS5wcm90b3R5cGUuZW1pdF91MzIpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5l
bWl0X2xlYl91KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF91MzJ2KToKKyAgICAg
ICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF91NjR2KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5
cGUuZW1pdF9ieXRlcyk6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfc3RyaW5nKToK
KyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF9oZWFwX3R5cGUpOgorICAgICAgICAoQmlu
YXJ5LnByb3RvdHlwZS5lbWl0X3R5cGUpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0
X2luaXRfZXhwcl9yZWN1cnNpdmUpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2lu
aXRfZXhwcik6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfaGVhZGVyKToKKyAgICAg
ICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF9zZWN0aW9uKToKKyAgICAgICAgKFdhc21GdW5jdGlv
bkJ1aWxkZXIpOgorICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUubnVtTG9j
YWxOYW1lcyk6CisgICAgICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5leHBvcnRB
cyk6CisgICAgICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5leHBvcnRGdW5jKToK
KyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLnNldENvbXBpbGF0aW9uSGlu
dCk6CisgICAgICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5hZGRCb2R5KToKKyAg
ICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLmFkZEJvZHlXaXRoRW5kKToKKyAg
ICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLmdldE51bUxvY2Fscyk6CisgICAg
ICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5hZGRMb2NhbHMpOgorICAgICAgICAo
V2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuZW5kKToKKyAgICAgICAgKFdhc21Jbml0RXhw
ci5JMzJDb25zdCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuSTY0Q29uc3QpOgorICAgICAgICAo
V2FzbUluaXRFeHByLkYzMkNvbnN0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5GNjRDb25zdCk6
CisgICAgICAgIChXYXNtSW5pdEV4cHIuUzEyOENvbnN0KToKKyAgICAgICAgKFdhc21Jbml0RXhw
ci5HbG9iYWxHZXQpOgorICAgICAgICAoV2FzbUluaXRFeHByLlJlZkZ1bmMpOgorICAgICAgICAo
V2FzbUluaXRFeHByLlJlZk51bGwpOgorICAgICAgICAoV2FzbUluaXRFeHByLlN0cnVjdE5ld1dp
dGhSdHQpOgorICAgICAgICAoV2FzbUluaXRFeHByLlN0cnVjdE5ldyk6CisgICAgICAgIChXYXNt
SW5pdEV4cHIuU3RydWN0TmV3RGVmYXVsdFdpdGhSdHQpOgorICAgICAgICAoV2FzbUluaXRFeHBy
LlN0cnVjdE5ld0RlZmF1bHQpOgorICAgICAgICAoV2FzbUluaXRFeHByLkFycmF5SW5pdCk6Cisg
ICAgICAgIChXYXNtSW5pdEV4cHIuQXJyYXlJbml0U3RhdGljKToKKyAgICAgICAgKFdhc21Jbml0
RXhwci5SdHRDYW5vbik6CisgICAgICAgIChXYXNtSW5pdEV4cHIuUnR0U3ViKToKKyAgICAgICAg
KFdhc21Jbml0RXhwci5SdHRGcmVzaFN1Yik6CisgICAgICAgIChXYXNtSW5pdEV4cHIuZGVmYXVs
dEZvcik6CisgICAgICAgIChXYXNtSW5pdEV4cHIpOgorICAgICAgICAoV2FzbUdsb2JhbEJ1aWxk
ZXIpOgorICAgICAgICAoV2FzbUdsb2JhbEJ1aWxkZXIucHJvdG90eXBlLmV4cG9ydEFzKToKKyAg
ICAgICAgKFdhc21UYWJsZUJ1aWxkZXIpOgorICAgICAgICAoV2FzbVRhYmxlQnVpbGRlci5wcm90
b3R5cGUuZXhwb3J0QXMpOgorICAgICAgICAobWFrZUZpZWxkKToKKyAgICAgICAgKFdhc21TdHJ1
Y3QpOgorICAgICAgICAoV2FzbVN0cnVjdFN1YnR5cGUpOgorICAgICAgICAoV2FzbUFycmF5KToK
KyAgICAgICAgKFdhc21BcnJheVN1YnR5cGUpOgorICAgICAgICAoV2FzbUVsZW1TZWdtZW50KToK
KyAgICAgICAgKFdhc21FbGVtU2VnbWVudC5wcm90b3R5cGUuaXNfYWN0aXZlKToKKyAgICAgICAg
KFdhc21FbGVtU2VnbWVudC5wcm90b3R5cGUuaXNfcGFzc2l2ZSk6CisgICAgICAgIChXYXNtRWxl
bVNlZ21lbnQucHJvdG90eXBlLmlzX2RlY2xhcmF0aXZlKToKKyAgICAgICAgKFdhc21FbGVtU2Vn
bWVudC5wcm90b3R5cGUuZXhwcmVzc2lvbnNfYXNfZWxlbWVudHMpOgorICAgICAgICAoV2FzbU1v
ZHVsZUJ1aWxkZXIpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZFN0
YXJ0KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRNZW1vcnkpOgor
ICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZE1lbW9yeTY0KToKKyAgICAg
ICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRFeHBsaWNpdFNlY3Rpb24pOgorICAg
ICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLnN0cmluZ1RvQnl0ZXMpOgorICAgICAg
ICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmNyZWF0ZUN1c3RvbVNlY3Rpb24pOgorICAg
ICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEN1c3RvbVNlY3Rpb24pOgorICAg
ICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZFR5cGUpOgorICAgICAgICAoV2Fz
bU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZFN0cnVjdCk6CisgICAgICAgIChXYXNtTW9kdWxl
QnVpbGRlci5wcm90b3R5cGUuYWRkU3RydWN0U3VidHlwZSk6CisgICAgICAgIChXYXNtTW9kdWxl
QnVpbGRlci5wcm90b3R5cGUuYWRkQXJyYXkpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIu
cHJvdG90eXBlLmFkZEFycmF5U3VidHlwZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5w
cm90b3R5cGUuYWRkR2xvYmFsKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlw
ZS5hZGRUYWJsZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkVGFn
KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRGdW5jdGlvbik6Cisg
ICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkSW1wb3J0KToKKyAgICAgICAg
KFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRJbXBvcnRlZEdsb2JhbCk6CisgICAgICAg
IChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkSW1wb3J0ZWRNZW1vcnkpOgorICAgICAg
ICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEltcG9ydGVkVGFibGUpOgorICAgICAg
ICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEltcG9ydGVkVGFnKToKKyAgICAgICAg
KFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRFeHBvcnQpOgorICAgICAgICAoV2FzbU1v
ZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEV4cG9ydE9mS2luZCk6CisgICAgICAgIChXYXNtTW9k
dWxlQnVpbGRlci5wcm90b3R5cGUuc2V0Q29tcGlsYXRpb25IaW50KToKKyAgICAgICAgKFdhc21N
b2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGREYXRhU2VnbWVudCk6CisgICAgICAgIChXYXNtTW9k
dWxlQnVpbGRlci5wcm90b3R5cGUuYWRkUGFzc2l2ZURhdGFTZWdtZW50KToKKyAgICAgICAgKFdh
c21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5leHBvcnRNZW1vcnlBcyk6CisgICAgICAgIChXYXNt
TW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkQWN0aXZlRWxlbWVudFNlZ21lbnQpOgorICAgICAg
ICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZFBhc3NpdmVFbGVtZW50U2VnbWVudCk6
CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkRGVjbGFyYXRpdmVFbGVt
ZW50U2VnbWVudCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYXBwZW5k
VG9UYWJsZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuc2V0VGFibGVC
b3VuZHMpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLnNldE5hbWUpOgor
ICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLnRvQnVmZmVyKToKKyAgICAgICAg
KFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS50b0FycmF5KToKKyAgICAgICAgKFdhc21Nb2R1
bGVCdWlsZGVyLnByb3RvdHlwZS5pbnN0YW50aWF0ZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVp
bGRlci5wcm90b3R5cGUuYXN5bmNJbnN0YW50aWF0ZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVp
bGRlci5wcm90b3R5cGUudG9Nb2R1bGUpOgorICAgICAgICAod2FzbVNpZ25lZExlYik6CisgICAg
ICAgICh3YXNtVW5zaWduZWRMZWIpOgorICAgICAgICAod2FzbUkzMkNvbnN0KToKKyAgICAgICAg
KHdhc21JNjRDb25zdCk6CisgICAgICAgICh3YXNtRjMyQ29uc3QpOgorICAgICAgICAod2FzbUY2
NENvbnN0KToKKyAgICAgICAgKHdhc21TMTI4Q29uc3QpOgorICAgICAgICAoZ2V0T3Bjb2RlTmFt
ZSk6CisgICAgICAgICogd2FzbS93YXNtLmpzb246CisKIDIwMjEtMTAtMDUgIFNhYW0gQmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgRG9uJ3QgcGFzcyBEb250QnVpbGRTdHJp
bmdzIHRvIG5leHQgdG9rZW4gYWZ0ZXIgcGFyc2luZyBhbiBlbXB0eSBwYXJhbWV0ZXIgbGlzdApk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtLnlhbWwgYi9KU1Rlc3RzL3dhc20ueWFtbAppbmRleCAy
ZWNiNjM0ZGJmNWIyYmVlNzJjZGQxM2M0MDE3OWJmMmY1ZTk0YmMxLi4xZjQ1MWJjOTExOGNjYWMz
Mzk4OTcwZWE0OWIyNTg5Y2FmMzNjYzI3IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20ueWFtbAor
KysgYi9KU1Rlc3RzL3dhc20ueWFtbApAQCAtNDUsNiArNDUsOCBAQAogICBjbWQ6IHJ1bldlYkFz
c2VtYmx5IHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCiAtIHBhdGg6IHdhc20vc2VsZi10ZXN0Lwog
ICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKKy0gcGF0
aDogd2FzbS92OC8KKyAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlKDpub19tb2R1bGUsICJtanN1
bml0LmpzIikgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIAogLSBwYXRoOiB3YXNtL3JlZmVyZW5j
ZXMtc3BlYy10ZXN0cy9lbGVtLndhc3QuanMKICAgY21kOiBydW5XZWJBc3NlbWJseVJlZmVyZW5j
ZVNwZWNUZXN0IDpub3JtYWwKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzIGIv
SlNUZXN0cy93YXNtL0J1aWxkZXIuanMKaW5kZXggMzJmZmU2YmJiNTYxYTUzMzM4NTdlZDIzMWIw
NDdhN2YyYWZiZjExNS4uMTEwMWY3MjVjY2RkYjBjYzFlODlhMDVjN2FkZDdiYjQ5ZDJmNTk3YyAx
MDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKKysrIGIvSlNUZXN0cy93YXNtL0J1
aWxkZXIuanMKQEAgLTEyOCw2ICsxMjgsMTggQEAgY29uc3QgX2ltcG9ydFRhYmxlQ29udGludWF0
aW9uID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CiAgICAgfTsKIH07CiAK
K2NvbnN0IF9pbXBvcnRFeGNlcHRpb25Db250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwg
bmV4dEJ1aWxkZXIpID0+IHsKKyAgICByZXR1cm4gKG1vZHVsZSwgZmllbGQsIHR5cGUpID0+IHsK
KyAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKG1vZHVsZSwgYEltcG9ydCBmdW5jdGlvbiBtb2R1bGUg
c2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7bW9kdWxlfSJgKTsKKyAgICAgICAgYXNzZXJ0Lmlz
U3RyaW5nKGZpZWxkLCBgSW1wb3J0IGZ1bmN0aW9uIGZpZWxkIHNob3VsZCBiZSBhIHN0cmluZywg
Z290ICIke2ZpZWxkfSJgKTsKKyAgICAgICAgY29uc3QgdHlwZVNlY3Rpb24gPSBidWlsZGVyLl9n
ZXRTZWN0aW9uKCJUeXBlIik7CisgICAgICAgIHR5cGUgPSBfbWF5YmVSZWdpc3RlclR5cGUoYnVp
bGRlciwgdHlwZSk7CisgICAgICAgIGNvbnN0IHRhZyA9IDA7CisgICAgICAgIHNlY3Rpb24uZGF0
YS5wdXNoKHsgZmllbGQsIHR5cGUsIHRhZywga2luZDogIkV4Y2VwdGlvbiIsIG1vZHVsZSB9KTsK
KyAgICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IobmV4dEJ1aWxkZXIpOworICAg
IH0KK307CisKIGNvbnN0IF9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBz
ZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewogICAgIHJldHVybiAoZmllbGQsIGluZGV4LCB0eXBl
KSA9PiB7CiAgICAgICAgIGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEV4cG9ydCBmdW5jdGlvbiBm
aWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtmaWVsZH0iYCk7CkBAIC0yMTUsNiArMjI3
LDE0IEBAIGNvbnN0IF9leHBvcnRUYWJsZUNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9u
LCBuZXh0QnVpbGRlcikgPT4gewogICAgIH0KIH07CiAKK2NvbnN0IF9leHBvcnRFeGNlcHRpb25D
b250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKKyAgICBy
ZXR1cm4gKGZpZWxkLCBpbmRleCkgPT4geworICAgICAgICBhc3NlcnQuaXNOdW1iZXIoaW5kZXgs
IGBFeGNlcHRpb24gZXhwb3J0cyBvbmx5IHN1cHBvcnQgbnVtYmVyIGluZGljZXNgKTsKKyAgICAg
ICAgc2VjdGlvbi5kYXRhLnB1c2goe2ZpZWxkLCBraW5kOiAiRXhjZXB0aW9uIiwgaW5kZXh9KTsK
KyAgICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IobmV4dEJ1aWxkZXIpOworICAg
IH0KK307CisKIGNvbnN0IF9pbXBvcnRHbG9iYWxDb250aW51YXRpb24gPSAoYnVpbGRlciwgc2Vj
dGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKICAgICByZXR1cm4gKCkgPT4gewogICAgICAgICBjb25z
dCBnbG9iYWxCdWlsZGVyID0gewpAQCAtMzA3LDYgKzMyNyw3IEBAIGNvbnN0IF9jaGVja0ltbXMg
PSAob3AsIGltbXMsIGV4cGVjdGVkSW1tcywgcmV0KSA9PiB7CiAgICAgICAgIGNhc2UgInRhcmdl
dF90YWJsZSI6IGJyZWFrOyAvLyBpbXByb3ZlIGNoZWNraW5nIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM0MjEKICAgICAgICAgY2FzZSAicmVzZXJ2ZWQiOiBicmVh
azsgLy8gaW1wcm92ZSBjaGVja2luZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYzNDIxCiAgICAgICAgIGNhc2UgInRhYmxlX2luZGV4IjogYnJlYWs7IC8vIGltcHJv
dmUgY2hlY2tpbmcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzQy
MQorICAgICAgICBjYXNlICJleG4iOiBicmVhazsKICAgICAgICAgY2FzZSAicmVmdHlwZSI6CiAg
ICAgICAgICAgICBhc3NlcnQudHJ1dGh5KFdBU00uaXNWYWxpZFJlZlR5cGUoaW1tc1tpZHhdKSwg
YEludmFsaWQgcmVmIHR5cGUgb24gJHtvcH06ICIke2ltbXNbaWR4XX0iYCk7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTMzNSwxMSArMzU2LDEzIEBAIGNvbnN0IF9jcmVhdGVGdW5jdGlvbkJ1aWxk
ZXIgPSAoZnVuYywgYnVpbGRlciwgcHJldmlvdXNCdWlsZGVyKSA9PiB7CiAgICAgICAgICAgICAg
ICAgbmV4dEJ1aWxkZXIgPSBmdW5jdGlvbkJ1aWxkZXI7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlICJFbmQiOgorICAgICAgICAgICAgY2FzZSAiRGVsZWdhdGUiOgog
ICAgICAgICAgICAgICAgIG5leHRCdWlsZGVyID0gcHJldmlvdXNCdWlsZGVyOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAiQmxvY2siOgogICAgICAgICAgICAgY2Fz
ZSAiTG9vcCI6CiAgICAgICAgICAgICBjYXNlICJJZiI6CisgICAgICAgICAgICBjYXNlICJUcnki
OgogICAgICAgICAgICAgICAgIG5leHRCdWlsZGVyID0gX2NyZWF0ZUZ1bmN0aW9uQnVpbGRlcihm
dW5jLCBidWlsZGVyLCBmdW5jdGlvbkJ1aWxkZXIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpAQCAtNDg4LDYgKzUxMSw3IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1
aWxkZXIgewogICAgICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLkZ1bmN0aW9uID0gX2lt
cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOwogICAgICAg
ICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLk1lbW9yeSA9IF9pbXBvcnRNZW1vcnlDb250aW51
YXRpb24odGhpcywgcywgaW1wb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAgICAgICAgIGltcG9y
dEJ1aWxkZXIuVGFibGUgPSBfaW1wb3J0VGFibGVDb250aW51YXRpb24odGhpcywgcywgaW1wb3J0
QnVpbGRlcik7CisgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuRXhjZXB0aW9uID0g
X2ltcG9ydEV4Y2VwdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVyKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IoaW1wb3J0QnVp
bGRlcik7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTUz
MSw2ICs1NTUsMjMgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAgY2FzZSAiRXhj
ZXB0aW9uIjogeworICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFCdWlsZGVyID0geworICAgICAgICAgICAg
ICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgU2ln
bmF0dXJlOiAoc2lnbmF0dXJlKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0
IHR5cGUgPSBfbWF5YmVSZWdpc3RlclR5cGUodGhpcywgc2lnbmF0dXJlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzLmRhdGEucHVzaCh7IHRhZzogMCwgdHlwZSB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihkYXRhQnVp
bGRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgd2UgYWRkIHRhZ3Mgd2l0aCBub24temVybyB2YWx1ZSB0aGVuIHdlIGNhbiBhZGQg
YSBuZXcgbWVtYmVyLgorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihkYXRhQnVpbGRlcik7CisgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwogICAgICAg
ICAgICAgY2FzZSAiR2xvYmFsIjoKICAgICAgICAgICAgICAgICB0aGlzW3NlY3Rpb25dID0gZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLl9hZGRTZWN0aW9u
KHNlY3Rpb24pOwpAQCAtNTY5LDYgKzYxMCw3IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxk
ZXIgewogICAgICAgICAgICAgICAgICAgICBleHBvcnRCdWlsZGVyLkZ1bmN0aW9uID0gX2V4cG9y
dEZ1bmN0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGV4cG9ydEJ1aWxkZXIpOwogICAgICAgICAg
ICAgICAgICAgICBleHBvcnRCdWlsZGVyLk1lbW9yeSA9IF9leHBvcnRNZW1vcnlDb250aW51YXRp
b24odGhpcywgcywgZXhwb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydEJ1
aWxkZXIuVGFibGUgPSBfZXhwb3J0VGFibGVDb250aW51YXRpb24odGhpcywgcywgZXhwb3J0QnVp
bGRlcik7CisgICAgICAgICAgICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuRXhjZXB0aW9uID0gX2V4
cG9ydEV4Y2VwdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBleHBvcnRCdWlsZGVyKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IoZXhwb3J0QnVpbGRl
cik7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTczNywx
NSArNzc5LDYgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICBm
b3IgKGNvbnN0IHMgb2YgdGhpcy5fc2VjdGlvbnMpCiAgICAgICAgICAgICAgICAgaWYgKG51bWJl
ciAhPT0gX3Vua25vd25TZWN0aW9uSWQpCiAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5mYWxz
eShzLm5hbWUgPT09IG5hbWUgJiYgcy5pZCA9PT0gbnVtYmVyLCBgQ2Fubm90IGhhdmUgdHdvIHNl
Y3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSAiJHtuYW1lfSIgYW5kIElEICR7bnVtYmVyfWApOwot
ICAgICAgICAgICAgLy8gQ2hlY2sgb3JkZXJpbmcuCi0gICAgICAgICAgICBpZiAoKG51bWJlciAh
PT0gX3Vua25vd25TZWN0aW9uSWQpICYmICh0aGlzLl9zZWN0aW9ucy5sZW5ndGggIT09IDApKSB7
Ci0gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX3NlY3Rpb25zLmxlbmd0aCAtIDE7
IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZWN0aW9uc1tp
XS5pZCA9PT0gX3Vua25vd25TZWN0aW9uSWQpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmxlKHRoaXMuX3NlY3Rpb25zW2ldLmlk
LCBudW1iZXIsIGBCYWQgc2VjdGlvbiBvcmRlcmluZzogIiR7dGhpcy5fc2VjdGlvbnNbaV0ubmFt
ZX0iIGNhbm5vdCBwcmVjZWRlICIke25hbWV9ImApOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
Y29uc3QgcyA9IE9iamVjdC5hc3NpZ24oeyBuYW1lOiBuYW1lLCBpZDogbnVtYmVyLCBkYXRhOiBb
XSB9LCBleHRyYU9iamVjdCB8fCB7fSk7CiAgICAgICAgIHRoaXMuX3NlY3Rpb25zLnB1c2gocyk7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcyBi
L0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCmluZGV4IDM1OGJiNDgy
ZDRlMDczMjZhMjBlNTg5MzRlNTUyOTJiYjU1MTYzNzAuLmU5YzU3NjI2MGY1ZDJlNWI2N2ZhZThh
M2RiNTBlNmM3NDE2ODg4MTcgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFz
c2VtYmx5QmluYXJ5LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5Qmlu
YXJ5LmpzCkBAIC0xNDMsNiArMTQzLDEwIEBAIGNvbnN0IGVtaXR0ZXJzID0gewogICAgICAgICAg
ICAgY2FzZSAiR2xvYmFsIjoKICAgICAgICAgICAgICAgICBwdXRHbG9iYWxUeXBlKGJpbiwgZW50
cnkuZ2xvYmFsRGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSAiRXhjZXB0aW9uIjoKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDMy
IiwgZW50cnkudGFnKTsKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZW50
cnkudHlwZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9LApAQCAtMTg1LDYgKzE4OSw3IEBAIGNvbnN0IGVtaXR0ZXJzID0gewogICAgICAg
ICAgICAgY2FzZSAiRnVuY3Rpb24iOgogICAgICAgICAgICAgY2FzZSAiTWVtb3J5IjoKICAgICAg
ICAgICAgIGNhc2UgIlRhYmxlIjoKKyAgICAgICAgICAgIGNhc2UgIkV4Y2VwdGlvbiI6CiAgICAg
ICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGVudHJ5LmluZGV4KTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgSW1w
bGVtZW50YXRpb24gcHJvYmxlbTogdW5leHBlY3RlZCBraW5kICR7ZW50cnkua2luZH1gKTsKQEAg
LTI1NCw2ICsyNTksMTQgQEAgY29uc3QgZW1pdHRlcnMgPSB7CiAgICAgICAgICAgICAgICAgcHV0
KGJpbiwgInVpbnQ4IiwgYnl0ZSk7CiAgICAgICAgIH0KICAgICB9LAorCisgICAgRXhjZXB0aW9u
OiAoc2VjdGlvbiwgYmluKSA9PiB7CisgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBzZWN0
aW9uLmRhdGEubGVuZ3RoKTsKKyAgICAgICAgZm9yIChjb25zdCBleG4gb2Ygc2VjdGlvbi5kYXRh
KSB7CisgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZXhuLnRhZyk7CisgICAgICAg
ICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZXhuLnR5cGUpOworICAgICAgICB9CisgICAgfSwK
IH07CiAKIGV4cG9ydCBjb25zdCBCaW5hcnkgPSAocHJlYW1ibGUsIHNlY3Rpb25zKSA9PiB7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5q
cwppbmRleCA2ZmRiNjVhNGRhZGRjMGQ3N2E3MjRjMDE5MmQ4ZmI1M2JmMTBiZjY4Li45NDgzOGQ5
N2VmNTUwZjYxZmQyMzg2YzNmMmFiZDhlZjkyMzZlNDAyIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dh
c20vYXNzZXJ0LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9hc3NlcnQuanMKQEAgLTEyNCw3ICsxMjQs
NyBAQCBjb25zdCBfdGhyb3dzID0gKGZ1bmMsIHR5cGUsIG1lc3NhZ2UsIC4uLmFyZ3MpID0+IHsK
ICAgICB0cnkgewogICAgICAgICBmdW5jKC4uLmFyZ3MpOwogICAgIH0gY2F0Y2ggKGUpIHsKLSAg
ICAgICAgaWYgKGUgaW5zdGFuY2VvZiB0eXBlICYmIGUubWVzc2FnZS5pbmRleE9mKG1lc3NhZ2Up
ID49IDApCisgICAgICAgIGlmIChlIGluc3RhbmNlb2YgdHlwZSAmJiAodHlwZW9mKGUubWVzc2Fn
ZSkgPT0gInVuZGVmaW5lZCIgfHwgZS5tZXNzYWdlLmluZGV4T2YobWVzc2FnZSkgPj0gMCkpCiAg
ICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAgX2ZhaWwoYEV4cGVjdGVkIHRvIHRocm93IGEg
JHt0eXBlLm5hbWV9IHdpdGggbWVzc2FnZSAiJHttZXNzYWdlfSIsIGdvdCAke2UubmFtZX0gd2l0
aCBtZXNzYWdlICIke2UubWVzc2FnZX0iYCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93
YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzIGIvSlNUZXN0cy93YXNtL3NlbGYtdGVz
dC90ZXN0X0J1aWxkZXJKU09OLmpzCmluZGV4IGJiMWI5N2IxOWQ1Y2MxYzc4YjVmMDA3ZGM2OTBh
YWRiZDcwZDIwZjguLjIwOWYyMGI3NmJiYThiNzBjNTE3MjFlZTQ1NjgzZDFmNzYwMzJhNmYgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcworKysg
Yi9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMKQEAgLTE0MCwxMSAr
MTQwLDYgQEAgY29uc3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDApOwogfSkoKTsKIAotKGZ1bmN0
aW9uIEltcG9ydEJlZm9yZVR5cGVTZWN0aW9ucygpIHsKLSAgICBjb25zdCBiID0gKG5ldyBCdWls
ZGVyKCkpLkltcG9ydCgpLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYi5UeXBlKCks
IEVycm9yLCBgRXhwZWN0ZWQ6ICIyIiA+ICIxIjogQmFkIHNlY3Rpb24gb3JkZXJpbmc6ICJJbXBv
cnQiIGNhbm5vdCBwcmVjZWRlICJUeXBlImApOwotfSkoKTsKLQogKGZ1bmN0aW9uIEltcG9ydEZ1
bmN0aW9uV2l0aG91dFR5cGVTZWN0aW9uKCkgewogICAgIGNvbnN0IGkgPSAobmV3IEJ1aWxkZXIo
KSkuSW1wb3J0KCk7CiAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpLkZ1bmN0aW9uKCJmb28iLCAi
YmFyIiwgMCksIEVycm9yLCBgU2hvdWxkbid0IGJlIHVuZGVmaW5lZDogQ2FuIG5vdCB1c2UgdHlw
ZSAwIGlmIGEgdHlwZSBzZWN0aW9uIGlzIG5vdCBwcmVzZW50YCk7CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vc3RyZXNzL2NhdGNoLXdpdGgtZGVsZWdhdGUuanMgYi9KU1Rlc3RzL3dhc20vc3Ry
ZXNzL2NhdGNoLXdpdGgtZGVsZWdhdGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDMwYmVmNTkzY2M0MjM2MmIy
MmFlMjk5NzY0MmIzMjg1MTQ4ODU0MgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9z
dHJlc3MvY2F0Y2gtd2l0aC1kZWxlZ2F0ZS5qcwpAQCAtMCwwICsxLDkwIEBACitpbXBvcnQgQnVp
bGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fz
c2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCku
RW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQo
KQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2Vw
dGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAg
ICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAg
ICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5E
ZWxlZ2F0ZSgwKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNv
bnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNv
bnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0
YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxs
YmFjayB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAgICBm
dW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2Vw
dGlvbih0YWcsIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5j
YWxsKCksIDMpOworCisgICAgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6
IFtdIH0pOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFz
c2VtYmx5LkV4Y2VwdGlvbik7Cit9CisKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9
KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJ0YWciLCB7IHBhcmFtczogWyJp
MzIiXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5k
KCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNl
cHRpb24oImZvbyIsIDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAg
ICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAg
ICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAg
ICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAu
RGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5DYXRjaCgxKQorICAgICAgICAgICAgICAgIC5JMzJD
b25zdCgzKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBj
b25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVy
VGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNv
bnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0
OiB7IGNhbGxiYWNrLCB0YWc6IG90aGVyVGFnIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5j
ZS5leHBvcnRzLmZvbzsKKyAgICBsZXQgYXJncyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FsbGJh
Y2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBhcmdz
KTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMpOwor
CisgICAgdGFnID0gb3RoZXJUYWc7CisgICAgYXJncyA9IFsxMDBdOworCisgICAgbGV0IGV4biA9
IGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRp
b24pOworICAgIGFzc2VydC5lcShleG4uZ2V0QXJnKHRhZywgMCksIDEwMCk7Cit9CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2NyZWF0ZS10YWctZnJvbS5qcyBiL0pTVGVzdHMvd2Fz
bS9zdHJlc3MvY3JlYXRlLXRhZy1mcm9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyNzhkNmMyMTc2Y2ZiNTgx
NGFmYWU3Njg0ZjE5ZmQ1NjgxMDFmYTkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20v
c3RyZXNzL2NyZWF0ZS10YWctZnJvbS5qcwpAQCAtMCwwICsxLDIyIEBACitpbXBvcnQgKiBhcyBh
c3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCitsZXQgcGFyYW1ldGVycyA9IFsiaTMyIiwgImYz
MiIsICJleHRlcm5yZWYiXTsKKworYXNzZXJ0LnRocm93cyhXZWJBc3NlbWJseS5UYWcsIFR5cGVF
cnJvciwgImNhbGxpbmcgV2ViQXNzZW1ibHkuVGFnIGNvbnN0cnVjdG9yIHdpdGhvdXQgbmV3IGlz
IGludmFsaWQiKTsKK2xldCBwYXNzZWRQYXJhbWV0ZXJzID0geyBwYXJhbWV0ZXJzIH07CitsZXQg
dGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyhwYXNzZWRQYXJhbWV0ZXJzKTsKKworYXNzZXJ0LnRy
dXRoeSh0YWcudHlwZSgpICE9PSBwYXNzZWRQYXJhbWV0ZXJzLCAiVGFnIHR5cGUgc2hvdWxkIHJl
dHVybiBhIGZyZXNoIG9iamVjdCIpOworYXNzZXJ0LmVxKHRhZy50eXBlKCkucGFyYW1ldGVycywg
cGFyYW1ldGVycywgIlRhZ3MgdHlwZSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHBhcmFtZXRl
cnMgcGFzc2VkIGluIik7CisKK2Fzc2VydC50aHJvd3MoV2ViQXNzZW1ibHkuRXhjZXB0aW9uLCBU
eXBlRXJyb3IsICJjYWxsaW5nIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciB3aXRo
b3V0IG5ldyBpcyBpbnZhbGlkIik7CisKK2xldCBleGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHku
RXhjZXB0aW9uKHRhZywgWzEsIDIuNSwgcGFyYW1ldGVyc10pOworYXNzZXJ0LnRydXRoeShleGNl
cHRpb24uaXModGFnKSk7Cithc3NlcnQuZXEoZXhjZXB0aW9uLmdldEFyZyh0YWcsIDApLCAxKTsK
K2Fzc2VydC5lcShleGNlcHRpb24uZ2V0QXJnKHRhZywgMSksIDIuNSk7Cithc3NlcnQuZXEoZXhj
ZXB0aW9uLmdldEFyZyh0YWcsIDIpLCBwYXJhbWV0ZXJzKTsKKworYXNzZXJ0LnRocm93cygoKSA9
PiBleGNlcHRpb24uZ2V0QXJnKHRhZywgMyksIFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5FeGNl
cHRpb24uZ2V0QXJnKCk6IEluZGV4IG91dCBvZiByYW5nZSIpOworCithc3NlcnQuZXEoV2ViQXNz
ZW1ibHkuRXhjZXB0aW9uLnByb3RvdHlwZS5fX3Byb3RvX18sIE9iamVjdC5wcm90b3R5cGUpCmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0y
LmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UtMi5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wZWM3ZmJhZDA3NTg5NTVlYTJmOGU0MzQyODE0MTdjOTZmMDBkYjczCi0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFu
Y2UtMi5qcwpAQCAtMCwwICsxLDkwIEBACisKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxk
ZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCitjb25zdCBw
YWdlU2l6ZSA9IDY0ICogMTAyNDsKK2NvbnN0IG51bVBhZ2VzID0gMTsKKwordmFyIGluc3RBOwor
dmFyIGluc3RCOwordmFyIGdyb3c7Cit2YXIgbWVtb3J5RGVzY3JpcHRpb24gPSB7aW5pdGlhbDog
MH07Cit2YXIgbWVtID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7
CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgYXNzZXJ0LmVxKGluc3RBLmV4cG9ydHMubWFpbig0
MiksIDQyKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiY29udGV4
dCIsICJtZW0iLCBtZW1vcnlEZXNjcmlwdGlvbikKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29u
dGV4dCIsICJncm93IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25h
dHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAg
IC5GdW5jdGlvbigidHJhbXBvbGluZSIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oInRyYW1wb2xpbmUiLCB7IHBhcmFtczogW10sIHJldDog
InZvaWQiIH0pCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgp
OworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBp
bnN0QiA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsKKyAgICAgICAgY29udGV4
dDogeworICAgICAgICAgICAgbWVtLAorICAgICAgICAgICAgZ3JvdygpIHsgaW5zdEEuZXhwb3J0
cy5ncm93KDEpOyB9LAorICAgICAgICB9CisgICAgfSk7Cit9CisKK3sKKyAgICBjb25zdCBiID0g
bmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAg
ICAgICAgICAgIC5NZW1vcnkoImNvbnRleHQiLCAibWVtIiwgbWVtb3J5RGVzY3JpcHRpb24pCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNvbnRleHQiLCAidHJhbXBvbGluZSIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVu
ZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkK
KyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oIm1haW4iKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJncm93IikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigibWFpbiIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJp
MzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAg
LkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAg
ICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAg
ICAgICAgICAgICAgIC5JMzJMb2FkKDAsIDApCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZ3JvdyIsIHsgcGFyYW1zOiBb
ImkzMiJdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAg
ICAgICAgICAgICAgIC5Hcm93TWVtb3J5KDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDQy
KQorICAgICAgICAgICAgICAgIC5JMzJTdG9yZSgwLCAwKQorICAgICAgICAgICAgICAgIC5UaHJv
dygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBi
aW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGluc3RBID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNl
KG1vZHVsZSwgeworICAgICAgICBjb250ZXh0OiB7CisgICAgICAgICAgICBtZW0sCisgICAgICAg
ICAgICB0cmFtcG9saW5lOiBpbnN0Qi5leHBvcnRzLnRyYW1wb2xpbmUsCisgICAgICAgIH0KKyAg
ICB9KTsKK30KKwordGVzdCgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNl
cHRpb24tY3Jvc3MtaW5zdGFuY2UtMy5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9u
LWNyb3NzLWluc3RhbmNlLTMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E4OTgwYmViOTNmNmMyYzMwNjRjMmNj
OTE0ZWFjMWExMzRjMDQ4MAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mv
ZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLTMuanMKQEAgLTAsMCArMSw3NSBAQAoraW1wb3J0IEJ1
aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9h
c3NlcnQuanMnCisKK2NvbnN0IHBhZ2VTaXplID0gNjQgKiAxMDI0OworY29uc3QgbnVtUGFnZXMg
PSAxOworCit2YXIgaW5zdEE7Cit2YXIgaW5zdEI7Cit2YXIgZ3JvdzsKK3ZhciBtZW1vcnlEZXNj
cmlwdGlvbiA9IHtpbml0aWFsOiBudW1QYWdlc307Cit2YXIgbWVtID0gbmV3IFdlYkFzc2VtYmx5
Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgYXNz
ZXJ0LmVxKGluc3RBLmV4cG9ydHMubWFpbigpLCA0Mik7Cit9CisKK3sKKyAgICBjb25zdCBiID0g
bmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAg
ICAgICAgICAgIC5NZW1vcnkoImNvbnRleHQiLCAibWVtIiwgeyBpbml0aWFsOiAwIH0pCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9u
KCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvdyIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJleCIs
IDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oInRocm93IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgICAg
IC5UaHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBj
b25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGluc3RCID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IG1lbTogbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7
IGluaXRpYWw6IDAgfSkgfSB9KTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLk1l
bW9yeSgiY29udGV4dCIsICJtZW0iLCBtZW1vcnlEZXNjcmlwdGlvbikKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiY29udGV4dCIsICJ0aHJvdyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkK
KyAgICAgICAgICAgIC5FeGNlcHRpb24oImNvbnRleHQiLCAiZXgiLCB7IHBhcmFtczogW10gfSkK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNl
cHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFsiaTMyIl19KS5FbmQoKQorICAgICAgICAuRXhw
b3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigibWFpbiIpCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oIm1haW4iLCB7IHBhcmFtczogW10s
IHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoNDIpCisgICAgICAgICAgICAgICAgLkkzMlN0b3JlKDAsIDApCisgICAg
ICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAg
ICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgLkNhdGNoKDAp
CisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgICAgICAu
STMyTG9hZCgwLCAwKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0
KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAg
IGluc3RBID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IC4u
Lmluc3RCLmV4cG9ydHMsIG1lbSB9IH0pOworfQorCit0ZXN0KCk7CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS5qcyBiL0pTVGVzdHMvd2Fz
bS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjNjdjOTE4
NjllMmFiMmRiZTcwZDVjZWMxZTdmMjU3ODk4YjU4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS5qcwpAQCAtMCwwICsxLDU4
IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNz
ZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKwordmFyIGluc3RBOwordmFyIGluc3RCOworCitmdW5j
dGlvbiB0ZXN0KCkgeworICAgIGFzc2VydC50aHJvd3MoaW5zdEEuZXhwb3J0cy5tYWluLCBXZWJB
c3NlbWJseS5FeGNlcHRpb24sICJ3YXNtIGV4Y2VwdGlvbiIpOworfQorCit7CisgICAgY29uc3Qg
YiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9u
KCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigidGhyb3ciKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0
aHJvdyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UaHJv
dygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBi
aW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGluc3RCID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNl
KG1vZHVsZSk7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5
cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29u
dGV4dCIsICJ0aHJvdyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25h
dHVyZSh7IHBhcmFtczogWyJpMzIiLCAiaTMyIl19KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigibWFpbiIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAu
Q29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oIm1haW4iLCB7IHBhcmFtczogW10sIHJldDog
ImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAg
ICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAg
ICAuSTMyQWRkKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgp
OworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBp
bnN0QSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyB0aHJv
dzogaW5zdEIuZXhwb3J0cy50aHJvdyB9IH0pOworfQorCit0ZXN0KCk7CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1saXZlbmVzcy10aWVyLXVwLmpzIGIvSlNUZXN0
cy93YXNtL3N0cmVzcy9leGNlcHRpb24tbGl2ZW5lc3MtdGllci11cC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
ZTYwNTI0MGQyMTVlYjE0MjEwMmM4NWYxYzk4MDM1MjRjODVjNmYyCi0tLSAvZGV2L251bGwKKysr
IGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tbGl2ZW5lc3MtdGllci11cC5qcwpAQCAt
MCwwICsxLDg3IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0
ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcg
QnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgp
CisgICAgICAgIC5FeGNlcHRpb24oKQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczog
WyJpMzIiXX0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAg
IC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJ0YWciLCAwKQorICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxs
IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0sIFsiaTMyIl0pCisgICAgICAgICAgICAgICAg
LkkzMkNvbnN0KDFlNikKKyAgICAgICAgICAgICAgICAuU2V0TG9jYWwoMCkKKyAgICAgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoNDIpCisgICAg
ICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAg
ICAgICAgICAgICAgICAgICAuTG9vcCgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAu
QmxvY2soInZvaWQiLCBiID0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5HZXRM
b2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJFcXooKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5CcklmKDApCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMlN1YigpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLlNldExvY2FsKDApCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLkJyKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisg
ICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgICAgICAuUmV0aHJvdygw
KQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5F
bmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29u
c3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3Rh
bmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7CisgICAgY29uc3QgdGFnID0g
aW5zdGFuY2UuZXhwb3J0cy50YWc7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9y
dHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uLCAid2FzbSBleGNlcHRpb24iKTsKKyAgICB0
cnkgeworICAgICAgICBpbnN0YW5jZS5leHBvcnRzLmNhbGwoKTsKKyAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgIGFzc2VydC50cnV0aHkoZS5pcyh0YWcpKTsKKyAgICAgICAgYXNzZXJ0LmVxKGUu
Z2V0QXJnKHRhZywgMCksIDQyKTsKKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1
aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24o
ImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkuRW5kKCkK
KyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVy
ZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwi
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjYWxsIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAg
ICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuTG9vcCgidm9pZCIpCisgICAgICAgICAg
ICAgICAgICAgIC5DYWxsKDIpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoInZvaWQiKQorICAg
ICAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgICAgIC5DYXRj
aEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAg
ICAgICAgICAgLkkzMkVxeigpCisgICAgICAgICAgICAgICAgICAgICAgICAuQnJJZigxKQorICAg
ICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ3cmFwcGVyIiwgeyBwYXJhbXM6IFtd
LCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisg
ICAgdmFyIGNvdW50ZXIgPSAxZTU7CisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdl
dCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAg
ICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29u
dGV4dDogeyBjYWxsYmFjazogZnVuY3Rpb24oKSB7IGlmICghLS1jb3VudGVyKSByZXR1cm4gdHJ1
ZTt9IH0gfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDApOwor
fQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tbXVsdGlwbGUtaW5z
dGFuY2VzLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tbXVsdGlwbGUtaW5zdGFu
Y2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjcxMDI2NzlhOWQxMWExYmU4MTMwOGQ2MTdiOTdkYWM5YWE3ZjMw
ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1tdWx0
aXBsZS1pbnN0YW5jZXMuanMKQEAgLTAsMCArMSwzMiBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAn
Li4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisK
K3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJ0aHJvdyIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJ0YWciLCAwKQorICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvdyIsIHsg
cGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lkIikK
KyAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgLkNhdGNoKDAp
CisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3Qg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIHsKKyAgICAgICAgbGV0
IGluc3QgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKyAgICAgICAgaW5zdC5l
eHBvcnRzLnRocm93KCk7CisgICAgfQorICAgIHsKKyAgICAgICAgbGV0IGluc3QgPSBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKyAgICAgICAgaW5zdC5leHBvcnRzLnRocm93KCk7
CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tc2lt
cGxlLWRlbGVnYXRlLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLWRl
bGVnYXRlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiMTJhOGVmMjk2MmNiMTFjOTQ2ZDBjNWZkODBmNGEwNmZk
YTRjNzkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1z
aW1wbGUtZGVsZWdhdGUuanMKQEAgLTAsMCArMSwxMjUgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20g
Jy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJwor
CitmdW5jdGlvbiB0ZXN0U2ltcGxlVGhyb3dEZWxlZ2F0ZSgpIHsKKyAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisg
ICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9u
KCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAgICAgLkRlbGVn
YXRlKDApCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5J
MzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7
CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNv
bnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKwor
ICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4
cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQor
CitmdW5jdGlvbiB0ZXN0VGhyb3dEZWxlZ2F0ZVNraXAoKSB7CisgICAgY29uc3QgYiA9IG5ldyBC
dWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigi
Zm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAg
ICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgxKQorICAgICAg
ICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25z
dCgxKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2go
MCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMu
Y2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMg
c2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REZWxlZ2F0ZUNhbGxlcigp
IHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisg
ICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6
ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAg
ICAgLkNhbGwoMSkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAg
ICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5k
KCkKKworICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsMiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
aTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAg
IC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAg
ICAgICAgICAgICAgIC5EZWxlZ2F0ZSgxKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAg
ICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5j
ZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCks
IDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQg
YmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZURlbGVnYXRlTWVyZ2UoKXsK
KyBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAu
RnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAg
ICAgICAgICAgICAgLkRlbGVnYXRlKDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25z
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFu
Y2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworICAgIGFzc2VydC5l
cShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMyk7Cit9CisKK3Rlc3RTaW1wbGVUaHJvd0RlbGVn
YXRlKCk7Cit0ZXN0VGhyb3dEZWxlZ2F0ZVNraXAoKTsKK3Rlc3REZWxlZ2F0ZUNhbGxlcigpOwor
dGVzdFNpbXBsZURlbGVnYXRlTWVyZ2UoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJl
c3MvZXhjZXB0aW9uLXNpbXBsZS10aHJvdy1jYXRjaC5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mv
ZXhjZXB0aW9uLXNpbXBsZS10aHJvdy1jYXRjaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDk3NDAxNWY3MzAx
ZGViZTZiNGQ2NjJlMzViMDkyZmU0OGUwYzc2Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93
YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLXRocm93LWNhdGNoLmpzCkBAIC0wLDAgKzEsNDE0
IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNz
ZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworZnVuY3Rpb24gdGVzdFNpbXBsZVRyeUNhdGNoKCl7
CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBh
cmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAg
ICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
aTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuVGhyb3co
MCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQor
ICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9k
dWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAi
Y2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBv
c3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVUcnlDYXRjaEFsbCgpeworICAgIGNv
bnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtd
fSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAg
IC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAg
ICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHko
KS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7
CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7
IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hp
bmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxl
Iik7Cit9CisKK2Z1bmN0aW9uIHRlc3RDYWxsVHJ5Q2F0Y2goKXsKKyAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisg
ICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9u
KCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDEpCisgICAgICAgICAgICAuQ2F0
Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgLkVuZCgpCisKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbDIiLCB7IHBh
cmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJB
c3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZSht
b2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIs
ICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUg
cG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdENhbGxUcnlDYXRjaEFsbCgpeworICAgIGNv
bnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtd
fSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAg
IC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMSkKKyAgICAg
ICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKworICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
YWxsMiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UaHJv
dygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBi
aW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5
Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRz
LmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpT
IHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlVHJ5Q2F0Y2hW
YWx1ZSgpeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1
cmUoeyBwYXJhbXM6IFsiaTMyIl19KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24o
ImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAg
IC5DYXRjaCgwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAg
ICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3Qg
aW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAg
YXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0
ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1
bmN0aW9uIHRlc3RDYWxsVHJ5Q2F0Y2hWYWx1ZSgpeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRl
cigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFsiaTMyIl19KS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigi
Zm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAg
LlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgxKQorICAgICAgICAgICAgLkNhdGNo
KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorCisgICAgICAgICAg
ICAuRnVuY3Rpb24oImNhbGwyIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9k
dWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAi
Y2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBv
c3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RTdGFja1RyeUNhdGNoKCl7CisgICAgY29uc3Qg
YiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9u
KCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIi
XX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAg
ICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0p
CisgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgIC8vIFRPRE86IGJ1aWxkZXIg
ZXJyb3IKKyAgICAgICAgICAgIC5UcnkoeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAg
IGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNl
LmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3du
IGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RMaXZlQWZ0
ZXJUcnlDYXRjaCgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUo
KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCku
U2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rp
b24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAg
ICAgICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkK
KyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJB
c3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZSht
b2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIs
ICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUg
cG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdExpdmVBZnRlclRyeUNhdGNoQWxsKCkgewor
ICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJh
bXM6IFtdIH0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAg
ICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNv
ZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJp
MzIiIH0pCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlRy
eSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAg
IC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
Y29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOwor
CisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4g
ZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9
CisKK2Z1bmN0aW9uIHRlc3RVbmlmeVRyeUNhdGNoQ2F0Y2goKSB7CisgICAgY29uc3QgYiA9IG5l
dyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5k
KCkKKyAgICAgICAgLkV4Y2VwdGlvbigpCisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1z
OiBbXSB9KQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Y2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5Ucnko
ImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5UaHJvdygxKQorICAgICAgICAgICAgICAgIC5D
YXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAg
ICAuQ2F0Y2goMSkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAg
IGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNl
LmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3du
IGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RVbmlmeVRy
eUNhdGNoQ2F0Y2hBbGwoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5U
eXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlv
bigpCisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAgICAg
LlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwg
cmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAg
ICAgICAgIC5UaHJvdygxKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAg
ICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJB
c3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZSht
b2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIs
ICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUg
cG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFVuaWZ5VHJ5Tm9UaHJvdygpIHsKKyAgICBj
b25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVu
Y3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIC5TaWduYXR1
cmUoeyBwYXJhbXM6IFtdIH0pCisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAg
ICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQor
ICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQo
KQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3Qg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNl
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5l
cShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20g
dGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0
ZXN0VW5pZnlUcnlOb0NhdGNoKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAg
IGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNl
cHRpb24oKQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAg
ICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAu
RXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczog
W10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3Nl
bWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1
bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJj
YXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9z
c2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdE5lc3RlZENhdGNoICgpeworICAgIGNvbnN0IGIg
PSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5k
KCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBb
ImkzMiJdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAg
ICAgICAgICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQor
ICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoInZv
aWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAg
ICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAg
ICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7
CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHku
RXhjZXB0aW9uLCAid2FzbSBleGNlcHRpb24iKTsKK30KKwordGVzdFNpbXBsZVRyeUNhdGNoKCk7
Cit0ZXN0U2ltcGxlVHJ5Q2F0Y2hBbGwoKTsKK3Rlc3RTaW1wbGVUcnlDYXRjaFZhbHVlKCk7Cit0
ZXN0Q2FsbFRyeUNhdGNoKCk7Cit0ZXN0Q2FsbFRyeUNhdGNoQWxsKCk7Cit0ZXN0Q2FsbFRyeUNh
dGNoVmFsdWUoKTsKK3Rlc3RMaXZlQWZ0ZXJUcnlDYXRjaCgpOwordGVzdExpdmVBZnRlclRyeUNh
dGNoQWxsKCk7Cit0ZXN0VW5pZnlUcnlDYXRjaENhdGNoKCk7Cit0ZXN0VW5pZnlUcnlDYXRjaENh
dGNoQWxsKCk7Cit0ZXN0VW5pZnlUcnlOb1Rocm93KCk7Cit0ZXN0VW5pZnlUcnlOb0NhdGNoKCk7
CisKKy8vIFRPRE86IGVuYWJsZSB0aGlzIHRlc3QKKy8vIHRlc3RTdGFja1RyeUNhdGNoKCk7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10
by13YXNtLWNhdGNoYWxsLXJldGhyb3cuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlv
bi10aHJvd24tZnJvbS1qcy10by13YXNtLWNhdGNoYWxsLXJldGhyb3cuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZmI0YzMwZDkxYWM2YmEzNzU0MTA0N2JjNjUyM2ZhYmFmMTFiYjQyZAotLS0gL2Rldi9udWxsCisr
KyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20t
Y2F0Y2hhbGwtcmV0aHJvdy5qcwpAQCAtMCwwICsxLDQxIEBACitpbXBvcnQgQnVpbGRlciBmcm9t
ICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycK
KworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisg
ICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAg
ICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAg
ICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9v
IiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5j
dGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRy
eSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJD
b25zdCgxKQorICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMikKKyAgICAgICAgICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRhZyA9IGlu
c3RhbmNlLmV4cG9ydHMuZm9vOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAg
IHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAgfQorCisgICAg
YXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlv
bik7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7
CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHku
RXhjZXB0aW9uKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9u
LXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNz
L2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLWNhdGNoYWxsLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjM3ZTRhNDRiMWZlYzQxNmQzODRjNzk0OTlmOThiZjk0NjY5Y2I2NGMKLS0tIC9kZXYvbnVsbAor
KysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNt
LWNhdGNoYWxsLmpzCkBAIC0wLDAgKzEsNDAgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1
aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7Cisg
ICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAg
LkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAu
RXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
YWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIi
KQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEp
CisgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisK
KworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1
bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBu
ZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0p
OworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworCisgICAgZnVuY3Rpb24g
Y2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFn
LCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAy
LCAiY2F0Y2hfYWxsaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3Vs
ZCBiZSBwb3NzaWJsZSIpOworCisgICAgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFt
ZXRlcnM6IFtdIH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAy
LCAiY2F0Y2hfYWxsaW5nIGFuIG9wYXF1ZSB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQg
YmUgcG9zc2libGUiKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0
aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20uanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2Vw
dGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1MDE5MjAwYzlmZDlm
MmY2MWZhYjQzODc0MDZlODY2YmMzMmY3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dh
c20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLmpzCkBAIC0wLDAgKzEs
NDAgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBh
c3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVy
KCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250
ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisg
ICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6
ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxs
KDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuQ2F0Y2goMCkK
KyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1v
ZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5j
ZS5leHBvcnRzLmZvbzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJv
dyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAgIH0KKworICAgIGFzc2Vy
dC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdh
c20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworCisgICAgdGFnID0g
bmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFtdIH0pOworCisgICAgYXNzZXJ0LnRo
cm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3V0LW9mLXdh
c20uanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3V0LW9mLXdhc20u
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYThlMzMwMWUzYjgwMDNhNTJhMmRlNjMzNTg2NzY5ZmY4OTA4MmY4ZQot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1v
dXQtb2Ytd2FzbS5qcwpAQCAtMCwwICsxLDI0IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9C
dWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworewor
ICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJh
bXM6IFtdIH0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAg
ICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNv
ZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJp
MzIiIH0pCisgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5JMzJDb25zdCgxKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisgICAgY29uc3QgYmluID0gYi5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5j
ZShtb2R1bGUpOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNz
L2V4Y2VwdGlvbi10aHJvd24tb3Zlci13YXNtLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNl
cHRpb24tdGhyb3duLW92ZXItd2FzbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OWY0YzJlOTAzMWU5ZWQ0OWRl
Njk3MWM5NzFiNjQwYmVlMjRhZmMzCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0
cmVzcy9leGNlcHRpb24tdGhyb3duLW92ZXItd2FzbS5qcwpAQCAtMCwwICsxLDMwIEBACitpbXBv
cnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20g
Jy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIu
VHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxs
YmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119
KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAg
LkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQor
ICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkg
eworICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKGluc3RhbmNlLmV4cG9y
dHMuZm9vLCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRz
LmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbiwgIndhc20gZXhjZXB0aW9uIik7Cit9CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10cmFwLmpzIGIvSlNUZXN0cy93
YXNtL3N0cmVzcy9leGNlcHRpb24tdHJhcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZmRmNTNlYjUwNWMzOTBi
NDBiZjE1MzU1YjZkNTM3MmU1NjBlOTFiCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNt
L3N0cmVzcy9leGNlcHRpb24tdHJhcC5qcwpAQCAtMCwwICsxLDEzNCBAQAoraW1wb3J0IEJ1aWxk
ZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3Nl
cnQuanMnCisKK2Z1bmN0aW9uIHRlc3RDYW5ub3RDYXRjaFVucmVhY2hhYmxlKCkgeworICAgIGNv
bnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgLkZ1bmN0aW9uKCJjYWxs
IikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5U
cnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5VbnJlYWNoYWJsZSgpCisgICAgICAgICAg
ICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAg
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisK
KworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1
bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBu
ZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKworICAgIGFzc2VydC50aHJvd3MoaW5z
dGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsICJVbnJlYWNoYWJs
ZSBjb2RlIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQiKTsKK30KKworZnVuY3Rpb24gdGVzdENhbm5v
dENhdGNoT09CKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5NZW1vcnkoKQorICAg
ICAgICAgICAgLkluaXRpYWxNYXhQYWdlcygwLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpCisgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtd
LCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDEwMjQpCisgICAgICAgICAgICAgICAgICAgIC5JMzJMb2FkKDAs
IDApCisgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKworICAgIGFz
c2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5SdW50aW1lRXJy
b3IsICJPdXQgb2YgYm91bmRzIG1lbW9yeSBhY2Nlc3MiKTsKK30KKworZnVuY3Rpb24gdGVzdFdh
c21BUElUaHJvdygpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUo
KS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2si
LCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Y2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5Ucnko
ImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAg
IC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwg
eyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgewor
ICAgICAgICBuZXcgV2ViQXNzZW1ibHkuR2xvYmFsKHsKKyAgICAgICAgICAgIHZhbHVlOiAnYW55
ZnVuYycKKyAgICAgICAgfSwge30pOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5l
eHBvcnRzLmNhbGwoKSwgMSk7Cit9CitmdW5jdGlvbiB0ZXN0SlNDYXRjaEFuZFJldGhyb3coKSB7
CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtd
LCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQo
KQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFt
czogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisg
ICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMy
RXF6KCkKKyAgICAgICAgICAgICAgICAgICAgLklmKCJ2b2lkIikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC5VbnJlYWNoYWJsZSgpCisgICAgICAgICAgICAgICAgICAgIC5FbHNlKCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hB
bGwoKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3Qg
YmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBmdW5j
dGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGluc3RhbmNlLmV4
cG9ydHMuY2FsbCgwKTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICB0aHJvdyBl
OworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW5jZS5l
eHBvcnRzLmNhbGwoMSksIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgIlVucmVhY2hhYmxlIGNv
ZGUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCIpOworfQorCit0ZXN0Q2Fubm90Q2F0Y2hVbnJlYWNo
YWJsZSgpOwordGVzdENhbm5vdENhdGNoT09CKCk7Cit0ZXN0V2FzbUFQSVRocm93KCk7Cit0ZXN0
SlNDYXRjaEFuZFJldGhyb3coKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0
aHJvdy1mcm9tLWNhdGNoLXRvLWNhdGNoLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRocm93
LWZyb20tY2F0Y2gtdG8tY2F0Y2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGRmZGE2ZDhhNjkxMTg0ZDk5OTU1
NWQxOGU4ZDllZTUxYmU0YWVhOAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJl
c3MvcmV0aHJvdy1mcm9tLWNhdGNoLXRvLWNhdGNoLmpzCkBAIC0wLDAgKzEsNDUgQEAKK2ltcG9y
dCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAn
Li4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5U
eXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxi
YWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rp
b24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0p
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAu
RXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisg
ICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAg
ICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAg
ICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAg
ICAgLlJldGhyb3coMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNhdGNoKDAp
CisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJB
c3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZSht
b2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFu
Y2UuZXhwb3J0cy5mb287CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhy
b3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9CisKKyAgICBhc3Nl
cnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMpOworCisgICAgdGFnID0gbmV3IFdlYkFz
c2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFtdIH0pOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0
YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ctdG8tY2F0Y2guanMgYi9KU1Rlc3RzL3dhc20v
c3RyZXNzL3JldGhyb3ctdG8tY2F0Y2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGYxY2JhNDNkY2I1YjQ0ZDlh
ZTY0ZmRjNTc5YTBjOGE2NTUwM2Y3ZAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9z
dHJlc3MvcmV0aHJvdy10by1jYXRjaC5qcwpAQCAtMCwwICsxLDg4IEBACitpbXBvcnQgQnVpbGRl
ciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2Vy
dC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsg
cGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5k
KCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQor
ICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlv
bigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAg
IC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAg
ICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAg
LkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRj
aEFsbCgpCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlJl
dGhyb3coMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJs
eSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmlu
KTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUs
IHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhw
b3J0cy5mb287CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3
IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEo
aW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMpOworCisgICAgdGFnID0gbmV3IFdlYkFzc2VtYmx5
LlRhZyh7IHBhcmFtZXRlcnM6IFtdIH0pOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5l
eHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9CisKK3sKKyAgICBjb25zdCBi
ID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCku
RnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQi
IH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24o
KS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0
aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBh
cmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAg
ICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAu
STMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykK
KyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQor
CisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9k
dWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0g
bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19
KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKworICAgIGZ1bmN0aW9u
IGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRh
ZywgW10pOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwg
Myk7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7
CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHku
RXhjZXB0aW9uKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy10
by1kZWxlZ2F0ZS10by1jYXRjaC5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy10by1k
ZWxlZ2F0ZS10by1jYXRjaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDQ3OWMwY2VhMjNiNjBlMzk1NWExYjUx
NzQ5MWZiNGY3NmVlN2FkCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9y
ZXRocm93LXRvLWRlbGVnYXRlLXRvLWNhdGNoLmpzCkBAIC0wLDAgKzEsMjU5IEBACitpbXBvcnQg
QnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4u
L2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250
ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAg
ICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJ0YWciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAi
dm9pZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIs
IDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5Ucnko
ImkzMiIpCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAg
LlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNoQWxs
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAg
ICAgICAgICAgLlJldGhyb3coMCkKKyAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAgICAgLkRlbGVnYXRlKDApCisgICAgICAgICAgICAuQ2F0Y2goMSkKKyAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0
KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAg
IGxldCBvdGhlclRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbImkzMiJd
fSkKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUs
IHsgY29udGV4dDogeyBjYWxsYmFjaywgdGFnOiBvdGhlclRhZyB9fSk7CisKKyAgICBsZXQgdGFn
ID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisgICAgbGV0IGFyZ3MgPSBbXTsKKworICAgIGZ1bmN0
aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9u
KHRhZywgYXJncyk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2Fs
bCgpLCAzKTsKKworICAgIHRhZyA9IG90aGVyVGFnOworICAgIGFyZ3MgPSBbMTAwXTsKKworICAg
IGxldCBleG4gPSBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1i
bHkuRXhjZXB0aW9uKTsKKyAgICBhc3NlcnQuZXEoZXhuLmdldEFyZyh0YWcsIDApLCAxMDApOwor
fQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNvbnRleHQiLCAiY2Fs
bGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAuRXhjZXB0
aW9uKCJjb250ZXh0IiwgInRhZyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9KQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2Vw
dGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCku
RnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMSkKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQor
ICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hB
bGwoKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAg
ICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAg
ICAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDIpCisgICAgICAgICAgICAgICAgICAgICAgICAuUmV0aHJvdygxKQorICAgICAgICAg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5E
ZWxlZ2F0ZSgwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBj
b25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGxldCBvdGhlclRhZyA9IG5ldyBXZWJBc3Nl
bWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbImkzMiJdfSkKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5l
dyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjaywgdGFn
OiBvdGhlclRhZyB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287Cisg
ICAgbGV0IGFyZ3MgPSBbXTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICBs
ZXQgZXhuID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIGFyZ3MpOworICAgICAgICB0
YWcgPSBvdGhlclRhZzsKKyAgICAgICAgYXJncyA9IFsxMDBdOworICAgICAgICB0aHJvdyBleG47
CisgICAgfQorCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFz
c2VtYmx5LkV4Y2VwdGlvbik7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsK
KyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5j
dGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkK
KyAgICAgICAgICAgIC5FeGNlcHRpb24oImNvbnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMy
Il0sIHJldDogInZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5F
bmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgp
CisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0
aW9uKCJmb28iLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAg
ICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQor
ICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgICAg
IC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5SZXRocm93KDEpCisgICAgICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgLkRlbGVnYXRlKDEpCisg
ICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAg
ICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKwor
ICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdl
YkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNl
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNr
LCB0YWc6IG90aGVyVGFnIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZv
bzsKKyAgICBsZXQgYXJncyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAg
ICAgIGxldCBleG4gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7CisgICAg
ICAgIHRhZyA9IG90aGVyVGFnOworICAgICAgICBhcmdzID0gWzEwMF07CisgICAgICAgIHRocm93
IGV4bjsKKyAgICB9CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwg
V2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KKworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWls
ZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZv
aWQiIH0pCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJjb250ZXh0IiwgInRhZyIsIHsgcGFyYW1z
OiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119
KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAg
LkV4Y2VwdGlvbigiZm9vIiwgMSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQor
ICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAg
ICAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNh
bGwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAg
ICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEp
CisgICAgICAgICAgICAgICAgICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5DYXRj
aCgwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25z
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFn
ID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0
IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7
IGNhbGxiYWNrLCB0YWc6IG90aGVyVGFnIH19KTsKKworICAgIGxldCB0YWcgPSBvdGhlclRhZzsK
KyAgICBsZXQgYXJncyA9IFsxMDBdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAg
ICAgIGxldCBleG4gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7CisgICAg
ICAgIHRocm93IGV4bjsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5j
YWxsKCksIDEwMCk7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBi
LlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Y29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAg
ICAgICAgIC5FeGNlcHRpb24oImNvbnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJl
dDogInZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQor
ICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJm
b28iLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAu
VHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAg
ICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAg
ICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgICAgIC5DYXRj
aEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDEpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5SZXRocm93KDEpCisgICAgICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgLkRlbGVnYXRlKDApCisgICAgICAg
ICAgICAuQ2F0Y2goMSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25z
dCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGxldCBvdGhlclRhZyA9IG5ldyBXZWJBc3NlbWJs
eS5UYWcoeyBwYXJhbWV0ZXJzOiBbImkzMiJdfSkKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBX
ZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjaywgdGFnOiBv
dGhlclRhZyB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisgICAg
bGV0IGFyZ3MgPSBbXTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICBsZXQg
ZXhuID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIGFyZ3MpOworICAgICAgICB0YWcg
PSBvdGhlclRhZzsKKyAgICAgICAgYXJncyA9IFsxMDBdOworICAgICAgICB0aHJvdyBleG47Cisg
ICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKK30KZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3Mvc2ltcGxlLWV4cG9ydC1leGNlcHRpb24uanMg
Yi9KU1Rlc3RzL3dhc20vc3RyZXNzL3NpbXBsZS1leHBvcnQtZXhjZXB0aW9uLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjJiOTY5OTk3NTNkM2E0YWQwODZhMGVjZTU4OTgyODRmOGZjYjhiNzAKLS0tIC9kZXYvbnVs
bAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3NpbXBsZS1leHBvcnQtZXhjZXB0aW9uLmpzCkBA
IC0wLDAgKzEsMTYgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBv
cnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5l
dyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5k
KCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVu
ZCgpCisgICAgICAgIC5FeHBvcnQoKS5FeGNlcHRpb24oImZvbyIsIDApLkVuZCgpCisKKyAgICBj
b25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFz
c2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7CisKKyAgICBhc3NlcnQuaW5zdGFuY2VvZihpbnN0YW5j
ZS5leHBvcnRzLmZvbywgV2ViQXNzZW1ibHkuVGFnKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS92OC9MSUNFTlNFIGIvSlNUZXN0cy93YXNtL3Y4L0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTNk
OWM0N2UzM2MxODI5Mjc0MWYxZTQwODkwYzhmZTJkNjI5OTY0NgotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvd2FzbS92OC9MSUNFTlNFCkBAIC0wLDAgKzEsNjIgQEAKK1RoaXMgbGljZW5zZSBh
cHBsaWVzIHRvIGFsbCBwYXJ0cyBvZiBWOCB0aGF0IGFyZSBub3QgZXh0ZXJuYWxseQorbWFpbnRh
aW5lZCBsaWJyYXJpZXMuICBUaGUgZXh0ZXJuYWxseSBtYWludGFpbmVkIGxpYnJhcmllcyB1c2Vk
IGJ5IFY4CithcmU6CisKKyAgLSBQQ1JFIHRlc3Qgc3VpdGUsIGxvY2F0ZWQgaW4KKyAgICB0ZXN0
L21qc3VuaXQvdGhpcmRfcGFydHkvcmVnZXhwLXBjcmUvcmVnZXhwLXBjcmUuanMuICBUaGlzIGlz
IGJhc2VkIG9uIHRoZQorICAgIHRlc3Qgc3VpdGUgZnJvbSBQQ1JFLTcuMywgd2hpY2ggaXMgY29w
eXJpZ2h0ZWQgYnkgdGhlIFVuaXZlcnNpdHkKKyAgICBvZiBDYW1icmlkZ2UgYW5kIEdvb2dsZSwg
SW5jLiAgVGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKKyAgICBhcmUgZW1iZWRkZWQg
aW4gcmVnZXhwLXBjcmUuanMuCisKKyAgLSBMYXlvdXQgdGVzdHMsIGxvY2F0ZWQgaW4gdGVzdC9t
anN1bml0L3RoaXJkX3BhcnR5L29iamVjdC1rZXlzLiAgVGhlc2UgYXJlCisgICAgYmFzZWQgb24g
bGF5b3V0IHRlc3RzIGZyb20gd2Via2l0Lm9yZyB3aGljaCBhcmUgY29weXJpZ2h0ZWQgYnkKKyAg
ICBBcHBsZSBDb21wdXRlciwgSW5jLiBhbmQgcmVsZWFzZWQgdW5kZXIgYSAzLWNsYXVzZSBCU0Qg
bGljZW5zZS4KKworICAtIFN0cm9uZ3RhbGsgYXNzZW1ibGVyLCB0aGUgYmFzaXMgb2YgdGhlIGZp
bGVzIGFzc2VtYmxlci1hcm0taW5sLmgsCisgICAgYXNzZW1ibGVyLWFybS5jYywgYXNzZW1ibGVy
LWFybS5oLCBhc3NlbWJsZXItaWEzMi1pbmwuaCwKKyAgICBhc3NlbWJsZXItaWEzMi5jYywgYXNz
ZW1ibGVyLWlhMzIuaCwgYXNzZW1ibGVyLXg2NC1pbmwuaCwKKyAgICBhc3NlbWJsZXIteDY0LmNj
LCBhc3NlbWJsZXIteDY0LmgsIGFzc2VtYmxlci1taXBzLWlubC5oLAorICAgIGFzc2VtYmxlci1t
aXBzLmNjLCBhc3NlbWJsZXItbWlwcy5oLCBhc3NlbWJsZXIuY2MgYW5kIGFzc2VtYmxlci5oLgor
ICAgIFRoaXMgY29kZSBpcyBjb3B5cmlnaHRlZCBieSBTdW4gTWljcm9zeXN0ZW1zIEluYy4gYW5k
IHJlbGVhc2VkCisgICAgdW5kZXIgYSAzLWNsYXVzZSBCU0QgbGljZW5zZS4KKworICAtIFZhbGdy
aW5kIGNsaWVudCBBUEkgaGVhZGVyLCBsb2NhdGVkIGF0IHNyYy90aGlyZF9wYXJ0eS92YWxncmlu
ZC92YWxncmluZC5oCisgICAgVGhpcyBpcyByZWxlYXNlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2Uu
CisKKyAgLSBUaGUgV2FzbSBDL0MrKyBBUEkgaGVhZGVycywgbG9jYXRlZCBhdCB0aGlyZF9wYXJ0
eS93YXNtLWFwaS93YXNtLntoLGhofQorICAgIFRoaXMgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEFw
YWNoZSBsaWNlbnNlLiBUaGUgQVBJJ3MgdXBzdHJlYW0gcHJvdG90eXBlCisgICAgaW1wbGVtZW50
YXRpb24gYWxzbyBmb3JtZWQgdGhlIGJhc2lzIG9mIFY4J3MgaW1wbGVtZW50YXRpb24gaW4KKyAg
ICBzcmMvd2FzbS9jLWFwaS5jYy4KKworVGhlc2UgbGlicmFyaWVzIGhhdmUgdGhlaXIgb3duIGxp
Y2Vuc2VzOyB3ZSByZWNvbW1lbmQgeW91IHJlYWQgdGhlbSwKK2FzIHRoZWlyIHRlcm1zIG1heSBk
aWZmZXIgZnJvbSB0aGUgdGVybXMgYmVsb3cuCisKK0Z1cnRoZXIgbGljZW5zZSBpbmZvcm1hdGlv
biBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBmaWxlcyBsb2NhdGVkIGluIAorc3ViLWRpcmVjdG9y
aWVzLgorCitDb3B5cmlnaHQgMjAxNCwgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1h
cGkuanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1hcGkuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFk
NTM2ODE0NTZjNjVlYzg2NzE4Yjg1ZTFhZmQ2ZmMwZmQ4OTc2NQotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWFwaS5qcwpAQCAtMCwwICsxLDIzMiBAQAorLy8g
Q29weXJpZ2h0IDIwMjEgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8v
IEZsYWdzOiAtLWV4cGVyaW1lbnRhbC13YXNtLWVoIC0tZXhwZXJpbWVudGFsLXdhc20tcmVmdHlw
ZXMKKworbG9hZCgid2FzbS1tb2R1bGUtYnVpbGRlci5qcyIpOworCisoZnVuY3Rpb24gVGVzdElt
cG9ydCgpIHsKKworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5LlRhZygpLCBU
eXBlRXJyb3IsCisgICAgICAvZXhwZWN0cyB0aGUgdGFnIHR5cGUgYXMgdGhlIGZpcnN0IGFyZ3Vt
ZW50Lyk7CisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuVGFnKHt9KSwgVHlw
ZUVycm9yLAorICAgICAgL2V4cGVjdHMgYSB0YWcgdHlwZSB3aXRoIHRoZSAncGFyYW1ldGVycycg
cHJvcGVydHkvKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5UYWcoe3Bh
cmFtZXRlcnM6IFsnZm9vJ119KSwgVHlwZUVycm9yLAorICAgICAgL2V4cGVjdHMgdGhlICdwYXJh
bWV0ZXJzJyBmaWVsZCBvZiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBzZXF1ZW5jZSBvZiBX
ZWJBc3NlbWJseSB2YWx1ZSB0eXBlcy8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5LlRhZyh7cGFyYW1ldGVyczoge319KSwgVHlwZUVycm9yLAorICAgICAgL1R5cGUgZXJy
b3IvKTsKKworICBsZXQganNfZXhjZXB0X2kzMiA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFt
ZXRlcnM6IFsnaTMyJ119KTsKKyAgbGV0IGpzX2V4Y2VwdF92ID0gbmV3IFdlYkFzc2VtYmx5LlRh
Zyh7cGFyYW1ldGVyczogW119KTsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleCIsIGtTaWdfdl9pKTsKKwor
ICBhc3NlcnREb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6
IGpzX2V4Y2VwdF9pMzIgfX0pKTsKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRl
ci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IGpzX2V4Y2VwdF92IH19KSwgV2ViQXNzZW1ibHkuTGlu
a0Vycm9yLAorICAgICAgL2ltcG9ydGVkIFRhZyBtOmV4IHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNo
IHRoZSBpbXBvcnRlZCBXZWJBc3NlbWJseSBUYWcncyBzaWduYXR1cmUvKTsKKyAgYXNzZXJ0VGhy
b3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IGpzX2V4Y2Vw
dF92IH19KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAorICAgICAgL2ltcG9ydGVkIFRhZyBtOmV4
IHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBpbXBvcnRlZCBXZWJBc3NlbWJseSBUYWcncyBz
aWduYXR1cmUvKTsKKyAgYXNzZXJ0VHJ1ZShqc19leGNlcHRfaTMyLnRvU3RyaW5nKCkgPT0gIltv
YmplY3QgV2ViQXNzZW1ibHkuVGFnXSIpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RFeHBvcnQo
KSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNl
cHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5k
KCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5p
bnN0YW50aWF0ZSgpOworCisgIGFzc2VydFRydWUoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w
ZXJ0eS5jYWxsKGluc3RhbmNlLmV4cG9ydHMsICdleCcpKTsKKyAgYXNzZXJ0RXF1YWxzKCJvYmpl
Y3QiLCB0eXBlb2YgaW5zdGFuY2UuZXhwb3J0cy5leCk7CisgIGFzc2VydEluc3RhbmNlb2YoaW5z
dGFuY2UuZXhwb3J0cy5leCwgV2ViQXNzZW1ibHkuVGFnKTsKKyAgYXNzZXJ0U2FtZShpbnN0YW5j
ZS5leHBvcnRzLmV4LmNvbnN0cnVjdG9yLCBXZWJBc3NlbWJseS5UYWcpOworfSkoKTsKKworKGZ1
bmN0aW9uIFRlc3RJbXBvcnRFeHBvcnQoKSB7CisKKyAgbGV0IGpzX2V4X2kzMiA9IG5ldyBXZWJB
c3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFsnaTMyJ119KTsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcg
V2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGluZGV4ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRh
ZygibSIsICJleCIsIGtTaWdfdl9pKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwg
a0V4dGVybmFsVGFnLCBpbmRleCk7CisKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50
aWF0ZSh7IG06IHsgZXg6IGpzX2V4X2kzMiB9fSk7CisgIGxldCByZXMgPSBpbnN0YW5jZS5leHBv
cnRzLmV4OworICBhc3NlcnRFcXVhbHMocmVzLCBqc19leF9pMzIpOworfSkoKTsKKworCisoZnVu
Y3Rpb24gVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKCkgeworICAvLyBDaGVjayBlcnJvcnMuCisg
IGxldCBqc190YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbXX0pOworICBh
c3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbigwKSwgVHlwZUVycm9y
LAorICAgICAgL1dlYkFzc2VtYmx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciBleHBlY3RzIHRoZSBm
aXJzdCBhcmd1bWVudCB0byBiZSBhIFdlYkFzc2VtYmx5LlRhZy8pOworICBhc3NlcnRUaHJvd3Mo
KCkgPT4gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih7fSksIFR5cGVFcnJvciwKKyAgICAgIC9X
ZWJBc3NlbWJseS5FeGNlcHRpb24gY29uc3RydWN0b3IgZXhwZWN0cyB0aGUgZmlyc3QgYXJndW1l
bnQgdG8gYmUgYSBXZWJBc3NlbWJseS5UYWcvKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IFdlYkFz
c2VtYmx5LkV4Y2VwdGlvbihqc190YWcpLCBUeXBlRXJyb3IsCisgICAgICAvY2FsbGluZyBXZWJB
c3NlbWJseS5FeGNlcHRpb24gY29uc3RydWN0b3Igd2l0aG91dCBuZXcgaXMgaW52YWxpZC8pOwor
ICBsZXQganNfZXhjZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbihqc190YWcsIFtd
KTsKKworICAvLyBDaGVjayBwcm90b3R5cGUuCisgIGFzc2VydFNhbWUoV2ViQXNzZW1ibHkuRXhj
ZXB0aW9uLnByb3RvdHlwZSwganNfZXhjZXB0aW9uLl9fcHJvdG9fXyk7CisgIGFzc2VydFRydWUo
anNfZXhjZXB0aW9uIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKworICAvLyBD
aGVjayBwcm90b3R5cGUgb2YgYSB0aHJvd24gZXhjZXB0aW9uLgorICBsZXQgYnVpbGRlciA9IG5l
dyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgd2FzbV90YWcgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93Iiwga1NpZ192X3YpCisgICAg
ICAuYWRkQm9keShba0V4cHJUaHJvdywgd2FzbV90YWddKS5leHBvcnRGdW5jKCk7CisgIGxldCBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgdHJ5IHsKKyAgICBpbnN0YW5jZS5l
eHBvcnRzLnRocm93KCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBhc3NlcnRUcnVlKGUgaW5zdGFu
Y2VvZiBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICB9Cit9KSgpOworCisoZnVuY3Rpb24gVGVz
dEV4Y2VwdGlvbkNvbnN0cnVjdG9yV2l0aFBheWxvYWQoKSB7CisgIGxldCB0YWcgPSBuZXcgV2Vi
QXNzZW1ibHkuVGFnKAorICAgICAge3BhcmFtZXRlcnM6IFsnaTMyJywgJ2YzMicsICdpNjQnLCAn
ZjY0JywgJ2V4dGVybnJlZiddfSk7CisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuRXhjZXB0aW9uKAorICAgICAgdGFnLCBbMW4sIDIsIDNuLCA0LCB7fV0pLCBUeXBlRXJyb3Ip
OworICBhc3NlcnREb2VzTm90VGhyb3coKCkgPT4gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0
YWcsIFszLCA0LCA1biwgNiwge31dKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdENhdGNoSlNF
eGNlcHRpb24oKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7Cisg
IGxldCBqc190YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbXX0pOworICBs
ZXQganNfZnVuY19pbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0KCdtJywgJ2pzX2Z1bmMnLCBrU2ln
X3Zfdik7CisgIGxldCBqc190YWdfaW5kZXggPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwg
ImpzX3RhZyIsIGtTaWdfdl92KTsKKyAgbGV0IHRhZ19pbmRleCA9IGJ1aWxkZXIuYWRkVGFnKGtT
aWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoIndhc21fdGFnIiwga0V4dGVybmFs
VGFnLCB0YWdfaW5kZXgpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaCIsIGtTaWdfaV92
KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAg
IGtFeHByQ2FsbEZ1bmN0aW9uLCBqc19mdW5jX2luZGV4LAorICAgICAgICBrRXhwckkzMkNvbnN0
LCAwLAorICAgICAgICBrRXhwckNhdGNoLCBqc190YWdfaW5kZXgsCisgICAgICAgIGtFeHBySTMy
Q29uc3QsIDEsCisgICAgICAgIGtFeHByQ2F0Y2gsIHRhZ19pbmRleCwKKyAgICAgICAga0V4cHJJ
MzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAg
bGV0IHRhZzsKKyAgZnVuY3Rpb24ganNfZnVuYygpIHsKKyAgICB0aHJvdyBuZXcgV2ViQXNzZW1i
bHkuRXhjZXB0aW9uKHRhZywgW10pOworICB9CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5z
dGFudGlhdGUoe206IHtqc19mdW5jLCBqc190YWd9fSk7CisgIHRhZyA9IGpzX3RhZzsKKyAgYXNz
ZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMuY2F0Y2goKSk7CisgIHRhZyA9IGluc3RhbmNl
LmV4cG9ydHMud2FzbV90YWc7CisgIGFzc2VydEVxdWFscygyLCBpbnN0YW5jZS5leHBvcnRzLmNh
dGNoKCkpOworfSkoKTsKKworZnVuY3Rpb24gVGVzdENhdGNoSlModHlwZXNfc3RyLCB0eXBlcywg
dmFsdWVzKSB7CisgIC8vIENyZWF0ZSBhIEpTIGV4Y2VwdGlvbiwgY2F0Y2ggaXQgaW4gd2FzbSBh
bmQgY2hlY2sgdGhlIHVucGFja2VkIHZhbHVlKHMpLgorICBsZXQgYnVpbGRlciA9IG5ldyBXYXNt
TW9kdWxlQnVpbGRlcigpOworICBsZXQganNfdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFy
YW1ldGVyczogdHlwZXNfc3RyfSk7CisgIGxldCBqc19mdW5jX2luZGV4ID0gYnVpbGRlci5hZGRJ
bXBvcnQoJ20nLCAnanNfZnVuYycsIGtTaWdfdl92KTsKKyAgbGV0IHNpZzEgPSBtYWtlU2lnKHR5
cGVzLCBbXSk7CisgIGxldCBzaWcyID0gbWFrZVNpZyhbXSwgdHlwZXMpOworICBsZXQganNfdGFn
X2luZGV4ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJqc190YWciLCBzaWcxKTsKKyAg
bGV0IHRhZ19pbmRleCA9IGJ1aWxkZXIuYWRkVGFnKHNpZzEpOworICBsZXQgcmV0dXJuX3R5cGUg
PSBidWlsZGVyLmFkZFR5cGUoc2lnMik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJ3YXNt
X3RhZyIsIGtFeHRlcm5hbFRhZywgdGFnX2luZGV4KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigi
Y2F0Y2giLCBzaWcyKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwgcmV0dXJu
X3R5cGUsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBqc19mdW5jX2luZGV4LAorICAgICAg
ICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICBrRXhwckNhdGNoLCBqc190YWdfaW5kZXgsCisg
ICAgICAgIGtFeHByQ2F0Y2gsIHRhZ19pbmRleCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0p
LmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGV4Y2VwdGlvbjsKKyAgZnVuY3Rpb24ganNfZnVuYygpIHsK
KyAgICB0aHJvdyBleGNlcHRpb247CisgIH0KKyAgbGV0IGV4cGVjdGVkID0gdmFsdWVzLmxlbmd0
aCA9PSAxID8gdmFsdWVzWzBdIDogdmFsdWVzOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmlu
c3RhbnRpYXRlKHttOiB7anNfZnVuYywganNfdGFnfX0pOworICBleGNlcHRpb24gPSBuZXcgV2Vi
QXNzZW1ibHkuRXhjZXB0aW9uKGpzX3RhZywgdmFsdWVzKTsKKyAgYXNzZXJ0RXF1YWxzKGV4cGVj
dGVkLCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoKCkpOworICBleGNlcHRpb24gPSBuZXcgV2ViQXNz
ZW1ibHkuRXhjZXB0aW9uKGluc3RhbmNlLmV4cG9ydHMud2FzbV90YWcsIHZhbHVlcyk7CisgIGFz
c2VydEVxdWFscyhleHBlY3RlZCwgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaCgpKTsKK30KKworKGZ1
bmN0aW9uIFRlc3RDYXRjaEpTRXhjZXB0aW9uV2l0aFBheWxvYWQoKSB7CisgIFRlc3RDYXRjaEpT
KFsnaTMyJ10sIFtrV2FzbUkzMl0sIFsxXSk7CisgIFRlc3RDYXRjaEpTKFsnaTY0J10sIFtrV2Fz
bUk2NF0sIFsybl0pOworICBUZXN0Q2F0Y2hKUyhbJ2YzMiddLCBba1dhc21GMzJdLCBbM10pOwor
ICBUZXN0Q2F0Y2hKUyhbJ2Y2NCddLCBba1dhc21GNjRdLCBbNF0pOworICBUZXN0Q2F0Y2hKUyhb
J2V4dGVybnJlZiddLCBba1dhc21FeHRlcm5SZWZdLCBbe3ZhbHVlOiA1fV0pOworICBUZXN0Q2F0
Y2hKUyhbJ2kzMicsICdpNjQnLCAnZjMyJywgJ2Y2NCcsICdleHRlcm5yZWYnXSwKKyAgICAgICAg
ICAgICAgW2tXYXNtSTMyLCBrV2FzbUk2NCwga1dhc21GMzIsIGtXYXNtRjY0LCBrV2FzbUV4dGVy
blJlZl0sCisgICAgICAgICAgICAgIFs2LCA3biwgOCwgOSwge3ZhbHVlOiAxMH1dKTsKK30pKCk7
CisKK2Z1bmN0aW9uIFRlc3RHZXRBcmdIZWxwZXIodHlwZXNfc3RyLCB0eXBlcywgdmFsdWVzKSB7
CisgIGxldCB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiB0eXBlc19zdHJ9
KTsKKyAgbGV0IGV4Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCB2YWx1
ZXMpOworICBmb3IgKGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyArK2kpIHsKKyAgICBhc3NlcnRF
cXVhbHMoZXhjZXB0aW9uLmdldEFyZyh0YWcsIGkpLCB2YWx1ZXNbaV0pOworICB9CisKKyAgbGV0
IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IHNpZyA9IG1ha2VTaWco
dHlwZXMsIFtdKTsKKyAgbGV0IHRhZ19pbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0i
LCAidCIsIHNpZyk7CisgIGxldCBib2R5ID0gW107CisgIGZvciAoaSA9IDA7IGkgPCB0eXBlcy5s
ZW5ndGg7ICsraSkgeworICAgIGJvZHkucHVzaChrRXhwckxvY2FsR2V0LCBpKTsKKyAgfQorICBi
b2R5LnB1c2goa0V4cHJUaHJvdywgdGFnX2luZGV4KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigi
dGhyb3ciLCBzaWcpCisgICAgICAuYWRkQm9keShib2R5KS5leHBvcnRGdW5jKCk7CisgIGxldCBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeydtJzogeyd0JzogdGFnfX0pOworICB0cnkg
eworICAgIGluc3RhbmNlLmV4cG9ydHMudGhyb3coLi4udmFsdWVzKTsKKyAgfSBjYXRjaCAoZSkg
eworICAgIGZvciAoaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7ICsraSkgeworICAgICAgYXNzZXJ0
RXF1YWxzKGUuZ2V0QXJnKHRhZywgaSksIHZhbHVlc1tpXSk7CisgICAgfQorICB9Cit9CisKKyhm
dW5jdGlvbiBUZXN0R2V0QXJnKCkgeworICAvLyBDaGVjayBlcnJvcnMuCisgIGxldCB0YWcgPSBu
ZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbJ2kzMiddfSk7CisgIGxldCBleGNlcHRp
b24gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgWzBdKTsKKyAgYXNzZXJ0VGhyb3dz
KCgpID0+IGV4Y2VwdGlvbi5nZXRBcmcoMCwgMCksIFR5cGVFcnJvciwKKyAgICAgIC9GaXJzdCBh
cmd1bWVudCBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuVGFnLyk7CisgIGFzc2VydFRocm93cygoKSA9
PiBleGNlcHRpb24uZ2V0QXJnKHt9LCAwKSwgVHlwZUVycm9yLAorICAgICAgL0ZpcnN0IGFyZ3Vt
ZW50IG11c3QgYmUgYSBXZWJBc3NlbWJseS5UYWcvKTsKKyAgLy9hc3NlcnRUaHJvd3MoKCkgPT4g
ZXhjZXB0aW9uLmdldEFyZyh0YWcsIHVuZGVmaW5lZCksIFR5cGVFcnJvciwKKyAgICAgIC8vL0lu
ZGV4IG11c3QgYmUgY29udmVydGlibGUgdG8gYSB2YWxpZCBudW1iZXIvKTsKKyAgYXNzZXJ0VGhy
b3dzKCgpID0+IGV4Y2VwdGlvbi5nZXRBcmcodGFnLCAweEZGRkZGRkZGKSwgUmFuZ2VFcnJvciwK
KyAgICAgIC9JbmRleCBvdXQgb2YgcmFuZ2UvKTsKKyAgbGV0IHdyb25nX3RhZyA9IG5ldyBXZWJB
c3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFsnaTMyJ119KTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+
IGV4Y2VwdGlvbi5nZXRBcmcod3JvbmdfdGFnLCAwKSwgVHlwZUVycm9yLAorICAgICAgL0ZpcnN0
IGFyZ3VtZW50IGRvZXMgbm90IG1hdGNoIHRoZSBleGNlcHRpb24gdGFnLyk7CisKKyAgLy8gQ2hl
Y2sgZGVjb2RpbmcuCisgIFRlc3RHZXRBcmdIZWxwZXIoWydpMzInXSwgW2tXYXNtSTMyXSwgWzFd
KTsKKyAgVGVzdEdldEFyZ0hlbHBlcihbJ2k2NCddLCBba1dhc21JNjRdLCBbMm5dKTsKKyAgVGVz
dEdldEFyZ0hlbHBlcihbJ2YzMiddLCBba1dhc21GMzJdLCBbM10pOworICBUZXN0R2V0QXJnSGVs
cGVyKFsnZjY0J10sIFtrV2FzbUY2NF0sIFs0XSk7CisgIFRlc3RHZXRBcmdIZWxwZXIoWydleHRl
cm5yZWYnXSwgW2tXYXNtRXh0ZXJuUmVmXSwgW3t2YWw6IDV9XSk7CisgIFRlc3RHZXRBcmdIZWxw
ZXIoWydpMzInLCAnaTY0JywgJ2YzMicsICdmNjQnLCAnZXh0ZXJucmVmJ10sIFtrV2FzbUkzMiwg
a1dhc21JNjQsIGtXYXNtRjMyLCBrV2FzbUY2NCwga1dhc21FeHRlcm5SZWZdLCBbNSwgNm4sIDcs
IDgsIHt2YWw6IDl9XSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEV4Y2VwdGlvbklzKCkgewor
ICBsZXQgdGFnMSA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFtdfSk7CisgIGxl
dCB0YWcyID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogW119KTsKKyAgYXNzZXJ0
VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oe30sIFtdKSwgVHlwZUVycm9y
LAorICAgICAgL2V4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgV2ViQXNzZW1ibHku
VGFnLyk7CisKKyAgbGV0IGV4Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFn
MSwgW10pOworICBhc3NlcnRUcnVlKGV4Y2VwdGlvbi5pcyh0YWcxKSk7CisgIGFzc2VydEZhbHNl
KGV4Y2VwdGlvbi5pcyh0YWcyKSk7CisKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGV4Y2VwdGlvbi5p
cy5hcHBseSh7fSwgdGFnMSksIFR5cGVFcnJvciwKKyAgICAgIC9XZWJBc3NlbWJseS5FeGNlcHRp
b24gb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tRXhjZXB0aW9uIG9iamVjdC8pOworfSkoKTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWV4cG9ydC5qcyBiL0pTVGVzdHMv
d2FzbS92OC9leGNlcHRpb25zLWV4cG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYzk2OTBmNWI4OGY3ZTU0
M2NkYzkzZDkxY2MxYTgxODNkODM4M2JmCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNt
L3Y4L2V4Y2VwdGlvbnMtZXhwb3J0LmpzCkBAIC0wLDAgKzEsNTMgQEAKKy8vIENvcHlyaWdodCAy
MDE4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1l
eHBvc2Utd2FzbSAtLWV4cGVyaW1lbnRhbC13YXNtLWVoCisKK2xvYWQoIndhc20tbW9kdWxlLWJ1
aWxkZXIuanMiKTsKKworKGZ1bmN0aW9uIFRlc3RFeHBvcnRNdWx0aXBsZSgpIHsKKyAgbGV0IGJ1
aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVy
LmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1NpZ192
X2kpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgxYSIsIGtFeHRlcm5hbFRhZywgZXhj
ZXB0MSk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDFiIiwga0V4dGVybmFsVGFnLCBl
eGNlcHQxKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4MiIsIGtFeHRlcm5hbFRhZywg
ZXhjZXB0Mik7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBh
c3NlcnRUcnVlKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnN0YW5jZS5l
eHBvcnRzLCAnZXgxYScpKTsKKyAgYXNzZXJ0VHJ1ZShPYmplY3QucHJvdG90eXBlLmhhc093blBy
b3BlcnR5LmNhbGwoaW5zdGFuY2UuZXhwb3J0cywgJ2V4MWInKSk7CisgIGFzc2VydFRydWUoT2Jq
ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGluc3RhbmNlLmV4cG9ydHMsICdleDIn
KSk7CisgIC8vIEZJWE1FOiBmaXggYnJva2VuIHY4IHdhc20gZXhjZXB0aW9ucyB0ZXN0cworICAv
LyBhc3NlcnRTYW1lKGluc3RhbmNlLmV4cG9ydHMuZXgxYSwgaW5zdGFuY2UuZXhwb3J0cy5leDFi
KTsKKyAgYXNzZXJ0Tm90U2FtZShpbnN0YW5jZS5leHBvcnRzLmV4MWEsIGluc3RhbmNlLmV4cG9y
dHMuZXgyKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0T3V0T2ZCb3VuZHMoKSB7Cisg
IGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBi
dWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleF9v
b2IiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCArIDEpOworICBhc3NlcnRUaHJvd3MoCisgICAgICAo
KSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKCksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwKKyAg
ICAgIC9XZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMxOiAwdGggRXhw
b3J0IGhhcyBpbnZhbGlkIGV4Y2VwdGlvbiBudW1iZXIgMSBpdCBleGNlZWRzIHRoZSBleGNlcHRp
b24gaW5kZXggc3BhY2UgMSwgbmFtZWQgJ2V4X29vYicvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBU
ZXN0RXhwb3J0U2FtZU5hbWVUd2ljZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAg
YnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBi
dWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGFz
c2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoKSwgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLAorICAgICAgL1dlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMzA6IGR1cGxpY2F0ZSBleHBvcnQ6ICdleCcvKTsKK30pKCk7CisKKyhmdW5jdGlv
biBUZXN0RXhwb3J0TW9kdWxlR2V0RXhwb3J0cygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2Fz
bU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92
KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQp
OworICBsZXQgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLnRvQnVmZmVy
KCkpOworCisgIGxldCBleHBvcnRzID0gV2ViQXNzZW1ibHkuTW9kdWxlLmV4cG9ydHMobW9kdWxl
KTsKKyAgYXNzZXJ0QXJyYXlFcXVhbHMoW3sgbmFtZTogImV4Iiwga2luZDogInRhZyIgfV0sIGV4
cG9ydHMpOworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWV4
dGVybnJlZi5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWV4dGVybnJlZi5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lYmJkYTM3ZjE2ZWIxNTAzMjQ5MDlkNmI2YzUwZmRhYThkMDQ4ZDU0Ci0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXh0ZXJucmVmLmpzCkBAIC0w
LDAgKzEsOTYgQEAKKy8vIENvcHlyaWdodCAyMDE4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1leHBlcmltZW50YWwtd2FzbS1laCAtLWV4cGVyaW1l
bnRhbC13YXNtLXJlZnR5cGVzIC0tYWxsb3ctbmF0aXZlcy1zeW50YXgKKworbG9hZCgid2FzbS1t
b2R1bGUtYnVpbGRlci5qcyIpOworbG9hZCgiZXhjZXB0aW9ucy11dGlscy5qcyIpOworCisvLyBU
ZXN0IHRoZSBlbmNvZGluZyBvZiBhIHRocm93biBleGNlcHRpb24gd2l0aCBhIG51bGwtcmVmIHZh
bHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd1JlZk51bGwoKSB7CisgIGxldCBidWlsZGVyID0gbmV3
IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2ln
X3Zfcik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X251bGwiLCBrU2lnX3ZfdikKKyAg
ICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJSZWZOdWxsLCBrRXh0ZXJuUmVmQ29kZSwKKyAg
ICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWls
ZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGlu
c3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbbnVsbF0sICgpID0+IGluc3RhbmNlLmV4cG9y
dHMudGhyb3dfbnVsbCgpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcvY2F0Y2hpbmcgdGhl
IG51bGwtcmVmIHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd0NhdGNoUmVmTnVsbCgpIHsKKyAg
bGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1
aWxkZXIuYWRkVGFnKGtTaWdfdl9yKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfY2F0
Y2hfbnVsbCIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwg
a1dhc21JMzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwckkz
MkVxeiwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByUmVm
TnVsbCwga0V4dGVyblJlZkNvZGUsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisg
ICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgNDIsCisgICAg
ICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBr
RXhwclJlZklzTnVsbCwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbUkzMiwKKyAgICAgICAgICAg
IGtFeHBySTMyQ29uc3QsIDIzLAorICAgICAgICAgIGtFeHByRWxzZSwKKyAgICAgICAgICAgIGtF
eHByVW5yZWFjaGFibGUsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByRW5kLAor
ICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBr
RXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlh
dGUoKTsKKworICBhc3NlcnRFcXVhbHMoMjMsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hf
bnVsbCgwKSk7CisgIGFzc2VydEVxdWFscyg0MiwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRj
aF9udWxsKDEpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3duIGV4
Y2VwdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHR5cGUgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93
UmVmUGFyYW0oKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7Cisg
IGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfcik7CisgIGJ1aWxkZXIuYWRkRnVu
Y3Rpb24oInRocm93X3BhcmFtIiwga1NpZ192X3IpCisgICAgICAuYWRkQm9keShbCisgICAgICAg
IGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0p
LmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFs
VGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7Cisg
IGxldCBvID0gbmV3IE9iamVjdCgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGlu
c3RhbmNlLmV4cG9ydHMuZXgsIFtvXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJh
bShvKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgs
IFsxXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSgxKSk7CisgIGFzc2VydFdh
c21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFsyLjNdLCAoKSA9PiBpbnN0
YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDIuMykpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3Rh
bmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbInN0ciJdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRz
LnRocm93X3BhcmFtKCJzdHIiKSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nL2NhdGNoaW5n
IHRoZSByZWZlcmVuY2UgdHlwZSB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFJlZlBh
cmFtKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQg
ZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3IpOworICBidWlsZGVyLmFkZEZ1bmN0aW9u
KCJ0aHJvd19jYXRjaF9wYXJhbSIsIGtTaWdfcl9yKQorICAgICAgLmFkZEJvZHkoWworICAgICAg
ICBrRXhwclRyeSwga0V4dGVyblJlZkNvZGUsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwK
KyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2Vw
dCwKKyAgICAgICAgICAvLyBmYWxsLXRocm91Z2gKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBd
KS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5h
bFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOwor
ICBsZXQgbyA9IG5ldyBPYmplY3QoKTsKKworICBhc3NlcnRFcXVhbHMobywgaW5zdGFuY2UuZXhw
b3J0cy50aHJvd19jYXRjaF9wYXJhbShvKSk7CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5l
eHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDEpKTsKKyAgYXNzZXJ0RXF1YWxzKDIuMywgaW5zdGFu
Y2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgyLjMpKTsKKyAgYXNzZXJ0RXF1YWxzKCJzdHIi
LCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKCJzdHIiKSk7Cit9KSgpOwpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtaW1wb3J0LmpzIGIvSlNUZXN0cy93
YXNtL3Y4L2V4Y2VwdGlvbnMtaW1wb3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhNGYwYTA1NmJmY2Y3Y2Mw
MzM1ZWRmYjBjNzEyZTU1YjVlNzFhNDgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20v
djgvZXhjZXB0aW9ucy1pbXBvcnQuanMKQEAgLTAsMCArMSw5MCBAQAorLy8gQ29weXJpZ2h0IDIw
MTggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4
cG9zZS13YXNtIC0tZXhwZXJpbWVudGFsLXdhc20tZWgKKworbG9hZCgid2FzbS1tb2R1bGUtYnVp
bGRlci5qcyIpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcmV0dXJuIGEgbmV3IGV4cG9ydGVk
IGV4Y2VwdGlvbiB3aXRoIHRoZSB7a1NpZ192X3Z9IHR5cGUKKy8vIHNpZ25hdHVyZSBmcm9tIGFu
IGFub255bW91cyBtb2R1bGUuIFRoZSB1bmRlcmx5aW5nIG1vZHVsZSBpcyB0aHJvd24gYXdheS4K
Ky8vIFRoaXMgYWxsb3dzIHRlc3RzIHRvIHJlYXNvbiBzb2xlbHkgYWJvdXQgaW1wb3J0aW5nIGV4
Y2VwdGlvbnMuCitmdW5jdGlvbiBOZXdFeHBvcnRlZFRhZygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBu
ZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IHRhZyA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdf
dl92KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoInQiLCBrRXh0ZXJuYWxUYWcsIHRhZyk7
CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgcmV0dXJuIGluc3Rh
bmNlLmV4cG9ydHMudDsKK30KKworKGZ1bmN0aW9uIFRlc3RJbXBvcnRTaW1wbGUoKSB7CisgIGxl
dCBleHBvcnRlZCA9IE5ld0V4cG9ydGVkVGFnKCk7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21N
b2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJt
IiwgImV4Iiwga1NpZ192X3YpOworCisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVy
Lmluc3RhbnRpYXRlKHsgbTogeyBleDogZXhwb3J0ZWQgfX0pKTsKK30pKCk7CisKKyhmdW5jdGlv
biBUZXN0SW1wb3J0TXVsdGlwbGUoKSB7CisgIGxldCBleHBvcnRlZCA9IE5ld0V4cG9ydGVkVGFn
KCk7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNl
cHQxID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleDEiLCBrU2lnX3Zfdik7CisgIGxl
dCBleGNlcHQyID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleDIiLCBrU2lnX3Zfdik7
CisgIGxldCBleGNlcHQzID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFk
ZEV4cG9ydE9mS2luZCgiZXgyIiwga0V4dGVybmFsVGFnLCBleGNlcHQyKTsKKyAgYnVpbGRlci5h
ZGRFeHBvcnRPZktpbmQoImV4MyIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Myk7CisgIGxldCBpbnN0
YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4MTogZXhwb3J0ZWQsIGV4MjogZXhw
b3J0ZWQgfX0pOworCisgIGFzc2VydFRydWUoZXhjZXB0MSA8IGV4Y2VwdDMgJiYgZXhjZXB0MiA8
IGV4Y2VwdDMpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBpbnN0YW5jZS5leHBvcnRzLmV4
MSk7CisgIC8vIEZJWE1FOiBmaXggYnJva2VuIHY4IHdhc20gZXhjZXB0aW9ucyB0ZXN0cworICAv
LyBhc3NlcnRTYW1lKGV4cG9ydGVkLCBpbnN0YW5jZS5leHBvcnRzLmV4Mik7CisgIGFzc2VydE5v
dFNhbWUoZXhwb3J0ZWQsIGluc3RhbmNlLmV4cG9ydHMuZXgzKTsKK30pKCk7CisKKyhmdW5jdGlv
biBUZXN0SW1wb3J0TWlzc2luZygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgi
LCBrU2lnX3Zfdik7CisKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0
YW50aWF0ZSh7fSksIFR5cGVFcnJvciwKKyAgICAgIC9pbXBvcnQgbTpleCBtdXN0IGJlIGFuIG9i
amVjdC8pOworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRl
KHsgbToge319KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAorICAgICAgL1RhZyBpbXBvcnQgbTpl
eCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFnLyk7Cit9KSgpOworCisoZnVu
Y3Rpb24gVGVzdEltcG9ydFZhbHVlTWlzbWF0Y2goKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdh
c21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFn
KCJtIiwgImV4Iiwga1NpZ192X3YpOworCisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1
aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4OiAyMyB9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJv
ciwKKyAgICAgIC9UYWcgaW1wb3J0IG06ZXggaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2Vt
Ymx5LlRhZy8pOworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRp
YXRlKHsgbTogeyBleDoge30gfX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvVGFn
IGltcG9ydCBtOmV4IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWcvKTsKKyAg
dmFyIG1vbmtleSA9IE9iamVjdC5jcmVhdGUoTmV3RXhwb3J0ZWRUYWcoKSk7CisgIGFzc2VydFRo
cm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4OiBtb25rZXkg
fX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvVGFnIGltcG9ydCBtOmV4IGlzIG5v
dCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWcvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBU
ZXN0SW1wb3J0U2lnbmF0dXJlTWlzbWF0Y2goKSB7CisgIGxldCBleHBvcnRlZCA9IE5ld0V4cG9y
dGVkVGFnKCk7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxl
dCBleGNlcHQgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X2kpOwor
CisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7
IGV4OiBleHBvcnRlZCB9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9pbXBvcnRl
ZCBUYWcgbTpleCBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgaW1wb3J0ZWQgV2ViQXNzZW1i
bHkgVGFnJ3Mgc2lnbmF0dXJlLyk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEltcG9ydE1vZHVs
ZUdldEltcG9ydHMoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7
CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192
X3YpOworICBsZXQgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLnRvQnVm
ZmVyKCkpOworCisgIGxldCBpbXBvcnRzID0gV2ViQXNzZW1ibHkuTW9kdWxlLmltcG9ydHMobW9k
dWxlKTsKKyAgYXNzZXJ0QXJyYXlFcXVhbHMoW3sgbW9kdWxlOiAibSIsIG5hbWU6ICJleCIsIGtp
bmQ6ICJ0YWciIH1dLCBpbXBvcnRzKTsKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
djgvZXhjZXB0aW9ucy1yZXRocm93LmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtcmV0
aHJvdy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45MjMzOWJlZjJmNjk0MmJkNWY2ZTVlYjM1ZDcxODljMmNhYzU5
MGE4Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtcmV0aHJv
dy5qcwpAQCAtMCwwICsxLDE0MiBAQAorLy8gQ29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cG9zZS13YXNtIC0tZXhwZXJp
bWVudGFsLXdhc20tZWggLS1hbGxvdy1uYXRpdmVzLXN5bnRheAorCitsb2FkKCJ3YXNtLW1vZHVs
ZS1idWlsZGVyLmpzIik7Citsb2FkKCJleGNlcHRpb25zLXV0aWxzLmpzIik7CisKKy8vIFRlc3Qg
dGhhdCByZXRocm93IGV4cHJlc3Npb25zIGNhbiB0YXJnZXQgY2F0Y2ggYmxvY2tzLgorKGZ1bmN0
aW9uIFRlc3RSZXRocm93SW5DYXRjaCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAg
YnVpbGRlci5hZGRGdW5jdGlvbigicmV0aHJvdzAiLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5
KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwclRocm93LCBl
eGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclJldGhy
b3csIDAsCisgICAgICAgIGtFeHByRW5kLAorICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oInJldGhyb3cxIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAg
ICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisg
ICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAor
ICAgICAgICAgIGtFeHBySTMyRXF6LAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAg
ICAgICAgICAgIGtFeHByUmV0aHJvdywgMSwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAg
ICBrRXhwckkzMkNvbnN0LCAyMywKKyAgICAgICAga0V4cHJFbmQKKyAgXSkuZXhwb3J0RnVuYygp
OworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7
CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNt
VGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2Uu
ZXhwb3J0cy5yZXRocm93MCgpKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFu
Y2UuZXhwb3J0cy5leCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMucmV0aHJvdzEoMCkpOwor
ICBhc3NlcnRFcXVhbHMoMjMsIGluc3RhbmNlLmV4cG9ydHMucmV0aHJvdzEoMSkpOworfSkoKTsK
KworLy8gVGVzdCB0aGF0IHJldGhyb3cgZXhwcmVzc2lvbnMgY2FuIHRhcmdldCBjYXRjaC1hbGwg
YmxvY2tzLgorKGZ1bmN0aW9uIFRlc3RSZXRocm93SW5DYXRjaEFsbCgpIHsKKyAgbGV0IGJ1aWxk
ZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRk
VGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigicmV0aHJvdzAiLCBrU2lnX3Zf
dikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAg
ICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAg
ICAga0V4cHJSZXRocm93LCAwLAorICAgICAgICBrRXhwckVuZCwKKyAgXSkuZXhwb3J0RnVuYygp
OworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJyZXRocm93MSIsIGtTaWdfaV9pKQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUaHJv
dywgZXhjZXB0LAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICAgIGtFeHByTG9jYWxH
ZXQsIDAsCisgICAgICAgICAga0V4cHJJMzJFcXosCisgICAgICAgICAga0V4cHJJZiwga1dhc21W
b2lkLAorICAgICAgICAgICAga0V4cHJSZXRocm93LCAxLAorICAgICAgICAgIGtFeHByRW5kLAor
ICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIzLAorICAgICAgICBrRXhwckVuZAorICBdKS5leHBv
cnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywg
ZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFz
c2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBp
bnN0YW5jZS5leHBvcnRzLnJldGhyb3cwKCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNl
LCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93
MSgwKSk7CisgIGFzc2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93MSgxKSk7
Cit9KSgpOworCisvLyBUZXN0IHRoYXQgcmV0aHJvdyBleHByZXNzaW9uIHByb3Blcmx5IHRhcmdl
dCB0aGUgY29ycmVjdCBzdXJyb3VuZGluZyB0cnkKKy8vIGJsb2NrIGV2ZW4gaW4gdGhlIHByZXNl
bmNlIG9mIG11bHRpcGxlIGhhbmRsZXJzIGJlaW5nIGludm9sdmVkLgorKGZ1bmN0aW9uIFRlc3RS
ZXRocm93TmVzdGVkKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigp
OworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2Vw
dDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInJl
dGhyb3dfbmVzdGVkIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBy
VHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQyLAorICAgICAgICBr
RXhwckNhdGNoLCBleGNlcHQyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAg
ICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDEsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0
MSwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICBrRXhwckkzMkNv
bnN0LCAwLAorICAgICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAgICAgIGtFeHBySWYsIGtX
YXNtVm9pZCwKKyAgICAgICAgICAgICAga0V4cHJSZXRocm93LCAxLAorICAgICAgICAgICAga0V4
cHJFbmQsCisgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJJ
MzJDb25zdCwgMSwKKyAgICAgICAgICAgIGtFeHBySTMyRXEsCisgICAgICAgICAgICBrRXhwcklm
LCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgIGtFeHByUmV0aHJvdywgMiwKKyAgICAgICAgICAg
IGtFeHByRW5kLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMjMsCisgICAgICAgICAga0V4
cHJFbmQsCisgICAgICAgIGtFeHByRW5kLAorICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIu
YWRkRXhwb3J0T2ZLaW5kKCJleDEiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDEpOworICBidWlsZGVy
LmFkZEV4cG9ydE9mS2luZCgiZXgyIiwga0V4dGVybmFsVGFnLCBleGNlcHQyKTsKKyAgbGV0IGlu
c3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5z
dGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgxLCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5y
ZXRocm93X25lc3RlZCgwKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNl
LmV4cG9ydHMuZXgyLCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X25lc3RlZCgx
KSk7CisgIGFzc2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X25lc3RlZCgy
KSk7Cit9KSgpOworCisvLyBUZXN0IHRoYXQgYW4gZXhjZXB0aW9uIGJlaW5nIHJldGhyb3cgY2Fu
IGJlIGNhdWdodCBieSBhbm90aGVyIGxvY2FsIGNhdGNoCisvLyBibG9jayBpbiB0aGUgc2FtZSBm
dW5jdGlvbiB3aXRob3V0IGV2ZXIgdW53aW5kaW5nIHRoZSBhY3RpdmF0aW9uLgorKGZ1bmN0aW9u
IFRlc3RSZXRocm93UmVjYXRjaCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVp
bGRlci5hZGRGdW5jdGlvbigicmV0aHJvd19yZWNhdGNoIiwga1NpZ19pX2kpCisgICAgICAuYWRk
Qm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93
LCBleGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclRy
eSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAg
a0V4cHJJMzJFcXosCisgICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAg
ICAgIGtFeHByUmV0aHJvdywgMiwKKyAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAg
a0V4cHJJMzJDb25zdCwgNDIsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAg
ICAgICAga0V4cHJJMzJDb25zdCwgMjMsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtF
eHByRW5kLAorICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJl
eCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0
YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93
X3JlY2F0Y2goMCkpOworICBhc3NlcnRFcXVhbHMoNDIsIGluc3RhbmNlLmV4cG9ydHMucmV0aHJv
d19yZWNhdGNoKDEpKTsKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0
aW9ucy1zaGFyZWQuanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1zaGFyZWQuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODUyZjViYThhMTM3MTYxZmY3NTc3NWE0YzllMjEwZjkwY2QyODgzNQotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXNoYXJlZC5qcwpAQCAtMCww
ICsxLDE1MyBAQAorLy8gQ29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cG9zZS13YXNtIC0tZXhwZXJpbWVudGFsLXdhc20t
ZWgKKworbG9hZCgid2FzbS1tb2R1bGUtYnVpbGRlci5qcyIpOworCisvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gcmV0dXJuIGEgbmV3IGV4cG9ydGVkIGV4Y2VwdGlvbiB3aXRoIHRoZSB7a1NpZ192X3Z9
IHR5cGUKKy8vIHNpZ25hdHVyZSBmcm9tIGFuIGFub255bW91cyBtb2R1bGUuIFRoZSB1bmRlcmx5
aW5nIG1vZHVsZSBpcyB0aHJvd24gYXdheS4KK2Z1bmN0aW9uIE5ld0V4cG9ydGVkRXhjZXB0aW9u
KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhj
ZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2lu
ZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIu
aW5zdGFudGlhdGUoKTsKKyAgcmV0dXJuIGluc3RhbmNlLmV4cG9ydHMuZXg7Cit9CisKKy8vIENo
ZWNrIHRoYXQgYW4gaW5zdGFuY2UgbWF0Y2hlcyBhbiBleGNlcHRpb24gdGhyb3duIGJ5IGl0c2Vs
ZiwgZXZlbiB3aGVuIHRoZQorLy8gZXhjZXB0aW9uIGlzIHJlLXRocm93biBieSBhIHJlZ3VsYXIg
SmF2YVNjcmlwdCBmdW5jdGlvbi4KKyhmdW5jdGlvbiBUZXN0U2luZ2xlSW5zdGFuY2UoKSB7Cisg
IGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBzaWdfaW5kZXgg
PSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X3YpOworICBsZXQgZnVuID0gYnVpbGRlci5hZGRJbXBv
cnQoIm0iLCAiZiIsIHNpZ19pbmRleCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93Iiwga1NpZ192X3YpCisgICAg
ICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdAorICAgICAgXSkuZXhwb3J0
RnVuYygpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaCIsIGtTaWdfdl92KQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHBy
Q2FsbEZ1bmN0aW9uLCBmdW4sCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAg
a0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBleF9vYmogPSBuZXcgRXJy
b3IoIm15IGV4Y2VwdGlvbiIpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRl
KHsgbTogeyBmOiBmdW5jdGlvbigpIHsgdGhyb3cgZXhfb2JqIH19fSk7CisKKyAgYXNzZXJ0VGhy
b3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3coKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9u
KTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2goKSwg
ZXhfb2JqKTsKKyAgdHJ5IHsKKyAgICBpbnN0YW5jZS5leHBvcnRzLnRocm93KCk7CisgIH0gY2F0
Y2ggKGUpIHsKKyAgICBleF9vYmogPSBlOworICB9CisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9
PiBpbnN0YW5jZS5leHBvcnRzLmNhdGNoKCkpOworfSkoKTsKKworLy8gQ2hlY2sgdGhhdCB0d28g
aW5zdGFuY2VzIGRpc3Rpbmd1aXNoIHRoZWlyIGluZGl2aWR1YWwgZXhjZXB0aW9ucyBpZiB0aGV5
IGFyZQorLy8gbm90IHNoYXJlZCwgZXZlbiB3aGVuIGRlY2xhcmVkIGJ5IHRoZSBzYW1lIHVuZGVy
bHlpbmcgbW9kdWxlLgorKGZ1bmN0aW9uIFRlc3RNdWx0aUluc3RhbmNlTm9uU2hhcmVkKCkgewor
ICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgc2lnX2luZGV4
ID0gYnVpbGRlci5hZGRUeXBlKGtTaWdfdl92KTsKKyAgbGV0IGZ1biA9IGJ1aWxkZXIuYWRkSW1w
b3J0KCJtIiwgImYiLCBzaWdfaW5kZXgpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWco
a1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIGtTaWdfdl92KQorICAg
ICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRocm93LCBleGNlcHQKKyAgICAgIF0pLmV4cG9y
dEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2giLCBrU2lnX3ZfdikKKyAgICAg
IC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhw
ckNhbGxGdW5jdGlvbiwgZnVuLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAg
IGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgZXhfb2JqID0gbmV3IEVy
cm9yKCJteSBleGNlcHRpb24iKTsKKyAgbGV0IGluc3RhbmNlMSA9IGJ1aWxkZXIuaW5zdGFudGlh
dGUoeyBtOiB7IGY6IGFzc2VydFVucmVhY2hhYmxlIH19KTsKKyAgbGV0IGluc3RhbmNlMiA9IGJ1
aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGY6IGZ1bmN0aW9uKCkgeyB0aHJvdyBleF9vYmogfX19
KTsKKworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UxLmV4cG9ydHMudGhyb3coKSwgV2Vi
QXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzKCgpID0+IGluc3RhbmNl
Mi5leHBvcnRzLmNhdGNoKCksIGV4X29iaik7CisgIHRyeSB7CisgICAgaW5zdGFuY2UxLmV4cG9y
dHMudGhyb3coKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGV4X29iaiA9IGU7CisgIH0KKyAgYXNz
ZXJ0VGhyb3dzRXF1YWxzKCgpID0+IGluc3RhbmNlMi5leHBvcnRzLmNhdGNoKCksIGV4X29iaik7
Cit9KSgpOworCisvLyBDaGVjayB0aGF0IHR3byBpbnN0YW5jZXMgbWF0Y2ggdGhlaXIgZXhjZXB0
aW9ucyBpZiB0aGV5IGFyZSBzaGFyZWQgcHJvcGVybHksCisvLyBldmVuIGlmIHRoZSBsb2NhbCBl
eGNlcHRpb24gaW5kZXggb2YgZXhwb3J0IGFuZCBpbXBvcnQgaXMgZGlmZmVyZW50LgorKGZ1bmN0
aW9uIFRlc3RNdWx0aUluc3RhbmNlU2hhcmVkKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNt
TW9kdWxlQnVpbGRlcigpOworICBsZXQgc2lnX2luZGV4ID0gYnVpbGRlci5hZGRUeXBlKGtTaWdf
dl92KTsKKyAgbGV0IGZ1biA9IGJ1aWxkZXIuYWRkSW1wb3J0KCJtIiwgImYiLCBzaWdfaW5kZXgp
OworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgxIiwga1Np
Z192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVp
bGRlci5hZGRFeHBvcnRPZktpbmQoImV4MiIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Mik7CisgIGJ1
aWxkZXIuYWRkRnVuY3Rpb24oInRocm93Iiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisg
ICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDIKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVp
bGRlci5hZGRGdW5jdGlvbigiY2F0Y2giLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAg
ICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwg
ZnVuLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQxLAorICAgICAgICBrRXhwckVuZCwKKyAg
ICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGV4X29iaiA9IG5ldyBFcnJvcigibXkgZXhjZXB0
aW9uIik7CisgIGxldCBpbnN0YW5jZTEgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBmOiBh
c3NlcnRVbnJlYWNoYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4MTogTmV3RXhwb3J0ZWRFeGNlcHRpb24oKSB9fSk7CisgIGxldCBpbnN0YW5jZTIg
PSBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBmOiBmdW5jdGlvbigpIHsgdGhyb3cgZXhfb2Jq
IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleDE6IGlu
c3RhbmNlMS5leHBvcnRzLmV4MiB9fSk7CisKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNl
MS5leHBvcnRzLnRocm93KCksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFzc2VydFRocm93
c0VxdWFscygoKSA9PiBpbnN0YW5jZTIuZXhwb3J0cy5jYXRjaCgpLCBleF9vYmopOworICB0cnkg
eworICAgIGluc3RhbmNlMS5leHBvcnRzLnRocm93KCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBl
eF9vYmogPSBlOworICB9CisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9PiBpbnN0YW5jZTIuZXhw
b3J0cy5jYXRjaCgpKTsKK30pKCk7CisKKy8vIENoZWNrIHRoYXQgdHdvIGluc3RhbmNlcyBiYXNl
ZCBvbiBkaWZmZXJlbnQgbW9kdWxlcyBtYXRjaCB0aGVpciBleGNlcHRpb25zIGlmCisvLyB0aGV5
IGFyZSBzaGFyZWQgcHJvcGVybHksIGV2ZW4gaWYgdGhlIGxvY2FsIGV4Y2VwdGlvbiBpbmRleCBp
cyBkaWZmZXJlbnQuCisoZnVuY3Rpb24gVGVzdE11bHRpTW9kdWxlU2hhcmVkKCkgeworICBsZXQg
YnVpbGRlcjEgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWls
ZGVyMS5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIxLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGJ1aWxkZXIxLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcs
IGV4Y2VwdDIpOworICBidWlsZGVyMS5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfdikKKyAg
ICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MgorICAgICAgXSkuZXhw
b3J0RnVuYygpOworICBsZXQgYnVpbGRlcjIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAg
bGV0IHNpZ19pbmRleCA9IGJ1aWxkZXIyLmFkZFR5cGUoa1NpZ192X3YpOworICBsZXQgZnVuID0g
YnVpbGRlcjIuYWRkSW1wb3J0KCJtIiwgImYiLCBzaWdfaW5kZXgpOworICBsZXQgZXhjZXB0ID0g
YnVpbGRlcjIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3Zfdik7CisgIGJ1aWxkZXIy
LmFkZEZ1bmN0aW9uKCJjYXRjaCIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAg
ICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBmdW4s
CisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBd
KS5leHBvcnRGdW5jKCk7CisgIGxldCBleF9vYmogPSBuZXcgRXJyb3IoIm15IGV4Y2VwdGlvbiIp
OworICBsZXQgaW5zdGFuY2UxID0gYnVpbGRlcjEuaW5zdGFudGlhdGUoKTsKKyAgbGV0IGluc3Rh
bmNlMiA9IGJ1aWxkZXIyLmluc3RhbnRpYXRlKHsgbTogeyBmOiBmdW5jdGlvbigpIHsgdGhyb3cg
ZXhfb2JqIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXg6IGluc3RhbmNlMS5leHBvcnRzLmV4IH19KTsKKworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5z
dGFuY2UxLmV4cG9ydHMudGhyb3coKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgYXNzZXJ0
VGhyb3dzRXF1YWxzKCgpID0+IGluc3RhbmNlMi5leHBvcnRzLmNhdGNoKCksIGV4X29iaik7Cisg
IHRyeSB7CisgICAgaW5zdGFuY2UxLmV4cG9ydHMudGhyb3coKTsKKyAgfSBjYXRjaCAoZSkgewor
ICAgIGV4X29iaiA9IGU7CisgIH0KKyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+IGluc3RhbmNl
Mi5leHBvcnRzLmNhdGNoKCkpOworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9l
eGNlcHRpb25zLXR5cGUtcmVmbGVjdGlvbi5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25z
LXR5cGUtcmVmbGVjdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNGMyMGVkYWU4ZTAyMzVhYmY3YzJlMTll
YmM3MTgwZmFiMDhjZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2Vw
dGlvbnMtdHlwZS1yZWZsZWN0aW9uLmpzCkBAIC0wLDAgKzEsNDcgQEAKKy8vIENvcHlyaWdodCAy
MDIxIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1l
eHBlcmltZW50YWwtd2FzbS1laCAtLWV4cGVyaW1lbnRhbC13YXNtLXR5cGUtcmVmbGVjdGlvbgor
Citsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7CisKK2xldCB0ZXN0Y2FzZXMgPSBbCit7
dHlwZXM6IHtwYXJhbWV0ZXJzOltdfSwgc2lnOiBrU2lnX3Zfdn0sCit7dHlwZXM6IHtwYXJhbWV0
ZXJzOlsiaTMyIl19LCBzaWc6IGtTaWdfdl9pfSwKK3t0eXBlczoge3BhcmFtZXRlcnM6WyJpNjQi
XX0sIHNpZzoga1NpZ192X2x9LAore3R5cGVzOiB7cGFyYW1ldGVyczpbImY2NCIsICJmNjQiLCAi
aTMyIl19LCBzaWc6IGtTaWdfdl9kZGl9LAore3R5cGVzOiB7cGFyYW1ldGVyczpbImYzMiJdfSwg
c2lnOiBrU2lnX3ZfZn0sCitdOworCisoZnVuY3Rpb24gVGVzdEV4cG9ydCgpIHsKKyAgbGV0IGJ1
aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKworICB0ZXN0Y2FzZXMuZm9yRWFjaChm
dW5jdGlvbihleHBlY3RlZCwgaSkgeworICAgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhl
eHBlY3RlZC5zaWcpOworICAgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIgKyBpLCBrRXh0
ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIH0pOworCisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5z
dGFudGlhdGUoKTsKKyAgdGVzdGNhc2VzLmZvckVhY2goZnVuY3Rpb24oZXhwZWN0ZWQsIGkpIHsK
KyAgICBhc3NlcnRFcXVhbHMoaW5zdGFuY2UuZXhwb3J0c1siZXgiICsgaV0udHlwZSgpLCBleHBl
Y3RlZC50eXBlcyk7CisgIH0pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJbXBvcnRFeHBvcnQo
KSB7CisKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGlt
cG9ydHMgPSB7bToge319OworCisgIHRlc3RjYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGV4cGVjdGVk
LCBpKSB7CisgICAgbGV0IHQgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKGV4cGVjdGVkLnR5cGVzKTsK
KyAgICBsZXQgaW5kZXggPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4IiArIGksIGV4
cGVjdGVkLnNpZyk7CisgICAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4IiArIGksIGtFeHRl
cm5hbFRhZywgaW5kZXgpOworICAgIGltcG9ydHMubVsiZXgiICsgaV0gPSB0OworICB9KTsKKwor
ICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKGltcG9ydHMpOworICB0ZXN0Y2Fz
ZXMuZm9yRWFjaChmdW5jdGlvbihleHBlY3RlZCwgaSkgeworICAgIGFzc2VydEVxdWFscyhpbnN0
YW5jZS5leHBvcnRzWyJleCIgKyBpXS50eXBlKCksIGV4cGVjdGVkLnR5cGVzKTsKKyAgfSkKK30p
KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy11dGlscy5qcyBiL0pT
VGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXV0aWxzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiZTE5MTlkZWU2
ODAzMjNjZWIwOTM5NjRmZTYxYTk1ZjA2ZGU2OTcKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3dhc20vdjgvZXhjZXB0aW9ucy11dGlscy5qcwpAQCAtMCwwICsxLDI3IEBACisvLyBDb3B5cmln
aHQgMjAxOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6
IC0tYWxsb3ctbmF0aXZlcy1zeW50YXgKKworLy8gVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJl
IGxvYWRlZCBieSBvdGhlciB0ZXN0cyB0byBwcm92aWRlIHV0aWxpdHkgbWV0aG9kcworLy8gcmVx
dWlyaW5nIG5hdGl2ZXMgc3ludGF4IChhbmQgaGVuY2Ugbm90IHN1aXRlZCBmb3IgdGhlIG1qc3Vu
aXQuanMgZmlsZSkuCisKK2Z1bmN0aW9uIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIHRhZywg
dmFsdWVzLCBjb2RlKSB7CisgIHRyeSB7CisgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnZnVuY3Rp
b24nKSB7CisgICAgICBjb2RlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGV2YWwoY29kZSk7Cisg
ICAgfQorICB9IGNhdGNoIChlKSB7CisgICAgYXNzZXJ0SW5zdGFuY2VvZihlLCBXZWJBc3NlbWJs
eS5FeGNlcHRpb24pOworICAgIGFzc2VydFRydWUoZS5pcyh0YWcpKTsKKyAgICBhc3NlcnRFcXVh
bHModmFsdWVzLmxlbmd0aCwgdGFnLnR5cGUoKS5wYXJhbWV0ZXJzLmxlbmd0aCk7CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpCisgICAgICBhc3NlcnRFcXVhbHMo
dmFsdWVzW2ldLCBlLmdldEFyZyh0YWcsIGkpKTsKKyAgICByZXR1cm47ICAvLyBTdWNjZXNzLgor
ICB9CisgIHRocm93IG5ldyBNanNVbml0QXNzZXJ0aW9uRXJyb3IoJ0RpZCBub3QgdGhyb3cgZXhw
ZWN0ZWQgPCcgKyB0YWcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc+IHdp
dGggdmFsdWVzOiAnICsgdmFsdWVzKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9l
eGNlcHRpb25zLmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzkxNTUwNDUwNDk4ODE3MzA3ZDI5NDc1MDJhYjJhZmJjMDRjNjJhNAotLS0gL2Rldi9udWxsCisr
KyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLmpzCkBAIC0wLDAgKzEsMTA4NyBAQAorLy8g
Q29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8v
IEZsYWdzOiAtLWV4cG9zZS13YXNtIC0tZXhwZXJpbWVudGFsLXdhc20tZWggLS1hbGxvdy1uYXRp
dmVzLXN5bnRheAorCitsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7Citsb2FkKCJleGNl
cHRpb25zLXV0aWxzLmpzIik7CisKKy8vIFRoZSBmb2xsb3dpbmcgbWV0aG9kIGRvZXNuJ3QgYXR0
ZW1wdCB0byBjYXRjaCBhbiByYWlzZWQgZXhjZXB0aW9uLgorKGZ1bmN0aW9uIFRlc3RUaHJvd1Np
bXBsZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0
IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlv
bigidGhyb3dfaWZfcGFyYW1fbm90X3plcm8iLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMCwKKyAg
ICAgICAga0V4cHJJMzJOZSwKKyAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAg
IGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHBySTMy
Q29uc3QsIDEKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktp
bmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVy
Lmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGhy
b3dfaWZfcGFyYW1fbm90X3plcm8oMCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBp
bnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19pZl9w
YXJhbV9ub3RfemVybygxMCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5j
ZS5leHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19pZl9wYXJhbV9u
b3RfemVybygtMSkpOworfSkoKTsKKworLy8gVGVzdCB0aGF0IGVtcHR5IHRyeS9jYXRjaCBibG9j
a3Mgd29yay4KKyhmdW5jdGlvbiBUZXN0Q2F0Y2hFbXB0eUJsb2NrcygpIHsKKyAgbGV0IGJ1aWxk
ZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRk
VGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2hfZW1wdHlfdHJ5Iiwg
a1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQs
CisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBd
KS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsK
KworICBhc3NlcnREb2VzTm90VGhyb3coaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9lbXB0eV90cnkp
OworfSkoKTsKKworLy8gTm93IHRoYXQgd2Uga25vdyB0aHJvd2luZyB3b3Jrcywgd2UgdGVzdCBj
YXRjaGluZyB0aGUgZXhjZXB0aW9ucyB3ZSByYWlzZS4KKyhmdW5jdGlvbiBUZXN0Q2F0Y2hTaW1w
bGUoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBl
eGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24o
InNpbXBsZV90aHJvd19jYXRjaF90b18wXzEiLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAs
CisgICAgICAgICAga0V4cHJJMzJFcXosCisgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAor
ICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHByRW5kLAorICAg
ICAgICAgIGtFeHBySTMyQ29uc3QsIDQyLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgMjMsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5l
eHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKwor
ICBhc3NlcnRFcXVhbHMoMjMsIGluc3RhbmNlLmV4cG9ydHMuc2ltcGxlX3Rocm93X2NhdGNoX3Rv
XzBfMSgwKSk7CisgIGFzc2VydEVxdWFscyg0MiwgaW5zdGFuY2UuZXhwb3J0cy5zaW1wbGVfdGhy
b3dfY2F0Y2hfdG9fMF8xKDEpKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0VHJhcE5vdENhdWdo
dCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgYnVpbGRl
ci5hZGRGdW5jdGlvbigndW5yZWFjaGFibGVfaW5fdHJ5Jywga1NpZ192X3YpCisgICAgICAuYWRk
Qm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJVbnJl
YWNoYWJsZSwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAg
IF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgp
OworCisgIGFzc2VydFRyYXBzKGtUcmFwVW5yZWFjaGFibGUsICgpID0+IGluc3RhbmNlLmV4cG9y
dHMudW5yZWFjaGFibGVfaW5fdHJ5KCkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RUcmFwSW5D
YWxsZWVOb3RDYXVnaHQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVy
KCk7CisgIGxldCBmdW5jX2RpdiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ2RpdicsIGtTaWdfaV9p
aSkuYWRkQm9keShbCisgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICBrRXhwckxvY2FsR2V0LCAx
LAorICAgIGtFeHBySTMyRGl2VQorICBdKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndHJhcF9p
bl9jYWxsZWUnLCBrU2lnX2lfaWkpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5
LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBy
TG9jYWxHZXQsIDEsCisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGZ1bmNfZGl2LmluZGV4
LAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDExLAor
ICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2Ug
PSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDMsIGluc3RhbmNlLmV4
cG9ydHMudHJhcF9pbl9jYWxsZWUoNywgMikpOworICBhc3NlcnRUcmFwcyhrVHJhcERpdkJ5WmVy
bywgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50cmFwX2luX2NhbGxlZSgxLCAwKSk7Cit9KSgpOwor
CisoZnVuY3Rpb24gVGVzdFRyYXBWaWFKU05vdENhdWdodCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBu
ZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGltcCA9IGJ1aWxkZXIuYWRkSW1wb3J0KCdp
bXAnLCAnb3J0Jywga1NpZ19pX3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCdkaXYnLCBrU2ln
X2lfaWkpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAg
ICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAgIGtFeHBySTMyRGl2VQorICAgICAgXSkuZXhw
b3J0RnVuYygpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCdjYWxsX2ltcG9ydCcsIGtTaWdfaV92
KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAg
ICAga0V4cHJDYWxsRnVuY3Rpb24sIGltcCwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAg
ICAgICBrRXhwckkzMkNvbnN0LCAxMSwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9y
dEZ1bmMoKTsKKyAgbGV0IGV4Y2VwdGlvbiA9IHVuZGVmaW5lZDsKKyAgbGV0IGluc3RhbmNlOwor
ICBmdW5jdGlvbiBqc19pbXBvcnQoKSB7CisgICAgdHJ5IHsKKyAgICAgIGluc3RhbmNlLmV4cG9y
dHMuZGl2KDEsIDApOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGV4Y2VwdGlvbiA9IGU7Cisg
ICAgfQorICAgIHRocm93IGV4Y2VwdGlvbjsKKyAgfQorICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5z
dGFudGlhdGUoe2ltcDoge29ydDoganNfaW1wb3J0fX0pOworCisgIGxldCBjYXVnaHQgPSB1bmRl
ZmluZWQ7CisgIHRyeSB7CisgICAgbGV0IHJlcyA9IGluc3RhbmNlLmV4cG9ydHMuY2FsbF9pbXBv
cnQoKTsKKyAgICBhc3NlcnRVbnJlYWNoYWJsZSgnY2FsbF9pbXBvcnQgc2hvdWxkIHRyYXAsIGJ1
dCByZXR1cm5lZCB3aXRoICcgKyByZXMpOworICB9IGNhdGNoIChlKSB7CisgICAgY2F1Z2h0ID0g
ZTsKKyAgfQorICBhc3NlcnRTYW1lKGV4Y2VwdGlvbiwgY2F1Z2h0KTsKKyAgYXNzZXJ0VGhyb3dz
KGluc3RhbmNlLmV4cG9ydHMuY2FsbF9pbXBvcnQsIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwg
a1RyYXBNc2dzW2tUcmFwRGl2QnlaZXJvXSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdE1hbnVh
bGx5VGhyb3duUnVudGltZUVycm9yQ2F1Z2h0KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNt
TW9kdWxlQnVpbGRlcigpOworICBsZXQgaW1wID0gYnVpbGRlci5hZGRJbXBvcnQoJ2ltcCcsICdv
cnQnLCBrU2lnX2lfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ2NhbGxfaW1wb3J0Jywga1Np
Z19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAg
ICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgaW1wLAorICAgICAgICBrRXhwckNhdGNoQWxsLAor
ICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDExLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSku
ZXhwb3J0RnVuYygpOworICBmdW5jdGlvbiB0aHJvd19leGMoKSB7CisgICAgdGhyb3cgbmV3IFdl
YkFzc2VtYmx5LlJ1bnRpbWVFcnJvcignTXkgdXNlciB0ZXh0Jyk7CisgIH0KKyAgbGV0IGluc3Rh
bmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7aW1wOiB7b3J0OiB0aHJvd19leGN9fSk7CisKKyAg
YXNzZXJ0RXF1YWxzKDExLCBpbnN0YW5jZS5leHBvcnRzLmNhbGxfaW1wb3J0KCkpOworfSkoKTsK
KworKGZ1bmN0aW9uIFRlc3RFeG5XaXRoV2FzbVByb3RvTm90Q2F1Z2h0KCkgeworICBsZXQgYnVp
bGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X3YpOworICBsZXQgaW1wID0gYnVpbGRlci5hZGRJbXBvcnQoJ2ltcCcsICdv
cnQnLCBrU2lnX3Zfdik7CisgIGxldCB0aHJvd19mbiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Ro
cm93Jywga1NpZ192X3YpCisgICAgICAgICAgICAgICAgICAgICAuYWRkQm9keShba0V4cHJUaHJv
dywgZXhjZXB0XSkKKyAgICAgICAgICAgICAgICAgICAgIC5leHBvcnRGdW5jKCk7CisgIGJ1aWxk
ZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAg
ICAgLy8gQ2FsbGluZyAidGhyb3ciIGRpcmVjdGx5IHNob3VsZCBwcm9kdWNlIHRoZSBleHBlY3Rl
ZCBleGNlcHRpb24uCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4
cHJDYWxsRnVuY3Rpb24sIHRocm93X2ZuLmluZGV4LAorICAgICAgICBrRXhwckNhdGNoLCBleGNl
cHQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgICAvLyBDYWxsaW5nIHRocm91Z2ggSlMgcHJv
ZHVjZXMgYSB3cmFwcGVkIGV4Y2VwdGlvbnMgd2hpY2ggZG9lcyBub3QgbWF0Y2gKKyAgICAgICAg
Ly8gdGhlIGNhdGNoLgorICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtF
eHByQ2FsbEZ1bmN0aW9uLCBpbXAsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAg
ICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlOworICBs
ZXQgd3JhcHBlZF9leG47CisgIGZ1bmN0aW9uIGpzX2ltcG9ydCgpIHsKKyAgICB0cnkgeworICAg
ICAgaW5zdGFuY2UuZXhwb3J0cy50aHJvdygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHdy
YXBwZWRfZXhuID0gbmV3IEVycm9yKCk7CisgICAgICB3cmFwcGVkX2V4bi5fX3Byb3RvX18gPSBl
OworICAgICAgdGhyb3cgd3JhcHBlZF9leG47CisgICAgfQorICB9CisgIGluc3RhbmNlID0gYnVp
bGRlci5pbnN0YW50aWF0ZSh7aW1wOiB7b3J0OiBqc19pbXBvcnR9fSk7CisgIGxldCBjYXVnaHQg
PSB1bmRlZmluZWQ7CisgIHRyeSB7CisgICAgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KCk7CisgIH0g
Y2F0Y2ggKGUpIHsKKyAgICBjYXVnaHQgPSBlOworICB9CisgIGFzc2VydFRydWUoISFjYXVnaHQs
ICdzaG91bGQgaGF2ZSB0cmFwcGVkJyk7CisgIGFzc2VydEVxdWFscyhjYXVnaHQsIHdyYXBwZWRf
ZXhuKTsKKyAgYXNzZXJ0SW5zdGFuY2VvZihjYXVnaHQuX19wcm90b19fLCBXZWJBc3NlbWJseS5F
eGNlcHRpb24pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RTdGFja092ZXJmbG93Tm90Q2F1Z2h0
KCkgeworICBmdW5jdGlvbiBzdGFja19vdmVyZmxvdygpIHsKKyAgICAvLyVUaHJvd1N0YWNrT3Zl
cmZsb3coKTsKKyAgfQorICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOwor
ICBsZXQgc2lnX3ZfdiA9IGJ1aWxkZXIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBrU3RhY2tP
dmVyZmxvdyA9IGJ1aWxkZXIuYWRkSW1wb3J0KCcnLCAnc3RhY2tfb3ZlcmZsb3cnLCBzaWdfdl92
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndHJ5X3N0YWNrX292ZXJmbG93Jywga1NpZ192X3Yp
CisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAg
ICAga0V4cHJDYWxsRnVuY3Rpb24sIDAsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAg
IGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxk
ZXIuaW5zdGFudGlhdGUoeycnOiB7J3N0YWNrX292ZXJmbG93Jzogc3RhY2tfb3ZlcmZsb3d9fSk7
CisKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMudHJ5X3N0YWNrX292ZXJm
bG93KCksCisgICAgICBSYW5nZUVycm9yLCAnTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVk
ZWQnKTsKK30pOworLy8gRklYTUU6IG5lZWRzIHN0YWNrIG92ZXJmbG93IGhlbHBlcgorLy8oKTsK
KworLy8gVGVzdCB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB3aGljaCBleGNlcHRpb24gd2FzIHRo
cm93biBieSB1c2luZyBhIGNhc2NhZGVkCisvLyBzZXF1ZW5jZSBvZiBuZXN0ZWQgdHJ5IGJsb2Nr
cyB3aXRoIGEgc2luZ2xlIGNhdGNoIGJsb2NrIGVhY2guCisoZnVuY3Rpb24gVGVzdENhdGNoQ29t
cGxleDEoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxl
dCBleGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1
aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDMgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoX2NvbXBsZXgiLCBrU2lnX2lf
aSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAg
ICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisg
ICAgICAgICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwK
KyAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MSwKKyAgICAgICAgICAgIGtFeHByRWxz
ZSwKKyAgICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAgICAga0V4cHJJ
MzJDb25zdCwgMSwKKyAgICAgICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAgICAgICAga0V4
cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDIsCisg
ICAgICAgICAgICAgIGtFeHByRWxzZSwKKyAgICAgICAgICAgICAgICBrRXhwclRocm93LCBleGNl
cHQzLAorICAgICAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgIGtFeHByRW5kLAorICAg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQx
LAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMywKKyAgICAgICAgICBrRXhwckVuZCwKKyAg
ICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MiwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCA0LAor
ICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRF
eHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQzKTsKKyAgbGV0IGluc3RhbmNl
ID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygzLCBpbnN0YW5jZS5l
eHBvcnRzLmNhdGNoX2NvbXBsZXgoMCkpOworICBhc3NlcnRFcXVhbHMoNCwgaW5zdGFuY2UuZXhw
b3J0cy5jYXRjaF9jb21wbGV4KDEpKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5z
dGFuY2UuZXhwb3J0cy5leCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hfY29tcGxl
eCgyKSk7Cit9KSgpOworCisvLyBUZXN0IHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHdoaWNoIGV4
Y2VwdGlvbiB3YXMgdGhyb3duIGJ5IHVzaW5nIGEgc2luZ2xlCisvLyB0cnkgYmxvY2sgd2l0aCBt
dWx0aXBsZSBhc3NvY2lhdGVkIGNhdGNoIGJsb2NrcyBpbiBzZXF1ZW5jZS4KKyhmdW5jdGlvbiBU
ZXN0Q2F0Y2hDb21wbGV4MigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBl
eGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MyA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2hfY29tcGxl
eCIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21J
MzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwckkzMkVxeiwK
KyAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBl
eGNlcHQxLAorICAgICAgICAgIGtFeHByRWxzZSwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQs
IDAsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgICAga0V4cHJJMzJF
cSwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAga0V4cHJU
aHJvdywgZXhjZXB0MiwKKyAgICAgICAgICAgIGtFeHByRWxzZSwKKyAgICAgICAgICAgICAga0V4
cHJUaHJvdywgZXhjZXB0MywKKyAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgIGtFeHBy
RW5kLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4
Y2VwdDEsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMywKKyAgICAgICAga0V4cHJDYXRjaCwg
ZXhjZXB0MiwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCA0LAorICAgICAgICBrRXhwckVuZCwK
KyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwg
a0V4dGVybmFsVGFnLCBleGNlcHQzKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50
aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygzLCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoX2NvbXBs
ZXgoMCkpOworICBhc3NlcnRFcXVhbHMoNCwgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9jb21wbGV4
KDEpKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwg
W10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hfY29tcGxleCgyKSk7Cit9KSgpOworCisv
LyBUZXN0IHRocm93aW5nIGFuIGV4Y2VwdGlvbiB3aXRoIG11bHRpcGxlIHZhbHVlcy4KKyhmdW5j
dGlvbiBUZXN0VGhyb3dNdWx0aXBsZVZhbHVlcygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2Fz
bU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9p
aSk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93XzFfMiIsIGtTaWdfdl92KQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICBrRXhwckkzMkNv
bnN0LCAyLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0
KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdh
c21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFsxLCAyXSwgKCkgPT4gaW5z
dGFuY2UuZXhwb3J0cy50aHJvd18xXzIoKSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nL2Nh
dGNoaW5nIHRoZSBpMzIgcGFyYW1ldGVyIHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd0NhdGNo
UGFyYW1JKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBs
ZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2kpOworICBidWlsZGVyLmFkZEZ1bmN0
aW9uKCJ0aHJvd19jYXRjaF9wYXJhbSIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAg
ICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAg
ICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwK
KyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByUmV0dXJuLAorICAg
ICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0g
YnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygwLCBpbnN0YW5jZS5leHBv
cnRzLnRocm93X2NhdGNoX3BhcmFtKDApKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4
cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oMSkpOworICBhc3NlcnRFcXVhbHMoMTAsIGluc3RhbmNl
LmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oMTApKTsKK30pKCk7CisKKy8vIFRlc3QgdGhlIGVu
Y29kaW5nIG9mIGEgdGhyb3duIGV4Y2VwdGlvbiB3aXRoIGFuIGludGVnZXIgZXhjZXB0aW9uLgor
KGZ1bmN0aW9uIFRlc3RUaHJvd1BhcmFtSSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1v
ZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9pKTsK
KyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfcGFyYW0iLCBrU2lnX3ZfaSkKKyAgICAgIC5h
ZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJUaHJvdywg
ZXhjZXB0LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2lu
ZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIu
aW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5l
eHBvcnRzLmV4LCBbNV0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oNSkpOwor
ICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbNDI0MjQy
XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSg0MjQyNDIpKTsKK30pKCk7CisK
Ky8vIFRlc3QgdGhyb3dpbmcvY2F0Y2hpbmcgdGhlIGYzMiBwYXJhbWV0ZXIgdmFsdWUuCisoZnVu
Y3Rpb24gVGVzdFRocm93Q2F0Y2hQYXJhbUYoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21N
b2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfZik7
CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X2NhdGNoX3BhcmFtIiwga1NpZ19mX2YpCisg
ICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUYzMiwKKyAgICAgICAgICBr
RXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAg
ICBrRXhwckYzMkNvbnN0LCAwLCAwLCAwLCAwLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQs
CisgICAgICAgICAga0V4cHJSZXR1cm4sCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhw
b3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAg
YXNzZXJ0RXF1YWxzKDUuMCwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSg1LjAp
KTsKKyAgYXNzZXJ0RXF1YWxzKDEwLjUsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFy
YW0oMTAuNSkpOworfSkoKTsKKworLy8gVGVzdCB0aGUgZW5jb2Rpbmcgb2YgYSB0aHJvd24gZXhj
ZXB0aW9uIHdpdGggYSBmbG9hdCB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dQYXJhbUYoKSB7
CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQg
PSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfZik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93
X3BhcmFtIiwga1NpZ192X2YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxH
ZXQsIDAsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQp
OworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2Fz
bVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzUuMF0sICgpID0+IGluc3Rh
bmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oNS4wKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFu
Y2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFsxMC41XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50
aHJvd19wYXJhbSgxMC41KSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nL2NhdGNoaW5nIGFu
IEk2NCB2YWx1ZQorKGZ1bmN0aW9uIFRlc3RUaHJvd0NhdGNoUGFyYW1MKCkgeworICBsZXQgYnVp
bGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X2wpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19jYXRjaF9wYXJh
bSIsIGtTaWdfaV9pKQorICAgICAgLmFkZExvY2FscyhrV2FzbUk2NCwgMSkKKyAgICAgIC5hZGRC
b2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJJNjRVQ29udmVy
dEkzMiwKKyAgICAgICAga0V4cHJMb2NhbFNldCwgMSwKKyAgICAgICAga0V4cHJUcnksIGtXYXNt
STMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAgICAga0V4cHJUaHJvdywg
ZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByQ2F0Y2gs
IGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICAgIGtFeHBySTY0
RXEsCisgICAgICAgICAga0V4cHJJZiwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckkzMkNv
bnN0LCAxLAorICAgICAgICAgIGtFeHByRWxzZSwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3Qs
IDAsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhw
b3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAg
YXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oNSkpOwor
ICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgwKSk7
CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKC0x
KSk7Cit9KSgpOworCisvLyBUZXN0IHRoZSBlbmNvZGluZyBvZiBhIHRocm93biBleGNlcHRpb24g
d2l0aCBhbiBJNjQgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93UGFyYW1MKCkgeworICBsZXQg
YnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRl
ci5hZGRUYWcoa1NpZ192X2wpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19wYXJhbSIs
IGtTaWdfdl9paSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwK
KyAgICAgICAga0V4cHJJNjRVQ29udmVydEkzMiwKKyAgICAgICAga0V4cHJJNjRDb25zdCwgMzIs
CisgICAgICAgIGtFeHBySTY0U2hsLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAg
ICBrRXhwckk2NFVDb252ZXJ0STMyLAorICAgICAgICBrRXhwckk2NElvciwKKyAgICAgICAga0V4
cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4
cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9
IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBp
bnN0YW5jZS5leHBvcnRzLmV4LCBbNDI5NDk2NzI5NjVuXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0
cy50aHJvd19wYXJhbSgxMCwgNSkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0
YW5jZS5leHBvcnRzLmV4LCBbLTQyOTQ5NjcyODNuXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50
aHJvd19wYXJhbSgtMSwgMTMpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcvY2F0Y2hpbmcg
dGhlIEY2NCBwYXJhbWV0ZXIgdmFsdWUKKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFBhcmFtRCgp
IHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2Vw
dCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9kKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhy
b3dfY2F0Y2hfcGFyYW0iLCBrU2lnX2RfZCkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4
cHJUcnksIGtXYXNtRjY0LAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAg
a0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHByRjY0Q29uc3QsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhw
clJldHVybiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxl
dCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoNS4w
LCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDUuMCkpOworICBhc3NlcnRFcXVh
bHMoMTAuNSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgxMC41KSk7Cit9KSgp
OworCisvLyBUZXN0IHRoZSBlbmNvZGluZyBvZiBhIHRocm93biBleGNlcHRpb24gd2l0aCBhbiBm
NjQgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93UGFyYW1EKCkgeworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWco
a1NpZ192X2QpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19wYXJhbSIsIGtTaWdfdl9m
KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBr
RXhwckY2NENvbnZlcnRGMzIsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0p
LmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFs
VGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisK
KyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzUuMF0s
ICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oNS4wKSk7CisgIGFzc2VydFdhc21U
aHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFsxMDAwMDAwMF0sICgpID0+IGlu
c3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oMTAwMDAwMDAuNSkpOworfSkoKTsKKworLy8gVGVz
dCB0aGUgZW5jb2Rpbmcgb2YgYSBjb21wdXRlZCBwYXJhbWV0ZXIgdmFsdWUuCisoZnVuY3Rpb24g
VGVzdFRocm93UGFyYW1Db21wdXRlZCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9pKTsKKyAg
YnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfZXhwcl93aXRoX3BhcmFtcyIsIGtTaWdfdl9kZGkp
CisgICAgICAuYWRkQm9keShbCisgICAgICAgIC8vIHAyICogKHAwICsgbWluKHAwLCBwMSkpfDAg
LSAyMAorICAgICAgICBrRXhwckxvY2FsR2V0LCAyLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAw
LAorICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAor
ICAgICAgICBrRXhwckY2NE1pbiwKKyAgICAgICAga0V4cHJGNjRBZGQsCisgICAgICAgIGtFeHBy
STMyU0NvbnZlcnRGNjQsCisgICAgICAgIGtFeHBySTMyTXVsLAorICAgICAgICBrRXhwckkzMkNv
bnN0LCAyMCwKKyAgICAgICAga0V4cHJJMzJTdWIsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2Vw
dCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKQorICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgi
LCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRz
LmV4LCBbLThdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X2V4cHJfd2l0aF9wYXJhbXMo
MS41LCAyLjUsIDQpKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhw
b3J0cy5leCwgWzEyXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19leHByX3dpdGhfcGFy
YW1zKDUuNywgMi41LCA0KSk7Cit9KSgpOworCisvLyBOb3cgdGhhdCB3ZSBrbm93IGNhdGNoaW5n
IHdvcmtzIGxvY2FsbHksIHdlIHRlc3QgY2F0Y2hpbmcgZXhjZXB0aW9ucyB0aGF0CisvLyBjcm9z
cyBmdW5jdGlvbiBib3VuZGFyaWVzIGFuZC9vciByYWlzZWQgYnkgSmF2YVNjcmlwdC4KKyhmdW5j
dGlvbiBUZXN0Q2F0Y2hDcm9zc0Z1bmN0aW9ucygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2Fz
bU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9p
KTsKKworICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRocm93aW5nIGZyb20gSlMuIEl0IGlzIGlt
cG9ydGVkIGJ5IHRoZSBXYXNtIG1vZHVsZQorICAvLyBhcyB0aHJvd19pLgorICBmdW5jdGlvbiB0
aHJvd192YWx1ZSh2YWx1ZSkgeworICAgIHRocm93IHZhbHVlOworICB9CisgIGxldCBzaWdfaW5k
ZXggPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X2kpOworICBsZXQga0pTVGhyb3dJID0gYnVpbGRl
ci5hZGRJbXBvcnQoIiIsICJ0aHJvd19pIiwgc2lnX2luZGV4KTsKKworICAvLyBIZWxwZXIgZnVu
Y3Rpb24gdGhhdCB0aHJvd3MgYSBzdHJpbmcuIFdhc20gc2hvdWxkIG5vdCBjYXRjaCBpdC4KKyAg
ZnVuY3Rpb24gdGhyb3dfc3RyaW5nKCkgeworICAgIHRocm93ICJ1c2Ugd2FzbSI7CisgIH0KKyAg
c2lnX2luZGV4ID0gYnVpbGRlci5hZGRUeXBlKGtTaWdfdl92KTsKKyAgbGV0IGtKU1Rocm93U3Ry
aW5nID0gYnVpbGRlci5hZGRJbXBvcnQoIiIsICJ0aHJvd19zdHJpbmciLCBzaWdfaW5kZXgpOwor
CisgIC8vIEhlbHBlciBmdW5jdGlvbiB0aGF0IHRocm93cyB1bmRlZmluZWQuIFdhc20gc2hvdWxk
IG5vdCBjYXRjaCBpdC4KKyAgZnVuY3Rpb24gdGhyb3dfdW5kZWZpbmVkKCkgeworICAgIHRocm93
IHVuZGVmaW5lZDsKKyAgfQorICBsZXQga0pTVGhyb3dVbmRlZmluZWQgPSBidWlsZGVyLmFkZElt
cG9ydCgiIiwgInRocm93X3VuZGVmaW5lZCIsIHNpZ19pbmRleCk7CisKKyAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRoYXQgdGhyb3dzIGFuIGZwLiBXYXNtIHNob3VsZCBub3QgY2F0Y2ggaXQuCisgIGZ1
bmN0aW9uIHRocm93X2ZwKCkgeworICAgIHRocm93IDEwLjU7CisgIH0KKyAgbGV0IGtKU1Rocm93
RlAgPSBidWlsZGVyLmFkZEltcG9ydCgiIiwgInRocm93X2ZwIiwgc2lnX2luZGV4KTsKKworICAv
LyBIZWxwZXIgZnVuY3Rpb24gdGhhdCB0aHJvd3MgYSBsYXJnZSBudW1iZXIuIFdhc20gc2hvdWxk
IG5vdCBjYXRjaCBpdC4KKyAgZnVuY3Rpb24gdGhyb3dfbGFyZ2UoKSB7CisgICAgdGhyb3cgMWUr
Mjg7CisgIH0KKyAgbGV0IGtKU1Rocm93TGFyZ2UgPSBidWlsZGVyLmFkZEltcG9ydCgiIiwgInRo
cm93X2xhcmdlIiwgc2lnX2luZGV4KTsKKworICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRocm93
aW5nIGZyb20gV2ViQXNzZW1ibHkuCisgIGxldCBrV2FzbVRocm93RnVuY3Rpb24gPQorICAgIGJ1
aWxkZXIuYWRkRnVuY3Rpb24oInRocm93Iiwga1NpZ192X2kpCisgICAgICAuYWRkQm9keShbCisg
ICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAg
ICAgIF0pCisgICAgICAuaW5kZXg7CisKKyAgLy8gU2NlbmFyaW8gMTogVGhyb3cgYW5kIGNhdGNo
IGFwcGVhciBvbiB0aGUgc2FtZSBmdW5jdGlvbi4gVGhpcyBzaG91bGQKKyAgLy8gaGFwcGVuIGlu
IGNhc2Ugb2YgaW5saW5pbmcsIGZvciBleGFtcGxlLgorICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJz
YW1lX3Njb3BlIiwga1NpZ19pX2kpCisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtX
YXNtSTMyLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckkzMkNvbnN0
LCAwLAorICAgICAgICBrRXhwckkzMk5lLAorICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisg
ICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQs
CisgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICAg
IGtFeHBySTMyQ29uc3QsIDYzLAorICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAga0V4
cHJFbmQKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgYnVpbGRlci5hZGRGdW5jdGlv
bigic2FtZV9zY29wZV9pZ25vcmUiLCBrU2lnX2lfaSkKKyAgICAuYWRkQm9keShbCisgICAgICAg
IGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAg
ICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAg
ICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByRW5kLAorICAgIF0pCisgICAg
LmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJzYW1lX3Njb3BlX211bHRp
cGxlIiwga1NpZ19pX2kpCisgICAgLy8gcGF0aCA9IDA7CisgICAgLy8KKyAgICAvLyB0cnkgewor
ICAgIC8vICAgdHJ5IHsKKyAgICAvLyAgICAgdHJ5IHsKKyAgICAvLyAgICAgICBpZiAocCA9PSAx
KQorICAgIC8vICAgICAgICAgdGhyb3cgMTsKKyAgICAvLyAgICAgICBwYXRoIHw9IDIKKyAgICAv
LyAgICAgfSBjYXRjaCAodikgeworICAgIC8vICAgICAgIHBhdGggfD0gdiB8IDQ7CisgICAgLy8g
ICAgICAgdGhyb3cgcGF0aDsKKyAgICAvLyAgICAgfQorICAgIC8vICAgICBpZiAocCA9PSAyKQor
ICAgIC8vICAgICAgIHRocm93IHBhdGh8ODsKKyAgICAvLyAgICAgcGF0aCB8PSAxNjsKKyAgICAv
LyAgIH0gY2F0Y2ggKHYpIHsKKyAgICAvLyAgICAgcGF0aCB8PSB2IHwgMzI7CisgICAgLy8gICAg
IHRocm93IHBhdGg7CisgICAgLy8gICB9CisgICAgLy8gICBpZiAocCA9PSAzKQorICAgIC8vICAg
ICB0aHJvdyBwYXRofDY0OworICAgIC8vICAgcGF0aCB8PSAxMjgKKyAgICAvLyB9IGNhdGNoICh2
KSB7CisgICAgLy8gICBwYXRoIHw9IHYgfCAyNTY7CisgICAgLy8gfQorICAgIC8vCisgICAgLy8g
cmV0dXJuIHBhdGg7CisgICAgLy8KKyAgICAvLyBwID09IDEgLT4gcGF0aCA9PSAyOTMKKyAgICAv
LyBwID09IDIgLT4gcGF0aCA9PSAyOTgKKyAgICAvLyBwID09IDMgLT4gcGF0aCA9PSAzMzgKKyAg
ICAvLyBlbHNlICAgLT4gcGF0aCA9PSAxNDYKKyAgICAuYWRkTG9jYWxzKGtXYXNtSTMyLCAxKQor
ICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtF
eHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAg
ICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwg
MSwKKyAgICAgICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAgICAgICAga0V4cHJJZiwga1dh
c21Wb2lkLAorICAgICAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAgICAg
ICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUs
CisgICAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAy
LAorICAgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgICAgICBrRXhwckkz
MkNvbnN0LCA0LAorICAgICAgICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAgICAgICAga0V4
cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAg
ICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICBrRXhwckxvY2FsVGVlLCAxLAorICAgICAgICAg
ICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAg
ICAgICAgICBrRXhwckkzMkVxLAorICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAg
ICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0
LCA4LAorICAgICAgICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAgICAgICAga0V4cHJUaHJv
dywgZXhjZXB0LAorICAgICAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICAgICAg
a0V4cHJFbmQsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxNiwKKyAgICAgICAgICAgIGtF
eHBySTMySW9yLAorICAgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICAgIGtF
eHBySTMyQ29uc3QsIDMyLAorICAgICAgICAgICAga0V4cHJJMzJJb3IsCisgICAgICAgICAgICBr
RXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAg
ICAgIGtFeHByRW5kLAorICAgICAgICAgIGtFeHByTG9jYWxUZWUsIDEsCisgICAgICAgICAga0V4
cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAzLAorICAgICAgICAgIGtF
eHBySTMyRXEsCisgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4
cHJMb2NhbEdldCwgMSwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIC8qNjQ9Ki8gMTkyLCAw
LAorICAgICAgICAgICAga0V4cHJJMzJJb3IsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNl
cHQsCisgICAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICAgIGtFeHByRW5kLAor
ICAgICAgICAgIGtFeHBySTMyQ29uc3QsIC8qMTI4PSovIDEyOCwgMSwKKyAgICAgICAgICBrRXhw
ckkzMklvciwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMy
Q29uc3QsIC8qMjU2PSovIDEyOCwgMiwKKyAgICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAg
a0V4cHJFbmQsCisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIC8vIFNjZW5hcmlvIDI6
IENhdGNoZXMgYW4gZXhjZXB0aW9uIHJhaXNlZCBmcm9tIHRoZSBkaXJlY3QgY2FsbGVlLgorICBi
dWlsZGVyLmFkZEZ1bmN0aW9uKCJmcm9tX2RpcmVjdF9jYWxsZWUiLCBrU2lnX2lfaSkKKyAgICAu
YWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgIGtFeHByTG9jYWxH
ZXQsIDAsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrV2FzbVRocm93RnVuY3Rpb24sCisg
ICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAg
ICBrRXhwckVuZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgLy8gU2NlbmFyaW8g
MzogQ2F0Y2hlcyBhbiBleGNlcHRpb24gcmFpc2VkIGZyb20gYW4gaW5kaXJlY3QgY2FsbGVlLgor
ICBsZXQgc2lnX3ZfaSA9IGJ1aWxkZXIuYWRkVHlwZShrU2lnX3ZfaSk7CisgIGJ1aWxkZXIuYXBw
ZW5kVG9UYWJsZShba1dhc21UaHJvd0Z1bmN0aW9uLCBrV2FzbVRocm93RnVuY3Rpb25dKTsKKyAg
YnVpbGRlci5hZGRGdW5jdGlvbigiZnJvbV9pbmRpcmVjdF9jYWxsZWUiLCBrU2lnX2lfaWkpCisg
ICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICBrRXhwckxv
Y2FsR2V0LCAwLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICBrRXhwckNhbGxJ
bmRpcmVjdCwgc2lnX3ZfaSwga1RhYmxlWmVybywKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwK
KyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgIGtFeHByRW5kCisgICAgXSkKKyAgICAu
ZXhwb3J0RnVuYygpOworCisgIC8vIFNjZW5hcmlvIDQ6IERvZXMgbm90IGNhdGNoIGFuIGV4Y2Vw
dGlvbiByYWlzZWQgaW4gSlMsIGV2ZW4gaWYgcHJpbWl0aXZlCisgIC8vIHZhbHVlcyBhcmUgYmVp
bmcgdXNlZCBhcyBleGNlcHRpb25zLgorICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJpX2Zyb21fanMi
LCBrU2lnX2lfaSkKKyAgICAuYWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisg
ICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrSlNU
aHJvd0ksCisgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICBrRXhwckNhdGNoLCBleGNl
cHQsCisgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICBrRXhwckVuZCwKKyAgICBdKQor
ICAgIC5leHBvcnRGdW5jKCk7CisKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigic3RyaW5nX2Zyb21f
anMiLCBrU2lnX3ZfdikKKyAgICAuYWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21Wb2lk
LAorICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwga0pTVGhyb3dTdHJpbmcsCisgICAgICBrRXhw
ckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICBrRXhwckVu
ZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigi
ZnBfZnJvbV9qcyIsIGtTaWdfdl92KQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBr
V2FzbVZvaWQsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrSlNUaHJvd0ZQLAorICAgICAg
a0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAga0V4
cHJFbmQsCisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVuY3Rp
b24oImxhcmdlX2Zyb21fanMiLCBrU2lnX3ZfdikKKyAgICAuYWRkQm9keShbCisgICAgICBrRXhw
clRyeSwga1dhc21Wb2lkLAorICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwga0pTVGhyb3dMYXJn
ZSwKKyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwK
KyAgICAgIGtFeHByRW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJ1bmRlZmluZWRfZnJvbV9qcyIsIGtTaWdfdl92KQorICAgIC5hZGRCb2R5
KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9u
LCBrSlNUaHJvd1VuZGVmaW5lZCwKKyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAg
a0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByRW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1
bmMoKTsKKworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsiIjogeworICAg
ICAgdGhyb3dfaTogdGhyb3dfdmFsdWUsCisgICAgICB0aHJvd19zdHJpbmc6IHRocm93X3N0cmlu
ZywKKyAgICAgIHRocm93X2ZwOiB0aHJvd19mcCwKKyAgICAgIHRocm93X2xhcmdlLCB0aHJvd19s
YXJnZSwKKyAgICAgIHRocm93X3VuZGVmaW5lZDogdGhyb3dfdW5kZWZpbmVkCisgIH19KTsKKwor
ICBhc3NlcnRFcXVhbHMoNjMsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZSgwKSk7CisgIGFz
c2VydEVxdWFscygxMDI0LCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGUoMTAyNCkpOworICBh
c3NlcnRFcXVhbHMoLTMsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZSgtMykpOworICBhc3Nl
cnRFcXVhbHMoLTEsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZV9pZ25vcmUoLTEpKTsKKyAg
YXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZV9pZ25vcmUoMSkpOwor
ICBhc3NlcnRFcXVhbHMoMHg3RkZGRkZGRiwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX2ln
bm9yZSgweDdGRkZGRkZGKSk7CisgIGFzc2VydEVxdWFscygxMDI0LCBpbnN0YW5jZS5leHBvcnRz
LnNhbWVfc2NvcGVfaWdub3JlKDEwMjQpKTsKKyAgYXNzZXJ0RXF1YWxzKC0xLCBpbnN0YW5jZS5l
eHBvcnRzLnNhbWVfc2NvcGVfaWdub3JlKC0xKSk7CisgIGFzc2VydEVxdWFscygyOTMsIGluc3Rh
bmNlLmV4cG9ydHMuc2FtZV9zY29wZV9tdWx0aXBsZSgxKSk7CisgIGFzc2VydEVxdWFscygyOTgs
IGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZV9tdWx0aXBsZSgyKSk7CisgIGFzc2VydEVxdWFs
cygzMzgsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZV9tdWx0aXBsZSgzKSk7CisgIGFzc2Vy
dEVxdWFscygxNDYsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZV9tdWx0aXBsZSgwKSk7Cisg
IGFzc2VydEVxdWFscygtMTAwMjQsIGluc3RhbmNlLmV4cG9ydHMuZnJvbV9kaXJlY3RfY2FsbGVl
KC0xMDAyNCkpOworICBhc3NlcnRFcXVhbHMoMzMzNDMzMywgaW5zdGFuY2UuZXhwb3J0cy5mcm9t
X2RpcmVjdF9jYWxsZWUoMzMzNDMzMykpOworICBhc3NlcnRFcXVhbHMoLTEsIGluc3RhbmNlLmV4
cG9ydHMuZnJvbV9kaXJlY3RfY2FsbGVlKDB4RkZGRkZGRkYpKTsKKyAgYXNzZXJ0RXF1YWxzKDB4
N0ZGRkZGRkYsIGluc3RhbmNlLmV4cG9ydHMuZnJvbV9kaXJlY3RfY2FsbGVlKDB4N0ZGRkZGRkYp
KTsKKyAgYXNzZXJ0RXF1YWxzKDEwLCBpbnN0YW5jZS5leHBvcnRzLmZyb21faW5kaXJlY3RfY2Fs
bGVlKDEwLCAwKSk7CisgIGFzc2VydEVxdWFscyg3NywgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2lu
ZGlyZWN0X2NhbGxlZSg3NywgMSkpOworCisgIGFzc2VydFRocm93c0VxdWFscygoKSA9PiBpbnN0
YW5jZS5leHBvcnRzLmlfZnJvbV9qcygxMCksIDEwKTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzKCgp
ID0+IGluc3RhbmNlLmV4cG9ydHMuaV9mcm9tX2pzKC0xMCksIC0xMCk7CisgIGFzc2VydFRocm93
c0VxdWFscyhpbnN0YW5jZS5leHBvcnRzLnN0cmluZ19mcm9tX2pzLCAidXNlIHdhc20iKTsKKyAg
YXNzZXJ0VGhyb3dzRXF1YWxzKGluc3RhbmNlLmV4cG9ydHMuZnBfZnJvbV9qcywgMTAuNSk7Cisg
IGFzc2VydFRocm93c0VxdWFscyhpbnN0YW5jZS5leHBvcnRzLmxhcmdlX2Zyb21fanMsIDFlKzI4
KTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzKGluc3RhbmNlLmV4cG9ydHMudW5kZWZpbmVkX2Zyb21f
anMsIHVuZGVmaW5lZCk7Cit9KSgpOworCisvLyBEZWxlZ2F0ZSB3aXRoIGEgdHJ5IGJsb2NrIHRo
YXQgbmV2ZXIgdGhyb3dzLgorKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZU5vVGhyb3coKSB7CisgIGxl
dCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0gYnVp
bGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1Np
Z19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAg
ICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAx
LAorICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDAsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2Vw
dDEsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJFbmQsCisgICAg
ICBdKS5leHBvcnRGdW5jKCk7CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOwor
ICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KCkpOworfSkoKTsKKworLy8g
RGVsZWdhdGUgZXhjZXB0aW9uIGhhbmRsaW5nIHRvIG91dGVyIHRyeS9jYXRjaCBibG9jay4KKyhm
dW5jdGlvbiBUZXN0RGVsZWdhdGVUaHJvdygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1v
ZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsK
KyAgbGV0IHRocm93X2lmID0gYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3cnLCBrU2lnX3ZfaSkK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAg
IGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAg
ICAgICAgICBrRXhwckVuZF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbign
dGVzdCcsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dh
c21JMzIsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJM
b2NhbEdldCwgMCwKKyAgICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCB0aHJvd19pZi5pbmRl
eCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAga0V4cHJEZWxlZ2F0
ZSwgMCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMyQ29u
c3QsIDIsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBpbnN0
YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNl
LmV4cG9ydHMudGVzdCgwKSk7CisgIGFzc2VydEVxdWFscygyLCBpbnN0YW5jZS5leHBvcnRzLnRl
c3QoMSkpOworfSkoKTsKKworLy8gTm8gY2F0Y2ggYmxvY2sgbWF0Y2hpbmcgdGhlIGV4Y2VwdGlv
biBpbiB0aGUgZGVsZWdhdGUgdGFyZ2V0LgorKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZVRocm93Tm9D
YXRjaCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0
IGV4Y2VwdDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVp
bGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgdGhyb3dfZm4gPSBidWlsZGVyLmFkZEZ1bmN0
aW9uKCd0aHJvdycsIGtTaWdfdl92KQorICAgICAgICAgICAgICAgICAgICAgLmFkZEJvZHkoW2tF
eHByVGhyb3csIGV4Y2VwdDFdKQorICAgICAgICAgICAgICAgICAgICAgLmV4cG9ydEZ1bmMoKTsK
KyAgbGV0IHRocm93X2ZuXzIgPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvd18yJywga1NpZ192
X3YpCisgICAgICAgICAgICAgICAgICAgICAuYWRkQm9keShba0V4cHJUaHJvdywgZXhjZXB0Ml0p
CisgICAgICAgICAgICAgICAgICAgICAuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEZ1bmN0
aW9uKCd0ZXN0Jywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5
LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBr
RXhwckNhbGxGdW5jdGlvbiwgdGhyb3dfZm4uaW5kZXgsCisgICAgICAgICAgICBrRXhwckkzMkNv
bnN0LCAxLAorICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDAsCisgICAgICAgIGtFeHByQ2F0Y2gs
IGV4Y2VwdDIsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJFbmQs
CisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0
ZSgpOworICBhc3NlcnRUaHJvd3MoaW5zdGFuY2UuZXhwb3J0cy50ZXN0LCBXZWJBc3NlbWJseS5F
eGNlcHRpb24pOworfSkoKTsKKworLy8gQ2hlY2sgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIG1lcmdl
ZCBwcm9wZXJseSB3aGVuIGJvdGggc2NvcGVzIGNhbiB0aHJvdy4KKyhmdW5jdGlvbiBUZXN0RGVs
ZWdhdGVNZXJnZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsK
KyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQy
ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICAvLyB0aHJvd19mbjogMCAtPiByZXR1cm5z
CisgIC8vICAgICAgICAgICAxIC0+IHRocm93IGV4Y2VwdDEKKyAgLy8gICAgICAgICAgIDIgLT4g
dGhyb3cgZXhjZXB0MgorICBsZXQgdGhyb3dfZm4gPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJv
dycsIGtTaWdfdl9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICAgIGtFeHByQmxvY2ssIGtX
YXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByQmxvY2ssIGtXYXNtVm9pZCwKKyAgICAgICAgICAg
ICAga0V4cHJCbG9jaywga1dhc21Wb2lkLAorICAgICAgICAgICAgICAgIGtFeHByTG9jYWxHZXQs
IDAsCisgICAgICAgICAgICAgICAga0V4cHJCclRhYmxlLCAyLCAwLCAxLCAyLAorICAgICAgICAg
ICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgICAga0V4cHJSZXR1cm4sCisgICAgICAgICAgICBr
RXhwckVuZCwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDEsCisgICAgICAgICAga0V4
cHJFbmQsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0Ml0pCisgICAgICAuZXhwb3J0RnVu
YygpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ19pX2lpKQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJMb2Nh
bEdldCwgMCwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgdGhyb3dfZm4uaW5kZXgsCisg
ICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwg
MSwKKyAgICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCB0aHJvd19mbi5pbmRleCwKKyAgICAg
ICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAg
ICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAor
ICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBi
dWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscygyLCBpbnN0YW5jZS5leHBvcnRz
LnRlc3QoMSwgMCkpOworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50ZXN0
KDIsIDApLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICBhc3NlcnRFcXVhbHMoMiwgaW5zdGFu
Y2UuZXhwb3J0cy50ZXN0KDAsIDEpKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlLmV4
cG9ydHMudGVzdCgwLCAyKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgYXNzZXJ0RXF1YWxz
KDEsIGluc3RhbmNlLmV4cG9ydHMudGVzdCgwLCAwKSk7Cit9KSgpOworCisvLyBEZWxlZ2F0ZSB0
byBzZWNvbmQgZW5jbG9zaW5nIHRyeSBzY29wZS4KKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGUxKCkg
eworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0
ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgdGhyb3dfZm4gPSBidWlsZGVyLmFk
ZEZ1bmN0aW9uKCd0aHJvdycsIGtTaWdfdl92KQorICAgICAgICAgICAgICAgICAgICAgLmFkZEJv
ZHkoW2tFeHByVGhyb3csIGV4Y2VwdF0pCisgICAgICAgICAgICAgICAgICAgICAuZXhwb3J0RnVu
YygpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ19pX3YpCisgICAgICAuYWRk
Qm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRyeSwg
a1dhc21JMzIsCisgICAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICAg
IGtFeHByQ2FsbEZ1bmN0aW9uLCB0aHJvd19mbi5pbmRleCwKKyAgICAgICAgICAgICAga0V4cHJJ
MzJDb25zdCwgMSwKKyAgICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDEsCisgICAgICAgICAga0V4
cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAg
ICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDMsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOwor
ICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDMsIGlu
c3RhbmNlLmV4cG9ydHMudGVzdCgpKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVV
bnJlYWNoYWJsZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsK
KyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQy
ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0
Jywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkz
MiwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJv
dywgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDEsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAgICAgICAga0V4
cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MiwKKyAgICAgICAgICBr
RXhwckkzMkNvbnN0LCAzLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscygy
LCBpbnN0YW5jZS5leHBvcnRzLnRlc3QoKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdERlbGVn
YXRlVG9DYWxsZXIoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7
CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRk
RnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4
cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAg
ICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDEsCisg
ICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRG
dW5jKCk7CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRUaHJv
d3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50ZXN0KCksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7
Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdFRocm93QmVmb3JlVW5yZWFjaGFibGUoKSB7CisgIGxl
dCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWls
ZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93X2JlZm9y
ZV91bnJlYWNoYWJsZScsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhw
clRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAg
IGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4
cHJJMzJDb25zdCwgNDIsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygp
OworCisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1
YWxzKDQyLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2JlZm9yZV91bnJlYWNoYWJsZSgpKTsKK30p
KCk7CisKKyhmdW5jdGlvbiBUZXN0VW5yZWFjaGFibGVJbkNhdGNoQWxsKCkgeworICBsZXQgYnVp
bGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvd19iZWZvcmVfdW5y
ZWFjaGFibGUnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnks
IGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJD
YXRjaEFsbCwKKyAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICAgIGtFeHBySTMy
Q29uc3QsIDQyLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKwor
ICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7Cit9KSgpOworCisoZnVuY3Rp
b24gVGVzdFRocm93V2l0aExvY2FsKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBi
dWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvd193aXRoX2xvY2FsJywga1NpZ19pX3YpCisgICAgLmFk
ZExvY2FscyhrV2FzbUkzMiwgNCkKKyAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBySTMyQ29u
c3QsIDQyLAorICAgICAgICBrRXhwckY2NENvbnN0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAor
ICAgICAgICBrRXhwclRyeSwga1dhc21GMzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0
LAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICAgIGtFeHByRjMyQ29uc3QsIDAsIDAs
IDAsIDAsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckRyb3AsICAvLyBEcm9wIHRo
ZSBmMzIuCisgICAgICAgIGtFeHByRHJvcCwgIC8vIERyb3AgdGhlIGY2NC4KKyAgICAgICAgLy8g
TGVhdmUgdGhlICc0Micgb24gdGhlIHN0YWNrLgorICAgIF0pLmV4cG9ydEZ1bmMoKTsKKworICBs
ZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscyg0Miwg
aW5zdGFuY2UuZXhwb3J0cy50aHJvd193aXRoX2xvY2FsKCkpOworfSkoKTsKKworKGZ1bmN0aW9u
IFRlc3RDYXRjaGxlc3NUcnkoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWls
ZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxk
ZXIuYWRkRnVuY3Rpb24oJ2NhdGNobGVzc190cnknLCBrU2lnX3ZfaSkKKyAgICAuYWRkQm9keShb
CisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwg
MCwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93
LCBleGNlcHQsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByRW5kLAorICAgIF0p
LmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJu
YWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsK
KyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hsZXNzX3Ry
eSgwKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgs
IFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmNhdGNobGVzc190cnkoMSkpOworfSkoKTsKKwor
Ly8gRGVsZWdhdGUgdG8gYSByZWd1bGFyIGJsb2NrIGluc2lkZSBhIHRyeSBibG9jay4KKyhmdW5j
dGlvbiBUZXN0RGVsZWdhdGVUb0Jsb2NrKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9k
dWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOwor
ICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShb
CisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckJsb2NrLCBrV2Fz
bUkzMiwKKyAgICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgICAga0V4
cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAg
ICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOwor
ICAgIGFzc2VydFRocm93cygoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKCksIEVycm9yLCAvZGVs
ZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5IGJsb2NrLyk7Cit9KSgpOworCisvLyBEZWxlZ2F0ZSB0
byBhIHJlZ3VsYXIgYmxvY2sgd2l0aCBubyBvdXRlciB0cnkgKGRlbGVnYXRlIHRvIGNhbGxlciku
CisoZnVuY3Rpb24gVGVzdERlbGVnYXRlVG9DYWxsZXJXaXRoQmxvY2soKSB7CisgIGxldCBidWls
ZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFk
ZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX3ZfdikK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJCbG9jaywga1dhc21Wb2lkLAorICAgICAg
ICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQs
CisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0p
LmV4cG9ydEZ1bmMoKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUo
KSwgRXJyb3IsIC9kZWxlZ2F0ZSB0YXJnZXQgaXNuJ3QgYSB0cnkgYmxvY2svKTsKK30pKCk7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvbWpzdW5pdC5qcyBiL0pTVGVzdHMvd2FzbS92OC9t
anN1bml0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyNDU1YmFhNjE2OTY2ZjhkMGE2YjlkZTFkYTMyMTFmZmEy
ZGEzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvbWpzdW5pdC5qcwpAQCAt
MCwwICsxLDgyNiBAQAorLy8gQ29weXJpZ2h0IDIwMDggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8g
bWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisv
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisv
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmdW5jdGlvbiBNanNV
bml0QXNzZXJ0aW9uRXJyb3IobWVzc2FnZSkgeworICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwor
ICAvLyBUZW1wb3JhcmlseSBpbnN0YWxsIGEgY3VzdG9tIHN0YWNrIHRyYWNlIGZvcm1hdHRlciBh
bmQgcmVzdG9yZSB0aGUKKyAgLy8gcHJldmlvdXMgdmFsdWUuCisgIGxldCBwcmV2UHJlcGFyZVN0
YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsKKyAgdHJ5IHsKKyAgICBFcnJvci5w
cmVwYXJlU3RhY2tUcmFjZSA9IE1qc1VuaXRBc3NlcnRpb25FcnJvci5wcmVwYXJlU3RhY2tUcmFj
ZTsKKyAgICAvLyBUaGlzIGFsbG93cyBmZXRjaGluZyB0aGUgc3RhY2sgdHJhY2UgdXNpbmcgVHJ5
Q2F0Y2g6OlN0YWNrVHJhY2UuCisgICAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcigiTWpzVW5pdEFz
c2VydGlvbkVycm9yIikuc3RhY2s7CisgIH0gZmluYWxseSB7CisgICAgRXJyb3IucHJlcGFyZVN0
YWNrVHJhY2UgPSBwcmV2UHJlcGFyZVN0YWNrVHJhY2U7CisgIH0KK30KKworLyoKKyAqIFRoaXMg
ZmlsZSBpcyBpbmNsdWRlZCBpbiBhbGwgbWluaSBqc3VuaXQgdGVzdCBjYXNlcy4gIFRoZSB0ZXN0
CisgKiBmcmFtZXdvcmsgZXhwZWN0cyBsaW5lcyB0aGF0IHNpZ25hbCBmYWlsZWQgdGVzdHMgdG8g
c3RhcnQgd2l0aAorICogdGhlIGYtd29yZCBhbmQgaWdub3JlIGFsbCBvdGhlciBsaW5lcy4KKyAq
LworCitNanNVbml0QXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24g
KCkgeworICByZXR1cm4gdGhpcy5tZXNzYWdlICsgIlxuXG5TdGFjazogIiArIHRoaXMuc3RhY2s7
Cit9OworCisKKy8vIEV4cGVjdGVkIGFuZCBmb3VuZCB2YWx1ZXMgdGhlIHNhbWUgb2JqZWN0cywg
b3IgdGhlIHNhbWUgcHJpbWl0aXZlCisvLyB2YWx1ZXMuCisvLyBGb3Iga25vd24gcHJpbWl0aXZl
IHZhbHVlcywgcGxlYXNlIHVzZSBhc3NlcnRFcXVhbHMuCit2YXIgYXNzZXJ0U2FtZTsKKworLy8g
SW52ZXJzZSBvZiBhc3NlcnRTYW1lLgordmFyIGFzc2VydE5vdFNhbWU7CisKKy8vIEV4cGVjdGVk
IGFuZCBmb3VuZCB2YWx1ZXMgYXJlIGlkZW50aWNhbCBwcmltaXRpdmUgdmFsdWVzIG9yIGZ1bmN0
aW9ucworLy8gb3Igc2ltaWxhcmx5IHN0cnVjdHVyZWQgb2JqZWN0cyAoY2hlY2tpbmcgaW50ZXJu
YWwgcHJvcGVydGllcworLy8gb2YsIGUuZy4sIE51bWJlciBhbmQgRGF0ZSBvYmplY3RzLCB0aGUg
ZWxlbWVudHMgb2YgYXJyYXlzCisvLyBhbmQgdGhlIHByb3BlcnRpZXMgb2Ygbm9uLUFycmF5IG9i
amVjdHMpLgordmFyIGFzc2VydEVxdWFsczsKKworLy8gRGVlcCBlcXVhbGl0eSBwcmVkaWNhdGUg
dXNlZCBieSBhc3NlcnRFcXVhbHMuCit2YXIgZGVlcEVxdWFsczsKKworLy8gRXhwZWN0ZWQgYW5k
IGZvdW5kIHZhbHVlcyBhcmUgbm90IGlkZW50aWNhbCBwcmltaXRpdmUgdmFsdWVzIG9yIGZ1bmN0
aW9ucworLy8gb3Igc2ltaWxhcmx5IHN0cnVjdHVyZWQgb2JqZWN0cyAoY2hlY2tpbmcgaW50ZXJu
YWwgcHJvcGVydGllcworLy8gb2YsIGUuZy4sIE51bWJlciBhbmQgRGF0ZSBvYmplY3RzLCB0aGUg
ZWxlbWVudHMgb2YgYXJyYXlzCisvLyBhbmQgdGhlIHByb3BlcnRpZXMgb2Ygbm9uLUFycmF5IG9i
amVjdHMpLgordmFyIGFzc2VydE5vdEVxdWFsczsKKworLy8gVGhlIGRpZmZlcmVuY2UgYmV0d2Vl
biBleHBlY3RlZCBhbmQgZm91bmQgdmFsdWUgaXMgd2l0aGluIGNlcnRhaW4gdG9sZXJhbmNlLgor
dmFyIGFzc2VydEVxdWFsc0RlbHRhOworCisvLyBUaGUgZm91bmQgb2JqZWN0IGlzIGFuIEFycmF5
IHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFuZCBlbGVtZW50cworLy8gYXMgdGhlIGV4cGVjdGVkIG9i
amVjdC4gVGhlIGV4cGVjdGVkIG9iamVjdCBkb2Vzbid0IG5lZWQgdG8gYmUgYW4gQXJyYXksCisv
LyBhcyBsb25nIGFzIGl0J3MgImFycmF5LWlzaCIuCit2YXIgYXNzZXJ0QXJyYXlFcXVhbHM7CisK
Ky8vIFRoZSBmb3VuZCBvYmplY3QgbXVzdCBoYXZlIHRoZSBzYW1lIGVudW1lcmFibGUgcHJvcGVy
dGllcyBhcyB0aGUKKy8vIGV4cGVjdGVkIG9iamVjdC4gVGhlIHR5cGUgb2Ygb2JqZWN0IGlzbid0
IGNoZWNrZWQuCit2YXIgYXNzZXJ0UHJvcGVydGllc0VxdWFsOworCisvLyBBc3NlcnQgdGhhdCB0
aGUgc3RyaW5nIGNvbnZlcnNpb24gb2YgdGhlIGZvdW5kIHZhbHVlIGlzIGVxdWFsIHRvCisvLyB0
aGUgZXhwZWN0ZWQgc3RyaW5nLiBPbmx5IGtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5
LCBwbGVhc2UKKy8vIGNoZWNrIHRoZSByZWFsIHN0cnVjdHVyZSBvZiB0aGUgZm91bmQgdmFsdWUu
Cit2YXIgYXNzZXJ0VG9TdHJpbmdFcXVhbHM7CisKKy8vIENoZWNrcyB0aGF0IHRoZSBmb3VuZCB2
YWx1ZSBpcyB0cnVlLiBVc2Ugd2l0aCBib29sZWFuIGV4cHJlc3Npb25zCisvLyBmb3IgdGVzdHMg
dGhhdCBkb2Vzbid0IGhhdmUgdGhlaXIgb3duIGFzc2VydFhYWCBmdW5jdGlvbi4KK3ZhciBhc3Nl
cnRUcnVlOworCisvLyBDaGVja3MgdGhhdCB0aGUgZm91bmQgdmFsdWUgaXMgZmFsc2UuCit2YXIg
YXNzZXJ0RmFsc2U7CisKKy8vIENoZWNrcyB0aGF0IHRoZSBmb3VuZCB2YWx1ZSBpcyBudWxsLiBL
ZXB0IGZvciBoaXN0b3JpY2FsIGNvbXBhdGliaWxpdHksCisvLyBwbGVhc2UganVzdCB1c2UgYXNz
ZXJ0RXF1YWxzKG51bGwsIGV4cGVjdGVkKS4KK3ZhciBhc3NlcnROdWxsOworCisvLyBDaGVja3Mg
dGhhdCB0aGUgZm91bmQgdmFsdWUgaXMgKm5vdCogbnVsbC4KK3ZhciBhc3NlcnROb3ROdWxsOwor
CisvLyBBc3NlcnQgdGhhdCB0aGUgcGFzc2VkIGZ1bmN0aW9uIG9yIGV2YWwgY29kZSB0aHJvd3Mg
YW4gZXhjZXB0aW9uLgorLy8gVGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBpcyBhbiBleGNl
cHRpb24gY29uc3RydWN0b3IgdGhhdCB0aGUKKy8vIHRocm93biBleGNlcHRpb24gaXMgY2hlY2tl
ZCBhZ2FpbnN0IHdpdGggImluc3RhbmNlb2YiLgorLy8gVGhlIG9wdGlvbmFsIHRoaXJkIGFyZ3Vt
ZW50IGlzIGEgbWVzc2FnZSB0eXBlIHN0cmluZyBvciBSZWdFeHAgb2JqZWN0IHRoYXQgaXMKKy8v
IGNvbXBhcmVkIHRvIHRoZSBtZXNzYWdlIG9mIHRoZSB0aHJvd24gZXhjZXB0aW9uLgordmFyIGFz
c2VydFRocm93czsKKworLy8gQXNzZXJ0IHRoYXQgdGhlIHBhc3NlZCBmdW5jdGlvbiB0aHJvd3Mg
YW4gZXhjZXB0aW9uLgorLy8gVGhlIGV4Y2VwdGlvbiBpcyBjaGVja2VkIGFnYWluc3QgdGhlIHNl
Y29uZCBhcmd1bWVudCB1c2luZyBhc3NlcnRFcXVhbHMuCit2YXIgYXNzZXJ0VGhyb3dzRXF1YWxz
OworCisvLyBBc3NlcnQgdGhhdCB0aGUgcGFzc2VkIHByb21pc2UgZG9lcyBub3QgcmVzb2x2ZSwg
YnV0IGV2ZW50dWFsbHkgdGhyb3dzIGFuCisvLyBleGNlcHRpb24uIFRoZSBvcHRpb25hbCBzZWNv
bmQgYXJndW1lbnQgaXMgYW4gZXhjZXB0aW9uIGNvbnN0cnVjdG9yIHRoYXQgdGhlCisvLyB0aHJv
d24gZXhjZXB0aW9uIGlzIGNoZWNrZWQgYWdhaW5zdCB3aXRoICJpbnN0YW5jZW9mIi4KKy8vIFRo
ZSBvcHRpb25hbCB0aGlyZCBhcmd1bWVudCBpcyBhIG1lc3NhZ2UgdHlwZSBzdHJpbmcgb3IgUmVn
RXhwIG9iamVjdCB0aGF0IGlzCisvLyBjb21wYXJlZCB0byB0aGUgbWVzc2FnZSBvZiB0aGUgdGhy
b3duIGV4Y2VwdGlvbi4KK3ZhciBhc3NlcnRUaHJvd3NBc3luYzsKKworLy8gQXNzZXJ0IHRoYXQg
dGhlIHBhc3NlZCBmdW5jdGlvbiBvciBldmFsIGNvZGUgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0
aW9uLgordmFyIGFzc2VydERvZXNOb3RUaHJvdzsKKworLy8gQXNzZXJ0cyB0aGF0IHRoZSBmb3Vu
ZCB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29uc3RydWN0b3IgcGFzc2VkCisvLyBhcyB0
aGUgc2Vjb25kIGFyZ3VtZW50LgordmFyIGFzc2VydEluc3RhbmNlb2Y7CisKKy8vIEFzc2VydCB0
aGF0IHRoaXMgY29kZSBpcyBuZXZlciBleGVjdXRlZCAoaS5lLiwgYWx3YXlzIGZhaWxzIGlmIGV4
ZWN1dGVkKS4KK3ZhciBhc3NlcnRVbnJlYWNoYWJsZTsKKworLy8gQXNzZXJ0IHRoYXQgdGhlIGZ1
bmN0aW9uIGNvZGUgaXMgKG5vdCkgb3B0aW1pemVkLgorLy8gT25seSB3b3JrcyB3aXRoIC0tYWxs
b3ctbmF0aXZlcy1zeW50YXguCit2YXIgYXNzZXJ0T3B0aW1pemVkOwordmFyIGFzc2VydFVub3B0
aW1pemVkOworCisvLyBBc3NlcnQgdGhhdCBhIHN0cmluZyBjb250YWlucyBhbm90aGVyIGV4cGVj
dGVkIHN1YnN0cmluZy4KK3ZhciBhc3NlcnRDb250YWluczsKKworLy8gQXNzZXJ0IHRoYXQgYSBz
dHJpbmcgbWF0Y2hlcyBhIGdpdmVuIHJlZ2V4LgordmFyIGFzc2VydE1hdGNoZXM7CisKKy8vIEFz
c2VydCB0aGF0IGEgcHJvbWlzZSByZXNvbHZlcyBvciByZWplY3RzLgorLy8gUGFyYW1ldGVyczoK
Ky8vIHtwcm9taXNlfSAtIHRoZSBwcm9taXNlCisvLyB7c3VjY2Vzc30gLSBvcHRpb25hbCAtIGEg
Y2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUKKy8vICAgICAg
ICAgICAgIHJlc29sdmluZyBwcm9taXNlLgorLy8gIHtmYWlsfSAtICAgb3B0aW9uYWwgLSBhIGNh
bGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlCisvLyAgICAgICAg
ICAgICByZWplY3RpbmcgcHJvbWlzZS4gSWYgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgYnV0IG5v
IHtmYWlsfQorLy8gICAgICAgICAgICAgY2FsbGJhY2sgaXMgc2V0LCB0aGUgZXJyb3IgaXMgcHJv
cGFnYXRlZCBvdXQgb2YgdGhlIHByb21pc2UKKy8vICAgICAgICAgICAgIGNoYWluLgordmFyIGFz
c2VydFByb21pc2VSZXN1bHQ7CisKK3ZhciBwcm9taXNlVGVzdENoYWluOwordmFyIHByb21pc2VU
ZXN0Q291bnQgPSAwOworCisvLyBUaGVzZSBiaXRzIG11c3QgYmUgaW4gc3luYyB3aXRoIGJpdHMg
ZGVmaW5lZCBpbiBSdW50aW1lX0dldE9wdGltaXphdGlvblN0YXR1cwordmFyIFY4T3B0aW1pemF0
aW9uU3RhdHVzID0geworICBrSXNGdW5jdGlvbjogMSA8PCAwLAorICBrTmV2ZXJPcHRpbWl6ZTog
MSA8PCAxLAorICBrQWx3YXlzT3B0aW1pemU6IDEgPDwgMiwKKyAga01heWJlRGVvcHRlZDogMSA8
PCAzLAorICBrT3B0aW1pemVkOiAxIDw8IDQsCisgIGtUdXJib0Zhbm5lZDogMSA8PCA1LAorICBr
SW50ZXJwcmV0ZWQ6IDEgPDwgNiwKKyAga01hcmtlZEZvck9wdGltaXphdGlvbjogMSA8PCA3LAor
ICBrTWFya2VkRm9yQ29uY3VycmVudE9wdGltaXphdGlvbjogMSA8PCA4LAorICBrT3B0aW1pemlu
Z0NvbmN1cnJlbnRseTogMSA8PCA5LAorICBrSXNFeGVjdXRpbmc6IDEgPDwgMTAsCisgIGtUb3Bt
b3N0RnJhbWVJc1R1cmJvRmFubmVkOiAxIDw8IDExLAorICBrTGl0ZU1vZGU6IDEgPDwgMTIsCisg
IGtNYXJrZWRGb3JEZW9wdGltaXphdGlvbjogMSA8PCAxMywKKyAga0Jhc2VsaW5lOiAxIDw8IDE0
LAorICBrVG9wbW9zdEZyYW1lSXNJbnRlcnByZXRlZDogMSA8PCAxNSwKKyAga1RvcG1vc3RGcmFt
ZUlzQmFzZWxpbmU6IDEgPDwgMTYsCit9OworCisvLyBSZXR1cm5zIHRydWUgaWYgLS1saXRlLW1v
ZGUgaXMgb24gYW5kIHdlIGNhbid0IGV2ZXIgdHVybiBvbiBvcHRpbWl6YXRpb24uCit2YXIgaXNO
ZXZlck9wdGltaXplTGl0ZU1vZGU7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiAtLW5vLW9wdCBtb2Rl
IGlzIG9uLgordmFyIGlzTmV2ZXJPcHRpbWl6ZTsKKworLy8gUmV0dXJucyB0cnVlIGlmIC0tYWx3
YXlzLW9wdCBtb2RlIGlzIG9uLgordmFyIGlzQWx3YXlzT3B0aW1pemU7CisKKy8vIFJldHVybnMg
dHJ1ZSBpZiBnaXZlbiBmdW5jdGlvbiBpbiBpbnRlcnByZXRlZC4KK3ZhciBpc0ludGVycHJldGVk
OworCisvLyBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24gaW4gYmFzZWxpbmUuCit2YXIg
aXNCYXNlbGluZTsKKworLy8gUmV0dXJucyB0cnVlIGlmIGdpdmVuIGZ1bmN0aW9uIGluIHVub3B0
aW1pemVkIChpbnRlcnByZXRlZCBvciBiYXNlbGluZSkuCit2YXIgaXNVbm9wdGltaXplZDsKKwor
Ly8gUmV0dXJucyB0cnVlIGlmIGdpdmVuIGZ1bmN0aW9uIGlzIG9wdGltaXplZC4KK3ZhciBpc09w
dGltaXplZDsKKworLy8gUmV0dXJucyB0cnVlIGlmIGdpdmVuIGZ1bmN0aW9uIGlzIGNvbXBpbGVk
IGJ5IFR1cmJvRmFuLgordmFyIGlzVHVyYm9GYW5uZWQ7CisKKy8vIE1vbmtleS1wYXRjaGFibGUg
YWxsLXB1cnBvc2UgZmFpbHVyZSBoYW5kbGVyLgordmFyIGZhaWxXaXRoTWVzc2FnZTsKKworLy8g
UmV0dXJucyB0aGUgZm9ybWF0dGVkIGZhaWx1cmUgdGV4dC4gIFVzZWQgYnkgdGVzdC1hc3luYy5q
cy4KK3ZhciBmb3JtYXRGYWlsdXJlVGV4dDsKKworLy8gUmV0dXJucyBhIHByZXR0eS1wcmludGVk
IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFzc2VkIHZhbHVlLgordmFyIHByZXR0eVBy
aW50ZWQ7CisKKyhmdW5jdGlvbiAoKSB7ICAvLyBTY29wZSBmb3IgdXRpbGl0eSBmdW5jdGlvbnMu
CisKKyAgdmFyIE9iamVjdFByb3RvdHlwZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0
cmluZzsKKyAgdmFyIE51bWJlclByb3RvdHlwZVZhbHVlT2YgPSBOdW1iZXIucHJvdG90eXBlLnZh
bHVlT2Y7CisgIHZhciBCb29sZWFuUHJvdG90eXBlVmFsdWVPZiA9IEJvb2xlYW4ucHJvdG90eXBl
LnZhbHVlT2Y7CisgIHZhciBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mID0gU3RyaW5nLnByb3RvdHlw
ZS52YWx1ZU9mOworICB2YXIgRGF0ZVByb3RvdHlwZVZhbHVlT2YgPSBEYXRlLnByb3RvdHlwZS52
YWx1ZU9mOworICB2YXIgUmVnRXhwUHJvdG90eXBlVG9TdHJpbmcgPSBSZWdFeHAucHJvdG90eXBl
LnRvU3RyaW5nOworICB2YXIgQXJyYXlQcm90b3R5cGVGb3JFYWNoID0gQXJyYXkucHJvdG90eXBl
LmZvckVhY2g7CisgIHZhciBBcnJheVByb3RvdHlwZUpvaW4gPSBBcnJheS5wcm90b3R5cGUuam9p
bjsKKyAgdmFyIEFycmF5UHJvdG90eXBlTWFwID0gQXJyYXkucHJvdG90eXBlLm1hcDsKKyAgdmFy
IEFycmF5UHJvdG90eXBlUHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoOworICB2YXIgSlNPTlN0
cmluZ2lmeSA9IEpTT04uc3RyaW5naWZ5OworCisgIHZhciBCaWdJbnRQcm90b3R5cGVWYWx1ZU9m
OworICAvLyBUT0RPKG5laXMpOiBSZW1vdmUgdHJ5LWNhdGNoIG9uY2UgQmlnSW50cyBhcmUgZW5h
YmxlZCBieSBkZWZhdWx0LgorICB0cnkgeworICAgIEJpZ0ludFByb3RvdHlwZVZhbHVlT2YgPSBC
aWdJbnQucHJvdG90eXBlLnZhbHVlT2Y7CisgIH0gY2F0Y2ggKGUpIHt9CisKKyAgZnVuY3Rpb24g
Y2xhc3NPZihvYmplY3QpIHsKKyAgICAvLyBBcmd1bWVudCBtdXN0IG5vdCBiZSBudWxsIG9yIHVu
ZGVmaW5lZC4KKyAgICB2YXIgc3RyaW5nID0gT2JqZWN0UHJvdG90eXBlVG9TdHJpbmcuY2FsbChv
YmplY3QpOworICAgIC8vIFN0cmluZyBoYXMgZm9ybWF0IFtvYmplY3QgPENsYXNzTmFtZT5dLgor
ICAgIHJldHVybiBzdHJpbmcuc3Vic3RyaW5nKDgsIHN0cmluZy5sZW5ndGggLSAxKTsKKyAgfQor
CisKKyAgZnVuY3Rpb24gVmFsdWVPZih2YWx1ZSkgeworICAgIHN3aXRjaCAoY2xhc3NPZih2YWx1
ZSkpIHsKKyAgICAgIGNhc2UgIk51bWJlciI6CisgICAgICAgIHJldHVybiBOdW1iZXJQcm90b3R5
cGVWYWx1ZU9mLmNhbGwodmFsdWUpOworICAgICAgY2FzZSAiQmlnSW50IjoKKyAgICAgICAgcmV0
dXJuIEJpZ0ludFByb3RvdHlwZVZhbHVlT2YuY2FsbCh2YWx1ZSk7CisgICAgICBjYXNlICJTdHJp
bmciOgorICAgICAgICByZXR1cm4gU3RyaW5nUHJvdG90eXBlVmFsdWVPZi5jYWxsKHZhbHVlKTsK
KyAgICAgIGNhc2UgIkJvb2xlYW4iOgorICAgICAgICByZXR1cm4gQm9vbGVhblByb3RvdHlwZVZh
bHVlT2YuY2FsbCh2YWx1ZSk7CisgICAgICBjYXNlICJEYXRlIjoKKyAgICAgICAgcmV0dXJuIERh
dGVQcm90b3R5cGVWYWx1ZU9mLmNhbGwodmFsdWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIHZhbHVlOworICAgIH0KKyAgfQorCisKKyAgcHJldHR5UHJpbnRlZCA9IGZ1bmN0aW9u
IHByZXR0eVByaW50ZWQodmFsdWUpIHsKKyAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgeworICAg
ICAgY2FzZSAic3RyaW5nIjoKKyAgICAgICAgcmV0dXJuIEpTT05TdHJpbmdpZnkodmFsdWUpOwor
ICAgICAgY2FzZSAiYmlnaW50IjoKKyAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSkgKyAibiI7
CisgICAgICBjYXNlICJudW1iZXIiOgorICAgICAgICBpZiAodmFsdWUgPT09IDAgJiYgKDEgLyB2
YWx1ZSkgPCAwKSByZXR1cm4gIi0wIjsKKyAgICAgICAgLy8gRkFMTFRIUk9VR0guCisgICAgICBj
YXNlICJib29sZWFuIjoKKyAgICAgIGNhc2UgInVuZGVmaW5lZCI6CisgICAgICBjYXNlICJmdW5j
dGlvbiI6CisgICAgICBjYXNlICJzeW1ib2wiOgorICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVl
KTsKKyAgICAgIGNhc2UgIm9iamVjdCI6CisgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0
dXJuICJudWxsIjsKKyAgICAgICAgdmFyIG9iamVjdENsYXNzID0gY2xhc3NPZih2YWx1ZSk7Cisg
ICAgICAgIHN3aXRjaCAob2JqZWN0Q2xhc3MpIHsKKyAgICAgICAgICBjYXNlICJOdW1iZXIiOgor
ICAgICAgICAgIGNhc2UgIkJpZ0ludCI6CisgICAgICAgICAgY2FzZSAiU3RyaW5nIjoKKyAgICAg
ICAgICBjYXNlICJCb29sZWFuIjoKKyAgICAgICAgICBjYXNlICJEYXRlIjoKKyAgICAgICAgICAg
IHJldHVybiBvYmplY3RDbGFzcyArICIoIiArIHByZXR0eVByaW50ZWQoVmFsdWVPZih2YWx1ZSkp
ICsgIikiOworICAgICAgICAgIGNhc2UgIlJlZ0V4cCI6CisgICAgICAgICAgICByZXR1cm4gUmVn
RXhwUHJvdG90eXBlVG9TdHJpbmcuY2FsbCh2YWx1ZSk7CisgICAgICAgICAgY2FzZSAiQXJyYXki
OgorICAgICAgICAgICAgdmFyIG1hcHBlZCA9IEFycmF5UHJvdG90eXBlTWFwLmNhbGwoCisgICAg
ICAgICAgICAgICAgdmFsdWUsIHByZXR0eVByaW50ZWRBcnJheUVsZW1lbnQpOworICAgICAgICAg
ICAgdmFyIGpvaW5lZCA9IEFycmF5UHJvdG90eXBlSm9pbi5jYWxsKG1hcHBlZCwgIiwiKTsKKyAg
ICAgICAgICAgIHJldHVybiAiWyIgKyBqb2luZWQgKyAiXSI7CisgICAgICAgICAgY2FzZSAiVWlu
dDhBcnJheSI6CisgICAgICAgICAgY2FzZSAiSW50OEFycmF5IjoKKyAgICAgICAgICBjYXNlICJJ
bnQxNkFycmF5IjoKKyAgICAgICAgICBjYXNlICJVaW50MTZBcnJheSI6CisgICAgICAgICAgY2Fz
ZSAiVWludDMyQXJyYXkiOgorICAgICAgICAgIGNhc2UgIkludDMyQXJyYXkiOgorICAgICAgICAg
IGNhc2UgIkZsb2F0MzJBcnJheSI6CisgICAgICAgICAgY2FzZSAiRmxvYXQ2NEFycmF5IjoKKyAg
ICAgICAgICAgIHZhciBqb2luZWQgPSBBcnJheVByb3RvdHlwZUpvaW4uY2FsbCh2YWx1ZSwgIiwi
KTsKKyAgICAgICAgICAgIHJldHVybiBvYmplY3RDbGFzcyArICIoWyIgKyBqb2luZWQgKyAiXSki
OworICAgICAgICAgIGNhc2UgIk9iamVjdCI6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIG9iamVjdENsYXNzICsgIigiICsgU3RyaW5n
KHZhbHVlKSArICIpIjsKKyAgICAgICAgfQorICAgICAgICAvLyBjbGFzc09mKCkgcmV0dXJuZWQg
Ik9iamVjdCIuCisgICAgICAgIHZhciBuYW1lID0gdmFsdWUuY29uc3RydWN0b3IubmFtZTsKKyAg
ICAgICAgaWYgKG5hbWUpIHJldHVybiBuYW1lICsgIigpIjsKKyAgICAgICAgcmV0dXJuICJPYmpl
Y3QoKSI7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gIi0tIHVua25vd24gdmFsdWUg
LS0iOworICAgIH0KKyAgfQorCisKKyAgZnVuY3Rpb24gcHJldHR5UHJpbnRlZEFycmF5RWxlbWVu
dCh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7CisgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYg
IShpbmRleCBpbiBhcnJheSkpIHJldHVybiAiIjsKKyAgICByZXR1cm4gcHJldHR5UHJpbnRlZCh2
YWx1ZSk7CisgIH0KKworCisgIGZhaWxXaXRoTWVzc2FnZSA9IGZ1bmN0aW9uIGZhaWxXaXRoTWVz
c2FnZShtZXNzYWdlKSB7CisgICAgdGhyb3cgbmV3IE1qc1VuaXRBc3NlcnRpb25FcnJvcihtZXNz
YWdlKTsKKyAgfQorCisgIGZvcm1hdEZhaWx1cmVUZXh0ID0gZnVuY3Rpb24oZXhwZWN0ZWRUZXh0
LCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgICB2YXIgbWVzc2FnZSA9ICJGYWlsIiArICJ1cmUiOwor
ICAgIGlmIChuYW1lX29wdCkgeworICAgICAgLy8gRml4IHRoaXMgd2hlbiB3ZSBkaXRjaCB0aGUg
b2xkIHRlc3QgcnVubmVyLgorICAgICAgbWVzc2FnZSArPSAiICgiICsgbmFtZV9vcHQgKyAiKSI7
CisgICAgfQorCisgICAgdmFyIGZvdW5kVGV4dCA9IHByZXR0eVByaW50ZWQoZm91bmQpOworICAg
IGlmIChleHBlY3RlZFRleHQubGVuZ3RoIDw9IDQwICYmIGZvdW5kVGV4dC5sZW5ndGggPD0gNDAp
IHsKKyAgICAgIG1lc3NhZ2UgKz0gIjogZXhwZWN0ZWQgPCIgKyBleHBlY3RlZFRleHQgKyAiPiBm
b3VuZCA8IiArIGZvdW5kVGV4dCArICI+IjsKKyAgICB9IGVsc2UgeworICAgICAgbWVzc2FnZSAr
PSAiOlxuZXhwZWN0ZWQ6XG4iICsgZXhwZWN0ZWRUZXh0ICsgIlxuZm91bmQ6XG4iICsgZm91bmRU
ZXh0OworICAgIH0KKyAgICByZXR1cm4gbWVzc2FnZTsKKyAgfQorCisgIGZ1bmN0aW9uIGZhaWwo
ZXhwZWN0ZWRUZXh0LCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgICByZXR1cm4gZmFpbFdpdGhNZXNz
YWdlKGZvcm1hdEZhaWx1cmVUZXh0KGV4cGVjdGVkVGV4dCwgZm91bmQsIG5hbWVfb3B0KSk7Cisg
IH0KKworCisgIGZ1bmN0aW9uIGRlZXBPYmplY3RFcXVhbHMoYSwgYikgeworICAgIHZhciBhUHJv
cHMgPSBPYmplY3Qua2V5cyhhKTsKKyAgICBhUHJvcHMuc29ydCgpOworICAgIHZhciBiUHJvcHMg
PSBPYmplY3Qua2V5cyhiKTsKKyAgICBiUHJvcHMuc29ydCgpOworICAgIGlmICghZGVlcEVxdWFs
cyhhUHJvcHMsIGJQcm9wcykpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBhUHJvcHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmICghZGVlcEVx
dWFscyhhW2FQcm9wc1tpXV0sIGJbYVByb3BzW2ldXSkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisKKyAgZGVlcEVxdWFs
cyA9IGZ1bmN0aW9uIGRlZXBFcXVhbHMoYSwgYikgeworICAgIGlmIChhID09PSBiKSB7CisgICAg
ICAvLyBDaGVjayBmb3IgLTAuCisgICAgICBpZiAoYSA9PT0gMCkgcmV0dXJuICgxIC8gYSkgPT09
ICgxIC8gYik7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHR5cGVvZiBhICE9
PSB0eXBlb2YgYikgcmV0dXJuIGZhbHNlOworICAgIGlmICh0eXBlb2YgYSA9PT0gIm51bWJlciIp
IHJldHVybiBpc05hTihhKSAmJiBpc05hTihiKTsKKyAgICBpZiAodHlwZW9mIGEgIT09ICJvYmpl
Y3QiICYmIHR5cGVvZiBhICE9PSAiZnVuY3Rpb24iKSByZXR1cm4gZmFsc2U7CisgICAgLy8gTmVp
dGhlciBhIG5vciBiIGlzIHByaW1pdGl2ZS4KKyAgICB2YXIgb2JqZWN0Q2xhc3MgPSBjbGFzc09m
KGEpOworICAgIGlmIChvYmplY3RDbGFzcyAhPT0gY2xhc3NPZihiKSkgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChvYmplY3RDbGFzcyA9PT0gIlJlZ0V4cCIpIHsKKyAgICAgIC8vIEZvciBSZWdFeHAs
IGp1c3QgY29tcGFyZSBwYXR0ZXJuIGFuZCBmbGFncyB1c2luZyBpdHMgdG9TdHJpbmcuCisgICAg
ICByZXR1cm4gUmVnRXhwUHJvdG90eXBlVG9TdHJpbmcuY2FsbChhKSA9PT0KKyAgICAgICAgICAg
ICBSZWdFeHBQcm90b3R5cGVUb1N0cmluZy5jYWxsKGIpOworICAgIH0KKyAgICAvLyBGdW5jdGlv
bnMgYXJlIG9ubHkgaWRlbnRpY2FsIHRvIHRoZW1zZWx2ZXMuCisgICAgaWYgKG9iamVjdENsYXNz
ID09PSAiRnVuY3Rpb24iKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdENsYXNzID09PSAi
QXJyYXkiKSB7CisgICAgICB2YXIgZWxlbWVudENvdW50ID0gMDsKKyAgICAgIGlmIChhLmxlbmd0
aCAhPT0gYi5sZW5ndGgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmICghZGVlcEVx
dWFscyhhW2ldLCBiW2ldKSkgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGlmIChvYmplY3RDbGFzcyA9PT0gIlN0cmluZyIgfHwgb2JqZWN0Q2xh
c3MgPT09ICJOdW1iZXIiIHx8CisgICAgICBvYmplY3RDbGFzcyA9PT0gIkJpZ0ludCIgfHwgb2Jq
ZWN0Q2xhc3MgPT09ICJCb29sZWFuIiB8fAorICAgICAgb2JqZWN0Q2xhc3MgPT09ICJEYXRlIikg
eworICAgICAgaWYgKFZhbHVlT2YoYSkgIT09IFZhbHVlT2YoYikpIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIGRlZXBPYmplY3RFcXVhbHMoYSwgYik7CisgIH0KKworICBhc3NlcnRT
YW1lID0gZnVuY3Rpb24gYXNzZXJ0U2FtZShleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7Cisg
ICAgaWYgKE9iamVjdC5pcyhleHBlY3RlZCwgZm91bmQpKSByZXR1cm47CisgICAgZmFpbChwcmV0
dHlQcmludGVkKGV4cGVjdGVkKSwgZm91bmQsIG5hbWVfb3B0KTsKKyAgfTsKKworICBhc3NlcnRO
b3RTYW1lID0gZnVuY3Rpb24gYXNzZXJ0Tm90U2FtZShleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0
KSB7CisgICAgaWYgKCFPYmplY3QuaXMoZXhwZWN0ZWQsIGZvdW5kKSkgcmV0dXJuOworICAgIGZh
aWwoIm5vdCBzYW1lIGFzICIgKyBwcmV0dHlQcmludGVkKGV4cGVjdGVkKSwgZm91bmQsIG5hbWVf
b3B0KTsKKyAgfQorCisgIGFzc2VydEVxdWFscyA9IGZ1bmN0aW9uIGFzc2VydEVxdWFscyhleHBl
Y3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAgaWYgKCFkZWVwRXF1YWxzKGZvdW5kLCBleHBl
Y3RlZCkpIHsKKyAgICAgIGZhaWwocHJldHR5UHJpbnRlZChleHBlY3RlZCksIGZvdW5kLCBuYW1l
X29wdCk7CisgICAgfQorICB9OworCisgIGFzc2VydE5vdEVxdWFscyA9IGZ1bmN0aW9uIGFzc2Vy
dE5vdEVxdWFscyhleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAgaWYgKGRlZXBFcXVh
bHMoZm91bmQsIGV4cGVjdGVkKSkgeworICAgICAgZmFpbCgibm90IGVxdWFscyB0byAiICsgcHJl
dHR5UHJpbnRlZChleHBlY3RlZCksIGZvdW5kLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisK
KyAgYXNzZXJ0RXF1YWxzRGVsdGEgPQorICAgICAgZnVuY3Rpb24gYXNzZXJ0RXF1YWxzRGVsdGEo
ZXhwZWN0ZWQsIGZvdW5kLCBkZWx0YSwgbmFtZV9vcHQpIHsKKyAgICBpZiAoTWF0aC5hYnMoZXhw
ZWN0ZWQgLSBmb3VuZCkgPiBkZWx0YSkgeworICAgICAgZmFpbChwcmV0dHlQcmludGVkKGV4cGVj
dGVkKSArICIgKy0gIiArIHByZXR0eVByaW50ZWQoZGVsdGEpLCBmb3VuZCwgbmFtZV9vcHQpOwor
ICAgIH0KKyAgfTsKKworCisgIGFzc2VydEFycmF5RXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0QXJy
YXlFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCkgeworICAgIHZhciBzdGFydCA9ICIi
OworICAgIGlmIChuYW1lX29wdCkgeworICAgICAgc3RhcnQgPSBuYW1lX29wdCArICIgLSAiOwor
ICAgIH0KKyAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQubGVuZ3RoLCBmb3VuZC5sZW5ndGgsIHN0
YXJ0ICsgImFycmF5IGxlbmd0aCIpOworICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IGZvdW5k
Lmxlbmd0aCkgeworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZC5sZW5ndGg7ICsr
aSkgeworICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRbaV0sIGZvdW5kW2ldLAorICAgICAg
ICAgICAgICAgICAgICAgc3RhcnQgKyAiYXJyYXkgZWxlbWVudCBhdCBpbmRleCAiICsgaSk7Cisg
ICAgICB9CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0UHJvcGVydGllc0VxdWFsID0gZnVuY3Rp
b24gYXNzZXJ0UHJvcGVydGllc0VxdWFsKGV4cGVjdGVkLCBmb3VuZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfb3B0KSB7Cisg
ICAgLy8gQ2hlY2sgcHJvcGVydGllcyBvbmx5LgorICAgIGlmICghZGVlcE9iamVjdEVxdWFscyhl
eHBlY3RlZCwgZm91bmQpKSB7CisgICAgICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQp
OworICAgIH0KKyAgfTsKKworCisgIGFzc2VydFRvU3RyaW5nRXF1YWxzID0gZnVuY3Rpb24gYXNz
ZXJ0VG9TdHJpbmdFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfb3B0KSB7CisgICAgaWYgKGV4
cGVjdGVkICE9PSBTdHJpbmcoZm91bmQpKSB7CisgICAgICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwg
bmFtZV9vcHQpOworICAgIH0KKyAgfTsKKworCisgIGFzc2VydFRydWUgPSBmdW5jdGlvbiBhc3Nl
cnRUcnVlKHZhbHVlLCBuYW1lX29wdCkgeworICAgIGFzc2VydEVxdWFscyh0cnVlLCB2YWx1ZSwg
bmFtZV9vcHQpOworICB9OworCisKKyAgYXNzZXJ0RmFsc2UgPSBmdW5jdGlvbiBhc3NlcnRGYWxz
ZSh2YWx1ZSwgbmFtZV9vcHQpIHsKKyAgICBhc3NlcnRFcXVhbHMoZmFsc2UsIHZhbHVlLCBuYW1l
X29wdCk7CisgIH07CisKKworICBhc3NlcnROdWxsID0gZnVuY3Rpb24gYXNzZXJ0TnVsbCh2YWx1
ZSwgbmFtZV9vcHQpIHsKKyAgICBpZiAodmFsdWUgIT09IG51bGwpIHsKKyAgICAgIGZhaWwoIm51
bGwiLCB2YWx1ZSwgbmFtZV9vcHQpOworICAgIH0KKyAgfTsKKworCisgIGFzc2VydE5vdE51bGwg
PSBmdW5jdGlvbiBhc3NlcnROb3ROdWxsKHZhbHVlLCBuYW1lX29wdCkgeworICAgIGlmICh2YWx1
ZSA9PT0gbnVsbCkgeworICAgICAgZmFpbCgibm90IG51bGwiLCB2YWx1ZSwgbmFtZV9vcHQpOwor
ICAgIH0KKyAgfTsKKworICBmdW5jdGlvbiBleGVjdXRlQ29kZShjb2RlKSB7CisgICAgaWYgKHR5
cGVvZiBjb2RlID09PSAnZnVuY3Rpb24nKSAgcmV0dXJuIGNvZGUoKTsKKyAgICBpZiAodHlwZW9m
IGNvZGUgPT09ICdzdHJpbmcnKSByZXR1cm4gZXZhbChjb2RlKTsKKyAgICBmYWlsV2l0aE1lc3Nh
Z2UoCisgICAgICAgICdHaXZlbiBjb2RlIGlzIG5laXRoZXIgZnVuY3Rpb24gbm9yIHN0cmluZywg
YnV0ICcgKyAodHlwZW9mIGNvZGUpICsKKyAgICAgICAgJzogPCcgKyBwcmV0dHlQcmludGVkKGNv
ZGUpICsgJz4nKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNoZWNrRXhjZXB0aW9uKGUsIHR5cGVfb3B0
LCBjYXVzZV9vcHQpIHsKKyAgICBpZiAodHlwZV9vcHQgIT09IHVuZGVmaW5lZCkgeworICAgICAg
YXNzZXJ0RXF1YWxzKCdmdW5jdGlvbicsIHR5cGVvZiB0eXBlX29wdCk7CisgICAgICBhc3NlcnRJ
bnN0YW5jZW9mKGUsIHR5cGVfb3B0KTsKKyAgICB9CisgICAgaWYgKFJlZ0V4cCAhPT0gdW5kZWZp
bmVkICYmIGNhdXNlX29wdCBpbnN0YW5jZW9mIFJlZ0V4cCkgeworICAgICAgYXNzZXJ0TWF0Y2hl
cyhjYXVzZV9vcHQsIGUubWVzc2FnZSwgJ0Vycm9yIG1lc3NhZ2UnKTsKKyAgICB9IGVsc2UgaWYg
KGNhdXNlX29wdCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBhc3NlcnRFcXVhbHMoY2F1c2Vfb3B0
LCBlLm1lc3NhZ2UsICdFcnJvciBtZXNzYWdlJyk7CisgICAgfQorICB9CisKKyAgYXNzZXJ0VGhy
b3dzID0gZnVuY3Rpb24gYXNzZXJ0VGhyb3dzKGNvZGUsIHR5cGVfb3B0LCBjYXVzZV9vcHQpIHsK
KyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdHlwZV9vcHQgPT09IHVuZGVmaW5lZCkg
eworICAgICAgZmFpbFdpdGhNZXNzYWdlKCdpbnZhbGlkIHVzZSBvZiBhc3NlcnRUaHJvd3MsIHVu
a25vd24gdHlwZV9vcHQgZ2l2ZW4nKTsKKyAgICB9CisgICAgaWYgKHR5cGVfb3B0ICE9PSB1bmRl
ZmluZWQgJiYgdHlwZW9mIHR5cGVfb3B0ICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICBmYWlsV2l0
aE1lc3NhZ2UoCisgICAgICAgICAgJ2ludmFsaWQgdXNlIG9mIGFzc2VydFRocm93cywgbWF5YmUg
eW91IHdhbnQgYXNzZXJ0VGhyb3dzRXF1YWxzJyk7CisgICAgfQorICAgIHRyeSB7CisgICAgICBl
eGVjdXRlQ29kZShjb2RlKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBjaGVja0V4Y2VwdGlv
bihlLCB0eXBlX29wdCwgY2F1c2Vfb3B0KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgbGV0
IG1zZyA9ICdEaWQgbm90IHRocm93IGV4Y2VwdGlvbic7CisgICAgaWYgKHR5cGVfb3B0ICE9PSB1
bmRlZmluZWQgJiYgdHlwZV9vcHQubmFtZSAhPT0gdW5kZWZpbmVkKQorICAgICAgbXNnICs9ICcs
IGV4cGVjdGVkICcgKyB0eXBlX29wdC5uYW1lOworICAgIGZhaWxXaXRoTWVzc2FnZShtc2cpOwor
ICB9OworCisgIGFzc2VydFRocm93c0VxdWFscyA9IGZ1bmN0aW9uIGFzc2VydFRocm93c0VxdWFs
cyhmdW4sIHZhbCkgeworICAgIHRyeSB7CisgICAgICBmdW4oKTsKKyAgICB9IGNhdGNoIChlKSB7
CisgICAgICBhc3NlcnRTYW1lKHZhbCwgZSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZh
aWxXaXRoTWVzc2FnZSgnRGlkIG5vdCB0aHJvdyBleGNlcHRpb24sIGV4cGVjdGVkICcgKyBwcmV0
dHlQcmludGVkKHZhbCkpOworICB9OworCisgIGFzc2VydFRocm93c0FzeW5jID0gZnVuY3Rpb24g
YXNzZXJ0VGhyb3dzQXN5bmMocHJvbWlzZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkgeworICAgIGlm
IChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlX29wdCA9PT0gdW5kZWZpbmVkKSB7CisgICAg
ICBmYWlsV2l0aE1lc3NhZ2UoJ2ludmFsaWQgdXNlIG9mIGFzc2VydFRocm93cywgdW5rbm93biB0
eXBlX29wdCBnaXZlbicpOworICAgIH0KKyAgICBpZiAodHlwZV9vcHQgIT09IHVuZGVmaW5lZCAm
JiB0eXBlb2YgdHlwZV9vcHQgIT09ICdmdW5jdGlvbicpIHsKKyAgICAgIGZhaWxXaXRoTWVzc2Fn
ZSgKKyAgICAgICAgICAnaW52YWxpZCB1c2Ugb2YgYXNzZXJ0VGhyb3dzLCBtYXliZSB5b3Ugd2Fu
dCBhc3NlcnRUaHJvd3NFcXVhbHMnKTsKKyAgICB9CisgICAgbGV0IG1zZyA9ICdQcm9taXNlIGRp
ZCBub3QgdGhyb3cgZXhjZXB0aW9uJzsKKyAgICBpZiAodHlwZV9vcHQgIT09IHVuZGVmaW5lZCAm
JiB0eXBlX29wdC5uYW1lICE9PSB1bmRlZmluZWQpCisgICAgICBtc2cgKz0gJywgZXhwZWN0ZWQg
JyArIHR5cGVfb3B0Lm5hbWU7CisgICAgcmV0dXJuIGFzc2VydFByb21pc2VSZXN1bHQoCisgICAg
ICAgIHByb21pc2UsCisgICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIHRocm93IHRoZSBlcnJv
ciBhZ2FpbiB0byBnZXQgb3V0IG9mIHRoZSBwcm9taXNlCisgICAgICAgIC8vIGNoYWluLgorICAg
ICAgICByZXMgPT4gc2V0VGltZW91dChfID0+IGZhaWwoJzx0aHJvdz4nLCByZXMsIG1zZyksIDAp
LAorICAgICAgICBlID0+IGNoZWNrRXhjZXB0aW9uKGUsIHR5cGVfb3B0LCBjYXVzZV9vcHQpKTsK
KyAgfTsKKworICBhc3NlcnRJbnN0YW5jZW9mID0gZnVuY3Rpb24gYXNzZXJ0SW5zdGFuY2VvZihv
YmosIHR5cGUpIHsKKyAgICBpZiAoIShvYmogaW5zdGFuY2VvZiB0eXBlKSkgeworICAgICAgdmFy
IGFjdHVhbFR5cGVOYW1lID0gbnVsbDsKKyAgICAgIHZhciBhY3R1YWxDb25zdHJ1Y3RvciA9IG9i
aiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKS5jb25zdHJ1Y3RvcjsKKyAgICAgIGlmICh0
eXBlb2YgYWN0dWFsQ29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgYWN0dWFs
VHlwZU5hbWUgPSBhY3R1YWxDb25zdHJ1Y3Rvci5uYW1lIHx8IFN0cmluZyhhY3R1YWxDb25zdHJ1
Y3Rvcik7CisgICAgICB9CisgICAgICBmYWlsV2l0aE1lc3NhZ2UoCisgICAgICAgICAgJ09iamVj
dCA8JyArIHByZXR0eVByaW50ZWQob2JqKSArICc+IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiA8JyAr
CisgICAgICAgICAgKHR5cGUubmFtZSB8fCB0eXBlKSArICc+JyArCisgICAgICAgICAgKGFjdHVh
bFR5cGVOYW1lID8gJyBidXQgb2YgPCcgKyBhY3R1YWxUeXBlTmFtZSArICc+JyA6ICcnKSk7Cisg
ICAgfQorICB9OworCisgIGFzc2VydERvZXNOb3RUaHJvdyA9IGZ1bmN0aW9uIGFzc2VydERvZXNO
b3RUaHJvdyhjb2RlLCBuYW1lX29wdCkgeworICAgIHRyeSB7CisgICAgICBleGVjdXRlQ29kZShj
b2RlKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBpZiAoZSBpbnN0YW5jZW9mIE1qc1VuaXRB
c3NlcnRpb25FcnJvcikgdGhyb3cgZTsKKyAgICAgIGZhaWxXaXRoTWVzc2FnZSgidGhyZXcgYW4g
ZXhjZXB0aW9uOiAiICsgKGUubWVzc2FnZSB8fCBlKSk7CisgICAgfQorICB9OworCisgIGFzc2Vy
dFVucmVhY2hhYmxlID0gZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUobmFtZV9vcHQpIHsKKyAg
ICAvLyBGaXggdGhpcyB3aGVuIHdlIGRpdGNoIHRoZSBvbGQgdGVzdCBydW5uZXIuCisgICAgdmFy
IG1lc3NhZ2UgPSAiRmFpbCIgKyAidXJlOiB1bnJlYWNoYWJsZSI7CisgICAgaWYgKG5hbWVfb3B0
KSB7CisgICAgICBtZXNzYWdlICs9ICIgLSAiICsgbmFtZV9vcHQ7CisgICAgfQorICAgIGZhaWxX
aXRoTWVzc2FnZShtZXNzYWdlKTsKKyAgfTsKKworICBhc3NlcnRDb250YWlucyA9IGZ1bmN0aW9u
KHN1YiwgdmFsdWUsIG5hbWVfb3B0KSB7CisgICAgaWYgKHZhbHVlID09IG51bGwgPyAoc3ViICE9
IG51bGwpIDogdmFsdWUuaW5kZXhPZihzdWIpID09IC0xKSB7CisgICAgICBmYWlsKCJjb250YWlu
cyAnIiArIFN0cmluZyhzdWIpICsgIiciLCB2YWx1ZSwgbmFtZV9vcHQpOworICAgIH0KKyAgfTsK
KworICBhc3NlcnRNYXRjaGVzID0gZnVuY3Rpb24ocmVnZXhwLCBzdHIsIG5hbWVfb3B0KSB7Cisg
ICAgaWYgKCEocmVnZXhwIGluc3RhbmNlb2YgUmVnRXhwKSkgeworICAgICAgcmVnZXhwID0gbmV3
IFJlZ0V4cChyZWdleHApOworICAgIH0KKyAgICBpZiAoIXN0ci5tYXRjaChyZWdleHApKSB7Cisg
ICAgICBmYWlsKCJzaG91bGQgbWF0Y2ggJyIgKyByZWdleHAgKyAiJyIsIHN0ciwgbmFtZV9vcHQp
OworICAgIH0KKyAgfTsKKworICBmdW5jdGlvbiBjb25jYXRlbmF0ZUVycm9ycyhzdGFjaywgZXhj
ZXB0aW9uKSB7CisgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiBkb2VzIG5vdCBjb250YWluIGEgc3Rh
Y2sgdHJhY2UsIHdyYXAgaXQgaW4gYSBuZXcgRXJyb3IuCisgICAgaWYgKCFleGNlcHRpb24uc3Rh
Y2spIGV4Y2VwdGlvbiA9IG5ldyBFcnJvcihleGNlcHRpb24pOworCisgICAgLy8gSWYgdGhlIGV4
Y2VwdGlvbiBhbHJlYWR5IHByb3ZpZGVzIGEgc3BlY2lhbCBzdGFjayB0cmFjZSwgd2UgZG8gbm90
IG1vZGlmeQorICAgIC8vIGl0LgorICAgIGlmICh0eXBlb2YgZXhjZXB0aW9uLnN0YWNrICE9PSAn
c3RyaW5nJykgeworICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgICB9CisgICAgZXhjZXB0aW9u
LnN0YWNrID0gc3RhY2sgKyAnXG5cbicgKyBleGNlcHRpb24uc3RhY2s7CisgICAgcmV0dXJuIGV4
Y2VwdGlvbjsKKyAgfQorCisgIGFzc2VydFByb21pc2VSZXN1bHQgPSBmdW5jdGlvbihwcm9taXNl
LCBzdWNjZXNzLCBmYWlsKSB7CisgICAgaWYgKHN1Y2Nlc3MgIT09IHVuZGVmaW5lZCkgYXNzZXJ0
RXF1YWxzKCdmdW5jdGlvbicsIHR5cGVvZiBzdWNjZXNzKTsKKyAgICBpZiAoZmFpbCAhPT0gdW5k
ZWZpbmVkKSBhc3NlcnRFcXVhbHMoJ2Z1bmN0aW9uJywgdHlwZW9mIGZhaWwpOworICAgIGFzc2Vy
dEluc3RhbmNlb2YocHJvbWlzZSwgUHJvbWlzZSk7CisgICAgY29uc3Qgc3RhY2sgPSAobmV3IEVy
cm9yKCkpLnN0YWNrOworCisgICAgdmFyIHRlc3RfcHJvbWlzZSA9IHByb21pc2UudGhlbigKKyAg
ICAgICAgcmVzdWx0ID0+IHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKC0tcHJv
bWlzZVRlc3RDb3VudCA9PSAwKSB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAg
IGlmIChzdWNjZXNzICE9PSB1bmRlZmluZWQpIHN1Y2Nlc3MocmVzdWx0KTsKKyAgICAgICAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgICAgICAvLyBVc2Ugc2V0VGltZW91dCB0byB0aHJvdyB0aGUg
ZXJyb3IgYWdhaW4gdG8gZ2V0IG91dCBvZiB0aGUgcHJvbWlzZQorICAgICAgICAgICAgLy8gY2hh
aW4uCisgICAgICAgICAgICBzZXRUaW1lb3V0KF8gPT4geworICAgICAgICAgICAgICB0aHJvdyBj
b25jYXRlbmF0ZUVycm9ycyhzdGFjaywgZSk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAg
ICB9CisgICAgICAgIH0sCisgICAgICAgIHJlc3VsdCA9PiB7CisgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgIGlmICgtLXByb21pc2VUZXN0Q291bnQgPT0gMCkgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7CisgICAgICAgICAgICBpZiAoZmFpbCA9PT0gdW5kZWZpbmVkKSB0aHJvdyByZXN1bHQ7
CisgICAgICAgICAgICBmYWlsKHJlc3VsdCk7CisgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gdGhyb3cgdGhlIGVycm9yIGFnYWluIHRvIGdl
dCBvdXQgb2YgdGhlIHByb21pc2UKKyAgICAgICAgICAgIC8vIGNoYWluLgorICAgICAgICAgICAg
c2V0VGltZW91dChfID0+IHsKKyAgICAgICAgICAgICAgdGhyb3cgY29uY2F0ZW5hdGVFcnJvcnMo
c3RhY2ssIGUpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgfQorICAgICAgICB9KTsK
KworICAgIGlmICghcHJvbWlzZVRlc3RDaGFpbikgcHJvbWlzZVRlc3RDaGFpbiA9IFByb21pc2Uu
cmVzb2x2ZSgpOworICAgIC8vIHdhaXRVbnRpbERvbmUgaXMgaWRlbXBvdGVudC4KKyAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICArK3Byb21pc2VUZXN0Q291bnQ7CisgICAgcmV0
dXJuIHByb21pc2VUZXN0Q2hhaW4udGhlbih0ZXN0X3Byb21pc2UpOworICB9OworCisgIHZhciBP
cHRpbWl6YXRpb25TdGF0dXNJbXBsID0gdW5kZWZpbmVkOworCisgIHZhciBPcHRpbWl6YXRpb25T
dGF0dXMgPSBmdW5jdGlvbihmdW4pIHsKKyAgICBpZiAoT3B0aW1pemF0aW9uU3RhdHVzSW1wbCA9
PT0gdW5kZWZpbmVkKSB7CisgICAgICB0cnkgeworICAgICAgICBPcHRpbWl6YXRpb25TdGF0dXNJ
bXBsID0gbmV3IEZ1bmN0aW9uKAorICAgICAgICAgICAgImZ1biIsICJyZXR1cm4gJUdldE9wdGlt
aXphdGlvblN0YXR1cyhmdW4pOyIpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIm5hdGl2ZXMgc3ludGF4IG5vdCBhbGxvd2VkIik7CisgICAgICB9CisgICAg
fQorICAgIHJldHVybiBPcHRpbWl6YXRpb25TdGF0dXNJbXBsKGZ1bik7CisgIH0KKworICBhc3Nl
cnRVbm9wdGltaXplZCA9IGZ1bmN0aW9uIGFzc2VydFVub3B0aW1pemVkKAorICAgICAgZnVuLCBu
YW1lX29wdCwgc2tpcF9pZl9tYXliZV9kZW9wdGVkID0gdHJ1ZSkgeworICAgIHZhciBvcHRfc3Rh
dHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKGZ1bik7CisgICAgLy8gVGVzdHMgdGhhdCB1c2UgYXNz
ZXJ0VW5vcHRpbWl6ZWQoKSBkbyBub3QgbWFrZSBzZW5zZSBpZiAtLWFsd2F5cy1vcHQKKyAgICAv
LyBvcHRpb24gaXMgcHJvdmlkZWQuIFN1Y2ggdGVzdHMgbXVzdCBhZGQgLS1uby1hbHdheXMtb3B0
IHRvIGZsYWdzIGNvbW1lbnQuCisgICAgYXNzZXJ0RmFsc2UoKG9wdF9zdGF0dXMgJiBWOE9wdGlt
aXphdGlvblN0YXR1cy5rQWx3YXlzT3B0aW1pemUpICE9PSAwLAorICAgICAgICAgICAgICAgICJ0
ZXN0IGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCAtLWFsd2F5cy1vcHQiKTsKKyAgICBhc3NlcnRU
cnVlKChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAw
LCBuYW1lX29wdCk7CisgICAgaWYgKHNraXBfaWZfbWF5YmVfZGVvcHRlZCAmJgorICAgICAgICAo
b3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtNYXliZURlb3B0ZWQpICE9PSAwKSB7
CisgICAgICAvLyBXaGVuIC0tZGVvcHQtZXZlcnktbi10aW1lcyBmbGFnIGlzIHNwZWNpZmllZCBp
dCdzIG5vIGxvbmdlciBndWFyYW50ZWVkCisgICAgICAvLyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rp
b24gaXMgc3RpbGwgZGVvcHRpbWl6ZWQsIHNvIGtlZXAgcnVubmluZyB0aGUgdGVzdAorICAgICAg
Ly8gdG8gc3RyZXNzIHRlc3QgdGhlIGRlb3B0aW1pemVyLgorICAgICAgcmV0dXJuOworICAgIH0K
KyAgICB2YXIgaXNfb3B0aW1pemVkID0gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1
cy5rT3B0aW1pemVkKSAhPT0gMDsKKyAgICBhc3NlcnRGYWxzZShpc19vcHRpbWl6ZWQsIG5hbWVf
b3B0KTsKKyAgfQorCisgIGFzc2VydE9wdGltaXplZCA9IGZ1bmN0aW9uIGFzc2VydE9wdGltaXpl
ZCgKKyAgICAgIGZ1biwgbmFtZV9vcHQsIHNraXBfaWZfbWF5YmVfZGVvcHRlZCA9IHRydWUpIHsK
KyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1cyhmdW4pOworICAgIC8vIFRl
c3RzIHRoYXQgdXNlIGFzc2VydE9wdGltaXplZCgpIGRvIG5vdCBtYWtlIHNlbnNlIGZvciBMaXRl
IG1vZGUgd2hlcmUKKyAgICAvLyBvcHRpbWl6YXRpb24gaXMgYWx3YXlzIGRpc2FibGVkLCBleHBs
aWNpdGx5IGV4aXQgdGhlIHRlc3Qgd2l0aCBhIHdhcm5pbmcuCisgICAgaWYgKG9wdF9zdGF0dXMg
JiBWOE9wdGltaXphdGlvblN0YXR1cy5rTGl0ZU1vZGUpIHsKKyAgICAgIHByaW50KCJXYXJuaW5n
OiBUZXN0IHVzZXMgYXNzZXJ0T3B0aW1pemVkIGluIExpdGUgbW9kZSwgc2tpcHBpbmcgdGVzdC4i
KTsKKyAgICAgIHRlc3RSdW5uZXIucXVpdCgwKTsKKyAgICB9CisgICAgLy8gVGVzdHMgdGhhdCB1
c2UgYXNzZXJ0T3B0aW1pemVkKCkgZG8gbm90IG1ha2Ugc2Vuc2UgaWYgLS1uby1vcHQKKyAgICAv
LyBvcHRpb24gaXMgcHJvdmlkZWQuIFN1Y2ggdGVzdHMgbXVzdCBhZGQgLS1vcHQgdG8gZmxhZ3Mg
Y29tbWVudC4KKyAgICBhc3NlcnRGYWxzZSgob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3Rh
dHVzLmtOZXZlck9wdGltaXplKSAhPT0gMCwKKyAgICAgICAgICAgICAgICAidGVzdCBkb2VzIG5v
dCBtYWtlIHNlbnNlIHdpdGggLS1uby1vcHQiKTsKKyAgICBhc3NlcnRUcnVlKAorICAgICAgICAo
b3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtJc0Z1bmN0aW9uKSAhPT0gMCwKKyAg
ICAgICAgJ3Nob3VsZCBiZSBhIGZ1bmN0aW9uOiAnICsgbmFtZV9vcHQpOworICAgIGlmIChza2lw
X2lmX21heWJlX2Rlb3B0ZWQgJiYKKyAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlv
blN0YXR1cy5rTWF5YmVEZW9wdGVkKSAhPT0gMCkgeworICAgICAgLy8gV2hlbiAtLWRlb3B0LWV2
ZXJ5LW4tdGltZXMgZmxhZyBpcyBzcGVjaWZpZWQgaXQncyBubyBsb25nZXIgZ3VhcmFudGVlZAor
ICAgICAgLy8gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIHN0aWxsIG9wdGltaXplZCwgc28g
a2VlcCBydW5uaW5nIHRoZSB0ZXN0CisgICAgICAvLyB0byBzdHJlc3MgdGVzdCB0aGUgZGVvcHRp
bWl6ZXIuCisgICAgICByZXR1cm47CisgICAgfQorICAgIGFzc2VydFRydWUoCisgICAgICAgIChv
cHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua09wdGltaXplZCkgIT09IDAsCisgICAg
ICAgICdzaG91bGQgYmUgb3B0aW1pemVkOiAnICsgbmFtZV9vcHQpOworICB9CisKKyAgaXNOZXZl
ck9wdGltaXplTGl0ZU1vZGUgPSBmdW5jdGlvbiBpc05ldmVyT3B0aW1pemVMaXRlTW9kZSgpIHsK
KyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1cyh1bmRlZmluZWQsICIiKTsK
KyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rTGl0ZU1vZGUp
ICE9PSAwOworICB9CisKKyAgaXNOZXZlck9wdGltaXplID0gZnVuY3Rpb24gaXNOZXZlck9wdGlt
aXplKCkgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKHVuZGVmaW5l
ZCwgIiIpOworICAgIHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtO
ZXZlck9wdGltaXplKSAhPT0gMDsKKyAgfQorCisgIGlzQWx3YXlzT3B0aW1pemUgPSBmdW5jdGlv
biBpc0Fsd2F5c09wdGltaXplKCkgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9u
U3RhdHVzKHVuZGVmaW5lZCwgIiIpOworICAgIHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1p
emF0aW9uU3RhdHVzLmtBbHdheXNPcHRpbWl6ZSkgIT09IDA7CisgIH0KKworICBpc0ludGVycHJl
dGVkID0gZnVuY3Rpb24gaXNJbnRlcnByZXRlZChmdW4pIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9
IE9wdGltaXphdGlvblN0YXR1cyhmdW4sICIiKTsKKyAgICBhc3NlcnRUcnVlKChvcHRfc3RhdHVz
ICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAwLAorICAgICAgICAgICAg
ICAgIm5vdCBhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6
YXRpb25TdGF0dXMua09wdGltaXplZCkgPT09IDAgJiYKKyAgICAgICAgICAgKG9wdF9zdGF0dXMg
JiBWOE9wdGltaXphdGlvblN0YXR1cy5rSW50ZXJwcmV0ZWQpICE9PSAwOworICB9CisKKyAgaXNC
YXNlbGluZSA9IGZ1bmN0aW9uIGlzQmFzZWxpbmUoZnVuKSB7CisgICAgdmFyIG9wdF9zdGF0dXMg
PSBPcHRpbWl6YXRpb25TdGF0dXMoZnVuLCAiIik7CisgICAgYXNzZXJ0VHJ1ZSgob3B0X3N0YXR1
cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtJc0Z1bmN0aW9uKSAhPT0gMCwKKyAgICAgICAgICAg
ICAgICJub3QgYSBmdW5jdGlvbiIpOworICAgIHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1p
emF0aW9uU3RhdHVzLmtPcHRpbWl6ZWQpID09PSAwICYmCisgICAgICAgICAgIChvcHRfc3RhdHVz
ICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0Jhc2VsaW5lKSAhPT0gMDsKKyAgfQorCisgIGlzVW5v
cHRpbWl6ZWQgPSBmdW5jdGlvbiBpc1Vub3B0aW1pemVkKGZ1bikgeworICAgIHJldHVybiBpc0lu
dGVycHJldGVkKGZ1bikgfHwgaXNCYXNlbGluZShmdW4pOworICB9CisKKyAgaXNPcHRpbWl6ZWQg
PSBmdW5jdGlvbiBpc09wdGltaXplZChmdW4pIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGlt
aXphdGlvblN0YXR1cyhmdW4sICIiKTsKKyAgICBhc3NlcnRUcnVlKChvcHRfc3RhdHVzICYgVjhP
cHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAwLAorICAgICAgICAgICAgICAgIm5v
dCBhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25T
dGF0dXMua09wdGltaXplZCkgIT09IDA7CisgIH0KKworICBpc1R1cmJvRmFubmVkID0gZnVuY3Rp
b24gaXNUdXJib0Zhbm5lZChmdW4pIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGltaXphdGlv
blN0YXR1cyhmdW4sICIiKTsKKyAgICBhc3NlcnRUcnVlKChvcHRfc3RhdHVzICYgVjhPcHRpbWl6
YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAwLAorICAgICAgICAgICAgICAgIm5vdCBhIGZ1
bmN0aW9uIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMu
a09wdGltaXplZCkgIT09IDAgJiYKKyAgICAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXph
dGlvblN0YXR1cy5rVHVyYm9GYW5uZWQpICE9PSAwOworICB9CisKKyAgLy8gQ3VzdG9tIFY4LXNw
ZWNpZmljIHN0YWNrIHRyYWNlIGZvcm1hdHRlciB0aGF0IGlzIHRlbXBvcmFyaWx5IGluc3RhbGxl
ZCBvbgorICAvLyB0aGUgRXJyb3Igb2JqZWN0LgorICBNanNVbml0QXNzZXJ0aW9uRXJyb3IucHJl
cGFyZVN0YWNrVHJhY2UgPSBmdW5jdGlvbihlcnJvciwgc3RhY2spIHsKKyAgICAvLyBUcmlnZ2Vy
IGRlZmF1bHQgZm9ybWF0dGluZyB3aXRoIHJlY3Vyc2lvbi4KKyAgICB0cnkgeworICAgICAgLy8g
RmlsdGVyLW91dCBhbGwgYnV0IHRoZSBmaXJzdCBtanN1bml0IGZyYW1lLgorICAgICAgbGV0IGZp
bHRlcmVkU3RhY2sgPSBbXTsKKyAgICAgIGxldCBpbk1qc3VuaXQgPSB0cnVlOworICAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykgeworICAgICAgICBsZXQgZnJhbWUg
PSBzdGFja1tpXTsKKyAgICAgICAgaWYgKGluTWpzdW5pdCkgeworICAgICAgICAgIGxldCBmaWxl
ID0gZnJhbWUuZ2V0RmlsZU5hbWUoKTsKKyAgICAgICAgICBpZiAoIWZpbGUgfHwgIWZpbGUuZW5k
c1dpdGgoIm1qc3VuaXQuanMiKSkgeworICAgICAgICAgICAgaW5NanN1bml0ID0gZmFsc2U7Cisg
ICAgICAgICAgICAvLyBQdXNoIHRoZSBsYXN0IG1qc3VuaXQgZnJhbWUsIHR5cGljYWxseSBjb250
YWluaW5nIHRoZSBhc3NlcnRpb24KKyAgICAgICAgICAgIC8vIGZ1bmN0aW9uLgorICAgICAgICAg
ICAgaWYgKGkgPiAwKSBBcnJheVByb3RvdHlwZVB1c2guY2FsbChmaWx0ZXJlZFN0YWNrLCBzdGFj
a1tpLTFdKTsKKyAgICAgICAgICAgIEFycmF5UHJvdG90eXBlUHVzaC5jYWxsKGZpbHRlcmVkU3Rh
Y2ssIHN0YWNrW2ldKTsKKyAgICAgICAgICB9CisgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgQXJyYXlQcm90b3R5cGVQdXNoLmNhbGwoZmlsdGVyZWRTdGFjaywgZnJhbWUp
OworICAgICAgfQorICAgICAgc3RhY2sgPSBmaWx0ZXJlZFN0YWNrOworCisgICAgICAvLyBJbmZl
ciBmdW5jdGlvbiBuYW1lcyBhbmQgY2FsY3VsYXRlIHttYXhfbmFtZV9sZW5ndGh9CisgICAgICBs
ZXQgbWF4X25hbWVfbGVuZ3RoID0gMDsKKyAgICAgIEFycmF5UHJvdG90eXBlRm9yRWFjaC5jYWxs
KHN0YWNrLCBlYWNoID0+IHsKKyAgICAgICAgbGV0IG5hbWUgPSBlYWNoLmdldEZ1bmN0aW9uTmFt
ZSgpOworICAgICAgICBpZiAobmFtZSA9PSBudWxsKSBuYW1lID0gIiI7CisgICAgICAgIGlmIChl
YWNoLmlzRXZhbCgpKSB7CisgICAgICAgICAgbmFtZSA9IG5hbWU7CisgICAgICAgIH0gZWxzZSBp
ZiAoZWFjaC5pc0NvbnN0cnVjdG9yKCkpIHsKKyAgICAgICAgICBuYW1lID0gIm5ldyAiICsgbmFt
ZTsKKyAgICAgICAgfSBlbHNlIGlmIChlYWNoLmlzTmF0aXZlKCkpIHsKKyAgICAgICAgICBuYW1l
ID0gIm5hdGl2ZSAiICsgbmFtZTsKKyAgICAgICAgfSBlbHNlIGlmICghZWFjaC5pc1RvcGxldmVs
KCkpIHsKKyAgICAgICAgICBuYW1lID0gZWFjaC5nZXRUeXBlTmFtZSgpICsgIi4iICsgbmFtZTsK
KyAgICAgICAgfQorICAgICAgICBlYWNoLm5hbWUgPSBuYW1lOworICAgICAgICBtYXhfbmFtZV9s
ZW5ndGggPSBNYXRoLm1heChuYW1lLmxlbmd0aCwgbWF4X25hbWVfbGVuZ3RoKQorICAgICAgfSk7
CisKKyAgICAgIC8vIEZvcm1hdCBzdGFjayBmcmFtZXMuCisgICAgICBzdGFjayA9IEFycmF5UHJv
dG90eXBlTWFwLmNhbGwoc3RhY2ssIGVhY2ggPT4geworICAgICAgICBsZXQgZnJhbWUgPSAiICAg
IGF0ICIgKyBlYWNoLm5hbWUucGFkRW5kKG1heF9uYW1lX2xlbmd0aCk7CisgICAgICAgIGxldCBm
aWxlTmFtZSA9IGVhY2guZ2V0RmlsZU5hbWUoKTsKKyAgICAgICAgaWYgKGVhY2guaXNFdmFsKCkp
IHJldHVybiBmcmFtZSArICIgIiArIGVhY2guZ2V0RXZhbE9yaWdpbigpOworICAgICAgICBmcmFt
ZSArPSAiICIgKyAoZmlsZU5hbWUgPyBmaWxlTmFtZSA6ICIiKTsKKyAgICAgICAgbGV0IGxpbmU9
IGVhY2guZ2V0TGluZU51bWJlcigpOworICAgICAgICBmcmFtZSArPSAiICIgKyAobGluZSA/IGxp
bmUgOiAiIik7CisgICAgICAgIGxldCBjb2x1bW4gPSBlYWNoLmdldENvbHVtbk51bWJlcigpOwor
ICAgICAgICBmcmFtZSArPSAoY29sdW1uID8gIjoiICsgY29sdW1uIDogIiIpOworICAgICAgICBy
ZXR1cm4gZnJhbWU7CisgICAgICB9KTsKKyAgICAgIHJldHVybiAiIiArIGVycm9yLm1lc3NhZ2Ug
KyAiXG4iICsgQXJyYXlQcm90b3R5cGVKb2luLmNhbGwoc3RhY2ssICJcbiIpOworICAgIH0gY2F0
Y2ggKGUpIHt9OworICAgIHJldHVybiBlcnJvci5zdGFjazsKKyAgfQorfSkoKTsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS92OC93YXNtLW1vZHVsZS1idWlsZGVyLmpzIGIvSlNUZXN0cy93YXNt
L3Y4L3dhc20tbW9kdWxlLWJ1aWxkZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDY3ZWQ4NGQwZTU5ZjI4NTJh
Y2E0YTUyMjNmZDU5ZTlmZWRmN2IxMAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92
OC93YXNtLW1vZHVsZS1idWlsZGVyLmpzCkBAIC0wLDAgKzEsMjE2OSBAQAorLy8gQ29weXJpZ2h0
IDIwMTYgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIFVzZWQgZm9y
IGVuY29kaW5nIGYzMiBhbmQgZG91YmxlIGNvbnN0YW50cyB0byBiaXRzLgorbGV0IGJ5dGVfdmll
dyA9IG5ldyBVaW50OEFycmF5KDgpOworbGV0IGRhdGFfdmlldyA9IG5ldyBEYXRhVmlldyhieXRl
X3ZpZXcuYnVmZmVyKTsKKworLy8gVGhlIGJ5dGVzIGZ1bmN0aW9uIHJlY2VpdmVzIG9uZSBvZgor
Ly8gIC0gc2V2ZXJhbCBhcmd1bWVudHMsIGVhY2ggb2Ygd2hpY2ggaXMgZWl0aGVyIGEgbnVtYmVy
IG9yIGEgc3RyaW5nIG9mIGxlbmd0aAorLy8gICAgMTsgaWYgaXQncyBhIHN0cmluZywgdGhlIGNo
YXJjb2RlIG9mIHRoZSBjb250YWluZWQgY2hhcmFjdGVyIGlzIHVzZWQuCisvLyAgLSBhIHNpbmds
ZSBhcnJheSBhcmd1bWVudCBjb250YWluaW5nIHRoZSBhY3R1YWwgYXJndW1lbnRzCisvLyAgLSBh
IHNpbmdsZSBzdHJpbmc7IHRoZSByZXR1cm5lZCBidWZmZXIgd2lsbCBjb250YWluIHRoZSBjaGFy
IGNvZGVzIG9mIGFsbAorLy8gICAgY29udGFpbmVkIGNoYXJhY3RlcnMuCitmdW5jdGlvbiBieXRl
cyguLi5pbnB1dCkgeworICBpZiAoaW5wdXQubGVuZ3RoID09IDEgJiYgdHlwZW9mIGlucHV0WzBd
ID09ICdhcnJheScpIGlucHV0ID0gaW5wdXRbMF07CisgIGlmIChpbnB1dC5sZW5ndGggPT0gMSAm
JiB0eXBlb2YgaW5wdXRbMF0gPT0gJ3N0cmluZycpIHsKKyAgICBsZXQgbGVuID0gaW5wdXRbMF0u
bGVuZ3RoOworICAgIGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IGxlbjsgaSsrKSB2aWV3W2ldID0gaW5wdXRbMF0uY2hhckNvZGVBdChpKTsK
KyAgICByZXR1cm4gdmlldy5idWZmZXI7CisgIH0KKyAgbGV0IHZpZXcgPSBuZXcgVWludDhBcnJh
eShpbnB1dC5sZW5ndGgpOworICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsr
KSB7CisgICAgbGV0IHZhbCA9IGlucHV0W2ldOworICAgIGlmICh0eXBlb2YgdmFsID09ICdzdHJp
bmcnKSB7CisgICAgICBpZiAodmFsLmxlbmd0aCAhPSAxKSB7CisgICAgICAgIHRocm93IG5ldyBF
cnJvcignc3RyaW5nIGlucHV0cyBtdXN0IGhhdmUgbGVuZ3RoIDEnKTsKKyAgICAgIH0KKyAgICAg
IHZhbCA9IHZhbC5jaGFyQ29kZUF0KDApOworICAgIH0KKyAgICB2aWV3W2ldID0gdmFsIHwgMDsK
KyAgfQorICByZXR1cm4gdmlldy5idWZmZXI7Cit9CisKKy8vIEhlYWRlciBkZWNsYXJhdGlvbiBj
b25zdGFudHMKK3ZhciBrV2FzbUgwID0gMDsKK3ZhciBrV2FzbUgxID0gMHg2MTsKK3ZhciBrV2Fz
bUgyID0gMHg3MzsKK3ZhciBrV2FzbUgzID0gMHg2ZDsKKwordmFyIGtXYXNtVjAgPSAweDE7Cit2
YXIga1dhc21WMSA9IDA7Cit2YXIga1dhc21WMiA9IDA7Cit2YXIga1dhc21WMyA9IDA7CisKK3Zh
ciBrSGVhZGVyU2l6ZSA9IDg7Cit2YXIga1BhZ2VTaXplID0gNjU1MzY7Cit2YXIga1NwZWNNYXhQ
YWdlcyA9IDY1NTM2OwordmFyIGtNYXhWYXJJbnQzMlNpemUgPSA1OwordmFyIGtNYXhWYXJJbnQ2
NFNpemUgPSAxMDsKKworbGV0IGtEZWNsTm9Mb2NhbHMgPSAwOworCisvLyBTZWN0aW9uIGRlY2xh
cmF0aW9uIGNvbnN0YW50cworbGV0IGtVbmtub3duU2VjdGlvbkNvZGUgPSAwOworbGV0IGtUeXBl
U2VjdGlvbkNvZGUgPSAxOyAgICAgICAgLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0aW9u
cworbGV0IGtJbXBvcnRTZWN0aW9uQ29kZSA9IDI7ICAgICAgLy8gSW1wb3J0IGRlY2xhcmF0aW9u
cworbGV0IGtGdW5jdGlvblNlY3Rpb25Db2RlID0gMzsgICAgLy8gRnVuY3Rpb24gZGVjbGFyYXRp
b25zCitsZXQga1RhYmxlU2VjdGlvbkNvZGUgPSA0OyAgICAgICAvLyBJbmRpcmVjdCBmdW5jdGlv
biB0YWJsZSBhbmQgb3RoZXIgdGFibGVzCitsZXQga01lbW9yeVNlY3Rpb25Db2RlID0gNTsgICAg
ICAvLyBNZW1vcnkgYXR0cmlidXRlcworbGV0IGtHbG9iYWxTZWN0aW9uQ29kZSA9IDY7ICAgICAg
Ly8gR2xvYmFsIGRlY2xhcmF0aW9ucworbGV0IGtFeHBvcnRTZWN0aW9uQ29kZSA9IDc7ICAgICAg
Ly8gRXhwb3J0cworbGV0IGtTdGFydFNlY3Rpb25Db2RlID0gODsgICAgICAgLy8gU3RhcnQgZnVu
Y3Rpb24gZGVjbGFyYXRpb24KK2xldCBrRWxlbWVudFNlY3Rpb25Db2RlID0gOTsgICAgIC8vIEVs
ZW1lbnRzIHNlY3Rpb24KK2xldCBrQ29kZVNlY3Rpb25Db2RlID0gMTA7ICAgICAgIC8vIEZ1bmN0
aW9uIGNvZGUKK2xldCBrRGF0YVNlY3Rpb25Db2RlID0gMTE7ICAgICAgIC8vIERhdGEgc2VnbWVu
dHMKK2xldCBrRGF0YUNvdW50U2VjdGlvbkNvZGUgPSAxMjsgIC8vIERhdGEgc2VnbWVudCBjb3Vu
dCAoYmV0d2VlbiBFbGVtZW50ICYgQ29kZSkKK2xldCBrVGFnU2VjdGlvbkNvZGUgPSAxMzsgICAg
ICAgIC8vIFRhZyBzZWN0aW9uIChiZXR3ZWVuIE1lbW9yeSAmIEdsb2JhbCkKKworLy8gTmFtZSBz
ZWN0aW9uIHR5cGVzCitsZXQga01vZHVsZU5hbWVDb2RlID0gMDsKK2xldCBrRnVuY3Rpb25OYW1l
c0NvZGUgPSAxOworbGV0IGtMb2NhbE5hbWVzQ29kZSA9IDI7CisKK2xldCBrV2FzbUZ1bmN0aW9u
VHlwZUZvcm0gPSAweDYwOworbGV0IGtXYXNtU3RydWN0VHlwZUZvcm0gPSAweDVmOworbGV0IGtX
YXNtQXJyYXlUeXBlRm9ybSA9IDB4NWU7CitsZXQga1dhc21GdW5jdGlvblN1YnR5cGVGb3JtID0g
MHg1ZDsKK2xldCBrV2FzbVN0cnVjdFN1YnR5cGVGb3JtID0gMHg1YzsKK2xldCBrV2FzbUFycmF5
U3VidHlwZUZvcm0gPSAweDViOworCitsZXQga0xpbWl0c05vTWF4aW11bSA9IDB4MDA7CitsZXQg
a0xpbWl0c1dpdGhNYXhpbXVtID0gMHgwMTsKK2xldCBrTGltaXRzU2hhcmVkTm9NYXhpbXVtID0g
MHgwMjsKK2xldCBrTGltaXRzU2hhcmVkV2l0aE1heGltdW0gPSAweDAzOworbGV0IGtMaW1pdHNN
ZW1vcnk2NE5vTWF4aW11bSA9IDB4MDQ7CitsZXQga0xpbWl0c01lbW9yeTY0V2l0aE1heGltdW0g
PSAweDA1OworCisvLyBTZWdtZW50IGZsYWdzCitsZXQga0FjdGl2ZU5vSW5kZXggPSAwOworbGV0
IGtQYXNzaXZlID0gMTsKK2xldCBrQWN0aXZlV2l0aEluZGV4ID0gMjsKK2xldCBrRGVjbGFyYXRp
dmUgPSAzOworbGV0IGtQYXNzaXZlV2l0aEVsZW1lbnRzID0gNTsKK2xldCBrRGVjbGFyYXRpdmVX
aXRoRWxlbWVudHMgPSA3OworCisvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbiBmbGFncworbGV0IGtE
ZWNsRnVuY3Rpb25OYW1lID0gMHgwMTsKK2xldCBrRGVjbEZ1bmN0aW9uSW1wb3J0ID0gMHgwMjsK
K2xldCBrRGVjbEZ1bmN0aW9uTG9jYWxzID0gMHgwNDsKK2xldCBrRGVjbEZ1bmN0aW9uRXhwb3J0
ID0gMHgwODsKKworLy8gVmFsdWUgdHlwZXMgYW5kIHJlbGF0ZWQKK2xldCBrV2FzbVZvaWQgPSAw
eDQwOworbGV0IGtXYXNtSTMyID0gMHg3ZjsKK2xldCBrV2FzbUk2NCA9IDB4N2U7CitsZXQga1dh
c21GMzIgPSAweDdkOworbGV0IGtXYXNtRjY0ID0gMHg3YzsKK2xldCBrV2FzbVMxMjggPSAweDdi
OworbGV0IGtXYXNtSTggPSAweDdhOworbGV0IGtXYXNtSTE2ID0gMHg3OTsKKworLy8gVGhlc2Ug
YXJlIGRlZmluZWQgYXMgbmVnYXRpdmUgaW50ZWdlcnMgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9t
IHBvc2l0aXZlIHR5cGUKKy8vIGluZGljZXMuCitsZXQga1dhc21GdW5jUmVmID0gLTB4MTA7Cits
ZXQga1dhc21BbnlGdW5jID0ga1dhc21GdW5jUmVmOyAgLy8gQWxpYXMgbmFtZWQgYXMgaW4gdGhl
IEpTIEFQSSBzcGVjCitsZXQga1dhc21FeHRlcm5SZWYgPSAtMHgxMTsKK2xldCBrV2FzbUFueVJl
ZiA9IC0weDEyOworbGV0IGtXYXNtRXFSZWYgPSAtMHgxMzsKK2xldCBrV2FzbUkzMVJlZiA9IC0w
eDE2OworbGV0IGtXYXNtRGF0YVJlZiA9IC0weDE5OworCisvLyBVc2UgdGhlIHBvc2l0aXZlLWJ5
dGUgdmVyc2lvbnMgaW5zaWRlIGZ1bmN0aW9uIGJvZGllcy4KK2xldCBrTGViMTI4TWFzayA9IDB4
N2Y7CitsZXQga0Z1bmNSZWZDb2RlID0ga1dhc21GdW5jUmVmICYga0xlYjEyOE1hc2s7CitsZXQg
a0FueUZ1bmNDb2RlID0ga0Z1bmNSZWZDb2RlOyAgLy8gQWxpYXMgbmFtZWQgYXMgaW4gdGhlIEpT
IEFQSSBzcGVjCitsZXQga0V4dGVyblJlZkNvZGUgPSBrV2FzbUV4dGVyblJlZiAmIGtMZWIxMjhN
YXNrOworbGV0IGtBbnlSZWZDb2RlID0ga1dhc21BbnlSZWYgJiBrTGViMTI4TWFzazsKK2xldCBr
RXFSZWZDb2RlID0ga1dhc21FcVJlZiAmIGtMZWIxMjhNYXNrOworbGV0IGtJMzFSZWZDb2RlID0g
a1dhc21JMzFSZWYgICYga0xlYjEyOE1hc2s7CitsZXQga0RhdGFSZWZDb2RlID0ga1dhc21EYXRh
UmVmICAmIGtMZWIxMjhNYXNrOworCitsZXQga1dhc21PcHRSZWYgPSAweDZjOworbGV0IGtXYXNt
UmVmID0gMHg2YjsKK2Z1bmN0aW9uIHdhc21PcHRSZWZUeXBlKGhlYXBfdHlwZSkgeworICByZXR1
cm4ge29wY29kZToga1dhc21PcHRSZWYsIGhlYXBfdHlwZTogaGVhcF90eXBlfTsKK30KK2Z1bmN0
aW9uIHdhc21SZWZUeXBlKGhlYXBfdHlwZSkgeworICByZXR1cm4ge29wY29kZToga1dhc21SZWYs
IGhlYXBfdHlwZTogaGVhcF90eXBlfTsKK30KKworbGV0IGtXYXNtUnR0V2l0aERlcHRoID0gMHg2
OTsKK2Z1bmN0aW9uIHdhc21SdHQoaW5kZXgsIGRlcHRoKSB7CisgIGlmIChpbmRleCA8IDApIHRo
cm93IG5ldyBFcnJvcigiRXhwZWN0aW5nIG5vbi1uZWdhdGl2ZSB0eXBlIGluZGV4Iik7CisgIHJl
dHVybiB7b3Bjb2RlOiBrV2FzbVJ0dFdpdGhEZXB0aCwgaW5kZXg6IGluZGV4LCBkZXB0aDogZGVw
dGh9OworfQorbGV0IGtXYXNtUnR0ID0gMHg2ODsKK2Z1bmN0aW9uIHdhc21SdHROb0RlcHRoKGlu
ZGV4KSB7CisgIGlmIChpbmRleCA8IDApIHRocm93IG5ldyBFcnJvcigiRXhwZWN0aW5nIG5vbi1u
ZWdhdGl2ZSB0eXBlIGluZGV4Iik7CisgIHJldHVybiB7b3Bjb2RlOiBrV2FzbVJ0dCwgaW5kZXg6
IGluZGV4fTsKK30KKworbGV0IGtFeHRlcm5hbEZ1bmN0aW9uID0gMDsKK2xldCBrRXh0ZXJuYWxU
YWJsZSA9IDE7CitsZXQga0V4dGVybmFsTWVtb3J5ID0gMjsKK2xldCBrRXh0ZXJuYWxHbG9iYWwg
PSAzOworbGV0IGtFeHRlcm5hbFRhZyA9IDQ7CisKK2xldCBrVGFibGVaZXJvID0gMDsKK2xldCBr
TWVtb3J5WmVybyA9IDA7CitsZXQga1NlZ21lbnRaZXJvID0gMDsKKworbGV0IGtFeGNlcHRpb25B
dHRyaWJ1dGUgPSAwOworCisvLyBVc2VmdWwgc2lnbmF0dXJlcworbGV0IGtTaWdfaV9pID0gbWFr
ZVNpZyhba1dhc21JMzJdLCBba1dhc21JMzJdKTsKK2xldCBrU2lnX2xfbCA9IG1ha2VTaWcoW2tX
YXNtSTY0XSwgW2tXYXNtSTY0XSk7CitsZXQga1NpZ19pX2wgPSBtYWtlU2lnKFtrV2FzbUk2NF0s
IFtrV2FzbUkzMl0pOworbGV0IGtTaWdfaV9paSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkz
Ml0sIFtrV2FzbUkzMl0pOworbGV0IGtTaWdfaV9paWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dh
c21JMzIsIGtXYXNtSTMyXSwgW2tXYXNtSTMyXSk7CitsZXQga1NpZ192X2lpaWkgPSBtYWtlU2ln
KFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMl0sIFtdKTsKK2xldCBrU2ln
X2ZfZmYgPSBtYWtlU2lnKFtrV2FzbUYzMiwga1dhc21GMzJdLCBba1dhc21GMzJdKTsKK2xldCBr
U2lnX2RfZGQgPSBtYWtlU2lnKFtrV2FzbUY2NCwga1dhc21GNjRdLCBba1dhc21GNjRdKTsKK2xl
dCBrU2lnX2xfbGwgPSBtYWtlU2lnKFtrV2FzbUk2NCwga1dhc21JNjRdLCBba1dhc21JNjRdKTsK
K2xldCBrU2lnX2lfZGQgPSBtYWtlU2lnKFtrV2FzbUY2NCwga1dhc21GNjRdLCBba1dhc21JMzJd
KTsKK2xldCBrU2lnX3ZfdiA9IG1ha2VTaWcoW10sIFtdKTsKK2xldCBrU2lnX2lfdiA9IG1ha2VT
aWcoW10sIFtrV2FzbUkzMl0pOworbGV0IGtTaWdfbF92ID0gbWFrZVNpZyhbXSwgW2tXYXNtSTY0
XSk7CitsZXQga1NpZ19mX3YgPSBtYWtlU2lnKFtdLCBba1dhc21GMzJdKTsKK2xldCBrU2lnX2Rf
diA9IG1ha2VTaWcoW10sIFtrV2FzbUY2NF0pOworbGV0IGtTaWdfdl9pID0gbWFrZVNpZyhba1dh
c21JMzJdLCBbXSk7CitsZXQga1NpZ192X2lpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMy
XSwgW10pOworbGV0IGtTaWdfdl9paWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dhc21JMzIsIGtX
YXNtSTMyXSwgW10pOworbGV0IGtTaWdfdl9sID0gbWFrZVNpZyhba1dhc21JNjRdLCBbXSk7Cits
ZXQga1NpZ192X2QgPSBtYWtlU2lnKFtrV2FzbUY2NF0sIFtdKTsKK2xldCBrU2lnX3ZfZGQgPSBt
YWtlU2lnKFtrV2FzbUY2NCwga1dhc21GNjRdLCBbXSk7CitsZXQga1NpZ192X2RkaSA9IG1ha2VT
aWcoW2tXYXNtRjY0LCBrV2FzbUY2NCwga1dhc21JMzJdLCBbXSk7CitsZXQga1NpZ19paV92ID0g
bWFrZVNpZyhbXSwgW2tXYXNtSTMyLCBrV2FzbUkzMl0pOworbGV0IGtTaWdfaWlpX3YgPSBtYWtl
U2lnKFtdLCBba1dhc21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMl0pOworbGV0IGtTaWdfaWlfaSA9
IG1ha2VTaWcoW2tXYXNtSTMyXSwgW2tXYXNtSTMyLCBrV2FzbUkzMl0pOworbGV0IGtTaWdfaWlp
X2kgPSBtYWtlU2lnKFtrV2FzbUkzMl0sIFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSk7
CitsZXQga1NpZ19paV9paSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMl0sIFtrV2FzbUkz
Miwga1dhc21JMzJdKTsKK2xldCBrU2lnX2lpaV9paSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2Fz
bUkzMl0sIFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSk7CisKK2xldCBrU2lnX3ZfZiA9
IG1ha2VTaWcoW2tXYXNtRjMyXSwgW10pOworbGV0IGtTaWdfZl9mID0gbWFrZVNpZyhba1dhc21G
MzJdLCBba1dhc21GMzJdKTsKK2xldCBrU2lnX2ZfZCA9IG1ha2VTaWcoW2tXYXNtRjY0XSwgW2tX
YXNtRjMyXSk7CitsZXQga1NpZ19kX2QgPSBtYWtlU2lnKFtrV2FzbUY2NF0sIFtrV2FzbUY2NF0p
OworbGV0IGtTaWdfcl9yID0gbWFrZVNpZyhba1dhc21FeHRlcm5SZWZdLCBba1dhc21FeHRlcm5S
ZWZdKTsKK2xldCBrU2lnX2FfYSA9IG1ha2VTaWcoW2tXYXNtQW55RnVuY10sIFtrV2FzbUFueUZ1
bmNdKTsKK2xldCBrU2lnX2lfciA9IG1ha2VTaWcoW2tXYXNtRXh0ZXJuUmVmXSwgW2tXYXNtSTMy
XSk7CitsZXQga1NpZ192X3IgPSBtYWtlU2lnKFtrV2FzbUV4dGVyblJlZl0sIFtdKTsKK2xldCBr
U2lnX3ZfYSA9IG1ha2VTaWcoW2tXYXNtQW55RnVuY10sIFtdKTsKK2xldCBrU2lnX3ZfcnIgPSBt
YWtlU2lnKFtrV2FzbUV4dGVyblJlZiwga1dhc21FeHRlcm5SZWZdLCBbXSk7CitsZXQga1NpZ192
X2FhID0gbWFrZVNpZyhba1dhc21BbnlGdW5jLCBrV2FzbUFueUZ1bmNdLCBbXSk7CitsZXQga1Np
Z19yX3YgPSBtYWtlU2lnKFtdLCBba1dhc21FeHRlcm5SZWZdKTsKK2xldCBrU2lnX2FfdiA9IG1h
a2VTaWcoW10sIFtrV2FzbUFueUZ1bmNdKTsKK2xldCBrU2lnX2FfaSA9IG1ha2VTaWcoW2tXYXNt
STMyXSwgW2tXYXNtQW55RnVuY10pOworbGV0IGtTaWdfc19pID0gbWFrZVNpZyhba1dhc21JMzJd
LCBba1dhc21TMTI4XSk7CitsZXQga1NpZ19pX3MgPSBtYWtlU2lnKFtrV2FzbVMxMjhdLCBba1dh
c21JMzJdKTsKKworZnVuY3Rpb24gbWFrZVNpZyhwYXJhbXMsIHJlc3VsdHMpIHsKKyAgcmV0dXJu
IHtwYXJhbXM6IHBhcmFtcywgcmVzdWx0czogcmVzdWx0c307Cit9CisKK2Z1bmN0aW9uIG1ha2VT
aWdfdl94KHgpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW3hdLCBbXSk7Cit9CisKK2Z1bmN0aW9uIG1h
a2VTaWdfeF92KHgpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW10sIFt4XSk7Cit9CisKK2Z1bmN0aW9u
IG1ha2VTaWdfdl94eCh4KSB7CisgIHJldHVybiBtYWtlU2lnKFt4LCB4XSwgW10pOworfQorCitm
dW5jdGlvbiBtYWtlU2lnX3JfdihyKSB7CisgIHJldHVybiBtYWtlU2lnKFtdLCBbcl0pOworfQor
CitmdW5jdGlvbiBtYWtlU2lnX3JfeChyLCB4KSB7CisgIHJldHVybiBtYWtlU2lnKFt4XSwgW3Jd
KTsKK30KKworZnVuY3Rpb24gbWFrZVNpZ19yX3h4KHIsIHgpIHsKKyAgcmV0dXJuIG1ha2VTaWco
W3gsIHhdLCBbcl0pOworfQorCisvLyBPcGNvZGVzCitjb25zdCBrV2FzbU9wY29kZXMgPSB7Cisg
ICdVbnJlYWNoYWJsZSc6IDB4MDAsCisgICdOb3AnOiAweDAxLAorICAnQmxvY2snOiAweDAyLAor
ICAnTG9vcCc6IDB4MDMsCisgICdJZic6IDB4MDQsCisgICdFbHNlJzogMHgwNSwKKyAgJ1RyeSc6
IDB4MDYsCisgICdDYXRjaCc6IDB4MDcsCisgICdUaHJvdyc6IDB4MDgsCisgICdSZXRocm93Jzog
MHgwOSwKKyAgJ0NhdGNoQWxsJzogMHgxOSwKKyAgJ0VuZCc6IDB4MGIsCisgICdCcic6IDB4MGMs
CisgICdCcklmJzogMHgwZCwKKyAgJ0JyVGFibGUnOiAweDBlLAorICAnUmV0dXJuJzogMHgwZiwK
KyAgJ0NhbGxGdW5jdGlvbic6IDB4MTAsCisgICdDYWxsSW5kaXJlY3QnOiAweDExLAorICAnUmV0
dXJuQ2FsbCc6IDB4MTIsCisgICdSZXR1cm5DYWxsSW5kaXJlY3QnOiAweDEzLAorICAnQ2FsbFJl
Zic6IDB4MTQsCisgICdSZXR1cm5DYWxsUmVmJzogMHgxNSwKKyAgJ0xldCc6IDB4MTcsCisgICdE
ZWxlZ2F0ZSc6IDB4MTgsCisgICdEcm9wJzogMHgxYSwKKyAgJ1NlbGVjdCc6IDB4MWIsCisgICdT
ZWxlY3RXaXRoVHlwZSc6IDB4MWMsCisgICdMb2NhbEdldCc6IDB4MjAsCisgICdMb2NhbFNldCc6
IDB4MjEsCisgICdMb2NhbFRlZSc6IDB4MjIsCisgICdHbG9iYWxHZXQnOiAweDIzLAorICAnR2xv
YmFsU2V0JzogMHgyNCwKKyAgJ1RhYmxlR2V0JzogMHgyNSwKKyAgJ1RhYmxlU2V0JzogMHgyNiwK
KyAgJ0kzMkxvYWRNZW0nOiAweDI4LAorICAnSTY0TG9hZE1lbSc6IDB4MjksCisgICdGMzJMb2Fk
TWVtJzogMHgyYSwKKyAgJ0Y2NExvYWRNZW0nOiAweDJiLAorICAnSTMyTG9hZE1lbThTJzogMHgy
YywKKyAgJ0kzMkxvYWRNZW04VSc6IDB4MmQsCisgICdJMzJMb2FkTWVtMTZTJzogMHgyZSwKKyAg
J0kzMkxvYWRNZW0xNlUnOiAweDJmLAorICAnSTY0TG9hZE1lbThTJzogMHgzMCwKKyAgJ0k2NExv
YWRNZW04VSc6IDB4MzEsCisgICdJNjRMb2FkTWVtMTZTJzogMHgzMiwKKyAgJ0k2NExvYWRNZW0x
NlUnOiAweDMzLAorICAnSTY0TG9hZE1lbTMyUyc6IDB4MzQsCisgICdJNjRMb2FkTWVtMzJVJzog
MHgzNSwKKyAgJ0kzMlN0b3JlTWVtJzogMHgzNiwKKyAgJ0k2NFN0b3JlTWVtJzogMHgzNywKKyAg
J0YzMlN0b3JlTWVtJzogMHgzOCwKKyAgJ0Y2NFN0b3JlTWVtJzogMHgzOSwKKyAgJ0kzMlN0b3Jl
TWVtOCc6IDB4M2EsCisgICdJMzJTdG9yZU1lbTE2JzogMHgzYiwKKyAgJ0k2NFN0b3JlTWVtOCc6
IDB4M2MsCisgICdJNjRTdG9yZU1lbTE2JzogMHgzZCwKKyAgJ0k2NFN0b3JlTWVtMzInOiAweDNl
LAorICAnTWVtb3J5U2l6ZSc6IDB4M2YsCisgICdNZW1vcnlHcm93JzogMHg0MCwKKyAgJ0kzMkNv
bnN0JzogMHg0MSwKKyAgJ0k2NENvbnN0JzogMHg0MiwKKyAgJ0YzMkNvbnN0JzogMHg0MywKKyAg
J0Y2NENvbnN0JzogMHg0NCwKKyAgJ0kzMkVxeic6IDB4NDUsCisgICdJMzJFcSc6IDB4NDYsCisg
ICdJMzJOZSc6IDB4NDcsCisgICdJMzJMdFMnOiAweDQ4LAorICAnSTMyTHRVJzogMHg0OSwKKyAg
J0kzMkd0Uyc6IDB4NGEsCisgICdJMzJHdFUnOiAweDRiLAorICAnSTMyTGVTJzogMHg0YywKKyAg
J0kzMkxlVSc6IDB4NGQsCisgICdJMzJHZVMnOiAweDRlLAorICAnSTMyR2VVJzogMHg0ZiwKKyAg
J0k2NEVxeic6IDB4NTAsCisgICdJNjRFcSc6IDB4NTEsCisgICdJNjROZSc6IDB4NTIsCisgICdJ
NjRMdFMnOiAweDUzLAorICAnSTY0THRVJzogMHg1NCwKKyAgJ0k2NEd0Uyc6IDB4NTUsCisgICdJ
NjRHdFUnOiAweDU2LAorICAnSTY0TGVTJzogMHg1NywKKyAgJ0k2NExlVSc6IDB4NTgsCisgICdJ
NjRHZVMnOiAweDU5LAorICAnSTY0R2VVJzogMHg1YSwKKyAgJ0YzMkVxJzogMHg1YiwKKyAgJ0Yz
Mk5lJzogMHg1YywKKyAgJ0YzMkx0JzogMHg1ZCwKKyAgJ0YzMkd0JzogMHg1ZSwKKyAgJ0YzMkxl
JzogMHg1ZiwKKyAgJ0YzMkdlJzogMHg2MCwKKyAgJ0Y2NEVxJzogMHg2MSwKKyAgJ0Y2NE5lJzog
MHg2MiwKKyAgJ0Y2NEx0JzogMHg2MywKKyAgJ0Y2NEd0JzogMHg2NCwKKyAgJ0Y2NExlJzogMHg2
NSwKKyAgJ0Y2NEdlJzogMHg2NiwKKyAgJ0kzMkNseic6IDB4NjcsCisgICdJMzJDdHonOiAweDY4
LAorICAnSTMyUG9wY250JzogMHg2OSwKKyAgJ0kzMkFkZCc6IDB4NmEsCisgICdJMzJTdWInOiAw
eDZiLAorICAnSTMyTXVsJzogMHg2YywKKyAgJ0kzMkRpdlMnOiAweDZkLAorICAnSTMyRGl2VSc6
IDB4NmUsCisgICdJMzJSZW1TJzogMHg2ZiwKKyAgJ0kzMlJlbVUnOiAweDcwLAorICAnSTMyQW5k
JzogMHg3MSwKKyAgJ0kzMklvcic6IDB4NzIsCisgICdJMzJYb3InOiAweDczLAorICAnSTMyU2hs
JzogMHg3NCwKKyAgJ0kzMlNoclMnOiAweDc1LAorICAnSTMyU2hyVSc6IDB4NzYsCisgICdJMzJS
b2wnOiAweDc3LAorICAnSTMyUm9yJzogMHg3OCwKKyAgJ0k2NENseic6IDB4NzksCisgICdJNjRD
dHonOiAweDdhLAorICAnSTY0UG9wY250JzogMHg3YiwKKyAgJ0k2NEFkZCc6IDB4N2MsCisgICdJ
NjRTdWInOiAweDdkLAorICAnSTY0TXVsJzogMHg3ZSwKKyAgJ0k2NERpdlMnOiAweDdmLAorICAn
STY0RGl2VSc6IDB4ODAsCisgICdJNjRSZW1TJzogMHg4MSwKKyAgJ0k2NFJlbVUnOiAweDgyLAor
ICAnSTY0QW5kJzogMHg4MywKKyAgJ0k2NElvcic6IDB4ODQsCisgICdJNjRYb3InOiAweDg1LAor
ICAnSTY0U2hsJzogMHg4NiwKKyAgJ0k2NFNoclMnOiAweDg3LAorICAnSTY0U2hyVSc6IDB4ODgs
CisgICdJNjRSb2wnOiAweDg5LAorICAnSTY0Um9yJzogMHg4YSwKKyAgJ0YzMkFicyc6IDB4OGIs
CisgICdGMzJOZWcnOiAweDhjLAorICAnRjMyQ2VpbCc6IDB4OGQsCisgICdGMzJGbG9vcic6IDB4
OGUsCisgICdGMzJUcnVuYyc6IDB4OGYsCisgICdGMzJOZWFyZXN0SW50JzogMHg5MCwKKyAgJ0Yz
MlNxcnQnOiAweDkxLAorICAnRjMyQWRkJzogMHg5MiwKKyAgJ0YzMlN1Yic6IDB4OTMsCisgICdG
MzJNdWwnOiAweDk0LAorICAnRjMyRGl2JzogMHg5NSwKKyAgJ0YzMk1pbic6IDB4OTYsCisgICdG
MzJNYXgnOiAweDk3LAorICAnRjMyQ29weVNpZ24nOiAweDk4LAorICAnRjY0QWJzJzogMHg5OSwK
KyAgJ0Y2NE5lZyc6IDB4OWEsCisgICdGNjRDZWlsJzogMHg5YiwKKyAgJ0Y2NEZsb29yJzogMHg5
YywKKyAgJ0Y2NFRydW5jJzogMHg5ZCwKKyAgJ0Y2NE5lYXJlc3RJbnQnOiAweDllLAorICAnRjY0
U3FydCc6IDB4OWYsCisgICdGNjRBZGQnOiAweGEwLAorICAnRjY0U3ViJzogMHhhMSwKKyAgJ0Y2
NE11bCc6IDB4YTIsCisgICdGNjREaXYnOiAweGEzLAorICAnRjY0TWluJzogMHhhNCwKKyAgJ0Y2
NE1heCc6IDB4YTUsCisgICdGNjRDb3B5U2lnbic6IDB4YTYsCisgICdJMzJDb252ZXJ0STY0Jzog
MHhhNywKKyAgJ0kzMlNDb252ZXJ0RjMyJzogMHhhOCwKKyAgJ0kzMlVDb252ZXJ0RjMyJzogMHhh
OSwKKyAgJ0kzMlNDb252ZXJ0RjY0JzogMHhhYSwKKyAgJ0kzMlVDb252ZXJ0RjY0JzogMHhhYiwK
KyAgJ0k2NFNDb252ZXJ0STMyJzogMHhhYywKKyAgJ0k2NFVDb252ZXJ0STMyJzogMHhhZCwKKyAg
J0k2NFNDb252ZXJ0RjMyJzogMHhhZSwKKyAgJ0k2NFVDb252ZXJ0RjMyJzogMHhhZiwKKyAgJ0k2
NFNDb252ZXJ0RjY0JzogMHhiMCwKKyAgJ0k2NFVDb252ZXJ0RjY0JzogMHhiMSwKKyAgJ0YzMlND
b252ZXJ0STMyJzogMHhiMiwKKyAgJ0YzMlVDb252ZXJ0STMyJzogMHhiMywKKyAgJ0YzMlNDb252
ZXJ0STY0JzogMHhiNCwKKyAgJ0YzMlVDb252ZXJ0STY0JzogMHhiNSwKKyAgJ0YzMkNvbnZlcnRG
NjQnOiAweGI2LAorICAnRjY0U0NvbnZlcnRJMzInOiAweGI3LAorICAnRjY0VUNvbnZlcnRJMzIn
OiAweGI4LAorICAnRjY0U0NvbnZlcnRJNjQnOiAweGI5LAorICAnRjY0VUNvbnZlcnRJNjQnOiAw
eGJhLAorICAnRjY0Q29udmVydEYzMic6IDB4YmIsCisgICdJMzJSZWludGVycHJldEYzMic6IDB4
YmMsCisgICdJNjRSZWludGVycHJldEY2NCc6IDB4YmQsCisgICdGMzJSZWludGVycHJldEkzMic6
IDB4YmUsCisgICdGNjRSZWludGVycHJldEk2NCc6IDB4YmYsCisgICdJMzJTRXh0ZW5kSTgnOiAw
eGMwLAorICAnSTMyU0V4dGVuZEkxNic6IDB4YzEsCisgICdJNjRTRXh0ZW5kSTgnOiAweGMyLAor
ICAnSTY0U0V4dGVuZEkxNic6IDB4YzMsCisgICdJNjRTRXh0ZW5kSTMyJzogMHhjNCwKKyAgJ1Jl
Zk51bGwnOiAweGQwLAorICAnUmVmSXNOdWxsJzogMHhkMSwKKyAgJ1JlZkZ1bmMnOiAweGQyLAor
ICAnUmVmQXNOb25OdWxsJzogMHhkMywKKyAgJ0JyT25OdWxsJzogMHhkNCwKKyAgJ1JlZkVxJzog
MHhkNSwKKyAgJ0JyT25Ob25OdWxsJzogMHhkNgorfTsKKworZnVuY3Rpb24gZGVmaW5lV2FzbU9w
Y29kZShuYW1lLCB2YWx1ZSkgeworICBpZiAoZ2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVzID09
PSB1bmRlZmluZWQpIHsKKyAgICBnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXMgPSB7fTsKKyAg
fQorICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgbmFtZSwge3ZhbHVlOiB2YWx1
ZX0pOworICBpZiAoZ2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVzW3ZhbHVlXSAhPT0gdW5kZWZp
bmVkKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgd2FzbSBvcGNvZGU6ICR7dmFs
dWV9LiBQcmV2aW91cyBuYW1lOiAkeworICAgICAgICBnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFt
ZXNbdmFsdWVdfSwgbmV3IG5hbWU6ICR7bmFtZX1gKTsKKyAgfQorICBnbG9iYWxUaGlzLmtXYXNt
T3Bjb2RlTmFtZXNbdmFsdWVdID0gbmFtZTsKK30KK2ZvciAobGV0IG5hbWUgaW4ga1dhc21PcGNv
ZGVzKSB7CisgIGRlZmluZVdhc21PcGNvZGUoYGtFeHByJHtuYW1lfWAsIGtXYXNtT3Bjb2Rlc1tu
YW1lXSk7Cit9CisKKy8vIFByZWZpeCBvcGNvZGVzCitjb25zdCBrUHJlZml4T3Bjb2RlcyA9IHsK
KyAgJ0dDJzogMHhmYiwKKyAgJ051bWVyaWMnOiAweGZjLAorICAnU2ltZCc6IDB4ZmQsCisgICdB
dG9taWMnOiAweGZlCit9OworZm9yIChsZXQgcHJlZml4IGluIGtQcmVmaXhPcGNvZGVzKSB7Cisg
IGRlZmluZVdhc21PcGNvZGUoYGske3ByZWZpeH1QcmVmaXhgLCBrUHJlZml4T3Bjb2Rlc1twcmVm
aXhdKTsKK30KKworLy8gR0Mgb3Bjb2RlcworbGV0IGtFeHByU3RydWN0TmV3V2l0aFJ0dCA9IDB4
MDE7CitsZXQga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0V2l0aFJ0dCA9IDB4MDI7CitsZXQga0V4cHJT
dHJ1Y3RHZXQgPSAweDAzOworbGV0IGtFeHByU3RydWN0R2V0UyA9IDB4MDQ7CitsZXQga0V4cHJT
dHJ1Y3RHZXRVID0gMHgwNTsKK2xldCBrRXhwclN0cnVjdFNldCA9IDB4MDY7CitsZXQga0V4cHJT
dHJ1Y3ROZXcgPSAweDA3OworbGV0IGtFeHByU3RydWN0TmV3RGVmYXVsdCA9IDB4MDg7CitsZXQg
a0V4cHJBcnJheU5ld1dpdGhSdHQgPSAweDExOworbGV0IGtFeHByQXJyYXlOZXdEZWZhdWx0V2l0
aFJ0dCA9IDB4MTI7CitsZXQga0V4cHJBcnJheUdldCA9IDB4MTM7CitsZXQga0V4cHJBcnJheUdl
dFMgPSAweDE0OworbGV0IGtFeHByQXJyYXlHZXRVID0gMHgxNTsKK2xldCBrRXhwckFycmF5U2V0
ID0gMHgxNjsKK2xldCBrRXhwckFycmF5TGVuID0gMHgxNzsKK2xldCBrRXhwckFycmF5Q29weSA9
IDB4MTg7CitsZXQga0V4cHJBcnJheUluaXQgPSAweDE5OworbGV0IGtFeHByQXJyYXlJbml0U3Rh
dGljID0gMHgxYTsKK2xldCBrRXhwckFycmF5TmV3ID0gMHgxYjsKK2xldCBrRXhwckFycmF5TmV3
RGVmYXVsdCA9IDB4MWM7CitsZXQga0V4cHJJMzFOZXcgPSAweDIwOworbGV0IGtFeHBySTMxR2V0
UyA9IDB4MjE7CitsZXQga0V4cHJJMzFHZXRVID0gMHgyMjsKK2xldCBrRXhwclJ0dENhbm9uID0g
MHgzMDsKK2xldCBrRXhwclJ0dFN1YiA9IDB4MzE7CitsZXQga0V4cHJSdHRGcmVzaFN1YiA9IDB4
MzI7CitsZXQga0V4cHJSZWZUZXN0ID0gMHg0MDsKK2xldCBrRXhwclJlZkNhc3QgPSAweDQxOwor
bGV0IGtFeHByQnJPbkNhc3QgPSAweDQyOworbGV0IGtFeHByQnJPbkNhc3RGYWlsID0gMHg0MzsK
K2xldCBrRXhwclJlZlRlc3RTdGF0aWMgPSAweDQ0OworbGV0IGtFeHByUmVmQ2FzdFN0YXRpYyA9
IDB4NDU7CitsZXQga0V4cHJCck9uQ2FzdFN0YXRpYyA9IDB4NDY7CitsZXQga0V4cHJCck9uQ2Fz
dFN0YXRpY0ZhaWwgPSAweDQ3OworbGV0IGtFeHByUmVmSXNGdW5jID0gMHg1MDsKK2xldCBrRXhw
clJlZklzRGF0YSA9IDB4NTE7CitsZXQga0V4cHJSZWZJc0kzMSA9IDB4NTI7CitsZXQga0V4cHJS
ZWZBc0Z1bmMgPSAweDU4OworbGV0IGtFeHByUmVmQXNEYXRhID0gMHg1OTsKK2xldCBrRXhwclJl
ZkFzSTMxID0gMHg1YTsKK2xldCBrRXhwckJyT25GdW5jID0gMHg2MDsKK2xldCBrRXhwckJyT25E
YXRhID0gMHg2MTsKK2xldCBrRXhwckJyT25JMzEgPSAweDYyOworCisvLyBOdW1lcmljIG9wY29k
ZXMuCitsZXQga0V4cHJJMzJTQ29udmVydFNhdEYzMiA9IDB4MDA7CitsZXQga0V4cHJJMzJVQ29u
dmVydFNhdEYzMiA9IDB4MDE7CitsZXQga0V4cHJJMzJTQ29udmVydFNhdEY2NCA9IDB4MDI7Cits
ZXQga0V4cHJJMzJVQ29udmVydFNhdEY2NCA9IDB4MDM7CitsZXQga0V4cHJJNjRTQ29udmVydFNh
dEYzMiA9IDB4MDQ7CitsZXQga0V4cHJJNjRVQ29udmVydFNhdEYzMiA9IDB4MDU7CitsZXQga0V4
cHJJNjRTQ29udmVydFNhdEY2NCA9IDB4MDY7CitsZXQga0V4cHJJNjRVQ29udmVydFNhdEY2NCA9
IDB4MDc7CitsZXQga0V4cHJNZW1vcnlJbml0ID0gMHgwODsKK2xldCBrRXhwckRhdGFEcm9wID0g
MHgwOTsKK2xldCBrRXhwck1lbW9yeUNvcHkgPSAweDBhOworbGV0IGtFeHByTWVtb3J5RmlsbCA9
IDB4MGI7CitsZXQga0V4cHJUYWJsZUluaXQgPSAweDBjOworbGV0IGtFeHByRWxlbURyb3AgPSAw
eDBkOworbGV0IGtFeHByVGFibGVDb3B5ID0gMHgwZTsKK2xldCBrRXhwclRhYmxlR3JvdyA9IDB4
MGY7CitsZXQga0V4cHJUYWJsZVNpemUgPSAweDEwOworbGV0IGtFeHByVGFibGVGaWxsID0gMHgx
MTsKKworLy8gQXRvbWljIG9wY29kZXMuCitsZXQga0V4cHJBdG9taWNOb3RpZnkgPSAweDAwOwor
bGV0IGtFeHBySTMyQXRvbWljV2FpdCA9IDB4MDE7CitsZXQga0V4cHJJNjRBdG9taWNXYWl0ID0g
MHgwMjsKK2xldCBrRXhwckkzMkF0b21pY0xvYWQgPSAweDEwOworbGV0IGtFeHBySTMyQXRvbWlj
TG9hZDhVID0gMHgxMjsKK2xldCBrRXhwckkzMkF0b21pY0xvYWQxNlUgPSAweDEzOworbGV0IGtF
eHBySTMyQXRvbWljU3RvcmUgPSAweDE3OworbGV0IGtFeHBySTMyQXRvbWljU3RvcmU4VSA9IDB4
MTk7CitsZXQga0V4cHJJMzJBdG9taWNTdG9yZTE2VSA9IDB4MWE7CitsZXQga0V4cHJJMzJBdG9t
aWNBZGQgPSAweDFlOworbGV0IGtFeHBySTMyQXRvbWljQWRkOFUgPSAweDIwOworbGV0IGtFeHBy
STMyQXRvbWljQWRkMTZVID0gMHgyMTsKK2xldCBrRXhwckkzMkF0b21pY1N1YiA9IDB4MjU7Cits
ZXQga0V4cHJJMzJBdG9taWNTdWI4VSA9IDB4Mjc7CitsZXQga0V4cHJJMzJBdG9taWNTdWIxNlUg
PSAweDI4OworbGV0IGtFeHBySTMyQXRvbWljQW5kID0gMHgyYzsKK2xldCBrRXhwckkzMkF0b21p
Y0FuZDhVID0gMHgyZTsKK2xldCBrRXhwckkzMkF0b21pY0FuZDE2VSA9IDB4MmY7CitsZXQga0V4
cHJJMzJBdG9taWNPciA9IDB4MzM7CitsZXQga0V4cHJJMzJBdG9taWNPcjhVID0gMHgzNTsKK2xl
dCBrRXhwckkzMkF0b21pY09yMTZVID0gMHgzNjsKK2xldCBrRXhwckkzMkF0b21pY1hvciA9IDB4
M2E7CitsZXQga0V4cHJJMzJBdG9taWNYb3I4VSA9IDB4M2M7CitsZXQga0V4cHJJMzJBdG9taWNY
b3IxNlUgPSAweDNkOworbGV0IGtFeHBySTMyQXRvbWljRXhjaGFuZ2UgPSAweDQxOworbGV0IGtF
eHBySTMyQXRvbWljRXhjaGFuZ2U4VSA9IDB4NDM7CitsZXQga0V4cHJJMzJBdG9taWNFeGNoYW5n
ZTE2VSA9IDB4NDQ7CitsZXQga0V4cHJJMzJBdG9taWNDb21wYXJlRXhjaGFuZ2UgPSAweDQ4Owor
bGV0IGtFeHBySTMyQXRvbWljQ29tcGFyZUV4Y2hhbmdlOFUgPSAweDRhOworbGV0IGtFeHBySTMy
QXRvbWljQ29tcGFyZUV4Y2hhbmdlMTZVID0gMHg0YjsKKworbGV0IGtFeHBySTY0QXRvbWljTG9h
ZCA9IDB4MTE7CitsZXQga0V4cHJJNjRBdG9taWNMb2FkOFUgPSAweDE0OworbGV0IGtFeHBySTY0
QXRvbWljTG9hZDE2VSA9IDB4MTU7CitsZXQga0V4cHJJNjRBdG9taWNMb2FkMzJVID0gMHgxNjsK
K2xldCBrRXhwckk2NEF0b21pY1N0b3JlID0gMHgxODsKK2xldCBrRXhwckk2NEF0b21pY1N0b3Jl
OFUgPSAweDFiOworbGV0IGtFeHBySTY0QXRvbWljU3RvcmUxNlUgPSAweDFjOworbGV0IGtFeHBy
STY0QXRvbWljU3RvcmUzMlUgPSAweDFkOworbGV0IGtFeHBySTY0QXRvbWljQWRkID0gMHgxZjsK
K2xldCBrRXhwckk2NEF0b21pY0FkZDhVID0gMHgyMjsKK2xldCBrRXhwckk2NEF0b21pY0FkZDE2
VSA9IDB4MjM7CitsZXQga0V4cHJJNjRBdG9taWNBZGQzMlUgPSAweDI0OworbGV0IGtFeHBySTY0
QXRvbWljU3ViID0gMHgyNjsKK2xldCBrRXhwckk2NEF0b21pY1N1YjhVID0gMHgyOTsKK2xldCBr
RXhwckk2NEF0b21pY1N1YjE2VSA9IDB4MmE7CitsZXQga0V4cHJJNjRBdG9taWNTdWIzMlUgPSAw
eDJiOworbGV0IGtFeHBySTY0QXRvbWljQW5kID0gMHgyZDsKK2xldCBrRXhwckk2NEF0b21pY0Fu
ZDhVID0gMHgzMDsKK2xldCBrRXhwckk2NEF0b21pY0FuZDE2VSA9IDB4MzE7CitsZXQga0V4cHJJ
NjRBdG9taWNBbmQzMlUgPSAweDMyOworbGV0IGtFeHBySTY0QXRvbWljT3IgPSAweDM0OworbGV0
IGtFeHBySTY0QXRvbWljT3I4VSA9IDB4Mzc7CitsZXQga0V4cHJJNjRBdG9taWNPcjE2VSA9IDB4
Mzg7CitsZXQga0V4cHJJNjRBdG9taWNPcjMyVSA9IDB4Mzk7CitsZXQga0V4cHJJNjRBdG9taWNY
b3IgPSAweDNiOworbGV0IGtFeHBySTY0QXRvbWljWG9yOFUgPSAweDNlOworbGV0IGtFeHBySTY0
QXRvbWljWG9yMTZVID0gMHgzZjsKK2xldCBrRXhwckk2NEF0b21pY1hvcjMyVSA9IDB4NDA7Cits
ZXQga0V4cHJJNjRBdG9taWNFeGNoYW5nZSA9IDB4NDI7CitsZXQga0V4cHJJNjRBdG9taWNFeGNo
YW5nZThVID0gMHg0NTsKK2xldCBrRXhwckk2NEF0b21pY0V4Y2hhbmdlMTZVID0gMHg0NjsKK2xl
dCBrRXhwckk2NEF0b21pY0V4Y2hhbmdlMzJVID0gMHg0NzsKK2xldCBrRXhwckk2NEF0b21pY0Nv
bXBhcmVFeGNoYW5nZSA9IDB4NDkKK2xldCBrRXhwckk2NEF0b21pY0NvbXBhcmVFeGNoYW5nZThV
ID0gMHg0YzsKK2xldCBrRXhwckk2NEF0b21pY0NvbXBhcmVFeGNoYW5nZTE2VSA9IDB4NGQ7Cits
ZXQga0V4cHJJNjRBdG9taWNDb21wYXJlRXhjaGFuZ2UzMlUgPSAweDRlOworCisvLyBTaW1kIG9w
Y29kZXMuCitsZXQga0V4cHJTMTI4TG9hZE1lbSA9IDB4MDA7CitsZXQga0V4cHJTMTI4TG9hZDh4
OFMgPSAweDAxOworbGV0IGtFeHByUzEyOExvYWQ4eDhVID0gMHgwMjsKK2xldCBrRXhwclMxMjhM
b2FkMTZ4NFMgPSAweDAzOworbGV0IGtFeHByUzEyOExvYWQxNng0VSA9IDB4MDQ7CitsZXQga0V4
cHJTMTI4TG9hZDMyeDJTID0gMHgwNTsKK2xldCBrRXhwclMxMjhMb2FkMzJ4MlUgPSAweDA2Owor
bGV0IGtFeHByUzEyOExvYWQ4U3BsYXQgPSAweDA3OworbGV0IGtFeHByUzEyOExvYWQxNlNwbGF0
ID0gMHgwODsKK2xldCBrRXhwclMxMjhMb2FkMzJTcGxhdCA9IDB4MDk7CitsZXQga0V4cHJTMTI4
TG9hZDY0U3BsYXQgPSAweDBhOworbGV0IGtFeHByUzEyOFN0b3JlTWVtID0gMHgwYjsKK2xldCBr
RXhwclMxMjhDb25zdCA9IDB4MGM7CitsZXQga0V4cHJJOHgxNlNodWZmbGUgPSAweDBkOworbGV0
IGtFeHBySTh4MTZTd2l6emxlID0gMHgwZTsKKworbGV0IGtFeHBySTh4MTZTcGxhdCA9IDB4MGY7
CitsZXQga0V4cHJJMTZ4OFNwbGF0ID0gMHgxMDsKK2xldCBrRXhwckkzMng0U3BsYXQgPSAweDEx
OworbGV0IGtFeHBySTY0eDJTcGxhdCA9IDB4MTI7CitsZXQga0V4cHJGMzJ4NFNwbGF0ID0gMHgx
MzsKK2xldCBrRXhwckY2NHgyU3BsYXQgPSAweDE0OworbGV0IGtFeHBySTh4MTZFeHRyYWN0TGFu
ZVMgPSAweDE1OworbGV0IGtFeHBySTh4MTZFeHRyYWN0TGFuZVUgPSAweDE2OworbGV0IGtFeHBy
STh4MTZSZXBsYWNlTGFuZSA9IDB4MTc7CitsZXQga0V4cHJJMTZ4OEV4dHJhY3RMYW5lUyA9IDB4
MTg7CitsZXQga0V4cHJJMTZ4OEV4dHJhY3RMYW5lVSA9IDB4MTk7CitsZXQga0V4cHJJMTZ4OFJl
cGxhY2VMYW5lID0gMHgxYTsKK2xldCBrRXhwckkzMng0RXh0cmFjdExhbmUgPSAweDFiOworbGV0
IGtFeHBySTMyeDRSZXBsYWNlTGFuZSA9IDB4MWM7CitsZXQga0V4cHJJNjR4MkV4dHJhY3RMYW5l
ID0gMHgxZDsKK2xldCBrRXhwckk2NHgyUmVwbGFjZUxhbmUgPSAweDFlOworbGV0IGtFeHByRjMy
eDRFeHRyYWN0TGFuZSA9IDB4MWY7CitsZXQga0V4cHJGMzJ4NFJlcGxhY2VMYW5lID0gMHgyMDsK
K2xldCBrRXhwckY2NHgyRXh0cmFjdExhbmUgPSAweDIxOworbGV0IGtFeHByRjY0eDJSZXBsYWNl
TGFuZSA9IDB4MjI7CitsZXQga0V4cHJJOHgxNkVxID0gMHgyMzsKK2xldCBrRXhwckk4eDE2TmUg
PSAweDI0OworbGV0IGtFeHBySTh4MTZMdFMgPSAweDI1OworbGV0IGtFeHBySTh4MTZMdFUgPSAw
eDI2OworbGV0IGtFeHBySTh4MTZHdFMgPSAweDI3OworbGV0IGtFeHBySTh4MTZHdFUgPSAweDI4
OworbGV0IGtFeHBySTh4MTZMZVMgPSAweDI5OworbGV0IGtFeHBySTh4MTZMZVUgPSAweDJhOwor
bGV0IGtFeHBySTh4MTZHZVMgPSAweDJiOworbGV0IGtFeHBySTh4MTZHZVUgPSAweDJjOworbGV0
IGtFeHBySTE2eDhFcSA9IDB4MmQ7CitsZXQga0V4cHJJMTZ4OE5lID0gMHgyZTsKK2xldCBrRXhw
ckkxNng4THRTID0gMHgyZjsKK2xldCBrRXhwckkxNng4THRVID0gMHgzMDsKK2xldCBrRXhwckkx
Nng4R3RTID0gMHgzMTsKK2xldCBrRXhwckkxNng4R3RVID0gMHgzMjsKK2xldCBrRXhwckkxNng4
TGVTID0gMHgzMzsKK2xldCBrRXhwckkxNng4TGVVID0gMHgzNDsKK2xldCBrRXhwckkxNng4R2VT
ID0gMHgzNTsKK2xldCBrRXhwckkxNng4R2VVID0gMHgzNjsKK2xldCBrRXhwckkzMng0RXEgPSAw
eDM3OworbGV0IGtFeHBySTMyeDROZSA9IDB4Mzg7CitsZXQga0V4cHJJMzJ4NEx0UyA9IDB4Mzk7
CitsZXQga0V4cHJJMzJ4NEx0VSA9IDB4M2E7CitsZXQga0V4cHJJMzJ4NEd0UyA9IDB4M2I7Cits
ZXQga0V4cHJJMzJ4NEd0VSA9IDB4M2M7CitsZXQga0V4cHJJMzJ4NExlUyA9IDB4M2Q7CitsZXQg
a0V4cHJJMzJ4NExlVSA9IDB4M2U7CitsZXQga0V4cHJJMzJ4NEdlUyA9IDB4M2Y7CitsZXQga0V4
cHJJMzJ4NEdlVSA9IDB4NDA7CitsZXQga0V4cHJGMzJ4NEVxID0gMHg0MTsKK2xldCBrRXhwckYz
Mng0TmUgPSAweDQyOworbGV0IGtFeHByRjMyeDRMdCA9IDB4NDM7CitsZXQga0V4cHJGMzJ4NEd0
ID0gMHg0NDsKK2xldCBrRXhwckYzMng0TGUgPSAweDQ1OworbGV0IGtFeHByRjMyeDRHZSA9IDB4
NDY7CitsZXQga0V4cHJGNjR4MkVxID0gMHg0NzsKK2xldCBrRXhwckY2NHgyTmUgPSAweDQ4Owor
bGV0IGtFeHByRjY0eDJMdCA9IDB4NDk7CitsZXQga0V4cHJGNjR4Mkd0ID0gMHg0YTsKK2xldCBr
RXhwckY2NHgyTGUgPSAweDRiOworbGV0IGtFeHByRjY0eDJHZSA9IDB4NGM7CitsZXQga0V4cHJT
MTI4Tm90ID0gMHg0ZDsKK2xldCBrRXhwclMxMjhBbmQgPSAweDRlOworbGV0IGtFeHByUzEyOEFu
ZE5vdCA9IDB4NGY7CitsZXQga0V4cHJTMTI4T3IgPSAweDUwOworbGV0IGtFeHByUzEyOFhvciA9
IDB4NTE7CitsZXQga0V4cHJTMTI4U2VsZWN0ID0gMHg1MjsKK2xldCBrRXhwclYxMjhBbnlUcnVl
ID0gMHg1MzsKK2xldCBrRXhwclMxMjhMb2FkOExhbmUgPSAweDU0OworbGV0IGtFeHByUzEyOExv
YWQxNkxhbmUgPSAweDU1OworbGV0IGtFeHByUzEyOExvYWQzMkxhbmUgPSAweDU2OworbGV0IGtF
eHByUzEyOExvYWQ2NExhbmUgPSAweDU3OworbGV0IGtFeHByUzEyOFN0b3JlOExhbmUgPSAweDU4
OworbGV0IGtFeHByUzEyOFN0b3JlMTZMYW5lID0gMHg1OTsKK2xldCBrRXhwclMxMjhTdG9yZTMy
TGFuZSA9IDB4NWE7CitsZXQga0V4cHJTMTI4U3RvcmU2NExhbmUgPSAweDViOworbGV0IGtFeHBy
UzEyOExvYWQzMlplcm8gPSAweDVjOworbGV0IGtFeHByUzEyOExvYWQ2NFplcm8gPSAweDVkOwor
bGV0IGtFeHByRjMyeDREZW1vdGVGNjR4Mlplcm8gPSAweDVlOworbGV0IGtFeHByRjY0eDJQcm9t
b3RlTG93RjMyeDQgPSAweDVmOworbGV0IGtFeHBySTh4MTZBYnMgPSAweDYwOworbGV0IGtFeHBy
STh4MTZOZWcgPSAweDYxOworbGV0IGtFeHBySTh4MTZQb3BjbnQgPSAweDYyOworbGV0IGtFeHBy
STh4MTZBbGxUcnVlID0gMHg2MzsKK2xldCBrRXhwckk4eDE2Qml0TWFzayA9IDB4NjQ7CitsZXQg
a0V4cHJJOHgxNlNDb252ZXJ0STE2eDggPSAweDY1OworbGV0IGtFeHBySTh4MTZVQ29udmVydEkx
Nng4ID0gMHg2NjsKK2xldCBrRXhwckYzMng0Q2VpbCA9IDB4Njc7CitsZXQga0V4cHJGMzJ4NEZs
b29yID0gMHg2ODsKK2xldCBrRXhwckYzMng0VHJ1bmMgPSAweDY5OworbGV0IGtFeHByRjMyeDRO
ZWFyZXN0SW50ID0gMHg2YTsKK2xldCBrRXhwckk4eDE2U2hsID0gMHg2YjsKK2xldCBrRXhwckk4
eDE2U2hyUyA9IDB4NmM7CitsZXQga0V4cHJJOHgxNlNoclUgPSAweDZkOworbGV0IGtFeHBySTh4
MTZBZGQgPSAweDZlOworbGV0IGtFeHBySTh4MTZBZGRTYXRTID0gMHg2ZjsKK2xldCBrRXhwckk4
eDE2QWRkU2F0VSA9IDB4NzA7CitsZXQga0V4cHJJOHgxNlN1YiA9IDB4NzE7CitsZXQga0V4cHJJ
OHgxNlN1YlNhdFMgPSAweDcyOworbGV0IGtFeHBySTh4MTZTdWJTYXRVID0gMHg3MzsKK2xldCBr
RXhwckY2NHgyQ2VpbCA9IDB4NzQ7CitsZXQga0V4cHJGNjR4MkZsb29yID0gMHg3NTsKK2xldCBr
RXhwckk4eDE2TWluUyA9IDB4NzY7CitsZXQga0V4cHJJOHgxNk1pblUgPSAweDc3OworbGV0IGtF
eHBySTh4MTZNYXhTID0gMHg3ODsKK2xldCBrRXhwckk4eDE2TWF4VSA9IDB4Nzk7CitsZXQga0V4
cHJGNjR4MlRydW5jID0gMHg3YTsKK2xldCBrRXhwckk4eDE2Um91bmRpbmdBdmVyYWdlVSA9IDB4
N2I7CitsZXQga0V4cHJJMTZ4OEV4dEFkZFBhaXJ3aXNlSTh4MTZTID0gMHg3YzsKK2xldCBrRXhw
ckkxNng4RXh0QWRkUGFpcndpc2VJOHgxNlUgPSAweDdkOworbGV0IGtFeHBySTMyeDRFeHRBZGRQ
YWlyd2lzZUkxNng4UyA9IDB4N2U7CitsZXQga0V4cHJJMzJ4NEV4dEFkZFBhaXJ3aXNlSTE2eDhV
ID0gMHg3ZjsKK2xldCBrRXhwckkxNng4QWJzID0gMHg4MDsKK2xldCBrRXhwckkxNng4TmVnID0g
MHg4MTsKK2xldCBrRXhwckkxNng4UTE1TXVsUlNhdFMgPSAweDgyOworbGV0IGtFeHBySTE2eDhB
bGxUcnVlID0gMHg4MzsKK2xldCBrRXhwckkxNng4Qml0TWFzayA9IDB4ODQ7CitsZXQga0V4cHJJ
MTZ4OFNDb252ZXJ0STMyeDQgPSAweDg1OworbGV0IGtFeHBySTE2eDhVQ29udmVydEkzMng0ID0g
MHg4NjsKK2xldCBrRXhwckkxNng4U0NvbnZlcnRJOHgxNkxvdyA9IDB4ODc7CitsZXQga0V4cHJJ
MTZ4OFNDb252ZXJ0STh4MTZIaWdoID0gMHg4ODsKK2xldCBrRXhwckkxNng4VUNvbnZlcnRJOHgx
NkxvdyA9IDB4ODk7CitsZXQga0V4cHJJMTZ4OFVDb252ZXJ0STh4MTZIaWdoID0gMHg4YTsKK2xl
dCBrRXhwckkxNng4U2hsID0gMHg4YjsKK2xldCBrRXhwckkxNng4U2hyUyA9IDB4OGM7CitsZXQg
a0V4cHJJMTZ4OFNoclUgPSAweDhkOworbGV0IGtFeHBySTE2eDhBZGQgPSAweDhlOworbGV0IGtF
eHBySTE2eDhBZGRTYXRTID0gMHg4ZjsKK2xldCBrRXhwckkxNng4QWRkU2F0VSA9IDB4OTA7Cits
ZXQga0V4cHJJMTZ4OFN1YiA9IDB4OTE7CitsZXQga0V4cHJJMTZ4OFN1YlNhdFMgPSAweDkyOwor
bGV0IGtFeHBySTE2eDhTdWJTYXRVID0gMHg5MzsKK2xldCBrRXhwckY2NHgyTmVhcmVzdEludCA9
IDB4OTQ7CitsZXQga0V4cHJJMTZ4OE11bCA9IDB4OTU7CitsZXQga0V4cHJJMTZ4OE1pblMgPSAw
eDk2OworbGV0IGtFeHBySTE2eDhNaW5VID0gMHg5NzsKK2xldCBrRXhwckkxNng4TWF4UyA9IDB4
OTg7CitsZXQga0V4cHJJMTZ4OE1heFUgPSAweDk5OworbGV0IGtFeHBySTE2eDhSb3VuZGluZ0F2
ZXJhZ2VVID0gMHg5YjsKK2xldCBrRXhwckkxNng4RXh0TXVsTG93STh4MTZTID0gMHg5YzsKK2xl
dCBrRXhwckkxNng4RXh0TXVsSGlnaEk4eDE2UyA9IDB4OWQ7CitsZXQga0V4cHJJMTZ4OEV4dE11
bExvd0k4eDE2VSA9IDB4OWU7CitsZXQga0V4cHJJMTZ4OEV4dE11bEhpZ2hJOHgxNlUgPSAweDlm
OworbGV0IGtFeHBySTMyeDRBYnMgPSAweGEwOworbGV0IGtFeHBySTMyeDROZWcgPSAweGExOwor
bGV0IGtFeHBySTMyeDRBbGxUcnVlID0gMHhhMzsKK2xldCBrRXhwckkzMng0Qml0TWFzayA9IDB4
YTQ7CitsZXQga0V4cHJJMzJ4NFNDb252ZXJ0STE2eDhMb3cgPSAweGE3OworbGV0IGtFeHBySTMy
eDRTQ29udmVydEkxNng4SGlnaCA9IDB4YTg7CitsZXQga0V4cHJJMzJ4NFVDb252ZXJ0STE2eDhM
b3cgPSAweGE5OworbGV0IGtFeHBySTMyeDRVQ29udmVydEkxNng4SGlnaCA9IDB4YWE7CitsZXQg
a0V4cHJJMzJ4NFNobCA9IDB4YWI7CitsZXQga0V4cHJJMzJ4NFNoclMgPSAweGFjOworbGV0IGtF
eHBySTMyeDRTaHJVID0gMHhhZDsKK2xldCBrRXhwckkzMng0QWRkID0gMHhhZTsKK2xldCBrRXhw
ckkzMng0U3ViID0gMHhiMTsKK2xldCBrRXhwckkzMng0TXVsID0gMHhiNTsKK2xldCBrRXhwckkz
Mng0TWluUyA9IDB4YjY7CitsZXQga0V4cHJJMzJ4NE1pblUgPSAweGI3OworbGV0IGtFeHBySTMy
eDRNYXhTID0gMHhiODsKK2xldCBrRXhwckkzMng0TWF4VSA9IDB4Yjk7CitsZXQga0V4cHJJMzJ4
NERvdEkxNng4UyA9IDB4YmE7CitsZXQga0V4cHJJMzJ4NEV4dE11bExvd0kxNng4UyA9IDB4YmM7
CitsZXQga0V4cHJJMzJ4NEV4dE11bEhpZ2hJMTZ4OFMgPSAweGJkOworbGV0IGtFeHBySTMyeDRF
eHRNdWxMb3dJMTZ4OFUgPSAweGJlOworbGV0IGtFeHBySTMyeDRFeHRNdWxIaWdoSTE2eDhVID0g
MHhiZjsKK2xldCBrRXhwckk2NHgyQWJzID0gMHhjMDsKK2xldCBrRXhwckk2NHgyTmVnID0gMHhj
MTsKK2xldCBrRXhwckk2NHgyQWxsVHJ1ZSA9IDB4YzM7CitsZXQga0V4cHJJNjR4MkJpdE1hc2sg
PSAweGM0OworbGV0IGtFeHBySTY0eDJTQ29udmVydEkzMng0TG93ID0gMHhjNzsKK2xldCBrRXhw
ckk2NHgyU0NvbnZlcnRJMzJ4NEhpZ2ggPSAweGM4OworbGV0IGtFeHBySTY0eDJVQ29udmVydEkz
Mng0TG93ID0gMHhjOTsKK2xldCBrRXhwckk2NHgyVUNvbnZlcnRJMzJ4NEhpZ2ggPSAweGNhOwor
bGV0IGtFeHBySTY0eDJTaGwgPSAweGNiOworbGV0IGtFeHBySTY0eDJTaHJTID0gMHhjYzsKK2xl
dCBrRXhwckk2NHgyU2hyVSA9IDB4Y2Q7CitsZXQga0V4cHJJNjR4MkFkZCA9IDB4Y2U7CitsZXQg
a0V4cHJJNjR4MlN1YiA9IDB4ZDE7CitsZXQga0V4cHJJNjR4Mk11bCA9IDB4ZDU7CitsZXQga0V4
cHJJNjR4MkVxID0gMHhkNjsKK2xldCBrRXhwckk2NHgyTmUgPSAweGQ3OworbGV0IGtFeHBySTY0
eDJMdFMgPSAweGQ4OworbGV0IGtFeHBySTY0eDJHdFMgPSAweGQ5OworbGV0IGtFeHBySTY0eDJM
ZVMgPSAweGRhOworbGV0IGtFeHBySTY0eDJHZVMgPSAweGRiOworbGV0IGtFeHBySTY0eDJFeHRN
dWxMb3dJMzJ4NFMgPSAweGRjOworbGV0IGtFeHBySTY0eDJFeHRNdWxIaWdoSTMyeDRTID0gMHhk
ZDsKK2xldCBrRXhwckk2NHgyRXh0TXVsTG93STMyeDRVID0gMHhkZTsKK2xldCBrRXhwckk2NHgy
RXh0TXVsSGlnaEkzMng0VSA9IDB4ZGY7CitsZXQga0V4cHJGMzJ4NEFicyA9IDB4ZTA7CitsZXQg
a0V4cHJGMzJ4NE5lZyA9IDB4ZTE7CitsZXQga0V4cHJGMzJ4NFNxcnQgPSAweGUzOworbGV0IGtF
eHByRjMyeDRBZGQgPSAweGU0OworbGV0IGtFeHByRjMyeDRTdWIgPSAweGU1OworbGV0IGtFeHBy
RjMyeDRNdWwgPSAweGU2OworbGV0IGtFeHByRjMyeDREaXYgPSAweGU3OworbGV0IGtFeHByRjMy
eDRNaW4gPSAweGU4OworbGV0IGtFeHByRjMyeDRNYXggPSAweGU5OworbGV0IGtFeHByRjMyeDRQ
bWluID0gMHhlYTsKK2xldCBrRXhwckYzMng0UG1heCA9IDB4ZWI7CitsZXQga0V4cHJGNjR4MkFi
cyA9IDB4ZWM7CitsZXQga0V4cHJGNjR4Mk5lZyA9IDB4ZWQ7CitsZXQga0V4cHJGNjR4MlNxcnQg
PSAweGVmOworbGV0IGtFeHByRjY0eDJBZGQgPSAweGYwOworbGV0IGtFeHByRjY0eDJTdWIgPSAw
eGYxOworbGV0IGtFeHByRjY0eDJNdWwgPSAweGYyOworbGV0IGtFeHByRjY0eDJEaXYgPSAweGYz
OworbGV0IGtFeHByRjY0eDJNaW4gPSAweGY0OworbGV0IGtFeHByRjY0eDJNYXggPSAweGY1Owor
bGV0IGtFeHByRjY0eDJQbWluID0gMHhmNjsKK2xldCBrRXhwckY2NHgyUG1heCA9IDB4Zjc7Cits
ZXQga0V4cHJJMzJ4NFNDb252ZXJ0RjMyeDQgPSAweGY4OworbGV0IGtFeHBySTMyeDRVQ29udmVy
dEYzMng0ID0gMHhmOTsKK2xldCBrRXhwckYzMng0U0NvbnZlcnRJMzJ4NCA9IDB4ZmE7CitsZXQg
a0V4cHJGMzJ4NFVDb252ZXJ0STMyeDQgPSAweGZiOworbGV0IGtFeHBySTMyeDRUcnVuY1NhdEY2
NHgyU1plcm8gPSAweGZjOworbGV0IGtFeHBySTMyeDRUcnVuY1NhdEY2NHgyVVplcm8gPSAweGZk
OworbGV0IGtFeHByRjY0eDJDb252ZXJ0TG93STMyeDRTID0gMHhmZTsKK2xldCBrRXhwckY2NHgy
Q29udmVydExvd0kzMng0VSA9IDB4ZmY7CisKKy8vIENvbXBpbGF0aW9uIGhpbnQgY29uc3RhbnRz
LgorbGV0IGtDb21waWxhdGlvbkhpbnRTdHJhdGVneURlZmF1bHQgPSAweDAwOworbGV0IGtDb21w
aWxhdGlvbkhpbnRTdHJhdGVneUxhenkgPSAweDAxOworbGV0IGtDb21waWxhdGlvbkhpbnRTdHJh
dGVneUVhZ2VyID0gMHgwMjsKK2xldCBrQ29tcGlsYXRpb25IaW50U3RyYXRlZ3lMYXp5QmFzZWxp
bmVFYWdlclRvcFRpZXIgPSAweDAzOworbGV0IGtDb21waWxhdGlvbkhpbnRUaWVyRGVmYXVsdCA9
IDB4MDA7CitsZXQga0NvbXBpbGF0aW9uSGludFRpZXJCYXNlbGluZSA9IDB4MDE7CitsZXQga0Nv
bXBpbGF0aW9uSGludFRpZXJPcHRpbWl6ZWQgPSAweDAyOworCitsZXQga1RyYXBVbnJlYWNoYWJs
ZSA9IDA7CitsZXQga1RyYXBNZW1PdXRPZkJvdW5kcyA9IDE7CitsZXQga1RyYXBEaXZCeVplcm8g
PSAyOworbGV0IGtUcmFwRGl2VW5yZXByZXNlbnRhYmxlID0gMzsKK2xldCBrVHJhcFJlbUJ5WmVy
byA9IDQ7CitsZXQga1RyYXBGbG9hdFVucmVwcmVzZW50YWJsZSA9IDU7CitsZXQga1RyYXBUYWJs
ZU91dE9mQm91bmRzID0gNjsKK2xldCBrVHJhcEZ1bmNTaWdNaXNtYXRjaCA9IDc7CitsZXQga1Ry
YXBVbmFsaWduZWRBY2Nlc3MgPSA4OworbGV0IGtUcmFwRGF0YVNlZ21lbnREcm9wcGVkID0gOTsK
K2xldCBrVHJhcEVsZW1TZWdtZW50RHJvcHBlZCA9IDEwOworbGV0IGtUcmFwUmV0aHJvd051bGwg
PSAxMTsKKworbGV0IGtUcmFwTXNncyA9IFsKKyAgL1VucmVhY2hhYmxlLywgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAtLQorICAnbWVtb3J5IGFjY2VzcyBvdXQgb2YgYm91
bmRzJywgICAgICAgICAgICAgICAgICAgIC8vIC0tCisgIC9EaXZpc2lvbiBieSB6ZXJvLywgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgJ2RpdmlkZSByZXN1bHQgdW5yZXBy
ZXNlbnRhYmxlJywgICAgICAgICAgICAgICAgICAvLyAtLQorICAncmVtYWluZGVyIGJ5IHplcm8n
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdmbG9hdCB1bnJlcHJlc2Vu
dGFibGUgaW4gaW50ZWdlciByYW5nZScsICAgICAgICAgLy8gLS0KKyAgJ3RhYmxlIGluZGV4IGlz
IG91dCBvZiBib3VuZHMnLCAgICAgICAgICAgICAgICAgICAvLyAtLQorICAnbnVsbCBmdW5jdGlv
biBvciBmdW5jdGlvbiBzaWduYXR1cmUgbWlzbWF0Y2gnLCAgIC8vIC0tCisgICdvcGVyYXRpb24g
ZG9lcyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgYWNjZXNzZXMnLCAgLy8gLS0KKyAgJ2RhdGEgc2Vn
bWVudCBoYXMgYmVlbiBkcm9wcGVkJywgICAgICAgICAgICAgICAgICAvLyAtLQorICAnZWxlbWVu
dCBzZWdtZW50IGhhcyBiZWVuIGRyb3BwZWQnLCAgICAgICAgICAgICAgIC8vIC0tCisgICdyZXRo
cm93aW5nIG51bGwgdmFsdWUnICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0KK107CisK
Ky8vIFRoaXMgcmVxdWlyZXMgdGVzdC9tanN1bml0L21qc3VuaXQuanMuCitmdW5jdGlvbiBhc3Nl
cnRUcmFwcyh0cmFwLCBjb2RlKSB7CisgIGFzc2VydFRocm93cyhjb2RlLCBXZWJBc3NlbWJseS5S
dW50aW1lRXJyb3IsIGtUcmFwTXNnc1t0cmFwXSk7Cit9CisKK2NsYXNzIEJpbmFyeSB7CisgIGNv
bnN0cnVjdG9yKCkgeworICAgIHRoaXMubGVuZ3RoID0gMDsKKyAgICB0aGlzLmJ1ZmZlciA9IG5l
dyBVaW50OEFycmF5KDgxOTIpOworICB9CisKKyAgZW5zdXJlX3NwYWNlKG5lZWRlZCkgeworICAg
IGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggLSB0aGlzLmxlbmd0aCA+PSBuZWVkZWQpIHJldHVybjsK
KyAgICBsZXQgbmV3X2NhcGFjaXR5ID0gdGhpcy5idWZmZXIubGVuZ3RoICogMjsKKyAgICB3aGls
ZSAobmV3X2NhcGFjaXR5IC0gdGhpcy5sZW5ndGggPCBuZWVkZWQpIG5ld19jYXBhY2l0eSAqPSAy
OworICAgIGxldCBuZXdfYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkobmV3X2NhcGFjaXR5KTsKKyAg
ICBuZXdfYnVmZmVyLnNldCh0aGlzLmJ1ZmZlcik7CisgICAgdGhpcy5idWZmZXIgPSBuZXdfYnVm
ZmVyOworICB9CisKKyAgdHJ1bmNfYnVmZmVyKCkgeworICAgIHJldHVybiBuZXcgVWludDhBcnJh
eSh0aGlzLmJ1ZmZlci5idWZmZXIsIDAsIHRoaXMubGVuZ3RoKTsKKyAgfQorCisgIHJlc2V0KCkg
eworICAgIHRoaXMubGVuZ3RoID0gMDsKKyAgfQorCisgIGVtaXRfdTgodmFsKSB7CisgICAgdGhp
cy5lbnN1cmVfc3BhY2UoMSk7CisgICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWw7
CisgIH0KKworICBlbWl0X3UxNih2YWwpIHsKKyAgICB0aGlzLmVuc3VyZV9zcGFjZSgyKTsKKyAg
ICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbDsKKyAgICB0aGlzLmJ1ZmZlclt0aGlz
Lmxlbmd0aCsrXSA9IHZhbCA+PiA4OworICB9CisKKyAgZW1pdF91MzIodmFsKSB7CisgICAgdGhp
cy5lbnN1cmVfc3BhY2UoNCk7CisgICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWw7
CisgICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWwgPj4gODsKKyAgICB0aGlzLmJ1
ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbCA+PiAxNjsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxl
bmd0aCsrXSA9IHZhbCA+PiAyNDsKKyAgfQorCisgIGVtaXRfbGViX3UodmFsLCBtYXhfbGVuKSB7
CisgICAgdGhpcy5lbnN1cmVfc3BhY2UobWF4X2xlbik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCBtYXhfbGVuOyArK2kpIHsKKyAgICAgIGxldCB2ID0gdmFsICYgMHhmZjsKKyAgICAgIHZhbCA9
IHZhbCA+Pj4gNzsKKyAgICAgIGlmICh2YWwgPT0gMCkgeworICAgICAgICB0aGlzLmJ1ZmZlclt0
aGlzLmxlbmd0aCsrXSA9IHY7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHRoaXMu
YnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdiB8IDB4ODA7CisgICAgfQorICAgIHRocm93IG5ldyBF
cnJvcignTGViIHZhbHVlIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJyArIG1heF9sZW4pOwor
ICB9CisKKyAgZW1pdF91MzJ2KHZhbCkgeworICAgIHRoaXMuZW1pdF9sZWJfdSh2YWwsIGtNYXhW
YXJJbnQzMlNpemUpOworICB9CisKKyAgZW1pdF91NjR2KHZhbCkgeworICAgIHRoaXMuZW1pdF9s
ZWJfdSh2YWwsIGtNYXhWYXJJbnQ2NFNpemUpOworICB9CisKKyAgZW1pdF9ieXRlcyhkYXRhKSB7
CisgICAgdGhpcy5lbnN1cmVfc3BhY2UoZGF0YS5sZW5ndGgpOworICAgIHRoaXMuYnVmZmVyLnNl
dChkYXRhLCB0aGlzLmxlbmd0aCk7CisgICAgdGhpcy5sZW5ndGggKz0gZGF0YS5sZW5ndGg7Cisg
IH0KKworICBlbWl0X3N0cmluZyhzdHJpbmcpIHsKKyAgICAvLyBXaGVuIHRlc3RpbmcgaWxsZWdh
bCBuYW1lcywgd2UgcGFzcyBhIGJ5dGUgYXJyYXkgZGlyZWN0bHkuCisgICAgaWYgKHN0cmluZyBp
bnN0YW5jZW9mIEFycmF5KSB7CisgICAgICB0aGlzLmVtaXRfdTMydihzdHJpbmcubGVuZ3RoKTsK
KyAgICAgIHRoaXMuZW1pdF9ieXRlcyhzdHJpbmcpOworICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIFRoaXMgaXMgdGhlIGhhY2t5IHdheSB0byBjb252ZXJ0IGEgSmF2YVNjcmlwdCBzdHJp
bmcgdG8gYSBVVEY4IGVuY29kZWQKKyAgICAvLyBzdHJpbmcgb25seSBjb250YWluaW5nIHNpbmds
ZS1ieXRlIGNoYXJhY3RlcnMuCisgICAgbGV0IHN0cmluZ191dGY4ID0gdW5lc2NhcGUoZW5jb2Rl
VVJJQ29tcG9uZW50KHN0cmluZykpOworICAgIHRoaXMuZW1pdF91MzJ2KHN0cmluZ191dGY4Lmxl
bmd0aCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdfdXRmOC5sZW5ndGg7IGkrKykg
eworICAgICAgdGhpcy5lbWl0X3U4KHN0cmluZ191dGY4LmNoYXJDb2RlQXQoaSkpOworICAgIH0K
KyAgfQorCisgIGVtaXRfaGVhcF90eXBlKGhlYXBfdHlwZSkgeworICAgIHRoaXMuZW1pdF9ieXRl
cyh3YXNtU2lnbmVkTGViKGhlYXBfdHlwZSwga01heFZhckludDMyU2l6ZSkpOworICB9CisKKyAg
ZW1pdF90eXBlKHR5cGUpIHsKKyAgICBpZiAoKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVyJykgewor
ICAgICAgdGhpcy5lbWl0X3U4KHR5cGUgPj0gMCA/IHR5cGUgOiB0eXBlICYga0xlYjEyOE1hc2sp
OworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLmVtaXRfdTgodHlwZS5vcGNvZGUpOworICAgICAg
aWYgKCdkZXB0aCcgaW4gdHlwZSkgdGhpcy5lbWl0X3U4KHR5cGUuZGVwdGgpOworICAgICAgdGhp
cy5lbWl0X2hlYXBfdHlwZSh0eXBlLmhlYXBfdHlwZSk7CisgICAgfQorICB9CisKKyAgZW1pdF9p
bml0X2V4cHJfcmVjdXJzaXZlKGV4cHIpIHsKKyAgICBzd2l0Y2ggKGV4cHIua2luZCkgeworICAg
ICAgY2FzZSBrRXhwckdsb2JhbEdldDoKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtFeHByR2xvYmFs
R2V0KTsKKyAgICAgICAgdGhpcy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBrRXhwckkzMkNvbnN0OgorICAgICAgICB0aGlzLmVtaXRfYnl0ZXMod2Fz
bUkzMkNvbnN0KGV4cHIudmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHBy
STY0Q29uc3Q6CisgICAgICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNtSTY0Q29uc3QoZXhwci52YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJGMzJDb25zdDoKKyAgICAgICAg
dGhpcy5lbWl0X2J5dGVzKHdhc21GMzJDb25zdChleHByLnZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBrRXhwckY2NENvbnN0OgorICAgICAgICB0aGlzLmVtaXRfYnl0ZXMod2Fz
bUY2NENvbnN0KGV4cHIudmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtTaW1k
UHJlZml4OgorICAgICAgICB0aGlzLmVtaXRfYnl0ZXMod2FzbVMxMjhDb25zdChleHByLnZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwclJlZkZ1bmM6CisgICAgICAgIHRo
aXMuZW1pdF91OChrRXhwclJlZkZ1bmMpOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZh
bHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByUmVmTnVsbDoKKyAgICAgICAg
dGhpcy5lbWl0X3U4KGtFeHByUmVmTnVsbCk7CisgICAgICAgIHRoaXMuZW1pdF9oZWFwX3R5cGUo
ZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwclN0cnVjdE5ldzoK
KyAgICAgIGNhc2Uga0V4cHJTdHJ1Y3ROZXdXaXRoUnR0OgorICAgICAgY2FzZSBrRXhwclN0cnVj
dE5ld0RlZmF1bHQ6CisgICAgICBjYXNlIGtFeHByU3RydWN0TmV3RGVmYXVsdFdpdGhSdHQ6Cisg
ICAgICAgIGZvciAobGV0IG9wZXJhbmQgb2YgZXhwci5vcGVyYW5kcykgeworICAgICAgICAgIHRo
aXMuZW1pdF9pbml0X2V4cHJfcmVjdXJzaXZlKG9wZXJhbmQpOworICAgICAgICB9CisgICAgICAg
IHRoaXMuZW1pdF91OChrR0NQcmVmaXgpOworICAgICAgICB0aGlzLmVtaXRfdTgoZXhwci5raW5k
KTsKKyAgICAgICAgdGhpcy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBrRXhwckFycmF5SW5pdDoKKyAgICAgIGNhc2Uga0V4cHJBcnJheUluaXRTdGF0
aWM6CisgICAgICAgIGZvciAobGV0IG9wZXJhbmQgb2YgZXhwci5vcGVyYW5kcykgeworICAgICAg
ICAgIHRoaXMuZW1pdF9pbml0X2V4cHJfcmVjdXJzaXZlKG9wZXJhbmQpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuZW1pdF91OChrR0NQcmVmaXgpOworICAgICAgICB0aGlzLmVtaXRfdTgoZXhw
ci5raW5kKTsKKyAgICAgICAgdGhpcy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIHRo
aXMuZW1pdF91MzJ2KGV4cHIub3BlcmFuZHMubGVuZ3RoIC0gMSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBrRXhwclJ0dENhbm9uOgorICAgICAgICB0aGlzLmVtaXRfdTgoa0dDUHJlZml4
KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtFeHByUnR0Q2Fub24pOworICAgICAgICB0aGlzLmVt
aXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByUnR0
U3ViOgorICAgICAgICB0aGlzLmVtaXRfaW5pdF9leHByX3JlY3Vyc2l2ZShleHByLnBhcmVudCk7
CisgICAgICAgIHRoaXMuZW1pdF91OChrR2NQcmVmaXgpOworICAgICAgICB0aGlzLmVtaXRfdTgo
a0V4cHJSdHRTdWIpOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByUnR0RnJlc2hTdWI6CisgICAgICAgIHRoaXMuZW1p
dF9pbml0X2V4cHJfcmVjdXJzaXZlKGV4cHIucGFyZW50KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4
KGtHY1ByZWZpeCk7CisgICAgICAgIHRoaXMuZW1pdF91OChrRXhwclJ0dEZyZXNoU3ViKTsKKyAg
ICAgICAgdGhpcy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgfQorCisgIGVtaXRfaW5pdF9leHByKGV4cHIpIHsKKyAgICB0aGlzLmVtaXRfaW5pdF9leHBy
X3JlY3Vyc2l2ZShleHByKTsKKyAgICB0aGlzLmVtaXRfdTgoa0V4cHJFbmQpOworICB9CisKKyAg
ZW1pdF9oZWFkZXIoKSB7CisgICAgdGhpcy5lbWl0X2J5dGVzKFsKKyAgICAgIGtXYXNtSDAsIGtX
YXNtSDEsIGtXYXNtSDIsIGtXYXNtSDMsIGtXYXNtVjAsIGtXYXNtVjEsIGtXYXNtVjIsIGtXYXNt
VjMKKyAgICBdKTsKKyAgfQorCisgIGVtaXRfc2VjdGlvbihzZWN0aW9uX2NvZGUsIGNvbnRlbnRf
Z2VuZXJhdG9yKSB7CisgICAgLy8gRW1pdCBzZWN0aW9uIG5hbWUuCisgICAgdGhpcy5lbWl0X3U4
KHNlY3Rpb25fY29kZSk7CisgICAgLy8gRW1pdCB0aGUgc2VjdGlvbiB0byBhIHRlbXBvcmFyeSBi
dWZmZXI6IGl0cyBmdWxsIGxlbmd0aCBpc24ndCBrbm93IHlldC4KKyAgICBjb25zdCBzZWN0aW9u
ID0gbmV3IEJpbmFyeTsKKyAgICBjb250ZW50X2dlbmVyYXRvcihzZWN0aW9uKTsKKyAgICAvLyBF
bWl0IHNlY3Rpb24gbGVuZ3RoLgorICAgIHRoaXMuZW1pdF91MzJ2KHNlY3Rpb24ubGVuZ3RoKTsK
KyAgICAvLyBDb3B5IHRoZSB0ZW1wb3JhcnkgYnVmZmVyLgorICAgIC8vIEF2b2lkIHNwcmVhZCBi
ZWNhdXNlIHtzZWN0aW9ufSBjYW4gYmUgaHVnZS4KKyAgICB0aGlzLmVtaXRfYnl0ZXMoc2VjdGlv
bi50cnVuY19idWZmZXIoKSk7CisgIH0KK30KKworY2xhc3MgV2FzbUZ1bmN0aW9uQnVpbGRlciB7
CisgIC8vIEVuY29kaW5nIG9mIGxvY2FsIG5hbWVzOiBhIHN0cmluZyBjb3JyZXNwb25kcyB0byBh
IGxvY2FsIG5hbWUsCisgIC8vIGEgbnVtYmVyIG4gY29ycmVzcG9uZHMgdG8gbiB1bmRlZmluZWQg
bmFtZXMuCisgIGNvbnN0cnVjdG9yKG1vZHVsZSwgbmFtZSwgdHlwZV9pbmRleCwgYXJnX25hbWVz
KSB7CisgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7CisgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAg
ICB0aGlzLnR5cGVfaW5kZXggPSB0eXBlX2luZGV4OworICAgIHRoaXMuYm9keSA9IFtdOworICAg
IHRoaXMubG9jYWxzID0gW107CisgICAgdGhpcy5sb2NhbF9uYW1lcyA9IGFyZ19uYW1lczsKKyAg
ICB0aGlzLmJvZHlfb2Zmc2V0ID0gdW5kZWZpbmVkOyAgLy8gTm90IHZhbGlkIHVudGlsIG1vZHVs
ZSBpcyBzZXJpYWxpemVkLgorICB9CisKKyAgbnVtTG9jYWxOYW1lcygpIHsKKyAgICBsZXQgbnVt
X2xvY2FsX25hbWVzID0gMDsKKyAgICBmb3IgKGxldCBsb2NfbmFtZSBvZiB0aGlzLmxvY2FsX25h
bWVzKSB7CisgICAgICBpZiAodHlwZW9mIGxvY19uYW1lID09ICdzdHJpbmcnKSArK251bV9sb2Nh
bF9uYW1lczsKKyAgICB9CisgICAgcmV0dXJuIG51bV9sb2NhbF9uYW1lczsKKyAgfQorCisgIGV4
cG9ydEFzKG5hbWUpIHsKKyAgICB0aGlzLm1vZHVsZS5hZGRFeHBvcnQobmFtZSwgdGhpcy5pbmRl
eCk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBleHBvcnRGdW5jKCkgeworICAgIHRoaXMu
ZXhwb3J0QXModGhpcy5uYW1lKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHNldENvbXBp
bGF0aW9uSGludChzdHJhdGVneSwgYmFzZWxpbmVUaWVyLCB0b3BUaWVyKSB7CisgICAgdGhpcy5t
b2R1bGUuc2V0Q29tcGlsYXRpb25IaW50KHN0cmF0ZWd5LCBiYXNlbGluZVRpZXIsIHRvcFRpZXIs
IHRoaXMuaW5kZXgpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRkQm9keShib2R5KSB7
CisgICAgZm9yIChsZXQgYiBvZiBib2R5KSB7CisgICAgICBpZiAodHlwZW9mIGIgIT09ICdudW1i
ZXInIHx8IChiICYgKH4weEZGKSkgIT09IDApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKAor
ICAgICAgICAgICAgJ2ludmFsaWQgYm9keSAoZW50cmllcyBtdXN0IGJlIDggYml0IG51bWJlcnMp
OiAnICsgYm9keSk7CisgICAgICB9CisgICAgfQorICAgIHRoaXMuYm9keSA9IGJvZHkuc2xpY2Uo
KTsKKyAgICAvLyBBdXRvbWF0aWNhbGx5IGFkZCB0aGUgZW5kIGZvciB0aGUgZnVuY3Rpb24gYmxv
Y2sgdG8gdGhlIGJvZHkuCisgICAgdGhpcy5ib2R5LnB1c2goa0V4cHJFbmQpOworICAgIHJldHVy
biB0aGlzOworICB9CisKKyAgYWRkQm9keVdpdGhFbmQoYm9keSkgeworICAgIHRoaXMuYm9keSA9
IGJvZHk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBnZXROdW1Mb2NhbHMoKSB7CisgICAg
bGV0IHRvdGFsX2xvY2FscyA9IDA7CisgICAgZm9yIChsZXQgbCBvZiB0aGlzLmxvY2Fscykgewor
ICAgICAgdG90YWxfbG9jYWxzICs9IGwuY291bnQKKyAgICB9CisgICAgcmV0dXJuIHRvdGFsX2xv
Y2FsczsKKyAgfQorCisgIGFkZExvY2Fscyh0eXBlLCBjb3VudCwgbmFtZXMpIHsKKyAgICB0aGlz
LmxvY2Fscy5wdXNoKHt0eXBlOiB0eXBlLCBjb3VudDogY291bnR9KTsKKyAgICBuYW1lcyA9IG5h
bWVzIHx8IFtdOworICAgIGlmIChuYW1lcy5sZW5ndGggPiBjb3VudCkgdGhyb3cgbmV3IEVycm9y
KCd0b28gbWFueSBsb2NhbHMgbmFtZXMgZ2l2ZW4nKTsKKyAgICB0aGlzLmxvY2FsX25hbWVzLnB1
c2goLi4ubmFtZXMpOworICAgIGlmIChjb3VudCA+IG5hbWVzLmxlbmd0aCkgdGhpcy5sb2NhbF9u
YW1lcy5wdXNoKGNvdW50IC0gbmFtZXMubGVuZ3RoKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQor
CisgIGVuZCgpIHsKKyAgICByZXR1cm4gdGhpcy5tb2R1bGU7CisgIH0KK30KKworY2xhc3MgV2Fz
bUluaXRFeHByIHsKKyAgc3RhdGljIEkzMkNvbnN0KHZhbHVlKSB7CisgICAgcmV0dXJuIHtraW5k
OiBrRXhwckkzMkNvbnN0LCB2YWx1ZTogdmFsdWV9OworICB9CisgIHN0YXRpYyBJNjRDb25zdCh2
YWx1ZSkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJJNjRDb25zdCwgdmFsdWU6IHZhbHVlfTsK
KyAgfQorICBzdGF0aWMgRjMyQ29uc3QodmFsdWUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHBy
RjMyQ29uc3QsIHZhbHVlOiB2YWx1ZX07CisgIH0KKyAgc3RhdGljIEY2NENvbnN0KHZhbHVlKSB7
CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckY2NENvbnN0LCB2YWx1ZTogdmFsdWV9OworICB9Cisg
IHN0YXRpYyBTMTI4Q29uc3QodmFsdWUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtTaW1kUHJlZml4
LCB2YWx1ZTogdmFsdWV9OworICB9CisgIHN0YXRpYyBHbG9iYWxHZXQoaW5kZXgpIHsKKyAgICBy
ZXR1cm4ge2tpbmQ6IGtFeHByR2xvYmFsR2V0LCB2YWx1ZTogaW5kZXh9OworICB9CisgIHN0YXRp
YyBSZWZGdW5jKGluZGV4KSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclJlZkZ1bmMsIHZhbHVl
OiBpbmRleH07CisgIH0KKyAgc3RhdGljIFJlZk51bGwodHlwZSkgeworICAgIHJldHVybiB7a2lu
ZDoga0V4cHJSZWZOdWxsLCB2YWx1ZTogdHlwZX07CisgIH0KKyAgc3RhdGljIFN0cnVjdE5ld1dp
dGhSdHQodHlwZSwgYXJncykgeworICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXdXaXRo
UnR0LCB2YWx1ZTogdHlwZSwgb3BlcmFuZHM6IGFyZ3N9OworICB9CisgIHN0YXRpYyBTdHJ1Y3RO
ZXcodHlwZSwgYXJncykgeworICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXcsIHZhbHVl
OiB0eXBlLCBvcGVyYW5kczogYXJnc307CisgIH0KKyAgc3RhdGljIFN0cnVjdE5ld0RlZmF1bHRX
aXRoUnR0KHR5cGUsIHJ0dCkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXdEZWZh
dWx0V2l0aFJ0dCwgdmFsdWU6IHR5cGUsIG9wZXJhbmRzOiBbcnR0XX07CisgIH0KKyAgc3RhdGlj
IFN0cnVjdE5ld0RlZmF1bHQodHlwZSkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3RO
ZXdEZWZhdWx0LCB2YWx1ZTogdHlwZSwgb3BlcmFuZHM6IFtdfTsKKyAgfQorICBzdGF0aWMgQXJy
YXlJbml0KHR5cGUsIGFyZ3MpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByQXJyYXlJbml0LCB2
YWx1ZTogdHlwZSwgb3BlcmFuZHM6IGFyZ3N9OworICB9CisgIHN0YXRpYyBBcnJheUluaXRTdGF0
aWModHlwZSwgYXJncykgeworICAgIHJldHVybiB7a2luZDoga0V4cHJBcnJheUluaXRTdGF0aWMs
IHZhbHVlOiB0eXBlLCBvcGVyYW5kczogYXJnc307CisgIH0KKyAgc3RhdGljIFJ0dENhbm9uKHR5
cGUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByUnR0Q2Fub24sIHZhbHVlOiB0eXBlfTsKKyAg
fQorICBzdGF0aWMgUnR0U3ViKHR5cGUsIHBhcmVudCkgeworICAgIHJldHVybiB7a2luZDoga0V4
cHJSdHRTdWIsIHZhbHVlOiB0eXBlLCBwYXJlbnQ6IHBhcmVudH07CisgIH0KKyAgc3RhdGljIFJ0
dEZyZXNoU3ViKHR5cGUsIHBhcmVudCkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJSdHRGcmVz
aFN1YiwgdmFsdWU6IHR5cGUsIHBhcmVudDogcGFyZW50fTsKKyAgfQorCisgIHN0YXRpYyBkZWZh
dWx0Rm9yKHR5cGUpIHsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgIGNhc2Uga1dhc21JMzI6
CisgICAgICAgIHJldHVybiB0aGlzLkkzMkNvbnN0KDApOworICAgICAgY2FzZSBrV2FzbUk2NDoK
KyAgICAgICAgcmV0dXJuIHRoaXMuSTY0Q29uc3QoMCk7CisgICAgICBjYXNlIGtXYXNtRjMyOgor
ICAgICAgICByZXR1cm4gdGhpcy5GMzJDb25zdCgwKTsKKyAgICAgIGNhc2Uga1dhc21GNjQ6Cisg
ICAgICAgIHJldHVybiB0aGlzLkY2NENvbnN0KDApOworICAgICAgY2FzZSBrV2FzbVMxMjg6Cisg
ICAgICAgIHJldHVybiB0aGlzLlMxMjhDb25zdChuZXcgQXJyYXkoMTYpLmZpbGwoMCkpOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKCh0eXBlb2YgdHlwZSkgIT0gJ251bWJlcicgJiYgdHlw
ZS5vcGNvZGUgIT0ga1dhc21PcHRSZWYpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5v
bi1kZWZhdWx0YWJsZSB0eXBlIik7CisgICAgICAgIH0KKyAgICAgICAgbGV0IGhlYXBfdHlwZSA9
ICh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicgPyB0eXBlIDogdHlwZS5oZWFwX3R5cGU7CisgICAg
ICAgIHJldHVybiB0aGlzLlJlZk51bGwoaGVhcF90eXBlKTsKKyAgICB9CisgIH0KK30KKworY2xh
c3MgV2FzbUdsb2JhbEJ1aWxkZXIgeworICAvLyB7aW5pdH0gc2hvdWxkIGJlIGNvbnN0cnVjdGVk
IHdpdGggV2FzbUluaXRFeHByLgorICBjb25zdHJ1Y3Rvcihtb2R1bGUsIHR5cGUsIG11dGFibGUs
IGluaXQpIHsKKyAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKKyAgICB0aGlzLnR5cGUgPSB0eXBl
OworICAgIHRoaXMubXV0YWJsZSA9IG11dGFibGU7CisgICAgdGhpcy5pbml0ID0gaW5pdDsKKyAg
fQorCisgIGV4cG9ydEFzKG5hbWUpIHsKKyAgICB0aGlzLm1vZHVsZS5leHBvcnRzLnB1c2goCisg
ICAgICAgIHtuYW1lOiBuYW1lLCBraW5kOiBrRXh0ZXJuYWxHbG9iYWwsIGluZGV4OiB0aGlzLmlu
ZGV4fSk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KK30KKworY2xhc3MgV2FzbVRhYmxlQnVpbGRl
ciB7CisgIGNvbnN0cnVjdG9yKG1vZHVsZSwgdHlwZSwgaW5pdGlhbF9zaXplLCBtYXhfc2l6ZSwg
aW5pdF9leHByKSB7CisgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7CisgICAgdGhpcy50eXBlID0g
dHlwZTsKKyAgICB0aGlzLmluaXRpYWxfc2l6ZSA9IGluaXRpYWxfc2l6ZTsKKyAgICB0aGlzLmhh
c19tYXggPSBtYXhfc2l6ZSAhPT0gdW5kZWZpbmVkOworICAgIHRoaXMubWF4X3NpemUgPSBtYXhf
c2l6ZTsKKyAgICB0aGlzLmluaXRfZXhwciA9IGluaXRfZXhwcjsKKyAgICB0aGlzLmhhc19pbml0
ID0gaW5pdF9leHByICE9PSB1bmRlZmluZWQ7CisgIH0KKworICBleHBvcnRBcyhuYW1lKSB7Cisg
ICAgdGhpcy5tb2R1bGUuZXhwb3J0cy5wdXNoKAorICAgICAgICB7bmFtZTogbmFtZSwga2luZDog
a0V4dGVybmFsVGFibGUsIGluZGV4OiB0aGlzLmluZGV4fSk7CisgICAgcmV0dXJuIHRoaXM7Cisg
IH0KK30KKworZnVuY3Rpb24gbWFrZUZpZWxkKHR5cGUsIG11dGFiaWxpdHkpIHsKKyAgaWYgKCh0
eXBlb2YgbXV0YWJpbGl0eSkgIT0gJ2Jvb2xlYW4nKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdm
aWVsZCBtdXRhYmlsaXR5IG11c3QgYmUgYm9vbGVhbicpOworICB9CisgIHJldHVybiB7dHlwZTog
dHlwZSwgbXV0YWJpbGl0eTogbXV0YWJpbGl0eX07Cit9CisKK2NsYXNzIFdhc21TdHJ1Y3Qgewor
ICBjb25zdHJ1Y3RvcihmaWVsZHMpIHsKKyAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGRzKSkg
eworICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJ1Y3QgZmllbGRzIG11c3QgYmUgYW4gYXJyYXkn
KTsKKyAgICB9CisgICAgdGhpcy5maWVsZHMgPSBmaWVsZHM7CisgICAgdGhpcy50eXBlX2Zvcm0g
PSBrV2FzbVN0cnVjdFR5cGVGb3JtOworICB9Cit9CisKK2NsYXNzIFdhc21TdHJ1Y3RTdWJ0eXBl
IGV4dGVuZHMgV2FzbVN0cnVjdCB7CisgIGNvbnN0cnVjdG9yKGZpZWxkcywgc3VwZXJ0eXBlX2lk
eCkgeworICAgIHN1cGVyKGZpZWxkcyk7CisgICAgdGhpcy5zdXBlcnR5cGUgPSBzdXBlcnR5cGVf
aWR4OworICAgIHRoaXMudHlwZV9mb3JtID0ga1dhc21TdHJ1Y3RTdWJ0eXBlRm9ybTsKKyAgfQor
fQorCitjbGFzcyBXYXNtQXJyYXkgeworICBjb25zdHJ1Y3Rvcih0eXBlLCBtdXRhYmlsaXR5KSB7
CisgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICBpZiAoIW11dGFiaWxpdHkpIHRocm93IG5ldyBF
cnJvcigiSW1tdXRhYmxlIGFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQiKTsKKyAgICB0aGlz
Lm11dGFiaWxpdHkgPSBtdXRhYmlsaXR5OworICAgIHRoaXMudHlwZV9mb3JtID0ga1dhc21BcnJh
eVR5cGVGb3JtOworICB9Cit9CisKK2NsYXNzIFdhc21BcnJheVN1YnR5cGUgZXh0ZW5kcyBXYXNt
QXJyYXkgeworICBjb25zdHJ1Y3Rvcih0eXBlLCBtdXRhYmlsaXR5LCBzdXBlcnR5cGVfaWR4KSB7
CisgICAgc3VwZXIodHlwZSwgbXV0YWJpbGl0eSk7CisgICAgdGhpcy5zdXBlcnR5cGUgPSBzdXBl
cnR5cGVfaWR4OworICAgIHRoaXMudHlwZV9mb3JtID0ga1dhc21BcnJheVN1YnR5cGVGb3JtOwor
ICB9Cit9CitjbGFzcyBXYXNtRWxlbVNlZ21lbnQgeworICBjb25zdHJ1Y3Rvcih0YWJsZSwgb2Zm
c2V0LCB0eXBlLCBlbGVtZW50cywgaXNfZGVjbCkgeworICAgIHRoaXMudGFibGUgPSB0YWJsZTsK
KyAgICB0aGlzLm9mZnNldCA9IG9mZnNldDsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIHRo
aXMuZWxlbWVudHMgPSBlbGVtZW50czsKKyAgICB0aGlzLmlzX2RlY2wgPSBpc19kZWNsOworICAg
IC8vIEludmFyaWFudCBjaGVja3MuCisgICAgaWYgKCh0YWJsZSA9PT0gdW5kZWZpbmVkKSAhPSAo
b2Zmc2V0ID09PSB1bmRlZmluZWQpKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoImludmFsaWQg
ZWxlbWVudCBzZWdtZW50Iik7CisgICAgfQorICAgIGZvciAobGV0IGVsZW0gb2YgZWxlbWVudHMp
IHsKKyAgICAgIGlmICgoKHR5cGVvZiBlbGVtKSA9PSAnbnVtYmVyJykgIT0gKHR5cGUgPT09IHVu
ZGVmaW5lZCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGVsZW1lbnQiKTsK
KyAgICAgIH0KKyAgICB9CisgIH0KKworICBpc19hY3RpdmUoKSB7CisgICAgcmV0dXJuIHRoaXMu
dGFibGUgIT09IHVuZGVmaW5lZDsKKyAgfQorCisgIGlzX3Bhc3NpdmUoKSB7CisgICAgcmV0dXJu
IHRoaXMudGFibGUgPT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc19kZWNsOworICB9CisKKyAgaXNf
ZGVjbGFyYXRpdmUoKSB7CisgICAgcmV0dXJuIHRoaXMudGFibGUgPT09IHVuZGVmaW5lZCAmJiB0
aGlzLmlzX2RlY2w7CisgIH0KKworICBleHByZXNzaW9uc19hc19lbGVtZW50cygpIHsKKyAgICBy
ZXR1cm4gdGhpcy50eXBlICE9PSB1bmRlZmluZWQ7CisgIH0KK30KKworY2xhc3MgV2FzbU1vZHVs
ZUJ1aWxkZXIgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICB0aGlzLnR5cGVzID0gW107CisgICAg
dGhpcy5pbXBvcnRzID0gW107CisgICAgdGhpcy5leHBvcnRzID0gW107CisgICAgdGhpcy5nbG9i
YWxzID0gW107CisgICAgdGhpcy50YWJsZXMgPSBbXTsKKyAgICB0aGlzLnRhZ3MgPSBbXTsKKyAg
ICB0aGlzLmZ1bmN0aW9ucyA9IFtdOworICAgIHRoaXMuY29tcGlsYXRpb25faGludHMgPSBbXTsK
KyAgICB0aGlzLmVsZW1lbnRfc2VnbWVudHMgPSBbXTsKKyAgICB0aGlzLmRhdGFfc2VnbWVudHMg
PSBbXTsKKyAgICB0aGlzLmV4cGxpY2l0ID0gW107CisgICAgdGhpcy5udW1faW1wb3J0ZWRfZnVu
Y3MgPSAwOworICAgIHRoaXMubnVtX2ltcG9ydGVkX2dsb2JhbHMgPSAwOworICAgIHRoaXMubnVt
X2ltcG9ydGVkX3RhYmxlcyA9IDA7CisgICAgdGhpcy5udW1faW1wb3J0ZWRfdGFncyA9IDA7Cisg
ICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBhZGRTdGFydChzdGFydF9pbmRleCkgeworICAgIHRo
aXMuc3RhcnRfaW5kZXggPSBzdGFydF9pbmRleDsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisg
IGFkZE1lbW9yeShtaW4sIG1heCwgZXhwb3J0ZWQsIHNoYXJlZCkgeworICAgIHRoaXMubWVtb3J5
ID0geworICAgICAgbWluOiBtaW4sCisgICAgICBtYXg6IG1heCwKKyAgICAgIGV4cG9ydGVkOiBl
eHBvcnRlZCwKKyAgICAgIHNoYXJlZDogc2hhcmVkIHx8IGZhbHNlLAorICAgICAgaXNfbWVtb3J5
NjQ6IGZhbHNlCisgICAgfTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZE1lbW9yeTY0
KG1pbiwgbWF4LCBleHBvcnRlZCkgeworICAgIHRoaXMubWVtb3J5ID0geworICAgICAgbWluOiBt
aW4sCisgICAgICBtYXg6IG1heCwKKyAgICAgIGV4cG9ydGVkOiBleHBvcnRlZCwKKyAgICAgIHNo
YXJlZDogZmFsc2UsCisgICAgICBpc19tZW1vcnk2NDogdHJ1ZQorICAgIH07CisgICAgcmV0dXJu
IHRoaXM7CisgIH0KKworICBhZGRFeHBsaWNpdFNlY3Rpb24oYnl0ZXMpIHsKKyAgICB0aGlzLmV4
cGxpY2l0LnB1c2goYnl0ZXMpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgc3RyaW5nVG9C
eXRlcyhuYW1lKSB7CisgICAgdmFyIHJlc3VsdCA9IG5ldyBCaW5hcnkoKTsKKyAgICByZXN1bHQu
ZW1pdF91MzJ2KG5hbWUubGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVu
Z3RoOyBpKyspIHsKKyAgICAgIHJlc3VsdC5lbWl0X3U4KG5hbWUuY2hhckNvZGVBdChpKSk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQudHJ1bmNfYnVmZmVyKCkKKyAgfQorCisgIGNyZWF0ZUN1
c3RvbVNlY3Rpb24obmFtZSwgYnl0ZXMpIHsKKyAgICBuYW1lID0gdGhpcy5zdHJpbmdUb0J5dGVz
KG5hbWUpOworICAgIHZhciBzZWN0aW9uID0gbmV3IEJpbmFyeSgpOworICAgIHNlY3Rpb24uZW1p
dF91OCgwKTsKKyAgICBzZWN0aW9uLmVtaXRfdTMydihuYW1lLmxlbmd0aCArIGJ5dGVzLmxlbmd0
aCk7CisgICAgc2VjdGlvbi5lbWl0X2J5dGVzKG5hbWUpOworICAgIHNlY3Rpb24uZW1pdF9ieXRl
cyhieXRlcyk7CisgICAgcmV0dXJuIHNlY3Rpb24udHJ1bmNfYnVmZmVyKCk7CisgIH0KKworICBh
ZGRDdXN0b21TZWN0aW9uKG5hbWUsIGJ5dGVzKSB7CisgICAgdGhpcy5leHBsaWNpdC5wdXNoKHRo
aXMuY3JlYXRlQ3VzdG9tU2VjdGlvbihuYW1lLCBieXRlcykpOworICB9CisKKyAgYWRkVHlwZSh0
eXBlKSB7CisgICAgdGhpcy50eXBlcy5wdXNoKHR5cGUpOworICAgIHZhciBwbCA9IHR5cGUucGFy
YW1zLmxlbmd0aDsgICAvLyBzaG91bGQgaGF2ZSBwYXJhbXMKKyAgICB2YXIgcmwgPSB0eXBlLnJl
c3VsdHMubGVuZ3RoOyAgLy8gc2hvdWxkIGhhdmUgcmVzdWx0cworICAgIHJldHVybiB0aGlzLnR5
cGVzLmxlbmd0aCAtIDE7CisgIH0KKworICBhZGRTdHJ1Y3QoZmllbGRzKSB7CisgICAgdGhpcy50
eXBlcy5wdXNoKG5ldyBXYXNtU3RydWN0KGZpZWxkcykpOworICAgIHJldHVybiB0aGlzLnR5cGVz
Lmxlbmd0aCAtIDE7CisgIH0KKworICBrR2VuZXJpY1N1cGVyVHlwZSA9IDB4RkZGRkZGRkU7Cisg
IGFkZFN0cnVjdFN1YnR5cGUoZmllbGRzLCBzdXBlcnR5cGVfaWR4ID0gdGhpcy5rR2VuZXJpY1N1
cGVyVHlwZSkgeworICAgIHRoaXMudHlwZXMucHVzaChuZXcgV2FzbVN0cnVjdFN1YnR5cGUoZmll
bGRzLCBzdXBlcnR5cGVfaWR4KSk7CisgICAgcmV0dXJuIHRoaXMudHlwZXMubGVuZ3RoIC0gMTsK
KyAgfQorCisgIGFkZEFycmF5KHR5cGUsIG11dGFiaWxpdHkpIHsKKyAgICB0aGlzLnR5cGVzLnB1
c2gobmV3IFdhc21BcnJheSh0eXBlLCBtdXRhYmlsaXR5KSk7CisgICAgcmV0dXJuIHRoaXMudHlw
ZXMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGFkZEFycmF5U3VidHlwZSh0eXBlLCBtdXRhYmlsaXR5
LCBzdXBlcnR5cGVfaWR4ID0gdGhpcy5rR2VuZXJpY1N1cGVyVHlwZSkgeworICAgIHRoaXMudHlw
ZXMucHVzaChuZXcgV2FzbUFycmF5U3VidHlwZSh0eXBlLCBtdXRhYmlsaXR5LCBzdXBlcnR5cGVf
aWR4KSk7CisgICAgcmV0dXJuIHRoaXMudHlwZXMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGFkZEds
b2JhbCh0eXBlLCBtdXRhYmxlLCBpbml0KSB7CisgICAgaWYgKGluaXQgPT09IHVuZGVmaW5lZCkg
aW5pdCA9IFdhc21Jbml0RXhwci5kZWZhdWx0Rm9yKHR5cGUpOworICAgIGxldCBnbG9iID0gbmV3
IFdhc21HbG9iYWxCdWlsZGVyKHRoaXMsIHR5cGUsIG11dGFibGUsIGluaXQpOworICAgIGdsb2Iu
aW5kZXggPSB0aGlzLmdsb2JhbHMubGVuZ3RoICsgdGhpcy5udW1faW1wb3J0ZWRfZ2xvYmFsczsK
KyAgICB0aGlzLmdsb2JhbHMucHVzaChnbG9iKTsKKyAgICByZXR1cm4gZ2xvYjsKKyAgfQorCisg
IGFkZFRhYmxlKAorICAgICAgdHlwZSwgaW5pdGlhbF9zaXplLCBtYXhfc2l6ZSA9IHVuZGVmaW5l
ZCwgaW5pdF9leHByID0gdW5kZWZpbmVkKSB7CisgICAgaWYgKHR5cGUgPT0ga1dhc21JMzIgfHwg
dHlwZSA9PSBrV2FzbUk2NCB8fCB0eXBlID09IGtXYXNtRjMyIHx8CisgICAgICAgIHR5cGUgPT0g
a1dhc21GNjQgfHwgdHlwZSA9PSBrV2FzbVMxMjggfHwgdHlwZSA9PSBrV2FzbVZvaWQpIHsKKyAg
ICAgIHRocm93IG5ldyBFcnJvcignVGFibGVzIG11c3QgYmUgb2YgYSByZWZlcmVuY2UgdHlwZScp
OworICAgIH0KKyAgICBsZXQgdGFibGUgPSBuZXcgV2FzbVRhYmxlQnVpbGRlcigKKyAgICAgICAg
dGhpcywgdHlwZSwgaW5pdGlhbF9zaXplLCBtYXhfc2l6ZSwgaW5pdF9leHByKTsKKyAgICB0YWJs
ZS5pbmRleCA9IHRoaXMudGFibGVzLmxlbmd0aCArIHRoaXMubnVtX2ltcG9ydGVkX3RhYmxlczsK
KyAgICB0aGlzLnRhYmxlcy5wdXNoKHRhYmxlKTsKKyAgICByZXR1cm4gdGFibGU7CisgIH0KKwor
ICBhZGRUYWcodHlwZSkgeworICAgIGxldCB0eXBlX2luZGV4ID0gKHR5cGVvZiB0eXBlKSA9PSAn
bnVtYmVyJyA/IHR5cGUgOiB0aGlzLmFkZFR5cGUodHlwZSk7CisgICAgbGV0IHRhZ19pbmRleCA9
IHRoaXMudGFncy5sZW5ndGggKyB0aGlzLm51bV9pbXBvcnRlZF90YWdzOworICAgIHRoaXMudGFn
cy5wdXNoKHR5cGVfaW5kZXgpOworICAgIHJldHVybiB0YWdfaW5kZXg7CisgIH0KKworICBhZGRG
dW5jdGlvbihuYW1lLCB0eXBlLCBhcmdfbmFtZXMpIHsKKyAgICBhcmdfbmFtZXMgPSBhcmdfbmFt
ZXMgfHwgW107CisgICAgbGV0IHR5cGVfaW5kZXggPSAodHlwZW9mIHR5cGUpID09ICdudW1iZXIn
ID8gdHlwZSA6IHRoaXMuYWRkVHlwZSh0eXBlKTsKKyAgICBsZXQgbnVtX2FyZ3MgPSB0aGlzLnR5
cGVzW3R5cGVfaW5kZXhdLnBhcmFtcy5sZW5ndGg7CisgICAgaWYgKG51bV9hcmdzIDwgYXJnX25h
bWVzLmxlbmd0aCkKKyAgICAgIHRocm93IG5ldyBFcnJvcigndG9vIG1hbnkgYXJnIG5hbWVzIHBy
b3ZpZGVkJyk7CisgICAgaWYgKG51bV9hcmdzID4gYXJnX25hbWVzLmxlbmd0aCkKKyAgICAgIGFy
Z19uYW1lcy5wdXNoKG51bV9hcmdzIC0gYXJnX25hbWVzLmxlbmd0aCk7CisgICAgbGV0IGZ1bmMg
PSBuZXcgV2FzbUZ1bmN0aW9uQnVpbGRlcih0aGlzLCBuYW1lLCB0eXBlX2luZGV4LCBhcmdfbmFt
ZXMpOworICAgIGZ1bmMuaW5kZXggPSB0aGlzLmZ1bmN0aW9ucy5sZW5ndGggKyB0aGlzLm51bV9p
bXBvcnRlZF9mdW5jczsKKyAgICB0aGlzLmZ1bmN0aW9ucy5wdXNoKGZ1bmMpOworICAgIHJldHVy
biBmdW5jOworICB9CisKKyAgYWRkSW1wb3J0KG1vZHVsZSwgbmFtZSwgdHlwZSkgeworICAgIGlm
ICh0aGlzLmZ1bmN0aW9ucy5sZW5ndGggIT0gMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdJ
bXBvcnRlZCBmdW5jdGlvbnMgbXVzdCBiZSBkZWNsYXJlZCBiZWZvcmUgbG9jYWwgb25lcycpOwor
ICAgIH0KKyAgICBsZXQgdHlwZV9pbmRleCA9ICh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicgPyB0
eXBlIDogdGhpcy5hZGRUeXBlKHR5cGUpOworICAgIHRoaXMuaW1wb3J0cy5wdXNoKHsKKyAgICAg
IG1vZHVsZTogbW9kdWxlLAorICAgICAgbmFtZTogbmFtZSwKKyAgICAgIGtpbmQ6IGtFeHRlcm5h
bEZ1bmN0aW9uLAorICAgICAgdHlwZV9pbmRleDogdHlwZV9pbmRleAorICAgIH0pOworICAgIHJl
dHVybiB0aGlzLm51bV9pbXBvcnRlZF9mdW5jcysrOworICB9CisKKyAgYWRkSW1wb3J0ZWRHbG9i
YWwobW9kdWxlLCBuYW1lLCB0eXBlLCBtdXRhYmxlID0gZmFsc2UpIHsKKyAgICBpZiAodGhpcy5n
bG9iYWxzLmxlbmd0aCAhPSAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcG9ydGVkIGds
b2JhbHMgbXVzdCBiZSBkZWNsYXJlZCBiZWZvcmUgbG9jYWwgb25lcycpOworICAgIH0KKyAgICBs
ZXQgbyA9IHsKKyAgICAgIG1vZHVsZTogbW9kdWxlLAorICAgICAgbmFtZTogbmFtZSwKKyAgICAg
IGtpbmQ6IGtFeHRlcm5hbEdsb2JhbCwKKyAgICAgIHR5cGU6IHR5cGUsCisgICAgICBtdXRhYmxl
OiBtdXRhYmxlCisgICAgfTsKKyAgICB0aGlzLmltcG9ydHMucHVzaChvKTsKKyAgICByZXR1cm4g
dGhpcy5udW1faW1wb3J0ZWRfZ2xvYmFscysrOworICB9CisKKyAgYWRkSW1wb3J0ZWRNZW1vcnko
bW9kdWxlLCBuYW1lLCBpbml0aWFsID0gMCwgbWF4aW11bSwgc2hhcmVkKSB7CisgICAgbGV0IG8g
PSB7CisgICAgICBtb2R1bGU6IG1vZHVsZSwKKyAgICAgIG5hbWU6IG5hbWUsCisgICAgICBraW5k
OiBrRXh0ZXJuYWxNZW1vcnksCisgICAgICBpbml0aWFsOiBpbml0aWFsLAorICAgICAgbWF4aW11
bTogbWF4aW11bSwKKyAgICAgIHNoYXJlZDogc2hhcmVkCisgICAgfTsKKyAgICB0aGlzLmltcG9y
dHMucHVzaChvKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZEltcG9ydGVkVGFibGUo
bW9kdWxlLCBuYW1lLCBpbml0aWFsLCBtYXhpbXVtLCB0eXBlKSB7CisgICAgaWYgKHRoaXMudGFi
bGVzLmxlbmd0aCAhPSAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcG9ydGVkIHRhYmxl
cyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2NhbCBvbmVzJyk7CisgICAgfQorICAgIGxldCBv
ID0geworICAgICAgbW9kdWxlOiBtb2R1bGUsCisgICAgICBuYW1lOiBuYW1lLAorICAgICAga2lu
ZDoga0V4dGVybmFsVGFibGUsCisgICAgICBpbml0aWFsOiBpbml0aWFsLAorICAgICAgbWF4aW11
bTogbWF4aW11bSwKKyAgICAgIHR5cGU6IHR5cGUgfHwga1dhc21GdW5jUmVmCisgICAgfTsKKyAg
ICB0aGlzLmltcG9ydHMucHVzaChvKTsKKyAgICByZXR1cm4gdGhpcy5udW1faW1wb3J0ZWRfdGFi
bGVzKys7CisgIH0KKworICBhZGRJbXBvcnRlZFRhZyhtb2R1bGUsIG5hbWUsIHR5cGUpIHsKKyAg
ICBpZiAodGhpcy50YWdzLmxlbmd0aCAhPSAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lt
cG9ydGVkIHRhZ3MgbXVzdCBiZSBkZWNsYXJlZCBiZWZvcmUgbG9jYWwgb25lcycpOworICAgIH0K
KyAgICBsZXQgdHlwZV9pbmRleCA9ICh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicgPyB0eXBlIDog
dGhpcy5hZGRUeXBlKHR5cGUpOworICAgIGxldCBvID0geworICAgICAgbW9kdWxlOiBtb2R1bGUs
CisgICAgICBuYW1lOiBuYW1lLAorICAgICAga2luZDoga0V4dGVybmFsVGFnLAorICAgICAgdHlw
ZV9pbmRleDogdHlwZV9pbmRleAorICAgIH07CisgICAgdGhpcy5pbXBvcnRzLnB1c2gobyk7Cisg
ICAgcmV0dXJuIHRoaXMubnVtX2ltcG9ydGVkX3RhZ3MrKzsKKyAgfQorCisgIGFkZEV4cG9ydChu
YW1lLCBpbmRleCkgeworICAgIHRoaXMuZXhwb3J0cy5wdXNoKHtuYW1lOiBuYW1lLCBraW5kOiBr
RXh0ZXJuYWxGdW5jdGlvbiwgaW5kZXg6IGluZGV4fSk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0K
KworICBhZGRFeHBvcnRPZktpbmQobmFtZSwga2luZCwgaW5kZXgpIHsKKyAgICBpZiAoaW5kZXgg
PT09IHVuZGVmaW5lZCAmJiBraW5kICE9IGtFeHRlcm5hbFRhYmxlICYmCisgICAgICAgIGtpbmQg
IT0ga0V4dGVybmFsTWVtb3J5KSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAgICAg
J0luZGV4IGZvciBleHBvcnRzIG90aGVyIHRoYW4gdGFibGVzL21lbW9yaWVzIG11c3QgYmUgcHJv
dmlkZWQnKTsKKyAgICB9CisgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBp
bmRleCkgIT0gJ251bWJlcicpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignSW5kZXggZm9yIGV4
cG9ydHMgbXVzdCBiZSBhIG51bWJlcicpCisgICAgfQorICAgIHRoaXMuZXhwb3J0cy5wdXNoKHtu
YW1lOiBuYW1lLCBraW5kOiBraW5kLCBpbmRleDogaW5kZXh9KTsKKyAgICByZXR1cm4gdGhpczsK
KyAgfQorCisgIHNldENvbXBpbGF0aW9uSGludChzdHJhdGVneSwgYmFzZWxpbmVUaWVyLCB0b3BU
aWVyLCBpbmRleCkgeworICAgIHRoaXMuY29tcGlsYXRpb25faGludHNbaW5kZXhdID0geworICAg
ICAgc3RyYXRlZ3k6IHN0cmF0ZWd5LAorICAgICAgYmFzZWxpbmVUaWVyOiBiYXNlbGluZVRpZXIs
CisgICAgICB0b3BUaWVyOiB0b3BUaWVyCisgICAgfTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQor
CisgIGFkZERhdGFTZWdtZW50KGFkZHIsIGRhdGEsIGlzX2dsb2JhbCA9IGZhbHNlKSB7CisgICAg
dGhpcy5kYXRhX3NlZ21lbnRzLnB1c2goCisgICAgICAgIHthZGRyOiBhZGRyLCBkYXRhOiBkYXRh
LCBpc19nbG9iYWw6IGlzX2dsb2JhbCwgaXNfYWN0aXZlOiB0cnVlfSk7CisgICAgcmV0dXJuIHRo
aXMuZGF0YV9zZWdtZW50cy5sZW5ndGggLSAxOworICB9CisKKyAgYWRkUGFzc2l2ZURhdGFTZWdt
ZW50KGRhdGEpIHsKKyAgICB0aGlzLmRhdGFfc2VnbWVudHMucHVzaCh7ZGF0YTogZGF0YSwgaXNf
YWN0aXZlOiBmYWxzZX0pOworICAgIHJldHVybiB0aGlzLmRhdGFfc2VnbWVudHMubGVuZ3RoIC0g
MTsKKyAgfQorCisgIGV4cG9ydE1lbW9yeUFzKG5hbWUpIHsKKyAgICB0aGlzLmV4cG9ydHMucHVz
aCh7bmFtZTogbmFtZSwga2luZDoga0V4dGVybmFsTWVtb3J5LCBpbmRleDogMH0pOworICB9CisK
KyAgLy8ge29mZnNldH0gaXMgYW4gaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbi4KKyAgLy8gSWYge3R5
cGV9IGlzIHVuZGVmaW5lZCwgdGhlbiB7ZWxlbWVudHN9IGFyZSBmdW5jdGlvbiBpbmRpY2VzLiBP
dGhlcndpc2UsCisgIC8vIHRoZXkgYXJlIGluaXRpYWxpemVyIGV4cHJlc3Npb25zLgorICBhZGRB
Y3RpdmVFbGVtZW50U2VnbWVudCh0YWJsZSwgb2Zmc2V0LCBlbGVtZW50cywgdHlwZSkgeworICAg
IHRoaXMuZWxlbWVudF9zZWdtZW50cy5wdXNoKAorICAgICAgICBuZXcgV2FzbUVsZW1TZWdtZW50
KHRhYmxlLCBvZmZzZXQsIHR5cGUsIGVsZW1lbnRzLCBmYWxzZSkpOworICAgIHJldHVybiB0aGlz
LmVsZW1lbnRfc2VnbWVudHMubGVuZ3RoIC0gMTsKKyAgfQorCisgIC8vIElmIHt0eXBlfSBpcyB1
bmRlZmluZWQsIHRoZW4ge2VsZW1lbnRzfSBhcmUgZnVuY3Rpb24gaW5kaWNlcy4gT3RoZXJ3aXNl
LAorICAvLyB0aGV5IGFyZSBpbml0aWFsaXplciBleHByZXNzaW9ucy4KKyAgYWRkUGFzc2l2ZUVs
ZW1lbnRTZWdtZW50KGVsZW1lbnRzLCB0eXBlKSB7CisgICAgdGhpcy5lbGVtZW50X3NlZ21lbnRz
LnB1c2goCisgICAgICBuZXcgV2FzbUVsZW1TZWdtZW50KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0
eXBlLCBlbGVtZW50cywgZmFsc2UpKTsKKyAgICByZXR1cm4gdGhpcy5lbGVtZW50X3NlZ21lbnRz
Lmxlbmd0aCAtIDE7CisgIH0KKworICAvLyBJZiB7dHlwZX0gaXMgdW5kZWZpbmVkLCB0aGVuIHtl
bGVtZW50c30gYXJlIGZ1bmN0aW9uIGluZGljZXMuIE90aGVyd2lzZSwKKyAgLy8gdGhleSBhcmUg
aW5pdGlhbGl6ZXIgZXhwcmVzc2lvbnMuCisgIGFkZERlY2xhcmF0aXZlRWxlbWVudFNlZ21lbnQo
ZWxlbWVudHMsIHR5cGUpIHsKKyAgICB0aGlzLmVsZW1lbnRfc2VnbWVudHMucHVzaCgKKyAgICAg
IG5ldyBXYXNtRWxlbVNlZ21lbnQodW5kZWZpbmVkLCB1bmRlZmluZWQsIHR5cGUsIGVsZW1lbnRz
LCB0cnVlKSk7CisgICAgcmV0dXJuIHRoaXMuZWxlbWVudF9zZWdtZW50cy5sZW5ndGggLSAxOwor
ICB9CisKKyAgYXBwZW5kVG9UYWJsZShhcnJheSkgeworICAgIGZvciAobGV0IG4gb2YgYXJyYXkp
IHsKKyAgICAgIGlmICh0eXBlb2YgbiAhPSAnbnVtYmVyJykKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCdpbnZhbGlkIHRhYmxlIChlbnRyaWVzIGhhdmUgdG8gYmUgbnVtYmVycyk6ICcgKyBhcnJh
eSk7CisgICAgfQorICAgIGlmICh0aGlzLnRhYmxlcy5sZW5ndGggPT0gMCkgeworICAgICAgdGhp
cy5hZGRUYWJsZShrV2FzbUFueUZ1bmMsIDApOworICAgIH0KKyAgICAvLyBBZGp1c3QgdGhlIHRh
YmxlIHRvIHRoZSBjb3JyZWN0IHNpemUuCisgICAgbGV0IHRhYmxlID0gdGhpcy50YWJsZXNbMF07
CisgICAgY29uc3QgYmFzZSA9IHRhYmxlLmluaXRpYWxfc2l6ZTsKKyAgICBjb25zdCB0YWJsZV9z
aXplID0gYmFzZSArIGFycmF5Lmxlbmd0aDsKKyAgICB0YWJsZS5pbml0aWFsX3NpemUgPSB0YWJs
ZV9zaXplOworICAgIGlmICh0YWJsZS5oYXNfbWF4ICYmIHRhYmxlX3NpemUgPiB0YWJsZS5tYXhf
c2l6ZSkgeworICAgICAgdGFibGUubWF4X3NpemUgPSB0YWJsZV9zaXplOworICAgIH0KKyAgICBy
ZXR1cm4gdGhpcy5hZGRBY3RpdmVFbGVtZW50U2VnbWVudCgwLCBXYXNtSW5pdEV4cHIuSTMyQ29u
c3QoYmFzZSksIGFycmF5KTsKKyAgfQorCisgIHNldFRhYmxlQm91bmRzKG1pbiwgbWF4ID0gdW5k
ZWZpbmVkKSB7CisgICAgaWYgKHRoaXMudGFibGVzLmxlbmd0aCAhPSAwKSB7CisgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ1RoZSB0YWJsZSBib3VuZHMgb2YgdGFibGUgXCcwXCcgaGF2ZSBhbHJlYWR5
IGJlZW4gc2V0LicpOworICAgIH0KKyAgICB0aGlzLmFkZFRhYmxlKGtXYXNtQW55RnVuYywgbWlu
LCBtYXgpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgc2V0TmFtZShuYW1lKSB7CisgICAg
dGhpcy5uYW1lID0gbmFtZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHRvQnVmZmVyKGRl
YnVnID0gZmFsc2UpIHsKKyAgICBsZXQgYmluYXJ5ID0gbmV3IEJpbmFyeTsKKyAgICBsZXQgd2Fz
bSA9IHRoaXM7CisKKyAgICAvLyBBZGQgaGVhZGVyCisgICAgYmluYXJ5LmVtaXRfaGVhZGVyKCk7
CisKKyAgICAvLyBBZGQgdHlwZSBzZWN0aW9uCisgICAgaWYgKHdhc20udHlwZXMubGVuZ3RoID4g
MCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgdHlwZXMgQCAnICsgYmluYXJ5
Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtUeXBlU2VjdGlvbkNvZGUsIHNl
Y3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLnR5cGVzLmxlbmd0aCk7
CisgICAgICAgIGZvciAobGV0IHR5cGUgb2Ygd2FzbS50eXBlcykgeworICAgICAgICAgIGlmICh0
eXBlIGluc3RhbmNlb2YgV2FzbVN0cnVjdCkgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4
KHR5cGUudHlwZV9mb3JtKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHR5cGUuZmll
bGRzLmxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0eXBlLmZpZWxkcykg
eworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShmaWVsZC50eXBlKTsKKyAgICAgICAg
ICAgICAgc2VjdGlvbi5lbWl0X3U4KGZpZWxkLm11dGFiaWxpdHkgPyAxIDogMCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFdhc21TdHJ1Y3RTdWJ0eXBl
KSB7CisgICAgICAgICAgICAgIGlmICh0eXBlLnN1cGVydHlwZSA9PT0gdGhpcy5rR2VuZXJpY1N1
cGVyVHlwZSkgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChrRGF0YVJlZkNvZGUp
OworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF9o
ZWFwX3R5cGUodHlwZS5zdXBlcnR5cGUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgfSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgV2FzbUFycmF5KSB7CisgICAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdTgodHlwZS50eXBlX2Zvcm0pOworICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3R5cGUodHlwZS50eXBlKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCh0
eXBlLm11dGFiaWxpdHkgPyAxIDogMCk7CisgICAgICAgICAgICBpZiAodHlwZSBpbnN0YW5jZW9m
IFdhc21BcnJheVN1YnR5cGUpIHsKKyAgICAgICAgICAgICAgaWYgKHR5cGUuc3VwZXJ0eXBlID09
PSB0aGlzLmtHZW5lcmljU3VwZXJUeXBlKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0
X3U4KGtEYXRhUmVmQ29kZSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc2VjdGlvbi5lbWl0X2hlYXBfdHlwZSh0eXBlLnN1cGVydHlwZSk7CisgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VjdGlv
bi5lbWl0X3U4KGtXYXNtRnVuY3Rpb25UeXBlRm9ybSk7CisgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfdTMydih0eXBlLnBhcmFtcy5sZW5ndGgpOworICAgICAgICAgICAgZm9yIChsZXQgcGFyYW0g
b2YgdHlwZS5wYXJhbXMpIHsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUocGFyYW0p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYodHlwZS5yZXN1
bHRzLmxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKGxldCByZXN1bHQgb2YgdHlwZS5yZXN1bHRz
KSB7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKHJlc3VsdCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBB
ZGQgaW1wb3J0cyBzZWN0aW9uCisgICAgaWYgKHdhc20uaW1wb3J0cy5sZW5ndGggPiAwKSB7Cisg
ICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBpbXBvcnRzIEAgJyArIGJpbmFyeS5sZW5n
dGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrSW1wb3J0U2VjdGlvbkNvZGUsIHNlY3Rp
b24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLmltcG9ydHMubGVuZ3RoKTsK
KyAgICAgICAgZm9yIChsZXQgaW1wIG9mIHdhc20uaW1wb3J0cykgeworICAgICAgICAgIHNlY3Rp
b24uZW1pdF9zdHJpbmcoaW1wLm1vZHVsZSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3N0cmlu
ZyhpbXAubmFtZSB8fCAnJyk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGltcC5raW5kKTsK
KyAgICAgICAgICBpZiAoaW1wLmtpbmQgPT0ga0V4dGVybmFsRnVuY3Rpb24pIHsKKyAgICAgICAg
ICAgIHNlY3Rpb24uZW1pdF91MzJ2KGltcC50eXBlX2luZGV4KTsKKyAgICAgICAgICB9IGVsc2Ug
aWYgKGltcC5raW5kID09IGtFeHRlcm5hbEdsb2JhbCkgeworICAgICAgICAgICAgc2VjdGlvbi5l
bWl0X3R5cGUoaW1wLnR5cGUpOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGltcC5tdXRh
YmxlKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKGltcC5raW5kID09IGtFeHRlcm5hbE1lbW9yeSkg
eworICAgICAgICAgICAgdmFyIGhhc19tYXggPSAodHlwZW9mIGltcC5tYXhpbXVtKSAhPSAndW5k
ZWZpbmVkJzsKKyAgICAgICAgICAgIHZhciBpc19zaGFyZWQgPSAodHlwZW9mIGltcC5zaGFyZWQp
ICE9ICd1bmRlZmluZWQnOworICAgICAgICAgICAgaWYgKGlzX3NoYXJlZCkgeworICAgICAgICAg
ICAgICBzZWN0aW9uLmVtaXRfdTgoaGFzX21heCA/IDMgOiAyKTsgIC8vIGZsYWdzCisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoaGFzX21heCA/IDEg
OiAwKTsgIC8vIGZsYWdzCisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRf
dTMydihpbXAuaW5pdGlhbCk7ICAgICAgICAgICAgICAgLy8gaW5pdGlhbAorICAgICAgICAgICAg
aWYgKGhhc19tYXgpIHNlY3Rpb24uZW1pdF91MzJ2KGltcC5tYXhpbXVtKTsgIC8vIG1heGltdW0K
KyAgICAgICAgICB9IGVsc2UgaWYgKGltcC5raW5kID09IGtFeHRlcm5hbFRhYmxlKSB7CisgICAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShpbXAudHlwZSk7CisgICAgICAgICAgICB2YXIgaGFz
X21heCA9ICh0eXBlb2YgaW1wLm1heGltdW0pICE9ICd1bmRlZmluZWQnOworICAgICAgICAgICAg
c2VjdGlvbi5lbWl0X3U4KGhhc19tYXggPyAxIDogMCk7ICAgICAgICAgICAgIC8vIGZsYWdzCisg
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihpbXAuaW5pdGlhbCk7ICAgICAgICAgICAgICAg
Ly8gaW5pdGlhbAorICAgICAgICAgICAgaWYgKGhhc19tYXgpIHNlY3Rpb24uZW1pdF91MzJ2KGlt
cC5tYXhpbXVtKTsgIC8vIG1heGltdW0KKyAgICAgICAgICB9IGVsc2UgaWYgKGltcC5raW5kID09
IGtFeHRlcm5hbFRhZykgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoa0V4Y2VwdGlv
bkF0dHJpYnV0ZSk7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihpbXAudHlwZV9pbmRl
eCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5r
bm93bi91bnN1cHBvcnRlZCBpbXBvcnQga2luZCAnICsgaW1wLmtpbmQpOworICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIGZ1bmN0aW9ucyBkZWNs
YXJhdGlvbnMKKyAgICBpZiAod2FzbS5mdW5jdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgaWYg
KGRlYnVnKSBwcmludCgnZW1pdHRpbmcgZnVuY3Rpb24gZGVjbHMgQCAnICsgYmluYXJ5Lmxlbmd0
aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtGdW5jdGlvblNlY3Rpb25Db2RlLCBzZWN0
aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS5mdW5jdGlvbnMubGVuZ3Ro
KTsKKyAgICAgICAgZm9yIChsZXQgZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgeworICAgICAgICAg
IHNlY3Rpb24uZW1pdF91MzJ2KGZ1bmMudHlwZV9pbmRleCk7CisgICAgICAgIH0KKyAgICAgIH0p
OworICAgIH0KKworICAgIC8vIEFkZCB0YWJsZSBzZWN0aW9uCisgICAgaWYgKHdhc20udGFibGVz
Lmxlbmd0aCA+IDApIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIHRhYmxlcyBA
ICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1RhYmxlU2Vj
dGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLnRh
Ymxlcy5sZW5ndGgpOworICAgICAgICBmb3IgKGxldCB0YWJsZSBvZiB3YXNtLnRhYmxlcykgewor
ICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKHRhYmxlLnR5cGUpOworICAgICAgICAgIHNlY3Rp
b24uZW1pdF91OCh0YWJsZS5oYXNfbWF4KTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih0
YWJsZS5pbml0aWFsX3NpemUpOworICAgICAgICAgIGlmICh0YWJsZS5oYXNfbWF4KSBzZWN0aW9u
LmVtaXRfdTMydih0YWJsZS5tYXhfc2l6ZSk7CisgICAgICAgICAgaWYgKHRhYmxlLmhhc19pbml0
KSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKHRhYmxlLmluaXRfZXhwcik7
CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQg
bWVtb3J5IHNlY3Rpb24KKyAgICBpZiAod2FzbS5tZW1vcnkgIT09IHVuZGVmaW5lZCkgeworICAg
ICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgbWVtb3J5IEAgJyArIGJpbmFyeS5sZW5ndGgp
OworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrTWVtb3J5U2VjdGlvbkNvZGUsIHNlY3Rpb24g
PT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMSk7ICAvLyBvbmUgbWVtb3J5IGVudHJ5Cisg
ICAgICAgIGNvbnN0IGhhc19tYXggPSB3YXNtLm1lbW9yeS5tYXggIT09IHVuZGVmaW5lZDsKKyAg
ICAgICAgaWYgKHdhc20ubWVtb3J5LmlzX21lbW9yeTY0KSB7CisgICAgICAgICAgaWYgKHdhc20u
bWVtb3J5LnNoYXJlZCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaGFyaW5nIG1l
bW9yeTY0IGlzIG5vdCBzdXBwb3J0ZWQgKHlldCknKTsKKyAgICAgICAgICB9CisgICAgICAgICAg
c2VjdGlvbi5lbWl0X3U4KAorICAgICAgICAgICAgICBoYXNfbWF4ID8ga0xpbWl0c01lbW9yeTY0
V2l0aE1heGltdW0gOiBrTGltaXRzTWVtb3J5NjROb01heGltdW0pOworICAgICAgICAgIHNlY3Rp
b24uZW1pdF91NjR2KHdhc20ubWVtb3J5Lm1pbik7CisgICAgICAgICAgaWYgKGhhc19tYXgpIHNl
Y3Rpb24uZW1pdF91NjR2KHdhc20ubWVtb3J5Lm1heCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgc2VjdGlvbi5lbWl0X3U4KAorICAgICAgICAgICAgICB3YXNtLm1lbW9yeS5zaGFyZWQg
PworICAgICAgICAgICAgICAgICAgKGhhc19tYXggPyBrTGltaXRzU2hhcmVkV2l0aE1heGltdW0g
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTGltaXRzU2hhcmVkTm9NYXhpbXVtKSA6
CisgICAgICAgICAgICAgICAgICAoaGFzX21heCA/IGtMaW1pdHNXaXRoTWF4aW11bSA6IGtMaW1p
dHNOb01heGltdW0pKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLm1lbW9yeS5t
aW4pOworICAgICAgICAgIGlmIChoYXNfbWF4KSBzZWN0aW9uLmVtaXRfdTMydih3YXNtLm1lbW9y
eS5tYXgpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgdGFnIHNl
Y3Rpb24uCisgICAgaWYgKHdhc20udGFncy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcp
IHByaW50KCdlbWl0dGluZyB0YWdzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5
LmVtaXRfc2VjdGlvbihrVGFnU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0
aW9uLmVtaXRfdTMydih3YXNtLnRhZ3MubGVuZ3RoKTsKKyAgICAgICAgZm9yIChsZXQgdHlwZV9p
bmRleCBvZiB3YXNtLnRhZ3MpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihrRXhjZXB0
aW9uQXR0cmlidXRlKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih0eXBlX2luZGV4KTsK
KyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIGdsb2JhbCBzZWN0aW9u
LgorICAgIGlmICh3YXNtLmdsb2JhbHMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBw
cmludCgnZW1pdHRpbmcgZ2xvYmFscyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFy
eS5lbWl0X3NlY3Rpb24oa0dsb2JhbFNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAg
c2VjdGlvbi5lbWl0X3UzMnYod2FzbS5nbG9iYWxzLmxlbmd0aCk7CisgICAgICAgIGZvciAobGV0
IGdsb2JhbCBvZiB3YXNtLmdsb2JhbHMpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShn
bG9iYWwudHlwZSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGdsb2JhbC5tdXRhYmxlKTsK
KyAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKGdsb2JhbC5pbml0KTsKKyAgICAgICAg
fQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIGV4cG9ydCB0YWJsZS4KKyAgICB2YXIg
bWVtX2V4cG9ydCA9ICh3YXNtLm1lbW9yeSAhPT0gdW5kZWZpbmVkICYmIHdhc20ubWVtb3J5LmV4
cG9ydGVkKTsKKyAgICB2YXIgZXhwb3J0c19jb3VudCA9IHdhc20uZXhwb3J0cy5sZW5ndGggKyAo
bWVtX2V4cG9ydCA/IDEgOiAwKTsKKyAgICBpZiAoZXhwb3J0c19jb3VudCA+IDApIHsKKyAgICAg
IGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGV4cG9ydHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7
CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtFeHBvcnRTZWN0aW9uQ29kZSwgc2VjdGlvbiA9
PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGV4cG9ydHNfY291bnQpOworICAgICAgICBm
b3IgKGxldCBleHAgb2Ygd2FzbS5leHBvcnRzKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3N0
cmluZyhleHAubmFtZSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGV4cC5raW5kKTsKKyAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihleHAuaW5kZXgpOworICAgICAgICB9CisgICAgICAg
IGlmIChtZW1fZXhwb3J0KSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3N0cmluZygnbWVtb3J5
Jyk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHRlcm5hbE1lbW9yeSk7CisgICAgICAg
ICAgc2VjdGlvbi5lbWl0X3U4KDApOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAg
ICAvLyBBZGQgc3RhcnQgZnVuY3Rpb24gc2VjdGlvbi4KKyAgICBpZiAod2FzbS5zdGFydF9pbmRl
eCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBzdGFy
dCBmdW5jdGlvbiBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rp
b24oa1N0YXJ0U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRf
dTMydih3YXNtLnN0YXJ0X2luZGV4KTsKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCBl
bGVtZW50IHNlZ21lbnRzCisgICAgaWYgKHdhc20uZWxlbWVudF9zZWdtZW50cy5sZW5ndGggPiAw
KSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBlbGVtZW50IHNlZ21lbnRzIEAg
JyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrRWxlbWVudFNl
Y3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgdmFyIHNlZ21lbnRzID0gd2FzbS5lbGVt
ZW50X3NlZ21lbnRzOworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWdtZW50cy5sZW5ndGgp
OworCisgICAgICAgIGZvciAobGV0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHsKKyAgICAgICAgICAv
LyBFbWl0IGZsYWcgYW5kIGhlYWRlci4KKyAgICAgICAgICAvLyBFYWNoIGNhc2UgYmVsb3cgY29y
cmVzcG9uZHMgdG8gYSBmbGFnIGZyb20KKyAgICAgICAgICAvLyBodHRwczovL3dlYmFzc2VtYmx5
LmdpdGh1Yi5pby9zcGVjL2NvcmUvYmluYXJ5L21vZHVsZXMuaHRtbCNlbGVtZW50LXNlY3Rpb24K
KyAgICAgICAgICAvLyAobm90IGluIGluY3JlYXNpbmcgb3JkZXIpLgorICAgICAgICAgIGlmIChz
ZWdtZW50LmlzX2FjdGl2ZSgpKSB7CisgICAgICAgICAgICBpZiAoc2VnbWVudC50YWJsZSA9PSAw
ICYmIHNlZ21lbnQudHlwZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgIGlmIChzZWdt
ZW50LmV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9u
LmVtaXRfdTgoMHgwNCk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcihz
ZWdtZW50Lm9mZnNldCk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
c2VjdGlvbi5lbWl0X3U4KDB4MDApCisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRf
ZXhwcihzZWdtZW50Lm9mZnNldCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgIGlmIChzZWdtZW50LmV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkp
IHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwNik7CisgICAgICAgICAgICAg
ICAgc2VjdGlvbi5lbWl0X3UzMnYoc2VnbWVudC50YWJsZSk7CisgICAgICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X2luaXRfZXhwcihzZWdtZW50Lm9mZnNldCk7CisgICAgICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3R5cGUoc2VnbWVudC50eXBlKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwMik7CisgICAgICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3UzMnYoc2VnbWVudC50YWJsZSk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5l
bWl0X2luaXRfZXhwcihzZWdtZW50Lm9mZnNldCk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5l
bWl0X3U4KGtFeHRlcm5hbEZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc2VnbWVudC5leHByZXNzaW9u
c19hc19lbGVtZW50cygpKSB7CisgICAgICAgICAgICAgIGlmIChzZWdtZW50LmlzX3Bhc3NpdmUo
KSkgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDA1KTsKKyAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwNyk7CisgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUoc2VnbWVudC50eXBl
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGlmIChzZWdtZW50LmlzX3Bh
c3NpdmUoKSkgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDAxKTsKKyAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwMyk7
CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHRlcm5h
bEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyBF
bWl0IGVsZW1lbnRzLgorICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHNlZ21lbnQuZWxlbWVu
dHMubGVuZ3RoKTsKKyAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIHNlZ21lbnQuZWxlbWVu
dHMpIHsKKyAgICAgICAgICAgIGlmIChzZWdtZW50LmV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkp
IHsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcihlbGVtZW50KTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGVsZW1lbnQp
OworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSkKKyAgICB9
CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHBhc3NpdmUgZGF0YSBzZWdtZW50cywgYWRkIHRo
ZSBEYXRhQ291bnQgc2VjdGlvbi4KKyAgICBpZiAod2FzbS5kYXRhX3NlZ21lbnRzLnNvbWUoc2Vn
ID0+ICFzZWcuaXNfYWN0aXZlKSkgeworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrRGF0YUNv
dW50U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3
YXNtLmRhdGFfc2VnbWVudHMubGVuZ3RoKTsKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIElm
IHRoZXJlIGFyZSBjb21waWxhdGlvbiBoaW50cyBhZGQgYSBjdXN0b20gc2VjdGlvbiAnY29tcGls
YXRpb25IaW50cycKKyAgICAvLyBhZnRlciB0aGUgZnVuY3Rpb24gc2VjdGlvbiBhbmQgYmVmb3Jl
IHRoZSBjb2RlIHNlY3Rpb24uCisgICAgaWYgKHdhc20uY29tcGlsYXRpb25faGludHMubGVuZ3Ro
ID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgY29tcGlsYXRpb24gaGlu
dHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICAvLyBCdWlsZCBjdXN0b20gc2VjdGlvbiBw
YXlsb2FkLgorICAgICAgbGV0IHBheWxvYWRCaW5hcnkgPSBuZXcgQmluYXJ5KCk7CisgICAgICBs
ZXQgaW1wbGljaXRfY29tcGlsYXRpb25faGludHNfY291bnQgPSB3YXNtLmZ1bmN0aW9ucy5sZW5n
dGg7CisgICAgICBwYXlsb2FkQmluYXJ5LmVtaXRfdTMydihpbXBsaWNpdF9jb21waWxhdGlvbl9o
aW50c19jb3VudCk7CisKKyAgICAgIC8vIERlZmF1bHRzIHRvIHRoZSBjb21waWxlcidzIGNob2lj
ZSBpZiBubyBiZXR0ZXIgaGludCB3YXMgZ2l2ZW4gKDB4MDApLgorICAgICAgbGV0IGRlZmF1bHRI
aW50Qnl0ZSA9IGtDb21waWxhdGlvbkhpbnRTdHJhdGVneURlZmF1bHQgfAorICAgICAgICAgIChr
Q29tcGlsYXRpb25IaW50VGllckRlZmF1bHQgPDwgMikgfAorICAgICAgICAgIChrQ29tcGlsYXRp
b25IaW50VGllckRlZmF1bHQgPDwgNCk7CisKKyAgICAgIC8vIEVtaXQgaGludCBieXRlIGZvciBl
dmVyeSBmdW5jdGlvbiBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLgorICAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBpbXBsaWNpdF9jb21waWxhdGlvbl9oaW50c19jb3VudDsgaSsrKSB7CisgICAgICAg
IGxldCBpbmRleCA9IHdhc20ubnVtX2ltcG9ydGVkX2Z1bmNzICsgaTsKKyAgICAgICAgdmFyIGhp
bnRCeXRlOworICAgICAgICBpZiAoaW5kZXggaW4gd2FzbS5jb21waWxhdGlvbl9oaW50cykgewor
ICAgICAgICAgIGxldCBoaW50ID0gd2FzbS5jb21waWxhdGlvbl9oaW50c1tpbmRleF07CisgICAg
ICAgICAgaGludEJ5dGUgPQorICAgICAgICAgICAgICBoaW50LnN0cmF0ZWd5IHwgKGhpbnQuYmFz
ZWxpbmVUaWVyIDw8IDIpIHwgKGhpbnQudG9wVGllciA8PCA0KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICBoaW50Qnl0ZSA9IGRlZmF1bHRIaW50Qnl0ZTsKKyAgICAgICAgfQorICAgICAg
ICBwYXlsb2FkQmluYXJ5LmVtaXRfdTgoaGludEJ5dGUpOworICAgICAgfQorCisgICAgICAvLyBG
aW5hbGl6ZSBhcyBjdXN0b20gc2VjdGlvbi4KKyAgICAgIGxldCBuYW1lID0gJ2NvbXBpbGF0aW9u
SGludHMnOworICAgICAgbGV0IGJ5dGVzID0gdGhpcy5jcmVhdGVDdXN0b21TZWN0aW9uKG5hbWUs
IHBheWxvYWRCaW5hcnkudHJ1bmNfYnVmZmVyKCkpOworICAgICAgYmluYXJ5LmVtaXRfYnl0ZXMo
Ynl0ZXMpOworICAgIH0KKworICAgIC8vIEFkZCBmdW5jdGlvbiBib2RpZXMuCisgICAgaWYgKHdh
c20uZnVuY3Rpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgIC8vIGVtaXQgZnVuY3Rpb24gYm9kaWVz
CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBjb2RlIEAgJyArIGJpbmFyeS5sZW5n
dGgpOworICAgICAgbGV0IHNlY3Rpb25fbGVuZ3RoID0gMDsKKyAgICAgIGJpbmFyeS5lbWl0X3Nl
Y3Rpb24oa0NvZGVTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1p
dF91MzJ2KHdhc20uZnVuY3Rpb25zLmxlbmd0aCk7CisgICAgICAgIGxldCBoZWFkZXIgPSBuZXcg
QmluYXJ5OworICAgICAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAg
ICAgICAgaGVhZGVyLnJlc2V0KCk7CisgICAgICAgICAgLy8gRnVuY3Rpb24gYm9keSBsZW5ndGgg
d2lsbCBiZSBwYXRjaGVkIGxhdGVyLgorICAgICAgICAgIGxldCBsb2NhbF9kZWNscyA9IGZ1bmMu
bG9jYWxzIHx8IFtdOworICAgICAgICAgIGhlYWRlci5lbWl0X3UzMnYobG9jYWxfZGVjbHMubGVu
Z3RoKTsKKyAgICAgICAgICBmb3IgKGxldCBkZWNsIG9mIGxvY2FsX2RlY2xzKSB7CisgICAgICAg
ICAgICBoZWFkZXIuZW1pdF91MzJ2KGRlY2wuY291bnQpOworICAgICAgICAgICAgaGVhZGVyLmVt
aXRfdHlwZShkZWNsLnR5cGUpOworICAgICAgICAgIH0KKyAgICAgICAgICBzZWN0aW9uLmVtaXRf
dTMydihoZWFkZXIubGVuZ3RoICsgZnVuYy5ib2R5Lmxlbmd0aCk7CisgICAgICAgICAgc2VjdGlv
bi5lbWl0X2J5dGVzKGhlYWRlci50cnVuY19idWZmZXIoKSk7CisgICAgICAgICAgLy8gU2V0IHRv
IHNlY3Rpb24gb2Zmc2V0IGZvciBub3csIHdpbGwgdXBkYXRlLgorICAgICAgICAgIGZ1bmMuYm9k
eV9vZmZzZXQgPSBzZWN0aW9uLmxlbmd0aDsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfYnl0ZXMo
ZnVuYy5ib2R5KTsKKyAgICAgICAgfQorICAgICAgICBzZWN0aW9uX2xlbmd0aCA9IHNlY3Rpb24u
bGVuZ3RoOworICAgICAgfSk7CisgICAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25z
KSB7CisgICAgICAgIGZ1bmMuYm9keV9vZmZzZXQgKz0gYmluYXJ5Lmxlbmd0aCAtIHNlY3Rpb25f
bGVuZ3RoOworICAgICAgfQorICAgIH0KKworICAgIC8vIEFkZCBkYXRhIHNlZ21lbnRzLgorICAg
IGlmICh3YXNtLmRhdGFfc2VnbWVudHMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBw
cmludCgnZW1pdHRpbmcgZGF0YSBzZWdtZW50cyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAg
IGJpbmFyeS5lbWl0X3NlY3Rpb24oa0RhdGFTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAg
ICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20uZGF0YV9zZWdtZW50cy5sZW5ndGgpOworICAgICAg
ICBmb3IgKGxldCBzZWcgb2Ygd2FzbS5kYXRhX3NlZ21lbnRzKSB7CisgICAgICAgICAgaWYgKHNl
Zy5pc19hY3RpdmUpIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgwKTsgIC8vIGxpbmVh
ciBtZW1vcnkgaW5kZXggMCAvIGZsYWdzCisgICAgICAgICAgICBpZiAoc2VnLmlzX2dsb2JhbCkg
eworICAgICAgICAgICAgICAvLyBpbml0aWFsaXplciBpcyBhIGdsb2JhbCB2YXJpYWJsZQorICAg
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0V4cHJHbG9iYWxHZXQpOworICAgICAgICAgICAg
ICBzZWN0aW9uLmVtaXRfdTMydihzZWcuYWRkcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAvLyBpbml0aWFsaXplciBpcyBhIGNvbnN0YW50CisgICAgICAgICAgICAgIHNl
Y3Rpb24uZW1pdF91OChrRXhwckkzMkNvbnN0KTsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0
X3UzMnYoc2VnLmFkZHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VjdGlvbi5lbWl0
X3U4KGtFeHByRW5kKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VjdGlvbi5l
bWl0X3U4KGtQYXNzaXZlKTsgIC8vIGZsYWdzCisgICAgICAgICAgfQorICAgICAgICAgIHNlY3Rp
b24uZW1pdF91MzJ2KHNlZy5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X2J5
dGVzKHNlZy5kYXRhKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRk
IGFueSBleHBsaWNpdGx5IGFkZGVkIHNlY3Rpb25zCisgICAgZm9yIChsZXQgZXhwIG9mIHdhc20u
ZXhwbGljaXQpIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGV4cGxpY2l0IEAg
JyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfYnl0ZXMoZXhwKTsKKyAgICB9
CisKKyAgICAvLyBBZGQgbmFtZXMuCisgICAgbGV0IG51bV9mdW5jdGlvbl9uYW1lcyA9IDA7Cisg
ICAgbGV0IG51bV9mdW5jdGlvbnNfd2l0aF9sb2NhbF9uYW1lcyA9IDA7CisgICAgZm9yIChsZXQg
ZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgeworICAgICAgaWYgKGZ1bmMubmFtZSAhPT0gdW5kZWZp
bmVkKSArK251bV9mdW5jdGlvbl9uYW1lczsKKyAgICAgIGlmIChmdW5jLm51bUxvY2FsTmFtZXMo
KSA+IDApICsrbnVtX2Z1bmN0aW9uc193aXRoX2xvY2FsX25hbWVzOworICAgIH0KKyAgICBpZiAo
bnVtX2Z1bmN0aW9uX25hbWVzID4gMCB8fCBudW1fZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFtZXMg
PiAwIHx8CisgICAgICAgIHdhc20ubmFtZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBpZiAoZGVi
dWcpIHByaW50KCdlbWl0dGluZyBuYW1lcyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJp
bmFyeS5lbWl0X3NlY3Rpb24oa1Vua25vd25TZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAg
ICAgIHNlY3Rpb24uZW1pdF9zdHJpbmcoJ25hbWUnKTsKKyAgICAgICAgLy8gRW1pdCBtb2R1bGUg
bmFtZS4KKyAgICAgICAgaWYgKHdhc20ubmFtZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAg
c2VjdGlvbi5lbWl0X3NlY3Rpb24oa01vZHVsZU5hbWVDb2RlLCBuYW1lX3NlY3Rpb24gPT4gewor
ICAgICAgICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfc3RyaW5nKHdhc20ubmFtZSk7CisgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRW1pdCBmdW5jdGlvbiBuYW1lcy4KKyAgICAg
ICAgaWYgKG51bV9mdW5jdGlvbl9uYW1lcyA+IDApIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRf
c2VjdGlvbihrRnVuY3Rpb25OYW1lc0NvZGUsIG5hbWVfc2VjdGlvbiA9PiB7CisgICAgICAgICAg
ICBuYW1lX3NlY3Rpb24uZW1pdF91MzJ2KG51bV9mdW5jdGlvbl9uYW1lcyk7CisgICAgICAgICAg
ICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAgICAgICAgICAgIGlmIChm
dW5jLm5hbWUgPT09IHVuZGVmaW5lZCkgY29udGludWU7CisgICAgICAgICAgICAgIG5hbWVfc2Vj
dGlvbi5lbWl0X3UzMnYoZnVuYy5pbmRleCk7CisgICAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5l
bWl0X3N0cmluZyhmdW5jLm5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgICAgIC8vIEVtaXQgbG9jYWwgbmFtZXMuCisgICAgICAgIGlmIChudW1fZnVu
Y3Rpb25zX3dpdGhfbG9jYWxfbmFtZXMgPiAwKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3Nl
Y3Rpb24oa0xvY2FsTmFtZXNDb2RlLCBuYW1lX3NlY3Rpb24gPT4geworICAgICAgICAgICAgbmFt
ZV9zZWN0aW9uLmVtaXRfdTMydihudW1fZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFtZXMpOworICAg
ICAgICAgICAgZm9yIChsZXQgZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgeworICAgICAgICAgICAg
ICBpZiAoZnVuYy5udW1Mb2NhbE5hbWVzKCkgPT0gMCkgY29udGludWU7CisgICAgICAgICAgICAg
IG5hbWVfc2VjdGlvbi5lbWl0X3UzMnYoZnVuYy5pbmRleCk7CisgICAgICAgICAgICAgIG5hbWVf
c2VjdGlvbi5lbWl0X3UzMnYoZnVuYy5udW1Mb2NhbE5hbWVzKCkpOworICAgICAgICAgICAgICBs
ZXQgbmFtZV9pbmRleCA9IDA7CisgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnVu
Yy5sb2NhbF9uYW1lcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg
ZnVuYy5sb2NhbF9uYW1lc1tpXSA9PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAgICAgbmFt
ZV9zZWN0aW9uLmVtaXRfdTMydihuYW1lX2luZGV4KTsKKyAgICAgICAgICAgICAgICAgIG5hbWVf
c2VjdGlvbi5lbWl0X3N0cmluZyhmdW5jLmxvY2FsX25hbWVzW2ldKTsKKyAgICAgICAgICAgICAg
ICAgIG5hbWVfaW5kZXgrKzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgbmFtZV9pbmRleCArPSBmdW5jLmxvY2FsX25hbWVzW2ldOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gYmluYXJ5LnRydW5jX2J1ZmZlcigp
OworICB9CisKKyAgdG9BcnJheShkZWJ1ZyA9IGZhbHNlKSB7CisgICAgcmV0dXJuIEFycmF5LmZy
b20odGhpcy50b0J1ZmZlcihkZWJ1ZykpOworICB9CisKKyAgaW5zdGFudGlhdGUoZmZpKSB7Cisg
ICAgbGV0IG1vZHVsZSA9IHRoaXMudG9Nb2R1bGUoKTsKKyAgICBsZXQgaW5zdGFuY2UgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCBmZmkpOworICAgIHJldHVybiBpbnN0YW5jZTsK
KyAgfQorCisgIGFzeW5jSW5zdGFudGlhdGUoZmZpKSB7CisgICAgcmV0dXJuIFdlYkFzc2VtYmx5
Lmluc3RhbnRpYXRlKHRoaXMudG9CdWZmZXIoKSwgZmZpKQorICAgICAgICAudGhlbigoe21vZHVs
ZSwgaW5zdGFuY2V9KSA9PiBpbnN0YW5jZSk7CisgIH0KKworICB0b01vZHVsZShkZWJ1ZyA9IGZh
bHNlKSB7CisgICAgcmV0dXJuIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUodGhpcy50b0J1ZmZlcihk
ZWJ1ZykpOworICB9Cit9CisKK2Z1bmN0aW9uIHdhc21TaWduZWRMZWIodmFsLCBtYXhfbGVuID0g
NSkgeworICBsZXQgcmVzID0gW107CisgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4X2xlbjsgKytp
KSB7CisgICAgbGV0IHYgPSB2YWwgJiAweDdmOworICAgIC8vIElmIHt2fSBzaWduLWV4dGVuZGVk
IGZyb20gNyB0byAzMiBiaXRzIGlzIGVxdWFsIHRvIHZhbCwgd2UgYXJlIGRvbmUuCisgICAgaWYg
KCgodiA8PCAyNSkgPj4gMjUpID09IHZhbCkgeworICAgICAgcmVzLnB1c2godik7CisgICAgICBy
ZXR1cm4gcmVzOworICAgIH0KKyAgICByZXMucHVzaCh2IHwgMHg4MCk7CisgICAgdmFsID0gdmFs
ID4+IDc7CisgIH0KKyAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgJ0xlYiB2YWx1ZSA8JyArIHZh
bCArICc+IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJyArIG1heF9sZW4pOworfQorCitmdW5j
dGlvbiB3YXNtVW5zaWduZWRMZWIodmFsLCBtYXhfbGVuID0gNSkgeworICBsZXQgcmVzID0gW107
CisgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4X2xlbjsgKytpKSB7CisgICAgbGV0IHYgPSB2YWwg
JiAweDdmOworICAgIGlmICh2ID09IHZhbCkgeworICAgICAgcmVzLnB1c2godik7CisgICAgICBy
ZXR1cm4gcmVzOworICAgIH0KKyAgICByZXMucHVzaCh2IHwgMHg4MCk7CisgICAgdmFsID0gdmFs
ID4+PiA3OworICB9CisgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICdMZWIgdmFsdWUgPCcgKyB2
YWwgKyAnPiBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICcgKyBtYXhfbGVuKTsKK30KKworZnVu
Y3Rpb24gd2FzbUkzMkNvbnN0KHZhbCkgeworICByZXR1cm4gW2tFeHBySTMyQ29uc3QsIC4uLndh
c21TaWduZWRMZWIodmFsLCA1KV07Cit9CisKKy8vIE5vdGU6IFNpbmNlIHt2YWx9IGlzIGEgSlMg
bnVtYmVyLCB0aGUgZ2VuZXJhdGVkIGNvbnN0YW50IG9ubHkgaGFzIDUzIGJpdHMgb2YKKy8vIHBy
ZWNpc2lvbi4KK2Z1bmN0aW9uIHdhc21JNjRDb25zdCh2YWwpIHsKKyAgcmV0dXJuIFtrRXhwckk2
NENvbnN0LCAuLi53YXNtU2lnbmVkTGViKHZhbCwgMTApXTsKK30KKworZnVuY3Rpb24gd2FzbUYz
MkNvbnN0KGYpIHsKKyAgLy8gV3JpdGUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciBhdCBvZmZzZXQg
MC4KKyAgZGF0YV92aWV3LnNldEZsb2F0MzIoMCwgZiwgdHJ1ZSk7CisgIHJldHVybiBbCisgICAg
a0V4cHJGMzJDb25zdCwgYnl0ZV92aWV3WzBdLCBieXRlX3ZpZXdbMV0sIGJ5dGVfdmlld1syXSwg
Ynl0ZV92aWV3WzNdCisgIF07Cit9CisKK2Z1bmN0aW9uIHdhc21GNjRDb25zdChmKSB7CisgIC8v
IFdyaXRlIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIgYXQgb2Zmc2V0IDAuCisgIGRhdGFfdmlldy5z
ZXRGbG9hdDY0KDAsIGYsIHRydWUpOworICByZXR1cm4gWworICAgIGtFeHByRjY0Q29uc3QsIGJ5
dGVfdmlld1swXSwgYnl0ZV92aWV3WzFdLCBieXRlX3ZpZXdbMl0sIGJ5dGVfdmlld1szXSwKKyAg
ICBieXRlX3ZpZXdbNF0sIGJ5dGVfdmlld1s1XSwgYnl0ZV92aWV3WzZdLCBieXRlX3ZpZXdbN10K
KyAgXTsKK30KKworZnVuY3Rpb24gd2FzbVMxMjhDb25zdChmKSB7CisgIC8vIFdyaXRlIGluIGxp
dHRsZS1lbmRpYW4gb3JkZXIgYXQgb2Zmc2V0IDAuCisgIHJldHVybiBba1NpbWRQcmVmaXgsIGtF
eHByUzEyOENvbnN0LCAuLi5mXTsKK30KKworZnVuY3Rpb24gZ2V0T3Bjb2RlTmFtZShvcGNvZGUp
IHsKKyAgcmV0dXJuIGdsb2JhbFRoaXMua1dhc21PcGNvZGVOYW1lcz8uW29wY29kZV0gPz8gJ3Vu
a25vd24nOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3dhc20uanNvbiBiL0pTVGVzdHMv
d2FzbS93YXNtLmpzb24KaW5kZXggNGY4ZGQ5ZTNkMjEzNDM1MDAwMDA2ZTI0MTQ2YjAxOTRjOWFj
ODhmMS4uOWQyMjVlNGU4MjI0OTY2MDQ0NGZmNDFhZWJiYTI3YzY0Yzc2ZWVmMSAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL3dhc20uanNvbgorKysgYi9KU1Rlc3RzL3dhc20vd2FzbS5qc29uCkBA
IC0yMywzNCArMjMsMzggQEAKICAgICAiYmxvY2tfdHlwZSI6IFsiaTMyIiwgImk2NCIsICJmMzIi
LCAiZjY0IiwgInZvaWQiLCAiZXh0ZXJucmVmIiwgImZ1bmNyZWYiXSwKICAgICAicmVmX3R5cGUi
OiBbImZ1bmNyZWYiLCAiZXh0ZXJucmVmIiwgInR5cGVfaWR4Il0sCiAgICAgImV4dGVybmFsX2tp
bmQiOiB7Ci0gICAgICAgICJGdW5jdGlvbiI6IHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAw
IH0sCi0gICAgICAgICJUYWJsZSI6ICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAxIH0s
Ci0gICAgICAgICJNZW1vcnkiOiAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAyIH0sCi0g
ICAgICAgICJHbG9iYWwiOiAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAzIH0KKyAgICAg
ICAgIkZ1bmN0aW9uIjogICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDAgfSwKKyAgICAg
ICAgIlRhYmxlIjogICAgICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDEgfSwKKyAgICAg
ICAgIk1lbW9yeSI6ICAgICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDIgfSwKKyAgICAg
ICAgIkdsb2JhbCI6ICAgICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDMgfSwKKyAgICAg
ICAgIkV4Y2VwdGlvbiI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDQgfQogICAgIH0s
CiAgICAgInNlY3Rpb24iIDogewotICAgICAgICAiVHlwZSI6ICAgICB7ICJ0eXBlIjogInZhcnVp
bnQ3IiwgInZhbHVlIjogIDEsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBzaWduYXR1cmUgZGVj
bGFyYXRpb25zIiB9LAotICAgICAgICAiSW1wb3J0IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3Iiwg
InZhbHVlIjogIDIsICJkZXNjcmlwdGlvbiI6ICJJbXBvcnQgZGVjbGFyYXRpb25zIiB9LAotICAg
ICAgICAiRnVuY3Rpb24iOiB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDMsICJkZXNj
cmlwdGlvbiI6ICJGdW5jdGlvbiBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJUYWJsZSI6ICAg
IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNCwgImRlc2NyaXB0aW9uIjogIkluZGly
ZWN0IGZ1bmN0aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMiIH0sCi0gICAgICAgICJNZW1vcnki
OiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNSwgImRlc2NyaXB0aW9uIjogIk1l
bW9yeSBhdHRyaWJ1dGVzIiB9LAotICAgICAgICAiR2xvYmFsIjogICB7ICJ0eXBlIjogInZhcnVp
bnQ3IiwgInZhbHVlIjogIDYsICJkZXNjcmlwdGlvbiI6ICJHbG9iYWwgZGVjbGFyYXRpb25zIiB9
LAotICAgICAgICAiRXhwb3J0IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDcs
ICJkZXNjcmlwdGlvbiI6ICJFeHBvcnRzIiB9LAotICAgICAgICAiU3RhcnQiOiAgICB7ICJ0eXBl
IjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDgsICJkZXNjcmlwdGlvbiI6ICJTdGFydCBmdW5jdGlv
biBkZWNsYXJhdGlvbiIgfSwKLSAgICAgICAgIkVsZW1lbnQiOiAgeyAidHlwZSI6ICJ2YXJ1aW50
NyIsICJ2YWx1ZSI6ICA5LCAiZGVzY3JpcHRpb24iOiAiRWxlbWVudHMgc2VjdGlvbiIgfSwKLSAg
ICAgICAgIkNvZGUiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEwLCAiZGVz
Y3JpcHRpb24iOiAiRnVuY3Rpb24gYm9kaWVzIChjb2RlKSIgfSwKLSAgICAgICAgIkRhdGEiOiAg
ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDExLCAiZGVzY3JpcHRpb24iOiAiRGF0
YSBzZWdtZW50cyIgfQorICAgICAgICAiVHlwZSI6ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIs
ICJ2YWx1ZSI6ICAxLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0
aW9ucyIgfSwKKyAgICAgICAgIkltcG9ydCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFs
dWUiOiAgMiwgImRlc2NyaXB0aW9uIjogIkltcG9ydCBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAg
ICJGdW5jdGlvbiI6ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDMsICJkZXNjcmlw
dGlvbiI6ICJGdW5jdGlvbiBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJUYWJsZSI6ICAgICB7
ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDQsICJkZXNjcmlwdGlvbiI6ICJJbmRpcmVj
dCBmdW5jdGlvbiB0YWJsZSBhbmQgb3RoZXIgdGFibGVzIiB9LAorICAgICAgICAiTWVtb3J5Ijog
ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA1LCAiZGVzY3JpcHRpb24iOiAiTWVt
b3J5IGF0dHJpYnV0ZXMiIH0sCisgICAgICAgICJFeGNlcHRpb24iOiB7ICJ0eXBlIjogInZhcnVp
bnQ3IiwgInZhbHVlIjogMTMsICJkZXNjcmlwdGlvbiI6ICJFeGNlcHRpb24gZGVjbGFyYXRpb25z
IiB9LAorICAgICAgICAiR2xvYmFsIjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6
ICA2LCAiZGVzY3JpcHRpb24iOiAiR2xvYmFsIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIkV4
cG9ydCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNywgImRlc2NyaXB0aW9u
IjogIkV4cG9ydHMiIH0sCisgICAgICAgICJTdGFydCI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3
IiwgInZhbHVlIjogIDgsICJkZXNjcmlwdGlvbiI6ICJTdGFydCBmdW5jdGlvbiBkZWNsYXJhdGlv
biIgfSwKKyAgICAgICAgIkVsZW1lbnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAgOSwgImRlc2NyaXB0aW9uIjogIkVsZW1lbnRzIHNlY3Rpb24iIH0sCisgICAgICAgICJDb2Rl
IjogICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTAsICJkZXNjcmlwdGlvbiI6
ICJGdW5jdGlvbiBib2RpZXMgKGNvZGUpIiB9LAorICAgICAgICAiRGF0YSI6ICAgICAgeyAidHlw
ZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDExLCAiZGVzY3JpcHRpb24iOiAiRGF0YSBzZWdtZW50
cyIgfSwKKyAgICAgICAgIkRhdGFDb3VudCI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAxMiwgImRlc2NyaXB0aW9uIjogIk51bWJlciBvZiBkYXRhIHNlZ21lbnRzIiB9CiAgICAgfSwK
ICAgICAib3Bjb2RlIjogewogICAgICAgICAidW5yZWFjaGFibGUiOiAgICAgICAgIHsgImNhdGVn
b3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDAsICJyZXR1cm4iOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogInRyYXAgaW1tZWRpYXRlbHkiIH0sCisgICAgICAgICJub3AiOiAg
ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMSwg
InJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibm8gb3BlcmF0aW9uIiB9
LAogICAgICAgICAiYmxvY2siOiAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wi
LCAgICAidmFsdWUiOiAgIDIsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAg
ICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogImJlZ2luIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnMsIHlpZWxkaW5nIDAgb3IgMSB2YWx1
ZXMiIH0sCiAgICAgICAgICJsb29wIjogICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29u
dHJvbCIsICAgICJ2YWx1ZSI6ICAgMywgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAg
ICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiYmVnaW4gYSBibG9jayB3aGljaCBjYW4gYWxzbyBmb3JtIGNvbnRyb2wgZmxvdyBs
b29wcyIgfSwKICAgICAgICAgImlmIjogICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJj
b250cm9sIiwgICAgInZhbHVlIjogICA0LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAg
ICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImJvb2wiXSwgICAgICAgICAgICAgICAgICAgICAg
ICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJiZWdpbiBpZiBleHByZXNzaW9uIiB9LAogICAgICAgICAiZWxzZSI6ICAgICAg
ICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDUsICJyZXR1
cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGVsc2UgZXhwcmVzc2lv
biBvZiBpZiIgfSwKLSAgICAgICAgInNlbGVjdCI6ICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6
ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI3LCAicmV0dXJuIjogWyJwcmV2Il0sICAgICAgICAg
ICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wiXSwgICAg
ICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJzZWxlY3Qgb25lIG9mIHR3byB2YWx1ZXMgYmFzZWQgb24gY29uZGl0aW9u
IiB9LAotICAgICAgICAiYW5ub3RhdGVkX3NlbGVjdCI6ICAgIHsgImNhdGVnb3J5IjogImNvbnRy
b2wiLCAgICAidmFsdWUiOiAgMjgsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAgImlt
bWVkaWF0ZSI6IFt7Im5hbWUiOiAidGFyZ2V0X3R5cGVzX2NvdW50IiwgInR5cGUiOiAidmFydWlu
dDMyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIm51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YXJnZXQgdHlwZXMgdmVjdG9yIn0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsibmFtZSI6ICJ0YXJnZXRfdHlwZXMiLCAgICAgICAidHlwZSI6ICJ2YWx1ZV90eXBlKiIs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
dGFyZ2V0IHR5cGVzIHRoYXQgaW5kaWNhdGUgcmVzdWx0IG9mIHNlbGVjdCBpbnN0cnVjdGlvbiJ9
XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJ0aGUgc2FtZSBhcyBqdXN0IHNlbGVjdCBidXQgd2l0aCB0aGUgYW5ub3RhdGlvbiBmb3Ig
cmVzdWx0IHR5cGVzIiB9LAorICAgICAgICAidHJ5IjogICAgICAgICAgICAgICAgIHsgImNhdGVn
b3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDYsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwg
ICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlw
ZSJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogImJlZ2luIHRyeSBleHByZXNzaW9uIiB9LAorICAgICAgICAiY2F0
Y2giOiAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAg
IDcsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRl
ciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUi
OiAiZXhuIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGNhdGNo
IGV4cHJlc3Npb24gb2YgdHJ5IiB9LAorICAgICAgICAidGhyb3ciOiAgICAgICAgICAgICAgIHsg
ImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDgsICJyZXR1cm4iOiBbImNvbnRy
b2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZXhuIiwgInR5cGUiOiAidmFy
dWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogInRocm93IGV4Y2VwdGlvbiIgfSwKKyAgICAgICAgInJl
dGhyb3ciOiAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjog
ICA5LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0
ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1l
IjogInJlbGF0aXZlX2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJyZXRocm93IHRo
ZSBleGNlcHRpb24gYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2siIH0sCiAgICAgICAgICJiciI6ICAg
ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMiwg
InJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJy
ZWxhdGl2ZV9kZXB0aCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYnJlYWsgdGhhdCB0YXJn
ZXRzIGFuIG91dGVyIG5lc3RlZCBibG9jayIgfSwKICAgICAgICAgImJyX2lmIjogICAgICAgICAg
ICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDEzLCAicmV0dXJuIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2Rl
cHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJjb25kaXRpb25hbCBicmVhayB0aGF0IHRh
cmdldHMgYW4gb3V0ZXIgbmVzdGVkIGJsb2NrIiB9LAogICAgICAgICAiYnJfdGFibGUiOiAgICAg
ICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTQsICJyZXR1cm4i
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidGFyZ2V0X2Nv
dW50IiwgICAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIm51bWJlciBvZiBlbnRyaWVzIGluIHRo
ZSB0YXJnZXRfdGFibGUifSwKQEAgLTU4LDggKzYyLDEzIEBACiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsibmFtZSI6ICJkZWZh
dWx0X3RhcmdldCIsICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYW4gb3V0ZXIgYmxvY2sgb3Ig
bG9vcCB0byB3aGljaCB0byBicmVhayBpbiB0aGUgZGVmYXVsdCBjYXNlIn1dLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJyYW5jaCB0
YWJsZSBjb250cm9sIGZsb3cgY29uc3RydWN0IiB9LAogICAgICAgICAicmV0dXJuIjogICAgICAg
ICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTUsICJyZXR1cm4i
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInJldHVybiB6ZXJvIG9yIG9uZSB2YWx1
ZSBmcm9tIHRoaXMgZnVuY3Rpb24iIH0sCisgICAgICAgICJkZWxlZ2F0ZSI6ICAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNCwgInJldHVybiI6IFsiY29u
dHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2ZV9kZXB0aCIs
ICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZGVsZWdhdGUgdG8gYSBwYXJlbnQgdHJ5IGJsb2Nr
IiB9LAorICAgICAgICAiY2F0Y2hfYWxsIjogICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRy
b2wiLCAgICAidmFsdWUiOiAgMjUsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAg
ICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlt
bWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogImNhdGNoIGV4Y2VwdGlvbnMgcmVnYXJkbGVzcyBvZiB0YWciIH0sCiAgICAgICAgICJk
cm9wIjogICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6
ICAyNiwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1l
dGVyIjogWyJhbnkiXSwgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiaWdub3JlIHZh
bHVlIiB9LAotICAgICAgICAibm9wIjogICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNv
bnRyb2wiLCAgICAidmFsdWUiOiAgIDEsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIm5vIG9wZXJhdGlvbiIgfSwKKyAgICAgICAgInNlbGVjdCI6ICAgICAgICAgICAg
ICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI3LCAicmV0dXJuIjogWyJw
cmV2Il0sICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2
IiwgImJvb2wiXSwgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJzZWxlY3Qgb25lIG9mIHR3byB2YWx1ZXMgYmFz
ZWQgb24gY29uZGl0aW9uIiB9LAorICAgICAgICAiYW5ub3RhdGVkX3NlbGVjdCI6ICAgIHsgImNh
dGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjgsICJyZXR1cm4iOiBbInByZXYiXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9v
bCJdLCAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidGFyZ2V0X3R5cGVzX2NvdW50Iiwg
InR5cGUiOiAidmFydWludDMyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIm51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YXJnZXQgdHlw
ZXMgdmVjdG9yIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsibmFtZSI6ICJ0YXJnZXRfdHlwZXMiLCAgICAgICAidHlwZSI6
ICJ2YWx1ZV90eXBlKiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAidGFyZ2V0IHR5cGVzIHRoYXQgaW5kaWNhdGUgcmVzdWx0IG9mIHNlbGVj
dCBpbnN0cnVjdGlvbiJ9XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgc2FtZSBhcyBqdXN0IHNlbGVjdCBidXQgd2l0aCB0aGUg
YW5ub3RhdGlvbiBmb3IgcmVzdWx0IHR5cGVzIiB9LAogICAgICAgICAiZW5kIjogICAgICAgICAg
ICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTEsICJyZXR1cm4i
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImVuZCBhIGJsb2NrLCBsb29wLCBvciBp
ZiIgfSwKICAgICAgICAgImkzMi5jb25zdCI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJzcGVj
aWFsIiwgICAgInZhbHVlIjogIDY1LCAicmV0dXJuIjogWyJpMzIiXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJp
bW1lZGlhdGUiOiBbeyJuYW1lIjogInZhbHVlIiwgICAgICAgICAgInR5cGUiOiAidmFyaW50MzIi
fV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJhIGNvbnN0YW50IHZhbHVlIGludGVycHJldGVkIGFzIGkzMiIgfSwKICAgICAgICAg
Imk2NC5jb25zdCI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJzcGVjaWFsIiwgICAgInZhbHVl
IjogIDY2LCAicmV0dXJuIjogWyJpNjQiXSwgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJh
bWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJu
YW1lIjogInZhbHVlIiwgICAgICAgICAgInR5cGUiOiAidmFyaW50NjQifV0sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhIGNvbnN0
YW50IHZhbHVlIGludGVycHJldGVkIGFzIGk2NCIgfSwK
</data>
<flag name="commit-queue"
          id="464265"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440370</attachid>
            <date>2021-10-06 08:13:19 -0700</date>
            <delta_ts>2021-10-06 08:38:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229681-20211006081317.patch</filename>
            <type>text/plain</type>
            <size>706199</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
YzUyN2ZiNmZlZjIwNjViZWEzODc0OGJjOGE0MWI3MWQzZjljNmY5Li41NmIyNDM4ZTM3NzI4NGI2
MzU5MTg2NmFlZWNjYWE1Nzg4NTk5MjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NTAgQEAKKzIwMjEtMDktMTYgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+IGFuZCBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCB0aGUgV2ViQXNzZW1ibHkgZXhjZXB0aW9uIGhhbmRsaW5nIHByb3Bvc2FsCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk2ODEKKyAg
ICAgICAgPHJkYXI6Ly84MTYwMzM4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlv
biBoYW5kbGluZyBwcm9wb3NhbCwgYXMgcGVyCisgICAgICAgIHRoZSBXSVAgc3BlYzogaHR0cHM6
Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2V4Y2VwdGlvbi1oYW5kbGluZworCisgICAgICAgIFRo
ZSBwcm9wb3NhbCBpbmNsdWRlcyA2IG5ldyBpbnN0cnVjdGlvbnM6IHRyeSwgY2F0Y2gsIGNhdGNo
X2FsbCwKKyAgICAgICAgZGVsZWdhdGUsIHRocm93IGFuZCByZXRocm93LiBBbGwgdGhlIGluc3Ry
dWN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5CisgICAgICAgIHRoZSBMTEludCBhbmQgQjMgZ2VuZXJh
dG9ycywgYnV0IG5vdCB5ZXQgc3VwcG9ydGVkIGluIEFpci4gQW55CisgICAgICAgIGZ1bmN0aW9u
cyB1c2UgZXhjZXB0aW9ucyB3aWxsIHVzZSBCMyBpbiBCQlEuCisKKyAgICAgICAgQSBmZXcgaW1w
b3J0YW50IG5vdGVzIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgLSBJbiBCMywg
c2luY2Ugd2UgY2FuIG5vdyBoYXZlIG11bHRpcGxlIGVudHJ5cG9pbnRzIChvbmUgZm9yIHRoZQor
ICAgICAgICBmdW5jdGlvbiBlbnRyeSArIDEgZm9yIGVhY2ggY2F0Y2gvY2F0Y2hfYWxsKSwgd2Ug
Y2FuIG5vIGxvbmdlciBqdXN0CisgICAgICAgIHJlcGxhY2UgZXZlcnkgdmFsdWUgaW4gdGhlIHN0
YWNrIHdpdGggYSBQaGkgd2hlbiB3ZSBmaW5kIGEgbmV3CisgICAgICAgIGVudHJ5cG9pbnQuIFRo
aXMgd29ya2VkIHNvIGZhciBiZWNhdXNlIG9mIHRoZSBhc3N1bXB0aW9uIHRoYXQgYW55CisgICAg
ICAgIGJsb2NrIGNvdWxkbid0IGFjY2VzcyBpdHMgZW5jbG9zaW5nIHN0YWNrLCBhbmQgc2luY2Ug
dGhlIGVuY2xvc2luZyBzdGFjaworICAgICAgICB3b3VsZCBvbmx5IGJlIGFjY2Vzc2libGUgd2hl
biB3ZSBleGl0ZWQgdGhlIGN1cnJlbnQgYmxvY2ssIHdlIGFkZGVkIFBoaXMKKyAgICAgICAgYXQg
dGhlIGVuZCBvZiBlYWNoIGJsb2NrIHdoZW4gd2UgaGFkIGEgbmV3IGVudHJ5cG9pbnQuIE5vdywg
c2luY2Ugd2UgaGF2ZSB0byBjYXB0dXJlIGFsbAorICAgICAgICBsaXZlIHZhbHVlcyBhdCBhbnkg
cG9pbnQgdGhhdCBtaWdodCB0aHJvdyAoY2FsbHMsIHRocm93IGFuZCByZXRocm93KSwKKyAgICAg
ICAgd2UgYnJlYWsgdGhhdCBhc3N1bXB0aW9uLiBUbyBzaW1wbGlmeSBhbGwgdGhlIHBvc3NpYmxl
IHdheXMgd2UgbWlnaHQKKyAgICAgICAgaGF2ZSB0byBtZXJnZSB0aGUgc3RhdGUgZnJvbSBtdWx0
aXBsZSBlbnRyeXBvaW50cyB3ZSBub3cgdXNlIEIzCisgICAgICAgIFZhcmlhYmxlcyB0byByZXBy
ZXNlbnQgc3RhY2sgc2xvdHMuCisgICAgICAgIC0gU29tZSBleHRyYSBpbmZvcm1hdGlvbiBpcyBy
ZXF1aXJlZCB0byBiZSBhYmxlIHRvIHByb3Blcmx5IHJlc3RvcmUKKyAgICAgICAgdGhlIHN0YXRl
IHdoZW4gY2F0Y2hpbmcgYW4gZXhjZXB0aW9uOgorICAgICAgICAgICAgLSBXZSBhZGRlZCBhIGZp
ZWxkIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2guIFRoaXMgZmllbGQgaXMgbmVjZXNzYXJ5CisgICAg
ICAgICAgICBiZWNhdXNlIHdoZW5ldmVyIHdlIHRocm93LCB3ZSBtaWdodCBlbmQgdXAgaW4gSmF2
YVNjcmlwdCwgd2hpY2gKKyAgICAgICAgICAgIGFzc3VtZXMgdGhlIGNhbGxlZSBpcyBhIGNlbGwg
YW5kIHVzZXMgaXQgdG8gZ2V0IHRoZSBWTSBhbmQgcmVzdG9yZQorICAgICAgICAgICAgY2FsbGVl
IHNhdmVzLiBUaGUgaXNzdWUgaXMgd2hlbiBjYXRjaGluZyBleGNlcHRpb25zIGluIHdhc20gd2UK
KyAgICAgICAgICAgIHN0aWxsIG5lZWQgdGhlIG9yaWdpbmFsIGNhbGxlZSwgYW5kIGlmIHRocm93
aW5nIGFuZCBjYXRjaGluZyBmcm9tCisgICAgICAgICAgICB0aGUgc2FtZSBmcmFtZSwgdGhhdCBj
YWxsIGZyYW1lIHNsb3QgaGFzIG5vdyBiZWVuIG92ZXJ3cml0dGVuLCBzbworICAgICAgICAgICAg
d2Ugc3RvcmUgaXRzIG9yaWdpbmFsIHZhbHVlIGluIHRoZSBWTSBmaWVsZC4KKyAgICAgICAgICAg
IC0gV2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZSBjdXJyZW50IFdhc20gSW5zdGFuY2UgaW50byB0
aGUgY2FsbAorICAgICAgICAgICAgZnJhbWUncyBzbG90IGZvciB0aGUgYHRoaXNgIGFyZ3VtZW50
LiBUaGUgaW5zdGFuY2UgaXMgdXNlZCBib3RoIGJ5CisgICAgICAgICAgICB0aGUgdW53aW5kZXIs
IHRvIGNoZWNrIGlmIHRoZSBleGNlcHRpb24gYmVpbmcgdGhyb3duIG1hdGNoZXMgdGhlCisgICAg
ICAgICAgICBleGNlcHRpb25zIGhhbmRsZWQgYnkgY2F0Y2ggY2FuZGlkYXRlcywgYW5kIGJ5IHRo
ZSBjYXRjaCBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgICAgIHdoaWNoIGlzIG5lY2Vzc2FyeSB3
aGVuIHRocm93aW5nIGZyb20gYSBjcm9zcyBpbnN0YW5jZSBjYWxsIHdoZXJlIGJvdGgKKyAgICAg
ICAgICAgIHRoZSBjYWxsZWUgc2F2ZSBvciBUTFMgd2lsbCBoYXZlIHRoZSBjYWxsZWUncyBpbnN0
YW5jZS4KKyAgICAgICAgICAgIC0gV2Ugc3RvcmUgdGhlIGN1cnJlbnQgb3Bjb2RlIGZvciB0aGUg
bGxpbnQsIG9yIHRoZQorICAgICAgICAgICAgY2FsbCBzaXRlIGluZGV4IGZvciBCMywgaW4gdGhl
IGNhbGwgZnJhbWUgc2xvdCBmb3IgdGhlIGFyZ3VtZW50CisgICAgICAgICAgICBjb3VudCB0YWcu
IFRoZSBjYWxsIHNpdGUgaW5kZXggaXMgdXNlZCBieSB0aGUgdW53aW5kZXIgdG8gY2hlY2sKKyAg
ICAgICAgICAgIGlmIGEgZ2l2ZW4gY2F0Y2ggY2FuIGhhbmRsZSB0aGUgZXhjZXB0aW9uIGJlaW5n
IHRocm93bi4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6Cisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9IYW5kbGVySW5mby5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6OkJhc2VJbnN0cnVj
dGlvbjo6bmFtZSBjb25zdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Omhhc2ggY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpkZWxldGVkVmFsdWUpOgorICAgICAgICAo
SlNDOjpDYWxsU2l0ZUluZGV4Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXhIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6Q2FsbFNp
dGVJbmRleEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkNhdGNoSW5mbzo6Q2F0Y2hJbmZvKToKKyAgICAgICAgKEpTQzo6
VW53aW5kRnVuY3Rvcjo6VW53aW5kRnVuY3Rvcik6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0
b3I6Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5k
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpD
YXRjaEluZm86OkNhdGNoSW5mbyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKToK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBq
aXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAg
ICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJ
VDo6Y29udmVydENhbGxlZVRvVk0pOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5oOgorICAg
ICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZVJlZik6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRX
aWRlMTZDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldFdpZGUzMkNvZGVSZWYpOgor
ICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50
Ojp3YXNtUmV0dXJuVG9UaHJvdyk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVXYXNtQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlV2FzbUNhdGNoQWxsKToKKyAgICAgICAg
KiBsbGludC9MTEludEV4Y2VwdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludE9mZnNldHNF
eHRyYWN0b3IuY3BwOgorICAgICAgICAqIGxsaW50L1dlYkFzc2VtYmx5LmFzbToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNl
OjpFcnJvckluc3RhbmNlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c2V0Q2F0Y2hhYmxlRnJvbVdhc20pOgorICAgICAg
ICAoSlNDOjpFcnJvckluc3RhbmNlOjppc0NhdGNoYWJsZUZyb21XYXNtIGNvbnN0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmNhbGxlZUZvcldhc21DYXRjaE9mZnNldCk6Cisg
ICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzVHJ5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0FueUNhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzQmxvY2spOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6Q29udHJvbERhdGEpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNUcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNBbnlDYXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpDb250cm9sRGF0YTo6aXNCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2gpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2hBbGwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6dHJ5U3Rh
cnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6dHJ5RW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGE6OnRyeURlcHRoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmNhdGNoS2luZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpleGNlcHRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6c3RhY2tTaXplIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZGlkUG9wVmFsdWVGcm9tU3RhY2sp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRTdGFja01hcCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnRha2VTdGFja21hcHMpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjp0YWtlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpwdXNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
c2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Z2Vu
ZXJhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpmaXh1cFBv
aW50ZXJQbHVzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnJlc3RvcmVX
ZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6aW5zZXJ0RW50cnlTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjppbnNlcnRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRSZWZJc051bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUYWJs
ZUdldCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkUmVmRnVuYyk6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlSW5pdCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRhYmxlQ29weSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6Omdl
dExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0
Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5RmlsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUluaXQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlDb3B5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpnZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpzZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hl
Y2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmVtaXRMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpzdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OnNhbml0aXplQXRvbWljUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNMb2FkT3ApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNMb2FkKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY1N0b3JlT3ApOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNTdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNCaW5hcnlSTVdPcCk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmF0b21pY0JpbmFyeVJNVyk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YXRvbWljTm90aWZ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6dHJ1bmNTYXR1cmF0ZWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRTZWxlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRMb29w
VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkRnJv
bVNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjb25u
ZWN0Q29udHJvbEVudHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
TG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNo
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRG
b3JFeGNlcHRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0
Y2hUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
Q2F0Y2hBbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYXRjaEFs
bFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0
Q2F0Y2hJbXBsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdh
dGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5y
ZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUaHJvdyk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbmRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEVuZFRv
VW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjcmVhdGVD
YWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENh
bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayk6CisgICAgICAgIChKU0M6Oldh
c206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVFeGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
ZW1pdENoZWNrc0Zvck1vZE9yRGl2KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1VPik6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4pOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0ej4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0
ej4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRP
cDxGNjRDb252ZXJ0VUk2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNT
RjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyVHJ1bmNTRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyVHJ1bmNVRjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0Pik6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0Pik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMy
Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNVRjMyPik6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAg
ICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpw
cmVwYXJlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBs
YW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpDYWxsZWU6OmhhbmRsZXJGb3JJbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2Fs
bGVlOjpMTEludENhbGxlZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2FsbGVlOjpsaW5r
RXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6aW5nSklUQ2Fs
bGVlOjpsaW5rRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6
aW5nSklUQ2FsbGVlOjpzdGFja21hcCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVl
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6aGFzRXhjZXB0aW9uSGFuZGxlcnMgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmZ1bmN0aW9uQ29kZUJsb2NrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6T3B0aW1pemluZ0pJVENhbGxlZTo6T3B0aW1pemluZ0pJ
VENhbGxlZSk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V2FzbUNhbGxpbmdDb252ZW50aW9uOjpjYWxsSW5mb3JtYXRpb25Gb3Ig
Y29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0eXBlVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjppc1ZhbGlkRXh0ZXJuYWxLaW5k
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVN0cmluZyk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxv
Y2s6Om51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpGdW5jdGlvbkNvZGVCbG9jazo6ZXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uQ29kZUJsb2NrOjphZGRFeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKiB3
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjppc1RyeU9yQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eGNlcHRpb25JbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20v
V2FzbUhhbmRsZXJJbmZvLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkhhbmRsZXJJ
bmZvOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmhhbmRs
ZXJGb3JJbmRleCk6CisgICAgICAgICogd2FzbS9XYXNtSGFuZGxlckluZm8uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlVubGlua2VkSGFuZGxlckluZm86OlVubGlua2VkSGFuZGxlcklu
Zm8pOgorICAgICAgICAoSlNDOjpXYXNtOjpIYW5kbGVySW5mbzo6dGFnIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmRlbGVnYXRlVGFyZ2V0IGNvbnN0KToKKyAgICAg
ICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojp+SW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmg6CisgICAgICAgIChK
U0M6Oldhc206Okluc3RhbmNlOjphZGRUYWcpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5j
ZTo6dGFnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6dHJ5Xyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6Y2F0Y2hfKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc0xvb3Ap
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmlzQmxv
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
SWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
VHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpp
c0FueUNhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xU
eXBlOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnVuaWZ5
VmFsdWVzV2l0aEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6Ondh
bGtFeHByZXNzaW9uU3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
bWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJz
ZUFuZENvbXBpbGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpMTEludEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpy
ZXBhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNh
bGxlcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRp
b25Gb3JDYWxsZWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZExvb3ApOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21MaW1pdHMuaDoKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5m
b3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmV4Y2Vw
dGlvbkluZGV4U3BhY2VTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb246OmlzSW1wb3J0ZWRFeGNlcHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25z
dCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpzaWduYXR1cmVJbmRl
eEZyb21FeGNlcHRpb25JbmRleFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlSW5mb3JtYXRpb246OmltcG9ydEV4Y2VwdGlvbkNvdW50IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmlzRGVjbGFyZWRFeGNlcHRpb24gY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6YWRkRGVjbGFyZWRFeGNlcHRp
b24pOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9X
YXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAqIHdhc20vV2FzbU9TUkVudHJ5RGF0YS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpPU1JF
bnRyeURhdGE6OnZhbHVlcyk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OmxvYWRWYWx1ZXNJbnRvQnVmZmVyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6ZG9PU1JFbnRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTik6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHdh
c20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFy
c2VyOjpwYXJzZUltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBh
cnNlRXhwb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFeGNl
cHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25zLmg6CisgICAgICAgIChKU0M6Oldh
c206OnZhbGlkYXRlT3JkZXIpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWduYXR1cmVJbmZvcm1h
dGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpzaWduYXR1
cmVGb3IpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpXQVNNX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0
aHMuaDoKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rpb25TaXplKToKKyAgICAg
ICAgKiB3YXNtL1dhc21UYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9XYXNt
VGFnLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdl
bmVyYXRvci5oLgorICAgICAgICAoSlNDOjpXYXNtOjpUYWc6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6Oldhc206OlRhZzo6cGFyYW1ldGVyQ291bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUYWc6OnBhcmFtZXRlciBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6c2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6VGFnOjpUYWcpOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5jcHA6CisgICAg
ICAgICogd2FzbS9XYXNtVGh1bmtzLmg6CisgICAgICAgICogd2FzbS9nZW5lcmF0ZVdhc21CM0lS
R2VuZXJhdG9ySW5saW5lc0hlYWRlci5weToKKyAgICAgICAgKENvZGVHZW5lcmF0b3IuZ2VuZXJh
dGVPcGNvZGUpOgorICAgICAgICAoQ29kZUdlbmVyYXRvci5tYWtlUmVzdWx0KToKKyAgICAgICAg
KENvZGVHZW5lcmF0b3IuZ2VuZXJhdGUpOgorICAgICAgICAqIHdhc20vZ2VuZXJhdGVXYXNtT3Bz
SGVhZGVyLnB5OgorICAgICAgICAodHlwZU1hY3JvaXplcik6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6SlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRp
b246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlv
bjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Z2V0
QXJnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnN1YnNwYWNlRm9y
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6dGFnIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6cGF5bG9hZCBjb25zdCk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjp0b0pTVmFsdWUpOgor
ICAgICAgICAoSlNDOjpmcm9tSlNWYWx1ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRy
eUNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwOgorICAgICAgICAo
SlNDOjpjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKToKKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eVRhZzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6SlNXZWJBc3NlbWJseVRh
Zyk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaC4K
KyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2Fz
bVRvSlMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3I6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAg
ICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OmdldEV4Y2VwdGlv
bik6CisgICAgICAgIChKU0M6OmdldFRhZyk6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1
Y3Rvcjo6Y3JlYXRlVGFnKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
OjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlUYWdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFnUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpnZXRUYWcp
OgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAq
IHdhc20vd2FzbS5qc29uOgorCiAyMDIxLTEwLTA2ICBYYW4gTMOzcGV6ICA8eGFuQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0pTQ11bMzJiaXRdIFJlbW92ZSBhIGJ1bmNoIG9mIGNvbXBpbGVyIHdh
cm5pbmdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYjMyYzMwZjExMGY2
YTI5ZTJjODE2Zjg3YzU1NmExMmZkYmUwZDZjOC4uZmNmMGQ5YjZiZGZiOGFjOGExYjMyNTU3ZDRh
MTlkMWUyZmQwMjZjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTIy
LDYgKzEyMiw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9PQkpFQ1RfTFVUX1NPVVJDRVMKICAgICB3
YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBp
bGVFcnJvckNvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJy
b3JQcm90b3R5cGUuY3BwCisgICAgd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmNwcAorICAgIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwCiAg
ICAgd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMv
V2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0xMzYsNiArMTM4LDggQEAgc2V0KEphdmFTY3JpcHRD
b3JlX09CSkVDVF9MVVRfU09VUkNFUwogICAgIHdhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3JQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3Iu
Y3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAorICAgIHdhc20v
anMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAKKyAgICB3YXNtL2pzL1dlYkFzc2VtYmx5
VGFnUHJvdG90eXBlLmNwcAogKQogCiBzZXQoSmF2YVNjcmlwdENvcmVfRlJBTUVXT1JLUwpAQCAt
NjAzLDYgKzYwNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAKICAgICBiMy9CM0NvbW1vbi5oCiAgICAgYjMvQjNUeXBlLmgKKyAgICBiMy9CM1ZhbHVl
UmVwLmgKIAogICAgIGJpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCiAgICAgYmluZGluZ3Mv
U2NyaXB0T2JqZWN0LmgKQEAgLTEyMjAsNiArMTIyNSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmgKICAgICB3YXNtL1dhc21Gb3JtYXQuaAogICAgIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
LmgKKyAgICB3YXNtL1dhc21IYW5kbGVySW5mby5oCiAgICAgd2FzbS9XYXNtSW5kZXhPck5hbWUu
aAogICAgIHdhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCiAgICAgd2FzbS9XYXNtTWVtb3J5
LmgKQEAgLTEyMjgsMTIgKzEyMzQsMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICB3YXNtL1dhc21Nb2R1bGUuaAogICAgIHdhc20vV2FzbU5hbWUu
aAogICAgIHdhc20vV2FzbU5hbWVTZWN0aW9uLmgKKyAgICB3YXNtL1dhc21PU1JFbnRyeURhdGEu
aAogICAgIHdhc20vV2FzbVBhZ2VDb3VudC5oCiAgICAgd2FzbS9XYXNtU2VjdGlvbnMuaAogICAg
IHdhc20vV2FzbVNpZ25hdHVyZS5oCiAgICAgd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuaAog
ICAgIHdhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5oCiAgICAgd2FzbS9XYXNtVGllclVwQ291bnQu
aAorICAgIHdhc20vV2FzbVZhbHVlTG9jYXRpb24uaAogCiAgICAgd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmgKICAgICB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCAy
ODg1YjUxMDE3Y2MxYWUzZDg5MmVmM2M1ZjI3YTRiMTIzNzUzODQyLi4wNmIyMTc1MTJjNmZiYzJk
ODUyNzI0YWFhNzZmYTU3OTRlM2RhZDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTk3LDYgKzE5Nyw4IEBA
ICQoUFJPSkVDVF9ESVIpL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CiAkKFBST0pFQ1Rf
RElSKS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dl
YkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNt
L2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAorJChQUk9KRUNUX0RJUikv
d2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAorJChQUk9KRUNUX0RJ
Uikvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAKICQoUFJPSkVDVF9E
SVIpL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAKICQoUFJPSkVDVF9E
SVIpL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCiAkKFBST0pFQ1RfRElS
KS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTIxMSw2ICsy
MTMsOCBAQCAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29u
c3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yUHJvdG90eXBlLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
Q29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQ
cm90b3R5cGUuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBl
LmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS93YXNtLmpzb24KICQoUFJPSkVDVF9ESVIpL3lhcnIv
Y3JlYXRlX3JlZ2V4X3RhYmxlcwogJChQUk9KRUNUX0RJUikveWFyci9nZW5lcmF0ZVlhcnJDYW5v
bmljYWxpemVVbmljb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggMmFkMjEzMWM1ODY2OWJkMDU3NWM3YWY0
MGE2YzQyN2E1OTRmNWMzZS4uY2IwNWQ4MjE2MmFkOWM0Y2ZmNjRjYTE4Y2FlYWUxODcxYmVjNmY2
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdApAQCAtODIsNiArODIsOCBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2FzbUxMSW50R2VuZXJhdG9ySW5saW5lcy5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2Fz
bU9wcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENv
cmUvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaAogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5Q29tcGls
ZUVycm9yUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaAor
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFz
c2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5s
dXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3Jl
L1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmx1dC5oCkBAIC05Niw2ICs5OCw4IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0CiAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3JQcm90b3R5cGUubHV0LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9X
ZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5sdXQu
aAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dl
YkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCmluZGV4IGVjYmNlNjdmNzhjMDAzNGMxNjZmNTBkNTg5MmE2ZjA4YzVk
YTQwZDYuLjc4OTc1NmYxMGY4YmRiODBjNTJmNGJlOTgwZjUzZjQ5MmEyZDFkNGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yMDMsNiArMjAzLDggQEAg
T0JKRUNUX0xVVF9IRUFERVJTID0gXAogICAgIFRlbXBvcmFsVGltZVpvbmVQcm90b3R5cGUubHV0
LmggXAogICAgIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggXAogICAg
IFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJs
eUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJseUV4Y2VwdGlvblBy
b3RvdHlwZS5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5sdXQuaCBc
CiAgICAgV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUubHV0LmggXAogICAgIFdlYkFzc2VtYmx5
SW5zdGFuY2VDb25zdHJ1Y3Rvci5sdXQuaCBcCkBAIC0yMTcsNiArMjE5LDggQEAgT0JKRUNUX0xV
VF9IRUFERVJTID0gXAogICAgIFdlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmx1dC5o
IFwKICAgICBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0LmggXAogICAgIFdlYkFzc2Vt
Ymx5VGFibGVQcm90b3R5cGUubHV0LmggXAorICAgIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3Iu
bHV0LmggXAorICAgIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oIFwKICMKIAogJChPQkpF
Q1RfTFVUX0hFQURFUlMpOiAlLmx1dC5oIDogJS5jcHAgJChKYXZhU2NyaXB0Q29yZSkvY3JlYXRl
X2hhc2hfdGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGMzNTU0NTBkMjRm
NjlhOGM5MThmYmQzOTA1YjQyYmNiOTUwNzkzOC4uODg4OWIxMGZmMjI3YWMxNzQ5MTVjMWFkNTcx
ZWMzMzNhN2ExY2E0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY2Myw3ICs2
NjMsNyBAQAogCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovOyB9OwogCQkwRkVDODU0MjFCREFDREFDMDA4
MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLzsg
fTsKIAkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmggKi87IH07Ci0JCTBGRUM4NTQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlUmVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oICovOyB9OworCQkwRkVDODU0
NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVSZXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xv
cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3Jpbmcu
aCAqLzsgfTsKIAkJMEZFQzg1NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckFyZy5oICovOyB9OwogCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyog
QWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLzsgfTsK
QEAgLTc5Niw2ICs3OTYsNyBAQAogCQkxNDc4Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxl
VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NkZBNUE4MTM3OEY2QjAwMDM2MjdBMyAvKiBIYW5kbGVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVB
NCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3QjgzQUEwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNo
ZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5
U2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
Qjg0NjIwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0ODUyMUQ4MjZFQUVCRkUwMEND
MUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlcklu
Zm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NDg2QThDMDI0QUJFRDQ4MDA3MzkyMkQgLyogSlNMb2NrUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NkE4QkYyNEFCRUQzQzAwNzM5
MjJEIC8qIEpTTG9ja1JlZlByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NzRBRTIx
NUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDhBN0JGMDFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5l
Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDhBN0JFRTFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2FsbEZyYW1lLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNyw2ICs4MjgsMTMg
QEAKIAkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0E5NThB
MTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDQTk1OEQxNkFCNTBGQTAw
OTM4QTA2IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNEQwMUE3NzIxRkIzNTFGMDBCQzU0RTkgLyogSlNTY3JpcHRTb3Vy
Y2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTREMDFBNzYyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCAq
LzsgfTsKKwkJMTREMDFCRTYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
RDAxQkRBMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi87
IH07CisJCTE0RDAxQkU3MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFC
REIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggKi87IH07CisJ
CTE0RDAxQkU5MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFC
REQyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggKi87
IH07CisJCTE0RDAxQkVDMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJFMDI2REVF
RjM3MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5oICovOyB9OworCQkxNEQwMUJFRDI2REVF
RjM4MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCRTEyNkRFRUYzODAwQ0FFMEQwIC8q
IEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLzsgfTsKKwkJMTREMDFCRUYyNkRFRUYzODAwQ0FF
MEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkUzMjZERUVGMzgwMENBRTBEMCAv
KiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi87IH07CisJCTE0RDAxQkY1MjZE
RUVGNTMwMENBRTBEMCAvKiBXYXNtVGFnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICov
OyB9OwogCQkxNEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDJGM0Q5MTM5RjRCRTIw
MDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9w
ZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNERGMDREOTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RTg0
RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlBMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFr
QmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTI2NCw3ICsxMjcyLDcgQEAKIAkJODYyODFFRjAyNUI2MTYwMDAwMzY3MDA0IC8qIENoZWNr
UHJpdmF0ZUJyYW5kVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODYyODFFRUYyNUI2MTYwMDAwMzY3MDA0IC8qIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudC5oICovOyB9OwogCQk4NjI4MUVGNDI1QjYxQUYwMDAzNjcwMDQgLyogQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2MjgxRUYzMjVCNjFBRjAwMDM2NzAwNCAvKiBDaGVja1ByaXZhdGVCcmFuZFN0YXR1
cy5oICovOyB9OwogCQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NjNCMjNERjBGQzYwRTYyMDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJODYzRkJDNUEyNUIw
OTNCOTAwRjZDOTMwIC8qIFdhc21WYWx1ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjNGQkM1ODI1QjA5M0I5MDBGNkM5MzAgLyogV2Fz
bVZhbHVlTG9jYXRpb24uaCAqLzsgfTsKKwkJODYzRkJDNUEyNUIwOTNCOTAwRjZDOTMwIC8qIFdh
c21WYWx1ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NjNGQkM1ODI1QjA5M0I5MDBGNkM5MzAgLyogV2FzbVZhbHVlTG9jYXRpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjVBMzBG
MTEzNTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5RSAv
KiBKU0NKU1ZhbHVlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTg2NURBMEM1MjVCODk1NzQwMDg3NTc3MiAvKiBTZXRQcml2YXRlQnJh
bmRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NjVEQTBDNDI1Qjg5NTc0MDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oICov
OyB9OwogCQk4NjVEQTBDODI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjVEQTBD
NzI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmggKi87IH07CkBAIC0x
OTM3LDcgKzE5NDUsNyBAQAogCQlFM0JGQTVEMDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJl
ZEdsb2JhbFByb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFM0JGQTVDRDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJlZEdsb2JhbFByb3Bl
cnR5LmggKi87IH07CiAJCUUzQkZEMEJDMURBRjgwOEUwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25p
cHBldFBhcmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTNCRkQwQkExREFGODA3QzAwNjVERUEyIC8qIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmgg
Ki87IH07CiAJCUUzQzI5NUREMUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5n
ZUFkYXB0aXZlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTNDMjk1REMxRUQyQ0JBQTAwRDMwMTZGIC8qIE9iamVjdFByb3BlcnR5Q2hh
bmdlQWRhcHRpdmVXYXRjaHBvaW50LmggKi87IH07Ci0JCUUzQzY5NEIzMjMwMjY4NzcwMDZGQkU0
MiAvKiBXYXNtT1NSRW50cnlEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFM0M2OTRCMTIzMDI2ODczMDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5RGF0
YS5oICovOyB9OworCQlFM0M2OTRCMzIzMDI2ODc3MDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5RGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNDNjk0
QjEyMzAyNjg3MzAwNkZCRTQyIC8qIFdhc21PU1JFbnRyeURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFM0M3M0E5MTI1QkZBNzNCMDBFRkUz
MDMgLyogV2FzbVN0cmVhbWluZ1BsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzQzczQTkwMjVCRkE3MzQwMEVGRTMwMyAvKiBXYXNtU3RyZWFtaW5n
UGxhbi5oICovOyB9OwogCQlFM0M3OUNBQjFEQjlBNERDMDBEMUVDQTQgLyogRE9NSklURWZmZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0M3OUNB
QTFEQjlBNEQ2MDBEMUVDQTQgLyogRE9NSklURWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTNDOEVENDMyM0ExREJDQjAwMTMxOTU4IC8q
IElzb0lubGluZWRIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzQzhFRDQyMjNBMURCQzUwMDEzMTk1OCAvKiBJc29JbmxpbmVkSGVh
cENlbGxUeXBlLmggKi87IH07CkBAIC0zNDYxLDYgKzM0NjksOCBAQAogCQkxNDgyQjc4QTBBNDMw
NUFCMDA1MTdDRkMgLyogQVBJQ2FzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBUElDYXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODJCN0UxMEE0MzA3
NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU09iamVjdFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDgyQjdF
MjBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNPYmplY3RSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNDg1MjFENTI2RUFFQkRGMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21IYW5kbGVySW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUhhbmRsZXJJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODZBOEJFMjRBQkVEM0IwMDczOTIyRCAvKiBK
U0xvY2tSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNMb2NrUmVmLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4NkE4QkYyNEFCRUQzQzAwNzM5MjJEIC8qIEpTTG9ja1Jl
ZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNMb2NrUmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Njb3BlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1NDQsNiArMzU1NCwyMCBAQAogCQkxNENDM0JB
MjIxMzhBMjM4MDAyRDU4QjYgLyogSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5zdHJ1Y3Rpb25TdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTREMDFBNzUyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJv
dmlkZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQwMUE3NjIxRkIzNTAzMDBCQzU0RTkg
LyogSlNTY3JpcHRTb3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdFNvdXJj
ZVByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRBMjZERUVG
MzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaDsgcGF0aCA9IGpz
L1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTREMDFCREIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFnUHJvdG90eXBl
Lmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxNEQwMUJEQzI2REVFRjM3MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJERDI2REVFRjM3MDBDQUUwRDAg
LyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaDsgcGF0aCA9IGpzL1dl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTE0RDAxQkRFMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFn
Q29uc3RydWN0b3IuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRGMjZERUVGMzcwMENBRTBEMCAv
KiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHA7IHBhdGggPSBqcy9XZWJBc3Nl
bWJseVRhZ1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAx
QkUwMjZERUVGMzcwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlUYWcuaDsgcGF0aCA9IGpzL0pTV2ViQXNz
ZW1ibHlUYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRTEyNkRFRUYz
ODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJF
MjI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJFMzI2REVFRjM4MDBDQUUwRDAg
LyogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmg7IHBhdGggPSBq
cy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0RDAxQkU0MjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlUYWcu
Y3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseVRhZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0RDAxQkU1MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlv
bkNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlF
eGNlcHRpb25Db25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0
RDAxQkYyMjZERUVGNTIwMENBRTBEMCAvKiBXYXNtVGFnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UYWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRTcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUgLyogQ0xvb3BTdGFjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTG9vcFN0YWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0RDg1Nzc0MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gdGVzdGFwaS5qczsgcGF0aCA9
IEFQSS90ZXN0cy90ZXN0YXBpLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE1
NSw2ICs3MTc5LDggQEAKIAkJCQkxNDg3Q0UxNjIzNzc0MTAwMDA0NDQyOUMgLyogV2FzbUdlbmVy
YXRvclRyYWl0cy5oICovLAogCQkJCUUzODM1MDA4MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNtR2xv
YmFsLmNwcCAqLywKIAkJCQlFMzgzNTAwOTIzOTBEOTM3MDAzNjMxNkQgLyogV2FzbUdsb2JhbC5o
ICovLAorCQkJCTE0ODUyMUQ1MjZFQUVCREYwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uY3Bw
ICovLAorCQkJCTE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCAq
LywKIAkJCQlBRDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmNwcCAq
LywKIAkJCQlBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi8s
CiAJCQkJQUQ1QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8sCkBA
IC03MjEyLDYgKzcyMzgsOCBAQAogCQkJCUUzQzczQTkwMjVCRkE3MzQwMEVGRTMwMyAvKiBXYXNt
U3RyZWFtaW5nUGxhbi5oICovLAogCQkJCUFENUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUu
aCAqLywKKwkJCQkxNEQwMUJGMjI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5jcHAgKi8sCisJ
CQkJMTREMDFCRjMyNkRFRUY1MjAwQ0FFMEQwIC8qIFdhc21UYWcuaCAqLywKIAkJCQk1MjUwRDJD
RjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCiAJCQkJNTI1MEQyRDAxRThE
QTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLywKIAkJCQlFM0M2OTRCMjIzMDI2ODc0MDA2
RkJFNDIgLyogV2FzbVRpZXJVcENvdW50LmNwcCAqLywKQEAgLTkwOTcsNiArOTEyNSw4IEBACiAJ
CQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAq
LywKIAkJCQlBRDJGQ0JBNjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvci5jcHAgKi8sCiAJCQkJQUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3IuaCAqLywKKwkJCQkxNEQwMUJEQzI2REVFRjM3MDBDQUUwRDAgLyogSlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHAgKi8sCisJCQkJMTREMDFCRTEyNkRFRUYzODAwQ0FFMEQw
IC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLywKIAkJCQlFM0JGM0M0QzIzOTBEMUUzMDA4
QkM3NTIgLyogSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAgKi8sCiAJCQkJRTNCRjNDNEIyMzkwRDFF
MjAwOEJDNzUyIC8qIEpTV2ViQXNzZW1ibHlHbG9iYWwuaCAqLywKIAkJCQk3OTZGQjQzOTFERkY4
QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCAqLywKQEAgLTkxMTIsMTIgKzkx
NDIsMTggQEAKIAkJCQlBRDJGQ0JBRDFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvci5oICovLAogCQkJCUFEMkZDQkFFMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5VGFibGUuY3BwICovLAogCQkJCUFEMkZDQkFGMURCNThEQTQwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5VGFibGUuaCAqLywKKwkJCQkxNEQwMUJFNDI2REVFRjM4MDBDQUUwRDAgLyogSlNX
ZWJBc3NlbWJseVRhZy5jcHAgKi8sCisJCQkJMTREMDFCRTAyNkRFRUYzNzAwQ0FFMEQwIC8qIEpT
V2ViQXNzZW1ibHlUYWcuaCAqLywKIAkJCQlBREQwOUFFRjFGNUY2MjNGMDAxMzEzQzIgLyogV2Fz
bVRvSlMuY3BwICovLAogCQkJCUFERDA5QUVFMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5o
ICovLAogCQkJCUFEMkZDQkIwMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVF
cnJvckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBRDJGQ0JCMTFEQjU4REE0MDBCM0U3MzYgLyog
V2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUFEMkZDQkIyMURC
NThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAgKi8s
CiAJCQkJQUQyRkNCQjMxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9y
UHJvdG90eXBlLmggKi8sCisJCQkJMTREMDFCRTUyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2Vt
Ymx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTE0RDAxQkUzMjZERUVGMzgwMENB
RTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi8sCisJCQkJMTREMDFC
RTIyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcCAq
LywKKwkJCQkxNEQwMUJERDI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUuaCAqLywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb24uaCAqLywKIAkJCQk1MjEzMjI0MzFFQ0JDRTgyMDBGNjU2MTUgLyogV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwICovLApAQCAtOTE1Miw2ICs5MTg4LDEwIEBACiAJCQkJ
QUQyRkNCQzExREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5o
ICovLAogCQkJCUFEMkZDQkMyMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmNwcCAqLywKIAkJCQlBRDJGQ0JDMzFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZS5oICovLAorCQkJCTE0RDAxQkRFMjZERUVGMzcwMENBRTBEMCAvKiBX
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQkxNEQwMUJEQTI2REVFRjM3MDBD
QUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oICovLAorCQkJCTE0RDAxQkRGMjZE
RUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgKi8sCisJCQkJMTRE
MDFCREIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggKi8sCiAJ
CQkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmNwcCAqLywKIAkJCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLywKIAkJCSk7CkBAIC0xMDQwMiw2ICsxMDQ0Miw3IEBACiAJCQkJQUQ1
QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFMzFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRUQyNkRFRUYzODAw
Q0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUz
QkYzQzREMjM5MEQxRTgwMDhCQzc1MiAvKiBKU1dlYkFzc2VtYmx5R2xvYmFsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBl
cnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTA0MTAsNiArMTA0NTEsNyBA
QAogCQkJCUFEMkZDQzA1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5TW9kdWxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFOTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRUIxREI1OERBRDAw
QjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFC
RUMyNkRFRUYzODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlUYWcuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDgzNyw2ICsxMDg3OSw3IEBACiAJCQkJMTQ1MEZBMUMy
MzU3QkRCRTAwOTNDRDREIC8qIFdhc21GdW5jdGlvbkNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTM4MzUwMEEyMzkwRDkzQjAwMzYzMTZEIC8qIFdhc21HbG9iYWwu
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0ODUyMUQ4MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFu
ZGxlckluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAv
KiBXYXNtSW5kZXhPck5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkUyMUY2OTlFQzAw
MDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMDA2NTlFMUVD
QUM4MTIwMDBDQTkyNiAvKiBXYXNtTGltaXRzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwODY3LDYg
KzEwOTEwLDcgQEAKIAkJCQlFM0EwNTMxQTIxMzQyQjY4MDAyMkVDMTQgLyogV2FzbVN0cmVhbWlu
Z1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDNzNBOTEyNUJGQTczQjAwRUZFMzAzIC8q
IFdhc21TdHJlYW1pbmdQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkx
MDAwQkNBQUYgLyogV2FzbVRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJGNTI2REVF
RjUzMDBDQUUwRDAgLyogV2FzbVRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIxRThE
QTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRTlFMEFG
MUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDg5OCw2ICsxMDk0Miw4IEBACiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDJGQ0JFRjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzE3MURCNTlDQjIwMEIzRTczNiAvKiBX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTE0RDAxQkVGMjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJFOTI2REVFRjM4MDBDQUUwRDAgLyogV2Vi
QXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENDkzN0Q0
MURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MjEzMjI0NjFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUzQkYzQzUzMjM5MEQyMDUwMDhCQzc1MiAvKiBXZWJBc3Nl
bWJseUdsb2JhbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEwOTI1LDYgKzEwOTcx
LDggQEAKIAkJCQlBRDJGQ0MyMDFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRkYxREI1OERBRDAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
MkZDQzIxMURCNTlDQjIwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRTYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RDAxQkU3MjZERUVGMzgw
MENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ3QTBFMTZGNUNEMDBCMzQ0NjAgLyogV2ViS2l0QXZh
aWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBNjFCRDU5OTMxMDBGNDU3NUMg
Lyogd2tidWlsdGlucy5weSBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CmluZGV4IGE4NTk3M2U3ZWRjZTFiODM3MTFlMDI5MTk3MmEzMWE0NDZhZjg1MTAuLmYwNDQ1MWQw
MzhkYjMwYzc1MWY0NmE5YTRkNzQ4NjNjYjZiMmQ4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKQEAgLTEwNzksNiArMTA3OSw3IEBAIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5j
cHAKIHdhc20vV2FzbUZvcm1hdC5jcHAKIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmNwcAog
d2FzbS9XYXNtR2xvYmFsLmNwcAord2FzbS9XYXNtSGFuZGxlckluZm8uY3BwCiB3YXNtL1dhc21J
bmRleE9yTmFtZS5jcHAKIHdhc20vV2FzbUluc3RhbmNlLmNwcAogd2FzbS9XYXNtSW5zdGFuY2Uu
aApAQCAtMTEwNSw2ICsxMTA2LDcgQEAgd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuY3BwCiB3
YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCiB3YXNtL1dhc21TdHJlYW1pbmdQbGFuLmNwcAog
d2FzbS9XYXNtVGFibGUuY3BwCit3YXNtL1dhc21UYWcuY3BwCiB3YXNtL1dhc21UaHVua3MuY3Bw
CiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHAKIHdhc20vV2FzbVZhbHVlTG9jYXRpb24uY3BwCkBA
IC0xMTE2LDYgKzExMTgsNyBAQCB3YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHkuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwCit3YXNtL2pzL0pTV2ViQXNzZW1i
bHlFeGNlcHRpb24uY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUxpbmtFcnJv
ci5jcHAKQEAgLTExMjMsMTAgKzExMjYsMTMgQEAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5
LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCit3YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWcuY3BwCiB3YXNtL2pzL1dhc21Ub0pTLmNwcAogd2FzbS9qcy9X
YXNtVG9KUy5oCiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3Bw
CiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAord2FzbS9qcy9X
ZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAord2FzbS9qcy9XZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvdHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKIHdh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5R2xv
YmFsQ29uc3RydWN0b3IuY3BwCkBAIC0xMTQ0LDYgKzExNTAsOCBAQCB3YXNtL2pzL1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yUHJvdG90eXBlLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3Iu
Y3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCit3YXNtL2pzL1dlYkFz
c2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwCit3YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBl
LmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKIAogeWFyci9SZWd1
bGFyRXhwcmVzc2lvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCmluZGV4IDhjYzU1MTU2YjU3YWJjZTQ5Y2VhYjk4MmMzMTQ3YTk4ODlkMTRm
NTYuLmJlMmU4YzgxMWQ2ZGRkMGMxODRiYTVlZDRkOTU3OTM2ZmQyMjU4YTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtMTgzOSw0ICsx
ODM5LDM2IEBAIG9wIDphdG9taWNfZmVuY2UsCiAgICAgYXJnczogewogICAgIH0KIAorb3AgOnRo
cm93LAorICAgIGFyZ3M6IHsKKyAgICAgICAgZXhjZXB0aW9uSW5kZXg6IHVuc2lnbmVkLAorICAg
ICAgICBmaXJzdFZhbHVlOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgfQorCitvcCA6cmV0aHJvdywK
KyAgICBhcmdzOiB7CisgICAgICAgIGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0K
Kworb3BfZ3JvdXAgOkNhdGNoLAorICAgIFsKKyAgICAgICAgOmNhdGNoLAorICAgICAgICA6Y2F0
Y2hfbm9fdGxzLAorICAgIF0sCisgICAgYXJnczogeworICAgICAgICBleGNlcHRpb25JbmRleDog
dW5zaWduZWQsCisgICAgICAgIGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBh
cmd1bWVudENvdW50OiB1bnNpZ25lZCwKKyAgICAgICAgc3RhcnRPZmZzZXQ6IHVuc2lnbmVkLAor
ICAgIH0KKworb3BfZ3JvdXAgOkNhdGNoQWxsLAorICAgIFsKKyAgICAgICAgOmNhdGNoX2FsbCwK
KyAgICAgICAgOmNhdGNoX2FsbF9ub190bHMsCisgICAgXSwKKyAgICBhcmdzOiB7CisgICAgICAg
IGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0KKwogZW5kX3NlY3Rpb24gOldhc20K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKaW5kZXggMDFk
ZGNmOTY5OWI0ODAyOWExYmQ4YmVlNDAzNDkwNDc5YTFmOWQ3Zi4uNjZkZjA5OTlmMjFiMjc0ZTA5
OTliYjVhMzg1MjM0ZDE0NTE1Yzk4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0hhbmRsZXJJbmZvLmgKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWVudW0gY2xhc3MgSGFuZGxlclR5cGUgeworZW51bSBjbGFzcyBIYW5kbGVyVHlwZSA6IHVpbnQ4
X3QgewogICAgIENhdGNoID0gMCwKICAgICBGaW5hbGx5ID0gMSwKICAgICBTeW50aGVzaXplZENh
dGNoID0gMiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgK
aW5kZXggNjgwZTk0MDFkYzYxZmY2M2RjYjVkNWU2ZjlkZWJlYzQwNjg4YjQ0OS4uNTFmMWQwMmUx
ODI1NThjOWMyOTEyZDg0MGM1ODgxMDQ4Y2E4MDFkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cyA9IEpTT3Bjb2RlVHJhaXRzPgogICAgIGNvbnN0IGNo
YXIqIG5hbWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFRyYWl0czo6b3Bjb2RlTmFt
ZXNbb3Bjb2RlSUQoKV07CisgICAgICAgIHJldHVybiBUcmFpdHM6Om9wY29kZU5hbWVzW29wY29k
ZUlEPFRyYWl0cz4oKV07CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzID0g
SlNPcGNvZGVUcmFpdHM+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCmluZGV4IDYzZmY0ZWVjZTYyNmI1ZDhkZmRlYzBjNzIzYTFjZDc0ODg3MWJj
NWEuLjllZGY1OWI5Njg2YTVhZDZjZWE4MzgzZjc0MzMzMzYwYTE5YzZkNDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC0xMzAsNyAr
MTMwLDggQEAgdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0
KCkgY29uc3QKIAogQnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgoKSBjb25z
dAogewotICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOworICAgIGlmIChjYWxsZWUoKS5p
c1dhc20oKSkKKyAgICAgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCk7
CiAgICAgaWYgKCFjb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoMCk7
CiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgKaW5kZXggMWNhYjIyNWJjZTAzOGQ4ZmU1ZTFjNDU4OTAzZmYzOWQ5NTZm
ZmY0YS4uZDg2NGEyNjhjZDdjYjUwNWE0MTMzZTM3MGNjMzM5ZDk1ODQyOWE0YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApAQCAtNDQsNiArNDQs
MTEgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIGNsYXNzIENhbGxTaXRlSW5kZXggewogICAgIHB1
YmxpYzoKICAgICAgICAgQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsKKworICAgICAgICBDYWxs
U2l0ZUluZGV4KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgICAgIDog
bV9iaXRzKGRlbGV0ZWRWYWx1ZSgpLmJpdHMoKSkKKyAgICAgICAgeworICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKICAgICAgICAgICAgIDogbV9iaXRzKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpCkBA
IC01NywxMyArNjIsMjUgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2JpdHM7IH0KICAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2JpdHMg
PT0gb3RoZXIubV9iaXRzOyB9CiAKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0
dXJuIGludEhhc2gobV9iaXRzKTsgfQorICAgICAgICBzdGF0aWMgQ2FsbFNpdGVJbmRleCBkZWxl
dGVkVmFsdWUoKSB7IHJldHVybiBmcm9tQml0cyhzX2ludmFsaWRJbmRleCAtIDEpOyB9CisgICAg
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9
PSBkZWxldGVkVmFsdWUoKTsgfQorCiAgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJl
dHVybiBtX2JpdHM7IH0KICAgICAgICAgc3RhdGljIENhbGxTaXRlSW5kZXggZnJvbUJpdHModWlu
dDMyX3QgYml0cykgeyByZXR1cm4gQ2FsbFNpdGVJbmRleChiaXRzKTsgfQogCiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgo
Yml0cygpKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgQnl0
ZWNvZGVJbmRleCgpLm9mZnNldCgpIH07CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMy
X3Qgc19pbnZhbGlkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7
CisKKyAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgc19pbnZhbGlkSW5kZXggfTsKKyAgICB9Owor
CisgICAgc3RydWN0IENhbGxTaXRlSW5kZXhIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgQ2FsbFNpdGVJbmRleCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENhbGxTaXRlSW5kZXgmIGEsIGNvbnN0IENh
bGxTaXRlSW5kZXgmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogICAgIH07CiAK
ICAgICBjbGFzcyBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4
IHsKQEAgLTMzMiwzICszNDksMTUgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0Zyb21KU0Nv
ZGUodm9pZCogcmV0dXJuQWRkcmVzcyk7CiAKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVz
cGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkNhbGxTaXRlSW5kZXg+IDogSlNDOjpD
YWxsU2l0ZUluZGV4SGFzaCB7IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNo
VHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkNhbGxTaXRlSW5kZXg+
IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6Q2FsbFNpdGVJbmRleD4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCmluZGV4IDkxMjZlZjU1OWYzNTMxMjUyZWI0ZGQ1MjllZGI0N2QzY2VmYWJh
M2MuLmY2ZjA1YjU0YzYzNDY3ZTJiMDJlMzgxZDFlMDM0NjI2MjIzNDUyMDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtNTIs
NiArNTIsNyBAQAogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJK
U01vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAi
TGl0ZXJhbFBhcnNlci5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKQEAg
LTUxMiwxNSArNTEzLDYxIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbm90aWZ5RGVidWdn
ZXJPZlVud2luZGluZyhWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgfQogfQogCitD
YXRjaEluZm86OkNhdGNoSW5mbyhjb25zdCBIYW5kbGVySW5mbyogaGFuZGxlciwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit7CisgICAgbV92YWxpZCA9ICEhaGFuZGxlcjsKKyAgICBpZiAobV92YWxp
ZCkgeworICAgICAgICBtX3R5cGUgPSBoYW5kbGVyLT50eXBlKCk7CisjaWYgRU5BQkxFKEpJVCkK
KyAgICAgICAgbV9uYXRpdmVDb2RlID0gaGFuZGxlci0+bmF0aXZlQ29kZTsKKyNlbmRpZgorCisg
ICAgICAgIC8vIGhhbmRsZXItPnRhcmdldCBpcyBtZWFuaW5nbGVzcyBmb3IgZ2V0dGluZyBhIGNv
ZGUgb2Zmc2V0IHdoZW4gY2F0Y2hpbmcKKyAgICAgICAgLy8gdGhlIGV4Y2VwdGlvbiBpbiBhIERG
Ry9GVEwgZnJhbWUuIFRoaXMgYnl0ZWNvZGUgdGFyZ2V0IG9mZnNldCBjb3VsZCBiZQorICAgICAg
ICAvLyBzb21ldGhpbmcgdGhhdCdzIGluIGFuIGlubGluZWQgZnJhbWUsIHdoaWNoIG1lYW5zIGFu
IGFycmF5IGFjY2VzcworICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNvZGUgb2Zmc2V0IGluIHRo
ZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKKyAgICAgICAgLy8gYW5kIGNh
biBjYXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhpdHMgdG8gaGFuZGxlci0+
dGFyZ2V0CisgICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCisgICAgICAgIGlmICghSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKKyAgICAgICAgICAg
IG1fY2F0Y2hQQ0ZvckludGVycHJldGVyID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdCho
YW5kbGVyLT50YXJnZXQpLnB0cigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NhdGNo
UENGb3JJbnRlcnByZXRlciA9IG51bGxwdHI7CisgICAgfQorfQorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorQ2F0Y2hJbmZvOjpDYXRjaEluZm8oY29uc3QgV2FzbTo6SGFuZGxlckluZm8qIGhh
bmRsZXIsIGNvbnN0IFdhc206OkNhbGxlZSogY2FsbGVlKQoreworICAgIG1fdmFsaWQgPSAhIWhh
bmRsZXI7CisgICAgaWYgKG1fdmFsaWQpIHsKKyAgICAgICAgbV90eXBlID0gSGFuZGxlclR5cGU6
OkNhdGNoOworICAgICAgICBtX25hdGl2ZUNvZGUgPSBoYW5kbGVyLT5tX25hdGl2ZUNvZGU7Cisg
ICAgICAgIGlmIChjb25zdCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bGVlLT5mdW5jdGlvbkNvZGVCbG9jaygpKQorICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJw
cmV0ZXIgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPm1fdGFyZ2V0KS5w
dHIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXIg
PSBudWxscHRyOworICAgIH0KK30KKyNlbmRpZgorCiBjbGFzcyBVbndpbmRGdW5jdG9yIHsKIHB1
YmxpYzoKLSAgICBVbndpbmRGdW5jdG9yKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBi
b29sIGlzVGVybWluYXRpb24sIENvZGVCbG9jayomIGNvZGVCbG9jaywgSGFuZGxlckluZm8qJiBo
YW5kbGVyKQorICAgIFVud2luZEZ1bmN0b3IoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUs
IGJvb2wgaXNUZXJtaW5hdGlvbiwgSlNWYWx1ZSB0aHJvd25WYWx1ZSwgQ29kZUJsb2NrKiYgY29k
ZUJsb2NrLCBDYXRjaEluZm8mIGhhbmRsZXIpCiAgICAgICAgIDogbV92bSh2bSkKICAgICAgICAg
LCBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCiAgICAgICAgICwgbV9pc1Rlcm1pbmF0aW9uKGlzVGVy
bWluYXRpb24pCiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAgICAsIG1f
aGFuZGxlcihoYW5kbGVyKQogICAgIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAg
IGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7CisgICAgICAgICAgICBpZiAoSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbiogd2FzbUV4Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbio+KG1fdm0sIHRocm93blZhbHVlKSkgeworICAgICAgICAgICAgICAgIG1fY2F0Y2hhYmxl
RnJvbVdhc20gPSB0cnVlOworICAgICAgICAgICAgICAgIG1fd2FzbVRhZyA9ICZ3YXNtRXhjZXB0
aW9uLT50YWcoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoRXJyb3JJbnN0YW5jZSogZXJyb3Ig
PSBqc0R5bmFtaWNDYXN0PEVycm9ySW5zdGFuY2UqPihtX3ZtLCB0aHJvd25WYWx1ZSkpCisgICAg
ICAgICAgICAgICAgbV9jYXRjaGFibGVGcm9tV2FzbSA9IGVycm9yLT5pc0NhdGNoYWJsZUZyb21X
YXNtKCk7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgfQog
CiAgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0CkBAIC01MjksMTkgKzU3NiwzMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbEZy
YW1lID0gdmlzaXRvci0+Y2FsbEZyYW1lKCk7CiAgICAgICAgIG1fY29kZUJsb2NrID0gdmlzaXRv
ci0+Y29kZUJsb2NrKCk7CiAKLSAgICAgICAgbV9oYW5kbGVyID0gbnVsbHB0cjsKKyAgICAgICAg
bV9oYW5kbGVyLm1fdmFsaWQgPSBmYWxzZTsKICAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CiAg
ICAgICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewotICAgICAgICAgICAgICAgIG1faGFu
ZGxlciA9IGZpbmRFeGNlcHRpb25IYW5kbGVyKHZpc2l0b3IsIG1fY29kZUJsb2NrLCBSZXF1aXJl
ZEhhbmRsZXI6OkFueUhhbmRsZXIpOwotICAgICAgICAgICAgICAgIGlmIChtX2hhbmRsZXIpCisg
ICAgICAgICAgICAgICAgbV9oYW5kbGVyID0geyBmaW5kRXhjZXB0aW9uSGFuZGxlcih2aXNpdG9y
LCBtX2NvZGVCbG9jaywgUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKSwgbV9jb2RlQmxvY2sg
fTsKKyAgICAgICAgICAgICAgICBpZiAobV9oYW5kbGVyLm1fdmFsaWQpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxl
ZSgpLmlzQ2VsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byoganNUb1dhc21JQ0NhbGxlZSA9
IGpzRHluYW1pY0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KG1fdm0sIHZpc2l0b3ItPmNhbGxlZSgp
LmFzQ2VsbCgpKSkKKyAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUo
KTsKKyAgICAgICAgaWYgKGNhbGxlZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8q
IGpzVG9XYXNtSUNDYWxsZWUgPSBqc0R5bmFtaWNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihtX3Zt
LCBjYWxsZWUuYXNDZWxsKCkpKQogICAgICAgICAgICAgICAgIG1fdm0ud2FzbUNvbnRleHQuc3Rv
cmUoanNUb1dhc21JQ0NhbGxlZS0+ZnVuY3Rpb24oKS0+cHJldmlvdXNJbnN0YW5jZShtX2NhbGxG
cmFtZSksIG1fdm0uc29mdFN0YWNrTGltaXQoKSk7CisKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtX2NhdGNoYWJsZUZyb21XYXNtICYmIGNhbGxlZS5pc1dhc20oKSkgeworICAgICAgICAgICAg
V2FzbTo6Q2FsbGVlKiB3YXNtQ2FsbGVlID0gY2FsbGVlLmFzV2FzbUNhbGxlZSgpOworICAgICAg
ICAgICAgaWYgKHdhc21DYWxsZWUtPmhhc0V4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKKyAgICAgICAg
ICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBqc0Nhc3Q8SlNXZWJB
c3NlbWJseUluc3RhbmNlKj4obV9jYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBleGNlcHRpb25IYW5kbGVySW5kZXggPSBtX2NhbGxGcmFtZS0+Y2FsbFNp
dGVJbmRleCgpLmJpdHMoKTsKKyAgICAgICAgICAgICAgICBtX2hhbmRsZXIgPSB7IHdhc21DYWxs
ZWUtPmhhbmRsZXJGb3JJbmRleChqc0luc3RhbmNlLT5pbnN0YW5jZSgpLCBleGNlcHRpb25IYW5k
bGVySW5kZXgsIG1fd2FzbVRhZyksIHdhc21DYWxsZWUgfTsKKyAgICAgICAgICAgICAgICBpZiAo
bV9oYW5kbGVyLm1fdmFsaWQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0
b3I6OkRvbmU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRpZgogCkBAIC01ODgsMTAg
KzY0OCwxNCBAQCBwcml2YXRlOgogICAgIENhbGxGcmFtZSomIG1fY2FsbEZyYW1lOwogICAgIGJv
b2wgbV9pc1Rlcm1pbmF0aW9uOwogICAgIENvZGVCbG9jayomIG1fY29kZUJsb2NrOwotICAgIEhh
bmRsZXJJbmZvKiYgbV9oYW5kbGVyOworICAgIENhdGNoSW5mbyYgbV9oYW5kbGVyOworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKyAgICBjb25zdCBXYXNtOjpUYWcqIG1fd2FzbVRhZyB7IG51bGxw
dHIgfTsKKyAgICBib29sIG1fY2F0Y2hhYmxlRnJvbVdhc20geyBmYWxzZSB9OworI2VuZGlmCiB9
OwogCi1ORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZt
LCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQorTkVWRVJfSU5M
SU5FIENhdGNoSW5mbyBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2Fs
bEZyYW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CiAKQEAgLTYwOSwxNiArNjczLDEzIEBAIE5FVkVSX0lOTElORSBI
YW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxG
cmFtZSwgRXhjCiAgICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQoc2NvcGUsIHNjb3BlLmV4Y2Vw
dGlvbigpKTsKIAogICAgIC8vIENhbGN1bGF0ZSBhbiBleGNlcHRpb24gaGFuZGxlciB2UEMsIHVu
d2luZGluZyBjYWxsIGZyYW1lcyBhcyBuZWNlc3NhcnkuCi0gICAgSGFuZGxlckluZm8qIGhhbmRs
ZXIgPSBudWxscHRyOwotICAgIFVud2luZEZ1bmN0b3IgZnVuY3Rvcih2bSwgY2FsbEZyYW1lLCB2
bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbiksIGNvZGVCbG9jaywgaGFuZGxlcik7
CisgICAgQ2F0Y2hJbmZvIGNhdGNoSW5mbzsKKyAgICBVbndpbmRGdW5jdG9yIGZ1bmN0b3Iodm0s
IGNhbGxGcmFtZSwgdm0uaXNUZXJtaW5hdGlvbkV4Y2VwdGlvbihleGNlcHRpb24pLCBleGNlcHRp
b25WYWx1ZSwgY29kZUJsb2NrLCBjYXRjaEluZm8pOwogICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQ8
U3RhY2tWaXNpdG9yOjpUZXJtaW5hdGVJZlRvcEVudHJ5RnJhbWVJc0VtcHR5PihjYWxsRnJhbWUs
IHZtLCBmdW5jdG9yKTsKICAgICBpZiAodm0uaGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSgpKQog
ICAgICAgICB2bS5wb3BBbGxDaGVja3BvaW50T1NSU2lkZVN0YXRlVW50aWwoY2FsbEZyYW1lKTsK
IAotICAgIGlmICghaGFuZGxlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1
cm4gaGFuZGxlcjsKKyAgICByZXR1cm4gY2F0Y2hJbmZvOwogfQogCiB2b2lkIEludGVycHJldGVy
Ojpub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bihWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2Vw
dGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmgKaW5kZXggMGMzZWZlMTJlNTEwNTM4OGY2Y2YyODUxMWQ5ZWE1ZTRlYWYzMDdmYy4uNGQ5Njg4
ZTVhYThjYTBhNGFkMGY1ZDkwZmRmYWMxNDIwM2M1ODljMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKQEAgLTQzLDYgKzQzLDEzIEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorbmFtZXNwYWNlIFdh
c20geworY2xhc3MgQ2FsbGVlOworc3RydWN0IEhhbmRsZXJJbmZvOworfQorI2VuZGlmCisKICAg
ICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3MgRXZhbEV4ZWN1dGFibGU7CiAgICAgY2xhc3Mg
RnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtNTgsNiArNjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBKU1Njb3BlOwogICAgIGNsYXNzIFNvdXJjZUNvZGU7CiAgICAgY2xhc3MgU3RhY2tG
cmFtZTsKKyAgICBlbnVtIGNsYXNzIEhhbmRsZXJUeXBlIDogdWludDhfdDsKICAgICBzdHJ1Y3Qg
Q2FsbEZyYW1lQ2xvc3VyZTsKICAgICBzdHJ1Y3QgSGFuZGxlckluZm87CiAgICAgc3RydWN0IElu
c3RydWN0aW9uOwpAQCAtODEsNiArODksMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0
YWNrRnJhbWVOYXRpdmVDb2RlCiAgICAgfTsKIAorICAgIHN0cnVjdCBDYXRjaEluZm8geworICAg
ICAgICBDYXRjaEluZm8oKQorICAgICAgICAgICAgOiBtX3ZhbGlkKGZhbHNlKQorICAgICAgICB7
IH0KKworICAgICAgICBDYXRjaEluZm8oY29uc3QgSGFuZGxlckluZm8qLCBDb2RlQmxvY2sqKTsK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIENhdGNoSW5mbyhjb25zdCBXYXNtOjpI
YW5kbGVySW5mbyosIGNvbnN0IFdhc206OkNhbGxlZSopOworI2VuZGlmCisKKyAgICAgICAgYm9v
bCBtX3ZhbGlkOworICAgICAgICBIYW5kbGVyVHlwZSBtX3R5cGU7CisjaWYgRU5BQkxFKEpJVCkK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1f
bmF0aXZlQ29kZTsKKyNlbmRpZgorICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogbV9jYXRjaFBD
Rm9ySW50ZXJwcmV0ZXI7CisgICAgfTsKKwogICAgIGNsYXNzIEludGVycHJldGVyIHsKICAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRD
YWxsOwpAQCAtMTEyLDcgKzEzOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQg
Z2V0QXJndW1lbnRzRGF0YShDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiYsIHB0cmRpZmZfdCYgZmly
c3RQYXJhbWV0ZXJJbmRleCwgUmVnaXN0ZXIqJiBhcmd2LCBpbnQmIGFyZ2MpOwogCi0gICAgICAg
IE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdW53aW5kKFZNJiwgQ2FsbEZyYW1lKiYsIEV4Y2Vw
dGlvbiopOworICAgICAgICBORVZFUl9JTkxJTkUgQ2F0Y2hJbmZvIHVud2luZChWTSYsIENhbGxG
cmFtZSomLCBFeGNlcHRpb24qKTsKICAgICAgICAgdm9pZCBub3RpZnlEZWJ1Z2dlck9mRXhjZXB0
aW9uVG9CZVRocm93bihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgRXhjZXB0aW9u
Kik7CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9v
a1R5cGUpOwogICAgICAgICBzdGF0aWMgU3RyaW5nIHN0YWNrVHJhY2VBc1N0cmluZyhWTSYsIGNv
bnN0IFZlY3RvcjxTdGFja0ZyYW1lPiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCA1N2ExYmRiNmRiZDViMTYwNjkxYzY1
NjUwZmMwZDQ1ZGJlODA5ZWFiLi5kYzVlY2NlMDVlZTM5ZmJiZmViZjVkOWIyZGJiM2I5NTZmZDY2
YTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcApAQCAtMTY2LDIzICsxNjYsMjAgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRO
b25JbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmkK
ICAgICBtX2ZyYW1lLm1faW5saW5lQ2FsbEZyYW1lID0gbnVsbHB0cjsKICNlbmRpZgogCisgICAg
bV9mcmFtZS5tX2NvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgbV9mcmFt
ZS5tX2J5dGVjb2RlSW5kZXggPSAhbV9mcmFtZS5jb2RlQmxvY2soKSA/IEJ5dGVjb2RlSW5kZXgo
MCkKKyAgICAgICAgOiBjb2RlT3JpZ2luID8gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpCisg
ICAgICAgIDogY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCk7CisKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAgICAgaWYgKGNhbGxGcmFtZS0+aXNBbnlXYXNtQ2FsbGVlKCkpIHsKICAgICAgICAg
bV9mcmFtZS5tX2lzV2FzbUZyYW1lID0gdHJ1ZTsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9j
ayA9IG51bGxwdHI7Ci0gICAgICAgIG1fZnJhbWUubV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgpOwogCiAgICAgICAgIGlmIChtX2ZyYW1lLm1fY2FsbGVlLmlzV2FzbSgpKQogICAgICAg
ICAgICAgbV9mcmFtZS5tX3dhc21GdW5jdGlvbkluZGV4T3JOYW1lID0gbV9mcmFtZS5tX2NhbGxl
ZS5hc1dhc21DYWxsZWUoKS0+aW5kZXhPck5hbWUoKTsKLQotICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmCi0gICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7Ci0gICAgbV9mcmFtZS5tX2J5dGVjb2RlSW5kZXggPSAhbV9mcmFtZS5jb2RlQmxvY2soKSA/
IEJ5dGVjb2RlSW5kZXgoMCkKLSAgICAgICAgOiBjb2RlT3JpZ2luID8gY29kZU9yaWdpbi0+Ynl0
ZWNvZGVJbmRleCgpCi0gICAgICAgIDogY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCk7Ci0KIH0K
IAogI2lmIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwCmluZGV4IGVmMmZjYjQyZjM1ZmU3MmU0NGRmM2UwMjI0YjJlOTA4YjI1
NWVlOTguLmE5MWE5ZGQ5N2FiZWU4NzQ4ZDA3NjdjMzIzYWVjYThkNDk4ZWI0YzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKQEAgLTcwNCw5ICs3
MDQsNDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmEKICNlbmRpZgogCiAgICAgbG9hZFB0cigm
dG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZy
YW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBy
ZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHNj
cmF0Y2gsIHNraXBMaXN0KTsKIAotICAgIExvYWRSZWdTcG9vbGVyIHNwb29sZXIoKnRoaXMsIHNj
cmF0Y2gpOworICAgIC8vIFJlc3RvcmUgdGhlIGNhbGxlZSBzYXZlIHZhbHVlIG9mIHRoZSBzY3Jh
dGNoLgorICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoc2Ny
YXRjaEdQUkVudHJ5SW5kZXgpOworICAgIEFTU0VSVCghZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0
KGVudHJ5LnJlZygpKSk7CisgICAgQVNTRVJUKGVudHJ5LnJlZygpLmlzR1BSKCkpOworICAgIEFT
U0VSVChzY3JhdGNoID09IGVudHJ5LnJlZygpLmdwcigpKTsKKyNpZiBDUFUoQVJNNjQpCisgICAg
UmVnaXN0ZXJBdE9mZnNldCBlbnRyeTIgPSBhbGxDYWxsZWVTYXZlcy0+YXQoc2NyYXRjaEdQUkVu
dHJ5SW5kZXggKyAxKTsKKyAgICBBU1NFUlRfVU5VU0VEKGVudHJ5MiwgIWRvbnRSZXN0b3JlUmVn
aXN0ZXJzLmdldChlbnRyeTIucmVnKCkpKTsKKyAgICBBU1NFUlQoZW50cnkyLnJlZygpLmlzR1BS
KCkpOworICAgIEFTU0VSVCh1bnVzZWROZXh0U2xvdEdQUiA9PSBlbnRyeTIucmVnKCkuZ3ByKCkp
OworICAgIGxvYWRQYWlyNjQoc2NyYXRjaCwgVHJ1c3RlZEltbTMyKGVudHJ5Lm9mZnNldCgpKSwg
c2NyYXRjaCwgdW51c2VkTmV4dFNsb3RHUFIpOworI2Vsc2UKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NyYXRjaCwgZW50cnkub2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyNlbmRpZgorCisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyNlbmRpZiAvLyBOVU1CRVJfT0ZfQ0FMTEVF
X1NBVkVTX1JFR0lTVEVSUyA+IDAKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJSZWcgdm1HUFIs
IEdQUlJlZyBzY3JhdGNoR1BSKQoreworI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNU
RVJTID4gMAorICAgIGxvYWRQdHIoQWRkcmVzcyh2bUdQUiwgVk06OnRvcEVudHJ5RnJhbWVPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoc2NyYXRjaEdQUiwgUmVnaXN0ZXJTZXQ6OnN0YWNrUmVn
aXN0ZXJzKCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odm1HUFIpOworI2VuZGlmIC8vIE5V
TUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorfQorCit2b2lkIEFzc2VtYmx5SGVs
cGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
SW1wbChHUFJSZWcgZW50cnlGcmFtZUdQUiwgY29uc3QgUmVnaXN0ZXJTZXQmIHNraXBMaXN0KQor
eworI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgp
KSwgZW50cnlGcmFtZUdQUik7CisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVl
U2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CisgICAg
dW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7CisKKyAgICBM
b2FkUmVnU3Bvb2xlciBzcG9vbGVyKCp0aGlzLCBlbnRyeUZyYW1lR1BSKTsKIAogICAgIC8vIFJl
c3RvcmUgYWxsIGNhbGxlZSBzYXZlcyBleGNlcHQgZm9yIHRoZSBzY3JhdGNoLgogICAgIHVuc2ln
bmVkIGkgPSAwOwpAQCAtNzI4LDIzICs3NjYsOSBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVz
dG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYQog
ICAgIH0KICAgICBzcG9vbGVyLmZpbmFsaXplRlBSKCk7CiAKLSAgICAvLyBSZXN0b3JlIHRoZSBj
YWxsZWUgc2F2ZSB2YWx1ZSBvZiB0aGUgc2NyYXRjaC4KLSAgICBSZWdpc3RlckF0T2Zmc2V0IGVu
dHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KHNjcmF0Y2hHUFJFbnRyeUluZGV4KTsKLSAgICBBU1NF
UlQoIWRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpOwotICAgIEFTU0VSVChl
bnRyeS5yZWcoKS5pc0dQUigpKTsKLSAgICBBU1NFUlQoc2NyYXRjaCA9PSBlbnRyeS5yZWcoKS5n
cHIoKSk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkyID0gYWxs
Q2FsbGVlU2F2ZXMtPmF0KHNjcmF0Y2hHUFJFbnRyeUluZGV4ICsgMSk7Ci0gICAgQVNTRVJUX1VO
VVNFRChlbnRyeTIsICFkb250UmVzdG9yZVJlZ2lzdGVycy5nZXQoZW50cnkyLnJlZygpKSk7Ci0g
ICAgQVNTRVJUKGVudHJ5Mi5yZWcoKS5pc0dQUigpKTsKLSAgICBBU1NFUlQodW51c2VkTmV4dFNs
b3RHUFIgPT0gZW50cnkyLnJlZygpLmdwcigpKTsKLSAgICBsb2FkUGFpcjY0KHNjcmF0Y2gsIFRy
dXN0ZWRJbW0zMihlbnRyeS5vZmZzZXQoKSksIHNjcmF0Y2gsIHVudXNlZE5leHRTbG90R1BSKTsK
LSNlbHNlCi0gICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gsIGVudHJ5Lm9mZnNldCgpKSwgc2Ny
YXRjaCk7Ci0jZW5kaWYKLQogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7
CisgICAgVU5VU0VEX1BBUkFNKHZtR1BSKTsKKyAgICBVTlVTRURfUEFSQU0oc2tpcExpc3QpOwog
I2VuZGlmIC8vIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCAwZDI1M2Q5ODhl
YzI4N2M4Yzk3YjU2ZDVhODc0MTVmMTE2MWI1OGNiLi45YTQ3OWY2NzBiNmQ2ZWQ5MWQ2ODk5OGI5
ZjkzYmYxMDZkZTdmYTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKQEAgLTQxMyw2ICs0MTMsOCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBy
ZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJh
bWUqJik7CisgICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoR1BSUmVnIHZtR1BSLCBHUFJSZWcgc2NyYXRjaEdQUik7CisgICAgdm9pZCBy
ZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQ
UlJlZyBlbnRyeUZyYW1lLCBjb25zdCBSZWdpc3RlclNldCYgc2tpcExpc3QpOwogCiAgICAgdm9p
ZCBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJiwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCkgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmlu
ZGV4IDZkNTgzYTQ4OWVkNTMwMzE4Y2UzMDk2YzY2YjAyZTdkMWM1OGE0YmMuLmI4NmU5YTQxMDNj
ODUwNmMzZmRiYmFjNTRkN2U5NGU2NjYwYWFkOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRFeGNlcHRpb25zLmNwcApAQCAtNTQsMjEgKzU0LDE0IEBAIHZvaWQgZ2VuZXJpY1Vu
d2luZChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lKQogCiAgICAgRXhjZXB0aW9uKiBleGNl
cHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb24p
OwotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gdm0uaW50ZXJwcmV0ZXItPnVud2luZCh2bSwg
Y2FsbEZyYW1lLCBleGNlcHRpb24pOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lLgorICAg
IENhdGNoSW5mbyBoYW5kbGVyID0gdm0uaW50ZXJwcmV0ZXItPnVud2luZCh2bSwgY2FsbEZyYW1l
LCBleGNlcHRpb24pOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lLgogCiAgICAgdm9pZCog
Y2F0Y2hSb3V0aW5lOwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjYXRjaFBDRm9ySW50ZXJwcmV0
ZXIgPSBudWxscHRyOwotICAgIGlmIChoYW5kbGVyKSB7Ci0gICAgICAgIC8vIGhhbmRsZXItPnRh
cmdldCBpcyBtZWFuaW5nbGVzcyBmb3IgZ2V0dGluZyBhIGNvZGUgb2Zmc2V0IHdoZW4gY2F0Y2hp
bmcKLSAgICAgICAgLy8gdGhlIGV4Y2VwdGlvbiBpbiBhIERGRy9GVEwgZnJhbWUuIFRoaXMgYnl0
ZWNvZGUgdGFyZ2V0IG9mZnNldCBjb3VsZCBiZQotICAgICAgICAvLyBzb21ldGhpbmcgdGhhdCdz
IGluIGFuIGlubGluZWQgZnJhbWUsIHdoaWNoIG1lYW5zIGFuIGFycmF5IGFjY2VzcwotICAgICAg
ICAvLyB3aXRoIHRoaXMgYnl0ZWNvZGUgb2Zmc2V0IGluIHRoZSBtYWNoaW5lIGZyYW1lIGlzIHV0
dGVybHkgbWVhbmluZ2xlc3MKLSAgICAgICAgLy8gYW5kIGNhbiBjYXVzZSBhbiBvdmVyZmxvdy4g
T1NSIGV4aXQgcHJvcGVybHkgZXhpdHMgdG8gaGFuZGxlci0+dGFyZ2V0Ci0gICAgICAgIC8vIGlu
IHRoZSBwcm9wZXIgZnJhbWUuCi0gICAgICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpCi0gICAgICAgICAgICBjYXRjaFBD
Rm9ySW50ZXJwcmV0ZXIgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5h
dChoYW5kbGVyLT50YXJnZXQpLnB0cigpOworICAgIGlmIChoYW5kbGVyLm1fdmFsaWQpIHsKKyAg
ICAgICAgY2F0Y2hQQ0ZvckludGVycHJldGVyID0gaGFuZGxlci5tX2NhdGNoUENGb3JJbnRlcnBy
ZXRlcjsKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBjYXRjaFJvdXRpbmUgPSBoYW5kbGVyLT5u
YXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIGNhdGNoUm91dGluZSA9IGhh
bmRsZXIubV9uYXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAjZWxzZQogICAgICAgICBp
ZiAoY2F0Y2hQQ0ZvckludGVycHJldGVyLT5pc1dpZGUzMigpKQogICAgICAgICAgICAgY2F0Y2hS
b3V0aW5lID0gTExJbnQ6OmdldFdpZGUzMkNvZGVQdHIoY2F0Y2hQQ0ZvckludGVycHJldGVyLT5v
cGNvZGVJRCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRl
cmZhY2VKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaApp
bmRleCA3Y2ExYjRlN2MzZmQwODRkZDI3YWMzODUwNmFhOWM2YWVkOTVkZWIwLi45OTIyOWU0OTkz
MTdjMTJhMWYzNGNiZWFjZGFlYzkwMTUzODA4YWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KU0ludGVyZmFjZUpJVC5oCkBAIC01Nyw2ICs1Nyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZp
cnR1YWxSZWdpc3RlciBlbnRyeSk7CiAgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOwogICAgICAgICB2b2lkIGVt
aXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0
ZXIgZW50cnkpOworICAgICAgICB2b2lkIGNvbnZlcnRDYWxsZWVUb1ZNKFJlZ2lzdGVySUQgY2Fs
bGVlKTsKIAogICAgICAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CiAKQEAgLTE1
OCw2ICsxNTksMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICB9CiAKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmNvbnZlcnRDYWxsZWVUb1ZNKFJlZ2lzdGVy
SUQgY2FsbGVlKQorICAgIHsKKyAgICAgICAgYXV0byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBi
cmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgY2FsbGVlLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAg
ICBhbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01h
c2spLCBjYWxsZWUpOworICAgICAgICBsb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxs
ZWUsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9m
ZnNldE9mVk0oKSksIGNhbGxlZSk7CisgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGp1bXAoKTsK
KworICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluayh0aGlzKTsKKyAgICAgICAgbG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zm
c2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlv
bjo6aGVhZGVyU2l6ZSgpKSwgY2FsbGVlKTsKKworICAgICAgICBsb2FkZWRDYXNlLmxpbmsodGhp
cyk7CisgICAgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgKaW5kZXggNDcxZmI1ZDJmZDNi
ODA5Mzk2YTUyM2NlMzNmY2IyYTg1OTgzNmFjYi4uMzdjMWFmZTZkZTc2Yzg5MzVhYzc0NmQ2MGZi
NDk3ZDMxZTZlN2NhOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaApA
QCAtMzIyLDYgKzMyMiwyNCBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0
YWc+IGdldFdpZGUzMkNvZGVQdHIoV2FzbU9wY29kZUlEIG9wY29kZUlEKQogI2VuZGlmCiB9CiAK
K3RlbXBsYXRlPFB0clRhZyB0YWc+CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjx0YWc+IGdldENvZGVSZWYoV2FzbU9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdldENv
ZGVQdHI8dGFnPihvcGNvZGVJRCkpOworfQorCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPiBnZXRXaWRlMTZDb2RlUmVmKFdhc21P
cGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRh
Zz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnZXRXaWRlMTZDb2RlUHRyPHRhZz4ob3Bjb2Rl
SUQpKTsKK30KKwordGVtcGxhdGU8UHRyVGFnIHRhZz4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPHRhZz4gZ2V0V2lkZTMyQ29kZVJlZihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQp
Cit7CisgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+OjpjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYoZ2V0V2lkZTMyQ29kZVB0cjx0YWc+KG9wY29kZUlEKSk7Cit9CisKIHRlbXBs
YXRlPFB0clRhZyB0YWc+CiBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRDb2RlRnVuY3Rpb25Q
dHIoV2FzbU9wY29kZUlEIG9wY29kZUlEKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAppbmRleCBiOTEzZWVkYWIwYzQzMGZhNzg0NjI5YmUz
MDkxMjQwMGU1Njk4YzE0Li44YjRlZjIwYzI3MzI2MGRkZWY2OTRkMzBhMDdmNjc1ZjA4M2YzOGJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNw
cApAQCAtNDksNiArNDksMTggQEAgSW5zdHJ1Y3Rpb24qIHJldHVyblRvVGhyb3coVk0mIHZtKQog
ICAgIHJldHVybiBMTEludDo6ZXhjZXB0aW9uSW5zdHJ1Y3Rpb25zKCk7CiB9CiAKK0luc3RydWN0
aW9uKiB3YXNtUmV0dXJuVG9UaHJvdyhWTSYgdm0pCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsK
KyNpZiBMTElOVF9UUkFDSU5HCisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlTExJbnRT
bG93UGF0aCgpKSkgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CisgICAgICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCBKU1ZhbHVlKHNjb3Bl
LmV4Y2VwdGlvbigpKSwgIiAocmV0dXJuVG9UaHJvdykuXG4iKTsKKyAgICB9CisjZW5kaWYKKyAg
ICByZXR1cm4gTExJbnQ6Ondhc21FeGNlcHRpb25JbnN0cnVjdGlvbnMoKTsKK30KKwogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGNhbGxUb1Rocm93KFZNJiB2
bSkKIHsKICAgICBVTlVTRURfUEFSQU0odm0pOwpAQCAtOTIsNCArMTA0LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5kbGVDYXRjaChPcGNvZGVT
aXplIHNpemUpCiAgICAgcmV0dXJuIHt9OwogfQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGhhbmRsZVdhc21D
YXRjaChPcGNvZGVTaXplIHNpemUpCit7CisgICAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSBP
cGNvZGVTaXplOjpOYXJyb3c6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPih3YXNtX2NhdGNoKTsKKyAgICBjYXNlIE9wY29kZVNpemU6Oldp
ZGUxNjoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRXaWRlMTZDb2RlUmVmPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+KHdhc21fY2F0Y2gpOworICAgIGNhc2UgT3Bjb2RlU2l6ZTo6V2lkZTMyOgor
ICAgICAgICByZXR1cm4gTExJbnQ6OmdldFdpZGUzMkNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4od2FzbV9jYXRjaCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+IGhhbmRsZVdhc21DYXRjaEFsbChPcGNvZGVTaXplIHNpemUpCit7Cisg
ICAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSBPcGNvZGVTaXplOjpOYXJyb3c6CisgICAgICAg
IHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPih3YXNtX2Nh
dGNoX2FsbCk7CisgICAgY2FzZSBPcGNvZGVTaXplOjpXaWRlMTY6CisgICAgICAgIHJldHVybiBM
TEludDo6Z2V0V2lkZTE2Q29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPih3YXNtX2NhdGNo
X2FsbCk7CisgICAgY2FzZSBPcGNvZGVTaXplOjpXaWRlMzI6CisgICAgICAgIHJldHVybiBMTElu
dDo6Z2V0V2lkZTMyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPih3YXNtX2NhdGNoX2Fs
bCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpMTEludApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50RXhjZXB0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0
aW9ucy5oCmluZGV4IDgwNmIxOWY2NjA1ODY2Yjg4Y2U4NDk1ODdhMDQxYWRlNGYzNmQ2MjkuLmU1
ZjkwMjFmYWRiOGVmY2IyNTg3YzBjYTYwMTc2ZWJmMWRjYmFjNGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmgKQEAgLTQyLDYgKzQyLDcgQEAgbmFt
ZXNwYWNlIExMSW50IHsKIC8vIGJldHdlZW4gMSBhbmQgOSBzbG90cyB3aWxsIGdpdmUgeW91IGFu
ICJpbnN0cnVjdGlvbiIgdGhhdCB0aHJlYWRzIHRvIHRoZQogLy8gaW50ZXJwcmV0ZXIncyBleGNl
cHRpb24gaGFuZGxlci4KIEluc3RydWN0aW9uKiByZXR1cm5Ub1Rocm93KFZNJik7CitJbnN0cnVj
dGlvbiogd2FzbVJldHVyblRvVGhyb3coVk0mKTsKIAogLy8gVXNlIHRoaXMgd2hlbiB5b3UncmUg
dGhyb3dpbmcgdG8gYSBjYWxsIHRodW5rLgogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+IGNhbGxUb1Rocm93KFZNJik7CkBAIC00OSw0ICs1MCw5IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBjYWxsVG9UaHJvdyhWTSYp
OwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGhhbmRsZVVu
Y2F1Z2h0RXhjZXB0aW9uKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4gaGFuZGxlQ2F0Y2goT3Bjb2RlU2l6ZSk7CiAKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFu
ZGxlV2FzbUNhdGNoKE9wY29kZVNpemUpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+IGhhbmRsZVdhc21DYXRjaEFsbChPcGNvZGVTaXplKTsKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9y
LmNwcAppbmRleCA2ZGY0Njg1MGUyYzdlYjk2ODk4ZWM0YzU3ZmNiNzdkZDg3NWQyZDUwLi5iMmNh
YTE4NTQxMzBmZjhiOTMxODA3NmQyN2RmZWJkZDIxMzM4NDQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcApAQCAtNTMs
NiArNTMsNyBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1
ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgogI2luY2x1ZGUgIkxM
SW50RGF0YS5oIgogI2luY2x1ZGUgIkxMSW50T2ZmbGluZUFzbUNvbmZpZy5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5hc20KaW5kZXggNDM2Y2Y2NjQ5MGQ3MWM1
ZWU5YmIzMGU4NmZlNmY0MmJhZWU3NmRmMS4uZmU5ODljODNhMTEwYjFjODM4NzQzZjk3MzJjOWEy
YmNlNWFmZDU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFz
c2VtYmx5LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHku
YXNtCkBAIC0yNTYsNiArMjU2LDcgQEAgbWFjcm8gdGhyb3dFeGNlcHRpb24oZXhjZXB0aW9uKQog
ZW5kCiAKIG1hY3JvIGNhbGxXYXNtU2xvd1BhdGgoc2xvd1BhdGgpCisgICAgc3RvcmVpIFBDLCBB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdCiAgICAgcHJlcGFyZVN0
YXRlRm9yQ0NhbGwoKQogICAgIG1vdmUgY2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCkBAIC0yNzQs
NiArMjc1LDE0IEBAIG1hY3JvIGNhbGxXYXNtQ2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24p
CiAgICAgYWN0aW9uKHIwLCByMSkKIGVuZAogCittYWNybyByZXN0b3JlU3RhY2tQb2ludGVyQWZ0
ZXJDYWxsKCkKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgd3MxCisgICAgbG9hZGkgV2FzbTo6
RnVuY3Rpb25Db2RlQmxvY2s6Om1fbnVtQ2FsbGVlTG9jYWxzW3dzMV0sIHdzMQorICAgIGxzaGlm
dHAgMywgd3MxCisgICAgYWRkcCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCwgd3MxCisg
ICAgc3VicCBjZnIsIHdzMSwgc3AKK2VuZAorCiBtYWNybyB3YXNtUHJvbG9ndWUoY29kZUJsb2Nr
R2V0dGVyLCBjb2RlQmxvY2tTZXR0ZXIsIGxvYWRXYXNtSW5zdGFuY2UpCiAgICAgIyBTZXQgdXAg
dGhlIGNhbGwgZnJhbWUgYW5kIGNoZWNrIGlmIHdlIHNob3VsZCBPU1IuCiAgICAgcHJlc2VydmVD
YWxsZXJQQ0FuZENGUigpCkBAIC0yODEsNiArMjkwLDkgQEAgbWFjcm8gd2FzbVByb2xvZ3VlKGNv
ZGVCbG9ja0dldHRlciwgY29kZUJsb2NrU2V0dGVyLCBsb2FkV2FzbUluc3RhbmNlKQogICAgIGxv
YWRXYXNtSW5zdGFuY2UoKQogICAgIHJlbG9hZE1lbW9yeVJlZ2lzdGVyc0Zyb21JbnN0YW5jZSh3
YXNtSW5zdGFuY2UsIHdzMCwgd3MxKQogCisgICAgbG9hZHAgV2FzbTo6SW5zdGFuY2U6Om1fb3du
ZXJbd2FzbUluc3RhbmNlXSwgd3MwCisgICAgc3RvcmVwIHdzMCwgVGhpc0FyZ3VtZW50T2Zmc2V0
W2Nmcl0KKwogICAgIGNvZGVCbG9ja0dldHRlcih3czApCiAgICAgY29kZUJsb2NrU2V0dGVyKHdz
MCkKIApAQCAtMzMzLDE1ICszNDUsMTkgQEAgbWFjcm8gdHJhY2VFeGVjdXRpb24oKQogICAgIGVu
ZAogZW5kCiAKLSMgTGVzcyBjb252ZW5pZW50LCBidXQgcmVxdWlyZWQgZm9yIG9wY29kZXMgdGhh
dCBjb2xsaWRlIHdpdGggcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb25zIChlLmcuIHdhc21fbm9wKQotbWFj
cm8gdW5wcmVmaXhlZFdhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGZuKQotICAgIGNv
bW1vbk9wKG9wY29kZU5hbWUsIHRyYWNlRXhlY3V0aW9uLCBtYWNybyhzaXplKQorbWFjcm8gY29t
bW9uV2FzbU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgcHJvbG9ndWUsIGZuKQorICAgIGNv
bW1vbk9wKG9wY29kZU5hbWUsIHByb2xvZ3VlLCBtYWNybyhzaXplKQogICAgICAgICBmbihtYWNy
byhmbjIpCiAgICAgICAgICAgICBmbjIob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBzaXplKQog
ICAgICAgICBlbmQpCiAgICAgZW5kKQogZW5kCiAKKyMgTGVzcyBjb252ZW5pZW50LCBidXQgcmVx
dWlyZWQgZm9yIG9wY29kZXMgdGhhdCBjb2xsaWRlIHdpdGggcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb25z
IChlLmcuIHdhc21fbm9wKQorbWFjcm8gdW5wcmVmaXhlZFdhc21PcChvcGNvZGVOYW1lLCBvcGNv
ZGVTdHJ1Y3QsIGZuKQorICAgIGNvbW1vbldhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3Qs
IHRyYWNlRXhlY3V0aW9uLCBmbikKK2VuZAorCiBtYWNybyB3YXNtT3Aob3Bjb2RlTmFtZSwgb3Bj
b2RlU3RydWN0LCBmbikKICAgICB1bnByZWZpeGVkV2FzbU9wKHdhc21fJW9wY29kZU5hbWUlLCBv
cGNvZGVTdHJ1Y3QsIGZuKQogZW5kCkBAIC01MTIsNiArNTI4LDE2IEBAIG9wKHdhc21fZnVuY3Rp
b25fcHJvbG9ndWVfbm9fdGxzLCBtYWNybyAoKQogICAgIHdhc21OZXh0SW5zdHJ1Y3Rpb24oKQog
ZW5kKQogCittYWNybyBqdW1wVG9FeGNlcHRpb24oKQorICAgIGlmIEFSTTY0RQorICAgICAgICBt
b3ZlIHIwLCBhMAorICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNl
dE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6ZXhjZXB0aW9uSGFuZGxlcikg
KiBQdHJTaXplLCBhMQorICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMg
RXhjZXB0aW9uSGFuZGxlclB0clRhZworICAgIGVsc2UKKyAgICAgICAgam1wIHIwLCBFeGNlcHRp
b25IYW5kbGVyUHRyVGFnCisgICAgZW5kCitlbmQKKwogb3Aod2FzbV90aHJvd19mcm9tX3Nsb3df
cGF0aF90cmFtcG9saW5lLCBtYWNybyAoKQogICAgIGxvYWRwIFdhc206Okluc3RhbmNlOjptX3Bv
aW50ZXJUb1RvcEVudHJ5RnJhbWVbd2FzbUluc3RhbmNlXSwgdDUKICAgICBsb2FkcCBbdDVdLCB0
NQpAQCAtNTIzLDE0ICs1NDksNyBAQCBvcCh3YXNtX3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1w
b2xpbmUsIG1hY3JvICgpCiAgICAgIyBTbG93IHBhdGhzIGFuZCB0aGUgdGhyb3dFeGNlcHRpb24g
bWFjcm8gc3RvcmUgdGhlIGV4Y2VwdGlvbiBjb2RlIGluIHRoZSBBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyBzbG90CiAgICAgbG9hZGkgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBQYXls
b2FkT2Zmc2V0W2Nmcl0sIGEzCiAgICAgY0NhbGw0KF9zbG93X3BhdGhfd2FzbV90aHJvd19leGNl
cHRpb24pCi0KLSAgICBpZiBBUk02NEUKLSAgICAgICAgbW92ZSByMCwgYTAKLSAgICAgICAgbGVh
cCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAo
Y29uc3RleHByIEdhdGU6OmV4Y2VwdGlvbkhhbmRsZXIpICogUHRyU2l6ZSwgYTEKLSAgICAgICAg
am1wIFthMV0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcK
LSAgICBlbHNlCi0gICAgICAgIGptcCByMCwgRXhjZXB0aW9uSGFuZGxlclB0clRhZwotICAgIGVu
ZAorICAgIGp1bXBUb0V4Y2VwdGlvbigpCiBlbmQpCiAKIG1hY3JvIHdhc21fdGhyb3dfZnJvbV9m
YXVsdF9oYW5kbGVyKGluc3RhbmNlKQpAQCAtNTQzLDE0ICs1NjIsNyBAQCBtYWNybyB3YXNtX3Ro
cm93X2Zyb21fZmF1bHRfaGFuZGxlcihpbnN0YW5jZSkKICAgICBtb3ZlIDAsIGExCiAgICAgbW92
ZSBjZnIsIGEwCiAgICAgY0NhbGw0KF9zbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24pCi0K
LSAgICBpZiBBUk02NEUKLSAgICAgICAgbW92ZSByMCwgYTAKLSAgICAgICAgbGVhcCBKU0NDb25m
aWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHBy
IEdhdGU6OmV4Y2VwdGlvbkhhbmRsZXIpICogUHRyU2l6ZSwgYTEKLSAgICAgICAgam1wIFthMV0s
IE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLSAgICBlbHNl
Ci0gICAgICAgIGptcCByMCwgRXhjZXB0aW9uSGFuZGxlclB0clRhZwotICAgIGVuZAorICAgIGp1
bXBUb0V4Y2VwdGlvbigpCiBlbmQKIAogb3Aod2FzbV90aHJvd19mcm9tX2ZhdWx0X2hhbmRsZXJf
dHJhbXBvbGluZV9mYXN0VExTLCBtYWNybyAoKQpAQCAtNzcwLDExICs3ODIsMTEgQEAgbWFjcm8g
c2xvd1BhdGhGb3JXYXNtQ2FsbChjdHgsIHNsb3dQYXRoLCBzdG9yZVdhc21JbnN0YW5jZSkKIAog
ICAgICAgICAgICAgIyBMb2FkIHJlZ2lzdGVycyBmcm9tIHN0YWNrCiAgICAgICAgICAgICBmb3JF
YWNoQXJndW1lbnRHUFIobWFjcm8gKG9mZnNldCwgZ3ByKQotICAgICAgICAgICAgICAgIGxvYWRx
IENhbGxGcmFtZUhlYWRlclNpemUgKyBvZmZzZXRbc3AsIHdzMSwgOF0sIGdwcgorICAgICAgICAg
ICAgICAgIGxvYWRxIENhbGxGcmFtZUhlYWRlclNpemUgKyA4ICsgb2Zmc2V0W3NwLCB3czEsIDhd
LCBncHIKICAgICAgICAgICAgIGVuZCkKIAogICAgICAgICAgICAgZm9yRWFjaEFyZ3VtZW50RlBS
KG1hY3JvIChvZmZzZXQsIGZwcikKLSAgICAgICAgICAgICAgICBsb2FkZCBDYWxsRnJhbWVIZWFk
ZXJTaXplICsgb2Zmc2V0W3NwLCB3czEsIDhdLCBmcHIKKyAgICAgICAgICAgICAgICBsb2FkZCBD
YWxsRnJhbWVIZWFkZXJTaXplICsgOCArIG9mZnNldFtzcCwgd3MxLCA4XSwgZnByCiAgICAgICAg
ICAgICBlbmQpCiAKICAgICAgICAgICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCkBA
IC04MTEsMTEgKzgyMyw3IEBAIG1hY3JvIHNsb3dQYXRoRm9yV2FzbUNhbGwoY3R4LCBzbG93UGF0
aCwgc3RvcmVXYXNtSW5zdGFuY2UpCiAgICAgICAgICAgICAgICAgZGVmaW5lUmV0dXJuTGFiZWwo
b3Bjb2RlTmFtZSwgc2l6ZSkKICAgICAgICAgICAgIGVuZCkKIAotICAgICAgICAgICAgbG9hZHAg
Q29kZUJsb2NrW2Nmcl0sIHdzMQotICAgICAgICAgICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2Rl
QmxvY2s6Om1fbnVtQ2FsbGVlTG9jYWxzW3dzMV0sIHdzMQotICAgICAgICAgICAgbHNoaWZ0cCAz
LCB3czEKLSAgICAgICAgICAgIGFkZHAgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwsIHdz
MQotICAgICAgICAgICAgc3VicCBjZnIsIHdzMSwgc3AKKyAgICAgICAgICAgIHJlc3RvcmVTdGFj
a1BvaW50ZXJBZnRlckNhbGwoKQogCiAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gc2V0IFBDIHRv
IGxvYWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLCBidXQgd2UKICAg
ICAgICAgICAgICMgbmVlZCB0byBwcmVzZXJ2ZSBpdHMgY3VycmVudCB2YWx1ZSBzaW5jZSBpdCBt
aWdodCBjb250YWluIGEgcmV0dXJuIHZhbHVlCkBAIC04MzYsMTEgKzg0NCwxMSBAQCBtYWNybyBz
bG93UGF0aEZvcldhc21DYWxsKGN0eCwgc2xvd1BhdGgsIHN0b3JlV2FzbUluc3RhbmNlKQogICAg
ICAgICAgICAgd2dldHUoY3R4LCBtX251bWJlck9mU3RhY2tBcmdzLCB3czApCiAgICAgICAgICAg
ICBtb3ZlIG1lbW9yeUJhc2UsIFBDCiAgICAgICAgICAgICBmb3JFYWNoQXJndW1lbnRHUFIobWFj
cm8gKG9mZnNldCwgZ3ByKQotICAgICAgICAgICAgICAgIHN0b3JlcSBncHIsIENhbGxGcmFtZUhl
YWRlclNpemUgKyBvZmZzZXRbd3MxLCB3czAsIDhdCisgICAgICAgICAgICAgICAgc3RvcmVxIGdw
ciwgQ2FsbEZyYW1lSGVhZGVyU2l6ZSArIDggKyBvZmZzZXRbd3MxLCB3czAsIDhdCiAgICAgICAg
ICAgICBlbmQpCiAKICAgICAgICAgICAgIGZvckVhY2hBcmd1bWVudEZQUihtYWNybyAob2Zmc2V0
LCBmcHIpCi0gICAgICAgICAgICAgICAgc3RvcmVkIGZwciwgQ2FsbEZyYW1lSGVhZGVyU2l6ZSAr
IG9mZnNldFt3czEsIHdzMCwgOF0KKyAgICAgICAgICAgICAgICBzdG9yZWQgZnByLCBDYWxsRnJh
bWVIZWFkZXJTaXplICsgOCArIG9mZnNldFt3czEsIHdzMCwgOF0KICAgICAgICAgICAgIGVuZCkK
IAogICAgICAgICAgICAgbG9hZGkgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZz
ZXRbY2ZyXSwgUEMKQEAgLTI4MDQsMyArMjgxMiwxMTQgQEAgd2FzbU9wKGF0b21pY19mZW5jZSwg
V2FzbURyb3BLZWVwLCBtYWNybyhjdHgpCiAgICAgZmVuY2UKICAgICBkaXNwYXRjaChjdHgpCiBl
bmQpCisKK3dhc21PcCh0aHJvdywgV2FzbVRocm93LCBtYWNybyhjdHgpCisgICAgbG9hZHAgV2Fz
bTo6SW5zdGFuY2U6Om1fcG9pbnRlclRvVG9wRW50cnlGcmFtZVt3YXNtSW5zdGFuY2VdLCB0NQor
ICAgIGxvYWRwIFt0NV0sIHQ1CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodDUpCisKKyAgICBjYWxsV2FzbVNsb3dQYXRoKF9zbG93X3BhdGhfd2FzbV90
aHJvdykKKyAgICBqdW1wVG9FeGNlcHRpb24oKQorZW5kKQorCit3YXNtT3AocmV0aHJvdywgV2Fz
bVJldGhyb3csIG1hY3JvKGN0eCkKKyAgICBjYWxsV2FzbVNsb3dQYXRoKF9zbG93X3BhdGhfd2Fz
bV9yZXRocm93KQorICAgIGp1bXBUb0V4Y2VwdGlvbigpCitlbmQpCisKK21hY3JvIGNhdGNoSW1w
bChjdHgsIHN0b3JlV2FzbUluc3RhbmNlKQorICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MworICAg
IGNvbnZlcnRDYWxsZWVUb1ZNKHQzKQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0MywgdDApCisKKyAgICBsb2FkcCBWTTo6Y2FsbGVlRm9y
V2FzbUNhdGNoW3QzXSwgd3MxCisgICAgc3RvcmVwIDAsIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hb
dDNdCisgICAgc3RvcmVwIHdzMSwgQ2FsbGVlW2Nmcl0KKworICAgIGxvYWRwIFZNOjpjYWxsRnJh
bWVGb3JDYXRjaFt0M10sIGNmcgorICAgIHN0b3JlcCAwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hb
dDNdCisKKyAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKKworICAgIGxvYWRwIFRo
aXNBcmd1bWVudE9mZnNldFtjZnJdLCB3YXNtSW5zdGFuY2UKKyAgICBsb2FkcCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Om1faW5zdGFuY2Vbd2FzbUluc3RhbmNlXSwgd2FzbUluc3RhbmNlCisgICAg
c3RvcmVXYXNtSW5zdGFuY2Uod2FzbUluc3RhbmNlKQorICAgIHJlbG9hZE1lbW9yeVJlZ2lzdGVy
c0Zyb21JbnN0YW5jZSh3YXNtSW5zdGFuY2UsIHdzMCwgd3MxKQorCisgICAgbG9hZHAgQ29kZUJs
b2NrW2Nmcl0sIFBCCisgICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1faW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCisgICAgbG9hZHAgVk06OnRhcmdldEludGVycHJldGVy
UENGb3JUaHJvd1t0M10sIFBDCisgICAgc3VicCBQQiwgUEMKKworICAgIGNhbGxXYXNtU2xvd1Bh
dGgoX3Nsb3dfcGF0aF93YXNtX3JldHJpZXZlX2FuZF9jbGVhcl9leGNlcHRpb24pCisgICAgbW92
ZSByMSwgdDEKKworICAgIHdnZXR1KGN0eCwgbV9zdGFydE9mZnNldCwgdDIpCisgICAgd2dldHUo
Y3R4LCBtX2FyZ3VtZW50Q291bnQsIHQzKQorCisgICAgbHNoaWZ0aSAzLCB0MgorICAgIHN1YnAg
Y2ZyLCB0MiwgdDIKKworLmNvcHlMb29wOgorICAgIGJ0aXogdDMsIC5kb25lCisgICAgbG9hZHEg
W3QxXSwgdDYKKyAgICBzdG9yZXEgdDYsIFt0Ml0KKyAgICBzdWJpIDEsIHQzCisgICAgIyBGSVhN
RTogVXNlIGFybSBzdG9yZS1hZGQvc3ViIGluc3RydWN0aW9ucyBpbiB3YXNtIExMSW50IGNhdGNo
CisgICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjEwCisg
ICAgc3VicCA4LCB0MgorICAgIGFkZHAgOCwgdDEKKyAgICBqbXAgLmNvcHlMb29wCisKKy5kb25l
OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKworICAgIGRpc3BhdGNoKGN0eCkKK2VuZAorCitjb21t
b25XYXNtT3Aod2FzbV9jYXRjaCwgV2FzbUNhdGNoLCBtYWNybygpIGVuZCwgbWFjcm8oY3R4KQor
ICAgIGNhdGNoSW1wbChjdHgsIHN0b3JlV2FzbUluc3RhbmNlVG9UTFMpCitlbmQpCisKK2NvbW1v
bldhc21PcCh3YXNtX2NhdGNoX25vX3RscywgV2FzbUNhdGNoLCBtYWNybygpIGVuZCwgbWFjcm8o
Y3R4KQorICAgIGNhdGNoSW1wbChjdHgsIG1hY3JvKGluc3RhbmNlKSBlbmQpCitlbmQpCisKK21h
Y3JvIGNhdGNoQWxsSW1wbChjdHgsIHN0b3JlV2FzbUluc3RhbmNlKQorICAgIGxvYWRwIENhbGxl
ZVtjZnJdLCB0MworICAgIGNvbnZlcnRDYWxsZWVUb1ZNKHQzKQorICAgIHJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0MywgdDApCisKKyAgICBsb2Fk
cCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoW3QzXSwgd3MxCisgICAgc3RvcmVwIDAsIFZNOjpjYWxs
ZWVGb3JXYXNtQ2F0Y2hbdDNdCisgICAgc3RvcmVwIHdzMSwgQ2FsbGVlW2Nmcl0KKworICAgIGxv
YWRwIFZNOjpjYWxsRnJhbWVGb3JDYXRjaFt0M10sIGNmcgorICAgIHN0b3JlcCAwLCBWTTo6Y2Fs
bEZyYW1lRm9yQ2F0Y2hbdDNdCisKKyAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkK
KworICAgIGxvYWRwIFRoaXNBcmd1bWVudE9mZnNldFtjZnJdLCB3YXNtSW5zdGFuY2UKKyAgICBs
b2FkcCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1faW5zdGFuY2Vbd2FzbUluc3RhbmNlXSwgd2Fz
bUluc3RhbmNlCisgICAgc3RvcmVXYXNtSW5zdGFuY2Uod2FzbUluc3RhbmNlKQorICAgIHJlbG9h
ZE1lbW9yeVJlZ2lzdGVyc0Zyb21JbnN0YW5jZSh3YXNtSW5zdGFuY2UsIHdzMCwgd3MxKQorCisg
ICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2Rl
QmxvY2s6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCisgICAgbG9hZHAgVk06OnRh
cmdldEludGVycHJldGVyUENGb3JUaHJvd1t0M10sIFBDCisgICAgc3VicCBQQiwgUEMKKworICAg
IGNhbGxXYXNtU2xvd1BhdGgoX3Nsb3dfcGF0aF93YXNtX3JldHJpZXZlX2FuZF9jbGVhcl9leGNl
cHRpb24pCisKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisKKyAgICBkaXNwYXRjaChjdHgpCitlbmQK
KworY29tbW9uV2FzbU9wKHdhc21fY2F0Y2hfYWxsLCBXYXNtQ2F0Y2hBbGwsIG1hY3JvKCkgZW5k
LCBtYWNybyhjdHgpCisgICAgY2F0Y2hBbGxJbXBsKGN0eCwgc3RvcmVXYXNtSW5zdGFuY2VUb1RM
UykKK2VuZCkKKworY29tbW9uV2FzbU9wKHdhc21fY2F0Y2hfYWxsX25vX3RscywgV2FzbUNhdGNo
QWxsLCBtYWNybygpIGVuZCwgbWFjcm8oY3R4KQorICAgIGNhdGNoQWxsSW1wbChjdHgsIG1hY3Jv
KGluc3RhbmNlKSBlbmQpCitlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvckluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9ySW5zdGFuY2UuY3BwCmluZGV4IGRmYjkzMTg4YzA4ZmQ4ZGJhZDNiZjdmODVlMTg1MmI1
MjQwNmI1ZDYuLmI2Y2E1YmM0MjM2YjlkNTY1ZjU4Yzg2YTk3MGNhMzc2NTU5MDk1MDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCkBAIC00
MCw2ICs0MCw5IEBAIEVycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgRXJyb3JUeXBlIGVycm9yVHlwZSkKICAgICAsIG1fb3V0T2ZNZW1vcnlF
cnJvcihmYWxzZSkKICAgICAsIG1fZXJyb3JJbmZvTWF0ZXJpYWxpemVkKGZhbHNlKQogICAgICwg
bV9uYXRpdmVHZXR0ZXJUeXBlRXJyb3IoZmFsc2UpCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
ICAgICwgbV9jYXRjaGFibGVGcm9tV2FzbSh0cnVlKQorI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0
YW5jZS5oCmluZGV4IDdkMmU2NDMyNmE4MWRiNmM3NzBhNDYzZDhmOTYzNzY3M2RmYjI5M2IuLmVm
ZjVlOTg3MjRiOTA2MjFiMTgyMjAyOWEwOTUwNmI5Yzc5OWUxZmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgKQEAgLTgwLDYgKzgwLDExIEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldE5hdGl2ZUdldHRlclR5cGVFcnJvcigpIHsgbV9uYXRpdmVHZXR0
ZXJUeXBlRXJyb3IgPSB0cnVlOyB9CiAgICAgYm9vbCBpc05hdGl2ZUdldHRlclR5cGVFcnJvcigp
IGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlR2V0dGVyVHlwZUVycm9yOyB9CiAKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisgICAgdm9pZCBzZXRDYXRjaGFibGVGcm9tV2FzbShib29sIGZsYWcpIHsg
bV9jYXRjaGFibGVGcm9tV2FzbSA9IGZsYWc7IH0KKyAgICBib29sIGlzQ2F0Y2hhYmxlRnJvbVdh
c20oKSBjb25zdCB7IHJldHVybiBtX2NhdGNoYWJsZUZyb21XYXNtOyB9CisjZW5kaWYKKwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzYW5pdGl6ZWRUb1N0cmluZyhKU0dsb2JhbE9iamVj
dCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzYW5pdGl6ZWRNZXNzYWdlU3RyaW5n
KEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNhbml0aXpl
ZE5hbWVTdHJpbmcoSlNHbG9iYWxPYmplY3QqKTsKQEAgLTExNiw2ICsxMjEsOSBAQCBwcm90ZWN0
ZWQ6CiAgICAgYm9vbCBtX291dE9mTWVtb3J5RXJyb3IgOiAxOwogICAgIGJvb2wgbV9lcnJvcklu
Zm9NYXRlcmlhbGl6ZWQgOiAxOwogICAgIGJvb2wgbV9uYXRpdmVHZXR0ZXJUeXBlRXJyb3IgOiAx
OworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBib29sIG1fY2F0Y2hhYmxlRnJvbVdhc20g
OiAxOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyOTdmY2Q2OThmZmJh
OTRiNzcyNmRlNjdkMTliMjQyNTk3MDNhMzJiLi4zMTllNGIzZDhhYjE4MzAwNjBmMjI1NzYxYTE5
MmJjY2I4MDQzN2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCkBAIC0xNTMsNiArMTUzLDcgQEAKICNpbmNsdWRlICJKU1dlYWtTZXQu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNv
bXBpbGVFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5R2xvYmFsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgpAQCAtMTYwLDYgKzE2
MSw3IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIK
KyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIK
ICNpbmNsdWRlICJMYXp5Q2xhc3NTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGF6eVBy
b3BlcnR5SW5saW5lcy5oIgpAQCAtMjIwLDYgKzIyMiw4IEBACiAjaW5jbHVkZSAiV2Vha1NldFBy
b3RvdHlwZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3Nl
bWJseUV4Y2VwdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24u
aCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
V2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuaCIKQEAgLTIzNiw2ICsyNDAsOCBAQAogI2luY2x1
ZGUgIldlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZVByb3Rv
dHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRl
ICJXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIu
aD4KICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCA5NjFjMjQ3ZTlhNzkyYTFhZmU2
YzljOTg5NDA3NmYxNGY3MDgyZGVhLi4xYmRjYzRkZTc0ZDA5MjRkMzljODRmOTUyNWM1ZTBiM2U2
YWY0MTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgKQEAgLTE2OSwxNCArMTY5LDE2IEBAIGNvbnN0ZXhwciBib29sIHR5cGVFeHBvc2VkQnlE
ZWZhdWx0ID0gdHJ1ZTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICNkZWZpbmUgRk9SX0VB
Q0hfV0VCQVNTRU1CTFlfQ09OU1RSVUNUT1JfVFlQRShtYWNybykgXAotICAgIG1hY3JvKFdlYkFz
c2VtYmx5Q29tcGlsZUVycm9yLCB3ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgd2ViQXNzZW1ibHlD
b21waWxlRXJyb3IsIEVycm9ySW5zdGFuY2UsICAgICAgICAgICAgIENvbXBpbGVFcnJvciwgZXJy
b3IsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlDb21waWxl
RXJyb3IsIHdlYkFzc2VtYmx5Q29tcGlsZUVycm9yLCB3ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwg
RXJyb3JJbnN0YW5jZSwgICAgICAgICAgICAgQ29tcGlsZUVycm9yLCBlcnJvciwgIHR5cGVFeHBv
c2VkQnlEZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlFeGNlcHRpb24sICAgIHdlYkFz
c2VtYmx5RXhjZXB0aW9uLCAgICB3ZWJBc3NlbWJseUV4Y2VwdGlvbiwgICAgSlNXZWJBc3NlbWJs
eUV4Y2VwdGlvbiwgICAgRXhjZXB0aW9uLCAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0
KSBcCiAgICAgbWFjcm8oV2ViQXNzZW1ibHlHbG9iYWwsICAgICAgIHdlYkFzc2VtYmx5R2xvYmFs
LCAgICAgICB3ZWJBc3NlbWJseUdsb2JhbCwgICAgICAgSlNXZWJBc3NlbWJseUdsb2JhbCwgICAg
ICAgR2xvYmFsLCAgICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCiAgICAgbWFj
cm8oV2ViQXNzZW1ibHlJbnN0YW5jZSwgICAgIHdlYkFzc2VtYmx5SW5zdGFuY2UsICAgICB3ZWJB
c3NlbWJseUluc3RhbmNlLCAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlLCAgICAgSW5zdGFuY2Us
ICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCi0gICAgbWFjcm8oV2ViQXNzZW1i
bHlMaW5rRXJyb3IsICAgIHdlYkFzc2VtYmx5TGlua0Vycm9yLCAgICB3ZWJBc3NlbWJseUxpbmtF
cnJvciwgICAgRXJyb3JJbnN0YW5jZSwgICAgICAgICAgICAgTGlua0Vycm9yLCAgICBlcnJvciwg
dHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKKyAgICBtYWNybyhXZWJBc3NlbWJseUxpbmtFcnJvciwg
ICAgd2ViQXNzZW1ibHlMaW5rRXJyb3IsICAgIHdlYkFzc2VtYmx5TGlua0Vycm9yLCAgICBFcnJv
ckluc3RhbmNlLCAgICAgICAgICAgICBMaW5rRXJyb3IsICAgIGVycm9yLCAgdHlwZUV4cG9zZWRC
eURlZmF1bHQpIFwKICAgICBtYWNybyhXZWJBc3NlbWJseU1lbW9yeSwgICAgICAgd2ViQXNzZW1i
bHlNZW1vcnksICAgICAgIHdlYkFzc2VtYmx5TWVtb3J5LCAgICAgICBKU1dlYkFzc2VtYmx5TWVt
b3J5LCAgICAgICBNZW1vcnksICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwK
ICAgICBtYWNybyhXZWJBc3NlbWJseU1vZHVsZSwgICAgICAgd2ViQXNzZW1ibHlNb2R1bGUsICAg
ICAgIHdlYkFzc2VtYmx5TW9kdWxlLCAgICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlLCAgICAgICBN
b2R1bGUsICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKLSAgICBtYWNybyhX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvciwgd2ViQXNzZW1ibHlSdW50aW1lRXJyb3IsIHdlYkFzc2Vt
Ymx5UnVudGltZUVycm9yLCBFcnJvckluc3RhbmNlLCAgICAgICAgICAgICBSdW50aW1lRXJyb3Is
IGVycm9yLCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAotICAgIG1hY3JvKFdlYkFzc2VtYmx5VGFi
bGUsICAgICAgICB3ZWJBc3NlbWJseVRhYmxlLCAgICAgICAgd2ViQXNzZW1ibHlUYWJsZSwgICAg
ICAgIEpTV2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIFRhYmxlLCAgICAgICAgb2JqZWN0LCB0eXBl
RXhwb3NlZEJ5RGVmYXVsdCkKKyAgICBtYWNybyhXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciwgd2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVudGltZUVycm9yLCBFcnJvckluc3Rh
bmNlLCAgICAgICAgICAgICBSdW50aW1lRXJyb3IsIGVycm9yLCAgdHlwZUV4cG9zZWRCeURlZmF1
bHQpIFwKKyAgICBtYWNybyhXZWJBc3NlbWJseVRhYmxlLCAgICAgICAgd2ViQXNzZW1ibHlUYWJs
ZSwgICAgICAgIHdlYkFzc2VtYmx5VGFibGUsICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUsICAg
ICAgICBUYWJsZSwgICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKKyAgICBt
YWNybyhXZWJBc3NlbWJseVRhZywgICAgICAgICAgd2ViQXNzZW1ibHlUYWcsICAgICAgICAgIHdl
YkFzc2VtYmx5VGFnLCAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFnLCAgICAgICAgICBUYWcsICAg
ICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIAogI2Vsc2UKICNkZWZpbmUgRk9S
X0VBQ0hfV0VCQVNTRU1CTFlfQ09OU1RSVUNUT1JfVFlQRShtYWNybykKICNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAppbmRleCA1NDAxZmYzODMxZDg2NTA3MTU1YjE5MzI0YmUzOTdmZmJkMzNkOTM0Li5lMDc4
MzNmNDdhYmMxYTRiMDkyNDIxNWM1NzU3YmY2ZWJkZTU2NDZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKQEAgLTU0Myw2ICs1NDMsNyBAQCBib29sIGNh
blVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoQm9vbCwgdXNlVGVtcG9yYWwsIGZh
bHNlLCBOb3JtYWwsICJFeHBvc2UgdGhlIFRlbXBvcmFsIG9iamVjdC4iKSBcCiAgICAgdihCb29s
LCB1c2VXZWJBc3NlbWJseVRocmVhZGluZywgdHJ1ZSwgTm9ybWFsLCAiQWxsb3cgaW5zdHJ1Y3Rp
b25zIGZyb20gdGhlIHdhc20gdGhyZWFkaW5nIHNwZWMuIikgXAogICAgIHYoQm9vbCwgdXNlV2Vi
QXNzZW1ibHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNlcywgZmFsc2UsIE5vcm1hbCwgIkFsbG93IGZ1
bmN0aW9uIHR5cGVzIGZyb20gdGhlIHdhc20gdHlwZWQgZnVuY3Rpb24gcmVmZXJlbmNlcyBzcGVj
LiIpIFwKKyAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucywgdHJ1ZSwgTm9ybWFs
LCAiQWxsb3cgdGhlIG5ldyBzZWN0aW9uIGFuZCBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgd2FzbSBl
eGNlcHRpb24gaGFuZGxpbmcgc3BlYy4iKSBcCiAKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggOTk2YTA2ZGFhYmE4MmNjZWZi
NDNkZjNmNjVmMTMxZTZmZGU2ZWUwNy4uMzhlOTUxMjliYTlmMDIxMTBhMWM0M2UwNTFjNGFhNjc4
YzZmZDBkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMTI5LDExICsx
MjksMTMgQEAKICNpbmNsdWRlICJKU1dlYWtPYmplY3RSZWYuaCIKICNpbmNsdWRlICJKU1dlYWtT
ZXQuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlHbG9iYWwuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNp
bmNsdWRlICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUg
Ik1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmgiCkBAIC0zMzQsNiArMzM2LDcgQEAgVk06OlZNKFZN
VHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlLCBXVEY6OlJ1bkxvb3AqIHJ1bkxvb3AsIGJv
b2wqIHN1Y2Nlc3MpCiAgICAgLCBpbnRsU2VnbWVudHNIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxU
eXBlOjpjcmVhdGU8SW50bFNlZ21lbnRzPigpKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAg
ICAsIHdlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3Jl
YXRlPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KCkpCisgICAgLCB3ZWJBc3NlbWJseUV4Y2VwdGlv
bkhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uPigpKQogICAgICwgd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZShJc29IZWFwQ2Vs
bFR5cGU6OmNyZWF0ZTxXZWJBc3NlbWJseUZ1bmN0aW9uPigpKQogICAgICwgd2ViQXNzZW1ibHlH
bG9iYWxIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseUds
b2JhbD4oKSkKICAgICAsIHdlYkFzc2VtYmx5SW5zdGFuY2VIZWFwQ2VsbFR5cGUoSXNvSGVhcENl
bGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpKQpAQCAtMzQxLDYgKzM0NCw3
IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSwgV1RGOjpSdW5Mb29w
KiBydW5Mb29wLCBib29sKiBzdWNjZXNzKQogICAgICwgd2ViQXNzZW1ibHlNb2R1bGVIZWFwQ2Vs
bFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseU1vZHVsZT4oKSkKICAg
ICAsIHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6
Y3JlYXRlPFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkPigpKQogICAgICwgd2ViQXNzZW1ibHlUYWJs
ZUhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5VGFibGU+
KCkpCisgICAgLCB3ZWJBc3NlbWJseVRhZ0hlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNy
ZWF0ZTxKU1dlYkFzc2VtYmx5VGFnPigpKQogI2VuZGlmCiAgICAgLCBwcmltaXRpdmVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlKCJQcmltaXRpdmUgR2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgYXV4
aWxpYXJ5SGVhcENlbGxUeXBlLmdldCgpLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvci5nZXQo
KSkgLy8gSGFzaDoweDNlN2NkNzYyCiAgICAgLCBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFj
ZSgiSlNWYWx1ZSBHaWdhY2FnZSBBdXhpbGlhcnkiLCBoZWFwLCBhdXhpbGlhcnlIZWFwQ2VsbFR5
cGUuZ2V0KCksIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkgLy8gSGFzaDoweDI0MWU5
NDYKQEAgLTE2MjksNiArMTYzMyw3IEBAIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhpbnRsU2VnbWVudHNTcGFjZSwgaW50bFNlZ21lbnRzSGVhcENlbGxUCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9X
KGpzVG9XYXNtSUNDYWxsZWVTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUb1dhc21J
Q0NhbGxlZSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3Nl
bWJseUNvZGVCbG9ja1NwYWNlLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5nZXQo
KSwgSlNXZWJBc3NlbWJseUNvZGVCbG9jaykgLy8gSGFzaDoweDlhZDk5NWNkCitEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlFeGNlcHRpb25TcGFjZSwg
d2ViQXNzZW1ibHlFeGNlcHRpb25IZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlFeGNl
cHRpb24pCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1i
bHlGdW5jdGlvblNwYWNlLCB3ZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmdldCgpLCBX
ZWJBc3NlbWJseUZ1bmN0aW9uKSAvLyBIYXNoOjB4OGI3YzMyZGIKIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUdsb2JhbFNwYWNlLCB3ZWJBc3NlbWJs
eUdsb2JhbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNXZWJBc3NlbWJseUdsb2JhbCkKIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2Us
IHdlYkFzc2VtYmx5SW5zdGFuY2VIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSkKQEAgLTE2MzYsNiArMTY0MSw3IEBAIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyh3ZWJBc3NlbWJseU1lbW9yeVNwYWNlLCB3ZWJBc3NlbWJseU1lbW9yCiBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlNb2R1bGVTcGFj
ZSwgd2ViQXNzZW1ibHlNb2R1bGVIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlNb2R1
bGUpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmRTcGFjZSwgd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRIZWFwQ2VsbFR5cGUuZ2V0
KCksIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5VGFibGVTcGFjZSwgd2ViQXNzZW1ibHlUYWJsZUhlYXBD
ZWxsVHlwZS5nZXQoKSwgSlNXZWJBc3NlbWJseVRhYmxlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5VGFnU3BhY2UsIHdlYkFzc2VtYmx5VGFnSGVh
cENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5VGFnKQogRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3BhY2UsIGNlbGxI
ZWFwQ2VsbFR5cGUuZ2V0KCksIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKSAvLyBIYXNoOjB4
ZDRhNWZmMDEKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA3YTU4
YjI3OWU2NzBhODQwM2QxZjM5NDEyMzU3ZDVlNzcxMTNmNTc4Li5hYTg5YjI4YWRlMmYyNWI2Y2M4
NDQwZDYxNGJjOTQ3YWUzYmE0Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAg
LTI5LDYgKzI5LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKKyNp
bmNsdWRlICJDYWxsZWVCaXRzLmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5o
IgogI2luY2x1ZGUgIkNvbXBsZXRlU3Vic3BhY2UuaCIKICNpbmNsdWRlICJDb25jdXJyZW50SlNM
b2NrLmgiCkBAIC00NTAsNiArNDUxLDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
c29IZWFwQ2VsbFR5cGU+IGludGxTZWdtZW50c0hlYXBDZWxsVHlwZTsKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1i
bHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxs
VHlwZT4gd2ViQXNzZW1ibHlFeGNlcHRpb25IZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUdsb2JhbEhlYXBD
ZWxsVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJs
eUluc3RhbmNlSGVhcENlbGxUeXBlOwpAQCAtNDU3LDYgKzQ1OSw3IEBAIHB1YmxpYzoKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseU1vZHVsZUhlYXBDZWxs
VHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseU1v
ZHVsZVJlY29yZEhlYXBDZWxsVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxU
eXBlPiB3ZWJBc3NlbWJseVRhYmxlSGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
c29IZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5VGFnSGVhcENlbGxUeXBlOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoSklUKQpAQCAtNjI2LDYgKzYyOSw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1RvV2Fz
bUlDQ2FsbGVlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3
ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIod2ViQXNzZW1ibHlFeGNlcHRpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5R2xvYmFsU3BhY2UpCiAgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUluc3RhbmNlU3Bh
Y2UpCkBAIC02MzMsNiArNjM3LDcgQEAgcHVibGljOgogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlNb2R1bGVTcGFjZSkKICAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3BhY2UpCiAgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVRhYmxlU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVRhZ1Nw
YWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb25TcGFjZSkKICNlbmRpZgogCkBAIC04OTYsNiArOTAxLDExIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWTSwgY2FsbEZyYW1lRm9yQ2F0Y2gp
OwogICAgIH0KIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGNhbGxlZUZvcldh
c21DYXRjaCk7CisgICAgfQorCiAgICAgc3RhdGljIHB0cmRpZmZfdCB0b3BFbnRyeUZyYW1lT2Zm
c2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcEVudHJ5
RnJhbWUpOwpAQCAtOTkwLDYgKzEwMDAsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgdmFyYXJn
c0xlbmd0aDsKICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZVJldHVyblZhbHVlOwogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lRm9yQ2F0Y2g7CisgICAgQ2FsbGVlQml0cyBjYWxsZWVGb3JXYXNt
Q2F0Y2g7CiAgICAgdm9pZCogdGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiAgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIHRhcmdldEludGVycHJldGVyUENGb3JUaHJvdzsKICAgICB1aW50MzJfdCBvc3JF
eGl0SW5kZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWly
SVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2Vu
ZXJhdG9yLmNwcAppbmRleCBmOWMyOTQ2MDA2MTg3M2QwMDQ0OThhODAwNDQ2NjJjZTIxN2Y2YmU0
Li43OTI4MmI3N2U3ODYxNjFkNWRmMDhhNmRmODFhNDJmZWUxMTgzOWZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTE0Nyw3
ICsxNDcsMTIgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNJ
Zihjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUo
KSA9PSBCbG9ja1R5cGU6OklmOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzVHJ5KGNvbnN0IENv
bnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2Nr
VHlwZTo6VHJ5OyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29udHJvbERh
dGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpD
YXRjaDsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0FueUNhdGNoKGNvbnN0IENvbnRyb2xEYXRh
JiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0
Y2g7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNUb3BMZXZlbChjb25zdCBDb250cm9sRGF0YSYg
Y29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExl
dmVsOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzTG9vcChjb25zdCBDb250cm9sRGF0YSYgY29u
dHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3A7IH0K
KyAgICAgICAgc3RhdGljIGJvb2wgaXNCbG9jayhjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkg
eyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkJsb2NrOyB9CiAKICAg
ICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIHsKQEAgLTE2
NCw2ICsxNjksMTIgQEAgcHVibGljOgogICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRvcExl
dmVsOgogICAgICAgICAgICAgICAgIG91dC5wcmludCgiVG9wTGV2ZWw6ICIpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRyeToKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIlRyeTogIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEJsb2NrVHlwZTo6Q2F0Y2g6CisgICAgICAgICAgICAgICAgb3V0LnByaW50
KCJDYXRjaDogIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBvdXQucHJpbnQoIkNvbnRpbnVhdGlvbjogIiwgKmNvbnRpbnVhdGlvbiwgIiwgU3Bl
Y2lhbDogIik7CiAgICAgICAgICAgICBpZiAoc3BlY2lhbCkKQEAgLTMxNCw2ICszMjUsMTYgQEAg
cHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29u
dHJvbERhdGEmLCBjb25zdCBTdGFjayYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBl
bmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNl
cHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3Vs
dExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRv
VW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENv
bnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZENhdGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5
cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShD
b250cm9sVHlwZSYsIENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5
cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUaHJvdyh1bnNp
Z25lZCBleGNlcHRpb25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2sm
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXRocm93KHVuc2ln
bmVkLCBDb250cm9sVHlwZSYpOworCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVl
cyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRy
b2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFs
dWVzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhw
cmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0
cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0
YWNrKTsKQEAgLTI5ODIsNiArMzAwMyw2MCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNl
VG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJl
dHVybiB7IH07CiB9CiAKKy8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgV2FzbSBleGNlcHRpb25z
IGluIHRoZSBBaXIgZ2VuZXJhdG9yCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMxMjExCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1
cmUsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25l
ZCwgY29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFj
aGFibGUodW5zaWduZWQsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlz
dCYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxs
KFN0YWNrJiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZShDb250cm9sVHlwZSYs
IENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIFN0YWNrJikgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIFVOVVNFRF9QQVJBTShleGNlcHRpb25JbmRleCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29u
dHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKwogYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25z
dCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ2FsbEluZm9y
bWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1h
dGlvbkZvcigqZGF0YS5zaWduYXR1cmUoKSwgQ2FsbFJvbGU6OkNhbGxlZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggMDgxY2My
YjI1NWVmZDk1NTcxYzNlNTkxMWU0Mzc4MGI3OTRjYzNhMC4uZmU2YjM4ZjNjYzNjMmJkNDFlNTA3
YmZjMzEyZTRiMDY1Yjk4NTM2YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtNDgsNiArNDgsOCBAQAogI2luY2x1ZGUgIkIzV2Fz
bUJvdW5kc0NoZWNrVmFsdWUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5o
IgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5o
IgogI2luY2x1ZGUgIldhc21Db250ZXh0SW5saW5lcy5oIgpAQCAtODMsMTggKzg1LDMzIEBAIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiB9CiAKK2NsYXNzIEIzSVJH
ZW5lcmF0b3I7CitzdHJ1Y3QgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7CisgICAgdm9pZCBn
ZW5lcmF0ZShDQ2FsbEhlbHBlcnMmLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiwgQjNJUkdlbmVyYXRvciopIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBzX2ludmFsaWRDYWxsU2l0ZUluZGV4ID0gIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKTsKKworICAgIHVuc2lnbmVkIG1fY2FsbFNpdGVJbmRleCB7c19pbnZhbGlkQ2FsbFNp
dGVJbmRleCB9OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworfTsKKwogY2xhc3MgQjNJUkdlbmVy
YXRvciB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSBWYWx1ZSo7CisgICAg
dXNpbmcgRXhwcmVzc2lvblR5cGUgPSBWYXJpYWJsZSo7CiAgICAgdXNpbmcgUmVzdWx0TGlzdCA9
IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgOD47CiAKICAgICBzdHJ1Y3QgQ29udHJvbERhdGEgewot
ICAgICAgICBDb250cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIEJsb2Nr
U2lnbmF0dXJlIHNpZ25hdHVyZSwgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVh
dGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIpCisgICAgICAgIENvbnRyb2xEYXRh
KFByb2NlZHVyZSYgcHJvYywgT3JpZ2luIG9yaWdpbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJl
LCBCbG9ja1R5cGUgdHlwZSwgdW5zaWduZWQgc3RhY2tTaXplLCBCYXNpY0Jsb2NrKiBjb250aW51
YXRpb24sIEJhc2ljQmxvY2sqIHNwZWNpYWwgPSBudWxscHRyKQogICAgICAgICAgICAgOiBjb250
cm9sQmxvY2tUeXBlKHR5cGUpCiAgICAgICAgICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkK
KyAgICAgICAgICAgICwgbV9zdGFja1NpemUoc3RhY2tTaXplKQogICAgICAgICAgICAgLCBjb250
aW51YXRpb24oY29udGludWF0aW9uKQogICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwpCiAg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlICE9IEJsb2NrVHlwZTo6VHJ5ICYmIHR5
cGUgIT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICBpZiAodHlwZSAhPSBCbG9ja1R5
cGU6OlRvcExldmVsKQorICAgICAgICAgICAgICAgIG1fc3RhY2tTaXplIC09IHNpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpOworCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBCbG9ja1R5cGU6Okxv
b3ApIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJl
LT5hcmd1bWVudENvdW50KCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQo
cHJvYy5hZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJlLT5hcmd1bWVudChpKSksIG9y
aWdpbikpOwpAQCAtMTA0LDEyICsxMjEsMzcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKKyAgICAgICAgQ29udHJvbERhdGEoUHJvY2VkdXJlJiBwcm9jLCBPcmlnaW4gb3Jp
Z2luLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIEJsb2NrVHlwZSB0eXBlLCB1bnNpZ25lZCBz
dGFja1NpemUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgdW5zaWduZWQgdHJ5U3RhcnQsIHVu
c2lnbmVkIHRyeURlcHRoKQorICAgICAgICAgICAgOiBjb250cm9sQmxvY2tUeXBlKHR5cGUpCisg
ICAgICAgICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKKyAgICAgICAgICAgICwgbV9zdGFj
a1NpemUoc3RhY2tTaXplKQorICAgICAgICAgICAgLCBjb250aW51YXRpb24oY29udGludWF0aW9u
KQorICAgICAgICAgICAgLCBzcGVjaWFsKG51bGxwdHIpCisgICAgICAgICAgICAsIG1fdHJ5U3Rh
cnQodHJ5U3RhcnQpCisgICAgICAgICAgICAsIG1fdHJ5RGVwdGgodHJ5RGVwdGgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShwcm9jKTsKKyAgICAgICAgICAgIFVOVVNFRF9Q
QVJBTShvcmlnaW4pOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25h
dHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICAgICAgICAgIHBoaXMuYXBwZW5kKHBy
b2MuYWRkPFZhbHVlPihQaGksIHRvQjNUeXBlKHNpZ25hdHVyZS0+cmV0dXJuVHlwZShpKSksIG9y
aWdpbikpOworICAgICAgICB9CisKICAgICAgICAgQ29udHJvbERhdGEoKQogICAgICAgICB7CiAg
ICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0lmKGNvbnN0IENvbnRyb2xEYXRhJiBj
b250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWY7IH0K
KyAgICAgICAgc3RhdGljIGJvb2wgaXNUcnkoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsg
cmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUcnk7IH0KKyAgICAgICAg
c3RhdGljIGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1
cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoOyB9CiAgICAgICAgIHN0
YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJu
IGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbDsgfQorICAgICAgICBz
dGF0aWMgYm9vbCBpc0xvb3AoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNv
bnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wOyB9CisgICAgICAgIHN0YXRpYyBi
b29sIGlzQmxvY2soY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wu
YmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpCbG9jazsgfQorICAgICAgICBzdGF0aWMgYm9vbCBp
c0NhdGNoKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udHJvbC5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5cGU6OkNhdGNoKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBjb250cm9sLmNhdGNoS2lu
ZCgpID09IENhdGNoS2luZDo6Q2F0Y2g7CisgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgewpAQCAtMTI2LDYgKzE2OCwxMiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6VG9wTGV2ZWw6CiAgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCJUb3BMZXZlbDogIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6VHJ5OgorICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiVHJ5OiAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxv
Y2tUeXBlOjpDYXRjaDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkNhdGNoOiAiKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5wcmlu
dCgiQ29udGludWF0aW9uOiAiLCAqY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKICAgICAg
ICAgICAgIGlmIChzcGVjaWFsKQpAQCAtMTU0LDYgKzIwMiwyNCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBzcGVjaWFsID0gbnVsbHB0cjsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgY29udmVy
dFRyeVRvQ2F0Y2godW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVmFyaWFibGUqIGV4Y2Vw
dGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGJsb2NrVHlwZSgpID09IEJsb2Nr
VHlwZTo6VHJ5KTsKKyAgICAgICAgICAgIGNvbnRyb2xCbG9ja1R5cGUgPSBCbG9ja1R5cGU6OkNh
dGNoOworICAgICAgICAgICAgbV9jYXRjaEtpbmQgPSBDYXRjaEtpbmQ6OkNhdGNoOworICAgICAg
ICAgICAgbV90cnlFbmQgPSB0cnlFbmRDYWxsU2l0ZUluZGV4OworICAgICAgICAgICAgbV9leGNl
cHRpb24gPSBleGNlcHRpb247CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNvbnZlcnRUcnlU
b0NhdGNoQWxsKHVuc2lnbmVkIHRyeUVuZENhbGxTaXRlSW5kZXgsIFZhcmlhYmxlKiBleGNlcHRp
b24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChibG9ja1R5cGUoKSA9PSBCbG9ja1R5
cGU6OlRyeSk7CisgICAgICAgICAgICBjb250cm9sQmxvY2tUeXBlID0gQmxvY2tUeXBlOjpDYXRj
aDsKKyAgICAgICAgICAgIG1fY2F0Y2hLaW5kID0gQ2F0Y2hLaW5kOjpDYXRjaEFsbDsKKyAgICAg
ICAgICAgIG1fdHJ5RW5kID0gdHJ5RW5kQ2FsbFNpdGVJbmRleDsKKyAgICAgICAgICAgIG1fZXhj
ZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9CisKICAgICAgICAgU2lnbmF0dXJlQXJnQ291
bnQgYnJhbmNoVGFyZ2V0QXJpdHkoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAo
YmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQpAQCAtMTY5LDEzICsyMzUsNTMgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpOwogICAg
ICAgICB9CiAKKyAgICAgICAgdW5zaWduZWQgdHJ5U3RhcnQoKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBj
b250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJu
IG1fdHJ5U3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlFbmQoKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9j
a1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeUVuZDsKKyAgICAgICAgfQor
CisgICAgICAgIHVuc2lnbmVkIHRyeURlcHRoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJs
b2NrVHlwZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeURl
cHRoOworICAgICAgICB9CisKKyAgICAgICAgQ2F0Y2hLaW5kIGNhdGNoS2luZCgpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlw
ZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fY2F0Y2hLaW5kOworICAgICAgICB9CisK
KyAgICAgICAgVmFyaWFibGUqIGV4Y2VwdGlvbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAg
ICAgICAgcmV0dXJuIG1fZXhjZXB0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQg
c3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1NpemU7IH0KKwogICAgIHByaXZhdGU6
CisgICAgICAgIC8vIEZJWE1FOiBDb21wcmVzcyBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBm
aWVsZHMgdXNpbmcgYW4gdW5pb24KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMTIxMgogICAgICAgICBmcmllbmQgY2xhc3MgQjNJUkdlbmVyYXRv
cjsKICAgICAgICAgQmxvY2tUeXBlIGNvbnRyb2xCbG9ja1R5cGU7CiAgICAgICAgIEJsb2NrU2ln
bmF0dXJlIG1fc2lnbmF0dXJlOworICAgICAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKICAgICAg
ICAgQmFzaWNCbG9jayogY29udGludWF0aW9uOwogICAgICAgICBCYXNpY0Jsb2NrKiBzcGVjaWFs
OwotICAgICAgICBSZXN1bHRMaXN0IHBoaXM7CisgICAgICAgIFZlY3RvcjxWYWx1ZSo+IHBoaXM7
CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5U3RhcnQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5RW5k
OworICAgICAgICB1bnNpZ25lZCBtX3RyeURlcHRoOworICAgICAgICBDYXRjaEtpbmQgbV9jYXRj
aEtpbmQ7CisgICAgICAgIFZhcmlhYmxlKiBtX2V4Y2VwdGlvbjsKICAgICB9OwogCiAgICAgdXNp
bmcgQ29udHJvbFR5cGUgPSBDb250cm9sRGF0YTsKQEAgLTI3Myw2ICszNzksMTYgQEAgcHVibGlj
OgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERh
dGEmLCBjb25zdCBTdGFjayYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3Np
bmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25J
bmRleCwgY29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3Qm
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFj
aGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xU
eXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhdGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShDb250cm9s
VHlwZSYsIENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUaHJvdyh1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXRocm93KHVuc2lnbmVkLCBD
b250cm9sVHlwZSYpOworCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
UmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRh
JiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29u
dHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsK
QEAgLTI4NiwyMCArNDAyLDM2IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2ln
bmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0
cyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbFJlZihjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiBy
ZXN1bHRzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNo
YWJsZSgpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRJbmRpcmVj
dENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlLCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0
Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdEluZGlyZWN0Q2Fs
bChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIFZhbHVlKiBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1
cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7CiAgICAgQjM6
OlZhbHVlKiBjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiwgT3JpZ2luLCBjb25zdCBT
aWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBjb25zdCBTY29wZWRMYW1i
ZGE8dm9pZChQYXRjaHBvaW50VmFsdWUqKT4mIHBhdGNocG9pbnRGdW5jdG9yKTsKIAogICAgIHZv
aWQgZHVtcChjb25zdCBDb250cm9sU3RhY2smLCBjb25zdCBTdGFjayogZXhwcmVzc2lvblN0YWNr
KTsKICAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiogcGFy
c2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xv
Y2FscygpIHsgfQotICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IH0KKyAgICB2b2lk
IGRpZFBvcFZhbHVlRnJvbVN0YWNrKCkgeyAtLW1fc3RhY2tTaXplOyB9CiAKICAgICBWYWx1ZSog
Y29uc3RhbnQoQjM6OlR5cGUsIHVpbnQ2NF90IGJpdHMsIHN0ZDo6b3B0aW9uYWw8T3JpZ2luPiA9
IHN0ZDo6bnVsbG9wdCk7CiAgICAgVmFsdWUqIGZyYW1lUG9pbnRlcigpOworICAgIHZvaWQgaW5z
ZXJ0RW50cnlTd2l0Y2goKTsKICAgICB2b2lkIGluc2VydENvbnN0YW50cygpOwogCiAgICAgQjM6
OlR5cGUgdG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUpOwogCisgICAgdm9pZCBhZGRTdGFj
a01hcCh1bnNpZ25lZCBjYWxsU2l0ZUluZGV4LCBTdGFja01hcCYmIHN0YWNrbWFwKQorICAgIHsK
KyAgICAgICAgbV9zdGFja21hcHMuYWRkKENhbGxTaXRlSW5kZXgoY2FsbFNpdGVJbmRleCksIFdU
Rk1vdmUoc3RhY2ttYXApKTsKKyAgICB9CisKKyAgICBTdGFja01hcHMmJiB0YWtlU3RhY2ttYXBz
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fc3RhY2ttYXBzKTsKKyAgICB9CisK
KyAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiB0YWtlRXhjZXB0aW9uSGFuZGxlcnMo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9leGNlcHRpb25IYW5kbGVycyk7Cisg
ICAgfQorCiBwcml2YXRlOgogICAgIHZvaWQgZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVy
cyYsIEV4Y2VwdGlvblR5cGUpOwogCkBAIC0zMDcsMjggKzQzOSwzMyBAQCBwcml2YXRlOgogICAg
IHZvaWQgZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgsIGNvbnN0IFN0YWNr
JiBlbmNsb3NpbmdTdGFjaywgY29uc3QgU3RhY2smIG5ld1N0YWNrKTsKIAogICAgIHZvaWQgZW1p
dFdyaXRlQmFycmllckZvckpTV3JhcHBlcigpOwotICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVj
a0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNl
dCwgdWludDMyX3Qgc2l6ZU9mT3ApOworICAgIFZhbHVlKiBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9p
bnRlcihWYWx1ZSogcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7
CiAgICAgQjM6OktpbmQgbWVtb3J5S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9wKTsKLSAgICBFeHBy
ZXNzaW9uVHlwZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIs
IHVpbnQzMl90IG9mZnNldCk7Ci0gICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNl
dCk7CisgICAgVmFsdWUqIGVtaXRMb2FkT3AoTG9hZE9wVHlwZSwgVmFsdWUqIHBvaW50ZXIsIHVp
bnQzMl90IG9mZnNldCk7CisgICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgVmFsdWUq
IHBvaW50ZXIsIFZhbHVlKiwgdWludDMyX3Qgb2Zmc2V0KTsKIAotICAgIEV4cHJlc3Npb25UeXBl
IHNhbml0aXplQXRvbWljUmVzdWx0KEV4dEF0b21pY09wVHlwZSwgVHlwZSwgRXhwcmVzc2lvblR5
cGUgcmVzdWx0KTsKLSAgICBFeHByZXNzaW9uVHlwZSBlbWl0QXRvbWljTG9hZE9wKEV4dEF0b21p
Y09wVHlwZSwgVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KTsK
LSAgICB2b2lkIGVtaXRBdG9taWNTdG9yZU9wKEV4dEF0b21pY09wVHlwZSwgVHlwZSwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7
Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdEF0b21pY0JpbmFyeVJNV09wKEV4dEF0b21pY09wVHlw
ZSwgVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVp
bnQzMl90IG9mZnNldCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdEF0b21pY0NvbXBhcmVFeGNo
YW5nZShFeHRBdG9taWNPcFR5cGUsIFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJl
c3Npb25UeXBlIGV4cGVjdGVkLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0
KTsKKyAgICBWYWx1ZSogc2FuaXRpemVBdG9taWNSZXN1bHQoRXh0QXRvbWljT3BUeXBlLCBUeXBl
LCBWYWx1ZSogcmVzdWx0KTsKKyAgICBWYWx1ZSogZW1pdEF0b21pY0xvYWRPcChFeHRBdG9taWNP
cFR5cGUsIFR5cGUsIFZhbHVlKiBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOworICAgIHZvaWQg
ZW1pdEF0b21pY1N0b3JlT3AoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1ZSogcG9pbnRlciwg
VmFsdWUqLCB1aW50MzJfdCBvZmZzZXQpOworICAgIFZhbHVlKiBlbWl0QXRvbWljQmluYXJ5Uk1X
T3AoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUqLCB1aW50MzJf
dCBvZmZzZXQpOworICAgIFZhbHVlKiBlbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0b21p
Y09wVHlwZSwgVHlwZSwgVmFsdWUqIHBvaW50ZXIsIFZhbHVlKiBleHBlY3RlZCwgVmFsdWUqLCB1
aW50MzJfdCBvZmZzZXQpOwogCi0gICAgdm9pZCB1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSBw
aGksIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSk7Ci0gICAgdm9pZCB1bmlmeVZhbHVlc1dp
dGhCbG9jayhjb25zdCBTdGFjayYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHN0YWNr
KTsKKyAgICB2b2lkIHVuaWZ5KFZhbHVlKiBwaGksIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJj
ZSk7CisgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYgcmVzdWx0U3Rh
Y2ssIGNvbnN0IENvbnRyb2xEYXRhJiBibG9jayk7CiAKLSAgICB2b2lkIGVtaXRDaGVja3NGb3JN
b2RPckRpdihCMzo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSBy
aWdodCk7CisgICAgdm9pZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSwgVmFsdWUq
IGxlZnQsIFZhbHVlKiByaWdodCk7CiAKLSAgICBpbnQzMl90IFdBUk5fVU5VU0VEX1JFVFVSTiBm
aXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiwgdWludDMyX3QpOwotICAgIEV4
cHJlc3Npb25UeXBlIFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9y
QXRvbWljT3BzKEV4dEF0b21pY09wVHlwZSwgRXhwcmVzc2lvblR5cGUsIHVpbnQzMl90KTsKKyAg
ICBpbnQzMl90IFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KFZhbHVl
KiYsIHVpbnQzMl90KTsKKyAgICBWYWx1ZSogV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRl
clBsdXNPZmZzZXRGb3JBdG9taWNPcHMoRXh0QXRvbWljT3BUeXBlLCBWYWx1ZSosIHVpbnQzMl90
KTsKIAogICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiwgQmFz
aWNCbG9jayosIFZhbHVlKik7CiAgICAgZW51bSBjbGFzcyBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1p
dCB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJl
c3RvcmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFZhbHVlKiBp
bnN0YW5jZSwgUHJvY2VkdXJlJiwgQmFzaWNCbG9jayopOworICAgIHZvaWQgcmVzdG9yZVdlYkFz
c2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUlu
Zm9ybWF0aW9uJiwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKiwgYm9v
bCByZXN0b3JlSW5zdGFuY2UgPSB0cnVlKTsKKworICAgIFZhbHVlKiBsb2FkRnJvbVNjcmF0Y2hC
dWZmZXIodW5zaWduZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBwb2ludGVyLCBCMzo6VHlwZSk7
CisgICAgdm9pZCBjb25uZWN0Q29udHJvbEVudHJ5KHVuc2lnbmVkJiBpbmRleEluQnVmZmVyLCBW
YWx1ZSogcG9pbnRlciwgQ29udHJvbERhdGEmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBDb250
cm9sRGF0YSYgY3VycmVudERhdGEsIGJvb2wgZmlsbExvb3BQaGlzID0gZmFsc2UpOworICAgIFZh
bHVlKiBlbWl0Q2F0Y2hJbXBsKENhdGNoS2luZCwgQ29udHJvbFR5cGUmLCB1bnNpZ25lZCBleGNl
cHRpb25JbmRleCA9IDApOworICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgcHJlcGFyZVBh
dGNocG9pbnRGb3JFeGNlcHRpb25zKEJhc2ljQmxvY2sqLCBQYXRjaHBvaW50VmFsdWUqKTsKIAog
ICAgIE9yaWdpbiBvcmlnaW4oKTsKIApAQCAtMzM5LDYgKzQ3Niw2MiBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gbV9vdXRlckxvb3BzLmxhc3QoKTsKICAgICB9CiAKKyAgICBFeHByZXNzaW9u
VHlwZSBwdXNoKFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBwdXNoKHRvQjNUeXBl
KHR5cGUpKTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uVHlwZSBwdXNoKEIzOjpUeXBlIHR5cGUp
CisgICAgeworICAgICAgICArK21fc3RhY2tTaXplOworICAgICAgICBpZiAobV9zdGFja1NpemUg
PiBtX21heFN0YWNrU2l6ZSkgeworICAgICAgICAgICAgbV9tYXhTdGFja1NpemUgPSBtX3N0YWNr
U2l6ZTsKKyAgICAgICAgICAgIFZhcmlhYmxlKiB2YXIgPSBtX3Byb2MuYWRkVmFyaWFibGUodHlw
ZSk7CisgICAgICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXIpOworICAgICAgICAgICAgcmV0dXJu
IHZhcjsKKyAgICAgICAgfQorCisgICAgICAgIFZhcmlhYmxlKiB2YXIgPSBtX3N0YWNrW21fc3Rh
Y2tTaXplIC0gMV07CisgICAgICAgIGlmICh2YXItPnR5cGUoKSA9PSB0eXBlKQorICAgICAgICAg
ICAgcmV0dXJuIHZhcjsKKworICAgICAgICB2YXIgPSBtX3Byb2MuYWRkVmFyaWFibGUodHlwZSk7
CisgICAgICAgIG1fc3RhY2tbbV9zdGFja1NpemUgLSAxXSA9IHZhcjsKKyAgICAgICAgcmV0dXJu
IHZhcjsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uVHlwZSBwdXNoKFZhbHVlKiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIFZhcmlhYmxlKiB2YXIgPSBwdXNoKHZhbHVlLT50eXBlKCkpOworICAgICAg
ICBzZXQodmFyLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB2YXI7CisgICAgfQorCisgICAgVmFs
dWUqIGdldChCYXNpY0Jsb2NrKiBibG9jaywgVmFyaWFibGUqIHZhcmlhYmxlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6
R2V0LCBvcmlnaW4oKSwgdmFyaWFibGUpOworICAgIH0KKworICAgIFZhbHVlKiBnZXQoVmFyaWFi
bGUqIHZhcmlhYmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldChtX2N1cnJlbnRCbG9jaywg
dmFyaWFibGUpOworICAgIH0KKworICAgIFZhbHVlKiBzZXQoQmFzaWNCbG9jayogYmxvY2ssIFZh
cmlhYmxlKiBkc3QsIFZhbHVlKiBzcmMpCisgICAgeworICAgICAgICByZXR1cm4gYmxvY2stPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIG9yaWdpbigpLCBkc3QsIHNy
Yyk7CisgICAgfQorCisgICAgVmFsdWUqIHNldChWYXJpYWJsZSogZHN0LCBWYWx1ZSogc3JjKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHNldChtX2N1cnJlbnRCbG9jaywgZHN0LCBzcmMpOworICAg
IH0KKworICAgIFZhbHVlKiBzZXQoVmFyaWFibGUqIGRzdCwgVmFyaWFibGUqIHNyYykKKyAgICB7
CisgICAgICAgIHJldHVybiBzZXQoZHN0LCBnZXQoc3JjKSk7CisgICAgfQorCiAgICAgRnVuY3Rp
b25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OwogICAgIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CiAgICAgY29uc3QgTWVtb3J5TW9kZSBtX21vZGUg
eyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwpAQCAtMzQ4LDEwICs1NDEsMTIgQEAgcHJp
dmF0ZToKICAgICBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRyIH07CiAKICAgICBQcm9j
ZWR1cmUmIG1fcHJvYzsKLSAgICBCYXNpY0Jsb2NrKiBtX3Jvb3RCbG9jayB7IG51bGxwdHIgfTsK
KyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IG1fcm9vdEJsb2NrczsKKyAgICBCYXNpY0Jsb2NrKiBt
X3RvcExldmVsQmxvY2s7CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRy
IH07CiAgICAgVmVjdG9yPHVpbnQzMl90PiBtX291dGVyTG9vcHM7CiAgICAgVmVjdG9yPFZhcmlh
YmxlKj4gbV9sb2NhbHM7CisgICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9zdGFjazsKICAgICBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8v
IExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNz
IGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCiAgICAgdW5zaWduZWQmIG1fb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZTsKICAgICBIYXNoTWFwPFZhbHVlS2V5LCBWYWx1ZSo+IG1fY29uc3RhbnRQ
b29sOwpAQCAtMzY1LDYgKzU2MCw3IEBAIHByaXZhdGU6CiAKICAgICBWYWx1ZSogbV9pbnN0YW5j
ZVZhbHVlIHsgbnVsbHB0ciB9OyAvLyBBbHdheXMgdXNlIHRoZSBhY2Nlc3NvciBiZWxvdyB0byBl
bnN1cmUgdGhlIGluc3RhbmNlIHZhbHVlIGlzIG1hdGVyaWFsaXplZCB3aGVuIHVzZWQuCiAgICAg
Ym9vbCBtX3VzZXNJbnN0YW5jZVZhbHVlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzQ2F0Y2gg
eyBmYWxzZSB9OwogICAgIFZhbHVlKiBpbnN0YW5jZVZhbHVlKCkKICAgICB7CiAgICAgICAgIG1f
dXNlc0luc3RhbmNlVmFsdWUgPSB0cnVlOwpAQCAtMzczLDEwICs1NjksMjkgQEAgcHJpdmF0ZToK
IAogICAgIHVpbnQzMl90IG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzIHsgMCB9OwogICAgIHVuc2ln
bmVkIG1fbnVtSW1wb3J0RnVuY3Rpb25zOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV90cnlE
ZXB0aCB7IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX2NhbGxTaXRlSW5kZXggeyAwIH07
CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9zdGFja1NpemUgeyAwIH07CisgICAgQ2hlY2tlZDx1
bnNpZ25lZD4gbV9tYXhTdGFja1NpemUgeyAwIH07CisgICAgU3RhY2tNYXBzIG1fc3RhY2ttYXBz
OworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwog
fTsKIAordm9pZCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpnZW5lcmF0ZShDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCBCM0lS
R2VuZXJhdG9yKiBnZW5lcmF0b3IpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FsbFNpdGVJbmRleCA9
PSBzX2ludmFsaWRDYWxsU2l0ZUluZGV4KQorICAgICAgICByZXR1cm47CisKKyAgICBTdGFja01h
cCB2YWx1ZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vZmZzZXQ7IGkgPCBwYXJhbXMudmFs
dWUoKS0+bnVtQ2hpbGRyZW4oKTsgKytpKQorICAgICAgICB2YWx1ZXMuY29uc3RydWN0QW5kQXBw
ZW5kKHBhcmFtc1tpXSwgcGFyYW1zLnZhbHVlKCktPmNoaWxkKGkpLT50eXBlKCkpOworICAgIGdl
bmVyYXRvci0+YWRkU3RhY2tNYXAobV9jYWxsU2l0ZUluZGV4LCBXVEZNb3ZlKHZhbHVlcykpOwor
ICAgIGppdC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fY2FsbFNpdGVJbmRl
eCksIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSk7Cit9CisKIC8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJseSBoYXZl
IHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQgMzItYml0
IG9mZnNldHMgaW4gQjMuCi1pbnQzMl90IEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNP
ZmZzZXQoRXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMyX3Qgb2Zmc2V0KQoraW50MzJfdCBCM0lS
R2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KFZhbHVlKiYgcHRyLCB1aW50MzJfdCBv
ZmZzZXQpCiB7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpID4gc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkgewog
ICAgICAgICBwdHIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFk
ZCwgb3JpZ2luKCksIHB0ciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIG9mZnNldCkpOwpAQCAtNDI4LDggKzY0Myw5IEBAIEIzSVJHZW5l
cmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2Nl
ZHVyZSYgcHJvY2VkdXJlCiAgICAgLCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzKG1fcHJvYykK
ICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpKQog
ewotICAgIG1fcm9vdEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0gICAgbV9jdXJyZW50Qmxv
Y2sgPSBtX3Jvb3RCbG9jazsKKyAgICBtX3RvcExldmVsQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2so
KTsKKyAgICBtX3Jvb3RCbG9ja3MuYXBwZW5kKG1fcHJvYy5hZGRCbG9jaygpKTsKKyAgICBtX2N1
cnJlbnRCbG9jayA9IG1fcm9vdEJsb2Nrc1swXTsKIAogICAgIC8vIEZJWE1FIHdlIGRvbid0IHJl
YWxseSBuZWVkIHRvIHBpbiByZWdpc3RlcnMgaGVyZSBpZiB0aGVyZSdzIG5vIG1lbW9yeS4gSXQg
bWFrZXMgd2FzbSAtPiB3YXNtIHRodW5rcyBzaW1wbGVyIGZvciBub3cuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2MjMKICAgICBjb25zdCBQaW5uZWRSZWdpc3Rl
ckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAtNDYxLDYg
KzY3NywyNiBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICB9KTsKICAgICB9CiAK
KyAgICB7CisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGdldEluc3RhbmNlID0gbV90b3BM
ZXZlbEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBwb2ludGVy
VHlwZSgpLCBPcmlnaW4oKSk7CisgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisg
ICAgICAgICAgICBnZXRJbnN0YW5jZS0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNo
UmVnaXN0ZXJzKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBCZWNh
dXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dEluc3RhbmNlIHJlZ2lzdGVy
IGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNh
bGxlciBzaWRlLgorICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIEFy
Z3VtZW50UmVnIHRvIHRoaXMgKGxvZ2ljYWxseSkgaW1tdXRhYmxlIHBpbm5lZCByZWdpc3Rlci4K
KyAgICAgICAgICAgIGdldEluc3RhbmNlLT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IGZhbHNlOwor
ICAgICAgICAgICAgZ2V0SW5zdGFuY2UtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAg
ICAgICAgICAgZ2V0SW5zdGFuY2UtPnJlc3VsdENvbnN0cmFpbnRzID0geyBWYWx1ZVJlcDo6cmVn
KG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUikgfTsKKyAgICAgICAgfQorICAgICAgICBnZXRJbnN0
YW5jZS0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgaWYgKENvbnRleHQ6
OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0
SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGpp
dC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gZ2V0SW5zdGFuY2U7Cisg
ICAgfQorCiAgICAgewogICAgICAgICBhdXRvKiBjYWxsZWVNb3ZlTG9jYXRpb24gPSAmY29tcGls
YXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbjsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpIDwgV2FzbUNhbGxpbmdDb252ZW50
aW9uOjpoZWFkZXJTaXplSW5CeXRlcywgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7
CkBAIC00OTQsMTcgKzczMCwxMCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgIH0KIAog
ICAgIHsKLSAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogc3RhY2tPdmVyZmxvd0NoZWNrID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIHBv
aW50ZXJUeXBlKCksIE9yaWdpbigpKTsKLSAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gc3RhY2tP
dmVyZmxvd0NoZWNrOworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBzdGFja092ZXJmbG93
Q2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1f
cHJvYywgVm9pZCwgT3JpZ2luKCkpOworICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmFwcGVu
ZFNvbWVSZWdpc3RlcihpbnN0YW5jZVZhbHVlKCkpOwogICAgICAgICBzdGFja092ZXJmbG93Q2hl
Y2stPmFwcGVuZFNvbWVSZWdpc3RlcihmcmFtZVBvaW50ZXIoKSk7CiAgICAgICAgIHN0YWNrT3Zl
cmZsb3dDaGVjay0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkp
OwotICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewotICAgICAgICAgICAgLy8g
RklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFu
Y2UgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBp
dCBpbiB0aGUgY2FsbGVyIHNpZGUuCi0gICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZy
b20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVk
IHJlZ2lzdGVyLgotICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLndyaXRl
c1Bpbm5lZCA9IGZhbHNlOwotICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3Rz
LnJlYWRzUGlubmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+cmVz
dWx0Q29uc3RyYWludHMgPSB7IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEluc3RhbmNlR1BS
KSB9OwotICAgICAgICB9CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+bnVtR1BTY3JhdGNo
UmVnaXN0ZXJzID0gMjsKICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBjb25zdCBDaGVja2VkPGludDMyX3Q+IHdhc21GcmFt
ZVNpemUgPSBwYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpOwpAQCAtNTI2LDE5ICs3NTUsMTUgQEAg
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgIGJvb2wgbmVlZFVuZGVyZmxvd0No
ZWNrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoZWNrU2l6ZSkgPiBPcHRpb25zOjpyZXNlcnZl
ZFpvbmVTaXplKCk7CiAgICAgICAgICAgICBib29sIG5lZWRzT3ZlcmZsb3dDaGVjayA9IG1fbWFr
ZXNDYWxscyB8fCB3YXNtRnJhbWVTaXplID49IHN0YXRpY19jYXN0PGludDMyX3Q+KG1pbmltdW1Q
YXJlbnRDaGVja1NpemUpIHx8IG5lZWRVbmRlcmZsb3dDaGVjazsKIAotICAgICAgICAgICAgR1BS
UmVnIGNvbnRleHRJbnN0YW5jZSA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHBhcmFtc1swXS5n
cHIoKSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKLQogICAgICAgICAgICAgLy8gVGhpcyBh
bGxvd3MgbGVhZiBmdW5jdGlvbnMgdG8gbm90IGRvIHN0YWNrIGNoZWNrcyBpZiB0aGVpciBmcmFt
ZSBzaXplIGlzIHdpdGhpbgogICAgICAgICAgICAgLy8gY2VydGFpbiBsaW1pdHMgc2luY2UgdGhl
aXIgY2FsbGVyIHdvdWxkIGhhdmUgYWxyZWFkeSBkb25lIHRoZSBjaGVjay4KICAgICAgICAgICAg
IGlmIChuZWVkc092ZXJmbG93Q2hlY2spIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgR1BS
UmVnIGNvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKICAgICAgICAgICAgICAgICBH
UFJSZWcgZnAgPSBwYXJhbXNbMV0uZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gxID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aDIgPSBwYXJhbXMuZ3BTY3JhdGNoKDEpOwogCi0gICAgICAgICAgICAgICAgaWYgKENvbnRleHQ6
OnVzZUZhc3RUTFMoKSkKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dElu
c3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7Ci0KICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoY29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRTdGFja0xpbWl0KCkpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgZnAsIHNjcmF0Y2gxKTsK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7CkBAIC01
NDgsMTIgKzc3Myw2IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3RhY2tP
dmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIENvbnRl
eHQ6OnVzZUZhc3RUTFMoKSkgewotICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93IGNoZWNr
IGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMgdG8gYmUgY29y
cmVjdC4KLSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBh
bGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVl
ZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21D
b250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgLy8gV2Ugc2FpZCB3ZSdkIHJldHVybiBhIHBvaW50ZXIuIFdlIGRvbid0
IGFjdHVhbGx5IG5lZWQgdG8gYmVjYXVzZSBpdCBpc24ndCB1c2VkLCBidXQgdGhlIHBhdGNocG9p
bnQgY29uc2VydmF0aXZlbHkgc2FpZCBpdCBoYWQgZWZmZWN0cyAocG90ZW50aWFsIHN0YWNrIGNo
ZWNrKSB3aGljaCBwcmV2ZW50IGl0IGZyb20gZ2V0dGluZyByZW1vdmVkLgogICAgICAgICAgICAg
fQogICAgICAgICB9KTsKICAgICB9CkBAIC01NjQsOSArNzgzLDEwIEBAIEIzSVJHZW5lcmF0b3I6
OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYg
cHJvY2VkdXJlCiAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CiB9
CiAKLXZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVz
dG9yZUNhY2hlZFN0YWNrTGltaXQgcmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9y
eUluZm9ybWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBC
YXNpY0Jsb2NrKiBibG9jaykKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5
R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgcmVzdG9yZUNhY2hlZFN0YWNrTGlt
aXQsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0YW5jZSwgUHJv
Y2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywgYm9vbCByZXN0b3JlSW5zdGFuY2UpCiB7
Ci0gICAgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocHJvYywgYmxvY2ssIGluc3RhbmNlKTsK
KyAgICBpZiAocmVzdG9yZUluc3RhbmNlKQorICAgICAgICByZXN0b3JlV2FzbUNvbnRleHRJbnN0
YW5jZShwcm9jLCBibG9jaywgaW5zdGFuY2UpOwogCiAgICAgaWYgKHJlc3RvcmVDYWNoZWRTdGFj
a0xpbWl0ID09IFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMpIHsKICAgICAgICAgLy8gVGhl
IEluc3RhbmNlIGNhY2hlcyB0aGUgc3RhY2sgbGltaXQsIGJ1dCBhbHNvIGtub3dzIHdoZXJlIGl0
cyBjYW5vbmljYWwgbG9jYXRpb24gaXMuCkBAIC02MzQsOSArODU0LDc4IEBAIFZhbHVlKiBCM0lS
R2VuZXJhdG9yOjpmcmFtZVBvaW50ZXIoKQogICAgIHJldHVybiBtX2ZyYW1lUG9pbnRlcjsKIH0K
IAordm9pZCBCM0lSR2VuZXJhdG9yOjppbnNlcnRFbnRyeVN3aXRjaCgpCit7CisgICAgbV9wcm9j
LnNldE51bUVudHJ5cG9pbnRzKG1fcm9vdEJsb2Nrcy5zaXplKCkpOworCisgICAgUmVmPEIzOjpB
aXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hh
cmVkVGFzazxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgIGppdC5lbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsaW5nIHByZWNpc2Ug
YWxsb2NhdGlvbnMgaW4gV2FzbUIzSVJHZW5lcmF0b3IgY2F0Y2ggZW50cnlwb2ludHMgbWlnaHQg
YmUgdW5uZWNlc3NhcnkKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzEyMTMKKyAgICAgICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25D
YXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpy
ZWdUMCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lzZUFsbG9jYXRpb246OmhhbGZB
bGlnbm1lbnQpKTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIE1h
cmtlZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9m
Vk0oKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGpp
dC5qdW1wKCk7CisKKyAgICAgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0Ojpv
ZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgR1BSSW5mbzo6
cmVnVDApOworCisgICAgICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0K
KyAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDMpOworCisgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxlZUZv
cldhc21DYXRjaE9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICBqaXQuc3RvcmVQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hPZmZzZXQoKSkpOwor
ICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QzLCBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpOworCisgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOworCisgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUklu
Zm86OnJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OnJlZ1QzLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mSW5zdGFuY2UoKSks
IEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShH
UFJJbmZvOjpyZWdUMyk7CisKKyAgICAgICAgaml0LnByb2JlKFtdKFByb2JlOjpDb250ZXh0JiBj
b250ZXh0KSB7CisgICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8
Q2FsbEZyYW1lKj4oKTsKKyAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9
IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpOworICAgICAgICAgICAgT3B0aW1pemluZ0pJVENh
bGxlZSogY2FsbGVlID0gYml0d2lzZV9jYXN0PE9wdGltaXppbmdKSVRDYWxsZWUqPihjYWxsRnJh
bWUtPmNhbGxlZSgpLmFzV2FzbUNhbGxlZSgpKTsKKyAgICAgICAgICAgIGNvbnN0IFN0YWNrTWFw
JiBzdGFja21hcCA9IGNhbGxlZS0+c3RhY2ttYXAoY2FsbFNpdGVJbmRleCk7CisgICAgICAgICAg
ICBWTSogdm0gPSBjb250ZXh0LmdwcjxWTSo+KEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
IHVpbnQ2NF90KiBidWZmZXIgPSB2bS0+d2FzbUNvbnRleHQuc2NyYXRjaEJ1ZmZlckZvclNpemUo
c3RhY2ttYXAuc2l6ZSgpICogOCk7CisgICAgICAgICAgICBsb2FkVmFsdWVzSW50b0J1ZmZlcihj
b250ZXh0LCBzdGFja21hcCwgYnVmZmVyKTsKKworICAgICAgICAgICAgY29udGV4dC5ncHIoR1BS
SW5mbzo6YXJndW1lbnRHUFIwKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJ1ZmZlcik7Cisg
ICAgICAgIH0sIG51bGxwdHIpOworCisgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgfSk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9yb290QmxvY2tzLnNpemUoKTsgKytpKQorICAgICAg
ICBtX3Byb2MuY29kZSgpLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludChpLCBjYXRjaFByb2xvZ3Vl
R2VuZXJhdG9yLmNvcHlSZWYoKSk7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fdG9wTGV2ZWxC
bG9jazsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVudHJ5
U3dpdGNoLCBPcmlnaW4oKSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcm9vdEJs
b2NrcykKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZFN1Y2Nlc3NvcihGcmVxdWVudGVk
QmxvY2soYmxvY2spKTsKK30KKwogdm9pZCBCM0lSR2VuZXJhdG9yOjppbnNlcnRDb25zdGFudHMo
KQogewogICAgIG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXMuZXhlY3V0ZShtX3Byb2MuYXQoMCkp
OworCisgICAgaWYgKCFtX2hhc0NhdGNoKQorICAgICAgICByZXR1cm47CisKKyAgICBWYWx1ZSog
anNJbnN0YW5jZSA9IG1fcHJvYy5hZGQ8TWVtb3J5VmFsdWU+KExvYWQsIHBvaW50ZXJUeXBlKCks
IE9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpv
ZmZzZXRPZk93bmVyKCkpKTsKKyAgICBWYWx1ZSogc3RvcmUgPSBtX3Byb2MuYWRkPEIzOjpNZW1v
cnlWYWx1ZT4oQjM6OlN0b3JlLCBPcmlnaW4oKSwganNJbnN0YW5jZSwgZnJhbWVQb2ludGVyKCks
IHNhZmVDYXN0PGludDMyX3Q+KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihS
ZWdpc3RlcikpKTsKKworICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9yb290QmxvY2tzWzBdOwor
ICAgIG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXMuaW5zZXJ0VmFsdWUoMCwganNJbnN0YW5jZSk7
CisgICAgbV9jb25zdGFudEluc2VydGlvblZhbHVlcy5pbnNlcnRWYWx1ZSgwLCBzdG9yZSk7Cisg
ICAgbV9jb25zdGFudEluc2VydGlvblZhbHVlcy5leGVjdXRlKGJsb2NrKTsKIH0KIAogQjM6OlR5
cGUgQjNJUkdlbmVyYXRvcjo6dG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlw
ZSkKQEAgLTcwNSwyMCArOTk0LDIxIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRz
KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiAKIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCB2YWx1
ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBvcmlnaW4oKSwg
Z2V0KHZhbHVlKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJsZUlu
ZGV4LCBFeHByZXNzaW9uVHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KLSAgICByZXN1bHQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6
OkV4dGVybnJlZiksIG9yaWdpbigpLAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBlczo6RXh0
ZXJucmVmKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uR2V0V2FzbVRhYmxlRWxlbWVudCkpLAotICAgICAgICBpbnN0YW5jZVZhbHVl
KCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCB0YWJsZUluZGV4KSwgaW5kZXgpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJs
ZUluZGV4KSwgZ2V0KGluZGV4KSk7CiAKICAgICB7CisgICAgICAgIHJlc3VsdCA9IHB1c2gocmVz
dWx0VmFsdWUpOwogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4o
KSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAg
ICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4
Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7
CkBAIC03MzMsNyArMTAyMyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVTZXQodW5z
aWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4cHJlCiAgICAgLy8gRklY
TUU6IEVtaXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTg1MDY+LgogICAgIGF1dG8gc2hvdWxkVGhyb3cgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgQjM6OkludDMyLCBvcmlnaW4oKSwKICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25TZXRXYXNtVGFibGVFbGVt
ZW50KSksCi0gICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpLCBpbmRleCwgdmFs
dWUpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZ2V0KGluZGV4KSwg
Z2V0KHZhbHVlKSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwK
QEAgLTc1MSwyNiArMTA0MSwyNiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJlZkZ1bmModWlu
dDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYQogewogICAgIC8v
IEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk4NTA2Pi4KIAotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBCMzo6SW50NjQsIG9yaWdpbigpLAorICAgIHJlc3VsdCA9
IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEIzOjpJ
bnQ2NCwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uV2FzbVJlZkZ1bmMpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBhZGRDb25z
dGFudChUeXBlczo6STMyLCBpbmRleCkpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIGNvbnN0
YW50KHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBpbmRleCkpKTsKIAogICAgIHJldHVybiB7IH07CiB9
CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVJbml0KHVuc2lnbmVkIGVsZW1lbnRJbmRl
eCwgdW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgZHN0T2Zmc2V0LCBFeHByZXNz
aW9uVHlwZSBzcmNPZmZzZXQsIEV4cHJlc3Npb25UeXBlIGxlbmd0aCkgLT4gUGFydGlhbFJlc3Vs
dAogewotICAgIGF1dG8gcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZh
bHVlPigKKyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KAogICAgICAgICBtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmln
aW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25X
YXNtVGFibGVJbml0KSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGVsZW1l
bnRJbmRleCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwKLSAgICAgICAgZHN0T2Zmc2V0LCBzcmNP
ZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGdldChkc3RPZmZzZXQpLCBnZXQoc3JjT2Zmc2V0KSwg
Z2V0KGxlbmd0aCkpOwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCks
Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVx
dWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAg
dGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNU
YWJsZUFjY2Vzcyk7CkBAIC03OTQsMzEgKzEwODQsMzEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRFbGVtRHJvcCh1bnNpZ25lZCBlbGVtZW50SW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQKIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkVGFibGVTaXplKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICAvLyBGSVhNRTogRW1pdCB0
aGlzIGlubGluZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODUw
Nj4uCi0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPiht
X3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKKyAgICByZXN1bHQgPSBwdXNo
KG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShU
eXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uR2V0V2FzbVRhYmxlU2l6ZSkpLAotICAgICAgICBpbnN0YW5jZVZhbHVl
KCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCB0YWJsZUluZGV4KSk7CisgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgp
KSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxl
R3Jvdyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNzaW9u
VHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9j
LCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCisgICAgcmVzdWx0ID0gcHVzaChtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6
OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbldhc21UYWJsZUdyb3cpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFi
bGVJbmRleCksIGZpbGwsIGRlbHRhKTsKKyAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJ
bmRleCksIGdldChmaWxsKSwgZ2V0KGRlbHRhKSkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAog
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUZpbGwodW5zaWduZWQgdGFibGVJbmRleCwgRXhw
cmVzc2lvblR5cGUgb2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBj
b3VudCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGF1dG8gcmVzdWx0ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBv
cmlnaW4oKSwKKyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UYWJs
ZUZpbGwpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJbmRleCksIG9mZnNldCwg
ZmlsbCwgY291bnQpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZ2V0
KG9mZnNldCksIGdldChmaWxsKSwgZ2V0KGNvdW50KSk7CiAKICAgICB7CiAgICAgICAgIENoZWNr
VmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3By
b2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3Jp
Z2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRp
b25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTgzMCwxNyArMTEyMCwxNyBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHBy
ZXNzaW9uVHlwZSBvZmZzZXQsIEV4cAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlQ29w
eSh1bnNpZ25lZCBkc3RUYWJsZUluZGV4LCB1bnNpZ25lZCBzcmNUYWJsZUluZGV4LCBFeHByZXNz
aW9uVHlwZSBkc3RPZmZzZXQsIEV4cHJlc3Npb25UeXBlIHNyY09mZnNldCwgRXhwcmVzc2lvblR5
cGUgbGVuZ3RoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIG1fcHJvYywg
dG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxP
cGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UYWJsZUNvcHkpKSwKICAgICAgICAgaW5zdGFu
Y2VWYWx1ZSgpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgZHN0VGFibGVJbmRleCksCiAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzcmNUYWJsZUlu
ZGV4KSwKLSAgICAgICAgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGdl
dChkc3RPZmZzZXQpLCBnZXQoc3JjT2Zmc2V0KSwgZ2V0KGxlbmd0aCkpOwogCiAgICAgewogICAg
ICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tW
YWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkp
KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
RXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGpp
dCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC04NTMsNyArMTE0
Myw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVDb3B5KHVuc2lnbmVkIGRzdFRhYmxl
SW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmdldExv
Y2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CiAgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7Ci0gICAgcmVzdWx0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9yaWdp
bigpLCBtX2xvY2Fsc1tpbmRleF0pOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9yaWdpbigpLCBtX2xv
Y2Fsc1tpbmRleF0pKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC04NjcsNyArMTE1Nyw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxs
KFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3Vs
dExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6ZW1p
dEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIFZhbHVlKiBjYWxsZWVDb2RlLCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
UmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIC8vIERvIGEgY29u
dGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgogICAgIHsKQEAgLTkxNiw3ICsxMjA2LDcgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgRXhw
cmVzc2lvblR5cGUgY2FsbGUKICAgICB9CiAKICAgICBCMzo6VHlwZSByZXR1cm5UeXBlID0gdG9C
M1Jlc3VsdFR5cGUoJnNpZ25hdHVyZSk7Ci0gICAgRXhwcmVzc2lvblR5cGUgY2FsbFJlc3VsdCA9
IGNyZWF0ZUNhbGxQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgc2lnbmF0dXJl
LCBhcmdzLAorICAgIFZhbHVlKiBjYWxsUmVzdWx0ID0gY3JlYXRlQ2FsbFBhdGNocG9pbnQobV9j
dXJyZW50QmxvY2ssIG9yaWdpbigpLCBzaWduYXR1cmUsIGFyZ3MsCiAgICAgICAgIHNjb3BlZExh
bWJkYVJlZjx2b2lkKFBhdGNocG9pbnRWYWx1ZSopPihbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0
Y2hwb2ludCkgLT4gdm9pZCB7CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRl
c1Bpbm5lZCA9IHRydWU7CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlu
bmVkID0gdHJ1ZTsKQEAgLTkyOCw4ICsxMjE4LDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6ZW1p
dEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxl
CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86
OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwogCiAgICAgICAgICAg
ICBwYXRjaHBvaW50LT5hcHBlbmQoY2FsbGVlQ29kZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7
CisgICAgICAgICAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQ
YXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhtX2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCk7CiAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwor
ICAgICAgICAgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAg
ICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3BhcmFtcy5wcm9jKCkucmVzdWx0Q291bnQocmV0
dXJuVHlwZSldLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0pKTsKQEAgLTk0MSwxMSArMTIzMywxMSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVtaXRJ
bmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZQog
ICAgIGNhc2UgQjM6OlR1cGxlOiB7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxCMzo6VHlwZT4mIHR1
cGxlID0gbV9wcm9jLnR1cGxlRm9yVHlwZShyZXR1cm5UeXBlKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgICAg
ICByZXN1bHRzLmFwcGVuZChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgdHVwbGVbaV0sIGNhbGxSZXN1bHQsIGkpKTsKKyAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxFeHRyYWN0VmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHR1cGxlW2ldLCBjYWxsUmVzdWx0LCBpKSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDogewotICAgICAgICByZXN1bHRzLmFwcGVuZChj
YWxsUmVzdWx0KTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaChjYWxsUmVzdWx0KSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CkBAIC05NTgsOSArMTI1MCw5IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIEV4cHJl
c3Npb25UeXBlIGNhbGxlCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHBy
ZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAogewotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4o
bV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAogICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdyb3dNZW1vcnkpKSwK
LSAgICAgICAgZnJhbWVQb2ludGVyKCksIGluc3RhbmNlVmFsdWUoKSwgZGVsdGEpOworICAgICAg
ICBmcmFtZVBvaW50ZXIoKSwgaW5zdGFuY2VWYWx1ZSgpLCBnZXQoZGVsdGEpKSk7CiAKICAgICBy
ZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6Tm8s
IG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7
CiAKQEAgLTk4MCwyMiArMTI3MiwyMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRN
ZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogICAgIFZhbHVl
KiBudW1QYWdlcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWlNo
ciwgb3JpZ2luKCksCiAgICAgICAgIHNpemUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzaGlmdFZhbHVlKSk7CiAKLSAgICByZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4o
KSwgbnVtUGFnZXMpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIG51bVBhZ2VzKSk7CiAKICAgICByZXR1
cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUZpbGwoRXhwcmVzc2lv
blR5cGUgZHN0QWRkcmVzcywgRXhwcmVzc2lvblR5cGUgdGFyZ2V0VmFsdWUsIEV4cHJlc3Npb25U
eXBlIGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIG1fcHJvYywg
dG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxP
cGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21NZW1vcnlGaWxsKSksCiAgICAgICAgIGluc3Rh
bmNlVmFsdWUoKSwKLSAgICAgICAgZHN0QWRkcmVzcywgdGFyZ2V0VmFsdWUsIGNvdW50KTsKKyAg
ICAgICAgZ2V0KGRzdEFkZHJlc3MpLCBnZXQodGFyZ2V0VmFsdWUpLCBnZXQoY291bnQpKTsKIAog
ICAgIHsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJl
c3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOwogCiAgICAgICAg
IGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRp
b25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVGFibGVBY2Nlc3MpOwpAQCAt
MTAwNywxNiArMTI5OSwxNiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUZpbGwoRXhw
cmVzc2lvblR5cGUgZHN0QWRkcmVzcywgRXhwcmVzc2lvblR5cGUgdGFyZwogCiBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE1lbW9yeUluaXQodW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCwgRXhwcmVz
c2lvblR5cGUgZHN0QWRkcmVzcywgRXhwcmVzc2lvblR5cGUgc3JjQWRkcmVzcywgRXhwcmVzc2lv
blR5cGUgbGVuZ3RoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVlKiByZXN1bHRWYWx1
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIG1fcHJv
YywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlv
bjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21NZW1vcnlJbml0KSksCiAgICAgICAgIGlu
c3RhbmNlVmFsdWUoKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGRhdGFTZWdtZW50SW5kZXgpLAotICAgICAgICBkc3RB
ZGRyZXNzLCBzcmNBZGRyZXNzLCBsZW5ndGgpOworICAgICAgICBnZXQoZHN0QWRkcmVzcyksIGdl
dChzcmNBZGRyZXNzKSwgZ2V0KGxlbmd0aCkpOwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVl
KiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBD
aGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigp
LCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
ewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlw
ZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC0xMDI4LDE1ICsxMzIwLDE1IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5SW5pdCh1bnNpZ25lZCBkYXRhU2VnbWVudEluZGV4LCBF
eHByZXNzaW9uVHlwZSBkc3RBCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5Q29weShF
eHByZXNzaW9uVHlwZSBkc3RBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSBzcmNBZGRyZXNzLCBFeHBy
ZXNzaW9uVHlwZSBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGF1dG8gcmVzdWx0ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICBWYWx1ZSogcmVzdWx0
VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICBt
X3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVu
Y3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSkpLAogICAgICAg
ICBpbnN0YW5jZVZhbHVlKCksCi0gICAgICAgIGRzdEFkZHJlc3MsIHNyY0FkZHJlc3MsIGNvdW50
KTsKKyAgICAgICAgZ2V0KGRzdEFkZHJlc3MpLCBnZXQoc3JjQWRkcmVzcyksIGdldChjb3VudCkp
OwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4o
KSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAg
ICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4
Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7
CkBAIC0xMDYwLDcgKzEzNTIsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZERhdGFEcm9wKHVu
c2lnbmVkIGRhdGFTZWdtZW50SW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQKIGF1dG8gQjNJUkdlbmVy
YXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7Ci0gICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIG9yaWdp
bigpLCBtX2xvY2Fsc1tpbmRleF0sIHZhbHVlKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgb3JpZ2luKCksIG1fbG9jYWxzW2lu
ZGV4XSwgZ2V0KHZhbHVlKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTA3MCwxMiArMTM2
MiwxMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbAogICAgIFZhbHVlKiBnbG9iYWxzQXJyYXkg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+
KEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSkpOwogICAgIHN3aXRjaCAoZ2xvYmFsLmJpbmRp
bmdNb2RlKSB7CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6
OkVtYmVkZGVkSW5JbnN0YW5jZToKLSAgICAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlwZShnbG9iYWwudHlwZSks
IG9yaWdpbigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9m
KFJlZ2lzdGVyKSkpOworICAgICAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUoZ2xvYmFsLnR5cGUpLCBv
cmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihS
ZWdpc3RlcikpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3Jt
YXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTogewogICAgICAgICBBU1NFUlQoZ2xvYmFsLm11
dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUp
OwogICAgICAgICBWYWx1ZSogcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgQjM6OkludDY0LCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5
LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAg
cmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCB0b0IzVHlwZShnbG9iYWwudHlwZSksIG9yaWdpbigpLCBwb2ludGVyKTsKKyAgICAgICAg
cmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIHRvQjNUeXBlKGdsb2JhbC50eXBlKSwgb3JpZ2luKCksIHBvaW50ZXIpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KQEAgLTEwODksMTQgKzEzODEsMTQgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZh
bHVlKSAtPiBQYXJ0aWFsUmUKICAgICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zm
c2V0T2ZHbG9iYWxzKCkpKTsKICAgICBzd2l0Y2ggKGdsb2JhbC5iaW5kaW5nTW9kZSkgewogICAg
IGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpFbWJlZGRlZEluSW5z
dGFuY2U6Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgU3RvcmUsIG9yaWdpbigpLCB2YWx1ZSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQz
Ml90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIGdldCh2YWx1
ZSksIGdsb2JhbHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0
ZXIpKSk7CiAgICAgICAgIGlmIChpc1JlZlR5cGUoZ2xvYmFsLnR5cGUpKQogICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllckZvckpTV3JhcHBlcigpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6IHsKICAgICAg
ICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpN
dXRhYmlsaXR5OjpNdXRhYmxlKTsKICAgICAgICAgVmFsdWUqIHBvaW50ZXIgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEIzOjpJbnQ2NCwgb3Jp
Z2luKCksIGdsb2JhbHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVn
aXN0ZXIpKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCB2YWx1ZSwgcG9pbnRlcik7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigp
LCBnZXQodmFsdWUpLCBwb2ludGVyKTsKICAgICAgICAgLy8gV2UgZW1pdCBhIHdyaXRlLWJhcnJp
ZXIgb250byBKU1dlYkFzc2VtYmx5R2xvYmFsLCBub3QgSlNXZWJBc3NlbWJseUluc3RhbmNlLgog
ICAgICAgICBpZiAoaXNSZWZUeXBlKGdsb2JhbC50eXBlKSkgewogICAgICAgICAgICAgVmFsdWUq
IGluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2Fz
dDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSk7CkBAIC0xMTk5LDcgKzE0OTEs
NyBAQCBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0V3JpdGVCYXJyaWVyRm9ySlNXcmFw
cGVyKCkKICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKIH0KIAotaW5saW5lIFZh
bHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wZXJhdGlvbikK
K2lubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIo
VmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9u
KQogewogICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIpOwogCkBAIC0xMjY4LDcgKzE1NjAsNyBA
QCBpbmxpbmUgQjM6OktpbmQgQjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZChCMzo6T3Bjb2RlIG1l
bW9yeU9wKQogICAgIHJldHVybiBtZW1vcnlPcDsKIH0KIAotaW5saW5lIFZhbHVlKiBCM0lSR2Vu
ZXJhdG9yOjplbWl0TG9hZE9wKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIs
IHVpbnQzMl90IHVvZmZzZXQpCitpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2Fk
T3AoTG9hZE9wVHlwZSBvcCwgVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90IHVvZmZzZXQpCiB7CiAg
ICAgaW50MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIHVvZmZz
ZXQpOwogCkBAIC0xMzM4LDggKzE2MzAsOSBAQCBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6
OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdQogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6
bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdl
bmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyVmFyLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKKyAgICBWYWx1ZSogcG9pbnRlciA9IGdldChwb2ludGVyVmFyKTsKICAgICBBU1NFUlQocG9p
bnRlci0+dHlwZSgpID09IEludDMyKTsKIAogICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8
dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSkpKSB7CkBAIC0xMzU2LDcgKzE2NDks
NyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmCiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMy
TG9hZDoKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOgogICAgICAgICBjYXNl
IExvYWRPcFR5cGU6OkkzMkxvYWQ4VToKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KElu
dDMyLCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50MzIsIDApKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzoK
ICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CkBAIC0xMzY1LDE4ICsxNjU4LDE4
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRM
b2FkMzJTOgogICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CiAgICAgICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDE2VToKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KElu
dDY0LCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50NjQsIDApKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6Ci0g
ICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChGbG9hdCwgMCk7CisgICAgICAgICAgICByZXN1
bHQgPSBwdXNoKGNvbnN0YW50KEZsb2F0LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3Rh
bnQoRG91YmxlLCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoRG91Ymxl
LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgfSBlbHNlCi0gICAg
ICAgIHJlc3VsdCA9IGVtaXRMb2FkT3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBv
aW50ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7CisgICAgICAgIHJlc3Vs
dCA9IHB1c2goZW1pdExvYWRPcChvcCwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRl
ciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0KSk7CiAKICAgICByZXR1cm4geyB9
OwogfQpAQCAtMTQwMiw3ICsxNjk1LDcgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3Ao
U3RvcmVPcFR5cGUgb3ApCiB9CiAKIAotaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0
b3JlT3AoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25U
eXBlIHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQoraW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6
ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSogdmFsdWUs
IHVpbnQzMl90IHVvZmZzZXQpCiB7CiAgICAgaW50MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQ
bHVzT2Zmc2V0KHBvaW50ZXIsIHVvZmZzZXQpOwogCkBAIC0xNDM3LDggKzE3MzAsMTAgQEAgaW5s
aW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIEV4cHJl
c3Npb25UeXBlIHBvaW50ZXIsIEUKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQ
YXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyVmFyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZVZhciwgdWludDMy
X3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIHBvaW50ZXIgPSBnZXQo
cG9pbnRlclZhcik7CisgICAgVmFsdWUqIHZhbHVlID0gZ2V0KHZhbHVlVmFyKTsKICAgICBBU1NF
UlQocG9pbnRlci0+dHlwZSgpID09IEludDMyKTsKIAogICAgIGlmIChVTkxJS0VMWShzdW1PdmVy
Zmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpKSkgewpAQCAtMTQ2NCw5
ICsxNzU5LDkgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNzKEV4
dEF0b21pY09wVHlwZSBvcCkKICAgICByZXR1cm4gYnl0ZXNGb3JXaWR0aChhY2Nlc3NXaWR0aChv
cCkpOwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OnNhbml0aXplQXRvbWljUmVz
dWx0KEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3Npb25UeXBlIHJl
c3VsdCkKK2lubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6c2FuaXRpemVBdG9taWNSZXN1bHQo
RXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgVmFsdWUqIHJlc3VsdCkKIHsKLSAg
ICBhdXRvIHNhbml0aXplMzIgPSBbJl0oRXhwcmVzc2lvblR5cGUgcmVzdWx0KSB7CisgICAgYXV0
byBzYW5pdGl6ZTMyID0gWyZdKFZhbHVlKiByZXN1bHQpIHsKICAgICAgICAgc3dpdGNoIChhY2Nl
c3NXaWR0aChvcCkpIHsKICAgICAgICAgY2FzZSBCMzo6V2lkdGg4OgogICAgICAgICAgICAgcmV0
dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmln
aW4oKSwgcmVzdWx0LCBjb25zdGFudChJbnQzMiwgMHhmZikpOwpAQCAtMTQ5MSw3ICsxNzg2LDcg
QEAgaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpzYW5pdGl6ZUF0b21pY1Jlc3VsdChFeHRB
dG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWUKICAgICB9CiB9CiAKLVZhbHVlKiBCM0lSR2VuZXJh
dG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKEV4dEF0b21pY09wVHlwZSBv
cCwgRXhwcmVzc2lvblR5cGUgcHRyLCB1aW50MzJfdCBvZmZzZXQpCitWYWx1ZSogQjNJUkdlbmVy
YXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhFeHRBdG9taWNPcFR5cGUg
b3AsIFZhbHVlKiBwdHIsIHVpbnQzMl90IG9mZnNldCkKIHsKICAgICBhdXRvIHBvaW50ZXIgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIHB0
ciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIG9mZnNldCkpOwogICAgIGlmIChhY2Nlc3NXaWR0aChvcCkgIT0gQjM6OldpZHRoOCkgewpA
QCAtMTUwNCwxMSArMTc5OSwxMSBAQCBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVy
UGx1c09mZnNldEZvckF0b21pY09wcyhFeHRBdG9taWNPcFR5cGUgb3AsIEV4cAogICAgIHJldHVy
biBwb2ludGVyOwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNM
b2FkT3AoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5cGUg
cG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK2lubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6
ZW1pdEF0b21pY0xvYWRPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBWYWx1
ZSogcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBwb2ludGVyID0gZml4dXBQb2lu
dGVyUGx1c09mZnNldEZvckF0b21pY09wcyhvcCwgcG9pbnRlciwgdW9mZnNldCk7CiAKLSAgICBF
eHByZXNzaW9uVHlwZSB2YWx1ZSA9IG51bGxwdHI7CisgICAgVmFsdWUqIHZhbHVlID0gbnVsbHB0
cjsKICAgICBzd2l0Y2ggKGFjY2Vzc1dpZHRoKG9wKSkgewogICAgIGNhc2UgQjM6OldpZHRoODoK
ICAgICBjYXNlIEIzOjpXaWR0aDE2OgpAQCAtMTUzNywyMiArMTgzMiwyMiBAQCBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmF0b21pY0xvYWQoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwg
RXhwcmVzc2lvblR5cAogCiAgICAgICAgIHN3aXRjaCAodmFsdWVUeXBlLmtpbmQpIHsKICAgICAg
ICAgY2FzZSBUeXBlS2luZDo6STMyOgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50
MzIsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQzMiwgMCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6Okk2NDoKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDY0LCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1
c2goY29uc3RhbnQoSW50NjQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGVtaXRB
dG9taWNMb2FkT3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9p
bnRlciwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCBvZmZzZXQpOwor
ICAgICAgICByZXN1bHQgPSBwdXNoKGVtaXRBdG9taWNMb2FkT3Aob3AsIHZhbHVlVHlwZSwgZW1p
dENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBvZmZzZXQsIHNpemVPZkF0b21p
Y09wTWVtb3J5QWNjZXNzKG9wKSksIG9mZnNldCkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAot
aW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY1N0b3JlT3AoRXh0QXRvbWljT3BU
eXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lv
blR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCitpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9y
OjplbWl0QXRvbWljU3RvcmVPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBW
YWx1ZSogcG9pbnRlciwgVmFsdWUqIHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQogewogICAgIHBv
aW50ZXIgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKG9wLCBwb2ludGVyLCB1
b2Zmc2V0KTsKIApAQCAtMTU3MywxMiArMTg2OCwxMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmF0
b21pY1N0b3JlKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3Npb25U
eQogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlw
ZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOwogICAgICAgICB9KTsKICAgICB9IGVsc2UKLSAg
ICAgICAgZW1pdEF0b21pY1N0b3JlT3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFy
ZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkp
LCB2YWx1ZSwgb2Zmc2V0KTsKKyAgICAgICAgZW1pdEF0b21pY1N0b3JlT3Aob3AsIHZhbHVlVHlw
ZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBvZmZzZXQsIHNpemVP
ZkF0b21pY09wTWVtb3J5QWNjZXNzKG9wKSksIGdldCh2YWx1ZSksIG9mZnNldCk7CiAKICAgICBy
ZXR1cm4geyB9OwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNC
aW5hcnlSTVdPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKK2lu
bGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY0JpbmFyeVJNV09wKEV4dEF0b21p
Y09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSogdmFsdWUs
IHVpbnQzMl90IHVvZmZzZXQpCiB7CiAgICAgcG9pbnRlciA9IGZpeHVwUG9pbnRlclBsdXNPZmZz
ZXRGb3JBdG9taWNPcHMob3AsIHBvaW50ZXIsIHVvZmZzZXQpOwogCkBAIC0xNjYzLDIyICsxOTU4
LDIyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljQmluYXJ5Uk1XKEV4dEF0b21pY09wVHlw
ZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3NpCiAKICAgICAgICAgc3dpdGNoICh2YWx1ZVR5
cGUua2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6Ci0gICAgICAgICAgICByZXN1
bHQgPSBjb25zdGFudChJbnQzMiwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0
YW50KEludDMyLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBlS2lu
ZDo6STY0OgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50NjQsIDApOworICAgICAg
ICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQ2NCwgMCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAg
ICAgcmVzdWx0ID0gZW1pdEF0b21pY0JpbmFyeVJNV09wKG9wLCB2YWx1ZVR5cGUsIGVtaXRDaGVj
a0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlB
Y2Nlc3Mob3ApKSwgdmFsdWUsIG9mZnNldCk7CisgICAgICAgIHJlc3VsdCA9IHB1c2goZW1pdEF0
b21pY0JpbmFyeVJNV09wKG9wLCB2YWx1ZVR5cGUsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVy
KGdldChwb2ludGVyKSwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCBn
ZXQodmFsdWUpLCBvZmZzZXQpKTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKLVZhbHVlKiBCM0lS
R2VuZXJhdG9yOjplbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0b21pY09wVHlwZSBvcCwg
VHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIGV4
cGVjdGVkLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKK1ZhbHVlKiBC
M0lSR2VuZXJhdG9yOjplbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0b21pY09wVHlwZSBv
cCwgVHlwZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSogZXhwZWN0ZWQsIFZhbHVl
KiB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBwb2ludGVyID0gZml4dXBQb2ludGVy
UGx1c09mZnNldEZvckF0b21pY09wcyhvcCwgcG9pbnRlciwgdW9mZnNldCk7CiAKQEAgLTE3ODgs
MzYgKzIwODMsNDEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWNDb21wYXJlRXhjaGFuZ2Uo
RXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXgKIAogICAgICAgICBzd2l0Y2gg
KHZhbHVlVHlwZS5raW5kKSB7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkkzMjoKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDMyLCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1
c2goY29uc3RhbnQoSW50MzIsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFR5cGVLaW5kOjpJNjQ6Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChJbnQ2NCwgMCk7
CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50KEludDY0LCAwKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0gZWxz
ZQotICAgICAgICByZXN1bHQgPSBlbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKG9wLCB2YWx1ZVR5
cGUsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mQXRv
bWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgZXhwZWN0ZWQsIHZhbHVlLCBvZmZzZXQpOworICAgICAg
ICByZXN1bHQgPSBwdXNoKGVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2Uob3AsIHZhbHVlVHlwZSwg
ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBvZmZzZXQsIHNpemVPZkF0
b21pY09wTWVtb3J5QWNjZXNzKG9wKSksIGdldChleHBlY3RlZCksIGdldCh2YWx1ZSksIG9mZnNl
dCkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWNX
YWl0KEV4dEF0b21pY09wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lv
blR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHRpbWVvdXQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9y
OjphdG9taWNXYWl0KEV4dEF0b21pY09wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlclZh
ciwgRXhwcmVzc2lvblR5cGUgdmFsdWVWYXIsIEV4cHJlc3Npb25UeXBlIHRpbWVvdXRWYXIsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAog
eworICAgIFZhbHVlKiBwb2ludGVyID0gZ2V0KHBvaW50ZXJWYXIpOworICAgIFZhbHVlKiB2YWx1
ZSA9IGdldCh2YWx1ZVZhcik7CisgICAgVmFsdWUqIHRpbWVvdXQgPSBnZXQodGltZW91dFZhcik7
CisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbnVsbHB0cjsKICAgICBpZiAob3AgPT0gRXh0QXRv
bWljT3BUeXBlOjpNZW1vcnlBdG9taWNXYWl0MzIpIHsKLSAgICAgICAgcmVzdWx0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwK
KyAgICAgICAgcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFs
dWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NZW1vcnlBdG9taWNXYWl0MzIpKSwKICAgICAgICAg
ICAgIGluc3RhbmNlVmFsdWUoKSwgcG9pbnRlciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG9mZnNldCksIHZhbHVlLCB0aW1lb3V0KTsK
ICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAorICAgICAgICByZXN1bHRWYWx1
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwg
b3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRy
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbk1lbW9yeUF0b21pY1dhaXQ2NCkpLAogICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgp
LCBwb2ludGVyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgb2Zmc2V0KSwgdmFsdWUsIHRpbWVvdXQpOwogICAgIH0KIAogICAgIHsKKyAg
ICAgICAgcmVzdWx0ID0gcHVzaChyZXN1bHRWYWx1ZSk7CiAgICAgICAgIENoZWNrVmFsdWUqIGNo
ZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNr
LCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2lu
KCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
KSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25U
eXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CkBAIC0xODI5LDEzICsyMTI5LDEzIEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljV2FpdChFeHRBdG9taWNPcFR5cGUgb3AsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljTm90aWZ5
KEV4dEF0b21pY09wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUg
Y291bnQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlh
bFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxW
YWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmln
aW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25N
ZW1vcnlBdG9taWNOb3RpZnkpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBwb2ludGVyLCBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
b2Zmc2V0KSwgY291bnQpOwotCisgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgZ2V0KHBvaW50ZXIp
LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgb2Zmc2V0KSwgZ2V0KGNvdW50KSk7CiAgICAgeworICAgICAgICByZXN1bHQgPSBwdXNoKHJl
c3VsdFZhbHVlKTsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3Jp
Z2luKCksIHJlc3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkp
OwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMt
PmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5
QWNjZXNzKTsKQEAgLTE4NTEsOCArMjE1MSw5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWlj
RmVuY2UoRXh0QXRvbWljT3BUeXBlLCB1aW50OF90KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjp0cnVuY1NhdHVyYXRlZChFeHQxT3BU
eXBlIG9wLCBFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIFR5cGUg
cmV0dXJuVHlwZSwgVHlwZSkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjp0
cnVuY1NhdHVyYXRlZChFeHQxT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQsIFR5cGUgcmV0dXJuVHlwZSwgVHlwZSkgLT4gUGFydGlhbFJlc3Vs
dAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4RmxvYXQg
PSBudWxscHRyOwogICAgIFZhbHVlKiBtaW5GbG9hdCA9IG51bGxwdHI7CiAgICAgVmFsdWUqIHNp
Z25CaXRDb25zdGFudCA9IG51bGxwdHI7CkBAIC0yMDAyLDI2ICsyMzAzLDI2IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6dHJ1bmNTYXR1cmF0ZWQoRXh0MU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2lu
KCksCisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgYXJnLCBtaW5GbG9h
dCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6
OlNlbGVjdCwgb3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXhGbG9hdCksCiAgICAg
ICAgICAgICBwYXRjaHBvaW50LCBtYXhSZXN1bHQpLAotICAgICAgICByZXF1aXJlc05hTkNoZWNr
ID8gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBv
cmlnaW4oKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwg
b3JpZ2luKCksIGFyZywgYXJnKSwgbWluUmVzdWx0LCB6ZXJvKSA6IG1pblJlc3VsdCk7CisgICAg
ICAgIHJlcXVpcmVzTmFOQ2hlY2sgPyBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgYXJnLCBhcmcpLCBtaW5SZXN1bHQsIHplcm8p
IDogbWluUmVzdWx0KSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5v
blplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBjb25kaXRpb24sIG5vblplcm8sIHpl
cm8pOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgZ2V0KGNvbmRpdGlvbiksIGdldChub25aZXJv
KSwgZ2V0KHplcm8pKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogQjNJUkdlbmVyYXRvcjo6RXhw
cmVzc2lvblR5cGUgQjNJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoVHlwZSB0eXBlLCB1aW50NjRf
dCB2YWx1ZSkKIHsKIAotICAgIHJldHVybiBjb25zdGFudCh0b0IzVHlwZSh0eXBlKSwgdmFsdWUp
OworICAgIHJldHVybiBwdXNoKGNvbnN0YW50KHRvQjNUeXBlKHR5cGUpLCB2YWx1ZSkpOwogfQog
CiB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRFbnRyeVRpZXJVcENoZWNrKCkKQEAgLTIwODIsMjAg
KzIzODMsMjEgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKHVpbnQz
Ml90IGxvb3BJbmRleCwgY29uc3QgU3RhY2smIGVuY2xvc2kKIAogICAgIFZhbHVlKiBjb3VudERv
d25Mb2NhdGlvbiA9IGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KCZtX3RpZXJVcC0+bV9jb3VudGVyKSwgb3JpZ2luKTsKIAotICAgIFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4gc3RhY2ttYXA7Ci0gICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKSB7Ci0g
ICAgICAgIFZhbHVlKiByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxl
VmFsdWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luLCBsb2NhbCk7Ci0gICAgICAgIHN0YWNrbWFw
LmFwcGVuZChyZXN1bHQpOwotICAgIH0KKyAgICBWZWN0b3I8VmFsdWUqPiBzdGFja21hcDsKKyAg
ICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCisgICAgICAgIHN0YWNrbWFwLmFwcGVuZChn
ZXQobG9jYWwpKTsKICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJ
bmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7
CisgICAgICAgIGF1dG8mIGRhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbElu
ZGV4XS5jb250cm9sRGF0YTsKICAgICAgICAgYXV0byYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJz
ZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7
CiAgICAgICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVlIDogZXhwcmVzc2lvblN0YWNrKQot
ICAgICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgIHN0YWNrbWFw
LmFwcGVuZChnZXQodmFsdWUpKTsKKyAgICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNhdGNo
KGRhdGEpKQorICAgICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKGdldChkYXRhLmV4Y2VwdGlvbigp
KSk7CiAgICAgfQogICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVlIDogZW5jbG9zaW5nU3Rh
Y2spCi0gICAgICAgIHN0YWNrbWFwLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgIHN0YWNrbWFwLmFw
cGVuZChnZXQodmFsdWUpKTsKICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA6IG5ld1N0
YWNrKQotICAgICAgICBzdGFja21hcC5hcHBlbmQodmFsdWUpOworICAgICAgICBzdGFja21hcC5h
cHBlbmQoZ2V0KHZhbHVlKSk7CiAKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIG9y
aWdpbik7CiAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwpAQCAtMjE0MCw5
MyArMjQ0Miw3MiBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2sodWlu
dDMyX3QgbG9vcEluZGV4LCBjb25zdCBTdGFjayYgZW5jbG9zaQogICAgIH0pOwogfQogCitWYWx1
ZSogQjNJUkdlbmVyYXRvcjo6bG9hZEZyb21TY3JhdGNoQnVmZmVyKHVuc2lnbmVkJiBpbmRleElu
QnVmZmVyLCBWYWx1ZSogcG9pbnRlciwgQjM6OlR5cGUgdHlwZSkKK3sKKyAgICBzaXplX3Qgb2Zm
c2V0ID0gc2l6ZW9mKHVpbnQ2NF90KSAqIGluZGV4SW5CdWZmZXIrKzsKKyAgICBSRUxFQVNFX0FT
U0VSVCh0eXBlLmlzTnVtZXJpYygpKTsKKyAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0eXBlLCBvcmlnaW4oKSwgcG9pbnRlciwg
b2Zmc2V0KTsKK30KKwordm9pZCBCM0lSR2VuZXJhdG9yOjpjb25uZWN0Q29udHJvbEVudHJ5KHVu
c2lnbmVkJiBpbmRleEluQnVmZmVyLCBWYWx1ZSogcG9pbnRlciwgQ29udHJvbERhdGEmIGRhdGEs
IFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xEYXRhJiBjdXJyZW50RGF0YSwgYm9vbCBm
aWxsTG9vcFBoaXMpCit7CisgICAgLy8gRm9yIGVhY2ggc3RhY2sgZW50cnkgZW5jbG9zZWQgYnkg
dGhpcyBsb29wIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBhIHBoaSBzbyB3ZSBj
YW4gZmlsbCBpdCBvbiBPU1IgZW50cnkuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4
cHJlc3Npb25TdGFjay5zaXplKCk7IGkrKykgeworICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFs
dWUgPSBleHByZXNzaW9uU3RhY2tbaV07CisgICAgICAgIGF1dG8qIGxvYWQgPSBsb2FkRnJvbVNj
cmF0Y2hCdWZmZXIoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgdmFsdWUtPnR5cGUoKSk7CisgICAg
ICAgIGlmIChmaWxsTG9vcFBoaXMpCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgbG9hZCwgZGF0YS5waGlzW2ldKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJp
YWJsZVZhbHVlPihtX3Byb2MsIFNldCwgb3JpZ2luKCksIHZhbHVlLnZhbHVlKCksIGxvYWQpOwor
ICAgIH0KKyAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkgJiYgJmRhdGEgIT0g
JmN1cnJlbnREYXRhKSB7CisgICAgICAgIGF1dG8qIGxvYWQgPSBsb2FkRnJvbVNjcmF0Y2hCdWZm
ZXIoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgcG9pbnRlclR5cGUoKSk7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIG9yaWdpbigp
LCBkYXRhLmV4Y2VwdGlvbigpLCBsb2FkKTsKKyAgICB9Cit9OworCiBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3Rh
Y2ssIENvbnRyb2xUeXBlJiBibG9jaywgU3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29wSW5k
ZXgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBCYXNpY0Jsb2NrKiBib2R5ID0gbV9wcm9jLmFk
ZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2Nr
KCk7CiAKLSAgICBibG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVy
ZSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJvZHkpOworICAgIGJsb2NrID0gQ29u
dHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6Okxvb3AsIG1f
c3RhY2tTaXplLCBjb250aW51YXRpb24sIGJvZHkpOworCiAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
ZW5jbG9zaW5nU3RhY2suc2l6ZSgpIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kp
IHsKICAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlID0gZW5jbG9zaW5nU3RhY2suYXQob2Zm
c2V0ICsgaSk7Ci0gICAgICAgIGF1dG8qIHVwc2lsb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOwogICAgICAgICBWYWx1
ZSogcGhpID0gYmxvY2sucGhpc1tpXTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGdldCh2YWx1ZSksIHBoaSk7CiAgICAg
ICAgIGJvZHktPmFwcGVuZChwaGkpOwotICAgICAgICB1cHNpbG9uLT5zZXRQaGkocGhpKTsKLSAg
ICAgICAgbmV3U3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHZhbHVlLnR5cGUoKSwgcGhpKTsKKyAg
ICAgICAgc2V0KGJvZHksIHZhbHVlLCBwaGkpOworICAgICAgICBuZXdTdGFjay5hcHBlbmQodmFs
dWUpOwogICAgIH0KKyAgICBlbmNsb3NpbmdTdGFjay5zaHJpbmsob2Zmc2V0KTsKIAogICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4o
KSwgYm9keSk7CiAgICAgaWYgKGxvb3BJbmRleCA9PSBtX2xvb3BJbmRleEZvck9TUkVudHJ5KSB7
CiAgICAgICAgIGRhdGFMb2dMbklmKFdhc21CM0lSR2VuZXJhdG9ySW50ZXJuYWw6OnZlcmJvc2Us
ICJTZXR0aW5nIHVwIGZvciBPU1IgZW50cnkiKTsKIAotICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IG1fcm9vdEJsb2NrOwotICAgICAgICBWYWx1ZSogcG9pbnRlciA9IG1fcm9vdEJsb2NrLT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Jvb3RCbG9ja3NbMF07CisgICAg
ICAgIFZhbHVlKiBwb2ludGVyID0gbV9yb290QmxvY2tzWzBdLT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAogICAg
ICAgICB1bnNpZ25lZCBpbmRleEluQnVmZmVyID0gMDsKLSAgICAgICAgYXV0byBsb2FkRnJvbVNj
cmF0Y2hCdWZmZXIgPSBbJl0gKEIzOjpUeXBlIHR5cGUpIHsKLSAgICAgICAgICAgIHNpemVfdCBv
ZmZzZXQgPSBzaXplb2YodWludDY0X3QpICogaW5kZXhJbkJ1ZmZlcisrOwotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQodHlwZS5pc051bWVyaWMoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0eXBlLCBv
cmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKLSAgICAgICAgfTsKIAogICAgICAgICBmb3IgKGF1
dG8mIGxvY2FsIDogbV9sb2NhbHMpCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRGcm9t
U2NyYXRjaEJ1ZmZlcihsb2NhbC0+dHlwZSgpKSk7Ci0KLSAgICAgICAgYXV0byBjb25uZWN0Q29u
dHJvbEVudHJ5ID0gWyZdKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBTdGFjayYgZXhwcmVzc2lv
blN0YWNrKSB7Ci0gICAgICAgICAgICAvLyBGb3IgZWFjaCBzdGFjayBlbnRyeSBlbmNsb3NlZCBi
eSB0aGlzIGxvb3Agd2UgbmVlZCB0byByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIGEgcGhpIHNvIHdl
IGNhbiBmaWxsIGl0IG9uIE9TUiBlbnRyeS4KLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHNvdXJj
ZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsb2NrSW5kZXggPSAwOwot
ICAgICAgICAgICAgQjM6Okluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9wcm9jKTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHByZXNzaW9uU3RhY2suc2l6ZSgpOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBleHByZXNzaW9u
U3RhY2tbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5pc0NvbnN0YW50KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgKytpbmRleEluQnVmZmVyOwotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodmFsdWUt
Pm93bmVyICE9IHNvdXJjZUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VC
bG9jaykKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKHNvdXJj
ZUJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluc2VydGlvblNldC5pc0VtcHR5
KCkpOwotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtQjNJUkdlbmVyYXRvcklu
dGVybmFsOjp2ZXJib3NlICYmIHNvdXJjZUJsb2NrLCAiRXhlY3V0ZWQgaW5zZXJ0aW9uIHNldCBp
bnRvOiAiLCAqc291cmNlQmxvY2spOwotICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4ID0g
MDsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlQmxvY2sgPSB2YWx1ZS0+b3duZXI7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgd2hpbGUgKHNvdXJjZUJsb2NrLT5hdChi
bG9ja0luZGV4KyspICE9IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2tJ
bmRleCA8IHNvdXJjZUJsb2NrLT5zaXplKCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChzb3Vy
Y2VCbG9jay0+YXQoYmxvY2tJbmRleCAtIDEpID09IHZhbHVlKTsKLQotICAgICAgICAgICAgICAg
IGF1dG8qIHBoaSA9IGRhdGEuY29udGludWF0aW9uLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
UGhpLCAgdmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpKTsKLSAgICAgICAgICAgICAgICBl
eHByZXNzaW9uU3RhY2tbaV0gPSBUeXBlZEV4cHJlc3Npb24geyB2YWx1ZS50eXBlKCksIHBoaSB9
OwotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVl
PihtX3Byb2MsIHZhbHVlLT5vcmlnaW4oKSwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKHZhbHVlLT50
eXBlKCkpLCBwaGkpOwotCi0gICAgICAgICAgICAgICAgYXV0byogc291cmNlVXBzaWxvbiA9IG1f
cHJvYy5hZGQ8VXBzaWxvblZhbHVlPih2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLCBwaGkpOwotICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRWYWx1ZShibG9ja0luZGV4LCBzb3VyY2VV
cHNpbG9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzb3VyY2VCbG9jaykKLSAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShzb3VyY2VCbG9jayk7Ci0gICAgICAg
IH07CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihpbmRl
eEluQnVmZmVyLCBwb2ludGVyLCBsb2NhbC0+dHlwZSgpKSk7CiAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0
YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgewogICAgICAgICAgICAgYXV0byYgZGF0YSA9
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOwogICAg
ICAgICAgICAgYXV0byYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygp
W2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7Ci0gICAgICAgICAgICBjb25u
ZWN0Q29udHJvbEVudHJ5KGRhdGEsIGV4cHJlc3Npb25TdGFjayk7CisgICAgICAgICAgICBjb25u
ZWN0Q29udHJvbEVudHJ5KGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIGRhdGEsIGV4cHJlc3Npb25T
dGFjaywgYmxvY2spOwogICAgICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICBUeXBlZEV4
cHJlc3Npb24gdmFsdWUgPSBlbmNsb3NpbmdTdGFjay5hdChvZmZzZXQgKyBpKTsKLSAgICAgICAg
ICAgIFZhbHVlKiBwaGkgPSBibG9jay5waGlzW2ldOwotICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgdmFsdWUtPm9yaWdpbigpLCBsb2Fk
RnJvbVNjcmF0Y2hCdWZmZXIodmFsdWUtPnR5cGUoKSksIHBoaSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZW5jbG9zaW5nU3RhY2suc2hyaW5rKG9mZnNldCk7Ci0gICAgICAgIGNvbm5lY3RDb250cm9s
RW50cnkoYmxvY2ssIGVuY2xvc2luZ1N0YWNrKTsKKyAgICAgICAgY29ubmVjdENvbnRyb2xFbnRy
eShpbmRleEluQnVmZmVyLCBwb2ludGVyLCBibG9jaywgZW5jbG9zaW5nU3RhY2ssIGJsb2NrKTsK
KyAgICAgICAgY29ubmVjdENvbnRyb2xFbnRyeShpbmRleEluQnVmZmVyLCBwb2ludGVyLCBibG9j
aywgbmV3U3RhY2ssIGJsb2NrLCB0cnVlKTsKIAogICAgICAgICBtX29zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUgPSBpbmRleEluQnVmZmVyOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGJvZHkpOwogICAgICAgICBi
b2R5LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGVuY2xvc2luZ1N0YWNrLnNocmluayhvZmZzZXQpOworICAgIH0KIAogICAgIG1fY3VycmVudEJs
b2NrID0gYm9keTsKICAgICBlbWl0TG9vcFRpZXJVcENoZWNrKGxvb3BJbmRleCwgZW5jbG9zaW5n
U3RhY2ssIG5ld1N0YWNrKTsKQEAgLTIyMzUsNyArMjUxNiw3IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFj
aywgQ29uCiAKIEIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEIzSVJHZW5lcmF0b3I6OmFkZFRv
cExldmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkKIHsKLSAgICByZXR1cm4gQ29udHJvbERh
dGEobV9wcm9jLCBPcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OlRvcExldmVsLCBtX3By
b2MuYWRkQmxvY2soKSk7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgT3JpZ2luKCks
IHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpUb3BMZXZlbCwgbV9zdGFja1NpemUsIG1fcHJvYy5hZGRC
bG9jaygpKTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRCbG9jayhCbG9ja1NpZ25hdHVy
ZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIG5ld0Jsb2Nr
LCBTdGFjayYgbmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKQEAgLTIyNDMsNyArMjUyNCw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQmxvY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBT
dGFjayYgZW5jbG9zaW5nU3RhY2ssIENvCiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9wcm9jLmFkZEJsb2NrKCk7CiAKICAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5n
U3RhY2ssIG5ld1N0YWNrKTsKLSAgICBuZXdCbG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3Jp
Z2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywgY29udGludWF0aW9uKTsKKyAgICBu
ZXdCbG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tU
eXBlOjpCbG9jaywgbV9zdGFja1NpemUsIGNvbnRpbnVhdGlvbik7CiAgICAgcmV0dXJuIHsgfTsK
IH0KIApAQCAtMjI1NSwyMCArMjUzNiwyMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZElmKEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdAogICAg
IEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9j
ayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAKLSAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBjb25kaXRp
b24pOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkJy
YW5jaCwgb3JpZ2luKCksIGdldChjb25kaXRpb24pKTsKICAgICBtX2N1cnJlbnRCbG9jay0+c2V0
U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sodGFrZW4pLCBGcmVxdWVudGVkQmxvY2sobm90VGFr
ZW4pKTsKICAgICB0YWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgIG5v
dFRha2VuLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CiAKICAgICBtX2N1cnJlbnRC
bG9jayA9IHRha2VuOwogICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywg
bmV3U3RhY2spOwotICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNp
Z25hdHVyZSwgQmxvY2tUeXBlOjpJZiwgY29udGludWF0aW9uLCBub3RUYWtlbik7CisgICAgcmVz
dWx0ID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6
OklmLCBtX3N0YWNrU2l6ZSwgY29udGludWF0aW9uLCBub3RUYWtlbik7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBj
b25zdCBTdGFjayYgY3VycmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgdW5pZnlW
YWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnBoaXMpOworICAgIHVuaWZ5VmFsdWVz
V2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0YSk7CiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlv
bik7CiAgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEpOwogfQpAQCAtMjI3Niwx
MSArMjU1NywyNTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBk
YXRhLCBjb25zdCBTdGFjayYgY3VycmVudFN0YWNrKSAtPiBQYXIKIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICBBU1NFUlQoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAg
ICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCkgKyBkYXRhLm1fc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCk7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNwZWNpYWw7CiAgICAgZGF0
YS5jb252ZXJ0SWZUb0Jsb2NrKCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAorYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5n
U3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjaykgLT4gUGFydGlhbFJl
c3VsdAoreworICAgICsrbV90cnlEZXB0aDsKKworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlv
biA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3Np
bmdTdGFjaywgbmV3U3RhY2spOworICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3Jp
Z2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpUcnksIG1fc3RhY2tTaXplLCBjb250aW51YXRp
b24sICsrbV9jYWxsU2l0ZUluZGV4LCBtX3RyeURlcHRoKTsKKyAgICByZXR1cm4geyB9OworfQor
CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgU3RhY2smIGN1cnJlbnRTdGFjaywgQ29udHJvbFR5
cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1
bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEpOworICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgZGF0YS5j
b250aW51YXRpb24pOworICAgIHJldHVybiBhZGRDYXRjaFRvVW5yZWFjaGFibGUoZXhjZXB0aW9u
SW5kZXgsIHNpZ25hdHVyZSwgZGF0YSwgcmVzdWx0cyk7Cit9CisKK1BhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGUgQjNJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKEJh
c2ljQmxvY2sqIGJsb2NrLCBQYXRjaHBvaW50VmFsdWUqIHBhdGNoKQoreworICAgICsrbV9jYWxs
U2l0ZUluZGV4OworICAgIGlmICghbV90cnlEZXB0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIFZlY3RvcjxWYWx1ZSo+IHN0YWNrbWFwOworICAgIE9yaWdpbiBvcmlnaW4gPSB0aGlzLT5v
cmlnaW4oKTsKKyAgICBmb3IgKFZhcmlhYmxlKiBsb2NhbCA6IG1fbG9jYWxzKSB7CisgICAgICAg
IFZhbHVlKiByZXN1bHQgPSBibG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywg
QjM6OkdldCwgb3JpZ2luLCBsb2NhbCk7CisgICAgICAgIHN0YWNrbWFwLmFwcGVuZChyZXN1bHQp
OworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRl
eCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7Cisg
ICAgICAgIENvbnRyb2xEYXRhJiBkYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRy
b2xJbmRleF0uY29udHJvbERhdGE7CisgICAgICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSBt
X3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjazsKKyAgICAgICAgZm9yIChWYXJpYWJsZSogdmFsdWUgOiBleHByZXNzaW9uU3RhY2spCisg
ICAgICAgICAgICBzdGFja21hcC5hcHBlbmQoZ2V0KGJsb2NrLCB2YWx1ZSkpOworICAgICAgICBp
ZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpCisgICAgICAgICAgICBzdGFja21hcC5h
cHBlbmQoZ2V0KGJsb2NrLCBkYXRhLmV4Y2VwdGlvbigpKSk7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gcGF0Y2gtPm51bUNoaWxkcmVuKCk7CisgICAgaWYgKHBhdGNoLT50eXBlKCkg
IT0gVm9pZCkKKyAgICAgICAgb2Zmc2V0Kys7CisKKyAgICBwYXRjaC0+ZWZmZWN0cy5leGl0c1Np
ZGV3YXlzID0gdHJ1ZTsKKyAgICBwYXRjaC0+YXBwZW5kVmVjdG9yV2l0aFJlcChzdGFja21hcCwg
VmFsdWVSZXA6OkxhdGVDb2xkQW55KTsKKworICAgIHJldHVybiBQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlIHsgbV9jYWxsU2l0ZUluZGV4LCBvZmZzZXQgfTsKK30KKworYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVz
dWx0cykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFZhbHVlKiBvcGVyYXRpb25SZXN1bHQgPSBl
bWl0Q2F0Y2hJbXBsKENhdGNoS2luZDo6Q2F0Y2gsIGRhdGEsIGV4Y2VwdGlvbkluZGV4KTsKKyAg
ICBWYWx1ZSogcGF5bG9hZCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8RXh0cmFjdFZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25SZXN1bHQsIDEpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyAr
K2kpIHsKKyAgICAgICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAg
ICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHRvQjNUeXBlKHR5cGUpLCBvcmlnaW4oKSwgcGF5bG9hZCwgaSAqIHNpemVv
Zih1aW50NjRfdCkpOworICAgICAgICByZXN1bHRzLmFwcGVuZChwdXNoKHZhbHVlKSk7CisgICAg
fQorICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwo
U3RhY2smIGN1cnJlbnRTdGFjaywgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEpOworICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4o
KSwgZGF0YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFi
bGUoZGF0YSk7Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hh
YmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENhdGNo
SW1wbChDYXRjaEtpbmQ6OkNhdGNoQWxsLCBkYXRhKTsKKyAgICByZXR1cm4geyB9OworfQorCitW
YWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENhdGNoSW1wbChDYXRjaEtpbmQga2luZCwgQ29udHJv
bFR5cGUmIGRhdGEsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4KQoreworICAgIG1faGFzQ2F0Y2gg
PSB0cnVlOworICAgIG1fY3VycmVudEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgbV9y
b290QmxvY2tzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CisgICAgbV9zdGFja1NpemUgPSBkYXRh
LnN0YWNrU2l6ZSgpOworCisgICAgaWYgKENvbnRyb2xUeXBlOjppc1RyeShkYXRhKSkgeworICAg
ICAgICBpZiAoa2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoKQorICAgICAgICAgICAgZGF0YS5jb252
ZXJ0VHJ5VG9DYXRjaCgrK21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFkZFZhcmlhYmxlKHBvaW50
ZXJUeXBlKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YS5jb252ZXJ0VHJ5VG9D
YXRjaEFsbCgrK21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFkZFZhcmlhYmxlKHBvaW50ZXJUeXBl
KCkpKTsKKyAgICB9CisKKyAgICBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSA9IGtpbmQgPT0gQ2F0
Y2hLaW5kOjpDYXRjaCA/IEhhbmRsZXJUeXBlOjpDYXRjaCA6IEhhbmRsZXJUeXBlOjpDYXRjaEFs
bDsKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IGhhbmRsZXJUeXBlLCBkYXRhLnRy
eVN0YXJ0KCksIGRhdGEudHJ5RW5kKCksIDAsIG1fdHJ5RGVwdGgsIGV4Y2VwdGlvbkluZGV4IH0p
OworCisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNr
TGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3Byb2MsIG1fY3Vy
cmVudEJsb2NrLCBmYWxzZSk7CisKKyAgICBWYWx1ZSogcG9pbnRlciA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKworICAgIHVuc2lnbmVkIGluZGV4SW5CdWZmZXIgPSAwOworCisgICAg
Zm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRG
cm9tU2NyYXRjaEJ1ZmZlcihpbmRleEluQnVmZmVyLCBwb2ludGVyLCBsb2NhbC0+dHlwZSgpKSk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1f
cGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAgICAg
IGF1dG8mIGNvbnRyb2xEYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRl
eF0uY29udHJvbERhdGE7CisgICAgICAgIGF1dG8mIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2Vy
LT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOwor
ICAgICAgICBjb25uZWN0Q29udHJvbEVudHJ5KGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIGNvbnRy
b2xEYXRhLCBleHByZXNzaW9uU3RhY2ssIGRhdGEpOworICAgIH0KKworICAgIFBhdGNocG9pbnRW
YWx1ZSogcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+
KG1fcHJvYywgbV9wcm9jLmFkZFR1cGxlKHsgcG9pbnRlclR5cGUoKSwgcG9pbnRlclR5cGUoKSB9
KSwgb3JpZ2luKCkpOworICAgIHJlc3VsdC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsK
KyAgICByZXN1bHQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygp
KTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyTGF0ZSA9IFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJl
Z2lzdGVyc0ZvckpTQ2FsbCgpOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgIHJlc3VsdC0+Y2xvYmJlckxhdGUoY2xvYmJlckxhdGUpOworICAgIHJlc3Vs
dC0+YXBwZW5kKGluc3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAg
cmVzdWx0LT5yZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworICAgIHJlc3VsdC0+cmVzdWx0Q29uc3RyYWludHMuYXBwZW5kKFZh
bHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7CisgICAgcmVzdWx0LT5zZXRH
ZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBqaXQubW92ZShwYXJhbXNbMl0uZ3ByKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0g
aml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxs
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVJldHJpZXZl
QW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSkpOworICAgICAgICB9KTsKKyAgICB9KTsKKwor
ICAgIFZhbHVlKiBleGNlcHRpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRlclR5cGUoKSwgcmVzdWx0LCAwKTsKKyAgICBz
ZXQoZGF0YS5leGNlcHRpb24oKSwgZXhjZXB0aW9uKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmIHRhcmdldCwg
Q29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRGVs
ZWdhdGVUb1VucmVhY2hhYmxlKHRhcmdldCwgZGF0YSk7Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiB0YXJnZXQsIENvbnRyb2xU
eXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5zaWduZWQgdGFyZ2V0RGVwdGgg
PSAwOworICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkodGFyZ2V0KSkKKyAgICAgICAgdGFyZ2V0
RGVwdGggPSB0YXJnZXQudHJ5RGVwdGgoKTsKKworICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBw
ZW5kKHsgSGFuZGxlclR5cGU6OkRlbGVnYXRlLCBkYXRhLnRyeVN0YXJ0KCksICsrbV9jYWxsU2l0
ZUluZGV4LCAwLCBtX3RyeURlcHRoLCB0YXJnZXREZXB0aCB9KTsKKyAgICByZXR1cm4geyB9Owor
fQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4
LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gbV9wcm9jLmFkZDxQYXRjaHBvaW50VmFs
dWU+KEIzOjpWb2lkLCBvcmlnaW4oKSk7CisgICAgcGF0Y2gtPmVmZmVjdHMudGVybWluYWwgPSB0
cnVlOworICAgIHBhdGNoLT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJl
Z2lzdGVyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkK
KyAgICAgICAgcGF0Y2gtPmFwcGVuZChnZXQoYXJnc1tpXSksIFZhbHVlUmVwOjpzdGFja0FyZ3Vt
ZW50KGkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgcGF0Y2gtPmNsb2JiZXIoUmVn
aXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBSZWdpc3RlclNldCBjbG9i
YmVyTGF0ZSA9IFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpOworICAg
IGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNsb2JiZXJMYXRl
LmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZv
Ojphcmd1bWVudEdQUjIpOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQ
UjMpOworICAgIHBhdGNoLT5jbG9iYmVyTGF0ZShjbG9iYmVyTGF0ZSk7CisgICAgcGF0Y2gtPm51
bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBo
YW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMobV9jdXJyZW50QmxvY2ssIHBh
dGNoKTsKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBleGNlcHRpb25JbmRleCwgaGFu
ZGxlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRj
aCgwKTsKKyAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKKworICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJ
bnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxI
ZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVj
aXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICAgICAgaml0LmFuZFB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0
Y2gpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2gsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9m
ZnNldE9mVk0oKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0
Lmp1bXAoKTsKKworICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwg
UHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZW
TSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOworCisgICAg
ICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LmNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7CisK
KyAgICAgICAgaml0Lm1vdmUocGFyYW1zWzBdLmdwcigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihleGNlcHRpb25JbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIGpp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChP
cGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
Y2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UaHJv
dykpOworICAgICAgICB9KTsKKyAgICB9KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHBh
dGNoKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0
aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gbV9wcm9jLmFkZDxQYXRjaHBvaW50VmFsdWU+KEIz
OjpWb2lkLCBvcmlnaW4oKSk7CisgICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3Jv
U2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyTGF0ZTsKKyAgICBj
bG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjbG9iYmVyTGF0ZS5h
ZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6
YXJndW1lbnRHUFIyKTsKKyAgICBwYXRjaC0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7CisgICAg
cGF0Y2gtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwor
ICAgIHBhdGNoLT5hcHBlbmRTb21lUmVnaXN0ZXIoZnJhbWVQb2ludGVyKCkpOworICAgIHBhdGNo
LT5hcHBlbmQoZ2V0KGRhdGEuZXhjZXB0aW9uKCkpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsK
KyAgICBwYXRjaC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhtX2N1
cnJlbnRCbG9jaywgcGF0Y2gpOworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3RoaXMsIGhhbmRs
ZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOworCisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRj
aCgwKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1sw
XS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSksIHNjcmF0Y2gpOworICAgICAgICB7
CisgICAgICAgICAgICBhdXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0
UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoUHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgICAgIGpp
dC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01h
c2spLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhzY3JhdGNoLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6
Rm9vdGVyOjpvZmZzZXRPZlZNKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVk
Q2FzZSA9IGppdC5qdW1wKCk7CisKKyAgICAgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5s
aW5rKCZqaXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHNjcmF0Y2gsIFByZWNpc2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6
Om9mZnNldE9mVk0oKSAtIFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBzY3JhdGNo
KTsKKworICAgICAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOworICAgICAgICB9CisgICAg
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHNj
cmF0Y2gpOworCisgICAgICAgIGppdC5tb3ZlKHBhcmFtc1swXS5ncHIoKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1zWzFdLmdwcigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOworICAgICAgICBqaXQubW92ZShwYXJhbXNbMl0uZ3ByKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMik7CisgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhp
cyk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOworICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmV0aHJvdykpOwor
ICAgICAgICB9KTsKKyAgICB9KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHBhdGNoKTsK
KworICAgIHJldHVybiB7IH07Cit9CisKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNv
bnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJl
c3VsdAogewogICAgIENhbGxJbmZvcm1hdGlvbiB3YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IobV9wYXJzZXItPnNpZ25hdHVyZSgpLCBDYWxs
Um9sZTo6Q2FsbGVlKTsKQEAgLTIzMDAsMTAgKzI4MjMsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVz
KSAtPgogICAgICAgICBCMzo6VmFsdWVSZXAgcmVwID0gd2FzbUNhbGxJbmZvLnJlc3VsdHNbaV07
CiAgICAgICAgIGlmIChyZXAuaXNTdGFjaygpKSB7CiAgICAgICAgICAgICBCMzo6VmFsdWUqIGFk
ZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6
QWRkLCBPcmlnaW4oKSwgZnJhbWVQb2ludGVyKCksIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHJl
cC5vZmZzZXRGcm9tRlAoKSkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxCMzo6TWVtb3J5VmFsdWU+KG1fcHJvYywgQjM6OlN0b3JlLCBPcmlnaW4oKSwgcmV0dXJuVmFs
dWVzW29mZnNldCArIGldLCBhZGRyZXNzKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8QjM6Ok1lbW9yeVZhbHVlPihtX3Byb2MsIEIzOjpTdG9yZSwgT3JpZ2luKCksIGdl
dChyZXR1cm5WYWx1ZXNbb2Zmc2V0ICsgaV0pLCBhZGRyZXNzKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIEFTU0VSVChyZXAuaXNSZWcoKSk7Ci0gICAgICAgICAgICBwYXRjaC0+YXBw
ZW5kKHJldHVyblZhbHVlc1tvZmZzZXQgKyBpXSwgcmVwKTsKKyAgICAgICAgICAgIHBhdGNoLT5h
cHBlbmQoZ2V0KHJldHVyblZhbHVlc1tvZmZzZXQgKyBpXSksIHJlcCk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTIzMTMsMTIgKzI4MzYsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1
cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPgogCiBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9sRGF0YSYgZGF0YSwgRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVz
dWx0CiB7Ci0gICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnBoaXMp
OworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YSk7CiAKICAgICBC
YXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CiAgICAgaWYg
KGNvbmRpdGlvbikgewogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2Mu
YWRkQmxvY2soKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgZ2V0
KGNvbmRpdGlvbikpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhGcmVx
dWVudGVkQmxvY2sodGFyZ2V0KSwgRnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikpOwogICAg
ICAgICB0YXJnZXQtPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKICAgICAgICAgY29u
dGludWF0aW9uLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CkBAIC0yMzMzLDExICsy
ODU2LDEyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRh
LCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xE
YXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBTdGFjayYg
ZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVU5VU0VEX1BBUkFNKGV4
cHJlc3Npb25TdGFjayk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUo
KTsgKytpKQotICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIHRh
cmdldHNbaV0tPnBoaXMpOwotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFj
aywgZGVmYXVsdFRhcmdldC5waGlzKTsKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhw
cmVzc2lvblN0YWNrLCAqdGFyZ2V0c1tpXSk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhw
cmVzc2lvblN0YWNrLCBkZWZhdWx0VGFyZ2V0KTsKIAotICAgIFN3aXRjaFZhbHVlKiBzd2l0Y2hW
YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8U3dpdGNoVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIGNvbmRpdGlvbik7CisgICAgU3dpdGNoVmFsdWUqIHN3aXRjaFZhbHVlID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxTd2l0Y2hWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ2V0KGNv
bmRpdGlvbikpOwogICAgIHN3aXRjaFZhbHVlLT5zZXRGYWxsVGhyb3VnaChGcmVxdWVudGVkQmxv
Y2soZGVmYXVsdFRhcmdldC50YXJnZXRCbG9ja0ZvckJyYW5jaCgpKSk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKQogICAgICAgICBzd2l0Y2hWYWx1ZS0+
YXBwZW5kQ2FzZShTd2l0Y2hDYXNlKGksIEZyZXF1ZW50ZWRCbG9jayh0YXJnZXRzW2ldLT50YXJn
ZXRCbG9ja0ZvckJyYW5jaCgpKSkpOwpAQCAtMjM1MSw3ICsyODc1LDcgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblN0
YWNrKSAtPiBQYXIKIAogICAgIEFTU0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgpID09IGRhdGEu
c2lnbmF0dXJlKCktPnJldHVybkNvdW50KCkpOwogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpICE9
IEJsb2NrVHlwZTo6TG9vcCkKLSAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lv
blN0YWNrLCBkYXRhLnBoaXMpOworICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNz
aW9uU3RhY2ssIGRhdGEpOwogCiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CiAgICAgZGF0
YS5jb250aW51YXRpb24tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKQEAgLTIzNjMs
MzAgKzI4ODcsMzQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENv
bnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXMKIHsKICAgICBDb250cm9sRGF0
YSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOwogICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5j
b250aW51YXRpb247CisgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOwogCiAgICAg
aWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgewogICAgICAgICBkYXRhLnNw
ZWNpYWwtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBtX2N1
cnJlbnRCbG9jayk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hZGRQcmVkZWNlc3NvcihkYXRh
LnNwZWNpYWwpOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpUcnkgfHwgZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoKQorICAg
ICAgICAtLW1fdHJ5RGVwdGg7CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5
cGU6Okxvb3ApIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0
dXJlKCktPnJldHVybkNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgVmFsdWUqIHJlc3VsdCA9
IGRhdGEucGhpc1tpXTsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0
KTsKLSAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFu
ZEFwcGVuZChkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpLCByZXN1bHQpOworICAgICAg
ICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRh
dGEuc2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSksIHB1c2gocmVzdWx0KSk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICBtX291dGVyTG9vcHMucmVtb3ZlTGFzdCgpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkpCisg
ICAgICAgICAgICBpZiAoaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkpIHsKKyAgICAgICAgICAg
ICAgICArK21fc3RhY2tTaXplOwogICAgICAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVz
c2lvblN0YWNrLmFwcGVuZChleHByZXNzaW9uU3RhY2tbaV0pOwotICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFR5cGUgcmV0dXJuVHlwZSA9
IGRhdGEuc2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSk7Ci0gICAgICAgICAgICAgICAgZW50cnku
ZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHJldHVyblR5cGUsIGNv
bnN0YW50KHRvQjNUeXBlKHJldHVyblR5cGUpLCAweGJiYWRiZWVmKSk7CisgICAgICAgICAgICAg
ICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHJldHVy
blR5cGUsIHB1c2goY29uc3RhbnQodG9CM1R5cGUocmV0dXJuVHlwZSksIDB4YmJhZGJlZWYpKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKKwogICAgIC8vIFRvcExldmVsIGRv
ZXMgbm90IGhhdmUgYW55IGNvZGUgYWZ0ZXIgdGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3
ZSBlbWl0IGEgcmV0dXJuIGhlcmUuCiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tU
eXBlOjpUb3BMZXZlbCkKICAgICAgICAgcmV0dXJuIGFkZFJldHVybihlbnRyeS5jb250cm9sRGF0
YSwgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2spOwpAQCAtMjQwMCwxMiArMjkyOCwxMiBA
QCBCMzo6VmFsdWUqIEIzSVJHZW5lcmF0b3I6OmNyZWF0ZUNhbGxQYXRjaHBvaW50KEJhc2ljQmxv
Y2sqIGJsb2NrLCBPcmlnaW4gb3JpZ2luLAogICAgIFZlY3RvcjxCMzo6Q29uc3RyYWluZWRWYWx1
ZT4gY29uc3RyYWluZWRBcmd1bWVudHM7CiAgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5m
byA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcihzaWduYXR1cmUp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQotICAgICAg
ICBjb25zdHJhaW5lZEFyZ3VtZW50cy5hcHBlbmQoQjM6OkNvbnN0cmFpbmVkVmFsdWUoYXJnc1tp
XSwgd2FzbUNhbGxJbmZvLnBhcmFtc1tpXSkpOworICAgICAgICBjb25zdHJhaW5lZEFyZ3VtZW50
cy5hcHBlbmQoQjM6OkNvbnN0cmFpbmVkVmFsdWUoZ2V0KGJsb2NrLCBhcmdzW2ldKSwgd2FzbUNh
bGxJbmZvLnBhcmFtc1tpXSkpOwogCiAgICAgbV9wcm9jLnJlcXVlc3RDYWxsQXJnQXJlYVNpemVJ
bkJ5dGVzKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHdh
c21DYWxsSW5mby5oZWFkZXJBbmRBcmd1bWVudFN0YWNrU2l6ZUluQnl0ZXMpKTsKIAogICAgIEIz
OjpUeXBlIHJldHVyblR5cGUgPSB0b0IzUmVzdWx0VHlwZSgmc2lnbmF0dXJlKTsKLSAgICBCMzo6
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hw
b2ludFZhbHVlPihtX3Byb2MsIHJldHVyblR5cGUsIG9yaWdpbik7CisgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbV9wcm9jLmFkZDxQYXRjaHBvaW50VmFsdWU+KHJldHVyblR5cGUs
IG9yaWdpbik7CiAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNy
b1NjcmF0Y2hSZWdpc3RlcnMoKSk7CiAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0
ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOwogICAgIHBhdGNocG9pbnRGdW5j
dG9yKHBhdGNocG9pbnQpOwpAQCAtMjQxNyw2ICsyOTQ1LDcgQEAgQjM6OlZhbHVlKiBCM0lSR2Vu
ZXJhdG9yOjpjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9jaywgT3JpZ2luIG9y
aWdpbiwKICAgICAgICAgICAgIHJlc3VsdENvbnN0cmFpbnRzLmFwcGVuZChCMzo6VmFsdWVSZXAo
dmFsdWVMb2NhdGlvbikpOwogICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50cyA9
IFdURk1vdmUocmVzdWx0Q29uc3RyYWludHMpOwogICAgIH0KKyAgICBibG9jay0+YXBwZW5kKHBh
dGNocG9pbnQpOwogICAgIHJldHVybiBwYXRjaHBvaW50OwogfQogCkBAIC0yNDM4LDExICsyOTY3
LDExIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4
LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxC
Mzo6VHlwZT4mIHR1cGxlID0gbV9wcm9jLnR1cGxlRm9yVHlwZShyZXR1cm5UeXBlKTsKICAgICAg
ICAgICAgIEFTU0VSVChzaWduYXR1cmUucmV0dXJuQ291bnQoKSA9PSB0dXBsZS5zaXplKCkpOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3Vu
dCgpOyArK2kpCi0gICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxFeHRyYWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHR1cGxlW2ldLCBjYWxs
UmVzdWx0LCBpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaChtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHVwbGVb
aV0sIGNhbGxSZXN1bHQsIGkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChjYWxsUmVzdWx0KTsK
KyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2goY2FsbFJlc3VsdCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQ3MSw4ICszMDAwLDEwIEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2Fs
bHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRz
IGNoZWNraW5nLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0
byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgx
CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJ
bmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKLSAgICAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICAgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoaXNXYXNtQmxvY2ss
IHBhdGNocG9pbnQpOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
dGhpcywgaGFuZGxlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGUuZ2VuZXJhdGUo
aml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwg
ZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0p
OwpAQCAtMjQ5OCw4ICszMDI5LDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAg
ICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcg
dG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+
Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6
Qm91bmRzQ2hlY2tpbmcpKTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoW3JldHVyblR5cGVdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoaXNFbWJl
ZGRlckJsb2NrLCBwYXRjaHBvaW50KTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoW3RoaXMsIGhhbmRsZSwgcmV0dXJuVHlwZV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQp
OworICAgICAgICAgICAgICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMp
OwogICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcGFyYW1zLnByb2MoKS5yZXN1
bHRDb3VudChyZXR1cm5UeXBlKV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9KSk7CkBAIC0yNTI3LDggKzMwNjAsMTAgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLAogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciB0
aGUgc2l6ZSByZWdpc3RlciBzaW5jZSB0aGUgTExJbnQgYWx3YXlzIGJvdW5kcyBjaGVja3MKICAg
ICAgICAgICAgICAgICBpZiAobV9tb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZyB8fCBtX2lu
Zm8ubWVtb3J5LmlzU2hhcmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXJMYXRlKFJlZ2lzdGVyU2V0IHsgUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS5ib3VuZHND
aGVja2luZ1NpemVSZWdpc3RlciB9KTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAg
ICAgICAgICAgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0
Y2hwb2ludEZvckV4Y2VwdGlvbnMobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQpOworICAgICAg
ICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdGhpcywgaGFuZGxlLCB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwor
ICAgICAgICAgICAgICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwog
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRT
YWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNt
RW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwpAQCAtMjU0Myw3ICszMDc4LDcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJ
bmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFy
dGlhbFJlc3VsdAogewotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtl
TGFzdCgpOworICAgIFZhbHVlKiBjYWxsZWVJbmRleCA9IGdldChhcmdzLnRha2VMYXN0KCkpOwog
ICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKIAog
ICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CkBAIC0yNTUyLDExICszMDg3LDExIEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0CiAgICAgLy8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBmb3Igb3VyIHN0
YWNrIGNoZWNrIGNhbGN1bGF0aW9uLgogICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3Rk
OjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihhcmdz
LnNpemUoKSkpOwogCi0gICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlcjsK
LSAgICBFeHByZXNzaW9uVHlwZSBpbnN0YW5jZXNCdWZmZXI7Ci0gICAgRXhwcmVzc2lvblR5cGUg
Y2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aDsKKyAgICBWYWx1ZSogY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlcjsKKyAgICBWYWx1ZSogaW5zdGFuY2VzQnVmZmVyOworICAgIFZhbHVlKiBjYWxsYWJs
ZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoOwogICAgIHsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFi
bGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICBWYWx1ZSogdGFibGUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLAogICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQz
Ml90PihJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZVB0cihtX251bUltcG9ydEZ1bmN0aW9ucywgdGFi
bGVJbmRleCkpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwg
b3JpZ2luKCksCiAgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oRnVuY1JlZlRh
YmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7CkBAIC0yNTc4LDE3ICszMTEzLDE3IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0CiAKICAgICBjYWxsZWVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgpOwog
Ci0gICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbjsKKyAgICBWYWx1ZSogY2FsbGFi
bGVGdW5jdGlvbjsKICAgICB7CiAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBpbiB0aGUg
dGFibGUgaW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgotICAgICAgICBFeHByZXNzaW9u
VHlwZSBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11
bCwgb3JpZ2luKCksCisgICAgICAgIFZhbHVlKiBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwgb3JpZ2luKCksCiAgICAgICAgICAgICBjYWxsZWVJ
bmRleCwgY29uc3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb24pKSk7CiAgICAgICAgIGNhbGxhYmxlRnVuY3Rpb24gPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb25C
dWZmZXIsIG9mZnNldCk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgV2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4g
ImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4K
ICAgICAgICAgLy8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRsZXJzLCB3ZSBjYW4ganVz
dCBsZXQgdGhlIGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4IGlzIDAu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcyMTAKICAgICAgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6c2lnbmF0
dXJlSW5kZXgpID09IHNpemVvZih1aW50NjRfdCksICJMb2FkIGNvZGVnZW4gYXNzdW1lcyBpNjQi
KTsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmln
aW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSk7CisgICAgICAgIFZhbHVl
KiBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBz
YWZlQ2FzdDxpbnQzMl90PihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZlNp
Z25hdHVyZUluZGV4KCkpKTsKICAgICAgICAgewogICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hl
Y2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ss
IG9yaWdpbigpLAogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLApAQCAtMjYwMiw3ICszMTM3LDcgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXQKIAogICAgICAgICAvLyBDaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNo
ZXMgdGhlIHZhbHVlIHdlIGV4cGVjdC4KICAgICAgICAgewotICAgICAgICAgICAgRXhwcmVzc2lv
blR5cGUgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZSkpOworICAgICAgICAgICAgVmFsdWUqIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmUpKTsKICAgICAgICAgICAgIENo
ZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPiht
X3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBvcmlnaW4oKSwgY2FsbGVlU2lnbmF0
dXJlSW5kZXgsIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpKTsKIApAQCAtMjYxNiw3ICszMTUxLDcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRl
eCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKICAgICAgICAgY2FsbGVlSW5kZXgsIGNvbnN0YW50
KHBvaW50ZXJUeXBlKCksIHNpemVvZihJbnN0YW5jZSopKSk7CiAgICAgVmFsdWUqIGNhbGxlZUlu
c3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBpbnN0YW5jZXNCdWZmZXIsIG9m
ZnNldCkpOwotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdp
bigpLAorICAgIFZhbHVlKiBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBw
b2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKICAgICAgICAgICAgIHNh
ZmVDYXN0PGludDMyX3Q+KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50
cnlwb2ludExvYWRMb2NhdGlvbigpKSkpOwogCkBAIC0yNjI1LDcgKzMxNjAsNyBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxSZWYoY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3Vs
dExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBFeHByZXNzaW9uVHlwZSBj
YWxsZWUgPSBhcmdzLnRha2VMYXN0KCk7CisgICAgVmFsdWUqIGNhbGxlZSA9IGdldChhcmdzLnRh
a2VMYXN0KCkpOwogICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Mu
c2l6ZSgpKTsKICAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOwogCkBAIC0yNjQyLDI0ICszMTc3LDI3
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlCiAgICAgVmFsdWUqIGNhbGxlZUluc3RhbmNlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBqc0NhbGxlZUluc3RhbmNlLCBpbnN0YW5jZU9m
ZnNldCkpOwogCi0gICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksCisgICAgVmFsdWUqIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsZWUsCiAgICAgICAgICAgICBzYWZlQ2FzdDxp
bnQzMl90PihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExv
Y2F0aW9uKCkpKSk7CiAKICAgICByZXR1cm4gZW1pdEluZGlyZWN0Q2FsbChjYWxsZWVJbnN0YW5j
ZSwgY2FsbGVlQ29kZSwgc2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKTsKIH0KIAotdm9pZCBCM0lS
R2VuZXJhdG9yOjp1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSBwaGksIGNvbnN0IEV4cHJlc3Np
b25UeXBlIHNvdXJjZSkKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnkoVmFsdWUqIHBoaSwgY29u
c3QgRXhwcmVzc2lvblR5cGUgc291cmNlKQogewotICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzb3VyY2UsIHBoaSk7CisgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGdl
dChzb3VyY2UpLCBwaGkpOwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0
aEJsb2NrKGNvbnN0IFN0YWNrJiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0
KQordm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYg
cmVzdWx0U3RhY2ssIGNvbnN0IENvbnRyb2xEYXRhJiBibG9jaykKIHsKLSAgICBBU1NFUlQocmVz
dWx0LnNpemUoKSA8PSByZXN1bHRTdGFjay5zaXplKCkpOworICAgIGNvbnN0IFZlY3RvcjxWYWx1
ZSo+JiBwaGlzID0gYmxvY2sucGhpczsKKyAgICBzaXplX3QgcmVzdWx0U2l6ZSA9IHBoaXMuc2l6
ZSgpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIHVuaWZ5KHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0gMSAtIGldLCByZXN1bHRTdGFjay5h
dChyZXN1bHRTdGFjay5zaXplKCkgLSAxIC0gaSkpOworICAgIEFTU0VSVChyZXN1bHRTaXplIDw9
IHJlc3VsdFN0YWNrLnNpemUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3Vs
dFNpemU7ICsraSkKKyAgICAgICAgdW5pZnkocGhpc1tyZXN1bHRTaXplIC0gMSAtIGldLCByZXN1
bHRTdGFjay5hdChyZXN1bHRTdGFjay5zaXplKCkgLSAxIC0gaSkpOwogfQogCiBzdGF0aWMgdm9p
ZCBkdW1wRXhwcmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEIz
SVJHZW5lcmF0b3I6OlN0YWNrJiBleHByZXNzaW9uU3RhY2spCkBAIC0yNzAzLDggKzMyNDEsMTEg
QEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkMKIAogICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJl
ZGRlckVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAgICBjb21w
aWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVy
cz4oKTsKKyAgICBjb21waWxhdGlvbkNvbnRleHQucHJvY2VkdXJlID0gbWFrZVVuaXF1ZTxQcm9j
ZWR1cmU+KCk7CisKKyAgICBQcm9jZWR1cmUmIHByb2NlZHVyZSA9ICpjb21waWxhdGlvbkNvbnRl
eHQucHJvY2VkdXJlOwogCi0gICAgUHJvY2VkdXJlIHByb2NlZHVyZTsKKyAgICBjb21waWxhdGlv
bkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsK
IAogICAgIHByb2NlZHVyZS5zZXRPcmlnaW5QcmludGVyKFtdIChQcmludFN0cmVhbSYgb3V0LCBP
cmlnaW4gb3JpZ2luKSB7CiAgICAgICAgIGlmIChvcmlnaW4uZGF0YSgpKQpAQCAtMjcyNSw2ICsz
MjY2LDcgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJp
bmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkMKICAgICBGdW5jdGlvblBhcnNlcjxCM0lS
R2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5j
dGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKIAorICAgIGlyR2VuZXJhdG9yLmluc2VydEVudHJ5
U3dpdGNoKCk7CiAgICAgaXJHZW5lcmF0b3IuaW5zZXJ0Q29uc3RhbnRzKCk7CiAKICAgICBwcm9j
ZWR1cmUucmVzZXRSZWFjaGFiaWxpdHkoKTsKQEAgLTI3MzYsMTggKzMyNzgsNDMgQEAgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZShDb21waWxhdGlvbkMKICAgICBkYXRhTG9nSWYoV2FzbUIzSVJHZW5lcmF0b3JJbnRlcm5h
bDo6dmVyYm9zZSwgIlBvc3QgU1NBOiAiLCBwcm9jZWR1cmUpOwogICAgIAogICAgIHsKKyAgICAg
ICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjb21waWxhdGlvbk1vZGUpKQorICAgICAg
ICAgICAgcHJvY2VkdXJlLmNvZGUoKS5zZXREaXNhc3NlbWJsZXIobWFrZVVuaXF1ZTxCMzo6QWly
OjpEaXNhc3NlbWJsZXI+KCkpOwogICAgICAgICBCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJv
Y2VkdXJlKTsKICAgICAgICAgQjM6OmdlbmVyYXRlKHByb2NlZHVyZSwgKmNvbXBpbGF0aW9uQ29u
dGV4dC53YXNtRW50cnlwb2ludEpJVCk7CiAgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNt
RW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKICAg
ICAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jZWR1cmUu
Y2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CiAgICAgfQogCisgICAgcmVzdWx0LT5z
dGFja21hcHMgPSBpckdlbmVyYXRvci50YWtlU3RhY2ttYXBzKCk7CisgICAgcmVzdWx0LT5leGNl
cHRpb25IYW5kbGVycyA9IGlyR2VuZXJhdG9yLnRha2VFeGNlcHRpb25IYW5kbGVycygpOworCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucyhWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiBo
YW5kbGVycywgY29uc3QgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIGNvbnN0IENvbXBpbGF0
aW9uQ29udGV4dCYgY29udGV4dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBpZiAo
IWNvbnRleHQucHJvY2VkdXJlKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBlbnRy
eXBvaW50SW5kZXggPSAwOworICAgIHVuc2lnbmVkIG51bUVudHJ5cG9pbnRzID0gY29udGV4dC5w
cm9jZWR1cmUtPm51bUVudHJ5cG9pbnRzKCk7CisgICAgZm9yIChjb25zdCBVbmxpbmtlZEhhbmRs
ZXJJbmZvJiBoYW5kbGVySW5mbyA6IGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycykgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeXBvaW50SW5kZXggPCBudW1FbnRyeXBvaW50cyk7Cisg
ICAgICAgIGlmIChoYW5kbGVySW5mby5tX3R5cGUgPT0gSGFuZGxlclR5cGU6OkRlbGVnYXRlKSB7
CisgICAgICAgICAgICBoYW5kbGVycy5hcHBlbmQoeyB9KTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgKytlbnRyeXBvaW50SW5kZXg7CisgICAgICAgIGhhbmRs
ZXJzLmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4o
Y29udGV4dC5wcm9jZWR1cmUtPmNvZGUoKS5lbnRyeXBvaW50TGFiZWwoZW50cnlwb2ludEluZGV4
KSkpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChlbnRyeXBvaW50SW5kZXggPT0gbnVtRW50
cnlwb2ludHMgLSAxKTsKK30KKwogLy8gQ3VzdG9tIHdhc20gb3BzLiBUaGVzZSBhcmUgdGhlIG9u
ZXMgdG9vIG1lc3N5IHRvIGRvIGluIHdhc20uanNvbi4KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjpl
bWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSBvcGVyYXRpb24sIEV4cHJlc3Npb25UeXBl
IGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KQordm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0Q2hl
Y2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSBvcGVyYXRpb24sIFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQpCiB7CiAgICAgQVNTRVJUKG9wZXJhdGlvbiA9PSBEaXYgfHwgb3BlcmF0aW9uID09IE1v
ZCB8fCBvcGVyYXRpb24gPT0gVURpdiB8fCBvcGVyYXRpb24gPT0gVU1vZCk7CiAgICAgY29uc3Qg
QjM6OlR5cGUgdHlwZSA9IGxlZnQtPnR5cGUoKTsKQEAgLTI3NzYsMTA2ICszMzQzLDEyNSBAQCB2
b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlIG9wZXJh
dGlvbiwgRXhwcmVzc2lvblR5cGUgbAogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lv
blR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPihFeHByZXNzaW9uVHlwZSBs
ZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBEaXY7CisgICAg
VmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0
VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmln
aW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMlJlbVM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhw
cmVzc2lvblR5cGUgcmlnaHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gTW9kOworICAgIFZhbHVlKiBsZWZ0
ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVlKiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAg
ZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigp
LCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMkRpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJp
Z2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwg
RXhwcmVzc2lvblR5cGUgcmlnaHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVURpdjsKKyAgICBWYWx1ZSog
bGVmdCA9IGdldChsZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwog
ICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBs
ZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4g
eyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyUmVtVT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9u
VHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAog
ewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBVTW9kOworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0
KGxlZnRWYXIpOworICAgIFZhbHVlKiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENo
ZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0
KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCkpOwogICAgIHJldHVybiB7IH07CiB9CiAK
IHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZTPihF
eHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NERpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0
VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29u
c3QgQjM6Ok9wY29kZSBvcCA9IERpdjsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChsZWZ0VmFyKTsK
KyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVja3NGb3JNb2RP
ckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVz
dWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+
Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtUz4oRXhwcmVzc2lvblR5
cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1T
PihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNv
ZGUgb3AgPSBNb2Q7CisgICAgVmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUq
IHJpZ2h0ID0gZ2V0KHJpZ2h0VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxl
ZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQg
PSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hpbGwob3Ap
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0
ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2VT4oRXhwcmVzc2lv
blR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRE
aXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpP
cGNvZGUgb3AgPSBVRGl2OworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZh
bHVlKiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9w
LCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBw
dXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigp
LCBsZWZ0LCByaWdodCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0
LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVU+KEV4cHJl
c3Npb25UeXBlIGxlZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9
IFVNb2Q7CisgICAgVmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0
ID0gZ2V0KHJpZ2h0VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJp
Z2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyQ3R6PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7
CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKICAgICBwYXRj
aHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJv
czMyKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRj
aHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9p
bnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQog
CiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25U
eXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewor
ICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9j
LCBJbnQ2NCwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVw
OjpTb21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewog
ICAgICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zNjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNb
MF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNo
cG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChh
cmdWYXIpOwogI2lmIENQVShYODZfNjQpCiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0
c0NvdW50UG9wdWxhdGlvbigpKSB7CiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIElu
dDMyLCBvcmlnaW4oKSk7CkBAIC0yODg0LDE5ICszNDcwLDIwIEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmCiAgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uMzIocGFyYW1zWzFdLmdwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICB9KTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAg
ICAgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAjZW5kaWYKIAogICAgIFZhbHVlKiBmdW5jQWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uUG9wY291bnQzMikpOwotICAgIHJlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCks
IEVmZmVjdHM6Om5vbmUoKSwgZnVuY0FkZHJlc3MsIGFyZyk7CisgICAgcmVzdWx0ID0gcHVzaCht
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdp
bigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpKTsKICAgICByZXR1cm4geyB9
OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
UG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+
KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICNpZiBDUFUoWDg2XzY0
KQogICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNDb3VudFBvcHVsYXRpb24oKSkgewog
ICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOwpAQCAtMjkw
NSwxOSArMzQ5MiwyMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9w
Y250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJgogICAgICAgICAgICAgaml0
LmNvdW50UG9wdWxhdGlvbjY0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAg
ICAgICAgfSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
Ci0gICAgICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgICAgIHJlc3VsdCA9IHB1c2gocGF0
Y2hwb2ludCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogI2VuZGlmCiAKICAgICBWYWx1
ZSogZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
blBvcGNvdW50NjQpKTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEND
YWxsVmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNB
ZGRyZXNzLCBhcmcpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLCBm
dW5jQWRkcmVzcywgYXJnKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPEY2NENvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0g
Z2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBvcmlnaW4o
KSk7CiAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJl
Z2lzdGVycyA9IDE7CkBAIC0yOTMyLDEzICszNTIwLDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlCiAjZW5kaWYKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6
bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRj
aHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSog
YXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIG9y
aWdpbigpKTsKICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3Jh
dGNoUmVnaXN0ZXJzID0gMTsKQEAgLTI5NTMsNjUgKzM1NDIsNzAgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb24KICNlbmRpZgogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZl
Y3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNo
KHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJn
ID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBvcmln
aW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cik7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5y
b3VuZFRvd2FyZE5lYXJlc3RJbnREb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnBy
KCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQp
OwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGMzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zh
cik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIG9yaWdpbigpKTsKICAgICBw
YXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRj
aHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LnJvdW5kVG93YXJkTmVh
cmVzdEludEZsb2F0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKICAgICB9KTsK
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9
IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4g
eyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjY0VHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFRydW5j
PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50
VmFsdWU+KG1fcHJvYywgRG91YmxlLCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
KGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5yb3VuZFRvd2FyZFplcm9Eb3VibGUocGFyYW1zWzFd
LmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVj
dHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1
bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4K
LWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyVHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZ1Zh
ciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVl
KiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBGbG9hdCwg
b3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVn
aXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBq
aXQucm91bmRUb3dhcmRaZXJvRmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkp
OwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0g
ICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwog
ICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMlRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdW
YXIpOwogICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4oLXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6
bWluKCkpKSk7CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0
PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1pbigpKSAtIDEuMCkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMwMjgs
MTMgKzM2MjIsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5j
U0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5j
YXRlRG91YmxlVG9JbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAg
fSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1
bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyVHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAg
ICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1z
dGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7
CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+
KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkp
KTsKICAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCkBAIC0zMDUxLDE0ICszNjQ2LDE1IEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5CiAgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9JbnQzMihw
YXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50Owor
ICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogCiB0
ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4
cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0g
Y29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJs
ZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogLTIuMCkpOwogICAgIFZh
bHVlKiBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkp
OwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMwNzUsMTMgKzM2NzEsMTQgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2ND4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50MzIo
cGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsK
KyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRl
bXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUYzMj4oRXhw
cmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXggPSBj
b25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KC0yLjApKSk7CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8
dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PigtMS4wKSkpOwogICAgIFZhbHVlKiBvdXRPZkJv
dW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBv
cmlnaW4oKSwKQEAgLTMwOTgsMTMgKzM2OTUsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkK
ICAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFt
c1swXS5ncHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6
Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0
Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJn
ID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lz
ZV9jYXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRz
PGludDY0X3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQoRG91YmxlLCBi
aXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAt
MzEyMSwxMyArMzcxOSwxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQu
dHJ1bmNhdGVEb3VibGVUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsK
ICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAg
IHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAg
ICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFy
KTsKICAgICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0
X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWlu
KCkpICogLTIuMCkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4oLTEuMCkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMx
NjQsMTMgKzM3NjMsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRy
dW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRy
dW5jYXRlRG91YmxlVG9VaW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNj
cmF0Y2gsIGNvbnN0YW50KTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZm
ZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVz
aChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZ1Zh
ciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVl
KiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDY0X3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQoRmxvYXQs
IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50NjRfdD46Om1pbigpKSkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAg
LTMxODcsMTMgKzM3ODcsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0
LnRydW5jYXRlRmxvYXRUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsK
ICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAg
IHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAg
ICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFy
KTsKICAgICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJf
dD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigp
KSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFu
dChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkp
KTsKICAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCkBAIC0zMjMwLDcgKzM4MzEsNyBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDY0KHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CiAgICAg
fSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1
bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmgKaW5kZXggMWQ2NjIxMGUxYjUwNDNhOWE0MWZhNjEzZjUyMjQ5M2FlZTMwNzQ3YS4u
Mjg5MWQxZTQ0ZjNhZjM3ZDg2MTkzNDY2ZjlkYzk3ZTZiOGRkNjE5YSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCkBAIC00MCw3ICs0MCwxMyBA
QAogCiBleHRlcm4gIkMiIHZvaWQgZHVtcFByb2NlZHVyZSh2b2lkKik7CiAKLW5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgV2FzbSB7CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEIzIHsK
K2NsYXNzIFByb2NlZHVyZTsKK30KKworbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBNZW1vcnlJ
bmZvcm1hdGlvbjsKIApAQCAtNDgsMTAgKzU0LDEzIEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRl
eHQgewogICAgIHN0ZDo6dW5pcXVlX3B0cjxDQ2FsbEhlbHBlcnM+IGVtYmVkZGVyRW50cnlwb2lu
dEpJVDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0NhbGxIZWxwZXJzPiB3YXNtRW50cnlwb2ludEpJ
VDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gd2FzbUVudHJ5cG9pbnRC
eXByb2R1Y3RzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6UHJvY2VkdXJlPiBwcm9jZWR1cmUg
eyBudWxscHRyIH07CiB9OwogCiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0
IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9
IG51bGxwdHIpOwogCit2b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKFZlY3Rv
cjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBj
b25zdCBJbnRlcm5hbEZ1bmN0aW9uKiwgY29uc3QgQ29tcGlsYXRpb25Db250ZXh0JiwgTGlua0J1
ZmZlciYpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZX0IzSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJCUVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBs
YW4uY3BwCmluZGV4IGFmMmZjNzJiYWNiYjM0YzhiMzM1NzhkOTA3YjM3YzYwMjQwZmI5ZmIuLjQ2
NmEyNjBiZmYyNDhiZGI0MjU5M2IwNGM3MDdlNWZiODkxZWFhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKQEAgLTY2LDYgKzY2LDcgQEAgYm9vbCBCQlFQ
bGFuOjpwcmVwYXJlSW1wbCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fd2FzbUlu
dGVybmFsRnVuY3Rpb25zLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX2V4Y2VwdGlv
bkhhbmRsZXJMb2NhdGlvbnMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fY29tcGls
YXRpb25Db250ZXh0cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV90aWVyVXBDb3Vu
dHMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogCkBAIC0xMDksNiArMTEwLDkgQEAgdm9pZCBC
QlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAorICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPj4gZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBmdW5jdGlvbi5nZXQoKSwg
Y29udGV4dCwgbGlua0J1ZmZlcik7CisKICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlID0g
bV9mdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3Vu
dCgpOwogICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbbV9mdW5jdGlvbkluZGV4XTsK
ICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoc2lnbmF0dXJlSW5kZXgpOwpAQCAtMTE4LDcgKzEyMiw3IEBAIHZvaWQgQkJRUGxhbjo6d29y
ayhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgIHsKLSAgICAgICAgUmVmPEJCUUNhbGxl
ZT4gY2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2lu
dCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24t
PmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKHRpZXJVcCksIFdURk1vdmUodW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMpKTsKKyAgICAgICAgUmVmPEJCUUNhbGxlZT4gY2FsbGVlID0gQkJR
Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbklu
ZGV4U3BhY2UpLCBXVEZNb3ZlKHRpZXJVcCksIFdURk1vdmUodW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5leGNl
cHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOwogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVM
b2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKICAgICAgICAgQVNT
RVJUKCFtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0pOwogICAgICAg
ICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7CkBAIC0xOTQsMTEgKzE5OCwxNSBA
QCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gQkJRUGxhbjo6Y29tcGlsZUZ1bmN0
aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZQogICAgIGJvb2wgZm9yY2VVc2luZ0IzID0gZmFsc2U7
CiAgICAgaWYgKE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpICYmIG1f
bW9kdWxlSW5mb3JtYXRpb24tPmNvZGVTZWN0aW9uU2l6ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJs
eUJCUUFpck1vZGVUaHJlc2hvbGQoKSkKICAgICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKKyAg
ICBlbHNlIGlmICghbV9tb2R1bGVJbmZvcm1hdGlvbi0+bV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNl
cHRpb25zLnF1aWNrR2V0KGZ1bmN0aW9uSW5kZXgpKQorICAgICAgICBmb3JjZVVzaW5nQjMgPSB0
cnVlOworICAgIGVsc2UgaWYgKCFPcHRpb25zOjp3YXNtQkJRVXNlc0FpcigpKQorICAgICAgICBm
b3JjZVVzaW5nQjMgPSB0cnVlOwogCi0gICAgaWYgKCFmb3JjZVVzaW5nQjMgJiYgT3B0aW9uczo6
d2FzbUJCUVVzZXNBaXIoKSkKLSAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VB
bmRDb21waWxlQWlyKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5k
ZXgsIHRpZXJVcCk7Ci0gICAgZWxzZQorICAgIGlmIChmb3JjZVVzaW5nQjMpCiAgICAgICAgIHBh
cnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwg
c2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6
OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCk7CisgICAgZWxzZQor
ICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIoY29udGV4
dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIAogICAg
IGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBMb2NrZXIg
bG9ja2VyIHsgbV9sb2NrIH07CkBAIC0yMjIsMTMgKzIzMCwxNSBAQCB2b2lkIEJCUVBsYW46OmRp
ZENvbXBsZXRlQ29tcGlsYXRpb24oKQogICAgICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVu
Y3Rpb25Db3VudCgpOwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKICAgICAgICAgeworICAg
ICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0
aW9uc1tmdW5jdGlvbkluZGV4XS5nZXQoKTsKICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6V2FzbSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAg
QmFzZTo6ZmFpbChtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rp
b24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fd2FzbUludGVy
bmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFr
ZVVuaXF1ZTxDb21waWxhdGlvbj4oCisgICAgICAgICAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxl
ckxvY2F0aW9ucyhtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0sIGZ1
bmN0aW9uLCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5lbnRy
eXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4oCiAgICAgICAgICAg
ICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldl
YkFzc2VtYmx5IEJCUSBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNp
Z25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1l
KGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdl
dChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAg
IFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgfQpA
QCAtMjcyLDcgKzI4Miw3IEBAIHZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3Qg
Q2FsbGVlSW5pdGlhbGl6ZXImIGNhbGxiYWNrKQogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24q
IGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4
XS5nZXQoKTsKICAgICAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGludGVybmFsRnVu
Y3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsK
LSAgICAgICAgUmVmPEJCUUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6
OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNl
LCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFj
ZSksIFdURk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1v
dmUobV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7Cisg
ICAgICAgIFJlZjxCQlFDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gQkJRQ2FsbGVlOjpj
cmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwg
bV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2Up
LCBXVEZNb3ZlKG1fdGllclVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3Zl
KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1v
dmUoZnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRs
ZXJzKSwgV1RGTW92ZShtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbaW50ZXJuYWxGdW5jdGlv
bkluZGV4XSkpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rp
b24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50cnlwb2lu
dENhbGxlZS5wdHIoKSkpOwogCiAgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRl
eCwgV1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBv
aW50Q2FsbGVlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QkJRUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAppbmRl
eCBkYmVmYzU0YWQ3NTAwNWE3MGQxZTFhZjk2MDAwMTc0ZjhlY2JkYjNmLi5kYzAwMjI3NTY2MjI1
MWI4YWIwZjA3ZGVhYjA5ODZlOTdjZmU2YTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuLmgKQEAgLTgzLDYgKzgzLDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIENvbXBpbGF0aW9uQ29udGV4dCYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYsIFRpZXJVcENvdW50Kik7CiAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEludGVybmFs
RnVuY3Rpb24+PiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uczsKKyAgICBWZWN0b3I8VmVjdG9yPENv
ZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+Pj4gbV9leGNlcHRpb25IYW5k
bGVyTG9jYXRpb25zOwogICAgIEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbnRl
cm5hbEZ1bmN0aW9uPiwgRGVmYXVsdEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rp
b25zOwogICAgIFZlY3RvcjxDb21waWxhdGlvbkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0
czsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50Pj4gbV90aWVyVXBDb3Vu
dHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwCmluZGV4IDIxZDk3
YjEzY2VlMGM2NWUxNjMxYzc2ZDI1ODkzMzMzNTMyZWU5NDAuLmI0NjZiN2ZjZWI4MGEzZTI3Mjc5
OWYzNzVmYWQwYmRkYWFiZDk0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21DYWxsZWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
YWxsZWUuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
KyNpbmNsdWRlICJMTEludEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlUmVnaXN0
cnkuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKIApAQCAtNTYsNiArNTcs
MTIgQEAgdm9pZCBDYWxsZWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBvdXQu
cHJpbnQobWFrZVN0cmluZyhtX2luZGV4T3JOYW1lKSk7CiB9CiAKK2NvbnN0IEhhbmRsZXJJbmZv
KiBDYWxsZWU6OmhhbmRsZXJGb3JJbmRleChJbnN0YW5jZSYgaW5zdGFuY2UsIHVuc2lnbmVkIGlu
ZGV4LCBjb25zdCBUYWcqIHRhZykKK3sKKyAgICBBU1NFUlQoaGFzRXhjZXB0aW9uSGFuZGxlcnMo
KSk7CisgICAgcmV0dXJuIEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgoaW5zdGFuY2UsIG1f
ZXhjZXB0aW9uSGFuZGxlcnMsIGluZGV4LCB0YWcpOworfQorCiBKSVRDYWxsZWU6OkpJVENhbGxl
ZShXYXNtOjpDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCBFbnRyeXBvaW50JiYgZW50
cnlwb2ludCkKICAgICA6IENhbGxlZShjb21waWxhdGlvbk1vZGUpCiAgICAgLCBtX2VudHJ5cG9p
bnQoV1RGTW92ZShlbnRyeXBvaW50KSkKQEAgLTY5LDYgKzc2LDMyIEBAIEpJVENhbGxlZTo6SklU
Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5cG9pbnQm
JiBlbnRyeXBvCiB7CiB9CiAKK0xMSW50Q2FsbGVlOjpMTEludENhbGxlZShzdGQ6OnVuaXF1ZV9w
dHI8RnVuY3Rpb25Db2RlQmxvY2s+IGNvZGVCbG9jaywgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8
Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKKyAgICA6IENhbGxlZShX
YXNtOjpDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCisg
ICAgLCBtX2NvZGVCbG9jayhXVEZNb3ZlKGNvZGVCbG9jaykpCit7CisgICAgbGlua0V4Y2VwdGlv
bkhhbmRsZXJzKCk7Cit9CisKK3ZvaWQgTExJbnRDYWxsZWU6OmxpbmtFeGNlcHRpb25IYW5kbGVy
cygpCit7CisgICAgaWYgKHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2Vw
dGlvbkhhbmRsZXJzKCkpIHsKKyAgICAgICAgbV9leGNlcHRpb25IYW5kbGVycy5yZXNpemVUb0Zp
dChjb3VudCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewor
ICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0g
bV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICBIYW5kbGVySW5m
byYgaGFuZGxlciA9IG1fZXhjZXB0aW9uSGFuZGxlcnNbaV07CisgICAgICAgICAgICBhdXRvJiBp
bnN0cnVjdGlvbiA9ICptX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5k
bGVyLm1fdGFyZ2V0KS5wdHIoKTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+IHRhcmdldDsKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZEhhbmRs
ZXIubV90eXBlID09IEhhbmRsZXJUeXBlOjpDYXRjaCkKKyAgICAgICAgICAgICAgICB0YXJnZXQg
PSBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6aGFuZGxl
V2FzbUNhdGNoKGluc3RydWN0aW9uLndpZHRoPFdhc21PcGNvZGVUcmFpdHM+KCkpLmNvZGUoKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gQ29kZUxvY2F0aW9u
TGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZVdhc21DYXRjaEFsbChp
bnN0cnVjdGlvbi53aWR0aDxXYXNtT3Bjb2RlVHJhaXRzPigpKS5jb2RlKCkpOworCisgICAgICAg
ICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCB0YXJnZXQpOworICAgICAg
ICB9CisgICAgfQorfQorCiB2b2lkIExMSW50Q2FsbGVlOjpzZXRFbnRyeXBvaW50KE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQpCiB7CiAgICAgbV9lbnRy
eXBvaW50ID0gZW50cnlwb2ludDsKQEAgLTEwNCw2ICsxMzcsMzYgQEAgc3RkOjp0dXBsZTx2b2lk
Kiwgdm9pZCo+IExMSW50Q2FsbGVlOjpyYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJuIHsgbnVsbHB0
ciwgbnVsbHB0ciB9OwogfQogCit2b2lkIE9wdGltaXppbmdKSVRDYWxsZWU6OmxpbmtFeGNlcHRp
b25IYW5kbGVycygpCit7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZEV4Y2VwdGlvbkhh
bmRsZXJzLnNpemUoKTsKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgSGFu
ZGxlckluZm8mIGhhbmRsZXIgPSBtX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOworICAgICAgICBjb25z
dCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkRXhjZXB0
aW9uSGFuZGxlcnNbaV07CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+IGxvY2F0aW9uID0gbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zW2ldOworICAg
ICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBsb2NhdGlvbik7CisgICAg
fQorICAgIG1fdW5saW5rZWRFeGNlcHRpb25IYW5kbGVycy5jbGVhcigpOworICAgIG1fZXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9ucy5jbGVhcigpOworfQorCitjb25zdCBWZWN0b3I8T1NSRW50cnlW
YWx1ZT4mIE9wdGltaXppbmdKSVRDYWxsZWU6OnN0YWNrbWFwKENhbGxTaXRlSW5kZXggY2FsbFNp
dGVJbmRleCkgY29uc3QKK3sKKyAgICBhdXRvIGl0ZXIgPSBtX3N0YWNrbWFwcy5maW5kKGNhbGxT
aXRlSW5kZXgpOworICAgIGlmIChpdGVyID09IG1fc3RhY2ttYXBzLmVuZCgpKSB7CisgICAgICAg
IGZvciAoYXV0byBwYWlyIDogbV9zdGFja21hcHMpIHsKKyAgICAgICAgICAgIGRhdGFMb2cocGFp
ci5rZXkuYml0cygpLCAiOiAiKTsKKyAgICAgICAgICAgIGZvciAoYXV0byB2YWx1ZSA6IHBhaXIu
dmFsdWUpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh2YWx1ZSwgIiwgIik7CisgICAgICAgICAg
ICBkYXRhTG9nTG4oIiIpOworICAgICAgICB9CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKGl0
ZXIgIT0gbV9zdGFja21hcHMuZW5kKCkpOworICAgIHJldHVybiBpdGVyLT52YWx1ZTsKK30KKwor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCmluZGV4IDA4MWRiNzZl
NDJmOWU0MGU0M2I5MmM5ODJhZmNkOGNlOTUwYmIxZTEuLjdkNjlkNjI2ZDhjM2YwZDkzN2UxZDBi
NTAyNTAzYzk0YjViZjE1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21DYWxsZWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVl
LmgKQEAgLTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlICJXYXNtQ29tcGlsYXRpb25Nb2RlLmgiCiAj
aW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIldhc21IYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIldhc21JbmRleE9yTmFt
ZS5oIgorI2luY2x1ZGUgIldhc21MTEludFRpZXJVcENvdW50ZXIuaCIKICNpbmNsdWRlICJXYXNt
VGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIApA
QCAtNTksNiArNjEsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSA9IDA7CiAgICAgdmlydHVhbCBzdGQ6OnR1cGxlPHZv
aWQqLCB2b2lkKj4gcmFuZ2UoKSBjb25zdCA9IDA7CiAKKyAgICBjb25zdCBIYW5kbGVySW5mbyog
aGFuZGxlckZvckluZGV4KEluc3RhbmNlJiwgdW5zaWduZWQsIGNvbnN0IFRhZyopOworCisgICAg
Ym9vbCBoYXNFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuICEhbV9leGNlcHRpb25I
YW5kbGVycy5zaXplKCk7IH0KKwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKICAgICB2
aXJ0dWFsIHZvaWQgc2V0T1NSRW50cnlDYWxsZWUoUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiYm
KQogICAgIHsKQEAgLTY4LDYgKzc0LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIEZ1bmN0aW9uQ29kZUJsb2NrKiBmdW5jdGlv
bkNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogcHJvdGVjdGVkOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUsIHNpemVfdCwgc3RkOjpwYWly
PGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmKTsKQEAgLTc1LDYgKzgzLDkgQEAg
cHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBDb21waWxhdGlvbk1vZGUgbV9jb21waWxhdGlvbk1v
ZGU7CiAgICAgSW5kZXhPck5hbWUgbV9pbmRleE9yTmFtZTsKKworcHJvdGVjdGVkOgorICAgIFZl
Y3RvcjxIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKIH07CiAKIGNsYXNzIEpJVENh
bGxlZSA6IHB1YmxpYyBDYWxsZWUgewpAQCAtOTksNjQgKzExMCw4NiBAQCBwcml2YXRlOgogICAg
IFdhc206OkVudHJ5cG9pbnQgbV9lbnRyeXBvaW50OwogfTsKIAotI2lmIEVOQUJMRShXRUJBU1NF
TUJMWV9CM0pJVCkKLWNsYXNzIE9NR0NhbGxlZSBmaW5hbCA6IHB1YmxpYyBKSVRDYWxsZWUgewor
Y2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlIGZpbmFsIDogcHVibGljIEpJVENhbGxlZSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxPTUdDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBv
aW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJl
ZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiYgdW5saW5rZWRDYWxscykKKyAgICBzdGF0aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4
LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXVEZNb3ZlKGVudHJ5cG9p
bnQpKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIE9NR0NhbGxlZShXYXNtOjpFbnRyeXBvaW50
JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0
cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYg
dW5saW5rZWRDYWxscykKLSAgICAgICAgOiBKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2Rl
OjpPTUdNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZSh1bmxpbmtlZENhbGxzKSkKKyAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoV2FzbTo6
RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCisgICAgICAgIDogSklUQ2FsbGVlKFdhc206OkNvbXBp
bGF0aW9uTW9kZTo6RW1iZWRkZXJFbnRyeXBvaW50TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSkK
ICAgICB7CiAgICAgfQogfTsKIAotY2xhc3MgT01HRm9yT1NSRW50cnlDYWxsZWUgZmluYWwgOiBw
dWJsaWMgSklUQ2FsbGVlIHsKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKK2NsYXNz
IE9wdGltaXppbmdKSVRDYWxsZWUgOiBwdWJsaWMgSklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYm
IGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8
TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUs
IHVpbnQzMl90IGxvb3BJbmRleCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5s
aW5rZWRDYWxscykKKyAgICBjb25zdCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4mIHN0YWNrbWFwKENh
bGxTaXRlSW5kZXgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgT3B0aW1pemluZ0pJVENhbGxl
ZShXYXNtOjpDb21waWxhdGlvbk1vZGUgbW9kZSwgV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9p
bnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rp
b24+PiYmIG5hbWUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2Fs
bHMsIEhhc2hNYXA8Q2FsbFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNr
bWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZl
Y3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKQorICAgICAgICA6IEpJVENhbGxlZShtb2RlLCBXVEZNb3ZlKGVu
dHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkK
KyAgICAgICAgLCBtX3N0YWNrbWFwcyhXVEZNb3ZlKHN0YWNrbWFwcykpCisgICAgICAgICwgbV91
bmxpbmtlZEV4Y2VwdGlvbkhhbmRsZXJzKFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpKQorICAg
ICAgICAsIG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRs
ZXJMb2NhdGlvbnMpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HRm9y
T1NSRW50cnlDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSks
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGxvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENh
bGxzKSkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkRXhjZXB0aW9uSGFuZGxl
cnMuc2l6ZSgpID09IG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucy5zaXplKCkpOworICAgICAg
ICBsaW5rRXhjZXB0aW9uSGFuZGxlcnMoKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBvc3JFbnRy
eVNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplOyB9Ci0gICAgdWludDMyX3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9sb29w
SW5kZXg7IH0KLQogcHJpdmF0ZToKLSAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShXYXNtOjpFbnRy
eXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSos
IFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mJiB1bmxpbmtlZENhbGxzKQotICAgICAgICA6IEpJVENhbGxlZShXYXNtOjpDb21waWxhdGlv
bk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdU
Rk1vdmUobmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxscykpCi0gICAgICAgICwgbV9vc3JFbnRy
eVNjcmF0Y2hCdWZmZXJTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCi0gICAgICAgICwg
bV9sb29wSW5kZXgobG9vcEluZGV4KQorICAgIHZvaWQgbGlua0V4Y2VwdGlvbkhhbmRsZXJzKCk7
CisKKyAgICBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4gbV9z
dGFja21hcHM7CisgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fdW5saW5rZWRFeGNl
cHRpb25IYW5kbGVyczsKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4+IG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKK307CisKK2NsYXNzIE9N
R0NhbGxlZSBmaW5hbCA6IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPE9NR0NhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBv
aW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0
aW9uPj4mJiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENh
bGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFj
a21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBW
ZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9ucykKICAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE9NR0NhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlv
bkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkpOwogICAgIH0K
IAotICAgIHVuc2lnbmVkIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKLSAgICB1aW50MzJf
dCBtX2xvb3BJbmRleDsKK3ByaXZhdGU6CisgICAgT01HQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQm
JiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRy
PE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1
bmxpbmtlZENhbGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVl
Pj4mJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhh
bmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+
JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2Fs
bGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwg
aW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3Rh
Y2ttYXBzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucykpCisgICAgeworICAgIH0KIH07Ci0jZW5kaWYKIAotY2xhc3MgRW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlIGZpbmFsIDogcHVibGljIEpJVENhbGxlZSB7CitjbGFzcyBPTUdG
b3JPU1JFbnRyeUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKFdh
c206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQorICAgIHN0YXRpYyBSZWY8T01HRm9yT1NSRW50
cnlDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGlu
ZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwg
dW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4LCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBIYXNoTWFwPENh
bGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMsIFZlY3RvcjxV
bmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0
aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlw
b2ludENhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBX
VEZNb3ZlKG5hbWUpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBsb29wSW5kZXgsIFdURk1v
dmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShleGNlcHRpb25I
YW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpKTsKICAgICB9CiAK
KyAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOyB9CisgICAgdWludDMyX3QgbG9vcEluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9sb29wSW5kZXg7IH0KKwogcHJpdmF0ZToKLSAgICBFbWJlZGRlckVu
dHJ5cG9pbnRDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCi0gICAgICAgIDog
SklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6RW1iZWRkZXJFbnRyeXBvaW50TW9kZSwg
V1RGTW92ZShlbnRyeXBvaW50KSkKKyAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShXYXNtOjpFbnRy
eXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSos
IFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mJiB1bmxpbmtlZENhbGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRy
eVZhbHVlPj4mJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2Vw
dGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5n
SklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBXVEZN
b3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENh
bGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RG
TW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkKKyAgICAgICAgLCBtX29zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKKyAgICAgICAgLCBtX2xv
b3BJbmRleChsb29wSW5kZXgpCiAgICAgewogICAgIH0KKworICAgIHVuc2lnbmVkIG1fb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZTsKKyAgICB1aW50MzJfdCBtX2xvb3BJbmRleDsKIH07CiAKLSNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCi1jbGFzcyBCQlFDYWxsZWUgZmluYWwgOiBwdWJs
aWMgSklUQ2FsbGVlIHsKK2NsYXNzIEJCUUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBPcHRpbWl6aW5n
SklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJCUUNhbGxlZT4gY3JlYXRlKFdh
c206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25z
dCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGll
clVwQ291bnQ+JiYgdGllclVwQ291bnQsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYm
IHVubGlua2VkQ2FsbHMpCisgICAgc3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShXYXNtOjpF
bnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFt
ZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENv
dW50PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxp
bmtlZENhbGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4m
JiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRs
ZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYg
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEJCUUNhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1l
KSwgV1RGTW92ZSh0aWVyVXBDb3VudCksIFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQkJRQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGlu
ZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50KSwgV1RGTW92ZSh1bmxpbmtl
ZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwg
V1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkpOwogICAgIH0KIAogICAgIE9NR0Zv
ck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSgpIHsgcmV0dXJuIG1fb3NyRW50cnlDYWxs
ZWUuZ2V0KCk7IH0KQEAgLTE3Nyw4ICsyMTAsOCBAQCBwdWJsaWM6CiAgICAgVGllclVwQ291bnQq
IHRpZXJVcENvdW50KCkgeyByZXR1cm4gbV90aWVyVXBDb3VudC5nZXQoKTsgfQogCiBwcml2YXRl
OgotICAgIEJCUUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGlu
ZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwg
c3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQotICAgICAgICA6IEpJVENhbGxlZShX
YXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4
LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKQorICAgIEJCUUNhbGxlZShX
YXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29u
c3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRp
ZXJVcENvdW50PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
JiB1bmxpbmtlZENhbGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZh
bHVlPj4mJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlv
bkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRh
Zz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5nSklU
Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50
KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUo
c3RhY2ttYXBzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9ucykpCiAgICAgICAgICwgbV90aWVyVXBDb3VudChXVEZNb3ZlKHRpZXJV
cENvdW50KSkKICAgICB7CiAgICAgfQpAQCAtMjE4LDE1ICsyNTEsMTMgQEAgcHVibGljOgogICAg
IH0KIAogICAgIExMSW50VGllclVwQ291bnRlciYgdGllclVwQ291bnRlcigpIHsgcmV0dXJuIG1f
Y29kZUJsb2NrLT50aWVyVXBDb3VudGVyKCk7IH0KKyAgICBGdW5jdGlvbkNvZGVCbG9jayogZnVu
Y3Rpb25Db2RlQmxvY2soKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsg
fQogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgTExJbnRDYWxsZWUoc3RkOjp1bmlxdWVfcHRyPEZ1
bmN0aW9uQ29kZUJsb2NrPiBjb2RlQmxvY2ssIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0
IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUpCi0gICAgICAgIDogQ2FsbGVlKFdh
c206OkNvbXBpbGF0aW9uTW9kZTo6TExJbnRNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKLSAg
ICAgICAgLCBtX2NvZGVCbG9jayhXVEZNb3ZlKGNvZGVCbG9jaykpCi0gICAgewotICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX2NvZGVCbG9jayk7Ci0gICAgfQorICAgIExMSW50Q2FsbGVlKHN0ZDo6
dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNv
bnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmKTsKKworICAgIHZvaWQgbGlua0V4Y2Vw
dGlvbkhhbmRsZXJzKCk7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCiAgICAgUmVm
UHRyPEpJVENhbGxlZT4gbV9yZXBsYWNlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKaW5kZXggNmMwMjZlMDhhNDA5ZTk5NWQ0
MzE4ZGZiMTgwNDYyNmQwZmFkMTc1Zi4uN2JmMDAxZWQ5MmVmY2JhZmMwZmJjOGE1MGI0YmY2Mjcy
NWQyY2NlNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxp
bmdDb252ZW50aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxp
bmdDb252ZW50aW9uLmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wg
cmVzdWx0c0luY2x1ZGVJNjQgPSBmYWxzZTsKICAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3Vu
dCA9IDA7CiAgICAgICAgIHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAgICBzaXpl
X3QgYXJnU3RhY2tPZmZzZXQgPSBoZWFkZXJTaXplSW5CeXRlczsKKyAgICAgICAgc2l6ZV90IGFy
Z1N0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6ZUluQnl0ZXMgKyBzaXplb2YoUmVnaXN0ZXIpOwogICAg
ICAgICBpZiAocm9sZSA9PSBDYWxsUm9sZTo6Q2FsbGVyKQogICAgICAgICAgICAgYXJnU3RhY2tP
ZmZzZXQgLT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwogCkBAIC0xMzYsNyArMTM2LDcgQEAg
cHVibGljOgogICAgICAgICB9CiAgICAgICAgIGdwQXJndW1lbnRDb3VudCA9IDA7CiAgICAgICAg
IGZwQXJndW1lbnRDb3VudCA9IDA7Ci0gICAgICAgIHNpemVfdCByZXN1bHRTdGFja09mZnNldCA9
IGhlYWRlclNpemVJbkJ5dGVzOworICAgICAgICBzaXplX3QgcmVzdWx0U3RhY2tPZmZzZXQgPSBo
ZWFkZXJTaXplSW5CeXRlcyArIHNpemVvZihSZWdpc3Rlcik7CiAgICAgICAgIGlmIChyb2xlID09
IENhbGxSb2xlOjpDYWxsZXIpCiAgICAgICAgICAgICByZXN1bHRTdGFja09mZnNldCAtPSBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaAppbmRleCBjMGNiMzFiN2NiZjAwNmFhMDE5MzZjMWY0NDZkNmIxODlmMGRlMTU1Li40OWRm
OTUxNTQ3YzA4YTk4MTEwNTA3ZWVlYzMxMTY4ZWY3YzVhOGMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC0yOSwxMSArMjksMTMgQEAKIAogI2luY2x1ZGUgIkNv
ZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJKU1N0cmlu
Zy5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lz
dGVyQXRPZmZzZXRMaXN0LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAj
aW5jbHVkZSAiV2FzbU5hbWUuaCIKICNpbmNsdWRlICJXYXNtTmFtZVNlY3Rpb24uaCIKKyNpbmNs
dWRlICJXYXNtT1NSRW50cnlEYXRhLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUg
Ildhc21QYWdlQ291bnQuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCkBAIC01MCw2ICs1
Miw3IEBAIG5hbWVzcGFjZSBXYXNtIHsKIAogc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dDsKIHN0
cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKK3N0cnVjdCBVbmxpbmtlZEhhbmRsZXJJbmZvOwogCiB1
c2luZyBCbG9ja1NpZ25hdHVyZSA9IGNvbnN0IFNpZ25hdHVyZSo7CiAKQEAgLTc2LDYgKzc5LDE5
IEBAIGlubGluZSBib29sIGlzVmFsdWVUeXBlKFR5cGUgdHlwZSkKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK2lubGluZSBKU1N0cmluZyogdHlwZVRvU3RyaW5nKFZNJiB2bSwgVHlwZUtpbmQgdHlw
ZSkKK3sKKyNkZWZpbmUgVFlQRV9DQVNFKG1hY3JvTmFtZSwgdmFsdWUsIGIzLCBpbmMsIHdhc21O
YW1lKSBcCisgICAgY2FzZSBUeXBlS2luZDo6bWFjcm9OYW1lOiBcCisgICAgICAgIHJldHVybiBq
c05vbnRyaXZpYWxTdHJpbmcodm0sICN3YXNtTmFtZSk7IFwKKworICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBGT1JfRUFDSF9XQVNNX1RZUEUoVFlQRV9DQVNFKQorICAgIH0KKworI3VuZGVm
IFRZUEVfQ0FTRQorfQorCiBpbmxpbmUgYm9vbCBpc1N1YnR5cGUoVHlwZSBzdWIsIFR5cGUgcGFy
ZW50KQogewogICAgIGlmIChzdWIuaXNOdWxsYWJsZSgpICYmICFwYXJlbnQuaXNOdWxsYWJsZSgp
KQpAQCAtMTE1LDYgKzEzMSw3IEBAIGVudW0gY2xhc3MgRXh0ZXJuYWxLaW5kIDogdWludDhfdCB7
CiAgICAgVGFibGUgPSAxLAogICAgIE1lbW9yeSA9IDIsCiAgICAgR2xvYmFsID0gMywKKyAgICBF
eGNlcHRpb24gPSA0LAogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSW50PgpAQCAtMTI1LDYgKzE0
Miw3IEBAIGlubGluZSBib29sIGlzVmFsaWRFeHRlcm5hbEtpbmQoSW50IHZhbCkKICAgICBjYXNl
IHN0YXRpY19jYXN0PEludD4oRXh0ZXJuYWxLaW5kOjpUYWJsZSk6CiAgICAgY2FzZSBzdGF0aWNf
Y2FzdDxJbnQ+KEV4dGVybmFsS2luZDo6TWVtb3J5KToKICAgICBjYXNlIHN0YXRpY19jYXN0PElu
dD4oRXh0ZXJuYWxLaW5kOjpHbG9iYWwpOgorICAgIGNhc2Ugc3RhdGljX2Nhc3Q8SW50PihFeHRl
cm5hbEtpbmQ6OkV4Y2VwdGlvbik6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMzQsNiArMTUyLDcgQEAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2Fz
dDxpbnQ+KEV4dGVybmFsS2luZDo6RnVuY3Rpb24pID09IDAsICJXYXNtIG5lZWRzIEZ1bmN0aW8K
IHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6OlRhYmxlKSAgICA9
PSAxLCAiV2FzbSBuZWVkcyBUYWJsZSB0byBoYXZlIHRoZSB2YWx1ZSAxIik7CiBzdGF0aWNfYXNz
ZXJ0KHN0YXRpY19jYXN0PGludD4oRXh0ZXJuYWxLaW5kOjpNZW1vcnkpICAgPT0gMiwgIldhc20g
bmVlZHMgTWVtb3J5IHRvIGhhdmUgdGhlIHZhbHVlIDIiKTsKIHN0YXRpY19hc3NlcnQoc3RhdGlj
X2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6Okdsb2JhbCkgICA9PSAzLCAiV2FzbSBuZWVkcyBHbG9i
YWwgdG8gaGF2ZSB0aGUgdmFsdWUgMyIpOworc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+
KEV4dGVybmFsS2luZDo6RXhjZXB0aW9uKSAgID09IDQsICJXYXNtIG5lZWRzIEV4Y2VwdGlvbiB0
byBoYXZlIHRoZSB2YWx1ZSA0Iik7CiAKIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKEV4
dGVybmFsS2luZCBraW5kKQogewpAQCAtMTQyLDYgKzE2MSw3IEBAIGlubGluZSBjb25zdCBjaGFy
KiBtYWtlU3RyaW5nKEV4dGVybmFsS2luZCBraW5kKQogICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpU
YWJsZTogcmV0dXJuICJ0YWJsZSI7CiAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogcmV0
dXJuICJtZW1vcnkiOwogICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHJldHVybiAiZ2xv
YmFsIjsKKyAgICBjYXNlIEV4dGVybmFsS2luZDo6RXhjZXB0aW9uOiByZXR1cm4gInRhZyI7CiAg
ICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuICI/IjsK
QEAgLTM3Miw2ICszOTIsOCBAQCBzdHJ1Y3QgRW50cnlwb2ludCB7CiBzdHJ1Y3QgSW50ZXJuYWxG
dW5jdGlvbiB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogICAgIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+IGNhbGxlZU1vdmVMb2NhdGlvbjsK
KyAgICBTdGFja01hcHMgc3RhY2ttYXBzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZv
PiBleGNlcHRpb25IYW5kbGVyczsKICAgICBFbnRyeXBvaW50IGVudHJ5cG9pbnQ7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5o
CmluZGV4IGVhNzVmZTJmNmIwZjlhM2YxNGU3OTNlZDExMjc4ZWZkMGUwOWFjNzEuLjcyZjNlNjQx
MzJjMTdiOTUxMWEzZWJlYTZjNjBkMDAyNGIzMjdiNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDggKzI4LDEwIEBACiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5o
IgorI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb25TdHJlYW0u
aCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtSGFu
ZGxlckluZm8uaCIKICNpbmNsdWRlICJXYXNtTExJbnRUaWVyVXBDb3VudGVyLmgiCiAjaW5jbHVk
ZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0xMjAsNiArMTIyLDEw
IEBAIHB1YmxpYzoKICAgICBjb25zdCBKdW1wVGFibGUmIGp1bXBUYWJsZSh1bnNpZ25lZCB0YWJs
ZUluZGV4KSBjb25zdDsKICAgICB1bnNpZ25lZCBudW1iZXJPZkp1bXBUYWJsZXMoKSBjb25zdDsK
IAorICAgIHNpemVfdCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4g
bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCk7IH0KKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvJiBl
eGNlcHRpb25IYW5kbGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9leGNlcHRpb25IYW5kbGVyc1tp
bmRleF07IH0KKyAgICB2b2lkIGFkZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgVW5saW5rZWRIYW5k
bGVySW5mbyYgaGFuZGxlcikgeyBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZChoYW5kbGVyKTsg
fQorCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJ
bnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwogCkBAIC0xMzksNiArMTQ1LDcgQEAgcHJp
dmF0ZToKICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwog
ICAgIExMSW50VGllclVwQ291bnRlciBtX3RpZXJVcENvdW50ZXI7CiAgICAgVmVjdG9yPEp1bXBU
YWJsZT4gbV9qdW1wVGFibGVzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4
Y2VwdGlvbkhhbmRsZXJzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggNGU2
YjgzMjIwNDA3NzZhMjUxNzIyZWVhMjE4ZjQ2YzJjMzk5MTMxMC4uZmFkN2Q3NjhlYjEwZjZiNTQ5
YzdjODkxOGMxNzZkZTVmMTJmZDY2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTM3LDcgKzM3LDE0IEBAIGVudW0gY2xhc3MgQmxv
Y2tUeXBlIHsKICAgICBJZiwKICAgICBCbG9jaywKICAgICBMb29wLAotICAgIFRvcExldmVsCisg
ICAgVG9wTGV2ZWwsCisgICAgVHJ5LAorICAgIENhdGNoLAorfTsKKworZW51bSBjbGFzcyBDYXRj
aEtpbmQgeworICAgIENhdGNoLAorICAgIENhdGNoQWxsLAogfTsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgRW5jbG9zaW5nU3RhY2ssIHR5cGVuYW1lIE5ld1N0YWNrPgpAQCAtMTQ3LDYgKzE1NCw3IEBA
IHByaXZhdGU6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbmRl
eEZvckxvY2FsKHVpbnQzMl90Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gcGFyc2VJbmRleEZvckdsb2JhbCh1aW50MzJfdCYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25JbmRleCh1aW50MzJfdCYpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXhjZXB0aW9uSW5kZXgodWludDMyX3Qm
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJyYW5jaFRhcmdl
dCh1aW50MzJfdCYpOwogCiAgICAgc3RydWN0IFRhYmxlSW5pdEltbWVkaWF0ZXMgewpAQCAtMjEx
LDYgKzIxOSwxMiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbG9vcEluZGV4IHsgMCB9Owog
fTsKIAordGVtcGxhdGU8dHlwZW5hbWUgQ29udHJvbFR5cGU+CitzdGF0aWMgYm9vbCBpc1RyeU9y
Q2F0Y2goQ29udHJvbFR5cGUmIGRhdGEpCit7CisgICAgcmV0dXJuIENvbnRyb2xUeXBlOjppc1Ry
eShkYXRhKSB8fCBDb250cm9sVHlwZTo6aXNDYXRjaChkYXRhKTsKK30KKwogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29udGV4dD4KIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihD
b250ZXh0JiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVu
Y3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbykKICAgICA6IFBhcnNlcihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCkKQEAgLTU3NSw2ICs1ODksMTYgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2VGdW5jdGlvbkluZGV4KHVpbnQzMl90JiByZXN1bHRJbmRleCkgLT4gUGFydGkKICAgICByZXR1
cm4geyB9OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYXV0byBGdW5jdGlvblBh
cnNlcjxDb250ZXh0Pjo6cGFyc2VFeGNlcHRpb25JbmRleCh1aW50MzJfdCYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgZXhjZXB0aW9uSW5kZXg7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhjZXB0aW9uSW5kZXgpLCAiY2FuJ3QgcGFy
c2UgZXhjZXB0aW9uIGluZGV4Iik7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihleGNlcHRp
b25JbmRleCA+PSBtX2luZm8uZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSwgImV4Y2VwdGlvbiBp
bmRleCAiLCBleGNlcHRpb25JbmRleCwgIiBpcyBpbnZhbGlkLCBsaW1pdCBpcyAiLCBtX2luZm8u
ZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAgcmVzdWx0ID0gZXhjZXB0aW9uSW5kZXg7
CisgICAgcmV0dXJuIHsgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIGF1dG8g
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQnJhbmNoVGFyZ2V0KHVpbnQzMl90JiByZXN1
bHRUYXJnZXQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKQEAgLTEzMzMsNiArMTM1NywxMzEgQEAgRk9S
X0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCisgICAgY2FzZSBUcnk6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMg
YXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0
dXJlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1f
aW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCB0cnkncyBzaWduYXR1cmUiKTsKKwor
ICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8
IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyBhcmd1bWVudHMgb24g
c3RhY2sgZm9yIHRyeSBibG9jay4gVHJ5ZSBleHBlY3RzICIsIGlubGluZVNpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIg
d2VyZSBwcmVzZW50LiBUcnkgYmxvY2sgaGFzIHNpZ25hdHVyZTogIiwgaW5saW5lU2lnbmF0dXJl
LT50b1N0cmluZygpKTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9leHByZXNzaW9uU3Rh
Y2suc2l6ZSgpIC0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsg
KytpKQorICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFj
a1tvZmZzZXQgKyBpXS50eXBlKCkgIT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKSwgIlRy
eSBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwgaW5saW5lU2ln
bmF0dXJlLT5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBtX2V4
cHJlc3Npb25TdGFja1tpXS50eXBlKCkua2luZCk7CisKKyAgICAgICAgaW50NjRfdCBvbGRTaXpl
ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOworICAgICAgICBTdGFjayBuZXdTdGFjazsKKyAg
ICAgICAgQ29udHJvbFR5cGUgY29udHJvbDsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRF
WFQoYWRkVHJ5KGlubGluZVNpZ25hdHVyZSwgbV9leHByZXNzaW9uU3RhY2ssIGNvbnRyb2wsIG5l
d1N0YWNrKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU2l6ZSwgb2xkU2l6ZSAtIG1fZXhw
cmVzc2lvblN0YWNrLnNpemUoKSA9PSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7
CisgICAgICAgIEFTU0VSVChuZXdTdGFjay5zaXplKCkgPT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCkpOworCisgICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZCh7IFdURk1vdmUo
bV9leHByZXNzaW9uU3RhY2spLCB7IH0sIFdURk1vdmUoY29udHJvbCkgfSk7CisgICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrID0gV1RGTW92ZShuZXdTdGFjayk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgY2FzZSBDYXRjaDogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBh
cmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fY29udHJv
bFN0YWNrLnNpemUoKSA9PSAxLCAiY2FuJ3QgdXNlIGNhdGNoIGJsb2NrIGF0IHRoZSB0b3AtbGV2
ZWwgb2YgYSBmdW5jdGlvbiIpOworCisgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4Owor
ICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhj
ZXB0aW9uSW5kZXgpKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBt
X2luZm8uc2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRl
eCk7CisgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlID0gU2lnbmF0
dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisKKyAgICAgICAgQ29udHJvbEVu
dHJ5JiBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisgICAgICAgIFdBU01f
VkFMSURBVE9SX0ZBSUxfSUYoIWlzVHJ5T3JDYXRjaChjb250cm9sRW50cnkuY29udHJvbERhdGEp
LCAiY2F0Y2ggYmxvY2sgaXNuJ3QgYXNzb2NpYXRlZCB0byBhIHRyeSIpOworICAgICAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOwor
CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsKKyAgICAgICAgU3RhY2sgcHJlQ2F0Y2hTdGFj
azsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc3dhcChwcmVDYXRjaFN0YWNrKTsKKyAgICAg
ICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2goZXhjZXB0aW9uSW5kZXgsIGV4Y2Vw
dGlvblNpZ25hdHVyZSwgcHJlQ2F0Y2hTdGFjaywgY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhLCBy
ZXN1bHRzKSk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSA9PSByZXN1bHRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAg
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2ln
bmF0dXJlLmFyZ3VtZW50KGkpLCByZXN1bHRzW2ldKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBjYXNlIENhdGNoQWxsOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFy
ZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9s
U3RhY2suc2l6ZSgpID09IDEsICJjYW4ndCB1c2UgY2F0Y2ggYmxvY2sgYXQgdGhlIHRvcC1sZXZl
bCBvZiBhIGZ1bmN0aW9uIik7CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBjb250cm9sRW50cnkg
PSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9J
RighaXNUcnlPckNhdGNoKGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSksICJjYXRjaCBibG9jayBp
c24ndCBhc3NvY2lhdGVkIHRvIGEgdHJ5Iik7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJf
RkFJTFModW5pZnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSk7CisKKyAgICAgICAgUmVzdWx0
TGlzdCByZXN1bHRzOworICAgICAgICBTdGFjayBwcmVDYXRjaFN0YWNrOworICAgICAgICBtX2V4
cHJlc3Npb25TdGFjay5zd2FwKHByZUNhdGNoU3RhY2spOworICAgICAgICBXQVNNX1RSWV9BRERf
VE9fQ09OVEVYVChhZGRDYXRjaEFsbChwcmVDYXRjaFN0YWNrLCBjb250cm9sRW50cnkuY29udHJv
bERhdGEpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIERlbGVnYXRl
OiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5
RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09IDEsICJjYW4n
dCB1c2UgZGVsZWdhdGUgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisKKyAgICAg
ICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBh
cnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xFbnRyeSBjb250cm9s
RW50cnkgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOworICAgICAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSwg
ImRlbGVnYXRlIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKworICAgICAgICBDb250cm9s
VHlwZSYgdGFyZ2V0RGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAt
IDEgLSB0YXJnZXRdLmNvbnRyb2xEYXRhOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KCFDb250cm9sVHlwZTo6aXNUcnkodGFyZ2V0RGF0YSkgJiYgIUNvbnRyb2xUeXBlOjppc1RvcExl
dmVsKHRhcmdldERhdGEpLCAiZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5IG9yIHRoZSB0b3Ag
bGV2ZWwgYmxvY2siKTsKKworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGREZWxl
Z2F0ZSh0YXJnZXREYXRhLCBjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKyAgICAgICAgV0FT
TV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeShjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsK
KyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZW5kQmxvY2soY29udHJvbEVudHJ5LCBt
X2V4cHJlc3Npb25TdGFjaykpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKGNvbnRy
b2xFbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgY2FzZSBUaHJvdzogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFP
cHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUg
bm90IGVuYWJsZWQiKTsKKworICAgICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRleDsKKyAgICAg
ICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlv
bkluZGV4KSk7CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZv
LnNpZ25hdHVyZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOwor
ICAgICAgICBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworCisgICAgICAgIFdBU01fVkFMSURBVE9S
X0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSwgIlRvbyBmZXcgYXJndW1lbnRzIG9uIHN0YWNrIGZvciB0aGUgZXhjZXB0
aW9uIGJlaW5nIHRocm93bi4gVGhlIGV4Y2VwdGlvbiBleHBlY3RzICIsIGV4Y2VwdGlvblNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNp
emUoKSwgIiB3ZXJlIHByZXNlbnQuIEV4Y2VwdGlvbiBoYXMgc2lnbmF0dXJlOiAiLCBleGNlcHRp
b25TaWduYXR1cmUudG9TdHJpbmcoKSk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhw
cmVzc2lvblN0YWNrLnNpemUoKSAtIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
CisgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4gYXJnczsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighYXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9uU2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciB0aHJvdydz
ICIsIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIik7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBhcmcgPSBtX2V4
cHJlc3Npb25TdGFjay5hdChvZmZzZXQgKyBpKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9S
X0ZBSUxfSUYoYXJnLnR5cGUoKSAhPSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSksICJU
aGUgZXhjZXB0aW9uIGJlaW5nIHRocm93biBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCAi
LCBpLCAiIHRvIGJlICIsIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudChpKS5raW5kLCAiIGJ1
dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBhcmcudHlwZSgpLmtpbmQpOworICAgICAgICAgICAgYXJn
cy51bmNoZWNrZWRBcHBlbmQoYXJnKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1
ZUZyb21TdGFjaygpOworICAgICAgICB9CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmlu
ayhvZmZzZXQpOworCisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFRocm93KGV4
Y2VwdGlvbkluZGV4LCBhcmdzLCBtX2V4cHJlc3Npb25TdGFjaykpOworICAgICAgICBtX3VucmVh
Y2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNl
IFJldGhyb3c6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2Vi
QXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7
CisKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVS
X0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xUeXBl
JiBkYXRhID0gbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdl
dF0uY29udHJvbERhdGE7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xU
eXBlOjppc0FueUNhdGNoKGRhdGEpLCAicmV0aHJvdyBkb2Vzbid0IHJlZmVyIHRvIGEgY2F0Y2gg
YmxvY2siKTsKKworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRSZXRocm93KHRh
cmdldCwgZGF0YSkpOworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjYXNlIEJyOgogICAgIGNhc2UgQnJJZjogewogICAg
ICAgICB1aW50MzJfdCB0YXJnZXQ7CkBAIC0xNDg3LDYgKzE2MzYsNjYgQEAgYXV0byBGdW5jdGlv
blBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFs
UmVzdWx0CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgY2FzZSBDYXRjaDogewor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2Vw
dGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICB1
aW50MzJfdCBleGNlcHRpb25JbmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
UyhwYXJzZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisgICAgICAgIFNpZ25hdHVy
ZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUV4Y2VwdGlv
bkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOworICAgICAgICBjb25zdCBTaWduYXR1cmUmIGV4
Y2VwdGlvblNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOworCisgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9jb250cm9sU3Rh
Y2subGFzdCgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1RyeU9yQ2F0Y2go
ZGF0YS5jb250cm9sRGF0YSksICJjYXRjaCBibG9jayBpc24ndCBhc3NvY2lhdGVkIHRvIGEgdHJ5
Iik7CisKKyAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDA7CisgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrID0geyB9OworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CisgICAgICAgIFdB
U01fVFJZX0FERF9UT19DT05URVhUKGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRl
eCwgZXhjZXB0aW9uU2lnbmF0dXJlLCBkYXRhLmNvbnRyb2xEYXRhLCByZXN1bHRzKSk7CisKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9
PSByZXN1bHRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNl
cHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBtX2V4cHJl
c3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50
KGkpLCByZXN1bHRzW2ldKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNl
IENhdGNoQWxsOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIp
OworCisgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKKyAgICAgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9jb250cm9sU3RhY2su
bGFzdCgpOworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMDsKKyAgICAgICAgbV9leHBy
ZXNzaW9uU3RhY2sgPSB7IH07CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzVHJ5
T3JDYXRjaChkYXRhLmNvbnRyb2xEYXRhKSwgImNhdGNoIGJsb2NrIGlzbid0IGFzc29jaWF0ZWQg
dG8gYSB0cnkiKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2hBbGxU
b1VucmVhY2hhYmxlKGRhdGEuY29udHJvbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBjYXNlIERlbGVnYXRlOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFy
ZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9s
U3RhY2suc2l6ZSgpID09IDEsICJjYW4ndCB1c2UgZGVsZWdhdGUgYXQgdGhlIHRvcC1sZXZlbCBv
ZiBhIGZ1bmN0aW9uIik7CisKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAg
ICAgIENvbnRyb2xFbnRyeSBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgp
OworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnkoY29u
dHJvbEVudHJ5LmNvbnRyb2xEYXRhKSwgImRlbGVnYXRlIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0
cnkiKTsKKworICAgICAgICBDb250cm9sVHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29u
dHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdLmNvbnRyb2xEYXRhOworICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkgJiYgIUNvbnRyb2xU
eXBlOjppc1RvcExldmVsKGRhdGEpLCAiZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5IGJsb2Nr
Iik7CisKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRGVsZWdhdGVUb1VucmVh
Y2hhYmxlKGRhdGEsIGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworICAgICAgICBTdGFjayBl
bXB0eVN0YWNrOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbmRUb1VucmVh
Y2hhYmxlKGNvbnRyb2xFbnRyeSwgZW1wdHlTdGFjaykpOworICAgICAgICBtX2V4cHJlc3Npb25T
dGFjay5zd2FwKGNvbnRyb2xFbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCiAgICAgY2FzZSBFbmQ6IHsKICAgICAgICAgaWYgKG1fdW5y
ZWFjaGFibGVCbG9ja3MgPT0gMSkgewogICAgICAgICAgICAgQ29udHJvbEVudHJ5IGRhdGEgPSBt
X2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOwpAQCAtMTQ5NSw4ICsxNzA0LDEwIEBAIGF1dG8gRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFy
dGlhbFJlc3VsdAogICAgICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gV1RGTW92ZShk
YXRhLmVsc2VCbG9ja1N0YWNrKTsKICAgICAgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVS
X0ZBSUxTKHVuaWZ5KGRhdGEuY29udHJvbERhdGEpKTsKICAgICAgICAgICAgICAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVChlbmRCbG9jayhkYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQo
YWRkRW5kVG9VbnJlYWNoYWJsZShkYXRhKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIFN0YWNrIGVtcHR5U3RhY2s7CisgICAgICAgICAgICAgICAgV0FTTV9UUllfQURE
X1RPX0NPTlRFWFQoYWRkRW5kVG9VbnJlYWNoYWJsZShkYXRhLCBlbXB0eVN0YWNrKSk7CisgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoZGF0YS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjayk7CiAgICAgICAgIH0KQEAgLTE1MDQsNiArMTcxNSwxMCBAQCBh
dXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKKyAgICBjYXNl
IFRyeToKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1i
bHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisgICAg
ICAgIEZBTExUSFJPVUdIOworCiAgICAgY2FzZSBMb29wOgogICAgIGNhc2UgSWY6CiAgICAgY2Fz
ZSBCbG9jazogewpAQCAtMTU3Niw2ICsxNzkxLDE2IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KIAorICAgIGNhc2UgUmV0aHJvdzogeworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwg
Indhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgdWludDMyX3QgdGFy
Z2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0
KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250cm9sU3RhY2tb
bV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7CisgICAgICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpLCAi
cmV0aHJvdyBkb2Vzbid0IHJlZmVyIHRvIGEgY2F0Y2ggYmxvY2siKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKICAgICBjYXNlIEJyOgogICAgIGNhc2UgQnJJZjogewogICAgICAgICB1
aW50MzJfdCB0YXJnZXQ7CkBAIC0xNTgzLDYgKzE4MDgsMTUgQEAgYXV0byBGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgY2FzZSBUaHJvdzogeworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMo
KSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICB1aW50MzJf
dCBleGNlcHRpb25JbmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJz
ZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKICAgICBjYXNlIEkzMkNvbnN0OiB7CiAgICAgICAgIGludDMyX3QgdW51c2VkOwog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDMyKHVudXNlZCksICJjYW4n
dCBnZXQgaW1tZWRpYXRlIGZvciAiLCBtX2N1cnJlbnRPcGNvZGUsICIgaW4gdW5yZWFjaGFibGUg
Y29udGV4dCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhh
bmRsZXJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5m
by5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTU3YmNmNDliYjJjZWExNzUwZmZiNmJmMWU1NWE3ODIzZGYxMzYy
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5k
bGVySW5mby5jcHAKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21I
YW5kbGVySW5mby5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2Fz
bUluc3RhbmNlLmgiCisjaW5jbHVkZSAiV2FzbVRhZy5oIgorCituYW1lc3BhY2UgSlNDIHsKK25h
bWVzcGFjZSBXYXNtIHsKKwordm9pZCBIYW5kbGVySW5mbzo6aW5pdGlhbGl6ZShjb25zdCBVbmxp
bmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEluZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPiBsYWJlbCkKK3sKKyAgICBtX3R5cGUgPSB1bmxpbmtlZEluZm8u
bV90eXBlOworICAgIG1fc3RhcnQgPSB1bmxpbmtlZEluZm8ubV9zdGFydDsKKyAgICBtX2VuZCA9
IHVubGlua2VkSW5mby5tX2VuZDsKKyAgICBtX3RhcmdldCA9IHVubGlua2VkSW5mby5tX3Rhcmdl
dDsKKyAgICBtX3RyeURlcHRoID0gdW5saW5rZWRJbmZvLm1fdHJ5RGVwdGg7CisgICAgbV9uYXRp
dmVDb2RlID0gbGFiZWw7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSGFuZGxl
clR5cGU6OkNhdGNoOgorICAgICAgICBtX3RhZyA9IHVubGlua2VkSW5mby5tX2V4Y2VwdGlvbklu
ZGV4T3JEZWxlZ2F0ZVRhcmdldDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhhbmRsZXJU
eXBlOjpDYXRjaEFsbDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhhbmRsZXJUeXBlOjpE
ZWxlZ2F0ZToKKyAgICAgICAgbV9kZWxlZ2F0ZVRhcmdldCA9IHVubGlua2VkSW5mby5tX2V4Y2Vw
dGlvbkluZGV4T3JEZWxlZ2F0ZVRhcmdldDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitj
b25zdCBIYW5kbGVySW5mbyogSGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRleChJbnN0YW5jZSYg
aW5zdGFuY2UsIGNvbnN0IFZlY3RvcjxIYW5kbGVySW5mbz4mIGV4ZXB0aW9uSGFuZGxlcnMsIHVu
c2lnbmVkIGluZGV4LCBjb25zdCBXYXNtOjpUYWcqIGV4Y2VwdGlvblRhZykKK3sKKyAgICBib29s
IGRlbGVnYXRpbmcgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBkZWxlZ2F0ZVRhcmdldCA9IDA7Cisg
ICAgZm9yIChhdXRvJiBoYW5kbGVyIDogZXhlcHRpb25IYW5kbGVycykgeworICAgICAgICAvLyBI
YW5kbGVycyBhcmUgb3JkZXJlZCBpbm5lcm1vc3QgZmlyc3QsIHNvIHRoZSBmaXJzdCBoYW5kbGVy
IHdlIGVuY291bnRlcgorICAgICAgICAvLyB0aGF0IGNvbnRhaW5zIHRoZSBzb3VyY2UgYWRkcmVz
cyBpcyB0aGUgY29ycmVjdCBoYW5kbGVyIHRvIHVzZS4KKyAgICAgICAgLy8gVGhpcyBpbmRleCB1
c2VkIGlzIGVpdGhlciB0aGUgQnl0ZWNvZGVPZmZzZXQgb3IgYSBDYWxsU2l0ZUluZGV4LgorICAg
ICAgICBpZiAoaGFuZGxlci5tX3N0YXJ0IDw9IGluZGV4ICYmIGhhbmRsZXIubV9lbmQgPiBpbmRl
eCkgeworICAgICAgICAgICAgaWYgKGRlbGVnYXRpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAo
aGFuZGxlci5tX3RyeURlcHRoICE9IGRlbGVnYXRlVGFyZ2V0KQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBkZWxlZ2F0aW5nID0gZmFsc2U7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgbWF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgIHN3
aXRjaCAoaGFuZGxlci5tX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSGFuZGxlclR5cGU6OkNh
dGNoOgorICAgICAgICAgICAgICAgIG1hdGNoID0gZXhjZXB0aW9uVGFnICYmIGluc3RhbmNlLnRh
ZyhoYW5kbGVyLm1fdGFnKSA9PSAqZXhjZXB0aW9uVGFnOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBIYW5kbGVyVHlwZTo6Q2F0Y2hBbGw6CisgICAgICAgICAgICAg
ICAgbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBIYW5kbGVyVHlwZTo6RGVsZWdhdGU6CisgICAgICAgICAgICAgICAgZGVsZWdhdGluZyA9IHRy
dWU7CisgICAgICAgICAgICAgICAgZGVsZWdhdGVUYXJnZXQgPSBoYW5kbGVyLm1fZGVsZWdhdGVU
YXJnZXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghbWF0Y2gpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IHJldHVybiAmaGFuZGxlcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxscHRy
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhh
bmRsZXJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jMjUxMTkzZDIxMzE3OWViZGU5OTU0NGMyNTNlZDQ5ODlkMmY2NDNlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJ
bmZvLmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKwor
I2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25h
bWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBJbnN0YW5jZTsKK2NsYXNz
IFRhZzsKKworZW51bSBjbGFzcyBIYW5kbGVyVHlwZSB7CisgICAgQ2F0Y2ggPSAwLAorICAgIENh
dGNoQWxsID0gMSwKKyAgICBEZWxlZ2F0ZSA9IDIsCit9OworCitzdHJ1Y3QgSGFuZGxlckluZm9C
YXNlIHsKKyAgICBIYW5kbGVyVHlwZSBtX3R5cGU7CisgICAgdWludDMyX3QgbV9zdGFydDsKKyAg
ICB1aW50MzJfdCBtX2VuZDsKKyAgICB1aW50MzJfdCBtX3RhcmdldDsKKyAgICB1aW50MzJfdCBt
X3RyeURlcHRoOworICAgIHVpbnQzMl90IG1fZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0
OworfTsKKworc3RydWN0IFVubGlua2VkSGFuZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9C
YXNlIHsKKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKCkKKyAgICB7CisgICAgfQorCisgICAgVW5s
aW5rZWRIYW5kbGVySW5mbyhIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSwgdWludDMyX3Qgc3RhcnQs
IHVpbnQzMl90IGVuZCwgdWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCB0cnlEZXB0aCwgdWludDMy
X3QgZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0KQorICAgIHsKKyAgICAgICAgbV90eXBl
ID0gaGFuZGxlclR5cGU7CisgICAgICAgIG1fc3RhcnQgPSBzdGFydDsKKyAgICAgICAgbV9lbmQg
PSBlbmQ7CisgICAgICAgIG1fdGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICBtX3RyeURlcHRoID0g
dHJ5RGVwdGg7CisgICAgICAgIG1fZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0ID0gZXhj
ZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0OworICAgIH0KK307CisKK3N0cnVjdCBIYW5kbGVy
SW5mbyA6IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgeworICAgIHN0YXRpYyBjb25zdCBIYW5kbGVy
SW5mbyogaGFuZGxlckZvckluZGV4KEluc3RhbmNlJiwgY29uc3QgVmVjdG9yPEhhbmRsZXJJbmZv
PiYgZXhlcHRpb25IYW5kbGVycywgdW5zaWduZWQgaW5kZXgsIGNvbnN0IFdhc206OlRhZyogZXhj
ZXB0aW9uVGFnKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhhbmRsZXJJ
bmZvJiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KTsKKwor
ICAgIHVuc2lnbmVkIHRhZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09
IEhhbmRsZXJUeXBlOjpDYXRjaCk7CisgICAgICAgIHJldHVybiBtX3RhZzsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBkZWxlZ2F0ZVRhcmdldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
bV90eXBlID09IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSk7CisgICAgICAgIHJldHVybiBtX2RlbGVn
YXRlVGFyZ2V0OworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPiBtX25hdGl2ZUNvZGU7CisKK3ByaXZhdGU6CisgICAgdW5pb24geworICAg
ICAgICB1bnNpZ25lZCBtX3RhZzsKKyAgICAgICAgdW5zaWduZWQgbV9kZWxlZ2F0ZVRhcmdldDsK
KyAgICB9OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21JbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFu
Y2UuY3BwCmluZGV4IGZmZDc1YzhkMGM4ZjlhYjczMWY3Y2I0OWE4NDJkOTA2NWI4MjgzYjYuLjAy
NTRhMGMxMDI5N2FiOGRlMTg1NGVhODBjOWRhYWU0YzFlYTQ4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgIlJlZ2lzdGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCiAjaW5j
bHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVGFnLmgiCiAjaW5j
bHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CkBAIC05MCw3ICs5MSw5IEBAIFJlZjxJbnN0YW5jZT4gSW5zdGFuY2U6OmNyZWF0
ZShDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgRW50cnlGcmFtCiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemUo
bW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSwgbW9kdWxl
LT5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSkpKSBJbnN0YW5jZShjb250ZXh0LCBX
VEZNb3ZlKG1vZHVsZSksIHBvaW50ZXJUb1RvcEVudHJ5RnJhbWUsIHBvaW50ZXJUb0FjdHVhbFN0
YWNrTGltaXQsIFdURk1vdmUoc3RvcmVUb3BDYWxsRnJhbWUpKSk7CiB9CiAKLUluc3RhbmNlOjp+
SW5zdGFuY2UoKSB7IH0KK0luc3RhbmNlOjp+SW5zdGFuY2UoKQoreworfQogCiBzaXplX3QgSW5z
dGFuY2U6OmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkgY29uc3QKIHsKQEAgLTI5Nyw2ICszMDAsMTYg
QEAgdm9pZCBJbnN0YW5jZTo6bGlua0dsb2JhbCh1bnNpZ25lZCBpLCBSZWY8R2xvYmFsPiYmIGds
b2JhbCkKICAgICBtX2xpbmtlZEdsb2JhbHMuc2V0KGksIFdURk1vdmUoZ2xvYmFsKSk7CiB9CiAK
K3ZvaWQgSW5zdGFuY2U6OmFkZFRhZyhjb25zdCBUYWcmIHRhZykKK3sKKyAgICBtX3RhZ3MuYXBw
ZW5kKFJlZiB7IHRhZyB9KTsKK30KKwordm9pZCBJbnN0YW5jZTo6YWRkVGFnKFRhZyYmIHRhZykK
K3sKKyAgICBtX3RhZ3MuYXBwZW5kKGFkb3B0UmVmKHRhZykpOworfQorCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAppbmRleCA2MGUxNGNiNWFjMDY1ODI0NDM0
Mzc4MDlkNTQ2MzNlZGY3MWNjOGI5Li5kYjk3NGQxMzBkMjcyODU3YWNjMzRkZGU1OGRlMTRmNDM1
MjE0NGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFu
Y2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApAQCAt
MjEwLDYgKzIxMCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3RvcmVUb3BDYWxsRnJhbWUoY2Fs
bEZyYW1lKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZFRhZyhjb25zdCBUYWcmKTsKKyAgICB2b2lk
IGFkZFRhZyhUYWcmJik7CisgICAgY29uc3QgVGFnJiB0YWcodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gKm1fdGFnc1tpXTsgfQorCiBwcml2YXRlOgogICAgIEluc3RhbmNlKENvbnRleHQqLCBS
ZWY8TW9kdWxlPiYmLCBFbnRyeUZyYW1lKiosIHZvaWQqKiwgU3RvcmVUb3BDYWxsRnJhbWVDYWxs
YmFjayYmKTsKICAgICAKQEAgLTIzNyw2ICsyNDEsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8
dWludDMyX3QsIFJlZjxHbG9iYWw+LCBJbnRIYXNoPHVpbnQzMl90PiwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fbGlua2VkR2xvYmFsczsKICAgICBCaXRW
ZWN0b3IgbV9wYXNzaXZlRWxlbWVudHM7CiAgICAgQml0VmVjdG9yIG1fcGFzc2l2ZURhdGFTZWdt
ZW50czsKKyAgICBWZWN0b3I8UmVmUHRyPGNvbnN0IFRhZz4+IG1fdGFnczsKIH07CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxMSW50R2VuZXJhdG9yLmNwcAppbmRleCA4MWE1Y2RiY2FlMzI4NmJlMzJjYTQ5MGRlNDVl
ZTNhZmY3ODE5ODU2Li4zNTc2NjZiZGMzZDY1ZGU0NTcwZmQ1NWU4OTljNjZlZWQxMjgzYzExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5j
cHAKQEAgLTYyLDggKzYyLDI2IEBAIHB1YmxpYzoKICAgICAgICAgUmVmPExhYmVsPiBtX2FsdGVy
bmF0ZTsKICAgICB9OwogCi0gICAgc3RydWN0IENvbnRyb2xUeXBlIDogcHVibGljIFZhcmlhbnQ8
Q29udHJvbExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWY+IHsK
LSAgICAgICAgdXNpbmcgQmFzZSA9IFZhcmlhbnQ8Q29udHJvbExvb3AsIENvbnRyb2xUb3BMZXZl
bCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWY+OworICAgIHN0cnVjdCBDb250cm9sVHJ5IHsKKyAg
ICAgICAgUmVmPExhYmVsPiBtX3RyeTsKKyAgICAgICAgdW5zaWduZWQgbV90cnlEZXB0aDsKKyAg
ICB9OworCisgICAgc3RydWN0IENvbnRyb2xDYXRjaCB7CisgICAgICAgIENhdGNoS2luZCBtX2tp
bmQ7CisgICAgICAgIFJlZjxMYWJlbD4gbV90cnlTdGFydDsKKyAgICAgICAgUmVmPExhYmVsPiBt
X3RyeUVuZDsKKyAgICAgICAgdW5zaWduZWQgbV90cnlEZXB0aDsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG1fZXhjZXB0aW9uOworICAgIH07CisKKyAgICBzdHJ1Y3QgQ2F0Y2hSZXdyaXRlSW5m
byB7CisgICAgICAgIHVuc2lnbmVkIG1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgIHVuc2ln
bmVkIG1fdHJ5RGVwdGg7CisgICAgfTsKKworICAgIHN0cnVjdCBDb250cm9sVHlwZSA6IHB1Ymxp
YyBWYXJpYW50PENvbnRyb2xMb29wLCBDb250cm9sVG9wTGV2ZWwsIENvbnRyb2xCbG9jaywgQ29u
dHJvbElmLCBDb250cm9sVHJ5LCBDb250cm9sQ2F0Y2g+IHsKKyAgICAgICAgdXNpbmcgQmFzZSA9
IFZhcmlhbnQ8Q29udHJvbExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250
cm9sSWYsIENvbnRyb2xUcnksIENvbnRyb2xDYXRjaD47CiAKICAgICAgICAgQ29udHJvbFR5cGUo
KQogICAgICAgICAgICAgOiBCYXNlKENvbnRyb2xCbG9jayB7IH0pCkBAIC05MCw4ICsxMDgsMjkg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3Rh
Y2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9u
KSwgQ29udHJvbElmIHsgV1RGTW92ZShhbHRlcm5hdGUpIH0pOwogICAgICAgICB9CiAKLSAgICAg
ICAgc3RhdGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4g
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sSWY+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0
YXRpYyBDb250cm9sVHlwZSBjcmVhdGVUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNp
Z25lZCBzdGFja1NpemUsIFJlZjxMYWJlbD4mJiB0cnlMYWJlbCwgUmVmUHRyPExhYmVsPiYmIGNv
bnRpbnVhdGlvbiwgdW5zaWduZWQgdHJ5RGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xUcnkgeyBXVEZNb3ZlKHRy
eUxhYmVsKSwgdHJ5RGVwdGggfSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgQ29udHJv
bFR5cGUgY3JlYXRlQ2F0Y2goQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFj
a1NpemUsIFJlZjxMYWJlbD4mJiB0cnlTdGFydCwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlv
biwgUmVmPExhYmVsPiB0cnlFbmQsIHVuc2lnbmVkIHRyeURlcHRoLCBWaXJ0dWFsUmVnaXN0ZXIg
ZXhjZXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2ln
bmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShj
b250aW51YXRpb24pLCBDb250cm9sQ2F0Y2ggeyBDYXRjaEtpbmQ6OkNhdGNoLCBXVEZNb3ZlKHRy
eVN0YXJ0KSwgV1RGTW92ZSh0cnlFbmQpLCB0cnlEZXB0aCwgZXhjZXB0aW9uIH0pOworICAgICAg
ICB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgaXNMb29wKGNvbnN0IENvbnRyb2xUeXBlJiBjb250
cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29wPihjb250cm9s
KTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1RvcExldmVsKGNvbnN0IENvbnRyb2xUeXBlJiBj
b250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xUb3BMZXZlbD4o
Y29udHJvbCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNCbG9jayhjb25zdCBDb250cm9sVHlw
ZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQmxvY2s+
KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJvbFR5cGUm
IGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbElmPihjb250
cm9sKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250cm9sVHlwZSYgY29u
dHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sVHJ5Pihjb250cm9s
KTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0FueUNhdGNoKGNvbnN0IENvbnRyb2xUeXBlJiBj
b250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xDYXRjaD4oY29u
dHJvbCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNDYXRjaChjb25zdCBDb250cm9sVHlwZSYg
Y29udHJvbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPENvbnRyb2xDYXRjaD4oY29udHJvbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgQ29udHJvbENhdGNoIGNhdGNoRGF0YSA9IFdURjo6Z2V0PENvbnRyb2xD
YXRjaD4oY29udHJvbCk7CisgICAgICAgICAgICByZXR1cm4gY2F0Y2hEYXRhLm1fa2luZCA9PSBD
YXRjaEtpbmQ6OkNhdGNoOworICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgc3RhY2tTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1NpemU7IH0KICAgICAgICAgQmxvY2tTaWduYXR1cmUg
c2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmU7IH0KQEAgLTE1MiwxNyArMTkx
LDI0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmlu
ZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhh
cmdzKS4uLikpOwogICAgIH0KIAotICAgIExMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJik7CisgICAg
TExJbnRHZW5lcmF0b3IoTW9kdWxlSW5mb3JtYXRpb24mLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
LCBjb25zdCBTaWduYXR1cmUmKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVC
bG9jaz4gZmluYWxpemUoKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KKyAgICB2
b2lkIHJlcGF0Y2goY29uc3QgQ2F0Y2hSZXdyaXRlSW5mbyYpOworCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRXhwcmVzc2lvbkxpc3RBLCB0eXBlbmFtZSBFeHByZXNzaW9uTGlzdEI+CiAgICAgdm9p
ZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdEEmIGRlc3RpbmF0aW9u
cywgY29uc3QgRXhwcmVzc2lvbkxpc3RCJiB2YWx1ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQo
ZGVzdGluYXRpb25zLnNpemUoKSA8PSB2YWx1ZXMuc2l6ZSgpKTsKICAgICAgICAgYXV0byBvZmZz
ZXQgPSB2YWx1ZXMuc2l6ZSgpIC0gZGVzdGluYXRpb25zLnNpemUoKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBX
YXNtTW92OjplbWl0KHRoaXMsIGRlc3RpbmF0aW9uc1tpXSwgdmFsdWVzW29mZnNldCArIGldKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGF1dG8mIHNyYyA9IHZhbHVlc1tvZmZzZXQgKyBpXTsKKyAgICAgICAg
ICAgIGF1dG8mIGRzdCA9IGRlc3RpbmF0aW9uc1tpXTsKKyAgICAgICAgICAgIGlmICgoVmlydHVh
bFJlZ2lzdGVyKXNyYyAhPSAoVmlydHVhbFJlZ2lzdGVyKWRzdCkKKyAgICAgICAgICAgICAgICBX
YXNtTW92OjplbWl0KHRoaXMsIGRzdCwgc3JjKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGVu
dW0gTm9Db25zaXN0ZW5jeUNoZWNrVGFnIHsgTm9Db25zaXN0ZW5jeUNoZWNrIH07CkBAIC0yNDMs
MTEgKzI4OSwyMSBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkRWxzZShDb250cm9sVHlwZSYsIFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKIAorICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRyeShCbG9ja1NpZ25hdHVyZSwg
U3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3Rh
Y2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2ln
bmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBl
JiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGwoU3RhY2smLCBDb250cm9sVHlwZSYpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShD
b250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZERl
bGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmLCBD
b250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRo
cm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBTdGFjayYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldGhy
b3codW5zaWduZWQsIENvbnRyb2xUeXBlJik7CisKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbFR5cGUmLCBTdGFjayYgcmV0dXJuVmFs
dWVzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29u
dHJvbFR5cGUmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFN0YWNrJiByZXR1cm5WYWx1ZXMp
OwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNz
aW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZSo+JiB0YXJnZXRzLCBD
b250cm9sVHlwZSYgZGVmYXVsdFRhcmdldHMsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYs
IFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiwgY29uc3QgU3RhY2smIGV4
cHJlc3Npb25TdGFjayA9IHsgfSwgYm9vbCB1bnJlYWNoYWJsZSA9IHRydWUpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVu
dHJ5JiwgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgYm9vbCB1bnJlYWNoYWJsZSA9IHRydWUpOwog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2ln
bmF0dXJlLCBjb25zdCBTdGFjayYpOwogCiAgICAgLy8gQ2FsbHMKQEAgLTMzNyw3ICszOTMsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgV2FzbURyb3BLZWVwOjplbWl0KHRoaXMsIHN0YXJ0T2Zm
c2V0LCBkcm9wLCBrZWVwKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0YWNrLCB0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZv
aWQgd2Fsa0V4cHJlc3Npb25TdGFjayhTdGFjayYgZXhwcmVzc2lvblN0YWNrLCB1bnNpZ25lZCBz
dGFja1NpemUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBleHByZXNzaW9uU3RhY2suc2l6ZSgpOyBpID4gMDsgLS1pKSB7CkBAIC0zNDYs
NyArNDAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RhY2ssIHR5cGVuYW1lIEZ1
bmN0b3I+CiAgICAgdm9pZCB3YWxrRXhwcmVzc2lvblN0YWNrKFN0YWNrJiBleHByZXNzaW9uU3Rh
Y2ssIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICB3YWxrRXhwcmVzc2lv
blN0YWNrKGV4cHJlc3Npb25TdGFjaywgbV9zdGFja1NpemUsIGZ1bmN0b3IpOwpAQCAtMzU1LDcg
KzQxMSw4IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2
b2lkIHdhbGtFeHByZXNzaW9uU3RhY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZW50cnkuZW5j
bG9zZWRFeHByZXNzaW9uU3RhY2ssIGVudHJ5LmNvbnRyb2xEYXRhLnN0YWNrU2l6ZSgpLCBmdW5j
dG9yKTsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplID0gZW50cnkuY29udHJvbERhdGEuc3Rh
Y2tTaXplKCk7CisgICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZW50cnkuZW5jbG9zZWRFeHBy
ZXNzaW9uU3RhY2ssIHN0YWNrU2l6ZSwgZnVuY3Rvcik7CiAgICAgfQogCiAgICAgdm9pZCBjaGVj
a0NvbnNpc3RlbmN5KCkKQEAgLTM4MSw3ICs0MzgsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBt
YXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBOb0Nv
bnNpc3RlbmN5Q2hlY2tUYWcpCiAgICAgewotICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGV4
cHJlc3Npb25TdGFjaywgWyZdKFR5cGVkRXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVmlydHVhbFJl
Z2lzdGVyIHNsb3QpIHsKKyAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhleHByZXNzaW9uU3Rh
Y2ssIFsmXShhdXRvJiBleHByZXNzaW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgewogICAgICAg
ICAgICAgQVNTRVJUKGV4cHJlc3Npb24udmFsdWUoKSA9PSBzbG90IHx8IGV4cHJlc3Npb24udmFs
dWUoKS5pc0NvbnN0YW50KCkgfHwgZXhwcmVzc2lvbi52YWx1ZSgpLmlzQXJndW1lbnQoKSB8fCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZXhwcmVzc2lvbi52YWx1ZSgpLnRvTG9jYWwoKSkgPCBtX2Nv
ZGVCbG9jay0+bV9udW1WYXJzKTsKICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLnZhbHVlKCkg
PT0gc2xvdCkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00MTcsNiArNDc0LDggQEAgcHJp
dmF0ZToKICAgICAgICAgbV9zdGFja1NpemUgKz0gbmV3U3RhY2suc2l6ZSgpOwogICAgIH0KIAor
ICAgIHZvaWQgZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2goQ29udHJvbFR5cGUmLCBTdGFj
ayYpOworCiAgICAgc3RydWN0IFN3aXRjaEVudHJ5IHsKICAgICAgICAgSW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldCBvZmZzZXQ7CiAgICAgICAgIGludCoganVtcFRhcmdldDsKQEAgLTQyOSw3ICs0
ODgsNyBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICBGdW5jdGlvblBhcnNlcjxMTEludEdlbmVy
YXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OwotICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBtX2luZm87CisgICAgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKICAgICBjb25zdCB1bnNp
Z25lZCBtX2Z1bmN0aW9uSW5kZXggeyBVSU5UX01BWCB9OwogICAgIFZlY3RvcjxWaXJ0dWFsUmVn
aXN0ZXI+IG1fbm9ybWFsaXplZEFyZ3VtZW50czsKICAgICBIYXNoTWFwPExhYmVsKiwgVmVjdG9y
PFN3aXRjaEVudHJ5Pj4gbV9zd2l0Y2hlczsKQEAgLTQ0MCw5ICs0OTksMTIgQEAgcHJpdmF0ZToK
ICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAyPiBtX3Jlc3VsdHM7CiAgICAgQ2hlY2tlZDx1
bnNpZ25lZD4gbV9zdGFja1NpemUgeyAwIH07CiAgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9tYXhT
dGFja1NpemUgeyAwIH07CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV90cnlEZXB0aCB7IDAgfTsK
KyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX21heFRyeURlcHRoIHsgMCB9OworICAgIGJvb2wgbV91
c2VzRXhjZXB0aW9ucyB7IGZhbHNlIH07CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0
IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4KQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90KiBmdW5j
dGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdWludDMyX3QgZnVuY3Rpb25JbmRleCkKIHsK
ICAgICBMTEludEdlbmVyYXRvciBsbGludEdlbmVyYXRvcihpbmZvLCBmdW5jdGlvbkluZGV4LCBz
aWduYXR1cmUpOwogICAgIEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiBwYXJzZXIobGxp
bnRHZW5lcmF0b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGlu
Zm8pOwpAQCAtNDY2LDcgKzUyOCw3IEBAIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxCdWZmZXI+JiB0
aHJlYWRTcGVjaWZpY0J1ZmZlcigpCiAgICAgcmV0dXJuICp0aHJlYWRTcGVjaWZpY0J1ZmZlclB0
cjsKIH0KIAotTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKQor
TExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKQogICAgIDogQnl0ZWNvZGVH
ZW5lcmF0b3JCYXNlKG1ha2VVbmlxdWU8RnVuY3Rpb25Db2RlQmxvY2s+KGZ1bmN0aW9uSW5kZXgp
LCAwKQogICAgICwgbV9pbmZvKGluZm8pCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25J
bmRleCkKQEAgLTQ4NSw5ICs1NDcsMjIgQEAgTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9y
KGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkkKICAgICBX
YXNtRW50ZXI6OmVtaXQodGhpcyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3Zv
aWQgTExJbnRHZW5lcmF0b3I6OnJlcGF0Y2goY29uc3QgQ2F0Y2hSZXdyaXRlSW5mbyYgaW5mbykK
K3sKKyAgICBhdXRvIHJlZiA9IG1fd3JpdGVyLnJlZihpbmZvLm1faW5zdHJ1Y3Rpb25PZmZzZXQp
OworICAgIE9wY29kZSogaW5zdHJ1Y3Rpb24gPSByZWYtPmNhc3Q8T3Bjb2RlLCBXYXNtT3Bjb2Rl
VHJhaXRzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBleGNlcHRpb25SZWdpc3RlciA9IHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKG1fbWF4U3RhY2tTaXplICsgaW5mby5tX3RyeURlcHRoIC0gMSk7
CisgICAgaW5zdHJ1Y3Rpb24tPnNldEV4Y2VwdGlvbihleGNlcHRpb25SZWdpc3RlciwgW10oKSB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBW
aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICB9KTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBMTEludEdlbmVyYXRvcjo6ZmluYWxpemUoKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKG1fY29kZUJsb2NrKTsKKwogICAgIHNpemVfdCBudW1DYWxsZWVMb2NhbHMgPSBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgbV9tYXhTdGFja1Np
emUpOwogICAgIG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxvY2FscyA9IG51bUNhbGxlZUxvY2Fs
czsKICAgICBSRUxFQVNFX0FTU0VSVChudW1DYWxsZWVMb2NhbHMgPT0gbV9jb2RlQmxvY2stPm1f
bnVtQ2FsbGVlTG9jYWxzKTsKQEAgLTUwMCw2ICs1NzUsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8RnVu
Y3Rpb25Db2RlQmxvY2s+IExMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSgpCiAgICAgUkVMRUFTRV9B
U1NFUlQodXNlZEJ1ZmZlci5jYXBhY2l0eSgpID09IG9sZENhcGFjaXR5KTsKICAgICAqdGhyZWFk
U3BlY2lmaWMgPSBXVEZNb3ZlKHVzZWRCdWZmZXIpOwogCisgICAgaWYgKCFtX3VzZXNFeGNlcHRp
b25zKQorICAgICAgICBtX2luZm8ubV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNr
U2V0KG1fZnVuY3Rpb25JbmRleCk7CisKICAgICByZXR1cm4gV1RGTW92ZShtX2NvZGVCbG9jayk7
CiB9CiAKQEAgLTU4MCw3ICs2NTgsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3Jt
YXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IExMSQogCiAgICAg
Ly8gRklYTUU6IHdlIGFyZSBhbGxvY2F0aW5nIHRoZSBleHRyYSBzcGFjZSBmb3IgdGhlIGFyZ3Vt
ZW50L3JldHVybiBjb3VudCBpbiBvcmRlciB0byBhdm9pZCBpbnRlcmZlcmVuY2UsIGJ1dCB3ZSBj
b3VsZCBkbyBiZXR0ZXIKICAgICAvLyBOT1RFOiBXZSBpbmNyZWFzZSBhcmcgY291bnQgYnkgMSBm
b3IgdGhlIGNhc2Ugb2YgaW5kaXJlY3QgY2FsbHMKLSAgICBtX3N0YWNrU2l6ZSArPSBzdGQ6Om1h
eChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpICsgMSwgc2lnbmF0dXJlLnJldHVybkNvdW50KCkp
ICsgZ3ByQ291bnQgKyBmcHJDb3VudCArIHN0YWNrQ291bnQgKyBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVyczsKKyAgICBtX3N0YWNrU2l6ZSArPSBzdGQ6Om1heChzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpICsgMSwgc2lnbmF0dXJlLnJldHVybkNvdW50KCkpICsgZ3ByQ291bnQgKyBm
cHJDb3VudCArIHN0YWNrQ291bnQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAr
IDE7CiAgICAgaWYgKG1fc3RhY2tTaXplLnZhbHVlKCkgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVy
cygpKQogICAgICAgICArK21fc3RhY2tTaXplOwogICAgIGlmIChtX21heFN0YWNrU2l6ZSA8IG1f
c3RhY2tTaXplKQpAQCAtNTkxLDcgKzY2OSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJ
bmZvcm1hdGlvbkZvckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAg
ICAgUmVzdWx0TGlzdCB0ZW1wb3JhcnlSZXN1bHRzKHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpKTsK
IAogICAgIGNvbnN0IHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gbV9zdGFja1NpemU7Ci0gICAgY29u
c3QgdW5zaWduZWQgYmFzZSA9IHN0YWNrT2Zmc2V0IC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnM7CisgICAgY29uc3QgdW5zaWduZWQgYmFzZSA9IHN0YWNrT2Zmc2V0IC0gQ2FsbEZy
YW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgLSAxOwogCiAgICAgY29uc3QgdWludDMyX3QgZ3By
TGltaXQgPSBiYXNlIC0gc3RhY2tDb3VudCAtIGdwckNvdW50OwogICAgIGNvbnN0IHVpbnQzMl90
IGZwckxpbWl0ID0gZ3ByTGltaXQgLSBmcHJDb3VudDsKQEAgLTY4Myw3ICs3NjEsNyBAQCBhdXRv
IExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUpIC0+IFZlYwogCiAgICAgdWludDMyX3QgZ3BySW5kZXggPSAwOwogICAgIHVp
bnQzMl90IGZwckluZGV4ID0gZ3ByQ291bnQ7Ci0gICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7
CisgICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDE7CiAgICAgY29uc3QgdWludDMyX3QgbWF4R1BS
SW5kZXggPSBncHJDb3VudDsKICAgICBjb25zdCB1aW50MzJfdCBtYXhGUFJJbmRleCA9IG1heEdQ
UkluZGV4ICsgZnByQ291bnQ7CiAKQEAgLTczMSw3ICs4MDksNyBAQCBhdXRvIExMSW50R2VuZXJh
dG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxS
ZXN1bHQKICAgICBjb25zdCB1aW50MzJfdCBtYXhGUFJJbmRleCA9IGdwckNvdW50ICsgZnByQ291
bnQ7CiAgICAgdWludDMyX3QgZ3BySW5kZXggPSAwOwogICAgIHVpbnQzMl90IGZwckluZGV4ID0g
bWF4R1BSSW5kZXg7Ci0gICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7CisgICAgdWludDMyX3Qg
c3RhY2tJbmRleCA9IDE7CiAKICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiByZWdpc3RlckFy
Z3VtZW50cyhncHJDb3VudCArIGZwckNvdW50KTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgZ3ByQ291bnQgKyBmcHJDb3VudDsgaSsrKQpAQCAtOTA2LDYgKzk4NCw3IEBAIGF1dG8gTExJ
bnRHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5j
bG9zaW5nU3RhY2ssIENvCiAKICAgICBibG9jayA9IENvbnRyb2xUeXBlOjpsb29wKHNpZ25hdHVy
ZSwgbV9zdGFja1NpemUsIFdURk1vdmUoYm9keSksIFdURk1vdmUoY29udGludWF0aW9uKSk7CiAK
KyAgICBWZWN0b3I8dW5zaWduZWQ+IHVucmVzb2x2ZWRPZmZzZXRzOwogICAgIFZlY3RvcjxWaXJ0
dWFsUmVnaXN0ZXI+IG9zckVudHJ5RGF0YTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
bV9jb2RlQmxvY2stPm1fbnVtQXJndW1lbnRzOyBpKyspCiAgICAgICAgIG9zckVudHJ5RGF0YS5h
cHBlbmQobV9ub3JtYWxpemVkQXJndW1lbnRzW2ldKTsKQEAgLTkxNiw5ICs5OTUsMTIgQEAgYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNr
JiBlbmNsb3NpbmdTdGFjaywgQ28KICAgICBmb3IgKHVpbnQzMl90IGkgPSBncHJDb3VudCArIGZw
ckNvdW50ICsgbnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnM7IGkgPCBtX2NvZGVCbG9j
ay0+bV9udW1WYXJzOyBpKyspCiAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQodmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaSkpOwogICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsg
Y29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9s
SW5kZXgpIHsKKyAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0
YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKICAgICAgICAgU3RhY2smIGV4cHJlc3Np
b25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2Vk
RXhwcmVzc2lvblN0YWNrOwogICAgICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiBleHByZXNzaW9u
IDogZXhwcmVzc2lvblN0YWNrKQogICAgICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZChleHBy
ZXNzaW9uKTsKKyAgICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpKQorICAg
ICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZChXVEY6OmdldDxDb250cm9sQ2F0Y2g+KGRhdGEp
Lm1fZXhjZXB0aW9uKTsKICAgICB9CiAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gZXhwcmVzc2lv
biA6IGVuY2xvc2luZ1N0YWNrKQogICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKGV4cHJlc3Np
b24pOwpAQCAtOTc1LDYgKzEwNTcsMTU5IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2VU
b1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJl
IHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBT
dGFjayYgbmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25z
ID0gdHJ1ZTsKKyAgICArK21fdHJ5RGVwdGg7CisgICAgaWYgKG1fbWF4VHJ5RGVwdGggPCBtX3Ry
eURlcHRoKQorICAgICAgICBtX21heFRyeURlcHRoID0gbV90cnlEZXB0aDsKKworICAgIHNwbGl0
U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOworICAgIFJlZjxMYWJl
bD4gdHJ5TGFiZWwgPSBuZXdFbWl0dGVkTGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+IGNvbnRpbnVh
dGlvbiA9IG5ld0xhYmVsKCk7CisgICAgcmVzdWx0ID0gQ29udHJvbFR5cGU6OmNyZWF0ZVRyeShz
aWduYXR1cmUsIG1fc3RhY2tTaXplLCBXVEZNb3ZlKHRyeUxhYmVsKSwgV1RGTW92ZShjb250aW51
YXRpb24pLCBtX3RyeURlcHRoKTsKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIExMSW50R2Vu
ZXJhdG9yOjpmaW5hbGl6ZVByZXZpb3VzQmxvY2tGb3JDYXRjaChDb250cm9sVHlwZSYgZGF0YSwg
U3RhY2smIGV4cHJlc3Npb25TdGFjaykKK3sKKyAgICBpZiAoIUNvbnRyb2xUeXBlOjppc0FueUNh
dGNoKGRhdGEpKQorICAgICAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNz
aW9uU3RhY2spOworICAgIGVsc2UgeworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChkYXRhLnN0
YWNrU2l6ZSgpKTsKKyAgICAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24mIHZhbHVlIDogZXhwcmVz
c2lvblN0YWNrKSB7CisgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIGRzdCwgdmFsdWUp
OworICAgICAgICAgICAgdmFsdWUgPSBUeXBlZEV4cHJlc3Npb24geyB2YWx1ZS50eXBlKCksIGRz
dCB9OworICAgICAgICAgICAgZHN0IC09IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgV2FzbUpt
cDo6ZW1pdCh0aGlzLCBkYXRhLm1fY29udGludWF0aW9uLT5iaW5kKHRoaXMpKTsKK30KKworYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBD
b250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIGZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKGRhdGEsIGV4cHJlc3Npb25TdGFj
ayk7CisgICAgcmV0dXJuIGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRleCwgZXhj
ZXB0aW9uU2lnbmF0dXJlLCBkYXRhLCByZXN1bHRzKTsKK30KKworYXV0byBMTEludEdlbmVyYXRv
cjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBT
aWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExp
c3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0g
dHJ1ZTsKKyAgICBSZWY8TGFiZWw+IGNhdGNoTGFiZWwgPSBuZXdFbWl0dGVkTGFiZWwoKTsKKwor
ICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZXhjZXB0aW9uID0gcHVzaCgpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRy
b2xUcnk+KGRhdGEpKSB7CisgICAgICAgIENvbnRyb2xUcnkmIHRyeURhdGEgPSBXVEY6OmdldDxD
b250cm9sVHJ5PihkYXRhKTsKKyAgICAgICAgZGF0YSA9IENvbnRyb2xUeXBlOjpjcmVhdGVDYXRj
aChkYXRhLm1fc2lnbmF0dXJlLCBkYXRhLnN0YWNrU2l6ZSgpLCBXVEZNb3ZlKHRyeURhdGEubV90
cnkpLCBXVEZNb3ZlKGRhdGEubV9jb250aW51YXRpb24pLCBjYXRjaExhYmVsLCB0cnlEYXRhLm1f
dHJ5RGVwdGgsIGV4Y2VwdGlvbik7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKHB1c2goKSk7CisKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAg
ICAgICBXYXNtQ2F0Y2g6OmVtaXQodGhpcywgZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvbiwgZXhj
ZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgcmVzdWx0cy5pc0VtcHR5KCkgPyAwIDog
LXJlc3VsdHNbMF0ub2Zmc2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgV2FzbUNhdGNoTm9UbHM6
OmVtaXQodGhpcywgZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvbiwgZXhjZXB0aW9uU2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSwgcmVzdWx0cy5pc0VtcHR5KCkgPyAwIDogLXJlc3VsdHNbMF0ub2Zm
c2V0KCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
cmVzdWx0c1tpXTsKKyAgICAgICAgVHlwZSB0eXBlID0gZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3Vt
ZW50KGkpOworICAgICAgICBzd2l0Y2ggKHR5cGUua2luZCkgeworICAgICAgICBjYXNlIFdhc206
OlR5cGVLaW5kOjpGMzI6CisgICAgICAgICAgICBXYXNtRjMyUmVpbnRlcnByZXRJMzI6OmVtaXQo
dGhpcywgZHN0LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6
VHlwZUtpbmQ6OkY2NDoKKyAgICAgICAgICAgIFdhc21GNjRSZWludGVycHJldEk2NDo6ZW1pdCh0
aGlzLCBkc3QsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpU
eXBlS2luZDo6STMyOgorICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJNjQ6CisgICAgICAg
IGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkV4dGVybnJlZjoKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBl
S2luZDo6RnVuY3JlZjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgQ29udHJvbENhdGNoJiBjYXRjaERhdGEgPSBXVEY6
OmdldDxDb250cm9sQ2F0Y2g+KGRhdGEpOworICAgIGNhdGNoRGF0YS5tX2tpbmQgPSBDYXRjaEtp
bmQ6OkNhdGNoOworICAgIG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKHsgSGFuZGxl
clR5cGU6OkNhdGNoLCBjYXRjaERhdGEubV90cnlTdGFydC0+bG9jYXRpb24oKSwgY2F0Y2hEYXRh
Lm1fdHJ5RW5kLT5sb2NhdGlvbigpLCBjYXRjaExhYmVsLT5sb2NhdGlvbigpLCBtX3RyeURlcHRo
LCBleGNlcHRpb25JbmRleCB9KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJbnRH
ZW5lcmF0b3I6OmFkZENhdGNoQWxsKFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xUeXBl
JiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZmluYWxpemVQcmV2aW91c0Jsb2NrRm9y
Q2F0Y2goZGF0YSwgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBXYXNtSm1wOjplbWl0KHRoaXMsIGRh
dGEubV9jb250aW51YXRpb24tPmJpbmQodGhpcykpOworICAgIHJldHVybiBhZGRDYXRjaEFsbFRv
VW5yZWFjaGFibGUoZGF0YSk7Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhdGNoQWxs
VG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOworICAgIFJlZjxMYWJlbD4gY2F0Y2hMYWJlbCA9IG5l
d0VtaXR0ZWRMYWJlbCgpOworICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZXhjZXB0aW9uID0gcHVzaCgpOworICAgIGlmIChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPENvbnRyb2xUcnk+KGRhdGEpKSB7CisgICAgICAgIENvbnRyb2xUcnkmIHRy
eURhdGEgPSBXVEY6OmdldDxDb250cm9sVHJ5PihkYXRhKTsKKyAgICAgICAgZGF0YSA9IENvbnRy
b2xUeXBlOjpjcmVhdGVDYXRjaChkYXRhLm1fc2lnbmF0dXJlLCBkYXRhLnN0YWNrU2l6ZSgpLCBX
VEZNb3ZlKHRyeURhdGEubV90cnkpLCBXVEZNb3ZlKGRhdGEubV9jb250aW51YXRpb24pLCBjYXRj
aExhYmVsLCB0cnlEYXRhLm1fdHJ5RGVwdGgsIGV4Y2VwdGlvbik7CisgICAgfQorICAgIENvbnRy
b2xDYXRjaCYgY2F0Y2hEYXRhID0gV1RGOjpnZXQ8Q29udHJvbENhdGNoPihkYXRhKTsKKyAgICBj
YXRjaERhdGEubV9raW5kID0gQ2F0Y2hLaW5kOjpDYXRjaEFsbDsKKworICAgIGlmIChDb250ZXh0
Ojp1c2VGYXN0VExTKCkpCisgICAgICAgIFdhc21DYXRjaEFsbDo6ZW1pdCh0aGlzLCBleGNlcHRp
b24pOworICAgIGVsc2UKKyAgICAgICAgV2FzbUNhdGNoQWxsTm9UbHM6OmVtaXQodGhpcywgZXhj
ZXB0aW9uKTsKKworICAgIG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKHsgSGFuZGxl
clR5cGU6OkNhdGNoQWxsLCBjYXRjaERhdGEubV90cnlTdGFydC0+bG9jYXRpb24oKSwgY2F0Y2hE
YXRhLm1fdHJ5RW5kLT5sb2NhdGlvbigpLCBjYXRjaExhYmVsLT5sb2NhdGlvbigpLCBtX3RyeURl
cHRoLCAwIH0pOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFk
ZERlbGVnYXRlKENvbnRyb2xUeXBlJiB0YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZSh0YXJnZXQs
IGRhdGEpOworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFi
bGUoQ29udHJvbFR5cGUmIHRhcmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICBSZWY8TGFiZWw+IGRlbGVn
YXRlTGFiZWwgPSBuZXdFbWl0dGVkTGFiZWwoKTsKKworICAgIEFTU0VSVChDb250cm9sVHlwZTo6
aXNUcnkodGFyZ2V0KSB8fCBDb250cm9sVHlwZTo6aXNUb3BMZXZlbCh0YXJnZXQpKTsKKyAgICB1
bnNpZ25lZCB0YXJnZXREZXB0aCA9IENvbnRyb2xUeXBlOjppc1RyeSh0YXJnZXQpID8gV1RGOjpn
ZXQ8Q29udHJvbFRyeT4odGFyZ2V0KS5tX3RyeURlcHRoIDogMDsKKworICAgIENvbnRyb2xUcnkm
IHRyeURhdGEgPSBXVEY6OmdldDxDb250cm9sVHJ5PihkYXRhKTsKKyAgICBtX2NvZGVCbG9jay0+
YWRkRXhjZXB0aW9uSGFuZGxlcih7IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSwgdHJ5RGF0YS5tX3Ry
eS0+bG9jYXRpb24oKSwgZGVsZWdhdGVMYWJlbC0+bG9jYXRpb24oKSwgMCwgbV90cnlEZXB0aCwg
dGFyZ2V0RGVwdGggfSk7CisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIHJldHVybiB7IH07
Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbklu
ZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICB3YWxrRXhwcmVzc2lvblN0
YWNrKGFyZ3MsIFsmXShWaXJ0dWFsUmVnaXN0ZXImIGFyZywgVmlydHVhbFJlZ2lzdGVyIHNsb3Qp
IHsKKyAgICAgICAgaWYgKGFyZyA9PSBzbG90KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBXYXNtTW92OjplbWl0KHRoaXMsIHNsb3QsIGFyZyk7CisgICAgICAgIGFyZyA9IHNsb3Q7Cisg
ICAgfSk7CisgICAgV2FzbVRocm93OjplbWl0KHRoaXMsIGV4Y2VwdGlvbkluZGV4LCBhcmdzLmlz
RW1wdHkoKSA/IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKDApIDogYXJnc1swXSk7CisgICAgcmV0
dXJuIHsgfTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwg
Q29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRp
b25zID0gdHJ1ZTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQ2F0
Y2g+KGRhdGEpKTsKKyAgICBDb250cm9sQ2F0Y2ggY2F0Y2hEYXRhID0gV1RGOjpnZXQ8Q29udHJv
bENhdGNoPihkYXRhKTsKKyAgICBXYXNtUmV0aHJvdzo6ZW1pdCh0aGlzLCBjYXRjaERhdGEubV9l
eGNlcHRpb24pOworICAgIHJldHVybiB7IH07Cit9CisKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFk
ZFJldHVybihjb25zdCBDb250cm9sVHlwZSYgZGF0YSwgU3RhY2smIHJldHVyblZhbHVlcykgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIGlmICghZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQo
KSkgewpAQCAtMTA0OSwxOSArMTI4NCwyNSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjplbmRCbG9j
ayhDb250cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYQogewog
ICAgIC8vIEZJWE1FOiBXZSBvbmx5IG5lZWQgdG8gbWF0ZXJpYWxpemUgY29uc3RhbnRzIGhlcmUg
aWYgdGhlcmUgZXhpc3RzIGEganVtcCB0byB0aGlzIGxhYmVsCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzY1NwotICAgIG1hdGVyaWFsaXplQ29uc3Rh
bnRzQW5kTG9jYWxzKGV4cHJlc3Npb25TdGFjayk7CisgICAgZmluYWxpemVQcmV2aW91c0Jsb2Nr
Rm9yQ2F0Y2goZW50cnkuY29udHJvbERhdGEsIGV4cHJlc3Npb25TdGFjayk7CiAgICAgcmV0dXJu
IGFkZEVuZFRvVW5yZWFjaGFibGUoZW50cnksIGV4cHJlc3Npb25TdGFjaywgZmFsc2UpOwogfQog
CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5
JiBlbnRyeSwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgYm9vbCB1bnJlYWNoYWJsZSkg
LT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJs
ZShDb250cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBib29sIHVucmVh
Y2hhYmxlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBlbnRy
eS5jb250cm9sRGF0YTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKHVucmVhY2hhYmxlIHx8IG1fc3Rh
Y2tTaXplID09IGRhdGEuc3RhY2tTaXplKCkgKyBkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3Vu
dCgpKTsKKyAgICB1bnNpZ25lZCBzdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOworICAgIGlm
IChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChlbnRyeS5jb250cm9sRGF0YSkpCisgICAgICAgICsr
c3RhY2tTaXplOyAvLyBBY2NvdW50IGZvciB0aGUgY2F1Z2h0IGV4Y2VwdGlvbgorICAgIFJFTEVB
U0VfQVNTRVJUKHVucmVhY2hhYmxlIHx8IG1fc3RhY2tTaXplID09ICBzdGFja1NpemUgKyBkYXRh
Lm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKTsKIAogICAgIG1fc3RhY2tTaXplID0gZGF0YS5z
dGFja1NpemUoKTsKIAorICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkgfHwgV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQ2F0Y2g+KGRhdGEpKQorICAgICAgICAtLW1fdHJ5RGVw
dGg7CisKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3NpZ25hdHVyZS0+cmV0
dXJuQ291bnQoKTsgKytpKSB7CiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG8gYSBjb25z
aXN0ZW5jeSBjaGVjayBoZXJlIGJlY2F1c2Ugd2UganVzdCByZXNldCB0aGUgc3RhY2sgc2l6ZQog
ICAgICAgICAvLyBhcmUgcHVzaGluZyBuZXcgdmFsdWVzLCB3aGlsZSB3ZSBhbHJlYWR5IGhhdmUg
dGhlIHNhbWUgdmFsdWVzIGluIHRoZSBzdGFjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKaW5kZXggOGExNjAzODI2YzEwMGViZmYwOGEwMzA2
ZjYyZWQxOTdiYmNlZmY1Yi4uYzAxMmZiMWVlNzE0YWY5ODIzZGEyNmM2YzM0ZDhhYjc3MmViNDU1
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJh
dG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9y
LmgKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBTaWdu
YXR1cmU7CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUo
Y29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUo
Y29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgTW9kdWxlSW5mb3JtYXRp
b24mLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oCmluZGV4IGNmOGI0NDYw
MzY4MTEyM2VjYzI1Y2ZjMzcyNDk4YjVmNWI1OGM5ODYuLmY4ZjA1M2I1ODYwZTdkZjk3ZGI0NDY0
YWEwZWExNzQ4ZDliODdmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21MaW1pdHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTGltaXRz
LmgKQEAgLTQxLDYgKzQxLDcgQEAgY29uc3RleHByIHNpemVfdCBtYXhUeXBlcyA9IDEwMDAwMDA7
CiBjb25zdGV4cHIgc2l6ZV90IG1heEZ1bmN0aW9ucyA9IDEwMDAwMDA7CiBjb25zdGV4cHIgc2l6
ZV90IG1heEltcG9ydHMgPSAxMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEV4cG9ydHMgPSAx
MDAwMDA7Citjb25zdGV4cHIgc2l6ZV90IG1heEV4Y2VwdGlvbnMgPSAxMDAwMDA7CiBjb25zdGV4
cHIgc2l6ZV90IG1heEdsb2JhbHMgPSAxMDAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhEYXRh
U2VnbWVudHMgPSAxMDAwMDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwCmluZGV4IDM1NDkxY2ZlNTQxMDU3M2FiZDM1YmEz
OWI3NTYwN2Q4NmMyNjhkYjYuLmM2ZThiOGM3ZmViOWNjMjA4ZWIyNzk2ZWE3ZjJhNDIwNGQ0MDc2
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZv
cm1hdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUlu
Zm9ybWF0aW9uLmNwcApAQCAtMzYsNiArMzYsNyBAQCBNb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxl
SW5mb3JtYXRpb24oKQogICAgIDogbmFtZVNlY3Rpb24oTmFtZVNlY3Rpb246OmNyZWF0ZSgpKQog
ewogfQorCiBNb2R1bGVJbmZvcm1hdGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKCkgeyB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCmluZGV4IGEyYjBmODM2Yzg5YzIwZWVlMjRiOWFi
MzRiZTEwMWMyODUxNDAzNTIuLjMyOGM2YmNhNmJmYTY2MmI1M2U5YzhjOGRhOWFjYjE4ZjUwNDRh
YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZv
cm1hdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZv
cm1hdGlvbi5oCkBAIC01OCw4ICs1OCwyMiBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICAgICAg
ICAgIDogaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleCAtIGlt
cG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCldOwogICAgIH0KIAorICAgIHNpemVf
dCBleGNlcHRpb25JbmRleFNwYWNlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEV4Y2VwdGlv
blNpZ25hdHVyZUluZGljZXMuc2l6ZSgpICsgaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRp
Y2VzLnNpemUoKTsgfQorICAgIGJvb2wgaXNJbXBvcnRlZEV4Y2VwdGlvbkZyb21FeGNlcHRpb25J
bmRleFNwYWNlKHNpemVfdCBleGNlcHRpb25JbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChleGNlcHRpb25JbmRleCA8IGV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCkpOworICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uSW5kZXggPCBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2Vz
LnNpemUoKTsKKyAgICB9CisgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRXhj
ZXB0aW9uSW5kZXhTcGFjZShzaXplX3QgZXhjZXB0aW9uSW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaXNJbXBvcnRlZEV4Y2VwdGlvbkZyb21FeGNlcHRpb25JbmRleFNwYWNlKGV4
Y2VwdGlvbkluZGV4KQorICAgICAgICAgICAgPyBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRp
Y2VzW2V4Y2VwdGlvbkluZGV4XQorICAgICAgICAgICAgOiBpbnRlcm5hbEV4Y2VwdGlvblNpZ25h
dHVyZUluZGljZXNbZXhjZXB0aW9uSW5kZXggLSBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRp
Y2VzLnNpemUoKV07CisgICAgfQorCiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgp
IGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0K
ICAgICB1aW50MzJfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRl
cm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbXBv
cnRFeGNlcHRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEV4Y2VwdGlvblNpZ25hdHVy
ZUluZGljZXMuc2l6ZSgpOyB9CiAKICAgICAvLyBDdXJyZW50bHksIG91ciB3YXNtIGltcGxlbWVu
dGF0aW9uIGFsbG93cyBvbmx5IG9uZSBtZW1vcnkgYW5kIHRhYmxlLgogICAgIC8vIElmIHdlIG5l
ZWQgdG8gcmVtb3ZlIHRoaXMgbGltaXRhdGlvbiwgd2Ugd291bGQgaGF2ZSBNZW1vcnlJbmZvcm1h
dGlvbiBhbmQgVGFibGVJbmZvcm1hdGlvbiBpbiB0aGUgVmVjdG9ycy4KQEAgLTc2LDkgKzkwLDE0
IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxNb2R1bGVJbmZvcm1hdGlvbj4gewogICAgIGJvb2wgaXNEZWNsYXJlZEZ1bmN0aW9uKHVpbnQz
Ml90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2RlY2xhcmVkRnVuY3Rpb25zLmNvbnRhaW5zKGlu
ZGV4KTsgfQogICAgIHZvaWQgYWRkRGVjbGFyZWRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkgeyBt
X2RlY2xhcmVkRnVuY3Rpb25zLnNldChpbmRleCk7IH0KIAorICAgIGJvb2wgaXNEZWNsYXJlZEV4
Y2VwdGlvbih1aW50MzJfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9kZWNsYXJlZEV4Y2VwdGlv
bnMuY29udGFpbnMoaW5kZXgpOyB9CisgICAgdm9pZCBhZGREZWNsYXJlZEV4Y2VwdGlvbih1aW50
MzJfdCBpbmRleCkgeyBtX2RlY2xhcmVkRXhjZXB0aW9ucy5zZXQoaW5kZXgpOyB9CisKICAgICBW
ZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW1wb3J0
RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW50
ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7CisgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4
PiBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzOworICAgIFZlY3RvcjxTaWduYXR1cmVJ
bmRleD4gaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxSZWY8
U2lnbmF0dXJlPj4gdXNlZFNpZ25hdHVyZXM7CiAKICAgICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1v
cnk7CkBAIC05OCw2ICsxMTcsOCBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICB1aW50MzJfdCBu
dW1iZXJPZkRhdGFTZWdtZW50cyB7IDAgfTsKIAogICAgIEJpdFZlY3RvciBtX2RlY2xhcmVkRnVu
Y3Rpb25zOworICAgIEJpdFZlY3RvciBtX2RlY2xhcmVkRXhjZXB0aW9uczsKKyAgICBCaXRWZWN0
b3IgbV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zOwogICAgIG11dGFibGUgQml0VmVjdG9y
IG1fcmVmZXJlbmNlZEZ1bmN0aW9uczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKaW5kZXggMGQ0MzM4ZDY1OTIx
MzIyZjAyODBkZWY2OWQ1ODM2MTZiNDlkNjFjYi4uNjEwMzE2MWMxYzJmMDI0YzI5NGMwZmUxNTQw
ZmViYzc1MmI5ZGRjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKQEAgLTkxLDE2ICs5MSwyMCBAQCB2b2lkIE9NR0Zv
ck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAorICAgIEludGVybmFsRnVuY3Rpb24qIGludGVybmFsRnVuY3Rpb24gPSBwYXJzZUFu
ZENvbXBpbGVSZXN1bHQtPmdldCgpOworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPj4gZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21w
dXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBp
bnRlcm5hbEZ1bmN0aW9uLCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKKwogICAgIG9tZ0VudHJ5cG9p
bnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJ
WkVfV0FTTV9DT0RFX0ZPUl9NT0RFKENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2Rl
LCBsaW5rQnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9NR0Zvck9T
UkVudHJ5IGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1
cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5j
dGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVu
Y3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250
ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogCi0gICAgb21nRW50cnlwb2ludC5jYWxs
ZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+
ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICBvbWdFbnRyeXBvaW50LmNhbGxl
ZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY2Fs
bGVlU2F2ZVJlZ2lzdGVycyk7CiAKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9t
b2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKLSAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxs
ZWU+IGNhbGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRy
eXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2Vj
dGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUs
IG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKKyAgICBSZWY8T01HRm9yT1NS
RW50cnlDYWxsZWU+IGNhbGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92
ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9u
LT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUsIG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKGlu
dGVybmFsRnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZXhj
ZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKICAg
ICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBp
bGVSZXN1bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNt
KGNhbGxlZS5wdHIoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIo
aW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNt
KGNhbGxlZS5wdHIoKSkpOwogCiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NvZGVCbG9jay0+
bV9sb2NrIH07CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNh
bGxzaXRlcygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAK
aW5kZXggNWU3OWYxYmM5ODVjNjVkNWNiYmFmODc4NGJkYjQ4OTBkYzhlNjI1MC4uZjhlZTAwMDgw
ODk5ZGM2YWE1NjViMjJhZDkzM2M5M2QzNGFhMmJlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtODgsMTcgKzg4LDIxIEBAIHZvaWQgT01HUGxhbjo6
d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIElu
dGVybmFsRnVuY3Rpb24qIGludGVybmFsRnVuY3Rpb24gPSBwYXJzZUFuZENvbXBpbGVSZXN1bHQt
PmdldCgpOworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPj4gZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBpbnRlcm5hbEZ1bmN0aW9u
LCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKKwogICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24g
PSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfV0FTTV9DT0RFX0ZP
Ul9NT0RFKENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbGlua0J1ZmZlciwgSklUQ29tcGlsYXRp
b25QdHJUYWcsICJXZWJBc3NlbWJseSBPTUcgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1
bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3Ry
aW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAog
ICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAKLSAg
ICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29t
cGlsZVJlc3VsdC52YWx1ZSgpLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOworICAg
IG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5j
dGlvbi0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgewogICAgICAgICBB
U1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkp
KTsKLSAgICAgICAgUmVmPE9NR0NhbGxlZT4gY2FsbGVlID0gT01HQ2FsbGVlOjpjcmVhdGUoV1RG
TW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0
aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodW5saW5r
ZWRDYWxscykpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIocGFyc2VB
bmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6
Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAgUmVmPE9NR0NhbGxlZT4gY2FsbGVlID0g
T01HQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNw
YWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhT
cGFjZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+
c3RhY2ttYXBzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyks
IFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaFBvaW50ZXIoaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9u
LCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwogICAgICAgICBBU1NFUlQoIW1f
Y29kZUJsb2NrLT5tX29tZ0NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSk7CiAgICAgICAgIGVudHJ5
cG9pbnQgPSBjYWxsZWUtPmVudHJ5cG9pbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU9TUkVudHJ5RGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9TUkVudHJ5RGF0YS5oCmluZGV4IGQ0MWVkNzkzMmIzMGU5YWEwYWU4NzYzYmE4
MmE2MTJjYWY3ZTY0OGIuLmQ5M2YzNDJjZTY0MmQyYzY2MzlmNjkwNjU5ZTZhMjViM2EwYTc4MjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeURhdGEu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlEYXRhLmgKQEAg
LTI3LDggKzI3LDggQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKIAorI2luY2x1
ZGUgIkIzVHlwZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKLSNpbmNsdWRlICJXYXNtRm9y
bWF0LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewpAQCAtNDcsNiArNDcsOSBAQCBwcml2YXRlOgogICAgIEIzOjpUeXBlIG1fdHlw
ZTsKIH07CiAKK3VzaW5nIFN0YWNrTWFwID0gVmVjdG9yPE9TUkVudHJ5VmFsdWU+OwordXNpbmcg
U3RhY2tNYXBzID0gSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBTdGFja01hcD47CisKIGNsYXNzIE9T
UkVudHJ5RGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT1NSRW50cnlEYXRhKTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTU5LDEyICs2MiwxMiBAQCBwdWJsaWM6CiAK
ICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbklu
ZGV4OyB9CiAgICAgdWludDMyX3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9sb29wSW5k
ZXg7IH0KLSAgICBWZWN0b3I8T1NSRW50cnlWYWx1ZT4mIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFs
dWVzOyB9CisgICAgU3RhY2tNYXAmIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAKIHBy
aXZhdGU6CiAgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4OwogICAgIHVpbnQzMl90IG1fbG9v
cEluZGV4OwotICAgIFZlY3RvcjxPU1JFbnRyeVZhbHVlPiBtX3ZhbHVlczsKKyAgICBTdGFja01h
cCBtX3ZhbHVlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggODViNDI0ZmIxODQ4
OTMwOGRmMjdmOWE2MTdlN2Y3MzBmNjNlMjU2OS4uZGFiYWVlN2ViODJkNzFiZGRiMTI5N2MwMWIz
ZTNmZWRhNTNkNzc4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVy
YXRpb25zLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgi
CiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dElubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCkBAIC0xMDUsMjQg
KzEwNiwxMCBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21waWxlKFRpZXJV
cENvdW50JiB0aWVyVXAsIE9NR0NhbGxlZSogcmVwbGFjZQogICAgIH0KIH0KIAotU1VQUFJFU1Nf
QVNBTgotc3RhdGljIHZvaWQgZG9PU1JFbnRyeShJbnN0YW5jZSogaW5zdGFuY2UsIFByb2JlOjpD
b250ZXh0JiBjb250ZXh0LCBCQlFDYWxsZWUmIGNhbGxlZSwgT01HRm9yT1NSRW50cnlDYWxsZWUm
IG9zckVudHJ5Q2FsbGVlLCBPU1JFbnRyeURhdGEmIG9zckVudHJ5RGF0YSkKK3ZvaWQgbG9hZFZh
bHVlc0ludG9CdWZmZXIoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0YWNrTWFwJiB2
YWx1ZXMsIHVpbnQ2NF90KiBidWZmZXIpCiB7Ci0gICAgYXV0byByZXR1cm5XaXRob3V0T1NSRW50
cnkgPSBbJl0gewotICAgICAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0g
MDsKLSAgICB9OwotCi0gICAgUkVMRUFTRV9BU1NFUlQob3NyRW50cnlDYWxsZWUub3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSgpID09IG9zckVudHJ5RGF0YS52YWx1ZXMoKS5zaXplKCkpOwotCi0g
ICAgdWludDY0X3QqIGJ1ZmZlciA9IGluc3RhbmNlLT5jb250ZXh0KCktPnNjcmF0Y2hCdWZmZXJG
b3JTaXplKG9zckVudHJ5Q2FsbGVlLm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSk7Ci0gICAg
aWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiByZXR1cm5XaXRob3V0T1NSRW50cnkoKTsKLQot
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgb3NyRW50cnlEYXRhLmZ1bmN0
aW9uSW5kZXgoKSwgIjpPTUcgT1NSIGVudHJ5OiBnb3QgZW50cnkgY2FsbGVlICIsIFJhd1BvaW50
ZXIoJm9zckVudHJ5Q2FsbGVlKSk7Ci0KLSAgICAvLyAxLiBQbGFjZSByZXF1aXJlZCB2YWx1ZXMg
aW4gc2NyYXRjaCBidWZmZXIuCi0gICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwg
b3NyRW50cnlEYXRhLnZhbHVlcygpLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBP
U1JFbnRyeVZhbHVlJiB2YWx1ZSA9IG9zckVudHJ5RGF0YS52YWx1ZXMoKVtpbmRleF07CisgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWVzLnNpemUoKTsgKytpbmRleCkg
eworICAgICAgICBjb25zdCBPU1JFbnRyeVZhbHVlJiB2YWx1ZSA9IHZhbHVlc1tpbmRleF07CiAg
ICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9NRyBPU1IgZW50cnkg
dmFsdWVzWyIsIGluZGV4LCAiXSAiLCB2YWx1ZS50eXBlKCksICIgIiwgdmFsdWUpOwogICAgICAg
ICBpZiAodmFsdWUuaXNHUFIoKSkgewogICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKCku
a2luZCgpKSB7CkBAIC0xNjQsMjEgKzE1MSwyOCBAQCBzdGF0aWMgdm9pZCBkb09TUkVudHJ5KElu
c3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgYwog
ICAgICAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihidWZmZXIgKyBpbmRleCkg
PSAqYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb250ZXh0
LmZwKCkpICsgdmFsdWUub2Zmc2V0RnJvbUZQKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzU3RhY2tBcmd1bWVudCgp
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUoKS5raW5kKCkpIHsKLSAgICAgICAg
ICAgIGNhc2UgQjM6OkZsb2F0OgotICAgICAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8ZmxvYXQq
PihidWZmZXIgKyBpbmRleCkgPSAqYml0d2lzZV9jYXN0PGZsb2F0Kj4oYml0d2lzZV9jYXN0PHVp
bnQ4X3QqPihjb250ZXh0LnNwKCkpICsgdmFsdWUub2Zmc2V0RnJvbVNQKCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCMzo6RG91YmxlOgotICAgICAgICAgICAg
ICAgICpiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oYnVmZmVyICsgaW5kZXgpID0gKmJpdHdpc2VfY2Fz
dDxkb3VibGUqPihiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGNvbnRleHQuc3AoKSkgKyB2YWx1ZS5v
ZmZzZXRGcm9tU1AoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihidWZmZXIgKyBp
bmRleCkgPSAqYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihj
b250ZXh0LnNwKCkpICsgdmFsdWUub2Zmc2V0RnJvbVNQKCkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQorfQorCitTVVBQUkVTU19BU0FOCitzdGF0aWMg
dm9pZCBkb09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRl
eHQsIEJCUUNhbGxlZSYgY2FsbGVlLCBPTUdGb3JPU1JFbnRyeUNhbGxlZSYgb3NyRW50cnlDYWxs
ZWUsIE9TUkVudHJ5RGF0YSYgb3NyRW50cnlEYXRhKQoreworICAgIGF1dG8gcmV0dXJuV2l0aG91
dE9TUkVudHJ5ID0gWyZdIHsKKyAgICAgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSA9IDA7CisgICAgfTsKKworICAgIFJFTEVBU0VfQVNTRVJUKG9zckVudHJ5Q2FsbGVlLm9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSA9PSBvc3JFbnRyeURhdGEudmFsdWVzKCkuc2l6ZSgp
KTsKKworICAgIHVpbnQ2NF90KiBidWZmZXIgPSBpbnN0YW5jZS0+Y29udGV4dCgpLT5zY3JhdGNo
QnVmZmVyRm9yU2l6ZShvc3JFbnRyeUNhbGxlZS5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkp
OworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gcmV0dXJuV2l0aG91dE9TUkVudHJ5
KCk7CisKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIG9zckVudHJ5RGF0
YS5mdW5jdGlvbkluZGV4KCksICI6T01HIE9TUiBlbnRyeTogZ290IGVudHJ5IGNhbGxlZSAiLCBS
YXdQb2ludGVyKCZvc3JFbnRyeUNhbGxlZSkpOworCisgICAgLy8gMS4gUGxhY2UgcmVxdWlyZWQg
dmFsdWVzIGluIHNjcmF0Y2ggYnVmZmVyLgorICAgIGxvYWRWYWx1ZXNJbnRvQnVmZmVyKGNvbnRl
eHQsIG9zckVudHJ5RGF0YS52YWx1ZXMoKSwgYnVmZmVyKTsKIAogICAgIC8vIDIuIFJlc3RvcmUg
Y2FsbGVlIHNhdmVzLgogICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVn
aXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CkBAIC02NTgsMTIgKzY1MiwxMiBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR3Jvd01lbW9yeSwgaW50MzJfdCwgKHZvaWQqIGNh
bGxGcmFtZSwgSW5zdGFuYwogICAgIHJldHVybiBncm93bi52YWx1ZSgpLnBhZ2VDb3VudCgpOwog
fQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUZpbGwsIGJv
b2wsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHRh
cmdldFZhbHVlLCB1aW50MzJfdCBjb3VudCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uV2FzbU1lbW9yeUZpbGwsIHNpemVfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMy
X3QgZHN0QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFsdWUsIHVpbnQzMl90IGNvdW50KSkKIHsK
ICAgICByZXR1cm4gaW5zdGFuY2UtPm1lbW9yeSgpLT5maWxsKGRzdEFkZHJlc3MsIHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHRhcmdldFZhbHVlKSwgY291bnQpOwogfQogCi1KU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUNvcHksIGJvb2wsIChJbnN0YW5jZSogaW5zdGFu
Y2UsIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGNv
dW50KSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSwg
c2l6ZV90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJf
dCBzcmNBZGRyZXNzLCB1aW50MzJfdCBjb3VudCkpCiB7CiAgICAgcmV0dXJuIGluc3RhbmNlLT5t
ZW1vcnkoKS0+Y29weShkc3RBZGRyZXNzLCBzcmNBZGRyZXNzLCBjb3VudCk7CiB9CkBAIC03MTEs
MTIgKzcwNSwxMiBAQCBzdGF0aWMgYm9vbCBzZXRXYXNtVGFibGVFbGVtZW50KEluc3RhbmNlKiBp
bnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyXwogICAgIHJldHVybiB0cnVlOwog
fQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxlbWVu
dCwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMy
X3Qgc2lnbmVkSW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY1ZhbHVlKSkKK0pTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25TZXRXYXNtVGFibGVFbGVtZW50LCBzaXplX3QsIChJbnN0YW5j
ZSogaW5zdGFuY2UsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IHNpZ25lZEluZGV4LCBF
bmNvZGVkSlNWYWx1ZSBlbmNWYWx1ZSkpCiB7CiAgICAgcmV0dXJuIHNldFdhc21UYWJsZUVsZW1l
bnQoaW5zdGFuY2UsIHRhYmxlSW5kZXgsIHNpZ25lZEluZGV4LCBlbmNWYWx1ZSk7CiB9CiAKLUpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVJbml0LCBib29sLCAoSW5z
dGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5k
ZXgsIHVpbnQzMl90IGRzdE9mZnNldCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5n
dGgpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUluaXQsIHNp
emVfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZWxlbWVudEluZGV4LCB1bnNpZ25l
ZCB0YWJsZUluZGV4LCB1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY09mZnNldCwgdWlu
dDMyX3QgbGVuZ3RoKSkKIHsKICAgICBBU1NFUlQoZWxlbWVudEluZGV4IDwgaW5zdGFuY2UtPm1v
ZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkuZWxlbWVudENvdW50KCkpOwogICAgIEFTU0VSVCh0
YWJsZUluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVD
b3VudCgpKTsKQEAgLTc2MSw3ICs3NTUsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uV2FzbVRhYmxlR3JvdywgaW50MzJfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdQogICAg
IHJldHVybiBvbGRTaXplOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
V2FzbVRhYmxlRmlsbCwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJ
bmRleCwgdWludDMyX3Qgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSBmaWxsLCB1aW50MzJfdCBjb3Vu
dCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwgc2l6
ZV90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBv
ZmZzZXQsIEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50KSkKIHsKICAgICBBU1NF
UlQodGFibGVJbmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRh
YmxlQ291bnQoKSk7CiAKQEAgLTc3Nyw3ICs3NzEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5z
aQogICAgIHJldHVybiB0cnVlOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uV2FzbVRhYmxlQ29weSwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZHN0
VGFibGVJbmRleCwgdW5zaWduZWQgc3JjVGFibGVJbmRleCwgaW50MzJfdCBkc3RPZmZzZXQsIGlu
dDMyX3Qgc3JjT2Zmc2V0LCBpbnQzMl90IGxlbmd0aCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uV2FzbVRhYmxlQ29weSwgc2l6ZV90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1
bnNpZ25lZCBkc3RUYWJsZUluZGV4LCB1bnNpZ25lZCBzcmNUYWJsZUluZGV4LCBpbnQzMl90IGRz
dE9mZnNldCwgaW50MzJfdCBzcmNPZmZzZXQsIGludDMyX3QgbGVuZ3RoKSkKIHsKICAgICBBU1NF
UlQoZHN0VGFibGVJbmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigp
LnRhYmxlQ291bnQoKSk7CiAgICAgQVNTRVJUKHNyY1RhYmxlSW5kZXggPCBpbnN0YW5jZS0+bW9k
dWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50KCkpOwpAQCAtOTA0LDcgKzg5OCw3
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNOb3RpZnks
IGludDMyX3QsIChJbnN0YW5jZSogaW5zdGFuCiAgICAgcmV0dXJuIFBhcmtpbmdMb3Q6OnVucGFy
a0NvdW50KHBvaW50ZXIsIGNvdW50KTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbldhc21NZW1vcnlJbml0LCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25l
ZCBkYXRhU2VnbWVudEluZGV4LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRy
ZXNzLCB1aW50MzJfdCBsZW5ndGgpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bldhc21NZW1vcnlJbml0LCBzaXplX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGRh
dGFTZWdtZW50SW5kZXgsIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3Ms
IHVpbnQzMl90IGxlbmd0aCkpCiB7CiAgICAgQVNTRVJUKGRhdGFTZWdtZW50SW5kZXggPCBpbnN0
YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS5kYXRhU2VnbWVudHNDb3VudCgpKTsK
ICAgICByZXR1cm4gaW5zdGFuY2UtPm1lbW9yeUluaXQoZHN0QWRkcmVzcywgc3JjQWRkcmVzcywg
bGVuZ3RoLCBkYXRhU2VnbWVudEluZGV4KTsKQEAgLTkxNiw2ICs5MTAsNjUgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21EYXRhRHJvcCwgdm9pZCwgKEluc3RhbmNlKiBp
bnN0YW5jZSwgdW5zaWcKICAgICBpbnN0YW5jZS0+ZGF0YURyb3AoZGF0YVNlZ21lbnRJbmRleCk7
CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGhyb3csIHZvaWQq
LCAoSW5zdGFuY2UqIGluc3RhbmNlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQgZXhj
ZXB0aW9uSW5kZXgsIEVuY29kZWRKU1ZhbHVlKiBhcmd1bWVudHMpKQoreworICAgIGluc3RhbmNl
LT5zdG9yZVRvcENhbGxGcmFtZShjYWxsRnJhbWUpOworCisgICAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBqc0luc3RhbmNlID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4o
KTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFs
T2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgY29uc3QgV2FzbTo6VGFn
JiB0YWcgPSBpbnN0YW5jZS0+dGFnKGV4Y2VwdGlvbkluZGV4KTsKKworICAgIEZpeGVkVmVjdG9y
PHVpbnQ2NF90PiB2YWx1ZXModGFnLnBhcmFtZXRlckNvdW50KCkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0YWcucGFyYW1ldGVyQ291bnQoKTsgKytpKQorICAgICAgICB2YWx1ZXNb
aV0gPSBhcmd1bWVudHNbaV07CisKKyAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBleGNlcHRp
b24gPSBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+d2Vi
QXNzZW1ibHlFeGNlcHRpb25TdHJ1Y3R1cmUoKSwgdGFnLCBXVEZNb3ZlKHZhbHVlcykpOworICAg
IHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZXhjZXB0aW9uKTsKKwor
ICAgIGdlbmVyaWNVbndpbmQodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKCEhdm0uY2FsbEZy
YW1lRm9yQ2F0Y2gpOworICAgIEFTU0VSVCghIXZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsK
KyAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKKyAgICAvLyBUaGlzIGlz
IGEgdG90YWwgaGFjaywgYnV0IHRoZSBsbGludCAoYm90aCBvcF9jYXRjaCBhbmQgbGxpbnRfaGFu
ZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbikKKyAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2Fs
bGVlIGZpZWxkIHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1
aXJlCisgICAgLy8gdGhpcyBzaW5jZSBpdCBpcyBjb21waWxlZCB3aXRoIGEgY29uc3RhbnQgVk0g
cG9pbnRlci4pIFdlIGNvdWxkIG1ha2UgdGhlIGNhbGxpbmcgY29udmVudGlvbgorICAgIC8vIGZv
ciBleGNlcHRpb25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1l
IHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5nCisgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVy
LiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCisgICAg
dm0uY2FsbGVlRm9yV2FzbUNhdGNoID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKKyAgICBiaXR3aXNl
X2Nhc3Q8dWludDY0X3QqPihjYWxsRnJhbWUpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGpzSW5zdGFuY2UtPm1vZHVsZSgp
KTsKKyAgICByZXR1cm4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7Cit9CisKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0aHJvdywgdm9pZCosIChJbnN0YW5jZSog
aW5zdGFuY2UsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSB0aHJvd25WYWx1
ZSkpCit7CisgICAgaW5zdGFuY2UtPnN0b3JlVG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisKKyAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8SlNX
ZWJBc3NlbWJseUluc3RhbmNlPigpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIEpTVmFsdWU6OmRl
Y29kZSh0aHJvd25WYWx1ZSkpOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1lKTsK
KyAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNTRVJUKCEhdm0udGFy
Z2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMg
YmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3Ro
IG9wX2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uKQorICAgIC8vIHJl
cXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUgYmFz
ZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBp
bGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGlu
ZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVG
b3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAvLyB0
byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUg
dGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJhbWUt
PmNhbGxlZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGlj
X2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRf
dD4oanNJbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENG
b3JUaHJvdzsKK30KKwogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21Ub0pT
RXhjZXB0aW9uLCB2b2lkKiwgKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpFeGNlcHRpb25U
eXBlIHR5cGUsIEluc3RhbmNlKiB3YXNtSW5zdGFuY2UpKQogewogICAgIHdhc21JbnN0YW5jZS0+
c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKQEAgLTkzMiw3ICs5ODUsNyBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24sIHZvaWQqLCAoQ2Fs
bEZyYW1lKiBjYWxsRnJhbQogICAgICAgICBpZiAodHlwZSA9PSBFeGNlcHRpb25UeXBlOjpTdGFj
a092ZXJmbG93KQogICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3Io
Z2xvYmFsT2JqZWN0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVK
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sIFdhc206OmVycm9yTWVz
c2FnZUZvckV4Y2VwdGlvblR5cGUodHlwZSkpOworICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVK
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sIHR5cGUpOwogICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGVycm9yKTsKICAgICB9
CiAKQEAgLTk0NiwxMCArOTk5LDM0IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtVG9KU0V4Y2VwdGlvbiwgdm9pZCosIChDYWxsRnJhbWUqIGNhbGxGcmFtCiAgICAgLy8g
Zm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJh
bWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKICAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRs
ZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAg
ICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwogICAgIGJpdHdp
c2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVsZSgp
KTsKICAgICByZXR1cm4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiB9CiAKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklm
Q2F0Y2hhYmxlLCBQb2ludGVyUGFpciwgKEluc3RhbmNlKiBpbnN0YW5jZSkpCit7CisgICAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3RhbmNlID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZT4oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJ
bnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
UkVMRUFTRV9BU1NFUlQoISF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKworICAgIEV4Y2VwdGlv
biogZXhjZXB0aW9uID0gdGhyb3dTY29wZS5leGNlcHRpb24oKTsKKyAgICBKU1ZhbHVlIHRocm93
blZhbHVlID0gZXhjZXB0aW9uLT52YWx1ZSgpOworCisgICAgLy8gV2Ugd2FudCB0byBjbGVhciB0
aGUgZXhjZXB0aW9uIGhlcmUgcmF0aGVyIHRoYW4gaW4gdGhlIGNhdGNoIHByb2xvZ3VlCisgICAg
Ly8gSklUIGNvZGUgYmVjYXVzZSBjbGVhcmluZyBpdCBhbHNvIGVudGFpbHMgY2xlYXJpbmcgYSBi
aXQgaW4gYW4gQXRvbWljCisgICAgLy8gYml0IGZpZWxkIGluIFZNVHJhcHMuCisgICAgdGhyb3dT
Y29wZS5jbGVhckV4Y2VwdGlvbigpOworCisgICAgdm9pZCogcGF5bG9hZCA9IG51bGxwdHI7Cisg
ICAgaWYgKEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIHdhc21FeGNlcHRpb24gPSBqc0R5bmFtaWND
YXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPih2bSwgdGhyb3duVmFsdWUpKQorICAgICAgICBw
YXlsb2FkID0gYml0d2lzZV9jYXN0PHZvaWQqPih3YXNtRXhjZXB0aW9uLT5wYXlsb2FkKCkuZGF0
YSgpKTsKKyAgICByZXR1cm4gUG9pbnRlclBhaXIgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFs
dWU6OmVuY29kZSh0aHJvd25WYWx1ZSkpLCBwYXlsb2FkIH07Cit9CisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCiAKIElHTk9SRV9XQVJOSU5HU19FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5oCmluZGV4IGVlYmU1Yjc2NGJhODk3OGM5NDQyZWI1MTgy
ODEwODcyYzY3MjRjYTQuLjVlYzdhNTk0N2NjNzM4YzNiMmI5YmIyNWQ3ZTVhNjA4ZjFiMjZlZDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaApAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJTbG93UGF0aFJl
dHVyblR5cGUuaCIKICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgorI2luY2x1ZGUgIldh
c21PU1JFbnRyeURhdGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ2LDYgKzQ3LDggQEAg
bmFtZXNwYWNlIFdhc20gewogY2xhc3MgSW5zdGFuY2U7CiBjbGFzcyBTaWduYXR1cmU7CiAKK3Zv
aWQgbG9hZFZhbHVlc0ludG9CdWZmZXIoUHJvYmU6OkNvbnRleHQmLCBjb25zdCBTdGFja01hcCYs
IHVpbnQ2NF90KiBidWZmZXIpOworCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVHJpZ2dlck9TUkVudHJ5Tm93LCB2
b2lkLCAoUHJvYmU6OkNvbnRleHQmKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbldhc21UcmlnZ2VyVGllclVwTm93LCB2b2lkLCAoSW5zdGFuY2UqLCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4KSk7CkBAIC02NiwyNiArNjksMzQgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtV3JpdGVCYXJyaWVyU2xvd1BhdGgsIHZvaWQsIChKU0NlbGwqLCBWTSoK
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUG9wY291bnQzMiwgdWludDMyX3Qs
IChpbnQzMl90KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblBvcGNvdW50
NjQsIHVpbnQ2NF90LCAoaW50NjRfdCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25Hcm93TWVtb3J5LCBpbnQzMl90LCAodm9pZCosIEluc3RhbmNlKiwgaW50MzJfdCkpOwot
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5RmlsbCwgYm9vbCwg
KEluc3RhbmNlKiwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFsdWUsIHVp
bnQzMl90IGNvdW50KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21N
ZW1vcnlDb3B5LCBib29sLCAoSW5zdGFuY2UqLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJf
dCBzcmNBZGRyZXNzLCB1aW50MzJfdCBjb3VudCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtTWVtb3J5RmlsbCwgc2l6ZV90LCAoSW5zdGFuY2UqLCB1aW50MzJfdCBk
c3RBZGRyZXNzLCB1aW50MzJfdCB0YXJnZXRWYWx1ZSwgdWludDMyX3QgY291bnQpKTsKK0pTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUNvcHksIHNpemVfdCwgKElu
c3RhbmNlKiwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMy
X3QgY291bnQpKTsKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXYXNt
VGFibGVFbGVtZW50LCBFbmNvZGVkSlNWYWx1ZSwgKEluc3RhbmNlKiwgdW5zaWduZWQsIGludDMy
X3QpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxl
bWVudCwgYm9vbCwgKEluc3RhbmNlKiwgdW5zaWduZWQsIHVpbnQzMl90LCBFbmNvZGVkSlNWYWx1
ZSBlbmNWYWx1ZSkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25TZXRXYXNt
VGFibGVFbGVtZW50LCBzaXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkLCB1aW50MzJfdCwgRW5j
b2RlZEpTVmFsdWUgZW5jVmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uV2FzbVJlZkZ1bmMsIEVuY29kZWRKU1ZhbHVlLCAoSW5zdGFuY2UqLCB1aW50MzJfdCkpOwot
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVJbml0LCBib29sLCAo
SW5zdGFuY2UqLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVp
bnQzMl90IGRzdE9mZnNldCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKTsK
K0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlSW5pdCwgc2l6ZV90
LCAoSW5zdGFuY2UqLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgs
IHVpbnQzMl90IGRzdE9mZnNldCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgp
KTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUVsZW1Ecm9wLCB2b2lk
LCAoSW5zdGFuY2UqLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgpKTsKIEpTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlR3JvdywgaW50MzJfdCwgKEluc3RhbmNlKiwgdW5z
aWduZWQsIEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGRlbHRhKSk7Ci1KU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUZpbGwsIGJvb2wsIChJbnN0YW5jZSos
IHVuc2lnbmVkLCB1aW50MzJfdCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90
IGNvdW50KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUNv
cHksIGJvb2wsIChJbnN0YW5jZSosIHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNy
Y1RhYmxlSW5kZXgsIGludDMyX3QgZHN0T2Zmc2V0LCBpbnQzMl90IHNyY09mZnNldCwgaW50MzJf
dCBsZW5ndGgpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxl
RmlsbCwgc2l6ZV90LCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgdWludDMyX3Qgb2Zmc2V0LCBFbmNv
ZGVkSlNWYWx1ZSBmaWxsLCB1aW50MzJfdCBjb3VudCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25XYXNtVGFibGVDb3B5LCBzaXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVk
IGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsIGludDMyX3QgZHN0T2Zmc2V0
LCBpbnQzMl90IHNyY09mZnNldCwgaW50MzJfdCBsZW5ndGgpKTsKIEpTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uR2V0V2FzbVRhYmxlU2l6ZSwgaW50MzJfdCwgKEluc3RhbmNlKiwg
dW5zaWduZWQpKTsKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlB
dG9taWNXYWl0MzIsIGludDMyX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGJhc2Us
IHVuc2lnbmVkIG9mZnNldCwgdWludDMyX3QgdmFsdWUsIGludDY0X3QgdGltZW91dCkpOwogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNXYWl0NjQsIGludDMy
X3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIG9mZnNldCwg
dWludDY0X3QgdmFsdWUsIGludDY0X3QgdGltZW91dCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNOb3RpZnksIGludDMyX3QsIChJbnN0YW5jZSosIHVu
c2lnbmVkLCB1bnNpZ25lZCwgaW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25XYXNtTWVtb3J5SW5pdCwgYm9vbCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZGF0YVNl
Z21lbnRJbmRleCwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWlu
dDMyX3QgbGVuZ3RoKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21N
ZW1vcnlJbml0LCBzaXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgs
IHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGxlbmd0
aCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtRGF0YURyb3AsIHZv
aWQsIChJbnN0YW5jZSosIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgpKTsKIAorSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGhyb3csIHZvaWQqLCAoSW5zdGFuY2UqLCBD
YWxsRnJhbWUqLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgRW5jb2RlZEpTVmFsdWUqKSk7CitK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZXRocm93LCB2b2lkKiwgKElu
c3RhbmNlKiwgQ2FsbEZyYW1lKiwgRW5jb2RlZEpTVmFsdWUgdGhyb3duVmFsdWUpKTsKKwogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbiwgdm9pZCos
IChDYWxsRnJhbWUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBJbnN0YW5jZSopKTsKK3N0cnVjdCBQ
b2ludGVyUGFpciB7CisgICAgdm9pZCogZmlyc3Q7CisgICAgdm9pZCogc2Vjb25kOworfTsKK0pT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVJldHJpZXZlQW5kQ2xlYXJFeGNl
cHRpb25JZkNhdGNoYWJsZSwgUG9pbnRlclBhaXIsIChJbnN0YW5jZSopKTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNlY3Rpb25QYXJzZXIuY3BwCmluZGV4IDBmOGNjYjdlMmMzYjY0MTE2MzVjZDlmNWIwNDhiMzU2
MzIwNWZhNzQuLmNmZGFmZmRkN2E0MmNjODFlNWJhM2E2MWU0YmFlOGVmNWVjYmQzYmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKQEAg
LTkxLDYgKzkxLDggQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCgpIC0+IFBhcnRp
YWxSZXN1bHQKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yICIsIGltcG9ydENvdW50LCAiIGdsb2JhbHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9j
YXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgogICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1faW5mby0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2Fu
J3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIp
OyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVs
b3cuCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25h
dHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBz
aWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhl
IEZJWE1FcyBiZWxvdy4KKyAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25z
KCkpCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0RXhjZXB0aW9u
U2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3Qg
YWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0IGV4Y2Vw
dGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBm
aXggdGhlIEZJWE1FcyBiZWxvdy4KIAogICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0g
MDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7CiAgICAgICAg
IHVpbnQzMl90IG1vZHVsZUxlbjsKQEAgLTE0Miw2ICsxNDQsMjEgQEAgYXV0byBTZWN0aW9uUGFy
c2VyOjpwYXJzZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgICAgIG1faW5mby0+
Z2xvYmFscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsK
KyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5
RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAg
ICAgICAgICB1aW50OF90IHRhZ1R5cGU7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVVJbnQ4KHRhZ1R5cGUpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIElt
cG9ydCBleGNlcHRpb24ncyB0YWcgdHlwZSIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRih0YWdUeXBlLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQgZXhjZXB0aW9uIGhhcyB0YWcg
dHlwZSAiLCB0YWdUeXBlLCAiIGJ1dCB0aGUgb25seSBzdXBwb3J0ZWQgdGFnIHR5cGUgaXMgMCIp
OworCisgICAgICAgICAgICB1aW50MzJfdCBleGNlcHRpb25TaWduYXR1cmVJbmRleDsKKyAgICAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4Y2VwdGlvblNpZ25h
dHVyZUluZGV4KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBleGNl
cHRpb24gc2lnbmF0dXJlIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwg
ZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4Y2Vw
dGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52
YWxpZCBleGNlcHRpb24gc2lnbmF0dXJlIGZvciAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQs
ICIsIGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4LCAiIGlzIG91dCBvZiByYW5nZSBvZiAiLCBtX2lu
Zm8tPnVzZWRTaWduYXR1cmVzLnNpemUoKSwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywg
IicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAga2luZEluZGV4ID0g
bV9pbmZvLT5pbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAg
ICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2V4Y2VwdGlvblNpZ25hdHVyZUluZGV4XSk7Cisg
ICAgICAgICAgICBtX2luZm8tPmltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVj
a2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgICAgIH0KIAogICAgICAgICBtX2luZm8tPmltcG9ydHMudW5jaGVja2VkQXBwZW5kKHsg
V1RGTW92ZShtb2R1bGVTdHJpbmcpLCBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZElu
ZGV4IH0pOwpAQCAtMzU4LDYgKzM3NSwxMyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRXhw
b3J0KCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICAgICAgICAgIGdsb2JhbC5iaW5kaW5nTW9k
ZSA9IEdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6RXhjZXB0aW9u
OiB7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3Nl
bWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKwor
ICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5leGNl
cHRpb25JbmRleFNwYWNlU2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGludmFs
aWQgZXhjZXB0aW9uIG51bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZXhjZXB0
aW9uIGluZGV4IHNwYWNlICIsIG1faW5mby0+ZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSwgIiwg
bmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAgbV9pbmZvLT5hZGREZWNs
YXJlZEV4Y2VwdGlvbihraW5kSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICAgICAgfQogCiAgICAgICAgIG1faW5mby0+ZXhwb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBX
VEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4IH0pOwpAQCAtODE3LDYgKzg0MSwy
OSBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YUNvdW50KCkgLT4gUGFydGlhbFJlc3Vs
dAogICAgIHJldHVybiB7IH07CiB9CiAKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VFeGNlcHRp
b24oKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9u
czo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBl
bmFibGVkIik7CisKKyAgICB1aW50MzJfdCBleGNlcHRpb25Db3VudDsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleGNlcHRpb25Db3VudCksICJjYW4ndCBnZXQgRXhj
ZXB0aW9uIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhjZXB0
aW9uQ291bnQgPiBtYXhFeGNlcHRpb25zLCAiRXhwb3J0IHNlY3Rpb24ncyBjb3VudCBpcyB0b28g
YmlnICIsIGV4Y2VwdGlvbkNvdW50LCAiIG1heGltdW0gIiwgbWF4RXhjZXB0aW9ucyk7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUlu
ZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4Y2VwdGlvbkNvdW50KSwgImNhbid0IGFsbG9jYXRl
IGVub3VnaCBtZW1vcnkgZm9yICIsIGV4Y2VwdGlvbkNvdW50LCAiIGV4Y2VwdGlvbnMiKTsKKwor
ICAgIGZvciAodWludDMyX3QgZXhjZXB0aW9uTnVtYmVyID0gMDsgZXhjZXB0aW9uTnVtYmVyIDwg
ZXhjZXB0aW9uQ291bnQ7ICsrZXhjZXB0aW9uTnVtYmVyKSB7CisgICAgICAgIHVpbnQ4X3QgdGFn
VHlwZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OCh0YWdUeXBlKSwg
ImNhbid0IGdldCAiLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24gdGFnIHR5cGUiKTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0YWdUeXBlLCBleGNlcHRpb25OdW1iZXIsICJ0
aCBFeGNlcHRpb24gaGFzIHRhZyB0eXBlICIsIHRhZ1R5cGUsICIgYnV0IHRoZSBvbmx5IHN1cHBv
cnRlZCB0YWcgdHlwZSBpcyAwIik7CisKKyAgICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodHlwZU51bWJlciksICJj
YW4ndCBnZXQgIiwgZXhjZXB0aW9uTnVtYmVyLCAidGggRXhjZXB0aW9uJ3MgdHlwZSBudW1iZXIi
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dXNl
ZFNpZ25hdHVyZXMuc2l6ZSgpLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24gdHlwZSBu
dW1iZXIgaXMgaW52YWxpZCAiLCB0eXBlTnVtYmVyKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dXNlZFNp
Z25hdHVyZXNbdHlwZU51bWJlcl0pOworICAgICAgICBtX2luZm8tPmludGVybmFsRXhjZXB0aW9u
U2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOworICAgIH0K
KworICAgIHJldHVybiB7IH07Cit9CiBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKCkg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIEN1c3RvbVNlY3Rpb24gc2VjdGlvbjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKaW5kZXggZjM2OWU3Yjg2Y2FmYTkzYWQz
ZjgzYWQ2MGNhMDg3YzhmNTg4MGVjYS4uYmVmMjA3MDFmNDBmZTQwYjRhMjhhMGFkY2ZjNDdmNmJm
MGQ1YmZmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rp
b25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKQEAg
LTQ1LDcgKzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKICAgICBtYWNy
byhFbGVtZW50LCAgICA5LCAiRWxlbWVudHMgc2VjdGlvbiIpIFwKICAgICBtYWNybyhDb2RlLCAg
ICAgIDEwLCAiRnVuY3Rpb24gYm9kaWVzIChjb2RlKSIpIFwKICAgICBtYWNybyhEYXRhLCAgICAg
IDExLCAiRGF0YSBzZWdtZW50cyIpIFwKLSAgICBtYWNybyhEYXRhQ291bnQsIDEyLCAiRGF0YSBj
b3VudCIpCisgICAgbWFjcm8oRGF0YUNvdW50LCAxMiwgIkRhdGEgY291bnQiKSBcCisgICAgbWFj
cm8oRXhjZXB0aW9uLCAxMywgIkV4Y2VwdGlvbiBkZWNsYXJhdGlvbnMiKSBcCiAKIGVudW0gY2xh
c3MgU2VjdGlvbiA6IHVpbnQ4X3QgewogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgQmVnaW4g
aXMgbGVzcyB0aGFuIGV2ZXJ5IG90aGVyIHNlY3Rpb24gbnVtYmVyIGFuZCB0aGF0IEN1c3RvbSBp
cyBncmVhdGVyLgpAQCAtOTAsNiArOTEsMTAgQEAgaW5saW5lIGJvb2wgdmFsaWRhdGVPcmRlcihT
ZWN0aW9uIHByZXZpb3VzS25vd24sIFNlY3Rpb24gbmV4dCkKICAgICBBU1NFUlQoaXNLbm93blNl
Y3Rpb24ocHJldmlvdXNLbm93bikgfHwgcHJldmlvdXNLbm93biA9PSBTZWN0aW9uOjpCZWdpbik7
CiAgICAgaWYgKHByZXZpb3VzS25vd24gPT0gU2VjdGlvbjo6RGF0YUNvdW50ICYmIG5leHQgPT0g
U2VjdGlvbjo6Q29kZSkKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHByZXZpb3VzS25v
d24gPT0gU2VjdGlvbjo6RXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gbmV4dCA+PSBTZWN0aW9u
OjpHbG9iYWw7CisgICAgaWYgKG5leHQgPT0gU2VjdGlvbjo6RXhjZXB0aW9uKQorICAgICAgICBy
ZXR1cm4gcHJldmlvdXNLbm93biA8PSBTZWN0aW9uOjpNZW1vcnk7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHByZXZpb3VzS25vd24pIDwgc3RhdGljX2Nhc3Q8dWludDhfdD4obmV4
dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWdu
YXR1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAK
aW5kZXggNzFhYWIzZGY3NTcyMmQ0MDhjNTE4YzEzZjUzODVjM2FmOWE0ODAwNi4uZjlhNTYxYjg1
MGZjNWMxOTM5ZDBlZjU5ZThhOWZkMmI2MDU5NzhmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgUmVmUHRyPFNpZ25h
dHVyZT4gU2lnbmF0dXJlOjp0cnlDcmVhdGUoU2lnbmF0dXJlQXJnQ291bnQgcmV0dXJuQ291bnQs
IFNpZ25hdHVyZUEKIAogU2lnbmF0dXJlSW5mb3JtYXRpb246OlNpZ25hdHVyZUluZm9ybWF0aW9u
KCkKIHsKLSNkZWZpbmUgTUFLRV9USFVOS19TSUdOQVRVUkUodHlwZSwgZW5jLCBzdHIsIHZhbCkg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgTUFLRV9USFVOS19TSUdOQVRVUkUo
dHlwZSwgZW5jLCBzdHIsIHZhbCwgXykgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgaWYgKFR5cGVLaW5kOjp0eXBlICE9IFR5cGVLaW5kOjpWb2lk
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIFJlZlB0cjxTaWdu
YXR1cmU+IHNpZyA9IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlKDEsIDApOyAgICAgICAgICAgIFwKQEAg
LTE2NSw2ICsxNjUsMTAgQEAgc3RydWN0IFBhcmFtZXRlclR5cGVzIHsKIAogUmVmUHRyPFNpZ25h
dHVyZT4gU2lnbmF0dXJlSW5mb3JtYXRpb246OnNpZ25hdHVyZUZvcihjb25zdCBWZWN0b3I8VHlw
ZSwgMT4mIHJlc3VsdHMsIGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJncykKIHsKKyAgICBpZiBjb25z
dGV4cHIgKEFTU0VSVF9FTkFCTEVEKSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0cy5jb250YWlu
cyhXYXNtOjpUeXBlczo6Vm9pZCkpOworICAgICAgICBBU1NFUlQoIWFyZ3MuY29udGFpbnMoV2Fz
bTo6VHlwZXM6OlZvaWQpKTsKKyAgICB9CiAgICAgU2lnbmF0dXJlSW5mb3JtYXRpb24mIGluZm8g
PSBzaW5nbGV0b24oKTsKICAgICBMb2NrZXIgbG9ja2VyIHsgaW5mby5tX2xvY2sgfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAppbmRleCBkOWZhZjVk
NTlkOTlmNWU5MDRjM2E3YjI0MDA3ZDA5MWZkMWQ5YzE3Li5hZDUxMzVlN2FkNjU3OGMzOTc2MWJk
N2QzYjU2OGEwZmQyYmY2MDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U2xvd1BhdGhzLmNwcApAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMu
aCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiV2Fz
bUJCUVBsYW4uaCIKQEAgLTU4Niw2ICs1ODgsMTExIEBAIFdBU01fU0xPV19QQVRIX0RFQ0wobWVt
b3J5X2F0b21pY19ub3RpZnkpCiAgICAgV0FTTV9SRVRVUk4ocmVzdWx0KTsKIH0KIAorV0FTTV9T
TE9XX1BBVEhfREVDTCh0aHJvdykKK3sKKyAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUo
Y2FsbEZyYW1lKTsKKworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGlu
c3RhbmNlLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwYy0+YXM8V2FzbVRocm93
LCBXYXNtT3Bjb2RlVHJhaXRzPigpOworICAgIGNvbnN0IFdhc206OlRhZyYgdGFnID0gaW5zdGFu
Y2UtPnRhZyhpbnN0cnVjdGlvbi5tX2V4Y2VwdGlvbkluZGV4KTsKKworICAgIEZpeGVkVmVjdG9y
PHVpbnQ2NF90PiB2YWx1ZXModGFnLnBhcmFtZXRlckNvdW50KCkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0YWcucGFyYW1ldGVyQ291bnQoKTsgKytpKQorICAgICAgICB2YWx1ZXNb
aV0gPSBSRUFEKChpbnN0cnVjdGlvbi5tX2ZpcnN0VmFsdWUgLSBpKSkuZW5jb2RlZEpTVmFsdWUo
KTsKKworICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IEpTV2ViQXNzZW1i
bHlFeGNlcHRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUV4Y2VwdGlv
blN0cnVjdHVyZSgpLCB0YWcsIFdURk1vdmUodmFsdWVzKSk7CisgICAgdGhyb3dFeGNlcHRpb24o
Z2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBleGNlcHRpb24pOworCisgICAgZ2VuZXJpY1Vud2lu
ZCh2bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7Cisg
ICAgQVNTRVJUKCEhdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBX
ZSBjb3VsZCBtYWtlIHRoaXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBi
dXQgdGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhj
ZXB0aW9uKQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9h
ZCB0aGUgVk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlz
IHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291
bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmly
c3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3Jl
IGp1bXBpbmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlz
LCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNt
Q2F0Y2ggPSBjYWxsRnJhbWUtPmNhbGxlZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+
KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4oanNJbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIFdBU01fUkVU
VVJOX1RXTyh2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdywgbnVsbHB0cik7Cit9CisKK1dBU01f
U0xPV19QQVRIX0RFQ0wocmV0aHJvdykKK3sKKyAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJh
bWUoY2FsbEZyYW1lKTsKKworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9
IGluc3RhbmNlLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwYy0+YXM8V2FzbVJl
dGhyb3csIFdhc21PcGNvZGVUcmFpdHM+KCk7CisgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBSRUFE
KGluc3RydWN0aW9uLm1fZXhjZXB0aW9uKS5qc1ZhbHVlKCk7CisgICAgdGhyb3dFeGNlcHRpb24o
Z2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBleGNlcHRpb24pOworCisgICAgZ2VuZXJpY1Vud2lu
ZCh2bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7Cisg
ICAgQVNTRVJUKCEhdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBX
ZSBjb3VsZCBtYWtlIHRoaXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBi
dXQgdGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhj
ZXB0aW9uKQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9h
ZCB0aGUgVk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlz
IHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291
bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmly
c3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3Jl
IGp1bXBpbmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlz
LCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNt
Q2F0Y2ggPSBjYWxsRnJhbWUtPmNhbGxlZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+
KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4oanNJbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIFdBU01fUkVU
VVJOX1RXTyh2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdywgbnVsbHB0cik7Cit9CisKK1dBU01f
U0xPV19QQVRIX0RFQ0wocmV0cmlldmVfYW5kX2NsZWFyX2V4Y2VwdGlvbikKK3sKKyAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFu
Y2UgPSBpbnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOworICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCghIXRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpOworCisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSB0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpOworICAgIEpTVmFsdWUgdGhyb3duVmFsdWUgPSBleGNlcHRpb24tPnZhbHVlKCk7
CisgICAgdm9pZCogcGF5bG9hZCA9IG51bGxwdHI7CisKKyAgICBjb25zdCBhdXRvJiBoYW5kbGVD
YXRjaEFsbCA9IFsmXShjb25zdCBhdXRvJiBpbnN0cnVjdGlvbikgeworICAgICAgICBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoaW5zdHJ1Y3Rpb24ubV9leGNlcHRpb24pID0gdGhyb3duVmFsdWU7Cisg
ICAgfTsKKworICAgIGNvbnN0IGF1dG8mIGhhbmRsZUNhdGNoID0gWyZdKGNvbnN0IGF1dG8mIGlu
c3RydWN0aW9uKSB7CisgICAgICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIHdhc21FeGNlcHRp
b24gPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPih2bSwgdGhyb3duVmFs
dWUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghIXdhc21FeGNlcHRpb24pOworICAgICAgICBw
YXlsb2FkID0gYml0d2lzZV9jYXN0PHZvaWQqPih3YXNtRXhjZXB0aW9uLT5wYXlsb2FkKCkuZGF0
YSgpKTsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGluc3RydWN0aW9uLm1fZXhjZXB0
aW9uKSA9IHRocm93blZhbHVlOworICAgIH07CisKKyAgICBpZiAocGMtPmlzPFdhc21DYXRjaCwg
V2FzbU9wY29kZVRyYWl0cz4oKSkKKyAgICAgICAgaGFuZGxlQ2F0Y2gocGMtPmFzPFdhc21DYXRj
aCwgV2FzbU9wY29kZVRyYWl0cz4oKSk7CisgICAgZWxzZSBpZiAocGMtPmlzPFdhc21DYXRjaEFs
bCwgV2FzbU9wY29kZVRyYWl0cz4oKSkKKyAgICAgICAgaGFuZGxlQ2F0Y2hBbGwocGMtPmFzPFdh
c21DYXRjaEFsbCwgV2FzbU9wY29kZVRyYWl0cz4oKSk7CisgICAgZWxzZSBpZiAocGMtPmlzPFdh
c21DYXRjaE5vVGxzLCBXYXNtT3Bjb2RlVHJhaXRzPigpKQorICAgICAgICBoYW5kbGVDYXRjaChw
Yy0+YXM8V2FzbUNhdGNoTm9UbHMsIFdhc21PcGNvZGVUcmFpdHM+KCkpOworICAgIGVsc2UgaWYg
KHBjLT5pczxXYXNtQ2F0Y2hBbGxOb1RscywgV2FzbU9wY29kZVRyYWl0cz4oKSkKKyAgICAgICAg
aGFuZGxlQ2F0Y2hBbGwocGMtPmFzPFdhc21DYXRjaEFsbE5vVGxzLCBXYXNtT3Bjb2RlVHJhaXRz
PigpKTsKKyAgICBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisK
KyAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBleGNlcHRpb24gaGVyZSByYXRoZXIgdGhhbiBp
biB0aGUgY2F0Y2ggcHJvbG9ndWUKKyAgICAvLyBKSVQgY29kZSBiZWNhdXNlIGNsZWFyaW5nIGl0
IGFsc28gZW50YWlscyBjbGVhcmluZyBhIGJpdCBpbiBhbiBBdG9taWMKKyAgICAvLyBiaXQgZmll
bGQgaW4gVk1UcmFwcy4KKyAgICB0aHJvd1Njb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgV0FT
TV9SRVRVUk5fVFdPKHBjLCBwYXlsb2FkKTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVy
blR5cGUgc2xvd19wYXRoX3dhc21fdGhyb3dfZXhjZXB0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBjb25zdCBJbnN0cnVjdGlvbiogcGMsIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6
RXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBlKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmgKaW5kZXggNzc2MjExODMz
OGE3YjcwNjk2OWIyNWI1MmNlMTZlMmMzZGM3YmQ0ZS4uYjY0Y2U3Y2RlNDFhYWEwNjg5N2U4ZmZm
ZWQ4MmE4ZDA2NDMyZGZkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVNsb3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93
UGF0aHMuaApAQCAtODMsNiArODMsOSBAQCBXQVNNX1NMT1dfUEFUSF9ISURERU5fREVDTChzZXRf
Z2xvYmFsX3JlZl9wb3J0YWJsZV9iaW5kaW5nKTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNM
KG1lbW9yeV9hdG9taWNfd2FpdDMyKTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9y
eV9hdG9taWNfd2FpdDY0KTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9yeV9hdG9t
aWNfbm90aWZ5KTsKK1dBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKHRocm93KTsKK1dBU01fU0xP
V19QQVRIX0hJRERFTl9ERUNMKHJldGhyb3cpOworV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wo
cmV0cmlldmVfYW5kX2NsZWFyX2V4Y2VwdGlvbik7CiAKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIHNsb3dfcGF0aF93YXNtX3Rocm93X2V4Y2VwdGlvbihDYWxsRnJhbWUqLCBjb25zdCBJ
bnN0cnVjdGlvbiosIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6RXhjZXB0aW9uVHlw
ZSkgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7CiBleHRlcm4gIkMiIFNsb3dQYXRo
UmV0dXJuVHlwZSBzbG93X3BhdGhfd2FzbV9wb3Bjb3VudChjb25zdCBJbnN0cnVjdGlvbiogcGMs
IHVpbnQzMl90KSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKaW5kZXggZmE1
NTJlZmZmMTc0MWVjYjVhNGI2YzJmODlmY2EwOTc1OWVlMzE1ZC4uMTJjZGFhOTY1ZWE5OGJhMThh
YzI3MTZkY2M3NmU4MjcwODUwMjEwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKQEAgLTExNyw2ICsxMTcsNyBAQCBhdXRvIFN0
cmVhbWluZ1BhcnNlcjo6cGFyc2VDb2RlU2VjdGlvblNpemUodWludDMyX3QgZnVuY3Rpb25Db3Vu
dCkgLT4gU3RhdGUKICAgICBtX2Z1bmN0aW9uQ291bnQgPSBmdW5jdGlvbkNvdW50OwogICAgIG1f
ZnVuY3Rpb25JbmRleCA9IDA7CiAgICAgbV9jb2RlT2Zmc2V0ID0gbV9vZmZzZXQ7CisgICAgbV9p
bmZvLT5tX2Z1bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlvbnMuZW5zdXJlU2l6ZShmdW5jdGlvbkNv
dW50KTsKIAogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCA9PSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0
b28gYmlnICIsIGZ1bmN0aW9uQ291bnQpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rp
b25Db3VudCAhPSBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQg
IiwgZnVuY3Rpb25Db3VudCwgIiBleGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rp
b25zICIsIG1faW5mby0+ZnVuY3Rpb25zLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlYzY3MzYyMzJmMDcyMWZjNjI1N2Q0Nzk0MTcxN2I1
MjYyYmJlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVGFnLmNwcApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21UYWcu
aCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3Bh
Y2UgV2FzbSB7CisKK3VpbnQzMl90IFRhZzo6c19pZCA9IDA7CisKK319IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGFnLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTAzOTUzZDVkNmVlZmM5MzM4MWZjOTBlNjRmNWI3MmVjMzBkMTQ3OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuaApAQCAtMCwwICsx
LDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtU2ln
bmF0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFRh
ZyA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUYWc+IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUYWcpOworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8VGFnPiBjcmVhdGUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgVGFnKHNpZ25hdHVyZSkpOyB9CisKKyAgICBTaWduYXR1cmVBcmdD
b3VudCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCk7IH0KKyAgICBUeXBlIHBhcmFtZXRlcihTaWduYXR1cmVBcmdDb3VudCBpKSBjb25z
dCB7IHJldHVybiBtX3NpZ25hdHVyZS0+YXJndW1lbnQoaSk7IH0KKworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUYWcmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lkID09IG90aGVyLm1faWQ7
IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGFnJiBvdGhlcikgY29uc3QgeyByZXR1cm4g
bV9pZCAhPSBvdGhlci5tX2lkOyB9CisKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGFn
KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQorICAgICAgICA6IG1faWQoKytzX2lkKQorICAg
ICAgICAsIG1fc2lnbmF0dXJlKFJlZiB7IHNpZ25hdHVyZSB9KQorICAgIHsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdWludDMyX3Qgc19pZDsKKyAgICB1aW50MzJfdCBtX2lkOworICAgIFJlZjxjb25z
dCBTaWduYXR1cmU+IG1fc2lnbmF0dXJlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRodW5rcy5jcHAKaW5kZXggNzlkMWJjZmY4OWZiMDRlMjJlZDU0ZjJmNjQwOGJl
MDlmMjkzZDBjMy4uZmVjMmExMzc3OWJmMjdmNjQ4ZmFhMzhhNWVmODY0OGUwOTQ4NWMxYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw4ICsyOCwx
MSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVk
ZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAi
UHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAj
aW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAppbmRleCBjMjM1Y2ZlNjI5NWU2
NjlhZTVhODBlZThmMjUyZWE2Y2EyNDMxYjgzLi5mNDVkZWIyYTU5NmNhYTI1N2UzMzFlZDIxZWYw
OWUwNmIwNWVjNTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdl
bmVyYXRvcklubGluZXNIZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5l
cmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQppbmRleCAxZTM4MGRlZjFjZDhj
YjY3NjA3NWVkMzI1NTc5YjBmNTFkMWJjZTU1Li45Njc3ZWI4M2Q5NmE3YWQ2NGZiNTE0N2E0MmI0
YTg1OGQ5NTk0MDQ3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5l
cmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQpA
QCAtMTQ0LDcgKzE0NCw3IEBAIGNsYXNzIENvZGVHZW5lcmF0b3I6CiAgICAgICAgICAgICBzZWxm
LmFkdmFuY2UoKQogICAgICAgICAgICAgc2VsZi5jb25zdW1lKCIpIikKICAgICAgICAgZWxpZiBh
cmd1bWVudFJlZ2V4Lm1hdGNoKHNlbGYudG9rZW4oKSk6Ci0gICAgICAgICAgICByZXN1bHQgPSAi
YXJnIiArIHNlbGYudG9rZW4oKVsxOl0KKyAgICAgICAgICAgIHJlc3VsdCA9ICJnZXQoYXJnIiAr
IHNlbGYudG9rZW4oKVsxOl0gKyAiKSIKICAgICAgICAgICAgIHNlbGYuYWR2YW5jZSgpCiAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICBvcCA9IHNlbGYudG9rZW4oKQpAQCAtMTU2LDEzICsxNTYs
MTYgQEAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKIAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKKyAg
ICBkZWYgbWFrZVJlc3VsdChzZWxmLCByZXN1bHRWYWx1ZSk6CisgICAgICAgIHJldHVybiByZXN1
bHRWYWx1ZSArICI7XG4iICsgInJlc3VsdCA9IHB1c2gocmVzdWx0VmFsdWUtPnR5cGUoKSk7XG4i
ICsgIm1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQs
IG9yaWdpbigpLCByZXN1bHQsIHJlc3VsdFZhbHVlKTsiCisKICAgICBkZWYgZ2VuZXJhdGUoc2Vs
Ziwgd2FzbU9wKToKICAgICAgICAgaWYgbGVuKHNlbGYudG9rZW5zKSA9PSAxOgotICAgICAgICAg
ICAgcGFyYW1zID0gWyJhcmciICsgc3RyKHBhcmFtKSBmb3IgcGFyYW0gaW4gcmFuZ2UobGVuKHdh
c21PcFsicGFyYW1ldGVyIl0pKV0KLSAgICAgICAgICAgIHJldHVybiAiICAgIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OiIgKyBzZWxmLnRva2Vu
KCkgKyAiLCBvcmlnaW4oKSwgIiArICIsICIuam9pbihwYXJhbXMpICsgIikiCisgICAgICAgICAg
ICBwYXJhbXMgPSBbImdldChhcmciICsgc3RyKHBhcmFtKSArICIpIiBmb3IgcGFyYW0gaW4gcmFu
Z2UobGVuKHdhc21PcFsicGFyYW1ldGVyIl0pKV0KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1h
a2VSZXN1bHQoIiAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEIzOjoiICsgc2VsZi50b2tlbigpICsgIiwgb3JpZ2luKCksICIg
KyAiLCAiLmpvaW4ocGFyYW1zKSArICIpIikKICAgICAgICAgcmVzdWx0ID0gc2VsZi5nZW5lcmF0
ZU9wY29kZSgpCi0gICAgICAgIHNlbGYuY29kZS5hcHBlbmQoInJlc3VsdCA9ICIgKyByZXN1bHQp
Ci0gICAgICAgIHJldHVybiAiICAgICIgKyAiICAgIFxuIi5qb2luKHNlbGYuY29kZSkKKyAgICAg
ICAgc2VsZi5jb2RlLmFwcGVuZCgiVmFsdWUqIHJlc3VsdFZhbHVlID0gIiArIHJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIHNlbGYubWFrZVJlc3VsdCgiICAgICIgKyAiICAgIFxuIi5qb2luKHNlbGYu
Y29kZSkpCiAKIAogZGVmIHRlbXAoaW5kZXgpOgpAQCAtMTkxLDcgKzE5NCw3IEBAIGRlZiBnZW5l
cmF0ZVNpbXBsZUNvZGUob3ApOgogICAgIHJldHVybiAiIiIKIHRlbXBsYXRlPD4gYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OiIiIiArIHdhc20udG9DcHAob3BbIm5hbWUiXSkgKyAi
PigiICsgIiwgIi5qb2luKGFyZ3MpICsgIiIiKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0iIiIgKyBn
ZW5lcmF0ZUIzQ29kZShvcGNvZGUsIGIzb3ApICsgIiIiOworIiIiICsgZ2VuZXJhdGVCM0NvZGUo
b3Bjb2RlLCBiM29wKSArICIiIgogICAgIHJldHVybiB7IH07CiB9CiAiIiIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQppbmRleCBj
MjBiZmE1NDJlMDg2NGJjZDBhZjgyOGU3OWQ2OTIwODA0YTU3MjM3Li43Y2NmY2FmYzZhZmIzMjEw
OGNiNGE1MDljNWI5MjA3MmE4MWM3NjI0IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CkBAIC01Myw3ICs1Myw3IEBAIGRlZiBj
cHBNYWNybyh3YXNtT3Bjb2RlLCB2YWx1ZSwgYjMsIGluYywgKmV4dHJhQXJncyk6CiBkZWYgdHlw
ZU1hY3JvaXplcigpOgogICAgIGluYyA9IDAKICAgICBmb3IgdHkgaW4gd2FzbS50eXBlczoKLSAg
ICAgICAgeWllbGQgY3BwTWFjcm8odHksIHdhc20udHlwZXNbdHldWyJ2YWx1ZSJdLCB3YXNtLnR5
cGVzW3R5XVsiYjN0eXBlIl0sIGluYykKKyAgICAgICAgeWllbGQgY3BwTWFjcm8odHksIHdhc20u
dHlwZXNbdHldWyJ2YWx1ZSJdLCB3YXNtLnR5cGVzW3R5XVsiYjN0eXBlIl0sIGluYywgdHkpCiAg
ICAgICAgIGluYyArPSAxCiAKIHR5cGVfZGVmaW5pdGlvbnMgPSBbIiNkZWZpbmUgRk9SX0VBQ0hf
V0FTTV9UWVBFKG1hY3JvKSJdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHkuY3BwCmluZGV4IDcxOGJjYjk3NTU2ZWY0NWE4MmQzZGI5ZTRiYTA3NzU4MGJi
YzllNTYuLjc4ZjE3NmFiNjNhMjY1ZTE1NDlkNWQ3MmNiMzYyY2E3ZTg1NDdjZGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCkBAIC03OCw2
ICs3OCw3IEBAIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5OjpzX2luZm8gPSB7ICJXZWJB
c3NlbWJseSIsICZCYXNlOjpzX2luZm8sICZ3ZWJBc3NlCiAvKiBTb3VyY2UgZm9yIEpTV2ViQXNz
ZW1ibHkubHV0LmgKIEBiZWdpbiB3ZWJBc3NlbWJseVRhYmxlCiAgIENvbXBpbGVFcnJvciAgICBj
cmVhdGVXZWJBc3NlbWJseUNvbXBpbGVFcnJvciAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawor
ICBFeGNlcHRpb24gICAgICAgY3JlYXRlV2ViQXNzZW1ibHlFeGNlcHRpb24gICAgIERvbnRFbnVt
fFByb3BlcnR5Q2FsbGJhY2sKICAgR2xvYmFsICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5R2xv
YmFsICAgICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIEluc3RhbmNlICAgICAgICBj
cmVhdGVXZWJBc3NlbWJseUluc3RhbmNlICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawog
ICBMaW5rRXJyb3IgICAgICAgY3JlYXRlV2ViQXNzZW1ibHlMaW5rRXJyb3IgICAgIERvbnRFbnVt
fFByb3BlcnR5Q2FsbGJhY2sKQEAgLTg1LDYgKzg2LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTV2Vi
QXNzZW1ibHk6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5IiwgJkJhc2U6OnNfaW5mbywgJndlYkFz
c2UKICAgTW9kdWxlICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5TW9kdWxlICAgICAgICBEb250
RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIFJ1bnRpbWVFcnJvciAgICBjcmVhdGVXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvciAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBUYWJsZSAgICAgICAg
ICAgY3JlYXRlV2ViQXNzZW1ibHlUYWJsZSAgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJh
Y2sKKyAgVGFnICAgICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5VGFnICAgICAgICAgICBEb250
RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIGNvbXBpbGUgICAgICAgICB3ZWJBc3NlbWJseUNvbXBp
bGVGdW5jICAgICAgICAgRnVuY3Rpb24gMQogICBpbnN0YW50aWF0ZSAgICAgd2ViQXNzZW1ibHlJ
bnN0YW50aWF0ZUZ1bmMgICAgIEZ1bmN0aW9uIDEKICAgdmFsaWRhdGUgICAgICAgIHdlYkFzc2Vt
Ymx5VmFsaWRhdGVGdW5jICAgICAgICBGdW5jdGlvbiAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjEwM2Q0MzAzM2NlYWQ1ZjFiNDNiNmNkNjUxZjM2YTc4NTJmZjAxODgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0
aW9uLmNwcApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlFeGNlcHRpb24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0lu
Zm8gSlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuRXhjZXB0
aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKSB9OworCitKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpK
U1dlYkFzc2VtYmx5RXhjZXB0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IFdhc206OlRhZyYgdGFnLCBGaXhlZFZlY3Rvcjx1aW50NjRfdD4mJiBwYXlsb2FkKQorICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV90YWcoUmVmIHsgdGFnIH0pCisgICAgLCBtX3Bh
eWxvYWQoV1RGTW92ZShwYXlsb2FkKSkKK3sKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworCisgICAgYXV0byogZXhjZXB0aW9uID0ganNDYXN0
PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPihjZWxsKTsKKyAgICBjb25zdCBXYXNtOjpTaWduYXR1
cmUmIHNpZ25hdHVyZSA9IGV4Y2VwdGlvbi0+dGFnKCkuc2lnbmF0dXJlKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAg
ICAgICBpZiAoaXNSZWZUeXBlKHNpZ25hdHVyZS5hcmd1bWVudChpKSkpCisgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZChiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+PihleGNlcHRp
b24tPnBheWxvYWQoKVtpXSkpOworICAgIH0KK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
V2ViQXNzZW1ibHlFeGNlcHRpb24pOworCit2b2lkIEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlFeGNl
cHRpb24qPihjZWxsKS0+SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6fkpTV2ViQXNzZW1ibHlFeGNl
cHRpb24oKTsKK30KKworSlNWYWx1ZSBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpnZXRBcmcoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaSkgY29uc3QKK3sKKyAgICBjb25z
dCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IHRhZygpLnNpZ25hdHVyZSgpOworICAgIEFT
U0VSVChpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CisgICAgcmV0dXJuIHRvSlNWYWx1
ZShnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudChpKSwgcGF5bG9hZCgpW2ldKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDNiOWEzMmY5NWIxOTRkZWU4YzE1NDZiMmRjNWQ5OTRkNzJj
NjNjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlFeGNlcHRpb24uaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtVGFnLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworCisgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5RXhj
ZXB0aW9uU3BhY2U8bW9kZT4oKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwor
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhFcnJvckluc3RhbmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0K
KworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBjcmVhdGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcsIEZpeGVkVmVjdG9yPHVpbnQ2
NF90PiYmIHBheWxvYWQpCisgICAgeworICAgICAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBl
eGNlcHRpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbih2bSwgc3RydWN0dXJlLCB0YWcs
IFdURk1vdmUocGF5bG9hZCkpOworICAgICAgICBleGNlcHRpb24tPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgICB9CisKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOworCisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcoKSBjb25zdCB7IHJldHVybiBt
X3RhZy5nZXQoKTsgfQorICAgIGNvbnN0IEZpeGVkVmVjdG9yPHVpbnQ2NF90PiYgcGF5bG9hZCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGF5bG9hZDsgfQorICAgIEpTVmFsdWUgZ2V0QXJnKEpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgSlNXZWJBc3NlbWJs
eUV4Y2VwdGlvbihWTSYsIFN0cnVjdHVyZSosIGNvbnN0IFdhc206OlRhZyYsIEZpeGVkVmVjdG9y
PHVpbnQ2NF90PiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIFJl
Zjxjb25zdCBXYXNtOjpUYWc+IG1fdGFnOworICAgIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiBtX3Bh
eWxvYWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SGVscGVycy5oCmluZGV4IGQ4ZjI2NTBjYWE1ODY3MjM1NGJkNWYzOWY3ZGVhYjY0MTBk
MDA1NGMuLmI2MjBlZGNhMjhhOWUyNDI5ZjEyMGNlMTk2N2EzYjBjMTEyMTM1NzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMu
aApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5j
bHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTU291cmNlQ29kZS5oIgorI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAj
aW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmgiCkBAIC0xNDQsNiArMTQ1LDc1IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBkZWZhdWx0VmFsdWVGb3JSZWZlcmVuY2VUeXBlKGNvbnN0IFdhc206OlR5cGUgdHlwZSkKICAg
ICByZXR1cm4ganNOdWxsKCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSB0b0pTVmFsdWUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgV2FzbTo6VHlwZSB0eXBlLCB1aW50
NjRfdCBiaXRzKQoreworICAgIHN3aXRjaCAodHlwZS5raW5kKSB7CisgICAgY2FzZSBXYXNtOjpU
eXBlS2luZDo6Vm9pZDoKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgY2FzZSBX
YXNtOjpUeXBlS2luZDo6STMyOgorICAgICAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4oYml0cykpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkYzMjoKKyAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKGJpdHdpc2VfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4o
Yml0cykpKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGNjQ6CisgICAgICAgIHJldHVybiBq
c051bWJlcihiaXR3aXNlX2Nhc3Q8ZG91YmxlPihiaXRzKSk7CisgICAgY2FzZSBXYXNtOjpUeXBl
S2luZDo6STY0OgorICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDxpbnQ2NF90PihiaXRzKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2lu
ZDo6RXh0ZXJucmVmOgorICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkZ1bmNyZWY6CisgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZT4oYml0cyk7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIEpTVmFsdWUoKTsKK30KKworQUxXQVlTX0lOTElORSB1aW50NjRfdCBmcm9tSlNWYWx1
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXYXNtOjpUeXBlIHR5cGUsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBzd2l0Y2ggKHR5cGUua2lu
ZCkgeworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlR5cGVJZHg6CisgICAgY2FzZSBXYXNtOjpU
eXBlS2luZDo6RnVuY3JlZjogeworICAgICAgICBib29sIGlzTnVsbGFibGUgPSB0eXBlLmlzTnVs
bGFibGUoKTsKKyAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0gbnVs
bHB0cjsKKyAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21XcmFwcGVyRnVu
Y3Rpb24gPSBudWxscHRyOworICAgICAgICBpZiAoIWlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24o
dm0sIHZhbHVlLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pICYmICghaXNOdWxs
YWJsZSB8fCAhdmFsdWUuaXNOdWxsKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FeGNl
cHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
cihnbG9iYWxPYmplY3QsIHZtLCAiRnVuY3JlZiBtdXN0IGJlIGFuIGV4cG9ydGVkIHdhc20gZnVu
Y3Rpb24iKSk7CisgICAgICAgIGlmICh0eXBlLmtpbmQgPT0gV2FzbTo6VHlwZUtpbmQ6OlR5cGVJ
ZHggJiYgKHdhc21GdW5jdGlvbiB8fCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgeworICAgICAgICAg
ICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggcGFyYW1JbmRleCA9IHR5cGUuaW5kZXg7CisgICAgICAg
ICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBhcmdJbmRleDsKKyAgICAgICAgICAgIGlmICh3YXNt
RnVuY3Rpb24pCisgICAgICAgICAgICAgICAgYXJnSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25h
dHVyZUluZGV4KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJnSW5kZXgg
PSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgaWYg
KHBhcmFtSW5kZXggIT0gYXJnSW5kZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1F
eGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvcihnbG9iYWxPYmplY3QsIHZtLCAiQXJndW1lbnQgZnVuY3Rpb24gZGlkIG5vdCBtYXRjaCB0
aGUgcmVmZXJlbmNlIHR5cGUiKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkV4dGVybnJlZjoKKyAgICAgICAgaWYgKCF0eXBlLmlz
TnVsbGFibGUoKSAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgIk5vbi1udWxsIEV4dGVybnJlZiBjYW5ub3QgYmUgbnVs
bCIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STMyOgorICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHZhbHVlLnRvSW50MzIoZ2xvYmFsT2JqZWN0
KSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STY0OgorICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUudG9CaWdJbnQ2NChnbG9i
YWxPYmplY3QpKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjMyOgorICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9h
dChnbG9iYWxPYmplY3QpKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjY0OgorICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUu
dG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSkpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlZvaWQ6
CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RnVuYzoKKyAgICBjYXNlIFdhc206OlR5cGVLaW5k
OjpSZWZOdWxsOgorICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlJlZjoKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmluZGV4IDY2ZGEx
MGE3ODAwM2RiMjdhMTkxODJlOWIxYjBjM2M4MDVkNGEzYjYuLjFkN2Y0NmNkNjgzMDQ1ZWFiNjQ2
Yjg3MmY1NzhlZDc1MDIyNWNiZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtMjE2LDYgKzIxNiw3IEBA
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjp0cnlDcmVhdGUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6
OkZ1bmN0aW9uOgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xvYmFsOgogICAg
ICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6CisgICAgICAgIGNhc2UgV2FzbTo6
RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
Y2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeToKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjQyLDYgKzI0Myw3IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjp0cnlDcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCoKICAgICAgICAgY2FzZSBXYXNt
OjpFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2lu
ZDo6R2xvYmFsOgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6CisgICAg
ICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246CiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
CmluZGV4IDU2ZjU4Zjk1NDM0OTM5NTliODI2ZDFmOTczYThmMmIwZDVjZjc2OWYuLjk3NGQ2ZDdi
YTVlN2E1ODc4YTg4YjZjMTE2ZDUyYWRlNTM4YmFmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCkBAIC00OCw2ICs0
OCw4IEBAIGNsYXNzIENvZGVCbG9jazsKIH0KIAogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNl
IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CisKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5h
bE9iamVjdDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwCmluZGV4IDEwMjJhNTIyNzQzMjk2N2FlYWE1MmI4Yjg5
NzQ2NzkzYmZhZmY0ZGIuLmIxMDI5N2ZlZGFiNzVmYTIzN2M1NzY2ZTcxMTkzMjQyNDI2NDg2N2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDYgKzM3LDEzIEBAIEpTT2JqZWN0KiBjcmVhdGVK
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZN
JiB2bSwKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKICAgICByZXR1cm4gRXJyb3JJ
bnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1i
bHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSwgSlNWYWx1ZSgpLCBkZWZhdWx0U291
cmNlQXBwZW5kZXIsIFR5cGVOb3RoaW5nLCBFcnJvclR5cGU6OkVycm9yLCB0cnVlKTsKIH0KKwor
SlNPYmplY3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVk0mIHZtLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUpCit7CisgICAg
RXJyb3JJbnN0YW5jZSogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0
LCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBX
YXNtOjplcnJvck1lc3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5cGUpLCBKU1ZhbHVlKCksIGRlZmF1
bHRTb3VyY2VBcHBlbmRlciwgVHlwZU5vdGhpbmcsIEVycm9yVHlwZTo6RXJyb3IsIHRydWUpOwor
ICAgIGVycm9yLT5zZXRDYXRjaGFibGVGcm9tV2FzbShmYWxzZSk7CisgICAgcmV0dXJuIGVycm9y
OworfQogICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaAppbmRleCBi
ZTQxMzA5MGQzMjc0YzYxOGZhZmQ0OWIxMTY3YjBkMjIyN2NlNWZjLi5jODZiNjNmOTEyZDNjZjQx
ZDFjNmM0OTBjMDg5NjM5Y2I3YjBiM2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEwICsyOCwx
MiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkVycm9ySW5zdGFuY2Uu
aCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAog
SlNPYmplY3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9iYWxPYmplY3Qq
LCBWTSYsIGNvbnN0IFN0cmluZyYpOworSlNPYmplY3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBWTSYsIFdhc206OkV4Y2VwdGlvblR5cGUpOwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVRhZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOGQ1NjBmMDcxMDZlNGQwYWNiYTU1
YTMzYTc0MmM3MDk3NzM3YjFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKKyNpbmNsdWRlICJXYXNtVGFnLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBD
bGFzc0luZm8gSlNXZWJBc3NlbWJseVRhZzo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFnIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dl
YkFzc2VtYmx5VGFnKSB9OworCitKU1dlYkFzc2VtYmx5VGFnKiBKU1dlYkFzc2VtYmx5VGFnOjpj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcpCit7CisgICAgVU5VU0VEX1BBUkFNKGdsb2Jh
bE9iamVjdCk7CisgICAgYXV0byoganNUYWcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U1dlYkFzc2VtYmx5VGFnPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseVRhZyh2bSwgc3RydWN0dXJl
LCB0YWcpOworICAgIGpzVGFnLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIGpzVGFn
OworfQorCitTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorewor
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworSlNX
ZWJBc3NlbWJseVRhZzo6SlNXZWJBc3NlbWJseVRhZyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBXYXNtOjpUYWcmIHRhZykKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAg
ICAsIG1fdGFnKFJlZiB7IHRhZyB9KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTJiZjQzZGI3N2U1N2ZkNTFi
ODBjMTkwM2YyMmNlOTljMGE3ZWUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21UYWcuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlUYWcgZmluYWwgOiBwdWJsaWMgSlNOb25G
aW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
KyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB2bS53ZWJBc3NlbWJseVRhZ1NwYWNlPG1vZGU+KCk7CisgICAgfQorCisgICAg
REVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1dl
YkFzc2VtYmx5VGFnKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGNv
bnN0IFdhc206OlRhZyYpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRh
ZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnOyB9CisgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBz
aWduYXR1cmUoKSBjb25zdCB7IHJldHVybiB0YWcoKS5zaWduYXR1cmUoKTsgfQorCitwcml2YXRl
OgorICAgIEpTV2ViQXNzZW1ibHlUYWcoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBXYXNtOjpUYWcm
KTsKKworICAgIGNvbnN0IFJlZjxjb25zdCBXYXNtOjpUYWc+IG1fdGFnOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKaW5kZXggZjY3ZjI0MmE3ODkxM2FlNWMw
MmFhNTY4ZTk5YWM2NWNkYmI4MGZkZS4uZDY1ZmM2MTIxYjYwOTBiZDdmMmQ0MGQwM2JiNDVlZTdh
YTY0MDIzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRv
SlMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApA
QCAtOTgsNyArOTgsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5
UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICB1bnNpZ25l
ZCBtYXJzaGFsbGVkR1BScyA9IDA7CiAgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0g
MDsKICAgICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90Ojpm
aXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAg
ICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHVuc2lnbmVkIGZy
T2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJn
TnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7CiAgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBz
aWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKICAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZS5r
aW5kKSB7CkBAIC0xNjIsNyArMTYyLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAg
ICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOwogICAgICAgICB1bnNpZ25lZCBtYXJzaGFs
bGVkRlBScyA9IDA7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZy
YW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSk7Ci0gICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1
bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogCiAgICAgICAgIGF1dG8gbWFyc2hhbGxGUFIg
PSBbJl0gKEZQUlJlZyBmcHJSZWcpIHsKICAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oZnByUmVn
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY0YTVmNDQ4
NmI0ZjE3YzhmZmZjODcwNzQxMTUwMmI4NjdlNjlmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3Iu
Y3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhj
ZXB0aW9uQ29uc3RydWN0b3IuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1
ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhl
bHBlcnMuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oIgorCisj
aW5jbHVkZSAiV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sICZjb25zdHJ1Y3RvclRh
YmxlV2ViQXNzZW1ibHlFeGNlcHRpb24sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2Vi
QXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3RvcikgfTsKKworc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oY29uc3RydWN0SlNXZWJBc3NlbWJseUV4Y2VwdGlvbik7CitzdGF0aWMgSlND
X0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjYWxsSlNXZWJBc3NlbWJseUV4Y2VwdGlvbik7CisKKy8q
IFNvdXJjZSBmb3IgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaAorIEBiZWdp
biBjb25zdHJ1Y3RvclRhYmxlV2ViQXNzZW1ibHlFeGNlcHRpb24KKyBAZW5kCisgKi8KKworSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlFeGNlcHRpb24sIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7Cisg
ICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTVmFsdWUgdGFnVmFsdWUgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApOworICAgIEpTVmFsdWUgdGFnUGFyYW1ldGVycyA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMSk7CisKKyAgICBhdXRvIHRhZyA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhZyo+
KHZtLCB0YWdWYWx1ZSk7CisgICAgaWYgKCF0YWcpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRpb24gY29uc3Ry
dWN0b3IgZXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBXZWJBc3NlbWJseS5UYWci
KTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHZhbHVlczsKKyAgICBmb3JFYWNoSW5JdGVy
YWJsZShnbG9iYWxPYmplY3QsIHRhZ1BhcmFtZXRlcnMsIFsmXSAoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgbmV4dFZhbHVlKSB7CisgICAgICAgIHZhbHVlcy5hcHBlbmQobmV4dFZhbHVl
KTsKKyAgICB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAg
aWYgKHZhbHVlcy5zaXplKCkgIT0gdGFnLT5zaWduYXR1cmUoKS5hcmd1bWVudENvdW50KCkpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJB
c3NlbWJseS5FeGNlcHRpb24gY29uc3RydWN0b3IgZXhwZWN0cyB0aGUgbnVtYmVyIG9mIHBhcmVt
ZXRlcnMgaW4gV2ViQXNzZW1ibHkuVGFnIHRvIG1hdGNoIHRoZSB0YWdzIHBhcmFtZXRlciBjb3Vu
dC4iKTsKKworICAgIC8vIEFueSBHQydkIHZhbHVlcyBpbiBoZXJlIHdpbGwgYmUgbWFya2VkIGJ5
IHRoZSBNYXJrZWRBcnVnZW1lbnRCdWZmZXIgdW50aWwgc3RvcmVkIGluIHRoZSBFeGNlcHRpb24u
CisgICAgRml4ZWRWZWN0b3I8dWludDY0X3Q+IHBheWxvYWQodmFsdWVzLnNpemUoKSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBw
YXlsb2FkW2ldID0gZnJvbUpTVmFsdWUoZ2xvYmFsT2JqZWN0LCB0YWctPnNpZ25hdHVyZSgpLmFy
Z3VtZW50KGkpLCB2YWx1ZXMuYXQoaSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworICAgIH0KKworICAgIEpTT2JqZWN0KiBuZXdUYXJnZXQgPSBhc09iamVjdChj
YWxsRnJhbWUtPm5ld1RhcmdldCgpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTQ19H
RVRfREVSSVZFRF9TVFJVQ1RVUkUodm0sIHdlYkFzc2VtYmx5RXhjZXB0aW9uU3RydWN0dXJlLCBu
ZXdUYXJnZXQsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCB0YWct
PnRhZygpLCBXVEZNb3ZlKHBheWxvYWQpKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oY2FsbEpTV2ViQXNzZW1ibHlFeGNlcHRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIikpOworfQor
CitXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNv
bnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1i
bHlFeGNlcHRpb25Qcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCit7CisgICAgYXV0byogY29uc3Ry
dWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUV4Y2VwdGlvbkNv
bnN0cnVjdG9yPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcih2bSwg
c3RydWN0dXJlKTsKKyAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90
b3R5cGUpOworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBXZWJBc3Nl
bWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJ
bnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lk
IFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSwgMSwgIkV4Y2VwdGlvbiJfcywgUHJvcGVydHlBZGRpdGlvbk1vZGU6
OldpdGhvdXRTdHJ1Y3R1cmVUcmFuc2l0aW9uKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RGVsZXRlKTsKK30KKworV2ViQXNzZW1ibHlFeGNlcHRpb25Db25z
dHJ1Y3Rvcjo6V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjYWxsSlNXZWJBc3NlbWJs
eUV4Y2VwdGlvbiwgY29uc3RydWN0SlNXZWJBc3NlbWJseUV4Y2VwdGlvbikKK3sKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNv
bnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4
Y2VwdGlvbkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTdiYzkyMzU0NTUzMGRlNTg1OTcwZThk
Y2U3YzYwMDY5MDRhYjEzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDU1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1
bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOworCitjbGFzcyBXZWJBc3NlbWJseUV4
Y2VwdGlvbkNvbnN0cnVjdG9yIGZpbmFsIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVi
bGljOgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhh
c1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlFeGNlcHRpb25D
b25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRl
OgorICAgIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5
cGUqKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJs
eUV4Y2VwdGlvbkNvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblBy
b3RvdHlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MzNmM0Nzk4NWEzMjRjMWIzODk5MzVlZjFhMWI5MTFh
YWY1ZjhlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oIgorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllcklubGluZXMu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mgeworc3RhdGljIEpT
Q19ERUNMQVJFX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNHZXRB
cmcpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlFeGNlcHRp
b25Qcm90b0Z1bmNJcyk7Cit9CisKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZS5sdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3Nl
bWJseUV4Y2VwdGlvblByb3RvdHlwZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuRXhjZXB0aW9u
IiwgJkJhc2U6OnNfaW5mbywgJnByb3RvdHlwZVRhYmxlV2ViQXNzZW1ibHlFeGNlcHRpb24sIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUp
IH07CisKKy8qIFNvdXJjZSBmb3IgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUubHV0LmgK
KyBAYmVnaW4gcHJvdG90eXBlVGFibGVXZWJBc3NlbWJseUV4Y2VwdGlvbgorIGdldEFyZyAgIHdl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG9GdW5jR2V0QXJnICAgRnVuY3Rpb24gMgorIGlzICAgd2Vi
QXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNJcyAgIEZ1bmN0aW9uIDEKKyBAZW5kCisgKi8KKwor
V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90
eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogc3RydWN0dXJl
KQoreworICAgIGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFz
c2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgcmV0dXJuIG9iamVjdDsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseUV4Y2VwdGlv
blByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Cit9CisKK1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uUHJvdG90eXBlOjpXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorewor
fQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBnZXRFeGNl
cHRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUpCit7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2Vs
bCgpKSkgeworICAgICAgICB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRl
Tm90QW5PYmplY3RFcnJvcihnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSkpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisgICAgYXV0byogdGFnID0ganNEeW5hbWljQ2FzdDxKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uKj4odm0sIHRoaXNWYWx1ZS5hc0NlbGwoKSk7CisgICAgaWYgKExJS0VM
WSh0YWcpKQorICAgICAgICByZXR1cm4gdGFnOworICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRpb24gb3BlcmF0aW9uIGNhbGxlZCBvbiBu
b24tRXhjZXB0aW9uIG9iamVjdCJfcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FMV0FZ
U19JTkxJTkUgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWcqIGdldFRhZyhWTSYgdm0sIEpTVmFsdWUg
dGFnVmFsdWUpCit7CisgICAgaWYgKCF0YWdWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhZyo+KHZt
LCB0YWdWYWx1ZS5hc0NlbGwoKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih3ZWJB
c3NlbWJseUV4Y2VwdGlvblByb3RvRnVuY0dldEFyZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBjb25zdCBhdXRvJiBmb3JtYXRNZXNzYWdlID0gWyZdKGNvbnN0IGF1dG8mIG1lc3Nh
Z2UpIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5LkV4Y2VwdGlvbi5n
ZXRBcmcoKTogIiwgbWVzc2FnZSk7CisgICAgfTsKKyAgICBjb25zdCBhdXRvJiB0eXBlRXJyb3Ig
PSBbJl0oY29uc3QgYXV0byYgbWVzc2FnZSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGZvcm1hdE1lc3NhZ2UobWVzc2FnZSkpOworICAgICAgICBy
ZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICB9OworCisgICAgSlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbioganNFeGNlcHRpb24gPSBnZXRFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworCisgICAgSlNXZWJBc3NlbWJseVRhZyogdGFnID0gZ2V0VGFnKHZtLCBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXRhZykKKyAgICAgICAgcmV0dXJuIHR5
cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIFdlYkFzc2VtYmx5LlRhZyIpOworCisg
ICAgaWYgKGpzRXhjZXB0aW9uLT50YWcoKSAhPSB0YWctPnRhZygpKQorICAgICAgICByZXR1cm4g
dHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBkb2VzIG5vdCBtYXRjaCB0aGUgZXhjZXB0aW9uIHRh
ZyIpOworCisgICAgdWludDMyX3QgaW5kZXggPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpLnRvVUlu
dDMyKGdsb2JhbE9iamVjdCk7CisgICAgaWYgKGluZGV4ID49IHRhZy0+dGFnKCkucGFyYW1ldGVy
Q291bnQoKSkgeworICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBmb3JtYXRNZXNzYWdlKCJJbmRleCBvdXQgb2YgcmFuZ2UiKSk7CisgICAgICAgIHJldHVy
biBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNFeGNlcHRpb24tPmdldEFyZyhnbG9iYWxPYmplY3Qs
IGluZGV4KSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlFeGNl
cHRpb25Qcm90b0Z1bmNJcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uKiBqc0V4Y2VwdGlvbiA9IGdldEV4Y2VwdGlvbihnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFnKiB0YWcgPSBn
ZXRUYWcodm0sIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgIGlmICghdGFnKSB7CisgICAg
ICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgIldlYkFzc2VtYmx5
LkV4Y2VwdGlvbi5pcygpOiBGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuVGFn
Iik7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGpzRXhj
ZXB0aW9uLT50YWcoKSA9PSB0YWctPnRhZygpKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmRjMjEwNmQ4Yjk5MzFmZGE0YTBlOTRiNjFmYjVjN2UxZWEzNDhkYmMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUV4Y2VwdGlvblByb3RvdHlwZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCisjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGlj
OgorICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0
YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJB
c3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxh
aW5PYmplY3RTcGFjZTsKKyAgICB9CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJs
eUV4Y2VwdGlvblByb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAppbmRleCAzYWIzYzNkNWNiNWM5MDA5YmVjMmI2ZDgwZDQ0
NGM4MGMxNDNlYWRlLi4xOTcxOGRjZTY5OTY5MDAxZWUxMmQ2NDRmODYyNDVlMDE3MzY1YjA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmNwcApAQCAtNzgsNTEgKzc4LDkgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNh
bGxXZWJBc3NlbWJseUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAg
ICBXYXNtOjpJbnN0YW5jZSogd2FzbUluc3RhbmNlID0gJmluc3RhbmNlLT5pbnN0YW5jZSgpOwog
CiAgICAgZm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKTsgKythcmdJbmRleCkgewotICAgICAgICBKU1ZhbHVlIGFyZyA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoYXJnSW5kZXgpOwotICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1
bWVudChhcmdJbmRleCkua2luZCkgewotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJMzI6
Ci0gICAgICAgICAgICBhcmcgPSBKU1ZhbHVlOjpkZWNvZGUoYXJnLnRvSW50MzIoZ2xvYmFsT2Jq
ZWN0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6
VHlwZUlkeDoKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RnVuY3JlZjogewotICAgICAg
ICAgICAgYm9vbCBpc051bGxhYmxlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ0luZGV4KS5pc051
bGxhYmxlKCk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb24g
PSBudWxscHRyOwotICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21X
cmFwcGVyRnVuY3Rpb24gPSBudWxscHRyOwotICAgICAgICAgICAgaWYgKCFpc1dlYkFzc2VtYmx5
SG9zdEZ1bmN0aW9uKHZtLCBhcmcsIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlvbikg
JiYgKCFpc051bGxhYmxlIHx8ICFhcmcuaXNOdWxsKCkpKQotICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3Jl
YXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAiRnVuY3JlZiBt
dXN0IGJlIGFuIGV4cG9ydGVkIHdhc20gZnVuY3Rpb24iKSkpOwotICAgICAgICAgICAgaWYgKHNp
Z25hdHVyZS5hcmd1bWVudChhcmdJbmRleCkua2luZCA9PSBXYXNtOjpUeXBlS2luZDo6VHlwZUlk
eCAmJiAod2FzbUZ1bmN0aW9uIHx8IHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7Ci0gICAgICAgICAg
ICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggcGFyYW1JbmRleCA9IHNpZ25hdHVyZS5hcmd1bWVu
dChhcmdJbmRleCkuaW5kZXg7Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXgg
YXJnSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikKLSAgICAgICAgICAg
ICAgICAgICAgYXJnSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhcmdJbmRleCA9IHdhc21XcmFw
cGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFt
SW5kZXggIT0gYXJnSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAiQXJndW1lbnQgZnVuY3Rpb24gZGlk
IG5vdCBtYXRjaCB0aGUgcmVmZXJlbmNlIHR5cGUiKSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RXh0
ZXJucmVmOgotICAgICAgICAgICAgaWYgKCFzaWduYXR1cmUuYXJndW1lbnQoYXJnSW5kZXgpLmlz
TnVsbGFibGUoKSAmJiBhcmcuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVKU1dl
YkFzc2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sICJOb24tbnVsbCBFeHRlcm5y
ZWYgY2Fubm90IGJlIG51bGwiKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
V2FzbTo6VHlwZUtpbmQ6Okk2NDoKLSAgICAgICAgICAgIGFyZyA9IEpTVmFsdWU6OmRlY29kZShi
aXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGFyZy50b0JpZ0ludDY0KGdsb2JhbE9iamVjdCkpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGMzI6Ci0gICAg
ICAgICAgICBhcmcgPSBKU1ZhbHVlOjpkZWNvZGUoYml0d2lzZV9jYXN0PHVpbnQzMl90Pihhcmcu
dG9GbG9hdChnbG9iYWxPYmplY3QpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBXYXNtOjpUeXBlS2luZDo6RjY0OgotICAgICAgICAgICAgYXJnID0gSlNWYWx1ZTo6ZGVjb2Rl
KGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oYXJnLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpWb2lkOgotICAg
ICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGdW5jOgotICAgICAgICBjYXNlIFdhc206OlR5cGVL
aW5kOjpSZWZOdWxsOgotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpSZWY6Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9CisgICAgICAgIHVp
bnQ2NF90IHZhbHVlID0gZnJvbUpTVmFsdWUoZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1l
bnQoYXJnSW5kZXgpLCBjYWxsRnJhbWUtPmFyZ3VtZW50KGFyZ0luZGV4KSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgICAgICBib3hl
ZEFyZ3MuYXBwZW5kKGFyZyk7CisgICAgICAgIGJveGVkQXJncy5hcHBlbmQoSlNWYWx1ZTo6ZGVj
b2RlKHZhbHVlKSk7CiAgICAgfQogCiAgICAgLy8gV2hlbiB3ZSBkb24ndCB1c2UgZmFzdCBUTFMg
dG8gc3RvcmUgdGhlIGNvbnRleHQsIHRoZSBKUwpAQCAtMTUyLDEwICsxMTAsNiBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LAogICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkpOwog
ICAgIEFTU0VSVCgmd2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5jZSgpID09IHZtLndh
c21Db250ZXh0LmxvYWQoKSk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1FbnRy
eVRvV2FzbSh3YXNtRnVuY3Rpb24tPmpzRW50cnlwb2ludChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpOwotICAgIC8vIFdlIG5lZWQgdG8g
bWFrZSBzdXJlIHRoaXMgaXMgaW4gYSByZWdpc3RlciBvciBvbiB0aGUgc3RhY2sgc2luY2UgaXQn
cyBzdG9yZWQgaW4gVmVjdG9yPEpTVmFsdWU+LgotICAgIC8vIFRoaXMgcHJvYmFibHkgaXNuJ3Qg
c3RyaWN0bHkgbmVjZXNzYXJ5LCBzaW5jZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlvbiogc2hvdWxk
IGtlZXAgdGhlIGluc3RhbmNlCi0gICAgLy8gYWxpdmUuIEJ1dCBpdCdzIGdvb2QgaHlnaWVuZS4K
LSAgICBpbnN0YW5jZS0+dXNlKCk7CiAgICAgaWYgKHByZXZXYXNtSW5zdGFuY2UgIT0gd2FzbUlu
c3RhbmNlKSB7CiAgICAgICAgIC8vIFRoaXMgaXMganVzdCBmb3Igc29tZSBleHRyYSBzYWZldHkg
aW5zdGVhZCBvZiBsZWF2aW5nIGEgY2FjaGVkCiAgICAgICAgIC8vIHZhbHVlIGluIHRoZXJlLiBJ
ZiB3ZSBldmVyIGZvcmdldCB0byBzZXQgdGhlIHZhbHVlIHRvIGJlIGEgcmVhbApAQCAtMTY4LDYg
KzEyMiwxMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5RnVuY3Rp
b24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHZtLndhc21Db250ZXh0LnN0
b3JlKHByZXZXYXNtSW5zdGFuY2UsIHZtLnNvZnRTdGFja0xpbWl0KCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKKyAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0
aGlzIGlzIGluIGEgcmVnaXN0ZXIgb3Igb24gdGhlIHN0YWNrIHNpbmNlIGl0J3Mgc3RvcmVkIGlu
IFZlY3RvcjxKU1ZhbHVlPi4KKyAgICAvLyBUaGlzIHByb2JhYmx5IGlzbid0IHN0cmljdGx5IG5l
Y2Vzc2FyeSwgc2luY2UgdGhlIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHNob3VsZCBrZWVwIHRoZSBp
bnN0YW5jZQorICAgIC8vIGFsaXZlLiBCdXQgaXQncyBnb29kIGh5Z2llbmUuCisgICAgaW5zdGFu
Y2UtPnVzZSgpOworCiAgICAgcmV0dXJuIHJhd1Jlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3Bw
CmluZGV4IGRiNDA5MmFkNjk0ODJmN2EwOWQzYmUxZjc1MjM0MjJkOWQ1YWYxM2QuLmY3YjA4N2Jm
NTg5MmJmMjZiZmU2M2U1ZTM4Y2ZhZDIwMmJhYmEyMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAg
LTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1v
ZHVsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRlICJPYmplY3RD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgpAQCAtMTMwLDYgKzEzMSw3IEBAIHZvaWQgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBpCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjoK
ICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDoKICAgICAgICAgY2FzZSBX
YXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOgorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2lu
ZDo6RXhjZXB0aW9uOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0
ZXJuYWxLaW5kOjpNZW1vcnk6CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTM2Myw3ICszNjUs
NyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogaQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBX
YXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7Ci0gICAgICAgICAgICAvLyA3LiBPdGhlcndpc2Ug
KGkgaXMgYSB0YWJsZSBpbXBvcnQpOgorICAgICAgICAgICAgLy8gNy4gSWYgaSBpcyBhIHRhYmxl
IGltcG9ydDoKICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBqc0R5bmFt
aWNDYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KHZtLCB2YWx1ZSk7CiAgICAgICAgICAgICAvLyBp
LiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdCwgdGhyb3cgYSBXZWJBc3Nl
bWJseS5MaW5rRXJyb3IuCiAgICAgICAgICAgICBpZiAoIXRhYmxlKQpAQCAtMzk0LDYgKzM5Niwy
MiBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogaQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RXhjZXB0aW9uOiB7CisgICAg
ICAgICAgICBKU1dlYkFzc2VtYmx5VGFnKiB0YWcgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1i
bHlUYWcqPih2bSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKCF0YWcpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9i
amVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgIlRhZyBpbXBvcnQiLCAiaXMgbm90
IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhZyIpKSk7CisKKyAgICAgICAgICAgIFdhc206
OlNpZ25hdHVyZUluZGV4IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlv
bi5pbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOworICAg
ICAgICAgICAgVU5VU0VEX1ZBUklBQkxFKGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpOworCisgICAg
ICAgICAgICBpZiAoZXhwZWN0ZWRTaWduYXR1cmVJbmRleCAhPSB0YWctPnRhZygpLnNpZ25hdHVy
ZSgpLmluZGV4KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dl
YkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGlt
cG9ydCwgImltcG9ydGVkIFRhZyIsICJzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgaW1wb3J0
ZWQgV2ViQXNzZW1ibHkgVGFnJ3Mgc2lnbmF0dXJlIikpKTsKKworICAgICAgICAgICAgbV9pbnN0
YW5jZS0+aW5zdGFuY2UoKS5hZGRUYWcodGFnLT50YWcoKSk7CisgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKwogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTQyMSw2ICs0MzksOSBAQCB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09i
amVjdCogaQogICAgICAgICB9CiAgICAgfQogCisgICAgZm9yIChXYXNtOjpTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCA6IG1vZHVsZUluZm9ybWF0aW9uLmludGVybmFsRXhjZXB0aW9uU2ln
bmF0dXJlSW5kaWNlcykKKyAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5hZGRUYWcoV2Fz
bTo6VGFnOjpjcmVhdGUoV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCkpLmxlYWtSZWYoKSk7CisKICAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50ID0g
Y29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7CiAgICAgYXV0byBtYWtlRnVuY3Rpb25X
cmFwcGVyID0gWyZdICh1aW50MzJfdCBpbmRleCkgLT4gSlNWYWx1ZSB7CiAgICAgICAgIC8vIElm
IHdlIGFscmVhZHkgbWFkZSBhIHdyYXBwZXIsIGRvIG5vdCBtYWtlIGEgbmV3IG9uZS4KQEAgLTU1
Nyw2ICs1NzgsMTAgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlua0ltcGwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGkKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxL
aW5kOjpFeGNlcHRpb246IHsKKyAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1dlYkFzc2Vt
Ymx5VGFnOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5tX3dlYkFzc2Vt
Ymx5VGFnU3RydWN0dXJlLmdldChnbG9iYWxPYmplY3QpLCBtX2luc3RhbmNlLT5pbnN0YW5jZSgp
LnRhZyhleHAua2luZEluZGV4KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICB9CiAKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KGV4cC5maWVsZCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVj
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44NjVmOGM3YjZlMTMyNmY3ZGQ3Y2NkNWYwNDdjMzkzYWY2NTdj
NzA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oIgorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlv
bnMuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlUYWcuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OnNf
aW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKSB9OworCitzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjYWxsSlNXZWJBc3NlbWJseVRhZyk7CitzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFnKTsKKwor
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWcsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICAKKyAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiV2ViQXNzZW1ibHkuVGFnIGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlIHRhZyB0eXBlIGFzIHRo
ZSBmaXJzdCBhcmd1bWVudC4iX3MpOworCisgICAgSlNWYWx1ZSB0YWdUeXBlVmFsdWUgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgc2lnbmF0dXJlT2JqZWN0ID0gdGFnVHlw
ZVZhbHVlLmdldChnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJh
bWV0ZXJzIl9zKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
IGlmICghc2lnbmF0dXJlT2JqZWN0LmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWcgY29uc3RydWN0
b3IgZXhwZWN0cyBhIHRhZyB0eXBlIHdpdGggdGhlICdwYXJhbWV0ZXJzJyBwcm9wZXJ0eS4iX3Mp
OworCisgICAgVmVjdG9yPFdhc206OlR5cGU+IHBhcmFtZXRlcnM7CisgICAgZm9yRWFjaEluSXRl
cmFibGUoZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmVPYmplY3QsIFsmXSAoYXV0byYgdm0sIGF1dG8q
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBuZXh0VHlwZSkgLT4gdm9pZCB7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBXYXNtOjpUeXBlIHR5
cGU7CisgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZyA9IG5leHRUeXBlLnRvV1RGU3RyaW5nKGds
b2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgICAgIGlmICh2YWx1ZVN0cmluZyA9PSAiaTMyIl9zKQorICAgICAgICAgICAgdHlwZSA9IFdh
c206OlR5cGVzOjpJMzI7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09ICJpNjQiX3Mp
CisgICAgICAgICAgICB0eXBlID0gV2FzbTo6VHlwZXM6Okk2NDsKKyAgICAgICAgZWxzZSBpZiAo
dmFsdWVTdHJpbmcgPT0gImYzMiJfcykKKyAgICAgICAgICAgIHR5cGUgPSBXYXNtOjpUeXBlczo6
RjMyOworICAgICAgICBlbHNlIGlmICh2YWx1ZVN0cmluZyA9PSAiZjY0Il9zKQorICAgICAgICAg
ICAgdHlwZSA9IFdhc206OlR5cGVzOjpGNjQ7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5n
ID09ICJhbnlmdW5jIl9zKQorICAgICAgICAgICAgdHlwZSA9IFdhc206OlR5cGVzOjpGdW5jcmVm
OworICAgICAgICBlbHNlIGlmICh2YWx1ZVN0cmluZyA9PSAiZXh0ZXJucmVmIl9zKQorICAgICAg
ICAgICAgdHlwZSA9IFdhc206OlR5cGVzOjpFeHRlcm5yZWY7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5
LlRhZyBjb25zdHJ1Y3RvciBleHBlY3RzIHRoZSAncGFyYW1ldGVycycgZmllbGQgb2YgdGhlIGZp
cnN0IGFyZ3VtZW50IHRvIGJlIGEgc2VxdWVuY2Ugb2YgV2ViQXNzZW1ibHkgdmFsdWUgdHlwZXMu
Il9zKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKHR5cGUpOworICAgIH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICBSZWZQdHI8V2FzbTo6U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBXYXNtOjpT
aWduYXR1cmVJbmZvcm1hdGlvbjo6c2lnbmF0dXJlRm9yKHsgfSwgcGFyYW1ldGVycyk7CisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0NfR0VUX0RFUklWRURfU1RSVUNUVVJFKHZtLCB3ZWJB
c3NlbWJseVRhZ1N0cnVjdHVyZSwgYXNPYmplY3QoY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSksIGNh
bGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1Zh
bHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgV2FzbTo6VGFnOjpjcmVhdGUoKnNpZ25hdHVyZSkuZ2V0KCkpKSk7Cit9CisKK0pT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsSlNXZWJBc3NlbWJseVRhZywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRB
c0Z1bmN0aW9uVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWci
KSk7Cit9CisKK0pTV2ViQXNzZW1ibHlUYWcqIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OmNy
ZWF0ZVRhZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpT
T2JqZWN0KiBuZXdUYXJnZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgpKTsKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUodm0sIHdl
YkFzc2VtYmx5VGFnU3RydWN0dXJlLCBuZXdUYXJnZXQsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIHRhZykpOworfQorCitXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKiBX
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCit7CisgICAgYXV0
byogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVRh
Z0NvbnN0cnVjdG9yPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcih2bSwgc3Ry
dWN0dXJlKTsKKyAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5
cGUpOworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJs
eVRhZ0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1
bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlUYWdQ
cm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgMSwg
IlRhZyJfcywgUHJvcGVydHlBZGRpdGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFuc2l0aW9u
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBwcm90b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsK
K30KKworV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
cihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJl
LCBjYWxsSlNXZWJBc3NlbWJseVRhZywgY29uc3RydWN0SlNXZWJBc3NlbWJseVRhZykKK3sKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFn
Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
VGFnQ29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWUyZjFkODA2ZTkwMjFlZDg1NzVmYWM1YjM4
MTZjMTM5OWEzMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIK
KyNpbmNsdWRlICJXYXNtT3BzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1dlYkFz
c2VtYmx5VGFnOworY2xhc3MgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGU7CisKK25hbWVzcGFjZSBX
YXNtIHsKK2NsYXNzIFRhZzsKK30KKworY2xhc3MgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvciBm
aW5hbCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIElu
dGVybmFsRnVuY3Rpb24gQmFzZTsKKworICAgIHN0YXRpYyBXZWJBc3NlbWJseVRhZ0NvbnN0cnVj
dG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSopOwor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSk7CisKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseVRhZyogY3JlYXRlVGFnKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgY29uc3QgV2FzbTo6VGFnJik7CisKKyAgICBERUNM
QVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvcihWTSYs
IFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseVRh
Z1Byb3RvdHlwZSopOworfTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdl
YkFzc2VtYmx5VGFnQ29uc3RydWN0b3IsIEludGVybmFsRnVuY3Rpb24pOworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40OTNkNDE3YzE4YWM4NGE3Mjk0ZDJlOTE0MmE1NDMzMWYyNjMwNDA3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlUYWdQcm90b3R5cGUuY3BwCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisK
KyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIK
KworbmFtZXNwYWNlIEpTQyB7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih3ZWJB
c3NlbWJseVRhZ1Byb3RvRnVuY1R5cGUpOworfQorCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWdQ
cm90b3R5cGUubHV0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5LlRhZyIsICZCYXNl
OjpzX2luZm8sICZwcm90b3R5cGVUYWJsZVdlYkFzc2VtYmx5VGFnLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlKSB9OworCisvKiBTb3VyY2UgZm9y
IFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oCisgQGJlZ2luIHByb3RvdHlwZVRhYmxlV2Vi
QXNzZW1ibHlUYWcKKyB0eXBlICAgd2ViQXNzZW1ibHlUYWdQcm90b0Z1bmNUeXBlICAgRnVuY3Rp
b24gMAorIEBlbmQKKyAqLworCisKK1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlKiBXZWJBc3NlbWJs
eVRhZ1Byb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK3sKKyAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5VGFnUHJv
dG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgIHJldHVybiBvYmplY3Q7Cit9CisKK1N0cnVjdHVyZSogV2ViQXNzZW1ibHlUYWdQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBB
U1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhP
VVRfVFJBTlNJVElPTigpOworfQorCitXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTo6V2ViQXNzZW1i
bHlUYWdQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKK3sKK30KKworQUxXQVlTX0lOTElORSBzdGF0aWMgSlNXZWJBc3NlbWJs
eVRhZyogZ2V0VGFnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdGhpc1Zh
bHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoVU5MSUtFTFkoIXRoaXNWYWx1
ZS5pc0NlbGwoKSkpIHsKKyAgICAgICAgdGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
IGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGF1dG8qIHRhZyA9IGpzRHluYW1pY0Nhc3Q8
SlNXZWJBc3NlbWJseVRhZyo+KHZtLCB0aGlzVmFsdWUuYXNDZWxsKCkpOworICAgIGlmIChMSUtF
TFkodGFnKSkKKyAgICAgICAgcmV0dXJuIHRhZzsKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuVGFnIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLVRh
ZyBvYmplY3QiX3MpOworICAgIHJldHVybiBudWxscHRyOworfQorCitKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04od2ViQXNzZW1ibHlUYWdQcm90b0Z1bmNUeXBlLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIEpTV2ViQXNzZW1ibHlUYWcqIGpzVGFnID0gZ2V0VGFnKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIGNvbnN0IFdhc206OlRhZyYgdGFnID0g
anNUYWctPnRhZygpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHRhZy5wYXJhbWV0ZXJDb3VudCgpOyArK2kpCisgICAgICAg
IGFyZ0xpc3QuYXBwZW5kKFdhc206OnR5cGVUb1N0cmluZyh2bSwgdGFnLnBhcmFtZXRlcihpKS5r
aW5kKSk7CisKKyAgICBpZiAoVU5MSUtFTFkoYXJnTGlzdC5oYXNPdmVyZmxvd2VkKCkpKSB7Cisg
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwor
ICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICB9CisKKyAgICBKU0FycmF5KiBw
YXJhbWV0ZXJzID0gY29uc3RydWN0QXJyYXkoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxBcnJh
eUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciksIGFyZ0xpc3QpOworICAgIEpTT2JqZWN0KiB0
eXBlID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9i
amVjdFByb3RvdHlwZSgpLCAxKTsKKyAgICB0eXBlLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJwYXJhbWV0ZXJzIiksIHBhcmFtZXRlcnMpOworCisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHR5cGUpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5
cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mMjQzMmY5Yzg5YmRjZGE3ZGM3Yjk0MTg0NzYyYjI1MjZiNTliYjZj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlUYWdQcm90b3R5cGUuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNF
X1NIQVJBQkxFKFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJu
ICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKworICAgIHN0YXRpYyBXZWJBc3NlbWJseVRh
Z1Byb3RvdHlwZSogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFdlYkFzc2Vt
Ymx5VGFnUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24KaW5kZXggNGY4ZGQ5ZTNk
MjEzNDM1MDAwMDA2ZTI0MTQ2YjAxOTRjOWFjODhmMS4uYTQzNTEwZjRmODQ3MzAzODY0M2MxNjVj
M2MzMDgxNDhmMDc1MDRhZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
d2FzbS5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20uanNvbgpAQCAt
MjMsMzQgKzIzLDM4IEBACiAgICAgImJsb2NrX3R5cGUiOiBbImkzMiIsICJpNjQiLCAiZjMyIiwg
ImY2NCIsICJ2b2lkIiwgImV4dGVybnJlZiIsICJmdW5jcmVmIl0sCiAgICAgInJlZl90eXBlIjog
WyJmdW5jcmVmIiwgImV4dGVybnJlZiIsICJ0eXBlX2lkeCJdLAogICAgICJleHRlcm5hbF9raW5k
IjogewotICAgICAgICAiRnVuY3Rpb24iOiB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMCB9
LAotICAgICAgICAiVGFibGUiOiAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMSB9LAot
ICAgICAgICAiTWVtb3J5IjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMiB9LAotICAg
ICAgICAiR2xvYmFsIjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMyB9CisgICAgICAg
ICJGdW5jdGlvbiI6ICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAwIH0sCisgICAgICAg
ICJUYWJsZSI6ICAgICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAxIH0sCisgICAgICAg
ICJNZW1vcnkiOiAgICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAyIH0sCisgICAgICAg
ICJHbG9iYWwiOiAgICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAzIH0sCisgICAgICAg
ICJFeGNlcHRpb24iOiAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiA0IH0KICAgICB9LAog
ICAgICJzZWN0aW9uIiA6IHsKLSAgICAgICAgIlR5cGUiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50
NyIsICJ2YWx1ZSI6ICAxLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gc2lnbmF0dXJlIGRlY2xh
cmF0aW9ucyIgfSwKLSAgICAgICAgIkltcG9ydCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2
YWx1ZSI6ICAyLCAiZGVzY3JpcHRpb24iOiAiSW1wb3J0IGRlY2xhcmF0aW9ucyIgfSwKLSAgICAg
ICAgIkZ1bmN0aW9uIjogeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAzLCAiZGVzY3Jp
cHRpb24iOiAiRnVuY3Rpb24gZGVjbGFyYXRpb25zIiB9LAotICAgICAgICAiVGFibGUiOiAgICB7
ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDQsICJkZXNjcmlwdGlvbiI6ICJJbmRpcmVj
dCBmdW5jdGlvbiB0YWJsZSBhbmQgb3RoZXIgdGFibGVzIiB9LAotICAgICAgICAiTWVtb3J5Ijog
ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDUsICJkZXNjcmlwdGlvbiI6ICJNZW1v
cnkgYXR0cmlidXRlcyIgfSwKLSAgICAgICAgIkdsb2JhbCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50
NyIsICJ2YWx1ZSI6ICA2LCAiZGVzY3JpcHRpb24iOiAiR2xvYmFsIGRlY2xhcmF0aW9ucyIgfSwK
LSAgICAgICAgIkV4cG9ydCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA3LCAi
ZGVzY3JpcHRpb24iOiAiRXhwb3J0cyIgfSwKLSAgICAgICAgIlN0YXJ0IjogICAgeyAidHlwZSI6
ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA4LCAiZGVzY3JpcHRpb24iOiAiU3RhcnQgZnVuY3Rpb24g
ZGVjbGFyYXRpb24iIH0sCi0gICAgICAgICJFbGVtZW50IjogIHsgInR5cGUiOiAidmFydWludDci
LCAidmFsdWUiOiAgOSwgImRlc2NyaXB0aW9uIjogIkVsZW1lbnRzIHNlY3Rpb24iIH0sCi0gICAg
ICAgICJDb2RlIjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMCwgImRlc2Ny
aXB0aW9uIjogIkZ1bmN0aW9uIGJvZGllcyAoY29kZSkiIH0sCi0gICAgICAgICJEYXRhIjogICAg
IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMSwgImRlc2NyaXB0aW9uIjogIkRhdGEg
c2VnbWVudHMiIH0KKyAgICAgICAgIlR5cGUiOiAgICAgIHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAgMSwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIHNpZ25hdHVyZSBkZWNsYXJhdGlv
bnMiIH0sCisgICAgICAgICJJbXBvcnQiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogIDIsICJkZXNjcmlwdGlvbiI6ICJJbXBvcnQgZGVjbGFyYXRpb25zIiB9LAorICAgICAgICAi
RnVuY3Rpb24iOiAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAzLCAiZGVzY3JpcHRp
b24iOiAiRnVuY3Rpb24gZGVjbGFyYXRpb25zIiB9LAorICAgICAgICAiVGFibGUiOiAgICAgeyAi
dHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA0LCAiZGVzY3JpcHRpb24iOiAiSW5kaXJlY3Qg
ZnVuY3Rpb24gdGFibGUgYW5kIG90aGVyIHRhYmxlcyIgfSwKKyAgICAgICAgIk1lbW9yeSI6ICAg
IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNSwgImRlc2NyaXB0aW9uIjogIk1lbW9y
eSBhdHRyaWJ1dGVzIiB9LAorICAgICAgICAiR2xvYmFsIjogICAgeyAidHlwZSI6ICJ2YXJ1aW50
NyIsICJ2YWx1ZSI6ICA2LCAiZGVzY3JpcHRpb24iOiAiR2xvYmFsIGRlY2xhcmF0aW9ucyIgfSwK
KyAgICAgICAgIkV4cG9ydCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNywg
ImRlc2NyaXB0aW9uIjogIkV4cG9ydHMiIH0sCisgICAgICAgICJTdGFydCI6ICAgICB7ICJ0eXBl
IjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDgsICJkZXNjcmlwdGlvbiI6ICJTdGFydCBmdW5jdGlv
biBkZWNsYXJhdGlvbiIgfSwKKyAgICAgICAgIkVsZW1lbnQiOiAgIHsgInR5cGUiOiAidmFydWlu
dDciLCAidmFsdWUiOiAgOSwgImRlc2NyaXB0aW9uIjogIkVsZW1lbnRzIHNlY3Rpb24iIH0sCisg
ICAgICAgICJDb2RlIjogICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTAsICJk
ZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBib2RpZXMgKGNvZGUpIiB9LAorICAgICAgICAiRGF0YSI6
ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDExLCAiZGVzY3JpcHRpb24iOiAi
RGF0YSBzZWdtZW50cyIgfSwKKyAgICAgICAgIkRhdGFDb3VudCI6IHsgInR5cGUiOiAidmFydWlu
dDciLCAidmFsdWUiOiAxMiwgImRlc2NyaXB0aW9uIjogIk51bWJlciBvZiBkYXRhIHNlZ21lbnRz
IiB9LAorICAgICAgICAiRXhjZXB0aW9uIjogeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6
IDEzLCAiZGVzY3JpcHRpb24iOiAiRXhjZXB0aW9uIGRlY2xhcmF0aW9ucyIgfQogICAgIH0sCiAg
ICAgIm9wY29kZSI6IHsKICAgICAgICAgInVucmVhY2hhYmxlIjogICAgICAgICB7ICJjYXRlZ29y
eSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAwLCAicmV0dXJuIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJ0cmFwIGltbWVkaWF0ZWx5IiB9LAorICAgICAgICAibm9wIjogICAg
ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDEsICJy
ZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIm5vIG9wZXJhdGlvbiIgfSwK
ICAgICAgICAgImJsb2NrIjogICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwg
ICAgInZhbHVlIjogICAyLCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAg
ICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlh
dGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJiZWdpbiBhIHNlcXVlbmNlIG9mIGV4cHJlc3Npb25zLCB5aWVsZGluZyAwIG9yIDEgdmFsdWVz
IiB9LAogICAgICAgICAibG9vcCI6ICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRy
b2wiLCAgICAidmFsdWUiOiAgIDMsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAg
ICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlt
bWVkaWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogImJlZ2luIGEgYmxvY2sgd2hpY2ggY2FuIGFsc28gZm9ybSBjb250cm9sIGZsb3cgbG9v
cHMiIH0sCiAgICAgICAgICJpZiI6ICAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29u
dHJvbCIsICAgICJ2YWx1ZSI6ICAgNCwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAg
ICAgICAgICAgICAicGFyYW1ldGVyIjogWyJib29sIl0sICAgICAgICAgICAgICAgICAgICAgICAi
aW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiYmVnaW4gaWYgZXhwcmVzc2lvbiIgfSwKICAgICAgICAgImVsc2UiOiAgICAgICAg
ICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA1LCAicmV0dXJu
IjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBlbHNlIGV4cHJlc3Npb24g
b2YgaWYiIH0sCi0gICAgICAgICJzZWxlY3QiOiAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
Y29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNywgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAg
ICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAic2VsZWN0IG9uZSBvZiB0d28gdmFsdWVzIGJhc2VkIG9uIGNvbmRpdGlvbiIg
fSwKLSAgICAgICAgImFubm90YXRlZF9zZWxlY3QiOiAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9s
IiwgICAgInZhbHVlIjogIDI4LCAicmV0dXJuIjogWyJwcmV2Il0sICAgICAgICAgICAgICAgICAg
ICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wiXSwgICAgICAgICJpbW1l
ZGlhdGUiOiBbeyJuYW1lIjogInRhcmdldF90eXBlc19jb3VudCIsICJ0eXBlIjogInZhcnVpbnQz
MiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFyZ2V0IHR5cGVzIHZlY3RvciJ9LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7Im5hbWUiOiAidGFyZ2V0X3R5cGVzIiwgICAgICAgInR5cGUiOiAidmFsdWVfdHlwZSoiLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRh
cmdldCB0eXBlcyB0aGF0IGluZGljYXRlIHJlc3VsdCBvZiBzZWxlY3QgaW5zdHJ1Y3Rpb24ifV0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAidGhlIHNhbWUgYXMganVzdCBzZWxlY3QgYnV0IHdpdGggdGhlIGFubm90YXRpb24gZm9yIHJl
c3VsdCB0eXBlcyIgfSwKKyAgICAgICAgInRyeSI6ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29y
eSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA2LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAg
ICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUi
fV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJiZWdpbiB0cnkgZXhwcmVzc2lvbiIgfSwKKyAgICAgICAgImNhdGNo
IjogICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA3
LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIi
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjog
ImV4biIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBjYXRjaCBl
eHByZXNzaW9uIG9mIHRyeSIgfSwKKyAgICAgICAgInRocm93IjogICAgICAgICAgICAgICB7ICJj
YXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA4LCAicmV0dXJuIjogWyJjb250cm9s
Il0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImV4biIsICJ0eXBlIjogInZhcnVp
bnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aHJvdyBleGNlcHRpb24iIH0sCisgICAgICAgICJyZXRo
cm93IjogICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAg
OSwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVy
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6
ICJyZWxhdGl2ZV9kZXB0aCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAicmV0aHJvdyB0aGUg
ZXhjZXB0aW9uIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIiB9LAogICAgICAgICAiYnIiOiAgICAg
ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTIsICJy
ZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVs
YXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJyZWFrIHRoYXQgdGFyZ2V0
cyBhbiBvdXRlciBuZXN0ZWQgYmxvY2siIH0sCiAgICAgICAgICJicl9pZiI6ICAgICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMywgInJldHVybiI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2ZV9kZXB0
aCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiY29uZGl0aW9uYWwgYnJlYWsgdGhhdCB0YXJn
ZXRzIGFuIG91dGVyIG5lc3RlZCBibG9jayIgfSwKICAgICAgICAgImJyX3RhYmxlIjogICAgICAg
ICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDE0LCAicmV0dXJuIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInRhcmdldF9jb3Vu
dCIsICAgInR5cGUiOiAidmFydWludDMyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJudW1iZXIgb2YgZW50cmllcyBpbiB0aGUg
dGFyZ2V0X3RhYmxlIn0sCkBAIC01OCw4ICs2MiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Im5hbWUiOiAiZGVmYXVs
dF90YXJnZXQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImFuIG91dGVyIGJsb2NrIG9yIGxv
b3AgdG8gd2hpY2ggdG8gYnJlYWsgaW4gdGhlIGRlZmF1bHQgY2FzZSJ9XSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJicmFuY2ggdGFi
bGUgY29udHJvbCBmbG93IGNvbnN0cnVjdCIgfSwKICAgICAgICAgInJldHVybiI6ICAgICAgICAg
ICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDE1LCAicmV0dXJuIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJyZXR1cm4gemVybyBvciBvbmUgdmFsdWUg
ZnJvbSB0aGlzIGZ1bmN0aW9uIiB9LAorICAgICAgICAiZGVsZWdhdGUiOiAgICAgICAgICAgIHsg
ImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjQsICJyZXR1cm4iOiBbImNvbnRy
b2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAi
dHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogImRlbGVnYXRlIHRvIGEgcGFyZW50IHRyeSBibG9jayIg
fSwKKyAgICAgICAgImNhdGNoX2FsbCI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9s
IiwgICAgInZhbHVlIjogIDI1LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAg
ICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1l
ZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJjYXRjaCBleGNlcHRpb25zIHJlZ2FyZGxlc3Mgb2YgdGFnIiB9LAogICAgICAgICAiZHJv
cCI6ICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAg
MjYsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRl
ciI6IFsiYW55Il0sICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImlnbm9yZSB2YWx1
ZSIgfSwKLSAgICAgICAgIm5vcCI6ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250
cm9sIiwgICAgInZhbHVlIjogICAxLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJp
bW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJubyBvcGVyYXRpb24iIH0sCisgICAgICAgICJzZWxlY3QiOiAgICAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNywgInJldHVybiI6IFsicHJl
diJdLCAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIs
ICJib29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAic2VsZWN0IG9uZSBvZiB0d28gdmFsdWVzIGJhc2Vk
IG9uIGNvbmRpdGlvbiIgfSwKKyAgICAgICAgImFubm90YXRlZF9zZWxlY3QiOiAgICB7ICJjYXRl
Z29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI4LCAicmV0dXJuIjogWyJwcmV2Il0sICAg
ICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wi
XSwgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInRhcmdldF90eXBlc19jb3VudCIsICJ0
eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFyZ2V0IHR5cGVz
IHZlY3RvciJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7Im5hbWUiOiAidGFyZ2V0X3R5cGVzIiwgICAgICAgInR5cGUiOiAi
dmFsdWVfdHlwZSoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogInRhcmdldCB0eXBlcyB0aGF0IGluZGljYXRlIHJlc3VsdCBvZiBzZWxlY3Qg
aW5zdHJ1Y3Rpb24ifV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAidGhlIHNhbWUgYXMganVzdCBzZWxlY3QgYnV0IHdpdGggdGhlIGFu
bm90YXRpb24gZm9yIHJlc3VsdCB0eXBlcyIgfSwKICAgICAgICAgImVuZCI6ICAgICAgICAgICAg
ICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDExLCAicmV0dXJuIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJlbmQgYSBibG9jaywgbG9vcCwgb3IgaWYi
IH0sCiAgICAgICAgICJpMzIuY29uc3QiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAic3BlY2lh
bCIsICAgICJ2YWx1ZSI6ICA2NSwgInJldHVybiI6IFsiaTMyIl0sICAgICAgICAgICAgICAgICAg
ICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1t
ZWRpYXRlIjogW3sibmFtZSI6ICJ2YWx1ZSIsICAgICAgICAgICJ0eXBlIjogInZhcmludDMyIn1d
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiYSBjb25zdGFudCB2YWx1ZSBpbnRlcnByZXRlZCBhcyBpMzIiIH0sCiAgICAgICAgICJp
NjQuY29uc3QiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAic3BlY2lhbCIsICAgICJ2YWx1ZSI6
ICA2NiwgInJldHVybiI6IFsiaTY0Il0sICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1l
dGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFt
ZSI6ICJ2YWx1ZSIsICAgICAgICAgICJ0eXBlIjogInZhcmludDY0In1dLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYSBjb25zdGFu
dCB2YWx1ZSBpbnRlcnByZXRlZCBhcyBpNjQiIH0sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTk0NWEwZGEzM2I4M2Y2YmFmMzZjY2U3MDdkN2Mw
NzFhNDkxYTk3MC4uYTJmZmYxYjdkY2Q0ZTAwY2M4MWRkZDM1ZmVjMGE5ZjczOWE3YmQzNCAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDIxLTEwLTA1ICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUuY29tPgor
CisgICAgICAgIEltcGxlbWVudCB0aGUgV2ViQXNzZW1ibHkgZXhjZXB0aW9uIGhhbmRsaW5nIHBy
b3Bvc2FsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Mjk2ODEKKyAgICAgICAgPHJkYXI6Ly84MTYwMzM4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6
CisKIDIwMjEtMTAtMDYgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAg
ICAgIEltcGxlbWVudCBodHRwczovL3czYy5naXRodWIuaW8vcHVzaC1hcGkvI3JlY2VpdmluZy1h
LXB1c2gtbWVzc2FnZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggZTA4MTZkYzA1
NjFiMTgwYTllZmI2Njc4ZGI4MmNjNjQ2ZTE5YjQ4MS4uZGRmOTQ3ZGViNzcyMzgyYjI4OTYwOTdk
YTY0YzEzYjgwY2EyYWYxOCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVz
cy10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC0xMjI3
LDE2ICsxMjI3LDIxIEBAIGRlZiBydW5XZWJBc3NlbWJseVN1aXRlKCpvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpCiAgICAgbW9kdWxlcyA9IERpcltXQVNNVEVTVFNfUEFUSCArICIqLmpzIl0u
bWFwIHsgfGZ8IEZpbGUuYmFzZW5hbWUoZikgfQogICAgIHByZXBhcmVFeHRyYUFic29sdXRlRmls
ZXMoV0FTTVRFU1RTX1BBVEgsIFsid2FzbS5qc29uIl0pCiAgICAgcHJlcGFyZUV4dHJhUmVsYXRp
dmVGaWxlcyhtb2R1bGVzLm1hcCB7IHxmfCAiLi4vIiArIGYgfSwgJGNvbGxlY3Rpb24pCi0gICAg
cnVuKCJkZWZhdWx0LXdhc20iLCAiLW0iLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKSkKKyAgICBpZiBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnNbMF0gPT0g
Om5vX21vZHVsZQorICAgICAgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zLnNoaWZ0CisgICAg
ZWxzZQorICAgICAgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zLnVuc2hpZnQgIi1tIgorICAg
IGVuZAorICAgIHJ1bigiZGVmYXVsdC13YXNtIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpCiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgotICAgICAgICBydW4o
Indhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLW0iLCAiLS11c2VGYXN0VExTRm9yV2Fz
bUNvbnRleHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tZWFnZXIiLCAiLW0iLCAq
KEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykpCi0gICAgICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItbSIsICItLWZvcmNlQ29k
ZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1
dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAiLS12ZXJpZnlHQz10cnVlIiwgKihGVExfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigid2FzbS1u
by10bHMtY29udGV4dCIsICItbSIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIs
ICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBy
dW4oIndhc20tc2xvdy1tZW1vcnkiLCAiLW0iLCAiLS11c2VXZWJBc3NlbWJseUZhc3RNZW1vcnk9
ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAg
ICAgICAgcnVuKCJ3YXNtLWIzIiwgIi1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0td2Fz
bUJCUVVzZXNBaXI9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLWFpciIsICItbSIsICItLXVzZVdhc21MTEludD1m
YWxzZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIs
ICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBy
dW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLW0iLCAiLS1jb2xsZWN0Q29udGludW91
c2x5PXRydWUiLCAiLS12ZXJpZnlHQz10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CisgICAgICAg
IHJ1bigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNt
Q29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1lYWdlciIsICooRlRMX09Q
VElPTlMgKyBFQUdFUl9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAg
ICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRp
c29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFs
bG9jYXRpb249dHJ1ZSIsICItLXZlcmlmeUdDPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0
IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1zbG93LW1lbW9y
eSIsICItLXVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICooRlRMX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tYjMiLCAiLS11
c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICooRlRMX09QVElP
TlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tYWly
IiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNs
YW5kQWxsb2NhdGlvbj10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsICItLWNv
bGxlY3RDb250aW51b3VzbHk9dHJ1ZSIsICItLXZlcmlmeUdDPXRydWUiLCAqKEZUTF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVv
dXNseT8KICAgICBlbmQKIGVuZAogCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pT
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGNkMjdkM2ZhZWRhNjljZDk0ZTMxY2JmMGE4MzExNzczMmY5
ODhlYWUuLjk3NDY5MTAwZjMzZTIxMzBhMjgyOGEwNWM2M2ZiODhjZmViMTNkNmYgMTAwNjQ0Ci0t
LSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzM2IEBACisyMDIxLTEwLTA1ICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUuY29tPgor
CisgICAgICAgIEltcGxlbWVudCB0aGUgV2ViQXNzZW1ibHkgZXhjZXB0aW9uIGhhbmRsaW5nIHBy
b3Bvc2FsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Mjk2ODEKKyAgICAgICAgPHJkYXI6Ly84MTYwMzM4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbmV3IHRlc3RzIGZvciB0aGUgZXhjZXB0aW9u
IGhhbmRsaW5nIGFuZCBpbXBvcnQgYSBzZXQgb2YgdGVzdHMgdXNlZCBieSBWOCBpbnRvIHdhc20v
djguCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisgICAgICAgICogd2FzbS9CdWlsZGVyLmpzOgor
ICAgICAgICAoY29uc3QuX2ltcG9ydEV4Y2VwdGlvbkNvbnRpbnVhdGlvbi50eXBlLkltcG9ydC5m
aWVsZCk6CisgICAgICAgIChleHBvcnQuZGVmYXVsdC5CdWlsZGVyLnByb3RvdHlwZS5fcmVnaXN0
ZXJTZWN0aW9uQnVpbGRlcnMuY29uc3Quc2VjdGlvbi5pbi5XQVNNLmRlc2NyaXB0aW9uLnNlY3Rp
b24uc3dpdGNoLnNlY3Rpb24uY2FzZS5zdHJpbmdfYXBwZWFyZWRfaGVyZS50aGlzLnNlY3Rpb24p
OgorICAgICAgICAoY29uc3QuX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uLnR5cGUuRXhwb3J0
LmZpZWxkKTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0Ll9leHBvcnRGdW5jdGlvbkNvbnRpbnVh
dGlvbik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5
LmpzOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuSW1wb3J0KToKKyAgICAgICAgKGNvbnN0LmVt
aXR0ZXJzLkV4cG9ydCk6CisgICAgICAgIChjb25zdC5lbWl0dGVycy5FeGNlcHRpb24pOgorICAg
ICAgICAqIHdhc20vYXNzZXJ0LmpzOgorICAgICAgICAqIHdhc20vc2VsZi10ZXN0L3Rlc3RfQnVp
bGRlckpTT04uanM6CisgICAgICAgIChJbXBvcnRCZWZvcmVUeXBlU2VjdGlvbnMpOiBEZWxldGVk
LgorICAgICAgICAqIHdhc20vc3RyZXNzL2NhdGNoLXdpdGgtZGVsZWdhdGUuanM6IEFkZGVkLgor
ICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQu
YXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2FsbGJhY2spOgorICAgICAgICAo
YXNzZXJ0LnRocm93cyk6CisgICAgICAgICogd2FzbS9zdHJlc3MvY3JlYXRlLXRhZy1mcm9tLmpz
OiBBZGRlZC4KKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2Ut
Mi5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGFzc2VydC5lcSk6CisgICAg
ICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLTMuanM6IEFkZGVkLgor
ICAgICAgICAodGVzdCk6CisgICAgICAgIChhc3NlcnQuZXEpOgorICAgICAgICAqIHdhc20vc3Ry
ZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToK
KyAgICAgICAgKGFzc2VydC50aHJvd3MpOgorICAgICAgICAoaW5zdEIubmV3LldlYkFzc2VtYmx5
Lkluc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tbGl2ZW5lc3MtdGll
ci11cC5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBl
YXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5jYXRj
aCk6CisgICAgICAgIChhc3NlcnQuZXEuKToKKyAgICAgICAgKGFzc2VydC5lcSk6CisgICAgICAg
ICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLW11bHRpcGxlLWluc3RhbmNlcy5qczogQWRkZWQuCisg
ICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5h
cy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5jb25zdC5tb2R1bGUubmV3LldlYkFz
c2VtYmx5Lk1vZHVsZSk6CisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBl
YXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbnN0
LmV4cG9ydHMudGhyb3cpOgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUt
ZGVsZWdhdGUuanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUu
dGVzdFNpbXBsZVRocm93RGVsZWdhdGUpOgorICAgICAgICAodGVzdFRocm93RGVsZWdhdGVTa2lw
KToKKyAgICAgICAgKHRlc3REZWxlZ2F0ZUNhbGxlcik6CisgICAgICAgICh0ZXN0U2ltcGxlRGVs
ZWdhdGVNZXJnZSk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXNpbXBsZS10aHJv
dy1jYXRjaC5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19h
cHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS50
ZXN0U2ltcGxlVHJ5Q2F0Y2gpOgorICAgICAgICAodGVzdFNpbXBsZVRyeUNhdGNoQWxsKToKKyAg
ICAgICAgKHRlc3RDYWxsVHJ5Q2F0Y2gpOgorICAgICAgICAodGVzdENhbGxUcnlDYXRjaEFsbCk6
CisgICAgICAgICh0ZXN0U2ltcGxlVHJ5Q2F0Y2hWYWx1ZSk6CisgICAgICAgICh0ZXN0Q2FsbFRy
eUNhdGNoVmFsdWUpOgorICAgICAgICAodGVzdFN0YWNrVHJ5Q2F0Y2gpOgorICAgICAgICAodGVz
dExpdmVBZnRlclRyeUNhdGNoKToKKyAgICAgICAgKHRlc3RMaXZlQWZ0ZXJUcnlDYXRjaEFsbCk6
CisgICAgICAgICh0ZXN0VW5pZnlUcnlDYXRjaENhdGNoKToKKyAgICAgICAgKHRlc3RVbmlmeVRy
eUNhdGNoQ2F0Y2hBbGwpOgorICAgICAgICAodGVzdFVuaWZ5VHJ5Tm9UaHJvdyk6CisgICAgICAg
ICh0ZXN0VW5pZnlUcnlOb0NhdGNoKToKKyAgICAgICAgKHRlc3ROZXN0ZWRDYXRjaCk6CisgICAg
ICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hh
bGwtcmV0aHJvdy5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmlu
Z19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVy
ZS5jYWxsYmFjayk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9t
LWpzLXRvLXdhc20tY2F0Y2hhbGwuanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIu
ZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2Fw
cGVhcmVkX2hlcmUuY2FsbGJhY2spOgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi10
aHJvd24tZnJvbS1qcy10by13YXNtLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVy
LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19h
cHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24t
dGhyb3duLW91dC1vZi13YXNtLmpzOiBBZGRlZC4KKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNl
cHRpb24tdGhyb3duLW92ZXItd2FzbS5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRl
ci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS5jYWxsYmFjayk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9u
LXRyYXAuanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBw
ZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUudGVz
dENhbm5vdENhdGNoVW5yZWFjaGFibGUpOgorICAgICAgICAodGVzdENhbm5vdENhdGNoT09CKToK
KyAgICAgICAgKHRlc3RXYXNtQVBJVGhyb3cpOgorICAgICAgICAodGVzdEpTQ2F0Y2hBbmRSZXRo
cm93KToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9yZXRocm93LWZyb20tY2F0Y2gtdG8tY2F0Y2gu
anM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRf
aGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2FsbGJhY2sp
OgorICAgICAgICAqIHdhc20vc3RyZXNzL3JldGhyb3ctdG8tY2F0Y2guanM6IEFkZGVkLgorICAg
ICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMu
YXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2FsbGJhY2spOgorICAgICAgICAoYXNz
ZXJ0LnRocm93cy5jYWxsYmFjayk6CisgICAgICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAgICAg
KiB3YXNtL3N0cmVzcy9yZXRocm93LXRvLWRlbGVnYXRlLXRvLWNhdGNoLmpzOiBBZGRlZC4KKyAg
ICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFz
LmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlKToKKyAgICAgICAgKGFzc2VydC5lcS5l
eG4uZ2V0QXJnKToKKyAgICAgICAgKGFzc2VydC50aHJvd3MpOgorICAgICAgICAoYXNzZXJ0LnRo
cm93cy5jYWxsYmFjayk6CisgICAgICAgIChhc3NlcnQuZXEpOgorICAgICAgICAqIHdhc20vc3Ry
ZXNzL3NpbXBsZS1leHBvcnQtZXhjZXB0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKiB3YXNtL3Y4
L0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy1hcGkuanM6IEFk
ZGVkLgorICAgICAgICAoVGVzdEltcG9ydCk6CisgICAgICAgIChUZXN0SW1wb3J0RXhwb3J0KToK
KyAgICAgICAgKFRlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChUZXN0RXhjZXB0
aW9uQ29uc3RydWN0b3JXaXRoUGF5bG9hZCk6CisgICAgICAgIChUZXN0Q2F0Y2hKU0V4Y2VwdGlv
bi5qc19mdW5jKToKKyAgICAgICAgKGpzX2Z1bmMpOgorICAgICAgICAoVGVzdENhdGNoSlMpOgor
ICAgICAgICAoVGVzdENhdGNoSlNFeGNlcHRpb25XaXRoUGF5bG9hZCk6CisgICAgICAgIChUZXN0
R2V0QXJnKToKKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMtZXhwb3J0LmpzOiBBZGRlZC4K
KyAgICAgICAgKFRlc3RFeHBvcnRNdWx0aXBsZSk6CisgICAgICAgIChUZXN0RXhwb3J0T3V0T2ZC
b3VuZHMpOgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy1leHRlcm5yZWYuanM6IEFkZGVk
LgorICAgICAgICAoVGVzdFRocm93UmVmTnVsbCk6CisgICAgICAgIChUZXN0VGhyb3dSZWZQYXJh
bSk6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLWltcG9ydC5qczogQWRkZWQuCisgICAg
ICAgIChOZXdFeHBvcnRlZFRhZyk6CisgICAgICAgIChUZXN0SW1wb3J0U2ltcGxlKToKKyAgICAg
ICAgKFRlc3RJbXBvcnRNaXNzaW5nKToKKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMtcmV0
aHJvdy5qczogQWRkZWQuCisgICAgICAgIChUZXN0UmV0aHJvd0luQ2F0Y2gpOgorICAgICAgICAo
VGVzdFJldGhyb3dJbkNhdGNoQWxsKToKKyAgICAgICAgKFRlc3RSZXRocm93TmVzdGVkKToKKyAg
ICAgICAgKFRlc3RSZXRocm93UmVjYXRjaCk6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25z
LXNoYXJlZC5qczogQWRkZWQuCisgICAgICAgIChOZXdFeHBvcnRlZEV4Y2VwdGlvbik6CisgICAg
ICAgIChUZXN0U2luZ2xlSW5zdGFuY2UubGV0Lmluc3RhbmNlLmJ1aWxkZXIuaW5zdGFudGlhdGUu
KToKKyAgICAgICAgKFRlc3RTaW5nbGVJbnN0YW5jZSk6CisgICAgICAgIChUZXN0TXVsdGlJbnN0
YW5jZU5vblNoYXJlZC5sZXQuaW5zdGFuY2UyLmJ1aWxkZXIuaW5zdGFudGlhdGUuKToKKyAgICAg
ICAgKFRlc3RNdWx0aUluc3RhbmNlU2hhcmVkLmxldC5pbnN0YW5jZTIuYnVpbGRlci5pbnN0YW50
aWF0ZS4pOgorICAgICAgICAoVGVzdE11bHRpTW9kdWxlU2hhcmVkLmxldC5pbnN0YW5jZTIuYnVp
bGRlcjIuaW5zdGFudGlhdGUuKToKKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMtdHlwZS1y
ZWZsZWN0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKFRlc3RFeHBvcnQpOgorICAgICAgICAoVGVz
dEltcG9ydEV4cG9ydCk6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLXV0aWxzLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGFzc2VydFdhc21UaHJvd3MpOgorICAgICAgICAqIHdhc20vdjgvZXhj
ZXB0aW9ucy5qczogQWRkZWQuCisgICAgICAgIChUZXN0VGhyb3dTaW1wbGUpOgorICAgICAgICAo
VGVzdENhdGNoU2ltcGxlKToKKyAgICAgICAgKFRlc3RUcmFwTm90Q2F1Z2h0KToKKyAgICAgICAg
KFRlc3RUcmFwVmlhSlNOb3RDYXVnaHQuanNfaW1wb3J0KToKKyAgICAgICAgKFRlc3RNYW51YWxs
eVRocm93blJ1bnRpbWVFcnJvckNhdWdodC50aHJvd19leGMpOgorICAgICAgICAoVGVzdE1hbnVh
bGx5VGhyb3duUnVudGltZUVycm9yQ2F1Z2h0KToKKyAgICAgICAgKFRlc3RFeG5XaXRoV2FzbVBy
b3RvTm90Q2F1Z2h0LmpzX2ltcG9ydCk6CisgICAgICAgIChUZXN0RXhuV2l0aFdhc21Qcm90b05v
dENhdWdodCk6CisgICAgICAgIChUZXN0U3RhY2tPdmVyZmxvd05vdENhdWdodC5zdGFja19vdmVy
Zmxvdyk6CisgICAgICAgIChUZXN0U3RhY2tPdmVyZmxvd05vdENhdWdodCk6CisgICAgICAgIChU
ZXN0VGhyb3dQYXJhbUkpOgorICAgICAgICAoVGVzdFRocm93UGFyYW1GKToKKyAgICAgICAgKFRl
c3RUaHJvd1BhcmFtTCk6CisgICAgICAgIChUZXN0VGhyb3dQYXJhbUQpOgorICAgICAgICAoVGVz
dENhdGNoQ3Jvc3NGdW5jdGlvbnMudGhyb3dfdmFsdWUpOgorICAgICAgICAoVGVzdENhdGNoQ3Jv
c3NGdW5jdGlvbnMudGhyb3dfc3RyaW5nKToKKyAgICAgICAgKFRlc3RDYXRjaENyb3NzRnVuY3Rp
b25zLnRocm93X3VuZGVmaW5lZCk6CisgICAgICAgIChUZXN0Q2F0Y2hDcm9zc0Z1bmN0aW9ucy50
aHJvd19mcCk6CisgICAgICAgIChUZXN0Q2F0Y2hDcm9zc0Z1bmN0aW9ucy50aHJvd19sYXJnZSk6
CisgICAgICAgIChUZXN0RGVsZWdhdGVOb1Rocm93KToKKyAgICAgICAgKFRlc3REZWxlZ2F0ZVRo
cm93KToKKyAgICAgICAgKFRlc3REZWxlZ2F0ZVRocm93Tm9DYXRjaCk6CisgICAgICAgIChUZXN0
RGVsZWdhdGVNZXJnZSk6CisgICAgICAgIChUZXN0RGVsZWdhdGUxKToKKyAgICAgICAgKFRlc3RE
ZWxlZ2F0ZVVucmVhY2hhYmxlKToKKyAgICAgICAgKFRlc3REZWxlZ2F0ZVRvQ2FsbGVyKToKKyAg
ICAgICAgKFRlc3RVbnJlYWNoYWJsZUluQ2F0Y2hBbGwpOgorICAgICAgICAoVGVzdFRocm93V2l0
aExvY2FsKToKKyAgICAgICAgKFRlc3RDYXRjaGxlc3NUcnkpOgorICAgICAgICAqIHdhc20vdjgv
bWpzdW5pdC5qczogQWRkZWQuCisgICAgICAgIChNanNVbml0QXNzZXJ0aW9uRXJyb3IpOgorICAg
ICAgICAoTWpzVW5pdEFzc2VydGlvbkVycm9yLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAg
IChjYXRjaCk6CisgICAgICAgIChjbGFzc09mKToKKyAgICAgICAgKFZhbHVlT2YpOgorICAgICAg
ICAocHJldHR5UHJpbnRlZCk6CisgICAgICAgIChwcmV0dHlQcmludGVkQXJyYXlFbGVtZW50KToK
KyAgICAgICAgKGZhaWxXaXRoTWVzc2FnZSk6CisgICAgICAgIChmb3JtYXRGYWlsdXJlVGV4dCk6
CisgICAgICAgIChmYWlsKToKKyAgICAgICAgKGRlZXBPYmplY3RFcXVhbHMpOgorICAgICAgICAo
ZGVlcEVxdWFscyk6CisgICAgICAgIChhc3NlcnRTYW1lKToKKyAgICAgICAgKGFzc2VydE5vdFNh
bWUpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzKToKKyAgICAgICAgKGFzc2VydE5vdEVxdWFscyk6
CisgICAgICAgIChhc3NlcnRFcXVhbHNEZWx0YSk6CisgICAgICAgIChhc3NlcnRBcnJheUVxdWFs
cyk6CisgICAgICAgIChhc3NlcnRQcm9wZXJ0aWVzRXF1YWwpOgorICAgICAgICAoYXNzZXJ0VG9T
dHJpbmdFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0VHJ1ZSk6CisgICAgICAgIChhc3NlcnRGYWxz
ZSk6CisgICAgICAgIChhc3NlcnROdWxsKToKKyAgICAgICAgKGFzc2VydE5vdE51bGwpOgorICAg
ICAgICAoZXhlY3V0ZUNvZGUpOgorICAgICAgICAoY2hlY2tFeGNlcHRpb24pOgorICAgICAgICAo
YXNzZXJ0VGhyb3dzKToKKyAgICAgICAgKGFzc2VydFRocm93c0VxdWFscyk6CisgICAgICAgIChh
c3NlcnRUaHJvd3NBc3luYyk6CisgICAgICAgIChhc3NlcnRJbnN0YW5jZW9mKToKKyAgICAgICAg
KGFzc2VydERvZXNOb3RUaHJvdyk6CisgICAgICAgIChhc3NlcnRVbnJlYWNoYWJsZSk6CisgICAg
ICAgIChhc3NlcnRDb250YWlucyk6CisgICAgICAgIChhc3NlcnRNYXRjaGVzKToKKyAgICAgICAg
KGNvbmNhdGVuYXRlRXJyb3JzKToKKyAgICAgICAgKGFzc2VydFByb21pc2VSZXN1bHQpOgorICAg
ICAgICAoT3B0aW1pemF0aW9uU3RhdHVzKToKKyAgICAgICAgKGFzc2VydFVub3B0aW1pemVkKToK
KyAgICAgICAgKGFzc2VydE9wdGltaXplZCk6CisgICAgICAgIChpc05ldmVyT3B0aW1pemVMaXRl
TW9kZSk6CisgICAgICAgIChpc05ldmVyT3B0aW1pemUpOgorICAgICAgICAoaXNBbHdheXNPcHRp
bWl6ZSk6CisgICAgICAgIChpc0ludGVycHJldGVkKToKKyAgICAgICAgKGlzQmFzZWxpbmUpOgor
ICAgICAgICAoaXNVbm9wdGltaXplZCk6CisgICAgICAgIChpc09wdGltaXplZCk6CisgICAgICAg
IChpc1R1cmJvRmFubmVkKToKKyAgICAgICAgKE1qc1VuaXRBc3NlcnRpb25FcnJvci5wcmVwYXJl
U3RhY2tUcmFjZSk6CisgICAgICAgICogd2FzbS92OC93YXNtLW1vZHVsZS1idWlsZGVyLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGJ5dGVzKToKKyAgICAgICAgKHdhc21PcHRSZWZUeXBlKToKKyAgICAg
ICAgKHdhc21SZWZUeXBlKToKKyAgICAgICAgKHdhc21SdHQpOgorICAgICAgICAod2FzbVJ0dE5v
RGVwdGgpOgorICAgICAgICAobWFrZVNpZyk6CisgICAgICAgIChtYWtlU2lnX3ZfeCk6CisgICAg
ICAgIChtYWtlU2lnX3hfdik6CisgICAgICAgIChtYWtlU2lnX3ZfeHgpOgorICAgICAgICAobWFr
ZVNpZ19yX3YpOgorICAgICAgICAobWFrZVNpZ19yX3gpOgorICAgICAgICAobWFrZVNpZ19yX3h4
KToKKyAgICAgICAgKGRlZmluZVdhc21PcGNvZGUpOgorICAgICAgICAoYXNzZXJ0VHJhcHMpOgor
ICAgICAgICAoQmluYXJ5KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW5zdXJlX3NwYWNl
KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUudHJ1bmNfYnVmZmVyKToKKyAgICAgICAgKEJp
bmFyeS5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X3U4
KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF91MTYpOgorICAgICAgICAoQmluYXJ5
LnByb3RvdHlwZS5lbWl0X3UzMik6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfbGVi
X3UpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X3UzMnYpOgorICAgICAgICAoQmlu
YXJ5LnByb3RvdHlwZS5lbWl0X3U2NHYpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0
X2J5dGVzKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF9zdHJpbmcpOgorICAgICAg
ICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2hlYXBfdHlwZSk6CisgICAgICAgIChCaW5hcnkucHJv
dG90eXBlLmVtaXRfdHlwZSk6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfaW5pdF9l
eHByX3JlY3Vyc2l2ZSk6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfaW5pdF9leHBy
KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF9oZWFkZXIpOgorICAgICAgICAoQmlu
YXJ5LnByb3RvdHlwZS5lbWl0X3NlY3Rpb24pOgorICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRl
cik6CisgICAgICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5udW1Mb2NhbE5hbWVz
KToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLmV4cG9ydEFzKToKKyAg
ICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLmV4cG9ydEZ1bmMpOgorICAgICAg
ICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuc2V0Q29tcGlsYXRpb25IaW50KToKKyAg
ICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLmFkZEJvZHkpOgorICAgICAgICAo
V2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuYWRkQm9keVdpdGhFbmQpOgorICAgICAgICAo
V2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuZ2V0TnVtTG9jYWxzKToKKyAgICAgICAgKFdh
c21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLmFkZExvY2Fscyk6CisgICAgICAgIChXYXNtRnVu
Y3Rpb25CdWlsZGVyLnByb3RvdHlwZS5lbmQpOgorICAgICAgICAoV2FzbUluaXRFeHByLkkzMkNv
bnN0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5JNjRDb25zdCk6CisgICAgICAgIChXYXNtSW5p
dEV4cHIuRjMyQ29uc3QpOgorICAgICAgICAoV2FzbUluaXRFeHByLkY2NENvbnN0KToKKyAgICAg
ICAgKFdhc21Jbml0RXhwci5TMTI4Q29uc3QpOgorICAgICAgICAoV2FzbUluaXRFeHByLkdsb2Jh
bEdldCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuUmVmRnVuYyk6CisgICAgICAgIChXYXNtSW5p
dEV4cHIuUmVmTnVsbCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuU3RydWN0TmV3V2l0aFJ0dCk6
CisgICAgICAgIChXYXNtSW5pdEV4cHIuU3RydWN0TmV3KToKKyAgICAgICAgKFdhc21Jbml0RXhw
ci5TdHJ1Y3ROZXdEZWZhdWx0V2l0aFJ0dCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuU3RydWN0
TmV3RGVmYXVsdCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuQXJyYXlJbml0KToKKyAgICAgICAg
KFdhc21Jbml0RXhwci5BcnJheUluaXRTdGF0aWMpOgorICAgICAgICAoV2FzbUluaXRFeHByLlJ0
dENhbm9uKToKKyAgICAgICAgKFdhc21Jbml0RXhwci5SdHRTdWIpOgorICAgICAgICAoV2FzbUlu
aXRFeHByLlJ0dEZyZXNoU3ViKToKKyAgICAgICAgKFdhc21Jbml0RXhwci5kZWZhdWx0Rm9yKToK
KyAgICAgICAgKFdhc21Jbml0RXhwcik6CisgICAgICAgIChXYXNtR2xvYmFsQnVpbGRlcik6Cisg
ICAgICAgIChXYXNtR2xvYmFsQnVpbGRlci5wcm90b3R5cGUuZXhwb3J0QXMpOgorICAgICAgICAo
V2FzbVRhYmxlQnVpbGRlcik6CisgICAgICAgIChXYXNtVGFibGVCdWlsZGVyLnByb3RvdHlwZS5l
eHBvcnRBcyk6CisgICAgICAgIChtYWtlRmllbGQpOgorICAgICAgICAoV2FzbVN0cnVjdCk6Cisg
ICAgICAgIChXYXNtU3RydWN0U3VidHlwZSk6CisgICAgICAgIChXYXNtQXJyYXkpOgorICAgICAg
ICAoV2FzbUFycmF5U3VidHlwZSk6CisgICAgICAgIChXYXNtRWxlbVNlZ21lbnQpOgorICAgICAg
ICAoV2FzbUVsZW1TZWdtZW50LnByb3RvdHlwZS5pc19hY3RpdmUpOgorICAgICAgICAoV2FzbUVs
ZW1TZWdtZW50LnByb3RvdHlwZS5pc19wYXNzaXZlKToKKyAgICAgICAgKFdhc21FbGVtU2VnbWVu
dC5wcm90b3R5cGUuaXNfZGVjbGFyYXRpdmUpOgorICAgICAgICAoV2FzbUVsZW1TZWdtZW50LnBy
b3RvdHlwZS5leHByZXNzaW9uc19hc19lbGVtZW50cyk6CisgICAgICAgIChXYXNtTW9kdWxlQnVp
bGRlcik6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkU3RhcnQpOgor
ICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZE1lbW9yeSk6CisgICAgICAg
IChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkTWVtb3J5NjQpOgorICAgICAgICAoV2Fz
bU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEV4cGxpY2l0U2VjdGlvbik6CisgICAgICAgIChX
YXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuc3RyaW5nVG9CeXRlcyk6CisgICAgICAgIChXYXNt
TW9kdWxlQnVpbGRlci5wcm90b3R5cGUuY3JlYXRlQ3VzdG9tU2VjdGlvbik6CisgICAgICAgIChX
YXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkQ3VzdG9tU2VjdGlvbik6CisgICAgICAgIChX
YXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkVHlwZSk6CisgICAgICAgIChXYXNtTW9kdWxl
QnVpbGRlci5wcm90b3R5cGUuYWRkU3RydWN0KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVy
LnByb3RvdHlwZS5hZGRTdHJ1Y3RTdWJ0eXBlKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVy
LnByb3RvdHlwZS5hZGRBcnJheSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5
cGUuYWRkQXJyYXlTdWJ0eXBlKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlw
ZS5hZGRHbG9iYWwpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZFRh
YmxlKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRUYWcpOgorICAg
ICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEZ1bmN0aW9uKToKKyAgICAgICAg
KFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRJbXBvcnQpOgorICAgICAgICAoV2FzbU1v
ZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEltcG9ydGVkR2xvYmFsKToKKyAgICAgICAgKFdhc21N
b2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRJbXBvcnRlZE1lbW9yeSk6CisgICAgICAgIChXYXNt
TW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkSW1wb3J0ZWRUYWJsZSk6CisgICAgICAgIChXYXNt
TW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkSW1wb3J0ZWRUYWcpOgorICAgICAgICAoV2FzbU1v
ZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEV4cG9ydCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVp
bGRlci5wcm90b3R5cGUuYWRkRXhwb3J0T2ZLaW5kKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWls
ZGVyLnByb3RvdHlwZS5zZXRDb21waWxhdGlvbkhpbnQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1
aWxkZXIucHJvdG90eXBlLmFkZERhdGFTZWdtZW50KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWls
ZGVyLnByb3RvdHlwZS5hZGRQYXNzaXZlRGF0YVNlZ21lbnQpOgorICAgICAgICAoV2FzbU1vZHVs
ZUJ1aWxkZXIucHJvdG90eXBlLmV4cG9ydE1lbW9yeUFzKToKKyAgICAgICAgKFdhc21Nb2R1bGVC
dWlsZGVyLnByb3RvdHlwZS5hZGRBY3RpdmVFbGVtZW50U2VnbWVudCk6CisgICAgICAgIChXYXNt
TW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkUGFzc2l2ZUVsZW1lbnRTZWdtZW50KToKKyAgICAg
ICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGREZWNsYXJhdGl2ZUVsZW1lbnRTZWdt
ZW50KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hcHBlbmRUb1RhYmxl
KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5zZXRUYWJsZUJvdW5kcyk6
CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuc2V0TmFtZSk6CisgICAgICAg
IChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUudG9CdWZmZXIpOgorICAgICAgICAoV2FzbU1v
ZHVsZUJ1aWxkZXIucHJvdG90eXBlLnRvQXJyYXkpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxk
ZXIucHJvdG90eXBlLmluc3RhbnRpYXRlKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnBy
b3RvdHlwZS5hc3luY0luc3RhbnRpYXRlKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnBy
b3RvdHlwZS50b01vZHVsZSk6CisgICAgICAgICh3YXNtU2lnbmVkTGViKToKKyAgICAgICAgKHdh
c21VbnNpZ25lZExlYik6CisgICAgICAgICh3YXNtSTMyQ29uc3QpOgorICAgICAgICAod2FzbUk2
NENvbnN0KToKKyAgICAgICAgKHdhc21GMzJDb25zdCk6CisgICAgICAgICh3YXNtRjY0Q29uc3Qp
OgorICAgICAgICAod2FzbVMxMjhDb25zdCk6CisgICAgICAgIChnZXRPcGNvZGVOYW1lKToKKyAg
ICAgICAgKiB3YXNtL3dhc20uanNvbjoKKwogMjAyMS0xMC0wNSAgU2FhbSBCYXJhdGkgIDxzYmFy
YXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBEb24ndCBwYXNzIERvbnRCdWlsZFN0cmluZ3MgdG8g
bmV4dCB0b2tlbiBhZnRlciBwYXJzaW5nIGFuIGVtcHR5IHBhcmFtZXRlciBsaXN0CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3dhc20ueWFtbCBiL0pTVGVzdHMvd2FzbS55YW1sCmluZGV4IDJlY2I2MzRk
YmY1YjJiZWU3MmNkZDEzYzQwMTc5YmYyZjVlOTRiYzEuLjFmNDUxYmM5MTE4Y2NhYzMzOTg5NzBl
YTQ5YjI1ODljYWYzM2NjMjcgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS55YW1sCisrKyBiL0pT
VGVzdHMvd2FzbS55YW1sCkBAIC00NSw2ICs0NSw4IEBACiAgIGNtZDogcnVuV2ViQXNzZW1ibHkg
dW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2FzbS9zZWxmLXRlc3QvCiAgIGNtZDog
cnVuV2ViQXNzZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcworLSBwYXRoOiB3YXNt
L3Y4LworICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUoOm5vX21vZHVsZSwgIm1qc3VuaXQuanMi
KSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogCiAtIHBhdGg6IHdhc20vcmVmZXJlbmNlcy1zcGVj
LXRlc3RzL2VsZW0ud2FzdC5qcwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5UmVmZXJlbmNlU3BlY1Rl
c3QgOm5vcm1hbApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMgYi9KU1Rlc3Rz
L3dhc20vQnVpbGRlci5qcwppbmRleCAzMmZmZTZiYmI1NjFhNTMzMzg1N2VkMjMxYjA0N2E3ZjJh
ZmJmMTE1Li4xMTAxZjcyNWNjZGRiMGNjMWU4OWEwNWM3YWRkN2JiNDlkMmY1OTdjIDEwMDY0NAot
LS0gYS9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcworKysgYi9KU1Rlc3RzL3dhc20vQnVpbGRlci5q
cwpAQCAtMTI4LDYgKzEyOCwxOCBAQCBjb25zdCBfaW1wb3J0VGFibGVDb250aW51YXRpb24gPSAo
YnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKICAgICB9OwogfTsKIAorY29uc3Qg
X2ltcG9ydEV4Y2VwdGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVp
bGRlcikgPT4geworICAgIHJldHVybiAobW9kdWxlLCBmaWVsZCwgdHlwZSkgPT4geworICAgICAg
ICBhc3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1wb3J0IGZ1bmN0aW9uIG1vZHVsZSBzaG91bGQg
YmUgYSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOworICAgICAgICBhc3NlcnQuaXNTdHJpbmco
ZmllbGQsIGBJbXBvcnQgZnVuY3Rpb24gZmllbGQgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7
ZmllbGR9ImApOworICAgICAgICBjb25zdCB0eXBlU2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rp
b24oIlR5cGUiKTsKKyAgICAgICAgdHlwZSA9IF9tYXliZVJlZ2lzdGVyVHlwZShidWlsZGVyLCB0
eXBlKTsKKyAgICAgICAgY29uc3QgdGFnID0gMDsKKyAgICAgICAgc2VjdGlvbi5kYXRhLnB1c2go
eyBmaWVsZCwgdHlwZSwgdGFnLCBraW5kOiAiRXhjZXB0aW9uIiwgbW9kdWxlIH0pOworICAgICAg
ICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihuZXh0QnVpbGRlcik7CisgICAgfQorfTsK
KwogY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rpb24s
IG5leHRCdWlsZGVyKSA9PiB7CiAgICAgcmV0dXJuIChmaWVsZCwgaW5kZXgsIHR5cGUpID0+IHsK
ICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKGZpZWxkLCBgRXhwb3J0IGZ1bmN0aW9uIGZpZWxkIHNo
b3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKQEAgLTIxNSw2ICsyMjcsMTQgQEAg
Y29uc3QgX2V4cG9ydFRhYmxlQ29udGludWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRC
dWlsZGVyKSA9PiB7CiAgICAgfQogfTsKIAorY29uc3QgX2V4cG9ydEV4Y2VwdGlvbkNvbnRpbnVh
dGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4geworICAgIHJldHVybiAo
ZmllbGQsIGluZGV4KSA9PiB7CisgICAgICAgIGFzc2VydC5pc051bWJlcihpbmRleCwgYEV4Y2Vw
dGlvbiBleHBvcnRzIG9ubHkgc3VwcG9ydCBudW1iZXIgaW5kaWNlc2ApOworICAgICAgICBzZWN0
aW9uLmRhdGEucHVzaCh7ZmllbGQsIGtpbmQ6ICJFeGNlcHRpb24iLCBpbmRleH0pOworICAgICAg
ICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihuZXh0QnVpbGRlcik7CisgICAgfQorfTsK
KwogY29uc3QgX2ltcG9ydEdsb2JhbENvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBu
ZXh0QnVpbGRlcikgPT4gewogICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgIGNvbnN0IGdsb2Jh
bEJ1aWxkZXIgPSB7CkBAIC0zMDcsNiArMzI3LDcgQEAgY29uc3QgX2NoZWNrSW1tcyA9IChvcCwg
aW1tcywgZXhwZWN0ZWRJbW1zLCByZXQpID0+IHsKICAgICAgICAgY2FzZSAidGFyZ2V0X3RhYmxl
IjogYnJlYWs7IC8vIGltcHJvdmUgY2hlY2tpbmcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MzQyMQogICAgICAgICBjYXNlICJyZXNlcnZlZCI6IGJyZWFrOyAvLyBp
bXByb3ZlIGNoZWNraW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjM0MjEKICAgICAgICAgY2FzZSAidGFibGVfaW5kZXgiOiBicmVhazsgLy8gaW1wcm92ZSBjaGVj
a2luZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNDIxCisgICAg
ICAgIGNhc2UgImV4biI6IGJyZWFrOwogICAgICAgICBjYXNlICJyZWZ0eXBlIjoKICAgICAgICAg
ICAgIGFzc2VydC50cnV0aHkoV0FTTS5pc1ZhbGlkUmVmVHlwZShpbW1zW2lkeF0pLCBgSW52YWxp
ZCByZWYgdHlwZSBvbiAke29wfTogIiR7aW1tc1tpZHhdfSJgKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMzM1LDExICszNTYsMTMgQEAgY29uc3QgX2NyZWF0ZUZ1bmN0aW9uQnVpbGRlciA9IChm
dW5jLCBidWlsZGVyLCBwcmV2aW91c0J1aWxkZXIpID0+IHsKICAgICAgICAgICAgICAgICBuZXh0
QnVpbGRlciA9IGZ1bmN0aW9uQnVpbGRlcjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgIkVuZCI6CisgICAgICAgICAgICBjYXNlICJEZWxlZ2F0ZSI6CiAgICAgICAg
ICAgICAgICAgbmV4dEJ1aWxkZXIgPSBwcmV2aW91c0J1aWxkZXI7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlICJCbG9jayI6CiAgICAgICAgICAgICBjYXNlICJMb29w
IjoKICAgICAgICAgICAgIGNhc2UgIklmIjoKKyAgICAgICAgICAgIGNhc2UgIlRyeSI6CiAgICAg
ICAgICAgICAgICAgbmV4dEJ1aWxkZXIgPSBfY3JlYXRlRnVuY3Rpb25CdWlsZGVyKGZ1bmMsIGJ1
aWxkZXIsIGZ1bmN0aW9uQnVpbGRlcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CkBAIC00ODgsNiArNTExLDcgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7
CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuRnVuY3Rpb24gPSBfaW1wb3J0RnVu
Y3Rpb25Db250aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAg
ICAgICAgIGltcG9ydEJ1aWxkZXIuTWVtb3J5ID0gX2ltcG9ydE1lbW9yeUNvbnRpbnVhdGlvbih0
aGlzLCBzLCBpbXBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRl
ci5UYWJsZSA9IF9pbXBvcnRUYWJsZUNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVy
KTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5FeGNlcHRpb24gPSBfaW1wb3J0
RXhjZXB0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihpbXBvcnRCdWlsZGVyKTsK
ICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTMxLDYgKzU1
NSwyMyBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsKICAgICAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgICAgICBjYXNlICJFeGNlcHRpb24i
OiB7CisgICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZGF0YUJ1aWxkZXIgPSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBFbmQ6ICgpID0+IHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU6
IChzaWduYXR1cmUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHlwZSA9
IF9tYXliZVJlZ2lzdGVyVHlwZSh0aGlzLCBzaWduYXR1cmUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHMuZGF0YS5wdXNoKHsgdGFnOiAwLCB0eXBlIH0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKGRhdGFCdWlsZGVyKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBhZGQgdGFncyB3aXRoIG5vbi16ZXJvIHZhbHVlIHRoZW4gd2UgY2FuIGFkZCBhIG5ldyBt
ZW1iZXIuCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKGRhdGFCdWlsZGVyKTsKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBj
YXNlICJHbG9iYWwiOgogICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlv
bik7CkBAIC01NjksNiArNjEwLDcgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAg
ICAgICAgICAgICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuRnVuY3Rpb24gPSBfZXhwb3J0RnVuY3Rp
b25Db250aW51YXRpb24odGhpcywgcywgZXhwb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAgICAg
ICAgIGV4cG9ydEJ1aWxkZXIuTWVtb3J5ID0gX2V4cG9ydE1lbW9yeUNvbnRpbnVhdGlvbih0aGlz
LCBzLCBleHBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAgICAgZXhwb3J0QnVpbGRlci5U
YWJsZSA9IF9leHBvcnRUYWJsZUNvbnRpbnVhdGlvbih0aGlzLCBzLCBleHBvcnRCdWlsZGVyKTsK
KyAgICAgICAgICAgICAgICAgICAgZXhwb3J0QnVpbGRlci5FeGNlcHRpb24gPSBfZXhwb3J0RXhj
ZXB0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGV4cG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihleHBvcnRCdWlsZGVyKTsKICAg
ICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzM3LDE1ICs3Nzks
NiBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsKICAgICAgICAgICAgIGZvciAoY29u
c3QgcyBvZiB0aGlzLl9zZWN0aW9ucykKICAgICAgICAgICAgICAgICBpZiAobnVtYmVyICE9PSBf
dW5rbm93blNlY3Rpb25JZCkKICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmZhbHN5KHMubmFt
ZSA9PT0gbmFtZSAmJiBzLmlkID09PSBudW1iZXIsIGBDYW5ub3QgaGF2ZSB0d28gc2VjdGlvbnMg
d2l0aCB0aGUgc2FtZSBuYW1lICIke25hbWV9IiBhbmQgSUQgJHtudW1iZXJ9YCk7Ci0gICAgICAg
ICAgICAvLyBDaGVjayBvcmRlcmluZy4KLSAgICAgICAgICAgIGlmICgobnVtYmVyICE9PSBfdW5r
bm93blNlY3Rpb25JZCkgJiYgKHRoaXMuX3NlY3Rpb25zLmxlbmd0aCAhPT0gMCkpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fc2VjdGlvbnMubGVuZ3RoIC0gMTsgaSA+PSAw
OyAtLWkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NlY3Rpb25zW2ldLmlkID09
PSBfdW5rbm93blNlY3Rpb25JZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgICAgICBhc3NlcnQubGUodGhpcy5fc2VjdGlvbnNbaV0uaWQsIG51bWJl
ciwgYEJhZCBzZWN0aW9uIG9yZGVyaW5nOiAiJHt0aGlzLl9zZWN0aW9uc1tpXS5uYW1lfSIgY2Fu
bm90IHByZWNlZGUgIiR7bmFtZX0iYCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBjb25zdCBz
ID0gT2JqZWN0LmFzc2lnbih7IG5hbWU6IG5hbWUsIGlkOiBudW1iZXIsIGRhdGE6IFtdIH0sIGV4
dHJhT2JqZWN0IHx8IHt9KTsKICAgICAgICAgdGhpcy5fc2VjdGlvbnMucHVzaChzKTsKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzIGIvSlNUZXN0
cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMKaW5kZXggMzU4YmI0ODJkNGUwNzMy
NmEyMGU1ODkzNGU1NTI5MmJiNTUxNjM3MC4uZTljNTc2MjYwZjVkMmU1YjY3ZmFlOGEzZGI1MGU2
Yzc0MTY4ODgxNyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlC
aW5hcnkuanMKKysrIGIvSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMK
QEAgLTE0Myw2ICsxNDMsMTAgQEAgY29uc3QgZW1pdHRlcnMgPSB7CiAgICAgICAgICAgICBjYXNl
ICJHbG9iYWwiOgogICAgICAgICAgICAgICAgIHB1dEdsb2JhbFR5cGUoYmluLCBlbnRyeS5nbG9i
YWxEZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
ICJFeGNlcHRpb24iOgorICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBlbnRy
eS50YWcpOworICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBlbnRyeS50eXBl
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0sCkBAIC0xODUsNiArMTg5LDcgQEAgY29uc3QgZW1pdHRlcnMgPSB7CiAgICAgICAgICAgICBj
YXNlICJGdW5jdGlvbiI6CiAgICAgICAgICAgICBjYXNlICJNZW1vcnkiOgogICAgICAgICAgICAg
Y2FzZSAiVGFibGUiOgorICAgICAgICAgICAgY2FzZSAiRXhjZXB0aW9uIjoKICAgICAgICAgICAg
ICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZW50cnkuaW5kZXgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1lbnRh
dGlvbiBwcm9ibGVtOiB1bmV4cGVjdGVkIGtpbmQgJHtlbnRyeS5raW5kfWApOwpAQCAtMjU0LDYg
KzI1OSwxNCBAQCBjb25zdCBlbWl0dGVycyA9IHsKICAgICAgICAgICAgICAgICBwdXQoYmluLCAi
dWludDgiLCBieXRlKTsKICAgICAgICAgfQogICAgIH0sCisKKyAgICBFeGNlcHRpb246IChzZWN0
aW9uLCBiaW4pID0+IHsKKyAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIHNlY3Rpb24uZGF0
YS5sZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0IGV4biBvZiBzZWN0aW9uLmRhdGEpIHsKKyAg
ICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBleG4udGFnKTsKKyAgICAgICAgICAgIHB1
dChiaW4sICJ2YXJ1aW50MzIiLCBleG4udHlwZSk7CisgICAgICAgIH0KKyAgICB9LAogfTsKIAog
ZXhwb3J0IGNvbnN0IEJpbmFyeSA9IChwcmVhbWJsZSwgc2VjdGlvbnMpID0+IHsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9hc3NlcnQuanMgYi9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCmluZGV4
IDZmZGI2NWE0ZGFkZGMwZDc3YTcyNGMwMTkyZDhmYjUzYmYxMGJmNjguLjk0ODM4ZDk3ZWY1NTBm
NjFmZDIzODZjM2YyYWJkOGVmOTIzNmU0MDIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9hc3Nl
cnQuanMKKysrIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwpAQCAtMTI0LDcgKzEyNCw3IEBAIGNv
bnN0IF90aHJvd3MgPSAoZnVuYywgdHlwZSwgbWVzc2FnZSwgLi4uYXJncykgPT4gewogICAgIHRy
eSB7CiAgICAgICAgIGZ1bmMoLi4uYXJncyk7CiAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICBp
ZiAoZSBpbnN0YW5jZW9mIHR5cGUgJiYgZS5tZXNzYWdlLmluZGV4T2YobWVzc2FnZSkgPj0gMCkK
KyAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiB0eXBlICYmICh0eXBlb2YoZS5tZXNzYWdlKSA9PSAi
dW5kZWZpbmVkIiB8fCBlLm1lc3NhZ2UuaW5kZXhPZihtZXNzYWdlKSA+PSAwKSkKICAgICAgICAg
ICAgIHJldHVybiBlOwogICAgICAgICBfZmFpbChgRXhwZWN0ZWQgdG8gdGhyb3cgYSAke3R5cGUu
bmFtZX0gd2l0aCBtZXNzYWdlICIke21lc3NhZ2V9IiwgZ290ICR7ZS5uYW1lfSB3aXRoIG1lc3Nh
Z2UgIiR7ZS5tZXNzYWdlfSJgKTsKICAgICB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc2Vs
Zi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMgYi9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3Rf
QnVpbGRlckpTT04uanMKaW5kZXggYmIxYjk3YjE5ZDVjYzFjNzhiNWYwMDdkYzY5MGFhZGJkNzBk
MjBmOC4uMjA5ZjIwYjc2YmJhOGI3MGM1MTcyMWVlNDU2ODNkMWY3NjAzMmE2ZiAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzCisrKyBiL0pTVGVz
dHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcwpAQCAtMTQwLDExICsxNDAsNiBA
QCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZuLCBtZXNzYWdlKSA9PiB7CiAgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMCk7CiB9KSgpOwogCi0oZnVuY3Rpb24gSW1w
b3J0QmVmb3JlVHlwZVNlY3Rpb25zKCkgewotICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSku
SW1wb3J0KCkuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBiLlR5cGUoKSwgRXJyb3Is
IGBFeHBlY3RlZDogIjIiID4gIjEiOiBCYWQgc2VjdGlvbiBvcmRlcmluZzogIkltcG9ydCIgY2Fu
bm90IHByZWNlZGUgIlR5cGUiYCk7Ci19KSgpOwotCiAoZnVuY3Rpb24gSW1wb3J0RnVuY3Rpb25X
aXRob3V0VHlwZVNlY3Rpb24oKSB7CiAgICAgY29uc3QgaSA9IChuZXcgQnVpbGRlcigpKS5JbXBv
cnQoKTsKICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGkuRnVuY3Rpb24oImZvbyIsICJiYXIiLCAw
KSwgRXJyb3IsIGBTaG91bGRuJ3QgYmUgdW5kZWZpbmVkOiBDYW4gbm90IHVzZSB0eXBlIDAgaWYg
YSB0eXBlIHNlY3Rpb24gaXMgbm90IHByZXNlbnRgKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS9zdHJlc3MvY2F0Y2gtd2l0aC1kZWxlZ2F0ZS5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvY2F0
Y2gtd2l0aC1kZWxlZ2F0ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzBiZWY1OTNjYzQyMzYyYjIyYWUyOTk3
NjQyYjMyODUxNDg4NTQyCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9j
YXRjaC13aXRoLWRlbGVnYXRlLmpzCkBAIC0wLDAgKzEsOTAgQEAKK2ltcG9ydCBCdWlsZGVyIGZy
b20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0Lmpz
JworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJh
bXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQor
ICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJm
b28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAu
VHJ5KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2Fs
bCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkRlbGVnYXRl
KDApCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykK
KyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQor
CisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9k
dWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0g
bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19
KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKworICAgIGZ1bmN0aW9u
IGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRh
ZywgW10pOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwg
Myk7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7
CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHku
RXhjZXB0aW9uKTsKK30KKworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAg
Yi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAg
ICAgICAgICAuRXhjZXB0aW9uKCJjb250ZXh0IiwgInRhZyIsIHsgcGFyYW1zOiBbImkzMiJdLCBy
ZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigi
Zm9vIiwgMSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAg
LlRyeSgiaTMyIikKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNh
bGwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5EZWxlZ2F0
ZSgwKQorICAgICAgICAgICAgLkNhdGNoKDEpCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkK
KworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1v
ZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgb3RoZXJUYWcgPSBu
ZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIiXX0pCisgICAgY29uc3QgaW5z
dGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2Fs
bGJhY2ssIHRhZzogb3RoZXJUYWcgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9y
dHMuZm9vOworICAgIGxldCBhcmdzID0gW107CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsK
KyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIGFyZ3MpOworICAg
IH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0
YWcgPSBvdGhlclRhZzsKKyAgICBhcmdzID0gWzEwMF07CisKKyAgICBsZXQgZXhuID0gYXNzZXJ0
LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cisg
ICAgYXNzZXJ0LmVxKGV4bi5nZXRBcmcodGFnLCAwKSwgMTAwKTsKK30KZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS9zdHJlc3MvY3JlYXRlLXRhZy1mcm9tLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVz
cy9jcmVhdGUtdGFnLWZyb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjI3OGQ2YzIxNzZjZmI1ODE0YWZhZTc2
ODRmMTlmZDU2ODEwMWZhOQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mv
Y3JlYXRlLXRhZy1mcm9tLmpzCkBAIC0wLDAgKzEsMjIgQEAKK2ltcG9ydCAqIGFzIGFzc2VydCBm
cm9tICcuLi9hc3NlcnQuanMnCisKK2xldCBwYXJhbWV0ZXJzID0gWyJpMzIiLCAiZjMyIiwgImV4
dGVybnJlZiJdOworCithc3NlcnQudGhyb3dzKFdlYkFzc2VtYmx5LlRhZywgVHlwZUVycm9yLCAi
Y2FsbGluZyBXZWJBc3NlbWJseS5UYWcgY29uc3RydWN0b3Igd2l0aG91dCBuZXcgaXMgaW52YWxp
ZCIpOworbGV0IHBhc3NlZFBhcmFtZXRlcnMgPSB7IHBhcmFtZXRlcnMgfTsKK2xldCB0YWcgPSBu
ZXcgV2ViQXNzZW1ibHkuVGFnKHBhc3NlZFBhcmFtZXRlcnMpOworCithc3NlcnQudHJ1dGh5KHRh
Zy50eXBlKCkgIT09IHBhc3NlZFBhcmFtZXRlcnMsICJUYWcgdHlwZSBzaG91bGQgcmV0dXJuIGEg
ZnJlc2ggb2JqZWN0Iik7Cithc3NlcnQuZXEodGFnLnR5cGUoKS5wYXJhbWV0ZXJzLCBwYXJhbWV0
ZXJzLCAiVGFncyB0eXBlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgcGFyYW1ldGVycyBwYXNz
ZWQgaW4iKTsKKworYXNzZXJ0LnRocm93cyhXZWJBc3NlbWJseS5FeGNlcHRpb24sIFR5cGVFcnJv
ciwgImNhbGxpbmcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGNvbnN0cnVjdG9yIHdpdGhvdXQgbmV3
IGlzIGludmFsaWQiKTsKKworbGV0IGV4Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRp
b24odGFnLCBbMSwgMi41LCBwYXJhbWV0ZXJzXSk7Cithc3NlcnQudHJ1dGh5KGV4Y2VwdGlvbi5p
cyh0YWcpKTsKK2Fzc2VydC5lcShleGNlcHRpb24uZ2V0QXJnKHRhZywgMCksIDEpOworYXNzZXJ0
LmVxKGV4Y2VwdGlvbi5nZXRBcmcodGFnLCAxKSwgMi41KTsKK2Fzc2VydC5lcShleGNlcHRpb24u
Z2V0QXJnKHRhZywgMiksIHBhcmFtZXRlcnMpOworCithc3NlcnQudGhyb3dzKCgpID0+IGV4Y2Vw
dGlvbi5nZXRBcmcodGFnLCAzKSwgUmFuZ2VFcnJvciwgIldlYkFzc2VtYmx5LkV4Y2VwdGlvbi5n
ZXRBcmcoKTogSW5kZXggb3V0IG9mIHJhbmdlIik7CisKK2Fzc2VydC5lcShXZWJBc3NlbWJseS5F
eGNlcHRpb24ucHJvdG90eXBlLl9fcHJvdG9fXywgT2JqZWN0LnByb3RvdHlwZSkKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLTIuanMgYi9K
U1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0yLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjBlYzdmYmFkMDc1ODk1NWVhMmY4ZTQzNDI4MTQxN2M5NmYwMGRiNzMKLS0tIC9kZXYvbnVs
bAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0yLmpz
CkBAIC0wLDAgKzEsOTAgQEAKKworaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycK
K2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK2NvbnN0IHBhZ2VTaXpl
ID0gNjQgKiAxMDI0OworY29uc3QgbnVtUGFnZXMgPSAxOworCit2YXIgaW5zdEE7Cit2YXIgaW5z
dEI7Cit2YXIgZ3JvdzsKK3ZhciBtZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiAwfTsKK3Zh
ciBtZW0gPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KG1lbW9yeURlc2NyaXB0aW9uKTsKKworZnVu
Y3Rpb24gdGVzdCgpIHsKKyAgICBhc3NlcnQuZXEoaW5zdEEuZXhwb3J0cy5tYWluKDQyKSwgNDIp
OworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5k
KCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuTWVtb3J5KCJjb250ZXh0IiwgIm1l
bSIsIG1lbW9yeURlc2NyaXB0aW9uKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0Iiwg
Imdyb3ciLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJ0cmFtcG9saW5lIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigidHJhbXBvbGluZSIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIg
fSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
IC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGluc3RCID0g
bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeworICAgICAgICBjb250ZXh0OiB7Cisg
ICAgICAgICAgICBtZW0sCisgICAgICAgICAgICBncm93KCkgeyBpbnN0QS5leHBvcnRzLmdyb3co
MSk7IH0sCisgICAgICAgIH0KKyAgICB9KTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVp
bGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAg
ICAgLk1lbW9yeSgiY29udGV4dCIsICJtZW0iLCBtZW1vcnlEZXNjcmlwdGlvbikKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJ0cmFtcG9saW5lIiwgeyBwYXJhbXM6IFtdLCByZXQ6
ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAg
ICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAg
ICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigibWFpbiIpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImdyb3ciKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJtYWluIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgw
KQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgICAgICAuQ2F0
Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAg
ICAgICAgLkkzMkxvYWQoMCwgMCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJncm93IiwgeyBwYXJhbXM6IFsiaTMyIl0s
IHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAg
ICAgICAgLkdyb3dNZW1vcnkoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoNDIpCisgICAg
ICAgICAgICAgICAgLkkzMlN0b3JlKDAsIDApCisgICAgICAgICAgICAgICAgLlRocm93KDApCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgaW5zdEEgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxl
LCB7CisgICAgICAgIGNvbnRleHQ6IHsKKyAgICAgICAgICAgIG1lbSwKKyAgICAgICAgICAgIHRy
YW1wb2xpbmU6IGluc3RCLmV4cG9ydHMudHJhbXBvbGluZSwKKyAgICAgICAgfQorICAgIH0pOwor
fQorCit0ZXN0KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1j
cm9zcy1pbnN0YW5jZS0zLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3Mt
aW5zdGFuY2UtMy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTg5ODBiZWI5M2Y2YzJjMzA2NGMyY2M5MTRlYWMx
YTEzNGMwNDgwCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRp
b24tY3Jvc3MtaW5zdGFuY2UtMy5qcwpAQCAtMCwwICsxLDc1IEBACitpbXBvcnQgQnVpbGRlciBm
cm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5q
cycKKworY29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7Citjb25zdCBudW1QYWdlcyA9IDE7CisK
K3ZhciBpbnN0QTsKK3ZhciBpbnN0QjsKK3ZhciBncm93OwordmFyIG1lbW9yeURlc2NyaXB0aW9u
ID0ge2luaXRpYWw6IG51bVBhZ2VzfTsKK3ZhciBtZW0gPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5
KG1lbW9yeURlc2NyaXB0aW9uKTsKKworZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBhc3NlcnQuZXEo
aW5zdEEuZXhwb3J0cy5tYWluKCksIDQyKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVp
bGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAg
ICAgLk1lbW9yeSgiY29udGV4dCIsICJtZW0iLCB7IGluaXRpYWw6IDAgfSkKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWdu
YXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oInRocm93IikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImV4IiwgMCkKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigidGhy
b3ciLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAgICAgLlRocm93
KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgaW5zdEIgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2Uo
bW9kdWxlLCB7IGNvbnRleHQ6IHsgbWVtOiBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsgaW5pdGlh
bDogMCB9KSB9IH0pOworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAg
Yi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuTWVtb3J5KCJj
b250ZXh0IiwgIm1lbSIsIG1lbW9yeURlc2NyaXB0aW9uKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjb250ZXh0IiwgInRocm93IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAg
ICAgICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJleCIsIHsgcGFyYW1zOiBbXSB9KQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigp
LlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYWluIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigibWFpbiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
aTMyIiB9KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgIC5J
MzJDb25zdCg0MikKKyAgICAgICAgICAgICAgICAuSTMyU3RvcmUoMCwgMCkKKyAgICAgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAg
ICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJMb2Fk
KDAsIDApCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAg
ICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgaW5zdEEg
PSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgLi4uaW5zdEIu
ZXhwb3J0cywgbWVtIH0gfSk7Cit9CisKK3Rlc3QoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVz
cy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2M2N2M5MTg2OWUyYWIy
ZGJlNzBkNWNlYzFlN2YyNTc4OThiNThmNgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2Fz
bS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLmpzCkBAIC0wLDAgKzEsNTggQEAKK2lt
cG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJv
bSAnLi4vYXNzZXJ0LmpzJworCit2YXIgaW5zdEE7Cit2YXIgaW5zdEI7CisKK2Z1bmN0aW9uIHRl
c3QoKSB7CisgICAgYXNzZXJ0LnRocm93cyhpbnN0QS5leHBvcnRzLm1haW4sIFdlYkFzc2VtYmx5
LkV4Y2VwdGlvbiwgIndhc20gZXhjZXB0aW9uIik7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisg
ICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvdyIpCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oInRocm93Iiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRocm93KDApCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgaW5zdEIgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxl
KTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0Iiwg
InRocm93IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbImkzMiIsICJpMzIiXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJtYWluIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigibWFpbiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9
KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5DYWxs
KDApCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJB
ZGQoKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
IC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGluc3RBID0g
bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IHRocm93OiBpbnN0
Qi5leHBvcnRzLnRocm93IH0gfSk7Cit9CisKK3Rlc3QoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS9zdHJlc3MvZXhjZXB0aW9uLWxpdmVuZXNzLXRpZXItdXAuanMgYi9KU1Rlc3RzL3dhc20v
c3RyZXNzL2V4Y2VwdGlvbi1saXZlbmVzcy10aWVyLXVwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlNjA1MjQw
ZDIxNWViMTQyMTAyYzg1ZjFjOTgwMzUyNGM4NWM2ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1saXZlbmVzcy10aWVyLXVwLmpzCkBAIC0wLDAgKzEs
ODcgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBh
c3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVy
KCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAg
ICAgLkV4Y2VwdGlvbigpCisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbImkzMiJd
fSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oInRhZyIsIDApCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBh
cmFtczogW10sIHJldDogImkzMiIgfSwgWyJpMzIiXSkKKyAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMWU2KQorICAgICAgICAgICAgICAgIC5TZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5U
cnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCg0MikKKyAgICAgICAgICAg
ICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAg
ICAgICAgICAgIC5Mb29wKCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5CbG9jaygi
dm9pZCIsIGIgPT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLkdldExvY2FsKDAp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkVxeigpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLkJySWYoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3Qo
MSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMyU3ViKCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuU2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuQnIoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAg
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAg
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisK
KworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1
bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBu
ZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKyAgICBjb25zdCB0YWcgPSBpbnN0YW5j
ZS5leHBvcnRzLnRhZzsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxs
LCBXZWJBc3NlbWJseS5FeGNlcHRpb24sICJ3YXNtIGV4Y2VwdGlvbiIpOworICAgIHRyeSB7Cisg
ICAgICAgIGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgYXNzZXJ0LnRydXRoeShlLmlzKHRhZykpOworICAgICAgICBhc3NlcnQuZXEoZS5nZXRBcmco
dGFnLCAwKSwgNDIpOworICAgIH0KK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4
dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KS5FbmQoKQorICAgICAg
ICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFy
YW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwi
LCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5HZXRM
b2NhbCgwKQorICAgICAgICAgICAgICAgIC5Mb29wKCJ2b2lkIikKKyAgICAgICAgICAgICAgICAg
ICAgLkNhbGwoMikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAg
ICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgICAg
ICAuSTMyRXF6KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5CcklmKDEpCisgICAgICAgICAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oIndyYXBwZXIiLCB7IHBhcmFtczogW10sIHJldDog
InZvaWQiIH0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKyAgICB2YXIg
Y291bnRlciA9IDFlNTsKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7Cisg
ICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0
IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7
IGNhbGxiYWNrOiBmdW5jdGlvbigpIHsgaWYgKCEtLWNvdW50ZXIpIHJldHVybiB0cnVlO30gfSB9
KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMCk7Cit9CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1tdWx0aXBsZS1pbnN0YW5jZXMu
anMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1tdWx0aXBsZS1pbnN0YW5jZXMuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzEwMjY3OWE5ZDExYTFiZTgxMzA4ZDYxN2I5N2RhYzlhYTdmMzBlZQotLS0g
L2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLW11bHRpcGxlLWlu
c3RhbmNlcy5qcwpAQCAtMCwwICsxLDMyIEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWls
ZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAg
IGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6
IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oInRo
cm93IikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oInRhZyIsIDApCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oInRocm93IiwgeyBwYXJhbXM6
IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAg
ICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKwor
ICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgeworICAgICAgICBsZXQgaW5zdCA9
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworICAgICAgICBpbnN0LmV4cG9ydHMu
dGhyb3coKTsKKyAgICB9CisgICAgeworICAgICAgICBsZXQgaW5zdCA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUpOworICAgICAgICBpbnN0LmV4cG9ydHMudGhyb3coKTsKKyAgICB9
Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtZGVs
ZWdhdGUuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtZGVsZWdhdGUu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYmIxMmE4ZWYyOTYyY2IxMWM5NDZkMGM1ZmQ4MGY0YTA2ZmRhNGM3OQot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXNpbXBsZS1k
ZWxlZ2F0ZS5qcwpAQCAtMCwwICsxLDEyNSBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVp
bGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK2Z1bmN0
aW9uIHRlc3RTaW1wbGVUaHJvd0RlbGVnYXRlKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRl
cigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIs
IDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAu
VHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMCkK
KyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0
KDIpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBj
b25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5z
dGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNz
ZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQg
d2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0
aW9uIHRlc3RUaHJvd0RlbGVnYXRlU2tpcCgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIo
KTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAw
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRy
eSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5UaHJv
dygwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkRlbGVnYXRlKDEpCisgICAgICAgICAgICAg
ICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisg
ICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAg
ICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5j
ZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCks
IDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQg
YmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdERlbGVnYXRlQ2FsbGVyKCkgeworICAg
IGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6
IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAg
ICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuQ2Fs
bCgxKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwyIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0p
CisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgi
dm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAg
ICAgICAgLkRlbGVnYXRlKDEpCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAg
ICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNh
dGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3Nz
aWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlRGVsZWdhdGVNZXJnZSgpeworIGNvbnN0
IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlv
bigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxs
IikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5U
cnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAg
ICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKwor
CisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVs
ZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5l
dyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisgICAgYXNzZXJ0LmVxKGluc3Rh
bmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKK30KKwordGVzdFNpbXBsZVRocm93RGVsZWdhdGUoKTsK
K3Rlc3RUaHJvd0RlbGVnYXRlU2tpcCgpOwordGVzdERlbGVnYXRlQ2FsbGVyKCk7Cit0ZXN0U2lt
cGxlRGVsZWdhdGVNZXJnZSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNl
cHRpb24tc2ltcGxlLXRocm93LWNhdGNoLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRp
b24tc2ltcGxlLXRocm93LWNhdGNoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwOTc0MDE1ZjczMDFkZWJlNmI0
ZDY2MmUzNWIwOTJmZTQ4ZTBjNzYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3Ry
ZXNzL2V4Y2VwdGlvbi1zaW1wbGUtdGhyb3ctY2F0Y2guanMKQEAgLTAsMCArMSw0MTQgQEAKK2lt
cG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJv
bSAnLi4vYXNzZXJ0LmpzJworCitmdW5jdGlvbiB0ZXN0U2ltcGxlVHJ5Q2F0Y2goKXsKKyAgICBj
b25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVu
Y3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBb
XX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAg
ICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0p
CisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgp
LmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
KyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsg
fSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGlu
ZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUi
KTsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZVRyeUNhdGNoQWxsKCl7CisgICAgY29uc3QgYiA9
IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCku
RW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQo
KQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2Vw
dGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAg
ICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAg
ICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgp
OworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBj
b25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisK
KyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBl
eHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30K
KworZnVuY3Rpb24gdGVzdENhbGxUcnlDYXRjaCgpeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRl
cigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIs
IDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5Ucnko
ImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQor
ICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuRW5kKCkKKworICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsMiIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwg
eyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNo
aW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJs
ZSIpOworfQorCitmdW5jdGlvbiB0ZXN0Q2FsbFRyeUNhdGNoQWxsKCl7CisgICAgY29uc3QgYiA9
IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCku
RW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQo
KQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2Vw
dGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAg
ICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgxKQorICAgICAgICAgICAg
LkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgIC5FbmQoKQorCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwyIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRocm93KDApCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgp
LCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxk
IGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVUcnlDYXRjaFZhbHVlKCl7
CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBh
cmFtczogWyJpMzIiXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIp
CisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5J
MzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkNhdGNo
KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5k
KCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5j
ZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQu
ZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNt
IHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24g
dGVzdENhbGxUcnlDYXRjaFZhbHVlKCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Cisg
ICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAw
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJp
MzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDEpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisKKyAgICAgICAgICAgIC5GdW5j
dGlvbigiY2FsbDIiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgp
LmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
KyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsg
fSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGlu
ZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUi
KTsKK30KKworZnVuY3Rpb24gdGVzdFN0YWNrVHJ5Q2F0Y2goKXsKKyAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbImkzMiJdfSkuRW5k
KCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNl
cHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAg
ICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAg
ICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLy8gVE9ETzogYnVpbGRlciBlcnJvcgor
ICAgICAgICAgICAgLlRyeSh7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KQorICAgICAg
ICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3Qg
YmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBK
UyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdExpdmVBZnRlclRyeUNh
dGNoKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1
cmUoeyBwYXJhbXM6IFtdIH0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2Fs
bCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtd
LCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAg
ICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAg
ICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwg
eyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNo
aW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJs
ZSIpOworfQorCitmdW5jdGlvbiB0ZXN0TGl2ZUFmdGVyVHJ5Q2F0Y2hBbGwoKSB7CisgICAgY29u
c3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW10g
fSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAg
IC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lk
IikKKyAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgLkNhdGNo
QWxsKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAg
IGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBp
bnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBh
c3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRl
ZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVu
Y3Rpb24gdGVzdFVuaWZ5VHJ5Q2F0Y2hDYXRjaCgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxk
ZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0p
CisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikK
KyAgICAgICAgICAgICAgICAgICAgLlRocm93KDEpCisgICAgICAgICAgICAgICAgLkNhdGNoKDAp
CisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5DYXRj
aCgxKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3Qg
YmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBK
UyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFVuaWZ5VHJ5Q2F0Y2hD
YXRjaEFsbCgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5F
bmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkKKyAg
ICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pCisgICAgICAgICAgICAuU2lnbmF0
dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNv
ZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJp
MzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAg
LlRocm93KDEpCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAg
IC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwg
eyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNo
aW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJs
ZSIpOworfQorCitmdW5jdGlvbiB0ZXN0VW5pZnlUcnlOb1Rocm93KCkgeworICAgIGNvbnN0IGIg
PSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBh
cmFtczogW10gfSkKKyAgICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2Fs
bCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAu
VHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAg
ICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAg
ICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKwor
ICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3Rh
bmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhy
b3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RVbmlm
eVRyeU5vQ2F0Y2goKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBl
KCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigp
CisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAgICAgLlNp
Z25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FeHBvcnQo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAgICAg
IC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0
OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAg
ICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCku
Z2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwor
ICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9
KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5n
IGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIp
OworfQorCitmdW5jdGlvbiB0ZXN0TmVzdGVkQ2F0Y2ggKCl7CisgICAgY29uc3QgYiA9IG5ldyBC
dWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFsiaTMyIl0s
IHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAg
ICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAg
ICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAgICAgLkNh
dGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCkKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
Y29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKworICAg
IGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRp
b24sICJ3YXNtIGV4Y2VwdGlvbiIpOworfQorCit0ZXN0U2ltcGxlVHJ5Q2F0Y2goKTsKK3Rlc3RT
aW1wbGVUcnlDYXRjaEFsbCgpOwordGVzdFNpbXBsZVRyeUNhdGNoVmFsdWUoKTsKK3Rlc3RDYWxs
VHJ5Q2F0Y2goKTsKK3Rlc3RDYWxsVHJ5Q2F0Y2hBbGwoKTsKK3Rlc3RDYWxsVHJ5Q2F0Y2hWYWx1
ZSgpOwordGVzdExpdmVBZnRlclRyeUNhdGNoKCk7Cit0ZXN0TGl2ZUFmdGVyVHJ5Q2F0Y2hBbGwo
KTsKK3Rlc3RVbmlmeVRyeUNhdGNoQ2F0Y2goKTsKK3Rlc3RVbmlmeVRyeUNhdGNoQ2F0Y2hBbGwo
KTsKK3Rlc3RVbmlmeVRyeU5vVGhyb3coKTsKK3Rlc3RVbmlmeVRyeU5vQ2F0Y2goKTsKKworLy8g
VE9ETzogZW5hYmxlIHRoaXMgdGVzdAorLy8gdGVzdFN0YWNrVHJ5Q2F0Y2goKTsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20t
Y2F0Y2hhbGwtcmV0aHJvdy5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93
bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwtcmV0aHJvdy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYjRjMzBk
OTFhYzZiYTM3NTQxMDQ3YmM2NTIzZmFiYWYxMWJiNDJkCi0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS1jYXRjaGFs
bC1yZXRocm93LmpzCkBAIC0wLDAgKzEsNDEgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1
aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7Cisg
ICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAg
LkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAu
RXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
YWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIi
KQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEp
CisgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQor
ICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3Nl
bWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1
bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2Uu
ZXhwb3J0cy5mb287CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cg
bmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQu
dGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKwor
ICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbXSB9KTsKKworICAg
IGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRp
b24pOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3du
LWZyb20tanMtdG8td2FzbS1jYXRjaGFsbC5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0
aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzdlNGE0
NGIxZmVjNDE2ZDM4NGM3OTQ5OWY5OGJmOTQ2NjljYjY0YwotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hh
bGwuanMKQEAgLTAsMCArMSw0MCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5q
cycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25z
dCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0
KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZv
aWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRp
b24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1
bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7
IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAg
ICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAg
ICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAg
Y29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAg
ICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAgICBmdW5jdGlvbiBjYWxsYmFj
aygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsK
KyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRj
aF9hbGxpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBv
c3NpYmxlIik7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczog
W10gfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRj
aF9hbGxpbmcgYW4gb3BhcXVlIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3Nz
aWJsZSIpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhy
b3duLWZyb20tanMtdG8td2FzbS5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRo
cm93bi1mcm9tLWpzLXRvLXdhc20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjUwMTkyMDBjOWZkOWYyZjYxZmFi
NDM4NzQwNmU4NjZiYzMyZjc2OQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJl
c3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20uanMKQEAgLTAsMCArMSw0MCBAQAor
aW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBm
cm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAg
ICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAi
Y2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6
IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAg
ICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAg
ICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHko
KS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7
CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7
IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9y
dHMuZm9vOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBX
ZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGlu
c3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcg
dGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7CisKKyAgICB0YWcgPSBuZXcgV2Vi
QXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGlu
c3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdXQtb2Ytd2FzbS5qcyBi
L0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdXQtb2Ytd2FzbS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hOGUzMzAxZTNiODAwM2E1MmEyZGU2MzM1ODY3NjlmZjg5MDgyZjhlCi0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLW91dC1vZi13
YXNtLmpzCkBAIC0wLDAgKzEsMjQgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIu
anMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29u
c3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW10g
fSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAg
IC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1i
bHkuRXhjZXB0aW9uKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0
aW9uLXRocm93bi1vdmVyLXdhc20uanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10
aHJvd24tb3Zlci13YXNtLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5ZjRjMmU5MDMxZTllZDQ5ZGU2OTcxYzk3
MWI2NDBiZWUyNGFmYzMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4
Y2VwdGlvbi10aHJvd24tb3Zlci13YXNtLmpzCkBAIC0wLDAgKzEsMzAgQEAKK2ltcG9ydCBCdWls
ZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNz
ZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCku
RW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5F
bmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgp
CisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0
aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAg
ICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7Cisg
ICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNv
bnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAg
ICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oaW5zdGFuY2UuZXhwb3J0cy5mb28s
IFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwg
V2ViQXNzZW1ibHkuRXhjZXB0aW9uLCAid2FzbSBleGNlcHRpb24iKTsKK30KZGlmZiAtLWdpdCBh
L0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRyYXAuanMgYi9KU1Rlc3RzL3dhc20vc3Ry
ZXNzL2V4Y2VwdGlvbi10cmFwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmZGY1M2ViNTA1YzM5MGI0MGJmMTUz
NTViNmQ1MzcyZTU2MGU5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNz
L2V4Y2VwdGlvbi10cmFwLmpzCkBAIC0wLDAgKzEsMTM0IEBACitpbXBvcnQgQnVpbGRlciBmcm9t
ICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycK
KworZnVuY3Rpb24gdGVzdENhbm5vdENhdGNoVW5yZWFjaGFibGUoKSB7CisgICAgY29uc3QgYiA9
IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCku
RW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxs
IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMy
IikKKyAgICAgICAgICAgICAgICAgICAgLlVucmVhY2hhYmxlKCkKKyAgICAgICAgICAgICAgICAu
Q2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAg
Y29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5l
eHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgIlVucmVhY2hhYmxlIGNvZGUg
c2hvdWxkIG5vdCBiZSBleGVjdXRlZCIpOworfQorCitmdW5jdGlvbiB0ZXN0Q2Fubm90Q2F0Y2hP
T0IoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLk1lbW9yeSgpCisgICAgICAgICAg
ICAuSW5pdGlhbE1heFBhZ2VzKDAsIDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRXhwb3J0
KCkKKyAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAu
Q29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDog
ImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoMTAyNCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkxvYWQoMCwgMCkKKyAg
ICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3Qo
MSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNv
bnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0
YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworCisgICAgYXNzZXJ0LnRo
cm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgIk91
dCBvZiBib3VuZHMgbWVtb3J5IGFjY2VzcyIpOworfQorCitmdW5jdGlvbiB0ZXN0V2FzbUFQSVRo
cm93KCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikK
KyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNv
bnN0KDApCisgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAg
LkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
Y29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRl
eHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAg
IG5ldyBXZWJBc3NlbWJseS5HbG9iYWwoeworICAgICAgICAgICAgdmFsdWU6ICdhbnlmdW5jJwor
ICAgICAgICB9LCB7fSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMu
Y2FsbCgpLCAxKTsKK30KK2Z1bmN0aW9uIHRlc3RKU0NhdGNoQW5kUmV0aHJvdygpIHsKKyAgICBj
b25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1w
b3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDog
InZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbImkz
MiJdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAg
ICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJFcXooKQor
ICAgICAgICAgICAgICAgICAgICAuSWYoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAgICAg
LlVucmVhY2hhYmxlKCkKKyAgICAgICAgICAgICAgICAgICAgLkVsc2UoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisg
ICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBi
LldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3Rh
bmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGZ1bmN0aW9uIGNh
bGxiYWNrKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaW5zdGFuY2UuZXhwb3J0cy5j
YWxsKDApOworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMu
Y2FsbCgxKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAiVW5yZWFjaGFibGUgY29kZSBzaG91
bGQgbm90IGJlIGV4ZWN1dGVkIik7Cit9CisKK3Rlc3RDYW5ub3RDYXRjaFVucmVhY2hhYmxlKCk7
Cit0ZXN0Q2Fubm90Q2F0Y2hPT0IoKTsKK3Rlc3RXYXNtQVBJVGhyb3coKTsKK3Rlc3RKU0NhdGNo
QW5kUmV0aHJvdygpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LWZy
b20tY2F0Y2gtdG8tY2F0Y2guanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ctZnJvbS1j
YXRjaC10by1jYXRjaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZGZkYTZkOGE2OTExODRkOTk5NTU1ZDE4ZThk
OWVlNTFiZTRhZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRo
cm93LWZyb20tY2F0Y2gtdG8tY2F0Y2guanMKQEAgLTAsMCArMSw0NSBAQAoraW1wb3J0IEJ1aWxk
ZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3Nl
cnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5F
bmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7
IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVu
ZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkK
KyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRp
b24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAg
ICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAg
IC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuQ2F0
Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuUmV0
aHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwg
eyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBv
cnRzLmZvbzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcg
V2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAgIH0KKworICAgIGFzc2VydC5lcShp
bnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHku
VGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4
cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVz
dHMvd2FzbS9zdHJlc3MvcmV0aHJvdy10by1jYXRjaC5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mv
cmV0aHJvdy10by1jYXRjaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjFjYmE0M2RjYjViNDRkOWFlNjRmZGM1
NzlhMGM4YTY1NTAzZjdkCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9y
ZXRocm93LXRvLWNhdGNoLmpzCkBAIC0wLDAgKzEsODggQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20g
Jy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJwor
Cit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAg
ICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6
IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAg
IC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28i
LCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5
KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgw
KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkNhdGNoQWxsKCkK
KyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuUmV0aHJvdygw
KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0
KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAg
IGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250
ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZv
bzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcgV2ViQXNz
ZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5j
ZS5leHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsg
cGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMu
Y2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcg
QnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlv
bigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5k
KCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25h
dHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNh
bGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgIC5U
cnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25z
dCgyKQorICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAg
IGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisg
ICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworCisgICAgZnVuY3Rpb24gY2FsbGJh
Y2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7
CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKKwor
ICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbXSB9KTsKKworICAg
IGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRp
b24pOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LXRvLWRlbGVn
YXRlLXRvLWNhdGNoLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LXRvLWRlbGVnYXRl
LXRvLWNhdGNoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwNDc5YzBjZWEyM2I2MGUzOTU1YTFiNTE3NDkxZmI0
Zjc2ZWU3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ct
dG8tZGVsZWdhdGUtdG8tY2F0Y2guanMKQEAgLTAsMCArMSwyNTkgQEAKK2ltcG9ydCBCdWlsZGVy
IGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0
LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5k
KCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNvbnRleHQiLCAi
Y2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAuRXhj
ZXB0aW9uKCJjb250ZXh0IiwgInRhZyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0
KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMSkKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2Fs
bCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikK
KyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJp
MzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAuUmV0aHJvdygwKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAg
ICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5DYXRjaCgxKQorICAgICAgICAgICAgICAgIC5J
MzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAg
ICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90
aGVyVGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAg
IGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250
ZXh0OiB7IGNhbGxiYWNrLCB0YWc6IG90aGVyVGFnIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0
YW5jZS5leHBvcnRzLmZvbzsKKyAgICBsZXQgYXJncyA9IFtdOworCisgICAgZnVuY3Rpb24gY2Fs
bGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBh
cmdzKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMp
OworCisgICAgdGFnID0gb3RoZXJUYWc7CisgICAgYXJncyA9IFsxMDBdOworCisgICAgbGV0IGV4
biA9IGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNl
cHRpb24pOworICAgIGFzc2VydC5lcShleG4uZ2V0QXJnKHRhZywgMCksIDEwMCk7Cit9CisKK3sK
KyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAg
ICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImNv
bnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogInZvaWQiIH0pCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCku
U2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlv
bigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAxKQorICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJh
bXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAg
ICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisg
ICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAu
Q2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAg
ICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3Qo
MikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5SZXRocm93KDEpCisgICAgICAgICAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkRlbGVnYXRl
KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdlYkFzc2VtYmx5LlRh
Zyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFz
c2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrLCB0YWc6IG90aGVy
VGFnIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKyAgICBsZXQg
YXJncyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIGxldCBleG4g
PSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7CisgICAgICAgIHRhZyA9IG90
aGVyVGFnOworICAgICAgICBhcmdzID0gWzEwMF07CisgICAgICAgIHRocm93IGV4bjsKKyAgICB9
CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHku
RXhjZXB0aW9uKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIu
VHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
b250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAg
ICAgICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJ0YWciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0
OiAidm9pZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisg
ICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAg
ICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZv
byIsIDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5U
cnkoImkzMiIpCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAg
ICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAg
ICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNo
QWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLlJldGhyb3coMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMSkKKyAgICAgICAg
ICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29u
c3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgb3RoZXJUYWcgPSBuZXcgV2ViQXNzZW1i
bHkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIiXX0pCisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2ssIHRhZzog
b3RoZXJUYWcgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworICAg
IGxldCBhcmdzID0gW107CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgbGV0
IGV4biA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBhcmdzKTsKKyAgICAgICAgdGFn
ID0gb3RoZXJUYWc7CisgICAgICAgIGFyZ3MgPSBbMTAwXTsKKyAgICAgICAgdGhyb3cgZXhuOwor
ICAgIH0KKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3Nl
bWJseS5FeGNlcHRpb24pOworfQorCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsK
KyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5j
dGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkK
KyAgICAgICAgICAgIC5FeGNlcHRpb24oImNvbnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMy
Il0sIHJldDogInZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5F
bmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgp
CisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0
aW9uKCJmb28iLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAg
ICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQor
ICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgICAg
IC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAgICAgICAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQorICAgICAgICAgICAgLkNhdGNoKDApCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKwor
CisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVs
ZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgb3RoZXJUYWcgPSBuZXcg
V2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIiXX0pCisgICAgY29uc3QgaW5zdGFu
Y2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJh
Y2ssIHRhZzogb3RoZXJUYWcgfX0pOworCisgICAgbGV0IHRhZyA9IG90aGVyVGFnOworICAgIGxl
dCBhcmdzID0gWzEwMF07CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgbGV0
IGV4biA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBhcmdzKTsKKyAgICAgICAgdGhy
b3cgZXhuOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwg
MTAwKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0
IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAg
LkV4Y2VwdGlvbigiY29udGV4dCIsICJ0YWciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAidm9p
ZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAg
IC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDEp
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkz
MiIpCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRy
eSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3Qo
MSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLlJl
dGhyb3coMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5D
YXRjaCgxKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9
IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7
IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrLCB0YWc6IG90aGVyVGFn
IH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKyAgICBsZXQgYXJn
cyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIGxldCBleG4gPSBu
ZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7CisgICAgICAgIHRhZyA9IG90aGVy
VGFnOworICAgICAgICBhcmdzID0gWzEwMF07CisgICAgICAgIHRocm93IGV4bjsKKyAgICB9CisK
KyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMpOworfQpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9zaW1wbGUtZXhwb3J0LWV4Y2VwdGlvbi5qcyBiL0pTVGVz
dHMvd2FzbS9zdHJlc3Mvc2ltcGxlLWV4cG9ydC1leGNlcHRpb24uanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmI5
Njk5OTc1M2QzYTRhZDA4NmEwZWNlNTg5ODI4NGY4ZmNiOGI3MAotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvd2FzbS9zdHJlc3Mvc2ltcGxlLWV4cG9ydC1leGNlcHRpb24uanMKQEAgLTAsMCAr
MSwxNiBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFz
IGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxk
ZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbImkzMiJdfSkuRW5kKCkKKyAg
ICAgICAgLkV4cG9ydCgpLkV4Y2VwdGlvbigiZm9vIiwgMCkuRW5kKCkKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlKTsKKworICAgIGFzc2VydC5pbnN0YW5jZW9mKGluc3RhbmNlLmV4cG9y
dHMuZm9vLCBXZWJBc3NlbWJseS5UYWcpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4
L0xJQ0VOU0UgYi9KU1Rlc3RzL3dhc20vdjgvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41M2Q5YzQ3ZTMz
YzE4MjkyNzQxZjFlNDA4OTBjOGZlMmQ2Mjk5NjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0
cy93YXNtL3Y4L0xJQ0VOU0UKQEAgLTAsMCArMSw2MiBAQAorVGhpcyBsaWNlbnNlIGFwcGxpZXMg
dG8gYWxsIHBhcnRzIG9mIFY4IHRoYXQgYXJlIG5vdCBleHRlcm5hbGx5CittYWludGFpbmVkIGxp
YnJhcmllcy4gIFRoZSBleHRlcm5hbGx5IG1haW50YWluZWQgbGlicmFyaWVzIHVzZWQgYnkgVjgK
K2FyZToKKworICAtIFBDUkUgdGVzdCBzdWl0ZSwgbG9jYXRlZCBpbgorICAgIHRlc3QvbWpzdW5p
dC90aGlyZF9wYXJ0eS9yZWdleHAtcGNyZS9yZWdleHAtcGNyZS5qcy4gIFRoaXMgaXMgYmFzZWQg
b24gdGhlCisgICAgdGVzdCBzdWl0ZSBmcm9tIFBDUkUtNy4zLCB3aGljaCBpcyBjb3B5cmlnaHRl
ZCBieSB0aGUgVW5pdmVyc2l0eQorICAgIG9mIENhbWJyaWRnZSBhbmQgR29vZ2xlLCBJbmMuICBU
aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQorICAgIGFyZSBlbWJlZGRlZCBpbiByZWdl
eHAtcGNyZS5qcy4KKworICAtIExheW91dCB0ZXN0cywgbG9jYXRlZCBpbiB0ZXN0L21qc3VuaXQv
dGhpcmRfcGFydHkvb2JqZWN0LWtleXMuICBUaGVzZSBhcmUKKyAgICBiYXNlZCBvbiBsYXlvdXQg
dGVzdHMgZnJvbSB3ZWJraXQub3JnIHdoaWNoIGFyZSBjb3B5cmlnaHRlZCBieQorICAgIEFwcGxl
IENvbXB1dGVyLCBJbmMuIGFuZCByZWxlYXNlZCB1bmRlciBhIDMtY2xhdXNlIEJTRCBsaWNlbnNl
LgorCisgIC0gU3Ryb25ndGFsayBhc3NlbWJsZXIsIHRoZSBiYXNpcyBvZiB0aGUgZmlsZXMgYXNz
ZW1ibGVyLWFybS1pbmwuaCwKKyAgICBhc3NlbWJsZXItYXJtLmNjLCBhc3NlbWJsZXItYXJtLmgs
IGFzc2VtYmxlci1pYTMyLWlubC5oLAorICAgIGFzc2VtYmxlci1pYTMyLmNjLCBhc3NlbWJsZXIt
aWEzMi5oLCBhc3NlbWJsZXIteDY0LWlubC5oLAorICAgIGFzc2VtYmxlci14NjQuY2MsIGFzc2Vt
Ymxlci14NjQuaCwgYXNzZW1ibGVyLW1pcHMtaW5sLmgsCisgICAgYXNzZW1ibGVyLW1pcHMuY2Ms
IGFzc2VtYmxlci1taXBzLmgsIGFzc2VtYmxlci5jYyBhbmQgYXNzZW1ibGVyLmguCisgICAgVGhp
cyBjb2RlIGlzIGNvcHlyaWdodGVkIGJ5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBhbmQgcmVsZWFz
ZWQKKyAgICB1bmRlciBhIDMtY2xhdXNlIEJTRCBsaWNlbnNlLgorCisgIC0gVmFsZ3JpbmQgY2xp
ZW50IEFQSSBoZWFkZXIsIGxvY2F0ZWQgYXQgc3JjL3RoaXJkX3BhcnR5L3ZhbGdyaW5kL3ZhbGdy
aW5kLmgKKyAgICBUaGlzIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBCU0QgbGljZW5zZS4KKworICAt
IFRoZSBXYXNtIEMvQysrIEFQSSBoZWFkZXJzLCBsb2NhdGVkIGF0IHRoaXJkX3BhcnR5L3dhc20t
YXBpL3dhc20ue2gsaGh9CisgICAgVGhpcyBpcyByZWxlYXNlZCB1bmRlciB0aGUgQXBhY2hlIGxp
Y2Vuc2UuIFRoZSBBUEkncyB1cHN0cmVhbSBwcm90b3R5cGUKKyAgICBpbXBsZW1lbnRhdGlvbiBh
bHNvIGZvcm1lZCB0aGUgYmFzaXMgb2YgVjgncyBpbXBsZW1lbnRhdGlvbiBpbgorICAgIHNyYy93
YXNtL2MtYXBpLmNjLgorCitUaGVzZSBsaWJyYXJpZXMgaGF2ZSB0aGVpciBvd24gbGljZW5zZXM7
IHdlIHJlY29tbWVuZCB5b3UgcmVhZCB0aGVtLAorYXMgdGhlaXIgdGVybXMgbWF5IGRpZmZlciBm
cm9tIHRoZSB0ZXJtcyBiZWxvdy4KKworRnVydGhlciBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBi
ZSBmb3VuZCBpbiBMSUNFTlNFIGZpbGVzIGxvY2F0ZWQgaW4gCitzdWItZGlyZWN0b3JpZXMuCisK
K0NvcHlyaWdodCAyMDE0LCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgICB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWFwaS5qcyBi
L0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWFwaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWQ1MzY4MTQ1
NmM2NWVjODY3MThiODVlMWFmZDZmYzBmZDg5NzY1Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0
cy93YXNtL3Y4L2V4Y2VwdGlvbnMtYXBpLmpzCkBAIC0wLDAgKzEsMjMyIEBACisvLyBDb3B5cmln
aHQgMjAyMSB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6
IC0tZXhwZXJpbWVudGFsLXdhc20tZWggLS1leHBlcmltZW50YWwtd2FzbS1yZWZ0eXBlcworCits
b2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0KCkg
eworCisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuVGFnKCksIFR5cGVFcnJv
ciwKKyAgICAgIC9leHBlY3RzIHRoZSB0YWcgdHlwZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQvKTsK
KyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5UYWcoe30pLCBUeXBlRXJyb3Is
CisgICAgICAvZXhwZWN0cyBhIHRhZyB0eXBlIHdpdGggdGhlICdwYXJhbWV0ZXJzJyBwcm9wZXJ0
eS8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVy
czogWydmb28nXX0pLCBUeXBlRXJyb3IsCisgICAgICAvZXhwZWN0cyB0aGUgJ3BhcmFtZXRlcnMn
IGZpZWxkIG9mIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIHNlcXVlbmNlIG9mIFdlYkFzc2Vt
Ymx5IHZhbHVlIHR5cGVzLyk7CisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
VGFnKHtwYXJhbWV0ZXJzOiB7fX0pLCBUeXBlRXJyb3IsCisgICAgICAvVHlwZSBlcnJvci8pOwor
CisgIGxldCBqc19leGNlcHRfaTMyID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczog
WydpMzInXX0pOworICBsZXQganNfZXhjZXB0X3YgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJh
bWV0ZXJzOiBbXX0pOworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOwor
ICBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X2kpOworCisgIGFzc2Vy
dERvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDoganNfZXhj
ZXB0X2kzMiB9fSkpOworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3Rh
bnRpYXRlKHsgbTogeyBleDoganNfZXhjZXB0X3YgfX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3Is
CisgICAgICAvaW1wb3J0ZWQgVGFnIG06ZXggc2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIGlt
cG9ydGVkIFdlYkFzc2VtYmx5IFRhZydzIHNpZ25hdHVyZS8pOworICBhc3NlcnRUaHJvd3MoCisg
ICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDoganNfZXhjZXB0X3YgfX0p
LCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvaW1wb3J0ZWQgVGFnIG06ZXggc2lnbmF0
dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIGltcG9ydGVkIFdlYkFzc2VtYmx5IFRhZydzIHNpZ25hdHVy
ZS8pOworICBhc3NlcnRUcnVlKGpzX2V4Y2VwdF9pMzIudG9TdHJpbmcoKSA9PSAiW29iamVjdCBX
ZWJBc3NlbWJseS5UYWddIik7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEV4cG9ydCgpIHsKKyAg
bGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1
aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwg
a0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRp
YXRlKCk7CisKKyAgYXNzZXJ0VHJ1ZShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh
bGwoaW5zdGFuY2UuZXhwb3J0cywgJ2V4JykpOworICBhc3NlcnRFcXVhbHMoIm9iamVjdCIsIHR5
cGVvZiBpbnN0YW5jZS5leHBvcnRzLmV4KTsKKyAgYXNzZXJ0SW5zdGFuY2VvZihpbnN0YW5jZS5l
eHBvcnRzLmV4LCBXZWJBc3NlbWJseS5UYWcpOworICBhc3NlcnRTYW1lKGluc3RhbmNlLmV4cG9y
dHMuZXguY29uc3RydWN0b3IsIFdlYkFzc2VtYmx5LlRhZyk7Cit9KSgpOworCisoZnVuY3Rpb24g
VGVzdEltcG9ydEV4cG9ydCgpIHsKKworICBsZXQganNfZXhfaTMyID0gbmV3IFdlYkFzc2VtYmx5
LlRhZyh7cGFyYW1ldGVyczogWydpMzInXX0pOworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9k
dWxlQnVpbGRlcigpOworICBsZXQgaW5kZXggPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwg
ImV4Iiwga1NpZ192X2kpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJu
YWxUYWcsIGluZGV4KTsKKworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsg
bTogeyBleDoganNfZXhfaTMyIH19KTsKKyAgbGV0IHJlcyA9IGluc3RhbmNlLmV4cG9ydHMuZXg7
CisgIGFzc2VydEVxdWFscyhyZXMsIGpzX2V4X2kzMik7Cit9KSgpOworCisKKyhmdW5jdGlvbiBU
ZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoKSB7CisgIC8vIENoZWNrIGVycm9ycy4KKyAgbGV0IGpz
X3RhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFtdfSk7CisgIGFzc2VydFRo
cm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKDApLCBUeXBlRXJyb3IsCisgICAg
ICAvV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlIGZpcnN0IGFy
Z3VtZW50IHRvIGJlIGEgV2ViQXNzZW1ibHkuVGFnLyk7CisgIGFzc2VydFRocm93cygoKSA9PiBu
ZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHt9KSwgVHlwZUVycm9yLAorICAgICAgL1dlYkFzc2Vt
Ymx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciBleHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBi
ZSBhIFdlYkFzc2VtYmx5LlRhZy8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gV2ViQXNzZW1ibHku
RXhjZXB0aW9uKGpzX3RhZyksIFR5cGVFcnJvciwKKyAgICAgIC9jYWxsaW5nIFdlYkFzc2VtYmx5
LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciB3aXRob3V0IG5ldyBpcyBpbnZhbGlkLyk7CisgIGxldCBq
c19leGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKGpzX3RhZywgW10pOworCisg
IC8vIENoZWNrIHByb3RvdHlwZS4KKyAgYXNzZXJ0U2FtZShXZWJBc3NlbWJseS5FeGNlcHRpb24u
cHJvdG90eXBlLCBqc19leGNlcHRpb24uX19wcm90b19fKTsKKyAgYXNzZXJ0VHJ1ZShqc19leGNl
cHRpb24gaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworCisgIC8vIENoZWNrIHBy
b3RvdHlwZSBvZiBhIHRocm93biBleGNlcHRpb24uCisgIGxldCBidWlsZGVyID0gbmV3IFdhc21N
b2R1bGVCdWlsZGVyKCk7CisgIGxldCB3YXNtX3RhZyA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRC
b2R5KFtrRXhwclRocm93LCB3YXNtX3RhZ10pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNl
ID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICB0cnkgeworICAgIGluc3RhbmNlLmV4cG9ydHMu
dGhyb3coKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGFzc2VydFRydWUoZSBpbnN0YW5jZW9mIFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIH0KK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhjZXB0
aW9uQ29uc3RydWN0b3JXaXRoUGF5bG9hZCgpIHsKKyAgbGV0IHRhZyA9IG5ldyBXZWJBc3NlbWJs
eS5UYWcoCisgICAgICB7cGFyYW1ldGVyczogWydpMzInLCAnZjMyJywgJ2k2NCcsICdmNjQnLCAn
ZXh0ZXJucmVmJ119KTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5FeGNl
cHRpb24oCisgICAgICB0YWcsIFsxbiwgMiwgM24sIDQsIHt9XSksIFR5cGVFcnJvcik7CisgIGFz
c2VydERvZXNOb3RUaHJvdygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgWzMs
IDQsIDVuLCA2LCB7fV0pKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0Q2F0Y2hKU0V4Y2VwdGlv
bigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGpz
X3RhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFtdfSk7CisgIGxldCBqc19m
dW5jX2luZGV4ID0gYnVpbGRlci5hZGRJbXBvcnQoJ20nLCAnanNfZnVuYycsIGtTaWdfdl92KTsK
KyAgbGV0IGpzX3RhZ19pbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAianNfdGFn
Iiwga1NpZ192X3YpOworICBsZXQgdGFnX2luZGV4ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3Yp
OworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgid2FzbV90YWciLCBrRXh0ZXJuYWxUYWcsIHRh
Z19pbmRleCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoIiwga1NpZ19pX3YpCisgICAg
ICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAga0V4cHJD
YWxsRnVuY3Rpb24sIGpzX2Z1bmNfaW5kZXgsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDAsCisg
ICAgICAgIGtFeHByQ2F0Y2gsIGpzX3RhZ19pbmRleCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwg
MSwKKyAgICAgICAga0V4cHJDYXRjaCwgdGFnX2luZGV4LAorICAgICAgICBrRXhwckkzMkNvbnN0
LCAyLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgdGFn
OworICBmdW5jdGlvbiBqc19mdW5jKCkgeworICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNl
cHRpb24odGFnLCBbXSk7CisgIH0KKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0
ZSh7bToge2pzX2Z1bmMsIGpzX3RhZ319KTsKKyAgdGFnID0ganNfdGFnOworICBhc3NlcnRFcXVh
bHMoMSwgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaCgpKTsKKyAgdGFnID0gaW5zdGFuY2UuZXhwb3J0
cy53YXNtX3RhZzsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3RhbmNlLmV4cG9ydHMuY2F0Y2goKSk7
Cit9KSgpOworCitmdW5jdGlvbiBUZXN0Q2F0Y2hKUyh0eXBlc19zdHIsIHR5cGVzLCB2YWx1ZXMp
IHsKKyAgLy8gQ3JlYXRlIGEgSlMgZXhjZXB0aW9uLCBjYXRjaCBpdCBpbiB3YXNtIGFuZCBjaGVj
ayB0aGUgdW5wYWNrZWQgdmFsdWUocykuCisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBqc190YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJz
OiB0eXBlc19zdHJ9KTsKKyAgbGV0IGpzX2Z1bmNfaW5kZXggPSBidWlsZGVyLmFkZEltcG9ydCgn
bScsICdqc19mdW5jJywga1NpZ192X3YpOworICBsZXQgc2lnMSA9IG1ha2VTaWcodHlwZXMsIFtd
KTsKKyAgbGV0IHNpZzIgPSBtYWtlU2lnKFtdLCB0eXBlcyk7CisgIGxldCBqc190YWdfaW5kZXgg
PSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImpzX3RhZyIsIHNpZzEpOworICBsZXQgdGFn
X2luZGV4ID0gYnVpbGRlci5hZGRUYWcoc2lnMSk7CisgIGxldCByZXR1cm5fdHlwZSA9IGJ1aWxk
ZXIuYWRkVHlwZShzaWcyKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoIndhc21fdGFnIiwg
a0V4dGVybmFsVGFnLCB0YWdfaW5kZXgpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaCIs
IHNpZzIpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCByZXR1cm5fdHlwZSwK
KyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGpzX2Z1bmNfaW5kZXgsCisgICAgICAgIGtFeHBy
VW5yZWFjaGFibGUsCisgICAgICAgIGtFeHByQ2F0Y2gsIGpzX3RhZ19pbmRleCwKKyAgICAgICAg
a0V4cHJDYXRjaCwgdGFnX2luZGV4LAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0
RnVuYygpOworICBsZXQgZXhjZXB0aW9uOworICBmdW5jdGlvbiBqc19mdW5jKCkgeworICAgIHRo
cm93IGV4Y2VwdGlvbjsKKyAgfQorICBsZXQgZXhwZWN0ZWQgPSB2YWx1ZXMubGVuZ3RoID09IDEg
PyB2YWx1ZXNbMF0gOiB2YWx1ZXM7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlh
dGUoe206IHtqc19mdW5jLCBqc190YWd9fSk7CisgIGV4Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJs
eS5FeGNlcHRpb24oanNfdGFnLCB2YWx1ZXMpOworICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGlu
c3RhbmNlLmV4cG9ydHMuY2F0Y2goKSk7CisgIGV4Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJseS5F
eGNlcHRpb24oaW5zdGFuY2UuZXhwb3J0cy53YXNtX3RhZywgdmFsdWVzKTsKKyAgYXNzZXJ0RXF1
YWxzKGV4cGVjdGVkLCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoKCkpOworfQorCisoZnVuY3Rpb24g
VGVzdENhdGNoSlNFeGNlcHRpb25XaXRoUGF5bG9hZCgpIHsKKyAgVGVzdENhdGNoSlMoWydpMzIn
XSwgW2tXYXNtSTMyXSwgWzFdKTsKKyAgVGVzdENhdGNoSlMoWydpNjQnXSwgW2tXYXNtSTY0XSwg
WzJuXSk7CisgIFRlc3RDYXRjaEpTKFsnZjMyJ10sIFtrV2FzbUYzMl0sIFszXSk7CisgIFRlc3RD
YXRjaEpTKFsnZjY0J10sIFtrV2FzbUY2NF0sIFs0XSk7CisgIFRlc3RDYXRjaEpTKFsnZXh0ZXJu
cmVmJ10sIFtrV2FzbUV4dGVyblJlZl0sIFt7dmFsdWU6IDV9XSk7CisgIFRlc3RDYXRjaEpTKFsn
aTMyJywgJ2k2NCcsICdmMzInLCAnZjY0JywgJ2V4dGVybnJlZiddLAorICAgICAgICAgICAgICBb
a1dhc21JMzIsIGtXYXNtSTY0LCBrV2FzbUYzMiwga1dhc21GNjQsIGtXYXNtRXh0ZXJuUmVmXSwK
KyAgICAgICAgICAgICAgWzYsIDduLCA4LCA5LCB7dmFsdWU6IDEwfV0pOworfSkoKTsKKworZnVu
Y3Rpb24gVGVzdEdldEFyZ0hlbHBlcih0eXBlc19zdHIsIHR5cGVzLCB2YWx1ZXMpIHsKKyAgbGV0
IHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IHR5cGVzX3N0cn0pOworICBs
ZXQgZXhjZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIHZhbHVlcyk7Cisg
IGZvciAoaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7ICsraSkgeworICAgIGFzc2VydEVxdWFscyhl
eGNlcHRpb24uZ2V0QXJnKHRhZywgaSksIHZhbHVlc1tpXSk7CisgIH0KKworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgc2lnID0gbWFrZVNpZyh0eXBlcywg
W10pOworICBsZXQgdGFnX2luZGV4ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJ0Iiwg
c2lnKTsKKyAgbGV0IGJvZHkgPSBbXTsKKyAgZm9yIChpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsg
KytpKSB7CisgICAgYm9keS5wdXNoKGtFeHByTG9jYWxHZXQsIGkpOworICB9CisgIGJvZHkucHVz
aChrRXhwclRocm93LCB0YWdfaW5kZXgpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvdyIs
IHNpZykKKyAgICAgIC5hZGRCb2R5KGJvZHkpLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNl
ID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7J20nOiB7J3QnOiB0YWd9fSk7CisgIHRyeSB7CisgICAg
aW5zdGFuY2UuZXhwb3J0cy50aHJvdyguLi52YWx1ZXMpOworICB9IGNhdGNoIChlKSB7CisgICAg
Zm9yIChpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgICBhc3NlcnRFcXVhbHMo
ZS5nZXRBcmcodGFnLCBpKSwgdmFsdWVzW2ldKTsKKyAgICB9CisgIH0KK30KKworKGZ1bmN0aW9u
IFRlc3RHZXRBcmcoKSB7CisgIC8vIENoZWNrIGVycm9ycy4KKyAgbGV0IHRhZyA9IG5ldyBXZWJB
c3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFsnaTMyJ119KTsKKyAgbGV0IGV4Y2VwdGlvbiA9IG5l
dyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbMF0pOworICBhc3NlcnRUaHJvd3MoKCkgPT4g
ZXhjZXB0aW9uLmdldEFyZygwLCAwKSwgVHlwZUVycm9yLAorICAgICAgL0ZpcnN0IGFyZ3VtZW50
IG11c3QgYmUgYSBXZWJBc3NlbWJseS5UYWcvKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGV4Y2Vw
dGlvbi5nZXRBcmcoe30sIDApLCBUeXBlRXJyb3IsCisgICAgICAvRmlyc3QgYXJndW1lbnQgbXVz
dCBiZSBhIFdlYkFzc2VtYmx5LlRhZy8pOworICAvL2Fzc2VydFRocm93cygoKSA9PiBleGNlcHRp
b24uZ2V0QXJnKHRhZywgdW5kZWZpbmVkKSwgVHlwZUVycm9yLAorICAgICAgLy8vSW5kZXggbXVz
dCBiZSBjb252ZXJ0aWJsZSB0byBhIHZhbGlkIG51bWJlci8pOworICBhc3NlcnRUaHJvd3MoKCkg
PT4gZXhjZXB0aW9uLmdldEFyZyh0YWcsIDB4RkZGRkZGRkYpLCBSYW5nZUVycm9yLAorICAgICAg
L0luZGV4IG91dCBvZiByYW5nZS8pOworICBsZXQgd3JvbmdfdGFnID0gbmV3IFdlYkFzc2VtYmx5
LlRhZyh7cGFyYW1ldGVyczogWydpMzInXX0pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0
aW9uLmdldEFyZyh3cm9uZ190YWcsIDApLCBUeXBlRXJyb3IsCisgICAgICAvRmlyc3QgYXJndW1l
bnQgZG9lcyBub3QgbWF0Y2ggdGhlIGV4Y2VwdGlvbiB0YWcvKTsKKworICAvLyBDaGVjayBkZWNv
ZGluZy4KKyAgVGVzdEdldEFyZ0hlbHBlcihbJ2kzMiddLCBba1dhc21JMzJdLCBbMV0pOworICBU
ZXN0R2V0QXJnSGVscGVyKFsnaTY0J10sIFtrV2FzbUk2NF0sIFsybl0pOworICBUZXN0R2V0QXJn
SGVscGVyKFsnZjMyJ10sIFtrV2FzbUYzMl0sIFszXSk7CisgIFRlc3RHZXRBcmdIZWxwZXIoWydm
NjQnXSwgW2tXYXNtRjY0XSwgWzRdKTsKKyAgVGVzdEdldEFyZ0hlbHBlcihbJ2V4dGVybnJlZidd
LCBba1dhc21FeHRlcm5SZWZdLCBbe3ZhbDogNX1dKTsKKyAgVGVzdEdldEFyZ0hlbHBlcihbJ2kz
MicsICdpNjQnLCAnZjMyJywgJ2Y2NCcsICdleHRlcm5yZWYnXSwgW2tXYXNtSTMyLCBrV2FzbUk2
NCwga1dhc21GMzIsIGtXYXNtRjY0LCBrV2FzbUV4dGVyblJlZl0sIFs1LCA2biwgNywgOCwge3Zh
bDogOX1dKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhjZXB0aW9uSXMoKSB7CisgIGxldCB0
YWcxID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogW119KTsKKyAgbGV0IHRhZzIg
PSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbXX0pOworICBhc3NlcnRUaHJvd3Mo
KCkgPT4gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih7fSwgW10pLCBUeXBlRXJyb3IsCisgICAg
ICAvZXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBXZWJBc3NlbWJseS5UYWcvKTsK
KworICBsZXQgZXhjZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcxLCBbXSk7
CisgIGFzc2VydFRydWUoZXhjZXB0aW9uLmlzKHRhZzEpKTsKKyAgYXNzZXJ0RmFsc2UoZXhjZXB0
aW9uLmlzKHRhZzIpKTsKKworICBhc3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0aW9uLmlzLmFwcGx5
KHt9LCB0YWcxKSwgVHlwZUVycm9yLAorICAgICAgL1dlYkFzc2VtYmx5LkV4Y2VwdGlvbiBvcGVy
YXRpb24gY2FsbGVkIG9uIG5vbi1FeGNlcHRpb24gb2JqZWN0Lyk7Cit9KSgpOwpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXhwb3J0LmpzIGIvSlNUZXN0cy93YXNtL3Y4
L2V4Y2VwdGlvbnMtZXhwb3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBjOTY5MGY1Yjg4ZjdlNTQzY2RjOTNk
OTFjYzFhODE4M2Q4MzgzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhj
ZXB0aW9ucy1leHBvcnQuanMKQEAgLTAsMCArMSw1MyBAQAorLy8gQ29weXJpZ2h0IDIwMTggdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cG9zZS13
YXNtIC0tZXhwZXJpbWVudGFsLXdhc20tZWgKKworbG9hZCgid2FzbS1tb2R1bGUtYnVpbGRlci5q
cyIpOworCisoZnVuY3Rpb24gVGVzdEV4cG9ydE11bHRpcGxlKCkgeworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFn
KGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfaSk7Cisg
IGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDFhIiwga0V4dGVybmFsVGFnLCBleGNlcHQxKTsK
KyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4MWIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDEp
OworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgyIiwga0V4dGVybmFsVGFnLCBleGNlcHQy
KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFRy
dWUoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGluc3RhbmNlLmV4cG9ydHMs
ICdleDFhJykpOworICBhc3NlcnRUcnVlKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku
Y2FsbChpbnN0YW5jZS5leHBvcnRzLCAnZXgxYicpKTsKKyAgYXNzZXJ0VHJ1ZShPYmplY3QucHJv
dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5zdGFuY2UuZXhwb3J0cywgJ2V4MicpKTsKKyAg
Ly8gRklYTUU6IGZpeCBicm9rZW4gdjggd2FzbSBleGNlcHRpb25zIHRlc3RzCisgIC8vIGFzc2Vy
dFNhbWUoaW5zdGFuY2UuZXhwb3J0cy5leDFhLCBpbnN0YW5jZS5leHBvcnRzLmV4MWIpOworICBh
c3NlcnROb3RTYW1lKGluc3RhbmNlLmV4cG9ydHMuZXgxYSwgaW5zdGFuY2UuZXhwb3J0cy5leDIp
OworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RFeHBvcnRPdXRPZkJvdW5kcygpIHsKKyAgbGV0IGJ1
aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIu
YWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4X29vYiIsIGtF
eHRlcm5hbFRhZywgZXhjZXB0ICsgMSk7CisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1
aWxkZXIuaW5zdGFudGlhdGUoKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLAorICAgICAgL1dl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzE6IDB0aCBFeHBvcnQgaGFz
IGludmFsaWQgZXhjZXB0aW9uIG51bWJlciAxIGl0IGV4Y2VlZHMgdGhlIGV4Y2VwdGlvbiBpbmRl
eCBzcGFjZSAxLCBuYW1lZCAnZXhfb29iJy8pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RFeHBv
cnRTYW1lTmFtZVR3aWNlKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVy
LmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGJ1aWxkZXIu
YWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgYXNzZXJ0VGhy
b3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSgpLCBXZWJBc3NlbWJseS5Db21w
aWxlRXJyb3IsCisgICAgICAvV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAzMDogZHVwbGljYXRlIGV4cG9ydDogJ2V4Jy8pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RF
eHBvcnRNb2R1bGVHZXRFeHBvcnRzKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBi
dWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxl
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIudG9CdWZmZXIoKSk7CisK
KyAgbGV0IGV4cG9ydHMgPSBXZWJBc3NlbWJseS5Nb2R1bGUuZXhwb3J0cyhtb2R1bGUpOworICBh
c3NlcnRBcnJheUVxdWFscyhbeyBuYW1lOiAiZXgiLCBraW5kOiAidGFnIiB9XSwgZXhwb3J0cyk7
Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXh0ZXJucmVm
LmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXh0ZXJucmVmLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmViYmRhMzdmMTZlYjE1MDMyNDkwOWQ2YjZjNTBmZGFhOGQwNDhkNTQKLS0tIC9kZXYvbnVsbAor
KysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1leHRlcm5yZWYuanMKQEAgLTAsMCArMSw5
NiBAQAorLy8gQ29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisKKy8vIEZsYWdzOiAtLWV4cGVyaW1lbnRhbC13YXNtLWVoIC0tZXhwZXJpbWVudGFsLXdh
c20tcmVmdHlwZXMgLS1hbGxvdy1uYXRpdmVzLXN5bnRheAorCitsb2FkKCJ3YXNtLW1vZHVsZS1i
dWlsZGVyLmpzIik7Citsb2FkKCJleGNlcHRpb25zLXV0aWxzLmpzIik7CisKKy8vIFRlc3QgdGhl
IGVuY29kaW5nIG9mIGEgdGhyb3duIGV4Y2VwdGlvbiB3aXRoIGEgbnVsbC1yZWYgdmFsdWUuCiso
ZnVuY3Rpb24gVGVzdFRocm93UmVmTnVsbCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1v
ZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9yKTsK
KyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfbnVsbCIsIGtTaWdfdl92KQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwclJlZk51bGwsIGtFeHRlcm5SZWZDb2RlLAorICAgICAgICBr
RXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRk
RXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNl
ID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2Us
IGluc3RhbmNlLmV4cG9ydHMuZXgsIFtudWxsXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJv
d19udWxsKCkpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2luZy9jYXRjaGluZyB0aGUgbnVsbC1y
ZWYgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hSZWZOdWxsKCkgeworICBsZXQgYnVp
bGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X3IpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19jYXRjaF9udWxs
Iiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkz
MiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBySTMyRXF6LAor
ICAgICAgICAgIGtFeHBySWYsIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJSZWZOdWxsLCBr
RXh0ZXJuUmVmQ29kZSwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAg
ICBrRXhwckVsc2UsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCA0MiwKKyAgICAgICAgICBr
RXhwckVuZCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByUmVm
SXNOdWxsLAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJJ
MzJDb25zdCwgMjMsCisgICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAga0V4cHJVbnJl
YWNoYWJsZSwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBd
KS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5h
bFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOwor
CisgIGFzc2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9udWxsKDAp
KTsKKyAgYXNzZXJ0RXF1YWxzKDQyLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX251bGwo
MSkpOworfSkoKTsKKworLy8gVGVzdCB0aGUgZW5jb2Rpbmcgb2YgYSB0aHJvd24gZXhjZXB0aW9u
IHdpdGggYSByZWZlcmVuY2UgdHlwZSB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dSZWZQYXJh
bSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4
Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9yKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigi
dGhyb3dfcGFyYW0iLCBrU2lnX3ZfcikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJM
b2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSkuZXhwb3J0
RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4
Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgbGV0IG8g
PSBuZXcgT2JqZWN0KCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2Uu
ZXhwb3J0cy5leCwgW29dLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKG8pKTsK
KyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzFdLCAo
KSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDEpKTsKKyAgYXNzZXJ0V2FzbVRocm93
cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzIuM10sICgpID0+IGluc3RhbmNlLmV4
cG9ydHMudGhyb3dfcGFyYW0oMi4zKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGlu
c3RhbmNlLmV4cG9ydHMuZXgsIFsic3RyIl0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3df
cGFyYW0oInN0ciIpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcvY2F0Y2hpbmcgdGhlIHJl
ZmVyZW5jZSB0eXBlIHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd0NhdGNoUmVmUGFyYW0oKSB7
CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQg
PSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfcik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93
X2NhdGNoX3BhcmFtIiwga1NpZ19yX3IpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBy
VHJ5LCBrRXh0ZXJuUmVmQ29kZSwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAg
ICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAg
ICAgICAgIC8vIGZhbGwtdGhyb3VnaAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9y
dEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBl
eGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGxldCBv
ID0gbmV3IE9iamVjdCgpOworCisgIGFzc2VydEVxdWFscyhvLCBpbnN0YW5jZS5leHBvcnRzLnRo
cm93X2NhdGNoX3BhcmFtKG8pKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMu
dGhyb3dfY2F0Y2hfcGFyYW0oMSkpOworICBhc3NlcnRFcXVhbHMoMi4zLCBpbnN0YW5jZS5leHBv
cnRzLnRocm93X2NhdGNoX3BhcmFtKDIuMykpOworICBhc3NlcnRFcXVhbHMoInN0ciIsIGluc3Rh
bmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oInN0ciIpKTsKK30pKCk7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1pbXBvcnQuanMgYi9KU1Rlc3RzL3dhc20vdjgv
ZXhjZXB0aW9ucy1pbXBvcnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E0ZjBhMDU2YmZjZjdjYzAzMzVlZGZi
MGM3MTJlNTViNWU3MWE0OAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9leGNl
cHRpb25zLWltcG9ydC5qcwpAQCAtMCwwICsxLDkwIEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUg
VjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwb3NlLXdh
c20gLS1leHBlcmltZW50YWwtd2FzbS1laAorCitsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpz
Iik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byByZXR1cm4gYSBuZXcgZXhwb3J0ZWQgZXhjZXB0
aW9uIHdpdGggdGhlIHtrU2lnX3Zfdn0gdHlwZQorLy8gc2lnbmF0dXJlIGZyb20gYW4gYW5vbnlt
b3VzIG1vZHVsZS4gVGhlIHVuZGVybHlpbmcgbW9kdWxlIGlzIHRocm93biBhd2F5LgorLy8gVGhp
cyBhbGxvd3MgdGVzdHMgdG8gcmVhc29uIHNvbGVseSBhYm91dCBpbXBvcnRpbmcgZXhjZXB0aW9u
cy4KK2Z1bmN0aW9uIE5ld0V4cG9ydGVkVGFnKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNt
TW9kdWxlQnVpbGRlcigpOworICBsZXQgdGFnID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOwor
ICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgidCIsIGtFeHRlcm5hbFRhZywgdGFnKTsKKyAgbGV0
IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICByZXR1cm4gaW5zdGFuY2UuZXhw
b3J0cy50OworfQorCisoZnVuY3Rpb24gVGVzdEltcG9ydFNpbXBsZSgpIHsKKyAgbGV0IGV4cG9y
dGVkID0gTmV3RXhwb3J0ZWRUYWcoKTsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgi
LCBrU2lnX3Zfdik7CisKKyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoeyBtOiB7IGV4OiBleHBvcnRlZCB9fSkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJ
bXBvcnRNdWx0aXBsZSgpIHsKKyAgbGV0IGV4cG9ydGVkID0gTmV3RXhwb3J0ZWRUYWcoKTsKKyAg
bGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBi
dWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4MSIsIGtTaWdfdl92KTsKKyAgbGV0IGV4Y2Vw
dDIgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4MiIsIGtTaWdfdl92KTsKKyAgbGV0
IGV4Y2VwdDMgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0
T2ZLaW5kKCJleDIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDIpOworICBidWlsZGVyLmFkZEV4cG9y
dE9mS2luZCgiZXgzIiwga0V4dGVybmFsVGFnLCBleGNlcHQzKTsKKyAgbGV0IGluc3RhbmNlID0g
YnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXgxOiBleHBvcnRlZCwgZXgyOiBleHBvcnRlZCB9
fSk7CisKKyAgYXNzZXJ0VHJ1ZShleGNlcHQxIDwgZXhjZXB0MyAmJiBleGNlcHQyIDwgZXhjZXB0
Myk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGluc3RhbmNlLmV4cG9ydHMuZXgxKTsKKyAg
Ly8gRklYTUU6IGZpeCBicm9rZW4gdjggd2FzbSBleGNlcHRpb25zIHRlc3RzCisgIC8vIGFzc2Vy
dFNhbWUoZXhwb3J0ZWQsIGluc3RhbmNlLmV4cG9ydHMuZXgyKTsKKyAgYXNzZXJ0Tm90U2FtZShl
eHBvcnRlZCwgaW5zdGFuY2UuZXhwb3J0cy5leDMpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJ
bXBvcnRNaXNzaW5nKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigp
OworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleCIsIGtTaWdf
dl92KTsKKworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRl
KHt9KSwgVHlwZUVycm9yLAorICAgICAgL2ltcG9ydCBtOmV4IG11c3QgYmUgYW4gb2JqZWN0Lyk7
CisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7
fX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvVGFnIGltcG9ydCBtOmV4IGlzIG5v
dCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWcvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBU
ZXN0SW1wb3J0VmFsdWVNaXNtYXRjaCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAi
ZXgiLCBrU2lnX3Zfdik7CisKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5p
bnN0YW50aWF0ZSh7IG06IHsgZXg6IDIzIH19KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAorICAg
ICAgL1RhZyBpbXBvcnQgbTpleCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFn
Lyk7CisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBt
OiB7IGV4OiB7fSB9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9UYWcgaW1wb3J0
IG06ZXggaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhZy8pOworICB2YXIgbW9u
a2V5ID0gT2JqZWN0LmNyZWF0ZShOZXdFeHBvcnRlZFRhZygpKTsKKyAgYXNzZXJ0VGhyb3dzKAor
ICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IG1vbmtleSB9fSksIFdl
YkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9UYWcgaW1wb3J0IG06ZXggaXMgbm90IGFuIGlu
c3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhZy8pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJbXBv
cnRTaWduYXR1cmVNaXNtYXRjaCgpIHsKKyAgbGV0IGV4cG9ydGVkID0gTmV3RXhwb3J0ZWRUYWco
KTsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2Vw
dCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3ZfaSk7CisKKyAgYXNz
ZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IGV4
cG9ydGVkIH19KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAorICAgICAgL2ltcG9ydGVkIFRhZyBt
OmV4IHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBpbXBvcnRlZCBXZWJBc3NlbWJseSBUYWcn
cyBzaWduYXR1cmUvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0TW9kdWxlR2V0SW1w
b3J0cygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0
IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3Zfdik7Cisg
IGxldCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIudG9CdWZmZXIoKSk7
CisKKyAgbGV0IGltcG9ydHMgPSBXZWJBc3NlbWJseS5Nb2R1bGUuaW1wb3J0cyhtb2R1bGUpOwor
ICBhc3NlcnRBcnJheUVxdWFscyhbeyBtb2R1bGU6ICJtIiwgbmFtZTogImV4Iiwga2luZDogInRh
ZyIgfV0sIGltcG9ydHMpOworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNl
cHRpb25zLXJldGhyb3cuanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1yZXRocm93Lmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjkyMzM5YmVmMmY2OTQyYmQ1ZjZlNWViMzVkNzE4OWMyY2FjNTkwYTgKLS0t
IC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1yZXRocm93LmpzCkBA
IC0wLDAgKzEsMTQyIEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVjdCBhdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwb3NlLXdhc20gLS1leHBlcmltZW50YWwt
d2FzbS1laCAtLWFsbG93LW5hdGl2ZXMtc3ludGF4CisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxk
ZXIuanMiKTsKK2xvYWQoImV4Y2VwdGlvbnMtdXRpbHMuanMiKTsKKworLy8gVGVzdCB0aGF0IHJl
dGhyb3cgZXhwcmVzc2lvbnMgY2FuIHRhcmdldCBjYXRjaCBibG9ja3MuCisoZnVuY3Rpb24gVGVz
dFJldGhyb3dJbkNhdGNoKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJyZXRocm93MCIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAg
ICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwK
KyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByUmV0aHJvdywgMCwK
KyAgICAgICAga0V4cHJFbmQsCisgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5j
dGlvbigicmV0aHJvdzEiLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4
cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAg
a0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAg
ICAga0V4cHJJMzJFcXosCisgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAg
ICAga0V4cHJSZXRocm93LCAxLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDIzLAorICAgICAgICBrRXhwckVuZAorICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1
aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0
IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3Mo
aW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRz
LnJldGhyb3cwKCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBv
cnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93MSgwKSk7CisgIGFzc2Vy
dEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93MSgxKSk7Cit9KSgpOworCisvLyBU
ZXN0IHRoYXQgcmV0aHJvdyBleHByZXNzaW9ucyBjYW4gdGFyZ2V0IGNhdGNoLWFsbCBibG9ja3Mu
CisoZnVuY3Rpb24gVGVzdFJldGhyb3dJbkNhdGNoQWxsKCkgeworICBsZXQgYnVpbGRlciA9IG5l
dyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJyZXRocm93MCIsIGtTaWdfdl92KQorICAg
ICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtF
eHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBrRXhw
clJldGhyb3csIDAsCisgICAgICAgIGtFeHByRW5kLAorICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1
aWxkZXIuYWRkRnVuY3Rpb24oInJldGhyb3cxIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShb
CisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNl
cHQsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwK
KyAgICAgICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisg
ICAgICAgICAgICBrRXhwclJldGhyb3csIDEsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAg
ICAga0V4cHJJMzJDb25zdCwgMjMsCisgICAgICAgIGtFeHByRW5kCisgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQp
OworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2Fz
bVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW10sICgpID0+IGluc3RhbmNl
LmV4cG9ydHMucmV0aHJvdzAoKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3Rh
bmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3cxKDApKTsK
KyAgYXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3cxKDEpKTsKK30pKCk7
CisKKy8vIFRlc3QgdGhhdCByZXRocm93IGV4cHJlc3Npb24gcHJvcGVybHkgdGFyZ2V0IHRoZSBj
b3JyZWN0IHN1cnJvdW5kaW5nIHRyeQorLy8gYmxvY2sgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2Yg
bXVsdGlwbGUgaGFuZGxlcnMgYmVpbmcgaW52b2x2ZWQuCisoZnVuY3Rpb24gVGVzdFJldGhyb3dO
ZXN0ZWQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxl
dCBleGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1
aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigicmV0aHJvd19u
ZXN0ZWQiLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtX
YXNtSTMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDIsCisgICAgICAgIGtFeHByQ2F0
Y2gsIGV4Y2VwdDIsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAg
a0V4cHJUaHJvdywgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQxLAorICAg
ICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDAs
CisgICAgICAgICAgICBrRXhwckkzMkVxLAorICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lk
LAorICAgICAgICAgICAgICBrRXhwclJldGhyb3csIDEsCisgICAgICAgICAgICBrRXhwckVuZCwK
KyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0
LCAxLAorICAgICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNt
Vm9pZCwKKyAgICAgICAgICAgICAga0V4cHJSZXRocm93LCAyLAorICAgICAgICAgICAga0V4cHJF
bmQsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyMywKKyAgICAgICAgICBrRXhwckVuZCwK
KyAgICAgICAga0V4cHJFbmQsCisgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBv
cnRPZktpbmQoImV4MSIsIGtFeHRlcm5hbFRhZywgZXhjZXB0MSk7CisgIGJ1aWxkZXIuYWRkRXhw
b3J0T2ZLaW5kKCJleDIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDIpOworICBsZXQgaW5zdGFuY2Ug
PSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwg
aW5zdGFuY2UuZXhwb3J0cy5leDEsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3df
bmVzdGVkKDApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0
cy5leDIsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3dfbmVzdGVkKDEpKTsKKyAg
YXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3dfbmVzdGVkKDIpKTsKK30p
KCk7CisKKy8vIFRlc3QgdGhhdCBhbiBleGNlcHRpb24gYmVpbmcgcmV0aHJvdyBjYW4gYmUgY2F1
Z2h0IGJ5IGFub3RoZXIgbG9jYWwgY2F0Y2gKKy8vIGJsb2NrIGluIHRoZSBzYW1lIGZ1bmN0aW9u
IHdpdGhvdXQgZXZlciB1bndpbmRpbmcgdGhlIGFjdGl2YXRpb24uCisoZnVuY3Rpb24gVGVzdFJl
dGhyb3dSZWNhdGNoKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigp
OworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFk
ZEZ1bmN0aW9uKCJyZXRocm93X3JlY2F0Y2giLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2Vw
dCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByVHJ5LCBrV2Fz
bUkzMiwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICBrRXhwckkz
MkVxeiwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAga0V4
cHJSZXRocm93LCAyLAorICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICBrRXhwckkz
MkNvbnN0LCA0MiwKKyAgICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAgICBr
RXhwckkzMkNvbnN0LCAyMywKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJFbmQs
CisgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4
dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRl
KCk7CisKKyAgYXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3dfcmVjYXRj
aCgwKSk7CisgIGFzc2VydEVxdWFscyg0MiwgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X3JlY2F0
Y2goMSkpOworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXNo
YXJlZC5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXNoYXJlZC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44NTJmNWJhOGExMzcxNjFmZjc1Nzc1YTRjOWUyMTBmOTBjZDI4ODM1Ci0tLSAvZGV2L251bGwK
KysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtc2hhcmVkLmpzCkBAIC0wLDAgKzEsMTUz
IEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKworLy8gRmxhZ3M6IC0tZXhwb3NlLXdhc20gLS1leHBlcmltZW50YWwtd2FzbS1laAorCits
b2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBy
ZXR1cm4gYSBuZXcgZXhwb3J0ZWQgZXhjZXB0aW9uIHdpdGggdGhlIHtrU2lnX3Zfdn0gdHlwZQor
Ly8gc2lnbmF0dXJlIGZyb20gYW4gYW5vbnltb3VzIG1vZHVsZS4gVGhlIHVuZGVybHlpbmcgbW9k
dWxlIGlzIHRocm93biBhd2F5LgorZnVuY3Rpb24gTmV3RXhwb3J0ZWRFeGNlcHRpb24oKSB7Cisg
IGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBi
dWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIs
IGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50
aWF0ZSgpOworICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy5leDsKK30KKworLy8gQ2hlY2sgdGhh
dCBhbiBpbnN0YW5jZSBtYXRjaGVzIGFuIGV4Y2VwdGlvbiB0aHJvd24gYnkgaXRzZWxmLCBldmVu
IHdoZW4gdGhlCisvLyBleGNlcHRpb24gaXMgcmUtdGhyb3duIGJ5IGEgcmVndWxhciBKYXZhU2Ny
aXB0IGZ1bmN0aW9uLgorKGZ1bmN0aW9uIFRlc3RTaW5nbGVJbnN0YW5jZSgpIHsKKyAgbGV0IGJ1
aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IHNpZ19pbmRleCA9IGJ1aWxk
ZXIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBmdW4gPSBidWlsZGVyLmFkZEltcG9ydCgibSIs
ICJmIiwgc2lnX2luZGV4KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRC
b2R5KFsKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0CisgICAgICBdKS5leHBvcnRGdW5jKCk7
CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoIiwga1NpZ192X3YpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxsRnVu
Y3Rpb24sIGZ1biwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwckVu
ZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGV4X29iaiA9IG5ldyBFcnJvcigibXkg
ZXhjZXB0aW9uIik7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7
IGY6IGZ1bmN0aW9uKCkgeyB0aHJvdyBleF9vYmogfX19KTsKKworICBhc3NlcnRUaHJvd3MoKCkg
PT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvdygpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICBh
c3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5jYXRjaCgpLCBleF9vYmop
OworICB0cnkgeworICAgIGluc3RhbmNlLmV4cG9ydHMudGhyb3coKTsKKyAgfSBjYXRjaCAoZSkg
eworICAgIGV4X29iaiA9IGU7CisgIH0KKyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+IGluc3Rh
bmNlLmV4cG9ydHMuY2F0Y2goKSk7Cit9KSgpOworCisvLyBDaGVjayB0aGF0IHR3byBpbnN0YW5j
ZXMgZGlzdGluZ3Vpc2ggdGhlaXIgaW5kaXZpZHVhbCBleGNlcHRpb25zIGlmIHRoZXkgYXJlCisv
LyBub3Qgc2hhcmVkLCBldmVuIHdoZW4gZGVjbGFyZWQgYnkgdGhlIHNhbWUgdW5kZXJseWluZyBt
b2R1bGUuCisoZnVuY3Rpb24gVGVzdE11bHRpSW5zdGFuY2VOb25TaGFyZWQoKSB7CisgIGxldCBi
dWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBzaWdfaW5kZXggPSBidWls
ZGVyLmFkZFR5cGUoa1NpZ192X3YpOworICBsZXQgZnVuID0gYnVpbGRlci5hZGRJbXBvcnQoIm0i
LCAiZiIsIHNpZ19pbmRleCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zf
dik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93Iiwga1NpZ192X3YpCisgICAgICAuYWRk
Qm9keShbCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdAorICAgICAgXSkuZXhwb3J0RnVuYygp
OworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaCIsIGtTaWdfdl92KQorICAgICAgLmFkZEJv
ZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByQ2FsbEZ1
bmN0aW9uLCBmdW4sCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJF
bmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBleF9vYmogPSBuZXcgRXJyb3IoIm15
IGV4Y2VwdGlvbiIpOworICBsZXQgaW5zdGFuY2UxID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06
IHsgZjogYXNzZXJ0VW5yZWFjaGFibGUgfX0pOworICBsZXQgaW5zdGFuY2UyID0gYnVpbGRlci5p
bnN0YW50aWF0ZSh7IG06IHsgZjogZnVuY3Rpb24oKSB7IHRocm93IGV4X29iaiB9fX0pOworCisg
IGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZTEuZXhwb3J0cy50aHJvdygpLCBXZWJBc3NlbWJs
eS5FeGNlcHRpb24pOworICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UyLmV4cG9y
dHMuY2F0Y2goKSwgZXhfb2JqKTsKKyAgdHJ5IHsKKyAgICBpbnN0YW5jZTEuZXhwb3J0cy50aHJv
dygpOworICB9IGNhdGNoIChlKSB7CisgICAgZXhfb2JqID0gZTsKKyAgfQorICBhc3NlcnRUaHJv
d3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2goKSwgZXhfb2JqKTsKK30pKCk7
CisKKy8vIENoZWNrIHRoYXQgdHdvIGluc3RhbmNlcyBtYXRjaCB0aGVpciBleGNlcHRpb25zIGlm
IHRoZXkgYXJlIHNoYXJlZCBwcm9wZXJseSwKKy8vIGV2ZW4gaWYgdGhlIGxvY2FsIGV4Y2VwdGlv
biBpbmRleCBvZiBleHBvcnQgYW5kIGltcG9ydCBpcyBkaWZmZXJlbnQuCisoZnVuY3Rpb24gVGVz
dE11bHRpSW5zdGFuY2VTaGFyZWQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBzaWdfaW5kZXggPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X3YpOwor
ICBsZXQgZnVuID0gYnVpbGRlci5hZGRJbXBvcnQoIm0iLCAiZiIsIHNpZ19pbmRleCk7CisgIGxl
dCBleGNlcHQxID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleDEiLCBrU2lnX3Zfdik7
CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFk
ZEV4cG9ydE9mS2luZCgiZXgyIiwga0V4dGVybmFsVGFnLCBleGNlcHQyKTsKKyAgYnVpbGRlci5h
ZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAg
a0V4cHJUaHJvdywgZXhjZXB0MgorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFk
ZEZ1bmN0aW9uKCJjYXRjaCIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBr
RXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBmdW4sCisg
ICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSku
ZXhwb3J0RnVuYygpOworICBsZXQgZXhfb2JqID0gbmV3IEVycm9yKCJteSBleGNlcHRpb24iKTsK
KyAgbGV0IGluc3RhbmNlMSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGY6IGFzc2VydFVu
cmVhY2hhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXgxOiBOZXdFeHBvcnRlZEV4Y2VwdGlvbigpIH19KTsKKyAgbGV0IGluc3RhbmNlMiA9IGJ1aWxk
ZXIuaW5zdGFudGlhdGUoeyBtOiB7IGY6IGZ1bmN0aW9uKCkgeyB0aHJvdyBleF9vYmogfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4MTogaW5zdGFuY2Ux
LmV4cG9ydHMuZXgyIH19KTsKKworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UxLmV4cG9y
dHMudGhyb3coKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxz
KCgpID0+IGluc3RhbmNlMi5leHBvcnRzLmNhdGNoKCksIGV4X29iaik7CisgIHRyeSB7CisgICAg
aW5zdGFuY2UxLmV4cG9ydHMudGhyb3coKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGV4X29iaiA9
IGU7CisgIH0KKyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+IGluc3RhbmNlMi5leHBvcnRzLmNh
dGNoKCkpOworfSkoKTsKKworLy8gQ2hlY2sgdGhhdCB0d28gaW5zdGFuY2VzIGJhc2VkIG9uIGRp
ZmZlcmVudCBtb2R1bGVzIG1hdGNoIHRoZWlyIGV4Y2VwdGlvbnMgaWYKKy8vIHRoZXkgYXJlIHNo
YXJlZCBwcm9wZXJseSwgZXZlbiBpZiB0aGUgbG9jYWwgZXhjZXB0aW9uIGluZGV4IGlzIGRpZmZl
cmVudC4KKyhmdW5jdGlvbiBUZXN0TXVsdGlNb2R1bGVTaGFyZWQoKSB7CisgIGxldCBidWlsZGVy
MSA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIxLmFk
ZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlcjEuYWRkVGFnKGtTaWdfdl92
KTsKKyAgYnVpbGRlcjEuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0
Mik7CisgIGJ1aWxkZXIxLmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIGtTaWdfdl92KQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwclRocm93LCBleGNlcHQyCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGxldCBidWlsZGVyMiA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgc2ln
X2luZGV4ID0gYnVpbGRlcjIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBmdW4gPSBidWlsZGVy
Mi5hZGRJbXBvcnQoIm0iLCAiZiIsIHNpZ19pbmRleCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVy
Mi5hZGRJbXBvcnRlZFRhZygibSIsICJleCIsIGtTaWdfdl92KTsKKyAgYnVpbGRlcjIuYWRkRnVu
Y3Rpb24oImNhdGNoIiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBy
VHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGZ1biwKKyAgICAg
ICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9y
dEZ1bmMoKTsKKyAgbGV0IGV4X29iaiA9IG5ldyBFcnJvcigibXkgZXhjZXB0aW9uIik7CisgIGxl
dCBpbnN0YW5jZTEgPSBidWlsZGVyMS5pbnN0YW50aWF0ZSgpOworICBsZXQgaW5zdGFuY2UyID0g
YnVpbGRlcjIuaW5zdGFudGlhdGUoeyBtOiB7IGY6IGZ1bmN0aW9uKCkgeyB0aHJvdyBleF9vYmog
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleDogaW5z
dGFuY2UxLmV4cG9ydHMuZXggfX0pOworCisgIGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZTEu
ZXhwb3J0cy50aHJvdygpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICBhc3NlcnRUaHJvd3NF
cXVhbHMoKCkgPT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2goKSwgZXhfb2JqKTsKKyAgdHJ5IHsK
KyAgICBpbnN0YW5jZTEuZXhwb3J0cy50aHJvdygpOworICB9IGNhdGNoIChlKSB7CisgICAgZXhf
b2JqID0gZTsKKyAgfQorICBhc3NlcnREb2VzTm90VGhyb3coKCkgPT4gaW5zdGFuY2UyLmV4cG9y
dHMuY2F0Y2goKSk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlv
bnMtdHlwZS1yZWZsZWN0aW9uLmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtdHlwZS1y
ZWZsZWN0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0YzIwZWRhZThlMDIzNWFiZjdjMmUxOWViYzcxODBm
YWIwOGNmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy10
eXBlLXJlZmxlY3Rpb24uanMKQEAgLTAsMCArMSw0NyBAQAorLy8gQ29weXJpZ2h0IDIwMjEgdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cGVyaW1l
bnRhbC13YXNtLWVoIC0tZXhwZXJpbWVudGFsLXdhc20tdHlwZS1yZWZsZWN0aW9uCisKK2xvYWQo
Indhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKKworbGV0IHRlc3RjYXNlcyA9IFsKK3t0eXBlczog
e3BhcmFtZXRlcnM6W119LCBzaWc6IGtTaWdfdl92fSwKK3t0eXBlczoge3BhcmFtZXRlcnM6WyJp
MzIiXX0sIHNpZzoga1NpZ192X2l9LAore3R5cGVzOiB7cGFyYW1ldGVyczpbImk2NCJdfSwgc2ln
OiBrU2lnX3ZfbH0sCit7dHlwZXM6IHtwYXJhbWV0ZXJzOlsiZjY0IiwgImY2NCIsICJpMzIiXX0s
IHNpZzoga1NpZ192X2RkaX0sCit7dHlwZXM6IHtwYXJhbWV0ZXJzOlsiZjMyIl19LCBzaWc6IGtT
aWdfdl9mfSwKK107CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0KCkgeworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworCisgIHRlc3RjYXNlcy5mb3JFYWNoKGZ1bmN0aW9u
KGV4cGVjdGVkLCBpKSB7CisgICAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGV4cGVjdGVk
LnNpZyk7CisgICAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4IiArIGksIGtFeHRlcm5hbFRh
ZywgZXhjZXB0KTsKKyAgfSk7CisKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0
ZSgpOworICB0ZXN0Y2FzZXMuZm9yRWFjaChmdW5jdGlvbihleHBlY3RlZCwgaSkgeworICAgIGFz
c2VydEVxdWFscyhpbnN0YW5jZS5leHBvcnRzWyJleCIgKyBpXS50eXBlKCksIGV4cGVjdGVkLnR5
cGVzKTsKKyAgfSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEltcG9ydEV4cG9ydCgpIHsKKwor
ICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgaW1wb3J0cyA9
IHttOiB7fX07CisKKyAgdGVzdGNhc2VzLmZvckVhY2goZnVuY3Rpb24oZXhwZWN0ZWQsIGkpIHsK
KyAgICBsZXQgdCA9IG5ldyBXZWJBc3NlbWJseS5UYWcoZXhwZWN0ZWQudHlwZXMpOworICAgIGxl
dCBpbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiICsgaSwgZXhwZWN0ZWQu
c2lnKTsKKyAgICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiICsgaSwga0V4dGVybmFsVGFn
LCBpbmRleCk7CisgICAgaW1wb3J0cy5tWyJleCIgKyBpXSA9IHQ7CisgIH0pOworCisgIGxldCBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoaW1wb3J0cyk7CisgIHRlc3RjYXNlcy5mb3JF
YWNoKGZ1bmN0aW9uKGV4cGVjdGVkLCBpKSB7CisgICAgYXNzZXJ0RXF1YWxzKGluc3RhbmNlLmV4
cG9ydHNbImV4IiArIGldLnR5cGUoKSwgZXhwZWN0ZWQudHlwZXMpOworICB9KQorfSkoKTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXV0aWxzLmpzIGIvSlNUZXN0cy93
YXNtL3Y4L2V4Y2VwdGlvbnMtdXRpbHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGJlMTkxOWRlZTY4MDMyM2Nl
YjA5Mzk2NGZlNjFhOTVmMDZkZTY5NwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92
OC9leGNlcHRpb25zLXV0aWxzLmpzCkBAIC0wLDAgKzEsMjcgQEAKKy8vIENvcHlyaWdodCAyMDE4
IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1hbGxv
dy1uYXRpdmVzLXN5bnRheAorCisvLyBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgbG9hZGVk
IGJ5IG90aGVyIHRlc3RzIHRvIHByb3ZpZGUgdXRpbGl0eSBtZXRob2RzCisvLyByZXF1aXJpbmcg
bmF0aXZlcyBzeW50YXggKGFuZCBoZW5jZSBub3Qgc3VpdGVkIGZvciB0aGUgbWpzdW5pdC5qcyBm
aWxlKS4KKworZnVuY3Rpb24gYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgdGFnLCB2YWx1ZXMs
IGNvZGUpIHsKKyAgdHJ5IHsKKyAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdmdW5jdGlvbicpIHsK
KyAgICAgIGNvZGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgZXZhbChjb2RlKTsKKyAgICB9Cisg
IH0gY2F0Y2ggKGUpIHsKKyAgICBhc3NlcnRJbnN0YW5jZW9mKGUsIFdlYkFzc2VtYmx5LkV4Y2Vw
dGlvbik7CisgICAgYXNzZXJ0VHJ1ZShlLmlzKHRhZykpOworICAgIGFzc2VydEVxdWFscyh2YWx1
ZXMubGVuZ3RoLCB0YWcudHlwZSgpLnBhcmFtZXRlcnMubGVuZ3RoKTsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7ICsraSkKKyAgICAgIGFzc2VydEVxdWFscyh2YWx1ZXNb
aV0sIGUuZ2V0QXJnKHRhZywgaSkpOworICAgIHJldHVybjsgIC8vIFN1Y2Nlc3MuCisgIH0KKyAg
dGhyb3cgbmV3IE1qc1VuaXRBc3NlcnRpb25FcnJvcignRGlkIG5vdCB0aHJvdyBleHBlY3RlZCA8
JyArIHRhZyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJz4gd2l0aCB2YWx1
ZXM6ICcgKyB2YWx1ZXMpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlv
bnMuanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OTE1NTA0
NTA0OTg4MTczMDdkMjk0NzUwMmFiMmFmYmMwNGM2MmE0Ci0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMuanMKQEAgLTAsMCArMSwxMDg3IEBACisvLyBDb3B5cmln
aHQgMjAxOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6
IC0tZXhwb3NlLXdhc20gLS1leHBlcmltZW50YWwtd2FzbS1laCAtLWFsbG93LW5hdGl2ZXMtc3lu
dGF4CisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKK2xvYWQoImV4Y2VwdGlvbnMt
dXRpbHMuanMiKTsKKworLy8gVGhlIGZvbGxvd2luZyBtZXRob2QgZG9lc24ndCBhdHRlbXB0IHRv
IGNhdGNoIGFuIHJhaXNlZCBleGNlcHRpb24uCisoZnVuY3Rpb24gVGVzdFRocm93U2ltcGxlKCkg
eworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0
ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJv
d19pZl9wYXJhbV9ub3RfemVybyIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAg
ICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckkzMkNvbnN0LCAwLAorICAgICAgICBr
RXhwckkzMk5lLAorICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJU
aHJvdywgZXhjZXB0LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwg
MQorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgi
LCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19pZl9w
YXJhbV9ub3RfemVybygwKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNl
LmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X2lmX3BhcmFtX25v
dF96ZXJvKDEwKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9y
dHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X2lmX3BhcmFtX25vdF96ZXJv
KC0xKSk7Cit9KSgpOworCisvLyBUZXN0IHRoYXQgZW1wdHkgdHJ5L2NhdGNoIGJsb2NrcyB3b3Jr
LgorKGZ1bmN0aW9uIFRlc3RDYXRjaEVtcHR5QmxvY2tzKCkgeworICBsZXQgYnVpbGRlciA9IG5l
dyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaF9lbXB0eV90cnkiLCBrU2lnX3Zf
dikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAg
ICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9y
dEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFz
c2VydERvZXNOb3RUaHJvdyhpbnN0YW5jZS5leHBvcnRzLmNhdGNoX2VtcHR5X3RyeSk7Cit9KSgp
OworCisvLyBOb3cgdGhhdCB3ZSBrbm93IHRocm93aW5nIHdvcmtzLCB3ZSB0ZXN0IGNhdGNoaW5n
IHRoZSBleGNlcHRpb25zIHdlIHJhaXNlLgorKGZ1bmN0aW9uIFRlc3RDYXRjaFNpbXBsZSgpIHsK
KyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9
IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigic2ltcGxl
X3Rocm93X2NhdGNoX3RvXzBfMSIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAg
ICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAg
ICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAg
ICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAg
a0V4cHJJMzJDb25zdCwgNDIsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAg
ICBrRXhwckkzMkNvbnN0LCAyMywKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1
bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2Vy
dEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5zaW1wbGVfdGhyb3dfY2F0Y2hfdG9fMF8xKDAp
KTsKKyAgYXNzZXJ0RXF1YWxzKDQyLCBpbnN0YW5jZS5leHBvcnRzLnNpbXBsZV90aHJvd19jYXRj
aF90b18wXzEoMSkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RUcmFwTm90Q2F1Z2h0KCkgewor
ICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBidWlsZGVyLmFkZEZ1
bmN0aW9uKCd1bnJlYWNoYWJsZV9pbl90cnknLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwclVucmVhY2hhYmxl
LAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhw
b3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAg
YXNzZXJ0VHJhcHMoa1RyYXBVbnJlYWNoYWJsZSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy51bnJl
YWNoYWJsZV9pbl90cnkoKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdFRyYXBJbkNhbGxlZU5v
dENhdWdodCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAg
bGV0IGZ1bmNfZGl2ID0gYnVpbGRlci5hZGRGdW5jdGlvbignZGl2Jywga1NpZ19pX2lpKS5hZGRC
b2R5KFsKKyAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAg
a0V4cHJJMzJEaXZVCisgIF0pOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0cmFwX2luX2NhbGxl
ZScsIGtTaWdfaV9paSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNt
STMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJMb2NhbEdl
dCwgMSwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgZnVuY19kaXYuaW5kZXgsCisgICAg
ICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMTEsCisgICAgICAg
IGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxk
ZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMywgaW5zdGFuY2UuZXhwb3J0cy50
cmFwX2luX2NhbGxlZSg3LCAyKSk7CisgIGFzc2VydFRyYXBzKGtUcmFwRGl2QnlaZXJvLCAoKSA9
PiBpbnN0YW5jZS5leHBvcnRzLnRyYXBfaW5fY2FsbGVlKDEsIDApKTsKK30pKCk7CisKKyhmdW5j
dGlvbiBUZXN0VHJhcFZpYUpTTm90Q2F1Z2h0KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNt
TW9kdWxlQnVpbGRlcigpOworICBsZXQgaW1wID0gYnVpbGRlci5hZGRJbXBvcnQoJ2ltcCcsICdv
cnQnLCBrU2lnX2lfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ2RpdicsIGtTaWdfaV9paSkK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4
cHJMb2NhbEdldCwgMSwKKyAgICAgICAga0V4cHJJMzJEaXZVCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ2NhbGxfaW1wb3J0Jywga1NpZ19pX3YpCisgICAg
ICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhw
ckNhbGxGdW5jdGlvbiwgaW1wLAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICAgIGtF
eHBySTMyQ29uc3QsIDExLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygp
OworICBsZXQgZXhjZXB0aW9uID0gdW5kZWZpbmVkOworICBsZXQgaW5zdGFuY2U7CisgIGZ1bmN0
aW9uIGpzX2ltcG9ydCgpIHsKKyAgICB0cnkgeworICAgICAgaW5zdGFuY2UuZXhwb3J0cy5kaXYo
MSwgMCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgZXhjZXB0aW9uID0gZTsKKyAgICB9Cisg
ICAgdGhyb3cgZXhjZXB0aW9uOworICB9CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0
ZSh7aW1wOiB7b3J0OiBqc19pbXBvcnR9fSk7CisKKyAgbGV0IGNhdWdodCA9IHVuZGVmaW5lZDsK
KyAgdHJ5IHsKKyAgICBsZXQgcmVzID0gaW5zdGFuY2UuZXhwb3J0cy5jYWxsX2ltcG9ydCgpOwor
ICAgIGFzc2VydFVucmVhY2hhYmxlKCdjYWxsX2ltcG9ydCBzaG91bGQgdHJhcCwgYnV0IHJldHVy
bmVkIHdpdGggJyArIHJlcyk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBjYXVnaHQgPSBlOworICB9
CisgIGFzc2VydFNhbWUoZXhjZXB0aW9uLCBjYXVnaHQpOworICBhc3NlcnRUaHJvd3MoaW5zdGFu
Y2UuZXhwb3J0cy5jYWxsX2ltcG9ydCwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCBrVHJhcE1z
Z3Nba1RyYXBEaXZCeVplcm9dKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0TWFudWFsbHlUaHJv
d25SdW50aW1lRXJyb3JDYXVnaHQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBpbXAgPSBidWlsZGVyLmFkZEltcG9ydCgnaW1wJywgJ29ydCcsIGtT
aWdfaV92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbignY2FsbF9pbXBvcnQnLCBrU2lnX2lfdikK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAg
IGtFeHByQ2FsbEZ1bmN0aW9uLCBpbXAsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAg
ICAga0V4cHJJMzJDb25zdCwgMTEsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRG
dW5jKCk7CisgIGZ1bmN0aW9uIHRocm93X2V4YygpIHsKKyAgICB0aHJvdyBuZXcgV2ViQXNzZW1i
bHkuUnVudGltZUVycm9yKCdNeSB1c2VyIHRleHQnKTsKKyAgfQorICBsZXQgaW5zdGFuY2UgPSBi
dWlsZGVyLmluc3RhbnRpYXRlKHtpbXA6IHtvcnQ6IHRocm93X2V4Y319KTsKKworICBhc3NlcnRF
cXVhbHMoMTEsIGluc3RhbmNlLmV4cG9ydHMuY2FsbF9pbXBvcnQoKSk7Cit9KSgpOworCisoZnVu
Y3Rpb24gVGVzdEV4bldpdGhXYXNtUHJvdG9Ob3RDYXVnaHQoKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGxldCBpbXAgPSBidWlsZGVyLmFkZEltcG9ydCgnaW1wJywgJ29ydCcsIGtT
aWdfdl92KTsKKyAgbGV0IHRocm93X2ZuID0gYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3cnLCBr
U2lnX3ZfdikKKyAgICAgICAgICAgICAgICAgICAgIC5hZGRCb2R5KFtrRXhwclRocm93LCBleGNl
cHRdKQorICAgICAgICAgICAgICAgICAgICAgLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRG
dW5jdGlvbigndGVzdCcsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICAvLyBD
YWxsaW5nICJ0aHJvdyIgZGlyZWN0bHkgc2hvdWxkIHByb2R1Y2UgdGhlIGV4cGVjdGVkIGV4Y2Vw
dGlvbi4KKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxG
dW5jdGlvbiwgdGhyb3dfZm4uaW5kZXgsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAg
ICAgICAga0V4cHJFbmQsCisgICAgICAgIC8vIENhbGxpbmcgdGhyb3VnaCBKUyBwcm9kdWNlcyBh
IHdyYXBwZWQgZXhjZXB0aW9ucyB3aGljaCBkb2VzIG5vdCBtYXRjaAorICAgICAgICAvLyB0aGUg
Y2F0Y2guCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxs
RnVuY3Rpb24sIGltcCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhw
ckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2U7CisgIGxldCB3cmFw
cGVkX2V4bjsKKyAgZnVuY3Rpb24ganNfaW1wb3J0KCkgeworICAgIHRyeSB7CisgICAgICBpbnN0
YW5jZS5leHBvcnRzLnRocm93KCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgd3JhcHBlZF9l
eG4gPSBuZXcgRXJyb3IoKTsKKyAgICAgIHdyYXBwZWRfZXhuLl9fcHJvdG9fXyA9IGU7CisgICAg
ICB0aHJvdyB3cmFwcGVkX2V4bjsKKyAgICB9CisgIH0KKyAgaW5zdGFuY2UgPSBidWlsZGVyLmlu
c3RhbnRpYXRlKHtpbXA6IHtvcnQ6IGpzX2ltcG9ydH19KTsKKyAgbGV0IGNhdWdodCA9IHVuZGVm
aW5lZDsKKyAgdHJ5IHsKKyAgICBpbnN0YW5jZS5leHBvcnRzLnRlc3QoKTsKKyAgfSBjYXRjaCAo
ZSkgeworICAgIGNhdWdodCA9IGU7CisgIH0KKyAgYXNzZXJ0VHJ1ZSghIWNhdWdodCwgJ3Nob3Vs
ZCBoYXZlIHRyYXBwZWQnKTsKKyAgYXNzZXJ0RXF1YWxzKGNhdWdodCwgd3JhcHBlZF9leG4pOwor
ICBhc3NlcnRJbnN0YW5jZW9mKGNhdWdodC5fX3Byb3RvX18sIFdlYkFzc2VtYmx5LkV4Y2VwdGlv
bik7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdFN0YWNrT3ZlcmZsb3dOb3RDYXVnaHQoKSB7Cisg
IGZ1bmN0aW9uIHN0YWNrX292ZXJmbG93KCkgeworICAgIC8vJVRocm93U3RhY2tPdmVyZmxvdygp
OworICB9CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBz
aWdfdl92ID0gYnVpbGRlci5hZGRUeXBlKGtTaWdfdl92KTsKKyAgbGV0IGtTdGFja092ZXJmbG93
ID0gYnVpbGRlci5hZGRJbXBvcnQoJycsICdzdGFja19vdmVyZmxvdycsIHNpZ192X3YpOworICBi
dWlsZGVyLmFkZEZ1bmN0aW9uKCd0cnlfc3RhY2tfb3ZlcmZsb3cnLCBrU2lnX3ZfdikKKyAgICAg
IC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhw
ckNhbGxGdW5jdGlvbiwgMCwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAga0V4cHJF
bmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0
YW50aWF0ZSh7Jyc6IHsnc3RhY2tfb3ZlcmZsb3cnOiBzdGFja19vdmVyZmxvd319KTsKKworICBh
c3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50cnlfc3RhY2tfb3ZlcmZsb3coKSwK
KyAgICAgIFJhbmdlRXJyb3IsICdNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZCcpOwor
fSk7CisvLyBGSVhNRTogbmVlZHMgc3RhY2sgb3ZlcmZsb3cgaGVscGVyCisvLygpOworCisvLyBU
ZXN0IHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHdoaWNoIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGJ5
IHVzaW5nIGEgY2FzY2FkZWQKKy8vIHNlcXVlbmNlIG9mIG5lc3RlZCB0cnkgYmxvY2tzIHdpdGgg
YSBzaW5nbGUgY2F0Y2ggYmxvY2sgZWFjaC4KKyhmdW5jdGlvbiBUZXN0Q2F0Y2hDb21wbGV4MSgp
IHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2Vw
dDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MyA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2hfY29tcGxleCIsIGtTaWdfaV9pKQorICAg
ICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4
cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAg
ICAgIGtFeHBySTMyRXF6LAorICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAg
ICAgICAgICBrRXhwclRocm93LCBleGNlcHQxLAorICAgICAgICAgICAga0V4cHJFbHNlLAorICAg
ICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0
LCAxLAorICAgICAgICAgICAgICBrRXhwckkzMkVxLAorICAgICAgICAgICAgICBrRXhwcklmLCBr
V2FzbVZvaWQsCisgICAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MiwKKyAgICAgICAg
ICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDMsCisg
ICAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAg
ICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAg
ICAgICAgICBrRXhwckkzMkNvbnN0LCAzLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBr
RXhwckNhdGNoLCBleGNlcHQyLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDQsCisgICAgICAg
IGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9m
S2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDMpOworICBsZXQgaW5zdGFuY2UgPSBidWls
ZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDMsIGluc3RhbmNlLmV4cG9ydHMu
Y2F0Y2hfY29tcGxleCgwKSk7CisgIGFzc2VydEVxdWFscyg0LCBpbnN0YW5jZS5leHBvcnRzLmNh
dGNoX2NvbXBsZXgoMSkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5l
eHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9jb21wbGV4KDIpKTsK
K30pKCk7CisKKy8vIFRlc3QgdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggd2hpY2ggZXhjZXB0aW9u
IHdhcyB0aHJvd24gYnkgdXNpbmcgYSBzaW5nbGUKKy8vIHRyeSBibG9jayB3aXRoIG11bHRpcGxl
IGFzc29jaWF0ZWQgY2F0Y2ggYmxvY2tzIGluIHNlcXVlbmNlLgorKGZ1bmN0aW9uIFRlc3RDYXRj
aENvbXBsZXgyKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOwor
ICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIg
PSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQzID0gYnVpbGRlci5hZGRU
YWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaF9jb21wbGV4Iiwga1Np
Z19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAg
ICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBySTMyRXF6LAorICAgICAg
ICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDEs
CisgICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAg
ICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAgICBrRXhwckkzMkVxLAorICAg
ICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAgICBrRXhwclRocm93LCBl
eGNlcHQyLAorICAgICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAgICBrRXhwclRocm93
LCBleGNlcHQzLAorICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAga0V4cHJFbmQsCisg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwK
KyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAzLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQy
LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAg
XSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJu
YWxUYWcsIGV4Y2VwdDMpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7
CisKKyAgYXNzZXJ0RXF1YWxzKDMsIGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hfY29tcGxleCgwKSk7
CisgIGFzc2VydEVxdWFscyg0LCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoX2NvbXBsZXgoMSkpOwor
ICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkg
PT4gaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9jb21wbGV4KDIpKTsKK30pKCk7CisKKy8vIFRlc3Qg
dGhyb3dpbmcgYW4gZXhjZXB0aW9uIHdpdGggbXVsdGlwbGUgdmFsdWVzLgorKGZ1bmN0aW9uIFRl
c3RUaHJvd011bHRpcGxlVmFsdWVzKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2lpKTsKKyAg
YnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfMV8yIiwga1NpZ192X3YpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDIs
CisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAg
YnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBs
ZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93
cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzEsIDJdLCAoKSA9PiBpbnN0YW5jZS5l
eHBvcnRzLnRocm93XzFfMigpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcvY2F0Y2hpbmcg
dGhlIGkzMiBwYXJhbWV0ZXIgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hQYXJhbUko
KSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNl
cHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfaSk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRo
cm93X2NhdGNoX3BhcmFtIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtF
eHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAg
IGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAg
ICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJSZXR1cm4sCisgICAgICAgIGtF
eHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVy
Lmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDAsIGluc3RhbmNlLmV4cG9ydHMudGhy
b3dfY2F0Y2hfcGFyYW0oMCkpOworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50
aHJvd19jYXRjaF9wYXJhbSgxKSk7CisgIGFzc2VydEVxdWFscygxMCwgaW5zdGFuY2UuZXhwb3J0
cy50aHJvd19jYXRjaF9wYXJhbSgxMCkpOworfSkoKTsKKworLy8gVGVzdCB0aGUgZW5jb2Rpbmcg
b2YgYSB0aHJvd24gZXhjZXB0aW9uIHdpdGggYW4gaW50ZWdlciBleGNlcHRpb24uCisoZnVuY3Rp
b24gVGVzdFRocm93UGFyYW1JKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVp
bGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2kpOworICBidWls
ZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19wYXJhbSIsIGtTaWdfdl9pKQorICAgICAgLmFkZEJvZHko
WworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQs
CisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIs
IGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50
aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMu
ZXgsIFs1XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSg1KSk7CisgIGFzc2Vy
dFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFs0MjQyNDJdLCAoKSA9
PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDQyNDI0MikpOworfSkoKTsKKworLy8gVGVz
dCB0aHJvd2luZy9jYXRjaGluZyB0aGUgZjMyIHBhcmFtZXRlciB2YWx1ZS4KKyhmdW5jdGlvbiBU
ZXN0VGhyb3dDYXRjaFBhcmFtRigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9mKTsKKyAgYnVp
bGRlci5hZGRGdW5jdGlvbigidGhyb3dfY2F0Y2hfcGFyYW0iLCBrU2lnX2ZfZikKKyAgICAgIC5h
ZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtRjMyLAorICAgICAgICAgIGtFeHByTG9j
YWxHZXQsIDAsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHBy
RjMyQ29uc3QsIDAsIDAsIDAsIDAsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAg
ICAgICBrRXhwclJldHVybiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRF
cXVhbHMoNS4wLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDUuMCkpOworICBh
c3NlcnRFcXVhbHMoMTAuNSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgxMC41
KSk7Cit9KSgpOworCisvLyBUZXN0IHRoZSBlbmNvZGluZyBvZiBhIHRocm93biBleGNlcHRpb24g
d2l0aCBhIGZsb2F0IHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd1BhcmFtRigpIHsKKyAgbGV0
IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl9mKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfcGFyYW0i
LCBrU2lnX3ZfZikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwK
KyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBi
dWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxl
dCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dz
KGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbNS4wXSwgKCkgPT4gaW5zdGFuY2UuZXhw
b3J0cy50aHJvd19wYXJhbSg1LjApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5z
dGFuY2UuZXhwb3J0cy5leCwgWzEwLjVdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3Bh
cmFtKDEwLjUpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcvY2F0Y2hpbmcgYW4gSTY0IHZh
bHVlCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hQYXJhbUwoKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3ZfbCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X2NhdGNoX3BhcmFtIiwga1Np
Z19pX2kpCisgICAgICAuYWRkTG9jYWxzKGtXYXNtSTY0LCAxKQorICAgICAgLmFkZEJvZHkoWwor
ICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckk2NFVDb252ZXJ0STMyLAor
ICAgICAgICBrRXhwckxvY2FsU2V0LCAxLAorICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisg
ICAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQs
CisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0
LAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAgICAga0V4cHJJNjRFcSwKKyAg
ICAgICAgICBrRXhwcklmLCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEs
CisgICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMCwKKyAg
ICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRF
cXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSg1KSk7CisgIGFzc2Vy
dEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDApKTsKKyAgYXNz
ZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oLTEpKTsKK30p
KCk7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3duIGV4Y2VwdGlvbiB3aXRoIGFu
IEk2NCB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dQYXJhbUwoKSB7CisgIGxldCBidWlsZGVy
ID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRh
ZyhrU2lnX3ZfbCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X3BhcmFtIiwga1NpZ192
X2lpKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAg
ICBrRXhwckk2NFVDb252ZXJ0STMyLAorICAgICAgICBrRXhwckk2NENvbnN0LCAzMiwKKyAgICAg
ICAga0V4cHJJNjRTaGwsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAgIGtFeHBy
STY0VUNvbnZlcnRJMzIsCisgICAgICAgIGtFeHBySTY0SW9yLAorICAgICAgICBrRXhwclRocm93
LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZL
aW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRl
ci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNl
LmV4cG9ydHMuZXgsIFs0Mjk0OTY3Mjk2NW5dLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93
X3BhcmFtKDEwLCA1KSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4
cG9ydHMuZXgsIFstNDI5NDk2NzI4M25dLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3Bh
cmFtKC0xLCAxMykpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2luZy9jYXRjaGluZyB0aGUgRjY0
IHBhcmFtZXRlciB2YWx1ZQorKGZ1bmN0aW9uIFRlc3RUaHJvd0NhdGNoUGFyYW1EKCkgeworICBs
ZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVp
bGRlci5hZGRUYWcoa1NpZ192X2QpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19jYXRj
aF9wYXJhbSIsIGtTaWdfZF9kKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwg
a1dhc21GNjQsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwclRo
cm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJGNjRDb25zdCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByUmV0dXJu
LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3Rh
bmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFscyg1LjAsIGluc3Rh
bmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oNS4wKSk7CisgIGFzc2VydEVxdWFscygxMC41
LCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDEwLjUpKTsKK30pKCk7CisKKy8v
IFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3duIGV4Y2VwdGlvbiB3aXRoIGFuIGY2NCB2YWx1
ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dQYXJhbUQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdh
c21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zf
ZCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X3BhcmFtIiwga1NpZ192X2YpCisgICAg
ICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByRjY0
Q29udmVydEYzMiwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSkuZXhwb3J0
RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4
Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3Nl
cnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbNS4wXSwgKCkgPT4g
aW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSg1LjApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhp
bnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzEwMDAwMDAwXSwgKCkgPT4gaW5zdGFuY2Uu
ZXhwb3J0cy50aHJvd19wYXJhbSgxMDAwMDAwMC41KSk7Cit9KSgpOworCisvLyBUZXN0IHRoZSBl
bmNvZGluZyBvZiBhIGNvbXB1dGVkIHBhcmFtZXRlciB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhy
b3dQYXJhbUNvbXB1dGVkKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2kpOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJ0aHJvd19leHByX3dpdGhfcGFyYW1zIiwga1NpZ192X2RkaSkKKyAgICAg
IC5hZGRCb2R5KFsKKyAgICAgICAgLy8gcDIgKiAocDAgKyBtaW4ocDAsIHAxKSl8MCAtIDIwCisg
ICAgICAgIGtFeHByTG9jYWxHZXQsIDIsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAg
ICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAg
IGtFeHByRjY0TWluLAorICAgICAgICBrRXhwckY2NEFkZCwKKyAgICAgICAga0V4cHJJMzJTQ29u
dmVydEY2NCwKKyAgICAgICAga0V4cHJJMzJNdWwsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDIw
LAorICAgICAgICBrRXhwckkzMlN1YiwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAg
ICAgXSkuZXhwb3J0RnVuYygpCisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRl
cm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgp
OworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFst
OF0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfZXhwcl93aXRoX3BhcmFtcygxLjUsIDIu
NSwgNCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4
LCBbMTJdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X2V4cHJfd2l0aF9wYXJhbXMoNS43
LCAyLjUsIDQpKTsKK30pKCk7CisKKy8vIE5vdyB0aGF0IHdlIGtub3cgY2F0Y2hpbmcgd29ya3Mg
bG9jYWxseSwgd2UgdGVzdCBjYXRjaGluZyBleGNlcHRpb25zIHRoYXQKKy8vIGNyb3NzIGZ1bmN0
aW9uIGJvdW5kYXJpZXMgYW5kL29yIHJhaXNlZCBieSBKYXZhU2NyaXB0LgorKGZ1bmN0aW9uIFRl
c3RDYXRjaENyb3NzRnVuY3Rpb25zKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2kpOworCisg
IC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGhyb3dpbmcgZnJvbSBKUy4gSXQgaXMgaW1wb3J0ZWQg
YnkgdGhlIFdhc20gbW9kdWxlCisgIC8vIGFzIHRocm93X2kuCisgIGZ1bmN0aW9uIHRocm93X3Zh
bHVlKHZhbHVlKSB7CisgICAgdGhyb3cgdmFsdWU7CisgIH0KKyAgbGV0IHNpZ19pbmRleCA9IGJ1
aWxkZXIuYWRkVHlwZShrU2lnX3ZfaSk7CisgIGxldCBrSlNUaHJvd0kgPSBidWlsZGVyLmFkZElt
cG9ydCgiIiwgInRocm93X2kiLCBzaWdfaW5kZXgpOworCisgIC8vIEhlbHBlciBmdW5jdGlvbiB0
aGF0IHRocm93cyBhIHN0cmluZy4gV2FzbSBzaG91bGQgbm90IGNhdGNoIGl0LgorICBmdW5jdGlv
biB0aHJvd19zdHJpbmcoKSB7CisgICAgdGhyb3cgInVzZSB3YXNtIjsKKyAgfQorICBzaWdfaW5k
ZXggPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X3YpOworICBsZXQga0pTVGhyb3dTdHJpbmcgPSBi
dWlsZGVyLmFkZEltcG9ydCgiIiwgInRocm93X3N0cmluZyIsIHNpZ19pbmRleCk7CisKKyAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRoYXQgdGhyb3dzIHVuZGVmaW5lZC4gV2FzbSBzaG91bGQgbm90IGNh
dGNoIGl0LgorICBmdW5jdGlvbiB0aHJvd191bmRlZmluZWQoKSB7CisgICAgdGhyb3cgdW5kZWZp
bmVkOworICB9CisgIGxldCBrSlNUaHJvd1VuZGVmaW5lZCA9IGJ1aWxkZXIuYWRkSW1wb3J0KCIi
LCAidGhyb3dfdW5kZWZpbmVkIiwgc2lnX2luZGV4KTsKKworICAvLyBIZWxwZXIgZnVuY3Rpb24g
dGhhdCB0aHJvd3MgYW4gZnAuIFdhc20gc2hvdWxkIG5vdCBjYXRjaCBpdC4KKyAgZnVuY3Rpb24g
dGhyb3dfZnAoKSB7CisgICAgdGhyb3cgMTAuNTsKKyAgfQorICBsZXQga0pTVGhyb3dGUCA9IGJ1
aWxkZXIuYWRkSW1wb3J0KCIiLCAidGhyb3dfZnAiLCBzaWdfaW5kZXgpOworCisgIC8vIEhlbHBl
ciBmdW5jdGlvbiB0aGF0IHRocm93cyBhIGxhcmdlIG51bWJlci4gV2FzbSBzaG91bGQgbm90IGNh
dGNoIGl0LgorICBmdW5jdGlvbiB0aHJvd19sYXJnZSgpIHsKKyAgICB0aHJvdyAxZSsyODsKKyAg
fQorICBsZXQga0pTVGhyb3dMYXJnZSA9IGJ1aWxkZXIuYWRkSW1wb3J0KCIiLCAidGhyb3dfbGFy
Z2UiLCBzaWdfaW5kZXgpOworCisgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGhyb3dpbmcgZnJv
bSBXZWJBc3NlbWJseS4KKyAgbGV0IGtXYXNtVGhyb3dGdW5jdGlvbiA9CisgICAgYnVpbGRlci5h
ZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAg
a0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSkK
KyAgICAgIC5pbmRleDsKKworICAvLyBTY2VuYXJpbyAxOiBUaHJvdyBhbmQgY2F0Y2ggYXBwZWFy
IG9uIHRoZSBzYW1lIGZ1bmN0aW9uLiBUaGlzIHNob3VsZAorICAvLyBoYXBwZW4gaW4gY2FzZSBv
ZiBpbmxpbmluZywgZm9yIGV4YW1wbGUuCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInNhbWVfc2Nv
cGUiLCBrU2lnX2lfaSkKKyAgICAuYWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21JMzIs
CisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDAsCisg
ICAgICAgIGtFeHBySTMyTmUsCisgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAg
ICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAg
ICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJJ
MzJDb25zdCwgNjMsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICBrRXhwckVuZAor
ICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJzYW1l
X3Njb3BlX2lnbm9yZSIsIGtTaWdfaV9pKQorICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJU
cnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4
cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgIGtF
eHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgXSkKKyAgICAuZXhwb3J0
RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInNhbWVfc2NvcGVfbXVsdGlwbGUiLCBr
U2lnX2lfaSkKKyAgICAvLyBwYXRoID0gMDsKKyAgICAvLworICAgIC8vIHRyeSB7CisgICAgLy8g
ICB0cnkgeworICAgIC8vICAgICB0cnkgeworICAgIC8vICAgICAgIGlmIChwID09IDEpCisgICAg
Ly8gICAgICAgICB0aHJvdyAxOworICAgIC8vICAgICAgIHBhdGggfD0gMgorICAgIC8vICAgICB9
IGNhdGNoICh2KSB7CisgICAgLy8gICAgICAgcGF0aCB8PSB2IHwgNDsKKyAgICAvLyAgICAgICB0
aHJvdyBwYXRoOworICAgIC8vICAgICB9CisgICAgLy8gICAgIGlmIChwID09IDIpCisgICAgLy8g
ICAgICAgdGhyb3cgcGF0aHw4OworICAgIC8vICAgICBwYXRoIHw9IDE2OworICAgIC8vICAgfSBj
YXRjaCAodikgeworICAgIC8vICAgICBwYXRoIHw9IHYgfCAzMjsKKyAgICAvLyAgICAgdGhyb3cg
cGF0aDsKKyAgICAvLyAgIH0KKyAgICAvLyAgIGlmIChwID09IDMpCisgICAgLy8gICAgIHRocm93
IHBhdGh8NjQ7CisgICAgLy8gICBwYXRoIHw9IDEyOAorICAgIC8vIH0gY2F0Y2ggKHYpIHsKKyAg
ICAvLyAgIHBhdGggfD0gdiB8IDI1NjsKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyByZXR1cm4g
cGF0aDsKKyAgICAvLworICAgIC8vIHAgPT0gMSAtPiBwYXRoID09IDI5MworICAgIC8vIHAgPT0g
MiAtPiBwYXRoID09IDI5OAorICAgIC8vIHAgPT0gMyAtPiBwYXRoID09IDMzOAorICAgIC8vIGVs
c2UgICAtPiBwYXRoID09IDE0NgorICAgIC5hZGRMb2NhbHMoa1dhc21JMzIsIDEpCisgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUcnks
IGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAg
ICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAg
ICAgICAgICAgICBrRXhwckkzMkVxLAorICAgICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQs
CisgICAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICAgICAgICBrRXhw
clRocm93LCBleGNlcHQsCisgICAgICAgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAg
ICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAg
ICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAgICAgIGtFeHBySTMyQ29uc3Qs
IDQsCisgICAgICAgICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICAgICAgICBrRXhwclRocm93
LCBleGNlcHQsCisgICAgICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgICAgICBr
RXhwckVuZCwKKyAgICAgICAgICAgIGtFeHByTG9jYWxUZWUsIDEsCisgICAgICAgICAgICBrRXhw
ckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAgICAg
IGtFeHBySTMyRXEsCisgICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAg
ICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDgsCisg
ICAgICAgICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICAgICAgICBrRXhwclRocm93LCBleGNl
cHQsCisgICAgICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgICAgICBrRXhwckVu
ZCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDE2LAorICAgICAgICAgICAga0V4cHJJMzJJ
b3IsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgICAga0V4cHJJMzJD
b25zdCwgMzIsCisgICAgICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAgICAgIGtFeHByVGhy
b3csIGV4Y2VwdCwKKyAgICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgICAga0V4
cHJFbmQsCisgICAgICAgICAga0V4cHJMb2NhbFRlZSwgMSwKKyAgICAgICAgICBrRXhwckxvY2Fs
R2V0LCAwLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDMsCisgICAgICAgICAga0V4cHJJMzJF
cSwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwckxvY2Fs
R2V0LCAxLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgLyo2ND0qLyAxOTIsIDAsCisgICAg
ICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAg
ICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAg
ICAga0V4cHJJMzJDb25zdCwgLyoxMjg9Ki8gMTI4LCAxLAorICAgICAgICAgIGtFeHBySTMySW9y
LAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwg
LyoyNTY9Ki8gMTI4LCAyLAorICAgICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICBrRXhwckVu
ZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgLy8gU2NlbmFyaW8gMjogQ2F0Y2hl
cyBhbiBleGNlcHRpb24gcmFpc2VkIGZyb20gdGhlIGRpcmVjdCBjYWxsZWUuCisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oImZyb21fZGlyZWN0X2NhbGxlZSIsIGtTaWdfaV9pKQorICAgIC5hZGRCb2R5
KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwK
KyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtXYXNtVGhyb3dGdW5jdGlvbiwKKyAgICAgICAg
a0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgIGtFeHBy
RW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICAvLyBTY2VuYXJpbyAzOiBDYXRj
aGVzIGFuIGV4Y2VwdGlvbiByYWlzZWQgZnJvbSBhbiBpbmRpcmVjdCBjYWxsZWUuCisgIGxldCBz
aWdfdl9pID0gYnVpbGRlci5hZGRUeXBlKGtTaWdfdl9pKTsKKyAgYnVpbGRlci5hcHBlbmRUb1Rh
YmxlKFtrV2FzbVRocm93RnVuY3Rpb24sIGtXYXNtVGhyb3dGdW5jdGlvbl0pOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJmcm9tX2luZGlyZWN0X2NhbGxlZSIsIGtTaWdfaV9paSkKKyAgICAuYWRk
Qm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgIGtFeHByTG9jYWxHZXQs
IDAsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAgIGtFeHByQ2FsbEluZGlyZWN0
LCBzaWdfdl9pLCBrVGFibGVaZXJvLAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAg
a0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAga0V4cHJFbmQKKyAgICBdKQorICAgIC5leHBvcnRG
dW5jKCk7CisKKyAgLy8gU2NlbmFyaW8gNDogRG9lcyBub3QgY2F0Y2ggYW4gZXhjZXB0aW9uIHJh
aXNlZCBpbiBKUywgZXZlbiBpZiBwcmltaXRpdmUKKyAgLy8gdmFsdWVzIGFyZSBiZWluZyB1c2Vk
IGFzIGV4Y2VwdGlvbnMuCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImlfZnJvbV9qcyIsIGtTaWdf
aV9pKQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAg
a0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtKU1Rocm93SSwK
KyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAg
ICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByRW5kLAorICAgIF0pCisgICAgLmV4
cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJzdHJpbmdfZnJvbV9qcyIsIGtT
aWdfdl92KQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAg
ICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrSlNUaHJvd1N0cmluZywKKyAgICAgIGtFeHByQ2F0Y2gs
IGV4Y2VwdCwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByRW5kLAorICAg
IF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJmcF9mcm9t
X2pzIiwga1NpZ192X3YpCisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtXYXNtVm9p
ZCwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtKU1Rocm93RlAsCisgICAgICBrRXhwckNh
dGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICBrRXhwckVuZCwK
KyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigibGFy
Z2VfZnJvbV9qcyIsIGtTaWdfdl92KQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBr
V2FzbVZvaWQsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrSlNUaHJvd0xhcmdlLAorICAg
ICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAg
a0V4cHJFbmQsCisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVu
Y3Rpb24oInVuZGVmaW5lZF9mcm9tX2pzIiwga1NpZ192X3YpCisgICAgLmFkZEJvZHkoWworICAg
ICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtKU1Ro
cm93VW5kZWZpbmVkLAorICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwclVu
cmVhY2hhYmxlLAorICAgICAga0V4cHJFbmQsCisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOwor
CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyIiOiB7CisgICAgICB0aHJv
d19pOiB0aHJvd192YWx1ZSwKKyAgICAgIHRocm93X3N0cmluZzogdGhyb3dfc3RyaW5nLAorICAg
ICAgdGhyb3dfZnA6IHRocm93X2ZwLAorICAgICAgdGhyb3dfbGFyZ2UsIHRocm93X2xhcmdlLAor
ICAgICAgdGhyb3dfdW5kZWZpbmVkOiB0aHJvd191bmRlZmluZWQKKyAgfX0pOworCisgIGFzc2Vy
dEVxdWFscyg2MywgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlKDApKTsKKyAgYXNzZXJ0RXF1
YWxzKDEwMjQsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZSgxMDI0KSk7CisgIGFzc2VydEVx
dWFscygtMywgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlKC0zKSk7CisgIGFzc2VydEVxdWFs
cygtMSwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX2lnbm9yZSgtMSkpOworICBhc3NlcnRF
cXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX2lnbm9yZSgxKSk7CisgIGFzc2Vy
dEVxdWFscygweDdGRkZGRkZGLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfaWdub3JlKDB4
N0ZGRkZGRkYpKTsKKyAgYXNzZXJ0RXF1YWxzKDEwMjQsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9z
Y29wZV9pZ25vcmUoMTAyNCkpOworICBhc3NlcnRFcXVhbHMoLTEsIGluc3RhbmNlLmV4cG9ydHMu
c2FtZV9zY29wZV9pZ25vcmUoLTEpKTsKKyAgYXNzZXJ0RXF1YWxzKDI5MywgaW5zdGFuY2UuZXhw
b3J0cy5zYW1lX3Njb3BlX211bHRpcGxlKDEpKTsKKyAgYXNzZXJ0RXF1YWxzKDI5OCwgaW5zdGFu
Y2UuZXhwb3J0cy5zYW1lX3Njb3BlX211bHRpcGxlKDIpKTsKKyAgYXNzZXJ0RXF1YWxzKDMzOCwg
aW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX211bHRpcGxlKDMpKTsKKyAgYXNzZXJ0RXF1YWxz
KDE0NiwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX211bHRpcGxlKDApKTsKKyAgYXNzZXJ0
RXF1YWxzKC0xMDAyNCwgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2RpcmVjdF9jYWxsZWUoLTEwMDI0
KSk7CisgIGFzc2VydEVxdWFscygzMzM0MzMzLCBpbnN0YW5jZS5leHBvcnRzLmZyb21fZGlyZWN0
X2NhbGxlZSgzMzM0MzMzKSk7CisgIGFzc2VydEVxdWFscygtMSwgaW5zdGFuY2UuZXhwb3J0cy5m
cm9tX2RpcmVjdF9jYWxsZWUoMHhGRkZGRkZGRikpOworICBhc3NlcnRFcXVhbHMoMHg3RkZGRkZG
RiwgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2RpcmVjdF9jYWxsZWUoMHg3RkZGRkZGRikpOworICBh
c3NlcnRFcXVhbHMoMTAsIGluc3RhbmNlLmV4cG9ydHMuZnJvbV9pbmRpcmVjdF9jYWxsZWUoMTAs
IDApKTsKKyAgYXNzZXJ0RXF1YWxzKDc3LCBpbnN0YW5jZS5leHBvcnRzLmZyb21faW5kaXJlY3Rf
Y2FsbGVlKDc3LCAxKSk7CisKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzKCgpID0+IGluc3RhbmNlLmV4
cG9ydHMuaV9mcm9tX2pzKDEwKSwgMTApOworICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5z
dGFuY2UuZXhwb3J0cy5pX2Zyb21fanMoLTEwKSwgLTEwKTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxz
KGluc3RhbmNlLmV4cG9ydHMuc3RyaW5nX2Zyb21fanMsICJ1c2Ugd2FzbSIpOworICBhc3NlcnRU
aHJvd3NFcXVhbHMoaW5zdGFuY2UuZXhwb3J0cy5mcF9mcm9tX2pzLCAxMC41KTsKKyAgYXNzZXJ0
VGhyb3dzRXF1YWxzKGluc3RhbmNlLmV4cG9ydHMubGFyZ2VfZnJvbV9qcywgMWUrMjgpOworICBh
c3NlcnRUaHJvd3NFcXVhbHMoaW5zdGFuY2UuZXhwb3J0cy51bmRlZmluZWRfZnJvbV9qcywgdW5k
ZWZpbmVkKTsKK30pKCk7CisKKy8vIERlbGVnYXRlIHdpdGggYSB0cnkgYmxvY2sgdGhhdCBuZXZl
ciB0aHJvd3MuCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlTm9UaHJvdygpIHsKKyAgbGV0IGJ1aWxk
ZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFk
ZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfdikK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAg
IGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAg
ICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAg
ICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4
cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2Vy
dEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRlc3QoKSk7Cit9KSgpOworCisvLyBEZWxlZ2F0
ZSBleGNlcHRpb24gaGFuZGxpbmcgdG8gb3V0ZXIgdHJ5L2NhdGNoIGJsb2NrLgorKGZ1bmN0aW9u
IFRlc3REZWxlZ2F0ZVRocm93KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVp
bGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQg
dGhyb3dfaWYgPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvdycsIGtTaWdfdl9pKQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJJ
Ziwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAg
IGtFeHByRW5kXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywg
a1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwK
KyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckxvY2FsR2V0
LCAwLAorICAgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIHRocm93X2lmLmluZGV4LAorICAg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICBrRXhwckRlbGVnYXRlLCAwLAor
ICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwK
KyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGluc3RhbmNlID0g
YnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0
cy50ZXN0KDApKTsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3RhbmNlLmV4cG9ydHMudGVzdCgxKSk7
Cit9KSgpOworCisvLyBObyBjYXRjaCBibG9jayBtYXRjaGluZyB0aGUgZXhjZXB0aW9uIGluIHRo
ZSBkZWxlZ2F0ZSB0YXJnZXQuCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlVGhyb3dOb0NhdGNoKCkg
eworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0
MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFk
ZFRhZyhrU2lnX3Zfdik7CisgIGxldCB0aHJvd19mbiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Ro
cm93Jywga1NpZ192X3YpCisgICAgICAgICAgICAgICAgICAgICAuYWRkQm9keShba0V4cHJUaHJv
dywgZXhjZXB0MV0pCisgICAgICAgICAgICAgICAgICAgICAuZXhwb3J0RnVuYygpOworICBsZXQg
dGhyb3dfZm5fMiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93XzInLCBrU2lnX3ZfdikKKyAg
ICAgICAgICAgICAgICAgICAgIC5hZGRCb2R5KFtrRXhwclRocm93LCBleGNlcHQyXSkKKyAgICAg
ICAgICAgICAgICAgICAgIC5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rl
c3QnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNt
STMyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByQ2Fs
bEZ1bmN0aW9uLCB0aHJvd19mbi5pbmRleCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEs
CisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0
MiwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckVuZCwKKyAgICAg
IF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7Cisg
IGFzc2VydFRocm93cyhpbnN0YW5jZS5leHBvcnRzLnRlc3QsIFdlYkFzc2VtYmx5LkV4Y2VwdGlv
bik7Cit9KSgpOworCisvLyBDaGVjayB0aGF0IHRoZSBleGNlcHRpb24gaXMgbWVyZ2VkIHByb3Bl
cmx5IHdoZW4gYm90aCBzY29wZXMgY2FuIHRocm93LgorKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZU1l
cmdlKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQg
ZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWls
ZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIC8vIHRocm93X2ZuOiAwIC0+IHJldHVybnMKKyAgLy8g
ICAgICAgICAgIDEgLT4gdGhyb3cgZXhjZXB0MQorICAvLyAgICAgICAgICAgMiAtPiB0aHJvdyBl
eGNlcHQyCisgIGxldCB0aHJvd19mbiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93Jywga1Np
Z192X2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgICAga0V4cHJCbG9jaywga1dhc21Wb2lk
LAorICAgICAgICAgICAga0V4cHJCbG9jaywga1dhc21Wb2lkLAorICAgICAgICAgICAgICBrRXhw
ckJsb2NrLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAg
ICAgICAgICAgICAgICBrRXhwckJyVGFibGUsIDIsIDAsIDEsIDIsCisgICAgICAgICAgICAgIGtF
eHByRW5kLAorICAgICAgICAgICAgICBrRXhwclJldHVybiwKKyAgICAgICAgICAgIGtFeHByRW5k
LAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckVuZCwK
KyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQyXSkKKyAgICAgIC5leHBvcnRGdW5jKCk7Cisg
IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfaWkpCisgICAgICAuYWRkQm9keShb
CisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAw
LAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCB0aHJvd19mbi5pbmRleCwKKyAgICAgICAg
ICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAg
ICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIHRocm93X2ZuLmluZGV4LAorICAgICAgICAgICAg
a0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICBr
RXhwckNhdGNoLCBleGNlcHQxLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAg
IGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBpbnN0YW5jZSA9IGJ1aWxkZXIu
aW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3RhbmNlLmV4cG9ydHMudGVzdCgx
LCAwKSk7CisgIGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRlc3QoMiwgMCks
IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFzc2VydEVxdWFscygyLCBpbnN0YW5jZS5leHBv
cnRzLnRlc3QoMCwgMSkpOworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50
ZXN0KDAsIDIpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICBhc3NlcnRFcXVhbHMoMSwgaW5z
dGFuY2UuZXhwb3J0cy50ZXN0KDAsIDApKTsKK30pKCk7CisKKy8vIERlbGVnYXRlIHRvIHNlY29u
ZCBlbmNsb3NpbmcgdHJ5IHNjb3BlLgorKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZTEoKSB7CisgIGxl
dCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWls
ZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCB0aHJvd19mbiA9IGJ1aWxkZXIuYWRkRnVuY3Rp
b24oJ3Rocm93Jywga1NpZ192X3YpCisgICAgICAgICAgICAgICAgICAgICAuYWRkQm9keShba0V4
cHJUaHJvdywgZXhjZXB0XSkKKyAgICAgICAgICAgICAgICAgICAgIC5leHBvcnRGdW5jKCk7Cisg
IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkz
MiwKKyAgICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgICAga0V4cHJD
YWxsRnVuY3Rpb24sIHRocm93X2ZuLmluZGV4LAorICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0
LCAxLAorICAgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMSwKKyAgICAgICAgICBrRXhwckNhdGNo
LCBleGNlcHQsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICAgIGtFeHBy
RW5kLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJJMzJDb25z
dCwgMywKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGluc3Rh
bmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMoMywgaW5zdGFuY2Uu
ZXhwb3J0cy50ZXN0KCkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZVVucmVhY2hh
YmxlKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQg
ZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWls
ZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2ln
X2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAg
ICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNl
cHQxLAorICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDAsCisgICAgICAgICAga0V4cHJJMzJDb25z
dCwgMSwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckkzMkNv
bnN0LCAyLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQyLAorICAgICAgICAgIGtFeHBySTMy
Q29uc3QsIDMsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3Rh
bmNlLmV4cG9ydHMudGVzdCgpKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVUb0Nh
bGxlcigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0
IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlv
bigndGVzdCcsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwg
a1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAgICBr
RXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMSwKKyAgICAgICAg
a0V4cHJDYXRjaEFsbCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsK
KyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydFRocm93cygoKSA9
PiBpbnN0YW5jZS5leHBvcnRzLnRlc3QoKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30pKCk7
CisKKyhmdW5jdGlvbiBUZXN0VGhyb3dCZWZvcmVVbnJlYWNoYWJsZSgpIHsKKyAgbGV0IGJ1aWxk
ZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRk
VGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3dfYmVmb3JlX3VucmVh
Y2hhYmxlJywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBr
V2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJV
bnJlYWNoYWJsZSwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBrRXhwckkzMkNv
bnN0LCA0MiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisKKyAg
bGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMoNDIs
IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfYmVmb3JlX3VucmVhY2hhYmxlKCkpOworfSkoKTsKKwor
KGZ1bmN0aW9uIFRlc3RVbnJlYWNoYWJsZUluQ2F0Y2hBbGwoKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93X2JlZm9yZV91bnJlYWNoYWJs
ZScsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21J
MzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICBrRXhwckNhdGNoQWxs
LAorICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwg
NDIsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworCisgIGxldCBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0
VGhyb3dXaXRoTG9jYWwoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVy
KCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oJ3Rocm93X3dpdGhfbG9jYWwnLCBrU2lnX2lfdikKKyAgICAuYWRkTG9jYWxz
KGtXYXNtSTMyLCA0KQorICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJJMzJDb25zdCwgNDIs
CisgICAgICAgIGtFeHByRjY0Q29uc3QsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAg
IGtFeHByVHJ5LCBrV2FzbUYzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAg
ICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJGMzJDb25zdCwgMCwgMCwgMCwgMCwK
KyAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByRHJvcCwgIC8vIERyb3AgdGhlIGYzMi4K
KyAgICAgICAga0V4cHJEcm9wLCAgLy8gRHJvcCB0aGUgZjY0LgorICAgICAgICAvLyBMZWF2ZSB0
aGUgJzQyJyBvbiB0aGUgc3RhY2suCisgICAgXSkuZXhwb3J0RnVuYygpOworCisgIGxldCBpbnN0
YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDQyLCBpbnN0YW5j
ZS5leHBvcnRzLnRocm93X3dpdGhfbG9jYWwoKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdENh
dGNobGVzc1RyeSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsK
KyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRG
dW5jdGlvbignY2F0Y2hsZXNzX3RyeScsIGtTaWdfdl9pKQorICAgIC5hZGRCb2R5KFsKKyAgICAg
ICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAg
ICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2Vw
dCwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgXSkuZXhwb3J0
RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywg
ZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3Nl
cnREb2VzTm90VGhyb3coKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5jYXRjaGxlc3NfdHJ5KDApKTsK
KyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW10sICgp
ID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hsZXNzX3RyeSgxKSk7Cit9KSgpOworCisvLyBEZWxl
Z2F0ZSB0byBhIHJlZ3VsYXIgYmxvY2sgaW5zaWRlIGEgdHJ5IGJsb2NrLgorKGZ1bmN0aW9uIFRl
c3REZWxlZ2F0ZVRvQmxvY2soKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWls
ZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxk
ZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAg
ICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByQmxvY2ssIGtXYXNtSTMyLAor
ICAgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAgICBrRXhwclRocm93
LCBleGNlcHQsCisgICAgICAgICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICAgIGtFeHBy
RW5kLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJJMzJDb25z
dCwgMiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgICAgYXNz
ZXJ0VGhyb3dzKCgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoKSwgRXJyb3IsIC9kZWxlZ2F0ZSB0
YXJnZXQgaXNuJ3QgYSB0cnkgYmxvY2svKTsKK30pKCk7CisKKy8vIERlbGVnYXRlIHRvIGEgcmVn
dWxhciBibG9jayB3aXRoIG5vIG91dGVyIHRyeSAoZGVsZWdhdGUgdG8gY2FsbGVyKS4KKyhmdW5j
dGlvbiBUZXN0RGVsZWdhdGVUb0NhbGxlcldpdGhCbG9jaygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBu
ZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtT
aWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfdl92KQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICBrRXhwckJsb2NrLCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4
cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAg
ICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0
RnVuYygpOworICBhc3NlcnRUaHJvd3MoKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSgpLCBFcnJv
ciwgL2RlbGVnYXRlIHRhcmdldCBpc24ndCBhIHRyeSBibG9jay8pOworfSkoKTsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS92OC9tanN1bml0LmpzIGIvSlNUZXN0cy93YXNtL3Y4L21qc3VuaXQu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDI0NTViYWE2MTY5NjZmOGQwYTZiOWRlMWRhMzIxMWZmYTJkYTM2Mgot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9tanN1bml0LmpzCkBAIC0wLDAgKzEs
ODI2IEBACisvLyBDb3B5cmlnaHQgMjAwOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6Cisv
LworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisv
LyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8v
ICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Z1bmN0aW9uIE1qc1VuaXRBc3Nl
cnRpb25FcnJvcihtZXNzYWdlKSB7CisgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CisgIC8vIFRl
bXBvcmFyaWx5IGluc3RhbGwgYSBjdXN0b20gc3RhY2sgdHJhY2UgZm9ybWF0dGVyIGFuZCByZXN0
b3JlIHRoZQorICAvLyBwcmV2aW91cyB2YWx1ZS4KKyAgbGV0IHByZXZQcmVwYXJlU3RhY2tUcmFj
ZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOworICB0cnkgeworICAgIEVycm9yLnByZXBhcmVT
dGFja1RyYWNlID0gTWpzVW5pdEFzc2VydGlvbkVycm9yLnByZXBhcmVTdGFja1RyYWNlOworICAg
IC8vIFRoaXMgYWxsb3dzIGZldGNoaW5nIHRoZSBzdGFjayB0cmFjZSB1c2luZyBUcnlDYXRjaDo6
U3RhY2tUcmFjZS4KKyAgICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKCJNanNVbml0QXNzZXJ0aW9u
RXJyb3IiKS5zdGFjazsKKyAgfSBmaW5hbGx5IHsKKyAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFj
ZSA9IHByZXZQcmVwYXJlU3RhY2tUcmFjZTsKKyAgfQorfQorCisvKgorICogVGhpcyBmaWxlIGlz
IGluY2x1ZGVkIGluIGFsbCBtaW5pIGpzdW5pdCB0ZXN0IGNhc2VzLiAgVGhlIHRlc3QKKyAqIGZy
YW1ld29yayBleHBlY3RzIGxpbmVzIHRoYXQgc2lnbmFsIGZhaWxlZCB0ZXN0cyB0byBzdGFydCB3
aXRoCisgKiB0aGUgZi13b3JkIGFuZCBpZ25vcmUgYWxsIG90aGVyIGxpbmVzLgorICovCisKK01q
c1VuaXRBc3NlcnRpb25FcnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7Cisg
IHJldHVybiB0aGlzLm1lc3NhZ2UgKyAiXG5cblN0YWNrOiAiICsgdGhpcy5zdGFjazsKK307CisK
KworLy8gRXhwZWN0ZWQgYW5kIGZvdW5kIHZhbHVlcyB0aGUgc2FtZSBvYmplY3RzLCBvciB0aGUg
c2FtZSBwcmltaXRpdmUKKy8vIHZhbHVlcy4KKy8vIEZvciBrbm93biBwcmltaXRpdmUgdmFsdWVz
LCBwbGVhc2UgdXNlIGFzc2VydEVxdWFscy4KK3ZhciBhc3NlcnRTYW1lOworCisvLyBJbnZlcnNl
IG9mIGFzc2VydFNhbWUuCit2YXIgYXNzZXJ0Tm90U2FtZTsKKworLy8gRXhwZWN0ZWQgYW5kIGZv
dW5kIHZhbHVlcyBhcmUgaWRlbnRpY2FsIHByaW1pdGl2ZSB2YWx1ZXMgb3IgZnVuY3Rpb25zCisv
LyBvciBzaW1pbGFybHkgc3RydWN0dXJlZCBvYmplY3RzIChjaGVja2luZyBpbnRlcm5hbCBwcm9w
ZXJ0aWVzCisvLyBvZiwgZS5nLiwgTnVtYmVyIGFuZCBEYXRlIG9iamVjdHMsIHRoZSBlbGVtZW50
cyBvZiBhcnJheXMKKy8vIGFuZCB0aGUgcHJvcGVydGllcyBvZiBub24tQXJyYXkgb2JqZWN0cyku
Cit2YXIgYXNzZXJ0RXF1YWxzOworCisvLyBEZWVwIGVxdWFsaXR5IHByZWRpY2F0ZSB1c2VkIGJ5
IGFzc2VydEVxdWFscy4KK3ZhciBkZWVwRXF1YWxzOworCisvLyBFeHBlY3RlZCBhbmQgZm91bmQg
dmFsdWVzIGFyZSBub3QgaWRlbnRpY2FsIHByaW1pdGl2ZSB2YWx1ZXMgb3IgZnVuY3Rpb25zCisv
LyBvciBzaW1pbGFybHkgc3RydWN0dXJlZCBvYmplY3RzIChjaGVja2luZyBpbnRlcm5hbCBwcm9w
ZXJ0aWVzCisvLyBvZiwgZS5nLiwgTnVtYmVyIGFuZCBEYXRlIG9iamVjdHMsIHRoZSBlbGVtZW50
cyBvZiBhcnJheXMKKy8vIGFuZCB0aGUgcHJvcGVydGllcyBvZiBub24tQXJyYXkgb2JqZWN0cyku
Cit2YXIgYXNzZXJ0Tm90RXF1YWxzOworCisvLyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGV4cGVj
dGVkIGFuZCBmb3VuZCB2YWx1ZSBpcyB3aXRoaW4gY2VydGFpbiB0b2xlcmFuY2UuCit2YXIgYXNz
ZXJ0RXF1YWxzRGVsdGE7CisKKy8vIFRoZSBmb3VuZCBvYmplY3QgaXMgYW4gQXJyYXkgd2l0aCB0
aGUgc2FtZSBsZW5ndGggYW5kIGVsZW1lbnRzCisvLyBhcyB0aGUgZXhwZWN0ZWQgb2JqZWN0LiBU
aGUgZXhwZWN0ZWQgb2JqZWN0IGRvZXNuJ3QgbmVlZCB0byBiZSBhbiBBcnJheSwKKy8vIGFzIGxv
bmcgYXMgaXQncyAiYXJyYXktaXNoIi4KK3ZhciBhc3NlcnRBcnJheUVxdWFsczsKKworLy8gVGhl
IGZvdW5kIG9iamVjdCBtdXN0IGhhdmUgdGhlIHNhbWUgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGFz
IHRoZQorLy8gZXhwZWN0ZWQgb2JqZWN0LiBUaGUgdHlwZSBvZiBvYmplY3QgaXNuJ3QgY2hlY2tl
ZC4KK3ZhciBhc3NlcnRQcm9wZXJ0aWVzRXF1YWw7CisKKy8vIEFzc2VydCB0aGF0IHRoZSBzdHJp
bmcgY29udmVyc2lvbiBvZiB0aGUgZm91bmQgdmFsdWUgaXMgZXF1YWwgdG8KKy8vIHRoZSBleHBl
Y3RlZCBzdHJpbmcuIE9ubHkga2VwdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHBsZWFz
ZQorLy8gY2hlY2sgdGhlIHJlYWwgc3RydWN0dXJlIG9mIHRoZSBmb3VuZCB2YWx1ZS4KK3ZhciBh
c3NlcnRUb1N0cmluZ0VxdWFsczsKKworLy8gQ2hlY2tzIHRoYXQgdGhlIGZvdW5kIHZhbHVlIGlz
IHRydWUuIFVzZSB3aXRoIGJvb2xlYW4gZXhwcmVzc2lvbnMKKy8vIGZvciB0ZXN0cyB0aGF0IGRv
ZXNuJ3QgaGF2ZSB0aGVpciBvd24gYXNzZXJ0WFhYIGZ1bmN0aW9uLgordmFyIGFzc2VydFRydWU7
CisKKy8vIENoZWNrcyB0aGF0IHRoZSBmb3VuZCB2YWx1ZSBpcyBmYWxzZS4KK3ZhciBhc3NlcnRG
YWxzZTsKKworLy8gQ2hlY2tzIHRoYXQgdGhlIGZvdW5kIHZhbHVlIGlzIG51bGwuIEtlcHQgZm9y
IGhpc3RvcmljYWwgY29tcGF0aWJpbGl0eSwKKy8vIHBsZWFzZSBqdXN0IHVzZSBhc3NlcnRFcXVh
bHMobnVsbCwgZXhwZWN0ZWQpLgordmFyIGFzc2VydE51bGw7CisKKy8vIENoZWNrcyB0aGF0IHRo
ZSBmb3VuZCB2YWx1ZSBpcyAqbm90KiBudWxsLgordmFyIGFzc2VydE5vdE51bGw7CisKKy8vIEFz
c2VydCB0aGF0IHRoZSBwYXNzZWQgZnVuY3Rpb24gb3IgZXZhbCBjb2RlIHRocm93cyBhbiBleGNl
cHRpb24uCisvLyBUaGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IGlzIGFuIGV4Y2VwdGlvbiBj
b25zdHJ1Y3RvciB0aGF0IHRoZQorLy8gdGhyb3duIGV4Y2VwdGlvbiBpcyBjaGVja2VkIGFnYWlu
c3Qgd2l0aCAiaW5zdGFuY2VvZiIuCisvLyBUaGUgb3B0aW9uYWwgdGhpcmQgYXJndW1lbnQgaXMg
YSBtZXNzYWdlIHR5cGUgc3RyaW5nIG9yIFJlZ0V4cCBvYmplY3QgdGhhdCBpcworLy8gY29tcGFy
ZWQgdG8gdGhlIG1lc3NhZ2Ugb2YgdGhlIHRocm93biBleGNlcHRpb24uCit2YXIgYXNzZXJ0VGhy
b3dzOworCisvLyBBc3NlcnQgdGhhdCB0aGUgcGFzc2VkIGZ1bmN0aW9uIHRocm93cyBhbiBleGNl
cHRpb24uCisvLyBUaGUgZXhjZXB0aW9uIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgc2Vjb25kIGFy
Z3VtZW50IHVzaW5nIGFzc2VydEVxdWFscy4KK3ZhciBhc3NlcnRUaHJvd3NFcXVhbHM7CisKKy8v
IEFzc2VydCB0aGF0IHRoZSBwYXNzZWQgcHJvbWlzZSBkb2VzIG5vdCByZXNvbHZlLCBidXQgZXZl
bnR1YWxseSB0aHJvd3MgYW4KKy8vIGV4Y2VwdGlvbi4gVGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1
bWVudCBpcyBhbiBleGNlcHRpb24gY29uc3RydWN0b3IgdGhhdCB0aGUKKy8vIHRocm93biBleGNl
cHRpb24gaXMgY2hlY2tlZCBhZ2FpbnN0IHdpdGggImluc3RhbmNlb2YiLgorLy8gVGhlIG9wdGlv
bmFsIHRoaXJkIGFyZ3VtZW50IGlzIGEgbWVzc2FnZSB0eXBlIHN0cmluZyBvciBSZWdFeHAgb2Jq
ZWN0IHRoYXQgaXMKKy8vIGNvbXBhcmVkIHRvIHRoZSBtZXNzYWdlIG9mIHRoZSB0aHJvd24gZXhj
ZXB0aW9uLgordmFyIGFzc2VydFRocm93c0FzeW5jOworCisvLyBBc3NlcnQgdGhhdCB0aGUgcGFz
c2VkIGZ1bmN0aW9uIG9yIGV2YWwgY29kZSBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24uCit2
YXIgYXNzZXJ0RG9lc05vdFRocm93OworCisvLyBBc3NlcnRzIHRoYXQgdGhlIGZvdW5kIHZhbHVl
IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBjb25zdHJ1Y3RvciBwYXNzZWQKKy8vIGFzIHRoZSBzZWNv
bmQgYXJndW1lbnQuCit2YXIgYXNzZXJ0SW5zdGFuY2VvZjsKKworLy8gQXNzZXJ0IHRoYXQgdGhp
cyBjb2RlIGlzIG5ldmVyIGV4ZWN1dGVkIChpLmUuLCBhbHdheXMgZmFpbHMgaWYgZXhlY3V0ZWQp
LgordmFyIGFzc2VydFVucmVhY2hhYmxlOworCisvLyBBc3NlcnQgdGhhdCB0aGUgZnVuY3Rpb24g
Y29kZSBpcyAobm90KSBvcHRpbWl6ZWQuCisvLyBPbmx5IHdvcmtzIHdpdGggLS1hbGxvdy1uYXRp
dmVzLXN5bnRheC4KK3ZhciBhc3NlcnRPcHRpbWl6ZWQ7Cit2YXIgYXNzZXJ0VW5vcHRpbWl6ZWQ7
CisKKy8vIEFzc2VydCB0aGF0IGEgc3RyaW5nIGNvbnRhaW5zIGFub3RoZXIgZXhwZWN0ZWQgc3Vi
c3RyaW5nLgordmFyIGFzc2VydENvbnRhaW5zOworCisvLyBBc3NlcnQgdGhhdCBhIHN0cmluZyBt
YXRjaGVzIGEgZ2l2ZW4gcmVnZXguCit2YXIgYXNzZXJ0TWF0Y2hlczsKKworLy8gQXNzZXJ0IHRo
YXQgYSBwcm9taXNlIHJlc29sdmVzIG9yIHJlamVjdHMuCisvLyBQYXJhbWV0ZXJzOgorLy8ge3By
b21pc2V9IC0gdGhlIHByb21pc2UKKy8vIHtzdWNjZXNzfSAtIG9wdGlvbmFsIC0gYSBjYWxsYmFj
ayB3aGljaCBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZQorLy8gICAgICAgICAgICAg
cmVzb2x2aW5nIHByb21pc2UuCisvLyAge2ZhaWx9IC0gICBvcHRpb25hbCAtIGEgY2FsbGJhY2sg
d2hpY2ggaXMgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUKKy8vICAgICAgICAgICAgIHJl
amVjdGluZyBwcm9taXNlLiBJZiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCBidXQgbm8ge2ZhaWx9
CisvLyAgICAgICAgICAgICBjYWxsYmFjayBpcyBzZXQsIHRoZSBlcnJvciBpcyBwcm9wYWdhdGVk
IG91dCBvZiB0aGUgcHJvbWlzZQorLy8gICAgICAgICAgICAgY2hhaW4uCit2YXIgYXNzZXJ0UHJv
bWlzZVJlc3VsdDsKKwordmFyIHByb21pc2VUZXN0Q2hhaW47Cit2YXIgcHJvbWlzZVRlc3RDb3Vu
dCA9IDA7CisKKy8vIFRoZXNlIGJpdHMgbXVzdCBiZSBpbiBzeW5jIHdpdGggYml0cyBkZWZpbmVk
IGluIFJ1bnRpbWVfR2V0T3B0aW1pemF0aW9uU3RhdHVzCit2YXIgVjhPcHRpbWl6YXRpb25TdGF0
dXMgPSB7CisgIGtJc0Z1bmN0aW9uOiAxIDw8IDAsCisgIGtOZXZlck9wdGltaXplOiAxIDw8IDEs
CisgIGtBbHdheXNPcHRpbWl6ZTogMSA8PCAyLAorICBrTWF5YmVEZW9wdGVkOiAxIDw8IDMsCisg
IGtPcHRpbWl6ZWQ6IDEgPDwgNCwKKyAga1R1cmJvRmFubmVkOiAxIDw8IDUsCisgIGtJbnRlcnBy
ZXRlZDogMSA8PCA2LAorICBrTWFya2VkRm9yT3B0aW1pemF0aW9uOiAxIDw8IDcsCisgIGtNYXJr
ZWRGb3JDb25jdXJyZW50T3B0aW1pemF0aW9uOiAxIDw8IDgsCisgIGtPcHRpbWl6aW5nQ29uY3Vy
cmVudGx5OiAxIDw8IDksCisgIGtJc0V4ZWN1dGluZzogMSA8PCAxMCwKKyAga1RvcG1vc3RGcmFt
ZUlzVHVyYm9GYW5uZWQ6IDEgPDwgMTEsCisgIGtMaXRlTW9kZTogMSA8PCAxMiwKKyAga01hcmtl
ZEZvckRlb3B0aW1pemF0aW9uOiAxIDw8IDEzLAorICBrQmFzZWxpbmU6IDEgPDwgMTQsCisgIGtU
b3Btb3N0RnJhbWVJc0ludGVycHJldGVkOiAxIDw8IDE1LAorICBrVG9wbW9zdEZyYW1lSXNCYXNl
bGluZTogMSA8PCAxNiwKK307CisKKy8vIFJldHVybnMgdHJ1ZSBpZiAtLWxpdGUtbW9kZSBpcyBv
biBhbmQgd2UgY2FuJ3QgZXZlciB0dXJuIG9uIG9wdGltaXphdGlvbi4KK3ZhciBpc05ldmVyT3B0
aW1pemVMaXRlTW9kZTsKKworLy8gUmV0dXJucyB0cnVlIGlmIC0tbm8tb3B0IG1vZGUgaXMgb24u
Cit2YXIgaXNOZXZlck9wdGltaXplOworCisvLyBSZXR1cm5zIHRydWUgaWYgLS1hbHdheXMtb3B0
IG1vZGUgaXMgb24uCit2YXIgaXNBbHdheXNPcHRpbWl6ZTsKKworLy8gUmV0dXJucyB0cnVlIGlm
IGdpdmVuIGZ1bmN0aW9uIGluIGludGVycHJldGVkLgordmFyIGlzSW50ZXJwcmV0ZWQ7CisKKy8v
IFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBmdW5jdGlvbiBpbiBiYXNlbGluZS4KK3ZhciBpc0Jhc2Vs
aW5lOworCisvLyBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24gaW4gdW5vcHRpbWl6ZWQg
KGludGVycHJldGVkIG9yIGJhc2VsaW5lKS4KK3ZhciBpc1Vub3B0aW1pemVkOworCisvLyBSZXR1
cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24gaXMgb3B0aW1pemVkLgordmFyIGlzT3B0aW1pemVk
OworCisvLyBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24gaXMgY29tcGlsZWQgYnkgVHVy
Ym9GYW4uCit2YXIgaXNUdXJib0Zhbm5lZDsKKworLy8gTW9ua2V5LXBhdGNoYWJsZSBhbGwtcHVy
cG9zZSBmYWlsdXJlIGhhbmRsZXIuCit2YXIgZmFpbFdpdGhNZXNzYWdlOworCisvLyBSZXR1cm5z
IHRoZSBmb3JtYXR0ZWQgZmFpbHVyZSB0ZXh0LiAgVXNlZCBieSB0ZXN0LWFzeW5jLmpzLgordmFy
IGZvcm1hdEZhaWx1cmVUZXh0OworCisvLyBSZXR1cm5zIGEgcHJldHR5LXByaW50ZWQgc3RyaW5n
IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXNzZWQgdmFsdWUuCit2YXIgcHJldHR5UHJpbnRlZDsK
KworKGZ1bmN0aW9uICgpIHsgIC8vIFNjb3BlIGZvciB1dGlsaXR5IGZ1bmN0aW9ucy4KKworICB2
YXIgT2JqZWN0UHJvdG90eXBlVG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwor
ICB2YXIgTnVtYmVyUHJvdG90eXBlVmFsdWVPZiA9IE51bWJlci5wcm90b3R5cGUudmFsdWVPZjsK
KyAgdmFyIEJvb2xlYW5Qcm90b3R5cGVWYWx1ZU9mID0gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVP
ZjsKKyAgdmFyIFN0cmluZ1Byb3RvdHlwZVZhbHVlT2YgPSBTdHJpbmcucHJvdG90eXBlLnZhbHVl
T2Y7CisgIHZhciBEYXRlUHJvdG90eXBlVmFsdWVPZiA9IERhdGUucHJvdG90eXBlLnZhbHVlT2Y7
CisgIHZhciBSZWdFeHBQcm90b3R5cGVUb1N0cmluZyA9IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJp
bmc7CisgIHZhciBBcnJheVByb3RvdHlwZUZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFj
aDsKKyAgdmFyIEFycmF5UHJvdG90eXBlSm9pbiA9IEFycmF5LnByb3RvdHlwZS5qb2luOworICB2
YXIgQXJyYXlQcm90b3R5cGVNYXAgPSBBcnJheS5wcm90b3R5cGUubWFwOworICB2YXIgQXJyYXlQ
cm90b3R5cGVQdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7CisgIHZhciBKU09OU3RyaW5naWZ5
ID0gSlNPTi5zdHJpbmdpZnk7CisKKyAgdmFyIEJpZ0ludFByb3RvdHlwZVZhbHVlT2Y7CisgIC8v
IFRPRE8obmVpcyk6IFJlbW92ZSB0cnktY2F0Y2ggb25jZSBCaWdJbnRzIGFyZSBlbmFibGVkIGJ5
IGRlZmF1bHQuCisgIHRyeSB7CisgICAgQmlnSW50UHJvdG90eXBlVmFsdWVPZiA9IEJpZ0ludC5w
cm90b3R5cGUudmFsdWVPZjsKKyAgfSBjYXRjaCAoZSkge30KKworICBmdW5jdGlvbiBjbGFzc09m
KG9iamVjdCkgeworICAgIC8vIEFyZ3VtZW50IG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVk
LgorICAgIHZhciBzdHJpbmcgPSBPYmplY3RQcm90b3R5cGVUb1N0cmluZy5jYWxsKG9iamVjdCk7
CisgICAgLy8gU3RyaW5nIGhhcyBmb3JtYXQgW29iamVjdCA8Q2xhc3NOYW1lPl0uCisgICAgcmV0
dXJuIHN0cmluZy5zdWJzdHJpbmcoOCwgc3RyaW5nLmxlbmd0aCAtIDEpOworICB9CisKKworICBm
dW5jdGlvbiBWYWx1ZU9mKHZhbHVlKSB7CisgICAgc3dpdGNoIChjbGFzc09mKHZhbHVlKSkgewor
ICAgICAgY2FzZSAiTnVtYmVyIjoKKyAgICAgICAgcmV0dXJuIE51bWJlclByb3RvdHlwZVZhbHVl
T2YuY2FsbCh2YWx1ZSk7CisgICAgICBjYXNlICJCaWdJbnQiOgorICAgICAgICByZXR1cm4gQmln
SW50UHJvdG90eXBlVmFsdWVPZi5jYWxsKHZhbHVlKTsKKyAgICAgIGNhc2UgIlN0cmluZyI6Cisg
ICAgICAgIHJldHVybiBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mLmNhbGwodmFsdWUpOworICAgICAg
Y2FzZSAiQm9vbGVhbiI6CisgICAgICAgIHJldHVybiBCb29sZWFuUHJvdG90eXBlVmFsdWVPZi5j
YWxsKHZhbHVlKTsKKyAgICAgIGNhc2UgIkRhdGUiOgorICAgICAgICByZXR1cm4gRGF0ZVByb3Rv
dHlwZVZhbHVlT2YuY2FsbCh2YWx1ZSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
dmFsdWU7CisgICAgfQorICB9CisKKworICBwcmV0dHlQcmludGVkID0gZnVuY3Rpb24gcHJldHR5
UHJpbnRlZCh2YWx1ZSkgeworICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7CisgICAgICBjYXNl
ICJzdHJpbmciOgorICAgICAgICByZXR1cm4gSlNPTlN0cmluZ2lmeSh2YWx1ZSk7CisgICAgICBj
YXNlICJiaWdpbnQiOgorICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKSArICJuIjsKKyAgICAg
IGNhc2UgIm51bWJlciI6CisgICAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiAoMSAvIHZhbHVlKSA8
IDApIHJldHVybiAiLTAiOworICAgICAgICAvLyBGQUxMVEhST1VHSC4KKyAgICAgIGNhc2UgImJv
b2xlYW4iOgorICAgICAgY2FzZSAidW5kZWZpbmVkIjoKKyAgICAgIGNhc2UgImZ1bmN0aW9uIjoK
KyAgICAgIGNhc2UgInN5bWJvbCI6CisgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpOworICAg
ICAgY2FzZSAib2JqZWN0IjoKKyAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gIm51
bGwiOworICAgICAgICB2YXIgb2JqZWN0Q2xhc3MgPSBjbGFzc09mKHZhbHVlKTsKKyAgICAgICAg
c3dpdGNoIChvYmplY3RDbGFzcykgeworICAgICAgICAgIGNhc2UgIk51bWJlciI6CisgICAgICAg
ICAgY2FzZSAiQmlnSW50IjoKKyAgICAgICAgICBjYXNlICJTdHJpbmciOgorICAgICAgICAgIGNh
c2UgIkJvb2xlYW4iOgorICAgICAgICAgIGNhc2UgIkRhdGUiOgorICAgICAgICAgICAgcmV0dXJu
IG9iamVjdENsYXNzICsgIigiICsgcHJldHR5UHJpbnRlZChWYWx1ZU9mKHZhbHVlKSkgKyAiKSI7
CisgICAgICAgICAgY2FzZSAiUmVnRXhwIjoKKyAgICAgICAgICAgIHJldHVybiBSZWdFeHBQcm90
b3R5cGVUb1N0cmluZy5jYWxsKHZhbHVlKTsKKyAgICAgICAgICBjYXNlICJBcnJheSI6CisgICAg
ICAgICAgICB2YXIgbWFwcGVkID0gQXJyYXlQcm90b3R5cGVNYXAuY2FsbCgKKyAgICAgICAgICAg
ICAgICB2YWx1ZSwgcHJldHR5UHJpbnRlZEFycmF5RWxlbWVudCk7CisgICAgICAgICAgICB2YXIg
am9pbmVkID0gQXJyYXlQcm90b3R5cGVKb2luLmNhbGwobWFwcGVkLCAiLCIpOworICAgICAgICAg
ICAgcmV0dXJuICJbIiArIGpvaW5lZCArICJdIjsKKyAgICAgICAgICBjYXNlICJVaW50OEFycmF5
IjoKKyAgICAgICAgICBjYXNlICJJbnQ4QXJyYXkiOgorICAgICAgICAgIGNhc2UgIkludDE2QXJy
YXkiOgorICAgICAgICAgIGNhc2UgIlVpbnQxNkFycmF5IjoKKyAgICAgICAgICBjYXNlICJVaW50
MzJBcnJheSI6CisgICAgICAgICAgY2FzZSAiSW50MzJBcnJheSI6CisgICAgICAgICAgY2FzZSAi
RmxvYXQzMkFycmF5IjoKKyAgICAgICAgICBjYXNlICJGbG9hdDY0QXJyYXkiOgorICAgICAgICAg
ICAgdmFyIGpvaW5lZCA9IEFycmF5UHJvdG90eXBlSm9pbi5jYWxsKHZhbHVlLCAiLCIpOworICAg
ICAgICAgICAgcmV0dXJuIG9iamVjdENsYXNzICsgIihbIiArIGpvaW5lZCArICJdKSI7CisgICAg
ICAgICAgY2FzZSAiT2JqZWN0IjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Q2xhc3MgKyAiKCIgKyBTdHJpbmcodmFsdWUp
ICsgIikiOworICAgICAgICB9CisgICAgICAgIC8vIGNsYXNzT2YoKSByZXR1cm5lZCAiT2JqZWN0
Ii4KKyAgICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lOworICAgICAgICBp
ZiAobmFtZSkgcmV0dXJuIG5hbWUgKyAiKCkiOworICAgICAgICByZXR1cm4gIk9iamVjdCgpIjsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiLS0gdW5rbm93biB2YWx1ZSAtLSI7Cisg
ICAgfQorICB9CisKKworICBmdW5jdGlvbiBwcmV0dHlQcmludGVkQXJyYXlFbGVtZW50KHZhbHVl
LCBpbmRleCwgYXJyYXkpIHsKKyAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGluZGV4
IGluIGFycmF5KSkgcmV0dXJuICIiOworICAgIHJldHVybiBwcmV0dHlQcmludGVkKHZhbHVlKTsK
KyAgfQorCisKKyAgZmFpbFdpdGhNZXNzYWdlID0gZnVuY3Rpb24gZmFpbFdpdGhNZXNzYWdlKG1l
c3NhZ2UpIHsKKyAgICB0aHJvdyBuZXcgTWpzVW5pdEFzc2VydGlvbkVycm9yKG1lc3NhZ2UpOwor
ICB9CisKKyAgZm9ybWF0RmFpbHVyZVRleHQgPSBmdW5jdGlvbihleHBlY3RlZFRleHQsIGZvdW5k
LCBuYW1lX29wdCkgeworICAgIHZhciBtZXNzYWdlID0gIkZhaWwiICsgInVyZSI7CisgICAgaWYg
KG5hbWVfb3B0KSB7CisgICAgICAvLyBGaXggdGhpcyB3aGVuIHdlIGRpdGNoIHRoZSBvbGQgdGVz
dCBydW5uZXIuCisgICAgICBtZXNzYWdlICs9ICIgKCIgKyBuYW1lX29wdCArICIpIjsKKyAgICB9
CisKKyAgICB2YXIgZm91bmRUZXh0ID0gcHJldHR5UHJpbnRlZChmb3VuZCk7CisgICAgaWYgKGV4
cGVjdGVkVGV4dC5sZW5ndGggPD0gNDAgJiYgZm91bmRUZXh0Lmxlbmd0aCA8PSA0MCkgeworICAg
ICAgbWVzc2FnZSArPSAiOiBleHBlY3RlZCA8IiArIGV4cGVjdGVkVGV4dCArICI+IGZvdW5kIDwi
ICsgZm91bmRUZXh0ICsgIj4iOworICAgIH0gZWxzZSB7CisgICAgICBtZXNzYWdlICs9ICI6XG5l
eHBlY3RlZDpcbiIgKyBleHBlY3RlZFRleHQgKyAiXG5mb3VuZDpcbiIgKyBmb3VuZFRleHQ7Cisg
ICAgfQorICAgIHJldHVybiBtZXNzYWdlOworICB9CisKKyAgZnVuY3Rpb24gZmFpbChleHBlY3Rl
ZFRleHQsIGZvdW5kLCBuYW1lX29wdCkgeworICAgIHJldHVybiBmYWlsV2l0aE1lc3NhZ2UoZm9y
bWF0RmFpbHVyZVRleHQoZXhwZWN0ZWRUZXh0LCBmb3VuZCwgbmFtZV9vcHQpKTsKKyAgfQorCisK
KyAgZnVuY3Rpb24gZGVlcE9iamVjdEVxdWFscyhhLCBiKSB7CisgICAgdmFyIGFQcm9wcyA9IE9i
amVjdC5rZXlzKGEpOworICAgIGFQcm9wcy5zb3J0KCk7CisgICAgdmFyIGJQcm9wcyA9IE9iamVj
dC5rZXlzKGIpOworICAgIGJQcm9wcy5zb3J0KCk7CisgICAgaWYgKCFkZWVwRXF1YWxzKGFQcm9w
cywgYlByb3BzKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKCFkZWVwRXF1YWxzKGFb
YVByb3BzW2ldXSwgYlthUHJvcHNbaV1dKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisKKworICBkZWVwRXF1YWxzID0gZnVu
Y3Rpb24gZGVlcEVxdWFscyhhLCBiKSB7CisgICAgaWYgKGEgPT09IGIpIHsKKyAgICAgIC8vIENo
ZWNrIGZvciAtMC4KKyAgICAgIGlmIChhID09PSAwKSByZXR1cm4gKDEgLyBhKSA9PT0gKDEgLyBi
KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAodHlwZW9mIGEgIT09IHR5cGVv
ZiBiKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKHR5cGVvZiBhID09PSAibnVtYmVyIikgcmV0dXJu
IGlzTmFOKGEpICYmIGlzTmFOKGIpOworICAgIGlmICh0eXBlb2YgYSAhPT0gIm9iamVjdCIgJiYg
dHlwZW9mIGEgIT09ICJmdW5jdGlvbiIpIHJldHVybiBmYWxzZTsKKyAgICAvLyBOZWl0aGVyIGEg
bm9yIGIgaXMgcHJpbWl0aXZlLgorICAgIHZhciBvYmplY3RDbGFzcyA9IGNsYXNzT2YoYSk7Cisg
ICAgaWYgKG9iamVjdENsYXNzICE9PSBjbGFzc09mKGIpKSByZXR1cm4gZmFsc2U7CisgICAgaWYg
KG9iamVjdENsYXNzID09PSAiUmVnRXhwIikgeworICAgICAgLy8gRm9yIFJlZ0V4cCwganVzdCBj
b21wYXJlIHBhdHRlcm4gYW5kIGZsYWdzIHVzaW5nIGl0cyB0b1N0cmluZy4KKyAgICAgIHJldHVy
biBSZWdFeHBQcm90b3R5cGVUb1N0cmluZy5jYWxsKGEpID09PQorICAgICAgICAgICAgIFJlZ0V4
cFByb3RvdHlwZVRvU3RyaW5nLmNhbGwoYik7CisgICAgfQorICAgIC8vIEZ1bmN0aW9ucyBhcmUg
b25seSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcy4KKyAgICBpZiAob2JqZWN0Q2xhc3MgPT09ICJG
dW5jdGlvbiIpIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0Q2xhc3MgPT09ICJBcnJheSIp
IHsKKyAgICAgIHZhciBlbGVtZW50Q291bnQgPSAwOworICAgICAgaWYgKGEubGVuZ3RoICE9PSBi
Lmxlbmd0aCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKCFkZWVwRXF1YWxzKGFb
aV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgaWYgKG9iamVjdENsYXNzID09PSAiU3RyaW5nIiB8fCBvYmplY3RDbGFzcyA9PT0g
Ik51bWJlciIgfHwKKyAgICAgIG9iamVjdENsYXNzID09PSAiQmlnSW50IiB8fCBvYmplY3RDbGFz
cyA9PT0gIkJvb2xlYW4iIHx8CisgICAgICBvYmplY3RDbGFzcyA9PT0gIkRhdGUiKSB7CisgICAg
ICBpZiAoVmFsdWVPZihhKSAhPT0gVmFsdWVPZihiKSkgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gZGVlcE9iamVjdEVxdWFscyhhLCBiKTsKKyAgfQorCisgIGFzc2VydFNhbWUgPSBm
dW5jdGlvbiBhc3NlcnRTYW1lKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgICBpZiAo
T2JqZWN0LmlzKGV4cGVjdGVkLCBmb3VuZCkpIHJldHVybjsKKyAgICBmYWlsKHByZXR0eVByaW50
ZWQoZXhwZWN0ZWQpLCBmb3VuZCwgbmFtZV9vcHQpOworICB9OworCisgIGFzc2VydE5vdFNhbWUg
PSBmdW5jdGlvbiBhc3NlcnROb3RTYW1lKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAg
ICBpZiAoIU9iamVjdC5pcyhleHBlY3RlZCwgZm91bmQpKSByZXR1cm47CisgICAgZmFpbCgibm90
IHNhbWUgYXMgIiArIHByZXR0eVByaW50ZWQoZXhwZWN0ZWQpLCBmb3VuZCwgbmFtZV9vcHQpOwor
ICB9CisKKyAgYXNzZXJ0RXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBm
b3VuZCwgbmFtZV9vcHQpIHsKKyAgICBpZiAoIWRlZXBFcXVhbHMoZm91bmQsIGV4cGVjdGVkKSkg
eworICAgICAgZmFpbChwcmV0dHlQcmludGVkKGV4cGVjdGVkKSwgZm91bmQsIG5hbWVfb3B0KTsK
KyAgICB9CisgIH07CisKKyAgYXNzZXJ0Tm90RXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0Tm90RXF1
YWxzKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgICBpZiAoZGVlcEVxdWFscyhmb3Vu
ZCwgZXhwZWN0ZWQpKSB7CisgICAgICBmYWlsKCJub3QgZXF1YWxzIHRvICIgKyBwcmV0dHlQcmlu
dGVkKGV4cGVjdGVkKSwgZm91bmQsIG5hbWVfb3B0KTsKKyAgICB9CisgIH07CisKKworICBhc3Nl
cnRFcXVhbHNEZWx0YSA9CisgICAgICBmdW5jdGlvbiBhc3NlcnRFcXVhbHNEZWx0YShleHBlY3Rl
ZCwgZm91bmQsIGRlbHRhLCBuYW1lX29wdCkgeworICAgIGlmIChNYXRoLmFicyhleHBlY3RlZCAt
IGZvdW5kKSA+IGRlbHRhKSB7CisgICAgICBmYWlsKHByZXR0eVByaW50ZWQoZXhwZWN0ZWQpICsg
IiArLSAiICsgcHJldHR5UHJpbnRlZChkZWx0YSksIGZvdW5kLCBuYW1lX29wdCk7CisgICAgfQor
ICB9OworCisKKyAgYXNzZXJ0QXJyYXlFcXVhbHMgPSBmdW5jdGlvbiBhc3NlcnRBcnJheUVxdWFs
cyhleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAgdmFyIHN0YXJ0ID0gIiI7CisgICAg
aWYgKG5hbWVfb3B0KSB7CisgICAgICBzdGFydCA9IG5hbWVfb3B0ICsgIiAtICI7CisgICAgfQor
ICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5sZW5ndGgsIGZvdW5kLmxlbmd0aCwgc3RhcnQgKyAi
YXJyYXkgbGVuZ3RoIik7CisgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gZm91bmQubGVuZ3Ro
KSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFtpXSwgZm91bmRbaV0sCisgICAgICAgICAgICAg
ICAgICAgICBzdGFydCArICJhcnJheSBlbGVtZW50IGF0IGluZGV4ICIgKyBpKTsKKyAgICAgIH0K
KyAgICB9CisgIH07CisKKworICBhc3NlcnRQcm9wZXJ0aWVzRXF1YWwgPSBmdW5jdGlvbiBhc3Nl
cnRQcm9wZXJ0aWVzRXF1YWwoZXhwZWN0ZWQsIGZvdW5kLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9vcHQpIHsKKyAgICAvLyBD
aGVjayBwcm9wZXJ0aWVzIG9ubHkuCisgICAgaWYgKCFkZWVwT2JqZWN0RXF1YWxzKGV4cGVjdGVk
LCBmb3VuZCkpIHsKKyAgICAgIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCk7CisgICAg
fQorICB9OworCisKKyAgYXNzZXJ0VG9TdHJpbmdFcXVhbHMgPSBmdW5jdGlvbiBhc3NlcnRUb1N0
cmluZ0VxdWFscyhleHBlY3RlZCwgZm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9vcHQpIHsKKyAgICBpZiAoZXhwZWN0ZWQg
IT09IFN0cmluZyhmb3VuZCkpIHsKKyAgICAgIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29w
dCk7CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0VHJ1ZSA9IGZ1bmN0aW9uIGFzc2VydFRydWUo
dmFsdWUsIG5hbWVfb3B0KSB7CisgICAgYXNzZXJ0RXF1YWxzKHRydWUsIHZhbHVlLCBuYW1lX29w
dCk7CisgIH07CisKKworICBhc3NlcnRGYWxzZSA9IGZ1bmN0aW9uIGFzc2VydEZhbHNlKHZhbHVl
LCBuYW1lX29wdCkgeworICAgIGFzc2VydEVxdWFscyhmYWxzZSwgdmFsdWUsIG5hbWVfb3B0KTsK
KyAgfTsKKworCisgIGFzc2VydE51bGwgPSBmdW5jdGlvbiBhc3NlcnROdWxsKHZhbHVlLCBuYW1l
X29wdCkgeworICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkgeworICAgICAgZmFpbCgibnVsbCIsIHZh
bHVlLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0Tm90TnVsbCA9IGZ1bmN0
aW9uIGFzc2VydE5vdE51bGwodmFsdWUsIG5hbWVfb3B0KSB7CisgICAgaWYgKHZhbHVlID09PSBu
dWxsKSB7CisgICAgICBmYWlsKCJub3QgbnVsbCIsIHZhbHVlLCBuYW1lX29wdCk7CisgICAgfQor
ICB9OworCisgIGZ1bmN0aW9uIGV4ZWN1dGVDb2RlKGNvZGUpIHsKKyAgICBpZiAodHlwZW9mIGNv
ZGUgPT09ICdmdW5jdGlvbicpICByZXR1cm4gY29kZSgpOworICAgIGlmICh0eXBlb2YgY29kZSA9
PT0gJ3N0cmluZycpIHJldHVybiBldmFsKGNvZGUpOworICAgIGZhaWxXaXRoTWVzc2FnZSgKKyAg
ICAgICAgJ0dpdmVuIGNvZGUgaXMgbmVpdGhlciBmdW5jdGlvbiBub3Igc3RyaW5nLCBidXQgJyAr
ICh0eXBlb2YgY29kZSkgKworICAgICAgICAnOiA8JyArIHByZXR0eVByaW50ZWQoY29kZSkgKyAn
PicpOworICB9CisKKyAgZnVuY3Rpb24gY2hlY2tFeGNlcHRpb24oZSwgdHlwZV9vcHQsIGNhdXNl
X29wdCkgeworICAgIGlmICh0eXBlX29wdCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBhc3NlcnRF
cXVhbHMoJ2Z1bmN0aW9uJywgdHlwZW9mIHR5cGVfb3B0KTsKKyAgICAgIGFzc2VydEluc3RhbmNl
b2YoZSwgdHlwZV9vcHQpOworICAgIH0KKyAgICBpZiAoUmVnRXhwICE9PSB1bmRlZmluZWQgJiYg
Y2F1c2Vfb3B0IGluc3RhbmNlb2YgUmVnRXhwKSB7CisgICAgICBhc3NlcnRNYXRjaGVzKGNhdXNl
X29wdCwgZS5tZXNzYWdlLCAnRXJyb3IgbWVzc2FnZScpOworICAgIH0gZWxzZSBpZiAoY2F1c2Vf
b3B0ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIGFzc2VydEVxdWFscyhjYXVzZV9vcHQsIGUubWVz
c2FnZSwgJ0Vycm9yIG1lc3NhZ2UnKTsKKyAgICB9CisgIH0KKworICBhc3NlcnRUaHJvd3MgPSBm
dW5jdGlvbiBhc3NlcnRUaHJvd3MoY29kZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkgeworICAgIGlm
IChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlX29wdCA9PT0gdW5kZWZpbmVkKSB7CisgICAg
ICBmYWlsV2l0aE1lc3NhZ2UoJ2ludmFsaWQgdXNlIG9mIGFzc2VydFRocm93cywgdW5rbm93biB0
eXBlX29wdCBnaXZlbicpOworICAgIH0KKyAgICBpZiAodHlwZV9vcHQgIT09IHVuZGVmaW5lZCAm
JiB0eXBlb2YgdHlwZV9vcHQgIT09ICdmdW5jdGlvbicpIHsKKyAgICAgIGZhaWxXaXRoTWVzc2Fn
ZSgKKyAgICAgICAgICAnaW52YWxpZCB1c2Ugb2YgYXNzZXJ0VGhyb3dzLCBtYXliZSB5b3Ugd2Fu
dCBhc3NlcnRUaHJvd3NFcXVhbHMnKTsKKyAgICB9CisgICAgdHJ5IHsKKyAgICAgIGV4ZWN1dGVD
b2RlKGNvZGUpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGNoZWNrRXhjZXB0aW9uKGUsIHR5
cGVfb3B0LCBjYXVzZV9vcHQpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBsZXQgbXNnID0g
J0RpZCBub3QgdGhyb3cgZXhjZXB0aW9uJzsKKyAgICBpZiAodHlwZV9vcHQgIT09IHVuZGVmaW5l
ZCAmJiB0eXBlX29wdC5uYW1lICE9PSB1bmRlZmluZWQpCisgICAgICBtc2cgKz0gJywgZXhwZWN0
ZWQgJyArIHR5cGVfb3B0Lm5hbWU7CisgICAgZmFpbFdpdGhNZXNzYWdlKG1zZyk7CisgIH07CisK
KyAgYXNzZXJ0VGhyb3dzRXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0VGhyb3dzRXF1YWxzKGZ1biwg
dmFsKSB7CisgICAgdHJ5IHsKKyAgICAgIGZ1bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
IGFzc2VydFNhbWUodmFsLCBlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZmFpbFdpdGhN
ZXNzYWdlKCdEaWQgbm90IHRocm93IGV4Y2VwdGlvbiwgZXhwZWN0ZWQgJyArIHByZXR0eVByaW50
ZWQodmFsKSk7CisgIH07CisKKyAgYXNzZXJ0VGhyb3dzQXN5bmMgPSBmdW5jdGlvbiBhc3NlcnRU
aHJvd3NBc3luYyhwcm9taXNlLCB0eXBlX29wdCwgY2F1c2Vfb3B0KSB7CisgICAgaWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPiAxICYmIHR5cGVfb3B0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgIGZhaWxX
aXRoTWVzc2FnZSgnaW52YWxpZCB1c2Ugb2YgYXNzZXJ0VGhyb3dzLCB1bmtub3duIHR5cGVfb3B0
IGdpdmVuJyk7CisgICAgfQorICAgIGlmICh0eXBlX29wdCAhPT0gdW5kZWZpbmVkICYmIHR5cGVv
ZiB0eXBlX29wdCAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAgZmFpbFdpdGhNZXNzYWdlKAorICAg
ICAgICAgICdpbnZhbGlkIHVzZSBvZiBhc3NlcnRUaHJvd3MsIG1heWJlIHlvdSB3YW50IGFzc2Vy
dFRocm93c0VxdWFscycpOworICAgIH0KKyAgICBsZXQgbXNnID0gJ1Byb21pc2UgZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24nOworICAgIGlmICh0eXBlX29wdCAhPT0gdW5kZWZpbmVkICYmIHR5cGVf
b3B0Lm5hbWUgIT09IHVuZGVmaW5lZCkKKyAgICAgIG1zZyArPSAnLCBleHBlY3RlZCAnICsgdHlw
ZV9vcHQubmFtZTsKKyAgICByZXR1cm4gYXNzZXJ0UHJvbWlzZVJlc3VsdCgKKyAgICAgICAgcHJv
bWlzZSwKKyAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gdGhyb3cgdGhlIGVycm9yIGFnYWlu
IHRvIGdldCBvdXQgb2YgdGhlIHByb21pc2UKKyAgICAgICAgLy8gY2hhaW4uCisgICAgICAgIHJl
cyA9PiBzZXRUaW1lb3V0KF8gPT4gZmFpbCgnPHRocm93PicsIHJlcywgbXNnKSwgMCksCisgICAg
ICAgIGUgPT4gY2hlY2tFeGNlcHRpb24oZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkpOworICB9Owor
CisgIGFzc2VydEluc3RhbmNlb2YgPSBmdW5jdGlvbiBhc3NlcnRJbnN0YW5jZW9mKG9iaiwgdHlw
ZSkgeworICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIHR5cGUpKSB7CisgICAgICB2YXIgYWN0dWFs
VHlwZU5hbWUgPSBudWxsOworICAgICAgdmFyIGFjdHVhbENvbnN0cnVjdG9yID0gb2JqICYmIE9i
amVjdC5nZXRQcm90b3R5cGVPZihvYmopLmNvbnN0cnVjdG9yOworICAgICAgaWYgKHR5cGVvZiBh
Y3R1YWxDb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICBhY3R1YWxUeXBlTmFt
ZSA9IGFjdHVhbENvbnN0cnVjdG9yLm5hbWUgfHwgU3RyaW5nKGFjdHVhbENvbnN0cnVjdG9yKTsK
KyAgICAgIH0KKyAgICAgIGZhaWxXaXRoTWVzc2FnZSgKKyAgICAgICAgICAnT2JqZWN0IDwnICsg
cHJldHR5UHJpbnRlZChvYmopICsgJz4gaXMgbm90IGFuIGluc3RhbmNlIG9mIDwnICsKKyAgICAg
ICAgICAodHlwZS5uYW1lIHx8IHR5cGUpICsgJz4nICsKKyAgICAgICAgICAoYWN0dWFsVHlwZU5h
bWUgPyAnIGJ1dCBvZiA8JyArIGFjdHVhbFR5cGVOYW1lICsgJz4nIDogJycpKTsKKyAgICB9Cisg
IH07CisKKyAgYXNzZXJ0RG9lc05vdFRocm93ID0gZnVuY3Rpb24gYXNzZXJ0RG9lc05vdFRocm93
KGNvZGUsIG5hbWVfb3B0KSB7CisgICAgdHJ5IHsKKyAgICAgIGV4ZWN1dGVDb2RlKGNvZGUpOwor
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGlmIChlIGluc3RhbmNlb2YgTWpzVW5pdEFzc2VydGlv
bkVycm9yKSB0aHJvdyBlOworICAgICAgZmFpbFdpdGhNZXNzYWdlKCJ0aHJldyBhbiBleGNlcHRp
b246ICIgKyAoZS5tZXNzYWdlIHx8IGUpKTsKKyAgICB9CisgIH07CisKKyAgYXNzZXJ0VW5yZWFj
aGFibGUgPSBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZShuYW1lX29wdCkgeworICAgIC8vIEZp
eCB0aGlzIHdoZW4gd2UgZGl0Y2ggdGhlIG9sZCB0ZXN0IHJ1bm5lci4KKyAgICB2YXIgbWVzc2Fn
ZSA9ICJGYWlsIiArICJ1cmU6IHVucmVhY2hhYmxlIjsKKyAgICBpZiAobmFtZV9vcHQpIHsKKyAg
ICAgIG1lc3NhZ2UgKz0gIiAtICIgKyBuYW1lX29wdDsKKyAgICB9CisgICAgZmFpbFdpdGhNZXNz
YWdlKG1lc3NhZ2UpOworICB9OworCisgIGFzc2VydENvbnRhaW5zID0gZnVuY3Rpb24oc3ViLCB2
YWx1ZSwgbmFtZV9vcHQpIHsKKyAgICBpZiAodmFsdWUgPT0gbnVsbCA/IChzdWIgIT0gbnVsbCkg
OiB2YWx1ZS5pbmRleE9mKHN1YikgPT0gLTEpIHsKKyAgICAgIGZhaWwoImNvbnRhaW5zICciICsg
U3RyaW5nKHN1YikgKyAiJyIsIHZhbHVlLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisgIGFz
c2VydE1hdGNoZXMgPSBmdW5jdGlvbihyZWdleHAsIHN0ciwgbmFtZV9vcHQpIHsKKyAgICBpZiAo
IShyZWdleHAgaW5zdGFuY2VvZiBSZWdFeHApKSB7CisgICAgICByZWdleHAgPSBuZXcgUmVnRXhw
KHJlZ2V4cCk7CisgICAgfQorICAgIGlmICghc3RyLm1hdGNoKHJlZ2V4cCkpIHsKKyAgICAgIGZh
aWwoInNob3VsZCBtYXRjaCAnIiArIHJlZ2V4cCArICInIiwgc3RyLCBuYW1lX29wdCk7CisgICAg
fQorICB9OworCisgIGZ1bmN0aW9uIGNvbmNhdGVuYXRlRXJyb3JzKHN0YWNrLCBleGNlcHRpb24p
IHsKKyAgICAvLyBJZiB0aGUgZXhjZXB0aW9uIGRvZXMgbm90IGNvbnRhaW4gYSBzdGFjayB0cmFj
ZSwgd3JhcCBpdCBpbiBhIG5ldyBFcnJvci4KKyAgICBpZiAoIWV4Y2VwdGlvbi5zdGFjaykgZXhj
ZXB0aW9uID0gbmV3IEVycm9yKGV4Y2VwdGlvbik7CisKKyAgICAvLyBJZiB0aGUgZXhjZXB0aW9u
IGFscmVhZHkgcHJvdmlkZXMgYSBzcGVjaWFsIHN0YWNrIHRyYWNlLCB3ZSBkbyBub3QgbW9kaWZ5
CisgICAgLy8gaXQuCisgICAgaWYgKHR5cGVvZiBleGNlcHRpb24uc3RhY2sgIT09ICdzdHJpbmcn
KSB7CisgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgIH0KKyAgICBleGNlcHRpb24uc3RhY2sg
PSBzdGFjayArICdcblxuJyArIGV4Y2VwdGlvbi5zdGFjazsKKyAgICByZXR1cm4gZXhjZXB0aW9u
OworICB9CisKKyAgYXNzZXJ0UHJvbWlzZVJlc3VsdCA9IGZ1bmN0aW9uKHByb21pc2UsIHN1Y2Nl
c3MsIGZhaWwpIHsKKyAgICBpZiAoc3VjY2VzcyAhPT0gdW5kZWZpbmVkKSBhc3NlcnRFcXVhbHMo
J2Z1bmN0aW9uJywgdHlwZW9mIHN1Y2Nlc3MpOworICAgIGlmIChmYWlsICE9PSB1bmRlZmluZWQp
IGFzc2VydEVxdWFscygnZnVuY3Rpb24nLCB0eXBlb2YgZmFpbCk7CisgICAgYXNzZXJ0SW5zdGFu
Y2VvZihwcm9taXNlLCBQcm9taXNlKTsKKyAgICBjb25zdCBzdGFjayA9IChuZXcgRXJyb3IoKSku
c3RhY2s7CisKKyAgICB2YXIgdGVzdF9wcm9taXNlID0gcHJvbWlzZS50aGVuKAorICAgICAgICBy
ZXN1bHQgPT4geworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoLS1wcm9taXNlVGVz
dENvdW50ID09IDApIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgaWYgKHN1
Y2Nlc3MgIT09IHVuZGVmaW5lZCkgc3VjY2VzcyhyZXN1bHQpOworICAgICAgICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIHRocm93IHRoZSBlcnJvciBh
Z2FpbiB0byBnZXQgb3V0IG9mIHRoZSBwcm9taXNlCisgICAgICAgICAgICAvLyBjaGFpbi4KKyAg
ICAgICAgICAgIHNldFRpbWVvdXQoXyA9PiB7CisgICAgICAgICAgICAgIHRocm93IGNvbmNhdGVu
YXRlRXJyb3JzKHN0YWNrLCBlKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgcmVzdWx0ID0+IHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAg
ICAgaWYgKC0tcHJvbWlzZVRlc3RDb3VudCA9PSAwKSB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgICAgIGlmIChmYWlsID09PSB1bmRlZmluZWQpIHRocm93IHJlc3VsdDsKKyAgICAg
ICAgICAgIGZhaWwocmVzdWx0KTsKKyAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAg
ICAvLyBVc2Ugc2V0VGltZW91dCB0byB0aHJvdyB0aGUgZXJyb3IgYWdhaW4gdG8gZ2V0IG91dCBv
ZiB0aGUgcHJvbWlzZQorICAgICAgICAgICAgLy8gY2hhaW4uCisgICAgICAgICAgICBzZXRUaW1l
b3V0KF8gPT4geworICAgICAgICAgICAgICB0aHJvdyBjb25jYXRlbmF0ZUVycm9ycyhzdGFjaywg
ZSk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAg
aWYgKCFwcm9taXNlVGVzdENoYWluKSBwcm9taXNlVGVzdENoYWluID0gUHJvbWlzZS5yZXNvbHZl
KCk7CisgICAgLy8gd2FpdFVudGlsRG9uZSBpcyBpZGVtcG90ZW50LgorICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICsrcHJvbWlzZVRlc3RDb3VudDsKKyAgICByZXR1cm4gcHJv
bWlzZVRlc3RDaGFpbi50aGVuKHRlc3RfcHJvbWlzZSk7CisgIH07CisKKyAgdmFyIE9wdGltaXph
dGlvblN0YXR1c0ltcGwgPSB1bmRlZmluZWQ7CisKKyAgdmFyIE9wdGltaXphdGlvblN0YXR1cyA9
IGZ1bmN0aW9uKGZ1bikgeworICAgIGlmIChPcHRpbWl6YXRpb25TdGF0dXNJbXBsID09PSB1bmRl
ZmluZWQpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIE9wdGltaXphdGlvblN0YXR1c0ltcGwgPSBu
ZXcgRnVuY3Rpb24oCisgICAgICAgICAgICAiZnVuIiwgInJldHVybiAlR2V0T3B0aW1pemF0aW9u
U3RhdHVzKGZ1bik7Iik7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRocm93IG5ldyBF
cnJvcigibmF0aXZlcyBzeW50YXggbm90IGFsbG93ZWQiKTsKKyAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIE9wdGltaXphdGlvblN0YXR1c0ltcGwoZnVuKTsKKyAgfQorCisgIGFzc2VydFVub3B0
aW1pemVkID0gZnVuY3Rpb24gYXNzZXJ0VW5vcHRpbWl6ZWQoCisgICAgICBmdW4sIG5hbWVfb3B0
LCBza2lwX2lmX21heWJlX2Rlb3B0ZWQgPSB0cnVlKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBP
cHRpbWl6YXRpb25TdGF0dXMoZnVuKTsKKyAgICAvLyBUZXN0cyB0aGF0IHVzZSBhc3NlcnRVbm9w
dGltaXplZCgpIGRvIG5vdCBtYWtlIHNlbnNlIGlmIC0tYWx3YXlzLW9wdAorICAgIC8vIG9wdGlv
biBpcyBwcm92aWRlZC4gU3VjaCB0ZXN0cyBtdXN0IGFkZCAtLW5vLWFsd2F5cy1vcHQgdG8gZmxh
Z3MgY29tbWVudC4KKyAgICBhc3NlcnRGYWxzZSgob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9u
U3RhdHVzLmtBbHdheXNPcHRpbWl6ZSkgIT09IDAsCisgICAgICAgICAgICAgICAgInRlc3QgZG9l
cyBub3QgbWFrZSBzZW5zZSB3aXRoIC0tYWx3YXlzLW9wdCIpOworICAgIGFzc2VydFRydWUoKG9w
dF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsIG5hbWVf
b3B0KTsKKyAgICBpZiAoc2tpcF9pZl9tYXliZV9kZW9wdGVkICYmCisgICAgICAgIChvcHRfc3Rh
dHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua01heWJlRGVvcHRlZCkgIT09IDApIHsKKyAgICAg
IC8vIFdoZW4gLS1kZW9wdC1ldmVyeS1uLXRpbWVzIGZsYWcgaXMgc3BlY2lmaWVkIGl0J3Mgbm8g
bG9uZ2VyIGd1YXJhbnRlZWQKKyAgICAgIC8vIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpcyBz
dGlsbCBkZW9wdGltaXplZCwgc28ga2VlcCBydW5uaW5nIHRoZSB0ZXN0CisgICAgICAvLyB0byBz
dHJlc3MgdGVzdCB0aGUgZGVvcHRpbWl6ZXIuCisgICAgICByZXR1cm47CisgICAgfQorICAgIHZh
ciBpc19vcHRpbWl6ZWQgPSAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtPcHRp
bWl6ZWQpICE9PSAwOworICAgIGFzc2VydEZhbHNlKGlzX29wdGltaXplZCwgbmFtZV9vcHQpOwor
ICB9CisKKyAgYXNzZXJ0T3B0aW1pemVkID0gZnVuY3Rpb24gYXNzZXJ0T3B0aW1pemVkKAorICAg
ICAgZnVuLCBuYW1lX29wdCwgc2tpcF9pZl9tYXliZV9kZW9wdGVkID0gdHJ1ZSkgeworICAgIHZh
ciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKGZ1bik7CisgICAgLy8gVGVzdHMgdGhh
dCB1c2UgYXNzZXJ0T3B0aW1pemVkKCkgZG8gbm90IG1ha2Ugc2Vuc2UgZm9yIExpdGUgbW9kZSB3
aGVyZQorICAgIC8vIG9wdGltaXphdGlvbiBpcyBhbHdheXMgZGlzYWJsZWQsIGV4cGxpY2l0bHkg
ZXhpdCB0aGUgdGVzdCB3aXRoIGEgd2FybmluZy4KKyAgICBpZiAob3B0X3N0YXR1cyAmIFY4T3B0
aW1pemF0aW9uU3RhdHVzLmtMaXRlTW9kZSkgeworICAgICAgcHJpbnQoIldhcm5pbmc6IFRlc3Qg
dXNlcyBhc3NlcnRPcHRpbWl6ZWQgaW4gTGl0ZSBtb2RlLCBza2lwcGluZyB0ZXN0LiIpOworICAg
ICAgdGVzdFJ1bm5lci5xdWl0KDApOworICAgIH0KKyAgICAvLyBUZXN0cyB0aGF0IHVzZSBhc3Nl
cnRPcHRpbWl6ZWQoKSBkbyBub3QgbWFrZSBzZW5zZSBpZiAtLW5vLW9wdAorICAgIC8vIG9wdGlv
biBpcyBwcm92aWRlZC4gU3VjaCB0ZXN0cyBtdXN0IGFkZCAtLW9wdCB0byBmbGFncyBjb21tZW50
LgorICAgIGFzc2VydEZhbHNlKChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua05l
dmVyT3B0aW1pemUpICE9PSAwLAorICAgICAgICAgICAgICAgICJ0ZXN0IGRvZXMgbm90IG1ha2Ug
c2Vuc2Ugd2l0aCAtLW5vLW9wdCIpOworICAgIGFzc2VydFRydWUoCisgICAgICAgIChvcHRfc3Rh
dHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAwLAorICAgICAgICAn
c2hvdWxkIGJlIGEgZnVuY3Rpb246ICcgKyBuYW1lX29wdCk7CisgICAgaWYgKHNraXBfaWZfbWF5
YmVfZGVvcHRlZCAmJgorICAgICAgICAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVz
LmtNYXliZURlb3B0ZWQpICE9PSAwKSB7CisgICAgICAvLyBXaGVuIC0tZGVvcHQtZXZlcnktbi10
aW1lcyBmbGFnIGlzIHNwZWNpZmllZCBpdCdzIG5vIGxvbmdlciBndWFyYW50ZWVkCisgICAgICAv
LyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgc3RpbGwgb3B0aW1pemVkLCBzbyBrZWVwIHJ1
bm5pbmcgdGhlIHRlc3QKKyAgICAgIC8vIHRvIHN0cmVzcyB0ZXN0IHRoZSBkZW9wdGltaXplci4K
KyAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXNzZXJ0VHJ1ZSgKKyAgICAgICAgKG9wdF9zdGF0
dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rT3B0aW1pemVkKSAhPT0gMCwKKyAgICAgICAgJ3No
b3VsZCBiZSBvcHRpbWl6ZWQ6ICcgKyBuYW1lX29wdCk7CisgIH0KKworICBpc05ldmVyT3B0aW1p
emVMaXRlTW9kZSA9IGZ1bmN0aW9uIGlzTmV2ZXJPcHRpbWl6ZUxpdGVNb2RlKCkgeworICAgIHZh
ciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKHVuZGVmaW5lZCwgIiIpOworICAgIHJl
dHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtMaXRlTW9kZSkgIT09IDA7
CisgIH0KKworICBpc05ldmVyT3B0aW1pemUgPSBmdW5jdGlvbiBpc05ldmVyT3B0aW1pemUoKSB7
CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXModW5kZWZpbmVkLCAiIik7
CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua05ldmVyT3B0
aW1pemUpICE9PSAwOworICB9CisKKyAgaXNBbHdheXNPcHRpbWl6ZSA9IGZ1bmN0aW9uIGlzQWx3
YXlzT3B0aW1pemUoKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXMo
dW5kZWZpbmVkLCAiIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25T
dGF0dXMua0Fsd2F5c09wdGltaXplKSAhPT0gMDsKKyAgfQorCisgIGlzSW50ZXJwcmV0ZWQgPSBm
dW5jdGlvbiBpc0ludGVycHJldGVkKGZ1bikgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1p
emF0aW9uU3RhdHVzKGZ1biwgIiIpOworICAgIGFzc2VydFRydWUoKG9wdF9zdGF0dXMgJiBWOE9w
dGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAgICAgICAgICAgICAibm90
IGEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0
YXR1cy5rT3B0aW1pemVkKSA9PT0gMCAmJgorICAgICAgICAgICAob3B0X3N0YXR1cyAmIFY4T3B0
aW1pemF0aW9uU3RhdHVzLmtJbnRlcnByZXRlZCkgIT09IDA7CisgIH0KKworICBpc0Jhc2VsaW5l
ID0gZnVuY3Rpb24gaXNCYXNlbGluZShmdW4pIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGlt
aXphdGlvblN0YXR1cyhmdW4sICIiKTsKKyAgICBhc3NlcnRUcnVlKChvcHRfc3RhdHVzICYgVjhP
cHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAwLAorICAgICAgICAgICAgICAgIm5v
dCBhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25T
dGF0dXMua09wdGltaXplZCkgPT09IDAgJiYKKyAgICAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9w
dGltaXphdGlvblN0YXR1cy5rQmFzZWxpbmUpICE9PSAwOworICB9CisKKyAgaXNVbm9wdGltaXpl
ZCA9IGZ1bmN0aW9uIGlzVW5vcHRpbWl6ZWQoZnVuKSB7CisgICAgcmV0dXJuIGlzSW50ZXJwcmV0
ZWQoZnVuKSB8fCBpc0Jhc2VsaW5lKGZ1bik7CisgIH0KKworICBpc09wdGltaXplZCA9IGZ1bmN0
aW9uIGlzT3B0aW1pemVkKGZ1bikgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9u
U3RhdHVzKGZ1biwgIiIpOworICAgIGFzc2VydFRydWUoKG9wdF9zdGF0dXMgJiBWOE9wdGltaXph
dGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAgICAgICAgICAgICAibm90IGEgZnVu
Y3Rpb24iKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5r
T3B0aW1pemVkKSAhPT0gMDsKKyAgfQorCisgIGlzVHVyYm9GYW5uZWQgPSBmdW5jdGlvbiBpc1R1
cmJvRmFubmVkKGZ1bikgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVz
KGZ1biwgIiIpOworICAgIGFzc2VydFRydWUoKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0
YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAgICAgICAgICAgICAibm90IGEgZnVuY3Rpb24i
KTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rT3B0aW1p
emVkKSAhPT0gMCAmJgorICAgICAgICAgICAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3Rh
dHVzLmtUdXJib0Zhbm5lZCkgIT09IDA7CisgIH0KKworICAvLyBDdXN0b20gVjgtc3BlY2lmaWMg
c3RhY2sgdHJhY2UgZm9ybWF0dGVyIHRoYXQgaXMgdGVtcG9yYXJpbHkgaW5zdGFsbGVkIG9uCisg
IC8vIHRoZSBFcnJvciBvYmplY3QuCisgIE1qc1VuaXRBc3NlcnRpb25FcnJvci5wcmVwYXJlU3Rh
Y2tUcmFjZSA9IGZ1bmN0aW9uKGVycm9yLCBzdGFjaykgeworICAgIC8vIFRyaWdnZXIgZGVmYXVs
dCBmb3JtYXR0aW5nIHdpdGggcmVjdXJzaW9uLgorICAgIHRyeSB7CisgICAgICAvLyBGaWx0ZXIt
b3V0IGFsbCBidXQgdGhlIGZpcnN0IG1qc3VuaXQgZnJhbWUuCisgICAgICBsZXQgZmlsdGVyZWRT
dGFjayA9IFtdOworICAgICAgbGV0IGluTWpzdW5pdCA9IHRydWU7CisgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGxldCBmcmFtZSA9IHN0YWNr
W2ldOworICAgICAgICBpZiAoaW5NanN1bml0KSB7CisgICAgICAgICAgbGV0IGZpbGUgPSBmcmFt
ZS5nZXRGaWxlTmFtZSgpOworICAgICAgICAgIGlmICghZmlsZSB8fCAhZmlsZS5lbmRzV2l0aCgi
bWpzdW5pdC5qcyIpKSB7CisgICAgICAgICAgICBpbk1qc3VuaXQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIC8vIFB1c2ggdGhlIGxhc3QgbWpzdW5pdCBmcmFtZSwgdHlwaWNhbGx5IGNvbnRhaW5pbmcg
dGhlIGFzc2VydGlvbgorICAgICAgICAgICAgLy8gZnVuY3Rpb24uCisgICAgICAgICAgICBpZiAo
aSA+IDApIEFycmF5UHJvdG90eXBlUHVzaC5jYWxsKGZpbHRlcmVkU3RhY2ssIHN0YWNrW2ktMV0p
OworICAgICAgICAgICAgQXJyYXlQcm90b3R5cGVQdXNoLmNhbGwoZmlsdGVyZWRTdGFjaywgc3Rh
Y2tbaV0pOworICAgICAgICAgIH0KKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBBcnJheVByb3RvdHlwZVB1c2guY2FsbChmaWx0ZXJlZFN0YWNrLCBmcmFtZSk7CisgICAg
ICB9CisgICAgICBzdGFjayA9IGZpbHRlcmVkU3RhY2s7CisKKyAgICAgIC8vIEluZmVyIGZ1bmN0
aW9uIG5hbWVzIGFuZCBjYWxjdWxhdGUge21heF9uYW1lX2xlbmd0aH0KKyAgICAgIGxldCBtYXhf
bmFtZV9sZW5ndGggPSAwOworICAgICAgQXJyYXlQcm90b3R5cGVGb3JFYWNoLmNhbGwoc3RhY2ss
IGVhY2ggPT4geworICAgICAgICBsZXQgbmFtZSA9IGVhY2guZ2V0RnVuY3Rpb25OYW1lKCk7Cisg
ICAgICAgIGlmIChuYW1lID09IG51bGwpIG5hbWUgPSAiIjsKKyAgICAgICAgaWYgKGVhY2guaXNF
dmFsKCkpIHsKKyAgICAgICAgICBuYW1lID0gbmFtZTsKKyAgICAgICAgfSBlbHNlIGlmIChlYWNo
LmlzQ29uc3RydWN0b3IoKSkgeworICAgICAgICAgIG5hbWUgPSAibmV3ICIgKyBuYW1lOworICAg
ICAgICB9IGVsc2UgaWYgKGVhY2guaXNOYXRpdmUoKSkgeworICAgICAgICAgIG5hbWUgPSAibmF0
aXZlICIgKyBuYW1lOworICAgICAgICB9IGVsc2UgaWYgKCFlYWNoLmlzVG9wbGV2ZWwoKSkgewor
ICAgICAgICAgIG5hbWUgPSBlYWNoLmdldFR5cGVOYW1lKCkgKyAiLiIgKyBuYW1lOworICAgICAg
ICB9CisgICAgICAgIGVhY2gubmFtZSA9IG5hbWU7CisgICAgICAgIG1heF9uYW1lX2xlbmd0aCA9
IE1hdGgubWF4KG5hbWUubGVuZ3RoLCBtYXhfbmFtZV9sZW5ndGgpCisgICAgICB9KTsKKworICAg
ICAgLy8gRm9ybWF0IHN0YWNrIGZyYW1lcy4KKyAgICAgIHN0YWNrID0gQXJyYXlQcm90b3R5cGVN
YXAuY2FsbChzdGFjaywgZWFjaCA9PiB7CisgICAgICAgIGxldCBmcmFtZSA9ICIgICAgYXQgIiAr
IGVhY2gubmFtZS5wYWRFbmQobWF4X25hbWVfbGVuZ3RoKTsKKyAgICAgICAgbGV0IGZpbGVOYW1l
ID0gZWFjaC5nZXRGaWxlTmFtZSgpOworICAgICAgICBpZiAoZWFjaC5pc0V2YWwoKSkgcmV0dXJu
IGZyYW1lICsgIiAiICsgZWFjaC5nZXRFdmFsT3JpZ2luKCk7CisgICAgICAgIGZyYW1lICs9ICIg
IiArIChmaWxlTmFtZSA/IGZpbGVOYW1lIDogIiIpOworICAgICAgICBsZXQgbGluZT0gZWFjaC5n
ZXRMaW5lTnVtYmVyKCk7CisgICAgICAgIGZyYW1lICs9ICIgIiArIChsaW5lID8gbGluZSA6ICIi
KTsKKyAgICAgICAgbGV0IGNvbHVtbiA9IGVhY2guZ2V0Q29sdW1uTnVtYmVyKCk7CisgICAgICAg
IGZyYW1lICs9IChjb2x1bW4gPyAiOiIgKyBjb2x1bW4gOiAiIik7CisgICAgICAgIHJldHVybiBm
cmFtZTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuICIiICsgZXJyb3IubWVzc2FnZSArICJcbiIg
KyBBcnJheVByb3RvdHlwZUpvaW4uY2FsbChzdGFjaywgIlxuIik7CisgICAgfSBjYXRjaCAoZSkg
e307CisgICAgcmV0dXJuIGVycm9yLnN0YWNrOworICB9Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL3Y4L3dhc20tbW9kdWxlLWJ1aWxkZXIuanMgYi9KU1Rlc3RzL3dhc20vdjgvd2Fz
bS1tb2R1bGUtYnVpbGRlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NjdlZDg0ZDBlNTlmMjg1MmFjYTRhNTIy
M2ZkNTllOWZlZGY3YjEwCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L3dhc20t
bW9kdWxlLWJ1aWxkZXIuanMKQEAgLTAsMCArMSwyMTY5IEBACisvLyBDb3B5cmlnaHQgMjAxNiB0
aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gVXNlZCBmb3IgZW5jb2Rp
bmcgZjMyIGFuZCBkb3VibGUgY29uc3RhbnRzIHRvIGJpdHMuCitsZXQgYnl0ZV92aWV3ID0gbmV3
IFVpbnQ4QXJyYXkoOCk7CitsZXQgZGF0YV92aWV3ID0gbmV3IERhdGFWaWV3KGJ5dGVfdmlldy5i
dWZmZXIpOworCisvLyBUaGUgYnl0ZXMgZnVuY3Rpb24gcmVjZWl2ZXMgb25lIG9mCisvLyAgLSBz
ZXZlcmFsIGFyZ3VtZW50cywgZWFjaCBvZiB3aGljaCBpcyBlaXRoZXIgYSBudW1iZXIgb3IgYSBz
dHJpbmcgb2YgbGVuZ3RoCisvLyAgICAxOyBpZiBpdCdzIGEgc3RyaW5nLCB0aGUgY2hhcmNvZGUg
b2YgdGhlIGNvbnRhaW5lZCBjaGFyYWN0ZXIgaXMgdXNlZC4KKy8vICAtIGEgc2luZ2xlIGFycmF5
IGFyZ3VtZW50IGNvbnRhaW5pbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMKKy8vICAtIGEgc2luZ2xl
IHN0cmluZzsgdGhlIHJldHVybmVkIGJ1ZmZlciB3aWxsIGNvbnRhaW4gdGhlIGNoYXIgY29kZXMg
b2YgYWxsCisvLyAgICBjb250YWluZWQgY2hhcmFjdGVycy4KK2Z1bmN0aW9uIGJ5dGVzKC4uLmlu
cHV0KSB7CisgIGlmIChpbnB1dC5sZW5ndGggPT0gMSAmJiB0eXBlb2YgaW5wdXRbMF0gPT0gJ2Fy
cmF5JykgaW5wdXQgPSBpbnB1dFswXTsKKyAgaWYgKGlucHV0Lmxlbmd0aCA9PSAxICYmIHR5cGVv
ZiBpbnB1dFswXSA9PSAnc3RyaW5nJykgeworICAgIGxldCBsZW4gPSBpbnB1dFswXS5sZW5ndGg7
CisgICAgbGV0IHZpZXcgPSBuZXcgVWludDhBcnJheShsZW4pOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgbGVuOyBpKyspIHZpZXdbaV0gPSBpbnB1dFswXS5jaGFyQ29kZUF0KGkpOworICAgIHJl
dHVybiB2aWV3LmJ1ZmZlcjsKKyAgfQorICBsZXQgdmlldyA9IG5ldyBVaW50OEFycmF5KGlucHV0
Lmxlbmd0aCk7CisgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHsKKyAg
ICBsZXQgdmFsID0gaW5wdXRbaV07CisgICAgaWYgKHR5cGVvZiB2YWwgPT0gJ3N0cmluZycpIHsK
KyAgICAgIGlmICh2YWwubGVuZ3RoICE9IDEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdz
dHJpbmcgaW5wdXRzIG11c3QgaGF2ZSBsZW5ndGggMScpOworICAgICAgfQorICAgICAgdmFsID0g
dmFsLmNoYXJDb2RlQXQoMCk7CisgICAgfQorICAgIHZpZXdbaV0gPSB2YWwgfCAwOworICB9Cisg
IHJldHVybiB2aWV3LmJ1ZmZlcjsKK30KKworLy8gSGVhZGVyIGRlY2xhcmF0aW9uIGNvbnN0YW50
cwordmFyIGtXYXNtSDAgPSAwOwordmFyIGtXYXNtSDEgPSAweDYxOwordmFyIGtXYXNtSDIgPSAw
eDczOwordmFyIGtXYXNtSDMgPSAweDZkOworCit2YXIga1dhc21WMCA9IDB4MTsKK3ZhciBrV2Fz
bVYxID0gMDsKK3ZhciBrV2FzbVYyID0gMDsKK3ZhciBrV2FzbVYzID0gMDsKKwordmFyIGtIZWFk
ZXJTaXplID0gODsKK3ZhciBrUGFnZVNpemUgPSA2NTUzNjsKK3ZhciBrU3BlY01heFBhZ2VzID0g
NjU1MzY7Cit2YXIga01heFZhckludDMyU2l6ZSA9IDU7Cit2YXIga01heFZhckludDY0U2l6ZSA9
IDEwOworCitsZXQga0RlY2xOb0xvY2FscyA9IDA7CisKKy8vIFNlY3Rpb24gZGVjbGFyYXRpb24g
Y29uc3RhbnRzCitsZXQga1Vua25vd25TZWN0aW9uQ29kZSA9IDA7CitsZXQga1R5cGVTZWN0aW9u
Q29kZSA9IDE7ICAgICAgICAvLyBGdW5jdGlvbiBzaWduYXR1cmUgZGVjbGFyYXRpb25zCitsZXQg
a0ltcG9ydFNlY3Rpb25Db2RlID0gMjsgICAgICAvLyBJbXBvcnQgZGVjbGFyYXRpb25zCitsZXQg
a0Z1bmN0aW9uU2VjdGlvbkNvZGUgPSAzOyAgICAvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbnMKK2xl
dCBrVGFibGVTZWN0aW9uQ29kZSA9IDQ7ICAgICAgIC8vIEluZGlyZWN0IGZ1bmN0aW9uIHRhYmxl
IGFuZCBvdGhlciB0YWJsZXMKK2xldCBrTWVtb3J5U2VjdGlvbkNvZGUgPSA1OyAgICAgIC8vIE1l
bW9yeSBhdHRyaWJ1dGVzCitsZXQga0dsb2JhbFNlY3Rpb25Db2RlID0gNjsgICAgICAvLyBHbG9i
YWwgZGVjbGFyYXRpb25zCitsZXQga0V4cG9ydFNlY3Rpb25Db2RlID0gNzsgICAgICAvLyBFeHBv
cnRzCitsZXQga1N0YXJ0U2VjdGlvbkNvZGUgPSA4OyAgICAgICAvLyBTdGFydCBmdW5jdGlvbiBk
ZWNsYXJhdGlvbgorbGV0IGtFbGVtZW50U2VjdGlvbkNvZGUgPSA5OyAgICAgLy8gRWxlbWVudHMg
c2VjdGlvbgorbGV0IGtDb2RlU2VjdGlvbkNvZGUgPSAxMDsgICAgICAgLy8gRnVuY3Rpb24gY29k
ZQorbGV0IGtEYXRhU2VjdGlvbkNvZGUgPSAxMTsgICAgICAgLy8gRGF0YSBzZWdtZW50cworbGV0
IGtEYXRhQ291bnRTZWN0aW9uQ29kZSA9IDEyOyAgLy8gRGF0YSBzZWdtZW50IGNvdW50IChiZXR3
ZWVuIEVsZW1lbnQgJiBDb2RlKQorbGV0IGtUYWdTZWN0aW9uQ29kZSA9IDEzOyAgICAgICAgLy8g
VGFnIHNlY3Rpb24gKGJldHdlZW4gTWVtb3J5ICYgR2xvYmFsKQorCisvLyBOYW1lIHNlY3Rpb24g
dHlwZXMKK2xldCBrTW9kdWxlTmFtZUNvZGUgPSAwOworbGV0IGtGdW5jdGlvbk5hbWVzQ29kZSA9
IDE7CitsZXQga0xvY2FsTmFtZXNDb2RlID0gMjsKKworbGV0IGtXYXNtRnVuY3Rpb25UeXBlRm9y
bSA9IDB4NjA7CitsZXQga1dhc21TdHJ1Y3RUeXBlRm9ybSA9IDB4NWY7CitsZXQga1dhc21BcnJh
eVR5cGVGb3JtID0gMHg1ZTsKK2xldCBrV2FzbUZ1bmN0aW9uU3VidHlwZUZvcm0gPSAweDVkOwor
bGV0IGtXYXNtU3RydWN0U3VidHlwZUZvcm0gPSAweDVjOworbGV0IGtXYXNtQXJyYXlTdWJ0eXBl
Rm9ybSA9IDB4NWI7CisKK2xldCBrTGltaXRzTm9NYXhpbXVtID0gMHgwMDsKK2xldCBrTGltaXRz
V2l0aE1heGltdW0gPSAweDAxOworbGV0IGtMaW1pdHNTaGFyZWROb01heGltdW0gPSAweDAyOwor
bGV0IGtMaW1pdHNTaGFyZWRXaXRoTWF4aW11bSA9IDB4MDM7CitsZXQga0xpbWl0c01lbW9yeTY0
Tm9NYXhpbXVtID0gMHgwNDsKK2xldCBrTGltaXRzTWVtb3J5NjRXaXRoTWF4aW11bSA9IDB4MDU7
CisKKy8vIFNlZ21lbnQgZmxhZ3MKK2xldCBrQWN0aXZlTm9JbmRleCA9IDA7CitsZXQga1Bhc3Np
dmUgPSAxOworbGV0IGtBY3RpdmVXaXRoSW5kZXggPSAyOworbGV0IGtEZWNsYXJhdGl2ZSA9IDM7
CitsZXQga1Bhc3NpdmVXaXRoRWxlbWVudHMgPSA1OworbGV0IGtEZWNsYXJhdGl2ZVdpdGhFbGVt
ZW50cyA9IDc7CisKKy8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uIGZsYWdzCitsZXQga0RlY2xGdW5j
dGlvbk5hbWUgPSAweDAxOworbGV0IGtEZWNsRnVuY3Rpb25JbXBvcnQgPSAweDAyOworbGV0IGtE
ZWNsRnVuY3Rpb25Mb2NhbHMgPSAweDA0OworbGV0IGtEZWNsRnVuY3Rpb25FeHBvcnQgPSAweDA4
OworCisvLyBWYWx1ZSB0eXBlcyBhbmQgcmVsYXRlZAorbGV0IGtXYXNtVm9pZCA9IDB4NDA7Cits
ZXQga1dhc21JMzIgPSAweDdmOworbGV0IGtXYXNtSTY0ID0gMHg3ZTsKK2xldCBrV2FzbUYzMiA9
IDB4N2Q7CitsZXQga1dhc21GNjQgPSAweDdjOworbGV0IGtXYXNtUzEyOCA9IDB4N2I7CitsZXQg
a1dhc21JOCA9IDB4N2E7CitsZXQga1dhc21JMTYgPSAweDc5OworCisvLyBUaGVzZSBhcmUgZGVm
aW5lZCBhcyBuZWdhdGl2ZSBpbnRlZ2VycyB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gcG9zaXRp
dmUgdHlwZQorLy8gaW5kaWNlcy4KK2xldCBrV2FzbUZ1bmNSZWYgPSAtMHgxMDsKK2xldCBrV2Fz
bUFueUZ1bmMgPSBrV2FzbUZ1bmNSZWY7ICAvLyBBbGlhcyBuYW1lZCBhcyBpbiB0aGUgSlMgQVBJ
IHNwZWMKK2xldCBrV2FzbUV4dGVyblJlZiA9IC0weDExOworbGV0IGtXYXNtQW55UmVmID0gLTB4
MTI7CitsZXQga1dhc21FcVJlZiA9IC0weDEzOworbGV0IGtXYXNtSTMxUmVmID0gLTB4MTY7Cits
ZXQga1dhc21EYXRhUmVmID0gLTB4MTk7CisKKy8vIFVzZSB0aGUgcG9zaXRpdmUtYnl0ZSB2ZXJz
aW9ucyBpbnNpZGUgZnVuY3Rpb24gYm9kaWVzLgorbGV0IGtMZWIxMjhNYXNrID0gMHg3ZjsKK2xl
dCBrRnVuY1JlZkNvZGUgPSBrV2FzbUZ1bmNSZWYgJiBrTGViMTI4TWFzazsKK2xldCBrQW55RnVu
Y0NvZGUgPSBrRnVuY1JlZkNvZGU7ICAvLyBBbGlhcyBuYW1lZCBhcyBpbiB0aGUgSlMgQVBJIHNw
ZWMKK2xldCBrRXh0ZXJuUmVmQ29kZSA9IGtXYXNtRXh0ZXJuUmVmICYga0xlYjEyOE1hc2s7Cits
ZXQga0FueVJlZkNvZGUgPSBrV2FzbUFueVJlZiAmIGtMZWIxMjhNYXNrOworbGV0IGtFcVJlZkNv
ZGUgPSBrV2FzbUVxUmVmICYga0xlYjEyOE1hc2s7CitsZXQga0kzMVJlZkNvZGUgPSBrV2FzbUkz
MVJlZiAgJiBrTGViMTI4TWFzazsKK2xldCBrRGF0YVJlZkNvZGUgPSBrV2FzbURhdGFSZWYgICYg
a0xlYjEyOE1hc2s7CisKK2xldCBrV2FzbU9wdFJlZiA9IDB4NmM7CitsZXQga1dhc21SZWYgPSAw
eDZiOworZnVuY3Rpb24gd2FzbU9wdFJlZlR5cGUoaGVhcF90eXBlKSB7CisgIHJldHVybiB7b3Bj
b2RlOiBrV2FzbU9wdFJlZiwgaGVhcF90eXBlOiBoZWFwX3R5cGV9OworfQorZnVuY3Rpb24gd2Fz
bVJlZlR5cGUoaGVhcF90eXBlKSB7CisgIHJldHVybiB7b3Bjb2RlOiBrV2FzbVJlZiwgaGVhcF90
eXBlOiBoZWFwX3R5cGV9OworfQorCitsZXQga1dhc21SdHRXaXRoRGVwdGggPSAweDY5OworZnVu
Y3Rpb24gd2FzbVJ0dChpbmRleCwgZGVwdGgpIHsKKyAgaWYgKGluZGV4IDwgMCkgdGhyb3cgbmV3
IEVycm9yKCJFeHBlY3Rpbmcgbm9uLW5lZ2F0aXZlIHR5cGUgaW5kZXgiKTsKKyAgcmV0dXJuIHtv
cGNvZGU6IGtXYXNtUnR0V2l0aERlcHRoLCBpbmRleDogaW5kZXgsIGRlcHRoOiBkZXB0aH07Cit9
CitsZXQga1dhc21SdHQgPSAweDY4OworZnVuY3Rpb24gd2FzbVJ0dE5vRGVwdGgoaW5kZXgpIHsK
KyAgaWYgKGluZGV4IDwgMCkgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3Rpbmcgbm9uLW5lZ2F0aXZl
IHR5cGUgaW5kZXgiKTsKKyAgcmV0dXJuIHtvcGNvZGU6IGtXYXNtUnR0LCBpbmRleDogaW5kZXh9
OworfQorCitsZXQga0V4dGVybmFsRnVuY3Rpb24gPSAwOworbGV0IGtFeHRlcm5hbFRhYmxlID0g
MTsKK2xldCBrRXh0ZXJuYWxNZW1vcnkgPSAyOworbGV0IGtFeHRlcm5hbEdsb2JhbCA9IDM7Cits
ZXQga0V4dGVybmFsVGFnID0gNDsKKworbGV0IGtUYWJsZVplcm8gPSAwOworbGV0IGtNZW1vcnla
ZXJvID0gMDsKK2xldCBrU2VnbWVudFplcm8gPSAwOworCitsZXQga0V4Y2VwdGlvbkF0dHJpYnV0
ZSA9IDA7CisKKy8vIFVzZWZ1bCBzaWduYXR1cmVzCitsZXQga1NpZ19pX2kgPSBtYWtlU2lnKFtr
V2FzbUkzMl0sIFtrV2FzbUkzMl0pOworbGV0IGtTaWdfbF9sID0gbWFrZVNpZyhba1dhc21JNjRd
LCBba1dhc21JNjRdKTsKK2xldCBrU2lnX2lfbCA9IG1ha2VTaWcoW2tXYXNtSTY0XSwgW2tXYXNt
STMyXSk7CitsZXQga1NpZ19pX2lpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMyXSwgW2tX
YXNtSTMyXSk7CitsZXQga1NpZ19pX2lpaSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMiwg
a1dhc21JMzJdLCBba1dhc21JMzJdKTsKK2xldCBrU2lnX3ZfaWlpaSA9IG1ha2VTaWcoW2tXYXNt
STMyLCBrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSwgW10pOworbGV0IGtTaWdfZl9mZiA9
IG1ha2VTaWcoW2tXYXNtRjMyLCBrV2FzbUYzMl0sIFtrV2FzbUYzMl0pOworbGV0IGtTaWdfZF9k
ZCA9IG1ha2VTaWcoW2tXYXNtRjY0LCBrV2FzbUY2NF0sIFtrV2FzbUY2NF0pOworbGV0IGtTaWdf
bF9sbCA9IG1ha2VTaWcoW2tXYXNtSTY0LCBrV2FzbUk2NF0sIFtrV2FzbUk2NF0pOworbGV0IGtT
aWdfaV9kZCA9IG1ha2VTaWcoW2tXYXNtRjY0LCBrV2FzbUY2NF0sIFtrV2FzbUkzMl0pOworbGV0
IGtTaWdfdl92ID0gbWFrZVNpZyhbXSwgW10pOworbGV0IGtTaWdfaV92ID0gbWFrZVNpZyhbXSwg
W2tXYXNtSTMyXSk7CitsZXQga1NpZ19sX3YgPSBtYWtlU2lnKFtdLCBba1dhc21JNjRdKTsKK2xl
dCBrU2lnX2ZfdiA9IG1ha2VTaWcoW10sIFtrV2FzbUYzMl0pOworbGV0IGtTaWdfZF92ID0gbWFr
ZVNpZyhbXSwgW2tXYXNtRjY0XSk7CitsZXQga1NpZ192X2kgPSBtYWtlU2lnKFtrV2FzbUkzMl0s
IFtdKTsKK2xldCBrU2lnX3ZfaWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dhc21JMzJdLCBbXSk7
CitsZXQga1NpZ192X2lpaSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJd
LCBbXSk7CitsZXQga1NpZ192X2wgPSBtYWtlU2lnKFtrV2FzbUk2NF0sIFtdKTsKK2xldCBrU2ln
X3ZfZCA9IG1ha2VTaWcoW2tXYXNtRjY0XSwgW10pOworbGV0IGtTaWdfdl9kZCA9IG1ha2VTaWco
W2tXYXNtRjY0LCBrV2FzbUY2NF0sIFtdKTsKK2xldCBrU2lnX3ZfZGRpID0gbWFrZVNpZyhba1dh
c21GNjQsIGtXYXNtRjY0LCBrV2FzbUkzMl0sIFtdKTsKK2xldCBrU2lnX2lpX3YgPSBtYWtlU2ln
KFtdLCBba1dhc21JMzIsIGtXYXNtSTMyXSk7CitsZXQga1NpZ19paWlfdiA9IG1ha2VTaWcoW10s
IFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSk7CitsZXQga1NpZ19paV9pID0gbWFrZVNp
Zyhba1dhc21JMzJdLCBba1dhc21JMzIsIGtXYXNtSTMyXSk7CitsZXQga1NpZ19paWlfaSA9IG1h
a2VTaWcoW2tXYXNtSTMyXSwgW2tXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJdKTsKK2xldCBr
U2lnX2lpX2lpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMyXSwgW2tXYXNtSTMyLCBrV2Fz
bUkzMl0pOworbGV0IGtTaWdfaWlpX2lpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMyXSwg
W2tXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJdKTsKKworbGV0IGtTaWdfdl9mID0gbWFrZVNp
Zyhba1dhc21GMzJdLCBbXSk7CitsZXQga1NpZ19mX2YgPSBtYWtlU2lnKFtrV2FzbUYzMl0sIFtr
V2FzbUYzMl0pOworbGV0IGtTaWdfZl9kID0gbWFrZVNpZyhba1dhc21GNjRdLCBba1dhc21GMzJd
KTsKK2xldCBrU2lnX2RfZCA9IG1ha2VTaWcoW2tXYXNtRjY0XSwgW2tXYXNtRjY0XSk7CitsZXQg
a1NpZ19yX3IgPSBtYWtlU2lnKFtrV2FzbUV4dGVyblJlZl0sIFtrV2FzbUV4dGVyblJlZl0pOwor
bGV0IGtTaWdfYV9hID0gbWFrZVNpZyhba1dhc21BbnlGdW5jXSwgW2tXYXNtQW55RnVuY10pOwor
bGV0IGtTaWdfaV9yID0gbWFrZVNpZyhba1dhc21FeHRlcm5SZWZdLCBba1dhc21JMzJdKTsKK2xl
dCBrU2lnX3ZfciA9IG1ha2VTaWcoW2tXYXNtRXh0ZXJuUmVmXSwgW10pOworbGV0IGtTaWdfdl9h
ID0gbWFrZVNpZyhba1dhc21BbnlGdW5jXSwgW10pOworbGV0IGtTaWdfdl9yciA9IG1ha2VTaWco
W2tXYXNtRXh0ZXJuUmVmLCBrV2FzbUV4dGVyblJlZl0sIFtdKTsKK2xldCBrU2lnX3ZfYWEgPSBt
YWtlU2lnKFtrV2FzbUFueUZ1bmMsIGtXYXNtQW55RnVuY10sIFtdKTsKK2xldCBrU2lnX3JfdiA9
IG1ha2VTaWcoW10sIFtrV2FzbUV4dGVyblJlZl0pOworbGV0IGtTaWdfYV92ID0gbWFrZVNpZyhb
XSwgW2tXYXNtQW55RnVuY10pOworbGV0IGtTaWdfYV9pID0gbWFrZVNpZyhba1dhc21JMzJdLCBb
a1dhc21BbnlGdW5jXSk7CitsZXQga1NpZ19zX2kgPSBtYWtlU2lnKFtrV2FzbUkzMl0sIFtrV2Fz
bVMxMjhdKTsKK2xldCBrU2lnX2lfcyA9IG1ha2VTaWcoW2tXYXNtUzEyOF0sIFtrV2FzbUkzMl0p
OworCitmdW5jdGlvbiBtYWtlU2lnKHBhcmFtcywgcmVzdWx0cykgeworICByZXR1cm4ge3BhcmFt
czogcGFyYW1zLCByZXN1bHRzOiByZXN1bHRzfTsKK30KKworZnVuY3Rpb24gbWFrZVNpZ192X3go
eCkgeworICByZXR1cm4gbWFrZVNpZyhbeF0sIFtdKTsKK30KKworZnVuY3Rpb24gbWFrZVNpZ194
X3YoeCkgeworICByZXR1cm4gbWFrZVNpZyhbXSwgW3hdKTsKK30KKworZnVuY3Rpb24gbWFrZVNp
Z192X3h4KHgpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW3gsIHhdLCBbXSk7Cit9CisKK2Z1bmN0aW9u
IG1ha2VTaWdfcl92KHIpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW10sIFtyXSk7Cit9CisKK2Z1bmN0
aW9uIG1ha2VTaWdfcl94KHIsIHgpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW3hdLCBbcl0pOworfQor
CitmdW5jdGlvbiBtYWtlU2lnX3JfeHgociwgeCkgeworICByZXR1cm4gbWFrZVNpZyhbeCwgeF0s
IFtyXSk7Cit9CisKKy8vIE9wY29kZXMKK2NvbnN0IGtXYXNtT3Bjb2RlcyA9IHsKKyAgJ1VucmVh
Y2hhYmxlJzogMHgwMCwKKyAgJ05vcCc6IDB4MDEsCisgICdCbG9jayc6IDB4MDIsCisgICdMb29w
JzogMHgwMywKKyAgJ0lmJzogMHgwNCwKKyAgJ0Vsc2UnOiAweDA1LAorICAnVHJ5JzogMHgwNiwK
KyAgJ0NhdGNoJzogMHgwNywKKyAgJ1Rocm93JzogMHgwOCwKKyAgJ1JldGhyb3cnOiAweDA5LAor
ICAnQ2F0Y2hBbGwnOiAweDE5LAorICAnRW5kJzogMHgwYiwKKyAgJ0JyJzogMHgwYywKKyAgJ0Jy
SWYnOiAweDBkLAorICAnQnJUYWJsZSc6IDB4MGUsCisgICdSZXR1cm4nOiAweDBmLAorICAnQ2Fs
bEZ1bmN0aW9uJzogMHgxMCwKKyAgJ0NhbGxJbmRpcmVjdCc6IDB4MTEsCisgICdSZXR1cm5DYWxs
JzogMHgxMiwKKyAgJ1JldHVybkNhbGxJbmRpcmVjdCc6IDB4MTMsCisgICdDYWxsUmVmJzogMHgx
NCwKKyAgJ1JldHVybkNhbGxSZWYnOiAweDE1LAorICAnTGV0JzogMHgxNywKKyAgJ0RlbGVnYXRl
JzogMHgxOCwKKyAgJ0Ryb3AnOiAweDFhLAorICAnU2VsZWN0JzogMHgxYiwKKyAgJ1NlbGVjdFdp
dGhUeXBlJzogMHgxYywKKyAgJ0xvY2FsR2V0JzogMHgyMCwKKyAgJ0xvY2FsU2V0JzogMHgyMSwK
KyAgJ0xvY2FsVGVlJzogMHgyMiwKKyAgJ0dsb2JhbEdldCc6IDB4MjMsCisgICdHbG9iYWxTZXQn
OiAweDI0LAorICAnVGFibGVHZXQnOiAweDI1LAorICAnVGFibGVTZXQnOiAweDI2LAorICAnSTMy
TG9hZE1lbSc6IDB4MjgsCisgICdJNjRMb2FkTWVtJzogMHgyOSwKKyAgJ0YzMkxvYWRNZW0nOiAw
eDJhLAorICAnRjY0TG9hZE1lbSc6IDB4MmIsCisgICdJMzJMb2FkTWVtOFMnOiAweDJjLAorICAn
STMyTG9hZE1lbThVJzogMHgyZCwKKyAgJ0kzMkxvYWRNZW0xNlMnOiAweDJlLAorICAnSTMyTG9h
ZE1lbTE2VSc6IDB4MmYsCisgICdJNjRMb2FkTWVtOFMnOiAweDMwLAorICAnSTY0TG9hZE1lbThV
JzogMHgzMSwKKyAgJ0k2NExvYWRNZW0xNlMnOiAweDMyLAorICAnSTY0TG9hZE1lbTE2VSc6IDB4
MzMsCisgICdJNjRMb2FkTWVtMzJTJzogMHgzNCwKKyAgJ0k2NExvYWRNZW0zMlUnOiAweDM1LAor
ICAnSTMyU3RvcmVNZW0nOiAweDM2LAorICAnSTY0U3RvcmVNZW0nOiAweDM3LAorICAnRjMyU3Rv
cmVNZW0nOiAweDM4LAorICAnRjY0U3RvcmVNZW0nOiAweDM5LAorICAnSTMyU3RvcmVNZW04Jzog
MHgzYSwKKyAgJ0kzMlN0b3JlTWVtMTYnOiAweDNiLAorICAnSTY0U3RvcmVNZW04JzogMHgzYywK
KyAgJ0k2NFN0b3JlTWVtMTYnOiAweDNkLAorICAnSTY0U3RvcmVNZW0zMic6IDB4M2UsCisgICdN
ZW1vcnlTaXplJzogMHgzZiwKKyAgJ01lbW9yeUdyb3cnOiAweDQwLAorICAnSTMyQ29uc3QnOiAw
eDQxLAorICAnSTY0Q29uc3QnOiAweDQyLAorICAnRjMyQ29uc3QnOiAweDQzLAorICAnRjY0Q29u
c3QnOiAweDQ0LAorICAnSTMyRXF6JzogMHg0NSwKKyAgJ0kzMkVxJzogMHg0NiwKKyAgJ0kzMk5l
JzogMHg0NywKKyAgJ0kzMkx0Uyc6IDB4NDgsCisgICdJMzJMdFUnOiAweDQ5LAorICAnSTMyR3RT
JzogMHg0YSwKKyAgJ0kzMkd0VSc6IDB4NGIsCisgICdJMzJMZVMnOiAweDRjLAorICAnSTMyTGVV
JzogMHg0ZCwKKyAgJ0kzMkdlUyc6IDB4NGUsCisgICdJMzJHZVUnOiAweDRmLAorICAnSTY0RXF6
JzogMHg1MCwKKyAgJ0k2NEVxJzogMHg1MSwKKyAgJ0k2NE5lJzogMHg1MiwKKyAgJ0k2NEx0Uyc6
IDB4NTMsCisgICdJNjRMdFUnOiAweDU0LAorICAnSTY0R3RTJzogMHg1NSwKKyAgJ0k2NEd0VSc6
IDB4NTYsCisgICdJNjRMZVMnOiAweDU3LAorICAnSTY0TGVVJzogMHg1OCwKKyAgJ0k2NEdlUyc6
IDB4NTksCisgICdJNjRHZVUnOiAweDVhLAorICAnRjMyRXEnOiAweDViLAorICAnRjMyTmUnOiAw
eDVjLAorICAnRjMyTHQnOiAweDVkLAorICAnRjMyR3QnOiAweDVlLAorICAnRjMyTGUnOiAweDVm
LAorICAnRjMyR2UnOiAweDYwLAorICAnRjY0RXEnOiAweDYxLAorICAnRjY0TmUnOiAweDYyLAor
ICAnRjY0THQnOiAweDYzLAorICAnRjY0R3QnOiAweDY0LAorICAnRjY0TGUnOiAweDY1LAorICAn
RjY0R2UnOiAweDY2LAorICAnSTMyQ2x6JzogMHg2NywKKyAgJ0kzMkN0eic6IDB4NjgsCisgICdJ
MzJQb3BjbnQnOiAweDY5LAorICAnSTMyQWRkJzogMHg2YSwKKyAgJ0kzMlN1Yic6IDB4NmIsCisg
ICdJMzJNdWwnOiAweDZjLAorICAnSTMyRGl2Uyc6IDB4NmQsCisgICdJMzJEaXZVJzogMHg2ZSwK
KyAgJ0kzMlJlbVMnOiAweDZmLAorICAnSTMyUmVtVSc6IDB4NzAsCisgICdJMzJBbmQnOiAweDcx
LAorICAnSTMySW9yJzogMHg3MiwKKyAgJ0kzMlhvcic6IDB4NzMsCisgICdJMzJTaGwnOiAweDc0
LAorICAnSTMyU2hyUyc6IDB4NzUsCisgICdJMzJTaHJVJzogMHg3NiwKKyAgJ0kzMlJvbCc6IDB4
NzcsCisgICdJMzJSb3InOiAweDc4LAorICAnSTY0Q2x6JzogMHg3OSwKKyAgJ0k2NEN0eic6IDB4
N2EsCisgICdJNjRQb3BjbnQnOiAweDdiLAorICAnSTY0QWRkJzogMHg3YywKKyAgJ0k2NFN1Yic6
IDB4N2QsCisgICdJNjRNdWwnOiAweDdlLAorICAnSTY0RGl2Uyc6IDB4N2YsCisgICdJNjREaXZV
JzogMHg4MCwKKyAgJ0k2NFJlbVMnOiAweDgxLAorICAnSTY0UmVtVSc6IDB4ODIsCisgICdJNjRB
bmQnOiAweDgzLAorICAnSTY0SW9yJzogMHg4NCwKKyAgJ0k2NFhvcic6IDB4ODUsCisgICdJNjRT
aGwnOiAweDg2LAorICAnSTY0U2hyUyc6IDB4ODcsCisgICdJNjRTaHJVJzogMHg4OCwKKyAgJ0k2
NFJvbCc6IDB4ODksCisgICdJNjRSb3InOiAweDhhLAorICAnRjMyQWJzJzogMHg4YiwKKyAgJ0Yz
Mk5lZyc6IDB4OGMsCisgICdGMzJDZWlsJzogMHg4ZCwKKyAgJ0YzMkZsb29yJzogMHg4ZSwKKyAg
J0YzMlRydW5jJzogMHg4ZiwKKyAgJ0YzMk5lYXJlc3RJbnQnOiAweDkwLAorICAnRjMyU3FydCc6
IDB4OTEsCisgICdGMzJBZGQnOiAweDkyLAorICAnRjMyU3ViJzogMHg5MywKKyAgJ0YzMk11bCc6
IDB4OTQsCisgICdGMzJEaXYnOiAweDk1LAorICAnRjMyTWluJzogMHg5NiwKKyAgJ0YzMk1heCc6
IDB4OTcsCisgICdGMzJDb3B5U2lnbic6IDB4OTgsCisgICdGNjRBYnMnOiAweDk5LAorICAnRjY0
TmVnJzogMHg5YSwKKyAgJ0Y2NENlaWwnOiAweDliLAorICAnRjY0Rmxvb3InOiAweDljLAorICAn
RjY0VHJ1bmMnOiAweDlkLAorICAnRjY0TmVhcmVzdEludCc6IDB4OWUsCisgICdGNjRTcXJ0Jzog
MHg5ZiwKKyAgJ0Y2NEFkZCc6IDB4YTAsCisgICdGNjRTdWInOiAweGExLAorICAnRjY0TXVsJzog
MHhhMiwKKyAgJ0Y2NERpdic6IDB4YTMsCisgICdGNjRNaW4nOiAweGE0LAorICAnRjY0TWF4Jzog
MHhhNSwKKyAgJ0Y2NENvcHlTaWduJzogMHhhNiwKKyAgJ0kzMkNvbnZlcnRJNjQnOiAweGE3LAor
ICAnSTMyU0NvbnZlcnRGMzInOiAweGE4LAorICAnSTMyVUNvbnZlcnRGMzInOiAweGE5LAorICAn
STMyU0NvbnZlcnRGNjQnOiAweGFhLAorICAnSTMyVUNvbnZlcnRGNjQnOiAweGFiLAorICAnSTY0
U0NvbnZlcnRJMzInOiAweGFjLAorICAnSTY0VUNvbnZlcnRJMzInOiAweGFkLAorICAnSTY0U0Nv
bnZlcnRGMzInOiAweGFlLAorICAnSTY0VUNvbnZlcnRGMzInOiAweGFmLAorICAnSTY0U0NvbnZl
cnRGNjQnOiAweGIwLAorICAnSTY0VUNvbnZlcnRGNjQnOiAweGIxLAorICAnRjMyU0NvbnZlcnRJ
MzInOiAweGIyLAorICAnRjMyVUNvbnZlcnRJMzInOiAweGIzLAorICAnRjMyU0NvbnZlcnRJNjQn
OiAweGI0LAorICAnRjMyVUNvbnZlcnRJNjQnOiAweGI1LAorICAnRjMyQ29udmVydEY2NCc6IDB4
YjYsCisgICdGNjRTQ29udmVydEkzMic6IDB4YjcsCisgICdGNjRVQ29udmVydEkzMic6IDB4Yjgs
CisgICdGNjRTQ29udmVydEk2NCc6IDB4YjksCisgICdGNjRVQ29udmVydEk2NCc6IDB4YmEsCisg
ICdGNjRDb252ZXJ0RjMyJzogMHhiYiwKKyAgJ0kzMlJlaW50ZXJwcmV0RjMyJzogMHhiYywKKyAg
J0k2NFJlaW50ZXJwcmV0RjY0JzogMHhiZCwKKyAgJ0YzMlJlaW50ZXJwcmV0STMyJzogMHhiZSwK
KyAgJ0Y2NFJlaW50ZXJwcmV0STY0JzogMHhiZiwKKyAgJ0kzMlNFeHRlbmRJOCc6IDB4YzAsCisg
ICdJMzJTRXh0ZW5kSTE2JzogMHhjMSwKKyAgJ0k2NFNFeHRlbmRJOCc6IDB4YzIsCisgICdJNjRT
RXh0ZW5kSTE2JzogMHhjMywKKyAgJ0k2NFNFeHRlbmRJMzInOiAweGM0LAorICAnUmVmTnVsbCc6
IDB4ZDAsCisgICdSZWZJc051bGwnOiAweGQxLAorICAnUmVmRnVuYyc6IDB4ZDIsCisgICdSZWZB
c05vbk51bGwnOiAweGQzLAorICAnQnJPbk51bGwnOiAweGQ0LAorICAnUmVmRXEnOiAweGQ1LAor
ICAnQnJPbk5vbk51bGwnOiAweGQ2Cit9OworCitmdW5jdGlvbiBkZWZpbmVXYXNtT3Bjb2RlKG5h
bWUsIHZhbHVlKSB7CisgIGlmIChnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXMgPT09IHVuZGVm
aW5lZCkgeworICAgIGdsb2JhbFRoaXMua1dhc21PcGNvZGVOYW1lcyA9IHt9OworICB9CisgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBuYW1lLCB7dmFsdWU6IHZhbHVlfSk7Cisg
IGlmIChnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXNbdmFsdWVdICE9PSB1bmRlZmluZWQpIHsK
KyAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSB3YXNtIG9wY29kZTogJHt2YWx1ZX0uIFBy
ZXZpb3VzIG5hbWU6ICR7CisgICAgICAgIGdsb2JhbFRoaXMua1dhc21PcGNvZGVOYW1lc1t2YWx1
ZV19LCBuZXcgbmFtZTogJHtuYW1lfWApOworICB9CisgIGdsb2JhbFRoaXMua1dhc21PcGNvZGVO
YW1lc1t2YWx1ZV0gPSBuYW1lOworfQorZm9yIChsZXQgbmFtZSBpbiBrV2FzbU9wY29kZXMpIHsK
KyAgZGVmaW5lV2FzbU9wY29kZShga0V4cHIke25hbWV9YCwga1dhc21PcGNvZGVzW25hbWVdKTsK
K30KKworLy8gUHJlZml4IG9wY29kZXMKK2NvbnN0IGtQcmVmaXhPcGNvZGVzID0geworICAnR0Mn
OiAweGZiLAorICAnTnVtZXJpYyc6IDB4ZmMsCisgICdTaW1kJzogMHhmZCwKKyAgJ0F0b21pYyc6
IDB4ZmUKK307Citmb3IgKGxldCBwcmVmaXggaW4ga1ByZWZpeE9wY29kZXMpIHsKKyAgZGVmaW5l
V2FzbU9wY29kZShgayR7cHJlZml4fVByZWZpeGAsIGtQcmVmaXhPcGNvZGVzW3ByZWZpeF0pOwor
fQorCisvLyBHQyBvcGNvZGVzCitsZXQga0V4cHJTdHJ1Y3ROZXdXaXRoUnR0ID0gMHgwMTsKK2xl
dCBrRXhwclN0cnVjdE5ld0RlZmF1bHRXaXRoUnR0ID0gMHgwMjsKK2xldCBrRXhwclN0cnVjdEdl
dCA9IDB4MDM7CitsZXQga0V4cHJTdHJ1Y3RHZXRTID0gMHgwNDsKK2xldCBrRXhwclN0cnVjdEdl
dFUgPSAweDA1OworbGV0IGtFeHByU3RydWN0U2V0ID0gMHgwNjsKK2xldCBrRXhwclN0cnVjdE5l
dyA9IDB4MDc7CitsZXQga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0ID0gMHgwODsKK2xldCBrRXhwckFy
cmF5TmV3V2l0aFJ0dCA9IDB4MTE7CitsZXQga0V4cHJBcnJheU5ld0RlZmF1bHRXaXRoUnR0ID0g
MHgxMjsKK2xldCBrRXhwckFycmF5R2V0ID0gMHgxMzsKK2xldCBrRXhwckFycmF5R2V0UyA9IDB4
MTQ7CitsZXQga0V4cHJBcnJheUdldFUgPSAweDE1OworbGV0IGtFeHByQXJyYXlTZXQgPSAweDE2
OworbGV0IGtFeHByQXJyYXlMZW4gPSAweDE3OworbGV0IGtFeHByQXJyYXlDb3B5ID0gMHgxODsK
K2xldCBrRXhwckFycmF5SW5pdCA9IDB4MTk7CitsZXQga0V4cHJBcnJheUluaXRTdGF0aWMgPSAw
eDFhOworbGV0IGtFeHByQXJyYXlOZXcgPSAweDFiOworbGV0IGtFeHByQXJyYXlOZXdEZWZhdWx0
ID0gMHgxYzsKK2xldCBrRXhwckkzMU5ldyA9IDB4MjA7CitsZXQga0V4cHJJMzFHZXRTID0gMHgy
MTsKK2xldCBrRXhwckkzMUdldFUgPSAweDIyOworbGV0IGtFeHByUnR0Q2Fub24gPSAweDMwOwor
bGV0IGtFeHByUnR0U3ViID0gMHgzMTsKK2xldCBrRXhwclJ0dEZyZXNoU3ViID0gMHgzMjsKK2xl
dCBrRXhwclJlZlRlc3QgPSAweDQwOworbGV0IGtFeHByUmVmQ2FzdCA9IDB4NDE7CitsZXQga0V4
cHJCck9uQ2FzdCA9IDB4NDI7CitsZXQga0V4cHJCck9uQ2FzdEZhaWwgPSAweDQzOworbGV0IGtF
eHByUmVmVGVzdFN0YXRpYyA9IDB4NDQ7CitsZXQga0V4cHJSZWZDYXN0U3RhdGljID0gMHg0NTsK
K2xldCBrRXhwckJyT25DYXN0U3RhdGljID0gMHg0NjsKK2xldCBrRXhwckJyT25DYXN0U3RhdGlj
RmFpbCA9IDB4NDc7CitsZXQga0V4cHJSZWZJc0Z1bmMgPSAweDUwOworbGV0IGtFeHByUmVmSXNE
YXRhID0gMHg1MTsKK2xldCBrRXhwclJlZklzSTMxID0gMHg1MjsKK2xldCBrRXhwclJlZkFzRnVu
YyA9IDB4NTg7CitsZXQga0V4cHJSZWZBc0RhdGEgPSAweDU5OworbGV0IGtFeHByUmVmQXNJMzEg
PSAweDVhOworbGV0IGtFeHByQnJPbkZ1bmMgPSAweDYwOworbGV0IGtFeHByQnJPbkRhdGEgPSAw
eDYxOworbGV0IGtFeHByQnJPbkkzMSA9IDB4NjI7CisKKy8vIE51bWVyaWMgb3Bjb2Rlcy4KK2xl
dCBrRXhwckkzMlNDb252ZXJ0U2F0RjMyID0gMHgwMDsKK2xldCBrRXhwckkzMlVDb252ZXJ0U2F0
RjMyID0gMHgwMTsKK2xldCBrRXhwckkzMlNDb252ZXJ0U2F0RjY0ID0gMHgwMjsKK2xldCBrRXhw
ckkzMlVDb252ZXJ0U2F0RjY0ID0gMHgwMzsKK2xldCBrRXhwckk2NFNDb252ZXJ0U2F0RjMyID0g
MHgwNDsKK2xldCBrRXhwckk2NFVDb252ZXJ0U2F0RjMyID0gMHgwNTsKK2xldCBrRXhwckk2NFND
b252ZXJ0U2F0RjY0ID0gMHgwNjsKK2xldCBrRXhwckk2NFVDb252ZXJ0U2F0RjY0ID0gMHgwNzsK
K2xldCBrRXhwck1lbW9yeUluaXQgPSAweDA4OworbGV0IGtFeHByRGF0YURyb3AgPSAweDA5Owor
bGV0IGtFeHByTWVtb3J5Q29weSA9IDB4MGE7CitsZXQga0V4cHJNZW1vcnlGaWxsID0gMHgwYjsK
K2xldCBrRXhwclRhYmxlSW5pdCA9IDB4MGM7CitsZXQga0V4cHJFbGVtRHJvcCA9IDB4MGQ7Cits
ZXQga0V4cHJUYWJsZUNvcHkgPSAweDBlOworbGV0IGtFeHByVGFibGVHcm93ID0gMHgwZjsKK2xl
dCBrRXhwclRhYmxlU2l6ZSA9IDB4MTA7CitsZXQga0V4cHJUYWJsZUZpbGwgPSAweDExOworCisv
LyBBdG9taWMgb3Bjb2Rlcy4KK2xldCBrRXhwckF0b21pY05vdGlmeSA9IDB4MDA7CitsZXQga0V4
cHJJMzJBdG9taWNXYWl0ID0gMHgwMTsKK2xldCBrRXhwckk2NEF0b21pY1dhaXQgPSAweDAyOwor
bGV0IGtFeHBySTMyQXRvbWljTG9hZCA9IDB4MTA7CitsZXQga0V4cHJJMzJBdG9taWNMb2FkOFUg
PSAweDEyOworbGV0IGtFeHBySTMyQXRvbWljTG9hZDE2VSA9IDB4MTM7CitsZXQga0V4cHJJMzJB
dG9taWNTdG9yZSA9IDB4MTc7CitsZXQga0V4cHJJMzJBdG9taWNTdG9yZThVID0gMHgxOTsKK2xl
dCBrRXhwckkzMkF0b21pY1N0b3JlMTZVID0gMHgxYTsKK2xldCBrRXhwckkzMkF0b21pY0FkZCA9
IDB4MWU7CitsZXQga0V4cHJJMzJBdG9taWNBZGQ4VSA9IDB4MjA7CitsZXQga0V4cHJJMzJBdG9t
aWNBZGQxNlUgPSAweDIxOworbGV0IGtFeHBySTMyQXRvbWljU3ViID0gMHgyNTsKK2xldCBrRXhw
ckkzMkF0b21pY1N1YjhVID0gMHgyNzsKK2xldCBrRXhwckkzMkF0b21pY1N1YjE2VSA9IDB4Mjg7
CitsZXQga0V4cHJJMzJBdG9taWNBbmQgPSAweDJjOworbGV0IGtFeHBySTMyQXRvbWljQW5kOFUg
PSAweDJlOworbGV0IGtFeHBySTMyQXRvbWljQW5kMTZVID0gMHgyZjsKK2xldCBrRXhwckkzMkF0
b21pY09yID0gMHgzMzsKK2xldCBrRXhwckkzMkF0b21pY09yOFUgPSAweDM1OworbGV0IGtFeHBy
STMyQXRvbWljT3IxNlUgPSAweDM2OworbGV0IGtFeHBySTMyQXRvbWljWG9yID0gMHgzYTsKK2xl
dCBrRXhwckkzMkF0b21pY1hvcjhVID0gMHgzYzsKK2xldCBrRXhwckkzMkF0b21pY1hvcjE2VSA9
IDB4M2Q7CitsZXQga0V4cHJJMzJBdG9taWNFeGNoYW5nZSA9IDB4NDE7CitsZXQga0V4cHJJMzJB
dG9taWNFeGNoYW5nZThVID0gMHg0MzsKK2xldCBrRXhwckkzMkF0b21pY0V4Y2hhbmdlMTZVID0g
MHg0NDsKK2xldCBrRXhwckkzMkF0b21pY0NvbXBhcmVFeGNoYW5nZSA9IDB4NDg7CitsZXQga0V4
cHJJMzJBdG9taWNDb21wYXJlRXhjaGFuZ2U4VSA9IDB4NGE7CitsZXQga0V4cHJJMzJBdG9taWND
b21wYXJlRXhjaGFuZ2UxNlUgPSAweDRiOworCitsZXQga0V4cHJJNjRBdG9taWNMb2FkID0gMHgx
MTsKK2xldCBrRXhwckk2NEF0b21pY0xvYWQ4VSA9IDB4MTQ7CitsZXQga0V4cHJJNjRBdG9taWNM
b2FkMTZVID0gMHgxNTsKK2xldCBrRXhwckk2NEF0b21pY0xvYWQzMlUgPSAweDE2OworbGV0IGtF
eHBySTY0QXRvbWljU3RvcmUgPSAweDE4OworbGV0IGtFeHBySTY0QXRvbWljU3RvcmU4VSA9IDB4
MWI7CitsZXQga0V4cHJJNjRBdG9taWNTdG9yZTE2VSA9IDB4MWM7CitsZXQga0V4cHJJNjRBdG9t
aWNTdG9yZTMyVSA9IDB4MWQ7CitsZXQga0V4cHJJNjRBdG9taWNBZGQgPSAweDFmOworbGV0IGtF
eHBySTY0QXRvbWljQWRkOFUgPSAweDIyOworbGV0IGtFeHBySTY0QXRvbWljQWRkMTZVID0gMHgy
MzsKK2xldCBrRXhwckk2NEF0b21pY0FkZDMyVSA9IDB4MjQ7CitsZXQga0V4cHJJNjRBdG9taWNT
dWIgPSAweDI2OworbGV0IGtFeHBySTY0QXRvbWljU3ViOFUgPSAweDI5OworbGV0IGtFeHBySTY0
QXRvbWljU3ViMTZVID0gMHgyYTsKK2xldCBrRXhwckk2NEF0b21pY1N1YjMyVSA9IDB4MmI7Cits
ZXQga0V4cHJJNjRBdG9taWNBbmQgPSAweDJkOworbGV0IGtFeHBySTY0QXRvbWljQW5kOFUgPSAw
eDMwOworbGV0IGtFeHBySTY0QXRvbWljQW5kMTZVID0gMHgzMTsKK2xldCBrRXhwckk2NEF0b21p
Y0FuZDMyVSA9IDB4MzI7CitsZXQga0V4cHJJNjRBdG9taWNPciA9IDB4MzQ7CitsZXQga0V4cHJJ
NjRBdG9taWNPcjhVID0gMHgzNzsKK2xldCBrRXhwckk2NEF0b21pY09yMTZVID0gMHgzODsKK2xl
dCBrRXhwckk2NEF0b21pY09yMzJVID0gMHgzOTsKK2xldCBrRXhwckk2NEF0b21pY1hvciA9IDB4
M2I7CitsZXQga0V4cHJJNjRBdG9taWNYb3I4VSA9IDB4M2U7CitsZXQga0V4cHJJNjRBdG9taWNY
b3IxNlUgPSAweDNmOworbGV0IGtFeHBySTY0QXRvbWljWG9yMzJVID0gMHg0MDsKK2xldCBrRXhw
ckk2NEF0b21pY0V4Y2hhbmdlID0gMHg0MjsKK2xldCBrRXhwckk2NEF0b21pY0V4Y2hhbmdlOFUg
PSAweDQ1OworbGV0IGtFeHBySTY0QXRvbWljRXhjaGFuZ2UxNlUgPSAweDQ2OworbGV0IGtFeHBy
STY0QXRvbWljRXhjaGFuZ2UzMlUgPSAweDQ3OworbGV0IGtFeHBySTY0QXRvbWljQ29tcGFyZUV4
Y2hhbmdlID0gMHg0OQorbGV0IGtFeHBySTY0QXRvbWljQ29tcGFyZUV4Y2hhbmdlOFUgPSAweDRj
OworbGV0IGtFeHBySTY0QXRvbWljQ29tcGFyZUV4Y2hhbmdlMTZVID0gMHg0ZDsKK2xldCBrRXhw
ckk2NEF0b21pY0NvbXBhcmVFeGNoYW5nZTMyVSA9IDB4NGU7CisKKy8vIFNpbWQgb3Bjb2Rlcy4K
K2xldCBrRXhwclMxMjhMb2FkTWVtID0gMHgwMDsKK2xldCBrRXhwclMxMjhMb2FkOHg4UyA9IDB4
MDE7CitsZXQga0V4cHJTMTI4TG9hZDh4OFUgPSAweDAyOworbGV0IGtFeHByUzEyOExvYWQxNng0
UyA9IDB4MDM7CitsZXQga0V4cHJTMTI4TG9hZDE2eDRVID0gMHgwNDsKK2xldCBrRXhwclMxMjhM
b2FkMzJ4MlMgPSAweDA1OworbGV0IGtFeHByUzEyOExvYWQzMngyVSA9IDB4MDY7CitsZXQga0V4
cHJTMTI4TG9hZDhTcGxhdCA9IDB4MDc7CitsZXQga0V4cHJTMTI4TG9hZDE2U3BsYXQgPSAweDA4
OworbGV0IGtFeHByUzEyOExvYWQzMlNwbGF0ID0gMHgwOTsKK2xldCBrRXhwclMxMjhMb2FkNjRT
cGxhdCA9IDB4MGE7CitsZXQga0V4cHJTMTI4U3RvcmVNZW0gPSAweDBiOworbGV0IGtFeHByUzEy
OENvbnN0ID0gMHgwYzsKK2xldCBrRXhwckk4eDE2U2h1ZmZsZSA9IDB4MGQ7CitsZXQga0V4cHJJ
OHgxNlN3aXp6bGUgPSAweDBlOworCitsZXQga0V4cHJJOHgxNlNwbGF0ID0gMHgwZjsKK2xldCBr
RXhwckkxNng4U3BsYXQgPSAweDEwOworbGV0IGtFeHBySTMyeDRTcGxhdCA9IDB4MTE7CitsZXQg
a0V4cHJJNjR4MlNwbGF0ID0gMHgxMjsKK2xldCBrRXhwckYzMng0U3BsYXQgPSAweDEzOworbGV0
IGtFeHByRjY0eDJTcGxhdCA9IDB4MTQ7CitsZXQga0V4cHJJOHgxNkV4dHJhY3RMYW5lUyA9IDB4
MTU7CitsZXQga0V4cHJJOHgxNkV4dHJhY3RMYW5lVSA9IDB4MTY7CitsZXQga0V4cHJJOHgxNlJl
cGxhY2VMYW5lID0gMHgxNzsKK2xldCBrRXhwckkxNng4RXh0cmFjdExhbmVTID0gMHgxODsKK2xl
dCBrRXhwckkxNng4RXh0cmFjdExhbmVVID0gMHgxOTsKK2xldCBrRXhwckkxNng4UmVwbGFjZUxh
bmUgPSAweDFhOworbGV0IGtFeHBySTMyeDRFeHRyYWN0TGFuZSA9IDB4MWI7CitsZXQga0V4cHJJ
MzJ4NFJlcGxhY2VMYW5lID0gMHgxYzsKK2xldCBrRXhwckk2NHgyRXh0cmFjdExhbmUgPSAweDFk
OworbGV0IGtFeHBySTY0eDJSZXBsYWNlTGFuZSA9IDB4MWU7CitsZXQga0V4cHJGMzJ4NEV4dHJh
Y3RMYW5lID0gMHgxZjsKK2xldCBrRXhwckYzMng0UmVwbGFjZUxhbmUgPSAweDIwOworbGV0IGtF
eHByRjY0eDJFeHRyYWN0TGFuZSA9IDB4MjE7CitsZXQga0V4cHJGNjR4MlJlcGxhY2VMYW5lID0g
MHgyMjsKK2xldCBrRXhwckk4eDE2RXEgPSAweDIzOworbGV0IGtFeHBySTh4MTZOZSA9IDB4MjQ7
CitsZXQga0V4cHJJOHgxNkx0UyA9IDB4MjU7CitsZXQga0V4cHJJOHgxNkx0VSA9IDB4MjY7Cits
ZXQga0V4cHJJOHgxNkd0UyA9IDB4Mjc7CitsZXQga0V4cHJJOHgxNkd0VSA9IDB4Mjg7CitsZXQg
a0V4cHJJOHgxNkxlUyA9IDB4Mjk7CitsZXQga0V4cHJJOHgxNkxlVSA9IDB4MmE7CitsZXQga0V4
cHJJOHgxNkdlUyA9IDB4MmI7CitsZXQga0V4cHJJOHgxNkdlVSA9IDB4MmM7CitsZXQga0V4cHJJ
MTZ4OEVxID0gMHgyZDsKK2xldCBrRXhwckkxNng4TmUgPSAweDJlOworbGV0IGtFeHBySTE2eDhM
dFMgPSAweDJmOworbGV0IGtFeHBySTE2eDhMdFUgPSAweDMwOworbGV0IGtFeHBySTE2eDhHdFMg
PSAweDMxOworbGV0IGtFeHBySTE2eDhHdFUgPSAweDMyOworbGV0IGtFeHBySTE2eDhMZVMgPSAw
eDMzOworbGV0IGtFeHBySTE2eDhMZVUgPSAweDM0OworbGV0IGtFeHBySTE2eDhHZVMgPSAweDM1
OworbGV0IGtFeHBySTE2eDhHZVUgPSAweDM2OworbGV0IGtFeHBySTMyeDRFcSA9IDB4Mzc7Cits
ZXQga0V4cHJJMzJ4NE5lID0gMHgzODsKK2xldCBrRXhwckkzMng0THRTID0gMHgzOTsKK2xldCBr
RXhwckkzMng0THRVID0gMHgzYTsKK2xldCBrRXhwckkzMng0R3RTID0gMHgzYjsKK2xldCBrRXhw
ckkzMng0R3RVID0gMHgzYzsKK2xldCBrRXhwckkzMng0TGVTID0gMHgzZDsKK2xldCBrRXhwckkz
Mng0TGVVID0gMHgzZTsKK2xldCBrRXhwckkzMng0R2VTID0gMHgzZjsKK2xldCBrRXhwckkzMng0
R2VVID0gMHg0MDsKK2xldCBrRXhwckYzMng0RXEgPSAweDQxOworbGV0IGtFeHByRjMyeDROZSA9
IDB4NDI7CitsZXQga0V4cHJGMzJ4NEx0ID0gMHg0MzsKK2xldCBrRXhwckYzMng0R3QgPSAweDQ0
OworbGV0IGtFeHByRjMyeDRMZSA9IDB4NDU7CitsZXQga0V4cHJGMzJ4NEdlID0gMHg0NjsKK2xl
dCBrRXhwckY2NHgyRXEgPSAweDQ3OworbGV0IGtFeHByRjY0eDJOZSA9IDB4NDg7CitsZXQga0V4
cHJGNjR4Mkx0ID0gMHg0OTsKK2xldCBrRXhwckY2NHgyR3QgPSAweDRhOworbGV0IGtFeHByRjY0
eDJMZSA9IDB4NGI7CitsZXQga0V4cHJGNjR4MkdlID0gMHg0YzsKK2xldCBrRXhwclMxMjhOb3Qg
PSAweDRkOworbGV0IGtFeHByUzEyOEFuZCA9IDB4NGU7CitsZXQga0V4cHJTMTI4QW5kTm90ID0g
MHg0ZjsKK2xldCBrRXhwclMxMjhPciA9IDB4NTA7CitsZXQga0V4cHJTMTI4WG9yID0gMHg1MTsK
K2xldCBrRXhwclMxMjhTZWxlY3QgPSAweDUyOworbGV0IGtFeHByVjEyOEFueVRydWUgPSAweDUz
OworbGV0IGtFeHByUzEyOExvYWQ4TGFuZSA9IDB4NTQ7CitsZXQga0V4cHJTMTI4TG9hZDE2TGFu
ZSA9IDB4NTU7CitsZXQga0V4cHJTMTI4TG9hZDMyTGFuZSA9IDB4NTY7CitsZXQga0V4cHJTMTI4
TG9hZDY0TGFuZSA9IDB4NTc7CitsZXQga0V4cHJTMTI4U3RvcmU4TGFuZSA9IDB4NTg7CitsZXQg
a0V4cHJTMTI4U3RvcmUxNkxhbmUgPSAweDU5OworbGV0IGtFeHByUzEyOFN0b3JlMzJMYW5lID0g
MHg1YTsKK2xldCBrRXhwclMxMjhTdG9yZTY0TGFuZSA9IDB4NWI7CitsZXQga0V4cHJTMTI4TG9h
ZDMyWmVybyA9IDB4NWM7CitsZXQga0V4cHJTMTI4TG9hZDY0WmVybyA9IDB4NWQ7CitsZXQga0V4
cHJGMzJ4NERlbW90ZUY2NHgyWmVybyA9IDB4NWU7CitsZXQga0V4cHJGNjR4MlByb21vdGVMb3dG
MzJ4NCA9IDB4NWY7CitsZXQga0V4cHJJOHgxNkFicyA9IDB4NjA7CitsZXQga0V4cHJJOHgxNk5l
ZyA9IDB4NjE7CitsZXQga0V4cHJJOHgxNlBvcGNudCA9IDB4NjI7CitsZXQga0V4cHJJOHgxNkFs
bFRydWUgPSAweDYzOworbGV0IGtFeHBySTh4MTZCaXRNYXNrID0gMHg2NDsKK2xldCBrRXhwckk4
eDE2U0NvbnZlcnRJMTZ4OCA9IDB4NjU7CitsZXQga0V4cHJJOHgxNlVDb252ZXJ0STE2eDggPSAw
eDY2OworbGV0IGtFeHByRjMyeDRDZWlsID0gMHg2NzsKK2xldCBrRXhwckYzMng0Rmxvb3IgPSAw
eDY4OworbGV0IGtFeHByRjMyeDRUcnVuYyA9IDB4Njk7CitsZXQga0V4cHJGMzJ4NE5lYXJlc3RJ
bnQgPSAweDZhOworbGV0IGtFeHBySTh4MTZTaGwgPSAweDZiOworbGV0IGtFeHBySTh4MTZTaHJT
ID0gMHg2YzsKK2xldCBrRXhwckk4eDE2U2hyVSA9IDB4NmQ7CitsZXQga0V4cHJJOHgxNkFkZCA9
IDB4NmU7CitsZXQga0V4cHJJOHgxNkFkZFNhdFMgPSAweDZmOworbGV0IGtFeHBySTh4MTZBZGRT
YXRVID0gMHg3MDsKK2xldCBrRXhwckk4eDE2U3ViID0gMHg3MTsKK2xldCBrRXhwckk4eDE2U3Vi
U2F0UyA9IDB4NzI7CitsZXQga0V4cHJJOHgxNlN1YlNhdFUgPSAweDczOworbGV0IGtFeHByRjY0
eDJDZWlsID0gMHg3NDsKK2xldCBrRXhwckY2NHgyRmxvb3IgPSAweDc1OworbGV0IGtFeHBySTh4
MTZNaW5TID0gMHg3NjsKK2xldCBrRXhwckk4eDE2TWluVSA9IDB4Nzc7CitsZXQga0V4cHJJOHgx
Nk1heFMgPSAweDc4OworbGV0IGtFeHBySTh4MTZNYXhVID0gMHg3OTsKK2xldCBrRXhwckY2NHgy
VHJ1bmMgPSAweDdhOworbGV0IGtFeHBySTh4MTZSb3VuZGluZ0F2ZXJhZ2VVID0gMHg3YjsKK2xl
dCBrRXhwckkxNng4RXh0QWRkUGFpcndpc2VJOHgxNlMgPSAweDdjOworbGV0IGtFeHBySTE2eDhF
eHRBZGRQYWlyd2lzZUk4eDE2VSA9IDB4N2Q7CitsZXQga0V4cHJJMzJ4NEV4dEFkZFBhaXJ3aXNl
STE2eDhTID0gMHg3ZTsKK2xldCBrRXhwckkzMng0RXh0QWRkUGFpcndpc2VJMTZ4OFUgPSAweDdm
OworbGV0IGtFeHBySTE2eDhBYnMgPSAweDgwOworbGV0IGtFeHBySTE2eDhOZWcgPSAweDgxOwor
bGV0IGtFeHBySTE2eDhRMTVNdWxSU2F0UyA9IDB4ODI7CitsZXQga0V4cHJJMTZ4OEFsbFRydWUg
PSAweDgzOworbGV0IGtFeHBySTE2eDhCaXRNYXNrID0gMHg4NDsKK2xldCBrRXhwckkxNng4U0Nv
bnZlcnRJMzJ4NCA9IDB4ODU7CitsZXQga0V4cHJJMTZ4OFVDb252ZXJ0STMyeDQgPSAweDg2Owor
bGV0IGtFeHBySTE2eDhTQ29udmVydEk4eDE2TG93ID0gMHg4NzsKK2xldCBrRXhwckkxNng4U0Nv
bnZlcnRJOHgxNkhpZ2ggPSAweDg4OworbGV0IGtFeHBySTE2eDhVQ29udmVydEk4eDE2TG93ID0g
MHg4OTsKK2xldCBrRXhwckkxNng4VUNvbnZlcnRJOHgxNkhpZ2ggPSAweDhhOworbGV0IGtFeHBy
STE2eDhTaGwgPSAweDhiOworbGV0IGtFeHBySTE2eDhTaHJTID0gMHg4YzsKK2xldCBrRXhwckkx
Nng4U2hyVSA9IDB4OGQ7CitsZXQga0V4cHJJMTZ4OEFkZCA9IDB4OGU7CitsZXQga0V4cHJJMTZ4
OEFkZFNhdFMgPSAweDhmOworbGV0IGtFeHBySTE2eDhBZGRTYXRVID0gMHg5MDsKK2xldCBrRXhw
ckkxNng4U3ViID0gMHg5MTsKK2xldCBrRXhwckkxNng4U3ViU2F0UyA9IDB4OTI7CitsZXQga0V4
cHJJMTZ4OFN1YlNhdFUgPSAweDkzOworbGV0IGtFeHByRjY0eDJOZWFyZXN0SW50ID0gMHg5NDsK
K2xldCBrRXhwckkxNng4TXVsID0gMHg5NTsKK2xldCBrRXhwckkxNng4TWluUyA9IDB4OTY7Cits
ZXQga0V4cHJJMTZ4OE1pblUgPSAweDk3OworbGV0IGtFeHBySTE2eDhNYXhTID0gMHg5ODsKK2xl
dCBrRXhwckkxNng4TWF4VSA9IDB4OTk7CitsZXQga0V4cHJJMTZ4OFJvdW5kaW5nQXZlcmFnZVUg
PSAweDliOworbGV0IGtFeHBySTE2eDhFeHRNdWxMb3dJOHgxNlMgPSAweDljOworbGV0IGtFeHBy
STE2eDhFeHRNdWxIaWdoSTh4MTZTID0gMHg5ZDsKK2xldCBrRXhwckkxNng4RXh0TXVsTG93STh4
MTZVID0gMHg5ZTsKK2xldCBrRXhwckkxNng4RXh0TXVsSGlnaEk4eDE2VSA9IDB4OWY7CitsZXQg
a0V4cHJJMzJ4NEFicyA9IDB4YTA7CitsZXQga0V4cHJJMzJ4NE5lZyA9IDB4YTE7CitsZXQga0V4
cHJJMzJ4NEFsbFRydWUgPSAweGEzOworbGV0IGtFeHBySTMyeDRCaXRNYXNrID0gMHhhNDsKK2xl
dCBrRXhwckkzMng0U0NvbnZlcnRJMTZ4OExvdyA9IDB4YTc7CitsZXQga0V4cHJJMzJ4NFNDb252
ZXJ0STE2eDhIaWdoID0gMHhhODsKK2xldCBrRXhwckkzMng0VUNvbnZlcnRJMTZ4OExvdyA9IDB4
YTk7CitsZXQga0V4cHJJMzJ4NFVDb252ZXJ0STE2eDhIaWdoID0gMHhhYTsKK2xldCBrRXhwckkz
Mng0U2hsID0gMHhhYjsKK2xldCBrRXhwckkzMng0U2hyUyA9IDB4YWM7CitsZXQga0V4cHJJMzJ4
NFNoclUgPSAweGFkOworbGV0IGtFeHBySTMyeDRBZGQgPSAweGFlOworbGV0IGtFeHBySTMyeDRT
dWIgPSAweGIxOworbGV0IGtFeHBySTMyeDRNdWwgPSAweGI1OworbGV0IGtFeHBySTMyeDRNaW5T
ID0gMHhiNjsKK2xldCBrRXhwckkzMng0TWluVSA9IDB4Yjc7CitsZXQga0V4cHJJMzJ4NE1heFMg
PSAweGI4OworbGV0IGtFeHBySTMyeDRNYXhVID0gMHhiOTsKK2xldCBrRXhwckkzMng0RG90STE2
eDhTID0gMHhiYTsKK2xldCBrRXhwckkzMng0RXh0TXVsTG93STE2eDhTID0gMHhiYzsKK2xldCBr
RXhwckkzMng0RXh0TXVsSGlnaEkxNng4UyA9IDB4YmQ7CitsZXQga0V4cHJJMzJ4NEV4dE11bExv
d0kxNng4VSA9IDB4YmU7CitsZXQga0V4cHJJMzJ4NEV4dE11bEhpZ2hJMTZ4OFUgPSAweGJmOwor
bGV0IGtFeHBySTY0eDJBYnMgPSAweGMwOworbGV0IGtFeHBySTY0eDJOZWcgPSAweGMxOworbGV0
IGtFeHBySTY0eDJBbGxUcnVlID0gMHhjMzsKK2xldCBrRXhwckk2NHgyQml0TWFzayA9IDB4YzQ7
CitsZXQga0V4cHJJNjR4MlNDb252ZXJ0STMyeDRMb3cgPSAweGM3OworbGV0IGtFeHBySTY0eDJT
Q29udmVydEkzMng0SGlnaCA9IDB4Yzg7CitsZXQga0V4cHJJNjR4MlVDb252ZXJ0STMyeDRMb3cg
PSAweGM5OworbGV0IGtFeHBySTY0eDJVQ29udmVydEkzMng0SGlnaCA9IDB4Y2E7CitsZXQga0V4
cHJJNjR4MlNobCA9IDB4Y2I7CitsZXQga0V4cHJJNjR4MlNoclMgPSAweGNjOworbGV0IGtFeHBy
STY0eDJTaHJVID0gMHhjZDsKK2xldCBrRXhwckk2NHgyQWRkID0gMHhjZTsKK2xldCBrRXhwckk2
NHgyU3ViID0gMHhkMTsKK2xldCBrRXhwckk2NHgyTXVsID0gMHhkNTsKK2xldCBrRXhwckk2NHgy
RXEgPSAweGQ2OworbGV0IGtFeHBySTY0eDJOZSA9IDB4ZDc7CitsZXQga0V4cHJJNjR4Mkx0UyA9
IDB4ZDg7CitsZXQga0V4cHJJNjR4Mkd0UyA9IDB4ZDk7CitsZXQga0V4cHJJNjR4MkxlUyA9IDB4
ZGE7CitsZXQga0V4cHJJNjR4MkdlUyA9IDB4ZGI7CitsZXQga0V4cHJJNjR4MkV4dE11bExvd0kz
Mng0UyA9IDB4ZGM7CitsZXQga0V4cHJJNjR4MkV4dE11bEhpZ2hJMzJ4NFMgPSAweGRkOworbGV0
IGtFeHBySTY0eDJFeHRNdWxMb3dJMzJ4NFUgPSAweGRlOworbGV0IGtFeHBySTY0eDJFeHRNdWxI
aWdoSTMyeDRVID0gMHhkZjsKK2xldCBrRXhwckYzMng0QWJzID0gMHhlMDsKK2xldCBrRXhwckYz
Mng0TmVnID0gMHhlMTsKK2xldCBrRXhwckYzMng0U3FydCA9IDB4ZTM7CitsZXQga0V4cHJGMzJ4
NEFkZCA9IDB4ZTQ7CitsZXQga0V4cHJGMzJ4NFN1YiA9IDB4ZTU7CitsZXQga0V4cHJGMzJ4NE11
bCA9IDB4ZTY7CitsZXQga0V4cHJGMzJ4NERpdiA9IDB4ZTc7CitsZXQga0V4cHJGMzJ4NE1pbiA9
IDB4ZTg7CitsZXQga0V4cHJGMzJ4NE1heCA9IDB4ZTk7CitsZXQga0V4cHJGMzJ4NFBtaW4gPSAw
eGVhOworbGV0IGtFeHByRjMyeDRQbWF4ID0gMHhlYjsKK2xldCBrRXhwckY2NHgyQWJzID0gMHhl
YzsKK2xldCBrRXhwckY2NHgyTmVnID0gMHhlZDsKK2xldCBrRXhwckY2NHgyU3FydCA9IDB4ZWY7
CitsZXQga0V4cHJGNjR4MkFkZCA9IDB4ZjA7CitsZXQga0V4cHJGNjR4MlN1YiA9IDB4ZjE7Cits
ZXQga0V4cHJGNjR4Mk11bCA9IDB4ZjI7CitsZXQga0V4cHJGNjR4MkRpdiA9IDB4ZjM7CitsZXQg
a0V4cHJGNjR4Mk1pbiA9IDB4ZjQ7CitsZXQga0V4cHJGNjR4Mk1heCA9IDB4ZjU7CitsZXQga0V4
cHJGNjR4MlBtaW4gPSAweGY2OworbGV0IGtFeHByRjY0eDJQbWF4ID0gMHhmNzsKK2xldCBrRXhw
ckkzMng0U0NvbnZlcnRGMzJ4NCA9IDB4Zjg7CitsZXQga0V4cHJJMzJ4NFVDb252ZXJ0RjMyeDQg
PSAweGY5OworbGV0IGtFeHByRjMyeDRTQ29udmVydEkzMng0ID0gMHhmYTsKK2xldCBrRXhwckYz
Mng0VUNvbnZlcnRJMzJ4NCA9IDB4ZmI7CitsZXQga0V4cHJJMzJ4NFRydW5jU2F0RjY0eDJTWmVy
byA9IDB4ZmM7CitsZXQga0V4cHJJMzJ4NFRydW5jU2F0RjY0eDJVWmVybyA9IDB4ZmQ7CitsZXQg
a0V4cHJGNjR4MkNvbnZlcnRMb3dJMzJ4NFMgPSAweGZlOworbGV0IGtFeHByRjY0eDJDb252ZXJ0
TG93STMyeDRVID0gMHhmZjsKKworLy8gQ29tcGlsYXRpb24gaGludCBjb25zdGFudHMuCitsZXQg
a0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5RGVmYXVsdCA9IDB4MDA7CitsZXQga0NvbXBpbGF0aW9u
SGludFN0cmF0ZWd5TGF6eSA9IDB4MDE7CitsZXQga0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5RWFn
ZXIgPSAweDAyOworbGV0IGtDb21waWxhdGlvbkhpbnRTdHJhdGVneUxhenlCYXNlbGluZUVhZ2Vy
VG9wVGllciA9IDB4MDM7CitsZXQga0NvbXBpbGF0aW9uSGludFRpZXJEZWZhdWx0ID0gMHgwMDsK
K2xldCBrQ29tcGlsYXRpb25IaW50VGllckJhc2VsaW5lID0gMHgwMTsKK2xldCBrQ29tcGlsYXRp
b25IaW50VGllck9wdGltaXplZCA9IDB4MDI7CisKK2xldCBrVHJhcFVucmVhY2hhYmxlID0gMDsK
K2xldCBrVHJhcE1lbU91dE9mQm91bmRzID0gMTsKK2xldCBrVHJhcERpdkJ5WmVybyA9IDI7Cits
ZXQga1RyYXBEaXZVbnJlcHJlc2VudGFibGUgPSAzOworbGV0IGtUcmFwUmVtQnlaZXJvID0gNDsK
K2xldCBrVHJhcEZsb2F0VW5yZXByZXNlbnRhYmxlID0gNTsKK2xldCBrVHJhcFRhYmxlT3V0T2ZC
b3VuZHMgPSA2OworbGV0IGtUcmFwRnVuY1NpZ01pc21hdGNoID0gNzsKK2xldCBrVHJhcFVuYWxp
Z25lZEFjY2VzcyA9IDg7CitsZXQga1RyYXBEYXRhU2VnbWVudERyb3BwZWQgPSA5OworbGV0IGtU
cmFwRWxlbVNlZ21lbnREcm9wcGVkID0gMTA7CitsZXQga1RyYXBSZXRocm93TnVsbCA9IDExOwor
CitsZXQga1RyYXBNc2dzID0gWworICAvVW5yZWFjaGFibGUvLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIC0tCisgICdtZW1vcnkgYWNjZXNzIG91dCBvZiBib3VuZHMnLCAg
ICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgL0RpdmlzaW9uIGJ5IHplcm8vLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAtLQorICAnZGl2aWRlIHJlc3VsdCB1bnJlcHJlc2VudGFi
bGUnLCAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdyZW1haW5kZXIgYnkgemVybycsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgJ2Zsb2F0IHVucmVwcmVzZW50YWJsZSBp
biBpbnRlZ2VyIHJhbmdlJywgICAgICAgICAvLyAtLQorICAndGFibGUgaW5kZXggaXMgb3V0IG9m
IGJvdW5kcycsICAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdudWxsIGZ1bmN0aW9uIG9yIGZ1
bmN0aW9uIHNpZ25hdHVyZSBtaXNtYXRjaCcsICAgLy8gLS0KKyAgJ29wZXJhdGlvbiBkb2VzIG5v
dCBzdXBwb3J0IHVuYWxpZ25lZCBhY2Nlc3NlcycsICAvLyAtLQorICAnZGF0YSBzZWdtZW50IGhh
cyBiZWVuIGRyb3BwZWQnLCAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdlbGVtZW50IHNlZ21l
bnQgaGFzIGJlZW4gZHJvcHBlZCcsICAgICAgICAgICAgICAgLy8gLS0KKyAgJ3JldGhyb3dpbmcg
bnVsbCB2YWx1ZScgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtLQorXTsKKworLy8gVGhp
cyByZXF1aXJlcyB0ZXN0L21qc3VuaXQvbWpzdW5pdC5qcy4KK2Z1bmN0aW9uIGFzc2VydFRyYXBz
KHRyYXAsIGNvZGUpIHsKKyAgYXNzZXJ0VGhyb3dzKGNvZGUsIFdlYkFzc2VtYmx5LlJ1bnRpbWVF
cnJvciwga1RyYXBNc2dzW3RyYXBdKTsKK30KKworY2xhc3MgQmluYXJ5IHsKKyAgY29uc3RydWN0
b3IoKSB7CisgICAgdGhpcy5sZW5ndGggPSAwOworICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4
QXJyYXkoODE5Mik7CisgIH0KKworICBlbnN1cmVfc3BhY2UobmVlZGVkKSB7CisgICAgaWYgKHRo
aXMuYnVmZmVyLmxlbmd0aCAtIHRoaXMubGVuZ3RoID49IG5lZWRlZCkgcmV0dXJuOworICAgIGxl
dCBuZXdfY2FwYWNpdHkgPSB0aGlzLmJ1ZmZlci5sZW5ndGggKiAyOworICAgIHdoaWxlIChuZXdf
Y2FwYWNpdHkgLSB0aGlzLmxlbmd0aCA8IG5lZWRlZCkgbmV3X2NhcGFjaXR5ICo9IDI7CisgICAg
bGV0IG5ld19idWZmZXIgPSBuZXcgVWludDhBcnJheShuZXdfY2FwYWNpdHkpOworICAgIG5ld19i
dWZmZXIuc2V0KHRoaXMuYnVmZmVyKTsKKyAgICB0aGlzLmJ1ZmZlciA9IG5ld19idWZmZXI7Cisg
IH0KKworICB0cnVuY19idWZmZXIoKSB7CisgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHRoaXMu
YnVmZmVyLmJ1ZmZlciwgMCwgdGhpcy5sZW5ndGgpOworICB9CisKKyAgcmVzZXQoKSB7CisgICAg
dGhpcy5sZW5ndGggPSAwOworICB9CisKKyAgZW1pdF91OCh2YWwpIHsKKyAgICB0aGlzLmVuc3Vy
ZV9zcGFjZSgxKTsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbDsKKyAgfQor
CisgIGVtaXRfdTE2KHZhbCkgeworICAgIHRoaXMuZW5zdXJlX3NwYWNlKDIpOworICAgIHRoaXMu
YnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdmFsOworICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3Ro
KytdID0gdmFsID4+IDg7CisgIH0KKworICBlbWl0X3UzMih2YWwpIHsKKyAgICB0aGlzLmVuc3Vy
ZV9zcGFjZSg0KTsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbDsKKyAgICB0
aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbCA+PiA4OworICAgIHRoaXMuYnVmZmVyW3Ro
aXMubGVuZ3RoKytdID0gdmFsID4+IDE2OworICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3RoKytd
ID0gdmFsID4+IDI0OworICB9CisKKyAgZW1pdF9sZWJfdSh2YWwsIG1heF9sZW4pIHsKKyAgICB0
aGlzLmVuc3VyZV9zcGFjZShtYXhfbGVuKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heF9s
ZW47ICsraSkgeworICAgICAgbGV0IHYgPSB2YWwgJiAweGZmOworICAgICAgdmFsID0gdmFsID4+
PiA3OworICAgICAgaWYgKHZhbCA9PSAwKSB7CisgICAgICAgIHRoaXMuYnVmZmVyW3RoaXMubGVu
Z3RoKytdID0gdjsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgdGhpcy5idWZmZXJb
dGhpcy5sZW5ndGgrK10gPSB2IHwgMHg4MDsKKyAgICB9CisgICAgdGhyb3cgbmV3IEVycm9yKCdM
ZWIgdmFsdWUgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAnICsgbWF4X2xlbik7CisgIH0KKwor
ICBlbWl0X3UzMnYodmFsKSB7CisgICAgdGhpcy5lbWl0X2xlYl91KHZhbCwga01heFZhckludDMy
U2l6ZSk7CisgIH0KKworICBlbWl0X3U2NHYodmFsKSB7CisgICAgdGhpcy5lbWl0X2xlYl91KHZh
bCwga01heFZhckludDY0U2l6ZSk7CisgIH0KKworICBlbWl0X2J5dGVzKGRhdGEpIHsKKyAgICB0
aGlzLmVuc3VyZV9zcGFjZShkYXRhLmxlbmd0aCk7CisgICAgdGhpcy5idWZmZXIuc2V0KGRhdGEs
IHRoaXMubGVuZ3RoKTsKKyAgICB0aGlzLmxlbmd0aCArPSBkYXRhLmxlbmd0aDsKKyAgfQorCisg
IGVtaXRfc3RyaW5nKHN0cmluZykgeworICAgIC8vIFdoZW4gdGVzdGluZyBpbGxlZ2FsIG5hbWVz
LCB3ZSBwYXNzIGEgYnl0ZSBhcnJheSBkaXJlY3RseS4KKyAgICBpZiAoc3RyaW5nIGluc3RhbmNl
b2YgQXJyYXkpIHsKKyAgICAgIHRoaXMuZW1pdF91MzJ2KHN0cmluZy5sZW5ndGgpOworICAgICAg
dGhpcy5lbWl0X2J5dGVzKHN0cmluZyk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
VGhpcyBpcyB0aGUgaGFja3kgd2F5IHRvIGNvbnZlcnQgYSBKYXZhU2NyaXB0IHN0cmluZyB0byBh
IFVURjggZW5jb2RlZAorICAgIC8vIHN0cmluZyBvbmx5IGNvbnRhaW5pbmcgc2luZ2xlLWJ5dGUg
Y2hhcmFjdGVycy4KKyAgICBsZXQgc3RyaW5nX3V0ZjggPSB1bmVzY2FwZShlbmNvZGVVUklDb21w
b25lbnQoc3RyaW5nKSk7CisgICAgdGhpcy5lbWl0X3UzMnYoc3RyaW5nX3V0ZjgubGVuZ3RoKTsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ191dGY4Lmxlbmd0aDsgaSsrKSB7CisgICAg
ICB0aGlzLmVtaXRfdTgoc3RyaW5nX3V0ZjguY2hhckNvZGVBdChpKSk7CisgICAgfQorICB9CisK
KyAgZW1pdF9oZWFwX3R5cGUoaGVhcF90eXBlKSB7CisgICAgdGhpcy5lbWl0X2J5dGVzKHdhc21T
aWduZWRMZWIoaGVhcF90eXBlLCBrTWF4VmFySW50MzJTaXplKSk7CisgIH0KKworICBlbWl0X3R5
cGUodHlwZSkgeworICAgIGlmICgodHlwZW9mIHR5cGUpID09ICdudW1iZXInKSB7CisgICAgICB0
aGlzLmVtaXRfdTgodHlwZSA+PSAwID8gdHlwZSA6IHR5cGUgJiBrTGViMTI4TWFzayk7CisgICAg
fSBlbHNlIHsKKyAgICAgIHRoaXMuZW1pdF91OCh0eXBlLm9wY29kZSk7CisgICAgICBpZiAoJ2Rl
cHRoJyBpbiB0eXBlKSB0aGlzLmVtaXRfdTgodHlwZS5kZXB0aCk7CisgICAgICB0aGlzLmVtaXRf
aGVhcF90eXBlKHR5cGUuaGVhcF90eXBlKTsKKyAgICB9CisgIH0KKworICBlbWl0X2luaXRfZXhw
cl9yZWN1cnNpdmUoZXhwcikgeworICAgIHN3aXRjaCAoZXhwci5raW5kKSB7CisgICAgICBjYXNl
IGtFeHByR2xvYmFsR2V0OgorICAgICAgICB0aGlzLmVtaXRfdTgoa0V4cHJHbG9iYWxHZXQpOwor
ICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIGtFeHBySTMyQ29uc3Q6CisgICAgICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNtSTMyQ29u
c3QoZXhwci52YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJJNjRDb25z
dDoKKyAgICAgICAgdGhpcy5lbWl0X2J5dGVzKHdhc21JNjRDb25zdChleHByLnZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwckYzMkNvbnN0OgorICAgICAgICB0aGlzLmVt
aXRfYnl0ZXMod2FzbUYzMkNvbnN0KGV4cHIudmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIGtFeHByRjY0Q29uc3Q6CisgICAgICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNtRjY0Q29u
c3QoZXhwci52YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1NpbWRQcmVmaXg6
CisgICAgICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNtUzEyOENvbnN0KGV4cHIudmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByUmVmRnVuYzoKKyAgICAgICAgdGhpcy5lbWl0
X3U4KGtFeHByUmVmRnVuYyk7CisgICAgICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIudmFsdWUpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJSZWZOdWxsOgorICAgICAgICB0aGlzLmVt
aXRfdTgoa0V4cHJSZWZOdWxsKTsKKyAgICAgICAgdGhpcy5lbWl0X2hlYXBfdHlwZShleHByLnZh
bHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByU3RydWN0TmV3OgorICAgICAg
Y2FzZSBrRXhwclN0cnVjdE5ld1dpdGhSdHQ6CisgICAgICBjYXNlIGtFeHByU3RydWN0TmV3RGVm
YXVsdDoKKyAgICAgIGNhc2Uga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0V2l0aFJ0dDoKKyAgICAgICAg
Zm9yIChsZXQgb3BlcmFuZCBvZiBleHByLm9wZXJhbmRzKSB7CisgICAgICAgICAgdGhpcy5lbWl0
X2luaXRfZXhwcl9yZWN1cnNpdmUob3BlcmFuZCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5l
bWl0X3U4KGtHQ1ByZWZpeCk7CisgICAgICAgIHRoaXMuZW1pdF91OChleHByLmtpbmQpOworICAg
ICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIGtFeHByQXJyYXlJbml0OgorICAgICAgY2FzZSBrRXhwckFycmF5SW5pdFN0YXRpYzoKKyAg
ICAgICAgZm9yIChsZXQgb3BlcmFuZCBvZiBleHByLm9wZXJhbmRzKSB7CisgICAgICAgICAgdGhp
cy5lbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUob3BlcmFuZCk7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5lbWl0X3U4KGtHQ1ByZWZpeCk7CisgICAgICAgIHRoaXMuZW1pdF91OChleHByLmtpbmQp
OworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAgdGhpcy5lbWl0
X3UzMnYoZXhwci5vcGVyYW5kcy5sZW5ndGggLSAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIGtFeHByUnR0Q2Fub246CisgICAgICAgIHRoaXMuZW1pdF91OChrR0NQcmVmaXgpOworICAg
ICAgICB0aGlzLmVtaXRfdTgoa0V4cHJSdHRDYW5vbik7CisgICAgICAgIHRoaXMuZW1pdF91MzJ2
KGV4cHIudmFsdWUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJSdHRTdWI6Cisg
ICAgICAgIHRoaXMuZW1pdF9pbml0X2V4cHJfcmVjdXJzaXZlKGV4cHIucGFyZW50KTsKKyAgICAg
ICAgdGhpcy5lbWl0X3U4KGtHY1ByZWZpeCk7CisgICAgICAgIHRoaXMuZW1pdF91OChrRXhwclJ0
dFN1Yik7CisgICAgICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIudmFsdWUpOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2Uga0V4cHJSdHRGcmVzaFN1YjoKKyAgICAgICAgdGhpcy5lbWl0X2luaXRf
ZXhwcl9yZWN1cnNpdmUoZXhwci5wYXJlbnQpOworICAgICAgICB0aGlzLmVtaXRfdTgoa0djUHJl
Zml4KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtFeHByUnR0RnJlc2hTdWIpOworICAgICAgICB0
aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisK
KyAgZW1pdF9pbml0X2V4cHIoZXhwcikgeworICAgIHRoaXMuZW1pdF9pbml0X2V4cHJfcmVjdXJz
aXZlKGV4cHIpOworICAgIHRoaXMuZW1pdF91OChrRXhwckVuZCk7CisgIH0KKworICBlbWl0X2hl
YWRlcigpIHsKKyAgICB0aGlzLmVtaXRfYnl0ZXMoWworICAgICAga1dhc21IMCwga1dhc21IMSwg
a1dhc21IMiwga1dhc21IMywga1dhc21WMCwga1dhc21WMSwga1dhc21WMiwga1dhc21WMworICAg
IF0pOworICB9CisKKyAgZW1pdF9zZWN0aW9uKHNlY3Rpb25fY29kZSwgY29udGVudF9nZW5lcmF0
b3IpIHsKKyAgICAvLyBFbWl0IHNlY3Rpb24gbmFtZS4KKyAgICB0aGlzLmVtaXRfdTgoc2VjdGlv
bl9jb2RlKTsKKyAgICAvLyBFbWl0IHRoZSBzZWN0aW9uIHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlcjog
aXRzIGZ1bGwgbGVuZ3RoIGlzbid0IGtub3cgeWV0LgorICAgIGNvbnN0IHNlY3Rpb24gPSBuZXcg
QmluYXJ5OworICAgIGNvbnRlbnRfZ2VuZXJhdG9yKHNlY3Rpb24pOworICAgIC8vIEVtaXQgc2Vj
dGlvbiBsZW5ndGguCisgICAgdGhpcy5lbWl0X3UzMnYoc2VjdGlvbi5sZW5ndGgpOworICAgIC8v
IENvcHkgdGhlIHRlbXBvcmFyeSBidWZmZXIuCisgICAgLy8gQXZvaWQgc3ByZWFkIGJlY2F1c2Ug
e3NlY3Rpb259IGNhbiBiZSBodWdlLgorICAgIHRoaXMuZW1pdF9ieXRlcyhzZWN0aW9uLnRydW5j
X2J1ZmZlcigpKTsKKyAgfQorfQorCitjbGFzcyBXYXNtRnVuY3Rpb25CdWlsZGVyIHsKKyAgLy8g
RW5jb2Rpbmcgb2YgbG9jYWwgbmFtZXM6IGEgc3RyaW5nIGNvcnJlc3BvbmRzIHRvIGEgbG9jYWwg
bmFtZSwKKyAgLy8gYSBudW1iZXIgbiBjb3JyZXNwb25kcyB0byBuIHVuZGVmaW5lZCBuYW1lcy4K
KyAgY29uc3RydWN0b3IobW9kdWxlLCBuYW1lLCB0eXBlX2luZGV4LCBhcmdfbmFtZXMpIHsKKyAg
ICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKKyAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIHRoaXMu
dHlwZV9pbmRleCA9IHR5cGVfaW5kZXg7CisgICAgdGhpcy5ib2R5ID0gW107CisgICAgdGhpcy5s
b2NhbHMgPSBbXTsKKyAgICB0aGlzLmxvY2FsX25hbWVzID0gYXJnX25hbWVzOworICAgIHRoaXMu
Ym9keV9vZmZzZXQgPSB1bmRlZmluZWQ7ICAvLyBOb3QgdmFsaWQgdW50aWwgbW9kdWxlIGlzIHNl
cmlhbGl6ZWQuCisgIH0KKworICBudW1Mb2NhbE5hbWVzKCkgeworICAgIGxldCBudW1fbG9jYWxf
bmFtZXMgPSAwOworICAgIGZvciAobGV0IGxvY19uYW1lIG9mIHRoaXMubG9jYWxfbmFtZXMpIHsK
KyAgICAgIGlmICh0eXBlb2YgbG9jX25hbWUgPT0gJ3N0cmluZycpICsrbnVtX2xvY2FsX25hbWVz
OworICAgIH0KKyAgICByZXR1cm4gbnVtX2xvY2FsX25hbWVzOworICB9CisKKyAgZXhwb3J0QXMo
bmFtZSkgeworICAgIHRoaXMubW9kdWxlLmFkZEV4cG9ydChuYW1lLCB0aGlzLmluZGV4KTsKKyAg
ICByZXR1cm4gdGhpczsKKyAgfQorCisgIGV4cG9ydEZ1bmMoKSB7CisgICAgdGhpcy5leHBvcnRB
cyh0aGlzLm5hbWUpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgc2V0Q29tcGlsYXRpb25I
aW50KHN0cmF0ZWd5LCBiYXNlbGluZVRpZXIsIHRvcFRpZXIpIHsKKyAgICB0aGlzLm1vZHVsZS5z
ZXRDb21waWxhdGlvbkhpbnQoc3RyYXRlZ3ksIGJhc2VsaW5lVGllciwgdG9wVGllciwgdGhpcy5p
bmRleCk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBhZGRCb2R5KGJvZHkpIHsKKyAgICBm
b3IgKGxldCBiIG9mIGJvZHkpIHsKKyAgICAgIGlmICh0eXBlb2YgYiAhPT0gJ251bWJlcicgfHwg
KGIgJiAofjB4RkYpKSAhPT0gMCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAg
ICAgICAnaW52YWxpZCBib2R5IChlbnRyaWVzIG11c3QgYmUgOCBiaXQgbnVtYmVycyk6ICcgKyBi
b2R5KTsKKyAgICAgIH0KKyAgICB9CisgICAgdGhpcy5ib2R5ID0gYm9keS5zbGljZSgpOworICAg
IC8vIEF1dG9tYXRpY2FsbHkgYWRkIHRoZSBlbmQgZm9yIHRoZSBmdW5jdGlvbiBibG9jayB0byB0
aGUgYm9keS4KKyAgICB0aGlzLmJvZHkucHVzaChrRXhwckVuZCk7CisgICAgcmV0dXJuIHRoaXM7
CisgIH0KKworICBhZGRCb2R5V2l0aEVuZChib2R5KSB7CisgICAgdGhpcy5ib2R5ID0gYm9keTsK
KyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGdldE51bUxvY2FscygpIHsKKyAgICBsZXQgdG90
YWxfbG9jYWxzID0gMDsKKyAgICBmb3IgKGxldCBsIG9mIHRoaXMubG9jYWxzKSB7CisgICAgICB0
b3RhbF9sb2NhbHMgKz0gbC5jb3VudAorICAgIH0KKyAgICByZXR1cm4gdG90YWxfbG9jYWxzOwor
ICB9CisKKyAgYWRkTG9jYWxzKHR5cGUsIGNvdW50LCBuYW1lcykgeworICAgIHRoaXMubG9jYWxz
LnB1c2goe3R5cGU6IHR5cGUsIGNvdW50OiBjb3VudH0pOworICAgIG5hbWVzID0gbmFtZXMgfHwg
W107CisgICAgaWYgKG5hbWVzLmxlbmd0aCA+IGNvdW50KSB0aHJvdyBuZXcgRXJyb3IoJ3RvbyBt
YW55IGxvY2FscyBuYW1lcyBnaXZlbicpOworICAgIHRoaXMubG9jYWxfbmFtZXMucHVzaCguLi5u
YW1lcyk7CisgICAgaWYgKGNvdW50ID4gbmFtZXMubGVuZ3RoKSB0aGlzLmxvY2FsX25hbWVzLnB1
c2goY291bnQgLSBuYW1lcy5sZW5ndGgpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgZW5k
KCkgeworICAgIHJldHVybiB0aGlzLm1vZHVsZTsKKyAgfQorfQorCitjbGFzcyBXYXNtSW5pdEV4
cHIgeworICBzdGF0aWMgSTMyQ29uc3QodmFsdWUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHBy
STMyQ29uc3QsIHZhbHVlOiB2YWx1ZX07CisgIH0KKyAgc3RhdGljIEk2NENvbnN0KHZhbHVlKSB7
CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckk2NENvbnN0LCB2YWx1ZTogdmFsdWV9OworICB9Cisg
IHN0YXRpYyBGMzJDb25zdCh2YWx1ZSkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJGMzJDb25z
dCwgdmFsdWU6IHZhbHVlfTsKKyAgfQorICBzdGF0aWMgRjY0Q29uc3QodmFsdWUpIHsKKyAgICBy
ZXR1cm4ge2tpbmQ6IGtFeHByRjY0Q29uc3QsIHZhbHVlOiB2YWx1ZX07CisgIH0KKyAgc3RhdGlj
IFMxMjhDb25zdCh2YWx1ZSkgeworICAgIHJldHVybiB7a2luZDoga1NpbWRQcmVmaXgsIHZhbHVl
OiB2YWx1ZX07CisgIH0KKyAgc3RhdGljIEdsb2JhbEdldChpbmRleCkgeworICAgIHJldHVybiB7
a2luZDoga0V4cHJHbG9iYWxHZXQsIHZhbHVlOiBpbmRleH07CisgIH0KKyAgc3RhdGljIFJlZkZ1
bmMoaW5kZXgpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByUmVmRnVuYywgdmFsdWU6IGluZGV4
fTsKKyAgfQorICBzdGF0aWMgUmVmTnVsbCh0eXBlKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhw
clJlZk51bGwsIHZhbHVlOiB0eXBlfTsKKyAgfQorICBzdGF0aWMgU3RydWN0TmV3V2l0aFJ0dCh0
eXBlLCBhcmdzKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclN0cnVjdE5ld1dpdGhSdHQsIHZh
bHVlOiB0eXBlLCBvcGVyYW5kczogYXJnc307CisgIH0KKyAgc3RhdGljIFN0cnVjdE5ldyh0eXBl
LCBhcmdzKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclN0cnVjdE5ldywgdmFsdWU6IHR5cGUs
IG9wZXJhbmRzOiBhcmdzfTsKKyAgfQorICBzdGF0aWMgU3RydWN0TmV3RGVmYXVsdFdpdGhSdHQo
dHlwZSwgcnR0KSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclN0cnVjdE5ld0RlZmF1bHRXaXRo
UnR0LCB2YWx1ZTogdHlwZSwgb3BlcmFuZHM6IFtydHRdfTsKKyAgfQorICBzdGF0aWMgU3RydWN0
TmV3RGVmYXVsdCh0eXBlKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclN0cnVjdE5ld0RlZmF1
bHQsIHZhbHVlOiB0eXBlLCBvcGVyYW5kczogW119OworICB9CisgIHN0YXRpYyBBcnJheUluaXQo
dHlwZSwgYXJncykgeworICAgIHJldHVybiB7a2luZDoga0V4cHJBcnJheUluaXQsIHZhbHVlOiB0
eXBlLCBvcGVyYW5kczogYXJnc307CisgIH0KKyAgc3RhdGljIEFycmF5SW5pdFN0YXRpYyh0eXBl
LCBhcmdzKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckFycmF5SW5pdFN0YXRpYywgdmFsdWU6
IHR5cGUsIG9wZXJhbmRzOiBhcmdzfTsKKyAgfQorICBzdGF0aWMgUnR0Q2Fub24odHlwZSkgewor
ICAgIHJldHVybiB7a2luZDoga0V4cHJSdHRDYW5vbiwgdmFsdWU6IHR5cGV9OworICB9CisgIHN0
YXRpYyBSdHRTdWIodHlwZSwgcGFyZW50KSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclJ0dFN1
YiwgdmFsdWU6IHR5cGUsIHBhcmVudDogcGFyZW50fTsKKyAgfQorICBzdGF0aWMgUnR0RnJlc2hT
dWIodHlwZSwgcGFyZW50KSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclJ0dEZyZXNoU3ViLCB2
YWx1ZTogdHlwZSwgcGFyZW50OiBwYXJlbnR9OworICB9CisKKyAgc3RhdGljIGRlZmF1bHRGb3Io
dHlwZSkgeworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgY2FzZSBrV2FzbUkzMjoKKyAgICAg
ICAgcmV0dXJuIHRoaXMuSTMyQ29uc3QoMCk7CisgICAgICBjYXNlIGtXYXNtSTY0OgorICAgICAg
ICByZXR1cm4gdGhpcy5JNjRDb25zdCgwKTsKKyAgICAgIGNhc2Uga1dhc21GMzI6CisgICAgICAg
IHJldHVybiB0aGlzLkYzMkNvbnN0KDApOworICAgICAgY2FzZSBrV2FzbUY2NDoKKyAgICAgICAg
cmV0dXJuIHRoaXMuRjY0Q29uc3QoMCk7CisgICAgICBjYXNlIGtXYXNtUzEyODoKKyAgICAgICAg
cmV0dXJuIHRoaXMuUzEyOENvbnN0KG5ldyBBcnJheSgxNikuZmlsbCgwKSk7CisgICAgICBkZWZh
dWx0OgorICAgICAgICBpZiAoKHR5cGVvZiB0eXBlKSAhPSAnbnVtYmVyJyAmJiB0eXBlLm9wY29k
ZSAhPSBrV2FzbU9wdFJlZikgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm9uLWRlZmF1
bHRhYmxlIHR5cGUiKTsKKyAgICAgICAgfQorICAgICAgICBsZXQgaGVhcF90eXBlID0gKHR5cGVv
ZiB0eXBlKSA9PSAnbnVtYmVyJyA/IHR5cGUgOiB0eXBlLmhlYXBfdHlwZTsKKyAgICAgICAgcmV0
dXJuIHRoaXMuUmVmTnVsbChoZWFwX3R5cGUpOworICAgIH0KKyAgfQorfQorCitjbGFzcyBXYXNt
R2xvYmFsQnVpbGRlciB7CisgIC8vIHtpbml0fSBzaG91bGQgYmUgY29uc3RydWN0ZWQgd2l0aCBX
YXNtSW5pdEV4cHIuCisgIGNvbnN0cnVjdG9yKG1vZHVsZSwgdHlwZSwgbXV0YWJsZSwgaW5pdCkg
eworICAgIHRoaXMubW9kdWxlID0gbW9kdWxlOworICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAg
dGhpcy5tdXRhYmxlID0gbXV0YWJsZTsKKyAgICB0aGlzLmluaXQgPSBpbml0OworICB9CisKKyAg
ZXhwb3J0QXMobmFtZSkgeworICAgIHRoaXMubW9kdWxlLmV4cG9ydHMucHVzaCgKKyAgICAgICAg
e25hbWU6IG5hbWUsIGtpbmQ6IGtFeHRlcm5hbEdsb2JhbCwgaW5kZXg6IHRoaXMuaW5kZXh9KTsK
KyAgICByZXR1cm4gdGhpczsKKyAgfQorfQorCitjbGFzcyBXYXNtVGFibGVCdWlsZGVyIHsKKyAg
Y29uc3RydWN0b3IobW9kdWxlLCB0eXBlLCBpbml0aWFsX3NpemUsIG1heF9zaXplLCBpbml0X2V4
cHIpIHsKKyAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOwor
ICAgIHRoaXMuaW5pdGlhbF9zaXplID0gaW5pdGlhbF9zaXplOworICAgIHRoaXMuaGFzX21heCA9
IG1heF9zaXplICE9PSB1bmRlZmluZWQ7CisgICAgdGhpcy5tYXhfc2l6ZSA9IG1heF9zaXplOwor
ICAgIHRoaXMuaW5pdF9leHByID0gaW5pdF9leHByOworICAgIHRoaXMuaGFzX2luaXQgPSBpbml0
X2V4cHIgIT09IHVuZGVmaW5lZDsKKyAgfQorCisgIGV4cG9ydEFzKG5hbWUpIHsKKyAgICB0aGlz
Lm1vZHVsZS5leHBvcnRzLnB1c2goCisgICAgICAgIHtuYW1lOiBuYW1lLCBraW5kOiBrRXh0ZXJu
YWxUYWJsZSwgaW5kZXg6IHRoaXMuaW5kZXh9KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorfQor
CitmdW5jdGlvbiBtYWtlRmllbGQodHlwZSwgbXV0YWJpbGl0eSkgeworICBpZiAoKHR5cGVvZiBt
dXRhYmlsaXR5KSAhPSAnYm9vbGVhbicpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpZWxkIG11
dGFiaWxpdHkgbXVzdCBiZSBib29sZWFuJyk7CisgIH0KKyAgcmV0dXJuIHt0eXBlOiB0eXBlLCBt
dXRhYmlsaXR5OiBtdXRhYmlsaXR5fTsKK30KKworY2xhc3MgV2FzbVN0cnVjdCB7CisgIGNvbnN0
cnVjdG9yKGZpZWxkcykgeworICAgIGlmICghQXJyYXkuaXNBcnJheShmaWVsZHMpKSB7CisgICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ3N0cnVjdCBmaWVsZHMgbXVzdCBiZSBhbiBhcnJheScpOworICAg
IH0KKyAgICB0aGlzLmZpZWxkcyA9IGZpZWxkczsKKyAgICB0aGlzLnR5cGVfZm9ybSA9IGtXYXNt
U3RydWN0VHlwZUZvcm07CisgIH0KK30KKworY2xhc3MgV2FzbVN0cnVjdFN1YnR5cGUgZXh0ZW5k
cyBXYXNtU3RydWN0IHsKKyAgY29uc3RydWN0b3IoZmllbGRzLCBzdXBlcnR5cGVfaWR4KSB7Cisg
ICAgc3VwZXIoZmllbGRzKTsKKyAgICB0aGlzLnN1cGVydHlwZSA9IHN1cGVydHlwZV9pZHg7Cisg
ICAgdGhpcy50eXBlX2Zvcm0gPSBrV2FzbVN0cnVjdFN1YnR5cGVGb3JtOworICB9Cit9CisKK2Ns
YXNzIFdhc21BcnJheSB7CisgIGNvbnN0cnVjdG9yKHR5cGUsIG11dGFiaWxpdHkpIHsKKyAgICB0
aGlzLnR5cGUgPSB0eXBlOworICAgIGlmICghbXV0YWJpbGl0eSkgdGhyb3cgbmV3IEVycm9yKCJJ
bW11dGFibGUgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIHlldCIpOworICAgIHRoaXMubXV0YWJp
bGl0eSA9IG11dGFiaWxpdHk7CisgICAgdGhpcy50eXBlX2Zvcm0gPSBrV2FzbUFycmF5VHlwZUZv
cm07CisgIH0KK30KKworY2xhc3MgV2FzbUFycmF5U3VidHlwZSBleHRlbmRzIFdhc21BcnJheSB7
CisgIGNvbnN0cnVjdG9yKHR5cGUsIG11dGFiaWxpdHksIHN1cGVydHlwZV9pZHgpIHsKKyAgICBz
dXBlcih0eXBlLCBtdXRhYmlsaXR5KTsKKyAgICB0aGlzLnN1cGVydHlwZSA9IHN1cGVydHlwZV9p
ZHg7CisgICAgdGhpcy50eXBlX2Zvcm0gPSBrV2FzbUFycmF5U3VidHlwZUZvcm07CisgIH0KK30K
K2NsYXNzIFdhc21FbGVtU2VnbWVudCB7CisgIGNvbnN0cnVjdG9yKHRhYmxlLCBvZmZzZXQsIHR5
cGUsIGVsZW1lbnRzLCBpc19kZWNsKSB7CisgICAgdGhpcy50YWJsZSA9IHRhYmxlOworICAgIHRo
aXMub2Zmc2V0ID0gb2Zmc2V0OworICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAgdGhpcy5lbGVt
ZW50cyA9IGVsZW1lbnRzOworICAgIHRoaXMuaXNfZGVjbCA9IGlzX2RlY2w7CisgICAgLy8gSW52
YXJpYW50IGNoZWNrcy4KKyAgICBpZiAoKHRhYmxlID09PSB1bmRlZmluZWQpICE9IChvZmZzZXQg
PT09IHVuZGVmaW5lZCkpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiaW52YWxpZCBlbGVtZW50
IHNlZ21lbnQiKTsKKyAgICB9CisgICAgZm9yIChsZXQgZWxlbSBvZiBlbGVtZW50cykgeworICAg
ICAgaWYgKCgodHlwZW9mIGVsZW0pID09ICdudW1iZXInKSAhPSAodHlwZSA9PT0gdW5kZWZpbmVk
KSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZWxlbWVudCIpOworICAgICAg
fQorICAgIH0KKyAgfQorCisgIGlzX2FjdGl2ZSgpIHsKKyAgICByZXR1cm4gdGhpcy50YWJsZSAh
PT0gdW5kZWZpbmVkOworICB9CisKKyAgaXNfcGFzc2l2ZSgpIHsKKyAgICByZXR1cm4gdGhpcy50
YWJsZSA9PT0gdW5kZWZpbmVkICYmICF0aGlzLmlzX2RlY2w7CisgIH0KKworICBpc19kZWNsYXJh
dGl2ZSgpIHsKKyAgICByZXR1cm4gdGhpcy50YWJsZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuaXNf
ZGVjbDsKKyAgfQorCisgIGV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkgeworICAgIHJldHVybiB0
aGlzLnR5cGUgIT09IHVuZGVmaW5lZDsKKyAgfQorfQorCitjbGFzcyBXYXNtTW9kdWxlQnVpbGRl
ciB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMudHlwZXMgPSBbXTsKKyAgICB0aGlzLmlt
cG9ydHMgPSBbXTsKKyAgICB0aGlzLmV4cG9ydHMgPSBbXTsKKyAgICB0aGlzLmdsb2JhbHMgPSBb
XTsKKyAgICB0aGlzLnRhYmxlcyA9IFtdOworICAgIHRoaXMudGFncyA9IFtdOworICAgIHRoaXMu
ZnVuY3Rpb25zID0gW107CisgICAgdGhpcy5jb21waWxhdGlvbl9oaW50cyA9IFtdOworICAgIHRo
aXMuZWxlbWVudF9zZWdtZW50cyA9IFtdOworICAgIHRoaXMuZGF0YV9zZWdtZW50cyA9IFtdOwor
ICAgIHRoaXMuZXhwbGljaXQgPSBbXTsKKyAgICB0aGlzLm51bV9pbXBvcnRlZF9mdW5jcyA9IDA7
CisgICAgdGhpcy5udW1faW1wb3J0ZWRfZ2xvYmFscyA9IDA7CisgICAgdGhpcy5udW1faW1wb3J0
ZWRfdGFibGVzID0gMDsKKyAgICB0aGlzLm51bV9pbXBvcnRlZF90YWdzID0gMDsKKyAgICByZXR1
cm4gdGhpczsKKyAgfQorCisgIGFkZFN0YXJ0KHN0YXJ0X2luZGV4KSB7CisgICAgdGhpcy5zdGFy
dF9pbmRleCA9IHN0YXJ0X2luZGV4OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRkTWVt
b3J5KG1pbiwgbWF4LCBleHBvcnRlZCwgc2hhcmVkKSB7CisgICAgdGhpcy5tZW1vcnkgPSB7Cisg
ICAgICBtaW46IG1pbiwKKyAgICAgIG1heDogbWF4LAorICAgICAgZXhwb3J0ZWQ6IGV4cG9ydGVk
LAorICAgICAgc2hhcmVkOiBzaGFyZWQgfHwgZmFsc2UsCisgICAgICBpc19tZW1vcnk2NDogZmFs
c2UKKyAgICB9OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRkTWVtb3J5NjQobWluLCBt
YXgsIGV4cG9ydGVkKSB7CisgICAgdGhpcy5tZW1vcnkgPSB7CisgICAgICBtaW46IG1pbiwKKyAg
ICAgIG1heDogbWF4LAorICAgICAgZXhwb3J0ZWQ6IGV4cG9ydGVkLAorICAgICAgc2hhcmVkOiBm
YWxzZSwKKyAgICAgIGlzX21lbW9yeTY0OiB0cnVlCisgICAgfTsKKyAgICByZXR1cm4gdGhpczsK
KyAgfQorCisgIGFkZEV4cGxpY2l0U2VjdGlvbihieXRlcykgeworICAgIHRoaXMuZXhwbGljaXQu
cHVzaChieXRlcyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBzdHJpbmdUb0J5dGVzKG5h
bWUpIHsKKyAgICB2YXIgcmVzdWx0ID0gbmV3IEJpbmFyeSgpOworICAgIHJlc3VsdC5lbWl0X3Uz
MnYobmFtZS5sZW5ndGgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkr
KykgeworICAgICAgcmVzdWx0LmVtaXRfdTgobmFtZS5jaGFyQ29kZUF0KGkpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdC50cnVuY19idWZmZXIoKQorICB9CisKKyAgY3JlYXRlQ3VzdG9tU2Vj
dGlvbihuYW1lLCBieXRlcykgeworICAgIG5hbWUgPSB0aGlzLnN0cmluZ1RvQnl0ZXMobmFtZSk7
CisgICAgdmFyIHNlY3Rpb24gPSBuZXcgQmluYXJ5KCk7CisgICAgc2VjdGlvbi5lbWl0X3U4KDAp
OworICAgIHNlY3Rpb24uZW1pdF91MzJ2KG5hbWUubGVuZ3RoICsgYnl0ZXMubGVuZ3RoKTsKKyAg
ICBzZWN0aW9uLmVtaXRfYnl0ZXMobmFtZSk7CisgICAgc2VjdGlvbi5lbWl0X2J5dGVzKGJ5dGVz
KTsKKyAgICByZXR1cm4gc2VjdGlvbi50cnVuY19idWZmZXIoKTsKKyAgfQorCisgIGFkZEN1c3Rv
bVNlY3Rpb24obmFtZSwgYnl0ZXMpIHsKKyAgICB0aGlzLmV4cGxpY2l0LnB1c2godGhpcy5jcmVh
dGVDdXN0b21TZWN0aW9uKG5hbWUsIGJ5dGVzKSk7CisgIH0KKworICBhZGRUeXBlKHR5cGUpIHsK
KyAgICB0aGlzLnR5cGVzLnB1c2godHlwZSk7CisgICAgdmFyIHBsID0gdHlwZS5wYXJhbXMubGVu
Z3RoOyAgIC8vIHNob3VsZCBoYXZlIHBhcmFtcworICAgIHZhciBybCA9IHR5cGUucmVzdWx0cy5s
ZW5ndGg7ICAvLyBzaG91bGQgaGF2ZSByZXN1bHRzCisgICAgcmV0dXJuIHRoaXMudHlwZXMubGVu
Z3RoIC0gMTsKKyAgfQorCisgIGFkZFN0cnVjdChmaWVsZHMpIHsKKyAgICB0aGlzLnR5cGVzLnB1
c2gobmV3IFdhc21TdHJ1Y3QoZmllbGRzKSk7CisgICAgcmV0dXJuIHRoaXMudHlwZXMubGVuZ3Ro
IC0gMTsKKyAgfQorCisgIGtHZW5lcmljU3VwZXJUeXBlID0gMHhGRkZGRkZGRTsKKyAgYWRkU3Ry
dWN0U3VidHlwZShmaWVsZHMsIHN1cGVydHlwZV9pZHggPSB0aGlzLmtHZW5lcmljU3VwZXJUeXBl
KSB7CisgICAgdGhpcy50eXBlcy5wdXNoKG5ldyBXYXNtU3RydWN0U3VidHlwZShmaWVsZHMsIHN1
cGVydHlwZV9pZHgpKTsKKyAgICByZXR1cm4gdGhpcy50eXBlcy5sZW5ndGggLSAxOworICB9CisK
KyAgYWRkQXJyYXkodHlwZSwgbXV0YWJpbGl0eSkgeworICAgIHRoaXMudHlwZXMucHVzaChuZXcg
V2FzbUFycmF5KHR5cGUsIG11dGFiaWxpdHkpKTsKKyAgICByZXR1cm4gdGhpcy50eXBlcy5sZW5n
dGggLSAxOworICB9CisKKyAgYWRkQXJyYXlTdWJ0eXBlKHR5cGUsIG11dGFiaWxpdHksIHN1cGVy
dHlwZV9pZHggPSB0aGlzLmtHZW5lcmljU3VwZXJUeXBlKSB7CisgICAgdGhpcy50eXBlcy5wdXNo
KG5ldyBXYXNtQXJyYXlTdWJ0eXBlKHR5cGUsIG11dGFiaWxpdHksIHN1cGVydHlwZV9pZHgpKTsK
KyAgICByZXR1cm4gdGhpcy50eXBlcy5sZW5ndGggLSAxOworICB9CisKKyAgYWRkR2xvYmFsKHR5
cGUsIG11dGFibGUsIGluaXQpIHsKKyAgICBpZiAoaW5pdCA9PT0gdW5kZWZpbmVkKSBpbml0ID0g
V2FzbUluaXRFeHByLmRlZmF1bHRGb3IodHlwZSk7CisgICAgbGV0IGdsb2IgPSBuZXcgV2FzbUds
b2JhbEJ1aWxkZXIodGhpcywgdHlwZSwgbXV0YWJsZSwgaW5pdCk7CisgICAgZ2xvYi5pbmRleCA9
IHRoaXMuZ2xvYmFscy5sZW5ndGggKyB0aGlzLm51bV9pbXBvcnRlZF9nbG9iYWxzOworICAgIHRo
aXMuZ2xvYmFscy5wdXNoKGdsb2IpOworICAgIHJldHVybiBnbG9iOworICB9CisKKyAgYWRkVGFi
bGUoCisgICAgICB0eXBlLCBpbml0aWFsX3NpemUsIG1heF9zaXplID0gdW5kZWZpbmVkLCBpbml0
X2V4cHIgPSB1bmRlZmluZWQpIHsKKyAgICBpZiAodHlwZSA9PSBrV2FzbUkzMiB8fCB0eXBlID09
IGtXYXNtSTY0IHx8IHR5cGUgPT0ga1dhc21GMzIgfHwKKyAgICAgICAgdHlwZSA9PSBrV2FzbUY2
NCB8fCB0eXBlID09IGtXYXNtUzEyOCB8fCB0eXBlID09IGtXYXNtVm9pZCkgeworICAgICAgdGhy
b3cgbmV3IEVycm9yKCdUYWJsZXMgbXVzdCBiZSBvZiBhIHJlZmVyZW5jZSB0eXBlJyk7CisgICAg
fQorICAgIGxldCB0YWJsZSA9IG5ldyBXYXNtVGFibGVCdWlsZGVyKAorICAgICAgICB0aGlzLCB0
eXBlLCBpbml0aWFsX3NpemUsIG1heF9zaXplLCBpbml0X2V4cHIpOworICAgIHRhYmxlLmluZGV4
ID0gdGhpcy50YWJsZXMubGVuZ3RoICsgdGhpcy5udW1faW1wb3J0ZWRfdGFibGVzOworICAgIHRo
aXMudGFibGVzLnB1c2godGFibGUpOworICAgIHJldHVybiB0YWJsZTsKKyAgfQorCisgIGFkZFRh
Zyh0eXBlKSB7CisgICAgbGV0IHR5cGVfaW5kZXggPSAodHlwZW9mIHR5cGUpID09ICdudW1iZXIn
ID8gdHlwZSA6IHRoaXMuYWRkVHlwZSh0eXBlKTsKKyAgICBsZXQgdGFnX2luZGV4ID0gdGhpcy50
YWdzLmxlbmd0aCArIHRoaXMubnVtX2ltcG9ydGVkX3RhZ3M7CisgICAgdGhpcy50YWdzLnB1c2go
dHlwZV9pbmRleCk7CisgICAgcmV0dXJuIHRhZ19pbmRleDsKKyAgfQorCisgIGFkZEZ1bmN0aW9u
KG5hbWUsIHR5cGUsIGFyZ19uYW1lcykgeworICAgIGFyZ19uYW1lcyA9IGFyZ19uYW1lcyB8fCBb
XTsKKyAgICBsZXQgdHlwZV9pbmRleCA9ICh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicgPyB0eXBl
IDogdGhpcy5hZGRUeXBlKHR5cGUpOworICAgIGxldCBudW1fYXJncyA9IHRoaXMudHlwZXNbdHlw
ZV9pbmRleF0ucGFyYW1zLmxlbmd0aDsKKyAgICBpZiAobnVtX2FyZ3MgPCBhcmdfbmFtZXMubGVu
Z3RoKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCd0b28gbWFueSBhcmcgbmFtZXMgcHJvdmlkZWQn
KTsKKyAgICBpZiAobnVtX2FyZ3MgPiBhcmdfbmFtZXMubGVuZ3RoKQorICAgICAgYXJnX25hbWVz
LnB1c2gobnVtX2FyZ3MgLSBhcmdfbmFtZXMubGVuZ3RoKTsKKyAgICBsZXQgZnVuYyA9IG5ldyBX
YXNtRnVuY3Rpb25CdWlsZGVyKHRoaXMsIG5hbWUsIHR5cGVfaW5kZXgsIGFyZ19uYW1lcyk7Cisg
ICAgZnVuYy5pbmRleCA9IHRoaXMuZnVuY3Rpb25zLmxlbmd0aCArIHRoaXMubnVtX2ltcG9ydGVk
X2Z1bmNzOworICAgIHRoaXMuZnVuY3Rpb25zLnB1c2goZnVuYyk7CisgICAgcmV0dXJuIGZ1bmM7
CisgIH0KKworICBhZGRJbXBvcnQobW9kdWxlLCBuYW1lLCB0eXBlKSB7CisgICAgaWYgKHRoaXMu
ZnVuY3Rpb25zLmxlbmd0aCAhPSAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcG9ydGVk
IGZ1bmN0aW9ucyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2NhbCBvbmVzJyk7CisgICAgfQor
ICAgIGxldCB0eXBlX2luZGV4ID0gKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVyJyA/IHR5cGUgOiB0
aGlzLmFkZFR5cGUodHlwZSk7CisgICAgdGhpcy5pbXBvcnRzLnB1c2goeworICAgICAgbW9kdWxl
OiBtb2R1bGUsCisgICAgICBuYW1lOiBuYW1lLAorICAgICAga2luZDoga0V4dGVybmFsRnVuY3Rp
b24sCisgICAgICB0eXBlX2luZGV4OiB0eXBlX2luZGV4CisgICAgfSk7CisgICAgcmV0dXJuIHRo
aXMubnVtX2ltcG9ydGVkX2Z1bmNzKys7CisgIH0KKworICBhZGRJbXBvcnRlZEdsb2JhbChtb2R1
bGUsIG5hbWUsIHR5cGUsIG11dGFibGUgPSBmYWxzZSkgeworICAgIGlmICh0aGlzLmdsb2JhbHMu
bGVuZ3RoICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignSW1wb3J0ZWQgZ2xvYmFscyBt
dXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2NhbCBvbmVzJyk7CisgICAgfQorICAgIGxldCBvID0g
eworICAgICAgbW9kdWxlOiBtb2R1bGUsCisgICAgICBuYW1lOiBuYW1lLAorICAgICAga2luZDog
a0V4dGVybmFsR2xvYmFsLAorICAgICAgdHlwZTogdHlwZSwKKyAgICAgIG11dGFibGU6IG11dGFi
bGUKKyAgICB9OworICAgIHRoaXMuaW1wb3J0cy5wdXNoKG8pOworICAgIHJldHVybiB0aGlzLm51
bV9pbXBvcnRlZF9nbG9iYWxzKys7CisgIH0KKworICBhZGRJbXBvcnRlZE1lbW9yeShtb2R1bGUs
IG5hbWUsIGluaXRpYWwgPSAwLCBtYXhpbXVtLCBzaGFyZWQpIHsKKyAgICBsZXQgbyA9IHsKKyAg
ICAgIG1vZHVsZTogbW9kdWxlLAorICAgICAgbmFtZTogbmFtZSwKKyAgICAgIGtpbmQ6IGtFeHRl
cm5hbE1lbW9yeSwKKyAgICAgIGluaXRpYWw6IGluaXRpYWwsCisgICAgICBtYXhpbXVtOiBtYXhp
bXVtLAorICAgICAgc2hhcmVkOiBzaGFyZWQKKyAgICB9OworICAgIHRoaXMuaW1wb3J0cy5wdXNo
KG8pOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRkSW1wb3J0ZWRUYWJsZShtb2R1bGUs
IG5hbWUsIGluaXRpYWwsIG1heGltdW0sIHR5cGUpIHsKKyAgICBpZiAodGhpcy50YWJsZXMubGVu
Z3RoICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignSW1wb3J0ZWQgdGFibGVzIG11c3Qg
YmUgZGVjbGFyZWQgYmVmb3JlIGxvY2FsIG9uZXMnKTsKKyAgICB9CisgICAgbGV0IG8gPSB7Cisg
ICAgICBtb2R1bGU6IG1vZHVsZSwKKyAgICAgIG5hbWU6IG5hbWUsCisgICAgICBraW5kOiBrRXh0
ZXJuYWxUYWJsZSwKKyAgICAgIGluaXRpYWw6IGluaXRpYWwsCisgICAgICBtYXhpbXVtOiBtYXhp
bXVtLAorICAgICAgdHlwZTogdHlwZSB8fCBrV2FzbUZ1bmNSZWYKKyAgICB9OworICAgIHRoaXMu
aW1wb3J0cy5wdXNoKG8pOworICAgIHJldHVybiB0aGlzLm51bV9pbXBvcnRlZF90YWJsZXMrKzsK
KyAgfQorCisgIGFkZEltcG9ydGVkVGFnKG1vZHVsZSwgbmFtZSwgdHlwZSkgeworICAgIGlmICh0
aGlzLnRhZ3MubGVuZ3RoICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignSW1wb3J0ZWQg
dGFncyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2NhbCBvbmVzJyk7CisgICAgfQorICAgIGxl
dCB0eXBlX2luZGV4ID0gKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVyJyA/IHR5cGUgOiB0aGlzLmFk
ZFR5cGUodHlwZSk7CisgICAgbGV0IG8gPSB7CisgICAgICBtb2R1bGU6IG1vZHVsZSwKKyAgICAg
IG5hbWU6IG5hbWUsCisgICAgICBraW5kOiBrRXh0ZXJuYWxUYWcsCisgICAgICB0eXBlX2luZGV4
OiB0eXBlX2luZGV4CisgICAgfTsKKyAgICB0aGlzLmltcG9ydHMucHVzaChvKTsKKyAgICByZXR1
cm4gdGhpcy5udW1faW1wb3J0ZWRfdGFncysrOworICB9CisKKyAgYWRkRXhwb3J0KG5hbWUsIGlu
ZGV4KSB7CisgICAgdGhpcy5leHBvcnRzLnB1c2goe25hbWU6IG5hbWUsIGtpbmQ6IGtFeHRlcm5h
bEZ1bmN0aW9uLCBpbmRleDogaW5kZXh9KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFk
ZEV4cG9ydE9mS2luZChuYW1lLCBraW5kLCBpbmRleCkgeworICAgIGlmIChpbmRleCA9PT0gdW5k
ZWZpbmVkICYmIGtpbmQgIT0ga0V4dGVybmFsVGFibGUgJiYKKyAgICAgICAga2luZCAhPSBrRXh0
ZXJuYWxNZW1vcnkpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAnSW5kZXgg
Zm9yIGV4cG9ydHMgb3RoZXIgdGhhbiB0YWJsZXMvbWVtb3JpZXMgbXVzdCBiZSBwcm92aWRlZCcp
OworICAgIH0KKyAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIGluZGV4KSAh
PSAnbnVtYmVyJykgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmRleCBmb3IgZXhwb3J0cyBt
dXN0IGJlIGEgbnVtYmVyJykKKyAgICB9CisgICAgdGhpcy5leHBvcnRzLnB1c2goe25hbWU6IG5h
bWUsIGtpbmQ6IGtpbmQsIGluZGV4OiBpbmRleH0pOworICAgIHJldHVybiB0aGlzOworICB9CisK
KyAgc2V0Q29tcGlsYXRpb25IaW50KHN0cmF0ZWd5LCBiYXNlbGluZVRpZXIsIHRvcFRpZXIsIGlu
ZGV4KSB7CisgICAgdGhpcy5jb21waWxhdGlvbl9oaW50c1tpbmRleF0gPSB7CisgICAgICBzdHJh
dGVneTogc3RyYXRlZ3ksCisgICAgICBiYXNlbGluZVRpZXI6IGJhc2VsaW5lVGllciwKKyAgICAg
IHRvcFRpZXI6IHRvcFRpZXIKKyAgICB9OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRk
RGF0YVNlZ21lbnQoYWRkciwgZGF0YSwgaXNfZ2xvYmFsID0gZmFsc2UpIHsKKyAgICB0aGlzLmRh
dGFfc2VnbWVudHMucHVzaCgKKyAgICAgICAge2FkZHI6IGFkZHIsIGRhdGE6IGRhdGEsIGlzX2ds
b2JhbDogaXNfZ2xvYmFsLCBpc19hY3RpdmU6IHRydWV9KTsKKyAgICByZXR1cm4gdGhpcy5kYXRh
X3NlZ21lbnRzLmxlbmd0aCAtIDE7CisgIH0KKworICBhZGRQYXNzaXZlRGF0YVNlZ21lbnQoZGF0
YSkgeworICAgIHRoaXMuZGF0YV9zZWdtZW50cy5wdXNoKHtkYXRhOiBkYXRhLCBpc19hY3RpdmU6
IGZhbHNlfSk7CisgICAgcmV0dXJuIHRoaXMuZGF0YV9zZWdtZW50cy5sZW5ndGggLSAxOworICB9
CisKKyAgZXhwb3J0TWVtb3J5QXMobmFtZSkgeworICAgIHRoaXMuZXhwb3J0cy5wdXNoKHtuYW1l
OiBuYW1lLCBraW5kOiBrRXh0ZXJuYWxNZW1vcnksIGluZGV4OiAwfSk7CisgIH0KKworICAvLyB7
b2Zmc2V0fSBpcyBhbiBpbml0aWFsaXplciBleHByZXNzaW9uLgorICAvLyBJZiB7dHlwZX0gaXMg
dW5kZWZpbmVkLCB0aGVuIHtlbGVtZW50c30gYXJlIGZ1bmN0aW9uIGluZGljZXMuIE90aGVyd2lz
ZSwKKyAgLy8gdGhleSBhcmUgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbnMuCisgIGFkZEFjdGl2ZUVs
ZW1lbnRTZWdtZW50KHRhYmxlLCBvZmZzZXQsIGVsZW1lbnRzLCB0eXBlKSB7CisgICAgdGhpcy5l
bGVtZW50X3NlZ21lbnRzLnB1c2goCisgICAgICAgIG5ldyBXYXNtRWxlbVNlZ21lbnQodGFibGUs
IG9mZnNldCwgdHlwZSwgZWxlbWVudHMsIGZhbHNlKSk7CisgICAgcmV0dXJuIHRoaXMuZWxlbWVu
dF9zZWdtZW50cy5sZW5ndGggLSAxOworICB9CisKKyAgLy8gSWYge3R5cGV9IGlzIHVuZGVmaW5l
ZCwgdGhlbiB7ZWxlbWVudHN9IGFyZSBmdW5jdGlvbiBpbmRpY2VzLiBPdGhlcndpc2UsCisgIC8v
IHRoZXkgYXJlIGluaXRpYWxpemVyIGV4cHJlc3Npb25zLgorICBhZGRQYXNzaXZlRWxlbWVudFNl
Z21lbnQoZWxlbWVudHMsIHR5cGUpIHsKKyAgICB0aGlzLmVsZW1lbnRfc2VnbWVudHMucHVzaCgK
KyAgICAgIG5ldyBXYXNtRWxlbVNlZ21lbnQodW5kZWZpbmVkLCB1bmRlZmluZWQsIHR5cGUsIGVs
ZW1lbnRzLCBmYWxzZSkpOworICAgIHJldHVybiB0aGlzLmVsZW1lbnRfc2VnbWVudHMubGVuZ3Ro
IC0gMTsKKyAgfQorCisgIC8vIElmIHt0eXBlfSBpcyB1bmRlZmluZWQsIHRoZW4ge2VsZW1lbnRz
fSBhcmUgZnVuY3Rpb24gaW5kaWNlcy4gT3RoZXJ3aXNlLAorICAvLyB0aGV5IGFyZSBpbml0aWFs
aXplciBleHByZXNzaW9ucy4KKyAgYWRkRGVjbGFyYXRpdmVFbGVtZW50U2VnbWVudChlbGVtZW50
cywgdHlwZSkgeworICAgIHRoaXMuZWxlbWVudF9zZWdtZW50cy5wdXNoKAorICAgICAgbmV3IFdh
c21FbGVtU2VnbWVudCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHlwZSwgZWxlbWVudHMsIHRydWUp
KTsKKyAgICByZXR1cm4gdGhpcy5lbGVtZW50X3NlZ21lbnRzLmxlbmd0aCAtIDE7CisgIH0KKwor
ICBhcHBlbmRUb1RhYmxlKGFycmF5KSB7CisgICAgZm9yIChsZXQgbiBvZiBhcnJheSkgeworICAg
ICAgaWYgKHR5cGVvZiBuICE9ICdudW1iZXInKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lu
dmFsaWQgdGFibGUgKGVudHJpZXMgaGF2ZSB0byBiZSBudW1iZXJzKTogJyArIGFycmF5KTsKKyAg
ICB9CisgICAgaWYgKHRoaXMudGFibGVzLmxlbmd0aCA9PSAwKSB7CisgICAgICB0aGlzLmFkZFRh
YmxlKGtXYXNtQW55RnVuYywgMCk7CisgICAgfQorICAgIC8vIEFkanVzdCB0aGUgdGFibGUgdG8g
dGhlIGNvcnJlY3Qgc2l6ZS4KKyAgICBsZXQgdGFibGUgPSB0aGlzLnRhYmxlc1swXTsKKyAgICBj
b25zdCBiYXNlID0gdGFibGUuaW5pdGlhbF9zaXplOworICAgIGNvbnN0IHRhYmxlX3NpemUgPSBi
YXNlICsgYXJyYXkubGVuZ3RoOworICAgIHRhYmxlLmluaXRpYWxfc2l6ZSA9IHRhYmxlX3NpemU7
CisgICAgaWYgKHRhYmxlLmhhc19tYXggJiYgdGFibGVfc2l6ZSA+IHRhYmxlLm1heF9zaXplKSB7
CisgICAgICB0YWJsZS5tYXhfc2l6ZSA9IHRhYmxlX3NpemU7CisgICAgfQorICAgIHJldHVybiB0
aGlzLmFkZEFjdGl2ZUVsZW1lbnRTZWdtZW50KDAsIFdhc21Jbml0RXhwci5JMzJDb25zdChiYXNl
KSwgYXJyYXkpOworICB9CisKKyAgc2V0VGFibGVCb3VuZHMobWluLCBtYXggPSB1bmRlZmluZWQp
IHsKKyAgICBpZiAodGhpcy50YWJsZXMubGVuZ3RoICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBF
cnJvcignVGhlIHRhYmxlIGJvdW5kcyBvZiB0YWJsZSBcJzBcJyBoYXZlIGFscmVhZHkgYmVlbiBz
ZXQuJyk7CisgICAgfQorICAgIHRoaXMuYWRkVGFibGUoa1dhc21BbnlGdW5jLCBtaW4sIG1heCk7
CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBzZXROYW1lKG5hbWUpIHsKKyAgICB0aGlzLm5h
bWUgPSBuYW1lOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgdG9CdWZmZXIoZGVidWcgPSBm
YWxzZSkgeworICAgIGxldCBiaW5hcnkgPSBuZXcgQmluYXJ5OworICAgIGxldCB3YXNtID0gdGhp
czsKKworICAgIC8vIEFkZCBoZWFkZXIKKyAgICBiaW5hcnkuZW1pdF9oZWFkZXIoKTsKKworICAg
IC8vIEFkZCB0eXBlIHNlY3Rpb24KKyAgICBpZiAod2FzbS50eXBlcy5sZW5ndGggPiAwKSB7Cisg
ICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyB0eXBlcyBAICcgKyBiaW5hcnkubGVuZ3Ro
KTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1R5cGVTZWN0aW9uQ29kZSwgc2VjdGlvbiA9
PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20udHlwZXMubGVuZ3RoKTsKKyAgICAg
ICAgZm9yIChsZXQgdHlwZSBvZiB3YXNtLnR5cGVzKSB7CisgICAgICAgICAgaWYgKHR5cGUgaW5z
dGFuY2VvZiBXYXNtU3RydWN0KSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgodHlwZS50
eXBlX2Zvcm0pOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYodHlwZS5maWVsZHMubGVu
Z3RoKTsKKyAgICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHR5cGUuZmllbGRzKSB7CisgICAg
ICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKGZpZWxkLnR5cGUpOworICAgICAgICAgICAgICBz
ZWN0aW9uLmVtaXRfdTgoZmllbGQubXV0YWJpbGl0eSA/IDEgOiAwKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh0eXBlIGluc3RhbmNlb2YgV2FzbVN0cnVjdFN1YnR5cGUpIHsKKyAg
ICAgICAgICAgICAgaWYgKHR5cGUuc3VwZXJ0eXBlID09PSB0aGlzLmtHZW5lcmljU3VwZXJUeXBl
KSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtEYXRhUmVmQ29kZSk7CisgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2hlYXBfdHlw
ZSh0eXBlLnN1cGVydHlwZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBXYXNtQXJyYXkpIHsKKyAgICAgICAgICAg
IHNlY3Rpb24uZW1pdF91OCh0eXBlLnR5cGVfZm9ybSk7CisgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfdHlwZSh0eXBlLnR5cGUpOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KHR5cGUubXV0
YWJpbGl0eSA/IDEgOiAwKTsKKyAgICAgICAgICAgIGlmICh0eXBlIGluc3RhbmNlb2YgV2FzbUFy
cmF5U3VidHlwZSkgeworICAgICAgICAgICAgICBpZiAodHlwZS5zdXBlcnR5cGUgPT09IHRoaXMu
a0dlbmVyaWNTdXBlclR5cGUpIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0Rh
dGFSZWZDb2RlKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZWN0
aW9uLmVtaXRfaGVhcF90eXBlKHR5cGUuc3VwZXJ0eXBlKTsKKyAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRf
dTgoa1dhc21GdW5jdGlvblR5cGVGb3JtKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2
KHR5cGUucGFyYW1zLmxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKGxldCBwYXJhbSBvZiB0eXBl
LnBhcmFtcykgeworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShwYXJhbSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih0eXBlLnJlc3VsdHMubGVu
Z3RoKTsKKyAgICAgICAgICAgIGZvciAobGV0IHJlc3VsdCBvZiB0eXBlLnJlc3VsdHMpIHsKKyAg
ICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUocmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCBpbXBv
cnRzIHNlY3Rpb24KKyAgICBpZiAod2FzbS5pbXBvcnRzLmxlbmd0aCA+IDApIHsKKyAgICAgIGlm
IChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGltcG9ydHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7Cisg
ICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtJbXBvcnRTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7
CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20uaW1wb3J0cy5sZW5ndGgpOworICAgICAg
ICBmb3IgKGxldCBpbXAgb2Ygd2FzbS5pbXBvcnRzKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0
X3N0cmluZyhpbXAubW9kdWxlKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfc3RyaW5nKGltcC5u
YW1lIHx8ICcnKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoaW1wLmtpbmQpOworICAgICAg
ICAgIGlmIChpbXAua2luZCA9PSBrRXh0ZXJuYWxGdW5jdGlvbikgeworICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3UzMnYoaW1wLnR5cGVfaW5kZXgpOworICAgICAgICAgIH0gZWxzZSBpZiAoaW1w
LmtpbmQgPT0ga0V4dGVybmFsR2xvYmFsKSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlw
ZShpbXAudHlwZSk7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoaW1wLm11dGFibGUpOwor
ICAgICAgICAgIH0gZWxzZSBpZiAoaW1wLmtpbmQgPT0ga0V4dGVybmFsTWVtb3J5KSB7CisgICAg
ICAgICAgICB2YXIgaGFzX21heCA9ICh0eXBlb2YgaW1wLm1heGltdW0pICE9ICd1bmRlZmluZWQn
OworICAgICAgICAgICAgdmFyIGlzX3NoYXJlZCA9ICh0eXBlb2YgaW1wLnNoYXJlZCkgIT0gJ3Vu
ZGVmaW5lZCc7CisgICAgICAgICAgICBpZiAoaXNfc2hhcmVkKSB7CisgICAgICAgICAgICAgIHNl
Y3Rpb24uZW1pdF91OChoYXNfbWF4ID8gMyA6IDIpOyAgLy8gZmxhZ3MKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChoYXNfbWF4ID8gMSA6IDApOyAg
Ly8gZmxhZ3MKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGlt
cC5pbml0aWFsKTsgICAgICAgICAgICAgICAvLyBpbml0aWFsCisgICAgICAgICAgICBpZiAoaGFz
X21heCkgc2VjdGlvbi5lbWl0X3UzMnYoaW1wLm1heGltdW0pOyAgLy8gbWF4aW11bQorICAgICAg
ICAgIH0gZWxzZSBpZiAoaW1wLmtpbmQgPT0ga0V4dGVybmFsVGFibGUpIHsKKyAgICAgICAgICAg
IHNlY3Rpb24uZW1pdF90eXBlKGltcC50eXBlKTsKKyAgICAgICAgICAgIHZhciBoYXNfbWF4ID0g
KHR5cGVvZiBpbXAubWF4aW11bSkgIT0gJ3VuZGVmaW5lZCc7CisgICAgICAgICAgICBzZWN0aW9u
LmVtaXRfdTgoaGFzX21heCA/IDEgOiAwKTsgICAgICAgICAgICAgLy8gZmxhZ3MKKyAgICAgICAg
ICAgIHNlY3Rpb24uZW1pdF91MzJ2KGltcC5pbml0aWFsKTsgICAgICAgICAgICAgICAvLyBpbml0
aWFsCisgICAgICAgICAgICBpZiAoaGFzX21heCkgc2VjdGlvbi5lbWl0X3UzMnYoaW1wLm1heGlt
dW0pOyAgLy8gbWF4aW11bQorICAgICAgICAgIH0gZWxzZSBpZiAoaW1wLmtpbmQgPT0ga0V4dGVy
bmFsVGFnKSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihrRXhjZXB0aW9uQXR0cmli
dXRlKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGltcC50eXBlX2luZGV4KTsKKyAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duL3Vu
c3VwcG9ydGVkIGltcG9ydCBraW5kICcgKyBpbXAua2luZCk7CisgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgZnVuY3Rpb25zIGRlY2xhcmF0aW9u
cworICAgIGlmICh3YXNtLmZ1bmN0aW9ucy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcp
IHByaW50KCdlbWl0dGluZyBmdW5jdGlvbiBkZWNscyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAg
ICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa0Z1bmN0aW9uU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4g
eworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLmZ1bmN0aW9ucy5sZW5ndGgpOworICAg
ICAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAgICAgICAgc2VjdGlv
bi5lbWl0X3UzMnYoZnVuYy50eXBlX2luZGV4KTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAg
fQorCisgICAgLy8gQWRkIHRhYmxlIHNlY3Rpb24KKyAgICBpZiAod2FzbS50YWJsZXMubGVuZ3Ro
ID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgdGFibGVzIEAgJyArIGJp
bmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrVGFibGVTZWN0aW9uQ29k
ZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20udGFibGVzLmxl
bmd0aCk7CisgICAgICAgIGZvciAobGV0IHRhYmxlIG9mIHdhc20udGFibGVzKSB7CisgICAgICAg
ICAgc2VjdGlvbi5lbWl0X3R5cGUodGFibGUudHlwZSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0
X3U4KHRhYmxlLmhhc19tYXgpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHRhYmxlLmlu
aXRpYWxfc2l6ZSk7CisgICAgICAgICAgaWYgKHRhYmxlLmhhc19tYXgpIHNlY3Rpb24uZW1pdF91
MzJ2KHRhYmxlLm1heF9zaXplKTsKKyAgICAgICAgICBpZiAodGFibGUuaGFzX2luaXQpIHsKKyAg
ICAgICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIodGFibGUuaW5pdF9leHByKTsKKyAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCBtZW1vcnkg
c2VjdGlvbgorICAgIGlmICh3YXNtLm1lbW9yeSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBpZiAo
ZGVidWcpIHByaW50KCdlbWl0dGluZyBtZW1vcnkgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAg
ICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtNZW1vcnlTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7Cisg
ICAgICAgIHNlY3Rpb24uZW1pdF91OCgxKTsgIC8vIG9uZSBtZW1vcnkgZW50cnkKKyAgICAgICAg
Y29uc3QgaGFzX21heCA9IHdhc20ubWVtb3J5Lm1heCAhPT0gdW5kZWZpbmVkOworICAgICAgICBp
ZiAod2FzbS5tZW1vcnkuaXNfbWVtb3J5NjQpIHsKKyAgICAgICAgICBpZiAod2FzbS5tZW1vcnku
c2hhcmVkKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NoYXJpbmcgbWVtb3J5NjQg
aXMgbm90IHN1cHBvcnRlZCAoeWV0KScpOworICAgICAgICAgIH0KKyAgICAgICAgICBzZWN0aW9u
LmVtaXRfdTgoCisgICAgICAgICAgICAgIGhhc19tYXggPyBrTGltaXRzTWVtb3J5NjRXaXRoTWF4
aW11bSA6IGtMaW1pdHNNZW1vcnk2NE5vTWF4aW11bSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0
X3U2NHYod2FzbS5tZW1vcnkubWluKTsKKyAgICAgICAgICBpZiAoaGFzX21heCkgc2VjdGlvbi5l
bWl0X3U2NHYod2FzbS5tZW1vcnkubWF4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBz
ZWN0aW9uLmVtaXRfdTgoCisgICAgICAgICAgICAgIHdhc20ubWVtb3J5LnNoYXJlZCA/CisgICAg
ICAgICAgICAgICAgICAoaGFzX21heCA/IGtMaW1pdHNTaGFyZWRXaXRoTWF4aW11bSA6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGtMaW1pdHNTaGFyZWROb01heGltdW0pIDoKKyAgICAg
ICAgICAgICAgICAgIChoYXNfbWF4ID8ga0xpbWl0c1dpdGhNYXhpbXVtIDoga0xpbWl0c05vTWF4
aW11bSkpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20ubWVtb3J5Lm1pbik7Cisg
ICAgICAgICAgaWYgKGhhc19tYXgpIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20ubWVtb3J5Lm1heCk7
CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCB0YWcgc2VjdGlvbi4K
KyAgICBpZiAod2FzbS50YWdzLmxlbmd0aCA+IDApIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQo
J2VtaXR0aW5nIHRhZ3MgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9z
ZWN0aW9uKGtUYWdTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1p
dF91MzJ2KHdhc20udGFncy5sZW5ndGgpOworICAgICAgICBmb3IgKGxldCB0eXBlX2luZGV4IG9m
IHdhc20udGFncykgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGtFeGNlcHRpb25BdHRy
aWJ1dGUpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHR5cGVfaW5kZXgpOworICAgICAg
ICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgZ2xvYmFsIHNlY3Rpb24uCisgICAg
aWYgKHdhc20uZ2xvYmFscy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdl
bWl0dGluZyBnbG9iYWxzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRf
c2VjdGlvbihrR2xvYmFsU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9u
LmVtaXRfdTMydih3YXNtLmdsb2JhbHMubGVuZ3RoKTsKKyAgICAgICAgZm9yIChsZXQgZ2xvYmFs
IG9mIHdhc20uZ2xvYmFscykgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKGdsb2JhbC50
eXBlKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoZ2xvYmFsLm11dGFibGUpOworICAgICAg
ICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIoZ2xvYmFsLmluaXQpOworICAgICAgICB9CisgICAg
ICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgZXhwb3J0IHRhYmxlLgorICAgIHZhciBtZW1fZXhw
b3J0ID0gKHdhc20ubWVtb3J5ICE9PSB1bmRlZmluZWQgJiYgd2FzbS5tZW1vcnkuZXhwb3J0ZWQp
OworICAgIHZhciBleHBvcnRzX2NvdW50ID0gd2FzbS5leHBvcnRzLmxlbmd0aCArIChtZW1fZXhw
b3J0ID8gMSA6IDApOworICAgIGlmIChleHBvcnRzX2NvdW50ID4gMCkgeworICAgICAgaWYgKGRl
YnVnKSBwcmludCgnZW1pdHRpbmcgZXhwb3J0cyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAg
IGJpbmFyeS5lbWl0X3NlY3Rpb24oa0V4cG9ydFNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAg
ICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoZXhwb3J0c19jb3VudCk7CisgICAgICAgIGZvciAobGV0
IGV4cCBvZiB3YXNtLmV4cG9ydHMpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfc3RyaW5nKGV4
cC5uYW1lKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoZXhwLmtpbmQpOworICAgICAgICAg
IHNlY3Rpb24uZW1pdF91MzJ2KGV4cC5pbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1l
bV9leHBvcnQpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfc3RyaW5nKCdtZW1vcnknKTsKKyAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0V4dGVybmFsTWVtb3J5KTsKKyAgICAgICAgICBzZWN0
aW9uLmVtaXRfdTgoMCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFk
ZCBzdGFydCBmdW5jdGlvbiBzZWN0aW9uLgorICAgIGlmICh3YXNtLnN0YXJ0X2luZGV4ICE9PSB1
bmRlZmluZWQpIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIHN0YXJ0IGZ1bmN0
aW9uIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrU3Rh
cnRTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdh
c20uc3RhcnRfaW5kZXgpOworICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIGVsZW1lbnQg
c2VnbWVudHMKKyAgICBpZiAod2FzbS5lbGVtZW50X3NlZ21lbnRzLmxlbmd0aCA+IDApIHsKKyAg
ICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGVsZW1lbnQgc2VnbWVudHMgQCAnICsgYmlu
YXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtFbGVtZW50U2VjdGlvbkNv
ZGUsIHNlY3Rpb24gPT4geworICAgICAgICB2YXIgc2VnbWVudHMgPSB3YXNtLmVsZW1lbnRfc2Vn
bWVudHM7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHNlZ21lbnRzLmxlbmd0aCk7CisKKyAg
ICAgICAgZm9yIChsZXQgc2VnbWVudCBvZiBzZWdtZW50cykgeworICAgICAgICAgIC8vIEVtaXQg
ZmxhZyBhbmQgaGVhZGVyLgorICAgICAgICAgIC8vIEVhY2ggY2FzZSBiZWxvdyBjb3JyZXNwb25k
cyB0byBhIGZsYWcgZnJvbQorICAgICAgICAgIC8vIGh0dHBzOi8vd2ViYXNzZW1ibHkuZ2l0aHVi
LmlvL3NwZWMvY29yZS9iaW5hcnkvbW9kdWxlcy5odG1sI2VsZW1lbnQtc2VjdGlvbgorICAgICAg
ICAgIC8vIChub3QgaW4gaW5jcmVhc2luZyBvcmRlcikuCisgICAgICAgICAgaWYgKHNlZ21lbnQu
aXNfYWN0aXZlKCkpIHsKKyAgICAgICAgICAgIGlmIChzZWdtZW50LnRhYmxlID09IDAgJiYgc2Vn
bWVudC50eXBlID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuZXhw
cmVzc2lvbnNfYXNfZWxlbWVudHMoKSkgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91
OCgweDA0KTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKHNlZ21lbnQu
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9u
LmVtaXRfdTgoMHgwMCkKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKHNl
Z21lbnQub2Zmc2V0KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgaWYgKHNlZ21lbnQuZXhwcmVzc2lvbnNfYXNfZWxlbWVudHMoKSkgeworICAg
ICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDA2KTsKKyAgICAgICAgICAgICAgICBzZWN0
aW9uLmVtaXRfdTMydihzZWdtZW50LnRhYmxlKTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfaW5pdF9leHByKHNlZ21lbnQub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfdHlwZShzZWdtZW50LnR5cGUpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDAyKTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfdTMydihzZWdtZW50LnRhYmxlKTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5p
dF9leHByKHNlZ21lbnQub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgo
a0V4dGVybmFsRnVuY3Rpb24pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzZWdtZW50LmV4cHJlc3Npb25zX2FzX2Vs
ZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuaXNfcGFzc2l2ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDUpOworICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDA3KTsKKyAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShzZWdtZW50LnR5cGUpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuaXNfcGFzc2l2ZSgp
KSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDEpOworICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDAzKTsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0V4dGVybmFsRnVuY3Rp
b24pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIC8vIEVtaXQgZWxl
bWVudHMuCisgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoc2VnbWVudC5lbGVtZW50cy5sZW5n
dGgpOworICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2Ygc2VnbWVudC5lbGVtZW50cykgewor
ICAgICAgICAgICAgaWYgKHNlZ21lbnQuZXhwcmVzc2lvbnNfYXNfZWxlbWVudHMoKSkgeworICAg
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKGVsZW1lbnQpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoZWxlbWVudCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KQorICAgIH0KKworICAg
IC8vIElmIHRoZXJlIGFyZSBhbnkgcGFzc2l2ZSBkYXRhIHNlZ21lbnRzLCBhZGQgdGhlIERhdGFD
b3VudCBzZWN0aW9uLgorICAgIGlmICh3YXNtLmRhdGFfc2VnbWVudHMuc29tZShzZWcgPT4gIXNl
Zy5pc19hY3RpdmUpKSB7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtEYXRhQ291bnRTZWN0
aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20uZGF0
YV9zZWdtZW50cy5sZW5ndGgpOworICAgICAgfSk7CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUg
YXJlIGNvbXBpbGF0aW9uIGhpbnRzIGFkZCBhIGN1c3RvbSBzZWN0aW9uICdjb21waWxhdGlvbkhp
bnRzJworICAgIC8vIGFmdGVyIHRoZSBmdW5jdGlvbiBzZWN0aW9uIGFuZCBiZWZvcmUgdGhlIGNv
ZGUgc2VjdGlvbi4KKyAgICBpZiAod2FzbS5jb21waWxhdGlvbl9oaW50cy5sZW5ndGggPiAwKSB7
CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBjb21waWxhdGlvbiBoaW50cyBAICcg
KyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIC8vIEJ1aWxkIGN1c3RvbSBzZWN0aW9uIHBheWxvYWQu
CisgICAgICBsZXQgcGF5bG9hZEJpbmFyeSA9IG5ldyBCaW5hcnkoKTsKKyAgICAgIGxldCBpbXBs
aWNpdF9jb21waWxhdGlvbl9oaW50c19jb3VudCA9IHdhc20uZnVuY3Rpb25zLmxlbmd0aDsKKyAg
ICAgIHBheWxvYWRCaW5hcnkuZW1pdF91MzJ2KGltcGxpY2l0X2NvbXBpbGF0aW9uX2hpbnRzX2Nv
dW50KTsKKworICAgICAgLy8gRGVmYXVsdHMgdG8gdGhlIGNvbXBpbGVyJ3MgY2hvaWNlIGlmIG5v
IGJldHRlciBoaW50IHdhcyBnaXZlbiAoMHgwMCkuCisgICAgICBsZXQgZGVmYXVsdEhpbnRCeXRl
ID0ga0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5RGVmYXVsdCB8CisgICAgICAgICAgKGtDb21waWxh
dGlvbkhpbnRUaWVyRGVmYXVsdCA8PCAyKSB8CisgICAgICAgICAgKGtDb21waWxhdGlvbkhpbnRU
aWVyRGVmYXVsdCA8PCA0KTsKKworICAgICAgLy8gRW1pdCBoaW50IGJ5dGUgZm9yIGV2ZXJ5IGZ1
bmN0aW9uIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUuCisgICAgICBmb3IgKGxldCBpID0gMDsgaSA8
IGltcGxpY2l0X2NvbXBpbGF0aW9uX2hpbnRzX2NvdW50OyBpKyspIHsKKyAgICAgICAgbGV0IGlu
ZGV4ID0gd2FzbS5udW1faW1wb3J0ZWRfZnVuY3MgKyBpOworICAgICAgICB2YXIgaGludEJ5dGU7
CisgICAgICAgIGlmIChpbmRleCBpbiB3YXNtLmNvbXBpbGF0aW9uX2hpbnRzKSB7CisgICAgICAg
ICAgbGV0IGhpbnQgPSB3YXNtLmNvbXBpbGF0aW9uX2hpbnRzW2luZGV4XTsKKyAgICAgICAgICBo
aW50Qnl0ZSA9CisgICAgICAgICAgICAgIGhpbnQuc3RyYXRlZ3kgfCAoaGludC5iYXNlbGluZVRp
ZXIgPDwgMikgfCAoaGludC50b3BUaWVyIDw8IDQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIGhpbnRCeXRlID0gZGVmYXVsdEhpbnRCeXRlOworICAgICAgICB9CisgICAgICAgIHBheWxv
YWRCaW5hcnkuZW1pdF91OChoaW50Qnl0ZSk7CisgICAgICB9CisKKyAgICAgIC8vIEZpbmFsaXpl
IGFzIGN1c3RvbSBzZWN0aW9uLgorICAgICAgbGV0IG5hbWUgPSAnY29tcGlsYXRpb25IaW50cyc7
CisgICAgICBsZXQgYnl0ZXMgPSB0aGlzLmNyZWF0ZUN1c3RvbVNlY3Rpb24obmFtZSwgcGF5bG9h
ZEJpbmFyeS50cnVuY19idWZmZXIoKSk7CisgICAgICBiaW5hcnkuZW1pdF9ieXRlcyhieXRlcyk7
CisgICAgfQorCisgICAgLy8gQWRkIGZ1bmN0aW9uIGJvZGllcy4KKyAgICBpZiAod2FzbS5mdW5j
dGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgLy8gZW1pdCBmdW5jdGlvbiBib2RpZXMKKyAgICAg
IGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGNvZGUgQCAnICsgYmluYXJ5Lmxlbmd0aCk7Cisg
ICAgICBsZXQgc2VjdGlvbl9sZW5ndGggPSAwOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihr
Q29kZVNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYo
d2FzbS5mdW5jdGlvbnMubGVuZ3RoKTsKKyAgICAgICAgbGV0IGhlYWRlciA9IG5ldyBCaW5hcnk7
CisgICAgICAgIGZvciAobGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsKKyAgICAgICAgICBo
ZWFkZXIucmVzZXQoKTsKKyAgICAgICAgICAvLyBGdW5jdGlvbiBib2R5IGxlbmd0aCB3aWxsIGJl
IHBhdGNoZWQgbGF0ZXIuCisgICAgICAgICAgbGV0IGxvY2FsX2RlY2xzID0gZnVuYy5sb2NhbHMg
fHwgW107CisgICAgICAgICAgaGVhZGVyLmVtaXRfdTMydihsb2NhbF9kZWNscy5sZW5ndGgpOwor
ICAgICAgICAgIGZvciAobGV0IGRlY2wgb2YgbG9jYWxfZGVjbHMpIHsKKyAgICAgICAgICAgIGhl
YWRlci5lbWl0X3UzMnYoZGVjbC5jb3VudCk7CisgICAgICAgICAgICBoZWFkZXIuZW1pdF90eXBl
KGRlY2wudHlwZSk7CisgICAgICAgICAgfQorICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGhl
YWRlci5sZW5ndGggKyBmdW5jLmJvZHkubGVuZ3RoKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRf
Ynl0ZXMoaGVhZGVyLnRydW5jX2J1ZmZlcigpKTsKKyAgICAgICAgICAvLyBTZXQgdG8gc2VjdGlv
biBvZmZzZXQgZm9yIG5vdywgd2lsbCB1cGRhdGUuCisgICAgICAgICAgZnVuYy5ib2R5X29mZnNl
dCA9IHNlY3Rpb24ubGVuZ3RoOworICAgICAgICAgIHNlY3Rpb24uZW1pdF9ieXRlcyhmdW5jLmJv
ZHkpOworICAgICAgICB9CisgICAgICAgIHNlY3Rpb25fbGVuZ3RoID0gc2VjdGlvbi5sZW5ndGg7
CisgICAgICB9KTsKKyAgICAgIGZvciAobGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsKKyAg
ICAgICAgZnVuYy5ib2R5X29mZnNldCArPSBiaW5hcnkubGVuZ3RoIC0gc2VjdGlvbl9sZW5ndGg7
CisgICAgICB9CisgICAgfQorCisgICAgLy8gQWRkIGRhdGEgc2VnbWVudHMuCisgICAgaWYgKHdh
c20uZGF0YV9zZWdtZW50cy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdl
bWl0dGluZyBkYXRhIHNlZ21lbnRzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5
LmVtaXRfc2VjdGlvbihrRGF0YVNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2Vj
dGlvbi5lbWl0X3UzMnYod2FzbS5kYXRhX3NlZ21lbnRzLmxlbmd0aCk7CisgICAgICAgIGZvciAo
bGV0IHNlZyBvZiB3YXNtLmRhdGFfc2VnbWVudHMpIHsKKyAgICAgICAgICBpZiAoc2VnLmlzX2Fj
dGl2ZSkgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDApOyAgLy8gbGluZWFyIG1lbW9y
eSBpbmRleCAwIC8gZmxhZ3MKKyAgICAgICAgICAgIGlmIChzZWcuaXNfZ2xvYmFsKSB7CisgICAg
ICAgICAgICAgIC8vIGluaXRpYWxpemVyIGlzIGEgZ2xvYmFsIHZhcmlhYmxlCisgICAgICAgICAg
ICAgIHNlY3Rpb24uZW1pdF91OChrRXhwckdsb2JhbEdldCk7CisgICAgICAgICAgICAgIHNlY3Rp
b24uZW1pdF91MzJ2KHNlZy5hZGRyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgIC8vIGluaXRpYWxpemVyIGlzIGEgY29uc3RhbnQKKyAgICAgICAgICAgICAgc2VjdGlvbi5l
bWl0X3U4KGtFeHBySTMyQ29uc3QpOworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihz
ZWcuYWRkcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0V4
cHJFbmQpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgo
a1Bhc3NpdmUpOyAgLy8gZmxhZ3MKKyAgICAgICAgICB9CisgICAgICAgICAgc2VjdGlvbi5lbWl0
X3UzMnYoc2VnLmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfYnl0ZXMoc2Vn
LmRhdGEpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgYW55IGV4
cGxpY2l0bHkgYWRkZWQgc2VjdGlvbnMKKyAgICBmb3IgKGxldCBleHAgb2Ygd2FzbS5leHBsaWNp
dCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgZXhwbGljaXQgQCAnICsgYmlu
YXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9ieXRlcyhleHApOworICAgIH0KKworICAg
IC8vIEFkZCBuYW1lcy4KKyAgICBsZXQgbnVtX2Z1bmN0aW9uX25hbWVzID0gMDsKKyAgICBsZXQg
bnVtX2Z1bmN0aW9uc193aXRoX2xvY2FsX25hbWVzID0gMDsKKyAgICBmb3IgKGxldCBmdW5jIG9m
IHdhc20uZnVuY3Rpb25zKSB7CisgICAgICBpZiAoZnVuYy5uYW1lICE9PSB1bmRlZmluZWQpICsr
bnVtX2Z1bmN0aW9uX25hbWVzOworICAgICAgaWYgKGZ1bmMubnVtTG9jYWxOYW1lcygpID4gMCkg
KytudW1fZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFtZXM7CisgICAgfQorICAgIGlmIChudW1fZnVu
Y3Rpb25fbmFtZXMgPiAwIHx8IG51bV9mdW5jdGlvbnNfd2l0aF9sb2NhbF9uYW1lcyA+IDAgfHwK
KyAgICAgICAgd2FzbS5uYW1lICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJp
bnQoJ2VtaXR0aW5nIG5hbWVzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVt
aXRfc2VjdGlvbihrVW5rbm93blNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2Vj
dGlvbi5lbWl0X3N0cmluZygnbmFtZScpOworICAgICAgICAvLyBFbWl0IG1vZHVsZSBuYW1lLgor
ICAgICAgICBpZiAod2FzbS5uYW1lICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICBzZWN0aW9u
LmVtaXRfc2VjdGlvbihrTW9kdWxlTmFtZUNvZGUsIG5hbWVfc2VjdGlvbiA9PiB7CisgICAgICAg
ICAgICBuYW1lX3NlY3Rpb24uZW1pdF9zdHJpbmcod2FzbS5uYW1lKTsKKyAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgICAgICAvLyBFbWl0IGZ1bmN0aW9uIG5hbWVzLgorICAgICAgICBpZiAo
bnVtX2Z1bmN0aW9uX25hbWVzID4gMCkgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF9zZWN0aW9u
KGtGdW5jdGlvbk5hbWVzQ29kZSwgbmFtZV9zZWN0aW9uID0+IHsKKyAgICAgICAgICAgIG5hbWVf
c2VjdGlvbi5lbWl0X3UzMnYobnVtX2Z1bmN0aW9uX25hbWVzKTsKKyAgICAgICAgICAgIGZvciAo
bGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsKKyAgICAgICAgICAgICAgaWYgKGZ1bmMubmFt
ZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgbmFtZV9zZWN0aW9uLmVt
aXRfdTMydihmdW5jLmluZGV4KTsKKyAgICAgICAgICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfc3Ry
aW5nKGZ1bmMubmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICAgICAgLy8gRW1pdCBsb2NhbCBuYW1lcy4KKyAgICAgICAgaWYgKG51bV9mdW5jdGlvbnNf
d2l0aF9sb2NhbF9uYW1lcyA+IDApIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfc2VjdGlvbihr
TG9jYWxOYW1lc0NvZGUsIG5hbWVfc2VjdGlvbiA9PiB7CisgICAgICAgICAgICBuYW1lX3NlY3Rp
b24uZW1pdF91MzJ2KG51bV9mdW5jdGlvbnNfd2l0aF9sb2NhbF9uYW1lcyk7CisgICAgICAgICAg
ICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAgICAgICAgICAgIGlmIChm
dW5jLm51bUxvY2FsTmFtZXMoKSA9PSAwKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgbmFtZV9z
ZWN0aW9uLmVtaXRfdTMydihmdW5jLmluZGV4KTsKKyAgICAgICAgICAgICAgbmFtZV9zZWN0aW9u
LmVtaXRfdTMydihmdW5jLm51bUxvY2FsTmFtZXMoKSk7CisgICAgICAgICAgICAgIGxldCBuYW1l
X2luZGV4ID0gMDsKKyAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmdW5jLmxvY2Fs
X25hbWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jLmxv
Y2FsX25hbWVzW2ldID09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAgICAgICBuYW1lX3NlY3Rp
b24uZW1pdF91MzJ2KG5hbWVfaW5kZXgpOworICAgICAgICAgICAgICAgICAgbmFtZV9zZWN0aW9u
LmVtaXRfc3RyaW5nKGZ1bmMubG9jYWxfbmFtZXNbaV0pOworICAgICAgICAgICAgICAgICAgbmFt
ZV9pbmRleCsrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBu
YW1lX2luZGV4ICs9IGZ1bmMubG9jYWxfbmFtZXNbaV07CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBiaW5hcnkudHJ1bmNfYnVmZmVyKCk7CisgIH0K
KworICB0b0FycmF5KGRlYnVnID0gZmFsc2UpIHsKKyAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlz
LnRvQnVmZmVyKGRlYnVnKSk7CisgIH0KKworICBpbnN0YW50aWF0ZShmZmkpIHsKKyAgICBsZXQg
bW9kdWxlID0gdGhpcy50b01vZHVsZSgpOworICAgIGxldCBpbnN0YW5jZSA9IG5ldyBXZWJBc3Nl
bWJseS5JbnN0YW5jZShtb2R1bGUsIGZmaSk7CisgICAgcmV0dXJuIGluc3RhbmNlOworICB9CisK
KyAgYXN5bmNJbnN0YW50aWF0ZShmZmkpIHsKKyAgICByZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFu
dGlhdGUodGhpcy50b0J1ZmZlcigpLCBmZmkpCisgICAgICAgIC50aGVuKCh7bW9kdWxlLCBpbnN0
YW5jZX0pID0+IGluc3RhbmNlKTsKKyAgfQorCisgIHRvTW9kdWxlKGRlYnVnID0gZmFsc2UpIHsK
KyAgICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSh0aGlzLnRvQnVmZmVyKGRlYnVnKSk7
CisgIH0KK30KKworZnVuY3Rpb24gd2FzbVNpZ25lZExlYih2YWwsIG1heF9sZW4gPSA1KSB7Cisg
IGxldCByZXMgPSBbXTsKKyAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhfbGVuOyArK2kpIHsKKyAg
ICBsZXQgdiA9IHZhbCAmIDB4N2Y7CisgICAgLy8gSWYge3Z9IHNpZ24tZXh0ZW5kZWQgZnJvbSA3
IHRvIDMyIGJpdHMgaXMgZXF1YWwgdG8gdmFsLCB3ZSBhcmUgZG9uZS4KKyAgICBpZiAoKCh2IDw8
IDI1KSA+PiAyNSkgPT0gdmFsKSB7CisgICAgICByZXMucHVzaCh2KTsKKyAgICAgIHJldHVybiBy
ZXM7CisgICAgfQorICAgIHJlcy5wdXNoKHYgfCAweDgwKTsKKyAgICB2YWwgPSB2YWwgPj4gNzsK
KyAgfQorICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAnTGViIHZhbHVlIDwnICsgdmFsICsgJz4g
ZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAnICsgbWF4X2xlbik7Cit9CisKK2Z1bmN0aW9uIHdh
c21VbnNpZ25lZExlYih2YWwsIG1heF9sZW4gPSA1KSB7CisgIGxldCByZXMgPSBbXTsKKyAgZm9y
IChsZXQgaSA9IDA7IGkgPCBtYXhfbGVuOyArK2kpIHsKKyAgICBsZXQgdiA9IHZhbCAmIDB4N2Y7
CisgICAgaWYgKHYgPT0gdmFsKSB7CisgICAgICByZXMucHVzaCh2KTsKKyAgICAgIHJldHVybiBy
ZXM7CisgICAgfQorICAgIHJlcy5wdXNoKHYgfCAweDgwKTsKKyAgICB2YWwgPSB2YWwgPj4+IDc7
CisgIH0KKyAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgJ0xlYiB2YWx1ZSA8JyArIHZhbCArICc+
IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJyArIG1heF9sZW4pOworfQorCitmdW5jdGlvbiB3
YXNtSTMyQ29uc3QodmFsKSB7CisgIHJldHVybiBba0V4cHJJMzJDb25zdCwgLi4ud2FzbVNpZ25l
ZExlYih2YWwsIDUpXTsKK30KKworLy8gTm90ZTogU2luY2Uge3ZhbH0gaXMgYSBKUyBudW1iZXIs
IHRoZSBnZW5lcmF0ZWQgY29uc3RhbnQgb25seSBoYXMgNTMgYml0cyBvZgorLy8gcHJlY2lzaW9u
LgorZnVuY3Rpb24gd2FzbUk2NENvbnN0KHZhbCkgeworICByZXR1cm4gW2tFeHBySTY0Q29uc3Qs
IC4uLndhc21TaWduZWRMZWIodmFsLCAxMCldOworfQorCitmdW5jdGlvbiB3YXNtRjMyQ29uc3Qo
ZikgeworICAvLyBXcml0ZSBpbiBsaXR0bGUtZW5kaWFuIG9yZGVyIGF0IG9mZnNldCAwLgorICBk
YXRhX3ZpZXcuc2V0RmxvYXQzMigwLCBmLCB0cnVlKTsKKyAgcmV0dXJuIFsKKyAgICBrRXhwckYz
MkNvbnN0LCBieXRlX3ZpZXdbMF0sIGJ5dGVfdmlld1sxXSwgYnl0ZV92aWV3WzJdLCBieXRlX3Zp
ZXdbM10KKyAgXTsKK30KKworZnVuY3Rpb24gd2FzbUY2NENvbnN0KGYpIHsKKyAgLy8gV3JpdGUg
aW4gbGl0dGxlLWVuZGlhbiBvcmRlciBhdCBvZmZzZXQgMC4KKyAgZGF0YV92aWV3LnNldEZsb2F0
NjQoMCwgZiwgdHJ1ZSk7CisgIHJldHVybiBbCisgICAga0V4cHJGNjRDb25zdCwgYnl0ZV92aWV3
WzBdLCBieXRlX3ZpZXdbMV0sIGJ5dGVfdmlld1syXSwgYnl0ZV92aWV3WzNdLAorICAgIGJ5dGVf
dmlld1s0XSwgYnl0ZV92aWV3WzVdLCBieXRlX3ZpZXdbNl0sIGJ5dGVfdmlld1s3XQorICBdOwor
fQorCitmdW5jdGlvbiB3YXNtUzEyOENvbnN0KGYpIHsKKyAgLy8gV3JpdGUgaW4gbGl0dGxlLWVu
ZGlhbiBvcmRlciBhdCBvZmZzZXQgMC4KKyAgcmV0dXJuIFtrU2ltZFByZWZpeCwga0V4cHJTMTI4
Q29uc3QsIC4uLmZdOworfQorCitmdW5jdGlvbiBnZXRPcGNvZGVOYW1lKG9wY29kZSkgeworICBy
ZXR1cm4gZ2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVzPy5bb3Bjb2RlXSA/PyAndW5rbm93bic7
Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vd2FzbS5qc29uIGIvSlNUZXN0cy93YXNtL3dh
c20uanNvbgppbmRleCA0ZjhkZDllM2QyMTM0MzUwMDAwMDZlMjQxNDZiMDE5NGM5YWM4OGYxLi45
ZDIyNWU0ZTgyMjQ5NjYwNDQ0ZmY0MWFlYmJhMjdjNjRjNzZlZWYxIDEwMDY0NAotLS0gYS9KU1Rl
c3RzL3dhc20vd2FzbS5qc29uCisrKyBiL0pTVGVzdHMvd2FzbS93YXNtLmpzb24KQEAgLTIzLDM0
ICsyMywzOCBAQAogICAgICJibG9ja190eXBlIjogWyJpMzIiLCAiaTY0IiwgImYzMiIsICJmNjQi
LCAidm9pZCIsICJleHRlcm5yZWYiLCAiZnVuY3JlZiJdLAogICAgICJyZWZfdHlwZSI6IFsiZnVu
Y3JlZiIsICJleHRlcm5yZWYiLCAidHlwZV9pZHgiXSwKICAgICAiZXh0ZXJuYWxfa2luZCI6IHsK
LSAgICAgICAgIkZ1bmN0aW9uIjogeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDAgfSwKLSAg
ICAgICAgIlRhYmxlIjogICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDEgfSwKLSAgICAg
ICAgIk1lbW9yeSI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDIgfSwKLSAgICAgICAg
Ikdsb2JhbCI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDMgfQorICAgICAgICAiRnVu
Y3Rpb24iOiAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMCB9LAorICAgICAgICAiVGFi
bGUiOiAgICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMSB9LAorICAgICAgICAiTWVt
b3J5IjogICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMiB9LAorICAgICAgICAiR2xv
YmFsIjogICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMyB9LAorICAgICAgICAiRXhj
ZXB0aW9uIjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogNCB9CiAgICAgfSwKICAgICAi
c2VjdGlvbiIgOiB7Ci0gICAgICAgICJUeXBlIjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAgMSwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIHNpZ25hdHVyZSBkZWNsYXJhdGlv
bnMiIH0sCi0gICAgICAgICJJbXBvcnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAgMiwgImRlc2NyaXB0aW9uIjogIkltcG9ydCBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJG
dW5jdGlvbiI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMywgImRlc2NyaXB0aW9u
IjogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAgIlRhYmxlIjogICAgeyAidHlw
ZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA0LCAiZGVzY3JpcHRpb24iOiAiSW5kaXJlY3QgZnVu
Y3Rpb24gdGFibGUgYW5kIG90aGVyIHRhYmxlcyIgfSwKLSAgICAgICAgIk1lbW9yeSI6ICAgeyAi
dHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA1LCAiZGVzY3JpcHRpb24iOiAiTWVtb3J5IGF0
dHJpYnV0ZXMiIH0sCi0gICAgICAgICJHbG9iYWwiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAgNiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlvbnMiIH0sCi0gICAg
ICAgICJFeHBvcnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNywgImRlc2Ny
aXB0aW9uIjogIkV4cG9ydHMiIH0sCi0gICAgICAgICJTdGFydCI6ICAgIHsgInR5cGUiOiAidmFy
dWludDciLCAidmFsdWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IGZ1bmN0aW9uIGRlY2xh
cmF0aW9uIiB9LAotICAgICAgICAiRWxlbWVudCI6ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZh
bHVlIjogIDksICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9uIiB9LAotICAgICAgICAi
Q29kZSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTAsICJkZXNjcmlwdGlv
biI6ICJGdW5jdGlvbiBib2RpZXMgKGNvZGUpIiB9LAotICAgICAgICAiRGF0YSI6ICAgICB7ICJ0
eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlwdGlvbiI6ICJEYXRhIHNlZ21l
bnRzIiB9CisgICAgICAgICJUeXBlIjogICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogIDEsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBzaWduYXR1cmUgZGVjbGFyYXRpb25zIiB9
LAorICAgICAgICAiSW1wb3J0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAy
LCAiZGVzY3JpcHRpb24iOiAiSW1wb3J0IGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIkZ1bmN0
aW9uIjogIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMywgImRlc2NyaXB0aW9uIjog
IkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIlRhYmxlIjogICAgIHsgInR5cGUi
OiAidmFydWludDciLCAidmFsdWUiOiAgNCwgImRlc2NyaXB0aW9uIjogIkluZGlyZWN0IGZ1bmN0
aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMiIH0sCisgICAgICAgICJNZW1vcnkiOiAgICB7ICJ0
eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDUsICJkZXNjcmlwdGlvbiI6ICJNZW1vcnkgYXR0
cmlidXRlcyIgfSwKKyAgICAgICAgIkV4Y2VwdGlvbiI6IHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAxMywgImRlc2NyaXB0aW9uIjogIkV4Y2VwdGlvbiBkZWNsYXJhdGlvbnMiIH0sCisg
ICAgICAgICJHbG9iYWwiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDYsICJk
ZXNjcmlwdGlvbiI6ICJHbG9iYWwgZGVjbGFyYXRpb25zIiB9LAorICAgICAgICAiRXhwb3J0Ijog
ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA3LCAiZGVzY3JpcHRpb24iOiAiRXhw
b3J0cyIgfSwKKyAgICAgICAgIlN0YXJ0IjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFs
dWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIiB9LAor
ICAgICAgICAiRWxlbWVudCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA5LCAi
ZGVzY3JpcHRpb24iOiAiRWxlbWVudHMgc2VjdGlvbiIgfSwKKyAgICAgICAgIkNvZGUiOiAgICAg
IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMCwgImRlc2NyaXB0aW9uIjogIkZ1bmN0
aW9uIGJvZGllcyAoY29kZSkiIH0sCisgICAgICAgICJEYXRhIjogICAgICB7ICJ0eXBlIjogInZh
cnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlwdGlvbiI6ICJEYXRhIHNlZ21lbnRzIiB9LAor
ICAgICAgICAiRGF0YUNvdW50IjogeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEyLCAi
ZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIGRhdGEgc2VnbWVudHMiIH0KICAgICB9LAogICAgICJv
cGNvZGUiOiB7CiAgICAgICAgICJ1bnJlYWNoYWJsZSI6ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
Y29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMCwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAidHJhcCBpbW1lZGlhdGVseSIgfSwKKyAgICAgICAgIm5vcCI6ICAgICAgICAg
ICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAxLCAicmV0dXJu
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJubyBvcGVyYXRpb24iIH0sCiAgICAg
ICAgICJibG9jayI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2
YWx1ZSI6ICAgMiwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAi
cGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjog
W3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVn
aW4gYSBzZXF1ZW5jZSBvZiBleHByZXNzaW9ucywgeWllbGRpbmcgMCBvciAxIHZhbHVlcyIgfSwK
ICAgICAgICAgImxvb3AiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwg
ICAgInZhbHVlIjogICAzLCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAg
ICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlh
dGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJiZWdpbiBhIGJsb2NrIHdoaWNoIGNhbiBhbHNvIGZvcm0gY29udHJvbCBmbG93IGxvb3BzIiB9
LAogICAgICAgICAiaWYiOiAgICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wi
LCAgICAidmFsdWUiOiAgIDQsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAg
ICAgICAgInBhcmFtZXRlciI6IFsiYm9vbCJdLCAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogImJlZ2luIGlmIGV4cHJlc3Npb24iIH0sCiAgICAgICAgICJlbHNlIjogICAgICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNSwgInJldHVybiI6IFsi
Y29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gZWxzZSBleHByZXNzaW9uIG9mIGlm
IiB9LAotICAgICAgICAic2VsZWN0IjogICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRy
b2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAgImlt
bWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVlcyBiYXNlZCBvbiBjb25kaXRpb24iIH0sCi0g
ICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAg
ICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAgICAiaW1tZWRpYXRl
IjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291bnQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
bnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldCB0eXBlcyB2ZWN0b3IifSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJu
YW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0eXBlIjogInZhbHVlX3R5cGUqIiwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0YXJnZXQg
dHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Ygc2VsZWN0IGluc3RydWN0aW9uIn1dLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRo
ZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRoIHRoZSBhbm5vdGF0aW9uIGZvciByZXN1bHQg
dHlwZXMiIH0sCisgICAgICAgICJ0cnkiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
Y29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNiwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAg
ICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiYmVnaW4gdHJ5IGV4cHJlc3Npb24iIH0sCisgICAgICAgICJjYXRjaCI6ICAg
ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNywgInJl
dHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4i
LCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gY2F0Y2ggZXhwcmVz
c2lvbiBvZiB0cnkiIH0sCisgICAgICAgICJ0aHJvdyI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdv
cnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgOCwgInJldHVybiI6IFsiY29udHJvbCJdLCAg
ICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4iLCAidHlwZSI6ICJ2YXJ1aW50MzIi
fV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAidGhyb3cgZXhjZXB0aW9uIiB9LAorICAgICAgICAicmV0aHJvdyI6
ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDksICJy
ZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVs
YXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInJldGhyb3cgdGhlIGV4Y2Vw
dGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayIgfSwKICAgICAgICAgImJyIjogICAgICAgICAg
ICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDEyLCAicmV0dXJu
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZl
X2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJicmVhayB0aGF0IHRhcmdldHMgYW4g
b3V0ZXIgbmVzdGVkIGJsb2NrIiB9LAogICAgICAgICAiYnJfaWYiOiAgICAgICAgICAgICAgIHsg
ImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTMsICJyZXR1cm4iOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAi
dHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogImNvbmRpdGlvbmFsIGJyZWFrIHRoYXQgdGFyZ2V0cyBh
biBvdXRlciBuZXN0ZWQgYmxvY2siIH0sCiAgICAgICAgICJicl90YWJsZSI6ICAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxNCwgInJldHVybiI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfY291bnQiLCAg
ICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdl
dF90YWJsZSJ9LApAQCAtNTgsOCArNjIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogImRlZmF1bHRfdGFy
Z2V0IiwgInR5cGUiOiAidmFydWludDMyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhbiBvdXRlciBibG9jayBvciBsb29wIHRv
IHdoaWNoIHRvIGJyZWFrIGluIHRoZSBkZWZhdWx0IGNhc2UifV0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYnJhbmNoIHRhYmxlIGNv
bnRyb2wgZmxvdyBjb25zdHJ1Y3QiIH0sCiAgICAgICAgICJyZXR1cm4iOiAgICAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxNSwgInJldHVybiI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAicmV0dXJuIHplcm8gb3Igb25lIHZhbHVlIGZyb20g
dGhpcyBmdW5jdGlvbiIgfSwKKyAgICAgICAgImRlbGVnYXRlIjogICAgICAgICAgICB7ICJjYXRl
Z29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI0LCAicmV0dXJuIjogWyJjb250cm9sIl0s
ICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2RlcHRoIiwgInR5cGUi
OiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJkZWxlZ2F0ZSB0byBhIHBhcmVudCB0cnkgYmxvY2siIH0sCisg
ICAgICAgICJjYXRjaF9hbGwiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAg
ICJ2YWx1ZSI6ICAyNSwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAg
ICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRl
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
Y2F0Y2ggZXhjZXB0aW9ucyByZWdhcmRsZXNzIG9mIHRhZyIgfSwKICAgICAgICAgImRyb3AiOiAg
ICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI2LCAi
cmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBb
ImFueSJdLCAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJpZ25vcmUgdmFsdWUiIH0s
Ci0gICAgICAgICJub3AiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIs
ICAgICJ2YWx1ZSI6ICAgMSwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRp
YXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAibm8gb3BlcmF0aW9uIiB9LAorICAgICAgICAic2VsZWN0IjogICAgICAgICAgICAgIHsgImNh
dGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4iOiBbInByZXYiXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9v
bCJdLCAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVlcyBiYXNlZCBvbiBj
b25kaXRpb24iIH0sCisgICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAgeyAiY2F0ZWdvcnki
OiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJldiJdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAg
ICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291bnQiLCAidHlwZSI6
ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldCB0eXBlcyB2ZWN0
b3IifSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyJuYW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0eXBlIjogInZhbHVl
X3R5cGUqIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJ0YXJnZXQgdHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Ygc2VsZWN0IGluc3Ry
dWN0aW9uIn1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogInRoZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRoIHRoZSBhbm5vdGF0
aW9uIGZvciByZXN1bHQgdHlwZXMiIH0sCiAgICAgICAgICJlbmQiOiAgICAgICAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMSwgInJldHVybiI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZW5kIGEgYmxvY2ssIGxvb3AsIG9yIGlmIiB9LAog
ICAgICAgICAiaTMyLmNvbnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAg
ICAidmFsdWUiOiAgNjUsICJyZXR1cm4iOiBbImkzMiJdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0
ZSI6IFt7Im5hbWUiOiAidmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJpbnQzMiJ9XSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
ImEgY29uc3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTMyIiB9LAogICAgICAgICAiaTY0LmNv
bnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAidmFsdWUiOiAgNjYs
ICJyZXR1cm4iOiBbImk2NCJdLCAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6
IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAi
dmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJpbnQ2NCJ9XSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImEgY29uc3RhbnQgdmFs
dWUgaW50ZXJwcmV0ZWQgYXMgaTY0IiB9LAo=
</data>
<flag name="commit-queue"
          id="464270"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440373</attachid>
            <date>2021-10-06 08:37:49 -0700</date>
            <delta_ts>2021-10-06 11:08:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229681-20211006083747.patch</filename>
            <type>text/plain</type>
            <size>706220</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
YzUyN2ZiNmZlZjIwNjViZWEzODc0OGJjOGE0MWI3MWQzZjljNmY5Li41NmIyNDM4ZTM3NzI4NGI2
MzU5MTg2NmFlZWNjYWE1Nzg4NTk5MjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NTAgQEAKKzIwMjEtMDktMTYgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+IGFuZCBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCB0aGUgV2ViQXNzZW1ibHkgZXhjZXB0aW9uIGhhbmRsaW5nIHByb3Bvc2FsCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk2ODEKKyAg
ICAgICAgPHJkYXI6Ly84MTYwMzM4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlv
biBoYW5kbGluZyBwcm9wb3NhbCwgYXMgcGVyCisgICAgICAgIHRoZSBXSVAgc3BlYzogaHR0cHM6
Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2V4Y2VwdGlvbi1oYW5kbGluZworCisgICAgICAgIFRo
ZSBwcm9wb3NhbCBpbmNsdWRlcyA2IG5ldyBpbnN0cnVjdGlvbnM6IHRyeSwgY2F0Y2gsIGNhdGNo
X2FsbCwKKyAgICAgICAgZGVsZWdhdGUsIHRocm93IGFuZCByZXRocm93LiBBbGwgdGhlIGluc3Ry
dWN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5CisgICAgICAgIHRoZSBMTEludCBhbmQgQjMgZ2VuZXJh
dG9ycywgYnV0IG5vdCB5ZXQgc3VwcG9ydGVkIGluIEFpci4gQW55CisgICAgICAgIGZ1bmN0aW9u
cyB1c2UgZXhjZXB0aW9ucyB3aWxsIHVzZSBCMyBpbiBCQlEuCisKKyAgICAgICAgQSBmZXcgaW1w
b3J0YW50IG5vdGVzIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgLSBJbiBCMywg
c2luY2Ugd2UgY2FuIG5vdyBoYXZlIG11bHRpcGxlIGVudHJ5cG9pbnRzIChvbmUgZm9yIHRoZQor
ICAgICAgICBmdW5jdGlvbiBlbnRyeSArIDEgZm9yIGVhY2ggY2F0Y2gvY2F0Y2hfYWxsKSwgd2Ug
Y2FuIG5vIGxvbmdlciBqdXN0CisgICAgICAgIHJlcGxhY2UgZXZlcnkgdmFsdWUgaW4gdGhlIHN0
YWNrIHdpdGggYSBQaGkgd2hlbiB3ZSBmaW5kIGEgbmV3CisgICAgICAgIGVudHJ5cG9pbnQuIFRo
aXMgd29ya2VkIHNvIGZhciBiZWNhdXNlIG9mIHRoZSBhc3N1bXB0aW9uIHRoYXQgYW55CisgICAg
ICAgIGJsb2NrIGNvdWxkbid0IGFjY2VzcyBpdHMgZW5jbG9zaW5nIHN0YWNrLCBhbmQgc2luY2Ug
dGhlIGVuY2xvc2luZyBzdGFjaworICAgICAgICB3b3VsZCBvbmx5IGJlIGFjY2Vzc2libGUgd2hl
biB3ZSBleGl0ZWQgdGhlIGN1cnJlbnQgYmxvY2ssIHdlIGFkZGVkIFBoaXMKKyAgICAgICAgYXQg
dGhlIGVuZCBvZiBlYWNoIGJsb2NrIHdoZW4gd2UgaGFkIGEgbmV3IGVudHJ5cG9pbnQuIE5vdywg
c2luY2Ugd2UgaGF2ZSB0byBjYXB0dXJlIGFsbAorICAgICAgICBsaXZlIHZhbHVlcyBhdCBhbnkg
cG9pbnQgdGhhdCBtaWdodCB0aHJvdyAoY2FsbHMsIHRocm93IGFuZCByZXRocm93KSwKKyAgICAg
ICAgd2UgYnJlYWsgdGhhdCBhc3N1bXB0aW9uLiBUbyBzaW1wbGlmeSBhbGwgdGhlIHBvc3NpYmxl
IHdheXMgd2UgbWlnaHQKKyAgICAgICAgaGF2ZSB0byBtZXJnZSB0aGUgc3RhdGUgZnJvbSBtdWx0
aXBsZSBlbnRyeXBvaW50cyB3ZSBub3cgdXNlIEIzCisgICAgICAgIFZhcmlhYmxlcyB0byByZXBy
ZXNlbnQgc3RhY2sgc2xvdHMuCisgICAgICAgIC0gU29tZSBleHRyYSBpbmZvcm1hdGlvbiBpcyBy
ZXF1aXJlZCB0byBiZSBhYmxlIHRvIHByb3Blcmx5IHJlc3RvcmUKKyAgICAgICAgdGhlIHN0YXRl
IHdoZW4gY2F0Y2hpbmcgYW4gZXhjZXB0aW9uOgorICAgICAgICAgICAgLSBXZSBhZGRlZCBhIGZp
ZWxkIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2guIFRoaXMgZmllbGQgaXMgbmVjZXNzYXJ5CisgICAg
ICAgICAgICBiZWNhdXNlIHdoZW5ldmVyIHdlIHRocm93LCB3ZSBtaWdodCBlbmQgdXAgaW4gSmF2
YVNjcmlwdCwgd2hpY2gKKyAgICAgICAgICAgIGFzc3VtZXMgdGhlIGNhbGxlZSBpcyBhIGNlbGwg
YW5kIHVzZXMgaXQgdG8gZ2V0IHRoZSBWTSBhbmQgcmVzdG9yZQorICAgICAgICAgICAgY2FsbGVl
IHNhdmVzLiBUaGUgaXNzdWUgaXMgd2hlbiBjYXRjaGluZyBleGNlcHRpb25zIGluIHdhc20gd2UK
KyAgICAgICAgICAgIHN0aWxsIG5lZWQgdGhlIG9yaWdpbmFsIGNhbGxlZSwgYW5kIGlmIHRocm93
aW5nIGFuZCBjYXRjaGluZyBmcm9tCisgICAgICAgICAgICB0aGUgc2FtZSBmcmFtZSwgdGhhdCBj
YWxsIGZyYW1lIHNsb3QgaGFzIG5vdyBiZWVuIG92ZXJ3cml0dGVuLCBzbworICAgICAgICAgICAg
d2Ugc3RvcmUgaXRzIG9yaWdpbmFsIHZhbHVlIGluIHRoZSBWTSBmaWVsZC4KKyAgICAgICAgICAg
IC0gV2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZSBjdXJyZW50IFdhc20gSW5zdGFuY2UgaW50byB0
aGUgY2FsbAorICAgICAgICAgICAgZnJhbWUncyBzbG90IGZvciB0aGUgYHRoaXNgIGFyZ3VtZW50
LiBUaGUgaW5zdGFuY2UgaXMgdXNlZCBib3RoIGJ5CisgICAgICAgICAgICB0aGUgdW53aW5kZXIs
IHRvIGNoZWNrIGlmIHRoZSBleGNlcHRpb24gYmVpbmcgdGhyb3duIG1hdGNoZXMgdGhlCisgICAg
ICAgICAgICBleGNlcHRpb25zIGhhbmRsZWQgYnkgY2F0Y2ggY2FuZGlkYXRlcywgYW5kIGJ5IHRo
ZSBjYXRjaCBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgICAgIHdoaWNoIGlzIG5lY2Vzc2FyeSB3
aGVuIHRocm93aW5nIGZyb20gYSBjcm9zcyBpbnN0YW5jZSBjYWxsIHdoZXJlIGJvdGgKKyAgICAg
ICAgICAgIHRoZSBjYWxsZWUgc2F2ZSBvciBUTFMgd2lsbCBoYXZlIHRoZSBjYWxsZWUncyBpbnN0
YW5jZS4KKyAgICAgICAgICAgIC0gV2Ugc3RvcmUgdGhlIGN1cnJlbnQgb3Bjb2RlIGZvciB0aGUg
bGxpbnQsIG9yIHRoZQorICAgICAgICAgICAgY2FsbCBzaXRlIGluZGV4IGZvciBCMywgaW4gdGhl
IGNhbGwgZnJhbWUgc2xvdCBmb3IgdGhlIGFyZ3VtZW50CisgICAgICAgICAgICBjb3VudCB0YWcu
IFRoZSBjYWxsIHNpdGUgaW5kZXggaXMgdXNlZCBieSB0aGUgdW53aW5kZXIgdG8gY2hlY2sKKyAg
ICAgICAgICAgIGlmIGEgZ2l2ZW4gY2F0Y2ggY2FuIGhhbmRsZSB0aGUgZXhjZXB0aW9uIGJlaW5n
IHRocm93bi4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6Cisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9IYW5kbGVySW5mby5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6OkJhc2VJbnN0cnVj
dGlvbjo6bmFtZSBjb25zdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Omhhc2ggY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpkZWxldGVkVmFsdWUpOgorICAgICAgICAo
SlNDOjpDYWxsU2l0ZUluZGV4Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXhIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6Q2FsbFNp
dGVJbmRleEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkNhdGNoSW5mbzo6Q2F0Y2hJbmZvKToKKyAgICAgICAgKEpTQzo6
VW53aW5kRnVuY3Rvcjo6VW53aW5kRnVuY3Rvcik6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0
b3I6Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5k
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpD
YXRjaEluZm86OkNhdGNoSW5mbyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKToK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBq
aXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAg
ICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJ
VDo6Y29udmVydENhbGxlZVRvVk0pOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5oOgorICAg
ICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZVJlZik6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRX
aWRlMTZDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldFdpZGUzMkNvZGVSZWYpOgor
ICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50
Ojp3YXNtUmV0dXJuVG9UaHJvdyk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVXYXNtQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlV2FzbUNhdGNoQWxsKToKKyAgICAgICAg
KiBsbGludC9MTEludEV4Y2VwdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludE9mZnNldHNF
eHRyYWN0b3IuY3BwOgorICAgICAgICAqIGxsaW50L1dlYkFzc2VtYmx5LmFzbToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNl
OjpFcnJvckluc3RhbmNlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c2V0Q2F0Y2hhYmxlRnJvbVdhc20pOgorICAgICAg
ICAoSlNDOjpFcnJvckluc3RhbmNlOjppc0NhdGNoYWJsZUZyb21XYXNtIGNvbnN0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmNhbGxlZUZvcldhc21DYXRjaE9mZnNldCk6Cisg
ICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzVHJ5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0FueUNhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzQmxvY2spOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6Q29udHJvbERhdGEpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNUcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNBbnlDYXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpDb250cm9sRGF0YTo6aXNCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2gpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2hBbGwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6dHJ5U3Rh
cnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6dHJ5RW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGE6OnRyeURlcHRoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmNhdGNoS2luZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpleGNlcHRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6c3RhY2tTaXplIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZGlkUG9wVmFsdWVGcm9tU3RhY2sp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRTdGFja01hcCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnRha2VTdGFja21hcHMpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjp0YWtlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpwdXNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
c2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Z2Vu
ZXJhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpmaXh1cFBv
aW50ZXJQbHVzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnJlc3RvcmVX
ZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6aW5zZXJ0RW50cnlTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjppbnNlcnRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRSZWZJc051bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUYWJs
ZUdldCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkUmVmRnVuYyk6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlSW5pdCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRhYmxlQ29weSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6Omdl
dExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0
Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5RmlsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUluaXQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlDb3B5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpnZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpzZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hl
Y2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmVtaXRMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpzdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OnNhbml0aXplQXRvbWljUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNMb2FkT3ApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNMb2FkKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY1N0b3JlT3ApOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNTdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNCaW5hcnlSTVdPcCk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmF0b21pY0JpbmFyeVJNVyk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YXRvbWljTm90aWZ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6dHJ1bmNTYXR1cmF0ZWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRTZWxlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRMb29w
VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkRnJv
bVNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjb25u
ZWN0Q29udHJvbEVudHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
TG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNo
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRG
b3JFeGNlcHRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0
Y2hUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
Q2F0Y2hBbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYXRjaEFs
bFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0
Q2F0Y2hJbXBsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdh
dGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5y
ZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUaHJvdyk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbmRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEVuZFRv
VW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjcmVhdGVD
YWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENh
bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayk6CisgICAgICAgIChKU0M6Oldh
c206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVFeGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
ZW1pdENoZWNrc0Zvck1vZE9yRGl2KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1VPik6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4pOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0ej4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0
ej4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRP
cDxGNjRDb252ZXJ0VUk2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNT
RjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyVHJ1bmNTRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyVHJ1bmNVRjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0Pik6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0Pik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMy
Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNVRjMyPik6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAg
ICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpw
cmVwYXJlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBs
YW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpDYWxsZWU6OmhhbmRsZXJGb3JJbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2Fs
bGVlOjpMTEludENhbGxlZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2FsbGVlOjpsaW5r
RXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6aW5nSklUQ2Fs
bGVlOjpsaW5rRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6
aW5nSklUQ2FsbGVlOjpzdGFja21hcCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVl
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6aGFzRXhjZXB0aW9uSGFuZGxlcnMgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmZ1bmN0aW9uQ29kZUJsb2NrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6T3B0aW1pemluZ0pJVENhbGxlZTo6T3B0aW1pemluZ0pJ
VENhbGxlZSk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V2FzbUNhbGxpbmdDb252ZW50aW9uOjpjYWxsSW5mb3JtYXRpb25Gb3Ig
Y29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0eXBlVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjppc1ZhbGlkRXh0ZXJuYWxLaW5k
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVN0cmluZyk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxv
Y2s6Om51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpGdW5jdGlvbkNvZGVCbG9jazo6ZXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uQ29kZUJsb2NrOjphZGRFeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKiB3
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjppc1RyeU9yQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eGNlcHRpb25JbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20v
V2FzbUhhbmRsZXJJbmZvLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkhhbmRsZXJJ
bmZvOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmhhbmRs
ZXJGb3JJbmRleCk6CisgICAgICAgICogd2FzbS9XYXNtSGFuZGxlckluZm8uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlVubGlua2VkSGFuZGxlckluZm86OlVubGlua2VkSGFuZGxlcklu
Zm8pOgorICAgICAgICAoSlNDOjpXYXNtOjpIYW5kbGVySW5mbzo6dGFnIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmRlbGVnYXRlVGFyZ2V0IGNvbnN0KToKKyAgICAg
ICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojp+SW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmg6CisgICAgICAgIChK
U0M6Oldhc206Okluc3RhbmNlOjphZGRUYWcpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5j
ZTo6dGFnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6dHJ5Xyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6Y2F0Y2hfKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc0xvb3Ap
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmlzQmxv
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
SWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
VHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpp
c0FueUNhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xU
eXBlOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnVuaWZ5
VmFsdWVzV2l0aEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6Ondh
bGtFeHByZXNzaW9uU3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
bWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJz
ZUFuZENvbXBpbGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpMTEludEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpy
ZXBhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNh
bGxlcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRp
b25Gb3JDYWxsZWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZExvb3ApOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21MaW1pdHMuaDoKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5m
b3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmV4Y2Vw
dGlvbkluZGV4U3BhY2VTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb246OmlzSW1wb3J0ZWRFeGNlcHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25z
dCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpzaWduYXR1cmVJbmRl
eEZyb21FeGNlcHRpb25JbmRleFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlSW5mb3JtYXRpb246OmltcG9ydEV4Y2VwdGlvbkNvdW50IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmlzRGVjbGFyZWRFeGNlcHRpb24gY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6YWRkRGVjbGFyZWRFeGNlcHRp
b24pOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9X
YXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAqIHdhc20vV2FzbU9TUkVudHJ5RGF0YS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpPU1JF
bnRyeURhdGE6OnZhbHVlcyk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OmxvYWRWYWx1ZXNJbnRvQnVmZmVyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6ZG9PU1JFbnRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTik6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHdh
c20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFy
c2VyOjpwYXJzZUltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBh
cnNlRXhwb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFeGNl
cHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25zLmg6CisgICAgICAgIChKU0M6Oldh
c206OnZhbGlkYXRlT3JkZXIpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWduYXR1cmVJbmZvcm1h
dGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpzaWduYXR1
cmVGb3IpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpXQVNNX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0
aHMuaDoKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rpb25TaXplKToKKyAgICAg
ICAgKiB3YXNtL1dhc21UYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9XYXNt
VGFnLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdl
bmVyYXRvci5oLgorICAgICAgICAoSlNDOjpXYXNtOjpUYWc6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6Oldhc206OlRhZzo6cGFyYW1ldGVyQ291bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUYWc6OnBhcmFtZXRlciBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6c2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6VGFnOjpUYWcpOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5jcHA6CisgICAg
ICAgICogd2FzbS9XYXNtVGh1bmtzLmg6CisgICAgICAgICogd2FzbS9nZW5lcmF0ZVdhc21CM0lS
R2VuZXJhdG9ySW5saW5lc0hlYWRlci5weToKKyAgICAgICAgKENvZGVHZW5lcmF0b3IuZ2VuZXJh
dGVPcGNvZGUpOgorICAgICAgICAoQ29kZUdlbmVyYXRvci5tYWtlUmVzdWx0KToKKyAgICAgICAg
KENvZGVHZW5lcmF0b3IuZ2VuZXJhdGUpOgorICAgICAgICAqIHdhc20vZ2VuZXJhdGVXYXNtT3Bz
SGVhZGVyLnB5OgorICAgICAgICAodHlwZU1hY3JvaXplcik6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6SlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRp
b246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlv
bjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Z2V0
QXJnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnN1YnNwYWNlRm9y
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6dGFnIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6cGF5bG9hZCBjb25zdCk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjp0b0pTVmFsdWUpOgor
ICAgICAgICAoSlNDOjpmcm9tSlNWYWx1ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRy
eUNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwOgorICAgICAgICAo
SlNDOjpjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKToKKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eVRhZzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6SlNXZWJBc3NlbWJseVRh
Zyk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaC4K
KyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2Fz
bVRvSlMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3I6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAg
ICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OmdldEV4Y2VwdGlv
bik6CisgICAgICAgIChKU0M6OmdldFRhZyk6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1
Y3Rvcjo6Y3JlYXRlVGFnKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
OjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlUYWdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFnUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpnZXRUYWcp
OgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAq
IHdhc20vd2FzbS5qc29uOgorCiAyMDIxLTEwLTA2ICBYYW4gTMOzcGV6ICA8eGFuQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0pTQ11bMzJiaXRdIFJlbW92ZSBhIGJ1bmNoIG9mIGNvbXBpbGVyIHdh
cm5pbmdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYjMyYzMwZjExMGY2
YTI5ZTJjODE2Zjg3YzU1NmExMmZkYmUwZDZjOC4uZmNmMGQ5YjZiZGZiOGFjOGExYjMyNTU3ZDRh
MTlkMWUyZmQwMjZjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTIy
LDYgKzEyMiw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9PQkpFQ1RfTFVUX1NPVVJDRVMKICAgICB3
YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBp
bGVFcnJvckNvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJy
b3JQcm90b3R5cGUuY3BwCisgICAgd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmNwcAorICAgIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwCiAg
ICAgd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMv
V2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0xMzYsNiArMTM4LDggQEAgc2V0KEphdmFTY3JpcHRD
b3JlX09CSkVDVF9MVVRfU09VUkNFUwogICAgIHdhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3JQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3Iu
Y3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAorICAgIHdhc20v
anMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAKKyAgICB3YXNtL2pzL1dlYkFzc2VtYmx5
VGFnUHJvdG90eXBlLmNwcAogKQogCiBzZXQoSmF2YVNjcmlwdENvcmVfRlJBTUVXT1JLUwpAQCAt
NjAzLDYgKzYwNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAKICAgICBiMy9CM0NvbW1vbi5oCiAgICAgYjMvQjNUeXBlLmgKKyAgICBiMy9CM1ZhbHVl
UmVwLmgKIAogICAgIGJpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCiAgICAgYmluZGluZ3Mv
U2NyaXB0T2JqZWN0LmgKQEAgLTEyMjAsNiArMTIyNSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmgKICAgICB3YXNtL1dhc21Gb3JtYXQuaAogICAgIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
LmgKKyAgICB3YXNtL1dhc21IYW5kbGVySW5mby5oCiAgICAgd2FzbS9XYXNtSW5kZXhPck5hbWUu
aAogICAgIHdhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCiAgICAgd2FzbS9XYXNtTWVtb3J5
LmgKQEAgLTEyMjgsMTIgKzEyMzQsMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICB3YXNtL1dhc21Nb2R1bGUuaAogICAgIHdhc20vV2FzbU5hbWUu
aAogICAgIHdhc20vV2FzbU5hbWVTZWN0aW9uLmgKKyAgICB3YXNtL1dhc21PU1JFbnRyeURhdGEu
aAogICAgIHdhc20vV2FzbVBhZ2VDb3VudC5oCiAgICAgd2FzbS9XYXNtU2VjdGlvbnMuaAogICAg
IHdhc20vV2FzbVNpZ25hdHVyZS5oCiAgICAgd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuaAog
ICAgIHdhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5oCiAgICAgd2FzbS9XYXNtVGllclVwQ291bnQu
aAorICAgIHdhc20vV2FzbVZhbHVlTG9jYXRpb24uaAogCiAgICAgd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmgKICAgICB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCAy
ODg1YjUxMDE3Y2MxYWUzZDg5MmVmM2M1ZjI3YTRiMTIzNzUzODQyLi4wNmIyMTc1MTJjNmZiYzJk
ODUyNzI0YWFhNzZmYTU3OTRlM2RhZDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTk3LDYgKzE5Nyw4IEBA
ICQoUFJPSkVDVF9ESVIpL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CiAkKFBST0pFQ1Rf
RElSKS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dl
YkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNt
L2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAorJChQUk9KRUNUX0RJUikv
d2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAorJChQUk9KRUNUX0RJ
Uikvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAKICQoUFJPSkVDVF9E
SVIpL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAKICQoUFJPSkVDVF9E
SVIpL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCiAkKFBST0pFQ1RfRElS
KS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTIxMSw2ICsy
MTMsOCBAQCAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29u
c3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yUHJvdG90eXBlLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
Q29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQ
cm90b3R5cGUuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBl
LmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS93YXNtLmpzb24KICQoUFJPSkVDVF9ESVIpL3lhcnIv
Y3JlYXRlX3JlZ2V4X3RhYmxlcwogJChQUk9KRUNUX0RJUikveWFyci9nZW5lcmF0ZVlhcnJDYW5v
bmljYWxpemVVbmljb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggMmFkMjEzMWM1ODY2OWJkMDU3NWM3YWY0
MGE2YzQyN2E1OTRmNWMzZS4uY2IwNWQ4MjE2MmFkOWM0Y2ZmNjRjYTE4Y2FlYWUxODcxYmVjNmY2
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdApAQCAtODIsNiArODIsOCBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2FzbUxMSW50R2VuZXJhdG9ySW5saW5lcy5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2Fz
bU9wcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENv
cmUvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaAogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5Q29tcGls
ZUVycm9yUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaAor
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFz
c2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5s
dXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3Jl
L1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmx1dC5oCkBAIC05Niw2ICs5OCw4IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0CiAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3JQcm90b3R5cGUubHV0LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9X
ZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5sdXQu
aAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dl
YkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCmluZGV4IGVjYmNlNjdmNzhjMDAzNGMxNjZmNTBkNTg5MmE2ZjA4YzVk
YTQwZDYuLjc4OTc1NmYxMGY4YmRiODBjNTJmNGJlOTgwZjUzZjQ5MmEyZDFkNGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yMDMsNiArMjAzLDggQEAg
T0JKRUNUX0xVVF9IRUFERVJTID0gXAogICAgIFRlbXBvcmFsVGltZVpvbmVQcm90b3R5cGUubHV0
LmggXAogICAgIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggXAogICAg
IFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJs
eUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJseUV4Y2VwdGlvblBy
b3RvdHlwZS5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5sdXQuaCBc
CiAgICAgV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUubHV0LmggXAogICAgIFdlYkFzc2VtYmx5
SW5zdGFuY2VDb25zdHJ1Y3Rvci5sdXQuaCBcCkBAIC0yMTcsNiArMjE5LDggQEAgT0JKRUNUX0xV
VF9IRUFERVJTID0gXAogICAgIFdlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmx1dC5o
IFwKICAgICBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0LmggXAogICAgIFdlYkFzc2Vt
Ymx5VGFibGVQcm90b3R5cGUubHV0LmggXAorICAgIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3Iu
bHV0LmggXAorICAgIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oIFwKICMKIAogJChPQkpF
Q1RfTFVUX0hFQURFUlMpOiAlLmx1dC5oIDogJS5jcHAgJChKYXZhU2NyaXB0Q29yZSkvY3JlYXRl
X2hhc2hfdGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGMzNTU0NTBkMjRm
NjlhOGM5MThmYmQzOTA1YjQyYmNiOTUwNzkzOC4uODg4OWIxMGZmMjI3YWMxNzQ5MTVjMWFkNTcx
ZWMzMzNhN2ExY2E0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY2Myw3ICs2
NjMsNyBAQAogCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovOyB9OwogCQkwRkVDODU0MjFCREFDREFDMDA4
MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLzsg
fTsKIAkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmggKi87IH07Ci0JCTBGRUM4NTQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlUmVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oICovOyB9OworCQkwRkVDODU0
NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVSZXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xv
cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3Jpbmcu
aCAqLzsgfTsKIAkJMEZFQzg1NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckFyZy5oICovOyB9OwogCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyog
QWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLzsgfTsK
QEAgLTc5Niw2ICs3OTYsNyBAQAogCQkxNDc4Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxl
VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NkZBNUE4MTM3OEY2QjAwMDM2MjdBMyAvKiBIYW5kbGVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVB
NCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3QjgzQUEwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNo
ZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5
U2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
Qjg0NjIwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0ODUyMUQ4MjZFQUVCRkUwMEND
MUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlcklu
Zm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NDg2QThDMDI0QUJFRDQ4MDA3MzkyMkQgLyogSlNMb2NrUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NkE4QkYyNEFCRUQzQzAwNzM5
MjJEIC8qIEpTTG9ja1JlZlByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NzRBRTIx
NUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDhBN0JGMDFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5l
Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDhBN0JFRTFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2FsbEZyYW1lLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNyw2ICs4MjgsMTMg
QEAKIAkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0E5NThB
MTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDQTk1OEQxNkFCNTBGQTAw
OTM4QTA2IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNEQwMUE3NzIxRkIzNTFGMDBCQzU0RTkgLyogSlNTY3JpcHRTb3Vy
Y2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTREMDFBNzYyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCAq
LzsgfTsKKwkJMTREMDFCRTYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
RDAxQkRBMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi87
IH07CisJCTE0RDAxQkU3MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFC
REIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggKi87IH07CisJ
CTE0RDAxQkU5MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFC
REQyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggKi87
IH07CisJCTE0RDAxQkVDMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJFMDI2REVF
RjM3MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5oICovOyB9OworCQkxNEQwMUJFRDI2REVF
RjM4MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCRTEyNkRFRUYzODAwQ0FFMEQwIC8q
IEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLzsgfTsKKwkJMTREMDFCRUYyNkRFRUYzODAwQ0FF
MEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkUzMjZERUVGMzgwMENBRTBEMCAv
KiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi87IH07CisJCTE0RDAxQkY1MjZE
RUVGNTMwMENBRTBEMCAvKiBXYXNtVGFnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICov
OyB9OwogCQkxNEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDJGM0Q5MTM5RjRCRTIw
MDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9w
ZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNERGMDREOTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RTg0
RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlBMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFr
QmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTI2NCw3ICsxMjcyLDcgQEAKIAkJODYyODFFRjAyNUI2MTYwMDAwMzY3MDA0IC8qIENoZWNr
UHJpdmF0ZUJyYW5kVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODYyODFFRUYyNUI2MTYwMDAwMzY3MDA0IC8qIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudC5oICovOyB9OwogCQk4NjI4MUVGNDI1QjYxQUYwMDAzNjcwMDQgLyogQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2MjgxRUYzMjVCNjFBRjAwMDM2NzAwNCAvKiBDaGVja1ByaXZhdGVCcmFuZFN0YXR1
cy5oICovOyB9OwogCQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NjNCMjNERjBGQzYwRTYyMDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJODYzRkJDNUEyNUIw
OTNCOTAwRjZDOTMwIC8qIFdhc21WYWx1ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjNGQkM1ODI1QjA5M0I5MDBGNkM5MzAgLyogV2Fz
bVZhbHVlTG9jYXRpb24uaCAqLzsgfTsKKwkJODYzRkJDNUEyNUIwOTNCOTAwRjZDOTMwIC8qIFdh
c21WYWx1ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NjNGQkM1ODI1QjA5M0I5MDBGNkM5MzAgLyogV2FzbVZhbHVlTG9jYXRpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjVBMzBG
MTEzNTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5RSAv
KiBKU0NKU1ZhbHVlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTg2NURBMEM1MjVCODk1NzQwMDg3NTc3MiAvKiBTZXRQcml2YXRlQnJh
bmRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NjVEQTBDNDI1Qjg5NTc0MDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oICov
OyB9OwogCQk4NjVEQTBDODI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjVEQTBD
NzI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmggKi87IH07CkBAIC0x
OTM3LDcgKzE5NDUsNyBAQAogCQlFM0JGQTVEMDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJl
ZEdsb2JhbFByb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFM0JGQTVDRDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJlZEdsb2JhbFByb3Bl
cnR5LmggKi87IH07CiAJCUUzQkZEMEJDMURBRjgwOEUwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25p
cHBldFBhcmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTNCRkQwQkExREFGODA3QzAwNjVERUEyIC8qIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmgg
Ki87IH07CiAJCUUzQzI5NUREMUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5n
ZUFkYXB0aXZlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTNDMjk1REMxRUQyQ0JBQTAwRDMwMTZGIC8qIE9iamVjdFByb3BlcnR5Q2hh
bmdlQWRhcHRpdmVXYXRjaHBvaW50LmggKi87IH07Ci0JCUUzQzY5NEIzMjMwMjY4NzcwMDZGQkU0
MiAvKiBXYXNtT1NSRW50cnlEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFM0M2OTRCMTIzMDI2ODczMDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5RGF0
YS5oICovOyB9OworCQlFM0M2OTRCMzIzMDI2ODc3MDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5RGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNDNjk0
QjEyMzAyNjg3MzAwNkZCRTQyIC8qIFdhc21PU1JFbnRyeURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFM0M3M0E5MTI1QkZBNzNCMDBFRkUz
MDMgLyogV2FzbVN0cmVhbWluZ1BsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzQzczQTkwMjVCRkE3MzQwMEVGRTMwMyAvKiBXYXNtU3RyZWFtaW5n
UGxhbi5oICovOyB9OwogCQlFM0M3OUNBQjFEQjlBNERDMDBEMUVDQTQgLyogRE9NSklURWZmZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0M3OUNB
QTFEQjlBNEQ2MDBEMUVDQTQgLyogRE9NSklURWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTNDOEVENDMyM0ExREJDQjAwMTMxOTU4IC8q
IElzb0lubGluZWRIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzQzhFRDQyMjNBMURCQzUwMDEzMTk1OCAvKiBJc29JbmxpbmVkSGVh
cENlbGxUeXBlLmggKi87IH07CkBAIC0zNDYxLDYgKzM0NjksOCBAQAogCQkxNDgyQjc4QTBBNDMw
NUFCMDA1MTdDRkMgLyogQVBJQ2FzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBUElDYXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODJCN0UxMEE0MzA3
NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU09iamVjdFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDgyQjdF
MjBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNPYmplY3RSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNDg1MjFENTI2RUFFQkRGMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21IYW5kbGVySW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUhhbmRsZXJJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODZBOEJFMjRBQkVEM0IwMDczOTIyRCAvKiBK
U0xvY2tSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNMb2NrUmVmLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4NkE4QkYyNEFCRUQzQzAwNzM5MjJEIC8qIEpTTG9ja1Jl
ZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNMb2NrUmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Njb3BlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1NDQsNiArMzU1NCwyMCBAQAogCQkxNENDM0JB
MjIxMzhBMjM4MDAyRDU4QjYgLyogSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5zdHJ1Y3Rpb25TdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTREMDFBNzUyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJv
dmlkZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQwMUE3NjIxRkIzNTAzMDBCQzU0RTkg
LyogSlNTY3JpcHRTb3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdFNvdXJj
ZVByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRBMjZERUVG
MzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaDsgcGF0aCA9IGpz
L1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTREMDFCREIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFnUHJvdG90eXBl
Lmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxNEQwMUJEQzI2REVFRjM3MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJERDI2REVFRjM3MDBDQUUwRDAg
LyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaDsgcGF0aCA9IGpzL1dl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTE0RDAxQkRFMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFn
Q29uc3RydWN0b3IuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRGMjZERUVGMzcwMENBRTBEMCAv
KiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHA7IHBhdGggPSBqcy9XZWJBc3Nl
bWJseVRhZ1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAx
QkUwMjZERUVGMzcwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlUYWcuaDsgcGF0aCA9IGpzL0pTV2ViQXNz
ZW1ibHlUYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRTEyNkRFRUYz
ODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJF
MjI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJFMzI2REVFRjM4MDBDQUUwRDAg
LyogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmg7IHBhdGggPSBq
cy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0RDAxQkU0MjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlUYWcu
Y3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseVRhZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0RDAxQkU1MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlv
bkNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlF
eGNlcHRpb25Db25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0
RDAxQkYyMjZERUVGNTIwMENBRTBEMCAvKiBXYXNtVGFnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UYWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRTcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUgLyogQ0xvb3BTdGFjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTG9vcFN0YWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0RDg1Nzc0MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gdGVzdGFwaS5qczsgcGF0aCA9
IEFQSS90ZXN0cy90ZXN0YXBpLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE1
NSw2ICs3MTc5LDggQEAKIAkJCQkxNDg3Q0UxNjIzNzc0MTAwMDA0NDQyOUMgLyogV2FzbUdlbmVy
YXRvclRyYWl0cy5oICovLAogCQkJCUUzODM1MDA4MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNtR2xv
YmFsLmNwcCAqLywKIAkJCQlFMzgzNTAwOTIzOTBEOTM3MDAzNjMxNkQgLyogV2FzbUdsb2JhbC5o
ICovLAorCQkJCTE0ODUyMUQ1MjZFQUVCREYwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uY3Bw
ICovLAorCQkJCTE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCAq
LywKIAkJCQlBRDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmNwcCAq
LywKIAkJCQlBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi8s
CiAJCQkJQUQ1QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8sCkBA
IC03MjEyLDYgKzcyMzgsOCBAQAogCQkJCUUzQzczQTkwMjVCRkE3MzQwMEVGRTMwMyAvKiBXYXNt
U3RyZWFtaW5nUGxhbi5oICovLAogCQkJCUFENUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUu
aCAqLywKKwkJCQkxNEQwMUJGMjI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5jcHAgKi8sCisJ
CQkJMTREMDFCRjMyNkRFRUY1MjAwQ0FFMEQwIC8qIFdhc21UYWcuaCAqLywKIAkJCQk1MjUwRDJD
RjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCiAJCQkJNTI1MEQyRDAxRThE
QTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLywKIAkJCQlFM0M2OTRCMjIzMDI2ODc0MDA2
RkJFNDIgLyogV2FzbVRpZXJVcENvdW50LmNwcCAqLywKQEAgLTkwOTcsNiArOTEyNSw4IEBACiAJ
CQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAq
LywKIAkJCQlBRDJGQ0JBNjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvci5jcHAgKi8sCiAJCQkJQUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3IuaCAqLywKKwkJCQkxNEQwMUJEQzI2REVFRjM3MDBDQUUwRDAgLyogSlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHAgKi8sCisJCQkJMTREMDFCRTEyNkRFRUYzODAwQ0FFMEQw
IC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLywKIAkJCQlFM0JGM0M0QzIzOTBEMUUzMDA4
QkM3NTIgLyogSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAgKi8sCiAJCQkJRTNCRjNDNEIyMzkwRDFF
MjAwOEJDNzUyIC8qIEpTV2ViQXNzZW1ibHlHbG9iYWwuaCAqLywKIAkJCQk3OTZGQjQzOTFERkY4
QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCAqLywKQEAgLTkxMTIsMTIgKzkx
NDIsMTggQEAKIAkJCQlBRDJGQ0JBRDFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvci5oICovLAogCQkJCUFEMkZDQkFFMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5VGFibGUuY3BwICovLAogCQkJCUFEMkZDQkFGMURCNThEQTQwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5VGFibGUuaCAqLywKKwkJCQkxNEQwMUJFNDI2REVFRjM4MDBDQUUwRDAgLyogSlNX
ZWJBc3NlbWJseVRhZy5jcHAgKi8sCisJCQkJMTREMDFCRTAyNkRFRUYzNzAwQ0FFMEQwIC8qIEpT
V2ViQXNzZW1ibHlUYWcuaCAqLywKIAkJCQlBREQwOUFFRjFGNUY2MjNGMDAxMzEzQzIgLyogV2Fz
bVRvSlMuY3BwICovLAogCQkJCUFERDA5QUVFMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5o
ICovLAogCQkJCUFEMkZDQkIwMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVF
cnJvckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBRDJGQ0JCMTFEQjU4REE0MDBCM0U3MzYgLyog
V2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUFEMkZDQkIyMURC
NThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAgKi8s
CiAJCQkJQUQyRkNCQjMxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9y
UHJvdG90eXBlLmggKi8sCisJCQkJMTREMDFCRTUyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2Vt
Ymx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTE0RDAxQkUzMjZERUVGMzgwMENB
RTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi8sCisJCQkJMTREMDFC
RTIyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcCAq
LywKKwkJCQkxNEQwMUJERDI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUuaCAqLywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb24uaCAqLywKIAkJCQk1MjEzMjI0MzFFQ0JDRTgyMDBGNjU2MTUgLyogV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwICovLApAQCAtOTE1Miw2ICs5MTg4LDEwIEBACiAJCQkJ
QUQyRkNCQzExREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5o
ICovLAogCQkJCUFEMkZDQkMyMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmNwcCAqLywKIAkJCQlBRDJGQ0JDMzFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZS5oICovLAorCQkJCTE0RDAxQkRFMjZERUVGMzcwMENBRTBEMCAvKiBX
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQkxNEQwMUJEQTI2REVFRjM3MDBD
QUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oICovLAorCQkJCTE0RDAxQkRGMjZE
RUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgKi8sCisJCQkJMTRE
MDFCREIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggKi8sCiAJ
CQkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmNwcCAqLywKIAkJCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLywKIAkJCSk7CkBAIC0xMDQwMiw2ICsxMDQ0Miw3IEBACiAJCQkJQUQ1
QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFMzFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRUQyNkRFRUYzODAw
Q0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUz
QkYzQzREMjM5MEQxRTgwMDhCQzc1MiAvKiBKU1dlYkFzc2VtYmx5R2xvYmFsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBl
cnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTA0MTAsNiArMTA0NTEsNyBA
QAogCQkJCUFEMkZDQzA1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5TW9kdWxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFOTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRUIxREI1OERBRDAw
QjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFC
RUMyNkRFRUYzODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlUYWcuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDgzNyw2ICsxMDg3OSw3IEBACiAJCQkJMTQ1MEZBMUMy
MzU3QkRCRTAwOTNDRDREIC8qIFdhc21GdW5jdGlvbkNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTM4MzUwMEEyMzkwRDkzQjAwMzYzMTZEIC8qIFdhc21HbG9iYWwu
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0ODUyMUQ4MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFu
ZGxlckluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAv
KiBXYXNtSW5kZXhPck5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkUyMUY2OTlFQzAw
MDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMDA2NTlFMUVD
QUM4MTIwMDBDQTkyNiAvKiBXYXNtTGltaXRzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwODY3LDYg
KzEwOTEwLDcgQEAKIAkJCQlFM0EwNTMxQTIxMzQyQjY4MDAyMkVDMTQgLyogV2FzbVN0cmVhbWlu
Z1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDNzNBOTEyNUJGQTczQjAwRUZFMzAzIC8q
IFdhc21TdHJlYW1pbmdQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkx
MDAwQkNBQUYgLyogV2FzbVRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJGNTI2REVF
RjUzMDBDQUUwRDAgLyogV2FzbVRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIxRThE
QTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRTlFMEFG
MUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDg5OCw2ICsxMDk0Miw4IEBACiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDJGQ0JFRjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzE3MURCNTlDQjIwMEIzRTczNiAvKiBX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTE0RDAxQkVGMjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJFOTI2REVFRjM4MDBDQUUwRDAgLyogV2Vi
QXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENDkzN0Q0
MURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MjEzMjI0NjFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUzQkYzQzUzMjM5MEQyMDUwMDhCQzc1MiAvKiBXZWJBc3Nl
bWJseUdsb2JhbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEwOTI1LDYgKzEwOTcx
LDggQEAKIAkJCQlBRDJGQ0MyMDFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRkYxREI1OERBRDAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
MkZDQzIxMURCNTlDQjIwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRTYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RDAxQkU3MjZERUVGMzgw
MENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ3QTBFMTZGNUNEMDBCMzQ0NjAgLyogV2ViS2l0QXZh
aWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBNjFCRDU5OTMxMDBGNDU3NUMg
Lyogd2tidWlsdGlucy5weSBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CmluZGV4IGE4NTk3M2U3ZWRjZTFiODM3MTFlMDI5MTk3MmEzMWE0NDZhZjg1MTAuLmYwNDQ1MWQw
MzhkYjMwYzc1MWY0NmE5YTRkNzQ4NjNjYjZiMmQ4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKQEAgLTEwNzksNiArMTA3OSw3IEBAIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5j
cHAKIHdhc20vV2FzbUZvcm1hdC5jcHAKIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmNwcAog
d2FzbS9XYXNtR2xvYmFsLmNwcAord2FzbS9XYXNtSGFuZGxlckluZm8uY3BwCiB3YXNtL1dhc21J
bmRleE9yTmFtZS5jcHAKIHdhc20vV2FzbUluc3RhbmNlLmNwcAogd2FzbS9XYXNtSW5zdGFuY2Uu
aApAQCAtMTEwNSw2ICsxMTA2LDcgQEAgd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuY3BwCiB3
YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCiB3YXNtL1dhc21TdHJlYW1pbmdQbGFuLmNwcAog
d2FzbS9XYXNtVGFibGUuY3BwCit3YXNtL1dhc21UYWcuY3BwCiB3YXNtL1dhc21UaHVua3MuY3Bw
CiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHAKIHdhc20vV2FzbVZhbHVlTG9jYXRpb24uY3BwCkBA
IC0xMTE2LDYgKzExMTgsNyBAQCB3YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHkuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwCit3YXNtL2pzL0pTV2ViQXNzZW1i
bHlFeGNlcHRpb24uY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUxpbmtFcnJv
ci5jcHAKQEAgLTExMjMsMTAgKzExMjYsMTMgQEAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5
LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCit3YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWcuY3BwCiB3YXNtL2pzL1dhc21Ub0pTLmNwcAogd2FzbS9qcy9X
YXNtVG9KUy5oCiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3Bw
CiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAord2FzbS9qcy9X
ZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAord2FzbS9qcy9XZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvdHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKIHdh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5R2xv
YmFsQ29uc3RydWN0b3IuY3BwCkBAIC0xMTQ0LDYgKzExNTAsOCBAQCB3YXNtL2pzL1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yUHJvdG90eXBlLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3Iu
Y3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCit3YXNtL2pzL1dlYkFz
c2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwCit3YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBl
LmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKIAogeWFyci9SZWd1
bGFyRXhwcmVzc2lvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCmluZGV4IDhjYzU1MTU2YjU3YWJjZTQ5Y2VhYjk4MmMzMTQ3YTk4ODlkMTRm
NTYuLmJlMmU4YzgxMWQ2ZGRkMGMxODRiYTVlZDRkOTU3OTM2ZmQyMjU4YTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtMTgzOSw0ICsx
ODM5LDM2IEBAIG9wIDphdG9taWNfZmVuY2UsCiAgICAgYXJnczogewogICAgIH0KIAorb3AgOnRo
cm93LAorICAgIGFyZ3M6IHsKKyAgICAgICAgZXhjZXB0aW9uSW5kZXg6IHVuc2lnbmVkLAorICAg
ICAgICBmaXJzdFZhbHVlOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgfQorCitvcCA6cmV0aHJvdywK
KyAgICBhcmdzOiB7CisgICAgICAgIGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0K
Kworb3BfZ3JvdXAgOkNhdGNoLAorICAgIFsKKyAgICAgICAgOmNhdGNoLAorICAgICAgICA6Y2F0
Y2hfbm9fdGxzLAorICAgIF0sCisgICAgYXJnczogeworICAgICAgICBleGNlcHRpb25JbmRleDog
dW5zaWduZWQsCisgICAgICAgIGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBh
cmd1bWVudENvdW50OiB1bnNpZ25lZCwKKyAgICAgICAgc3RhcnRPZmZzZXQ6IHVuc2lnbmVkLAor
ICAgIH0KKworb3BfZ3JvdXAgOkNhdGNoQWxsLAorICAgIFsKKyAgICAgICAgOmNhdGNoX2FsbCwK
KyAgICAgICAgOmNhdGNoX2FsbF9ub190bHMsCisgICAgXSwKKyAgICBhcmdzOiB7CisgICAgICAg
IGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0KKwogZW5kX3NlY3Rpb24gOldhc20K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKaW5kZXggMDFk
ZGNmOTY5OWI0ODAyOWExYmQ4YmVlNDAzNDkwNDc5YTFmOWQ3Zi4uNjZkZjA5OTlmMjFiMjc0ZTA5
OTliYjVhMzg1MjM0ZDE0NTE1Yzk4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0hhbmRsZXJJbmZvLmgKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWVudW0gY2xhc3MgSGFuZGxlclR5cGUgeworZW51bSBjbGFzcyBIYW5kbGVyVHlwZSA6IHVpbnQ4
X3QgewogICAgIENhdGNoID0gMCwKICAgICBGaW5hbGx5ID0gMSwKICAgICBTeW50aGVzaXplZENh
dGNoID0gMiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgK
aW5kZXggNjgwZTk0MDFkYzYxZmY2M2RjYjVkNWU2ZjlkZWJlYzQwNjg4YjQ0OS4uNTFmMWQwMmUx
ODI1NThjOWMyOTEyZDg0MGM1ODgxMDQ4Y2E4MDFkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cyA9IEpTT3Bjb2RlVHJhaXRzPgogICAgIGNvbnN0IGNo
YXIqIG5hbWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFRyYWl0czo6b3Bjb2RlTmFt
ZXNbb3Bjb2RlSUQoKV07CisgICAgICAgIHJldHVybiBUcmFpdHM6Om9wY29kZU5hbWVzW29wY29k
ZUlEPFRyYWl0cz4oKV07CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzID0g
SlNPcGNvZGVUcmFpdHM+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCmluZGV4IDYzZmY0ZWVjZTYyNmI1ZDhkZmRlYzBjNzIzYTFjZDc0ODg3MWJj
NWEuLjllZGY1OWI5Njg2YTVhZDZjZWE4MzgzZjc0MzMzMzYwYTE5YzZkNDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC0xMzAsNyAr
MTMwLDggQEAgdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0
KCkgY29uc3QKIAogQnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgoKSBjb25z
dAogewotICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOworICAgIGlmIChjYWxsZWUoKS5p
c1dhc20oKSkKKyAgICAgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCk7
CiAgICAgaWYgKCFjb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoMCk7
CiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgKaW5kZXggMWNhYjIyNWJjZTAzOGQ4ZmU1ZTFjNDU4OTAzZmYzOWQ5NTZm
ZmY0YS4uZDg2NGEyNjhjZDdjYjUwNWE0MTMzZTM3MGNjMzM5ZDk1ODQyOWE0YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApAQCAtNDQsNiArNDQs
MTEgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIGNsYXNzIENhbGxTaXRlSW5kZXggewogICAgIHB1
YmxpYzoKICAgICAgICAgQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsKKworICAgICAgICBDYWxs
U2l0ZUluZGV4KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgICAgIDog
bV9iaXRzKGRlbGV0ZWRWYWx1ZSgpLmJpdHMoKSkKKyAgICAgICAgeworICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKICAgICAgICAgICAgIDogbV9iaXRzKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpCkBA
IC01NywxMyArNjIsMjUgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2JpdHM7IH0KICAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2JpdHMg
PT0gb3RoZXIubV9iaXRzOyB9CiAKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0
dXJuIGludEhhc2gobV9iaXRzKTsgfQorICAgICAgICBzdGF0aWMgQ2FsbFNpdGVJbmRleCBkZWxl
dGVkVmFsdWUoKSB7IHJldHVybiBmcm9tQml0cyhzX2ludmFsaWRJbmRleCAtIDEpOyB9CisgICAg
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9
PSBkZWxldGVkVmFsdWUoKTsgfQorCiAgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJl
dHVybiBtX2JpdHM7IH0KICAgICAgICAgc3RhdGljIENhbGxTaXRlSW5kZXggZnJvbUJpdHModWlu
dDMyX3QgYml0cykgeyByZXR1cm4gQ2FsbFNpdGVJbmRleChiaXRzKTsgfQogCiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgo
Yml0cygpKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgQnl0
ZWNvZGVJbmRleCgpLm9mZnNldCgpIH07CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMy
X3Qgc19pbnZhbGlkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7
CisKKyAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgc19pbnZhbGlkSW5kZXggfTsKKyAgICB9Owor
CisgICAgc3RydWN0IENhbGxTaXRlSW5kZXhIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgQ2FsbFNpdGVJbmRleCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENhbGxTaXRlSW5kZXgmIGEsIGNvbnN0IENh
bGxTaXRlSW5kZXgmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogICAgIH07CiAK
ICAgICBjbGFzcyBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4
IHsKQEAgLTMzMiwzICszNDksMTUgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0Zyb21KU0Nv
ZGUodm9pZCogcmV0dXJuQWRkcmVzcyk7CiAKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVz
cGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkNhbGxTaXRlSW5kZXg+IDogSlNDOjpD
YWxsU2l0ZUluZGV4SGFzaCB7IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNo
VHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkNhbGxTaXRlSW5kZXg+
IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6Q2FsbFNpdGVJbmRleD4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCmluZGV4IDkxMjZlZjU1OWYzNTMxMjUyZWI0ZGQ1MjllZGI0N2QzY2VmYWJh
M2MuLjljYWM0MGE2NjEyYzMxNmE4ZWFmMWFhNjJiODlmNDFhNTZmYjRiZDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtNTIs
NiArNTIsNyBAQAogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJK
U01vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAi
TGl0ZXJhbFBhcnNlci5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKQEAg
LTUxMiwxNSArNTEzLDYzIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbm90aWZ5RGVidWdn
ZXJPZlVud2luZGluZyhWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgfQogfQogCitD
YXRjaEluZm86OkNhdGNoSW5mbyhjb25zdCBIYW5kbGVySW5mbyogaGFuZGxlciwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit7CisgICAgbV92YWxpZCA9ICEhaGFuZGxlcjsKKyAgICBpZiAobV92YWxp
ZCkgeworICAgICAgICBtX3R5cGUgPSBoYW5kbGVyLT50eXBlKCk7CisjaWYgRU5BQkxFKEpJVCkK
KyAgICAgICAgbV9uYXRpdmVDb2RlID0gaGFuZGxlci0+bmF0aXZlQ29kZTsKKyNlbmRpZgorCisg
ICAgICAgIC8vIGhhbmRsZXItPnRhcmdldCBpcyBtZWFuaW5nbGVzcyBmb3IgZ2V0dGluZyBhIGNv
ZGUgb2Zmc2V0IHdoZW4gY2F0Y2hpbmcKKyAgICAgICAgLy8gdGhlIGV4Y2VwdGlvbiBpbiBhIERG
Ry9GVEwgZnJhbWUuIFRoaXMgYnl0ZWNvZGUgdGFyZ2V0IG9mZnNldCBjb3VsZCBiZQorICAgICAg
ICAvLyBzb21ldGhpbmcgdGhhdCdzIGluIGFuIGlubGluZWQgZnJhbWUsIHdoaWNoIG1lYW5zIGFu
IGFycmF5IGFjY2VzcworICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNvZGUgb2Zmc2V0IGluIHRo
ZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKKyAgICAgICAgLy8gYW5kIGNh
biBjYXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhpdHMgdG8gaGFuZGxlci0+
dGFyZ2V0CisgICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCisgICAgICAgIGlmICghSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKKyAgICAgICAgICAg
IG1fY2F0Y2hQQ0ZvckludGVycHJldGVyID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdCho
YW5kbGVyLT50YXJnZXQpLnB0cigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NhdGNo
UENGb3JJbnRlcnByZXRlciA9IG51bGxwdHI7CisgICAgfQorfQorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorQ2F0Y2hJbmZvOjpDYXRjaEluZm8oY29uc3QgV2FzbTo6SGFuZGxlckluZm8qIGhh
bmRsZXIsIGNvbnN0IFdhc206OkNhbGxlZSogY2FsbGVlKQoreworICAgIG1fdmFsaWQgPSAhIWhh
bmRsZXI7CisgICAgaWYgKG1fdmFsaWQpIHsKKyAgICAgICAgbV90eXBlID0gSGFuZGxlclR5cGU6
OkNhdGNoOworICAgICAgICBtX25hdGl2ZUNvZGUgPSBoYW5kbGVyLT5tX25hdGl2ZUNvZGU7Cisg
ICAgICAgIGlmIChjb25zdCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bGVlLT5mdW5jdGlvbkNvZGVCbG9jaygpKQorICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJw
cmV0ZXIgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPm1fdGFyZ2V0KS5w
dHIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXIg
PSBudWxscHRyOworICAgIH0KK30KKyNlbmRpZgorCiBjbGFzcyBVbndpbmRGdW5jdG9yIHsKIHB1
YmxpYzoKLSAgICBVbndpbmRGdW5jdG9yKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBi
b29sIGlzVGVybWluYXRpb24sIENvZGVCbG9jayomIGNvZGVCbG9jaywgSGFuZGxlckluZm8qJiBo
YW5kbGVyKQorICAgIFVud2luZEZ1bmN0b3IoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUs
IGJvb2wgaXNUZXJtaW5hdGlvbiwgSlNWYWx1ZSB0aHJvd25WYWx1ZSwgQ29kZUJsb2NrKiYgY29k
ZUJsb2NrLCBDYXRjaEluZm8mIGhhbmRsZXIpCiAgICAgICAgIDogbV92bSh2bSkKICAgICAgICAg
LCBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCiAgICAgICAgICwgbV9pc1Rlcm1pbmF0aW9uKGlzVGVy
bWluYXRpb24pCiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAgICAsIG1f
aGFuZGxlcihoYW5kbGVyKQogICAgIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAg
IGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7CisgICAgICAgICAgICBpZiAoSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbiogd2FzbUV4Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbio+KG1fdm0sIHRocm93blZhbHVlKSkgeworICAgICAgICAgICAgICAgIG1fY2F0Y2hhYmxl
RnJvbVdhc20gPSB0cnVlOworICAgICAgICAgICAgICAgIG1fd2FzbVRhZyA9ICZ3YXNtRXhjZXB0
aW9uLT50YWcoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoRXJyb3JJbnN0YW5jZSogZXJyb3Ig
PSBqc0R5bmFtaWNDYXN0PEVycm9ySW5zdGFuY2UqPihtX3ZtLCB0aHJvd25WYWx1ZSkpCisgICAg
ICAgICAgICAgICAgbV9jYXRjaGFibGVGcm9tV2FzbSA9IGVycm9yLT5pc0NhdGNoYWJsZUZyb21X
YXNtKCk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTSh0aHJvd25WYWx1
ZSk7CisjZW5kaWYKICAgICB9CiAKICAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigp
KFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKQEAgLTUyOSwxOSArNTc4LDMyIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9jYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKICAgICAgICAg
bV9jb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKIAotICAgICAgICBtX2hhbmRsZXIg
PSBudWxscHRyOworICAgICAgICBtX2hhbmRsZXIubV92YWxpZCA9IGZhbHNlOwogICAgICAgICBp
ZiAobV9jb2RlQmxvY2spIHsKICAgICAgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhhbmRsZXIodmlzaXRvciwg
bV9jb2RlQmxvY2ssIFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1faGFuZGxlcikKKyAgICAgICAgICAgICAgICBtX2hhbmRsZXIgPSB7IGZpbmRFeGNl
cHRpb25IYW5kbGVyKHZpc2l0b3IsIG1fY29kZUJsb2NrLCBSZXF1aXJlZEhhbmRsZXI6OkFueUhh
bmRsZXIpLCBtX2NvZGVCbG9jayB9OworICAgICAgICAgICAgICAgIGlmIChtX2hhbmRsZXIubV92
YWxpZCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgICAg
ICBpZiAodmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRv
KiBqc1RvV2FzbUlDQ2FsbGVlID0ganNEeW5hbWljQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4obV92
bSwgdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkpKQorICAgICAgICBDYWxsZWVCaXRzIGNhbGxl
ZSA9IHZpc2l0b3ItPmNhbGxlZSgpOworICAgICAgICBpZiAoY2FsbGVlLmlzQ2VsbCgpKSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byoganNUb1dhc21JQ0NhbGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNU
b1dhc21JQ0NhbGxlZSo+KG1fdm0sIGNhbGxlZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICAgICAg
bV92bS53YXNtQ29udGV4dC5zdG9yZShqc1RvV2FzbUlDQ2FsbGVlLT5mdW5jdGlvbigpLT5wcmV2
aW91c0luc3RhbmNlKG1fY2FsbEZyYW1lKSwgbV92bS5zb2Z0U3RhY2tMaW1pdCgpKTsKKworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fY2F0Y2hhYmxlRnJvbVdhc20gJiYgY2FsbGVlLmlzV2Fz
bSgpKSB7CisgICAgICAgICAgICBXYXNtOjpDYWxsZWUqIHdhc21DYWxsZWUgPSBjYWxsZWUuYXNX
YXNtQ2FsbGVlKCk7CisgICAgICAgICAgICBpZiAod2FzbUNhbGxlZS0+aGFzRXhjZXB0aW9uSGFu
ZGxlcnMoKSkgeworICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0
YW5jZSA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihtX2NhbGxGcmFtZS0+dGhpc1Zh
bHVlKCkpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9
IG1fY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOworICAgICAgICAgICAgICAgIG1f
aGFuZGxlciA9IHsgd2FzbUNhbGxlZS0+aGFuZGxlckZvckluZGV4KGpzSW5zdGFuY2UtPmluc3Rh
bmNlKCksIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgbV93YXNtVGFnKSwgd2FzbUNhbGxlZSB9Owor
ICAgICAgICAgICAgICAgIGlmIChtX2hhbmRsZXIubV92YWxpZCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
I2VuZGlmCiAKQEAgLTU4OCwxMCArNjUwLDE0IEBAIHByaXZhdGU6CiAgICAgQ2FsbEZyYW1lKiYg
bV9jYWxsRnJhbWU7CiAgICAgYm9vbCBtX2lzVGVybWluYXRpb247CiAgICAgQ29kZUJsb2NrKiYg
bV9jb2RlQmxvY2s7Ci0gICAgSGFuZGxlckluZm8qJiBtX2hhbmRsZXI7CisgICAgQ2F0Y2hJbmZv
JiBtX2hhbmRsZXI7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGNvbnN0IFdhc206OlRh
ZyogbV93YXNtVGFnIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV9jYXRjaGFibGVGcm9tV2FzbSB7
IGZhbHNlIH07CisjZW5kaWYKIH07CiAKLU5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJw
cmV0ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBl
eGNlcHRpb24pCitORVZFUl9JTkxJTkUgQ2F0Y2hJbmZvIEludGVycHJldGVyOjp1bndpbmQoVk0m
IHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIApAQCAtNjA5LDE2ICs2NzUs
MTMgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2
bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGMKICAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNF
RChzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2Vw
dGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KLSAg
ICBIYW5kbGVySW5mbyogaGFuZGxlciA9IG51bGxwdHI7Ci0gICAgVW53aW5kRnVuY3RvciBmdW5j
dG9yKHZtLCBjYWxsRnJhbWUsIHZtLmlzVGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSwg
Y29kZUJsb2NrLCBoYW5kbGVyKTsKKyAgICBDYXRjaEluZm8gY2F0Y2hJbmZvOworICAgIFVud2lu
ZEZ1bmN0b3IgZnVuY3Rvcih2bSwgY2FsbEZyYW1lLCB2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9u
KGV4Y2VwdGlvbiksIGV4Y2VwdGlvblZhbHVlLCBjb2RlQmxvY2ssIGNhdGNoSW5mbyk7CiAgICAg
U3RhY2tWaXNpdG9yOjp2aXNpdDxTdGFja1Zpc2l0b3I6OlRlcm1pbmF0ZUlmVG9wRW50cnlGcmFt
ZUlzRW1wdHk+KGNhbGxGcmFtZSwgdm0sIGZ1bmN0b3IpOwogICAgIGlmICh2bS5oYXNDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKCkpCiAgICAgICAgIHZtLnBvcEFsbENoZWNrcG9pbnRPU1JTaWRlU3Rh
dGVVbnRpbChjYWxsRnJhbWUpOwogCi0gICAgaWYgKCFoYW5kbGVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBoYW5kbGVyOworICAgIHJldHVybiBjYXRjaEluZm87CiB9
CiAKIHZvaWQgSW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3du
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCAwYzNlZmUxMmU1MTA1Mzg4ZjZjZjI4NTExZDll
YTVlNGVhZjMwN2ZjLi40ZDk2ODhlNWFhOGNhMGE0YWQwZjVkOTBmZGZhYzE0MjAzYzU4OWMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApA
QCAtNDMsNiArNDMsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBDYWxsZWU7CitzdHJ1Y3QgSGFuZGxlcklu
Zm87Cit9CisjZW5kaWYKKwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBFdmFsRXhl
Y3V0YWJsZTsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC01OCw2ICs2NSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTU2NvcGU7CiAgICAgY2xhc3MgU291cmNlQ29k
ZTsKICAgICBjbGFzcyBTdGFja0ZyYW1lOworICAgIGVudW0gY2xhc3MgSGFuZGxlclR5cGUgOiB1
aW50OF90OwogICAgIHN0cnVjdCBDYWxsRnJhbWVDbG9zdXJlOwogICAgIHN0cnVjdCBIYW5kbGVy
SW5mbzsKICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CkBAIC04MSw2ICs4OSwyNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgU3RhY2tGcmFtZU5hdGl2ZUNvZGUKICAgICB9OwogCisgICAgc3Ry
dWN0IENhdGNoSW5mbyB7CisgICAgICAgIENhdGNoSW5mbygpCisgICAgICAgICAgICA6IG1fdmFs
aWQoZmFsc2UpCisgICAgICAgIHsgfQorCisgICAgICAgIENhdGNoSW5mbyhjb25zdCBIYW5kbGVy
SW5mbyosIENvZGVCbG9jayopOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgQ2F0
Y2hJbmZvKGNvbnN0IFdhc206OkhhbmRsZXJJbmZvKiwgY29uc3QgV2FzbTo6Q2FsbGVlKik7Cisj
ZW5kaWYKKworICAgICAgICBib29sIG1fdmFsaWQ7CisgICAgICAgIEhhbmRsZXJUeXBlIG1fdHlw
ZTsKKyNpZiBFTkFCTEUoSklUKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4gbV9uYXRpdmVDb2RlOworI2VuZGlmCisgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBtX2NhdGNoUENGb3JJbnRlcnByZXRlcjsKKyAgICB9OworCiAgICAgY2xhc3Mg
SW50ZXJwcmV0ZXIgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIENhY2hlZENhbGw7CkBAIC0xMTIsNyArMTM4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgdm9pZCBnZXRBcmd1bWVudHNEYXRhKENhbGxGcmFtZSosIEpTRnVuY3Rp
b24qJiwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFyZ3YsIGlu
dCYgYXJnYyk7CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiB1bndpbmQoVk0m
LCBDYWxsRnJhbWUqJiwgRXhjZXB0aW9uKik7CisgICAgICAgIE5FVkVSX0lOTElORSBDYXRjaElu
Zm8gdW53aW5kKFZNJiwgQ2FsbEZyYW1lKiYsIEV4Y2VwdGlvbiopOwogICAgICAgICB2b2lkIG5v
dGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqLCBFeGNlcHRpb24qKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgZGVidWco
Q2FsbEZyYW1lKiwgRGVidWdIb29rVHlwZSk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgc3RhY2tU
cmFjZUFzU3RyaW5nKFZNJiwgY29uc3QgVmVjdG9yPFN0YWNrRnJhbWU+Jik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IDU3
YTFiZGI2ZGJkNWIxNjA2OTFjNjU2NTBmYzBkNDVkYmU4MDllYWIuLmRjNWVjY2UwNWVlMzlmYmJm
ZWJmNWQ5YjJkYmIzYjk1NmZkNjZhNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0xNjYsMjMgKzE2NiwyMCBAQCB2b2lk
IFN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q29kZU9yaWdpbiogY29kZU9yaQogICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSBudWxs
cHRyOwogI2VuZGlmCiAKKyAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKKyAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9ICFtX2ZyYW1lLmNvZGVCbG9j
aygpID8gQnl0ZWNvZGVJbmRleCgwKQorICAgICAgICA6IGNvZGVPcmlnaW4gPyBjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KCkKKyAgICAgICAgOiBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsK
KwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoY2FsbEZyYW1lLT5pc0FueVdhc21D
YWxsZWUoKSkgewogICAgICAgICBtX2ZyYW1lLm1faXNXYXNtRnJhbWUgPSB0cnVlOwogICAgICAg
ICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgbV9mcmFtZS5tX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7CiAKICAgICAgICAgaWYgKG1fZnJhbWUubV9jYWxs
ZWUuaXNXYXNtKCkpCiAgICAgICAgICAgICBtX2ZyYW1lLm1fd2FzbUZ1bmN0aW9uSW5kZXhPck5h
bWUgPSBtX2ZyYW1lLm1fY2FsbGVlLmFzV2FzbUNhbGxlZSgpLT5pbmRleE9yTmFtZSgpOwotCi0g
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9ICFt
X2ZyYW1lLmNvZGVCbG9jaygpID8gQnl0ZWNvZGVJbmRleCgwKQotICAgICAgICA6IGNvZGVPcmln
aW4gPyBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkKLSAgICAgICAgOiBjYWxsRnJhbWUtPmJ5
dGVjb2RlSW5kZXgoKTsKLQogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggZWYyZmNiNDJmMzVmZTcy
ZTQ0ZGYzZTAyMjRiMmU5MDhiMjU1ZWU5OC4uYTkxYTlkZDk3YWJlZTg3NDhkMDc2N2MzMjNhZWNh
OGQ0OThlYjRjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcApAQCAtNzA0LDkgKzcwNCw0NyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9y
ZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYQogI2Vu
ZGlmCiAKICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCBzY3JhdGNoKTsKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQo
KSksIHNjcmF0Y2gpOworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwoc2NyYXRjaCwgc2tpcExpc3QpOwogCi0gICAgTG9hZFJlZ1Nwb29s
ZXIgc3Bvb2xlcigqdGhpcywgc2NyYXRjaCk7CisgICAgLy8gUmVzdG9yZSB0aGUgY2FsbGVlIHNh
dmUgdmFsdWUgb2YgdGhlIHNjcmF0Y2guCisgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFs
bENhbGxlZVNhdmVzLT5hdChzY3JhdGNoR1BSRW50cnlJbmRleCk7CisgICAgQVNTRVJUKCFkb250
UmVzdG9yZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKTsKKyAgICBBU1NFUlQoZW50cnkucmVn
KCkuaXNHUFIoKSk7CisgICAgQVNTRVJUKHNjcmF0Y2ggPT0gZW50cnkucmVnKCkuZ3ByKCkpOwor
I2lmIENQVShBUk02NCkKKyAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5MiA9IGFsbENhbGxlZVNh
dmVzLT5hdChzY3JhdGNoR1BSRW50cnlJbmRleCArIDEpOworICAgIEFTU0VSVF9VTlVTRUQoZW50
cnkyLCAhZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5Mi5yZWcoKSkpOworICAgIEFTU0VS
VChlbnRyeTIucmVnKCkuaXNHUFIoKSk7CisgICAgQVNTRVJUKHVudXNlZE5leHRTbG90R1BSID09
IGVudHJ5Mi5yZWcoKS5ncHIoKSk7CisgICAgbG9hZFBhaXI2NChzY3JhdGNoLCBUcnVzdGVkSW1t
MzIoZW50cnkub2Zmc2V0KCkpLCBzY3JhdGNoLCB1bnVzZWROZXh0U2xvdEdQUik7CisjZWxzZQor
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoLCBlbnRyeS5vZmZzZXQoKSksIHNjcmF0Y2gpOwor
I2VuZGlmCisKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOworI2VuZGlm
IC8vIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorfQorCit2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKEdQUlJlZyB2bUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpCit7CisjaWYgTlVNQkVSX09G
X0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCisgICAgbG9hZFB0cihBZGRyZXNzKHZtR1BSLCBW
TTo6dG9wRW50cnlGcmFtZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgcmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3JhdGNoR1BSLCBS
ZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2
bUdQUik7CisjZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCit9
CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBlbnRyeUZyYW1lR1BSLCBjb25zdCBSZWdp
c3RlclNldCYgc2tpcExpc3QpCit7CisjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RF
UlMgPiAwCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVn
aXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBlbnRyeUZyYW1lR1BSKTsKKworICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdp
c3Rlck9mZnNldHMoKTsKKyAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2
ZXMtPnNpemUoKTsKKworICAgIExvYWRSZWdTcG9vbGVyIHNwb29sZXIoKnRoaXMsIGVudHJ5RnJh
bWVHUFIpOwogCiAgICAgLy8gUmVzdG9yZSBhbGwgY2FsbGVlIHNhdmVzIGV4Y2VwdCBmb3IgdGhl
IHNjcmF0Y2guCiAgICAgdW5zaWduZWQgaSA9IDA7CkBAIC03MjgsMjMgKzc2Niw5IEBAIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKEVudHJ5RnJhCiAgICAgfQogICAgIHNwb29sZXIuZmluYWxpemVGUFIoKTsKIAot
ICAgIC8vIFJlc3RvcmUgdGhlIGNhbGxlZSBzYXZlIHZhbHVlIG9mIHRoZSBzY3JhdGNoLgotICAg
IFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoc2NyYXRjaEdQUkVu
dHJ5SW5kZXgpOwotICAgIEFTU0VSVCghZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJl
ZygpKSk7Ci0gICAgQVNTRVJUKGVudHJ5LnJlZygpLmlzR1BSKCkpOwotICAgIEFTU0VSVChzY3Jh
dGNoID09IGVudHJ5LnJlZygpLmdwcigpKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgUmVnaXN0ZXJB
dE9mZnNldCBlbnRyeTIgPSBhbGxDYWxsZWVTYXZlcy0+YXQoc2NyYXRjaEdQUkVudHJ5SW5kZXgg
KyAxKTsKLSAgICBBU1NFUlRfVU5VU0VEKGVudHJ5MiwgIWRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdl
dChlbnRyeTIucmVnKCkpKTsKLSAgICBBU1NFUlQoZW50cnkyLnJlZygpLmlzR1BSKCkpOwotICAg
IEFTU0VSVCh1bnVzZWROZXh0U2xvdEdQUiA9PSBlbnRyeTIucmVnKCkuZ3ByKCkpOwotICAgIGxv
YWRQYWlyNjQoc2NyYXRjaCwgVHJ1c3RlZEltbTMyKGVudHJ5Lm9mZnNldCgpKSwgc2NyYXRjaCwg
dW51c2VkTmV4dFNsb3RHUFIpOwotI2Vsc2UKLSAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwg
ZW50cnkub2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSNlbmRpZgotCiAjZWxzZQotICAgIFVOVVNFRF9Q
QVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICBVTlVTRURfUEFSQU0odm1HUFIpOworICAgIFVOVVNF
RF9QQVJBTShza2lwTGlzdCk7CiAjZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJ
U1RFUlMgPiAwCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCmluZGV4IDBkMjUzZDk4OGVjMjg3YzhjOTdiNTZkNWE4NzQxNWYxMTYxYjU4Y2IuLjlhNDc5
ZjY3MGI2ZDZlZDkxZDY4OTk4YjlmOTNiZjEwNmRlN2ZhMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtNDEzLDYgKzQxMyw4IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomKTsKKyAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJSZWcgdm1HUFIsIEdQUlJlZyBzY3Jh
dGNoR1BSKTsKKyAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGVudHJ5RnJhbWUsIGNvbnN0IFJlZ2lzdGVyU2V0JiBz
a2lwTGlzdCk7CiAKICAgICB2b2lkIGNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJh
bWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomLCBj
b25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURXhjZXB0aW9ucy5jcHAKaW5kZXggNmQ1ODNhNDg5ZWQ1MzAzMThjZTMwOTZjNjZiMDJlN2Qx
YzU4YTRiYy4uYjg2ZTlhNDEwM2M4NTA2YzNmZGJiYWM1NGQ3ZTk0ZTY2NjBhYWQ5OSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCkBAIC01NCwyMSArNTQs
MTQgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAK
ICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwogICAgIFJFTEVB
U0VfQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSB2bS5pbnRl
cnByZXRlci0+dW53aW5kKHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRoaXMgbWF5IHVw
ZGF0ZSBjYWxsRnJhbWUuCisgICAgQ2F0Y2hJbmZvIGhhbmRsZXIgPSB2bS5pbnRlcnByZXRlci0+
dW53aW5kKHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRoaXMgbWF5IHVwZGF0ZSBjYWxs
RnJhbWUuCiAKICAgICB2b2lkKiBjYXRjaFJvdXRpbmU7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGNhdGNoUENGb3JJbnRlcnByZXRlciA9IG51bGxwdHI7Ci0gICAgaWYgKGhhbmRsZXIpIHsKLSAg
ICAgICAgLy8gaGFuZGxlci0+dGFyZ2V0IGlzIG1lYW5pbmdsZXNzIGZvciBnZXR0aW5nIGEgY29k
ZSBvZmZzZXQgd2hlbiBjYXRjaGluZwotICAgICAgICAvLyB0aGUgZXhjZXB0aW9uIGluIGEgREZH
L0ZUTCBmcmFtZS4gVGhpcyBieXRlY29kZSB0YXJnZXQgb2Zmc2V0IGNvdWxkIGJlCi0gICAgICAg
IC8vIHNvbWV0aGluZyB0aGF0J3MgaW4gYW4gaW5saW5lZCBmcmFtZSwgd2hpY2ggbWVhbnMgYW4g
YXJyYXkgYWNjZXNzCi0gICAgICAgIC8vIHdpdGggdGhpcyBieXRlY29kZSBvZmZzZXQgaW4gdGhl
IG1hY2hpbmUgZnJhbWUgaXMgdXR0ZXJseSBtZWFuaW5nbGVzcwotICAgICAgICAvLyBhbmQgY2Fu
IGNhdXNlIGFuIG92ZXJmbG93LiBPU1IgZXhpdCBwcm9wZXJseSBleGl0cyB0byBoYW5kbGVyLT50
YXJnZXQKLSAgICAgICAgLy8gaW4gdGhlIHByb3BlciBmcmFtZS4KLSAgICAgICAgaWYgKCFKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSkK
LSAgICAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPnRhcmdldCkucHRyKCk7CisgICAgaWYgKGhh
bmRsZXIubV92YWxpZCkgeworICAgICAgICBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBoYW5kbGVy
Lm1fY2F0Y2hQQ0ZvckludGVycHJldGVyOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIGNhdGNo
Um91dGluZSA9IGhhbmRsZXItPm5hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAg
ICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci5tX25hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKICNlbHNlCiAgICAgICAgIGlmIChjYXRjaFBDRm9ySW50ZXJwcmV0ZXItPmlzV2lkZTMyKCkp
CiAgICAgICAgICAgICBjYXRjaFJvdXRpbmUgPSBMTEludDo6Z2V0V2lkZTMyQ29kZVB0cihjYXRj
aFBDRm9ySW50ZXJwcmV0ZXItPm9wY29kZUlEKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDdjYTFiNGU3YzNmZDA4NGRkMjdhYzM4NTA2YWE5YzZh
ZWQ5NWRlYjAuLjk5MjI5ZTQ5OTMxN2MxMmExZjM0Y2JlYWNkYWVjOTAxNTM4MDhhZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKQEAgLTU3LDYgKzU3LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKICAgICAgICAgdm9pZCBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRy
eSk7CiAgICAgICAgIHZvaWQgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAgICAgIHZvaWQgY29udmVydENhbGxl
ZVRvVk0oUmVnaXN0ZXJJRCBjYWxsZWUpOwogCiAgICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0
dXJuIG1fdm07IH0KIApAQCAtMTU4LDYgKzE1OSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRp
ZgogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6Y29udmVy
dENhbGxlZVRvVk0oUmVnaXN0ZXJJRCBjYWxsZWUpCisgICAgeworICAgICAgICBhdXRvIHByZWNp
c2VBbGxvY2F0aW9uQ2FzZSA9IGJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBj
YWxsZWUsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxm
QWxpZ25tZW50KSk7CisgICAgICAgIGFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
TWFya2VkQmxvY2s6OmJsb2NrTWFzayksIGNhbGxlZSk7CisgICAgICAgIGxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGNhbGxlZSwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFy
a2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgY2FsbGVlKTsKKyAgICAgICAgYXV0byBs
b2FkZWRDYXNlID0ganVtcCgpOworCisgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5r
KHRoaXMpOworICAgICAgICBsb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWUsIFBy
ZWNpc2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0o
KSAtIFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBjYWxsZWUpOworCisgICAgICAg
IGxvYWRlZENhc2UubGluayh0aGlzKTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEu
aAppbmRleCA0NzFmYjVkMmZkM2I4MDkzOTZhNTIzY2UzM2ZjYjJhODU5ODM2YWNiLi4zN2MxYWZl
NmRlNzZjODkzNWFjNzQ2ZDYwZmI0OTdkMzFlNmU3Y2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RGF0YS5oCkBAIC0zMjIsNiArMzIyLDI0IEBAIEFMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTMyQ29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bj
b2RlSUQpCiAjZW5kaWYKIH0KIAordGVtcGxhdGU8UHRyVGFnIHRhZz4KK0FMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz4gZ2V0Q29kZVJlZihXYXNtT3Bjb2RlSUQgb3Bjb2Rl
SUQpCit7CisgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+OjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoZ2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKSk7Cit9CisKK3RlbXBsYXRl
PFB0clRhZyB0YWc+CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+IGdl
dFdpZGUxNkNvZGVSZWYoV2FzbU9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8dGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdldFdpZGUx
NkNvZGVQdHI8dGFnPihvcGNvZGVJRCkpOworfQorCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPiBnZXRXaWRlMzJDb2RlUmVmKFdh
c21PcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PHRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bj
b2RlSUQpKTsKK30KKwogdGVtcGxhdGU8UHRyVGFnIHRhZz4KIEFMV0FZU19JTkxJTkUgTExJbnRD
b2RlIGdldENvZGVGdW5jdGlvblB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI5MTNl
ZWRhYjBjNDMwZmE3ODQ2MjliZTMwOTEyNDAwZTU2OThjMTQuLjhiNGVmMjBjMjczMjYwZGRlZjY5
NGQzMGEwN2Y2NzVmMDgzZjM4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludEV4Y2VwdGlvbnMuY3BwCkBAIC00OSw2ICs0OSwxOCBAQCBJbnN0cnVjdGlvbiogcmV0
dXJuVG9UaHJvdyhWTSYgdm0pCiAgICAgcmV0dXJuIExMSW50OjpleGNlcHRpb25JbnN0cnVjdGlv
bnMoKTsKIH0KIAorSW5zdHJ1Y3Rpb24qIHdhc21SZXR1cm5Ub1Rocm93KFZNJiB2bSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0odm0pOworI2lmIExMSU5UX1RSQUNJTkcKKyAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6dHJhY2VMTEludFNsb3dQYXRoKCkpKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0
aW9uICIsIEpTVmFsdWUoc2NvcGUuZXhjZXB0aW9uKCkpLCAiIChyZXR1cm5Ub1Rocm93KS5cbiIp
OworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBMTEludDo6d2FzbUV4Y2VwdGlvbkluc3RydWN0
aW9ucygpOworfQorCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRh
Zz4gY2FsbFRvVGhyb3coVk0mIHZtKQogewogICAgIFVOVVNFRF9QQVJBTSh2bSk7CkBAIC05Miw0
ICsxMDQsMzQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
IGhhbmRsZUNhdGNoKE9wY29kZVNpemUgc2l6ZSkKICAgICByZXR1cm4ge307CiB9CiAKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4gaGFuZGxlV2FzbUNhdGNoKE9wY29kZVNpemUgc2l6ZSkKK3sKKyAgICBzd2l0Y2gg
KHNpemUpIHsKKyAgICBjYXNlIE9wY29kZVNpemU6Ok5hcnJvdzoKKyAgICAgICAgcmV0dXJuIExM
SW50OjpnZXRDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KHdhc21fY2F0Y2gpOworICAg
IGNhc2UgT3Bjb2RlU2l6ZTo6V2lkZTE2OgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldFdpZGUx
NkNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4od2FzbV9jYXRjaCk7CisgICAgY2FzZSBP
cGNvZGVTaXplOjpXaWRlMzI6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0V2lkZTMyQ29kZVJl
ZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPih3YXNtX2NhdGNoKTsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFuZGxlV2FzbUNhdGNoQWxsKE9w
Y29kZVNpemUgc2l6ZSkKK3sKKyAgICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIE9wY29kZVNp
emU6Ok5hcnJvdzoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+KHdhc21fY2F0Y2hfYWxsKTsKKyAgICBjYXNlIE9wY29kZVNpemU6OldpZGUx
NjoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRXaWRlMTZDb2RlUmVmPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+KHdhc21fY2F0Y2hfYWxsKTsKKyAgICBjYXNlIE9wY29kZVNpemU6OldpZGUzMjoK
KyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRXaWRlMzJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KHdhc21fY2F0Y2hfYWxsKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkxMSW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmgKaW5kZXggODA2YjE5ZjY2MDU4NjZiODhjZTg0OTU4
N2EwNDFhZGU0ZjM2ZDYyOS4uZTVmOTAyMWZhZGI4ZWZjYjI1ODdjMGNhNjAxNzZlYmYxZGNiYWM0
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9u
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuaApA
QCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgTExJbnQgewogLy8gYmV0d2VlbiAxIGFuZCA5IHNs
b3RzIHdpbGwgZ2l2ZSB5b3UgYW4gImluc3RydWN0aW9uIiB0aGF0IHRocmVhZHMgdG8gdGhlCiAv
LyBpbnRlcnByZXRlcidzIGV4Y2VwdGlvbiBoYW5kbGVyLgogSW5zdHJ1Y3Rpb24qIHJldHVyblRv
VGhyb3coVk0mKTsKK0luc3RydWN0aW9uKiB3YXNtUmV0dXJuVG9UaHJvdyhWTSYpOwogCiAvLyBV
c2UgdGhpcyB3aGVuIHlvdSdyZSB0aHJvd2luZyB0byBhIGNhbGwgdGh1bmsuCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gY2FsbFRvVGhyb3coVk0mKTsKQEAg
LTQ5LDQgKzUwLDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IGNhbGxUb1Rocm93KFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4gaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24oVk0mKTsKIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5kbGVDYXRjaChPcGNvZGVTaXplKTsK
IAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPiBoYW5kbGVXYXNtQ2F0Y2goT3Bjb2RlU2l6ZSk7CitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFuZGxlV2FzbUNhdGNoQWxsKE9w
Y29kZVNpemUpOworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkxMSW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludE9mZnNldHNFeHRyYWN0b3IuY3BwCmluZGV4IDZkZjQ2ODUwZTJjN2ViOTY4OThlYzRjNTdm
Y2I3N2RkODc1ZDJkNTAuLmIyY2FhMTg1NDEzMGZmOGI5MzE4MDc2ZDI3ZGZlYmRkMjEzMzg0NDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRy
YWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNF
eHRyYWN0b3IuY3BwCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1R5cGVJbmZv
LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSnVtcFRh
YmxlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTExJbnRPZmZsaW5lQXNt
Q29uZmlnLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNz
ZW1ibHkuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbQpp
bmRleCA0MzZjZjY2NDkwZDcxYzVlZTliYjMwZTg2ZmU2ZjQyYmFlZTc2ZGYxLi5mZTk4OWM4M2Ex
MTBiMWM4Mzg3NDNmOTczMmM5YTJiY2U1YWZkNTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9XZWJBc3NlbWJseS5hc20KQEAgLTI1Niw2ICsyNTYsNyBAQCBtYWNybyB0aHJvd0V4
Y2VwdGlvbihleGNlcHRpb24pCiBlbmQKIAogbWFjcm8gY2FsbFdhc21TbG93UGF0aChzbG93UGF0
aCkKKyAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0
W2Nmcl0KICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92ZSBjZnIsIGEwCiAgICAg
bW92ZSBQQywgYTEKQEAgLTI3NCw2ICsyNzUsMTQgQEAgbWFjcm8gY2FsbFdhc21DYWxsU2xvd1Bh
dGgoc2xvd1BhdGgsIGFjdGlvbikKICAgICBhY3Rpb24ocjAsIHIxKQogZW5kCiAKK21hY3JvIHJl
c3RvcmVTdGFja1BvaW50ZXJBZnRlckNhbGwoKQorICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB3
czEKKyAgICBsb2FkaSBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6bV9udW1DYWxsZWVMb2NhbHNb
d3MxXSwgd3MxCisgICAgbHNoaWZ0cCAzLCB3czEKKyAgICBhZGRwIG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsLCB3czEKKyAgICBzdWJwIGNmciwgd3MxLCBzcAorZW5kCisKIG1hY3JvIHdh
c21Qcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9ja1NldHRlciwgbG9hZFdhc21JbnN0
YW5jZSkKICAgICAjIFNldCB1cCB0aGUgY2FsbCBmcmFtZSBhbmQgY2hlY2sgaWYgd2Ugc2hvdWxk
IE9TUi4KICAgICBwcmVzZXJ2ZUNhbGxlclBDQW5kQ0ZSKCkKQEAgLTI4MSw2ICsyOTAsOSBAQCBt
YWNybyB3YXNtUHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvY2tTZXR0ZXIsIGxvYWRX
YXNtSW5zdGFuY2UpCiAgICAgbG9hZFdhc21JbnN0YW5jZSgpCiAgICAgcmVsb2FkTWVtb3J5UmVn
aXN0ZXJzRnJvbUluc3RhbmNlKHdhc21JbnN0YW5jZSwgd3MwLCB3czEpCiAKKyAgICBsb2FkcCBX
YXNtOjpJbnN0YW5jZTo6bV9vd25lclt3YXNtSW5zdGFuY2VdLCB3czAKKyAgICBzdG9yZXAgd3Mw
LCBUaGlzQXJndW1lbnRPZmZzZXRbY2ZyXQorCiAgICAgY29kZUJsb2NrR2V0dGVyKHdzMCkKICAg
ICBjb2RlQmxvY2tTZXR0ZXIod3MwKQogCkBAIC0zMzMsMTUgKzM0NSwxOSBAQCBtYWNybyB0cmFj
ZUV4ZWN1dGlvbigpCiAgICAgZW5kCiBlbmQKIAotIyBMZXNzIGNvbnZlbmllbnQsIGJ1dCByZXF1
aXJlZCBmb3Igb3Bjb2RlcyB0aGF0IGNvbGxpZGUgd2l0aCByZXNlcnZlZCBpbnN0cnVjdGlvbnMg
KGUuZy4gd2FzbV9ub3ApCi1tYWNybyB1bnByZWZpeGVkV2FzbU9wKG9wY29kZU5hbWUsIG9wY29k
ZVN0cnVjdCwgZm4pCi0gICAgY29tbW9uT3Aob3Bjb2RlTmFtZSwgdHJhY2VFeGVjdXRpb24sIG1h
Y3JvKHNpemUpCittYWNybyBjb21tb25XYXNtT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBw
cm9sb2d1ZSwgZm4pCisgICAgY29tbW9uT3Aob3Bjb2RlTmFtZSwgcHJvbG9ndWUsIG1hY3JvKHNp
emUpCiAgICAgICAgIGZuKG1hY3JvKGZuMikKICAgICAgICAgICAgIGZuMihvcGNvZGVOYW1lLCBv
cGNvZGVTdHJ1Y3QsIHNpemUpCiAgICAgICAgIGVuZCkKICAgICBlbmQpCiBlbmQKIAorIyBMZXNz
IGNvbnZlbmllbnQsIGJ1dCByZXF1aXJlZCBmb3Igb3Bjb2RlcyB0aGF0IGNvbGxpZGUgd2l0aCBy
ZXNlcnZlZCBpbnN0cnVjdGlvbnMgKGUuZy4gd2FzbV9ub3ApCittYWNybyB1bnByZWZpeGVkV2Fz
bU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgZm4pCisgICAgY29tbW9uV2FzbU9wKG9wY29k
ZU5hbWUsIG9wY29kZVN0cnVjdCwgdHJhY2VFeGVjdXRpb24sIGZuKQorZW5kCisKIG1hY3JvIHdh
c21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGZuKQogICAgIHVucHJlZml4ZWRXYXNtT3Ao
d2FzbV8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgZm4pCiBlbmQKQEAgLTUxMiw2ICs1Mjgs
MTYgQEAgb3Aod2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHMsIG1hY3JvICgpCiAgICAgd2Fz
bU5leHRJbnN0cnVjdGlvbigpCiBlbmQpCiAKK21hY3JvIGp1bXBUb0V4Y2VwdGlvbigpCisgICAg
aWYgQVJNNjRFCisgICAgICAgIG1vdmUgcjAsIGEwCisgICAgICAgIGxlYXAgSlNDQ29uZmlnICsg
Y29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRl
OjpleGNlcHRpb25IYW5kbGVyKSAqIFB0clNpemUsIGExCisgICAgICAgIGptcCBbYTFdLCBOYXRp
dmVUb0pJVEdhdGVQdHJUYWcgIyBFeGNlcHRpb25IYW5kbGVyUHRyVGFnCisgICAgZWxzZQorICAg
ICAgICBqbXAgcjAsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKKyAgICBlbmQKK2VuZAorCiBvcCh3
YXNtX3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUsIG1hY3JvICgpCiAgICAgbG9hZHAg
V2FzbTo6SW5zdGFuY2U6Om1fcG9pbnRlclRvVG9wRW50cnlGcmFtZVt3YXNtSW5zdGFuY2VdLCB0
NQogICAgIGxvYWRwIFt0NV0sIHQ1CkBAIC01MjMsMTQgKzU0OSw3IEBAIG9wKHdhc21fdGhyb3df
ZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAgICAjIFNsb3cgcGF0aHMgYW5k
IHRoZSB0aHJvd0V4Y2VwdGlvbiBtYWNybyBzdG9yZSB0aGUgZXhjZXB0aW9uIGNvZGUgaW4gdGhl
IEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHNsb3QKICAgICBsb2FkaSBBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyArIFBheWxvYWRPZmZzZXRbY2ZyXSwgYTMKICAgICBjQ2FsbDQoX3Nsb3df
cGF0aF93YXNtX3Rocm93X2V4Y2VwdGlvbikKLQotICAgIGlmIEFSTTY0RQotICAgICAgICBtb3Zl
IHIwLCBhMAotICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9m
SlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6ZXhjZXB0aW9uSGFuZGxlcikgKiBQ
dHJTaXplLCBhMQotICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgRXhj
ZXB0aW9uSGFuZGxlclB0clRhZwotICAgIGVsc2UKLSAgICAgICAgam1wIHIwLCBFeGNlcHRpb25I
YW5kbGVyUHRyVGFnCi0gICAgZW5kCisgICAganVtcFRvRXhjZXB0aW9uKCkKIGVuZCkKIAogbWFj
cm8gd2FzbV90aHJvd19mcm9tX2ZhdWx0X2hhbmRsZXIoaW5zdGFuY2UpCkBAIC01NDMsMTQgKzU2
Miw3IEBAIG1hY3JvIHdhc21fdGhyb3dfZnJvbV9mYXVsdF9oYW5kbGVyKGluc3RhbmNlKQogICAg
IG1vdmUgMCwgYTEKICAgICBtb3ZlIGNmciwgYTAKICAgICBjQ2FsbDQoX3Nsb3dfcGF0aF93YXNt
X3Rocm93X2V4Y2VwdGlvbikKLQotICAgIGlmIEFSTTY0RQotICAgICAgICBtb3ZlIHIwLCBhMAot
ICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmln
R2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6ZXhjZXB0aW9uSGFuZGxlcikgKiBQdHJTaXplLCBh
MQotICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgRXhjZXB0aW9uSGFu
ZGxlclB0clRhZwotICAgIGVsc2UKLSAgICAgICAgam1wIHIwLCBFeGNlcHRpb25IYW5kbGVyUHRy
VGFnCi0gICAgZW5kCisgICAganVtcFRvRXhjZXB0aW9uKCkKIGVuZAogCiBvcCh3YXNtX3Rocm93
X2Zyb21fZmF1bHRfaGFuZGxlcl90cmFtcG9saW5lX2Zhc3RUTFMsIG1hY3JvICgpCkBAIC03NzAs
MTEgKzc4MiwxMSBAQCBtYWNybyBzbG93UGF0aEZvcldhc21DYWxsKGN0eCwgc2xvd1BhdGgsIHN0
b3JlV2FzbUluc3RhbmNlKQogCiAgICAgICAgICAgICAjIExvYWQgcmVnaXN0ZXJzIGZyb20gc3Rh
Y2sKICAgICAgICAgICAgIGZvckVhY2hBcmd1bWVudEdQUihtYWNybyAob2Zmc2V0LCBncHIpCi0g
ICAgICAgICAgICAgICAgbG9hZHEgQ2FsbEZyYW1lSGVhZGVyU2l6ZSArIG9mZnNldFtzcCwgd3Mx
LCA4XSwgZ3ByCisgICAgICAgICAgICAgICAgbG9hZHEgQ2FsbEZyYW1lSGVhZGVyU2l6ZSArIDgg
KyBvZmZzZXRbc3AsIHdzMSwgOF0sIGdwcgogICAgICAgICAgICAgZW5kKQogCiAgICAgICAgICAg
ICBmb3JFYWNoQXJndW1lbnRGUFIobWFjcm8gKG9mZnNldCwgZnByKQotICAgICAgICAgICAgICAg
IGxvYWRkIENhbGxGcmFtZUhlYWRlclNpemUgKyBvZmZzZXRbc3AsIHdzMSwgOF0sIGZwcgorICAg
ICAgICAgICAgICAgIGxvYWRkIENhbGxGcmFtZUhlYWRlclNpemUgKyA4ICsgb2Zmc2V0W3NwLCB3
czEsIDhdLCBmcHIKICAgICAgICAgICAgIGVuZCkKIAogICAgICAgICAgICAgYWRkcCBDYWxsZXJG
cmFtZUFuZFBDU2l6ZSwgc3AKQEAgLTgxMSwxMSArODIzLDcgQEAgbWFjcm8gc2xvd1BhdGhGb3JX
YXNtQ2FsbChjdHgsIHNsb3dQYXRoLCBzdG9yZVdhc21JbnN0YW5jZSkKICAgICAgICAgICAgICAg
ICBkZWZpbmVSZXR1cm5MYWJlbChvcGNvZGVOYW1lLCBzaXplKQogICAgICAgICAgICAgZW5kKQog
Ci0gICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgd3MxCi0gICAgICAgICAgICBsb2Fk
aSBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6bV9udW1DYWxsZWVMb2NhbHNbd3MxXSwgd3MxCi0g
ICAgICAgICAgICBsc2hpZnRwIDMsIHdzMQotICAgICAgICAgICAgYWRkcCBtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCwgd3MxCi0gICAgICAgICAgICBzdWJwIGNmciwgd3MxLCBzcAorICAg
ICAgICAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCiAKICAgICAgICAgICAgICMg
V2UgbmVlZCB0byBzZXQgUEMgdG8gbG9hZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbnN0cnVjdGlv
biBzdHJlYW0sIGJ1dCB3ZQogICAgICAgICAgICAgIyBuZWVkIHRvIHByZXNlcnZlIGl0cyBjdXJy
ZW50IHZhbHVlIHNpbmNlIGl0IG1pZ2h0IGNvbnRhaW4gYSByZXR1cm4gdmFsdWUKQEAgLTgzNiwx
MSArODQ0LDExIEBAIG1hY3JvIHNsb3dQYXRoRm9yV2FzbUNhbGwoY3R4LCBzbG93UGF0aCwgc3Rv
cmVXYXNtSW5zdGFuY2UpCiAgICAgICAgICAgICB3Z2V0dShjdHgsIG1fbnVtYmVyT2ZTdGFja0Fy
Z3MsIHdzMCkKICAgICAgICAgICAgIG1vdmUgbWVtb3J5QmFzZSwgUEMKICAgICAgICAgICAgIGZv
ckVhY2hBcmd1bWVudEdQUihtYWNybyAob2Zmc2V0LCBncHIpCi0gICAgICAgICAgICAgICAgc3Rv
cmVxIGdwciwgQ2FsbEZyYW1lSGVhZGVyU2l6ZSArIG9mZnNldFt3czEsIHdzMCwgOF0KKyAgICAg
ICAgICAgICAgICBzdG9yZXEgZ3ByLCBDYWxsRnJhbWVIZWFkZXJTaXplICsgOCArIG9mZnNldFt3
czEsIHdzMCwgOF0KICAgICAgICAgICAgIGVuZCkKIAogICAgICAgICAgICAgZm9yRWFjaEFyZ3Vt
ZW50RlBSKG1hY3JvIChvZmZzZXQsIGZwcikKLSAgICAgICAgICAgICAgICBzdG9yZWQgZnByLCBD
YWxsRnJhbWVIZWFkZXJTaXplICsgb2Zmc2V0W3dzMSwgd3MwLCA4XQorICAgICAgICAgICAgICAg
IHN0b3JlZCBmcHIsIENhbGxGcmFtZUhlYWRlclNpemUgKyA4ICsgb2Zmc2V0W3dzMSwgd3MwLCA4
XQogICAgICAgICAgICAgZW5kKQogCiAgICAgICAgICAgICBsb2FkaSBBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdLCBQQwpAQCAtMjgwNCwzICsyODEyLDExNCBAQCB3
YXNtT3AoYXRvbWljX2ZlbmNlLCBXYXNtRHJvcEtlZXAsIG1hY3JvKGN0eCkKICAgICBmZW5jZQog
ICAgIGRpc3BhdGNoKGN0eCkKIGVuZCkKKword2FzbU9wKHRocm93LCBXYXNtVGhyb3csIG1hY3Jv
KGN0eCkKKyAgICBsb2FkcCBXYXNtOjpJbnN0YW5jZTo6bV9wb2ludGVyVG9Ub3BFbnRyeUZyYW1l
W3dhc21JbnN0YW5jZV0sIHQ1CisgICAgbG9hZHAgW3Q1XSwgdDUKKyAgICBjb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0NSkKKworICAgIGNhbGxXYXNtU2xvd1Bh
dGgoX3Nsb3dfcGF0aF93YXNtX3Rocm93KQorICAgIGp1bXBUb0V4Y2VwdGlvbigpCitlbmQpCisK
K3dhc21PcChyZXRocm93LCBXYXNtUmV0aHJvdywgbWFjcm8oY3R4KQorICAgIGNhbGxXYXNtU2xv
d1BhdGgoX3Nsb3dfcGF0aF93YXNtX3JldGhyb3cpCisgICAganVtcFRvRXhjZXB0aW9uKCkKK2Vu
ZCkKKworbWFjcm8gY2F0Y2hJbXBsKGN0eCwgc3RvcmVXYXNtSW5zdGFuY2UpCisgICAgbG9hZHAg
Q2FsbGVlW2Nmcl0sIHQzCisgICAgY29udmVydENhbGxlZVRvVk0odDMpCisgICAgcmVzdG9yZUNh
bGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHQzLCB0MCkKKworICAg
IGxvYWRwIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hbdDNdLCB3czEKKyAgICBzdG9yZXAgMCwgVk06
OmNhbGxlZUZvcldhc21DYXRjaFt0M10KKyAgICBzdG9yZXAgd3MxLCBDYWxsZWVbY2ZyXQorCisg
ICAgbG9hZHAgVk06OmNhbGxGcmFtZUZvckNhdGNoW3QzXSwgY2ZyCisgICAgc3RvcmVwIDAsIFZN
OjpjYWxsRnJhbWVGb3JDYXRjaFt0M10KKworICAgIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNh
bGwoKQorCisgICAgbG9hZHAgVGhpc0FyZ3VtZW50T2Zmc2V0W2Nmcl0sIHdhc21JbnN0YW5jZQor
ICAgIGxvYWRwIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6bV9pbnN0YW5jZVt3YXNtSW5zdGFuY2Vd
LCB3YXNtSW5zdGFuY2UKKyAgICBzdG9yZVdhc21JbnN0YW5jZSh3YXNtSW5zdGFuY2UpCisgICAg
cmVsb2FkTWVtb3J5UmVnaXN0ZXJzRnJvbUluc3RhbmNlKHdhc21JbnN0YW5jZSwgd3MwLCB3czEp
CisKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKKyAgICBsb2FkcCBXYXNtOjpGdW5jdGlv
bkNvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyW1BCXSwgUEIKKyAgICBsb2FkcCBW
TTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93W3QzXSwgUEMKKyAgICBzdWJwIFBCLCBQQwor
CisgICAgY2FsbFdhc21TbG93UGF0aChfc2xvd19wYXRoX3dhc21fcmV0cmlldmVfYW5kX2NsZWFy
X2V4Y2VwdGlvbikKKyAgICBtb3ZlIHIxLCB0MQorCisgICAgd2dldHUoY3R4LCBtX3N0YXJ0T2Zm
c2V0LCB0MikKKyAgICB3Z2V0dShjdHgsIG1fYXJndW1lbnRDb3VudCwgdDMpCisKKyAgICBsc2hp
ZnRpIDMsIHQyCisgICAgc3VicCBjZnIsIHQyLCB0MgorCisuY29weUxvb3A6CisgICAgYnRpeiB0
MywgLmRvbmUKKyAgICBsb2FkcSBbdDFdLCB0NgorICAgIHN0b3JlcSB0NiwgW3QyXQorICAgIHN1
YmkgMSwgdDMKKyAgICAjIEZJWE1FOiBVc2UgYXJtIHN0b3JlLWFkZC9zdWIgaW5zdHJ1Y3Rpb25z
IGluIHdhc20gTExJbnQgY2F0Y2gKKyAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzEyMTAKKyAgICBzdWJwIDgsIHQyCisgICAgYWRkcCA4LCB0MQorICAgIGpt
cCAuY29weUxvb3AKKworLmRvbmU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorCisgICAgZGlzcGF0
Y2goY3R4KQorZW5kCisKK2NvbW1vbldhc21PcCh3YXNtX2NhdGNoLCBXYXNtQ2F0Y2gsIG1hY3Jv
KCkgZW5kLCBtYWNybyhjdHgpCisgICAgY2F0Y2hJbXBsKGN0eCwgc3RvcmVXYXNtSW5zdGFuY2VU
b1RMUykKK2VuZCkKKworY29tbW9uV2FzbU9wKHdhc21fY2F0Y2hfbm9fdGxzLCBXYXNtQ2F0Y2gs
IG1hY3JvKCkgZW5kLCBtYWNybyhjdHgpCisgICAgY2F0Y2hJbXBsKGN0eCwgbWFjcm8oaW5zdGFu
Y2UpIGVuZCkKK2VuZCkKKworbWFjcm8gY2F0Y2hBbGxJbXBsKGN0eCwgc3RvcmVXYXNtSW5zdGFu
Y2UpCisgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQzCisgICAgY29udmVydENhbGxlZVRvVk0odDMp
CisgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHQzLCB0MCkKKworICAgIGxvYWRwIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hbdDNdLCB3czEKKyAg
ICBzdG9yZXAgMCwgVk06OmNhbGxlZUZvcldhc21DYXRjaFt0M10KKyAgICBzdG9yZXAgd3MxLCBD
YWxsZWVbY2ZyXQorCisgICAgbG9hZHAgVk06OmNhbGxGcmFtZUZvckNhdGNoW3QzXSwgY2ZyCisg
ICAgc3RvcmVwIDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaFt0M10KKworICAgIHJlc3RvcmVTdGFj
a1BvaW50ZXJBZnRlckNhbGwoKQorCisgICAgbG9hZHAgVGhpc0FyZ3VtZW50T2Zmc2V0W2Nmcl0s
IHdhc21JbnN0YW5jZQorICAgIGxvYWRwIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6bV9pbnN0YW5j
ZVt3YXNtSW5zdGFuY2VdLCB3YXNtSW5zdGFuY2UKKyAgICBzdG9yZVdhc21JbnN0YW5jZSh3YXNt
SW5zdGFuY2UpCisgICAgcmVsb2FkTWVtb3J5UmVnaXN0ZXJzRnJvbUluc3RhbmNlKHdhc21JbnN0
YW5jZSwgd3MwLCB3czEpCisKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKKyAgICBsb2Fk
cCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyW1BCXSwg
UEIKKyAgICBsb2FkcCBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93W3QzXSwgUEMKKyAg
ICBzdWJwIFBCLCBQQworCisgICAgY2FsbFdhc21TbG93UGF0aChfc2xvd19wYXRoX3dhc21fcmV0
cmlldmVfYW5kX2NsZWFyX2V4Y2VwdGlvbikKKworICAgIHRyYWNlRXhlY3V0aW9uKCkKKworICAg
IGRpc3BhdGNoKGN0eCkKK2VuZAorCitjb21tb25XYXNtT3Aod2FzbV9jYXRjaF9hbGwsIFdhc21D
YXRjaEFsbCwgbWFjcm8oKSBlbmQsIG1hY3JvKGN0eCkKKyAgICBjYXRjaEFsbEltcGwoY3R4LCBz
dG9yZVdhc21JbnN0YW5jZVRvVExTKQorZW5kKQorCitjb21tb25XYXNtT3Aod2FzbV9jYXRjaF9h
bGxfbm9fdGxzLCBXYXNtQ2F0Y2hBbGwsIG1hY3JvKCkgZW5kLCBtYWNybyhjdHgpCisgICAgY2F0
Y2hBbGxJbXBsKGN0eCwgbWFjcm8oaW5zdGFuY2UpIGVuZCkKK2VuZCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKaW5kZXggZGZiOTMxODhjMDhm
ZDhkYmFkM2JmN2Y4NWUxODUyYjUyNDA2YjVkNi4uYjZjYTViYzQyMzZiOWQ1NjVmNThjODZhOTcw
Y2EzNzY1NTkwOTUwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJy
b3JJbnN0YW5jZS5jcHAKQEAgLTQwLDYgKzQwLDkgQEAgRXJyb3JJbnN0YW5jZTo6RXJyb3JJbnN0
YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFcnJvclR5cGUgZXJyb3JUeXBlKQog
ICAgICwgbV9vdXRPZk1lbW9yeUVycm9yKGZhbHNlKQogICAgICwgbV9lcnJvckluZm9NYXRlcmlh
bGl6ZWQoZmFsc2UpCiAgICAgLCBtX25hdGl2ZUdldHRlclR5cGVFcnJvcihmYWxzZSkKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisgICAgLCBtX2NhdGNoYWJsZUZyb21XYXNtKHRydWUpCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgKaW5kZXggN2QyZTY0MzI2YTgxZGI2Yzc3MGE0NjNk
OGY5NjM3NjczZGZiMjkzYi4uZWZmNWU5ODcyNGI5MDYyMWIxODIyMDI5YTA5NTA2YjljNzk5ZTFm
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5j
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaApA
QCAtODAsNiArODAsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmF0aXZlR2V0dGVyVHlwZUVy
cm9yKCkgeyBtX25hdGl2ZUdldHRlclR5cGVFcnJvciA9IHRydWU7IH0KICAgICBib29sIGlzTmF0
aXZlR2V0dGVyVHlwZUVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVHZXR0ZXJUeXBlRXJy
b3I7IH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICB2b2lkIHNldENhdGNoYWJsZUZy
b21XYXNtKGJvb2wgZmxhZykgeyBtX2NhdGNoYWJsZUZyb21XYXNtID0gZmxhZzsgfQorICAgIGJv
b2wgaXNDYXRjaGFibGVGcm9tV2FzbSgpIGNvbnN0IHsgcmV0dXJuIG1fY2F0Y2hhYmxlRnJvbVdh
c207IH0KKyNlbmRpZgorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNhbml0aXplZFRv
U3RyaW5nKEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNh
bml0aXplZE1lc3NhZ2VTdHJpbmcoSlNHbG9iYWxPYmplY3QqKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBTdHJpbmcgc2FuaXRpemVkTmFtZVN0cmluZyhKU0dsb2JhbE9iamVjdCopOwpAQCAtMTE2
LDYgKzEyMSw5IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fb3V0T2ZNZW1vcnlFcnJvciA6IDE7
CiAgICAgYm9vbCBtX2Vycm9ySW5mb01hdGVyaWFsaXplZCA6IDE7CiAgICAgYm9vbCBtX25hdGl2
ZUdldHRlclR5cGVFcnJvciA6IDE7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGJvb2wg
bV9jYXRjaGFibGVGcm9tV2FzbSA6IDE7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CmluZGV4IDI5N2ZjZDY5OGZmYmE5NGI3NzI2ZGU2N2QxOWIyNDI1OTcwM2EzMmIuLjMxOWU0YjNk
OGFiMTgzMDA2MGYyMjU3NjFhMTkyYmNjYjgwNDM3ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTE1Myw2ICsxNTMsNyBAQAog
I2luY2x1ZGUgIkpTV2Vha1NldC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHkuaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlHbG9iYWwuaCIKICNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yLmgiCkBAIC0xNjAsNiArMTYxLDcgQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxl
LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNs
dWRlICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxhenlDbGFzc1N0cnVjdHVyZUlubGluZXMu
aCIKICNpbmNsdWRlICJMYXp5UHJvcGVydHlJbmxpbmVzLmgiCkBAIC0yMjAsNiArMjIyLDggQEAK
ICNpbmNsdWRlICJXZWFrU2V0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGlsZUVycm9y
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5o
IgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAi
V2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5R2xvYmFsQ29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZS5oIgpAQCAtMjM2
LDYgKzI0MCw4IEBACiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUu
aCIKICNpbmNsdWRlICJXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJX
ZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWdDb25z
dHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgiCiAjaW5jbHVk
ZSA8d3RmL1JhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4
IDk2MWMyNDdlOWE3OTJhMWFmZTZjOWM5ODk0MDc2ZjE0ZjcwODJkZWEuLjFiZGNjNGRlNzRkMDky
NGQzOWM4NGY5NTI1YzVlMGIzZTZhZjQxMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMTY5LDE0ICsxNjksMTYgQEAgY29uc3RleHBy
IGJvb2wgdHlwZUV4cG9zZWRCeURlZmF1bHQgPSB0cnVlOwogCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogI2RlZmluZSBGT1JfRUFDSF9XRUJBU1NFTUJMWV9DT05TVFJVQ1RPUl9UWVBFKG1hY3Jv
KSBcCi0gICAgbWFjcm8oV2ViQXNzZW1ibHlDb21waWxlRXJyb3IsIHdlYkFzc2VtYmx5Q29tcGls
ZUVycm9yLCB3ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgRXJyb3JJbnN0YW5jZSwgICAgICAgICAg
ICAgQ29tcGlsZUVycm9yLCBlcnJvciwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKKyAgICBtYWNy
byhXZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgd2ViQXNzZW1ibHlDb21waWxlRXJyb3IsIHdlYkFz
c2VtYmx5Q29tcGlsZUVycm9yLCBFcnJvckluc3RhbmNlLCAgICAgICAgICAgICBDb21waWxlRXJy
b3IsIGVycm9yLCAgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKKyAgICBtYWNybyhXZWJBc3NlbWJs
eUV4Y2VwdGlvbiwgICAgd2ViQXNzZW1ibHlFeGNlcHRpb24sICAgIHdlYkFzc2VtYmx5RXhjZXB0
aW9uLCAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLCAgICBFeGNlcHRpb24sICAgIG9iamVjdCwg
dHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKICAgICBtYWNybyhXZWJBc3NlbWJseUdsb2JhbCwgICAg
ICAgd2ViQXNzZW1ibHlHbG9iYWwsICAgICAgIHdlYkFzc2VtYmx5R2xvYmFsLCAgICAgICBKU1dl
YkFzc2VtYmx5R2xvYmFsLCAgICAgICBHbG9iYWwsICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRC
eURlZmF1bHQpIFwKICAgICBtYWNybyhXZWJBc3NlbWJseUluc3RhbmNlLCAgICAgd2ViQXNzZW1i
bHlJbnN0YW5jZSwgICAgIHdlYkFzc2VtYmx5SW5zdGFuY2UsICAgICBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UsICAgICBJbnN0YW5jZSwgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwK
LSAgICBtYWNybyhXZWJBc3NlbWJseUxpbmtFcnJvciwgICAgd2ViQXNzZW1ibHlMaW5rRXJyb3Is
ICAgIHdlYkFzc2VtYmx5TGlua0Vycm9yLCAgICBFcnJvckluc3RhbmNlLCAgICAgICAgICAgICBM
aW5rRXJyb3IsICAgIGVycm9yLCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAorICAgIG1hY3JvKFdl
YkFzc2VtYmx5TGlua0Vycm9yLCAgICB3ZWJBc3NlbWJseUxpbmtFcnJvciwgICAgd2ViQXNzZW1i
bHlMaW5rRXJyb3IsICAgIEVycm9ySW5zdGFuY2UsICAgICAgICAgICAgIExpbmtFcnJvciwgICAg
ZXJyb3IsICB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAogICAgIG1hY3JvKFdlYkFzc2VtYmx5TWVt
b3J5LCAgICAgICB3ZWJBc3NlbWJseU1lbW9yeSwgICAgICAgd2ViQXNzZW1ibHlNZW1vcnksICAg
ICAgIEpTV2ViQXNzZW1ibHlNZW1vcnksICAgICAgIE1lbW9yeSwgICAgICAgb2JqZWN0LCB0eXBl
RXhwb3NlZEJ5RGVmYXVsdCkgXAogICAgIG1hY3JvKFdlYkFzc2VtYmx5TW9kdWxlLCAgICAgICB3
ZWJBc3NlbWJseU1vZHVsZSwgICAgICAgd2ViQXNzZW1ibHlNb2R1bGUsICAgICAgIEpTV2ViQXNz
ZW1ibHlNb2R1bGUsICAgICAgIE1vZHVsZSwgICAgICAgb2JqZWN0LCB0eXBlRXhwb3NlZEJ5RGVm
YXVsdCkgXAotICAgIG1hY3JvKFdlYkFzc2VtYmx5UnVudGltZUVycm9yLCB3ZWJBc3NlbWJseVJ1
bnRpbWVFcnJvciwgd2ViQXNzZW1ibHlSdW50aW1lRXJyb3IsIEVycm9ySW5zdGFuY2UsICAgICAg
ICAgICAgIFJ1bnRpbWVFcnJvciwgZXJyb3IsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCi0gICAg
bWFjcm8oV2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIHdlYkFzc2VtYmx5VGFibGUsICAgICAgICB3
ZWJBc3NlbWJseVRhYmxlLCAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlLCAgICAgICAgVGFibGUs
ICAgICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KQorICAgIG1hY3JvKFdlYkFzc2Vt
Ymx5UnVudGltZUVycm9yLCB3ZWJBc3NlbWJseVJ1bnRpbWVFcnJvciwgd2ViQXNzZW1ibHlSdW50
aW1lRXJyb3IsIEVycm9ySW5zdGFuY2UsICAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgZXJyb3Is
ICB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAorICAgIG1hY3JvKFdlYkFzc2VtYmx5VGFibGUsICAg
ICAgICB3ZWJBc3NlbWJseVRhYmxlLCAgICAgICAgd2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIEpT
V2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIFRhYmxlLCAgICAgICAgb2JqZWN0LCB0eXBlRXhwb3Nl
ZEJ5RGVmYXVsdCkgXAorICAgIG1hY3JvKFdlYkFzc2VtYmx5VGFnLCAgICAgICAgICB3ZWJBc3Nl
bWJseVRhZywgICAgICAgICAgd2ViQXNzZW1ibHlUYWcsICAgICAgICAgIEpTV2ViQXNzZW1ibHlU
YWcsICAgICAgICAgIFRhZywgICAgICAgICAgb2JqZWN0LCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkg
CiAjZWxzZQogI2RlZmluZSBGT1JfRUFDSF9XRUJBU1NFTUJMWV9DT05TVFJVQ1RPUl9UWVBFKG1h
Y3JvKQogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oCmluZGV4IDU0MDFmZjM4MzFkODY1MDcxNTViMTkzMjRi
ZTM5N2ZmYmQzM2Q5MzQuLmUwNzgzM2Y0N2FiYzFhNGIwOTI0MjE1YzU3NTdiZjZlYmRlNTY0NmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaApAQCAtNTQz
LDYgKzU0Myw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihC
b29sLCB1c2VUZW1wb3JhbCwgZmFsc2UsIE5vcm1hbCwgIkV4cG9zZSB0aGUgVGVtcG9yYWwgb2Jq
ZWN0LiIpIFwKICAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5VGhyZWFkaW5nLCB0cnVlLCBOb3Jt
YWwsICJBbGxvdyBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgd2FzbSB0aHJlYWRpbmcgc3BlYy4iKSBc
CiAgICAgdihCb29sLCB1c2VXZWJBc3NlbWJseVR5cGVkRnVuY3Rpb25SZWZlcmVuY2VzLCBmYWxz
ZSwgTm9ybWFsLCAiQWxsb3cgZnVuY3Rpb24gdHlwZXMgZnJvbSB0aGUgd2FzbSB0eXBlZCBmdW5j
dGlvbiByZWZlcmVuY2VzIHNwZWMuIikgXAorICAgIHYoQm9vbCwgdXNlV2ViQXNzZW1ibHlFeGNl
cHRpb25zLCB0cnVlLCBOb3JtYWwsICJBbGxvdyB0aGUgbmV3IHNlY3Rpb24gYW5kIGluc3RydWN0
aW9ucyBmcm9tIHRoZSB3YXNtIGV4Y2VwdGlvbiBoYW5kbGluZyBzcGVjLiIpIFwKIAogCiBlbnVt
IE9wdGlvbkVxdWl2YWxlbmNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRl
eCA5OTZhMDZkYWFiYTgyY2NlZmI0M2RmM2Y2NWYxMzFlNmZkZTZlZTA3Li4zOGU5NTEyOWJhOWYw
MjExMGExYzQzZTA1MWM0YWE2NzhjNmZkMGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCkBAIC0xMjksMTEgKzEyOSwxMyBAQAogI2luY2x1ZGUgIkpTV2Vha09iamVjdFJlZi5o
IgogI2luY2x1ZGUgIkpTV2Vha1NldC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUdsb2JhbC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
TW9kdWxlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCisjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseVRhZy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTExJ
bnREYXRhLmgiCiAjaW5jbHVkZSAiTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCIKQEAgLTMzNCw2
ICszMzYsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUsIFdURjo6
UnVuTG9vcCogcnVuTG9vcCwgYm9vbCogc3VjY2VzcykKICAgICAsIGludGxTZWdtZW50c0hlYXBD
ZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxJbnRsU2VnbWVudHM+KCkpCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogICAgICwgd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUo
SXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4oKSkKKyAgICAs
IHdlYkFzc2VtYmx5RXhjZXB0aW9uSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRl
PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24+KCkpCiAgICAgLCB3ZWJBc3NlbWJseUZ1bmN0aW9uSGVh
cENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPFdlYkFzc2VtYmx5RnVuY3Rpb24+KCkp
CiAgICAgLCB3ZWJBc3NlbWJseUdsb2JhbEhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNy
ZWF0ZTxKU1dlYkFzc2VtYmx5R2xvYmFsPigpKQogICAgICwgd2ViQXNzZW1ibHlJbnN0YW5jZUhl
YXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+
KCkpCkBAIC0zNDEsNiArMzQ0LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhl
YXBUeXBlLCBXVEY6OlJ1bkxvb3AqIHJ1bkxvb3AsIGJvb2wqIHN1Y2Nlc3MpCiAgICAgLCB3ZWJB
c3NlbWJseU1vZHVsZUhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFz
c2VtYmx5TW9kdWxlPigpKQogICAgICwgd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRIZWFwQ2VsbFR5
cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ+KCkpCiAg
ICAgLCB3ZWJBc3NlbWJseVRhYmxlSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRl
PEpTV2ViQXNzZW1ibHlUYWJsZT4oKSkKKyAgICAsIHdlYkFzc2VtYmx5VGFnSGVhcENlbGxUeXBl
KElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEpTV2ViQXNzZW1ibHlUYWc+KCkpCiAjZW5kaWYKICAg
ICAsIHByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIlByaW1pdGl2ZSBHaWdhY2FnZSBB
dXhpbGlhcnkiLCBoZWFwLCBhdXhpbGlhcnlIZWFwQ2VsbFR5cGUuZ2V0KCksIHByaW1pdGl2ZUdp
Z2FjYWdlQWxsb2NhdG9yLmdldCgpKSAvLyBIYXNoOjB4M2U3Y2Q3NjIKICAgICAsIGpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlKCJKU1ZhbHVlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhlYXAs
IGF1eGlsaWFyeUhlYXBDZWxsVHlwZS5nZXQoKSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yLmdl
dCgpKSAvLyBIYXNoOjB4MjQxZTk0NgpAQCAtMTYyOSw2ICsxNjMzLDcgQEAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50c1NwYWNlLCBpbnRsU2VnbWVu
dHNIZWFwQ2VsbFQKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1coanNUb1dhc21JQ0NhbGxlZVNwYWNlLCBjZWxsSGVhcENlbGxU
eXBlLmdldCgpLCBKU1RvV2FzbUlDQ2FsbGVlKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UsIHdlYkFzc2VtYmx5Q29kZUJs
b2NrSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSAvLyBIYXNoOjB4
OWFkOTk1Y2QKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3Nl
bWJseUV4Y2VwdGlvblNwYWNlLCB3ZWJBc3NlbWJseUV4Y2VwdGlvbkhlYXBDZWxsVHlwZS5nZXQo
KSwgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbikKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyh3ZWJBc3NlbWJseUZ1bmN0aW9uU3BhY2UsIHdlYkFzc2VtYmx5RnVuY3Rpb25I
ZWFwQ2VsbFR5cGUuZ2V0KCksIFdlYkFzc2VtYmx5RnVuY3Rpb24pIC8vIEhhc2g6MHg4YjdjMzJk
YgogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5R2xv
YmFsU3BhY2UsIHdlYkFzc2VtYmx5R2xvYmFsSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2Vt
Ymx5R2xvYmFsKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFz
c2VtYmx5SW5zdGFuY2VTcGFjZSwgd2ViQXNzZW1ibHlJbnN0YW5jZUhlYXBDZWxsVHlwZS5nZXQo
KSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKQpAQCAtMTYzNiw2ICsxNjQxLDcgQEAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5TWVtb3J5U3BhY2UsIHdl
YkFzc2VtYmx5TWVtb3IKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3
ZWJBc3NlbWJseU1vZHVsZVNwYWNlLCB3ZWJBc3NlbWJseU1vZHVsZUhlYXBDZWxsVHlwZS5nZXQo
KSwgSlNXZWJBc3NlbWJseU1vZHVsZSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyh3ZWJBc3NlbWJseU1vZHVsZVJlY29yZFNwYWNlLCB3ZWJBc3NlbWJseU1vZHVsZVJl
Y29yZEhlYXBDZWxsVHlwZS5nZXQoKSwgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQpCiBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlUYWJsZVNwYWNlLCB3
ZWJBc3NlbWJseVRhYmxlSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5VGFibGUpCitE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlUYWdTcGFj
ZSwgd2ViQXNzZW1ibHlUYWdIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlUYWcpCiBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb25TcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24pIC8vIEhhc2g6MHhkNGE1ZmYwMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCmluZGV4IDdhNThiMjc5ZTY3MGE4NDAzZDFmMzk0MTIzNTdkNWU3NzExM2Y1Nzgu
LmFhODliMjhhZGUyZjI1YjZjYzg0NDBkNjE0YmM5NDdhZTNiYTRmNzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaApAQCAtMjksNiArMjksNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJDYWxsRGF0YS5oIgorI2luY2x1ZGUgIkNhbGxlZUJpdHMuaCIKICNpbmNsdWRlICJDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiQ29tcGxldGVTdWJzcGFjZS5oIgogI2lu
Y2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKQEAgLTQ1MCw2ICs0NTEsNyBAQCBwdWJsaWM6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gaW50bFNlZ21lbnRzSGVhcENlbGxU
eXBlOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVh
cENlbGxUeXBlPiB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUV4Y2VwdGlvbkhlYXBDZWxsVHlw
ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUZ1bmN0
aW9uSGVhcENlbGxUeXBlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdl
YkFzc2VtYmx5R2xvYmFsSGVhcENlbGxUeXBlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFw
Q2VsbFR5cGU+IHdlYkFzc2VtYmx5SW5zdGFuY2VIZWFwQ2VsbFR5cGU7CkBAIC00NTcsNiArNDU5
LDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFz
c2VtYmx5TW9kdWxlSGVhcENlbGxUeXBlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2Vs
bFR5cGU+IHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkSGVhcENlbGxUeXBlOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5VGFibGVIZWFwQ2VsbFR5cGU7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlUYWdIZWFwQ2Vs
bFR5cGU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCkBAIC02MjYsNiArNjI5LDcgQEAgcHVi
bGljOgogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKGpzVG9XYXNtSUNDYWxsZWVTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UpCisgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUV4Y2VwdGlvblNwYWNlKQog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlGdW5jdGlv
blNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1i
bHlHbG9iYWxTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdl
YkFzc2VtYmx5SW5zdGFuY2VTcGFjZSkKQEAgLTYzMyw2ICs2MzcsNyBAQCBwdWJsaWM6CiAgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseU1vZHVsZVNwYWNl
KQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmRTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdl
YkFzc2VtYmx5VGFibGVTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHdlYkFzc2VtYmx5VGFnU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUih3ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNlKQogI2VuZGlmCiAKQEAgLTg5
Niw2ICs5MDEsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZN
LCBjYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgfQogCisgICAgc3RhdGljIHB0cmRpZmZfdCBjYWxs
ZWVGb3JXYXNtQ2F0Y2hPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihWTSwgY2FsbGVlRm9yV2FzbUNhdGNoKTsKKyAgICB9CisKICAgICBzdGF0aWMgcHRyZGlm
Zl90IHRvcEVudHJ5RnJhbWVPZmZzZXQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihWTSwgdG9wRW50cnlGcmFtZSk7CkBAIC05OTAsNiArMTAwMCw3IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCB2YXJhcmdzTGVuZ3RoOwogICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1l
UmV0dXJuVmFsdWU7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWVGb3JDYXRjaDsKKyAgICBDYWxs
ZWVCaXRzIGNhbGxlZUZvcldhc21DYXRjaDsKICAgICB2b2lkKiB0YXJnZXRNYWNoaW5lUENGb3JU
aHJvdzsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogdGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93
OwogICAgIHVpbnQzMl90IG9zckV4aXRJbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCmluZGV4IGY5YzI5NDYwMDYxODczZDAwNDQ5
OGE4MDA0NDY2MmNlMjE3ZjZiZTQuLjc5MjgyYjc3ZTc4NjE2MWQ1ZGYwOGE2ZGY4MWE0MmZlZTEx
ODM5ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdl
bmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2Vu
ZXJhdG9yLmNwcApAQCAtMTQ3LDcgKzE0NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAg
ICAgICBzdGF0aWMgYm9vbCBpc0lmKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVy
biBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWY7IH0KKyAgICAgICAgc3RhdGlj
IGJvb2wgaXNUcnkoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wu
YmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUcnk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXND
YXRjaChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5
cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQW55Q2F0
Y2goY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBl
KCkgPT0gQmxvY2tUeXBlOjpDYXRjaDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc1RvcExldmVs
KGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgp
ID09IEJsb2NrVHlwZTo6VG9wTGV2ZWw7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNMb29wKGNv
bnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09
IEJsb2NrVHlwZTo6TG9vcDsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0Jsb2NrKGNvbnN0IENv
bnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2Nr
VHlwZTo6QmxvY2s7IH0KIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKICAgICAgICAgewpAQCAtMTY0LDYgKzE2OSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBj
YXNlIEJsb2NrVHlwZTo6VG9wTGV2ZWw6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJUb3BM
ZXZlbDogIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJsb2Nr
VHlwZTo6VHJ5OgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVHJ5OiAiKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpDYXRjaDoKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIkNhdGNoOiAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5wcmludCgiQ29udGludWF0aW9uOiAiLCAq
Y29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKICAgICAgICAgICAgIGlmIChzcGVjaWFsKQpA
QCAtMzE0LDYgKzMyNSwxNiBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJik7CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERh
dGEmKTsKIAorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRyeShCbG9j
a1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBT
dGFjayYgbmV3U3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBTdGFjayYs
IENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGwoU3RhY2smLCBDb250cm9sVHlw
ZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsVG9V
bnJlYWNoYWJsZShDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29u
dHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBTdGFjayYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJik7CisKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25z
dCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNv
bnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxD
b250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0
IFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwpAQCAtMjk4Miw2ICszMDAzLDYwIEBAIGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJiBkYXRhKSAtPiBQ
YXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAorLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBXYXNtIGV4Y2VwdGlvbnMgaW4gdGhlIEFpciBnZW5lcmF0b3IKKy8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyMTEKK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smLCBDb250cm9sVHlwZSYsIFN0YWNrJikgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZENhdGNoKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xU
eXBlJiwgUmVzdWx0TGlzdCYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCwgY29uc3QgU2lnbmF0dXJlJiwgQ29u
dHJvbFR5cGUmLCBSZXN1bHRMaXN0JikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkQ2F0Y2hBbGwoU3RhY2smLCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07
Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250
cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZERl
bGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUm
LCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiwgU3RhY2smKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVU5VU0VEX1BBUkFNKGV4Y2VwdGlv
bkluZGV4KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRS
ZXRocm93KHVuc2lnbmVkLCBDb250cm9sVHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXR1cm4geyB9OworfQorCiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29u
dHJvbERhdGEmIGRhdGEsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICBDYWxsSW5mb3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKCpkYXRhLnNpZ25hdHVyZSgpLCBDYWxsUm9sZTo6
Q2FsbGVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcAppbmRleCAwODFjYzJiMjU1ZWZkOTU1NzFjM2U1OTExZTQzNzgwYjc5NGNjM2EwLi5m
ZTZiMzhmM2NjM2MyYmQ0MWU1MDdiZmMzMTJlNGIwNjViOTg1MzZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC00OCw2ICs0OCw4
IEBACiAjaW5jbHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5j
bHVkZSAiUHJvYmVDb250ZXh0LmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHRJbmxpbmVzLmgiCkBA
IC04MywxOCArODUsMzMgQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsK
IH0KIH0KIAorY2xhc3MgQjNJUkdlbmVyYXRvcjsKK3N0cnVjdCBQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlIHsKKyAgICB2b2lkIGdlbmVyYXRlKENDYWxsSGVscGVycyYsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmLCBCM0lSR2VuZXJhdG9yKikgY29uc3Q7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIHNfaW52YWxpZENhbGxTaXRlSW5kZXggPSAgc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworCisgICAgdW5zaWduZWQgbV9jYWxsU2l0ZUlu
ZGV4IHtzX2ludmFsaWRDYWxsU2l0ZUluZGV4IH07CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9
OworCiBjbGFzcyBCM0lSR2VuZXJhdG9yIHsKIHB1YmxpYzoKLSAgICB1c2luZyBFeHByZXNzaW9u
VHlwZSA9IFZhbHVlKjsKKyAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IFZhcmlhYmxlKjsKICAg
ICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCA4PjsKIAogICAgIHN0
cnVjdCBDb250cm9sRGF0YSB7Ci0gICAgICAgIENvbnRyb2xEYXRhKFByb2NlZHVyZSYgcHJvYywg
T3JpZ2luIG9yaWdpbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBCbG9ja1R5cGUgdHlwZSwg
QmFzaWNCbG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikK
KyAgICAgICAgQ29udHJvbERhdGEoUHJvY2VkdXJlJiBwcm9jLCBPcmlnaW4gb3JpZ2luLCBCbG9j
a1NpZ25hdHVyZSBzaWduYXR1cmUsIEJsb2NrVHlwZSB0eXBlLCB1bnNpZ25lZCBzdGFja1NpemUs
IEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIp
CiAgICAgICAgICAgICA6IGNvbnRyb2xCbG9ja1R5cGUodHlwZSkKICAgICAgICAgICAgICwgbV9z
aWduYXR1cmUoc2lnbmF0dXJlKQorICAgICAgICAgICAgLCBtX3N0YWNrU2l6ZShzdGFja1NpemUp
CiAgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCiAgICAgICAgICAgICAs
IHNwZWNpYWwoc3BlY2lhbCkKICAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUgIT0g
QmxvY2tUeXBlOjpUcnkgJiYgdHlwZSAhPSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAg
IGlmICh0eXBlICE9IEJsb2NrVHlwZTo6VG9wTGV2ZWwpCisgICAgICAgICAgICAgICAgbV9zdGFj
a1NpemUgLT0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisKICAgICAgICAgICAgIGlmICh0
eXBlID09IEJsb2NrVHlwZTo6TG9vcCkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQogICAgICAgICAgICAg
ICAgICAgICBwaGlzLmFwcGVuZChwcm9jLmFkZDxWYWx1ZT4oUGhpLCB0b0IzVHlwZShzaWduYXR1
cmUtPmFyZ3VtZW50KGkpKSwgb3JpZ2luKSk7CkBAIC0xMDQsMTIgKzEyMSwzNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBDb250cm9sRGF0YShQcm9jZWR1
cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgQmxvY2tU
eXBlIHR5cGUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uLCB1
bnNpZ25lZCB0cnlTdGFydCwgdW5zaWduZWQgdHJ5RGVwdGgpCisgICAgICAgICAgICA6IGNvbnRy
b2xCbG9ja1R5cGUodHlwZSkKKyAgICAgICAgICAgICwgbV9zaWduYXR1cmUoc2lnbmF0dXJlKQor
ICAgICAgICAgICAgLCBtX3N0YWNrU2l6ZShzdGFja1NpemUpCisgICAgICAgICAgICAsIGNvbnRp
bnVhdGlvbihjb250aW51YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwobnVsbHB0cikKKyAg
ICAgICAgICAgICwgbV90cnlTdGFydCh0cnlTdGFydCkKKyAgICAgICAgICAgICwgbV90cnlEZXB0
aCh0cnlEZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHByb2MpOwor
ICAgICAgICAgICAgVU5VU0VEX1BBUkFNKG9yaWdpbik7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgICAg
ICAgICAgcGhpcy5hcHBlbmQocHJvYy5hZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJl
LT5yZXR1cm5UeXBlKGkpKSwgb3JpZ2luKSk7CisgICAgICAgIH0KKwogICAgICAgICBDb250cm9s
RGF0YSgpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBib29sIGlzSWYo
Y29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkg
PT0gQmxvY2tUeXBlOjpJZjsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250
cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5
cGU6OlRyeTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0FueUNhdGNoKGNvbnN0IENvbnRyb2xE
YXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6
Q2F0Y2g7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNUb3BMZXZlbChjb25zdCBDb250cm9sRGF0
YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRv
cExldmVsOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzTG9vcChjb25zdCBDb250cm9sRGF0YSYg
Y29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3A7
IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNCbG9jayhjb25zdCBDb250cm9sRGF0YSYgY29udHJv
bCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkJsb2NrOyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250cm9sLmJsb2NrVHlwZSgpICE9IEJsb2NrVHlw
ZTo6Q2F0Y2gpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0
dXJuIGNvbnRyb2wuY2F0Y2hLaW5kKCkgPT0gQ2F0Y2hLaW5kOjpDYXRjaDsKKyAgICAgICAgfQog
CiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICB7CkBA
IC0xMjYsNiArMTY4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpU
b3BMZXZlbDoKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIlRvcExldmVsOiAiKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpUcnk6CisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCJUcnk6ICIpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OkNhdGNoOgorICAgICAgICAgICAgICAgIG91dC5w
cmludCgiQ2F0Y2g6ICIpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgb3V0LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIs
IFNwZWNpYWw6ICIpOwogICAgICAgICAgICAgaWYgKHNwZWNpYWwpCkBAIC0xNTQsNiArMjAyLDI0
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHNwZWNpYWwgPSBudWxscHRyOwogICAgICAgICB9CiAK
KyAgICAgICAgdm9pZCBjb252ZXJ0VHJ5VG9DYXRjaCh1bnNpZ25lZCB0cnlFbmRDYWxsU2l0ZUlu
ZGV4LCBWYXJpYWJsZSogZXhjZXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
YmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUcnkpOworICAgICAgICAgICAgY29udHJvbEJsb2Nr
VHlwZSA9IEJsb2NrVHlwZTo6Q2F0Y2g7CisgICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNo
S2luZDo6Q2F0Y2g7CisgICAgICAgICAgICBtX3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7
CisgICAgICAgICAgICBtX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgY29udmVydFRyeVRvQ2F0Y2hBbGwodW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRl
eCwgVmFyaWFibGUqIGV4Y2VwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGJs
b2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VHJ5KTsKKyAgICAgICAgICAgIGNvbnRyb2xCbG9ja1R5
cGUgPSBCbG9ja1R5cGU6OkNhdGNoOworICAgICAgICAgICAgbV9jYXRjaEtpbmQgPSBDYXRjaEtp
bmQ6OkNhdGNoQWxsOworICAgICAgICAgICAgbV90cnlFbmQgPSB0cnlFbmRDYWxsU2l0ZUluZGV4
OworICAgICAgICAgICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247CisgICAgICAgIH0KKwogICAg
ICAgICBTaWduYXR1cmVBcmdDb3VudCBicmFuY2hUYXJnZXRBcml0eSgpIGNvbnN0CiAgICAgICAg
IHsKICAgICAgICAgICAgIGlmIChibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCkBAIC0x
NjksMTMgKzIzNSw1MyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUt
PnJldHVyblR5cGUoaSk7CiAgICAgICAgIH0KIAorICAgICAgICB1bnNpZ25lZCB0cnlTdGFydCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09
IEJsb2NrVHlwZTo6VHJ5IHx8IGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7
CisgICAgICAgICAgICByZXR1cm4gbV90cnlTdGFydDsKKyAgICAgICAgfQorCisgICAgICAgIHVu
c2lnbmVkIHRyeUVuZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250
cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1f
dHJ5RW5kOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgdHJ5RGVwdGgoKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5
cGU6OlRyeSB8fCBjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAg
ICAgICAgcmV0dXJuIG1fdHJ5RGVwdGg7CisgICAgICAgIH0KKworICAgICAgICBDYXRjaEtpbmQg
Y2F0Y2hLaW5kKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xC
bG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV9jYXRj
aEtpbmQ7CisgICAgICAgIH0KKworICAgICAgICBWYXJpYWJsZSogZXhjZXB0aW9uKCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tU
eXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV9leGNlcHRpb247CisgICAgICAgIH0K
KworICAgICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrU2l6
ZTsgfQorCiAgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gRklYTUU6IENvbXByZXNzIEIzSVJHZW5l
cmF0b3I6OkNvbnRyb2xEYXRhIGZpZWxkcyB1c2luZyBhbiB1bmlvbgorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjEyCiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBCM0lSR2VuZXJhdG9yOwogICAgICAgICBCbG9ja1R5cGUgY29udHJvbEJsb2NrVHlw
ZTsKICAgICAgICAgQmxvY2tTaWduYXR1cmUgbV9zaWduYXR1cmU7CisgICAgICAgIHVuc2lnbmVk
IG1fc3RhY2tTaXplOwogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb247CiAgICAgICAg
IEJhc2ljQmxvY2sqIHNwZWNpYWw7Ci0gICAgICAgIFJlc3VsdExpc3QgcGhpczsKKyAgICAgICAg
VmVjdG9yPFZhbHVlKj4gcGhpczsKKyAgICAgICAgdW5zaWduZWQgbV90cnlTdGFydDsKKyAgICAg
ICAgdW5zaWduZWQgbV90cnlFbmQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5RGVwdGg7CisgICAg
ICAgIENhdGNoS2luZCBtX2NhdGNoS2luZDsKKyAgICAgICAgVmFyaWFibGUqIG1fZXhjZXB0aW9u
OwogICAgIH07CiAKICAgICB1c2luZyBDb250cm9sVHlwZSA9IENvbnRyb2xEYXRhOwpAQCAtMjcz
LDYgKzM3OSwxNiBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsK
IAorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRyeShCbG9ja1NpZ25h
dHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYg
bmV3U3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNo
KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRy
b2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3Qg
U2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGwoU3RhY2smLCBDb250cm9sVHlwZSYpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsVG9VbnJlYWNo
YWJsZShDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5
cGUmLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBTdGFjayYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJik7CisKICAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBTdGFj
ayYgcmV0dXJuVmFsdWVzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFN0
YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9s
RGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IFN0YWNr
JiBleHByZXNzaW9uU3RhY2spOwpAQCAtMjg2LDIwICs0MDIsMzYgQEAgcHVibGljOgogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0
YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRDYWxsUmVmKGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4m
IGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIEV4cHJlc3Np
b25UeXBlIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBlbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgVmFsdWUqIGNhbGxl
ZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJl
c3VsdExpc3QmKTsKICAgICBCMzo6VmFsdWUqIGNyZWF0ZUNhbGxQYXRjaHBvaW50KEJhc2ljQmxv
Y2sqLCBPcmlnaW4sIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFBhdGNocG9pbnRWYWx1ZSopPiYgcGF0Y2hwb2lu
dEZ1bmN0b3IpOwogCiAgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRyb2xTdGFjayYsIGNvbnN0IFN0
YWNrKiBleHByZXNzaW9uU3RhY2spOwogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2Vy
PEIzSVJHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAgICAgdm9p
ZCBkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkgeyB9Ci0gICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21T
dGFjaygpIHsgfQorICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IC0tbV9zdGFja1Np
emU7IH0KIAogICAgIFZhbHVlKiBjb25zdGFudChCMzo6VHlwZSwgdWludDY0X3QgYml0cywgc3Rk
OjpvcHRpb25hbDxPcmlnaW4+ID0gc3RkOjpudWxsb3B0KTsKICAgICBWYWx1ZSogZnJhbWVQb2lu
dGVyKCk7CisgICAgdm9pZCBpbnNlcnRFbnRyeVN3aXRjaCgpOwogICAgIHZvaWQgaW5zZXJ0Q29u
c3RhbnRzKCk7CiAKICAgICBCMzo6VHlwZSB0b0IzUmVzdWx0VHlwZShCbG9ja1NpZ25hdHVyZSk7
CiAKKyAgICB2b2lkIGFkZFN0YWNrTWFwKHVuc2lnbmVkIGNhbGxTaXRlSW5kZXgsIFN0YWNrTWFw
JiYgc3RhY2ttYXApCisgICAgeworICAgICAgICBtX3N0YWNrbWFwcy5hZGQoQ2FsbFNpdGVJbmRl
eChjYWxsU2l0ZUluZGV4KSwgV1RGTW92ZShzdGFja21hcCkpOworICAgIH0KKworICAgIFN0YWNr
TWFwcyYmIHRha2VTdGFja21hcHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9z
dGFja21hcHMpOworICAgIH0KKworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIHRh
a2VFeGNlcHRpb25IYW5kbGVycygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX2V4
Y2VwdGlvbkhhbmRsZXJzKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBlbWl0RXhjZXB0
aW9uQ2hlY2soQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAKQEAgLTMwNywyOCArNDM5
LDMzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBlbWl0TG9vcFRpZXJVcENoZWNrKHVpbnQzMl90IGxv
b3BJbmRleCwgY29uc3QgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBjb25zdCBTdGFjayYgbmV3U3Rh
Y2spOwogCiAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyRm9ySlNXcmFwcGVyKCk7Ci0gICAgRXhw
cmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9p
bnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CisgICAgVmFsdWUqIGVt
aXRDaGVja0FuZFByZXBhcmVQb2ludGVyKFZhbHVlKiBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQs
IHVpbnQzMl90IHNpemVPZk9wKTsKICAgICBCMzo6S2luZCBtZW1vcnlLaW5kKEIzOjpPcGNvZGUg
bWVtb3J5T3ApOwotICAgIEV4cHJlc3Npb25UeXBlIGVtaXRMb2FkT3AoTG9hZE9wVHlwZSwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KTsKLSAgICB2b2lkIGVtaXRTdG9y
ZU9wKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2
YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBWYWx1ZSogZW1pdExvYWRPcChMb2FkT3BUeXBl
LCBWYWx1ZSogcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICB2b2lkIGVtaXRTdG9yZU9w
KFN0b3JlT3BUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUqLCB1aW50MzJfdCBvZmZzZXQpOwog
Ci0gICAgRXhwcmVzc2lvblR5cGUgc2FuaXRpemVBdG9taWNSZXN1bHQoRXh0QXRvbWljT3BUeXBl
LCBUeXBlLCBFeHByZXNzaW9uVHlwZSByZXN1bHQpOwotICAgIEV4cHJlc3Npb25UeXBlIGVtaXRB
dG9taWNMb2FkT3AoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVy
LCB1aW50MzJfdCBvZmZzZXQpOwotICAgIHZvaWQgZW1pdEF0b21pY1N0b3JlT3AoRXh0QXRvbWlj
T3BUeXBlLCBUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSwgdWludDMyX3Qgb2Zmc2V0KTsKLSAgICBFeHByZXNzaW9uVHlwZSBlbWl0QXRvbWljQmluYXJ5
Uk1XT3AoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHBy
ZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKLSAgICBFeHByZXNzaW9uVHlwZSBl
bWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0b21pY09wVHlwZSwgVHlwZSwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgZXhwZWN0ZWQsIEV4cHJlc3Npb25UeXBlIHZh
bHVlLCB1aW50MzJfdCBvZmZzZXQpOworICAgIFZhbHVlKiBzYW5pdGl6ZUF0b21pY1Jlc3VsdChF
eHRBdG9taWNPcFR5cGUsIFR5cGUsIFZhbHVlKiByZXN1bHQpOworICAgIFZhbHVlKiBlbWl0QXRv
bWljTG9hZE9wKEV4dEF0b21pY09wVHlwZSwgVHlwZSwgVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90
IG9mZnNldCk7CisgICAgdm9pZCBlbWl0QXRvbWljU3RvcmVPcChFeHRBdG9taWNPcFR5cGUsIFR5
cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSosIHVpbnQzMl90IG9mZnNldCk7CisgICAgVmFsdWUq
IGVtaXRBdG9taWNCaW5hcnlSTVdPcChFeHRBdG9taWNPcFR5cGUsIFR5cGUsIFZhbHVlKiBwb2lu
dGVyLCBWYWx1ZSosIHVpbnQzMl90IG9mZnNldCk7CisgICAgVmFsdWUqIGVtaXRBdG9taWNDb21w
YXJlRXhjaGFuZ2UoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUq
IGV4cGVjdGVkLCBWYWx1ZSosIHVpbnQzMl90IG9mZnNldCk7CiAKLSAgICB2b2lkIHVuaWZ5KGNv
bnN0IEV4cHJlc3Npb25UeXBlIHBoaSwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291cmNlKTsKLSAg
ICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IFN0YWNrJiByZXN1bHRTdGFjaywgY29u
c3QgUmVzdWx0TGlzdCYgc3RhY2spOworICAgIHZvaWQgdW5pZnkoVmFsdWUqIHBoaSwgY29uc3Qg
RXhwcmVzc2lvblR5cGUgc291cmNlKTsKKyAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNv
bnN0IFN0YWNrJiByZXN1bHRTdGFjaywgY29uc3QgQ29udHJvbERhdGEmIGJsb2NrKTsKIAotICAg
IHZvaWQgZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxl
ZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KTsKKyAgICB2b2lkIGVtaXRDaGVja3NGb3JNb2RPckRp
dihCMzo6T3Bjb2RlLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KTsKIAotICAgIGludDMyX3Qg
V0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUm
LCB1aW50MzJfdCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVw
UG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNPcHMoRXh0QXRvbWljT3BUeXBlLCBFeHByZXNzaW9u
VHlwZSwgdWludDMyX3QpOworICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9p
bnRlclBsdXNPZmZzZXQoVmFsdWUqJiwgdWludDMyX3QpOworICAgIFZhbHVlKiBXQVJOX1VOVVNF
RF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhFeHRBdG9taWNPcFR5
cGUsIFZhbHVlKiwgdWludDMyX3QpOwogCiAgICAgdm9pZCByZXN0b3JlV2FzbUNvbnRleHRJbnN0
YW5jZShQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKiwgVmFsdWUqKTsKICAgICBlbnVtIGNsYXNzIFJl
c3RvcmVDYWNoZWRTdGFja0xpbWl0IHsgTm8sIFllcyB9OwotICAgIHZvaWQgcmVzdG9yZVdlYkFz
c2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUlu
Zm9ybWF0aW9uJiwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKik7Cisg
ICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tM
aW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1ZSogaW5zdGFuY2UsIFByb2NlZHVy
ZSYsIEJhc2ljQmxvY2sqLCBib29sIHJlc3RvcmVJbnN0YW5jZSA9IHRydWUpOworCisgICAgVmFs
dWUqIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcih1bnNpZ25lZCYgaW5kZXhJbkJ1ZmZlciwgVmFsdWUq
IHBvaW50ZXIsIEIzOjpUeXBlKTsKKyAgICB2b2lkIGNvbm5lY3RDb250cm9sRW50cnkodW5zaWdu
ZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBwb2ludGVyLCBDb250cm9sRGF0YSYsIFN0YWNrJiBl
eHByZXNzaW9uU3RhY2ssIENvbnRyb2xEYXRhJiBjdXJyZW50RGF0YSwgYm9vbCBmaWxsTG9vcFBo
aXMgPSBmYWxzZSk7CisgICAgVmFsdWUqIGVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5kLCBDb250cm9s
VHlwZSYsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4ID0gMCk7CisgICAgUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoQmFzaWNCbG9jayosIFBh
dGNocG9pbnRWYWx1ZSopOwogCiAgICAgT3JpZ2luIG9yaWdpbigpOwogCkBAIC0zMzksNiArNDc2
LDYyIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dGVyTG9vcHMubGFzdCgpOwogICAg
IH0KIAorICAgIEV4cHJlc3Npb25UeXBlIHB1c2goVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHB1c2godG9CM1R5cGUodHlwZSkpOworICAgIH0KKworICAgIEV4cHJlc3Npb25UeXBl
IHB1c2goQjM6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgICsrbV9zdGFja1NpemU7CisgICAg
ICAgIGlmIChtX3N0YWNrU2l6ZSA+IG1fbWF4U3RhY2tTaXplKSB7CisgICAgICAgICAgICBtX21h
eFN0YWNrU2l6ZSA9IG1fc3RhY2tTaXplOworICAgICAgICAgICAgVmFyaWFibGUqIHZhciA9IG1f
cHJvYy5hZGRWYXJpYWJsZSh0eXBlKTsKKyAgICAgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcik7
CisgICAgICAgICAgICByZXR1cm4gdmFyOworICAgICAgICB9CisKKyAgICAgICAgVmFyaWFibGUq
IHZhciA9IG1fc3RhY2tbbV9zdGFja1NpemUgLSAxXTsKKyAgICAgICAgaWYgKHZhci0+dHlwZSgp
ID09IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gdmFyOworCisgICAgICAgIHZhciA9IG1fcHJv
Yy5hZGRWYXJpYWJsZSh0eXBlKTsKKyAgICAgICAgbV9zdGFja1ttX3N0YWNrU2l6ZSAtIDFdID0g
dmFyOworICAgICAgICByZXR1cm4gdmFyOworICAgIH0KKworICAgIEV4cHJlc3Npb25UeXBlIHB1
c2goVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgVmFyaWFibGUqIHZhciA9IHB1c2godmFs
dWUtPnR5cGUoKSk7CisgICAgICAgIHNldCh2YXIsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHZh
cjsKKyAgICB9CisKKyAgICBWYWx1ZSogZ2V0KEJhc2ljQmxvY2sqIGJsb2NrLCBWYXJpYWJsZSog
dmFyaWFibGUpCisgICAgeworICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9yaWdpbigpLCB2YXJpYWJsZSk7CisgICAgfQorCisg
ICAgVmFsdWUqIGdldChWYXJpYWJsZSogdmFyaWFibGUpCisgICAgeworICAgICAgICByZXR1cm4g
Z2V0KG1fY3VycmVudEJsb2NrLCB2YXJpYWJsZSk7CisgICAgfQorCisgICAgVmFsdWUqIHNldChC
YXNpY0Jsb2NrKiBibG9jaywgVmFyaWFibGUqIGRzdCwgVmFsdWUqIHNyYykKKyAgICB7CisgICAg
ICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNl
dCwgb3JpZ2luKCksIGRzdCwgc3JjKTsKKyAgICB9CisKKyAgICBWYWx1ZSogc2V0KFZhcmlhYmxl
KiBkc3QsIFZhbHVlKiBzcmMpCisgICAgeworICAgICAgICByZXR1cm4gc2V0KG1fY3VycmVudEJs
b2NrLCBkc3QsIHNyYyk7CisgICAgfQorCisgICAgVmFsdWUqIHNldChWYXJpYWJsZSogZHN0LCBW
YXJpYWJsZSogc3JjKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldChkc3QsIGdldChzcmMpKTsK
KyAgICB9CisKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiogbV9wYXJzZXIgeyBu
dWxscHRyIH07CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKICAgICBjb25z
dCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CkBAIC0z
NDgsMTAgKzU0MSwxMiBAQCBwcml2YXRlOgogICAgIFRpZXJVcENvdW50KiBtX3RpZXJVcCB7IG51
bGxwdHIgfTsKIAogICAgIFByb2NlZHVyZSYgbV9wcm9jOwotICAgIEJhc2ljQmxvY2sqIG1fcm9v
dEJsb2NrIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gbV9yb290QmxvY2tz
OworICAgIEJhc2ljQmxvY2sqIG1fdG9wTGV2ZWxCbG9jazsKICAgICBCYXNpY0Jsb2NrKiBtX2N1
cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8dWludDMyX3Q+IG1fb3V0ZXJMb29w
czsKICAgICBWZWN0b3I8VmFyaWFibGUqPiBtX2xvY2FsczsKKyAgICBWZWN0b3I8VmFyaWFibGUq
PiBtX3N0YWNrOwogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9u
IGluZGV4IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KICAgICB1bnNp
Z25lZCYgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwogICAgIEhhc2hNYXA8VmFsdWVLZXks
IFZhbHVlKj4gbV9jb25zdGFudFBvb2w7CkBAIC0zNjUsNiArNTYwLDcgQEAgcHJpdmF0ZToKIAog
ICAgIFZhbHVlKiBtX2luc3RhbmNlVmFsdWUgeyBudWxscHRyIH07IC8vIEFsd2F5cyB1c2UgdGhl
IGFjY2Vzc29yIGJlbG93IHRvIGVuc3VyZSB0aGUgaW5zdGFuY2UgdmFsdWUgaXMgbWF0ZXJpYWxp
emVkIHdoZW4gdXNlZC4KICAgICBib29sIG1fdXNlc0luc3RhbmNlVmFsdWUgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9oYXNDYXRjaCB7IGZhbHNlIH07CiAgICAgVmFsdWUqIGluc3RhbmNlVmFsdWUo
KQogICAgIHsKICAgICAgICAgbV91c2VzSW5zdGFuY2VWYWx1ZSA9IHRydWU7CkBAIC0zNzMsMTAg
KzU2OSwyOSBAQCBwcml2YXRlOgogCiAgICAgdWludDMyX3QgbV9tYXhOdW1KU0NhbGxBcmd1bWVu
dHMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9udW1JbXBvcnRGdW5jdGlvbnM7CisKKyAgICBDaGVj
a2VkPHVuc2lnbmVkPiBtX3RyeURlcHRoIHsgMCB9OworICAgIENoZWNrZWQ8dW5zaWduZWQ+IG1f
Y2FsbFNpdGVJbmRleCB7IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX3N0YWNrU2l6ZSB7
IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX21heFN0YWNrU2l6ZSB7IDAgfTsKKyAgICBT
dGFja01hcHMgbV9zdGFja21hcHM7CisgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1f
ZXhjZXB0aW9uSGFuZGxlcnM7CiB9OwogCit2b2lkIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6
OmdlbmVyYXRlKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMsIEIzSVJHZW5lcmF0b3IqIGdlbmVyYXRvcikgY29uc3QKK3sKKyAgICBp
ZiAobV9jYWxsU2l0ZUluZGV4ID09IHNfaW52YWxpZENhbGxTaXRlSW5kZXgpCisgICAgICAgIHJl
dHVybjsKKworICAgIFN0YWNrTWFwIHZhbHVlczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29m
ZnNldDsgaSA8IHBhcmFtcy52YWx1ZSgpLT5udW1DaGlsZHJlbigpOyArK2kpCisgICAgICAgIHZh
bHVlcy5jb25zdHJ1Y3RBbmRBcHBlbmQocGFyYW1zW2ldLCBwYXJhbXMudmFsdWUoKS0+Y2hpbGQo
aSktPnR5cGUoKSk7CisgICAgZ2VuZXJhdG9yLT5hZGRTdGFja01hcChtX2NhbGxTaXRlSW5kZXgs
IFdURk1vdmUodmFsdWVzKSk7CisgICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIobV9jYWxsU2l0ZUluZGV4KSwgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKK30KKwogLy8gTWVtb3J5IGFjY2Vzc2Vz
IGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJlYXMgdGhl
eSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KLWludDMyX3QgQjNJUkdlbmVyYXRv
cjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJfdCBv
ZmZzZXQpCitpbnQzMl90IEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQoVmFs
dWUqJiBwdHIsIHVpbnQzMl90IG9mZnNldCkKIHsKICAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KG9mZnNldCkgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWF4KCkpKSB7CiAgICAgICAgIHB0ciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgcHRyLCBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSk7CkBAIC00Mjgs
OCArNjQzLDkgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAsIG1fY29uc3RhbnRJbnNl
cnRpb25WYWx1ZXMobV9wcm9jKQogICAgICwgbV9udW1JbXBvcnRGdW5jdGlvbnMoaW5mby5pbXBv
cnRGdW5jdGlvbkNvdW50KCkpCiB7Ci0gICAgbV9yb290QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2so
KTsKLSAgICBtX2N1cnJlbnRCbG9jayA9IG1fcm9vdEJsb2NrOworICAgIG1fdG9wTGV2ZWxCbG9j
ayA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgIG1fcm9vdEJsb2Nrcy5hcHBlbmQobV9wcm9jLmFk
ZEJsb2NrKCkpOworICAgIG1fY3VycmVudEJsb2NrID0gbV9yb290QmxvY2tzWzBdOwogCiAgICAg
Ly8gRklYTUUgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gcGluIHJlZ2lzdGVycyBoZXJlIGlmIHRo
ZXJlJ3Mgbm8gbWVtb3J5LiBJdCBtYWtlcyB3YXNtIC0+IHdhc20gdGh1bmtzIHNpbXBsZXIgZm9y
IG5vdy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjYyMwogICAg
IGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCk7CkBAIC00NjEsNiArNjc3LDI2IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0
b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAg
ICAgICAgIH0pOwogICAgIH0KIAorICAgIHsKKyAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSog
Z2V0SW5zdGFuY2UgPSBtX3RvcExldmVsQmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZh
bHVlPihtX3Byb2MsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpKTsKKyAgICAgICAgaWYgKENvbnRl
eHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgICAgIGdldEluc3RhbmNlLT5jbG9iYmVyKFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250
ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8g
cmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCisgICAgICAgICAgICAvLyBUaGlzIHByZXZl
bnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFi
bGUgcGlubmVkIHJlZ2lzdGVyLgorICAgICAgICAgICAgZ2V0SW5zdGFuY2UtPmVmZmVjdHMud3Jp
dGVzUGlubmVkID0gZmFsc2U7CisgICAgICAgICAgICBnZXRJbnN0YW5jZS0+ZWZmZWN0cy5yZWFk
c1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICBnZXRJbnN0YW5jZS0+cmVzdWx0Q29uc3RyYWlu
dHMgPSB7IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSB9OworICAgICAg
ICB9CisgICAgICAgIGdldEluc3RhbmNlLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAg
ICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxw
ZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKHBhcmFtc1swXS5n
cHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBtX2luc3RhbmNlVmFs
dWUgPSBnZXRJbnN0YW5jZTsKKyAgICB9CisKICAgICB7CiAgICAgICAgIGF1dG8qIGNhbGxlZU1v
dmVMb2NhdGlvbiA9ICZjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uOwogICAgICAgICBz
dGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHNpemVvZihSZWdpc3Rlcikg
PCBXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNpemVJbkJ5dGVzLCAiV2UgcmVseSBvbiB0
aGlzIGhlcmUgZm9yIG5vdy4iKTsKQEAgLTQ5NCwxNyArNzMwLDEwIEBAIEIzSVJHZW5lcmF0b3I6
OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYg
cHJvY2VkdXJlCiAgICAgfQogCiAgICAgewotICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBz
dGFja092ZXJmbG93Q2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBv
aW50VmFsdWU+KG1fcHJvYywgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCkpOwotICAgICAgICBtX2lu
c3RhbmNlVmFsdWUgPSBzdGFja092ZXJmbG93Q2hlY2s7CisgICAgICAgIEIzOjpQYXRjaHBvaW50
VmFsdWUqIHN0YWNrT3ZlcmZsb3dDaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6
OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBWb2lkLCBPcmlnaW4oKSk7CisgICAgICAgIHN0YWNr
T3ZlcmZsb3dDaGVjay0+YXBwZW5kU29tZVJlZ2lzdGVyKGluc3RhbmNlVmFsdWUoKSk7CiAgICAg
ICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+YXBwZW5kU29tZVJlZ2lzdGVyKGZyYW1lUG9pbnRlcigp
KTsKICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNy
b1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygp
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJl
cnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwg
d2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KLSAgICAgICAgICAgIC8v
IFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2Fs
bHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIuCi0gICAgICAgICAgICBzdGFja092ZXJmbG93
Q2hlY2stPmVmZmVjdHMud3JpdGVzUGlubmVkID0gZmFsc2U7Ci0gICAgICAgICAgICBzdGFja092
ZXJmbG93Q2hlY2stPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwotICAgICAgICAgICAgc3Rh
Y2tPdmVyZmxvd0NoZWNrLT5yZXN1bHRDb25zdHJhaW50cyA9IHsgVmFsdWVSZXA6OnJlZyhtX3dh
c21Db250ZXh0SW5zdGFuY2VHUFIpIH07Ci0gICAgICAgIH0KICAgICAgICAgc3RhY2tPdmVyZmxv
d0NoZWNrLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAyOwogICAgICAgICBzdGFja092ZXJmbG93
Q2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIGNvbnN0IENoZWNr
ZWQ8aW50MzJfdD4gd2FzbUZyYW1lU2l6ZSA9IHBhcmFtcy5wcm9jKCkuZnJhbWVTaXplKCk7CkBA
IC01MjYsMTkgKzc1NSwxNSBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAg
Ym9vbCBuZWVkVW5kZXJmbG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hlY2tTaXpl
KSA+IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKTsKICAgICAgICAgICAgIGJvb2wgbmVlZHNP
dmVyZmxvd0NoZWNrID0gbV9tYWtlc0NhbGxzIHx8IHdhc21GcmFtZVNpemUgPj0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4obWluaW11bVBhcmVudENoZWNrU2l6ZSkgfHwgbmVlZFVuZGVyZmxvd0NoZWNr
OwogCi0gICAgICAgICAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0gQ29udGV4dDo6dXNlRmFz
dFRMUygpID8gcGFyYW1zWzBdLmdwcigpIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwotCiAg
ICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBsZWFmIGZ1bmN0aW9ucyB0byBub3QgZG8gc3RhY2sg
Y2hlY2tzIGlmIHRoZWlyIGZyYW1lIHNpemUgaXMgd2l0aGluCiAgICAgICAgICAgICAvLyBjZXJ0
YWluIGxpbWl0cyBzaW5jZSB0aGVpciBjYWxsZXIgd291bGQgaGF2ZSBhbHJlYWR5IGRvbmUgdGhl
IGNoZWNrLgogICAgICAgICAgICAgaWYgKG5lZWRzT3ZlcmZsb3dDaGVjaykgewogICAgICAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
KyAgICAgICAgICAgICAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0gcGFyYW1zWzBdLmdwcigp
OwogICAgICAgICAgICAgICAgIEdQUlJlZyBmcCA9IHBhcmFtc1sxXS5ncHIoKTsKICAgICAgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOwogICAgICAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQotICAgICAgICAgICAgICAgICAgICBq
aXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKLQogICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0SW5zdGFuY2Us
IEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIHNjcmF0Y2gyKTsKICAgICAg
ICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jaGVja1Np
emUpLCBmcCwgc2NyYXRjaDEpOwogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBvdmVyZmxvdzsKQEAgLTU0OCwxMiArNzczLDYgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1
cmUKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW292ZXJmbG93XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3Zl
cmZsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRv
bigpLnN0dWIodGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgp
KSk7CiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fdXNlc0lu
c3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVkLCBidXQgdGhlIGluc3RhbmNlIHZhbHVlcyBz
dGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0LgotICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdh
c21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICAg
ICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBzYWlkIHdlJ2QgcmV0dXJu
IGEgcG9pbnRlci4gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBiZWNhdXNlIGl0IGlzbid0IHVz
ZWQsIGJ1dCB0aGUgcGF0Y2hwb2ludCBjb25zZXJ2YXRpdmVseSBzYWlkIGl0IGhhZCBlZmZlY3Rz
IChwb3RlbnRpYWwgc3RhY2sgY2hlY2spIHdoaWNoIHByZXZlbnQgaXQgZnJvbSBnZXR0aW5nIHJl
bW92ZWQuCiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTU2NCw5ICs3ODMs
MTAgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBt
X3Byb2MuYWRkQmxvY2soKTsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNz
ZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCByZXN0b3JlQ2FjaGVkU3Rh
Y2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgVmFsdWUqIGluc3RhbmNl
LCBQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrKQordm9pZCBCM0lSR2VuZXJhdG9y
OjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCBy
ZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwg
VmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBib29s
IHJlc3RvcmVJbnN0YW5jZSkKIHsKLSAgICByZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShwcm9j
LCBibG9jaywgaW5zdGFuY2UpOworICAgIGlmIChyZXN0b3JlSW5zdGFuY2UpCisgICAgICAgIHJl
c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHByb2MsIGJsb2NrLCBpbnN0YW5jZSk7CiAKICAgICBp
ZiAocmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgPT0gUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6Olll
cykgewogICAgICAgICAvLyBUaGUgSW5zdGFuY2UgY2FjaGVzIHRoZSBzdGFjayBsaW1pdCwgYnV0
IGFsc28ga25vd3Mgd2hlcmUgaXRzIGNhbm9uaWNhbCBsb2NhdGlvbiBpcy4KQEAgLTYzNCw5ICs4
NTQsNzggQEAgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmZyYW1lUG9pbnRlcigpCiAgICAgcmV0dXJu
IG1fZnJhbWVQb2ludGVyOwogfQogCit2b2lkIEIzSVJHZW5lcmF0b3I6Omluc2VydEVudHJ5U3dp
dGNoKCkKK3sKKyAgICBtX3Byb2Muc2V0TnVtRW50cnlwb2ludHMobV9yb290QmxvY2tzLnNpemUo
KSk7CisKKyAgICBSZWY8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+IGNhdGNoUHJvbG9ndWVH
ZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVu
Y3Rpb24+KFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgeworICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisK
KyAgICAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICB7CisgICAgICAgICAgICAvLyBGSVhN
RTogSGFuZGxpbmcgcHJlY2lzZSBhbGxvY2F0aW9ucyBpbiBXYXNtQjNJUkdlbmVyYXRvciBjYXRj
aCBlbnRyeXBvaW50cyBtaWdodCBiZSB1bm5lY2Vzc2FyeQorICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTIxMworICAgICAgICAgICAgYXV0
byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6
Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVj
aXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICAgICAgaml0LmFuZFB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFya2VkQmxv
Y2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
YXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKKworICAgICAgICAgICAgcHJlY2lzZUFsbG9j
YXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFByZWNpc2VBbGxvY2F0aW9uOjpvZmZzZXRPZldl
YWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0oKSAtIFByZWNpc2VBbGxvY2F0aW9uOjpoZWFk
ZXJTaXplKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRlZENhc2UubGlu
aygmaml0KTsKKyAgICAgICAgfQorICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdU
Myk7CisKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMyk7
CisgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0
ciksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxlZUZvcldh
c21DYXRjaE9mZnNldCgpKSk7CisgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
R1BSSW5mbzo6cmVnVDMsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisKKyAgICAgICAgaml0Lmxv
YWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsRnJhbWVG
b3JDYXRjaE9mZnNldCgpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBq
aXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNl
dCgpKSk7CisKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
b2Zmc2V0T2ZJbnN0YW5jZSgpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICBqaXQuc3RvcmVX
YXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OnJlZ1QzKTsKKworICAgICAgICBqaXQucHJvYmUo
W10oUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOworICAgICAgICAgICAgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7CisgICAgICAg
ICAgICBPcHRpbWl6aW5nSklUQ2FsbGVlKiBjYWxsZWUgPSBiaXR3aXNlX2Nhc3Q8T3B0aW1pemlu
Z0pJVENhbGxlZSo+KGNhbGxGcmFtZS0+Y2FsbGVlKCkuYXNXYXNtQ2FsbGVlKCkpOworICAgICAg
ICAgICAgY29uc3QgU3RhY2tNYXAmIHN0YWNrbWFwID0gY2FsbGVlLT5zdGFja21hcChjYWxsU2l0
ZUluZGV4KTsKKyAgICAgICAgICAgIFZNKiB2bSA9IGNvbnRleHQuZ3ByPFZNKj4oR1BSSW5mbzo6
cmVnVDApOworICAgICAgICAgICAgdWludDY0X3QqIGJ1ZmZlciA9IHZtLT53YXNtQ29udGV4dC5z
Y3JhdGNoQnVmZmVyRm9yU2l6ZShzdGFja21hcC5zaXplKCkgKiA4KTsKKyAgICAgICAgICAgIGxv
YWRWYWx1ZXNJbnRvQnVmZmVyKGNvbnRleHQsIHN0YWNrbWFwLCBidWZmZXIpOworCisgICAgICAg
ICAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oYnVmZmVyKTsKKyAgICAgICAgfSwgbnVsbHB0cik7CisKKyAgICAgICAgaml0LmFk
ZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICB9KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX3Jvb3RCbG9ja3Mu
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJvYy5jb2RlKCkuc2V0UHJvbG9ndWVGb3JFbnRyeXBv
aW50KGksIGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IuY29weVJlZigpKTsKKworICAgIG1fY3VycmVu
dEJsb2NrID0gbV90b3BMZXZlbEJsb2NrOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgRW50cnlTd2l0Y2gsIE9yaWdpbigpKTsKKyAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9yb290QmxvY2tzKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
U3VjY2Vzc29yKEZyZXF1ZW50ZWRCbG9jayhibG9jaykpOworfQorCiB2b2lkIEIzSVJHZW5lcmF0
b3I6Omluc2VydENvbnN0YW50cygpCiB7CiAgICAgbV9jb25zdGFudEluc2VydGlvblZhbHVlcy5l
eGVjdXRlKG1fcHJvYy5hdCgwKSk7CisKKyAgICBpZiAoIW1faGFzQ2F0Y2gpCisgICAgICAgIHJl
dHVybjsKKworICAgIFZhbHVlKiBqc0luc3RhbmNlID0gbV9wcm9jLmFkZDxNZW1vcnlWYWx1ZT4o
TG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8
aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSkpOworICAgIFZhbHVlKiBzdG9yZSA9
IG1fcHJvYy5hZGQ8QjM6Ok1lbW9yeVZhbHVlPihCMzo6U3RvcmUsIE9yaWdpbigpLCBqc0luc3Rh
bmNlLCBmcmFtZVBvaW50ZXIoKSwgc2FmZUNhc3Q8aW50MzJfdD4oQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX3Jvb3RCbG9ja3NbMF07CisgICAgbV9jb25zdGFudEluc2VydGlvblZhbHVlcy5pbnNlcnRW
YWx1ZSgwLCBqc0luc3RhbmNlKTsKKyAgICBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzLmluc2Vy
dFZhbHVlKDAsIHN0b3JlKTsKKyAgICBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzLmV4ZWN1dGUo
YmxvY2spOwogfQogCiBCMzo6VHlwZSBCM0lSR2VuZXJhdG9yOjp0b0IzUmVzdWx0VHlwZShCbG9j
a1NpZ25hdHVyZSByZXR1cm5UeXBlKQpAQCAtNzA1LDIwICs5OTQsMjEgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRp
YWxSZXN1bHQKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZWZJc051bGwoRXhwcmVzc2lvblR5
cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAg
ICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpF
cXVhbCwgb3JpZ2luKCksIHZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOworICAg
IHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBC
Mzo6RXF1YWwsIG9yaWdpbigpLCBnZXQodmFsdWUpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpKTsKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxl
R2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgLy8gRklYTUU6IEVtaXQgdGhp
cyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1MDY+
LgotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9w
cm9jLCB0b0IzVHlwZShUeXBlczo6RXh0ZXJucmVmKSwgb3JpZ2luKCksCisgICAgVmFsdWUqIHJl
c3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2Ms
IHRvQjNUeXBlKFR5cGVzOjpFeHRlcm5yZWYpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVu
Y3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRXYXNtVGFibGVFbGVtZW50KSksCi0g
ICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpLCBpbmRleCk7CisgICAgICAgIGlu
c3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpLCBnZXQoaW5kZXgpKTsKIAogICAgIHsKKyAgICAg
ICAgcmVzdWx0ID0gcHVzaChyZXN1bHRWYWx1ZSk7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNr
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBv
cmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3Vs
dFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAg
ICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTczMyw3ICsxMDIzLDcgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRUYWJsZVNldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBpbmRl
eCwgRXhwcmUKICAgICAvLyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODUwNj4uCiAgICAgYXV0byBzaG91bGRUaHJvdyA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBCMzo6SW50MzIs
IG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvblNldFdhc21UYWJsZUVsZW1lbnQpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFi
bGVJbmRleCksIGluZGV4LCB2YWx1ZSk7CisgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxl
SW5kZXgpLCBnZXQoaW5kZXgpLCBnZXQodmFsdWUpKTsKIAogICAgIHsKICAgICAgICAgQ2hlY2tW
YWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJv
YywgQ2hlY2ssIG9yaWdpbigpLApAQCAtNzUxLDI2ICsxMDQxLDI2IEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkUmVmRnVuYyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhCiB7CiAgICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1MDY+LgogCi0gICAgcmVzdWx0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEIzOjpJbnQ2NCwgb3Jp
Z2luKCksCisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxs
VmFsdWU+KG1fcHJvYywgQjM6OkludDY0LCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rp
b248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmVmRnVuYykpLAotICAgICAgICBpbnN0
YW5jZVZhbHVlKCksIGFkZENvbnN0YW50KFR5cGVzOjpJMzIsIGluZGV4KSk7CisgICAgICAgIGlu
c3RhbmNlVmFsdWUoKSwgY29uc3RhbnQodG9CM1R5cGUoVHlwZXM6OkkzMiksIGluZGV4KSkpOwog
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUluaXQo
dW5zaWduZWQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlw
ZSBkc3RPZmZzZXQsIEV4cHJlc3Npb25UeXBlIHNyY09mZnNldCwgRXhwcmVzc2lvblR5cGUgbGVu
Z3RoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIG1fcHJvYywgdG9CM1R5
cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbldhc21UYWJsZUluaXQpKSwKICAgICAgICAgaW5zdGFuY2VWYWx1
ZSgpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgZWxlbWVudEluZGV4KSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpLAotICAg
ICAgICBkc3RPZmZzZXQsIHNyY09mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgZ2V0KGRzdE9mZnNl
dCksIGdldChzcmNPZmZzZXQpLCBnZXQobGVuZ3RoKSk7CiAKICAgICB7CiAgICAgICAgIENoZWNr
VmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3By
b2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3Jp
Z2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRp
b25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTc5NCwzMSArMTA4NCwzMSBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVsZW1Ecm9wKHVuc2lnbmVkIGVsZW1lbnRJbmRleCkgLT4g
UGFydGlhbFJlc3VsdAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZVNpemUodW5zaWduZWQg
dGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewog
ICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigp
LAorICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVl
PihtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdD
RnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRXYXNtVGFibGVTaXplKSksCi0g
ICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpKTsKKyAgICAgICAgaW5zdGFuY2VW
YWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgdGFibGVJbmRleCkpKTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25U
eXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKKyAg
ICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9w
cm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0
aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVRhYmxlR3JvdykpLAotICAgICAgICBp
bnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZmlsbCwgZGVsdGEpOworICAgICAgICBpbnN0
YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZ2V0KGZpbGwpLCBnZXQoZGVsdGEpKSk7CiAKICAg
ICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCh1bnNp
Z25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBvZmZzZXQsIEV4cHJlc3Npb25UeXBlIGZp
bGwsIEV4cHJlc3Npb25UeXBlIGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9C
M1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBl
czo6STMyKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCkpLAotICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0
YWJsZUluZGV4KSwgb2Zmc2V0LCBmaWxsLCBjb3VudCk7CisgICAgICAgIGluc3RhbmNlVmFsdWUo
KSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHRhYmxlSW5kZXgpLCBnZXQob2Zmc2V0KSwgZ2V0KGZpbGwpLCBnZXQoY291bnQpKTsKIAog
ICAgIHsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJl
c3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOwogCiAgICAgICAg
IGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRp
b25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVGFibGVBY2Nlc3MpOwpAQCAt
ODMwLDE3ICsxMTIwLDE3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKHVuc2ln
bmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhwCiAKIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkVGFibGVDb3B5KHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNy
Y1RhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGRzdE9mZnNldCwgRXhwcmVzc2lvblR5cGUgc3Jj
T2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBsZW5ndGgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBh
dXRvIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAg
VmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVl
PigKICAgICAgICAgbV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVRhYmxlQ29w
eSkpLAogICAgICAgICBpbnN0YW5jZVZhbHVlKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBkc3RUYWJsZUluZGV4KSwK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIHNyY1RhYmxlSW5kZXgpLAotICAgICAgICBkc3RPZmZzZXQsIHNyY09mZnNldCwg
bGVuZ3RoKTsKKyAgICAgICAgZ2V0KGRzdE9mZnNldCksIGdldChzcmNPZmZzZXQpLCBnZXQobGVu
Z3RoKSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9y
aWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsK
IAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5l
bWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNj
ZXNzKTsKQEAgLTg1Myw3ICsxMTQzLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUNv
cHkodW5zaWduZWQgZHN0VGFibGVJbmRleCwgdW5zaWduZWQgc3JjVGFibGVJbmRleCwKIGF1dG8g
QjNJUkdlbmVyYXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdKTsK
LSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1f
cHJvYywgQjM6OkdldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSk7CisgICAgcmVzdWx0ID0g
cHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6
OkdldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSkpOwogICAgIHJldHVybiB7IH07CiB9CiAK
QEAgLTg2Nyw3ICsxMTU3LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0
b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlw
ZSBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwg
VmFsdWUqIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0
CiB7CiAgICAgLy8gRG8gYSBjb250ZXh0IHN3aXRjaCBpZiBuZWVkZWQuCiAgICAgewpAQCAtOTE2
LDcgKzEyMDYsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUq
IGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZQogICAgIH0KIAogICAgIEIzOjpU
eXBlIHJldHVyblR5cGUgPSB0b0IzUmVzdWx0VHlwZSgmc2lnbmF0dXJlKTsKLSAgICBFeHByZXNz
aW9uVHlwZSBjYWxsUmVzdWx0ID0gY3JlYXRlQ2FsbFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ss
IG9yaWdpbigpLCBzaWduYXR1cmUsIGFyZ3MsCisgICAgVmFsdWUqIGNhbGxSZXN1bHQgPSBjcmVh
dGVDYWxsUGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIHNpZ25hdHVyZSwgYXJn
cywKICAgICAgICAgc2NvcGVkTGFtYmRhUmVmPHZvaWQoUGF0Y2hwb2ludFZhbHVlKik+KFs9XSAo
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSAtPiB2b2lkIHsKICAgICAgICAgICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwpAQCAtOTI4LDggKzEyMTgsMTAgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwg
RXhwcmVzc2lvblR5cGUgY2FsbGUKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRl
KFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNr
aW5nKSk7CiAKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVDb2RlLCBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKG1fY3VycmVudEJsb2Nr
LCBwYXRjaHBvaW50KTsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwg
cGFyYW1zLCB0aGlzKTsKICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcGFyYW1zLnBy
b2MoKS5yZXN1bHRDb3VudChyZXR1cm5UeXBlKV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgfSkpOwpAQCAtOTQxLDExICsxMjMzLDExIEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIEV4
cHJlc3Npb25UeXBlIGNhbGxlCiAgICAgY2FzZSBCMzo6VHVwbGU6IHsKICAgICAgICAgY29uc3Qg
VmVjdG9yPEIzOjpUeXBlPiYgdHVwbGUgPSBtX3Byb2MudHVwbGVGb3JUeXBlKHJldHVyblR5cGUp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJldHVybkNvdW50
KCk7ICsraSkKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0dXBsZVtpXSwgY2FsbFJlc3Vs
dCwgaSkpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaChtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHVwbGVbaV0sIGNhbGxS
ZXN1bHQsIGkpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OiB7Ci0gICAg
ICAgIHJlc3VsdHMuYXBwZW5kKGNhbGxSZXN1bHQpOworICAgICAgICByZXN1bHRzLmFwcGVuZChw
dXNoKGNhbGxSZXN1bHQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KQEAgLTk1OCw5
ICsxMjUwLDkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBj
YWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGUKIAogYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKKyAgICByZXN1bHQg
PSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQz
Miwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uR3Jvd01lbW9yeSkpLAotICAgICAgICBmcmFtZVBvaW50ZXIoKSwgaW5zdGFuY2VWYWx1
ZSgpLCBkZWx0YSk7CisgICAgICAgIGZyYW1lUG9pbnRlcigpLCBpbnN0YW5jZVZhbHVlKCksIGdl
dChkZWx0YSkpKTsKIAogICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVD
YWNoZWRTdGFja0xpbWl0OjpObywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3By
b2MsIG1fY3VycmVudEJsb2NrKTsKIApAQCAtOTgwLDIyICsxMjcyLDIyIEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0CiAgICAgVmFsdWUqIG51bVBhZ2VzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBaU2hyLCBvcmlnaW4oKSwKICAgICAgICAgc2l6ZSwgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHNoaWZ0VmFs
dWUpKTsKIAotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgVHJ1bmMsIG9yaWdpbigpLCBudW1QYWdlcyk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgbnVt
UGFnZXMpKTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
TWVtb3J5RmlsbChFeHByZXNzaW9uVHlwZSBkc3RBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSB0YXJn
ZXRWYWx1ZSwgRXhwcmVzc2lvblR5cGUgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBh
dXRvIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAg
VmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVl
PigKICAgICAgICAgbV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbU1lbW9yeUZp
bGwpKSwKICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLAotICAgICAgICBkc3RBZGRyZXNzLCB0YXJn
ZXRWYWx1ZSwgY291bnQpOworICAgICAgICBnZXQoZHN0QWRkcmVzcyksIGdldCh0YXJnZXRWYWx1
ZSksIGdldChjb3VudCkpOwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2lu
KCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1
ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAg
ICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNUYWJsZUFjY2Vzcyk7CkBAIC0xMDA3LDE2ICsxMjk5LDE2IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkTWVtb3J5RmlsbChFeHByZXNzaW9uVHlwZSBkc3RBZGRyZXNzLCBFeHByZXNzaW9uVHlw
ZSB0YXJnCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5SW5pdCh1bnNpZ25lZCBkYXRh
U2VnbWVudEluZGV4LCBFeHByZXNzaW9uVHlwZSBkc3RBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSBz
cmNBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSBsZW5ndGgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAg
ICBhdXRvIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisg
ICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZh
bHVlPigKICAgICAgICAgbV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbU1lbW9y
eUluaXQpKSwKICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLAogICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZGF0YVNlZ21lbnRJ
bmRleCksCi0gICAgICAgIGRzdEFkZHJlc3MsIHNyY0FkZHJlc3MsIGxlbmd0aCk7CisgICAgICAg
IGdldChkc3RBZGRyZXNzKSwgZ2V0KHNyY0FkZHJlc3MpLCBnZXQobGVuZ3RoKSk7CiAKICAgICB7
CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
aGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQs
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVj
ay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hl
Y2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTEwMjgs
MTUgKzEzMjAsMTUgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlJbml0KHVuc2lnbmVk
IGRhdGFTZWdtZW50SW5kZXgsIEV4cHJlc3Npb25UeXBlIGRzdEEKIAogYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRNZW1vcnlDb3B5KEV4cHJlc3Npb25UeXBlIGRzdEFkZHJlc3MsIEV4cHJlc3Npb25U
eXBlIHNyY0FkZHJlc3MsIEV4cHJlc3Npb25UeXBlIGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiB7
Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+
KAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0Nh
bGxWYWx1ZT4oCiAgICAgICAgIG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigp
LAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21N
ZW1vcnlDb3B5KSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwKLSAgICAgICAgZHN0QWRkcmVz
cywgc3JjQWRkcmVzcywgY291bnQpOworICAgICAgICBnZXQoZHN0QWRkcmVzcyksIGdldChzcmNB
ZGRyZXNzKSwgZ2V0KGNvdW50KSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNr
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBv
cmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3Vs
dFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAg
ICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTEwNjAsNyArMTM1Miw3IEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkRGF0YURyb3AodW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCkgLT4gUGFydGlhbFJl
c3VsdAogYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVz
c2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV9sb2NhbHNb
aW5kZXhdKTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1f
cHJvYywgQjM6OlNldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSwgdmFsdWUpOworICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6U2V0LCBv
cmlnaW4oKSwgbV9sb2NhbHNbaW5kZXhdLCBnZXQodmFsdWUpKTsKICAgICByZXR1cm4geyB9Owog
fQogCkBAIC0xMDcwLDEyICsxMzYyLDEyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6Z2V0R2xvYmFs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsCiAgICAg
VmFsdWUqIGdsb2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUo
KSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSk7CiAgICAg
c3dpdGNoIChnbG9iYWwuYmluZGluZ01vZGUpIHsKICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9y
bWF0aW9uOjpCaW5kaW5nTW9kZTo6RW1iZWRkZWRJbkluc3RhbmNlOgotICAgICAgICByZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRv
QjNUeXBlKGdsb2JhbC50eXBlKSwgb3JpZ2luKCksIGdsb2JhbHNBcnJheSwgc2FmZUNhc3Q8aW50
MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHJlc3VsdCA9IHB1c2go
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0b0Iz
VHlwZShnbG9iYWwudHlwZSksIG9yaWdpbigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMy
X3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOiB7CiAgICAg
ICAgIEFTU0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6
TXV0YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAgIFZhbHVlKiBwb2ludGVyID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBCMzo6SW50NjQsIG9y
aWdpbigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJl
Z2lzdGVyKSkpOwotICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKGdsb2JhbC50eXBlKSwgb3JpZ2luKCks
IHBvaW50ZXIpOworICAgICAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUoZ2xvYmFsLnR5cGUpLCBvcmln
aW4oKSwgcG9pbnRlcikpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQpAQCAtMTA4OSwx
NCArMTM4MSwxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZQogICAgIFZhbHVlKiBnbG9iYWxz
QXJyYXkgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGlu
dDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSkpOwogICAgIHN3aXRjaCAoZ2xvYmFs
LmJpbmRpbmdNb2RlKSB7CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGlu
Z01vZGU6OkVtYmVkZGVkSW5JbnN0YW5jZToKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIHZhbHVlLCBnbG9iYWxz
QXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3Jl
LCBvcmlnaW4oKSwgZ2V0KHZhbHVlKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90Pihp
bmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAgICAgaWYgKGlzUmVmVHlwZShnbG9iYWwu
dHlwZSkpCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyRm9ySlNXcmFwcGVyKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2Rl
OjpQb3J0YWJsZTogewogICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6
R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpOwogICAgICAgICBWYWx1ZSog
cG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgQjM6OkludDY0LCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90
PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIHZhbHVlLCBwb2lu
dGVyKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBTdG9yZSwgb3JpZ2luKCksIGdldCh2YWx1ZSksIHBvaW50ZXIpOwogICAgICAgICAvLyBX
ZSBlbWl0IGEgd3JpdGUtYmFycmllciBvbnRvIEpTV2ViQXNzZW1ibHlHbG9iYWwsIG5vdCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UuCiAgICAgICAgIGlmIChpc1JlZlR5cGUoZ2xvYmFsLnR5cGUpKSB7
CiAgICAgICAgICAgICBWYWx1ZSogaW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0
YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkp
KTsKQEAgLTExOTksNyArMTQ5MSw3IEBAIGlubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRX
cml0ZUJhcnJpZXJGb3JKU1dyYXBwZXIoKQogICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0
aW9uOwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBh
cmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMy
X3Qgc2l6ZU9mT3BlcmF0aW9uKQoraW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2hl
Y2tBbmRQcmVwYXJlUG9pbnRlcihWYWx1ZSogcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50
MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7CiAK
QEAgLTEyNjgsNyArMTU2MCw3IEBAIGlubGluZSBCMzo6S2luZCBCM0lSR2VuZXJhdG9yOjptZW1v
cnlLaW5kKEIzOjpPcGNvZGUgbWVtb3J5T3ApCiAgICAgcmV0dXJuIG1lbW9yeU9wOwogfQogCi1p
bmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK2lubGluZSBWYWx1ZSogQjNJ
UkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBWYWx1ZSogcG9pbnRlciwgdWlu
dDMyX3QgdW9mZnNldCkKIHsKICAgICBpbnQzMl90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNP
ZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CiAKQEAgLTEzMzgsOCArMTYzMCw5IEBAIGlubGluZSBW
YWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCB1CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAot
YXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBv
aW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlh
bFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXJWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNl
dCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBwb2ludGVyID0gZ2V0KHBvaW50ZXJW
YXIpOwogICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIpOwogCiAgICAgaWYgKFVO
TElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSkp
IHsKQEAgLTEzNTYsNyArMTY0OSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BU
eXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYKICAgICAgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOgogICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxv
YWQxNlU6CiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOgotICAgICAgICAgICAg
cmVzdWx0ID0gY29uc3RhbnQoSW50MzIsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChj
b25zdGFudChJbnQzMiwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STY0TG9hZDhTOgogICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4VToK
QEAgLTEzNjUsMTggKzE2NTgsMTggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5
cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJgogICAgICAgICBj
YXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6CiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0
TG9hZDoKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgotICAgICAgICAgICAg
cmVzdWx0ID0gY29uc3RhbnQoSW50NjQsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChj
b25zdGFudChJbnQ2NCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9h
ZE9wVHlwZTo6RjMyTG9hZDoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEZsb2F0LCAw
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoRmxvYXQsIDApKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6Ci0gICAgICAg
ICAgICByZXN1bHQgPSBjb25zdGFudChEb3VibGUsIDApOworICAgICAgICAgICAgcmVzdWx0ID0g
cHVzaChjb25zdGFudChEb3VibGUsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZW1pdExvYWRPcChvcCwgZW1pdENoZWNr
QW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zm
c2V0KTsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChlbWl0TG9hZE9wKG9wLCBlbWl0Q2hlY2tBbmRQ
cmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkxvYWRPcChvcCkpLCBvZmZzZXQp
KTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xNDAyLDcgKzE2OTUsNyBAQCBpbmxpbmUgdWlu
dDMyX3Qgc2l6ZU9mU3RvcmVPcChTdG9yZU9wVHlwZSBvcCkKIH0KIAogCi1pbmxpbmUgdm9pZCBC
M0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUg
cG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCitpbmxpbmUg
dm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgVmFsdWUqIHBv
aW50ZXIsIFZhbHVlKiB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBpbnQzMl90IG9m
ZnNldCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CiAKQEAgLTE0
MzcsOCArMTczMCwxMCBAQCBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChT
dG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRQogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6c3RvcmUoU3RvcmVP
cFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1
aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6c3Rv
cmUoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXJWYXIsIEV4cHJlc3Npb25U
eXBlIHZhbHVlVmFyLCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBW
YWx1ZSogcG9pbnRlciA9IGdldChwb2ludGVyVmFyKTsKKyAgICBWYWx1ZSogdmFsdWUgPSBnZXQo
dmFsdWVWYXIpOwogICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIpOwogCiAgICAg
aWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXplT2ZTdG9yZU9w
KG9wKSkpKSB7CkBAIC0xNDY0LDkgKzE3NTksOSBAQCBpbmxpbmUgdWludDMyX3Qgc2l6ZU9mQXRv
bWljT3BNZW1vcnlBY2Nlc3MoRXh0QXRvbWljT3BUeXBlIG9wKQogICAgIHJldHVybiBieXRlc0Zv
cldpZHRoKGFjY2Vzc1dpZHRoKG9wKSk7CiB9CiAKLWlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRv
cjo6c2FuaXRpemVBdG9taWNSZXN1bHQoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlw
ZSwgRXhwcmVzc2lvblR5cGUgcmVzdWx0KQoraW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpz
YW5pdGl6ZUF0b21pY1Jlc3VsdChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBW
YWx1ZSogcmVzdWx0KQogewotICAgIGF1dG8gc2FuaXRpemUzMiA9IFsmXShFeHByZXNzaW9uVHlw
ZSByZXN1bHQpIHsKKyAgICBhdXRvIHNhbml0aXplMzIgPSBbJl0oVmFsdWUqIHJlc3VsdCkgewog
ICAgICAgICBzd2l0Y2ggKGFjY2Vzc1dpZHRoKG9wKSkgewogICAgICAgICBjYXNlIEIzOjpXaWR0
aDg6CiAgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLCByZXN1bHQsIGNvbnN0YW50KEludDMyLCAweGZmKSk7
CkBAIC0xNDkxLDcgKzE3ODYsNyBAQCBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OnNhbml0
aXplQXRvbWljUmVzdWx0KEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZQogICAgIH0KIH0K
IAotVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNP
cHMoRXh0QXRvbWljT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwdHIsIHVpbnQzMl90IG9mZnNl
dCkKK1ZhbHVlKiBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWlj
T3BzKEV4dEF0b21pY09wVHlwZSBvcCwgVmFsdWUqIHB0ciwgdWludDMyX3Qgb2Zmc2V0KQogewog
ICAgIGF1dG8gcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQWRkLCBvcmlnaW4oKSwgcHRyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSk7CiAgICAgaWYgKGFjY2Vzc1dpZHRoKG9w
KSAhPSBCMzo6V2lkdGg4KSB7CkBAIC0xNTA0LDExICsxNzk5LDExIEBAIFZhbHVlKiBCM0lSR2Vu
ZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKEV4dEF0b21pY09wVHlw
ZSBvcCwgRXhwCiAgICAgcmV0dXJuIHBvaW50ZXI7CiB9CiAKLWlubGluZSBWYWx1ZSogQjNJUkdl
bmVyYXRvcjo6ZW1pdEF0b21pY0xvYWRPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVU
eXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQoraW5saW5lIFZh
bHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWljTG9hZE9wKEV4dEF0b21pY09wVHlwZSBvcCwg
VHlwZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQogewogICAg
IHBvaW50ZXIgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKG9wLCBwb2ludGVy
LCB1b2Zmc2V0KTsKIAotICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlID0gbnVsbHB0cjsKKyAgICBW
YWx1ZSogdmFsdWUgPSBudWxscHRyOwogICAgIHN3aXRjaCAoYWNjZXNzV2lkdGgob3ApKSB7CiAg
ICAgY2FzZSBCMzo6V2lkdGg4OgogICAgIGNhc2UgQjM6OldpZHRoMTY6CkBAIC0xNTM3LDIyICsx
ODMyLDIyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljTG9hZChFeHRBdG9taWNPcFR5cGUg
b3AsIFR5cGUgdmFsdWVUeXBlLCBFeHByZXNzaW9uVHlwCiAKICAgICAgICAgc3dpdGNoICh2YWx1
ZVR5cGUua2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBjb25zdGFudChJbnQzMiwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNv
bnN0YW50KEludDMyLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBl
S2luZDo6STY0OgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50NjQsIDApOworICAg
ICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQ2NCwgMCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAg
ICAgICAgcmVzdWx0ID0gZW1pdEF0b21pY0xvYWRPcChvcCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tB
bmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkF0b21pY09wTWVtb3J5QWNj
ZXNzKG9wKSksIG9mZnNldCk7CisgICAgICAgIHJlc3VsdCA9IHB1c2goZW1pdEF0b21pY0xvYWRP
cChvcCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihnZXQocG9pbnRlciks
IG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgb2Zmc2V0KSk7CiAKICAg
ICByZXR1cm4geyB9OwogfQogCi1pbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWlj
U3RvcmVPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKK2lubGlu
ZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNTdG9yZU9wKEV4dEF0b21pY09wVHlwZSBv
cCwgVHlwZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSogdmFsdWUsIHVpbnQzMl90
IHVvZmZzZXQpCiB7CiAgICAgcG9pbnRlciA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXRGb3JBdG9t
aWNPcHMob3AsIHBvaW50ZXIsIHVvZmZzZXQpOwogCkBAIC0xNTczLDEyICsxODY4LDEyIEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljU3RvcmUoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZh
bHVlVHlwZSwgRXhwcmVzc2lvblR5CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hl
Y2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAgICAgICAg
IH0pOwogICAgIH0gZWxzZQotICAgICAgICBlbWl0QXRvbWljU3RvcmVPcChvcCwgdmFsdWVUeXBl
LCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkF0b21p
Y09wTWVtb3J5QWNjZXNzKG9wKSksIHZhbHVlLCBvZmZzZXQpOworICAgICAgICBlbWl0QXRvbWlj
U3RvcmVPcChvcCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihnZXQocG9p
bnRlciksIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgZ2V0KHZhbHVl
KSwgb2Zmc2V0KTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKLWlubGluZSBWYWx1ZSogQjNJUkdl
bmVyYXRvcjo6ZW1pdEF0b21pY0JpbmFyeVJNV09wKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2
YWx1ZVR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1
aW50MzJfdCB1b2Zmc2V0KQoraW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWlj
QmluYXJ5Uk1XT3AoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgVmFsdWUqIHBv
aW50ZXIsIFZhbHVlKiB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBwb2ludGVyID0g
Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhvcCwgcG9pbnRlciwgdW9mZnNldCk7
CiAKQEAgLTE2NjMsMjIgKzE5NTgsMjIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWNCaW5h
cnlSTVcoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2kKIAogICAg
ICAgICBzd2l0Y2ggKHZhbHVlVHlwZS5raW5kKSB7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6Okkz
MjoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDMyLCAwKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50MzIsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFR5cGVLaW5kOjpJNjQ6Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25zdGFu
dChJbnQ2NCwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50KEludDY0LCAw
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0gZWxzZQotICAgICAgICByZXN1bHQgPSBlbWl0QXRvbWljQmluYXJ5Uk1XT3Aob3As
IHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBz
aXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKKyAgICAgICAg
cmVzdWx0ID0gcHVzaChlbWl0QXRvbWljQmluYXJ5Uk1XT3Aob3AsIHZhbHVlVHlwZSwgZW1pdENo
ZWNrQW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBvZmZzZXQsIHNpemVPZkF0b21pY09w
TWVtb3J5QWNjZXNzKG9wKSksIGdldCh2YWx1ZSksIG9mZnNldCkpOwogCiAgICAgcmV0dXJuIHsg
fTsKIH0KIAotVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2Uo
RXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgRXhwcmVzc2lvblR5cGUgZXhwZWN0ZWQsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJf
dCB1b2Zmc2V0KQorVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNDb21wYXJlRXhjaGFu
Z2UoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgVmFsdWUqIHBvaW50ZXIsIFZh
bHVlKiBleHBlY3RlZCwgVmFsdWUqIHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQogewogICAgIHBv
aW50ZXIgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKG9wLCBwb2ludGVyLCB1
b2Zmc2V0KTsKIApAQCAtMTc4OCwzNiArMjA4Myw0MSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmF0
b21pY0NvbXBhcmVFeGNoYW5nZShFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBF
eAogCiAgICAgICAgIHN3aXRjaCAodmFsdWVUeXBlLmtpbmQpIHsKICAgICAgICAgY2FzZSBUeXBl
S2luZDo6STMyOgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50MzIsIDApOworICAg
ICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQzMiwgMCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6Okk2NDoKLSAgICAgICAgICAgIHJlc3VsdCA9
IGNvbnN0YW50KEludDY0LCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQo
SW50NjQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGVtaXRBdG9taWNDb21wYXJl
RXhjaGFuZ2Uob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRl
ciwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCBleHBlY3RlZCwgdmFs
dWUsIG9mZnNldCk7CisgICAgICAgIHJlc3VsdCA9IHB1c2goZW1pdEF0b21pY0NvbXBhcmVFeGNo
YW5nZShvcCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihnZXQocG9pbnRl
ciksIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgZ2V0KGV4cGVjdGVk
KSwgZ2V0KHZhbHVlKSwgb2Zmc2V0KSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIz
SVJHZW5lcmF0b3I6OmF0b21pY1dhaXQoRXh0QXRvbWljT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgdGltZW91dCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0
CithdXRvIEIzSVJHZW5lcmF0b3I6OmF0b21pY1dhaXQoRXh0QXRvbWljT3BUeXBlIG9wLCBFeHBy
ZXNzaW9uVHlwZSBwb2ludGVyVmFyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZVZhciwgRXhwcmVzc2lv
blR5cGUgdGltZW91dFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIHBvaW50ZXIgPSBnZXQocG9pbnRlclZh
cik7CisgICAgVmFsdWUqIHZhbHVlID0gZ2V0KHZhbHVlVmFyKTsKKyAgICBWYWx1ZSogdGltZW91
dCA9IGdldCh0aW1lb3V0VmFyKTsKKyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBudWxscHRyOwog
ICAgIGlmIChvcCA9PSBFeHRBdG9taWNPcFR5cGU6Ok1lbW9yeUF0b21pY1dhaXQzMikgewotICAg
ICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJv
YywgSW50MzIsIG9yaWdpbigpLAorICAgICAgICByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCiAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1lbW9yeUF0b21p
Y1dhaXQzMikpLAogICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBwb2ludGVyLCBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0
KSwgdmFsdWUsIHRpbWVvdXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCks
CisgICAgICAgIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZh
bHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKICAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9u
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWVtb3J5QXRvbWljV2FpdDY0KSksCiAgICAgICAg
ICAgICBpbnN0YW5jZVZhbHVlKCksIHBvaW50ZXIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpLCB2YWx1ZSwgdGltZW91dCk7
CiAgICAgfQogCiAgICAgeworICAgICAgICByZXN1bHQgPSBwdXNoKHJlc3VsdFZhbHVlKTsKICAg
ICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNr
VmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIHJlc3VsdCwg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOwogCiAgICAgICAgIGNo
ZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25D
aGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKQEAgLTE4
MjksMTMgKzIxMjksMTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KEV4dEF0b21p
Y09wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmUKIAogYXV0byBCM0lSR2Vu
ZXJhdG9yOjphdG9taWNOb3RpZnkoRXh0QXRvbWljT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCBFeHByZXNzaW9uVHlwZSBjb3VudCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMy
X3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKKyAgICBW
YWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+
KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbk1lbW9yeUF0b21pY05vdGlmeSkpLAotICAgICAgICBpbnN0YW5j
ZVZhbHVlKCksIHBvaW50ZXIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpLCBjb3VudCk7Ci0KKyAgICAgICAgaW5zdGFuY2VW
YWx1ZSgpLCBnZXQocG9pbnRlciksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpLCBnZXQoY291bnQpKTsKICAgICB7CisgICAg
ICAgIHJlc3VsdCA9IHB1c2gocmVzdWx0VmFsdWUpOwogICAgICAgICBDaGVja1ZhbHVlKiBjaGVj
ayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywg
b3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigp
LCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
ewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlw
ZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOwpAQCAtMTg1MSw4ICsyMTUxLDkgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphdG9taWNGZW5jZShFeHRBdG9taWNPcFR5cGUsIHVpbnQ4X3QpIC0+IFBh
cnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OnRy
dW5jU2F0dXJhdGVkKEV4dDFPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCwgVHlwZSByZXR1cm5UeXBlLCBUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0Cith
dXRvIEIzSVJHZW5lcmF0b3I6OnRydW5jU2F0dXJhdGVkKEV4dDFPcFR5cGUgb3AsIEV4cHJlc3Np
b25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgVHlwZSByZXR1cm5UeXBlLCBU
eXBlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwog
ICAgIFZhbHVlKiBtYXhGbG9hdCA9IG51bGxwdHI7CiAgICAgVmFsdWUqIG1pbkZsb2F0ID0gbnVs
bHB0cjsKICAgICBWYWx1ZSogc2lnbkJpdENvbnN0YW50ID0gbnVsbHB0cjsKQEAgLTIwMDIsMjYg
KzIzMDMsMjYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjp0cnVuY1NhdHVyYXRlZChFeHQxT3BUeXBl
IG9wLCBFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb24KICAgICAgICAgYnJlYWs7CiAgICAg
fQogCi0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksCiAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIG9y
aWdpbigpLCBhcmcsIG1pbkZsb2F0KSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwKICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBh
cmcsIG1heEZsb2F0KSwKICAgICAgICAgICAgIHBhdGNocG9pbnQsIG1heFJlc3VsdCksCi0gICAg
ICAgIHJlcXVpcmVzTmFOQ2hlY2sgPyBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgYXJnLCBhcmcpLCBtaW5SZXN1bHQsIHplcm8p
IDogbWluUmVzdWx0KTsKKyAgICAgICAgcmVxdWlyZXNOYU5DaGVjayA/IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBhcmcsIGFy
ZyksIG1pblJlc3VsdCwgemVybykgOiBtaW5SZXN1bHQpKTsKIAogICAgIHJldHVybiB7IH07CiB9
CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIGNv
bmRpdGlvbiwgbm9uWmVybywgemVybyk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBnZXQoY29u
ZGl0aW9uKSwgZ2V0KG5vblplcm8pLCBnZXQoemVybykpKTsKICAgICByZXR1cm4geyB9OwogfQog
CiBCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRDb25zdGFu
dChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKQogewogCi0gICAgcmV0dXJuIGNvbnN0YW50KHRv
QjNUeXBlKHR5cGUpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHB1c2goY29uc3RhbnQodG9CM1R5cGUo
dHlwZSksIHZhbHVlKSk7CiB9CiAKIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVw
Q2hlY2soKQpAQCAtMjA4MiwyMCArMjM4MywyMSBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRM
b29wVGllclVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4LCBjb25zdCBTdGFjayYgZW5jbG9zaQog
CiAgICAgVmFsdWUqIGNvdW50RG93bkxvY2F0aW9uID0gY29uc3RhbnQocG9pbnRlclR5cGUoKSwg
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJm1fdGllclVwLT5tX2NvdW50ZXIpLCBvcmlnaW4pOwog
Ci0gICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBzdGFja21hcDsKLSAgICBmb3IgKGF1dG8mIGxv
Y2FsIDogbV9sb2NhbHMpIHsKLSAgICAgICAgVmFsdWUqIHJlc3VsdCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBvcmlnaW4sIGxvY2Fs
KTsKLSAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHJlc3VsdCk7Ci0gICAgfQorICAgIFZlY3RvcjxW
YWx1ZSo+IHN0YWNrbWFwOworICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykKKyAgICAg
ICAgc3RhY2ttYXAuYXBwZW5kKGdldChsb2NhbCkpOwogICAgIGZvciAodW5zaWduZWQgY29udHJv
bEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUo
KTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgYXV0byYgZGF0YSA9IG1fcGFyc2VyLT5jb250
cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOwogICAgICAgICBhdXRvJiBleHBy
ZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjazsKICAgICAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gdmFsdWUg
OiBleHByZXNzaW9uU3RhY2spCi0gICAgICAgICAgICBzdGFja21hcC5hcHBlbmQodmFsdWUpOwor
ICAgICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKGdldCh2YWx1ZSkpOworICAgICAgICBpZiAoQ29u
dHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpCisgICAgICAgICAgICBzdGFja21hcC5hcHBlbmQo
Z2V0KGRhdGEuZXhjZXB0aW9uKCkpKTsKICAgICB9CiAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24g
dmFsdWUgOiBlbmNsb3NpbmdTdGFjaykKLSAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHZhbHVlKTsK
KyAgICAgICAgc3RhY2ttYXAuYXBwZW5kKGdldCh2YWx1ZSkpOwogICAgIGZvciAoVHlwZWRFeHBy
ZXNzaW9uIHZhbHVlIDogbmV3U3RhY2spCi0gICAgICAgIHN0YWNrbWFwLmFwcGVuZCh2YWx1ZSk7
CisgICAgICAgIHN0YWNrbWFwLmFwcGVuZChnZXQodmFsdWUpKTsKIAogICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2ggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4o
bV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKTsKICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3Rz
Ojpub25lKCk7CkBAIC0yMTQwLDkzICsyNDQyLDcyIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1p
dExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgsIGNvbnN0IFN0YWNrJiBlbmNsb3Np
CiAgICAgfSk7CiB9CiAKK1ZhbHVlKiBCM0lSR2VuZXJhdG9yOjpsb2FkRnJvbVNjcmF0Y2hCdWZm
ZXIodW5zaWduZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBwb2ludGVyLCBCMzo6VHlwZSB0eXBl
KQoreworICAgIHNpemVfdCBvZmZzZXQgPSBzaXplb2YodWludDY0X3QpICogaW5kZXhJbkJ1ZmZl
cisrOworICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUuaXNOdW1lcmljKCkpOworICAgIHJldHVybiBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHR5cGUs
IG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworfQorCit2b2lkIEIzSVJHZW5lcmF0b3I6OmNv
bm5lY3RDb250cm9sRW50cnkodW5zaWduZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBwb2ludGVy
LCBDb250cm9sRGF0YSYgZGF0YSwgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgQ29udHJvbERhdGEm
IGN1cnJlbnREYXRhLCBib29sIGZpbGxMb29wUGhpcykKK3sKKyAgICAvLyBGb3IgZWFjaCBzdGFj
ayBlbnRyeSBlbmNsb3NlZCBieSB0aGlzIGxvb3Agd2UgbmVlZCB0byByZXBsYWNlIHRoZSB2YWx1
ZSB3aXRoIGEgcGhpIHNvIHdlIGNhbiBmaWxsIGl0IG9uIE9TUiBlbnRyeS4KKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgaSsrKSB7CisgICAgICAg
IFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA9IGV4cHJlc3Npb25TdGFja1tpXTsKKyAgICAgICAgYXV0
byogbG9hZCA9IGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihpbmRleEluQnVmZmVyLCBwb2ludGVyLCB2
YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgaWYgKGZpbGxMb29wUGhpcykKKyAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBs
b2FkLCBkYXRhLnBoaXNbaV0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBvcmlnaW4oKSwgdmFs
dWUudmFsdWUoKSwgbG9hZCk7CisgICAgfQorICAgIGlmIChDb250cm9sVHlwZTo6aXNBbnlDYXRj
aChkYXRhKSAmJiAmZGF0YSAhPSAmY3VycmVudERhdGEpIHsKKyAgICAgICAgYXV0byogbG9hZCA9
IGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihpbmRleEluQnVmZmVyLCBwb2ludGVyLCBwb2ludGVyVHlw
ZSgpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPiht
X3Byb2MsIFNldCwgb3JpZ2luKCksIGRhdGEuZXhjZXB0aW9uKCksIGxvYWQpOworICAgIH0KK307
CisKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUs
IFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIGJsb2NrLCBTdGFjayYgbmV3U3Rh
Y2ssIHVpbnQzMl90IGxvb3BJbmRleCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEJhc2ljQmxv
Y2sqIGJvZHkgPSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b24gPSBtX3Byb2MuYWRkQmxvY2soKTsKIAotICAgIGJsb2NrID0gQ29udHJvbERhdGEobV9wcm9j
LCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6Okxvb3AsIGNvbnRpbnVhdGlvbiwgYm9k
eSk7CisgICAgYmxvY2sgPSBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUs
IEJsb2NrVHlwZTo6TG9vcCwgbV9zdGFja1NpemUsIGNvbnRpbnVhdGlvbiwgYm9keSk7CisKICAg
ICB1bnNpZ25lZCBvZmZzZXQgPSBlbmNsb3NpbmdTdGFjay5zaXplKCkgLSBzaWduYXR1cmUtPmFy
Z3VtZW50Q291bnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5h
cmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBl
bmNsb3NpbmdTdGFjay5hdChvZmZzZXQgKyBpKTsKLSAgICAgICAgYXV0byogdXBzaWxvbiA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB2
YWx1ZSk7CiAgICAgICAgIFZhbHVlKiBwaGkgPSBibG9jay5waGlzW2ldOworICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ2V0
KHZhbHVlKSwgcGhpKTsKICAgICAgICAgYm9keS0+YXBwZW5kKHBoaSk7Ci0gICAgICAgIHVwc2ls
b24tPnNldFBoaShwaGkpOwotICAgICAgICBuZXdTdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQodmFs
dWUudHlwZSgpLCBwaGkpOworICAgICAgICBzZXQoYm9keSwgdmFsdWUsIHBoaSk7CisgICAgICAg
IG5ld1N0YWNrLmFwcGVuZCh2YWx1ZSk7CiAgICAgfQorICAgIGVuY2xvc2luZ1N0YWNrLnNocmlu
ayhvZmZzZXQpOwogCiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSht
X3Byb2MsIEp1bXAsIG9yaWdpbigpLCBib2R5KTsKICAgICBpZiAobG9vcEluZGV4ID09IG1fbG9v
cEluZGV4Rm9yT1NSRW50cnkpIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUIzSVJHZW5lcmF0
b3JJbnRlcm5hbDo6dmVyYm9zZSwgIlNldHRpbmcgdXAgZm9yIE9TUiBlbnRyeSIpOwogCi0gICAg
ICAgIG1fY3VycmVudEJsb2NrID0gbV9yb290QmxvY2s7Ci0gICAgICAgIFZhbHVlKiBwb2ludGVy
ID0gbV9yb290QmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihtX3Byb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1f
cm9vdEJsb2Nrc1swXTsKKyAgICAgICAgVmFsdWUqIHBvaW50ZXIgPSBtX3Jvb3RCbG9ja3NbMF0t
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwogCiAgICAgICAgIHVuc2lnbmVkIGluZGV4SW5CdWZmZXIgPSAwOwotICAg
ICAgICBhdXRvIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlciA9IFsmXSAoQjM6OlR5cGUgdHlwZSkgewot
ICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHNpemVvZih1aW50NjRfdCkgKiBpbmRleEluQnVm
ZmVyKys7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0eXBlLmlzTnVtZXJpYygpKTsKLSAg
ICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHR5cGUsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICB9
OwogCiAgICAgICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykKLSAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdp
bigpLCBsb2NhbCwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKGxvY2FsLT50eXBlKCkpKTsKLQotICAg
ICAgICBhdXRvIGNvbm5lY3RDb250cm9sRW50cnkgPSBbJl0oY29uc3QgQ29udHJvbERhdGEmIGRh
dGEsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spIHsKLSAgICAgICAgICAgIC8vIEZvciBlYWNoIHN0
YWNrIGVudHJ5IGVuY2xvc2VkIGJ5IHRoaXMgbG9vcCB3ZSBuZWVkIHRvIHJlcGxhY2UgdGhlIHZh
bHVlIHdpdGggYSBwaGkgc28gd2UgY2FuIGZpbGwgaXQgb24gT1NSIGVudHJ5LgotICAgICAgICAg
ICAgQmFzaWNCbG9jayogc291cmNlQmxvY2sgPSBudWxscHRyOwotICAgICAgICAgICAgdW5zaWdu
ZWQgYmxvY2tJbmRleCA9IDA7Ci0gICAgICAgICAgICBCMzo6SW5zZXJ0aW9uU2V0IGluc2VydGlv
blNldChtX3Byb2MpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4cHJl
c3Npb25TdGFjay5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lv
biB2YWx1ZSA9IGV4cHJlc3Npb25TdGFja1tpXTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUt
PmlzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4SW5CdWZmZXI7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS0+b3duZXIgIT0gc291cmNlQmxvY2spIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHNvdXJjZUJsb2NrKQotICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoc291cmNlQmxvY2spOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
aW5zZXJ0aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklm
KFdhc21CM0lSR2VuZXJhdG9ySW50ZXJuYWw6OnZlcmJvc2UgJiYgc291cmNlQmxvY2ssICJFeGVj
dXRlZCBpbnNlcnRpb24gc2V0IGludG86ICIsICpzb3VyY2VCbG9jayk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJsb2NrSW5kZXggPSAwOwotICAgICAgICAgICAgICAgICAgICBzb3VyY2VCbG9jayA9
IHZhbHVlLT5vd25lcjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB3aGls
ZSAoc291cmNlQmxvY2stPmF0KGJsb2NrSW5kZXgrKykgIT0gdmFsdWUpCi0gICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChibG9ja0luZGV4IDwgc291cmNlQmxvY2stPnNpemUoKSk7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHNvdXJjZUJsb2NrLT5hdChibG9ja0luZGV4IC0gMSkgPT0gdmFsdWUp
OwotCi0gICAgICAgICAgICAgICAgYXV0byogcGhpID0gZGF0YS5jb250aW51YXRpb24tPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksICB2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCkp
OwotICAgICAgICAgICAgICAgIGV4cHJlc3Npb25TdGFja1tpXSA9IFR5cGVkRXhwcmVzc2lvbiB7
IHZhbHVlLnR5cGUoKSwgcGhpIH07Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgdmFsdWUtPm9yaWdpbigpLCBsb2FkRnJvbVNj
cmF0Y2hCdWZmZXIodmFsdWUtPnR5cGUoKSksIHBoaSk7Ci0KLSAgICAgICAgICAgICAgICBhdXRv
KiBzb3VyY2VVcHNpbG9uID0gbV9wcm9jLmFkZDxVcHNpbG9uVmFsdWU+KHZhbHVlLT5vcmlnaW4o
KSwgdmFsdWUsIHBoaSk7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVl
KGJsb2NrSW5kZXgsIHNvdXJjZVVwc2lsb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKHNvdXJjZUJsb2NrKQotICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKHNv
dXJjZUJsb2NrKTsKLSAgICAgICAgfTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigpLCBsb2NhbCwgbG9hZEZy
b21TY3JhdGNoQnVmZmVyKGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIGxvY2FsLT50eXBlKCkpKTsK
IAogICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CiAgICAg
ICAgICAgICBhdXRvJiBkYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRl
eF0uY29udHJvbERhdGE7CiAgICAgICAgICAgICBhdXRvJiBleHByZXNzaW9uU3RhY2sgPSBtX3Bh
cnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFj
azsKLSAgICAgICAgICAgIGNvbm5lY3RDb250cm9sRW50cnkoZGF0YSwgZXhwcmVzc2lvblN0YWNr
KTsKKyAgICAgICAgICAgIGNvbm5lY3RDb250cm9sRW50cnkoaW5kZXhJbkJ1ZmZlciwgcG9pbnRl
ciwgZGF0YSwgZXhwcmVzc2lvblN0YWNrLCBibG9jayk7CiAgICAgICAgIH0KLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsK
LSAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA9IGVuY2xvc2luZ1N0YWNrLmF0KG9m
ZnNldCArIGkpOwotICAgICAgICAgICAgVmFsdWUqIHBoaSA9IGJsb2NrLnBoaXNbaV07Ci0gICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCB2
YWx1ZS0+b3JpZ2luKCksIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcih2YWx1ZS0+dHlwZSgpKSwgcGhp
KTsKLSAgICAgICAgfQotICAgICAgICBlbmNsb3NpbmdTdGFjay5zaHJpbmsob2Zmc2V0KTsKLSAg
ICAgICAgY29ubmVjdENvbnRyb2xFbnRyeShibG9jaywgZW5jbG9zaW5nU3RhY2spOworICAgICAg
ICBjb25uZWN0Q29udHJvbEVudHJ5KGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIGJsb2NrLCBlbmNs
b3NpbmdTdGFjaywgYmxvY2spOworICAgICAgICBjb25uZWN0Q29udHJvbEVudHJ5KGluZGV4SW5C
dWZmZXIsIHBvaW50ZXIsIGJsb2NrLCBuZXdTdGFjaywgYmxvY2ssIHRydWUpOwogCiAgICAgICAg
IG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IGluZGV4SW5CdWZmZXI7CiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4o
KSwgYm9keSk7CiAgICAgICAgIGJvZHktPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgZW5jbG9zaW5nU3RhY2suc2hyaW5rKG9mZnNldCk7CisgICAg
fQogCiAgICAgbV9jdXJyZW50QmxvY2sgPSBib2R5OwogICAgIGVtaXRMb29wVGllclVwQ2hlY2so
bG9vcEluZGV4LCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwpAQCAtMjIzNSw3ICsyNTE2LDcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwg
U3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb24KIAogQjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEg
QjNJUkdlbmVyYXRvcjo6YWRkVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKQogewot
ICAgIHJldHVybiBDb250cm9sRGF0YShtX3Byb2MsIE9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2Nr
VHlwZTo6VG9wTGV2ZWwsIG1fcHJvYy5hZGRCbG9jaygpKTsKKyAgICByZXR1cm4gQ29udHJvbERh
dGEobV9wcm9jLCBPcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OlRvcExldmVsLCBtX3N0
YWNrU2l6ZSwgbV9wcm9jLmFkZEJsb2NrKCkpOwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZEJsb2NrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBD
b250cm9sVHlwZSYgbmV3QmxvY2ssIFN0YWNrJiBuZXdTdGFjaykgLT4gUGFydGlhbFJlc3VsdApA
QCAtMjI0Myw3ICsyNTI0LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRCbG9jayhCbG9ja1Np
Z25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ28KICAgICBCYXNpY0Js
b2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKIAogICAgIHNwbGl0U3RhY2so
c2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwotICAgIG5ld0Jsb2NrID0gQ29u
dHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OkJsb2NrLCBj
b250aW51YXRpb24pOworICAgIG5ld0Jsb2NrID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4o
KSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OkJsb2NrLCBtX3N0YWNrU2l6ZSwgY29udGludWF0aW9u
KTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0yMjU1LDIwICsyNTM2LDIwIEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVy
ZSBzaWduYXR1cmUsIFN0CiAgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBtX3Byb2MuYWRkQmxv
Y2soKTsKICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsK
IAotICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkJyYW5j
aCwgb3JpZ2luKCksIGNvbmRpdGlvbik7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgZ2V0KGNvbmRpdGlvbikpOwogICAg
IG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YWtlbiksIEZy
ZXF1ZW50ZWRCbG9jayhub3RUYWtlbikpOwogICAgIHRha2VuLT5hZGRQcmVkZWNlc3NvcihtX2N1
cnJlbnRCbG9jayk7CiAgICAgbm90VGFrZW4tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2Nr
KTsKIAogICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47CiAgICAgc3BsaXRTdGFjayhzaWduYXR1
cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7Ci0gICAgcmVzdWx0ID0gQ29udHJvbERhdGEo
bV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OklmLCBjb250aW51YXRpb24s
IG5vdFRha2VuKTsKKyAgICByZXN1bHQgPSBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBz
aWduYXR1cmUsIEJsb2NrVHlwZTo6SWYsIG1fc3RhY2tTaXplLCBjb250aW51YXRpb24sIG5vdFRh
a2VuKTsKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2Uo
Q29udHJvbERhdGEmIGRhdGEsIGNvbnN0IFN0YWNrJiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEucGhp
cyk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhKTsKICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2lu
KCksIGRhdGEuY29udGludWF0aW9uKTsKICAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUo
ZGF0YSk7CiB9CkBAIC0yMjc2LDExICsyNTU3LDI1MyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IFN0YWNrJiBjdXJyZW50U3RhY2spIC0+IFBh
cgogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYg
ZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChkYXRhLmJsb2NrVHlwZSgpID09
IEJsb2NrVHlwZTo6SWYpOworICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKSArIGRh
dGEubV9zaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBtX2N1cnJlbnRCbG9jayA9IGRh
dGEuc3BlY2lhbDsKICAgICBkYXRhLmNvbnZlcnRJZlRvQmxvY2soKTsKICAgICByZXR1cm4geyB9
OwogfQogCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRyeShCbG9ja1NpZ25hdHVyZSBzaWduYXR1
cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5l
d1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgKyttX3RyeURlcHRoOworCisgICAgQmFz
aWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgc3BsaXRTdGFj
ayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CisgICAgcmVzdWx0ID0gQ29u
dHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OlRyeSwgbV9z
dGFja1NpemUsIGNvbnRpbnVhdGlvbiwgKyttX2NhbGxTaXRlSW5kZXgsIG1fdHJ5RGVwdGgpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2godW5zaWdu
ZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBTdGFjayYgY3Vy
cmVudFN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0
YSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1
bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgcmV0dXJuIGFkZENhdGNoVG9V
bnJlYWNoYWJsZShleGNlcHRpb25JbmRleCwgc2lnbmF0dXJlLCBkYXRhLCByZXN1bHRzKTsKK30K
KworUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBCM0lSR2VuZXJhdG9yOjpwcmVwYXJlUGF0Y2hw
b2ludEZvckV4Y2VwdGlvbnMoQmFzaWNCbG9jayogYmxvY2ssIFBhdGNocG9pbnRWYWx1ZSogcGF0
Y2gpCit7CisgICAgKyttX2NhbGxTaXRlSW5kZXg7CisgICAgaWYgKCFtX3RyeURlcHRoKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPFZhbHVlKj4gc3RhY2ttYXA7CisgICAgT3Jp
Z2luIG9yaWdpbiA9IHRoaXMtPm9yaWdpbigpOworICAgIGZvciAoVmFyaWFibGUqIGxvY2FsIDog
bV9sb2NhbHMpIHsKKyAgICAgICAgVmFsdWUqIHJlc3VsdCA9IGJsb2NrLT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBvcmlnaW4sIGxvY2FsKTsKKyAgICAgICAgc3Rh
Y2ttYXAuYXBwZW5kKHJlc3VsdCk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgY29udHJvbElu
ZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsg
Kytjb250cm9sSW5kZXgpIHsKKyAgICAgICAgQ29udHJvbERhdGEmIGRhdGEgPSBtX3BhcnNlci0+
Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKKyAgICAgICAgU3RhY2sm
IGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhd
LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBmb3IgKFZhcmlhYmxlKiB2YWx1ZSA6
IGV4cHJlc3Npb25TdGFjaykKKyAgICAgICAgICAgIHN0YWNrbWFwLmFwcGVuZChnZXQoYmxvY2ss
IHZhbHVlKSk7CisgICAgICAgIGlmIChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRhKSkKKyAg
ICAgICAgICAgIHN0YWNrbWFwLmFwcGVuZChnZXQoYmxvY2ssIGRhdGEuZXhjZXB0aW9uKCkpKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBwYXRjaC0+bnVtQ2hpbGRyZW4oKTsKKyAg
ICBpZiAocGF0Y2gtPnR5cGUoKSAhPSBWb2lkKQorICAgICAgICBvZmZzZXQrKzsKKworICAgIHBh
dGNoLT5lZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOworICAgIHBhdGNoLT5hcHBlbmRWZWN0
b3JXaXRoUmVwKHN0YWNrbWFwLCBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpOworCisgICAgcmV0dXJu
IFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgeyBtX2NhbGxTaXRlSW5kZXgsIG9mZnNldCB9Owor
fQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiBk
YXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVmFsdWUq
IG9wZXJhdGlvblJlc3VsdCA9IGVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5kOjpDYXRjaCwgZGF0YSwg
ZXhjZXB0aW9uSW5kZXgpOworICAgIFZhbHVlKiBwYXlsb2FkID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxFeHRyYWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXJUeXBlKCksIG9w
ZXJhdGlvblJlc3VsdCwgMSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUu
YXJndW1lbnQoaSk7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUodHlwZSksIG9yaWdpbigp
LCBwYXlsb2FkLCBpICogc2l6ZW9mKHVpbnQ2NF90KSk7CisgICAgICAgIHJlc3VsdHMuYXBwZW5k
KHB1c2godmFsdWUpKTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYXRjaEFsbChTdGFjayYgY3VycmVudFN0YWNrLCBDb250cm9sVHlwZSYgZGF0
YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRT
dGFjaywgZGF0YSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSht
X3Byb2MsIEp1bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgcmV0dXJuIGFk
ZENhdGNoQWxsVG9VbnJlYWNoYWJsZShkYXRhKTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBlbWl0Q2F0Y2hJbXBsKENhdGNoS2luZDo6Q2F0Y2hBbGwsIGRhdGEpOworICAg
IHJldHVybiB7IH07Cit9CisKK1ZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2F0Y2hJbXBsKENh
dGNoS2luZCBraW5kLCBDb250cm9sVHlwZSYgZGF0YSwgdW5zaWduZWQgZXhjZXB0aW9uSW5kZXgp
Cit7CisgICAgbV9oYXNDYXRjaCA9IHRydWU7CisgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Byb2Mu
YWRkQmxvY2soKTsKKyAgICBtX3Jvb3RCbG9ja3MuYXBwZW5kKG1fY3VycmVudEJsb2NrKTsKKyAg
ICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCk7CisKKyAgICBpZiAoQ29udHJvbFR5cGU6
OmlzVHJ5KGRhdGEpKSB7CisgICAgICAgIGlmIChraW5kID09IENhdGNoS2luZDo6Q2F0Y2gpCisg
ICAgICAgICAgICBkYXRhLmNvbnZlcnRUcnlUb0NhdGNoKCsrbV9jYWxsU2l0ZUluZGV4LCBtX3By
b2MuYWRkVmFyaWFibGUocG9pbnRlclR5cGUoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBkYXRhLmNvbnZlcnRUcnlUb0NhdGNoQWxsKCsrbV9jYWxsU2l0ZUluZGV4LCBtX3Byb2MuYWRk
VmFyaWFibGUocG9pbnRlclR5cGUoKSkpOworICAgIH0KKworICAgIEhhbmRsZXJUeXBlIGhhbmRs
ZXJUeXBlID0ga2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoID8gSGFuZGxlclR5cGU6OkNhdGNoIDog
SGFuZGxlclR5cGU6OkNhdGNoQWxsOworICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKHsg
aGFuZGxlclR5cGUsIGRhdGEudHJ5U3RhcnQoKSwgZGF0YS50cnlFbmQoKSwgMCwgbV90cnlEZXB0
aCwgZXhjZXB0aW9uSW5kZXggfSk7CisKKyAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0
ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZh
bHVlKCksIG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIGZhbHNlKTsKKworICAgIFZhbHVlKiBwb2lu
dGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihtX3Byb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworCisgICAgdW5zaWduZWQgaW5kZXhJ
bkJ1ZmZlciA9IDA7CisKKyAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCisgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9y
aWdpbigpLCBsb2NhbCwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKGluZGV4SW5CdWZmZXIsIHBvaW50
ZXIsIGxvY2FsLT50eXBlKCkpKTsKKworICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0g
MDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250
cm9sSW5kZXgpIHsKKyAgICAgICAgYXV0byYgY29udHJvbERhdGEgPSBtX3BhcnNlci0+Y29udHJv
bFN0YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKKyAgICAgICAgYXV0byYgZXhwcmVz
c2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9z
ZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGNvbm5lY3RDb250cm9sRW50cnkoaW5kZXhJbkJ1
ZmZlciwgcG9pbnRlciwgY29udHJvbERhdGEsIGV4cHJlc3Npb25TdGFjaywgZGF0YSk7CisgICAg
fQorCisgICAgUGF0Y2hwb2ludFZhbHVlKiByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBtX3Byb2MuYWRkVHVwbGUoeyBwb2ludGVyVHlw
ZSgpLCBwb2ludGVyVHlwZSgpIH0pLCBvcmlnaW4oKSk7CisgICAgcmVzdWx0LT5lZmZlY3RzLmV4
aXRzU2lkZXdheXMgPSB0cnVlOworICAgIHJlc3VsdC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFj
cm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJMYXRlID0gUmVn
aXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCk7CisgICAgY2xvYmJlckxhdGUu
YWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcmVzdWx0LT5jbG9iYmVyTGF0ZShjbG9i
YmVyTGF0ZSk7CisgICAgcmVzdWx0LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6
U29tZVJlZ2lzdGVyKTsKKyAgICByZXN1bHQtPnJlc3VsdENvbnN0cmFpbnRzLmFwcGVuZChWYWx1
ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcmVzdWx0LT5yZXN1bHRD
b25zdHJhaW50cy5hcHBlbmQoVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIp
KTsKKyAgICByZXN1bHQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIGppdC5tb3Zl
KHBhcmFtc1syXS5ncHIoKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBq
aXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlKSk7CisgICAg
ICAgIH0pOworICAgIH0pOworCisgICAgVmFsdWUqIGV4Y2VwdGlvbiA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyVHlwZSgp
LCByZXN1bHQsIDApOworICAgIHNldChkYXRhLmV4Y2VwdGlvbigpLCBleGNlcHRpb24pOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZShD
b250cm9sVHlwZSYgdGFyZ2V0LCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJldHVybiBhZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUodGFyZ2V0LCBkYXRhKTsKK30K
KworYXV0byBCM0lSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5
cGUmIHRhcmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1
bnNpZ25lZCB0YXJnZXREZXB0aCA9IDA7CisgICAgaWYgKENvbnRyb2xUeXBlOjppc1RyeSh0YXJn
ZXQpKQorICAgICAgICB0YXJnZXREZXB0aCA9IHRhcmdldC50cnlEZXB0aCgpOworCisgICAgbV9l
eGNlcHRpb25IYW5kbGVycy5hcHBlbmQoeyBIYW5kbGVyVHlwZTo6RGVsZWdhdGUsIGRhdGEudHJ5
U3RhcnQoKSwgKyttX2NhbGxTaXRlSW5kZXgsIDAsIG1fdHJ5RGVwdGgsIHRhcmdldERlcHRoIH0p
OworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGhyb3codW5z
aWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFN0YWNr
JikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBtX3By
b2MuYWRkPFBhdGNocG9pbnRWYWx1ZT4oQjM6OlZvaWQsIG9yaWdpbigpKTsKKyAgICBwYXRjaC0+
ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7CisgICAgcGF0Y2gtPmFwcGVuZChpbnN0YW5jZVZhbHVl
KCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBhcmdzLnNpemUoKTsgKytpKQorICAgICAgICBwYXRjaC0+YXBwZW5kKGdldChhcmdzW2ldKSwg
VmFsdWVSZXA6OnN0YWNrQXJndW1lbnQoaSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAg
ICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwor
ICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJMYXRlID0gUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0
ZXJzRm9ySlNDYWxsKCk7CisgICAgY2xvYmJlckxhdGUuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgY2xvYmJlckxhdGUuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgY2xv
YmJlckxhdGUuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgY2xvYmJlckxhdGUuYWRk
KEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgcGF0Y2gtPmNsb2JiZXJMYXRlKGNsb2JiZXJM
YXRlKTsKKyAgICBwYXRjaC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9u
cyhtX2N1cnJlbnRCbG9jaywgcGF0Y2gpOworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3RoaXMs
IGV4Y2VwdGlvbkluZGV4LCBoYW5kbGVdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2ggPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBw
YXJhbXMsIHRoaXMpOworCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCBzY3JhdGNoKTsK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBqaXQu
YnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2gsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxpZ25tZW50KSk7CisgICAg
ICAgICAgICBqaXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9j
azo6YmxvY2tNYXNrKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFy
a2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBh
dXRvIGxvYWRlZENhc2UgPSBqaXQuanVtcCgpOworCisgICAgICAgICAgICBwcmVjaXNlQWxsb2Nh
dGlvbkNhc2UubGluaygmaml0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoLCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkg
KyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgp
KSwgc2NyYXRjaCk7CisKKyAgICAgICAgICAgIGxvYWRlZENhc2UubGluaygmaml0KTsKKyAgICAg
ICAgfQorICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcihzY3JhdGNoKTsKKworICAgICAgICBqaXQubW92ZShwYXJhbXNbMF0uZ3ByKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4Y2VwdGlvbkluZGV4KSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIyKTsKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKKyAgICAg
ICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uV2FzbVRocm93KSk7CisgICAgICAgIH0pOworICAgIH0pOworICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmQocGF0Y2gpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9sVHlwZSYgZGF0YSkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBtX3Byb2MuYWRk
PFBhdGNocG9pbnRWYWx1ZT4oQjM6OlZvaWQsIG9yaWdpbigpKTsKKyAgICBwYXRjaC0+Y2xvYmJl
cihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgIFJlZ2lzdGVyU2V0
IGNsb2JiZXJMYXRlOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGNsb2Ji
ZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIHBhdGNoLT5lZmZlY3RzLnRl
cm1pbmFsID0gdHJ1ZTsKKyAgICBwYXRjaC0+YXBwZW5kKGluc3RhbmNlVmFsdWUoKSwgVmFsdWVS
ZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2gtPmFwcGVuZFNvbWVSZWdpc3RlcihmcmFtZVBv
aW50ZXIoKSk7CisgICAgcGF0Y2gtPmFwcGVuZChnZXQoZGF0YS5leGNlcHRpb24oKSksIFZhbHVl
UmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNoLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAx
OworICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFuZGxlID0gcHJlcGFyZVBhdGNocG9p
bnRGb3JFeGNlcHRpb25zKG1fY3VycmVudEJsb2NrLCBwYXRjaCk7CisgICAgcGF0Y2gtPnNldEdl
bmVyYXRvcihbdGhpcywgaGFuZGxlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2ggPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwg
c2NyYXRjaCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25D
YXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVu
dCkpOworICAgICAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
TWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkZv
b3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIHNjcmF0Y2gpOworICAg
ICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAoKTsKKworICAgICAgICAgICAgcHJl
Y2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9m
V2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246Omhl
YWRlclNpemUoKSksIHNjcmF0Y2gpOworCisgICAgICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmpp
dCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7CisKKyAgICAgICAgaml0Lm1vdmUocGFyYW1zWzBd
LmdwcigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBqaXQubW92ZShwYXJhbXNb
MV0uZ3ByKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIGppdC5tb3ZlKHBhcmFt
c1syXS5ncHIoKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICAgICAgaGFuZGxlLmdlbmVy
YXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwg
PSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CisgICAgICAgIGppdC5h
ZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbldhc21SZXRocm93KSk7CisgICAgICAgIH0pOworICAgIH0pOworICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmQocGF0Y2gpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwogYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJu
VmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21DYWxs
SW5mbyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcihtX3BhcnNl
ci0+c2lnbmF0dXJlKCksIENhbGxSb2xlOjpDYWxsZWUpOwpAQCAtMjMwMCwxMCArMjgyMywxMCBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0
IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+CiAgICAgICAgIEIzOjpWYWx1ZVJlcCByZXAgPSB3YXNt
Q2FsbEluZm8ucmVzdWx0c1tpXTsKICAgICAgICAgaWYgKHJlcC5pc1N0YWNrKCkpIHsKICAgICAg
ICAgICAgIEIzOjpWYWx1ZSogYWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6
OlZhbHVlPihtX3Byb2MsIEIzOjpBZGQsIE9yaWdpbigpLCBmcmFtZVBvaW50ZXIoKSwgY29uc3Rh
bnQocG9pbnRlclR5cGUoKSwgcmVwLm9mZnNldEZyb21GUCgpKSk7Ci0gICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4obV9wcm9jLCBCMzo6U3RvcmUs
IE9yaWdpbigpLCByZXR1cm5WYWx1ZXNbb2Zmc2V0ICsgaV0sIGFkZHJlc3MpOworICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6TWVtb3J5VmFsdWU+KG1fcHJvYywgQjM6
OlN0b3JlLCBPcmlnaW4oKSwgZ2V0KHJldHVyblZhbHVlc1tvZmZzZXQgKyBpXSksIGFkZHJlc3Mp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKHJlcC5pc1JlZygpKTsKLSAg
ICAgICAgICAgIHBhdGNoLT5hcHBlbmQocmV0dXJuVmFsdWVzW29mZnNldCArIGldLCByZXApOwor
ICAgICAgICAgICAgcGF0Y2gtPmFwcGVuZChnZXQocmV0dXJuVmFsdWVzW29mZnNldCArIGldKSwg
cmVwKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjMxMywxMiArMjgzNiwxMiBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJiBy
ZXR1cm5WYWx1ZXMpIC0+CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xE
YXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFN0YWNrJiByZXR1cm5W
YWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhyZXR1
cm5WYWx1ZXMsIGRhdGEucGhpcyk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFs
dWVzLCBkYXRhKTsKIAogICAgIEJhc2ljQmxvY2sqIHRhcmdldCA9IGRhdGEudGFyZ2V0QmxvY2tG
b3JCcmFuY2goKTsKICAgICBpZiAoY29uZGl0aW9uKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGNv
bnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBjb25kaXRpb24p
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpC
cmFuY2gsIG9yaWdpbigpLCBnZXQoY29uZGl0aW9uKSk7CiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQpLCBGcmVxdWVudGVkQmxvY2so
Y29udGludWF0aW9uKSk7CiAgICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50
QmxvY2spOwogICAgICAgICBjb250aW51YXRpb24tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJs
b2NrKTsKQEAgLTIzMzMsMTEgKzI4NTYsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRCcmFu
Y2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QKIAog
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBj
b25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRU
YXJnZXQsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsK
KyAgICBVTlVTRURfUEFSQU0oZXhwcmVzc2lvblN0YWNrKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2Nr
KGV4cHJlc3Npb25TdGFjaywgdGFyZ2V0c1tpXS0+cGhpcyk7Ci0gICAgdW5pZnlWYWx1ZXNXaXRo
QmxvY2soZXhwcmVzc2lvblN0YWNrLCBkZWZhdWx0VGFyZ2V0LnBoaXMpOworICAgICAgICB1bmlm
eVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssICp0YXJnZXRzW2ldKTsKKyAgICB1bmlm
eVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRlZmF1bHRUYXJnZXQpOwogCi0gICAg
U3dpdGNoVmFsdWUqIHN3aXRjaFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxTd2l0
Y2hWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgY29uZGl0aW9uKTsKKyAgICBTd2l0Y2hWYWx1ZSog
c3dpdGNoVmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFN3aXRjaFZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBnZXQoY29uZGl0aW9uKSk7CiAgICAgc3dpdGNoVmFsdWUtPnNldEZhbGxU
aHJvdWdoKEZyZXF1ZW50ZWRCbG9jayhkZWZhdWx0VGFyZ2V0LnRhcmdldEJsb2NrRm9yQnJhbmNo
KCkpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgIHN3aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3aXRjaENhc2UoaSwgRnJlcXVlbnRlZEJs
b2NrKHRhcmdldHNbaV0tPnRhcmdldEJsb2NrRm9yQnJhbmNoKCkpKSk7CkBAIC0yMzUxLDcgKzI4
NzUsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnks
IFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFBhcgogCiAgICAgQVNTRVJUKGV4cHJlc3Npb25T
dGFjay5zaXplKCkgPT0gZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKSk7CiAgICAgaWYg
KGRhdGEuYmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBlOjpMb29wKQotICAgICAgICB1bmlmeVZhbHVl
c1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEucGhpcyk7CisgICAgICAgIHVuaWZ5VmFs
dWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGF0YSk7CiAKICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGRhdGEuY29u
dGludWF0aW9uKTsKICAgICBkYXRhLmNvbnRpbnVhdGlvbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJy
ZW50QmxvY2spOwpAQCAtMjM2MywzMCArMjg4NywzNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2smIGV4cHJl
cwogewogICAgIENvbnRyb2xEYXRhJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CiAgICAgbV9j
dXJyZW50QmxvY2sgPSBkYXRhLmNvbnRpbnVhdGlvbjsKKyAgICBtX3N0YWNrU2l6ZSA9IGRhdGEu
c3RhY2tTaXplKCk7CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Oklm
KSB7CiAgICAgICAgIGRhdGEuc3BlY2lhbC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywg
SnVtcCwgb3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFkZFByZWRlY2Vzc29yKGRhdGEuc3BlY2lhbCk7Ci0gICAgfQorICAgIH0gZWxzZSBpZiAoZGF0
YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBkYXRhLmJsb2NrVHlwZSgpID09IEJs
b2NrVHlwZTo6Q2F0Y2gpCisgICAgICAgIC0tbV90cnlEZXB0aDsKIAogICAgIGlmIChkYXRhLmJs
b2NrVHlwZSgpICE9IEJsb2NrVHlwZTo6TG9vcCkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsgKytpKSB7CiAgICAgICAg
ICAgICBWYWx1ZSogcmVzdWx0ID0gZGF0YS5waGlzW2ldOwogICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZChyZXN1bHQpOwotICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNz
aW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRhdGEuc2lnbmF0dXJlKCktPnJldHVyblR5cGUo
aSksIHJlc3VsdCk7CisgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5j
b25zdHJ1Y3RBbmRBcHBlbmQoZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSwgcHVzaChy
ZXN1bHQpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fb3V0ZXJMb29wcy5y
ZW1vdmVMYXN0KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25h
dHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpIDwgZXhwcmVz
c2lvblN0YWNrLnNpemUoKSkKKyAgICAgICAgICAgIGlmIChpIDwgZXhwcmVzc2lvblN0YWNrLnNp
emUoKSkgeworICAgICAgICAgICAgICAgICsrbV9zdGFja1NpemU7CiAgICAgICAgICAgICAgICAg
ZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGV4cHJlc3Npb25TdGFja1tpXSk7
Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgVHlwZSByZXR1cm5UeXBlID0gZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKTsKLSAg
ICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRB
cHBlbmQocmV0dXJuVHlwZSwgY29uc3RhbnQodG9CM1R5cGUocmV0dXJuVHlwZSksIDB4YmJhZGJl
ZWYpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb25z
dHJ1Y3RBbmRBcHBlbmQocmV0dXJuVHlwZSwgcHVzaChjb25zdGFudCh0b0IzVHlwZShyZXR1cm5U
eXBlKSwgMHhiYmFkYmVlZikpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAor
CiAgICAgLy8gVG9wTGV2ZWwgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBhZnRlciB0aGlzIHNvIHdl
IG5lZWQgdG8gbWFrZSBzdXJlIHdlIGVtaXQgYSByZXR1cm4gaGVyZS4KICAgICBpZiAoZGF0YS5i
bG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsKQogICAgICAgICByZXR1cm4gYWRkUmV0
dXJuKGVudHJ5LmNvbnRyb2xEYXRhLCBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CkBA
IC0yNDAwLDEyICsyOTI4LDEyIEBAIEIzOjpWYWx1ZSogQjNJUkdlbmVyYXRvcjo6Y3JlYXRlQ2Fs
bFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmxvY2ssIE9yaWdpbiBvcmlnaW4sCiAgICAgVmVjdG9y
PEIzOjpDb25zdHJhaW5lZFZhbHVlPiBjb25zdHJhaW5lZEFyZ3VtZW50czsKICAgICBDYWxsSW5m
b3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9y
bWF0aW9uRm9yKHNpZ25hdHVyZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Mu
c2l6ZSgpOyArK2kpCi0gICAgICAgIGNvbnN0cmFpbmVkQXJndW1lbnRzLmFwcGVuZChCMzo6Q29u
c3RyYWluZWRWYWx1ZShhcmdzW2ldLCB3YXNtQ2FsbEluZm8ucGFyYW1zW2ldKSk7CisgICAgICAg
IGNvbnN0cmFpbmVkQXJndW1lbnRzLmFwcGVuZChCMzo6Q29uc3RyYWluZWRWYWx1ZShnZXQoYmxv
Y2ssIGFyZ3NbaV0pLCB3YXNtQ2FsbEluZm8ucGFyYW1zW2ldKSk7CiAKICAgICBtX3Byb2MucmVx
dWVzdENhbGxBcmdBcmVhU2l6ZUluQnl0ZXMoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNr
QWxpZ25tZW50Qnl0ZXMoKSwgd2FzbUNhbGxJbmZvLmhlYWRlckFuZEFyZ3VtZW50U3RhY2tTaXpl
SW5CeXRlcykpOwogCiAgICAgQjM6OlR5cGUgcmV0dXJuVHlwZSA9IHRvQjNSZXN1bHRUeXBlKCZz
aWduYXR1cmUpOwotICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+
YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgcmV0dXJuVHlwZSwgb3JpZ2lu
KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX3Byb2MuYWRkPFBhdGNocG9p
bnRWYWx1ZT4ocmV0dXJuVHlwZSwgb3JpZ2luKTsKICAgICBwYXRjaHBvaW50LT5jbG9iYmVyRWFy
bHkoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKICAgICBwYXRjaHBvaW50
LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7
CiAgICAgcGF0Y2hwb2ludEZ1bmN0b3IocGF0Y2hwb2ludCk7CkBAIC0yNDE3LDYgKzI5NDUsNyBA
QCBCMzo6VmFsdWUqIEIzSVJHZW5lcmF0b3I6OmNyZWF0ZUNhbGxQYXRjaHBvaW50KEJhc2ljQmxv
Y2sqIGJsb2NrLCBPcmlnaW4gb3JpZ2luLAogICAgICAgICAgICAgcmVzdWx0Q29uc3RyYWludHMu
YXBwZW5kKEIzOjpWYWx1ZVJlcCh2YWx1ZUxvY2F0aW9uKSk7CiAgICAgICAgIHBhdGNocG9pbnQt
PnJlc3VsdENvbnN0cmFpbnRzID0gV1RGTW92ZShyZXN1bHRDb25zdHJhaW50cyk7CiAgICAgfQor
ICAgIGJsb2NrLT5hcHBlbmQocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHBhdGNocG9pbnQ7CiB9
CiAKQEAgLTI0MzgsMTEgKzI5NjcsMTEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPEIzOjpUeXBlPiYgdHVwbGUgPSBtX3Byb2MudHVwbGVGb3JUeXBl
KHJldHVyblR5cGUpOwogICAgICAgICAgICAgQVNTRVJUKHNpZ25hdHVyZS5yZXR1cm5Db3VudCgp
ID09IHR1cGxlLnNpemUoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2lnbmF0dXJlLnJldHVybkNvdW50KCk7ICsraSkKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFw
cGVuZChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgdHVwbGVbaV0sIGNhbGxSZXN1bHQsIGkpKTsKKyAgICAgICAgICAgICAgICByZXN1bHRz
LmFwcGVuZChwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8RXh0cmFjdFZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCB0dXBsZVtpXSwgY2FsbFJlc3VsdCwgaSkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKGNhbGxSZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaChjYWxs
UmVzdWx0KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICB9CkBAIC0y
NDcxLDggKzMwMDAsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICAgICAgICAg
IC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBzb21l
dGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVy
TGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZykpOwotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICBQ
YXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhj
ZXB0aW9ucyhpc1dhc21CbG9jaywgcGF0Y2hwb2ludCk7CisgICAgICAgICAgICAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBoYW5kbGUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFy
Q2FsbCgpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewogICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFw
cGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2Fs
bCksIGZ1bmN0aW9uSW5kZXggfSk7CkBAIC0yNDk4LDggKzMwMjksMTAgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLAogICAgICAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUg
d2UgY291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcu
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgp
LnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwotICAgICAgICAgICAgICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbcmV0dXJuVHlwZV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
ICAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50
Rm9yRXhjZXB0aW9ucyhpc0VtYmVkZGVyQmxvY2ssIHBhdGNocG9pbnQpOworICAgICAgICAgICAg
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdGhpcywgaGFuZGxlLCByZXR1cm5UeXBlXSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgewogICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5nZW5lcmF0
ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFt
c1twYXJhbXMucHJvYygpLnJlc3VsdENvdW50KHJldHVyblR5cGUpXS5ncHIoKSwgV2FzbUVudHJ5
UHRyVGFnKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pKTsKQEAgLTI1Mjcs
OCArMzA2MCwxMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgLy8g
V2UgbmVlZCB0byBjbG9iYmVyIHRoZSBzaXplIHJlZ2lzdGVyIHNpbmNlIHRoZSBMTEludCBhbHdh
eXMgYm91bmRzIGNoZWNrcwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTWVtb3J5TW9k
ZTo6U2lnbmFsaW5nIHx8IG1faW5mby5tZW1vcnkuaXNTaGFyZWQoKSkKICAgICAgICAgICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQgeyBQaW5uZWRSZWdpc3Rl
ckluZm86OmdldCgpLmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyIH0pOwotICAgICAgICAgICAg
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1
bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
IGhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhtX2N1cnJlbnRCbG9jaywg
cGF0Y2hwb2ludCk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt0
aGlzLCBoYW5kbGUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShq
aXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwogICAgICAgICAgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBm
dW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAg
ICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7
CkBAIC0yNTQzLDcgKzMwNzgsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMy
X3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAKIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRM
aXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgRXhwcmVzc2lvblR5cGUgY2Fs
bGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CisgICAgVmFsdWUqIGNhbGxlZUluZGV4ID0gZ2V0
KGFyZ3MudGFrZUxhc3QoKSk7CiAgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkg
PT0gYXJncy5zaXplKCkpOwogCiAgICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsKQEAgLTI1NTIsMTEg
KzMwODcsMTEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQg
dGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKICAgICAvLyBjYW4gYmUgdG8gdGhl
IGVtYmVkZGVyIGZvciBvdXIgc3RhY2sgY2hlY2sgY2FsY3VsYXRpb24uCiAgICAgbV9tYXhOdW1K
U0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CiAKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxs
YWJsZUZ1bmN0aW9uQnVmZmVyOwotICAgIEV4cHJlc3Npb25UeXBlIGluc3RhbmNlc0J1ZmZlcjsK
LSAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoOworICAgIFZh
bHVlKiBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyOworICAgIFZhbHVlKiBpbnN0YW5jZXNCdWZmZXI7
CisgICAgVmFsdWUqIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGg7CiAgICAgewotICAgICAg
ICBFeHByZXNzaW9uVHlwZSB0YWJsZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgIFZh
bHVlKiB0YWJsZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgICAgICBpbnN0YW5jZVZh
bHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZlRhYmxlUHRyKG1fbnVt
SW1wb3J0RnVuY3Rpb25zLCB0YWJsZUluZGV4KSkpOwogICAgICAgICBjYWxsYWJsZUZ1bmN0aW9u
QnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2Fz
dDxpbnQzMl90PihGdW5jUmVmVGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpKTsKQEAgLTI1Nzgs
MTcgKzMxMTMsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWdu
ZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKIAogICAgIGNhbGxlZUluZGV4
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdp
bigpLCBjYWxsZWVJbmRleCk7CiAKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9u
OworICAgIFZhbHVlKiBjYWxsYWJsZUZ1bmN0aW9uOwogICAgIHsKICAgICAgICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0IGluIHRoZSB0YWJsZSBpbmRleCBzcGFjZSB3ZSBhcmUgbG9va2luZyBmb3Iu
Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKKyAgICAgICAgVmFsdWUqIG9mZnNldCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwK
ICAgICAgICAgICAgIGNhbGxlZUluZGV4LCBjb25zdGFudChwb2ludGVyVHlwZSgpLCBzaXplb2Yo
V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbikpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlv
biA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4o
KSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgb2Zmc2V0KTsKIAogICAgICAgICAvLyBDaGVjayB0
aGF0IHRoZSBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0
cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5kaWNhdGVzIGl0
J3Mgbm90IGluaXRpYWxpemVkLgogICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBoYXZlIHRyYXAg
aGFuZGxlcnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2UgU2lnbmF0dXJl
OjppbnZhbGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NzIxMAogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihXYXNtVG9XYXNtSW1wb3J0
YWJsZUZ1bmN0aW9uOjpzaWduYXR1cmVJbmRleCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIkxvYWQg
Y29kZWdlbiBhc3N1bWVzIGk2NCIpOwotICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWdu
YXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQz
Ml90PihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZlNpZ25hdHVyZUluZGV4
KCkpKTsKKyAgICAgICAgVmFsdWUqIGNhbGxlZVNpZ25hdHVyZUluZGV4ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2NCwgb3JpZ2luKCks
IGNhbGxhYmxlRnVuY3Rpb24sIHNhZmVDYXN0PGludDMyX3Q+KFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSkpOwogICAgICAgICB7CiAgICAgICAg
ICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tW
YWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCiAgICAgICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksCkBAIC0yNjAy
LDcgKzMxMzcsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25l
ZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdAogCiAgICAgICAgIC8vIENoZWNr
IHRoZSBzaWduYXR1cmUgbWF0Y2hlcyB0aGUgdmFsdWUgd2UgZXhwZWN0LgogICAgICAgICB7Ci0g
ICAgICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIFNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlKSk7CisgICAgICAgICAgICBWYWx1ZSogZXhw
ZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVy
ZSkpOwogICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAogICAgICAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTm90RXF1YWwsIG9y
aWdpbigpLCBjYWxsZWVTaWduYXR1cmVJbmRleCwgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCkpOwog
CkBAIC0yNjE2LDcgKzMxNTEsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVj
dCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdAogICAgICAgICBj
YWxsZWVJbmRleCwgY29uc3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9mKEluc3RhbmNlKikpKTsK
ICAgICBWYWx1ZSogY2FsbGVlSW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCks
IGluc3RhbmNlc0J1ZmZlciwgb2Zmc2V0KSk7Ci0gICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29k
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgVmFsdWUqIGNhbGxlZUNvZGUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0
aW9uLAogICAgICAgICAgICAgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbjo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkpKSk7CiAKQEAgLTI2MjUs
NyArMzE2MCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVk
IHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0CiAKIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZSA9IGFyZ3MudGFrZUxhc3QoKTsKKyAgICBWYWx1ZSog
Y2FsbGVlID0gZ2V0KGFyZ3MudGFrZUxhc3QoKSk7CiAgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CiAK
QEAgLTI2NDIsMjQgKzMxNzcsMjcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGUKICAgICBWYWx1
ZSogY2FsbGVlSW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGpzQ2FsbGVl
SW5zdGFuY2UsIGluc3RhbmNlT2Zmc2V0KSk7CiAKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVD
b2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICBWYWx1ZSogY2FsbGVlQ29kZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5
cGUoKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNhbGxlZSwKICAg
ICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+KFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpvZmZz
ZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSkpKTsKIAogICAgIHJldHVybiBlbWl0SW5kaXJl
Y3RDYWxsKGNhbGxlZUluc3RhbmNlLCBjYWxsZWVDb2RlLCBzaWduYXR1cmUsIGFyZ3MsIHJlc3Vs
dHMpOwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBl
IHBoaSwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291cmNlKQordm9pZCBCM0lSR2VuZXJhdG9yOjp1
bmlmeShWYWx1ZSogcGhpLCBjb25zdCBFeHByZXNzaW9uVHlwZSBzb3VyY2UpCiB7Ci0gICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHNv
dXJjZSwgcGhpKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgZ2V0KHNvdXJjZSksIHBoaSk7CiB9CiAKLXZvaWQgQjNJUkdlbmVy
YXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgU3RhY2smIHJlc3VsdFN0YWNrLCBjb25z
dCBSZXN1bHRMaXN0JiByZXN1bHQpCit2b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0
aEJsb2NrKGNvbnN0IFN0YWNrJiByZXN1bHRTdGFjaywgY29uc3QgQ29udHJvbERhdGEmIGJsb2Nr
KQogewotICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpIDw9IHJlc3VsdFN0YWNrLnNpemUoKSk7Cisg
ICAgY29uc3QgVmVjdG9yPFZhbHVlKj4mIHBoaXMgPSBibG9jay5waGlzOworICAgIHNpemVfdCBy
ZXN1bHRTaXplID0gcGhpcy5zaXplKCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJl
c3VsdC5zaXplKCk7ICsraSkKLSAgICAgICAgdW5pZnkocmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAx
IC0gaV0sIHJlc3VsdFN0YWNrLmF0KHJlc3VsdFN0YWNrLnNpemUoKSAtIDEgLSBpKSk7CisgICAg
QVNTRVJUKHJlc3VsdFNpemUgPD0gcmVzdWx0U3RhY2suc2l6ZSgpKTsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVzdWx0U2l6ZTsgKytpKQorICAgICAgICB1bmlmeShwaGlzW3Jlc3Vs
dFNpemUgLSAxIC0gaV0sIHJlc3VsdFN0YWNrLmF0KHJlc3VsdFN0YWNrLnNpemUoKSAtIDEgLSBp
KSk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBFeHByZXNzaW9uU3RhY2soY29uc3QgQ29tbWFQcmlu
dGVyJiBjb21tYSwgY29uc3QgQjNJUkdlbmVyYXRvcjo6U3RhY2smIGV4cHJlc3Npb25TdGFjaykK
QEAgLTI3MDMsOCArMzI0MSwxMSBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQwogCiAgICAgY29t
cGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxI
ZWxwZXJzPigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IG1h
a2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5wcm9jZWR1
cmUgPSBtYWtlVW5pcXVlPFByb2NlZHVyZT4oKTsKKworICAgIFByb2NlZHVyZSYgcHJvY2VkdXJl
ID0gKmNvbXBpbGF0aW9uQ29udGV4dC5wcm9jZWR1cmU7CiAKLSAgICBQcm9jZWR1cmUgcHJvY2Vk
dXJlOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IG1ha2VVbmlx
dWU8Q0NhbGxIZWxwZXJzPigpOwogCiAgICAgcHJvY2VkdXJlLnNldE9yaWdpblByaW50ZXIoW10g
KFByaW50U3RyZWFtJiBvdXQsIE9yaWdpbiBvcmlnaW4pIHsKICAgICAgICAgaWYgKG9yaWdpbi5k
YXRhKCkpCkBAIC0yNzI1LDYgKzMyNjYsNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQwogICAg
IEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rp
b24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIGluZm8pOwog
ICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCisgICAgaXJH
ZW5lcmF0b3IuaW5zZXJ0RW50cnlTd2l0Y2goKTsKICAgICBpckdlbmVyYXRvci5pbnNlcnRDb25z
dGFudHMoKTsKIAogICAgIHByb2NlZHVyZS5yZXNldFJlYWNoYWJpbGl0eSgpOwpAQCAtMjczNiwx
OCArMzI3OCw0MyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4s
IFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQwogICAgIGRhdGFMb2dJZihXYXNt
QjNJUkdlbmVyYXRvckludGVybmFsOjp2ZXJib3NlLCAiUG9zdCBTU0E6ICIsIHByb2NlZHVyZSk7
CiAgICAgCiAgICAgeworICAgICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNvbXBp
bGF0aW9uTW9kZSkpCisgICAgICAgICAgICBwcm9jZWR1cmUuY29kZSgpLnNldERpc2Fzc2VtYmxl
cihtYWtlVW5pcXVlPEIzOjpBaXI6OkRpc2Fzc2VtYmxlcj4oKSk7CiAgICAgICAgIEIzOjpwcmVw
YXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUpOwogICAgICAgICBCMzo6Z2VuZXJhdGUocHJvY2Vk
dXJlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUKTsKICAgICAgICAgY29t
cGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cyA9IHByb2NlZHVyZS5yZWxl
YXNlQnlwcm9kdWN0cygpOwogICAgICAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJl
Z2lzdGVycyA9IHByb2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKICAg
ICB9CiAKKyAgICByZXN1bHQtPnN0YWNrbWFwcyA9IGlyR2VuZXJhdG9yLnRha2VTdGFja21hcHMo
KTsKKyAgICByZXN1bHQtPmV4Y2VwdGlvbkhhbmRsZXJzID0gaXJHZW5lcmF0b3IudGFrZUV4Y2Vw
dGlvbkhhbmRsZXJzKCk7CisKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIGNvbXB1dGVF
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5j
dGlvbiwgY29uc3QgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0LCBMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKQoreworICAgIGlmICghY29udGV4dC5wcm9jZWR1cmUpCisgICAgICAgIHJldHVybjsK
KworICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDA7CisgICAgdW5zaWduZWQgbnVtRW50
cnlwb2ludHMgPSBjb250ZXh0LnByb2NlZHVyZS0+bnVtRW50cnlwb2ludHMoKTsKKyAgICBmb3Ig
KGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXJJbmZvIDogZnVuY3Rpb24tPmV4Y2Vw
dGlvbkhhbmRsZXJzKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5cG9pbnRJbmRleCA8
IG51bUVudHJ5cG9pbnRzKTsKKyAgICAgICAgaWYgKGhhbmRsZXJJbmZvLm1fdHlwZSA9PSBIYW5k
bGVyVHlwZTo6RGVsZWdhdGUpIHsKKyAgICAgICAgICAgIGhhbmRsZXJzLmFwcGVuZCh7IH0pOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICArK2VudHJ5cG9pbnRJ
bmRleDsKKyAgICAgICAgaGFuZGxlcnMuYXBwZW5kKGxpbmtCdWZmZXIubG9jYXRpb25PZjxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPihjb250ZXh0LnByb2NlZHVyZS0+Y29kZSgpLmVudHJ5cG9pbnRM
YWJlbChlbnRyeXBvaW50SW5kZXgpKSk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5
cG9pbnRJbmRleCA9PSBudW1FbnRyeXBvaW50cyAtIDEpOworfQorCiAvLyBDdXN0b20gd2FzbSBv
cHMuIFRoZXNlIGFyZSB0aGUgb25lcyB0b28gbWVzc3kgdG8gZG8gaW4gd2FzbS5qc29uLgogCi12
b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlIG9wZXJh
dGlvbiwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQpCit2b2lkIEIz
SVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlIG9wZXJhdGlvbiwg
VmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKIHsKICAgICBBU1NFUlQob3BlcmF0aW9uID09IERp
diB8fCBvcGVyYXRpb24gPT0gTW9kIHx8IG9wZXJhdGlvbiA9PSBVRGl2IHx8IG9wZXJhdGlvbiA9
PSBVTW9kKTsKICAgICBjb25zdCBCMzo6VHlwZSB0eXBlID0gbGVmdC0+dHlwZSgpOwpAQCAtMjc3
NiwxMDYgKzMzNDMsMTI1IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9y
RGl2KEIzOjpPcGNvZGUgb3BlcmF0aW9uLCBFeHByZXNzaW9uVHlwZSBsCiB9CiAKIHRlbXBsYXRl
PD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPihFeHByZXNzaW9u
VHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRp
dlM+KEV4cHJlc3Npb25UeXBlIGxlZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9w
Y29kZSBvcCA9IERpdjsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChsZWZ0VmFyKTsKKyAgICBWYWx1
ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwg
bGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gcHVz
aChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwg
RXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1TPihFeHByZXNz
aW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBN
b2Q7CisgICAgVmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0g
Z2V0KHJpZ2h0VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0
KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hpbGwob3ApLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2VT4oRXhwcmVzc2lvblR5cGUgbGVm
dCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZVPihFeHBy
ZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3Ag
PSBVRGl2OworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVlKiByaWdo
dCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCBy
aWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNz
aW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVU+KEV4cHJlc3Npb25UeXBl
IGxlZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVNb2Q7Cisg
ICAgVmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJp
Z2h0VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAg
ICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NERpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJp
Z2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwg
RXhwcmVzc2lvblR5cGUgcmlnaHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gRGl2OworICAgIFZhbHVlKiBs
ZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVlKiByaWdodCA9IGdldChyaWdodFZhcik7CiAg
ICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCkpOwogICAgIHJldHVybiB7
IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFJlbVM+KEV4cHJlc3Npb25UeXBlIGxlZnRWYXIsIEV4cHJlc3Npb25U
eXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7
CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IE1vZDsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChs
ZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVj
a3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hpbGwob3ApLCBvcmlnaW4oKSwgbGVmdCwg
cmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCkpOwogICAgIHJldHVy
biB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjREaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NERpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnRWYXIsIEV4cHJlc3Np
b25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVEaXY7CisgICAgVmFsdWUqIGxlZnQgPSBn
ZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFyKTsKICAgICBlbWl0
Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmln
aHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVU+
KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0UmVtVT4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5cGUgcmln
aHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBj
b25zdCBCMzo6T3Bjb2RlIG9wID0gVU1vZDsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChsZWZ0VmFy
KTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVja3NGb3JN
b2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAg
cmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9w
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0
ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KEV4cHJlc3Npb25UeXBlIGFyZ1Zh
ciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVl
KiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwg
b3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVn
aXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBq
aXQuY291bnRUcmFpbGluZ1plcm9zMzIocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkp
OwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0g
ICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwog
ICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0
Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5jb3VudFRyYWlsaW5nWmVyb3M2NChwYXJh
bXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAg
IHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxh
dGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cith
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUG9wY250PihFeHByZXNzaW9uVHlw
ZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAg
ICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAjaWYgQ1BVKFg4Nl82NCkKICAgICBpZiAoTWFj
cm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9uKCkpIHsKICAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBv
aW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKQEAgLTI4ODQsMTkgKzM0NzAsMjAg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYKICAgICAgICAgICAgIGppdC5jb3VudFBvcHVsYXRp
b24zMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgIH0pOwogICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgICAgICByZXN1
bHQgPSBwYXRjaHBvaW50OworICAgICAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KICNlbmRpZgogCiAgICAgVmFsdWUqIGZ1bmNBZGRyZXNz
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Qb3Bjb3VudDMyKSk7
Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3By
b2MsIEludDMyLCBvcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLCBmdW5jQWRkcmVzcywgYXJnKTsK
KyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4o
bV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwgZnVuY0FkZHJlc3MsIGFy
ZykpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdW
YXIpOwogI2lmIENQVShYODZfNjQpCiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Nv
dW50UG9wdWxhdGlvbigpKSB7CiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0
LCBvcmlnaW4oKSk7CkBAIC0yOTA1LDE5ICszNDkyLDIwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmCiAgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uNjQocGFyYW1zWzFdLmdwcigpLCBw
YXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICB9KTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAg
ICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAjZW5kaWYKIAogICAgIFZhbHVlKiBmdW5jQWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uUG9wY291bnQ2NCkpOwotICAgIHJlc3VsdCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCksIEVm
ZmVjdHM6Om5vbmUoKSwgZnVuY0FkZHJlc3MsIGFyZyk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigp
LCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpKTsKICAgICByZXR1cm4geyB9Owog
fQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPEY2NENvbnZlcnRVSTY0
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Np
b25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAog
eworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9w
cm9jLCBEb3VibGUsIG9yaWdpbigpKTsKICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgcGF0Y2hw
b2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKQEAgLTI5MzIsMTMgKzM1MjAsMTQgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmUKICNlbmRpZgogICAgIH0pOwogICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAg
ICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBs
YXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4o
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJNjQ+KEV4
cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1
ZT4obV9wcm9jLCBGbG9hdCwgb3JpZ2luKCkpOwogICAgIGlmIChpc1g4NigpKQogICAgICAgICBw
YXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwpAQCAtMjk1Myw2NSArMzU0Miw3
MCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJNjQ+KEV4
cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvbgogI2VuZGlmCiAgICAgfSk7CiAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50
OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAog
dGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lYXJlc3Q+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lYXJlc3Q+KEV4cHJl
c3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4o
bV9wcm9jLCBEb3VibGUsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludERvdWJsZShwYXJhbXNbMV0u
ZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3Vs
dCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8Pgot
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFy
Z1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZh
bHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBGbG9h
dCwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAg
ICBqaXQucm91bmRUb3dhcmROZWFyZXN0SW50RmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNb
MF0uZnByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNo
cG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJn
VmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBEb3VibGUsIG9yaWdpbigpKTsKICAg
ICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LnJvdW5kVG93YXJk
WmVyb0RvdWJsZShwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CiAgICAgfSk7CiAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBw
YXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYz
MlRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4o
RXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZh
bHVlPihtX3Byb2MsIEZsb2F0LCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFy
ZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CiAgICAgICAgIGppdC5yb3VuZFRvd2FyZFplcm9GbG9hdChwYXJhbXNbMV0uZnBy
KCksIHBhcmFtc1swXS5mcHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9
IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9
IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2ND4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBh
cmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBW
YWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KERvdWJs
ZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQo
RG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpIC0gMS4wKSk7CiAgICAgVmFsdWUqIG91dE9m
Qm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQs
IG9yaWdpbigpLApAQCAtMzAyOCwxMyArMzYyMiwxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eQogICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFy
YW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0
czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChw
YXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZ1Zhciwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBh
cmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRz
PGludDMyX3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQoRmxvYXQsIGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50MzJfdD46Om1pbigpKSkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMw
NTEsMTQgKzM2NDYsMTUgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRy
dW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRy
dW5jYXRlRmxvYXRUb0ludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAg
ICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJl
c3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICBy
ZXR1cm4geyB9OwogfQogCiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMlRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIp
OwogICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRf
dD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4o
KSkgKiAtMi4wKSk7CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9j
YXN0PHVpbnQ2NF90PigtMS4wKSk7CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzA3
NSwxMyArMzY3MSwxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1
bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1
bmNhdGVEb3VibGVUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAg
ICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICBy
ZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7
CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+
KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkg
KiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQo
RmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0xLjApKSk7
CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzA5OCwxMyArMzY5NSwxNCBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDMyKHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7Cisg
ICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1w
bGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0PihF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJl
c3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0gY29u
c3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC1zdGF0aWNfY2FzdDxkb3VibGU+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOwogICAgIFZhbHVlKiBtaW4g
PSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91
YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSog
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJp
dEFuZCwgb3JpZ2luKCksCkBAIC0zMTIxLDEzICszNzE5LDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5CiAgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50NjQocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBF
ZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBw
dXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJn
VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFs
dWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChEb3VibGUs
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNf
bGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiAtMi4wKSk7CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0
YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PigtMS4wKSk7CiAgICAgVmFsdWUqIG91
dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRB
bmQsIG9yaWdpbigpLApAQCAtMzE2NCwxMyArMzc2MywxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeQogICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb1VpbnQ2NChwYXJhbXNbMV0uZnByKCks
IHBhcmFtc1swXS5ncHIoKSwgc2NyYXRjaCwgY29uc3RhbnQpOwogICAgIH0pOwogICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2lu
dDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAK
IHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NG
MzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4o
RXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXgg
PSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90Pigtc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOwogICAgIFZhbHVlKiBt
aW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxm
bG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CiAgICAgVmFsdWUq
IG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBC
aXRBbmQsIG9yaWdpbigpLApAQCAtMzE4NywxMyArMzc4NywxNCBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvSW50NjQocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBF
ZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBw
dXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJn
VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFs
dWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChGbG9hdCwg
Yml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ2NF90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0yLjApKSk7CiAgICAg
VmFsdWUqIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRp
Y19jYXN0PGZsb2F0PigtMS4wKSkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMy
MzAsNyArMzgzMSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVu
Y1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiAgICAgICAgIGppdC50cnVu
Y2F0ZUZsb2F0VG9VaW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0
Y2gsIGNvbnN0YW50KTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0
czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChw
YXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCAxZDY2MjEwZTFiNTA0M2E5YTQxZmE2
MTNmNTIyNDkzYWVlMzA3NDdhLi4yODkxZDFlNDRmM2FmMzdkODYxOTM0NjZmOWRjOTdlNmI4ZGQ2
MTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmgKQEAgLTQwLDcgKzQwLDEzIEBACiAKIGV4dGVybiAiQyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZv
aWQqKTsKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKK25hbWVzcGFjZSBKU0Mg
eworCituYW1lc3BhY2UgQjMgeworY2xhc3MgUHJvY2VkdXJlOworfQorCituYW1lc3BhY2UgV2Fz
bSB7CiAKIGNsYXNzIE1lbW9yeUluZm9ybWF0aW9uOwogCkBAIC00OCwxMCArNTQsMTMgQEAgc3Ry
dWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENDYWxsSGVscGVy
cz4gZW1iZWRkZXJFbnRyeXBvaW50SklUOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDQ2FsbEhlbHBl
cnM+IHdhc21FbnRyeXBvaW50SklUOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1
Y3RzPiB3YXNtRW50cnlwb2ludEJ5cHJvZHVjdHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpQ
cm9jZWR1cmU+IHByb2NlZHVyZSB7IG51bGxwdHIgfTsKIH07CiAKIEV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGls
YXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRp
b25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JF
bnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0cik7CiAKK3ZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhh
bmRsZXJMb2NhdGlvbnMoVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+PiYgaGFuZGxlcnMsIGNvbnN0IEludGVybmFsRnVuY3Rpb24qLCBjb25zdCBDb21waWxh
dGlvbkNvbnRleHQmLCBMaW5rQnVmZmVyJik7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKaW5kZXggYWYyZmM3MmJhY2JiMzRjOGIzMzU3OGQ5
MDdiMzdjNjAyNDBmYjlmYi4uNDY2YTI2MGJmZjI0OGJkYjQyNTkzYjA0YzcwN2U1ZmI4OTFlYWFj
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApAQCAtNjYs
NiArNjYsNyBAQCBib29sIEJCUVBsYW46OnByZXBhcmVJbXBsKCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMucmVzaXplKGZ1bmN0aW9ucy5zaXpl
KCkpOworICAgIG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucy5yZXNpemUoZnVuY3Rpb25zLnNp
emUoKSk7CiAgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgp
KTsKICAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAKQEAgLTEw
OSw2ICsxMTAsOSBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
KQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVs
PEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zOworICAg
IGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMsIGZ1bmN0aW9uLmdldCgpLCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKKwogICAgIHNpemVfdCBm
dW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5kZXggKyBtX21vZHVsZUluZm9ybWF0aW9u
LT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CiAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5k
ZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
c1ttX2Z1bmN0aW9uSW5kZXhdOwogICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2ln
bmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CkBAIC0xMTgsNyArMTIyLDcg
QEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIAogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgewot
ICAgICAgICBSZWY8QkJRQ2FsbGVlPiBjYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3Zl
KGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9y
bWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodGll
clVwKSwgV1RGTW92ZSh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykpOworICAgICAgICBSZWY8QkJR
Q2FsbGVlPiBjYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRy
eXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2Vj
dGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodGllclVwKSwgV1RGTW92ZSh1
bmxpbmtlZFdhc21Ub1dhc21DYWxscyksIFdURk1vdmUoZnVuY3Rpb24tPnN0YWNrbWFwcyksIFdU
Rk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5k
bGVyTG9jYXRpb25zKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihm
dW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5w
dHIoKSkpOwogICAgICAgICBBU1NFUlQoIW1fY29kZUJsb2NrLT5tX2JicUNhbGxlZXNbbV9mdW5j
dGlvbkluZGV4XSk7CiAgICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUtPmVudHJ5cG9pbnQoKTsK
QEAgLTE5NCwxMSArMTk4LDE1IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25JbmRlCiAgICAgYm9vbCBm
b3JjZVVzaW5nQjMgPSBmYWxzZTsKICAgICBpZiAoT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJN
b2RlVGhyZXNob2xkKCkgJiYgbV9tb2R1bGVJbmZvcm1hdGlvbi0+Y29kZVNlY3Rpb25TaXplID49
IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpKQogICAgICAgICBmb3Jj
ZVVzaW5nQjMgPSB0cnVlOworICAgIGVsc2UgaWYgKCFtX21vZHVsZUluZm9ybWF0aW9uLT5tX2Z1
bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlvbnMucXVpY2tHZXQoZnVuY3Rpb25JbmRleCkpCisgICAg
ICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7CisgICAgZWxzZSBpZiAoIU9wdGlvbnM6Ondhc21CQlFV
c2VzQWlyKCkpCisgICAgICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7CiAKLSAgICBpZiAoIWZvcmNl
VXNpbmdCMyAmJiBPcHRpb25zOjp3YXNtQkJRVXNlc0FpcigpKQotICAgICAgICBwYXJzZUFuZENv
bXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25h
dHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCks
IG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKLSAgICBlbHNlCisgICAgaWYgKGZvcmNl
VXNpbmdCMykKICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxl
KGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCwg
dGllclVwKTsKKyAgICBlbHNlCisgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNl
QW5kQ29tcGlsZUFpcihjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbklu
ZGV4LCB0aWVyVXApOwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQp
KSB7CiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKQEAgLTIyMiwxMyArMjMwLDE1
IEBAIHZvaWQgQkJRUGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbigpCiAgICAgICAgIGNvbnN0
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CiAgICAgICAgIEFTU0VSVChmdW5jdGlv
bkluZGV4U3BhY2UgPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkluZGV4U3BhY2VTaXpl
KCkpOwogICAgICAgICB7CisgICAgICAgICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9
IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLmdldCgpOwogICAgICAgICAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxs
cHRyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpXYXNtLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwog
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkp
IHsKICAgICAgICAgICAgICAgICBCYXNlOjpmYWlsKG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRh
YmxlIG1lbW9yeSBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlv
bkluZGV4KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmVudHJ5cG9p
bnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKKyAgICAgICAgICAgIGNv
bXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9u
c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24sIGNvbnRleHQsIGxpbmtCdWZmZXIpOworICAgICAg
ICAgICAgZnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPENvbXBp
bGF0aW9uPigKICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJVENv
bXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgQkJRIGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVz
IiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1h
a2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0
aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEo
KSksCiAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9k
dWN0cykpOwogICAgICAgICB9CkBAIC0yNzIsNyArMjgyLDcgQEAgdm9pZCBCQlFQbGFuOjppbml0
aWFsaXplQ2FsbGVlcyhjb25zdCBDYWxsZWVJbml0aWFsaXplciYgY2FsbGJhY2spCiAKICAgICAg
ICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tp
bnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwogICAgICAgICBzaXplX3QgZnVuY3Rpb25JbmRl
eFNwYWNlID0gaW50ZXJuYWxGdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1w
b3J0RnVuY3Rpb25Db3VudCgpOwotICAgICAgICBSZWY8QkJRQ2FsbGVlPiB3YXNtRW50cnlwb2lu
dENhbGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQp
LCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5n
ZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZShtX3RpZXJVcENvdW50c1tpbnRlcm5hbEZ1
bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2ludGVybmFs
RnVuY3Rpb25JbmRleF0pKTsKKyAgICAgICAgUmVmPEJCUUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRD
YWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwg
ZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0
KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJuYWxGdW5j
dGlvbkluZGV4XSksIFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tpbnRlcm5hbEZ1
bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShmdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShmdW5j
dGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpi
b3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7CiAKICAgICAgICAgY2FsbGJhY2so
aW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSks
IFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQkJRUGxhbi5oCmluZGV4IGRiZWZjNTRhZDc1MDA1YTcwZDFlMWFmOTYwMDAxNzRmOGVj
YmRiM2YuLmRjMDAyMjc1NjYyMjUxYjhhYjBmMDdkZWFiMDk4NmU5N2NmZTZhMmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaApAQCAtODMsNiArODMsNyBAQCBwcml2
YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjb21waWxlRnVuY3Rp
b24odWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25Db250ZXh0JiwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgVGllclVwQ291bnQqKTsKIAogICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwor
ICAgIFZlY3RvcjxWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRh
Zz4+PiBtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnM7CiAgICAgSGFzaE1hcDx1aW50MzJfdCwg
c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBEZWZhdWx0SGFzaDx1aW50MzJfdD4s
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVy
VG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgVmVjdG9yPENvbXBpbGF0aW9uQ29udGV4dD4g
bV9jb21waWxhdGlvbkNvbnRleHRzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGllclVw
Q291bnQ+PiBtX3RpZXJVcENvdW50czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21DYWxsZWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxlZS5jcHAKaW5kZXggMjFkOTdiMTNjZWUwYzY1ZTE2MzFjNzZkMjU4OTMzMzM1MzJlZTk0MC4u
YjQ2NmI3ZmNlYjgwYTNlMjcyNzk5ZjM3NWZhZDBiZGRhYWJkOTQ1YiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkxMSW50RXhjZXB0aW9ucy5oIgogI2luY2x1
ZGUgIldhc21DYWxsZWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlv
bi5oIgogCkBAIC01Niw2ICs1NywxMiBAQCB2b2lkIENhbGxlZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogICAgIG91dC5wcmludChtYWtlU3RyaW5nKG1faW5kZXhPck5hbWUpKTsKIH0K
IAorY29uc3QgSGFuZGxlckluZm8qIENhbGxlZTo6aGFuZGxlckZvckluZGV4KEluc3RhbmNlJiBp
bnN0YW5jZSwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IFRhZyogdGFnKQoreworICAgIEFTU0VSVCho
YXNFeGNlcHRpb25IYW5kbGVycygpKTsKKyAgICByZXR1cm4gSGFuZGxlckluZm86OmhhbmRsZXJG
b3JJbmRleChpbnN0YW5jZSwgbV9leGNlcHRpb25IYW5kbGVycywgaW5kZXgsIHRhZyk7Cit9CisK
IEpJVENhbGxlZTo6SklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1v
ZGUsIEVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQogICAgIDogQ2FsbGVlKGNvbXBpbGF0aW9uTW9k
ZSkKICAgICAsIG1fZW50cnlwb2ludChXVEZNb3ZlKGVudHJ5cG9pbnQpKQpAQCAtNjksNiArNzYs
MzIgQEAgSklUQ2FsbGVlOjpKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0
aW9uTW9kZSwgRW50cnlwb2ludCYmIGVudHJ5cG8KIHsKIH0KIAorTExJbnRDYWxsZWU6OkxMSW50
Q2FsbGVlKHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4gY29kZUJsb2NrLCBzaXpl
X3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBu
YW1lKQorICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6TExJbnRNb2RlLCBpbmRl
eCwgV1RGTW92ZShuYW1lKSkKKyAgICAsIG1fY29kZUJsb2NrKFdURk1vdmUoY29kZUJsb2NrKSkK
K3sKKyAgICBsaW5rRXhjZXB0aW9uSGFuZGxlcnMoKTsKK30KKwordm9pZCBMTEludENhbGxlZTo6
bGlua0V4Y2VwdGlvbkhhbmRsZXJzKCkKK3sKKyAgICBpZiAoc2l6ZV90IGNvdW50ID0gbV9jb2Rl
QmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgeworICAgICAgICBtX2V4Y2VwdGlv
bkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZv
JiB1bmxpbmtlZEhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAg
ICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9leGNlcHRpb25IYW5kbGVyc1tpXTsK
KyAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKm1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIubV90YXJnZXQpLnB0cigpOworICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gdGFyZ2V0OworICAgICAgICAg
ICAgaWYgKHVubGlua2VkSGFuZGxlci5tX3R5cGUgPT0gSGFuZGxlclR5cGU6OkNhdGNoKQorICAg
ICAgICAgICAgICAgIHRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KExMSW50OjpoYW5kbGVXYXNtQ2F0Y2goaW5zdHJ1Y3Rpb24ud2lkdGg8V2FzbU9wY29k
ZVRyYWl0cz4oKSkuY29kZSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0
YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6
aGFuZGxlV2FzbUNhdGNoQWxsKGluc3RydWN0aW9uLndpZHRoPFdhc21PcGNvZGVUcmFpdHM+KCkp
LmNvZGUoKSk7CisKKyAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRs
ZXIsIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgTExJbnRDYWxsZWU6OnNl
dEVudHJ5cG9pbnQoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlw
b2ludCkKIHsKICAgICBtX2VudHJ5cG9pbnQgPSBlbnRyeXBvaW50OwpAQCAtMTA0LDYgKzEzNywz
NiBAQCBzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4gTExJbnRDYWxsZWU6OnJhbmdlKCkgY29uc3QK
ICAgICByZXR1cm4geyBudWxscHRyLCBudWxscHRyIH07CiB9CiAKK3ZvaWQgT3B0aW1pemluZ0pJ
VENhbGxlZTo6bGlua0V4Y2VwdGlvbkhhbmRsZXJzKCkKK3sKKyAgICBzaXplX3QgY291bnQgPSBt
X3VubGlua2VkRXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpOworICAgIG1fZXhjZXB0aW9uSGFuZGxl
cnMucmVzaXplVG9GaXQoY291bnQpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykgeworICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fZXhjZXB0aW9uSGFuZGxl
cnNbaV07CisgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxl
ciA9IG1fdW5saW5rZWRFeGNlcHRpb25IYW5kbGVyc1tpXTsKKyAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbG9jYXRpb24gPSBtX2V4Y2VwdGlvbkhhbmRs
ZXJMb2NhdGlvbnNbaV07CisgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRs
ZXIsIGxvY2F0aW9uKTsKKyAgICB9CisgICAgbV91bmxpbmtlZEV4Y2VwdGlvbkhhbmRsZXJzLmNs
ZWFyKCk7CisgICAgbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLmNsZWFyKCk7Cit9CisKK2Nv
bnN0IFZlY3RvcjxPU1JFbnRyeVZhbHVlPiYgT3B0aW1pemluZ0pJVENhbGxlZTo6c3RhY2ttYXAo
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KSBjb25zdAoreworICAgIGF1dG8gaXRlciA9IG1f
c3RhY2ttYXBzLmZpbmQoY2FsbFNpdGVJbmRleCk7CisgICAgaWYgKGl0ZXIgPT0gbV9zdGFja21h
cHMuZW5kKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX3N0YWNrbWFwcykgeworICAg
ICAgICAgICAgZGF0YUxvZyhwYWlyLmtleS5iaXRzKCksICI6ICIpOworICAgICAgICAgICAgZm9y
IChhdXRvIHZhbHVlIDogcGFpci52YWx1ZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHZhbHVl
LCAiLCAiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiIik7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBtX3N0YWNrbWFwcy5lbmQoKSk7CisgICAgcmV0dXJu
IGl0ZXItPnZhbHVlOworfQorCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ2FsbGVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2Fs
bGVlLmgKaW5kZXggMDgxZGI3NmU0MmY5ZTQwZTQzYjkyYzk4MmFmY2Q4Y2U5NTBiYjFlMS4uN2Q2
OWQ2MjZkOGMzZjBkOTM3ZTFkMGI1MDI1MDNjOTRiNWJmMTU0NSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsZWUuaApAQCAtMzIsNyArMzIsOSBAQAogI2luY2x1ZGUgIldhc21D
b21waWxhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2Fz
bUZ1bmN0aW9uQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiV2FzbUhhbmRsZXJJbmZvLmgiCiAjaW5j
bHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCisjaW5jbHVkZSAiV2FzbUxMSW50VGllclVwQ291bnRl
ci5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
YWZlUmVmQ291bnRlZC5oPgogCkBAIC01OSw2ICs2MSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpID0gMDsKICAgICB2
aXJ0dWFsIHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPiByYW5nZSgpIGNvbnN0ID0gMDsKIAorICAg
IGNvbnN0IEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9ySW5kZXgoSW5zdGFuY2UmLCB1bnNpZ25lZCwg
Y29uc3QgVGFnKik7CisKKyAgICBib29sIGhhc0V4Y2VwdGlvbkhhbmRsZXJzKCkgY29uc3QgeyBy
ZXR1cm4gISFtX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsgfQorCiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZX0IzSklUKQogICAgIHZpcnR1YWwgdm9pZCBzZXRPU1JFbnRyeUNhbGxlZShSZWY8T01H
Rm9yT1NSRW50cnlDYWxsZWU+JiYpCiAgICAgewpAQCAtNjgsNiArNzQsOCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIHZpcnR1YWwgRnVuY3Rp
b25Db2RlQmxvY2sqIGZ1bmN0aW9uQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gMDsgfQorCiBw
cm90ZWN0ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9u
TW9kZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9k
ZSwgc2l6ZV90LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYp
OwpAQCAtNzUsNiArODMsOSBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIENvbXBpbGF0aW9u
TW9kZSBtX2NvbXBpbGF0aW9uTW9kZTsKICAgICBJbmRleE9yTmFtZSBtX2luZGV4T3JOYW1lOwor
Citwcm90ZWN0ZWQ6CisgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJz
OwogfTsKIAogY2xhc3MgSklUQ2FsbGVlIDogcHVibGljIENhbGxlZSB7CkBAIC05OSw2NCArMTEw
LDg2IEBAIHByaXZhdGU6CiAgICAgV2FzbTo6RW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7CiB9Owog
Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQotY2xhc3MgT01HQ2FsbGVlIGZpbmFsIDog
cHVibGljIEpJVENhbGxlZSB7CitjbGFzcyBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgZmluYWwg
OiBwdWJsaWMgSklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE9NR0NhbGxlZT4g
Y3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6
cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQorICAgIHN0YXRpYyBSZWY8RW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9p
bnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPTUdDYWxsZWUoV1RGTW92
ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxs
cykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlKFdURk1vdmUoZW50cnlwb2ludCkpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgT01HQ2Fs
bGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFp
cjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQotICAgICAgICA6IEpJVENhbGxlZShX
YXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4
LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKQorICAgIEVtYmVkZGVyRW50
cnlwb2ludENhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKKyAgICAgICAgOiBK
SVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpFbWJlZGRlckVudHJ5cG9pbnRNb2RlLCBX
VEZNb3ZlKGVudHJ5cG9pbnQpKQogICAgIHsKICAgICB9CiB9OwogCi1jbGFzcyBPTUdGb3JPU1JF
bnRyeUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBKSVRDYWxsZWUgeworCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZX0IzSklUKQorY2xhc3MgT3B0aW1pemluZ0pJVENhbGxlZSA6IHB1YmxpYyBKSVRDYWxs
ZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNyZWF0
ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8
Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQorICAgIGNvbnN0IFZlY3RvcjxPU1JFbnRy
eVZhbHVlPiYgc3RhY2ttYXAoQ2FsbFNpdGVJbmRleCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAg
ICBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBtb2RlLCBXYXNtOjpF
bnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFt
ZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiYgdW5saW5rZWRDYWxscywgSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBWZWN0b3I8T1NS
RW50cnlWYWx1ZT4+JiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiBl
eGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpCisgICAgICAgIDogSklUQ2Fs
bGVlKG1vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKHVubGlua2VkQ2FsbHMpKQorICAgICAgICAsIG1fc3RhY2ttYXBzKFdURk1vdmUoc3RhY2tt
YXBzKSkKKyAgICAgICAgLCBtX3VubGlua2VkRXhjZXB0aW9uSGFuZGxlcnMoV1RGTW92ZShleGNl
cHRpb25IYW5kbGVycykpCisgICAgICAgICwgbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKFdU
Rk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeUNhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBp
bmRleCwgV1RGTW92ZShuYW1lKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbG9vcEluZGV4
LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5s
aW5rZWRFeGNlcHRpb25IYW5kbGVycy5zaXplKCkgPT0gbV9leGNlcHRpb25IYW5kbGVyTG9jYXRp
b25zLnNpemUoKSk7CisgICAgICAgIGxpbmtFeGNlcHRpb25IYW5kbGVycygpOwogICAgIH0KIAot
ICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBt
X29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7IH0KLSAgICB1aW50MzJfdCBsb29wSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2xvb3BJbmRleDsgfQotCiBwcml2YXRlOgotICAgIE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0
ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25l
ZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMpCi0gICAgICAgIDogSklUQ2Fs
bGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBXVEZNb3ZlKGVu
dHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkK
LSAgICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSkKLSAgICAgICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgpCisgICAgdm9pZCBsaW5r
RXhjZXB0aW9uSGFuZGxlcnMoKTsKKworICAgIEhhc2hNYXA8Q2FsbFNpdGVJbmRleCwgVmVjdG9y
PE9TUkVudHJ5VmFsdWU+PiBtX3N0YWNrbWFwczsKKyAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVy
SW5mbz4gbV91bmxpbmtlZEV4Y2VwdGlvbkhhbmRsZXJzOworICAgIFZlY3RvcjxDb2RlTG9jYXRp
b25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4gbV9leGNlcHRpb25IYW5kbGVyTG9jYXRp
b25zOworfTsKKworY2xhc3MgT01HQ2FsbGVlIGZpbmFsIDogcHVibGljIE9wdGltaXppbmdKSVRD
YWxsZWUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8T01HQ2FsbGVlPiBjcmVhdGUoV2FzbTo6
RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5h
bWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hNYXA8Q2FsbFNpdGVJbmRleCwgVmVjdG9yPE9T
UkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYg
ZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQogICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4
LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKHN0YWNrbWFw
cyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJM
b2NhdGlvbnMpKSk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgbV9vc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplOwotICAgIHVpbnQzMl90IG1fbG9vcEluZGV4OworcHJpdmF0ZToKKyAgICBPTUdDYWxs
ZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWly
PGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hNYXA8Q2FsbFNpdGVJbmRleCwg
VmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxl
ckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQorICAgICAg
ICA6IE9wdGltaXppbmdKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBX
VEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtl
ZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwg
V1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkKKyAgICB7CisgICAgfQogfTsKLSNl
bmRpZgogCi1jbGFzcyBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgZmluYWwgOiBwdWJsaWMgSklU
Q2FsbGVlIHsKK2NsYXNzIE9NR0Zvck9TUkVudHJ5Q2FsbGVlIGZpbmFsIDogcHVibGljIE9wdGlt
aXppbmdKSVRDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCisgICAgc3Rh
dGljIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBl
bnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5h
bWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1
aW50MzJfdCBsb29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlu
a2VkQ2FsbHMsIEhhc2hNYXA8Q2FsbFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYm
IHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxl
cnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBl
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCkpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50cnlDYWxsZWUoV1RGTW92ZShl
bnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUsIGxvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMp
LCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9j
YXRpb25zKSkpOwogICAgIH0KIAorICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUoKSBjb25zdCB7IHJldHVybiBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7IH0KKyAgICB1
aW50MzJfdCBsb29wSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2xvb3BJbmRleDsgfQorCiBwcml2
YXRlOgotICAgIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50
cnlwb2ludCkKLSAgICAgICAgOiBKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpFbWJl
ZGRlckVudHJ5cG9pbnRNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpKQorICAgIE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0
ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25l
ZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hNYXA8Q2FsbFNpdGVJ
bmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2Vk
SGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJl
bDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQor
ICAgICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdG
b3JPU1JFbnRyeU1vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhj
ZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKQorICAg
ICAgICAsIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZShvc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplKQorICAgICAgICAsIG1fbG9vcEluZGV4KGxvb3BJbmRleCkKICAgICB7CiAgICAgfQorCisg
ICAgdW5zaWduZWQgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOworICAgIHVpbnQzMl90IG1f
bG9vcEluZGV4OwogfTsKIAotI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKLWNsYXNzIEJC
UUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBKSVRDYWxsZWUgeworY2xhc3MgQkJRQ2FsbGVlIGZpbmFs
IDogcHVibGljIE9wdGltaXppbmdKSVRDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
QkJRQ2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBp
bmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUs
IHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKKyAgICBzdGF0aWMgUmVmPEJCUUNh
bGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgs
IHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6
OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQsIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hNYXA8Q2FsbFNpdGVJbmRleCwgVmVj
dG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlcklu
Zm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQkJRQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCks
IGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50KSwgV1RGTW92ZSh1bmxp
bmtlZENhbGxzKSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCQlFDYWxsZWUoV1RG
TW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodGllclVwQ291
bnQpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKHN0YWNrbWFwcyksIFdURk1vdmUo
ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKSk7
CiAgICAgfQogCiAgICAgT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlKCkgeyBy
ZXR1cm4gbV9vc3JFbnRyeUNhbGxlZS5nZXQoKTsgfQpAQCAtMTc3LDggKzIxMCw4IEBAIHB1Ymxp
YzoKICAgICBUaWVyVXBDb3VudCogdGllclVwQ291bnQoKSB7IHJldHVybiBtX3RpZXJVcENvdW50
LmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgQkJRQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBl
bnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5h
bWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVw
Q291bnQsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMpCi0g
ICAgICAgIDogSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgV1RGTW92
ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxs
cykpCisgICAgQkJRQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3Qg
aW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1l
LCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQsIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hNYXA8Q2FsbFNpdGVJbmRl
eCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFu
ZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxF
eGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQorICAg
ICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpCQlFNb2Rl
LCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxp
bmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJz
KSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkKICAgICAgICAgLCBtX3RpZXJV
cENvdW50KFdURk1vdmUodGllclVwQ291bnQpKQogICAgIHsKICAgICB9CkBAIC0yMTgsMTUgKzI1
MSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgTExJbnRUaWVyVXBDb3VudGVyJiB0aWVyVXBD
b3VudGVyKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPnRpZXJVcENvdW50ZXIoKTsgfQorICAgIEZ1
bmN0aW9uQ29kZUJsb2NrKiBmdW5jdGlvbkNvZGVCbG9jaygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fY29kZUJsb2NrLmdldCgpOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBMTEludENhbGxl
ZShzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IGNvZGVCbG9jaywgc2l6ZV90IGlu
ZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkK
LSAgICAgICAgOiBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpMTEludE1vZGUsIGluZGV4
LCBXVEZNb3ZlKG5hbWUpKQotICAgICAgICAsIG1fY29kZUJsb2NrKFdURk1vdmUoY29kZUJsb2Nr
KSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fY29kZUJsb2NrKTsKLSAgICB9Cisg
ICAgTExJbnRDYWxsZWUoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgc2l6ZV90
IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYpOwor
CisgICAgdm9pZCBsaW5rRXhjZXB0aW9uSGFuZGxlcnMoKTsKIAogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWV9CM0pJVCkKICAgICBSZWZQdHI8SklUQ2FsbGVlPiBtX3JlcGxhY2VtZW50OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAppbmRl
eCA2YzAyNmUwOGE0MDllOTk1ZDQzMThkZmIxODA0NjI2ZDBmYWQxNzVmLi43YmYwMDFlZDkyZWZj
YmFmYzBmYmM4YTUwYjRiZjYyNzI1ZDJjY2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaApAQCAtMTI1LDcgKzEyNSw3IEBAIHB1
YmxpYzoKICAgICAgICAgYm9vbCByZXN1bHRzSW5jbHVkZUk2NCA9IGZhbHNlOwogICAgICAgICBz
aXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKICAgICAgICAgc2l6ZV90IGZwQXJndW1lbnRDb3Vu
dCA9IDA7Ci0gICAgICAgIHNpemVfdCBhcmdTdGFja09mZnNldCA9IGhlYWRlclNpemVJbkJ5dGVz
OworICAgICAgICBzaXplX3QgYXJnU3RhY2tPZmZzZXQgPSBoZWFkZXJTaXplSW5CeXRlcyArIHNp
emVvZihSZWdpc3Rlcik7CiAgICAgICAgIGlmIChyb2xlID09IENhbGxSb2xlOjpDYWxsZXIpCiAg
ICAgICAgICAgICBhcmdTdGFja09mZnNldCAtPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CiAK
QEAgLTEzNiw3ICsxMzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgZ3BBcmd1bWVu
dENvdW50ID0gMDsKICAgICAgICAgZnBBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAgc2l6ZV90
IHJlc3VsdFN0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6ZUluQnl0ZXM7CisgICAgICAgIHNpemVfdCBy
ZXN1bHRTdGFja09mZnNldCA9IGhlYWRlclNpemVJbkJ5dGVzICsgc2l6ZW9mKFJlZ2lzdGVyKTsK
ICAgICAgICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxlcikKICAgICAgICAgICAgIHJlc3Vs
dFN0YWNrT2Zmc2V0IC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IGMwY2IzMWI3Y2JmMDA2YWEwMTkzNmMxZjQ0
NmQ2YjE4OWYwZGUxNTUuLjQ5ZGY5NTE1NDdjMDhhOTgxMTA1MDdlZWVjMzExNjhlZjdjNWE4YzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTI5LDExICsyOSwx
MyBAQAogCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5o
IgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKICNpbmNsdWRlICJXYXNtTWVt
b3J5SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtTmFtZS5oIgogI2luY2x1ZGUgIldhc21O
YW1lU2VjdGlvbi5oIgorI2luY2x1ZGUgIldhc21PU1JFbnRyeURhdGEuaCIKICNpbmNsdWRlICJX
YXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgogI2luY2x1ZGUgIldhc21TaWdu
YXR1cmUuaCIKQEAgLTUwLDYgKzUyLDcgQEAgbmFtZXNwYWNlIFdhc20gewogCiBzdHJ1Y3QgQ29t
cGlsYXRpb25Db250ZXh0Owogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOworc3RydWN0IFVubGlu
a2VkSGFuZGxlckluZm87CiAKIHVzaW5nIEJsb2NrU2lnbmF0dXJlID0gY29uc3QgU2lnbmF0dXJl
KjsKIApAQCAtNzYsNiArNzksMTkgQEAgaW5saW5lIGJvb2wgaXNWYWx1ZVR5cGUoVHlwZSB0eXBl
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAoraW5saW5lIEpTU3RyaW5nKiB0eXBlVG9TdHJpbmco
Vk0mIHZtLCBUeXBlS2luZCB0eXBlKQoreworI2RlZmluZSBUWVBFX0NBU0UobWFjcm9OYW1lLCB2
YWx1ZSwgYjMsIGluYywgd2FzbU5hbWUpIFwKKyAgICBjYXNlIFR5cGVLaW5kOjptYWNyb05hbWU6
IFwKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgI3dhc21OYW1lKTsgXAor
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIEZPUl9FQUNIX1dBU01fVFlQRShUWVBFX0NB
U0UpCisgICAgfQorCisjdW5kZWYgVFlQRV9DQVNFCit9CisKIGlubGluZSBib29sIGlzU3VidHlw
ZShUeXBlIHN1YiwgVHlwZSBwYXJlbnQpCiB7CiAgICAgaWYgKHN1Yi5pc051bGxhYmxlKCkgJiYg
IXBhcmVudC5pc051bGxhYmxlKCkpCkBAIC0xMTUsNiArMTMxLDcgQEAgZW51bSBjbGFzcyBFeHRl
cm5hbEtpbmQgOiB1aW50OF90IHsKICAgICBUYWJsZSA9IDEsCiAgICAgTWVtb3J5ID0gMiwKICAg
ICBHbG9iYWwgPSAzLAorICAgIEV4Y2VwdGlvbiA9IDQsCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJbnQ+CkBAIC0xMjUsNiArMTQyLDcgQEAgaW5saW5lIGJvb2wgaXNWYWxpZEV4dGVybmFsS2lu
ZChJbnQgdmFsKQogICAgIGNhc2Ugc3RhdGljX2Nhc3Q8SW50PihFeHRlcm5hbEtpbmQ6OlRhYmxl
KToKICAgICBjYXNlIHN0YXRpY19jYXN0PEludD4oRXh0ZXJuYWxLaW5kOjpNZW1vcnkpOgogICAg
IGNhc2Ugc3RhdGljX2Nhc3Q8SW50PihFeHRlcm5hbEtpbmQ6Okdsb2JhbCk6CisgICAgY2FzZSBz
dGF0aWNfY2FzdDxJbnQ+KEV4dGVybmFsS2luZDo6RXhjZXB0aW9uKToKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTEzNCw2ICsxNTIsNyBAQCBzdGF0
aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGludD4oRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbikgPT0gMCwg
Ildhc20gbmVlZHMgRnVuY3Rpbwogc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVy
bmFsS2luZDo6VGFibGUpICAgID09IDEsICJXYXNtIG5lZWRzIFRhYmxlIHRvIGhhdmUgdGhlIHZh
bHVlIDEiKTsKIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6Ok1l
bW9yeSkgICA9PSAyLCAiV2FzbSBuZWVkcyBNZW1vcnkgdG8gaGF2ZSB0aGUgdmFsdWUgMiIpOwog
c3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6R2xvYmFsKSAgID09
IDMsICJXYXNtIG5lZWRzIEdsb2JhbCB0byBoYXZlIHRoZSB2YWx1ZSAzIik7CitzdGF0aWNfYXNz
ZXJ0KHN0YXRpY19jYXN0PGludD4oRXh0ZXJuYWxLaW5kOjpFeGNlcHRpb24pICAgPT0gNCwgIldh
c20gbmVlZHMgRXhjZXB0aW9uIHRvIGhhdmUgdGhlIHZhbHVlIDQiKTsKIAogaW5saW5lIGNvbnN0
IGNoYXIqIG1ha2VTdHJpbmcoRXh0ZXJuYWxLaW5kIGtpbmQpCiB7CkBAIC0xNDIsNiArMTYxLDcg
QEAgaW5saW5lIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoRXh0ZXJuYWxLaW5kIGtpbmQpCiAgICAg
Y2FzZSBFeHRlcm5hbEtpbmQ6OlRhYmxlOiByZXR1cm4gInRhYmxlIjsKICAgICBjYXNlIEV4dGVy
bmFsS2luZDo6TWVtb3J5OiByZXR1cm4gIm1lbW9yeSI7CiAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6
Okdsb2JhbDogcmV0dXJuICJnbG9iYWwiOworICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpFeGNlcHRp
b246IHJldHVybiAidGFnIjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gIj8iOwpAQCAtMzcyLDYgKzM5Miw4IEBAIHN0cnVjdCBFbnRyeXBvaW50
IHsKIHN0cnVjdCBJbnRlcm5hbEZ1bmN0aW9uIHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9B
TExPQ0FURUQ7CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4g
Y2FsbGVlTW92ZUxvY2F0aW9uOworICAgIFN0YWNrTWFwcyBzdGFja21hcHM7CisgICAgVmVjdG9y
PFVubGlua2VkSGFuZGxlckluZm8+IGV4Y2VwdGlvbkhhbmRsZXJzOwogICAgIEVudHJ5cG9pbnQg
ZW50cnlwb2ludDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GdW5jdGlvbkNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uQ29kZUJsb2NrLmgKaW5kZXggZWE3NWZlMmY2YjBmOWEzZjE0ZTc5M2VkMTEyNzhl
ZmQwZTA5YWM3MS4uNzJmM2U2NDEzMmMxN2I5NTExYTNlYmVhNmM2MGQwMDI0YjMyN2I1MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjgsOCArMjgsMTAgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJC
eXRlY29kZUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRl
ICJJbnN0cnVjdGlvblN0cmVhbS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5o
IgorI2luY2x1ZGUgIldhc21IYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIldhc21MTEludFRpZXJV
cENvdW50ZXIuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KQEAgLTEyMCw2ICsxMjIsMTAgQEAgcHVibGljOgogICAgIGNvbnN0IEp1bXBUYWJsZSYganVt
cFRhYmxlKHVuc2lnbmVkIHRhYmxlSW5kZXgpIGNvbnN0OwogICAgIHVuc2lnbmVkIG51bWJlck9m
SnVtcFRhYmxlcygpIGNvbnN0OwogCisgICAgc2l6ZV90IG51bWJlck9mRXhjZXB0aW9uSGFuZGxl
cnMoKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsgfQorICAgIFVu
bGlua2VkSGFuZGxlckluZm8mIGV4Y2VwdGlvbkhhbmRsZXIoaW50IGluZGV4KSB7IHJldHVybiBt
X2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQorICAgIHZvaWQgYWRkRXhjZXB0aW9uSGFuZGxl
cihjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyKSB7IG1fZXhjZXB0aW9uSGFuZGxl
cnMuYXBwZW5kKGhhbmRsZXIpOyB9CisKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVt
cFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CiAKQEAg
LTEzOSw2ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIE91dE9mTGluZUp1bXBUYXJnZXRzIG1fb3V0
T2ZMaW5lSnVtcFRhcmdldHM7CiAgICAgTExJbnRUaWVyVXBDb3VudGVyIG1fdGllclVwQ291bnRl
cjsKICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2p1bXBUYWJsZXM7CisgICAgVmVjdG9yPFVubGlu
a2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CiB9OwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25QYXJzZXIuaAppbmRleCA0ZTZiODMyMjA0MDc3NmEyNTE3MjJlZWEyMThmNDZjMmMzOTkxMzEw
Li5mYWQ3ZDc2OGViMTBmNmI1NDljN2M4OTE4YzE3NmRlNWYxMmZkNjY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaApAQCAtMzcsNyArMzcs
MTQgQEAgZW51bSBjbGFzcyBCbG9ja1R5cGUgewogICAgIElmLAogICAgIEJsb2NrLAogICAgIExv
b3AsCi0gICAgVG9wTGV2ZWwKKyAgICBUb3BMZXZlbCwKKyAgICBUcnksCisgICAgQ2F0Y2gsCit9
OworCitlbnVtIGNsYXNzIENhdGNoS2luZCB7CisgICAgQ2F0Y2gsCisgICAgQ2F0Y2hBbGwsCiB9
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNsb3NpbmdTdGFjaywgdHlwZW5hbWUgTmV3U3RhY2s+
CkBAIC0xNDcsNiArMTU0LDcgQEAgcHJpdmF0ZToKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZUluZGV4Rm9yTG9jYWwodWludDMyX3QmKTsKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluZGV4Rm9yR2xvYmFsKHVpbnQzMl90Jik7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkluZGV4KHVp
bnQzMl90Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeGNl
cHRpb25JbmRleCh1aW50MzJfdCYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlQnJhbmNoVGFyZ2V0KHVpbnQzMl90Jik7CiAKICAgICBzdHJ1Y3QgVGFibGVJbml0
SW1tZWRpYXRlcyB7CkBAIC0yMTEsNiArMjE5LDEyIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQg
bV9sb29wSW5kZXggeyAwIH07CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250cm9sVHlwZT4K
K3N0YXRpYyBib29sIGlzVHJ5T3JDYXRjaChDb250cm9sVHlwZSYgZGF0YSkKK3sKKyAgICByZXR1
cm4gQ29udHJvbFR5cGU6OmlzVHJ5KGRhdGEpIHx8IENvbnRyb2xUeXBlOjppc0NhdGNoKGRhdGEp
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgogRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0
aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQogICAgIDogUGFyc2VyKGZ1bmN0aW9u
U3RhcnQsIGZ1bmN0aW9uTGVuZ3RoKQpAQCAtNTc1LDYgKzU4OSwxNiBAQCBhdXRvIEZ1bmN0aW9u
UGFyc2VyPENvbnRleHQ+OjpwYXJzZUZ1bmN0aW9uSW5kZXgodWludDMyX3QmIHJlc3VsdEluZGV4
KSAtPiBQYXJ0aQogICAgIHJldHVybiB7IH07CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRl
eHQ+CithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4Y2VwdGlvbkluZGV4KHVp
bnQzMl90JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBleGNlcHRp
b25JbmRleDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleGNlcHRp
b25JbmRleCksICJjYW4ndCBwYXJzZSBleGNlcHRpb24gaW5kZXgiKTsKKyAgICBXQVNNX1ZBTElE
QVRPUl9GQUlMX0lGKGV4Y2VwdGlvbkluZGV4ID49IG1faW5mby5leGNlcHRpb25JbmRleFNwYWNl
U2l6ZSgpLCAiZXhjZXB0aW9uIGluZGV4ICIsIGV4Y2VwdGlvbkluZGV4LCAiIGlzIGludmFsaWQs
IGxpbWl0IGlzICIsIG1faW5mby5leGNlcHRpb25JbmRleFNwYWNlU2l6ZSgpKTsKKyAgICByZXN1
bHQgPSBleGNlcHRpb25JbmRleDsKKyAgICByZXR1cm4geyB9OworfQorCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb250ZXh0PgogYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCcmFuY2hU
YXJnZXQodWludDMyX3QmIHJlc3VsdFRhcmdldCkgLT4gUGFydGlhbFJlc3VsdAogewpAQCAtMTMz
Myw2ICsxMzU3LDEzMSBAQCBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FT
RSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKKyAgICBjYXNlIFRyeTogeworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMo
KSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICBCbG9ja1Np
Z25hdHVyZSBpbmxpbmVTaWduYXR1cmU7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlQmxvY2tTaWduYXR1cmUobV9pbmZvLCBpbmxpbmVTaWduYXR1cmUpLCAiY2FuJ3QgZ2V0IHRy
eSdzIHNpZ25hdHVyZSIpOworCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHBy
ZXNzaW9uU3RhY2suc2l6ZSgpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJU
b28gZmV3IGFyZ3VtZW50cyBvbiBzdGFjayBmb3IgdHJ5IGJsb2NrLiBUcnllIGV4cGVjdHMgIiwg
aW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5ICIsIG1fZXhwcmVz
c2lvblN0YWNrLnNpemUoKSwgIiB3ZXJlIHByZXNlbnQuIFRyeSBibG9jayBoYXMgc2lnbmF0dXJl
OiAiLCBpbmxpbmVTaWduYXR1cmUtPnRvU3RyaW5nKCkpOworICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZVNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKG1fZXhwcmVzc2lvblN0YWNrW29mZnNldCArIGldLnR5cGUoKSAhPSBpbmxpbmVTaWduYXR1
cmUtPmFyZ3VtZW50KGkpLCAiVHJ5IGV4cGVjdHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4IiwgaSwg
IiB0byBiZSAiLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpLmtpbmQsICIgYnV0IGFyZ3Vt
ZW50IGhhcyB0eXBlICIsIG1fZXhwcmVzc2lvblN0YWNrW2ldLnR5cGUoKS5raW5kKTsKKworICAg
ICAgICBpbnQ2NF90IG9sZFNpemUgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7CisgICAgICAg
IFN0YWNrIG5ld1N0YWNrOworICAgICAgICBDb250cm9sVHlwZSBjb250cm9sOworICAgICAgICBX
QVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRUcnkoaW5saW5lU2lnbmF0dXJlLCBtX2V4cHJlc3Np
b25TdGFjaywgY29udHJvbCwgbmV3U3RhY2spKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChvbGRT
aXplLCBvbGRTaXplIC0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpID09IGlubGluZVNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICAgICAgQVNTRVJUKG5ld1N0YWNrLnNpemUoKSA9PSBp
bmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CisKKyAgICAgICAgbV9jb250cm9sU3Rh
Y2suYXBwZW5kKHsgV1RGTW92ZShtX2V4cHJlc3Npb25TdGFjayksIHsgfSwgV1RGTW92ZShjb250
cm9sKSB9KTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSBXVEZNb3ZlKG5ld1N0YWNrKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIENhdGNoOiB7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygp
LCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09IDEsICJjYW4ndCB1c2UgY2F0Y2gg
YmxvY2sgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisKKyAgICAgICAgdWludDMy
X3QgZXhjZXB0aW9uSW5kZXg7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VFeGNlcHRpb25JbmRleChleGNlcHRpb25JbmRleCkpOworICAgICAgICBTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCA9IG1faW5mby5zaWduYXR1cmVJbmRleEZyb21FeGNlcHRpb25JbmRl
eFNwYWNlKGV4Y2VwdGlvbkluZGV4KTsKKyAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBleGNlcHRp
b25TaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsK
KworICAgICAgICBDb250cm9sRW50cnkmIGNvbnRyb2xFbnRyeSA9IG1fY29udHJvbFN0YWNrLmxh
c3QoKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNUcnlPckNhdGNoKGNvbnRy
b2xFbnRyeS5jb250cm9sRGF0YSksICJjYXRjaCBibG9jayBpc24ndCBhc3NvY2lhdGVkIHRvIGEg
dHJ5Iik7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFModW5pZnkoY29udHJvbEVu
dHJ5LmNvbnRyb2xEYXRhKSk7CisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRzOworICAgICAg
ICBTdGFjayBwcmVDYXRjaFN0YWNrOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKHBy
ZUNhdGNoU3RhY2spOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYXRjaChl
eGNlcHRpb25JbmRleCwgZXhjZXB0aW9uU2lnbmF0dXJlLCBwcmVDYXRjaFN0YWNrLCBjb250cm9s
RW50cnkuY29udHJvbERhdGEsIHJlc3VsdHMpKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChl
eGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IHJlc3VsdHMuc2l6ZSgpKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCk7ICsraSkKKyAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFu
ZEFwcGVuZChleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSksIHJlc3VsdHNbaV0pOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGNhc2UgQ2F0Y2hBbGw6IHsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCks
ICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihtX2NvbnRyb2xTdGFjay5zaXplKCkgPT0gMSwgImNhbid0IHVzZSBjYXRjaCBi
bG9jayBhdCB0aGUgdG9wLWxldmVsIG9mIGEgZnVuY3Rpb24iKTsKKworICAgICAgICBDb250cm9s
RW50cnkmIGNvbnRyb2xFbnRyeSA9IG1fY29udHJvbFN0YWNrLmxhc3QoKTsKKworICAgICAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1RyeU9yQ2F0Y2goY29udHJvbEVudHJ5LmNvbnRyb2xE
YXRhKSwgImNhdGNoIGJsb2NrIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKyAgICAgICAg
V0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeShjb250cm9sRW50cnkuY29udHJvbERhdGEp
KTsKKworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CisgICAgICAgIFN0YWNrIHByZUNhdGNo
U3RhY2s7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAocHJlQ2F0Y2hTdGFjayk7Cisg
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhdGNoQWxsKHByZUNhdGNoU3RhY2ss
IGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KworICAgIGNhc2UgRGVsZWdhdGU6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0
aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5v
dCBlbmFibGVkIik7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2NvbnRyb2xTdGFj
ay5zaXplKCkgPT0gMSwgImNhbid0IHVzZSBkZWxlZ2F0ZSBhdCB0aGUgdG9wLWxldmVsIG9mIGEg
ZnVuY3Rpb24iKTsKKworICAgICAgICB1aW50MzJfdCB0YXJnZXQ7CisgICAgICAgIFdBU01fRkFJ
TF9JRl9IRUxQRVJfRkFJTFMocGFyc2VCcmFuY2hUYXJnZXQodGFyZ2V0KSk7CisKKyAgICAgICAg
Q29udHJvbEVudHJ5IGNvbnRyb2xFbnRyeSA9IG1fY29udHJvbFN0YWNrLnRha2VMYXN0KCk7Cisg
ICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjppc1RyeShjb250cm9s
RW50cnkuY29udHJvbERhdGEpLCAiZGVsZWdhdGUgaXNuJ3QgYXNzb2NpYXRlZCB0byBhIHRyeSIp
OworCisgICAgICAgIENvbnRyb2xUeXBlJiB0YXJnZXREYXRhID0gbV9jb250cm9sU3RhY2tbbV9j
b250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7CisgICAgICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjppc1RyeSh0YXJnZXREYXRhKSAmJiAh
Q29udHJvbFR5cGU6OmlzVG9wTGV2ZWwodGFyZ2V0RGF0YSksICJkZWxlZ2F0ZSB0YXJnZXQgaXNu
J3QgYSB0cnkgb3IgdGhlIHRvcCBsZXZlbCBibG9jayIpOworCisgICAgICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKGFkZERlbGVnYXRlKHRhcmdldERhdGEsIGNvbnRyb2xFbnRyeS5jb250cm9s
RGF0YSkpOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KGNvbnRyb2xF
bnRyeS5jb250cm9sRGF0YSkpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChlbmRC
bG9jayhjb250cm9sRW50cnksIG1fZXhwcmVzc2lvblN0YWNrKSk7CisgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLnN3YXAoY29udHJvbEVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIFRocm93OiB7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAi
d2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIHVpbnQzMl90IGV4
Y2VwdGlvbkluZGV4OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhj
ZXB0aW9uSW5kZXgoZXhjZXB0aW9uSW5kZXgpKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2ln
bmF0dXJlSW5kZXggPSBtX2luZm8uc2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFj
ZShleGNlcHRpb25JbmRleCk7CisgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2ln
bmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisKKyAg
ICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgPCBl
eGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyBhcmd1bWVudHMgb24g
c3RhY2sgZm9yIHRoZSBleGNlcHRpb24gYmVpbmcgdGhyb3duLiBUaGUgZXhjZXB0aW9uIGV4cGVj
dHMgIiwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwg
bV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHdlcmUgcHJlc2VudC4gRXhjZXB0aW9uIGhhcyBz
aWduYXR1cmU6ICIsIGV4Y2VwdGlvblNpZ25hdHVyZS50b1N0cmluZygpKTsKKyAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gZXhjZXB0aW9uU2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBhcmdz
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdzLnRyeVJlc2VydmVDYXBhY2l0eShl
eGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFsbG9jYXRlIGVub3Vn
aCBtZW1vcnkgZm9yIHRocm93J3MgIiwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSwgIiBhcmd1bWVudHMiKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2Vw
dGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgVHlwZWRF
eHByZXNzaW9uIGFyZyA9IG1fZXhwcmVzc2lvblN0YWNrLmF0KG9mZnNldCArIGkpOworICAgICAg
ICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihhcmcudHlwZSgpICE9IGV4Y2VwdGlvblNpZ25h
dHVyZS5hcmd1bWVudChpKSwgIlRoZSBleGNlcHRpb24gYmVpbmcgdGhyb3duIGV4cGVjdHMgdGhl
IGFyZ3VtZW50IGF0IGluZGV4ICIsIGksICIgdG8gYmUgIiwgZXhjZXB0aW9uU2lnbmF0dXJlLmFy
Z3VtZW50KGkpLmtpbmQsICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIsIGFyZy50eXBlKCkua2lu
ZCk7CisgICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChhcmcpOworICAgICAgICAgICAg
bV9jb250ZXh0LmRpZFBvcFZhbHVlRnJvbVN0YWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgbV9l
eHByZXNzaW9uU3RhY2suc2hyaW5rKG9mZnNldCk7CisKKyAgICAgICAgV0FTTV9UUllfQUREX1RP
X0NPTlRFWFQoYWRkVGhyb3coZXhjZXB0aW9uSW5kZXgsIGFyZ3MsIG1fZXhwcmVzc2lvblN0YWNr
KSk7CisgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIGNhc2UgUmV0aHJvdzogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9u
cyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICB1aW50MzJfdCB0YXJnZXQ7CisgICAgICAg
IFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VCcmFuY2hUYXJnZXQodGFyZ2V0KSk7CisK
KyAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFj
ay5zaXplKCkgLSAxIC0gdGFyZ2V0XS5jb250cm9sRGF0YTsKKyAgICAgICAgV0FTTV9WQUxJREFU
T1JfRkFJTF9JRighQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSksICJyZXRocm93IGRvZXNu
J3QgcmVmZXIgdG8gYSBjYXRjaCBibG9jayIpOworCisgICAgICAgIFdBU01fVFJZX0FERF9UT19D
T05URVhUKGFkZFJldGhyb3codGFyZ2V0LCBkYXRhKSk7CisgICAgICAgIG1fdW5yZWFjaGFibGVC
bG9ja3MgPSAxOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIGNhc2UgQnI6CiAg
ICAgY2FzZSBCcklmOiB7CiAgICAgICAgIHVpbnQzMl90IHRhcmdldDsKQEAgLTE0ODcsNiArMTYz
Niw2NiBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhw
cmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAK
KyAgICBjYXNlIENhdGNoOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6
OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5h
YmxlZCIpOworCisgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4OworICAgICAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhjZXB0aW9uSW5kZXgp
KTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8uc2lnbmF0
dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRleCk7CisgICAgICAg
IGNvbnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChzaWduYXR1cmVJbmRleCk7CisKKyAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9j
a3MgPiAxKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBDb250cm9sRW50cnkm
IGRhdGEgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoIWlzVHJ5T3JDYXRjaChkYXRhLmNvbnRyb2xEYXRhKSwgImNhdGNoIGJsb2NrIGlzbid0
IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0g
MDsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSB7IH07CisgICAgICAgIFJlc3VsdExpc3Qg
cmVzdWx0czsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2hUb1VucmVh
Y2hhYmxlKGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb25TaWduYXR1cmUsIGRhdGEuY29udHJvbERh
dGEsIHJlc3VsdHMpKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb25TaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpID09IHJlc3VsdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkK
KyAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChleGNlcHRp
b25TaWduYXR1cmUuYXJndW1lbnQoaSksIHJlc3VsdHNbaV0pOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIGNhc2UgQ2F0Y2hBbGw6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlv
bnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3Mg
PiAxKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBDb250cm9sRW50cnkmIGRh
dGEgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3Mg
PSAwOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IHsgfTsKKyAgICAgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRighaXNUcnlPckNhdGNoKGRhdGEuY29udHJvbERhdGEpLCAiY2F0Y2ggYmxv
Y2sgaXNuJ3QgYXNzb2NpYXRlZCB0byBhIHRyeSIpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9f
Q09OVEVYVChhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoZGF0YS5jb250cm9sRGF0YSkpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGNhc2UgRGVsZWdhdGU6IHsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCks
ICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihtX2NvbnRyb2xTdGFjay5zaXplKCkgPT0gMSwgImNhbid0IHVzZSBkZWxlZ2F0
ZSBhdCB0aGUgdG9wLWxldmVsIG9mIGEgZnVuY3Rpb24iKTsKKworICAgICAgICB1aW50MzJfdCB0
YXJnZXQ7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VCcmFuY2hUYXJn
ZXQodGFyZ2V0KSk7CisKKyAgICAgICAgQ29udHJvbEVudHJ5IGNvbnRyb2xFbnRyeSA9IG1fY29u
dHJvbFN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIUNv
bnRyb2xUeXBlOjppc1RyeShjb250cm9sRW50cnkuY29udHJvbERhdGEpLCAiZGVsZWdhdGUgaXNu
J3QgYXNzb2NpYXRlZCB0byBhIHRyeSIpOworCisgICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0g
bV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJv
bERhdGE7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjppc1Ry
eShkYXRhKSAmJiAhQ29udHJvbFR5cGU6OmlzVG9wTGV2ZWwoZGF0YSksICJkZWxlZ2F0ZSB0YXJn
ZXQgaXNuJ3QgYSB0cnkgYmxvY2siKTsKKworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChhZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoZGF0YSwgY29udHJvbEVudHJ5LmNvbnRyb2xEYXRh
KSk7CisgICAgICAgIFN0YWNrIGVtcHR5U3RhY2s7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19D
T05URVhUKGFkZEVuZFRvVW5yZWFjaGFibGUoY29udHJvbEVudHJ5LCBlbXB0eVN0YWNrKSk7Cisg
ICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoY29udHJvbEVudHJ5LmVuY2xvc2VkRXhwcmVz
c2lvblN0YWNrKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBjYXNlIEVuZDog
ewogICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJsb2NrcyA9PSAxKSB7CiAgICAgICAgICAgICBD
b250cm9sRW50cnkgZGF0YSA9IG1fY29udHJvbFN0YWNrLnRha2VMYXN0KCk7CkBAIC0xNDk1LDgg
KzE3MDQsMTAgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJs
ZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgICAgICAgICAgbV9leHByZXNz
aW9uU3RhY2sgPSBXVEZNb3ZlKGRhdGEuZWxzZUJsb2NrU3RhY2spOwogICAgICAgICAgICAgICAg
IFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFModW5pZnkoZGF0YS5jb250cm9sRGF0YSkpOwogICAg
ICAgICAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGVuZEJsb2NrKGRhdGEsIG1fZXhw
cmVzc2lvblN0YWNrKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBXQVNN
X1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbmRUb1VucmVhY2hhYmxlKGRhdGEpKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3RhY2sgZW1wdHlTdGFjazsKKyAgICAgICAg
ICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbmRUb1VucmVhY2hhYmxlKGRhdGEs
IGVtcHR5U3RhY2spKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9leHByZXNzaW9u
U3RhY2suc3dhcChkYXRhLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKICAgICAgICAgfQpAQCAt
MTUwNCw2ICsxNzE1LDEwIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5y
ZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAorICAgIGNhc2UgVHJ5OgorICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFP
cHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUg
bm90IGVuYWJsZWQiKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisKICAgICBjYXNlIExvb3A6CiAg
ICAgY2FzZSBJZjoKICAgICBjYXNlIEJsb2NrOiB7CkBAIC0xNTc2LDYgKzE3OTEsMTYgQEAgYXV0
byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgY2FzZSBS
ZXRocm93OiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFz
c2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOwor
ICAgICAgICB1aW50MzJfdCB0YXJnZXQ7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJ
TFMocGFyc2VCcmFuY2hUYXJnZXQodGFyZ2V0KSk7CisKKyAgICAgICAgQ29udHJvbFR5cGUmIGRh
dGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0XS5j
b250cm9sRGF0YTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighQ29udHJvbFR5cGU6
OmlzQW55Q2F0Y2goZGF0YSksICJyZXRocm93IGRvZXNuJ3QgcmVmZXIgdG8gYSBjYXRjaCBibG9j
ayIpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIGNhc2UgQnI6CiAgICAgY2Fz
ZSBCcklmOiB7CiAgICAgICAgIHVpbnQzMl90IHRhcmdldDsKQEAgLTE1ODMsNiArMTgwOCwxNSBA
QCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lv
bigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKKyAgICBj
YXNlIFRocm93OiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIp
OworCisgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4OworICAgICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhjZXB0aW9uSW5kZXgpKTsKKwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIGNhc2UgSTMyQ29uc3Q6IHsKICAgICAg
ICAgaW50MzJfdCB1bnVzZWQ7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
SW50MzIodW51c2VkKSwgImNhbid0IGdldCBpbW1lZGlhdGUgZm9yICIsIG1fY3VycmVudE9wY29k
ZSwgIiBpbiB1bnJlYWNoYWJsZSBjb250ZXh0Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTdiY2Y0OWJiMmNlYTE3NTBm
ZmI2YmYxZTU1YTc4MjNkZjEzNjIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2FzbUhhbmRsZXJJbmZvLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJXYXNtVGFnLmgiCisK
K25hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIFdhc20geworCit2b2lkIEhhbmRsZXJJbmZvOjpp
bml0aWFsaXplKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSW5mbywgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGxhYmVsKQoreworICAgIG1f
dHlwZSA9IHVubGlua2VkSW5mby5tX3R5cGU7CisgICAgbV9zdGFydCA9IHVubGlua2VkSW5mby5t
X3N0YXJ0OworICAgIG1fZW5kID0gdW5saW5rZWRJbmZvLm1fZW5kOworICAgIG1fdGFyZ2V0ID0g
dW5saW5rZWRJbmZvLm1fdGFyZ2V0OworICAgIG1fdHJ5RGVwdGggPSB1bmxpbmtlZEluZm8ubV90
cnlEZXB0aDsKKyAgICBtX25hdGl2ZUNvZGUgPSBsYWJlbDsKKworICAgIHN3aXRjaCAobV90eXBl
KSB7CisgICAgY2FzZSBIYW5kbGVyVHlwZTo6Q2F0Y2g6CisgICAgICAgIG1fdGFnID0gdW5saW5r
ZWRJbmZvLm1fZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0OworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgSGFuZGxlclR5cGU6OkNhdGNoQWxsOgorICAgICAgICBicmVhazsKKworICAg
IGNhc2UgSGFuZGxlclR5cGU6OkRlbGVnYXRlOgorICAgICAgICBtX2RlbGVnYXRlVGFyZ2V0ID0g
dW5saW5rZWRJbmZvLm1fZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0OworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK2NvbnN0IEhhbmRsZXJJbmZvKiBIYW5kbGVySW5mbzo6aGFuZGxl
ckZvckluZGV4KEluc3RhbmNlJiBpbnN0YW5jZSwgY29uc3QgVmVjdG9yPEhhbmRsZXJJbmZvPiYg
ZXhlcHRpb25IYW5kbGVycywgdW5zaWduZWQgaW5kZXgsIGNvbnN0IFdhc206OlRhZyogZXhjZXB0
aW9uVGFnKQoreworICAgIGJvb2wgZGVsZWdhdGluZyA9IGZhbHNlOworICAgIHVuc2lnbmVkIGRl
bGVnYXRlVGFyZ2V0ID0gMDsKKyAgICBmb3IgKGF1dG8mIGhhbmRsZXIgOiBleGVwdGlvbkhhbmRs
ZXJzKSB7CisgICAgICAgIC8vIEhhbmRsZXJzIGFyZSBvcmRlcmVkIGlubmVybW9zdCBmaXJzdCwg
c28gdGhlIGZpcnN0IGhhbmRsZXIgd2UgZW5jb3VudGVyCisgICAgICAgIC8vIHRoYXQgY29udGFp
bnMgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIHRoZSBjb3JyZWN0IGhhbmRsZXIgdG8gdXNlLgorICAg
ICAgICAvLyBUaGlzIGluZGV4IHVzZWQgaXMgZWl0aGVyIHRoZSBCeXRlY29kZU9mZnNldCBvciBh
IENhbGxTaXRlSW5kZXguCisgICAgICAgIGlmIChoYW5kbGVyLm1fc3RhcnQgPD0gaW5kZXggJiYg
aGFuZGxlci5tX2VuZCA+IGluZGV4KSB7CisgICAgICAgICAgICBpZiAoZGVsZWdhdGluZykgewor
ICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLm1fdHJ5RGVwdGggIT0gZGVsZWdhdGVUYXJnZXQp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGRlbGVnYXRp
bmcgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBtYXRjaCA9IGZh
bHNlOworICAgICAgICAgICAgc3dpdGNoIChoYW5kbGVyLm1fdHlwZSkgeworICAgICAgICAgICAg
Y2FzZSBIYW5kbGVyVHlwZTo6Q2F0Y2g6CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBleGNlcHRp
b25UYWcgJiYgaW5zdGFuY2UudGFnKGhhbmRsZXIubV90YWcpID09ICpleGNlcHRpb25UYWc7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEhhbmRsZXJUeXBlOjpDYXRj
aEFsbDoKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZToKKyAgICAgICAgICAg
ICAgICBkZWxlZ2F0aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWxlZ2F0ZVRhcmdldCA9
IGhhbmRsZXIubV9kZWxlZ2F0ZVRhcmdldDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFtYXRjaCkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgcmV0dXJuICZoYW5kbGVyOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21IYW5kbGVySW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyNTExOTNkMjEzMTc5ZWJkZTk5NTQ0
YzI1M2VkNDk4OWQyZjY0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgV2FzbSB7CisKK2Ns
YXNzIEluc3RhbmNlOworY2xhc3MgVGFnOworCitlbnVtIGNsYXNzIEhhbmRsZXJUeXBlIHsKKyAg
ICBDYXRjaCA9IDAsCisgICAgQ2F0Y2hBbGwgPSAxLAorICAgIERlbGVnYXRlID0gMiwKK307CisK
K3N0cnVjdCBIYW5kbGVySW5mb0Jhc2UgeworICAgIEhhbmRsZXJUeXBlIG1fdHlwZTsKKyAgICB1
aW50MzJfdCBtX3N0YXJ0OworICAgIHVpbnQzMl90IG1fZW5kOworICAgIHVpbnQzMl90IG1fdGFy
Z2V0OworICAgIHVpbnQzMl90IG1fdHJ5RGVwdGg7CisgICAgdWludDMyX3QgbV9leGNlcHRpb25J
bmRleE9yRGVsZWdhdGVUYXJnZXQ7Cit9OworCitzdHJ1Y3QgVW5saW5rZWRIYW5kbGVySW5mbyA6
IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgeworICAgIFVubGlua2VkSGFuZGxlckluZm8oKQorICAg
IHsKKyAgICB9CisKKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKEhhbmRsZXJUeXBlIGhhbmRsZXJU
eXBlLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgZW5kLCB1aW50MzJfdCB0YXJnZXQsIHVpbnQz
Ml90IHRyeURlcHRoLCB1aW50MzJfdCBleGNlcHRpb25JbmRleE9yRGVsZWdhdGVUYXJnZXQpCisg
ICAgeworICAgICAgICBtX3R5cGUgPSBoYW5kbGVyVHlwZTsKKyAgICAgICAgbV9zdGFydCA9IHN0
YXJ0OworICAgICAgICBtX2VuZCA9IGVuZDsKKyAgICAgICAgbV90YXJnZXQgPSB0YXJnZXQ7Cisg
ICAgICAgIG1fdHJ5RGVwdGggPSB0cnlEZXB0aDsKKyAgICAgICAgbV9leGNlcHRpb25JbmRleE9y
RGVsZWdhdGVUYXJnZXQgPSBleGNlcHRpb25JbmRleE9yRGVsZWdhdGVUYXJnZXQ7CisgICAgfQor
fTsKKworc3RydWN0IEhhbmRsZXJJbmZvIDogcHVibGljIEhhbmRsZXJJbmZvQmFzZSB7CisgICAg
c3RhdGljIGNvbnN0IEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9ySW5kZXgoSW5zdGFuY2UmLCBjb25z
dCBWZWN0b3I8SGFuZGxlckluZm8+JiBleGVwdGlvbkhhbmRsZXJzLCB1bnNpZ25lZCBpbmRleCwg
Y29uc3QgV2FzbTo6VGFnKiBleGNlcHRpb25UYWcpOworCisgICAgdm9pZCBpbml0aWFsaXplKGNv
bnN0IFVubGlua2VkSGFuZGxlckluZm8mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4pOworCisgICAgdW5zaWduZWQgdGFnKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX3R5cGUgPT0gSGFuZGxlclR5cGU6OkNhdGNoKTsKKyAgICAgICAgcmV0dXJu
IG1fdGFnOworICAgIH0KKworICAgIHVuc2lnbmVkIGRlbGVnYXRlVGFyZ2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSGFuZGxlclR5cGU6OkRlbGVnYXRlKTsKKyAg
ICAgICAgcmV0dXJuIG1fZGVsZWdhdGVUYXJnZXQ7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1fbmF0aXZlQ29kZTsKKworcHJpdmF0
ZToKKyAgICB1bmlvbiB7CisgICAgICAgIHVuc2lnbmVkIG1fdGFnOworICAgICAgICB1bnNpZ25l
ZCBtX2RlbGVnYXRlVGFyZ2V0OworICAgIH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKaW5kZXggZmZkNzVjOGQwYzhmOWFiNzMxZjdjYjQ5
YTg0MmQ5MDY1YjgyODNiNi4uMDI1NGEwYzEwMjk3YWI4ZGUxODU0ZWE4MGM5ZGFhZTRjMWVhNDgw
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCkBAIC0z
NCw2ICszNCw3IEBACiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxl
SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgorI2luY2x1
ZGUgIldhc21UYWcuaCIKICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTkwLDcgKzkxLDkgQEAgUmVmPEluc3Rh
bmNlPiBJbnN0YW5jZTo6Y3JlYXRlKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9k
dWxlLCBFbnRyeUZyYW0KICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyAoTm90TnVsbCwgZmFzdE1h
bGxvYyhhbGxvY2F0aW9uU2l6ZShtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVu
Y3Rpb25Db3VudCgpLCBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgpKSkp
IEluc3RhbmNlKGNvbnRleHQsIFdURk1vdmUobW9kdWxlKSwgcG9pbnRlclRvVG9wRW50cnlGcmFt
ZSwgcG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCwgV1RGTW92ZShzdG9yZVRvcENhbGxGcmFtZSkp
KTsKIH0KIAotSW5zdGFuY2U6On5JbnN0YW5jZSgpIHsgfQorSW5zdGFuY2U6On5JbnN0YW5jZSgp
Cit7Cit9CiAKIHNpemVfdCBJbnN0YW5jZTo6ZXh0cmFNZW1vcnlBbGxvY2F0ZWQoKSBjb25zdAog
ewpAQCAtMjk3LDYgKzMwMCwxNiBAQCB2b2lkIEluc3RhbmNlOjpsaW5rR2xvYmFsKHVuc2lnbmVk
IGksIFJlZjxHbG9iYWw+JiYgZ2xvYmFsKQogICAgIG1fbGlua2VkR2xvYmFscy5zZXQoaSwgV1RG
TW92ZShnbG9iYWwpKTsKIH0KIAordm9pZCBJbnN0YW5jZTo6YWRkVGFnKGNvbnN0IFRhZyYgdGFn
KQoreworICAgIG1fdGFncy5hcHBlbmQoUmVmIHsgdGFnIH0pOworfQorCit2b2lkIEluc3RhbmNl
OjphZGRUYWcoVGFnJiYgdGFnKQoreworICAgIG1fdGFncy5hcHBlbmQoYWRvcHRSZWYodGFnKSk7
Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5z
dGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCmluZGV4
IDYwZTE0Y2I1YWMwNjU4MjQ0MzQzNzgwOWQ1NDYzM2VkZjcxY2M4YjkuLmRiOTc0ZDEzMGQyNzI4
NTdhY2MzNGRkZTU4ZGUxNGY0MzUyMTQ0YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21JbnN0YW5jZS5oCkBAIC0yMTAsNiArMjEwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9z
dG9yZVRvcENhbGxGcmFtZShjYWxsRnJhbWUpOwogICAgIH0KIAorICAgIHZvaWQgYWRkVGFnKGNv
bnN0IFRhZyYpOworICAgIHZvaWQgYWRkVGFnKFRhZyYmKTsKKyAgICBjb25zdCBUYWcmIHRhZyh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV90YWdzW2ldOyB9CisKIHByaXZhdGU6CiAgICAg
SW5zdGFuY2UoQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIEVudHJ5RnJhbWUqKiwgdm9pZCoqLCBT
dG9yZVRvcENhbGxGcmFtZUNhbGxiYWNrJiYpOwogICAgIApAQCAtMjM3LDYgKzI0MSw3IEBAIHBy
aXZhdGU6CiAgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmPEdsb2JhbD4sIEludEhhc2g8dWludDMy
X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9saW5r
ZWRHbG9iYWxzOwogICAgIEJpdFZlY3RvciBtX3Bhc3NpdmVFbGVtZW50czsKICAgICBCaXRWZWN0
b3IgbV9wYXNzaXZlRGF0YVNlZ21lbnRzOworICAgIFZlY3RvcjxSZWZQdHI8Y29uc3QgVGFnPj4g
bV90YWdzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCmluZGV4IDgxYTVjZGJj
YWUzMjg2YmUzMmNhNDkwZGU0NWVlM2FmZjc4MTk4NTYuLjM1NzY2NmJkYzNkNjVkZTQ1NzBmZDU1
ZTg5OWM2NmVlZDEyODNjMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtNjIsOCArNjIsMjYgQEAgcHVibGljOgogICAgICAg
ICBSZWY8TGFiZWw+IG1fYWx0ZXJuYXRlOwogICAgIH07CiAKLSAgICBzdHJ1Y3QgQ29udHJvbFR5
cGUgOiBwdWJsaWMgVmFyaWFudDxDb250cm9sTG9vcCwgQ29udHJvbFRvcExldmVsLCBDb250cm9s
QmxvY2ssIENvbnRyb2xJZj4gewotICAgICAgICB1c2luZyBCYXNlID0gVmFyaWFudDxDb250cm9s
TG9vcCwgQ29udHJvbFRvcExldmVsLCBDb250cm9sQmxvY2ssIENvbnRyb2xJZj47CisgICAgc3Ry
dWN0IENvbnRyb2xUcnkgeworICAgICAgICBSZWY8TGFiZWw+IG1fdHJ5OworICAgICAgICB1bnNp
Z25lZCBtX3RyeURlcHRoOworICAgIH07CisKKyAgICBzdHJ1Y3QgQ29udHJvbENhdGNoIHsKKyAg
ICAgICAgQ2F0Y2hLaW5kIG1fa2luZDsKKyAgICAgICAgUmVmPExhYmVsPiBtX3RyeVN0YXJ0Owor
ICAgICAgICBSZWY8TGFiZWw+IG1fdHJ5RW5kOworICAgICAgICB1bnNpZ25lZCBtX3RyeURlcHRo
OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9leGNlcHRpb247CisgICAgfTsKKworICAgIHN0
cnVjdCBDYXRjaFJld3JpdGVJbmZvIHsKKyAgICAgICAgdW5zaWduZWQgbV9pbnN0cnVjdGlvbk9m
ZnNldDsKKyAgICAgICAgdW5zaWduZWQgbV90cnlEZXB0aDsKKyAgICB9OworCisgICAgc3RydWN0
IENvbnRyb2xUeXBlIDogcHVibGljIFZhcmlhbnQ8Q29udHJvbExvb3AsIENvbnRyb2xUb3BMZXZl
bCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWYsIENvbnRyb2xUcnksIENvbnRyb2xDYXRjaD4gewor
ICAgICAgICB1c2luZyBCYXNlID0gVmFyaWFudDxDb250cm9sTG9vcCwgQ29udHJvbFRvcExldmVs
LCBDb250cm9sQmxvY2ssIENvbnRyb2xJZiwgQ29udHJvbFRyeSwgQ29udHJvbENhdGNoPjsKIAog
ICAgICAgICBDb250cm9sVHlwZSgpCiAgICAgICAgICAgICA6IEJhc2UoQ29udHJvbEJsb2NrIHsg
fSkKQEAgLTkwLDggKzEwOCwyOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gQ29udHJv
bFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwg
V1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sSWYgeyBXVEZNb3ZlKGFsdGVybmF0ZSkgfSk7
CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgYm9vbCBpc0lmKGNvbnN0IENvbnRyb2xUeXBl
JiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xJZj4oY29u
dHJvbCk7IH0KKyAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGNyZWF0ZVRyeShCbG9ja1NpZ25h
dHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExhYmVsPiYmIHRyeUxhYmVs
LCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9uLCB1bnNpZ25lZCB0cnlEZXB0aCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXpl
IC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29u
dHJvbFRyeSB7IFdURk1vdmUodHJ5TGFiZWwpLCB0cnlEZXB0aCB9KTsKKyAgICAgICAgfQorCisg
ICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBjcmVhdGVDYXRjaChCbG9ja1NpZ25hdHVyZSBzaWdu
YXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExhYmVsPiYmIHRyeVN0YXJ0LCBSZWZQdHI8
TGFiZWw+JiYgY29udGludWF0aW9uLCBSZWY8TGFiZWw+IHRyeUVuZCwgdW5zaWduZWQgdHJ5RGVw
dGgsIFZpcnR1YWxSZWdpc3RlciBleGNlcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xDYXRjaCB7IENhdGNoS2lu
ZDo6Q2F0Y2gsIFdURk1vdmUodHJ5U3RhcnQpLCBXVEZNb3ZlKHRyeUVuZCksIHRyeURlcHRoLCBl
eGNlcHRpb24gfSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgYm9vbCBpc0xvb3AoY29u
c3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
Q29udHJvbExvb3A+KGNvbnRyb2wpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwo
Y29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8Q29udHJvbFRvcExldmVsPihjb250cm9sKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0Js
b2NrKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPENvbnRyb2xCbG9jaz4oY29udHJvbCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNJ
Zihjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxDb250cm9sSWY+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzVHJ5KGNv
bnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PENvbnRyb2xUcnk+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQW55Q2F0Y2go
Y29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8Q29udHJvbENhdGNoPihjb250cm9sKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNo
KGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
IVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbENhdGNoPihjb250cm9sKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBDb250cm9sQ2F0Y2ggY2F0Y2hEYXRh
ID0gV1RGOjpnZXQ8Q29udHJvbENhdGNoPihjb250cm9sKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXRjaERhdGEubV9raW5kID09IENhdGNoS2luZDo6Q2F0Y2g7CisgICAgICAgIH0KIAogICAgICAg
ICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrU2l6ZTsgfQogICAg
ICAgICBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVy
ZTsgfQpAQCAtMTUyLDE3ICsxOTEsMjQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZFJlc3VsdChtYWtlU3RyaW5nKCJXZWJBc3NlbWJseS5Nb2R1bGUgZmFpbGVkIGNvbXBpbGlu
ZzogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7CiAgICAgfQogCi0gICAgTExJbnRHZW5lcmF0
b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmKTsKKyAgICBMTEludEdlbmVyYXRvcihNb2R1bGVJbmZvcm1hdGlvbiYsIHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYpOwogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBmaW5hbGl6ZSgpOwogCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3Bjb2RlPgorICAgIHZvaWQgcmVwYXRjaChjb25zdCBDYXRjaFJld3JpdGVJbmZvJik7
CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeHByZXNzaW9uTGlzdEEsIHR5cGVuYW1lIEV4cHJl
c3Npb25MaXN0Qj4KICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Np
b25MaXN0QSYgZGVzdGluYXRpb25zLCBjb25zdCBFeHByZXNzaW9uTGlzdEImIHZhbHVlcykKICAg
ICB7CiAgICAgICAgIEFTU0VSVChkZXN0aW5hdGlvbnMuc2l6ZSgpIDw9IHZhbHVlcy5zaXplKCkp
OwogICAgICAgICBhdXRvIG9mZnNldCA9IHZhbHVlcy5zaXplKCkgLSBkZXN0aW5hdGlvbnMuc2l6
ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgZGVzdGluYXRpb25zW2ldLCB2
YWx1ZXNbb2Zmc2V0ICsgaV0pOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3Rp
bmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byYgc3JjID0gdmFsdWVzW29m
ZnNldCArIGldOworICAgICAgICAgICAgYXV0byYgZHN0ID0gZGVzdGluYXRpb25zW2ldOworICAg
ICAgICAgICAgaWYgKChWaXJ0dWFsUmVnaXN0ZXIpc3JjICE9IChWaXJ0dWFsUmVnaXN0ZXIpZHN0
KQorICAgICAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgZHN0LCBzcmMpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgZW51bSBOb0NvbnNpc3RlbmN5Q2hlY2tUYWcgeyBOb0NvbnNpc3Rl
bmN5Q2hlY2sgfTsKQEAgLTI0MywxMSArMjg5LDIxIEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xUeXBlJiwgU3RhY2smKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShD
b250cm9sVHlwZSYpOwogCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
VHJ5KEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBy
ZXN1bHQsIFN0YWNrJiBuZXdTdGFjayk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYs
IFN0YWNrJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbChTdGFjayYsIENv
bnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0
Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRlVG9VbnJlYWNo
YWJsZShDb250cm9sVHlwZSYsIENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkVGhyb3codW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIFN0YWNrJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5cGUmKTsKKwogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sVHlw
ZSYsIFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEJyYW5jaChDb250cm9sVHlwZSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
U3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRy
b2xUeXBlKj4mIHRhcmdldHMsIENvbnRyb2xUeXBlJiBkZWZhdWx0VGFyZ2V0cywgU3RhY2smIGV4
cHJlc3Npb25TdGFjayk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5k
QmxvY2soQ29udHJvbEVudHJ5JiwgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7Ci0gICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50
cnkmLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0geyB9LCBib29sIHVucmVhY2hhYmxl
ID0gdHJ1ZSk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9V
bnJlYWNoYWJsZShDb250cm9sRW50cnkmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBib29sIHVu
cmVhY2hhYmxlID0gdHJ1ZSk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
ZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUsIGNvbnN0IFN0YWNrJik7CiAKICAgICAvLyBDYWxs
cwpAQCAtMzM3LDcgKzM5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBXYXNtRHJvcEtlZXA6
OmVtaXQodGhpcywgc3RhcnRPZmZzZXQsIGRyb3AsIGtlZXApOwogICAgIH0KIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RhY2ssIHR5cGVu
YW1lIEZ1bmN0b3I+CiAgICAgdm9pZCB3YWxrRXhwcmVzc2lvblN0YWNrKFN0YWNrJiBleHByZXNz
aW9uU3RhY2ssIHVuc2lnbmVkIHN0YWNrU2l6ZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAg
ICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGV4cHJlc3Npb25TdGFjay5zaXplKCk7IGkg
PiAwOyAtLWkpIHsKQEAgLTM0Niw3ICs0MDIsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
fQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBTdGFjaywgdHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHdhbGtFeHByZXNzaW9uU3RhY2so
U3RhY2smIGV4cHJlc3Npb25TdGFjaywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAg
ICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZXhwcmVzc2lvblN0YWNrLCBtX3N0YWNrU2l6ZSwg
ZnVuY3Rvcik7CkBAIC0zNTUsNyArNDExLDggQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgogICAgIHZvaWQgd2Fsa0V4cHJlc3Npb25TdGFjayhDb250cm9sRW50cnkm
IGVudHJ5LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgd2Fsa0V4cHJl
c3Npb25TdGFjayhlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjaywgZW50cnkuY29udHJvbERh
dGEuc3RhY2tTaXplKCksIGZ1bmN0b3IpOworICAgICAgICB1bnNpZ25lZCBzdGFja1NpemUgPSBl
bnRyeS5jb250cm9sRGF0YS5zdGFja1NpemUoKTsKKyAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFj
ayhlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjaywgc3RhY2tTaXplLCBmdW5jdG9yKTsKICAg
ICB9CiAKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKQpAQCAtMzgxLDcgKzQzOCw3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKFN0YWNrJiBl
eHByZXNzaW9uU3RhY2ssIE5vQ29uc2lzdGVuY3lDaGVja1RhZykKICAgICB7Ci0gICAgICAgIHdh
bGtFeHByZXNzaW9uU3RhY2soZXhwcmVzc2lvblN0YWNrLCBbJl0oVHlwZWRFeHByZXNzaW9uJiBl
eHByZXNzaW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgeworICAgICAgICB3YWxrRXhwcmVzc2lv
blN0YWNrKGV4cHJlc3Npb25TdGFjaywgWyZdKGF1dG8mIGV4cHJlc3Npb24sIFZpcnR1YWxSZWdp
c3RlciBzbG90KSB7CiAgICAgICAgICAgICBBU1NFUlQoZXhwcmVzc2lvbi52YWx1ZSgpID09IHNs
b3QgfHwgZXhwcmVzc2lvbi52YWx1ZSgpLmlzQ29uc3RhbnQoKSB8fCBleHByZXNzaW9uLnZhbHVl
KCkuaXNBcmd1bWVudCgpIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihleHByZXNzaW9uLnZhbHVl
KCkudG9Mb2NhbCgpKSA8IG1fY29kZUJsb2NrLT5tX251bVZhcnMpOwogICAgICAgICAgICAgaWYg
KGV4cHJlc3Npb24udmFsdWUoKSA9PSBzbG90KQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAg
LTQxNyw2ICs0NzQsOCBAQCBwcml2YXRlOgogICAgICAgICBtX3N0YWNrU2l6ZSArPSBuZXdTdGFj
ay5zaXplKCk7CiAgICAgfQogCisgICAgdm9pZCBmaW5hbGl6ZVByZXZpb3VzQmxvY2tGb3JDYXRj
aChDb250cm9sVHlwZSYsIFN0YWNrJik7CisKICAgICBzdHJ1Y3QgU3dpdGNoRW50cnkgewogICAg
ICAgICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNldDsKICAgICAgICAgaW50KiBqdW1w
VGFyZ2V0OwpAQCAtNDI5LDcgKzQ4OCw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIEZ1bmN0
aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiogbV9wYXJzZXIgeyBudWxscHRyIH07Ci0gICAgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKKyAgICBNb2R1bGVJbmZvcm1hdGlvbiYgbV9p
bmZvOwogICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJTlRfTUFYIH07CiAg
ICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gbV9ub3JtYWxpemVkQXJndW1lbnRzOwogICAgIEhh
c2hNYXA8TGFiZWwqLCBWZWN0b3I8U3dpdGNoRW50cnk+PiBtX3N3aXRjaGVzOwpAQCAtNDQwLDkg
KzQ5OSwxMiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IG1fcmVz
dWx0czsKICAgICBDaGVja2VkPHVuc2lnbmVkPiBtX3N0YWNrU2l6ZSB7IDAgfTsKICAgICBDaGVj
a2VkPHVuc2lnbmVkPiBtX21heFN0YWNrU2l6ZSB7IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVk
PiBtX3RyeURlcHRoIHsgMCB9OworICAgIENoZWNrZWQ8dW5zaWduZWQ+IG1fbWF4VHJ5RGVwdGgg
eyAwIH07CisgICAgYm9vbCBtX3VzZXNFeGNlcHRpb25zIHsgZmFsc2UgfTsKIH07CiAKLUV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRD
b21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0
aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mIGluZm8sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCitFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2Rl
KGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4KQogewogICAgIExMSW50R2VuZXJhdG9yIGxsaW50R2VuZXJhdG9yKGlu
Zm8sIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8TExJbnRH
ZW5lcmF0b3I+IHBhcnNlcihsbGludEdlbmVyYXRvciwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25M
ZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CkBAIC00NjYsNyArNTI4LDcgQEAgc3RhdGljIFRocmVh
ZFNwZWNpZmljPEJ1ZmZlcj4mIHRocmVhZFNwZWNpZmljQnVmZmVyKCkKICAgICByZXR1cm4gKnRo
cmVhZFNwZWNpZmljQnVmZmVyUHRyOwogfQogCi1MTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0
b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYpCitMTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVy
ZSYpCiAgICAgOiBCeXRlY29kZUdlbmVyYXRvckJhc2UobWFrZVVuaXF1ZTxGdW5jdGlvbkNvZGVC
bG9jaz4oZnVuY3Rpb25JbmRleCksIDApCiAgICAgLCBtX2luZm8oaW5mbykKICAgICAsIG1fZnVu
Y3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQpAQCAtNDg1LDkgKzU0NywyMiBAQCBMTEludEdlbmVy
YXRvcjo6TExJbnRHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVuc2ln
bmVkIGZ1bmN0aW9uSQogICAgIFdhc21FbnRlcjo6ZW1pdCh0aGlzKTsKIH0KIAordGVtcGxhdGU8
dHlwZW5hbWUgT3Bjb2RlPgordm9pZCBMTEludEdlbmVyYXRvcjo6cmVwYXRjaChjb25zdCBDYXRj
aFJld3JpdGVJbmZvJiBpbmZvKQoreworICAgIGF1dG8gcmVmID0gbV93cml0ZXIucmVmKGluZm8u
bV9pbnN0cnVjdGlvbk9mZnNldCk7CisgICAgT3Bjb2RlKiBpbnN0cnVjdGlvbiA9IHJlZi0+Y2Fz
dDxPcGNvZGUsIFdhc21PcGNvZGVUcmFpdHM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGV4Y2Vw
dGlvblJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9tYXhTdGFja1NpemUgKyBp
bmZvLm1fdHJ5RGVwdGggLSAxKTsKKyAgICBpbnN0cnVjdGlvbi0+c2V0RXhjZXB0aW9uKGV4Y2Vw
dGlvblJlZ2lzdGVyLCBbXSgpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcigpOworICAgIH0pOworfQorCiBzdGQ6
OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IExMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSgp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jb2RlQmxvY2spOworCiAgICAgc2l6ZV90IG51bUNh
bGxlZUxvY2FscyA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lz
dGVycygpLCBtX21heFN0YWNrU2l6ZSk7CiAgICAgbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlTG9j
YWxzID0gbnVtQ2FsbGVlTG9jYWxzOwogICAgIFJFTEVBU0VfQVNTRVJUKG51bUNhbGxlZUxvY2Fs
cyA9PSBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVMb2NhbHMpOwpAQCAtNTAwLDYgKzU3NSw5IEBA
IHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4gTExJbnRHZW5lcmF0b3I6OmZpbmFs
aXplKCkKICAgICBSRUxFQVNFX0FTU0VSVCh1c2VkQnVmZmVyLmNhcGFjaXR5KCkgPT0gb2xkQ2Fw
YWNpdHkpOwogICAgICp0aHJlYWRTcGVjaWZpYyA9IFdURk1vdmUodXNlZEJ1ZmZlcik7CiAKKyAg
ICBpZiAoIW1fdXNlc0V4Y2VwdGlvbnMpCisgICAgICAgIG1faW5mby5tX2Z1bmN0aW9uRG9lc05v
dFVzZUV4Y2VwdGlvbnMucXVpY2tTZXQobV9mdW5jdGlvbkluZGV4KTsKKwogICAgIHJldHVybiBX
VEZNb3ZlKG1fY29kZUJsb2NrKTsKIH0KIApAQCAtNTgwLDcgKzY1OCw3IEBAIGF1dG8gTExJbnRH
ZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSkgLT4gTExJCiAKICAgICAvLyBGSVhNRTogd2UgYXJlIGFsbG9jYXRpbmcgdGhlIGV4dHJh
IHNwYWNlIGZvciB0aGUgYXJndW1lbnQvcmV0dXJuIGNvdW50IGluIG9yZGVyIHRvIGF2b2lkIGlu
dGVyZmVyZW5jZSwgYnV0IHdlIGNvdWxkIGRvIGJldHRlcgogICAgIC8vIE5PVEU6IFdlIGluY3Jl
YXNlIGFyZyBjb3VudCBieSAxIGZvciB0aGUgY2FzZSBvZiBpbmRpcmVjdCBjYWxscwotICAgIG1f
c3RhY2tTaXplICs9IHN0ZDo6bWF4KHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgKyAxLCBzaWdu
YXR1cmUucmV0dXJuQ291bnQoKSkgKyBncHJDb3VudCArIGZwckNvdW50ICsgc3RhY2tDb3VudCAr
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOworICAgIG1fc3RhY2tTaXplICs9IHN0
ZDo6bWF4KHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgKyAxLCBzaWduYXR1cmUucmV0dXJuQ291
bnQoKSkgKyBncHJDb3VudCArIGZwckNvdW50ICsgc3RhY2tDb3VudCArIENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzICsgMTsKICAgICBpZiAobV9zdGFja1NpemUudmFsdWUoKSAlIHN0
YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpCiAgICAgICAgICsrbV9zdGFja1NpemU7CiAgICAgaWYg
KG1fbWF4U3RhY2tTaXplIDwgbV9zdGFja1NpemUpCkBAIC01OTEsNyArNjY5LDcgQEAgYXV0byBM
TEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlKSAtPiBMTEkKICAgICBSZXN1bHRMaXN0IHRlbXBvcmFyeVJlc3VsdHMoc2lnbmF0
dXJlLnJldHVybkNvdW50KCkpOwogCiAgICAgY29uc3QgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSBt
X3N0YWNrU2l6ZTsKLSAgICBjb25zdCB1bnNpZ25lZCBiYXNlID0gc3RhY2tPZmZzZXQgLSBDYWxs
RnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKKyAgICBjb25zdCB1bnNpZ25lZCBiYXNlID0g
c3RhY2tPZmZzZXQgLSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAtIDE7CiAKICAg
ICBjb25zdCB1aW50MzJfdCBncHJMaW1pdCA9IGJhc2UgLSBzdGFja0NvdW50IC0gZ3ByQ291bnQ7
CiAgICAgY29uc3QgdWludDMyX3QgZnByTGltaXQgPSBncHJMaW1pdCAtIGZwckNvdW50OwpAQCAt
NjgzLDcgKzc2MSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNh
bGxlZShjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gVmVjCiAKICAgICB1aW50MzJfdCBn
cHJJbmRleCA9IDA7CiAgICAgdWludDMyX3QgZnBySW5kZXggPSBncHJDb3VudDsKLSAgICB1aW50
MzJfdCBzdGFja0luZGV4ID0gMDsKKyAgICB1aW50MzJfdCBzdGFja0luZGV4ID0gMTsKICAgICBj
b25zdCB1aW50MzJfdCBtYXhHUFJJbmRleCA9IGdwckNvdW50OwogICAgIGNvbnN0IHVpbnQzMl90
IG1heEZQUkluZGV4ID0gbWF4R1BSSW5kZXggKyBmcHJDb3VudDsKIApAQCAtNzMxLDcgKzgwOSw3
IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAogICAgIGNvbnN0IHVpbnQzMl90IG1heEZQUkluZGV4
ID0gZ3ByQ291bnQgKyBmcHJDb3VudDsKICAgICB1aW50MzJfdCBncHJJbmRleCA9IDA7CiAgICAg
dWludDMyX3QgZnBySW5kZXggPSBtYXhHUFJJbmRleDsKLSAgICB1aW50MzJfdCBzdGFja0luZGV4
ID0gMDsKKyAgICB1aW50MzJfdCBzdGFja0luZGV4ID0gMTsKIAogICAgIFZlY3RvcjxWaXJ0dWFs
UmVnaXN0ZXI+IHJlZ2lzdGVyQXJndW1lbnRzKGdwckNvdW50ICsgZnByQ291bnQpOwogICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBncHJDb3VudCArIGZwckNvdW50OyBpKyspCkBAIC05MDYs
NiArOTg0LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBz
aWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ28KIAogICAgIGJsb2NrID0gQ29udHJv
bFR5cGU6Omxvb3Aoc2lnbmF0dXJlLCBtX3N0YWNrU2l6ZSwgV1RGTW92ZShib2R5KSwgV1RGTW92
ZShjb250aW51YXRpb24pKTsKIAorICAgIFZlY3Rvcjx1bnNpZ25lZD4gdW5yZXNvbHZlZE9mZnNl
dHM7CiAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gb3NyRW50cnlEYXRhOwogICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV9udW1Bcmd1bWVudHM7IGkrKykKICAg
ICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZChtX25vcm1hbGl6ZWRBcmd1bWVudHNbaV0pOwpAQCAt
OTE2LDkgKzk5NSwxMiBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0
dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDbwogICAgIGZvciAodWludDMy
X3QgaSA9IGdwckNvdW50ICsgZnByQ291bnQgKyBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lz
dGVyczsgaSA8IG1fY29kZUJsb2NrLT5tX251bVZhcnM7IGkrKykKICAgICAgICAgb3NyRW50cnlE
YXRhLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNr
KCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgeworICAgICAgICBDb250cm9sVHlwZSYgZGF0YSA9
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOwogICAg
ICAgICBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2Nv
bnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CiAgICAgICAgIGZvciAoVHlwZWRF
eHByZXNzaW9uIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCiAgICAgICAgICAgICBvc3JF
bnRyeURhdGEuYXBwZW5kKGV4cHJlc3Npb24pOworICAgICAgICBpZiAoQ29udHJvbFR5cGU6Omlz
QW55Q2F0Y2goZGF0YSkpCisgICAgICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKFdURjo6Z2V0
PENvbnRyb2xDYXRjaD4oZGF0YSkubV9leGNlcHRpb24pOwogICAgIH0KICAgICBmb3IgKFR5cGVk
RXhwcmVzc2lvbiBleHByZXNzaW9uIDogZW5jbG9zaW5nU3RhY2spCiAgICAgICAgIG9zckVudHJ5
RGF0YS5hcHBlbmQoZXhwcmVzc2lvbik7CkBAIC05NzUsNiArMTA1NywxNTkgQEAgYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBh
cnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCithdXRvIExMSW50R2VuZXJhdG9yOjph
ZGRUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENv
bnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjaykgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOworICAgICsrbV90cnlEZXB0aDsKKyAgICBpZiAo
bV9tYXhUcnlEZXB0aCA8IG1fdHJ5RGVwdGgpCisgICAgICAgIG1fbWF4VHJ5RGVwdGggPSBtX3Ry
eURlcHRoOworCisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdT
dGFjayk7CisgICAgUmVmPExhYmVsPiB0cnlMYWJlbCA9IG5ld0VtaXR0ZWRMYWJlbCgpOworICAg
IFJlZjxMYWJlbD4gY29udGludWF0aW9uID0gbmV3TGFiZWwoKTsKKyAgICByZXN1bHQgPSBDb250
cm9sVHlwZTo6Y3JlYXRlVHJ5KHNpZ25hdHVyZSwgbV9zdGFja1NpemUsIFdURk1vdmUodHJ5TGFi
ZWwpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIG1fdHJ5RGVwdGgpOworICAgIHJldHVybiB7IH07
Cit9CisKK3ZvaWQgTExJbnRHZW5lcmF0b3I6OmZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNo
KENvbnRyb2xUeXBlJiBkYXRhLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKQoreworICAgIGlmICgh
Q29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpCisgICAgICAgIG1hdGVyaWFsaXplQ29uc3Rh
bnRzQW5kTG9jYWxzKGV4cHJlc3Npb25TdGFjayk7CisgICAgZWxzZSB7CisgICAgICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGRhdGEuc3RhY2tTaXplKCkpOworICAgICAgICBmb3IgKFR5cGVkRXhwcmVz
c2lvbiYgdmFsdWUgOiBleHByZXNzaW9uU3RhY2spIHsKKyAgICAgICAgICAgIFdhc21Nb3Y6OmVt
aXQodGhpcywgZHN0LCB2YWx1ZSk7CisgICAgICAgICAgICB2YWx1ZSA9IFR5cGVkRXhwcmVzc2lv
biB7IHZhbHVlLnR5cGUoKSwgZHN0IH07CisgICAgICAgICAgICBkc3QgLT0gMTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBXYXNtSm1wOjplbWl0KHRoaXMsIGRhdGEubV9jb250aW51YXRpb24tPmJp
bmQodGhpcykpOworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBleGNlcHRpb25TaWduYXR1cmUsIFN0YWNr
JiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRz
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2go
ZGF0YSwgZXhwcmVzc2lvblN0YWNrKTsKKyAgICByZXR1cm4gYWRkQ2F0Y2hUb1VucmVhY2hhYmxl
KGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb25TaWduYXR1cmUsIGRhdGEsIHJlc3VsdHMpOworfQor
CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhj
ZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlLCBDb250cm9s
VHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOworICAgIFJlZjxMYWJlbD4gY2F0Y2hMYWJlbCA9IG5l
d0VtaXR0ZWRMYWJlbCgpOworCisgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBleGNlcHRpb24gPSBwdXNoKCk7CisgICAgaWYgKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8Q29udHJvbFRyeT4oZGF0YSkpIHsKKyAgICAgICAgQ29udHJvbFRyeSYg
dHJ5RGF0YSA9IFdURjo6Z2V0PENvbnRyb2xUcnk+KGRhdGEpOworICAgICAgICBkYXRhID0gQ29u
dHJvbFR5cGU6OmNyZWF0ZUNhdGNoKGRhdGEubV9zaWduYXR1cmUsIGRhdGEuc3RhY2tTaXplKCks
IFdURk1vdmUodHJ5RGF0YS5tX3RyeSksIFdURk1vdmUoZGF0YS5tX2NvbnRpbnVhdGlvbiksIGNh
dGNoTGFiZWwsIHRyeURhdGEubV90cnlEZXB0aCwgZXhjZXB0aW9uKTsKKyAgICB9CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
ICsraSkKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaCgpKTsKKworICAgIGlmIChDb250ZXh0
Ojp1c2VGYXN0VExTKCkpCisgICAgICAgIFdhc21DYXRjaDo6ZW1pdCh0aGlzLCBleGNlcHRpb25J
bmRleCwgZXhjZXB0aW9uLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCByZXN1
bHRzLmlzRW1wdHkoKSA/IDAgOiAtcmVzdWx0c1swXS5vZmZzZXQoKSk7CisgICAgZWxzZQorICAg
ICAgICBXYXNtQ2F0Y2hOb1Rsczo6ZW1pdCh0aGlzLCBleGNlcHRpb25JbmRleCwgZXhjZXB0aW9u
LCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCByZXN1bHRzLmlzRW1wdHkoKSA/
IDAgOiAtcmVzdWx0c1swXS5vZmZzZXQoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSByZXN1bHRzW2ldOworICAgICAgICBUeXBlIHR5cGUgPSBleGNl
cHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSk7CisgICAgICAgIHN3aXRjaCAodHlwZS5raW5kKSB7
CisgICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkYzMjoKKyAgICAgICAgICAgIFdhc21GMzJS
ZWludGVycHJldEkzMjo6ZW1pdCh0aGlzLCBkc3QsIGRzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjY0OgorICAgICAgICAgICAgV2FzbUY2NFJl
aW50ZXJwcmV0STY0OjplbWl0KHRoaXMsIGRzdCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJMzI6CisgICAgICAgIGNhc2UgV2FzbTo6VHlw
ZUtpbmQ6Okk2NDoKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RXh0ZXJucmVmOgorICAg
ICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGdW5jcmVmOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDb250cm9sQ2F0
Y2gmIGNhdGNoRGF0YSA9IFdURjo6Z2V0PENvbnRyb2xDYXRjaD4oZGF0YSk7CisgICAgY2F0Y2hE
YXRhLm1fa2luZCA9IENhdGNoS2luZDo6Q2F0Y2g7CisgICAgbV9jb2RlQmxvY2stPmFkZEV4Y2Vw
dGlvbkhhbmRsZXIoeyBIYW5kbGVyVHlwZTo6Q2F0Y2gsIGNhdGNoRGF0YS5tX3RyeVN0YXJ0LT5s
b2NhdGlvbigpLCBjYXRjaERhdGEubV90cnlFbmQtPmxvY2F0aW9uKCksIGNhdGNoTGFiZWwtPmxv
Y2F0aW9uKCksIG1fdHJ5RGVwdGgsIGV4Y2VwdGlvbkluZGV4IH0pOworCisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwoU3RhY2smIGV4cHJlc3Np
b25TdGFjaywgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBmaW5h
bGl6ZVByZXZpb3VzQmxvY2tGb3JDYXRjaChkYXRhLCBleHByZXNzaW9uU3RhY2spOworICAgIFdh
c21KbXA6OmVtaXQodGhpcywgZGF0YS5tX2NvbnRpbnVhdGlvbi0+YmluZCh0aGlzKSk7CisgICAg
cmV0dXJuIGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShkYXRhKTsKK30KKworYXV0byBMTEludEdl
bmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CisgICAgUmVmPExh
YmVsPiBjYXRjaExhYmVsID0gbmV3RW1pdHRlZExhYmVsKCk7CisgICAgbV9zdGFja1NpemUgPSBk
YXRhLnN0YWNrU2l6ZSgpOworICAgIFZpcnR1YWxSZWdpc3RlciBleGNlcHRpb24gPSBwdXNoKCk7
CisgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbFRyeT4oZGF0YSkpIHsKKyAg
ICAgICAgQ29udHJvbFRyeSYgdHJ5RGF0YSA9IFdURjo6Z2V0PENvbnRyb2xUcnk+KGRhdGEpOwor
ICAgICAgICBkYXRhID0gQ29udHJvbFR5cGU6OmNyZWF0ZUNhdGNoKGRhdGEubV9zaWduYXR1cmUs
IGRhdGEuc3RhY2tTaXplKCksIFdURk1vdmUodHJ5RGF0YS5tX3RyeSksIFdURk1vdmUoZGF0YS5t
X2NvbnRpbnVhdGlvbiksIGNhdGNoTGFiZWwsIHRyeURhdGEubV90cnlEZXB0aCwgZXhjZXB0aW9u
KTsKKyAgICB9CisgICAgQ29udHJvbENhdGNoJiBjYXRjaERhdGEgPSBXVEY6OmdldDxDb250cm9s
Q2F0Y2g+KGRhdGEpOworICAgIGNhdGNoRGF0YS5tX2tpbmQgPSBDYXRjaEtpbmQ6OkNhdGNoQWxs
OworCisgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgV2FzbUNhdGNoQWxs
OjplbWl0KHRoaXMsIGV4Y2VwdGlvbik7CisgICAgZWxzZQorICAgICAgICBXYXNtQ2F0Y2hBbGxO
b1Rsczo6ZW1pdCh0aGlzLCBleGNlcHRpb24pOworCisgICAgbV9jb2RlQmxvY2stPmFkZEV4Y2Vw
dGlvbkhhbmRsZXIoeyBIYW5kbGVyVHlwZTo6Q2F0Y2hBbGwsIGNhdGNoRGF0YS5tX3RyeVN0YXJ0
LT5sb2NhdGlvbigpLCBjYXRjaERhdGEubV90cnlFbmQtPmxvY2F0aW9uKCksIGNhdGNoTGFiZWwt
PmxvY2F0aW9uKCksIG1fdHJ5RGVwdGgsIDAgfSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmIHRhcmdldCwgQ29udHJv
bFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRGVsZWdhdGVU
b1VucmVhY2hhYmxlKHRhcmdldCwgZGF0YSk7Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFk
ZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgdGFyZ2V0LCBDb250cm9sVHlwZSYg
ZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOwor
ICAgIFJlZjxMYWJlbD4gZGVsZWdhdGVMYWJlbCA9IG5ld0VtaXR0ZWRMYWJlbCgpOworCisgICAg
QVNTRVJUKENvbnRyb2xUeXBlOjppc1RyeSh0YXJnZXQpIHx8IENvbnRyb2xUeXBlOjppc1RvcExl
dmVsKHRhcmdldCkpOworICAgIHVuc2lnbmVkIHRhcmdldERlcHRoID0gQ29udHJvbFR5cGU6Omlz
VHJ5KHRhcmdldCkgPyBXVEY6OmdldDxDb250cm9sVHJ5Pih0YXJnZXQpLm1fdHJ5RGVwdGggOiAw
OworCisgICAgQ29udHJvbFRyeSYgdHJ5RGF0YSA9IFdURjo6Z2V0PENvbnRyb2xUcnk+KGRhdGEp
OworICAgIG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKHsgSGFuZGxlclR5cGU6OkRl
bGVnYXRlLCB0cnlEYXRhLm1fdHJ5LT5sb2NhdGlvbigpLCBkZWxlZ2F0ZUxhYmVsLT5sb2NhdGlv
bigpLCAwLCBtX3RyeURlcHRoLCB0YXJnZXREZXB0aCB9KTsKKyAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRkVGhyb3co
dW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFN0
YWNrJikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOwor
ICAgIHdhbGtFeHByZXNzaW9uU3RhY2soYXJncywgWyZdKFZpcnR1YWxSZWdpc3RlciYgYXJnLCBW
aXJ0dWFsUmVnaXN0ZXIgc2xvdCkgeworICAgICAgICBpZiAoYXJnID09IHNsb3QpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgc2xvdCwgYXJnKTsKKyAg
ICAgICAgYXJnID0gc2xvdDsKKyAgICB9KTsKKyAgICBXYXNtVGhyb3c6OmVtaXQodGhpcywgZXhj
ZXB0aW9uSW5kZXgsIGFyZ3MuaXNFbXB0eSgpID8gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoMCkg
OiBhcmdzWzBdKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjph
ZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPENvbnRyb2xDYXRjaD4oZGF0YSkpOworICAgIENvbnRyb2xDYXRjaCBjYXRjaERh
dGEgPSBXVEY6OmdldDxDb250cm9sQ2F0Y2g+KGRhdGEpOworICAgIFdhc21SZXRocm93OjplbWl0
KHRoaXMsIGNhdGNoRGF0YS5tX2V4Y2VwdGlvbik7CisgICAgcmV0dXJuIHsgfTsKK30KKwogYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xUeXBlJiBkYXRhLCBTdGFj
ayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgaWYgKCFkYXRhLm1fc2ln
bmF0dXJlLT5yZXR1cm5Db3VudCgpKSB7CkBAIC0xMDQ5LDE5ICsxMjg0LDI1IEBAIGF1dG8gTExJ
bnRHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIFN0YWNrJiBleHByZXNz
aW9uU3RhY2spIC0+IFBhCiB7CiAgICAgLy8gRklYTUU6IFdlIG9ubHkgbmVlZCB0byBtYXRlcmlh
bGl6ZSBjb25zdGFudHMgaGVyZSBpZiB0aGVyZSBleGlzdHMgYSBqdW1wIHRvIHRoaXMgbGFiZWwK
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNjU3Ci0g
ICAgbWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMoZXhwcmVzc2lvblN0YWNrKTsKKyAgICBm
aW5hbGl6ZVByZXZpb3VzQmxvY2tGb3JDYXRjaChlbnRyeS5jb250cm9sRGF0YSwgZXhwcmVzc2lv
blN0YWNrKTsKICAgICByZXR1cm4gYWRkRW5kVG9VbnJlYWNoYWJsZShlbnRyeSwgZXhwcmVzc2lv
blN0YWNrLCBmYWxzZSk7CiB9CiAKIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJl
YWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNr
LCBib29sIHVucmVhY2hhYmxlKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9y
OjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIFN0YWNrJiBleHByZXNz
aW9uU3RhY2ssIGJvb2wgdW5yZWFjaGFibGUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBDb250
cm9sVHlwZSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOwogCi0gICAgUkVMRUFTRV9BU1NFUlQo
dW5yZWFjaGFibGUgfHwgbV9zdGFja1NpemUgPT0gZGF0YS5zdGFja1NpemUoKSArIGRhdGEubV9z
aWduYXR1cmUtPnJldHVybkNvdW50KCkpOworICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSA9IGRhdGEu
c3RhY2tTaXplKCk7CisgICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGVudHJ5LmNvbnRy
b2xEYXRhKSkKKyAgICAgICAgKytzdGFja1NpemU7IC8vIEFjY291bnQgZm9yIHRoZSBjYXVnaHQg
ZXhjZXB0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQodW5yZWFjaGFibGUgfHwgbV9zdGFja1NpemUg
PT0gIHN0YWNrU2l6ZSArIGRhdGEubV9zaWduYXR1cmUtPnJldHVybkNvdW50KCkpOwogCiAgICAg
bV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOwogCisgICAgaWYgKENvbnRyb2xUeXBlOjpp
c1RyeShkYXRhKSB8fCBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xDYXRjaD4oZGF0YSkp
CisgICAgICAgIC0tbV90cnlEZXB0aDsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
YXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKICAgICAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byBkbyBhIGNvbnNpc3RlbmN5IGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBqdXN0IHJl
c2V0IHRoZSBzdGFjayBzaXplCiAgICAgICAgIC8vIGFyZSBwdXNoaW5nIG5ldyB2YWx1ZXMsIHdo
aWxlIHdlIGFscmVhZHkgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgaW4gdGhlIHN0YWNrLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaAppbmRleCA4YTE2
MDM4MjZjMTAwZWJmZjA4YTAzMDZmNjJlZDE5N2JiY2VmZjViLi5jMDEyZmIxZWU3MTRhZjk4MjNk
YTI2YzZjMzRkOGFiNzcyZWI0NTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTExJbnRHZW5lcmF0b3IuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBGdW5jdGlvbkNv
ZGVCbG9jazsKIGNsYXNzIFNpZ25hdHVyZTsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIAot
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJz
ZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1
cmUmLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwor
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJz
ZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1
cmUmLCBNb2R1bGVJbmZvcm1hdGlvbiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTGltaXRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTGlt
aXRzLmgKaW5kZXggY2Y4YjQ0NjAzNjgxMTIzZWNjMjVjZmMzNzI0OThiNWY1YjU4Yzk4Ni4uZjhm
MDUzYjU4NjBlN2RmOTdkYjQ0NjRhYTBlYTE3NDhkOWI4N2YzNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21MaW1pdHMuaApAQCAtNDEsNiArNDEsNyBAQCBjb25zdGV4cHIgc2l6ZV90
IG1heFR5cGVzID0gMTAwMDAwMDsKIGNvbnN0ZXhwciBzaXplX3QgbWF4RnVuY3Rpb25zID0gMTAw
MDAwMDsKIGNvbnN0ZXhwciBzaXplX3QgbWF4SW1wb3J0cyA9IDEwMDAwMDsKIGNvbnN0ZXhwciBz
aXplX3QgbWF4RXhwb3J0cyA9IDEwMDAwMDsKK2NvbnN0ZXhwciBzaXplX3QgbWF4RXhjZXB0aW9u
cyA9IDEwMDAwMDsKIGNvbnN0ZXhwciBzaXplX3QgbWF4R2xvYmFscyA9IDEwMDAwMDA7CiBjb25z
dGV4cHIgc2l6ZV90IG1heERhdGFTZWdtZW50cyA9IDEwMDAwMDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAKaW5kZXggMzU0
OTFjZmU1NDEwNTczYWJkMzViYTM5Yjc1NjA3ZDg2YzI2OGRiNi4uYzZlOGI4YzdmZWI5Y2MyMDhl
YjI3OTZlYTdmMmE0MjA0ZDQwNzY3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwCkBAIC0zNiw2ICszNiw3IEBAIE1vZHVs
ZUluZm9ybWF0aW9uOjpNb2R1bGVJbmZvcm1hdGlvbigpCiAgICAgOiBuYW1lU2VjdGlvbihOYW1l
U2VjdGlvbjo6Y3JlYXRlKCkpCiB7CiB9CisKIE1vZHVsZUluZm9ybWF0aW9uOjp+TW9kdWxlSW5m
b3JtYXRpb24oKSB7IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKaW5kZXggYTJi
MGY4MzZjODljMjBlZWUyNGI5YWIzNGJlMTAxYzI4NTE0MDM1Mi4uMzI4YzZiY2E2YmZhNjYyYjUz
ZTljOGM4ZGE5YWNiMThmNTA0NGFjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKQEAgLTU4LDggKzU4LDIyIEBAIHN0cnVjdCBN
b2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1bGVJbmZv
cm1hdGlvbj4gewogICAgICAgICAgICAgOiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
c1tmdW5jdGlvbkluZGV4IC0gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKV07
CiAgICAgfQogCisgICAgc2l6ZV90IGV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCkgY29uc3QgeyBy
ZXR1cm4gaW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkgKyBpbnRlcm5hbEV4
Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0ltcG9ydGVkRXhj
ZXB0aW9uRnJvbUV4Y2VwdGlvbkluZGV4U3BhY2Uoc2l6ZV90IGV4Y2VwdGlvbkluZGV4KSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbkluZGV4IDwgZXhjZXB0aW9uSW5kZXhT
cGFjZVNpemUoKSk7CisgICAgICAgIHJldHVybiBleGNlcHRpb25JbmRleCA8IGltcG9ydEV4Y2Vw
dGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOworICAgIH0KKyAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleEZyb21FeGNlcHRpb25JbmRleFNwYWNlKHNpemVfdCBleGNlcHRpb25JbmRl
eCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0ltcG9ydGVkRXhjZXB0aW9uRnJvbUV4
Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpCisgICAgICAgICAgICA/IGltcG9ydEV4
Y2VwdGlvblNpZ25hdHVyZUluZGljZXNbZXhjZXB0aW9uSW5kZXhdCisgICAgICAgICAgICA6IGlu
dGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlc1tleGNlcHRpb25JbmRleCAtIGltcG9ydEV4
Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpXTsKKyAgICB9CisKICAgICB1aW50MzJfdCBp
bXBvcnRGdW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzLnNpemUoKTsgfQogICAgIHVpbnQzMl90IGludGVybmFsRnVuY3Rpb25Db3VudCgp
IGNvbnN0IHsgcmV0dXJuIGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsg
fQorICAgIHVpbnQzMl90IGltcG9ydEV4Y2VwdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gaW1w
b3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KIAogICAgIC8vIEN1cnJlbnRs
eSwgb3VyIHdhc20gaW1wbGVtZW50YXRpb24gYWxsb3dzIG9ubHkgb25lIG1lbW9yeSBhbmQgdGFi
bGUuCiAgICAgLy8gSWYgd2UgbmVlZCB0byByZW1vdmUgdGhpcyBsaW1pdGF0aW9uLCB3ZSB3b3Vs
ZCBoYXZlIE1lbW9yeUluZm9ybWF0aW9uIGFuZCBUYWJsZUluZm9ybWF0aW9uIGluIHRoZSBWZWN0
b3JzLgpAQCAtNzYsOSArOTAsMTQgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7CiAgICAgYm9vbCBpc0Rl
Y2xhcmVkRnVuY3Rpb24odWludDMyX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjbGFyZWRG
dW5jdGlvbnMuY29udGFpbnMoaW5kZXgpOyB9CiAgICAgdm9pZCBhZGREZWNsYXJlZEZ1bmN0aW9u
KHVpbnQzMl90IGluZGV4KSB7IG1fZGVjbGFyZWRGdW5jdGlvbnMuc2V0KGluZGV4KTsgfQogCisg
ICAgYm9vbCBpc0RlY2xhcmVkRXhjZXB0aW9uKHVpbnQzMl90IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2RlY2xhcmVkRXhjZXB0aW9ucy5jb250YWlucyhpbmRleCk7IH0KKyAgICB2b2lkIGFkZERl
Y2xhcmVkRXhjZXB0aW9uKHVpbnQzMl90IGluZGV4KSB7IG1fZGVjbGFyZWRFeGNlcHRpb25zLnNl
dChpbmRleCk7IH0KKwogICAgIFZlY3RvcjxJbXBvcnQ+IGltcG9ydHM7CiAgICAgVmVjdG9yPFNp
Z25hdHVyZUluZGV4PiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7CiAgICAgVmVjdG9y
PFNpZ25hdHVyZUluZGV4PiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlczsKKyAgICBW
ZWN0b3I8U2lnbmF0dXJlSW5kZXg+IGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXM7Cisg
ICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGlj
ZXM7CiAgICAgVmVjdG9yPFJlZjxTaWduYXR1cmU+PiB1c2VkU2lnbmF0dXJlczsKIAogICAgIE1l
bW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKQEAgLTk4LDYgKzExNyw4IEBAIHN0cnVjdCBNb2R1bGVJ
bmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1bGVJbmZvcm1hdGlv
bj4gewogICAgIHVpbnQzMl90IG51bWJlck9mRGF0YVNlZ21lbnRzIHsgMCB9OwogCiAgICAgQml0
VmVjdG9yIG1fZGVjbGFyZWRGdW5jdGlvbnM7CisgICAgQml0VmVjdG9yIG1fZGVjbGFyZWRFeGNl
cHRpb25zOworICAgIEJpdFZlY3RvciBtX2Z1bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlvbnM7CiAg
ICAgbXV0YWJsZSBCaXRWZWN0b3IgbV9yZWZlcmVuY2VkRnVuY3Rpb25zOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNw
cAppbmRleCAwZDQzMzhkNjU5MjEzMjJmMDI4MGRlZjY5ZDU4MzYxNmI0OWQ2MWNiLi42MTAzMTYx
YzFjMmYwMjRjMjk0YzBmZTE1NDBmZWJjNzUyYjlkZGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcApAQCAtOTEsMTYg
KzkxLDIwIEBAIHZvaWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0
KQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgSW50ZXJuYWxGdW5jdGlvbiogaW50ZXJu
YWxGdW5jdGlvbiA9IHBhcnNlQW5kQ29tcGlsZVJlc3VsdC0+Z2V0KCk7CisgICAgVmVjdG9yPENv
ZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiBleGNlcHRpb25IYW5kbGVy
TG9jYXRpb25zOworICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKGV4Y2VwdGlv
bkhhbmRsZXJMb2NhdGlvbnMsIGludGVybmFsRnVuY3Rpb24sIGNvbnRleHQsIGxpbmtCdWZmZXIp
OworCiAgICAgb21nRW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8Q29tcGlsYXRp
b24+KAogICAgICAgICBGSU5BTElaRV9XQVNNX0NPREVfRk9SX01PREUoQ29tcGlsYXRpb25Nb2Rl
OjpPTUdGb3JPU1JFbnRyeU1vZGUsIGxpbmtCdWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAi
V2ViQXNzZW1ibHkgT01HRm9yT1NSRW50cnkgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1
bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3Ry
aW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAog
ICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAKLSAg
ICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29t
cGlsZVJlc3VsdC52YWx1ZSgpLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOworICAg
IG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5j
dGlvbi0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAogICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwotICAgIFJl
ZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY2FsbGVlID0gT01HRm9yT1NSRW50cnlDYWxsZWU6OmNy
ZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxl
SW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9sb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxscykp
OworICAgIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY2FsbGVlID0gT01HRm9yT1NSRW50cnlD
YWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2Us
IG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNl
KSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9sb29wSW5kZXgsIFdURk1vdmUodW5saW5r
ZWRDYWxscyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShp
bnRlcm5hbEZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucykpOwogICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5jYWxsZWVNb3ZlTG9jYXRpb24s
IENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoUG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24s
IENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CiAKICAgICAgICAgTG9ja2VyIGxv
Y2tlciB7IG1fY29kZUJsb2NrLT5tX2xvY2sgfTsKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDog
Y2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCA1ZTc5ZjFiYzk4NWM2NWQ1Y2JiYWY4Nzg0YmRiNDg5
MGRjOGU2MjUwLi5mOGVlMDAwODA4OTlkYzZhYTU2NWIyMmFkOTMzYzkzZDM0YWEyYmUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC04OCwxNyArODgs
MjEgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgICAgICByZXR1
cm47CiAgICAgfQogCisgICAgSW50ZXJuYWxGdW5jdGlvbiogaW50ZXJuYWxGdW5jdGlvbiA9IHBh
cnNlQW5kQ29tcGlsZVJlc3VsdC0+Z2V0KCk7CisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVs
PEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zOworICAg
IGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMsIGludGVybmFsRnVuY3Rpb24sIGNvbnRleHQsIGxpbmtCdWZmZXIpOworCiAgICAgb21nRW50
cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8Q29tcGlsYXRpb24+KAogICAgICAgICBG
SU5BTElaRV9XQVNNX0NPREVfRk9SX01PREUoQ29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBsaW5r
QnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9NRyBmdW5jdGlvblsl
aV0gJXMgbmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNj
aWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBt
X21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkp
KS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2lu
dEJ5cHJvZHVjdHMpKTsKIAotICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9
IFdURk1vdmUocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmVudHJ5cG9pbnQuY2FsbGVl
U2F2ZVJlZ2lzdGVycyk7CisgICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0g
V1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMp
OwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2lu
dDsKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+
Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwotICAgICAgICBSZWY8T01HQ2FsbGVlPiBjYWxsZWUgPSBP
TUdDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3Bh
Y2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNw
YWNlKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxv
Y2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOworICAgICAgICBSZWY8
T01HQ2FsbGVlPiBjYWxsZWUgPSBPTUdDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9p
bnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9u
LT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92
ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24t
PmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSk7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9u
LT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7
CiAgICAgICAgIEFTU0VSVCghbV9jb2RlQmxvY2stPm1fb21nQ2FsbGVlc1ttX2Z1bmN0aW9uSW5k
ZXhdKTsKICAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlEYXRhLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlEYXRhLmgKaW5kZXggZDQxZWQ3
OTMyYjMwZTlhYTBhZTg3NjNiYTgyYTYxMmNhZjdlNjQ4Yi4uZDkzZjM0MmNlNjQyZDJjNjYzOWY2
OTA2NTllNmEyNWIzYTBhNzgyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9TUkVudHJ5RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PU1JFbnRyeURhdGEuaApAQCAtMjcsOCArMjcsOCBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZX0IzSklUKQogCisjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZVJlcC5o
IgotI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CkBAIC00Nyw2ICs0Nyw5IEBAIHByaXZhdGU6
CiAgICAgQjM6OlR5cGUgbV90eXBlOwogfTsKIAordXNpbmcgU3RhY2tNYXAgPSBWZWN0b3I8T1NS
RW50cnlWYWx1ZT47Cit1c2luZyBTdGFja01hcHMgPSBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFN0
YWNrTWFwPjsKKwogY2xhc3MgT1NSRW50cnlEYXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShPU1JFbnRyeURhdGEpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTksMTIg
KzYyLDEyIEBAIHB1YmxpYzoKIAogICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2Z1bmN0aW9uSW5kZXg7IH0KICAgICB1aW50MzJfdCBsb29wSW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2xvb3BJbmRleDsgfQotICAgIFZlY3RvcjxPU1JFbnRyeVZhbHVlPiYgdmFs
dWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KKyAgICBTdGFja01hcCYgdmFsdWVzKCkgeyByZXR1
cm4gbV92YWx1ZXM7IH0KIAogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX2Z1bmN0aW9uSW5kZXg7
CiAgICAgdWludDMyX3QgbV9sb29wSW5kZXg7Ci0gICAgVmVjdG9yPE9TUkVudHJ5VmFsdWU+IG1f
dmFsdWVzOworICAgIFN0YWNrTWFwIG1fdmFsdWVzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVy
YXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNw
cAppbmRleCA4NWI0MjRmYjE4NDg5MzA4ZGYyN2Y5YTYxN2U3ZjczMGY2M2UyNTY5Li5kYWJhZWU3
ZWI4MmQ3MWJkZGIxMjk3YzAxYjNlM2ZlZGE1M2Q3NzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTR2xvYmFsT2JqZWN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlF
eGNlcHRpb24uaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuaCIKQEAgLTEwNSwyNCArMTA2LDEwIEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJPTUdSZXBs
YWNlbWVudENvbXBpbGUoVGllclVwQ291bnQmIHRpZXJVcCwgT01HQ2FsbGVlKiByZXBsYWNlCiAg
ICAgfQogfQogCi1TVVBQUkVTU19BU0FOCi1zdGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNl
KiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgY2FsbGVlLCBP
TUdGb3JPU1JFbnRyeUNhbGxlZSYgb3NyRW50cnlDYWxsZWUsIE9TUkVudHJ5RGF0YSYgb3NyRW50
cnlEYXRhKQordm9pZCBsb2FkVmFsdWVzSW50b0J1ZmZlcihQcm9iZTo6Q29udGV4dCYgY29udGV4
dCwgY29uc3QgU3RhY2tNYXAmIHZhbHVlcywgdWludDY0X3QqIGJ1ZmZlcikKIHsKLSAgICBhdXRv
IHJldHVybldpdGhvdXRPU1JFbnRyeSA9IFsmXSB7Ci0gICAgICAgIGNvbnRleHQuZ3ByKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCkgPSAwOwotICAgIH07Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChvc3JF
bnRyeUNhbGxlZS5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkgPT0gb3NyRW50cnlEYXRhLnZh
bHVlcygpLnNpemUoKSk7Ci0KLSAgICB1aW50NjRfdCogYnVmZmVyID0gaW5zdGFuY2UtPmNvbnRl
eHQoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUob3NyRW50cnlDYWxsZWUub3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSgpKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHJldHVybldp
dGhvdXRPU1JFbnRyeSgpOwotCi0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigp
LCBvc3JFbnRyeURhdGEuZnVuY3Rpb25JbmRleCgpLCAiOk9NRyBPU1IgZW50cnk6IGdvdCBlbnRy
eSBjYWxsZWUgIiwgUmF3UG9pbnRlcigmb3NyRW50cnlDYWxsZWUpKTsKLQotICAgIC8vIDEuIFBs
YWNlIHJlcXVpcmVkIHZhbHVlcyBpbiBzY3JhdGNoIGJ1ZmZlci4KLSAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBvc3JFbnRyeURhdGEudmFsdWVzKCkuc2l6ZSgpOyArK2luZGV4
KSB7Ci0gICAgICAgIGNvbnN0IE9TUkVudHJ5VmFsdWUmIHZhbHVlID0gb3NyRW50cnlEYXRhLnZh
bHVlcygpW2luZGV4XTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCB2YWx1
ZXMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IE9TUkVudHJ5VmFsdWUmIHZhbHVl
ID0gdmFsdWVzW2luZGV4XTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCAiT01HIE9TUiBlbnRyeSB2YWx1ZXNbIiwgaW5kZXgsICJdICIsIHZhbHVlLnR5cGUoKSwg
IiAiLCB2YWx1ZSk7CiAgICAgICAgIGlmICh2YWx1ZS5pc0dQUigpKSB7CiAgICAgICAgICAgICBz
d2l0Y2ggKHZhbHVlLnR5cGUoKS5raW5kKCkpIHsKQEAgLTE2NCwyMSArMTUxLDI4IEBAIHN0YXRp
YyB2b2lkIGRvT1NSRW50cnkoSW5zdGFuY2UqIGluc3RhbmNlLCBQcm9iZTo6Q29udGV4dCYgY29u
dGV4dCwgQkJRQ2FsbGVlJiBjCiAgICAgICAgICAgICAgICAgKmJpdHdpc2VfY2FzdDx1aW50NjRf
dCo+KGJ1ZmZlciArIGluZGV4KSA9ICpiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihiaXR3aXNlX2Nh
c3Q8dWludDhfdCo+KGNvbnRleHQuZnAoKSkgKyB2YWx1ZS5vZmZzZXRGcm9tRlAoKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodmFs
dWUuaXNTdGFja0FyZ3VtZW50KCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAodmFsdWUudHlwZSgp
LmtpbmQoKSkgewotICAgICAgICAgICAgY2FzZSBCMzo6RmxvYXQ6Ci0gICAgICAgICAgICAgICAg
KmJpdHdpc2VfY2FzdDxmbG9hdCo+KGJ1ZmZlciArIGluZGV4KSA9ICpiaXR3aXNlX2Nhc3Q8Zmxv
YXQqPihiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGNvbnRleHQuc3AoKSkgKyB2YWx1ZS5vZmZzZXRG
cm9tU1AoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEIzOjpE
b3VibGU6Ci0gICAgICAgICAgICAgICAgKmJpdHdpc2VfY2FzdDxkb3VibGUqPihidWZmZXIgKyBp
bmRleCkgPSAqYml0d2lzZV9jYXN0PGRvdWJsZSo+KGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oY29u
dGV4dC5zcCgpKSArIHZhbHVlLm9mZnNldEZyb21TUCgpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgKmJpdHdpc2VfY2FzdDx1
aW50NjRfdCo+KGJ1ZmZlciArIGluZGV4KSA9ICpiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihiaXR3
aXNlX2Nhc3Q8dWludDhfdCo+KGNvbnRleHQuc3AoKSkgKyB2YWx1ZS5vZmZzZXRGcm9tU1AoKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Cit9CisKK1NV
UFBSRVNTX0FTQU4KK3N0YXRpYyB2b2lkIGRvT1NSRW50cnkoSW5zdGFuY2UqIGluc3RhbmNlLCBQ
cm9iZTo6Q29udGV4dCYgY29udGV4dCwgQkJRQ2FsbGVlJiBjYWxsZWUsIE9NR0Zvck9TUkVudHJ5
Q2FsbGVlJiBvc3JFbnRyeUNhbGxlZSwgT1NSRW50cnlEYXRhJiBvc3JFbnRyeURhdGEpCit7Cisg
ICAgYXV0byByZXR1cm5XaXRob3V0T1NSRW50cnkgPSBbJl0geworICAgICAgICBjb250ZXh0Lmdw
cihHUFJJbmZvOjphcmd1bWVudEdQUjApID0gMDsKKyAgICB9OworCisgICAgUkVMRUFTRV9BU1NF
UlQob3NyRW50cnlDYWxsZWUub3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpID09IG9zckVudHJ5
RGF0YS52YWx1ZXMoKS5zaXplKCkpOworCisgICAgdWludDY0X3QqIGJ1ZmZlciA9IGluc3RhbmNl
LT5jb250ZXh0KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKG9zckVudHJ5Q2FsbGVlLm9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUoKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBy
ZXR1cm5XaXRob3V0T1NSRW50cnkoKTsKKworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSwgb3NyRW50cnlEYXRhLmZ1bmN0aW9uSW5kZXgoKSwgIjpPTUcgT1NSIGVudHJ5OiBn
b3QgZW50cnkgY2FsbGVlICIsIFJhd1BvaW50ZXIoJm9zckVudHJ5Q2FsbGVlKSk7CisKKyAgICAv
LyAxLiBQbGFjZSByZXF1aXJlZCB2YWx1ZXMgaW4gc2NyYXRjaCBidWZmZXIuCisgICAgbG9hZFZh
bHVlc0ludG9CdWZmZXIoY29udGV4dCwgb3NyRW50cnlEYXRhLnZhbHVlcygpLCBidWZmZXIpOwog
CiAgICAgLy8gMi4gUmVzdG9yZSBjYWxsZWUgc2F2ZXMuCiAgICAgUmVnaXN0ZXJTZXQgZG9udFJl
c3RvcmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKQEAgLTY1OCwx
MiArNjUyLDEyIEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Hcm93TWVtb3J5
LCBpbnQzMl90LCAodm9pZCogY2FsbEZyYW1lLCBJbnN0YW5jCiAgICAgcmV0dXJuIGdyb3duLnZh
bHVlKCkucGFnZUNvdW50KCk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtTWVtb3J5RmlsbCwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZHN0
QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFsdWUsIHVpbnQzMl90IGNvdW50KSkKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5RmlsbCwgc2l6ZV90LCAoSW5zdGFu
Y2UqIGluc3RhbmNlLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCB0YXJnZXRWYWx1ZSwg
dWludDMyX3QgY291bnQpKQogewogICAgIHJldHVybiBpbnN0YW5jZS0+bWVtb3J5KCktPmZpbGwo
ZHN0QWRkcmVzcywgc3RhdGljX2Nhc3Q8dWludDhfdD4odGFyZ2V0VmFsdWUpLCBjb3VudCk7CiB9
CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSwgYm9v
bCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3Jj
QWRkcmVzcywgdWludDMyX3QgY291bnQpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbldhc21NZW1vcnlDb3B5LCBzaXplX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90
IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGNvdW50KSkKIHsKICAg
ICByZXR1cm4gaW5zdGFuY2UtPm1lbW9yeSgpLT5jb3B5KGRzdEFkZHJlc3MsIHNyY0FkZHJlc3Ms
IGNvdW50KTsKIH0KQEAgLTcxMSwxMiArNzA1LDEyIEBAIHN0YXRpYyBib29sIHNldFdhc21UYWJs
ZUVsZW1lbnQoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJf
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25TZXRXYXNtVGFibGVFbGVtZW50LCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25l
ZCB0YWJsZUluZGV4LCB1aW50MzJfdCBzaWduZWRJbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jVmFs
dWUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNldFdhc21UYWJsZUVsZW1l
bnQsIHNpemVfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWlu
dDMyX3Qgc2lnbmVkSW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY1ZhbHVlKSkKIHsKICAgICByZXR1
cm4gc2V0V2FzbVRhYmxlRWxlbWVudChpbnN0YW5jZSwgdGFibGVJbmRleCwgc2lnbmVkSW5kZXgs
IGVuY1ZhbHVlKTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21U
YWJsZUluaXQsIGJvb2wsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGVsZW1lbnRJbmRl
eCwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNP
ZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uV2FzbVRhYmxlSW5pdCwgc2l6ZV90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBl
bGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IGRzdE9mZnNldCwgdWlu
dDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKQogewogICAgIEFTU0VSVChlbGVtZW50
SW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS5lbGVtZW50Q291
bnQoKSk7CiAgICAgQVNTRVJUKHRhYmxlSW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxl
SW5mb3JtYXRpb24oKS50YWJsZUNvdW50KCkpOwpAQCAtNzYxLDcgKzc1NSw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVHcm93LCBpbnQzMl90LCAoSW5zdGFu
Y2UqIGluc3RhbmNlLCB1CiAgICAgcmV0dXJuIG9sZFNpemU7CiB9CiAKLUpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVGaWxsLCBib29sLCAoSW5zdGFuY2UqIGluc3Rh
bmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVl
IGZpbGwsIHVpbnQzMl90IGNvdW50KSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtVGFibGVGaWxsLCBzaXplX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIHRh
YmxlSW5kZXgsIHVpbnQzMl90IG9mZnNldCwgRW5jb2RlZEpTVmFsdWUgZmlsbCwgdWludDMyX3Qg
Y291bnQpKQogewogICAgIEFTU0VSVCh0YWJsZUluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgpLm1v
ZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgpKTsKIApAQCAtNzc3LDcgKzc3MSw3IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVGaWxsLCBib29sLCAoSW5z
dGFuY2UqIGluc3RhbmNlLCB1bnNpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVDb3B5LCBib29sLCAoSW5zdGFuY2UqIGlu
c3RhbmNlLCB1bnNpZ25lZCBkc3RUYWJsZUluZGV4LCB1bnNpZ25lZCBzcmNUYWJsZUluZGV4LCBp
bnQzMl90IGRzdE9mZnNldCwgaW50MzJfdCBzcmNPZmZzZXQsIGludDMyX3QgbGVuZ3RoKSkKK0pT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVDb3B5LCBzaXplX3QsIChJ
bnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1Rh
YmxlSW5kZXgsIGludDMyX3QgZHN0T2Zmc2V0LCBpbnQzMl90IHNyY09mZnNldCwgaW50MzJfdCBs
ZW5ndGgpKQogewogICAgIEFTU0VSVChkc3RUYWJsZUluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgp
Lm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgpKTsKICAgICBBU1NFUlQoc3JjVGFibGVJ
bmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQo
KSk7CkBAIC05MDQsNyArODk4LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bk1lbW9yeUF0b21pY05vdGlmeSwgaW50MzJfdCwgKEluc3RhbmNlKiBpbnN0YW4KICAgICByZXR1
cm4gUGFya2luZ0xvdDo6dW5wYXJrQ291bnQocG9pbnRlciwgY291bnQpOwogfQogCi1KU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUluaXQsIGJvb2wsIChJbnN0YW5j
ZSogaW5zdGFuY2UsIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgsIHVpbnQzMl90IGRzdEFkZHJl
c3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGxlbmd0aCkpCitKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUluaXQsIHNpemVfdCwgKEluc3RhbmNlKiBp
bnN0YW5jZSwgdW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCwgdWludDMyX3QgZHN0QWRkcmVzcywg
dWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgbGVuZ3RoKSkKIHsKICAgICBBU1NFUlQoZGF0
YVNlZ21lbnRJbmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLmRh
dGFTZWdtZW50c0NvdW50KCkpOwogICAgIHJldHVybiBpbnN0YW5jZS0+bWVtb3J5SW5pdChkc3RB
ZGRyZXNzLCBzcmNBZGRyZXNzLCBsZW5ndGgsIGRhdGFTZWdtZW50SW5kZXgpOwpAQCAtOTE2LDYg
KzkxMCw2NSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbURhdGFEcm9w
LCB2b2lkLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZwogICAgIGluc3RhbmNlLT5kYXRhRHJv
cChkYXRhU2VnbWVudEluZGV4KTsKIH0KIAorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbldhc21UaHJvdywgdm9pZCosIChJbnN0YW5jZSogaW5zdGFuY2UsIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgRW5jb2RlZEpTVmFsdWUqIGFyZ3VtZW50
cykpCit7CisgICAgaW5zdGFuY2UtPnN0b3JlVG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisKKyAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8SlNX
ZWJBc3NlbWJseUluc3RhbmNlPigpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBjb25zdCBXYXNtOjpUYWcmIHRhZyA9IGluc3RhbmNlLT50YWcoZXhjZXB0aW9uSW5kZXgp
OworCisgICAgRml4ZWRWZWN0b3I8dWludDY0X3Q+IHZhbHVlcyh0YWcucGFyYW1ldGVyQ291bnQo
KSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhZy5wYXJhbWV0ZXJDb3VudCgpOyAr
K2kpCisgICAgICAgIHZhbHVlc1tpXSA9IGFyZ3VtZW50c1tpXTsKKworICAgIEpTV2ViQXNzZW1i
bHlFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUV4Y2VwdGlvblN0cnVjdHVyZSgpLCB0YWcsIFdU
Rk1vdmUodmFsdWVzKSk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBleGNlcHRpb24pOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1lKTsKKyAg
ICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNTRVJUKCEhdm0udGFyZ2V0
TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgYmV0
dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9w
X2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uKQorICAgIC8vIHJlcXVp
cmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUgYmFzZWxp
bmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVk
IHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBj
b252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JD
YXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAvLyB0byB0
aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhp
cyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJhbWUtPmNh
bGxlZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nh
c3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4o
anNJbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JU
aHJvdzsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZXRocm93
LCB2b2lkKiwgKEluc3RhbmNlKiBpbnN0YW5jZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVuY29k
ZWRKU1ZhbHVlIHRocm93blZhbHVlKSkKK3sKKyAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJh
bWUoY2FsbEZyYW1lKTsKKworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9
IGluc3RhbmNlLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgSlNWYWx1ZTo6ZGVjb2RlKHRocm93blZhbHVlKSk7CisKKyAgICBnZW5lcmljVW53
aW5kKHZtLCBjYWxsRnJhbWUpOworICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsK
KyAgICBBU1NFUlQoISF2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CisgICAgLy8gRklYTUU6
IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhpcyBpcyBhIHRvdGFsIGhhY2ss
IGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGxsaW50X2hhbmRsZV91bmNhdWdodF9l
eGNlcHRpb24pCisgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0byBs
b2FkIHRoZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQorICAgIC8vIHRo
aXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIuKSBXZSBj
b3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KKyAgICAvLyBmb3IgZXhjZXB0aW9ucyBm
aXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBiZWZv
cmUganVtcGluZworICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRo
aXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCisgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAorICAgIHZtLmNhbGxlZUZvcldh
c21DYXRjaCA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90
Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0g
Yml0d2lzZV9jYXN0PHVpbnQ2NF90Pihqc0luc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgcmV0dXJu
IHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93OworfQorCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24sIHZvaWQqLCAoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIFdhc206OkV4Y2VwdGlvblR5cGUgdHlwZSwgSW5zdGFuY2UqIHdhc21JbnN0YW5jZSkpCiB7
CiAgICAgd2FzbUluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFtZShjYWxsRnJhbWUpOwpAQCAtOTMy
LDcgKzk4NSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVG9KU0V4
Y2VwdGlvbiwgdm9pZCosIChDYWxsRnJhbWUqIGNhbGxGcmFtCiAgICAgICAgIGlmICh0eXBlID09
IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZsb3cpCiAgICAgICAgICAgICBlcnJvciA9IGNyZWF0
ZVN0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBlcnJvciA9IGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0
LCB2bSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBlKSk7CisgICAgICAg
ICAgICBlcnJvciA9IGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0
LCB2bSwgdHlwZSk7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgZXJyb3IpOwogICAgIH0KIApAQCAtOTQ2LDEwICs5OTksMzQgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uLCB2b2lkKiwgKENhbGxGcmFt
ZSogY2FsbEZyYW0KICAgICAvLyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZv
ckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBiZWZvcmUganVtcGluZwogICAgIC8vIHRv
IHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0
aGlzIHRlcnJpYmxlIGhhY2suCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDQ0MAorICAgIHZtLmNhbGxlZUZvcldhc21DYXRjaCA9IGNhbGxGcmFtZS0+
Y2FsbGVlKCk7CiAgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNf
Y2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90
PihpbnN0YW5jZS0+bW9kdWxlKCkpOwogICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JU
aHJvdzsKIH0KIAorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZXRyaWV2
ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsIFBvaW50ZXJQYWlyLCAoSW5zdGFuY2UqIGlu
c3RhbmNlKSkKK3sKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0
YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOworICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCghIXRocm93U2NvcGUuZXhjZXB0aW9u
KCkpOworCisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSB0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
OworICAgIEpTVmFsdWUgdGhyb3duVmFsdWUgPSBleGNlcHRpb24tPnZhbHVlKCk7CisKKyAgICAv
LyBXZSB3YW50IHRvIGNsZWFyIHRoZSBleGNlcHRpb24gaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUg
Y2F0Y2ggcHJvbG9ndWUKKyAgICAvLyBKSVQgY29kZSBiZWNhdXNlIGNsZWFyaW5nIGl0IGFsc28g
ZW50YWlscyBjbGVhcmluZyBhIGJpdCBpbiBhbiBBdG9taWMKKyAgICAvLyBiaXQgZmllbGQgaW4g
Vk1UcmFwcy4KKyAgICB0aHJvd1Njb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisKKyAgICB2b2lkKiBw
YXlsb2FkID0gbnVsbHB0cjsKKyAgICBpZiAoSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogd2FzbUV4
Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2VwdGlvbio+KHZtLCB0aHJv
d25WYWx1ZSkpCisgICAgICAgIHBheWxvYWQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHdhc21FeGNl
cHRpb24tPnBheWxvYWQoKS5kYXRhKCkpOworICAgIHJldHVybiBQb2ludGVyUGFpciB7IGJpdHdp
c2VfY2FzdDx2b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKHRocm93blZhbHVlKSksIHBheWxvYWQgfTsK
K30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogSUdOT1JFX1dBUk5JTkdTX0VORApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmgKaW5kZXggZWViZTVi
NzY0YmE4OTc4Yzk0NDJlYjUxODI4MTA4NzJjNjcyNGNhNC4uNWVjN2E1OTQ3Y2M3MzhjM2IyYjli
YjI1ZDdlNWE2MDhmMWIyNmVkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T3BlcmF0aW9ucy5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgog
I2luY2x1ZGUgIlNsb3dQYXRoUmV0dXJuVHlwZS5oIgogI2luY2x1ZGUgIldhc21FeGNlcHRpb25U
eXBlLmgiCisjaW5jbHVkZSAiV2FzbU9TUkVudHJ5RGF0YS5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtNDYsNiArNDcsOCBAQCBuYW1lc3BhY2UgV2FzbSB7CiBjbGFzcyBJbnN0YW5jZTsKIGNs
YXNzIFNpZ25hdHVyZTsKIAordm9pZCBsb2FkVmFsdWVzSW50b0J1ZmZlcihQcm9iZTo6Q29udGV4
dCYsIGNvbnN0IFN0YWNrTWFwJiwgdWludDY0X3QqIGJ1ZmZlcik7CisKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFlfQjNKSVQpCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21U
cmlnZ2VyT1NSRW50cnlOb3csIHZvaWQsIChQcm9iZTo6Q29udGV4dCYpKTsKIEpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRyaWdnZXJUaWVyVXBOb3csIHZvaWQsIChJbnN0
YW5jZSosIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpKTsKQEAgLTY2LDI2ICs2OSwzNCBAQCBKU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21Xcml0ZUJhcnJpZXJTbG93UGF0aCwg
dm9pZCwgKEpTQ2VsbCosIFZNKgogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
b3Bjb3VudDMyLCB1aW50MzJfdCwgKGludDMyX3QpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uUG9wY291bnQ2NCwgdWludDY0X3QsIChpbnQ2NF90KSk7CiBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdyb3dNZW1vcnksIGludDMyX3QsICh2b2lkKiwgSW5z
dGFuY2UqLCBpbnQzMl90KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldh
c21NZW1vcnlGaWxsLCBib29sLCAoSW5zdGFuY2UqLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50
MzJfdCB0YXJnZXRWYWx1ZSwgdWludDMyX3QgY291bnQpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUNvcHksIGJvb2wsIChJbnN0YW5jZSosIHVpbnQzMl90
IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGNvdW50KSk7CitKU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlGaWxsLCBzaXplX3QsIChJ
bnN0YW5jZSosIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHRhcmdldFZhbHVlLCB1aW50
MzJfdCBjb3VudCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVt
b3J5Q29weSwgc2l6ZV90LCAoSW5zdGFuY2UqLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJf
dCBzcmNBZGRyZXNzLCB1aW50MzJfdCBjb3VudCkpOwogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkdldFdhc21UYWJsZUVsZW1lbnQsIEVuY29kZWRKU1ZhbHVlLCAoSW5zdGFu
Y2UqLCB1bnNpZ25lZCwgaW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25TZXRXYXNtVGFibGVFbGVtZW50LCBib29sLCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgdWlu
dDMyX3QsIEVuY29kZWRKU1ZhbHVlIGVuY1ZhbHVlKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblNldFdhc21UYWJsZUVsZW1lbnQsIHNpemVfdCwgKEluc3RhbmNlKiwgdW5z
aWduZWQsIHVpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSBlbmNWYWx1ZSkpOwogSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtUmVmRnVuYywgRW5jb2RlZEpTVmFsdWUsIChJbnN0
YW5jZSosIHVpbnQzMl90KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldh
c21UYWJsZUluaXQsIGJvb2wsIChJbnN0YW5jZSosIHVuc2lnbmVkIGVsZW1lbnRJbmRleCwgdW5z
aWduZWQgdGFibGVJbmRleCwgdWludDMyX3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNPZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25X
YXNtVGFibGVJbml0LCBzaXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkIGVsZW1lbnRJbmRleCwg
dW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNPZmZz
ZXQsIHVpbnQzMl90IGxlbmd0aCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtRWxlbURyb3AsIHZvaWQsIChJbnN0YW5jZSosIHVuc2lnbmVkIGVsZW1lbnRJbmRleCkp
OwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVHcm93LCBpbnQz
Ml90LCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgRW5jb2RlZEpTVmFsdWUgZmlsbCwgdWludDMyX3Qg
ZGVsdGEpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmls
bCwgYm9vbCwgKEluc3RhbmNlKiwgdW5zaWduZWQsIHVpbnQzMl90IG9mZnNldCwgRW5jb2RlZEpT
VmFsdWUgZmlsbCwgdWludDMyX3QgY291bnQpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uV2FzbVRhYmxlQ29weSwgYm9vbCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZHN0VGFi
bGVJbmRleCwgdW5zaWduZWQgc3JjVGFibGVJbmRleCwgaW50MzJfdCBkc3RPZmZzZXQsIGludDMy
X3Qgc3JjT2Zmc2V0LCBpbnQzMl90IGxlbmd0aCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtVGFibGVGaWxsLCBzaXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkLCB1
aW50MzJfdCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50KSk7CitK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUNvcHksIHNpemVfdCwg
KEluc3RhbmNlKiwgdW5zaWduZWQgZHN0VGFibGVJbmRleCwgdW5zaWduZWQgc3JjVGFibGVJbmRl
eCwgaW50MzJfdCBkc3RPZmZzZXQsIGludDMyX3Qgc3JjT2Zmc2V0LCBpbnQzMl90IGxlbmd0aCkp
OwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXYXNtVGFibGVTaXplLCBp
bnQzMl90LCAoSW5zdGFuY2UqLCB1bnNpZ25lZCkpOwogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbk1lbW9yeUF0b21pY1dhaXQzMiwgaW50MzJfdCwgKEluc3RhbmNlKiBpbnN0
YW5jZSwgdW5zaWduZWQgYmFzZSwgdW5zaWduZWQgb2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgaW50
NjRfdCB0aW1lb3V0KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk1lbW9y
eUF0b21pY1dhaXQ2NCwgaW50MzJfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgYmFz
ZSwgdW5zaWduZWQgb2Zmc2V0LCB1aW50NjRfdCB2YWx1ZSwgaW50NjRfdCB0aW1lb3V0KSk7CiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk1lbW9yeUF0b21pY05vdGlmeSwgaW50
MzJfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBpbnQzMl90KSk7Ci1KU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlJbml0LCBib29sLCAoSW5zdGFu
Y2UqLCB1bnNpZ25lZCBkYXRhU2VnbWVudEluZGV4LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50
MzJfdCBzcmNBZGRyZXNzLCB1aW50MzJfdCBsZW5ndGgpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUluaXQsIHNpemVfdCwgKEluc3RhbmNlKiwgdW5zaWdu
ZWQgZGF0YVNlZ21lbnRJbmRleCwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRk
cmVzcywgdWludDMyX3QgbGVuZ3RoKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbldhc21EYXRhRHJvcCwgdm9pZCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZGF0YVNlZ21lbnRJ
bmRleCkpOwogCitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UaHJvdywg
dm9pZCosIChJbnN0YW5jZSosIENhbGxGcmFtZSosIHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBF
bmNvZGVkSlNWYWx1ZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bVJldGhyb3csIHZvaWQqLCAoSW5zdGFuY2UqLCBDYWxsRnJhbWUqLCBFbmNvZGVkSlNWYWx1ZSB0
aHJvd25WYWx1ZSkpOworCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21U
b0pTRXhjZXB0aW9uLCB2b2lkKiwgKENhbGxGcmFtZSosIFdhc206OkV4Y2VwdGlvblR5cGUsIElu
c3RhbmNlKikpOworc3RydWN0IFBvaW50ZXJQYWlyIHsKKyAgICB2b2lkKiBmaXJzdDsKKyAgICB2
b2lkKiBzZWNvbmQ7Cit9OworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNt
UmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCBQb2ludGVyUGFpciwgKEluc3Rh
bmNlKikpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKaW5kZXggMGY4Y2NiN2UyYzNi
NjQxMTYzNWNkOWY1YjA0OGIzNTYzMjA1ZmE3NC4uY2ZkYWZmZGQ3YTQyY2M4MWU1YmEzYTYxZTRi
YWU4ZWY1ZWNiZDNiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNlY3Rpb25QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21T
ZWN0aW9uUGFyc2VyLmNwcApAQCAtOTEsNiArOTEsOCBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBh
cnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1f
aW5mby0+Z2xvYmFscy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxs
b2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgZ2xvYmFscyIpOyAvLyBG
SVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCiAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRzLnRyeVJlc2VydmVDYXBhY2l0
eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBv
cnRDb3VudCwgIiBpbXBvcnRzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3
ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8t
PmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0
Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQs
ICIgaW1wb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZXMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9j
YXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgorICAgIGlmIChPcHRpb25zOjp1c2VX
ZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSkKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9p
bmZvLT5pbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShp
bXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRD
b3VudCwgIiBpbXBvcnQgZXhjZXB0aW9uIHNpZ25hdHVyZXMiKTsgLy8gRklYTUUgdGhpcyBvdmVy
LWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgogCiAgICAgZm9yICh1aW50
MzJfdCBpbXBvcnROdW1iZXIgPSAwOyBpbXBvcnROdW1iZXIgPCBpbXBvcnRDb3VudDsgKytpbXBv
cnROdW1iZXIpIHsKICAgICAgICAgdWludDMyX3QgbW9kdWxlTGVuOwpAQCAtMTQyLDYgKzE0NCwy
MSBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAog
ICAgICAgICAgICAgbV9pbmZvLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2Jh
bCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5h
bEtpbmQ6OkV4Y2VwdGlvbjogeworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0
aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5v
dCBlbmFibGVkIik7CisKKyAgICAgICAgICAgIHVpbnQ4X3QgdGFnVHlwZTsKKyAgICAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgodGFnVHlwZSksICJjYW4ndCBnZXQgIiwg
aW1wb3J0TnVtYmVyLCAidGggSW1wb3J0IGV4Y2VwdGlvbidzIHRhZyB0eXBlIik7CisgICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhZ1R5cGUsIGltcG9ydE51bWJlciwgInRoIEltcG9y
dCBleGNlcHRpb24gaGFzIHRhZyB0eXBlICIsIHRhZ1R5cGUsICIgYnV0IHRoZSBvbmx5IHN1cHBv
cnRlZCB0YWcgdHlwZSBpcyAwIik7CisKKyAgICAgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvblNp
Z25hdHVyZUluZGV4OworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIoZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJl
ciwgInRoIEltcG9ydCdzIGV4Y2VwdGlvbiBzaWduYXR1cmUgaW4gbW9kdWxlICciLCBtb2R1bGVT
dHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXggPj0gbV9pbmZvLT51c2VkU2ln
bmF0dXJlcy5zaXplKCksICJpbnZhbGlkIGV4Y2VwdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9y
dE51bWJlciwgInRoIEltcG9ydCwgIiwgZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXgsICIgaXMgb3V0
IG9mIHJhbmdlIG9mICIsIG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiIGluIG1vZHVs
ZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAg
ICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGlj
ZXMuc2l6ZSgpOworICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBT
aWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dXNlZFNpZ25hdHVyZXNbZXhjZXB0aW9u
U2lnbmF0dXJlSW5kZXhdKTsKKyAgICAgICAgICAgIG1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2ln
bmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIG1faW5mby0+aW1wb3J0
cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1vZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRT
dHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7CkBAIC0zNTgsNiArMzc1LDEzIEBAIGF1dG8gU2Vj
dGlvblBhcnNlcjo6cGFyc2VFeHBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgICAgICAg
ICAgZ2xvYmFsLmJpbmRpbmdNb2RlID0gR2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQ
b3J0YWJsZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgRXh0
ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFy
ZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJ
bmRleCA+PSBtX2luZm8tPmV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCksIGV4cG9ydE51bWJlciwg
InRoIEV4cG9ydCBoYXMgaW52YWxpZCBleGNlcHRpb24gbnVtYmVyICIsIGtpbmRJbmRleCwgIiBp
dCBleGNlZWRzIHRoZSBleGNlcHRpb24gaW5kZXggc3BhY2UgIiwgbV9pbmZvLT5leGNlcHRpb25J
bmRleFNwYWNlU2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAg
ICAgICBtX2luZm8tPmFkZERlY2xhcmVkRXhjZXB0aW9uKGtpbmRJbmRleCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgbV9pbmZvLT5leHBvcnRz
LnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXgg
fSk7CkBAIC04MTcsNiArODQxLDI5IEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VEYXRhQ291
bnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAorYXV0byBTZWN0aW9u
UGFyc2VyOjpwYXJzZUV4Y2VwdGlvbigpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20g
ZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgIHVpbnQzMl90IGV4Y2VwdGlvbkNv
dW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4Y2VwdGlvbkNv
dW50KSwgImNhbid0IGdldCBFeGNlcHRpb24gc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihleGNlcHRpb25Db3VudCA+IG1heEV4Y2VwdGlvbnMsICJFeHBvcnQgc2Vj
dGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZXhjZXB0aW9uQ291bnQsICIgbWF4aW11bSAiLCBt
YXhFeGNlcHRpb25zKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFs
RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9uQ291
bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgZXhjZXB0aW9uQ291bnQs
ICIgZXhjZXB0aW9ucyIpOworCisgICAgZm9yICh1aW50MzJfdCBleGNlcHRpb25OdW1iZXIgPSAw
OyBleGNlcHRpb25OdW1iZXIgPCBleGNlcHRpb25Db3VudDsgKytleGNlcHRpb25OdW1iZXIpIHsK
KyAgICAgICAgdWludDhfdCB0YWdUeXBlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVVJbnQ4KHRhZ1R5cGUpLCAiY2FuJ3QgZ2V0ICIsIGV4Y2VwdGlvbk51bWJlciwgInRoIEV4
Y2VwdGlvbiB0YWcgdHlwZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhZ1R5cGUs
IGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2VwdGlvbiBoYXMgdGFnIHR5cGUgIiwgdGFnVHlwZSwg
IiBidXQgdGhlIG9ubHkgc3VwcG9ydGVkIHRhZyB0eXBlIGlzIDAiKTsKKworICAgICAgICB1aW50
MzJfdCB0eXBlTnVtYmVyOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMih0eXBlTnVtYmVyKSwgImNhbid0IGdldCAiLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNl
cHRpb24ncyB0eXBlIG51bWJlciIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGVO
dW1iZXIgPj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksIGV4Y2VwdGlvbk51bWJlciwg
InRoIEV4Y2VwdGlvbiB0eXBlIG51bWJlciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOworICAg
ICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9u
OjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1t0eXBlTnVtYmVyXSk7CisgICAgICAgIG1faW5m
by0+aW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWdu
YXR1cmVJbmRleCk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KIGF1dG8gU2VjdGlvblBh
cnNlcjo6cGFyc2VDdXN0b20oKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ3VzdG9tU2VjdGlv
biBzZWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNl
Y3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaAppbmRl
eCBmMzY5ZTdiODZjYWZhOTNhZDNmODNhZDYwY2EwODdjOGY1ODgwZWNhLi5iZWYyMDcwMWY0MGZl
NDBiNGEyOGEwYWRjZmM0N2Y2YmYwZDViZmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU2VjdGlvbnMuaApAQCAtNDUsNyArNDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewogICAgIG1hY3JvKEVsZW1lbnQsICAgIDksICJFbGVtZW50cyBzZWN0aW9uIikg
XAogICAgIG1hY3JvKENvZGUsICAgICAgMTAsICJGdW5jdGlvbiBib2RpZXMgKGNvZGUpIikgXAog
ICAgIG1hY3JvKERhdGEsICAgICAgMTEsICJEYXRhIHNlZ21lbnRzIikgXAotICAgIG1hY3JvKERh
dGFDb3VudCwgMTIsICJEYXRhIGNvdW50IikKKyAgICBtYWNybyhEYXRhQ291bnQsIDEyLCAiRGF0
YSBjb3VudCIpIFwKKyAgICBtYWNybyhFeGNlcHRpb24sIDEzLCAiRXhjZXB0aW9uIGRlY2xhcmF0
aW9ucyIpIFwKIAogZW51bSBjbGFzcyBTZWN0aW9uIDogdWludDhfdCB7CiAgICAgLy8gSXQncyBp
bXBvcnRhbnQgdGhhdCBCZWdpbiBpcyBsZXNzIHRoYW4gZXZlcnkgb3RoZXIgc2VjdGlvbiBudW1i
ZXIgYW5kIHRoYXQgQ3VzdG9tIGlzIGdyZWF0ZXIuCkBAIC05MCw2ICs5MSwxMCBAQCBpbmxpbmUg
Ym9vbCB2YWxpZGF0ZU9yZGVyKFNlY3Rpb24gcHJldmlvdXNLbm93biwgU2VjdGlvbiBuZXh0KQog
ICAgIEFTU0VSVChpc0tub3duU2VjdGlvbihwcmV2aW91c0tub3duKSB8fCBwcmV2aW91c0tub3du
ID09IFNlY3Rpb246OkJlZ2luKTsKICAgICBpZiAocHJldmlvdXNLbm93biA9PSBTZWN0aW9uOjpE
YXRhQ291bnQgJiYgbmV4dCA9PSBTZWN0aW9uOjpDb2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAocHJldmlvdXNLbm93biA9PSBTZWN0aW9uOjpFeGNlcHRpb24pCisgICAgICAgIHJl
dHVybiBuZXh0ID49IFNlY3Rpb246Okdsb2JhbDsKKyAgICBpZiAobmV4dCA9PSBTZWN0aW9uOjpF
eGNlcHRpb24pCisgICAgICAgIHJldHVybiBwcmV2aW91c0tub3duIDw9IFNlY3Rpb246Ok1lbW9y
eTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4ocHJldmlvdXNLbm93bikgPCBzdGF0
aWNfY2FzdDx1aW50OF90PihuZXh0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU2lnbmF0dXJlLmNwcAppbmRleCA3MWFhYjNkZjc1NzIyZDQwOGM1MThjMTNmNTM4NWMz
YWY5YTQ4MDA2Li5mOWE1NjFiODUwZmM1YzE5MzlkMGVmNTllOGE5ZmQyYjYwNTk3OGY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcApAQCAtOTYsNyAr
OTYsNyBAQCBSZWZQdHI8U2lnbmF0dXJlPiBTaWduYXR1cmU6OnRyeUNyZWF0ZShTaWduYXR1cmVB
cmdDb3VudCByZXR1cm5Db3VudCwgU2lnbmF0dXJlQQogCiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
U2lnbmF0dXJlSW5mb3JtYXRpb24oKQogewotI2RlZmluZSBNQUtFX1RIVU5LX1NJR05BVFVSRSh0
eXBlLCBlbmMsIHN0ciwgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBN
QUtFX1RIVU5LX1NJR05BVFVSRSh0eXBlLCBlbmMsIHN0ciwgdmFsLCBfKSAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoVHlwZUtpbmQ6OnR5
cGUgIT0gVHlwZUtpbmQ6OlZvaWQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gc2lnID0gU2lnbmF0dXJlOjp0cnlDcmVhdGUoMSwg
MCk7ICAgICAgICAgICAgXApAQCAtMTY1LDYgKzE2NSwxMCBAQCBzdHJ1Y3QgUGFyYW1ldGVyVHlw
ZXMgewogCiBSZWZQdHI8U2lnbmF0dXJlPiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6c2lnbmF0dXJl
Rm9yKGNvbnN0IFZlY3RvcjxUeXBlLCAxPiYgcmVzdWx0cywgY29uc3QgVmVjdG9yPFR5cGU+JiBh
cmdzKQogeworICAgIGlmIGNvbnN0ZXhwciAoQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgQVNT
RVJUKCFyZXN1bHRzLmNvbnRhaW5zKFdhc206OlR5cGVzOjpWb2lkKSk7CisgICAgICAgIEFTU0VS
VCghYXJncy5jb250YWlucyhXYXNtOjpUeXBlczo6Vm9pZCkpOworICAgIH0KICAgICBTaWduYXR1
cmVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmdsZXRvbigpOwogICAgIExvY2tlciBsb2NrZXIgeyBp
bmZvLm1fbG9jayB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0
aHMuY3BwCmluZGV4IGQ5ZmFmNWQ1OWQ5OWY1ZTkwNGMzYTdiMjQwMDdkMDkxZmQxZDljMTcuLmFk
NTEzNWU3YWQ2NTc4YzM5NzYxYmQ3ZDNiNTY4YTBmZDJiZjYwNjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5j
bHVkZSAiSklURXhjZXB0aW9ucy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24u
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMTEludERh
dGEuaCIKICNpbmNsdWRlICJXYXNtQkJRUGxhbi5oIgpAQCAtNTg2LDYgKzU4OCwxMTEgQEAgV0FT
TV9TTE9XX1BBVEhfREVDTChtZW1vcnlfYXRvbWljX25vdGlmeSkKICAgICBXQVNNX1JFVFVSTihy
ZXN1bHQpOwogfQogCitXQVNNX1NMT1dfUEFUSF9ERUNMKHRocm93KQoreworICAgIGluc3RhbmNl
LT5zdG9yZVRvcENhbGxGcmFtZShjYWxsRnJhbWUpOworCisgICAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBqc0luc3RhbmNlID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4o
KTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFs
T2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byBpbnN0cnVjdGlv
biA9IHBjLT5hczxXYXNtVGhyb3csIFdhc21PcGNvZGVUcmFpdHM+KCk7CisgICAgY29uc3QgV2Fz
bTo6VGFnJiB0YWcgPSBpbnN0YW5jZS0+dGFnKGluc3RydWN0aW9uLm1fZXhjZXB0aW9uSW5kZXgp
OworCisgICAgRml4ZWRWZWN0b3I8dWludDY0X3Q+IHZhbHVlcyh0YWcucGFyYW1ldGVyQ291bnQo
KSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhZy5wYXJhbWV0ZXJDb3VudCgpOyAr
K2kpCisgICAgICAgIHZhbHVlc1tpXSA9IFJFQUQoKGluc3RydWN0aW9uLm1fZmlyc3RWYWx1ZSAt
IGkpKS5lbmNvZGVkSlNWYWx1ZSgpOworCisgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0gSlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qt
PndlYkFzc2VtYmx5RXhjZXB0aW9uU3RydWN0dXJlKCksIHRhZywgV1RGTW92ZSh2YWx1ZXMpKTsK
KyAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGV4Y2VwdGlvbik7
CisKKyAgICBnZW5lcmljVW53aW5kKHZtLCBjYWxsRnJhbWUpOworICAgIEFTU0VSVCghIXZtLmNh
bGxGcmFtZUZvckNhdGNoKTsKKyAgICBBU1NFUlQoISF2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJv
dyk7CisgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhp
cyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGxsaW50
X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb24pCisgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhl
IGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3Qg
cmVxdWlyZQorICAgIC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50
IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KKyAgICAv
LyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBm
cmFtZSByZWdpc3RlciBiZWZvcmUganVtcGluZworICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFu
ZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2su
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAor
ICAgIHZtLmNhbGxlZUZvcldhc21DYXRjaCA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgYml0
d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSldID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihqc0luc3RhbmNlLT5tb2R1
bGUoKSk7CisgICAgV0FTTV9SRVRVUk5fVFdPKHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93LCBu
dWxscHRyKTsKK30KKworV0FTTV9TTE9XX1BBVEhfREVDTChyZXRocm93KQoreworICAgIGluc3Rh
bmNlLT5zdG9yZVRvcENhbGxGcmFtZShjYWxsRnJhbWUpOworCisgICAgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBqc0luc3RhbmNlID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZT4oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xv
YmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byBpbnN0cnVj
dGlvbiA9IHBjLT5hczxXYXNtUmV0aHJvdywgV2FzbU9wY29kZVRyYWl0cz4oKTsKKyAgICBKU1Zh
bHVlIGV4Y2VwdGlvbiA9IFJFQUQoaW5zdHJ1Y3Rpb24ubV9leGNlcHRpb24pLmpzVmFsdWUoKTsK
KyAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGV4Y2VwdGlvbik7
CisKKyAgICBnZW5lcmljVW53aW5kKHZtLCBjYWxsRnJhbWUpOworICAgIEFTU0VSVCghIXZtLmNh
bGxGcmFtZUZvckNhdGNoKTsKKyAgICBBU1NFUlQoISF2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJv
dyk7CisgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhp
cyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGxsaW50
X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb24pCisgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhl
IGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3Qg
cmVxdWlyZQorICAgIC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50
IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KKyAgICAv
LyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBm
cmFtZSByZWdpc3RlciBiZWZvcmUganVtcGluZworICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFu
ZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2su
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAor
ICAgIHZtLmNhbGxlZUZvcldhc21DYXRjaCA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgYml0
d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSldID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihqc0luc3RhbmNlLT5tb2R1
bGUoKSk7CisgICAgV0FTTV9SRVRVUk5fVFdPKHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93LCBu
dWxscHRyKTsKK30KKworV0FTTV9TTE9XX1BBVEhfREVDTChyZXRyaWV2ZV9hbmRfY2xlYXJfZXhj
ZXB0aW9uKQoreworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGluc3RhbmNlLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5z
dGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzSW5zdGFuY2Ut
Pmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFJFTEVBU0Vf
QVNTRVJUKCEhdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisKKyAgICBFeGNlcHRpb24qIGV4Y2Vw
dGlvbiA9IHRocm93U2NvcGUuZXhjZXB0aW9uKCk7CisgICAgSlNWYWx1ZSB0aHJvd25WYWx1ZSA9
IGV4Y2VwdGlvbi0+dmFsdWUoKTsKKyAgICB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cjsKKworICAg
IGNvbnN0IGF1dG8mIGhhbmRsZUNhdGNoQWxsID0gWyZdKGNvbnN0IGF1dG8mIGluc3RydWN0aW9u
KSB7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihpbnN0cnVjdGlvbi5tX2V4Y2VwdGlv
bikgPSB0aHJvd25WYWx1ZTsKKyAgICB9OworCisgICAgY29uc3QgYXV0byYgaGFuZGxlQ2F0Y2gg
PSBbJl0oY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24pIHsKKyAgICAgICAgSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbiogd2FzbUV4Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbio+KHZtLCB0aHJvd25WYWx1ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhd2FzbUV4
Y2VwdGlvbik7CisgICAgICAgIHBheWxvYWQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHdhc21FeGNl
cHRpb24tPnBheWxvYWQoKS5kYXRhKCkpOworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
aW5zdHJ1Y3Rpb24ubV9leGNlcHRpb24pID0gdGhyb3duVmFsdWU7CisgICAgfTsKKworICAgIGlm
IChwYy0+aXM8V2FzbUNhdGNoLCBXYXNtT3Bjb2RlVHJhaXRzPigpKQorICAgICAgICBoYW5kbGVD
YXRjaChwYy0+YXM8V2FzbUNhdGNoLCBXYXNtT3Bjb2RlVHJhaXRzPigpKTsKKyAgICBlbHNlIGlm
IChwYy0+aXM8V2FzbUNhdGNoQWxsLCBXYXNtT3Bjb2RlVHJhaXRzPigpKQorICAgICAgICBoYW5k
bGVDYXRjaEFsbChwYy0+YXM8V2FzbUNhdGNoQWxsLCBXYXNtT3Bjb2RlVHJhaXRzPigpKTsKKyAg
ICBlbHNlIGlmIChwYy0+aXM8V2FzbUNhdGNoTm9UbHMsIFdhc21PcGNvZGVUcmFpdHM+KCkpCisg
ICAgICAgIGhhbmRsZUNhdGNoKHBjLT5hczxXYXNtQ2F0Y2hOb1RscywgV2FzbU9wY29kZVRyYWl0
cz4oKSk7CisgICAgZWxzZSBpZiAocGMtPmlzPFdhc21DYXRjaEFsbE5vVGxzLCBXYXNtT3Bjb2Rl
VHJhaXRzPigpKQorICAgICAgICBoYW5kbGVDYXRjaEFsbChwYy0+YXM8V2FzbUNhdGNoQWxsTm9U
bHMsIFdhc21PcGNvZGVUcmFpdHM+KCkpOworICAgIGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKworICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIGV4Y2VwdGlv
biBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBjYXRjaCBwcm9sb2d1ZQorICAgIC8vIEpJVCBjb2Rl
IGJlY2F1c2UgY2xlYXJpbmcgaXQgYWxzbyBlbnRhaWxzIGNsZWFyaW5nIGEgYml0IGluIGFuIEF0
b21pYworICAgIC8vIGJpdCBmaWVsZCBpbiBWTVRyYXBzLgorICAgIHRocm93U2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKKyAgICBXQVNNX1JFVFVSTl9UV08ocGMsIHBheWxvYWQpOworfQorCiBleHRl
cm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24o
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYywgV2FzbTo6SW5zdGFu
Y2UqIGluc3RhbmNlLCBXYXNtOjpFeGNlcHRpb25UeXBlIGV4Y2VwdGlvblR5cGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHBjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0
aHMuaAppbmRleCA3NzYyMTE4MzM4YTdiNzA2OTY5YjI1YjUyY2UxNmUyYzNkYzdiZDRlLi5iNjRj
ZTdjZGU0MWFhYTA2ODk3ZThmZmZlZDgyYThkMDY0MzJkZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5oCkBAIC04Myw2ICs4Myw5IEBAIFdBU01fU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNldF9nbG9iYWxfcmVmX3BvcnRhYmxlX2JpbmRpbmcpOwogV0FTTV9T
TE9XX1BBVEhfSElEREVOX0RFQ0wobWVtb3J5X2F0b21pY193YWl0MzIpOwogV0FTTV9TTE9XX1BB
VEhfSElEREVOX0RFQ0wobWVtb3J5X2F0b21pY193YWl0NjQpOwogV0FTTV9TTE9XX1BBVEhfSElE
REVOX0RFQ0wobWVtb3J5X2F0b21pY19ub3RpZnkpOworV0FTTV9TTE9XX1BBVEhfSElEREVOX0RF
Q0wodGhyb3cpOworV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wocmV0aHJvdyk7CitXQVNNX1NM
T1dfUEFUSF9ISURERU5fREVDTChyZXRyaWV2ZV9hbmRfY2xlYXJfZXhjZXB0aW9uKTsKIAogZXh0
ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX3dhc21fdGhyb3dfZXhjZXB0aW9u
KENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiwgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNl
LCBXYXNtOjpFeGNlcHRpb25UeXBlKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsK
IGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF93YXNtX3BvcGNvdW50KGNv
bnN0IEluc3RydWN0aW9uKiBwYywgdWludDMyX3QpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lO
VEVSTkFMOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVh
bWluZ1BhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5n
UGFyc2VyLmNwcAppbmRleCBmYTU1MmVmZmYxNzQxZWNiNWE0YjZjMmY4OWZjYTA5NzU5ZWUzMTVk
Li4xMmNkYWE5NjVlYTk4YmExOGFjMjcxNmRjYzc2ZTgyNzA4NTAyMTAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcApAQCAtMTE3
LDYgKzExNyw3IEBAIGF1dG8gU3RyZWFtaW5nUGFyc2VyOjpwYXJzZUNvZGVTZWN0aW9uU2l6ZSh1
aW50MzJfdCBmdW5jdGlvbkNvdW50KSAtPiBTdGF0ZQogICAgIG1fZnVuY3Rpb25Db3VudCA9IGZ1
bmN0aW9uQ291bnQ7CiAgICAgbV9mdW5jdGlvbkluZGV4ID0gMDsKICAgICBtX2NvZGVPZmZzZXQg
PSBtX29mZnNldDsKKyAgICBtX2luZm8tPm1fZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9ucy5l
bnN1cmVTaXplKGZ1bmN0aW9uQ291bnQpOwogCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5j
dGlvbkNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkNvZGUg
c2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZnVuY3Rpb25Db3VudCk7CiAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihmdW5jdGlvbkNvdW50ICE9IG1faW5mby0+ZnVuY3Rpb25zLnNpemUoKSwg
IkNvZGUgc2VjdGlvbiBjb3VudCAiLCBmdW5jdGlvbkNvdW50LCAiIGV4Y2VlZHMgdGhlIGRlY2xh
cmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGVjNjczNjIzMmYw
NzIxZmM2MjU3ZDQ3OTQxNzE3YjUyNjJiYmVlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2FzbVRhZy5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1l
c3BhY2UgSlNDIHsKK25hbWVzcGFjZSBXYXNtIHsKKwordWludDMyX3QgVGFnOjpzX2lkID0gMDsK
KworfX0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21UYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDM5NTNkNWQ2ZWVmYzkzMzgxZmM5MGU2NGY1Yjcy
ZWMzMGQxNDc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRhZy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBXYXNtIHsKKworY2xhc3MgVGFnIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRhZz4g
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFRhZyk7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxUYWc+IGNyZWF0ZShjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBUYWcoc2lnbmF0dXJlKSk7IH0K
KworICAgIFNpZ25hdHVyZUFyZ0NvdW50IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9zaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgfQorICAgIFR5cGUgcGFyYW1ldGVyKFNpZ25h
dHVyZUFyZ0NvdW50IGkpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudChpKTsg
fQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRhZyYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IG1faWQgPT0gb3RoZXIubV9pZDsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUYWcmIG90
aGVyKSBjb25zdCB7IHJldHVybiBtX2lkICE9IG90aGVyLm1faWQ7IH0KKworICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUuZ2V0KCk7IH0K
KworcHJpdmF0ZToKKyAgICBUYWcoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCisgICAgICAg
IDogbV9pZCgrK3NfaWQpCisgICAgICAgICwgbV9zaWduYXR1cmUoUmVmIHsgc2lnbmF0dXJlIH0p
CisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB1aW50MzJfdCBzX2lkOworICAgIHVpbnQzMl90
IG1faWQ7CisgICAgUmVmPGNvbnN0IFNpZ25hdHVyZT4gbV9zaWduYXR1cmU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAppbmRleCA3OWQxYmNmZjg5
ZmIwNGUyMmVkNTRmMmY2NDA4YmUwOWYyOTNkMGMzLi5mZWMyYTEzNzc5YmYyN2Y2NDhmYWEzOGE1
ZWY4NjQ4ZTA5NDg1YzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtz
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI4LDggKzI4LDExIEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNp
bmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJDQ2Fs
bEhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1
ZGUgIldhc21JbnN0YW5jZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5o
CmluZGV4IGMyMzVjZmU2Mjk1ZTY2OWFlNWE4MGVlOGYyNTJlYTZjYTI0MzFiODMuLmY0NWRlYjJh
NTk2Y2FhMjU3ZTMzMWVkMjFlZjA5ZTA2YjA1ZWM1MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGh1bmtzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5
CmluZGV4IDFlMzgwZGVmMWNkOGNiNjc2MDc1ZWQzMjU1NzliMGY1MWQxYmNlNTUuLjk2NzdlYjgz
ZDk2YTdhZDY0ZmI1MTQ3YTQyYjRhODU4ZDk1OTQwNDcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0
b3JJbmxpbmVzSGVhZGVyLnB5CkBAIC0xNDQsNyArMTQ0LDcgQEAgY2xhc3MgQ29kZUdlbmVyYXRv
cjoKICAgICAgICAgICAgIHNlbGYuYWR2YW5jZSgpCiAgICAgICAgICAgICBzZWxmLmNvbnN1bWUo
IikiKQogICAgICAgICBlbGlmIGFyZ3VtZW50UmVnZXgubWF0Y2goc2VsZi50b2tlbigpKToKLSAg
ICAgICAgICAgIHJlc3VsdCA9ICJhcmciICsgc2VsZi50b2tlbigpWzE6XQorICAgICAgICAgICAg
cmVzdWx0ID0gImdldChhcmciICsgc2VsZi50b2tlbigpWzE6XSArICIpIgogICAgICAgICAgICAg
c2VsZi5hZHZhbmNlKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG9wID0gc2VsZi50b2tl
bigpCkBAIC0xNTYsMTMgKzE1NiwxNiBAQCBjbGFzcyBDb2RlR2VuZXJhdG9yOgogCiAgICAgICAg
IHJldHVybiByZXN1bHQKIAorICAgIGRlZiBtYWtlUmVzdWx0KHNlbGYsIHJlc3VsdFZhbHVlKToK
KyAgICAgICAgcmV0dXJuIHJlc3VsdFZhbHVlICsgIjtcbiIgKyAicmVzdWx0ID0gcHVzaChyZXN1
bHRWYWx1ZS0+dHlwZSgpKTtcbiIgKyAibV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihtX3Byb2MsIFNldCwgb3JpZ2luKCksIHJlc3VsdCwgcmVzdWx0VmFsdWUpOyIKKwog
ICAgIGRlZiBnZW5lcmF0ZShzZWxmLCB3YXNtT3ApOgogICAgICAgICBpZiBsZW4oc2VsZi50b2tl
bnMpID09IDE6Ci0gICAgICAgICAgICBwYXJhbXMgPSBbImFyZyIgKyBzdHIocGFyYW0pIGZvciBw
YXJhbSBpbiByYW5nZShsZW4od2FzbU9wWyJwYXJhbWV0ZXIiXSkpXQotICAgICAgICAgICAgcmV0
dXJuICIgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBCMzo6IiArIHNlbGYudG9rZW4oKSArICIsIG9yaWdpbigpLCAiICsgIiwgIi5qb2luKHBhcmFt
cykgKyAiKSIKKyAgICAgICAgICAgIHBhcmFtcyA9IFsiZ2V0KGFyZyIgKyBzdHIocGFyYW0pICsg
IikiIGZvciBwYXJhbSBpbiByYW5nZShsZW4od2FzbU9wWyJwYXJhbWV0ZXIiXSkpXQorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYubWFrZVJlc3VsdCgiICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OiIgKyBzZWxmLnRva2Vu
KCkgKyAiLCBvcmlnaW4oKSwgIiArICIsICIuam9pbihwYXJhbXMpICsgIikiKQogICAgICAgICBy
ZXN1bHQgPSBzZWxmLmdlbmVyYXRlT3Bjb2RlKCkKLSAgICAgICAgc2VsZi5jb2RlLmFwcGVuZCgi
cmVzdWx0ID0gIiArIHJlc3VsdCkKLSAgICAgICAgcmV0dXJuICIgICAgIiArICIgICAgXG4iLmpv
aW4oc2VsZi5jb2RlKQorICAgICAgICBzZWxmLmNvZGUuYXBwZW5kKCJWYWx1ZSogcmVzdWx0VmFs
dWUgPSAiICsgcmVzdWx0KQorICAgICAgICByZXR1cm4gc2VsZi5tYWtlUmVzdWx0KCIgICAgIiAr
ICIgICAgXG4iLmpvaW4oc2VsZi5jb2RlKSkKIAogCiBkZWYgdGVtcChpbmRleCk6CkBAIC0xOTEs
NyArMTk0LDcgQEAgZGVmIGdlbmVyYXRlU2ltcGxlQ29kZShvcCk6CiAgICAgcmV0dXJuICIiIgog
dGVtcGxhdGU8PiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6IiIiICsgd2FzbS50
b0NwcChvcFsibmFtZSJdKSArICI+KCIgKyAiLCAiLmpvaW4oYXJncykgKyAiIiIpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKLSIiIiArIGdlbmVyYXRlQjNDb2RlKG9wY29kZSwgYjNvcCkgKyAiIiI7Cisi
IiIgKyBnZW5lcmF0ZUIzQ29kZShvcGNvZGUsIGIzb3ApICsgIiIiCiAgICAgcmV0dXJuIHsgfTsK
IH0KICIiIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVX
YXNtT3BzSGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNt
T3BzSGVhZGVyLnB5CmluZGV4IGMyMGJmYTU0MmUwODY0YmNkMGFmODI4ZTc5ZDY5MjA4MDRhNTcy
MzcuLjdjY2ZjYWZjNmFmYjMyMTA4Y2I0YTUwOWM1YjkyMDcyYTgxYzc2MjQgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKQEAg
LTUzLDcgKzUzLDcgQEAgZGVmIGNwcE1hY3JvKHdhc21PcGNvZGUsIHZhbHVlLCBiMywgaW5jLCAq
ZXh0cmFBcmdzKToKIGRlZiB0eXBlTWFjcm9pemVyKCk6CiAgICAgaW5jID0gMAogICAgIGZvciB0
eSBpbiB3YXNtLnR5cGVzOgotICAgICAgICB5aWVsZCBjcHBNYWNybyh0eSwgd2FzbS50eXBlc1t0
eV1bInZhbHVlIl0sIHdhc20udHlwZXNbdHldWyJiM3R5cGUiXSwgaW5jKQorICAgICAgICB5aWVs
ZCBjcHBNYWNybyh0eSwgd2FzbS50eXBlc1t0eV1bInZhbHVlIl0sIHdhc20udHlwZXNbdHldWyJi
M3R5cGUiXSwgaW5jLCB0eSkKICAgICAgICAgaW5jICs9IDEKIAogdHlwZV9kZWZpbml0aW9ucyA9
IFsiI2RlZmluZSBGT1JfRUFDSF9XQVNNX1RZUEUobWFjcm8pIl0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKaW5kZXggNzE4YmNiOTc1NTZlZjQ1
YTgyZDNkYjllNGJhMDc3NTgwYmJjOWU1Ni4uNzhmMTc2YWI2M2EyNjVlMTU0OWQ1ZDcyY2IzNjJj
YTdlODU0N2NkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseS5jcHAKQEAgLTc4LDYgKzc4LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1i
bHk6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5IiwgJkJhc2U6OnNfaW5mbywgJndlYkFzc2UKIC8q
IFNvdXJjZSBmb3IgSlNXZWJBc3NlbWJseS5sdXQuaAogQGJlZ2luIHdlYkFzc2VtYmx5VGFibGUK
ICAgQ29tcGlsZUVycm9yICAgIGNyZWF0ZVdlYkFzc2VtYmx5Q29tcGlsZUVycm9yICBEb250RW51
bXxQcm9wZXJ0eUNhbGxiYWNrCisgIEV4Y2VwdGlvbiAgICAgICBjcmVhdGVXZWJBc3NlbWJseUV4
Y2VwdGlvbiAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBHbG9iYWwgICAgICAgICAg
Y3JlYXRlV2ViQXNzZW1ibHlHbG9iYWwgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sK
ICAgSW5zdGFuY2UgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5SW5zdGFuY2UgICAgICBEb250RW51
bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIExpbmtFcnJvciAgICAgICBjcmVhdGVXZWJBc3NlbWJseUxp
bmtFcnJvciAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawpAQCAtODUsNiArODYsNyBAQCBj
b25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkiLCAm
QmFzZTo6c19pbmZvLCAmd2ViQXNzZQogICBNb2R1bGUgICAgICAgICAgY3JlYXRlV2ViQXNzZW1i
bHlNb2R1bGUgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKICAgUnVudGltZUVycm9y
ICAgIGNyZWF0ZVdlYkFzc2VtYmx5UnVudGltZUVycm9yICBEb250RW51bXxQcm9wZXJ0eUNhbGxi
YWNrCiAgIFRhYmxlICAgICAgICAgICBjcmVhdGVXZWJBc3NlbWJseVRhYmxlICAgICAgICAgRG9u
dEVudW18UHJvcGVydHlDYWxsYmFjaworICBUYWcgICAgICAgICAgICAgY3JlYXRlV2ViQXNzZW1i
bHlUYWcgICAgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKICAgY29tcGlsZSAgICAg
ICAgIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMgICAgICAgICBGdW5jdGlvbiAxCiAgIGluc3RhbnRp
YXRlICAgICB3ZWJBc3NlbWJseUluc3RhbnRpYXRlRnVuYyAgICAgRnVuY3Rpb24gMQogICB2YWxp
ZGF0ZSAgICAgICAgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMgICAgICAgIEZ1bmN0aW9uIDEKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNl
cHRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTAzZDQzMDMzY2VhZDVmMWI0M2I2Y2Q2NTFmMzZhNzg1
MmZmMDE4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpzX2luZm8gPSB7
ICJXZWJBc3NlbWJseS5FeGNlcHRpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlFeGNlcHRpb24pIH07CisKK0pTV2Vi
QXNzZW1ibHlFeGNlcHRpb246OkpTV2ViQXNzZW1ibHlFeGNlcHRpb24oVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcsIEZpeGVkVmVjdG9yPHVpbnQ2NF90
PiYmIHBheWxvYWQpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3RhZyhSZWYg
eyB0YWcgfSkKKyAgICAsIG1fcGF5bG9hZChXVEZNb3ZlKHBheWxvYWQpKQoreworfQorCit2b2lk
IEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisKKyAgICBhdXRv
KiBleGNlcHRpb24gPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2VwdGlvbio+KGNlbGwpOworICAg
IGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gZXhjZXB0aW9uLT50YWcoKS5zaWdu
YXR1cmUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChpc1JlZlR5cGUoc2lnbmF0dXJlLmFyZ3VtZW50
KGkpKSkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+KGV4Y2VwdGlvbi0+cGF5bG9hZCgpW2ldKSk7CisgICAgfQorfQorCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUV4Y2VwdGlvbik7CisKK3ZvaWQgSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nh
c3Q8SlNXZWJBc3NlbWJseUV4Y2VwdGlvbio+KGNlbGwpLT5KU1dlYkFzc2VtYmx5RXhjZXB0aW9u
Ojp+SlNXZWJBc3NlbWJseUV4Y2VwdGlvbigpOworfQorCitKU1ZhbHVlIEpTV2ViQXNzZW1ibHlF
eGNlcHRpb246OmdldEFyZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBp
KSBjb25zdAoreworICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gdGFnKCku
c2lnbmF0dXJlKCk7CisgICAgQVNTRVJUKGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsK
KyAgICByZXR1cm4gdG9KU1ZhbHVlKGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50KGkp
LCBwYXlsb2FkKClbaV0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wM2I5YTMyZjk1YjE5NGRl
ZThjMTU0NmIyZGM1ZDk5NGQ3MmM2M2NiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oCkBAIC0wLDAgKzEsNzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21UYWcuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24gOiBwdWJs
aWMgSlNEZXN0cnVjdGlibGVPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0Rl
c3RydWN0aWJsZU9iamVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVj
dGlvbiA9IHRydWU7CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CisgICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1
cm4gdm0ud2ViQXNzZW1ibHlFeGNlcHRpb25TcGFjZTxtb2RlPigpOworICAgIH0KKworICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEVycm9ySW5zdGFuY2VUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24q
IGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBXYXNtOjpUYWcmIHRh
ZywgRml4ZWRWZWN0b3I8dWludDY0X3Q+JiYgcGF5bG9hZCkKKyAgICB7CisgICAgICAgIEpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5RXhjZXB0aW9u
KHZtLCBzdHJ1Y3R1cmUsIHRhZywgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgICAgIGV4Y2VwdGlv
bi0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgIH0K
KworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRh
ZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnLmdldCgpOyB9CisgICAgY29uc3QgRml4ZWRWZWN0b3I8
dWludDY0X3Q+JiBwYXlsb2FkKCkgY29uc3QgeyByZXR1cm4gbV9wYXlsb2FkOyB9CisgICAgSlNW
YWx1ZSBnZXRBcmcoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCkgY29uc3Q7CisKK3Byb3RlY3Rl
ZDoKKyAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgV2Fz
bTo6VGFnJiwgRml4ZWRWZWN0b3I8dWludDY0X3Q+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOworCisgICAgUmVmPGNvbnN0IFdhc206OlRhZz4gbV90YWc7CisgICAgRml4ZWRW
ZWN0b3I8dWludDY0X3Q+IG1fcGF5bG9hZDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggZDhmMjY1MGNhYTU4Njcy
MzU0YmQ1ZjM5ZjdkZWFiNjQxMGQwMDU0Yy4uYjYyMGVkY2EyOGE5ZTI0MjlmMTIwY2UxOTY3YTNi
MGMxMTIxMzU3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SGVscGVycy5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSlNBcnJh
eUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNTb3Vy
Y2VDb2RlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2luY2x1
ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5j
bHVkZSAiV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCIKQEAgLTE0NCw2ICsxNDUsNzUgQEAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGRlZmF1bHRWYWx1ZUZvclJlZmVyZW5jZVR5cGUoY29uc3Qg
V2FzbTo6VHlwZSB0eXBlKQogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAorQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIHRvSlNWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBX
YXNtOjpUeXBlIHR5cGUsIHVpbnQ2NF90IGJpdHMpCit7CisgICAgc3dpdGNoICh0eXBlLmtpbmQp
IHsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpWb2lkOgorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJMzI6CisgICAgICAgIHJldHVybiBq
c051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihiaXRzKSk7CisgICAgY2FzZSBXYXNtOjpUeXBl
S2luZDo6RjMyOgorICAgICAgICByZXR1cm4ganNOdW1iZXIoYml0d2lzZV9jYXN0PGZsb2F0Pihz
dGF0aWNfY2FzdDxpbnQzMl90PihiaXRzKSkpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkY2
NDoKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGJpdHdpc2VfY2FzdDxkb3VibGU+KGJpdHMpKTsK
KyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJNjQ6CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6
Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0X3Q+KGJpdHMpKTsKKyAg
ICBjYXNlIFdhc206OlR5cGVLaW5kOjpFeHRlcm5yZWY6CisgICAgY2FzZSBXYXNtOjpUeXBlS2lu
ZDo6RnVuY3JlZjoKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU1ZhbHVlPihiaXRzKTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZSgpOworfQorCitBTFdBWVNfSU5MSU5F
IHVpbnQ2NF90IGZyb21KU1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IFdhc206OlR5cGUgdHlwZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIHN3aXRjaCAodHlwZS5raW5kKSB7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6VHlwZUlk
eDoKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGdW5jcmVmOiB7CisgICAgICAgIGJvb2wgaXNO
dWxsYWJsZSA9IHR5cGUuaXNOdWxsYWJsZSgpOworICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
KiB3YXNtRnVuY3Rpb24gPSBudWxscHRyOworICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbiA9IG51bGxwdHI7CisgICAgICAgIGlmICghaXNXZWJB
c3NlbWJseUhvc3RGdW5jdGlvbih2bSwgdmFsdWUsIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJG
dW5jdGlvbikgJiYgKCFpc051bGxhYmxlIHx8ICF2YWx1ZS5pc051bGwoKSkpCisgICAgICAgICAg
ICByZXR1cm4gdGhyb3dWTUV4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVKU1dl
YkFzc2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sICJGdW5jcmVmIG11c3QgYmUg
YW4gZXhwb3J0ZWQgd2FzbSBmdW5jdGlvbiIpKTsKKyAgICAgICAgaWYgKHR5cGUua2luZCA9PSBX
YXNtOjpUeXBlS2luZDo6VHlwZUlkeCAmJiAod2FzbUZ1bmN0aW9uIHx8IHdhc21XcmFwcGVyRnVu
Y3Rpb24pKSB7CisgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBwYXJhbUluZGV4ID0g
dHlwZS5pbmRleDsKKyAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGFyZ0luZGV4Owor
ICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikKKyAgICAgICAgICAgICAgICBhcmdJbmRleCA9
IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBhcmdJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4
KCk7CisgICAgICAgICAgICBpZiAocGFyYW1JbmRleCAhPSBhcmdJbmRleCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhyb3dWTUV4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVK
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sICJBcmd1bWVudCBmdW5j
dGlvbiBkaWQgbm90IG1hdGNoIHRoZSByZWZlcmVuY2UgdHlwZSIpKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RXh0ZXJucmVmOgor
ICAgICAgICBpZiAoIXR5cGUuaXNOdWxsYWJsZSgpICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRl
SlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAiTm9uLW51bGwgRXh0
ZXJucmVmIGNhbm5vdCBiZSBudWxsIikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdhc206
OlR5cGVLaW5kOjpJMzI6CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdmFsdWUu
dG9JbnQzMihnbG9iYWxPYmplY3QpKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJNjQ6Cisg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2
YWx1ZS50b0JpZ0ludDY0KGdsb2JhbE9iamVjdCkpKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5k
OjpGMzI6CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYml0d2lzZV9jYXN0PHVp
bnQzMl90Pih2YWx1ZS50b0Zsb2F0KGdsb2JhbE9iamVjdCkpKTsKKyAgICBjYXNlIFdhc206OlR5
cGVLaW5kOjpGNjQ6CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZS50b051bWJlcihnbG9iYWxPYmplY3QpKSk7CisgICAgY2FzZSBX
YXNtOjpUeXBlS2luZDo6Vm9pZDoKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGdW5jOgorICAg
IGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlJlZk51bGw6CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6
UmVmOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5jcHAKaW5kZXggNjZkYTEwYTc4MDAzZGIyN2ExOTE4MmU5YjFiMGMzYzgwNWQ0YTNiNi4u
MWQ3ZjQ2Y2Q2ODMwNDVlYWI2NDZiODcyZjU3OGVkNzUwMjI1Y2JmYSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3Bw
CkBAIC0yMTYsNiArMjE2LDcgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OnRyeUNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBjYXNl
IFdhc206OkV4dGVybmFsS2luZDo6RnVuY3Rpb246CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWxLaW5kOjpHbG9iYWw6CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZToK
KyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbjoKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OgogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0yNDIsNiArMjQzLDcgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRyeUNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RnVuY3Rpb246CiAgICAgICAgIGNh
c2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWxLaW5kOjpUYWJsZToKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlv
bjoKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5k
OjpNZW1vcnk6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggNTZmNThmOTU0MzQ5Mzk1OWI4MjZkMWY5NzNhOGYy
YjBkNWNmNzY5Zi4uOTc0ZDZkN2JhNWU3YTU4NzhhODhiNmMxMTZkNTJhZGU1MzhiYWY3MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgKQEAgLTQ4LDYgKzQ4LDggQEAgY2xhc3MgQ29kZUJsb2NrOwogfQogCiBjbGFzcyBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Cisg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKwogcHVibGljOgogICAgIHVz
aW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5jcHAKaW5kZXggMTAyMmE1
MjI3NDMyOTY3YWVhYTUyYjhiODk3NDY3OTNiZmFmZjRkYi4uYjEwMjk3ZmVkYWI3NWZhMjM3YzU3
NjZlNzExOTMyNDI0MjY0ODY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNiArMzcsMTMg
QEAgSlNPYmplY3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLAogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkp
OwogICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgZ2xv
YmFsT2JqZWN0LT53ZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlLCBK
U1ZhbHVlKCksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgVHlwZU5vdGhpbmcsIEVycm9yVHlwZTo6
RXJyb3IsIHRydWUpOwogfQorCitKU09iamVjdCogY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIFdhc206OkV4Y2VwdGlv
blR5cGUgdHlwZSkKK3sKKyAgICBFcnJvckluc3RhbmNlKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6
OmNyZWF0ZShnbG9iYWxPYmplY3QsIHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5UnVudGlt
ZUVycm9yU3RydWN0dXJlKCksIFdhc206OmVycm9yTWVzc2FnZUZvckV4Y2VwdGlvblR5cGUodHlw
ZSksIEpTVmFsdWUoKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBUeXBlTm90aGluZywgRXJyb3JU
eXBlOjpFcnJvciwgdHJ1ZSk7CisgICAgZXJyb3ItPnNldENhdGNoYWJsZUZyb21XYXNtKGZhbHNl
KTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvci5oCmluZGV4IGJlNDEzMDkwZDMyNzRjNjE4ZmFmZDQ5YjExNjdiMGQyMjI3Y2U1
ZmMuLmM4NmI2M2Y5MTJkM2NmNDFkMWM2YzQ5MGMwODk2MzljYjdiMGIzZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Iu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjgsMTAgKzI4LDEyIEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5j
bHVkZSAiRXJyb3JJbnN0YW5jZS5oIgorI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCiBKU09iamVjdCogY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvcihKU0dsb2JhbE9iamVjdCosIFZNJiwgY29uc3QgU3RyaW5nJik7CitKU09iamVjdCogY3Jl
YXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihKU0dsb2JhbE9iamVjdCosIFZNJiwgV2FzbTo6
RXhjZXB0aW9uVHlwZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWcuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4
ZDU2MGYwNzEwNmU0ZDBhY2JhNTVhMzNhNzQyYzcwOTc3MzdiMWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmNwcApAQCAt
MCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21UYWcuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5VGFnOjpzX2luZm8gPSB7
ICJXZWJBc3NlbWJseS5UYWciLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlUYWcpIH07CisKK0pTV2ViQXNzZW1ibHlUYWcq
IEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBXYXNtOjpUYWcmIHRhZykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvKiBqc1RhZyA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlUYWc+KHZtLmhlYXApKSBKU1dlYkFzc2Vt
Ymx5VGFnKHZtLCBzdHJ1Y3R1cmUsIHRhZyk7CisgICAganNUYWctPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICByZXR1cm4ganNUYWc7Cit9CisKK1N0cnVjdHVyZSogSlNXZWJBc3NlbWJseVRhZzo6
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworfQorCitKU1dlYkFzc2VtYmx5VGFnOjpKU1dlYkFzc2VtYmx5VGFnKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFdhc206OlRhZyYgdGFnKQorICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV90YWcoUmVmIHsgdGFnIH0pCit7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjdhMmJmNDNkYjc3ZTU3ZmQ1MWI4MGMxOTAzZjIyY2U5OWMwYTdlZTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmgKQEAg
LTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAi
V2FzbVRhZy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseVRhZyBm
aW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNl
ID0gSlNOb25GaW5hbE9iamVjdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5VGFnU3BhY2U8bW9k
ZT4oKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWcqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiwgY29uc3QgV2FzbTo6VGFnJik7CisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAg
IGNvbnN0IFdhc206OlRhZyYgdGFnKCkgY29uc3QgeyByZXR1cm4gbV90YWc7IH0KKyAgICBjb25z
dCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIHRhZygpLnNpZ25h
dHVyZSgpOyB9CisKK3ByaXZhdGU6CisgICAgSlNXZWJBc3NlbWJseVRhZyhWTSYsIFN0cnVjdHVy
ZSosIGNvbnN0IFdhc206OlRhZyYpOworCisgICAgY29uc3QgUmVmPGNvbnN0IFdhc206OlRhZz4g
bV90YWc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21U
b0pTLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAppbmRl
eCBmNjdmMjQyYTc4OTEzYWU1YzAyYWE1NjhlOTlhYzY1Y2RiYjgwZmRlLi5kNjVmYzYxMjFiNjA5
MGJkN2YyZDQwZDAzYmI0NWVlN2FhNjQwMjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2FzbVRvSlMuY3BwCkBAIC05OCw3ICs5OCw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0m
IHZtCiAgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKICAgICAgICAgdW5zaWdu
ZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNl
dCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOwotICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsK
KyAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKICAgICAgICAg
ICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOwogICAgICAgICAg
ICAgc3dpdGNoIChhcmdUeXBlLmtpbmQpIHsKQEAgLTE2Miw3ICsxNjIsNyBAQCBFeHBlY3RlZDxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdh
c21Ub0pTKFZNJiB2bQogICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9IDA7CiAgICAg
ICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKICAgICAgICAgdW5zaWduZWQgY2FsbGVl
RnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxs
RnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSk7CisgICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmly
c3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAKICAgICAg
ICAgYXV0byBtYXJzaGFsbEZQUiA9IFsmXSAoRlBSUmVnIGZwclJlZykgewogICAgICAgICAgICAg
aml0LnB1cmlmeU5hTihmcHJSZWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41ZjRhNWY0NDg2YjRmMTdjOGZmZmM4NzA3NDExNTAyYjg2N2U2OWYxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlF
eGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oIgorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0
aW9uUHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2Vt
Ymx5RXhjZXB0aW9uQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNf
aW5mbywgJmNvbnN0cnVjdG9yVGFibGVXZWJBc3NlbWJseUV4Y2VwdGlvbiwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yKSB9OworCitz
dGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNhbGxKU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uKTsKKworLyogU291cmNlIGZvciBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0
cnVjdG9yLmx1dC5oCisgQGJlZ2luIGNvbnN0cnVjdG9yVGFibGVXZWJBc3NlbWJseUV4Y2VwdGlv
bgorIEBlbmQKKyAqLworCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0SlNXZWJB
c3NlbWJseUV4Y2VwdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKSkKK3sKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNWYWx1ZSB0YWdW
YWx1ZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSB0YWdQYXJhbWV0ZXJz
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKTsKKworICAgIGF1dG8gdGFnID0ganNEeW5hbWljQ2Fz
dDxKU1dlYkFzc2VtYmx5VGFnKj4odm0sIHRhZ1ZhbHVlKTsKKyAgICBpZiAoIXRhZykKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2Vt
Ymx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciBleHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBi
ZSBhIFdlYkFzc2VtYmx5LlRhZyIpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgdmFsdWVz
OworICAgIGZvckVhY2hJbkl0ZXJhYmxlKGdsb2JhbE9iamVjdCwgdGFnUGFyYW1ldGVycywgWyZd
IChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBuZXh0VmFsdWUpIHsKKyAgICAgICAgdmFs
dWVzLmFwcGVuZChuZXh0VmFsdWUpOworICAgIH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICBpZiAodmFsdWVzLnNpemUoKSAhPSB0YWctPnNpZ25hdHVyZSgp
LmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciBleHBlY3Rz
IHRoZSBudW1iZXIgb2YgcGFyZW1ldGVycyBpbiBXZWJBc3NlbWJseS5UYWcgdG8gbWF0Y2ggdGhl
IHRhZ3MgcGFyYW1ldGVyIGNvdW50LiIpOworCisgICAgLy8gQW55IEdDJ2QgdmFsdWVzIGluIGhl
cmUgd2lsbCBiZSBtYXJrZWQgYnkgdGhlIE1hcmtlZEFydWdlbWVudEJ1ZmZlciB1bnRpbCBzdG9y
ZWQgaW4gdGhlIEV4Y2VwdGlvbi4KKyAgICBGaXhlZFZlY3Rvcjx1aW50NjRfdD4gcGF5bG9hZCh2
YWx1ZXMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIHBheWxvYWRbaV0gPSBmcm9tSlNWYWx1ZShnbG9iYWxPYmplY3Qs
IHRhZy0+c2lnbmF0dXJlKCkuYXJndW1lbnQoaSksIHZhbHVlcy5hdChpKSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgfQorCisgICAgSlNPYmplY3QqIG5l
d1RhcmdldCA9IGFzT2JqZWN0KGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCkpOworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gSlNDX0dFVF9ERVJJVkVEX1NUUlVDVFVSRSh2bSwgd2ViQXNzZW1ibHlF
eGNlcHRpb25TdHJ1Y3R1cmUsIG5ld1RhcmdldCwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRl
KHZtLCBzdHJ1Y3R1cmUsIHRhZy0+dGFnKCksIFdURk1vdmUocGF5bG9hZCkpKSk7Cit9CisKK0pT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopKQoreworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVD
YWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJs
eS5FeGNlcHRpb24iKSk7Cit9CisKK1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IqIFdl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkK
K3sKKyAgICBhdXRvKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3I+KHZtLmhlYXApKSBXZWJBc3NlbWJseUV4Y2Vw
dGlvbkNvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOworICAgIGNvbnN0cnVjdG9yLT5maW5pc2hD
cmVhdGlvbih2bSwgdGhpc1Byb3RvdHlwZSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworfQor
CitTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKEludGVybmFsRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSogcHJvdG90
eXBlKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCAxLCAiRXhjZXB0aW9uIl9zLCBQ
cm9wZXJ0eUFkZGl0aW9uTW9kZTo6V2l0aG91dFN0cnVjdHVyZVRyYW5zaXRpb24pOworICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUs
IHByb3RvdHlwZSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUpOworfQorCitXZWJB
c3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUsIGNhbGxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hN2Jj
OTIzNTQ1NTMwZGU1ODU5NzBlOGRjZTdjNjAwNjkwNGFiMTMzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1
Y3Rvci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKwor
I2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU7CisK
K2NsYXNzIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IgZmluYWwgOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJh
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKKworICAgIHN0YXRpYyBX
ZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBERUNM
QVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
cihWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3Nl
bWJseUV4Y2VwdGlvblByb3RvdHlwZSopOworfTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNF
X1NIQVJBQkxFKFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IsIEludGVybmFsRnVuY3Rp
b24pOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RXhjZXB0aW9uUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYzM2YzQ3OTg1YTMy
NGMxYjM4OTkzNWVmMWExYjkxMWFhZjVmOGU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwCkBA
IC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9u
UHJvdG90eXBlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJBdXhp
bGlhcnlCYXJyaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTih3ZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvRnVuY0dldEFyZyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
Tih3ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvRnVuY0lzKTsKK30KKworI2luY2x1ZGUgIldlYkFz
c2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29u
c3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpzX2luZm8gPSB7ICJX
ZWJBc3NlbWJseS5FeGNlcHRpb24iLCAmQmFzZTo6c19pbmZvLCAmcHJvdG90eXBlVGFibGVXZWJB
c3NlbWJseUV4Y2VwdGlvbiwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJs
eUV4Y2VwdGlvblByb3RvdHlwZSkgfTsKKworLyogU291cmNlIGZvciBXZWJBc3NlbWJseUV4Y2Vw
dGlvblByb3RvdHlwZS5sdXQuaAorIEBiZWdpbiBwcm90b3R5cGVUYWJsZVdlYkFzc2VtYmx5RXhj
ZXB0aW9uCisgZ2V0QXJnICAgd2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNHZXRBcmcgICBG
dW5jdGlvbiAyCisgaXMgICB3ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvRnVuY0lzICAgRnVuY3Rp
b24gMQorIEBlbmQKKyAqLworCitXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSogV2ViQXNz
ZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgYXV0byogb2JqZWN0ID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU+KHZtLmhlYXApKSBX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBvYmplY3Qt
PmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitTdHJ1Y3R1cmUq
IFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgV2Vi
QXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKK30KKworV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OldlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNl
KHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIEpTV2ViQXNzZW1i
bHlFeGNlcHRpb24qIGdldEV4Y2VwdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKFVOTElL
RUxZKCF0aGlzVmFsdWUuaXNDZWxsKCkpKSB7CisgICAgICAgIHRocm93Vk1FcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBhdXRvKiB0YWcgPSBq
c0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPih2bSwgdGhpc1ZhbHVlLmFzQ2Vs
bCgpKTsKKyAgICBpZiAoTElLRUxZKHRhZykpCisgICAgICAgIHJldHVybiB0YWc7CisgICAgdGhy
b3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LkV4Y2VwdGlvbiBv
cGVyYXRpb24gY2FsbGVkIG9uIG5vbi1FeGNlcHRpb24gb2JqZWN0Il9zKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworQUxXQVlTX0lOTElORSBzdGF0aWMgSlNXZWJBc3NlbWJseVRhZyogZ2V0
VGFnKFZNJiB2bSwgSlNWYWx1ZSB0YWdWYWx1ZSkKK3sKKyAgICBpZiAoIXRhZ1ZhbHVlLmlzQ2Vs
bCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxK
U1dlYkFzc2VtYmx5VGFnKj4odm0sIHRhZ1ZhbHVlLmFzQ2VsbCgpKTsKK30KKworSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG9GdW5jR2V0QXJnLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGNvbnN0IGF1dG8mIGZvcm1hdE1lc3NhZ2UgPSBb
Jl0oY29uc3QgYXV0byYgbWVzc2FnZSkgeworICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiV2Vi
QXNzZW1ibHkuRXhjZXB0aW9uLmdldEFyZygpOiAiLCBtZXNzYWdlKTsKKyAgICB9OworICAgIGNv
bnN0IGF1dG8mIHR5cGVFcnJvciA9IFsmXShjb25zdCBhdXRvJiBtZXNzYWdlKSB7CisgICAgICAg
IHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZm9ybWF0TWVzc2FnZSht
ZXNzYWdlKSk7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH07CisKKyAg
ICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBqc0V4Y2VwdGlvbiA9IGdldEV4Y2VwdGlvbihnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFn
KiB0YWcgPSBnZXRUYWcodm0sIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgIGlmICghdGFn
KQorICAgICAgICByZXR1cm4gdHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV2Vi
QXNzZW1ibHkuVGFnIik7CisKKyAgICBpZiAoanNFeGNlcHRpb24tPnRhZygpICE9IHRhZy0+dGFn
KCkpCisgICAgICAgIHJldHVybiB0eXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IGRvZXMgbm90IG1h
dGNoIHRoZSBleGNlcHRpb24gdGFnIik7CisKKyAgICB1aW50MzJfdCBpbmRleCA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoMSkudG9VSW50MzIoZ2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoaW5kZXggPj0g
dGFnLT50YWcoKS5wYXJhbWV0ZXJDb3VudCgpKSB7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihn
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGZvcm1hdE1lc3NhZ2UoIkluZGV4IG91dCBvZiByYW5n
ZSIpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgfQorCisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0V4Y2VwdGlvbi0+
Z2V0QXJnKGdsb2JhbE9iamVjdCwgaW5kZXgpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTih3ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvRnVuY0lzLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIGpzRXhjZXB0aW9uID0gZ2V0RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIEpTV2Vi
QXNzZW1ibHlUYWcqIHRhZyA9IGdldFRhZyh2bSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7Cisg
ICAgaWYgKCF0YWcpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uLmlzKCk6IEZpcnN0IGFyZ3VtZW50IG11c3Qg
YmUgYSBXZWJBc3NlbWJseS5UYWciKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7
CisgICAgfQorCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oanNFeGNlcHRpb24tPnRhZygpID09IHRhZy0+dGFnKCkpKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRp
b25Qcm90b3R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RXhjZXB0aW9uUHJvdG90eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGMyMTA2ZDhiOTkzMWZkYTRhMGU5NGI2
MWZiNWM3ZTFlYTM0OGRiYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmgKQEAgLTAsMCArMSw1OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNEZXN0cnVjdGli
bGVPYmplY3QuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNOb25G
aW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLCBCYXNlKTsKKyAg
ICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKworICAgIHN0YXRpYyBX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2
YXRlOgorICAgIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7
CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IDNhYjNjM2Q1
Y2I1YzkwMDliZWMyYjZkODBkNDQ0YzgwYzE0M2VhZGUuLjE5NzE4ZGNlNjk5NjkwMDFlZTEyZDY0
NGY4NjI0NWUwMTczNjViMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC03OCw1MSArNzgsOSBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LAogICAgIFdhc206Okluc3RhbmNlKiB3YXNtSW5zdGFuY2UgPSAmaW5z
dGFuY2UtPmluc3RhbmNlKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4ID0gMDsgYXJn
SW5kZXggPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2FyZ0luZGV4KSB7Ci0gICAgICAg
IEpTVmFsdWUgYXJnID0gY2FsbEZyYW1lLT5hcmd1bWVudChhcmdJbmRleCk7Ci0gICAgICAgIHN3
aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ0luZGV4KS5raW5kKSB7Ci0gICAgICAgIGNhc2Ug
V2FzbTo6VHlwZUtpbmQ6OkkzMjoKLSAgICAgICAgICAgIGFyZyA9IEpTVmFsdWU6OmRlY29kZShh
cmcudG9JbnQzMihnbG9iYWxPYmplY3QpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFdhc206OlR5cGVLaW5kOjpUeXBlSWR4OgotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5k
OjpGdW5jcmVmOiB7Ci0gICAgICAgICAgICBib29sIGlzTnVsbGFibGUgPSBzaWduYXR1cmUuYXJn
dW1lbnQoYXJnSW5kZXgpLmlzTnVsbGFibGUoKTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIHdhc21GdW5jdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICBpZiAoIWlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGFyZywgd2FzbUZ1bmN0aW9uLCB3
YXNtV3JhcHBlckZ1bmN0aW9uKSAmJiAoIWlzTnVsbGFibGUgfHwgIWFyZy5pc051bGwoKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9i
YWxPYmplY3QsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9i
amVjdCwgdm0sICJGdW5jcmVmIG11c3QgYmUgYW4gZXhwb3J0ZWQgd2FzbSBmdW5jdGlvbiIpKSk7
Ci0gICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ0luZGV4KS5raW5kID09IFdh
c206OlR5cGVLaW5kOjpUeXBlSWR4ICYmICh3YXNtRnVuY3Rpb24gfHwgd2FzbVdyYXBwZXJGdW5j
dGlvbikpIHsKLSAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBwYXJhbUluZGV4
ID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ0luZGV4KS5pbmRleDsKLSAgICAgICAgICAgICAgICBX
YXNtOjpTaWduYXR1cmVJbmRleCBhcmdJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAod2FzbUZ1
bmN0aW9uKQotICAgICAgICAgICAgICAgICAgICBhcmdJbmRleCA9IHdhc21GdW5jdGlvbi0+c2ln
bmF0dXJlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGFyZ0luZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKLSAgICAg
ICAgICAgICAgICBpZiAocGFyYW1JbmRleCAhPSBhcmdJbmRleCkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNj
b3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sICJB
cmd1bWVudCBmdW5jdGlvbiBkaWQgbm90IG1hdGNoIHRoZSByZWZlcmVuY2UgdHlwZSIpKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IFdhc206OlR5cGVLaW5kOjpFeHRlcm5yZWY6Ci0gICAgICAgICAgICBpZiAoIXNpZ25hdHVyZS5h
cmd1bWVudChhcmdJbmRleCkuaXNOdWxsYWJsZSgpICYmIGFyZy5pc051bGwoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVj
dCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2
bSwgIk5vbi1udWxsIEV4dGVybnJlZiBjYW5ub3QgYmUgbnVsbCIpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STY0OgotICAgICAgICAgICAgYXJn
ID0gSlNWYWx1ZTo6ZGVjb2RlKGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oYXJnLnRvQmlnSW50NjQo
Z2xvYmFsT2JqZWN0KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6
VHlwZUtpbmQ6OkYzMjoKLSAgICAgICAgICAgIGFyZyA9IEpTVmFsdWU6OmRlY29kZShiaXR3aXNl
X2Nhc3Q8dWludDMyX3Q+KGFyZy50b0Zsb2F0KGdsb2JhbE9iamVjdCkpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGNjQ6Ci0gICAgICAgICAgICBh
cmcgPSBKU1ZhbHVlOjpkZWNvZGUoYml0d2lzZV9jYXN0PHVpbnQ2NF90PihhcmcudG9OdW1iZXIo
Z2xvYmFsT2JqZWN0KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6
VHlwZUtpbmQ6OlZvaWQ6Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkZ1bmM6Ci0gICAg
ICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlJlZk51bGw6Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlw
ZUtpbmQ6OlJlZjoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgdWludDY0X3QgdmFsdWUgPSBmcm9tSlNWYWx1ZShnbG9iYWxPYmpl
Y3QsIHNpZ25hdHVyZS5hcmd1bWVudChhcmdJbmRleCksIGNhbGxGcmFtZS0+YXJndW1lbnQoYXJn
SW5kZXgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgICAgIGJveGVkQXJncy5hcHBlbmQoYXJnKTsKKyAgICAgICAgYm94ZWRBcmdz
LmFwcGVuZChKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKICAgICB9CiAKICAgICAvLyBXaGVuIHdl
IGRvbid0IHVzZSBmYXN0IFRMUyB0byBzdG9yZSB0aGUgY29udGV4dCwgdGhlIEpTCkBAIC0xNTIs
MTAgKzExMCw2IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgQVNTRVJUKHdhc21GdW5j
dGlvbi0+aW5zdGFuY2UoKSk7CiAgICAgQVNTRVJUKCZ3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkt
Pmluc3RhbmNlKCkgPT0gdm0ud2FzbUNvbnRleHQubG9hZCgpKTsKICAgICBFbmNvZGVkSlNWYWx1
ZSByYXdSZXN1bHQgPSB2bUVudHJ5VG9XYXNtKHdhc21GdW5jdGlvbi0+anNFbnRyeXBvaW50KE11
c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpLCAmdm0sICZwcm90b0NhbGxGcmFtZSk7
Ci0gICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBpbiBhIHJlZ2lzdGVyIG9yIG9u
IHRoZSBzdGFjayBzaW5jZSBpdCdzIHN0b3JlZCBpbiBWZWN0b3I8SlNWYWx1ZT4uCi0gICAgLy8g
VGhpcyBwcm9iYWJseSBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksIHNpbmNlIHRoZSBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiBzaG91bGQga2VlcCB0aGUgaW5zdGFuY2UKLSAgICAvLyBhbGl2ZS4gQnV0
IGl0J3MgZ29vZCBoeWdpZW5lLgotICAgIGluc3RhbmNlLT51c2UoKTsKICAgICBpZiAocHJldldh
c21JbnN0YW5jZSAhPSB3YXNtSW5zdGFuY2UpIHsKICAgICAgICAgLy8gVGhpcyBpcyBqdXN0IGZv
ciBzb21lIGV4dHJhIHNhZmV0eSBpbnN0ZWFkIG9mIGxlYXZpbmcgYSBjYWNoZWQKICAgICAgICAg
Ly8gdmFsdWUgaW4gdGhlcmUuIElmIHdlIGV2ZXIgZm9yZ2V0IHRvIHNldCB0aGUgdmFsdWUgdG8g
YmUgYSByZWFsCkBAIC0xNjgsNiArMTIyLDExIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihj
YWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAg
ICAgdm0ud2FzbUNvbnRleHQuc3RvcmUocHJldldhc21JbnN0YW5jZSwgdm0uc29mdFN0YWNrTGlt
aXQoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAorICAgIC8vIFdl
IG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgaW4gYSByZWdpc3RlciBvciBvbiB0aGUgc3RhY2sg
c2luY2UgaXQncyBzdG9yZWQgaW4gVmVjdG9yPEpTVmFsdWU+LgorICAgIC8vIFRoaXMgcHJvYmFi
bHkgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBzaW5jZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlv
biogc2hvdWxkIGtlZXAgdGhlIGluc3RhbmNlCisgICAgLy8gYWxpdmUuIEJ1dCBpdCdzIGdvb2Qg
aHlnaWVuZS4KKyAgICBpbnN0YW5jZS0+dXNlKCk7CisKICAgICByZXR1cm4gcmF3UmVzdWx0Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXggZGI0MDkyYWQ2OTQ4MmY3YTA5ZDNiZTFmNzUyMzQy
MmQ5ZDVhZjEzZC4uZjdiMDg3YmY1ODkyYmYyNmJmZTYzZTVlMzhjZmFkMjAyYmFiYTIxNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhZy5o
IgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVy
ZUlubGluZXMuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCkBAIC0xMzAsNiAr
MTMxLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlua0ltcGwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGkKICAgICAgICAgY2FzZSBXYXNtOjpFeHRl
cm5hbEtpbmQ6OkZ1bmN0aW9uOgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xv
YmFsOgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6CisgICAgICAgIGNh
c2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeToKICAgICAgICAgICAgIGNvbnRp
bnVlOwpAQCAtMzYzLDcgKzM2NSw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6Omxp
bmtJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBpCiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6IHsKLSAgICAgICAg
ICAgIC8vIDcuIE90aGVyd2lzZSAoaSBpcyBhIHRhYmxlIGltcG9ydCk6CisgICAgICAgICAgICAv
LyA3LiBJZiBpIGlzIGEgdGFibGUgaW1wb3J0OgogICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRh
YmxlKiB0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4odm0sIHZhbHVl
KTsKICAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuVGFibGUgb2Jq
ZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KICAgICAgICAgICAgIGlmICghdGFi
bGUpCkBAIC0zOTQsNiArMzk2LDIyIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6Omxp
bmtJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBpCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5k
OjpFeGNlcHRpb246IHsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWcqIHRhZyA9IGpzRHlu
YW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhZyo+KHZtLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAo
IXRhZykKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAi
VGFnIGltcG9ydCIsICJpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFnIikpKTsK
KworICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRl
eCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXNbaW1w
b3J0LmtpbmRJbmRleF07CisgICAgICAgICAgICBVTlVTRURfVkFSSUFCTEUoZXhwZWN0ZWRTaWdu
YXR1cmVJbmRleCk7CisKKyAgICAgICAgICAgIGlmIChleHBlY3RlZFNpZ25hdHVyZUluZGV4ICE9
IHRhZy0+dGFnKCkuc2lnbmF0dXJlKCkuaW5kZXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwg
aW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiaW1wb3J0ZWQgVGFnIiwgInNpZ25hdHVyZSBkb2Vz
bid0IG1hdGNoIHRoZSBpbXBvcnRlZCBXZWJBc3NlbWJseSBUYWcncyBzaWduYXR1cmUiKSkpOwor
CisgICAgICAgICAgICBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmFkZFRhZyh0YWctPnRhZygpKTsK
KyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5k
OjpNZW1vcnk6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDIxLDYgKzQzOSw5
IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBmb3Ig
KFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4IDogbW9kdWxlSW5mb3JtYXRpb24u
aW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzKQorICAgICAgICBtX2luc3RhbmNlLT5p
bnN0YW5jZSgpLmFkZFRhZyhXYXNtOjpUYWc6OmNyZWF0ZShXYXNtOjpTaWduYXR1cmVJbmZvcm1h
dGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KSkubGVha1JlZigpKTsKKwogICAgIHVuc2lnbmVkIGZ1
bmN0aW9uSW1wb3J0Q291bnQgPSBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKICAg
ICBhdXRvIG1ha2VGdW5jdGlvbldyYXBwZXIgPSBbJl0gKHVpbnQzMl90IGluZGV4KSAtPiBKU1Zh
bHVlIHsKICAgICAgICAgLy8gSWYgd2UgYWxyZWFkeSBtYWRlIGEgd3JhcHBlciwgZG8gbm90IG1h
a2UgYSBuZXcgb25lLgpAQCAtNTU3LDYgKzU3OCwxMCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCog
aQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbjogeworICAgICAgICAgICAgZXhwb3J0
ZWRWYWx1ZSA9IEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPm1fd2ViQXNzZW1ibHlUYWdTdHJ1Y3R1cmUuZ2V0KGdsb2JhbE9iamVjdCksIG1f
aW5zdGFuY2UtPmluc3RhbmNlKCkudGFnKGV4cC5raW5kSW5kZXgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgoZXhwLmZp
ZWxkKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVRhZ0NvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzMTIxMTAzNzQ1MGM4YTRi
NGYzNzZiMWNhZGRjOThkYWExMWMwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsx
LDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmgi
CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1
ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhZy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnUHJv
dG90eXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1i
bHlUYWdDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IpIH07CisKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNhbGxKU1dlYkFz
c2VtYmx5VGFnKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEpT
V2ViQXNzZW1ibHlUYWcpOworCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0SlNX
ZWJBc3NlbWJseVRhZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIAorICAgIGlmIChjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWcgY29uc3RydWN0b3IgZXhwZWN0
cyB0aGUgdGFnIHR5cGUgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LiJfcyk7CisKKyAgICBKU1ZhbHVl
IHRhZ1R5cGVWYWx1ZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBzaWdu
YXR1cmVPYmplY3QgPSB0YWdUeXBlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInBhcmFtZXRlcnMiX3MpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworCisgICAgaWYgKCFzaWduYXR1cmVPYmplY3QuaXNPYmplY3QoKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFz
c2VtYmx5LlRhZyBjb25zdHJ1Y3RvciBleHBlY3RzIGEgdGFnIHR5cGUgd2l0aCB0aGUgJ3BhcmFt
ZXRlcnMnIHByb3BlcnR5LiJfcyk7CisKKyAgICBWZWN0b3I8V2FzbTo6VHlwZT4gcGFyYW1ldGVy
czsKKyAgICBmb3JFYWNoSW5JdGVyYWJsZShnbG9iYWxPYmplY3QsIHNpZ25hdHVyZU9iamVjdCwg
WyZdIChhdXRvJiB2bSwgYXV0byogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG5leHRUeXBlKSAtPiB2
b2lkIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgICAgIFdhc206OlR5cGUgdHlwZTsKKyAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nID0gbmV4
dFR5cGUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgaWYgKHZhbHVlU3RyaW5nID09ICJpMzIiX3Mp
CisgICAgICAgICAgICB0eXBlID0gV2FzbTo6VHlwZXM6OkkzMjsKKyAgICAgICAgZWxzZSBpZiAo
dmFsdWVTdHJpbmcgPT0gImk2NCJfcykKKyAgICAgICAgICAgIHR5cGUgPSBXYXNtOjpUeXBlczo6
STY0OworICAgICAgICBlbHNlIGlmICh2YWx1ZVN0cmluZyA9PSAiZjMyIl9zKQorICAgICAgICAg
ICAgdHlwZSA9IFdhc206OlR5cGVzOjpGMzI7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5n
ID09ICJmNjQiX3MpCisgICAgICAgICAgICB0eXBlID0gV2FzbTo6VHlwZXM6OkY2NDsKKyAgICAg
ICAgZWxzZSBpZiAodmFsdWVTdHJpbmcgPT0gImFueWZ1bmMiX3MpCisgICAgICAgICAgICB0eXBl
ID0gV2FzbTo6VHlwZXM6OkZ1bmNyZWY7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09
ICJleHRlcm5yZWYiX3MpCisgICAgICAgICAgICB0eXBlID0gV2FzbTo6VHlwZXM6OkV4dGVybnJl
ZjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuVGFnIGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlICdwYXJh
bWV0ZXJzJyBmaWVsZCBvZiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBzZXF1ZW5jZSBvZiBX
ZWJBc3NlbWJseSB2YWx1ZSB0eXBlcy4iX3MpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQodHlwZSk7CisgICAgfSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFJlZlB0cjxXYXNtOjpTaWduYXR1
cmU+IHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpzaWduYXR1cmVGb3Io
eyB9LCBwYXJhbWV0ZXJzKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTQ19HRVRfREVS
SVZFRF9TVFJVQ1RVUkUodm0sIHdlYkFzc2VtYmx5VGFnU3RydWN0dXJlLCBhc09iamVjdChjYWxs
RnJhbWUtPm5ld1RhcmdldCgpKSwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5VGFnOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBXYXNtOjpUYWc6OmNyZWF0ZSgqc2lnbmF0
dXJlKS5nZXQoKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxKU1dlYkFz
c2VtYmx5VGFnLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCit7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29u
c3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgIldlYkFzc2VtYmx5LlRhZyIpKTsKK30KKworSlNXZWJBc3NlbWJseVRhZyogV2ViQXNz
ZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3JlYXRlVGFnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBXYXNtOjpUYWcmIHRhZykKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIG5ld1RhcmdldCA9IGFzT2JqZWN0KGNhbGxG
cmFtZS0+bmV3VGFyZ2V0KCkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNDX0dFVF9E
RVJJVkVEX1NUUlVDVFVSRSh2bSwgd2ViQXNzZW1ibHlUYWdTdHJ1Y3R1cmUsIG5ld1RhcmdldCwg
Y2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNXZWJBc3NlbWJseVRh
Zzo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdGFnKSk7Cit9CisKK1dlYkFz
c2VtYmx5VGFnQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OmNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSogdGhp
c1Byb3RvdHlwZSkKK3sKKyAgICBhdXRvKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I+KHZtLmhlYXApKSBXZWJBc3NlbWJs
eVRhZ0NvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOworICAgIGNvbnN0cnVjdG9yLT5maW5pc2hD
cmVhdGlvbih2bSwgdGhpc1Byb3RvdHlwZSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworfQor
CitTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
eworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKEludGVybmFsRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSogcHJvdG90eXBlKQoreworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtLCAxLCAiVGFnIl9zLCBQcm9wZXJ0eUFkZGl0aW9uTW9kZTo6V2l0
aG91dFN0cnVjdHVyZVRyYW5zaXRpb24pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHByb3RvdHlwZSwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOworfQorCitXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yOjpX
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNhbGxKU1dlYkFzc2VtYmx5VGFnLCBjb25zdHJ1Y3RK
U1dlYkFzc2VtYmx5VGFnKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWUyZjFk
ODA2ZTkwMjFlZDg1NzVmYWM1YjM4MTZjMTM5OWEzMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUg
IkludGVybmFsRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJXYXNtT3BzLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBKU1dlYkFzc2VtYmx5VGFnOworY2xhc3MgV2ViQXNzZW1ibHlUYWdQcm90
b3R5cGU7CisKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIFRhZzsKK30KKworY2xhc3MgV2ViQXNz
ZW1ibHlUYWdDb25zdHJ1Y3RvciBmaW5hbCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworICAgIHN0YXRpYyBX
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBXZWJBc3Nl
bWJseVRhZ1Byb3RvdHlwZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBzdGF0aWMgSlNXZWJBc3Nl
bWJseVRhZyogY3JlYXRlVGFnKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgY29uc3QgV2Fz
bTo6VGFnJik7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgV2ViQXNzZW1i
bHlUYWdDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSopOworfTsKK1NUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IsIEludGVybmFsRnVu
Y3Rpb24pOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFnUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFnUHJvdG90eXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OTNkNDE3YzE4YWM4NGE3Mjk0ZDJl
OTE0MmE1NDMzMWYyNjMwNDA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwCkBAIC0wLDAgKzEsMTIwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgiCisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgorI2lu
Y2x1ZGUgIldhc21Gb3JtYXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CitzdGF0aWMgSlNDX0RFQ0xB
UkVfSE9TVF9GVU5DVElPTih3ZWJBc3NlbWJseVRhZ1Byb3RvRnVuY1R5cGUpOworfQorCisjaW5j
bHVkZSAiV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUubHV0LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Citjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlUYWdQcm90b3R5cGU6OnNfaW5mbyA9IHsgIldl
YkFzc2VtYmx5LlRhZyIsICZCYXNlOjpzX2luZm8sICZwcm90b3R5cGVUYWJsZVdlYkFzc2VtYmx5
VGFnLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5VGFnUHJvdG90eXBl
KSB9OworCisvKiBTb3VyY2UgZm9yIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oCisgQGJl
Z2luIHByb3RvdHlwZVRhYmxlV2ViQXNzZW1ibHlUYWcKKyB0eXBlICAgd2ViQXNzZW1ibHlUYWdQ
cm90b0Z1bmNUeXBlICAgRnVuY3Rpb24gMAorIEBlbmQKKyAqLworCisKK1dlYkFzc2VtYmx5VGFn
UHJvdG90eXBlKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBhdXRvKiBvYmplY3QgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZT4odm0uaGVh
cCkpIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIG9iamVjdC0+
ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK1N0cnVjdHVyZSog
V2ViQXNzZW1ibHlUYWdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBXZWJBc3NlbWJs
eVRhZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworICAgIEpT
Q19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOworfQorCitXZWJBc3NlbWJseVRh
Z1Byb3RvdHlwZTo6V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKworQUxXQVlTX0lOTElO
RSBzdGF0aWMgSlNXZWJBc3NlbWJseVRhZyogZ2V0VGFnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBp
ZiAoVU5MSUtFTFkoIXRoaXNWYWx1ZS5pc0NlbGwoKSkpIHsKKyAgICAgICAgdGhyb3dWTUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZ2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGF1dG8q
IHRhZyA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhZyo+KHZtLCB0aGlzVmFsdWUuYXND
ZWxsKCkpOworICAgIGlmIChMSUtFTFkodGFnKSkKKyAgICAgICAgcmV0dXJuIHRhZzsKKyAgICB0
aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuVGFnIG9wZXJh
dGlvbiBjYWxsZWQgb24gbm9uLVRhZyBvYmplY3QiX3MpOworICAgIHJldHVybiBudWxscHRyOwor
fQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlUYWdQcm90b0Z1bmNUeXBl
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTV2ViQXNzZW1ibHlUYWcqIGpzVGFn
ID0gZ2V0VGFnKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIGNv
bnN0IFdhc206OlRhZyYgdGFnID0ganNUYWctPnRhZygpOworCisgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJnTGlzdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhZy5wYXJhbWV0ZXJD
b3VudCgpOyArK2kpCisgICAgICAgIGFyZ0xpc3QuYXBwZW5kKFdhc206OnR5cGVUb1N0cmluZyh2
bSwgdGFnLnBhcmFtZXRlcihpKS5raW5kKSk7CisKKyAgICBpZiAoVU5MSUtFTFkoYXJnTGlzdC5o
YXNPdmVyZmxvd2VkKCkpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxP
YmplY3QsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAg
ICB9CisKKyAgICBKU0FycmF5KiBwYXJhbWV0ZXJzID0gY29uc3RydWN0QXJyYXkoZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciksIGFyZ0xp
c3QpOworICAgIEpTT2JqZWN0KiB0eXBlID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCAxKTsKKyAgICB0eXBlLT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJhbWV0ZXJzIiksIHBhcmFt
ZXRlcnMpOworCisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKHR5cGUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMjQzMmY5Yzg5YmRjZGE3ZGM3
Yjk0MTg0NzYyYjI1MjZiNTliYjZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaApAQCAtMCwwICsxLDU4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUgZmluYWwg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpT
Tm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJ
Q19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLCBC
YXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKworICAg
IHN0YXRpYyBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOworCitw
cml2YXRlOgorICAgIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7Cisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS93YXNtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNt
Lmpzb24KaW5kZXggNGY4ZGQ5ZTNkMjEzNDM1MDAwMDA2ZTI0MTQ2YjAxOTRjOWFjODhmMS4uYTQz
NTEwZjRmODQ3MzAzODY0M2MxNjVjM2MzMDgxNDhmMDc1MDRhZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL3dhc20uanNvbgpAQCAtMjMsMzQgKzIzLDM4IEBACiAgICAgImJsb2NrX3R5cGUiOiBb
ImkzMiIsICJpNjQiLCAiZjMyIiwgImY2NCIsICJ2b2lkIiwgImV4dGVybnJlZiIsICJmdW5jcmVm
Il0sCiAgICAgInJlZl90eXBlIjogWyJmdW5jcmVmIiwgImV4dGVybnJlZiIsICJ0eXBlX2lkeCJd
LAogICAgICJleHRlcm5hbF9raW5kIjogewotICAgICAgICAiRnVuY3Rpb24iOiB7ICJ0eXBlIjog
InVpbnQ4IiwgInZhbHVlIjogMCB9LAotICAgICAgICAiVGFibGUiOiAgICB7ICJ0eXBlIjogInVp
bnQ4IiwgInZhbHVlIjogMSB9LAotICAgICAgICAiTWVtb3J5IjogICB7ICJ0eXBlIjogInVpbnQ4
IiwgInZhbHVlIjogMiB9LAotICAgICAgICAiR2xvYmFsIjogICB7ICJ0eXBlIjogInVpbnQ4Iiwg
InZhbHVlIjogMyB9CisgICAgICAgICJGdW5jdGlvbiI6ICAgIHsgInR5cGUiOiAidWludDgiLCAi
dmFsdWUiOiAwIH0sCisgICAgICAgICJUYWJsZSI6ICAgICAgIHsgInR5cGUiOiAidWludDgiLCAi
dmFsdWUiOiAxIH0sCisgICAgICAgICJNZW1vcnkiOiAgICAgIHsgInR5cGUiOiAidWludDgiLCAi
dmFsdWUiOiAyIH0sCisgICAgICAgICJHbG9iYWwiOiAgICAgIHsgInR5cGUiOiAidWludDgiLCAi
dmFsdWUiOiAzIH0sCisgICAgICAgICJFeGNlcHRpb24iOiAgIHsgInR5cGUiOiAidWludDgiLCAi
dmFsdWUiOiA0IH0KICAgICB9LAogICAgICJzZWN0aW9uIiA6IHsKLSAgICAgICAgIlR5cGUiOiAg
ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAxLCAiZGVzY3JpcHRpb24iOiAiRnVu
Y3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAgIkltcG9ydCI6ICAgeyAi
dHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAyLCAiZGVzY3JpcHRpb24iOiAiSW1wb3J0IGRl
Y2xhcmF0aW9ucyIgfSwKLSAgICAgICAgIkZ1bmN0aW9uIjogeyAidHlwZSI6ICJ2YXJ1aW50NyIs
ICJ2YWx1ZSI6ICAzLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gZGVjbGFyYXRpb25zIiB9LAot
ICAgICAgICAiVGFibGUiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDQsICJk
ZXNjcmlwdGlvbiI6ICJJbmRpcmVjdCBmdW5jdGlvbiB0YWJsZSBhbmQgb3RoZXIgdGFibGVzIiB9
LAotICAgICAgICAiTWVtb3J5IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDUs
ICJkZXNjcmlwdGlvbiI6ICJNZW1vcnkgYXR0cmlidXRlcyIgfSwKLSAgICAgICAgIkdsb2JhbCI6
ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA2LCAiZGVzY3JpcHRpb24iOiAiR2xv
YmFsIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAgIkV4cG9ydCI6ICAgeyAidHlwZSI6ICJ2YXJ1
aW50NyIsICJ2YWx1ZSI6ICA3LCAiZGVzY3JpcHRpb24iOiAiRXhwb3J0cyIgfSwKLSAgICAgICAg
IlN0YXJ0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA4LCAiZGVzY3JpcHRp
b24iOiAiU3RhcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24iIH0sCi0gICAgICAgICJFbGVtZW50Ijog
IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgOSwgImRlc2NyaXB0aW9uIjogIkVsZW1l
bnRzIHNlY3Rpb24iIH0sCi0gICAgICAgICJDb2RlIjogICAgIHsgInR5cGUiOiAidmFydWludDci
LCAidmFsdWUiOiAxMCwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIGJvZGllcyAoY29kZSkiIH0s
Ci0gICAgICAgICJEYXRhIjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMSwg
ImRlc2NyaXB0aW9uIjogIkRhdGEgc2VnbWVudHMiIH0KKyAgICAgICAgIlR5cGUiOiAgICAgIHsg
InR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMSwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9u
IHNpZ25hdHVyZSBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJJbXBvcnQiOiAgICB7ICJ0eXBl
IjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDIsICJkZXNjcmlwdGlvbiI6ICJJbXBvcnQgZGVjbGFy
YXRpb25zIiB9LAorICAgICAgICAiRnVuY3Rpb24iOiAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2
YWx1ZSI6ICAzLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gZGVjbGFyYXRpb25zIiB9LAorICAg
ICAgICAiVGFibGUiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA0LCAiZGVz
Y3JpcHRpb24iOiAiSW5kaXJlY3QgZnVuY3Rpb24gdGFibGUgYW5kIG90aGVyIHRhYmxlcyIgfSwK
KyAgICAgICAgIk1lbW9yeSI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNSwg
ImRlc2NyaXB0aW9uIjogIk1lbW9yeSBhdHRyaWJ1dGVzIiB9LAorICAgICAgICAiR2xvYmFsIjog
ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA2LCAiZGVzY3JpcHRpb24iOiAiR2xv
YmFsIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIkV4cG9ydCI6ICAgIHsgInR5cGUiOiAidmFy
dWludDciLCAidmFsdWUiOiAgNywgImRlc2NyaXB0aW9uIjogIkV4cG9ydHMiIH0sCisgICAgICAg
ICJTdGFydCI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDgsICJkZXNjcmlw
dGlvbiI6ICJTdGFydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiIgfSwKKyAgICAgICAgIkVsZW1lbnQi
OiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgOSwgImRlc2NyaXB0aW9uIjogIkVs
ZW1lbnRzIHNlY3Rpb24iIH0sCisgICAgICAgICJDb2RlIjogICAgICB7ICJ0eXBlIjogInZhcnVp
bnQ3IiwgInZhbHVlIjogMTAsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBib2RpZXMgKGNvZGUp
IiB9LAorICAgICAgICAiRGF0YSI6ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6
IDExLCAiZGVzY3JpcHRpb24iOiAiRGF0YSBzZWdtZW50cyIgfSwKKyAgICAgICAgIkRhdGFDb3Vu
dCI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMiwgImRlc2NyaXB0aW9uIjogIk51
bWJlciBvZiBkYXRhIHNlZ21lbnRzIiB9LAorICAgICAgICAiRXhjZXB0aW9uIjogeyAidHlwZSI6
ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEzLCAiZGVzY3JpcHRpb24iOiAiRXhjZXB0aW9uIGRlY2xh
cmF0aW9ucyIgfQogICAgIH0sCiAgICAgIm9wY29kZSI6IHsKICAgICAgICAgInVucmVhY2hhYmxl
IjogICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAwLCAicmV0
dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0cmFwIGltbWVkaWF0ZWx5IiB9
LAorICAgICAgICAibm9wIjogICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wi
LCAgICAidmFsdWUiOiAgIDEsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIm5vIG9wZXJhdGlvbiIgfSwKICAgICAgICAgImJsb2NrIjogICAgICAgICAgICAgICB7ICJj
YXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAyLCAicmV0dXJuIjogWyJjb250cm9s
Il0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2Nr
X3R5cGUifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBhIHNlcXVlbmNlIG9mIGV4cHJlc3Npb25zLCB5
aWVsZGluZyAwIG9yIDEgdmFsdWVzIiB9LAogICAgICAgICAibG9vcCI6ICAgICAgICAgICAgICAg
IHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDMsICJyZXR1cm4iOiBbImNv
bnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAi
YmxvY2tfdHlwZSJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGEgYmxvY2sgd2hpY2ggY2FuIGFsc28g
Zm9ybSBjb250cm9sIGZsb3cgbG9vcHMiIH0sCiAgICAgICAgICJpZiI6ICAgICAgICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNCwgInJldHVybiI6IFsi
Y29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJib29sIl0sICAg
ICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6
ICJibG9ja190eXBlIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gaWYgZXhwcmVzc2lvbiIgfSwKICAg
ICAgICAgImVsc2UiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAg
InZhbHVlIjogICA1LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAg
ICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUi
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJi
ZWdpbiBlbHNlIGV4cHJlc3Npb24gb2YgaWYiIH0sCi0gICAgICAgICJzZWxlY3QiOiAgICAgICAg
ICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNywgInJldHVybiI6
IFsicHJldiJdLCAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAi
cHJldiIsICJib29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAic2VsZWN0IG9uZSBvZiB0d28gdmFsdWVz
IGJhc2VkIG9uIGNvbmRpdGlvbiIgfSwKLSAgICAgICAgImFubm90YXRlZF9zZWxlY3QiOiAgICB7
ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI4LCAicmV0dXJuIjogWyJwcmV2
Il0sICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2Iiwg
ImJvb2wiXSwgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInRhcmdldF90eXBlc19jb3Vu
dCIsICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFyZ2V0
IHR5cGVzIHZlY3RvciJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7Im5hbWUiOiAidGFyZ2V0X3R5cGVzIiwgICAgICAgInR5
cGUiOiAidmFsdWVfdHlwZSoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogInRhcmdldCB0eXBlcyB0aGF0IGluZGljYXRlIHJlc3VsdCBvZiBz
ZWxlY3QgaW5zdHJ1Y3Rpb24ifV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIHNhbWUgYXMganVzdCBzZWxlY3QgYnV0IHdpdGgg
dGhlIGFubm90YXRpb24gZm9yIHJlc3VsdCB0eXBlcyIgfSwKKyAgICAgICAgInRyeSI6ICAgICAg
ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA2LCAicmV0
dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInNpZyIs
ICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiB0cnkgZXhwcmVzc2lv
biIgfSwKKyAgICAgICAgImNhdGNoIjogICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250
cm9sIiwgICAgInZhbHVlIjogICA3LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAg
ICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJp
bW1lZGlhdGUiOiBbeyJuYW1lIjogImV4biIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJiZWdpbiBjYXRjaCBleHByZXNzaW9uIG9mIHRyeSIgfSwKKyAgICAgICAgInRocm93
IjogICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA4
LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIi
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjog
ImV4biIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aHJvdyBleGNlcHRp
b24iIH0sCisgICAgICAgICJyZXRocm93IjogICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29u
dHJvbCIsICAgICJ2YWx1ZSI6ICAgOSwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAg
ICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2ZV9kZXB0aCIsICJ0eXBlIjogInZhcnVpbnQz
MiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAicmV0aHJvdyB0aGUgZXhjZXB0aW9uIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIiB9
LAogICAgICAgICAiYnIiOiAgICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wi
LCAgICAidmFsdWUiOiAgMTIsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogImJyZWFrIHRoYXQgdGFyZ2V0cyBhbiBvdXRlciBuZXN0ZWQgYmxvY2siIH0sCiAgICAgICAg
ICJicl9pZiI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1
ZSI6ICAxMywgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFy
YW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3si
bmFtZSI6ICJyZWxhdGl2ZV9kZXB0aCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiY29uZGl0
aW9uYWwgYnJlYWsgdGhhdCB0YXJnZXRzIGFuIG91dGVyIG5lc3RlZCBibG9jayIgfSwKICAgICAg
ICAgImJyX3RhYmxlIjogICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZh
bHVlIjogIDE0LCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw
YXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBb
eyJuYW1lIjogInRhcmdldF9jb3VudCIsICAgInR5cGUiOiAidmFydWludDMyIiwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJudW1i
ZXIgb2YgZW50cmllcyBpbiB0aGUgdGFyZ2V0X3RhYmxlIn0sCkBAIC01OCw4ICs2MiwxMyBAQAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7Im5hbWUiOiAiZGVmYXVsdF90YXJnZXQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
ImFuIG91dGVyIGJsb2NrIG9yIGxvb3AgdG8gd2hpY2ggdG8gYnJlYWsgaW4gdGhlIGRlZmF1bHQg
Y2FzZSJ9XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJicmFuY2ggdGFibGUgY29udHJvbCBmbG93IGNvbnN0cnVjdCIgfSwKICAgICAg
ICAgInJldHVybiI6ICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZh
bHVlIjogIDE1LCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw
YXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJyZXR1
cm4gemVybyBvciBvbmUgdmFsdWUgZnJvbSB0aGlzIGZ1bmN0aW9uIiB9LAorICAgICAgICAiZGVs
ZWdhdGUiOiAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAg
MjQsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRl
ciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUi
OiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImRlbGVnYXRlIHRv
IGEgcGFyZW50IHRyeSBibG9jayIgfSwKKyAgICAgICAgImNhdGNoX2FsbCI6ICAgICAgICAgICB7
ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI1LCAicmV0dXJuIjogWyJjb250
cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJjYXRjaCBleGNlcHRpb25zIHJlZ2FyZGxlc3Mgb2Yg
dGFnIiB9LAogICAgICAgICAiZHJvcCI6ICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNv
bnRyb2wiLCAgICAidmFsdWUiOiAgMjYsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55Il0sICAgICAgICAgICAgICAgICAgICAgICAg
ImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogImlnbm9yZSB2YWx1ZSIgfSwKLSAgICAgICAgIm5vcCI6ICAgICAgICAgICAgICAg
ICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAxLCAicmV0dXJuIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJubyBvcGVyYXRpb24iIH0sCisgICAgICAgICJz
ZWxlY3QiOiAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6
ICAyNywgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1l
dGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAic2VsZWN0IG9u
ZSBvZiB0d28gdmFsdWVzIGJhc2VkIG9uIGNvbmRpdGlvbiIgfSwKKyAgICAgICAgImFubm90YXRl
ZF9zZWxlY3QiOiAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI4LCAi
cmV0dXJuIjogWyJwcmV2Il0sICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBb
ImFueSIsICJwcmV2IiwgImJvb2wiXSwgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInRh
cmdldF90eXBlc19jb3VudCIsICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJudW1iZXIgb2YgZW50cmll
cyBpbiB0aGUgdGFyZ2V0IHR5cGVzIHZlY3RvciJ9LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Im5hbWUiOiAidGFyZ2V0X3R5
cGVzIiwgICAgICAgInR5cGUiOiAidmFsdWVfdHlwZSoiLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRhcmdldCB0eXBlcyB0aGF0IGluZGlj
YXRlIHJlc3VsdCBvZiBzZWxlY3QgaW5zdHJ1Y3Rpb24ifV0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIHNhbWUgYXMganVzdCBz
ZWxlY3QgYnV0IHdpdGggdGhlIGFubm90YXRpb24gZm9yIHJlc3VsdCB0eXBlcyIgfSwKICAgICAg
ICAgImVuZCI6ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZh
bHVlIjogIDExLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw
YXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJlbmQg
YSBibG9jaywgbG9vcCwgb3IgaWYiIH0sCiAgICAgICAgICJpMzIuY29uc3QiOiAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAic3BlY2lhbCIsICAgICJ2YWx1ZSI6ICA2NSwgInJldHVybiI6IFsiaTMy
Il0sICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ2YWx1ZSIsICAgICAgICAg
ICJ0eXBlIjogInZhcmludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYSBjb25zdGFudCB2YWx1ZSBpbnRlcnByZXRlZCBh
cyBpMzIiIH0sCiAgICAgICAgICJpNjQuY29uc3QiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
c3BlY2lhbCIsICAgICJ2YWx1ZSI6ICA2NiwgInJldHVybiI6IFsiaTY0Il0sICAgICAgICAgICAg
ICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ2YWx1ZSIsICAgICAgICAgICJ0eXBlIjogInZhcmlu
dDY0In1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiYSBjb25zdGFudCB2YWx1ZSBpbnRlcnByZXRlZCBhcyBpNjQiIH0sCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTk0NWEwZGEz
M2I4M2Y2YmFmMzZjY2U3MDdkN2MwNzFhNDkxYTk3MC4uYTJmZmYxYjdkY2Q0ZTAwY2M4MWRkZDM1
ZmVjMGE5ZjczOWE3YmQzNCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIxLTEwLTA1ICBUYWRldSBaYWdhbGxvICA8
dHphZ2FsbG9AYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCB0aGUgV2ViQXNzZW1ibHkg
ZXhjZXB0aW9uIGhhbmRsaW5nIHByb3Bvc2FsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk2ODEKKyAgICAgICAgPHJkYXI6Ly84MTYwMzM4Nz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMv
cnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMjEtMTAtMDYgIFlvdWVubiBGYWJsZXQgIDx5b3Vl
bm5AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBodHRwczovL3czYy5naXRodWIuaW8v
cHVzaC1hcGkvI3JlY2VpdmluZy1hLXB1c2gtbWVzc2FnZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3Mt
dGVzdHMKaW5kZXggZTA4MTZkYzA1NjFiMTgwYTllZmI2Njc4ZGI4MmNjNjQ2ZTE5YjQ4MS4uZGRm
OTQ3ZGViNzcyMzgyYjI4OTYwOTdkYTY0YzEzYjgwY2EyYWYxOCAxMDA3NTUKLS0tIGEvVG9vbHMv
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzCkBAIC0xMjI3LDE2ICsxMjI3LDIxIEBAIGRlZiBydW5XZWJBc3NlbWJseVN1
aXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiAgICAgbW9kdWxlcyA9IERpcltXQVNN
VEVTVFNfUEFUSCArICIqLmpzIl0ubWFwIHsgfGZ8IEZpbGUuYmFzZW5hbWUoZikgfQogICAgIHBy
ZXBhcmVFeHRyYUFic29sdXRlRmlsZXMoV0FTTVRFU1RTX1BBVEgsIFsid2FzbS5qc29uIl0pCiAg
ICAgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlcyhtb2R1bGVzLm1hcCB7IHxmfCAiLi4vIiArIGYg
fSwgJGNvbGxlY3Rpb24pCi0gICAgcnVuKCJkZWZhdWx0LXdhc20iLCAiLW0iLCAqKEZUTF9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBpZiBvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnNbMF0gPT0gOm5vX21vZHVsZQorICAgICAgb3B0aW9uYWxUZXN0U3BlY2lm
aWNPcHRpb25zLnNoaWZ0CisgICAgZWxzZQorICAgICAgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zLnVuc2hpZnQgIi1tIgorICAgIGVuZAorICAgIHJ1bigiZGVmYXVsdC13YXNtIiwgKihGVExf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiAgICAgaWYgJG1vZGUgIT0g
InF1aWNrIgotICAgICAgICBydW4oIndhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLW0i
LCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19D
SklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4o
Indhc20tZWFnZXIiLCAiLW0iLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNv
biIsICItbSIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAi
LS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAiLS12ZXJp
ZnlHQz10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykp
Ci0gICAgICAgIHJ1bigid2FzbS1uby10bHMtY29udGV4dCIsICItbSIsICItLXVzZUZhc3RUTFNG
b3JXYXNtQ29udGV4dD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAiLW0iLCAiLS11c2VX
ZWJBc3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLWIzIiwgIi1tIiwgIi0tdXNlV2Fz
bUxMSW50PWZhbHNlIiwgIi0td2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLWFpciIsICIt
bSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlz
bGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLW0i
LCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAiLS12ZXJpZnlHQz10cnVlIiwgKihGVExf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpIGlmIHNob3VsZENvbGxlY3RD
b250aW51b3VzbHk/CisgICAgICAgIHJ1bigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIs
ICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NK
SVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigi
d2FzbS1lYWdlciIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi0t
Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6
aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICItLXZlcmlmeUdDPXRydWUiLCAq
KEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVu
KCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNl
IiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAg
IHJ1bigid2FzbS1zbG93LW1lbW9yeSIsICItLXVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxz
ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAg
ICBydW4oIndhc20tYjMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fp
cj1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQor
ICAgICAgICBydW4oIndhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFu
ZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihGVExfT1BUSU9OUyAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1jb2xsZWN0
LWNvbnRpbnVvdXNseSIsICItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSIsICItLXZlcmlmeUdD
PXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkgaWYg
c2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KICAgICBlbmQKIGVuZAogCmRpZmYgLS1naXQgYS9K
U1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGNkMjdkM2ZhZWRhNjlj
ZDk0ZTMxY2JmMGE4MzExNzczMmY5ODhlYWUuLjk3NDY5MTAwZjMzZTIxMzBhMjgyOGEwNWM2M2Zi
ODhjZmViMTNkNmYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzM2IEBACisyMDIxLTEwLTA1ICBUYWRldSBaYWdhbGxvICA8
dHphZ2FsbG9AYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCB0aGUgV2ViQXNzZW1ibHkg
ZXhjZXB0aW9uIGhhbmRsaW5nIHByb3Bvc2FsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk2ODEKKyAgICAgICAgPHJkYXI6Ly84MTYwMzM4Nz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbmV3IHRl
c3RzIGZvciB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBpbXBvcnQgYSBzZXQgb2YgdGVzdHMg
dXNlZCBieSBWOCBpbnRvIHdhc20vdjguCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisgICAgICAg
ICogd2FzbS9CdWlsZGVyLmpzOgorICAgICAgICAoY29uc3QuX2ltcG9ydEV4Y2VwdGlvbkNvbnRp
bnVhdGlvbi50eXBlLkltcG9ydC5maWVsZCk6CisgICAgICAgIChleHBvcnQuZGVmYXVsdC5CdWls
ZGVyLnByb3RvdHlwZS5fcmVnaXN0ZXJTZWN0aW9uQnVpbGRlcnMuY29uc3Quc2VjdGlvbi5pbi5X
QVNNLmRlc2NyaXB0aW9uLnNlY3Rpb24uc3dpdGNoLnNlY3Rpb24uY2FzZS5zdHJpbmdfYXBwZWFy
ZWRfaGVyZS50aGlzLnNlY3Rpb24pOgorICAgICAgICAoY29uc3QuX2V4cG9ydEZ1bmN0aW9uQ29u
dGludWF0aW9uLnR5cGUuRXhwb3J0LmZpZWxkKTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0Ll9l
eHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9CdWls
ZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuSW1wb3J0
KToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkV4cG9ydCk6CisgICAgICAgIChjb25zdC5lbWl0
dGVycy5FeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vYXNzZXJ0LmpzOgorICAgICAgICAqIHdh
c20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanM6CisgICAgICAgIChJbXBvcnRCZWZvcmVU
eXBlU2VjdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vc3RyZXNzL2NhdGNoLXdpdGgt
ZGVsZWdhdGUuanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUu
Y2FsbGJhY2spOgorICAgICAgICAoYXNzZXJ0LnRocm93cyk6CisgICAgICAgICogd2FzbS9zdHJl
c3MvY3JlYXRlLXRhZy1mcm9tLmpzOiBBZGRlZC4KKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNl
cHRpb24tY3Jvc3MtaW5zdGFuY2UtMi5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAg
ICAgKGFzc2VydC5lcSk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWlu
c3RhbmNlLTMuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgIChhc3NlcnQuZXEp
OgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS5qczogQWRk
ZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGFzc2VydC50aHJvd3MpOgorICAgICAgICAo
aW5zdEIubmV3LldlYkFzc2VtYmx5Lkluc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9l
eGNlcHRpb24tbGl2ZW5lc3MtdGllci11cC5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVp
bGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJp
bmdfYXBwZWFyZWRfaGVyZS5jYXRjaCk6CisgICAgICAgIChhc3NlcnQuZXEuKToKKyAgICAgICAg
KGFzc2VydC5lcSk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLW11bHRpcGxlLWlu
c3RhbmNlcy5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19h
cHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5j
b25zdC5tb2R1bGUubmV3LldlYkFzc2VtYmx5Lk1vZHVsZSk6CisgICAgICAgIChpbXBvcnQuQnVp
bGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJp
bmdfYXBwZWFyZWRfaGVyZS5pbnN0LmV4cG9ydHMudGhyb3cpOgorICAgICAgICAqIHdhc20vc3Ry
ZXNzL2V4Y2VwdGlvbi1zaW1wbGUtZGVsZWdhdGUuanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0
LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20u
c3RyaW5nX2FwcGVhcmVkX2hlcmUudGVzdFNpbXBsZVRocm93RGVsZWdhdGUpOgorICAgICAgICAo
dGVzdFRocm93RGVsZWdhdGVTa2lwKToKKyAgICAgICAgKHRlc3REZWxlZ2F0ZUNhbGxlcik6Cisg
ICAgICAgICh0ZXN0U2ltcGxlRGVsZWdhdGVNZXJnZSk6CisgICAgICAgICogd2FzbS9zdHJlc3Mv
ZXhjZXB0aW9uLXNpbXBsZS10aHJvdy1jYXRjaC5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQu
QnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5z
dHJpbmdfYXBwZWFyZWRfaGVyZS50ZXN0U2ltcGxlVHJ5Q2F0Y2gpOgorICAgICAgICAodGVzdFNp
bXBsZVRyeUNhdGNoQWxsKToKKyAgICAgICAgKHRlc3RDYWxsVHJ5Q2F0Y2gpOgorICAgICAgICAo
dGVzdENhbGxUcnlDYXRjaEFsbCk6CisgICAgICAgICh0ZXN0U2ltcGxlVHJ5Q2F0Y2hWYWx1ZSk6
CisgICAgICAgICh0ZXN0Q2FsbFRyeUNhdGNoVmFsdWUpOgorICAgICAgICAodGVzdFN0YWNrVHJ5
Q2F0Y2gpOgorICAgICAgICAodGVzdExpdmVBZnRlclRyeUNhdGNoKToKKyAgICAgICAgKHRlc3RM
aXZlQWZ0ZXJUcnlDYXRjaEFsbCk6CisgICAgICAgICh0ZXN0VW5pZnlUcnlDYXRjaENhdGNoKToK
KyAgICAgICAgKHRlc3RVbmlmeVRyeUNhdGNoQ2F0Y2hBbGwpOgorICAgICAgICAodGVzdFVuaWZ5
VHJ5Tm9UaHJvdyk6CisgICAgICAgICh0ZXN0VW5pZnlUcnlOb0NhdGNoKToKKyAgICAgICAgKHRl
c3ROZXN0ZWRDYXRjaCk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1m
cm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwtcmV0aHJvdy5qczogQWRkZWQuCisgICAgICAgIChpbXBv
cnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJv
bS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5jYWxsYmFjayk6CisgICAgICAgICogd2FzbS9zdHJlc3Mv
ZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwuanM6IEFkZGVkLgorICAg
ICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMu
YXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2FsbGJhY2spOgorICAgICAgICAqIHdh
c20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLmpzOiBBZGRlZC4KKyAg
ICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFz
LmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKiB3
YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLW91dC1vZi13YXNtLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLW92ZXItd2FzbS5qczogQWRkZWQuCisg
ICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5h
cy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5jYWxsYmFjayk6CisgICAgICAgICog
d2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRyYXAuanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1
aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3Ry
aW5nX2FwcGVhcmVkX2hlcmUudGVzdENhbm5vdENhdGNoVW5yZWFjaGFibGUpOgorICAgICAgICAo
dGVzdENhbm5vdENhdGNoT09CKToKKyAgICAgICAgKHRlc3RXYXNtQVBJVGhyb3cpOgorICAgICAg
ICAodGVzdEpTQ2F0Y2hBbmRSZXRocm93KToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9yZXRocm93
LWZyb20tY2F0Y2gtdG8tY2F0Y2guanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIu
ZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2Fw
cGVhcmVkX2hlcmUuY2FsbGJhY2spOgorICAgICAgICAqIHdhc20vc3RyZXNzL3JldGhyb3ctdG8t
Y2F0Y2guanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBw
ZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2Fs
bGJhY2spOgorICAgICAgICAoYXNzZXJ0LnRocm93cy5jYWxsYmFjayk6CisgICAgICAgIChhc3Nl
cnQudGhyb3dzKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9yZXRocm93LXRvLWRlbGVnYXRlLXRv
LWNhdGNoLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2Fw
cGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlKToK
KyAgICAgICAgKGFzc2VydC5lcS5leG4uZ2V0QXJnKToKKyAgICAgICAgKGFzc2VydC50aHJvd3Mp
OgorICAgICAgICAoYXNzZXJ0LnRocm93cy5jYWxsYmFjayk6CisgICAgICAgIChhc3NlcnQuZXEp
OgorICAgICAgICAqIHdhc20vc3RyZXNzL3NpbXBsZS1leHBvcnQtZXhjZXB0aW9uLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiB3YXNtL3Y4L0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIHdhc20vdjgv
ZXhjZXB0aW9ucy1hcGkuanM6IEFkZGVkLgorICAgICAgICAoVGVzdEltcG9ydCk6CisgICAgICAg
IChUZXN0SW1wb3J0RXhwb3J0KToKKyAgICAgICAgKFRlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcik6
CisgICAgICAgIChUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JXaXRoUGF5bG9hZCk6CisgICAgICAg
IChUZXN0Q2F0Y2hKU0V4Y2VwdGlvbi5qc19mdW5jKToKKyAgICAgICAgKGpzX2Z1bmMpOgorICAg
ICAgICAoVGVzdENhdGNoSlMpOgorICAgICAgICAoVGVzdENhdGNoSlNFeGNlcHRpb25XaXRoUGF5
bG9hZCk6CisgICAgICAgIChUZXN0R2V0QXJnKToKKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlv
bnMtZXhwb3J0LmpzOiBBZGRlZC4KKyAgICAgICAgKFRlc3RFeHBvcnRNdWx0aXBsZSk6CisgICAg
ICAgIChUZXN0RXhwb3J0T3V0T2ZCb3VuZHMpOgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9u
cy1leHRlcm5yZWYuanM6IEFkZGVkLgorICAgICAgICAoVGVzdFRocm93UmVmTnVsbCk6CisgICAg
ICAgIChUZXN0VGhyb3dSZWZQYXJhbSk6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLWlt
cG9ydC5qczogQWRkZWQuCisgICAgICAgIChOZXdFeHBvcnRlZFRhZyk6CisgICAgICAgIChUZXN0
SW1wb3J0U2ltcGxlKToKKyAgICAgICAgKFRlc3RJbXBvcnRNaXNzaW5nKToKKyAgICAgICAgKiB3
YXNtL3Y4L2V4Y2VwdGlvbnMtcmV0aHJvdy5qczogQWRkZWQuCisgICAgICAgIChUZXN0UmV0aHJv
d0luQ2F0Y2gpOgorICAgICAgICAoVGVzdFJldGhyb3dJbkNhdGNoQWxsKToKKyAgICAgICAgKFRl
c3RSZXRocm93TmVzdGVkKToKKyAgICAgICAgKFRlc3RSZXRocm93UmVjYXRjaCk6CisgICAgICAg
ICogd2FzbS92OC9leGNlcHRpb25zLXNoYXJlZC5qczogQWRkZWQuCisgICAgICAgIChOZXdFeHBv
cnRlZEV4Y2VwdGlvbik6CisgICAgICAgIChUZXN0U2luZ2xlSW5zdGFuY2UubGV0Lmluc3RhbmNl
LmJ1aWxkZXIuaW5zdGFudGlhdGUuKToKKyAgICAgICAgKFRlc3RTaW5nbGVJbnN0YW5jZSk6Cisg
ICAgICAgIChUZXN0TXVsdGlJbnN0YW5jZU5vblNoYXJlZC5sZXQuaW5zdGFuY2UyLmJ1aWxkZXIu
aW5zdGFudGlhdGUuKToKKyAgICAgICAgKFRlc3RNdWx0aUluc3RhbmNlU2hhcmVkLmxldC5pbnN0
YW5jZTIuYnVpbGRlci5pbnN0YW50aWF0ZS4pOgorICAgICAgICAoVGVzdE11bHRpTW9kdWxlU2hh
cmVkLmxldC5pbnN0YW5jZTIuYnVpbGRlcjIuaW5zdGFudGlhdGUuKToKKyAgICAgICAgKiB3YXNt
L3Y4L2V4Y2VwdGlvbnMtdHlwZS1yZWZsZWN0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKFRlc3RF
eHBvcnQpOgorICAgICAgICAoVGVzdEltcG9ydEV4cG9ydCk6CisgICAgICAgICogd2FzbS92OC9l
eGNlcHRpb25zLXV0aWxzLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydFdhc21UaHJvd3MpOgor
ICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy5qczogQWRkZWQuCisgICAgICAgIChUZXN0VGhy
b3dTaW1wbGUpOgorICAgICAgICAoVGVzdENhdGNoU2ltcGxlKToKKyAgICAgICAgKFRlc3RUcmFw
Tm90Q2F1Z2h0KToKKyAgICAgICAgKFRlc3RUcmFwVmlhSlNOb3RDYXVnaHQuanNfaW1wb3J0KToK
KyAgICAgICAgKFRlc3RNYW51YWxseVRocm93blJ1bnRpbWVFcnJvckNhdWdodC50aHJvd19leGMp
OgorICAgICAgICAoVGVzdE1hbnVhbGx5VGhyb3duUnVudGltZUVycm9yQ2F1Z2h0KToKKyAgICAg
ICAgKFRlc3RFeG5XaXRoV2FzbVByb3RvTm90Q2F1Z2h0LmpzX2ltcG9ydCk6CisgICAgICAgIChU
ZXN0RXhuV2l0aFdhc21Qcm90b05vdENhdWdodCk6CisgICAgICAgIChUZXN0U3RhY2tPdmVyZmxv
d05vdENhdWdodC5zdGFja19vdmVyZmxvdyk6CisgICAgICAgIChUZXN0U3RhY2tPdmVyZmxvd05v
dENhdWdodCk6CisgICAgICAgIChUZXN0VGhyb3dQYXJhbUkpOgorICAgICAgICAoVGVzdFRocm93
UGFyYW1GKToKKyAgICAgICAgKFRlc3RUaHJvd1BhcmFtTCk6CisgICAgICAgIChUZXN0VGhyb3dQ
YXJhbUQpOgorICAgICAgICAoVGVzdENhdGNoQ3Jvc3NGdW5jdGlvbnMudGhyb3dfdmFsdWUpOgor
ICAgICAgICAoVGVzdENhdGNoQ3Jvc3NGdW5jdGlvbnMudGhyb3dfc3RyaW5nKToKKyAgICAgICAg
KFRlc3RDYXRjaENyb3NzRnVuY3Rpb25zLnRocm93X3VuZGVmaW5lZCk6CisgICAgICAgIChUZXN0
Q2F0Y2hDcm9zc0Z1bmN0aW9ucy50aHJvd19mcCk6CisgICAgICAgIChUZXN0Q2F0Y2hDcm9zc0Z1
bmN0aW9ucy50aHJvd19sYXJnZSk6CisgICAgICAgIChUZXN0RGVsZWdhdGVOb1Rocm93KToKKyAg
ICAgICAgKFRlc3REZWxlZ2F0ZVRocm93KToKKyAgICAgICAgKFRlc3REZWxlZ2F0ZVRocm93Tm9D
YXRjaCk6CisgICAgICAgIChUZXN0RGVsZWdhdGVNZXJnZSk6CisgICAgICAgIChUZXN0RGVsZWdh
dGUxKToKKyAgICAgICAgKFRlc3REZWxlZ2F0ZVVucmVhY2hhYmxlKToKKyAgICAgICAgKFRlc3RE
ZWxlZ2F0ZVRvQ2FsbGVyKToKKyAgICAgICAgKFRlc3RVbnJlYWNoYWJsZUluQ2F0Y2hBbGwpOgor
ICAgICAgICAoVGVzdFRocm93V2l0aExvY2FsKToKKyAgICAgICAgKFRlc3RDYXRjaGxlc3NUcnkp
OgorICAgICAgICAqIHdhc20vdjgvbWpzdW5pdC5qczogQWRkZWQuCisgICAgICAgIChNanNVbml0
QXNzZXJ0aW9uRXJyb3IpOgorICAgICAgICAoTWpzVW5pdEFzc2VydGlvbkVycm9yLnByb3RvdHlw
ZS50b1N0cmluZyk6CisgICAgICAgIChjYXRjaCk6CisgICAgICAgIChjbGFzc09mKToKKyAgICAg
ICAgKFZhbHVlT2YpOgorICAgICAgICAocHJldHR5UHJpbnRlZCk6CisgICAgICAgIChwcmV0dHlQ
cmludGVkQXJyYXlFbGVtZW50KToKKyAgICAgICAgKGZhaWxXaXRoTWVzc2FnZSk6CisgICAgICAg
IChmb3JtYXRGYWlsdXJlVGV4dCk6CisgICAgICAgIChmYWlsKToKKyAgICAgICAgKGRlZXBPYmpl
Y3RFcXVhbHMpOgorICAgICAgICAoZGVlcEVxdWFscyk6CisgICAgICAgIChhc3NlcnRTYW1lKToK
KyAgICAgICAgKGFzc2VydE5vdFNhbWUpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzKToKKyAgICAg
ICAgKGFzc2VydE5vdEVxdWFscyk6CisgICAgICAgIChhc3NlcnRFcXVhbHNEZWx0YSk6CisgICAg
ICAgIChhc3NlcnRBcnJheUVxdWFscyk6CisgICAgICAgIChhc3NlcnRQcm9wZXJ0aWVzRXF1YWwp
OgorICAgICAgICAoYXNzZXJ0VG9TdHJpbmdFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0VHJ1ZSk6
CisgICAgICAgIChhc3NlcnRGYWxzZSk6CisgICAgICAgIChhc3NlcnROdWxsKToKKyAgICAgICAg
KGFzc2VydE5vdE51bGwpOgorICAgICAgICAoZXhlY3V0ZUNvZGUpOgorICAgICAgICAoY2hlY2tF
eGNlcHRpb24pOgorICAgICAgICAoYXNzZXJ0VGhyb3dzKToKKyAgICAgICAgKGFzc2VydFRocm93
c0VxdWFscyk6CisgICAgICAgIChhc3NlcnRUaHJvd3NBc3luYyk6CisgICAgICAgIChhc3NlcnRJ
bnN0YW5jZW9mKToKKyAgICAgICAgKGFzc2VydERvZXNOb3RUaHJvdyk6CisgICAgICAgIChhc3Nl
cnRVbnJlYWNoYWJsZSk6CisgICAgICAgIChhc3NlcnRDb250YWlucyk6CisgICAgICAgIChhc3Nl
cnRNYXRjaGVzKToKKyAgICAgICAgKGNvbmNhdGVuYXRlRXJyb3JzKToKKyAgICAgICAgKGFzc2Vy
dFByb21pc2VSZXN1bHQpOgorICAgICAgICAoT3B0aW1pemF0aW9uU3RhdHVzKToKKyAgICAgICAg
KGFzc2VydFVub3B0aW1pemVkKToKKyAgICAgICAgKGFzc2VydE9wdGltaXplZCk6CisgICAgICAg
IChpc05ldmVyT3B0aW1pemVMaXRlTW9kZSk6CisgICAgICAgIChpc05ldmVyT3B0aW1pemUpOgor
ICAgICAgICAoaXNBbHdheXNPcHRpbWl6ZSk6CisgICAgICAgIChpc0ludGVycHJldGVkKToKKyAg
ICAgICAgKGlzQmFzZWxpbmUpOgorICAgICAgICAoaXNVbm9wdGltaXplZCk6CisgICAgICAgIChp
c09wdGltaXplZCk6CisgICAgICAgIChpc1R1cmJvRmFubmVkKToKKyAgICAgICAgKE1qc1VuaXRB
c3NlcnRpb25FcnJvci5wcmVwYXJlU3RhY2tUcmFjZSk6CisgICAgICAgICogd2FzbS92OC93YXNt
LW1vZHVsZS1idWlsZGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGJ5dGVzKToKKyAgICAgICAgKHdh
c21PcHRSZWZUeXBlKToKKyAgICAgICAgKHdhc21SZWZUeXBlKToKKyAgICAgICAgKHdhc21SdHQp
OgorICAgICAgICAod2FzbVJ0dE5vRGVwdGgpOgorICAgICAgICAobWFrZVNpZyk6CisgICAgICAg
IChtYWtlU2lnX3ZfeCk6CisgICAgICAgIChtYWtlU2lnX3hfdik6CisgICAgICAgIChtYWtlU2ln
X3ZfeHgpOgorICAgICAgICAobWFrZVNpZ19yX3YpOgorICAgICAgICAobWFrZVNpZ19yX3gpOgor
ICAgICAgICAobWFrZVNpZ19yX3h4KToKKyAgICAgICAgKGRlZmluZVdhc21PcGNvZGUpOgorICAg
ICAgICAoYXNzZXJ0VHJhcHMpOgorICAgICAgICAoQmluYXJ5KToKKyAgICAgICAgKEJpbmFyeS5w
cm90b3R5cGUuZW5zdXJlX3NwYWNlKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUudHJ1bmNf
YnVmZmVyKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoQmlu
YXJ5LnByb3RvdHlwZS5lbWl0X3U4KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF91
MTYpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X3UzMik6CisgICAgICAgIChCaW5h
cnkucHJvdG90eXBlLmVtaXRfbGViX3UpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0
X3UzMnYpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X3U2NHYpOgorICAgICAgICAo
QmluYXJ5LnByb3RvdHlwZS5lbWl0X2J5dGVzKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUu
ZW1pdF9zdHJpbmcpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2hlYXBfdHlwZSk6
CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfdHlwZSk6CisgICAgICAgIChCaW5hcnku
cHJvdG90eXBlLmVtaXRfaW5pdF9leHByX3JlY3Vyc2l2ZSk6CisgICAgICAgIChCaW5hcnkucHJv
dG90eXBlLmVtaXRfaW5pdF9leHByKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF9o
ZWFkZXIpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X3NlY3Rpb24pOgorICAgICAg
ICAoV2FzbUZ1bmN0aW9uQnVpbGRlcik6CisgICAgICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyLnBy
b3RvdHlwZS5udW1Mb2NhbE5hbWVzKToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJv
dG90eXBlLmV4cG9ydEFzKToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBl
LmV4cG9ydEZ1bmMpOgorICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuc2V0
Q29tcGlsYXRpb25IaW50KToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBl
LmFkZEJvZHkpOgorICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuYWRkQm9k
eVdpdGhFbmQpOgorICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuZ2V0TnVt
TG9jYWxzKToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLmFkZExvY2Fs
cyk6CisgICAgICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5lbmQpOgorICAgICAg
ICAoV2FzbUluaXRFeHByLkkzMkNvbnN0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5JNjRDb25z
dCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuRjMyQ29uc3QpOgorICAgICAgICAoV2FzbUluaXRF
eHByLkY2NENvbnN0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5TMTI4Q29uc3QpOgorICAgICAg
ICAoV2FzbUluaXRFeHByLkdsb2JhbEdldCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuUmVmRnVu
Yyk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuUmVmTnVsbCk6CisgICAgICAgIChXYXNtSW5pdEV4
cHIuU3RydWN0TmV3V2l0aFJ0dCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuU3RydWN0TmV3KToK
KyAgICAgICAgKFdhc21Jbml0RXhwci5TdHJ1Y3ROZXdEZWZhdWx0V2l0aFJ0dCk6CisgICAgICAg
IChXYXNtSW5pdEV4cHIuU3RydWN0TmV3RGVmYXVsdCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIu
QXJyYXlJbml0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5BcnJheUluaXRTdGF0aWMpOgorICAg
ICAgICAoV2FzbUluaXRFeHByLlJ0dENhbm9uKToKKyAgICAgICAgKFdhc21Jbml0RXhwci5SdHRT
dWIpOgorICAgICAgICAoV2FzbUluaXRFeHByLlJ0dEZyZXNoU3ViKToKKyAgICAgICAgKFdhc21J
bml0RXhwci5kZWZhdWx0Rm9yKToKKyAgICAgICAgKFdhc21Jbml0RXhwcik6CisgICAgICAgIChX
YXNtR2xvYmFsQnVpbGRlcik6CisgICAgICAgIChXYXNtR2xvYmFsQnVpbGRlci5wcm90b3R5cGUu
ZXhwb3J0QXMpOgorICAgICAgICAoV2FzbVRhYmxlQnVpbGRlcik6CisgICAgICAgIChXYXNtVGFi
bGVCdWlsZGVyLnByb3RvdHlwZS5leHBvcnRBcyk6CisgICAgICAgIChtYWtlRmllbGQpOgorICAg
ICAgICAoV2FzbVN0cnVjdCk6CisgICAgICAgIChXYXNtU3RydWN0U3VidHlwZSk6CisgICAgICAg
IChXYXNtQXJyYXkpOgorICAgICAgICAoV2FzbUFycmF5U3VidHlwZSk6CisgICAgICAgIChXYXNt
RWxlbVNlZ21lbnQpOgorICAgICAgICAoV2FzbUVsZW1TZWdtZW50LnByb3RvdHlwZS5pc19hY3Rp
dmUpOgorICAgICAgICAoV2FzbUVsZW1TZWdtZW50LnByb3RvdHlwZS5pc19wYXNzaXZlKToKKyAg
ICAgICAgKFdhc21FbGVtU2VnbWVudC5wcm90b3R5cGUuaXNfZGVjbGFyYXRpdmUpOgorICAgICAg
ICAoV2FzbUVsZW1TZWdtZW50LnByb3RvdHlwZS5leHByZXNzaW9uc19hc19lbGVtZW50cyk6Cisg
ICAgICAgIChXYXNtTW9kdWxlQnVpbGRlcik6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5w
cm90b3R5cGUuYWRkU3RhcnQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBl
LmFkZE1lbW9yeSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkTWVt
b3J5NjQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEV4cGxpY2l0
U2VjdGlvbik6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuc3RyaW5nVG9C
eXRlcyk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuY3JlYXRlQ3VzdG9t
U2VjdGlvbik6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkQ3VzdG9t
U2VjdGlvbik6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkVHlwZSk6
CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkU3RydWN0KToKKyAgICAg
ICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRTdHJ1Y3RTdWJ0eXBlKToKKyAgICAg
ICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRBcnJheSk6CisgICAgICAgIChXYXNt
TW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkQXJyYXlTdWJ0eXBlKToKKyAgICAgICAgKFdhc21N
b2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRHbG9iYWwpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1
aWxkZXIucHJvdG90eXBlLmFkZFRhYmxlKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnBy
b3RvdHlwZS5hZGRUYWcpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFk
ZEZ1bmN0aW9uKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRJbXBv
cnQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEltcG9ydGVkR2xv
YmFsKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRJbXBvcnRlZE1l
bW9yeSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkSW1wb3J0ZWRU
YWJsZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkSW1wb3J0ZWRU
YWcpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEV4cG9ydCk6Cisg
ICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkRXhwb3J0T2ZLaW5kKToKKyAg
ICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5zZXRDb21waWxhdGlvbkhpbnQpOgor
ICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZERhdGFTZWdtZW50KToKKyAg
ICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRQYXNzaXZlRGF0YVNlZ21lbnQp
OgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmV4cG9ydE1lbW9yeUFzKToK
KyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRBY3RpdmVFbGVtZW50U2Vn
bWVudCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkUGFzc2l2ZUVs
ZW1lbnRTZWdtZW50KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRE
ZWNsYXJhdGl2ZUVsZW1lbnRTZWdtZW50KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnBy
b3RvdHlwZS5hcHBlbmRUb1RhYmxlKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3Rv
dHlwZS5zZXRUYWJsZUJvdW5kcyk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5
cGUuc2V0TmFtZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUudG9CdWZm
ZXIpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLnRvQXJyYXkpOgorICAg
ICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmluc3RhbnRpYXRlKToKKyAgICAgICAg
KFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hc3luY0luc3RhbnRpYXRlKToKKyAgICAgICAg
KFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS50b01vZHVsZSk6CisgICAgICAgICh3YXNtU2ln
bmVkTGViKToKKyAgICAgICAgKHdhc21VbnNpZ25lZExlYik6CisgICAgICAgICh3YXNtSTMyQ29u
c3QpOgorICAgICAgICAod2FzbUk2NENvbnN0KToKKyAgICAgICAgKHdhc21GMzJDb25zdCk6Cisg
ICAgICAgICh3YXNtRjY0Q29uc3QpOgorICAgICAgICAod2FzbVMxMjhDb25zdCk6CisgICAgICAg
IChnZXRPcGNvZGVOYW1lKToKKyAgICAgICAgKiB3YXNtL3dhc20uanNvbjoKKwogMjAyMS0xMC0w
NSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBEb24ndCBwYXNz
IERvbnRCdWlsZFN0cmluZ3MgdG8gbmV4dCB0b2tlbiBhZnRlciBwYXJzaW5nIGFuIGVtcHR5IHBh
cmFtZXRlciBsaXN0CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20ueWFtbCBiL0pTVGVzdHMvd2Fz
bS55YW1sCmluZGV4IDJlY2I2MzRkYmY1YjJiZWU3MmNkZDEzYzQwMTc5YmYyZjVlOTRiYzEuLjFm
NDUxYmM5MTE4Y2NhYzMzOTg5NzBlYTQ5YjI1ODljYWYzM2NjMjcgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvd2FzbS55YW1sCisrKyBiL0pTVGVzdHMvd2FzbS55YW1sCkBAIC00NSw2ICs0NSw4IEBACiAg
IGNtZDogcnVuV2ViQXNzZW1ibHkgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2Fz
bS9zZWxmLXRlc3QvCiAgIGNtZDogcnVuV2ViQXNzZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VSdW5D
b21tYW5kcworLSBwYXRoOiB3YXNtL3Y4LworICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUoOm5v
X21vZHVsZSwgIm1qc3VuaXQuanMiKSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogCiAtIHBhdGg6
IHdhc20vcmVmZXJlbmNlcy1zcGVjLXRlc3RzL2VsZW0ud2FzdC5qcwogICBjbWQ6IHJ1bldlYkFz
c2VtYmx5UmVmZXJlbmNlU3BlY1Rlc3QgOm5vcm1hbApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L0J1aWxkZXIuanMgYi9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcwppbmRleCAzMmZmZTZiYmI1NjFh
NTMzMzg1N2VkMjMxYjA0N2E3ZjJhZmJmMTE1Li4xMTAxZjcyNWNjZGRiMGNjMWU4OWEwNWM3YWRk
N2JiNDlkMmY1OTdjIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcworKysgYi9K
U1Rlc3RzL3dhc20vQnVpbGRlci5qcwpAQCAtMTI4LDYgKzEyOCwxOCBAQCBjb25zdCBfaW1wb3J0
VGFibGVDb250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsK
ICAgICB9OwogfTsKIAorY29uc3QgX2ltcG9ydEV4Y2VwdGlvbkNvbnRpbnVhdGlvbiA9IChidWls
ZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4geworICAgIHJldHVybiAobW9kdWxlLCBmaWVs
ZCwgdHlwZSkgPT4geworICAgICAgICBhc3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1wb3J0IGZ1
bmN0aW9uIG1vZHVsZSBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOworICAg
ICAgICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBJbXBvcnQgZnVuY3Rpb24gZmllbGQgc2hvdWxk
IGJlIGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOworICAgICAgICBjb25zdCB0eXBlU2VjdGlv
biA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIlR5cGUiKTsKKyAgICAgICAgdHlwZSA9IF9tYXliZVJl
Z2lzdGVyVHlwZShidWlsZGVyLCB0eXBlKTsKKyAgICAgICAgY29uc3QgdGFnID0gMDsKKyAgICAg
ICAgc2VjdGlvbi5kYXRhLnB1c2goeyBmaWVsZCwgdHlwZSwgdGFnLCBraW5kOiAiRXhjZXB0aW9u
IiwgbW9kdWxlIH0pOworICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihuZXh0
QnVpbGRlcik7CisgICAgfQorfTsKKwogY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9u
ID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CiAgICAgcmV0dXJuIChmaWVs
ZCwgaW5kZXgsIHR5cGUpID0+IHsKICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKGZpZWxkLCBgRXhw
b3J0IGZ1bmN0aW9uIGZpZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsK
QEAgLTIxNSw2ICsyMjcsMTQgQEAgY29uc3QgX2V4cG9ydFRhYmxlQ29udGludWF0aW9uID0gKGJ1
aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CiAgICAgfQogfTsKIAorY29uc3QgX2V4
cG9ydEV4Y2VwdGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRl
cikgPT4geworICAgIHJldHVybiAoZmllbGQsIGluZGV4KSA9PiB7CisgICAgICAgIGFzc2VydC5p
c051bWJlcihpbmRleCwgYEV4Y2VwdGlvbiBleHBvcnRzIG9ubHkgc3VwcG9ydCBudW1iZXIgaW5k
aWNlc2ApOworICAgICAgICBzZWN0aW9uLmRhdGEucHVzaCh7ZmllbGQsIGtpbmQ6ICJFeGNlcHRp
b24iLCBpbmRleH0pOworICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihuZXh0
QnVpbGRlcik7CisgICAgfQorfTsKKwogY29uc3QgX2ltcG9ydEdsb2JhbENvbnRpbnVhdGlvbiA9
IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewogICAgIHJldHVybiAoKSA9PiB7
CiAgICAgICAgIGNvbnN0IGdsb2JhbEJ1aWxkZXIgPSB7CkBAIC0zMDcsNiArMzI3LDcgQEAgY29u
c3QgX2NoZWNrSW1tcyA9IChvcCwgaW1tcywgZXhwZWN0ZWRJbW1zLCByZXQpID0+IHsKICAgICAg
ICAgY2FzZSAidGFyZ2V0X3RhYmxlIjogYnJlYWs7IC8vIGltcHJvdmUgY2hlY2tpbmcgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzQyMQogICAgICAgICBjYXNlICJy
ZXNlcnZlZCI6IGJyZWFrOyAvLyBpbXByb3ZlIGNoZWNraW5nIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM0MjEKICAgICAgICAgY2FzZSAidGFibGVfaW5kZXgiOiBi
cmVhazsgLy8gaW1wcm92ZSBjaGVja2luZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYzNDIxCisgICAgICAgIGNhc2UgImV4biI6IGJyZWFrOwogICAgICAgICBjYXNl
ICJyZWZ0eXBlIjoKICAgICAgICAgICAgIGFzc2VydC50cnV0aHkoV0FTTS5pc1ZhbGlkUmVmVHlw
ZShpbW1zW2lkeF0pLCBgSW52YWxpZCByZWYgdHlwZSBvbiAke29wfTogIiR7aW1tc1tpZHhdfSJg
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzM1LDExICszNTYsMTMgQEAgY29uc3QgX2NyZWF0
ZUZ1bmN0aW9uQnVpbGRlciA9IChmdW5jLCBidWlsZGVyLCBwcmV2aW91c0J1aWxkZXIpID0+IHsK
ICAgICAgICAgICAgICAgICBuZXh0QnVpbGRlciA9IGZ1bmN0aW9uQnVpbGRlcjsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgIkVuZCI6CisgICAgICAgICAgICBjYXNl
ICJEZWxlZ2F0ZSI6CiAgICAgICAgICAgICAgICAgbmV4dEJ1aWxkZXIgPSBwcmV2aW91c0J1aWxk
ZXI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICJCbG9jayI6CiAg
ICAgICAgICAgICBjYXNlICJMb29wIjoKICAgICAgICAgICAgIGNhc2UgIklmIjoKKyAgICAgICAg
ICAgIGNhc2UgIlRyeSI6CiAgICAgICAgICAgICAgICAgbmV4dEJ1aWxkZXIgPSBfY3JlYXRlRnVu
Y3Rpb25CdWlsZGVyKGZ1bmMsIGJ1aWxkZXIsIGZ1bmN0aW9uQnVpbGRlcik7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00ODgsNiArNTExLDcgQEAgZXhwb3J0IGRl
ZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIu
RnVuY3Rpb24gPSBfaW1wb3J0RnVuY3Rpb25Db250aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVp
bGRlcik7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuTWVtb3J5ID0gX2ltcG9y
dE1lbW9yeUNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVyKTsKICAgICAgICAgICAg
ICAgICAgICAgaW1wb3J0QnVpbGRlci5UYWJsZSA9IF9pbXBvcnRUYWJsZUNvbnRpbnVhdGlvbih0
aGlzLCBzLCBpbXBvcnRCdWlsZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRl
ci5FeGNlcHRpb24gPSBfaW1wb3J0RXhjZXB0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGltcG9y
dEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94
eUZvcihpbXBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtNTMxLDYgKzU1NSwyMyBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVy
IHsKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAg
ICAgICBjYXNlICJFeGNlcHRpb24iOiB7CisgICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5fYWRkU2Vj
dGlvbihzZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YUJ1aWxkZXIgPSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IHRoaXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICBTaWduYXR1cmU6IChzaWduYXR1cmUpID0+IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsZXQgdHlwZSA9IF9tYXliZVJlZ2lzdGVyVHlwZSh0aGlzLCBzaWduYXR1cmUp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YS5wdXNoKHsgdGFnOiAwLCB0eXBl
IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1By
b3h5Rm9yKGRhdGFCdWlsZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhZGQgdGFncyB3aXRoIG5vbi16ZXJvIHZhbHVlIHRo
ZW4gd2UgY2FuIGFkZCBhIG5ldyBtZW1iZXIuCisgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKGRhdGFCdWlsZGVy
KTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICBjYXNlICJHbG9iYWwiOgogICAgICAgICAgICAgICAgIHRoaXNb
c2VjdGlvbl0gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRo
aXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7CkBAIC01NjksNiArNjEwLDcgQEAgZXhwb3J0IGRlZmF1
bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuRnVu
Y3Rpb24gPSBfZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24odGhpcywgcywgZXhwb3J0QnVpbGRl
cik7CiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuTWVtb3J5ID0gX2V4cG9ydE1l
bW9yeUNvbnRpbnVhdGlvbih0aGlzLCBzLCBleHBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAg
ICAgICAgZXhwb3J0QnVpbGRlci5UYWJsZSA9IF9leHBvcnRUYWJsZUNvbnRpbnVhdGlvbih0aGlz
LCBzLCBleHBvcnRCdWlsZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgZXhwb3J0QnVpbGRlci5F
eGNlcHRpb24gPSBfZXhwb3J0RXhjZXB0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGV4cG9ydEJ1
aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZv
cihleHBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNzM3LDE1ICs3NzksNiBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsK
ICAgICAgICAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLl9zZWN0aW9ucykKICAgICAgICAgICAg
ICAgICBpZiAobnVtYmVyICE9PSBfdW5rbm93blNlY3Rpb25JZCkKICAgICAgICAgICAgICAgICAg
ICAgYXNzZXJ0LmZhbHN5KHMubmFtZSA9PT0gbmFtZSAmJiBzLmlkID09PSBudW1iZXIsIGBDYW5u
b3QgaGF2ZSB0d28gc2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lICIke25hbWV9IiBhbmQgSUQg
JHtudW1iZXJ9YCk7Ci0gICAgICAgICAgICAvLyBDaGVjayBvcmRlcmluZy4KLSAgICAgICAgICAg
IGlmICgobnVtYmVyICE9PSBfdW5rbm93blNlY3Rpb25JZCkgJiYgKHRoaXMuX3NlY3Rpb25zLmxl
bmd0aCAhPT0gMCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fc2VjdGlv
bnMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX3NlY3Rpb25zW2ldLmlkID09PSBfdW5rbm93blNlY3Rpb25JZCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQubGUodGhpcy5f
c2VjdGlvbnNbaV0uaWQsIG51bWJlciwgYEJhZCBzZWN0aW9uIG9yZGVyaW5nOiAiJHt0aGlzLl9z
ZWN0aW9uc1tpXS5uYW1lfSIgY2Fubm90IHByZWNlZGUgIiR7bmFtZX0iYCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBjb25zdCBzID0gT2JqZWN0LmFzc2lnbih7IG5hbWU6IG5hbWUsIGlkOiBu
dW1iZXIsIGRhdGE6IFtdIH0sIGV4dHJhT2JqZWN0IHx8IHt9KTsKICAgICAgICAgdGhpcy5fc2Vj
dGlvbnMucHVzaChzKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2Vt
Ymx5QmluYXJ5LmpzIGIvSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMK
aW5kZXggMzU4YmI0ODJkNGUwNzMyNmEyMGU1ODkzNGU1NTI5MmJiNTUxNjM3MC4uZTljNTc2MjYw
ZjVkMmU1YjY3ZmFlOGEzZGI1MGU2Yzc0MTY4ODgxNyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNt
L0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMKKysrIGIvSlNUZXN0cy93YXNtL0J1aWxkZXJf
V2ViQXNzZW1ibHlCaW5hcnkuanMKQEAgLTE0Myw2ICsxNDMsMTAgQEAgY29uc3QgZW1pdHRlcnMg
PSB7CiAgICAgICAgICAgICBjYXNlICJHbG9iYWwiOgogICAgICAgICAgICAgICAgIHB1dEdsb2Jh
bFR5cGUoYmluLCBlbnRyeS5nbG9iYWxEZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlICJFeGNlcHRpb24iOgorICAgICAgICAgICAgICAgIHB1dChi
aW4sICJ2YXJ1aW50MzIiLCBlbnRyeS50YWcpOworICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2
YXJ1aW50MzIiLCBlbnRyeS50eXBlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0sCkBAIC0xODUsNiArMTg5LDcgQEAgY29uc3QgZW1pdHRl
cnMgPSB7CiAgICAgICAgICAgICBjYXNlICJGdW5jdGlvbiI6CiAgICAgICAgICAgICBjYXNlICJN
ZW1vcnkiOgogICAgICAgICAgICAgY2FzZSAiVGFibGUiOgorICAgICAgICAgICAgY2FzZSAiRXhj
ZXB0aW9uIjoKICAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZW50cnkuaW5k
ZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cg
bmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtOiB1bmV4cGVjdGVkIGtpbmQgJHtlbnRy
eS5raW5kfWApOwpAQCAtMjU0LDYgKzI1OSwxNCBAQCBjb25zdCBlbWl0dGVycyA9IHsKICAgICAg
ICAgICAgICAgICBwdXQoYmluLCAidWludDgiLCBieXRlKTsKICAgICAgICAgfQogICAgIH0sCisK
KyAgICBFeGNlcHRpb246IChzZWN0aW9uLCBiaW4pID0+IHsKKyAgICAgICAgcHV0KGJpbiwgInZh
cnVpbnQzMiIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0IGV4biBv
ZiBzZWN0aW9uLmRhdGEpIHsKKyAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBleG4u
dGFnKTsKKyAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBleG4udHlwZSk7CisgICAg
ICAgIH0KKyAgICB9LAogfTsKIAogZXhwb3J0IGNvbnN0IEJpbmFyeSA9IChwcmVhbWJsZSwgc2Vj
dGlvbnMpID0+IHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9hc3NlcnQuanMgYi9KU1Rlc3Rz
L3dhc20vYXNzZXJ0LmpzCmluZGV4IDZmZGI2NWE0ZGFkZGMwZDc3YTcyNGMwMTkyZDhmYjUzYmYx
MGJmNjguLjk0ODM4ZDk3ZWY1NTBmNjFmZDIzODZjM2YyYWJkOGVmOTIzNmU0MDIgMTAwNjQ0Ci0t
LSBhL0pTVGVzdHMvd2FzbS9hc3NlcnQuanMKKysrIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwpA
QCAtMTI0LDcgKzEyNCw3IEBAIGNvbnN0IF90aHJvd3MgPSAoZnVuYywgdHlwZSwgbWVzc2FnZSwg
Li4uYXJncykgPT4gewogICAgIHRyeSB7CiAgICAgICAgIGZ1bmMoLi4uYXJncyk7CiAgICAgfSBj
YXRjaCAoZSkgewotICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIHR5cGUgJiYgZS5tZXNzYWdlLmlu
ZGV4T2YobWVzc2FnZSkgPj0gMCkKKyAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiB0eXBlICYmICh0
eXBlb2YoZS5tZXNzYWdlKSA9PSAidW5kZWZpbmVkIiB8fCBlLm1lc3NhZ2UuaW5kZXhPZihtZXNz
YWdlKSA+PSAwKSkKICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICBfZmFpbChgRXhwZWN0
ZWQgdG8gdGhyb3cgYSAke3R5cGUubmFtZX0gd2l0aCBtZXNzYWdlICIke21lc3NhZ2V9IiwgZ290
ICR7ZS5uYW1lfSB3aXRoIG1lc3NhZ2UgIiR7ZS5tZXNzYWdlfSJgKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMgYi9KU1Rlc3Rz
L3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMKaW5kZXggYmIxYjk3YjE5ZDVjYzFj
NzhiNWYwMDdkYzY5MGFhZGJkNzBkMjBmOC4uMjA5ZjIwYjc2YmJhOGI3MGM1MTcyMWVlNDU2ODNk
MWY3NjAzMmE2ZiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxk
ZXJKU09OLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5q
cwpAQCAtMTQwLDExICsxNDAsNiBAQCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZuLCBtZXNz
YWdlKSA9PiB7CiAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMCk7CiB9
KSgpOwogCi0oZnVuY3Rpb24gSW1wb3J0QmVmb3JlVHlwZVNlY3Rpb25zKCkgewotICAgIGNvbnN0
IGIgPSAobmV3IEJ1aWxkZXIoKSkuSW1wb3J0KCkuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygo
KSA9PiBiLlR5cGUoKSwgRXJyb3IsIGBFeHBlY3RlZDogIjIiID4gIjEiOiBCYWQgc2VjdGlvbiBv
cmRlcmluZzogIkltcG9ydCIgY2Fubm90IHByZWNlZGUgIlR5cGUiYCk7Ci19KSgpOwotCiAoZnVu
Y3Rpb24gSW1wb3J0RnVuY3Rpb25XaXRob3V0VHlwZVNlY3Rpb24oKSB7CiAgICAgY29uc3QgaSA9
IChuZXcgQnVpbGRlcigpKS5JbXBvcnQoKTsKICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGkuRnVu
Y3Rpb24oImZvbyIsICJiYXIiLCAwKSwgRXJyb3IsIGBTaG91bGRuJ3QgYmUgdW5kZWZpbmVkOiBD
YW4gbm90IHVzZSB0eXBlIDAgaWYgYSB0eXBlIHNlY3Rpb24gaXMgbm90IHByZXNlbnRgKTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvY2F0Y2gtd2l0aC1kZWxlZ2F0ZS5qcyBiL0pT
VGVzdHMvd2FzbS9zdHJlc3MvY2F0Y2gtd2l0aC1kZWxlZ2F0ZS5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzBi
ZWY1OTNjYzQyMzYyYjIyYWUyOTk3NjQyYjMyODUxNDg4NTQyCi0tLSAvZGV2L251bGwKKysrIGIv
SlNUZXN0cy93YXNtL3N0cmVzcy9jYXRjaC13aXRoLWRlbGVnYXRlLmpzCkBAIC0wLDAgKzEsOTAg
QEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3Nl
cnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7
CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0
IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAg
ICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFy
YW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAg
ICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNv
ZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJp
MzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgiaTMyIikK
KyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQor
ICAgICAgICAgICAgLkRlbGVnYXRlKDApCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAg
ICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCku
Z2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwor
ICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBj
b250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRz
LmZvbzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcgV2Vi
QXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0
YW5jZS5leHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFn
KHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9y
dHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KKworCit7CisgICAgY29uc3QgYiA9
IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10s
IHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJjb250ZXh0IiwgInRhZyIs
IHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBh
cmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAg
ICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
aTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgIC5UcnkoImkzMiIp
CisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkK
KyAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQorICAgICAgICAgICAgLkNhdGNoKDEpCisgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgp
LmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
KyAgICBsZXQgb3RoZXJUYWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogWyJp
MzIiXX0pCisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9k
dWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2ssIHRhZzogb3RoZXJUYWcgfX0pOworCisgICAgbGV0
IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworICAgIGxldCBhcmdzID0gW107CisKKyAgICBm
dW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2Vw
dGlvbih0YWcsIGFyZ3MpOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRz
LmNhbGwoKSwgMyk7CisKKyAgICB0YWcgPSBvdGhlclRhZzsKKyAgICBhcmdzID0gWzEwMF07CisK
KyAgICBsZXQgZXhuID0gYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFz
c2VtYmx5LkV4Y2VwdGlvbik7CisgICAgYXNzZXJ0LmVxKGV4bi5nZXRBcmcodGFnLCAwKSwgMTAw
KTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvY3JlYXRlLXRhZy1mcm9tLmpz
IGIvSlNUZXN0cy93YXNtL3N0cmVzcy9jcmVhdGUtdGFnLWZyb20uanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjI3
OGQ2YzIxNzZjZmI1ODE0YWZhZTc2ODRmMTlmZDU2ODEwMWZhOQotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvd2FzbS9zdHJlc3MvY3JlYXRlLXRhZy1mcm9tLmpzCkBAIC0wLDAgKzEsMjIgQEAK
K2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK2xldCBwYXJhbWV0ZXJz
ID0gWyJpMzIiLCAiZjMyIiwgImV4dGVybnJlZiJdOworCithc3NlcnQudGhyb3dzKFdlYkFzc2Vt
Ymx5LlRhZywgVHlwZUVycm9yLCAiY2FsbGluZyBXZWJBc3NlbWJseS5UYWcgY29uc3RydWN0b3Ig
d2l0aG91dCBuZXcgaXMgaW52YWxpZCIpOworbGV0IHBhc3NlZFBhcmFtZXRlcnMgPSB7IHBhcmFt
ZXRlcnMgfTsKK2xldCB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHBhc3NlZFBhcmFtZXRlcnMp
OworCithc3NlcnQudHJ1dGh5KHRhZy50eXBlKCkgIT09IHBhc3NlZFBhcmFtZXRlcnMsICJUYWcg
dHlwZSBzaG91bGQgcmV0dXJuIGEgZnJlc2ggb2JqZWN0Iik7Cithc3NlcnQuZXEodGFnLnR5cGUo
KS5wYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzLCAiVGFncyB0eXBlIHNob3VsZCBiZSB0aGUgc2FtZSBh
cyB0aGUgcGFyYW1ldGVycyBwYXNzZWQgaW4iKTsKKworYXNzZXJ0LnRocm93cyhXZWJBc3NlbWJs
eS5FeGNlcHRpb24sIFR5cGVFcnJvciwgImNhbGxpbmcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGNv
bnN0cnVjdG9yIHdpdGhvdXQgbmV3IGlzIGludmFsaWQiKTsKKworbGV0IGV4Y2VwdGlvbiA9IG5l
dyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbMSwgMi41LCBwYXJhbWV0ZXJzXSk7Cithc3Nl
cnQudHJ1dGh5KGV4Y2VwdGlvbi5pcyh0YWcpKTsKK2Fzc2VydC5lcShleGNlcHRpb24uZ2V0QXJn
KHRhZywgMCksIDEpOworYXNzZXJ0LmVxKGV4Y2VwdGlvbi5nZXRBcmcodGFnLCAxKSwgMi41KTsK
K2Fzc2VydC5lcShleGNlcHRpb24uZ2V0QXJnKHRhZywgMiksIHBhcmFtZXRlcnMpOworCithc3Nl
cnQudGhyb3dzKCgpID0+IGV4Y2VwdGlvbi5nZXRBcmcodGFnLCAzKSwgUmFuZ2VFcnJvciwgIldl
YkFzc2VtYmx5LkV4Y2VwdGlvbi5nZXRBcmcoKTogSW5kZXggb3V0IG9mIHJhbmdlIik7CisKK2Fz
c2VydC5lcShXZWJBc3NlbWJseS5FeGNlcHRpb24ucHJvdG90eXBlLl9fcHJvdG9fXywgT2JqZWN0
LnByb3RvdHlwZSkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNy
b3NzLWluc3RhbmNlLTIuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1p
bnN0YW5jZS0yLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlYzdmYmFkMDc1ODk1NWVhMmY4ZTQzNDI4MTQxN2M5
NmYwMGRiNzMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlv
bi1jcm9zcy1pbnN0YW5jZS0yLmpzCkBAIC0wLDAgKzEsOTAgQEAKKworaW1wb3J0IEJ1aWxkZXIg
ZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQu
anMnCisKK2NvbnN0IHBhZ2VTaXplID0gNjQgKiAxMDI0OworY29uc3QgbnVtUGFnZXMgPSAxOwor
Cit2YXIgaW5zdEE7Cit2YXIgaW5zdEI7Cit2YXIgZ3JvdzsKK3ZhciBtZW1vcnlEZXNjcmlwdGlv
biA9IHtpbml0aWFsOiAwfTsKK3ZhciBtZW0gPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KG1lbW9y
eURlc2NyaXB0aW9uKTsKKworZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBhc3NlcnQuZXEoaW5zdEEu
ZXhwb3J0cy5tYWluKDQyKSwgNDIpOworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVy
KCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAu
TWVtb3J5KCJjb250ZXh0IiwgIm1lbSIsIG1lbW9yeURlc2NyaXB0aW9uKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjb250ZXh0IiwgImdyb3ciLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0p
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhj
ZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0cmFtcG9saW5lIikKKyAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigidHJhbXBvbGluZSIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOworICAgIGluc3RCID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgewor
ICAgICAgICBjb250ZXh0OiB7CisgICAgICAgICAgICBtZW0sCisgICAgICAgICAgICBncm93KCkg
eyBpbnN0QS5leHBvcnRzLmdyb3coMSk7IH0sCisgICAgICAgIH0KKyAgICB9KTsKK30KKworewor
ICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAg
IC5JbXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiY29udGV4dCIsICJtZW0iLCBtZW1vcnlE
ZXNjcmlwdGlvbikKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJ0cmFtcG9saW5l
IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFt
czogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
bWFpbiIpCisgICAgICAgICAgICAuRnVuY3Rpb24oImdyb3ciKQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYWluIiwgeyBwYXJhbXM6IFsi
aTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAg
ICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykK
KyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkxvYWQoMCwgMCkKKyAgICAgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJncm93
IiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAgICAgLkdl
dExvY2FsKDApCisgICAgICAgICAgICAgICAgLkdyb3dNZW1vcnkoMCkKKyAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoNDIpCisgICAgICAgICAgICAgICAgLkkzMlN0b3JlKDAsIDApCisgICAgICAg
ICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisK
KworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1
bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgaW5zdEEgPSBuZXcgV2ViQXNz
ZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7CisgICAgICAgIGNvbnRleHQ6IHsKKyAgICAgICAgICAg
IG1lbSwKKyAgICAgICAgICAgIHRyYW1wb2xpbmU6IGluc3RCLmV4cG9ydHMudHJhbXBvbGluZSwK
KyAgICAgICAgfQorICAgIH0pOworfQorCit0ZXN0KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dh
c20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0zLmpzIGIvSlNUZXN0cy93YXNtL3N0
cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UtMy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTg5ODBiZWI5
M2Y2YzJjMzA2NGMyY2M5MTRlYWMxYTEzNGMwNDgwCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0
cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UtMy5qcwpAQCAtMCwwICsxLDc1
IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNz
ZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworY29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7Citj
b25zdCBudW1QYWdlcyA9IDE7CisKK3ZhciBpbnN0QTsKK3ZhciBpbnN0QjsKK3ZhciBncm93Owor
dmFyIG1lbW9yeURlc2NyaXB0aW9uID0ge2luaXRpYWw6IG51bVBhZ2VzfTsKK3ZhciBtZW0gPSBu
ZXcgV2ViQXNzZW1ibHkuTWVtb3J5KG1lbW9yeURlc2NyaXB0aW9uKTsKKworZnVuY3Rpb24gdGVz
dCgpIHsKKyAgICBhc3NlcnQuZXEoaW5zdEEuZXhwb3J0cy5tYWluKCksIDQyKTsKK30KKworewor
ICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAg
IC5JbXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiY29udGV4dCIsICJtZW0iLCB7IGluaXRp
YWw6IDAgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oInRocm93IikKKyAgICAgICAgICAgIC5F
eGNlcHRpb24oImV4IiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigidGhyb3ciLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisg
ICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25z
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgaW5zdEIgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgbWVtOiBuZXcgV2ViQXNz
ZW1ibHkuTWVtb3J5KHsgaW5pdGlhbDogMCB9KSB9IH0pOworfQorCit7CisgICAgY29uc3QgYiA9
IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisg
ICAgICAgICAgICAuTWVtb3J5KCJjb250ZXh0IiwgIm1lbSIsIG1lbW9yeURlc2NyaXB0aW9uKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0IiwgInRocm93IiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJleCIsIHsg
cGFyYW1zOiBbXSB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVuZCgp
CisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYWluIikKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigibWFpbiIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgw
KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCg0MikKKyAgICAgICAgICAgICAgICAuSTMyU3Rv
cmUoMCwgMCkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAg
ICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAg
ICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAg
ICAgICAgICAgICAgIC5JMzJMb2FkKDAsIDApCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2Vi
QXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbik7CisgICAgaW5zdEEgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7
IGNvbnRleHQ6IHsgLi4uaW5zdEIuZXhwb3J0cywgbWVtIH0gfSk7Cit9CisKK3Rlc3QoKTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLmpz
IGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uY2M2N2M5MTg2OWUyYWIyZGJlNzBkNWNlYzFlN2YyNTc4OThiNThmNgotLS0gL2Rldi9u
dWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLmpz
CkBAIC0wLDAgKzEsNTggQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitp
bXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit2YXIgaW5zdEE7Cit2YXIg
aW5zdEI7CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgYXNzZXJ0LnRocm93cyhpbnN0QS5leHBv
cnRzLm1haW4sIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbiwgIndhc20gZXhjZXB0aW9uIik7Cit9CisK
K3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJ0aHJvdyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oInRocm93IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAg
ICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisK
KworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1
bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgaW5zdEIgPSBuZXcgV2ViQXNz
ZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRl
cigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjb250ZXh0IiwgInRocm93IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0p
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhj
ZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbImkzMiIsICJpMzIiXX0pLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYWluIikKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigibWFpbiIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAg
ICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAg
ICAgICAgICAgICAgICAgIC5JMzJBZGQoKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOworICAgIGluc3RBID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBj
b250ZXh0OiB7IHRocm93OiBpbnN0Qi5leHBvcnRzLnRocm93IH0gfSk7Cit9CisKK3Rlc3QoKTsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWxpdmVuZXNzLXRpZXIt
dXAuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1saXZlbmVzcy10aWVyLXVwLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjhlNjA1MjQwZDIxNWViMTQyMTAyYzg1ZjFjOTgwMzUyNGM4NWM2ZjIKLS0t
IC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1saXZlbmVzcy10
aWVyLXVwLmpzCkBAIC0wLDAgKzEsODcgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxk
ZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAg
Y29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpCisgICAgICAgICAgICAuU2lnbmF0
dXJlKHsgcGFyYW1zOiBbImkzMiJdfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FeHBvcnQo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24o
InRhZyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSwgWyJpMzIiXSkKKyAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoMWU2KQorICAgICAgICAgICAgICAgIC5TZXRMb2NhbCgw
KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5JMzJD
b25zdCg0MikKKyAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAg
LkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5Mb29wKCJ2b2lkIikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC5CbG9jaygidm9pZCIsIGIgPT4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkz
MkVxeigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJySWYoMCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
STMyU3ViKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuU2V0TG9jYWwoMCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQnIoMSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAg
ICAgIC5SZXRocm93KDApCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7Cisg
ICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKyAg
ICBjb25zdCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLnRhZzsKKworICAgIGFzc2VydC50aHJvd3Mo
aW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24sICJ3YXNtIGV4Y2Vw
dGlvbiIpOworICAgIHRyeSB7CisgICAgICAgIGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpOworICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgYXNzZXJ0LnRydXRoeShlLmlzKHRhZykpOworICAgICAg
ICBhc3NlcnQuZXEoZS5nZXRBcmcodGFnLCAwKSwgNDIpOworICAgIH0KK30KKworeworICAgIGNv
bnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBv
cnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
aTMyIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0
aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5G
dW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAg
ICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KQor
ICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5Mb29wKCJ2b2lk
IikKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMikKKyAgICAgICAgICAgICAgICAgICAgLlRy
eSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAg
ICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisg
ICAgICAgICAgICAgICAgICAgICAgICAuSTMyRXF6KCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IC5CcklmKDEpCisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oIndyYXBwZXIi
LCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpCisKKyAgICB2YXIgY291bnRlciA9IDFlNTsKKyAgICBjb25zdCBiaW4gPSBiLldl
YkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNl
KG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrOiBmdW5jdGlvbigpIHsgaWYgKCEtLWNvdW50
ZXIpIHJldHVybiB0cnVlO30gfSB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRz
LmNhbGwoKSwgMCk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlv
bi1tdWx0aXBsZS1pbnN0YW5jZXMuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1t
dWx0aXBsZS1pbnN0YW5jZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzEwMjY3OWE5ZDExYTFiZTgxMzA4ZDYx
N2I5N2RhYzlhYTdmMzBlZQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mv
ZXhjZXB0aW9uLW11bHRpcGxlLWluc3RhbmNlcy5qcwpAQCAtMCwwICsxLDMyIEBACitpbXBvcnQg
QnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4u
L2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24o
KS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oInRocm93IikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oInRhZyIs
IDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oInRocm93IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgICAg
IC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAg
ICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCkKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
eworICAgICAgICBsZXQgaW5zdCA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOwor
ICAgICAgICBpbnN0LmV4cG9ydHMudGhyb3coKTsKKyAgICB9CisgICAgeworICAgICAgICBsZXQg
aW5zdCA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworICAgICAgICBpbnN0LmV4
cG9ydHMudGhyb3coKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNz
L2V4Y2VwdGlvbi1zaW1wbGUtZGVsZWdhdGUuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2Vw
dGlvbi1zaW1wbGUtZGVsZWdhdGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmIxMmE4ZWYyOTYyY2IxMWM5NDZk
MGM1ZmQ4MGY0YTA2ZmRhNGM3OQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJl
c3MvZXhjZXB0aW9uLXNpbXBsZS1kZWxlZ2F0ZS5qcwpAQCAtMCwwICsxLDEyNSBAQAoraW1wb3J0
IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcu
Li9hc3NlcnQuanMnCisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVUaHJvd0RlbGVnYXRlKCkgeworICAg
IGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6
IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAg
ICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVHJ5
KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAg
ICAgICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9k
dWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAi
Y2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBv
c3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RUaHJvd0RlbGVnYXRlU2tpcCgpIHsKKyAgICBj
b25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVu
Y3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBb
XX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAg
ICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0p
CisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgi
aTMyIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkRlbGVn
YXRlKDEpCisgICAgICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAg
ICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKwor
CisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVs
ZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5l
dyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5z
dGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0
aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdERl
bGVnYXRlQ2FsbGVyKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24o
KS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0
aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBh
cmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAg
ICAgICAgICAgICAgICAgICAuQ2FsbCgxKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAg
ICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwyIiwgeyBwYXJh
bXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAg
ICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAuVGhy
b3coMCkKKyAgICAgICAgICAgICAgICAgICAgLkRlbGVnYXRlKDEpCisgICAgICAgICAgICAgICAg
LkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBj
b25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFz
c2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5l
eHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBm
cm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlRGVs
ZWdhdGVNZXJnZSgpeworIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9
KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5JMzJD
b25zdCgzKQorICAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdl
dCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAg
ICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7
CisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKK30KKwordGVzdFNp
bXBsZVRocm93RGVsZWdhdGUoKTsKK3Rlc3RUaHJvd0RlbGVnYXRlU2tpcCgpOwordGVzdERlbGVn
YXRlQ2FsbGVyKCk7Cit0ZXN0U2ltcGxlRGVsZWdhdGVNZXJnZSgpOwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLXRocm93LWNhdGNoLmpzIGIvSlNUZXN0
cy93YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLXRocm93LWNhdGNoLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjEwOTc0MDE1ZjczMDFkZWJlNmI0ZDY2MmUzNWIwOTJmZTQ4ZTBjNzYKLS0tIC9kZXYvbnVsbAor
KysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtdGhyb3ctY2F0Y2guanMK
QEAgLTAsMCArMSw0MTQgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitp
bXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCitmdW5jdGlvbiB0ZXN0U2lt
cGxlVHJ5Q2F0Y2goKXsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUo
KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCku
U2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlv
bigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJh
bXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAg
ICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAg
ICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3Qg
YmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBK
UyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZVRyeUNhdGNo
QWxsKCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVy
ZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwi
KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwg
cmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAu
VGhyb3coMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRj
aEFsbCgpCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0g
Yi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0
YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxs
KCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91
bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdENhbGxUcnlDYXRjaCgpeworICAg
IGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6
IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAg
ICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMSkKKyAg
ICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKworICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjYWxsMiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5U
aHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25z
dCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBv
cnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9t
IEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0Q2FsbFRyeUNhdGNo
QWxsKCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVy
ZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwi
KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwg
cmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAu
Q2FsbCgxKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0
KDIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorCisgICAgICAgICAg
ICAuRnVuY3Rpb24oImNhbGwyIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAg
ICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisK
KworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1
bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBu
ZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGlu
c3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcg
dGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RT
aW1wbGVUcnlDYXRjaFZhbHVlKCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAg
Yi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2Vw
dGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
YWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIi
KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5UaHJvdygw
KQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJs
eSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmlu
KTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUs
IHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRj
aGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2li
bGUiKTsKK30KKworZnVuY3Rpb24gdGVzdENhbGxUcnlDYXRjaFZhbHVlKCl7CisgICAgY29uc3Qg
YiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9u
KCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIi
XX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAg
ICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0p
CisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDEpCisgICAg
ICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgp
CisKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbDIiLCB7IHBhcmFtczogW10sIHJldDogImkz
MiIgfSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuVGhy
b3coMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3Qg
YmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBK
UyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFN0YWNrVHJ5Q2F0Y2go
KXsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbImkzMiJdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxs
IikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10s
IHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLy8g
VE9ETzogYnVpbGRlciBlcnJvcgorICAgICAgICAgICAgLlRyeSh7IHBhcmFtczogWyJpMzIiXSwg
cmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkNh
dGNoKDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNv
bnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0
YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3Nl
cnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3
YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rp
b24gdGVzdExpdmVBZnRlclRyeUNhdGNoKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAg
IC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAw
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAg
ICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25z
dCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBv
cnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9t
IEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0TGl2ZUFmdGVyVHJ5
Q2F0Y2hBbGwoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCku
RW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNp
Z25hdHVyZSh7IHBhcmFtczogW10gfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9u
KCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQo
KQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFt
czogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAg
ICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisg
ICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJB
c3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZSht
b2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIs
ICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUg
cG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFVuaWZ5VHJ5Q2F0Y2hDYXRjaCgpIHsKKyAg
ICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAu
RnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIC5TaWdu
YXR1cmUoeyBwYXJhbXM6IFtdIH0pCisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBb
XSB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAg
ICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRocm93KDEpCisgICAg
ICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQor
ICAgICAgICAgICAgICAgIC5DYXRjaCgxKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3Qo
MikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNv
bnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0
YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3Nl
cnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3
YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rp
b24gdGVzdFVuaWZ5VHJ5Q2F0Y2hDYXRjaEFsbCgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxk
ZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0p
CisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikK
KyAgICAgICAgICAgICAgICAgICAgLlRocm93KDEpCisgICAgICAgICAgICAgICAgLkNhdGNoKDAp
CisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5DYXRj
aEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25z
dCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBv
cnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9t
IEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0VW5pZnlUcnlOb1Ro
cm93KCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKQorICAgICAg
ICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAgICAgIC5TaWduYXR1cmUo
eyBwYXJhbXM6IFtdIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMikKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAg
LkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
Y29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOwor
CisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4g
ZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9
CisKK2Z1bmN0aW9uIHRlc3RVbmlmeVRyeU5vQ2F0Y2goKSB7CisgICAgY29uc3QgYiA9IG5ldyBC
dWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4Y2VwdGlvbigpCisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBb
XSB9KQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2Fs
bCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkz
MiIpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBi
aW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5
Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRz
LmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpT
IHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0TmVzdGVkQ2F0Y2ggKCl7
CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBh
cmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxs
IiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuR2V0
TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAg
ICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAg
ICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAg
ICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5U
aHJvdygwKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworICAgIGNvbnN0IGJpbiA9
IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5z
dGFuY2UobW9kdWxlKTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxs
LCBXZWJBc3NlbWJseS5FeGNlcHRpb24sICJ3YXNtIGV4Y2VwdGlvbiIpOworfQorCit0ZXN0U2lt
cGxlVHJ5Q2F0Y2goKTsKK3Rlc3RTaW1wbGVUcnlDYXRjaEFsbCgpOwordGVzdFNpbXBsZVRyeUNh
dGNoVmFsdWUoKTsKK3Rlc3RDYWxsVHJ5Q2F0Y2goKTsKK3Rlc3RDYWxsVHJ5Q2F0Y2hBbGwoKTsK
K3Rlc3RDYWxsVHJ5Q2F0Y2hWYWx1ZSgpOwordGVzdExpdmVBZnRlclRyeUNhdGNoKCk7Cit0ZXN0
TGl2ZUFmdGVyVHJ5Q2F0Y2hBbGwoKTsKK3Rlc3RVbmlmeVRyeUNhdGNoQ2F0Y2goKTsKK3Rlc3RV
bmlmeVRyeUNhdGNoQ2F0Y2hBbGwoKTsKK3Rlc3RVbmlmeVRyeU5vVGhyb3coKTsKK3Rlc3RVbmlm
eVRyeU5vQ2F0Y2goKTsKKworLy8gVE9ETzogZW5hYmxlIHRoaXMgdGVzdAorLy8gdGVzdFN0YWNr
VHJ5Q2F0Y2goKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRo
cm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwtcmV0aHJvdy5qcyBiL0pTVGVzdHMvd2FzbS9z
dHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwtcmV0aHJvdy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mYjRjMzBkOTFhYzZiYTM3NTQxMDQ3YmM2NTIzZmFiYWYxMWJiNDJkCi0t
LSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZy
b20tanMtdG8td2FzbS1jYXRjaGFsbC1yZXRocm93LmpzCkBAIC0wLDAgKzEsNDEgQEAKK2ltcG9y
dCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAn
Li4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5U
eXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxi
YWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rp
b24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0p
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAu
RXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisg
ICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAg
Y29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAg
ICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAgICBmdW5jdGlvbiBjYWxsYmFj
aygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsK
KyAgICB9CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNz
ZW1ibHkuRXhjZXB0aW9uKTsKKworICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJh
bWV0ZXJzOiBbXSB9KTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxs
LCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0
cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS1jYXRjaGFsbC5qcyBiL0pTVGVz
dHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzdlNGE0NGIxZmVjNDE2ZDM4NGM3OTQ5OWY5OGJmOTQ2NjljYjY0Ywot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1m
cm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwuanMKQEAgLTAsMCArMSw0MCBAQAoraW1wb3J0IEJ1aWxk
ZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3Nl
cnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5F
bmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7
IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVu
ZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkK
KyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRp
b24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAg
ICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAg
LkkzMkNvbnN0KDIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOwor
ICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25z
dCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDog
eyBjYWxsYmFjayB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisK
KyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5
LkV4Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhw
b3J0cy5jYWxsKCksIDIsICJjYXRjaF9hbGxpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3du
IGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1i
bHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhw
b3J0cy5jYWxsKCksIDIsICJjYXRjaF9hbGxpbmcgYW4gb3BhcXVlIHdhc20gdGFnIHRocm93biBm
cm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS5qcyBiL0pTVGVzdHMvd2Fz
bS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20uanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjUwMTkyMDBjOWZkOWYyZjYxZmFiNDM4NzQwNmU4NjZiYzMyZjc2OQotLS0gL2Rldi9udWxsCisr
KyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20u
anMKQEAgLTAsMCArMSw0MCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycK
K2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBi
ID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCku
RnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQi
IH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24o
KS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0
aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBh
cmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAg
ICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAg
ICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0
IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1i
bHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0
IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7
CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAg
fQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcg
YW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7
CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisK
KyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhj
ZXB0aW9uKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRo
cm93bi1vdXQtb2Ytd2FzbS5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93
bi1vdXQtb2Ytd2FzbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOGUzMzAxZTNiODAwM2E1MmEyZGU2MzM1ODY3
NjlmZjg5MDgyZjhlCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNl
cHRpb24tdGhyb3duLW91dC1vZi13YXNtLmpzCkBAIC0wLDAgKzEsMjQgQEAKK2ltcG9ydCBCdWls
ZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNz
ZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCku
RW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNp
Z25hdHVyZSh7IHBhcmFtczogW10gfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9u
KCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQo
KQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFt
czogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAg
LkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKyAgICBj
b25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFz
c2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4
cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVz
dHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdmVyLXdhc20uanMgYi9KU1Rlc3RzL3dh
c20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3Zlci13YXNtLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5ZjRj
MmU5MDMxZTllZDQ5ZGU2OTcxYzk3MWI2NDBiZWUyNGFmYzMKLS0tIC9kZXYvbnVsbAorKysgYi9K
U1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3Zlci13YXNtLmpzCkBAIC0wLDAg
KzEsMzAgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBh
cyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWls
ZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJj
b250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQor
ICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJl
KHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIp
CisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgLkkzMkNvbnN0
KDEpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgZnVuY3Rp
b24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24o
aW5zdGFuY2UuZXhwb3J0cy5mb28sIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQudGhyb3dzKGlu
c3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uLCAid2FzbSBleGNlcHRp
b24iKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRyYXAu
anMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10cmFwLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRm
ZGY1M2ViNTA1YzM5MGI0MGJmMTUzNTViNmQ1MzcyZTU2MGU5MWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10cmFwLmpzCkBAIC0wLDAgKzEsMTM0IEBA
CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0
IGZyb20gJy4uL2Fzc2VydC5qcycKKworZnVuY3Rpb24gdGVzdENhbm5vdENhdGNoVW5yZWFjaGFi
bGUoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAu
RnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAg
ICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlVucmVhY2hhYmxl
KCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOwor
ICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25z
dCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworCisgICAgYXNz
ZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJv
ciwgIlVucmVhY2hhYmxlIGNvZGUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCIpOworfQorCitmdW5j
dGlvbiB0ZXN0Q2Fubm90Q2F0Y2hPT0IoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7
CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
Lk1lbW9yeSgpCisgICAgICAgICAgICAuSW5pdGlhbE1heFBhZ2VzKDAsIDEpCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwi
LCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIi
KQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMTAyNCkKKyAgICAgICAgICAgICAgICAg
ICAgLkkzMkxvYWQoMCwgMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3Nl
bWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1
bGUpOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2Vt
Ymx5LlJ1bnRpbWVFcnJvciwgIk91dCBvZiBib3VuZHMgbWVtb3J5IGFjY2VzcyIpOworfQorCitm
dW5jdGlvbiB0ZXN0V2FzbUFQSVRocm93KCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4
dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAg
ICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAg
ICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkK
KyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9
IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5z
dGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgZnVuY3Rpb24g
Y2FsbGJhY2soKSB7CisgICAgICAgIG5ldyBXZWJBc3NlbWJseS5HbG9iYWwoeworICAgICAgICAg
ICAgdmFsdWU6ICdhbnlmdW5jJworICAgICAgICB9LCB7fSk7CisgICAgfQorCisgICAgYXNzZXJ0
LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAxKTsKK30KK2Z1bmN0aW9uIHRlc3RKU0NhdGNo
QW5kUmV0aHJvdygpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUo
KS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2si
LCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Y2FsbCIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAg
LlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAg
ICAgICAgICAgIC5JMzJFcXooKQorICAgICAgICAgICAgICAgICAgICAuSWYoInZvaWQiKQorICAg
ICAgICAgICAgICAgICAgICAgICAgLlVucmVhY2hhYmxlKCkKKyAgICAgICAgICAgICAgICAgICAg
LkVsc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAg
ICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAg
ICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQor
CisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9k
dWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0g
bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19
KTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0cnkgeworICAgICAgICAg
ICAgaW5zdGFuY2UuZXhwb3J0cy5jYWxsKDApOworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAg
ICAgICAgIHRocm93IGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQudGhyb3dzKCgp
ID0+IGluc3RhbmNlLmV4cG9ydHMuY2FsbCgxKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAi
VW5yZWFjaGFibGUgY29kZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIik7Cit9CisKK3Rlc3RDYW5u
b3RDYXRjaFVucmVhY2hhYmxlKCk7Cit0ZXN0Q2Fubm90Q2F0Y2hPT0IoKTsKK3Rlc3RXYXNtQVBJ
VGhyb3coKTsKK3Rlc3RKU0NhdGNoQW5kUmV0aHJvdygpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93
YXNtL3N0cmVzcy9yZXRocm93LWZyb20tY2F0Y2gtdG8tY2F0Y2guanMgYi9KU1Rlc3RzL3dhc20v
c3RyZXNzL3JldGhyb3ctZnJvbS1jYXRjaC10by1jYXRjaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZGZkYTZk
OGE2OTExODRkOTk5NTU1ZDE4ZThkOWVlNTFiZTRhZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LWZyb20tY2F0Y2gtdG8tY2F0Y2guanMKQEAgLTAsMCAr
MSw0NSBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFz
IGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxk
ZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNv
bnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisg
ICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUo
eyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikK
KyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAg
ICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJl
dDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAuVHJ5KCJp
MzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0
KDEpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikK
KyAgICAgICAgICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25z
dCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxl
dCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkg
eworICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAg
IH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0
YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3Nl
cnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsK
K30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy10by1jYXRjaC5qcyBi
L0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy10by1jYXRjaC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjFj
YmE0M2RjYjViNDRkOWFlNjRmZGM1NzlhMGM4YTY1NTAzZjdkCi0tLSAvZGV2L251bGwKKysrIGIv
SlNUZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LXRvLWNhdGNoLmpzCkBAIC0wLDAgKzEsODggQEAK
K2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQg
ZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Cisg
ICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0Iiwg
ImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAu
RnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1z
OiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAg
ICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIi
IH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAg
ICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAg
ICAgICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAu
Q2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4g
PSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxldCB0YWcg
PSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAg
ICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAgIH0KKwor
ICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0YWcgPSBu
ZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQudGhy
b3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KKwor
eworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAg
ICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAg
ICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAu
RXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwg
MCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgi
aTMyIikKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMCkK
KyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAg
IC5JMzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6
IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOwor
CisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJs
eS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4
cG9ydHMuY2FsbCgpLCAzKTsKKworICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJh
bWV0ZXJzOiBbXSB9KTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxs
LCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0
cmVzcy9yZXRocm93LXRvLWRlbGVnYXRlLXRvLWNhdGNoLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVz
cy9yZXRocm93LXRvLWRlbGVnYXRlLXRvLWNhdGNoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwNDc5YzBjZWEy
M2I2MGUzOTU1YTFiNTE3NDkxZmI0Zjc2ZWU3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3dhc20vc3RyZXNzL3JldGhyb3ctdG8tZGVsZWdhdGUtdG8tY2F0Y2guanMKQEAgLTAsMCArMSwy
NTkgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBh
c3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVy
KCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQi
IH0pCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJjb250ZXh0IiwgInRhZyIsIHsgcGFyYW1zOiBb
ImkzMiJdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9u
KCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4
Y2VwdGlvbigiZm9vIiwgMSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAg
ICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAg
ICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwo
MCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAg
ICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5DYXRjaCgx
KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2Vi
QXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFt
ZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrLCB0YWc6IG90aGVyVGFnIH19KTsK
KworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKyAgICBsZXQgYXJncyA9IFtd
OworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3Nl
bWJseS5FeGNlcHRpb24odGFnLCBhcmdzKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFu
Y2UuZXhwb3J0cy5jYWxsKCksIDMpOworCisgICAgdGFnID0gb3RoZXJUYWc7CisgICAgYXJncyA9
IFsxMDBdOworCisgICAgbGV0IGV4biA9IGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5j
YWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICAgIGFzc2VydC5lcShleG4uZ2V0QXJnKHRh
ZywgMCksIDEwMCk7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBi
LlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Y29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAg
ICAgICAgIC5FeGNlcHRpb24oImNvbnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJl
dDogInZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQor
ICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJm
b28iLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAu
VHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAg
ICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAg
ICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDEpCisgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5SZXRocm93
KDEpCisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgLkRlbGVnYXRlKDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25z
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFn
ID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0
IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7
IGNhbGxiYWNrLCB0YWc6IG90aGVyVGFnIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5l
eHBvcnRzLmZvbzsKKyAgICBsZXQgYXJncyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2so
KSB7CisgICAgICAgIGxldCBleG4gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJn
cyk7CisgICAgICAgIHRhZyA9IG90aGVyVGFnOworICAgICAgICBhcmdzID0gWzEwMF07CisgICAg
ICAgIHRocm93IGV4bjsKKyAgICB9CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9y
dHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KKworeworICAgIGNvbnN0IGIgPSBu
ZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJ0YWciLCB7
IHBhcmFtczogWyJpMzIiXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJh
bXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAg
ICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29k
ZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkz
MiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLlRyeSgiaTMy
IikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAg
ICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5Ucnko
ImkzMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5D
YXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLlJldGhyb3coMSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAu
RGVsZWdhdGUoMSkKKyAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAg
IGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgb3Ro
ZXJUYWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIiXX0pCisgICAg
Y29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRl
eHQ6IHsgY2FsbGJhY2ssIHRhZzogb3RoZXJUYWcgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3Rh
bmNlLmV4cG9ydHMuZm9vOworICAgIGxldCBhcmdzID0gW107CisKKyAgICBmdW5jdGlvbiBjYWxs
YmFjaygpIHsKKyAgICAgICAgbGV0IGV4biA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFn
LCBhcmdzKTsKKyAgICAgICAgdGFnID0gb3RoZXJUYWc7CisgICAgICAgIGFyZ3MgPSBbMTAwXTsK
KyAgICAgICAgdGhyb3cgZXhuOworICAgIH0KKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2Uu
ZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQorCisKK3sKKyAgICBjb25z
dCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImNvbnRleHQiLCAi
dGFnIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogInZvaWQiIH0pCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJl
KHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIp
CisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5U
cnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDAp
CisgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAg
ICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQorICAg
ICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdl
dCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAg
ICBsZXQgb3RoZXJUYWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIi
XX0pCisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxl
LCB7IGNvbnRleHQ6IHsgY2FsbGJhY2ssIHRhZzogb3RoZXJUYWcgfX0pOworCisgICAgbGV0IHRh
ZyA9IG90aGVyVGFnOworICAgIGxldCBhcmdzID0gWzEwMF07CisKKyAgICBmdW5jdGlvbiBjYWxs
YmFjaygpIHsKKyAgICAgICAgbGV0IGV4biA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFn
LCBhcmdzKTsKKyAgICAgICAgdGhyb3cgZXhuOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0
YW5jZS5leHBvcnRzLmNhbGwoKSwgMTAwKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVp
bGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2
b2lkIiB9KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJ0YWciLCB7IHBhcmFt
czogWyJpMzIiXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtd
fSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAg
IC5FeGNlcHRpb24oImZvbyIsIDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5D
YWxsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAg
ICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFs
bCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLlJldGhyb3coMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRGVsZWdh
dGUoMCkKKyAgICAgICAgICAgIC5DYXRjaCgxKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgz
KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgp
CisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBt
b2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0g
bmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGlu
c3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNh
bGxiYWNrLCB0YWc6IG90aGVyVGFnIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBv
cnRzLmZvbzsKKyAgICBsZXQgYXJncyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7
CisgICAgICAgIGxldCBleG4gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7
CisgICAgICAgIHRhZyA9IG90aGVyVGFnOworICAgICAgICBhcmdzID0gWzEwMF07CisgICAgICAg
IHRocm93IGV4bjsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxs
KCksIDMpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9zaW1wbGUtZXhwb3J0
LWV4Y2VwdGlvbi5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mvc2ltcGxlLWV4cG9ydC1leGNlcHRp
b24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMmI5Njk5OTc1M2QzYTRhZDA4NmEwZWNlNTg5ODI4NGY4ZmNiOGI3
MAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mvc2ltcGxlLWV4cG9ydC1l
eGNlcHRpb24uanMKQEAgLTAsMCArMSwxNiBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVp
bGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAg
ICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAu
RnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1z
OiBbImkzMiJdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkV4Y2VwdGlvbigiZm9vIiwgMCku
RW5kKCkKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25z
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFu
Y2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKworICAgIGFzc2VydC5pbnN0
YW5jZW9mKGluc3RhbmNlLmV4cG9ydHMuZm9vLCBXZWJBc3NlbWJseS5UYWcpOworfQpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL3Y4L0xJQ0VOU0UgYi9KU1Rlc3RzL3dhc20vdjgvTElDRU5TRQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41M2Q5YzQ3ZTMzYzE4MjkyNzQxZjFlNDA4OTBjOGZlMmQ2Mjk5NjQ2Ci0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L0xJQ0VOU0UKQEAgLTAsMCArMSw2MiBAQAor
VGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gYWxsIHBhcnRzIG9mIFY4IHRoYXQgYXJlIG5vdCBleHRl
cm5hbGx5CittYWludGFpbmVkIGxpYnJhcmllcy4gIFRoZSBleHRlcm5hbGx5IG1haW50YWluZWQg
bGlicmFyaWVzIHVzZWQgYnkgVjgKK2FyZToKKworICAtIFBDUkUgdGVzdCBzdWl0ZSwgbG9jYXRl
ZCBpbgorICAgIHRlc3QvbWpzdW5pdC90aGlyZF9wYXJ0eS9yZWdleHAtcGNyZS9yZWdleHAtcGNy
ZS5qcy4gIFRoaXMgaXMgYmFzZWQgb24gdGhlCisgICAgdGVzdCBzdWl0ZSBmcm9tIFBDUkUtNy4z
LCB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgVW5pdmVyc2l0eQorICAgIG9mIENhbWJyaWRn
ZSBhbmQgR29vZ2xlLCBJbmMuICBUaGUgY29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQorICAg
IGFyZSBlbWJlZGRlZCBpbiByZWdleHAtcGNyZS5qcy4KKworICAtIExheW91dCB0ZXN0cywgbG9j
YXRlZCBpbiB0ZXN0L21qc3VuaXQvdGhpcmRfcGFydHkvb2JqZWN0LWtleXMuICBUaGVzZSBhcmUK
KyAgICBiYXNlZCBvbiBsYXlvdXQgdGVzdHMgZnJvbSB3ZWJraXQub3JnIHdoaWNoIGFyZSBjb3B5
cmlnaHRlZCBieQorICAgIEFwcGxlIENvbXB1dGVyLCBJbmMuIGFuZCByZWxlYXNlZCB1bmRlciBh
IDMtY2xhdXNlIEJTRCBsaWNlbnNlLgorCisgIC0gU3Ryb25ndGFsayBhc3NlbWJsZXIsIHRoZSBi
YXNpcyBvZiB0aGUgZmlsZXMgYXNzZW1ibGVyLWFybS1pbmwuaCwKKyAgICBhc3NlbWJsZXItYXJt
LmNjLCBhc3NlbWJsZXItYXJtLmgsIGFzc2VtYmxlci1pYTMyLWlubC5oLAorICAgIGFzc2VtYmxl
ci1pYTMyLmNjLCBhc3NlbWJsZXItaWEzMi5oLCBhc3NlbWJsZXIteDY0LWlubC5oLAorICAgIGFz
c2VtYmxlci14NjQuY2MsIGFzc2VtYmxlci14NjQuaCwgYXNzZW1ibGVyLW1pcHMtaW5sLmgsCisg
ICAgYXNzZW1ibGVyLW1pcHMuY2MsIGFzc2VtYmxlci1taXBzLmgsIGFzc2VtYmxlci5jYyBhbmQg
YXNzZW1ibGVyLmguCisgICAgVGhpcyBjb2RlIGlzIGNvcHlyaWdodGVkIGJ5IFN1biBNaWNyb3N5
c3RlbXMgSW5jLiBhbmQgcmVsZWFzZWQKKyAgICB1bmRlciBhIDMtY2xhdXNlIEJTRCBsaWNlbnNl
LgorCisgIC0gVmFsZ3JpbmQgY2xpZW50IEFQSSBoZWFkZXIsIGxvY2F0ZWQgYXQgc3JjL3RoaXJk
X3BhcnR5L3ZhbGdyaW5kL3ZhbGdyaW5kLmgKKyAgICBUaGlzIGlzIHJlbGVhc2VkIHVuZGVyIHRo
ZSBCU0QgbGljZW5zZS4KKworICAtIFRoZSBXYXNtIEMvQysrIEFQSSBoZWFkZXJzLCBsb2NhdGVk
IGF0IHRoaXJkX3BhcnR5L3dhc20tYXBpL3dhc20ue2gsaGh9CisgICAgVGhpcyBpcyByZWxlYXNl
ZCB1bmRlciB0aGUgQXBhY2hlIGxpY2Vuc2UuIFRoZSBBUEkncyB1cHN0cmVhbSBwcm90b3R5cGUK
KyAgICBpbXBsZW1lbnRhdGlvbiBhbHNvIGZvcm1lZCB0aGUgYmFzaXMgb2YgVjgncyBpbXBsZW1l
bnRhdGlvbiBpbgorICAgIHNyYy93YXNtL2MtYXBpLmNjLgorCitUaGVzZSBsaWJyYXJpZXMgaGF2
ZSB0aGVpciBvd24gbGljZW5zZXM7IHdlIHJlY29tbWVuZCB5b3UgcmVhZCB0aGVtLAorYXMgdGhl
aXIgdGVybXMgbWF5IGRpZmZlciBmcm9tIHRoZSB0ZXJtcyBiZWxvdy4KKworRnVydGhlciBsaWNl
bnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGZpbGVzIGxvY2F0ZWQgaW4g
CitzdWItZGlyZWN0b3JpZXMuCisKK0NvcHlyaWdodCAyMDE0LCB0aGUgVjggcHJvamVjdCBhdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6
CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK09X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92
OC9leGNlcHRpb25zLWFwaS5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWFwaS5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45MWQ1MzY4MTQ1NmM2NWVjODY3MThiODVlMWFmZDZmYzBmZDg5NzY1Ci0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtYXBpLmpzCkBAIC0wLDAg
KzEsMjMyIEBACisvLyBDb3B5cmlnaHQgMjAyMSB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwZXJpbWVudGFsLXdhc20tZWggLS1leHBlcmltZW50
YWwtd2FzbS1yZWZ0eXBlcworCitsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7CisKKyhm
dW5jdGlvbiBUZXN0SW1wb3J0KCkgeworCisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNz
ZW1ibHkuVGFnKCksIFR5cGVFcnJvciwKKyAgICAgIC9leHBlY3RzIHRoZSB0YWcgdHlwZSBhcyB0
aGUgZmlyc3QgYXJndW1lbnQvKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJs
eS5UYWcoe30pLCBUeXBlRXJyb3IsCisgICAgICAvZXhwZWN0cyBhIHRhZyB0eXBlIHdpdGggdGhl
ICdwYXJhbWV0ZXJzJyBwcm9wZXJ0eS8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5LlRhZyh7cGFyYW1ldGVyczogWydmb28nXX0pLCBUeXBlRXJyb3IsCisgICAgICAvZXhw
ZWN0cyB0aGUgJ3BhcmFtZXRlcnMnIGZpZWxkIG9mIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBh
IHNlcXVlbmNlIG9mIFdlYkFzc2VtYmx5IHZhbHVlIHR5cGVzLyk7CisgIGFzc2VydFRocm93cygo
KSA9PiBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiB7fX0pLCBUeXBlRXJyb3IsCisg
ICAgICAvVHlwZSBlcnJvci8pOworCisgIGxldCBqc19leGNlcHRfaTMyID0gbmV3IFdlYkFzc2Vt
Ymx5LlRhZyh7cGFyYW1ldGVyczogWydpMzInXX0pOworICBsZXQganNfZXhjZXB0X3YgPSBuZXcg
V2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbXX0pOworICBsZXQgYnVpbGRlciA9IG5ldyBX
YXNtTW9kdWxlQnVpbGRlcigpOworICBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwg
a1NpZ192X2kpOworCisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLmluc3RhbnRp
YXRlKHsgbTogeyBleDoganNfZXhjZXB0X2kzMiB9fSkpOworICBhc3NlcnRUaHJvd3MoCisgICAg
ICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDoganNfZXhjZXB0X3YgfX0pLCBX
ZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvaW1wb3J0ZWQgVGFnIG06ZXggc2lnbmF0dXJl
IGRvZXNuJ3QgbWF0Y2ggdGhlIGltcG9ydGVkIFdlYkFzc2VtYmx5IFRhZydzIHNpZ25hdHVyZS8p
OworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTog
eyBleDoganNfZXhjZXB0X3YgfX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvaW1w
b3J0ZWQgVGFnIG06ZXggc2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIGltcG9ydGVkIFdlYkFz
c2VtYmx5IFRhZydzIHNpZ25hdHVyZS8pOworICBhc3NlcnRUcnVlKGpzX2V4Y2VwdF9pMzIudG9T
dHJpbmcoKSA9PSAiW29iamVjdCBXZWJBc3NlbWJseS5UYWddIik7Cit9KSgpOworCisoZnVuY3Rp
b24gVGVzdEV4cG9ydCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIo
KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5h
ZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFu
Y2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0VHJ1ZShPYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5zdGFuY2UuZXhwb3J0cywgJ2V4JykpOworICBhc3Nl
cnRFcXVhbHMoIm9iamVjdCIsIHR5cGVvZiBpbnN0YW5jZS5leHBvcnRzLmV4KTsKKyAgYXNzZXJ0
SW5zdGFuY2VvZihpbnN0YW5jZS5leHBvcnRzLmV4LCBXZWJBc3NlbWJseS5UYWcpOworICBhc3Nl
cnRTYW1lKGluc3RhbmNlLmV4cG9ydHMuZXguY29uc3RydWN0b3IsIFdlYkFzc2VtYmx5LlRhZyk7
Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEltcG9ydEV4cG9ydCgpIHsKKworICBsZXQganNfZXhf
aTMyID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogWydpMzInXX0pOworICBsZXQg
YnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgaW5kZXggPSBidWlsZGVy
LmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X2kpOworICBidWlsZGVyLmFkZEV4cG9y
dE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGluZGV4KTsKKworICBsZXQgaW5zdGFuY2UgPSBi
dWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDoganNfZXhfaTMyIH19KTsKKyAgbGV0IHJlcyA9
IGluc3RhbmNlLmV4cG9ydHMuZXg7CisgIGFzc2VydEVxdWFscyhyZXMsIGpzX2V4X2kzMik7Cit9
KSgpOworCisKKyhmdW5jdGlvbiBUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoKSB7CisgIC8vIENo
ZWNrIGVycm9ycy4KKyAgbGV0IGpzX3RhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRl
cnM6IFtdfSk7CisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9u
KDApLCBUeXBlRXJyb3IsCisgICAgICAvV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGNvbnN0cnVjdG9y
IGV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgV2ViQXNzZW1ibHkuVGFnLyk7Cisg
IGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHt9KSwgVHlwZUVy
cm9yLAorICAgICAgL1dlYkFzc2VtYmx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciBleHBlY3RzIHRo
ZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIFdlYkFzc2VtYmx5LlRhZy8pOworICBhc3NlcnRUaHJv
d3MoKCkgPT4gV2ViQXNzZW1ibHkuRXhjZXB0aW9uKGpzX3RhZyksIFR5cGVFcnJvciwKKyAgICAg
IC9jYWxsaW5nIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciB3aXRob3V0IG5ldyBp
cyBpbnZhbGlkLyk7CisgIGxldCBqc19leGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0
aW9uKGpzX3RhZywgW10pOworCisgIC8vIENoZWNrIHByb3RvdHlwZS4KKyAgYXNzZXJ0U2FtZShX
ZWJBc3NlbWJseS5FeGNlcHRpb24ucHJvdG90eXBlLCBqc19leGNlcHRpb24uX19wcm90b19fKTsK
KyAgYXNzZXJ0VHJ1ZShqc19leGNlcHRpb24gaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5FeGNlcHRp
b24pOworCisgIC8vIENoZWNrIHByb3RvdHlwZSBvZiBhIHRocm93biBleGNlcHRpb24uCisgIGxl
dCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCB3YXNtX3RhZyA9IGJ1
aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBr
U2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFtrRXhwclRocm93LCB3YXNtX3RhZ10pLmV4cG9ydEZ1
bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICB0cnkgewor
ICAgIGluc3RhbmNlLmV4cG9ydHMudGhyb3coKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGFzc2Vy
dFRydWUoZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIH0KK30pKCk7CisK
KyhmdW5jdGlvbiBUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JXaXRoUGF5bG9hZCgpIHsKKyAgbGV0
IHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoCisgICAgICB7cGFyYW1ldGVyczogWydpMzInLCAn
ZjMyJywgJ2k2NCcsICdmNjQnLCAnZXh0ZXJucmVmJ119KTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+
IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oCisgICAgICB0YWcsIFsxbiwgMiwgM24sIDQsIHt9
XSksIFR5cGVFcnJvcik7CisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuRXhjZXB0aW9uKHRhZywgWzMsIDQsIDVuLCA2LCB7fV0pKTsKK30pKCk7CisKKyhmdW5jdGlv
biBUZXN0Q2F0Y2hKU0V4Y2VwdGlvbigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKyAgbGV0IGpzX3RhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRl
cnM6IFtdfSk7CisgIGxldCBqc19mdW5jX2luZGV4ID0gYnVpbGRlci5hZGRJbXBvcnQoJ20nLCAn
anNfZnVuYycsIGtTaWdfdl92KTsKKyAgbGV0IGpzX3RhZ19pbmRleCA9IGJ1aWxkZXIuYWRkSW1w
b3J0ZWRUYWcoIm0iLCAianNfdGFnIiwga1NpZ192X3YpOworICBsZXQgdGFnX2luZGV4ID0gYnVp
bGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgid2FzbV90
YWciLCBrRXh0ZXJuYWxUYWcsIHRhZ19pbmRleCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNh
dGNoIiwga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2Fz
bUkzMiwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGpzX2Z1bmNfaW5kZXgsCisgICAgICAg
IGtFeHBySTMyQ29uc3QsIDAsCisgICAgICAgIGtFeHByQ2F0Y2gsIGpzX3RhZ19pbmRleCwKKyAg
ICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAga0V4cHJDYXRjaCwgdGFnX2luZGV4LAor
ICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhw
b3J0RnVuYygpOworICBsZXQgdGFnOworICBmdW5jdGlvbiBqc19mdW5jKCkgeworICAgIHRocm93
IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7CisgIH0KKyAgbGV0IGluc3RhbmNl
ID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7bToge2pzX2Z1bmMsIGpzX3RhZ319KTsKKyAgdGFnID0g
anNfdGFnOworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaCgpKTsKKyAg
dGFnID0gaW5zdGFuY2UuZXhwb3J0cy53YXNtX3RhZzsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3Rh
bmNlLmV4cG9ydHMuY2F0Y2goKSk7Cit9KSgpOworCitmdW5jdGlvbiBUZXN0Q2F0Y2hKUyh0eXBl
c19zdHIsIHR5cGVzLCB2YWx1ZXMpIHsKKyAgLy8gQ3JlYXRlIGEgSlMgZXhjZXB0aW9uLCBjYXRj
aCBpdCBpbiB3YXNtIGFuZCBjaGVjayB0aGUgdW5wYWNrZWQgdmFsdWUocykuCisgIGxldCBidWls
ZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBqc190YWcgPSBuZXcgV2ViQXNz
ZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiB0eXBlc19zdHJ9KTsKKyAgbGV0IGpzX2Z1bmNfaW5kZXgg
PSBidWlsZGVyLmFkZEltcG9ydCgnbScsICdqc19mdW5jJywga1NpZ192X3YpOworICBsZXQgc2ln
MSA9IG1ha2VTaWcodHlwZXMsIFtdKTsKKyAgbGV0IHNpZzIgPSBtYWtlU2lnKFtdLCB0eXBlcyk7
CisgIGxldCBqc190YWdfaW5kZXggPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImpzX3Rh
ZyIsIHNpZzEpOworICBsZXQgdGFnX2luZGV4ID0gYnVpbGRlci5hZGRUYWcoc2lnMSk7CisgIGxl
dCByZXR1cm5fdHlwZSA9IGJ1aWxkZXIuYWRkVHlwZShzaWcyKTsKKyAgYnVpbGRlci5hZGRFeHBv
cnRPZktpbmQoIndhc21fdGFnIiwga0V4dGVybmFsVGFnLCB0YWdfaW5kZXgpOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJjYXRjaCIsIHNpZzIpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtF
eHByVHJ5LCByZXR1cm5fdHlwZSwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGpzX2Z1bmNf
aW5kZXgsCisgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgIGtFeHByQ2F0Y2gsIGpz
X3RhZ19pbmRleCwKKyAgICAgICAga0V4cHJDYXRjaCwgdGFnX2luZGV4LAorICAgICAgICBrRXhw
ckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgZXhjZXB0aW9uOworICBmdW5jdGlv
biBqc19mdW5jKCkgeworICAgIHRocm93IGV4Y2VwdGlvbjsKKyAgfQorICBsZXQgZXhwZWN0ZWQg
PSB2YWx1ZXMubGVuZ3RoID09IDEgPyB2YWx1ZXNbMF0gOiB2YWx1ZXM7CisgIGxldCBpbnN0YW5j
ZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoe206IHtqc19mdW5jLCBqc190YWd9fSk7CisgIGV4Y2Vw
dGlvbiA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oanNfdGFnLCB2YWx1ZXMpOworICBhc3Nl
cnRFcXVhbHMoZXhwZWN0ZWQsIGluc3RhbmNlLmV4cG9ydHMuY2F0Y2goKSk7CisgIGV4Y2VwdGlv
biA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oaW5zdGFuY2UuZXhwb3J0cy53YXNtX3RhZywg
dmFsdWVzKTsKKyAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBpbnN0YW5jZS5leHBvcnRzLmNhdGNo
KCkpOworfQorCisoZnVuY3Rpb24gVGVzdENhdGNoSlNFeGNlcHRpb25XaXRoUGF5bG9hZCgpIHsK
KyAgVGVzdENhdGNoSlMoWydpMzInXSwgW2tXYXNtSTMyXSwgWzFdKTsKKyAgVGVzdENhdGNoSlMo
WydpNjQnXSwgW2tXYXNtSTY0XSwgWzJuXSk7CisgIFRlc3RDYXRjaEpTKFsnZjMyJ10sIFtrV2Fz
bUYzMl0sIFszXSk7CisgIFRlc3RDYXRjaEpTKFsnZjY0J10sIFtrV2FzbUY2NF0sIFs0XSk7Cisg
IFRlc3RDYXRjaEpTKFsnZXh0ZXJucmVmJ10sIFtrV2FzbUV4dGVyblJlZl0sIFt7dmFsdWU6IDV9
XSk7CisgIFRlc3RDYXRjaEpTKFsnaTMyJywgJ2k2NCcsICdmMzInLCAnZjY0JywgJ2V4dGVybnJl
ZiddLAorICAgICAgICAgICAgICBba1dhc21JMzIsIGtXYXNtSTY0LCBrV2FzbUYzMiwga1dhc21G
NjQsIGtXYXNtRXh0ZXJuUmVmXSwKKyAgICAgICAgICAgICAgWzYsIDduLCA4LCA5LCB7dmFsdWU6
IDEwfV0pOworfSkoKTsKKworZnVuY3Rpb24gVGVzdEdldEFyZ0hlbHBlcih0eXBlc19zdHIsIHR5
cGVzLCB2YWx1ZXMpIHsKKyAgbGV0IHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRl
cnM6IHR5cGVzX3N0cn0pOworICBsZXQgZXhjZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2Vw
dGlvbih0YWcsIHZhbHVlcyk7CisgIGZvciAoaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7ICsraSkg
eworICAgIGFzc2VydEVxdWFscyhleGNlcHRpb24uZ2V0QXJnKHRhZywgaSksIHZhbHVlc1tpXSk7
CisgIH0KKworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQg
c2lnID0gbWFrZVNpZyh0eXBlcywgW10pOworICBsZXQgdGFnX2luZGV4ID0gYnVpbGRlci5hZGRJ
bXBvcnRlZFRhZygibSIsICJ0Iiwgc2lnKTsKKyAgbGV0IGJvZHkgPSBbXTsKKyAgZm9yIChpID0g
MDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgYm9keS5wdXNoKGtFeHByTG9jYWxHZXQs
IGkpOworICB9CisgIGJvZHkucHVzaChrRXhwclRocm93LCB0YWdfaW5kZXgpOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIHNpZykKKyAgICAgIC5hZGRCb2R5KGJvZHkpLmV4cG9ydEZ1
bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7J20nOiB7J3QnOiB0
YWd9fSk7CisgIHRyeSB7CisgICAgaW5zdGFuY2UuZXhwb3J0cy50aHJvdyguLi52YWx1ZXMpOwor
ICB9IGNhdGNoIChlKSB7CisgICAgZm9yIChpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7
CisgICAgICBhc3NlcnRFcXVhbHMoZS5nZXRBcmcodGFnLCBpKSwgdmFsdWVzW2ldKTsKKyAgICB9
CisgIH0KK30KKworKGZ1bmN0aW9uIFRlc3RHZXRBcmcoKSB7CisgIC8vIENoZWNrIGVycm9ycy4K
KyAgbGV0IHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFsnaTMyJ119KTsK
KyAgbGV0IGV4Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbMF0pOwor
ICBhc3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0aW9uLmdldEFyZygwLCAwKSwgVHlwZUVycm9yLAor
ICAgICAgL0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBXZWJBc3NlbWJseS5UYWcvKTsKKyAgYXNz
ZXJ0VGhyb3dzKCgpID0+IGV4Y2VwdGlvbi5nZXRBcmcoe30sIDApLCBUeXBlRXJyb3IsCisgICAg
ICAvRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIFdlYkFzc2VtYmx5LlRhZy8pOworICAvL2Fzc2Vy
dFRocm93cygoKSA9PiBleGNlcHRpb24uZ2V0QXJnKHRhZywgdW5kZWZpbmVkKSwgVHlwZUVycm9y
LAorICAgICAgLy8vSW5kZXggbXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhIHZhbGlkIG51bWJlci8p
OworICBhc3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0aW9uLmdldEFyZyh0YWcsIDB4RkZGRkZGRkYp
LCBSYW5nZUVycm9yLAorICAgICAgL0luZGV4IG91dCBvZiByYW5nZS8pOworICBsZXQgd3Jvbmdf
dGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogWydpMzInXX0pOworICBhc3Nl
cnRUaHJvd3MoKCkgPT4gZXhjZXB0aW9uLmdldEFyZyh3cm9uZ190YWcsIDApLCBUeXBlRXJyb3Is
CisgICAgICAvRmlyc3QgYXJndW1lbnQgZG9lcyBub3QgbWF0Y2ggdGhlIGV4Y2VwdGlvbiB0YWcv
KTsKKworICAvLyBDaGVjayBkZWNvZGluZy4KKyAgVGVzdEdldEFyZ0hlbHBlcihbJ2kzMiddLCBb
a1dhc21JMzJdLCBbMV0pOworICBUZXN0R2V0QXJnSGVscGVyKFsnaTY0J10sIFtrV2FzbUk2NF0s
IFsybl0pOworICBUZXN0R2V0QXJnSGVscGVyKFsnZjMyJ10sIFtrV2FzbUYzMl0sIFszXSk7Cisg
IFRlc3RHZXRBcmdIZWxwZXIoWydmNjQnXSwgW2tXYXNtRjY0XSwgWzRdKTsKKyAgVGVzdEdldEFy
Z0hlbHBlcihbJ2V4dGVybnJlZiddLCBba1dhc21FeHRlcm5SZWZdLCBbe3ZhbDogNX1dKTsKKyAg
VGVzdEdldEFyZ0hlbHBlcihbJ2kzMicsICdpNjQnLCAnZjMyJywgJ2Y2NCcsICdleHRlcm5yZWYn
XSwgW2tXYXNtSTMyLCBrV2FzbUk2NCwga1dhc21GMzIsIGtXYXNtRjY0LCBrV2FzbUV4dGVyblJl
Zl0sIFs1LCA2biwgNywgOCwge3ZhbDogOX1dKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhj
ZXB0aW9uSXMoKSB7CisgIGxldCB0YWcxID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVy
czogW119KTsKKyAgbGV0IHRhZzIgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBb
XX0pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih7fSwg
W10pLCBUeXBlRXJyb3IsCisgICAgICAvZXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUg
YSBXZWJBc3NlbWJseS5UYWcvKTsKKworICBsZXQgZXhjZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5
LkV4Y2VwdGlvbih0YWcxLCBbXSk7CisgIGFzc2VydFRydWUoZXhjZXB0aW9uLmlzKHRhZzEpKTsK
KyAgYXNzZXJ0RmFsc2UoZXhjZXB0aW9uLmlzKHRhZzIpKTsKKworICBhc3NlcnRUaHJvd3MoKCkg
PT4gZXhjZXB0aW9uLmlzLmFwcGx5KHt9LCB0YWcxKSwgVHlwZUVycm9yLAorICAgICAgL1dlYkFz
c2VtYmx5LkV4Y2VwdGlvbiBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1FeGNlcHRpb24gb2JqZWN0
Lyk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXhwb3J0
LmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXhwb3J0LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBj
OTY5MGY1Yjg4ZjdlNTQzY2RjOTNkOTFjYzFhODE4M2Q4MzgzYmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1leHBvcnQuanMKQEAgLTAsMCArMSw1MyBAQAor
Ly8gQ29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisK
Ky8vIEZsYWdzOiAtLWV4cG9zZS13YXNtIC0tZXhwZXJpbWVudGFsLXdhc20tZWgKKworbG9hZCgi
d2FzbS1tb2R1bGUtYnVpbGRlci5qcyIpOworCisoZnVuY3Rpb24gVGVzdEV4cG9ydE11bHRpcGxl
KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhj
ZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVy
LmFkZFRhZyhrU2lnX3ZfaSk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDFhIiwga0V4
dGVybmFsVGFnLCBleGNlcHQxKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4MWIiLCBr
RXh0ZXJuYWxUYWcsIGV4Y2VwdDEpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgyIiwg
a0V4dGVybmFsVGFnLCBleGNlcHQyKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50
aWF0ZSgpOworCisgIGFzc2VydFRydWUoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j
YWxsKGluc3RhbmNlLmV4cG9ydHMsICdleDFhJykpOworICBhc3NlcnRUcnVlKE9iamVjdC5wcm90
b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnN0YW5jZS5leHBvcnRzLCAnZXgxYicpKTsKKyAg
YXNzZXJ0VHJ1ZShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5zdGFuY2Uu
ZXhwb3J0cywgJ2V4MicpKTsKKyAgLy8gRklYTUU6IGZpeCBicm9rZW4gdjggd2FzbSBleGNlcHRp
b25zIHRlc3RzCisgIC8vIGFzc2VydFNhbWUoaW5zdGFuY2UuZXhwb3J0cy5leDFhLCBpbnN0YW5j
ZS5leHBvcnRzLmV4MWIpOworICBhc3NlcnROb3RTYW1lKGluc3RhbmNlLmV4cG9ydHMuZXgxYSwg
aW5zdGFuY2UuZXhwb3J0cy5leDIpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RFeHBvcnRPdXRP
ZkJvdW5kcygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAg
bGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBv
cnRPZktpbmQoImV4X29vYiIsIGtFeHRlcm5hbFRhZywgZXhjZXB0ICsgMSk7CisgIGFzc2VydFRo
cm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoKSwgV2ViQXNzZW1ibHkuQ29t
cGlsZUVycm9yLAorICAgICAgL1dlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMzE6IDB0aCBFeHBvcnQgaGFzIGludmFsaWQgZXhjZXB0aW9uIG51bWJlciAxIGl0IGV4Y2Vl
ZHMgdGhlIGV4Y2VwdGlvbiBpbmRleCBzcGFjZSAxLCBuYW1lZCAnZXhfb29iJy8pOworfSkoKTsK
KworKGZ1bmN0aW9uIFRlc3RFeHBvcnRTYW1lTmFtZVR3aWNlKCkgeworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWco
a1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcs
IGV4Y2VwdCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywg
ZXhjZXB0KTsKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0
ZSgpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsCisgICAgICAvV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMDogZHVwbGljYXRlIGV4cG9ydDogJ2V4Jy8pOworfSko
KTsKKworKGZ1bmN0aW9uIFRlc3RFeHBvcnRNb2R1bGVHZXRFeHBvcnRzKCkgeworICBsZXQgYnVp
bGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJu
YWxUYWcsIGV4Y2VwdCk7CisgIGxldCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIudG9CdWZmZXIoKSk7CisKKyAgbGV0IGV4cG9ydHMgPSBXZWJBc3NlbWJseS5Nb2R1bGUu
ZXhwb3J0cyhtb2R1bGUpOworICBhc3NlcnRBcnJheUVxdWFscyhbeyBuYW1lOiAiZXgiLCBraW5k
OiAidGFnIiB9XSwgZXhwb3J0cyk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4
L2V4Y2VwdGlvbnMtZXh0ZXJucmVmLmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXh0
ZXJucmVmLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViYmRhMzdmMTZlYjE1MDMyNDkwOWQ2YjZjNTBmZGFhOGQw
NDhkNTQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1leHRl
cm5yZWYuanMKQEAgLTAsMCArMSw5NiBAQAorLy8gQ29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2pl
Y3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cGVyaW1lbnRhbC13YXNt
LWVoIC0tZXhwZXJpbWVudGFsLXdhc20tcmVmdHlwZXMgLS1hbGxvdy1uYXRpdmVzLXN5bnRheAor
Citsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7Citsb2FkKCJleGNlcHRpb25zLXV0aWxz
LmpzIik7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3duIGV4Y2VwdGlvbiB3aXRo
IGEgbnVsbC1yZWYgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93UmVmTnVsbCgpIHsKKyAgbGV0
IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl9yKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfbnVsbCIs
IGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclJlZk51bGwsIGtFeHRl
cm5SZWZDb2RlLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRG
dW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhj
ZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2Vy
dFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtudWxsXSwgKCkgPT4g
aW5zdGFuY2UuZXhwb3J0cy50aHJvd19udWxsKCkpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2lu
Zy9jYXRjaGluZyB0aGUgbnVsbC1yZWYgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hS
ZWZOdWxsKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBs
ZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3IpOworICBidWlsZGVyLmFkZEZ1bmN0
aW9uKCJ0aHJvd19jYXRjaF9udWxsIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAg
ICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAg
ICAgICAgIGtFeHBySTMyRXF6LAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtSTMyLAorICAgICAg
ICAgICAga0V4cHJSZWZOdWxsLCBrRXh0ZXJuUmVmQ29kZSwKKyAgICAgICAgICAgIGtFeHByVGhy
b3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckVsc2UsCisgICAgICAgICAgICBrRXhwckkzMkNv
bnN0LCA0MiwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0
LAorICAgICAgICAgIGtFeHByUmVmSXNOdWxsLAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtSTMy
LAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMjMsCisgICAgICAgICAga0V4cHJFbHNlLAor
ICAgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAg
ICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0
T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVp
bGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0
cy50aHJvd19jYXRjaF9udWxsKDApKTsKKyAgYXNzZXJ0RXF1YWxzKDQyLCBpbnN0YW5jZS5leHBv
cnRzLnRocm93X2NhdGNoX251bGwoMSkpOworfSkoKTsKKworLy8gVGVzdCB0aGUgZW5jb2Rpbmcg
b2YgYSB0aHJvd24gZXhjZXB0aW9uIHdpdGggYSByZWZlcmVuY2UgdHlwZSB2YWx1ZS4KKyhmdW5j
dGlvbiBUZXN0VGhyb3dSZWZQYXJhbSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9yKTsKKyAg
YnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfcGFyYW0iLCBrU2lnX3ZfcikKKyAgICAgIC5hZGRC
b2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJUaHJvdywgZXhj
ZXB0LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgi
ZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5z
dGFudGlhdGUoKTsKKyAgbGV0IG8gPSBuZXcgT2JqZWN0KCk7CisKKyAgYXNzZXJ0V2FzbVRocm93
cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW29dLCAoKSA9PiBpbnN0YW5jZS5leHBv
cnRzLnRocm93X3BhcmFtKG8pKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFu
Y2UuZXhwb3J0cy5leCwgWzFdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDEp
KTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzIu
M10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oMi4zKSk7CisgIGFzc2VydFdh
c21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFsic3RyIl0sICgpID0+IGlu
c3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oInN0ciIpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhy
b3dpbmcvY2F0Y2hpbmcgdGhlIHJlZmVyZW5jZSB0eXBlIHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RU
aHJvd0NhdGNoUmVmUGFyYW0oKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWls
ZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfcik7CisgIGJ1aWxk
ZXIuYWRkRnVuY3Rpb24oInRocm93X2NhdGNoX3BhcmFtIiwga1NpZ19yX3IpCisgICAgICAuYWRk
Qm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrRXh0ZXJuUmVmQ29kZSwKKyAgICAgICAgICBrRXhw
ckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4
cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIC8vIGZhbGwtdGhyb3VnaAorICAgICAgICBrRXhw
ckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQo
ImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmlu
c3RhbnRpYXRlKCk7CisgIGxldCBvID0gbmV3IE9iamVjdCgpOworCisgIGFzc2VydEVxdWFscyhv
LCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKG8pKTsKKyAgYXNzZXJ0RXF1YWxz
KDEsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oMSkpOworICBhc3NlcnRFcXVh
bHMoMi4zLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDIuMykpOworICBhc3Nl
cnRFcXVhbHMoInN0ciIsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oInN0ciIp
KTsKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1pbXBvcnQu
anMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1pbXBvcnQuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E0
ZjBhMDU2YmZjZjdjYzAzMzVlZGZiMGM3MTJlNTViNWU3MWE0OAotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWltcG9ydC5qcwpAQCAtMCwwICsxLDkwIEBACisv
LyBDb3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKwor
Ly8gRmxhZ3M6IC0tZXhwb3NlLXdhc20gLS1leHBlcmltZW50YWwtd2FzbS1laAorCitsb2FkKCJ3
YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byByZXR1cm4g
YSBuZXcgZXhwb3J0ZWQgZXhjZXB0aW9uIHdpdGggdGhlIHtrU2lnX3Zfdn0gdHlwZQorLy8gc2ln
bmF0dXJlIGZyb20gYW4gYW5vbnltb3VzIG1vZHVsZS4gVGhlIHVuZGVybHlpbmcgbW9kdWxlIGlz
IHRocm93biBhd2F5LgorLy8gVGhpcyBhbGxvd3MgdGVzdHMgdG8gcmVhc29uIHNvbGVseSBhYm91
dCBpbXBvcnRpbmcgZXhjZXB0aW9ucy4KK2Z1bmN0aW9uIE5ld0V4cG9ydGVkVGFnKCkgeworICBs
ZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgdGFnID0gYnVpbGRl
ci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgidCIsIGtFeHRl
cm5hbFRhZywgdGFnKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOwor
ICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy50OworfQorCisoZnVuY3Rpb24gVGVzdEltcG9ydFNp
bXBsZSgpIHsKKyAgbGV0IGV4cG9ydGVkID0gTmV3RXhwb3J0ZWRUYWcoKTsKKyAgbGV0IGJ1aWxk
ZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRk
SW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3Zfdik7CisKKyAgYXNzZXJ0RG9lc05vdFRocm93
KCgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4OiBleHBvcnRlZCB9fSkpOworfSko
KTsKKworKGZ1bmN0aW9uIFRlc3RJbXBvcnRNdWx0aXBsZSgpIHsKKyAgbGV0IGV4cG9ydGVkID0g
TmV3RXhwb3J0ZWRUYWcoKTsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIo
KTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4MSIsIGtT
aWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4
MiIsIGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDMgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7
CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDIp
OworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgzIiwga0V4dGVybmFsVGFnLCBleGNlcHQz
KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXgxOiBleHBv
cnRlZCwgZXgyOiBleHBvcnRlZCB9fSk7CisKKyAgYXNzZXJ0VHJ1ZShleGNlcHQxIDwgZXhjZXB0
MyAmJiBleGNlcHQyIDwgZXhjZXB0Myk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGluc3Rh
bmNlLmV4cG9ydHMuZXgxKTsKKyAgLy8gRklYTUU6IGZpeCBicm9rZW4gdjggd2FzbSBleGNlcHRp
b25zIHRlc3RzCisgIC8vIGFzc2VydFNhbWUoZXhwb3J0ZWQsIGluc3RhbmNlLmV4cG9ydHMuZXgy
KTsKKyAgYXNzZXJ0Tm90U2FtZShleHBvcnRlZCwgaW5zdGFuY2UuZXhwb3J0cy5leDMpOworfSko
KTsKKworKGZ1bmN0aW9uIFRlc3RJbXBvcnRNaXNzaW5nKCkgeworICBsZXQgYnVpbGRlciA9IG5l
dyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRJbXBvcnRl
ZFRhZygibSIsICJleCIsIGtTaWdfdl92KTsKKworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9
PiBidWlsZGVyLmluc3RhbnRpYXRlKHt9KSwgVHlwZUVycm9yLAorICAgICAgL2ltcG9ydCBtOmV4
IG11c3QgYmUgYW4gb2JqZWN0Lyk7CisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxk
ZXIuaW5zdGFudGlhdGUoeyBtOiB7fX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAv
VGFnIGltcG9ydCBtOmV4IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWcvKTsK
K30pKCk7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0VmFsdWVNaXNtYXRjaCgpIHsKKyAgbGV0IGJ1
aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIu
YWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3Zfdik7CisKKyAgYXNzZXJ0VGhyb3dzKAor
ICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IDIzIH19KSwgV2ViQXNz
ZW1ibHkuTGlua0Vycm9yLAorICAgICAgL1RhZyBpbXBvcnQgbTpleCBpcyBub3QgYW4gaW5zdGFu
Y2Ugb2YgV2ViQXNzZW1ibHkuVGFnLyk7CisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1
aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4OiB7fSB9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJv
ciwKKyAgICAgIC9UYWcgaW1wb3J0IG06ZXggaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2Vt
Ymx5LlRhZy8pOworICB2YXIgbW9ua2V5ID0gT2JqZWN0LmNyZWF0ZShOZXdFeHBvcnRlZFRhZygp
KTsKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06
IHsgZXg6IG1vbmtleSB9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9UYWcgaW1w
b3J0IG06ZXggaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhZy8pOworfSkoKTsK
KworKGZ1bmN0aW9uIFRlc3RJbXBvcnRTaWduYXR1cmVNaXNtYXRjaCgpIHsKKyAgbGV0IGV4cG9y
dGVkID0gTmV3RXhwb3J0ZWRUYWcoKTsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgi
LCBrU2lnX3ZfaSk7CisKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0
YW50aWF0ZSh7IG06IHsgZXg6IGV4cG9ydGVkIH19KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAor
ICAgICAgL2ltcG9ydGVkIFRhZyBtOmV4IHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBpbXBv
cnRlZCBXZWJBc3NlbWJseSBUYWcncyBzaWduYXR1cmUvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBU
ZXN0SW1wb3J0TW9kdWxlR2V0SW1wb3J0cygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1v
ZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0i
LCAiZXgiLCBrU2lnX3Zfdik7CisgIGxldCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIudG9CdWZmZXIoKSk7CisKKyAgbGV0IGltcG9ydHMgPSBXZWJBc3NlbWJseS5Nb2R1
bGUuaW1wb3J0cyhtb2R1bGUpOworICBhc3NlcnRBcnJheUVxdWFscyhbeyBtb2R1bGU6ICJtIiwg
bmFtZTogImV4Iiwga2luZDogInRhZyIgfV0sIGltcG9ydHMpOworfSkoKTsKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXJldGhyb3cuanMgYi9KU1Rlc3RzL3dhc20vdjgv
ZXhjZXB0aW9ucy1yZXRocm93LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyMzM5YmVmMmY2OTQyYmQ1ZjZlNWVi
MzVkNzE4OWMyY2FjNTkwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhj
ZXB0aW9ucy1yZXRocm93LmpzCkBAIC0wLDAgKzEsMTQyIEBACisvLyBDb3B5cmlnaHQgMjAxOCB0
aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwb3Nl
LXdhc20gLS1leHBlcmltZW50YWwtd2FzbS1laCAtLWFsbG93LW5hdGl2ZXMtc3ludGF4CisKK2xv
YWQoIndhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKK2xvYWQoImV4Y2VwdGlvbnMtdXRpbHMuanMi
KTsKKworLy8gVGVzdCB0aGF0IHJldGhyb3cgZXhwcmVzc2lvbnMgY2FuIHRhcmdldCBjYXRjaCBi
bG9ja3MuCisoZnVuY3Rpb24gVGVzdFJldGhyb3dJbkNhdGNoKCkgeworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWco
a1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJyZXRocm93MCIsIGtTaWdfdl92KQor
ICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAg
IGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAg
ICAgIGtFeHByUmV0aHJvdywgMCwKKyAgICAgICAga0V4cHJFbmQsCisgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigicmV0aHJvdzEiLCBrU2lnX2lfaSkKKyAgICAgIC5h
ZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVGhy
b3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHBy
TG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJJMzJFcXosCisgICAgICAgICAga0V4cHJJZiwg
a1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJSZXRocm93LCAxLAorICAgICAgICAgIGtFeHBy
RW5kLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIzLAorICAgICAgICBrRXhwckVuZAorICBd
KS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5h
bFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOwor
CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAo
KSA9PiBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3cwKCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGlu
c3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5y
ZXRocm93MSgwKSk7CisgIGFzc2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93
MSgxKSk7Cit9KSgpOworCisvLyBUZXN0IHRoYXQgcmV0aHJvdyBleHByZXNzaW9ucyBjYW4gdGFy
Z2V0IGNhdGNoLWFsbCBibG9ja3MuCisoZnVuY3Rpb24gVGVzdFJldGhyb3dJbkNhdGNoQWxsKCkg
eworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0
ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJyZXRo
cm93MCIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dh
c21Wb2lkLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRj
aEFsbCwKKyAgICAgICAgICBrRXhwclJldGhyb3csIDAsCisgICAgICAgIGtFeHByRW5kLAorICBd
KS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInJldGhyb3cxIiwga1NpZ19p
X2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAg
ICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAg
ICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICBr
RXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclJldGhyb3csIDEsCisgICAgICAg
ICAga0V4cHJFbmQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMjMsCisgICAgICAgIGtFeHBy
RW5kCisgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwg
a0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRp
YXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5l
eCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMucmV0aHJvdzAoKSk7CisgIGFzc2VydFdhc21U
aHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5l
eHBvcnRzLnJldGhyb3cxKDApKTsKKyAgYXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRz
LnJldGhyb3cxKDEpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhhdCByZXRocm93IGV4cHJlc3Npb24g
cHJvcGVybHkgdGFyZ2V0IHRoZSBjb3JyZWN0IHN1cnJvdW5kaW5nIHRyeQorLy8gYmxvY2sgZXZl
biBpbiB0aGUgcHJlc2VuY2Ugb2YgbXVsdGlwbGUgaGFuZGxlcnMgYmVpbmcgaW52b2x2ZWQuCiso
ZnVuY3Rpb24gVGVzdFJldGhyb3dOZXN0ZWQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21N
b2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3Yp
OworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5h
ZGRGdW5jdGlvbigicmV0aHJvd19uZXN0ZWQiLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2Vw
dDIsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDIsCisgICAgICAgICAga0V4cHJUcnksIGtX
YXNtSTMyLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MSwKKyAgICAgICAgICBrRXhw
ckNhdGNoLCBleGNlcHQxLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDAsCisgICAgICAgICAgICBrRXhwckkzMkVxLAorICAgICAgICAg
ICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAgICBrRXhwclJldGhyb3csIDEsCisg
ICAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAg
ICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAg
ICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAga0V4cHJSZXRocm93LCAy
LAorICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyMywK
KyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJFbmQsCisgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4MSIsIGtFeHRlcm5hbFRhZywgZXhjZXB0
MSk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2Vw
dDIpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0
V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leDEsIFtdLCAoKSA9PiBpbnN0
YW5jZS5leHBvcnRzLnJldGhyb3dfbmVzdGVkKDApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0
YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leDIsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnJl
dGhyb3dfbmVzdGVkKDEpKTsKKyAgYXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnJl
dGhyb3dfbmVzdGVkKDIpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhhdCBhbiBleGNlcHRpb24gYmVp
bmcgcmV0aHJvdyBjYW4gYmUgY2F1Z2h0IGJ5IGFub3RoZXIgbG9jYWwgY2F0Y2gKKy8vIGJsb2Nr
IGluIHRoZSBzYW1lIGZ1bmN0aW9uIHdpdGhvdXQgZXZlciB1bndpbmRpbmcgdGhlIGFjdGl2YXRp
b24uCisoZnVuY3Rpb24gVGVzdFJldGhyb3dSZWNhdGNoKCkgeworICBsZXQgYnVpbGRlciA9IG5l
dyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJyZXRocm93X3JlY2F0Y2giLCBrU2lnX2lf
aSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAg
ICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAg
ICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAs
CisgICAgICAgICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9p
ZCwKKyAgICAgICAgICAgICAga0V4cHJSZXRocm93LCAyLAorICAgICAgICAgICAga0V4cHJFbmQs
CisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCA0MiwKKyAgICAgICAgICBrRXhwckNhdGNoLCBl
eGNlcHQsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyMywKKyAgICAgICAgICBrRXhwckVu
ZCwKKyAgICAgICAga0V4cHJFbmQsCisgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRF
eHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2Ug
PSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5l
eHBvcnRzLnJldGhyb3dfcmVjYXRjaCgwKSk7CisgIGFzc2VydEVxdWFscyg0MiwgaW5zdGFuY2Uu
ZXhwb3J0cy5yZXRocm93X3JlY2F0Y2goMSkpOworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS92OC9leGNlcHRpb25zLXNoYXJlZC5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25z
LXNoYXJlZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTJmNWJhOGExMzcxNjFmZjc1Nzc1YTRjOWUyMTBmOTBj
ZDI4ODM1Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtc2hh
cmVkLmpzCkBAIC0wLDAgKzEsMTUzIEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVj
dCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwb3NlLXdhc20gLS1leHBl
cmltZW50YWwtd2FzbS1laAorCitsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7CisKKy8v
IEhlbHBlciBmdW5jdGlvbiB0byByZXR1cm4gYSBuZXcgZXhwb3J0ZWQgZXhjZXB0aW9uIHdpdGgg
dGhlIHtrU2lnX3Zfdn0gdHlwZQorLy8gc2lnbmF0dXJlIGZyb20gYW4gYW5vbnltb3VzIG1vZHVs
ZS4gVGhlIHVuZGVybHlpbmcgbW9kdWxlIGlzIHRocm93biBhd2F5LgorZnVuY3Rpb24gTmV3RXhw
b3J0ZWRFeGNlcHRpb24oKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVy
KCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIu
YWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3Rh
bmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy5l
eDsKK30KKworLy8gQ2hlY2sgdGhhdCBhbiBpbnN0YW5jZSBtYXRjaGVzIGFuIGV4Y2VwdGlvbiB0
aHJvd24gYnkgaXRzZWxmLCBldmVuIHdoZW4gdGhlCisvLyBleGNlcHRpb24gaXMgcmUtdGhyb3du
IGJ5IGEgcmVndWxhciBKYXZhU2NyaXB0IGZ1bmN0aW9uLgorKGZ1bmN0aW9uIFRlc3RTaW5nbGVJ
bnN0YW5jZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAg
bGV0IHNpZ19pbmRleCA9IGJ1aWxkZXIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBmdW4gPSBi
dWlsZGVyLmFkZEltcG9ydCgibSIsICJmIiwgc2lnX2luZGV4KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1
aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBr
U2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0Cisg
ICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoIiwga1Np
Z192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisg
ICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGZ1biwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhj
ZXB0LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGV4
X29iaiA9IG5ldyBFcnJvcigibXkgZXhjZXB0aW9uIik7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxk
ZXIuaW5zdGFudGlhdGUoeyBtOiB7IGY6IGZ1bmN0aW9uKCkgeyB0aHJvdyBleF9vYmogfX19KTsK
KworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvdygpLCBXZWJBc3Nl
bWJseS5FeGNlcHRpb24pOworICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UuZXhw
b3J0cy5jYXRjaCgpLCBleF9vYmopOworICB0cnkgeworICAgIGluc3RhbmNlLmV4cG9ydHMudGhy
b3coKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGV4X29iaiA9IGU7CisgIH0KKyAgYXNzZXJ0RG9l
c05vdFRocm93KCgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2goKSk7Cit9KSgpOworCisvLyBD
aGVjayB0aGF0IHR3byBpbnN0YW5jZXMgZGlzdGluZ3Vpc2ggdGhlaXIgaW5kaXZpZHVhbCBleGNl
cHRpb25zIGlmIHRoZXkgYXJlCisvLyBub3Qgc2hhcmVkLCBldmVuIHdoZW4gZGVjbGFyZWQgYnkg
dGhlIHNhbWUgdW5kZXJseWluZyBtb2R1bGUuCisoZnVuY3Rpb24gVGVzdE11bHRpSW5zdGFuY2VO
b25TaGFyZWQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7Cisg
IGxldCBzaWdfaW5kZXggPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X3YpOworICBsZXQgZnVuID0g
YnVpbGRlci5hZGRJbXBvcnQoIm0iLCAiZiIsIHNpZ19pbmRleCk7CisgIGxldCBleGNlcHQgPSBi
dWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93Iiwg
a1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdAor
ICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaCIsIGtT
aWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAor
ICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBmdW4sCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4
Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBl
eF9vYmogPSBuZXcgRXJyb3IoIm15IGV4Y2VwdGlvbiIpOworICBsZXQgaW5zdGFuY2UxID0gYnVp
bGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZjogYXNzZXJ0VW5yZWFjaGFibGUgfX0pOworICBsZXQg
aW5zdGFuY2UyID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZjogZnVuY3Rpb24oKSB7IHRo
cm93IGV4X29iaiB9fX0pOworCisgIGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZTEuZXhwb3J0
cy50aHJvdygpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICBhc3NlcnRUaHJvd3NFcXVhbHMo
KCkgPT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2goKSwgZXhfb2JqKTsKKyAgdHJ5IHsKKyAgICBp
bnN0YW5jZTEuZXhwb3J0cy50aHJvdygpOworICB9IGNhdGNoIChlKSB7CisgICAgZXhfb2JqID0g
ZTsKKyAgfQorICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0
Y2goKSwgZXhfb2JqKTsKK30pKCk7CisKKy8vIENoZWNrIHRoYXQgdHdvIGluc3RhbmNlcyBtYXRj
aCB0aGVpciBleGNlcHRpb25zIGlmIHRoZXkgYXJlIHNoYXJlZCBwcm9wZXJseSwKKy8vIGV2ZW4g
aWYgdGhlIGxvY2FsIGV4Y2VwdGlvbiBpbmRleCBvZiBleHBvcnQgYW5kIGltcG9ydCBpcyBkaWZm
ZXJlbnQuCisoZnVuY3Rpb24gVGVzdE11bHRpSW5zdGFuY2VTaGFyZWQoKSB7CisgIGxldCBidWls
ZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBzaWdfaW5kZXggPSBidWlsZGVy
LmFkZFR5cGUoa1NpZ192X3YpOworICBsZXQgZnVuID0gYnVpbGRlci5hZGRJbXBvcnQoIm0iLCAi
ZiIsIHNpZ19pbmRleCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygi
bSIsICJleDEiLCBrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgyIiwga0V4dGVybmFsVGFnLCBl
eGNlcHQyKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfdikKKyAgICAg
IC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MgorICAgICAgXSkuZXhwb3J0
RnVuYygpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaCIsIGtTaWdfdl92KQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHBy
Q2FsbEZ1bmN0aW9uLCBmdW4sCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAgICAg
IGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgZXhfb2JqID0gbmV3IEVy
cm9yKCJteSBleGNlcHRpb24iKTsKKyAgbGV0IGluc3RhbmNlMSA9IGJ1aWxkZXIuaW5zdGFudGlh
dGUoeyBtOiB7IGY6IGFzc2VydFVucmVhY2hhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXgxOiBOZXdFeHBvcnRlZEV4Y2VwdGlvbigpIH19KTsKKyAg
bGV0IGluc3RhbmNlMiA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGY6IGZ1bmN0aW9uKCkg
eyB0aHJvdyBleF9vYmogfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4MTogaW5zdGFuY2UxLmV4cG9ydHMuZXgyIH19KTsKKworICBhc3NlcnRUaHJvd3Mo
KCkgPT4gaW5zdGFuY2UxLmV4cG9ydHMudGhyb3coKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsK
KyAgYXNzZXJ0VGhyb3dzRXF1YWxzKCgpID0+IGluc3RhbmNlMi5leHBvcnRzLmNhdGNoKCksIGV4
X29iaik7CisgIHRyeSB7CisgICAgaW5zdGFuY2UxLmV4cG9ydHMudGhyb3coKTsKKyAgfSBjYXRj
aCAoZSkgeworICAgIGV4X29iaiA9IGU7CisgIH0KKyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+
IGluc3RhbmNlMi5leHBvcnRzLmNhdGNoKCkpOworfSkoKTsKKworLy8gQ2hlY2sgdGhhdCB0d28g
aW5zdGFuY2VzIGJhc2VkIG9uIGRpZmZlcmVudCBtb2R1bGVzIG1hdGNoIHRoZWlyIGV4Y2VwdGlv
bnMgaWYKKy8vIHRoZXkgYXJlIHNoYXJlZCBwcm9wZXJseSwgZXZlbiBpZiB0aGUgbG9jYWwgZXhj
ZXB0aW9uIGluZGV4IGlzIGRpZmZlcmVudC4KKyhmdW5jdGlvbiBUZXN0TXVsdGlNb2R1bGVTaGFy
ZWQoKSB7CisgIGxldCBidWlsZGVyMSA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQg
ZXhjZXB0MSA9IGJ1aWxkZXIxLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVp
bGRlcjEuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlcjEuYWRkRXhwb3J0T2ZLaW5kKCJleCIs
IGtFeHRlcm5hbFRhZywgZXhjZXB0Mik7CisgIGJ1aWxkZXIxLmFkZEZ1bmN0aW9uKCJ0aHJvdyIs
IGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRocm93LCBleGNlcHQy
CisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBidWlsZGVyMiA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgc2lnX2luZGV4ID0gYnVpbGRlcjIuYWRkVHlwZShrU2lnX3Zfdik7
CisgIGxldCBmdW4gPSBidWlsZGVyMi5hZGRJbXBvcnQoIm0iLCAiZiIsIHNpZ19pbmRleCk7Cisg
IGxldCBleGNlcHQgPSBidWlsZGVyMi5hZGRJbXBvcnRlZFRhZygibSIsICJleCIsIGtTaWdfdl92
KTsKKyAgYnVpbGRlcjIuYWRkRnVuY3Rpb24oImNhdGNoIiwga1NpZ192X3YpCisgICAgICAuYWRk
Qm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxs
RnVuY3Rpb24sIGZ1biwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhw
ckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGV4X29iaiA9IG5ldyBFcnJvcigi
bXkgZXhjZXB0aW9uIik7CisgIGxldCBpbnN0YW5jZTEgPSBidWlsZGVyMS5pbnN0YW50aWF0ZSgp
OworICBsZXQgaW5zdGFuY2UyID0gYnVpbGRlcjIuaW5zdGFudGlhdGUoeyBtOiB7IGY6IGZ1bmN0
aW9uKCkgeyB0aHJvdyBleF9vYmogfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleDogaW5zdGFuY2UxLmV4cG9ydHMuZXggfX0pOworCisgIGFzc2VydFRo
cm93cygoKSA9PiBpbnN0YW5jZTEuZXhwb3J0cy50aHJvdygpLCBXZWJBc3NlbWJseS5FeGNlcHRp
b24pOworICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2go
KSwgZXhfb2JqKTsKKyAgdHJ5IHsKKyAgICBpbnN0YW5jZTEuZXhwb3J0cy50aHJvdygpOworICB9
IGNhdGNoIChlKSB7CisgICAgZXhfb2JqID0gZTsKKyAgfQorICBhc3NlcnREb2VzTm90VGhyb3co
KCkgPT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2goKSk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtdHlwZS1yZWZsZWN0aW9uLmpzIGIvSlNUZXN0cy93YXNt
L3Y4L2V4Y2VwdGlvbnMtdHlwZS1yZWZsZWN0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0YzIwZWRhZThl
MDIzNWFiZjdjMmUxOWViYzcxODBmYWIwOGNmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3dhc20vdjgvZXhjZXB0aW9ucy10eXBlLXJlZmxlY3Rpb24uanMKQEAgLTAsMCArMSw0NyBAQAor
Ly8gQ29weXJpZ2h0IDIwMjEgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisK
Ky8vIEZsYWdzOiAtLWV4cGVyaW1lbnRhbC13YXNtLWVoIC0tZXhwZXJpbWVudGFsLXdhc20tdHlw
ZS1yZWZsZWN0aW9uCisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKKworbGV0IHRl
c3RjYXNlcyA9IFsKK3t0eXBlczoge3BhcmFtZXRlcnM6W119LCBzaWc6IGtTaWdfdl92fSwKK3t0
eXBlczoge3BhcmFtZXRlcnM6WyJpMzIiXX0sIHNpZzoga1NpZ192X2l9LAore3R5cGVzOiB7cGFy
YW1ldGVyczpbImk2NCJdfSwgc2lnOiBrU2lnX3ZfbH0sCit7dHlwZXM6IHtwYXJhbWV0ZXJzOlsi
ZjY0IiwgImY2NCIsICJpMzIiXX0sIHNpZzoga1NpZ192X2RkaX0sCit7dHlwZXM6IHtwYXJhbWV0
ZXJzOlsiZjMyIl19LCBzaWc6IGtTaWdfdl9mfSwKK107CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0
KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworCisgIHRlc3Rj
YXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGV4cGVjdGVkLCBpKSB7CisgICAgbGV0IGV4Y2VwdCA9IGJ1
aWxkZXIuYWRkVGFnKGV4cGVjdGVkLnNpZyk7CisgICAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQo
ImV4IiArIGksIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgfSk7CisKKyAgbGV0IGluc3RhbmNl
ID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICB0ZXN0Y2FzZXMuZm9yRWFjaChmdW5jdGlvbihl
eHBlY3RlZCwgaSkgeworICAgIGFzc2VydEVxdWFscyhpbnN0YW5jZS5leHBvcnRzWyJleCIgKyBp
XS50eXBlKCksIGV4cGVjdGVkLnR5cGVzKTsKKyAgfSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVz
dEltcG9ydEV4cG9ydCgpIHsKKworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgaW1wb3J0cyA9IHttOiB7fX07CisKKyAgdGVzdGNhc2VzLmZvckVhY2goZnVu
Y3Rpb24oZXhwZWN0ZWQsIGkpIHsKKyAgICBsZXQgdCA9IG5ldyBXZWJBc3NlbWJseS5UYWcoZXhw
ZWN0ZWQudHlwZXMpOworICAgIGxldCBpbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0i
LCAiZXgiICsgaSwgZXhwZWN0ZWQuc2lnKTsKKyAgICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgi
ZXgiICsgaSwga0V4dGVybmFsVGFnLCBpbmRleCk7CisgICAgaW1wb3J0cy5tWyJleCIgKyBpXSA9
IHQ7CisgIH0pOworCisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoaW1wb3J0
cyk7CisgIHRlc3RjYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGV4cGVjdGVkLCBpKSB7CisgICAgYXNz
ZXJ0RXF1YWxzKGluc3RhbmNlLmV4cG9ydHNbImV4IiArIGldLnR5cGUoKSwgZXhwZWN0ZWQudHlw
ZXMpOworICB9KQorfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25z
LXV0aWxzLmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtdXRpbHMuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGJlMTkxOWRlZTY4MDMyM2NlYjA5Mzk2NGZlNjFhOTVmMDZkZTY5NwotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXV0aWxzLmpzCkBAIC0wLDAgKzEsMjcg
QEAKKy8vIENvcHlyaWdodCAyMDE4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorCisvLyBGbGFnczogLS1hbGxvdy1uYXRpdmVzLXN5bnRheAorCisvLyBUaGlzIGZpbGUgaXMg
aW50ZW5kZWQgdG8gYmUgbG9hZGVkIGJ5IG90aGVyIHRlc3RzIHRvIHByb3ZpZGUgdXRpbGl0eSBt
ZXRob2RzCisvLyByZXF1aXJpbmcgbmF0aXZlcyBzeW50YXggKGFuZCBoZW5jZSBub3Qgc3VpdGVk
IGZvciB0aGUgbWpzdW5pdC5qcyBmaWxlKS4KKworZnVuY3Rpb24gYXNzZXJ0V2FzbVRocm93cyhp
bnN0YW5jZSwgdGFnLCB2YWx1ZXMsIGNvZGUpIHsKKyAgdHJ5IHsKKyAgICBpZiAodHlwZW9mIGNv
ZGUgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgIGNvZGUoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ZXZhbChjb2RlKTsKKyAgICB9CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBhc3NlcnRJbnN0YW5jZW9m
KGUsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgICAgYXNzZXJ0VHJ1ZShlLmlzKHRhZykpOwor
ICAgIGFzc2VydEVxdWFscyh2YWx1ZXMubGVuZ3RoLCB0YWcudHlwZSgpLnBhcmFtZXRlcnMubGVu
Z3RoKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7ICsraSkKKyAgICAg
IGFzc2VydEVxdWFscyh2YWx1ZXNbaV0sIGUuZ2V0QXJnKHRhZywgaSkpOworICAgIHJldHVybjsg
IC8vIFN1Y2Nlc3MuCisgIH0KKyAgdGhyb3cgbmV3IE1qc1VuaXRBc3NlcnRpb25FcnJvcignRGlk
IG5vdCB0aHJvdyBleHBlY3RlZCA8JyArIHRhZyArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJz4gd2l0aCB2YWx1ZXM6ICcgKyB2YWx1ZXMpOworfQpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMuanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43OTE1NTA0NTA0OTg4MTczMDdkMjk0NzUwMmFiMmFmYmMwNGM2MmE0Ci0t
LSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMuanMKQEAgLTAsMCAr
MSwxMDg3IEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwb3NlLXdhc20gLS1leHBlcmltZW50YWwtd2FzbS1l
aCAtLWFsbG93LW5hdGl2ZXMtc3ludGF4CisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxkZXIuanMi
KTsKK2xvYWQoImV4Y2VwdGlvbnMtdXRpbHMuanMiKTsKKworLy8gVGhlIGZvbGxvd2luZyBtZXRo
b2QgZG9lc24ndCBhdHRlbXB0IHRvIGNhdGNoIGFuIHJhaXNlZCBleGNlcHRpb24uCisoZnVuY3Rp
b24gVGVzdFRocm93U2ltcGxlKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVp
bGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWls
ZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19pZl9wYXJhbV9ub3RfemVybyIsIGtTaWdfaV9pKQorICAg
ICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckkz
MkNvbnN0LCAwLAorICAgICAgICBrRXhwckkzMk5lLAorICAgICAgICBrRXhwcklmLCBrV2FzbVZv
aWQsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICBrRXhwckVuZCwKKyAg
ICAgICAga0V4cHJJMzJDb25zdCwgMQorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVy
LmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0
YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFu
Y2UuZXhwb3J0cy50aHJvd19pZl9wYXJhbV9ub3RfemVybygwKSk7CisgIGFzc2VydFdhc21UaHJv
d3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBv
cnRzLnRocm93X2lmX3BhcmFtX25vdF96ZXJvKDEwKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5z
dGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRo
cm93X2lmX3BhcmFtX25vdF96ZXJvKC0xKSk7Cit9KSgpOworCisvLyBUZXN0IHRoYXQgZW1wdHkg
dHJ5L2NhdGNoIGJsb2NrcyB3b3JrLgorKGZ1bmN0aW9uIFRlc3RDYXRjaEVtcHR5QmxvY2tzKCkg
eworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0
ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRj
aF9lbXB0eV90cnkiLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJU
cnksIGtXYXNtVm9pZCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhw
ckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5p
bnN0YW50aWF0ZSgpOworCisgIGFzc2VydERvZXNOb3RUaHJvdyhpbnN0YW5jZS5leHBvcnRzLmNh
dGNoX2VtcHR5X3RyeSk7Cit9KSgpOworCisvLyBOb3cgdGhhdCB3ZSBrbm93IHRocm93aW5nIHdv
cmtzLCB3ZSB0ZXN0IGNhdGNoaW5nIHRoZSBleGNlcHRpb25zIHdlIHJhaXNlLgorKGZ1bmN0aW9u
IFRlc3RDYXRjaFNpbXBsZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRl
ci5hZGRGdW5jdGlvbigic2ltcGxlX3Rocm93X2NhdGNoX3RvXzBfMSIsIGtTaWdfaV9pKQorICAg
ICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4
cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICBrRXhwcklm
LCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAg
a0V4cHJFbmQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgNDIsCisgICAgICAgIGtFeHByQ2F0
Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyMywKKyAgICAgICAga0V4cHJF
bmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0
YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5zaW1wbGVf
dGhyb3dfY2F0Y2hfdG9fMF8xKDApKTsKKyAgYXNzZXJ0RXF1YWxzKDQyLCBpbnN0YW5jZS5leHBv
cnRzLnNpbXBsZV90aHJvd19jYXRjaF90b18wXzEoMSkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRl
c3RUcmFwTm90Q2F1Z2h0KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd1bnJlYWNoYWJsZV9pbl90cnknLCBrU2lnX3Zf
dikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAg
ICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICBr
RXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVy
Lmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0VHJhcHMoa1RyYXBVbnJlYWNoYWJsZSwgKCkgPT4g
aW5zdGFuY2UuZXhwb3J0cy51bnJlYWNoYWJsZV9pbl90cnkoKSk7Cit9KSgpOworCisoZnVuY3Rp
b24gVGVzdFRyYXBJbkNhbGxlZU5vdENhdWdodCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2Fz
bU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGZ1bmNfZGl2ID0gYnVpbGRlci5hZGRGdW5jdGlvbign
ZGl2Jywga1NpZ19pX2lpKS5hZGRCb2R5KFsKKyAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgIGtF
eHByTG9jYWxHZXQsIDEsCisgICAga0V4cHJJMzJEaXZVCisgIF0pOworICBidWlsZGVyLmFkZEZ1
bmN0aW9uKCd0cmFwX2luX2NhbGxlZScsIGtTaWdfaV9paSkKKyAgICAgIC5hZGRCb2R5KFsKKyAg
ICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisg
ICAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwg
ZnVuY19kaXYuaW5kZXgsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJJ
MzJDb25zdCwgMTEsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7Cisg
IGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMo
MywgaW5zdGFuY2UuZXhwb3J0cy50cmFwX2luX2NhbGxlZSg3LCAyKSk7CisgIGFzc2VydFRyYXBz
KGtUcmFwRGl2QnlaZXJvLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRyYXBfaW5fY2FsbGVlKDEs
IDApKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0VHJhcFZpYUpTTm90Q2F1Z2h0KCkgeworICBs
ZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgaW1wID0gYnVpbGRl
ci5hZGRJbXBvcnQoJ2ltcCcsICdvcnQnLCBrU2lnX2lfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rp
b24oJ2RpdicsIGtTaWdfaV9paSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2Nh
bEdldCwgMCwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAga0V4cHJJMzJEaXZV
CisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ2NhbGxfaW1w
b3J0Jywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2Fz
bUkzMiwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgaW1wLAorICAgICAgICBrRXhwckNh
dGNoQWxsLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDExLAorICAgICAgICBrRXhwckVuZAor
ICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgZXhjZXB0aW9uID0gdW5kZWZpbmVkOworICBs
ZXQgaW5zdGFuY2U7CisgIGZ1bmN0aW9uIGpzX2ltcG9ydCgpIHsKKyAgICB0cnkgeworICAgICAg
aW5zdGFuY2UuZXhwb3J0cy5kaXYoMSwgMCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgZXhj
ZXB0aW9uID0gZTsKKyAgICB9CisgICAgdGhyb3cgZXhjZXB0aW9uOworICB9CisgIGluc3RhbmNl
ID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7aW1wOiB7b3J0OiBqc19pbXBvcnR9fSk7CisKKyAgbGV0
IGNhdWdodCA9IHVuZGVmaW5lZDsKKyAgdHJ5IHsKKyAgICBsZXQgcmVzID0gaW5zdGFuY2UuZXhw
b3J0cy5jYWxsX2ltcG9ydCgpOworICAgIGFzc2VydFVucmVhY2hhYmxlKCdjYWxsX2ltcG9ydCBz
aG91bGQgdHJhcCwgYnV0IHJldHVybmVkIHdpdGggJyArIHJlcyk7CisgIH0gY2F0Y2ggKGUpIHsK
KyAgICBjYXVnaHQgPSBlOworICB9CisgIGFzc2VydFNhbWUoZXhjZXB0aW9uLCBjYXVnaHQpOwor
ICBhc3NlcnRUaHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsX2ltcG9ydCwgV2ViQXNzZW1ibHku
UnVudGltZUVycm9yLCBrVHJhcE1zZ3Nba1RyYXBEaXZCeVplcm9dKTsKK30pKCk7CisKKyhmdW5j
dGlvbiBUZXN0TWFudWFsbHlUaHJvd25SdW50aW1lRXJyb3JDYXVnaHQoKSB7CisgIGxldCBidWls
ZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBpbXAgPSBidWlsZGVyLmFkZElt
cG9ydCgnaW1wJywgJ29ydCcsIGtTaWdfaV92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbignY2Fs
bF9pbXBvcnQnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnks
IGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBpbXAsCisgICAgICAgIGtF
eHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMTEsCisgICAgICAgIGtFeHBy
RW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGZ1bmN0aW9uIHRocm93X2V4YygpIHsKKyAg
ICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKCdNeSB1c2VyIHRleHQnKTsKKyAg
fQorICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHtpbXA6IHtvcnQ6IHRocm93
X2V4Y319KTsKKworICBhc3NlcnRFcXVhbHMoMTEsIGluc3RhbmNlLmV4cG9ydHMuY2FsbF9pbXBv
cnQoKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEV4bldpdGhXYXNtUHJvdG9Ob3RDYXVnaHQo
KSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNl
cHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBpbXAgPSBidWlsZGVyLmFkZElt
cG9ydCgnaW1wJywgJ29ydCcsIGtTaWdfdl92KTsKKyAgbGV0IHRocm93X2ZuID0gYnVpbGRlci5h
ZGRGdW5jdGlvbigndGhyb3cnLCBrU2lnX3ZfdikKKyAgICAgICAgICAgICAgICAgICAgIC5hZGRC
b2R5KFtrRXhwclRocm93LCBleGNlcHRdKQorICAgICAgICAgICAgICAgICAgICAgLmV4cG9ydEZ1
bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfdl92KQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICAvLyBDYWxsaW5nICJ0aHJvdyIgZGlyZWN0bHkgc2hvdWxkIHByb2R1
Y2UgdGhlIGV4cGVjdGVkIGV4Y2VwdGlvbi4KKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwK
KyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgdGhyb3dfZm4uaW5kZXgsCisgICAgICAgIGtF
eHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICAgIC8vIENhbGxpbmcg
dGhyb3VnaCBKUyBwcm9kdWNlcyBhIHdyYXBwZWQgZXhjZXB0aW9ucyB3aGljaCBkb2VzIG5vdCBt
YXRjaAorICAgICAgICAvLyB0aGUgY2F0Y2guCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQs
CisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGltcCwKKyAgICAgICAga0V4cHJDYXRjaCwg
ZXhjZXB0LAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQg
aW5zdGFuY2U7CisgIGxldCB3cmFwcGVkX2V4bjsKKyAgZnVuY3Rpb24ganNfaW1wb3J0KCkgewor
ICAgIHRyeSB7CisgICAgICBpbnN0YW5jZS5leHBvcnRzLnRocm93KCk7CisgICAgfSBjYXRjaCAo
ZSkgeworICAgICAgd3JhcHBlZF9leG4gPSBuZXcgRXJyb3IoKTsKKyAgICAgIHdyYXBwZWRfZXhu
Ll9fcHJvdG9fXyA9IGU7CisgICAgICB0aHJvdyB3cmFwcGVkX2V4bjsKKyAgICB9CisgIH0KKyAg
aW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHtpbXA6IHtvcnQ6IGpzX2ltcG9ydH19KTsK
KyAgbGV0IGNhdWdodCA9IHVuZGVmaW5lZDsKKyAgdHJ5IHsKKyAgICBpbnN0YW5jZS5leHBvcnRz
LnRlc3QoKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGNhdWdodCA9IGU7CisgIH0KKyAgYXNzZXJ0
VHJ1ZSghIWNhdWdodCwgJ3Nob3VsZCBoYXZlIHRyYXBwZWQnKTsKKyAgYXNzZXJ0RXF1YWxzKGNh
dWdodCwgd3JhcHBlZF9leG4pOworICBhc3NlcnRJbnN0YW5jZW9mKGNhdWdodC5fX3Byb3RvX18s
IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdFN0YWNrT3Zl
cmZsb3dOb3RDYXVnaHQoKSB7CisgIGZ1bmN0aW9uIHN0YWNrX292ZXJmbG93KCkgeworICAgIC8v
JVRocm93U3RhY2tPdmVyZmxvdygpOworICB9CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1
bGVCdWlsZGVyKCk7CisgIGxldCBzaWdfdl92ID0gYnVpbGRlci5hZGRUeXBlKGtTaWdfdl92KTsK
KyAgbGV0IGtTdGFja092ZXJmbG93ID0gYnVpbGRlci5hZGRJbXBvcnQoJycsICdzdGFja19vdmVy
ZmxvdycsIHNpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0cnlfc3RhY2tfb3ZlcmZs
b3cnLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNt
Vm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgMCwKKyAgICAgICAga0V4cHJDYXRj
aEFsbCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGlu
c3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7Jyc6IHsnc3RhY2tfb3ZlcmZsb3cnOiBzdGFj
a19vdmVyZmxvd319KTsKKworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50
cnlfc3RhY2tfb3ZlcmZsb3coKSwKKyAgICAgIFJhbmdlRXJyb3IsICdNYXhpbXVtIGNhbGwgc3Rh
Y2sgc2l6ZSBleGNlZWRlZCcpOworfSk7CisvLyBGSVhNRTogbmVlZHMgc3RhY2sgb3ZlcmZsb3cg
aGVscGVyCisvLygpOworCisvLyBUZXN0IHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHdoaWNoIGV4
Y2VwdGlvbiB3YXMgdGhyb3duIGJ5IHVzaW5nIGEgY2FzY2FkZWQKKy8vIHNlcXVlbmNlIG9mIG5l
c3RlZCB0cnkgYmxvY2tzIHdpdGggYSBzaW5nbGUgY2F0Y2ggYmxvY2sgZWFjaC4KKyhmdW5jdGlv
biBUZXN0Q2F0Y2hDb21wbGV4MSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxl
dCBleGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MyA9IGJ1
aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2hfY29t
cGxleCIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dh
c21JMzIsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJM
b2NhbEdldCwgMCwKKyAgICAgICAgICAgIGtFeHBySTMyRXF6LAorICAgICAgICAgICAga0V4cHJJ
Ziwga1dhc21Wb2lkLAorICAgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQxLAorICAgICAg
ICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAg
ICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgICAgICBrRXhwckkzMkVxLAorICAg
ICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgICAga0V4cHJUaHJv
dywgZXhjZXB0MiwKKyAgICAgICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAgICAgIGtF
eHByVGhyb3csIGV4Y2VwdDMsCisgICAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAg
a0V4cHJFbmQsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICAgIGtFeHBy
Q2F0Y2gsIGV4Y2VwdDEsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAzLAorICAgICAgICAg
IGtFeHByRW5kLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQyLAorICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOwor
ICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDMpOwor
ICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxz
KDMsIGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hfY29tcGxleCgwKSk7CisgIGFzc2VydEVxdWFscyg0
LCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoX2NvbXBsZXgoMSkpOworICBhc3NlcnRXYXNtVGhyb3dz
KGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0
cy5jYXRjaF9jb21wbGV4KDIpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhhdCB3ZSBjYW4gZGlzdGlu
Z3Vpc2ggd2hpY2ggZXhjZXB0aW9uIHdhcyB0aHJvd24gYnkgdXNpbmcgYSBzaW5nbGUKKy8vIHRy
eSBibG9jayB3aXRoIG11bHRpcGxlIGFzc29jaWF0ZWQgY2F0Y2ggYmxvY2tzIGluIHNlcXVlbmNl
LgorKGZ1bmN0aW9uIFRlc3RDYXRjaENvbXBsZXgyKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBX
YXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdf
dl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBl
eGNlcHQzID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9u
KCJjYXRjaF9jb21wbGV4Iiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtF
eHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAg
IGtFeHBySTMyRXF6LAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAg
IGtFeHByVGhyb3csIGV4Y2VwdDEsCisgICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAg
a0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAg
ICAgICBrRXhwckkzMkVxLAorICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAg
ICAgICAgICBrRXhwclRocm93LCBleGNlcHQyLAorICAgICAgICAgICAga0V4cHJFbHNlLAorICAg
ICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQzLAorICAgICAgICAgICAga0V4cHJFbmQsCisg
ICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAg
a0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAzLAorICAgICAg
ICBrRXhwckNhdGNoLCBleGNlcHQyLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDQsCisgICAg
ICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9y
dE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDMpOworICBsZXQgaW5zdGFuY2UgPSBi
dWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDMsIGluc3RhbmNlLmV4cG9y
dHMuY2F0Y2hfY29tcGxleCgwKSk7CisgIGFzc2VydEVxdWFscyg0LCBpbnN0YW5jZS5leHBvcnRz
LmNhdGNoX2NvbXBsZXgoMSkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5j
ZS5leHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9jb21wbGV4KDIp
KTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIHdpdGggbXVsdGlwbGUg
dmFsdWVzLgorKGZ1bmN0aW9uIFRlc3RUaHJvd011bHRpcGxlVmFsdWVzKCkgeworICBsZXQgYnVp
bGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X2lpKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfMV8yIiwga1Np
Z192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAg
IF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVy
bmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7
CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzEs
IDJdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93XzFfMigpKTsKK30pKCk7CisKKy8vIFRl
c3QgdGhyb3dpbmcvY2F0Y2hpbmcgdGhlIGkzMiBwYXJhbWV0ZXIgdmFsdWUuCisoZnVuY3Rpb24g
VGVzdFRocm93Q2F0Y2hQYXJhbUkoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfaSk7CisgIGJ1
aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X2NhdGNoX3BhcmFtIiwga1NpZ19pX2kpCisgICAgICAu
YWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxv
Y2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhw
ckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4
cHJSZXR1cm4sCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBs
ZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDAs
IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oMCkpOworICBhc3NlcnRFcXVhbHMo
MSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgxKSk7CisgIGFzc2VydEVxdWFs
cygxMCwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgxMCkpOworfSkoKTsKKwor
Ly8gVGVzdCB0aGUgZW5jb2Rpbmcgb2YgYSB0aHJvd24gZXhjZXB0aW9uIHdpdGggYW4gaW50ZWdl
ciBleGNlcHRpb24uCisoZnVuY3Rpb24gVGVzdFRocm93UGFyYW1JKCkgeworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRU
YWcoa1NpZ192X2kpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19wYXJhbSIsIGtTaWdf
dl9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAg
ICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIu
YWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3Rh
bmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFu
Y2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFs1XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJv
d19wYXJhbSg1KSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9y
dHMuZXgsIFs0MjQyNDJdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDQyNDI0
MikpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2luZy9jYXRjaGluZyB0aGUgZjMyIHBhcmFtZXRl
ciB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFBhcmFtRigpIHsKKyAgbGV0IGJ1aWxk
ZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRk
VGFnKGtTaWdfdl9mKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfY2F0Y2hfcGFyYW0i
LCBrU2lnX2ZfZikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtRjMy
LAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhj
ZXB0LAorICAgICAgICAgIGtFeHByRjMyQ29uc3QsIDAsIDAsIDAsIDAsCisgICAgICAgIGtFeHBy
Q2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclJldHVybiwKKyAgICAgICAga0V4cHJFbmQs
CisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoNS4wLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2Nh
dGNoX3BhcmFtKDUuMCkpOworICBhc3NlcnRFcXVhbHMoMTAuNSwgaW5zdGFuY2UuZXhwb3J0cy50
aHJvd19jYXRjaF9wYXJhbSgxMC41KSk7Cit9KSgpOworCisvLyBUZXN0IHRoZSBlbmNvZGluZyBv
ZiBhIHRocm93biBleGNlcHRpb24gd2l0aCBhIGZsb2F0IHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RU
aHJvd1BhcmFtRigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsK
KyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9mKTsKKyAgYnVpbGRlci5hZGRG
dW5jdGlvbigidGhyb3dfcGFyYW0iLCBrU2lnX3ZfZikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAg
ICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAg
XSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJu
YWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsK
KworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbNS4w
XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSg1LjApKTsKKyAgYXNzZXJ0V2Fz
bVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzEwLjVdLCAoKSA9PiBpbnN0
YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDEwLjUpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dp
bmcvY2F0Y2hpbmcgYW4gSTY0IHZhbHVlCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hQYXJhbUwo
KSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNl
cHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfbCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRo
cm93X2NhdGNoX3BhcmFtIiwga1NpZ19pX2kpCisgICAgICAuYWRkTG9jYWxzKGtXYXNtSTY0LCAx
KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBr
RXhwckk2NFVDb252ZXJ0STMyLAorICAgICAgICBrRXhwckxvY2FsU2V0LCAxLAorICAgICAgICBr
RXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAg
ICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAg
ICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAg
ICAgICAga0V4cHJJNjRFcSwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbUkzMiwKKyAgICAgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAg
a0V4cHJJMzJDb25zdCwgMCwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJFbmQs
CisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRj
aF9wYXJhbSg1KSk7CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2Nh
dGNoX3BhcmFtKDApKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGhyb3df
Y2F0Y2hfcGFyYW0oLTEpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhy
b3duIGV4Y2VwdGlvbiB3aXRoIGFuIEk2NCB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dQYXJh
bUwoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBl
eGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfbCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24o
InRocm93X3BhcmFtIiwga1NpZ192X2lpKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhw
ckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckk2NFVDb252ZXJ0STMyLAorICAgICAgICBrRXhw
ckk2NENvbnN0LCAzMiwKKyAgICAgICAga0V4cHJJNjRTaGwsCisgICAgICAgIGtFeHByTG9jYWxH
ZXQsIDEsCisgICAgICAgIGtFeHBySTY0VUNvbnZlcnRJMzIsCisgICAgICAgIGtFeHBySTY0SW9y
LAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7Cisg
IGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAg
bGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJv
d3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFs0Mjk0OTY3Mjk2NW5dLCAoKSA9PiBp
bnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDEwLCA1KSk7CisgIGFzc2VydFdhc21UaHJvd3Mo
aW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFstNDI5NDk2NzI4M25dLCAoKSA9PiBpbnN0
YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKC0xLCAxMykpOworfSkoKTsKKworLy8gVGVzdCB0aHJv
d2luZy9jYXRjaGluZyB0aGUgRjY0IHBhcmFtZXRlciB2YWx1ZQorKGZ1bmN0aW9uIFRlc3RUaHJv
d0NhdGNoUGFyYW1EKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigp
OworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2QpOworICBidWlsZGVyLmFk
ZEZ1bmN0aW9uKCJ0aHJvd19jYXRjaF9wYXJhbSIsIGtTaWdfZF9kKQorICAgICAgLmFkZEJvZHko
WworICAgICAgICBrRXhwclRyeSwga1dhc21GNjQsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwg
MCwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJGNjRDb25z
dCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAor
ICAgICAgICAgIGtFeHByUmV0dXJuLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9y
dEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFz
c2VydEVxdWFscyg1LjAsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oNS4wKSk7
CisgIGFzc2VydEVxdWFscygxMC41LCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFt
KDEwLjUpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3duIGV4Y2Vw
dGlvbiB3aXRoIGFuIGY2NCB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dQYXJhbUQoKSB7Cisg
IGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBi
dWlsZGVyLmFkZFRhZyhrU2lnX3ZfZCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X3Bh
cmFtIiwga1NpZ192X2YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQs
IDAsCisgICAgICAgIGtFeHByRjY0Q29udmVydEYzMiwKKyAgICAgICAga0V4cHJUaHJvdywgZXhj
ZXB0LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgi
ZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5z
dGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBv
cnRzLmV4LCBbNS4wXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSg1LjApKTsK
KyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzEwMDAw
MDAwXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSgxMDAwMDAwMC41KSk7Cit9
KSgpOworCisvLyBUZXN0IHRoZSBlbmNvZGluZyBvZiBhIGNvbXB1dGVkIHBhcmFtZXRlciB2YWx1
ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dQYXJhbUNvbXB1dGVkKCkgeworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWco
a1NpZ192X2kpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19leHByX3dpdGhfcGFyYW1z
Iiwga1NpZ192X2RkaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAgLy8gcDIgKiAocDAgKyBt
aW4ocDAsIHAxKSl8MCAtIDIwCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDIsCisgICAgICAgIGtF
eHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHBy
TG9jYWxHZXQsIDEsCisgICAgICAgIGtFeHByRjY0TWluLAorICAgICAgICBrRXhwckY2NEFkZCwK
KyAgICAgICAga0V4cHJJMzJTQ29udmVydEY2NCwKKyAgICAgICAga0V4cHJJMzJNdWwsCisgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDIwLAorICAgICAgICBrRXhwckkzMlN1YiwKKyAgICAgICAga0V4
cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSkuZXhwb3J0RnVuYygpCisgIGJ1aWxkZXIuYWRkRXhw
b3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0g
YnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGlu
c3RhbmNlLmV4cG9ydHMuZXgsIFstOF0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfZXhw
cl93aXRoX3BhcmFtcygxLjUsIDIuNSwgNCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNl
LCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbMTJdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93
X2V4cHJfd2l0aF9wYXJhbXMoNS43LCAyLjUsIDQpKTsKK30pKCk7CisKKy8vIE5vdyB0aGF0IHdl
IGtub3cgY2F0Y2hpbmcgd29ya3MgbG9jYWxseSwgd2UgdGVzdCBjYXRjaGluZyBleGNlcHRpb25z
IHRoYXQKKy8vIGNyb3NzIGZ1bmN0aW9uIGJvdW5kYXJpZXMgYW5kL29yIHJhaXNlZCBieSBKYXZh
U2NyaXB0LgorKGZ1bmN0aW9uIFRlc3RDYXRjaENyb3NzRnVuY3Rpb25zKCkgeworICBsZXQgYnVp
bGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X2kpOworCisgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGhyb3dpbmcgZnJv
bSBKUy4gSXQgaXMgaW1wb3J0ZWQgYnkgdGhlIFdhc20gbW9kdWxlCisgIC8vIGFzIHRocm93X2ku
CisgIGZ1bmN0aW9uIHRocm93X3ZhbHVlKHZhbHVlKSB7CisgICAgdGhyb3cgdmFsdWU7CisgIH0K
KyAgbGV0IHNpZ19pbmRleCA9IGJ1aWxkZXIuYWRkVHlwZShrU2lnX3ZfaSk7CisgIGxldCBrSlNU
aHJvd0kgPSBidWlsZGVyLmFkZEltcG9ydCgiIiwgInRocm93X2kiLCBzaWdfaW5kZXgpOworCisg
IC8vIEhlbHBlciBmdW5jdGlvbiB0aGF0IHRocm93cyBhIHN0cmluZy4gV2FzbSBzaG91bGQgbm90
IGNhdGNoIGl0LgorICBmdW5jdGlvbiB0aHJvd19zdHJpbmcoKSB7CisgICAgdGhyb3cgInVzZSB3
YXNtIjsKKyAgfQorICBzaWdfaW5kZXggPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X3YpOworICBs
ZXQga0pTVGhyb3dTdHJpbmcgPSBidWlsZGVyLmFkZEltcG9ydCgiIiwgInRocm93X3N0cmluZyIs
IHNpZ19pbmRleCk7CisKKyAgLy8gSGVscGVyIGZ1bmN0aW9uIHRoYXQgdGhyb3dzIHVuZGVmaW5l
ZC4gV2FzbSBzaG91bGQgbm90IGNhdGNoIGl0LgorICBmdW5jdGlvbiB0aHJvd191bmRlZmluZWQo
KSB7CisgICAgdGhyb3cgdW5kZWZpbmVkOworICB9CisgIGxldCBrSlNUaHJvd1VuZGVmaW5lZCA9
IGJ1aWxkZXIuYWRkSW1wb3J0KCIiLCAidGhyb3dfdW5kZWZpbmVkIiwgc2lnX2luZGV4KTsKKwor
ICAvLyBIZWxwZXIgZnVuY3Rpb24gdGhhdCB0aHJvd3MgYW4gZnAuIFdhc20gc2hvdWxkIG5vdCBj
YXRjaCBpdC4KKyAgZnVuY3Rpb24gdGhyb3dfZnAoKSB7CisgICAgdGhyb3cgMTAuNTsKKyAgfQor
ICBsZXQga0pTVGhyb3dGUCA9IGJ1aWxkZXIuYWRkSW1wb3J0KCIiLCAidGhyb3dfZnAiLCBzaWdf
aW5kZXgpOworCisgIC8vIEhlbHBlciBmdW5jdGlvbiB0aGF0IHRocm93cyBhIGxhcmdlIG51bWJl
ci4gV2FzbSBzaG91bGQgbm90IGNhdGNoIGl0LgorICBmdW5jdGlvbiB0aHJvd19sYXJnZSgpIHsK
KyAgICB0aHJvdyAxZSsyODsKKyAgfQorICBsZXQga0pTVGhyb3dMYXJnZSA9IGJ1aWxkZXIuYWRk
SW1wb3J0KCIiLCAidGhyb3dfbGFyZ2UiLCBzaWdfaW5kZXgpOworCisgIC8vIEhlbHBlciBmdW5j
dGlvbiBmb3IgdGhyb3dpbmcgZnJvbSBXZWJBc3NlbWJseS4KKyAgbGV0IGtXYXNtVGhyb3dGdW5j
dGlvbiA9CisgICAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfaSkKKyAgICAg
IC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJUaHJv
dywgZXhjZXB0LAorICAgICAgXSkKKyAgICAgIC5pbmRleDsKKworICAvLyBTY2VuYXJpbyAxOiBU
aHJvdyBhbmQgY2F0Y2ggYXBwZWFyIG9uIHRoZSBzYW1lIGZ1bmN0aW9uLiBUaGlzIHNob3VsZAor
ICAvLyBoYXBwZW4gaW4gY2FzZSBvZiBpbmxpbmluZywgZm9yIGV4YW1wbGUuCisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oInNhbWVfc2NvcGUiLCBrU2lnX2lfaSkKKyAgICAuYWRkQm9keShbCisgICAg
ICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAg
IGtFeHBySTMyQ29uc3QsIDAsCisgICAgICAgIGtFeHBySTMyTmUsCisgICAgICAgIGtFeHBySWYs
IGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBy
VGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICBrRXhw
ckVuZCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgNjMsCisgICAgICBrRXhwckNhdGNoLCBleGNl
cHQsCisgICAgICBrRXhwckVuZAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWls
ZGVyLmFkZEZ1bmN0aW9uKCJzYW1lX3Njb3BlX2lnbm9yZSIsIGtTaWdfaV9pKQorICAgIC5hZGRC
b2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxH
ZXQsIDAsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHByVW5y
ZWFjaGFibGUsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQs
CisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInNh
bWVfc2NvcGVfbXVsdGlwbGUiLCBrU2lnX2lfaSkKKyAgICAvLyBwYXRoID0gMDsKKyAgICAvLwor
ICAgIC8vIHRyeSB7CisgICAgLy8gICB0cnkgeworICAgIC8vICAgICB0cnkgeworICAgIC8vICAg
ICAgIGlmIChwID09IDEpCisgICAgLy8gICAgICAgICB0aHJvdyAxOworICAgIC8vICAgICAgIHBh
dGggfD0gMgorICAgIC8vICAgICB9IGNhdGNoICh2KSB7CisgICAgLy8gICAgICAgcGF0aCB8PSB2
IHwgNDsKKyAgICAvLyAgICAgICB0aHJvdyBwYXRoOworICAgIC8vICAgICB9CisgICAgLy8gICAg
IGlmIChwID09IDIpCisgICAgLy8gICAgICAgdGhyb3cgcGF0aHw4OworICAgIC8vICAgICBwYXRo
IHw9IDE2OworICAgIC8vICAgfSBjYXRjaCAodikgeworICAgIC8vICAgICBwYXRoIHw9IHYgfCAz
MjsKKyAgICAvLyAgICAgdGhyb3cgcGF0aDsKKyAgICAvLyAgIH0KKyAgICAvLyAgIGlmIChwID09
IDMpCisgICAgLy8gICAgIHRocm93IHBhdGh8NjQ7CisgICAgLy8gICBwYXRoIHw9IDEyOAorICAg
IC8vIH0gY2F0Y2ggKHYpIHsKKyAgICAvLyAgIHBhdGggfD0gdiB8IDI1NjsKKyAgICAvLyB9Cisg
ICAgLy8KKyAgICAvLyByZXR1cm4gcGF0aDsKKyAgICAvLworICAgIC8vIHAgPT0gMSAtPiBwYXRo
ID09IDI5MworICAgIC8vIHAgPT0gMiAtPiBwYXRoID09IDI5OAorICAgIC8vIHAgPT0gMyAtPiBw
YXRoID09IDMzOAorICAgIC8vIGVsc2UgICAtPiBwYXRoID09IDE0NgorICAgIC5hZGRMb2NhbHMo
a1dhc21JMzIsIDEpCisgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIs
CisgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJUcnksIGtX
YXNtSTMyLAorICAgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAgICBr
RXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgICAgICBrRXhwckkzMkVxLAorICAgICAgICAgICAg
ICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwK
KyAgICAgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAgICAgICAga0V4
cHJVbnJlYWNoYWJsZSwKKyAgICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICAgIGtF
eHBySTMyQ29uc3QsIDIsCisgICAgICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAg
ICAgICAgIGtFeHBySTMyQ29uc3QsIDQsCisgICAgICAgICAgICAgIGtFeHBySTMySW9yLAorICAg
ICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAgICAgIGtFeHByVW5yZWFj
aGFibGUsCisgICAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgIGtFeHByTG9jYWxUZWUs
IDEsCisgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJJMzJD
b25zdCwgMiwKKyAgICAgICAgICAgIGtFeHBySTMyRXEsCisgICAgICAgICAgICBrRXhwcklmLCBr
V2FzbVZvaWQsCisgICAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAgICAgICAg
IGtFeHBySTMyQ29uc3QsIDgsCisgICAgICAgICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICAg
ICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUs
CisgICAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDE2LAor
ICAgICAgICAgICAga0V4cHJJMzJJb3IsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAor
ICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMzIsCisgICAgICAgICAgICBrRXhwckkzMklvciwK
KyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICAgIGtFeHByVW5yZWFj
aGFibGUsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAga0V4cHJMb2NhbFRlZSwgMSwK
KyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDMs
CisgICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisg
ICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwg
Lyo2ND0qLyAxOTIsIDAsCisgICAgICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAgICAgIGtF
eHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAg
ICAga0V4cHJFbmQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgLyoxMjg9Ki8gMTI4LCAxLAor
ICAgICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAg
ICAgICAga0V4cHJJMzJDb25zdCwgLyoyNTY9Ki8gMTI4LCAyLAorICAgICAgICAgIGtFeHBySTMy
SW9yLAorICAgICAgICBrRXhwckVuZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAg
Ly8gU2NlbmFyaW8gMjogQ2F0Y2hlcyBhbiBleGNlcHRpb24gcmFpc2VkIGZyb20gdGhlIGRpcmVj
dCBjYWxsZWUuCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImZyb21fZGlyZWN0X2NhbGxlZSIsIGtT
aWdfaV9pKQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAg
ICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtXYXNtVGhy
b3dGdW5jdGlvbiwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByQ2F0Y2gs
IGV4Y2VwdCwKKyAgICAgIGtFeHByRW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKwor
ICAvLyBTY2VuYXJpbyAzOiBDYXRjaGVzIGFuIGV4Y2VwdGlvbiByYWlzZWQgZnJvbSBhbiBpbmRp
cmVjdCBjYWxsZWUuCisgIGxldCBzaWdfdl9pID0gYnVpbGRlci5hZGRUeXBlKGtTaWdfdl9pKTsK
KyAgYnVpbGRlci5hcHBlbmRUb1RhYmxlKFtrV2FzbVRocm93RnVuY3Rpb24sIGtXYXNtVGhyb3dG
dW5jdGlvbl0pOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJmcm9tX2luZGlyZWN0X2NhbGxlZSIs
IGtTaWdfaV9paSkKKyAgICAuYWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisg
ICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAg
ICAgIGtFeHByQ2FsbEluZGlyZWN0LCBzaWdfdl9pLCBrVGFibGVaZXJvLAorICAgICAgICBrRXhw
clVucmVhY2hhYmxlLAorICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAga0V4cHJFbmQK
KyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgLy8gU2NlbmFyaW8gNDogRG9lcyBub3Qg
Y2F0Y2ggYW4gZXhjZXB0aW9uIHJhaXNlZCBpbiBKUywgZXZlbiBpZiBwcmltaXRpdmUKKyAgLy8g
dmFsdWVzIGFyZSBiZWluZyB1c2VkIGFzIGV4Y2VwdGlvbnMuCisgIGJ1aWxkZXIuYWRkRnVuY3Rp
b24oImlfZnJvbV9qcyIsIGtTaWdfaV9pKQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5
LCBrV2FzbUkzMiwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJDYWxs
RnVuY3Rpb24sIGtKU1Rocm93SSwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtF
eHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHBy
RW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFkZEZ1bmN0aW9u
KCJzdHJpbmdfZnJvbV9qcyIsIGtTaWdfdl92KQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHBy
VHJ5LCBrV2FzbVZvaWQsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrSlNUaHJvd1N0cmlu
ZywKKyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwK
KyAgICAgIGtFeHByRW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJmcF9mcm9tX2pzIiwga1NpZ192X3YpCisgICAgLmFkZEJvZHkoWworICAg
ICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtKU1Ro
cm93RlAsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByVW5yZWFjaGFi
bGUsCisgICAgICBrRXhwckVuZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgYnVp
bGRlci5hZGRGdW5jdGlvbigibGFyZ2VfZnJvbV9qcyIsIGtTaWdfdl92KQorICAgIC5hZGRCb2R5
KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9u
LCBrSlNUaHJvd0xhcmdlLAorICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhw
clVucmVhY2hhYmxlLAorICAgICAga0V4cHJFbmQsCisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygp
OworCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInVuZGVmaW5lZF9mcm9tX2pzIiwga1NpZ192X3Yp
CisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAga0V4
cHJDYWxsRnVuY3Rpb24sIGtKU1Rocm93VW5kZWZpbmVkLAorICAgICAga0V4cHJDYXRjaCwgZXhj
ZXB0LAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAga0V4cHJFbmQsCisgICAgXSkK
KyAgICAuZXhwb3J0RnVuYygpOworCisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlh
dGUoeyIiOiB7CisgICAgICB0aHJvd19pOiB0aHJvd192YWx1ZSwKKyAgICAgIHRocm93X3N0cmlu
ZzogdGhyb3dfc3RyaW5nLAorICAgICAgdGhyb3dfZnA6IHRocm93X2ZwLAorICAgICAgdGhyb3df
bGFyZ2UsIHRocm93X2xhcmdlLAorICAgICAgdGhyb3dfdW5kZWZpbmVkOiB0aHJvd191bmRlZmlu
ZWQKKyAgfX0pOworCisgIGFzc2VydEVxdWFscyg2MywgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Nj
b3BlKDApKTsKKyAgYXNzZXJ0RXF1YWxzKDEwMjQsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29w
ZSgxMDI0KSk7CisgIGFzc2VydEVxdWFscygtMywgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3Bl
KC0zKSk7CisgIGFzc2VydEVxdWFscygtMSwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX2ln
bm9yZSgtMSkpOworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3Bl
X2lnbm9yZSgxKSk7CisgIGFzc2VydEVxdWFscygweDdGRkZGRkZGLCBpbnN0YW5jZS5leHBvcnRz
LnNhbWVfc2NvcGVfaWdub3JlKDB4N0ZGRkZGRkYpKTsKKyAgYXNzZXJ0RXF1YWxzKDEwMjQsIGlu
c3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZV9pZ25vcmUoMTAyNCkpOworICBhc3NlcnRFcXVhbHMo
LTEsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZV9pZ25vcmUoLTEpKTsKKyAgYXNzZXJ0RXF1
YWxzKDI5MywgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX211bHRpcGxlKDEpKTsKKyAgYXNz
ZXJ0RXF1YWxzKDI5OCwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX211bHRpcGxlKDIpKTsK
KyAgYXNzZXJ0RXF1YWxzKDMzOCwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX211bHRpcGxl
KDMpKTsKKyAgYXNzZXJ0RXF1YWxzKDE0NiwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX211
bHRpcGxlKDApKTsKKyAgYXNzZXJ0RXF1YWxzKC0xMDAyNCwgaW5zdGFuY2UuZXhwb3J0cy5mcm9t
X2RpcmVjdF9jYWxsZWUoLTEwMDI0KSk7CisgIGFzc2VydEVxdWFscygzMzM0MzMzLCBpbnN0YW5j
ZS5leHBvcnRzLmZyb21fZGlyZWN0X2NhbGxlZSgzMzM0MzMzKSk7CisgIGFzc2VydEVxdWFscygt
MSwgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2RpcmVjdF9jYWxsZWUoMHhGRkZGRkZGRikpOworICBh
c3NlcnRFcXVhbHMoMHg3RkZGRkZGRiwgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2RpcmVjdF9jYWxs
ZWUoMHg3RkZGRkZGRikpOworICBhc3NlcnRFcXVhbHMoMTAsIGluc3RhbmNlLmV4cG9ydHMuZnJv
bV9pbmRpcmVjdF9jYWxsZWUoMTAsIDApKTsKKyAgYXNzZXJ0RXF1YWxzKDc3LCBpbnN0YW5jZS5l
eHBvcnRzLmZyb21faW5kaXJlY3RfY2FsbGVlKDc3LCAxKSk7CisKKyAgYXNzZXJ0VGhyb3dzRXF1
YWxzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMuaV9mcm9tX2pzKDEwKSwgMTApOworICBhc3NlcnRU
aHJvd3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5pX2Zyb21fanMoLTEwKSwgLTEwKTsK
KyAgYXNzZXJ0VGhyb3dzRXF1YWxzKGluc3RhbmNlLmV4cG9ydHMuc3RyaW5nX2Zyb21fanMsICJ1
c2Ugd2FzbSIpOworICBhc3NlcnRUaHJvd3NFcXVhbHMoaW5zdGFuY2UuZXhwb3J0cy5mcF9mcm9t
X2pzLCAxMC41KTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzKGluc3RhbmNlLmV4cG9ydHMubGFyZ2Vf
ZnJvbV9qcywgMWUrMjgpOworICBhc3NlcnRUaHJvd3NFcXVhbHMoaW5zdGFuY2UuZXhwb3J0cy51
bmRlZmluZWRfZnJvbV9qcywgdW5kZWZpbmVkKTsKK30pKCk7CisKKy8vIERlbGVnYXRlIHdpdGgg
YSB0cnkgYmxvY2sgdGhhdCBuZXZlciB0aHJvd3MuCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlTm9U
aHJvdygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0
IGV4Y2VwdDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rp
b24oJ3Rlc3QnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnks
IGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtF
eHBySTMyQ29uc3QsIDEsCisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAga0V4
cHJDYXRjaCwgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBr
RXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWlsZGVyLmlu
c3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRlc3QoKSk7
Cit9KSgpOworCisvLyBEZWxlZ2F0ZSBleGNlcHRpb24gaGFuZGxpbmcgdG8gb3V0ZXIgdHJ5L2Nh
dGNoIGJsb2NrLgorKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZVRocm93KCkgeworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRU
YWcoa1NpZ192X3YpOworICBsZXQgdGhyb3dfaWYgPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJv
dycsIGtTaWdfdl9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICAgIGtFeHByTG9jYWxHZXQs
IDAsCisgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJv
dywgZXhjZXB0LAorICAgICAgICAgIGtFeHByRW5kXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAg
IGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAg
ICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24s
IHRocm93X2lmLmluZGV4LAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAg
ICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAg
ICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRG
dW5jKCk7CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVh
bHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KDApKTsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3Rh
bmNlLmV4cG9ydHMudGVzdCgxKSk7Cit9KSgpOworCisvLyBObyBjYXRjaCBibG9jayBtYXRjaGlu
ZyB0aGUgZXhjZXB0aW9uIGluIHRoZSBkZWxlZ2F0ZSB0YXJnZXQuCisoZnVuY3Rpb24gVGVzdERl
bGVnYXRlVGhyb3dOb0NhdGNoKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVp
bGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0
IGV4Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCB0aHJvd19mbiA9IGJ1
aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93Jywga1NpZ192X3YpCisgICAgICAgICAgICAgICAgICAg
ICAuYWRkQm9keShba0V4cHJUaHJvdywgZXhjZXB0MV0pCisgICAgICAgICAgICAgICAgICAgICAu
ZXhwb3J0RnVuYygpOworICBsZXQgdGhyb3dfZm5fMiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Ro
cm93XzInLCBrU2lnX3ZfdikKKyAgICAgICAgICAgICAgICAgICAgIC5hZGRCb2R5KFtrRXhwclRo
cm93LCBleGNlcHQyXSkKKyAgICAgICAgICAgICAgICAgICAgIC5leHBvcnRGdW5jKCk7CisgIGJ1
aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAg
ICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwK
KyAgICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCB0aHJvd19mbi5pbmRleCwKKyAgICAgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAg
ICAga0V4cHJDYXRjaCwgZXhjZXB0MiwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAg
ICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWls
ZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydFRocm93cyhpbnN0YW5jZS5leHBvcnRzLnRlc3Qs
IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9KSgpOworCisvLyBDaGVjayB0aGF0IHRoZSBleGNl
cHRpb24gaXMgbWVyZ2VkIHByb3Blcmx5IHdoZW4gYm90aCBzY29wZXMgY2FuIHRocm93LgorKGZ1
bmN0aW9uIFRlc3REZWxlZ2F0ZU1lcmdlKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9k
dWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsK
KyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIC8vIHRocm93X2Zu
OiAwIC0+IHJldHVybnMKKyAgLy8gICAgICAgICAgIDEgLT4gdGhyb3cgZXhjZXB0MQorICAvLyAg
ICAgICAgICAgMiAtPiB0aHJvdyBleGNlcHQyCisgIGxldCB0aHJvd19mbiA9IGJ1aWxkZXIuYWRk
RnVuY3Rpb24oJ3Rocm93Jywga1NpZ192X2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgICAg
a0V4cHJCbG9jaywga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJCbG9jaywga1dhc21Wb2lk
LAorICAgICAgICAgICAgICBrRXhwckJsb2NrLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgICAg
a0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAgICAgICBrRXhwckJyVGFibGUsIDIsIDAsIDEs
IDIsCisgICAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAgICBrRXhwclJldHVybiwK
KyAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MSwK
KyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQyXSkKKyAg
ICAgIC5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lf
aWkpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAg
ICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCB0aHJv
d19mbi5pbmRleCwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBr
RXhwckxvY2FsR2V0LCAxLAorICAgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIHRocm93X2Zu
LmluZGV4LAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICBrRXhwckRl
bGVnYXRlLCAwLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQxLAorICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOwor
ICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDIsIGlu
c3RhbmNlLmV4cG9ydHMudGVzdCgxLCAwKSk7CisgIGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5j
ZS5leHBvcnRzLnRlc3QoMiwgMCksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFzc2VydEVx
dWFscygyLCBpbnN0YW5jZS5leHBvcnRzLnRlc3QoMCwgMSkpOworICBhc3NlcnRUaHJvd3MoKCkg
PT4gaW5zdGFuY2UuZXhwb3J0cy50ZXN0KDAsIDIpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOwor
ICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KDAsIDApKTsKK30pKCk7CisK
Ky8vIERlbGVnYXRlIHRvIHNlY29uZCBlbmNsb3NpbmcgdHJ5IHNjb3BlLgorKGZ1bmN0aW9uIFRl
c3REZWxlZ2F0ZTEoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7
CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCB0aHJvd19m
biA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93Jywga1NpZ192X3YpCisgICAgICAgICAgICAg
ICAgICAgICAuYWRkQm9keShba0V4cHJUaHJvdywgZXhjZXB0XSkKKyAgICAgICAgICAgICAgICAg
ICAgIC5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lf
dikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAg
ICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwK
KyAgICAgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIHRocm93X2ZuLmluZGV4LAorICAgICAg
ICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMSwK
KyAgICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0
LCAyLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgMywKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5l
eHBvcnRGdW5jKCk7CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3Nl
cnRFcXVhbHMoMywgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KCkpOworfSkoKTsKKworKGZ1bmN0aW9u
IFRlc3REZWxlZ2F0ZVVucmVhY2hhYmxlKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9k
dWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsK
KyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRk
RnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4
cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAg
ICAgICBrRXhwclRocm93LCBleGNlcHQxLAorICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDAsCisg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwK
KyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQy
LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDMsCisgICAgICAgIGtFeHByRW5kLAorICAgICAg
XSkuZXhwb3J0RnVuYygpOworICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAg
YXNzZXJ0RXF1YWxzKDIsIGluc3RhbmNlLmV4cG9ydHMudGVzdCgpKTsKK30pKCk7CisKKyhmdW5j
dGlvbiBUZXN0RGVsZWdhdGVUb0NhbGxlcigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1v
ZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsK
KyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHko
WworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2Fz
bVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJE
ZWxlZ2F0ZSwgMSwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAga0V4cHJFbmQKKyAg
ICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7
CisgIGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRlc3QoKSwgV2ViQXNzZW1i
bHkuRXhjZXB0aW9uKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0VGhyb3dCZWZvcmVVbnJlYWNo
YWJsZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0
IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlv
bigndGhyb3dfYmVmb3JlX3VucmVhY2hhYmxlJywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShb
CisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNl
cHQsCisgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwK
KyAgICAgICAgICBrRXhwckkzMkNvbnN0LCA0MiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBd
KS5leHBvcnRGdW5jKCk7CisKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgp
OworICBhc3NlcnRFcXVhbHMoNDIsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfYmVmb3JlX3VucmVh
Y2hhYmxlKCkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RVbnJlYWNoYWJsZUluQ2F0Y2hBbGwo
KSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNl
cHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Ro
cm93X2JlZm9yZV91bnJlYWNoYWJsZScsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAg
ICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAor
ICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAg
ICAgICAga0V4cHJJMzJDb25zdCwgNDIsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhw
b3J0RnVuYygpOworCisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKK30p
KCk7CisKKyhmdW5jdGlvbiBUZXN0VGhyb3dXaXRoTG9jYWwoKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93X3dpdGhfbG9jYWwnLCBrU2ln
X2lfdikKKyAgICAuYWRkTG9jYWxzKGtXYXNtSTMyLCA0KQorICAgIC5hZGRCb2R5KFsKKyAgICAg
ICAga0V4cHJJMzJDb25zdCwgNDIsCisgICAgICAgIGtFeHByRjY0Q29uc3QsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUYzMiwKKyAgICAgICAgICBrRXhw
clRocm93LCBleGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJG
MzJDb25zdCwgMCwgMCwgMCwgMCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByRHJv
cCwgIC8vIERyb3AgdGhlIGYzMi4KKyAgICAgICAga0V4cHJEcm9wLCAgLy8gRHJvcCB0aGUgZjY0
LgorICAgICAgICAvLyBMZWF2ZSB0aGUgJzQyJyBvbiB0aGUgc3RhY2suCisgICAgXSkuZXhwb3J0
RnVuYygpOworCisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNz
ZXJ0RXF1YWxzKDQyLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X3dpdGhfbG9jYWwoKSk7Cit9KSgp
OworCisoZnVuY3Rpb24gVGVzdENhdGNobGVzc1RyeSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcg
V2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdf
dl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbignY2F0Y2hsZXNzX3RyeScsIGtTaWdfdl9pKQor
ICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBr
RXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAg
ICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4
cHJFbmQsCisgICAgXSkuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5k
KCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5p
bnN0YW50aWF0ZSgpOworICBhc3NlcnREb2VzTm90VGhyb3coKCkgPT4gaW5zdGFuY2UuZXhwb3J0
cy5jYXRjaGxlc3NfdHJ5KDApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFu
Y2UuZXhwb3J0cy5leCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hsZXNzX3RyeSgx
KSk7Cit9KSgpOworCisvLyBEZWxlZ2F0ZSB0byBhIHJlZ3VsYXIgYmxvY2sgaW5zaWRlIGEgdHJ5
IGJsb2NrLgorKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZVRvQmxvY2soKSB7CisgIGxldCBidWlsZGVy
ID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRh
ZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfdikKKyAg
ICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtF
eHByQmxvY2ssIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAg
ICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAgICBrRXhwckRlbGVnYXRl
LCAwLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5l
eHBvcnRGdW5jKCk7CisgICAgYXNzZXJ0VGhyb3dzKCgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUo
KSwgRXJyb3IsIC9kZWxlZ2F0ZSB0YXJnZXQgaXNuJ3QgYSB0cnkgYmxvY2svKTsKK30pKCk7CisK
Ky8vIERlbGVnYXRlIHRvIGEgcmVndWxhciBibG9jayB3aXRoIG5vIG91dGVyIHRyeSAoZGVsZWdh
dGUgdG8gY2FsbGVyKS4KKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVUb0NhbGxlcldpdGhCbG9jaygp
IHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2Vw
dCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVz
dCcsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckJsb2NrLCBrV2Fz
bVZvaWQsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHBy
VGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICBrRXhw
ckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBhc3NlcnRUaHJvd3MoKCkgPT4gYnVpbGRl
ci5pbnN0YW50aWF0ZSgpLCBFcnJvciwgL2RlbGVnYXRlIHRhcmdldCBpc24ndCBhIHRyeSBibG9j
ay8pOworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9tanN1bml0LmpzIGIvSlNU
ZXN0cy93YXNtL3Y4L21qc3VuaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDI0NTViYWE2MTY5NjZmOGQwYTZi
OWRlMWRhMzIxMWZmYTJkYTM2MgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9t
anN1bml0LmpzCkBAIC0wLDAgKzEsODI2IEBACisvLyBDb3B5cmlnaHQgMjAwOCB0aGUgVjggcHJv
amVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2Z1bmN0aW9uIE1qc1VuaXRBc3NlcnRpb25FcnJvcihtZXNzYWdlKSB7CisgIHRoaXMubWVzc2Fn
ZSA9IG1lc3NhZ2U7CisgIC8vIFRlbXBvcmFyaWx5IGluc3RhbGwgYSBjdXN0b20gc3RhY2sgdHJh
Y2UgZm9ybWF0dGVyIGFuZCByZXN0b3JlIHRoZQorICAvLyBwcmV2aW91cyB2YWx1ZS4KKyAgbGV0
IHByZXZQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOworICB0cnkg
eworICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gTWpzVW5pdEFzc2VydGlvbkVycm9yLnBy
ZXBhcmVTdGFja1RyYWNlOworICAgIC8vIFRoaXMgYWxsb3dzIGZldGNoaW5nIHRoZSBzdGFjayB0
cmFjZSB1c2luZyBUcnlDYXRjaDo6U3RhY2tUcmFjZS4KKyAgICB0aGlzLnN0YWNrID0gbmV3IEVy
cm9yKCJNanNVbml0QXNzZXJ0aW9uRXJyb3IiKS5zdGFjazsKKyAgfSBmaW5hbGx5IHsKKyAgICBF
cnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZQcmVwYXJlU3RhY2tUcmFjZTsKKyAgfQorfQor
CisvKgorICogVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGluIGFsbCBtaW5pIGpzdW5pdCB0ZXN0IGNh
c2VzLiAgVGhlIHRlc3QKKyAqIGZyYW1ld29yayBleHBlY3RzIGxpbmVzIHRoYXQgc2lnbmFsIGZh
aWxlZCB0ZXN0cyB0byBzdGFydCB3aXRoCisgKiB0aGUgZi13b3JkIGFuZCBpZ25vcmUgYWxsIG90
aGVyIGxpbmVzLgorICovCisKK01qc1VuaXRBc3NlcnRpb25FcnJvci5wcm90b3R5cGUudG9TdHJp
bmcgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiB0aGlzLm1lc3NhZ2UgKyAiXG5cblN0YWNrOiAi
ICsgdGhpcy5zdGFjazsKK307CisKKworLy8gRXhwZWN0ZWQgYW5kIGZvdW5kIHZhbHVlcyB0aGUg
c2FtZSBvYmplY3RzLCBvciB0aGUgc2FtZSBwcmltaXRpdmUKKy8vIHZhbHVlcy4KKy8vIEZvciBr
bm93biBwcmltaXRpdmUgdmFsdWVzLCBwbGVhc2UgdXNlIGFzc2VydEVxdWFscy4KK3ZhciBhc3Nl
cnRTYW1lOworCisvLyBJbnZlcnNlIG9mIGFzc2VydFNhbWUuCit2YXIgYXNzZXJ0Tm90U2FtZTsK
KworLy8gRXhwZWN0ZWQgYW5kIGZvdW5kIHZhbHVlcyBhcmUgaWRlbnRpY2FsIHByaW1pdGl2ZSB2
YWx1ZXMgb3IgZnVuY3Rpb25zCisvLyBvciBzaW1pbGFybHkgc3RydWN0dXJlZCBvYmplY3RzIChj
aGVja2luZyBpbnRlcm5hbCBwcm9wZXJ0aWVzCisvLyBvZiwgZS5nLiwgTnVtYmVyIGFuZCBEYXRl
IG9iamVjdHMsIHRoZSBlbGVtZW50cyBvZiBhcnJheXMKKy8vIGFuZCB0aGUgcHJvcGVydGllcyBv
ZiBub24tQXJyYXkgb2JqZWN0cykuCit2YXIgYXNzZXJ0RXF1YWxzOworCisvLyBEZWVwIGVxdWFs
aXR5IHByZWRpY2F0ZSB1c2VkIGJ5IGFzc2VydEVxdWFscy4KK3ZhciBkZWVwRXF1YWxzOworCisv
LyBFeHBlY3RlZCBhbmQgZm91bmQgdmFsdWVzIGFyZSBub3QgaWRlbnRpY2FsIHByaW1pdGl2ZSB2
YWx1ZXMgb3IgZnVuY3Rpb25zCisvLyBvciBzaW1pbGFybHkgc3RydWN0dXJlZCBvYmplY3RzIChj
aGVja2luZyBpbnRlcm5hbCBwcm9wZXJ0aWVzCisvLyBvZiwgZS5nLiwgTnVtYmVyIGFuZCBEYXRl
IG9iamVjdHMsIHRoZSBlbGVtZW50cyBvZiBhcnJheXMKKy8vIGFuZCB0aGUgcHJvcGVydGllcyBv
ZiBub24tQXJyYXkgb2JqZWN0cykuCit2YXIgYXNzZXJ0Tm90RXF1YWxzOworCisvLyBUaGUgZGlm
ZmVyZW5jZSBiZXR3ZWVuIGV4cGVjdGVkIGFuZCBmb3VuZCB2YWx1ZSBpcyB3aXRoaW4gY2VydGFp
biB0b2xlcmFuY2UuCit2YXIgYXNzZXJ0RXF1YWxzRGVsdGE7CisKKy8vIFRoZSBmb3VuZCBvYmpl
Y3QgaXMgYW4gQXJyYXkgd2l0aCB0aGUgc2FtZSBsZW5ndGggYW5kIGVsZW1lbnRzCisvLyBhcyB0
aGUgZXhwZWN0ZWQgb2JqZWN0LiBUaGUgZXhwZWN0ZWQgb2JqZWN0IGRvZXNuJ3QgbmVlZCB0byBi
ZSBhbiBBcnJheSwKKy8vIGFzIGxvbmcgYXMgaXQncyAiYXJyYXktaXNoIi4KK3ZhciBhc3NlcnRB
cnJheUVxdWFsczsKKworLy8gVGhlIGZvdW5kIG9iamVjdCBtdXN0IGhhdmUgdGhlIHNhbWUgZW51
bWVyYWJsZSBwcm9wZXJ0aWVzIGFzIHRoZQorLy8gZXhwZWN0ZWQgb2JqZWN0LiBUaGUgdHlwZSBv
ZiBvYmplY3QgaXNuJ3QgY2hlY2tlZC4KK3ZhciBhc3NlcnRQcm9wZXJ0aWVzRXF1YWw7CisKKy8v
IEFzc2VydCB0aGF0IHRoZSBzdHJpbmcgY29udmVyc2lvbiBvZiB0aGUgZm91bmQgdmFsdWUgaXMg
ZXF1YWwgdG8KKy8vIHRoZSBleHBlY3RlZCBzdHJpbmcuIE9ubHkga2VwdCBmb3IgYmFja3dhcmRz
IGNvbXBhdGliaWxpdHksIHBsZWFzZQorLy8gY2hlY2sgdGhlIHJlYWwgc3RydWN0dXJlIG9mIHRo
ZSBmb3VuZCB2YWx1ZS4KK3ZhciBhc3NlcnRUb1N0cmluZ0VxdWFsczsKKworLy8gQ2hlY2tzIHRo
YXQgdGhlIGZvdW5kIHZhbHVlIGlzIHRydWUuIFVzZSB3aXRoIGJvb2xlYW4gZXhwcmVzc2lvbnMK
Ky8vIGZvciB0ZXN0cyB0aGF0IGRvZXNuJ3QgaGF2ZSB0aGVpciBvd24gYXNzZXJ0WFhYIGZ1bmN0
aW9uLgordmFyIGFzc2VydFRydWU7CisKKy8vIENoZWNrcyB0aGF0IHRoZSBmb3VuZCB2YWx1ZSBp
cyBmYWxzZS4KK3ZhciBhc3NlcnRGYWxzZTsKKworLy8gQ2hlY2tzIHRoYXQgdGhlIGZvdW5kIHZh
bHVlIGlzIG51bGwuIEtlcHQgZm9yIGhpc3RvcmljYWwgY29tcGF0aWJpbGl0eSwKKy8vIHBsZWFz
ZSBqdXN0IHVzZSBhc3NlcnRFcXVhbHMobnVsbCwgZXhwZWN0ZWQpLgordmFyIGFzc2VydE51bGw7
CisKKy8vIENoZWNrcyB0aGF0IHRoZSBmb3VuZCB2YWx1ZSBpcyAqbm90KiBudWxsLgordmFyIGFz
c2VydE5vdE51bGw7CisKKy8vIEFzc2VydCB0aGF0IHRoZSBwYXNzZWQgZnVuY3Rpb24gb3IgZXZh
bCBjb2RlIHRocm93cyBhbiBleGNlcHRpb24uCisvLyBUaGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3Vt
ZW50IGlzIGFuIGV4Y2VwdGlvbiBjb25zdHJ1Y3RvciB0aGF0IHRoZQorLy8gdGhyb3duIGV4Y2Vw
dGlvbiBpcyBjaGVja2VkIGFnYWluc3Qgd2l0aCAiaW5zdGFuY2VvZiIuCisvLyBUaGUgb3B0aW9u
YWwgdGhpcmQgYXJndW1lbnQgaXMgYSBtZXNzYWdlIHR5cGUgc3RyaW5nIG9yIFJlZ0V4cCBvYmpl
Y3QgdGhhdCBpcworLy8gY29tcGFyZWQgdG8gdGhlIG1lc3NhZ2Ugb2YgdGhlIHRocm93biBleGNl
cHRpb24uCit2YXIgYXNzZXJ0VGhyb3dzOworCisvLyBBc3NlcnQgdGhhdCB0aGUgcGFzc2VkIGZ1
bmN0aW9uIHRocm93cyBhbiBleGNlcHRpb24uCisvLyBUaGUgZXhjZXB0aW9uIGlzIGNoZWNrZWQg
YWdhaW5zdCB0aGUgc2Vjb25kIGFyZ3VtZW50IHVzaW5nIGFzc2VydEVxdWFscy4KK3ZhciBhc3Nl
cnRUaHJvd3NFcXVhbHM7CisKKy8vIEFzc2VydCB0aGF0IHRoZSBwYXNzZWQgcHJvbWlzZSBkb2Vz
IG5vdCByZXNvbHZlLCBidXQgZXZlbnR1YWxseSB0aHJvd3MgYW4KKy8vIGV4Y2VwdGlvbi4gVGhl
IG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBpcyBhbiBleGNlcHRpb24gY29uc3RydWN0b3IgdGhh
dCB0aGUKKy8vIHRocm93biBleGNlcHRpb24gaXMgY2hlY2tlZCBhZ2FpbnN0IHdpdGggImluc3Rh
bmNlb2YiLgorLy8gVGhlIG9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50IGlzIGEgbWVzc2FnZSB0eXBl
IHN0cmluZyBvciBSZWdFeHAgb2JqZWN0IHRoYXQgaXMKKy8vIGNvbXBhcmVkIHRvIHRoZSBtZXNz
YWdlIG9mIHRoZSB0aHJvd24gZXhjZXB0aW9uLgordmFyIGFzc2VydFRocm93c0FzeW5jOworCisv
LyBBc3NlcnQgdGhhdCB0aGUgcGFzc2VkIGZ1bmN0aW9uIG9yIGV2YWwgY29kZSBkb2VzIG5vdCB0
aHJvdyBhbiBleGNlcHRpb24uCit2YXIgYXNzZXJ0RG9lc05vdFRocm93OworCisvLyBBc3NlcnRz
IHRoYXQgdGhlIGZvdW5kIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBjb25zdHJ1Y3RvciBw
YXNzZWQKKy8vIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuCit2YXIgYXNzZXJ0SW5zdGFuY2VvZjsK
KworLy8gQXNzZXJ0IHRoYXQgdGhpcyBjb2RlIGlzIG5ldmVyIGV4ZWN1dGVkIChpLmUuLCBhbHdh
eXMgZmFpbHMgaWYgZXhlY3V0ZWQpLgordmFyIGFzc2VydFVucmVhY2hhYmxlOworCisvLyBBc3Nl
cnQgdGhhdCB0aGUgZnVuY3Rpb24gY29kZSBpcyAobm90KSBvcHRpbWl6ZWQuCisvLyBPbmx5IHdv
cmtzIHdpdGggLS1hbGxvdy1uYXRpdmVzLXN5bnRheC4KK3ZhciBhc3NlcnRPcHRpbWl6ZWQ7Cit2
YXIgYXNzZXJ0VW5vcHRpbWl6ZWQ7CisKKy8vIEFzc2VydCB0aGF0IGEgc3RyaW5nIGNvbnRhaW5z
IGFub3RoZXIgZXhwZWN0ZWQgc3Vic3RyaW5nLgordmFyIGFzc2VydENvbnRhaW5zOworCisvLyBB
c3NlcnQgdGhhdCBhIHN0cmluZyBtYXRjaGVzIGEgZ2l2ZW4gcmVnZXguCit2YXIgYXNzZXJ0TWF0
Y2hlczsKKworLy8gQXNzZXJ0IHRoYXQgYSBwcm9taXNlIHJlc29sdmVzIG9yIHJlamVjdHMuCisv
LyBQYXJhbWV0ZXJzOgorLy8ge3Byb21pc2V9IC0gdGhlIHByb21pc2UKKy8vIHtzdWNjZXNzfSAt
IG9wdGlvbmFsIC0gYSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzdWx0IG9m
IHRoZQorLy8gICAgICAgICAgICAgcmVzb2x2aW5nIHByb21pc2UuCisvLyAge2ZhaWx9IC0gICBv
cHRpb25hbCAtIGEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0
aGUKKy8vICAgICAgICAgICAgIHJlamVjdGluZyBwcm9taXNlLiBJZiB0aGUgcHJvbWlzZSBpcyBy
ZWplY3RlZCBidXQgbm8ge2ZhaWx9CisvLyAgICAgICAgICAgICBjYWxsYmFjayBpcyBzZXQsIHRo
ZSBlcnJvciBpcyBwcm9wYWdhdGVkIG91dCBvZiB0aGUgcHJvbWlzZQorLy8gICAgICAgICAgICAg
Y2hhaW4uCit2YXIgYXNzZXJ0UHJvbWlzZVJlc3VsdDsKKwordmFyIHByb21pc2VUZXN0Q2hhaW47
Cit2YXIgcHJvbWlzZVRlc3RDb3VudCA9IDA7CisKKy8vIFRoZXNlIGJpdHMgbXVzdCBiZSBpbiBz
eW5jIHdpdGggYml0cyBkZWZpbmVkIGluIFJ1bnRpbWVfR2V0T3B0aW1pemF0aW9uU3RhdHVzCit2
YXIgVjhPcHRpbWl6YXRpb25TdGF0dXMgPSB7CisgIGtJc0Z1bmN0aW9uOiAxIDw8IDAsCisgIGtO
ZXZlck9wdGltaXplOiAxIDw8IDEsCisgIGtBbHdheXNPcHRpbWl6ZTogMSA8PCAyLAorICBrTWF5
YmVEZW9wdGVkOiAxIDw8IDMsCisgIGtPcHRpbWl6ZWQ6IDEgPDwgNCwKKyAga1R1cmJvRmFubmVk
OiAxIDw8IDUsCisgIGtJbnRlcnByZXRlZDogMSA8PCA2LAorICBrTWFya2VkRm9yT3B0aW1pemF0
aW9uOiAxIDw8IDcsCisgIGtNYXJrZWRGb3JDb25jdXJyZW50T3B0aW1pemF0aW9uOiAxIDw8IDgs
CisgIGtPcHRpbWl6aW5nQ29uY3VycmVudGx5OiAxIDw8IDksCisgIGtJc0V4ZWN1dGluZzogMSA8
PCAxMCwKKyAga1RvcG1vc3RGcmFtZUlzVHVyYm9GYW5uZWQ6IDEgPDwgMTEsCisgIGtMaXRlTW9k
ZTogMSA8PCAxMiwKKyAga01hcmtlZEZvckRlb3B0aW1pemF0aW9uOiAxIDw8IDEzLAorICBrQmFz
ZWxpbmU6IDEgPDwgMTQsCisgIGtUb3Btb3N0RnJhbWVJc0ludGVycHJldGVkOiAxIDw8IDE1LAor
ICBrVG9wbW9zdEZyYW1lSXNCYXNlbGluZTogMSA8PCAxNiwKK307CisKKy8vIFJldHVybnMgdHJ1
ZSBpZiAtLWxpdGUtbW9kZSBpcyBvbiBhbmQgd2UgY2FuJ3QgZXZlciB0dXJuIG9uIG9wdGltaXph
dGlvbi4KK3ZhciBpc05ldmVyT3B0aW1pemVMaXRlTW9kZTsKKworLy8gUmV0dXJucyB0cnVlIGlm
IC0tbm8tb3B0IG1vZGUgaXMgb24uCit2YXIgaXNOZXZlck9wdGltaXplOworCisvLyBSZXR1cm5z
IHRydWUgaWYgLS1hbHdheXMtb3B0IG1vZGUgaXMgb24uCit2YXIgaXNBbHdheXNPcHRpbWl6ZTsK
KworLy8gUmV0dXJucyB0cnVlIGlmIGdpdmVuIGZ1bmN0aW9uIGluIGludGVycHJldGVkLgordmFy
IGlzSW50ZXJwcmV0ZWQ7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBmdW5jdGlvbiBpbiBi
YXNlbGluZS4KK3ZhciBpc0Jhc2VsaW5lOworCisvLyBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gZnVu
Y3Rpb24gaW4gdW5vcHRpbWl6ZWQgKGludGVycHJldGVkIG9yIGJhc2VsaW5lKS4KK3ZhciBpc1Vu
b3B0aW1pemVkOworCisvLyBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24gaXMgb3B0aW1p
emVkLgordmFyIGlzT3B0aW1pemVkOworCisvLyBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rp
b24gaXMgY29tcGlsZWQgYnkgVHVyYm9GYW4uCit2YXIgaXNUdXJib0Zhbm5lZDsKKworLy8gTW9u
a2V5LXBhdGNoYWJsZSBhbGwtcHVycG9zZSBmYWlsdXJlIGhhbmRsZXIuCit2YXIgZmFpbFdpdGhN
ZXNzYWdlOworCisvLyBSZXR1cm5zIHRoZSBmb3JtYXR0ZWQgZmFpbHVyZSB0ZXh0LiAgVXNlZCBi
eSB0ZXN0LWFzeW5jLmpzLgordmFyIGZvcm1hdEZhaWx1cmVUZXh0OworCisvLyBSZXR1cm5zIGEg
cHJldHR5LXByaW50ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXNzZWQgdmFsdWUu
Cit2YXIgcHJldHR5UHJpbnRlZDsKKworKGZ1bmN0aW9uICgpIHsgIC8vIFNjb3BlIGZvciB1dGls
aXR5IGZ1bmN0aW9ucy4KKworICB2YXIgT2JqZWN0UHJvdG90eXBlVG9TdHJpbmcgPSBPYmplY3Qu
cHJvdG90eXBlLnRvU3RyaW5nOworICB2YXIgTnVtYmVyUHJvdG90eXBlVmFsdWVPZiA9IE51bWJl
ci5wcm90b3R5cGUudmFsdWVPZjsKKyAgdmFyIEJvb2xlYW5Qcm90b3R5cGVWYWx1ZU9mID0gQm9v
bGVhbi5wcm90b3R5cGUudmFsdWVPZjsKKyAgdmFyIFN0cmluZ1Byb3RvdHlwZVZhbHVlT2YgPSBT
dHJpbmcucHJvdG90eXBlLnZhbHVlT2Y7CisgIHZhciBEYXRlUHJvdG90eXBlVmFsdWVPZiA9IERh
dGUucHJvdG90eXBlLnZhbHVlT2Y7CisgIHZhciBSZWdFeHBQcm90b3R5cGVUb1N0cmluZyA9IFJl
Z0V4cC5wcm90b3R5cGUudG9TdHJpbmc7CisgIHZhciBBcnJheVByb3RvdHlwZUZvckVhY2ggPSBB
cnJheS5wcm90b3R5cGUuZm9yRWFjaDsKKyAgdmFyIEFycmF5UHJvdG90eXBlSm9pbiA9IEFycmF5
LnByb3RvdHlwZS5qb2luOworICB2YXIgQXJyYXlQcm90b3R5cGVNYXAgPSBBcnJheS5wcm90b3R5
cGUubWFwOworICB2YXIgQXJyYXlQcm90b3R5cGVQdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7
CisgIHZhciBKU09OU3RyaW5naWZ5ID0gSlNPTi5zdHJpbmdpZnk7CisKKyAgdmFyIEJpZ0ludFBy
b3RvdHlwZVZhbHVlT2Y7CisgIC8vIFRPRE8obmVpcyk6IFJlbW92ZSB0cnktY2F0Y2ggb25jZSBC
aWdJbnRzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCisgIHRyeSB7CisgICAgQmlnSW50UHJvdG90
eXBlVmFsdWVPZiA9IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZjsKKyAgfSBjYXRjaCAoZSkge30K
KworICBmdW5jdGlvbiBjbGFzc09mKG9iamVjdCkgeworICAgIC8vIEFyZ3VtZW50IG11c3Qgbm90
IGJlIG51bGwgb3IgdW5kZWZpbmVkLgorICAgIHZhciBzdHJpbmcgPSBPYmplY3RQcm90b3R5cGVU
b1N0cmluZy5jYWxsKG9iamVjdCk7CisgICAgLy8gU3RyaW5nIGhhcyBmb3JtYXQgW29iamVjdCA8
Q2xhc3NOYW1lPl0uCisgICAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoOCwgc3RyaW5nLmxlbmd0
aCAtIDEpOworICB9CisKKworICBmdW5jdGlvbiBWYWx1ZU9mKHZhbHVlKSB7CisgICAgc3dpdGNo
IChjbGFzc09mKHZhbHVlKSkgeworICAgICAgY2FzZSAiTnVtYmVyIjoKKyAgICAgICAgcmV0dXJu
IE51bWJlclByb3RvdHlwZVZhbHVlT2YuY2FsbCh2YWx1ZSk7CisgICAgICBjYXNlICJCaWdJbnQi
OgorICAgICAgICByZXR1cm4gQmlnSW50UHJvdG90eXBlVmFsdWVPZi5jYWxsKHZhbHVlKTsKKyAg
ICAgIGNhc2UgIlN0cmluZyI6CisgICAgICAgIHJldHVybiBTdHJpbmdQcm90b3R5cGVWYWx1ZU9m
LmNhbGwodmFsdWUpOworICAgICAgY2FzZSAiQm9vbGVhbiI6CisgICAgICAgIHJldHVybiBCb29s
ZWFuUHJvdG90eXBlVmFsdWVPZi5jYWxsKHZhbHVlKTsKKyAgICAgIGNhc2UgIkRhdGUiOgorICAg
ICAgICByZXR1cm4gRGF0ZVByb3RvdHlwZVZhbHVlT2YuY2FsbCh2YWx1ZSk7CisgICAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorICB9CisKKworICBwcmV0dHlQcmlu
dGVkID0gZnVuY3Rpb24gcHJldHR5UHJpbnRlZCh2YWx1ZSkgeworICAgIHN3aXRjaCAodHlwZW9m
IHZhbHVlKSB7CisgICAgICBjYXNlICJzdHJpbmciOgorICAgICAgICByZXR1cm4gSlNPTlN0cmlu
Z2lmeSh2YWx1ZSk7CisgICAgICBjYXNlICJiaWdpbnQiOgorICAgICAgICByZXR1cm4gU3RyaW5n
KHZhbHVlKSArICJuIjsKKyAgICAgIGNhc2UgIm51bWJlciI6CisgICAgICAgIGlmICh2YWx1ZSA9
PT0gMCAmJiAoMSAvIHZhbHVlKSA8IDApIHJldHVybiAiLTAiOworICAgICAgICAvLyBGQUxMVEhS
T1VHSC4KKyAgICAgIGNhc2UgImJvb2xlYW4iOgorICAgICAgY2FzZSAidW5kZWZpbmVkIjoKKyAg
ICAgIGNhc2UgImZ1bmN0aW9uIjoKKyAgICAgIGNhc2UgInN5bWJvbCI6CisgICAgICAgIHJldHVy
biBTdHJpbmcodmFsdWUpOworICAgICAgY2FzZSAib2JqZWN0IjoKKyAgICAgICAgaWYgKHZhbHVl
ID09PSBudWxsKSByZXR1cm4gIm51bGwiOworICAgICAgICB2YXIgb2JqZWN0Q2xhc3MgPSBjbGFz
c09mKHZhbHVlKTsKKyAgICAgICAgc3dpdGNoIChvYmplY3RDbGFzcykgeworICAgICAgICAgIGNh
c2UgIk51bWJlciI6CisgICAgICAgICAgY2FzZSAiQmlnSW50IjoKKyAgICAgICAgICBjYXNlICJT
dHJpbmciOgorICAgICAgICAgIGNhc2UgIkJvb2xlYW4iOgorICAgICAgICAgIGNhc2UgIkRhdGUi
OgorICAgICAgICAgICAgcmV0dXJuIG9iamVjdENsYXNzICsgIigiICsgcHJldHR5UHJpbnRlZChW
YWx1ZU9mKHZhbHVlKSkgKyAiKSI7CisgICAgICAgICAgY2FzZSAiUmVnRXhwIjoKKyAgICAgICAg
ICAgIHJldHVybiBSZWdFeHBQcm90b3R5cGVUb1N0cmluZy5jYWxsKHZhbHVlKTsKKyAgICAgICAg
ICBjYXNlICJBcnJheSI6CisgICAgICAgICAgICB2YXIgbWFwcGVkID0gQXJyYXlQcm90b3R5cGVN
YXAuY2FsbCgKKyAgICAgICAgICAgICAgICB2YWx1ZSwgcHJldHR5UHJpbnRlZEFycmF5RWxlbWVu
dCk7CisgICAgICAgICAgICB2YXIgam9pbmVkID0gQXJyYXlQcm90b3R5cGVKb2luLmNhbGwobWFw
cGVkLCAiLCIpOworICAgICAgICAgICAgcmV0dXJuICJbIiArIGpvaW5lZCArICJdIjsKKyAgICAg
ICAgICBjYXNlICJVaW50OEFycmF5IjoKKyAgICAgICAgICBjYXNlICJJbnQ4QXJyYXkiOgorICAg
ICAgICAgIGNhc2UgIkludDE2QXJyYXkiOgorICAgICAgICAgIGNhc2UgIlVpbnQxNkFycmF5IjoK
KyAgICAgICAgICBjYXNlICJVaW50MzJBcnJheSI6CisgICAgICAgICAgY2FzZSAiSW50MzJBcnJh
eSI6CisgICAgICAgICAgY2FzZSAiRmxvYXQzMkFycmF5IjoKKyAgICAgICAgICBjYXNlICJGbG9h
dDY0QXJyYXkiOgorICAgICAgICAgICAgdmFyIGpvaW5lZCA9IEFycmF5UHJvdG90eXBlSm9pbi5j
YWxsKHZhbHVlLCAiLCIpOworICAgICAgICAgICAgcmV0dXJuIG9iamVjdENsYXNzICsgIihbIiAr
IGpvaW5lZCArICJdKSI7CisgICAgICAgICAgY2FzZSAiT2JqZWN0IjoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Q2xhc3Mg
KyAiKCIgKyBTdHJpbmcodmFsdWUpICsgIikiOworICAgICAgICB9CisgICAgICAgIC8vIGNsYXNz
T2YoKSByZXR1cm5lZCAiT2JqZWN0Ii4KKyAgICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5jb25zdHJ1
Y3Rvci5uYW1lOworICAgICAgICBpZiAobmFtZSkgcmV0dXJuIG5hbWUgKyAiKCkiOworICAgICAg
ICByZXR1cm4gIk9iamVjdCgpIjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiLS0g
dW5rbm93biB2YWx1ZSAtLSI7CisgICAgfQorICB9CisKKworICBmdW5jdGlvbiBwcmV0dHlQcmlu
dGVkQXJyYXlFbGVtZW50KHZhbHVlLCBpbmRleCwgYXJyYXkpIHsKKyAgICBpZiAodmFsdWUgPT09
IHVuZGVmaW5lZCAmJiAhKGluZGV4IGluIGFycmF5KSkgcmV0dXJuICIiOworICAgIHJldHVybiBw
cmV0dHlQcmludGVkKHZhbHVlKTsKKyAgfQorCisKKyAgZmFpbFdpdGhNZXNzYWdlID0gZnVuY3Rp
b24gZmFpbFdpdGhNZXNzYWdlKG1lc3NhZ2UpIHsKKyAgICB0aHJvdyBuZXcgTWpzVW5pdEFzc2Vy
dGlvbkVycm9yKG1lc3NhZ2UpOworICB9CisKKyAgZm9ybWF0RmFpbHVyZVRleHQgPSBmdW5jdGlv
bihleHBlY3RlZFRleHQsIGZvdW5kLCBuYW1lX29wdCkgeworICAgIHZhciBtZXNzYWdlID0gIkZh
aWwiICsgInVyZSI7CisgICAgaWYgKG5hbWVfb3B0KSB7CisgICAgICAvLyBGaXggdGhpcyB3aGVu
IHdlIGRpdGNoIHRoZSBvbGQgdGVzdCBydW5uZXIuCisgICAgICBtZXNzYWdlICs9ICIgKCIgKyBu
YW1lX29wdCArICIpIjsKKyAgICB9CisKKyAgICB2YXIgZm91bmRUZXh0ID0gcHJldHR5UHJpbnRl
ZChmb3VuZCk7CisgICAgaWYgKGV4cGVjdGVkVGV4dC5sZW5ndGggPD0gNDAgJiYgZm91bmRUZXh0
Lmxlbmd0aCA8PSA0MCkgeworICAgICAgbWVzc2FnZSArPSAiOiBleHBlY3RlZCA8IiArIGV4cGVj
dGVkVGV4dCArICI+IGZvdW5kIDwiICsgZm91bmRUZXh0ICsgIj4iOworICAgIH0gZWxzZSB7Cisg
ICAgICBtZXNzYWdlICs9ICI6XG5leHBlY3RlZDpcbiIgKyBleHBlY3RlZFRleHQgKyAiXG5mb3Vu
ZDpcbiIgKyBmb3VuZFRleHQ7CisgICAgfQorICAgIHJldHVybiBtZXNzYWdlOworICB9CisKKyAg
ZnVuY3Rpb24gZmFpbChleHBlY3RlZFRleHQsIGZvdW5kLCBuYW1lX29wdCkgeworICAgIHJldHVy
biBmYWlsV2l0aE1lc3NhZ2UoZm9ybWF0RmFpbHVyZVRleHQoZXhwZWN0ZWRUZXh0LCBmb3VuZCwg
bmFtZV9vcHQpKTsKKyAgfQorCisKKyAgZnVuY3Rpb24gZGVlcE9iamVjdEVxdWFscyhhLCBiKSB7
CisgICAgdmFyIGFQcm9wcyA9IE9iamVjdC5rZXlzKGEpOworICAgIGFQcm9wcy5zb3J0KCk7Cisg
ICAgdmFyIGJQcm9wcyA9IE9iamVjdC5rZXlzKGIpOworICAgIGJQcm9wcy5zb3J0KCk7CisgICAg
aWYgKCFkZWVwRXF1YWxzKGFQcm9wcywgYlByb3BzKSkgeworICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykgeworICAg
ICAgaWYgKCFkZWVwRXF1YWxzKGFbYVByb3BzW2ldXSwgYlthUHJvcHNbaV1dKSkgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisK
KworICBkZWVwRXF1YWxzID0gZnVuY3Rpb24gZGVlcEVxdWFscyhhLCBiKSB7CisgICAgaWYgKGEg
PT09IGIpIHsKKyAgICAgIC8vIENoZWNrIGZvciAtMC4KKyAgICAgIGlmIChhID09PSAwKSByZXR1
cm4gKDEgLyBhKSA9PT0gKDEgLyBiKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBp
ZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKHR5cGVvZiBh
ID09PSAibnVtYmVyIikgcmV0dXJuIGlzTmFOKGEpICYmIGlzTmFOKGIpOworICAgIGlmICh0eXBl
b2YgYSAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIGEgIT09ICJmdW5jdGlvbiIpIHJldHVybiBmYWxz
ZTsKKyAgICAvLyBOZWl0aGVyIGEgbm9yIGIgaXMgcHJpbWl0aXZlLgorICAgIHZhciBvYmplY3RD
bGFzcyA9IGNsYXNzT2YoYSk7CisgICAgaWYgKG9iamVjdENsYXNzICE9PSBjbGFzc09mKGIpKSBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdENsYXNzID09PSAiUmVnRXhwIikgeworICAgICAg
Ly8gRm9yIFJlZ0V4cCwganVzdCBjb21wYXJlIHBhdHRlcm4gYW5kIGZsYWdzIHVzaW5nIGl0cyB0
b1N0cmluZy4KKyAgICAgIHJldHVybiBSZWdFeHBQcm90b3R5cGVUb1N0cmluZy5jYWxsKGEpID09
PQorICAgICAgICAgICAgIFJlZ0V4cFByb3RvdHlwZVRvU3RyaW5nLmNhbGwoYik7CisgICAgfQor
ICAgIC8vIEZ1bmN0aW9ucyBhcmUgb25seSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcy4KKyAgICBp
ZiAob2JqZWN0Q2xhc3MgPT09ICJGdW5jdGlvbiIpIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2Jq
ZWN0Q2xhc3MgPT09ICJBcnJheSIpIHsKKyAgICAgIHZhciBlbGVtZW50Q291bnQgPSAwOworICAg
ICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICB9CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgaWYgKCFkZWVwRXF1YWxzKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7CisgICAgICB9Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKG9iamVjdENsYXNzID09PSAiU3RyaW5n
IiB8fCBvYmplY3RDbGFzcyA9PT0gIk51bWJlciIgfHwKKyAgICAgIG9iamVjdENsYXNzID09PSAi
QmlnSW50IiB8fCBvYmplY3RDbGFzcyA9PT0gIkJvb2xlYW4iIHx8CisgICAgICBvYmplY3RDbGFz
cyA9PT0gIkRhdGUiKSB7CisgICAgICBpZiAoVmFsdWVPZihhKSAhPT0gVmFsdWVPZihiKSkgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gZGVlcE9iamVjdEVxdWFscyhhLCBiKTsKKyAg
fQorCisgIGFzc2VydFNhbWUgPSBmdW5jdGlvbiBhc3NlcnRTYW1lKGV4cGVjdGVkLCBmb3VuZCwg
bmFtZV9vcHQpIHsKKyAgICBpZiAoT2JqZWN0LmlzKGV4cGVjdGVkLCBmb3VuZCkpIHJldHVybjsK
KyAgICBmYWlsKHByZXR0eVByaW50ZWQoZXhwZWN0ZWQpLCBmb3VuZCwgbmFtZV9vcHQpOworICB9
OworCisgIGFzc2VydE5vdFNhbWUgPSBmdW5jdGlvbiBhc3NlcnROb3RTYW1lKGV4cGVjdGVkLCBm
b3VuZCwgbmFtZV9vcHQpIHsKKyAgICBpZiAoIU9iamVjdC5pcyhleHBlY3RlZCwgZm91bmQpKSBy
ZXR1cm47CisgICAgZmFpbCgibm90IHNhbWUgYXMgIiArIHByZXR0eVByaW50ZWQoZXhwZWN0ZWQp
LCBmb3VuZCwgbmFtZV9vcHQpOworICB9CisKKyAgYXNzZXJ0RXF1YWxzID0gZnVuY3Rpb24gYXNz
ZXJ0RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgICBpZiAoIWRlZXBFcXVh
bHMoZm91bmQsIGV4cGVjdGVkKSkgeworICAgICAgZmFpbChwcmV0dHlQcmludGVkKGV4cGVjdGVk
KSwgZm91bmQsIG5hbWVfb3B0KTsKKyAgICB9CisgIH07CisKKyAgYXNzZXJ0Tm90RXF1YWxzID0g
ZnVuY3Rpb24gYXNzZXJ0Tm90RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAg
ICBpZiAoZGVlcEVxdWFscyhmb3VuZCwgZXhwZWN0ZWQpKSB7CisgICAgICBmYWlsKCJub3QgZXF1
YWxzIHRvICIgKyBwcmV0dHlQcmludGVkKGV4cGVjdGVkKSwgZm91bmQsIG5hbWVfb3B0KTsKKyAg
ICB9CisgIH07CisKKworICBhc3NlcnRFcXVhbHNEZWx0YSA9CisgICAgICBmdW5jdGlvbiBhc3Nl
cnRFcXVhbHNEZWx0YShleHBlY3RlZCwgZm91bmQsIGRlbHRhLCBuYW1lX29wdCkgeworICAgIGlm
IChNYXRoLmFicyhleHBlY3RlZCAtIGZvdW5kKSA+IGRlbHRhKSB7CisgICAgICBmYWlsKHByZXR0
eVByaW50ZWQoZXhwZWN0ZWQpICsgIiArLSAiICsgcHJldHR5UHJpbnRlZChkZWx0YSksIGZvdW5k
LCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0QXJyYXlFcXVhbHMgPSBmdW5j
dGlvbiBhc3NlcnRBcnJheUVxdWFscyhleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAg
dmFyIHN0YXJ0ID0gIiI7CisgICAgaWYgKG5hbWVfb3B0KSB7CisgICAgICBzdGFydCA9IG5hbWVf
b3B0ICsgIiAtICI7CisgICAgfQorICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5sZW5ndGgsIGZv
dW5kLmxlbmd0aCwgc3RhcnQgKyAiYXJyYXkgbGVuZ3RoIik7CisgICAgaWYgKGV4cGVjdGVkLmxl
bmd0aCA9PT0gZm91bmQubGVuZ3RoKSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVj
dGVkLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFtpXSwgZm91
bmRbaV0sCisgICAgICAgICAgICAgICAgICAgICBzdGFydCArICJhcnJheSBlbGVtZW50IGF0IGlu
ZGV4ICIgKyBpKTsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKworICBhc3NlcnRQcm9wZXJ0aWVz
RXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRQcm9wZXJ0aWVzRXF1YWwoZXhwZWN0ZWQsIGZvdW5kLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZV9vcHQpIHsKKyAgICAvLyBDaGVjayBwcm9wZXJ0aWVzIG9ubHkuCisgICAgaWYgKCFkZWVw
T2JqZWN0RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCkpIHsKKyAgICAgIGZhaWwoZXhwZWN0ZWQsIGZv
dW5kLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0VG9TdHJpbmdFcXVhbHMg
PSBmdW5jdGlvbiBhc3NlcnRUb1N0cmluZ0VxdWFscyhleHBlY3RlZCwgZm91bmQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9vcHQp
IHsKKyAgICBpZiAoZXhwZWN0ZWQgIT09IFN0cmluZyhmb3VuZCkpIHsKKyAgICAgIGZhaWwoZXhw
ZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0VHJ1ZSA9
IGZ1bmN0aW9uIGFzc2VydFRydWUodmFsdWUsIG5hbWVfb3B0KSB7CisgICAgYXNzZXJ0RXF1YWxz
KHRydWUsIHZhbHVlLCBuYW1lX29wdCk7CisgIH07CisKKworICBhc3NlcnRGYWxzZSA9IGZ1bmN0
aW9uIGFzc2VydEZhbHNlKHZhbHVlLCBuYW1lX29wdCkgeworICAgIGFzc2VydEVxdWFscyhmYWxz
ZSwgdmFsdWUsIG5hbWVfb3B0KTsKKyAgfTsKKworCisgIGFzc2VydE51bGwgPSBmdW5jdGlvbiBh
c3NlcnROdWxsKHZhbHVlLCBuYW1lX29wdCkgeworICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkgewor
ICAgICAgZmFpbCgibnVsbCIsIHZhbHVlLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisKKyAg
YXNzZXJ0Tm90TnVsbCA9IGZ1bmN0aW9uIGFzc2VydE5vdE51bGwodmFsdWUsIG5hbWVfb3B0KSB7
CisgICAgaWYgKHZhbHVlID09PSBudWxsKSB7CisgICAgICBmYWlsKCJub3QgbnVsbCIsIHZhbHVl
LCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIGV4ZWN1dGVDb2RlKGNvZGUp
IHsKKyAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdmdW5jdGlvbicpICByZXR1cm4gY29kZSgpOwor
ICAgIGlmICh0eXBlb2YgY29kZSA9PT0gJ3N0cmluZycpIHJldHVybiBldmFsKGNvZGUpOworICAg
IGZhaWxXaXRoTWVzc2FnZSgKKyAgICAgICAgJ0dpdmVuIGNvZGUgaXMgbmVpdGhlciBmdW5jdGlv
biBub3Igc3RyaW5nLCBidXQgJyArICh0eXBlb2YgY29kZSkgKworICAgICAgICAnOiA8JyArIHBy
ZXR0eVByaW50ZWQoY29kZSkgKyAnPicpOworICB9CisKKyAgZnVuY3Rpb24gY2hlY2tFeGNlcHRp
b24oZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkgeworICAgIGlmICh0eXBlX29wdCAhPT0gdW5kZWZp
bmVkKSB7CisgICAgICBhc3NlcnRFcXVhbHMoJ2Z1bmN0aW9uJywgdHlwZW9mIHR5cGVfb3B0KTsK
KyAgICAgIGFzc2VydEluc3RhbmNlb2YoZSwgdHlwZV9vcHQpOworICAgIH0KKyAgICBpZiAoUmVn
RXhwICE9PSB1bmRlZmluZWQgJiYgY2F1c2Vfb3B0IGluc3RhbmNlb2YgUmVnRXhwKSB7CisgICAg
ICBhc3NlcnRNYXRjaGVzKGNhdXNlX29wdCwgZS5tZXNzYWdlLCAnRXJyb3IgbWVzc2FnZScpOwor
ICAgIH0gZWxzZSBpZiAoY2F1c2Vfb3B0ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIGFzc2VydEVx
dWFscyhjYXVzZV9vcHQsIGUubWVzc2FnZSwgJ0Vycm9yIG1lc3NhZ2UnKTsKKyAgICB9CisgIH0K
KworICBhc3NlcnRUaHJvd3MgPSBmdW5jdGlvbiBhc3NlcnRUaHJvd3MoY29kZSwgdHlwZV9vcHQs
IGNhdXNlX29wdCkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlX29wdCA9
PT0gdW5kZWZpbmVkKSB7CisgICAgICBmYWlsV2l0aE1lc3NhZ2UoJ2ludmFsaWQgdXNlIG9mIGFz
c2VydFRocm93cywgdW5rbm93biB0eXBlX29wdCBnaXZlbicpOworICAgIH0KKyAgICBpZiAodHlw
ZV9vcHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdHlwZV9vcHQgIT09ICdmdW5jdGlvbicpIHsK
KyAgICAgIGZhaWxXaXRoTWVzc2FnZSgKKyAgICAgICAgICAnaW52YWxpZCB1c2Ugb2YgYXNzZXJ0
VGhyb3dzLCBtYXliZSB5b3Ugd2FudCBhc3NlcnRUaHJvd3NFcXVhbHMnKTsKKyAgICB9CisgICAg
dHJ5IHsKKyAgICAgIGV4ZWN1dGVDb2RlKGNvZGUpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
IGNoZWNrRXhjZXB0aW9uKGUsIHR5cGVfb3B0LCBjYXVzZV9vcHQpOworICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBsZXQgbXNnID0gJ0RpZCBub3QgdGhyb3cgZXhjZXB0aW9uJzsKKyAgICBpZiAo
dHlwZV9vcHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlX29wdC5uYW1lICE9PSB1bmRlZmluZWQpCisg
ICAgICBtc2cgKz0gJywgZXhwZWN0ZWQgJyArIHR5cGVfb3B0Lm5hbWU7CisgICAgZmFpbFdpdGhN
ZXNzYWdlKG1zZyk7CisgIH07CisKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzID0gZnVuY3Rpb24gYXNz
ZXJ0VGhyb3dzRXF1YWxzKGZ1biwgdmFsKSB7CisgICAgdHJ5IHsKKyAgICAgIGZ1bigpOworICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgIGFzc2VydFNhbWUodmFsLCBlKTsKKyAgICAgIHJldHVybjsK
KyAgICB9CisgICAgZmFpbFdpdGhNZXNzYWdlKCdEaWQgbm90IHRocm93IGV4Y2VwdGlvbiwgZXhw
ZWN0ZWQgJyArIHByZXR0eVByaW50ZWQodmFsKSk7CisgIH07CisKKyAgYXNzZXJ0VGhyb3dzQXN5
bmMgPSBmdW5jdGlvbiBhc3NlcnRUaHJvd3NBc3luYyhwcm9taXNlLCB0eXBlX29wdCwgY2F1c2Vf
b3B0KSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHR5cGVfb3B0ID09PSB1bmRl
ZmluZWQpIHsKKyAgICAgIGZhaWxXaXRoTWVzc2FnZSgnaW52YWxpZCB1c2Ugb2YgYXNzZXJ0VGhy
b3dzLCB1bmtub3duIHR5cGVfb3B0IGdpdmVuJyk7CisgICAgfQorICAgIGlmICh0eXBlX29wdCAh
PT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0eXBlX29wdCAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAg
ZmFpbFdpdGhNZXNzYWdlKAorICAgICAgICAgICdpbnZhbGlkIHVzZSBvZiBhc3NlcnRUaHJvd3Ms
IG1heWJlIHlvdSB3YW50IGFzc2VydFRocm93c0VxdWFscycpOworICAgIH0KKyAgICBsZXQgbXNn
ID0gJ1Byb21pc2UgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24nOworICAgIGlmICh0eXBlX29wdCAh
PT0gdW5kZWZpbmVkICYmIHR5cGVfb3B0Lm5hbWUgIT09IHVuZGVmaW5lZCkKKyAgICAgIG1zZyAr
PSAnLCBleHBlY3RlZCAnICsgdHlwZV9vcHQubmFtZTsKKyAgICByZXR1cm4gYXNzZXJ0UHJvbWlz
ZVJlc3VsdCgKKyAgICAgICAgcHJvbWlzZSwKKyAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8g
dGhyb3cgdGhlIGVycm9yIGFnYWluIHRvIGdldCBvdXQgb2YgdGhlIHByb21pc2UKKyAgICAgICAg
Ly8gY2hhaW4uCisgICAgICAgIHJlcyA9PiBzZXRUaW1lb3V0KF8gPT4gZmFpbCgnPHRocm93Pics
IHJlcywgbXNnKSwgMCksCisgICAgICAgIGUgPT4gY2hlY2tFeGNlcHRpb24oZSwgdHlwZV9vcHQs
IGNhdXNlX29wdCkpOworICB9OworCisgIGFzc2VydEluc3RhbmNlb2YgPSBmdW5jdGlvbiBhc3Nl
cnRJbnN0YW5jZW9mKG9iaiwgdHlwZSkgeworICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIHR5cGUp
KSB7CisgICAgICB2YXIgYWN0dWFsVHlwZU5hbWUgPSBudWxsOworICAgICAgdmFyIGFjdHVhbENv
bnN0cnVjdG9yID0gb2JqICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopLmNvbnN0cnVjdG9y
OworICAgICAgaWYgKHR5cGVvZiBhY3R1YWxDb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJykgewor
ICAgICAgICBhY3R1YWxUeXBlTmFtZSA9IGFjdHVhbENvbnN0cnVjdG9yLm5hbWUgfHwgU3RyaW5n
KGFjdHVhbENvbnN0cnVjdG9yKTsKKyAgICAgIH0KKyAgICAgIGZhaWxXaXRoTWVzc2FnZSgKKyAg
ICAgICAgICAnT2JqZWN0IDwnICsgcHJldHR5UHJpbnRlZChvYmopICsgJz4gaXMgbm90IGFuIGlu
c3RhbmNlIG9mIDwnICsKKyAgICAgICAgICAodHlwZS5uYW1lIHx8IHR5cGUpICsgJz4nICsKKyAg
ICAgICAgICAoYWN0dWFsVHlwZU5hbWUgPyAnIGJ1dCBvZiA8JyArIGFjdHVhbFR5cGVOYW1lICsg
Jz4nIDogJycpKTsKKyAgICB9CisgIH07CisKKyAgYXNzZXJ0RG9lc05vdFRocm93ID0gZnVuY3Rp
b24gYXNzZXJ0RG9lc05vdFRocm93KGNvZGUsIG5hbWVfb3B0KSB7CisgICAgdHJ5IHsKKyAgICAg
IGV4ZWN1dGVDb2RlKGNvZGUpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGlmIChlIGluc3Rh
bmNlb2YgTWpzVW5pdEFzc2VydGlvbkVycm9yKSB0aHJvdyBlOworICAgICAgZmFpbFdpdGhNZXNz
YWdlKCJ0aHJldyBhbiBleGNlcHRpb246ICIgKyAoZS5tZXNzYWdlIHx8IGUpKTsKKyAgICB9Cisg
IH07CisKKyAgYXNzZXJ0VW5yZWFjaGFibGUgPSBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZShu
YW1lX29wdCkgeworICAgIC8vIEZpeCB0aGlzIHdoZW4gd2UgZGl0Y2ggdGhlIG9sZCB0ZXN0IHJ1
bm5lci4KKyAgICB2YXIgbWVzc2FnZSA9ICJGYWlsIiArICJ1cmU6IHVucmVhY2hhYmxlIjsKKyAg
ICBpZiAobmFtZV9vcHQpIHsKKyAgICAgIG1lc3NhZ2UgKz0gIiAtICIgKyBuYW1lX29wdDsKKyAg
ICB9CisgICAgZmFpbFdpdGhNZXNzYWdlKG1lc3NhZ2UpOworICB9OworCisgIGFzc2VydENvbnRh
aW5zID0gZnVuY3Rpb24oc3ViLCB2YWx1ZSwgbmFtZV9vcHQpIHsKKyAgICBpZiAodmFsdWUgPT0g
bnVsbCA/IChzdWIgIT0gbnVsbCkgOiB2YWx1ZS5pbmRleE9mKHN1YikgPT0gLTEpIHsKKyAgICAg
IGZhaWwoImNvbnRhaW5zICciICsgU3RyaW5nKHN1YikgKyAiJyIsIHZhbHVlLCBuYW1lX29wdCk7
CisgICAgfQorICB9OworCisgIGFzc2VydE1hdGNoZXMgPSBmdW5jdGlvbihyZWdleHAsIHN0ciwg
bmFtZV9vcHQpIHsKKyAgICBpZiAoIShyZWdleHAgaW5zdGFuY2VvZiBSZWdFeHApKSB7CisgICAg
ICByZWdleHAgPSBuZXcgUmVnRXhwKHJlZ2V4cCk7CisgICAgfQorICAgIGlmICghc3RyLm1hdGNo
KHJlZ2V4cCkpIHsKKyAgICAgIGZhaWwoInNob3VsZCBtYXRjaCAnIiArIHJlZ2V4cCArICInIiwg
c3RyLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIGNvbmNhdGVuYXRlRXJy
b3JzKHN0YWNrLCBleGNlcHRpb24pIHsKKyAgICAvLyBJZiB0aGUgZXhjZXB0aW9uIGRvZXMgbm90
IGNvbnRhaW4gYSBzdGFjayB0cmFjZSwgd3JhcCBpdCBpbiBhIG5ldyBFcnJvci4KKyAgICBpZiAo
IWV4Y2VwdGlvbi5zdGFjaykgZXhjZXB0aW9uID0gbmV3IEVycm9yKGV4Y2VwdGlvbik7CisKKyAg
ICAvLyBJZiB0aGUgZXhjZXB0aW9uIGFscmVhZHkgcHJvdmlkZXMgYSBzcGVjaWFsIHN0YWNrIHRy
YWNlLCB3ZSBkbyBub3QgbW9kaWZ5CisgICAgLy8gaXQuCisgICAgaWYgKHR5cGVvZiBleGNlcHRp
b24uc3RhY2sgIT09ICdzdHJpbmcnKSB7CisgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgIH0K
KyAgICBleGNlcHRpb24uc3RhY2sgPSBzdGFjayArICdcblxuJyArIGV4Y2VwdGlvbi5zdGFjazsK
KyAgICByZXR1cm4gZXhjZXB0aW9uOworICB9CisKKyAgYXNzZXJ0UHJvbWlzZVJlc3VsdCA9IGZ1
bmN0aW9uKHByb21pc2UsIHN1Y2Nlc3MsIGZhaWwpIHsKKyAgICBpZiAoc3VjY2VzcyAhPT0gdW5k
ZWZpbmVkKSBhc3NlcnRFcXVhbHMoJ2Z1bmN0aW9uJywgdHlwZW9mIHN1Y2Nlc3MpOworICAgIGlm
IChmYWlsICE9PSB1bmRlZmluZWQpIGFzc2VydEVxdWFscygnZnVuY3Rpb24nLCB0eXBlb2YgZmFp
bCk7CisgICAgYXNzZXJ0SW5zdGFuY2VvZihwcm9taXNlLCBQcm9taXNlKTsKKyAgICBjb25zdCBz
dGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7CisKKyAgICB2YXIgdGVzdF9wcm9taXNlID0gcHJv
bWlzZS50aGVuKAorICAgICAgICByZXN1bHQgPT4geworICAgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICBpZiAoLS1wcm9taXNlVGVzdENvdW50ID09IDApIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgIT09IHVuZGVmaW5lZCkgc3VjY2VzcyhyZXN1bHQp
OworICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0
IHRvIHRocm93IHRoZSBlcnJvciBhZ2FpbiB0byBnZXQgb3V0IG9mIHRoZSBwcm9taXNlCisgICAg
ICAgICAgICAvLyBjaGFpbi4KKyAgICAgICAgICAgIHNldFRpbWVvdXQoXyA9PiB7CisgICAgICAg
ICAgICAgIHRocm93IGNvbmNhdGVuYXRlRXJyb3JzKHN0YWNrLCBlKTsKKyAgICAgICAgICAgIH0s
IDApOworICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgcmVzdWx0ID0+IHsKKyAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgaWYgKC0tcHJvbWlzZVRlc3RDb3VudCA9PSAwKSB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIGlmIChmYWlsID09PSB1bmRlZmluZWQp
IHRocm93IHJlc3VsdDsKKyAgICAgICAgICAgIGZhaWwocmVzdWx0KTsKKyAgICAgICAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgICAgICAvLyBVc2Ugc2V0VGltZW91dCB0byB0aHJvdyB0aGUgZXJy
b3IgYWdhaW4gdG8gZ2V0IG91dCBvZiB0aGUgcHJvbWlzZQorICAgICAgICAgICAgLy8gY2hhaW4u
CisgICAgICAgICAgICBzZXRUaW1lb3V0KF8gPT4geworICAgICAgICAgICAgICB0aHJvdyBjb25j
YXRlbmF0ZUVycm9ycyhzdGFjaywgZSk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICB9
CisgICAgICAgIH0pOworCisgICAgaWYgKCFwcm9taXNlVGVzdENoYWluKSBwcm9taXNlVGVzdENo
YWluID0gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgLy8gd2FpdFVudGlsRG9uZSBpcyBpZGVtcG90
ZW50LgorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICsrcHJvbWlzZVRlc3RD
b3VudDsKKyAgICByZXR1cm4gcHJvbWlzZVRlc3RDaGFpbi50aGVuKHRlc3RfcHJvbWlzZSk7Cisg
IH07CisKKyAgdmFyIE9wdGltaXphdGlvblN0YXR1c0ltcGwgPSB1bmRlZmluZWQ7CisKKyAgdmFy
IE9wdGltaXphdGlvblN0YXR1cyA9IGZ1bmN0aW9uKGZ1bikgeworICAgIGlmIChPcHRpbWl6YXRp
b25TdGF0dXNJbXBsID09PSB1bmRlZmluZWQpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIE9wdGlt
aXphdGlvblN0YXR1c0ltcGwgPSBuZXcgRnVuY3Rpb24oCisgICAgICAgICAgICAiZnVuIiwgInJl
dHVybiAlR2V0T3B0aW1pemF0aW9uU3RhdHVzKGZ1bik7Iik7CisgICAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigibmF0aXZlcyBzeW50YXggbm90IGFsbG93ZWQiKTsK
KyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE9wdGltaXphdGlvblN0YXR1c0ltcGwoZnVuKTsK
KyAgfQorCisgIGFzc2VydFVub3B0aW1pemVkID0gZnVuY3Rpb24gYXNzZXJ0VW5vcHRpbWl6ZWQo
CisgICAgICBmdW4sIG5hbWVfb3B0LCBza2lwX2lmX21heWJlX2Rlb3B0ZWQgPSB0cnVlKSB7Cisg
ICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXMoZnVuKTsKKyAgICAvLyBUZXN0
cyB0aGF0IHVzZSBhc3NlcnRVbm9wdGltaXplZCgpIGRvIG5vdCBtYWtlIHNlbnNlIGlmIC0tYWx3
YXlzLW9wdAorICAgIC8vIG9wdGlvbiBpcyBwcm92aWRlZC4gU3VjaCB0ZXN0cyBtdXN0IGFkZCAt
LW5vLWFsd2F5cy1vcHQgdG8gZmxhZ3MgY29tbWVudC4KKyAgICBhc3NlcnRGYWxzZSgob3B0X3N0
YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtBbHdheXNPcHRpbWl6ZSkgIT09IDAsCisgICAg
ICAgICAgICAgICAgInRlc3QgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIC0tYWx3YXlzLW9wdCIp
OworICAgIGFzc2VydFRydWUoKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rSXNG
dW5jdGlvbikgIT09IDAsIG5hbWVfb3B0KTsKKyAgICBpZiAoc2tpcF9pZl9tYXliZV9kZW9wdGVk
ICYmCisgICAgICAgIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua01heWJlRGVv
cHRlZCkgIT09IDApIHsKKyAgICAgIC8vIFdoZW4gLS1kZW9wdC1ldmVyeS1uLXRpbWVzIGZsYWcg
aXMgc3BlY2lmaWVkIGl0J3Mgbm8gbG9uZ2VyIGd1YXJhbnRlZWQKKyAgICAgIC8vIHRoYXQgcGFy
dGljdWxhciBmdW5jdGlvbiBpcyBzdGlsbCBkZW9wdGltaXplZCwgc28ga2VlcCBydW5uaW5nIHRo
ZSB0ZXN0CisgICAgICAvLyB0byBzdHJlc3MgdGVzdCB0aGUgZGVvcHRpbWl6ZXIuCisgICAgICBy
ZXR1cm47CisgICAgfQorICAgIHZhciBpc19vcHRpbWl6ZWQgPSAob3B0X3N0YXR1cyAmIFY4T3B0
aW1pemF0aW9uU3RhdHVzLmtPcHRpbWl6ZWQpICE9PSAwOworICAgIGFzc2VydEZhbHNlKGlzX29w
dGltaXplZCwgbmFtZV9vcHQpOworICB9CisKKyAgYXNzZXJ0T3B0aW1pemVkID0gZnVuY3Rpb24g
YXNzZXJ0T3B0aW1pemVkKAorICAgICAgZnVuLCBuYW1lX29wdCwgc2tpcF9pZl9tYXliZV9kZW9w
dGVkID0gdHJ1ZSkgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKGZ1
bik7CisgICAgLy8gVGVzdHMgdGhhdCB1c2UgYXNzZXJ0T3B0aW1pemVkKCkgZG8gbm90IG1ha2Ug
c2Vuc2UgZm9yIExpdGUgbW9kZSB3aGVyZQorICAgIC8vIG9wdGltaXphdGlvbiBpcyBhbHdheXMg
ZGlzYWJsZWQsIGV4cGxpY2l0bHkgZXhpdCB0aGUgdGVzdCB3aXRoIGEgd2FybmluZy4KKyAgICBp
ZiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtMaXRlTW9kZSkgeworICAgICAg
cHJpbnQoIldhcm5pbmc6IFRlc3QgdXNlcyBhc3NlcnRPcHRpbWl6ZWQgaW4gTGl0ZSBtb2RlLCBz
a2lwcGluZyB0ZXN0LiIpOworICAgICAgdGVzdFJ1bm5lci5xdWl0KDApOworICAgIH0KKyAgICAv
LyBUZXN0cyB0aGF0IHVzZSBhc3NlcnRPcHRpbWl6ZWQoKSBkbyBub3QgbWFrZSBzZW5zZSBpZiAt
LW5vLW9wdAorICAgIC8vIG9wdGlvbiBpcyBwcm92aWRlZC4gU3VjaCB0ZXN0cyBtdXN0IGFkZCAt
LW9wdCB0byBmbGFncyBjb21tZW50LgorICAgIGFzc2VydEZhbHNlKChvcHRfc3RhdHVzICYgVjhP
cHRpbWl6YXRpb25TdGF0dXMua05ldmVyT3B0aW1pemUpICE9PSAwLAorICAgICAgICAgICAgICAg
ICJ0ZXN0IGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCAtLW5vLW9wdCIpOworICAgIGFzc2VydFRy
dWUoCisgICAgICAgIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rp
b24pICE9PSAwLAorICAgICAgICAnc2hvdWxkIGJlIGEgZnVuY3Rpb246ICcgKyBuYW1lX29wdCk7
CisgICAgaWYgKHNraXBfaWZfbWF5YmVfZGVvcHRlZCAmJgorICAgICAgICAob3B0X3N0YXR1cyAm
IFY4T3B0aW1pemF0aW9uU3RhdHVzLmtNYXliZURlb3B0ZWQpICE9PSAwKSB7CisgICAgICAvLyBX
aGVuIC0tZGVvcHQtZXZlcnktbi10aW1lcyBmbGFnIGlzIHNwZWNpZmllZCBpdCdzIG5vIGxvbmdl
ciBndWFyYW50ZWVkCisgICAgICAvLyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgc3RpbGwg
b3B0aW1pemVkLCBzbyBrZWVwIHJ1bm5pbmcgdGhlIHRlc3QKKyAgICAgIC8vIHRvIHN0cmVzcyB0
ZXN0IHRoZSBkZW9wdGltaXplci4KKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXNzZXJ0VHJ1
ZSgKKyAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rT3B0aW1pemVk
KSAhPT0gMCwKKyAgICAgICAgJ3Nob3VsZCBiZSBvcHRpbWl6ZWQ6ICcgKyBuYW1lX29wdCk7Cisg
IH0KKworICBpc05ldmVyT3B0aW1pemVMaXRlTW9kZSA9IGZ1bmN0aW9uIGlzTmV2ZXJPcHRpbWl6
ZUxpdGVNb2RlKCkgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKHVu
ZGVmaW5lZCwgIiIpOworICAgIHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3Rh
dHVzLmtMaXRlTW9kZSkgIT09IDA7CisgIH0KKworICBpc05ldmVyT3B0aW1pemUgPSBmdW5jdGlv
biBpc05ldmVyT3B0aW1pemUoKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25T
dGF0dXModW5kZWZpbmVkLCAiIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6
YXRpb25TdGF0dXMua05ldmVyT3B0aW1pemUpICE9PSAwOworICB9CisKKyAgaXNBbHdheXNPcHRp
bWl6ZSA9IGZ1bmN0aW9uIGlzQWx3YXlzT3B0aW1pemUoKSB7CisgICAgdmFyIG9wdF9zdGF0dXMg
PSBPcHRpbWl6YXRpb25TdGF0dXModW5kZWZpbmVkLCAiIik7CisgICAgcmV0dXJuIChvcHRfc3Rh
dHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0Fsd2F5c09wdGltaXplKSAhPT0gMDsKKyAgfQor
CisgIGlzSW50ZXJwcmV0ZWQgPSBmdW5jdGlvbiBpc0ludGVycHJldGVkKGZ1bikgeworICAgIHZh
ciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKGZ1biwgIiIpOworICAgIGFzc2VydFRy
dWUoKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAs
CisgICAgICAgICAgICAgICAibm90IGEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0
dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rT3B0aW1pemVkKSA9PT0gMCAmJgorICAgICAgICAg
ICAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtJbnRlcnByZXRlZCkgIT09IDA7
CisgIH0KKworICBpc0Jhc2VsaW5lID0gZnVuY3Rpb24gaXNCYXNlbGluZShmdW4pIHsKKyAgICB2
YXIgb3B0X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1cyhmdW4sICIiKTsKKyAgICBhc3NlcnRU
cnVlKChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAw
LAorICAgICAgICAgICAgICAgIm5vdCBhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJuIChvcHRfc3Rh
dHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua09wdGltaXplZCkgPT09IDAgJiYKKyAgICAgICAg
ICAgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rQmFzZWxpbmUpICE9PSAwOwor
ICB9CisKKyAgaXNVbm9wdGltaXplZCA9IGZ1bmN0aW9uIGlzVW5vcHRpbWl6ZWQoZnVuKSB7Cisg
ICAgcmV0dXJuIGlzSW50ZXJwcmV0ZWQoZnVuKSB8fCBpc0Jhc2VsaW5lKGZ1bik7CisgIH0KKwor
ICBpc09wdGltaXplZCA9IGZ1bmN0aW9uIGlzT3B0aW1pemVkKGZ1bikgeworICAgIHZhciBvcHRf
c3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKGZ1biwgIiIpOworICAgIGFzc2VydFRydWUoKG9w
dF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAg
ICAgICAgICAgICAibm90IGEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBW
OE9wdGltaXphdGlvblN0YXR1cy5rT3B0aW1pemVkKSAhPT0gMDsKKyAgfQorCisgIGlzVHVyYm9G
YW5uZWQgPSBmdW5jdGlvbiBpc1R1cmJvRmFubmVkKGZ1bikgeworICAgIHZhciBvcHRfc3RhdHVz
ID0gT3B0aW1pemF0aW9uU3RhdHVzKGZ1biwgIiIpOworICAgIGFzc2VydFRydWUoKG9wdF9zdGF0
dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAgICAgICAg
ICAgICAibm90IGEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGlt
aXphdGlvblN0YXR1cy5rT3B0aW1pemVkKSAhPT0gMCAmJgorICAgICAgICAgICAob3B0X3N0YXR1
cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtUdXJib0Zhbm5lZCkgIT09IDA7CisgIH0KKworICAv
LyBDdXN0b20gVjgtc3BlY2lmaWMgc3RhY2sgdHJhY2UgZm9ybWF0dGVyIHRoYXQgaXMgdGVtcG9y
YXJpbHkgaW5zdGFsbGVkIG9uCisgIC8vIHRoZSBFcnJvciBvYmplY3QuCisgIE1qc1VuaXRBc3Nl
cnRpb25FcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IGZ1bmN0aW9uKGVycm9yLCBzdGFjaykgewor
ICAgIC8vIFRyaWdnZXIgZGVmYXVsdCBmb3JtYXR0aW5nIHdpdGggcmVjdXJzaW9uLgorICAgIHRy
eSB7CisgICAgICAvLyBGaWx0ZXItb3V0IGFsbCBidXQgdGhlIGZpcnN0IG1qc3VuaXQgZnJhbWUu
CisgICAgICBsZXQgZmlsdGVyZWRTdGFjayA9IFtdOworICAgICAgbGV0IGluTWpzdW5pdCA9IHRy
dWU7CisgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIGxldCBmcmFtZSA9IHN0YWNrW2ldOworICAgICAgICBpZiAoaW5NanN1bml0KSB7CisgICAg
ICAgICAgbGV0IGZpbGUgPSBmcmFtZS5nZXRGaWxlTmFtZSgpOworICAgICAgICAgIGlmICghZmls
ZSB8fCAhZmlsZS5lbmRzV2l0aCgibWpzdW5pdC5qcyIpKSB7CisgICAgICAgICAgICBpbk1qc3Vu
aXQgPSBmYWxzZTsKKyAgICAgICAgICAgIC8vIFB1c2ggdGhlIGxhc3QgbWpzdW5pdCBmcmFtZSwg
dHlwaWNhbGx5IGNvbnRhaW5pbmcgdGhlIGFzc2VydGlvbgorICAgICAgICAgICAgLy8gZnVuY3Rp
b24uCisgICAgICAgICAgICBpZiAoaSA+IDApIEFycmF5UHJvdG90eXBlUHVzaC5jYWxsKGZpbHRl
cmVkU3RhY2ssIHN0YWNrW2ktMV0pOworICAgICAgICAgICAgQXJyYXlQcm90b3R5cGVQdXNoLmNh
bGwoZmlsdGVyZWRTdGFjaywgc3RhY2tbaV0pOworICAgICAgICAgIH0KKyAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICBBcnJheVByb3RvdHlwZVB1c2guY2FsbChmaWx0ZXJl
ZFN0YWNrLCBmcmFtZSk7CisgICAgICB9CisgICAgICBzdGFjayA9IGZpbHRlcmVkU3RhY2s7CisK
KyAgICAgIC8vIEluZmVyIGZ1bmN0aW9uIG5hbWVzIGFuZCBjYWxjdWxhdGUge21heF9uYW1lX2xl
bmd0aH0KKyAgICAgIGxldCBtYXhfbmFtZV9sZW5ndGggPSAwOworICAgICAgQXJyYXlQcm90b3R5
cGVGb3JFYWNoLmNhbGwoc3RhY2ssIGVhY2ggPT4geworICAgICAgICBsZXQgbmFtZSA9IGVhY2gu
Z2V0RnVuY3Rpb25OYW1lKCk7CisgICAgICAgIGlmIChuYW1lID09IG51bGwpIG5hbWUgPSAiIjsK
KyAgICAgICAgaWYgKGVhY2guaXNFdmFsKCkpIHsKKyAgICAgICAgICBuYW1lID0gbmFtZTsKKyAg
ICAgICAgfSBlbHNlIGlmIChlYWNoLmlzQ29uc3RydWN0b3IoKSkgeworICAgICAgICAgIG5hbWUg
PSAibmV3ICIgKyBuYW1lOworICAgICAgICB9IGVsc2UgaWYgKGVhY2guaXNOYXRpdmUoKSkgewor
ICAgICAgICAgIG5hbWUgPSAibmF0aXZlICIgKyBuYW1lOworICAgICAgICB9IGVsc2UgaWYgKCFl
YWNoLmlzVG9wbGV2ZWwoKSkgeworICAgICAgICAgIG5hbWUgPSBlYWNoLmdldFR5cGVOYW1lKCkg
KyAiLiIgKyBuYW1lOworICAgICAgICB9CisgICAgICAgIGVhY2gubmFtZSA9IG5hbWU7CisgICAg
ICAgIG1heF9uYW1lX2xlbmd0aCA9IE1hdGgubWF4KG5hbWUubGVuZ3RoLCBtYXhfbmFtZV9sZW5n
dGgpCisgICAgICB9KTsKKworICAgICAgLy8gRm9ybWF0IHN0YWNrIGZyYW1lcy4KKyAgICAgIHN0
YWNrID0gQXJyYXlQcm90b3R5cGVNYXAuY2FsbChzdGFjaywgZWFjaCA9PiB7CisgICAgICAgIGxl
dCBmcmFtZSA9ICIgICAgYXQgIiArIGVhY2gubmFtZS5wYWRFbmQobWF4X25hbWVfbGVuZ3RoKTsK
KyAgICAgICAgbGV0IGZpbGVOYW1lID0gZWFjaC5nZXRGaWxlTmFtZSgpOworICAgICAgICBpZiAo
ZWFjaC5pc0V2YWwoKSkgcmV0dXJuIGZyYW1lICsgIiAiICsgZWFjaC5nZXRFdmFsT3JpZ2luKCk7
CisgICAgICAgIGZyYW1lICs9ICIgIiArIChmaWxlTmFtZSA/IGZpbGVOYW1lIDogIiIpOworICAg
ICAgICBsZXQgbGluZT0gZWFjaC5nZXRMaW5lTnVtYmVyKCk7CisgICAgICAgIGZyYW1lICs9ICIg
IiArIChsaW5lID8gbGluZSA6ICIiKTsKKyAgICAgICAgbGV0IGNvbHVtbiA9IGVhY2guZ2V0Q29s
dW1uTnVtYmVyKCk7CisgICAgICAgIGZyYW1lICs9IChjb2x1bW4gPyAiOiIgKyBjb2x1bW4gOiAi
Iik7CisgICAgICAgIHJldHVybiBmcmFtZTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuICIiICsg
ZXJyb3IubWVzc2FnZSArICJcbiIgKyBBcnJheVByb3RvdHlwZUpvaW4uY2FsbChzdGFjaywgIlxu
Iik7CisgICAgfSBjYXRjaCAoZSkge307CisgICAgcmV0dXJuIGVycm9yLnN0YWNrOworICB9Cit9
KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L3dhc20tbW9kdWxlLWJ1aWxkZXIuanMg
Yi9KU1Rlc3RzL3dhc20vdjgvd2FzbS1tb2R1bGUtYnVpbGRlci5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Njdl
ZDg0ZDBlNTlmMjg1MmFjYTRhNTIyM2ZkNTllOWZlZGY3YjEwCi0tLSAvZGV2L251bGwKKysrIGIv
SlNUZXN0cy93YXNtL3Y4L3dhc20tbW9kdWxlLWJ1aWxkZXIuanMKQEAgLTAsMCArMSwyMTY5IEBA
CisvLyBDb3B5cmlnaHQgMjAxNiB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KworLy8gVXNlZCBmb3IgZW5jb2RpbmcgZjMyIGFuZCBkb3VibGUgY29uc3RhbnRzIHRvIGJpdHMu
CitsZXQgYnl0ZV92aWV3ID0gbmV3IFVpbnQ4QXJyYXkoOCk7CitsZXQgZGF0YV92aWV3ID0gbmV3
IERhdGFWaWV3KGJ5dGVfdmlldy5idWZmZXIpOworCisvLyBUaGUgYnl0ZXMgZnVuY3Rpb24gcmVj
ZWl2ZXMgb25lIG9mCisvLyAgLSBzZXZlcmFsIGFyZ3VtZW50cywgZWFjaCBvZiB3aGljaCBpcyBl
aXRoZXIgYSBudW1iZXIgb3IgYSBzdHJpbmcgb2YgbGVuZ3RoCisvLyAgICAxOyBpZiBpdCdzIGEg
c3RyaW5nLCB0aGUgY2hhcmNvZGUgb2YgdGhlIGNvbnRhaW5lZCBjaGFyYWN0ZXIgaXMgdXNlZC4K
Ky8vICAtIGEgc2luZ2xlIGFycmF5IGFyZ3VtZW50IGNvbnRhaW5pbmcgdGhlIGFjdHVhbCBhcmd1
bWVudHMKKy8vICAtIGEgc2luZ2xlIHN0cmluZzsgdGhlIHJldHVybmVkIGJ1ZmZlciB3aWxsIGNv
bnRhaW4gdGhlIGNoYXIgY29kZXMgb2YgYWxsCisvLyAgICBjb250YWluZWQgY2hhcmFjdGVycy4K
K2Z1bmN0aW9uIGJ5dGVzKC4uLmlucHV0KSB7CisgIGlmIChpbnB1dC5sZW5ndGggPT0gMSAmJiB0
eXBlb2YgaW5wdXRbMF0gPT0gJ2FycmF5JykgaW5wdXQgPSBpbnB1dFswXTsKKyAgaWYgKGlucHV0
Lmxlbmd0aCA9PSAxICYmIHR5cGVvZiBpbnB1dFswXSA9PSAnc3RyaW5nJykgeworICAgIGxldCBs
ZW4gPSBpbnB1dFswXS5sZW5ndGg7CisgICAgbGV0IHZpZXcgPSBuZXcgVWludDhBcnJheShsZW4p
OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHZpZXdbaV0gPSBpbnB1dFswXS5j
aGFyQ29kZUF0KGkpOworICAgIHJldHVybiB2aWV3LmJ1ZmZlcjsKKyAgfQorICBsZXQgdmlldyA9
IG5ldyBVaW50OEFycmF5KGlucHV0Lmxlbmd0aCk7CisgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5w
dXQubGVuZ3RoOyBpKyspIHsKKyAgICBsZXQgdmFsID0gaW5wdXRbaV07CisgICAgaWYgKHR5cGVv
ZiB2YWwgPT0gJ3N0cmluZycpIHsKKyAgICAgIGlmICh2YWwubGVuZ3RoICE9IDEpIHsKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgaW5wdXRzIG11c3QgaGF2ZSBsZW5ndGggMScpOwor
ICAgICAgfQorICAgICAgdmFsID0gdmFsLmNoYXJDb2RlQXQoMCk7CisgICAgfQorICAgIHZpZXdb
aV0gPSB2YWwgfCAwOworICB9CisgIHJldHVybiB2aWV3LmJ1ZmZlcjsKK30KKworLy8gSGVhZGVy
IGRlY2xhcmF0aW9uIGNvbnN0YW50cwordmFyIGtXYXNtSDAgPSAwOwordmFyIGtXYXNtSDEgPSAw
eDYxOwordmFyIGtXYXNtSDIgPSAweDczOwordmFyIGtXYXNtSDMgPSAweDZkOworCit2YXIga1dh
c21WMCA9IDB4MTsKK3ZhciBrV2FzbVYxID0gMDsKK3ZhciBrV2FzbVYyID0gMDsKK3ZhciBrV2Fz
bVYzID0gMDsKKwordmFyIGtIZWFkZXJTaXplID0gODsKK3ZhciBrUGFnZVNpemUgPSA2NTUzNjsK
K3ZhciBrU3BlY01heFBhZ2VzID0gNjU1MzY7Cit2YXIga01heFZhckludDMyU2l6ZSA9IDU7Cit2
YXIga01heFZhckludDY0U2l6ZSA9IDEwOworCitsZXQga0RlY2xOb0xvY2FscyA9IDA7CisKKy8v
IFNlY3Rpb24gZGVjbGFyYXRpb24gY29uc3RhbnRzCitsZXQga1Vua25vd25TZWN0aW9uQ29kZSA9
IDA7CitsZXQga1R5cGVTZWN0aW9uQ29kZSA9IDE7ICAgICAgICAvLyBGdW5jdGlvbiBzaWduYXR1
cmUgZGVjbGFyYXRpb25zCitsZXQga0ltcG9ydFNlY3Rpb25Db2RlID0gMjsgICAgICAvLyBJbXBv
cnQgZGVjbGFyYXRpb25zCitsZXQga0Z1bmN0aW9uU2VjdGlvbkNvZGUgPSAzOyAgICAvLyBGdW5j
dGlvbiBkZWNsYXJhdGlvbnMKK2xldCBrVGFibGVTZWN0aW9uQ29kZSA9IDQ7ICAgICAgIC8vIElu
ZGlyZWN0IGZ1bmN0aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMKK2xldCBrTWVtb3J5U2VjdGlv
bkNvZGUgPSA1OyAgICAgIC8vIE1lbW9yeSBhdHRyaWJ1dGVzCitsZXQga0dsb2JhbFNlY3Rpb25D
b2RlID0gNjsgICAgICAvLyBHbG9iYWwgZGVjbGFyYXRpb25zCitsZXQga0V4cG9ydFNlY3Rpb25D
b2RlID0gNzsgICAgICAvLyBFeHBvcnRzCitsZXQga1N0YXJ0U2VjdGlvbkNvZGUgPSA4OyAgICAg
ICAvLyBTdGFydCBmdW5jdGlvbiBkZWNsYXJhdGlvbgorbGV0IGtFbGVtZW50U2VjdGlvbkNvZGUg
PSA5OyAgICAgLy8gRWxlbWVudHMgc2VjdGlvbgorbGV0IGtDb2RlU2VjdGlvbkNvZGUgPSAxMDsg
ICAgICAgLy8gRnVuY3Rpb24gY29kZQorbGV0IGtEYXRhU2VjdGlvbkNvZGUgPSAxMTsgICAgICAg
Ly8gRGF0YSBzZWdtZW50cworbGV0IGtEYXRhQ291bnRTZWN0aW9uQ29kZSA9IDEyOyAgLy8gRGF0
YSBzZWdtZW50IGNvdW50IChiZXR3ZWVuIEVsZW1lbnQgJiBDb2RlKQorbGV0IGtUYWdTZWN0aW9u
Q29kZSA9IDEzOyAgICAgICAgLy8gVGFnIHNlY3Rpb24gKGJldHdlZW4gTWVtb3J5ICYgR2xvYmFs
KQorCisvLyBOYW1lIHNlY3Rpb24gdHlwZXMKK2xldCBrTW9kdWxlTmFtZUNvZGUgPSAwOworbGV0
IGtGdW5jdGlvbk5hbWVzQ29kZSA9IDE7CitsZXQga0xvY2FsTmFtZXNDb2RlID0gMjsKKworbGV0
IGtXYXNtRnVuY3Rpb25UeXBlRm9ybSA9IDB4NjA7CitsZXQga1dhc21TdHJ1Y3RUeXBlRm9ybSA9
IDB4NWY7CitsZXQga1dhc21BcnJheVR5cGVGb3JtID0gMHg1ZTsKK2xldCBrV2FzbUZ1bmN0aW9u
U3VidHlwZUZvcm0gPSAweDVkOworbGV0IGtXYXNtU3RydWN0U3VidHlwZUZvcm0gPSAweDVjOwor
bGV0IGtXYXNtQXJyYXlTdWJ0eXBlRm9ybSA9IDB4NWI7CisKK2xldCBrTGltaXRzTm9NYXhpbXVt
ID0gMHgwMDsKK2xldCBrTGltaXRzV2l0aE1heGltdW0gPSAweDAxOworbGV0IGtMaW1pdHNTaGFy
ZWROb01heGltdW0gPSAweDAyOworbGV0IGtMaW1pdHNTaGFyZWRXaXRoTWF4aW11bSA9IDB4MDM7
CitsZXQga0xpbWl0c01lbW9yeTY0Tm9NYXhpbXVtID0gMHgwNDsKK2xldCBrTGltaXRzTWVtb3J5
NjRXaXRoTWF4aW11bSA9IDB4MDU7CisKKy8vIFNlZ21lbnQgZmxhZ3MKK2xldCBrQWN0aXZlTm9J
bmRleCA9IDA7CitsZXQga1Bhc3NpdmUgPSAxOworbGV0IGtBY3RpdmVXaXRoSW5kZXggPSAyOwor
bGV0IGtEZWNsYXJhdGl2ZSA9IDM7CitsZXQga1Bhc3NpdmVXaXRoRWxlbWVudHMgPSA1OworbGV0
IGtEZWNsYXJhdGl2ZVdpdGhFbGVtZW50cyA9IDc7CisKKy8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9u
IGZsYWdzCitsZXQga0RlY2xGdW5jdGlvbk5hbWUgPSAweDAxOworbGV0IGtEZWNsRnVuY3Rpb25J
bXBvcnQgPSAweDAyOworbGV0IGtEZWNsRnVuY3Rpb25Mb2NhbHMgPSAweDA0OworbGV0IGtEZWNs
RnVuY3Rpb25FeHBvcnQgPSAweDA4OworCisvLyBWYWx1ZSB0eXBlcyBhbmQgcmVsYXRlZAorbGV0
IGtXYXNtVm9pZCA9IDB4NDA7CitsZXQga1dhc21JMzIgPSAweDdmOworbGV0IGtXYXNtSTY0ID0g
MHg3ZTsKK2xldCBrV2FzbUYzMiA9IDB4N2Q7CitsZXQga1dhc21GNjQgPSAweDdjOworbGV0IGtX
YXNtUzEyOCA9IDB4N2I7CitsZXQga1dhc21JOCA9IDB4N2E7CitsZXQga1dhc21JMTYgPSAweDc5
OworCisvLyBUaGVzZSBhcmUgZGVmaW5lZCBhcyBuZWdhdGl2ZSBpbnRlZ2VycyB0byBkaXN0aW5n
dWlzaCB0aGVtIGZyb20gcG9zaXRpdmUgdHlwZQorLy8gaW5kaWNlcy4KK2xldCBrV2FzbUZ1bmNS
ZWYgPSAtMHgxMDsKK2xldCBrV2FzbUFueUZ1bmMgPSBrV2FzbUZ1bmNSZWY7ICAvLyBBbGlhcyBu
YW1lZCBhcyBpbiB0aGUgSlMgQVBJIHNwZWMKK2xldCBrV2FzbUV4dGVyblJlZiA9IC0weDExOwor
bGV0IGtXYXNtQW55UmVmID0gLTB4MTI7CitsZXQga1dhc21FcVJlZiA9IC0weDEzOworbGV0IGtX
YXNtSTMxUmVmID0gLTB4MTY7CitsZXQga1dhc21EYXRhUmVmID0gLTB4MTk7CisKKy8vIFVzZSB0
aGUgcG9zaXRpdmUtYnl0ZSB2ZXJzaW9ucyBpbnNpZGUgZnVuY3Rpb24gYm9kaWVzLgorbGV0IGtM
ZWIxMjhNYXNrID0gMHg3ZjsKK2xldCBrRnVuY1JlZkNvZGUgPSBrV2FzbUZ1bmNSZWYgJiBrTGVi
MTI4TWFzazsKK2xldCBrQW55RnVuY0NvZGUgPSBrRnVuY1JlZkNvZGU7ICAvLyBBbGlhcyBuYW1l
ZCBhcyBpbiB0aGUgSlMgQVBJIHNwZWMKK2xldCBrRXh0ZXJuUmVmQ29kZSA9IGtXYXNtRXh0ZXJu
UmVmICYga0xlYjEyOE1hc2s7CitsZXQga0FueVJlZkNvZGUgPSBrV2FzbUFueVJlZiAmIGtMZWIx
MjhNYXNrOworbGV0IGtFcVJlZkNvZGUgPSBrV2FzbUVxUmVmICYga0xlYjEyOE1hc2s7CitsZXQg
a0kzMVJlZkNvZGUgPSBrV2FzbUkzMVJlZiAgJiBrTGViMTI4TWFzazsKK2xldCBrRGF0YVJlZkNv
ZGUgPSBrV2FzbURhdGFSZWYgICYga0xlYjEyOE1hc2s7CisKK2xldCBrV2FzbU9wdFJlZiA9IDB4
NmM7CitsZXQga1dhc21SZWYgPSAweDZiOworZnVuY3Rpb24gd2FzbU9wdFJlZlR5cGUoaGVhcF90
eXBlKSB7CisgIHJldHVybiB7b3Bjb2RlOiBrV2FzbU9wdFJlZiwgaGVhcF90eXBlOiBoZWFwX3R5
cGV9OworfQorZnVuY3Rpb24gd2FzbVJlZlR5cGUoaGVhcF90eXBlKSB7CisgIHJldHVybiB7b3Bj
b2RlOiBrV2FzbVJlZiwgaGVhcF90eXBlOiBoZWFwX3R5cGV9OworfQorCitsZXQga1dhc21SdHRX
aXRoRGVwdGggPSAweDY5OworZnVuY3Rpb24gd2FzbVJ0dChpbmRleCwgZGVwdGgpIHsKKyAgaWYg
KGluZGV4IDwgMCkgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3Rpbmcgbm9uLW5lZ2F0aXZlIHR5cGUg
aW5kZXgiKTsKKyAgcmV0dXJuIHtvcGNvZGU6IGtXYXNtUnR0V2l0aERlcHRoLCBpbmRleDogaW5k
ZXgsIGRlcHRoOiBkZXB0aH07Cit9CitsZXQga1dhc21SdHQgPSAweDY4OworZnVuY3Rpb24gd2Fz
bVJ0dE5vRGVwdGgoaW5kZXgpIHsKKyAgaWYgKGluZGV4IDwgMCkgdGhyb3cgbmV3IEVycm9yKCJF
eHBlY3Rpbmcgbm9uLW5lZ2F0aXZlIHR5cGUgaW5kZXgiKTsKKyAgcmV0dXJuIHtvcGNvZGU6IGtX
YXNtUnR0LCBpbmRleDogaW5kZXh9OworfQorCitsZXQga0V4dGVybmFsRnVuY3Rpb24gPSAwOwor
bGV0IGtFeHRlcm5hbFRhYmxlID0gMTsKK2xldCBrRXh0ZXJuYWxNZW1vcnkgPSAyOworbGV0IGtF
eHRlcm5hbEdsb2JhbCA9IDM7CitsZXQga0V4dGVybmFsVGFnID0gNDsKKworbGV0IGtUYWJsZVpl
cm8gPSAwOworbGV0IGtNZW1vcnlaZXJvID0gMDsKK2xldCBrU2VnbWVudFplcm8gPSAwOworCits
ZXQga0V4Y2VwdGlvbkF0dHJpYnV0ZSA9IDA7CisKKy8vIFVzZWZ1bCBzaWduYXR1cmVzCitsZXQg
a1NpZ19pX2kgPSBtYWtlU2lnKFtrV2FzbUkzMl0sIFtrV2FzbUkzMl0pOworbGV0IGtTaWdfbF9s
ID0gbWFrZVNpZyhba1dhc21JNjRdLCBba1dhc21JNjRdKTsKK2xldCBrU2lnX2lfbCA9IG1ha2VT
aWcoW2tXYXNtSTY0XSwgW2tXYXNtSTMyXSk7CitsZXQga1NpZ19pX2lpID0gbWFrZVNpZyhba1dh
c21JMzIsIGtXYXNtSTMyXSwgW2tXYXNtSTMyXSk7CitsZXQga1NpZ19pX2lpaSA9IG1ha2VTaWco
W2tXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJdLCBba1dhc21JMzJdKTsKK2xldCBrU2lnX3Zf
aWlpaSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSwg
W10pOworbGV0IGtTaWdfZl9mZiA9IG1ha2VTaWcoW2tXYXNtRjMyLCBrV2FzbUYzMl0sIFtrV2Fz
bUYzMl0pOworbGV0IGtTaWdfZF9kZCA9IG1ha2VTaWcoW2tXYXNtRjY0LCBrV2FzbUY2NF0sIFtr
V2FzbUY2NF0pOworbGV0IGtTaWdfbF9sbCA9IG1ha2VTaWcoW2tXYXNtSTY0LCBrV2FzbUk2NF0s
IFtrV2FzbUk2NF0pOworbGV0IGtTaWdfaV9kZCA9IG1ha2VTaWcoW2tXYXNtRjY0LCBrV2FzbUY2
NF0sIFtrV2FzbUkzMl0pOworbGV0IGtTaWdfdl92ID0gbWFrZVNpZyhbXSwgW10pOworbGV0IGtT
aWdfaV92ID0gbWFrZVNpZyhbXSwgW2tXYXNtSTMyXSk7CitsZXQga1NpZ19sX3YgPSBtYWtlU2ln
KFtdLCBba1dhc21JNjRdKTsKK2xldCBrU2lnX2ZfdiA9IG1ha2VTaWcoW10sIFtrV2FzbUYzMl0p
OworbGV0IGtTaWdfZF92ID0gbWFrZVNpZyhbXSwgW2tXYXNtRjY0XSk7CitsZXQga1NpZ192X2kg
PSBtYWtlU2lnKFtrV2FzbUkzMl0sIFtdKTsKK2xldCBrU2lnX3ZfaWkgPSBtYWtlU2lnKFtrV2Fz
bUkzMiwga1dhc21JMzJdLCBbXSk7CitsZXQga1NpZ192X2lpaSA9IG1ha2VTaWcoW2tXYXNtSTMy
LCBrV2FzbUkzMiwga1dhc21JMzJdLCBbXSk7CitsZXQga1NpZ192X2wgPSBtYWtlU2lnKFtrV2Fz
bUk2NF0sIFtdKTsKK2xldCBrU2lnX3ZfZCA9IG1ha2VTaWcoW2tXYXNtRjY0XSwgW10pOworbGV0
IGtTaWdfdl9kZCA9IG1ha2VTaWcoW2tXYXNtRjY0LCBrV2FzbUY2NF0sIFtdKTsKK2xldCBrU2ln
X3ZfZGRpID0gbWFrZVNpZyhba1dhc21GNjQsIGtXYXNtRjY0LCBrV2FzbUkzMl0sIFtdKTsKK2xl
dCBrU2lnX2lpX3YgPSBtYWtlU2lnKFtdLCBba1dhc21JMzIsIGtXYXNtSTMyXSk7CitsZXQga1Np
Z19paWlfdiA9IG1ha2VTaWcoW10sIFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSk7Cits
ZXQga1NpZ19paV9pID0gbWFrZVNpZyhba1dhc21JMzJdLCBba1dhc21JMzIsIGtXYXNtSTMyXSk7
CitsZXQga1NpZ19paWlfaSA9IG1ha2VTaWcoW2tXYXNtSTMyXSwgW2tXYXNtSTMyLCBrV2FzbUkz
Miwga1dhc21JMzJdKTsKK2xldCBrU2lnX2lpX2lpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNt
STMyXSwgW2tXYXNtSTMyLCBrV2FzbUkzMl0pOworbGV0IGtTaWdfaWlpX2lpID0gbWFrZVNpZyhb
a1dhc21JMzIsIGtXYXNtSTMyXSwgW2tXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJdKTsKKwor
bGV0IGtTaWdfdl9mID0gbWFrZVNpZyhba1dhc21GMzJdLCBbXSk7CitsZXQga1NpZ19mX2YgPSBt
YWtlU2lnKFtrV2FzbUYzMl0sIFtrV2FzbUYzMl0pOworbGV0IGtTaWdfZl9kID0gbWFrZVNpZyhb
a1dhc21GNjRdLCBba1dhc21GMzJdKTsKK2xldCBrU2lnX2RfZCA9IG1ha2VTaWcoW2tXYXNtRjY0
XSwgW2tXYXNtRjY0XSk7CitsZXQga1NpZ19yX3IgPSBtYWtlU2lnKFtrV2FzbUV4dGVyblJlZl0s
IFtrV2FzbUV4dGVyblJlZl0pOworbGV0IGtTaWdfYV9hID0gbWFrZVNpZyhba1dhc21BbnlGdW5j
XSwgW2tXYXNtQW55RnVuY10pOworbGV0IGtTaWdfaV9yID0gbWFrZVNpZyhba1dhc21FeHRlcm5S
ZWZdLCBba1dhc21JMzJdKTsKK2xldCBrU2lnX3ZfciA9IG1ha2VTaWcoW2tXYXNtRXh0ZXJuUmVm
XSwgW10pOworbGV0IGtTaWdfdl9hID0gbWFrZVNpZyhba1dhc21BbnlGdW5jXSwgW10pOworbGV0
IGtTaWdfdl9yciA9IG1ha2VTaWcoW2tXYXNtRXh0ZXJuUmVmLCBrV2FzbUV4dGVyblJlZl0sIFtd
KTsKK2xldCBrU2lnX3ZfYWEgPSBtYWtlU2lnKFtrV2FzbUFueUZ1bmMsIGtXYXNtQW55RnVuY10s
IFtdKTsKK2xldCBrU2lnX3JfdiA9IG1ha2VTaWcoW10sIFtrV2FzbUV4dGVyblJlZl0pOworbGV0
IGtTaWdfYV92ID0gbWFrZVNpZyhbXSwgW2tXYXNtQW55RnVuY10pOworbGV0IGtTaWdfYV9pID0g
bWFrZVNpZyhba1dhc21JMzJdLCBba1dhc21BbnlGdW5jXSk7CitsZXQga1NpZ19zX2kgPSBtYWtl
U2lnKFtrV2FzbUkzMl0sIFtrV2FzbVMxMjhdKTsKK2xldCBrU2lnX2lfcyA9IG1ha2VTaWcoW2tX
YXNtUzEyOF0sIFtrV2FzbUkzMl0pOworCitmdW5jdGlvbiBtYWtlU2lnKHBhcmFtcywgcmVzdWx0
cykgeworICByZXR1cm4ge3BhcmFtczogcGFyYW1zLCByZXN1bHRzOiByZXN1bHRzfTsKK30KKwor
ZnVuY3Rpb24gbWFrZVNpZ192X3goeCkgeworICByZXR1cm4gbWFrZVNpZyhbeF0sIFtdKTsKK30K
KworZnVuY3Rpb24gbWFrZVNpZ194X3YoeCkgeworICByZXR1cm4gbWFrZVNpZyhbXSwgW3hdKTsK
K30KKworZnVuY3Rpb24gbWFrZVNpZ192X3h4KHgpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW3gsIHhd
LCBbXSk7Cit9CisKK2Z1bmN0aW9uIG1ha2VTaWdfcl92KHIpIHsKKyAgcmV0dXJuIG1ha2VTaWco
W10sIFtyXSk7Cit9CisKK2Z1bmN0aW9uIG1ha2VTaWdfcl94KHIsIHgpIHsKKyAgcmV0dXJuIG1h
a2VTaWcoW3hdLCBbcl0pOworfQorCitmdW5jdGlvbiBtYWtlU2lnX3JfeHgociwgeCkgeworICBy
ZXR1cm4gbWFrZVNpZyhbeCwgeF0sIFtyXSk7Cit9CisKKy8vIE9wY29kZXMKK2NvbnN0IGtXYXNt
T3Bjb2RlcyA9IHsKKyAgJ1VucmVhY2hhYmxlJzogMHgwMCwKKyAgJ05vcCc6IDB4MDEsCisgICdC
bG9jayc6IDB4MDIsCisgICdMb29wJzogMHgwMywKKyAgJ0lmJzogMHgwNCwKKyAgJ0Vsc2UnOiAw
eDA1LAorICAnVHJ5JzogMHgwNiwKKyAgJ0NhdGNoJzogMHgwNywKKyAgJ1Rocm93JzogMHgwOCwK
KyAgJ1JldGhyb3cnOiAweDA5LAorICAnQ2F0Y2hBbGwnOiAweDE5LAorICAnRW5kJzogMHgwYiwK
KyAgJ0JyJzogMHgwYywKKyAgJ0JySWYnOiAweDBkLAorICAnQnJUYWJsZSc6IDB4MGUsCisgICdS
ZXR1cm4nOiAweDBmLAorICAnQ2FsbEZ1bmN0aW9uJzogMHgxMCwKKyAgJ0NhbGxJbmRpcmVjdCc6
IDB4MTEsCisgICdSZXR1cm5DYWxsJzogMHgxMiwKKyAgJ1JldHVybkNhbGxJbmRpcmVjdCc6IDB4
MTMsCisgICdDYWxsUmVmJzogMHgxNCwKKyAgJ1JldHVybkNhbGxSZWYnOiAweDE1LAorICAnTGV0
JzogMHgxNywKKyAgJ0RlbGVnYXRlJzogMHgxOCwKKyAgJ0Ryb3AnOiAweDFhLAorICAnU2VsZWN0
JzogMHgxYiwKKyAgJ1NlbGVjdFdpdGhUeXBlJzogMHgxYywKKyAgJ0xvY2FsR2V0JzogMHgyMCwK
KyAgJ0xvY2FsU2V0JzogMHgyMSwKKyAgJ0xvY2FsVGVlJzogMHgyMiwKKyAgJ0dsb2JhbEdldCc6
IDB4MjMsCisgICdHbG9iYWxTZXQnOiAweDI0LAorICAnVGFibGVHZXQnOiAweDI1LAorICAnVGFi
bGVTZXQnOiAweDI2LAorICAnSTMyTG9hZE1lbSc6IDB4MjgsCisgICdJNjRMb2FkTWVtJzogMHgy
OSwKKyAgJ0YzMkxvYWRNZW0nOiAweDJhLAorICAnRjY0TG9hZE1lbSc6IDB4MmIsCisgICdJMzJM
b2FkTWVtOFMnOiAweDJjLAorICAnSTMyTG9hZE1lbThVJzogMHgyZCwKKyAgJ0kzMkxvYWRNZW0x
NlMnOiAweDJlLAorICAnSTMyTG9hZE1lbTE2VSc6IDB4MmYsCisgICdJNjRMb2FkTWVtOFMnOiAw
eDMwLAorICAnSTY0TG9hZE1lbThVJzogMHgzMSwKKyAgJ0k2NExvYWRNZW0xNlMnOiAweDMyLAor
ICAnSTY0TG9hZE1lbTE2VSc6IDB4MzMsCisgICdJNjRMb2FkTWVtMzJTJzogMHgzNCwKKyAgJ0k2
NExvYWRNZW0zMlUnOiAweDM1LAorICAnSTMyU3RvcmVNZW0nOiAweDM2LAorICAnSTY0U3RvcmVN
ZW0nOiAweDM3LAorICAnRjMyU3RvcmVNZW0nOiAweDM4LAorICAnRjY0U3RvcmVNZW0nOiAweDM5
LAorICAnSTMyU3RvcmVNZW04JzogMHgzYSwKKyAgJ0kzMlN0b3JlTWVtMTYnOiAweDNiLAorICAn
STY0U3RvcmVNZW04JzogMHgzYywKKyAgJ0k2NFN0b3JlTWVtMTYnOiAweDNkLAorICAnSTY0U3Rv
cmVNZW0zMic6IDB4M2UsCisgICdNZW1vcnlTaXplJzogMHgzZiwKKyAgJ01lbW9yeUdyb3cnOiAw
eDQwLAorICAnSTMyQ29uc3QnOiAweDQxLAorICAnSTY0Q29uc3QnOiAweDQyLAorICAnRjMyQ29u
c3QnOiAweDQzLAorICAnRjY0Q29uc3QnOiAweDQ0LAorICAnSTMyRXF6JzogMHg0NSwKKyAgJ0kz
MkVxJzogMHg0NiwKKyAgJ0kzMk5lJzogMHg0NywKKyAgJ0kzMkx0Uyc6IDB4NDgsCisgICdJMzJM
dFUnOiAweDQ5LAorICAnSTMyR3RTJzogMHg0YSwKKyAgJ0kzMkd0VSc6IDB4NGIsCisgICdJMzJM
ZVMnOiAweDRjLAorICAnSTMyTGVVJzogMHg0ZCwKKyAgJ0kzMkdlUyc6IDB4NGUsCisgICdJMzJH
ZVUnOiAweDRmLAorICAnSTY0RXF6JzogMHg1MCwKKyAgJ0k2NEVxJzogMHg1MSwKKyAgJ0k2NE5l
JzogMHg1MiwKKyAgJ0k2NEx0Uyc6IDB4NTMsCisgICdJNjRMdFUnOiAweDU0LAorICAnSTY0R3RT
JzogMHg1NSwKKyAgJ0k2NEd0VSc6IDB4NTYsCisgICdJNjRMZVMnOiAweDU3LAorICAnSTY0TGVV
JzogMHg1OCwKKyAgJ0k2NEdlUyc6IDB4NTksCisgICdJNjRHZVUnOiAweDVhLAorICAnRjMyRXEn
OiAweDViLAorICAnRjMyTmUnOiAweDVjLAorICAnRjMyTHQnOiAweDVkLAorICAnRjMyR3QnOiAw
eDVlLAorICAnRjMyTGUnOiAweDVmLAorICAnRjMyR2UnOiAweDYwLAorICAnRjY0RXEnOiAweDYx
LAorICAnRjY0TmUnOiAweDYyLAorICAnRjY0THQnOiAweDYzLAorICAnRjY0R3QnOiAweDY0LAor
ICAnRjY0TGUnOiAweDY1LAorICAnRjY0R2UnOiAweDY2LAorICAnSTMyQ2x6JzogMHg2NywKKyAg
J0kzMkN0eic6IDB4NjgsCisgICdJMzJQb3BjbnQnOiAweDY5LAorICAnSTMyQWRkJzogMHg2YSwK
KyAgJ0kzMlN1Yic6IDB4NmIsCisgICdJMzJNdWwnOiAweDZjLAorICAnSTMyRGl2Uyc6IDB4NmQs
CisgICdJMzJEaXZVJzogMHg2ZSwKKyAgJ0kzMlJlbVMnOiAweDZmLAorICAnSTMyUmVtVSc6IDB4
NzAsCisgICdJMzJBbmQnOiAweDcxLAorICAnSTMySW9yJzogMHg3MiwKKyAgJ0kzMlhvcic6IDB4
NzMsCisgICdJMzJTaGwnOiAweDc0LAorICAnSTMyU2hyUyc6IDB4NzUsCisgICdJMzJTaHJVJzog
MHg3NiwKKyAgJ0kzMlJvbCc6IDB4NzcsCisgICdJMzJSb3InOiAweDc4LAorICAnSTY0Q2x6Jzog
MHg3OSwKKyAgJ0k2NEN0eic6IDB4N2EsCisgICdJNjRQb3BjbnQnOiAweDdiLAorICAnSTY0QWRk
JzogMHg3YywKKyAgJ0k2NFN1Yic6IDB4N2QsCisgICdJNjRNdWwnOiAweDdlLAorICAnSTY0RGl2
Uyc6IDB4N2YsCisgICdJNjREaXZVJzogMHg4MCwKKyAgJ0k2NFJlbVMnOiAweDgxLAorICAnSTY0
UmVtVSc6IDB4ODIsCisgICdJNjRBbmQnOiAweDgzLAorICAnSTY0SW9yJzogMHg4NCwKKyAgJ0k2
NFhvcic6IDB4ODUsCisgICdJNjRTaGwnOiAweDg2LAorICAnSTY0U2hyUyc6IDB4ODcsCisgICdJ
NjRTaHJVJzogMHg4OCwKKyAgJ0k2NFJvbCc6IDB4ODksCisgICdJNjRSb3InOiAweDhhLAorICAn
RjMyQWJzJzogMHg4YiwKKyAgJ0YzMk5lZyc6IDB4OGMsCisgICdGMzJDZWlsJzogMHg4ZCwKKyAg
J0YzMkZsb29yJzogMHg4ZSwKKyAgJ0YzMlRydW5jJzogMHg4ZiwKKyAgJ0YzMk5lYXJlc3RJbnQn
OiAweDkwLAorICAnRjMyU3FydCc6IDB4OTEsCisgICdGMzJBZGQnOiAweDkyLAorICAnRjMyU3Vi
JzogMHg5MywKKyAgJ0YzMk11bCc6IDB4OTQsCisgICdGMzJEaXYnOiAweDk1LAorICAnRjMyTWlu
JzogMHg5NiwKKyAgJ0YzMk1heCc6IDB4OTcsCisgICdGMzJDb3B5U2lnbic6IDB4OTgsCisgICdG
NjRBYnMnOiAweDk5LAorICAnRjY0TmVnJzogMHg5YSwKKyAgJ0Y2NENlaWwnOiAweDliLAorICAn
RjY0Rmxvb3InOiAweDljLAorICAnRjY0VHJ1bmMnOiAweDlkLAorICAnRjY0TmVhcmVzdEludCc6
IDB4OWUsCisgICdGNjRTcXJ0JzogMHg5ZiwKKyAgJ0Y2NEFkZCc6IDB4YTAsCisgICdGNjRTdWIn
OiAweGExLAorICAnRjY0TXVsJzogMHhhMiwKKyAgJ0Y2NERpdic6IDB4YTMsCisgICdGNjRNaW4n
OiAweGE0LAorICAnRjY0TWF4JzogMHhhNSwKKyAgJ0Y2NENvcHlTaWduJzogMHhhNiwKKyAgJ0kz
MkNvbnZlcnRJNjQnOiAweGE3LAorICAnSTMyU0NvbnZlcnRGMzInOiAweGE4LAorICAnSTMyVUNv
bnZlcnRGMzInOiAweGE5LAorICAnSTMyU0NvbnZlcnRGNjQnOiAweGFhLAorICAnSTMyVUNvbnZl
cnRGNjQnOiAweGFiLAorICAnSTY0U0NvbnZlcnRJMzInOiAweGFjLAorICAnSTY0VUNvbnZlcnRJ
MzInOiAweGFkLAorICAnSTY0U0NvbnZlcnRGMzInOiAweGFlLAorICAnSTY0VUNvbnZlcnRGMzIn
OiAweGFmLAorICAnSTY0U0NvbnZlcnRGNjQnOiAweGIwLAorICAnSTY0VUNvbnZlcnRGNjQnOiAw
eGIxLAorICAnRjMyU0NvbnZlcnRJMzInOiAweGIyLAorICAnRjMyVUNvbnZlcnRJMzInOiAweGIz
LAorICAnRjMyU0NvbnZlcnRJNjQnOiAweGI0LAorICAnRjMyVUNvbnZlcnRJNjQnOiAweGI1LAor
ICAnRjMyQ29udmVydEY2NCc6IDB4YjYsCisgICdGNjRTQ29udmVydEkzMic6IDB4YjcsCisgICdG
NjRVQ29udmVydEkzMic6IDB4YjgsCisgICdGNjRTQ29udmVydEk2NCc6IDB4YjksCisgICdGNjRV
Q29udmVydEk2NCc6IDB4YmEsCisgICdGNjRDb252ZXJ0RjMyJzogMHhiYiwKKyAgJ0kzMlJlaW50
ZXJwcmV0RjMyJzogMHhiYywKKyAgJ0k2NFJlaW50ZXJwcmV0RjY0JzogMHhiZCwKKyAgJ0YzMlJl
aW50ZXJwcmV0STMyJzogMHhiZSwKKyAgJ0Y2NFJlaW50ZXJwcmV0STY0JzogMHhiZiwKKyAgJ0kz
MlNFeHRlbmRJOCc6IDB4YzAsCisgICdJMzJTRXh0ZW5kSTE2JzogMHhjMSwKKyAgJ0k2NFNFeHRl
bmRJOCc6IDB4YzIsCisgICdJNjRTRXh0ZW5kSTE2JzogMHhjMywKKyAgJ0k2NFNFeHRlbmRJMzIn
OiAweGM0LAorICAnUmVmTnVsbCc6IDB4ZDAsCisgICdSZWZJc051bGwnOiAweGQxLAorICAnUmVm
RnVuYyc6IDB4ZDIsCisgICdSZWZBc05vbk51bGwnOiAweGQzLAorICAnQnJPbk51bGwnOiAweGQ0
LAorICAnUmVmRXEnOiAweGQ1LAorICAnQnJPbk5vbk51bGwnOiAweGQ2Cit9OworCitmdW5jdGlv
biBkZWZpbmVXYXNtT3Bjb2RlKG5hbWUsIHZhbHVlKSB7CisgIGlmIChnbG9iYWxUaGlzLmtXYXNt
T3Bjb2RlTmFtZXMgPT09IHVuZGVmaW5lZCkgeworICAgIGdsb2JhbFRoaXMua1dhc21PcGNvZGVO
YW1lcyA9IHt9OworICB9CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBuYW1l
LCB7dmFsdWU6IHZhbHVlfSk7CisgIGlmIChnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXNbdmFs
dWVdICE9PSB1bmRlZmluZWQpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSB3YXNt
IG9wY29kZTogJHt2YWx1ZX0uIFByZXZpb3VzIG5hbWU6ICR7CisgICAgICAgIGdsb2JhbFRoaXMu
a1dhc21PcGNvZGVOYW1lc1t2YWx1ZV19LCBuZXcgbmFtZTogJHtuYW1lfWApOworICB9CisgIGds
b2JhbFRoaXMua1dhc21PcGNvZGVOYW1lc1t2YWx1ZV0gPSBuYW1lOworfQorZm9yIChsZXQgbmFt
ZSBpbiBrV2FzbU9wY29kZXMpIHsKKyAgZGVmaW5lV2FzbU9wY29kZShga0V4cHIke25hbWV9YCwg
a1dhc21PcGNvZGVzW25hbWVdKTsKK30KKworLy8gUHJlZml4IG9wY29kZXMKK2NvbnN0IGtQcmVm
aXhPcGNvZGVzID0geworICAnR0MnOiAweGZiLAorICAnTnVtZXJpYyc6IDB4ZmMsCisgICdTaW1k
JzogMHhmZCwKKyAgJ0F0b21pYyc6IDB4ZmUKK307Citmb3IgKGxldCBwcmVmaXggaW4ga1ByZWZp
eE9wY29kZXMpIHsKKyAgZGVmaW5lV2FzbU9wY29kZShgayR7cHJlZml4fVByZWZpeGAsIGtQcmVm
aXhPcGNvZGVzW3ByZWZpeF0pOworfQorCisvLyBHQyBvcGNvZGVzCitsZXQga0V4cHJTdHJ1Y3RO
ZXdXaXRoUnR0ID0gMHgwMTsKK2xldCBrRXhwclN0cnVjdE5ld0RlZmF1bHRXaXRoUnR0ID0gMHgw
MjsKK2xldCBrRXhwclN0cnVjdEdldCA9IDB4MDM7CitsZXQga0V4cHJTdHJ1Y3RHZXRTID0gMHgw
NDsKK2xldCBrRXhwclN0cnVjdEdldFUgPSAweDA1OworbGV0IGtFeHByU3RydWN0U2V0ID0gMHgw
NjsKK2xldCBrRXhwclN0cnVjdE5ldyA9IDB4MDc7CitsZXQga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0
ID0gMHgwODsKK2xldCBrRXhwckFycmF5TmV3V2l0aFJ0dCA9IDB4MTE7CitsZXQga0V4cHJBcnJh
eU5ld0RlZmF1bHRXaXRoUnR0ID0gMHgxMjsKK2xldCBrRXhwckFycmF5R2V0ID0gMHgxMzsKK2xl
dCBrRXhwckFycmF5R2V0UyA9IDB4MTQ7CitsZXQga0V4cHJBcnJheUdldFUgPSAweDE1OworbGV0
IGtFeHByQXJyYXlTZXQgPSAweDE2OworbGV0IGtFeHByQXJyYXlMZW4gPSAweDE3OworbGV0IGtF
eHByQXJyYXlDb3B5ID0gMHgxODsKK2xldCBrRXhwckFycmF5SW5pdCA9IDB4MTk7CitsZXQga0V4
cHJBcnJheUluaXRTdGF0aWMgPSAweDFhOworbGV0IGtFeHByQXJyYXlOZXcgPSAweDFiOworbGV0
IGtFeHByQXJyYXlOZXdEZWZhdWx0ID0gMHgxYzsKK2xldCBrRXhwckkzMU5ldyA9IDB4MjA7Cits
ZXQga0V4cHJJMzFHZXRTID0gMHgyMTsKK2xldCBrRXhwckkzMUdldFUgPSAweDIyOworbGV0IGtF
eHByUnR0Q2Fub24gPSAweDMwOworbGV0IGtFeHByUnR0U3ViID0gMHgzMTsKK2xldCBrRXhwclJ0
dEZyZXNoU3ViID0gMHgzMjsKK2xldCBrRXhwclJlZlRlc3QgPSAweDQwOworbGV0IGtFeHByUmVm
Q2FzdCA9IDB4NDE7CitsZXQga0V4cHJCck9uQ2FzdCA9IDB4NDI7CitsZXQga0V4cHJCck9uQ2Fz
dEZhaWwgPSAweDQzOworbGV0IGtFeHByUmVmVGVzdFN0YXRpYyA9IDB4NDQ7CitsZXQga0V4cHJS
ZWZDYXN0U3RhdGljID0gMHg0NTsKK2xldCBrRXhwckJyT25DYXN0U3RhdGljID0gMHg0NjsKK2xl
dCBrRXhwckJyT25DYXN0U3RhdGljRmFpbCA9IDB4NDc7CitsZXQga0V4cHJSZWZJc0Z1bmMgPSAw
eDUwOworbGV0IGtFeHByUmVmSXNEYXRhID0gMHg1MTsKK2xldCBrRXhwclJlZklzSTMxID0gMHg1
MjsKK2xldCBrRXhwclJlZkFzRnVuYyA9IDB4NTg7CitsZXQga0V4cHJSZWZBc0RhdGEgPSAweDU5
OworbGV0IGtFeHByUmVmQXNJMzEgPSAweDVhOworbGV0IGtFeHByQnJPbkZ1bmMgPSAweDYwOwor
bGV0IGtFeHByQnJPbkRhdGEgPSAweDYxOworbGV0IGtFeHByQnJPbkkzMSA9IDB4NjI7CisKKy8v
IE51bWVyaWMgb3Bjb2Rlcy4KK2xldCBrRXhwckkzMlNDb252ZXJ0U2F0RjMyID0gMHgwMDsKK2xl
dCBrRXhwckkzMlVDb252ZXJ0U2F0RjMyID0gMHgwMTsKK2xldCBrRXhwckkzMlNDb252ZXJ0U2F0
RjY0ID0gMHgwMjsKK2xldCBrRXhwckkzMlVDb252ZXJ0U2F0RjY0ID0gMHgwMzsKK2xldCBrRXhw
ckk2NFNDb252ZXJ0U2F0RjMyID0gMHgwNDsKK2xldCBrRXhwckk2NFVDb252ZXJ0U2F0RjMyID0g
MHgwNTsKK2xldCBrRXhwckk2NFNDb252ZXJ0U2F0RjY0ID0gMHgwNjsKK2xldCBrRXhwckk2NFVD
b252ZXJ0U2F0RjY0ID0gMHgwNzsKK2xldCBrRXhwck1lbW9yeUluaXQgPSAweDA4OworbGV0IGtF
eHByRGF0YURyb3AgPSAweDA5OworbGV0IGtFeHByTWVtb3J5Q29weSA9IDB4MGE7CitsZXQga0V4
cHJNZW1vcnlGaWxsID0gMHgwYjsKK2xldCBrRXhwclRhYmxlSW5pdCA9IDB4MGM7CitsZXQga0V4
cHJFbGVtRHJvcCA9IDB4MGQ7CitsZXQga0V4cHJUYWJsZUNvcHkgPSAweDBlOworbGV0IGtFeHBy
VGFibGVHcm93ID0gMHgwZjsKK2xldCBrRXhwclRhYmxlU2l6ZSA9IDB4MTA7CitsZXQga0V4cHJU
YWJsZUZpbGwgPSAweDExOworCisvLyBBdG9taWMgb3Bjb2Rlcy4KK2xldCBrRXhwckF0b21pY05v
dGlmeSA9IDB4MDA7CitsZXQga0V4cHJJMzJBdG9taWNXYWl0ID0gMHgwMTsKK2xldCBrRXhwckk2
NEF0b21pY1dhaXQgPSAweDAyOworbGV0IGtFeHBySTMyQXRvbWljTG9hZCA9IDB4MTA7CitsZXQg
a0V4cHJJMzJBdG9taWNMb2FkOFUgPSAweDEyOworbGV0IGtFeHBySTMyQXRvbWljTG9hZDE2VSA9
IDB4MTM7CitsZXQga0V4cHJJMzJBdG9taWNTdG9yZSA9IDB4MTc7CitsZXQga0V4cHJJMzJBdG9t
aWNTdG9yZThVID0gMHgxOTsKK2xldCBrRXhwckkzMkF0b21pY1N0b3JlMTZVID0gMHgxYTsKK2xl
dCBrRXhwckkzMkF0b21pY0FkZCA9IDB4MWU7CitsZXQga0V4cHJJMzJBdG9taWNBZGQ4VSA9IDB4
MjA7CitsZXQga0V4cHJJMzJBdG9taWNBZGQxNlUgPSAweDIxOworbGV0IGtFeHBySTMyQXRvbWlj
U3ViID0gMHgyNTsKK2xldCBrRXhwckkzMkF0b21pY1N1YjhVID0gMHgyNzsKK2xldCBrRXhwckkz
MkF0b21pY1N1YjE2VSA9IDB4Mjg7CitsZXQga0V4cHJJMzJBdG9taWNBbmQgPSAweDJjOworbGV0
IGtFeHBySTMyQXRvbWljQW5kOFUgPSAweDJlOworbGV0IGtFeHBySTMyQXRvbWljQW5kMTZVID0g
MHgyZjsKK2xldCBrRXhwckkzMkF0b21pY09yID0gMHgzMzsKK2xldCBrRXhwckkzMkF0b21pY09y
OFUgPSAweDM1OworbGV0IGtFeHBySTMyQXRvbWljT3IxNlUgPSAweDM2OworbGV0IGtFeHBySTMy
QXRvbWljWG9yID0gMHgzYTsKK2xldCBrRXhwckkzMkF0b21pY1hvcjhVID0gMHgzYzsKK2xldCBr
RXhwckkzMkF0b21pY1hvcjE2VSA9IDB4M2Q7CitsZXQga0V4cHJJMzJBdG9taWNFeGNoYW5nZSA9
IDB4NDE7CitsZXQga0V4cHJJMzJBdG9taWNFeGNoYW5nZThVID0gMHg0MzsKK2xldCBrRXhwckkz
MkF0b21pY0V4Y2hhbmdlMTZVID0gMHg0NDsKK2xldCBrRXhwckkzMkF0b21pY0NvbXBhcmVFeGNo
YW5nZSA9IDB4NDg7CitsZXQga0V4cHJJMzJBdG9taWNDb21wYXJlRXhjaGFuZ2U4VSA9IDB4NGE7
CitsZXQga0V4cHJJMzJBdG9taWNDb21wYXJlRXhjaGFuZ2UxNlUgPSAweDRiOworCitsZXQga0V4
cHJJNjRBdG9taWNMb2FkID0gMHgxMTsKK2xldCBrRXhwckk2NEF0b21pY0xvYWQ4VSA9IDB4MTQ7
CitsZXQga0V4cHJJNjRBdG9taWNMb2FkMTZVID0gMHgxNTsKK2xldCBrRXhwckk2NEF0b21pY0xv
YWQzMlUgPSAweDE2OworbGV0IGtFeHBySTY0QXRvbWljU3RvcmUgPSAweDE4OworbGV0IGtFeHBy
STY0QXRvbWljU3RvcmU4VSA9IDB4MWI7CitsZXQga0V4cHJJNjRBdG9taWNTdG9yZTE2VSA9IDB4
MWM7CitsZXQga0V4cHJJNjRBdG9taWNTdG9yZTMyVSA9IDB4MWQ7CitsZXQga0V4cHJJNjRBdG9t
aWNBZGQgPSAweDFmOworbGV0IGtFeHBySTY0QXRvbWljQWRkOFUgPSAweDIyOworbGV0IGtFeHBy
STY0QXRvbWljQWRkMTZVID0gMHgyMzsKK2xldCBrRXhwckk2NEF0b21pY0FkZDMyVSA9IDB4MjQ7
CitsZXQga0V4cHJJNjRBdG9taWNTdWIgPSAweDI2OworbGV0IGtFeHBySTY0QXRvbWljU3ViOFUg
PSAweDI5OworbGV0IGtFeHBySTY0QXRvbWljU3ViMTZVID0gMHgyYTsKK2xldCBrRXhwckk2NEF0
b21pY1N1YjMyVSA9IDB4MmI7CitsZXQga0V4cHJJNjRBdG9taWNBbmQgPSAweDJkOworbGV0IGtF
eHBySTY0QXRvbWljQW5kOFUgPSAweDMwOworbGV0IGtFeHBySTY0QXRvbWljQW5kMTZVID0gMHgz
MTsKK2xldCBrRXhwckk2NEF0b21pY0FuZDMyVSA9IDB4MzI7CitsZXQga0V4cHJJNjRBdG9taWNP
ciA9IDB4MzQ7CitsZXQga0V4cHJJNjRBdG9taWNPcjhVID0gMHgzNzsKK2xldCBrRXhwckk2NEF0
b21pY09yMTZVID0gMHgzODsKK2xldCBrRXhwckk2NEF0b21pY09yMzJVID0gMHgzOTsKK2xldCBr
RXhwckk2NEF0b21pY1hvciA9IDB4M2I7CitsZXQga0V4cHJJNjRBdG9taWNYb3I4VSA9IDB4M2U7
CitsZXQga0V4cHJJNjRBdG9taWNYb3IxNlUgPSAweDNmOworbGV0IGtFeHBySTY0QXRvbWljWG9y
MzJVID0gMHg0MDsKK2xldCBrRXhwckk2NEF0b21pY0V4Y2hhbmdlID0gMHg0MjsKK2xldCBrRXhw
ckk2NEF0b21pY0V4Y2hhbmdlOFUgPSAweDQ1OworbGV0IGtFeHBySTY0QXRvbWljRXhjaGFuZ2Ux
NlUgPSAweDQ2OworbGV0IGtFeHBySTY0QXRvbWljRXhjaGFuZ2UzMlUgPSAweDQ3OworbGV0IGtF
eHBySTY0QXRvbWljQ29tcGFyZUV4Y2hhbmdlID0gMHg0OQorbGV0IGtFeHBySTY0QXRvbWljQ29t
cGFyZUV4Y2hhbmdlOFUgPSAweDRjOworbGV0IGtFeHBySTY0QXRvbWljQ29tcGFyZUV4Y2hhbmdl
MTZVID0gMHg0ZDsKK2xldCBrRXhwckk2NEF0b21pY0NvbXBhcmVFeGNoYW5nZTMyVSA9IDB4NGU7
CisKKy8vIFNpbWQgb3Bjb2Rlcy4KK2xldCBrRXhwclMxMjhMb2FkTWVtID0gMHgwMDsKK2xldCBr
RXhwclMxMjhMb2FkOHg4UyA9IDB4MDE7CitsZXQga0V4cHJTMTI4TG9hZDh4OFUgPSAweDAyOwor
bGV0IGtFeHByUzEyOExvYWQxNng0UyA9IDB4MDM7CitsZXQga0V4cHJTMTI4TG9hZDE2eDRVID0g
MHgwNDsKK2xldCBrRXhwclMxMjhMb2FkMzJ4MlMgPSAweDA1OworbGV0IGtFeHByUzEyOExvYWQz
MngyVSA9IDB4MDY7CitsZXQga0V4cHJTMTI4TG9hZDhTcGxhdCA9IDB4MDc7CitsZXQga0V4cHJT
MTI4TG9hZDE2U3BsYXQgPSAweDA4OworbGV0IGtFeHByUzEyOExvYWQzMlNwbGF0ID0gMHgwOTsK
K2xldCBrRXhwclMxMjhMb2FkNjRTcGxhdCA9IDB4MGE7CitsZXQga0V4cHJTMTI4U3RvcmVNZW0g
PSAweDBiOworbGV0IGtFeHByUzEyOENvbnN0ID0gMHgwYzsKK2xldCBrRXhwckk4eDE2U2h1ZmZs
ZSA9IDB4MGQ7CitsZXQga0V4cHJJOHgxNlN3aXp6bGUgPSAweDBlOworCitsZXQga0V4cHJJOHgx
NlNwbGF0ID0gMHgwZjsKK2xldCBrRXhwckkxNng4U3BsYXQgPSAweDEwOworbGV0IGtFeHBySTMy
eDRTcGxhdCA9IDB4MTE7CitsZXQga0V4cHJJNjR4MlNwbGF0ID0gMHgxMjsKK2xldCBrRXhwckYz
Mng0U3BsYXQgPSAweDEzOworbGV0IGtFeHByRjY0eDJTcGxhdCA9IDB4MTQ7CitsZXQga0V4cHJJ
OHgxNkV4dHJhY3RMYW5lUyA9IDB4MTU7CitsZXQga0V4cHJJOHgxNkV4dHJhY3RMYW5lVSA9IDB4
MTY7CitsZXQga0V4cHJJOHgxNlJlcGxhY2VMYW5lID0gMHgxNzsKK2xldCBrRXhwckkxNng4RXh0
cmFjdExhbmVTID0gMHgxODsKK2xldCBrRXhwckkxNng4RXh0cmFjdExhbmVVID0gMHgxOTsKK2xl
dCBrRXhwckkxNng4UmVwbGFjZUxhbmUgPSAweDFhOworbGV0IGtFeHBySTMyeDRFeHRyYWN0TGFu
ZSA9IDB4MWI7CitsZXQga0V4cHJJMzJ4NFJlcGxhY2VMYW5lID0gMHgxYzsKK2xldCBrRXhwckk2
NHgyRXh0cmFjdExhbmUgPSAweDFkOworbGV0IGtFeHBySTY0eDJSZXBsYWNlTGFuZSA9IDB4MWU7
CitsZXQga0V4cHJGMzJ4NEV4dHJhY3RMYW5lID0gMHgxZjsKK2xldCBrRXhwckYzMng0UmVwbGFj
ZUxhbmUgPSAweDIwOworbGV0IGtFeHByRjY0eDJFeHRyYWN0TGFuZSA9IDB4MjE7CitsZXQga0V4
cHJGNjR4MlJlcGxhY2VMYW5lID0gMHgyMjsKK2xldCBrRXhwckk4eDE2RXEgPSAweDIzOworbGV0
IGtFeHBySTh4MTZOZSA9IDB4MjQ7CitsZXQga0V4cHJJOHgxNkx0UyA9IDB4MjU7CitsZXQga0V4
cHJJOHgxNkx0VSA9IDB4MjY7CitsZXQga0V4cHJJOHgxNkd0UyA9IDB4Mjc7CitsZXQga0V4cHJJ
OHgxNkd0VSA9IDB4Mjg7CitsZXQga0V4cHJJOHgxNkxlUyA9IDB4Mjk7CitsZXQga0V4cHJJOHgx
NkxlVSA9IDB4MmE7CitsZXQga0V4cHJJOHgxNkdlUyA9IDB4MmI7CitsZXQga0V4cHJJOHgxNkdl
VSA9IDB4MmM7CitsZXQga0V4cHJJMTZ4OEVxID0gMHgyZDsKK2xldCBrRXhwckkxNng4TmUgPSAw
eDJlOworbGV0IGtFeHBySTE2eDhMdFMgPSAweDJmOworbGV0IGtFeHBySTE2eDhMdFUgPSAweDMw
OworbGV0IGtFeHBySTE2eDhHdFMgPSAweDMxOworbGV0IGtFeHBySTE2eDhHdFUgPSAweDMyOwor
bGV0IGtFeHBySTE2eDhMZVMgPSAweDMzOworbGV0IGtFeHBySTE2eDhMZVUgPSAweDM0OworbGV0
IGtFeHBySTE2eDhHZVMgPSAweDM1OworbGV0IGtFeHBySTE2eDhHZVUgPSAweDM2OworbGV0IGtF
eHBySTMyeDRFcSA9IDB4Mzc7CitsZXQga0V4cHJJMzJ4NE5lID0gMHgzODsKK2xldCBrRXhwckkz
Mng0THRTID0gMHgzOTsKK2xldCBrRXhwckkzMng0THRVID0gMHgzYTsKK2xldCBrRXhwckkzMng0
R3RTID0gMHgzYjsKK2xldCBrRXhwckkzMng0R3RVID0gMHgzYzsKK2xldCBrRXhwckkzMng0TGVT
ID0gMHgzZDsKK2xldCBrRXhwckkzMng0TGVVID0gMHgzZTsKK2xldCBrRXhwckkzMng0R2VTID0g
MHgzZjsKK2xldCBrRXhwckkzMng0R2VVID0gMHg0MDsKK2xldCBrRXhwckYzMng0RXEgPSAweDQx
OworbGV0IGtFeHByRjMyeDROZSA9IDB4NDI7CitsZXQga0V4cHJGMzJ4NEx0ID0gMHg0MzsKK2xl
dCBrRXhwckYzMng0R3QgPSAweDQ0OworbGV0IGtFeHByRjMyeDRMZSA9IDB4NDU7CitsZXQga0V4
cHJGMzJ4NEdlID0gMHg0NjsKK2xldCBrRXhwckY2NHgyRXEgPSAweDQ3OworbGV0IGtFeHByRjY0
eDJOZSA9IDB4NDg7CitsZXQga0V4cHJGNjR4Mkx0ID0gMHg0OTsKK2xldCBrRXhwckY2NHgyR3Qg
PSAweDRhOworbGV0IGtFeHByRjY0eDJMZSA9IDB4NGI7CitsZXQga0V4cHJGNjR4MkdlID0gMHg0
YzsKK2xldCBrRXhwclMxMjhOb3QgPSAweDRkOworbGV0IGtFeHByUzEyOEFuZCA9IDB4NGU7Cits
ZXQga0V4cHJTMTI4QW5kTm90ID0gMHg0ZjsKK2xldCBrRXhwclMxMjhPciA9IDB4NTA7CitsZXQg
a0V4cHJTMTI4WG9yID0gMHg1MTsKK2xldCBrRXhwclMxMjhTZWxlY3QgPSAweDUyOworbGV0IGtF
eHByVjEyOEFueVRydWUgPSAweDUzOworbGV0IGtFeHByUzEyOExvYWQ4TGFuZSA9IDB4NTQ7Cits
ZXQga0V4cHJTMTI4TG9hZDE2TGFuZSA9IDB4NTU7CitsZXQga0V4cHJTMTI4TG9hZDMyTGFuZSA9
IDB4NTY7CitsZXQga0V4cHJTMTI4TG9hZDY0TGFuZSA9IDB4NTc7CitsZXQga0V4cHJTMTI4U3Rv
cmU4TGFuZSA9IDB4NTg7CitsZXQga0V4cHJTMTI4U3RvcmUxNkxhbmUgPSAweDU5OworbGV0IGtF
eHByUzEyOFN0b3JlMzJMYW5lID0gMHg1YTsKK2xldCBrRXhwclMxMjhTdG9yZTY0TGFuZSA9IDB4
NWI7CitsZXQga0V4cHJTMTI4TG9hZDMyWmVybyA9IDB4NWM7CitsZXQga0V4cHJTMTI4TG9hZDY0
WmVybyA9IDB4NWQ7CitsZXQga0V4cHJGMzJ4NERlbW90ZUY2NHgyWmVybyA9IDB4NWU7CitsZXQg
a0V4cHJGNjR4MlByb21vdGVMb3dGMzJ4NCA9IDB4NWY7CitsZXQga0V4cHJJOHgxNkFicyA9IDB4
NjA7CitsZXQga0V4cHJJOHgxNk5lZyA9IDB4NjE7CitsZXQga0V4cHJJOHgxNlBvcGNudCA9IDB4
NjI7CitsZXQga0V4cHJJOHgxNkFsbFRydWUgPSAweDYzOworbGV0IGtFeHBySTh4MTZCaXRNYXNr
ID0gMHg2NDsKK2xldCBrRXhwckk4eDE2U0NvbnZlcnRJMTZ4OCA9IDB4NjU7CitsZXQga0V4cHJJ
OHgxNlVDb252ZXJ0STE2eDggPSAweDY2OworbGV0IGtFeHByRjMyeDRDZWlsID0gMHg2NzsKK2xl
dCBrRXhwckYzMng0Rmxvb3IgPSAweDY4OworbGV0IGtFeHByRjMyeDRUcnVuYyA9IDB4Njk7Cits
ZXQga0V4cHJGMzJ4NE5lYXJlc3RJbnQgPSAweDZhOworbGV0IGtFeHBySTh4MTZTaGwgPSAweDZi
OworbGV0IGtFeHBySTh4MTZTaHJTID0gMHg2YzsKK2xldCBrRXhwckk4eDE2U2hyVSA9IDB4NmQ7
CitsZXQga0V4cHJJOHgxNkFkZCA9IDB4NmU7CitsZXQga0V4cHJJOHgxNkFkZFNhdFMgPSAweDZm
OworbGV0IGtFeHBySTh4MTZBZGRTYXRVID0gMHg3MDsKK2xldCBrRXhwckk4eDE2U3ViID0gMHg3
MTsKK2xldCBrRXhwckk4eDE2U3ViU2F0UyA9IDB4NzI7CitsZXQga0V4cHJJOHgxNlN1YlNhdFUg
PSAweDczOworbGV0IGtFeHByRjY0eDJDZWlsID0gMHg3NDsKK2xldCBrRXhwckY2NHgyRmxvb3Ig
PSAweDc1OworbGV0IGtFeHBySTh4MTZNaW5TID0gMHg3NjsKK2xldCBrRXhwckk4eDE2TWluVSA9
IDB4Nzc7CitsZXQga0V4cHJJOHgxNk1heFMgPSAweDc4OworbGV0IGtFeHBySTh4MTZNYXhVID0g
MHg3OTsKK2xldCBrRXhwckY2NHgyVHJ1bmMgPSAweDdhOworbGV0IGtFeHBySTh4MTZSb3VuZGlu
Z0F2ZXJhZ2VVID0gMHg3YjsKK2xldCBrRXhwckkxNng4RXh0QWRkUGFpcndpc2VJOHgxNlMgPSAw
eDdjOworbGV0IGtFeHBySTE2eDhFeHRBZGRQYWlyd2lzZUk4eDE2VSA9IDB4N2Q7CitsZXQga0V4
cHJJMzJ4NEV4dEFkZFBhaXJ3aXNlSTE2eDhTID0gMHg3ZTsKK2xldCBrRXhwckkzMng0RXh0QWRk
UGFpcndpc2VJMTZ4OFUgPSAweDdmOworbGV0IGtFeHBySTE2eDhBYnMgPSAweDgwOworbGV0IGtF
eHBySTE2eDhOZWcgPSAweDgxOworbGV0IGtFeHBySTE2eDhRMTVNdWxSU2F0UyA9IDB4ODI7Cits
ZXQga0V4cHJJMTZ4OEFsbFRydWUgPSAweDgzOworbGV0IGtFeHBySTE2eDhCaXRNYXNrID0gMHg4
NDsKK2xldCBrRXhwckkxNng4U0NvbnZlcnRJMzJ4NCA9IDB4ODU7CitsZXQga0V4cHJJMTZ4OFVD
b252ZXJ0STMyeDQgPSAweDg2OworbGV0IGtFeHBySTE2eDhTQ29udmVydEk4eDE2TG93ID0gMHg4
NzsKK2xldCBrRXhwckkxNng4U0NvbnZlcnRJOHgxNkhpZ2ggPSAweDg4OworbGV0IGtFeHBySTE2
eDhVQ29udmVydEk4eDE2TG93ID0gMHg4OTsKK2xldCBrRXhwckkxNng4VUNvbnZlcnRJOHgxNkhp
Z2ggPSAweDhhOworbGV0IGtFeHBySTE2eDhTaGwgPSAweDhiOworbGV0IGtFeHBySTE2eDhTaHJT
ID0gMHg4YzsKK2xldCBrRXhwckkxNng4U2hyVSA9IDB4OGQ7CitsZXQga0V4cHJJMTZ4OEFkZCA9
IDB4OGU7CitsZXQga0V4cHJJMTZ4OEFkZFNhdFMgPSAweDhmOworbGV0IGtFeHBySTE2eDhBZGRT
YXRVID0gMHg5MDsKK2xldCBrRXhwckkxNng4U3ViID0gMHg5MTsKK2xldCBrRXhwckkxNng4U3Vi
U2F0UyA9IDB4OTI7CitsZXQga0V4cHJJMTZ4OFN1YlNhdFUgPSAweDkzOworbGV0IGtFeHByRjY0
eDJOZWFyZXN0SW50ID0gMHg5NDsKK2xldCBrRXhwckkxNng4TXVsID0gMHg5NTsKK2xldCBrRXhw
ckkxNng4TWluUyA9IDB4OTY7CitsZXQga0V4cHJJMTZ4OE1pblUgPSAweDk3OworbGV0IGtFeHBy
STE2eDhNYXhTID0gMHg5ODsKK2xldCBrRXhwckkxNng4TWF4VSA9IDB4OTk7CitsZXQga0V4cHJJ
MTZ4OFJvdW5kaW5nQXZlcmFnZVUgPSAweDliOworbGV0IGtFeHBySTE2eDhFeHRNdWxMb3dJOHgx
NlMgPSAweDljOworbGV0IGtFeHBySTE2eDhFeHRNdWxIaWdoSTh4MTZTID0gMHg5ZDsKK2xldCBr
RXhwckkxNng4RXh0TXVsTG93STh4MTZVID0gMHg5ZTsKK2xldCBrRXhwckkxNng4RXh0TXVsSGln
aEk4eDE2VSA9IDB4OWY7CitsZXQga0V4cHJJMzJ4NEFicyA9IDB4YTA7CitsZXQga0V4cHJJMzJ4
NE5lZyA9IDB4YTE7CitsZXQga0V4cHJJMzJ4NEFsbFRydWUgPSAweGEzOworbGV0IGtFeHBySTMy
eDRCaXRNYXNrID0gMHhhNDsKK2xldCBrRXhwckkzMng0U0NvbnZlcnRJMTZ4OExvdyA9IDB4YTc7
CitsZXQga0V4cHJJMzJ4NFNDb252ZXJ0STE2eDhIaWdoID0gMHhhODsKK2xldCBrRXhwckkzMng0
VUNvbnZlcnRJMTZ4OExvdyA9IDB4YTk7CitsZXQga0V4cHJJMzJ4NFVDb252ZXJ0STE2eDhIaWdo
ID0gMHhhYTsKK2xldCBrRXhwckkzMng0U2hsID0gMHhhYjsKK2xldCBrRXhwckkzMng0U2hyUyA9
IDB4YWM7CitsZXQga0V4cHJJMzJ4NFNoclUgPSAweGFkOworbGV0IGtFeHBySTMyeDRBZGQgPSAw
eGFlOworbGV0IGtFeHBySTMyeDRTdWIgPSAweGIxOworbGV0IGtFeHBySTMyeDRNdWwgPSAweGI1
OworbGV0IGtFeHBySTMyeDRNaW5TID0gMHhiNjsKK2xldCBrRXhwckkzMng0TWluVSA9IDB4Yjc7
CitsZXQga0V4cHJJMzJ4NE1heFMgPSAweGI4OworbGV0IGtFeHBySTMyeDRNYXhVID0gMHhiOTsK
K2xldCBrRXhwckkzMng0RG90STE2eDhTID0gMHhiYTsKK2xldCBrRXhwckkzMng0RXh0TXVsTG93
STE2eDhTID0gMHhiYzsKK2xldCBrRXhwckkzMng0RXh0TXVsSGlnaEkxNng4UyA9IDB4YmQ7Cits
ZXQga0V4cHJJMzJ4NEV4dE11bExvd0kxNng4VSA9IDB4YmU7CitsZXQga0V4cHJJMzJ4NEV4dE11
bEhpZ2hJMTZ4OFUgPSAweGJmOworbGV0IGtFeHBySTY0eDJBYnMgPSAweGMwOworbGV0IGtFeHBy
STY0eDJOZWcgPSAweGMxOworbGV0IGtFeHBySTY0eDJBbGxUcnVlID0gMHhjMzsKK2xldCBrRXhw
ckk2NHgyQml0TWFzayA9IDB4YzQ7CitsZXQga0V4cHJJNjR4MlNDb252ZXJ0STMyeDRMb3cgPSAw
eGM3OworbGV0IGtFeHBySTY0eDJTQ29udmVydEkzMng0SGlnaCA9IDB4Yzg7CitsZXQga0V4cHJJ
NjR4MlVDb252ZXJ0STMyeDRMb3cgPSAweGM5OworbGV0IGtFeHBySTY0eDJVQ29udmVydEkzMng0
SGlnaCA9IDB4Y2E7CitsZXQga0V4cHJJNjR4MlNobCA9IDB4Y2I7CitsZXQga0V4cHJJNjR4MlNo
clMgPSAweGNjOworbGV0IGtFeHBySTY0eDJTaHJVID0gMHhjZDsKK2xldCBrRXhwckk2NHgyQWRk
ID0gMHhjZTsKK2xldCBrRXhwckk2NHgyU3ViID0gMHhkMTsKK2xldCBrRXhwckk2NHgyTXVsID0g
MHhkNTsKK2xldCBrRXhwckk2NHgyRXEgPSAweGQ2OworbGV0IGtFeHBySTY0eDJOZSA9IDB4ZDc7
CitsZXQga0V4cHJJNjR4Mkx0UyA9IDB4ZDg7CitsZXQga0V4cHJJNjR4Mkd0UyA9IDB4ZDk7Cits
ZXQga0V4cHJJNjR4MkxlUyA9IDB4ZGE7CitsZXQga0V4cHJJNjR4MkdlUyA9IDB4ZGI7CitsZXQg
a0V4cHJJNjR4MkV4dE11bExvd0kzMng0UyA9IDB4ZGM7CitsZXQga0V4cHJJNjR4MkV4dE11bEhp
Z2hJMzJ4NFMgPSAweGRkOworbGV0IGtFeHBySTY0eDJFeHRNdWxMb3dJMzJ4NFUgPSAweGRlOwor
bGV0IGtFeHBySTY0eDJFeHRNdWxIaWdoSTMyeDRVID0gMHhkZjsKK2xldCBrRXhwckYzMng0QWJz
ID0gMHhlMDsKK2xldCBrRXhwckYzMng0TmVnID0gMHhlMTsKK2xldCBrRXhwckYzMng0U3FydCA9
IDB4ZTM7CitsZXQga0V4cHJGMzJ4NEFkZCA9IDB4ZTQ7CitsZXQga0V4cHJGMzJ4NFN1YiA9IDB4
ZTU7CitsZXQga0V4cHJGMzJ4NE11bCA9IDB4ZTY7CitsZXQga0V4cHJGMzJ4NERpdiA9IDB4ZTc7
CitsZXQga0V4cHJGMzJ4NE1pbiA9IDB4ZTg7CitsZXQga0V4cHJGMzJ4NE1heCA9IDB4ZTk7Cits
ZXQga0V4cHJGMzJ4NFBtaW4gPSAweGVhOworbGV0IGtFeHByRjMyeDRQbWF4ID0gMHhlYjsKK2xl
dCBrRXhwckY2NHgyQWJzID0gMHhlYzsKK2xldCBrRXhwckY2NHgyTmVnID0gMHhlZDsKK2xldCBr
RXhwckY2NHgyU3FydCA9IDB4ZWY7CitsZXQga0V4cHJGNjR4MkFkZCA9IDB4ZjA7CitsZXQga0V4
cHJGNjR4MlN1YiA9IDB4ZjE7CitsZXQga0V4cHJGNjR4Mk11bCA9IDB4ZjI7CitsZXQga0V4cHJG
NjR4MkRpdiA9IDB4ZjM7CitsZXQga0V4cHJGNjR4Mk1pbiA9IDB4ZjQ7CitsZXQga0V4cHJGNjR4
Mk1heCA9IDB4ZjU7CitsZXQga0V4cHJGNjR4MlBtaW4gPSAweGY2OworbGV0IGtFeHByRjY0eDJQ
bWF4ID0gMHhmNzsKK2xldCBrRXhwckkzMng0U0NvbnZlcnRGMzJ4NCA9IDB4Zjg7CitsZXQga0V4
cHJJMzJ4NFVDb252ZXJ0RjMyeDQgPSAweGY5OworbGV0IGtFeHByRjMyeDRTQ29udmVydEkzMng0
ID0gMHhmYTsKK2xldCBrRXhwckYzMng0VUNvbnZlcnRJMzJ4NCA9IDB4ZmI7CitsZXQga0V4cHJJ
MzJ4NFRydW5jU2F0RjY0eDJTWmVybyA9IDB4ZmM7CitsZXQga0V4cHJJMzJ4NFRydW5jU2F0RjY0
eDJVWmVybyA9IDB4ZmQ7CitsZXQga0V4cHJGNjR4MkNvbnZlcnRMb3dJMzJ4NFMgPSAweGZlOwor
bGV0IGtFeHByRjY0eDJDb252ZXJ0TG93STMyeDRVID0gMHhmZjsKKworLy8gQ29tcGlsYXRpb24g
aGludCBjb25zdGFudHMuCitsZXQga0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5RGVmYXVsdCA9IDB4
MDA7CitsZXQga0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5TGF6eSA9IDB4MDE7CitsZXQga0NvbXBp
bGF0aW9uSGludFN0cmF0ZWd5RWFnZXIgPSAweDAyOworbGV0IGtDb21waWxhdGlvbkhpbnRTdHJh
dGVneUxhenlCYXNlbGluZUVhZ2VyVG9wVGllciA9IDB4MDM7CitsZXQga0NvbXBpbGF0aW9uSGlu
dFRpZXJEZWZhdWx0ID0gMHgwMDsKK2xldCBrQ29tcGlsYXRpb25IaW50VGllckJhc2VsaW5lID0g
MHgwMTsKK2xldCBrQ29tcGlsYXRpb25IaW50VGllck9wdGltaXplZCA9IDB4MDI7CisKK2xldCBr
VHJhcFVucmVhY2hhYmxlID0gMDsKK2xldCBrVHJhcE1lbU91dE9mQm91bmRzID0gMTsKK2xldCBr
VHJhcERpdkJ5WmVybyA9IDI7CitsZXQga1RyYXBEaXZVbnJlcHJlc2VudGFibGUgPSAzOworbGV0
IGtUcmFwUmVtQnlaZXJvID0gNDsKK2xldCBrVHJhcEZsb2F0VW5yZXByZXNlbnRhYmxlID0gNTsK
K2xldCBrVHJhcFRhYmxlT3V0T2ZCb3VuZHMgPSA2OworbGV0IGtUcmFwRnVuY1NpZ01pc21hdGNo
ID0gNzsKK2xldCBrVHJhcFVuYWxpZ25lZEFjY2VzcyA9IDg7CitsZXQga1RyYXBEYXRhU2VnbWVu
dERyb3BwZWQgPSA5OworbGV0IGtUcmFwRWxlbVNlZ21lbnREcm9wcGVkID0gMTA7CitsZXQga1Ry
YXBSZXRocm93TnVsbCA9IDExOworCitsZXQga1RyYXBNc2dzID0gWworICAvVW5yZWFjaGFibGUv
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdtZW1vcnkgYWNj
ZXNzIG91dCBvZiBib3VuZHMnLCAgICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgL0RpdmlzaW9u
IGJ5IHplcm8vLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtLQorICAnZGl2aWRl
IHJlc3VsdCB1bnJlcHJlc2VudGFibGUnLCAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdyZW1h
aW5kZXIgYnkgemVybycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgJ2Zs
b2F0IHVucmVwcmVzZW50YWJsZSBpbiBpbnRlZ2VyIHJhbmdlJywgICAgICAgICAvLyAtLQorICAn
dGFibGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycsICAgICAgICAgICAgICAgICAgIC8vIC0tCisg
ICdudWxsIGZ1bmN0aW9uIG9yIGZ1bmN0aW9uIHNpZ25hdHVyZSBtaXNtYXRjaCcsICAgLy8gLS0K
KyAgJ29wZXJhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHVuYWxpZ25lZCBhY2Nlc3NlcycsICAvLyAt
LQorICAnZGF0YSBzZWdtZW50IGhhcyBiZWVuIGRyb3BwZWQnLCAgICAgICAgICAgICAgICAgIC8v
IC0tCisgICdlbGVtZW50IHNlZ21lbnQgaGFzIGJlZW4gZHJvcHBlZCcsICAgICAgICAgICAgICAg
Ly8gLS0KKyAgJ3JldGhyb3dpbmcgbnVsbCB2YWx1ZScgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAtLQorXTsKKworLy8gVGhpcyByZXF1aXJlcyB0ZXN0L21qc3VuaXQvbWpzdW5pdC5qcy4K
K2Z1bmN0aW9uIGFzc2VydFRyYXBzKHRyYXAsIGNvZGUpIHsKKyAgYXNzZXJ0VGhyb3dzKGNvZGUs
IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwga1RyYXBNc2dzW3RyYXBdKTsKK30KKworY2xhc3Mg
QmluYXJ5IHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgdGhpcy5sZW5ndGggPSAwOworICAgIHRo
aXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoODE5Mik7CisgIH0KKworICBlbnN1cmVfc3BhY2Uo
bmVlZGVkKSB7CisgICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCAtIHRoaXMubGVuZ3RoID49IG5l
ZWRlZCkgcmV0dXJuOworICAgIGxldCBuZXdfY2FwYWNpdHkgPSB0aGlzLmJ1ZmZlci5sZW5ndGgg
KiAyOworICAgIHdoaWxlIChuZXdfY2FwYWNpdHkgLSB0aGlzLmxlbmd0aCA8IG5lZWRlZCkgbmV3
X2NhcGFjaXR5ICo9IDI7CisgICAgbGV0IG5ld19idWZmZXIgPSBuZXcgVWludDhBcnJheShuZXdf
Y2FwYWNpdHkpOworICAgIG5ld19idWZmZXIuc2V0KHRoaXMuYnVmZmVyKTsKKyAgICB0aGlzLmJ1
ZmZlciA9IG5ld19idWZmZXI7CisgIH0KKworICB0cnVuY19idWZmZXIoKSB7CisgICAgcmV0dXJu
IG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLmJ1ZmZlciwgMCwgdGhpcy5sZW5ndGgpOworICB9
CisKKyAgcmVzZXQoKSB7CisgICAgdGhpcy5sZW5ndGggPSAwOworICB9CisKKyAgZW1pdF91OCh2
YWwpIHsKKyAgICB0aGlzLmVuc3VyZV9zcGFjZSgxKTsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxl
bmd0aCsrXSA9IHZhbDsKKyAgfQorCisgIGVtaXRfdTE2KHZhbCkgeworICAgIHRoaXMuZW5zdXJl
X3NwYWNlKDIpOworICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdmFsOworICAgIHRo
aXMuYnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdmFsID4+IDg7CisgIH0KKworICBlbWl0X3UzMih2
YWwpIHsKKyAgICB0aGlzLmVuc3VyZV9zcGFjZSg0KTsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxl
bmd0aCsrXSA9IHZhbDsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbCA+PiA4
OworICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdmFsID4+IDE2OworICAgIHRoaXMu
YnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdmFsID4+IDI0OworICB9CisKKyAgZW1pdF9sZWJfdSh2
YWwsIG1heF9sZW4pIHsKKyAgICB0aGlzLmVuc3VyZV9zcGFjZShtYXhfbGVuKTsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IG1heF9sZW47ICsraSkgeworICAgICAgbGV0IHYgPSB2YWwgJiAweGZm
OworICAgICAgdmFsID0gdmFsID4+PiA3OworICAgICAgaWYgKHZhbCA9PSAwKSB7CisgICAgICAg
IHRoaXMuYnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdjsKKyAgICAgICAgcmV0dXJuOworICAgICAg
fQorICAgICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2IHwgMHg4MDsKKyAgICB9Cisg
ICAgdGhyb3cgbmV3IEVycm9yKCdMZWIgdmFsdWUgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAn
ICsgbWF4X2xlbik7CisgIH0KKworICBlbWl0X3UzMnYodmFsKSB7CisgICAgdGhpcy5lbWl0X2xl
Yl91KHZhbCwga01heFZhckludDMyU2l6ZSk7CisgIH0KKworICBlbWl0X3U2NHYodmFsKSB7Cisg
ICAgdGhpcy5lbWl0X2xlYl91KHZhbCwga01heFZhckludDY0U2l6ZSk7CisgIH0KKworICBlbWl0
X2J5dGVzKGRhdGEpIHsKKyAgICB0aGlzLmVuc3VyZV9zcGFjZShkYXRhLmxlbmd0aCk7CisgICAg
dGhpcy5idWZmZXIuc2V0KGRhdGEsIHRoaXMubGVuZ3RoKTsKKyAgICB0aGlzLmxlbmd0aCArPSBk
YXRhLmxlbmd0aDsKKyAgfQorCisgIGVtaXRfc3RyaW5nKHN0cmluZykgeworICAgIC8vIFdoZW4g
dGVzdGluZyBpbGxlZ2FsIG5hbWVzLCB3ZSBwYXNzIGEgYnl0ZSBhcnJheSBkaXJlY3RseS4KKyAg
ICBpZiAoc3RyaW5nIGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgIHRoaXMuZW1pdF91MzJ2KHN0
cmluZy5sZW5ndGgpOworICAgICAgdGhpcy5lbWl0X2J5dGVzKHN0cmluZyk7CisgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB0aGUgaGFja3kgd2F5IHRvIGNvbnZlcnQgYSBK
YXZhU2NyaXB0IHN0cmluZyB0byBhIFVURjggZW5jb2RlZAorICAgIC8vIHN0cmluZyBvbmx5IGNv
bnRhaW5pbmcgc2luZ2xlLWJ5dGUgY2hhcmFjdGVycy4KKyAgICBsZXQgc3RyaW5nX3V0ZjggPSB1
bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyaW5nKSk7CisgICAgdGhpcy5lbWl0X3UzMnYo
c3RyaW5nX3V0ZjgubGVuZ3RoKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ191dGY4
Lmxlbmd0aDsgaSsrKSB7CisgICAgICB0aGlzLmVtaXRfdTgoc3RyaW5nX3V0ZjguY2hhckNvZGVB
dChpKSk7CisgICAgfQorICB9CisKKyAgZW1pdF9oZWFwX3R5cGUoaGVhcF90eXBlKSB7CisgICAg
dGhpcy5lbWl0X2J5dGVzKHdhc21TaWduZWRMZWIoaGVhcF90eXBlLCBrTWF4VmFySW50MzJTaXpl
KSk7CisgIH0KKworICBlbWl0X3R5cGUodHlwZSkgeworICAgIGlmICgodHlwZW9mIHR5cGUpID09
ICdudW1iZXInKSB7CisgICAgICB0aGlzLmVtaXRfdTgodHlwZSA+PSAwID8gdHlwZSA6IHR5cGUg
JiBrTGViMTI4TWFzayk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuZW1pdF91OCh0eXBlLm9w
Y29kZSk7CisgICAgICBpZiAoJ2RlcHRoJyBpbiB0eXBlKSB0aGlzLmVtaXRfdTgodHlwZS5kZXB0
aCk7CisgICAgICB0aGlzLmVtaXRfaGVhcF90eXBlKHR5cGUuaGVhcF90eXBlKTsKKyAgICB9Cisg
IH0KKworICBlbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUoZXhwcikgeworICAgIHN3aXRjaCAoZXhw
ci5raW5kKSB7CisgICAgICBjYXNlIGtFeHByR2xvYmFsR2V0OgorICAgICAgICB0aGlzLmVtaXRf
dTgoa0V4cHJHbG9iYWxHZXQpOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHBySTMyQ29uc3Q6CisgICAgICAgIHRoaXMu
ZW1pdF9ieXRlcyh3YXNtSTMyQ29uc3QoZXhwci52YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2Uga0V4cHJJNjRDb25zdDoKKyAgICAgICAgdGhpcy5lbWl0X2J5dGVzKHdhc21JNjRD
b25zdChleHByLnZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwckYzMkNv
bnN0OgorICAgICAgICB0aGlzLmVtaXRfYnl0ZXMod2FzbUYzMkNvbnN0KGV4cHIudmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByRjY0Q29uc3Q6CisgICAgICAgIHRoaXMu
ZW1pdF9ieXRlcyh3YXNtRjY0Q29uc3QoZXhwci52YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2Uga1NpbWRQcmVmaXg6CisgICAgICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNtUzEyOENv
bnN0KGV4cHIudmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByUmVmRnVu
YzoKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtFeHByUmVmRnVuYyk7CisgICAgICAgIHRoaXMuZW1p
dF91MzJ2KGV4cHIudmFsdWUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJSZWZO
dWxsOgorICAgICAgICB0aGlzLmVtaXRfdTgoa0V4cHJSZWZOdWxsKTsKKyAgICAgICAgdGhpcy5l
bWl0X2hlYXBfdHlwZShleHByLnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtF
eHByU3RydWN0TmV3OgorICAgICAgY2FzZSBrRXhwclN0cnVjdE5ld1dpdGhSdHQ6CisgICAgICBj
YXNlIGtFeHByU3RydWN0TmV3RGVmYXVsdDoKKyAgICAgIGNhc2Uga0V4cHJTdHJ1Y3ROZXdEZWZh
dWx0V2l0aFJ0dDoKKyAgICAgICAgZm9yIChsZXQgb3BlcmFuZCBvZiBleHByLm9wZXJhbmRzKSB7
CisgICAgICAgICAgdGhpcy5lbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUob3BlcmFuZCk7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5lbWl0X3U4KGtHQ1ByZWZpeCk7CisgICAgICAgIHRoaXMuZW1p
dF91OChleHByLmtpbmQpOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByQXJyYXlJbml0OgorICAgICAgY2FzZSBrRXhw
ckFycmF5SW5pdFN0YXRpYzoKKyAgICAgICAgZm9yIChsZXQgb3BlcmFuZCBvZiBleHByLm9wZXJh
bmRzKSB7CisgICAgICAgICAgdGhpcy5lbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUob3BlcmFuZCk7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5lbWl0X3U4KGtHQ1ByZWZpeCk7CisgICAgICAgIHRo
aXMuZW1pdF91OChleHByLmtpbmQpOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVl
KTsKKyAgICAgICAgdGhpcy5lbWl0X3UzMnYoZXhwci5vcGVyYW5kcy5sZW5ndGggLSAxKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByUnR0Q2Fub246CisgICAgICAgIHRoaXMuZW1p
dF91OChrR0NQcmVmaXgpOworICAgICAgICB0aGlzLmVtaXRfdTgoa0V4cHJSdHRDYW5vbik7Cisg
ICAgICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIudmFsdWUpOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga0V4cHJSdHRTdWI6CisgICAgICAgIHRoaXMuZW1pdF9pbml0X2V4cHJfcmVjdXJzaXZl
KGV4cHIucGFyZW50KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtHY1ByZWZpeCk7CisgICAgICAg
IHRoaXMuZW1pdF91OChrRXhwclJ0dFN1Yik7CisgICAgICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIu
dmFsdWUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJSdHRGcmVzaFN1YjoKKyAg
ICAgICAgdGhpcy5lbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUoZXhwci5wYXJlbnQpOworICAgICAg
ICB0aGlzLmVtaXRfdTgoa0djUHJlZml4KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtFeHByUnR0
RnJlc2hTdWIpOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICB9CisKKyAgZW1pdF9pbml0X2V4cHIoZXhwcikgeworICAgIHRoaXMu
ZW1pdF9pbml0X2V4cHJfcmVjdXJzaXZlKGV4cHIpOworICAgIHRoaXMuZW1pdF91OChrRXhwckVu
ZCk7CisgIH0KKworICBlbWl0X2hlYWRlcigpIHsKKyAgICB0aGlzLmVtaXRfYnl0ZXMoWworICAg
ICAga1dhc21IMCwga1dhc21IMSwga1dhc21IMiwga1dhc21IMywga1dhc21WMCwga1dhc21WMSwg
a1dhc21WMiwga1dhc21WMworICAgIF0pOworICB9CisKKyAgZW1pdF9zZWN0aW9uKHNlY3Rpb25f
Y29kZSwgY29udGVudF9nZW5lcmF0b3IpIHsKKyAgICAvLyBFbWl0IHNlY3Rpb24gbmFtZS4KKyAg
ICB0aGlzLmVtaXRfdTgoc2VjdGlvbl9jb2RlKTsKKyAgICAvLyBFbWl0IHRoZSBzZWN0aW9uIHRv
IGEgdGVtcG9yYXJ5IGJ1ZmZlcjogaXRzIGZ1bGwgbGVuZ3RoIGlzbid0IGtub3cgeWV0LgorICAg
IGNvbnN0IHNlY3Rpb24gPSBuZXcgQmluYXJ5OworICAgIGNvbnRlbnRfZ2VuZXJhdG9yKHNlY3Rp
b24pOworICAgIC8vIEVtaXQgc2VjdGlvbiBsZW5ndGguCisgICAgdGhpcy5lbWl0X3UzMnYoc2Vj
dGlvbi5sZW5ndGgpOworICAgIC8vIENvcHkgdGhlIHRlbXBvcmFyeSBidWZmZXIuCisgICAgLy8g
QXZvaWQgc3ByZWFkIGJlY2F1c2Uge3NlY3Rpb259IGNhbiBiZSBodWdlLgorICAgIHRoaXMuZW1p
dF9ieXRlcyhzZWN0aW9uLnRydW5jX2J1ZmZlcigpKTsKKyAgfQorfQorCitjbGFzcyBXYXNtRnVu
Y3Rpb25CdWlsZGVyIHsKKyAgLy8gRW5jb2Rpbmcgb2YgbG9jYWwgbmFtZXM6IGEgc3RyaW5nIGNv
cnJlc3BvbmRzIHRvIGEgbG9jYWwgbmFtZSwKKyAgLy8gYSBudW1iZXIgbiBjb3JyZXNwb25kcyB0
byBuIHVuZGVmaW5lZCBuYW1lcy4KKyAgY29uc3RydWN0b3IobW9kdWxlLCBuYW1lLCB0eXBlX2lu
ZGV4LCBhcmdfbmFtZXMpIHsKKyAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKKyAgICB0aGlzLm5h
bWUgPSBuYW1lOworICAgIHRoaXMudHlwZV9pbmRleCA9IHR5cGVfaW5kZXg7CisgICAgdGhpcy5i
b2R5ID0gW107CisgICAgdGhpcy5sb2NhbHMgPSBbXTsKKyAgICB0aGlzLmxvY2FsX25hbWVzID0g
YXJnX25hbWVzOworICAgIHRoaXMuYm9keV9vZmZzZXQgPSB1bmRlZmluZWQ7ICAvLyBOb3QgdmFs
aWQgdW50aWwgbW9kdWxlIGlzIHNlcmlhbGl6ZWQuCisgIH0KKworICBudW1Mb2NhbE5hbWVzKCkg
eworICAgIGxldCBudW1fbG9jYWxfbmFtZXMgPSAwOworICAgIGZvciAobGV0IGxvY19uYW1lIG9m
IHRoaXMubG9jYWxfbmFtZXMpIHsKKyAgICAgIGlmICh0eXBlb2YgbG9jX25hbWUgPT0gJ3N0cmlu
ZycpICsrbnVtX2xvY2FsX25hbWVzOworICAgIH0KKyAgICByZXR1cm4gbnVtX2xvY2FsX25hbWVz
OworICB9CisKKyAgZXhwb3J0QXMobmFtZSkgeworICAgIHRoaXMubW9kdWxlLmFkZEV4cG9ydChu
YW1lLCB0aGlzLmluZGV4KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGV4cG9ydEZ1bmMo
KSB7CisgICAgdGhpcy5leHBvcnRBcyh0aGlzLm5hbWUpOworICAgIHJldHVybiB0aGlzOworICB9
CisKKyAgc2V0Q29tcGlsYXRpb25IaW50KHN0cmF0ZWd5LCBiYXNlbGluZVRpZXIsIHRvcFRpZXIp
IHsKKyAgICB0aGlzLm1vZHVsZS5zZXRDb21waWxhdGlvbkhpbnQoc3RyYXRlZ3ksIGJhc2VsaW5l
VGllciwgdG9wVGllciwgdGhpcy5pbmRleCk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBh
ZGRCb2R5KGJvZHkpIHsKKyAgICBmb3IgKGxldCBiIG9mIGJvZHkpIHsKKyAgICAgIGlmICh0eXBl
b2YgYiAhPT0gJ251bWJlcicgfHwgKGIgJiAofjB4RkYpKSAhPT0gMCkgeworICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoCisgICAgICAgICAgICAnaW52YWxpZCBib2R5IChlbnRyaWVzIG11c3QgYmUg
OCBiaXQgbnVtYmVycyk6ICcgKyBib2R5KTsKKyAgICAgIH0KKyAgICB9CisgICAgdGhpcy5ib2R5
ID0gYm9keS5zbGljZSgpOworICAgIC8vIEF1dG9tYXRpY2FsbHkgYWRkIHRoZSBlbmQgZm9yIHRo
ZSBmdW5jdGlvbiBibG9jayB0byB0aGUgYm9keS4KKyAgICB0aGlzLmJvZHkucHVzaChrRXhwckVu
ZCk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBhZGRCb2R5V2l0aEVuZChib2R5KSB7Cisg
ICAgdGhpcy5ib2R5ID0gYm9keTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGdldE51bUxv
Y2FscygpIHsKKyAgICBsZXQgdG90YWxfbG9jYWxzID0gMDsKKyAgICBmb3IgKGxldCBsIG9mIHRo
aXMubG9jYWxzKSB7CisgICAgICB0b3RhbF9sb2NhbHMgKz0gbC5jb3VudAorICAgIH0KKyAgICBy
ZXR1cm4gdG90YWxfbG9jYWxzOworICB9CisKKyAgYWRkTG9jYWxzKHR5cGUsIGNvdW50LCBuYW1l
cykgeworICAgIHRoaXMubG9jYWxzLnB1c2goe3R5cGU6IHR5cGUsIGNvdW50OiBjb3VudH0pOwor
ICAgIG5hbWVzID0gbmFtZXMgfHwgW107CisgICAgaWYgKG5hbWVzLmxlbmd0aCA+IGNvdW50KSB0
aHJvdyBuZXcgRXJyb3IoJ3RvbyBtYW55IGxvY2FscyBuYW1lcyBnaXZlbicpOworICAgIHRoaXMu
bG9jYWxfbmFtZXMucHVzaCguLi5uYW1lcyk7CisgICAgaWYgKGNvdW50ID4gbmFtZXMubGVuZ3Ro
KSB0aGlzLmxvY2FsX25hbWVzLnB1c2goY291bnQgLSBuYW1lcy5sZW5ndGgpOworICAgIHJldHVy
biB0aGlzOworICB9CisKKyAgZW5kKCkgeworICAgIHJldHVybiB0aGlzLm1vZHVsZTsKKyAgfQor
fQorCitjbGFzcyBXYXNtSW5pdEV4cHIgeworICBzdGF0aWMgSTMyQ29uc3QodmFsdWUpIHsKKyAg
ICByZXR1cm4ge2tpbmQ6IGtFeHBySTMyQ29uc3QsIHZhbHVlOiB2YWx1ZX07CisgIH0KKyAgc3Rh
dGljIEk2NENvbnN0KHZhbHVlKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckk2NENvbnN0LCB2
YWx1ZTogdmFsdWV9OworICB9CisgIHN0YXRpYyBGMzJDb25zdCh2YWx1ZSkgeworICAgIHJldHVy
biB7a2luZDoga0V4cHJGMzJDb25zdCwgdmFsdWU6IHZhbHVlfTsKKyAgfQorICBzdGF0aWMgRjY0
Q29uc3QodmFsdWUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByRjY0Q29uc3QsIHZhbHVlOiB2
YWx1ZX07CisgIH0KKyAgc3RhdGljIFMxMjhDb25zdCh2YWx1ZSkgeworICAgIHJldHVybiB7a2lu
ZDoga1NpbWRQcmVmaXgsIHZhbHVlOiB2YWx1ZX07CisgIH0KKyAgc3RhdGljIEdsb2JhbEdldChp
bmRleCkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJHbG9iYWxHZXQsIHZhbHVlOiBpbmRleH07
CisgIH0KKyAgc3RhdGljIFJlZkZ1bmMoaW5kZXgpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHBy
UmVmRnVuYywgdmFsdWU6IGluZGV4fTsKKyAgfQorICBzdGF0aWMgUmVmTnVsbCh0eXBlKSB7Cisg
ICAgcmV0dXJuIHtraW5kOiBrRXhwclJlZk51bGwsIHZhbHVlOiB0eXBlfTsKKyAgfQorICBzdGF0
aWMgU3RydWN0TmV3V2l0aFJ0dCh0eXBlLCBhcmdzKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhw
clN0cnVjdE5ld1dpdGhSdHQsIHZhbHVlOiB0eXBlLCBvcGVyYW5kczogYXJnc307CisgIH0KKyAg
c3RhdGljIFN0cnVjdE5ldyh0eXBlLCBhcmdzKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclN0
cnVjdE5ldywgdmFsdWU6IHR5cGUsIG9wZXJhbmRzOiBhcmdzfTsKKyAgfQorICBzdGF0aWMgU3Ry
dWN0TmV3RGVmYXVsdFdpdGhSdHQodHlwZSwgcnR0KSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhw
clN0cnVjdE5ld0RlZmF1bHRXaXRoUnR0LCB2YWx1ZTogdHlwZSwgb3BlcmFuZHM6IFtydHRdfTsK
KyAgfQorICBzdGF0aWMgU3RydWN0TmV3RGVmYXVsdCh0eXBlKSB7CisgICAgcmV0dXJuIHtraW5k
OiBrRXhwclN0cnVjdE5ld0RlZmF1bHQsIHZhbHVlOiB0eXBlLCBvcGVyYW5kczogW119OworICB9
CisgIHN0YXRpYyBBcnJheUluaXQodHlwZSwgYXJncykgeworICAgIHJldHVybiB7a2luZDoga0V4
cHJBcnJheUluaXQsIHZhbHVlOiB0eXBlLCBvcGVyYW5kczogYXJnc307CisgIH0KKyAgc3RhdGlj
IEFycmF5SW5pdFN0YXRpYyh0eXBlLCBhcmdzKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckFy
cmF5SW5pdFN0YXRpYywgdmFsdWU6IHR5cGUsIG9wZXJhbmRzOiBhcmdzfTsKKyAgfQorICBzdGF0
aWMgUnR0Q2Fub24odHlwZSkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJSdHRDYW5vbiwgdmFs
dWU6IHR5cGV9OworICB9CisgIHN0YXRpYyBSdHRTdWIodHlwZSwgcGFyZW50KSB7CisgICAgcmV0
dXJuIHtraW5kOiBrRXhwclJ0dFN1YiwgdmFsdWU6IHR5cGUsIHBhcmVudDogcGFyZW50fTsKKyAg
fQorICBzdGF0aWMgUnR0RnJlc2hTdWIodHlwZSwgcGFyZW50KSB7CisgICAgcmV0dXJuIHtraW5k
OiBrRXhwclJ0dEZyZXNoU3ViLCB2YWx1ZTogdHlwZSwgcGFyZW50OiBwYXJlbnR9OworICB9CisK
KyAgc3RhdGljIGRlZmF1bHRGb3IodHlwZSkgeworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
Y2FzZSBrV2FzbUkzMjoKKyAgICAgICAgcmV0dXJuIHRoaXMuSTMyQ29uc3QoMCk7CisgICAgICBj
YXNlIGtXYXNtSTY0OgorICAgICAgICByZXR1cm4gdGhpcy5JNjRDb25zdCgwKTsKKyAgICAgIGNh
c2Uga1dhc21GMzI6CisgICAgICAgIHJldHVybiB0aGlzLkYzMkNvbnN0KDApOworICAgICAgY2Fz
ZSBrV2FzbUY2NDoKKyAgICAgICAgcmV0dXJuIHRoaXMuRjY0Q29uc3QoMCk7CisgICAgICBjYXNl
IGtXYXNtUzEyODoKKyAgICAgICAgcmV0dXJuIHRoaXMuUzEyOENvbnN0KG5ldyBBcnJheSgxNiku
ZmlsbCgwKSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICBpZiAoKHR5cGVvZiB0eXBlKSAhPSAn
bnVtYmVyJyAmJiB0eXBlLm9wY29kZSAhPSBrV2FzbU9wdFJlZikgeworICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiTm9uLWRlZmF1bHRhYmxlIHR5cGUiKTsKKyAgICAgICAgfQorICAgICAgICBs
ZXQgaGVhcF90eXBlID0gKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVyJyA/IHR5cGUgOiB0eXBlLmhl
YXBfdHlwZTsKKyAgICAgICAgcmV0dXJuIHRoaXMuUmVmTnVsbChoZWFwX3R5cGUpOworICAgIH0K
KyAgfQorfQorCitjbGFzcyBXYXNtR2xvYmFsQnVpbGRlciB7CisgIC8vIHtpbml0fSBzaG91bGQg
YmUgY29uc3RydWN0ZWQgd2l0aCBXYXNtSW5pdEV4cHIuCisgIGNvbnN0cnVjdG9yKG1vZHVsZSwg
dHlwZSwgbXV0YWJsZSwgaW5pdCkgeworICAgIHRoaXMubW9kdWxlID0gbW9kdWxlOworICAgIHRo
aXMudHlwZSA9IHR5cGU7CisgICAgdGhpcy5tdXRhYmxlID0gbXV0YWJsZTsKKyAgICB0aGlzLmlu
aXQgPSBpbml0OworICB9CisKKyAgZXhwb3J0QXMobmFtZSkgeworICAgIHRoaXMubW9kdWxlLmV4
cG9ydHMucHVzaCgKKyAgICAgICAge25hbWU6IG5hbWUsIGtpbmQ6IGtFeHRlcm5hbEdsb2JhbCwg
aW5kZXg6IHRoaXMuaW5kZXh9KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorfQorCitjbGFzcyBX
YXNtVGFibGVCdWlsZGVyIHsKKyAgY29uc3RydWN0b3IobW9kdWxlLCB0eXBlLCBpbml0aWFsX3Np
emUsIG1heF9zaXplLCBpbml0X2V4cHIpIHsKKyAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKKyAg
ICB0aGlzLnR5cGUgPSB0eXBlOworICAgIHRoaXMuaW5pdGlhbF9zaXplID0gaW5pdGlhbF9zaXpl
OworICAgIHRoaXMuaGFzX21heCA9IG1heF9zaXplICE9PSB1bmRlZmluZWQ7CisgICAgdGhpcy5t
YXhfc2l6ZSA9IG1heF9zaXplOworICAgIHRoaXMuaW5pdF9leHByID0gaW5pdF9leHByOworICAg
IHRoaXMuaGFzX2luaXQgPSBpbml0X2V4cHIgIT09IHVuZGVmaW5lZDsKKyAgfQorCisgIGV4cG9y
dEFzKG5hbWUpIHsKKyAgICB0aGlzLm1vZHVsZS5leHBvcnRzLnB1c2goCisgICAgICAgIHtuYW1l
OiBuYW1lLCBraW5kOiBrRXh0ZXJuYWxUYWJsZSwgaW5kZXg6IHRoaXMuaW5kZXh9KTsKKyAgICBy
ZXR1cm4gdGhpczsKKyAgfQorfQorCitmdW5jdGlvbiBtYWtlRmllbGQodHlwZSwgbXV0YWJpbGl0
eSkgeworICBpZiAoKHR5cGVvZiBtdXRhYmlsaXR5KSAhPSAnYm9vbGVhbicpIHsKKyAgICB0aHJv
dyBuZXcgRXJyb3IoJ2ZpZWxkIG11dGFiaWxpdHkgbXVzdCBiZSBib29sZWFuJyk7CisgIH0KKyAg
cmV0dXJuIHt0eXBlOiB0eXBlLCBtdXRhYmlsaXR5OiBtdXRhYmlsaXR5fTsKK30KKworY2xhc3Mg
V2FzbVN0cnVjdCB7CisgIGNvbnN0cnVjdG9yKGZpZWxkcykgeworICAgIGlmICghQXJyYXkuaXNB
cnJheShmaWVsZHMpKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cnVjdCBmaWVsZHMgbXVz
dCBiZSBhbiBhcnJheScpOworICAgIH0KKyAgICB0aGlzLmZpZWxkcyA9IGZpZWxkczsKKyAgICB0
aGlzLnR5cGVfZm9ybSA9IGtXYXNtU3RydWN0VHlwZUZvcm07CisgIH0KK30KKworY2xhc3MgV2Fz
bVN0cnVjdFN1YnR5cGUgZXh0ZW5kcyBXYXNtU3RydWN0IHsKKyAgY29uc3RydWN0b3IoZmllbGRz
LCBzdXBlcnR5cGVfaWR4KSB7CisgICAgc3VwZXIoZmllbGRzKTsKKyAgICB0aGlzLnN1cGVydHlw
ZSA9IHN1cGVydHlwZV9pZHg7CisgICAgdGhpcy50eXBlX2Zvcm0gPSBrV2FzbVN0cnVjdFN1YnR5
cGVGb3JtOworICB9Cit9CisKK2NsYXNzIFdhc21BcnJheSB7CisgIGNvbnN0cnVjdG9yKHR5cGUs
IG11dGFiaWxpdHkpIHsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIGlmICghbXV0YWJpbGl0
eSkgdGhyb3cgbmV3IEVycm9yKCJJbW11dGFibGUgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIHll
dCIpOworICAgIHRoaXMubXV0YWJpbGl0eSA9IG11dGFiaWxpdHk7CisgICAgdGhpcy50eXBlX2Zv
cm0gPSBrV2FzbUFycmF5VHlwZUZvcm07CisgIH0KK30KKworY2xhc3MgV2FzbUFycmF5U3VidHlw
ZSBleHRlbmRzIFdhc21BcnJheSB7CisgIGNvbnN0cnVjdG9yKHR5cGUsIG11dGFiaWxpdHksIHN1
cGVydHlwZV9pZHgpIHsKKyAgICBzdXBlcih0eXBlLCBtdXRhYmlsaXR5KTsKKyAgICB0aGlzLnN1
cGVydHlwZSA9IHN1cGVydHlwZV9pZHg7CisgICAgdGhpcy50eXBlX2Zvcm0gPSBrV2FzbUFycmF5
U3VidHlwZUZvcm07CisgIH0KK30KK2NsYXNzIFdhc21FbGVtU2VnbWVudCB7CisgIGNvbnN0cnVj
dG9yKHRhYmxlLCBvZmZzZXQsIHR5cGUsIGVsZW1lbnRzLCBpc19kZWNsKSB7CisgICAgdGhpcy50
YWJsZSA9IHRhYmxlOworICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0OworICAgIHRoaXMudHlwZSA9
IHR5cGU7CisgICAgdGhpcy5lbGVtZW50cyA9IGVsZW1lbnRzOworICAgIHRoaXMuaXNfZGVjbCA9
IGlzX2RlY2w7CisgICAgLy8gSW52YXJpYW50IGNoZWNrcy4KKyAgICBpZiAoKHRhYmxlID09PSB1
bmRlZmluZWQpICE9IChvZmZzZXQgPT09IHVuZGVmaW5lZCkpIHsKKyAgICAgIHRocm93IG5ldyBF
cnJvcigiaW52YWxpZCBlbGVtZW50IHNlZ21lbnQiKTsKKyAgICB9CisgICAgZm9yIChsZXQgZWxl
bSBvZiBlbGVtZW50cykgeworICAgICAgaWYgKCgodHlwZW9mIGVsZW0pID09ICdudW1iZXInKSAh
PSAodHlwZSA9PT0gdW5kZWZpbmVkKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImludmFs
aWQgZWxlbWVudCIpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlzX2FjdGl2ZSgpIHsKKyAg
ICByZXR1cm4gdGhpcy50YWJsZSAhPT0gdW5kZWZpbmVkOworICB9CisKKyAgaXNfcGFzc2l2ZSgp
IHsKKyAgICByZXR1cm4gdGhpcy50YWJsZSA9PT0gdW5kZWZpbmVkICYmICF0aGlzLmlzX2RlY2w7
CisgIH0KKworICBpc19kZWNsYXJhdGl2ZSgpIHsKKyAgICByZXR1cm4gdGhpcy50YWJsZSA9PT0g
dW5kZWZpbmVkICYmIHRoaXMuaXNfZGVjbDsKKyAgfQorCisgIGV4cHJlc3Npb25zX2FzX2VsZW1l
bnRzKCkgeworICAgIHJldHVybiB0aGlzLnR5cGUgIT09IHVuZGVmaW5lZDsKKyAgfQorfQorCitj
bGFzcyBXYXNtTW9kdWxlQnVpbGRlciB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMudHlw
ZXMgPSBbXTsKKyAgICB0aGlzLmltcG9ydHMgPSBbXTsKKyAgICB0aGlzLmV4cG9ydHMgPSBbXTsK
KyAgICB0aGlzLmdsb2JhbHMgPSBbXTsKKyAgICB0aGlzLnRhYmxlcyA9IFtdOworICAgIHRoaXMu
dGFncyA9IFtdOworICAgIHRoaXMuZnVuY3Rpb25zID0gW107CisgICAgdGhpcy5jb21waWxhdGlv
bl9oaW50cyA9IFtdOworICAgIHRoaXMuZWxlbWVudF9zZWdtZW50cyA9IFtdOworICAgIHRoaXMu
ZGF0YV9zZWdtZW50cyA9IFtdOworICAgIHRoaXMuZXhwbGljaXQgPSBbXTsKKyAgICB0aGlzLm51
bV9pbXBvcnRlZF9mdW5jcyA9IDA7CisgICAgdGhpcy5udW1faW1wb3J0ZWRfZ2xvYmFscyA9IDA7
CisgICAgdGhpcy5udW1faW1wb3J0ZWRfdGFibGVzID0gMDsKKyAgICB0aGlzLm51bV9pbXBvcnRl
ZF90YWdzID0gMDsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZFN0YXJ0KHN0YXJ0X2lu
ZGV4KSB7CisgICAgdGhpcy5zdGFydF9pbmRleCA9IHN0YXJ0X2luZGV4OworICAgIHJldHVybiB0
aGlzOworICB9CisKKyAgYWRkTWVtb3J5KG1pbiwgbWF4LCBleHBvcnRlZCwgc2hhcmVkKSB7Cisg
ICAgdGhpcy5tZW1vcnkgPSB7CisgICAgICBtaW46IG1pbiwKKyAgICAgIG1heDogbWF4LAorICAg
ICAgZXhwb3J0ZWQ6IGV4cG9ydGVkLAorICAgICAgc2hhcmVkOiBzaGFyZWQgfHwgZmFsc2UsCisg
ICAgICBpc19tZW1vcnk2NDogZmFsc2UKKyAgICB9OworICAgIHJldHVybiB0aGlzOworICB9CisK
KyAgYWRkTWVtb3J5NjQobWluLCBtYXgsIGV4cG9ydGVkKSB7CisgICAgdGhpcy5tZW1vcnkgPSB7
CisgICAgICBtaW46IG1pbiwKKyAgICAgIG1heDogbWF4LAorICAgICAgZXhwb3J0ZWQ6IGV4cG9y
dGVkLAorICAgICAgc2hhcmVkOiBmYWxzZSwKKyAgICAgIGlzX21lbW9yeTY0OiB0cnVlCisgICAg
fTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZEV4cGxpY2l0U2VjdGlvbihieXRlcykg
eworICAgIHRoaXMuZXhwbGljaXQucHVzaChieXRlcyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0K
KworICBzdHJpbmdUb0J5dGVzKG5hbWUpIHsKKyAgICB2YXIgcmVzdWx0ID0gbmV3IEJpbmFyeSgp
OworICAgIHJlc3VsdC5lbWl0X3UzMnYobmFtZS5sZW5ndGgpOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbmFtZS5sZW5ndGg7IGkrKykgeworICAgICAgcmVzdWx0LmVtaXRfdTgobmFtZS5jaGFy
Q29kZUF0KGkpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC50cnVuY19idWZmZXIoKQorICB9
CisKKyAgY3JlYXRlQ3VzdG9tU2VjdGlvbihuYW1lLCBieXRlcykgeworICAgIG5hbWUgPSB0aGlz
LnN0cmluZ1RvQnl0ZXMobmFtZSk7CisgICAgdmFyIHNlY3Rpb24gPSBuZXcgQmluYXJ5KCk7Cisg
ICAgc2VjdGlvbi5lbWl0X3U4KDApOworICAgIHNlY3Rpb24uZW1pdF91MzJ2KG5hbWUubGVuZ3Ro
ICsgYnl0ZXMubGVuZ3RoKTsKKyAgICBzZWN0aW9uLmVtaXRfYnl0ZXMobmFtZSk7CisgICAgc2Vj
dGlvbi5lbWl0X2J5dGVzKGJ5dGVzKTsKKyAgICByZXR1cm4gc2VjdGlvbi50cnVuY19idWZmZXIo
KTsKKyAgfQorCisgIGFkZEN1c3RvbVNlY3Rpb24obmFtZSwgYnl0ZXMpIHsKKyAgICB0aGlzLmV4
cGxpY2l0LnB1c2godGhpcy5jcmVhdGVDdXN0b21TZWN0aW9uKG5hbWUsIGJ5dGVzKSk7CisgIH0K
KworICBhZGRUeXBlKHR5cGUpIHsKKyAgICB0aGlzLnR5cGVzLnB1c2godHlwZSk7CisgICAgdmFy
IHBsID0gdHlwZS5wYXJhbXMubGVuZ3RoOyAgIC8vIHNob3VsZCBoYXZlIHBhcmFtcworICAgIHZh
ciBybCA9IHR5cGUucmVzdWx0cy5sZW5ndGg7ICAvLyBzaG91bGQgaGF2ZSByZXN1bHRzCisgICAg
cmV0dXJuIHRoaXMudHlwZXMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGFkZFN0cnVjdChmaWVsZHMp
IHsKKyAgICB0aGlzLnR5cGVzLnB1c2gobmV3IFdhc21TdHJ1Y3QoZmllbGRzKSk7CisgICAgcmV0
dXJuIHRoaXMudHlwZXMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGtHZW5lcmljU3VwZXJUeXBlID0g
MHhGRkZGRkZGRTsKKyAgYWRkU3RydWN0U3VidHlwZShmaWVsZHMsIHN1cGVydHlwZV9pZHggPSB0
aGlzLmtHZW5lcmljU3VwZXJUeXBlKSB7CisgICAgdGhpcy50eXBlcy5wdXNoKG5ldyBXYXNtU3Ry
dWN0U3VidHlwZShmaWVsZHMsIHN1cGVydHlwZV9pZHgpKTsKKyAgICByZXR1cm4gdGhpcy50eXBl
cy5sZW5ndGggLSAxOworICB9CisKKyAgYWRkQXJyYXkodHlwZSwgbXV0YWJpbGl0eSkgeworICAg
IHRoaXMudHlwZXMucHVzaChuZXcgV2FzbUFycmF5KHR5cGUsIG11dGFiaWxpdHkpKTsKKyAgICBy
ZXR1cm4gdGhpcy50eXBlcy5sZW5ndGggLSAxOworICB9CisKKyAgYWRkQXJyYXlTdWJ0eXBlKHR5
cGUsIG11dGFiaWxpdHksIHN1cGVydHlwZV9pZHggPSB0aGlzLmtHZW5lcmljU3VwZXJUeXBlKSB7
CisgICAgdGhpcy50eXBlcy5wdXNoKG5ldyBXYXNtQXJyYXlTdWJ0eXBlKHR5cGUsIG11dGFiaWxp
dHksIHN1cGVydHlwZV9pZHgpKTsKKyAgICByZXR1cm4gdGhpcy50eXBlcy5sZW5ndGggLSAxOwor
ICB9CisKKyAgYWRkR2xvYmFsKHR5cGUsIG11dGFibGUsIGluaXQpIHsKKyAgICBpZiAoaW5pdCA9
PT0gdW5kZWZpbmVkKSBpbml0ID0gV2FzbUluaXRFeHByLmRlZmF1bHRGb3IodHlwZSk7CisgICAg
bGV0IGdsb2IgPSBuZXcgV2FzbUdsb2JhbEJ1aWxkZXIodGhpcywgdHlwZSwgbXV0YWJsZSwgaW5p
dCk7CisgICAgZ2xvYi5pbmRleCA9IHRoaXMuZ2xvYmFscy5sZW5ndGggKyB0aGlzLm51bV9pbXBv
cnRlZF9nbG9iYWxzOworICAgIHRoaXMuZ2xvYmFscy5wdXNoKGdsb2IpOworICAgIHJldHVybiBn
bG9iOworICB9CisKKyAgYWRkVGFibGUoCisgICAgICB0eXBlLCBpbml0aWFsX3NpemUsIG1heF9z
aXplID0gdW5kZWZpbmVkLCBpbml0X2V4cHIgPSB1bmRlZmluZWQpIHsKKyAgICBpZiAodHlwZSA9
PSBrV2FzbUkzMiB8fCB0eXBlID09IGtXYXNtSTY0IHx8IHR5cGUgPT0ga1dhc21GMzIgfHwKKyAg
ICAgICAgdHlwZSA9PSBrV2FzbUY2NCB8fCB0eXBlID09IGtXYXNtUzEyOCB8fCB0eXBlID09IGtX
YXNtVm9pZCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdUYWJsZXMgbXVzdCBiZSBvZiBhIHJl
ZmVyZW5jZSB0eXBlJyk7CisgICAgfQorICAgIGxldCB0YWJsZSA9IG5ldyBXYXNtVGFibGVCdWls
ZGVyKAorICAgICAgICB0aGlzLCB0eXBlLCBpbml0aWFsX3NpemUsIG1heF9zaXplLCBpbml0X2V4
cHIpOworICAgIHRhYmxlLmluZGV4ID0gdGhpcy50YWJsZXMubGVuZ3RoICsgdGhpcy5udW1faW1w
b3J0ZWRfdGFibGVzOworICAgIHRoaXMudGFibGVzLnB1c2godGFibGUpOworICAgIHJldHVybiB0
YWJsZTsKKyAgfQorCisgIGFkZFRhZyh0eXBlKSB7CisgICAgbGV0IHR5cGVfaW5kZXggPSAodHlw
ZW9mIHR5cGUpID09ICdudW1iZXInID8gdHlwZSA6IHRoaXMuYWRkVHlwZSh0eXBlKTsKKyAgICBs
ZXQgdGFnX2luZGV4ID0gdGhpcy50YWdzLmxlbmd0aCArIHRoaXMubnVtX2ltcG9ydGVkX3RhZ3M7
CisgICAgdGhpcy50YWdzLnB1c2godHlwZV9pbmRleCk7CisgICAgcmV0dXJuIHRhZ19pbmRleDsK
KyAgfQorCisgIGFkZEZ1bmN0aW9uKG5hbWUsIHR5cGUsIGFyZ19uYW1lcykgeworICAgIGFyZ19u
YW1lcyA9IGFyZ19uYW1lcyB8fCBbXTsKKyAgICBsZXQgdHlwZV9pbmRleCA9ICh0eXBlb2YgdHlw
ZSkgPT0gJ251bWJlcicgPyB0eXBlIDogdGhpcy5hZGRUeXBlKHR5cGUpOworICAgIGxldCBudW1f
YXJncyA9IHRoaXMudHlwZXNbdHlwZV9pbmRleF0ucGFyYW1zLmxlbmd0aDsKKyAgICBpZiAobnVt
X2FyZ3MgPCBhcmdfbmFtZXMubGVuZ3RoKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCd0b28gbWFu
eSBhcmcgbmFtZXMgcHJvdmlkZWQnKTsKKyAgICBpZiAobnVtX2FyZ3MgPiBhcmdfbmFtZXMubGVu
Z3RoKQorICAgICAgYXJnX25hbWVzLnB1c2gobnVtX2FyZ3MgLSBhcmdfbmFtZXMubGVuZ3RoKTsK
KyAgICBsZXQgZnVuYyA9IG5ldyBXYXNtRnVuY3Rpb25CdWlsZGVyKHRoaXMsIG5hbWUsIHR5cGVf
aW5kZXgsIGFyZ19uYW1lcyk7CisgICAgZnVuYy5pbmRleCA9IHRoaXMuZnVuY3Rpb25zLmxlbmd0
aCArIHRoaXMubnVtX2ltcG9ydGVkX2Z1bmNzOworICAgIHRoaXMuZnVuY3Rpb25zLnB1c2goZnVu
Yyk7CisgICAgcmV0dXJuIGZ1bmM7CisgIH0KKworICBhZGRJbXBvcnQobW9kdWxlLCBuYW1lLCB0
eXBlKSB7CisgICAgaWYgKHRoaXMuZnVuY3Rpb25zLmxlbmd0aCAhPSAwKSB7CisgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ0ltcG9ydGVkIGZ1bmN0aW9ucyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBs
b2NhbCBvbmVzJyk7CisgICAgfQorICAgIGxldCB0eXBlX2luZGV4ID0gKHR5cGVvZiB0eXBlKSA9
PSAnbnVtYmVyJyA/IHR5cGUgOiB0aGlzLmFkZFR5cGUodHlwZSk7CisgICAgdGhpcy5pbXBvcnRz
LnB1c2goeworICAgICAgbW9kdWxlOiBtb2R1bGUsCisgICAgICBuYW1lOiBuYW1lLAorICAgICAg
a2luZDoga0V4dGVybmFsRnVuY3Rpb24sCisgICAgICB0eXBlX2luZGV4OiB0eXBlX2luZGV4Cisg
ICAgfSk7CisgICAgcmV0dXJuIHRoaXMubnVtX2ltcG9ydGVkX2Z1bmNzKys7CisgIH0KKworICBh
ZGRJbXBvcnRlZEdsb2JhbChtb2R1bGUsIG5hbWUsIHR5cGUsIG11dGFibGUgPSBmYWxzZSkgewor
ICAgIGlmICh0aGlzLmdsb2JhbHMubGVuZ3RoICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJv
cignSW1wb3J0ZWQgZ2xvYmFscyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2NhbCBvbmVzJyk7
CisgICAgfQorICAgIGxldCBvID0geworICAgICAgbW9kdWxlOiBtb2R1bGUsCisgICAgICBuYW1l
OiBuYW1lLAorICAgICAga2luZDoga0V4dGVybmFsR2xvYmFsLAorICAgICAgdHlwZTogdHlwZSwK
KyAgICAgIG11dGFibGU6IG11dGFibGUKKyAgICB9OworICAgIHRoaXMuaW1wb3J0cy5wdXNoKG8p
OworICAgIHJldHVybiB0aGlzLm51bV9pbXBvcnRlZF9nbG9iYWxzKys7CisgIH0KKworICBhZGRJ
bXBvcnRlZE1lbW9yeShtb2R1bGUsIG5hbWUsIGluaXRpYWwgPSAwLCBtYXhpbXVtLCBzaGFyZWQp
IHsKKyAgICBsZXQgbyA9IHsKKyAgICAgIG1vZHVsZTogbW9kdWxlLAorICAgICAgbmFtZTogbmFt
ZSwKKyAgICAgIGtpbmQ6IGtFeHRlcm5hbE1lbW9yeSwKKyAgICAgIGluaXRpYWw6IGluaXRpYWws
CisgICAgICBtYXhpbXVtOiBtYXhpbXVtLAorICAgICAgc2hhcmVkOiBzaGFyZWQKKyAgICB9Owor
ICAgIHRoaXMuaW1wb3J0cy5wdXNoKG8pOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRk
SW1wb3J0ZWRUYWJsZShtb2R1bGUsIG5hbWUsIGluaXRpYWwsIG1heGltdW0sIHR5cGUpIHsKKyAg
ICBpZiAodGhpcy50YWJsZXMubGVuZ3RoICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcign
SW1wb3J0ZWQgdGFibGVzIG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGxvY2FsIG9uZXMnKTsKKyAg
ICB9CisgICAgbGV0IG8gPSB7CisgICAgICBtb2R1bGU6IG1vZHVsZSwKKyAgICAgIG5hbWU6IG5h
bWUsCisgICAgICBraW5kOiBrRXh0ZXJuYWxUYWJsZSwKKyAgICAgIGluaXRpYWw6IGluaXRpYWws
CisgICAgICBtYXhpbXVtOiBtYXhpbXVtLAorICAgICAgdHlwZTogdHlwZSB8fCBrV2FzbUZ1bmNS
ZWYKKyAgICB9OworICAgIHRoaXMuaW1wb3J0cy5wdXNoKG8pOworICAgIHJldHVybiB0aGlzLm51
bV9pbXBvcnRlZF90YWJsZXMrKzsKKyAgfQorCisgIGFkZEltcG9ydGVkVGFnKG1vZHVsZSwgbmFt
ZSwgdHlwZSkgeworICAgIGlmICh0aGlzLnRhZ3MubGVuZ3RoICE9IDApIHsKKyAgICAgIHRocm93
IG5ldyBFcnJvcignSW1wb3J0ZWQgdGFncyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2NhbCBv
bmVzJyk7CisgICAgfQorICAgIGxldCB0eXBlX2luZGV4ID0gKHR5cGVvZiB0eXBlKSA9PSAnbnVt
YmVyJyA/IHR5cGUgOiB0aGlzLmFkZFR5cGUodHlwZSk7CisgICAgbGV0IG8gPSB7CisgICAgICBt
b2R1bGU6IG1vZHVsZSwKKyAgICAgIG5hbWU6IG5hbWUsCisgICAgICBraW5kOiBrRXh0ZXJuYWxU
YWcsCisgICAgICB0eXBlX2luZGV4OiB0eXBlX2luZGV4CisgICAgfTsKKyAgICB0aGlzLmltcG9y
dHMucHVzaChvKTsKKyAgICByZXR1cm4gdGhpcy5udW1faW1wb3J0ZWRfdGFncysrOworICB9CisK
KyAgYWRkRXhwb3J0KG5hbWUsIGluZGV4KSB7CisgICAgdGhpcy5leHBvcnRzLnB1c2goe25hbWU6
IG5hbWUsIGtpbmQ6IGtFeHRlcm5hbEZ1bmN0aW9uLCBpbmRleDogaW5kZXh9KTsKKyAgICByZXR1
cm4gdGhpczsKKyAgfQorCisgIGFkZEV4cG9ydE9mS2luZChuYW1lLCBraW5kLCBpbmRleCkgewor
ICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkICYmIGtpbmQgIT0ga0V4dGVybmFsVGFibGUgJiYK
KyAgICAgICAga2luZCAhPSBrRXh0ZXJuYWxNZW1vcnkpIHsKKyAgICAgIHRocm93IG5ldyBFcnJv
cigKKyAgICAgICAgICAnSW5kZXggZm9yIGV4cG9ydHMgb3RoZXIgdGhhbiB0YWJsZXMvbWVtb3Jp
ZXMgbXVzdCBiZSBwcm92aWRlZCcpOworICAgIH0KKyAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5l
ZCAmJiAodHlwZW9mIGluZGV4KSAhPSAnbnVtYmVyJykgeworICAgICAgdGhyb3cgbmV3IEVycm9y
KCdJbmRleCBmb3IgZXhwb3J0cyBtdXN0IGJlIGEgbnVtYmVyJykKKyAgICB9CisgICAgdGhpcy5l
eHBvcnRzLnB1c2goe25hbWU6IG5hbWUsIGtpbmQ6IGtpbmQsIGluZGV4OiBpbmRleH0pOworICAg
IHJldHVybiB0aGlzOworICB9CisKKyAgc2V0Q29tcGlsYXRpb25IaW50KHN0cmF0ZWd5LCBiYXNl
bGluZVRpZXIsIHRvcFRpZXIsIGluZGV4KSB7CisgICAgdGhpcy5jb21waWxhdGlvbl9oaW50c1tp
bmRleF0gPSB7CisgICAgICBzdHJhdGVneTogc3RyYXRlZ3ksCisgICAgICBiYXNlbGluZVRpZXI6
IGJhc2VsaW5lVGllciwKKyAgICAgIHRvcFRpZXI6IHRvcFRpZXIKKyAgICB9OworICAgIHJldHVy
biB0aGlzOworICB9CisKKyAgYWRkRGF0YVNlZ21lbnQoYWRkciwgZGF0YSwgaXNfZ2xvYmFsID0g
ZmFsc2UpIHsKKyAgICB0aGlzLmRhdGFfc2VnbWVudHMucHVzaCgKKyAgICAgICAge2FkZHI6IGFk
ZHIsIGRhdGE6IGRhdGEsIGlzX2dsb2JhbDogaXNfZ2xvYmFsLCBpc19hY3RpdmU6IHRydWV9KTsK
KyAgICByZXR1cm4gdGhpcy5kYXRhX3NlZ21lbnRzLmxlbmd0aCAtIDE7CisgIH0KKworICBhZGRQ
YXNzaXZlRGF0YVNlZ21lbnQoZGF0YSkgeworICAgIHRoaXMuZGF0YV9zZWdtZW50cy5wdXNoKHtk
YXRhOiBkYXRhLCBpc19hY3RpdmU6IGZhbHNlfSk7CisgICAgcmV0dXJuIHRoaXMuZGF0YV9zZWdt
ZW50cy5sZW5ndGggLSAxOworICB9CisKKyAgZXhwb3J0TWVtb3J5QXMobmFtZSkgeworICAgIHRo
aXMuZXhwb3J0cy5wdXNoKHtuYW1lOiBuYW1lLCBraW5kOiBrRXh0ZXJuYWxNZW1vcnksIGluZGV4
OiAwfSk7CisgIH0KKworICAvLyB7b2Zmc2V0fSBpcyBhbiBpbml0aWFsaXplciBleHByZXNzaW9u
LgorICAvLyBJZiB7dHlwZX0gaXMgdW5kZWZpbmVkLCB0aGVuIHtlbGVtZW50c30gYXJlIGZ1bmN0
aW9uIGluZGljZXMuIE90aGVyd2lzZSwKKyAgLy8gdGhleSBhcmUgaW5pdGlhbGl6ZXIgZXhwcmVz
c2lvbnMuCisgIGFkZEFjdGl2ZUVsZW1lbnRTZWdtZW50KHRhYmxlLCBvZmZzZXQsIGVsZW1lbnRz
LCB0eXBlKSB7CisgICAgdGhpcy5lbGVtZW50X3NlZ21lbnRzLnB1c2goCisgICAgICAgIG5ldyBX
YXNtRWxlbVNlZ21lbnQodGFibGUsIG9mZnNldCwgdHlwZSwgZWxlbWVudHMsIGZhbHNlKSk7Cisg
ICAgcmV0dXJuIHRoaXMuZWxlbWVudF9zZWdtZW50cy5sZW5ndGggLSAxOworICB9CisKKyAgLy8g
SWYge3R5cGV9IGlzIHVuZGVmaW5lZCwgdGhlbiB7ZWxlbWVudHN9IGFyZSBmdW5jdGlvbiBpbmRp
Y2VzLiBPdGhlcndpc2UsCisgIC8vIHRoZXkgYXJlIGluaXRpYWxpemVyIGV4cHJlc3Npb25zLgor
ICBhZGRQYXNzaXZlRWxlbWVudFNlZ21lbnQoZWxlbWVudHMsIHR5cGUpIHsKKyAgICB0aGlzLmVs
ZW1lbnRfc2VnbWVudHMucHVzaCgKKyAgICAgIG5ldyBXYXNtRWxlbVNlZ21lbnQodW5kZWZpbmVk
LCB1bmRlZmluZWQsIHR5cGUsIGVsZW1lbnRzLCBmYWxzZSkpOworICAgIHJldHVybiB0aGlzLmVs
ZW1lbnRfc2VnbWVudHMubGVuZ3RoIC0gMTsKKyAgfQorCisgIC8vIElmIHt0eXBlfSBpcyB1bmRl
ZmluZWQsIHRoZW4ge2VsZW1lbnRzfSBhcmUgZnVuY3Rpb24gaW5kaWNlcy4gT3RoZXJ3aXNlLAor
ICAvLyB0aGV5IGFyZSBpbml0aWFsaXplciBleHByZXNzaW9ucy4KKyAgYWRkRGVjbGFyYXRpdmVF
bGVtZW50U2VnbWVudChlbGVtZW50cywgdHlwZSkgeworICAgIHRoaXMuZWxlbWVudF9zZWdtZW50
cy5wdXNoKAorICAgICAgbmV3IFdhc21FbGVtU2VnbWVudCh1bmRlZmluZWQsIHVuZGVmaW5lZCwg
dHlwZSwgZWxlbWVudHMsIHRydWUpKTsKKyAgICByZXR1cm4gdGhpcy5lbGVtZW50X3NlZ21lbnRz
Lmxlbmd0aCAtIDE7CisgIH0KKworICBhcHBlbmRUb1RhYmxlKGFycmF5KSB7CisgICAgZm9yIChs
ZXQgbiBvZiBhcnJheSkgeworICAgICAgaWYgKHR5cGVvZiBuICE9ICdudW1iZXInKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdGFibGUgKGVudHJpZXMgaGF2ZSB0byBiZSBudW1i
ZXJzKTogJyArIGFycmF5KTsKKyAgICB9CisgICAgaWYgKHRoaXMudGFibGVzLmxlbmd0aCA9PSAw
KSB7CisgICAgICB0aGlzLmFkZFRhYmxlKGtXYXNtQW55RnVuYywgMCk7CisgICAgfQorICAgIC8v
IEFkanVzdCB0aGUgdGFibGUgdG8gdGhlIGNvcnJlY3Qgc2l6ZS4KKyAgICBsZXQgdGFibGUgPSB0
aGlzLnRhYmxlc1swXTsKKyAgICBjb25zdCBiYXNlID0gdGFibGUuaW5pdGlhbF9zaXplOworICAg
IGNvbnN0IHRhYmxlX3NpemUgPSBiYXNlICsgYXJyYXkubGVuZ3RoOworICAgIHRhYmxlLmluaXRp
YWxfc2l6ZSA9IHRhYmxlX3NpemU7CisgICAgaWYgKHRhYmxlLmhhc19tYXggJiYgdGFibGVfc2l6
ZSA+IHRhYmxlLm1heF9zaXplKSB7CisgICAgICB0YWJsZS5tYXhfc2l6ZSA9IHRhYmxlX3NpemU7
CisgICAgfQorICAgIHJldHVybiB0aGlzLmFkZEFjdGl2ZUVsZW1lbnRTZWdtZW50KDAsIFdhc21J
bml0RXhwci5JMzJDb25zdChiYXNlKSwgYXJyYXkpOworICB9CisKKyAgc2V0VGFibGVCb3VuZHMo
bWluLCBtYXggPSB1bmRlZmluZWQpIHsKKyAgICBpZiAodGhpcy50YWJsZXMubGVuZ3RoICE9IDAp
IHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHRhYmxlIGJvdW5kcyBvZiB0YWJsZSBcJzBc
JyBoYXZlIGFscmVhZHkgYmVlbiBzZXQuJyk7CisgICAgfQorICAgIHRoaXMuYWRkVGFibGUoa1dh
c21BbnlGdW5jLCBtaW4sIG1heCk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBzZXROYW1l
KG5hbWUpIHsKKyAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIHJldHVybiB0aGlzOworICB9CisK
KyAgdG9CdWZmZXIoZGVidWcgPSBmYWxzZSkgeworICAgIGxldCBiaW5hcnkgPSBuZXcgQmluYXJ5
OworICAgIGxldCB3YXNtID0gdGhpczsKKworICAgIC8vIEFkZCBoZWFkZXIKKyAgICBiaW5hcnku
ZW1pdF9oZWFkZXIoKTsKKworICAgIC8vIEFkZCB0eXBlIHNlY3Rpb24KKyAgICBpZiAod2FzbS50
eXBlcy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyB0eXBl
cyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1R5cGVT
ZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20u
dHlwZXMubGVuZ3RoKTsKKyAgICAgICAgZm9yIChsZXQgdHlwZSBvZiB3YXNtLnR5cGVzKSB7Cisg
ICAgICAgICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBXYXNtU3RydWN0KSB7CisgICAgICAgICAgICBz
ZWN0aW9uLmVtaXRfdTgodHlwZS50eXBlX2Zvcm0pOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0
X3UzMnYodHlwZS5maWVsZHMubGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9m
IHR5cGUuZmllbGRzKSB7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKGZpZWxkLnR5
cGUpOworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoZmllbGQubXV0YWJpbGl0eSA/IDEg
OiAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlIGluc3RhbmNlb2YgV2Fz
bVN0cnVjdFN1YnR5cGUpIHsKKyAgICAgICAgICAgICAgaWYgKHR5cGUuc3VwZXJ0eXBlID09PSB0
aGlzLmtHZW5lcmljU3VwZXJUeXBlKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4
KGtEYXRhUmVmQ29kZSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
c2VjdGlvbi5lbWl0X2hlYXBfdHlwZSh0eXBlLnN1cGVydHlwZSk7CisgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBXYXNt
QXJyYXkpIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCh0eXBlLnR5cGVfZm9ybSk7Cisg
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZSh0eXBlLnR5cGUpOworICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3U4KHR5cGUubXV0YWJpbGl0eSA/IDEgOiAwKTsKKyAgICAgICAgICAgIGlmICh0
eXBlIGluc3RhbmNlb2YgV2FzbUFycmF5U3VidHlwZSkgeworICAgICAgICAgICAgICBpZiAodHlw
ZS5zdXBlcnR5cGUgPT09IHRoaXMua0dlbmVyaWNTdXBlclR5cGUpIHsKKyAgICAgICAgICAgICAg
ICBzZWN0aW9uLmVtaXRfdTgoa0RhdGFSZWZDb2RlKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfaGVhcF90eXBlKHR5cGUuc3VwZXJ0eXBlKTsK
KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa1dhc21GdW5jdGlvblR5cGVGb3JtKTsKKyAgICAgICAg
ICAgIHNlY3Rpb24uZW1pdF91MzJ2KHR5cGUucGFyYW1zLmxlbmd0aCk7CisgICAgICAgICAgICBm
b3IgKGxldCBwYXJhbSBvZiB0eXBlLnBhcmFtcykgeworICAgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfdHlwZShwYXJhbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRf
dTMydih0eXBlLnJlc3VsdHMubGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAobGV0IHJlc3VsdCBv
ZiB0eXBlLnJlc3VsdHMpIHsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUocmVzdWx0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pOworICAg
IH0KKworICAgIC8vIEFkZCBpbXBvcnRzIHNlY3Rpb24KKyAgICBpZiAod2FzbS5pbXBvcnRzLmxl
bmd0aCA+IDApIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGltcG9ydHMgQCAn
ICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtJbXBvcnRTZWN0
aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20uaW1w
b3J0cy5sZW5ndGgpOworICAgICAgICBmb3IgKGxldCBpbXAgb2Ygd2FzbS5pbXBvcnRzKSB7Cisg
ICAgICAgICAgc2VjdGlvbi5lbWl0X3N0cmluZyhpbXAubW9kdWxlKTsKKyAgICAgICAgICBzZWN0
aW9uLmVtaXRfc3RyaW5nKGltcC5uYW1lIHx8ICcnKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRf
dTgoaW1wLmtpbmQpOworICAgICAgICAgIGlmIChpbXAua2luZCA9PSBrRXh0ZXJuYWxGdW5jdGlv
bikgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoaW1wLnR5cGVfaW5kZXgpOworICAg
ICAgICAgIH0gZWxzZSBpZiAoaW1wLmtpbmQgPT0ga0V4dGVybmFsR2xvYmFsKSB7CisgICAgICAg
ICAgICBzZWN0aW9uLmVtaXRfdHlwZShpbXAudHlwZSk7CisgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfdTgoaW1wLm11dGFibGUpOworICAgICAgICAgIH0gZWxzZSBpZiAoaW1wLmtpbmQgPT0ga0V4
dGVybmFsTWVtb3J5KSB7CisgICAgICAgICAgICB2YXIgaGFzX21heCA9ICh0eXBlb2YgaW1wLm1h
eGltdW0pICE9ICd1bmRlZmluZWQnOworICAgICAgICAgICAgdmFyIGlzX3NoYXJlZCA9ICh0eXBl
b2YgaW1wLnNoYXJlZCkgIT0gJ3VuZGVmaW5lZCc7CisgICAgICAgICAgICBpZiAoaXNfc2hhcmVk
KSB7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChoYXNfbWF4ID8gMyA6IDIpOyAgLy8g
ZmxhZ3MKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91
OChoYXNfbWF4ID8gMSA6IDApOyAgLy8gZmxhZ3MKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHNlY3Rpb24uZW1pdF91MzJ2KGltcC5pbml0aWFsKTsgICAgICAgICAgICAgICAvLyBpbml0aWFs
CisgICAgICAgICAgICBpZiAoaGFzX21heCkgc2VjdGlvbi5lbWl0X3UzMnYoaW1wLm1heGltdW0p
OyAgLy8gbWF4aW11bQorICAgICAgICAgIH0gZWxzZSBpZiAoaW1wLmtpbmQgPT0ga0V4dGVybmFs
VGFibGUpIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKGltcC50eXBlKTsKKyAgICAg
ICAgICAgIHZhciBoYXNfbWF4ID0gKHR5cGVvZiBpbXAubWF4aW11bSkgIT0gJ3VuZGVmaW5lZCc7
CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoaGFzX21heCA/IDEgOiAwKTsgICAgICAgICAg
ICAgLy8gZmxhZ3MKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGltcC5pbml0aWFsKTsg
ICAgICAgICAgICAgICAvLyBpbml0aWFsCisgICAgICAgICAgICBpZiAoaGFzX21heCkgc2VjdGlv
bi5lbWl0X3UzMnYoaW1wLm1heGltdW0pOyAgLy8gbWF4aW11bQorICAgICAgICAgIH0gZWxzZSBp
ZiAoaW1wLmtpbmQgPT0ga0V4dGVybmFsVGFnKSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRf
dTMydihrRXhjZXB0aW9uQXR0cmlidXRlKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2
KGltcC50eXBlX2luZGV4KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCd1bmtub3duL3Vuc3VwcG9ydGVkIGltcG9ydCBraW5kICcgKyBpbXAua2luZCk7
CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQg
ZnVuY3Rpb25zIGRlY2xhcmF0aW9ucworICAgIGlmICh3YXNtLmZ1bmN0aW9ucy5sZW5ndGggPiAw
KSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBmdW5jdGlvbiBkZWNscyBAICcg
KyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa0Z1bmN0aW9uU2Vj
dGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLmZ1
bmN0aW9ucy5sZW5ndGgpOworICAgICAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25z
KSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoZnVuYy50eXBlX2luZGV4KTsKKyAgICAg
ICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIHRhYmxlIHNlY3Rpb24KKyAgICBp
ZiAod2FzbS50YWJsZXMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1p
dHRpbmcgdGFibGVzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2Vj
dGlvbihrVGFibGVTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1p
dF91MzJ2KHdhc20udGFibGVzLmxlbmd0aCk7CisgICAgICAgIGZvciAobGV0IHRhYmxlIG9mIHdh
c20udGFibGVzKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUodGFibGUudHlwZSk7Cisg
ICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KHRhYmxlLmhhc19tYXgpOworICAgICAgICAgIHNlY3Rp
b24uZW1pdF91MzJ2KHRhYmxlLmluaXRpYWxfc2l6ZSk7CisgICAgICAgICAgaWYgKHRhYmxlLmhh
c19tYXgpIHNlY3Rpb24uZW1pdF91MzJ2KHRhYmxlLm1heF9zaXplKTsKKyAgICAgICAgICBpZiAo
dGFibGUuaGFzX2luaXQpIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIodGFi
bGUuaW5pdF9leHByKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0K
KworICAgIC8vIEFkZCBtZW1vcnkgc2VjdGlvbgorICAgIGlmICh3YXNtLm1lbW9yeSAhPT0gdW5k
ZWZpbmVkKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBtZW1vcnkgQCAnICsg
YmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtNZW1vcnlTZWN0aW9u
Q29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91OCgxKTsgIC8vIG9uZSBt
ZW1vcnkgZW50cnkKKyAgICAgICAgY29uc3QgaGFzX21heCA9IHdhc20ubWVtb3J5Lm1heCAhPT0g
dW5kZWZpbmVkOworICAgICAgICBpZiAod2FzbS5tZW1vcnkuaXNfbWVtb3J5NjQpIHsKKyAgICAg
ICAgICBpZiAod2FzbS5tZW1vcnkuc2hhcmVkKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoJ3NoYXJpbmcgbWVtb3J5NjQgaXMgbm90IHN1cHBvcnRlZCAoeWV0KScpOworICAgICAgICAg
IH0KKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoCisgICAgICAgICAgICAgIGhhc19tYXggPyBr
TGltaXRzTWVtb3J5NjRXaXRoTWF4aW11bSA6IGtMaW1pdHNNZW1vcnk2NE5vTWF4aW11bSk7Cisg
ICAgICAgICAgc2VjdGlvbi5lbWl0X3U2NHYod2FzbS5tZW1vcnkubWluKTsKKyAgICAgICAgICBp
ZiAoaGFzX21heCkgc2VjdGlvbi5lbWl0X3U2NHYod2FzbS5tZW1vcnkubWF4KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoCisgICAgICAgICAgICAgIHdhc20u
bWVtb3J5LnNoYXJlZCA/CisgICAgICAgICAgICAgICAgICAoaGFzX21heCA/IGtMaW1pdHNTaGFy
ZWRXaXRoTWF4aW11bSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMaW1pdHNTaGFy
ZWROb01heGltdW0pIDoKKyAgICAgICAgICAgICAgICAgIChoYXNfbWF4ID8ga0xpbWl0c1dpdGhN
YXhpbXVtIDoga0xpbWl0c05vTWF4aW11bSkpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2
KHdhc20ubWVtb3J5Lm1pbik7CisgICAgICAgICAgaWYgKGhhc19tYXgpIHNlY3Rpb24uZW1pdF91
MzJ2KHdhc20ubWVtb3J5Lm1heCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAg
IC8vIEFkZCB0YWcgc2VjdGlvbi4KKyAgICBpZiAod2FzbS50YWdzLmxlbmd0aCA+IDApIHsKKyAg
ICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIHRhZ3MgQCAnICsgYmluYXJ5Lmxlbmd0aCk7
CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtUYWdTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7
CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20udGFncy5sZW5ndGgpOworICAgICAgICBm
b3IgKGxldCB0eXBlX2luZGV4IG9mIHdhc20udGFncykgeworICAgICAgICAgIHNlY3Rpb24uZW1p
dF91MzJ2KGtFeGNlcHRpb25BdHRyaWJ1dGUpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2
KHR5cGVfaW5kZXgpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQg
Z2xvYmFsIHNlY3Rpb24uCisgICAgaWYgKHdhc20uZ2xvYmFscy5sZW5ndGggPiAwKSB7CisgICAg
ICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBnbG9iYWxzIEAgJyArIGJpbmFyeS5sZW5ndGgp
OworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrR2xvYmFsU2VjdGlvbkNvZGUsIHNlY3Rpb24g
PT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLmdsb2JhbHMubGVuZ3RoKTsKKyAg
ICAgICAgZm9yIChsZXQgZ2xvYmFsIG9mIHdhc20uZ2xvYmFscykgeworICAgICAgICAgIHNlY3Rp
b24uZW1pdF90eXBlKGdsb2JhbC50eXBlKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoZ2xv
YmFsLm11dGFibGUpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIoZ2xvYmFsLmlu
aXQpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgZXhwb3J0IHRh
YmxlLgorICAgIHZhciBtZW1fZXhwb3J0ID0gKHdhc20ubWVtb3J5ICE9PSB1bmRlZmluZWQgJiYg
d2FzbS5tZW1vcnkuZXhwb3J0ZWQpOworICAgIHZhciBleHBvcnRzX2NvdW50ID0gd2FzbS5leHBv
cnRzLmxlbmd0aCArIChtZW1fZXhwb3J0ID8gMSA6IDApOworICAgIGlmIChleHBvcnRzX2NvdW50
ID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgZXhwb3J0cyBAICcgKyBi
aW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa0V4cG9ydFNlY3Rpb25D
b2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoZXhwb3J0c19jb3Vu
dCk7CisgICAgICAgIGZvciAobGV0IGV4cCBvZiB3YXNtLmV4cG9ydHMpIHsKKyAgICAgICAgICBz
ZWN0aW9uLmVtaXRfc3RyaW5nKGV4cC5uYW1lKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgo
ZXhwLmtpbmQpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGV4cC5pbmRleCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKG1lbV9leHBvcnQpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRf
c3RyaW5nKCdtZW1vcnknKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0V4dGVybmFsTWVt
b3J5KTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMCk7CisgICAgICAgIH0KKyAgICAgIH0p
OworICAgIH0KKworICAgIC8vIEFkZCBzdGFydCBmdW5jdGlvbiBzZWN0aW9uLgorICAgIGlmICh3
YXNtLnN0YXJ0X2luZGV4ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQo
J2VtaXR0aW5nIHN0YXJ0IGZ1bmN0aW9uIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmlu
YXJ5LmVtaXRfc2VjdGlvbihrU3RhcnRTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAg
IHNlY3Rpb24uZW1pdF91MzJ2KHdhc20uc3RhcnRfaW5kZXgpOworICAgICAgfSk7CisgICAgfQor
CisgICAgLy8gQWRkIGVsZW1lbnQgc2VnbWVudHMKKyAgICBpZiAod2FzbS5lbGVtZW50X3NlZ21l
bnRzLmxlbmd0aCA+IDApIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGVsZW1l
bnQgc2VnbWVudHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0
aW9uKGtFbGVtZW50U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICB2YXIgc2VnbWVu
dHMgPSB3YXNtLmVsZW1lbnRfc2VnbWVudHM7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHNl
Z21lbnRzLmxlbmd0aCk7CisKKyAgICAgICAgZm9yIChsZXQgc2VnbWVudCBvZiBzZWdtZW50cykg
eworICAgICAgICAgIC8vIEVtaXQgZmxhZyBhbmQgaGVhZGVyLgorICAgICAgICAgIC8vIEVhY2gg
Y2FzZSBiZWxvdyBjb3JyZXNwb25kcyB0byBhIGZsYWcgZnJvbQorICAgICAgICAgIC8vIGh0dHBz
Oi8vd2ViYXNzZW1ibHkuZ2l0aHViLmlvL3NwZWMvY29yZS9iaW5hcnkvbW9kdWxlcy5odG1sI2Vs
ZW1lbnQtc2VjdGlvbgorICAgICAgICAgIC8vIChub3QgaW4gaW5jcmVhc2luZyBvcmRlcikuCisg
ICAgICAgICAgaWYgKHNlZ21lbnQuaXNfYWN0aXZlKCkpIHsKKyAgICAgICAgICAgIGlmIChzZWdt
ZW50LnRhYmxlID09IDAgJiYgc2VnbWVudC50eXBlID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgICAgaWYgKHNlZ21lbnQuZXhwcmVzc2lvbnNfYXNfZWxlbWVudHMoKSkgeworICAgICAgICAg
ICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDA0KTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfaW5pdF9leHByKHNlZ21lbnQub2Zmc2V0KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwMCkKKyAgICAgICAgICAgICAgICBzZWN0
aW9uLmVtaXRfaW5pdF9leHByKHNlZ21lbnQub2Zmc2V0KTsKKyAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuZXhwcmVzc2lvbnNf
YXNfZWxlbWVudHMoKSkgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDA2KTsK
KyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWdtZW50LnRhYmxlKTsKKyAgICAg
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKHNlZ21lbnQub2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShzZWdtZW50LnR5cGUpOworICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDAyKTsKKyAgICAg
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWdtZW50LnRhYmxlKTsKKyAgICAgICAgICAg
ICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKHNlZ21lbnQub2Zmc2V0KTsKKyAgICAgICAgICAg
ICAgICBzZWN0aW9uLmVtaXRfdTgoa0V4dGVybmFsRnVuY3Rpb24pOworICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzZWdt
ZW50LmV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgaWYgKHNlZ21l
bnQuaXNfcGFzc2l2ZSgpKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDUp
OworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91
OCgweDA3KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlw
ZShzZWdtZW50LnR5cGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgaWYg
KHNlZ21lbnQuaXNfcGFzc2l2ZSgpKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4
KDB4MDEpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24u
ZW1pdF91OCgweDAzKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfdTgoa0V4dGVybmFsRnVuY3Rpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKwor
ICAgICAgICAgIC8vIEVtaXQgZWxlbWVudHMuCisgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYo
c2VnbWVudC5lbGVtZW50cy5sZW5ndGgpOworICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2Yg
c2VnbWVudC5lbGVtZW50cykgeworICAgICAgICAgICAgaWYgKHNlZ21lbnQuZXhwcmVzc2lvbnNf
YXNfZWxlbWVudHMoKSkgeworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKGVs
ZW1lbnQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0
X3UzMnYoZWxlbWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9KQorICAgIH0KKworICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgcGFzc2l2ZSBkYXRhIHNl
Z21lbnRzLCBhZGQgdGhlIERhdGFDb3VudCBzZWN0aW9uLgorICAgIGlmICh3YXNtLmRhdGFfc2Vn
bWVudHMuc29tZShzZWcgPT4gIXNlZy5pc19hY3RpdmUpKSB7CisgICAgICBiaW5hcnkuZW1pdF9z
ZWN0aW9uKGtEYXRhQ291bnRTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rp
b24uZW1pdF91MzJ2KHdhc20uZGF0YV9zZWdtZW50cy5sZW5ndGgpOworICAgICAgfSk7CisgICAg
fQorCisgICAgLy8gSWYgdGhlcmUgYXJlIGNvbXBpbGF0aW9uIGhpbnRzIGFkZCBhIGN1c3RvbSBz
ZWN0aW9uICdjb21waWxhdGlvbkhpbnRzJworICAgIC8vIGFmdGVyIHRoZSBmdW5jdGlvbiBzZWN0
aW9uIGFuZCBiZWZvcmUgdGhlIGNvZGUgc2VjdGlvbi4KKyAgICBpZiAod2FzbS5jb21waWxhdGlv
bl9oaW50cy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBj
b21waWxhdGlvbiBoaW50cyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIC8vIEJ1aWxkIGN1
c3RvbSBzZWN0aW9uIHBheWxvYWQuCisgICAgICBsZXQgcGF5bG9hZEJpbmFyeSA9IG5ldyBCaW5h
cnkoKTsKKyAgICAgIGxldCBpbXBsaWNpdF9jb21waWxhdGlvbl9oaW50c19jb3VudCA9IHdhc20u
ZnVuY3Rpb25zLmxlbmd0aDsKKyAgICAgIHBheWxvYWRCaW5hcnkuZW1pdF91MzJ2KGltcGxpY2l0
X2NvbXBpbGF0aW9uX2hpbnRzX2NvdW50KTsKKworICAgICAgLy8gRGVmYXVsdHMgdG8gdGhlIGNv
bXBpbGVyJ3MgY2hvaWNlIGlmIG5vIGJldHRlciBoaW50IHdhcyBnaXZlbiAoMHgwMCkuCisgICAg
ICBsZXQgZGVmYXVsdEhpbnRCeXRlID0ga0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5RGVmYXVsdCB8
CisgICAgICAgICAgKGtDb21waWxhdGlvbkhpbnRUaWVyRGVmYXVsdCA8PCAyKSB8CisgICAgICAg
ICAgKGtDb21waWxhdGlvbkhpbnRUaWVyRGVmYXVsdCA8PCA0KTsKKworICAgICAgLy8gRW1pdCBo
aW50IGJ5dGUgZm9yIGV2ZXJ5IGZ1bmN0aW9uIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUuCisgICAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IGltcGxpY2l0X2NvbXBpbGF0aW9uX2hpbnRzX2NvdW50OyBp
KyspIHsKKyAgICAgICAgbGV0IGluZGV4ID0gd2FzbS5udW1faW1wb3J0ZWRfZnVuY3MgKyBpOwor
ICAgICAgICB2YXIgaGludEJ5dGU7CisgICAgICAgIGlmIChpbmRleCBpbiB3YXNtLmNvbXBpbGF0
aW9uX2hpbnRzKSB7CisgICAgICAgICAgbGV0IGhpbnQgPSB3YXNtLmNvbXBpbGF0aW9uX2hpbnRz
W2luZGV4XTsKKyAgICAgICAgICBoaW50Qnl0ZSA9CisgICAgICAgICAgICAgIGhpbnQuc3RyYXRl
Z3kgfCAoaGludC5iYXNlbGluZVRpZXIgPDwgMikgfCAoaGludC50b3BUaWVyIDw8IDQpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgIGhpbnRCeXRlID0gZGVmYXVsdEhpbnRCeXRlOworICAg
ICAgICB9CisgICAgICAgIHBheWxvYWRCaW5hcnkuZW1pdF91OChoaW50Qnl0ZSk7CisgICAgICB9
CisKKyAgICAgIC8vIEZpbmFsaXplIGFzIGN1c3RvbSBzZWN0aW9uLgorICAgICAgbGV0IG5hbWUg
PSAnY29tcGlsYXRpb25IaW50cyc7CisgICAgICBsZXQgYnl0ZXMgPSB0aGlzLmNyZWF0ZUN1c3Rv
bVNlY3Rpb24obmFtZSwgcGF5bG9hZEJpbmFyeS50cnVuY19idWZmZXIoKSk7CisgICAgICBiaW5h
cnkuZW1pdF9ieXRlcyhieXRlcyk7CisgICAgfQorCisgICAgLy8gQWRkIGZ1bmN0aW9uIGJvZGll
cy4KKyAgICBpZiAod2FzbS5mdW5jdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgLy8gZW1pdCBm
dW5jdGlvbiBib2RpZXMKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGNvZGUgQCAn
ICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBsZXQgc2VjdGlvbl9sZW5ndGggPSAwOworICAgICAg
YmluYXJ5LmVtaXRfc2VjdGlvbihrQ29kZVNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAg
ICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS5mdW5jdGlvbnMubGVuZ3RoKTsKKyAgICAgICAgbGV0
IGhlYWRlciA9IG5ldyBCaW5hcnk7CisgICAgICAgIGZvciAobGV0IGZ1bmMgb2Ygd2FzbS5mdW5j
dGlvbnMpIHsKKyAgICAgICAgICBoZWFkZXIucmVzZXQoKTsKKyAgICAgICAgICAvLyBGdW5jdGlv
biBib2R5IGxlbmd0aCB3aWxsIGJlIHBhdGNoZWQgbGF0ZXIuCisgICAgICAgICAgbGV0IGxvY2Fs
X2RlY2xzID0gZnVuYy5sb2NhbHMgfHwgW107CisgICAgICAgICAgaGVhZGVyLmVtaXRfdTMydihs
b2NhbF9kZWNscy5sZW5ndGgpOworICAgICAgICAgIGZvciAobGV0IGRlY2wgb2YgbG9jYWxfZGVj
bHMpIHsKKyAgICAgICAgICAgIGhlYWRlci5lbWl0X3UzMnYoZGVjbC5jb3VudCk7CisgICAgICAg
ICAgICBoZWFkZXIuZW1pdF90eXBlKGRlY2wudHlwZSk7CisgICAgICAgICAgfQorICAgICAgICAg
IHNlY3Rpb24uZW1pdF91MzJ2KGhlYWRlci5sZW5ndGggKyBmdW5jLmJvZHkubGVuZ3RoKTsKKyAg
ICAgICAgICBzZWN0aW9uLmVtaXRfYnl0ZXMoaGVhZGVyLnRydW5jX2J1ZmZlcigpKTsKKyAgICAg
ICAgICAvLyBTZXQgdG8gc2VjdGlvbiBvZmZzZXQgZm9yIG5vdywgd2lsbCB1cGRhdGUuCisgICAg
ICAgICAgZnVuYy5ib2R5X29mZnNldCA9IHNlY3Rpb24ubGVuZ3RoOworICAgICAgICAgIHNlY3Rp
b24uZW1pdF9ieXRlcyhmdW5jLmJvZHkpOworICAgICAgICB9CisgICAgICAgIHNlY3Rpb25fbGVu
Z3RoID0gc2VjdGlvbi5sZW5ndGg7CisgICAgICB9KTsKKyAgICAgIGZvciAobGV0IGZ1bmMgb2Yg
d2FzbS5mdW5jdGlvbnMpIHsKKyAgICAgICAgZnVuYy5ib2R5X29mZnNldCArPSBiaW5hcnkubGVu
Z3RoIC0gc2VjdGlvbl9sZW5ndGg7CisgICAgICB9CisgICAgfQorCisgICAgLy8gQWRkIGRhdGEg
c2VnbWVudHMuCisgICAgaWYgKHdhc20uZGF0YV9zZWdtZW50cy5sZW5ndGggPiAwKSB7CisgICAg
ICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBkYXRhIHNlZ21lbnRzIEAgJyArIGJpbmFyeS5s
ZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrRGF0YVNlY3Rpb25Db2RlLCBzZWN0
aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS5kYXRhX3NlZ21lbnRzLmxl
bmd0aCk7CisgICAgICAgIGZvciAobGV0IHNlZyBvZiB3YXNtLmRhdGFfc2VnbWVudHMpIHsKKyAg
ICAgICAgICBpZiAoc2VnLmlzX2FjdGl2ZSkgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4
KDApOyAgLy8gbGluZWFyIG1lbW9yeSBpbmRleCAwIC8gZmxhZ3MKKyAgICAgICAgICAgIGlmIChz
ZWcuaXNfZ2xvYmFsKSB7CisgICAgICAgICAgICAgIC8vIGluaXRpYWxpemVyIGlzIGEgZ2xvYmFs
IHZhcmlhYmxlCisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChrRXhwckdsb2JhbEdldCk7
CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHNlZy5hZGRyKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgIC8vIGluaXRpYWxpemVyIGlzIGEgY29uc3RhbnQKKyAg
ICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHBySTMyQ29uc3QpOworICAgICAgICAgICAg
ICBzZWN0aW9uLmVtaXRfdTMydihzZWcuYWRkcik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBzZWN0aW9uLmVtaXRfdTgoa0V4cHJFbmQpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBzZWN0aW9uLmVtaXRfdTgoa1Bhc3NpdmUpOyAgLy8gZmxhZ3MKKyAgICAgICAgICB9Cisg
ICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoc2VnLmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICBz
ZWN0aW9uLmVtaXRfYnl0ZXMoc2VnLmRhdGEpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9
CisKKyAgICAvLyBBZGQgYW55IGV4cGxpY2l0bHkgYWRkZWQgc2VjdGlvbnMKKyAgICBmb3IgKGxl
dCBleHAgb2Ygd2FzbS5leHBsaWNpdCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRp
bmcgZXhwbGljaXQgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9ieXRl
cyhleHApOworICAgIH0KKworICAgIC8vIEFkZCBuYW1lcy4KKyAgICBsZXQgbnVtX2Z1bmN0aW9u
X25hbWVzID0gMDsKKyAgICBsZXQgbnVtX2Z1bmN0aW9uc193aXRoX2xvY2FsX25hbWVzID0gMDsK
KyAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAgICBpZiAoZnVuYy5u
YW1lICE9PSB1bmRlZmluZWQpICsrbnVtX2Z1bmN0aW9uX25hbWVzOworICAgICAgaWYgKGZ1bmMu
bnVtTG9jYWxOYW1lcygpID4gMCkgKytudW1fZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFtZXM7Cisg
ICAgfQorICAgIGlmIChudW1fZnVuY3Rpb25fbmFtZXMgPiAwIHx8IG51bV9mdW5jdGlvbnNfd2l0
aF9sb2NhbF9uYW1lcyA+IDAgfHwKKyAgICAgICAgd2FzbS5uYW1lICE9PSB1bmRlZmluZWQpIHsK
KyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIG5hbWVzIEAgJyArIGJpbmFyeS5sZW5n
dGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrVW5rbm93blNlY3Rpb25Db2RlLCBzZWN0
aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3N0cmluZygnbmFtZScpOworICAgICAgICAv
LyBFbWl0IG1vZHVsZSBuYW1lLgorICAgICAgICBpZiAod2FzbS5uYW1lICE9PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfc2VjdGlvbihrTW9kdWxlTmFtZUNvZGUsIG5hbWVf
c2VjdGlvbiA9PiB7CisgICAgICAgICAgICBuYW1lX3NlY3Rpb24uZW1pdF9zdHJpbmcod2FzbS5u
YW1lKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICAvLyBFbWl0IGZ1bmN0aW9u
IG5hbWVzLgorICAgICAgICBpZiAobnVtX2Z1bmN0aW9uX25hbWVzID4gMCkgeworICAgICAgICAg
IHNlY3Rpb24uZW1pdF9zZWN0aW9uKGtGdW5jdGlvbk5hbWVzQ29kZSwgbmFtZV9zZWN0aW9uID0+
IHsKKyAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0X3UzMnYobnVtX2Z1bmN0aW9uX25hbWVz
KTsKKyAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsKKyAgICAg
ICAgICAgICAgaWYgKGZ1bmMubmFtZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfdTMydihmdW5jLmluZGV4KTsKKyAgICAgICAgICAgICAg
bmFtZV9zZWN0aW9uLmVtaXRfc3RyaW5nKGZ1bmMubmFtZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRW1pdCBsb2NhbCBuYW1lcy4KKyAgICAg
ICAgaWYgKG51bV9mdW5jdGlvbnNfd2l0aF9sb2NhbF9uYW1lcyA+IDApIHsKKyAgICAgICAgICBz
ZWN0aW9uLmVtaXRfc2VjdGlvbihrTG9jYWxOYW1lc0NvZGUsIG5hbWVfc2VjdGlvbiA9PiB7Cisg
ICAgICAgICAgICBuYW1lX3NlY3Rpb24uZW1pdF91MzJ2KG51bV9mdW5jdGlvbnNfd2l0aF9sb2Nh
bF9uYW1lcyk7CisgICAgICAgICAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7
CisgICAgICAgICAgICAgIGlmIChmdW5jLm51bUxvY2FsTmFtZXMoKSA9PSAwKSBjb250aW51ZTsK
KyAgICAgICAgICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfdTMydihmdW5jLmluZGV4KTsKKyAgICAg
ICAgICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfdTMydihmdW5jLm51bUxvY2FsTmFtZXMoKSk7Cisg
ICAgICAgICAgICAgIGxldCBuYW1lX2luZGV4ID0gMDsKKyAgICAgICAgICAgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCBmdW5jLmxvY2FsX25hbWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHR5cGVvZiBmdW5jLmxvY2FsX25hbWVzW2ldID09ICdzdHJpbmcnKSB7CisgICAgICAg
ICAgICAgICAgICBuYW1lX3NlY3Rpb24uZW1pdF91MzJ2KG5hbWVfaW5kZXgpOworICAgICAgICAg
ICAgICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfc3RyaW5nKGZ1bmMubG9jYWxfbmFtZXNbaV0pOwor
ICAgICAgICAgICAgICAgICAgbmFtZV9pbmRleCsrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICBuYW1lX2luZGV4ICs9IGZ1bmMubG9jYWxfbmFtZXNbaV07Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBiaW5hcnku
dHJ1bmNfYnVmZmVyKCk7CisgIH0KKworICB0b0FycmF5KGRlYnVnID0gZmFsc2UpIHsKKyAgICBy
ZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRvQnVmZmVyKGRlYnVnKSk7CisgIH0KKworICBpbnN0YW50
aWF0ZShmZmkpIHsKKyAgICBsZXQgbW9kdWxlID0gdGhpcy50b01vZHVsZSgpOworICAgIGxldCBp
bnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIGZmaSk7CisgICAgcmV0
dXJuIGluc3RhbmNlOworICB9CisKKyAgYXN5bmNJbnN0YW50aWF0ZShmZmkpIHsKKyAgICByZXR1
cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUodGhpcy50b0J1ZmZlcigpLCBmZmkpCisgICAgICAg
IC50aGVuKCh7bW9kdWxlLCBpbnN0YW5jZX0pID0+IGluc3RhbmNlKTsKKyAgfQorCisgIHRvTW9k
dWxlKGRlYnVnID0gZmFsc2UpIHsKKyAgICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSh0
aGlzLnRvQnVmZmVyKGRlYnVnKSk7CisgIH0KK30KKworZnVuY3Rpb24gd2FzbVNpZ25lZExlYih2
YWwsIG1heF9sZW4gPSA1KSB7CisgIGxldCByZXMgPSBbXTsKKyAgZm9yIChsZXQgaSA9IDA7IGkg
PCBtYXhfbGVuOyArK2kpIHsKKyAgICBsZXQgdiA9IHZhbCAmIDB4N2Y7CisgICAgLy8gSWYge3Z9
IHNpZ24tZXh0ZW5kZWQgZnJvbSA3IHRvIDMyIGJpdHMgaXMgZXF1YWwgdG8gdmFsLCB3ZSBhcmUg
ZG9uZS4KKyAgICBpZiAoKCh2IDw8IDI1KSA+PiAyNSkgPT0gdmFsKSB7CisgICAgICByZXMucHVz
aCh2KTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIHJlcy5wdXNoKHYgfCAweDgwKTsK
KyAgICB2YWwgPSB2YWwgPj4gNzsKKyAgfQorICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAnTGVi
IHZhbHVlIDwnICsgdmFsICsgJz4gZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAnICsgbWF4X2xl
bik7Cit9CisKK2Z1bmN0aW9uIHdhc21VbnNpZ25lZExlYih2YWwsIG1heF9sZW4gPSA1KSB7Cisg
IGxldCByZXMgPSBbXTsKKyAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhfbGVuOyArK2kpIHsKKyAg
ICBsZXQgdiA9IHZhbCAmIDB4N2Y7CisgICAgaWYgKHYgPT0gdmFsKSB7CisgICAgICByZXMucHVz
aCh2KTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIHJlcy5wdXNoKHYgfCAweDgwKTsK
KyAgICB2YWwgPSB2YWwgPj4+IDc7CisgIH0KKyAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgJ0xl
YiB2YWx1ZSA8JyArIHZhbCArICc+IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJyArIG1heF9s
ZW4pOworfQorCitmdW5jdGlvbiB3YXNtSTMyQ29uc3QodmFsKSB7CisgIHJldHVybiBba0V4cHJJ
MzJDb25zdCwgLi4ud2FzbVNpZ25lZExlYih2YWwsIDUpXTsKK30KKworLy8gTm90ZTogU2luY2Ug
e3ZhbH0gaXMgYSBKUyBudW1iZXIsIHRoZSBnZW5lcmF0ZWQgY29uc3RhbnQgb25seSBoYXMgNTMg
Yml0cyBvZgorLy8gcHJlY2lzaW9uLgorZnVuY3Rpb24gd2FzbUk2NENvbnN0KHZhbCkgeworICBy
ZXR1cm4gW2tFeHBySTY0Q29uc3QsIC4uLndhc21TaWduZWRMZWIodmFsLCAxMCldOworfQorCitm
dW5jdGlvbiB3YXNtRjMyQ29uc3QoZikgeworICAvLyBXcml0ZSBpbiBsaXR0bGUtZW5kaWFuIG9y
ZGVyIGF0IG9mZnNldCAwLgorICBkYXRhX3ZpZXcuc2V0RmxvYXQzMigwLCBmLCB0cnVlKTsKKyAg
cmV0dXJuIFsKKyAgICBrRXhwckYzMkNvbnN0LCBieXRlX3ZpZXdbMF0sIGJ5dGVfdmlld1sxXSwg
Ynl0ZV92aWV3WzJdLCBieXRlX3ZpZXdbM10KKyAgXTsKK30KKworZnVuY3Rpb24gd2FzbUY2NENv
bnN0KGYpIHsKKyAgLy8gV3JpdGUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciBhdCBvZmZzZXQgMC4K
KyAgZGF0YV92aWV3LnNldEZsb2F0NjQoMCwgZiwgdHJ1ZSk7CisgIHJldHVybiBbCisgICAga0V4
cHJGNjRDb25zdCwgYnl0ZV92aWV3WzBdLCBieXRlX3ZpZXdbMV0sIGJ5dGVfdmlld1syXSwgYnl0
ZV92aWV3WzNdLAorICAgIGJ5dGVfdmlld1s0XSwgYnl0ZV92aWV3WzVdLCBieXRlX3ZpZXdbNl0s
IGJ5dGVfdmlld1s3XQorICBdOworfQorCitmdW5jdGlvbiB3YXNtUzEyOENvbnN0KGYpIHsKKyAg
Ly8gV3JpdGUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciBhdCBvZmZzZXQgMC4KKyAgcmV0dXJuIFtr
U2ltZFByZWZpeCwga0V4cHJTMTI4Q29uc3QsIC4uLmZdOworfQorCitmdW5jdGlvbiBnZXRPcGNv
ZGVOYW1lKG9wY29kZSkgeworICByZXR1cm4gZ2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVzPy5b
b3Bjb2RlXSA/PyAndW5rbm93bic7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vd2FzbS5q
c29uIGIvSlNUZXN0cy93YXNtL3dhc20uanNvbgppbmRleCA0ZjhkZDllM2QyMTM0MzUwMDAwMDZl
MjQxNDZiMDE5NGM5YWM4OGYxLi45ZDIyNWU0ZTgyMjQ5NjYwNDQ0ZmY0MWFlYmJhMjdjNjRjNzZl
ZWYxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vd2FzbS5qc29uCisrKyBiL0pTVGVzdHMvd2Fz
bS93YXNtLmpzb24KQEAgLTIzLDM0ICsyMywzOCBAQAogICAgICJibG9ja190eXBlIjogWyJpMzIi
LCAiaTY0IiwgImYzMiIsICJmNjQiLCAidm9pZCIsICJleHRlcm5yZWYiLCAiZnVuY3JlZiJdLAog
ICAgICJyZWZfdHlwZSI6IFsiZnVuY3JlZiIsICJleHRlcm5yZWYiLCAidHlwZV9pZHgiXSwKICAg
ICAiZXh0ZXJuYWxfa2luZCI6IHsKLSAgICAgICAgIkZ1bmN0aW9uIjogeyAidHlwZSI6ICJ1aW50
OCIsICJ2YWx1ZSI6IDAgfSwKLSAgICAgICAgIlRhYmxlIjogICAgeyAidHlwZSI6ICJ1aW50OCIs
ICJ2YWx1ZSI6IDEgfSwKLSAgICAgICAgIk1lbW9yeSI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2
YWx1ZSI6IDIgfSwKLSAgICAgICAgIkdsb2JhbCI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1
ZSI6IDMgfQorICAgICAgICAiRnVuY3Rpb24iOiAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVl
IjogMCB9LAorICAgICAgICAiVGFibGUiOiAgICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVl
IjogMSB9LAorICAgICAgICAiTWVtb3J5IjogICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVl
IjogMiB9LAorICAgICAgICAiR2xvYmFsIjogICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVl
IjogMyB9LAorICAgICAgICAiRXhjZXB0aW9uIjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVl
IjogNCB9CiAgICAgfSwKICAgICAic2VjdGlvbiIgOiB7Ci0gICAgICAgICJUeXBlIjogICAgIHsg
InR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMSwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9u
IHNpZ25hdHVyZSBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJJbXBvcnQiOiAgIHsgInR5cGUi
OiAidmFydWludDciLCAidmFsdWUiOiAgMiwgImRlc2NyaXB0aW9uIjogIkltcG9ydCBkZWNsYXJh
dGlvbnMiIH0sCi0gICAgICAgICJGdW5jdGlvbiI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFs
dWUiOiAgMywgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAg
ICAgIlRhYmxlIjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA0LCAiZGVzY3Jp
cHRpb24iOiAiSW5kaXJlY3QgZnVuY3Rpb24gdGFibGUgYW5kIG90aGVyIHRhYmxlcyIgfSwKLSAg
ICAgICAgIk1lbW9yeSI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA1LCAiZGVz
Y3JpcHRpb24iOiAiTWVtb3J5IGF0dHJpYnV0ZXMiIH0sCi0gICAgICAgICJHbG9iYWwiOiAgIHsg
InR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBk
ZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJFeHBvcnQiOiAgIHsgInR5cGUiOiAidmFydWludDci
LCAidmFsdWUiOiAgNywgImRlc2NyaXB0aW9uIjogIkV4cG9ydHMiIH0sCi0gICAgICAgICJTdGFy
dCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgOCwgImRlc2NyaXB0aW9uIjog
IlN0YXJ0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIiB9LAotICAgICAgICAiRWxlbWVudCI6ICB7ICJ0
eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDksICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBz
ZWN0aW9uIiB9LAotICAgICAgICAiQ29kZSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZh
bHVlIjogMTAsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBib2RpZXMgKGNvZGUpIiB9LAotICAg
ICAgICAiRGF0YSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNj
cmlwdGlvbiI6ICJEYXRhIHNlZ21lbnRzIiB9CisgICAgICAgICJUeXBlIjogICAgICB7ICJ0eXBl
IjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDEsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBzaWdu
YXR1cmUgZGVjbGFyYXRpb25zIiB9LAorICAgICAgICAiSW1wb3J0IjogICAgeyAidHlwZSI6ICJ2
YXJ1aW50NyIsICJ2YWx1ZSI6ICAyLCAiZGVzY3JpcHRpb24iOiAiSW1wb3J0IGRlY2xhcmF0aW9u
cyIgfSwKKyAgICAgICAgIkZ1bmN0aW9uIjogIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAgMywgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAg
IlRhYmxlIjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNCwgImRlc2NyaXB0
aW9uIjogIkluZGlyZWN0IGZ1bmN0aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMiIH0sCisgICAg
ICAgICJNZW1vcnkiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDUsICJkZXNj
cmlwdGlvbiI6ICJNZW1vcnkgYXR0cmlidXRlcyIgfSwKKyAgICAgICAgIkV4Y2VwdGlvbiI6IHsg
InR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMywgImRlc2NyaXB0aW9uIjogIkV4Y2VwdGlv
biBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJHbG9iYWwiOiAgICB7ICJ0eXBlIjogInZhcnVp
bnQ3IiwgInZhbHVlIjogIDYsICJkZXNjcmlwdGlvbiI6ICJHbG9iYWwgZGVjbGFyYXRpb25zIiB9
LAorICAgICAgICAiRXhwb3J0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA3
LCAiZGVzY3JpcHRpb24iOiAiRXhwb3J0cyIgfSwKKyAgICAgICAgIlN0YXJ0IjogICAgIHsgInR5
cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IGZ1bmN0
aW9uIGRlY2xhcmF0aW9uIiB9LAorICAgICAgICAiRWxlbWVudCI6ICAgeyAidHlwZSI6ICJ2YXJ1
aW50NyIsICJ2YWx1ZSI6ICA5LCAiZGVzY3JpcHRpb24iOiAiRWxlbWVudHMgc2VjdGlvbiIgfSwK
KyAgICAgICAgIkNvZGUiOiAgICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMCwg
ImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIGJvZGllcyAoY29kZSkiIH0sCisgICAgICAgICJEYXRh
IjogICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlwdGlvbiI6
ICJEYXRhIHNlZ21lbnRzIiB9LAorICAgICAgICAiRGF0YUNvdW50IjogeyAidHlwZSI6ICJ2YXJ1
aW50NyIsICJ2YWx1ZSI6IDEyLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIGRhdGEgc2VnbWVu
dHMiIH0KICAgICB9LAogICAgICJvcGNvZGUiOiB7CiAgICAgICAgICJ1bnJlYWNoYWJsZSI6ICAg
ICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMCwgInJldHVybiI6
IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidHJhcCBpbW1lZGlhdGVseSIgfSwKKyAg
ICAgICAgIm5vcCI6ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAg
InZhbHVlIjogICAxLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUi
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJu
byBvcGVyYXRpb24iIH0sCiAgICAgICAgICJibG9jayI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdv
cnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMiwgInJldHVybiI6IFsiY29udHJvbCJdLCAg
ICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBl
In1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gYSBzZXF1ZW5jZSBvZiBleHByZXNzaW9ucywgeWllbGRp
bmcgMCBvciAxIHZhbHVlcyIgfSwKICAgICAgICAgImxvb3AiOiAgICAgICAgICAgICAgICB7ICJj
YXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAzLCAicmV0dXJuIjogWyJjb250cm9s
Il0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2Nr
X3R5cGUifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBhIGJsb2NrIHdoaWNoIGNhbiBhbHNvIGZvcm0g
Y29udHJvbCBmbG93IGxvb3BzIiB9LAogICAgICAgICAiaWYiOiAgICAgICAgICAgICAgICAgIHsg
ImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDQsICJyZXR1cm4iOiBbImNvbnRy
b2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYm9vbCJdLCAgICAgICAg
ICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxv
Y2tfdHlwZSJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGlmIGV4cHJlc3Npb24iIH0sCiAgICAgICAg
ICJlbHNlIjogICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1
ZSI6ICAgNSwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFy
YW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4g
ZWxzZSBleHByZXNzaW9uIG9mIGlmIiB9LAotICAgICAgICAic2VsZWN0IjogICAgICAgICAgICAg
IHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4iOiBbInBy
ZXYiXSwgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYi
LCAiYm9vbCJdLCAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVlcyBiYXNl
ZCBvbiBjb25kaXRpb24iIH0sCi0gICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAgeyAiY2F0
ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJldiJdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29s
Il0sICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291bnQiLCAi
dHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldCB0eXBl
cyB2ZWN0b3IifSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyJuYW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0eXBlIjog
InZhbHVlX3R5cGUqIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJ0YXJnZXQgdHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Ygc2VsZWN0
IGluc3RydWN0aW9uIn1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogInRoZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRoIHRoZSBh
bm5vdGF0aW9uIGZvciByZXN1bHQgdHlwZXMiIH0sCisgICAgICAgICJ0cnkiOiAgICAgICAgICAg
ICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNiwgInJldHVybiI6
IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlw
ZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gdHJ5IGV4cHJlc3Npb24iIH0s
CisgICAgICAgICJjYXRjaCI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIs
ICAgICJ2YWx1ZSI6ICAgNywgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAg
ICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRp
YXRlIjogW3sibmFtZSI6ICJleG4iLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiYmVnaW4gY2F0Y2ggZXhwcmVzc2lvbiBvZiB0cnkiIH0sCisgICAgICAgICJ0aHJvdyI6ICAg
ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgOCwgInJl
dHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4i
LCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhyb3cgZXhjZXB0aW9uIiB9
LAorICAgICAgICAicmV0aHJvdyI6ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wi
LCAgICAidmFsdWUiOiAgIDksICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAg
ICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogInJldGhyb3cgdGhlIGV4Y2VwdGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayIgfSwKICAg
ICAgICAgImJyIjogICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAg
InZhbHVlIjogIDEyLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUi
OiBbeyJuYW1lIjogInJlbGF0aXZlX2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJi
cmVhayB0aGF0IHRhcmdldHMgYW4gb3V0ZXIgbmVzdGVkIGJsb2NrIiB9LAogICAgICAgICAiYnJf
aWYiOiAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAg
MTMsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRl
ciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUi
OiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImNvbmRpdGlvbmFs
IGJyZWFrIHRoYXQgdGFyZ2V0cyBhbiBvdXRlciBuZXN0ZWQgYmxvY2siIH0sCiAgICAgICAgICJi
cl90YWJsZSI6ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6
ICAxNCwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1l
dGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFt
ZSI6ICJ0YXJnZXRfY291bnQiLCAgICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9m
IGVudHJpZXMgaW4gdGhlIHRhcmdldF90YWJsZSJ9LApAQCAtNTgsOCArNjIsMTMgQEAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyJuYW1lIjogImRlZmF1bHRfdGFyZ2V0IiwgInR5cGUiOiAidmFydWludDMyIiwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhbiBv
dXRlciBibG9jayBvciBsb29wIHRvIHdoaWNoIHRvIGJyZWFrIGluIHRoZSBkZWZhdWx0IGNhc2Ui
fV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiYnJhbmNoIHRhYmxlIGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3QiIH0sCiAgICAgICAgICJy
ZXR1cm4iOiAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6
ICAxNSwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1l
dGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAicmV0dXJuIHpl
cm8gb3Igb25lIHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbiIgfSwKKyAgICAgICAgImRlbGVnYXRl
IjogICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI0LCAi
cmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJl
bGF0aXZlX2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJkZWxlZ2F0ZSB0byBhIHBh
cmVudCB0cnkgYmxvY2siIH0sCisgICAgICAgICJjYXRjaF9hbGwiOiAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNSwgInJldHVybiI6IFsiY29udHJvbCJd
LCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiY2F0Y2ggZXhjZXB0aW9ucyByZWdhcmRsZXNzIG9mIHRhZyIg
fSwKICAgICAgICAgImRyb3AiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9s
IiwgICAgInZhbHVlIjogIDI2LCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSJdLCAgICAgICAgICAgICAgICAgICAgICAgICJpbW1l
ZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJpZ25vcmUgdmFsdWUiIH0sCi0gICAgICAgICJub3AiOiAgICAgICAgICAgICAgICAgeyAi
Y2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMSwgInJldHVybiI6IFtdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAibm8gb3BlcmF0aW9uIiB9LAorICAgICAgICAic2VsZWN0
IjogICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjcs
ICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6
IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInNlbGVjdCBvbmUgb2Yg
dHdvIHZhbHVlcyBiYXNlZCBvbiBjb25kaXRpb24iIH0sCisgICAgICAgICJhbm5vdGF0ZWRfc2Vs
ZWN0IjogICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyOCwgInJldHVy
biI6IFsicHJldiJdLCAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnki
LCAicHJldiIsICJib29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRf
dHlwZXNfY291bnQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4g
dGhlIHRhcmdldCB0eXBlcyB2ZWN0b3IifSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogInRhcmdldF90eXBlcyIs
ICAgICAgICJ0eXBlIjogInZhbHVlX3R5cGUqIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0YXJnZXQgdHlwZXMgdGhhdCBpbmRpY2F0ZSBy
ZXN1bHQgb2Ygc2VsZWN0IGluc3RydWN0aW9uIn1dLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBzYW1lIGFzIGp1c3Qgc2VsZWN0
IGJ1dCB3aXRoIHRoZSBhbm5vdGF0aW9uIGZvciByZXN1bHQgdHlwZXMiIH0sCiAgICAgICAgICJl
bmQiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6
ICAxMSwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1l
dGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZW5kIGEgYmxv
Y2ssIGxvb3AsIG9yIGlmIiB9LAogICAgICAgICAiaTMyLmNvbnN0IjogICAgICAgICAgIHsgImNh
dGVnb3J5IjogInNwZWNpYWwiLCAgICAidmFsdWUiOiAgNjUsICJyZXR1cm4iOiBbImkzMiJdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidmFsdWUiLCAgICAgICAgICAidHlw
ZSI6ICJ2YXJpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogImEgY29uc3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTMy
IiB9LAogICAgICAgICAiaTY0LmNvbnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNp
YWwiLCAgICAidmFsdWUiOiAgNjYsICJyZXR1cm4iOiBbImk2NCJdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlt
bWVkaWF0ZSI6IFt7Im5hbWUiOiAidmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJpbnQ2NCJ9
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogImEgY29uc3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTY0IiB9LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440392</attachid>
            <date>2021-10-06 11:08:47 -0700</date>
            <delta_ts>2021-10-06 13:10:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229681-20211006110846.patch</filename>
            <type>text/plain</type>
            <size>706536</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
YzUyN2ZiNmZlZjIwNjViZWEzODc0OGJjOGE0MWI3MWQzZjljNmY5Li41NmIyNDM4ZTM3NzI4NGI2
MzU5MTg2NmFlZWNjYWE1Nzg4NTk5MjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NTAgQEAKKzIwMjEtMDktMTYgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+IGFuZCBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCB0aGUgV2ViQXNzZW1ibHkgZXhjZXB0aW9uIGhhbmRsaW5nIHByb3Bvc2FsCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk2ODEKKyAg
ICAgICAgPHJkYXI6Ly84MTYwMzM4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlv
biBoYW5kbGluZyBwcm9wb3NhbCwgYXMgcGVyCisgICAgICAgIHRoZSBXSVAgc3BlYzogaHR0cHM6
Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2V4Y2VwdGlvbi1oYW5kbGluZworCisgICAgICAgIFRo
ZSBwcm9wb3NhbCBpbmNsdWRlcyA2IG5ldyBpbnN0cnVjdGlvbnM6IHRyeSwgY2F0Y2gsIGNhdGNo
X2FsbCwKKyAgICAgICAgZGVsZWdhdGUsIHRocm93IGFuZCByZXRocm93LiBBbGwgdGhlIGluc3Ry
dWN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5CisgICAgICAgIHRoZSBMTEludCBhbmQgQjMgZ2VuZXJh
dG9ycywgYnV0IG5vdCB5ZXQgc3VwcG9ydGVkIGluIEFpci4gQW55CisgICAgICAgIGZ1bmN0aW9u
cyB1c2UgZXhjZXB0aW9ucyB3aWxsIHVzZSBCMyBpbiBCQlEuCisKKyAgICAgICAgQSBmZXcgaW1w
b3J0YW50IG5vdGVzIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgLSBJbiBCMywg
c2luY2Ugd2UgY2FuIG5vdyBoYXZlIG11bHRpcGxlIGVudHJ5cG9pbnRzIChvbmUgZm9yIHRoZQor
ICAgICAgICBmdW5jdGlvbiBlbnRyeSArIDEgZm9yIGVhY2ggY2F0Y2gvY2F0Y2hfYWxsKSwgd2Ug
Y2FuIG5vIGxvbmdlciBqdXN0CisgICAgICAgIHJlcGxhY2UgZXZlcnkgdmFsdWUgaW4gdGhlIHN0
YWNrIHdpdGggYSBQaGkgd2hlbiB3ZSBmaW5kIGEgbmV3CisgICAgICAgIGVudHJ5cG9pbnQuIFRo
aXMgd29ya2VkIHNvIGZhciBiZWNhdXNlIG9mIHRoZSBhc3N1bXB0aW9uIHRoYXQgYW55CisgICAg
ICAgIGJsb2NrIGNvdWxkbid0IGFjY2VzcyBpdHMgZW5jbG9zaW5nIHN0YWNrLCBhbmQgc2luY2Ug
dGhlIGVuY2xvc2luZyBzdGFjaworICAgICAgICB3b3VsZCBvbmx5IGJlIGFjY2Vzc2libGUgd2hl
biB3ZSBleGl0ZWQgdGhlIGN1cnJlbnQgYmxvY2ssIHdlIGFkZGVkIFBoaXMKKyAgICAgICAgYXQg
dGhlIGVuZCBvZiBlYWNoIGJsb2NrIHdoZW4gd2UgaGFkIGEgbmV3IGVudHJ5cG9pbnQuIE5vdywg
c2luY2Ugd2UgaGF2ZSB0byBjYXB0dXJlIGFsbAorICAgICAgICBsaXZlIHZhbHVlcyBhdCBhbnkg
cG9pbnQgdGhhdCBtaWdodCB0aHJvdyAoY2FsbHMsIHRocm93IGFuZCByZXRocm93KSwKKyAgICAg
ICAgd2UgYnJlYWsgdGhhdCBhc3N1bXB0aW9uLiBUbyBzaW1wbGlmeSBhbGwgdGhlIHBvc3NpYmxl
IHdheXMgd2UgbWlnaHQKKyAgICAgICAgaGF2ZSB0byBtZXJnZSB0aGUgc3RhdGUgZnJvbSBtdWx0
aXBsZSBlbnRyeXBvaW50cyB3ZSBub3cgdXNlIEIzCisgICAgICAgIFZhcmlhYmxlcyB0byByZXBy
ZXNlbnQgc3RhY2sgc2xvdHMuCisgICAgICAgIC0gU29tZSBleHRyYSBpbmZvcm1hdGlvbiBpcyBy
ZXF1aXJlZCB0byBiZSBhYmxlIHRvIHByb3Blcmx5IHJlc3RvcmUKKyAgICAgICAgdGhlIHN0YXRl
IHdoZW4gY2F0Y2hpbmcgYW4gZXhjZXB0aW9uOgorICAgICAgICAgICAgLSBXZSBhZGRlZCBhIGZp
ZWxkIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2guIFRoaXMgZmllbGQgaXMgbmVjZXNzYXJ5CisgICAg
ICAgICAgICBiZWNhdXNlIHdoZW5ldmVyIHdlIHRocm93LCB3ZSBtaWdodCBlbmQgdXAgaW4gSmF2
YVNjcmlwdCwgd2hpY2gKKyAgICAgICAgICAgIGFzc3VtZXMgdGhlIGNhbGxlZSBpcyBhIGNlbGwg
YW5kIHVzZXMgaXQgdG8gZ2V0IHRoZSBWTSBhbmQgcmVzdG9yZQorICAgICAgICAgICAgY2FsbGVl
IHNhdmVzLiBUaGUgaXNzdWUgaXMgd2hlbiBjYXRjaGluZyBleGNlcHRpb25zIGluIHdhc20gd2UK
KyAgICAgICAgICAgIHN0aWxsIG5lZWQgdGhlIG9yaWdpbmFsIGNhbGxlZSwgYW5kIGlmIHRocm93
aW5nIGFuZCBjYXRjaGluZyBmcm9tCisgICAgICAgICAgICB0aGUgc2FtZSBmcmFtZSwgdGhhdCBj
YWxsIGZyYW1lIHNsb3QgaGFzIG5vdyBiZWVuIG92ZXJ3cml0dGVuLCBzbworICAgICAgICAgICAg
d2Ugc3RvcmUgaXRzIG9yaWdpbmFsIHZhbHVlIGluIHRoZSBWTSBmaWVsZC4KKyAgICAgICAgICAg
IC0gV2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZSBjdXJyZW50IFdhc20gSW5zdGFuY2UgaW50byB0
aGUgY2FsbAorICAgICAgICAgICAgZnJhbWUncyBzbG90IGZvciB0aGUgYHRoaXNgIGFyZ3VtZW50
LiBUaGUgaW5zdGFuY2UgaXMgdXNlZCBib3RoIGJ5CisgICAgICAgICAgICB0aGUgdW53aW5kZXIs
IHRvIGNoZWNrIGlmIHRoZSBleGNlcHRpb24gYmVpbmcgdGhyb3duIG1hdGNoZXMgdGhlCisgICAg
ICAgICAgICBleGNlcHRpb25zIGhhbmRsZWQgYnkgY2F0Y2ggY2FuZGlkYXRlcywgYW5kIGJ5IHRo
ZSBjYXRjaCBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgICAgIHdoaWNoIGlzIG5lY2Vzc2FyeSB3
aGVuIHRocm93aW5nIGZyb20gYSBjcm9zcyBpbnN0YW5jZSBjYWxsIHdoZXJlIGJvdGgKKyAgICAg
ICAgICAgIHRoZSBjYWxsZWUgc2F2ZSBvciBUTFMgd2lsbCBoYXZlIHRoZSBjYWxsZWUncyBpbnN0
YW5jZS4KKyAgICAgICAgICAgIC0gV2Ugc3RvcmUgdGhlIGN1cnJlbnQgb3Bjb2RlIGZvciB0aGUg
bGxpbnQsIG9yIHRoZQorICAgICAgICAgICAgY2FsbCBzaXRlIGluZGV4IGZvciBCMywgaW4gdGhl
IGNhbGwgZnJhbWUgc2xvdCBmb3IgdGhlIGFyZ3VtZW50CisgICAgICAgICAgICBjb3VudCB0YWcu
IFRoZSBjYWxsIHNpdGUgaW5kZXggaXMgdXNlZCBieSB0aGUgdW53aW5kZXIgdG8gY2hlY2sKKyAg
ICAgICAgICAgIGlmIGEgZ2l2ZW4gY2F0Y2ggY2FuIGhhbmRsZSB0aGUgZXhjZXB0aW9uIGJlaW5n
IHRocm93bi4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6Cisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9IYW5kbGVySW5mby5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6OkJhc2VJbnN0cnVj
dGlvbjo6bmFtZSBjb25zdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Omhhc2ggY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpkZWxldGVkVmFsdWUpOgorICAgICAgICAo
SlNDOjpDYWxsU2l0ZUluZGV4Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXhIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6Q2FsbFNp
dGVJbmRleEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkNhdGNoSW5mbzo6Q2F0Y2hJbmZvKToKKyAgICAgICAgKEpTQzo6
VW53aW5kRnVuY3Rvcjo6VW53aW5kRnVuY3Rvcik6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0
b3I6Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5k
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpD
YXRjaEluZm86OkNhdGNoSW5mbyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKToK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBq
aXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAg
ICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJ
VDo6Y29udmVydENhbGxlZVRvVk0pOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5oOgorICAg
ICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZVJlZik6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRX
aWRlMTZDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldFdpZGUzMkNvZGVSZWYpOgor
ICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50
Ojp3YXNtUmV0dXJuVG9UaHJvdyk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVXYXNtQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlV2FzbUNhdGNoQWxsKToKKyAgICAgICAg
KiBsbGludC9MTEludEV4Y2VwdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludE9mZnNldHNF
eHRyYWN0b3IuY3BwOgorICAgICAgICAqIGxsaW50L1dlYkFzc2VtYmx5LmFzbToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNl
OjpFcnJvckluc3RhbmNlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c2V0Q2F0Y2hhYmxlRnJvbVdhc20pOgorICAgICAg
ICAoSlNDOjpFcnJvckluc3RhbmNlOjppc0NhdGNoYWJsZUZyb21XYXNtIGNvbnN0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmNhbGxlZUZvcldhc21DYXRjaE9mZnNldCk6Cisg
ICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzVHJ5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0FueUNhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzQmxvY2spOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6Q29udHJvbERhdGEpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNUcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNBbnlDYXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpDb250cm9sRGF0YTo6aXNCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2gpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2hBbGwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6dHJ5U3Rh
cnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6dHJ5RW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGE6OnRyeURlcHRoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmNhdGNoS2luZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpleGNlcHRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6c3RhY2tTaXplIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZGlkUG9wVmFsdWVGcm9tU3RhY2sp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRTdGFja01hcCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnRha2VTdGFja21hcHMpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjp0YWtlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpwdXNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
c2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Z2Vu
ZXJhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpmaXh1cFBv
aW50ZXJQbHVzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnJlc3RvcmVX
ZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6aW5zZXJ0RW50cnlTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjppbnNlcnRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRSZWZJc051bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUYWJs
ZUdldCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkUmVmRnVuYyk6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlSW5pdCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRhYmxlQ29weSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6Omdl
dExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0
Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5RmlsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUluaXQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlDb3B5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpnZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpzZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hl
Y2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmVtaXRMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpzdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OnNhbml0aXplQXRvbWljUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNMb2FkT3ApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNMb2FkKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY1N0b3JlT3ApOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNTdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNCaW5hcnlSTVdPcCk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmF0b21pY0JpbmFyeVJNVyk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YXRvbWljTm90aWZ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6dHJ1bmNTYXR1cmF0ZWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRTZWxlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRMb29w
VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkRnJv
bVNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjb25u
ZWN0Q29udHJvbEVudHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
TG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNo
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRG
b3JFeGNlcHRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0
Y2hUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
Q2F0Y2hBbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYXRjaEFs
bFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0
Q2F0Y2hJbXBsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdh
dGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5y
ZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUaHJvdyk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbmRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEVuZFRv
VW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjcmVhdGVD
YWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENh
bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayk6CisgICAgICAgIChKU0M6Oldh
c206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVFeGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
ZW1pdENoZWNrc0Zvck1vZE9yRGl2KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1VPik6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4pOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0ej4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0
ej4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRP
cDxGNjRDb252ZXJ0VUk2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNT
RjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyVHJ1bmNTRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyVHJ1bmNVRjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0Pik6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0Pik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMy
Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNVRjMyPik6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAg
ICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpw
cmVwYXJlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBs
YW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpDYWxsZWU6OmhhbmRsZXJGb3JJbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2Fs
bGVlOjpMTEludENhbGxlZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2FsbGVlOjpsaW5r
RXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6aW5nSklUQ2Fs
bGVlOjpsaW5rRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6
aW5nSklUQ2FsbGVlOjpzdGFja21hcCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVl
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6aGFzRXhjZXB0aW9uSGFuZGxlcnMgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmZ1bmN0aW9uQ29kZUJsb2NrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6T3B0aW1pemluZ0pJVENhbGxlZTo6T3B0aW1pemluZ0pJ
VENhbGxlZSk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V2FzbUNhbGxpbmdDb252ZW50aW9uOjpjYWxsSW5mb3JtYXRpb25Gb3Ig
Y29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0eXBlVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjppc1ZhbGlkRXh0ZXJuYWxLaW5k
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVN0cmluZyk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxv
Y2s6Om51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpGdW5jdGlvbkNvZGVCbG9jazo6ZXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uQ29kZUJsb2NrOjphZGRFeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKiB3
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjppc1RyeU9yQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eGNlcHRpb25JbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20v
V2FzbUhhbmRsZXJJbmZvLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkhhbmRsZXJJ
bmZvOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmhhbmRs
ZXJGb3JJbmRleCk6CisgICAgICAgICogd2FzbS9XYXNtSGFuZGxlckluZm8uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlVubGlua2VkSGFuZGxlckluZm86OlVubGlua2VkSGFuZGxlcklu
Zm8pOgorICAgICAgICAoSlNDOjpXYXNtOjpIYW5kbGVySW5mbzo6dGFnIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmRlbGVnYXRlVGFyZ2V0IGNvbnN0KToKKyAgICAg
ICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojp+SW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmg6CisgICAgICAgIChK
U0M6Oldhc206Okluc3RhbmNlOjphZGRUYWcpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5j
ZTo6dGFnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6dHJ5Xyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6Y2F0Y2hfKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc0xvb3Ap
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmlzQmxv
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
SWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
VHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpp
c0FueUNhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xU
eXBlOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnVuaWZ5
VmFsdWVzV2l0aEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6Ondh
bGtFeHByZXNzaW9uU3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
bWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJz
ZUFuZENvbXBpbGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpMTEludEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpy
ZXBhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNh
bGxlcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRp
b25Gb3JDYWxsZWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZExvb3ApOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21MaW1pdHMuaDoKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5m
b3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmV4Y2Vw
dGlvbkluZGV4U3BhY2VTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb246OmlzSW1wb3J0ZWRFeGNlcHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25z
dCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpzaWduYXR1cmVJbmRl
eEZyb21FeGNlcHRpb25JbmRleFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlSW5mb3JtYXRpb246OmltcG9ydEV4Y2VwdGlvbkNvdW50IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmlzRGVjbGFyZWRFeGNlcHRpb24gY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6YWRkRGVjbGFyZWRFeGNlcHRp
b24pOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9X
YXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAqIHdhc20vV2FzbU9TUkVudHJ5RGF0YS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpPU1JF
bnRyeURhdGE6OnZhbHVlcyk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OmxvYWRWYWx1ZXNJbnRvQnVmZmVyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6ZG9PU1JFbnRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTik6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHdh
c20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFy
c2VyOjpwYXJzZUltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBh
cnNlRXhwb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFeGNl
cHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25zLmg6CisgICAgICAgIChKU0M6Oldh
c206OnZhbGlkYXRlT3JkZXIpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWduYXR1cmVJbmZvcm1h
dGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpzaWduYXR1
cmVGb3IpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpXQVNNX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0
aHMuaDoKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rpb25TaXplKToKKyAgICAg
ICAgKiB3YXNtL1dhc21UYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9XYXNt
VGFnLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdl
bmVyYXRvci5oLgorICAgICAgICAoSlNDOjpXYXNtOjpUYWc6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6Oldhc206OlRhZzo6cGFyYW1ldGVyQ291bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUYWc6OnBhcmFtZXRlciBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6c2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6VGFnOjpUYWcpOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5jcHA6CisgICAg
ICAgICogd2FzbS9XYXNtVGh1bmtzLmg6CisgICAgICAgICogd2FzbS9nZW5lcmF0ZVdhc21CM0lS
R2VuZXJhdG9ySW5saW5lc0hlYWRlci5weToKKyAgICAgICAgKENvZGVHZW5lcmF0b3IuZ2VuZXJh
dGVPcGNvZGUpOgorICAgICAgICAoQ29kZUdlbmVyYXRvci5tYWtlUmVzdWx0KToKKyAgICAgICAg
KENvZGVHZW5lcmF0b3IuZ2VuZXJhdGUpOgorICAgICAgICAqIHdhc20vZ2VuZXJhdGVXYXNtT3Bz
SGVhZGVyLnB5OgorICAgICAgICAodHlwZU1hY3JvaXplcik6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6SlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRp
b246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlv
bjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Z2V0
QXJnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnN1YnNwYWNlRm9y
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6dGFnIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6cGF5bG9hZCBjb25zdCk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjp0b0pTVmFsdWUpOgor
ICAgICAgICAoSlNDOjpmcm9tSlNWYWx1ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRy
eUNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwOgorICAgICAgICAo
SlNDOjpjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKToKKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eVRhZzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6SlNXZWJBc3NlbWJseVRh
Zyk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaC4K
KyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2Fz
bVRvSlMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3I6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAg
ICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OmdldEV4Y2VwdGlv
bik6CisgICAgICAgIChKU0M6OmdldFRhZyk6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1
Y3Rvcjo6Y3JlYXRlVGFnKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
OjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlUYWdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFnUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpnZXRUYWcp
OgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAq
IHdhc20vd2FzbS5qc29uOgorCiAyMDIxLTEwLTA2ICBYYW4gTMOzcGV6ICA8eGFuQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0pTQ11bMzJiaXRdIFJlbW92ZSBhIGJ1bmNoIG9mIGNvbXBpbGVyIHdh
cm5pbmdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYjMyYzMwZjExMGY2
YTI5ZTJjODE2Zjg3YzU1NmExMmZkYmUwZDZjOC4uZmNmMGQ5YjZiZGZiOGFjOGExYjMyNTU3ZDRh
MTlkMWUyZmQwMjZjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTIy
LDYgKzEyMiw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9PQkpFQ1RfTFVUX1NPVVJDRVMKICAgICB3
YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBp
bGVFcnJvckNvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJy
b3JQcm90b3R5cGUuY3BwCisgICAgd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmNwcAorICAgIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwCiAg
ICAgd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMv
V2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0xMzYsNiArMTM4LDggQEAgc2V0KEphdmFTY3JpcHRD
b3JlX09CSkVDVF9MVVRfU09VUkNFUwogICAgIHdhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3JQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3Iu
Y3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAorICAgIHdhc20v
anMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAKKyAgICB3YXNtL2pzL1dlYkFzc2VtYmx5
VGFnUHJvdG90eXBlLmNwcAogKQogCiBzZXQoSmF2YVNjcmlwdENvcmVfRlJBTUVXT1JLUwpAQCAt
NjAzLDYgKzYwNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAKICAgICBiMy9CM0NvbW1vbi5oCiAgICAgYjMvQjNUeXBlLmgKKyAgICBiMy9CM1ZhbHVl
UmVwLmgKIAogICAgIGJpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCiAgICAgYmluZGluZ3Mv
U2NyaXB0T2JqZWN0LmgKQEAgLTEyMjAsNiArMTIyNSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmgKICAgICB3YXNtL1dhc21Gb3JtYXQuaAogICAgIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
LmgKKyAgICB3YXNtL1dhc21IYW5kbGVySW5mby5oCiAgICAgd2FzbS9XYXNtSW5kZXhPck5hbWUu
aAogICAgIHdhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCiAgICAgd2FzbS9XYXNtTWVtb3J5
LmgKQEAgLTEyMjgsMTIgKzEyMzQsMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICB3YXNtL1dhc21Nb2R1bGUuaAogICAgIHdhc20vV2FzbU5hbWUu
aAogICAgIHdhc20vV2FzbU5hbWVTZWN0aW9uLmgKKyAgICB3YXNtL1dhc21PU1JFbnRyeURhdGEu
aAogICAgIHdhc20vV2FzbVBhZ2VDb3VudC5oCiAgICAgd2FzbS9XYXNtU2VjdGlvbnMuaAogICAg
IHdhc20vV2FzbVNpZ25hdHVyZS5oCiAgICAgd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuaAog
ICAgIHdhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5oCiAgICAgd2FzbS9XYXNtVGllclVwQ291bnQu
aAorICAgIHdhc20vV2FzbVZhbHVlTG9jYXRpb24uaAogCiAgICAgd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmgKICAgICB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCAy
ODg1YjUxMDE3Y2MxYWUzZDg5MmVmM2M1ZjI3YTRiMTIzNzUzODQyLi4wNmIyMTc1MTJjNmZiYzJk
ODUyNzI0YWFhNzZmYTU3OTRlM2RhZDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTk3LDYgKzE5Nyw4IEBA
ICQoUFJPSkVDVF9ESVIpL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CiAkKFBST0pFQ1Rf
RElSKS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dl
YkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNt
L2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAorJChQUk9KRUNUX0RJUikv
d2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAorJChQUk9KRUNUX0RJ
Uikvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAKICQoUFJPSkVDVF9E
SVIpL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAKICQoUFJPSkVDVF9E
SVIpL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCiAkKFBST0pFQ1RfRElS
KS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTIxMSw2ICsy
MTMsOCBAQCAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29u
c3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yUHJvdG90eXBlLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
Q29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQ
cm90b3R5cGUuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBl
LmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS93YXNtLmpzb24KICQoUFJPSkVDVF9ESVIpL3lhcnIv
Y3JlYXRlX3JlZ2V4X3RhYmxlcwogJChQUk9KRUNUX0RJUikveWFyci9nZW5lcmF0ZVlhcnJDYW5v
bmljYWxpemVVbmljb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggMmFkMjEzMWM1ODY2OWJkMDU3NWM3YWY0
MGE2YzQyN2E1OTRmNWMzZS4uY2IwNWQ4MjE2MmFkOWM0Y2ZmNjRjYTE4Y2FlYWUxODcxYmVjNmY2
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdApAQCAtODIsNiArODIsOCBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2FzbUxMSW50R2VuZXJhdG9ySW5saW5lcy5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2Fz
bU9wcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENv
cmUvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaAogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5Q29tcGls
ZUVycm9yUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaAor
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFz
c2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5s
dXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3Jl
L1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmx1dC5oCkBAIC05Niw2ICs5OCw4IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0CiAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3JQcm90b3R5cGUubHV0LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9X
ZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5sdXQu
aAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dl
YkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCmluZGV4IGVjYmNlNjdmNzhjMDAzNGMxNjZmNTBkNTg5MmE2ZjA4YzVk
YTQwZDYuLjc4OTc1NmYxMGY4YmRiODBjNTJmNGJlOTgwZjUzZjQ5MmEyZDFkNGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yMDMsNiArMjAzLDggQEAg
T0JKRUNUX0xVVF9IRUFERVJTID0gXAogICAgIFRlbXBvcmFsVGltZVpvbmVQcm90b3R5cGUubHV0
LmggXAogICAgIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggXAogICAg
IFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJs
eUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJseUV4Y2VwdGlvblBy
b3RvdHlwZS5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5sdXQuaCBc
CiAgICAgV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUubHV0LmggXAogICAgIFdlYkFzc2VtYmx5
SW5zdGFuY2VDb25zdHJ1Y3Rvci5sdXQuaCBcCkBAIC0yMTcsNiArMjE5LDggQEAgT0JKRUNUX0xV
VF9IRUFERVJTID0gXAogICAgIFdlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmx1dC5o
IFwKICAgICBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0LmggXAogICAgIFdlYkFzc2Vt
Ymx5VGFibGVQcm90b3R5cGUubHV0LmggXAorICAgIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3Iu
bHV0LmggXAorICAgIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oIFwKICMKIAogJChPQkpF
Q1RfTFVUX0hFQURFUlMpOiAlLmx1dC5oIDogJS5jcHAgJChKYXZhU2NyaXB0Q29yZSkvY3JlYXRl
X2hhc2hfdGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGMzNTU0NTBkMjRm
NjlhOGM5MThmYmQzOTA1YjQyYmNiOTUwNzkzOC4uODg4OWIxMGZmMjI3YWMxNzQ5MTVjMWFkNTcx
ZWMzMzNhN2ExY2E0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY2Myw3ICs2
NjMsNyBAQAogCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovOyB9OwogCQkwRkVDODU0MjFCREFDREFDMDA4
MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLzsg
fTsKIAkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmggKi87IH07Ci0JCTBGRUM4NTQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlUmVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oICovOyB9OworCQkwRkVDODU0
NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVSZXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xv
cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3Jpbmcu
aCAqLzsgfTsKIAkJMEZFQzg1NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckFyZy5oICovOyB9OwogCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyog
QWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLzsgfTsK
QEAgLTc5Niw2ICs3OTYsNyBAQAogCQkxNDc4Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxl
VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NkZBNUE4MTM3OEY2QjAwMDM2MjdBMyAvKiBIYW5kbGVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVB
NCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3QjgzQUEwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNo
ZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5
U2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
Qjg0NjIwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0ODUyMUQ4MjZFQUVCRkUwMEND
MUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlcklu
Zm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NDg2QThDMDI0QUJFRDQ4MDA3MzkyMkQgLyogSlNMb2NrUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NkE4QkYyNEFCRUQzQzAwNzM5
MjJEIC8qIEpTTG9ja1JlZlByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NzRBRTIx
NUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDhBN0JGMDFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5l
Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDhBN0JFRTFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2FsbEZyYW1lLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNyw2ICs4MjgsMTMg
QEAKIAkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0E5NThB
MTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDQTk1OEQxNkFCNTBGQTAw
OTM4QTA2IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNEQwMUE3NzIxRkIzNTFGMDBCQzU0RTkgLyogSlNTY3JpcHRTb3Vy
Y2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTREMDFBNzYyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCAq
LzsgfTsKKwkJMTREMDFCRTYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
RDAxQkRBMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi87
IH07CisJCTE0RDAxQkU3MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFC
REIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggKi87IH07CisJ
CTE0RDAxQkU5MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFC
REQyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggKi87
IH07CisJCTE0RDAxQkVDMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJFMDI2REVF
RjM3MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5oICovOyB9OworCQkxNEQwMUJFRDI2REVF
RjM4MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCRTEyNkRFRUYzODAwQ0FFMEQwIC8q
IEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLzsgfTsKKwkJMTREMDFCRUYyNkRFRUYzODAwQ0FF
MEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkUzMjZERUVGMzgwMENBRTBEMCAv
KiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi87IH07CisJCTE0RDAxQkY1MjZE
RUVGNTMwMENBRTBEMCAvKiBXYXNtVGFnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICov
OyB9OwogCQkxNEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDJGM0Q5MTM5RjRCRTIw
MDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9w
ZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNERGMDREOTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RTg0
RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlBMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFr
QmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTI2NCw3ICsxMjcyLDcgQEAKIAkJODYyODFFRjAyNUI2MTYwMDAwMzY3MDA0IC8qIENoZWNr
UHJpdmF0ZUJyYW5kVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODYyODFFRUYyNUI2MTYwMDAwMzY3MDA0IC8qIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudC5oICovOyB9OwogCQk4NjI4MUVGNDI1QjYxQUYwMDAzNjcwMDQgLyogQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2MjgxRUYzMjVCNjFBRjAwMDM2NzAwNCAvKiBDaGVja1ByaXZhdGVCcmFuZFN0YXR1
cy5oICovOyB9OwogCQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NjNCMjNERjBGQzYwRTYyMDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJODYzRkJDNUEyNUIw
OTNCOTAwRjZDOTMwIC8qIFdhc21WYWx1ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjNGQkM1ODI1QjA5M0I5MDBGNkM5MzAgLyogV2Fz
bVZhbHVlTG9jYXRpb24uaCAqLzsgfTsKKwkJODYzRkJDNUEyNUIwOTNCOTAwRjZDOTMwIC8qIFdh
c21WYWx1ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NjNGQkM1ODI1QjA5M0I5MDBGNkM5MzAgLyogV2FzbVZhbHVlTG9jYXRpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjVBMzBG
MTEzNTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5RSAv
KiBKU0NKU1ZhbHVlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTg2NURBMEM1MjVCODk1NzQwMDg3NTc3MiAvKiBTZXRQcml2YXRlQnJh
bmRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NjVEQTBDNDI1Qjg5NTc0MDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oICov
OyB9OwogCQk4NjVEQTBDODI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjVEQTBD
NzI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmggKi87IH07CkBAIC0x
OTM3LDcgKzE5NDUsNyBAQAogCQlFM0JGQTVEMDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJl
ZEdsb2JhbFByb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFM0JGQTVDRDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJlZEdsb2JhbFByb3Bl
cnR5LmggKi87IH07CiAJCUUzQkZEMEJDMURBRjgwOEUwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25p
cHBldFBhcmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTNCRkQwQkExREFGODA3QzAwNjVERUEyIC8qIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmgg
Ki87IH07CiAJCUUzQzI5NUREMUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5n
ZUFkYXB0aXZlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTNDMjk1REMxRUQyQ0JBQTAwRDMwMTZGIC8qIE9iamVjdFByb3BlcnR5Q2hh
bmdlQWRhcHRpdmVXYXRjaHBvaW50LmggKi87IH07Ci0JCUUzQzY5NEIzMjMwMjY4NzcwMDZGQkU0
MiAvKiBXYXNtT1NSRW50cnlEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFM0M2OTRCMTIzMDI2ODczMDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5RGF0
YS5oICovOyB9OworCQlFM0M2OTRCMzIzMDI2ODc3MDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5RGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNDNjk0
QjEyMzAyNjg3MzAwNkZCRTQyIC8qIFdhc21PU1JFbnRyeURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFM0M3M0E5MTI1QkZBNzNCMDBFRkUz
MDMgLyogV2FzbVN0cmVhbWluZ1BsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzQzczQTkwMjVCRkE3MzQwMEVGRTMwMyAvKiBXYXNtU3RyZWFtaW5n
UGxhbi5oICovOyB9OwogCQlFM0M3OUNBQjFEQjlBNERDMDBEMUVDQTQgLyogRE9NSklURWZmZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0M3OUNB
QTFEQjlBNEQ2MDBEMUVDQTQgLyogRE9NSklURWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTNDOEVENDMyM0ExREJDQjAwMTMxOTU4IC8q
IElzb0lubGluZWRIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzQzhFRDQyMjNBMURCQzUwMDEzMTk1OCAvKiBJc29JbmxpbmVkSGVh
cENlbGxUeXBlLmggKi87IH07CkBAIC0zNDYxLDYgKzM0NjksOCBAQAogCQkxNDgyQjc4QTBBNDMw
NUFCMDA1MTdDRkMgLyogQVBJQ2FzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBUElDYXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODJCN0UxMEE0MzA3
NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU09iamVjdFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDgyQjdF
MjBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNPYmplY3RSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNDg1MjFENTI2RUFFQkRGMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21IYW5kbGVySW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUhhbmRsZXJJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODZBOEJFMjRBQkVEM0IwMDczOTIyRCAvKiBK
U0xvY2tSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNMb2NrUmVmLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4NkE4QkYyNEFCRUQzQzAwNzM5MjJEIC8qIEpTTG9ja1Jl
ZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNMb2NrUmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Njb3BlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1NDQsNiArMzU1NCwyMCBAQAogCQkxNENDM0JB
MjIxMzhBMjM4MDAyRDU4QjYgLyogSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5zdHJ1Y3Rpb25TdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTREMDFBNzUyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJv
dmlkZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQwMUE3NjIxRkIzNTAzMDBCQzU0RTkg
LyogSlNTY3JpcHRTb3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdFNvdXJj
ZVByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRBMjZERUVG
MzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaDsgcGF0aCA9IGpz
L1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTREMDFCREIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFnUHJvdG90eXBl
Lmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxNEQwMUJEQzI2REVFRjM3MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJERDI2REVFRjM3MDBDQUUwRDAg
LyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaDsgcGF0aCA9IGpzL1dl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTE0RDAxQkRFMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFn
Q29uc3RydWN0b3IuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRGMjZERUVGMzcwMENBRTBEMCAv
KiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHA7IHBhdGggPSBqcy9XZWJBc3Nl
bWJseVRhZ1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAx
QkUwMjZERUVGMzcwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlUYWcuaDsgcGF0aCA9IGpzL0pTV2ViQXNz
ZW1ibHlUYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRTEyNkRFRUYz
ODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJF
MjI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJFMzI2REVFRjM4MDBDQUUwRDAg
LyogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmg7IHBhdGggPSBq
cy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0RDAxQkU0MjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlUYWcu
Y3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseVRhZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0RDAxQkU1MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlv
bkNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlF
eGNlcHRpb25Db25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0
RDAxQkYyMjZERUVGNTIwMENBRTBEMCAvKiBXYXNtVGFnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UYWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRTcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUgLyogQ0xvb3BTdGFjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTG9vcFN0YWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0RDg1Nzc0MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gdGVzdGFwaS5qczsgcGF0aCA9
IEFQSS90ZXN0cy90ZXN0YXBpLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE1
NSw2ICs3MTc5LDggQEAKIAkJCQkxNDg3Q0UxNjIzNzc0MTAwMDA0NDQyOUMgLyogV2FzbUdlbmVy
YXRvclRyYWl0cy5oICovLAogCQkJCUUzODM1MDA4MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNtR2xv
YmFsLmNwcCAqLywKIAkJCQlFMzgzNTAwOTIzOTBEOTM3MDAzNjMxNkQgLyogV2FzbUdsb2JhbC5o
ICovLAorCQkJCTE0ODUyMUQ1MjZFQUVCREYwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uY3Bw
ICovLAorCQkJCTE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCAq
LywKIAkJCQlBRDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmNwcCAq
LywKIAkJCQlBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi8s
CiAJCQkJQUQ1QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8sCkBA
IC03MjEyLDYgKzcyMzgsOCBAQAogCQkJCUUzQzczQTkwMjVCRkE3MzQwMEVGRTMwMyAvKiBXYXNt
U3RyZWFtaW5nUGxhbi5oICovLAogCQkJCUFENUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUu
aCAqLywKKwkJCQkxNEQwMUJGMjI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5jcHAgKi8sCisJ
CQkJMTREMDFCRjMyNkRFRUY1MjAwQ0FFMEQwIC8qIFdhc21UYWcuaCAqLywKIAkJCQk1MjUwRDJD
RjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCiAJCQkJNTI1MEQyRDAxRThE
QTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLywKIAkJCQlFM0M2OTRCMjIzMDI2ODc0MDA2
RkJFNDIgLyogV2FzbVRpZXJVcENvdW50LmNwcCAqLywKQEAgLTkwOTcsNiArOTEyNSw4IEBACiAJ
CQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAq
LywKIAkJCQlBRDJGQ0JBNjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvci5jcHAgKi8sCiAJCQkJQUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3IuaCAqLywKKwkJCQkxNEQwMUJEQzI2REVFRjM3MDBDQUUwRDAgLyogSlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHAgKi8sCisJCQkJMTREMDFCRTEyNkRFRUYzODAwQ0FFMEQw
IC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLywKIAkJCQlFM0JGM0M0QzIzOTBEMUUzMDA4
QkM3NTIgLyogSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAgKi8sCiAJCQkJRTNCRjNDNEIyMzkwRDFF
MjAwOEJDNzUyIC8qIEpTV2ViQXNzZW1ibHlHbG9iYWwuaCAqLywKIAkJCQk3OTZGQjQzOTFERkY4
QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCAqLywKQEAgLTkxMTIsMTIgKzkx
NDIsMTggQEAKIAkJCQlBRDJGQ0JBRDFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvci5oICovLAogCQkJCUFEMkZDQkFFMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5VGFibGUuY3BwICovLAogCQkJCUFEMkZDQkFGMURCNThEQTQwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5VGFibGUuaCAqLywKKwkJCQkxNEQwMUJFNDI2REVFRjM4MDBDQUUwRDAgLyogSlNX
ZWJBc3NlbWJseVRhZy5jcHAgKi8sCisJCQkJMTREMDFCRTAyNkRFRUYzNzAwQ0FFMEQwIC8qIEpT
V2ViQXNzZW1ibHlUYWcuaCAqLywKIAkJCQlBREQwOUFFRjFGNUY2MjNGMDAxMzEzQzIgLyogV2Fz
bVRvSlMuY3BwICovLAogCQkJCUFERDA5QUVFMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5o
ICovLAogCQkJCUFEMkZDQkIwMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVF
cnJvckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBRDJGQ0JCMTFEQjU4REE0MDBCM0U3MzYgLyog
V2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUFEMkZDQkIyMURC
NThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAgKi8s
CiAJCQkJQUQyRkNCQjMxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9y
UHJvdG90eXBlLmggKi8sCisJCQkJMTREMDFCRTUyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2Vt
Ymx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTE0RDAxQkUzMjZERUVGMzgwMENB
RTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi8sCisJCQkJMTREMDFC
RTIyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcCAq
LywKKwkJCQkxNEQwMUJERDI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUuaCAqLywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb24uaCAqLywKIAkJCQk1MjEzMjI0MzFFQ0JDRTgyMDBGNjU2MTUgLyogV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwICovLApAQCAtOTE1Miw2ICs5MTg4LDEwIEBACiAJCQkJ
QUQyRkNCQzExREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5o
ICovLAogCQkJCUFEMkZDQkMyMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmNwcCAqLywKIAkJCQlBRDJGQ0JDMzFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZS5oICovLAorCQkJCTE0RDAxQkRFMjZERUVGMzcwMENBRTBEMCAvKiBX
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQkxNEQwMUJEQTI2REVFRjM3MDBD
QUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oICovLAorCQkJCTE0RDAxQkRGMjZE
RUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgKi8sCisJCQkJMTRE
MDFCREIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggKi8sCiAJ
CQkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmNwcCAqLywKIAkJCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLywKIAkJCSk7CkBAIC0xMDQwMiw2ICsxMDQ0Miw3IEBACiAJCQkJQUQ1
QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFMzFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRUQyNkRFRUYzODAw
Q0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUz
QkYzQzREMjM5MEQxRTgwMDhCQzc1MiAvKiBKU1dlYkFzc2VtYmx5R2xvYmFsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBl
cnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTA0MTAsNiArMTA0NTEsNyBA
QAogCQkJCUFEMkZDQzA1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5TW9kdWxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFOTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRUIxREI1OERBRDAw
QjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFC
RUMyNkRFRUYzODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlUYWcuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDgzNyw2ICsxMDg3OSw3IEBACiAJCQkJMTQ1MEZBMUMy
MzU3QkRCRTAwOTNDRDREIC8qIFdhc21GdW5jdGlvbkNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTM4MzUwMEEyMzkwRDkzQjAwMzYzMTZEIC8qIFdhc21HbG9iYWwu
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0ODUyMUQ4MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFu
ZGxlckluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAv
KiBXYXNtSW5kZXhPck5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkUyMUY2OTlFQzAw
MDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMDA2NTlFMUVD
QUM4MTIwMDBDQTkyNiAvKiBXYXNtTGltaXRzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwODY3LDYg
KzEwOTEwLDcgQEAKIAkJCQlFM0EwNTMxQTIxMzQyQjY4MDAyMkVDMTQgLyogV2FzbVN0cmVhbWlu
Z1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDNzNBOTEyNUJGQTczQjAwRUZFMzAzIC8q
IFdhc21TdHJlYW1pbmdQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkx
MDAwQkNBQUYgLyogV2FzbVRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJGNTI2REVF
RjUzMDBDQUUwRDAgLyogV2FzbVRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIxRThE
QTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRTlFMEFG
MUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDg5OCw2ICsxMDk0Miw4IEBACiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDJGQ0JFRjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzE3MURCNTlDQjIwMEIzRTczNiAvKiBX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTE0RDAxQkVGMjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJFOTI2REVFRjM4MDBDQUUwRDAgLyogV2Vi
QXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENDkzN0Q0
MURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MjEzMjI0NjFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUzQkYzQzUzMjM5MEQyMDUwMDhCQzc1MiAvKiBXZWJBc3Nl
bWJseUdsb2JhbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEwOTI1LDYgKzEwOTcx
LDggQEAKIAkJCQlBRDJGQ0MyMDFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRkYxREI1OERBRDAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
MkZDQzIxMURCNTlDQjIwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRTYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RDAxQkU3MjZERUVGMzgw
MENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ3QTBFMTZGNUNEMDBCMzQ0NjAgLyogV2ViS2l0QXZh
aWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBNjFCRDU5OTMxMDBGNDU3NUMg
Lyogd2tidWlsdGlucy5weSBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CmluZGV4IGE4NTk3M2U3ZWRjZTFiODM3MTFlMDI5MTk3MmEzMWE0NDZhZjg1MTAuLmYwNDQ1MWQw
MzhkYjMwYzc1MWY0NmE5YTRkNzQ4NjNjYjZiMmQ4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKQEAgLTEwNzksNiArMTA3OSw3IEBAIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5j
cHAKIHdhc20vV2FzbUZvcm1hdC5jcHAKIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmNwcAog
d2FzbS9XYXNtR2xvYmFsLmNwcAord2FzbS9XYXNtSGFuZGxlckluZm8uY3BwCiB3YXNtL1dhc21J
bmRleE9yTmFtZS5jcHAKIHdhc20vV2FzbUluc3RhbmNlLmNwcAogd2FzbS9XYXNtSW5zdGFuY2Uu
aApAQCAtMTEwNSw2ICsxMTA2LDcgQEAgd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuY3BwCiB3
YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCiB3YXNtL1dhc21TdHJlYW1pbmdQbGFuLmNwcAog
d2FzbS9XYXNtVGFibGUuY3BwCit3YXNtL1dhc21UYWcuY3BwCiB3YXNtL1dhc21UaHVua3MuY3Bw
CiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHAKIHdhc20vV2FzbVZhbHVlTG9jYXRpb24uY3BwCkBA
IC0xMTE2LDYgKzExMTgsNyBAQCB3YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHkuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwCit3YXNtL2pzL0pTV2ViQXNzZW1i
bHlFeGNlcHRpb24uY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUxpbmtFcnJv
ci5jcHAKQEAgLTExMjMsMTAgKzExMjYsMTMgQEAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5
LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCit3YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWcuY3BwCiB3YXNtL2pzL1dhc21Ub0pTLmNwcAogd2FzbS9qcy9X
YXNtVG9KUy5oCiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3Bw
CiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAord2FzbS9qcy9X
ZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAord2FzbS9qcy9XZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvdHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKIHdh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5R2xv
YmFsQ29uc3RydWN0b3IuY3BwCkBAIC0xMTQ0LDYgKzExNTAsOCBAQCB3YXNtL2pzL1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yUHJvdG90eXBlLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3Iu
Y3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCit3YXNtL2pzL1dlYkFz
c2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwCit3YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBl
LmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKIAogeWFyci9SZWd1
bGFyRXhwcmVzc2lvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCmluZGV4IDhjYzU1MTU2YjU3YWJjZTQ5Y2VhYjk4MmMzMTQ3YTk4ODlkMTRm
NTYuLmJlMmU4YzgxMWQ2ZGRkMGMxODRiYTVlZDRkOTU3OTM2ZmQyMjU4YTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtMTgzOSw0ICsx
ODM5LDM2IEBAIG9wIDphdG9taWNfZmVuY2UsCiAgICAgYXJnczogewogICAgIH0KIAorb3AgOnRo
cm93LAorICAgIGFyZ3M6IHsKKyAgICAgICAgZXhjZXB0aW9uSW5kZXg6IHVuc2lnbmVkLAorICAg
ICAgICBmaXJzdFZhbHVlOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgfQorCitvcCA6cmV0aHJvdywK
KyAgICBhcmdzOiB7CisgICAgICAgIGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0K
Kworb3BfZ3JvdXAgOkNhdGNoLAorICAgIFsKKyAgICAgICAgOmNhdGNoLAorICAgICAgICA6Y2F0
Y2hfbm9fdGxzLAorICAgIF0sCisgICAgYXJnczogeworICAgICAgICBleGNlcHRpb25JbmRleDog
dW5zaWduZWQsCisgICAgICAgIGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBh
cmd1bWVudENvdW50OiB1bnNpZ25lZCwKKyAgICAgICAgc3RhcnRPZmZzZXQ6IHVuc2lnbmVkLAor
ICAgIH0KKworb3BfZ3JvdXAgOkNhdGNoQWxsLAorICAgIFsKKyAgICAgICAgOmNhdGNoX2FsbCwK
KyAgICAgICAgOmNhdGNoX2FsbF9ub190bHMsCisgICAgXSwKKyAgICBhcmdzOiB7CisgICAgICAg
IGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0KKwogZW5kX3NlY3Rpb24gOldhc20K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKaW5kZXggMDFk
ZGNmOTY5OWI0ODAyOWExYmQ4YmVlNDAzNDkwNDc5YTFmOWQ3Zi4uNjZkZjA5OTlmMjFiMjc0ZTA5
OTliYjVhMzg1MjM0ZDE0NTE1Yzk4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0hhbmRsZXJJbmZvLmgKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWVudW0gY2xhc3MgSGFuZGxlclR5cGUgeworZW51bSBjbGFzcyBIYW5kbGVyVHlwZSA6IHVpbnQ4
X3QgewogICAgIENhdGNoID0gMCwKICAgICBGaW5hbGx5ID0gMSwKICAgICBTeW50aGVzaXplZENh
dGNoID0gMiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgK
aW5kZXggNjgwZTk0MDFkYzYxZmY2M2RjYjVkNWU2ZjlkZWJlYzQwNjg4YjQ0OS4uNTFmMWQwMmUx
ODI1NThjOWMyOTEyZDg0MGM1ODgxMDQ4Y2E4MDFkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cyA9IEpTT3Bjb2RlVHJhaXRzPgogICAgIGNvbnN0IGNo
YXIqIG5hbWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFRyYWl0czo6b3Bjb2RlTmFt
ZXNbb3Bjb2RlSUQoKV07CisgICAgICAgIHJldHVybiBUcmFpdHM6Om9wY29kZU5hbWVzW29wY29k
ZUlEPFRyYWl0cz4oKV07CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzID0g
SlNPcGNvZGVUcmFpdHM+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCmluZGV4IDYzZmY0ZWVjZTYyNmI1ZDhkZmRlYzBjNzIzYTFjZDc0ODg3MWJj
NWEuLjllZGY1OWI5Njg2YTVhZDZjZWE4MzgzZjc0MzMzMzYwYTE5YzZkNDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC0xMzAsNyAr
MTMwLDggQEAgdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0
KCkgY29uc3QKIAogQnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgoKSBjb25z
dAogewotICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOworICAgIGlmIChjYWxsZWUoKS5p
c1dhc20oKSkKKyAgICAgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCk7
CiAgICAgaWYgKCFjb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoMCk7
CiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgKaW5kZXggMWNhYjIyNWJjZTAzOGQ4ZmU1ZTFjNDU4OTAzZmYzOWQ5NTZm
ZmY0YS4uZDg2NGEyNjhjZDdjYjUwNWE0MTMzZTM3MGNjMzM5ZDk1ODQyOWE0YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApAQCAtNDQsNiArNDQs
MTEgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIGNsYXNzIENhbGxTaXRlSW5kZXggewogICAgIHB1
YmxpYzoKICAgICAgICAgQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsKKworICAgICAgICBDYWxs
U2l0ZUluZGV4KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgICAgIDog
bV9iaXRzKGRlbGV0ZWRWYWx1ZSgpLmJpdHMoKSkKKyAgICAgICAgeworICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKICAgICAgICAgICAgIDogbV9iaXRzKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpCkBA
IC01NywxMyArNjIsMjUgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2JpdHM7IH0KICAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2JpdHMg
PT0gb3RoZXIubV9iaXRzOyB9CiAKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0
dXJuIGludEhhc2gobV9iaXRzKTsgfQorICAgICAgICBzdGF0aWMgQ2FsbFNpdGVJbmRleCBkZWxl
dGVkVmFsdWUoKSB7IHJldHVybiBmcm9tQml0cyhzX2ludmFsaWRJbmRleCAtIDEpOyB9CisgICAg
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9
PSBkZWxldGVkVmFsdWUoKTsgfQorCiAgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJl
dHVybiBtX2JpdHM7IH0KICAgICAgICAgc3RhdGljIENhbGxTaXRlSW5kZXggZnJvbUJpdHModWlu
dDMyX3QgYml0cykgeyByZXR1cm4gQ2FsbFNpdGVJbmRleChiaXRzKTsgfQogCiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgo
Yml0cygpKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgQnl0
ZWNvZGVJbmRleCgpLm9mZnNldCgpIH07CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMy
X3Qgc19pbnZhbGlkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7
CisKKyAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgc19pbnZhbGlkSW5kZXggfTsKKyAgICB9Owor
CisgICAgc3RydWN0IENhbGxTaXRlSW5kZXhIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgQ2FsbFNpdGVJbmRleCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENhbGxTaXRlSW5kZXgmIGEsIGNvbnN0IENh
bGxTaXRlSW5kZXgmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogICAgIH07CiAK
ICAgICBjbGFzcyBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4
IHsKQEAgLTMzMiwzICszNDksMTUgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0Zyb21KU0Nv
ZGUodm9pZCogcmV0dXJuQWRkcmVzcyk7CiAKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVz
cGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkNhbGxTaXRlSW5kZXg+IDogSlNDOjpD
YWxsU2l0ZUluZGV4SGFzaCB7IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNo
VHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkNhbGxTaXRlSW5kZXg+
IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6Q2FsbFNpdGVJbmRleD4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCmluZGV4IDkxMjZlZjU1OWYzNTMxMjUyZWI0ZGQ1MjllZGI0N2QzY2VmYWJh
M2MuLjljYWM0MGE2NjEyYzMxNmE4ZWFmMWFhNjJiODlmNDFhNTZmYjRiZDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtNTIs
NiArNTIsNyBAQAogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJK
U01vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAi
TGl0ZXJhbFBhcnNlci5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKQEAg
LTUxMiwxNSArNTEzLDYzIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbm90aWZ5RGVidWdn
ZXJPZlVud2luZGluZyhWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgfQogfQogCitD
YXRjaEluZm86OkNhdGNoSW5mbyhjb25zdCBIYW5kbGVySW5mbyogaGFuZGxlciwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit7CisgICAgbV92YWxpZCA9ICEhaGFuZGxlcjsKKyAgICBpZiAobV92YWxp
ZCkgeworICAgICAgICBtX3R5cGUgPSBoYW5kbGVyLT50eXBlKCk7CisjaWYgRU5BQkxFKEpJVCkK
KyAgICAgICAgbV9uYXRpdmVDb2RlID0gaGFuZGxlci0+bmF0aXZlQ29kZTsKKyNlbmRpZgorCisg
ICAgICAgIC8vIGhhbmRsZXItPnRhcmdldCBpcyBtZWFuaW5nbGVzcyBmb3IgZ2V0dGluZyBhIGNv
ZGUgb2Zmc2V0IHdoZW4gY2F0Y2hpbmcKKyAgICAgICAgLy8gdGhlIGV4Y2VwdGlvbiBpbiBhIERG
Ry9GVEwgZnJhbWUuIFRoaXMgYnl0ZWNvZGUgdGFyZ2V0IG9mZnNldCBjb3VsZCBiZQorICAgICAg
ICAvLyBzb21ldGhpbmcgdGhhdCdzIGluIGFuIGlubGluZWQgZnJhbWUsIHdoaWNoIG1lYW5zIGFu
IGFycmF5IGFjY2VzcworICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNvZGUgb2Zmc2V0IGluIHRo
ZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKKyAgICAgICAgLy8gYW5kIGNh
biBjYXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhpdHMgdG8gaGFuZGxlci0+
dGFyZ2V0CisgICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCisgICAgICAgIGlmICghSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKKyAgICAgICAgICAg
IG1fY2F0Y2hQQ0ZvckludGVycHJldGVyID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdCho
YW5kbGVyLT50YXJnZXQpLnB0cigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NhdGNo
UENGb3JJbnRlcnByZXRlciA9IG51bGxwdHI7CisgICAgfQorfQorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorQ2F0Y2hJbmZvOjpDYXRjaEluZm8oY29uc3QgV2FzbTo6SGFuZGxlckluZm8qIGhh
bmRsZXIsIGNvbnN0IFdhc206OkNhbGxlZSogY2FsbGVlKQoreworICAgIG1fdmFsaWQgPSAhIWhh
bmRsZXI7CisgICAgaWYgKG1fdmFsaWQpIHsKKyAgICAgICAgbV90eXBlID0gSGFuZGxlclR5cGU6
OkNhdGNoOworICAgICAgICBtX25hdGl2ZUNvZGUgPSBoYW5kbGVyLT5tX25hdGl2ZUNvZGU7Cisg
ICAgICAgIGlmIChjb25zdCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bGVlLT5mdW5jdGlvbkNvZGVCbG9jaygpKQorICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJw
cmV0ZXIgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPm1fdGFyZ2V0KS5w
dHIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXIg
PSBudWxscHRyOworICAgIH0KK30KKyNlbmRpZgorCiBjbGFzcyBVbndpbmRGdW5jdG9yIHsKIHB1
YmxpYzoKLSAgICBVbndpbmRGdW5jdG9yKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBi
b29sIGlzVGVybWluYXRpb24sIENvZGVCbG9jayomIGNvZGVCbG9jaywgSGFuZGxlckluZm8qJiBo
YW5kbGVyKQorICAgIFVud2luZEZ1bmN0b3IoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUs
IGJvb2wgaXNUZXJtaW5hdGlvbiwgSlNWYWx1ZSB0aHJvd25WYWx1ZSwgQ29kZUJsb2NrKiYgY29k
ZUJsb2NrLCBDYXRjaEluZm8mIGhhbmRsZXIpCiAgICAgICAgIDogbV92bSh2bSkKICAgICAgICAg
LCBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCiAgICAgICAgICwgbV9pc1Rlcm1pbmF0aW9uKGlzVGVy
bWluYXRpb24pCiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAgICAsIG1f
aGFuZGxlcihoYW5kbGVyKQogICAgIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAg
IGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7CisgICAgICAgICAgICBpZiAoSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbiogd2FzbUV4Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbio+KG1fdm0sIHRocm93blZhbHVlKSkgeworICAgICAgICAgICAgICAgIG1fY2F0Y2hhYmxl
RnJvbVdhc20gPSB0cnVlOworICAgICAgICAgICAgICAgIG1fd2FzbVRhZyA9ICZ3YXNtRXhjZXB0
aW9uLT50YWcoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoRXJyb3JJbnN0YW5jZSogZXJyb3Ig
PSBqc0R5bmFtaWNDYXN0PEVycm9ySW5zdGFuY2UqPihtX3ZtLCB0aHJvd25WYWx1ZSkpCisgICAg
ICAgICAgICAgICAgbV9jYXRjaGFibGVGcm9tV2FzbSA9IGVycm9yLT5pc0NhdGNoYWJsZUZyb21X
YXNtKCk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTSh0aHJvd25WYWx1
ZSk7CisjZW5kaWYKICAgICB9CiAKICAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigp
KFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKQEAgLTUyOSwxOSArNTc4LDMyIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9jYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKICAgICAgICAg
bV9jb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKIAotICAgICAgICBtX2hhbmRsZXIg
PSBudWxscHRyOworICAgICAgICBtX2hhbmRsZXIubV92YWxpZCA9IGZhbHNlOwogICAgICAgICBp
ZiAobV9jb2RlQmxvY2spIHsKICAgICAgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhhbmRsZXIodmlzaXRvciwg
bV9jb2RlQmxvY2ssIFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1faGFuZGxlcikKKyAgICAgICAgICAgICAgICBtX2hhbmRsZXIgPSB7IGZpbmRFeGNl
cHRpb25IYW5kbGVyKHZpc2l0b3IsIG1fY29kZUJsb2NrLCBSZXF1aXJlZEhhbmRsZXI6OkFueUhh
bmRsZXIpLCBtX2NvZGVCbG9jayB9OworICAgICAgICAgICAgICAgIGlmIChtX2hhbmRsZXIubV92
YWxpZCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgICAg
ICBpZiAodmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRv
KiBqc1RvV2FzbUlDQ2FsbGVlID0ganNEeW5hbWljQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4obV92
bSwgdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkpKQorICAgICAgICBDYWxsZWVCaXRzIGNhbGxl
ZSA9IHZpc2l0b3ItPmNhbGxlZSgpOworICAgICAgICBpZiAoY2FsbGVlLmlzQ2VsbCgpKSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byoganNUb1dhc21JQ0NhbGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNU
b1dhc21JQ0NhbGxlZSo+KG1fdm0sIGNhbGxlZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICAgICAg
bV92bS53YXNtQ29udGV4dC5zdG9yZShqc1RvV2FzbUlDQ2FsbGVlLT5mdW5jdGlvbigpLT5wcmV2
aW91c0luc3RhbmNlKG1fY2FsbEZyYW1lKSwgbV92bS5zb2Z0U3RhY2tMaW1pdCgpKTsKKworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fY2F0Y2hhYmxlRnJvbVdhc20gJiYgY2FsbGVlLmlzV2Fz
bSgpKSB7CisgICAgICAgICAgICBXYXNtOjpDYWxsZWUqIHdhc21DYWxsZWUgPSBjYWxsZWUuYXNX
YXNtQ2FsbGVlKCk7CisgICAgICAgICAgICBpZiAod2FzbUNhbGxlZS0+aGFzRXhjZXB0aW9uSGFu
ZGxlcnMoKSkgeworICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0
YW5jZSA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihtX2NhbGxGcmFtZS0+dGhpc1Zh
bHVlKCkpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9
IG1fY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOworICAgICAgICAgICAgICAgIG1f
aGFuZGxlciA9IHsgd2FzbUNhbGxlZS0+aGFuZGxlckZvckluZGV4KGpzSW5zdGFuY2UtPmluc3Rh
bmNlKCksIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgbV93YXNtVGFnKSwgd2FzbUNhbGxlZSB9Owor
ICAgICAgICAgICAgICAgIGlmIChtX2hhbmRsZXIubV92YWxpZCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
I2VuZGlmCiAKQEAgLTU4OCwxMCArNjUwLDE0IEBAIHByaXZhdGU6CiAgICAgQ2FsbEZyYW1lKiYg
bV9jYWxsRnJhbWU7CiAgICAgYm9vbCBtX2lzVGVybWluYXRpb247CiAgICAgQ29kZUJsb2NrKiYg
bV9jb2RlQmxvY2s7Ci0gICAgSGFuZGxlckluZm8qJiBtX2hhbmRsZXI7CisgICAgQ2F0Y2hJbmZv
JiBtX2hhbmRsZXI7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGNvbnN0IFdhc206OlRh
ZyogbV93YXNtVGFnIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV9jYXRjaGFibGVGcm9tV2FzbSB7
IGZhbHNlIH07CisjZW5kaWYKIH07CiAKLU5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJw
cmV0ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBl
eGNlcHRpb24pCitORVZFUl9JTkxJTkUgQ2F0Y2hJbmZvIEludGVycHJldGVyOjp1bndpbmQoVk0m
IHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIApAQCAtNjA5LDE2ICs2NzUs
MTMgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2
bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGMKICAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNF
RChzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2Vw
dGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KLSAg
ICBIYW5kbGVySW5mbyogaGFuZGxlciA9IG51bGxwdHI7Ci0gICAgVW53aW5kRnVuY3RvciBmdW5j
dG9yKHZtLCBjYWxsRnJhbWUsIHZtLmlzVGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSwg
Y29kZUJsb2NrLCBoYW5kbGVyKTsKKyAgICBDYXRjaEluZm8gY2F0Y2hJbmZvOworICAgIFVud2lu
ZEZ1bmN0b3IgZnVuY3Rvcih2bSwgY2FsbEZyYW1lLCB2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9u
KGV4Y2VwdGlvbiksIGV4Y2VwdGlvblZhbHVlLCBjb2RlQmxvY2ssIGNhdGNoSW5mbyk7CiAgICAg
U3RhY2tWaXNpdG9yOjp2aXNpdDxTdGFja1Zpc2l0b3I6OlRlcm1pbmF0ZUlmVG9wRW50cnlGcmFt
ZUlzRW1wdHk+KGNhbGxGcmFtZSwgdm0sIGZ1bmN0b3IpOwogICAgIGlmICh2bS5oYXNDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKCkpCiAgICAgICAgIHZtLnBvcEFsbENoZWNrcG9pbnRPU1JTaWRlU3Rh
dGVVbnRpbChjYWxsRnJhbWUpOwogCi0gICAgaWYgKCFoYW5kbGVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBoYW5kbGVyOworICAgIHJldHVybiBjYXRjaEluZm87CiB9
CiAKIHZvaWQgSW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3du
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCAwYzNlZmUxMmU1MTA1Mzg4ZjZjZjI4NTExZDll
YTVlNGVhZjMwN2ZjLi40ZDk2ODhlNWFhOGNhMGE0YWQwZjVkOTBmZGZhYzE0MjAzYzU4OWMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApA
QCAtNDMsNiArNDMsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBDYWxsZWU7CitzdHJ1Y3QgSGFuZGxlcklu
Zm87Cit9CisjZW5kaWYKKwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBFdmFsRXhl
Y3V0YWJsZTsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC01OCw2ICs2NSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTU2NvcGU7CiAgICAgY2xhc3MgU291cmNlQ29k
ZTsKICAgICBjbGFzcyBTdGFja0ZyYW1lOworICAgIGVudW0gY2xhc3MgSGFuZGxlclR5cGUgOiB1
aW50OF90OwogICAgIHN0cnVjdCBDYWxsRnJhbWVDbG9zdXJlOwogICAgIHN0cnVjdCBIYW5kbGVy
SW5mbzsKICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CkBAIC04MSw2ICs4OSwyNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgU3RhY2tGcmFtZU5hdGl2ZUNvZGUKICAgICB9OwogCisgICAgc3Ry
dWN0IENhdGNoSW5mbyB7CisgICAgICAgIENhdGNoSW5mbygpCisgICAgICAgICAgICA6IG1fdmFs
aWQoZmFsc2UpCisgICAgICAgIHsgfQorCisgICAgICAgIENhdGNoSW5mbyhjb25zdCBIYW5kbGVy
SW5mbyosIENvZGVCbG9jayopOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgQ2F0
Y2hJbmZvKGNvbnN0IFdhc206OkhhbmRsZXJJbmZvKiwgY29uc3QgV2FzbTo6Q2FsbGVlKik7Cisj
ZW5kaWYKKworICAgICAgICBib29sIG1fdmFsaWQ7CisgICAgICAgIEhhbmRsZXJUeXBlIG1fdHlw
ZTsKKyNpZiBFTkFCTEUoSklUKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4gbV9uYXRpdmVDb2RlOworI2VuZGlmCisgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBtX2NhdGNoUENGb3JJbnRlcnByZXRlcjsKKyAgICB9OworCiAgICAgY2xhc3Mg
SW50ZXJwcmV0ZXIgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIENhY2hlZENhbGw7CkBAIC0xMTIsNyArMTM4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgdm9pZCBnZXRBcmd1bWVudHNEYXRhKENhbGxGcmFtZSosIEpTRnVuY3Rp
b24qJiwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFyZ3YsIGlu
dCYgYXJnYyk7CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiB1bndpbmQoVk0m
LCBDYWxsRnJhbWUqJiwgRXhjZXB0aW9uKik7CisgICAgICAgIE5FVkVSX0lOTElORSBDYXRjaElu
Zm8gdW53aW5kKFZNJiwgQ2FsbEZyYW1lKiYsIEV4Y2VwdGlvbiopOwogICAgICAgICB2b2lkIG5v
dGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqLCBFeGNlcHRpb24qKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgZGVidWco
Q2FsbEZyYW1lKiwgRGVidWdIb29rVHlwZSk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgc3RhY2tU
cmFjZUFzU3RyaW5nKFZNJiwgY29uc3QgVmVjdG9yPFN0YWNrRnJhbWU+Jik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IDU3
YTFiZGI2ZGJkNWIxNjA2OTFjNjU2NTBmYzBkNDVkYmU4MDllYWIuLmRjNWVjY2UwNWVlMzlmYmJm
ZWJmNWQ5YjJkYmIzYjk1NmZkNjZhNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0xNjYsMjMgKzE2NiwyMCBAQCB2b2lk
IFN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q29kZU9yaWdpbiogY29kZU9yaQogICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSBudWxs
cHRyOwogI2VuZGlmCiAKKyAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKKyAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9ICFtX2ZyYW1lLmNvZGVCbG9j
aygpID8gQnl0ZWNvZGVJbmRleCgwKQorICAgICAgICA6IGNvZGVPcmlnaW4gPyBjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KCkKKyAgICAgICAgOiBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsK
KwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoY2FsbEZyYW1lLT5pc0FueVdhc21D
YWxsZWUoKSkgewogICAgICAgICBtX2ZyYW1lLm1faXNXYXNtRnJhbWUgPSB0cnVlOwogICAgICAg
ICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgbV9mcmFtZS5tX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7CiAKICAgICAgICAgaWYgKG1fZnJhbWUubV9jYWxs
ZWUuaXNXYXNtKCkpCiAgICAgICAgICAgICBtX2ZyYW1lLm1fd2FzbUZ1bmN0aW9uSW5kZXhPck5h
bWUgPSBtX2ZyYW1lLm1fY2FsbGVlLmFzV2FzbUNhbGxlZSgpLT5pbmRleE9yTmFtZSgpOwotCi0g
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9ICFt
X2ZyYW1lLmNvZGVCbG9jaygpID8gQnl0ZWNvZGVJbmRleCgwKQotICAgICAgICA6IGNvZGVPcmln
aW4gPyBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkKLSAgICAgICAgOiBjYWxsRnJhbWUtPmJ5
dGVjb2RlSW5kZXgoKTsKLQogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggZWYyZmNiNDJmMzVmZTcy
ZTQ0ZGYzZTAyMjRiMmU5MDhiMjU1ZWU5OC4uYTkxYTlkZDk3YWJlZTg3NDhkMDc2N2MzMjNhZWNh
OGQ0OThlYjRjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcApAQCAtNzA0LDkgKzcwNCw0NyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9y
ZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYQogI2Vu
ZGlmCiAKICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCBzY3JhdGNoKTsKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQo
KSksIHNjcmF0Y2gpOworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwoc2NyYXRjaCwgc2tpcExpc3QpOwogCi0gICAgTG9hZFJlZ1Nwb29s
ZXIgc3Bvb2xlcigqdGhpcywgc2NyYXRjaCk7CisgICAgLy8gUmVzdG9yZSB0aGUgY2FsbGVlIHNh
dmUgdmFsdWUgb2YgdGhlIHNjcmF0Y2guCisgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFs
bENhbGxlZVNhdmVzLT5hdChzY3JhdGNoR1BSRW50cnlJbmRleCk7CisgICAgQVNTRVJUKCFkb250
UmVzdG9yZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKTsKKyAgICBBU1NFUlQoZW50cnkucmVn
KCkuaXNHUFIoKSk7CisgICAgQVNTRVJUKHNjcmF0Y2ggPT0gZW50cnkucmVnKCkuZ3ByKCkpOwor
I2lmIENQVShBUk02NCkKKyAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5MiA9IGFsbENhbGxlZVNh
dmVzLT5hdChzY3JhdGNoR1BSRW50cnlJbmRleCArIDEpOworICAgIEFTU0VSVF9VTlVTRUQoZW50
cnkyLCAhZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5Mi5yZWcoKSkpOworICAgIEFTU0VS
VChlbnRyeTIucmVnKCkuaXNHUFIoKSk7CisgICAgQVNTRVJUKHVudXNlZE5leHRTbG90R1BSID09
IGVudHJ5Mi5yZWcoKS5ncHIoKSk7CisgICAgbG9hZFBhaXI2NChzY3JhdGNoLCBUcnVzdGVkSW1t
MzIoZW50cnkub2Zmc2V0KCkpLCBzY3JhdGNoLCB1bnVzZWROZXh0U2xvdEdQUik7CisjZWxzZQor
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoLCBlbnRyeS5vZmZzZXQoKSksIHNjcmF0Y2gpOwor
I2VuZGlmCisKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOworI2VuZGlm
IC8vIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorfQorCit2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKEdQUlJlZyB2bUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpCit7CisjaWYgTlVNQkVSX09G
X0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCisgICAgbG9hZFB0cihBZGRyZXNzKHZtR1BSLCBW
TTo6dG9wRW50cnlGcmFtZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgcmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3JhdGNoR1BSLCBS
ZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2
bUdQUik7CisjZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCit9
CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBlbnRyeUZyYW1lR1BSLCBjb25zdCBSZWdp
c3RlclNldCYgc2tpcExpc3QpCit7CisjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RF
UlMgPiAwCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVn
aXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBlbnRyeUZyYW1lR1BSKTsKKworICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdp
c3Rlck9mZnNldHMoKTsKKyAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2
ZXMtPnNpemUoKTsKKworICAgIExvYWRSZWdTcG9vbGVyIHNwb29sZXIoKnRoaXMsIGVudHJ5RnJh
bWVHUFIpOwogCiAgICAgLy8gUmVzdG9yZSBhbGwgY2FsbGVlIHNhdmVzIGV4Y2VwdCBmb3IgdGhl
IHNjcmF0Y2guCiAgICAgdW5zaWduZWQgaSA9IDA7CkBAIC03MjgsMjMgKzc2Niw5IEBAIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKEVudHJ5RnJhCiAgICAgfQogICAgIHNwb29sZXIuZmluYWxpemVGUFIoKTsKIAot
ICAgIC8vIFJlc3RvcmUgdGhlIGNhbGxlZSBzYXZlIHZhbHVlIG9mIHRoZSBzY3JhdGNoLgotICAg
IFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoc2NyYXRjaEdQUkVu
dHJ5SW5kZXgpOwotICAgIEFTU0VSVCghZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJl
ZygpKSk7Ci0gICAgQVNTRVJUKGVudHJ5LnJlZygpLmlzR1BSKCkpOwotICAgIEFTU0VSVChzY3Jh
dGNoID09IGVudHJ5LnJlZygpLmdwcigpKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgUmVnaXN0ZXJB
dE9mZnNldCBlbnRyeTIgPSBhbGxDYWxsZWVTYXZlcy0+YXQoc2NyYXRjaEdQUkVudHJ5SW5kZXgg
KyAxKTsKLSAgICBBU1NFUlRfVU5VU0VEKGVudHJ5MiwgIWRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdl
dChlbnRyeTIucmVnKCkpKTsKLSAgICBBU1NFUlQoZW50cnkyLnJlZygpLmlzR1BSKCkpOwotICAg
IEFTU0VSVCh1bnVzZWROZXh0U2xvdEdQUiA9PSBlbnRyeTIucmVnKCkuZ3ByKCkpOwotICAgIGxv
YWRQYWlyNjQoc2NyYXRjaCwgVHJ1c3RlZEltbTMyKGVudHJ5Lm9mZnNldCgpKSwgc2NyYXRjaCwg
dW51c2VkTmV4dFNsb3RHUFIpOwotI2Vsc2UKLSAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwg
ZW50cnkub2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSNlbmRpZgotCiAjZWxzZQotICAgIFVOVVNFRF9Q
QVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICBVTlVTRURfUEFSQU0odm1HUFIpOworICAgIFVOVVNF
RF9QQVJBTShza2lwTGlzdCk7CiAjZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJ
U1RFUlMgPiAwCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCmluZGV4IDBkMjUzZDk4OGVjMjg3YzhjOTdiNTZkNWE4NzQxNWYxMTYxYjU4Y2IuLjlhNDc5
ZjY3MGI2ZDZlZDkxZDY4OTk4YjlmOTNiZjEwNmRlN2ZhMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtNDEzLDYgKzQxMyw4IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomKTsKKyAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJSZWcgdm1HUFIsIEdQUlJlZyBzY3Jh
dGNoR1BSKTsKKyAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGVudHJ5RnJhbWUsIGNvbnN0IFJlZ2lzdGVyU2V0JiBz
a2lwTGlzdCk7CiAKICAgICB2b2lkIGNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJh
bWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomLCBj
b25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURXhjZXB0aW9ucy5jcHAKaW5kZXggNmQ1ODNhNDg5ZWQ1MzAzMThjZTMwOTZjNjZiMDJlN2Qx
YzU4YTRiYy4uYjg2ZTlhNDEwM2M4NTA2YzNmZGJiYWM1NGQ3ZTk0ZTY2NjBhYWQ5OSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCkBAIC01NCwyMSArNTQs
MTQgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAK
ICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwogICAgIFJFTEVB
U0VfQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSB2bS5pbnRl
cnByZXRlci0+dW53aW5kKHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRoaXMgbWF5IHVw
ZGF0ZSBjYWxsRnJhbWUuCisgICAgQ2F0Y2hJbmZvIGhhbmRsZXIgPSB2bS5pbnRlcnByZXRlci0+
dW53aW5kKHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRoaXMgbWF5IHVwZGF0ZSBjYWxs
RnJhbWUuCiAKICAgICB2b2lkKiBjYXRjaFJvdXRpbmU7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGNhdGNoUENGb3JJbnRlcnByZXRlciA9IG51bGxwdHI7Ci0gICAgaWYgKGhhbmRsZXIpIHsKLSAg
ICAgICAgLy8gaGFuZGxlci0+dGFyZ2V0IGlzIG1lYW5pbmdsZXNzIGZvciBnZXR0aW5nIGEgY29k
ZSBvZmZzZXQgd2hlbiBjYXRjaGluZwotICAgICAgICAvLyB0aGUgZXhjZXB0aW9uIGluIGEgREZH
L0ZUTCBmcmFtZS4gVGhpcyBieXRlY29kZSB0YXJnZXQgb2Zmc2V0IGNvdWxkIGJlCi0gICAgICAg
IC8vIHNvbWV0aGluZyB0aGF0J3MgaW4gYW4gaW5saW5lZCBmcmFtZSwgd2hpY2ggbWVhbnMgYW4g
YXJyYXkgYWNjZXNzCi0gICAgICAgIC8vIHdpdGggdGhpcyBieXRlY29kZSBvZmZzZXQgaW4gdGhl
IG1hY2hpbmUgZnJhbWUgaXMgdXR0ZXJseSBtZWFuaW5nbGVzcwotICAgICAgICAvLyBhbmQgY2Fu
IGNhdXNlIGFuIG92ZXJmbG93LiBPU1IgZXhpdCBwcm9wZXJseSBleGl0cyB0byBoYW5kbGVyLT50
YXJnZXQKLSAgICAgICAgLy8gaW4gdGhlIHByb3BlciBmcmFtZS4KLSAgICAgICAgaWYgKCFKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSkK
LSAgICAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPnRhcmdldCkucHRyKCk7CisgICAgaWYgKGhh
bmRsZXIubV92YWxpZCkgeworICAgICAgICBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBoYW5kbGVy
Lm1fY2F0Y2hQQ0ZvckludGVycHJldGVyOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIGNhdGNo
Um91dGluZSA9IGhhbmRsZXItPm5hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAg
ICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci5tX25hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKICNlbHNlCiAgICAgICAgIGlmIChjYXRjaFBDRm9ySW50ZXJwcmV0ZXItPmlzV2lkZTMyKCkp
CiAgICAgICAgICAgICBjYXRjaFJvdXRpbmUgPSBMTEludDo6Z2V0V2lkZTMyQ29kZVB0cihjYXRj
aFBDRm9ySW50ZXJwcmV0ZXItPm9wY29kZUlEKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDdjYTFiNGU3YzNmZDA4NGRkMjdhYzM4NTA2YWE5YzZh
ZWQ5NWRlYjAuLjk5MjI5ZTQ5OTMxN2MxMmExZjM0Y2JlYWNkYWVjOTAxNTM4MDhhZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKQEAgLTU3LDYgKzU3LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKICAgICAgICAgdm9pZCBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRy
eSk7CiAgICAgICAgIHZvaWQgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAgICAgIHZvaWQgY29udmVydENhbGxl
ZVRvVk0oUmVnaXN0ZXJJRCBjYWxsZWUpOwogCiAgICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0
dXJuIG1fdm07IH0KIApAQCAtMTU4LDYgKzE1OSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRp
ZgogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6Y29udmVy
dENhbGxlZVRvVk0oUmVnaXN0ZXJJRCBjYWxsZWUpCisgICAgeworICAgICAgICBhdXRvIHByZWNp
c2VBbGxvY2F0aW9uQ2FzZSA9IGJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBj
YWxsZWUsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxm
QWxpZ25tZW50KSk7CisgICAgICAgIGFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
TWFya2VkQmxvY2s6OmJsb2NrTWFzayksIGNhbGxlZSk7CisgICAgICAgIGxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGNhbGxlZSwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFy
a2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgY2FsbGVlKTsKKyAgICAgICAgYXV0byBs
b2FkZWRDYXNlID0ganVtcCgpOworCisgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5r
KHRoaXMpOworICAgICAgICBsb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWUsIFBy
ZWNpc2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0o
KSAtIFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBjYWxsZWUpOworCisgICAgICAg
IGxvYWRlZENhc2UubGluayh0aGlzKTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEu
aAppbmRleCA0NzFmYjVkMmZkM2I4MDkzOTZhNTIzY2UzM2ZjYjJhODU5ODM2YWNiLi4zN2MxYWZl
NmRlNzZjODkzNWFjNzQ2ZDYwZmI0OTdkMzFlNmU3Y2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RGF0YS5oCkBAIC0zMjIsNiArMzIyLDI0IEBAIEFMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTMyQ29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bj
b2RlSUQpCiAjZW5kaWYKIH0KIAordGVtcGxhdGU8UHRyVGFnIHRhZz4KK0FMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz4gZ2V0Q29kZVJlZihXYXNtT3Bjb2RlSUQgb3Bjb2Rl
SUQpCit7CisgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+OjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoZ2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKSk7Cit9CisKK3RlbXBsYXRl
PFB0clRhZyB0YWc+CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+IGdl
dFdpZGUxNkNvZGVSZWYoV2FzbU9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8dGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdldFdpZGUx
NkNvZGVQdHI8dGFnPihvcGNvZGVJRCkpOworfQorCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPiBnZXRXaWRlMzJDb2RlUmVmKFdh
c21PcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PHRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bj
b2RlSUQpKTsKK30KKwogdGVtcGxhdGU8UHRyVGFnIHRhZz4KIEFMV0FZU19JTkxJTkUgTExJbnRD
b2RlIGdldENvZGVGdW5jdGlvblB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI5MTNl
ZWRhYjBjNDMwZmE3ODQ2MjliZTMwOTEyNDAwZTU2OThjMTQuLjZkODY3ZjI2ZWFhYTJjZThhYjk5
ZWRhZWMwZjBhYTIzNmRjOTJjZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludEV4Y2VwdGlvbnMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTExJbnRD
b21tb24uaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5o
IgorI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCiAKICNpZiBMTElOVF9UUkFDSU5HCiAjaW5jbHVk
ZSAiQ2F0Y2hTY29wZS5oIgpAQCAtNDksNiArNTAsMTggQEAgSW5zdHJ1Y3Rpb24qIHJldHVyblRv
VGhyb3coVk0mIHZtKQogICAgIHJldHVybiBMTEludDo6ZXhjZXB0aW9uSW5zdHJ1Y3Rpb25zKCk7
CiB9CiAKK0luc3RydWN0aW9uKiB3YXNtUmV0dXJuVG9UaHJvdyhWTSYgdm0pCit7CisgICAgVU5V
U0VEX1BBUkFNKHZtKTsKKyNpZiBMTElOVF9UUkFDSU5HCisgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnRyYWNlTExJbnRTbG93UGF0aCgpKSkgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAi
LCBKU1ZhbHVlKHNjb3BlLmV4Y2VwdGlvbigpKSwgIiAocmV0dXJuVG9UaHJvdykuXG4iKTsKKyAg
ICB9CisjZW5kaWYKKyAgICByZXR1cm4gTExJbnQ6Ondhc21FeGNlcHRpb25JbnN0cnVjdGlvbnMo
KTsKK30KKwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGNh
bGxUb1Rocm93KFZNJiB2bSkKIHsKICAgICBVTlVTRURfUEFSQU0odm0pOwpAQCAtOTIsNCArMTA1
LDM2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5k
bGVDYXRjaChPcGNvZGVTaXplIHNpemUpCiAgICAgcmV0dXJuIHt9OwogfQogCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IGhhbmRsZVdhc21DYXRjaChPcGNvZGVTaXplIHNpemUpCit7CisgICAgV2FzbU9wY29kZUlE
IG9wY29kZSA9IFdhc206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21fY2F0Y2ggOiB3YXNt
X2NhdGNoX25vX3RsczsKKyAgICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIE9wY29kZVNpemU6
Ok5hcnJvdzoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+KG9wY29kZSk7CisgICAgY2FzZSBPcGNvZGVTaXplOjpXaWRlMTY6CisgICAgICAg
IHJldHVybiBMTEludDo6Z2V0V2lkZTE2Q29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihv
cGNvZGUpOworICAgIGNhc2UgT3Bjb2RlU2l6ZTo6V2lkZTMyOgorICAgICAgICByZXR1cm4gTExJ
bnQ6OmdldFdpZGUzMkNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4ob3Bjb2RlKTsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9Owor
fQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFuZGxl
V2FzbUNhdGNoQWxsKE9wY29kZVNpemUgc2l6ZSkKK3sKKyAgICBXYXNtT3Bjb2RlSUQgb3Bjb2Rl
ID0gV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpID8gd2FzbV9jYXRjaF9hbGwgOiB3YXNtX2Nh
dGNoX2FsbF9ub190bHM7CisgICAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSBPcGNvZGVTaXpl
OjpOYXJyb3c6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPihvcGNvZGUpOworICAgIGNhc2UgT3Bjb2RlU2l6ZTo6V2lkZTE2OgorICAgICAg
ICByZXR1cm4gTExJbnQ6OmdldFdpZGUxNkNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4o
b3Bjb2RlKTsKKyAgICBjYXNlIE9wY29kZVNpemU6OldpZGUzMjoKKyAgICAgICAgcmV0dXJuIExM
SW50OjpnZXRXaWRlMzJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KG9wY29kZSk7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpMTEludApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhj
ZXB0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5o
CmluZGV4IDgwNmIxOWY2NjA1ODY2Yjg4Y2U4NDk1ODdhMDQxYWRlNGYzNmQ2MjkuLmU1ZjkwMjFm
YWRiOGVmY2IyNTg3YzBjYTYwMTc2ZWJmMWRjYmFjNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmgKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNwYWNl
IExMSW50IHsKIC8vIGJldHdlZW4gMSBhbmQgOSBzbG90cyB3aWxsIGdpdmUgeW91IGFuICJpbnN0
cnVjdGlvbiIgdGhhdCB0aHJlYWRzIHRvIHRoZQogLy8gaW50ZXJwcmV0ZXIncyBleGNlcHRpb24g
aGFuZGxlci4KIEluc3RydWN0aW9uKiByZXR1cm5Ub1Rocm93KFZNJik7CitJbnN0cnVjdGlvbiog
d2FzbVJldHVyblRvVGhyb3coVk0mKTsKIAogLy8gVXNlIHRoaXMgd2hlbiB5b3UncmUgdGhyb3dp
bmcgdG8gYSBjYWxsIHRodW5rLgogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+IGNhbGxUb1Rocm93KFZNJik7CkBAIC00OSw0ICs1MCw5IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBjYWxsVG9UaHJvdyhWTSYpOwogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGhhbmRsZVVuY2F1Z2h0
RXhjZXB0aW9uKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4gaGFuZGxlQ2F0Y2goT3Bjb2RlU2l6ZSk7CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFuZGxlV2Fz
bUNhdGNoKE9wY29kZVNpemUpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+IGhhbmRsZVdhc21DYXRjaEFsbChPcGNvZGVTaXplKTsKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcApp
bmRleCA2ZGY0Njg1MGUyYzdlYjk2ODk4ZWM0YzU3ZmNiNzdkZDg3NWQyZDUwLi5iMmNhYTE4NTQx
MzBmZjhiOTMxODA3NmQyN2RmZWJkZDIxMzM4NDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcApAQCAtNTMsNiArNTMs
NyBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkpT
U3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0
YS5oIgogI2luY2x1ZGUgIkxMSW50T2ZmbGluZUFzbUNvbmZpZy5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5hc20KaW5kZXggNDM2Y2Y2NjQ5MGQ3MWM1ZWU5YmIz
MGU4NmZlNmY0MmJhZWU3NmRmMS4uZmU5ODljODNhMTEwYjFjODM4NzQzZjk3MzJjOWEyYmNlNWFm
ZDU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5
LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCkBA
IC0yNTYsNiArMjU2LDcgQEAgbWFjcm8gdGhyb3dFeGNlcHRpb24oZXhjZXB0aW9uKQogZW5kCiAK
IG1hY3JvIGNhbGxXYXNtU2xvd1BhdGgoc2xvd1BhdGgpCisgICAgc3RvcmVpIFBDLCBBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdCiAgICAgcHJlcGFyZVN0YXRlRm9y
Q0NhbGwoKQogICAgIG1vdmUgY2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCkBAIC0yNzQsNiArMjc1
LDE0IEBAIG1hY3JvIGNhbGxXYXNtQ2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCiAgICAg
YWN0aW9uKHIwLCByMSkKIGVuZAogCittYWNybyByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxs
KCkKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgd3MxCisgICAgbG9hZGkgV2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2s6Om1fbnVtQ2FsbGVlTG9jYWxzW3dzMV0sIHdzMQorICAgIGxzaGlmdHAgMywg
d3MxCisgICAgYWRkcCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCwgd3MxCisgICAgc3Vi
cCBjZnIsIHdzMSwgc3AKK2VuZAorCiBtYWNybyB3YXNtUHJvbG9ndWUoY29kZUJsb2NrR2V0dGVy
LCBjb2RlQmxvY2tTZXR0ZXIsIGxvYWRXYXNtSW5zdGFuY2UpCiAgICAgIyBTZXQgdXAgdGhlIGNh
bGwgZnJhbWUgYW5kIGNoZWNrIGlmIHdlIHNob3VsZCBPU1IuCiAgICAgcHJlc2VydmVDYWxsZXJQ
Q0FuZENGUigpCkBAIC0yODEsNiArMjkwLDkgQEAgbWFjcm8gd2FzbVByb2xvZ3VlKGNvZGVCbG9j
a0dldHRlciwgY29kZUJsb2NrU2V0dGVyLCBsb2FkV2FzbUluc3RhbmNlKQogICAgIGxvYWRXYXNt
SW5zdGFuY2UoKQogICAgIHJlbG9hZE1lbW9yeVJlZ2lzdGVyc0Zyb21JbnN0YW5jZSh3YXNtSW5z
dGFuY2UsIHdzMCwgd3MxKQogCisgICAgbG9hZHAgV2FzbTo6SW5zdGFuY2U6Om1fb3duZXJbd2Fz
bUluc3RhbmNlXSwgd3MwCisgICAgc3RvcmVwIHdzMCwgVGhpc0FyZ3VtZW50T2Zmc2V0W2Nmcl0K
KwogICAgIGNvZGVCbG9ja0dldHRlcih3czApCiAgICAgY29kZUJsb2NrU2V0dGVyKHdzMCkKIApA
QCAtMzMzLDE1ICszNDUsMTkgQEAgbWFjcm8gdHJhY2VFeGVjdXRpb24oKQogICAgIGVuZAogZW5k
CiAKLSMgTGVzcyBjb252ZW5pZW50LCBidXQgcmVxdWlyZWQgZm9yIG9wY29kZXMgdGhhdCBjb2xs
aWRlIHdpdGggcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb25zIChlLmcuIHdhc21fbm9wKQotbWFjcm8gdW5w
cmVmaXhlZFdhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGZuKQotICAgIGNvbW1vbk9w
KG9wY29kZU5hbWUsIHRyYWNlRXhlY3V0aW9uLCBtYWNybyhzaXplKQorbWFjcm8gY29tbW9uV2Fz
bU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgcHJvbG9ndWUsIGZuKQorICAgIGNvbW1vbk9w
KG9wY29kZU5hbWUsIHByb2xvZ3VlLCBtYWNybyhzaXplKQogICAgICAgICBmbihtYWNybyhmbjIp
CiAgICAgICAgICAgICBmbjIob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBzaXplKQogICAgICAg
ICBlbmQpCiAgICAgZW5kKQogZW5kCiAKKyMgTGVzcyBjb252ZW5pZW50LCBidXQgcmVxdWlyZWQg
Zm9yIG9wY29kZXMgdGhhdCBjb2xsaWRlIHdpdGggcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb25zIChlLmcu
IHdhc21fbm9wKQorbWFjcm8gdW5wcmVmaXhlZFdhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1
Y3QsIGZuKQorICAgIGNvbW1vbldhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHRyYWNl
RXhlY3V0aW9uLCBmbikKK2VuZAorCiBtYWNybyB3YXNtT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3Ry
dWN0LCBmbikKICAgICB1bnByZWZpeGVkV2FzbU9wKHdhc21fJW9wY29kZU5hbWUlLCBvcGNvZGVT
dHJ1Y3QsIGZuKQogZW5kCkBAIC01MTIsNiArNTI4LDE2IEBAIG9wKHdhc21fZnVuY3Rpb25fcHJv
bG9ndWVfbm9fdGxzLCBtYWNybyAoKQogICAgIHdhc21OZXh0SW5zdHJ1Y3Rpb24oKQogZW5kKQog
CittYWNybyBqdW1wVG9FeGNlcHRpb24oKQorICAgIGlmIEFSTTY0RQorICAgICAgICBtb3ZlIHIw
LCBhMAorICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlND
Q29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6ZXhjZXB0aW9uSGFuZGxlcikgKiBQdHJT
aXplLCBhMQorICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgRXhjZXB0
aW9uSGFuZGxlclB0clRhZworICAgIGVsc2UKKyAgICAgICAgam1wIHIwLCBFeGNlcHRpb25IYW5k
bGVyUHRyVGFnCisgICAgZW5kCitlbmQKKwogb3Aod2FzbV90aHJvd19mcm9tX3Nsb3dfcGF0aF90
cmFtcG9saW5lLCBtYWNybyAoKQogICAgIGxvYWRwIFdhc206Okluc3RhbmNlOjptX3BvaW50ZXJU
b1RvcEVudHJ5RnJhbWVbd2FzbUluc3RhbmNlXSwgdDUKICAgICBsb2FkcCBbdDVdLCB0NQpAQCAt
NTIzLDE0ICs1NDksNyBAQCBvcCh3YXNtX3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUs
IG1hY3JvICgpCiAgICAgIyBTbG93IHBhdGhzIGFuZCB0aGUgdGhyb3dFeGNlcHRpb24gbWFjcm8g
c3RvcmUgdGhlIGV4Y2VwdGlvbiBjb2RlIGluIHRoZSBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyBzbG90CiAgICAgbG9hZGkgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBQYXlsb2FkT2Zm
c2V0W2Nmcl0sIGEzCiAgICAgY0NhbGw0KF9zbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24p
Ci0KLSAgICBpZiBBUk02NEUKLSAgICAgICAgbW92ZSByMCwgYTAKLSAgICAgICAgbGVhcCBKU0ND
b25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3Rl
eHByIEdhdGU6OmV4Y2VwdGlvbkhhbmRsZXIpICogUHRyU2l6ZSwgYTEKLSAgICAgICAgam1wIFth
MV0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLSAgICBl
bHNlCi0gICAgICAgIGptcCByMCwgRXhjZXB0aW9uSGFuZGxlclB0clRhZwotICAgIGVuZAorICAg
IGp1bXBUb0V4Y2VwdGlvbigpCiBlbmQpCiAKIG1hY3JvIHdhc21fdGhyb3dfZnJvbV9mYXVsdF9o
YW5kbGVyKGluc3RhbmNlKQpAQCAtNTQzLDE0ICs1NjIsNyBAQCBtYWNybyB3YXNtX3Rocm93X2Zy
b21fZmF1bHRfaGFuZGxlcihpbnN0YW5jZSkKICAgICBtb3ZlIDAsIGExCiAgICAgbW92ZSBjZnIs
IGEwCiAgICAgY0NhbGw0KF9zbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24pCi0KLSAgICBp
ZiBBUk02NEUKLSAgICAgICAgbW92ZSByMCwgYTAKLSAgICAgICAgbGVhcCBKU0NDb25maWcgKyBj
b25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6
OmV4Y2VwdGlvbkhhbmRsZXIpICogUHRyU2l6ZSwgYTEKLSAgICAgICAgam1wIFthMV0sIE5hdGl2
ZVRvSklUR2F0ZVB0clRhZyAjIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLSAgICBlbHNlCi0gICAg
ICAgIGptcCByMCwgRXhjZXB0aW9uSGFuZGxlclB0clRhZwotICAgIGVuZAorICAgIGp1bXBUb0V4
Y2VwdGlvbigpCiBlbmQKIAogb3Aod2FzbV90aHJvd19mcm9tX2ZhdWx0X2hhbmRsZXJfdHJhbXBv
bGluZV9mYXN0VExTLCBtYWNybyAoKQpAQCAtNzcwLDExICs3ODIsMTEgQEAgbWFjcm8gc2xvd1Bh
dGhGb3JXYXNtQ2FsbChjdHgsIHNsb3dQYXRoLCBzdG9yZVdhc21JbnN0YW5jZSkKIAogICAgICAg
ICAgICAgIyBMb2FkIHJlZ2lzdGVycyBmcm9tIHN0YWNrCiAgICAgICAgICAgICBmb3JFYWNoQXJn
dW1lbnRHUFIobWFjcm8gKG9mZnNldCwgZ3ByKQotICAgICAgICAgICAgICAgIGxvYWRxIENhbGxG
cmFtZUhlYWRlclNpemUgKyBvZmZzZXRbc3AsIHdzMSwgOF0sIGdwcgorICAgICAgICAgICAgICAg
IGxvYWRxIENhbGxGcmFtZUhlYWRlclNpemUgKyA4ICsgb2Zmc2V0W3NwLCB3czEsIDhdLCBncHIK
ICAgICAgICAgICAgIGVuZCkKIAogICAgICAgICAgICAgZm9yRWFjaEFyZ3VtZW50RlBSKG1hY3Jv
IChvZmZzZXQsIGZwcikKLSAgICAgICAgICAgICAgICBsb2FkZCBDYWxsRnJhbWVIZWFkZXJTaXpl
ICsgb2Zmc2V0W3NwLCB3czEsIDhdLCBmcHIKKyAgICAgICAgICAgICAgICBsb2FkZCBDYWxsRnJh
bWVIZWFkZXJTaXplICsgOCArIG9mZnNldFtzcCwgd3MxLCA4XSwgZnByCiAgICAgICAgICAgICBl
bmQpCiAKICAgICAgICAgICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCkBAIC04MTEs
MTEgKzgyMyw3IEBAIG1hY3JvIHNsb3dQYXRoRm9yV2FzbUNhbGwoY3R4LCBzbG93UGF0aCwgc3Rv
cmVXYXNtSW5zdGFuY2UpCiAgICAgICAgICAgICAgICAgZGVmaW5lUmV0dXJuTGFiZWwob3Bjb2Rl
TmFtZSwgc2l6ZSkKICAgICAgICAgICAgIGVuZCkKIAotICAgICAgICAgICAgbG9hZHAgQ29kZUJs
b2NrW2Nmcl0sIHdzMQotICAgICAgICAgICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6
Om1fbnVtQ2FsbGVlTG9jYWxzW3dzMV0sIHdzMQotICAgICAgICAgICAgbHNoaWZ0cCAzLCB3czEK
LSAgICAgICAgICAgIGFkZHAgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwsIHdzMQotICAg
ICAgICAgICAgc3VicCBjZnIsIHdzMSwgc3AKKyAgICAgICAgICAgIHJlc3RvcmVTdGFja1BvaW50
ZXJBZnRlckNhbGwoKQogCiAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gc2V0IFBDIHRvIGxvYWQg
aW5mb3JtYXRpb24gZnJvbSB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLCBidXQgd2UKICAgICAgICAg
ICAgICMgbmVlZCB0byBwcmVzZXJ2ZSBpdHMgY3VycmVudCB2YWx1ZSBzaW5jZSBpdCBtaWdodCBj
b250YWluIGEgcmV0dXJuIHZhbHVlCkBAIC04MzYsMTEgKzg0NCwxMSBAQCBtYWNybyBzbG93UGF0
aEZvcldhc21DYWxsKGN0eCwgc2xvd1BhdGgsIHN0b3JlV2FzbUluc3RhbmNlKQogICAgICAgICAg
ICAgd2dldHUoY3R4LCBtX251bWJlck9mU3RhY2tBcmdzLCB3czApCiAgICAgICAgICAgICBtb3Zl
IG1lbW9yeUJhc2UsIFBDCiAgICAgICAgICAgICBmb3JFYWNoQXJndW1lbnRHUFIobWFjcm8gKG9m
ZnNldCwgZ3ByKQotICAgICAgICAgICAgICAgIHN0b3JlcSBncHIsIENhbGxGcmFtZUhlYWRlclNp
emUgKyBvZmZzZXRbd3MxLCB3czAsIDhdCisgICAgICAgICAgICAgICAgc3RvcmVxIGdwciwgQ2Fs
bEZyYW1lSGVhZGVyU2l6ZSArIDggKyBvZmZzZXRbd3MxLCB3czAsIDhdCiAgICAgICAgICAgICBl
bmQpCiAKICAgICAgICAgICAgIGZvckVhY2hBcmd1bWVudEZQUihtYWNybyAob2Zmc2V0LCBmcHIp
Ci0gICAgICAgICAgICAgICAgc3RvcmVkIGZwciwgQ2FsbEZyYW1lSGVhZGVyU2l6ZSArIG9mZnNl
dFt3czEsIHdzMCwgOF0KKyAgICAgICAgICAgICAgICBzdG9yZWQgZnByLCBDYWxsRnJhbWVIZWFk
ZXJTaXplICsgOCArIG9mZnNldFt3czEsIHdzMCwgOF0KICAgICAgICAgICAgIGVuZCkKIAogICAg
ICAgICAgICAgbG9hZGkgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2Zy
XSwgUEMKQEAgLTI4MDQsMyArMjgxMiwxMTQgQEAgd2FzbU9wKGF0b21pY19mZW5jZSwgV2FzbURy
b3BLZWVwLCBtYWNybyhjdHgpCiAgICAgZmVuY2UKICAgICBkaXNwYXRjaChjdHgpCiBlbmQpCisK
K3dhc21PcCh0aHJvdywgV2FzbVRocm93LCBtYWNybyhjdHgpCisgICAgbG9hZHAgV2FzbTo6SW5z
dGFuY2U6Om1fcG9pbnRlclRvVG9wRW50cnlGcmFtZVt3YXNtSW5zdGFuY2VdLCB0NQorICAgIGxv
YWRwIFt0NV0sIHQ1CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodDUpCisKKyAgICBjYWxsV2FzbVNsb3dQYXRoKF9zbG93X3BhdGhfd2FzbV90aHJvdykK
KyAgICBqdW1wVG9FeGNlcHRpb24oKQorZW5kKQorCit3YXNtT3AocmV0aHJvdywgV2FzbVJldGhy
b3csIG1hY3JvKGN0eCkKKyAgICBjYWxsV2FzbVNsb3dQYXRoKF9zbG93X3BhdGhfd2FzbV9yZXRo
cm93KQorICAgIGp1bXBUb0V4Y2VwdGlvbigpCitlbmQpCisKK21hY3JvIGNhdGNoSW1wbChjdHgs
IHN0b3JlV2FzbUluc3RhbmNlKQorICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MworICAgIGNvbnZl
cnRDYWxsZWVUb1ZNKHQzKQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih0MywgdDApCisKKyAgICBsb2FkcCBWTTo6Y2FsbGVlRm9yV2FzbUNh
dGNoW3QzXSwgd3MxCisgICAgc3RvcmVwIDAsIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hbdDNdCisg
ICAgc3RvcmVwIHdzMSwgQ2FsbGVlW2Nmcl0KKworICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JD
YXRjaFt0M10sIGNmcgorICAgIHN0b3JlcCAwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hbdDNdCisK
KyAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKKworICAgIGxvYWRwIFRoaXNBcmd1
bWVudE9mZnNldFtjZnJdLCB3YXNtSW5zdGFuY2UKKyAgICBsb2FkcCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6Om1faW5zdGFuY2Vbd2FzbUluc3RhbmNlXSwgd2FzbUluc3RhbmNlCisgICAgc3RvcmVX
YXNtSW5zdGFuY2Uod2FzbUluc3RhbmNlKQorICAgIHJlbG9hZE1lbW9yeVJlZ2lzdGVyc0Zyb21J
bnN0YW5jZSh3YXNtSW5zdGFuY2UsIHdzMCwgd3MxKQorCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nm
cl0sIFBCCisgICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcltQQl0sIFBCCisgICAgbG9hZHAgVk06OnRhcmdldEludGVycHJldGVyUENGb3JU
aHJvd1t0M10sIFBDCisgICAgc3VicCBQQiwgUEMKKworICAgIGNhbGxXYXNtU2xvd1BhdGgoX3Ns
b3dfcGF0aF93YXNtX3JldHJpZXZlX2FuZF9jbGVhcl9leGNlcHRpb24pCisgICAgbW92ZSByMSwg
dDEKKworICAgIHdnZXR1KGN0eCwgbV9zdGFydE9mZnNldCwgdDIpCisgICAgd2dldHUoY3R4LCBt
X2FyZ3VtZW50Q291bnQsIHQzKQorCisgICAgbHNoaWZ0aSAzLCB0MgorICAgIHN1YnAgY2ZyLCB0
MiwgdDIKKworLmNvcHlMb29wOgorICAgIGJ0aXogdDMsIC5kb25lCisgICAgbG9hZHEgW3QxXSwg
dDYKKyAgICBzdG9yZXEgdDYsIFt0Ml0KKyAgICBzdWJpIDEsIHQzCisgICAgIyBGSVhNRTogVXNl
IGFybSBzdG9yZS1hZGQvc3ViIGluc3RydWN0aW9ucyBpbiB3YXNtIExMSW50IGNhdGNoCisgICAg
IyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjEwCisgICAgc3Vi
cCA4LCB0MgorICAgIGFkZHAgOCwgdDEKKyAgICBqbXAgLmNvcHlMb29wCisKKy5kb25lOgorICAg
IHRyYWNlRXhlY3V0aW9uKCkKKworICAgIGRpc3BhdGNoKGN0eCkKK2VuZAorCitjb21tb25XYXNt
T3Aod2FzbV9jYXRjaCwgV2FzbUNhdGNoLCBtYWNybygpIGVuZCwgbWFjcm8oY3R4KQorICAgIGNh
dGNoSW1wbChjdHgsIHN0b3JlV2FzbUluc3RhbmNlVG9UTFMpCitlbmQpCisKK2NvbW1vbldhc21P
cCh3YXNtX2NhdGNoX25vX3RscywgV2FzbUNhdGNoLCBtYWNybygpIGVuZCwgbWFjcm8oY3R4KQor
ICAgIGNhdGNoSW1wbChjdHgsIG1hY3JvKGluc3RhbmNlKSBlbmQpCitlbmQpCisKK21hY3JvIGNh
dGNoQWxsSW1wbChjdHgsIHN0b3JlV2FzbUluc3RhbmNlKQorICAgIGxvYWRwIENhbGxlZVtjZnJd
LCB0MworICAgIGNvbnZlcnRDYWxsZWVUb1ZNKHQzKQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0MywgdDApCisKKyAgICBsb2FkcCBWTTo6
Y2FsbGVlRm9yV2FzbUNhdGNoW3QzXSwgd3MxCisgICAgc3RvcmVwIDAsIFZNOjpjYWxsZWVGb3JX
YXNtQ2F0Y2hbdDNdCisgICAgc3RvcmVwIHdzMSwgQ2FsbGVlW2Nmcl0KKworICAgIGxvYWRwIFZN
OjpjYWxsRnJhbWVGb3JDYXRjaFt0M10sIGNmcgorICAgIHN0b3JlcCAwLCBWTTo6Y2FsbEZyYW1l
Rm9yQ2F0Y2hbdDNdCisKKyAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKKworICAg
IGxvYWRwIFRoaXNBcmd1bWVudE9mZnNldFtjZnJdLCB3YXNtSW5zdGFuY2UKKyAgICBsb2FkcCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1faW5zdGFuY2Vbd2FzbUluc3RhbmNlXSwgd2FzbUluc3Rh
bmNlCisgICAgc3RvcmVXYXNtSW5zdGFuY2Uod2FzbUluc3RhbmNlKQorICAgIHJlbG9hZE1lbW9y
eVJlZ2lzdGVyc0Zyb21JbnN0YW5jZSh3YXNtSW5zdGFuY2UsIHdzMCwgd3MxKQorCisgICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6
Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCisgICAgbG9hZHAgVk06OnRhcmdldElu
dGVycHJldGVyUENGb3JUaHJvd1t0M10sIFBDCisgICAgc3VicCBQQiwgUEMKKworICAgIGNhbGxX
YXNtU2xvd1BhdGgoX3Nsb3dfcGF0aF93YXNtX3JldHJpZXZlX2FuZF9jbGVhcl9leGNlcHRpb24p
CisKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisKKyAgICBkaXNwYXRjaChjdHgpCitlbmQKKworY29t
bW9uV2FzbU9wKHdhc21fY2F0Y2hfYWxsLCBXYXNtQ2F0Y2hBbGwsIG1hY3JvKCkgZW5kLCBtYWNy
byhjdHgpCisgICAgY2F0Y2hBbGxJbXBsKGN0eCwgc3RvcmVXYXNtSW5zdGFuY2VUb1RMUykKK2Vu
ZCkKKworY29tbW9uV2FzbU9wKHdhc21fY2F0Y2hfYWxsX25vX3RscywgV2FzbUNhdGNoQWxsLCBt
YWNybygpIGVuZCwgbWFjcm8oY3R4KQorICAgIGNhdGNoQWxsSW1wbChjdHgsIG1hY3JvKGluc3Rh
bmNlKSBlbmQpCitlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvckluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
SW5zdGFuY2UuY3BwCmluZGV4IGRmYjkzMTg4YzA4ZmQ4ZGJhZDNiZjdmODVlMTg1MmI1MjQwNmI1
ZDYuLmI2Y2E1YmM0MjM2YjlkNTY1ZjU4Yzg2YTk3MGNhMzc2NTU5MDk1MDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCkBAIC00MCw2ICs0
MCw5IEBAIEVycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgRXJyb3JUeXBlIGVycm9yVHlwZSkKICAgICAsIG1fb3V0T2ZNZW1vcnlFcnJvcihm
YWxzZSkKICAgICAsIG1fZXJyb3JJbmZvTWF0ZXJpYWxpemVkKGZhbHNlKQogICAgICwgbV9uYXRp
dmVHZXR0ZXJUeXBlRXJyb3IoZmFsc2UpCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICwg
bV9jYXRjaGFibGVGcm9tV2FzbSh0cnVlKQorI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
IHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJ
bnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5o
CmluZGV4IDdkMmU2NDMyNmE4MWRiNmM3NzBhNDYzZDhmOTYzNzY3M2RmYjI5M2IuLmVmZjVlOTg3
MjRiOTA2MjFiMTgyMjAyOWEwOTUwNmI5Yzc5OWUxZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgKQEAgLTgwLDYgKzgwLDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldE5hdGl2ZUdldHRlclR5cGVFcnJvcigpIHsgbV9uYXRpdmVHZXR0ZXJUeXBl
RXJyb3IgPSB0cnVlOyB9CiAgICAgYm9vbCBpc05hdGl2ZUdldHRlclR5cGVFcnJvcigpIGNvbnN0
IHsgcmV0dXJuIG1fbmF0aXZlR2V0dGVyVHlwZUVycm9yOyB9CiAKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgdm9pZCBzZXRDYXRjaGFibGVGcm9tV2FzbShib29sIGZsYWcpIHsgbV9jYXRj
aGFibGVGcm9tV2FzbSA9IGZsYWc7IH0KKyAgICBib29sIGlzQ2F0Y2hhYmxlRnJvbVdhc20oKSBj
b25zdCB7IHJldHVybiBtX2NhdGNoYWJsZUZyb21XYXNtOyB9CisjZW5kaWYKKwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIFN0cmluZyBzYW5pdGl6ZWRUb1N0cmluZyhKU0dsb2JhbE9iamVjdCopOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzYW5pdGl6ZWRNZXNzYWdlU3RyaW5nKEpTR2xv
YmFsT2JqZWN0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNhbml0aXplZE5hbWVT
dHJpbmcoSlNHbG9iYWxPYmplY3QqKTsKQEAgLTExNiw2ICsxMjEsOSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgYm9vbCBtX291dE9mTWVtb3J5RXJyb3IgOiAxOwogICAgIGJvb2wgbV9lcnJvckluZm9NYXRl
cmlhbGl6ZWQgOiAxOwogICAgIGJvb2wgbV9uYXRpdmVHZXR0ZXJUeXBlRXJyb3IgOiAxOworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBib29sIG1fY2F0Y2hhYmxlRnJvbVdhc20gOiAxOwor
I2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyOTdmY2Q2OThmZmJhOTRiNzcy
NmRlNjdkMTliMjQyNTk3MDNhMzJiLi4zMTllNGIzZDhhYjE4MzAwNjBmMjI1NzYxYTE5MmJjY2I4
MDQzN2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCkBAIC0xNTMsNiArMTUzLDcgQEAKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIKICNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5R2xvYmFsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgpAQCAtMTYwLDYgKzE2MSw3IEBA
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNs
dWRlICJMYXp5Q2xhc3NTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGF6eVByb3BlcnR5
SW5saW5lcy5oIgpAQCAtMjIwLDYgKzIyMiw4IEBACiAjaW5jbHVkZSAiV2Vha1NldFByb3RvdHlw
ZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNp
bmNsdWRlICJXZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlHbG9iYWxQcm90b3R5cGUuaCIKQEAgLTIzNiw2ICsyNDAsOCBAQAogI2luY2x1ZGUgIldl
YkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlU
YWJsZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5o
IgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJB
c3NlbWJseVRhZ1Byb3RvdHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KICNp
bmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCA5NjFjMjQ3ZTlhNzkyYTFhZmU2YzljOTg5
NDA3NmYxNGY3MDgyZGVhLi4xYmRjYzRkZTc0ZDA5MjRkMzljODRmOTUyNWM1ZTBiM2U2YWY0MTBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
QEAgLTE2OSwxNCArMTY5LDE2IEBAIGNvbnN0ZXhwciBib29sIHR5cGVFeHBvc2VkQnlEZWZhdWx0
ID0gdHJ1ZTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICNkZWZpbmUgRk9SX0VBQ0hfV0VC
QVNTRU1CTFlfQ09OU1RSVUNUT1JfVFlQRShtYWNybykgXAotICAgIG1hY3JvKFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yLCB3ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgd2ViQXNzZW1ibHlDb21waWxl
RXJyb3IsIEVycm9ySW5zdGFuY2UsICAgICAgICAgICAgIENvbXBpbGVFcnJvciwgZXJyb3IsIHR5
cGVFeHBvc2VkQnlEZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlDb21waWxlRXJyb3Is
IHdlYkFzc2VtYmx5Q29tcGlsZUVycm9yLCB3ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgRXJyb3JJ
bnN0YW5jZSwgICAgICAgICAgICAgQ29tcGlsZUVycm9yLCBlcnJvciwgIHR5cGVFeHBvc2VkQnlE
ZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlFeGNlcHRpb24sICAgIHdlYkFzc2VtYmx5
RXhjZXB0aW9uLCAgICB3ZWJBc3NlbWJseUV4Y2VwdGlvbiwgICAgSlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbiwgICAgRXhjZXB0aW9uLCAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCiAg
ICAgbWFjcm8oV2ViQXNzZW1ibHlHbG9iYWwsICAgICAgIHdlYkFzc2VtYmx5R2xvYmFsLCAgICAg
ICB3ZWJBc3NlbWJseUdsb2JhbCwgICAgICAgSlNXZWJBc3NlbWJseUdsb2JhbCwgICAgICAgR2xv
YmFsLCAgICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCiAgICAgbWFjcm8oV2Vi
QXNzZW1ibHlJbnN0YW5jZSwgICAgIHdlYkFzc2VtYmx5SW5zdGFuY2UsICAgICB3ZWJBc3NlbWJs
eUluc3RhbmNlLCAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlLCAgICAgSW5zdGFuY2UsICAgICBv
YmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCi0gICAgbWFjcm8oV2ViQXNzZW1ibHlMaW5r
RXJyb3IsICAgIHdlYkFzc2VtYmx5TGlua0Vycm9yLCAgICB3ZWJBc3NlbWJseUxpbmtFcnJvciwg
ICAgRXJyb3JJbnN0YW5jZSwgICAgICAgICAgICAgTGlua0Vycm9yLCAgICBlcnJvciwgdHlwZUV4
cG9zZWRCeURlZmF1bHQpIFwKKyAgICBtYWNybyhXZWJBc3NlbWJseUxpbmtFcnJvciwgICAgd2Vi
QXNzZW1ibHlMaW5rRXJyb3IsICAgIHdlYkFzc2VtYmx5TGlua0Vycm9yLCAgICBFcnJvckluc3Rh
bmNlLCAgICAgICAgICAgICBMaW5rRXJyb3IsICAgIGVycm9yLCAgdHlwZUV4cG9zZWRCeURlZmF1
bHQpIFwKICAgICBtYWNybyhXZWJBc3NlbWJseU1lbW9yeSwgICAgICAgd2ViQXNzZW1ibHlNZW1v
cnksICAgICAgIHdlYkFzc2VtYmx5TWVtb3J5LCAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5LCAg
ICAgICBNZW1vcnksICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKICAgICBt
YWNybyhXZWJBc3NlbWJseU1vZHVsZSwgICAgICAgd2ViQXNzZW1ibHlNb2R1bGUsICAgICAgIHdl
YkFzc2VtYmx5TW9kdWxlLCAgICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlLCAgICAgICBNb2R1bGUs
ICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKLSAgICBtYWNybyhXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvciwgd2ViQXNzZW1ibHlSdW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVu
dGltZUVycm9yLCBFcnJvckluc3RhbmNlLCAgICAgICAgICAgICBSdW50aW1lRXJyb3IsIGVycm9y
LCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAotICAgIG1hY3JvKFdlYkFzc2VtYmx5VGFibGUsICAg
ICAgICB3ZWJBc3NlbWJseVRhYmxlLCAgICAgICAgd2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIEpT
V2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIFRhYmxlLCAgICAgICAgb2JqZWN0LCB0eXBlRXhwb3Nl
ZEJ5RGVmYXVsdCkKKyAgICBtYWNybyhXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciwgd2ViQXNzZW1i
bHlSdW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVudGltZUVycm9yLCBFcnJvckluc3RhbmNlLCAg
ICAgICAgICAgICBSdW50aW1lRXJyb3IsIGVycm9yLCAgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwK
KyAgICBtYWNybyhXZWJBc3NlbWJseVRhYmxlLCAgICAgICAgd2ViQXNzZW1ibHlUYWJsZSwgICAg
ICAgIHdlYkFzc2VtYmx5VGFibGUsICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUsICAgICAgICBU
YWJsZSwgICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKKyAgICBtYWNybyhX
ZWJBc3NlbWJseVRhZywgICAgICAgICAgd2ViQXNzZW1ibHlUYWcsICAgICAgICAgIHdlYkFzc2Vt
Ymx5VGFnLCAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFnLCAgICAgICAgICBUYWcsICAgICAgICAg
IG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIAogI2Vsc2UKICNkZWZpbmUgRk9SX0VBQ0hf
V0VCQVNTRU1CTFlfQ09OU1RSVUNUT1JfVFlQRShtYWNybykKICNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaApp
bmRleCA1NDAxZmYzODMxZDg2NTA3MTU1YjE5MzI0YmUzOTdmZmJkMzNkOTM0Li5lMDc4MzNmNDdh
YmMxYTRiMDkyNDIxNWM1NzU3YmY2ZWJkZTU2NDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKQEAgLTU0Myw2ICs1NDMsNyBAQCBib29sIGNhblVzZVdl
YkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoQm9vbCwgdXNlVGVtcG9yYWwsIGZhbHNlLCBO
b3JtYWwsICJFeHBvc2UgdGhlIFRlbXBvcmFsIG9iamVjdC4iKSBcCiAgICAgdihCb29sLCB1c2VX
ZWJBc3NlbWJseVRocmVhZGluZywgdHJ1ZSwgTm9ybWFsLCAiQWxsb3cgaW5zdHJ1Y3Rpb25zIGZy
b20gdGhlIHdhc20gdGhyZWFkaW5nIHNwZWMuIikgXAogICAgIHYoQm9vbCwgdXNlV2ViQXNzZW1i
bHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNlcywgZmFsc2UsIE5vcm1hbCwgIkFsbG93IGZ1bmN0aW9u
IHR5cGVzIGZyb20gdGhlIHdhc20gdHlwZWQgZnVuY3Rpb24gcmVmZXJlbmNlcyBzcGVjLiIpIFwK
KyAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucywgdHJ1ZSwgTm9ybWFsLCAiQWxs
b3cgdGhlIG5ldyBzZWN0aW9uIGFuZCBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgd2FzbSBleGNlcHRp
b24gaGFuZGxpbmcgc3BlYy4iKSBcCiAKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggOTk2YTA2ZGFhYmE4MmNjZWZiNDNkZjNm
NjVmMTMxZTZmZGU2ZWUwNy4uMzhlOTUxMjliYTlmMDIxMTBhMWM0M2UwNTFjNGFhNjc4YzZmZDBk
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMTI5LDExICsxMjksMTMg
QEAKICNpbmNsdWRlICJKU1dlYWtPYmplY3RSZWYuaCIKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlHbG9iYWwuaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVt
b3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRl
ICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk1pbmlt
dW1SZXNlcnZlZFpvbmVTaXplLmgiCkBAIC0zMzQsNiArMzM2LDcgQEAgVk06OlZNKFZNVHlwZSB2
bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlLCBXVEY6OlJ1bkxvb3AqIHJ1bkxvb3AsIGJvb2wqIHN1
Y2Nlc3MpCiAgICAgLCBpbnRsU2VnbWVudHNIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpj
cmVhdGU8SW50bFNlZ21lbnRzPigpKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAsIHdl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s+KCkpCisgICAgLCB3ZWJBc3NlbWJseUV4Y2VwdGlvbkhlYXBD
ZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uPigp
KQogICAgICwgd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6
OmNyZWF0ZTxXZWJBc3NlbWJseUZ1bmN0aW9uPigpKQogICAgICwgd2ViQXNzZW1ibHlHbG9iYWxI
ZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseUdsb2JhbD4o
KSkKICAgICAsIHdlYkFzc2VtYmx5SW5zdGFuY2VIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBl
OjpjcmVhdGU8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpKQpAQCAtMzQxLDYgKzM0NCw3IEBAIFZN
OjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSwgV1RGOjpSdW5Mb29wKiBydW5M
b29wLCBib29sKiBzdWNjZXNzKQogICAgICwgd2ViQXNzZW1ibHlNb2R1bGVIZWFwQ2VsbFR5cGUo
SXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseU1vZHVsZT4oKSkKICAgICAsIHdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRl
PFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkPigpKQogICAgICwgd2ViQXNzZW1ibHlUYWJsZUhlYXBD
ZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5VGFibGU+KCkpCisg
ICAgLCB3ZWJBc3NlbWJseVRhZ0hlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxK
U1dlYkFzc2VtYmx5VGFnPigpKQogI2VuZGlmCiAgICAgLCBwcmltaXRpdmVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlKCJQcmltaXRpdmUgR2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5
SGVhcENlbGxUeXBlLmdldCgpLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkgLy8g
SGFzaDoweDNlN2NkNzYyCiAgICAgLCBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiSlNW
YWx1ZSBHaWdhY2FnZSBBdXhpbGlhcnkiLCBoZWFwLCBhdXhpbGlhcnlIZWFwQ2VsbFR5cGUuZ2V0
KCksIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkgLy8gSGFzaDoweDI0MWU5NDYKQEAg
LTE2MjksNiArMTYzMyw3IEBAIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhpbnRsU2VnbWVudHNTcGFjZSwgaW50bFNlZ21lbnRzSGVhcENlbGxUCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpzVG9X
YXNtSUNDYWxsZWVTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUb1dhc21JQ0NhbGxl
ZSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUNv
ZGVCbG9ja1NwYWNlLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5nZXQoKSwgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jaykgLy8gSGFzaDoweDlhZDk5NWNkCitEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlFeGNlcHRpb25TcGFjZSwgd2ViQXNz
ZW1ibHlFeGNlcHRpb25IZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24p
CiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlGdW5j
dGlvblNwYWNlLCB3ZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmdldCgpLCBXZWJBc3Nl
bWJseUZ1bmN0aW9uKSAvLyBIYXNoOjB4OGI3YzMyZGIKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUdsb2JhbFNwYWNlLCB3ZWJBc3NlbWJseUdsb2Jh
bEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNXZWJBc3NlbWJseUdsb2JhbCkKIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UsIHdlYkFz
c2VtYmx5SW5zdGFuY2VIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkK
QEAgLTE2MzYsNiArMTY0MSw3IEBAIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyh3ZWJBc3NlbWJseU1lbW9yeVNwYWNlLCB3ZWJBc3NlbWJseU1lbW9yCiBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlNb2R1bGVTcGFjZSwgd2Vi
QXNzZW1ibHlNb2R1bGVIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlNb2R1bGUpCiBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmRTcGFjZSwgd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRIZWFwQ2VsbFR5cGUuZ2V0KCksIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKHdlYkFzc2VtYmx5VGFibGVTcGFjZSwgd2ViQXNzZW1ibHlUYWJsZUhlYXBDZWxsVHlw
ZS5nZXQoKSwgSlNXZWJBc3NlbWJseVRhYmxlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5VGFnU3BhY2UsIHdlYkFzc2VtYmx5VGFnSGVhcENlbGxU
eXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5VGFnKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3BhY2UsIGNlbGxIZWFwQ2Vs
bFR5cGUuZ2V0KCksIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKSAvLyBIYXNoOjB4ZDRhNWZm
MDEKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA3YTU4YjI3OWU2
NzBhODQwM2QxZjM5NDEyMzU3ZDVlNzcxMTNmNTc4Li5hYTg5YjI4YWRlMmYyNWI2Y2M4NDQwZDYx
NGJjOTQ3YWUzYmE0Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTI5LDYg
KzI5LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKKyNpbmNsdWRl
ICJDYWxsZWVCaXRzLmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2lu
Y2x1ZGUgIkNvbXBsZXRlU3Vic3BhY2UuaCIKICNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgi
CkBAIC00NTAsNiArNDUxLDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFw
Q2VsbFR5cGU+IGludGxTZWdtZW50c0hlYXBDZWxsVHlwZTsKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlDb2Rl
QmxvY2tIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4g
d2ViQXNzZW1ibHlFeGNlcHRpb25IZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElz
b0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUdsb2JhbEhlYXBDZWxsVHlw
ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUluc3Rh
bmNlSGVhcENlbGxUeXBlOwpAQCAtNDU3LDYgKzQ1OSw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseU1vZHVsZUhlYXBDZWxsVHlwZTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseU1vZHVsZVJl
Y29yZEhlYXBDZWxsVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3
ZWJBc3NlbWJseVRhYmxlSGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFw
Q2VsbFR5cGU+IHdlYkFzc2VtYmx5VGFnSGVhcENlbGxUeXBlOwogI2VuZGlmCiAKICNpZiBFTkFC
TEUoSklUKQpAQCAtNjI2LDYgKzYyOSw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1RvV2FzbUlDQ2Fs
bGVlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3Nl
bWJseUNvZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIod2ViQXNzZW1ibHlFeGNlcHRpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5R2xvYmFsU3BhY2UpCiAgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UpCkBA
IC02MzMsNiArNjM3LDcgQEAgcHVibGljOgogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIod2ViQXNzZW1ibHlNb2R1bGVTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3BhY2UpCiAgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVRhYmxlU3BhY2UpCisgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVRhZ1NwYWNlKQog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb25TcGFjZSkKICNlbmRpZgogCkBAIC04OTYsNiArOTAxLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWTSwgY2FsbEZyYW1lRm9yQ2F0Y2gpOwogICAg
IH0KIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGNhbGxlZUZvcldhc21DYXRj
aCk7CisgICAgfQorCiAgICAgc3RhdGljIHB0cmRpZmZfdCB0b3BFbnRyeUZyYW1lT2Zmc2V0KCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcEVudHJ5RnJhbWUp
OwpAQCAtOTkwLDYgKzEwMDAsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgdmFyYXJnc0xlbmd0
aDsKICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZVJldHVyblZhbHVlOwogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lRm9yQ2F0Y2g7CisgICAgQ2FsbGVlQml0cyBjYWxsZWVGb3JXYXNtQ2F0Y2g7
CiAgICAgdm9pZCogdGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIHRhcmdldEludGVycHJldGVyUENGb3JUaHJvdzsKICAgICB1aW50MzJfdCBvc3JFeGl0SW5k
ZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5l
cmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9y
LmNwcAppbmRleCBmOWMyOTQ2MDA2MTg3M2QwMDQ0OThhODAwNDQ2NjJjZTIxN2Y2YmU0Li43OTI4
MmI3N2U3ODYxNjFkNWRmMDhhNmRmODFhNDJmZWUxMTgzOWZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTE0Nyw3ICsxNDcs
MTIgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNJZihjb25z
dCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBC
bG9ja1R5cGU6OklmOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzVHJ5KGNvbnN0IENvbnRyb2xE
YXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6
VHJ5OyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNv
bnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpDYXRjaDsg
fQorICAgICAgICBzdGF0aWMgYm9vbCBpc0FueUNhdGNoKGNvbnN0IENvbnRyb2xEYXRhJiBjb250
cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2g7IH0K
ICAgICAgICAgc3RhdGljIGJvb2wgaXNUb3BMZXZlbChjb25zdCBDb250cm9sRGF0YSYgY29udHJv
bCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsOyB9
CisgICAgICAgIHN0YXRpYyBib29sIGlzTG9vcChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkg
eyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3A7IH0KKyAgICAg
ICAgc3RhdGljIGJvb2wgaXNCbG9jayhjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1
cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkJsb2NrOyB9CiAKICAgICAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIHsKQEAgLTE2NCw2ICsx
NjksMTIgQEAgcHVibGljOgogICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRvcExldmVsOgog
ICAgICAgICAgICAgICAgIG91dC5wcmludCgiVG9wTGV2ZWw6ICIpOwogICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRyeToKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoIlRyeTogIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEJsb2NrVHlwZTo6Q2F0Y2g6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJDYXRj
aDogIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBvdXQucHJpbnQoIkNvbnRpbnVhdGlvbjogIiwgKmNvbnRpbnVhdGlvbiwgIiwgU3BlY2lhbDog
Iik7CiAgICAgICAgICAgICBpZiAoc3BlY2lhbCkKQEAgLTMxNCw2ICszMjUsMTYgQEAgcHVibGlj
OgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERh
dGEmLCBjb25zdCBTdGFjayYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3Np
bmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25J
bmRleCwgY29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3Qm
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFj
aGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xU
eXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhdGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShDb250cm9s
VHlwZSYsIENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUaHJvdyh1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXRocm93KHVuc2lnbmVkLCBD
b250cm9sVHlwZSYpOworCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
UmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRh
JiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29u
dHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsK
QEAgLTI5ODIsNiArMzAwMyw2MCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJl
YWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7
IH07CiB9CiAKKy8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgV2FzbSBleGNlcHRpb25zIGluIHRo
ZSBBaXIgZ2VuZXJhdG9yCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMxMjExCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0
YWNrJiwgQ29udHJvbFR5cGUmLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCwgY29u
c3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUo
dW5zaWduZWQsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsKFN0YWNr
JiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9Owor
fQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRy
b2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRGVs
ZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIFN0YWNrJikgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIFVOVVNFRF9QQVJBTShleGNlcHRpb25JbmRleCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5
cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKwogYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBTdGFj
ayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ2FsbEluZm9ybWF0aW9u
IHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZv
cigqZGF0YS5zaWduYXR1cmUoKSwgQ2FsbFJvbGU6OkNhbGxlZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggMDgxY2MyYjI1NWVm
ZDk1NTcxYzNlNTkxMWU0Mzc4MGI3OTRjYzNhMC4uZmU2YjM4ZjNjYzNjMmJkNDFlNTA3YmZjMzEy
ZTRiMDY1Yjk4NTM2YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcApAQCAtNDgsNiArNDgsOCBAQAogI2luY2x1ZGUgIkIzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2lu
Y2x1ZGUgIldhc21Db250ZXh0SW5saW5lcy5oIgpAQCAtODMsMTggKzg1LDMzIEBAIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiB9CiAKK2NsYXNzIEIzSVJHZW5lcmF0
b3I7CitzdHJ1Y3QgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7CisgICAgdm9pZCBnZW5lcmF0
ZShDQ2FsbEhlbHBlcnMmLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiwgQjNJ
UkdlbmVyYXRvciopIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX2lu
dmFsaWRDYWxsU2l0ZUluZGV4ID0gIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsKKworICAgIHVuc2lnbmVkIG1fY2FsbFNpdGVJbmRleCB7c19pbnZhbGlkQ2FsbFNpdGVJbmRl
eCB9OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworfTsKKwogY2xhc3MgQjNJUkdlbmVyYXRvciB7
CiBwdWJsaWM6Ci0gICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSBWYWx1ZSo7CisgICAgdXNpbmcg
RXhwcmVzc2lvblR5cGUgPSBWYXJpYWJsZSo7CiAgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3Rv
cjxFeHByZXNzaW9uVHlwZSwgOD47CiAKICAgICBzdHJ1Y3QgQ29udHJvbERhdGEgewotICAgICAg
ICBDb250cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIEJsb2NrU2lnbmF0
dXJlIHNpZ25hdHVyZSwgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwg
QmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIpCisgICAgICAgIENvbnRyb2xEYXRhKFByb2Nl
ZHVyZSYgcHJvYywgT3JpZ2luIG9yaWdpbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBCbG9j
a1R5cGUgdHlwZSwgdW5zaWduZWQgc3RhY2tTaXplLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24s
IEJhc2ljQmxvY2sqIHNwZWNpYWwgPSBudWxscHRyKQogICAgICAgICAgICAgOiBjb250cm9sQmxv
Y2tUeXBlKHR5cGUpCiAgICAgICAgICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKKyAgICAg
ICAgICAgICwgbV9zdGFja1NpemUoc3RhY2tTaXplKQogICAgICAgICAgICAgLCBjb250aW51YXRp
b24oY29udGludWF0aW9uKQogICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwpCiAgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlICE9IEJsb2NrVHlwZTo6VHJ5ICYmIHR5cGUgIT0g
QmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICBpZiAodHlwZSAhPSBCbG9ja1R5cGU6OlRv
cExldmVsKQorICAgICAgICAgICAgICAgIG1fc3RhY2tTaXplIC09IHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOworCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBCbG9ja1R5cGU6Okxvb3ApIHsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5h
ZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJlLT5hcmd1bWVudChpKSksIG9yaWdpbikp
OwpAQCAtMTA0LDEyICsxMjEsMzcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKKyAgICAgICAgQ29udHJvbERhdGEoUHJvY2VkdXJlJiBwcm9jLCBPcmlnaW4gb3JpZ2luLCBC
bG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIEJsb2NrVHlwZSB0eXBlLCB1bnNpZ25lZCBzdGFja1Np
emUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgdW5zaWduZWQgdHJ5U3RhcnQsIHVuc2lnbmVk
IHRyeURlcHRoKQorICAgICAgICAgICAgOiBjb250cm9sQmxvY2tUeXBlKHR5cGUpCisgICAgICAg
ICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKKyAgICAgICAgICAgICwgbV9zdGFja1NpemUo
c3RhY2tTaXplKQorICAgICAgICAgICAgLCBjb250aW51YXRpb24oY29udGludWF0aW9uKQorICAg
ICAgICAgICAgLCBzcGVjaWFsKG51bGxwdHIpCisgICAgICAgICAgICAsIG1fdHJ5U3RhcnQodHJ5
U3RhcnQpCisgICAgICAgICAgICAsIG1fdHJ5RGVwdGgodHJ5RGVwdGgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFVOVVNFRF9QQVJBTShwcm9jKTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShv
cmlnaW4pOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+
cmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICAgICAgICAgIHBoaXMuYXBwZW5kKHByb2MuYWRk
PFZhbHVlPihQaGksIHRvQjNUeXBlKHNpZ25hdHVyZS0+cmV0dXJuVHlwZShpKSksIG9yaWdpbikp
OworICAgICAgICB9CisKICAgICAgICAgQ29udHJvbERhdGEoKQogICAgICAgICB7CiAgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0lmKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9s
KSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWY7IH0KKyAgICAg
ICAgc3RhdGljIGJvb2wgaXNUcnkoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJu
IGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUcnk7IH0KKyAgICAgICAgc3RhdGlj
IGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29u
dHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoOyB9CiAgICAgICAgIHN0YXRpYyBi
b29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRy
b2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbDsgfQorICAgICAgICBzdGF0aWMg
Ym9vbCBpc0xvb3AoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wu
YmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlz
QmxvY2soY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tU
eXBlKCkgPT0gQmxvY2tUeXBlOjpCbG9jazsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNo
KGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udHJvbC5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5cGU6OkNhdGNoKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBjb250cm9sLmNhdGNoS2luZCgpID09
IENhdGNoS2luZDo6Q2F0Y2g7CisgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgewpAQCAtMTI2LDYgKzE2OCwxMiBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6VG9wTGV2ZWw6CiAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCJUb3BMZXZlbDogIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEJsb2NrVHlwZTo6VHJ5OgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVHJ5
OiAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBl
OjpDYXRjaDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkNhdGNoOiAiKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5wcmludCgiQ29u
dGludWF0aW9uOiAiLCAqY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKICAgICAgICAgICAg
IGlmIChzcGVjaWFsKQpAQCAtMTU0LDYgKzIwMiwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBz
cGVjaWFsID0gbnVsbHB0cjsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgY29udmVydFRyeVRv
Q2F0Y2godW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVmFyaWFibGUqIGV4Y2VwdGlvbikK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6
VHJ5KTsKKyAgICAgICAgICAgIGNvbnRyb2xCbG9ja1R5cGUgPSBCbG9ja1R5cGU6OkNhdGNoOwor
ICAgICAgICAgICAgbV9jYXRjaEtpbmQgPSBDYXRjaEtpbmQ6OkNhdGNoOworICAgICAgICAgICAg
bV90cnlFbmQgPSB0cnlFbmRDYWxsU2l0ZUluZGV4OworICAgICAgICAgICAgbV9leGNlcHRpb24g
PSBleGNlcHRpb247CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNvbnZlcnRUcnlUb0NhdGNo
QWxsKHVuc2lnbmVkIHRyeUVuZENhbGxTaXRlSW5kZXgsIFZhcmlhYmxlKiBleGNlcHRpb24pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRy
eSk7CisgICAgICAgICAgICBjb250cm9sQmxvY2tUeXBlID0gQmxvY2tUeXBlOjpDYXRjaDsKKyAg
ICAgICAgICAgIG1fY2F0Y2hLaW5kID0gQ2F0Y2hLaW5kOjpDYXRjaEFsbDsKKyAgICAgICAgICAg
IG1fdHJ5RW5kID0gdHJ5RW5kQ2FsbFNpdGVJbmRleDsKKyAgICAgICAgICAgIG1fZXhjZXB0aW9u
ID0gZXhjZXB0aW9uOworICAgICAgICB9CisKICAgICAgICAgU2lnbmF0dXJlQXJnQ291bnQgYnJh
bmNoVGFyZ2V0QXJpdHkoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoYmxvY2tU
eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQpAQCAtMTY5LDEzICsyMzUsNTMgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpOwogICAgICAgICB9
CiAKKyAgICAgICAgdW5zaWduZWQgdHJ5U3RhcnQoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBjb250cm9s
QmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fdHJ5
U3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlFbmQoKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6
OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeUVuZDsKKyAgICAgICAgfQorCisgICAg
ICAgIHVuc2lnbmVkIHRyeURlcHRoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlw
ZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeURlcHRoOwor
ICAgICAgICB9CisKKyAgICAgICAgQ2F0Y2hLaW5kIGNhdGNoS2luZCgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0
Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fY2F0Y2hLaW5kOworICAgICAgICB9CisKKyAgICAg
ICAgVmFyaWFibGUqIGV4Y2VwdGlvbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAg
cmV0dXJuIG1fZXhjZXB0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc3RhY2tT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1NpemU7IH0KKwogICAgIHByaXZhdGU6CisgICAg
ICAgIC8vIEZJWE1FOiBDb21wcmVzcyBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBmaWVsZHMg
dXNpbmcgYW4gdW5pb24KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMTIxMgogICAgICAgICBmcmllbmQgY2xhc3MgQjNJUkdlbmVyYXRvcjsKICAg
ICAgICAgQmxvY2tUeXBlIGNvbnRyb2xCbG9ja1R5cGU7CiAgICAgICAgIEJsb2NrU2lnbmF0dXJl
IG1fc2lnbmF0dXJlOworICAgICAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKICAgICAgICAgQmFz
aWNCbG9jayogY29udGludWF0aW9uOwogICAgICAgICBCYXNpY0Jsb2NrKiBzcGVjaWFsOwotICAg
ICAgICBSZXN1bHRMaXN0IHBoaXM7CisgICAgICAgIFZlY3RvcjxWYWx1ZSo+IHBoaXM7CisgICAg
ICAgIHVuc2lnbmVkIG1fdHJ5U3RhcnQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5RW5kOworICAg
ICAgICB1bnNpZ25lZCBtX3RyeURlcHRoOworICAgICAgICBDYXRjaEtpbmQgbV9jYXRjaEtpbmQ7
CisgICAgICAgIFZhcmlhYmxlKiBtX2V4Y2VwdGlvbjsKICAgICB9OwogCiAgICAgdXNpbmcgQ29u
dHJvbFR5cGUgPSBDb250cm9sRGF0YTsKQEAgLTI3Myw2ICszNzksMTYgQEAgcHVibGljOgogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBj
b25zdCBTdGFjayYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVs
c2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFj
aywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFjaGFibGUo
dW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwg
UmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENh
dGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShDb250cm9sVHlwZSYs
IENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
RGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9s
VHlwZSYpOworCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJu
KGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhw
cmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERh
dGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKQEAgLTI4
NiwyMCArNDAyLDM2IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJl
JiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbFJlZihjb25zdCBTaWdu
YXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRz
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgp
OwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRJbmRpcmVjdENhbGwo
VmFsdWUqIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlLCBjb25zdCBT
aWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdEluZGlyZWN0Q2FsbChWYWx1
ZSogY2FsbGVlSW5zdGFuY2UsIFZhbHVlKiBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmLCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7CiAgICAgQjM6OlZhbHVl
KiBjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiwgT3JpZ2luLCBjb25zdCBTaWduYXR1
cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBjb25zdCBTY29wZWRMYW1iZGE8dm9p
ZChQYXRjaHBvaW50VmFsdWUqKT4mIHBhdGNocG9pbnRGdW5jdG9yKTsKIAogICAgIHZvaWQgZHVt
cChjb25zdCBDb250cm9sU3RhY2smLCBjb25zdCBTdGFjayogZXhwcmVzc2lvblN0YWNrKTsKICAg
ICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiogcGFyc2VyKSB7
IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2Fscygp
IHsgfQotICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IH0KKyAgICB2b2lkIGRpZFBv
cFZhbHVlRnJvbVN0YWNrKCkgeyAtLW1fc3RhY2tTaXplOyB9CiAKICAgICBWYWx1ZSogY29uc3Rh
bnQoQjM6OlR5cGUsIHVpbnQ2NF90IGJpdHMsIHN0ZDo6b3B0aW9uYWw8T3JpZ2luPiA9IHN0ZDo6
bnVsbG9wdCk7CiAgICAgVmFsdWUqIGZyYW1lUG9pbnRlcigpOworICAgIHZvaWQgaW5zZXJ0RW50
cnlTd2l0Y2goKTsKICAgICB2b2lkIGluc2VydENvbnN0YW50cygpOwogCiAgICAgQjM6OlR5cGUg
dG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUpOwogCisgICAgdm9pZCBhZGRTdGFja01hcCh1
bnNpZ25lZCBjYWxsU2l0ZUluZGV4LCBTdGFja01hcCYmIHN0YWNrbWFwKQorICAgIHsKKyAgICAg
ICAgbV9zdGFja21hcHMuYWRkKENhbGxTaXRlSW5kZXgoY2FsbFNpdGVJbmRleCksIFdURk1vdmUo
c3RhY2ttYXApKTsKKyAgICB9CisKKyAgICBTdGFja01hcHMmJiB0YWtlU3RhY2ttYXBzKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fc3RhY2ttYXBzKTsKKyAgICB9CisKKyAgICBW
ZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiB0YWtlRXhjZXB0aW9uSGFuZGxlcnMoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9leGNlcHRpb25IYW5kbGVycyk7CisgICAgfQor
CiBwcml2YXRlOgogICAgIHZvaWQgZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVycyYsIEV4
Y2VwdGlvblR5cGUpOwogCkBAIC0zMDcsMjggKzQzOSwzMyBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgsIGNvbnN0IFN0YWNrJiBlbmNs
b3NpbmdTdGFjaywgY29uc3QgU3RhY2smIG5ld1N0YWNrKTsKIAogICAgIHZvaWQgZW1pdFdyaXRl
QmFycmllckZvckpTV3JhcHBlcigpOwotICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFBy
ZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWlu
dDMyX3Qgc2l6ZU9mT3ApOworICAgIFZhbHVlKiBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihW
YWx1ZSogcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CiAgICAg
QjM6OktpbmQgbWVtb3J5S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9wKTsKLSAgICBFeHByZXNzaW9u
VHlwZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQz
Ml90IG9mZnNldCk7Ci0gICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7Cisg
ICAgVmFsdWUqIGVtaXRMb2FkT3AoTG9hZE9wVHlwZSwgVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90
IG9mZnNldCk7CisgICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgVmFsdWUqIHBvaW50
ZXIsIFZhbHVlKiwgdWludDMyX3Qgb2Zmc2V0KTsKIAotICAgIEV4cHJlc3Npb25UeXBlIHNhbml0
aXplQXRvbWljUmVzdWx0KEV4dEF0b21pY09wVHlwZSwgVHlwZSwgRXhwcmVzc2lvblR5cGUgcmVz
dWx0KTsKLSAgICBFeHByZXNzaW9uVHlwZSBlbWl0QXRvbWljTG9hZE9wKEV4dEF0b21pY09wVHlw
ZSwgVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KTsKLSAgICB2
b2lkIGVtaXRBdG9taWNTdG9yZU9wKEV4dEF0b21pY09wVHlwZSwgVHlwZSwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7Ci0gICAg
RXhwcmVzc2lvblR5cGUgZW1pdEF0b21pY0JpbmFyeVJNV09wKEV4dEF0b21pY09wVHlwZSwgVHlw
ZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90
IG9mZnNldCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdEF0b21pY0NvbXBhcmVFeGNoYW5nZShF
eHRBdG9taWNPcFR5cGUsIFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25U
eXBlIGV4cGVjdGVkLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAg
ICBWYWx1ZSogc2FuaXRpemVBdG9taWNSZXN1bHQoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1
ZSogcmVzdWx0KTsKKyAgICBWYWx1ZSogZW1pdEF0b21pY0xvYWRPcChFeHRBdG9taWNPcFR5cGUs
IFR5cGUsIFZhbHVlKiBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOworICAgIHZvaWQgZW1pdEF0
b21pY1N0b3JlT3AoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUq
LCB1aW50MzJfdCBvZmZzZXQpOworICAgIFZhbHVlKiBlbWl0QXRvbWljQmluYXJ5Uk1XT3AoRXh0
QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUqLCB1aW50MzJfdCBvZmZz
ZXQpOworICAgIFZhbHVlKiBlbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0b21pY09wVHlw
ZSwgVHlwZSwgVmFsdWUqIHBvaW50ZXIsIFZhbHVlKiBleHBlY3RlZCwgVmFsdWUqLCB1aW50MzJf
dCBvZmZzZXQpOwogCi0gICAgdm9pZCB1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSBwaGksIGNv
bnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSk7Ci0gICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9j
ayhjb25zdCBTdGFjayYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHN0YWNrKTsKKyAg
ICB2b2lkIHVuaWZ5KFZhbHVlKiBwaGksIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSk7Cisg
ICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYgcmVzdWx0U3RhY2ssIGNv
bnN0IENvbnRyb2xEYXRhJiBibG9jayk7CiAKLSAgICB2b2lkIGVtaXRDaGVja3NGb3JNb2RPckRp
dihCMzo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCk7
CisgICAgdm9pZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSwgVmFsdWUqIGxlZnQs
IFZhbHVlKiByaWdodCk7CiAKLSAgICBpbnQzMl90IFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBv
aW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiwgdWludDMyX3QpOwotICAgIEV4cHJlc3Np
b25UeXBlIFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWlj
T3BzKEV4dEF0b21pY09wVHlwZSwgRXhwcmVzc2lvblR5cGUsIHVpbnQzMl90KTsKKyAgICBpbnQz
Ml90IFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KFZhbHVlKiYsIHVp
bnQzMl90KTsKKyAgICBWYWx1ZSogV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNP
ZmZzZXRGb3JBdG9taWNPcHMoRXh0QXRvbWljT3BUeXBlLCBWYWx1ZSosIHVpbnQzMl90KTsKIAog
ICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiwgQmFzaWNCbG9j
ayosIFZhbHVlKik7CiAgICAgZW51bSBjbGFzcyBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCB7IE5v
LCBZZXMgfTsKLSAgICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVD
YWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFZhbHVlKiBpbnN0YW5j
ZSwgUHJvY2VkdXJlJiwgQmFzaWNCbG9jayopOworICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5
R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9ybWF0
aW9uJiwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKiwgYm9vbCByZXN0
b3JlSW5zdGFuY2UgPSB0cnVlKTsKKworICAgIFZhbHVlKiBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIo
dW5zaWduZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBwb2ludGVyLCBCMzo6VHlwZSk7CisgICAg
dm9pZCBjb25uZWN0Q29udHJvbEVudHJ5KHVuc2lnbmVkJiBpbmRleEluQnVmZmVyLCBWYWx1ZSog
cG9pbnRlciwgQ29udHJvbERhdGEmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBDb250cm9sRGF0
YSYgY3VycmVudERhdGEsIGJvb2wgZmlsbExvb3BQaGlzID0gZmFsc2UpOworICAgIFZhbHVlKiBl
bWl0Q2F0Y2hJbXBsKENhdGNoS2luZCwgQ29udHJvbFR5cGUmLCB1bnNpZ25lZCBleGNlcHRpb25J
bmRleCA9IDApOworICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgcHJlcGFyZVBhdGNocG9p
bnRGb3JFeGNlcHRpb25zKEJhc2ljQmxvY2sqLCBQYXRjaHBvaW50VmFsdWUqKTsKIAogICAgIE9y
aWdpbiBvcmlnaW4oKTsKIApAQCAtMzM5LDYgKzQ3Niw2MiBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gbV9vdXRlckxvb3BzLmxhc3QoKTsKICAgICB9CiAKKyAgICBFeHByZXNzaW9uVHlwZSBw
dXNoKFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBwdXNoKHRvQjNUeXBlKHR5cGUp
KTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uVHlwZSBwdXNoKEIzOjpUeXBlIHR5cGUpCisgICAg
eworICAgICAgICArK21fc3RhY2tTaXplOworICAgICAgICBpZiAobV9zdGFja1NpemUgPiBtX21h
eFN0YWNrU2l6ZSkgeworICAgICAgICAgICAgbV9tYXhTdGFja1NpemUgPSBtX3N0YWNrU2l6ZTsK
KyAgICAgICAgICAgIFZhcmlhYmxlKiB2YXIgPSBtX3Byb2MuYWRkVmFyaWFibGUodHlwZSk7Cisg
ICAgICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXIpOworICAgICAgICAgICAgcmV0dXJuIHZhcjsK
KyAgICAgICAgfQorCisgICAgICAgIFZhcmlhYmxlKiB2YXIgPSBtX3N0YWNrW21fc3RhY2tTaXpl
IC0gMV07CisgICAgICAgIGlmICh2YXItPnR5cGUoKSA9PSB0eXBlKQorICAgICAgICAgICAgcmV0
dXJuIHZhcjsKKworICAgICAgICB2YXIgPSBtX3Byb2MuYWRkVmFyaWFibGUodHlwZSk7CisgICAg
ICAgIG1fc3RhY2tbbV9zdGFja1NpemUgLSAxXSA9IHZhcjsKKyAgICAgICAgcmV0dXJuIHZhcjsK
KyAgICB9CisKKyAgICBFeHByZXNzaW9uVHlwZSBwdXNoKFZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIFZhcmlhYmxlKiB2YXIgPSBwdXNoKHZhbHVlLT50eXBlKCkpOworICAgICAgICBzZXQo
dmFyLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB2YXI7CisgICAgfQorCisgICAgVmFsdWUqIGdl
dChCYXNpY0Jsb2NrKiBibG9jaywgVmFyaWFibGUqIHZhcmlhYmxlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBv
cmlnaW4oKSwgdmFyaWFibGUpOworICAgIH0KKworICAgIFZhbHVlKiBnZXQoVmFyaWFibGUqIHZh
cmlhYmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldChtX2N1cnJlbnRCbG9jaywgdmFyaWFi
bGUpOworICAgIH0KKworICAgIFZhbHVlKiBzZXQoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxl
KiBkc3QsIFZhbHVlKiBzcmMpCisgICAgeworICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5l
dzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIG9yaWdpbigpLCBkc3QsIHNyYyk7Cisg
ICAgfQorCisgICAgVmFsdWUqIHNldChWYXJpYWJsZSogZHN0LCBWYWx1ZSogc3JjKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHNldChtX2N1cnJlbnRCbG9jaywgZHN0LCBzcmMpOworICAgIH0KKwor
ICAgIFZhbHVlKiBzZXQoVmFyaWFibGUqIGRzdCwgVmFyaWFibGUqIHNyYykKKyAgICB7CisgICAg
ICAgIHJldHVybiBzZXQoZHN0LCBnZXQoc3JjKSk7CisgICAgfQorCiAgICAgRnVuY3Rpb25QYXJz
ZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OwogICAgIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBtX2luZm87CiAgICAgY29uc3QgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwpAQCAtMzQ4LDEwICs1NDEsMTIgQEAgcHJpdmF0ZToK
ICAgICBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRyIH07CiAKICAgICBQcm9jZWR1cmUm
IG1fcHJvYzsKLSAgICBCYXNpY0Jsb2NrKiBtX3Jvb3RCbG9jayB7IG51bGxwdHIgfTsKKyAgICBW
ZWN0b3I8QmFzaWNCbG9jayo+IG1fcm9vdEJsb2NrczsKKyAgICBCYXNpY0Jsb2NrKiBtX3RvcExl
dmVsQmxvY2s7CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAg
ICAgVmVjdG9yPHVpbnQzMl90PiBtX291dGVyTG9vcHM7CiAgICAgVmVjdG9yPFZhcmlhYmxlKj4g
bV9sb2NhbHM7CisgICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9zdGFjazsKICAgICBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3Qg
ZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNo
b3VsZCBiZSBwYXRjaGVkIHdpdGguCiAgICAgdW5zaWduZWQmIG1fb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZTsKICAgICBIYXNoTWFwPFZhbHVlS2V5LCBWYWx1ZSo+IG1fY29uc3RhbnRQb29sOwpA
QCAtMzY1LDYgKzU2MCw3IEBAIHByaXZhdGU6CiAKICAgICBWYWx1ZSogbV9pbnN0YW5jZVZhbHVl
IHsgbnVsbHB0ciB9OyAvLyBBbHdheXMgdXNlIHRoZSBhY2Nlc3NvciBiZWxvdyB0byBlbnN1cmUg
dGhlIGluc3RhbmNlIHZhbHVlIGlzIG1hdGVyaWFsaXplZCB3aGVuIHVzZWQuCiAgICAgYm9vbCBt
X3VzZXNJbnN0YW5jZVZhbHVlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzQ2F0Y2ggeyBmYWxz
ZSB9OwogICAgIFZhbHVlKiBpbnN0YW5jZVZhbHVlKCkKICAgICB7CiAgICAgICAgIG1fdXNlc0lu
c3RhbmNlVmFsdWUgPSB0cnVlOwpAQCAtMzczLDEwICs1NjksMjkgQEAgcHJpdmF0ZToKIAogICAg
IHVpbnQzMl90IG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1f
bnVtSW1wb3J0RnVuY3Rpb25zOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV90cnlEZXB0aCB7
IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX2NhbGxTaXRlSW5kZXggeyAwIH07CisgICAg
Q2hlY2tlZDx1bnNpZ25lZD4gbV9zdGFja1NpemUgeyAwIH07CisgICAgQ2hlY2tlZDx1bnNpZ25l
ZD4gbV9tYXhTdGFja1NpemUgeyAwIH07CisgICAgU3RhY2tNYXBzIG1fc3RhY2ttYXBzOworICAg
IFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwogfTsKIAor
dm9pZCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCBCM0lSR2VuZXJh
dG9yKiBnZW5lcmF0b3IpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FsbFNpdGVJbmRleCA9PSBzX2lu
dmFsaWRDYWxsU2l0ZUluZGV4KQorICAgICAgICByZXR1cm47CisKKyAgICBTdGFja01hcCB2YWx1
ZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vZmZzZXQ7IGkgPCBwYXJhbXMudmFsdWUoKS0+
bnVtQ2hpbGRyZW4oKTsgKytpKQorICAgICAgICB2YWx1ZXMuY29uc3RydWN0QW5kQXBwZW5kKHBh
cmFtc1tpXSwgcGFyYW1zLnZhbHVlKCktPmNoaWxkKGkpLT50eXBlKCkpOworICAgIGdlbmVyYXRv
ci0+YWRkU3RhY2tNYXAobV9jYWxsU2l0ZUluZGV4LCBXVEZNb3ZlKHZhbHVlcykpOworICAgIGpp
dC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fY2FsbFNpdGVJbmRleCksIEND
YWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7Cit9CisKIC8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJseSBoYXZlIHVuc2ln
bmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQgMzItYml0IG9mZnNl
dHMgaW4gQjMuCi1pbnQzMl90IEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQo
RXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMyX3Qgb2Zmc2V0KQoraW50MzJfdCBCM0lSR2VuZXJh
dG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KFZhbHVlKiYgcHRyLCB1aW50MzJfdCBvZmZzZXQp
CiB7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpID4gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkgewogICAgICAg
ICBwdHIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3Jp
Z2luKCksIHB0ciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIG9mZnNldCkpOwpAQCAtNDI4LDggKzY0Myw5IEBAIEIzSVJHZW5lcmF0b3I6
OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYg
cHJvY2VkdXJlCiAgICAgLCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzKG1fcHJvYykKICAgICAs
IG1fbnVtSW1wb3J0RnVuY3Rpb25zKGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpKQogewotICAg
IG1fcm9vdEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBt
X3Jvb3RCbG9jazsKKyAgICBtX3RvcExldmVsQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAg
ICBtX3Jvb3RCbG9ja3MuYXBwZW5kKG1fcHJvYy5hZGRCbG9jaygpKTsKKyAgICBtX2N1cnJlbnRC
bG9jayA9IG1fcm9vdEJsb2Nrc1swXTsKIAogICAgIC8vIEZJWE1FIHdlIGRvbid0IHJlYWxseSBu
ZWVkIHRvIHBpbiByZWdpc3RlcnMgaGVyZSBpZiB0aGVyZSdzIG5vIG1lbW9yeS4gSXQgbWFrZXMg
d2FzbSAtPiB3YXNtIHRodW5rcyBzaW1wbGVyIGZvciBub3cuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2MjMKICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8m
IHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAtNDYxLDYgKzY3Nywy
NiBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICB9KTsKICAgICB9CiAKKyAgICB7
CisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGdldEluc3RhbmNlID0gbV90b3BMZXZlbEJs
b2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBwb2ludGVyVHlwZSgp
LCBPcmlnaW4oKSk7CisgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAg
ICAgICBnZXRJbnN0YW5jZS0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0
ZXJzKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdh
c21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dEluc3RhbmNlIHJlZ2lzdGVyIGFuZCBk
b2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBz
aWRlLgorICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIEFyZ3VtZW50
UmVnIHRvIHRoaXMgKGxvZ2ljYWxseSkgaW1tdXRhYmxlIHBpbm5lZCByZWdpc3Rlci4KKyAgICAg
ICAgICAgIGdldEluc3RhbmNlLT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IGZhbHNlOworICAgICAg
ICAgICAgZ2V0SW5zdGFuY2UtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAg
ICAgZ2V0SW5zdGFuY2UtPnJlc3VsdENvbnN0cmFpbnRzID0geyBWYWx1ZVJlcDo6cmVnKG1fd2Fz
bUNvbnRleHRJbnN0YW5jZUdQUikgfTsKKyAgICAgICAgfQorICAgICAgICBnZXRJbnN0YW5jZS0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZh
c3RUTFMoKSkgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFu
Y2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5sb2Fk
V2FzbUNvbnRleHRJbnN0YW5jZShwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9KTsKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gZ2V0SW5zdGFuY2U7CisgICAgfQor
CiAgICAgewogICAgICAgICBhdXRvKiBjYWxsZWVNb3ZlTG9jYXRpb24gPSAmY29tcGlsYXRpb24t
PmNhbGxlZU1vdmVMb2NhdGlvbjsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpIDwgV2FzbUNhbGxpbmdDb252ZW50aW9uOjpo
ZWFkZXJTaXplSW5CeXRlcywgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CkBAIC00
OTQsMTcgKzczMCwxMCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgIH0KIAogICAgIHsK
LSAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogc3RhY2tPdmVyZmxvd0NoZWNrID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIHBvaW50ZXJU
eXBlKCksIE9yaWdpbigpKTsKLSAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gc3RhY2tPdmVyZmxv
d0NoZWNrOworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBzdGFja092ZXJmbG93Q2hlY2sg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
Vm9pZCwgT3JpZ2luKCkpOworICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmFwcGVuZFNvbWVS
ZWdpc3RlcihpbnN0YW5jZVZhbHVlKCkpOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmFw
cGVuZFNvbWVSZWdpc3RlcihmcmFtZVBvaW50ZXIoKSk7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dD
aGVjay0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotICAg
ICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6
IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVn
aXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0
aGUgY2FsbGVyIHNpZGUuCi0gICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNp
bmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lz
dGVyLgotICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLndyaXRlc1Bpbm5l
ZCA9IGZhbHNlOwotICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLnJlYWRz
UGlubmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+cmVzdWx0Q29u
c3RyYWludHMgPSB7IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSB9Owot
ICAgICAgICB9CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+bnVtR1BTY3JhdGNoUmVnaXN0
ZXJzID0gMjsKICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CiAgICAgICAgICAgICBjb25zdCBDaGVja2VkPGludDMyX3Q+IHdhc21GcmFtZVNpemUg
PSBwYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpOwpAQCAtNTI2LDE5ICs3NTUsMTUgQEAgQjNJUkdl
bmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJv
Y2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgIGJvb2wgbmVlZFVuZGVyZmxvd0NoZWNrID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoZWNrU2l6ZSkgPiBPcHRpb25zOjpyZXNlcnZlZFpvbmVT
aXplKCk7CiAgICAgICAgICAgICBib29sIG5lZWRzT3ZlcmZsb3dDaGVjayA9IG1fbWFrZXNDYWxs
cyB8fCB3YXNtRnJhbWVTaXplID49IHN0YXRpY19jYXN0PGludDMyX3Q+KG1pbmltdW1QYXJlbnRD
aGVja1NpemUpIHx8IG5lZWRVbmRlcmZsb3dDaGVjazsKIAotICAgICAgICAgICAgR1BSUmVnIGNv
bnRleHRJbnN0YW5jZSA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHBhcmFtc1swXS5ncHIoKSA6
IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKLQogICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3Mg
bGVhZiBmdW5jdGlvbnMgdG8gbm90IGRvIHN0YWNrIGNoZWNrcyBpZiB0aGVpciBmcmFtZSBzaXpl
IGlzIHdpdGhpbgogICAgICAgICAgICAgLy8gY2VydGFpbiBsaW1pdHMgc2luY2UgdGhlaXIgY2Fs
bGVyIHdvdWxkIGhhdmUgYWxyZWFkeSBkb25lIHRoZSBjaGVjay4KICAgICAgICAgICAgIGlmIChu
ZWVkc092ZXJmbG93Q2hlY2spIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGNv
bnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcg
ZnAgPSBwYXJhbXNbMV0uZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cGFyYW1zLmdwU2NyYXRjaCgwKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBw
YXJhbXMuZ3BTY3JhdGNoKDEpOwogCi0gICAgICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZh
c3RUTFMoKSkKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KGNvbnRleHRJbnN0YW5jZSk7Ci0KICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoY29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRT
dGFja0xpbWl0KCkpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgZnAsIHNjcmF0Y2gxKTsKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7CkBAIC01NDgsMTIg
Kzc3Myw2IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3RhY2tPdmVyZmxv
d0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIENvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkgewotICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93IGNoZWNrIGlzIG5l
ZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMgdG8gYmUgY29ycmVjdC4K
LSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1Nj
cmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNy
b1NjcmF0Y2hSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0
SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgLy8gV2Ugc2FpZCB3ZSdkIHJldHVybiBhIHBvaW50ZXIuIFdlIGRvbid0IGFjdHVh
bGx5IG5lZWQgdG8gYmVjYXVzZSBpdCBpc24ndCB1c2VkLCBidXQgdGhlIHBhdGNocG9pbnQgY29u
c2VydmF0aXZlbHkgc2FpZCBpdCBoYWQgZWZmZWN0cyAocG90ZW50aWFsIHN0YWNrIGNoZWNrKSB3
aGljaCBwcmV2ZW50IGl0IGZyb20gZ2V0dGluZyByZW1vdmVkLgogICAgICAgICAgICAgfQogICAg
ICAgICB9KTsKICAgICB9CkBAIC01NjQsOSArNzgzLDEwIEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJH
ZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2Vk
dXJlCiAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CiB9CiAKLXZv
aWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNh
Y2hlZFN0YWNrTGltaXQgcmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9y
bWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Js
b2NrKiBibG9jaykKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFs
U3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgcmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNv
bnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJl
JiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywgYm9vbCByZXN0b3JlSW5zdGFuY2UpCiB7Ci0gICAg
cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKKyAgICBp
ZiAocmVzdG9yZUluc3RhbmNlKQorICAgICAgICByZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShw
cm9jLCBibG9jaywgaW5zdGFuY2UpOwogCiAgICAgaWYgKHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0
ID09IFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMpIHsKICAgICAgICAgLy8gVGhlIEluc3Rh
bmNlIGNhY2hlcyB0aGUgc3RhY2sgbGltaXQsIGJ1dCBhbHNvIGtub3dzIHdoZXJlIGl0cyBjYW5v
bmljYWwgbG9jYXRpb24gaXMuCkBAIC02MzQsOSArODU0LDc4IEBAIFZhbHVlKiBCM0lSR2VuZXJh
dG9yOjpmcmFtZVBvaW50ZXIoKQogICAgIHJldHVybiBtX2ZyYW1lUG9pbnRlcjsKIH0KIAordm9p
ZCBCM0lSR2VuZXJhdG9yOjppbnNlcnRFbnRyeVN3aXRjaCgpCit7CisgICAgbV9wcm9jLnNldE51
bUVudHJ5cG9pbnRzKG1fcm9vdEJsb2Nrcy5zaXplKCkpOworCisgICAgUmVmPEIzOjpBaXI6OlBy
b2xvZ3VlR2VuZXJhdG9yPiBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFz
azxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgIGppdC5lbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsaW5nIHByZWNpc2UgYWxsb2Nh
dGlvbnMgaW4gV2FzbUIzSVJHZW5lcmF0b3IgY2F0Y2ggZW50cnlwb2ludHMgbWlnaHQgYmUgdW5u
ZWNlc3NhcnkKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzEyMTMKKyAgICAgICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0g
aml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1l
bnQpKTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIE1hcmtlZEJs
b2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1w
KCk7CisKKyAgICAgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Qw
LCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRP
ZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgR1BSSW5mbzo6cmVnVDAp
OworCisgICAgICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0KKyAgICAg
ICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDMpOworCisgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxlZUZvcldhc21D
YXRjaE9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICBqaXQuc3RvcmVQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hPZmZzZXQoKSkpOworICAgICAg
ICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QzLCBDYWxsRnJhbWVT
bG90OjpjYWxsZWUpOworCisgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOworCisgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OnJl
Z1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QzLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mSW5zdGFuY2UoKSksIEdQUklu
Zm86OnJlZ1QzKTsKKyAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZv
OjpyZWdUMyk7CisKKyAgICAgICAgaml0LnByb2JlKFtdKFByb2JlOjpDb250ZXh0JiBjb250ZXh0
KSB7CisgICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZy
YW1lKj4oKTsKKyAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IGNhbGxG
cmFtZS0+Y2FsbFNpdGVJbmRleCgpOworICAgICAgICAgICAgT3B0aW1pemluZ0pJVENhbGxlZSog
Y2FsbGVlID0gYml0d2lzZV9jYXN0PE9wdGltaXppbmdKSVRDYWxsZWUqPihjYWxsRnJhbWUtPmNh
bGxlZSgpLmFzV2FzbUNhbGxlZSgpKTsKKyAgICAgICAgICAgIGNvbnN0IFN0YWNrTWFwJiBzdGFj
a21hcCA9IGNhbGxlZS0+c3RhY2ttYXAoY2FsbFNpdGVJbmRleCk7CisgICAgICAgICAgICBWTSog
dm0gPSBjb250ZXh0LmdwcjxWTSo+KEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIHVpbnQ2
NF90KiBidWZmZXIgPSB2bS0+d2FzbUNvbnRleHQuc2NyYXRjaEJ1ZmZlckZvclNpemUoc3RhY2tt
YXAuc2l6ZSgpICogOCk7CisgICAgICAgICAgICBsb2FkVmFsdWVzSW50b0J1ZmZlcihjb250ZXh0
LCBzdGFja21hcCwgYnVmZmVyKTsKKworICAgICAgICAgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJ1ZmZlcik7CisgICAgICAg
IH0sIG51bGxwdHIpOworCisgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0Nh
bGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgfSk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDwgbV9yb290QmxvY2tzLnNpemUoKTsgKytpKQorICAgICAgICBtX3By
b2MuY29kZSgpLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludChpLCBjYXRjaFByb2xvZ3VlR2VuZXJh
dG9yLmNvcHlSZWYoKSk7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fdG9wTGV2ZWxCbG9jazsK
KyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVudHJ5U3dpdGNo
LCBPcmlnaW4oKSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcm9vdEJsb2NrcykK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZFN1Y2Nlc3NvcihGcmVxdWVudGVkQmxvY2so
YmxvY2spKTsKK30KKwogdm9pZCBCM0lSR2VuZXJhdG9yOjppbnNlcnRDb25zdGFudHMoKQogewog
ICAgIG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXMuZXhlY3V0ZShtX3Byb2MuYXQoMCkpOworCisg
ICAgaWYgKCFtX2hhc0NhdGNoKQorICAgICAgICByZXR1cm47CisKKyAgICBWYWx1ZSoganNJbnN0
YW5jZSA9IG1fcHJvYy5hZGQ8TWVtb3J5VmFsdWU+KExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdp
bigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRP
Zk93bmVyKCkpKTsKKyAgICBWYWx1ZSogc3RvcmUgPSBtX3Byb2MuYWRkPEIzOjpNZW1vcnlWYWx1
ZT4oQjM6OlN0b3JlLCBPcmlnaW4oKSwganNJbnN0YW5jZSwgZnJhbWVQb2ludGVyKCksIHNhZmVD
YXN0PGludDMyX3Q+KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihSZWdpc3Rl
cikpKTsKKworICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9yb290QmxvY2tzWzBdOworICAgIG1f
Y29uc3RhbnRJbnNlcnRpb25WYWx1ZXMuaW5zZXJ0VmFsdWUoMCwganNJbnN0YW5jZSk7CisgICAg
bV9jb25zdGFudEluc2VydGlvblZhbHVlcy5pbnNlcnRWYWx1ZSgwLCBzdG9yZSk7CisgICAgbV9j
b25zdGFudEluc2VydGlvblZhbHVlcy5leGVjdXRlKGJsb2NrKTsKIH0KIAogQjM6OlR5cGUgQjNJ
UkdlbmVyYXRvcjo6dG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlwZSkKQEAg
LTcwNSwyMCArOTk0LDIxIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiAKIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBvcmlnaW4oKSwgZ2V0KHZh
bHVlKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBF
eHByZXNzaW9uVHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KLSAgICByZXN1bHQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkV4dGVy
bnJlZiksIG9yaWdpbigpLAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBlczo6RXh0ZXJucmVm
KSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uR2V0V2FzbVRhYmxlRWxlbWVudCkpLAotICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0
YWJsZUluZGV4KSwgaW5kZXgpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4
KSwgZ2V0KGluZGV4KSk7CiAKICAgICB7CisgICAgICAgIHJlc3VsdCA9IHB1c2gocmVzdWx0VmFs
dWUpOwogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVz
dWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAg
Y2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlv
bkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC03
MzMsNyArMTAyMyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVTZXQodW5zaWduZWQg
dGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4cHJlCiAgICAgLy8gRklYTUU6IEVt
aXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTg1MDY+LgogICAgIGF1dG8gc2hvdWxkVGhyb3cgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KG1fcHJvYywgQjM6OkludDMyLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdD
RnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25TZXRXYXNtVGFibGVFbGVtZW50KSks
Ci0gICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpLCBpbmRleCwgdmFsdWUpOwor
ICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZ2V0KGluZGV4KSwgZ2V0KHZh
bHVlKSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKQEAgLTc1
MSwyNiArMTA0MSwyNiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJlZkZ1bmModWludDMyX3Qg
aW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYQogewogICAgIC8vIEZJWE1F
OiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk4NTA2Pi4KIAotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0Nh
bGxWYWx1ZT4obV9wcm9jLCBCMzo6SW50NjQsIG9yaWdpbigpLAorICAgIHJlc3VsdCA9IHB1c2go
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEIzOjpJbnQ2NCwg
b3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uV2FzbVJlZkZ1bmMpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBhZGRDb25zdGFudChU
eXBlczo6STMyLCBpbmRleCkpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIGNvbnN0YW50KHRv
QjNUeXBlKFR5cGVzOjpJMzIpLCBpbmRleCkpKTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVJbml0KHVuc2lnbmVkIGVsZW1lbnRJbmRleCwgdW5z
aWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgZHN0T2Zmc2V0LCBFeHByZXNzaW9uVHlw
ZSBzcmNPZmZzZXQsIEV4cHJlc3Npb25UeXBlIGxlbmd0aCkgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIGF1dG8gcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigK
KyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxs
VmFsdWU+KAogICAgICAgICBtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtVGFi
bGVJbml0KSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGVsZW1lbnRJbmRl
eCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwKLSAgICAgICAgZHN0T2Zmc2V0LCBzcmNPZmZzZXQs
IGxlbmd0aCk7CisgICAgICAgIGdldChkc3RPZmZzZXQpLCBnZXQoc3JjT2Zmc2V0KSwgZ2V0KGxl
bmd0aCkpOwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBv
cmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7
CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+
ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFj
Y2Vzcyk7CkBAIC03OTQsMzEgKzEwODQsMzEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbGVt
RHJvcCh1bnNpZ25lZCBlbGVtZW50SW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQKIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkVGFibGVTaXplKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICAvLyBGSVhNRTogRW1pdCB0aGlzIGlu
bGluZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODUwNj4uCi0g
ICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2Ms
IHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKKyAgICByZXN1bHQgPSBwdXNoKG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBlczo6
STMyKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uR2V0V2FzbVRhYmxlU2l6ZSkpLAotICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0
YWJsZUluZGV4KSk7CisgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpKSk7CiAK
ICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyh1
bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBk
ZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0Iz
VHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiks
IG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbldhc21UYWJsZUdyb3cpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJbmRl
eCksIGZpbGwsIGRlbHRhKTsKKyAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJbmRleCks
IGdldChmaWxsKSwgZ2V0KGRlbHRhKSkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRUYWJsZUZpbGwodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lv
blR5cGUgb2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBjb3VudCkg
LT4gUGFydGlhbFJlc3VsdAogewotICAgIGF1dG8gcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4o
KSwKKyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEND
YWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UYWJsZUZpbGwp
KSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJbmRleCksIG9mZnNldCwgZmlsbCwg
Y291bnQpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZ2V0KG9mZnNl
dCksIGdldChmaWxsKSwgZ2V0KGNvdW50KSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUq
IGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENo
ZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCks
IHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBl
OjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTgzMCwxNyArMTEyMCwxNyBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9u
VHlwZSBvZmZzZXQsIEV4cAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlQ29weSh1bnNp
Z25lZCBkc3RUYWJsZUluZGV4LCB1bnNpZ25lZCBzcmNUYWJsZUluZGV4LCBFeHByZXNzaW9uVHlw
ZSBkc3RPZmZzZXQsIEV4cHJlc3Npb25UeXBlIHNyY09mZnNldCwgRXhwcmVzc2lvblR5cGUgbGVu
Z3RoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIG1fcHJvYywgdG9CM1R5
cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbldhc21UYWJsZUNvcHkpKSwKICAgICAgICAgaW5zdGFuY2VWYWx1
ZSgpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgZHN0VGFibGVJbmRleCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzcmNUYWJsZUluZGV4KSwK
LSAgICAgICAgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGdldChkc3RP
ZmZzZXQpLCBnZXQoc3JjT2Zmc2V0KSwgZ2V0KGxlbmd0aCkpOwogCiAgICAgewogICAgICAgICBD
aGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
bV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWws
IG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhj
ZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC04NTMsNyArMTE0Myw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVDb3B5KHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgs
IHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmdldExvY2FsKHVp
bnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7
CiAgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9yaWdpbigpLCBt
X2xvY2Fsc1tpbmRleF0pOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9yaWdpbigpLCBtX2xvY2Fsc1tp
bmRleF0pKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC04NjcsNyArMTE1Nyw3IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVl
KiBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3Qm
IHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdEluZGly
ZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIFZhbHVlKiBjYWxsZWVDb2RlLCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0
TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIC8vIERvIGEgY29udGV4dCBz
d2l0Y2ggaWYgbmVlZGVkLgogICAgIHsKQEAgLTkxNiw3ICsxMjA2LDcgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lv
blR5cGUgY2FsbGUKICAgICB9CiAKICAgICBCMzo6VHlwZSByZXR1cm5UeXBlID0gdG9CM1Jlc3Vs
dFR5cGUoJnNpZ25hdHVyZSk7Ci0gICAgRXhwcmVzc2lvblR5cGUgY2FsbFJlc3VsdCA9IGNyZWF0
ZUNhbGxQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBhcmdz
LAorICAgIFZhbHVlKiBjYWxsUmVzdWx0ID0gY3JlYXRlQ2FsbFBhdGNocG9pbnQobV9jdXJyZW50
QmxvY2ssIG9yaWdpbigpLCBzaWduYXR1cmUsIGFyZ3MsCiAgICAgICAgIHNjb3BlZExhbWJkYVJl
Zjx2b2lkKFBhdGNocG9pbnRWYWx1ZSopPihbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCkgLT4gdm9pZCB7CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5l
ZCA9IHRydWU7CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0g
dHJ1ZTsKQEAgLTkyOCw4ICsxMjE4LDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdEluZGly
ZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlCiAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgp
LnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwogCiAgICAgICAgICAgICBwYXRj
aHBvaW50LT5hcHBlbmQoY2FsbGVlQ29kZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAg
ICAgICAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBv
aW50Rm9yRXhjZXB0aW9ucyhtX2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCk7CiAgICAgICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAg
ICAgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAg
ICAgICAgaml0LmNhbGwocGFyYW1zW3BhcmFtcy5wcm9jKCkucmVzdWx0Q291bnQocmV0dXJuVHlw
ZSldLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0p
KTsKQEAgLTk0MSwxMSArMTIzMywxMSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVj
dENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZQogICAgIGNh
c2UgQjM6OlR1cGxlOiB7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxCMzo6VHlwZT4mIHR1cGxlID0g
bV9wcm9jLnR1cGxlRm9yVHlwZShyZXR1cm5UeXBlKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgICAgICByZXN1
bHRzLmFwcGVuZChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgdHVwbGVbaV0sIGNhbGxSZXN1bHQsIGkpKTsKKyAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxFeHRyYWN0VmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIHR1cGxlW2ldLCBjYWxsUmVzdWx0LCBpKSkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgZGVmYXVsdDogewotICAgICAgICByZXN1bHRzLmFwcGVuZChjYWxsUmVz
dWx0KTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaChjYWxsUmVzdWx0KSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICB9CkBAIC05NTgsOSArMTI1MCw5IEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIEV4cHJlc3Npb25U
eXBlIGNhbGxlCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9u
VHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9j
LCBJbnQzMiwgb3JpZ2luKCksCisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAogICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRh
Z0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdyb3dNZW1vcnkpKSwKLSAgICAg
ICAgZnJhbWVQb2ludGVyKCksIGluc3RhbmNlVmFsdWUoKSwgZGVsdGEpOworICAgICAgICBmcmFt
ZVBvaW50ZXIoKSwgaW5zdGFuY2VWYWx1ZSgpLCBnZXQoZGVsdGEpKSk7CiAKICAgICByZXN0b3Jl
V2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6Tm8sIG1faW5m
by5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CiAKQEAg
LTk4MCwyMiArMTI3MiwyMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnko
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogICAgIFZhbHVlKiBudW1Q
YWdlcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWlNociwgb3Jp
Z2luKCksCiAgICAgICAgIHNpemUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCBzaGlmdFZhbHVlKSk7CiAKLSAgICByZXN1bHQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgbnVt
UGFnZXMpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIG51bVBhZ2VzKSk7CiAKICAgICByZXR1cm4geyB9
OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUZpbGwoRXhwcmVzc2lvblR5cGUg
ZHN0QWRkcmVzcywgRXhwcmVzc2lvblR5cGUgdGFyZ2V0VmFsdWUsIEV4cHJlc3Npb25UeXBlIGNv
dW50KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIG1fcHJvYywgdG9CM1R5
cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRp
b25QdHJUYWc+KG9wZXJhdGlvbldhc21NZW1vcnlGaWxsKSksCiAgICAgICAgIGluc3RhbmNlVmFs
dWUoKSwKLSAgICAgICAgZHN0QWRkcmVzcywgdGFyZ2V0VmFsdWUsIGNvdW50KTsKKyAgICAgICAg
Z2V0KGRzdEFkZHJlc3MpLCBnZXQodGFyZ2V0VmFsdWUpLCBnZXQoY291bnQpKTsKIAogICAgIHsK
ICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENo
ZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdCwg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOwogCiAgICAgICAgIGNoZWNr
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVj
ayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVGFibGVBY2Nlc3MpOwpAQCAtMTAwNywx
NiArMTI5OSwxNiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUZpbGwoRXhwcmVzc2lv
blR5cGUgZHN0QWRkcmVzcywgRXhwcmVzc2lvblR5cGUgdGFyZwogCiBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZE1lbW9yeUluaXQodW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCwgRXhwcmVzc2lvblR5
cGUgZHN0QWRkcmVzcywgRXhwcmVzc2lvblR5cGUgc3JjQWRkcmVzcywgRXhwcmVzc2lvblR5cGUg
bGVuZ3RoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIG1fcHJvYywgdG9C
M1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21NZW1vcnlJbml0KSksCiAgICAgICAgIGluc3RhbmNl
VmFsdWUoKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIGRhdGFTZWdtZW50SW5kZXgpLAotICAgICAgICBkc3RBZGRyZXNz
LCBzcmNBZGRyZXNzLCBsZW5ndGgpOworICAgICAgICBnZXQoZHN0QWRkcmVzcyksIGdldChzcmNB
ZGRyZXNzKSwgZ2V0KGxlbmd0aCkpOwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVj
ayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywg
b3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1
bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAg
ICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0
T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC0xMDI4LDE1ICsxMzIwLDE1IEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkTWVtb3J5SW5pdCh1bnNpZ25lZCBkYXRhU2VnbWVudEluZGV4LCBFeHByZXNz
aW9uVHlwZSBkc3RBCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5Q29weShFeHByZXNz
aW9uVHlwZSBkc3RBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSBzcmNBZGRyZXNzLCBFeHByZXNzaW9u
VHlwZSBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGF1dG8gcmVzdWx0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICBWYWx1ZSogcmVzdWx0VmFsdWUg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICBtX3Byb2Ms
IHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSkpLAogICAgICAgICBpbnN0
YW5jZVZhbHVlKCksCi0gICAgICAgIGRzdEFkZHJlc3MsIHNyY0FkZHJlc3MsIGNvdW50KTsKKyAg
ICAgICAgZ2V0KGRzdEFkZHJlc3MpLCBnZXQoc3JjQWRkcmVzcyksIGdldChjb3VudCkpOwogCiAg
ICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVz
dWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAg
Y2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlv
bkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC0x
MDYwLDcgKzEzNTIsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZERhdGFEcm9wKHVuc2lnbmVk
IGRhdGFTZWdtZW50SW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQKIGF1dG8gQjNJUkdlbmVyYXRvcjo6
c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7Ci0gICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIG9yaWdpbigpLCBt
X2xvY2Fsc1tpbmRleF0sIHZhbHVlKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
cmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSwg
Z2V0KHZhbHVlKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTA3MCwxMiArMTM2MiwxMiBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbAogICAgIFZhbHVlKiBnbG9iYWxzQXJyYXkgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3Rh
bmNlOjpvZmZzZXRPZkdsb2JhbHMoKSkpOwogICAgIHN3aXRjaCAoZ2xvYmFsLmJpbmRpbmdNb2Rl
KSB7CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OkVtYmVk
ZGVkSW5JbnN0YW5jZToKLSAgICAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlwZShnbG9iYWwudHlwZSksIG9yaWdp
bigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOworICAgICAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUoZ2xvYmFsLnR5cGUpLCBvcmlnaW4o
KSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3Rl
cikpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246
OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTogewogICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxp
dHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpOwogICAg
ICAgICBWYWx1ZSogcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgTG9hZCwgQjM6OkludDY0LCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZl
Q2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0
b0IzVHlwZShnbG9iYWwudHlwZSksIG9yaWdpbigpLCBwb2ludGVyKTsKKyAgICAgICAgcmVzdWx0
ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHRvQjNUeXBlKGdsb2JhbC50eXBlKSwgb3JpZ2luKCksIHBvaW50ZXIpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIH0KQEAgLTEwODksMTQgKzEzODEsMTQgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAt
PiBQYXJ0aWFsUmUKICAgICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4o
KSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZH
bG9iYWxzKCkpKTsKICAgICBzd2l0Y2ggKGdsb2JhbC5iaW5kaW5nTW9kZSkgewogICAgIGNhc2Ug
V2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpFbWJlZGRlZEluSW5zdGFuY2U6
Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
U3RvcmUsIG9yaWdpbigpLCB2YWx1ZSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90Pihp
bmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIGdldCh2YWx1ZSksIGds
b2JhbHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7
CiAgICAgICAgIGlmIChpc1JlZlR5cGUoZ2xvYmFsLnR5cGUpKQogICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllckZvckpTV3JhcHBlcigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdhc206
Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6IHsKICAgICAgICAgQVNT
RVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmls
aXR5OjpNdXRhYmxlKTsKICAgICAgICAgVmFsdWUqIHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEIzOjpJbnQ2NCwgb3JpZ2luKCks
IGdsb2JhbHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIp
KSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgU3RvcmUsIG9yaWdpbigpLCB2YWx1ZSwgcG9pbnRlcik7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCBnZXQo
dmFsdWUpLCBwb2ludGVyKTsKICAgICAgICAgLy8gV2UgZW1pdCBhIHdyaXRlLWJhcnJpZXIgb250
byBKU1dlYkFzc2VtYmx5R2xvYmFsLCBub3QgSlNXZWJBc3NlbWJseUluc3RhbmNlLgogICAgICAg
ICBpZiAoaXNSZWZUeXBlKGdsb2JhbC50eXBlKSkgewogICAgICAgICAgICAgVmFsdWUqIGluc3Rh
bmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQz
Ml90PihJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSk7CkBAIC0xMTk5LDcgKzE0OTEsNyBAQCBp
bmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0V3JpdGVCYXJyaWVyRm9ySlNXcmFwcGVyKCkK
ICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKIH0KIAotaW5saW5lIFZhbHVlKiBC
M0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBw
b2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wZXJhdGlvbikKK2lubGlu
ZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoVmFsdWUq
IHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQogewog
ICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIpOwogCkBAIC0xMjY4LDcgKzE1NjAsNyBAQCBpbmxp
bmUgQjM6OktpbmQgQjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9w
KQogICAgIHJldHVybiBtZW1vcnlPcDsKIH0KIAotaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9y
OjplbWl0TG9hZE9wKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQz
Ml90IHVvZmZzZXQpCitpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9h
ZE9wVHlwZSBvcCwgVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90IHVvZmZzZXQpCiB7CiAgICAgaW50
MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIHVvZmZzZXQpOwog
CkBAIC0xMzM4LDggKzE2MzAsOSBAQCBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRM
b2FkT3AoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdQogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6bG9hZChM
b2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRv
cjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyVmFyLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAg
ICBWYWx1ZSogcG9pbnRlciA9IGdldChwb2ludGVyVmFyKTsKICAgICBBU1NFUlQocG9pbnRlci0+
dHlwZSgpID09IEludDMyKTsKIAogICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMy
X3Q+KG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSkpKSB7CkBAIC0xMzU2LDcgKzE2NDksNyBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9p
bnRlciwgRXhwcmVzc2lvblR5cGUmCiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoK
ICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOgogICAgICAgICBjYXNlIExvYWRP
cFR5cGU6OkkzMkxvYWQ4VToKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDMyLCAw
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50MzIsIDApKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzoKICAgICAg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CkBAIC0xMzY1LDE4ICsxNjU4LDE4IEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCBFeHByZXNzaW9uVHlwZSYKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJT
OgogICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CiAgICAgICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDE2VToKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDY0LCAw
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50NjQsIDApKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6Ci0gICAgICAg
ICAgICByZXN1bHQgPSBjb25zdGFudChGbG9hdCwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBw
dXNoKGNvbnN0YW50KEZsb2F0LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoRG91
YmxlLCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoRG91YmxlLCAwKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgfSBlbHNlCi0gICAgICAgIHJl
c3VsdCA9IGVtaXRMb2FkT3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIs
IG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7CisgICAgICAgIHJlc3VsdCA9IHB1
c2goZW1pdExvYWRPcChvcCwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zm
c2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0KSk7CiAKICAgICByZXR1cm4geyB9OwogfQpA
QCAtMTQwMiw3ICsxNjk1LDcgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3AoU3RvcmVP
cFR5cGUgb3ApCiB9CiAKIAotaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3Ao
U3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZh
bHVlLCB1aW50MzJfdCB1b2Zmc2V0KQoraW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0
b3JlT3AoU3RvcmVPcFR5cGUgb3AsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSogdmFsdWUsIHVpbnQz
Ml90IHVvZmZzZXQpCiB7CiAgICAgaW50MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zm
c2V0KHBvaW50ZXIsIHVvZmZzZXQpOwogCkBAIC0xNDM3LDggKzE3MzAsMTAgQEAgaW5saW5lIHZv
aWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25U
eXBlIHBvaW50ZXIsIEUKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1h
dXRvIEIzSVJHZW5lcmF0b3I6OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBw
b2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFs
UmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNz
aW9uVHlwZSBwb2ludGVyVmFyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZVZhciwgdWludDMyX3Qgb2Zm
c2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIHBvaW50ZXIgPSBnZXQocG9pbnRl
clZhcik7CisgICAgVmFsdWUqIHZhbHVlID0gZ2V0KHZhbHVlVmFyKTsKICAgICBBU1NFUlQocG9p
bnRlci0+dHlwZSgpID09IEludDMyKTsKIAogICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8
dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpKSkgewpAQCAtMTQ2NCw5ICsxNzU5
LDkgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNzKEV4dEF0b21p
Y09wVHlwZSBvcCkKICAgICByZXR1cm4gYnl0ZXNGb3JXaWR0aChhY2Nlc3NXaWR0aChvcCkpOwog
fQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OnNhbml0aXplQXRvbWljUmVzdWx0KEV4
dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3Npb25UeXBlIHJlc3VsdCkK
K2lubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6c2FuaXRpemVBdG9taWNSZXN1bHQoRXh0QXRv
bWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgVmFsdWUqIHJlc3VsdCkKIHsKLSAgICBhdXRv
IHNhbml0aXplMzIgPSBbJl0oRXhwcmVzc2lvblR5cGUgcmVzdWx0KSB7CisgICAgYXV0byBzYW5p
dGl6ZTMyID0gWyZdKFZhbHVlKiByZXN1bHQpIHsKICAgICAgICAgc3dpdGNoIChhY2Nlc3NXaWR0
aChvcCkpIHsKICAgICAgICAgY2FzZSBCMzo6V2lkdGg4OgogICAgICAgICAgICAgcmV0dXJuIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwg
cmVzdWx0LCBjb25zdGFudChJbnQzMiwgMHhmZikpOwpAQCAtMTQ5MSw3ICsxNzg2LDcgQEAgaW5s
aW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpzYW5pdGl6ZUF0b21pY1Jlc3VsdChFeHRBdG9taWNP
cFR5cGUgb3AsIFR5cGUgdmFsdWUKICAgICB9CiB9CiAKLVZhbHVlKiBCM0lSR2VuZXJhdG9yOjpm
aXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKEV4dEF0b21pY09wVHlwZSBvcCwgRXhw
cmVzc2lvblR5cGUgcHRyLCB1aW50MzJfdCBvZmZzZXQpCitWYWx1ZSogQjNJUkdlbmVyYXRvcjo6
Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhFeHRBdG9taWNPcFR5cGUgb3AsIFZh
bHVlKiBwdHIsIHVpbnQzMl90IG9mZnNldCkKIHsKICAgICBhdXRvIHBvaW50ZXIgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIHB0ciwgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG9m
ZnNldCkpOwogICAgIGlmIChhY2Nlc3NXaWR0aChvcCkgIT0gQjM6OldpZHRoOCkgewpAQCAtMTUw
NCwxMSArMTc5OSwxMSBAQCBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09m
ZnNldEZvckF0b21pY09wcyhFeHRBdG9taWNPcFR5cGUgb3AsIEV4cAogICAgIHJldHVybiBwb2lu
dGVyOwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNMb2FkT3Ao
RXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgdWludDMyX3QgdW9mZnNldCkKK2lubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdEF0
b21pY0xvYWRPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBWYWx1ZSogcG9p
bnRlciwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBwb2ludGVyID0gZml4dXBQb2ludGVyUGx1
c09mZnNldEZvckF0b21pY09wcyhvcCwgcG9pbnRlciwgdW9mZnNldCk7CiAKLSAgICBFeHByZXNz
aW9uVHlwZSB2YWx1ZSA9IG51bGxwdHI7CisgICAgVmFsdWUqIHZhbHVlID0gbnVsbHB0cjsKICAg
ICBzd2l0Y2ggKGFjY2Vzc1dpZHRoKG9wKSkgewogICAgIGNhc2UgQjM6OldpZHRoODoKICAgICBj
YXNlIEIzOjpXaWR0aDE2OgpAQCAtMTUzNywyMiArMTgzMiwyMiBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmF0b21pY0xvYWQoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVz
c2lvblR5cAogCiAgICAgICAgIHN3aXRjaCAodmFsdWVUeXBlLmtpbmQpIHsKICAgICAgICAgY2Fz
ZSBUeXBlS2luZDo6STMyOgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50MzIsIDAp
OworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQzMiwgMCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6Okk2NDoKLSAgICAgICAgICAgIHJl
c3VsdCA9IGNvbnN0YW50KEludDY0LCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29u
c3RhbnQoSW50NjQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGVtaXRBdG9taWNM
b2FkT3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwg
b2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCBvZmZzZXQpOworICAgICAg
ICByZXN1bHQgPSBwdXNoKGVtaXRBdG9taWNMb2FkT3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNr
QW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBvZmZzZXQsIHNpemVPZkF0b21pY09wTWVt
b3J5QWNjZXNzKG9wKSksIG9mZnNldCkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotaW5saW5l
IHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY1N0b3JlT3AoRXh0QXRvbWljT3BUeXBlIG9w
LCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUg
dmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCitpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0
QXRvbWljU3RvcmVPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBWYWx1ZSog
cG9pbnRlciwgVmFsdWUqIHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQogewogICAgIHBvaW50ZXIg
PSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKG9wLCBwb2ludGVyLCB1b2Zmc2V0
KTsKIApAQCAtMTU3MywxMiArMTg2OCwxMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmF0b21pY1N0
b3JlKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3Npb25UeQogICAg
ICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0
T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOwogICAgICAgICB9KTsKICAgICB9IGVsc2UKLSAgICAgICAg
ZW1pdEF0b21pY1N0b3JlT3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50
ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCB2YWx1
ZSwgb2Zmc2V0KTsKKyAgICAgICAgZW1pdEF0b21pY1N0b3JlT3Aob3AsIHZhbHVlVHlwZSwgZW1p
dENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBvZmZzZXQsIHNpemVPZkF0b21p
Y09wTWVtb3J5QWNjZXNzKG9wKSksIGdldCh2YWx1ZSksIG9mZnNldCk7CiAKICAgICByZXR1cm4g
eyB9OwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNCaW5hcnlS
TVdPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBFeHByZXNzaW9uVHlwZSBw
b2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKK2lubGluZSBW
YWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY0JpbmFyeVJNV09wKEV4dEF0b21pY09wVHlw
ZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSogdmFsdWUsIHVpbnQz
Ml90IHVvZmZzZXQpCiB7CiAgICAgcG9pbnRlciA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXRGb3JB
dG9taWNPcHMob3AsIHBvaW50ZXIsIHVvZmZzZXQpOwogCkBAIC0xNjYzLDIyICsxOTU4LDIyIEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljQmluYXJ5Uk1XKEV4dEF0b21pY09wVHlwZSBvcCwg
VHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3NpCiAKICAgICAgICAgc3dpdGNoICh2YWx1ZVR5cGUua2lu
ZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6Ci0gICAgICAgICAgICByZXN1bHQgPSBj
b25zdGFudChJbnQzMiwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50KElu
dDMyLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBlS2luZDo6STY0
OgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50NjQsIDApOworICAgICAgICAgICAg
cmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQ2NCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgcmVz
dWx0ID0gZW1pdEF0b21pY0JpbmFyeVJNV09wKG9wLCB2YWx1ZVR5cGUsIGVtaXRDaGVja0FuZFBy
ZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mo
b3ApKSwgdmFsdWUsIG9mZnNldCk7CisgICAgICAgIHJlc3VsdCA9IHB1c2goZW1pdEF0b21pY0Jp
bmFyeVJNV09wKG9wLCB2YWx1ZVR5cGUsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKGdldChw
b2ludGVyKSwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCBnZXQodmFs
dWUpLCBvZmZzZXQpKTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKLVZhbHVlKiBCM0lSR2VuZXJh
dG9yOjplbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2
YWx1ZVR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVk
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKK1ZhbHVlKiBCM0lSR2Vu
ZXJhdG9yOjplbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0b21pY09wVHlwZSBvcCwgVHlw
ZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSogZXhwZWN0ZWQsIFZhbHVlKiB2YWx1
ZSwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBwb2ludGVyID0gZml4dXBQb2ludGVyUGx1c09m
ZnNldEZvckF0b21pY09wcyhvcCwgcG9pbnRlciwgdW9mZnNldCk7CiAKQEAgLTE3ODgsMzYgKzIw
ODMsNDEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWNDb21wYXJlRXhjaGFuZ2UoRXh0QXRv
bWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXgKIAogICAgICAgICBzd2l0Y2ggKHZhbHVl
VHlwZS5raW5kKSB7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkkzMjoKLSAgICAgICAgICAgIHJl
c3VsdCA9IGNvbnN0YW50KEludDMyLCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29u
c3RhbnQoSW50MzIsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFR5cGVL
aW5kOjpJNjQ6Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChJbnQ2NCwgMCk7CisgICAg
ICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50KEludDY0LCAwKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAg
ICAgICByZXN1bHQgPSBlbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKG9wLCB2YWx1ZVR5cGUsIGVt
aXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mQXRvbWljT3BN
ZW1vcnlBY2Nlc3Mob3ApKSwgZXhwZWN0ZWQsIHZhbHVlLCBvZmZzZXQpOworICAgICAgICByZXN1
bHQgPSBwdXNoKGVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2Uob3AsIHZhbHVlVHlwZSwgZW1pdENo
ZWNrQW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBvZmZzZXQsIHNpemVPZkF0b21pY09w
TWVtb3J5QWNjZXNzKG9wKSksIGdldChleHBlY3RlZCksIGdldCh2YWx1ZSksIG9mZnNldCkpOwog
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KEV4
dEF0b21pY09wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUg
dmFsdWUsIEV4cHJlc3Npb25UeXBlIHRpbWVvdXQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVp
bnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphdG9t
aWNXYWl0KEV4dEF0b21pY09wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlclZhciwgRXhw
cmVzc2lvblR5cGUgdmFsdWVWYXIsIEV4cHJlc3Npb25UeXBlIHRpbWVvdXRWYXIsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAogeworICAg
IFZhbHVlKiBwb2ludGVyID0gZ2V0KHBvaW50ZXJWYXIpOworICAgIFZhbHVlKiB2YWx1ZSA9IGdl
dCh2YWx1ZVZhcik7CisgICAgVmFsdWUqIHRpbWVvdXQgPSBnZXQodGltZW91dFZhcik7CisgICAg
VmFsdWUqIHJlc3VsdFZhbHVlID0gbnVsbHB0cjsKICAgICBpZiAob3AgPT0gRXh0QXRvbWljT3BU
eXBlOjpNZW1vcnlBdG9taWNXYWl0MzIpIHsKLSAgICAgICAgcmVzdWx0ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKKyAgICAg
ICAgcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1f
cHJvYywgSW50MzIsIG9yaWdpbigpLAogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25NZW1vcnlBdG9taWNXYWl0MzIpKSwKICAgICAgICAgICAgIGlu
c3RhbmNlVmFsdWUoKSwgcG9pbnRlciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG9mZnNldCksIHZhbHVlLCB0aW1lb3V0KTsKICAgICB9
IGVsc2UgewotICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxs
VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAorICAgICAgICByZXN1bHRWYWx1ZSA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2lu
KCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bk1lbW9yeUF0b21pY1dhaXQ2NCkpLAogICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBwb2lu
dGVyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgb2Zmc2V0KSwgdmFsdWUsIHRpbWVvdXQpOwogICAgIH0KIAogICAgIHsKKyAgICAgICAg
cmVzdWx0ID0gcHVzaChyZXN1bHRWYWx1ZSk7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmln
aW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgTGVzc1RoYW4sIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIHJl
c3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAg
ICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpP
dXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CkBAIC0xODI5LDEzICsyMTI5LDEzIEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YXRvbWljV2FpdChFeHRBdG9taWNPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBl
IHBvaW50ZXIsIEV4cHJlCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljTm90aWZ5KEV4dEF0
b21pY09wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgY291bnQs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3Vs
dAogewotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4o
bV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NZW1vcnlB
dG9taWNOb3RpZnkpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBwb2ludGVyLCBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0
KSwgY291bnQpOwotCisgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgZ2V0KHBvaW50ZXIpLCBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zm
c2V0KSwgZ2V0KGNvdW50KSk7CiAgICAgeworICAgICAgICByZXN1bHQgPSBwdXNoKHJlc3VsdFZh
bHVlKTsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCks
IHJlc3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOwogCiAg
ICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRF
eGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNz
KTsKQEAgLTE4NTEsOCArMjE1MSw5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljRmVuY2Uo
RXh0QXRvbWljT3BUeXBlLCB1aW50OF90KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsg
fTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjp0cnVuY1NhdHVyYXRlZChFeHQxT3BUeXBlIG9w
LCBFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIFR5cGUgcmV0dXJu
VHlwZSwgVHlwZSkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjp0cnVuY1Nh
dHVyYXRlZChFeHQxT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQsIFR5cGUgcmV0dXJuVHlwZSwgVHlwZSkgLT4gUGFydGlhbFJlc3VsdAogewor
ICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4RmxvYXQgPSBudWxs
cHRyOwogICAgIFZhbHVlKiBtaW5GbG9hdCA9IG51bGxwdHI7CiAgICAgVmFsdWUqIHNpZ25CaXRD
b25zdGFudCA9IG51bGxwdHI7CkBAIC0yMDAyLDI2ICsyMzAzLDI2IEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6dHJ1bmNTYXR1cmF0ZWQoRXh0MU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksCisg
ICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEIzOjpTZWxlY3QsIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgYXJnLCBtaW5GbG9hdCksCiAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVj
dCwgb3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXhGbG9hdCksCiAgICAgICAgICAg
ICBwYXRjaHBvaW50LCBtYXhSZXN1bHQpLAotICAgICAgICByZXF1aXJlc05hTkNoZWNrID8gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4o
KSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2lu
KCksIGFyZywgYXJnKSwgbWluUmVzdWx0LCB6ZXJvKSA6IG1pblJlc3VsdCk7CisgICAgICAgIHJl
cXVpcmVzTmFOQ2hlY2sgPyBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEIzOjpTZWxlY3QsIG9yaWdpbigpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgYXJnLCBhcmcpLCBtaW5SZXN1bHQsIHplcm8pIDogbWlu
UmVzdWx0KSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8s
IEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBjb25kaXRpb24sIG5vblplcm8sIHplcm8pOwor
ICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgZ2V0KGNvbmRpdGlvbiksIGdldChub25aZXJvKSwgZ2V0
KHplcm8pKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogQjNJUkdlbmVyYXRvcjo6RXhwcmVzc2lv
blR5cGUgQjNJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoVHlwZSB0eXBlLCB1aW50NjRfdCB2YWx1
ZSkKIHsKIAotICAgIHJldHVybiBjb25zdGFudCh0b0IzVHlwZSh0eXBlKSwgdmFsdWUpOworICAg
IHJldHVybiBwdXNoKGNvbnN0YW50KHRvQjNUeXBlKHR5cGUpLCB2YWx1ZSkpOwogfQogCiB2b2lk
IEIzSVJHZW5lcmF0b3I6OmVtaXRFbnRyeVRpZXJVcENoZWNrKCkKQEAgLTIwODIsMjAgKzIzODMs
MjEgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKHVpbnQzMl90IGxv
b3BJbmRleCwgY29uc3QgU3RhY2smIGVuY2xvc2kKIAogICAgIFZhbHVlKiBjb3VudERvd25Mb2Nh
dGlvbiA9IGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KCZt
X3RpZXJVcC0+bV9jb3VudGVyKSwgb3JpZ2luKTsKIAotICAgIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4gc3RhY2ttYXA7Ci0gICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKSB7Ci0gICAgICAg
IFZhbHVlKiByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+
KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luLCBsb2NhbCk7Ci0gICAgICAgIHN0YWNrbWFwLmFwcGVu
ZChyZXN1bHQpOwotICAgIH0KKyAgICBWZWN0b3I8VmFsdWUqPiBzdGFja21hcDsKKyAgICBmb3Ig
KGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCisgICAgICAgIHN0YWNrbWFwLmFwcGVuZChnZXQobG9j
YWwpKTsKICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAg
ICAgIGF1dG8mIGRhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5j
b250cm9sRGF0YTsKICAgICAgICAgYXV0byYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNv
bnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CiAgICAg
ICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVlIDogZXhwcmVzc2lvblN0YWNrKQotICAgICAg
ICAgICAgc3RhY2ttYXAuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgIHN0YWNrbWFwLmFwcGVu
ZChnZXQodmFsdWUpKTsKKyAgICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEp
KQorICAgICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKGdldChkYXRhLmV4Y2VwdGlvbigpKSk7CiAg
ICAgfQogICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVlIDogZW5jbG9zaW5nU3RhY2spCi0g
ICAgICAgIHN0YWNrbWFwLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgIHN0YWNrbWFwLmFwcGVuZChn
ZXQodmFsdWUpKTsKICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA6IG5ld1N0YWNrKQot
ICAgICAgICBzdGFja21hcC5hcHBlbmQodmFsdWUpOworICAgICAgICBzdGFja21hcC5hcHBlbmQo
Z2V0KHZhbHVlKSk7CiAKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIG9yaWdpbik7
CiAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwpAQCAtMjE0MCw5MyArMjQ0
Miw3MiBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2sodWludDMyX3Qg
bG9vcEluZGV4LCBjb25zdCBTdGFjayYgZW5jbG9zaQogICAgIH0pOwogfQogCitWYWx1ZSogQjNJ
UkdlbmVyYXRvcjo6bG9hZEZyb21TY3JhdGNoQnVmZmVyKHVuc2lnbmVkJiBpbmRleEluQnVmZmVy
LCBWYWx1ZSogcG9pbnRlciwgQjM6OlR5cGUgdHlwZSkKK3sKKyAgICBzaXplX3Qgb2Zmc2V0ID0g
c2l6ZW9mKHVpbnQ2NF90KSAqIGluZGV4SW5CdWZmZXIrKzsKKyAgICBSRUxFQVNFX0FTU0VSVCh0
eXBlLmlzTnVtZXJpYygpKTsKKyAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0eXBlLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0
KTsKK30KKwordm9pZCBCM0lSR2VuZXJhdG9yOjpjb25uZWN0Q29udHJvbEVudHJ5KHVuc2lnbmVk
JiBpbmRleEluQnVmZmVyLCBWYWx1ZSogcG9pbnRlciwgQ29udHJvbERhdGEmIGRhdGEsIFN0YWNr
JiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xEYXRhJiBjdXJyZW50RGF0YSwgYm9vbCBmaWxsTG9v
cFBoaXMpCit7CisgICAgLy8gRm9yIGVhY2ggc3RhY2sgZW50cnkgZW5jbG9zZWQgYnkgdGhpcyBs
b29wIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBhIHBoaSBzbyB3ZSBjYW4gZmls
bCBpdCBvbiBPU1IgZW50cnkuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4cHJlc3Np
b25TdGFjay5zaXplKCk7IGkrKykgeworICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBl
eHByZXNzaW9uU3RhY2tbaV07CisgICAgICAgIGF1dG8qIGxvYWQgPSBsb2FkRnJvbVNjcmF0Y2hC
dWZmZXIoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgdmFsdWUtPnR5cGUoKSk7CisgICAgICAgIGlm
IChmaWxsTG9vcFBoaXMpCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFVw
c2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgbG9hZCwgZGF0YS5waGlzW2ldKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihtX3Byb2MsIFNldCwgb3JpZ2luKCksIHZhbHVlLnZhbHVlKCksIGxvYWQpOworICAgIH0K
KyAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkgJiYgJmRhdGEgIT0gJmN1cnJl
bnREYXRhKSB7CisgICAgICAgIGF1dG8qIGxvYWQgPSBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIoaW5k
ZXhJbkJ1ZmZlciwgcG9pbnRlciwgcG9pbnRlclR5cGUoKSk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIG9yaWdpbigpLCBkYXRh
LmV4Y2VwdGlvbigpLCBsb2FkKTsKKyAgICB9Cit9OworCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENv
bnRyb2xUeXBlJiBibG9jaywgU3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29wSW5kZXgpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBCYXNpY0Jsb2NrKiBib2R5ID0gbV9wcm9jLmFkZEJsb2Nr
KCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAK
LSAgICBibG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxv
Y2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJvZHkpOworICAgIGJsb2NrID0gQ29udHJvbERh
dGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6Okxvb3AsIG1fc3RhY2tT
aXplLCBjb250aW51YXRpb24sIGJvZHkpOworCiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gZW5jbG9z
aW5nU3RhY2suc2l6ZSgpIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAg
ICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlID0gZW5jbG9zaW5nU3RhY2suYXQob2Zmc2V0ICsg
aSk7Ci0gICAgICAgIGF1dG8qIHVwc2lsb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFVw
c2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOwogICAgICAgICBWYWx1ZSogcGhp
ID0gYmxvY2sucGhpc1tpXTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNp
bG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGdldCh2YWx1ZSksIHBoaSk7CiAgICAgICAgIGJv
ZHktPmFwcGVuZChwaGkpOwotICAgICAgICB1cHNpbG9uLT5zZXRQaGkocGhpKTsKLSAgICAgICAg
bmV3U3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHZhbHVlLnR5cGUoKSwgcGhpKTsKKyAgICAgICAg
c2V0KGJvZHksIHZhbHVlLCBwaGkpOworICAgICAgICBuZXdTdGFjay5hcHBlbmQodmFsdWUpOwog
ICAgIH0KKyAgICBlbmNsb3NpbmdTdGFjay5zaHJpbmsob2Zmc2V0KTsKIAogICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgYm9k
eSk7CiAgICAgaWYgKGxvb3BJbmRleCA9PSBtX2xvb3BJbmRleEZvck9TUkVudHJ5KSB7CiAgICAg
ICAgIGRhdGFMb2dMbklmKFdhc21CM0lSR2VuZXJhdG9ySW50ZXJuYWw6OnZlcmJvc2UsICJTZXR0
aW5nIHVwIGZvciBPU1IgZW50cnkiKTsKIAotICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fcm9v
dEJsb2NrOwotICAgICAgICBWYWx1ZSogcG9pbnRlciA9IG1fcm9vdEJsb2NrLT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Jvb3RCbG9ja3NbMF07CisgICAgICAgIFZh
bHVlKiBwb2ludGVyID0gbV9yb290QmxvY2tzWzBdLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4obV9wcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAogICAgICAgICB1
bnNpZ25lZCBpbmRleEluQnVmZmVyID0gMDsKLSAgICAgICAgYXV0byBsb2FkRnJvbVNjcmF0Y2hC
dWZmZXIgPSBbJl0gKEIzOjpUeXBlIHR5cGUpIHsKLSAgICAgICAgICAgIHNpemVfdCBvZmZzZXQg
PSBzaXplb2YodWludDY0X3QpICogaW5kZXhJbkJ1ZmZlcisrOwotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQodHlwZS5pc051bWVyaWMoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0eXBlLCBvcmlnaW4o
KSwgcG9pbnRlciwgb2Zmc2V0KTsKLSAgICAgICAgfTsKIAogICAgICAgICBmb3IgKGF1dG8mIGxv
Y2FsIDogbV9sb2NhbHMpCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
cmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRGcm9tU2NyYXRj
aEJ1ZmZlcihsb2NhbC0+dHlwZSgpKSk7Ci0KLSAgICAgICAgYXV0byBjb25uZWN0Q29udHJvbEVu
dHJ5ID0gWyZdKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBTdGFjayYgZXhwcmVzc2lvblN0YWNr
KSB7Ci0gICAgICAgICAgICAvLyBGb3IgZWFjaCBzdGFjayBlbnRyeSBlbmNsb3NlZCBieSB0aGlz
IGxvb3Agd2UgbmVlZCB0byByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIGEgcGhpIHNvIHdlIGNhbiBm
aWxsIGl0IG9uIE9TUiBlbnRyeS4KLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2Nr
ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsb2NrSW5kZXggPSAwOwotICAgICAg
ICAgICAgQjM6Okluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9wcm9jKTsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHByZXNzaW9uU3RhY2suc2l6ZSgpOyBpKyspIHsK
LSAgICAgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBleHByZXNzaW9uU3RhY2tb
aV07Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgKytpbmRleEluQnVmZmVyOwotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodmFsdWUtPm93bmVy
ICE9IHNvdXJjZUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VCbG9jaykK
LSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKHNvdXJjZUJsb2Nr
KTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluc2VydGlvblNldC5pc0VtcHR5KCkpOwot
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtQjNJUkdlbmVyYXRvckludGVybmFs
Ojp2ZXJib3NlICYmIHNvdXJjZUJsb2NrLCAiRXhlY3V0ZWQgaW5zZXJ0aW9uIHNldCBpbnRvOiAi
LCAqc291cmNlQmxvY2spOwotICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4ID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgc291cmNlQmxvY2sgPSB2YWx1ZS0+b3duZXI7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgd2hpbGUgKHNvdXJjZUJsb2NrLT5hdChibG9ja0lu
ZGV4KyspICE9IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2tJbmRleCA8
IHNvdXJjZUJsb2NrLT5zaXplKCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChzb3VyY2VCbG9j
ay0+YXQoYmxvY2tJbmRleCAtIDEpID09IHZhbHVlKTsKLQotICAgICAgICAgICAgICAgIGF1dG8q
IHBoaSA9IGRhdGEuY29udGludWF0aW9uLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgUGhpLCAg
dmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpKTsKLSAgICAgICAgICAgICAgICBleHByZXNz
aW9uU3RhY2tbaV0gPSBUeXBlZEV4cHJlc3Npb24geyB2YWx1ZS50eXBlKCksIHBoaSB9OwotICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3By
b2MsIHZhbHVlLT5vcmlnaW4oKSwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKHZhbHVlLT50eXBlKCkp
LCBwaGkpOwotCi0gICAgICAgICAgICAgICAgYXV0byogc291cmNlVXBzaWxvbiA9IG1fcHJvYy5h
ZGQ8VXBzaWxvblZhbHVlPih2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLCBwaGkpOwotICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnRWYWx1ZShibG9ja0luZGV4LCBzb3VyY2VVcHNpbG9u
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzb3VyY2VCbG9jaykKLSAgICAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShzb3VyY2VCbG9jayk7Ci0gICAgICAgIH07Cisg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJv
YywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihpbmRleEluQnVm
ZmVyLCBwb2ludGVyLCBsb2NhbC0+dHlwZSgpKSk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBj
b250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCku
c2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgewogICAgICAgICAgICAgYXV0byYgZGF0YSA9IG1fcGFy
c2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOwogICAgICAgICAg
ICAgYXV0byYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRy
b2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7Ci0gICAgICAgICAgICBjb25uZWN0Q29u
dHJvbEVudHJ5KGRhdGEsIGV4cHJlc3Npb25TdGFjayk7CisgICAgICAgICAgICBjb25uZWN0Q29u
dHJvbEVudHJ5KGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIGRhdGEsIGV4cHJlc3Npb25TdGFjaywg
YmxvY2spOwogICAgICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWdu
YXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICBUeXBlZEV4cHJlc3Np
b24gdmFsdWUgPSBlbmNsb3NpbmdTdGFjay5hdChvZmZzZXQgKyBpKTsKLSAgICAgICAgICAgIFZh
bHVlKiBwaGkgPSBibG9jay5waGlzW2ldOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgdmFsdWUtPm9yaWdpbigpLCBsb2FkRnJvbVNj
cmF0Y2hCdWZmZXIodmFsdWUtPnR5cGUoKSksIHBoaSk7Ci0gICAgICAgIH0KLSAgICAgICAgZW5j
bG9zaW5nU3RhY2suc2hyaW5rKG9mZnNldCk7Ci0gICAgICAgIGNvbm5lY3RDb250cm9sRW50cnko
YmxvY2ssIGVuY2xvc2luZ1N0YWNrKTsKKyAgICAgICAgY29ubmVjdENvbnRyb2xFbnRyeShpbmRl
eEluQnVmZmVyLCBwb2ludGVyLCBibG9jaywgZW5jbG9zaW5nU3RhY2ssIGJsb2NrKTsKKyAgICAg
ICAgY29ubmVjdENvbnRyb2xFbnRyeShpbmRleEluQnVmZmVyLCBwb2ludGVyLCBibG9jaywgbmV3
U3RhY2ssIGJsb2NrLCB0cnVlKTsKIAogICAgICAgICBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUgPSBpbmRleEluQnVmZmVyOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGJvZHkpOwogICAgICAgICBib2R5LT5h
ZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVuY2xv
c2luZ1N0YWNrLnNocmluayhvZmZzZXQpOworICAgIH0KIAogICAgIG1fY3VycmVudEJsb2NrID0g
Ym9keTsKICAgICBlbWl0TG9vcFRpZXJVcENoZWNrKGxvb3BJbmRleCwgZW5jbG9zaW5nU3RhY2ss
IG5ld1N0YWNrKTsKQEAgLTIyMzUsNyArMjUxNiw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
TG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29u
CiAKIEIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEIzSVJHZW5lcmF0b3I6OmFkZFRvcExldmVs
KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkKIHsKLSAgICByZXR1cm4gQ29udHJvbERhdGEobV9w
cm9jLCBPcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OlRvcExldmVsLCBtX3Byb2MuYWRk
QmxvY2soKSk7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgT3JpZ2luKCksIHNpZ25h
dHVyZSwgQmxvY2tUeXBlOjpUb3BMZXZlbCwgbV9zdGFja1NpemUsIG1fcHJvYy5hZGRCbG9jaygp
KTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRCbG9jayhCbG9ja1NpZ25hdHVyZSBzaWdu
YXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIG5ld0Jsb2NrLCBTdGFj
ayYgbmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKQEAgLTIyNDMsNyArMjUyNCw3IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQmxvY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYg
ZW5jbG9zaW5nU3RhY2ssIENvCiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9j
LmFkZEJsb2NrKCk7CiAKICAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ss
IG5ld1N0YWNrKTsKLSAgICBuZXdCbG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCks
IHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywgY29udGludWF0aW9uKTsKKyAgICBuZXdCbG9j
ayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpC
bG9jaywgbV9zdGFja1NpemUsIGNvbnRpbnVhdGlvbik7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApA
QCAtMjI1NSwyMCArMjUzNiwyMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdAogICAgIEJhc2lj
QmxvY2sqIG5vdFRha2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29u
dGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBjb25kaXRpb24pOwor
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkJyYW5jaCwg
b3JpZ2luKCksIGdldChjb25kaXRpb24pKTsKICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vz
c29ycyhGcmVxdWVudGVkQmxvY2sodGFrZW4pLCBGcmVxdWVudGVkQmxvY2sobm90VGFrZW4pKTsK
ICAgICB0YWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgIG5vdFRha2Vu
LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CiAKICAgICBtX2N1cnJlbnRCbG9jayA9
IHRha2VuOwogICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3Rh
Y2spOwotICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVy
ZSwgQmxvY2tUeXBlOjpJZiwgY29udGludWF0aW9uLCBub3RUYWtlbik7CisgICAgcmVzdWx0ID0g
Q29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OklmLCBt
X3N0YWNrU2l6ZSwgY29udGludWF0aW9uLCBub3RUYWtlbik7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBT
dGFjayYgY3VycmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgdW5pZnlWYWx1ZXNX
aXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnBoaXMpOworICAgIHVuaWZ5VmFsdWVzV2l0aEJs
b2NrKGN1cnJlbnRTdGFjaywgZGF0YSk7CiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CiAg
ICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEpOwogfQpAQCAtMjI3NiwxMSArMjU1
NywyNTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBj
b25zdCBTdGFjayYgY3VycmVudFN0YWNrKSAtPiBQYXIKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
RWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
ICAgICBBU1NFUlQoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICBtX3N0
YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCkgKyBkYXRhLm1fc2lnbmF0dXJlLT5hcmd1bWVudENv
dW50KCk7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNwZWNpYWw7CiAgICAgZGF0YS5jb252
ZXJ0SWZUb0Jsb2NrKCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAorYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ss
IENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjaykgLT4gUGFydGlhbFJlc3VsdAor
eworICAgICsrbV90cnlEZXB0aDsKKworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1f
cHJvYy5hZGRCbG9jaygpOworICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFj
aywgbmV3U3RhY2spOworICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCks
IHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpUcnksIG1fc3RhY2tTaXplLCBjb250aW51YXRpb24sICsr
bV9jYWxsU2l0ZUluZGV4LCBtX3RyeURlcHRoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgU3RhY2smIGN1cnJlbnRTdGFjaywgQ29udHJvbFR5cGUmIGRh
dGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZh
bHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEpOworICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgZGF0YS5jb250aW51
YXRpb24pOworICAgIHJldHVybiBhZGRDYXRjaFRvVW5yZWFjaGFibGUoZXhjZXB0aW9uSW5kZXgs
IHNpZ25hdHVyZSwgZGF0YSwgcmVzdWx0cyk7Cit9CisKK1BhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUgQjNJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKEJhc2ljQmxv
Y2sqIGJsb2NrLCBQYXRjaHBvaW50VmFsdWUqIHBhdGNoKQoreworICAgICsrbV9jYWxsU2l0ZUlu
ZGV4OworICAgIGlmICghbV90cnlEZXB0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZl
Y3RvcjxWYWx1ZSo+IHN0YWNrbWFwOworICAgIE9yaWdpbiBvcmlnaW4gPSB0aGlzLT5vcmlnaW4o
KTsKKyAgICBmb3IgKFZhcmlhYmxlKiBsb2NhbCA6IG1fbG9jYWxzKSB7CisgICAgICAgIFZhbHVl
KiByZXN1bHQgPSBibG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6Okdl
dCwgb3JpZ2luLCBsb2NhbCk7CisgICAgICAgIHN0YWNrbWFwLmFwcGVuZChyZXN1bHQpOworICAg
IH0KKyAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1f
cGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAgICAg
IENvbnRyb2xEYXRhJiBkYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRl
eF0uY29udHJvbERhdGE7CisgICAgICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNl
ci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsK
KyAgICAgICAgZm9yIChWYXJpYWJsZSogdmFsdWUgOiBleHByZXNzaW9uU3RhY2spCisgICAgICAg
ICAgICBzdGFja21hcC5hcHBlbmQoZ2V0KGJsb2NrLCB2YWx1ZSkpOworICAgICAgICBpZiAoQ29u
dHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpCisgICAgICAgICAgICBzdGFja21hcC5hcHBlbmQo
Z2V0KGJsb2NrLCBkYXRhLmV4Y2VwdGlvbigpKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgb2Zm
c2V0ID0gcGF0Y2gtPm51bUNoaWxkcmVuKCk7CisgICAgaWYgKHBhdGNoLT50eXBlKCkgIT0gVm9p
ZCkKKyAgICAgICAgb2Zmc2V0Kys7CisKKyAgICBwYXRjaC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlz
ID0gdHJ1ZTsKKyAgICBwYXRjaC0+YXBwZW5kVmVjdG9yV2l0aFJlcChzdGFja21hcCwgVmFsdWVS
ZXA6OkxhdGVDb2xkQW55KTsKKworICAgIHJldHVybiBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
IHsgbV9jYWxsU2l0ZUluZGV4LCBvZmZzZXQgfTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIFZhbHVlKiBvcGVyYXRpb25SZXN1bHQgPSBlbWl0Q2F0
Y2hJbXBsKENhdGNoS2luZDo6Q2F0Y2gsIGRhdGEsIGV4Y2VwdGlvbkluZGV4KTsKKyAgICBWYWx1
ZSogcGF5bG9hZCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8RXh0cmFjdFZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25SZXN1bHQsIDEpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsK
KyAgICAgICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBWYWx1
ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIHRvQjNUeXBlKHR5cGUpLCBvcmlnaW4oKSwgcGF5bG9hZCwgaSAqIHNpemVvZih1aW50
NjRfdCkpOworICAgICAgICByZXN1bHRzLmFwcGVuZChwdXNoKHZhbHVlKSk7CisgICAgfQorICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwoU3RhY2sm
IGN1cnJlbnRTdGFjaywgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEpOworICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgZGF0
YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoZGF0
YSk7Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENv
bnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENhdGNoSW1wbChD
YXRjaEtpbmQ6OkNhdGNoQWxsLCBkYXRhKTsKKyAgICByZXR1cm4geyB9OworfQorCitWYWx1ZSog
QjNJUkdlbmVyYXRvcjo6ZW1pdENhdGNoSW1wbChDYXRjaEtpbmQga2luZCwgQ29udHJvbFR5cGUm
IGRhdGEsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4KQoreworICAgIG1faGFzQ2F0Y2ggPSB0cnVl
OworICAgIG1fY3VycmVudEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgbV9yb290Qmxv
Y2tzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CisgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNr
U2l6ZSgpOworCisgICAgaWYgKENvbnRyb2xUeXBlOjppc1RyeShkYXRhKSkgeworICAgICAgICBp
ZiAoa2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoKQorICAgICAgICAgICAgZGF0YS5jb252ZXJ0VHJ5
VG9DYXRjaCgrK21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFkZFZhcmlhYmxlKHBvaW50ZXJUeXBl
KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaEFs
bCgrK21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFkZFZhcmlhYmxlKHBvaW50ZXJUeXBlKCkpKTsK
KyAgICB9CisKKyAgICBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSA9IGtpbmQgPT0gQ2F0Y2hLaW5k
OjpDYXRjaCA/IEhhbmRsZXJUeXBlOjpDYXRjaCA6IEhhbmRsZXJUeXBlOjpDYXRjaEFsbDsKKyAg
ICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IGhhbmRsZXJUeXBlLCBkYXRhLnRyeVN0YXJ0
KCksIGRhdGEudHJ5RW5kKCksIDAsIG1fdHJ5RGVwdGgsIGV4Y2VwdGlvbkluZGV4IH0pOworCisg
ICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6
OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3Byb2MsIG1fY3VycmVudEJs
b2NrLCBmYWxzZSk7CisKKyAgICBWYWx1ZSogcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKworICAgIHVuc2lnbmVkIGluZGV4SW5CdWZmZXIgPSAwOworCisgICAgZm9yIChh
dXRvJiBsb2NhbCA6IG1fbG9jYWxzKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRGcm9tU2Ny
YXRjaEJ1ZmZlcihpbmRleEluQnVmZmVyLCBwb2ludGVyLCBsb2NhbC0+dHlwZSgpKSk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2Vy
LT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CisgICAgICAgIGF1dG8m
IGNvbnRyb2xEYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uY29u
dHJvbERhdGE7CisgICAgICAgIGF1dG8mIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250
cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAg
ICBjb25uZWN0Q29udHJvbEVudHJ5KGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIGNvbnRyb2xEYXRh
LCBleHByZXNzaW9uU3RhY2ssIGRhdGEpOworICAgIH0KKworICAgIFBhdGNocG9pbnRWYWx1ZSog
cmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJv
YywgbV9wcm9jLmFkZFR1cGxlKHsgcG9pbnRlclR5cGUoKSwgcG9pbnRlclR5cGUoKSB9KSwgb3Jp
Z2luKCkpOworICAgIHJlc3VsdC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKyAgICBy
ZXN1bHQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAg
ICBSZWdpc3RlclNldCBjbG9iYmVyTGF0ZSA9IFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVy
c0ZvckpTQ2FsbCgpOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgIHJlc3VsdC0+Y2xvYmJlckxhdGUoY2xvYmJlckxhdGUpOworICAgIHJlc3VsdC0+YXBw
ZW5kKGluc3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcmVzdWx0
LT5yZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworICAgIHJlc3VsdC0+cmVzdWx0Q29uc3RyYWludHMuYXBwZW5kKFZhbHVlUmVw
OjpyZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7CisgICAgcmVzdWx0LT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOworICAgICAgICBqaXQubW92ZShwYXJhbXNbMl0uZ3ByKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNh
bGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGws
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVJldHJpZXZlQW5kQ2xl
YXJFeGNlcHRpb25JZkNhdGNoYWJsZSkpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIFZh
bHVlKiBleGNlcHRpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRlclR5cGUoKSwgcmVzdWx0LCAwKTsKKyAgICBzZXQoZGF0
YS5leGNlcHRpb24oKSwgZXhjZXB0aW9uKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2F1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmIHRhcmdldCwgQ29udHJv
bFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRGVsZWdhdGVU
b1VucmVhY2hhYmxlKHRhcmdldCwgZGF0YSk7Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
RGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiB0YXJnZXQsIENvbnRyb2xUeXBlJiBk
YXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5zaWduZWQgdGFyZ2V0RGVwdGggPSAwOwor
ICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkodGFyZ2V0KSkKKyAgICAgICAgdGFyZ2V0RGVwdGgg
PSB0YXJnZXQudHJ5RGVwdGgoKTsKKworICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKHsg
SGFuZGxlclR5cGU6OkRlbGVnYXRlLCBkYXRhLnRyeVN0YXJ0KCksICsrbV9jYWxsU2l0ZUluZGV4
LCAwLCBtX3RyeURlcHRoLCB0YXJnZXREZXB0aCB9KTsKKyAgICByZXR1cm4geyB9OworfQorCith
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gbV9wcm9jLmFkZDxQYXRjaHBvaW50VmFsdWU+KEIz
OjpWb2lkLCBvcmlnaW4oKSk7CisgICAgcGF0Y2gtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOwor
ICAgIHBhdGNoLT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVy
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkKKyAgICAg
ICAgcGF0Y2gtPmFwcGVuZChnZXQoYXJnc1tpXSksIFZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KGkg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0ZXJT
ZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyTGF0
ZSA9IFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpOworICAgIGNsb2Ji
ZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNsb2JiZXJMYXRlLmFkZChH
UFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1
bWVudEdQUjIpOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjMpOwor
ICAgIHBhdGNoLT5jbG9iYmVyTGF0ZShjbG9iYmVyTGF0ZSk7CisgICAgcGF0Y2gtPm51bUdQU2Ny
YXRjaFJlZ2lzdGVycyA9IDE7CisgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUg
PSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMobV9jdXJyZW50QmxvY2ssIHBhdGNoKTsK
KyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBleGNlcHRpb25JbmRleCwgaGFuZGxlXSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsK
KyAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKKworICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5j
ZTo6b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJz
OjpOb25aZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxs
b2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gsIE1h
cmtlZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9m
Vk0oKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0Lmp1bXAo
KTsKKworICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgUHJlY2lz
ZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgpIC0g
UHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOworCisgICAgICAgICAg
ICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7CisKKyAgICAg
ICAgaml0Lm1vdmUocGFyYW1zWzBdLmdwcigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAg
ICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihl
eGNlcHRpb25JbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIGppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIzKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRp
b25QdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
RXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhj
YWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UaHJvdykpOwor
ICAgICAgICB9KTsKKyAgICB9KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHBhdGNoKTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1
bnNpZ25lZCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNoID0gbV9wcm9jLmFkZDxQYXRjaHBvaW50VmFsdWU+KEIzOjpWb2lk
LCBvcmlnaW4oKSk7CisgICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRj
aFJlZ2lzdGVycygpKTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyTGF0ZTsKKyAgICBjbG9iYmVy
TGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1l
bnRHUFIyKTsKKyAgICBwYXRjaC0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7CisgICAgcGF0Y2gt
PmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBh
dGNoLT5hcHBlbmRTb21lUmVnaXN0ZXIoZnJhbWVQb2ludGVyKCkpOworICAgIHBhdGNoLT5hcHBl
bmQoZ2V0KGRhdGEuZXhjZXB0aW9uKCkpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBw
YXRjaC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhtX2N1cnJlbnRC
bG9jaywgcGF0Y2gpOworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3RoaXMsIGhhbmRsZV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworCisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsK
KyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIo
KSwgSW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSksIHNjcmF0Y2gpOworICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKEND
YWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
UHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgICAgIGppdC5hbmRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBz
Y3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVy
OjpvZmZzZXRPZlZNKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9
IGppdC5qdW1wKCk7CisKKyAgICAgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZq
aXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2gsIFByZWNpc2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNl
dE9mVk0oKSAtIFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBzY3JhdGNoKTsKKwor
ICAgICAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOworICAgICAgICB9CisgICAgICAgIGpp
dC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHNjcmF0Y2gp
OworCisgICAgICAgIGppdC5tb3ZlKHBhcmFtc1swXS5ncHIoKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1zWzFdLmdwcigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOworICAgICAgICBqaXQubW92ZShwYXJhbXNbMl0uZ3ByKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMik7CisgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7Cisg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFn
KTsKKyAgICAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWcpOworICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmV0aHJvdykpOworICAgICAg
ICB9KTsKKyAgICB9KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHBhdGNoKTsKKworICAg
IHJldHVybiB7IH07Cit9CisKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENv
bnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAog
ewogICAgIENhbGxJbmZvcm1hdGlvbiB3YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5jYWxsSW5mb3JtYXRpb25Gb3IobV9wYXJzZXItPnNpZ25hdHVyZSgpLCBDYWxsUm9sZTo6
Q2FsbGVlKTsKQEAgLTIzMDAsMTAgKzI4MjMsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRS
ZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPgog
ICAgICAgICBCMzo6VmFsdWVSZXAgcmVwID0gd2FzbUNhbGxJbmZvLnJlc3VsdHNbaV07CiAgICAg
ICAgIGlmIChyZXAuaXNTdGFjaygpKSB7CiAgICAgICAgICAgICBCMzo6VmFsdWUqIGFkZHJlc3Mg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QWRkLCBP
cmlnaW4oKSwgZnJhbWVQb2ludGVyKCksIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHJlcC5vZmZz
ZXRGcm9tRlAoKSkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6
TWVtb3J5VmFsdWU+KG1fcHJvYywgQjM6OlN0b3JlLCBPcmlnaW4oKSwgcmV0dXJuVmFsdWVzW29m
ZnNldCArIGldLCBhZGRyZXNzKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8QjM6Ok1lbW9yeVZhbHVlPihtX3Byb2MsIEIzOjpTdG9yZSwgT3JpZ2luKCksIGdldChyZXR1
cm5WYWx1ZXNbb2Zmc2V0ICsgaV0pLCBhZGRyZXNzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIEFTU0VSVChyZXAuaXNSZWcoKSk7Ci0gICAgICAgICAgICBwYXRjaC0+YXBwZW5kKHJl
dHVyblZhbHVlc1tvZmZzZXQgKyBpXSwgcmVwKTsKKyAgICAgICAgICAgIHBhdGNoLT5hcHBlbmQo
Z2V0KHJldHVyblZhbHVlc1tvZmZzZXQgKyBpXSksIHJlcCk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTIzMTMsMTIgKzI4MzYsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29u
c3QgQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPgogCiBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9sRGF0YSYgZGF0YSwgRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7
Ci0gICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnBoaXMpOworICAg
IHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YSk7CiAKICAgICBCYXNpY0Js
b2NrKiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CiAgICAgaWYgKGNvbmRp
dGlvbikgewogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxv
Y2soKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBC
Mzo6QnJhbmNoLCBvcmlnaW4oKSwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgZ2V0KGNvbmRp
dGlvbikpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVk
QmxvY2sodGFyZ2V0KSwgRnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikpOwogICAgICAgICB0
YXJnZXQtPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKICAgICAgICAgY29udGludWF0
aW9uLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CkBAIC0yMzMzLDExICsyODU2LDEy
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkU3dp
dGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4m
IHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBTdGFjayYgZXhwcmVz
c2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVU5VU0VEX1BBUkFNKGV4cHJlc3Np
b25TdGFjayk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytp
KQotICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIHRhcmdldHNb
aV0tPnBoaXMpOwotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGVm
YXVsdFRhcmdldC5waGlzKTsKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lv
blN0YWNrLCAqdGFyZ2V0c1tpXSk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lv
blN0YWNrLCBkZWZhdWx0VGFyZ2V0KTsKIAotICAgIFN3aXRjaFZhbHVlKiBzd2l0Y2hWYWx1ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8U3dpdGNoVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IGNvbmRpdGlvbik7CisgICAgU3dpdGNoVmFsdWUqIHN3aXRjaFZhbHVlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxTd2l0Y2hWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ2V0KGNvbmRpdGlv
bikpOwogICAgIHN3aXRjaFZhbHVlLT5zZXRGYWxsVGhyb3VnaChGcmVxdWVudGVkQmxvY2soZGVm
YXVsdFRhcmdldC50YXJnZXRCbG9ja0ZvckJyYW5jaCgpKSk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKQogICAgICAgICBzd2l0Y2hWYWx1ZS0+YXBwZW5k
Q2FzZShTd2l0Y2hDYXNlKGksIEZyZXF1ZW50ZWRCbG9jayh0YXJnZXRzW2ldLT50YXJnZXRCbG9j
a0ZvckJyYW5jaCgpKSkpOwpAQCAtMjM1MSw3ICsyODc1LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjplbmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAt
PiBQYXIKIAogICAgIEFTU0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgpID09IGRhdGEuc2lnbmF0
dXJlKCktPnJldHVybkNvdW50KCkpOwogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpICE9IEJsb2Nr
VHlwZTo6TG9vcCkKLSAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNr
LCBkYXRhLnBoaXMpOworICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3Rh
Y2ssIGRhdGEpOwogCiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSht
X3Byb2MsIEp1bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CiAgICAgZGF0YS5jb250
aW51YXRpb24tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKQEAgLTIzNjMsMzAgKzI4
ODcsMzQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xF
bnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXMKIHsKICAgICBDb250cm9sRGF0YSYgZGF0
YSA9IGVudHJ5LmNvbnRyb2xEYXRhOwogICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5jb250aW51
YXRpb247CisgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOwogCiAgICAgaWYgKGRh
dGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgewogICAgICAgICBkYXRhLnNwZWNpYWwt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBtX2N1cnJlbnRC
bG9jayk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hZGRQcmVkZWNlc3NvcihkYXRhLnNwZWNp
YWwpOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBl
OjpUcnkgfHwgZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoKQorICAgICAgICAt
LW1fdHJ5RGVwdGg7CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5cGU6Okxv
b3ApIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJlKCkt
PnJldHVybkNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgVmFsdWUqIHJlc3VsdCA9IGRhdGEu
cGhpc1tpXTsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLSAg
ICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVu
ZChkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpLCByZXN1bHQpOworICAgICAgICAgICAg
ZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRhdGEuc2ln
bmF0dXJlKCktPnJldHVyblR5cGUoaSksIHB1c2gocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICBtX291dGVyTG9vcHMucmVtb3ZlTGFzdCgpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAoaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkpCisgICAgICAg
ICAgICBpZiAoaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAr
K21fc3RhY2tTaXplOwogICAgICAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0
YWNrLmFwcGVuZChleHByZXNzaW9uU3RhY2tbaV0pOwotICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFR5cGUgcmV0dXJuVHlwZSA9IGRhdGEu
c2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSk7Ci0gICAgICAgICAgICAgICAgZW50cnkuZW5jbG9z
ZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHJldHVyblR5cGUsIGNvbnN0YW50
KHRvQjNUeXBlKHJldHVyblR5cGUpLCAweGJiYWRiZWVmKSk7CisgICAgICAgICAgICAgICAgZW50
cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHJldHVyblR5cGUs
IHB1c2goY29uc3RhbnQodG9CM1R5cGUocmV0dXJuVHlwZSksIDB4YmJhZGJlZWYpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKKwogICAgIC8vIFRvcExldmVsIGRvZXMgbm90
IGhhdmUgYW55IGNvZGUgYWZ0ZXIgdGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0
IGEgcmV0dXJuIGhlcmUuCiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpU
b3BMZXZlbCkKICAgICAgICAgcmV0dXJuIGFkZFJldHVybihlbnRyeS5jb250cm9sRGF0YSwgZW50
cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2spOwpAQCAtMjQwMCwxMiArMjkyOCwxMiBAQCBCMzo6
VmFsdWUqIEIzSVJHZW5lcmF0b3I6OmNyZWF0ZUNhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJs
b2NrLCBPcmlnaW4gb3JpZ2luLAogICAgIFZlY3RvcjxCMzo6Q29uc3RyYWluZWRWYWx1ZT4gY29u
c3RyYWluZWRBcmd1bWVudHM7CiAgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdh
c21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcihzaWduYXR1cmUpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQotICAgICAgICBjb25z
dHJhaW5lZEFyZ3VtZW50cy5hcHBlbmQoQjM6OkNvbnN0cmFpbmVkVmFsdWUoYXJnc1tpXSwgd2Fz
bUNhbGxJbmZvLnBhcmFtc1tpXSkpOworICAgICAgICBjb25zdHJhaW5lZEFyZ3VtZW50cy5hcHBl
bmQoQjM6OkNvbnN0cmFpbmVkVmFsdWUoZ2V0KGJsb2NrLCBhcmdzW2ldKSwgd2FzbUNhbGxJbmZv
LnBhcmFtc1tpXSkpOwogCiAgICAgbV9wcm9jLnJlcXVlc3RDYWxsQXJnQXJlYVNpemVJbkJ5dGVz
KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHdhc21DYWxs
SW5mby5oZWFkZXJBbmRBcmd1bWVudFN0YWNrU2l6ZUluQnl0ZXMpKTsKIAogICAgIEIzOjpUeXBl
IHJldHVyblR5cGUgPSB0b0IzUmVzdWx0VHlwZSgmc2lnbmF0dXJlKTsKLSAgICBCMzo6UGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZh
bHVlPihtX3Byb2MsIHJldHVyblR5cGUsIG9yaWdpbik7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbV9wcm9jLmFkZDxQYXRjaHBvaW50VmFsdWU+KHJldHVyblR5cGUsIG9yaWdp
bik7CiAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0
Y2hSZWdpc3RlcnMoKSk7CiAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQ6
OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOwogICAgIHBhdGNocG9pbnRGdW5jdG9yKHBh
dGNocG9pbnQpOwpAQCAtMjQxNyw2ICsyOTQ1LDcgQEAgQjM6OlZhbHVlKiBCM0lSR2VuZXJhdG9y
OjpjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9jaywgT3JpZ2luIG9yaWdpbiwK
ICAgICAgICAgICAgIHJlc3VsdENvbnN0cmFpbnRzLmFwcGVuZChCMzo6VmFsdWVSZXAodmFsdWVM
b2NhdGlvbikpOwogICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50cyA9IFdURk1v
dmUocmVzdWx0Q29uc3RyYWludHMpOwogICAgIH0KKyAgICBibG9jay0+YXBwZW5kKHBhdGNocG9p
bnQpOwogICAgIHJldHVybiBwYXRjaHBvaW50OwogfQogCkBAIC0yNDM4LDExICsyOTY3LDExIEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxCMzo6VHlw
ZT4mIHR1cGxlID0gbV9wcm9jLnR1cGxlRm9yVHlwZShyZXR1cm5UeXBlKTsKICAgICAgICAgICAg
IEFTU0VSVChzaWduYXR1cmUucmV0dXJuQ291bnQoKSA9PSB0dXBsZS5zaXplKCkpOwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyAr
K2kpCi0gICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxFeHRyYWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHR1cGxlW2ldLCBjYWxsUmVzdWx0
LCBpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaChtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHVwbGVbaV0sIGNh
bGxSZXN1bHQsIGkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBk
ZWZhdWx0OiB7Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChjYWxsUmVzdWx0KTsKKyAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2goY2FsbFJlc3VsdCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQ3MSw4ICszMDAwLDEwIEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNz
dW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNr
aW5nLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0
aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAg
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpn
ZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKLSAgICAgICAgICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5j
dGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7CisgICAgICAgICAgICAgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBo
YW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoaXNXYXNtQmxvY2ssIHBhdGNo
cG9pbnQpOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdGhpcywg
aGFuZGxlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
ICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBw
YXJhbXMsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rp
b25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwpAQCAt
MjQ5OCw4ICszMDI5LDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAg
ICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29t
ZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJl
ckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmcpKTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3Jl
dHVyblR5cGVdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoaXNFbWJlZGRlckJs
b2NrLCBwYXRjaHBvaW50KTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoW3RoaXMsIGhhbmRsZSwgcmV0dXJuVHlwZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAg
ICAgICAgICAgICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwogICAg
ICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcGFyYW1zLnByb2MoKS5yZXN1bHRDb3Vu
dChyZXR1cm5UeXBlKV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CiAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICB9KSk7CkBAIC0yNTI3LDggKzMwNjAsMTAgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLAogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciB0aGUgc2l6
ZSByZWdpc3RlciBzaW5jZSB0aGUgTExJbnQgYWx3YXlzIGJvdW5kcyBjaGVja3MKICAgICAgICAg
ICAgICAgICBpZiAobV9tb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZyB8fCBtX2luZm8ubWVt
b3J5LmlzU2hhcmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJM
YXRlKFJlZ2lzdGVyU2V0IHsgUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS5ib3VuZHNDaGVja2lu
Z1NpemVSZWdpc3RlciB9KTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAg
ICAgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2lu
dEZvckV4Y2VwdGlvbnMobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQpOworICAgICAgICAgICAg
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdGhpcywgaGFuZGxlLCB1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAg
ICAgICAgICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0
Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQ
dHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwpAQCAtMjU0Myw3ICszMDc4LDcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVj
dCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJl
c3VsdAogewotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgp
OworICAgIFZhbHVlKiBjYWxsZWVJbmRleCA9IGdldChhcmdzLnRha2VMYXN0KCkpOwogICAgIEFT
U0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKIAogICAgIG1f
bWFrZXNDYWxscyA9IHRydWU7CkBAIC0yNTUyLDExICszMDg3LDExIEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0CiAgICAgLy8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBmb3Igb3VyIHN0YWNrIGNo
ZWNrIGNhbGN1bGF0aW9uLgogICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgo
bV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUo
KSkpOwogCi0gICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlcjsKLSAgICBF
eHByZXNzaW9uVHlwZSBpbnN0YW5jZXNCdWZmZXI7Ci0gICAgRXhwcmVzc2lvblR5cGUgY2FsbGFi
bGVGdW5jdGlvbkJ1ZmZlckxlbmd0aDsKKyAgICBWYWx1ZSogY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
cjsKKyAgICBWYWx1ZSogaW5zdGFuY2VzQnVmZmVyOworICAgIFZhbHVlKiBjYWxsYWJsZUZ1bmN0
aW9uQnVmZmVyTGVuZ3RoOwogICAgIHsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50
ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICBWYWx1ZSogdGFibGUgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9y
aWdpbigpLAogICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJ
bnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZVB0cihtX251bUltcG9ydEZ1bmN0aW9ucywgdGFibGVJbmRl
eCkpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2lu
KCksCiAgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oRnVuY1JlZlRhYmxlOjpv
ZmZzZXRPZkZ1bmN0aW9ucygpKSk7CkBAIC0yNTc4LDE3ICszMTEzLDE3IEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0CiAKICAgICBjYWxsZWVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgpOwogCi0gICAg
RXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbjsKKyAgICBWYWx1ZSogY2FsbGFibGVGdW5j
dGlvbjsKICAgICB7CiAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBpbiB0aGUgdGFibGUg
aW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgotICAgICAgICBFeHByZXNzaW9uVHlwZSBv
ZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwgb3Jp
Z2luKCksCisgICAgICAgIFZhbHVlKiBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIE11bCwgb3JpZ2luKCksCiAgICAgICAgICAgICBjYWxsZWVJbmRleCwg
Y29uc3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b24pKSk7CiAgICAgICAgIGNhbGxhYmxlRnVuY3Rpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIs
IG9mZnNldCk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgV2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4gImludmFs
aWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4KICAgICAg
ICAgLy8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRsZXJzLCB3ZSBjYW4ganVzdCBsZXQg
dGhlIGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4IGlzIDAuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcyMTAKICAgICAgICAgc3RhdGlj
X2Fzc2VydChzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6c2lnbmF0dXJlSW5k
ZXgpID09IHNpemVvZih1aW50NjRfdCksICJMb2FkIGNvZGVnZW4gYXNzdW1lcyBpNjQiKTsKLSAg
ICAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwg
Y2FsbGFibGVGdW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbjo6b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSk7CisgICAgICAgIFZhbHVlKiBjYWxs
ZWVTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2Fz
dDxpbnQzMl90PihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZlNpZ25hdHVy
ZUluZGV4KCkpKTsKICAgICAgICAgewogICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdp
bigpLAogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgRXF1YWwsIG9yaWdpbigpLApAQCAtMjYwMiw3ICszMTM3LDcgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXQKIAogICAgICAgICAvLyBDaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgdGhl
IHZhbHVlIHdlIGV4cGVjdC4KICAgICAgICAgewotICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUg
ZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZSkpOworICAgICAgICAgICAgVmFsdWUqIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgU2ln
bmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmUpKTsKICAgICAgICAgICAgIENoZWNrVmFs
dWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2Ms
IENoZWNrLCBvcmlnaW4oKSwKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBvcmlnaW4oKSwgY2FsbGVlU2lnbmF0dXJlSW5k
ZXgsIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpKTsKIApAQCAtMjYxNiw3ICszMTUxLDcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXQKICAgICAgICAgY2FsbGVlSW5kZXgsIGNvbnN0YW50KHBvaW50
ZXJUeXBlKCksIHNpemVvZihJbnN0YW5jZSopKSk7CiAgICAgVmFsdWUqIGNhbGxlZUluc3RhbmNl
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBw
b2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBpbnN0YW5jZXNCdWZmZXIsIG9mZnNldCkp
OwotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAor
ICAgIFZhbHVlKiBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVy
VHlwZSgpLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKICAgICAgICAgICAgIHNhZmVDYXN0
PGludDMyX3Q+KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2lu
dExvYWRMb2NhdGlvbigpKSkpOwogCkBAIC0yNjI1LDcgKzMxNjAsNyBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxSZWYoY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3Qm
IHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWUg
PSBhcmdzLnRha2VMYXN0KCk7CisgICAgVmFsdWUqIGNhbGxlZSA9IGdldChhcmdzLnRha2VMYXN0
KCkpOwogICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgp
KTsKICAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOwogCkBAIC0yNjQyLDI0ICszMTc3LDI3IEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlCiAgICAgVmFsdWUqIGNhbGxlZUluc3RhbmNlID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBBZGQsIG9yaWdpbigpLCBqc0NhbGxlZUluc3RhbmNlLCBpbnN0YW5jZU9mZnNldCkp
OwogCi0gICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCks
CisgICAgVmFsdWUqIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50
ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsZWUsCiAgICAgICAgICAgICBzYWZlQ2FzdDxpbnQzMl90
PihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9u
KCkpKSk7CiAKICAgICByZXR1cm4gZW1pdEluZGlyZWN0Q2FsbChjYWxsZWVJbnN0YW5jZSwgY2Fs
bGVlQ29kZSwgc2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKTsKIH0KIAotdm9pZCBCM0lSR2VuZXJh
dG9yOjp1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSBwaGksIGNvbnN0IEV4cHJlc3Npb25UeXBl
IHNvdXJjZSkKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnkoVmFsdWUqIHBoaSwgY29uc3QgRXhw
cmVzc2lvblR5cGUgc291cmNlKQogewotICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBz
aWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzb3VyY2UsIHBoaSk7CisgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGdldChzb3Vy
Y2UpLCBwaGkpOwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2Nr
KGNvbnN0IFN0YWNrJiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0KQordm9p
ZCBCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYgcmVzdWx0
U3RhY2ssIGNvbnN0IENvbnRyb2xEYXRhJiBibG9jaykKIHsKLSAgICBBU1NFUlQocmVzdWx0LnNp
emUoKSA8PSByZXN1bHRTdGFjay5zaXplKCkpOworICAgIGNvbnN0IFZlY3RvcjxWYWx1ZSo+JiBw
aGlzID0gYmxvY2sucGhpczsKKyAgICBzaXplX3QgcmVzdWx0U2l6ZSA9IHBoaXMuc2l6ZSgpOwog
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kpCi0gICAgICAg
IHVuaWZ5KHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0gMSAtIGldLCByZXN1bHRTdGFjay5hdChyZXN1
bHRTdGFjay5zaXplKCkgLSAxIC0gaSkpOworICAgIEFTU0VSVChyZXN1bHRTaXplIDw9IHJlc3Vs
dFN0YWNrLnNpemUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdFNpemU7
ICsraSkKKyAgICAgICAgdW5pZnkocGhpc1tyZXN1bHRTaXplIC0gMSAtIGldLCByZXN1bHRTdGFj
ay5hdChyZXN1bHRTdGFjay5zaXplKCkgLSAxIC0gaSkpOwogfQogCiBzdGF0aWMgdm9pZCBkdW1w
RXhwcmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEIzSVJHZW5l
cmF0b3I6OlN0YWNrJiBleHByZXNzaW9uU3RhY2spCkBAIC0yNzAzLDggKzMyNDEsMTEgQEAgRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5k
Q29tcGlsZShDb21waWxhdGlvbkMKIAogICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVu
dHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAgICBjb21waWxhdGlv
bkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsK
KyAgICBjb21waWxhdGlvbkNvbnRleHQucHJvY2VkdXJlID0gbWFrZVVuaXF1ZTxQcm9jZWR1cmU+
KCk7CisKKyAgICBQcm9jZWR1cmUmIHByb2NlZHVyZSA9ICpjb21waWxhdGlvbkNvbnRleHQucHJv
Y2VkdXJlOwogCi0gICAgUHJvY2VkdXJlIHByb2NlZHVyZTsKKyAgICBjb21waWxhdGlvbkNvbnRl
eHQud2FzbUVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKIAogICAg
IHByb2NlZHVyZS5zZXRPcmlnaW5QcmludGVyKFtdIChQcmludFN0cmVhbSYgb3V0LCBPcmlnaW4g
b3JpZ2luKSB7CiAgICAgICAgIGlmIChvcmlnaW4uZGF0YSgpKQpAQCAtMjcyNSw2ICszMjY2LDcg
QEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkMKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJh
dG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5k
YXRhLnNpemUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZB
SUxTKHBhcnNlci5wYXJzZSgpKTsKIAorICAgIGlyR2VuZXJhdG9yLmluc2VydEVudHJ5U3dpdGNo
KCk7CiAgICAgaXJHZW5lcmF0b3IuaW5zZXJ0Q29uc3RhbnRzKCk7CiAKICAgICBwcm9jZWR1cmUu
cmVzZXRSZWFjaGFiaWxpdHkoKTsKQEAgLTI3MzYsMTggKzMyNzgsNDMgQEAgRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShD
b21waWxhdGlvbkMKICAgICBkYXRhTG9nSWYoV2FzbUIzSVJHZW5lcmF0b3JJbnRlcm5hbDo6dmVy
Ym9zZSwgIlBvc3QgU1NBOiAiLCBwcm9jZWR1cmUpOwogICAgIAogICAgIHsKKyAgICAgICAgaWYg
KHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjb21waWxhdGlvbk1vZGUpKQorICAgICAgICAgICAg
cHJvY2VkdXJlLmNvZGUoKS5zZXREaXNhc3NlbWJsZXIobWFrZVVuaXF1ZTxCMzo6QWlyOjpEaXNh
c3NlbWJsZXI+KCkpOwogICAgICAgICBCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJl
KTsKICAgICAgICAgQjM6OmdlbmVyYXRlKHByb2NlZHVyZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53
YXNtRW50cnlwb2ludEpJVCk7CiAgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlw
b2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKICAgICAgICAg
cmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVl
U2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CiAgICAgfQogCisgICAgcmVzdWx0LT5zdGFja21h
cHMgPSBpckdlbmVyYXRvci50YWtlU3RhY2ttYXBzKCk7CisgICAgcmVzdWx0LT5leGNlcHRpb25I
YW5kbGVycyA9IGlyR2VuZXJhdG9yLnRha2VFeGNlcHRpb25IYW5kbGVycygpOworCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAordm9pZCBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhW
ZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiBoYW5kbGVy
cywgY29uc3QgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIGNvbnN0IENvbXBpbGF0aW9uQ29u
dGV4dCYgY29udGV4dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBpZiAoIWNvbnRl
eHQucHJvY2VkdXJlKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBlbnRyeXBvaW50
SW5kZXggPSAwOworICAgIHVuc2lnbmVkIG51bUVudHJ5cG9pbnRzID0gY29udGV4dC5wcm9jZWR1
cmUtPm51bUVudHJ5cG9pbnRzKCk7CisgICAgZm9yIChjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZv
JiBoYW5kbGVySW5mbyA6IGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycykgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVChlbnRyeXBvaW50SW5kZXggPCBudW1FbnRyeXBvaW50cyk7CisgICAgICAg
IGlmIChoYW5kbGVySW5mby5tX3R5cGUgPT0gSGFuZGxlclR5cGU6OkRlbGVnYXRlKSB7CisgICAg
ICAgICAgICBoYW5kbGVycy5hcHBlbmQoeyB9KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgKytlbnRyeXBvaW50SW5kZXg7CisgICAgICAgIGhhbmRsZXJzLmFw
cGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oY29udGV4
dC5wcm9jZWR1cmUtPmNvZGUoKS5lbnRyeXBvaW50TGFiZWwoZW50cnlwb2ludEluZGV4KSkpOwor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChlbnRyeXBvaW50SW5kZXggPT0gbnVtRW50cnlwb2lu
dHMgLSAxKTsKK30KKwogLy8gQ3VzdG9tIHdhc20gb3BzLiBUaGVzZSBhcmUgdGhlIG9uZXMgdG9v
IG1lc3N5IHRvIGRvIGluIHdhc20uanNvbi4KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0Q2hl
Y2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSBvcGVyYXRpb24sIEV4cHJlc3Npb25UeXBlIGxlZnQs
IEV4cHJlc3Npb25UeXBlIHJpZ2h0KQordm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9y
TW9kT3JEaXYoQjM6Ok9wY29kZSBvcGVyYXRpb24sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQp
CiB7CiAgICAgQVNTRVJUKG9wZXJhdGlvbiA9PSBEaXYgfHwgb3BlcmF0aW9uID09IE1vZCB8fCBv
cGVyYXRpb24gPT0gVURpdiB8fCBvcGVyYXRpb24gPT0gVU1vZCk7CiAgICAgY29uc3QgQjM6OlR5
cGUgdHlwZSA9IGxlZnQtPnR5cGUoKTsKQEAgLTI3NzYsMTA2ICszMzQzLDEyNSBAQCB2b2lkIEIz
SVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlIG9wZXJhdGlvbiwg
RXhwcmVzc2lvblR5cGUgbAogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyRGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUg
cmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFy
LCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBEaXY7CisgICAgVmFsdWUq
IGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFyKTsK
ICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJu
IHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlJlbVM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVzc2lv
blR5cGUgcmlnaHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gTW9kOworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0
KGxlZnRWYXIpOworICAgIFZhbHVlKiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENo
ZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0
LCByaWdodCk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMkRpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVz
c2lvblR5cGUgcmlnaHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVURpdjsKKyAgICBWYWx1ZSogbGVmdCA9
IGdldChsZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVt
aXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9Owog
fQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVt
VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSBy
aWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAg
IGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBVTW9kOworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRW
YXIpOworICAgIFZhbHVlKiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zv
ck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAg
ICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
b3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBs
YXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZTPihFeHByZXNz
aW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NERpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6
Ok9wY29kZSBvcCA9IERpdjsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChsZWZ0VmFyKTsKKyAgICBW
YWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihv
cCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0g
cHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtUz4oRXhwcmVzc2lvblR5cGUgbGVm
dCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1TPihFeHBy
ZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3Ag
PSBNb2Q7CisgICAgVmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0
ID0gZ2V0KHJpZ2h0VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJp
Z2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNo
KG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hpbGwob3ApLCBvcmln
aW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1h
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2VT4oRXhwcmVzc2lvblR5cGUg
bGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPihF
eHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUg
b3AgPSBVRGl2OworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVlKiBy
aWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0
LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0
LCByaWdodCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHBy
ZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVU+KEV4cHJlc3Npb25U
eXBlIGxlZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVNb2Q7
CisgICAgVmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0
KHJpZ2h0VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsK
LSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9w
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMkN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyQ3R6PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50
LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczMyKHBh
cmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7Cisg
ICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1w
bGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihFeHByZXNz
aW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25UeXBlIGFy
Z1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZh
bHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2
NCwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAg
ICBqaXQuY291bnRUcmFpbGluZ1plcm9zNjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3By
KCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQp
OwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIp
OwogI2lmIENQVShYODZfNjQpCiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0NvdW50
UG9wdWxhdGlvbigpKSB7CiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBv
cmlnaW4oKSk7CkBAIC0yODg0LDE5ICszNDcwLDIwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
CiAgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uMzIocGFyYW1zWzFdLmdwcigpLCBwYXJh
bXNbMF0uZ3ByKCkpOwogICAgICAgICB9KTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9
IEVmZmVjdHM6Om5vbmUoKTsKLSAgICAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAgICAg
cmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAj
ZW5kaWYKIAogICAgIFZhbHVlKiBmdW5jQWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlv
blB0clRhZz4ob3BlcmF0aW9uUG9wY291bnQzMikpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksIEVmZmVj
dHM6Om5vbmUoKSwgZnVuY0FkZHJlc3MsIGFyZyk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLCBF
ZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpKTsKICAgICByZXR1cm4geyB9OwogfQog
CiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJl
c3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICNpZiBDUFUoWDg2XzY0KQogICAg
IGlmIChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNDb3VudFBvcHVsYXRpb24oKSkgewogICAgICAg
ICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOwpAQCAtMjkwNSwxOSAr
MzQ5MiwyMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJgogICAgICAgICAgICAgaml0LmNvdW50
UG9wdWxhdGlvbjY0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAg
fSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAg
ICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2lu
dCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogI2VuZGlmCiAKICAgICBWYWx1ZSogZnVu
Y0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblBvcGNv
dW50NjQpKTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFs
dWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNz
LCBhcmcpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2Fs
bFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLCBmdW5jQWRk
cmVzcywgYXJnKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPEY2NENvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFy
Z1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBvcmlnaW4oKSk7CiAg
ICAgaWYgKGlzWDg2KCkpCiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVy
cyA9IDE7CkBAIC0yOTMyLDEzICszNTIwLDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlCiAj
ZW5kaWYKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgp
OwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50
KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0g
Z2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIG9yaWdpbigp
KTsKICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVn
aXN0ZXJzID0gMTsKQEAgLTI5NTMsNjUgKzM1NDIsNzAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b24KICNlbmRpZgogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNo
cG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0
KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBvcmlnaW4oKSk7
CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5yb3VuZFRv
d2FyZE5lYXJlc3RJbnREb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOwog
ICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAg
cmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAg
IHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIG9yaWdpbigpKTsKICAgICBwYXRjaHBv
aW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdElu
dEZsb2F0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKICAgICB9KTsKICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNo
cG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9Owog
fQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1
bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFRydW5jPihFeHBy
ZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+
KG1fcHJvYywgRG91YmxlLCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywg
VmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CiAgICAgICAgIGppdC5yb3VuZFRvd2FyZFplcm9Eb3VibGUocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZnByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBF
ZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBw
dXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyVHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcg
PSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBGbG9hdCwgb3JpZ2lu
KCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
OwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQucm91
bmRUb3dhcmRaZXJvRmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOwogICAg
IH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVz
dWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJl
dHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwog
ICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4o
LXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkp
KSk7CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2
NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1p
bigpKSAtIDEuMCkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMwMjgsMTMgKzM2
MjIsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2ND4o
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRG91
YmxlVG9JbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgfSk7CiAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBw
YXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1
bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFs
dWUqIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNf
Y2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CiAgICAg
VmFsdWUqIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRp
Y19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKICAg
ICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCkBAIC0zMDUxLDE0ICszNjQ2LDE1IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5CiAgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9JbnQzMihwYXJhbXNb
MV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJl
c3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogCiB0ZW1wbGF0
ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Np
b25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAog
eworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0gY29uc3Rh
bnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogLTIuMCkpOwogICAgIFZhbHVlKiBt
aW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOwogICAg
IFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMwNzUsMTMgKzM2NzEsMTQgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50MzIocGFyYW1z
WzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICBy
ZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRl
PD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lv
blR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7
CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXggPSBjb25zdGFu
dChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0yLjAp
KSk7CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KHN0YXRpY19jYXN0PGZsb2F0PigtMS4wKSkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4o
KSwKQEAgLTMwOTgsMTMgKzM2OTUsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAg
ICAgaml0LnRydW5jYXRlRmxvYXRUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5n
cHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUo
KTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2lu
dCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0
KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0
PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0
X3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ2NF90Pjo6bWluKCkpKSk7CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzEyMSwx
MyArMzcxOSwxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNT
RjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNh
dGVEb3VibGVUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9
KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3Vs
dCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1
cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAg
ICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0
YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICog
LTIuMCkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1
aW50NjRfdD4oLTEuMCkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMxNjQsMTMg
KzM3NjMsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2
ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRl
RG91YmxlVG9VaW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gs
IGNvbnN0YW50KTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6
bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRj
aHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcg
PSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2Vf
Y2FzdDx1aW50MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDY0X3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50NjRfdD46Om1pbigpKSkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMxODcs
MTMgKzM3ODcsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5j
U0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5j
YXRlRmxvYXRUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9
KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3Vs
dCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1
cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAg
ICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSAqIHN0
YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChGbG9h
dCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKICAg
ICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCkBAIC0zMjMwLDcgKzM4MzEsNyBAQCBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDY0KHBhcmFtc1sx
XS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CiAgICAgfSk7CiAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBw
YXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmgKaW5kZXggMWQ2NjIxMGUxYjUwNDNhOWE0MWZhNjEzZjUyMjQ5M2FlZTMwNzQ3YS4uMjg5MWQx
ZTQ0ZjNhZjM3ZDg2MTkzNDY2ZjlkYzk3ZTZiOGRkNjE5YSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCkBAIC00MCw3ICs0MCwxMyBAQAogCiBl
eHRlcm4gIkMiIHZvaWQgZHVtcFByb2NlZHVyZSh2b2lkKik7CiAKLW5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEIzIHsKK2NsYXNz
IFByb2NlZHVyZTsKK30KKworbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBNZW1vcnlJbmZvcm1h
dGlvbjsKIApAQCAtNDgsMTAgKzU0LDEzIEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDQ2FsbEhlbHBlcnM+IGVtYmVkZGVyRW50cnlwb2ludEpJVDsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0NhbGxIZWxwZXJzPiB3YXNtRW50cnlwb2ludEpJVDsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gd2FzbUVudHJ5cG9pbnRCeXByb2R1
Y3RzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6UHJvY2VkdXJlPiBwcm9jZWR1cmUgeyBudWxs
cHRyIH07CiB9OwogCiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4s
IFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0
aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25J
bmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxw
dHIpOwogCit2b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKFZlY3RvcjxDb2Rl
TG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJ
bnRlcm5hbEZ1bmN0aW9uKiwgY29uc3QgQ29tcGlsYXRpb25Db250ZXh0JiwgTGlua0J1ZmZlciYp
OworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZX0IzSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
CmluZGV4IGFmMmZjNzJiYWNiYjM0YzhiMzM1NzhkOTA3YjM3YzYwMjQwZmI5ZmIuLjQ2NmEyNjBi
ZmYyNDhiZGI0MjU5M2IwNGM3MDdlNWZiODkxZWFhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKQEAgLTY2LDYgKzY2LDcgQEAgYm9vbCBCQlFQbGFuOjpw
cmVwYXJlSW1wbCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fd2FzbUludGVybmFs
RnVuY3Rpb25zLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX2V4Y2VwdGlvbkhhbmRs
ZXJMb2NhdGlvbnMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fY29tcGlsYXRpb25D
b250ZXh0cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV90aWVyVXBDb3VudHMucmVz
aXplKGZ1bmN0aW9ucy5zaXplKCkpOwogCkBAIC0xMDksNiArMTEwLDkgQEAgdm9pZCBCQlFQbGFu
Ojp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4g
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxv
Y2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBmdW5jdGlvbi5nZXQoKSwgY29udGV4
dCwgbGlua0J1ZmZlcik7CisKICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gbV9mdW5j
dGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwog
ICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+
aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbbV9mdW5jdGlvbkluZGV4XTsKICAgICBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2ln
bmF0dXJlSW5kZXgpOwpAQCAtMTE4LDcgKzEyMiw3IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21w
aWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgIHsKLSAgICAgICAgUmVmPEJCUUNhbGxlZT4gY2Fs
bGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1
bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChm
dW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKHRpZXJVcCksIFdURk1vdmUodW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMpKTsKKyAgICAgICAgUmVmPEJCUUNhbGxlZT4gY2FsbGVlID0gQkJRQ2FsbGVl
OjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFj
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3Bh
Y2UpLCBXVEZNb3ZlKHRpZXJVcCksIFdURk1vdmUodW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpLCBX
VEZNb3ZlKGZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5leGNlcHRpb25I
YW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlv
biwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKICAgICAgICAgQVNTRVJUKCFt
X2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0pOwogICAgICAgICBlbnRy
eXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7CkBAIC0xOTQsMTEgKzE5OCwxNSBAQCBzdGQ6
OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9uKHVp
bnQzMl90IGZ1bmN0aW9uSW5kZQogICAgIGJvb2wgZm9yY2VVc2luZ0IzID0gZmFsc2U7CiAgICAg
aWYgKE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpICYmIG1fbW9kdWxl
SW5mb3JtYXRpb24tPmNvZGVTZWN0aW9uU2l6ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFp
ck1vZGVUaHJlc2hvbGQoKSkKICAgICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKKyAgICBlbHNl
IGlmICghbV9tb2R1bGVJbmZvcm1hdGlvbi0+bV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25z
LnF1aWNrR2V0KGZ1bmN0aW9uSW5kZXgpKQorICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwor
ICAgIGVsc2UgaWYgKCFPcHRpb25zOjp3YXNtQkJRVXNlc0FpcigpKQorICAgICAgICBmb3JjZVVz
aW5nQjMgPSB0cnVlOwogCi0gICAgaWYgKCFmb3JjZVVzaW5nQjMgJiYgT3B0aW9uczo6d2FzbUJC
UVVzZXNBaXIoKSkKLSAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21w
aWxlQWlyKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRp
ZXJVcCk7Ci0gICAgZWxzZQorICAgIGlmIChmb3JjZVVzaW5nQjMpCiAgICAgICAgIHBhcnNlQW5k
Q29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0
dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwg
bV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1v
ZGUsIGZ1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCk7CisgICAgZWxzZQorICAgICAg
ICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIoY29udGV4dCwgZnVu
Y3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1fbW9kdWxlSW5mb3Jt
YXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIAogICAgIGlmIChV
TkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBMb2NrZXIgbG9ja2Vy
IHsgbV9sb2NrIH07CkBAIC0yMjIsMTMgKzIzMCwxNSBAQCB2b2lkIEJCUVBsYW46OmRpZENvbXBs
ZXRlQ29tcGlsYXRpb24oKQogICAgICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3Bh
Y2UgPSBmdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25D
b3VudCgpOwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKICAgICAgICAgeworICAgICAgICAg
ICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tm
dW5jdGlvbkluZGV4XS5nZXQoKTsKICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigq
Y29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
V2FzbSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShs
aW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAgQmFzZTo6
ZmFpbChtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24gYXQg
aW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVu
Y3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1
ZTxDb21waWxhdGlvbj4oCisgICAgICAgICAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucyhtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9u
LCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5lbnRyeXBvaW50
LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4oCiAgICAgICAgICAgICAgICAg
RklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2Vt
Ymx5IEJCUSBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVy
ZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0
aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5j
dGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAgIFdURk1v
dmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgfQpAQCAtMjcy
LDcgKzI4Miw3IEBAIHZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2FsbGVl
SW5pdGlhbGl6ZXImIGNhbGxiYWNrKQogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0
aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQo
KTsKICAgICAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGludGVybmFsRnVuY3Rpb25J
bmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKLSAgICAg
ICAgUmVmPEJCUUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0
ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdU
Rk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUobV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7CisgICAgICAg
IFJlZjxCQlFDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUo
V1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZN
b3ZlKG1fdGllclVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3ZlKG1fdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUoZnVu
Y3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwg
V1RGTW92ZShtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4
XSkpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNh
bGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50cnlwb2ludENhbGxl
ZS5wdHIoKSkpOwogCiAgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RG
TW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2Fs
bGVlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxh
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAppbmRleCBkYmVm
YzU0YWQ3NTAwNWE3MGQxZTFhZjk2MDAwMTc0ZjhlY2JkYjNmLi5kYzAwMjI3NTY2MjI1MWI4YWIw
ZjA3ZGVhYjA5ODZlOTdjZmU2YTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmgKQEAgLTgzLDYgKzgzLDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW50ZXJuYWxGdW5jdGlvbj4gY29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IENvbXBpbGF0aW9uQ29udGV4dCYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIFRp
ZXJVcENvdW50Kik7CiAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+PiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uczsKKyAgICBWZWN0b3I8VmVjdG9yPENvZGVMb2Nh
dGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+Pj4gbV9leGNlcHRpb25IYW5kbGVyTG9j
YXRpb25zOwogICAgIEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiwgRGVmYXVsdEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zOwog
ICAgIFZlY3RvcjxDb21waWxhdGlvbkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKICAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50Pj4gbV90aWVyVXBDb3VudHM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwCmluZGV4IDIxZDk3YjEzY2Vl
MGM2NWUxNjMxYzc2ZDI1ODkzMzMzNTMyZWU5NDAuLmI0NjZiN2ZjZWI4MGEzZTI3Mjc5OWYzNzVm
YWQwYmRkYWFiZDk0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsZWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUu
Y3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNs
dWRlICJMTEludEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlUmVnaXN0cnkuaCIK
ICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKIApAQCAtNTYsNiArNTcsMTIgQEAg
dm9pZCBDYWxsZWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBvdXQucHJpbnQo
bWFrZVN0cmluZyhtX2luZGV4T3JOYW1lKSk7CiB9CiAKK2NvbnN0IEhhbmRsZXJJbmZvKiBDYWxs
ZWU6OmhhbmRsZXJGb3JJbmRleChJbnN0YW5jZSYgaW5zdGFuY2UsIHVuc2lnbmVkIGluZGV4LCBj
b25zdCBUYWcqIHRhZykKK3sKKyAgICBBU1NFUlQoaGFzRXhjZXB0aW9uSGFuZGxlcnMoKSk7Cisg
ICAgcmV0dXJuIEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgoaW5zdGFuY2UsIG1fZXhjZXB0
aW9uSGFuZGxlcnMsIGluZGV4LCB0YWcpOworfQorCiBKSVRDYWxsZWU6OkpJVENhbGxlZShXYXNt
OjpDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCBFbnRyeXBvaW50JiYgZW50cnlwb2lu
dCkKICAgICA6IENhbGxlZShjb21waWxhdGlvbk1vZGUpCiAgICAgLCBtX2VudHJ5cG9pbnQoV1RG
TW92ZShlbnRyeXBvaW50KSkKQEAgLTY5LDYgKzc2LDMyIEBAIEpJVENhbGxlZTo6SklUQ2FsbGVl
KFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5cG9pbnQmJiBlbnRy
eXBvCiB7CiB9CiAKK0xMSW50Q2FsbGVlOjpMTEludENhbGxlZShzdGQ6OnVuaXF1ZV9wdHI8RnVu
Y3Rpb25Db2RlQmxvY2s+IGNvZGVCbG9jaywgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3Qg
TmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKKyAgICA6IENhbGxlZShXYXNtOjpD
b21waWxhdGlvbk1vZGU6OkxMSW50TW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCisgICAgLCBt
X2NvZGVCbG9jayhXVEZNb3ZlKGNvZGVCbG9jaykpCit7CisgICAgbGlua0V4Y2VwdGlvbkhhbmRs
ZXJzKCk7Cit9CisKK3ZvaWQgTExJbnRDYWxsZWU6OmxpbmtFeGNlcHRpb25IYW5kbGVycygpCit7
CisgICAgaWYgKHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhh
bmRsZXJzKCkpIHsKKyAgICAgICAgbV9leGNlcHRpb25IYW5kbGVycy5yZXNpemVUb0ZpdChjb3Vu
dCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAg
ICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV9jb2Rl
QmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFu
ZGxlciA9IG1fZXhjZXB0aW9uSGFuZGxlcnNbaV07CisgICAgICAgICAgICBhdXRvJiBpbnN0cnVj
dGlvbiA9ICptX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVyLm1f
dGFyZ2V0KS5wdHIoKTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+IHRhcmdldDsKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZEhhbmRsZXIubV90
eXBlID09IEhhbmRsZXJUeXBlOjpDYXRjaCkKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBDb2Rl
TG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6aGFuZGxlV2FzbUNh
dGNoKGluc3RydWN0aW9uLndpZHRoPFdhc21PcGNvZGVUcmFpdHM+KCkpLmNvZGUoKSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZVdhc21DYXRjaEFsbChpbnN0cnVj
dGlvbi53aWR0aDxXYXNtT3Bjb2RlVHJhaXRzPigpKS5jb2RlKCkpOworCisgICAgICAgICAgICBo
YW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCB0YXJnZXQpOworICAgICAgICB9Cisg
ICAgfQorfQorCiB2b2lkIExMSW50Q2FsbGVlOjpzZXRFbnRyeXBvaW50KE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQpCiB7CiAgICAgbV9lbnRyeXBvaW50
ID0gZW50cnlwb2ludDsKQEAgLTEwNCw2ICsxMzcsMzYgQEAgc3RkOjp0dXBsZTx2b2lkKiwgdm9p
ZCo+IExMSW50Q2FsbGVlOjpyYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbnVs
bHB0ciB9OwogfQogCit2b2lkIE9wdGltaXppbmdKSVRDYWxsZWU6OmxpbmtFeGNlcHRpb25IYW5k
bGVycygpCit7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZEV4Y2VwdGlvbkhhbmRsZXJz
LnNpemUoKTsKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgSGFuZGxlcklu
Zm8mIGhhbmRsZXIgPSBtX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOworICAgICAgICBjb25zdCBVbmxp
bmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkRXhjZXB0aW9uSGFu
ZGxlcnNbaV07CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IGxvY2F0aW9uID0gbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zW2ldOworICAgICAgICBo
YW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBsb2NhdGlvbik7CisgICAgfQorICAg
IG1fdW5saW5rZWRFeGNlcHRpb25IYW5kbGVycy5jbGVhcigpOworICAgIG1fZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucy5jbGVhcigpOworfQorCitjb25zdCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4m
IE9wdGltaXppbmdKSVRDYWxsZWU6OnN0YWNrbWFwKENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCkgY29uc3QKK3sKKyAgICBhdXRvIGl0ZXIgPSBtX3N0YWNrbWFwcy5maW5kKGNhbGxTaXRlSW5k
ZXgpOworICAgIGlmIChpdGVyID09IG1fc3RhY2ttYXBzLmVuZCgpKSB7CisgICAgICAgIGZvciAo
YXV0byBwYWlyIDogbV9zdGFja21hcHMpIHsKKyAgICAgICAgICAgIGRhdGFMb2cocGFpci5rZXku
Yml0cygpLCAiOiAiKTsKKyAgICAgICAgICAgIGZvciAoYXV0byB2YWx1ZSA6IHBhaXIudmFsdWUp
CisgICAgICAgICAgICAgICAgZGF0YUxvZyh2YWx1ZSwgIiwgIik7CisgICAgICAgICAgICBkYXRh
TG9nTG4oIiIpOworICAgICAgICB9CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0g
bV9zdGFja21hcHMuZW5kKCkpOworICAgIHJldHVybiBpdGVyLT52YWx1ZTsKK30KKworCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCmluZGV4IDA4MWRiNzZlNDJmOWU0
MGU0M2I5MmM5ODJhZmNkOGNlOTUwYmIxZTEuLjdkNjlkNjI2ZDhjM2YwZDkzN2UxZDBiNTAyNTAz
Yzk0YjViZjE1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
YWxsZWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKQEAg
LTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlICJXYXNtQ29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVk
ZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIldhc21IYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIldhc21JbmRleE9yTmFtZS5oIgor
I2luY2x1ZGUgIldhc21MTEludFRpZXJVcENvdW50ZXIuaCIKICNpbmNsdWRlICJXYXNtVGllclVw
Q291bnQuaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIApAQCAtNTks
NiArNjEsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNh
bGxlZVNhdmVSZWdpc3RlcnMoKSA9IDA7CiAgICAgdmlydHVhbCBzdGQ6OnR1cGxlPHZvaWQqLCB2
b2lkKj4gcmFuZ2UoKSBjb25zdCA9IDA7CiAKKyAgICBjb25zdCBIYW5kbGVySW5mbyogaGFuZGxl
ckZvckluZGV4KEluc3RhbmNlJiwgdW5zaWduZWQsIGNvbnN0IFRhZyopOworCisgICAgYm9vbCBo
YXNFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuICEhbV9leGNlcHRpb25IYW5kbGVy
cy5zaXplKCk7IH0KKwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKICAgICB2aXJ0dWFs
IHZvaWQgc2V0T1NSRW50cnlDYWxsZWUoUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiYmKQogICAg
IHsKQEAgLTY4LDYgKzc0LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIEZ1bmN0aW9uQ29kZUJsb2NrKiBmdW5jdGlvbkNvZGVC
bG9jaygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogcHJvdGVjdGVkOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUsIHNpemVfdCwgc3RkOjpwYWlyPGNvbnN0
IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmKTsKQEAgLTc1LDYgKzgzLDkgQEAgcHJvdGVj
dGVkOgogcHJpdmF0ZToKICAgICBDb21waWxhdGlvbk1vZGUgbV9jb21waWxhdGlvbk1vZGU7CiAg
ICAgSW5kZXhPck5hbWUgbV9pbmRleE9yTmFtZTsKKworcHJvdGVjdGVkOgorICAgIFZlY3RvcjxI
YW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKIH07CiAKIGNsYXNzIEpJVENhbGxlZSA6
IHB1YmxpYyBDYWxsZWUgewpAQCAtOTksNjQgKzExMCw4NiBAQCBwcml2YXRlOgogICAgIFdhc206
OkVudHJ5cG9pbnQgbV9lbnRyeXBvaW50OwogfTsKIAotI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9C
M0pJVCkKLWNsYXNzIE9NR0NhbGxlZSBmaW5hbCA6IHB1YmxpYyBKSVRDYWxsZWUgeworY2xhc3Mg
RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlIGZpbmFsIDogcHVibGljIEpJVENhbGxlZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxPTUdDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYg
ZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxO
YW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5s
aW5rZWRDYWxscykKKyAgICBzdGF0aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3Jl
YXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgT01HQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZN
b3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpKSk7
CiAgICAgfQogCiBwcml2YXRlOgotICAgIE9NR0NhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50
cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1l
U2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5r
ZWRDYWxscykKLSAgICAgICAgOiBKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdN
b2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1
bmxpbmtlZENhbGxzKSkKKyAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoV2FzbTo6RW50cnlw
b2ludCYmIGVudHJ5cG9pbnQpCisgICAgICAgIDogSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9u
TW9kZTo6RW1iZWRkZXJFbnRyeXBvaW50TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSkKICAgICB7
CiAgICAgfQogfTsKIAotY2xhc3MgT01HRm9yT1NSRW50cnlDYWxsZWUgZmluYWwgOiBwdWJsaWMg
SklUQ2FsbGVlIHsKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKK2NsYXNzIE9wdGlt
aXppbmdKSVRDYWxsZWUgOiBwdWJsaWMgSklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5
cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNl
Y3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQz
Ml90IGxvb3BJbmRleCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRD
YWxscykKKyAgICBjb25zdCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4mIHN0YWNrbWFwKENhbGxTaXRl
SW5kZXgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgT3B0aW1pemluZ0pJVENhbGxlZShXYXNt
OjpDb21waWxhdGlvbk1vZGUgbW9kZSwgV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNp
emVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYm
IG5hbWUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhh
c2hNYXA8Q2FsbFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywg
VmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxD
b2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5k
bGVyTG9jYXRpb25zKQorICAgICAgICA6IEpJVENhbGxlZShtb2RlLCBXVEZNb3ZlKGVudHJ5cG9p
bnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkKKyAgICAg
ICAgLCBtX3N0YWNrbWFwcyhXVEZNb3ZlKHN0YWNrbWFwcykpCisgICAgICAgICwgbV91bmxpbmtl
ZEV4Y2VwdGlvbkhhbmRsZXJzKFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpKQorICAgICAgICAs
IG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2Nh
dGlvbnMpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50
cnlDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIG9zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGxvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkRXhjZXB0aW9uSGFuZGxlcnMuc2l6
ZSgpID09IG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucy5zaXplKCkpOworICAgICAgICBsaW5r
RXhjZXB0aW9uSGFuZGxlcnMoKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXpl
OyB9Ci0gICAgdWludDMyX3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9sb29wSW5kZXg7
IH0KLQogcHJpdmF0ZToKLSAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShXYXNtOjpFbnRyeXBvaW50
JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0
cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSwgdWludDMyX3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1
bmxpbmtlZENhbGxzKQotICAgICAgICA6IEpJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6
Ok9NR0Zvck9TUkVudHJ5TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUo
bmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxscykpCi0gICAgICAgICwgbV9vc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCi0gICAgICAgICwgbV9sb29w
SW5kZXgobG9vcEluZGV4KQorICAgIHZvaWQgbGlua0V4Y2VwdGlvbkhhbmRsZXJzKCk7CisKKyAg
ICBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4gbV9zdGFja21h
cHM7CisgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fdW5saW5rZWRFeGNlcHRpb25I
YW5kbGVyczsKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4+IG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKK307CisKK2NsYXNzIE9NR0NhbGxl
ZSBmaW5hbCA6IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPE9NR0NhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBz
aXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4m
JiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBI
YXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMs
IFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8
Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucykKICAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0Nh
bGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1
bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRs
ZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkpOwogICAgIH0KIAotICAg
IHVuc2lnbmVkIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKLSAgICB1aW50MzJfdCBtX2xv
b3BJbmRleDsKK3ByaXZhdGU6CisgICAgT01HQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRy
eXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVT
ZWN0aW9uPj4mJiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtl
ZENhbGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBz
dGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJz
LCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhj
ZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2FsbGVlKFdh
c206OkNvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgs
IFdURk1vdmUobmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBz
KSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxv
Y2F0aW9ucykpCisgICAgeworICAgIH0KIH07Ci0jZW5kaWYKIAotY2xhc3MgRW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlIGZpbmFsIDogcHVibGljIEpJVENhbGxlZSB7CitjbGFzcyBPTUdGb3JPU1JF
bnRyeUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKFdhc206OkVu
dHJ5cG9pbnQmJiBlbnRyeXBvaW50KQorICAgIHN0YXRpYyBSZWY8T01HRm9yT1NSRW50cnlDYWxs
ZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBz
dGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWdu
ZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4LCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBIYXNoTWFwPENhbGxTaXRl
SW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtl
ZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFi
ZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENh
bGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3Zl
KG5hbWUpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBsb29wSW5kZXgsIFdURk1vdmUodW5s
aW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVy
cyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpKTsKICAgICB9CiAKKyAgICB1
bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplOyB9CisgICAgdWludDMyX3QgbG9vcEluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV9sb29wSW5kZXg7IH0KKwogcHJpdmF0ZToKLSAgICBFbWJlZGRlckVudHJ5cG9p
bnRDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCi0gICAgICAgIDogSklUQ2Fs
bGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6RW1iZWRkZXJFbnRyeXBvaW50TW9kZSwgV1RGTW92
ZShlbnRyeXBvaW50KSkKKyAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShXYXNtOjpFbnRyeXBvaW50
JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0
cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSwgdWludDMyX3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1
bmxpbmtlZENhbGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVl
Pj4mJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhh
bmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+
JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2Fs
bGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBXVEZNb3ZlKGVu
dHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwg
V1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShl
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkKKyAgICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKKyAgICAgICAgLCBtX2xvb3BJbmRl
eChsb29wSW5kZXgpCiAgICAgewogICAgIH0KKworICAgIHVuc2lnbmVkIG1fb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZTsKKyAgICB1aW50MzJfdCBtX2xvb3BJbmRleDsKIH07CiAKLSNpZiBFTkFC
TEUoV0VCQVNTRU1CTFlfQjNKSVQpCi1jbGFzcyBCQlFDYWxsZWUgZmluYWwgOiBwdWJsaWMgSklU
Q2FsbGVlIHsKK2NsYXNzIEJCUUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2Fs
bGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJCUUNhbGxlZT4gY3JlYXRlKFdhc206OkVu
dHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1l
KiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291
bnQ+JiYgdGllclVwQ291bnQsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlu
a2VkQ2FsbHMpCisgICAgc3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBv
aW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJl
ZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYm
IHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENh
bGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFj
a21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBW
ZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9ucykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEJCUUNhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZSh0aWVyVXBDb3VudCksIFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQkJRQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBX
VEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxz
KSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92
ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkpOwogICAgIH0KIAogICAgIE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSgpIHsgcmV0dXJuIG1fb3NyRW50cnlDYWxsZWUuZ2V0
KCk7IH0KQEAgLTE3Nyw4ICsyMTAsOCBAQCBwdWJsaWM6CiAgICAgVGllclVwQ291bnQqIHRpZXJV
cENvdW50KCkgeyByZXR1cm4gbV90aWVyVXBDb3VudC5nZXQoKTsgfQogCiBwcml2YXRlOgotICAg
IEJCUUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBz
dGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1
bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQotICAgICAgICA6IEpJVENhbGxlZShXYXNtOjpD
b21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZN
b3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKQorICAgIEJCUUNhbGxlZShXYXNtOjpF
bnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFt
ZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENv
dW50PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxp
bmtlZENhbGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4m
JiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRs
ZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYg
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2FsbGVl
KFdhc206OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5k
ZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2tt
YXBzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxl
ckxvY2F0aW9ucykpCiAgICAgICAgICwgbV90aWVyVXBDb3VudChXVEZNb3ZlKHRpZXJVcENvdW50
KSkKICAgICB7CiAgICAgfQpAQCAtMjE4LDE1ICsyNTEsMTMgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIExMSW50VGllclVwQ291bnRlciYgdGllclVwQ291bnRlcigpIHsgcmV0dXJuIG1fY29kZUJs
b2NrLT50aWVyVXBDb3VudGVyKCk7IH0KKyAgICBGdW5jdGlvbkNvZGVCbG9jayogZnVuY3Rpb25D
b2RlQmxvY2soKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQogI2Vu
ZGlmCiAKIHByaXZhdGU6Ci0gICAgTExJbnRDYWxsZWUoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBjb2RlQmxvY2ssIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUq
LCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNv
bXBpbGF0aW9uTW9kZTo6TExJbnRNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKLSAgICAgICAg
LCBtX2NvZGVCbG9jayhXVEZNb3ZlKGNvZGVCbG9jaykpCi0gICAgewotICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX2NvZGVCbG9jayk7Ci0gICAgfQorICAgIExMSW50Q2FsbGVlKHN0ZDo6dW5pcXVl
X3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5h
bWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmKTsKKworICAgIHZvaWQgbGlua0V4Y2VwdGlvbkhh
bmRsZXJzKCk7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCiAgICAgUmVmUHRyPEpJ
VENhbGxlZT4gbV9yZXBsYWNlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKaW5kZXggNmMwMjZlMDhhNDA5ZTk5NWQ0MzE4ZGZi
MTgwNDYyNmQwZmFkMTc1Zi4uN2JmMDAxZWQ5MmVmY2JhZmMwZmJjOGE1MGI0YmY2MjcyNWQyY2Nl
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252
ZW50aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252
ZW50aW9uLmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgcmVzdWx0
c0luY2x1ZGVJNjQgPSBmYWxzZTsKICAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7
CiAgICAgICAgIHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAgICBzaXplX3QgYXJn
U3RhY2tPZmZzZXQgPSBoZWFkZXJTaXplSW5CeXRlczsKKyAgICAgICAgc2l6ZV90IGFyZ1N0YWNr
T2Zmc2V0ID0gaGVhZGVyU2l6ZUluQnl0ZXMgKyBzaXplb2YoUmVnaXN0ZXIpOwogICAgICAgICBp
ZiAocm9sZSA9PSBDYWxsUm9sZTo6Q2FsbGVyKQogICAgICAgICAgICAgYXJnU3RhY2tPZmZzZXQg
LT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwogCkBAIC0xMzYsNyArMTM2LDcgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgICAgIGdwQXJndW1lbnRDb3VudCA9IDA7CiAgICAgICAgIGZwQXJn
dW1lbnRDb3VudCA9IDA7Ci0gICAgICAgIHNpemVfdCByZXN1bHRTdGFja09mZnNldCA9IGhlYWRl
clNpemVJbkJ5dGVzOworICAgICAgICBzaXplX3QgcmVzdWx0U3RhY2tPZmZzZXQgPSBoZWFkZXJT
aXplSW5CeXRlcyArIHNpemVvZihSZWdpc3Rlcik7CiAgICAgICAgIGlmIChyb2xlID09IENhbGxS
b2xlOjpDYWxsZXIpCiAgICAgICAgICAgICByZXN1bHRTdGFja09mZnNldCAtPSBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApp
bmRleCBjMGNiMzFiN2NiZjAwNmFhMDE5MzZjMWY0NDZkNmIxODlmMGRlMTU1Li40OWRmOTUxNTQ3
YzA4YTk4MTEwNTA3ZWVlYzMxMTY4ZWY3YzVhOGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZvcm1hdC5oCkBAIC0yOSwxMSArMjksMTMgQEAKIAogI2luY2x1ZGUgIkNvZGVMb2Nh
dGlvbi5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyQXRP
ZmZzZXRMaXN0LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVk
ZSAiV2FzbU5hbWUuaCIKICNpbmNsdWRlICJXYXNtTmFtZVNlY3Rpb24uaCIKKyNpbmNsdWRlICJX
YXNtT1NSRW50cnlEYXRhLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21Q
YWdlQ291bnQuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCkBAIC01MCw2ICs1Miw3IEBA
IG5hbWVzcGFjZSBXYXNtIHsKIAogc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dDsKIHN0cnVjdCBN
b2R1bGVJbmZvcm1hdGlvbjsKK3N0cnVjdCBVbmxpbmtlZEhhbmRsZXJJbmZvOwogCiB1c2luZyBC
bG9ja1NpZ25hdHVyZSA9IGNvbnN0IFNpZ25hdHVyZSo7CiAKQEAgLTc2LDYgKzc5LDE5IEBAIGlu
bGluZSBib29sIGlzVmFsdWVUeXBlKFR5cGUgdHlwZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K2lubGluZSBKU1N0cmluZyogdHlwZVRvU3RyaW5nKFZNJiB2bSwgVHlwZUtpbmQgdHlwZSkKK3sK
KyNkZWZpbmUgVFlQRV9DQVNFKG1hY3JvTmFtZSwgdmFsdWUsIGIzLCBpbmMsIHdhc21OYW1lKSBc
CisgICAgY2FzZSBUeXBlS2luZDo6bWFjcm9OYW1lOiBcCisgICAgICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcodm0sICN3YXNtTmFtZSk7IFwKKworICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBGT1JfRUFDSF9XQVNNX1RZUEUoVFlQRV9DQVNFKQorICAgIH0KKworI3VuZGVmIFRZUEVf
Q0FTRQorfQorCiBpbmxpbmUgYm9vbCBpc1N1YnR5cGUoVHlwZSBzdWIsIFR5cGUgcGFyZW50KQog
ewogICAgIGlmIChzdWIuaXNOdWxsYWJsZSgpICYmICFwYXJlbnQuaXNOdWxsYWJsZSgpKQpAQCAt
MTE1LDYgKzEzMSw3IEBAIGVudW0gY2xhc3MgRXh0ZXJuYWxLaW5kIDogdWludDhfdCB7CiAgICAg
VGFibGUgPSAxLAogICAgIE1lbW9yeSA9IDIsCiAgICAgR2xvYmFsID0gMywKKyAgICBFeGNlcHRp
b24gPSA0LAogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSW50PgpAQCAtMTI1LDYgKzE0Miw3IEBA
IGlubGluZSBib29sIGlzVmFsaWRFeHRlcm5hbEtpbmQoSW50IHZhbCkKICAgICBjYXNlIHN0YXRp
Y19jYXN0PEludD4oRXh0ZXJuYWxLaW5kOjpUYWJsZSk6CiAgICAgY2FzZSBzdGF0aWNfY2FzdDxJ
bnQ+KEV4dGVybmFsS2luZDo6TWVtb3J5KToKICAgICBjYXNlIHN0YXRpY19jYXN0PEludD4oRXh0
ZXJuYWxLaW5kOjpHbG9iYWwpOgorICAgIGNhc2Ugc3RhdGljX2Nhc3Q8SW50PihFeHRlcm5hbEtp
bmQ6OkV4Y2VwdGlvbik6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xMzQsNiArMTUyLDcgQEAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+
KEV4dGVybmFsS2luZDo6RnVuY3Rpb24pID09IDAsICJXYXNtIG5lZWRzIEZ1bmN0aW8KIHN0YXRp
Y19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6OlRhYmxlKSAgICA9PSAxLCAi
V2FzbSBuZWVkcyBUYWJsZSB0byBoYXZlIHRoZSB2YWx1ZSAxIik7CiBzdGF0aWNfYXNzZXJ0KHN0
YXRpY19jYXN0PGludD4oRXh0ZXJuYWxLaW5kOjpNZW1vcnkpICAgPT0gMiwgIldhc20gbmVlZHMg
TWVtb3J5IHRvIGhhdmUgdGhlIHZhbHVlIDIiKTsKIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
aW50PihFeHRlcm5hbEtpbmQ6Okdsb2JhbCkgICA9PSAzLCAiV2FzbSBuZWVkcyBHbG9iYWwgdG8g
aGF2ZSB0aGUgdmFsdWUgMyIpOworc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVy
bmFsS2luZDo6RXhjZXB0aW9uKSAgID09IDQsICJXYXNtIG5lZWRzIEV4Y2VwdGlvbiB0byBoYXZl
IHRoZSB2YWx1ZSA0Iik7CiAKIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKEV4dGVybmFs
S2luZCBraW5kKQogewpAQCAtMTQyLDYgKzE2MSw3IEBAIGlubGluZSBjb25zdCBjaGFyKiBtYWtl
U3RyaW5nKEV4dGVybmFsS2luZCBraW5kKQogICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTog
cmV0dXJuICJ0YWJsZSI7CiAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogcmV0dXJuICJt
ZW1vcnkiOwogICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHJldHVybiAiZ2xvYmFsIjsK
KyAgICBjYXNlIEV4dGVybmFsS2luZDo6RXhjZXB0aW9uOiByZXR1cm4gInRhZyI7CiAgICAgfQog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuICI/IjsKQEAgLTM3
Miw2ICszOTIsOCBAQCBzdHJ1Y3QgRW50cnlwb2ludCB7CiBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlv
biB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogICAgIENvZGVMb2NhdGlv
bkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+IGNhbGxlZU1vdmVMb2NhdGlvbjsKKyAgICBT
dGFja01hcHMgc3RhY2ttYXBzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBleGNl
cHRpb25IYW5kbGVyczsKICAgICBFbnRyeXBvaW50IGVudHJ5cG9pbnQ7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCmluZGV4
IGVhNzVmZTJmNmIwZjlhM2YxNGU3OTNlZDExMjc4ZWZkMGUwOWFjNzEuLjcyZjNlNjQxMzJjMTdi
OTUxMWEzZWJlYTZjNjBkMDAyNGIzMjdiNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDggKzI4LDEwIEBACiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgorI2lu
Y2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtSGFuZGxlcklu
Zm8uaCIKICNpbmNsdWRlICJXYXNtTExJbnRUaWVyVXBDb3VudGVyLmgiCiAjaW5jbHVkZSAiV2Fz
bU9wcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0xMjAsNiArMTIyLDEwIEBAIHB1
YmxpYzoKICAgICBjb25zdCBKdW1wVGFibGUmIGp1bXBUYWJsZSh1bnNpZ25lZCB0YWJsZUluZGV4
KSBjb25zdDsKICAgICB1bnNpZ25lZCBudW1iZXJPZkp1bXBUYWJsZXMoKSBjb25zdDsKIAorICAg
IHNpemVfdCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV9leGNl
cHRpb25IYW5kbGVycy5zaXplKCk7IH0KKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvJiBleGNlcHRp
b25IYW5kbGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07
IH0KKyAgICB2b2lkIGFkZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgVW5saW5rZWRIYW5kbGVySW5m
byYgaGFuZGxlcikgeyBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZChoYW5kbGVyKTsgfQorCiBw
cml2YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVj
dGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwogCkBAIC0xMzksNiArMTQ1LDcgQEAgcHJpdmF0ZToK
ICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIExM
SW50VGllclVwQ291bnRlciBtX3RpZXJVcENvdW50ZXI7CiAgICAgVmVjdG9yPEp1bXBUYWJsZT4g
bV9qdW1wVGFibGVzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlv
bkhhbmRsZXJzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggNGU2YjgzMjIw
NDA3NzZhMjUxNzIyZWVhMjE4ZjQ2YzJjMzk5MTMxMC4uZmFkN2Q3NjhlYjEwZjZiNTQ5YzdjODkx
OGMxNzZkZTVmMTJmZDY2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTM3LDcgKzM3LDE0IEBAIGVudW0gY2xhc3MgQmxvY2tUeXBl
IHsKICAgICBJZiwKICAgICBCbG9jaywKICAgICBMb29wLAotICAgIFRvcExldmVsCisgICAgVG9w
TGV2ZWwsCisgICAgVHJ5LAorICAgIENhdGNoLAorfTsKKworZW51bSBjbGFzcyBDYXRjaEtpbmQg
eworICAgIENhdGNoLAorICAgIENhdGNoQWxsLAogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRW5j
bG9zaW5nU3RhY2ssIHR5cGVuYW1lIE5ld1N0YWNrPgpAQCAtMTQ3LDYgKzE1NCw3IEBAIHByaXZh
dGU6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbmRleEZvckxv
Y2FsKHVpbnQzMl90Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFy
c2VJbmRleEZvckdsb2JhbCh1aW50MzJfdCYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIHBhcnNlRnVuY3Rpb25JbmRleCh1aW50MzJfdCYpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXhjZXB0aW9uSW5kZXgodWludDMyX3QmKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJyYW5jaFRhcmdldCh1aW50
MzJfdCYpOwogCiAgICAgc3RydWN0IFRhYmxlSW5pdEltbWVkaWF0ZXMgewpAQCAtMjExLDYgKzIx
OSwxMiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbG9vcEluZGV4IHsgMCB9OwogfTsKIAor
dGVtcGxhdGU8dHlwZW5hbWUgQ29udHJvbFR5cGU+CitzdGF0aWMgYm9vbCBpc1RyeU9yQ2F0Y2go
Q29udHJvbFR5cGUmIGRhdGEpCit7CisgICAgcmV0dXJuIENvbnRyb2xUeXBlOjppc1RyeShkYXRh
KSB8fCBDb250cm9sVHlwZTo6aXNDYXRjaChkYXRhKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUg
Q29udGV4dD4KIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihDb250ZXh0
JiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25M
ZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbykKICAgICA6IFBhcnNlcihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCkKQEAg
LTU3NSw2ICs1ODksMTYgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VGdW5j
dGlvbkluZGV4KHVpbnQzMl90JiByZXN1bHRJbmRleCkgLT4gUGFydGkKICAgICByZXR1cm4geyB9
OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYXV0byBGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VFeGNlcHRpb25JbmRleCh1aW50MzJfdCYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgdWludDMyX3QgZXhjZXB0aW9uSW5kZXg7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhjZXB0aW9uSW5kZXgpLCAiY2FuJ3QgcGFyc2UgZXhj
ZXB0aW9uIGluZGV4Iik7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihleGNlcHRpb25JbmRl
eCA+PSBtX2luZm8uZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSwgImV4Y2VwdGlvbiBpbmRleCAi
LCBleGNlcHRpb25JbmRleCwgIiBpcyBpbnZhbGlkLCBsaW1pdCBpcyAiLCBtX2luZm8uZXhjZXB0
aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAgcmVzdWx0ID0gZXhjZXB0aW9uSW5kZXg7CisgICAg
cmV0dXJuIHsgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIGF1dG8gRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlQnJhbmNoVGFyZ2V0KHVpbnQzMl90JiByZXN1bHRUYXJn
ZXQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKQEAgLTEzMzMsNiArMTM1NywxMzEgQEAgRk9SX0VBQ0hf
V0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogCisgICAgY2FzZSBUcnk6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0
aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5v
dCBlbmFibGVkIik7CisKKyAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywg
aW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCB0cnkncyBzaWduYXR1cmUiKTsKKworICAgICAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGlubGlu
ZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyBhcmd1bWVudHMgb24gc3RhY2sg
Zm9yIHRyeSBibG9jay4gVHJ5ZSBleHBlY3RzICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRD
b3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgd2VyZSBw
cmVzZW50LiBUcnkgYmxvY2sgaGFzIHNpZ25hdHVyZTogIiwgaW5saW5lU2lnbmF0dXJlLT50b1N0
cmluZygpKTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9leHByZXNzaW9uU3RhY2suc2l6
ZSgpIC0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQor
ICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFja1tvZmZz
ZXQgKyBpXS50eXBlKCkgIT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKSwgIlRyeSBleHBl
Y3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJl
LT5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBtX2V4cHJlc3Np
b25TdGFja1tpXS50eXBlKCkua2luZCk7CisKKyAgICAgICAgaW50NjRfdCBvbGRTaXplID0gbV9l
eHByZXNzaW9uU3RhY2suc2l6ZSgpOworICAgICAgICBTdGFjayBuZXdTdGFjazsKKyAgICAgICAg
Q29udHJvbFR5cGUgY29udHJvbDsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRk
VHJ5KGlubGluZVNpZ25hdHVyZSwgbV9leHByZXNzaW9uU3RhY2ssIGNvbnRyb2wsIG5ld1N0YWNr
KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU2l6ZSwgb2xkU2l6ZSAtIG1fZXhwcmVzc2lv
blN0YWNrLnNpemUoKSA9PSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAg
ICAgIEFTU0VSVChuZXdTdGFjay5zaXplKCkgPT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENv
dW50KCkpOworCisgICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZCh7IFdURk1vdmUobV9leHBy
ZXNzaW9uU3RhY2spLCB7IH0sIFdURk1vdmUoY29udHJvbCkgfSk7CisgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrID0gV1RGTW92ZShuZXdTdGFjayk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorCisgICAgY2FzZSBDYXRjaDogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRp
b25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90
IGVuYWJsZWQiKTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fY29udHJvbFN0YWNr
LnNpemUoKSA9PSAxLCAiY2FuJ3QgdXNlIGNhdGNoIGJsb2NrIGF0IHRoZSB0b3AtbGV2ZWwgb2Yg
YSBmdW5jdGlvbiIpOworCisgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4OworICAgICAg
ICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhjZXB0aW9u
SW5kZXgpKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8u
c2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRleCk7Cisg
ICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBj
b250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisgICAgICAgIFdBU01fVkFMSURB
VE9SX0ZBSUxfSUYoIWlzVHJ5T3JDYXRjaChjb250cm9sRW50cnkuY29udHJvbERhdGEpLCAiY2F0
Y2ggYmxvY2sgaXNuJ3QgYXNzb2NpYXRlZCB0byBhIHRyeSIpOworICAgICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworCisgICAg
ICAgIFJlc3VsdExpc3QgcmVzdWx0czsKKyAgICAgICAgU3RhY2sgcHJlQ2F0Y2hTdGFjazsKKyAg
ICAgICAgbV9leHByZXNzaW9uU3RhY2suc3dhcChwcmVDYXRjaFN0YWNrKTsKKyAgICAgICAgV0FT
TV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2goZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvblNp
Z25hdHVyZSwgcHJlQ2F0Y2hTdGFjaywgY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhLCByZXN1bHRz
KSk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSA9PSByZXN1bHRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAg
ICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0dXJl
LmFyZ3VtZW50KGkpLCByZXN1bHRzW2ldKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
KyAgICBjYXNlIENhdGNoQWxsOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlv
bnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3Qg
ZW5hYmxlZCIpOworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2su
c2l6ZSgpID09IDEsICJjYW4ndCB1c2UgY2F0Y2ggYmxvY2sgYXQgdGhlIHRvcC1sZXZlbCBvZiBh
IGZ1bmN0aW9uIik7CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBjb250cm9sRW50cnkgPSBtX2Nv
bnRyb2xTdGFjay5sYXN0KCk7CisKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNU
cnlPckNhdGNoKGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSksICJjYXRjaCBibG9jayBpc24ndCBh
c3NvY2lhdGVkIHRvIGEgdHJ5Iik7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMo
dW5pZnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSk7CisKKyAgICAgICAgUmVzdWx0TGlzdCBy
ZXN1bHRzOworICAgICAgICBTdGFjayBwcmVDYXRjaFN0YWNrOworICAgICAgICBtX2V4cHJlc3Np
b25TdGFjay5zd2FwKHByZUNhdGNoU3RhY2spOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09O
VEVYVChhZGRDYXRjaEFsbChwcmVDYXRjaFN0YWNrLCBjb250cm9sRW50cnkuY29udHJvbERhdGEp
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIERlbGVnYXRlOiB7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0
aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09IDEsICJjYW4ndCB1c2Ug
ZGVsZWdhdGUgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisKKyAgICAgICAgdWlu
dDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJh
bmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xFbnRyeSBjb250cm9sRW50cnkg
PSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKCFDb250cm9sVHlwZTo6aXNUcnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSwgImRlbGVn
YXRlIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKworICAgICAgICBDb250cm9sVHlwZSYg
dGFyZ2V0RGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0
YXJnZXRdLmNvbnRyb2xEYXRhOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250
cm9sVHlwZTo6aXNUcnkodGFyZ2V0RGF0YSkgJiYgIUNvbnRyb2xUeXBlOjppc1RvcExldmVsKHRh
cmdldERhdGEpLCAiZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5IG9yIHRoZSB0b3AgbGV2ZWwg
YmxvY2siKTsKKworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGREZWxlZ2F0ZSh0
YXJnZXREYXRhLCBjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKyAgICAgICAgV0FTTV9GQUlM
X0lGX0hFTFBFUl9GQUlMUyh1bmlmeShjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKyAgICAg
ICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZW5kQmxvY2soY29udHJvbEVudHJ5LCBtX2V4cHJl
c3Npb25TdGFjaykpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKGNvbnRyb2xFbnRy
eS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgY2FzZSBUaHJvdzogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25z
Ojp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVu
YWJsZWQiKTsKKworICAgICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRleDsKKyAgICAgICAgV0FT
TV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4
KSk7CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25h
dHVyZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOworICAgICAg
ICBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYobV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSwgIlRvbyBmZXcgYXJndW1lbnRzIG9uIHN0YWNrIGZvciB0aGUgZXhjZXB0aW9uIGJl
aW5nIHRocm93bi4gVGhlIGV4Y2VwdGlvbiBleHBlY3RzICIsIGV4Y2VwdGlvblNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwg
IiB3ZXJlIHByZXNlbnQuIEV4Y2VwdGlvbiBoYXMgc2lnbmF0dXJlOiAiLCBleGNlcHRpb25TaWdu
YXR1cmUudG9TdHJpbmcoKSk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVzc2lv
blN0YWNrLnNpemUoKSAtIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CisgICAg
ICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4gYXJnczsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighYXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciB0aHJvdydzICIsIGV4
Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIik7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpOyArK2kpIHsKKyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBhcmcgPSBtX2V4cHJlc3Np
b25TdGFjay5hdChvZmZzZXQgKyBpKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYoYXJnLnR5cGUoKSAhPSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSksICJUaGUgZXhj
ZXB0aW9uIGJlaW5nIHRocm93biBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCAiLCBpLCAi
IHRvIGJlICIsIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1
bWVudCBoYXMgdHlwZSAiLCBhcmcudHlwZSgpLmtpbmQpOworICAgICAgICAgICAgYXJncy51bmNo
ZWNrZWRBcHBlbmQoYXJnKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1ZUZyb21T
dGFjaygpOworICAgICAgICB9CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhvZmZz
ZXQpOworCisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFRocm93KGV4Y2VwdGlv
bkluZGV4LCBhcmdzLCBtX2V4cHJlc3Npb25TdGFjaykpOworICAgICAgICBtX3VucmVhY2hhYmxl
QmxvY2tzID0gMTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIFJldGhy
b3c6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1i
bHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAg
ICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xUeXBlJiBkYXRh
ID0gbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29u
dHJvbERhdGE7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjpp
c0FueUNhdGNoKGRhdGEpLCAicmV0aHJvdyBkb2Vzbid0IHJlZmVyIHRvIGEgY2F0Y2ggYmxvY2si
KTsKKworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRSZXRocm93KHRhcmdldCwg
ZGF0YSkpOworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKICAgICBjYXNlIEJyOgogICAgIGNhc2UgQnJJZjogewogICAgICAgICB1
aW50MzJfdCB0YXJnZXQ7CkBAIC0xNDg3LDYgKzE2MzYsNjYgQEAgYXV0byBGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgY2FzZSBDYXRjaDogeworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMo
KSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICB1aW50MzJf
dCBleGNlcHRpb25JbmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJz
ZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisgICAgICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4
U3BhY2UoZXhjZXB0aW9uSW5kZXgpOworICAgICAgICBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlv
blNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwor
CisgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKKyAgICAgICAgICAgIHJldHVy
biB7IH07CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9jb250cm9sU3RhY2subGFz
dCgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1RyeU9yQ2F0Y2goZGF0YS5j
b250cm9sRGF0YSksICJjYXRjaCBibG9jayBpc24ndCBhc3NvY2lhdGVkIHRvIGEgdHJ5Iik7CisK
KyAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDA7CisgICAgICAgIG1fZXhwcmVzc2lvblN0
YWNrID0geyB9OworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CisgICAgICAgIFdBU01fVFJZ
X0FERF9UT19DT05URVhUKGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRleCwgZXhj
ZXB0aW9uU2lnbmF0dXJlLCBkYXRhLmNvbnRyb2xEYXRhLCByZXN1bHRzKSk7CisKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSByZXN1
bHRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25T
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25T
dGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkpLCBy
ZXN1bHRzW2ldKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIENhdGNo
QWxsOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2Vt
Ymx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisg
ICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKKyAgICAgICAgICAgIHJldHVybiB7
IH07CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9jb250cm9sU3RhY2subGFzdCgp
OworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMDsKKyAgICAgICAgbV9leHByZXNzaW9u
U3RhY2sgPSB7IH07CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzVHJ5T3JDYXRj
aChkYXRhLmNvbnRyb2xEYXRhKSwgImNhdGNoIGJsb2NrIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0
cnkiKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2hBbGxUb1VucmVh
Y2hhYmxlKGRhdGEuY29udHJvbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
KyAgICBjYXNlIERlbGVnYXRlOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlv
bnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3Qg
ZW5hYmxlZCIpOworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2su
c2l6ZSgpID09IDEsICJjYW4ndCB1c2UgZGVsZWdhdGUgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1
bmN0aW9uIik7CisKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENv
bnRyb2xFbnRyeSBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOworICAg
ICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnkoY29udHJvbEVu
dHJ5LmNvbnRyb2xEYXRhKSwgImRlbGVnYXRlIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsK
KworICAgICAgICBDb250cm9sVHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0
YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdLmNvbnRyb2xEYXRhOworICAgICAgICBXQVNNX1ZBTElE
QVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkgJiYgIUNvbnRyb2xUeXBlOjpp
c1RvcExldmVsKGRhdGEpLCAiZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5IGJsb2NrIik7CisK
KyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxl
KGRhdGEsIGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworICAgICAgICBTdGFjayBlbXB0eVN0
YWNrOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbmRUb1VucmVhY2hhYmxl
KGNvbnRyb2xFbnRyeSwgZW1wdHlTdGFjaykpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5z
d2FwKGNvbnRyb2xFbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQorCiAgICAgY2FzZSBFbmQ6IHsKICAgICAgICAgaWYgKG1fdW5yZWFjaGFi
bGVCbG9ja3MgPT0gMSkgewogICAgICAgICAgICAgQ29udHJvbEVudHJ5IGRhdGEgPSBtX2NvbnRy
b2xTdGFjay50YWtlTGFzdCgpOwpAQCAtMTQ5NSw4ICsxNzA0LDEwIEBAIGF1dG8gRnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJl
c3VsdAogICAgICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gV1RGTW92ZShkYXRhLmVs
c2VCbG9ja1N0YWNrKTsKICAgICAgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHVuaWZ5KGRhdGEuY29udHJvbERhdGEpKTsKICAgICAgICAgICAgICAgICBXQVNNX1RSWV9BRERf
VE9fQ09OVEVYVChlbmRCbG9jayhkYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwotICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRW5k
VG9VbnJlYWNoYWJsZShkYXRhKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIFN0YWNrIGVtcHR5U3RhY2s7CisgICAgICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoYWRkRW5kVG9VbnJlYWNoYWJsZShkYXRhLCBlbXB0eVN0YWNrKSk7CisgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoZGF0YS5lbmNsb3NlZEV4
cHJlc3Npb25TdGFjayk7CiAgICAgICAgIH0KQEAgLTE1MDQsNiArMTcxNSwxMCBAQCBhdXRvIEZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpIC0+IFBh
cnRpYWxSZXN1bHQKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKKyAgICBjYXNlIFRyeToK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNl
cHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisgICAgICAgIEZB
TExUSFJPVUdIOworCiAgICAgY2FzZSBMb29wOgogICAgIGNhc2UgSWY6CiAgICAgY2FzZSBCbG9j
azogewpAQCAtMTU3Niw2ICsxNzkxLDE2IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAorICAgIGNhc2UgUmV0aHJvdzogeworICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20g
ZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0Owor
ICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdl
dCkpOworCisgICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250cm9sU3RhY2tbbV9jb250
cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7CisgICAgICAgIFdBU01f
VkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpLCAicmV0aHJv
dyBkb2Vzbid0IHJlZmVyIHRvIGEgY2F0Y2ggYmxvY2siKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKICAgICBjYXNlIEJyOgogICAgIGNhc2UgQnJJZjogewogICAgICAgICB1aW50MzJf
dCB0YXJnZXQ7CkBAIC0xNTgzLDYgKzE4MDgsMTUgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgY2FzZSBUaHJvdzogeworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndh
c20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICB1aW50MzJfdCBleGNl
cHRpb25JbmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2Vw
dGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKICAgICBjYXNlIEkzMkNvbnN0OiB7CiAgICAgICAgIGludDMyX3QgdW51c2VkOwogICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDMyKHVudXNlZCksICJjYW4ndCBnZXQg
aW1tZWRpYXRlIGZvciAiLCBtX2N1cnJlbnRPcGNvZGUsICIgaW4gdW5yZWFjaGFibGUgY29udGV4
dCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJ
bmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5mby5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYTU3YmNmNDliYjJjZWExNzUwZmZiNmJmMWU1NWE3ODIzZGYxMzYyMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5m
by5jcHAKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21IYW5kbGVy
SW5mby5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUluc3Rh
bmNlLmgiCisjaW5jbHVkZSAiV2FzbVRhZy5oIgorCituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFj
ZSBXYXNtIHsKKwordm9pZCBIYW5kbGVySW5mbzo6aW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhh
bmRsZXJJbmZvJiB1bmxpbmtlZEluZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPiBsYWJlbCkKK3sKKyAgICBtX3R5cGUgPSB1bmxpbmtlZEluZm8ubV90eXBl
OworICAgIG1fc3RhcnQgPSB1bmxpbmtlZEluZm8ubV9zdGFydDsKKyAgICBtX2VuZCA9IHVubGlu
a2VkSW5mby5tX2VuZDsKKyAgICBtX3RhcmdldCA9IHVubGlua2VkSW5mby5tX3RhcmdldDsKKyAg
ICBtX3RyeURlcHRoID0gdW5saW5rZWRJbmZvLm1fdHJ5RGVwdGg7CisgICAgbV9uYXRpdmVDb2Rl
ID0gbGFiZWw7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSGFuZGxlclR5cGU6
OkNhdGNoOgorICAgICAgICBtX3RhZyA9IHVubGlua2VkSW5mby5tX2V4Y2VwdGlvbkluZGV4T3JE
ZWxlZ2F0ZVRhcmdldDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhhbmRsZXJUeXBlOjpD
YXRjaEFsbDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhhbmRsZXJUeXBlOjpEZWxlZ2F0
ZToKKyAgICAgICAgbV9kZWxlZ2F0ZVRhcmdldCA9IHVubGlua2VkSW5mby5tX2V4Y2VwdGlvbklu
ZGV4T3JEZWxlZ2F0ZVRhcmdldDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitjb25zdCBI
YW5kbGVySW5mbyogSGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRleChJbnN0YW5jZSYgaW5zdGFu
Y2UsIGNvbnN0IFZlY3RvcjxIYW5kbGVySW5mbz4mIGV4ZXB0aW9uSGFuZGxlcnMsIHVuc2lnbmVk
IGluZGV4LCBjb25zdCBXYXNtOjpUYWcqIGV4Y2VwdGlvblRhZykKK3sKKyAgICBib29sIGRlbGVn
YXRpbmcgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBkZWxlZ2F0ZVRhcmdldCA9IDA7CisgICAgZm9y
IChhdXRvJiBoYW5kbGVyIDogZXhlcHRpb25IYW5kbGVycykgeworICAgICAgICAvLyBIYW5kbGVy
cyBhcmUgb3JkZXJlZCBpbm5lcm1vc3QgZmlyc3QsIHNvIHRoZSBmaXJzdCBoYW5kbGVyIHdlIGVu
Y291bnRlcgorICAgICAgICAvLyB0aGF0IGNvbnRhaW5zIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyB0
aGUgY29ycmVjdCBoYW5kbGVyIHRvIHVzZS4KKyAgICAgICAgLy8gVGhpcyBpbmRleCB1c2VkIGlz
IGVpdGhlciB0aGUgQnl0ZWNvZGVPZmZzZXQgb3IgYSBDYWxsU2l0ZUluZGV4LgorICAgICAgICBp
ZiAoaGFuZGxlci5tX3N0YXJ0IDw9IGluZGV4ICYmIGhhbmRsZXIubV9lbmQgPiBpbmRleCkgewor
ICAgICAgICAgICAgaWYgKGRlbGVnYXRpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxl
ci5tX3RyeURlcHRoICE9IGRlbGVnYXRlVGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBkZWxlZ2F0aW5nID0gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGJvb2wgbWF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgIHN3aXRjaCAo
aGFuZGxlci5tX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSGFuZGxlclR5cGU6OkNhdGNoOgor
ICAgICAgICAgICAgICAgIG1hdGNoID0gZXhjZXB0aW9uVGFnICYmIGluc3RhbmNlLnRhZyhoYW5k
bGVyLm1fdGFnKSA9PSAqZXhjZXB0aW9uVGFnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBIYW5kbGVyVHlwZTo6Q2F0Y2hBbGw6CisgICAgICAgICAgICAgICAgbWF0
Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBIYW5k
bGVyVHlwZTo6RGVsZWdhdGU6CisgICAgICAgICAgICAgICAgZGVsZWdhdGluZyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgZGVsZWdhdGVUYXJnZXQgPSBoYW5kbGVyLm1fZGVsZWdhdGVUYXJnZXQ7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghbWF0Y2gpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHJldHVy
biAmaGFuZGxlcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJ
bmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jMjUxMTkzZDIxMzE3OWViZGU5OTU0NGMyNTNlZDQ5ODlkMmY2NDNlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmgK
QEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1
ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBJbnN0YW5jZTsKK2NsYXNzIFRhZzsK
KworZW51bSBjbGFzcyBIYW5kbGVyVHlwZSB7CisgICAgQ2F0Y2ggPSAwLAorICAgIENhdGNoQWxs
ID0gMSwKKyAgICBEZWxlZ2F0ZSA9IDIsCit9OworCitzdHJ1Y3QgSGFuZGxlckluZm9CYXNlIHsK
KyAgICBIYW5kbGVyVHlwZSBtX3R5cGU7CisgICAgdWludDMyX3QgbV9zdGFydDsKKyAgICB1aW50
MzJfdCBtX2VuZDsKKyAgICB1aW50MzJfdCBtX3RhcmdldDsKKyAgICB1aW50MzJfdCBtX3RyeURl
cHRoOworICAgIHVpbnQzMl90IG1fZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0OworfTsK
Kworc3RydWN0IFVubGlua2VkSGFuZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9CYXNlIHsK
KyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKCkKKyAgICB7CisgICAgfQorCisgICAgVW5saW5rZWRI
YW5kbGVySW5mbyhIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSwgdWludDMyX3Qgc3RhcnQsIHVpbnQz
Ml90IGVuZCwgdWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCB0cnlEZXB0aCwgdWludDMyX3QgZXhj
ZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0KQorICAgIHsKKyAgICAgICAgbV90eXBlID0gaGFu
ZGxlclR5cGU7CisgICAgICAgIG1fc3RhcnQgPSBzdGFydDsKKyAgICAgICAgbV9lbmQgPSBlbmQ7
CisgICAgICAgIG1fdGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICBtX3RyeURlcHRoID0gdHJ5RGVw
dGg7CisgICAgICAgIG1fZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0ID0gZXhjZXB0aW9u
SW5kZXhPckRlbGVnYXRlVGFyZ2V0OworICAgIH0KK307CisKK3N0cnVjdCBIYW5kbGVySW5mbyA6
IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgeworICAgIHN0YXRpYyBjb25zdCBIYW5kbGVySW5mbyog
aGFuZGxlckZvckluZGV4KEluc3RhbmNlJiwgY29uc3QgVmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhl
cHRpb25IYW5kbGVycywgdW5zaWduZWQgaW5kZXgsIGNvbnN0IFdhc206OlRhZyogZXhjZXB0aW9u
VGFnKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KTsKKworICAgIHVu
c2lnbmVkIHRhZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IEhhbmRs
ZXJUeXBlOjpDYXRjaCk7CisgICAgICAgIHJldHVybiBtX3RhZzsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBkZWxlZ2F0ZVRhcmdldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBl
ID09IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSk7CisgICAgICAgIHJldHVybiBtX2RlbGVnYXRlVGFy
Z2V0OworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPiBtX25hdGl2ZUNvZGU7CisKK3ByaXZhdGU6CisgICAgdW5pb24geworICAgICAgICB1
bnNpZ25lZCBtX3RhZzsKKyAgICAgICAgdW5zaWduZWQgbV9kZWxlZ2F0ZVRhcmdldDsKKyAgICB9
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21J
bnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3Bw
CmluZGV4IGZmZDc1YzhkMGM4ZjlhYjczMWY3Y2I0OWE4NDJkOTA2NWI4MjgzYjYuLjAyNTRhMGMx
MDI5N2FiOGRlMTg1NGVhODBjOWRhYWU0YzFlYTQ4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlJl
Z2lzdGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAi
V2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVGFnLmgiCiAjaW5jbHVkZSA8
d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CkBAIC05MCw3ICs5MSw5IEBAIFJlZjxJbnN0YW5jZT4gSW5zdGFuY2U6OmNyZWF0ZShDb250
ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgRW50cnlGcmFtCiAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemUobW9kdWxl
LT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSwgbW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSkpKSBJbnN0YW5jZShjb250ZXh0LCBXVEZNb3Zl
KG1vZHVsZSksIHBvaW50ZXJUb1RvcEVudHJ5RnJhbWUsIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGlt
aXQsIFdURk1vdmUoc3RvcmVUb3BDYWxsRnJhbWUpKSk7CiB9CiAKLUluc3RhbmNlOjp+SW5zdGFu
Y2UoKSB7IH0KK0luc3RhbmNlOjp+SW5zdGFuY2UoKQoreworfQogCiBzaXplX3QgSW5zdGFuY2U6
OmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkgY29uc3QKIHsKQEAgLTI5Nyw2ICszMDAsMTYgQEAgdm9p
ZCBJbnN0YW5jZTo6bGlua0dsb2JhbCh1bnNpZ25lZCBpLCBSZWY8R2xvYmFsPiYmIGdsb2JhbCkK
ICAgICBtX2xpbmtlZEdsb2JhbHMuc2V0KGksIFdURk1vdmUoZ2xvYmFsKSk7CiB9CiAKK3ZvaWQg
SW5zdGFuY2U6OmFkZFRhZyhjb25zdCBUYWcmIHRhZykKK3sKKyAgICBtX3RhZ3MuYXBwZW5kKFJl
ZiB7IHRhZyB9KTsKK30KKwordm9pZCBJbnN0YW5jZTo6YWRkVGFnKFRhZyYmIHRhZykKK3sKKyAg
ICBtX3RhZ3MuYXBwZW5kKGFkb3B0UmVmKHRhZykpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAppbmRleCA2MGUxNGNiNWFjMDY1ODI0NDM0Mzc4MDlk
NTQ2MzNlZGY3MWNjOGI5Li5kYjk3NGQxMzBkMjcyODU3YWNjMzRkZGU1OGRlMTRmNDM1MjE0NGE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApAQCAtMjEwLDYg
KzIxMCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1l
KTsKICAgICB9CiAKKyAgICB2b2lkIGFkZFRhZyhjb25zdCBUYWcmKTsKKyAgICB2b2lkIGFkZFRh
ZyhUYWcmJik7CisgICAgY29uc3QgVGFnJiB0YWcodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4g
Km1fdGFnc1tpXTsgfQorCiBwcml2YXRlOgogICAgIEluc3RhbmNlKENvbnRleHQqLCBSZWY8TW9k
dWxlPiYmLCBFbnRyeUZyYW1lKiosIHZvaWQqKiwgU3RvcmVUb3BDYWxsRnJhbWVDYWxsYmFjayYm
KTsKICAgICAKQEAgLTIzNyw2ICsyNDEsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDMy
X3QsIFJlZjxHbG9iYWw+LCBJbnRIYXNoPHVpbnQzMl90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fbGlua2VkR2xvYmFsczsKICAgICBCaXRWZWN0b3Ig
bV9wYXNzaXZlRWxlbWVudHM7CiAgICAgQml0VmVjdG9yIG1fcGFzc2l2ZURhdGFTZWdtZW50czsK
KyAgICBWZWN0b3I8UmVmUHRyPGNvbnN0IFRhZz4+IG1fdGFnczsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTExJbnRHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxM
SW50R2VuZXJhdG9yLmNwcAppbmRleCA4MWE1Y2RiY2FlMzI4NmJlMzJjYTQ5MGRlNDVlZTNhZmY3
ODE5ODU2Li4zNTc2NjZiZGMzZDY1ZGU0NTcwZmQ1NWU4OTljNjZlZWQxMjgzYzExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKQEAg
LTYyLDggKzYyLDI2IEBAIHB1YmxpYzoKICAgICAgICAgUmVmPExhYmVsPiBtX2FsdGVybmF0ZTsK
ICAgICB9OwogCi0gICAgc3RydWN0IENvbnRyb2xUeXBlIDogcHVibGljIFZhcmlhbnQ8Q29udHJv
bExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWY+IHsKLSAgICAg
ICAgdXNpbmcgQmFzZSA9IFZhcmlhbnQ8Q29udHJvbExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29u
dHJvbEJsb2NrLCBDb250cm9sSWY+OworICAgIHN0cnVjdCBDb250cm9sVHJ5IHsKKyAgICAgICAg
UmVmPExhYmVsPiBtX3RyeTsKKyAgICAgICAgdW5zaWduZWQgbV90cnlEZXB0aDsKKyAgICB9Owor
CisgICAgc3RydWN0IENvbnRyb2xDYXRjaCB7CisgICAgICAgIENhdGNoS2luZCBtX2tpbmQ7Cisg
ICAgICAgIFJlZjxMYWJlbD4gbV90cnlTdGFydDsKKyAgICAgICAgUmVmPExhYmVsPiBtX3RyeUVu
ZDsKKyAgICAgICAgdW5zaWduZWQgbV90cnlEZXB0aDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG1fZXhjZXB0aW9uOworICAgIH07CisKKyAgICBzdHJ1Y3QgQ2F0Y2hSZXdyaXRlSW5mbyB7Cisg
ICAgICAgIHVuc2lnbmVkIG1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIG1f
dHJ5RGVwdGg7CisgICAgfTsKKworICAgIHN0cnVjdCBDb250cm9sVHlwZSA6IHB1YmxpYyBWYXJp
YW50PENvbnRyb2xMb29wLCBDb250cm9sVG9wTGV2ZWwsIENvbnRyb2xCbG9jaywgQ29udHJvbElm
LCBDb250cm9sVHJ5LCBDb250cm9sQ2F0Y2g+IHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IFZhcmlh
bnQ8Q29udHJvbExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWYs
IENvbnRyb2xUcnksIENvbnRyb2xDYXRjaD47CiAKICAgICAgICAgQ29udHJvbFR5cGUoKQogICAg
ICAgICAgICAgOiBCYXNlKENvbnRyb2xCbG9jayB7IH0pCkBAIC05MCw4ICsxMDgsMjkgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXpl
IC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29u
dHJvbElmIHsgV1RGTW92ZShhbHRlcm5hdGUpIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3Rh
dGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxDb250cm9sSWY+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBD
b250cm9sVHlwZSBjcmVhdGVUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBz
dGFja1NpemUsIFJlZjxMYWJlbD4mJiB0cnlMYWJlbCwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVh
dGlvbiwgdW5zaWduZWQgdHJ5RGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBD
b250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3Vu
dCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xUcnkgeyBXVEZNb3ZlKHRyeUxhYmVs
KSwgdHJ5RGVwdGggfSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUg
Y3JlYXRlQ2F0Y2goQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUs
IFJlZjxMYWJlbD4mJiB0cnlTdGFydCwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbiwgUmVm
PExhYmVsPiB0cnlFbmQsIHVuc2lnbmVkIHRyeURlcHRoLCBWaXJ0dWFsUmVnaXN0ZXIgZXhjZXB0
aW9uKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJl
LCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51
YXRpb24pLCBDb250cm9sQ2F0Y2ggeyBDYXRjaEtpbmQ6OkNhdGNoLCBXVEZNb3ZlKHRyeVN0YXJ0
KSwgV1RGTW92ZSh0cnlFbmQpLCB0cnlEZXB0aCwgZXhjZXB0aW9uIH0pOworICAgICAgICB9CisK
KyAgICAgICAgc3RhdGljIGJvb2wgaXNMb29wKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7
IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29wPihjb250cm9sKTsgfQog
ICAgICAgICBzdGF0aWMgYm9vbCBpc1RvcExldmVsKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9s
KSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xUb3BMZXZlbD4oY29udHJv
bCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNCbG9jayhjb25zdCBDb250cm9sVHlwZSYgY29u
dHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQmxvY2s+KGNvbnRy
b2wpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRy
b2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbElmPihjb250cm9sKTsg
fQorICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkg
eyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sVHJ5Pihjb250cm9sKTsgfQor
ICAgICAgICBzdGF0aWMgYm9vbCBpc0FueUNhdGNoKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9s
KSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xDYXRjaD4oY29udHJvbCk7
IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNDYXRjaChjb25zdCBDb250cm9sVHlwZSYgY29udHJv
bCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENv
bnRyb2xDYXRjaD4oY29udHJvbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgQ29udHJvbENhdGNoIGNhdGNoRGF0YSA9IFdURjo6Z2V0PENvbnRyb2xDYXRjaD4o
Y29udHJvbCk7CisgICAgICAgICAgICByZXR1cm4gY2F0Y2hEYXRhLm1fa2luZCA9PSBDYXRjaEtp
bmQ6OkNhdGNoOworICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zdGFja1NpemU7IH0KICAgICAgICAgQmxvY2tTaWduYXR1cmUgc2lnbmF0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmU7IH0KQEAgLTE1MiwxNyArMTkxLDI0IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2Vi
QXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4u
LikpOwogICAgIH0KIAotICAgIExMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJik7CisgICAgTExJbnRH
ZW5lcmF0b3IoTW9kdWxlSW5mb3JtYXRpb24mLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4g
ZmluYWxpemUoKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KKyAgICB2b2lkIHJl
cGF0Y2goY29uc3QgQ2F0Y2hSZXdyaXRlSW5mbyYpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhwcmVzc2lvbkxpc3RBLCB0eXBlbmFtZSBFeHByZXNzaW9uTGlzdEI+CiAgICAgdm9pZCB1bmlm
eVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdEEmIGRlc3RpbmF0aW9ucywgY29u
c3QgRXhwcmVzc2lvbkxpc3RCJiB2YWx1ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoZGVzdGlu
YXRpb25zLnNpemUoKSA8PSB2YWx1ZXMuc2l6ZSgpKTsKICAgICAgICAgYXV0byBvZmZzZXQgPSB2
YWx1ZXMuc2l6ZSgpIC0gZGVzdGluYXRpb25zLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBXYXNtTW92
OjplbWl0KHRoaXMsIGRlc3RpbmF0aW9uc1tpXSwgdmFsdWVzW29mZnNldCArIGldKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGF1dG8mIHNyYyA9IHZhbHVlc1tvZmZzZXQgKyBpXTsKKyAgICAgICAgICAgIGF1
dG8mIGRzdCA9IGRlc3RpbmF0aW9uc1tpXTsKKyAgICAgICAgICAgIGlmICgoVmlydHVhbFJlZ2lz
dGVyKXNyYyAhPSAoVmlydHVhbFJlZ2lzdGVyKWRzdCkKKyAgICAgICAgICAgICAgICBXYXNtTW92
OjplbWl0KHRoaXMsIGRzdCwgc3JjKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGVudW0gTm9D
b25zaXN0ZW5jeUNoZWNrVGFnIHsgTm9Db25zaXN0ZW5jeUNoZWNrIH07CkBAIC0yNDMsMTEgKzI4
OSwyMSBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
RWxzZShDb250cm9sVHlwZSYsIFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKIAorICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2sm
IGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4
Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVz
dWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNo
VG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwg
Q29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQ2F0Y2hBbGwoU3RhY2smLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9s
VHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRl
KENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmLCBDb250cm9s
VHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRocm93KHVu
c2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFj
ayYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldGhyb3codW5z
aWduZWQsIENvbnRyb2xUeXBlJik7CisKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbFR5cGUmLCBTdGFjayYgcmV0dXJuVmFsdWVzKTsK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbFR5
cGUmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZSo+JiB0YXJnZXRzLCBDb250cm9s
VHlwZSYgZGVmYXVsdFRhcmdldHMsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIFN0YWNr
JiBleHByZXNzaW9uU3RhY2spOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiwgY29uc3QgU3RhY2smIGV4cHJlc3Np
b25TdGFjayA9IHsgfSwgYm9vbCB1bnJlYWNoYWJsZSA9IHRydWUpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jiwg
U3RhY2smIGV4cHJlc3Npb25TdGFjaywgYm9vbCB1bnJlYWNoYWJsZSA9IHRydWUpOwogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJl
LCBjb25zdCBTdGFjayYpOwogCiAgICAgLy8gQ2FsbHMKQEAgLTMzNyw3ICszOTMsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgV2FzbURyb3BLZWVwOjplbWl0KHRoaXMsIHN0YXJ0T2Zmc2V0LCBk
cm9wLCBrZWVwKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFN0YWNrLCB0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgd2Fs
a0V4cHJlc3Npb25TdGFjayhTdGFjayYgZXhwcmVzc2lvblN0YWNrLCB1bnNpZ25lZCBzdGFja1Np
emUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBleHByZXNzaW9uU3RhY2suc2l6ZSgpOyBpID4gMDsgLS1pKSB7CkBAIC0zNDYsNyArNDAy
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RhY2ssIHR5cGVuYW1lIEZ1bmN0b3I+
CiAgICAgdm9pZCB3YWxrRXhwcmVzc2lvblN0YWNrKFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNr
KGV4cHJlc3Npb25TdGFjaywgbV9zdGFja1NpemUsIGZ1bmN0b3IpOwpAQCAtMzU1LDcgKzQxMSw4
IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHdh
bGtFeHByZXNzaW9uU3RhY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKICAgICB7Ci0gICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZW50cnkuZW5jbG9zZWRF
eHByZXNzaW9uU3RhY2ssIGVudHJ5LmNvbnRyb2xEYXRhLnN0YWNrU2l6ZSgpLCBmdW5jdG9yKTsK
KyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplID0gZW50cnkuY29udHJvbERhdGEuc3RhY2tTaXpl
KCk7CisgICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZW50cnkuZW5jbG9zZWRFeHByZXNzaW9u
U3RhY2ssIHN0YWNrU2l6ZSwgZnVuY3Rvcik7CiAgICAgfQogCiAgICAgdm9pZCBjaGVja0NvbnNp
c3RlbmN5KCkKQEAgLTM4MSw3ICs0MzgsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBtYXRlcmlh
bGl6ZUNvbnN0YW50c0FuZExvY2FscyhTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBOb0NvbnNpc3Rl
bmN5Q2hlY2tUYWcpCiAgICAgewotICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGV4cHJlc3Np
b25TdGFjaywgWyZdKFR5cGVkRXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVmlydHVhbFJlZ2lzdGVy
IHNsb3QpIHsKKyAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhleHByZXNzaW9uU3RhY2ssIFsm
XShhdXRvJiBleHByZXNzaW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgewogICAgICAgICAgICAg
QVNTRVJUKGV4cHJlc3Npb24udmFsdWUoKSA9PSBzbG90IHx8IGV4cHJlc3Npb24udmFsdWUoKS5p
c0NvbnN0YW50KCkgfHwgZXhwcmVzc2lvbi52YWx1ZSgpLmlzQXJndW1lbnQoKSB8fCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZXhwcmVzc2lvbi52YWx1ZSgpLnRvTG9jYWwoKSkgPCBtX2NvZGVCbG9j
ay0+bV9udW1WYXJzKTsKICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLnZhbHVlKCkgPT0gc2xv
dCkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00MTcsNiArNDc0LDggQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9zdGFja1NpemUgKz0gbmV3U3RhY2suc2l6ZSgpOwogICAgIH0KIAorICAgIHZv
aWQgZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2goQ29udHJvbFR5cGUmLCBTdGFjayYpOwor
CiAgICAgc3RydWN0IFN3aXRjaEVudHJ5IHsKICAgICAgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldCBvZmZzZXQ7CiAgICAgICAgIGludCoganVtcFRhcmdldDsKQEAgLTQyOSw3ICs0ODgsNyBA
QCBwcml2YXRlOgogICAgIH07CiAKICAgICBGdW5jdGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj4q
IG1fcGFyc2VyIHsgbnVsbHB0ciB9OwotICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2lu
Zm87CisgICAgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKICAgICBjb25zdCB1bnNpZ25lZCBt
X2Z1bmN0aW9uSW5kZXggeyBVSU5UX01BWCB9OwogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+
IG1fbm9ybWFsaXplZEFyZ3VtZW50czsKICAgICBIYXNoTWFwPExhYmVsKiwgVmVjdG9yPFN3aXRj
aEVudHJ5Pj4gbV9zd2l0Y2hlczsKQEAgLTQ0MCw5ICs0OTksMTIgQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAyPiBtX3Jlc3VsdHM7CiAgICAgQ2hlY2tlZDx1bnNpZ25l
ZD4gbV9zdGFja1NpemUgeyAwIH07CiAgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9tYXhTdGFja1Np
emUgeyAwIH07CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV90cnlEZXB0aCB7IDAgfTsKKyAgICBD
aGVja2VkPHVuc2lnbmVkPiBtX21heFRyeURlcHRoIHsgMCB9OworICAgIGJvb2wgbV91c2VzRXhj
ZXB0aW9ucyB7IGZhbHNlIH07CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rp
b25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4
X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4KQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwg
U3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90KiBmdW5jdGlvblN0
YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBN
b2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdWludDMyX3QgZnVuY3Rpb25JbmRleCkKIHsKICAgICBM
TEludEdlbmVyYXRvciBsbGludEdlbmVyYXRvcihpbmZvLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1
cmUpOwogICAgIEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiBwYXJzZXIobGxpbnRHZW5l
cmF0b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOwpA
QCAtNDY2LDcgKzUyOCw3IEBAIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxCdWZmZXI+JiB0aHJlYWRT
cGVjaWZpY0J1ZmZlcigpCiAgICAgcmV0dXJuICp0aHJlYWRTcGVjaWZpY0J1ZmZlclB0cjsKIH0K
IAotTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKQorTExJbnRH
ZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKQogICAgIDogQnl0ZWNvZGVHZW5lcmF0
b3JCYXNlKG1ha2VVbmlxdWU8RnVuY3Rpb25Db2RlQmxvY2s+KGZ1bmN0aW9uSW5kZXgpLCAwKQog
ICAgICwgbV9pbmZvKGluZm8pCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkK
QEAgLTQ4NSw5ICs1NDcsMjIgQEAgTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkkKICAgICBXYXNtRW50
ZXI6OmVtaXQodGhpcyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3ZvaWQgTExJ
bnRHZW5lcmF0b3I6OnJlcGF0Y2goY29uc3QgQ2F0Y2hSZXdyaXRlSW5mbyYgaW5mbykKK3sKKyAg
ICBhdXRvIHJlZiA9IG1fd3JpdGVyLnJlZihpbmZvLm1faW5zdHJ1Y3Rpb25PZmZzZXQpOworICAg
IE9wY29kZSogaW5zdHJ1Y3Rpb24gPSByZWYtPmNhc3Q8T3Bjb2RlLCBXYXNtT3Bjb2RlVHJhaXRz
PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBleGNlcHRpb25SZWdpc3RlciA9IHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKG1fbWF4U3RhY2tTaXplICsgaW5mby5tX3RyeURlcHRoIC0gMSk7CisgICAg
aW5zdHJ1Y3Rpb24tPnNldEV4Y2VwdGlvbihleGNlcHRpb25SZWdpc3RlciwgW10oKSB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICB9KTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiBMTEludEdlbmVyYXRvcjo6ZmluYWxpemUoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1f
Y29kZUJsb2NrKTsKKwogICAgIHNpemVfdCBudW1DYWxsZWVMb2NhbHMgPSBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgbV9tYXhTdGFja1NpemUpOwog
ICAgIG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxvY2FscyA9IG51bUNhbGxlZUxvY2FsczsKICAg
ICBSRUxFQVNFX0FTU0VSVChudW1DYWxsZWVMb2NhbHMgPT0gbV9jb2RlQmxvY2stPm1fbnVtQ2Fs
bGVlTG9jYWxzKTsKQEAgLTUwMCw2ICs1NzUsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25D
b2RlQmxvY2s+IExMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSgpCiAgICAgUkVMRUFTRV9BU1NFUlQo
dXNlZEJ1ZmZlci5jYXBhY2l0eSgpID09IG9sZENhcGFjaXR5KTsKICAgICAqdGhyZWFkU3BlY2lm
aWMgPSBXVEZNb3ZlKHVzZWRCdWZmZXIpOwogCisgICAgaWYgKCFtX3VzZXNFeGNlcHRpb25zKQor
ICAgICAgICBtX2luZm8ubV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrU2V0KG1f
ZnVuY3Rpb25JbmRleCk7CisKICAgICByZXR1cm4gV1RGTW92ZShtX2NvZGVCbG9jayk7CiB9CiAK
QEAgLTU4MCw3ICs2NTgsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25G
b3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IExMSQogCiAgICAgLy8gRklY
TUU6IHdlIGFyZSBhbGxvY2F0aW5nIHRoZSBleHRyYSBzcGFjZSBmb3IgdGhlIGFyZ3VtZW50L3Jl
dHVybiBjb3VudCBpbiBvcmRlciB0byBhdm9pZCBpbnRlcmZlcmVuY2UsIGJ1dCB3ZSBjb3VsZCBk
byBiZXR0ZXIKICAgICAvLyBOT1RFOiBXZSBpbmNyZWFzZSBhcmcgY291bnQgYnkgMSBmb3IgdGhl
IGNhc2Ugb2YgaW5kaXJlY3QgY2FsbHMKLSAgICBtX3N0YWNrU2l6ZSArPSBzdGQ6Om1heChzaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpICsgMSwgc2lnbmF0dXJlLnJldHVybkNvdW50KCkpICsgZ3By
Q291bnQgKyBmcHJDb3VudCArIHN0YWNrQ291bnQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVyczsKKyAgICBtX3N0YWNrU2l6ZSArPSBzdGQ6Om1heChzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpICsgMSwgc2lnbmF0dXJlLnJldHVybkNvdW50KCkpICsgZ3ByQ291bnQgKyBmcHJDb3Vu
dCArIHN0YWNrQ291bnQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIDE7CiAg
ICAgaWYgKG1fc3RhY2tTaXplLnZhbHVlKCkgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKQog
ICAgICAgICArK21fc3RhY2tTaXplOwogICAgIGlmIChtX21heFN0YWNrU2l6ZSA8IG1fc3RhY2tT
aXplKQpAQCAtNTkxLDcgKzY2OSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1h
dGlvbkZvckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAgICAgUmVz
dWx0TGlzdCB0ZW1wb3JhcnlSZXN1bHRzKHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpKTsKIAogICAg
IGNvbnN0IHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gbV9zdGFja1NpemU7Ci0gICAgY29uc3QgdW5z
aWduZWQgYmFzZSA9IHN0YWNrT2Zmc2V0IC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3Rl
cnM7CisgICAgY29uc3QgdW5zaWduZWQgYmFzZSA9IHN0YWNrT2Zmc2V0IC0gQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMgLSAxOwogCiAgICAgY29uc3QgdWludDMyX3QgZ3ByTGltaXQg
PSBiYXNlIC0gc3RhY2tDb3VudCAtIGdwckNvdW50OwogICAgIGNvbnN0IHVpbnQzMl90IGZwckxp
bWl0ID0gZ3ByTGltaXQgLSBmcHJDb3VudDsKQEAgLTY4Myw3ICs3NjEsNyBAQCBhdXRvIExMSW50
R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUpIC0+IFZlYwogCiAgICAgdWludDMyX3QgZ3BySW5kZXggPSAwOwogICAgIHVpbnQzMl90
IGZwckluZGV4ID0gZ3ByQ291bnQ7Ci0gICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7CisgICAg
dWludDMyX3Qgc3RhY2tJbmRleCA9IDE7CiAgICAgY29uc3QgdWludDMyX3QgbWF4R1BSSW5kZXgg
PSBncHJDb3VudDsKICAgICBjb25zdCB1aW50MzJfdCBtYXhGUFJJbmRleCA9IG1heEdQUkluZGV4
ICsgZnByQ291bnQ7CiAKQEAgLTczMSw3ICs4MDksNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjph
ZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQK
ICAgICBjb25zdCB1aW50MzJfdCBtYXhGUFJJbmRleCA9IGdwckNvdW50ICsgZnByQ291bnQ7CiAg
ICAgdWludDMyX3QgZ3BySW5kZXggPSAwOwogICAgIHVpbnQzMl90IGZwckluZGV4ID0gbWF4R1BS
SW5kZXg7Ci0gICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7CisgICAgdWludDMyX3Qgc3RhY2tJ
bmRleCA9IDE7CiAKICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiByZWdpc3RlckFyZ3VtZW50
cyhncHJDb3VudCArIGZwckNvdW50KTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZ3By
Q291bnQgKyBmcHJDb3VudDsgaSsrKQpAQCAtOTA2LDYgKzk4NCw3IEBAIGF1dG8gTExJbnRHZW5l
cmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5n
U3RhY2ssIENvCiAKICAgICBibG9jayA9IENvbnRyb2xUeXBlOjpsb29wKHNpZ25hdHVyZSwgbV9z
dGFja1NpemUsIFdURk1vdmUoYm9keSksIFdURk1vdmUoY29udGludWF0aW9uKSk7CiAKKyAgICBW
ZWN0b3I8dW5zaWduZWQ+IHVucmVzb2x2ZWRPZmZzZXRzOwogICAgIFZlY3RvcjxWaXJ0dWFsUmVn
aXN0ZXI+IG9zckVudHJ5RGF0YTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9jb2Rl
QmxvY2stPm1fbnVtQXJndW1lbnRzOyBpKyspCiAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQo
bV9ub3JtYWxpemVkQXJndW1lbnRzW2ldKTsKQEAgLTkxNiw5ICs5OTUsMTIgQEAgYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNs
b3NpbmdTdGFjaywgQ28KICAgICBmb3IgKHVpbnQzMl90IGkgPSBncHJDb3VudCArIGZwckNvdW50
ICsgbnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnM7IGkgPCBtX2NvZGVCbG9jay0+bV9u
dW1WYXJzOyBpKyspCiAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQodmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwoaSkpOwogICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJv
bEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgp
IHsKKyAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClb
Y29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKICAgICAgICAgU3RhY2smIGV4cHJlc3Npb25TdGFj
ayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVz
c2lvblN0YWNrOwogICAgICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiBleHByZXNzaW9uIDogZXhw
cmVzc2lvblN0YWNrKQogICAgICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZChleHByZXNzaW9u
KTsKKyAgICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpKQorICAgICAgICAg
ICAgb3NyRW50cnlEYXRhLmFwcGVuZChXVEY6OmdldDxDb250cm9sQ2F0Y2g+KGRhdGEpLm1fZXhj
ZXB0aW9uKTsKICAgICB9CiAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gZXhwcmVzc2lvbiA6IGVu
Y2xvc2luZ1N0YWNrKQogICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKGV4cHJlc3Npb24pOwpA
QCAtOTc1LDYgKzEwNTcsMTU5IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVh
Y2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsg
fTsKIH0KIAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlIHNpZ25h
dHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYg
bmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1
ZTsKKyAgICArK21fdHJ5RGVwdGg7CisgICAgaWYgKG1fbWF4VHJ5RGVwdGggPCBtX3RyeURlcHRo
KQorICAgICAgICBtX21heFRyeURlcHRoID0gbV90cnlEZXB0aDsKKworICAgIHNwbGl0U3RhY2so
c2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOworICAgIFJlZjxMYWJlbD4gdHJ5
TGFiZWwgPSBuZXdFbWl0dGVkTGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+IGNvbnRpbnVhdGlvbiA9
IG5ld0xhYmVsKCk7CisgICAgcmVzdWx0ID0gQ29udHJvbFR5cGU6OmNyZWF0ZVRyeShzaWduYXR1
cmUsIG1fc3RhY2tTaXplLCBXVEZNb3ZlKHRyeUxhYmVsKSwgV1RGTW92ZShjb250aW51YXRpb24p
LCBtX3RyeURlcHRoKTsKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIExMSW50R2VuZXJhdG9y
OjpmaW5hbGl6ZVByZXZpb3VzQmxvY2tGb3JDYXRjaChDb250cm9sVHlwZSYgZGF0YSwgU3RhY2sm
IGV4cHJlc3Npb25TdGFjaykKK3sKKyAgICBpZiAoIUNvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRh
dGEpKQorICAgICAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNzaW9uU3Rh
Y2spOworICAgIGVsc2UgeworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChkYXRhLnN0YWNrU2l6
ZSgpKTsKKyAgICAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24mIHZhbHVlIDogZXhwcmVzc2lvblN0
YWNrKSB7CisgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIGRzdCwgdmFsdWUpOworICAg
ICAgICAgICAgdmFsdWUgPSBUeXBlZEV4cHJlc3Npb24geyB2YWx1ZS50eXBlKCksIGRzdCB9Owor
ICAgICAgICAgICAgZHN0IC09IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgV2FzbUptcDo6ZW1p
dCh0aGlzLCBkYXRhLm1fY29udGludWF0aW9uLT5iaW5kKHRoaXMpKTsKK30KKworYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBDb250cm9s
VHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IGZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKGRhdGEsIGV4cHJlc3Npb25TdGFjayk7Cisg
ICAgcmV0dXJuIGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRleCwgZXhjZXB0aW9u
U2lnbmF0dXJlLCBkYXRhLCByZXN1bHRzKTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
Q2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJl
c3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsK
KyAgICBSZWY8TGFiZWw+IGNhdGNoTGFiZWwgPSBuZXdFbWl0dGVkTGFiZWwoKTsKKworICAgIG1f
c3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZXhjZXB0
aW9uID0gcHVzaCgpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xUcnk+
KGRhdGEpKSB7CisgICAgICAgIENvbnRyb2xUcnkmIHRyeURhdGEgPSBXVEY6OmdldDxDb250cm9s
VHJ5PihkYXRhKTsKKyAgICAgICAgZGF0YSA9IENvbnRyb2xUeXBlOjpjcmVhdGVDYXRjaChkYXRh
Lm1fc2lnbmF0dXJlLCBkYXRhLnN0YWNrU2l6ZSgpLCBXVEZNb3ZlKHRyeURhdGEubV90cnkpLCBX
VEZNb3ZlKGRhdGEubV9jb250aW51YXRpb24pLCBjYXRjaExhYmVsLCB0cnlEYXRhLm1fdHJ5RGVw
dGgsIGV4Y2VwdGlvbik7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNl
cHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKHB1c2goKSk7CisKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBX
YXNtQ2F0Y2g6OmVtaXQodGhpcywgZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvbiwgZXhjZXB0aW9u
U2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgcmVzdWx0cy5pc0VtcHR5KCkgPyAwIDogLXJlc3Vs
dHNbMF0ub2Zmc2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgV2FzbUNhdGNoTm9UbHM6OmVtaXQo
dGhpcywgZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvbiwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKSwgcmVzdWx0cy5pc0VtcHR5KCkgPyAwIDogLXJlc3VsdHNbMF0ub2Zmc2V0KCkp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gcmVzdWx0
c1tpXTsKKyAgICAgICAgVHlwZSB0eXBlID0gZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkp
OworICAgICAgICBzd2l0Y2ggKHR5cGUua2luZCkgeworICAgICAgICBjYXNlIFdhc206OlR5cGVL
aW5kOjpGMzI6CisgICAgICAgICAgICBXYXNtRjMyUmVpbnRlcnByZXRJMzI6OmVtaXQodGhpcywg
ZHN0LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6VHlwZUtp
bmQ6OkY2NDoKKyAgICAgICAgICAgIFdhc21GNjRSZWludGVycHJldEk2NDo6ZW1pdCh0aGlzLCBk
c3QsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2lu
ZDo6STMyOgorICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJNjQ6CisgICAgICAgIGNhc2Ug
V2FzbTo6VHlwZUtpbmQ6OkV4dGVybnJlZjoKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6
RnVuY3JlZjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgQ29udHJvbENhdGNoJiBjYXRjaERhdGEgPSBXVEY6OmdldDxD
b250cm9sQ2F0Y2g+KGRhdGEpOworICAgIGNhdGNoRGF0YS5tX2tpbmQgPSBDYXRjaEtpbmQ6OkNh
dGNoOworICAgIG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKHsgSGFuZGxlclR5cGU6
OkNhdGNoLCBjYXRjaERhdGEubV90cnlTdGFydC0+bG9jYXRpb24oKSwgY2F0Y2hEYXRhLm1fdHJ5
RW5kLT5sb2NhdGlvbigpLCBjYXRjaExhYmVsLT5sb2NhdGlvbigpLCBtX3RyeURlcHRoLCBleGNl
cHRpb25JbmRleCB9KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0
b3I6OmFkZENhdGNoQWxsKFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xUeXBlJiBkYXRh
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2go
ZGF0YSwgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBXYXNtSm1wOjplbWl0KHRoaXMsIGRhdGEubV9j
b250aW51YXRpb24tPmJpbmQodGhpcykpOworICAgIHJldHVybiBhZGRDYXRjaEFsbFRvVW5yZWFj
aGFibGUoZGF0YSk7Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhdGNoQWxsVG9VbnJl
YWNoYWJsZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIG1fdXNl
c0V4Y2VwdGlvbnMgPSB0cnVlOworICAgIFJlZjxMYWJlbD4gY2F0Y2hMYWJlbCA9IG5ld0VtaXR0
ZWRMYWJlbCgpOworICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZXhjZXB0aW9uID0gcHVzaCgpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPENvbnRyb2xUcnk+KGRhdGEpKSB7CisgICAgICAgIENvbnRyb2xUcnkmIHRyeURhdGEg
PSBXVEY6OmdldDxDb250cm9sVHJ5PihkYXRhKTsKKyAgICAgICAgZGF0YSA9IENvbnRyb2xUeXBl
OjpjcmVhdGVDYXRjaChkYXRhLm1fc2lnbmF0dXJlLCBkYXRhLnN0YWNrU2l6ZSgpLCBXVEZNb3Zl
KHRyeURhdGEubV90cnkpLCBXVEZNb3ZlKGRhdGEubV9jb250aW51YXRpb24pLCBjYXRjaExhYmVs
LCB0cnlEYXRhLm1fdHJ5RGVwdGgsIGV4Y2VwdGlvbik7CisgICAgfQorICAgIENvbnRyb2xDYXRj
aCYgY2F0Y2hEYXRhID0gV1RGOjpnZXQ8Q29udHJvbENhdGNoPihkYXRhKTsKKyAgICBjYXRjaERh
dGEubV9raW5kID0gQ2F0Y2hLaW5kOjpDYXRjaEFsbDsKKworICAgIGlmIChDb250ZXh0Ojp1c2VG
YXN0VExTKCkpCisgICAgICAgIFdhc21DYXRjaEFsbDo6ZW1pdCh0aGlzLCBleGNlcHRpb24pOwor
ICAgIGVsc2UKKyAgICAgICAgV2FzbUNhdGNoQWxsTm9UbHM6OmVtaXQodGhpcywgZXhjZXB0aW9u
KTsKKworICAgIG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKHsgSGFuZGxlclR5cGU6
OkNhdGNoQWxsLCBjYXRjaERhdGEubV90cnlTdGFydC0+bG9jYXRpb24oKSwgY2F0Y2hEYXRhLm1f
dHJ5RW5kLT5sb2NhdGlvbigpLCBjYXRjaExhYmVsLT5sb2NhdGlvbigpLCBtX3RyeURlcHRoLCAw
IH0pOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZERlbGVn
YXRlKENvbnRyb2xUeXBlJiB0YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmV0dXJuIGFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZSh0YXJnZXQsIGRhdGEp
OworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29u
dHJvbFR5cGUmIHRhcmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICBSZWY8TGFiZWw+IGRlbGVnYXRlTGFi
ZWwgPSBuZXdFbWl0dGVkTGFiZWwoKTsKKworICAgIEFTU0VSVChDb250cm9sVHlwZTo6aXNUcnko
dGFyZ2V0KSB8fCBDb250cm9sVHlwZTo6aXNUb3BMZXZlbCh0YXJnZXQpKTsKKyAgICB1bnNpZ25l
ZCB0YXJnZXREZXB0aCA9IENvbnRyb2xUeXBlOjppc1RyeSh0YXJnZXQpID8gV1RGOjpnZXQ8Q29u
dHJvbFRyeT4odGFyZ2V0KS5tX3RyeURlcHRoIDogMDsKKworICAgIENvbnRyb2xUcnkmIHRyeURh
dGEgPSBXVEY6OmdldDxDb250cm9sVHJ5PihkYXRhKTsKKyAgICBtX2NvZGVCbG9jay0+YWRkRXhj
ZXB0aW9uSGFuZGxlcih7IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSwgdHJ5RGF0YS5tX3RyeS0+bG9j
YXRpb24oKSwgZGVsZWdhdGVMYWJlbC0+bG9jYXRpb24oKSwgMCwgbV90cnlEZXB0aCwgdGFyZ2V0
RGVwdGggfSk7CisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIHJldHVybiB7IH07Cit9CisK
K2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGFy
Z3MsIFsmXShWaXJ0dWFsUmVnaXN0ZXImIGFyZywgVmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsKKyAg
ICAgICAgaWYgKGFyZyA9PSBzbG90KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBXYXNt
TW92OjplbWl0KHRoaXMsIHNsb3QsIGFyZyk7CisgICAgICAgIGFyZyA9IHNsb3Q7CisgICAgfSk7
CisgICAgV2FzbVRocm93OjplbWl0KHRoaXMsIGV4Y2VwdGlvbkluZGV4LCBhcmdzLmlzRW1wdHko
KSA/IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKDApIDogYXJnc1swXSk7CisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJv
bFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0g
dHJ1ZTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQ2F0Y2g+KGRh
dGEpKTsKKyAgICBDb250cm9sQ2F0Y2ggY2F0Y2hEYXRhID0gV1RGOjpnZXQ8Q29udHJvbENhdGNo
PihkYXRhKTsKKyAgICBXYXNtUmV0aHJvdzo6ZW1pdCh0aGlzLCBjYXRjaERhdGEubV9leGNlcHRp
b24pOworICAgIHJldHVybiB7IH07Cit9CisKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJldHVy
bihjb25zdCBDb250cm9sVHlwZSYgZGF0YSwgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlh
bFJlc3VsdAogewogICAgIGlmICghZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSkgewpA
QCAtMTA0OSwxOSArMTI4NCwyNSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjplbmRCbG9jayhDb250
cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYQogewogICAgIC8v
IEZJWE1FOiBXZSBvbmx5IG5lZWQgdG8gbWF0ZXJpYWxpemUgY29uc3RhbnRzIGhlcmUgaWYgdGhl
cmUgZXhpc3RzIGEganVtcCB0byB0aGlzIGxhYmVsCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzY1NwotICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5k
TG9jYWxzKGV4cHJlc3Npb25TdGFjayk7CisgICAgZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0
Y2goZW50cnkuY29udHJvbERhdGEsIGV4cHJlc3Npb25TdGFjayk7CiAgICAgcmV0dXJuIGFkZEVu
ZFRvVW5yZWFjaGFibGUoZW50cnksIGV4cHJlc3Npb25TdGFjaywgZmFsc2UpOwogfQogCiAKLWF1
dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRy
eSwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgYm9vbCB1bnJlYWNoYWJsZSkgLT4gUGFy
dGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250
cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBib29sIHVucmVhY2hhYmxl
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBlbnRyeS5jb250
cm9sRGF0YTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKHVucmVhY2hhYmxlIHx8IG1fc3RhY2tTaXpl
ID09IGRhdGEuc3RhY2tTaXplKCkgKyBkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKTsK
KyAgICB1bnNpZ25lZCBzdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOworICAgIGlmIChDb250
cm9sVHlwZTo6aXNBbnlDYXRjaChlbnRyeS5jb250cm9sRGF0YSkpCisgICAgICAgICsrc3RhY2tT
aXplOyAvLyBBY2NvdW50IGZvciB0aGUgY2F1Z2h0IGV4Y2VwdGlvbgorICAgIFJFTEVBU0VfQVNT
RVJUKHVucmVhY2hhYmxlIHx8IG1fc3RhY2tTaXplID09ICBzdGFja1NpemUgKyBkYXRhLm1fc2ln
bmF0dXJlLT5yZXR1cm5Db3VudCgpKTsKIAogICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1Np
emUoKTsKIAorICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkgfHwgV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxDb250cm9sQ2F0Y2g+KGRhdGEpKQorICAgICAgICAtLW1fdHJ5RGVwdGg7CisK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291
bnQoKTsgKytpKSB7CiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG8gYSBjb25zaXN0ZW5j
eSBjaGVjayBoZXJlIGJlY2F1c2Ugd2UganVzdCByZXNldCB0aGUgc3RhY2sgc2l6ZQogICAgICAg
ICAvLyBhcmUgcHVzaGluZyBuZXcgdmFsdWVzLCB3aGlsZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHNh
bWUgdmFsdWVzIGluIHRoZSBzdGFjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxMSW50R2VuZXJhdG9yLmgKaW5kZXggOGExNjAzODI2YzEwMGViZmYwOGEwMzA2ZjYyZWQx
OTdiYmNlZmY1Yi4uYzAxMmZiMWVlNzE0YWY5ODIzZGEyNmM2YzM0ZDhhYjc3MmViNDU1MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKQEAg
LTM2LDcgKzM2LDcgQEAgY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBTaWduYXR1cmU7
CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxG
dW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3Qg
dWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxG
dW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3Qg
dWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgTW9kdWxlSW5mb3JtYXRpb24mLCB1
aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oCmluZGV4IGNmOGI0NDYwMzY4MTEy
M2VjYzI1Y2ZjMzcyNDk4YjVmNWI1OGM5ODYuLmY4ZjA1M2I1ODYwZTdkZjk3ZGI0NDY0YWEwZWEx
NzQ4ZDliODdmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21M
aW1pdHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmgKQEAg
LTQxLDYgKzQxLDcgQEAgY29uc3RleHByIHNpemVfdCBtYXhUeXBlcyA9IDEwMDAwMDA7CiBjb25z
dGV4cHIgc2l6ZV90IG1heEZ1bmN0aW9ucyA9IDEwMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1h
eEltcG9ydHMgPSAxMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEV4cG9ydHMgPSAxMDAwMDA7
Citjb25zdGV4cHIgc2l6ZV90IG1heEV4Y2VwdGlvbnMgPSAxMDAwMDA7CiBjb25zdGV4cHIgc2l6
ZV90IG1heEdsb2JhbHMgPSAxMDAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhEYXRhU2VnbWVu
dHMgPSAxMDAwMDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlSW5mb3JtYXRpb24uY3BwCmluZGV4IDM1NDkxY2ZlNTQxMDU3M2FiZDM1YmEzOWI3NTYw
N2Q4NmMyNjhkYjYuLmM2ZThiOGM3ZmViOWNjMjA4ZWIyNzk2ZWE3ZjJhNDIwNGQ0MDc2NzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlv
bi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0
aW9uLmNwcApAQCAtMzYsNiArMzYsNyBAQCBNb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3Jt
YXRpb24oKQogICAgIDogbmFtZVNlY3Rpb24oTmFtZVNlY3Rpb246OmNyZWF0ZSgpKQogewogfQor
CiBNb2R1bGVJbmZvcm1hdGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKCkgeyB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVJbmZvcm1hdGlvbi5oCmluZGV4IGEyYjBmODM2Yzg5YzIwZWVlMjRiOWFiMzRiZTEw
MWMyODUxNDAzNTIuLjMyOGM2YmNhNmJmYTY2MmI1M2U5YzhjOGRhOWFjYjE4ZjUwNDRhYzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlv
bi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlv
bi5oCkBAIC01OCw4ICs1OCwyMiBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICAgICAgICAgIDog
aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleCAtIGltcG9ydEZ1
bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCldOwogICAgIH0KIAorICAgIHNpemVfdCBleGNl
cHRpb25JbmRleFNwYWNlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEV4Y2VwdGlvblNpZ25h
dHVyZUluZGljZXMuc2l6ZSgpICsgaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNp
emUoKTsgfQorICAgIGJvb2wgaXNJbXBvcnRlZEV4Y2VwdGlvbkZyb21FeGNlcHRpb25JbmRleFNw
YWNlKHNpemVfdCBleGNlcHRpb25JbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChl
eGNlcHRpb25JbmRleCA8IGV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCkpOworICAgICAgICByZXR1
cm4gZXhjZXB0aW9uSW5kZXggPCBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUo
KTsKKyAgICB9CisgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9u
SW5kZXhTcGFjZShzaXplX3QgZXhjZXB0aW9uSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaXNJbXBvcnRlZEV4Y2VwdGlvbkZyb21FeGNlcHRpb25JbmRleFNwYWNlKGV4Y2VwdGlv
bkluZGV4KQorICAgICAgICAgICAgPyBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzW2V4
Y2VwdGlvbkluZGV4XQorICAgICAgICAgICAgOiBpbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUlu
ZGljZXNbZXhjZXB0aW9uSW5kZXggLSBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNp
emUoKV07CisgICAgfQorCiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0
IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KICAgICB1
aW50MzJfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1
bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbXBvcnRFeGNl
cHRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGlj
ZXMuc2l6ZSgpOyB9CiAKICAgICAvLyBDdXJyZW50bHksIG91ciB3YXNtIGltcGxlbWVudGF0aW9u
IGFsbG93cyBvbmx5IG9uZSBtZW1vcnkgYW5kIHRhYmxlLgogICAgIC8vIElmIHdlIG5lZWQgdG8g
cmVtb3ZlIHRoaXMgbGltaXRhdGlvbiwgd2Ugd291bGQgaGF2ZSBNZW1vcnlJbmZvcm1hdGlvbiBh
bmQgVGFibGVJbmZvcm1hdGlvbiBpbiB0aGUgVmVjdG9ycy4KQEAgLTc2LDkgKzkwLDE0IEBAIHN0
cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1
bGVJbmZvcm1hdGlvbj4gewogICAgIGJvb2wgaXNEZWNsYXJlZEZ1bmN0aW9uKHVpbnQzMl90IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2RlY2xhcmVkRnVuY3Rpb25zLmNvbnRhaW5zKGluZGV4KTsg
fQogICAgIHZvaWQgYWRkRGVjbGFyZWRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkgeyBtX2RlY2xh
cmVkRnVuY3Rpb25zLnNldChpbmRleCk7IH0KIAorICAgIGJvb2wgaXNEZWNsYXJlZEV4Y2VwdGlv
bih1aW50MzJfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9kZWNsYXJlZEV4Y2VwdGlvbnMuY29u
dGFpbnMoaW5kZXgpOyB9CisgICAgdm9pZCBhZGREZWNsYXJlZEV4Y2VwdGlvbih1aW50MzJfdCBp
bmRleCkgeyBtX2RlY2xhcmVkRXhjZXB0aW9ucy5zZXQoaW5kZXgpOyB9CisKICAgICBWZWN0b3I8
SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW1wb3J0RnVuY3Rp
b25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW50ZXJuYWxG
dW5jdGlvblNpZ25hdHVyZUluZGljZXM7CisgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbXBv
cnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzOworICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4g
aW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxSZWY8U2lnbmF0
dXJlPj4gdXNlZFNpZ25hdHVyZXM7CiAKICAgICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1vcnk7CkBA
IC05OCw2ICsxMTcsOCBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICB1aW50MzJfdCBudW1iZXJP
ZkRhdGFTZWdtZW50cyB7IDAgfTsKIAogICAgIEJpdFZlY3RvciBtX2RlY2xhcmVkRnVuY3Rpb25z
OworICAgIEJpdFZlY3RvciBtX2RlY2xhcmVkRXhjZXB0aW9uczsKKyAgICBCaXRWZWN0b3IgbV9m
dW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zOwogICAgIG11dGFibGUgQml0VmVjdG9yIG1fcmVm
ZXJlbmNlZEZ1bmN0aW9uczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKaW5kZXggMGQ0MzM4ZDY1OTIxMzIyZjAy
ODBkZWY2OWQ1ODM2MTZiNDlkNjFjYi4uNjEwMzE2MWMxYzJmMDI0YzI5NGMwZmUxNTQwZmViYzc1
MmI5ZGRjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9N
R0Zvck9TUkVudHJ5UGxhbi5jcHAKQEAgLTkxLDE2ICs5MSwyMCBAQCB2b2lkIE9NR0Zvck9TUkVu
dHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorICAgIEludGVybmFsRnVuY3Rpb24qIGludGVybmFsRnVuY3Rpb24gPSBwYXJzZUFuZENvbXBp
bGVSZXN1bHQtPmdldCgpOworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPj4gZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhj
ZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBpbnRlcm5h
bEZ1bmN0aW9uLCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKKwogICAgIG9tZ0VudHJ5cG9pbnQuY29t
cGlsYXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfV0FT
TV9DT0RFX0ZPUl9NT0RFKENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBsaW5r
QnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9NR0Zvck9TUkVudHJ5
IGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9T
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbklu
ZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25J
bmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndh
c21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogCi0gICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZl
UmVnaXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+ZW50cnlw
b2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVS
ZWdpc3RlcnMgPSBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyk7CiAKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUt
PmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKLSAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNh
bGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50
KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+
Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9v
cEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKKyAgICBSZWY8T01HRm9yT1NSRW50cnlD
YWxsZWU+IGNhbGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdF
bnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1l
U2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUsIG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKGludGVybmFs
RnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9u
SGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKICAgICB7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1
bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxl
ZS5wdHIoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoaW50ZXJu
YWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxl
ZS5wdHIoKSkpOwogCiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NvZGVCbG9jay0+bV9sb2Nr
IH07CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRl
cygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxh
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKaW5kZXgg
NWU3OWYxYmM5ODVjNjVkNWNiYmFmODc4NGJkYjQ4OTBkYzhlNjI1MC4uZjhlZTAwMDgwODk5ZGM2
YWE1NjViMjJhZDkzM2M5M2QzNGFhMmJlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PTUdQbGFuLmNwcApAQCAtODgsMTcgKzg4LDIxIEBAIHZvaWQgT01HUGxhbjo6d29yayhD
b21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIEludGVybmFs
RnVuY3Rpb24qIGludGVybmFsRnVuY3Rpb24gPSBwYXJzZUFuZENvbXBpbGVSZXN1bHQtPmdldCgp
OworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4g
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxv
Y2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb250
ZXh0LCBsaW5rQnVmZmVyKTsKKwogICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtl
VW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfV0FTTV9DT0RFX0ZPUl9NT0RF
KENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbGlua0J1ZmZlciwgSklUQ29tcGlsYXRpb25QdHJU
YWcsICJXZWJBc3NlbWJseSBPTUcgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9u
SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKElu
ZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNl
Y3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAg
ICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAKLSAgICBvbWdF
bnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJl
c3VsdC52YWx1ZSgpLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgIG9tZ0Vu
dHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+
ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgewogICAgICAgICBBU1NFUlQo
bV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKLSAg
ICAgICAgUmVmPE9NR0NhbGxlZT4gY2FsbGVlID0gT01HQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShv
bWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5u
YW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodW5saW5rZWRDYWxs
cykpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIocGFyc2VBbmRDb21w
aWxlUmVzdWx0LnZhbHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2Fz
bShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAgUmVmPE9NR0NhbGxlZT4gY2FsbGVlID0gT01HQ2Fs
bGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBt
X21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSks
IFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+c3RhY2tt
YXBzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1v
dmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaFBvaW50ZXIoaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxs
ZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwogICAgICAgICBBU1NFUlQoIW1fY29kZUJs
b2NrLT5tX29tZ0NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSk7CiAgICAgICAgIGVudHJ5cG9pbnQg
PSBjYWxsZWUtPmVudHJ5cG9pbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9TUkVudHJ5RGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9TUkVudHJ5RGF0YS5oCmluZGV4IGQ0MWVkNzkzMmIzMGU5YWEwYWU4NzYzYmE4MmE2MTJj
YWY3ZTY0OGIuLmQ5M2YzNDJjZTY0MmQyYzY2MzlmNjkwNjU5ZTZhMjViM2EwYTc4MjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeURhdGEuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlEYXRhLmgKQEAgLTI3LDgg
KzI3LDggQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKIAorI2luY2x1ZGUgIkIz
VHlwZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKLSNpbmNsdWRlICJXYXNtRm9ybWF0Lmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewpAQCAtNDcsNiArNDcsOSBAQCBwcml2YXRlOgogICAgIEIzOjpUeXBlIG1fdHlwZTsKIH07
CiAKK3VzaW5nIFN0YWNrTWFwID0gVmVjdG9yPE9TUkVudHJ5VmFsdWU+OwordXNpbmcgU3RhY2tN
YXBzID0gSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBTdGFja01hcD47CisKIGNsYXNzIE9TUkVudHJ5
RGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT1NSRW50cnlEYXRhKTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTU5LDEyICs2MiwxMiBAQCBwdWJsaWM6CiAKICAgICB1
aW50MzJfdCBmdW5jdGlvbkluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbkluZGV4OyB9
CiAgICAgdWludDMyX3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9sb29wSW5kZXg7IH0K
LSAgICBWZWN0b3I8T1NSRW50cnlWYWx1ZT4mIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9
CisgICAgU3RhY2tNYXAmIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAKIHByaXZhdGU6
CiAgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4OwogICAgIHVpbnQzMl90IG1fbG9vcEluZGV4
OwotICAgIFZlY3RvcjxPU1JFbnRyeVZhbHVlPiBtX3ZhbHVlczsKKyAgICBTdGFja01hcCBtX3Zh
bHVlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggODViNDI0ZmIxODQ4OTMwOGRm
MjdmOWE2MTdlN2Y3MzBmNjNlMjU2OS4uZGFiYWVlN2ViODJkNzFiZGRiMTI5N2MwMWIzZTNmZWRh
NTNkNzc4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJh
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25z
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCiAjaW5j
bHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdElubGlu
ZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCkBAIC0xMDUsMjQgKzEwNiwx
MCBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21waWxlKFRpZXJVcENvdW50
JiB0aWVyVXAsIE9NR0NhbGxlZSogcmVwbGFjZQogICAgIH0KIH0KIAotU1VQUFJFU1NfQVNBTgot
c3RhdGljIHZvaWQgZG9PU1JFbnRyeShJbnN0YW5jZSogaW5zdGFuY2UsIFByb2JlOjpDb250ZXh0
JiBjb250ZXh0LCBCQlFDYWxsZWUmIGNhbGxlZSwgT01HRm9yT1NSRW50cnlDYWxsZWUmIG9zckVu
dHJ5Q2FsbGVlLCBPU1JFbnRyeURhdGEmIG9zckVudHJ5RGF0YSkKK3ZvaWQgbG9hZFZhbHVlc0lu
dG9CdWZmZXIoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0YWNrTWFwJiB2YWx1ZXMs
IHVpbnQ2NF90KiBidWZmZXIpCiB7Ci0gICAgYXV0byByZXR1cm5XaXRob3V0T1NSRW50cnkgPSBb
Jl0gewotICAgICAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0gMDsKLSAg
ICB9OwotCi0gICAgUkVMRUFTRV9BU1NFUlQob3NyRW50cnlDYWxsZWUub3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSgpID09IG9zckVudHJ5RGF0YS52YWx1ZXMoKS5zaXplKCkpOwotCi0gICAgdWlu
dDY0X3QqIGJ1ZmZlciA9IGluc3RhbmNlLT5jb250ZXh0KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXpl
KG9zckVudHJ5Q2FsbGVlLm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSk7Ci0gICAgaWYgKCFi
dWZmZXIpCi0gICAgICAgIHJldHVybiByZXR1cm5XaXRob3V0T1NSRW50cnkoKTsKLQotICAgIGRh
dGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgb3NyRW50cnlEYXRhLmZ1bmN0aW9uSW5k
ZXgoKSwgIjpPTUcgT1NSIGVudHJ5OiBnb3QgZW50cnkgY2FsbGVlICIsIFJhd1BvaW50ZXIoJm9z
ckVudHJ5Q2FsbGVlKSk7Ci0KLSAgICAvLyAxLiBQbGFjZSByZXF1aXJlZCB2YWx1ZXMgaW4gc2Ny
YXRjaCBidWZmZXIuCi0gICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgb3NyRW50
cnlEYXRhLnZhbHVlcygpLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBPU1JFbnRy
eVZhbHVlJiB2YWx1ZSA9IG9zckVudHJ5RGF0YS52YWx1ZXMoKVtpbmRleF07CisgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWVzLnNpemUoKTsgKytpbmRleCkgeworICAg
ICAgICBjb25zdCBPU1JFbnRyeVZhbHVlJiB2YWx1ZSA9IHZhbHVlc1tpbmRleF07CiAgICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9NRyBPU1IgZW50cnkgdmFsdWVz
WyIsIGluZGV4LCAiXSAiLCB2YWx1ZS50eXBlKCksICIgIiwgdmFsdWUpOwogICAgICAgICBpZiAo
dmFsdWUuaXNHUFIoKSkgewogICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKCkua2luZCgp
KSB7CkBAIC0xNjQsMjEgKzE1MSwyOCBAQCBzdGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNl
KiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgYwogICAgICAg
ICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihidWZmZXIgKyBpbmRleCkgPSAqYml0
d2lzZV9jYXN0PHVpbnQ2NF90Kj4oYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb250ZXh0LmZwKCkp
ICsgdmFsdWUub2Zmc2V0RnJvbUZQKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzU3RhY2tBcmd1bWVudCgpKSB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUoKS5raW5kKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgQjM6OkZsb2F0OgotICAgICAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8ZmxvYXQqPihidWZm
ZXIgKyBpbmRleCkgPSAqYml0d2lzZV9jYXN0PGZsb2F0Kj4oYml0d2lzZV9jYXN0PHVpbnQ4X3Qq
Pihjb250ZXh0LnNwKCkpICsgdmFsdWUub2Zmc2V0RnJvbVNQKCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCMzo6RG91YmxlOgotICAgICAgICAgICAgICAgICpi
aXR3aXNlX2Nhc3Q8ZG91YmxlKj4oYnVmZmVyICsgaW5kZXgpID0gKmJpdHdpc2VfY2FzdDxkb3Vi
bGUqPihiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGNvbnRleHQuc3AoKSkgKyB2YWx1ZS5vZmZzZXRG
cm9tU1AoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihidWZmZXIgKyBpbmRleCkg
PSAqYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb250ZXh0
LnNwKCkpICsgdmFsdWUub2Zmc2V0RnJvbVNQKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQorfQorCitTVVBQUkVTU19BU0FOCitzdGF0aWMgdm9pZCBk
b09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJC
UUNhbGxlZSYgY2FsbGVlLCBPTUdGb3JPU1JFbnRyeUNhbGxlZSYgb3NyRW50cnlDYWxsZWUsIE9T
UkVudHJ5RGF0YSYgb3NyRW50cnlEYXRhKQoreworICAgIGF1dG8gcmV0dXJuV2l0aG91dE9TUkVu
dHJ5ID0gWyZdIHsKKyAgICAgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSA9
IDA7CisgICAgfTsKKworICAgIFJFTEVBU0VfQVNTRVJUKG9zckVudHJ5Q2FsbGVlLm9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUoKSA9PSBvc3JFbnRyeURhdGEudmFsdWVzKCkuc2l6ZSgpKTsKKwor
ICAgIHVpbnQ2NF90KiBidWZmZXIgPSBpbnN0YW5jZS0+Y29udGV4dCgpLT5zY3JhdGNoQnVmZmVy
Rm9yU2l6ZShvc3JFbnRyeUNhbGxlZS5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkpOworICAg
IGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gcmV0dXJuV2l0aG91dE9TUkVudHJ5KCk7CisK
KyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIG9zckVudHJ5RGF0YS5mdW5j
dGlvbkluZGV4KCksICI6T01HIE9TUiBlbnRyeTogZ290IGVudHJ5IGNhbGxlZSAiLCBSYXdQb2lu
dGVyKCZvc3JFbnRyeUNhbGxlZSkpOworCisgICAgLy8gMS4gUGxhY2UgcmVxdWlyZWQgdmFsdWVz
IGluIHNjcmF0Y2ggYnVmZmVyLgorICAgIGxvYWRWYWx1ZXNJbnRvQnVmZmVyKGNvbnRleHQsIG9z
ckVudHJ5RGF0YS52YWx1ZXMoKSwgYnVmZmVyKTsKIAogICAgIC8vIDIuIFJlc3RvcmUgY2FsbGVl
IHNhdmVzLgogICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJT
ZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CkBAIC02NTgsMTIgKzY1MiwxMiBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uR3Jvd01lbW9yeSwgaW50MzJfdCwgKHZvaWQqIGNhbGxGcmFt
ZSwgSW5zdGFuYwogICAgIHJldHVybiBncm93bi52YWx1ZSgpLnBhZ2VDb3VudCgpOwogfQogCi1K
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUZpbGwsIGJvb2wsIChJ
bnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHRhcmdldFZh
bHVlLCB1aW50MzJfdCBjb3VudCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
V2FzbU1lbW9yeUZpbGwsIHNpemVfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZHN0
QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFsdWUsIHVpbnQzMl90IGNvdW50KSkKIHsKICAgICBy
ZXR1cm4gaW5zdGFuY2UtPm1lbW9yeSgpLT5maWxsKGRzdEFkZHJlc3MsIHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHRhcmdldFZhbHVlKSwgY291bnQpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uV2FzbU1lbW9yeUNvcHksIGJvb2wsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVp
bnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGNvdW50KSkK
K0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSwgc2l6ZV90
LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNB
ZGRyZXNzLCB1aW50MzJfdCBjb3VudCkpCiB7CiAgICAgcmV0dXJuIGluc3RhbmNlLT5tZW1vcnko
KS0+Y29weShkc3RBZGRyZXNzLCBzcmNBZGRyZXNzLCBjb3VudCk7CiB9CkBAIC03MTEsMTIgKzcw
NSwxMiBAQCBzdGF0aWMgYm9vbCBzZXRXYXNtVGFibGVFbGVtZW50KEluc3RhbmNlKiBpbnN0YW5j
ZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyXwogICAgIHJldHVybiB0cnVlOwogfQogCi1K
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxlbWVudCwgYm9v
bCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3Qgc2ln
bmVkSW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY1ZhbHVlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25TZXRXYXNtVGFibGVFbGVtZW50LCBzaXplX3QsIChJbnN0YW5jZSogaW5z
dGFuY2UsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IHNpZ25lZEluZGV4LCBFbmNvZGVk
SlNWYWx1ZSBlbmNWYWx1ZSkpCiB7CiAgICAgcmV0dXJuIHNldFdhc21UYWJsZUVsZW1lbnQoaW5z
dGFuY2UsIHRhYmxlSW5kZXgsIHNpZ25lZEluZGV4LCBlbmNWYWx1ZSk7CiB9CiAKLUpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVJbml0LCBib29sLCAoSW5zdGFuY2Uq
IGluc3RhbmNlLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVp
bnQzMl90IGRzdE9mZnNldCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKQor
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUluaXQsIHNpemVfdCwg
KEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCB0YWJs
ZUluZGV4LCB1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY09mZnNldCwgdWludDMyX3Qg
bGVuZ3RoKSkKIHsKICAgICBBU1NFUlQoZWxlbWVudEluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgp
Lm1vZHVsZUluZm9ybWF0aW9uKCkuZWxlbWVudENvdW50KCkpOwogICAgIEFTU0VSVCh0YWJsZUlu
ZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgp
KTsKQEAgLTc2MSw3ICs3NTUsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
V2FzbVRhYmxlR3JvdywgaW50MzJfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdQogICAgIHJldHVy
biBvbGRTaXplOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRh
YmxlRmlsbCwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwg
dWludDMyX3Qgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSBmaWxsLCB1aW50MzJfdCBjb3VudCkpCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwgc2l6ZV90LCAo
SW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBvZmZzZXQs
IEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50KSkKIHsKICAgICBBU1NFUlQodGFi
bGVJbmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291
bnQoKSk7CiAKQEAgLTc3Nyw3ICs3NzEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uV2FzbVRhYmxlRmlsbCwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaQogICAg
IHJldHVybiB0cnVlOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bVRhYmxlQ29weSwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZHN0VGFibGVJ
bmRleCwgdW5zaWduZWQgc3JjVGFibGVJbmRleCwgaW50MzJfdCBkc3RPZmZzZXQsIGludDMyX3Qg
c3JjT2Zmc2V0LCBpbnQzMl90IGxlbmd0aCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uV2FzbVRhYmxlQ29weSwgc2l6ZV90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25l
ZCBkc3RUYWJsZUluZGV4LCB1bnNpZ25lZCBzcmNUYWJsZUluZGV4LCBpbnQzMl90IGRzdE9mZnNl
dCwgaW50MzJfdCBzcmNPZmZzZXQsIGludDMyX3QgbGVuZ3RoKSkKIHsKICAgICBBU1NFUlQoZHN0
VGFibGVJbmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxl
Q291bnQoKSk7CiAgICAgQVNTRVJUKHNyY1RhYmxlSW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCku
bW9kdWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50KCkpOwpAQCAtOTA0LDcgKzg5OCw3IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNOb3RpZnksIGludDMy
X3QsIChJbnN0YW5jZSogaW5zdGFuCiAgICAgcmV0dXJuIFBhcmtpbmdMb3Q6OnVucGFya0NvdW50
KHBvaW50ZXIsIGNvdW50KTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bldhc21NZW1vcnlJbml0LCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBkYXRh
U2VnbWVudEluZGV4LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1
aW50MzJfdCBsZW5ndGgpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21N
ZW1vcnlJbml0LCBzaXplX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGRhdGFTZWdt
ZW50SW5kZXgsIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQz
Ml90IGxlbmd0aCkpCiB7CiAgICAgQVNTRVJUKGRhdGFTZWdtZW50SW5kZXggPCBpbnN0YW5jZS0+
bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS5kYXRhU2VnbWVudHNDb3VudCgpKTsKICAgICBy
ZXR1cm4gaW5zdGFuY2UtPm1lbW9yeUluaXQoZHN0QWRkcmVzcywgc3JjQWRkcmVzcywgbGVuZ3Ro
LCBkYXRhU2VnbWVudEluZGV4KTsKQEAgLTkxNiw2ICs5MTAsNjUgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbldhc21EYXRhRHJvcCwgdm9pZCwgKEluc3RhbmNlKiBpbnN0YW5j
ZSwgdW5zaWcKICAgICBpbnN0YW5jZS0+ZGF0YURyb3AoZGF0YVNlZ21lbnRJbmRleCk7CiB9CiAK
K0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGhyb3csIHZvaWQqLCAoSW5z
dGFuY2UqIGluc3RhbmNlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQgZXhjZXB0aW9u
SW5kZXgsIEVuY29kZWRKU1ZhbHVlKiBhcmd1bWVudHMpKQoreworICAgIGluc3RhbmNlLT5zdG9y
ZVRvcENhbGxGcmFtZShjYWxsRnJhbWUpOworCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBq
c0luc3RhbmNlID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0
KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcg
PSBpbnN0YW5jZS0+dGFnKGV4Y2VwdGlvbkluZGV4KTsKKworICAgIEZpeGVkVmVjdG9yPHVpbnQ2
NF90PiB2YWx1ZXModGFnLnBhcmFtZXRlckNvdW50KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0YWcucGFyYW1ldGVyQ291bnQoKTsgKytpKQorICAgICAgICB2YWx1ZXNbaV0gPSBh
cmd1bWVudHNbaV07CisKKyAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBleGNlcHRpb24gPSBK
U1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1i
bHlFeGNlcHRpb25TdHJ1Y3R1cmUoKSwgdGFnLCBXVEZNb3ZlKHZhbHVlcykpOworICAgIHRocm93
RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZXhjZXB0aW9uKTsKKworICAgIGdl
bmVyaWNVbndpbmQodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKCEhdm0uY2FsbEZyYW1lRm9y
Q2F0Y2gpOworICAgIEFTU0VSVCghIXZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKKyAgICAv
LyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKKyAgICAvLyBUaGlzIGlzIGEgdG90
YWwgaGFjaywgYnV0IHRoZSBsbGludCAoYm90aCBvcF9jYXRjaCBhbmQgbGxpbnRfaGFuZGxlX3Vu
Y2F1Z2h0X2V4Y2VwdGlvbikKKyAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVlIGZp
ZWxkIHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJlCisg
ICAgLy8gdGhpcyBzaW5jZSBpdCBpcyBjb21waWxlZCB3aXRoIGEgY29uc3RhbnQgVk0gcG9pbnRl
ci4pIFdlIGNvdWxkIG1ha2UgdGhlIGNhbGxpbmcgY29udmVudGlvbgorICAgIC8vIGZvciBleGNl
cHRpb25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lz
dGVyIGJlZm9yZSBqdW1waW5nCisgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3
ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4KKyAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCisgICAgdm0uY2Fs
bGVlRm9yV2FzbUNhdGNoID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKKyAgICBiaXR3aXNlX2Nhc3Q8
dWludDY0X3QqPihjYWxsRnJhbWUpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGpzSW5zdGFuY2UtPm1vZHVsZSgpKTsKKyAg
ICByZXR1cm4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7Cit9CisKK0pTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0aHJvdywgdm9pZCosIChJbnN0YW5jZSogaW5zdGFu
Y2UsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSB0aHJvd25WYWx1ZSkpCit7
CisgICAgaW5zdGFuY2UtPnN0b3JlVG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisKKyAgICBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8SlNXZWJBc3Nl
bWJseUluc3RhbmNlPigpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0lu
c3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICB0
aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIEpTVmFsdWU6OmRlY29kZSh0
aHJvd25WYWx1ZSkpOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1lKTsKKyAgICBB
U1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNTRVJUKCEhdm0udGFyZ2V0TWFj
aGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgYmV0dGVy
OgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9wX2Nh
dGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uKQorICAgIC8vIHJlcXVpcmUg
YSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUgYmFzZWxpbmUg
SklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdp
dGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252
ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRj
aCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAvLyB0byB0aGUg
ZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0
ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJhbWUtPmNhbGxl
ZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8
aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oanNJ
bnN0YW5jZS0+bW9kdWxlKCkpOworICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJv
dzsKK30KKwogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0
aW9uLCB2b2lkKiwgKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5
cGUsIEluc3RhbmNlKiB3YXNtSW5zdGFuY2UpKQogewogICAgIHdhc21JbnN0YW5jZS0+c3RvcmVU
b3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKQEAgLTkzMiw3ICs5ODUsNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24sIHZvaWQqLCAoQ2FsbEZyYW1l
KiBjYWxsRnJhbQogICAgICAgICBpZiAodHlwZSA9PSBFeGNlcHRpb25UeXBlOjpTdGFja092ZXJm
bG93KQogICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFs
T2JqZWN0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVKU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sIFdhc206OmVycm9yTWVzc2FnZUZv
ckV4Y2VwdGlvblR5cGUodHlwZSkpOworICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVKU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sIHR5cGUpOwogICAgICAgICB0aHJv
d0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGVycm9yKTsKICAgICB9CiAKQEAg
LTk0NiwxMCArOTk5LDM0IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNt
VG9KU0V4Y2VwdGlvbiwgdm9pZCosIChDYWxsRnJhbWUqIGNhbGxGcmFtCiAgICAgLy8gZm9yIGV4
Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVn
aXN0ZXIgYmVmb3JlIGp1bXBpbmcKICAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElm
IHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5j
YWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwogICAgIGJpdHdpc2VfY2Fz
dDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVsZSgpKTsKICAg
ICByZXR1cm4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiB9CiAKK0pTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hh
YmxlLCBQb2ludGVyUGFpciwgKEluc3RhbmNlKiBpbnN0YW5jZSkpCit7CisgICAgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBqc0luc3RhbmNlID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZT4oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5j
ZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgUkVMRUFT
RV9BU1NFUlQoISF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKworICAgIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0gdGhyb3dTY29wZS5leGNlcHRpb24oKTsKKyAgICBKU1ZhbHVlIHRocm93blZhbHVl
ID0gZXhjZXB0aW9uLT52YWx1ZSgpOworCisgICAgLy8gV2Ugd2FudCB0byBjbGVhciB0aGUgZXhj
ZXB0aW9uIGhlcmUgcmF0aGVyIHRoYW4gaW4gdGhlIGNhdGNoIHByb2xvZ3VlCisgICAgLy8gSklU
IGNvZGUgYmVjYXVzZSBjbGVhcmluZyBpdCBhbHNvIGVudGFpbHMgY2xlYXJpbmcgYSBiaXQgaW4g
YW4gQXRvbWljCisgICAgLy8gYml0IGZpZWxkIGluIFZNVHJhcHMuCisgICAgdGhyb3dTY29wZS5j
bGVhckV4Y2VwdGlvbigpOworCisgICAgdm9pZCogcGF5bG9hZCA9IG51bGxwdHI7CisgICAgaWYg
KEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIHdhc21FeGNlcHRpb24gPSBqc0R5bmFtaWNDYXN0PEpT
V2ViQXNzZW1ibHlFeGNlcHRpb24qPih2bSwgdGhyb3duVmFsdWUpKQorICAgICAgICBwYXlsb2Fk
ID0gYml0d2lzZV9jYXN0PHZvaWQqPih3YXNtRXhjZXB0aW9uLT5wYXlsb2FkKCkuZGF0YSgpKTsK
KyAgICByZXR1cm4gUG9pbnRlclBhaXIgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFsdWU6OmVu
Y29kZSh0aHJvd25WYWx1ZSkpLCBwYXlsb2FkIH07Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCiAKIElHTk9SRV9XQVJOSU5HU19FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT3BlcmF0aW9ucy5oCmluZGV4IGVlYmU1Yjc2NGJhODk3OGM5NDQyZWI1MTgyODEwODcy
YzY3MjRjYTQuLjVlYzdhNTk0N2NjNzM4YzNiMmI5YmIyNWQ3ZTVhNjA4ZjFiMjZlZDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJTbG93UGF0aFJldHVyblR5
cGUuaCIKICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgorI2luY2x1ZGUgIldhc21PU1JF
bnRyeURhdGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ2LDYgKzQ3LDggQEAgbmFtZXNw
YWNlIFdhc20gewogY2xhc3MgSW5zdGFuY2U7CiBjbGFzcyBTaWduYXR1cmU7CiAKK3ZvaWQgbG9h
ZFZhbHVlc0ludG9CdWZmZXIoUHJvYmU6OkNvbnRleHQmLCBjb25zdCBTdGFja01hcCYsIHVpbnQ2
NF90KiBidWZmZXIpOworCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVHJpZ2dlck9TUkVudHJ5Tm93LCB2b2lkLCAo
UHJvYmU6OkNvbnRleHQmKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldh
c21UcmlnZ2VyVGllclVwTm93LCB2b2lkLCAoSW5zdGFuY2UqLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4KSk7CkBAIC02NiwyNiArNjksMzQgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25XYXNtV3JpdGVCYXJyaWVyU2xvd1BhdGgsIHZvaWQsIChKU0NlbGwqLCBWTSoKIEpTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUG9wY291bnQzMiwgdWludDMyX3QsIChpbnQz
Ml90KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblBvcGNvdW50NjQsIHVp
bnQ2NF90LCAoaW50NjRfdCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25H
cm93TWVtb3J5LCBpbnQzMl90LCAodm9pZCosIEluc3RhbmNlKiwgaW50MzJfdCkpOwotSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5RmlsbCwgYm9vbCwgKEluc3Rh
bmNlKiwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFsdWUsIHVpbnQzMl90
IGNvdW50KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlD
b3B5LCBib29sLCAoSW5zdGFuY2UqLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNB
ZGRyZXNzLCB1aW50MzJfdCBjb3VudCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25XYXNtTWVtb3J5RmlsbCwgc2l6ZV90LCAoSW5zdGFuY2UqLCB1aW50MzJfdCBkc3RBZGRy
ZXNzLCB1aW50MzJfdCB0YXJnZXRWYWx1ZSwgdWludDMyX3QgY291bnQpKTsKK0pTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUNvcHksIHNpemVfdCwgKEluc3RhbmNl
KiwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgY291
bnQpKTsKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXYXNtVGFibGVF
bGVtZW50LCBFbmNvZGVkSlNWYWx1ZSwgKEluc3RhbmNlKiwgdW5zaWduZWQsIGludDMyX3QpKTsK
LUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxlbWVudCwg
Ym9vbCwgKEluc3RhbmNlKiwgdW5zaWduZWQsIHVpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSBlbmNW
YWx1ZSkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25TZXRXYXNtVGFibGVF
bGVtZW50LCBzaXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkLCB1aW50MzJfdCwgRW5jb2RlZEpT
VmFsdWUgZW5jVmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bVJlZkZ1bmMsIEVuY29kZWRKU1ZhbHVlLCAoSW5zdGFuY2UqLCB1aW50MzJfdCkpOwotSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVJbml0LCBib29sLCAoSW5zdGFu
Y2UqLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90
IGRzdE9mZnNldCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKTsKK0pTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlSW5pdCwgc2l6ZV90LCAoSW5z
dGFuY2UqLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQz
Ml90IGRzdE9mZnNldCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKTsKIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUVsZW1Ecm9wLCB2b2lkLCAoSW5z
dGFuY2UqLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uV2FzbVRhYmxlR3JvdywgaW50MzJfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQs
IEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGRlbHRhKSk7Ci1KU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUZpbGwsIGJvb2wsIChJbnN0YW5jZSosIHVuc2ln
bmVkLCB1aW50MzJfdCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50
KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUNvcHksIGJv
b2wsIChJbnN0YW5jZSosIHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxl
SW5kZXgsIGludDMyX3QgZHN0T2Zmc2V0LCBpbnQzMl90IHNyY09mZnNldCwgaW50MzJfdCBsZW5n
dGgpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwg
c2l6ZV90LCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgdWludDMyX3Qgb2Zmc2V0LCBFbmNvZGVkSlNW
YWx1ZSBmaWxsLCB1aW50MzJfdCBjb3VudCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25XYXNtVGFibGVDb3B5LCBzaXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkIGRzdFRh
YmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsIGludDMyX3QgZHN0T2Zmc2V0LCBpbnQz
Ml90IHNyY09mZnNldCwgaW50MzJfdCBsZW5ndGgpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uR2V0V2FzbVRhYmxlU2l6ZSwgaW50MzJfdCwgKEluc3RhbmNlKiwgdW5zaWdu
ZWQpKTsKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNX
YWl0MzIsIGludDMyX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGJhc2UsIHVuc2ln
bmVkIG9mZnNldCwgdWludDMyX3QgdmFsdWUsIGludDY0X3QgdGltZW91dCkpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNXYWl0NjQsIGludDMyX3QsIChJ
bnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIG9mZnNldCwgdWludDY0
X3QgdmFsdWUsIGludDY0X3QgdGltZW91dCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25NZW1vcnlBdG9taWNOb3RpZnksIGludDMyX3QsIChJbnN0YW5jZSosIHVuc2lnbmVk
LCB1bnNpZ25lZCwgaW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtTWVtb3J5SW5pdCwgYm9vbCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZGF0YVNlZ21lbnRJ
bmRleCwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3Qg
bGVuZ3RoKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlJ
bml0LCBzaXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgsIHVpbnQz
Ml90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGxlbmd0aCkpOwog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtRGF0YURyb3AsIHZvaWQsIChJ
bnN0YW5jZSosIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgpKTsKIAorSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtVGhyb3csIHZvaWQqLCAoSW5zdGFuY2UqLCBDYWxsRnJh
bWUqLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgRW5jb2RlZEpTVmFsdWUqKSk7CitKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZXRocm93LCB2b2lkKiwgKEluc3RhbmNl
KiwgQ2FsbEZyYW1lKiwgRW5jb2RlZEpTVmFsdWUgdGhyb3duVmFsdWUpKTsKKwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbiwgdm9pZCosIChDYWxs
RnJhbWUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBJbnN0YW5jZSopKTsKK3N0cnVjdCBQb2ludGVy
UGFpciB7CisgICAgdm9pZCogZmlyc3Q7CisgICAgdm9pZCogc2Vjb25kOworfTsKK0pTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25J
ZkNhdGNoYWJsZSwgUG9pbnRlclBhaXIsIChJbnN0YW5jZSopKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNlY3Rpb25QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rp
b25QYXJzZXIuY3BwCmluZGV4IDBmOGNjYjdlMmMzYjY0MTE2MzVjZDlmNWIwNDhiMzU2MzIwNWZh
NzQuLmNmZGFmZmRkN2E0MmNjODFlNWJhM2E2MWU0YmFlOGVmNWVjYmQzYmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKQEAgLTkxLDYg
KzkxLDggQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1
bHQKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIs
IGltcG9ydENvdW50LCAiIGdsb2JhbHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3
aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1f
aW5mby0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxs
b2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBG
SVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCiAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUlu
ZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1
cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1F
cyBiZWxvdy4KKyAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCkpCisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0
dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2Nh
dGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0IGV4Y2VwdGlvbiBz
aWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhl
IEZJWE1FcyBiZWxvdy4KIAogICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1w
b3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7CiAgICAgICAgIHVpbnQz
Ml90IG1vZHVsZUxlbjsKQEAgLTE0Miw2ICsxNDQsMjEgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpw
YXJzZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgICAgIG1faW5mby0+Z2xvYmFs
cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsKKyAgICAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0
aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgICAg
ICB1aW50OF90IHRhZ1R5cGU7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVVJbnQ4KHRhZ1R5cGUpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCBl
eGNlcHRpb24ncyB0YWcgdHlwZSIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0
YWdUeXBlLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQgZXhjZXB0aW9uIGhhcyB0YWcgdHlwZSAi
LCB0YWdUeXBlLCAiIGJ1dCB0aGUgb25seSBzdXBwb3J0ZWQgdGFnIHR5cGUgaXMgMCIpOworCisg
ICAgICAgICAgICB1aW50MzJfdCBleGNlcHRpb25TaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4Y2VwdGlvblNpZ25hdHVyZUlu
ZGV4KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBleGNlcHRpb24g
c2lnbmF0dXJlIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRT
dHJpbmcsICInIik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4Y2VwdGlvblNp
Z25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBl
eGNlcHRpb24gc2lnbmF0dXJlIGZvciAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQsICIsIGV4
Y2VwdGlvblNpZ25hdHVyZUluZGV4LCAiIGlzIG91dCBvZiByYW5nZSBvZiAiLCBtX2luZm8tPnVz
ZWRTaWduYXR1cmVzLnNpemUoKSwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmll
bGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAga2luZEluZGV4ID0gbV9pbmZv
LT5pbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCht
X2luZm8tPnVzZWRTaWduYXR1cmVzW2V4Y2VwdGlvblNpZ25hdHVyZUluZGV4XSk7CisgICAgICAg
ICAgICBtX2luZm8tPmltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVja2VkQXBw
ZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIH0KIAogICAgICAgICBtX2luZm8tPmltcG9ydHMudW5jaGVja2VkQXBwZW5kKHsgV1RGTW92
ZShtb2R1bGVTdHJpbmcpLCBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4IH0p
OwpAQCAtMzU4LDYgKzM3NSwxMyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRXhwb3J0KCkg
LT4gUGFydGlhbFJlc3VsdAogICAgICAgICAgICAgICAgIGdsb2JhbC5iaW5kaW5nTW9kZSA9IEds
b2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6RXhjZXB0aW9uOiB7Cisg
ICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4
Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5leGNlcHRpb25J
bmRleFNwYWNlU2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGludmFsaWQgZXhj
ZXB0aW9uIG51bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZXhjZXB0aW9uIGlu
ZGV4IHNwYWNlICIsIG1faW5mby0+ZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSwgIiwgbmFtZWQg
JyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAgbV9pbmZvLT5hZGREZWNsYXJlZEV4
Y2VwdGlvbihraW5kSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAg
ICAgfQogCiAgICAgICAgIG1faW5mby0+ZXhwb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3Zl
KGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4IH0pOwpAQCAtODE3LDYgKzg0MSwyOSBAQCBh
dXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YUNvdW50KCkgLT4gUGFydGlhbFJlc3VsdAogICAg
IHJldHVybiB7IH07CiB9CiAKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VFeGNlcHRpb24oKSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNl
V2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVk
Iik7CisKKyAgICB1aW50MzJfdCBleGNlcHRpb25Db3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihleGNlcHRpb25Db3VudCksICJjYW4ndCBnZXQgRXhjZXB0aW9u
IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhjZXB0aW9uQ291
bnQgPiBtYXhFeGNlcHRpb25zLCAiRXhwb3J0IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIs
IGV4Y2VwdGlvbkNvdW50LCAiIG1heGltdW0gIiwgbWF4RXhjZXB0aW9ucyk7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4Y2VwdGlvbkNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3Vn
aCBtZW1vcnkgZm9yICIsIGV4Y2VwdGlvbkNvdW50LCAiIGV4Y2VwdGlvbnMiKTsKKworICAgIGZv
ciAodWludDMyX3QgZXhjZXB0aW9uTnVtYmVyID0gMDsgZXhjZXB0aW9uTnVtYmVyIDwgZXhjZXB0
aW9uQ291bnQ7ICsrZXhjZXB0aW9uTnVtYmVyKSB7CisgICAgICAgIHVpbnQ4X3QgdGFnVHlwZTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OCh0YWdUeXBlKSwgImNhbid0
IGdldCAiLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24gdGFnIHR5cGUiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0YWdUeXBlLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNl
cHRpb24gaGFzIHRhZyB0eXBlICIsIHRhZ1R5cGUsICIgYnV0IHRoZSBvbmx5IHN1cHBvcnRlZCB0
YWcgdHlwZSBpcyAwIik7CisKKyAgICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodHlwZU51bWJlciksICJjYW4ndCBn
ZXQgIiwgZXhjZXB0aW9uTnVtYmVyLCAidGggRXhjZXB0aW9uJ3MgdHlwZSBudW1iZXIiKTsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dXNlZFNpZ25h
dHVyZXMuc2l6ZSgpLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24gdHlwZSBudW1iZXIg
aXMgaW52YWxpZCAiLCB0eXBlTnVtYmVyKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dXNlZFNpZ25hdHVy
ZXNbdHlwZU51bWJlcl0pOworICAgICAgICBtX2luZm8tPmludGVybmFsRXhjZXB0aW9uU2lnbmF0
dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOworICAgIH0KKworICAg
IHJldHVybiB7IH07Cit9CiBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKCkgLT4gUGFy
dGlhbFJlc3VsdAogewogICAgIEN1c3RvbVNlY3Rpb24gc2VjdGlvbjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKaW5kZXggZjM2OWU3Yjg2Y2FmYTkzYWQzZjgzYWQ2
MGNhMDg3YzhmNTg4MGVjYS4uYmVmMjA3MDFmNDBmZTQwYjRhMjhhMGFkY2ZjNDdmNmJmMGQ1YmZm
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKQEAgLTQ1LDcg
KzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKICAgICBtYWNybyhFbGVt
ZW50LCAgICA5LCAiRWxlbWVudHMgc2VjdGlvbiIpIFwKICAgICBtYWNybyhDb2RlLCAgICAgIDEw
LCAiRnVuY3Rpb24gYm9kaWVzIChjb2RlKSIpIFwKICAgICBtYWNybyhEYXRhLCAgICAgIDExLCAi
RGF0YSBzZWdtZW50cyIpIFwKLSAgICBtYWNybyhEYXRhQ291bnQsIDEyLCAiRGF0YSBjb3VudCIp
CisgICAgbWFjcm8oRGF0YUNvdW50LCAxMiwgIkRhdGEgY291bnQiKSBcCisgICAgbWFjcm8oRXhj
ZXB0aW9uLCAxMywgIkV4Y2VwdGlvbiBkZWNsYXJhdGlvbnMiKSBcCiAKIGVudW0gY2xhc3MgU2Vj
dGlvbiA6IHVpbnQ4X3QgewogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgQmVnaW4gaXMgbGVz
cyB0aGFuIGV2ZXJ5IG90aGVyIHNlY3Rpb24gbnVtYmVyIGFuZCB0aGF0IEN1c3RvbSBpcyBncmVh
dGVyLgpAQCAtOTAsNiArOTEsMTAgQEAgaW5saW5lIGJvb2wgdmFsaWRhdGVPcmRlcihTZWN0aW9u
IHByZXZpb3VzS25vd24sIFNlY3Rpb24gbmV4dCkKICAgICBBU1NFUlQoaXNLbm93blNlY3Rpb24o
cHJldmlvdXNLbm93bikgfHwgcHJldmlvdXNLbm93biA9PSBTZWN0aW9uOjpCZWdpbik7CiAgICAg
aWYgKHByZXZpb3VzS25vd24gPT0gU2VjdGlvbjo6RGF0YUNvdW50ICYmIG5leHQgPT0gU2VjdGlv
bjo6Q29kZSkKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHByZXZpb3VzS25vd24gPT0g
U2VjdGlvbjo6RXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gbmV4dCA+PSBTZWN0aW9uOjpHbG9i
YWw7CisgICAgaWYgKG5leHQgPT0gU2VjdGlvbjo6RXhjZXB0aW9uKQorICAgICAgICByZXR1cm4g
cHJldmlvdXNLbm93biA8PSBTZWN0aW9uOjpNZW1vcnk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHByZXZpb3VzS25vd24pIDwgc3RhdGljX2Nhc3Q8dWludDhfdD4obmV4dCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKaW5kZXgg
NzFhYWIzZGY3NTcyMmQ0MDhjNTE4YzEzZjUzODVjM2FmOWE0ODAwNi4uZjlhNTYxYjg1MGZjNWMx
OTM5ZDBlZjU5ZThhOWZkMmI2MDU5NzhmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNpZ25hdHVyZS5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgUmVmUHRyPFNpZ25hdHVyZT4g
U2lnbmF0dXJlOjp0cnlDcmVhdGUoU2lnbmF0dXJlQXJnQ291bnQgcmV0dXJuQ291bnQsIFNpZ25h
dHVyZUEKIAogU2lnbmF0dXJlSW5mb3JtYXRpb246OlNpZ25hdHVyZUluZm9ybWF0aW9uKCkKIHsK
LSNkZWZpbmUgTUFLRV9USFVOS19TSUdOQVRVUkUodHlwZSwgZW5jLCBzdHIsIHZhbCkgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgTUFLRV9USFVOS19TSUdOQVRVUkUodHlwZSwg
ZW5jLCBzdHIsIHZhbCwgXykgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgaWYgKFR5cGVLaW5kOjp0eXBlICE9IFR5cGVLaW5kOjpWb2lkKSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+
IHNpZyA9IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlKDEsIDApOyAgICAgICAgICAgIFwKQEAgLTE2NSw2
ICsxNjUsMTAgQEAgc3RydWN0IFBhcmFtZXRlclR5cGVzIHsKIAogUmVmUHRyPFNpZ25hdHVyZT4g
U2lnbmF0dXJlSW5mb3JtYXRpb246OnNpZ25hdHVyZUZvcihjb25zdCBWZWN0b3I8VHlwZSwgMT4m
IHJlc3VsdHMsIGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJncykKIHsKKyAgICBpZiBjb25zdGV4cHIg
KEFTU0VSVF9FTkFCTEVEKSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0cy5jb250YWlucyhXYXNt
OjpUeXBlczo6Vm9pZCkpOworICAgICAgICBBU1NFUlQoIWFyZ3MuY29udGFpbnMoV2FzbTo6VHlw
ZXM6OlZvaWQpKTsKKyAgICB9CiAgICAgU2lnbmF0dXJlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5n
bGV0b24oKTsKICAgICBMb2NrZXIgbG9ja2VyIHsgaW5mby5tX2xvY2sgfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAppbmRleCBkOWZhZjVkNTlkOTlm
NWU5MDRjM2E3YjI0MDA3ZDA5MWZkMWQ5YzE3Li5hZDUxMzVlN2FkNjU3OGMzOTc2MWJkN2QzYjU2
OGEwZmQyYmY2MDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1Bh
dGhzLmNwcApAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2lu
Y2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiV2FzbUJCUVBs
YW4uaCIKQEAgLTU4Niw2ICs1ODgsMTExIEBAIFdBU01fU0xPV19QQVRIX0RFQ0wobWVtb3J5X2F0
b21pY19ub3RpZnkpCiAgICAgV0FTTV9SRVRVUk4ocmVzdWx0KTsKIH0KIAorV0FTTV9TTE9XX1BB
VEhfREVDTCh0aHJvdykKK3sKKyAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZy
YW1lKTsKKworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGluc3RhbmNl
LT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwYy0+YXM8V2FzbVRocm93LCBXYXNt
T3Bjb2RlVHJhaXRzPigpOworICAgIGNvbnN0IFdhc206OlRhZyYgdGFnID0gaW5zdGFuY2UtPnRh
ZyhpbnN0cnVjdGlvbi5tX2V4Y2VwdGlvbkluZGV4KTsKKworICAgIEZpeGVkVmVjdG9yPHVpbnQ2
NF90PiB2YWx1ZXModGFnLnBhcmFtZXRlckNvdW50KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0YWcucGFyYW1ldGVyQ291bnQoKTsgKytpKQorICAgICAgICB2YWx1ZXNbaV0gPSBS
RUFEKChpbnN0cnVjdGlvbi5tX2ZpcnN0VmFsdWUgLSBpKSkuZW5jb2RlZEpTVmFsdWUoKTsKKwor
ICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IEpTV2ViQXNzZW1ibHlFeGNl
cHRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUV4Y2VwdGlvblN0cnVj
dHVyZSgpLCB0YWcsIFdURk1vdmUodmFsdWVzKSk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBleGNlcHRpb24pOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwg
Y2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNT
RVJUKCEhdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBtYWtlIHRoaXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhl
IGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9u
KQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUg
Vk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNl
IGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFr
ZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9h
ZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBp
bmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBj
b3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2gg
PSBjYWxsRnJhbWUtPmNhbGxlZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxG
cmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4oanNJbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIFdBU01fUkVUVVJOX1RX
Tyh2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdywgbnVsbHB0cik7Cit9CisKK1dBU01fU0xPV19Q
QVRIX0RFQ0wocmV0aHJvdykKK3sKKyAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2Fs
bEZyYW1lKTsKKworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGluc3Rh
bmNlLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwYy0+YXM8V2FzbVJldGhyb3cs
IFdhc21PcGNvZGVUcmFpdHM+KCk7CisgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBSRUFEKGluc3Ry
dWN0aW9uLm1fZXhjZXB0aW9uKS5qc1ZhbHVlKCk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBleGNlcHRpb24pOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwg
Y2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNT
RVJUKCEhdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBtYWtlIHRoaXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhl
IGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9u
KQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUg
Vk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNl
IGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFr
ZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9h
ZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBp
bmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBj
b3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2gg
PSBjYWxsRnJhbWUtPmNhbGxlZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxG
cmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4oanNJbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIFdBU01fUkVUVVJOX1RX
Tyh2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdywgbnVsbHB0cik7Cit9CisKK1dBU01fU0xPV19Q
QVRIX0RFQ0wocmV0cmlldmVfYW5kX2NsZWFyX2V4Y2VwdGlvbikKK3sKKyAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBp
bnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOworICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCghIXRocm93U2NvcGUuZXhjZXB0
aW9uKCkpOworCisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSB0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpOworICAgIEpTVmFsdWUgdGhyb3duVmFsdWUgPSBleGNlcHRpb24tPnZhbHVlKCk7CisgICAg
dm9pZCogcGF5bG9hZCA9IG51bGxwdHI7CisKKyAgICBjb25zdCBhdXRvJiBoYW5kbGVDYXRjaEFs
bCA9IFsmXShjb25zdCBhdXRvJiBpbnN0cnVjdGlvbikgeworICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoaW5zdHJ1Y3Rpb24ubV9leGNlcHRpb24pID0gdGhyb3duVmFsdWU7CisgICAgfTsK
KworICAgIGNvbnN0IGF1dG8mIGhhbmRsZUNhdGNoID0gWyZdKGNvbnN0IGF1dG8mIGluc3RydWN0
aW9uKSB7CisgICAgICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIHdhc21FeGNlcHRpb24gPSBq
c0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPih2bSwgdGhyb3duVmFsdWUpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghIXdhc21FeGNlcHRpb24pOworICAgICAgICBwYXlsb2Fk
ID0gYml0d2lzZV9jYXN0PHZvaWQqPih3YXNtRXhjZXB0aW9uLT5wYXlsb2FkKCkuZGF0YSgpKTsK
KyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGluc3RydWN0aW9uLm1fZXhjZXB0aW9uKSA9
IHRocm93blZhbHVlOworICAgIH07CisKKyAgICBpZiAocGMtPmlzPFdhc21DYXRjaCwgV2FzbU9w
Y29kZVRyYWl0cz4oKSkKKyAgICAgICAgaGFuZGxlQ2F0Y2gocGMtPmFzPFdhc21DYXRjaCwgV2Fz
bU9wY29kZVRyYWl0cz4oKSk7CisgICAgZWxzZSBpZiAocGMtPmlzPFdhc21DYXRjaEFsbCwgV2Fz
bU9wY29kZVRyYWl0cz4oKSkKKyAgICAgICAgaGFuZGxlQ2F0Y2hBbGwocGMtPmFzPFdhc21DYXRj
aEFsbCwgV2FzbU9wY29kZVRyYWl0cz4oKSk7CisgICAgZWxzZSBpZiAocGMtPmlzPFdhc21DYXRj
aE5vVGxzLCBXYXNtT3Bjb2RlVHJhaXRzPigpKQorICAgICAgICBoYW5kbGVDYXRjaChwYy0+YXM8
V2FzbUNhdGNoTm9UbHMsIFdhc21PcGNvZGVUcmFpdHM+KCkpOworICAgIGVsc2UgaWYgKHBjLT5p
czxXYXNtQ2F0Y2hBbGxOb1RscywgV2FzbU9wY29kZVRyYWl0cz4oKSkKKyAgICAgICAgaGFuZGxl
Q2F0Y2hBbGwocGMtPmFzPFdhc21DYXRjaEFsbE5vVGxzLCBXYXNtT3Bjb2RlVHJhaXRzPigpKTsK
KyAgICBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAv
LyBXZSB3YW50IHRvIGNsZWFyIHRoZSBleGNlcHRpb24gaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUg
Y2F0Y2ggcHJvbG9ndWUKKyAgICAvLyBKSVQgY29kZSBiZWNhdXNlIGNsZWFyaW5nIGl0IGFsc28g
ZW50YWlscyBjbGVhcmluZyBhIGJpdCBpbiBhbiBBdG9taWMKKyAgICAvLyBiaXQgZmllbGQgaW4g
Vk1UcmFwcy4KKyAgICB0aHJvd1Njb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgV0FTTV9SRVRV
Uk5fVFdPKHBjLCBwYXlsb2FkKTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUg
c2xvd19wYXRoX3dhc21fdGhyb3dfZXhjZXB0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25z
dCBJbnN0cnVjdGlvbiogcGMsIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6RXhjZXB0
aW9uVHlwZSBleGNlcHRpb25UeXBlKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmgKaW5kZXggNzc2MjExODMzOGE3Yjcw
Njk2OWIyNWI1MmNlMTZlMmMzZGM3YmQ0ZS4uYjY0Y2U3Y2RlNDFhYWEwNjg5N2U4ZmZmZWQ4MmE4
ZDA2NDMyZGZkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNs
b3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMu
aApAQCAtODMsNiArODMsOSBAQCBXQVNNX1NMT1dfUEFUSF9ISURERU5fREVDTChzZXRfZ2xvYmFs
X3JlZl9wb3J0YWJsZV9iaW5kaW5nKTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9y
eV9hdG9taWNfd2FpdDMyKTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9yeV9hdG9t
aWNfd2FpdDY0KTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9yeV9hdG9taWNfbm90
aWZ5KTsKK1dBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKHRocm93KTsKK1dBU01fU0xPV19QQVRI
X0hJRERFTl9ERUNMKHJldGhyb3cpOworV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wocmV0cmll
dmVfYW5kX2NsZWFyX2V4Y2VwdGlvbik7CiAKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBl
IHNsb3dfcGF0aF93YXNtX3Rocm93X2V4Y2VwdGlvbihDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVj
dGlvbiosIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6RXhjZXB0aW9uVHlwZSkgUkVG
RVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJu
VHlwZSBzbG93X3BhdGhfd2FzbV9wb3Bjb3VudChjb25zdCBJbnN0cnVjdGlvbiogcGMsIHVpbnQz
Ml90KSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKaW5kZXggZmE1NTJlZmZm
MTc0MWVjYjVhNGI2YzJmODlmY2EwOTc1OWVlMzE1ZC4uMTJjZGFhOTY1ZWE5OGJhMThhYzI3MTZk
Y2M3NmU4MjcwODUwMjEwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKQEAgLTExNyw2ICsxMTcsNyBAQCBhdXRvIFN0cmVhbWlu
Z1BhcnNlcjo6cGFyc2VDb2RlU2VjdGlvblNpemUodWludDMyX3QgZnVuY3Rpb25Db3VudCkgLT4g
U3RhdGUKICAgICBtX2Z1bmN0aW9uQ291bnQgPSBmdW5jdGlvbkNvdW50OwogICAgIG1fZnVuY3Rp
b25JbmRleCA9IDA7CiAgICAgbV9jb2RlT2Zmc2V0ID0gbV9vZmZzZXQ7CisgICAgbV9pbmZvLT5t
X2Z1bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlvbnMuZW5zdXJlU2l6ZShmdW5jdGlvbkNvdW50KTsK
IAogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCA9PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmln
ICIsIGZ1bmN0aW9uQ291bnQpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3Vu
dCAhPSBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwgZnVu
Y3Rpb25Db3VudCwgIiBleGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25zICIs
IG1faW5mby0+ZnVuY3Rpb25zLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGFnLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRlYzY3MzYyMzJmMDcyMWZjNjI1N2Q0Nzk0MTcxN2I1MjYyYmJl
ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFn
LmNwcApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21UYWcuaCIKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgV2Fz
bSB7CisKK3VpbnQzMl90IFRhZzo6c19pZCA9IDA7CisKK319IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGFnLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTAzOTUzZDVkNmVlZmM5MzM4MWZjOTBlNjRmNWI3MmVjMzBkMTQ3OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuaApAQCAtMCwwICsxLDYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtU2lnbmF0dXJl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFRhZyA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUYWc+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUYWcpOworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8VGFnPiBjcmVhdGUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgVGFnKHNpZ25hdHVyZSkpOyB9CisKKyAgICBTaWduYXR1cmVBcmdDb3VudCBw
YXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCk7IH0KKyAgICBUeXBlIHBhcmFtZXRlcihTaWduYXR1cmVBcmdDb3VudCBpKSBjb25zdCB7IHJl
dHVybiBtX3NpZ25hdHVyZS0+YXJndW1lbnQoaSk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBUYWcmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lkID09IG90aGVyLm1faWQ7IH0KKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGFnJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pZCAh
PSBvdGhlci5tX2lkOyB9CisKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2lnbmF0dXJlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGFnKGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQorICAgICAgICA6IG1faWQoKytzX2lkKQorICAgICAgICAs
IG1fc2lnbmF0dXJlKFJlZiB7IHNpZ25hdHVyZSB9KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0
aWMgdWludDMyX3Qgc19pZDsKKyAgICB1aW50MzJfdCBtX2lkOworICAgIFJlZjxjb25zdCBTaWdu
YXR1cmU+IG1fc2lnbmF0dXJlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRodW5rcy5jcHAKaW5kZXggNzlkMWJjZmY4OWZiMDRlMjJlZDU0ZjJmNjQwOGJlMDlmMjkz
ZDBjMy4uZmVjMmExMzc3OWJmMjdmNjQ4ZmFhMzhhNWVmODY0OGUwOTQ4NWMxYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw4ICsyOCwxMSBAQAog
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNJ
bnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUHJvYmVD
b250ZXh0LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVk
ZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAppbmRleCBjMjM1Y2ZlNjI5NWU2NjlhZTVh
ODBlZThmMjUyZWE2Y2EyNDMxYjgzLi5mNDVkZWIyYTU5NmNhYTI1N2UzMzFlZDIxZWYwOWUwNmIw
NWVjNTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRv
cklubGluZXNIZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdh
c21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQppbmRleCAxZTM4MGRlZjFjZDhjYjY3NjA3
NWVkMzI1NTc5YjBmNTFkMWJjZTU1Li45Njc3ZWI4M2Q5NmE3YWQ2NGZiNTE0N2E0MmI0YTg1OGQ5
NTk0MDQ3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdh
c21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQpAQCAtMTQ0
LDcgKzE0NCw3IEBAIGNsYXNzIENvZGVHZW5lcmF0b3I6CiAgICAgICAgICAgICBzZWxmLmFkdmFu
Y2UoKQogICAgICAgICAgICAgc2VsZi5jb25zdW1lKCIpIikKICAgICAgICAgZWxpZiBhcmd1bWVu
dFJlZ2V4Lm1hdGNoKHNlbGYudG9rZW4oKSk6Ci0gICAgICAgICAgICByZXN1bHQgPSAiYXJnIiAr
IHNlbGYudG9rZW4oKVsxOl0KKyAgICAgICAgICAgIHJlc3VsdCA9ICJnZXQoYXJnIiArIHNlbGYu
dG9rZW4oKVsxOl0gKyAiKSIKICAgICAgICAgICAgIHNlbGYuYWR2YW5jZSgpCiAgICAgICAgIGVs
c2U6CiAgICAgICAgICAgICBvcCA9IHNlbGYudG9rZW4oKQpAQCAtMTU2LDEzICsxNTYsMTYgQEAg
Y2xhc3MgQ29kZUdlbmVyYXRvcjoKIAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKKyAgICBkZWYg
bWFrZVJlc3VsdChzZWxmLCByZXN1bHRWYWx1ZSk6CisgICAgICAgIHJldHVybiByZXN1bHRWYWx1
ZSArICI7XG4iICsgInJlc3VsdCA9IHB1c2gocmVzdWx0VmFsdWUtPnR5cGUoKSk7XG4iICsgIm1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIG9yaWdp
bigpLCByZXN1bHQsIHJlc3VsdFZhbHVlKTsiCisKICAgICBkZWYgZ2VuZXJhdGUoc2VsZiwgd2Fz
bU9wKToKICAgICAgICAgaWYgbGVuKHNlbGYudG9rZW5zKSA9PSAxOgotICAgICAgICAgICAgcGFy
YW1zID0gWyJhcmciICsgc3RyKHBhcmFtKSBmb3IgcGFyYW0gaW4gcmFuZ2UobGVuKHdhc21PcFsi
cGFyYW1ldGVyIl0pKV0KLSAgICAgICAgICAgIHJldHVybiAiICAgIHJlc3VsdCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OiIgKyBzZWxmLnRva2VuKCkgKyAi
LCBvcmlnaW4oKSwgIiArICIsICIuam9pbihwYXJhbXMpICsgIikiCisgICAgICAgICAgICBwYXJh
bXMgPSBbImdldChhcmciICsgc3RyKHBhcmFtKSArICIpIiBmb3IgcGFyYW0gaW4gcmFuZ2UobGVu
KHdhc21PcFsicGFyYW1ldGVyIl0pKV0KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1ha2VSZXN1
bHQoIiAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEIzOjoiICsgc2VsZi50b2tlbigpICsgIiwgb3JpZ2luKCksICIgKyAiLCAi
LmpvaW4ocGFyYW1zKSArICIpIikKICAgICAgICAgcmVzdWx0ID0gc2VsZi5nZW5lcmF0ZU9wY29k
ZSgpCi0gICAgICAgIHNlbGYuY29kZS5hcHBlbmQoInJlc3VsdCA9ICIgKyByZXN1bHQpCi0gICAg
ICAgIHJldHVybiAiICAgICIgKyAiICAgIFxuIi5qb2luKHNlbGYuY29kZSkKKyAgICAgICAgc2Vs
Zi5jb2RlLmFwcGVuZCgiVmFsdWUqIHJlc3VsdFZhbHVlID0gIiArIHJlc3VsdCkKKyAgICAgICAg
cmV0dXJuIHNlbGYubWFrZVJlc3VsdCgiICAgICIgKyAiICAgIFxuIi5qb2luKHNlbGYuY29kZSkp
CiAKIAogZGVmIHRlbXAoaW5kZXgpOgpAQCAtMTkxLDcgKzE5NCw3IEBAIGRlZiBnZW5lcmF0ZVNp
bXBsZUNvZGUob3ApOgogICAgIHJldHVybiAiIiIKIHRlbXBsYXRlPD4gYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OiIiIiArIHdhc20udG9DcHAob3BbIm5hbWUiXSkgKyAiPigiICsg
IiwgIi5qb2luKGFyZ3MpICsgIiIiKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0iIiIgKyBnZW5lcmF0
ZUIzQ29kZShvcGNvZGUsIGIzb3ApICsgIiIiOworIiIiICsgZ2VuZXJhdGVCM0NvZGUob3Bjb2Rl
LCBiM29wKSArICIiIgogICAgIHJldHVybiB7IH07CiB9CiAiIiIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQppbmRleCBjMjBiZmE1
NDJlMDg2NGJjZDBhZjgyOGU3OWQ2OTIwODA0YTU3MjM3Li43Y2NmY2FmYzZhZmIzMjEwOGNiNGE1
MDljNWI5MjA3MmE4MWM3NjI0IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CkBAIC01Myw3ICs1Myw3IEBAIGRlZiBjcHBNYWNy
byh3YXNtT3Bjb2RlLCB2YWx1ZSwgYjMsIGluYywgKmV4dHJhQXJncyk6CiBkZWYgdHlwZU1hY3Jv
aXplcigpOgogICAgIGluYyA9IDAKICAgICBmb3IgdHkgaW4gd2FzbS50eXBlczoKLSAgICAgICAg
eWllbGQgY3BwTWFjcm8odHksIHdhc20udHlwZXNbdHldWyJ2YWx1ZSJdLCB3YXNtLnR5cGVzW3R5
XVsiYjN0eXBlIl0sIGluYykKKyAgICAgICAgeWllbGQgY3BwTWFjcm8odHksIHdhc20udHlwZXNb
dHldWyJ2YWx1ZSJdLCB3YXNtLnR5cGVzW3R5XVsiYjN0eXBlIl0sIGluYywgdHkpCiAgICAgICAg
IGluYyArPSAxCiAKIHR5cGVfZGVmaW5pdGlvbnMgPSBbIiNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9U
WVBFKG1hY3JvKSJdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHkuY3BwCmluZGV4IDcxOGJjYjk3NTU2ZWY0NWE4MmQzZGI5ZTRiYTA3NzU4MGJiYzllNTYu
Ljc4ZjE3NmFiNjNhMjY1ZTE1NDlkNWQ3MmNiMzYyY2E3ZTg1NDdjZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCkBAIC03OCw2ICs3OCw3
IEBAIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJs
eSIsICZCYXNlOjpzX2luZm8sICZ3ZWJBc3NlCiAvKiBTb3VyY2UgZm9yIEpTV2ViQXNzZW1ibHku
bHV0LmgKIEBiZWdpbiB3ZWJBc3NlbWJseVRhYmxlCiAgIENvbXBpbGVFcnJvciAgICBjcmVhdGVX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvciAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjaworICBFeGNl
cHRpb24gICAgICAgY3JlYXRlV2ViQXNzZW1ibHlFeGNlcHRpb24gICAgIERvbnRFbnVtfFByb3Bl
cnR5Q2FsbGJhY2sKICAgR2xvYmFsICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5R2xvYmFsICAg
ICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIEluc3RhbmNlICAgICAgICBjcmVhdGVX
ZWJBc3NlbWJseUluc3RhbmNlICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBMaW5r
RXJyb3IgICAgICAgY3JlYXRlV2ViQXNzZW1ibHlMaW5rRXJyb3IgICAgIERvbnRFbnVtfFByb3Bl
cnR5Q2FsbGJhY2sKQEAgLTg1LDYgKzg2LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1i
bHk6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5IiwgJkJhc2U6OnNfaW5mbywgJndlYkFzc2UKICAg
TW9kdWxlICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5TW9kdWxlICAgICAgICBEb250RW51bXxQ
cm9wZXJ0eUNhbGxiYWNrCiAgIFJ1bnRpbWVFcnJvciAgICBjcmVhdGVXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvciAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBUYWJsZSAgICAgICAgICAgY3Jl
YXRlV2ViQXNzZW1ibHlUYWJsZSAgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKKyAg
VGFnICAgICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5VGFnICAgICAgICAgICBEb250RW51bXxQ
cm9wZXJ0eUNhbGxiYWNrCiAgIGNvbXBpbGUgICAgICAgICB3ZWJBc3NlbWJseUNvbXBpbGVGdW5j
ICAgICAgICAgRnVuY3Rpb24gMQogICBpbnN0YW50aWF0ZSAgICAgd2ViQXNzZW1ibHlJbnN0YW50
aWF0ZUZ1bmMgICAgIEZ1bmN0aW9uIDEKICAgdmFsaWRhdGUgICAgICAgIHdlYkFzc2VtYmx5VmFs
aWRhdGVGdW5jICAgICAgICBGdW5jdGlvbiAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEw
M2Q0MzAzM2NlYWQ1ZjFiNDNiNmNkNjUxZjM2YTc4NTJmZjAxODgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNw
cApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNl
cHRpb24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbjo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dl
YkFzc2VtYmx5RXhjZXB0aW9uKSB9OworCitKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFdhc206
OlRhZyYgdGFnLCBGaXhlZFZlY3Rvcjx1aW50NjRfdD4mJiBwYXlsb2FkKQorICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlKQorICAgICwgbV90YWcoUmVmIHsgdGFnIH0pCisgICAgLCBtX3BheWxvYWQo
V1RGTW92ZShwYXlsb2FkKSkKK3sKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKGNlbGwsIHZpc2l0b3IpOworCisgICAgYXV0byogZXhjZXB0aW9uID0ganNDYXN0PEpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24qPihjZWxsKTsKKyAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IGV4Y2VwdGlvbi0+dGFnKCkuc2lnbmF0dXJlKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBp
ZiAoaXNSZWZUeXBlKHNpZ25hdHVyZS5hcmd1bWVudChpKSkpCisgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZChiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+PihleGNlcHRpb24tPnBh
eWxvYWQoKVtpXSkpOworICAgIH0KK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNz
ZW1ibHlFeGNlcHRpb24pOworCit2b2lkIEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQoreworICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24q
PihjZWxsKS0+SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6fkpTV2ViQXNzZW1ibHlFeGNlcHRpb24o
KTsKK30KKworSlNWYWx1ZSBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpnZXRBcmcoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaSkgY29uc3QKK3sKKyAgICBjb25zdCBXYXNt
OjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IHRhZygpLnNpZ25hdHVyZSgpOworICAgIEFTU0VSVChp
IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CisgICAgcmV0dXJuIHRvSlNWYWx1ZShnbG9i
YWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudChpKSwgcGF5bG9hZCgpW2ldKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9u
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDNiOWEzMmY5NWIxOTRkZWU4YzE1NDZiMmRjNWQ5OTRkNzJjNjNjYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlFeGNlcHRpb24uaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisKKyNpbmNsdWRlICJXYXNtVGFnLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworCisgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBTdWJzcGFjZUFjY2VzcyBtb2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5RXhjZXB0aW9u
U3BhY2U8bW9kZT4oKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhF
cnJvckluc3RhbmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAg
IHN0YXRpYyBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcsIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiYm
IHBheWxvYWQpCisgICAgeworICAgICAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBleGNlcHRp
b24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uPih2
bS5oZWFwKSkgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbih2bSwgc3RydWN0dXJlLCB0YWcsIFdURk1v
dmUocGF5bG9hZCkpOworICAgICAgICBleGNlcHRpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgICB9CisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOworCisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcoKSBjb25zdCB7IHJldHVybiBtX3RhZy5n
ZXQoKTsgfQorICAgIGNvbnN0IEZpeGVkVmVjdG9yPHVpbnQ2NF90PiYgcGF5bG9hZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGF5bG9hZDsgfQorICAgIEpTVmFsdWUgZ2V0QXJnKEpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgSlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbihWTSYsIFN0cnVjdHVyZSosIGNvbnN0IFdhc206OlRhZyYsIEZpeGVkVmVjdG9yPHVpbnQ2
NF90PiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIFJlZjxjb25z
dCBXYXNtOjpUYWc+IG1fdGFnOworICAgIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiBtX3BheWxvYWQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SGVscGVycy5oCmluZGV4IGQ4ZjI2NTBjYWE1ODY3MjM1NGJkNWYzOWY3ZGVhYjY0MTBkMDA1NGMu
LmI2MjBlZGNhMjhhOWUyNDI5ZjEyMGNlMTk2N2EzYjBjMTEyMTM1NzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaApAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTU291cmNlQ29kZS5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmgiCkBAIC0xNDQsNiArMTQ1LDc1IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBkZWZh
dWx0VmFsdWVGb3JSZWZlcmVuY2VUeXBlKGNvbnN0IFdhc206OlR5cGUgdHlwZSkKICAgICByZXR1
cm4ganNOdWxsKCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSB0b0pTVmFsdWUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgV2FzbTo6VHlwZSB0eXBlLCB1aW50NjRfdCBi
aXRzKQoreworICAgIHN3aXRjaCAodHlwZS5raW5kKSB7CisgICAgY2FzZSBXYXNtOjpUeXBlS2lu
ZDo6Vm9pZDoKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgY2FzZSBXYXNtOjpU
eXBlS2luZDo6STMyOgorICAgICAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4oYml0cykpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkYzMjoKKyAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKGJpdHdpc2VfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4oYml0cykp
KTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGNjQ6CisgICAgICAgIHJldHVybiBqc051bWJl
cihiaXR3aXNlX2Nhc3Q8ZG91YmxlPihiaXRzKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6
STY0OgorICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBz
dGF0aWNfY2FzdDxpbnQ2NF90PihiaXRzKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RXh0
ZXJucmVmOgorICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkZ1bmNyZWY6CisgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZT4oYml0cyk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IEpTVmFsdWUoKTsKK30KKworQUxXQVlTX0lOTElORSB1aW50NjRfdCBmcm9tSlNWYWx1ZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXYXNtOjpUeXBlIHR5cGUsIEpTVmFsdWUg
dmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBzd2l0Y2ggKHR5cGUua2luZCkgewor
ICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlR5cGVJZHg6CisgICAgY2FzZSBXYXNtOjpUeXBlS2lu
ZDo6RnVuY3JlZjogeworICAgICAgICBib29sIGlzTnVsbGFibGUgPSB0eXBlLmlzTnVsbGFibGUo
KTsKKyAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0gbnVsbHB0cjsK
KyAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rpb24g
PSBudWxscHRyOworICAgICAgICBpZiAoIWlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIHZh
bHVlLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pICYmICghaXNOdWxsYWJsZSB8
fCAhdmFsdWUuaXNOdWxsKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FeGNlcHRpb24o
Z2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9i
YWxPYmplY3QsIHZtLCAiRnVuY3JlZiBtdXN0IGJlIGFuIGV4cG9ydGVkIHdhc20gZnVuY3Rpb24i
KSk7CisgICAgICAgIGlmICh0eXBlLmtpbmQgPT0gV2FzbTo6VHlwZUtpbmQ6OlR5cGVJZHggJiYg
KHdhc21GdW5jdGlvbiB8fCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgeworICAgICAgICAgICAgV2Fz
bTo6U2lnbmF0dXJlSW5kZXggcGFyYW1JbmRleCA9IHR5cGUuaW5kZXg7CisgICAgICAgICAgICBX
YXNtOjpTaWduYXR1cmVJbmRleCBhcmdJbmRleDsKKyAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rp
b24pCisgICAgICAgICAgICAgICAgYXJnSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUlu
ZGV4KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJnSW5kZXggPSB3YXNt
V3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgaWYgKHBhcmFt
SW5kZXggIT0gYXJnSW5kZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FeGNlcHRp
b24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihn
bG9iYWxPYmplY3QsIHZtLCAiQXJndW1lbnQgZnVuY3Rpb24gZGlkIG5vdCBtYXRjaCB0aGUgcmVm
ZXJlbmNlIHR5cGUiKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgV2FzbTo6VHlwZUtpbmQ6OkV4dGVybnJlZjoKKyAgICAgICAgaWYgKCF0eXBlLmlzTnVsbGFi
bGUoKSAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Io
Z2xvYmFsT2JqZWN0LCB2bSwgIk5vbi1udWxsIEV4dGVybnJlZiBjYW5ub3QgYmUgbnVsbCIpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STMyOgorICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHZhbHVlLnRvSW50MzIoZ2xvYmFsT2JqZWN0KSk7Cisg
ICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STY0OgorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUudG9CaWdJbnQ2NChnbG9iYWxPYmpl
Y3QpKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjMyOgorICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChnbG9i
YWxPYmplY3QpKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjY0OgorICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUudG9OdW1i
ZXIoZ2xvYmFsT2JqZWN0KSkpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlZvaWQ6CisgICAg
Y2FzZSBXYXNtOjpUeXBlS2luZDo6RnVuYzoKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpSZWZO
dWxsOgorICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlJlZjoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmluZGV4IDY2ZGExMGE3ODAw
M2RiMjdhMTkxODJlOWIxYjBjM2M4MDVkNGEzYjYuLjFkN2Y0NmNkNjgzMDQ1ZWFiNjQ2Yjg3MmY1
NzhlZDc1MDIyNWNiZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtMjE2LDYgKzIxNiw3IEBAIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjp0cnlDcmVhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0
aW9uOgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xvYmFsOgogICAgICAgICBj
YXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWxLaW5kOjpFeGNlcHRpb246CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgY2FzZSBX
YXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeToKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQyLDYg
KzI0Myw3IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjp0
cnlDcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRl
cm5hbEtpbmQ6OkZ1bmN0aW9uOgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xv
YmFsOgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6CisgICAgICAgIGNh
c2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246CiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCmluZGV4
IDU2ZjU4Zjk1NDM0OTM5NTliODI2ZDFmOTczYThmMmIwZDVjZjc2OWYuLjk3NGQ2ZDdiYTVlN2E1
ODc4YTg4YjZjMTE2ZDUyYWRlNTM4YmFmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCkBAIC00OCw2ICs0OCw4IEBA
IGNsYXNzIENvZGVCbG9jazsKIH0KIAogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlIGZpbmFs
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CisKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVj
dDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVu
dGltZUVycm9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3IuY3BwCmluZGV4IDEwMjJhNTIyNzQzMjk2N2FlYWE1MmI4Yjg5NzQ2Nzkz
YmZhZmY0ZGIuLmIxMDI5N2ZlZGFiNzVmYTIzN2M1NzY2ZTcxMTkzMjQyNDI2NDg2N2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3IuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDYgKzM3LDEzIEBAIEpTT2JqZWN0KiBjcmVhdGVKU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwK
ICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKICAgICByZXR1cm4gRXJyb3JJbnN0YW5j
ZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlSdW50
aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSwgSlNWYWx1ZSgpLCBkZWZhdWx0U291cmNlQXBw
ZW5kZXIsIFR5cGVOb3RoaW5nLCBFcnJvclR5cGU6OkVycm9yLCB0cnVlKTsKIH0KKworSlNPYmpl
Y3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgVk0mIHZtLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUpCit7CisgICAgRXJyb3JJ
bnN0YW5jZSogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwg
Z2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBXYXNtOjpl
cnJvck1lc3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5cGUpLCBKU1ZhbHVlKCksIGRlZmF1bHRTb3Vy
Y2VBcHBlbmRlciwgVHlwZU5vdGhpbmcsIEVycm9yVHlwZTo6RXJyb3IsIHRydWUpOworICAgIGVy
cm9yLT5zZXRDYXRjaGFibGVGcm9tV2FzbShmYWxzZSk7CisgICAgcmV0dXJuIGVycm9yOworfQog
ICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaAppbmRleCBiZTQxMzA5
MGQzMjc0YzYxOGZhZmQ0OWIxMTY3YjBkMjIyN2NlNWZjLi5jODZiNjNmOTEyZDNjZjQxZDFjNmM0
OTBjMDg5NjM5Y2I3YjBiM2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEwICsyOCwxMiBAQAog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkVycm9ySW5zdGFuY2UuaCIKKyNp
bmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogSlNPYmpl
Y3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBWTSYs
IGNvbnN0IFN0cmluZyYpOworSlNPYmplY3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3IoSlNHbG9iYWxPYmplY3QqLCBWTSYsIFdhc206OkV4Y2VwdGlvblR5cGUpOwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseVRhZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOGQ1NjBmMDcxMDZlNGQwYWNiYTU1YTMzYTc0
MmM3MDk3NzM3YjFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVRhZy5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisK
KyNpbmNsdWRlICJXYXNtVGFnLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0lu
Zm8gSlNXZWJBc3NlbWJseVRhZzo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFnIiwgJkJhc2U6
OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2Vt
Ymx5VGFnKSB9OworCitKU1dlYkFzc2VtYmx5VGFnKiBKU1dlYkFzc2VtYmx5VGFnOjpjcmVhdGUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcpCit7CisgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVj
dCk7CisgICAgYXV0byoganNUYWcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFz
c2VtYmx5VGFnPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseVRhZyh2bSwgc3RydWN0dXJlLCB0YWcp
OworICAgIGpzVGFnLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIGpzVGFnOworfQor
CitTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworSlNXZWJBc3Nl
bWJseVRhZzo6SlNXZWJBc3NlbWJseVRhZyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBXYXNtOjpUYWcmIHRhZykKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1f
dGFnKFJlZiB7IHRhZyB9KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlUYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTJiZjQzZGI3N2U1N2ZkNTFiODBjMTkw
M2YyMmNlOTljMGE3ZWUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21UYWcuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlUYWcgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KKyAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB2bS53ZWJBc3NlbWJseVRhZ1NwYWNlPG1vZGU+KCk7CisgICAgfQorCisgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1dlYkFzc2Vt
Ymx5VGFnKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGNvbnN0IFdh
c206OlRhZyYpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRhZygpIGNv
bnN0IHsgcmV0dXJuIG1fdGFnOyB9CisgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1
cmUoKSBjb25zdCB7IHJldHVybiB0YWcoKS5zaWduYXR1cmUoKTsgfQorCitwcml2YXRlOgorICAg
IEpTV2ViQXNzZW1ibHlUYWcoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBXYXNtOjpUYWcmKTsKKwor
ICAgIGNvbnN0IFJlZjxjb25zdCBXYXNtOjpUYWc+IG1fdGFnOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKaW5kZXggZjY3ZjI0MmE3ODkxM2FlNWMwMmFhNTY4
ZTk5YWM2NWNkYmI4MGZkZS4uZDY1ZmM2MTIxYjYwOTBiZDdmMmQ0MGQwM2JiNDVlZTdhYTY0MDIz
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApAQCAtOTgs
NyArOTgsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFn
PiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICB1bnNpZ25lZCBtYXJz
aGFsbGVkR1BScyA9IDA7CiAgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKICAg
ICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFy
Z3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgdW5z
aWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0
ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwg
YXJnQ291bnQ7ICsrYXJnTnVtKSB7CiAgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1
cmUuYXJndW1lbnQoYXJnTnVtKTsKICAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZS5raW5kKSB7
CkBAIC0xNjIsNyArMTYyLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21F
bnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgdW5z
aWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOwogICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBS
cyA9IDA7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xv
dDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3Rl
cnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1bnNpZ25l
ZCBmck9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpOwogCiAgICAgICAgIGF1dG8gbWFyc2hhbGxGUFIgPSBbJl0g
KEZQUlJlZyBmcHJSZWcpIHsKICAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oZnByUmVnKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0
aW9uQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY0YTVmNDQ4NmI0ZjE3
YzhmZmZjODcwNzQxMTUwMmI4NjdlNjlmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwCkBA
IC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9u
Q29uc3RydWN0b3IuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkl0
ZXJhdG9yT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMu
aCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oIgorCisjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpz
X2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sICZjb25zdHJ1Y3RvclRhYmxlV2Vi
QXNzZW1ibHlFeGNlcHRpb24sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1i
bHlFeGNlcHRpb25Db25zdHJ1Y3RvcikgfTsKKworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oY29uc3RydWN0SlNXZWJBc3NlbWJseUV4Y2VwdGlvbik7CitzdGF0aWMgSlNDX0RFQ0xB
UkVfSE9TVF9GVU5DVElPTihjYWxsSlNXZWJBc3NlbWJseUV4Y2VwdGlvbik7CisKKy8qIFNvdXJj
ZSBmb3IgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaAorIEBiZWdpbiBjb25z
dHJ1Y3RvclRhYmxlV2ViQXNzZW1ibHlFeGNlcHRpb24KKyBAZW5kCisgKi8KKworSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlFeGNlcHRpb24sIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgYXV0
byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIEpTVmFsdWUgdGFnVmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApOworICAgIEpTVmFsdWUgdGFnUGFyYW1ldGVycyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSk7
CisKKyAgICBhdXRvIHRhZyA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhZyo+KHZtLCB0
YWdWYWx1ZSk7CisgICAgaWYgKCF0YWcpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRpb24gY29uc3RydWN0b3Ig
ZXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBXZWJBc3NlbWJseS5UYWciKTsKKwor
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHZhbHVlczsKKyAgICBmb3JFYWNoSW5JdGVyYWJsZShn
bG9iYWxPYmplY3QsIHRhZ1BhcmFtZXRlcnMsIFsmXSAoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgbmV4dFZhbHVlKSB7CisgICAgICAgIHZhbHVlcy5hcHBlbmQobmV4dFZhbHVlKTsKKyAg
ICB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKHZh
bHVlcy5zaXplKCkgIT0gdGFnLT5zaWduYXR1cmUoKS5hcmd1bWVudENvdW50KCkpCisgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJs
eS5FeGNlcHRpb24gY29uc3RydWN0b3IgZXhwZWN0cyB0aGUgbnVtYmVyIG9mIHBhcmVtZXRlcnMg
aW4gV2ViQXNzZW1ibHkuVGFnIHRvIG1hdGNoIHRoZSB0YWdzIHBhcmFtZXRlciBjb3VudC4iKTsK
KworICAgIC8vIEFueSBHQydkIHZhbHVlcyBpbiBoZXJlIHdpbGwgYmUgbWFya2VkIGJ5IHRoZSBN
YXJrZWRBcnVnZW1lbnRCdWZmZXIgdW50aWwgc3RvcmVkIGluIHRoZSBFeGNlcHRpb24uCisgICAg
Rml4ZWRWZWN0b3I8dWludDY0X3Q+IHBheWxvYWQodmFsdWVzLnNpemUoKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBwYXlsb2Fk
W2ldID0gZnJvbUpTVmFsdWUoZ2xvYmFsT2JqZWN0LCB0YWctPnNpZ25hdHVyZSgpLmFyZ3VtZW50
KGkpLCB2YWx1ZXMuYXQoaSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgIH0KKworICAgIEpTT2JqZWN0KiBuZXdUYXJnZXQgPSBhc09iamVjdChjYWxsRnJh
bWUtPm5ld1RhcmdldCgpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTQ19HRVRfREVS
SVZFRF9TVFJVQ1RVUkUodm0sIHdlYkFzc2VtYmx5RXhjZXB0aW9uU3RydWN0dXJlLCBuZXdUYXJn
ZXQsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2Rl
KEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCB0YWctPnRhZygp
LCBXVEZNb3ZlKHBheWxvYWQpKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2Fs
bEpTV2ViQXNzZW1ibHlFeGNlcHRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIikpOworfQorCitXZWJB
c3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGNl
cHRpb25Qcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCit7CisgICAgYXV0byogY29uc3RydWN0b3Ig
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcih2bSwgc3RydWN0
dXJlKTsKKyAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUp
OworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseUV4
Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5h
bEZ1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFz
c2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNz
ZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSwgMSwgIkV4Y2VwdGlvbiJfcywgUHJvcGVydHlBZGRpdGlvbk1vZGU6OldpdGhv
dXRTdHJ1Y3R1cmVUcmFuc2l0aW9uKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0
cmlidXRlOjpEb250RGVsZXRlKTsKK30KKworV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
cjo6V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjYWxsSlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbiwgY29uc3RydWN0SlNXZWJBc3NlbWJseUV4Y2VwdGlvbikKK3sKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlv
bkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTdiYzkyMzU0NTUzMGRlNTg1OTcwZThkY2U3YzYw
MDY5MDRhYjEzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9u
LmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOworCitjbGFzcyBXZWJBc3NlbWJseUV4Y2VwdGlv
bkNvbnN0cnVjdG9yIGZpbmFsIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVibGljOgor
ICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRp
Y1Byb3BlcnR5VGFibGU7CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1
Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5
cGUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAg
IFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqKTsK
K307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUV4Y2Vw
dGlvbkNvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlw
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2MzNmM0Nzk4NWEzMjRjMWIzODk5MzVlZjFhMWI5MTFhYWY1Zjhl
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oIgorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mgeworc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNHZXRBcmcpOwor
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90
b0Z1bmNJcyk7Cit9CisKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5s
dXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvdHlwZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIiwgJkJh
c2U6OnNfaW5mbywgJnByb3RvdHlwZVRhYmxlV2ViQXNzZW1ibHlFeGNlcHRpb24sIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUpIH07CisK
Ky8qIFNvdXJjZSBmb3IgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUubHV0LmgKKyBAYmVn
aW4gcHJvdG90eXBlVGFibGVXZWJBc3NlbWJseUV4Y2VwdGlvbgorIGdldEFyZyAgIHdlYkFzc2Vt
Ymx5RXhjZXB0aW9uUHJvdG9GdW5jR2V0QXJnICAgRnVuY3Rpb24gMgorIGlzICAgd2ViQXNzZW1i
bHlFeGNlcHRpb25Qcm90b0Z1bmNJcyAgIEZ1bmN0aW9uIDEKKyBAZW5kCisgKi8KKworV2ViQXNz
ZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogc3RydWN0dXJlKQorewor
ICAgIGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5
RXhjZXB0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5
cGUodm0sIHN0cnVjdHVyZSk7CisgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAg
cmV0dXJuIG9iamVjdDsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Cit9CisKK1dlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG90eXBlOjpXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCitB
TFdBWVNfSU5MSU5FIHN0YXRpYyBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBnZXRFeGNlcHRpb24o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2VsbCgpKSkg
eworICAgICAgICB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlTm90QW5P
YmplY3RFcnJvcihnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSkpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgYXV0byogdGFnID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5
RXhjZXB0aW9uKj4odm0sIHRoaXNWYWx1ZS5hc0NlbGwoKSk7CisgICAgaWYgKExJS0VMWSh0YWcp
KQorICAgICAgICByZXR1cm4gdGFnOworICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRpb24gb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tRXhj
ZXB0aW9uIG9iamVjdCJfcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FMV0FZU19JTkxJ
TkUgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWcqIGdldFRhZyhWTSYgdm0sIEpTVmFsdWUgdGFnVmFs
dWUpCit7CisgICAgaWYgKCF0YWdWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhZyo+KHZtLCB0YWdW
YWx1ZS5hc0NlbGwoKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih3ZWJBc3NlbWJs
eUV4Y2VwdGlvblByb3RvRnVuY0dldEFyZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBjb25zdCBhdXRvJiBmb3JtYXRNZXNzYWdlID0gWyZdKGNvbnN0IGF1dG8mIG1lc3NhZ2UpIHsK
KyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5LkV4Y2VwdGlvbi5nZXRBcmco
KTogIiwgbWVzc2FnZSk7CisgICAgfTsKKyAgICBjb25zdCBhdXRvJiB0eXBlRXJyb3IgPSBbJl0o
Y29uc3QgYXV0byYgbWVzc2FnZSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGZvcm1hdE1lc3NhZ2UobWVzc2FnZSkpOworICAgICAgICByZXR1cm4g
ZW5jb2RlZEpTVmFsdWUoKTsKKyAgICB9OworCisgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiog
anNFeGNlcHRpb24gPSBnZXRFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnRoaXNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworCisgICAgSlNXZWJBc3NlbWJseVRhZyogdGFnID0gZ2V0VGFnKHZtLCBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXRhZykKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJv
cigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIFdlYkFzc2VtYmx5LlRhZyIpOworCisgICAgaWYg
KGpzRXhjZXB0aW9uLT50YWcoKSAhPSB0YWctPnRhZygpKQorICAgICAgICByZXR1cm4gdHlwZUVy
cm9yKCJGaXJzdCBhcmd1bWVudCBkb2VzIG5vdCBtYXRjaCB0aGUgZXhjZXB0aW9uIHRhZyIpOwor
CisgICAgdWludDMyX3QgaW5kZXggPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpLnRvVUludDMyKGds
b2JhbE9iamVjdCk7CisgICAgaWYgKGluZGV4ID49IHRhZy0+dGFnKCkucGFyYW1ldGVyQ291bnQo
KSkgeworICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBm
b3JtYXRNZXNzYWdlKCJJbmRleCBvdXQgb2YgcmFuZ2UiKSk7CisgICAgICAgIHJldHVybiBlbmNv
ZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCBKU1ZhbHVlOjplbmNvZGUoanNFeGNlcHRpb24tPmdldEFyZyhnbG9iYWxPYmplY3QsIGluZGV4
KSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b0Z1bmNJcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5
RXhjZXB0aW9uKiBqc0V4Y2VwdGlvbiA9IGdldEV4Y2VwdGlvbihnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFnKiB0YWcgPSBnZXRUYWco
dm0sIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgIGlmICghdGFnKSB7CisgICAgICAgIHRo
cm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgIldlYkFzc2VtYmx5LkV4Y2Vw
dGlvbi5pcygpOiBGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuVGFnIik7Cisg
ICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGpzRXhjZXB0aW9u
LT50YWcoKSA9PSB0YWctPnRhZygpKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRjMjEwNmQ4Yjk5MzFmZGE0YTBlOTRiNjFmYjVjN2UxZWEzNDhkYmMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2Vw
dGlvblByb3RvdHlwZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNP
YmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5RXhjZXB0aW9u
UHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAg
IHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1By
b3BlcnR5VGFibGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
eworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJs
eUV4Y2VwdGlvblByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZTsKKyAgICB9CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5
cGUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
KTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseUV4Y2Vw
dGlvblByb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcAppbmRleCAzYWIzYzNkNWNiNWM5MDA5YmVjMmI2ZDgwZDQ0NGM4MGMx
NDNlYWRlLi4xOTcxOGRjZTY5OTY5MDAxZWUxMmQ2NDRmODYyNDVlMDE3MzY1YjA4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcApAQCAtNzgsNTEgKzc4LDkgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJB
c3NlbWJseUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBXYXNt
OjpJbnN0YW5jZSogd2FzbUluc3RhbmNlID0gJmluc3RhbmNlLT5pbnN0YW5jZSgpOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKTsgKythcmdJbmRleCkgewotICAgICAgICBKU1ZhbHVlIGFyZyA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoYXJnSW5kZXgpOwotICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChh
cmdJbmRleCkua2luZCkgewotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJMzI6Ci0gICAg
ICAgICAgICBhcmcgPSBKU1ZhbHVlOjpkZWNvZGUoYXJnLnRvSW50MzIoZ2xvYmFsT2JqZWN0KSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6VHlwZUlk
eDoKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RnVuY3JlZjogewotICAgICAgICAgICAg
Ym9vbCBpc051bGxhYmxlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ0luZGV4KS5pc051bGxhYmxl
KCk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb24gPSBudWxs
cHRyOwotICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21XcmFwcGVy
RnVuY3Rpb24gPSBudWxscHRyOwotICAgICAgICAgICAgaWYgKCFpc1dlYkFzc2VtYmx5SG9zdEZ1
bmN0aW9uKHZtLCBhcmcsIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlvbikgJiYgKCFp
c051bGxhYmxlIHx8ICFhcmcuaXNOdWxsKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAiRnVuY3JlZiBtdXN0IGJl
IGFuIGV4cG9ydGVkIHdhc20gZnVuY3Rpb24iKSkpOwotICAgICAgICAgICAgaWYgKHNpZ25hdHVy
ZS5hcmd1bWVudChhcmdJbmRleCkua2luZCA9PSBXYXNtOjpUeXBlS2luZDo6VHlwZUlkeCAmJiAo
d2FzbUZ1bmN0aW9uIHx8IHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAg
V2FzbTo6U2lnbmF0dXJlSW5kZXggcGFyYW1JbmRleCA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdJ
bmRleCkuaW5kZXg7Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggYXJnSW5k
ZXg7Ci0gICAgICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikKLSAgICAgICAgICAgICAgICAg
ICAgYXJnSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhcmdJbmRleCA9IHdhc21XcmFwcGVyRnVu
Y3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtSW5kZXgg
IT0gYXJnSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAiQXJndW1lbnQgZnVuY3Rpb24gZGlkIG5vdCBt
YXRjaCB0aGUgcmVmZXJlbmNlIHR5cGUiKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RXh0ZXJucmVm
OgotICAgICAgICAgICAgaWYgKCFzaWduYXR1cmUuYXJndW1lbnQoYXJnSW5kZXgpLmlzTnVsbGFi
bGUoKSAmJiBhcmcuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sICJOb24tbnVsbCBFeHRlcm5yZWYgY2Fu
bm90IGJlIG51bGwiKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6
VHlwZUtpbmQ6Okk2NDoKLSAgICAgICAgICAgIGFyZyA9IEpTVmFsdWU6OmRlY29kZShiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KGFyZy50b0JpZ0ludDY0KGdsb2JhbE9iamVjdCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGMzI6Ci0gICAgICAgICAg
ICBhcmcgPSBKU1ZhbHVlOjpkZWNvZGUoYml0d2lzZV9jYXN0PHVpbnQzMl90PihhcmcudG9GbG9h
dChnbG9iYWxPYmplY3QpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXYXNt
OjpUeXBlS2luZDo6RjY0OgotICAgICAgICAgICAgYXJnID0gSlNWYWx1ZTo6ZGVjb2RlKGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4oYXJnLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpWb2lkOgotICAgICAgICBj
YXNlIFdhc206OlR5cGVLaW5kOjpGdW5jOgotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpS
ZWZOdWxsOgotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpSZWY6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9CisgICAgICAgIHVpbnQ2NF90
IHZhbHVlID0gZnJvbUpTVmFsdWUoZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnQoYXJn
SW5kZXgpLCBjYWxsRnJhbWUtPmFyZ3VtZW50KGFyZ0luZGV4KSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgICAgICBib3hlZEFyZ3Mu
YXBwZW5kKGFyZyk7CisgICAgICAgIGJveGVkQXJncy5hcHBlbmQoSlNWYWx1ZTo6ZGVjb2RlKHZh
bHVlKSk7CiAgICAgfQogCiAgICAgLy8gV2hlbiB3ZSBkb24ndCB1c2UgZmFzdCBUTFMgdG8gc3Rv
cmUgdGhlIGNvbnRleHQsIHRoZSBKUwpAQCAtMTUyLDEwICsxMTAsNiBAQCBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LAogICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkpOwogICAgIEFT
U0VSVCgmd2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5jZSgpID09IHZtLndhc21Db250
ZXh0LmxvYWQoKSk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1FbnRyeVRvV2Fz
bSh3YXNtRnVuY3Rpb24tPmpzRW50cnlwb2ludChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpOwotICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBz
dXJlIHRoaXMgaXMgaW4gYSByZWdpc3RlciBvciBvbiB0aGUgc3RhY2sgc2luY2UgaXQncyBzdG9y
ZWQgaW4gVmVjdG9yPEpTVmFsdWU+LgotICAgIC8vIFRoaXMgcHJvYmFibHkgaXNuJ3Qgc3RyaWN0
bHkgbmVjZXNzYXJ5LCBzaW5jZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlvbiogc2hvdWxkIGtlZXAg
dGhlIGluc3RhbmNlCi0gICAgLy8gYWxpdmUuIEJ1dCBpdCdzIGdvb2QgaHlnaWVuZS4KLSAgICBp
bnN0YW5jZS0+dXNlKCk7CiAgICAgaWYgKHByZXZXYXNtSW5zdGFuY2UgIT0gd2FzbUluc3RhbmNl
KSB7CiAgICAgICAgIC8vIFRoaXMgaXMganVzdCBmb3Igc29tZSBleHRyYSBzYWZldHkgaW5zdGVh
ZCBvZiBsZWF2aW5nIGEgY2FjaGVkCiAgICAgICAgIC8vIHZhbHVlIGluIHRoZXJlLiBJZiB3ZSBl
dmVyIGZvcmdldCB0byBzZXQgdGhlIHZhbHVlIHRvIGJlIGEgcmVhbApAQCAtMTY4LDYgKzEyMiwx
MSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHZtLndhc21Db250ZXh0LnN0b3JlKHBy
ZXZXYXNtSW5zdGFuY2UsIHZtLnNvZnRTdGFja0xpbWl0KCkpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAKKyAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlz
IGluIGEgcmVnaXN0ZXIgb3Igb24gdGhlIHN0YWNrIHNpbmNlIGl0J3Mgc3RvcmVkIGluIFZlY3Rv
cjxKU1ZhbHVlPi4KKyAgICAvLyBUaGlzIHByb2JhYmx5IGlzbid0IHN0cmljdGx5IG5lY2Vzc2Fy
eSwgc2luY2UgdGhlIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHNob3VsZCBrZWVwIHRoZSBpbnN0YW5j
ZQorICAgIC8vIGFsaXZlLiBCdXQgaXQncyBnb29kIGh5Z2llbmUuCisgICAgaW5zdGFuY2UtPnVz
ZSgpOworCiAgICAgcmV0dXJuIHJhd1Jlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4
IGRiNDA5MmFkNjk0ODJmN2EwOWQzYmUxZjc1MjM0MjJkOWQ1YWYxM2QuLmY3YjA4N2JmNTg5MmJm
MjZiZmU2M2U1ZTM4Y2ZhZDIwMmJhYmEyMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTM3LDYg
KzM3LDcgQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5o
IgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oIgpAQCAtMTMwLDYgKzEzMSw3IEBAIHZvaWQgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmxpbmtJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2Jq
ZWN0KiBpCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjoKICAgICAg
ICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDoKICAgICAgICAgY2FzZSBXYXNtOjpF
eHRlcm5hbEtpbmQ6OlRhYmxlOgorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RXhj
ZXB0aW9uOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxL
aW5kOjpNZW1vcnk6CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTM2Myw3ICszNjUsNyBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU09iamVjdCogaQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBXYXNtOjpF
eHRlcm5hbEtpbmQ6OlRhYmxlOiB7Ci0gICAgICAgICAgICAvLyA3LiBPdGhlcndpc2UgKGkgaXMg
YSB0YWJsZSBpbXBvcnQpOgorICAgICAgICAgICAgLy8gNy4gSWYgaSBpcyBhIHRhYmxlIGltcG9y
dDoKICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0
PEpTV2ViQXNzZW1ibHlUYWJsZSo+KHZtLCB2YWx1ZSk7CiAgICAgICAgICAgICAvLyBpLiBJZiB2
IGlzIG5vdCBhIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5M
aW5rRXJyb3IuCiAgICAgICAgICAgICBpZiAoIXRhYmxlKQpAQCAtMzk0LDYgKzM5NiwyMiBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU09iamVjdCogaQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAor
ICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RXhjZXB0aW9uOiB7CisgICAgICAgICAg
ICBKU1dlYkFzc2VtYmx5VGFnKiB0YWcgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlUYWcq
Pih2bSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKCF0YWcpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwg
dm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgIlRhZyBpbXBvcnQiLCAiaXMgbm90IGFuIGlu
c3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhZyIpKSk7CisKKyAgICAgICAgICAgIFdhc206OlNpZ25h
dHVyZUluZGV4IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBv
cnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOworICAgICAgICAg
ICAgVU5VU0VEX1ZBUklBQkxFKGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpOworCisgICAgICAgICAg
ICBpZiAoZXhwZWN0ZWRTaWduYXR1cmVJbmRleCAhPSB0YWctPnRhZygpLnNpZ25hdHVyZSgpLmlu
ZGV4KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwg
ImltcG9ydGVkIFRhZyIsICJzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgaW1wb3J0ZWQgV2Vi
QXNzZW1ibHkgVGFnJ3Mgc2lnbmF0dXJlIikpKTsKKworICAgICAgICAgICAgbV9pbnN0YW5jZS0+
aW5zdGFuY2UoKS5hZGRUYWcodGFnLT50YWcoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwog
ICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTQyMSw2ICs0MzksOSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCog
aQogICAgICAgICB9CiAgICAgfQogCisgICAgZm9yIChXYXNtOjpTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCA6IG1vZHVsZUluZm9ybWF0aW9uLmludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJl
SW5kaWNlcykKKyAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5hZGRUYWcoV2FzbTo6VGFn
OjpjcmVhdGUoV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkp
LmxlYWtSZWYoKSk7CisKICAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50ID0gY29kZUJs
b2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7CiAgICAgYXV0byBtYWtlRnVuY3Rpb25XcmFwcGVy
ID0gWyZdICh1aW50MzJfdCBpbmRleCkgLT4gSlNWYWx1ZSB7CiAgICAgICAgIC8vIElmIHdlIGFs
cmVhZHkgbWFkZSBhIHdyYXBwZXIsIGRvIG5vdCBtYWtlIGEgbmV3IG9uZS4KQEAgLTU1Nyw2ICs1
NzgsMTAgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlua0ltcGwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGkKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpF
eGNlcHRpb246IHsKKyAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1dlYkFzc2VtYmx5VGFn
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5tX3dlYkFzc2VtYmx5VGFn
U3RydWN0dXJlLmdldChnbG9iYWxPYmplY3QpLCBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLnRhZyhl
eHAua2luZEluZGV4KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICB9
CiAKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KGV4cC5maWVsZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iMzEyMTEwMzc0NTBjOGE0YjRmMzc2YjFjYWRkYzk4ZGFhMTFjMDFlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlUYWdDb25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIK
KyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcu
aCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OnNfaW5mbyA9
IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKSB9OworCitzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTihjYWxsSlNXZWJBc3NlbWJseVRhZyk7CitzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFnKTsKKworSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWcsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICAKKyAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2Vi
QXNzZW1ibHkuVGFnIGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlIHRhZyB0eXBlIGFzIHRoZSBmaXJz
dCBhcmd1bWVudC4iX3MpOworCisgICAgSlNWYWx1ZSB0YWdUeXBlVmFsdWUgPSBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgc2lnbmF0dXJlT2JqZWN0ID0gdGFnVHlwZVZhbHVl
LmdldChnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJhbWV0ZXJz
Il9zKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlmICgh
c2lnbmF0dXJlT2JqZWN0LmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWcgY29uc3RydWN0b3IgZXhw
ZWN0cyBhIHRhZyB0eXBlIHdpdGggdGhlICdwYXJhbWV0ZXJzJyBwcm9wZXJ0eS4iX3MpOworCisg
ICAgVmVjdG9yPFdhc206OlR5cGU+IHBhcmFtZXRlcnM7CisgICAgZm9yRWFjaEluSXRlcmFibGUo
Z2xvYmFsT2JqZWN0LCBzaWduYXR1cmVPYmplY3QsIFsmXSAoYXV0byYgdm0sIGF1dG8qIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBuZXh0VHlwZSkgLT4gdm9pZCB7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBXYXNtOjpUeXBlIHR5cGU7Cisg
ICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZyA9IG5leHRUeXBlLnRvV1RGU3RyaW5nKGdsb2JhbE9i
amVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAg
ICAgIGlmICh2YWx1ZVN0cmluZyA9PSAiaTMyIl9zKQorICAgICAgICAgICAgdHlwZSA9IFdhc206
OlR5cGVzOjpJMzI7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09ICJpNjQiX3MpCisg
ICAgICAgICAgICB0eXBlID0gV2FzbTo6VHlwZXM6Okk2NDsKKyAgICAgICAgZWxzZSBpZiAodmFs
dWVTdHJpbmcgPT0gImYzMiJfcykKKyAgICAgICAgICAgIHR5cGUgPSBXYXNtOjpUeXBlczo6RjMy
OworICAgICAgICBlbHNlIGlmICh2YWx1ZVN0cmluZyA9PSAiZjY0Il9zKQorICAgICAgICAgICAg
dHlwZSA9IFdhc206OlR5cGVzOjpGNjQ7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09
ICJhbnlmdW5jIl9zKQorICAgICAgICAgICAgdHlwZSA9IFdhc206OlR5cGVzOjpGdW5jcmVmOwor
ICAgICAgICBlbHNlIGlmICh2YWx1ZVN0cmluZyA9PSAiZXh0ZXJucmVmIl9zKQorICAgICAgICAg
ICAgdHlwZSA9IFdhc206OlR5cGVzOjpFeHRlcm5yZWY7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LlRh
ZyBjb25zdHJ1Y3RvciBleHBlY3RzIHRoZSAncGFyYW1ldGVycycgZmllbGQgb2YgdGhlIGZpcnN0
IGFyZ3VtZW50IHRvIGJlIGEgc2VxdWVuY2Ugb2YgV2ViQXNzZW1ibHkgdmFsdWUgdHlwZXMuIl9z
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKHR5cGUpOworICAgIH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisKKyAgICBSZWZQdHI8V2FzbTo6U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBXYXNtOjpTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6c2lnbmF0dXJlRm9yKHsgfSwgcGFyYW1ldGVycyk7CisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0NfR0VUX0RFUklWRURfU1RSVUNUVVJFKHZtLCB3ZWJBc3Nl
bWJseVRhZ1N0cnVjdHVyZSwgYXNPYmplY3QoY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSksIGNhbGxG
cmFtZS0+anNDYWxsZWUoKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVl
OjplbmNvZGUoSlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSwgV2FzbTo6VGFnOjpjcmVhdGUoKnNpZ25hdHVyZSkuZ2V0KCkpKSk7Cit9CisKK0pTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihjYWxsSlNXZWJBc3NlbWJseVRhZywgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1
bmN0aW9uVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWciKSk7
Cit9CisKK0pTV2ViQXNzZW1ibHlUYWcqIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OmNyZWF0
ZVRhZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Y29uc3QgV2FzbTo6VGFnJiB0YWcpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2Jq
ZWN0KiBuZXdUYXJnZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgpKTsKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUodm0sIHdlYkFz
c2VtYmx5VGFnU3RydWN0dXJlLCBuZXdUYXJnZXQsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIHRhZykpOworfQorCitXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKiBXZWJB
c3NlbWJseVRhZ0NvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCit7CisgICAgYXV0byog
Y29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVRhZ0Nv
bnN0cnVjdG9yPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcih2bSwgc3RydWN0
dXJlKTsKKyAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUp
OworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseVRh
Z0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0
aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5
VGFnQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlUYWdQcm90
b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgMSwgIlRh
ZyJfcywgUHJvcGVydHlBZGRpdGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFuc2l0aW9uKTsK
KyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBwcm90b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKK30K
KworV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvcihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBj
YWxsSlNXZWJBc3NlbWJseVRhZywgY29uc3RydWN0SlNXZWJBc3NlbWJseVRhZykKK3sKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0
cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0Nv
bnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFlMmYxZDgwNmU5MDIxZWQ4NTc1ZmFjNWIzODE2YzEz
OTlhMzE1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisjaW5j
bHVkZSAiV2FzbU9wcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJs
eVRhZzsKK2NsYXNzIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlOworCituYW1lc3BhY2UgV2FzbSB7
CitjbGFzcyBUYWc7Cit9CisKK2NsYXNzIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IgZmluYWwg
OiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5h
bEZ1bmN0aW9uIEJhc2U7CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvciog
Y3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqKTsKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUpOworCisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWcqIGNyZWF0ZVRhZyhKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSosIGNvbnN0IFdhc206OlRhZyYpOworCisgICAgREVDTEFSRV9J
TkZPOworCitwcml2YXRlOgorICAgIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IoVk0mLCBTdHJ1
Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlUYWdQcm90
b3R5cGUqKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3Nl
bWJseVRhZ0NvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDkzZDQxN2MxOGFjODRhNzI5NGQyZTkxNDJhNTQzMzFmMjYzMDQwNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFn
UHJvdG90eXBlLmNwcApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJB
c3NlbWJseVRhZ1Byb3RvdHlwZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5j
bHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisKK25h
bWVzcGFjZSBKU0Mgeworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1i
bHlUYWdQcm90b0Z1bmNUeXBlKTsKK30KKworI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnUHJvdG90
eXBlLmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2Vt
Ymx5VGFnUHJvdG90eXBlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5UYWciLCAmQmFzZTo6c19p
bmZvLCAmcHJvdG90eXBlVGFibGVXZWJBc3NlbWJseVRhZywgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSkgfTsKKworLyogU291cmNlIGZvciBXZWJB
c3NlbWJseVRhZ1Byb3RvdHlwZS5sdXQuaAorIEBiZWdpbiBwcm90b3R5cGVUYWJsZVdlYkFzc2Vt
Ymx5VGFnCisgdHlwZSAgIHdlYkFzc2VtYmx5VGFnUHJvdG9GdW5jVHlwZSAgIEZ1bmN0aW9uIDAK
KyBAZW5kCisgKi8KKworCitXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSogV2ViQXNzZW1ibHlUYWdQ
cm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit7CisgICAgYXV0byogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
V2ViQXNzZW1ibHlUYWdQcm90b3R5cGU+KHZtLmhlYXApKSBXZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZSh2bSwgc3RydWN0dXJlKTsKKyAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBy
ZXR1cm4gb2JqZWN0OworfQorCitTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJU
KGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RS
QU5TSVRJT04oKTsKK30KKworV2ViQXNzZW1ibHlUYWdQcm90b3R5cGU6OldlYkFzc2VtYmx5VGFn
UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCit7Cit9CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWcq
IGdldFRhZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKFVOTElLRUxZKCF0aGlzVmFsdWUuaXND
ZWxsKCkpKSB7CisgICAgICAgIHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVh
dGVOb3RBbk9iamVjdEVycm9yKGdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlKSk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKyAgICBhdXRvKiB0YWcgPSBqc0R5bmFtaWNDYXN0PEpTV2Vi
QXNzZW1ibHlUYWcqPih2bSwgdGhpc1ZhbHVlLmFzQ2VsbCgpKTsKKyAgICBpZiAoTElLRUxZKHRh
ZykpCisgICAgICAgIHJldHVybiB0YWc7CisgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIldlYkFzc2VtYmx5LlRhZyBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1UYWcgb2Jq
ZWN0Il9zKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKHdlYkFzc2VtYmx5VGFnUHJvdG9GdW5jVHlwZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBKU1dlYkFzc2VtYmx5VGFnKiBqc1RhZyA9IGdldFRhZyhnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRhZyA9IGpzVGFn
LT50YWcoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB0YWcucGFyYW1ldGVyQ291bnQoKTsgKytpKQorICAgICAgICBhcmdM
aXN0LmFwcGVuZChXYXNtOjp0eXBlVG9TdHJpbmcodm0sIHRhZy5wYXJhbWV0ZXIoaSkua2luZCkp
OworCisgICAgaWYgKFVOTElLRUxZKGFyZ0xpc3QuaGFzT3ZlcmZsb3dlZCgpKSkgeworICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAg
ICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgfQorCisgICAgSlNBcnJheSogcGFyYW1l
dGVycyA9IGNvbnN0cnVjdEFycmF5KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8QXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBhcmdMaXN0KTsKKyAgICBKU09iamVjdCogdHlwZSA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKSwgMSk7CisgICAgdHlwZS0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAicGFyYW1ldGVycyIpLCBwYXJhbWV0ZXJzKTsKKworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0eXBlKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZjI0MzJmOWM4OWJkY2RhN2RjN2I5NDE4NDc2MmIyNTI2YjU5YmI2YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
VGFnUHJvdG90eXBlLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
eworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgU3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0u
cGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlUYWdQcm90
b3R5cGUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseVRh
Z1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
KTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCmluZGV4IDRmOGRkOWUzZDIxMzQz
NTAwMDAwNmUyNDE0NmIwMTk0YzlhYzg4ZjEuLmE0MzUxMGY0Zjg0NzMwMzg2NDNjMTY1YzNjMzA4
MTQ4ZjA3NTA0YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20u
anNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24KQEAgLTIzLDM0
ICsyMywzOCBAQAogICAgICJibG9ja190eXBlIjogWyJpMzIiLCAiaTY0IiwgImYzMiIsICJmNjQi
LCAidm9pZCIsICJleHRlcm5yZWYiLCAiZnVuY3JlZiJdLAogICAgICJyZWZfdHlwZSI6IFsiZnVu
Y3JlZiIsICJleHRlcm5yZWYiLCAidHlwZV9pZHgiXSwKICAgICAiZXh0ZXJuYWxfa2luZCI6IHsK
LSAgICAgICAgIkZ1bmN0aW9uIjogeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDAgfSwKLSAg
ICAgICAgIlRhYmxlIjogICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDEgfSwKLSAgICAg
ICAgIk1lbW9yeSI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDIgfSwKLSAgICAgICAg
Ikdsb2JhbCI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDMgfQorICAgICAgICAiRnVu
Y3Rpb24iOiAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMCB9LAorICAgICAgICAiVGFi
bGUiOiAgICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMSB9LAorICAgICAgICAiTWVt
b3J5IjogICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMiB9LAorICAgICAgICAiR2xv
YmFsIjogICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMyB9LAorICAgICAgICAiRXhj
ZXB0aW9uIjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogNCB9CiAgICAgfSwKICAgICAi
c2VjdGlvbiIgOiB7Ci0gICAgICAgICJUeXBlIjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAgMSwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIHNpZ25hdHVyZSBkZWNsYXJhdGlv
bnMiIH0sCi0gICAgICAgICJJbXBvcnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAgMiwgImRlc2NyaXB0aW9uIjogIkltcG9ydCBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJG
dW5jdGlvbiI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMywgImRlc2NyaXB0aW9u
IjogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAgIlRhYmxlIjogICAgeyAidHlw
ZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA0LCAiZGVzY3JpcHRpb24iOiAiSW5kaXJlY3QgZnVu
Y3Rpb24gdGFibGUgYW5kIG90aGVyIHRhYmxlcyIgfSwKLSAgICAgICAgIk1lbW9yeSI6ICAgeyAi
dHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA1LCAiZGVzY3JpcHRpb24iOiAiTWVtb3J5IGF0
dHJpYnV0ZXMiIH0sCi0gICAgICAgICJHbG9iYWwiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAgNiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlvbnMiIH0sCi0gICAg
ICAgICJFeHBvcnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNywgImRlc2Ny
aXB0aW9uIjogIkV4cG9ydHMiIH0sCi0gICAgICAgICJTdGFydCI6ICAgIHsgInR5cGUiOiAidmFy
dWludDciLCAidmFsdWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IGZ1bmN0aW9uIGRlY2xh
cmF0aW9uIiB9LAotICAgICAgICAiRWxlbWVudCI6ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZh
bHVlIjogIDksICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9uIiB9LAotICAgICAgICAi
Q29kZSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTAsICJkZXNjcmlwdGlv
biI6ICJGdW5jdGlvbiBib2RpZXMgKGNvZGUpIiB9LAotICAgICAgICAiRGF0YSI6ICAgICB7ICJ0
eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlwdGlvbiI6ICJEYXRhIHNlZ21l
bnRzIiB9CisgICAgICAgICJUeXBlIjogICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogIDEsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBzaWduYXR1cmUgZGVjbGFyYXRpb25zIiB9
LAorICAgICAgICAiSW1wb3J0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAy
LCAiZGVzY3JpcHRpb24iOiAiSW1wb3J0IGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIkZ1bmN0
aW9uIjogIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMywgImRlc2NyaXB0aW9uIjog
IkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIlRhYmxlIjogICAgIHsgInR5cGUi
OiAidmFydWludDciLCAidmFsdWUiOiAgNCwgImRlc2NyaXB0aW9uIjogIkluZGlyZWN0IGZ1bmN0
aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMiIH0sCisgICAgICAgICJNZW1vcnkiOiAgICB7ICJ0
eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDUsICJkZXNjcmlwdGlvbiI6ICJNZW1vcnkgYXR0
cmlidXRlcyIgfSwKKyAgICAgICAgIkdsb2JhbCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAgNiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlvbnMiIH0sCisgICAg
ICAgICJFeHBvcnQiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDcsICJkZXNj
cmlwdGlvbiI6ICJFeHBvcnRzIiB9LAorICAgICAgICAiU3RhcnQiOiAgICAgeyAidHlwZSI6ICJ2
YXJ1aW50NyIsICJ2YWx1ZSI6ICA4LCAiZGVzY3JpcHRpb24iOiAiU3RhcnQgZnVuY3Rpb24gZGVj
bGFyYXRpb24iIH0sCisgICAgICAgICJFbGVtZW50IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3Iiwg
InZhbHVlIjogIDksICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9uIiB9LAorICAgICAg
ICAiQ29kZSI6ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEwLCAiZGVzY3Jp
cHRpb24iOiAiRnVuY3Rpb24gYm9kaWVzIChjb2RlKSIgfSwKKyAgICAgICAgIkRhdGEiOiAgICAg
IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMSwgImRlc2NyaXB0aW9uIjogIkRhdGEg
c2VnbWVudHMiIH0sCisgICAgICAgICJEYXRhQ291bnQiOiB7ICJ0eXBlIjogInZhcnVpbnQ3Iiwg
InZhbHVlIjogMTIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgZGF0YSBzZWdtZW50cyIgfSwK
KyAgICAgICAgIkV4Y2VwdGlvbiI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMywg
ImRlc2NyaXB0aW9uIjogIkV4Y2VwdGlvbiBkZWNsYXJhdGlvbnMiIH0KICAgICB9LAogICAgICJv
cGNvZGUiOiB7CiAgICAgICAgICJ1bnJlYWNoYWJsZSI6ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
Y29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMCwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAidHJhcCBpbW1lZGlhdGVseSIgfSwKKyAgICAgICAgIm5vcCI6ICAgICAgICAg
ICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAxLCAicmV0dXJu
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJubyBvcGVyYXRpb24iIH0sCiAgICAg
ICAgICJibG9jayI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2
YWx1ZSI6ICAgMiwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAi
cGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjog
W3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVn
aW4gYSBzZXF1ZW5jZSBvZiBleHByZXNzaW9ucywgeWllbGRpbmcgMCBvciAxIHZhbHVlcyIgfSwK
ICAgICAgICAgImxvb3AiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwg
ICAgInZhbHVlIjogICAzLCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAg
ICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlh
dGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJiZWdpbiBhIGJsb2NrIHdoaWNoIGNhbiBhbHNvIGZvcm0gY29udHJvbCBmbG93IGxvb3BzIiB9
LAogICAgICAgICAiaWYiOiAgICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wi
LCAgICAidmFsdWUiOiAgIDQsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAg
ICAgICAgInBhcmFtZXRlciI6IFsiYm9vbCJdLCAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogImJlZ2luIGlmIGV4cHJlc3Npb24iIH0sCiAgICAgICAgICJlbHNlIjogICAgICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNSwgInJldHVybiI6IFsi
Y29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gZWxzZSBleHByZXNzaW9uIG9mIGlm
IiB9LAotICAgICAgICAic2VsZWN0IjogICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRy
b2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAgImlt
bWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVlcyBiYXNlZCBvbiBjb25kaXRpb24iIH0sCi0g
ICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAg
ICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAgICAiaW1tZWRpYXRl
IjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291bnQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
bnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldCB0eXBlcyB2ZWN0b3IifSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJu
YW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0eXBlIjogInZhbHVlX3R5cGUqIiwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0YXJnZXQg
dHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Ygc2VsZWN0IGluc3RydWN0aW9uIn1dLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRo
ZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRoIHRoZSBhbm5vdGF0aW9uIGZvciByZXN1bHQg
dHlwZXMiIH0sCisgICAgICAgICJ0cnkiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
Y29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNiwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAg
ICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiYmVnaW4gdHJ5IGV4cHJlc3Npb24iIH0sCisgICAgICAgICJjYXRjaCI6ICAg
ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNywgInJl
dHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4i
LCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gY2F0Y2ggZXhwcmVz
c2lvbiBvZiB0cnkiIH0sCisgICAgICAgICJ0aHJvdyI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdv
cnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgOCwgInJldHVybiI6IFsiY29udHJvbCJdLCAg
ICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4iLCAidHlwZSI6ICJ2YXJ1aW50MzIi
fV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAidGhyb3cgZXhjZXB0aW9uIiB9LAorICAgICAgICAicmV0aHJvdyI6
ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDksICJy
ZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVs
YXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInJldGhyb3cgdGhlIGV4Y2Vw
dGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayIgfSwKICAgICAgICAgImJyIjogICAgICAgICAg
ICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDEyLCAicmV0dXJu
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZl
X2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJicmVhayB0aGF0IHRhcmdldHMgYW4g
b3V0ZXIgbmVzdGVkIGJsb2NrIiB9LAogICAgICAgICAiYnJfaWYiOiAgICAgICAgICAgICAgIHsg
ImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTMsICJyZXR1cm4iOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAi
dHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogImNvbmRpdGlvbmFsIGJyZWFrIHRoYXQgdGFyZ2V0cyBh
biBvdXRlciBuZXN0ZWQgYmxvY2siIH0sCiAgICAgICAgICJicl90YWJsZSI6ICAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxNCwgInJldHVybiI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfY291bnQiLCAg
ICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdl
dF90YWJsZSJ9LApAQCAtNTgsOCArNjIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogImRlZmF1bHRfdGFy
Z2V0IiwgInR5cGUiOiAidmFydWludDMyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhbiBvdXRlciBibG9jayBvciBsb29wIHRv
IHdoaWNoIHRvIGJyZWFrIGluIHRoZSBkZWZhdWx0IGNhc2UifV0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYnJhbmNoIHRhYmxlIGNv
bnRyb2wgZmxvdyBjb25zdHJ1Y3QiIH0sCiAgICAgICAgICJyZXR1cm4iOiAgICAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxNSwgInJldHVybiI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAicmV0dXJuIHplcm8gb3Igb25lIHZhbHVlIGZyb20g
dGhpcyBmdW5jdGlvbiIgfSwKKyAgICAgICAgImRlbGVnYXRlIjogICAgICAgICAgICB7ICJjYXRl
Z29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI0LCAicmV0dXJuIjogWyJjb250cm9sIl0s
ICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2RlcHRoIiwgInR5cGUi
OiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJkZWxlZ2F0ZSB0byBhIHBhcmVudCB0cnkgYmxvY2siIH0sCisg
ICAgICAgICJjYXRjaF9hbGwiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAg
ICJ2YWx1ZSI6ICAyNSwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAg
ICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRl
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
Y2F0Y2ggZXhjZXB0aW9ucyByZWdhcmRsZXNzIG9mIHRhZyIgfSwKICAgICAgICAgImRyb3AiOiAg
ICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI2LCAi
cmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBb
ImFueSJdLCAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJpZ25vcmUgdmFsdWUiIH0s
Ci0gICAgICAgICJub3AiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIs
ICAgICJ2YWx1ZSI6ICAgMSwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRp
YXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAibm8gb3BlcmF0aW9uIiB9LAorICAgICAgICAic2VsZWN0IjogICAgICAgICAgICAgIHsgImNh
dGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4iOiBbInByZXYiXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9v
bCJdLCAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVlcyBiYXNlZCBvbiBj
b25kaXRpb24iIH0sCisgICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAgeyAiY2F0ZWdvcnki
OiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJldiJdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAg
ICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291bnQiLCAidHlwZSI6
ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldCB0eXBlcyB2ZWN0
b3IifSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyJuYW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0eXBlIjogInZhbHVl
X3R5cGUqIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJ0YXJnZXQgdHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Ygc2VsZWN0IGluc3Ry
dWN0aW9uIn1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogInRoZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRoIHRoZSBhbm5vdGF0
aW9uIGZvciByZXN1bHQgdHlwZXMiIH0sCiAgICAgICAgICJlbmQiOiAgICAgICAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMSwgInJldHVybiI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZW5kIGEgYmxvY2ssIGxvb3AsIG9yIGlmIiB9LAog
ICAgICAgICAiaTMyLmNvbnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAg
ICAidmFsdWUiOiAgNjUsICJyZXR1cm4iOiBbImkzMiJdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0
ZSI6IFt7Im5hbWUiOiAidmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJpbnQzMiJ9XSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
ImEgY29uc3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTMyIiB9LAogICAgICAgICAiaTY0LmNv
bnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAidmFsdWUiOiAgNjYs
ICJyZXR1cm4iOiBbImk2NCJdLCAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6
IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAi
dmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJpbnQ2NCJ9XSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImEgY29uc3RhbnQgdmFs
dWUgaW50ZXJwcmV0ZWQgYXMgaTY0IiB9LApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGE5NDVhMGRhMzNiODNmNmJhZjM2Y2NlNzA3ZDdjMDcxYTQ5
MWE5NzAuLmEyZmZmMWI3ZGNkNGUwMGNjODFkZGQzNWZlYzBhOWY3MzlhN2JkMzQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBA
QAorMjAyMS0xMC0wNSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBJbXBsZW1lbnQgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlvbiBoYW5kbGluZyBwcm9wb3Nh
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5Njgx
CisgICAgICAgIDxyZGFyOi8vODE2MDMzODc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzOgorCiAy
MDIxLTEwLTA2ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBJ
bXBsZW1lbnQgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3B1c2gtYXBpLyNyZWNlaXZpbmctYS1wdXNo
LW1lc3NhZ2UKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMg
Yi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IGUwODE2ZGMwNTYxYjE4
MGE5ZWZiNjY3OGRiODJjYzY0NmUxOWI0ODEuLmRkZjk0N2RlYjc3MjM4MmIyODk2MDk3ZGE2NGMx
M2I4MGNhMmFmMTggMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVz
dHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtMTIyNywxNiAr
MTIyNywyMSBAQCBkZWYgcnVuV2ViQXNzZW1ibHlTdWl0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKQogICAgIG1vZHVsZXMgPSBEaXJbV0FTTVRFU1RTX1BBVEggKyAiKi5qcyJdLm1hcCB7
IHxmfCBGaWxlLmJhc2VuYW1lKGYpIH0KICAgICBwcmVwYXJlRXh0cmFBYnNvbHV0ZUZpbGVzKFdB
U01URVNUU19QQVRILCBbIndhc20uanNvbiJdKQogICAgIHByZXBhcmVFeHRyYVJlbGF0aXZlRmls
ZXMobW9kdWxlcy5tYXAgeyB8ZnwgIi4uLyIgKyBmIH0sICRjb2xsZWN0aW9uKQotICAgIHJ1bigi
ZGVmYXVsdC13YXNtIiwgIi1tIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykpCisgICAgaWYgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zWzBdID09IDpub19t
b2R1bGUKKyAgICAgIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucy5zaGlmdAorICAgIGVsc2UK
KyAgICAgIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucy51bnNoaWZ0ICItbSIKKyAgICBlbmQK
KyAgICBydW4oImRlZmF1bHQtd2FzbSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKQogICAgIGlmICRtb2RlICE9ICJxdWljayIKLSAgICAgICAgcnVuKCJ3YXNt
LW5vLWNqaXQteWVzLXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250
ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyIiwgIi1tIiwgKihGVExf
T1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQot
ICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLW0iLCAiLS1mb3JjZUNvZGVCbG9j
a1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxl
SXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgIi0tdmVyaWZ5R0M9dHJ1ZSIsICooRlRMX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tbm8tdGxz
LWNvbnRleHQiLCAiLW0iLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAqKEZU
TF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3
YXNtLXNsb3ctbWVtb3J5IiwgIi1tIiwgIi0tdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNl
IiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAg
IHJ1bigid2FzbS1iMyIsICItbSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFV
c2VzQWlyPWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykpCi0gICAgICAgIHJ1bigid2FzbS1haXIiLCAiLW0iLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2Ui
LCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZU
TF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3
YXNtLWNvbGxlY3QtY29udGludW91c2x5IiwgIi1tIiwgIi0tY29sbGVjdENvbnRpbnVvdXNseT10
cnVlIiwgIi0tdmVyaWZ5R0M9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKSBpZiBzaG91bGRDb2xsZWN0Q29udGludW91c2x5PworICAgICAgICBydW4o
Indhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRl
eHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tZWFnZXIiLCAqKEZUTF9PUFRJT05T
ICsgRUFHRVJfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAg
IHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1
ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0
aW9uPXRydWUiLCAiLS12ZXJpZnlHQz10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1uby10bHMtY29udGV4dCIsICIt
LXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAi
LS11c2VXZWJBc3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWIzIiwgIi0tdXNlV2Fz
bUxMSW50PWZhbHNlIiwgIi0td2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWFpciIsICIt
LXVzZVdhc21MTEludD1mYWxzZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFs
bG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
bnMpKQorICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLS1jb2xsZWN0
Q29udGludW91c2x5PXRydWUiLCAiLS12ZXJpZnlHQz10cnVlIiwgKihGVExfT1BUSU9OUyArIG9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/
CiAgICAgZW5kCiBlbmQKIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3Rz
L0NoYW5nZUxvZwppbmRleCBjZDI3ZDNmYWVkYTY5Y2Q5NGUzMWNiZjBhODMxMTc3MzJmOTg4ZWFl
Li45NzQ2OTEwMGYzM2UyMTMwYTI4MjhhMDVjNjNmYjg4Y2ZlYjEzZDZmIDEwMDY0NAotLS0gYS9K
U1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzNiBA
QAorMjAyMS0xMC0wNSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBJbXBsZW1lbnQgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlvbiBoYW5kbGluZyBwcm9wb3Nh
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5Njgx
CisgICAgICAgIDxyZGFyOi8vODE2MDMzODc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIG5ldyB0ZXN0cyBmb3IgdGhlIGV4Y2VwdGlvbiBoYW5k
bGluZyBhbmQgaW1wb3J0IGEgc2V0IG9mIHRlc3RzIHVzZWQgYnkgVjggaW50byB3YXNtL3Y4Lgor
CisgICAgICAgICogd2FzbS55YW1sOgorICAgICAgICAqIHdhc20vQnVpbGRlci5qczoKKyAgICAg
ICAgKGNvbnN0Ll9pbXBvcnRFeGNlcHRpb25Db250aW51YXRpb24udHlwZS5JbXBvcnQuZmllbGQp
OgorICAgICAgICAoZXhwb3J0LmRlZmF1bHQuQnVpbGRlci5wcm90b3R5cGUuX3JlZ2lzdGVyU2Vj
dGlvbkJ1aWxkZXJzLmNvbnN0LnNlY3Rpb24uaW4uV0FTTS5kZXNjcmlwdGlvbi5zZWN0aW9uLnN3
aXRjaC5zZWN0aW9uLmNhc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUudGhpcy5zZWN0aW9uKToKKyAg
ICAgICAgKGNvbnN0Ll9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbi50eXBlLkV4cG9ydC5maWVs
ZCk6IERlbGV0ZWQuCisgICAgICAgIChjb25zdC5fZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24p
OiBEZWxldGVkLgorICAgICAgICAqIHdhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qczoK
KyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkltcG9ydCk6CisgICAgICAgIChjb25zdC5lbWl0dGVy
cy5FeHBvcnQpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuRXhjZXB0aW9uKToKKyAgICAgICAg
KiB3YXNtL2Fzc2VydC5qczoKKyAgICAgICAgKiB3YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJK
U09OLmpzOgorICAgICAgICAoSW1wb3J0QmVmb3JlVHlwZVNlY3Rpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3YXNtL3N0cmVzcy9jYXRjaC13aXRoLWRlbGVnYXRlLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFz
c2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKGFzc2Vy
dC50aHJvd3MpOgorICAgICAgICAqIHdhc20vc3RyZXNzL2NyZWF0ZS10YWctZnJvbS5qczogQWRk
ZWQuCisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLTIuanM6
IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgIChhc3NlcnQuZXEpOgorICAgICAgICAq
IHdhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0zLmpzOiBBZGRlZC4KKyAgICAg
ICAgKHRlc3QpOgorICAgICAgICAoYXNzZXJ0LmVxKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9l
eGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAg
ICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAgICAgKGluc3RCLm5ldy5XZWJBc3NlbWJseS5JbnN0
YW5jZSk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWxpdmVuZXNzLXRpZXItdXAu
anM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRf
aGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2F0Y2gpOgor
ICAgICAgICAoYXNzZXJ0LmVxLik6CisgICAgICAgIChhc3NlcnQuZXEpOgorICAgICAgICAqIHdh
c20vc3RyZXNzL2V4Y2VwdGlvbi1tdWx0aXBsZS1pbnN0YW5jZXMuanM6IEFkZGVkLgorICAgICAg
ICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNz
ZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY29uc3QubW9kdWxlLm5ldy5XZWJBc3NlbWJs
eS5Nb2R1bGUpOgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRf
aGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW5zdC5leHBv
cnRzLnRocm93KToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLWRlbGVn
YXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVh
cmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLnRlc3RT
aW1wbGVUaHJvd0RlbGVnYXRlKToKKyAgICAgICAgKHRlc3RUaHJvd0RlbGVnYXRlU2tpcCk6Cisg
ICAgICAgICh0ZXN0RGVsZWdhdGVDYWxsZXIpOgorICAgICAgICAodGVzdFNpbXBsZURlbGVnYXRl
TWVyZ2UpOgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtdGhyb3ctY2F0
Y2guanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFy
ZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUudGVzdFNp
bXBsZVRyeUNhdGNoKToKKyAgICAgICAgKHRlc3RTaW1wbGVUcnlDYXRjaEFsbCk6CisgICAgICAg
ICh0ZXN0Q2FsbFRyeUNhdGNoKToKKyAgICAgICAgKHRlc3RDYWxsVHJ5Q2F0Y2hBbGwpOgorICAg
ICAgICAodGVzdFNpbXBsZVRyeUNhdGNoVmFsdWUpOgorICAgICAgICAodGVzdENhbGxUcnlDYXRj
aFZhbHVlKToKKyAgICAgICAgKHRlc3RTdGFja1RyeUNhdGNoKToKKyAgICAgICAgKHRlc3RMaXZl
QWZ0ZXJUcnlDYXRjaCk6CisgICAgICAgICh0ZXN0TGl2ZUFmdGVyVHJ5Q2F0Y2hBbGwpOgorICAg
ICAgICAodGVzdFVuaWZ5VHJ5Q2F0Y2hDYXRjaCk6CisgICAgICAgICh0ZXN0VW5pZnlUcnlDYXRj
aENhdGNoQWxsKToKKyAgICAgICAgKHRlc3RVbmlmeVRyeU5vVGhyb3cpOgorICAgICAgICAodGVz
dFVuaWZ5VHJ5Tm9DYXRjaCk6CisgICAgICAgICh0ZXN0TmVzdGVkQ2F0Y2gpOgorICAgICAgICAq
IHdhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLWNhdGNoYWxsLXJl
dGhyb3cuanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBw
ZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2Fs
bGJhY2spOgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10
by13YXNtLWNhdGNoYWxsLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20u
c3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJl
ZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3du
LWZyb20tanMtdG8td2FzbS5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9t
LnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFy
ZWRfaGVyZS5jYWxsYmFjayk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93
bi1vdXQtb2Ytd2FzbS5qczogQWRkZWQuCisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9u
LXRocm93bi1vdmVyLXdhc20uanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJv
bS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVh
cmVkX2hlcmUuY2FsbGJhY2spOgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi10cmFw
LmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVk
X2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLnRlc3RDYW5u
b3RDYXRjaFVucmVhY2hhYmxlKToKKyAgICAgICAgKHRlc3RDYW5ub3RDYXRjaE9PQik6CisgICAg
ICAgICh0ZXN0V2FzbUFQSVRocm93KToKKyAgICAgICAgKHRlc3RKU0NhdGNoQW5kUmV0aHJvdyk6
CisgICAgICAgICogd2FzbS9zdHJlc3MvcmV0aHJvdy1mcm9tLWNhdGNoLXRvLWNhdGNoLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUu
aW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAg
ICAgICAgKiB3YXNtL3N0cmVzcy9yZXRocm93LXRvLWNhdGNoLmpzOiBBZGRlZC4KKyAgICAgICAg
KGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2Vy
dC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKGFzc2VydC50
aHJvd3MuY2FsbGJhY2spOgorICAgICAgICAoYXNzZXJ0LnRocm93cyk6CisgICAgICAgICogd2Fz
bS9zdHJlc3MvcmV0aHJvdy10by1kZWxlZ2F0ZS10by1jYXRjaC5qczogQWRkZWQuCisgICAgICAg
IChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3Nl
cnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZSk6CisgICAgICAgIChhc3NlcnQuZXEuZXhuLmdl
dEFyZyk6CisgICAgICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAgICAgKGFzc2VydC50aHJvd3Mu
Y2FsbGJhY2spOgorICAgICAgICAoYXNzZXJ0LmVxKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9z
aW1wbGUtZXhwb3J0LWV4Y2VwdGlvbi5qczogQWRkZWQuCisgICAgICAgICogd2FzbS92OC9MSUNF
TlNFOiBBZGRlZC4KKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMtYXBpLmpzOiBBZGRlZC4K
KyAgICAgICAgKFRlc3RJbXBvcnQpOgorICAgICAgICAoVGVzdEltcG9ydEV4cG9ydCk6CisgICAg
ICAgIChUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoVGVzdEV4Y2VwdGlvbkNv
bnN0cnVjdG9yV2l0aFBheWxvYWQpOgorICAgICAgICAoVGVzdENhdGNoSlNFeGNlcHRpb24uanNf
ZnVuYyk6CisgICAgICAgIChqc19mdW5jKToKKyAgICAgICAgKFRlc3RDYXRjaEpTKToKKyAgICAg
ICAgKFRlc3RDYXRjaEpTRXhjZXB0aW9uV2l0aFBheWxvYWQpOgorICAgICAgICAoVGVzdEdldEFy
Zyk6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLWV4cG9ydC5qczogQWRkZWQuCisgICAg
ICAgIChUZXN0RXhwb3J0TXVsdGlwbGUpOgorICAgICAgICAoVGVzdEV4cG9ydE91dE9mQm91bmRz
KToKKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMtZXh0ZXJucmVmLmpzOiBBZGRlZC4KKyAg
ICAgICAgKFRlc3RUaHJvd1JlZk51bGwpOgorICAgICAgICAoVGVzdFRocm93UmVmUGFyYW0pOgor
ICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy1pbXBvcnQuanM6IEFkZGVkLgorICAgICAgICAo
TmV3RXhwb3J0ZWRUYWcpOgorICAgICAgICAoVGVzdEltcG9ydFNpbXBsZSk6CisgICAgICAgIChU
ZXN0SW1wb3J0TWlzc2luZyk6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLXJldGhyb3cu
anM6IEFkZGVkLgorICAgICAgICAoVGVzdFJldGhyb3dJbkNhdGNoKToKKyAgICAgICAgKFRlc3RS
ZXRocm93SW5DYXRjaEFsbCk6CisgICAgICAgIChUZXN0UmV0aHJvd05lc3RlZCk6CisgICAgICAg
IChUZXN0UmV0aHJvd1JlY2F0Y2gpOgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy1zaGFy
ZWQuanM6IEFkZGVkLgorICAgICAgICAoTmV3RXhwb3J0ZWRFeGNlcHRpb24pOgorICAgICAgICAo
VGVzdFNpbmdsZUluc3RhbmNlLmxldC5pbnN0YW5jZS5idWlsZGVyLmluc3RhbnRpYXRlLik6Cisg
ICAgICAgIChUZXN0U2luZ2xlSW5zdGFuY2UpOgorICAgICAgICAoVGVzdE11bHRpSW5zdGFuY2VO
b25TaGFyZWQubGV0Lmluc3RhbmNlMi5idWlsZGVyLmluc3RhbnRpYXRlLik6CisgICAgICAgIChU
ZXN0TXVsdGlJbnN0YW5jZVNoYXJlZC5sZXQuaW5zdGFuY2UyLmJ1aWxkZXIuaW5zdGFudGlhdGUu
KToKKyAgICAgICAgKFRlc3RNdWx0aU1vZHVsZVNoYXJlZC5sZXQuaW5zdGFuY2UyLmJ1aWxkZXIy
Lmluc3RhbnRpYXRlLik6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLXR5cGUtcmVmbGVj
dGlvbi5qczogQWRkZWQuCisgICAgICAgIChUZXN0RXhwb3J0KToKKyAgICAgICAgKFRlc3RJbXBv
cnRFeHBvcnQpOgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy11dGlscy5qczogQWRkZWQu
CisgICAgICAgIChhc3NlcnRXYXNtVGhyb3dzKToKKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlv
bnMuanM6IEFkZGVkLgorICAgICAgICAoVGVzdFRocm93U2ltcGxlKToKKyAgICAgICAgKFRlc3RD
YXRjaFNpbXBsZSk6CisgICAgICAgIChUZXN0VHJhcE5vdENhdWdodCk6CisgICAgICAgIChUZXN0
VHJhcFZpYUpTTm90Q2F1Z2h0LmpzX2ltcG9ydCk6CisgICAgICAgIChUZXN0TWFudWFsbHlUaHJv
d25SdW50aW1lRXJyb3JDYXVnaHQudGhyb3dfZXhjKToKKyAgICAgICAgKFRlc3RNYW51YWxseVRo
cm93blJ1bnRpbWVFcnJvckNhdWdodCk6CisgICAgICAgIChUZXN0RXhuV2l0aFdhc21Qcm90b05v
dENhdWdodC5qc19pbXBvcnQpOgorICAgICAgICAoVGVzdEV4bldpdGhXYXNtUHJvdG9Ob3RDYXVn
aHQpOgorICAgICAgICAoVGVzdFN0YWNrT3ZlcmZsb3dOb3RDYXVnaHQuc3RhY2tfb3ZlcmZsb3cp
OgorICAgICAgICAoVGVzdFN0YWNrT3ZlcmZsb3dOb3RDYXVnaHQpOgorICAgICAgICAoVGVzdFRo
cm93UGFyYW1JKToKKyAgICAgICAgKFRlc3RUaHJvd1BhcmFtRik6CisgICAgICAgIChUZXN0VGhy
b3dQYXJhbUwpOgorICAgICAgICAoVGVzdFRocm93UGFyYW1EKToKKyAgICAgICAgKFRlc3RDYXRj
aENyb3NzRnVuY3Rpb25zLnRocm93X3ZhbHVlKToKKyAgICAgICAgKFRlc3RDYXRjaENyb3NzRnVu
Y3Rpb25zLnRocm93X3N0cmluZyk6CisgICAgICAgIChUZXN0Q2F0Y2hDcm9zc0Z1bmN0aW9ucy50
aHJvd191bmRlZmluZWQpOgorICAgICAgICAoVGVzdENhdGNoQ3Jvc3NGdW5jdGlvbnMudGhyb3df
ZnApOgorICAgICAgICAoVGVzdENhdGNoQ3Jvc3NGdW5jdGlvbnMudGhyb3dfbGFyZ2UpOgorICAg
ICAgICAoVGVzdERlbGVnYXRlTm9UaHJvdyk6CisgICAgICAgIChUZXN0RGVsZWdhdGVUaHJvdyk6
CisgICAgICAgIChUZXN0RGVsZWdhdGVUaHJvd05vQ2F0Y2gpOgorICAgICAgICAoVGVzdERlbGVn
YXRlTWVyZ2UpOgorICAgICAgICAoVGVzdERlbGVnYXRlMSk6CisgICAgICAgIChUZXN0RGVsZWdh
dGVVbnJlYWNoYWJsZSk6CisgICAgICAgIChUZXN0RGVsZWdhdGVUb0NhbGxlcik6CisgICAgICAg
IChUZXN0VW5yZWFjaGFibGVJbkNhdGNoQWxsKToKKyAgICAgICAgKFRlc3RUaHJvd1dpdGhMb2Nh
bCk6CisgICAgICAgIChUZXN0Q2F0Y2hsZXNzVHJ5KToKKyAgICAgICAgKiB3YXNtL3Y4L21qc3Vu
aXQuanM6IEFkZGVkLgorICAgICAgICAoTWpzVW5pdEFzc2VydGlvbkVycm9yKToKKyAgICAgICAg
KE1qc1VuaXRBc3NlcnRpb25FcnJvci5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoY2F0
Y2gpOgorICAgICAgICAoY2xhc3NPZik6CisgICAgICAgIChWYWx1ZU9mKToKKyAgICAgICAgKHBy
ZXR0eVByaW50ZWQpOgorICAgICAgICAocHJldHR5UHJpbnRlZEFycmF5RWxlbWVudCk6CisgICAg
ICAgIChmYWlsV2l0aE1lc3NhZ2UpOgorICAgICAgICAoZm9ybWF0RmFpbHVyZVRleHQpOgorICAg
ICAgICAoZmFpbCk6CisgICAgICAgIChkZWVwT2JqZWN0RXF1YWxzKToKKyAgICAgICAgKGRlZXBF
cXVhbHMpOgorICAgICAgICAoYXNzZXJ0U2FtZSk6CisgICAgICAgIChhc3NlcnROb3RTYW1lKToK
KyAgICAgICAgKGFzc2VydEVxdWFscyk6CisgICAgICAgIChhc3NlcnROb3RFcXVhbHMpOgorICAg
ICAgICAoYXNzZXJ0RXF1YWxzRGVsdGEpOgorICAgICAgICAoYXNzZXJ0QXJyYXlFcXVhbHMpOgor
ICAgICAgICAoYXNzZXJ0UHJvcGVydGllc0VxdWFsKToKKyAgICAgICAgKGFzc2VydFRvU3RyaW5n
RXF1YWxzKToKKyAgICAgICAgKGFzc2VydFRydWUpOgorICAgICAgICAoYXNzZXJ0RmFsc2UpOgor
ICAgICAgICAoYXNzZXJ0TnVsbCk6CisgICAgICAgIChhc3NlcnROb3ROdWxsKToKKyAgICAgICAg
KGV4ZWN1dGVDb2RlKToKKyAgICAgICAgKGNoZWNrRXhjZXB0aW9uKToKKyAgICAgICAgKGFzc2Vy
dFRocm93cyk6CisgICAgICAgIChhc3NlcnRUaHJvd3NFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0
VGhyb3dzQXN5bmMpOgorICAgICAgICAoYXNzZXJ0SW5zdGFuY2VvZik6CisgICAgICAgIChhc3Nl
cnREb2VzTm90VGhyb3cpOgorICAgICAgICAoYXNzZXJ0VW5yZWFjaGFibGUpOgorICAgICAgICAo
YXNzZXJ0Q29udGFpbnMpOgorICAgICAgICAoYXNzZXJ0TWF0Y2hlcyk6CisgICAgICAgIChjb25j
YXRlbmF0ZUVycm9ycyk6CisgICAgICAgIChhc3NlcnRQcm9taXNlUmVzdWx0KToKKyAgICAgICAg
KE9wdGltaXphdGlvblN0YXR1cyk6CisgICAgICAgIChhc3NlcnRVbm9wdGltaXplZCk6CisgICAg
ICAgIChhc3NlcnRPcHRpbWl6ZWQpOgorICAgICAgICAoaXNOZXZlck9wdGltaXplTGl0ZU1vZGUp
OgorICAgICAgICAoaXNOZXZlck9wdGltaXplKToKKyAgICAgICAgKGlzQWx3YXlzT3B0aW1pemUp
OgorICAgICAgICAoaXNJbnRlcnByZXRlZCk6CisgICAgICAgIChpc0Jhc2VsaW5lKToKKyAgICAg
ICAgKGlzVW5vcHRpbWl6ZWQpOgorICAgICAgICAoaXNPcHRpbWl6ZWQpOgorICAgICAgICAoaXNU
dXJib0Zhbm5lZCk6CisgICAgICAgIChNanNVbml0QXNzZXJ0aW9uRXJyb3IucHJlcGFyZVN0YWNr
VHJhY2UpOgorICAgICAgICAqIHdhc20vdjgvd2FzbS1tb2R1bGUtYnVpbGRlci5qczogQWRkZWQu
CisgICAgICAgIChieXRlcyk6CisgICAgICAgICh3YXNtT3B0UmVmVHlwZSk6CisgICAgICAgICh3
YXNtUmVmVHlwZSk6CisgICAgICAgICh3YXNtUnR0KToKKyAgICAgICAgKHdhc21SdHROb0RlcHRo
KToKKyAgICAgICAgKG1ha2VTaWcpOgorICAgICAgICAobWFrZVNpZ192X3gpOgorICAgICAgICAo
bWFrZVNpZ194X3YpOgorICAgICAgICAobWFrZVNpZ192X3h4KToKKyAgICAgICAgKG1ha2VTaWdf
cl92KToKKyAgICAgICAgKG1ha2VTaWdfcl94KToKKyAgICAgICAgKG1ha2VTaWdfcl94eCk6Cisg
ICAgICAgIChkZWZpbmVXYXNtT3Bjb2RlKToKKyAgICAgICAgKGFzc2VydFRyYXBzKToKKyAgICAg
ICAgKEJpbmFyeSk6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVuc3VyZV9zcGFjZSk6Cisg
ICAgICAgIChCaW5hcnkucHJvdG90eXBlLnRydW5jX2J1ZmZlcik6CisgICAgICAgIChCaW5hcnku
cHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF91OCk6Cisg
ICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfdTE2KToKKyAgICAgICAgKEJpbmFyeS5wcm90
b3R5cGUuZW1pdF91MzIpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2xlYl91KToK
KyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF91MzJ2KToKKyAgICAgICAgKEJpbmFyeS5w
cm90b3R5cGUuZW1pdF91NjR2KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF9ieXRl
cyk6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfc3RyaW5nKToKKyAgICAgICAgKEJp
bmFyeS5wcm90b3R5cGUuZW1pdF9oZWFwX3R5cGUpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlw
ZS5lbWl0X3R5cGUpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2luaXRfZXhwcl9y
ZWN1cnNpdmUpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2luaXRfZXhwcik6Cisg
ICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfaGVhZGVyKToKKyAgICAgICAgKEJpbmFyeS5w
cm90b3R5cGUuZW1pdF9zZWN0aW9uKToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIpOgor
ICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUubnVtTG9jYWxOYW1lcyk6Cisg
ICAgICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5leHBvcnRBcyk6CisgICAgICAg
IChXYXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5leHBvcnRGdW5jKToKKyAgICAgICAgKFdh
c21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLnNldENvbXBpbGF0aW9uSGludCk6CisgICAgICAg
IChXYXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5hZGRCb2R5KToKKyAgICAgICAgKFdhc21G
dW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLmFkZEJvZHlXaXRoRW5kKToKKyAgICAgICAgKFdhc21G
dW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLmdldE51bUxvY2Fscyk6CisgICAgICAgIChXYXNtRnVu
Y3Rpb25CdWlsZGVyLnByb3RvdHlwZS5hZGRMb2NhbHMpOgorICAgICAgICAoV2FzbUZ1bmN0aW9u
QnVpbGRlci5wcm90b3R5cGUuZW5kKToKKyAgICAgICAgKFdhc21Jbml0RXhwci5JMzJDb25zdCk6
CisgICAgICAgIChXYXNtSW5pdEV4cHIuSTY0Q29uc3QpOgorICAgICAgICAoV2FzbUluaXRFeHBy
LkYzMkNvbnN0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5GNjRDb25zdCk6CisgICAgICAgIChX
YXNtSW5pdEV4cHIuUzEyOENvbnN0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5HbG9iYWxHZXQp
OgorICAgICAgICAoV2FzbUluaXRFeHByLlJlZkZ1bmMpOgorICAgICAgICAoV2FzbUluaXRFeHBy
LlJlZk51bGwpOgorICAgICAgICAoV2FzbUluaXRFeHByLlN0cnVjdE5ld1dpdGhSdHQpOgorICAg
ICAgICAoV2FzbUluaXRFeHByLlN0cnVjdE5ldyk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuU3Ry
dWN0TmV3RGVmYXVsdFdpdGhSdHQpOgorICAgICAgICAoV2FzbUluaXRFeHByLlN0cnVjdE5ld0Rl
ZmF1bHQpOgorICAgICAgICAoV2FzbUluaXRFeHByLkFycmF5SW5pdCk6CisgICAgICAgIChXYXNt
SW5pdEV4cHIuQXJyYXlJbml0U3RhdGljKToKKyAgICAgICAgKFdhc21Jbml0RXhwci5SdHRDYW5v
bik6CisgICAgICAgIChXYXNtSW5pdEV4cHIuUnR0U3ViKToKKyAgICAgICAgKFdhc21Jbml0RXhw
ci5SdHRGcmVzaFN1Yik6CisgICAgICAgIChXYXNtSW5pdEV4cHIuZGVmYXVsdEZvcik6CisgICAg
ICAgIChXYXNtSW5pdEV4cHIpOgorICAgICAgICAoV2FzbUdsb2JhbEJ1aWxkZXIpOgorICAgICAg
ICAoV2FzbUdsb2JhbEJ1aWxkZXIucHJvdG90eXBlLmV4cG9ydEFzKToKKyAgICAgICAgKFdhc21U
YWJsZUJ1aWxkZXIpOgorICAgICAgICAoV2FzbVRhYmxlQnVpbGRlci5wcm90b3R5cGUuZXhwb3J0
QXMpOgorICAgICAgICAobWFrZUZpZWxkKToKKyAgICAgICAgKFdhc21TdHJ1Y3QpOgorICAgICAg
ICAoV2FzbVN0cnVjdFN1YnR5cGUpOgorICAgICAgICAoV2FzbUFycmF5KToKKyAgICAgICAgKFdh
c21BcnJheVN1YnR5cGUpOgorICAgICAgICAoV2FzbUVsZW1TZWdtZW50KToKKyAgICAgICAgKFdh
c21FbGVtU2VnbWVudC5wcm90b3R5cGUuaXNfYWN0aXZlKToKKyAgICAgICAgKFdhc21FbGVtU2Vn
bWVudC5wcm90b3R5cGUuaXNfcGFzc2l2ZSk6CisgICAgICAgIChXYXNtRWxlbVNlZ21lbnQucHJv
dG90eXBlLmlzX2RlY2xhcmF0aXZlKToKKyAgICAgICAgKFdhc21FbGVtU2VnbWVudC5wcm90b3R5
cGUuZXhwcmVzc2lvbnNfYXNfZWxlbWVudHMpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIp
OgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZFN0YXJ0KToKKyAgICAg
ICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRNZW1vcnkpOgorICAgICAgICAoV2Fz
bU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZE1lbW9yeTY0KToKKyAgICAgICAgKFdhc21Nb2R1
bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRFeHBsaWNpdFNlY3Rpb24pOgorICAgICAgICAoV2FzbU1v
ZHVsZUJ1aWxkZXIucHJvdG90eXBlLnN0cmluZ1RvQnl0ZXMpOgorICAgICAgICAoV2FzbU1vZHVs
ZUJ1aWxkZXIucHJvdG90eXBlLmNyZWF0ZUN1c3RvbVNlY3Rpb24pOgorICAgICAgICAoV2FzbU1v
ZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEN1c3RvbVNlY3Rpb24pOgorICAgICAgICAoV2FzbU1v
ZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZFR5cGUpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxk
ZXIucHJvdG90eXBlLmFkZFN0cnVjdCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90
b3R5cGUuYWRkU3RydWN0U3VidHlwZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90
b3R5cGUuYWRkQXJyYXkpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFk
ZEFycmF5U3VidHlwZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRk
R2xvYmFsKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRUYWJsZSk6
CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkVGFnKToKKyAgICAgICAg
KFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRGdW5jdGlvbik6CisgICAgICAgIChXYXNt
TW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkSW1wb3J0KToKKyAgICAgICAgKFdhc21Nb2R1bGVC
dWlsZGVyLnByb3RvdHlwZS5hZGRJbXBvcnRlZEdsb2JhbCk6CisgICAgICAgIChXYXNtTW9kdWxl
QnVpbGRlci5wcm90b3R5cGUuYWRkSW1wb3J0ZWRNZW1vcnkpOgorICAgICAgICAoV2FzbU1vZHVs
ZUJ1aWxkZXIucHJvdG90eXBlLmFkZEltcG9ydGVkVGFibGUpOgorICAgICAgICAoV2FzbU1vZHVs
ZUJ1aWxkZXIucHJvdG90eXBlLmFkZEltcG9ydGVkVGFnKToKKyAgICAgICAgKFdhc21Nb2R1bGVC
dWlsZGVyLnByb3RvdHlwZS5hZGRFeHBvcnQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIu
cHJvdG90eXBlLmFkZEV4cG9ydE9mS2luZCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5w
cm90b3R5cGUuc2V0Q29tcGlsYXRpb25IaW50KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVy
LnByb3RvdHlwZS5hZGREYXRhU2VnbWVudCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5w
cm90b3R5cGUuYWRkUGFzc2l2ZURhdGFTZWdtZW50KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWls
ZGVyLnByb3RvdHlwZS5leHBvcnRNZW1vcnlBcyk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRl
ci5wcm90b3R5cGUuYWRkQWN0aXZlRWxlbWVudFNlZ21lbnQpOgorICAgICAgICAoV2FzbU1vZHVs
ZUJ1aWxkZXIucHJvdG90eXBlLmFkZFBhc3NpdmVFbGVtZW50U2VnbWVudCk6CisgICAgICAgIChX
YXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkRGVjbGFyYXRpdmVFbGVtZW50U2VnbWVudCk6
CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYXBwZW5kVG9UYWJsZSk6Cisg
ICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuc2V0VGFibGVCb3VuZHMpOgorICAg
ICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLnNldE5hbWUpOgorICAgICAgICAoV2Fz
bU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLnRvQnVmZmVyKToKKyAgICAgICAgKFdhc21Nb2R1bGVC
dWlsZGVyLnByb3RvdHlwZS50b0FycmF5KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnBy
b3RvdHlwZS5pbnN0YW50aWF0ZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5
cGUuYXN5bmNJbnN0YW50aWF0ZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5
cGUudG9Nb2R1bGUpOgorICAgICAgICAod2FzbVNpZ25lZExlYik6CisgICAgICAgICh3YXNtVW5z
aWduZWRMZWIpOgorICAgICAgICAod2FzbUkzMkNvbnN0KToKKyAgICAgICAgKHdhc21JNjRDb25z
dCk6CisgICAgICAgICh3YXNtRjMyQ29uc3QpOgorICAgICAgICAod2FzbUY2NENvbnN0KToKKyAg
ICAgICAgKHdhc21TMTI4Q29uc3QpOgorICAgICAgICAoZ2V0T3Bjb2RlTmFtZSk6CisgICAgICAg
ICogd2FzbS93YXNtLmpzb246CisKIDIwMjEtMTAtMDUgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CiAKICAgICAgICAgRG9uJ3QgcGFzcyBEb250QnVpbGRTdHJpbmdzIHRvIG5leHQg
dG9rZW4gYWZ0ZXIgcGFyc2luZyBhbiBlbXB0eSBwYXJhbWV0ZXIgbGlzdApkaWZmIC0tZ2l0IGEv
SlNUZXN0cy93YXNtLnlhbWwgYi9KU1Rlc3RzL3dhc20ueWFtbAppbmRleCAyZWNiNjM0ZGJmNWIy
YmVlNzJjZGQxM2M0MDE3OWJmMmY1ZTk0YmMxLi4xZjQ1MWJjOTExOGNjYWMzMzk4OTcwZWE0OWIy
NTg5Y2FmMzNjYzI3IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20ueWFtbAorKysgYi9KU1Rlc3Rz
L3dhc20ueWFtbApAQCAtNDUsNiArNDUsOCBAQAogICBjbWQ6IHJ1bldlYkFzc2VtYmx5IHVubGVz
cyBwYXJzZVJ1bkNvbW1hbmRzCiAtIHBhdGg6IHdhc20vc2VsZi10ZXN0LwogICBjbWQ6IHJ1bldl
YkFzc2VtYmx5U3VpdGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKKy0gcGF0aDogd2FzbS92OC8K
KyAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlKDpub19tb2R1bGUsICJtanN1bml0LmpzIikgdW5s
ZXNzIHBhcnNlUnVuQ29tbWFuZHMKIAogLSBwYXRoOiB3YXNtL3JlZmVyZW5jZXMtc3BlYy10ZXN0
cy9lbGVtLndhc3QuanMKICAgY21kOiBydW5XZWJBc3NlbWJseVJlZmVyZW5jZVNwZWNUZXN0IDpu
b3JtYWwKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzIGIvSlNUZXN0cy93YXNt
L0J1aWxkZXIuanMKaW5kZXggMzJmZmU2YmJiNTYxYTUzMzM4NTdlZDIzMWIwNDdhN2YyYWZiZjEx
NS4uMTEwMWY3MjVjY2RkYjBjYzFlODlhMDVjN2FkZDdiYjQ5ZDJmNTk3YyAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL0J1aWxkZXIuanMKKysrIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKQEAg
LTEyOCw2ICsxMjgsMTggQEAgY29uc3QgX2ltcG9ydFRhYmxlQ29udGludWF0aW9uID0gKGJ1aWxk
ZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CiAgICAgfTsKIH07CiAKK2NvbnN0IF9pbXBv
cnRFeGNlcHRpb25Db250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIp
ID0+IHsKKyAgICByZXR1cm4gKG1vZHVsZSwgZmllbGQsIHR5cGUpID0+IHsKKyAgICAgICAgYXNz
ZXJ0LmlzU3RyaW5nKG1vZHVsZSwgYEltcG9ydCBmdW5jdGlvbiBtb2R1bGUgc2hvdWxkIGJlIGEg
c3RyaW5nLCBnb3QgIiR7bW9kdWxlfSJgKTsKKyAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKGZpZWxk
LCBgSW1wb3J0IGZ1bmN0aW9uIGZpZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxk
fSJgKTsKKyAgICAgICAgY29uc3QgdHlwZVNlY3Rpb24gPSBidWlsZGVyLl9nZXRTZWN0aW9uKCJU
eXBlIik7CisgICAgICAgIHR5cGUgPSBfbWF5YmVSZWdpc3RlclR5cGUoYnVpbGRlciwgdHlwZSk7
CisgICAgICAgIGNvbnN0IHRhZyA9IDA7CisgICAgICAgIHNlY3Rpb24uZGF0YS5wdXNoKHsgZmll
bGQsIHR5cGUsIHRhZywga2luZDogIkV4Y2VwdGlvbiIsIG1vZHVsZSB9KTsKKyAgICAgICAgcmV0
dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IobmV4dEJ1aWxkZXIpOworICAgIH0KK307CisKIGNv
bnN0IF9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0
QnVpbGRlcikgPT4gewogICAgIHJldHVybiAoZmllbGQsIGluZGV4LCB0eXBlKSA9PiB7CiAgICAg
ICAgIGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEV4cG9ydCBmdW5jdGlvbiBmaWVsZCBzaG91bGQg
YmUgYSBzdHJpbmcsIGdvdCAiJHtmaWVsZH0iYCk7CkBAIC0yMTUsNiArMjI3LDE0IEBAIGNvbnN0
IF9leHBvcnRUYWJsZUNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRl
cikgPT4gewogICAgIH0KIH07CiAKK2NvbnN0IF9leHBvcnRFeGNlcHRpb25Db250aW51YXRpb24g
PSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKKyAgICByZXR1cm4gKGZpZWxk
LCBpbmRleCkgPT4geworICAgICAgICBhc3NlcnQuaXNOdW1iZXIoaW5kZXgsIGBFeGNlcHRpb24g
ZXhwb3J0cyBvbmx5IHN1cHBvcnQgbnVtYmVyIGluZGljZXNgKTsKKyAgICAgICAgc2VjdGlvbi5k
YXRhLnB1c2goe2ZpZWxkLCBraW5kOiAiRXhjZXB0aW9uIiwgaW5kZXh9KTsKKyAgICAgICAgcmV0
dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IobmV4dEJ1aWxkZXIpOworICAgIH0KK307CisKIGNv
bnN0IF9pbXBvcnRHbG9iYWxDb250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1
aWxkZXIpID0+IHsKICAgICByZXR1cm4gKCkgPT4gewogICAgICAgICBjb25zdCBnbG9iYWxCdWls
ZGVyID0gewpAQCAtMzA3LDYgKzMyNyw3IEBAIGNvbnN0IF9jaGVja0ltbXMgPSAob3AsIGltbXMs
IGV4cGVjdGVkSW1tcywgcmV0KSA9PiB7CiAgICAgICAgIGNhc2UgInRhcmdldF90YWJsZSI6IGJy
ZWFrOyAvLyBpbXByb3ZlIGNoZWNraW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjM0MjEKICAgICAgICAgY2FzZSAicmVzZXJ2ZWQiOiBicmVhazsgLy8gaW1wcm92
ZSBjaGVja2luZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNDIx
CiAgICAgICAgIGNhc2UgInRhYmxlX2luZGV4IjogYnJlYWs7IC8vIGltcHJvdmUgY2hlY2tpbmcg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzQyMQorICAgICAgICBj
YXNlICJleG4iOiBicmVhazsKICAgICAgICAgY2FzZSAicmVmdHlwZSI6CiAgICAgICAgICAgICBh
c3NlcnQudHJ1dGh5KFdBU00uaXNWYWxpZFJlZlR5cGUoaW1tc1tpZHhdKSwgYEludmFsaWQgcmVm
IHR5cGUgb24gJHtvcH06ICIke2ltbXNbaWR4XX0iYCk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTMzNSwxMSArMzU2LDEzIEBAIGNvbnN0IF9jcmVhdGVGdW5jdGlvbkJ1aWxkZXIgPSAoZnVuYywg
YnVpbGRlciwgcHJldmlvdXNCdWlsZGVyKSA9PiB7CiAgICAgICAgICAgICAgICAgbmV4dEJ1aWxk
ZXIgPSBmdW5jdGlvbkJ1aWxkZXI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlICJFbmQiOgorICAgICAgICAgICAgY2FzZSAiRGVsZWdhdGUiOgogICAgICAgICAgICAg
ICAgIG5leHRCdWlsZGVyID0gcHJldmlvdXNCdWlsZGVyOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSAiQmxvY2siOgogICAgICAgICAgICAgY2FzZSAiTG9vcCI6CiAg
ICAgICAgICAgICBjYXNlICJJZiI6CisgICAgICAgICAgICBjYXNlICJUcnkiOgogICAgICAgICAg
ICAgICAgIG5leHRCdWlsZGVyID0gX2NyZWF0ZUZ1bmN0aW9uQnVpbGRlcihmdW5jLCBidWlsZGVy
LCBmdW5jdGlvbkJ1aWxkZXIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQpAQCAtNDg4LDYgKzUxMSw3IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAg
ICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLkZ1bmN0aW9uID0gX2ltcG9ydEZ1bmN0aW9u
Q29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgICAg
ICBpbXBvcnRCdWlsZGVyLk1lbW9yeSA9IF9pbXBvcnRNZW1vcnlDb250aW51YXRpb24odGhpcywg
cywgaW1wb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuVGFi
bGUgPSBfaW1wb3J0VGFibGVDb250aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVpbGRlcik7Cisg
ICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuRXhjZXB0aW9uID0gX2ltcG9ydEV4Y2Vw
dGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IoaW1wb3J0QnVpbGRlcik7CiAgICAg
ICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTUzMSw2ICs1NTUsMjMg
QEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAgICAgfTsKICAg
ICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAgY2FzZSAiRXhjZXB0aW9uIjogewor
ICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGRhdGFCdWlsZGVyID0geworICAgICAgICAgICAgICAgICAgICAgICAg
RW5kOiAoKSA9PiB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOiAoc2ln
bmF0dXJlKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR5cGUgPSBfbWF5
YmVSZWdpc3RlclR5cGUodGhpcywgc2lnbmF0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzLmRhdGEucHVzaCh7IHRhZzogMCwgdHlwZSB9KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihkYXRhQnVpbGRlcik7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ug
YWRkIHRhZ3Mgd2l0aCBub24temVybyB2YWx1ZSB0aGVuIHdlIGNhbiBhZGQgYSBuZXcgbWVtYmVy
LgorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Vy
cm9ySGFuZGxpbmdQcm94eUZvcihkYXRhQnVpbGRlcik7CisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY2FzZSAi
R2xvYmFsIjoKICAgICAgICAgICAgICAgICB0aGlzW3NlY3Rpb25dID0gZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLl9hZGRTZWN0aW9uKHNlY3Rpb24pOwpA
QCAtNTY5LDYgKzYxMCw3IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAg
ICAgICAgICAgICAgICBleHBvcnRCdWlsZGVyLkZ1bmN0aW9uID0gX2V4cG9ydEZ1bmN0aW9uQ29u
dGludWF0aW9uKHRoaXMsIHMsIGV4cG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICBl
eHBvcnRCdWlsZGVyLk1lbW9yeSA9IF9leHBvcnRNZW1vcnlDb250aW51YXRpb24odGhpcywgcywg
ZXhwb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuVGFibGUg
PSBfZXhwb3J0VGFibGVDb250aW51YXRpb24odGhpcywgcywgZXhwb3J0QnVpbGRlcik7CisgICAg
ICAgICAgICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuRXhjZXB0aW9uID0gX2V4cG9ydEV4Y2VwdGlv
bkNvbnRpbnVhdGlvbih0aGlzLCBzLCBleHBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IoZXhwb3J0QnVpbGRlcik7CiAgICAgICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTczNywxNSArNzc5LDYgQEAg
ZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IHMg
b2YgdGhpcy5fc2VjdGlvbnMpCiAgICAgICAgICAgICAgICAgaWYgKG51bWJlciAhPT0gX3Vua25v
d25TZWN0aW9uSWQpCiAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5mYWxzeShzLm5hbWUgPT09
IG5hbWUgJiYgcy5pZCA9PT0gbnVtYmVyLCBgQ2Fubm90IGhhdmUgdHdvIHNlY3Rpb25zIHdpdGgg
dGhlIHNhbWUgbmFtZSAiJHtuYW1lfSIgYW5kIElEICR7bnVtYmVyfWApOwotICAgICAgICAgICAg
Ly8gQ2hlY2sgb3JkZXJpbmcuCi0gICAgICAgICAgICBpZiAoKG51bWJlciAhPT0gX3Vua25vd25T
ZWN0aW9uSWQpICYmICh0aGlzLl9zZWN0aW9ucy5sZW5ndGggIT09IDApKSB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX3NlY3Rpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1p
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZWN0aW9uc1tpXS5pZCA9PT0gX3Vu
a25vd25TZWN0aW9uSWQpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAgICAgYXNzZXJ0LmxlKHRoaXMuX3NlY3Rpb25zW2ldLmlkLCBudW1iZXIsIGBC
YWQgc2VjdGlvbiBvcmRlcmluZzogIiR7dGhpcy5fc2VjdGlvbnNbaV0ubmFtZX0iIGNhbm5vdCBw
cmVjZWRlICIke25hbWV9ImApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgY29uc3QgcyA9IE9i
amVjdC5hc3NpZ24oeyBuYW1lOiBuYW1lLCBpZDogbnVtYmVyLCBkYXRhOiBbXSB9LCBleHRyYU9i
amVjdCB8fCB7fSk7CiAgICAgICAgIHRoaXMuX3NlY3Rpb25zLnB1c2gocyk7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcyBiL0pTVGVzdHMvd2Fz
bS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCmluZGV4IDM1OGJiNDgyZDRlMDczMjZhMjBl
NTg5MzRlNTUyOTJiYjU1MTYzNzAuLmU5YzU3NjI2MGY1ZDJlNWI2N2ZhZThhM2RiNTBlNmM3NDE2
ODg4MTcgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5
LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCkBAIC0x
NDMsNiArMTQzLDEwIEBAIGNvbnN0IGVtaXR0ZXJzID0gewogICAgICAgICAgICAgY2FzZSAiR2xv
YmFsIjoKICAgICAgICAgICAgICAgICBwdXRHbG9iYWxUeXBlKGJpbiwgZW50cnkuZ2xvYmFsRGVz
Y3JpcHRpb24pOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiRXhj
ZXB0aW9uIjoKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZW50cnkudGFn
KTsKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZW50cnkudHlwZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9LApA
QCAtMTg1LDYgKzE4OSw3IEBAIGNvbnN0IGVtaXR0ZXJzID0gewogICAgICAgICAgICAgY2FzZSAi
RnVuY3Rpb24iOgogICAgICAgICAgICAgY2FzZSAiTWVtb3J5IjoKICAgICAgICAgICAgIGNhc2Ug
IlRhYmxlIjoKKyAgICAgICAgICAgIGNhc2UgIkV4Y2VwdGlvbiI6CiAgICAgICAgICAgICAgICAg
cHV0KGJpbiwgInZhcnVpbnQzMiIsIGVudHJ5LmluZGV4KTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24g
cHJvYmxlbTogdW5leHBlY3RlZCBraW5kICR7ZW50cnkua2luZH1gKTsKQEAgLTI1NCw2ICsyNTks
MTQgQEAgY29uc3QgZW1pdHRlcnMgPSB7CiAgICAgICAgICAgICAgICAgcHV0KGJpbiwgInVpbnQ4
IiwgYnl0ZSk7CiAgICAgICAgIH0KICAgICB9LAorCisgICAgRXhjZXB0aW9uOiAoc2VjdGlvbiwg
YmluKSA9PiB7CisgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBzZWN0aW9uLmRhdGEubGVu
Z3RoKTsKKyAgICAgICAgZm9yIChjb25zdCBleG4gb2Ygc2VjdGlvbi5kYXRhKSB7CisgICAgICAg
ICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZXhuLnRhZyk7CisgICAgICAgICAgICBwdXQoYmlu
LCAidmFydWludDMyIiwgZXhuLnR5cGUpOworICAgICAgICB9CisgICAgfSwKIH07CiAKIGV4cG9y
dCBjb25zdCBCaW5hcnkgPSAocHJlYW1ibGUsIHNlY3Rpb25zKSA9PiB7CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vYXNzZXJ0LmpzIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwppbmRleCA2ZmRi
NjVhNGRhZGRjMGQ3N2E3MjRjMDE5MmQ4ZmI1M2JmMTBiZjY4Li45NDgzOGQ5N2VmNTUwZjYxZmQy
Mzg2YzNmMmFiZDhlZjkyMzZlNDAyIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vYXNzZXJ0Lmpz
CisrKyBiL0pTVGVzdHMvd2FzbS9hc3NlcnQuanMKQEAgLTEyNCw3ICsxMjQsNyBAQCBjb25zdCBf
dGhyb3dzID0gKGZ1bmMsIHR5cGUsIG1lc3NhZ2UsIC4uLmFyZ3MpID0+IHsKICAgICB0cnkgewog
ICAgICAgICBmdW5jKC4uLmFyZ3MpOwogICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgaWYgKGUg
aW5zdGFuY2VvZiB0eXBlICYmIGUubWVzc2FnZS5pbmRleE9mKG1lc3NhZ2UpID49IDApCisgICAg
ICAgIGlmIChlIGluc3RhbmNlb2YgdHlwZSAmJiAodHlwZW9mKGUubWVzc2FnZSkgPT0gInVuZGVm
aW5lZCIgfHwgZS5tZXNzYWdlLmluZGV4T2YobWVzc2FnZSkgPj0gMCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZTsKICAgICAgICAgX2ZhaWwoYEV4cGVjdGVkIHRvIHRocm93IGEgJHt0eXBlLm5hbWV9
IHdpdGggbWVzc2FnZSAiJHttZXNzYWdlfSIsIGdvdCAke2UubmFtZX0gd2l0aCBtZXNzYWdlICIk
e2UubWVzc2FnZX0iYCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3NlbGYtdGVz
dC90ZXN0X0J1aWxkZXJKU09OLmpzIGIvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxk
ZXJKU09OLmpzCmluZGV4IGJiMWI5N2IxOWQ1Y2MxYzc4YjVmMDA3ZGM2OTBhYWRiZDcwZDIwZjgu
LjIwOWYyMGI3NmJiYThiNzBjNTE3MjFlZTQ1NjgzZDFmNzYwMzJhNmYgMTAwNjQ0Ci0tLSBhL0pT
VGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcworKysgYi9KU1Rlc3RzL3dh
c20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMKQEAgLTE0MCwxMSArMTQwLDYgQEAgY29u
c3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDApOwogfSkoKTsKIAotKGZ1bmN0aW9uIEltcG9ydEJl
Zm9yZVR5cGVTZWN0aW9ucygpIHsKLSAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkltcG9y
dCgpLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYi5UeXBlKCksIEVycm9yLCBgRXhw
ZWN0ZWQ6ICIyIiA+ICIxIjogQmFkIHNlY3Rpb24gb3JkZXJpbmc6ICJJbXBvcnQiIGNhbm5vdCBw
cmVjZWRlICJUeXBlImApOwotfSkoKTsKLQogKGZ1bmN0aW9uIEltcG9ydEZ1bmN0aW9uV2l0aG91
dFR5cGVTZWN0aW9uKCkgewogICAgIGNvbnN0IGkgPSAobmV3IEJ1aWxkZXIoKSkuSW1wb3J0KCk7
CiAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpLkZ1bmN0aW9uKCJmb28iLCAiYmFyIiwgMCksIEVy
cm9yLCBgU2hvdWxkbid0IGJlIHVuZGVmaW5lZDogQ2FuIG5vdCB1c2UgdHlwZSAwIGlmIGEgdHlw
ZSBzZWN0aW9uIGlzIG5vdCBwcmVzZW50YCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3Ry
ZXNzL2NhdGNoLXdpdGgtZGVsZWdhdGUuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2NhdGNoLXdp
dGgtZGVsZWdhdGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDMwYmVmNTkzY2M0MjM2MmIyMmFlMjk5NzY0MmIz
Mjg1MTQ4ODU0MgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvY2F0Y2gt
d2l0aC1kZWxlZ2F0ZS5qcwpAQCAtMCwwICsxLDkwIEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcu
Li9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKwor
eworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAg
ICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAg
ICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAu
RXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwg
MCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgi
aTMyIikKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMCkK
KyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQor
ICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisg
ICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBX
ZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisK
KyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAgICBmdW5jdGlvbiBjYWxs
YmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtd
KTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMpOwor
CisgICAgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFtdIH0pOworCisg
ICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2Vw
dGlvbik7Cit9CisKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250
ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAg
ICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJ0YWciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAi
dm9pZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIs
IDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5Ucnko
ImkzMiIpCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDAp
CisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuRGVsZWdhdGUoMCkK
KyAgICAgICAgICAgIC5DYXRjaCgxKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAg
ICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKwor
ICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdl
YkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNl
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNr
LCB0YWc6IG90aGVyVGFnIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZv
bzsKKyAgICBsZXQgYXJncyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAg
ICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBhcmdzKTsKKyAgICB9CisK
KyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMpOworCisgICAgdGFnID0g
b3RoZXJUYWc7CisgICAgYXJncyA9IFsxMDBdOworCisgICAgbGV0IGV4biA9IGFzc2VydC50aHJv
d3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICAgIGFz
c2VydC5lcShleG4uZ2V0QXJnKHRhZywgMCksIDEwMCk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3dhc20vc3RyZXNzL2NyZWF0ZS10YWctZnJvbS5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvY3Jl
YXRlLXRhZy1mcm9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyNzhkNmMyMTc2Y2ZiNTgxNGFmYWU3Njg0ZjE5
ZmQ1NjgxMDFmYTkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2NyZWF0
ZS10YWctZnJvbS5qcwpAQCAtMCwwICsxLDIyIEBACitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAn
Li4vYXNzZXJ0LmpzJworCitsZXQgcGFyYW1ldGVycyA9IFsiaTMyIiwgImYzMiIsICJleHRlcm5y
ZWYiXTsKKworYXNzZXJ0LnRocm93cyhXZWJBc3NlbWJseS5UYWcsIFR5cGVFcnJvciwgImNhbGxp
bmcgV2ViQXNzZW1ibHkuVGFnIGNvbnN0cnVjdG9yIHdpdGhvdXQgbmV3IGlzIGludmFsaWQiKTsK
K2xldCBwYXNzZWRQYXJhbWV0ZXJzID0geyBwYXJhbWV0ZXJzIH07CitsZXQgdGFnID0gbmV3IFdl
YkFzc2VtYmx5LlRhZyhwYXNzZWRQYXJhbWV0ZXJzKTsKKworYXNzZXJ0LnRydXRoeSh0YWcudHlw
ZSgpICE9PSBwYXNzZWRQYXJhbWV0ZXJzLCAiVGFnIHR5cGUgc2hvdWxkIHJldHVybiBhIGZyZXNo
IG9iamVjdCIpOworYXNzZXJ0LmVxKHRhZy50eXBlKCkucGFyYW1ldGVycywgcGFyYW1ldGVycywg
IlRhZ3MgdHlwZSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIGlu
Iik7CisKK2Fzc2VydC50aHJvd3MoV2ViQXNzZW1ibHkuRXhjZXB0aW9uLCBUeXBlRXJyb3IsICJj
YWxsaW5nIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciB3aXRob3V0IG5ldyBpcyBp
bnZhbGlkIik7CisKK2xldCBleGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRh
ZywgWzEsIDIuNSwgcGFyYW1ldGVyc10pOworYXNzZXJ0LnRydXRoeShleGNlcHRpb24uaXModGFn
KSk7Cithc3NlcnQuZXEoZXhjZXB0aW9uLmdldEFyZyh0YWcsIDApLCAxKTsKK2Fzc2VydC5lcShl
eGNlcHRpb24uZ2V0QXJnKHRhZywgMSksIDIuNSk7Cithc3NlcnQuZXEoZXhjZXB0aW9uLmdldEFy
Zyh0YWcsIDIpLCBwYXJhbWV0ZXJzKTsKKworYXNzZXJ0LnRocm93cygoKSA9PiBleGNlcHRpb24u
Z2V0QXJnKHRhZywgMyksIFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5FeGNlcHRpb24uZ2V0QXJn
KCk6IEluZGV4IG91dCBvZiByYW5nZSIpOworCithc3NlcnQuZXEoV2ViQXNzZW1ibHkuRXhjZXB0
aW9uLnByb3RvdHlwZS5fX3Byb3RvX18sIE9iamVjdC5wcm90b3R5cGUpCmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0yLmpzIGIvSlNUZXN0
cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UtMi5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
ZWM3ZmJhZDA3NTg5NTVlYTJmOGU0MzQyODE0MTdjOTZmMDBkYjczCi0tLSAvZGV2L251bGwKKysr
IGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UtMi5qcwpAQCAt
MCwwICsxLDkwIEBACisKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBv
cnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCitjb25zdCBwYWdlU2l6ZSA9IDY0
ICogMTAyNDsKK2NvbnN0IG51bVBhZ2VzID0gMTsKKwordmFyIGluc3RBOwordmFyIGluc3RCOwor
dmFyIGdyb3c7Cit2YXIgbWVtb3J5RGVzY3JpcHRpb24gPSB7aW5pdGlhbDogMH07Cit2YXIgbWVt
ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7CisKK2Z1bmN0aW9u
IHRlc3QoKSB7CisgICAgYXNzZXJ0LmVxKGluc3RBLmV4cG9ydHMubWFpbig0MiksIDQyKTsKK30K
KworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisg
ICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiY29udGV4dCIsICJtZW0iLCBt
ZW1vcnlEZXNjcmlwdGlvbikKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJncm93
IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFt
czogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
dHJhbXBvbGluZSIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oInRyYW1wb2xpbmUiLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisg
ICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5k
KCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBpbnN0QiA9IG5ldyBX
ZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsKKyAgICAgICAgY29udGV4dDogeworICAgICAg
ICAgICAgbWVtLAorICAgICAgICAgICAgZ3JvdygpIHsgaW5zdEEuZXhwb3J0cy5ncm93KDEpOyB9
LAorICAgICAgICB9CisgICAgfSk7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIo
KTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5N
ZW1vcnkoImNvbnRleHQiLCAibWVtIiwgbWVtb3J5RGVzY3JpcHRpb24pCisgICAgICAgICAgICAu
RnVuY3Rpb24oImNvbnRleHQiLCAidHJhbXBvbGluZSIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9p
ZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAg
IC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oIm1haW4iKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJncm93IikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAg
IC5GdW5jdGlvbigibWFpbiIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pCisgICAg
ICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAg
ICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAgICAgLkNhdGNoQWxs
KCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgICAg
IC5JMzJMb2FkKDAsIDApCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZ3JvdyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6
ICJ2b2lkIiB9KQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAg
IC5Hcm93TWVtb3J5KDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDQyKQorICAgICAgICAg
ICAgICAgIC5JMzJTdG9yZSgwLCAwKQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOworICAgIGluc3RBID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgewor
ICAgICAgICBjb250ZXh0OiB7CisgICAgICAgICAgICBtZW0sCisgICAgICAgICAgICB0cmFtcG9s
aW5lOiBpbnN0Qi5leHBvcnRzLnRyYW1wb2xpbmUsCisgICAgICAgIH0KKyAgICB9KTsKK30KKwor
dGVzdCgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3Mt
aW5zdGFuY2UtMy5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3Rh
bmNlLTMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E4OTgwYmViOTNmNmMyYzMwNjRjMmNjOTE0ZWFjMWExMzRj
MDQ4MAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNy
b3NzLWluc3RhbmNlLTMuanMKQEAgLTAsMCArMSw3NSBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAn
Li4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisK
K2NvbnN0IHBhZ2VTaXplID0gNjQgKiAxMDI0OworY29uc3QgbnVtUGFnZXMgPSAxOworCit2YXIg
aW5zdEE7Cit2YXIgaW5zdEI7Cit2YXIgZ3JvdzsKK3ZhciBtZW1vcnlEZXNjcmlwdGlvbiA9IHtp
bml0aWFsOiBudW1QYWdlc307Cit2YXIgbWVtID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1v
cnlEZXNjcmlwdGlvbik7CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgYXNzZXJ0LmVxKGluc3RB
LmV4cG9ydHMubWFpbigpLCA0Mik7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIo
KTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5N
ZW1vcnkoImNvbnRleHQiLCAibWVtIiwgeyBpbml0aWFsOiAwIH0pCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJl
KHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJ0aHJvdyIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJleCIsIDApCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oInRocm93Iiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBi
LldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4pOworICAgIGluc3RCID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSwgeyBjb250ZXh0OiB7IG1lbTogbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRpYWw6IDAg
fSkgfSB9KTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiY29udGV4
dCIsICJtZW0iLCBtZW1vcnlEZXNjcmlwdGlvbikKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29u
dGV4dCIsICJ0aHJvdyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAg
IC5FeGNlcHRpb24oImNvbnRleHQiLCAiZXgiLCB7IHBhcmFtczogW10gfSkKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWdu
YXR1cmUoeyBwYXJhbXM6IFsiaTMyIl19KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigibWFpbiIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oIm1haW4iLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoNDIpCisgICAgICAgICAgICAgICAgLkkzMlN0b3JlKDAsIDApCisgICAgICAgICAgICAgICAg
LlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAg
ICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAg
ICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyTG9hZCgwLCAw
KQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5F
bmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29u
c3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGluc3RBID0gbmV3
IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IC4uLmluc3RCLmV4cG9y
dHMsIG1lbSB9IH0pOworfQorCit0ZXN0KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3Ry
ZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhj
ZXB0aW9uLWNyb3NzLWluc3RhbmNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjNjdjOTE4NjllMmFiMmRiZTcw
ZDVjZWMxZTdmMjU3ODk4YjU4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3Ry
ZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS5qcwpAQCAtMCwwICsxLDU4IEBACitpbXBvcnQg
QnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4u
L2Fzc2VydC5qcycKKwordmFyIGluc3RBOwordmFyIGluc3RCOworCitmdW5jdGlvbiB0ZXN0KCkg
eworICAgIGFzc2VydC50aHJvd3MoaW5zdEEuZXhwb3J0cy5tYWluLCBXZWJBc3NlbWJseS5FeGNl
cHRpb24sICJ3YXNtIGV4Y2VwdGlvbiIpOworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWls
ZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAg
ICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAg
ICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigidGhyb3ciKQorICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvdyIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOworICAgIGluc3RCID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7Cit9
CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQor
ICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJ0aHJv
dyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFt
czogWyJpMzIiLCAiaTMyIl19KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAg
IC5GdW5jdGlvbigibWFpbiIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oIm1haW4iLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAg
ICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQor
ICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQWRkKCkK
KyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5k
KCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBpbnN0QSA9IG5ldyBX
ZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyB0aHJvdzogaW5zdEIuZXhw
b3J0cy50aHJvdyB9IH0pOworfQorCit0ZXN0KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
c3RyZXNzL2V4Y2VwdGlvbi1saXZlbmVzcy10aWVyLXVwLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVz
cy9leGNlcHRpb24tbGl2ZW5lc3MtdGllci11cC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZTYwNTI0MGQyMTVl
YjE0MjEwMmM4NWYxYzk4MDM1MjRjODVjNmYyCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93
YXNtL3N0cmVzcy9leGNlcHRpb24tbGl2ZW5lc3MtdGllci11cC5qcwpAQCAtMCwwICsxLDg3IEBA
CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0
IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOwor
ICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5F
eGNlcHRpb24oKQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Y2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJ0YWciLCAwKQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6
IFtdLCByZXQ6ICJpMzIiIH0sIFsiaTMyIl0pCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDFl
NikKKyAgICAgICAgICAgICAgICAuU2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuVHJ5KCJp
MzIiKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoNDIpCisgICAgICAgICAgICAgICAg
ICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAg
ICAgICAuTG9vcCgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAuQmxvY2soInZvaWQi
LCBiID0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5HZXRMb2NhbCgwKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJFcXooKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5CcklmKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkdl
dExvY2FsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMlN1YigpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLlNldExvY2FsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLkJyKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAg
ICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0g
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdl
YkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7CisgICAgY29uc3QgdGFnID0gaW5zdGFuY2UuZXhw
b3J0cy50YWc7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2Vi
QXNzZW1ibHkuRXhjZXB0aW9uLCAid2FzbSBleGNlcHRpb24iKTsKKyAgICB0cnkgeworICAgICAg
ICBpbnN0YW5jZS5leHBvcnRzLmNhbGwoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGFz
c2VydC50cnV0aHkoZS5pcyh0YWcpKTsKKyAgICAgICAgYXNzZXJ0LmVxKGUuZ2V0QXJnKHRhZywg
MCksIDQyKTsKKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAg
ICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAi
Y2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkuRW5kKCkKKyAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczog
W119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBw
YXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwo
MCkKKyAgICAgICAgICAgICAgICAuTG9vcCgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgIC5D
YWxsKDIpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAg
ICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkz
MkVxeigpCisgICAgICAgICAgICAgICAgICAgICAgICAuQnJJZigxKQorICAgICAgICAgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJ3cmFwcGVyIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lk
IiB9KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisgICAgdmFyIGNvdW50
ZXIgPSAxZTU7CisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNv
bnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0
YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxs
YmFjazogZnVuY3Rpb24oKSB7IGlmICghLS1jb3VudGVyKSByZXR1cm4gdHJ1ZTt9IH0gfSk7CisK
KyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDApOworfQpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tbXVsdGlwbGUtaW5zdGFuY2VzLmpzIGIv
SlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tbXVsdGlwbGUtaW5zdGFuY2VzLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjcxMDI2NzlhOWQxMWExYmU4MTMwOGQ2MTdiOTdkYWM5YWE3ZjMwZWUKLS0tIC9kZXYv
bnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1tdWx0aXBsZS1pbnN0YW5j
ZXMuanMKQEAgLTAsMCArMSwzMiBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5q
cycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25z
dCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rp
b24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0p
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvdyIp
CisgICAgICAgICAgICAuRXhjZXB0aW9uKCJ0YWciLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvdyIsIHsgcGFyYW1zOiBbXSwg
cmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAg
ICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKyAgICBj
b25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIHsKKyAgICAgICAgbGV0IGluc3QgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKyAgICAgICAgaW5zdC5leHBvcnRzLnRocm93
KCk7CisgICAgfQorICAgIHsKKyAgICAgICAgbGV0IGluc3QgPSBuZXcgV2ViQXNzZW1ibHkuSW5z
dGFuY2UobW9kdWxlKTsKKyAgICAgICAgaW5zdC5leHBvcnRzLnRocm93KCk7CisgICAgfQorfQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLWRlbGVnYXRl
LmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLWRlbGVnYXRlLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJiMTJhOGVmMjk2MmNiMTFjOTQ2ZDBjNWZkODBmNGEwNmZkYTRjNzkKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtZGVsZWdh
dGUuanMKQEAgLTAsMCArMSwxMjUgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIu
anMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCitmdW5jdGlvbiB0
ZXN0U2ltcGxlVGhyb3dEZWxlZ2F0ZSgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsK
KyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAu
RXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
YWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgi
aTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAgICAgLkRlbGVnYXRlKDApCisgICAg
ICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQor
ICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQo
KQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3Qg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNl
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5l
cShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20g
dGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0
ZXN0VGhyb3dEZWxlZ2F0ZVNraXAoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Cisg
ICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0
KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2Fs
bCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkz
MiIpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgxKQorICAgICAgICAgICAgICAgICAg
ICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAg
ICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9k
dWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAi
Y2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBv
c3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REZWxlZ2F0ZUNhbGxlcigpIHsKKyAgICBjb25z
dCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rp
b24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0p
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAu
RXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisg
ICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMSkK
KyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0
KDIpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKworICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJjYWxsMiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAg
ICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoInZvaWQi
KQorICAgICAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgICAg
IC5EZWxlZ2F0ZSgxKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgp
LmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
KyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsg
fSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGlu
ZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUi
KTsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZURlbGVnYXRlTWVyZ2UoKXsKKyBjb25zdCBiID0g
bmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNh
bGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJp
MzIiKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgICAgICAg
LkRlbGVnYXRlKDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAg
IGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworICAgIGFzc2VydC5lcShpbnN0YW5jZS5l
eHBvcnRzLmNhbGwoKSwgMyk7Cit9CisKK3Rlc3RTaW1wbGVUaHJvd0RlbGVnYXRlKCk7Cit0ZXN0
VGhyb3dEZWxlZ2F0ZVNraXAoKTsKK3Rlc3REZWxlZ2F0ZUNhbGxlcigpOwordGVzdFNpbXBsZURl
bGVnYXRlTWVyZ2UoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9u
LXNpbXBsZS10aHJvdy1jYXRjaC5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXNp
bXBsZS10aHJvdy1jYXRjaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDk3NDAxNWY3MzAxZGViZTZiNGQ2NjJl
MzViMDkyZmU0OGUwYzc2Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9l
eGNlcHRpb24tc2ltcGxlLXRocm93LWNhdGNoLmpzCkBAIC0wLDAgKzEsNDE0IEBACitpbXBvcnQg
QnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4u
L2Fzc2VydC5qcycKKworZnVuY3Rpb24gdGVzdFNpbXBsZVRyeUNhdGNoKCl7CisgICAgY29uc3Qg
YiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9u
KCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4
Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAg
ICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAg
ICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAg
ICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
Y29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOwor
CisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4g
ZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9
CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVUcnlDYXRjaEFsbCgpeworICAgIGNvbnN0IGIgPSBuZXcg
QnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgp
CisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAg
ICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24o
ImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAg
IC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAg
LkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgIC5J
MzJDb25zdCgyKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAg
ICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3Qg
aW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAg
YXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0
ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1
bmN0aW9uIHRlc3RDYWxsVHJ5Q2F0Y2goKXsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsK
KyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAu
RXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
YWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIi
KQorICAgICAgICAgICAgICAgIC5DYWxsKDEpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkVuZCgpCisKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbDIiLCB7IHBhcmFtczogW10sIHJl
dDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdl
dCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAg
ICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7
CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBh
biBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsK
K30KKworZnVuY3Rpb24gdGVzdENhbGxUcnlDYXRjaEFsbCgpeworICAgIGNvbnN0IGIgPSBuZXcg
QnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgp
CisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAg
ICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24o
ImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAg
IC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMSkKKyAgICAgICAgICAgIC5DYXRj
aCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgICAgICAuRW5kKCkKKworICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsMiIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1v
ZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwg
ImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBw
b3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlVHJ5Q2F0Y2hWYWx1ZSgpeworICAg
IGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6
IFsiaTMyIl19KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAg
ICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
aTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMikKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5DYXRjaCgwKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisK
KworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1
bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBu
ZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGlu
c3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcg
dGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RD
YWxsVHJ5Q2F0Y2hWYWx1ZSgpeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIu
VHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRp
b24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFsiaTMyIl19KS5FbmQoKQorICAgICAgICAuRXhwb3J0
KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2Fs
bCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikK
KyAgICAgICAgICAgICAgICAuQ2FsbCgxKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImNhbGwyIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
Y29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOwor
CisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4g
ZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9
CisKK2Z1bmN0aW9uIHRlc3RTdGFja1RyeUNhdGNoKCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWls
ZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAg
ICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVuZCgpCisg
ICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9u
KCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgIC8vIFRPRE86IGJ1aWxkZXIgZXJyb3IKKyAgICAg
ICAgICAgIC5UcnkoeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAg
ICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9
IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5z
dGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2Fs
bCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hv
dWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RMaXZlQWZ0ZXJUcnlDYXRjaCgp
IHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbXSB9KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQor
ICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAg
IC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0
OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAg
IC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAg
ICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdl
dCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAg
ICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7
CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBh
biBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsK
K30KKworZnVuY3Rpb24gdGVzdExpdmVBZnRlclRyeUNhdGNoQWxsKCkgeworICAgIGNvbnN0IGIg
PSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pLkVu
ZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhj
ZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisg
ICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgp
CisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25z
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFu
Y2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0
LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2Fz
bSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9u
IHRlc3RVbmlmeVRyeUNhdGNoQ2F0Y2goKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7
CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4Y2VwdGlvbigpCisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAg
ICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAg
ICAgICAgICAgICAgICAgIC5UaHJvdygxKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAg
ICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMSkK
KyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9
IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5z
dGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2Fs
bCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hv
dWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RVbmlmeVRyeUNhdGNoQ2F0Y2hB
bGwoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpCisgICAgICAg
ICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7
IHBhcmFtczogW10gfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9
KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5UaHJv
dygxKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMSkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdl
dCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAg
ICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7
CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBh
biBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsK
K30KKworZnVuY3Rpb24gdGVzdFVuaWZ5VHJ5Tm9UaHJvdygpIHsKKyAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6
IFtdIH0pCisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
YWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgi
aTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAg
LkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBj
b25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFz
c2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5l
eHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBm
cm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0VW5pZnlUcnlO
b0NhdGNoKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKQorICAg
ICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAgICAgIC5TaWduYXR1
cmUoeyBwYXJhbXM6IFtdIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29k
ZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkz
MiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAu
STMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgp
OworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBj
b25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisK
KyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBl
eHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30K
KworZnVuY3Rpb24gdGVzdE5lc3RlZENhdGNoICgpeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRl
cigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2Rl
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6
ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAg
LlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAg
ICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFs
bCgpCisgICAgICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkVuZCgpCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7Cisg
ICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0
IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7CisKKyAgICBhc3Nl
cnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uLCAi
d2FzbSBleGNlcHRpb24iKTsKK30KKwordGVzdFNpbXBsZVRyeUNhdGNoKCk7Cit0ZXN0U2ltcGxl
VHJ5Q2F0Y2hBbGwoKTsKK3Rlc3RTaW1wbGVUcnlDYXRjaFZhbHVlKCk7Cit0ZXN0Q2FsbFRyeUNh
dGNoKCk7Cit0ZXN0Q2FsbFRyeUNhdGNoQWxsKCk7Cit0ZXN0Q2FsbFRyeUNhdGNoVmFsdWUoKTsK
K3Rlc3RMaXZlQWZ0ZXJUcnlDYXRjaCgpOwordGVzdExpdmVBZnRlclRyeUNhdGNoQWxsKCk7Cit0
ZXN0VW5pZnlUcnlDYXRjaENhdGNoKCk7Cit0ZXN0VW5pZnlUcnlDYXRjaENhdGNoQWxsKCk7Cit0
ZXN0VW5pZnlUcnlOb1Rocm93KCk7Cit0ZXN0VW5pZnlUcnlOb0NhdGNoKCk7CisKKy8vIFRPRE86
IGVuYWJsZSB0aGlzIHRlc3QKKy8vIHRlc3RTdGFja1RyeUNhdGNoKCk7CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLWNhdGNo
YWxsLXJldGhyb3cuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJv
bS1qcy10by13YXNtLWNhdGNoYWxsLXJldGhyb3cuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI0YzMwZDkxYWM2
YmEzNzU0MTA0N2JjNjUyM2ZhYmFmMTFiYjQyZAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMv
d2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwtcmV0
aHJvdy5qcwpAQCAtMCwwICsxLDQxIEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVy
LmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNv
bnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBv
cnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
dm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2Vw
dGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCku
RnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAg
ICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAg
ICAgICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHko
KS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7
CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7
IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9y
dHMuZm9vOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBX
ZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LnRocm93
cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisKKyAgICB0
YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3Nl
cnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsK
K30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9t
LWpzLXRvLXdhc20tY2F0Y2hhbGwuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10
aHJvd24tZnJvbS1qcy10by13YXNtLWNhdGNoYWxsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3ZTRhNDRiMWZl
YzQxNmQzODRjNzk0OTlmOThiZjk0NjY5Y2I2NGMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLWNhdGNoYWxsLmpz
CkBAIC0wLDAgKzEsNDAgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitp
bXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9
IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1
bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9
KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCku
U2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlv
bigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJh
bXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAg
ICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAg
ICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0
IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1i
bHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0
IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7
CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAg
fQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hfYWxs
aW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJs
ZSIpOworCisgICAgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFtdIH0p
OworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hfYWxs
aW5nIGFuIG9wYXF1ZSB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUi
KTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1m
cm9tLWpzLXRvLXdhc20uanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24t
ZnJvbS1qcy10by13YXNtLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1MDE5MjAwYzlmZDlmMmY2MWZhYjQzODc0
MDZlODY2YmMzMmY3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4
Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLmpzCkBAIC0wLDAgKzEsNDAgQEAKK2ltcG9y
dCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAn
Li4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5U
eXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxi
YWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rp
b24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0p
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAu
RXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisg
ICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0
KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAg
IGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250
ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZv
bzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcgV2ViQXNz
ZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5j
ZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93
biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworCisgICAgdGFnID0gbmV3IFdlYkFzc2Vt
Ymx5LlRhZyh7IHBhcmFtZXRlcnM6IFtdIH0pOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5j
ZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3V0LW9mLXdhc20uanMgYi9KU1Rl
c3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3V0LW9mLXdhc20uanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYThlMzMwMWUzYjgwMDNhNTJhMmRlNjMzNTg2NzY5ZmY4OTA4MmY4ZQotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdXQtb2Ytd2FzbS5q
cwpAQCAtMCwwICsxLDI0IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJwor
aW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIg
PSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pLkVu
ZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhj
ZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAg
ICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FbmQoKQorCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgp
LmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
KyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOwor
CisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4
Y2VwdGlvbik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10
aHJvd24tb3Zlci13YXNtLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3du
LW92ZXItd2FzbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OWY0YzJlOTAzMWU5ZWQ0OWRlNjk3MWM5NzFiNjQw
YmVlMjRhZmMzCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRp
b24tdGhyb3duLW92ZXItd2FzbS5qcwpAQCAtMCwwICsxLDMwIEBACitpbXBvcnQgQnVpbGRlciBm
cm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5q
cycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigi
Zm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAg
LkNhbGwoMCkKKyAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7
CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNv
bnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0
OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0
aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKGluc3RhbmNlLmV4cG9ydHMuZm9vLCBbXSk7
CisgICAgfQorCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFz
c2VtYmx5LkV4Y2VwdGlvbiwgIndhc20gZXhjZXB0aW9uIik7Cit9CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10cmFwLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9l
eGNlcHRpb24tdHJhcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZmRmNTNlYjUwNWMzOTBiNDBiZjE1MzU1YjZk
NTM3MmU1NjBlOTFiCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNl
cHRpb24tdHJhcC5qcwpAQCAtMCwwICsxLDEzNCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4v
QnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK2Z1
bmN0aW9uIHRlc3RDYW5ub3RDYXRjaFVucmVhY2hhYmxlKCkgeworICAgIGNvbnN0IGIgPSBuZXcg
QnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgp
CisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAg
LkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsg
cGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisg
ICAgICAgICAgICAgICAgICAgIC5VbnJlYWNoYWJsZSgpCisgICAgICAgICAgICAgICAgLkNhdGNo
QWxsKCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0
IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1i
bHkuSW5zdGFuY2UobW9kdWxlKTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsICJVbnJlYWNoYWJsZSBjb2RlIHNob3Vs
ZCBub3QgYmUgZXhlY3V0ZWQiKTsKK30KKworZnVuY3Rpb24gdGVzdENhbm5vdENhdGNoT09CKCkg
eworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5NZW1vcnkoKQorICAgICAgICAgICAgLklu
aXRpYWxNYXhQYWdlcygwLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisg
ICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIi
IH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDEwMjQpCisgICAgICAgICAgICAgICAgICAgIC5JMzJMb2FkKDAsIDApCisgICAgICAg
ICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisg
ICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgp
CisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBt
b2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2Ug
PSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKworICAgIGFzc2VydC50aHJvd3Mo
aW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsICJPdXQgb2Yg
Ym91bmRzIG1lbW9yeSBhY2Nlc3MiKTsKK30KKworZnVuY3Rpb24gdGVzdFdhc21BUElUaHJvdygp
IHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAg
ICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczog
W10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAg
ICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgw
KQorICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5JMzJD
b25zdCgxKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7Cisg
ICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0
IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7
IGNhbGxiYWNrIH19KTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICBuZXcg
V2ViQXNzZW1ibHkuR2xvYmFsKHsKKyAgICAgICAgICAgIHZhbHVlOiAnYW55ZnVuYycKKyAgICAg
ICAgfSwge30pOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwo
KSwgMSk7Cit9CitmdW5jdGlvbiB0ZXN0SlNDYXRjaEFuZFJldGhyb3coKSB7CisgICAgY29uc3Qg
YiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgp
LkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lk
IiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAu
Q29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogWyJpMzIiXSwg
cmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAg
ICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyRXF6KCkKKyAgICAg
ICAgICAgICAgICAgICAgLklmKCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5VbnJl
YWNoYWJsZSgpCisgICAgICAgICAgICAgICAgICAgIC5FbHNlKCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
ICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJB
c3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZSht
b2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBmdW5jdGlvbiBjYWxsYmFj
aygpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGluc3RhbmNlLmV4cG9ydHMuY2FsbCgw
KTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICB9
CisgICAgfQorCisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmNhbGwo
MSksIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgIlVucmVhY2hhYmxlIGNvZGUgc2hvdWxkIG5v
dCBiZSBleGVjdXRlZCIpOworfQorCit0ZXN0Q2Fubm90Q2F0Y2hVbnJlYWNoYWJsZSgpOwordGVz
dENhbm5vdENhdGNoT09CKCk7Cit0ZXN0V2FzbUFQSVRocm93KCk7Cit0ZXN0SlNDYXRjaEFuZFJl
dGhyb3coKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy1mcm9tLWNh
dGNoLXRvLWNhdGNoLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LWZyb20tY2F0Y2gt
dG8tY2F0Y2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGRmZGE2ZDhhNjkxMTg0ZDk5OTU1NWQxOGU4ZDllZTUx
YmU0YWVhOAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy1m
cm9tLWNhdGNoLXRvLWNhdGNoLmpzCkBAIC0wLDAgKzEsNDUgQEAKK2ltcG9ydCBCdWlsZGVyIGZy
b20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0Lmpz
JworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJh
bXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQor
ICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJm
b28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAu
VHJ5KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2Fs
bCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkNhdGNoKDAp
CisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlJldGhyb3co
MCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAg
ICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdl
dCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAg
ICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29u
dGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5m
b287CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFz
c2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFu
Y2UuZXhwb3J0cy5jYWxsKCksIDMpOworCisgICAgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7
IHBhcmFtZXRlcnM6IFtdIH0pOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRz
LmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dh
c20vc3RyZXNzL3JldGhyb3ctdG8tY2F0Y2guanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhy
b3ctdG8tY2F0Y2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGYxY2JhNDNkY2I1YjQ0ZDlhZTY0ZmRjNTc5YTBj
OGE2NTUwM2Y3ZAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJv
dy10by1jYXRjaC5qcwpAQCAtMCwwICsxLDg4IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9C
dWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworewor
ICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAg
IC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwg
cmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhw
b3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Y2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMy
IikKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlJldGhyb3coMCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAg
LkkzMkNvbnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOwor
ICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25z
dCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDog
eyBjYWxsYmFjayB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisK
KyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5
LkV4Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhw
b3J0cy5jYWxsKCksIDMpOworCisgICAgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFt
ZXRlcnM6IFtdIH0pOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGws
IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxk
ZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNv
bnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisg
ICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUo
eyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikK
KyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAg
ICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJl
dDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAuVHJ5KCJp
MzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0
KDEpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikK
KyAgICAgICAgICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25z
dCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxl
dCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkg
eworICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAg
IH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0
YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3Nl
cnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsK
K30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy10by1kZWxlZ2F0ZS10
by1jYXRjaC5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy10by1kZWxlZ2F0ZS10by1j
YXRjaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43MDQ3OWMwY2VhMjNiNjBlMzk1NWExYjUxNzQ5MWZiNGY3NmVl
N2FkCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LXRvLWRl
bGVnYXRlLXRvLWNhdGNoLmpzCkBAIC0wLDAgKzEsMjU5IEBACitpbXBvcnQgQnVpbGRlciBmcm9t
ICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycK
KworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisg
ICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxi
YWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgLkV4Y2VwdGlv
bigiY29udGV4dCIsICJ0YWciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAidm9pZCIgfSkKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRp
b24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1
bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDEpCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7
IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAg
ICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikK
KyAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgICAgICAgICAgLlJl
dGhyb3coMCkKKyAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgLkRl
bGVnYXRlKDApCisgICAgICAgICAgICAuQ2F0Y2goMSkKKyAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMykKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5F
bmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29u
c3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGxldCBvdGhlclRh
ZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbImkzMiJdfSkKKyAgICBjb25z
dCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDog
eyBjYWxsYmFjaywgdGFnOiBvdGhlclRhZyB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2Uu
ZXhwb3J0cy5mb287CisgICAgbGV0IGFyZ3MgPSBbXTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNr
KCkgeworICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7
CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKKwor
ICAgIHRhZyA9IG90aGVyVGFnOworICAgIGFyZ3MgPSBbMTAwXTsKKworICAgIGxldCBleG4gPSBh
c3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9u
KTsKKyAgICBhc3NlcnQuZXEoZXhuLmdldEFyZyh0YWcsIDApLCAxMDApOworfQorCit7CisgICAg
Y29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLklt
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBh
cmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJjb250ZXh0
IiwgInRhZyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25h
dHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNh
bGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMSkKKyAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAg
ICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAg
ICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAg
ICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwo
MCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAg
ICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAuUmV0aHJvdygxKQorICAgICAgICAgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBi
LldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4pOworICAgIGxldCBvdGhlclRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBw
YXJhbWV0ZXJzOiBbImkzMiJdfSkKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjaywgdGFnOiBvdGhlclRhZyB9
fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisgICAgbGV0IGFyZ3Mg
PSBbXTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICBsZXQgZXhuID0gbmV3
IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIGFyZ3MpOworICAgICAgICB0YWcgPSBvdGhlclRh
ZzsKKyAgICAgICAgYXJncyA9IFsxMDBdOworICAgICAgICB0aHJvdyBleG47CisgICAgfQorCisg
ICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2Vw
dGlvbik7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUo
KS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4
dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAg
IC5FeGNlcHRpb24oImNvbnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogInZv
aWQiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAx
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJp
MzIiKQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5U
cnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgp
CisgICAgICAgICAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0
KDEpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5S
ZXRocm93KDEpCisgICAgICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgLkRlbGVnYXRlKDEpCisgICAgICAgICAgICAu
Q2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdlYkFzc2VtYmx5LlRh
Zyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFz
c2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrLCB0YWc6IG90aGVy
VGFnIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKyAgICBsZXQg
YXJncyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIGxldCBleG4g
PSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7CisgICAgICAgIHRhZyA9IG90
aGVyVGFnOworICAgICAgICBhcmdzID0gWzEwMF07CisgICAgICAgIHRocm93IGV4bjsKKyAgICB9
CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHku
RXhjZXB0aW9uKTsKK30KKworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAg
Yi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAg
ICAgICAgICAuRXhjZXB0aW9uKCJjb250ZXh0IiwgInRhZyIsIHsgcGFyYW1zOiBbImkzMiJdLCBy
ZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigi
Zm9vIiwgMSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAg
LlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgICAgICAuQ2F0
Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAg
ICAgICAgICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAg
IGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdlYkFz
c2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNlID0g
bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrLCB0
YWc6IG90aGVyVGFnIH19KTsKKworICAgIGxldCB0YWcgPSBvdGhlclRhZzsKKyAgICBsZXQgYXJn
cyA9IFsxMDBdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIGxldCBleG4g
PSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7CisgICAgICAgIHRocm93IGV4
bjsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDEwMCk7
Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQo
KQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJj
YWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgIC5FeGNl
cHRpb24oImNvbnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogInZvaWQiIH0p
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhj
ZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQo
KS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAxKQorICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxs
IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQor
ICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoImkz
MiIpCisgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAg
ICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAg
ICAgICAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisg
ICAgICAgICAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5SZXRocm93
KDEpCisgICAgICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgICAgICAgICAgLkRlbGVnYXRlKDApCisgICAgICAgICAgICAuQ2F0Y2go
MSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldl
YkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4pOworICAgIGxldCBvdGhlclRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJh
bWV0ZXJzOiBbImkzMiJdfSkKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5J
bnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjaywgdGFnOiBvdGhlclRhZyB9fSk7
CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisgICAgbGV0IGFyZ3MgPSBb
XTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICBsZXQgZXhuID0gbmV3IFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIGFyZ3MpOworICAgICAgICB0YWcgPSBvdGhlclRhZzsK
KyAgICAgICAgYXJncyA9IFsxMDBdOworICAgICAgICB0aHJvdyBleG47CisgICAgfQorCisgICAg
YXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKK30KZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS9zdHJlc3Mvc2ltcGxlLWV4cG9ydC1leGNlcHRpb24uanMgYi9KU1Rlc3RzL3dh
c20vc3RyZXNzL3NpbXBsZS1leHBvcnQtZXhjZXB0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiOTY5OTk3
NTNkM2E0YWQwODZhMGVjZTU4OTgyODRmOGZjYjhiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3dhc20vc3RyZXNzL3NpbXBsZS1leHBvcnQtZXhjZXB0aW9uLmpzCkBAIC0wLDAgKzEsMTYg
QEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3Nl
cnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7
CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVuZCgpCisgICAgICAg
IC5FeHBvcnQoKS5FeGNlcHRpb24oImZvbyIsIDApLkVuZCgpCisKKyAgICBjb25zdCBiaW4gPSBi
LldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3Rh
bmNlKG1vZHVsZSk7CisKKyAgICBhc3NlcnQuaW5zdGFuY2VvZihpbnN0YW5jZS5leHBvcnRzLmZv
bywgV2ViQXNzZW1ibHkuVGFnKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9MSUNF
TlNFIGIvSlNUZXN0cy93YXNtL3Y4L0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTNkOWM0N2UzM2MxODI5
Mjc0MWYxZTQwODkwYzhmZTJkNjI5OTY0NgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2Fz
bS92OC9MSUNFTlNFCkBAIC0wLDAgKzEsNjIgQEAKK1RoaXMgbGljZW5zZSBhcHBsaWVzIHRvIGFs
bCBwYXJ0cyBvZiBWOCB0aGF0IGFyZSBub3QgZXh0ZXJuYWxseQorbWFpbnRhaW5lZCBsaWJyYXJp
ZXMuICBUaGUgZXh0ZXJuYWxseSBtYWludGFpbmVkIGxpYnJhcmllcyB1c2VkIGJ5IFY4CithcmU6
CisKKyAgLSBQQ1JFIHRlc3Qgc3VpdGUsIGxvY2F0ZWQgaW4KKyAgICB0ZXN0L21qc3VuaXQvdGhp
cmRfcGFydHkvcmVnZXhwLXBjcmUvcmVnZXhwLXBjcmUuanMuICBUaGlzIGlzIGJhc2VkIG9uIHRo
ZQorICAgIHRlc3Qgc3VpdGUgZnJvbSBQQ1JFLTcuMywgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkg
dGhlIFVuaXZlcnNpdHkKKyAgICBvZiBDYW1icmlkZ2UgYW5kIEdvb2dsZSwgSW5jLiAgVGhlIGNv
cHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKKyAgICBhcmUgZW1iZWRkZWQgaW4gcmVnZXhwLXBj
cmUuanMuCisKKyAgLSBMYXlvdXQgdGVzdHMsIGxvY2F0ZWQgaW4gdGVzdC9tanN1bml0L3RoaXJk
X3BhcnR5L29iamVjdC1rZXlzLiAgVGhlc2UgYXJlCisgICAgYmFzZWQgb24gbGF5b3V0IHRlc3Rz
IGZyb20gd2Via2l0Lm9yZyB3aGljaCBhcmUgY29weXJpZ2h0ZWQgYnkKKyAgICBBcHBsZSBDb21w
dXRlciwgSW5jLiBhbmQgcmVsZWFzZWQgdW5kZXIgYSAzLWNsYXVzZSBCU0QgbGljZW5zZS4KKwor
ICAtIFN0cm9uZ3RhbGsgYXNzZW1ibGVyLCB0aGUgYmFzaXMgb2YgdGhlIGZpbGVzIGFzc2VtYmxl
ci1hcm0taW5sLmgsCisgICAgYXNzZW1ibGVyLWFybS5jYywgYXNzZW1ibGVyLWFybS5oLCBhc3Nl
bWJsZXItaWEzMi1pbmwuaCwKKyAgICBhc3NlbWJsZXItaWEzMi5jYywgYXNzZW1ibGVyLWlhMzIu
aCwgYXNzZW1ibGVyLXg2NC1pbmwuaCwKKyAgICBhc3NlbWJsZXIteDY0LmNjLCBhc3NlbWJsZXIt
eDY0LmgsIGFzc2VtYmxlci1taXBzLWlubC5oLAorICAgIGFzc2VtYmxlci1taXBzLmNjLCBhc3Nl
bWJsZXItbWlwcy5oLCBhc3NlbWJsZXIuY2MgYW5kIGFzc2VtYmxlci5oLgorICAgIFRoaXMgY29k
ZSBpcyBjb3B5cmlnaHRlZCBieSBTdW4gTWljcm9zeXN0ZW1zIEluYy4gYW5kIHJlbGVhc2VkCisg
ICAgdW5kZXIgYSAzLWNsYXVzZSBCU0QgbGljZW5zZS4KKworICAtIFZhbGdyaW5kIGNsaWVudCBB
UEkgaGVhZGVyLCBsb2NhdGVkIGF0IHNyYy90aGlyZF9wYXJ0eS92YWxncmluZC92YWxncmluZC5o
CisgICAgVGhpcyBpcyByZWxlYXNlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UuCisKKyAgLSBUaGUg
V2FzbSBDL0MrKyBBUEkgaGVhZGVycywgbG9jYXRlZCBhdCB0aGlyZF9wYXJ0eS93YXNtLWFwaS93
YXNtLntoLGhofQorICAgIFRoaXMgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEFwYWNoZSBsaWNlbnNl
LiBUaGUgQVBJJ3MgdXBzdHJlYW0gcHJvdG90eXBlCisgICAgaW1wbGVtZW50YXRpb24gYWxzbyBm
b3JtZWQgdGhlIGJhc2lzIG9mIFY4J3MgaW1wbGVtZW50YXRpb24gaW4KKyAgICBzcmMvd2FzbS9j
LWFwaS5jYy4KKworVGhlc2UgbGlicmFyaWVzIGhhdmUgdGhlaXIgb3duIGxpY2Vuc2VzOyB3ZSBy
ZWNvbW1lbmQgeW91IHJlYWQgdGhlbSwKK2FzIHRoZWlyIHRlcm1zIG1heSBkaWZmZXIgZnJvbSB0
aGUgdGVybXMgYmVsb3cuCisKK0Z1cnRoZXIgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91
bmQgaW4gTElDRU5TRSBmaWxlcyBsb2NhdGVkIGluIAorc3ViLWRpcmVjdG9yaWVzLgorCitDb3B5
cmlnaHQgMjAxNCwgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
K1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1hcGkuanMgYi9KU1Rl
c3RzL3dhc20vdjgvZXhjZXB0aW9ucy1hcGkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFkNTM2ODE0NTZjNjVl
Yzg2NzE4Yjg1ZTFhZmQ2ZmMwZmQ4OTc2NQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2Fz
bS92OC9leGNlcHRpb25zLWFwaS5qcwpAQCAtMCwwICsxLDIzMiBAQAorLy8gQ29weXJpZ2h0IDIw
MjEgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4
cGVyaW1lbnRhbC13YXNtLWVoIC0tZXhwZXJpbWVudGFsLXdhc20tcmVmdHlwZXMKKworbG9hZCgi
d2FzbS1tb2R1bGUtYnVpbGRlci5qcyIpOworCisoZnVuY3Rpb24gVGVzdEltcG9ydCgpIHsKKwor
ICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5LlRhZygpLCBUeXBlRXJyb3IsCisg
ICAgICAvZXhwZWN0cyB0aGUgdGFnIHR5cGUgYXMgdGhlIGZpcnN0IGFyZ3VtZW50Lyk7CisgIGFz
c2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuVGFnKHt9KSwgVHlwZUVycm9yLAorICAg
ICAgL2V4cGVjdHMgYSB0YWcgdHlwZSB3aXRoIHRoZSAncGFyYW1ldGVycycgcHJvcGVydHkvKTsK
KyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFsn
Zm9vJ119KSwgVHlwZUVycm9yLAorICAgICAgL2V4cGVjdHMgdGhlICdwYXJhbWV0ZXJzJyBmaWVs
ZCBvZiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBzZXF1ZW5jZSBvZiBXZWJBc3NlbWJseSB2
YWx1ZSB0eXBlcy8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5LlRhZyh7
cGFyYW1ldGVyczoge319KSwgVHlwZUVycm9yLAorICAgICAgL1R5cGUgZXJyb3IvKTsKKworICBs
ZXQganNfZXhjZXB0X2kzMiA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFsnaTMy
J119KTsKKyAgbGV0IGpzX2V4Y2VwdF92ID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVy
czogW119KTsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgYnVp
bGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleCIsIGtTaWdfdl9pKTsKKworICBhc3NlcnREb2Vz
Tm90VGhyb3coKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IGpzX2V4Y2VwdF9p
MzIgfX0pKTsKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0
ZSh7IG06IHsgZXg6IGpzX2V4Y2VwdF92IH19KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAorICAg
ICAgL2ltcG9ydGVkIFRhZyBtOmV4IHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBpbXBvcnRl
ZCBXZWJBc3NlbWJseSBUYWcncyBzaWduYXR1cmUvKTsKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAg
KCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IGpzX2V4Y2VwdF92IH19KSwgV2Vi
QXNzZW1ibHkuTGlua0Vycm9yLAorICAgICAgL2ltcG9ydGVkIFRhZyBtOmV4IHNpZ25hdHVyZSBk
b2Vzbid0IG1hdGNoIHRoZSBpbXBvcnRlZCBXZWJBc3NlbWJseSBUYWcncyBzaWduYXR1cmUvKTsK
KyAgYXNzZXJ0VHJ1ZShqc19leGNlcHRfaTMyLnRvU3RyaW5nKCkgPT0gIltvYmplY3QgV2ViQXNz
ZW1ibHkuVGFnXSIpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RFeHBvcnQoKSB7CisgIGxldCBi
dWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVy
LmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRl
cm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgp
OworCisgIGFzc2VydFRydWUoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGlu
c3RhbmNlLmV4cG9ydHMsICdleCcpKTsKKyAgYXNzZXJ0RXF1YWxzKCJvYmplY3QiLCB0eXBlb2Yg
aW5zdGFuY2UuZXhwb3J0cy5leCk7CisgIGFzc2VydEluc3RhbmNlb2YoaW5zdGFuY2UuZXhwb3J0
cy5leCwgV2ViQXNzZW1ibHkuVGFnKTsKKyAgYXNzZXJ0U2FtZShpbnN0YW5jZS5leHBvcnRzLmV4
LmNvbnN0cnVjdG9yLCBXZWJBc3NlbWJseS5UYWcpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJ
bXBvcnRFeHBvcnQoKSB7CisKKyAgbGV0IGpzX2V4X2kzMiA9IG5ldyBXZWJBc3NlbWJseS5UYWco
e3BhcmFtZXRlcnM6IFsnaTMyJ119KTsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IGluZGV4ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleCIs
IGtTaWdfdl9pKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFn
LCBpbmRleCk7CisKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsg
ZXg6IGpzX2V4X2kzMiB9fSk7CisgIGxldCByZXMgPSBpbnN0YW5jZS5leHBvcnRzLmV4OworICBh
c3NlcnRFcXVhbHMocmVzLCBqc19leF9pMzIpOworfSkoKTsKKworCisoZnVuY3Rpb24gVGVzdEV4
Y2VwdGlvbkNvbnN0cnVjdG9yKCkgeworICAvLyBDaGVjayBlcnJvcnMuCisgIGxldCBqc190YWcg
PSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbXX0pOworICBhc3NlcnRUaHJvd3Mo
KCkgPT4gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbigwKSwgVHlwZUVycm9yLAorICAgICAgL1dl
YkFzc2VtYmx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciBleHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVu
dCB0byBiZSBhIFdlYkFzc2VtYmx5LlRhZy8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbih7fSksIFR5cGVFcnJvciwKKyAgICAgIC9XZWJBc3NlbWJseS5F
eGNlcHRpb24gY29uc3RydWN0b3IgZXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBX
ZWJBc3NlbWJseS5UYWcvKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IFdlYkFzc2VtYmx5LkV4Y2Vw
dGlvbihqc190YWcpLCBUeXBlRXJyb3IsCisgICAgICAvY2FsbGluZyBXZWJBc3NlbWJseS5FeGNl
cHRpb24gY29uc3RydWN0b3Igd2l0aG91dCBuZXcgaXMgaW52YWxpZC8pOworICBsZXQganNfZXhj
ZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbihqc190YWcsIFtdKTsKKworICAvLyBD
aGVjayBwcm90b3R5cGUuCisgIGFzc2VydFNhbWUoV2ViQXNzZW1ibHkuRXhjZXB0aW9uLnByb3Rv
dHlwZSwganNfZXhjZXB0aW9uLl9fcHJvdG9fXyk7CisgIGFzc2VydFRydWUoanNfZXhjZXB0aW9u
IGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKworICAvLyBDaGVjayBwcm90b3R5
cGUgb2YgYSB0aHJvd24gZXhjZXB0aW9uLgorICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgd2FzbV90YWcgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7Cisg
IGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93Iiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShb
a0V4cHJUaHJvdywgd2FzbV90YWddKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1
aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgdHJ5IHsKKyAgICBpbnN0YW5jZS5leHBvcnRzLnRocm93
KCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBhc3NlcnRUcnVlKGUgaW5zdGFuY2VvZiBXZWJBc3Nl
bWJseS5FeGNlcHRpb24pOworICB9Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEV4Y2VwdGlvbkNv
bnN0cnVjdG9yV2l0aFBheWxvYWQoKSB7CisgIGxldCB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFn
KAorICAgICAge3BhcmFtZXRlcnM6IFsnaTMyJywgJ2YzMicsICdpNjQnLCAnZjY0JywgJ2V4dGVy
bnJlZiddfSk7CisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9u
KAorICAgICAgdGFnLCBbMW4sIDIsIDNuLCA0LCB7fV0pLCBUeXBlRXJyb3IpOworICBhc3NlcnRE
b2VzTm90VGhyb3coKCkgPT4gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFszLCA0LCA1
biwgNiwge31dKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdENhdGNoSlNFeGNlcHRpb24oKSB7
CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBqc190YWcg
PSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbXX0pOworICBsZXQganNfZnVuY19p
bmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0KCdtJywgJ2pzX2Z1bmMnLCBrU2lnX3Zfdik7CisgIGxl
dCBqc190YWdfaW5kZXggPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImpzX3RhZyIsIGtT
aWdfdl92KTsKKyAgbGV0IHRhZ19pbmRleCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAg
YnVpbGRlci5hZGRFeHBvcnRPZktpbmQoIndhc21fdGFnIiwga0V4dGVybmFsVGFnLCB0YWdfaW5k
ZXgpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaCIsIGtTaWdfaV92KQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgIGtFeHByQ2FsbEZ1
bmN0aW9uLCBqc19mdW5jX2luZGV4LAorICAgICAgICBrRXhwckkzMkNvbnN0LCAwLAorICAgICAg
ICBrRXhwckNhdGNoLCBqc190YWdfaW5kZXgsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisg
ICAgICAgIGtFeHByQ2F0Y2gsIHRhZ19pbmRleCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMiwK
KyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IHRhZzsKKyAg
ZnVuY3Rpb24ganNfZnVuYygpIHsKKyAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9u
KHRhZywgW10pOworICB9CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoe206
IHtqc19mdW5jLCBqc190YWd9fSk7CisgIHRhZyA9IGpzX3RhZzsKKyAgYXNzZXJ0RXF1YWxzKDEs
IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2goKSk7CisgIHRhZyA9IGluc3RhbmNlLmV4cG9ydHMud2Fz
bV90YWc7CisgIGFzc2VydEVxdWFscygyLCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoKCkpOworfSko
KTsKKworZnVuY3Rpb24gVGVzdENhdGNoSlModHlwZXNfc3RyLCB0eXBlcywgdmFsdWVzKSB7Cisg
IC8vIENyZWF0ZSBhIEpTIGV4Y2VwdGlvbiwgY2F0Y2ggaXQgaW4gd2FzbSBhbmQgY2hlY2sgdGhl
IHVucGFja2VkIHZhbHVlKHMpLgorICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQganNfdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogdHlw
ZXNfc3RyfSk7CisgIGxldCBqc19mdW5jX2luZGV4ID0gYnVpbGRlci5hZGRJbXBvcnQoJ20nLCAn
anNfZnVuYycsIGtTaWdfdl92KTsKKyAgbGV0IHNpZzEgPSBtYWtlU2lnKHR5cGVzLCBbXSk7Cisg
IGxldCBzaWcyID0gbWFrZVNpZyhbXSwgdHlwZXMpOworICBsZXQganNfdGFnX2luZGV4ID0gYnVp
bGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJqc190YWciLCBzaWcxKTsKKyAgbGV0IHRhZ19pbmRl
eCA9IGJ1aWxkZXIuYWRkVGFnKHNpZzEpOworICBsZXQgcmV0dXJuX3R5cGUgPSBidWlsZGVyLmFk
ZFR5cGUoc2lnMik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJ3YXNtX3RhZyIsIGtFeHRl
cm5hbFRhZywgdGFnX2luZGV4KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2giLCBzaWcy
KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwgcmV0dXJuX3R5cGUsCisgICAg
ICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBqc19mdW5jX2luZGV4LAorICAgICAgICBrRXhwclVucmVh
Y2hhYmxlLAorICAgICAgICBrRXhwckNhdGNoLCBqc190YWdfaW5kZXgsCisgICAgICAgIGtFeHBy
Q2F0Y2gsIHRhZ19pbmRleCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgbGV0IGV4Y2VwdGlvbjsKKyAgZnVuY3Rpb24ganNfZnVuYygpIHsKKyAgICB0aHJvdyBl
eGNlcHRpb247CisgIH0KKyAgbGV0IGV4cGVjdGVkID0gdmFsdWVzLmxlbmd0aCA9PSAxID8gdmFs
dWVzWzBdIDogdmFsdWVzOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHtt
OiB7anNfZnVuYywganNfdGFnfX0pOworICBleGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHkuRXhj
ZXB0aW9uKGpzX3RhZywgdmFsdWVzKTsKKyAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBpbnN0YW5j
ZS5leHBvcnRzLmNhdGNoKCkpOworICBleGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0
aW9uKGluc3RhbmNlLmV4cG9ydHMud2FzbV90YWcsIHZhbHVlcyk7CisgIGFzc2VydEVxdWFscyhl
eHBlY3RlZCwgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaCgpKTsKK30KKworKGZ1bmN0aW9uIFRlc3RD
YXRjaEpTRXhjZXB0aW9uV2l0aFBheWxvYWQoKSB7CisgIFRlc3RDYXRjaEpTKFsnaTMyJ10sIFtr
V2FzbUkzMl0sIFsxXSk7CisgIFRlc3RDYXRjaEpTKFsnaTY0J10sIFtrV2FzbUk2NF0sIFsybl0p
OworICBUZXN0Q2F0Y2hKUyhbJ2YzMiddLCBba1dhc21GMzJdLCBbM10pOworICBUZXN0Q2F0Y2hK
UyhbJ2Y2NCddLCBba1dhc21GNjRdLCBbNF0pOworICBUZXN0Q2F0Y2hKUyhbJ2V4dGVybnJlZidd
LCBba1dhc21FeHRlcm5SZWZdLCBbe3ZhbHVlOiA1fV0pOworICBUZXN0Q2F0Y2hKUyhbJ2kzMics
ICdpNjQnLCAnZjMyJywgJ2Y2NCcsICdleHRlcm5yZWYnXSwKKyAgICAgICAgICAgICAgW2tXYXNt
STMyLCBrV2FzbUk2NCwga1dhc21GMzIsIGtXYXNtRjY0LCBrV2FzbUV4dGVyblJlZl0sCisgICAg
ICAgICAgICAgIFs2LCA3biwgOCwgOSwge3ZhbHVlOiAxMH1dKTsKK30pKCk7CisKK2Z1bmN0aW9u
IFRlc3RHZXRBcmdIZWxwZXIodHlwZXNfc3RyLCB0eXBlcywgdmFsdWVzKSB7CisgIGxldCB0YWcg
PSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiB0eXBlc19zdHJ9KTsKKyAgbGV0IGV4
Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCB2YWx1ZXMpOworICBmb3Ig
KGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyArK2kpIHsKKyAgICBhc3NlcnRFcXVhbHMoZXhjZXB0
aW9uLmdldEFyZyh0YWcsIGkpLCB2YWx1ZXNbaV0pOworICB9CisKKyAgbGV0IGJ1aWxkZXIgPSBu
ZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IHNpZyA9IG1ha2VTaWcodHlwZXMsIFtdKTsK
KyAgbGV0IHRhZ19pbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAidCIsIHNpZyk7
CisgIGxldCBib2R5ID0gW107CisgIGZvciAoaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7ICsraSkg
eworICAgIGJvZHkucHVzaChrRXhwckxvY2FsR2V0LCBpKTsKKyAgfQorICBib2R5LnB1c2goa0V4
cHJUaHJvdywgdGFnX2luZGV4KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBzaWcp
CisgICAgICAuYWRkQm9keShib2R5KS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1
aWxkZXIuaW5zdGFudGlhdGUoeydtJzogeyd0JzogdGFnfX0pOworICB0cnkgeworICAgIGluc3Rh
bmNlLmV4cG9ydHMudGhyb3coLi4udmFsdWVzKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGZvciAo
aSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7ICsraSkgeworICAgICAgYXNzZXJ0RXF1YWxzKGUuZ2V0
QXJnKHRhZywgaSksIHZhbHVlc1tpXSk7CisgICAgfQorICB9Cit9CisKKyhmdW5jdGlvbiBUZXN0
R2V0QXJnKCkgeworICAvLyBDaGVjayBlcnJvcnMuCisgIGxldCB0YWcgPSBuZXcgV2ViQXNzZW1i
bHkuVGFnKHtwYXJhbWV0ZXJzOiBbJ2kzMiddfSk7CisgIGxldCBleGNlcHRpb24gPSBuZXcgV2Vi
QXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgWzBdKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGV4Y2Vw
dGlvbi5nZXRBcmcoMCwgMCksIFR5cGVFcnJvciwKKyAgICAgIC9GaXJzdCBhcmd1bWVudCBtdXN0
IGJlIGEgV2ViQXNzZW1ibHkuVGFnLyk7CisgIGFzc2VydFRocm93cygoKSA9PiBleGNlcHRpb24u
Z2V0QXJnKHt9LCAwKSwgVHlwZUVycm9yLAorICAgICAgL0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUg
YSBXZWJBc3NlbWJseS5UYWcvKTsKKyAgLy9hc3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0aW9uLmdl
dEFyZyh0YWcsIHVuZGVmaW5lZCksIFR5cGVFcnJvciwKKyAgICAgIC8vL0luZGV4IG11c3QgYmUg
Y29udmVydGlibGUgdG8gYSB2YWxpZCBudW1iZXIvKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGV4
Y2VwdGlvbi5nZXRBcmcodGFnLCAweEZGRkZGRkZGKSwgUmFuZ2VFcnJvciwKKyAgICAgIC9JbmRl
eCBvdXQgb2YgcmFuZ2UvKTsKKyAgbGV0IHdyb25nX3RhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWco
e3BhcmFtZXRlcnM6IFsnaTMyJ119KTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGV4Y2VwdGlvbi5n
ZXRBcmcod3JvbmdfdGFnLCAwKSwgVHlwZUVycm9yLAorICAgICAgL0ZpcnN0IGFyZ3VtZW50IGRv
ZXMgbm90IG1hdGNoIHRoZSBleGNlcHRpb24gdGFnLyk7CisKKyAgLy8gQ2hlY2sgZGVjb2Rpbmcu
CisgIFRlc3RHZXRBcmdIZWxwZXIoWydpMzInXSwgW2tXYXNtSTMyXSwgWzFdKTsKKyAgVGVzdEdl
dEFyZ0hlbHBlcihbJ2k2NCddLCBba1dhc21JNjRdLCBbMm5dKTsKKyAgVGVzdEdldEFyZ0hlbHBl
cihbJ2YzMiddLCBba1dhc21GMzJdLCBbM10pOworICBUZXN0R2V0QXJnSGVscGVyKFsnZjY0J10s
IFtrV2FzbUY2NF0sIFs0XSk7CisgIFRlc3RHZXRBcmdIZWxwZXIoWydleHRlcm5yZWYnXSwgW2tX
YXNtRXh0ZXJuUmVmXSwgW3t2YWw6IDV9XSk7CisgIFRlc3RHZXRBcmdIZWxwZXIoWydpMzInLCAn
aTY0JywgJ2YzMicsICdmNjQnLCAnZXh0ZXJucmVmJ10sIFtrV2FzbUkzMiwga1dhc21JNjQsIGtX
YXNtRjMyLCBrV2FzbUY2NCwga1dhc21FeHRlcm5SZWZdLCBbNSwgNm4sIDcsIDgsIHt2YWw6IDl9
XSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEV4Y2VwdGlvbklzKCkgeworICBsZXQgdGFnMSA9
IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFtdfSk7CisgIGxldCB0YWcyID0gbmV3
IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogW119KTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+
IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oe30sIFtdKSwgVHlwZUVycm9yLAorICAgICAgL2V4
cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgV2ViQXNzZW1ibHkuVGFnLyk7CisKKyAg
bGV0IGV4Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnMSwgW10pOworICBh
c3NlcnRUcnVlKGV4Y2VwdGlvbi5pcyh0YWcxKSk7CisgIGFzc2VydEZhbHNlKGV4Y2VwdGlvbi5p
cyh0YWcyKSk7CisKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGV4Y2VwdGlvbi5pcy5hcHBseSh7fSwg
dGFnMSksIFR5cGVFcnJvciwKKyAgICAgIC9XZWJBc3NlbWJseS5FeGNlcHRpb24gb3BlcmF0aW9u
IGNhbGxlZCBvbiBub24tRXhjZXB0aW9uIG9iamVjdC8pOworfSkoKTsKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWV4cG9ydC5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNl
cHRpb25zLWV4cG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYzk2OTBmNWI4OGY3ZTU0M2NkYzkzZDkxY2Mx
YTgxODNkODM4M2JmCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlv
bnMtZXhwb3J0LmpzCkBAIC0wLDAgKzEsNTMgQEAKKy8vIENvcHlyaWdodCAyMDE4IHRoZSBWOCBw
cm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1leHBvc2Utd2FzbSAt
LWV4cGVyaW1lbnRhbC13YXNtLWVoCisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsK
KworKGZ1bmN0aW9uIFRlc3RFeHBvcnRNdWx0aXBsZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcg
V2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFkZFRhZyhrU2ln
X3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2kpOworICBidWls
ZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgxYSIsIGtFeHRlcm5hbFRhZywgZXhjZXB0MSk7CisgIGJ1
aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDFiIiwga0V4dGVybmFsVGFnLCBleGNlcHQxKTsKKyAg
YnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4MiIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Mik7Cisg
IGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRUcnVlKE9i
amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnN0YW5jZS5leHBvcnRzLCAnZXgx
YScpKTsKKyAgYXNzZXJ0VHJ1ZShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo
aW5zdGFuY2UuZXhwb3J0cywgJ2V4MWInKSk7CisgIGFzc2VydFRydWUoT2JqZWN0LnByb3RvdHlw
ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGluc3RhbmNlLmV4cG9ydHMsICdleDInKSk7CisgIC8vIEZJ
WE1FOiBmaXggYnJva2VuIHY4IHdhc20gZXhjZXB0aW9ucyB0ZXN0cworICAvLyBhc3NlcnRTYW1l
KGluc3RhbmNlLmV4cG9ydHMuZXgxYSwgaW5zdGFuY2UuZXhwb3J0cy5leDFiKTsKKyAgYXNzZXJ0
Tm90U2FtZShpbnN0YW5jZS5leHBvcnRzLmV4MWEsIGluc3RhbmNlLmV4cG9ydHMuZXgyKTsKK30p
KCk7CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0T3V0T2ZCb3VuZHMoKSB7CisgIGxldCBidWlsZGVy
ID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRh
ZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleF9vb2IiLCBrRXh0ZXJu
YWxUYWcsIGV4Y2VwdCArIDEpOworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVy
Lmluc3RhbnRpYXRlKCksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwKKyAgICAgIC9XZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMxOiAwdGggRXhwb3J0IGhhcyBpbnZh
bGlkIGV4Y2VwdGlvbiBudW1iZXIgMSBpdCBleGNlZWRzIHRoZSBleGNlcHRpb24gaW5kZXggc3Bh
Y2UgMSwgbmFtZWQgJ2V4X29vYicvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0U2Ft
ZU5hbWVUd2ljZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsK
KyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRF
eHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBidWlsZGVyLmFkZEV4
cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGFzc2VydFRocm93cygK
KyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLAorICAgICAgL1dlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzA6
IGR1cGxpY2F0ZSBleHBvcnQ6ICdleCcvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0
TW9kdWxlR2V0RXhwb3J0cygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRl
ci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgbW9k
dWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLnRvQnVmZmVyKCkpOworCisgIGxl
dCBleHBvcnRzID0gV2ViQXNzZW1ibHkuTW9kdWxlLmV4cG9ydHMobW9kdWxlKTsKKyAgYXNzZXJ0
QXJyYXlFcXVhbHMoW3sgbmFtZTogImV4Iiwga2luZDogInRhZyIgfV0sIGV4cG9ydHMpOworfSko
KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWV4dGVybnJlZi5qcyBi
L0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWV4dGVybnJlZi5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYmJk
YTM3ZjE2ZWIxNTAzMjQ5MDlkNmI2YzUwZmRhYThkMDQ4ZDU0Ci0tLSAvZGV2L251bGwKKysrIGIv
SlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXh0ZXJucmVmLmpzCkBAIC0wLDAgKzEsOTYgQEAK
Ky8vIENvcHlyaWdodCAyMDE4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
CisvLyBGbGFnczogLS1leHBlcmltZW50YWwtd2FzbS1laCAtLWV4cGVyaW1lbnRhbC13YXNtLXJl
ZnR5cGVzIC0tYWxsb3ctbmF0aXZlcy1zeW50YXgKKworbG9hZCgid2FzbS1tb2R1bGUtYnVpbGRl
ci5qcyIpOworbG9hZCgiZXhjZXB0aW9ucy11dGlscy5qcyIpOworCisvLyBUZXN0IHRoZSBlbmNv
ZGluZyBvZiBhIHRocm93biBleGNlcHRpb24gd2l0aCBhIG51bGwtcmVmIHZhbHVlLgorKGZ1bmN0
aW9uIFRlc3RUaHJvd1JlZk51bGwoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfcik7CisgIGJ1
aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X251bGwiLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5
KFsKKyAgICAgICAga0V4cHJSZWZOdWxsLCBrRXh0ZXJuUmVmQ29kZSwKKyAgICAgICAga0V4cHJU
aHJvdywgZXhjZXB0LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9y
dE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1
aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0
YW5jZS5leHBvcnRzLmV4LCBbbnVsbF0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfbnVs
bCgpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcvY2F0Y2hpbmcgdGhlIG51bGwtcmVmIHZh
bHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd0NhdGNoUmVmTnVsbCgpIHsKKyAgbGV0IGJ1aWxkZXIg
PSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFn
KGtTaWdfdl9yKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfY2F0Y2hfbnVsbCIsIGtT
aWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisg
ICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwckkzMkVxeiwKKyAgICAg
ICAgICBrRXhwcklmLCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByUmVmTnVsbCwga0V4dGVy
blJlZkNvZGUsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4
cHJFbHNlLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgNDIsCisgICAgICAgICAga0V4cHJF
bmQsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclJlZklzTnVs
bCwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHBySTMyQ29u
c3QsIDIzLAorICAgICAgICAgIGtFeHByRWxzZSwKKyAgICAgICAgICAgIGtFeHByVW5yZWFjaGFi
bGUsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhw
b3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcs
IGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBh
c3NlcnRFcXVhbHMoMjMsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfbnVsbCgwKSk7Cisg
IGFzc2VydEVxdWFscyg0MiwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9udWxsKDEpKTsK
K30pKCk7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3duIGV4Y2VwdGlvbiB3aXRo
IGEgcmVmZXJlbmNlIHR5cGUgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93UmVmUGFyYW0oKSB7
CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQg
PSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfcik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93
X3BhcmFtIiwga1NpZ192X3IpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxH
ZXQsIDAsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQp
OworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGxldCBvID0gbmV3
IE9iamVjdCgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9y
dHMuZXgsIFtvXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbShvKSk7CisgIGFz
c2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFsxXSwgKCkgPT4g
aW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSgxKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5z
dGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFsyLjNdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRz
LnRocm93X3BhcmFtKDIuMykpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5j
ZS5leHBvcnRzLmV4LCBbInN0ciJdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFt
KCJzdHIiKSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nL2NhdGNoaW5nIHRoZSByZWZlcmVu
Y2UgdHlwZSB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFJlZlBhcmFtKCkgeworICBs
ZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVp
bGRlci5hZGRUYWcoa1NpZ192X3IpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19jYXRj
aF9wYXJhbSIsIGtTaWdfcl9yKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwg
a0V4dGVyblJlZkNvZGUsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBr
RXhwclRocm93LCBleGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAg
ICAvLyBmYWxsLXRocm91Z2gKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0
KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBsZXQgbyA9IG5l
dyBPYmplY3QoKTsKKworICBhc3NlcnRFcXVhbHMobywgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19j
YXRjaF9wYXJhbShvKSk7CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRocm93
X2NhdGNoX3BhcmFtKDEpKTsKKyAgYXNzZXJ0RXF1YWxzKDIuMywgaW5zdGFuY2UuZXhwb3J0cy50
aHJvd19jYXRjaF9wYXJhbSgyLjMpKTsKKyAgYXNzZXJ0RXF1YWxzKCJzdHIiLCBpbnN0YW5jZS5l
eHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKCJzdHIiKSk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtaW1wb3J0LmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2Vw
dGlvbnMtaW1wb3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhNGYwYTA1NmJmY2Y3Y2MwMzM1ZWRmYjBjNzEy
ZTU1YjVlNzFhNDgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9u
cy1pbXBvcnQuanMKQEAgLTAsMCArMSw5MCBAQAorLy8gQ29weXJpZ2h0IDIwMTggdGhlIFY4IHBy
b2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cG9zZS13YXNtIC0t
ZXhwZXJpbWVudGFsLXdhc20tZWgKKworbG9hZCgid2FzbS1tb2R1bGUtYnVpbGRlci5qcyIpOwor
CisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcmV0dXJuIGEgbmV3IGV4cG9ydGVkIGV4Y2VwdGlvbiB3
aXRoIHRoZSB7a1NpZ192X3Z9IHR5cGUKKy8vIHNpZ25hdHVyZSBmcm9tIGFuIGFub255bW91cyBt
b2R1bGUuIFRoZSB1bmRlcmx5aW5nIG1vZHVsZSBpcyB0aHJvd24gYXdheS4KKy8vIFRoaXMgYWxs
b3dzIHRlc3RzIHRvIHJlYXNvbiBzb2xlbHkgYWJvdXQgaW1wb3J0aW5nIGV4Y2VwdGlvbnMuCitm
dW5jdGlvbiBOZXdFeHBvcnRlZFRhZygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKyAgbGV0IHRhZyA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVp
bGRlci5hZGRFeHBvcnRPZktpbmQoInQiLCBrRXh0ZXJuYWxUYWcsIHRhZyk7CisgIGxldCBpbnN0
YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgcmV0dXJuIGluc3RhbmNlLmV4cG9ydHMu
dDsKK30KKworKGZ1bmN0aW9uIFRlc3RJbXBvcnRTaW1wbGUoKSB7CisgIGxldCBleHBvcnRlZCA9
IE5ld0V4cG9ydGVkVGFnKCk7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVy
KCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1Np
Z192X3YpOworCisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRl
KHsgbTogeyBleDogZXhwb3J0ZWQgfX0pKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0
TXVsdGlwbGUoKSB7CisgIGxldCBleHBvcnRlZCA9IE5ld0V4cG9ydGVkVGFnKCk7CisgIGxldCBi
dWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRl
ci5hZGRJbXBvcnRlZFRhZygibSIsICJleDEiLCBrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0g
YnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleDIiLCBrU2lnX3Zfdik7CisgIGxldCBleGNl
cHQzID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2lu
ZCgiZXgyIiwga0V4dGVybmFsVGFnLCBleGNlcHQyKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktp
bmQoImV4MyIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Myk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxk
ZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4MTogZXhwb3J0ZWQsIGV4MjogZXhwb3J0ZWQgfX0pOwor
CisgIGFzc2VydFRydWUoZXhjZXB0MSA8IGV4Y2VwdDMgJiYgZXhjZXB0MiA8IGV4Y2VwdDMpOwor
ICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBpbnN0YW5jZS5leHBvcnRzLmV4MSk7CisgIC8vIEZJ
WE1FOiBmaXggYnJva2VuIHY4IHdhc20gZXhjZXB0aW9ucyB0ZXN0cworICAvLyBhc3NlcnRTYW1l
KGV4cG9ydGVkLCBpbnN0YW5jZS5leHBvcnRzLmV4Mik7CisgIGFzc2VydE5vdFNhbWUoZXhwb3J0
ZWQsIGluc3RhbmNlLmV4cG9ydHMuZXgzKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0
TWlzc2luZygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAg
bGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3Zfdik7
CisKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7fSks
IFR5cGVFcnJvciwKKyAgICAgIC9pbXBvcnQgbTpleCBtdXN0IGJlIGFuIG9iamVjdC8pOworICBh
c3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbToge319KSwg
V2ViQXNzZW1ibHkuTGlua0Vycm9yLAorICAgICAgL1RhZyBpbXBvcnQgbTpleCBpcyBub3QgYW4g
aW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFnLyk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdElt
cG9ydFZhbHVlTWlzbWF0Y2goKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWls
ZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwg
a1NpZ192X3YpOworCisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoeyBtOiB7IGV4OiAyMyB9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9U
YWcgaW1wb3J0IG06ZXggaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhZy8pOwor
ICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBl
eDoge30gfX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvVGFnIGltcG9ydCBtOmV4
IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWcvKTsKKyAgdmFyIG1vbmtleSA9
IE9iamVjdC5jcmVhdGUoTmV3RXhwb3J0ZWRUYWcoKSk7CisgIGFzc2VydFRocm93cygKKyAgICAg
ICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4OiBtb25rZXkgfX0pLCBXZWJBc3Nl
bWJseS5MaW5rRXJyb3IsCisgICAgICAvVGFnIGltcG9ydCBtOmV4IGlzIG5vdCBhbiBpbnN0YW5j
ZSBvZiBXZWJBc3NlbWJseS5UYWcvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0U2ln
bmF0dXJlTWlzbWF0Y2goKSB7CisgIGxldCBleHBvcnRlZCA9IE5ld0V4cG9ydGVkVGFnKCk7Cisg
IGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBi
dWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X2kpOworCisgIGFzc2VydFRo
cm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4OiBleHBvcnRl
ZCB9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9pbXBvcnRlZCBUYWcgbTpleCBz
aWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgaW1wb3J0ZWQgV2ViQXNzZW1ibHkgVGFnJ3Mgc2ln
bmF0dXJlLyk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEltcG9ydE1vZHVsZUdldEltcG9ydHMo
KSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNl
cHQgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X3YpOworICBsZXQg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLnRvQnVmZmVyKCkpOworCisg
IGxldCBpbXBvcnRzID0gV2ViQXNzZW1ibHkuTW9kdWxlLmltcG9ydHMobW9kdWxlKTsKKyAgYXNz
ZXJ0QXJyYXlFcXVhbHMoW3sgbW9kdWxlOiAibSIsIG5hbWU6ICJleCIsIGtpbmQ6ICJ0YWciIH1d
LCBpbXBvcnRzKTsKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9u
cy1yZXRocm93LmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtcmV0aHJvdy5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45MjMzOWJlZjJmNjk0MmJkNWY2ZTVlYjM1ZDcxODljMmNhYzU5MGE4Ci0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtcmV0aHJvdy5qcwpAQCAtMCww
ICsxLDE0MiBAQAorLy8gQ29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cG9zZS13YXNtIC0tZXhwZXJpbWVudGFsLXdhc20t
ZWggLS1hbGxvdy1uYXRpdmVzLXN5bnRheAorCitsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpz
Iik7Citsb2FkKCJleGNlcHRpb25zLXV0aWxzLmpzIik7CisKKy8vIFRlc3QgdGhhdCByZXRocm93
IGV4cHJlc3Npb25zIGNhbiB0YXJnZXQgY2F0Y2ggYmxvY2tzLgorKGZ1bmN0aW9uIFRlc3RSZXRo
cm93SW5DYXRjaCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsK
KyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRG
dW5jdGlvbigicmV0aHJvdzAiLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAg
a0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAg
ICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclJldGhyb3csIDAsCisgICAg
ICAgIGtFeHByRW5kLAorICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24o
InJldGhyb3cxIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5
LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgIGtFeHBy
Q2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtF
eHBySTMyRXF6LAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtF
eHByUmV0aHJvdywgMSwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICBrRXhwckkzMkNv
bnN0LCAyMywKKyAgICAgICAga0V4cHJFbmQKKyAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVy
LmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0
YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3Rh
bmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRo
cm93MCgpKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5l
eCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMucmV0aHJvdzEoMCkpOworICBhc3NlcnRFcXVh
bHMoMjMsIGluc3RhbmNlLmV4cG9ydHMucmV0aHJvdzEoMSkpOworfSkoKTsKKworLy8gVGVzdCB0
aGF0IHJldGhyb3cgZXhwcmVzc2lvbnMgY2FuIHRhcmdldCBjYXRjaC1hbGwgYmxvY2tzLgorKGZ1
bmN0aW9uIFRlc3RSZXRocm93SW5DYXRjaEFsbCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2Fz
bU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigicmV0aHJvdzAiLCBrU2lnX3ZfdikKKyAgICAgIC5h
ZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwclRo
cm93LCBleGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJSZXRo
cm93LCAwLAorICAgICAgICBrRXhwckVuZCwKKyAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJyZXRocm93MSIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAg
ICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAor
ICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAg
ICAgICAga0V4cHJJMzJFcXosCisgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAg
ICAgICAga0V4cHJSZXRocm93LCAxLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgIGtF
eHBySTMyQ29uc3QsIDIzLAorICAgICAgICBrRXhwckVuZAorICBdKS5leHBvcnRGdW5jKCk7Cisg
IGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAg
bGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJv
d3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBv
cnRzLnJldGhyb3cwKCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5l
eHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93MSgwKSk7CisgIGFz
c2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93MSgxKSk7Cit9KSgpOworCisv
LyBUZXN0IHRoYXQgcmV0aHJvdyBleHByZXNzaW9uIHByb3Blcmx5IHRhcmdldCB0aGUgY29ycmVj
dCBzdXJyb3VuZGluZyB0cnkKKy8vIGJsb2NrIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIG11bHRp
cGxlIGhhbmRsZXJzIGJlaW5nIGludm9sdmVkLgorKGZ1bmN0aW9uIFRlc3RSZXRocm93TmVzdGVk
KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhj
ZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVy
LmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInJldGhyb3dfbmVzdGVk
Iiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkz
MiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQyLAorICAgICAgICBrRXhwckNhdGNoLCBl
eGNlcHQyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHBy
VGhyb3csIGV4Y2VwdDEsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAgICAgICAg
ICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAwLAorICAg
ICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAg
ICAgICAgICAgICAga0V4cHJSZXRocm93LCAxLAorICAgICAgICAgICAga0V4cHJFbmQsCisgICAg
ICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwK
KyAgICAgICAgICAgIGtFeHBySTMyRXEsCisgICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQs
CisgICAgICAgICAgICAgIGtFeHByUmV0aHJvdywgMiwKKyAgICAgICAgICAgIGtFeHByRW5kLAor
ICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMjMsCisgICAgICAgICAga0V4cHJFbmQsCisgICAg
ICAgIGtFeHByRW5kLAorICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZL
aW5kKCJleDEiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDEpOworICBidWlsZGVyLmFkZEV4cG9ydE9m
S2luZCgiZXgyIiwga0V4dGVybmFsVGFnLCBleGNlcHQyKTsKKyAgbGV0IGluc3RhbmNlID0gYnVp
bGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3Rh
bmNlLmV4cG9ydHMuZXgxLCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X25lc3Rl
ZCgwKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgy
LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X25lc3RlZCgxKSk7CisgIGFzc2Vy
dEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X25lc3RlZCgyKSk7Cit9KSgpOwor
CisvLyBUZXN0IHRoYXQgYW4gZXhjZXB0aW9uIGJlaW5nIHJldGhyb3cgY2FuIGJlIGNhdWdodCBi
eSBhbm90aGVyIGxvY2FsIGNhdGNoCisvLyBibG9jayBpbiB0aGUgc2FtZSBmdW5jdGlvbiB3aXRo
b3V0IGV2ZXIgdW53aW5kaW5nIHRoZSBhY3RpdmF0aW9uLgorKGZ1bmN0aW9uIFRlc3RSZXRocm93
UmVjYXRjaCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAg
bGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5j
dGlvbigicmV0aHJvd19yZWNhdGNoIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAg
ICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisg
ICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIs
CisgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJJMzJFcXos
CisgICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgIGtFeHByUmV0
aHJvdywgMiwKKyAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAga0V4cHJJMzJDb25z
dCwgNDIsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgICAga0V4cHJJ
MzJDb25zdCwgMjMsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByRW5kLAorICBd
KS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5h
bFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOwor
CisgIGFzc2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X3JlY2F0Y2goMCkp
OworICBhc3NlcnRFcXVhbHMoNDIsIGluc3RhbmNlLmV4cG9ydHMucmV0aHJvd19yZWNhdGNoKDEp
KTsKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1zaGFyZWQu
anMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1zaGFyZWQuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODUy
ZjViYThhMTM3MTYxZmY3NTc3NWE0YzllMjEwZjkwY2QyODgzNQotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXNoYXJlZC5qcwpAQCAtMCwwICsxLDE1MyBAQAor
Ly8gQ29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisK
Ky8vIEZsYWdzOiAtLWV4cG9zZS13YXNtIC0tZXhwZXJpbWVudGFsLXdhc20tZWgKKworbG9hZCgi
d2FzbS1tb2R1bGUtYnVpbGRlci5qcyIpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcmV0dXJu
IGEgbmV3IGV4cG9ydGVkIGV4Y2VwdGlvbiB3aXRoIHRoZSB7a1NpZ192X3Z9IHR5cGUKKy8vIHNp
Z25hdHVyZSBmcm9tIGFuIGFub255bW91cyBtb2R1bGUuIFRoZSB1bmRlcmx5aW5nIG1vZHVsZSBp
cyB0aHJvd24gYXdheS4KK2Z1bmN0aW9uIE5ld0V4cG9ydGVkRXhjZXB0aW9uKCkgeworICBsZXQg
YnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRl
ci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0
ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUo
KTsKKyAgcmV0dXJuIGluc3RhbmNlLmV4cG9ydHMuZXg7Cit9CisKKy8vIENoZWNrIHRoYXQgYW4g
aW5zdGFuY2UgbWF0Y2hlcyBhbiBleGNlcHRpb24gdGhyb3duIGJ5IGl0c2VsZiwgZXZlbiB3aGVu
IHRoZQorLy8gZXhjZXB0aW9uIGlzIHJlLXRocm93biBieSBhIHJlZ3VsYXIgSmF2YVNjcmlwdCBm
dW5jdGlvbi4KKyhmdW5jdGlvbiBUZXN0U2luZ2xlSW5zdGFuY2UoKSB7CisgIGxldCBidWlsZGVy
ID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBzaWdfaW5kZXggPSBidWlsZGVyLmFk
ZFR5cGUoa1NpZ192X3YpOworICBsZXQgZnVuID0gYnVpbGRlci5hZGRJbXBvcnQoIm0iLCAiZiIs
IHNpZ19pbmRleCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7Cisg
IGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93Iiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShb
CisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBi
dWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaCIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWwor
ICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9u
LCBmdW4sCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisg
ICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBleF9vYmogPSBuZXcgRXJyb3IoIm15IGV4Y2Vw
dGlvbiIpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBmOiBm
dW5jdGlvbigpIHsgdGhyb3cgZXhfb2JqIH19fSk7CisKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGlu
c3RhbmNlLmV4cG9ydHMudGhyb3coKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgYXNzZXJ0
VGhyb3dzRXF1YWxzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2goKSwgZXhfb2JqKTsKKyAg
dHJ5IHsKKyAgICBpbnN0YW5jZS5leHBvcnRzLnRocm93KCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAg
ICBleF9vYmogPSBlOworICB9CisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9PiBpbnN0YW5jZS5l
eHBvcnRzLmNhdGNoKCkpOworfSkoKTsKKworLy8gQ2hlY2sgdGhhdCB0d28gaW5zdGFuY2VzIGRp
c3Rpbmd1aXNoIHRoZWlyIGluZGl2aWR1YWwgZXhjZXB0aW9ucyBpZiB0aGV5IGFyZQorLy8gbm90
IHNoYXJlZCwgZXZlbiB3aGVuIGRlY2xhcmVkIGJ5IHRoZSBzYW1lIHVuZGVybHlpbmcgbW9kdWxl
LgorKGZ1bmN0aW9uIFRlc3RNdWx0aUluc3RhbmNlTm9uU2hhcmVkKCkgeworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgc2lnX2luZGV4ID0gYnVpbGRlci5h
ZGRUeXBlKGtTaWdfdl92KTsKKyAgbGV0IGZ1biA9IGJ1aWxkZXIuYWRkSW1wb3J0KCJtIiwgImYi
LCBzaWdfaW5kZXgpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOwor
ICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHko
WworICAgICAgICBrRXhwclRocm93LCBleGNlcHQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAg
YnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2giLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlv
biwgZnVuLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByRW5kLAor
ICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgZXhfb2JqID0gbmV3IEVycm9yKCJteSBleGNl
cHRpb24iKTsKKyAgbGV0IGluc3RhbmNlMSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGY6
IGFzc2VydFVucmVhY2hhYmxlIH19KTsKKyAgbGV0IGluc3RhbmNlMiA9IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoeyBtOiB7IGY6IGZ1bmN0aW9uKCkgeyB0aHJvdyBleF9vYmogfX19KTsKKworICBhc3Nl
cnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UxLmV4cG9ydHMudGhyb3coKSwgV2ViQXNzZW1ibHkuRXhj
ZXB0aW9uKTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzKCgpID0+IGluc3RhbmNlMi5leHBvcnRzLmNh
dGNoKCksIGV4X29iaik7CisgIHRyeSB7CisgICAgaW5zdGFuY2UxLmV4cG9ydHMudGhyb3coKTsK
KyAgfSBjYXRjaCAoZSkgeworICAgIGV4X29iaiA9IGU7CisgIH0KKyAgYXNzZXJ0VGhyb3dzRXF1
YWxzKCgpID0+IGluc3RhbmNlMi5leHBvcnRzLmNhdGNoKCksIGV4X29iaik7Cit9KSgpOworCisv
LyBDaGVjayB0aGF0IHR3byBpbnN0YW5jZXMgbWF0Y2ggdGhlaXIgZXhjZXB0aW9ucyBpZiB0aGV5
IGFyZSBzaGFyZWQgcHJvcGVybHksCisvLyBldmVuIGlmIHRoZSBsb2NhbCBleGNlcHRpb24gaW5k
ZXggb2YgZXhwb3J0IGFuZCBpbXBvcnQgaXMgZGlmZmVyZW50LgorKGZ1bmN0aW9uIFRlc3RNdWx0
aUluc3RhbmNlU2hhcmVkKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgc2lnX2luZGV4ID0gYnVpbGRlci5hZGRUeXBlKGtTaWdfdl92KTsKKyAgbGV0
IGZ1biA9IGJ1aWxkZXIuYWRkSW1wb3J0KCJtIiwgImYiLCBzaWdfaW5kZXgpOworICBsZXQgZXhj
ZXB0MSA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgxIiwga1NpZ192X3YpOworICBs
ZXQgZXhjZXB0MiA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBv
cnRPZktpbmQoImV4MiIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Mik7CisgIGJ1aWxkZXIuYWRkRnVu
Y3Rpb24oInRocm93Iiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBy
VGhyb3csIGV4Y2VwdDIKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5j
dGlvbigiY2F0Y2giLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJU
cnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgZnVuLAorICAgICAg
ICBrRXhwckNhdGNoLCBleGNlcHQxLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9y
dEZ1bmMoKTsKKyAgbGV0IGV4X29iaiA9IG5ldyBFcnJvcigibXkgZXhjZXB0aW9uIik7CisgIGxl
dCBpbnN0YW5jZTEgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBmOiBhc3NlcnRVbnJlYWNo
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4MTog
TmV3RXhwb3J0ZWRFeGNlcHRpb24oKSB9fSk7CisgIGxldCBpbnN0YW5jZTIgPSBidWlsZGVyLmlu
c3RhbnRpYXRlKHsgbTogeyBmOiBmdW5jdGlvbigpIHsgdGhyb3cgZXhfb2JqIH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleDE6IGluc3RhbmNlMS5leHBv
cnRzLmV4MiB9fSk7CisKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlMS5leHBvcnRzLnRo
cm93KCksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFzc2VydFRocm93c0VxdWFscygoKSA9
PiBpbnN0YW5jZTIuZXhwb3J0cy5jYXRjaCgpLCBleF9vYmopOworICB0cnkgeworICAgIGluc3Rh
bmNlMS5leHBvcnRzLnRocm93KCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBleF9vYmogPSBlOwor
ICB9CisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9PiBpbnN0YW5jZTIuZXhwb3J0cy5jYXRjaCgp
KTsKK30pKCk7CisKKy8vIENoZWNrIHRoYXQgdHdvIGluc3RhbmNlcyBiYXNlZCBvbiBkaWZmZXJl
bnQgbW9kdWxlcyBtYXRjaCB0aGVpciBleGNlcHRpb25zIGlmCisvLyB0aGV5IGFyZSBzaGFyZWQg
cHJvcGVybHksIGV2ZW4gaWYgdGhlIGxvY2FsIGV4Y2VwdGlvbiBpbmRleCBpcyBkaWZmZXJlbnQu
CisoZnVuY3Rpb24gVGVzdE11bHRpTW9kdWxlU2hhcmVkKCkgeworICBsZXQgYnVpbGRlcjEgPSBu
ZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyMS5hZGRUYWco
a1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIxLmFkZFRhZyhrU2lnX3Zfdik7Cisg
IGJ1aWxkZXIxLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDIpOwor
ICBidWlsZGVyMS5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5
KFsKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MgorICAgICAgXSkuZXhwb3J0RnVuYygpOwor
ICBsZXQgYnVpbGRlcjIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IHNpZ19pbmRl
eCA9IGJ1aWxkZXIyLmFkZFR5cGUoa1NpZ192X3YpOworICBsZXQgZnVuID0gYnVpbGRlcjIuYWRk
SW1wb3J0KCJtIiwgImYiLCBzaWdfaW5kZXgpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlcjIuYWRk
SW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3Zfdik7CisgIGJ1aWxkZXIyLmFkZEZ1bmN0aW9u
KCJjYXRjaCIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwg
a1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBmdW4sCisgICAgICAgIGtF
eHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGxldCBleF9vYmogPSBuZXcgRXJyb3IoIm15IGV4Y2VwdGlvbiIpOworICBsZXQgaW5z
dGFuY2UxID0gYnVpbGRlcjEuaW5zdGFudGlhdGUoKTsKKyAgbGV0IGluc3RhbmNlMiA9IGJ1aWxk
ZXIyLmluc3RhbnRpYXRlKHsgbTogeyBmOiBmdW5jdGlvbigpIHsgdGhyb3cgZXhfb2JqIH0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXg6IGluc3RhbmNl
MS5leHBvcnRzLmV4IH19KTsKKworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UxLmV4cG9y
dHMudGhyb3coKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxz
KCgpID0+IGluc3RhbmNlMi5leHBvcnRzLmNhdGNoKCksIGV4X29iaik7CisgIHRyeSB7CisgICAg
aW5zdGFuY2UxLmV4cG9ydHMudGhyb3coKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGV4X29iaiA9
IGU7CisgIH0KKyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+IGluc3RhbmNlMi5leHBvcnRzLmNh
dGNoKCkpOworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXR5
cGUtcmVmbGVjdGlvbi5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXR5cGUtcmVmbGVj
dGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNGMyMGVkYWU4ZTAyMzVhYmY3YzJlMTllYmM3MTgwZmFiMDhj
ZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtdHlwZS1y
ZWZsZWN0aW9uLmpzCkBAIC0wLDAgKzEsNDcgQEAKKy8vIENvcHlyaWdodCAyMDIxIHRoZSBWOCBw
cm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1leHBlcmltZW50YWwt
d2FzbS1laCAtLWV4cGVyaW1lbnRhbC13YXNtLXR5cGUtcmVmbGVjdGlvbgorCitsb2FkKCJ3YXNt
LW1vZHVsZS1idWlsZGVyLmpzIik7CisKK2xldCB0ZXN0Y2FzZXMgPSBbCit7dHlwZXM6IHtwYXJh
bWV0ZXJzOltdfSwgc2lnOiBrU2lnX3Zfdn0sCit7dHlwZXM6IHtwYXJhbWV0ZXJzOlsiaTMyIl19
LCBzaWc6IGtTaWdfdl9pfSwKK3t0eXBlczoge3BhcmFtZXRlcnM6WyJpNjQiXX0sIHNpZzoga1Np
Z192X2x9LAore3R5cGVzOiB7cGFyYW1ldGVyczpbImY2NCIsICJmNjQiLCAiaTMyIl19LCBzaWc6
IGtTaWdfdl9kZGl9LAore3R5cGVzOiB7cGFyYW1ldGVyczpbImYzMiJdfSwgc2lnOiBrU2lnX3Zf
Zn0sCitdOworCisoZnVuY3Rpb24gVGVzdEV4cG9ydCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcg
V2FzbU1vZHVsZUJ1aWxkZXIoKTsKKworICB0ZXN0Y2FzZXMuZm9yRWFjaChmdW5jdGlvbihleHBl
Y3RlZCwgaSkgeworICAgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhleHBlY3RlZC5zaWcp
OworICAgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIgKyBpLCBrRXh0ZXJuYWxUYWcsIGV4
Y2VwdCk7CisgIH0pOworCisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsK
KyAgdGVzdGNhc2VzLmZvckVhY2goZnVuY3Rpb24oZXhwZWN0ZWQsIGkpIHsKKyAgICBhc3NlcnRF
cXVhbHMoaW5zdGFuY2UuZXhwb3J0c1siZXgiICsgaV0udHlwZSgpLCBleHBlY3RlZC50eXBlcyk7
CisgIH0pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJbXBvcnRFeHBvcnQoKSB7CisKKyAgbGV0
IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGltcG9ydHMgPSB7bTog
e319OworCisgIHRlc3RjYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGV4cGVjdGVkLCBpKSB7CisgICAg
bGV0IHQgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKGV4cGVjdGVkLnR5cGVzKTsKKyAgICBsZXQgaW5k
ZXggPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4IiArIGksIGV4cGVjdGVkLnNpZyk7
CisgICAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4IiArIGksIGtFeHRlcm5hbFRhZywgaW5k
ZXgpOworICAgIGltcG9ydHMubVsiZXgiICsgaV0gPSB0OworICB9KTsKKworICBsZXQgaW5zdGFu
Y2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKGltcG9ydHMpOworICB0ZXN0Y2FzZXMuZm9yRWFjaChm
dW5jdGlvbihleHBlY3RlZCwgaSkgeworICAgIGFzc2VydEVxdWFscyhpbnN0YW5jZS5leHBvcnRz
WyJleCIgKyBpXS50eXBlKCksIGV4cGVjdGVkLnR5cGVzKTsKKyAgfSkKK30pKCk7CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy11dGlscy5qcyBiL0pTVGVzdHMvd2FzbS92
OC9leGNlcHRpb25zLXV0aWxzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiZTE5MTlkZWU2ODAzMjNjZWIwOTM5
NjRmZTYxYTk1ZjA2ZGU2OTcKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhj
ZXB0aW9ucy11dGlscy5qcwpAQCAtMCwwICsxLDI3IEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUg
VjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tYWxsb3ctbmF0
aXZlcy1zeW50YXgKKworLy8gVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIGxvYWRlZCBieSBv
dGhlciB0ZXN0cyB0byBwcm92aWRlIHV0aWxpdHkgbWV0aG9kcworLy8gcmVxdWlyaW5nIG5hdGl2
ZXMgc3ludGF4IChhbmQgaGVuY2Ugbm90IHN1aXRlZCBmb3IgdGhlIG1qc3VuaXQuanMgZmlsZSku
CisKK2Z1bmN0aW9uIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIHRhZywgdmFsdWVzLCBjb2Rl
KSB7CisgIHRyeSB7CisgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnZnVuY3Rpb24nKSB7CisgICAg
ICBjb2RlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGV2YWwoY29kZSk7CisgICAgfQorICB9IGNh
dGNoIChlKSB7CisgICAgYXNzZXJ0SW5zdGFuY2VvZihlLCBXZWJBc3NlbWJseS5FeGNlcHRpb24p
OworICAgIGFzc2VydFRydWUoZS5pcyh0YWcpKTsKKyAgICBhc3NlcnRFcXVhbHModmFsdWVzLmxl
bmd0aCwgdGFnLnR5cGUoKS5wYXJhbWV0ZXJzLmxlbmd0aCk7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpCisgICAgICBhc3NlcnRFcXVhbHModmFsdWVzW2ldLCBl
LmdldEFyZyh0YWcsIGkpKTsKKyAgICByZXR1cm47ICAvLyBTdWNjZXNzLgorICB9CisgIHRocm93
IG5ldyBNanNVbml0QXNzZXJ0aW9uRXJyb3IoJ0RpZCBub3QgdGhyb3cgZXhwZWN0ZWQgPCcgKyB0
YWcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc+IHdpdGggdmFsdWVzOiAn
ICsgdmFsdWVzKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLmpz
IGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzkxNTUwNDUwNDk4
ODE3MzA3ZDI5NDc1MDJhYjJhZmJjMDRjNjJhNAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMv
d2FzbS92OC9leGNlcHRpb25zLmpzCkBAIC0wLDAgKzEsMTA4NyBAQAorLy8gQ29weXJpZ2h0IDIw
MTggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4
cG9zZS13YXNtIC0tZXhwZXJpbWVudGFsLXdhc20tZWggLS1hbGxvdy1uYXRpdmVzLXN5bnRheAor
Citsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7Citsb2FkKCJleGNlcHRpb25zLXV0aWxz
LmpzIik7CisKKy8vIFRoZSBmb2xsb3dpbmcgbWV0aG9kIGRvZXNuJ3QgYXR0ZW1wdCB0byBjYXRj
aCBhbiByYWlzZWQgZXhjZXB0aW9uLgorKGZ1bmN0aW9uIFRlc3RUaHJvd1NpbXBsZSgpIHsKKyAg
bGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1
aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfaWZf
cGFyYW1fbm90X3plcm8iLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4
cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMCwKKyAgICAgICAga0V4cHJJ
MzJOZSwKKyAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByVGhyb3cs
IGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDEKKyAg
ICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4
dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRl
KCk7CisKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfaWZfcGFyYW1f
bm90X3plcm8oMCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBv
cnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19pZl9wYXJhbV9ub3RfemVy
bygxMCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4
LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19pZl9wYXJhbV9ub3RfemVybygtMSkp
OworfSkoKTsKKworLy8gVGVzdCB0aGF0IGVtcHR5IHRyeS9jYXRjaCBibG9ja3Mgd29yay4KKyhm
dW5jdGlvbiBUZXN0Q2F0Y2hFbXB0eUJsb2NrcygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2Fz
bU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2hfZW1wdHlfdHJ5Iiwga1NpZ192X3YpCisg
ICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgIGtF
eHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRE
b2VzTm90VGhyb3coaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9lbXB0eV90cnkpOworfSkoKTsKKwor
Ly8gTm93IHRoYXQgd2Uga25vdyB0aHJvd2luZyB3b3Jrcywgd2UgdGVzdCBjYXRjaGluZyB0aGUg
ZXhjZXB0aW9ucyB3ZSByYWlzZS4KKyhmdW5jdGlvbiBUZXN0Q2F0Y2hTaW1wbGUoKSB7CisgIGxl
dCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWls
ZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInNpbXBsZV90aHJv
d19jYXRjaF90b18wXzEiLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4
cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAg
a0V4cHJJMzJFcXosCisgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAg
a0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDQyLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4
cHJJMzJDb25zdCwgMjMsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7
CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVh
bHMoMjMsIGluc3RhbmNlLmV4cG9ydHMuc2ltcGxlX3Rocm93X2NhdGNoX3RvXzBfMSgwKSk7Cisg
IGFzc2VydEVxdWFscyg0MiwgaW5zdGFuY2UuZXhwb3J0cy5zaW1wbGVfdGhyb3dfY2F0Y2hfdG9f
MF8xKDEpKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0VHJhcE5vdENhdWdodCgpIHsKKyAgbGV0
IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlv
bigndW5yZWFjaGFibGVfaW5fdHJ5Jywga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAg
ICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAg
ICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1
bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2Vy
dFRyYXBzKGtUcmFwVW5yZWFjaGFibGUsICgpID0+IGluc3RhbmNlLmV4cG9ydHMudW5yZWFjaGFi
bGVfaW5fdHJ5KCkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RUcmFwSW5DYWxsZWVOb3RDYXVn
aHQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBm
dW5jX2RpdiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ2RpdicsIGtTaWdfaV9paSkuYWRkQm9keShb
CisgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgIGtFeHBy
STMyRGl2VQorICBdKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndHJhcF9pbl9jYWxsZWUnLCBr
U2lnX2lfaWkpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwK
KyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDEs
CisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGZ1bmNfZGl2LmluZGV4LAorICAgICAgICBr
RXhwckNhdGNoQWxsLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDExLAorICAgICAgICBrRXhw
ckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmlu
c3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDMsIGluc3RhbmNlLmV4cG9ydHMudHJhcF9p
bl9jYWxsZWUoNywgMikpOworICBhc3NlcnRUcmFwcyhrVHJhcERpdkJ5WmVybywgKCkgPT4gaW5z
dGFuY2UuZXhwb3J0cy50cmFwX2luX2NhbGxlZSgxLCAwKSk7Cit9KSgpOworCisoZnVuY3Rpb24g
VGVzdFRyYXBWaWFKU05vdENhdWdodCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKyAgbGV0IGltcCA9IGJ1aWxkZXIuYWRkSW1wb3J0KCdpbXAnLCAnb3J0Jywg
a1NpZ19pX3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCdkaXYnLCBrU2lnX2lfaWkpCisgICAg
ICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByTG9j
YWxHZXQsIDEsCisgICAgICAgIGtFeHBySTMyRGl2VQorICAgICAgXSkuZXhwb3J0RnVuYygpOwor
ICBidWlsZGVyLmFkZEZ1bmN0aW9uKCdjYWxsX2ltcG9ydCcsIGtTaWdfaV92KQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJDYWxs
RnVuY3Rpb24sIGltcCwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBrRXhwckkz
MkNvbnN0LCAxMSwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAg
bGV0IGV4Y2VwdGlvbiA9IHVuZGVmaW5lZDsKKyAgbGV0IGluc3RhbmNlOworICBmdW5jdGlvbiBq
c19pbXBvcnQoKSB7CisgICAgdHJ5IHsKKyAgICAgIGluc3RhbmNlLmV4cG9ydHMuZGl2KDEsIDAp
OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGV4Y2VwdGlvbiA9IGU7CisgICAgfQorICAgIHRo
cm93IGV4Y2VwdGlvbjsKKyAgfQorICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoe2lt
cDoge29ydDoganNfaW1wb3J0fX0pOworCisgIGxldCBjYXVnaHQgPSB1bmRlZmluZWQ7CisgIHRy
eSB7CisgICAgbGV0IHJlcyA9IGluc3RhbmNlLmV4cG9ydHMuY2FsbF9pbXBvcnQoKTsKKyAgICBh
c3NlcnRVbnJlYWNoYWJsZSgnY2FsbF9pbXBvcnQgc2hvdWxkIHRyYXAsIGJ1dCByZXR1cm5lZCB3
aXRoICcgKyByZXMpOworICB9IGNhdGNoIChlKSB7CisgICAgY2F1Z2h0ID0gZTsKKyAgfQorICBh
c3NlcnRTYW1lKGV4Y2VwdGlvbiwgY2F1Z2h0KTsKKyAgYXNzZXJ0VGhyb3dzKGluc3RhbmNlLmV4
cG9ydHMuY2FsbF9pbXBvcnQsIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwga1RyYXBNc2dzW2tU
cmFwRGl2QnlaZXJvXSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdE1hbnVhbGx5VGhyb3duUnVu
dGltZUVycm9yQ2F1Z2h0KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgaW1wID0gYnVpbGRlci5hZGRJbXBvcnQoJ2ltcCcsICdvcnQnLCBrU2lnX2lf
dik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ2NhbGxfaW1wb3J0Jywga1NpZ19pX3YpCisgICAg
ICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhw
ckNhbGxGdW5jdGlvbiwgaW1wLAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICAgIGtF
eHBySTMyQ29uc3QsIDExLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygp
OworICBmdW5jdGlvbiB0aHJvd19leGMoKSB7CisgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LlJ1
bnRpbWVFcnJvcignTXkgdXNlciB0ZXh0Jyk7CisgIH0KKyAgbGV0IGluc3RhbmNlID0gYnVpbGRl
ci5pbnN0YW50aWF0ZSh7aW1wOiB7b3J0OiB0aHJvd19leGN9fSk7CisKKyAgYXNzZXJ0RXF1YWxz
KDExLCBpbnN0YW5jZS5leHBvcnRzLmNhbGxfaW1wb3J0KCkpOworfSkoKTsKKworKGZ1bmN0aW9u
IFRlc3RFeG5XaXRoV2FzbVByb3RvTm90Q2F1Z2h0KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBX
YXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192
X3YpOworICBsZXQgaW1wID0gYnVpbGRlci5hZGRJbXBvcnQoJ2ltcCcsICdvcnQnLCBrU2lnX3Zf
dik7CisgIGxldCB0aHJvd19mbiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93Jywga1NpZ192
X3YpCisgICAgICAgICAgICAgICAgICAgICAuYWRkQm9keShba0V4cHJUaHJvdywgZXhjZXB0XSkK
KyAgICAgICAgICAgICAgICAgICAgIC5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rp
b24oJ3Rlc3QnLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAgLy8gQ2FsbGlu
ZyAidGhyb3ciIGRpcmVjdGx5IHNob3VsZCBwcm9kdWNlIHRoZSBleHBlY3RlZCBleGNlcHRpb24u
CisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rp
b24sIHRocm93X2ZuLmluZGV4LAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAg
IGtFeHByRW5kLAorICAgICAgICAvLyBDYWxsaW5nIHRocm91Z2ggSlMgcHJvZHVjZXMgYSB3cmFw
cGVkIGV4Y2VwdGlvbnMgd2hpY2ggZG9lcyBub3QgbWF0Y2gKKyAgICAgICAgLy8gdGhlIGNhdGNo
LgorICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0
aW9uLCBpbXAsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQK
KyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlOworICBsZXQgd3JhcHBlZF9l
eG47CisgIGZ1bmN0aW9uIGpzX2ltcG9ydCgpIHsKKyAgICB0cnkgeworICAgICAgaW5zdGFuY2Uu
ZXhwb3J0cy50aHJvdygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHdyYXBwZWRfZXhuID0g
bmV3IEVycm9yKCk7CisgICAgICB3cmFwcGVkX2V4bi5fX3Byb3RvX18gPSBlOworICAgICAgdGhy
b3cgd3JhcHBlZF9leG47CisgICAgfQorICB9CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50
aWF0ZSh7aW1wOiB7b3J0OiBqc19pbXBvcnR9fSk7CisgIGxldCBjYXVnaHQgPSB1bmRlZmluZWQ7
CisgIHRyeSB7CisgICAgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KCk7CisgIH0gY2F0Y2ggKGUpIHsK
KyAgICBjYXVnaHQgPSBlOworICB9CisgIGFzc2VydFRydWUoISFjYXVnaHQsICdzaG91bGQgaGF2
ZSB0cmFwcGVkJyk7CisgIGFzc2VydEVxdWFscyhjYXVnaHQsIHdyYXBwZWRfZXhuKTsKKyAgYXNz
ZXJ0SW5zdGFuY2VvZihjYXVnaHQuX19wcm90b19fLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOwor
fSkoKTsKKworKGZ1bmN0aW9uIFRlc3RTdGFja092ZXJmbG93Tm90Q2F1Z2h0KCkgeworICBmdW5j
dGlvbiBzdGFja19vdmVyZmxvdygpIHsKKyAgICAvLyVUaHJvd1N0YWNrT3ZlcmZsb3coKTsKKyAg
fQorICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgc2lnX3Zf
diA9IGJ1aWxkZXIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBrU3RhY2tPdmVyZmxvdyA9IGJ1
aWxkZXIuYWRkSW1wb3J0KCcnLCAnc3RhY2tfb3ZlcmZsb3cnLCBzaWdfdl92KTsKKyAgYnVpbGRl
ci5hZGRGdW5jdGlvbigndHJ5X3N0YWNrX292ZXJmbG93Jywga1NpZ192X3YpCisgICAgICAuYWRk
Qm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxs
RnVuY3Rpb24sIDAsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgIGtFeHByRW5kCisg
ICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlh
dGUoeycnOiB7J3N0YWNrX292ZXJmbG93Jzogc3RhY2tfb3ZlcmZsb3d9fSk7CisKKyAgYXNzZXJ0
VGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMudHJ5X3N0YWNrX292ZXJmbG93KCksCisgICAg
ICBSYW5nZUVycm9yLCAnTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQnKTsKK30pOwor
Ly8gRklYTUU6IG5lZWRzIHN0YWNrIG92ZXJmbG93IGhlbHBlcgorLy8oKTsKKworLy8gVGVzdCB0
aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB3aGljaCBleGNlcHRpb24gd2FzIHRocm93biBieSB1c2lu
ZyBhIGNhc2NhZGVkCisvLyBzZXF1ZW5jZSBvZiBuZXN0ZWQgdHJ5IGJsb2NrcyB3aXRoIGEgc2lu
Z2xlIGNhdGNoIGJsb2NrIGVhY2guCisoZnVuY3Rpb24gVGVzdENhdGNoQ29tcGxleDEoKSB7Cisg
IGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0g
YnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIuYWRkVGFn
KGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDMgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7Cisg
IGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoX2NvbXBsZXgiLCBrU2lnX2lfaSkKKyAgICAgIC5h
ZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVHJ5
LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICBr
RXhwckkzMkVxeiwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAg
ICAga0V4cHJUaHJvdywgZXhjZXB0MSwKKyAgICAgICAgICAgIGtFeHByRWxzZSwKKyAgICAgICAg
ICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwK
KyAgICAgICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAgICAgICAga0V4cHJJZiwga1dhc21W
b2lkLAorICAgICAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDIsCisgICAgICAgICAgICAg
IGtFeHByRWxzZSwKKyAgICAgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQzLAorICAgICAg
ICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAga0V4
cHJJMzJDb25zdCwgMiwKKyAgICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQxLAorICAgICAgICAg
ICAga0V4cHJJMzJDb25zdCwgMywKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJD
YXRjaCwgZXhjZXB0MiwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCA0LAorICAgICAgICBrRXhw
ckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQo
ImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQzKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5p
bnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygzLCBpbnN0YW5jZS5leHBvcnRzLmNhdGNo
X2NvbXBsZXgoMCkpOworICBhc3NlcnRFcXVhbHMoNCwgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9j
b21wbGV4KDEpKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0
cy5leCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hfY29tcGxleCgyKSk7Cit9KSgp
OworCisvLyBUZXN0IHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHdoaWNoIGV4Y2VwdGlvbiB3YXMg
dGhyb3duIGJ5IHVzaW5nIGEgc2luZ2xlCisvLyB0cnkgYmxvY2sgd2l0aCBtdWx0aXBsZSBhc3Nv
Y2lhdGVkIGNhdGNoIGJsb2NrcyBpbiBzZXF1ZW5jZS4KKyhmdW5jdGlvbiBUZXN0Q2F0Y2hDb21w
bGV4MigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0
IGV4Y2VwdDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVp
bGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MyA9IGJ1aWxkZXIuYWRkVGFnKGtT
aWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2hfY29tcGxleCIsIGtTaWdfaV9p
KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAg
ICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICBr
RXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQxLAorICAg
ICAgICAgIGtFeHByRWxzZSwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAg
ICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAg
ICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0
MiwKKyAgICAgICAgICAgIGtFeHByRWxzZSwKKyAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhj
ZXB0MywKKyAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAg
ICAgICAga0V4cHJJMzJDb25zdCwgMywKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MiwKKyAg
ICAgICAgICBrRXhwckkzMkNvbnN0LCA0LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4
cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFn
LCBleGNlcHQzKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisg
IGFzc2VydEVxdWFscygzLCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoX2NvbXBsZXgoMCkpOworICBh
c3NlcnRFcXVhbHMoNCwgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9jb21wbGV4KDEpKTsKKyAgYXNz
ZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW10sICgpID0+IGlu
c3RhbmNlLmV4cG9ydHMuY2F0Y2hfY29tcGxleCgyKSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93
aW5nIGFuIGV4Y2VwdGlvbiB3aXRoIG11bHRpcGxlIHZhbHVlcy4KKyhmdW5jdGlvbiBUZXN0VGhy
b3dNdWx0aXBsZVZhbHVlcygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9paSk7CisgIGJ1aWxk
ZXIuYWRkRnVuY3Rpb24oInRocm93XzFfMiIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWwor
ICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAg
ICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxk
ZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGlu
c3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5z
dGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFsxLCAyXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0
cy50aHJvd18xXzIoKSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nL2NhdGNoaW5nIHRoZSBp
MzIgcGFyYW1ldGVyIHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd0NhdGNoUGFyYW1JKCkgewor
ICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0g
YnVpbGRlci5hZGRUYWcoa1NpZ192X2kpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19j
YXRjaF9wYXJhbSIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRy
eSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhw
clRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4
cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByUmV0dXJuLAorICAgICAgICBrRXhwckVu
ZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0
YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygwLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2Nh
dGNoX3BhcmFtKDApKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGhyb3df
Y2F0Y2hfcGFyYW0oMSkpOworICBhc3NlcnRFcXVhbHMoMTAsIGluc3RhbmNlLmV4cG9ydHMudGhy
b3dfY2F0Y2hfcGFyYW0oMTApKTsKK30pKCk7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEg
dGhyb3duIGV4Y2VwdGlvbiB3aXRoIGFuIGludGVnZXIgZXhjZXB0aW9uLgorKGZ1bmN0aW9uIFRl
c3RUaHJvd1BhcmFtSSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIo
KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9pKTsKKyAgYnVpbGRlci5h
ZGRGdW5jdGlvbigidGhyb3dfcGFyYW0iLCBrU2lnX3ZfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAg
ICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAg
ICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0
ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUo
KTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBb
NV0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oNSkpOworICBhc3NlcnRXYXNt
VGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbNDI0MjQyXSwgKCkgPT4gaW5z
dGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSg0MjQyNDIpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhy
b3dpbmcvY2F0Y2hpbmcgdGhlIGYzMiBwYXJhbWV0ZXIgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRo
cm93Q2F0Y2hQYXJhbUYoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVy
KCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfZik7CisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oInRocm93X2NhdGNoX3BhcmFtIiwga1NpZ19mX2YpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUYzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0
LCAwLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckYzMkNv
bnN0LCAwLCAwLCAwLCAwLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAg
a0V4cHJSZXR1cm4sCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOwor
ICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxz
KDUuMCwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSg1LjApKTsKKyAgYXNzZXJ0
RXF1YWxzKDEwLjUsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oMTAuNSkpOwor
fSkoKTsKKworLy8gVGVzdCB0aGUgZW5jb2Rpbmcgb2YgYSB0aHJvd24gZXhjZXB0aW9uIHdpdGgg
YSBmbG9hdCB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dQYXJhbUYoKSB7CisgIGxldCBidWls
ZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFk
ZFRhZyhrU2lnX3ZfZik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X3BhcmFtIiwga1Np
Z192X2YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAg
ICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRl
ci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5z
dGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0
YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzUuMF0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMu
dGhyb3dfcGFyYW0oNS4wKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNl
LmV4cG9ydHMuZXgsIFsxMC41XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSgx
MC41KSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nL2NhdGNoaW5nIGFuIEk2NCB2YWx1ZQor
KGZ1bmN0aW9uIFRlc3RUaHJvd0NhdGNoUGFyYW1MKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBX
YXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192
X2wpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19jYXRjaF9wYXJhbSIsIGtTaWdfaV9p
KQorICAgICAgLmFkZExvY2FscyhrV2FzbUk2NCwgMSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAg
ICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJJNjRVQ29udmVydEkzMiwKKyAgICAg
ICAga0V4cHJMb2NhbFNldCwgMSwKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAg
ICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAg
ICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAg
ICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICAgIGtFeHBySTY0RXEsCisgICAgICAg
ICAga0V4cHJJZiwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAg
ICAgICAgIGtFeHByRWxzZSwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDAsCisgICAgICAg
ICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOwor
ICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxz
KDEsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oNSkpOworICBhc3NlcnRFcXVh
bHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgwKSk7CisgIGFzc2VydEVx
dWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKC0xKSk7Cit9KSgpOwor
CisvLyBUZXN0IHRoZSBlbmNvZGluZyBvZiBhIHRocm93biBleGNlcHRpb24gd2l0aCBhbiBJNjQg
dmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93UGFyYW1MKCkgeworICBsZXQgYnVpbGRlciA9IG5l
dyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X2wpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19wYXJhbSIsIGtTaWdfdl9paSkK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4
cHJJNjRVQ29udmVydEkzMiwKKyAgICAgICAga0V4cHJJNjRDb25zdCwgMzIsCisgICAgICAgIGtF
eHBySTY0U2hsLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICBrRXhwckk2NFVD
b252ZXJ0STMyLAorICAgICAgICBrRXhwckk2NElvciwKKyAgICAgICAga0V4cHJUaHJvdywgZXhj
ZXB0LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgi
ZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5z
dGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBv
cnRzLmV4LCBbNDI5NDk2NzI5NjVuXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJh
bSgxMCwgNSkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRz
LmV4LCBbLTQyOTQ5NjcyODNuXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSgt
MSwgMTMpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcvY2F0Y2hpbmcgdGhlIEY2NCBwYXJh
bWV0ZXIgdmFsdWUKKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFBhcmFtRCgpIHsKKyAgbGV0IGJ1
aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIu
YWRkVGFnKGtTaWdfdl9kKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfY2F0Y2hfcGFy
YW0iLCBrU2lnX2RfZCkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNt
RjY0LAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJUaHJvdywg
ZXhjZXB0LAorICAgICAgICAgIGtFeHByRjY0Q29uc3QsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
CisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclJldHVybiwKKyAg
ICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9
IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoNS4wLCBpbnN0YW5jZS5l
eHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDUuMCkpOworICBhc3NlcnRFcXVhbHMoMTAuNSwgaW5z
dGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgxMC41KSk7Cit9KSgpOworCisvLyBUZXN0
IHRoZSBlbmNvZGluZyBvZiBhIHRocm93biBleGNlcHRpb24gd2l0aCBhbiBmNjQgdmFsdWUuCiso
ZnVuY3Rpb24gVGVzdFRocm93UGFyYW1EKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9k
dWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2QpOwor
ICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19wYXJhbSIsIGtTaWdfdl9mKQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckY2NENvbnZl
cnRGMzIsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQp
OworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2Fz
bVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzUuMF0sICgpID0+IGluc3Rh
bmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oNS4wKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFu
Y2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFsxMDAwMDAwMF0sICgpID0+IGluc3RhbmNlLmV4cG9y
dHMudGhyb3dfcGFyYW0oMTAwMDAwMDAuNSkpOworfSkoKTsKKworLy8gVGVzdCB0aGUgZW5jb2Rp
bmcgb2YgYSBjb21wdXRlZCBwYXJhbWV0ZXIgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93UGFy
YW1Db21wdXRlZCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsK
KyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9pKTsKKyAgYnVpbGRlci5hZGRG
dW5jdGlvbigidGhyb3dfZXhwcl93aXRoX3BhcmFtcyIsIGtTaWdfdl9kZGkpCisgICAgICAuYWRk
Qm9keShbCisgICAgICAgIC8vIHAyICogKHAwICsgbWluKHAwLCBwMSkpfDAgLSAyMAorICAgICAg
ICBrRXhwckxvY2FsR2V0LCAyLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBr
RXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICBrRXhw
ckY2NE1pbiwKKyAgICAgICAga0V4cHJGNjRBZGQsCisgICAgICAgIGtFeHBySTMyU0NvbnZlcnRG
NjQsCisgICAgICAgIGtFeHBySTMyTXVsLAorICAgICAgICBrRXhwckkzMkNvbnN0LCAyMCwKKyAg
ICAgICAga0V4cHJJMzJTdWIsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0p
LmV4cG9ydEZ1bmMoKQorICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxU
YWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKwor
ICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbLThdLCAo
KSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X2V4cHJfd2l0aF9wYXJhbXMoMS41LCAyLjUsIDQp
KTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzEy
XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19leHByX3dpdGhfcGFyYW1zKDUuNywgMi41
LCA0KSk7Cit9KSgpOworCisvLyBOb3cgdGhhdCB3ZSBrbm93IGNhdGNoaW5nIHdvcmtzIGxvY2Fs
bHksIHdlIHRlc3QgY2F0Y2hpbmcgZXhjZXB0aW9ucyB0aGF0CisvLyBjcm9zcyBmdW5jdGlvbiBi
b3VuZGFyaWVzIGFuZC9vciByYWlzZWQgYnkgSmF2YVNjcmlwdC4KKyhmdW5jdGlvbiBUZXN0Q2F0
Y2hDcm9zc0Z1bmN0aW9ucygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9pKTsKKworICAvLyBI
ZWxwZXIgZnVuY3Rpb24gZm9yIHRocm93aW5nIGZyb20gSlMuIEl0IGlzIGltcG9ydGVkIGJ5IHRo
ZSBXYXNtIG1vZHVsZQorICAvLyBhcyB0aHJvd19pLgorICBmdW5jdGlvbiB0aHJvd192YWx1ZSh2
YWx1ZSkgeworICAgIHRocm93IHZhbHVlOworICB9CisgIGxldCBzaWdfaW5kZXggPSBidWlsZGVy
LmFkZFR5cGUoa1NpZ192X2kpOworICBsZXQga0pTVGhyb3dJID0gYnVpbGRlci5hZGRJbXBvcnQo
IiIsICJ0aHJvd19pIiwgc2lnX2luZGV4KTsKKworICAvLyBIZWxwZXIgZnVuY3Rpb24gdGhhdCB0
aHJvd3MgYSBzdHJpbmcuIFdhc20gc2hvdWxkIG5vdCBjYXRjaCBpdC4KKyAgZnVuY3Rpb24gdGhy
b3dfc3RyaW5nKCkgeworICAgIHRocm93ICJ1c2Ugd2FzbSI7CisgIH0KKyAgc2lnX2luZGV4ID0g
YnVpbGRlci5hZGRUeXBlKGtTaWdfdl92KTsKKyAgbGV0IGtKU1Rocm93U3RyaW5nID0gYnVpbGRl
ci5hZGRJbXBvcnQoIiIsICJ0aHJvd19zdHJpbmciLCBzaWdfaW5kZXgpOworCisgIC8vIEhlbHBl
ciBmdW5jdGlvbiB0aGF0IHRocm93cyB1bmRlZmluZWQuIFdhc20gc2hvdWxkIG5vdCBjYXRjaCBp
dC4KKyAgZnVuY3Rpb24gdGhyb3dfdW5kZWZpbmVkKCkgeworICAgIHRocm93IHVuZGVmaW5lZDsK
KyAgfQorICBsZXQga0pTVGhyb3dVbmRlZmluZWQgPSBidWlsZGVyLmFkZEltcG9ydCgiIiwgInRo
cm93X3VuZGVmaW5lZCIsIHNpZ19pbmRleCk7CisKKyAgLy8gSGVscGVyIGZ1bmN0aW9uIHRoYXQg
dGhyb3dzIGFuIGZwLiBXYXNtIHNob3VsZCBub3QgY2F0Y2ggaXQuCisgIGZ1bmN0aW9uIHRocm93
X2ZwKCkgeworICAgIHRocm93IDEwLjU7CisgIH0KKyAgbGV0IGtKU1Rocm93RlAgPSBidWlsZGVy
LmFkZEltcG9ydCgiIiwgInRocm93X2ZwIiwgc2lnX2luZGV4KTsKKworICAvLyBIZWxwZXIgZnVu
Y3Rpb24gdGhhdCB0aHJvd3MgYSBsYXJnZSBudW1iZXIuIFdhc20gc2hvdWxkIG5vdCBjYXRjaCBp
dC4KKyAgZnVuY3Rpb24gdGhyb3dfbGFyZ2UoKSB7CisgICAgdGhyb3cgMWUrMjg7CisgIH0KKyAg
bGV0IGtKU1Rocm93TGFyZ2UgPSBidWlsZGVyLmFkZEltcG9ydCgiIiwgInRocm93X2xhcmdlIiwg
c2lnX2luZGV4KTsKKworICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRocm93aW5nIGZyb20gV2Vi
QXNzZW1ibHkuCisgIGxldCBrV2FzbVRocm93RnVuY3Rpb24gPQorICAgIGJ1aWxkZXIuYWRkRnVu
Y3Rpb24oInRocm93Iiwga1NpZ192X2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBy
TG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pCisgICAg
ICAuaW5kZXg7CisKKyAgLy8gU2NlbmFyaW8gMTogVGhyb3cgYW5kIGNhdGNoIGFwcGVhciBvbiB0
aGUgc2FtZSBmdW5jdGlvbi4gVGhpcyBzaG91bGQKKyAgLy8gaGFwcGVuIGluIGNhc2Ugb2YgaW5s
aW5pbmcsIGZvciBleGFtcGxlLgorICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJzYW1lX3Njb3BlIiwg
a1NpZ19pX2kpCisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAg
ICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckkzMkNvbnN0LCAwLAorICAgICAg
ICBrRXhwckkzMk5lLAorICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4
cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAg
a0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHBySTMyQ29u
c3QsIDYzLAorICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAga0V4cHJFbmQKKyAgICBd
KQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigic2FtZV9zY29w
ZV9pZ25vcmUiLCBrU2lnX2lfaSkKKyAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBr
V2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByVGhy
b3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICBrRXhwckNh
dGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByRW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMo
KTsKKworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJzYW1lX3Njb3BlX211bHRpcGxlIiwga1NpZ19p
X2kpCisgICAgLy8gcGF0aCA9IDA7CisgICAgLy8KKyAgICAvLyB0cnkgeworICAgIC8vICAgdHJ5
IHsKKyAgICAvLyAgICAgdHJ5IHsKKyAgICAvLyAgICAgICBpZiAocCA9PSAxKQorICAgIC8vICAg
ICAgICAgdGhyb3cgMTsKKyAgICAvLyAgICAgICBwYXRoIHw9IDIKKyAgICAvLyAgICAgfSBjYXRj
aCAodikgeworICAgIC8vICAgICAgIHBhdGggfD0gdiB8IDQ7CisgICAgLy8gICAgICAgdGhyb3cg
cGF0aDsKKyAgICAvLyAgICAgfQorICAgIC8vICAgICBpZiAocCA9PSAyKQorICAgIC8vICAgICAg
IHRocm93IHBhdGh8ODsKKyAgICAvLyAgICAgcGF0aCB8PSAxNjsKKyAgICAvLyAgIH0gY2F0Y2gg
KHYpIHsKKyAgICAvLyAgICAgcGF0aCB8PSB2IHwgMzI7CisgICAgLy8gICAgIHRocm93IHBhdGg7
CisgICAgLy8gICB9CisgICAgLy8gICBpZiAocCA9PSAzKQorICAgIC8vICAgICB0aHJvdyBwYXRo
fDY0OworICAgIC8vICAgcGF0aCB8PSAxMjgKKyAgICAvLyB9IGNhdGNoICh2KSB7CisgICAgLy8g
ICBwYXRoIHw9IHYgfCAyNTY7CisgICAgLy8gfQorICAgIC8vCisgICAgLy8gcmV0dXJuIHBhdGg7
CisgICAgLy8KKyAgICAvLyBwID09IDEgLT4gcGF0aCA9PSAyOTMKKyAgICAvLyBwID09IDIgLT4g
cGF0aCA9PSAyOTgKKyAgICAvLyBwID09IDMgLT4gcGF0aCA9PSAzMzgKKyAgICAvLyBlbHNlICAg
LT4gcGF0aCA9PSAxNDYKKyAgICAuYWRkTG9jYWxzKGtXYXNtSTMyLCAxKQorICAgIC5hZGRCb2R5
KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2Fz
bUkzMiwKKyAgICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgICAga0V4
cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAg
ICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAg
ICAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAgICAgICAga0V4cHJUaHJv
dywgZXhjZXB0LAorICAgICAgICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgICAg
ICAgIGtFeHByRW5kLAorICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICAg
ICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCA0LAor
ICAgICAgICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhj
ZXB0LAorICAgICAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICAgICAga0V4cHJF
bmQsCisgICAgICAgICAgICBrRXhwckxvY2FsVGVlLCAxLAorICAgICAgICAgICAga0V4cHJMb2Nh
bEdldCwgMCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgICAgICBrRXhw
ckkzMkVxLAorICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAgICBr
RXhwckxvY2FsR2V0LCAxLAorICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCA4LAorICAgICAg
ICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAor
ICAgICAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICAgICAga0V4cHJFbmQsCisg
ICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxNiwKKyAgICAgICAgICAgIGtFeHBySTMySW9yLAor
ICAgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3Qs
IDMyLAorICAgICAgICAgICAga0V4cHJJMzJJb3IsCisgICAgICAgICAgICBrRXhwclRocm93LCBl
eGNlcHQsCisgICAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICAgIGtFeHByRW5k
LAorICAgICAgICAgIGtFeHByTG9jYWxUZWUsIDEsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwg
MCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAzLAorICAgICAgICAgIGtFeHBySTMyRXEsCisg
ICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwg
MSwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIC8qNjQ9Ki8gMTkyLCAwLAorICAgICAgICAg
ICAga0V4cHJJMzJJb3IsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAg
ICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgIGtF
eHBySTMyQ29uc3QsIC8qMTI4PSovIDEyOCwgMSwKKyAgICAgICAgICBrRXhwckkzMklvciwKKyAg
ICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIC8qMjU2
PSovIDEyOCwgMiwKKyAgICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAga0V4cHJFbmQsCisg
ICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIC8vIFNjZW5hcmlvIDI6IENhdGNoZXMgYW4g
ZXhjZXB0aW9uIHJhaXNlZCBmcm9tIHRoZSBkaXJlY3QgY2FsbGVlLgorICBidWlsZGVyLmFkZEZ1
bmN0aW9uKCJmcm9tX2RpcmVjdF9jYWxsZWUiLCBrU2lnX2lfaSkKKyAgICAuYWRkQm9keShbCisg
ICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAg
ICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrV2FzbVRocm93RnVuY3Rpb24sCisgICAgICAgIGtFeHBy
VW5yZWFjaGFibGUsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICBrRXhwckVuZCwK
KyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgLy8gU2NlbmFyaW8gMzogQ2F0Y2hlcyBh
biBleGNlcHRpb24gcmFpc2VkIGZyb20gYW4gaW5kaXJlY3QgY2FsbGVlLgorICBsZXQgc2lnX3Zf
aSA9IGJ1aWxkZXIuYWRkVHlwZShrU2lnX3ZfaSk7CisgIGJ1aWxkZXIuYXBwZW5kVG9UYWJsZShb
a1dhc21UaHJvd0Z1bmN0aW9uLCBrV2FzbVRocm93RnVuY3Rpb25dKTsKKyAgYnVpbGRlci5hZGRG
dW5jdGlvbigiZnJvbV9pbmRpcmVjdF9jYWxsZWUiLCBrU2lnX2lfaWkpCisgICAgLmFkZEJvZHko
WworICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAor
ICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICBrRXhwckNhbGxJbmRpcmVjdCwgc2ln
X3ZfaSwga1RhYmxlWmVybywKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHBy
Q2F0Y2gsIGV4Y2VwdCwKKyAgICAgIGtFeHByRW5kCisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygp
OworCisgIC8vIFNjZW5hcmlvIDQ6IERvZXMgbm90IGNhdGNoIGFuIGV4Y2VwdGlvbiByYWlzZWQg
aW4gSlMsIGV2ZW4gaWYgcHJpbWl0aXZlCisgIC8vIHZhbHVlcyBhcmUgYmVpbmcgdXNlZCBhcyBl
eGNlcHRpb25zLgorICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJpX2Zyb21fanMiLCBrU2lnX2lfaSkK
KyAgICAuYWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgIGtFeHBy
TG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrSlNUaHJvd0ksCisgICAg
ICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAg
IGtFeHByVW5yZWFjaGFibGUsCisgICAgICBrRXhwckVuZCwKKyAgICBdKQorICAgIC5leHBvcnRG
dW5jKCk7CisKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigic3RyaW5nX2Zyb21fanMiLCBrU2lnX3Zf
dikKKyAgICAuYWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICBr
RXhwckNhbGxGdW5jdGlvbiwga0pTVGhyb3dTdHJpbmcsCisgICAgICBrRXhwckNhdGNoLCBleGNl
cHQsCisgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICBrRXhwckVuZCwKKyAgICBdKQor
ICAgIC5leHBvcnRGdW5jKCk7CisKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiZnBfZnJvbV9qcyIs
IGtTaWdfdl92KQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisg
ICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrSlNUaHJvd0ZQLAorICAgICAga0V4cHJDYXRjaCwg
ZXhjZXB0LAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAga0V4cHJFbmQsCisgICAg
XSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImxhcmdlX2Zy
b21fanMiLCBrU2lnX3ZfdikKKyAgICAuYWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21W
b2lkLAorICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwga0pTVGhyb3dMYXJnZSwKKyAgICAgIGtF
eHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHBy
RW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFkZEZ1bmN0aW9u
KCJ1bmRlZmluZWRfZnJvbV9qcyIsIGtTaWdfdl92KQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtF
eHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrSlNUaHJvd1Vu
ZGVmaW5lZCwKKyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJVbnJlYWNo
YWJsZSwKKyAgICAgIGtFeHByRW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBs
ZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsiIjogeworICAgICAgdGhyb3dfaTog
dGhyb3dfdmFsdWUsCisgICAgICB0aHJvd19zdHJpbmc6IHRocm93X3N0cmluZywKKyAgICAgIHRo
cm93X2ZwOiB0aHJvd19mcCwKKyAgICAgIHRocm93X2xhcmdlLCB0aHJvd19sYXJnZSwKKyAgICAg
IHRocm93X3VuZGVmaW5lZDogdGhyb3dfdW5kZWZpbmVkCisgIH19KTsKKworICBhc3NlcnRFcXVh
bHMoNjMsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZSgwKSk7CisgIGFzc2VydEVxdWFscygx
MDI0LCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGUoMTAyNCkpOworICBhc3NlcnRFcXVhbHMo
LTMsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZSgtMykpOworICBhc3NlcnRFcXVhbHMoLTEs
IGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZV9pZ25vcmUoLTEpKTsKKyAgYXNzZXJ0RXF1YWxz
KDEsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZV9pZ25vcmUoMSkpOworICBhc3NlcnRFcXVh
bHMoMHg3RkZGRkZGRiwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX2lnbm9yZSgweDdGRkZG
RkZGKSk7CisgIGFzc2VydEVxdWFscygxMDI0LCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVf
aWdub3JlKDEwMjQpKTsKKyAgYXNzZXJ0RXF1YWxzKC0xLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVf
c2NvcGVfaWdub3JlKC0xKSk7CisgIGFzc2VydEVxdWFscygyOTMsIGluc3RhbmNlLmV4cG9ydHMu
c2FtZV9zY29wZV9tdWx0aXBsZSgxKSk7CisgIGFzc2VydEVxdWFscygyOTgsIGluc3RhbmNlLmV4
cG9ydHMuc2FtZV9zY29wZV9tdWx0aXBsZSgyKSk7CisgIGFzc2VydEVxdWFscygzMzgsIGluc3Rh
bmNlLmV4cG9ydHMuc2FtZV9zY29wZV9tdWx0aXBsZSgzKSk7CisgIGFzc2VydEVxdWFscygxNDYs
IGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZV9tdWx0aXBsZSgwKSk7CisgIGFzc2VydEVxdWFs
cygtMTAwMjQsIGluc3RhbmNlLmV4cG9ydHMuZnJvbV9kaXJlY3RfY2FsbGVlKC0xMDAyNCkpOwor
ICBhc3NlcnRFcXVhbHMoMzMzNDMzMywgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2RpcmVjdF9jYWxs
ZWUoMzMzNDMzMykpOworICBhc3NlcnRFcXVhbHMoLTEsIGluc3RhbmNlLmV4cG9ydHMuZnJvbV9k
aXJlY3RfY2FsbGVlKDB4RkZGRkZGRkYpKTsKKyAgYXNzZXJ0RXF1YWxzKDB4N0ZGRkZGRkYsIGlu
c3RhbmNlLmV4cG9ydHMuZnJvbV9kaXJlY3RfY2FsbGVlKDB4N0ZGRkZGRkYpKTsKKyAgYXNzZXJ0
RXF1YWxzKDEwLCBpbnN0YW5jZS5leHBvcnRzLmZyb21faW5kaXJlY3RfY2FsbGVlKDEwLCAwKSk7
CisgIGFzc2VydEVxdWFscyg3NywgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2luZGlyZWN0X2NhbGxl
ZSg3NywgMSkpOworCisgIGFzc2VydFRocm93c0VxdWFscygoKSA9PiBpbnN0YW5jZS5leHBvcnRz
LmlfZnJvbV9qcygxMCksIDEwKTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzKCgpID0+IGluc3RhbmNl
LmV4cG9ydHMuaV9mcm9tX2pzKC0xMCksIC0xMCk7CisgIGFzc2VydFRocm93c0VxdWFscyhpbnN0
YW5jZS5leHBvcnRzLnN0cmluZ19mcm9tX2pzLCAidXNlIHdhc20iKTsKKyAgYXNzZXJ0VGhyb3dz
RXF1YWxzKGluc3RhbmNlLmV4cG9ydHMuZnBfZnJvbV9qcywgMTAuNSk7CisgIGFzc2VydFRocm93
c0VxdWFscyhpbnN0YW5jZS5leHBvcnRzLmxhcmdlX2Zyb21fanMsIDFlKzI4KTsKKyAgYXNzZXJ0
VGhyb3dzRXF1YWxzKGluc3RhbmNlLmV4cG9ydHMudW5kZWZpbmVkX2Zyb21fanMsIHVuZGVmaW5l
ZCk7Cit9KSgpOworCisvLyBEZWxlZ2F0ZSB3aXRoIGEgdHJ5IGJsb2NrIHRoYXQgbmV2ZXIgdGhy
b3dzLgorKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZU5vVGhyb3coKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlci5hZGRUYWco
a1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ19pX3YpCisgICAg
ICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhw
clRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAg
IGtFeHByRGVsZWdhdGUsIDAsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAgICAg
ICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRG
dW5jKCk7CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVh
bHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KCkpOworfSkoKTsKKworLy8gRGVsZWdhdGUgZXhj
ZXB0aW9uIGhhbmRsaW5nIHRvIG91dGVyIHRyeS9jYXRjaCBibG9jay4KKyhmdW5jdGlvbiBUZXN0
RGVsZWdhdGVUaHJvdygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIo
KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IHRocm93
X2lmID0gYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3cnLCBrU2lnX3ZfaSkKKyAgICAgIC5hZGRC
b2R5KFsKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBySWYsIGtX
YXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhw
ckVuZF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdf
aV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAg
ICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwK
KyAgICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCB0aHJvd19pZi5pbmRleCwKKyAgICAgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAg
ICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAg
ICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBpbnN0YW5jZSA9IGJ1aWxk
ZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGVz
dCgwKSk7CisgIGFzc2VydEVxdWFscygyLCBpbnN0YW5jZS5leHBvcnRzLnRlc3QoMSkpOworfSko
KTsKKworLy8gTm8gY2F0Y2ggYmxvY2sgbWF0Y2hpbmcgdGhlIGV4Y2VwdGlvbiBpbiB0aGUgZGVs
ZWdhdGUgdGFyZ2V0LgorKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZVRocm93Tm9DYXRjaCgpIHsKKyAg
bGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBi
dWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5hZGRUYWco
a1NpZ192X3YpOworICBsZXQgdGhyb3dfZm4gPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvdycs
IGtTaWdfdl92KQorICAgICAgICAgICAgICAgICAgICAgLmFkZEJvZHkoW2tFeHByVGhyb3csIGV4
Y2VwdDFdKQorICAgICAgICAgICAgICAgICAgICAgLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IHRocm93
X2ZuXzIgPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvd18yJywga1NpZ192X3YpCisgICAgICAg
ICAgICAgICAgICAgICAuYWRkQm9keShba0V4cHJUaHJvdywgZXhjZXB0Ml0pCisgICAgICAgICAg
ICAgICAgICAgICAuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywg
a1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwK
KyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckNhbGxGdW5j
dGlvbiwgdGhyb3dfZm4uaW5kZXgsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAg
ICAgICAgIGtFeHByRGVsZWdhdGUsIDAsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDIsCisg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5l
eHBvcnRGdW5jKCk7CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3Nl
cnRUaHJvd3MoaW5zdGFuY2UuZXhwb3J0cy50ZXN0LCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOwor
fSkoKTsKKworLy8gQ2hlY2sgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIG1lcmdlZCBwcm9wZXJseSB3
aGVuIGJvdGggc2NvcGVzIGNhbiB0aHJvdy4KKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVNZXJnZSgp
IHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2Vw
dDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X3YpOworICAvLyB0aHJvd19mbjogMCAtPiByZXR1cm5zCisgIC8vICAgICAg
ICAgICAxIC0+IHRocm93IGV4Y2VwdDEKKyAgLy8gICAgICAgICAgIDIgLT4gdGhyb3cgZXhjZXB0
MgorICBsZXQgdGhyb3dfZm4gPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvdycsIGtTaWdfdl9p
KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICAgIGtFeHByQmxvY2ssIGtXYXNtVm9pZCwKKyAg
ICAgICAgICAgIGtFeHByQmxvY2ssIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAga0V4cHJCbG9j
aywga1dhc21Wb2lkLAorICAgICAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAg
ICAgICAgICAga0V4cHJCclRhYmxlLCAyLCAwLCAxLCAyLAorICAgICAgICAgICAgICBrRXhwckVu
ZCwKKyAgICAgICAgICAgICAga0V4cHJSZXR1cm4sCisgICAgICAgICAgICBrRXhwckVuZCwKKyAg
ICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDEsCisgICAgICAgICAga0V4cHJFbmQsCisgICAg
ICAgICAga0V4cHJUaHJvdywgZXhjZXB0Ml0pCisgICAgICAuZXhwb3J0RnVuYygpOworICBidWls
ZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ19pX2lpKQorICAgICAgLmFkZEJvZHkoWworICAg
ICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAg
ICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgdGhyb3dfZm4uaW5kZXgsCisgICAgICAgICAga0V4
cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAg
ICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCB0aHJvd19mbi5pbmRleCwKKyAgICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDEsCisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAga0V4cHJD
YXRjaCwgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhw
ckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3Rh
bnRpYXRlKCk7CisgIGFzc2VydEVxdWFscygyLCBpbnN0YW5jZS5leHBvcnRzLnRlc3QoMSwgMCkp
OworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50ZXN0KDIsIDApLCBXZWJB
c3NlbWJseS5FeGNlcHRpb24pOworICBhc3NlcnRFcXVhbHMoMiwgaW5zdGFuY2UuZXhwb3J0cy50
ZXN0KDAsIDEpKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMudGVzdCgw
LCAyKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNl
LmV4cG9ydHMudGVzdCgwLCAwKSk7Cit9KSgpOworCisvLyBEZWxlZ2F0ZSB0byBzZWNvbmQgZW5j
bG9zaW5nIHRyeSBzY29wZS4KKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGUxKCkgeworICBsZXQgYnVp
bGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X3YpOworICBsZXQgdGhyb3dfZm4gPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0
aHJvdycsIGtTaWdfdl92KQorICAgICAgICAgICAgICAgICAgICAgLmFkZEJvZHkoW2tFeHByVGhy
b3csIGV4Y2VwdF0pCisgICAgICAgICAgICAgICAgICAgICAuZXhwb3J0RnVuYygpOworICBidWls
ZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAg
ICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisg
ICAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICAgIGtFeHByQ2FsbEZ1
bmN0aW9uLCB0aHJvd19mbi5pbmRleCwKKyAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwK
KyAgICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDEsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhj
ZXB0LAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAgICBrRXhwckVuZCwK
KyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDMs
CisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBpbnN0YW5jZSA9
IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDMsIGluc3RhbmNlLmV4cG9y
dHMudGVzdCgpKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVVbnJlYWNoYWJsZSgp
IHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2Vw
dDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ19pX3Yp
CisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAg
ICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MSwK
KyAgICAgICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEs
CisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwg
MiwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MiwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0
LCAzLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFu
Y2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscygyLCBpbnN0YW5jZS5l
eHBvcnRzLnRlc3QoKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlVG9DYWxsZXIo
KSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNl
cHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rl
c3QnLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNt
Vm9pZCwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJU
aHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDEsCisgICAgICAgIGtFeHBy
Q2F0Y2hBbGwsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGlu
c3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5z
dGFuY2UuZXhwb3J0cy50ZXN0KCksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9KSgpOworCiso
ZnVuY3Rpb24gVGVzdFRocm93QmVmb3JlVW5yZWFjaGFibGUoKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93X2JlZm9yZV91bnJlYWNoYWJs
ZScsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21J
MzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHByVW5yZWFj
aGFibGUsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwg
NDIsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworCisgIGxldCBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDQyLCBpbnN0
YW5jZS5leHBvcnRzLnRocm93X2JlZm9yZV91bnJlYWNoYWJsZSgpKTsKK30pKCk7CisKKyhmdW5j
dGlvbiBUZXN0VW5yZWFjaGFibGVJbkNhdGNoQWxsKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBX
YXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192
X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvd19iZWZvcmVfdW5yZWFjaGFibGUnLCBr
U2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAor
ICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAg
ICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDQyLAor
ICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKworICBsZXQgaW5zdGFu
Y2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdFRocm93
V2l0aExvY2FsKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOwor
ICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1
bmN0aW9uKCd0aHJvd193aXRoX2xvY2FsJywga1NpZ19pX3YpCisgICAgLmFkZExvY2FscyhrV2Fz
bUkzMiwgNCkKKyAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDQyLAorICAg
ICAgICBrRXhwckY2NENvbnN0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICBrRXhw
clRyeSwga1dhc21GMzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICBr
RXhwckNhdGNoQWxsLAorICAgICAgICAgIGtFeHByRjMyQ29uc3QsIDAsIDAsIDAsIDAsCisgICAg
ICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckRyb3AsICAvLyBEcm9wIHRoZSBmMzIuCisgICAg
ICAgIGtFeHByRHJvcCwgIC8vIERyb3AgdGhlIGY2NC4KKyAgICAgICAgLy8gTGVhdmUgdGhlICc0
Micgb24gdGhlIHN0YWNrLgorICAgIF0pLmV4cG9ydEZ1bmMoKTsKKworICBsZXQgaW5zdGFuY2Ug
PSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscyg0MiwgaW5zdGFuY2UuZXhw
b3J0cy50aHJvd193aXRoX2xvY2FsKCkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RDYXRjaGxl
c3NUcnkoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxl
dCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rp
b24oJ2NhdGNobGVzc190cnknLCBrU2lnX3ZfaSkKKyAgICAuYWRkQm9keShbCisgICAgICAgIGtF
eHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAg
ICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisg
ICAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByRW5kLAorICAgIF0pLmV4cG9ydEZ1bmMo
KTsKKworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2Vw
dCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RG9l
c05vdFRocm93KCgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hsZXNzX3RyeSgwKSk7CisgIGFz
c2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBp
bnN0YW5jZS5leHBvcnRzLmNhdGNobGVzc190cnkoMSkpOworfSkoKTsKKworLy8gRGVsZWdhdGUg
dG8gYSByZWd1bGFyIGJsb2NrIGluc2lkZSBhIHRyeSBibG9jay4KKyhmdW5jdGlvbiBUZXN0RGVs
ZWdhdGVUb0Jsb2NrKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigp
OworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFk
ZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtF
eHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckJsb2NrLCBrV2FzbUkzMiwKKyAgICAg
ICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhj
ZXB0LAorICAgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAgICBrRXhwckVuZCwK
KyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIs
CisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICAgIGFzc2VydFRo
cm93cygoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKCksIEVycm9yLCAvZGVsZWdhdGUgdGFyZ2V0
IGlzbid0IGEgdHJ5IGJsb2NrLyk7Cit9KSgpOworCisvLyBEZWxlZ2F0ZSB0byBhIHJlZ3VsYXIg
YmxvY2sgd2l0aCBubyBvdXRlciB0cnkgKGRlbGVnYXRlIHRvIGNhbGxlcikuCisoZnVuY3Rpb24g
VGVzdERlbGVnYXRlVG9DYWxsZXJXaXRoQmxvY2soKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdh
c21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zf
dik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRC
b2R5KFsKKyAgICAgICAga0V4cHJCbG9jaywga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByVHJ5
LCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAg
a0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoKSwgRXJyb3IsIC9k
ZWxlZ2F0ZSB0YXJnZXQgaXNuJ3QgYSB0cnkgYmxvY2svKTsKK30pKCk7CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vdjgvbWpzdW5pdC5qcyBiL0pTVGVzdHMvd2FzbS92OC9tanN1bml0LmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQyNDU1YmFhNjE2OTY2ZjhkMGE2YjlkZTFkYTMyMTFmZmEyZGEzNjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvbWpzdW5pdC5qcwpAQCAtMCwwICsxLDgyNiBA
QAorLy8gQ29weXJpZ2h0IDIwMDggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAg
ICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAg
ICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmdW5jdGlvbiBNanNVbml0QXNzZXJ0aW9u
RXJyb3IobWVzc2FnZSkgeworICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAvLyBUZW1wb3Jh
cmlseSBpbnN0YWxsIGEgY3VzdG9tIHN0YWNrIHRyYWNlIGZvcm1hdHRlciBhbmQgcmVzdG9yZSB0
aGUKKyAgLy8gcHJldmlvdXMgdmFsdWUuCisgIGxldCBwcmV2UHJlcGFyZVN0YWNrVHJhY2UgPSBF
cnJvci5wcmVwYXJlU3RhY2tUcmFjZTsKKyAgdHJ5IHsKKyAgICBFcnJvci5wcmVwYXJlU3RhY2tU
cmFjZSA9IE1qc1VuaXRBc3NlcnRpb25FcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsKKyAgICAvLyBU
aGlzIGFsbG93cyBmZXRjaGluZyB0aGUgc3RhY2sgdHJhY2UgdXNpbmcgVHJ5Q2F0Y2g6OlN0YWNr
VHJhY2UuCisgICAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcigiTWpzVW5pdEFzc2VydGlvbkVycm9y
Iikuc3RhY2s7CisgIH0gZmluYWxseSB7CisgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBw
cmV2UHJlcGFyZVN0YWNrVHJhY2U7CisgIH0KK30KKworLyoKKyAqIFRoaXMgZmlsZSBpcyBpbmNs
dWRlZCBpbiBhbGwgbWluaSBqc3VuaXQgdGVzdCBjYXNlcy4gIFRoZSB0ZXN0CisgKiBmcmFtZXdv
cmsgZXhwZWN0cyBsaW5lcyB0aGF0IHNpZ25hbCBmYWlsZWQgdGVzdHMgdG8gc3RhcnQgd2l0aAor
ICogdGhlIGYtd29yZCBhbmQgaWdub3JlIGFsbCBvdGhlciBsaW5lcy4KKyAqLworCitNanNVbml0
QXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICByZXR1
cm4gdGhpcy5tZXNzYWdlICsgIlxuXG5TdGFjazogIiArIHRoaXMuc3RhY2s7Cit9OworCisKKy8v
IEV4cGVjdGVkIGFuZCBmb3VuZCB2YWx1ZXMgdGhlIHNhbWUgb2JqZWN0cywgb3IgdGhlIHNhbWUg
cHJpbWl0aXZlCisvLyB2YWx1ZXMuCisvLyBGb3Iga25vd24gcHJpbWl0aXZlIHZhbHVlcywgcGxl
YXNlIHVzZSBhc3NlcnRFcXVhbHMuCit2YXIgYXNzZXJ0U2FtZTsKKworLy8gSW52ZXJzZSBvZiBh
c3NlcnRTYW1lLgordmFyIGFzc2VydE5vdFNhbWU7CisKKy8vIEV4cGVjdGVkIGFuZCBmb3VuZCB2
YWx1ZXMgYXJlIGlkZW50aWNhbCBwcmltaXRpdmUgdmFsdWVzIG9yIGZ1bmN0aW9ucworLy8gb3Ig
c2ltaWxhcmx5IHN0cnVjdHVyZWQgb2JqZWN0cyAoY2hlY2tpbmcgaW50ZXJuYWwgcHJvcGVydGll
cworLy8gb2YsIGUuZy4sIE51bWJlciBhbmQgRGF0ZSBvYmplY3RzLCB0aGUgZWxlbWVudHMgb2Yg
YXJyYXlzCisvLyBhbmQgdGhlIHByb3BlcnRpZXMgb2Ygbm9uLUFycmF5IG9iamVjdHMpLgordmFy
IGFzc2VydEVxdWFsczsKKworLy8gRGVlcCBlcXVhbGl0eSBwcmVkaWNhdGUgdXNlZCBieSBhc3Nl
cnRFcXVhbHMuCit2YXIgZGVlcEVxdWFsczsKKworLy8gRXhwZWN0ZWQgYW5kIGZvdW5kIHZhbHVl
cyBhcmUgbm90IGlkZW50aWNhbCBwcmltaXRpdmUgdmFsdWVzIG9yIGZ1bmN0aW9ucworLy8gb3Ig
c2ltaWxhcmx5IHN0cnVjdHVyZWQgb2JqZWN0cyAoY2hlY2tpbmcgaW50ZXJuYWwgcHJvcGVydGll
cworLy8gb2YsIGUuZy4sIE51bWJlciBhbmQgRGF0ZSBvYmplY3RzLCB0aGUgZWxlbWVudHMgb2Yg
YXJyYXlzCisvLyBhbmQgdGhlIHByb3BlcnRpZXMgb2Ygbm9uLUFycmF5IG9iamVjdHMpLgordmFy
IGFzc2VydE5vdEVxdWFsczsKKworLy8gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBleHBlY3RlZCBh
bmQgZm91bmQgdmFsdWUgaXMgd2l0aGluIGNlcnRhaW4gdG9sZXJhbmNlLgordmFyIGFzc2VydEVx
dWFsc0RlbHRhOworCisvLyBUaGUgZm91bmQgb2JqZWN0IGlzIGFuIEFycmF5IHdpdGggdGhlIHNh
bWUgbGVuZ3RoIGFuZCBlbGVtZW50cworLy8gYXMgdGhlIGV4cGVjdGVkIG9iamVjdC4gVGhlIGV4
cGVjdGVkIG9iamVjdCBkb2Vzbid0IG5lZWQgdG8gYmUgYW4gQXJyYXksCisvLyBhcyBsb25nIGFz
IGl0J3MgImFycmF5LWlzaCIuCit2YXIgYXNzZXJ0QXJyYXlFcXVhbHM7CisKKy8vIFRoZSBmb3Vu
ZCBvYmplY3QgbXVzdCBoYXZlIHRoZSBzYW1lIGVudW1lcmFibGUgcHJvcGVydGllcyBhcyB0aGUK
Ky8vIGV4cGVjdGVkIG9iamVjdC4gVGhlIHR5cGUgb2Ygb2JqZWN0IGlzbid0IGNoZWNrZWQuCit2
YXIgYXNzZXJ0UHJvcGVydGllc0VxdWFsOworCisvLyBBc3NlcnQgdGhhdCB0aGUgc3RyaW5nIGNv
bnZlcnNpb24gb2YgdGhlIGZvdW5kIHZhbHVlIGlzIGVxdWFsIHRvCisvLyB0aGUgZXhwZWN0ZWQg
c3RyaW5nLiBPbmx5IGtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBwbGVhc2UKKy8v
IGNoZWNrIHRoZSByZWFsIHN0cnVjdHVyZSBvZiB0aGUgZm91bmQgdmFsdWUuCit2YXIgYXNzZXJ0
VG9TdHJpbmdFcXVhbHM7CisKKy8vIENoZWNrcyB0aGF0IHRoZSBmb3VuZCB2YWx1ZSBpcyB0cnVl
LiBVc2Ugd2l0aCBib29sZWFuIGV4cHJlc3Npb25zCisvLyBmb3IgdGVzdHMgdGhhdCBkb2Vzbid0
IGhhdmUgdGhlaXIgb3duIGFzc2VydFhYWCBmdW5jdGlvbi4KK3ZhciBhc3NlcnRUcnVlOworCisv
LyBDaGVja3MgdGhhdCB0aGUgZm91bmQgdmFsdWUgaXMgZmFsc2UuCit2YXIgYXNzZXJ0RmFsc2U7
CisKKy8vIENoZWNrcyB0aGF0IHRoZSBmb3VuZCB2YWx1ZSBpcyBudWxsLiBLZXB0IGZvciBoaXN0
b3JpY2FsIGNvbXBhdGliaWxpdHksCisvLyBwbGVhc2UganVzdCB1c2UgYXNzZXJ0RXF1YWxzKG51
bGwsIGV4cGVjdGVkKS4KK3ZhciBhc3NlcnROdWxsOworCisvLyBDaGVja3MgdGhhdCB0aGUgZm91
bmQgdmFsdWUgaXMgKm5vdCogbnVsbC4KK3ZhciBhc3NlcnROb3ROdWxsOworCisvLyBBc3NlcnQg
dGhhdCB0aGUgcGFzc2VkIGZ1bmN0aW9uIG9yIGV2YWwgY29kZSB0aHJvd3MgYW4gZXhjZXB0aW9u
LgorLy8gVGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBpcyBhbiBleGNlcHRpb24gY29uc3Ry
dWN0b3IgdGhhdCB0aGUKKy8vIHRocm93biBleGNlcHRpb24gaXMgY2hlY2tlZCBhZ2FpbnN0IHdp
dGggImluc3RhbmNlb2YiLgorLy8gVGhlIG9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50IGlzIGEgbWVz
c2FnZSB0eXBlIHN0cmluZyBvciBSZWdFeHAgb2JqZWN0IHRoYXQgaXMKKy8vIGNvbXBhcmVkIHRv
IHRoZSBtZXNzYWdlIG9mIHRoZSB0aHJvd24gZXhjZXB0aW9uLgordmFyIGFzc2VydFRocm93czsK
KworLy8gQXNzZXJ0IHRoYXQgdGhlIHBhc3NlZCBmdW5jdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9u
LgorLy8gVGhlIGV4Y2VwdGlvbiBpcyBjaGVja2VkIGFnYWluc3QgdGhlIHNlY29uZCBhcmd1bWVu
dCB1c2luZyBhc3NlcnRFcXVhbHMuCit2YXIgYXNzZXJ0VGhyb3dzRXF1YWxzOworCisvLyBBc3Nl
cnQgdGhhdCB0aGUgcGFzc2VkIHByb21pc2UgZG9lcyBub3QgcmVzb2x2ZSwgYnV0IGV2ZW50dWFs
bHkgdGhyb3dzIGFuCisvLyBleGNlcHRpb24uIFRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQg
aXMgYW4gZXhjZXB0aW9uIGNvbnN0cnVjdG9yIHRoYXQgdGhlCisvLyB0aHJvd24gZXhjZXB0aW9u
IGlzIGNoZWNrZWQgYWdhaW5zdCB3aXRoICJpbnN0YW5jZW9mIi4KKy8vIFRoZSBvcHRpb25hbCB0
aGlyZCBhcmd1bWVudCBpcyBhIG1lc3NhZ2UgdHlwZSBzdHJpbmcgb3IgUmVnRXhwIG9iamVjdCB0
aGF0IGlzCisvLyBjb21wYXJlZCB0byB0aGUgbWVzc2FnZSBvZiB0aGUgdGhyb3duIGV4Y2VwdGlv
bi4KK3ZhciBhc3NlcnRUaHJvd3NBc3luYzsKKworLy8gQXNzZXJ0IHRoYXQgdGhlIHBhc3NlZCBm
dW5jdGlvbiBvciBldmFsIGNvZGUgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgordmFyIGFz
c2VydERvZXNOb3RUaHJvdzsKKworLy8gQXNzZXJ0cyB0aGF0IHRoZSBmb3VuZCB2YWx1ZSBpcyBh
biBpbnN0YW5jZSBvZiB0aGUgY29uc3RydWN0b3IgcGFzc2VkCisvLyBhcyB0aGUgc2Vjb25kIGFy
Z3VtZW50LgordmFyIGFzc2VydEluc3RhbmNlb2Y7CisKKy8vIEFzc2VydCB0aGF0IHRoaXMgY29k
ZSBpcyBuZXZlciBleGVjdXRlZCAoaS5lLiwgYWx3YXlzIGZhaWxzIGlmIGV4ZWN1dGVkKS4KK3Zh
ciBhc3NlcnRVbnJlYWNoYWJsZTsKKworLy8gQXNzZXJ0IHRoYXQgdGhlIGZ1bmN0aW9uIGNvZGUg
aXMgKG5vdCkgb3B0aW1pemVkLgorLy8gT25seSB3b3JrcyB3aXRoIC0tYWxsb3ctbmF0aXZlcy1z
eW50YXguCit2YXIgYXNzZXJ0T3B0aW1pemVkOwordmFyIGFzc2VydFVub3B0aW1pemVkOworCisv
LyBBc3NlcnQgdGhhdCBhIHN0cmluZyBjb250YWlucyBhbm90aGVyIGV4cGVjdGVkIHN1YnN0cmlu
Zy4KK3ZhciBhc3NlcnRDb250YWluczsKKworLy8gQXNzZXJ0IHRoYXQgYSBzdHJpbmcgbWF0Y2hl
cyBhIGdpdmVuIHJlZ2V4LgordmFyIGFzc2VydE1hdGNoZXM7CisKKy8vIEFzc2VydCB0aGF0IGEg
cHJvbWlzZSByZXNvbHZlcyBvciByZWplY3RzLgorLy8gUGFyYW1ldGVyczoKKy8vIHtwcm9taXNl
fSAtIHRoZSBwcm9taXNlCisvLyB7c3VjY2Vzc30gLSBvcHRpb25hbCAtIGEgY2FsbGJhY2sgd2hp
Y2ggaXMgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUKKy8vICAgICAgICAgICAgIHJlc29s
dmluZyBwcm9taXNlLgorLy8gIHtmYWlsfSAtICAgb3B0aW9uYWwgLSBhIGNhbGxiYWNrIHdoaWNo
IGlzIGNhbGxlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlCisvLyAgICAgICAgICAgICByZWplY3Rp
bmcgcHJvbWlzZS4gSWYgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgYnV0IG5vIHtmYWlsfQorLy8g
ICAgICAgICAgICAgY2FsbGJhY2sgaXMgc2V0LCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCBvdXQg
b2YgdGhlIHByb21pc2UKKy8vICAgICAgICAgICAgIGNoYWluLgordmFyIGFzc2VydFByb21pc2VS
ZXN1bHQ7CisKK3ZhciBwcm9taXNlVGVzdENoYWluOwordmFyIHByb21pc2VUZXN0Q291bnQgPSAw
OworCisvLyBUaGVzZSBiaXRzIG11c3QgYmUgaW4gc3luYyB3aXRoIGJpdHMgZGVmaW5lZCBpbiBS
dW50aW1lX0dldE9wdGltaXphdGlvblN0YXR1cwordmFyIFY4T3B0aW1pemF0aW9uU3RhdHVzID0g
eworICBrSXNGdW5jdGlvbjogMSA8PCAwLAorICBrTmV2ZXJPcHRpbWl6ZTogMSA8PCAxLAorICBr
QWx3YXlzT3B0aW1pemU6IDEgPDwgMiwKKyAga01heWJlRGVvcHRlZDogMSA8PCAzLAorICBrT3B0
aW1pemVkOiAxIDw8IDQsCisgIGtUdXJib0Zhbm5lZDogMSA8PCA1LAorICBrSW50ZXJwcmV0ZWQ6
IDEgPDwgNiwKKyAga01hcmtlZEZvck9wdGltaXphdGlvbjogMSA8PCA3LAorICBrTWFya2VkRm9y
Q29uY3VycmVudE9wdGltaXphdGlvbjogMSA8PCA4LAorICBrT3B0aW1pemluZ0NvbmN1cnJlbnRs
eTogMSA8PCA5LAorICBrSXNFeGVjdXRpbmc6IDEgPDwgMTAsCisgIGtUb3Btb3N0RnJhbWVJc1R1
cmJvRmFubmVkOiAxIDw8IDExLAorICBrTGl0ZU1vZGU6IDEgPDwgMTIsCisgIGtNYXJrZWRGb3JE
ZW9wdGltaXphdGlvbjogMSA8PCAxMywKKyAga0Jhc2VsaW5lOiAxIDw8IDE0LAorICBrVG9wbW9z
dEZyYW1lSXNJbnRlcnByZXRlZDogMSA8PCAxNSwKKyAga1RvcG1vc3RGcmFtZUlzQmFzZWxpbmU6
IDEgPDwgMTYsCit9OworCisvLyBSZXR1cm5zIHRydWUgaWYgLS1saXRlLW1vZGUgaXMgb24gYW5k
IHdlIGNhbid0IGV2ZXIgdHVybiBvbiBvcHRpbWl6YXRpb24uCit2YXIgaXNOZXZlck9wdGltaXpl
TGl0ZU1vZGU7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiAtLW5vLW9wdCBtb2RlIGlzIG9uLgordmFy
IGlzTmV2ZXJPcHRpbWl6ZTsKKworLy8gUmV0dXJucyB0cnVlIGlmIC0tYWx3YXlzLW9wdCBtb2Rl
IGlzIG9uLgordmFyIGlzQWx3YXlzT3B0aW1pemU7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBnaXZl
biBmdW5jdGlvbiBpbiBpbnRlcnByZXRlZC4KK3ZhciBpc0ludGVycHJldGVkOworCisvLyBSZXR1
cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24gaW4gYmFzZWxpbmUuCit2YXIgaXNCYXNlbGluZTsK
KworLy8gUmV0dXJucyB0cnVlIGlmIGdpdmVuIGZ1bmN0aW9uIGluIHVub3B0aW1pemVkIChpbnRl
cnByZXRlZCBvciBiYXNlbGluZSkuCit2YXIgaXNVbm9wdGltaXplZDsKKworLy8gUmV0dXJucyB0
cnVlIGlmIGdpdmVuIGZ1bmN0aW9uIGlzIG9wdGltaXplZC4KK3ZhciBpc09wdGltaXplZDsKKwor
Ly8gUmV0dXJucyB0cnVlIGlmIGdpdmVuIGZ1bmN0aW9uIGlzIGNvbXBpbGVkIGJ5IFR1cmJvRmFu
LgordmFyIGlzVHVyYm9GYW5uZWQ7CisKKy8vIE1vbmtleS1wYXRjaGFibGUgYWxsLXB1cnBvc2Ug
ZmFpbHVyZSBoYW5kbGVyLgordmFyIGZhaWxXaXRoTWVzc2FnZTsKKworLy8gUmV0dXJucyB0aGUg
Zm9ybWF0dGVkIGZhaWx1cmUgdGV4dC4gIFVzZWQgYnkgdGVzdC1hc3luYy5qcy4KK3ZhciBmb3Jt
YXRGYWlsdXJlVGV4dDsKKworLy8gUmV0dXJucyBhIHByZXR0eS1wcmludGVkIHN0cmluZyByZXBy
ZXNlbnRhdGlvbiBvZiB0aGUgcGFzc2VkIHZhbHVlLgordmFyIHByZXR0eVByaW50ZWQ7CisKKyhm
dW5jdGlvbiAoKSB7ICAvLyBTY29wZSBmb3IgdXRpbGl0eSBmdW5jdGlvbnMuCisKKyAgdmFyIE9i
amVjdFByb3RvdHlwZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKKyAgdmFy
IE51bWJlclByb3RvdHlwZVZhbHVlT2YgPSBOdW1iZXIucHJvdG90eXBlLnZhbHVlT2Y7CisgIHZh
ciBCb29sZWFuUHJvdG90eXBlVmFsdWVPZiA9IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2Y7Cisg
IHZhciBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mID0gU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mOwor
ICB2YXIgRGF0ZVByb3RvdHlwZVZhbHVlT2YgPSBEYXRlLnByb3RvdHlwZS52YWx1ZU9mOworICB2
YXIgUmVnRXhwUHJvdG90eXBlVG9TdHJpbmcgPSBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nOwor
ICB2YXIgQXJyYXlQcm90b3R5cGVGb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2g7Cisg
IHZhciBBcnJheVByb3RvdHlwZUpvaW4gPSBBcnJheS5wcm90b3R5cGUuam9pbjsKKyAgdmFyIEFy
cmF5UHJvdG90eXBlTWFwID0gQXJyYXkucHJvdG90eXBlLm1hcDsKKyAgdmFyIEFycmF5UHJvdG90
eXBlUHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoOworICB2YXIgSlNPTlN0cmluZ2lmeSA9IEpT
T04uc3RyaW5naWZ5OworCisgIHZhciBCaWdJbnRQcm90b3R5cGVWYWx1ZU9mOworICAvLyBUT0RP
KG5laXMpOiBSZW1vdmUgdHJ5LWNhdGNoIG9uY2UgQmlnSW50cyBhcmUgZW5hYmxlZCBieSBkZWZh
dWx0LgorICB0cnkgeworICAgIEJpZ0ludFByb3RvdHlwZVZhbHVlT2YgPSBCaWdJbnQucHJvdG90
eXBlLnZhbHVlT2Y7CisgIH0gY2F0Y2ggKGUpIHt9CisKKyAgZnVuY3Rpb24gY2xhc3NPZihvYmpl
Y3QpIHsKKyAgICAvLyBBcmd1bWVudCBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4KKyAg
ICB2YXIgc3RyaW5nID0gT2JqZWN0UHJvdG90eXBlVG9TdHJpbmcuY2FsbChvYmplY3QpOworICAg
IC8vIFN0cmluZyBoYXMgZm9ybWF0IFtvYmplY3QgPENsYXNzTmFtZT5dLgorICAgIHJldHVybiBz
dHJpbmcuc3Vic3RyaW5nKDgsIHN0cmluZy5sZW5ndGggLSAxKTsKKyAgfQorCisKKyAgZnVuY3Rp
b24gVmFsdWVPZih2YWx1ZSkgeworICAgIHN3aXRjaCAoY2xhc3NPZih2YWx1ZSkpIHsKKyAgICAg
IGNhc2UgIk51bWJlciI6CisgICAgICAgIHJldHVybiBOdW1iZXJQcm90b3R5cGVWYWx1ZU9mLmNh
bGwodmFsdWUpOworICAgICAgY2FzZSAiQmlnSW50IjoKKyAgICAgICAgcmV0dXJuIEJpZ0ludFBy
b3RvdHlwZVZhbHVlT2YuY2FsbCh2YWx1ZSk7CisgICAgICBjYXNlICJTdHJpbmciOgorICAgICAg
ICByZXR1cm4gU3RyaW5nUHJvdG90eXBlVmFsdWVPZi5jYWxsKHZhbHVlKTsKKyAgICAgIGNhc2Ug
IkJvb2xlYW4iOgorICAgICAgICByZXR1cm4gQm9vbGVhblByb3RvdHlwZVZhbHVlT2YuY2FsbCh2
YWx1ZSk7CisgICAgICBjYXNlICJEYXRlIjoKKyAgICAgICAgcmV0dXJuIERhdGVQcm90b3R5cGVW
YWx1ZU9mLmNhbGwodmFsdWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHZhbHVl
OworICAgIH0KKyAgfQorCisKKyAgcHJldHR5UHJpbnRlZCA9IGZ1bmN0aW9uIHByZXR0eVByaW50
ZWQodmFsdWUpIHsKKyAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgeworICAgICAgY2FzZSAic3Ry
aW5nIjoKKyAgICAgICAgcmV0dXJuIEpTT05TdHJpbmdpZnkodmFsdWUpOworICAgICAgY2FzZSAi
YmlnaW50IjoKKyAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSkgKyAibiI7CisgICAgICBjYXNl
ICJudW1iZXIiOgorICAgICAgICBpZiAodmFsdWUgPT09IDAgJiYgKDEgLyB2YWx1ZSkgPCAwKSBy
ZXR1cm4gIi0wIjsKKyAgICAgICAgLy8gRkFMTFRIUk9VR0guCisgICAgICBjYXNlICJib29sZWFu
IjoKKyAgICAgIGNhc2UgInVuZGVmaW5lZCI6CisgICAgICBjYXNlICJmdW5jdGlvbiI6CisgICAg
ICBjYXNlICJzeW1ib2wiOgorICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTsKKyAgICAgIGNh
c2UgIm9iamVjdCI6CisgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICJudWxsIjsK
KyAgICAgICAgdmFyIG9iamVjdENsYXNzID0gY2xhc3NPZih2YWx1ZSk7CisgICAgICAgIHN3aXRj
aCAob2JqZWN0Q2xhc3MpIHsKKyAgICAgICAgICBjYXNlICJOdW1iZXIiOgorICAgICAgICAgIGNh
c2UgIkJpZ0ludCI6CisgICAgICAgICAgY2FzZSAiU3RyaW5nIjoKKyAgICAgICAgICBjYXNlICJC
b29sZWFuIjoKKyAgICAgICAgICBjYXNlICJEYXRlIjoKKyAgICAgICAgICAgIHJldHVybiBvYmpl
Y3RDbGFzcyArICIoIiArIHByZXR0eVByaW50ZWQoVmFsdWVPZih2YWx1ZSkpICsgIikiOworICAg
ICAgICAgIGNhc2UgIlJlZ0V4cCI6CisgICAgICAgICAgICByZXR1cm4gUmVnRXhwUHJvdG90eXBl
VG9TdHJpbmcuY2FsbCh2YWx1ZSk7CisgICAgICAgICAgY2FzZSAiQXJyYXkiOgorICAgICAgICAg
ICAgdmFyIG1hcHBlZCA9IEFycmF5UHJvdG90eXBlTWFwLmNhbGwoCisgICAgICAgICAgICAgICAg
dmFsdWUsIHByZXR0eVByaW50ZWRBcnJheUVsZW1lbnQpOworICAgICAgICAgICAgdmFyIGpvaW5l
ZCA9IEFycmF5UHJvdG90eXBlSm9pbi5jYWxsKG1hcHBlZCwgIiwiKTsKKyAgICAgICAgICAgIHJl
dHVybiAiWyIgKyBqb2luZWQgKyAiXSI7CisgICAgICAgICAgY2FzZSAiVWludDhBcnJheSI6Cisg
ICAgICAgICAgY2FzZSAiSW50OEFycmF5IjoKKyAgICAgICAgICBjYXNlICJJbnQxNkFycmF5IjoK
KyAgICAgICAgICBjYXNlICJVaW50MTZBcnJheSI6CisgICAgICAgICAgY2FzZSAiVWludDMyQXJy
YXkiOgorICAgICAgICAgIGNhc2UgIkludDMyQXJyYXkiOgorICAgICAgICAgIGNhc2UgIkZsb2F0
MzJBcnJheSI6CisgICAgICAgICAgY2FzZSAiRmxvYXQ2NEFycmF5IjoKKyAgICAgICAgICAgIHZh
ciBqb2luZWQgPSBBcnJheVByb3RvdHlwZUpvaW4uY2FsbCh2YWx1ZSwgIiwiKTsKKyAgICAgICAg
ICAgIHJldHVybiBvYmplY3RDbGFzcyArICIoWyIgKyBqb2luZWQgKyAiXSkiOworICAgICAgICAg
IGNhc2UgIk9iamVjdCI6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIG9iamVjdENsYXNzICsgIigiICsgU3RyaW5nKHZhbHVlKSArICIp
IjsKKyAgICAgICAgfQorICAgICAgICAvLyBjbGFzc09mKCkgcmV0dXJuZWQgIk9iamVjdCIuCisg
ICAgICAgIHZhciBuYW1lID0gdmFsdWUuY29uc3RydWN0b3IubmFtZTsKKyAgICAgICAgaWYgKG5h
bWUpIHJldHVybiBuYW1lICsgIigpIjsKKyAgICAgICAgcmV0dXJuICJPYmplY3QoKSI7CisgICAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gIi0tIHVua25vd24gdmFsdWUgLS0iOworICAgIH0K
KyAgfQorCisKKyAgZnVuY3Rpb24gcHJldHR5UHJpbnRlZEFycmF5RWxlbWVudCh2YWx1ZSwgaW5k
ZXgsIGFycmF5KSB7CisgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShpbmRleCBpbiBh
cnJheSkpIHJldHVybiAiIjsKKyAgICByZXR1cm4gcHJldHR5UHJpbnRlZCh2YWx1ZSk7CisgIH0K
KworCisgIGZhaWxXaXRoTWVzc2FnZSA9IGZ1bmN0aW9uIGZhaWxXaXRoTWVzc2FnZShtZXNzYWdl
KSB7CisgICAgdGhyb3cgbmV3IE1qc1VuaXRBc3NlcnRpb25FcnJvcihtZXNzYWdlKTsKKyAgfQor
CisgIGZvcm1hdEZhaWx1cmVUZXh0ID0gZnVuY3Rpb24oZXhwZWN0ZWRUZXh0LCBmb3VuZCwgbmFt
ZV9vcHQpIHsKKyAgICB2YXIgbWVzc2FnZSA9ICJGYWlsIiArICJ1cmUiOworICAgIGlmIChuYW1l
X29wdCkgeworICAgICAgLy8gRml4IHRoaXMgd2hlbiB3ZSBkaXRjaCB0aGUgb2xkIHRlc3QgcnVu
bmVyLgorICAgICAgbWVzc2FnZSArPSAiICgiICsgbmFtZV9vcHQgKyAiKSI7CisgICAgfQorCisg
ICAgdmFyIGZvdW5kVGV4dCA9IHByZXR0eVByaW50ZWQoZm91bmQpOworICAgIGlmIChleHBlY3Rl
ZFRleHQubGVuZ3RoIDw9IDQwICYmIGZvdW5kVGV4dC5sZW5ndGggPD0gNDApIHsKKyAgICAgIG1l
c3NhZ2UgKz0gIjogZXhwZWN0ZWQgPCIgKyBleHBlY3RlZFRleHQgKyAiPiBmb3VuZCA8IiArIGZv
dW5kVGV4dCArICI+IjsKKyAgICB9IGVsc2UgeworICAgICAgbWVzc2FnZSArPSAiOlxuZXhwZWN0
ZWQ6XG4iICsgZXhwZWN0ZWRUZXh0ICsgIlxuZm91bmQ6XG4iICsgZm91bmRUZXh0OworICAgIH0K
KyAgICByZXR1cm4gbWVzc2FnZTsKKyAgfQorCisgIGZ1bmN0aW9uIGZhaWwoZXhwZWN0ZWRUZXh0
LCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgICByZXR1cm4gZmFpbFdpdGhNZXNzYWdlKGZvcm1hdEZh
aWx1cmVUZXh0KGV4cGVjdGVkVGV4dCwgZm91bmQsIG5hbWVfb3B0KSk7CisgIH0KKworCisgIGZ1
bmN0aW9uIGRlZXBPYmplY3RFcXVhbHMoYSwgYikgeworICAgIHZhciBhUHJvcHMgPSBPYmplY3Qu
a2V5cyhhKTsKKyAgICBhUHJvcHMuc29ydCgpOworICAgIHZhciBiUHJvcHMgPSBPYmplY3Qua2V5
cyhiKTsKKyAgICBiUHJvcHMuc29ydCgpOworICAgIGlmICghZGVlcEVxdWFscyhhUHJvcHMsIGJQ
cm9wcykpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBhUHJvcHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmICghZGVlcEVxdWFscyhhW2FQcm9w
c1tpXV0sIGJbYVByb3BzW2ldXSkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisKKyAgZGVlcEVxdWFscyA9IGZ1bmN0aW9u
IGRlZXBFcXVhbHMoYSwgYikgeworICAgIGlmIChhID09PSBiKSB7CisgICAgICAvLyBDaGVjayBm
b3IgLTAuCisgICAgICBpZiAoYSA9PT0gMCkgcmV0dXJuICgxIC8gYSkgPT09ICgxIC8gYik7Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikg
cmV0dXJuIGZhbHNlOworICAgIGlmICh0eXBlb2YgYSA9PT0gIm51bWJlciIpIHJldHVybiBpc05h
TihhKSAmJiBpc05hTihiKTsKKyAgICBpZiAodHlwZW9mIGEgIT09ICJvYmplY3QiICYmIHR5cGVv
ZiBhICE9PSAiZnVuY3Rpb24iKSByZXR1cm4gZmFsc2U7CisgICAgLy8gTmVpdGhlciBhIG5vciBi
IGlzIHByaW1pdGl2ZS4KKyAgICB2YXIgb2JqZWN0Q2xhc3MgPSBjbGFzc09mKGEpOworICAgIGlm
IChvYmplY3RDbGFzcyAhPT0gY2xhc3NPZihiKSkgcmV0dXJuIGZhbHNlOworICAgIGlmIChvYmpl
Y3RDbGFzcyA9PT0gIlJlZ0V4cCIpIHsKKyAgICAgIC8vIEZvciBSZWdFeHAsIGp1c3QgY29tcGFy
ZSBwYXR0ZXJuIGFuZCBmbGFncyB1c2luZyBpdHMgdG9TdHJpbmcuCisgICAgICByZXR1cm4gUmVn
RXhwUHJvdG90eXBlVG9TdHJpbmcuY2FsbChhKSA9PT0KKyAgICAgICAgICAgICBSZWdFeHBQcm90
b3R5cGVUb1N0cmluZy5jYWxsKGIpOworICAgIH0KKyAgICAvLyBGdW5jdGlvbnMgYXJlIG9ubHkg
aWRlbnRpY2FsIHRvIHRoZW1zZWx2ZXMuCisgICAgaWYgKG9iamVjdENsYXNzID09PSAiRnVuY3Rp
b24iKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdENsYXNzID09PSAiQXJyYXkiKSB7Cisg
ICAgICB2YXIgZWxlbWVudENvdW50ID0gMDsKKyAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5n
dGgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmICghZGVlcEVxdWFscyhhW2ldLCBi
W2ldKSkgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGlmIChvYmplY3RDbGFzcyA9PT0gIlN0cmluZyIgfHwgb2JqZWN0Q2xhc3MgPT09ICJOdW1i
ZXIiIHx8CisgICAgICBvYmplY3RDbGFzcyA9PT0gIkJpZ0ludCIgfHwgb2JqZWN0Q2xhc3MgPT09
ICJCb29sZWFuIiB8fAorICAgICAgb2JqZWN0Q2xhc3MgPT09ICJEYXRlIikgeworICAgICAgaWYg
KFZhbHVlT2YoYSkgIT09IFZhbHVlT2YoYikpIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIGRlZXBPYmplY3RFcXVhbHMoYSwgYik7CisgIH0KKworICBhc3NlcnRTYW1lID0gZnVuY3Rp
b24gYXNzZXJ0U2FtZShleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAgaWYgKE9iamVj
dC5pcyhleHBlY3RlZCwgZm91bmQpKSByZXR1cm47CisgICAgZmFpbChwcmV0dHlQcmludGVkKGV4
cGVjdGVkKSwgZm91bmQsIG5hbWVfb3B0KTsKKyAgfTsKKworICBhc3NlcnROb3RTYW1lID0gZnVu
Y3Rpb24gYXNzZXJ0Tm90U2FtZShleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAgaWYg
KCFPYmplY3QuaXMoZXhwZWN0ZWQsIGZvdW5kKSkgcmV0dXJuOworICAgIGZhaWwoIm5vdCBzYW1l
IGFzICIgKyBwcmV0dHlQcmludGVkKGV4cGVjdGVkKSwgZm91bmQsIG5hbWVfb3B0KTsKKyAgfQor
CisgIGFzc2VydEVxdWFscyA9IGZ1bmN0aW9uIGFzc2VydEVxdWFscyhleHBlY3RlZCwgZm91bmQs
IG5hbWVfb3B0KSB7CisgICAgaWYgKCFkZWVwRXF1YWxzKGZvdW5kLCBleHBlY3RlZCkpIHsKKyAg
ICAgIGZhaWwocHJldHR5UHJpbnRlZChleHBlY3RlZCksIGZvdW5kLCBuYW1lX29wdCk7CisgICAg
fQorICB9OworCisgIGFzc2VydE5vdEVxdWFscyA9IGZ1bmN0aW9uIGFzc2VydE5vdEVxdWFscyhl
eHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAgaWYgKGRlZXBFcXVhbHMoZm91bmQsIGV4
cGVjdGVkKSkgeworICAgICAgZmFpbCgibm90IGVxdWFscyB0byAiICsgcHJldHR5UHJpbnRlZChl
eHBlY3RlZCksIGZvdW5kLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0RXF1
YWxzRGVsdGEgPQorICAgICAgZnVuY3Rpb24gYXNzZXJ0RXF1YWxzRGVsdGEoZXhwZWN0ZWQsIGZv
dW5kLCBkZWx0YSwgbmFtZV9vcHQpIHsKKyAgICBpZiAoTWF0aC5hYnMoZXhwZWN0ZWQgLSBmb3Vu
ZCkgPiBkZWx0YSkgeworICAgICAgZmFpbChwcmV0dHlQcmludGVkKGV4cGVjdGVkKSArICIgKy0g
IiArIHByZXR0eVByaW50ZWQoZGVsdGEpLCBmb3VuZCwgbmFtZV9vcHQpOworICAgIH0KKyAgfTsK
KworCisgIGFzc2VydEFycmF5RXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0QXJyYXlFcXVhbHMoZXhw
ZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCkgeworICAgIHZhciBzdGFydCA9ICIiOworICAgIGlmIChu
YW1lX29wdCkgeworICAgICAgc3RhcnQgPSBuYW1lX29wdCArICIgLSAiOworICAgIH0KKyAgICBh
c3NlcnRFcXVhbHMoZXhwZWN0ZWQubGVuZ3RoLCBmb3VuZC5sZW5ndGgsIHN0YXJ0ICsgImFycmF5
IGxlbmd0aCIpOworICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IGZvdW5kLmxlbmd0aCkgewor
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZC5sZW5ndGg7ICsraSkgeworICAgICAg
ICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRbaV0sIGZvdW5kW2ldLAorICAgICAgICAgICAgICAgICAg
ICAgc3RhcnQgKyAiYXJyYXkgZWxlbWVudCBhdCBpbmRleCAiICsgaSk7CisgICAgICB9CisgICAg
fQorICB9OworCisKKyAgYXNzZXJ0UHJvcGVydGllc0VxdWFsID0gZnVuY3Rpb24gYXNzZXJ0UHJv
cGVydGllc0VxdWFsKGV4cGVjdGVkLCBmb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfb3B0KSB7CisgICAgLy8gQ2hlY2sg
cHJvcGVydGllcyBvbmx5LgorICAgIGlmICghZGVlcE9iamVjdEVxdWFscyhleHBlY3RlZCwgZm91
bmQpKSB7CisgICAgICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpOworICAgIH0KKyAg
fTsKKworCisgIGFzc2VydFRvU3RyaW5nRXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0VG9TdHJpbmdF
cXVhbHMoZXhwZWN0ZWQsIGZvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5hbWVfb3B0KSB7CisgICAgaWYgKGV4cGVjdGVkICE9PSBT
dHJpbmcoZm91bmQpKSB7CisgICAgICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpOwor
ICAgIH0KKyAgfTsKKworCisgIGFzc2VydFRydWUgPSBmdW5jdGlvbiBhc3NlcnRUcnVlKHZhbHVl
LCBuYW1lX29wdCkgeworICAgIGFzc2VydEVxdWFscyh0cnVlLCB2YWx1ZSwgbmFtZV9vcHQpOwor
ICB9OworCisKKyAgYXNzZXJ0RmFsc2UgPSBmdW5jdGlvbiBhc3NlcnRGYWxzZSh2YWx1ZSwgbmFt
ZV9vcHQpIHsKKyAgICBhc3NlcnRFcXVhbHMoZmFsc2UsIHZhbHVlLCBuYW1lX29wdCk7CisgIH07
CisKKworICBhc3NlcnROdWxsID0gZnVuY3Rpb24gYXNzZXJ0TnVsbCh2YWx1ZSwgbmFtZV9vcHQp
IHsKKyAgICBpZiAodmFsdWUgIT09IG51bGwpIHsKKyAgICAgIGZhaWwoIm51bGwiLCB2YWx1ZSwg
bmFtZV9vcHQpOworICAgIH0KKyAgfTsKKworCisgIGFzc2VydE5vdE51bGwgPSBmdW5jdGlvbiBh
c3NlcnROb3ROdWxsKHZhbHVlLCBuYW1lX29wdCkgeworICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkg
eworICAgICAgZmFpbCgibm90IG51bGwiLCB2YWx1ZSwgbmFtZV9vcHQpOworICAgIH0KKyAgfTsK
KworICBmdW5jdGlvbiBleGVjdXRlQ29kZShjb2RlKSB7CisgICAgaWYgKHR5cGVvZiBjb2RlID09
PSAnZnVuY3Rpb24nKSAgcmV0dXJuIGNvZGUoKTsKKyAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdz
dHJpbmcnKSByZXR1cm4gZXZhbChjb2RlKTsKKyAgICBmYWlsV2l0aE1lc3NhZ2UoCisgICAgICAg
ICdHaXZlbiBjb2RlIGlzIG5laXRoZXIgZnVuY3Rpb24gbm9yIHN0cmluZywgYnV0ICcgKyAodHlw
ZW9mIGNvZGUpICsKKyAgICAgICAgJzogPCcgKyBwcmV0dHlQcmludGVkKGNvZGUpICsgJz4nKTsK
KyAgfQorCisgIGZ1bmN0aW9uIGNoZWNrRXhjZXB0aW9uKGUsIHR5cGVfb3B0LCBjYXVzZV9vcHQp
IHsKKyAgICBpZiAodHlwZV9vcHQgIT09IHVuZGVmaW5lZCkgeworICAgICAgYXNzZXJ0RXF1YWxz
KCdmdW5jdGlvbicsIHR5cGVvZiB0eXBlX29wdCk7CisgICAgICBhc3NlcnRJbnN0YW5jZW9mKGUs
IHR5cGVfb3B0KTsKKyAgICB9CisgICAgaWYgKFJlZ0V4cCAhPT0gdW5kZWZpbmVkICYmIGNhdXNl
X29wdCBpbnN0YW5jZW9mIFJlZ0V4cCkgeworICAgICAgYXNzZXJ0TWF0Y2hlcyhjYXVzZV9vcHQs
IGUubWVzc2FnZSwgJ0Vycm9yIG1lc3NhZ2UnKTsKKyAgICB9IGVsc2UgaWYgKGNhdXNlX29wdCAh
PT0gdW5kZWZpbmVkKSB7CisgICAgICBhc3NlcnRFcXVhbHMoY2F1c2Vfb3B0LCBlLm1lc3NhZ2Us
ICdFcnJvciBtZXNzYWdlJyk7CisgICAgfQorICB9CisKKyAgYXNzZXJ0VGhyb3dzID0gZnVuY3Rp
b24gYXNzZXJ0VGhyb3dzKGNvZGUsIHR5cGVfb3B0LCBjYXVzZV9vcHQpIHsKKyAgICBpZiAoYXJn
dW1lbnRzLmxlbmd0aCA+IDEgJiYgdHlwZV9vcHQgPT09IHVuZGVmaW5lZCkgeworICAgICAgZmFp
bFdpdGhNZXNzYWdlKCdpbnZhbGlkIHVzZSBvZiBhc3NlcnRUaHJvd3MsIHVua25vd24gdHlwZV9v
cHQgZ2l2ZW4nKTsKKyAgICB9CisgICAgaWYgKHR5cGVfb3B0ICE9PSB1bmRlZmluZWQgJiYgdHlw
ZW9mIHR5cGVfb3B0ICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICBmYWlsV2l0aE1lc3NhZ2UoCisg
ICAgICAgICAgJ2ludmFsaWQgdXNlIG9mIGFzc2VydFRocm93cywgbWF5YmUgeW91IHdhbnQgYXNz
ZXJ0VGhyb3dzRXF1YWxzJyk7CisgICAgfQorICAgIHRyeSB7CisgICAgICBleGVjdXRlQ29kZShj
b2RlKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBjaGVja0V4Y2VwdGlvbihlLCB0eXBlX29w
dCwgY2F1c2Vfb3B0KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgbGV0IG1zZyA9ICdEaWQg
bm90IHRocm93IGV4Y2VwdGlvbic7CisgICAgaWYgKHR5cGVfb3B0ICE9PSB1bmRlZmluZWQgJiYg
dHlwZV9vcHQubmFtZSAhPT0gdW5kZWZpbmVkKQorICAgICAgbXNnICs9ICcsIGV4cGVjdGVkICcg
KyB0eXBlX29wdC5uYW1lOworICAgIGZhaWxXaXRoTWVzc2FnZShtc2cpOworICB9OworCisgIGFz
c2VydFRocm93c0VxdWFscyA9IGZ1bmN0aW9uIGFzc2VydFRocm93c0VxdWFscyhmdW4sIHZhbCkg
eworICAgIHRyeSB7CisgICAgICBmdW4oKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBhc3Nl
cnRTYW1lKHZhbCwgZSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZhaWxXaXRoTWVzc2Fn
ZSgnRGlkIG5vdCB0aHJvdyBleGNlcHRpb24sIGV4cGVjdGVkICcgKyBwcmV0dHlQcmludGVkKHZh
bCkpOworICB9OworCisgIGFzc2VydFRocm93c0FzeW5jID0gZnVuY3Rpb24gYXNzZXJ0VGhyb3dz
QXN5bmMocHJvbWlzZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkgeworICAgIGlmIChhcmd1bWVudHMu
bGVuZ3RoID4gMSAmJiB0eXBlX29wdCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICBmYWlsV2l0aE1l
c3NhZ2UoJ2ludmFsaWQgdXNlIG9mIGFzc2VydFRocm93cywgdW5rbm93biB0eXBlX29wdCBnaXZl
bicpOworICAgIH0KKyAgICBpZiAodHlwZV9vcHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdHlw
ZV9vcHQgIT09ICdmdW5jdGlvbicpIHsKKyAgICAgIGZhaWxXaXRoTWVzc2FnZSgKKyAgICAgICAg
ICAnaW52YWxpZCB1c2Ugb2YgYXNzZXJ0VGhyb3dzLCBtYXliZSB5b3Ugd2FudCBhc3NlcnRUaHJv
d3NFcXVhbHMnKTsKKyAgICB9CisgICAgbGV0IG1zZyA9ICdQcm9taXNlIGRpZCBub3QgdGhyb3cg
ZXhjZXB0aW9uJzsKKyAgICBpZiAodHlwZV9vcHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlX29wdC5u
YW1lICE9PSB1bmRlZmluZWQpCisgICAgICBtc2cgKz0gJywgZXhwZWN0ZWQgJyArIHR5cGVfb3B0
Lm5hbWU7CisgICAgcmV0dXJuIGFzc2VydFByb21pc2VSZXN1bHQoCisgICAgICAgIHByb21pc2Us
CisgICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIHRocm93IHRoZSBlcnJvciBhZ2FpbiB0byBn
ZXQgb3V0IG9mIHRoZSBwcm9taXNlCisgICAgICAgIC8vIGNoYWluLgorICAgICAgICByZXMgPT4g
c2V0VGltZW91dChfID0+IGZhaWwoJzx0aHJvdz4nLCByZXMsIG1zZyksIDApLAorICAgICAgICBl
ID0+IGNoZWNrRXhjZXB0aW9uKGUsIHR5cGVfb3B0LCBjYXVzZV9vcHQpKTsKKyAgfTsKKworICBh
c3NlcnRJbnN0YW5jZW9mID0gZnVuY3Rpb24gYXNzZXJ0SW5zdGFuY2VvZihvYmosIHR5cGUpIHsK
KyAgICBpZiAoIShvYmogaW5zdGFuY2VvZiB0eXBlKSkgeworICAgICAgdmFyIGFjdHVhbFR5cGVO
YW1lID0gbnVsbDsKKyAgICAgIHZhciBhY3R1YWxDb25zdHJ1Y3RvciA9IG9iaiAmJiBPYmplY3Qu
Z2V0UHJvdG90eXBlT2Yob2JqKS5jb25zdHJ1Y3RvcjsKKyAgICAgIGlmICh0eXBlb2YgYWN0dWFs
Q29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgYWN0dWFsVHlwZU5hbWUgPSBh
Y3R1YWxDb25zdHJ1Y3Rvci5uYW1lIHx8IFN0cmluZyhhY3R1YWxDb25zdHJ1Y3Rvcik7CisgICAg
ICB9CisgICAgICBmYWlsV2l0aE1lc3NhZ2UoCisgICAgICAgICAgJ09iamVjdCA8JyArIHByZXR0
eVByaW50ZWQob2JqKSArICc+IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiA8JyArCisgICAgICAgICAg
KHR5cGUubmFtZSB8fCB0eXBlKSArICc+JyArCisgICAgICAgICAgKGFjdHVhbFR5cGVOYW1lID8g
JyBidXQgb2YgPCcgKyBhY3R1YWxUeXBlTmFtZSArICc+JyA6ICcnKSk7CisgICAgfQorICB9Owor
CisgIGFzc2VydERvZXNOb3RUaHJvdyA9IGZ1bmN0aW9uIGFzc2VydERvZXNOb3RUaHJvdyhjb2Rl
LCBuYW1lX29wdCkgeworICAgIHRyeSB7CisgICAgICBleGVjdXRlQ29kZShjb2RlKTsKKyAgICB9
IGNhdGNoIChlKSB7CisgICAgICBpZiAoZSBpbnN0YW5jZW9mIE1qc1VuaXRBc3NlcnRpb25FcnJv
cikgdGhyb3cgZTsKKyAgICAgIGZhaWxXaXRoTWVzc2FnZSgidGhyZXcgYW4gZXhjZXB0aW9uOiAi
ICsgKGUubWVzc2FnZSB8fCBlKSk7CisgICAgfQorICB9OworCisgIGFzc2VydFVucmVhY2hhYmxl
ID0gZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUobmFtZV9vcHQpIHsKKyAgICAvLyBGaXggdGhp
cyB3aGVuIHdlIGRpdGNoIHRoZSBvbGQgdGVzdCBydW5uZXIuCisgICAgdmFyIG1lc3NhZ2UgPSAi
RmFpbCIgKyAidXJlOiB1bnJlYWNoYWJsZSI7CisgICAgaWYgKG5hbWVfb3B0KSB7CisgICAgICBt
ZXNzYWdlICs9ICIgLSAiICsgbmFtZV9vcHQ7CisgICAgfQorICAgIGZhaWxXaXRoTWVzc2FnZSht
ZXNzYWdlKTsKKyAgfTsKKworICBhc3NlcnRDb250YWlucyA9IGZ1bmN0aW9uKHN1YiwgdmFsdWUs
IG5hbWVfb3B0KSB7CisgICAgaWYgKHZhbHVlID09IG51bGwgPyAoc3ViICE9IG51bGwpIDogdmFs
dWUuaW5kZXhPZihzdWIpID09IC0xKSB7CisgICAgICBmYWlsKCJjb250YWlucyAnIiArIFN0cmlu
ZyhzdWIpICsgIiciLCB2YWx1ZSwgbmFtZV9vcHQpOworICAgIH0KKyAgfTsKKworICBhc3NlcnRN
YXRjaGVzID0gZnVuY3Rpb24ocmVnZXhwLCBzdHIsIG5hbWVfb3B0KSB7CisgICAgaWYgKCEocmVn
ZXhwIGluc3RhbmNlb2YgUmVnRXhwKSkgeworICAgICAgcmVnZXhwID0gbmV3IFJlZ0V4cChyZWdl
eHApOworICAgIH0KKyAgICBpZiAoIXN0ci5tYXRjaChyZWdleHApKSB7CisgICAgICBmYWlsKCJz
aG91bGQgbWF0Y2ggJyIgKyByZWdleHAgKyAiJyIsIHN0ciwgbmFtZV9vcHQpOworICAgIH0KKyAg
fTsKKworICBmdW5jdGlvbiBjb25jYXRlbmF0ZUVycm9ycyhzdGFjaywgZXhjZXB0aW9uKSB7Cisg
ICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiBkb2VzIG5vdCBjb250YWluIGEgc3RhY2sgdHJhY2UsIHdy
YXAgaXQgaW4gYSBuZXcgRXJyb3IuCisgICAgaWYgKCFleGNlcHRpb24uc3RhY2spIGV4Y2VwdGlv
biA9IG5ldyBFcnJvcihleGNlcHRpb24pOworCisgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiBhbHJl
YWR5IHByb3ZpZGVzIGEgc3BlY2lhbCBzdGFjayB0cmFjZSwgd2UgZG8gbm90IG1vZGlmeQorICAg
IC8vIGl0LgorICAgIGlmICh0eXBlb2YgZXhjZXB0aW9uLnN0YWNrICE9PSAnc3RyaW5nJykgewor
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgICB9CisgICAgZXhjZXB0aW9uLnN0YWNrID0gc3Rh
Y2sgKyAnXG5cbicgKyBleGNlcHRpb24uc3RhY2s7CisgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAg
fQorCisgIGFzc2VydFByb21pc2VSZXN1bHQgPSBmdW5jdGlvbihwcm9taXNlLCBzdWNjZXNzLCBm
YWlsKSB7CisgICAgaWYgKHN1Y2Nlc3MgIT09IHVuZGVmaW5lZCkgYXNzZXJ0RXF1YWxzKCdmdW5j
dGlvbicsIHR5cGVvZiBzdWNjZXNzKTsKKyAgICBpZiAoZmFpbCAhPT0gdW5kZWZpbmVkKSBhc3Nl
cnRFcXVhbHMoJ2Z1bmN0aW9uJywgdHlwZW9mIGZhaWwpOworICAgIGFzc2VydEluc3RhbmNlb2Yo
cHJvbWlzZSwgUHJvbWlzZSk7CisgICAgY29uc3Qgc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNr
OworCisgICAgdmFyIHRlc3RfcHJvbWlzZSA9IHByb21pc2UudGhlbigKKyAgICAgICAgcmVzdWx0
ID0+IHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKC0tcHJvbWlzZVRlc3RDb3Vu
dCA9PSAwKSB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIGlmIChzdWNjZXNz
ICE9PSB1bmRlZmluZWQpIHN1Y2Nlc3MocmVzdWx0KTsKKyAgICAgICAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgICAgICAvLyBVc2Ugc2V0VGltZW91dCB0byB0aHJvdyB0aGUgZXJyb3IgYWdhaW4g
dG8gZ2V0IG91dCBvZiB0aGUgcHJvbWlzZQorICAgICAgICAgICAgLy8gY2hhaW4uCisgICAgICAg
ICAgICBzZXRUaW1lb3V0KF8gPT4geworICAgICAgICAgICAgICB0aHJvdyBjb25jYXRlbmF0ZUVy
cm9ycyhzdGFjaywgZSk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICB9CisgICAgICAg
IH0sCisgICAgICAgIHJlc3VsdCA9PiB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlm
ICgtLXByb21pc2VUZXN0Q291bnQgPT0gMCkgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
ICAgICAgICBpZiAoZmFpbCA9PT0gdW5kZWZpbmVkKSB0aHJvdyByZXN1bHQ7CisgICAgICAgICAg
ICBmYWlsKHJlc3VsdCk7CisgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgLy8g
VXNlIHNldFRpbWVvdXQgdG8gdGhyb3cgdGhlIGVycm9yIGFnYWluIHRvIGdldCBvdXQgb2YgdGhl
IHByb21pc2UKKyAgICAgICAgICAgIC8vIGNoYWluLgorICAgICAgICAgICAgc2V0VGltZW91dChf
ID0+IHsKKyAgICAgICAgICAgICAgdGhyb3cgY29uY2F0ZW5hdGVFcnJvcnMoc3RhY2ssIGUpOwor
ICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgIGlmICgh
cHJvbWlzZVRlc3RDaGFpbikgcHJvbWlzZVRlc3RDaGFpbiA9IFByb21pc2UucmVzb2x2ZSgpOwor
ICAgIC8vIHdhaXRVbnRpbERvbmUgaXMgaWRlbXBvdGVudC4KKyAgICB0ZXN0UnVubmVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICArK3Byb21pc2VUZXN0Q291bnQ7CisgICAgcmV0dXJuIHByb21pc2VU
ZXN0Q2hhaW4udGhlbih0ZXN0X3Byb21pc2UpOworICB9OworCisgIHZhciBPcHRpbWl6YXRpb25T
dGF0dXNJbXBsID0gdW5kZWZpbmVkOworCisgIHZhciBPcHRpbWl6YXRpb25TdGF0dXMgPSBmdW5j
dGlvbihmdW4pIHsKKyAgICBpZiAoT3B0aW1pemF0aW9uU3RhdHVzSW1wbCA9PT0gdW5kZWZpbmVk
KSB7CisgICAgICB0cnkgeworICAgICAgICBPcHRpbWl6YXRpb25TdGF0dXNJbXBsID0gbmV3IEZ1
bmN0aW9uKAorICAgICAgICAgICAgImZ1biIsICJyZXR1cm4gJUdldE9wdGltaXphdGlvblN0YXR1
cyhmdW4pOyIpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
Im5hdGl2ZXMgc3ludGF4IG5vdCBhbGxvd2VkIik7CisgICAgICB9CisgICAgfQorICAgIHJldHVy
biBPcHRpbWl6YXRpb25TdGF0dXNJbXBsKGZ1bik7CisgIH0KKworICBhc3NlcnRVbm9wdGltaXpl
ZCA9IGZ1bmN0aW9uIGFzc2VydFVub3B0aW1pemVkKAorICAgICAgZnVuLCBuYW1lX29wdCwgc2tp
cF9pZl9tYXliZV9kZW9wdGVkID0gdHJ1ZSkgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1p
emF0aW9uU3RhdHVzKGZ1bik7CisgICAgLy8gVGVzdHMgdGhhdCB1c2UgYXNzZXJ0VW5vcHRpbWl6
ZWQoKSBkbyBub3QgbWFrZSBzZW5zZSBpZiAtLWFsd2F5cy1vcHQKKyAgICAvLyBvcHRpb24gaXMg
cHJvdmlkZWQuIFN1Y2ggdGVzdHMgbXVzdCBhZGQgLS1uby1hbHdheXMtb3B0IHRvIGZsYWdzIGNv
bW1lbnQuCisgICAgYXNzZXJ0RmFsc2UoKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1
cy5rQWx3YXlzT3B0aW1pemUpICE9PSAwLAorICAgICAgICAgICAgICAgICJ0ZXN0IGRvZXMgbm90
IG1ha2Ugc2Vuc2Ugd2l0aCAtLWFsd2F5cy1vcHQiKTsKKyAgICBhc3NlcnRUcnVlKChvcHRfc3Rh
dHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAwLCBuYW1lX29wdCk7
CisgICAgaWYgKHNraXBfaWZfbWF5YmVfZGVvcHRlZCAmJgorICAgICAgICAob3B0X3N0YXR1cyAm
IFY4T3B0aW1pemF0aW9uU3RhdHVzLmtNYXliZURlb3B0ZWQpICE9PSAwKSB7CisgICAgICAvLyBX
aGVuIC0tZGVvcHQtZXZlcnktbi10aW1lcyBmbGFnIGlzIHNwZWNpZmllZCBpdCdzIG5vIGxvbmdl
ciBndWFyYW50ZWVkCisgICAgICAvLyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgc3RpbGwg
ZGVvcHRpbWl6ZWQsIHNvIGtlZXAgcnVubmluZyB0aGUgdGVzdAorICAgICAgLy8gdG8gc3RyZXNz
IHRlc3QgdGhlIGRlb3B0aW1pemVyLgorICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIgaXNf
b3B0aW1pemVkID0gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rT3B0aW1pemVk
KSAhPT0gMDsKKyAgICBhc3NlcnRGYWxzZShpc19vcHRpbWl6ZWQsIG5hbWVfb3B0KTsKKyAgfQor
CisgIGFzc2VydE9wdGltaXplZCA9IGZ1bmN0aW9uIGFzc2VydE9wdGltaXplZCgKKyAgICAgIGZ1
biwgbmFtZV9vcHQsIHNraXBfaWZfbWF5YmVfZGVvcHRlZCA9IHRydWUpIHsKKyAgICB2YXIgb3B0
X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1cyhmdW4pOworICAgIC8vIFRlc3RzIHRoYXQgdXNl
IGFzc2VydE9wdGltaXplZCgpIGRvIG5vdCBtYWtlIHNlbnNlIGZvciBMaXRlIG1vZGUgd2hlcmUK
KyAgICAvLyBvcHRpbWl6YXRpb24gaXMgYWx3YXlzIGRpc2FibGVkLCBleHBsaWNpdGx5IGV4aXQg
dGhlIHRlc3Qgd2l0aCBhIHdhcm5pbmcuCisgICAgaWYgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXph
dGlvblN0YXR1cy5rTGl0ZU1vZGUpIHsKKyAgICAgIHByaW50KCJXYXJuaW5nOiBUZXN0IHVzZXMg
YXNzZXJ0T3B0aW1pemVkIGluIExpdGUgbW9kZSwgc2tpcHBpbmcgdGVzdC4iKTsKKyAgICAgIHRl
c3RSdW5uZXIucXVpdCgwKTsKKyAgICB9CisgICAgLy8gVGVzdHMgdGhhdCB1c2UgYXNzZXJ0T3B0
aW1pemVkKCkgZG8gbm90IG1ha2Ugc2Vuc2UgaWYgLS1uby1vcHQKKyAgICAvLyBvcHRpb24gaXMg
cHJvdmlkZWQuIFN1Y2ggdGVzdHMgbXVzdCBhZGQgLS1vcHQgdG8gZmxhZ3MgY29tbWVudC4KKyAg
ICBhc3NlcnRGYWxzZSgob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtOZXZlck9w
dGltaXplKSAhPT0gMCwKKyAgICAgICAgICAgICAgICAidGVzdCBkb2VzIG5vdCBtYWtlIHNlbnNl
IHdpdGggLS1uby1vcHQiKTsKKyAgICBhc3NlcnRUcnVlKAorICAgICAgICAob3B0X3N0YXR1cyAm
IFY4T3B0aW1pemF0aW9uU3RhdHVzLmtJc0Z1bmN0aW9uKSAhPT0gMCwKKyAgICAgICAgJ3Nob3Vs
ZCBiZSBhIGZ1bmN0aW9uOiAnICsgbmFtZV9vcHQpOworICAgIGlmIChza2lwX2lmX21heWJlX2Rl
b3B0ZWQgJiYKKyAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rTWF5
YmVEZW9wdGVkKSAhPT0gMCkgeworICAgICAgLy8gV2hlbiAtLWRlb3B0LWV2ZXJ5LW4tdGltZXMg
ZmxhZyBpcyBzcGVjaWZpZWQgaXQncyBubyBsb25nZXIgZ3VhcmFudGVlZAorICAgICAgLy8gdGhh
dCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIHN0aWxsIG9wdGltaXplZCwgc28ga2VlcCBydW5uaW5n
IHRoZSB0ZXN0CisgICAgICAvLyB0byBzdHJlc3MgdGVzdCB0aGUgZGVvcHRpbWl6ZXIuCisgICAg
ICByZXR1cm47CisgICAgfQorICAgIGFzc2VydFRydWUoCisgICAgICAgIChvcHRfc3RhdHVzICYg
VjhPcHRpbWl6YXRpb25TdGF0dXMua09wdGltaXplZCkgIT09IDAsCisgICAgICAgICdzaG91bGQg
YmUgb3B0aW1pemVkOiAnICsgbmFtZV9vcHQpOworICB9CisKKyAgaXNOZXZlck9wdGltaXplTGl0
ZU1vZGUgPSBmdW5jdGlvbiBpc05ldmVyT3B0aW1pemVMaXRlTW9kZSgpIHsKKyAgICB2YXIgb3B0
X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1cyh1bmRlZmluZWQsICIiKTsKKyAgICByZXR1cm4g
KG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rTGl0ZU1vZGUpICE9PSAwOworICB9
CisKKyAgaXNOZXZlck9wdGltaXplID0gZnVuY3Rpb24gaXNOZXZlck9wdGltaXplKCkgeworICAg
IHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKHVuZGVmaW5lZCwgIiIpOworICAg
IHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtOZXZlck9wdGltaXpl
KSAhPT0gMDsKKyAgfQorCisgIGlzQWx3YXlzT3B0aW1pemUgPSBmdW5jdGlvbiBpc0Fsd2F5c09w
dGltaXplKCkgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKHVuZGVm
aW5lZCwgIiIpOworICAgIHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVz
LmtBbHdheXNPcHRpbWl6ZSkgIT09IDA7CisgIH0KKworICBpc0ludGVycHJldGVkID0gZnVuY3Rp
b24gaXNJbnRlcnByZXRlZChmdW4pIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGltaXphdGlv
blN0YXR1cyhmdW4sICIiKTsKKyAgICBhc3NlcnRUcnVlKChvcHRfc3RhdHVzICYgVjhPcHRpbWl6
YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAwLAorICAgICAgICAgICAgICAgIm5vdCBhIGZ1
bmN0aW9uIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMu
a09wdGltaXplZCkgPT09IDAgJiYKKyAgICAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXph
dGlvblN0YXR1cy5rSW50ZXJwcmV0ZWQpICE9PSAwOworICB9CisKKyAgaXNCYXNlbGluZSA9IGZ1
bmN0aW9uIGlzQmFzZWxpbmUoZnVuKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRp
b25TdGF0dXMoZnVuLCAiIik7CisgICAgYXNzZXJ0VHJ1ZSgob3B0X3N0YXR1cyAmIFY4T3B0aW1p
emF0aW9uU3RhdHVzLmtJc0Z1bmN0aW9uKSAhPT0gMCwKKyAgICAgICAgICAgICAgICJub3QgYSBm
dW5jdGlvbiIpOworICAgIHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVz
LmtPcHRpbWl6ZWQpID09PSAwICYmCisgICAgICAgICAgIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6
YXRpb25TdGF0dXMua0Jhc2VsaW5lKSAhPT0gMDsKKyAgfQorCisgIGlzVW5vcHRpbWl6ZWQgPSBm
dW5jdGlvbiBpc1Vub3B0aW1pemVkKGZ1bikgeworICAgIHJldHVybiBpc0ludGVycHJldGVkKGZ1
bikgfHwgaXNCYXNlbGluZShmdW4pOworICB9CisKKyAgaXNPcHRpbWl6ZWQgPSBmdW5jdGlvbiBp
c09wdGltaXplZChmdW4pIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1
cyhmdW4sICIiKTsKKyAgICBhc3NlcnRUcnVlKChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25T
dGF0dXMua0lzRnVuY3Rpb24pICE9PSAwLAorICAgICAgICAgICAgICAgIm5vdCBhIGZ1bmN0aW9u
Iik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua09wdGlt
aXplZCkgIT09IDA7CisgIH0KKworICBpc1R1cmJvRmFubmVkID0gZnVuY3Rpb24gaXNUdXJib0Zh
bm5lZChmdW4pIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1cyhmdW4s
ICIiKTsKKyAgICBhc3NlcnRUcnVlKChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMu
a0lzRnVuY3Rpb24pICE9PSAwLAorICAgICAgICAgICAgICAgIm5vdCBhIGZ1bmN0aW9uIik7Cisg
ICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua09wdGltaXplZCkg
IT09IDAgJiYKKyAgICAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5r
VHVyYm9GYW5uZWQpICE9PSAwOworICB9CisKKyAgLy8gQ3VzdG9tIFY4LXNwZWNpZmljIHN0YWNr
IHRyYWNlIGZvcm1hdHRlciB0aGF0IGlzIHRlbXBvcmFyaWx5IGluc3RhbGxlZCBvbgorICAvLyB0
aGUgRXJyb3Igb2JqZWN0LgorICBNanNVbml0QXNzZXJ0aW9uRXJyb3IucHJlcGFyZVN0YWNrVHJh
Y2UgPSBmdW5jdGlvbihlcnJvciwgc3RhY2spIHsKKyAgICAvLyBUcmlnZ2VyIGRlZmF1bHQgZm9y
bWF0dGluZyB3aXRoIHJlY3Vyc2lvbi4KKyAgICB0cnkgeworICAgICAgLy8gRmlsdGVyLW91dCBh
bGwgYnV0IHRoZSBmaXJzdCBtanN1bml0IGZyYW1lLgorICAgICAgbGV0IGZpbHRlcmVkU3RhY2sg
PSBbXTsKKyAgICAgIGxldCBpbk1qc3VuaXQgPSB0cnVlOworICAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCBzdGFjay5sZW5ndGg7IGkrKykgeworICAgICAgICBsZXQgZnJhbWUgPSBzdGFja1tpXTsK
KyAgICAgICAgaWYgKGluTWpzdW5pdCkgeworICAgICAgICAgIGxldCBmaWxlID0gZnJhbWUuZ2V0
RmlsZU5hbWUoKTsKKyAgICAgICAgICBpZiAoIWZpbGUgfHwgIWZpbGUuZW5kc1dpdGgoIm1qc3Vu
aXQuanMiKSkgeworICAgICAgICAgICAgaW5NanN1bml0ID0gZmFsc2U7CisgICAgICAgICAgICAv
LyBQdXNoIHRoZSBsYXN0IG1qc3VuaXQgZnJhbWUsIHR5cGljYWxseSBjb250YWluaW5nIHRoZSBh
c3NlcnRpb24KKyAgICAgICAgICAgIC8vIGZ1bmN0aW9uLgorICAgICAgICAgICAgaWYgKGkgPiAw
KSBBcnJheVByb3RvdHlwZVB1c2guY2FsbChmaWx0ZXJlZFN0YWNrLCBzdGFja1tpLTFdKTsKKyAg
ICAgICAgICAgIEFycmF5UHJvdG90eXBlUHVzaC5jYWxsKGZpbHRlcmVkU3RhY2ssIHN0YWNrW2ld
KTsKKyAgICAgICAgICB9CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
QXJyYXlQcm90b3R5cGVQdXNoLmNhbGwoZmlsdGVyZWRTdGFjaywgZnJhbWUpOworICAgICAgfQor
ICAgICAgc3RhY2sgPSBmaWx0ZXJlZFN0YWNrOworCisgICAgICAvLyBJbmZlciBmdW5jdGlvbiBu
YW1lcyBhbmQgY2FsY3VsYXRlIHttYXhfbmFtZV9sZW5ndGh9CisgICAgICBsZXQgbWF4X25hbWVf
bGVuZ3RoID0gMDsKKyAgICAgIEFycmF5UHJvdG90eXBlRm9yRWFjaC5jYWxsKHN0YWNrLCBlYWNo
ID0+IHsKKyAgICAgICAgbGV0IG5hbWUgPSBlYWNoLmdldEZ1bmN0aW9uTmFtZSgpOworICAgICAg
ICBpZiAobmFtZSA9PSBudWxsKSBuYW1lID0gIiI7CisgICAgICAgIGlmIChlYWNoLmlzRXZhbCgp
KSB7CisgICAgICAgICAgbmFtZSA9IG5hbWU7CisgICAgICAgIH0gZWxzZSBpZiAoZWFjaC5pc0Nv
bnN0cnVjdG9yKCkpIHsKKyAgICAgICAgICBuYW1lID0gIm5ldyAiICsgbmFtZTsKKyAgICAgICAg
fSBlbHNlIGlmIChlYWNoLmlzTmF0aXZlKCkpIHsKKyAgICAgICAgICBuYW1lID0gIm5hdGl2ZSAi
ICsgbmFtZTsKKyAgICAgICAgfSBlbHNlIGlmICghZWFjaC5pc1RvcGxldmVsKCkpIHsKKyAgICAg
ICAgICBuYW1lID0gZWFjaC5nZXRUeXBlTmFtZSgpICsgIi4iICsgbmFtZTsKKyAgICAgICAgfQor
ICAgICAgICBlYWNoLm5hbWUgPSBuYW1lOworICAgICAgICBtYXhfbmFtZV9sZW5ndGggPSBNYXRo
Lm1heChuYW1lLmxlbmd0aCwgbWF4X25hbWVfbGVuZ3RoKQorICAgICAgfSk7CisKKyAgICAgIC8v
IEZvcm1hdCBzdGFjayBmcmFtZXMuCisgICAgICBzdGFjayA9IEFycmF5UHJvdG90eXBlTWFwLmNh
bGwoc3RhY2ssIGVhY2ggPT4geworICAgICAgICBsZXQgZnJhbWUgPSAiICAgIGF0ICIgKyBlYWNo
Lm5hbWUucGFkRW5kKG1heF9uYW1lX2xlbmd0aCk7CisgICAgICAgIGxldCBmaWxlTmFtZSA9IGVh
Y2guZ2V0RmlsZU5hbWUoKTsKKyAgICAgICAgaWYgKGVhY2guaXNFdmFsKCkpIHJldHVybiBmcmFt
ZSArICIgIiArIGVhY2guZ2V0RXZhbE9yaWdpbigpOworICAgICAgICBmcmFtZSArPSAiICIgKyAo
ZmlsZU5hbWUgPyBmaWxlTmFtZSA6ICIiKTsKKyAgICAgICAgbGV0IGxpbmU9IGVhY2guZ2V0TGlu
ZU51bWJlcigpOworICAgICAgICBmcmFtZSArPSAiICIgKyAobGluZSA/IGxpbmUgOiAiIik7Cisg
ICAgICAgIGxldCBjb2x1bW4gPSBlYWNoLmdldENvbHVtbk51bWJlcigpOworICAgICAgICBmcmFt
ZSArPSAoY29sdW1uID8gIjoiICsgY29sdW1uIDogIiIpOworICAgICAgICByZXR1cm4gZnJhbWU7
CisgICAgICB9KTsKKyAgICAgIHJldHVybiAiIiArIGVycm9yLm1lc3NhZ2UgKyAiXG4iICsgQXJy
YXlQcm90b3R5cGVKb2luLmNhbGwoc3RhY2ssICJcbiIpOworICAgIH0gY2F0Y2ggKGUpIHt9Owor
ICAgIHJldHVybiBlcnJvci5zdGFjazsKKyAgfQorfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS92OC93YXNtLW1vZHVsZS1idWlsZGVyLmpzIGIvSlNUZXN0cy93YXNtL3Y4L3dhc20tbW9k
dWxlLWJ1aWxkZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDY3ZWQ4NGQwZTU5ZjI4NTJhY2E0YTUyMjNmZDU5
ZTlmZWRmN2IxMAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC93YXNtLW1vZHVs
ZS1idWlsZGVyLmpzCkBAIC0wLDAgKzEsMjE2OSBAQAorLy8gQ29weXJpZ2h0IDIwMTYgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIFVzZWQgZm9yIGVuY29kaW5nIGYz
MiBhbmQgZG91YmxlIGNvbnN0YW50cyB0byBiaXRzLgorbGV0IGJ5dGVfdmlldyA9IG5ldyBVaW50
OEFycmF5KDgpOworbGV0IGRhdGFfdmlldyA9IG5ldyBEYXRhVmlldyhieXRlX3ZpZXcuYnVmZmVy
KTsKKworLy8gVGhlIGJ5dGVzIGZ1bmN0aW9uIHJlY2VpdmVzIG9uZSBvZgorLy8gIC0gc2V2ZXJh
bCBhcmd1bWVudHMsIGVhY2ggb2Ygd2hpY2ggaXMgZWl0aGVyIGEgbnVtYmVyIG9yIGEgc3RyaW5n
IG9mIGxlbmd0aAorLy8gICAgMTsgaWYgaXQncyBhIHN0cmluZywgdGhlIGNoYXJjb2RlIG9mIHRo
ZSBjb250YWluZWQgY2hhcmFjdGVyIGlzIHVzZWQuCisvLyAgLSBhIHNpbmdsZSBhcnJheSBhcmd1
bWVudCBjb250YWluaW5nIHRoZSBhY3R1YWwgYXJndW1lbnRzCisvLyAgLSBhIHNpbmdsZSBzdHJp
bmc7IHRoZSByZXR1cm5lZCBidWZmZXIgd2lsbCBjb250YWluIHRoZSBjaGFyIGNvZGVzIG9mIGFs
bAorLy8gICAgY29udGFpbmVkIGNoYXJhY3RlcnMuCitmdW5jdGlvbiBieXRlcyguLi5pbnB1dCkg
eworICBpZiAoaW5wdXQubGVuZ3RoID09IDEgJiYgdHlwZW9mIGlucHV0WzBdID09ICdhcnJheScp
IGlucHV0ID0gaW5wdXRbMF07CisgIGlmIChpbnB1dC5sZW5ndGggPT0gMSAmJiB0eXBlb2YgaW5w
dXRbMF0gPT0gJ3N0cmluZycpIHsKKyAgICBsZXQgbGVuID0gaW5wdXRbMF0ubGVuZ3RoOworICAg
IGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IGxlbjsgaSsrKSB2aWV3W2ldID0gaW5wdXRbMF0uY2hhckNvZGVBdChpKTsKKyAgICByZXR1cm4g
dmlldy5idWZmZXI7CisgIH0KKyAgbGV0IHZpZXcgPSBuZXcgVWludDhBcnJheShpbnB1dC5sZW5n
dGgpOworICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7CisgICAgbGV0
IHZhbCA9IGlucHV0W2ldOworICAgIGlmICh0eXBlb2YgdmFsID09ICdzdHJpbmcnKSB7CisgICAg
ICBpZiAodmFsLmxlbmd0aCAhPSAxKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5n
IGlucHV0cyBtdXN0IGhhdmUgbGVuZ3RoIDEnKTsKKyAgICAgIH0KKyAgICAgIHZhbCA9IHZhbC5j
aGFyQ29kZUF0KDApOworICAgIH0KKyAgICB2aWV3W2ldID0gdmFsIHwgMDsKKyAgfQorICByZXR1
cm4gdmlldy5idWZmZXI7Cit9CisKKy8vIEhlYWRlciBkZWNsYXJhdGlvbiBjb25zdGFudHMKK3Zh
ciBrV2FzbUgwID0gMDsKK3ZhciBrV2FzbUgxID0gMHg2MTsKK3ZhciBrV2FzbUgyID0gMHg3MzsK
K3ZhciBrV2FzbUgzID0gMHg2ZDsKKwordmFyIGtXYXNtVjAgPSAweDE7Cit2YXIga1dhc21WMSA9
IDA7Cit2YXIga1dhc21WMiA9IDA7Cit2YXIga1dhc21WMyA9IDA7CisKK3ZhciBrSGVhZGVyU2l6
ZSA9IDg7Cit2YXIga1BhZ2VTaXplID0gNjU1MzY7Cit2YXIga1NwZWNNYXhQYWdlcyA9IDY1NTM2
OwordmFyIGtNYXhWYXJJbnQzMlNpemUgPSA1OwordmFyIGtNYXhWYXJJbnQ2NFNpemUgPSAxMDsK
KworbGV0IGtEZWNsTm9Mb2NhbHMgPSAwOworCisvLyBTZWN0aW9uIGRlY2xhcmF0aW9uIGNvbnN0
YW50cworbGV0IGtVbmtub3duU2VjdGlvbkNvZGUgPSAwOworbGV0IGtUeXBlU2VjdGlvbkNvZGUg
PSAxOyAgICAgICAgLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0aW9ucworbGV0IGtJbXBv
cnRTZWN0aW9uQ29kZSA9IDI7ICAgICAgLy8gSW1wb3J0IGRlY2xhcmF0aW9ucworbGV0IGtGdW5j
dGlvblNlY3Rpb25Db2RlID0gMzsgICAgLy8gRnVuY3Rpb24gZGVjbGFyYXRpb25zCitsZXQga1Rh
YmxlU2VjdGlvbkNvZGUgPSA0OyAgICAgICAvLyBJbmRpcmVjdCBmdW5jdGlvbiB0YWJsZSBhbmQg
b3RoZXIgdGFibGVzCitsZXQga01lbW9yeVNlY3Rpb25Db2RlID0gNTsgICAgICAvLyBNZW1vcnkg
YXR0cmlidXRlcworbGV0IGtHbG9iYWxTZWN0aW9uQ29kZSA9IDY7ICAgICAgLy8gR2xvYmFsIGRl
Y2xhcmF0aW9ucworbGV0IGtFeHBvcnRTZWN0aW9uQ29kZSA9IDc7ICAgICAgLy8gRXhwb3J0cwor
bGV0IGtTdGFydFNlY3Rpb25Db2RlID0gODsgICAgICAgLy8gU3RhcnQgZnVuY3Rpb24gZGVjbGFy
YXRpb24KK2xldCBrRWxlbWVudFNlY3Rpb25Db2RlID0gOTsgICAgIC8vIEVsZW1lbnRzIHNlY3Rp
b24KK2xldCBrQ29kZVNlY3Rpb25Db2RlID0gMTA7ICAgICAgIC8vIEZ1bmN0aW9uIGNvZGUKK2xl
dCBrRGF0YVNlY3Rpb25Db2RlID0gMTE7ICAgICAgIC8vIERhdGEgc2VnbWVudHMKK2xldCBrRGF0
YUNvdW50U2VjdGlvbkNvZGUgPSAxMjsgIC8vIERhdGEgc2VnbWVudCBjb3VudCAoYmV0d2VlbiBF
bGVtZW50ICYgQ29kZSkKK2xldCBrVGFnU2VjdGlvbkNvZGUgPSAxMzsgICAgICAgIC8vIFRhZyBz
ZWN0aW9uIChiZXR3ZWVuIE1lbW9yeSAmIEdsb2JhbCkKKworLy8gTmFtZSBzZWN0aW9uIHR5cGVz
CitsZXQga01vZHVsZU5hbWVDb2RlID0gMDsKK2xldCBrRnVuY3Rpb25OYW1lc0NvZGUgPSAxOwor
bGV0IGtMb2NhbE5hbWVzQ29kZSA9IDI7CisKK2xldCBrV2FzbUZ1bmN0aW9uVHlwZUZvcm0gPSAw
eDYwOworbGV0IGtXYXNtU3RydWN0VHlwZUZvcm0gPSAweDVmOworbGV0IGtXYXNtQXJyYXlUeXBl
Rm9ybSA9IDB4NWU7CitsZXQga1dhc21GdW5jdGlvblN1YnR5cGVGb3JtID0gMHg1ZDsKK2xldCBr
V2FzbVN0cnVjdFN1YnR5cGVGb3JtID0gMHg1YzsKK2xldCBrV2FzbUFycmF5U3VidHlwZUZvcm0g
PSAweDViOworCitsZXQga0xpbWl0c05vTWF4aW11bSA9IDB4MDA7CitsZXQga0xpbWl0c1dpdGhN
YXhpbXVtID0gMHgwMTsKK2xldCBrTGltaXRzU2hhcmVkTm9NYXhpbXVtID0gMHgwMjsKK2xldCBr
TGltaXRzU2hhcmVkV2l0aE1heGltdW0gPSAweDAzOworbGV0IGtMaW1pdHNNZW1vcnk2NE5vTWF4
aW11bSA9IDB4MDQ7CitsZXQga0xpbWl0c01lbW9yeTY0V2l0aE1heGltdW0gPSAweDA1OworCisv
LyBTZWdtZW50IGZsYWdzCitsZXQga0FjdGl2ZU5vSW5kZXggPSAwOworbGV0IGtQYXNzaXZlID0g
MTsKK2xldCBrQWN0aXZlV2l0aEluZGV4ID0gMjsKK2xldCBrRGVjbGFyYXRpdmUgPSAzOworbGV0
IGtQYXNzaXZlV2l0aEVsZW1lbnRzID0gNTsKK2xldCBrRGVjbGFyYXRpdmVXaXRoRWxlbWVudHMg
PSA3OworCisvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbiBmbGFncworbGV0IGtEZWNsRnVuY3Rpb25O
YW1lID0gMHgwMTsKK2xldCBrRGVjbEZ1bmN0aW9uSW1wb3J0ID0gMHgwMjsKK2xldCBrRGVjbEZ1
bmN0aW9uTG9jYWxzID0gMHgwNDsKK2xldCBrRGVjbEZ1bmN0aW9uRXhwb3J0ID0gMHgwODsKKwor
Ly8gVmFsdWUgdHlwZXMgYW5kIHJlbGF0ZWQKK2xldCBrV2FzbVZvaWQgPSAweDQwOworbGV0IGtX
YXNtSTMyID0gMHg3ZjsKK2xldCBrV2FzbUk2NCA9IDB4N2U7CitsZXQga1dhc21GMzIgPSAweDdk
OworbGV0IGtXYXNtRjY0ID0gMHg3YzsKK2xldCBrV2FzbVMxMjggPSAweDdiOworbGV0IGtXYXNt
STggPSAweDdhOworbGV0IGtXYXNtSTE2ID0gMHg3OTsKKworLy8gVGhlc2UgYXJlIGRlZmluZWQg
YXMgbmVnYXRpdmUgaW50ZWdlcnMgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIHBvc2l0aXZlIHR5
cGUKKy8vIGluZGljZXMuCitsZXQga1dhc21GdW5jUmVmID0gLTB4MTA7CitsZXQga1dhc21BbnlG
dW5jID0ga1dhc21GdW5jUmVmOyAgLy8gQWxpYXMgbmFtZWQgYXMgaW4gdGhlIEpTIEFQSSBzcGVj
CitsZXQga1dhc21FeHRlcm5SZWYgPSAtMHgxMTsKK2xldCBrV2FzbUFueVJlZiA9IC0weDEyOwor
bGV0IGtXYXNtRXFSZWYgPSAtMHgxMzsKK2xldCBrV2FzbUkzMVJlZiA9IC0weDE2OworbGV0IGtX
YXNtRGF0YVJlZiA9IC0weDE5OworCisvLyBVc2UgdGhlIHBvc2l0aXZlLWJ5dGUgdmVyc2lvbnMg
aW5zaWRlIGZ1bmN0aW9uIGJvZGllcy4KK2xldCBrTGViMTI4TWFzayA9IDB4N2Y7CitsZXQga0Z1
bmNSZWZDb2RlID0ga1dhc21GdW5jUmVmICYga0xlYjEyOE1hc2s7CitsZXQga0FueUZ1bmNDb2Rl
ID0ga0Z1bmNSZWZDb2RlOyAgLy8gQWxpYXMgbmFtZWQgYXMgaW4gdGhlIEpTIEFQSSBzcGVjCits
ZXQga0V4dGVyblJlZkNvZGUgPSBrV2FzbUV4dGVyblJlZiAmIGtMZWIxMjhNYXNrOworbGV0IGtB
bnlSZWZDb2RlID0ga1dhc21BbnlSZWYgJiBrTGViMTI4TWFzazsKK2xldCBrRXFSZWZDb2RlID0g
a1dhc21FcVJlZiAmIGtMZWIxMjhNYXNrOworbGV0IGtJMzFSZWZDb2RlID0ga1dhc21JMzFSZWYg
ICYga0xlYjEyOE1hc2s7CitsZXQga0RhdGFSZWZDb2RlID0ga1dhc21EYXRhUmVmICAmIGtMZWIx
MjhNYXNrOworCitsZXQga1dhc21PcHRSZWYgPSAweDZjOworbGV0IGtXYXNtUmVmID0gMHg2YjsK
K2Z1bmN0aW9uIHdhc21PcHRSZWZUeXBlKGhlYXBfdHlwZSkgeworICByZXR1cm4ge29wY29kZTog
a1dhc21PcHRSZWYsIGhlYXBfdHlwZTogaGVhcF90eXBlfTsKK30KK2Z1bmN0aW9uIHdhc21SZWZU
eXBlKGhlYXBfdHlwZSkgeworICByZXR1cm4ge29wY29kZToga1dhc21SZWYsIGhlYXBfdHlwZTog
aGVhcF90eXBlfTsKK30KKworbGV0IGtXYXNtUnR0V2l0aERlcHRoID0gMHg2OTsKK2Z1bmN0aW9u
IHdhc21SdHQoaW5kZXgsIGRlcHRoKSB7CisgIGlmIChpbmRleCA8IDApIHRocm93IG5ldyBFcnJv
cigiRXhwZWN0aW5nIG5vbi1uZWdhdGl2ZSB0eXBlIGluZGV4Iik7CisgIHJldHVybiB7b3Bjb2Rl
OiBrV2FzbVJ0dFdpdGhEZXB0aCwgaW5kZXg6IGluZGV4LCBkZXB0aDogZGVwdGh9OworfQorbGV0
IGtXYXNtUnR0ID0gMHg2ODsKK2Z1bmN0aW9uIHdhc21SdHROb0RlcHRoKGluZGV4KSB7CisgIGlm
IChpbmRleCA8IDApIHRocm93IG5ldyBFcnJvcigiRXhwZWN0aW5nIG5vbi1uZWdhdGl2ZSB0eXBl
IGluZGV4Iik7CisgIHJldHVybiB7b3Bjb2RlOiBrV2FzbVJ0dCwgaW5kZXg6IGluZGV4fTsKK30K
KworbGV0IGtFeHRlcm5hbEZ1bmN0aW9uID0gMDsKK2xldCBrRXh0ZXJuYWxUYWJsZSA9IDE7Cits
ZXQga0V4dGVybmFsTWVtb3J5ID0gMjsKK2xldCBrRXh0ZXJuYWxHbG9iYWwgPSAzOworbGV0IGtF
eHRlcm5hbFRhZyA9IDQ7CisKK2xldCBrVGFibGVaZXJvID0gMDsKK2xldCBrTWVtb3J5WmVybyA9
IDA7CitsZXQga1NlZ21lbnRaZXJvID0gMDsKKworbGV0IGtFeGNlcHRpb25BdHRyaWJ1dGUgPSAw
OworCisvLyBVc2VmdWwgc2lnbmF0dXJlcworbGV0IGtTaWdfaV9pID0gbWFrZVNpZyhba1dhc21J
MzJdLCBba1dhc21JMzJdKTsKK2xldCBrU2lnX2xfbCA9IG1ha2VTaWcoW2tXYXNtSTY0XSwgW2tX
YXNtSTY0XSk7CitsZXQga1NpZ19pX2wgPSBtYWtlU2lnKFtrV2FzbUk2NF0sIFtrV2FzbUkzMl0p
OworbGV0IGtTaWdfaV9paSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMl0sIFtrV2FzbUkz
Ml0pOworbGV0IGtTaWdfaV9paWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNt
STMyXSwgW2tXYXNtSTMyXSk7CitsZXQga1NpZ192X2lpaWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwg
a1dhc21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMl0sIFtdKTsKK2xldCBrU2lnX2ZfZmYgPSBtYWtl
U2lnKFtrV2FzbUYzMiwga1dhc21GMzJdLCBba1dhc21GMzJdKTsKK2xldCBrU2lnX2RfZGQgPSBt
YWtlU2lnKFtrV2FzbUY2NCwga1dhc21GNjRdLCBba1dhc21GNjRdKTsKK2xldCBrU2lnX2xfbGwg
PSBtYWtlU2lnKFtrV2FzbUk2NCwga1dhc21JNjRdLCBba1dhc21JNjRdKTsKK2xldCBrU2lnX2lf
ZGQgPSBtYWtlU2lnKFtrV2FzbUY2NCwga1dhc21GNjRdLCBba1dhc21JMzJdKTsKK2xldCBrU2ln
X3ZfdiA9IG1ha2VTaWcoW10sIFtdKTsKK2xldCBrU2lnX2lfdiA9IG1ha2VTaWcoW10sIFtrV2Fz
bUkzMl0pOworbGV0IGtTaWdfbF92ID0gbWFrZVNpZyhbXSwgW2tXYXNtSTY0XSk7CitsZXQga1Np
Z19mX3YgPSBtYWtlU2lnKFtdLCBba1dhc21GMzJdKTsKK2xldCBrU2lnX2RfdiA9IG1ha2VTaWco
W10sIFtrV2FzbUY2NF0pOworbGV0IGtTaWdfdl9pID0gbWFrZVNpZyhba1dhc21JMzJdLCBbXSk7
CitsZXQga1NpZ192X2lpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMyXSwgW10pOworbGV0
IGtTaWdfdl9paWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSwgW10p
OworbGV0IGtTaWdfdl9sID0gbWFrZVNpZyhba1dhc21JNjRdLCBbXSk7CitsZXQga1NpZ192X2Qg
PSBtYWtlU2lnKFtrV2FzbUY2NF0sIFtdKTsKK2xldCBrU2lnX3ZfZGQgPSBtYWtlU2lnKFtrV2Fz
bUY2NCwga1dhc21GNjRdLCBbXSk7CitsZXQga1NpZ192X2RkaSA9IG1ha2VTaWcoW2tXYXNtRjY0
LCBrV2FzbUY2NCwga1dhc21JMzJdLCBbXSk7CitsZXQga1NpZ19paV92ID0gbWFrZVNpZyhbXSwg
W2tXYXNtSTMyLCBrV2FzbUkzMl0pOworbGV0IGtTaWdfaWlpX3YgPSBtYWtlU2lnKFtdLCBba1dh
c21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMl0pOworbGV0IGtTaWdfaWlfaSA9IG1ha2VTaWcoW2tX
YXNtSTMyXSwgW2tXYXNtSTMyLCBrV2FzbUkzMl0pOworbGV0IGtTaWdfaWlpX2kgPSBtYWtlU2ln
KFtrV2FzbUkzMl0sIFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSk7CitsZXQga1NpZ19p
aV9paSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMl0sIFtrV2FzbUkzMiwga1dhc21JMzJd
KTsKK2xldCBrU2lnX2lpaV9paSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMl0sIFtrV2Fz
bUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSk7CisKK2xldCBrU2lnX3ZfZiA9IG1ha2VTaWcoW2tX
YXNtRjMyXSwgW10pOworbGV0IGtTaWdfZl9mID0gbWFrZVNpZyhba1dhc21GMzJdLCBba1dhc21G
MzJdKTsKK2xldCBrU2lnX2ZfZCA9IG1ha2VTaWcoW2tXYXNtRjY0XSwgW2tXYXNtRjMyXSk7Cits
ZXQga1NpZ19kX2QgPSBtYWtlU2lnKFtrV2FzbUY2NF0sIFtrV2FzbUY2NF0pOworbGV0IGtTaWdf
cl9yID0gbWFrZVNpZyhba1dhc21FeHRlcm5SZWZdLCBba1dhc21FeHRlcm5SZWZdKTsKK2xldCBr
U2lnX2FfYSA9IG1ha2VTaWcoW2tXYXNtQW55RnVuY10sIFtrV2FzbUFueUZ1bmNdKTsKK2xldCBr
U2lnX2lfciA9IG1ha2VTaWcoW2tXYXNtRXh0ZXJuUmVmXSwgW2tXYXNtSTMyXSk7CitsZXQga1Np
Z192X3IgPSBtYWtlU2lnKFtrV2FzbUV4dGVyblJlZl0sIFtdKTsKK2xldCBrU2lnX3ZfYSA9IG1h
a2VTaWcoW2tXYXNtQW55RnVuY10sIFtdKTsKK2xldCBrU2lnX3ZfcnIgPSBtYWtlU2lnKFtrV2Fz
bUV4dGVyblJlZiwga1dhc21FeHRlcm5SZWZdLCBbXSk7CitsZXQga1NpZ192X2FhID0gbWFrZVNp
Zyhba1dhc21BbnlGdW5jLCBrV2FzbUFueUZ1bmNdLCBbXSk7CitsZXQga1NpZ19yX3YgPSBtYWtl
U2lnKFtdLCBba1dhc21FeHRlcm5SZWZdKTsKK2xldCBrU2lnX2FfdiA9IG1ha2VTaWcoW10sIFtr
V2FzbUFueUZ1bmNdKTsKK2xldCBrU2lnX2FfaSA9IG1ha2VTaWcoW2tXYXNtSTMyXSwgW2tXYXNt
QW55RnVuY10pOworbGV0IGtTaWdfc19pID0gbWFrZVNpZyhba1dhc21JMzJdLCBba1dhc21TMTI4
XSk7CitsZXQga1NpZ19pX3MgPSBtYWtlU2lnKFtrV2FzbVMxMjhdLCBba1dhc21JMzJdKTsKKwor
ZnVuY3Rpb24gbWFrZVNpZyhwYXJhbXMsIHJlc3VsdHMpIHsKKyAgcmV0dXJuIHtwYXJhbXM6IHBh
cmFtcywgcmVzdWx0czogcmVzdWx0c307Cit9CisKK2Z1bmN0aW9uIG1ha2VTaWdfdl94KHgpIHsK
KyAgcmV0dXJuIG1ha2VTaWcoW3hdLCBbXSk7Cit9CisKK2Z1bmN0aW9uIG1ha2VTaWdfeF92KHgp
IHsKKyAgcmV0dXJuIG1ha2VTaWcoW10sIFt4XSk7Cit9CisKK2Z1bmN0aW9uIG1ha2VTaWdfdl94
eCh4KSB7CisgIHJldHVybiBtYWtlU2lnKFt4LCB4XSwgW10pOworfQorCitmdW5jdGlvbiBtYWtl
U2lnX3JfdihyKSB7CisgIHJldHVybiBtYWtlU2lnKFtdLCBbcl0pOworfQorCitmdW5jdGlvbiBt
YWtlU2lnX3JfeChyLCB4KSB7CisgIHJldHVybiBtYWtlU2lnKFt4XSwgW3JdKTsKK30KKworZnVu
Y3Rpb24gbWFrZVNpZ19yX3h4KHIsIHgpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW3gsIHhdLCBbcl0p
OworfQorCisvLyBPcGNvZGVzCitjb25zdCBrV2FzbU9wY29kZXMgPSB7CisgICdVbnJlYWNoYWJs
ZSc6IDB4MDAsCisgICdOb3AnOiAweDAxLAorICAnQmxvY2snOiAweDAyLAorICAnTG9vcCc6IDB4
MDMsCisgICdJZic6IDB4MDQsCisgICdFbHNlJzogMHgwNSwKKyAgJ1RyeSc6IDB4MDYsCisgICdD
YXRjaCc6IDB4MDcsCisgICdUaHJvdyc6IDB4MDgsCisgICdSZXRocm93JzogMHgwOSwKKyAgJ0Nh
dGNoQWxsJzogMHgxOSwKKyAgJ0VuZCc6IDB4MGIsCisgICdCcic6IDB4MGMsCisgICdCcklmJzog
MHgwZCwKKyAgJ0JyVGFibGUnOiAweDBlLAorICAnUmV0dXJuJzogMHgwZiwKKyAgJ0NhbGxGdW5j
dGlvbic6IDB4MTAsCisgICdDYWxsSW5kaXJlY3QnOiAweDExLAorICAnUmV0dXJuQ2FsbCc6IDB4
MTIsCisgICdSZXR1cm5DYWxsSW5kaXJlY3QnOiAweDEzLAorICAnQ2FsbFJlZic6IDB4MTQsCisg
ICdSZXR1cm5DYWxsUmVmJzogMHgxNSwKKyAgJ0xldCc6IDB4MTcsCisgICdEZWxlZ2F0ZSc6IDB4
MTgsCisgICdEcm9wJzogMHgxYSwKKyAgJ1NlbGVjdCc6IDB4MWIsCisgICdTZWxlY3RXaXRoVHlw
ZSc6IDB4MWMsCisgICdMb2NhbEdldCc6IDB4MjAsCisgICdMb2NhbFNldCc6IDB4MjEsCisgICdM
b2NhbFRlZSc6IDB4MjIsCisgICdHbG9iYWxHZXQnOiAweDIzLAorICAnR2xvYmFsU2V0JzogMHgy
NCwKKyAgJ1RhYmxlR2V0JzogMHgyNSwKKyAgJ1RhYmxlU2V0JzogMHgyNiwKKyAgJ0kzMkxvYWRN
ZW0nOiAweDI4LAorICAnSTY0TG9hZE1lbSc6IDB4MjksCisgICdGMzJMb2FkTWVtJzogMHgyYSwK
KyAgJ0Y2NExvYWRNZW0nOiAweDJiLAorICAnSTMyTG9hZE1lbThTJzogMHgyYywKKyAgJ0kzMkxv
YWRNZW04VSc6IDB4MmQsCisgICdJMzJMb2FkTWVtMTZTJzogMHgyZSwKKyAgJ0kzMkxvYWRNZW0x
NlUnOiAweDJmLAorICAnSTY0TG9hZE1lbThTJzogMHgzMCwKKyAgJ0k2NExvYWRNZW04VSc6IDB4
MzEsCisgICdJNjRMb2FkTWVtMTZTJzogMHgzMiwKKyAgJ0k2NExvYWRNZW0xNlUnOiAweDMzLAor
ICAnSTY0TG9hZE1lbTMyUyc6IDB4MzQsCisgICdJNjRMb2FkTWVtMzJVJzogMHgzNSwKKyAgJ0kz
MlN0b3JlTWVtJzogMHgzNiwKKyAgJ0k2NFN0b3JlTWVtJzogMHgzNywKKyAgJ0YzMlN0b3JlTWVt
JzogMHgzOCwKKyAgJ0Y2NFN0b3JlTWVtJzogMHgzOSwKKyAgJ0kzMlN0b3JlTWVtOCc6IDB4M2Es
CisgICdJMzJTdG9yZU1lbTE2JzogMHgzYiwKKyAgJ0k2NFN0b3JlTWVtOCc6IDB4M2MsCisgICdJ
NjRTdG9yZU1lbTE2JzogMHgzZCwKKyAgJ0k2NFN0b3JlTWVtMzInOiAweDNlLAorICAnTWVtb3J5
U2l6ZSc6IDB4M2YsCisgICdNZW1vcnlHcm93JzogMHg0MCwKKyAgJ0kzMkNvbnN0JzogMHg0MSwK
KyAgJ0k2NENvbnN0JzogMHg0MiwKKyAgJ0YzMkNvbnN0JzogMHg0MywKKyAgJ0Y2NENvbnN0Jzog
MHg0NCwKKyAgJ0kzMkVxeic6IDB4NDUsCisgICdJMzJFcSc6IDB4NDYsCisgICdJMzJOZSc6IDB4
NDcsCisgICdJMzJMdFMnOiAweDQ4LAorICAnSTMyTHRVJzogMHg0OSwKKyAgJ0kzMkd0Uyc6IDB4
NGEsCisgICdJMzJHdFUnOiAweDRiLAorICAnSTMyTGVTJzogMHg0YywKKyAgJ0kzMkxlVSc6IDB4
NGQsCisgICdJMzJHZVMnOiAweDRlLAorICAnSTMyR2VVJzogMHg0ZiwKKyAgJ0k2NEVxeic6IDB4
NTAsCisgICdJNjRFcSc6IDB4NTEsCisgICdJNjROZSc6IDB4NTIsCisgICdJNjRMdFMnOiAweDUz
LAorICAnSTY0THRVJzogMHg1NCwKKyAgJ0k2NEd0Uyc6IDB4NTUsCisgICdJNjRHdFUnOiAweDU2
LAorICAnSTY0TGVTJzogMHg1NywKKyAgJ0k2NExlVSc6IDB4NTgsCisgICdJNjRHZVMnOiAweDU5
LAorICAnSTY0R2VVJzogMHg1YSwKKyAgJ0YzMkVxJzogMHg1YiwKKyAgJ0YzMk5lJzogMHg1YywK
KyAgJ0YzMkx0JzogMHg1ZCwKKyAgJ0YzMkd0JzogMHg1ZSwKKyAgJ0YzMkxlJzogMHg1ZiwKKyAg
J0YzMkdlJzogMHg2MCwKKyAgJ0Y2NEVxJzogMHg2MSwKKyAgJ0Y2NE5lJzogMHg2MiwKKyAgJ0Y2
NEx0JzogMHg2MywKKyAgJ0Y2NEd0JzogMHg2NCwKKyAgJ0Y2NExlJzogMHg2NSwKKyAgJ0Y2NEdl
JzogMHg2NiwKKyAgJ0kzMkNseic6IDB4NjcsCisgICdJMzJDdHonOiAweDY4LAorICAnSTMyUG9w
Y250JzogMHg2OSwKKyAgJ0kzMkFkZCc6IDB4NmEsCisgICdJMzJTdWInOiAweDZiLAorICAnSTMy
TXVsJzogMHg2YywKKyAgJ0kzMkRpdlMnOiAweDZkLAorICAnSTMyRGl2VSc6IDB4NmUsCisgICdJ
MzJSZW1TJzogMHg2ZiwKKyAgJ0kzMlJlbVUnOiAweDcwLAorICAnSTMyQW5kJzogMHg3MSwKKyAg
J0kzMklvcic6IDB4NzIsCisgICdJMzJYb3InOiAweDczLAorICAnSTMyU2hsJzogMHg3NCwKKyAg
J0kzMlNoclMnOiAweDc1LAorICAnSTMyU2hyVSc6IDB4NzYsCisgICdJMzJSb2wnOiAweDc3LAor
ICAnSTMyUm9yJzogMHg3OCwKKyAgJ0k2NENseic6IDB4NzksCisgICdJNjRDdHonOiAweDdhLAor
ICAnSTY0UG9wY250JzogMHg3YiwKKyAgJ0k2NEFkZCc6IDB4N2MsCisgICdJNjRTdWInOiAweDdk
LAorICAnSTY0TXVsJzogMHg3ZSwKKyAgJ0k2NERpdlMnOiAweDdmLAorICAnSTY0RGl2VSc6IDB4
ODAsCisgICdJNjRSZW1TJzogMHg4MSwKKyAgJ0k2NFJlbVUnOiAweDgyLAorICAnSTY0QW5kJzog
MHg4MywKKyAgJ0k2NElvcic6IDB4ODQsCisgICdJNjRYb3InOiAweDg1LAorICAnSTY0U2hsJzog
MHg4NiwKKyAgJ0k2NFNoclMnOiAweDg3LAorICAnSTY0U2hyVSc6IDB4ODgsCisgICdJNjRSb2wn
OiAweDg5LAorICAnSTY0Um9yJzogMHg4YSwKKyAgJ0YzMkFicyc6IDB4OGIsCisgICdGMzJOZWcn
OiAweDhjLAorICAnRjMyQ2VpbCc6IDB4OGQsCisgICdGMzJGbG9vcic6IDB4OGUsCisgICdGMzJU
cnVuYyc6IDB4OGYsCisgICdGMzJOZWFyZXN0SW50JzogMHg5MCwKKyAgJ0YzMlNxcnQnOiAweDkx
LAorICAnRjMyQWRkJzogMHg5MiwKKyAgJ0YzMlN1Yic6IDB4OTMsCisgICdGMzJNdWwnOiAweDk0
LAorICAnRjMyRGl2JzogMHg5NSwKKyAgJ0YzMk1pbic6IDB4OTYsCisgICdGMzJNYXgnOiAweDk3
LAorICAnRjMyQ29weVNpZ24nOiAweDk4LAorICAnRjY0QWJzJzogMHg5OSwKKyAgJ0Y2NE5lZyc6
IDB4OWEsCisgICdGNjRDZWlsJzogMHg5YiwKKyAgJ0Y2NEZsb29yJzogMHg5YywKKyAgJ0Y2NFRy
dW5jJzogMHg5ZCwKKyAgJ0Y2NE5lYXJlc3RJbnQnOiAweDllLAorICAnRjY0U3FydCc6IDB4OWYs
CisgICdGNjRBZGQnOiAweGEwLAorICAnRjY0U3ViJzogMHhhMSwKKyAgJ0Y2NE11bCc6IDB4YTIs
CisgICdGNjREaXYnOiAweGEzLAorICAnRjY0TWluJzogMHhhNCwKKyAgJ0Y2NE1heCc6IDB4YTUs
CisgICdGNjRDb3B5U2lnbic6IDB4YTYsCisgICdJMzJDb252ZXJ0STY0JzogMHhhNywKKyAgJ0kz
MlNDb252ZXJ0RjMyJzogMHhhOCwKKyAgJ0kzMlVDb252ZXJ0RjMyJzogMHhhOSwKKyAgJ0kzMlND
b252ZXJ0RjY0JzogMHhhYSwKKyAgJ0kzMlVDb252ZXJ0RjY0JzogMHhhYiwKKyAgJ0k2NFNDb252
ZXJ0STMyJzogMHhhYywKKyAgJ0k2NFVDb252ZXJ0STMyJzogMHhhZCwKKyAgJ0k2NFNDb252ZXJ0
RjMyJzogMHhhZSwKKyAgJ0k2NFVDb252ZXJ0RjMyJzogMHhhZiwKKyAgJ0k2NFNDb252ZXJ0RjY0
JzogMHhiMCwKKyAgJ0k2NFVDb252ZXJ0RjY0JzogMHhiMSwKKyAgJ0YzMlNDb252ZXJ0STMyJzog
MHhiMiwKKyAgJ0YzMlVDb252ZXJ0STMyJzogMHhiMywKKyAgJ0YzMlNDb252ZXJ0STY0JzogMHhi
NCwKKyAgJ0YzMlVDb252ZXJ0STY0JzogMHhiNSwKKyAgJ0YzMkNvbnZlcnRGNjQnOiAweGI2LAor
ICAnRjY0U0NvbnZlcnRJMzInOiAweGI3LAorICAnRjY0VUNvbnZlcnRJMzInOiAweGI4LAorICAn
RjY0U0NvbnZlcnRJNjQnOiAweGI5LAorICAnRjY0VUNvbnZlcnRJNjQnOiAweGJhLAorICAnRjY0
Q29udmVydEYzMic6IDB4YmIsCisgICdJMzJSZWludGVycHJldEYzMic6IDB4YmMsCisgICdJNjRS
ZWludGVycHJldEY2NCc6IDB4YmQsCisgICdGMzJSZWludGVycHJldEkzMic6IDB4YmUsCisgICdG
NjRSZWludGVycHJldEk2NCc6IDB4YmYsCisgICdJMzJTRXh0ZW5kSTgnOiAweGMwLAorICAnSTMy
U0V4dGVuZEkxNic6IDB4YzEsCisgICdJNjRTRXh0ZW5kSTgnOiAweGMyLAorICAnSTY0U0V4dGVu
ZEkxNic6IDB4YzMsCisgICdJNjRTRXh0ZW5kSTMyJzogMHhjNCwKKyAgJ1JlZk51bGwnOiAweGQw
LAorICAnUmVmSXNOdWxsJzogMHhkMSwKKyAgJ1JlZkZ1bmMnOiAweGQyLAorICAnUmVmQXNOb25O
dWxsJzogMHhkMywKKyAgJ0JyT25OdWxsJzogMHhkNCwKKyAgJ1JlZkVxJzogMHhkNSwKKyAgJ0Jy
T25Ob25OdWxsJzogMHhkNgorfTsKKworZnVuY3Rpb24gZGVmaW5lV2FzbU9wY29kZShuYW1lLCB2
YWx1ZSkgeworICBpZiAoZ2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVzID09PSB1bmRlZmluZWQp
IHsKKyAgICBnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXMgPSB7fTsKKyAgfQorICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgbmFtZSwge3ZhbHVlOiB2YWx1ZX0pOworICBpZiAo
Z2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVzW3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7CisgICAg
dGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgd2FzbSBvcGNvZGU6ICR7dmFsdWV9LiBQcmV2aW91
cyBuYW1lOiAkeworICAgICAgICBnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXNbdmFsdWVdfSwg
bmV3IG5hbWU6ICR7bmFtZX1gKTsKKyAgfQorICBnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXNb
dmFsdWVdID0gbmFtZTsKK30KK2ZvciAobGV0IG5hbWUgaW4ga1dhc21PcGNvZGVzKSB7CisgIGRl
ZmluZVdhc21PcGNvZGUoYGtFeHByJHtuYW1lfWAsIGtXYXNtT3Bjb2Rlc1tuYW1lXSk7Cit9CisK
Ky8vIFByZWZpeCBvcGNvZGVzCitjb25zdCBrUHJlZml4T3Bjb2RlcyA9IHsKKyAgJ0dDJzogMHhm
YiwKKyAgJ051bWVyaWMnOiAweGZjLAorICAnU2ltZCc6IDB4ZmQsCisgICdBdG9taWMnOiAweGZl
Cit9OworZm9yIChsZXQgcHJlZml4IGluIGtQcmVmaXhPcGNvZGVzKSB7CisgIGRlZmluZVdhc21P
cGNvZGUoYGske3ByZWZpeH1QcmVmaXhgLCBrUHJlZml4T3Bjb2Rlc1twcmVmaXhdKTsKK30KKwor
Ly8gR0Mgb3Bjb2RlcworbGV0IGtFeHByU3RydWN0TmV3V2l0aFJ0dCA9IDB4MDE7CitsZXQga0V4
cHJTdHJ1Y3ROZXdEZWZhdWx0V2l0aFJ0dCA9IDB4MDI7CitsZXQga0V4cHJTdHJ1Y3RHZXQgPSAw
eDAzOworbGV0IGtFeHByU3RydWN0R2V0UyA9IDB4MDQ7CitsZXQga0V4cHJTdHJ1Y3RHZXRVID0g
MHgwNTsKK2xldCBrRXhwclN0cnVjdFNldCA9IDB4MDY7CitsZXQga0V4cHJTdHJ1Y3ROZXcgPSAw
eDA3OworbGV0IGtFeHByU3RydWN0TmV3RGVmYXVsdCA9IDB4MDg7CitsZXQga0V4cHJBcnJheU5l
d1dpdGhSdHQgPSAweDExOworbGV0IGtFeHByQXJyYXlOZXdEZWZhdWx0V2l0aFJ0dCA9IDB4MTI7
CitsZXQga0V4cHJBcnJheUdldCA9IDB4MTM7CitsZXQga0V4cHJBcnJheUdldFMgPSAweDE0Owor
bGV0IGtFeHByQXJyYXlHZXRVID0gMHgxNTsKK2xldCBrRXhwckFycmF5U2V0ID0gMHgxNjsKK2xl
dCBrRXhwckFycmF5TGVuID0gMHgxNzsKK2xldCBrRXhwckFycmF5Q29weSA9IDB4MTg7CitsZXQg
a0V4cHJBcnJheUluaXQgPSAweDE5OworbGV0IGtFeHByQXJyYXlJbml0U3RhdGljID0gMHgxYTsK
K2xldCBrRXhwckFycmF5TmV3ID0gMHgxYjsKK2xldCBrRXhwckFycmF5TmV3RGVmYXVsdCA9IDB4
MWM7CitsZXQga0V4cHJJMzFOZXcgPSAweDIwOworbGV0IGtFeHBySTMxR2V0UyA9IDB4MjE7Cits
ZXQga0V4cHJJMzFHZXRVID0gMHgyMjsKK2xldCBrRXhwclJ0dENhbm9uID0gMHgzMDsKK2xldCBr
RXhwclJ0dFN1YiA9IDB4MzE7CitsZXQga0V4cHJSdHRGcmVzaFN1YiA9IDB4MzI7CitsZXQga0V4
cHJSZWZUZXN0ID0gMHg0MDsKK2xldCBrRXhwclJlZkNhc3QgPSAweDQxOworbGV0IGtFeHByQnJP
bkNhc3QgPSAweDQyOworbGV0IGtFeHByQnJPbkNhc3RGYWlsID0gMHg0MzsKK2xldCBrRXhwclJl
ZlRlc3RTdGF0aWMgPSAweDQ0OworbGV0IGtFeHByUmVmQ2FzdFN0YXRpYyA9IDB4NDU7CitsZXQg
a0V4cHJCck9uQ2FzdFN0YXRpYyA9IDB4NDY7CitsZXQga0V4cHJCck9uQ2FzdFN0YXRpY0ZhaWwg
PSAweDQ3OworbGV0IGtFeHByUmVmSXNGdW5jID0gMHg1MDsKK2xldCBrRXhwclJlZklzRGF0YSA9
IDB4NTE7CitsZXQga0V4cHJSZWZJc0kzMSA9IDB4NTI7CitsZXQga0V4cHJSZWZBc0Z1bmMgPSAw
eDU4OworbGV0IGtFeHByUmVmQXNEYXRhID0gMHg1OTsKK2xldCBrRXhwclJlZkFzSTMxID0gMHg1
YTsKK2xldCBrRXhwckJyT25GdW5jID0gMHg2MDsKK2xldCBrRXhwckJyT25EYXRhID0gMHg2MTsK
K2xldCBrRXhwckJyT25JMzEgPSAweDYyOworCisvLyBOdW1lcmljIG9wY29kZXMuCitsZXQga0V4
cHJJMzJTQ29udmVydFNhdEYzMiA9IDB4MDA7CitsZXQga0V4cHJJMzJVQ29udmVydFNhdEYzMiA9
IDB4MDE7CitsZXQga0V4cHJJMzJTQ29udmVydFNhdEY2NCA9IDB4MDI7CitsZXQga0V4cHJJMzJV
Q29udmVydFNhdEY2NCA9IDB4MDM7CitsZXQga0V4cHJJNjRTQ29udmVydFNhdEYzMiA9IDB4MDQ7
CitsZXQga0V4cHJJNjRVQ29udmVydFNhdEYzMiA9IDB4MDU7CitsZXQga0V4cHJJNjRTQ29udmVy
dFNhdEY2NCA9IDB4MDY7CitsZXQga0V4cHJJNjRVQ29udmVydFNhdEY2NCA9IDB4MDc7CitsZXQg
a0V4cHJNZW1vcnlJbml0ID0gMHgwODsKK2xldCBrRXhwckRhdGFEcm9wID0gMHgwOTsKK2xldCBr
RXhwck1lbW9yeUNvcHkgPSAweDBhOworbGV0IGtFeHByTWVtb3J5RmlsbCA9IDB4MGI7CitsZXQg
a0V4cHJUYWJsZUluaXQgPSAweDBjOworbGV0IGtFeHByRWxlbURyb3AgPSAweDBkOworbGV0IGtF
eHByVGFibGVDb3B5ID0gMHgwZTsKK2xldCBrRXhwclRhYmxlR3JvdyA9IDB4MGY7CitsZXQga0V4
cHJUYWJsZVNpemUgPSAweDEwOworbGV0IGtFeHByVGFibGVGaWxsID0gMHgxMTsKKworLy8gQXRv
bWljIG9wY29kZXMuCitsZXQga0V4cHJBdG9taWNOb3RpZnkgPSAweDAwOworbGV0IGtFeHBySTMy
QXRvbWljV2FpdCA9IDB4MDE7CitsZXQga0V4cHJJNjRBdG9taWNXYWl0ID0gMHgwMjsKK2xldCBr
RXhwckkzMkF0b21pY0xvYWQgPSAweDEwOworbGV0IGtFeHBySTMyQXRvbWljTG9hZDhVID0gMHgx
MjsKK2xldCBrRXhwckkzMkF0b21pY0xvYWQxNlUgPSAweDEzOworbGV0IGtFeHBySTMyQXRvbWlj
U3RvcmUgPSAweDE3OworbGV0IGtFeHBySTMyQXRvbWljU3RvcmU4VSA9IDB4MTk7CitsZXQga0V4
cHJJMzJBdG9taWNTdG9yZTE2VSA9IDB4MWE7CitsZXQga0V4cHJJMzJBdG9taWNBZGQgPSAweDFl
OworbGV0IGtFeHBySTMyQXRvbWljQWRkOFUgPSAweDIwOworbGV0IGtFeHBySTMyQXRvbWljQWRk
MTZVID0gMHgyMTsKK2xldCBrRXhwckkzMkF0b21pY1N1YiA9IDB4MjU7CitsZXQga0V4cHJJMzJB
dG9taWNTdWI4VSA9IDB4Mjc7CitsZXQga0V4cHJJMzJBdG9taWNTdWIxNlUgPSAweDI4OworbGV0
IGtFeHBySTMyQXRvbWljQW5kID0gMHgyYzsKK2xldCBrRXhwckkzMkF0b21pY0FuZDhVID0gMHgy
ZTsKK2xldCBrRXhwckkzMkF0b21pY0FuZDE2VSA9IDB4MmY7CitsZXQga0V4cHJJMzJBdG9taWNP
ciA9IDB4MzM7CitsZXQga0V4cHJJMzJBdG9taWNPcjhVID0gMHgzNTsKK2xldCBrRXhwckkzMkF0
b21pY09yMTZVID0gMHgzNjsKK2xldCBrRXhwckkzMkF0b21pY1hvciA9IDB4M2E7CitsZXQga0V4
cHJJMzJBdG9taWNYb3I4VSA9IDB4M2M7CitsZXQga0V4cHJJMzJBdG9taWNYb3IxNlUgPSAweDNk
OworbGV0IGtFeHBySTMyQXRvbWljRXhjaGFuZ2UgPSAweDQxOworbGV0IGtFeHBySTMyQXRvbWlj
RXhjaGFuZ2U4VSA9IDB4NDM7CitsZXQga0V4cHJJMzJBdG9taWNFeGNoYW5nZTE2VSA9IDB4NDQ7
CitsZXQga0V4cHJJMzJBdG9taWNDb21wYXJlRXhjaGFuZ2UgPSAweDQ4OworbGV0IGtFeHBySTMy
QXRvbWljQ29tcGFyZUV4Y2hhbmdlOFUgPSAweDRhOworbGV0IGtFeHBySTMyQXRvbWljQ29tcGFy
ZUV4Y2hhbmdlMTZVID0gMHg0YjsKKworbGV0IGtFeHBySTY0QXRvbWljTG9hZCA9IDB4MTE7Cits
ZXQga0V4cHJJNjRBdG9taWNMb2FkOFUgPSAweDE0OworbGV0IGtFeHBySTY0QXRvbWljTG9hZDE2
VSA9IDB4MTU7CitsZXQga0V4cHJJNjRBdG9taWNMb2FkMzJVID0gMHgxNjsKK2xldCBrRXhwckk2
NEF0b21pY1N0b3JlID0gMHgxODsKK2xldCBrRXhwckk2NEF0b21pY1N0b3JlOFUgPSAweDFiOwor
bGV0IGtFeHBySTY0QXRvbWljU3RvcmUxNlUgPSAweDFjOworbGV0IGtFeHBySTY0QXRvbWljU3Rv
cmUzMlUgPSAweDFkOworbGV0IGtFeHBySTY0QXRvbWljQWRkID0gMHgxZjsKK2xldCBrRXhwckk2
NEF0b21pY0FkZDhVID0gMHgyMjsKK2xldCBrRXhwckk2NEF0b21pY0FkZDE2VSA9IDB4MjM7Cits
ZXQga0V4cHJJNjRBdG9taWNBZGQzMlUgPSAweDI0OworbGV0IGtFeHBySTY0QXRvbWljU3ViID0g
MHgyNjsKK2xldCBrRXhwckk2NEF0b21pY1N1YjhVID0gMHgyOTsKK2xldCBrRXhwckk2NEF0b21p
Y1N1YjE2VSA9IDB4MmE7CitsZXQga0V4cHJJNjRBdG9taWNTdWIzMlUgPSAweDJiOworbGV0IGtF
eHBySTY0QXRvbWljQW5kID0gMHgyZDsKK2xldCBrRXhwckk2NEF0b21pY0FuZDhVID0gMHgzMDsK
K2xldCBrRXhwckk2NEF0b21pY0FuZDE2VSA9IDB4MzE7CitsZXQga0V4cHJJNjRBdG9taWNBbmQz
MlUgPSAweDMyOworbGV0IGtFeHBySTY0QXRvbWljT3IgPSAweDM0OworbGV0IGtFeHBySTY0QXRv
bWljT3I4VSA9IDB4Mzc7CitsZXQga0V4cHJJNjRBdG9taWNPcjE2VSA9IDB4Mzg7CitsZXQga0V4
cHJJNjRBdG9taWNPcjMyVSA9IDB4Mzk7CitsZXQga0V4cHJJNjRBdG9taWNYb3IgPSAweDNiOwor
bGV0IGtFeHBySTY0QXRvbWljWG9yOFUgPSAweDNlOworbGV0IGtFeHBySTY0QXRvbWljWG9yMTZV
ID0gMHgzZjsKK2xldCBrRXhwckk2NEF0b21pY1hvcjMyVSA9IDB4NDA7CitsZXQga0V4cHJJNjRB
dG9taWNFeGNoYW5nZSA9IDB4NDI7CitsZXQga0V4cHJJNjRBdG9taWNFeGNoYW5nZThVID0gMHg0
NTsKK2xldCBrRXhwckk2NEF0b21pY0V4Y2hhbmdlMTZVID0gMHg0NjsKK2xldCBrRXhwckk2NEF0
b21pY0V4Y2hhbmdlMzJVID0gMHg0NzsKK2xldCBrRXhwckk2NEF0b21pY0NvbXBhcmVFeGNoYW5n
ZSA9IDB4NDkKK2xldCBrRXhwckk2NEF0b21pY0NvbXBhcmVFeGNoYW5nZThVID0gMHg0YzsKK2xl
dCBrRXhwckk2NEF0b21pY0NvbXBhcmVFeGNoYW5nZTE2VSA9IDB4NGQ7CitsZXQga0V4cHJJNjRB
dG9taWNDb21wYXJlRXhjaGFuZ2UzMlUgPSAweDRlOworCisvLyBTaW1kIG9wY29kZXMuCitsZXQg
a0V4cHJTMTI4TG9hZE1lbSA9IDB4MDA7CitsZXQga0V4cHJTMTI4TG9hZDh4OFMgPSAweDAxOwor
bGV0IGtFeHByUzEyOExvYWQ4eDhVID0gMHgwMjsKK2xldCBrRXhwclMxMjhMb2FkMTZ4NFMgPSAw
eDAzOworbGV0IGtFeHByUzEyOExvYWQxNng0VSA9IDB4MDQ7CitsZXQga0V4cHJTMTI4TG9hZDMy
eDJTID0gMHgwNTsKK2xldCBrRXhwclMxMjhMb2FkMzJ4MlUgPSAweDA2OworbGV0IGtFeHByUzEy
OExvYWQ4U3BsYXQgPSAweDA3OworbGV0IGtFeHByUzEyOExvYWQxNlNwbGF0ID0gMHgwODsKK2xl
dCBrRXhwclMxMjhMb2FkMzJTcGxhdCA9IDB4MDk7CitsZXQga0V4cHJTMTI4TG9hZDY0U3BsYXQg
PSAweDBhOworbGV0IGtFeHByUzEyOFN0b3JlTWVtID0gMHgwYjsKK2xldCBrRXhwclMxMjhDb25z
dCA9IDB4MGM7CitsZXQga0V4cHJJOHgxNlNodWZmbGUgPSAweDBkOworbGV0IGtFeHBySTh4MTZT
d2l6emxlID0gMHgwZTsKKworbGV0IGtFeHBySTh4MTZTcGxhdCA9IDB4MGY7CitsZXQga0V4cHJJ
MTZ4OFNwbGF0ID0gMHgxMDsKK2xldCBrRXhwckkzMng0U3BsYXQgPSAweDExOworbGV0IGtFeHBy
STY0eDJTcGxhdCA9IDB4MTI7CitsZXQga0V4cHJGMzJ4NFNwbGF0ID0gMHgxMzsKK2xldCBrRXhw
ckY2NHgyU3BsYXQgPSAweDE0OworbGV0IGtFeHBySTh4MTZFeHRyYWN0TGFuZVMgPSAweDE1Owor
bGV0IGtFeHBySTh4MTZFeHRyYWN0TGFuZVUgPSAweDE2OworbGV0IGtFeHBySTh4MTZSZXBsYWNl
TGFuZSA9IDB4MTc7CitsZXQga0V4cHJJMTZ4OEV4dHJhY3RMYW5lUyA9IDB4MTg7CitsZXQga0V4
cHJJMTZ4OEV4dHJhY3RMYW5lVSA9IDB4MTk7CitsZXQga0V4cHJJMTZ4OFJlcGxhY2VMYW5lID0g
MHgxYTsKK2xldCBrRXhwckkzMng0RXh0cmFjdExhbmUgPSAweDFiOworbGV0IGtFeHBySTMyeDRS
ZXBsYWNlTGFuZSA9IDB4MWM7CitsZXQga0V4cHJJNjR4MkV4dHJhY3RMYW5lID0gMHgxZDsKK2xl
dCBrRXhwckk2NHgyUmVwbGFjZUxhbmUgPSAweDFlOworbGV0IGtFeHByRjMyeDRFeHRyYWN0TGFu
ZSA9IDB4MWY7CitsZXQga0V4cHJGMzJ4NFJlcGxhY2VMYW5lID0gMHgyMDsKK2xldCBrRXhwckY2
NHgyRXh0cmFjdExhbmUgPSAweDIxOworbGV0IGtFeHByRjY0eDJSZXBsYWNlTGFuZSA9IDB4MjI7
CitsZXQga0V4cHJJOHgxNkVxID0gMHgyMzsKK2xldCBrRXhwckk4eDE2TmUgPSAweDI0OworbGV0
IGtFeHBySTh4MTZMdFMgPSAweDI1OworbGV0IGtFeHBySTh4MTZMdFUgPSAweDI2OworbGV0IGtF
eHBySTh4MTZHdFMgPSAweDI3OworbGV0IGtFeHBySTh4MTZHdFUgPSAweDI4OworbGV0IGtFeHBy
STh4MTZMZVMgPSAweDI5OworbGV0IGtFeHBySTh4MTZMZVUgPSAweDJhOworbGV0IGtFeHBySTh4
MTZHZVMgPSAweDJiOworbGV0IGtFeHBySTh4MTZHZVUgPSAweDJjOworbGV0IGtFeHBySTE2eDhF
cSA9IDB4MmQ7CitsZXQga0V4cHJJMTZ4OE5lID0gMHgyZTsKK2xldCBrRXhwckkxNng4THRTID0g
MHgyZjsKK2xldCBrRXhwckkxNng4THRVID0gMHgzMDsKK2xldCBrRXhwckkxNng4R3RTID0gMHgz
MTsKK2xldCBrRXhwckkxNng4R3RVID0gMHgzMjsKK2xldCBrRXhwckkxNng4TGVTID0gMHgzMzsK
K2xldCBrRXhwckkxNng4TGVVID0gMHgzNDsKK2xldCBrRXhwckkxNng4R2VTID0gMHgzNTsKK2xl
dCBrRXhwckkxNng4R2VVID0gMHgzNjsKK2xldCBrRXhwckkzMng0RXEgPSAweDM3OworbGV0IGtF
eHBySTMyeDROZSA9IDB4Mzg7CitsZXQga0V4cHJJMzJ4NEx0UyA9IDB4Mzk7CitsZXQga0V4cHJJ
MzJ4NEx0VSA9IDB4M2E7CitsZXQga0V4cHJJMzJ4NEd0UyA9IDB4M2I7CitsZXQga0V4cHJJMzJ4
NEd0VSA9IDB4M2M7CitsZXQga0V4cHJJMzJ4NExlUyA9IDB4M2Q7CitsZXQga0V4cHJJMzJ4NExl
VSA9IDB4M2U7CitsZXQga0V4cHJJMzJ4NEdlUyA9IDB4M2Y7CitsZXQga0V4cHJJMzJ4NEdlVSA9
IDB4NDA7CitsZXQga0V4cHJGMzJ4NEVxID0gMHg0MTsKK2xldCBrRXhwckYzMng0TmUgPSAweDQy
OworbGV0IGtFeHByRjMyeDRMdCA9IDB4NDM7CitsZXQga0V4cHJGMzJ4NEd0ID0gMHg0NDsKK2xl
dCBrRXhwckYzMng0TGUgPSAweDQ1OworbGV0IGtFeHByRjMyeDRHZSA9IDB4NDY7CitsZXQga0V4
cHJGNjR4MkVxID0gMHg0NzsKK2xldCBrRXhwckY2NHgyTmUgPSAweDQ4OworbGV0IGtFeHByRjY0
eDJMdCA9IDB4NDk7CitsZXQga0V4cHJGNjR4Mkd0ID0gMHg0YTsKK2xldCBrRXhwckY2NHgyTGUg
PSAweDRiOworbGV0IGtFeHByRjY0eDJHZSA9IDB4NGM7CitsZXQga0V4cHJTMTI4Tm90ID0gMHg0
ZDsKK2xldCBrRXhwclMxMjhBbmQgPSAweDRlOworbGV0IGtFeHByUzEyOEFuZE5vdCA9IDB4NGY7
CitsZXQga0V4cHJTMTI4T3IgPSAweDUwOworbGV0IGtFeHByUzEyOFhvciA9IDB4NTE7CitsZXQg
a0V4cHJTMTI4U2VsZWN0ID0gMHg1MjsKK2xldCBrRXhwclYxMjhBbnlUcnVlID0gMHg1MzsKK2xl
dCBrRXhwclMxMjhMb2FkOExhbmUgPSAweDU0OworbGV0IGtFeHByUzEyOExvYWQxNkxhbmUgPSAw
eDU1OworbGV0IGtFeHByUzEyOExvYWQzMkxhbmUgPSAweDU2OworbGV0IGtFeHByUzEyOExvYWQ2
NExhbmUgPSAweDU3OworbGV0IGtFeHByUzEyOFN0b3JlOExhbmUgPSAweDU4OworbGV0IGtFeHBy
UzEyOFN0b3JlMTZMYW5lID0gMHg1OTsKK2xldCBrRXhwclMxMjhTdG9yZTMyTGFuZSA9IDB4NWE7
CitsZXQga0V4cHJTMTI4U3RvcmU2NExhbmUgPSAweDViOworbGV0IGtFeHByUzEyOExvYWQzMlpl
cm8gPSAweDVjOworbGV0IGtFeHByUzEyOExvYWQ2NFplcm8gPSAweDVkOworbGV0IGtFeHByRjMy
eDREZW1vdGVGNjR4Mlplcm8gPSAweDVlOworbGV0IGtFeHByRjY0eDJQcm9tb3RlTG93RjMyeDQg
PSAweDVmOworbGV0IGtFeHBySTh4MTZBYnMgPSAweDYwOworbGV0IGtFeHBySTh4MTZOZWcgPSAw
eDYxOworbGV0IGtFeHBySTh4MTZQb3BjbnQgPSAweDYyOworbGV0IGtFeHBySTh4MTZBbGxUcnVl
ID0gMHg2MzsKK2xldCBrRXhwckk4eDE2Qml0TWFzayA9IDB4NjQ7CitsZXQga0V4cHJJOHgxNlND
b252ZXJ0STE2eDggPSAweDY1OworbGV0IGtFeHBySTh4MTZVQ29udmVydEkxNng4ID0gMHg2NjsK
K2xldCBrRXhwckYzMng0Q2VpbCA9IDB4Njc7CitsZXQga0V4cHJGMzJ4NEZsb29yID0gMHg2ODsK
K2xldCBrRXhwckYzMng0VHJ1bmMgPSAweDY5OworbGV0IGtFeHByRjMyeDROZWFyZXN0SW50ID0g
MHg2YTsKK2xldCBrRXhwckk4eDE2U2hsID0gMHg2YjsKK2xldCBrRXhwckk4eDE2U2hyUyA9IDB4
NmM7CitsZXQga0V4cHJJOHgxNlNoclUgPSAweDZkOworbGV0IGtFeHBySTh4MTZBZGQgPSAweDZl
OworbGV0IGtFeHBySTh4MTZBZGRTYXRTID0gMHg2ZjsKK2xldCBrRXhwckk4eDE2QWRkU2F0VSA9
IDB4NzA7CitsZXQga0V4cHJJOHgxNlN1YiA9IDB4NzE7CitsZXQga0V4cHJJOHgxNlN1YlNhdFMg
PSAweDcyOworbGV0IGtFeHBySTh4MTZTdWJTYXRVID0gMHg3MzsKK2xldCBrRXhwckY2NHgyQ2Vp
bCA9IDB4NzQ7CitsZXQga0V4cHJGNjR4MkZsb29yID0gMHg3NTsKK2xldCBrRXhwckk4eDE2TWlu
UyA9IDB4NzY7CitsZXQga0V4cHJJOHgxNk1pblUgPSAweDc3OworbGV0IGtFeHBySTh4MTZNYXhT
ID0gMHg3ODsKK2xldCBrRXhwckk4eDE2TWF4VSA9IDB4Nzk7CitsZXQga0V4cHJGNjR4MlRydW5j
ID0gMHg3YTsKK2xldCBrRXhwckk4eDE2Um91bmRpbmdBdmVyYWdlVSA9IDB4N2I7CitsZXQga0V4
cHJJMTZ4OEV4dEFkZFBhaXJ3aXNlSTh4MTZTID0gMHg3YzsKK2xldCBrRXhwckkxNng4RXh0QWRk
UGFpcndpc2VJOHgxNlUgPSAweDdkOworbGV0IGtFeHBySTMyeDRFeHRBZGRQYWlyd2lzZUkxNng4
UyA9IDB4N2U7CitsZXQga0V4cHJJMzJ4NEV4dEFkZFBhaXJ3aXNlSTE2eDhVID0gMHg3ZjsKK2xl
dCBrRXhwckkxNng4QWJzID0gMHg4MDsKK2xldCBrRXhwckkxNng4TmVnID0gMHg4MTsKK2xldCBr
RXhwckkxNng4UTE1TXVsUlNhdFMgPSAweDgyOworbGV0IGtFeHBySTE2eDhBbGxUcnVlID0gMHg4
MzsKK2xldCBrRXhwckkxNng4Qml0TWFzayA9IDB4ODQ7CitsZXQga0V4cHJJMTZ4OFNDb252ZXJ0
STMyeDQgPSAweDg1OworbGV0IGtFeHBySTE2eDhVQ29udmVydEkzMng0ID0gMHg4NjsKK2xldCBr
RXhwckkxNng4U0NvbnZlcnRJOHgxNkxvdyA9IDB4ODc7CitsZXQga0V4cHJJMTZ4OFNDb252ZXJ0
STh4MTZIaWdoID0gMHg4ODsKK2xldCBrRXhwckkxNng4VUNvbnZlcnRJOHgxNkxvdyA9IDB4ODk7
CitsZXQga0V4cHJJMTZ4OFVDb252ZXJ0STh4MTZIaWdoID0gMHg4YTsKK2xldCBrRXhwckkxNng4
U2hsID0gMHg4YjsKK2xldCBrRXhwckkxNng4U2hyUyA9IDB4OGM7CitsZXQga0V4cHJJMTZ4OFNo
clUgPSAweDhkOworbGV0IGtFeHBySTE2eDhBZGQgPSAweDhlOworbGV0IGtFeHBySTE2eDhBZGRT
YXRTID0gMHg4ZjsKK2xldCBrRXhwckkxNng4QWRkU2F0VSA9IDB4OTA7CitsZXQga0V4cHJJMTZ4
OFN1YiA9IDB4OTE7CitsZXQga0V4cHJJMTZ4OFN1YlNhdFMgPSAweDkyOworbGV0IGtFeHBySTE2
eDhTdWJTYXRVID0gMHg5MzsKK2xldCBrRXhwckY2NHgyTmVhcmVzdEludCA9IDB4OTQ7CitsZXQg
a0V4cHJJMTZ4OE11bCA9IDB4OTU7CitsZXQga0V4cHJJMTZ4OE1pblMgPSAweDk2OworbGV0IGtF
eHBySTE2eDhNaW5VID0gMHg5NzsKK2xldCBrRXhwckkxNng4TWF4UyA9IDB4OTg7CitsZXQga0V4
cHJJMTZ4OE1heFUgPSAweDk5OworbGV0IGtFeHBySTE2eDhSb3VuZGluZ0F2ZXJhZ2VVID0gMHg5
YjsKK2xldCBrRXhwckkxNng4RXh0TXVsTG93STh4MTZTID0gMHg5YzsKK2xldCBrRXhwckkxNng4
RXh0TXVsSGlnaEk4eDE2UyA9IDB4OWQ7CitsZXQga0V4cHJJMTZ4OEV4dE11bExvd0k4eDE2VSA9
IDB4OWU7CitsZXQga0V4cHJJMTZ4OEV4dE11bEhpZ2hJOHgxNlUgPSAweDlmOworbGV0IGtFeHBy
STMyeDRBYnMgPSAweGEwOworbGV0IGtFeHBySTMyeDROZWcgPSAweGExOworbGV0IGtFeHBySTMy
eDRBbGxUcnVlID0gMHhhMzsKK2xldCBrRXhwckkzMng0Qml0TWFzayA9IDB4YTQ7CitsZXQga0V4
cHJJMzJ4NFNDb252ZXJ0STE2eDhMb3cgPSAweGE3OworbGV0IGtFeHBySTMyeDRTQ29udmVydEkx
Nng4SGlnaCA9IDB4YTg7CitsZXQga0V4cHJJMzJ4NFVDb252ZXJ0STE2eDhMb3cgPSAweGE5Owor
bGV0IGtFeHBySTMyeDRVQ29udmVydEkxNng4SGlnaCA9IDB4YWE7CitsZXQga0V4cHJJMzJ4NFNo
bCA9IDB4YWI7CitsZXQga0V4cHJJMzJ4NFNoclMgPSAweGFjOworbGV0IGtFeHBySTMyeDRTaHJV
ID0gMHhhZDsKK2xldCBrRXhwckkzMng0QWRkID0gMHhhZTsKK2xldCBrRXhwckkzMng0U3ViID0g
MHhiMTsKK2xldCBrRXhwckkzMng0TXVsID0gMHhiNTsKK2xldCBrRXhwckkzMng0TWluUyA9IDB4
YjY7CitsZXQga0V4cHJJMzJ4NE1pblUgPSAweGI3OworbGV0IGtFeHBySTMyeDRNYXhTID0gMHhi
ODsKK2xldCBrRXhwckkzMng0TWF4VSA9IDB4Yjk7CitsZXQga0V4cHJJMzJ4NERvdEkxNng4UyA9
IDB4YmE7CitsZXQga0V4cHJJMzJ4NEV4dE11bExvd0kxNng4UyA9IDB4YmM7CitsZXQga0V4cHJJ
MzJ4NEV4dE11bEhpZ2hJMTZ4OFMgPSAweGJkOworbGV0IGtFeHBySTMyeDRFeHRNdWxMb3dJMTZ4
OFUgPSAweGJlOworbGV0IGtFeHBySTMyeDRFeHRNdWxIaWdoSTE2eDhVID0gMHhiZjsKK2xldCBr
RXhwckk2NHgyQWJzID0gMHhjMDsKK2xldCBrRXhwckk2NHgyTmVnID0gMHhjMTsKK2xldCBrRXhw
ckk2NHgyQWxsVHJ1ZSA9IDB4YzM7CitsZXQga0V4cHJJNjR4MkJpdE1hc2sgPSAweGM0OworbGV0
IGtFeHBySTY0eDJTQ29udmVydEkzMng0TG93ID0gMHhjNzsKK2xldCBrRXhwckk2NHgyU0NvbnZl
cnRJMzJ4NEhpZ2ggPSAweGM4OworbGV0IGtFeHBySTY0eDJVQ29udmVydEkzMng0TG93ID0gMHhj
OTsKK2xldCBrRXhwckk2NHgyVUNvbnZlcnRJMzJ4NEhpZ2ggPSAweGNhOworbGV0IGtFeHBySTY0
eDJTaGwgPSAweGNiOworbGV0IGtFeHBySTY0eDJTaHJTID0gMHhjYzsKK2xldCBrRXhwckk2NHgy
U2hyVSA9IDB4Y2Q7CitsZXQga0V4cHJJNjR4MkFkZCA9IDB4Y2U7CitsZXQga0V4cHJJNjR4MlN1
YiA9IDB4ZDE7CitsZXQga0V4cHJJNjR4Mk11bCA9IDB4ZDU7CitsZXQga0V4cHJJNjR4MkVxID0g
MHhkNjsKK2xldCBrRXhwckk2NHgyTmUgPSAweGQ3OworbGV0IGtFeHBySTY0eDJMdFMgPSAweGQ4
OworbGV0IGtFeHBySTY0eDJHdFMgPSAweGQ5OworbGV0IGtFeHBySTY0eDJMZVMgPSAweGRhOwor
bGV0IGtFeHBySTY0eDJHZVMgPSAweGRiOworbGV0IGtFeHBySTY0eDJFeHRNdWxMb3dJMzJ4NFMg
PSAweGRjOworbGV0IGtFeHBySTY0eDJFeHRNdWxIaWdoSTMyeDRTID0gMHhkZDsKK2xldCBrRXhw
ckk2NHgyRXh0TXVsTG93STMyeDRVID0gMHhkZTsKK2xldCBrRXhwckk2NHgyRXh0TXVsSGlnaEkz
Mng0VSA9IDB4ZGY7CitsZXQga0V4cHJGMzJ4NEFicyA9IDB4ZTA7CitsZXQga0V4cHJGMzJ4NE5l
ZyA9IDB4ZTE7CitsZXQga0V4cHJGMzJ4NFNxcnQgPSAweGUzOworbGV0IGtFeHByRjMyeDRBZGQg
PSAweGU0OworbGV0IGtFeHByRjMyeDRTdWIgPSAweGU1OworbGV0IGtFeHByRjMyeDRNdWwgPSAw
eGU2OworbGV0IGtFeHByRjMyeDREaXYgPSAweGU3OworbGV0IGtFeHByRjMyeDRNaW4gPSAweGU4
OworbGV0IGtFeHByRjMyeDRNYXggPSAweGU5OworbGV0IGtFeHByRjMyeDRQbWluID0gMHhlYTsK
K2xldCBrRXhwckYzMng0UG1heCA9IDB4ZWI7CitsZXQga0V4cHJGNjR4MkFicyA9IDB4ZWM7Cits
ZXQga0V4cHJGNjR4Mk5lZyA9IDB4ZWQ7CitsZXQga0V4cHJGNjR4MlNxcnQgPSAweGVmOworbGV0
IGtFeHByRjY0eDJBZGQgPSAweGYwOworbGV0IGtFeHByRjY0eDJTdWIgPSAweGYxOworbGV0IGtF
eHByRjY0eDJNdWwgPSAweGYyOworbGV0IGtFeHByRjY0eDJEaXYgPSAweGYzOworbGV0IGtFeHBy
RjY0eDJNaW4gPSAweGY0OworbGV0IGtFeHByRjY0eDJNYXggPSAweGY1OworbGV0IGtFeHByRjY0
eDJQbWluID0gMHhmNjsKK2xldCBrRXhwckY2NHgyUG1heCA9IDB4Zjc7CitsZXQga0V4cHJJMzJ4
NFNDb252ZXJ0RjMyeDQgPSAweGY4OworbGV0IGtFeHBySTMyeDRVQ29udmVydEYzMng0ID0gMHhm
OTsKK2xldCBrRXhwckYzMng0U0NvbnZlcnRJMzJ4NCA9IDB4ZmE7CitsZXQga0V4cHJGMzJ4NFVD
b252ZXJ0STMyeDQgPSAweGZiOworbGV0IGtFeHBySTMyeDRUcnVuY1NhdEY2NHgyU1plcm8gPSAw
eGZjOworbGV0IGtFeHBySTMyeDRUcnVuY1NhdEY2NHgyVVplcm8gPSAweGZkOworbGV0IGtFeHBy
RjY0eDJDb252ZXJ0TG93STMyeDRTID0gMHhmZTsKK2xldCBrRXhwckY2NHgyQ29udmVydExvd0kz
Mng0VSA9IDB4ZmY7CisKKy8vIENvbXBpbGF0aW9uIGhpbnQgY29uc3RhbnRzLgorbGV0IGtDb21w
aWxhdGlvbkhpbnRTdHJhdGVneURlZmF1bHQgPSAweDAwOworbGV0IGtDb21waWxhdGlvbkhpbnRT
dHJhdGVneUxhenkgPSAweDAxOworbGV0IGtDb21waWxhdGlvbkhpbnRTdHJhdGVneUVhZ2VyID0g
MHgwMjsKK2xldCBrQ29tcGlsYXRpb25IaW50U3RyYXRlZ3lMYXp5QmFzZWxpbmVFYWdlclRvcFRp
ZXIgPSAweDAzOworbGV0IGtDb21waWxhdGlvbkhpbnRUaWVyRGVmYXVsdCA9IDB4MDA7CitsZXQg
a0NvbXBpbGF0aW9uSGludFRpZXJCYXNlbGluZSA9IDB4MDE7CitsZXQga0NvbXBpbGF0aW9uSGlu
dFRpZXJPcHRpbWl6ZWQgPSAweDAyOworCitsZXQga1RyYXBVbnJlYWNoYWJsZSA9IDA7CitsZXQg
a1RyYXBNZW1PdXRPZkJvdW5kcyA9IDE7CitsZXQga1RyYXBEaXZCeVplcm8gPSAyOworbGV0IGtU
cmFwRGl2VW5yZXByZXNlbnRhYmxlID0gMzsKK2xldCBrVHJhcFJlbUJ5WmVybyA9IDQ7CitsZXQg
a1RyYXBGbG9hdFVucmVwcmVzZW50YWJsZSA9IDU7CitsZXQga1RyYXBUYWJsZU91dE9mQm91bmRz
ID0gNjsKK2xldCBrVHJhcEZ1bmNTaWdNaXNtYXRjaCA9IDc7CitsZXQga1RyYXBVbmFsaWduZWRB
Y2Nlc3MgPSA4OworbGV0IGtUcmFwRGF0YVNlZ21lbnREcm9wcGVkID0gOTsKK2xldCBrVHJhcEVs
ZW1TZWdtZW50RHJvcHBlZCA9IDEwOworbGV0IGtUcmFwUmV0aHJvd051bGwgPSAxMTsKKworbGV0
IGtUcmFwTXNncyA9IFsKKyAgL1VucmVhY2hhYmxlLywgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAtLQorICAnbWVtb3J5IGFjY2VzcyBvdXQgb2YgYm91bmRzJywgICAgICAg
ICAgICAgICAgICAgIC8vIC0tCisgIC9EaXZpc2lvbiBieSB6ZXJvLywgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gLS0KKyAgJ2RpdmlkZSByZXN1bHQgdW5yZXByZXNlbnRhYmxlJywg
ICAgICAgICAgICAgICAgICAvLyAtLQorICAncmVtYWluZGVyIGJ5IHplcm8nLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdmbG9hdCB1bnJlcHJlc2VudGFibGUgaW4gaW50
ZWdlciByYW5nZScsICAgICAgICAgLy8gLS0KKyAgJ3RhYmxlIGluZGV4IGlzIG91dCBvZiBib3Vu
ZHMnLCAgICAgICAgICAgICAgICAgICAvLyAtLQorICAnbnVsbCBmdW5jdGlvbiBvciBmdW5jdGlv
biBzaWduYXR1cmUgbWlzbWF0Y2gnLCAgIC8vIC0tCisgICdvcGVyYXRpb24gZG9lcyBub3Qgc3Vw
cG9ydCB1bmFsaWduZWQgYWNjZXNzZXMnLCAgLy8gLS0KKyAgJ2RhdGEgc2VnbWVudCBoYXMgYmVl
biBkcm9wcGVkJywgICAgICAgICAgICAgICAgICAvLyAtLQorICAnZWxlbWVudCBzZWdtZW50IGhh
cyBiZWVuIGRyb3BwZWQnLCAgICAgICAgICAgICAgIC8vIC0tCisgICdyZXRocm93aW5nIG51bGwg
dmFsdWUnICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0KK107CisKKy8vIFRoaXMgcmVx
dWlyZXMgdGVzdC9tanN1bml0L21qc3VuaXQuanMuCitmdW5jdGlvbiBhc3NlcnRUcmFwcyh0cmFw
LCBjb2RlKSB7CisgIGFzc2VydFRocm93cyhjb2RlLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3Is
IGtUcmFwTXNnc1t0cmFwXSk7Cit9CisKK2NsYXNzIEJpbmFyeSB7CisgIGNvbnN0cnVjdG9yKCkg
eworICAgIHRoaXMubGVuZ3RoID0gMDsKKyAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5
KDgxOTIpOworICB9CisKKyAgZW5zdXJlX3NwYWNlKG5lZWRlZCkgeworICAgIGlmICh0aGlzLmJ1
ZmZlci5sZW5ndGggLSB0aGlzLmxlbmd0aCA+PSBuZWVkZWQpIHJldHVybjsKKyAgICBsZXQgbmV3
X2NhcGFjaXR5ID0gdGhpcy5idWZmZXIubGVuZ3RoICogMjsKKyAgICB3aGlsZSAobmV3X2NhcGFj
aXR5IC0gdGhpcy5sZW5ndGggPCBuZWVkZWQpIG5ld19jYXBhY2l0eSAqPSAyOworICAgIGxldCBu
ZXdfYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkobmV3X2NhcGFjaXR5KTsKKyAgICBuZXdfYnVmZmVy
LnNldCh0aGlzLmJ1ZmZlcik7CisgICAgdGhpcy5idWZmZXIgPSBuZXdfYnVmZmVyOworICB9CisK
KyAgdHJ1bmNfYnVmZmVyKCkgeworICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZl
ci5idWZmZXIsIDAsIHRoaXMubGVuZ3RoKTsKKyAgfQorCisgIHJlc2V0KCkgeworICAgIHRoaXMu
bGVuZ3RoID0gMDsKKyAgfQorCisgIGVtaXRfdTgodmFsKSB7CisgICAgdGhpcy5lbnN1cmVfc3Bh
Y2UoMSk7CisgICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWw7CisgIH0KKworICBl
bWl0X3UxNih2YWwpIHsKKyAgICB0aGlzLmVuc3VyZV9zcGFjZSgyKTsKKyAgICB0aGlzLmJ1ZmZl
clt0aGlzLmxlbmd0aCsrXSA9IHZhbDsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9
IHZhbCA+PiA4OworICB9CisKKyAgZW1pdF91MzIodmFsKSB7CisgICAgdGhpcy5lbnN1cmVfc3Bh
Y2UoNCk7CisgICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWw7CisgICAgdGhpcy5i
dWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWwgPj4gODsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxl
bmd0aCsrXSA9IHZhbCA+PiAxNjsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZh
bCA+PiAyNDsKKyAgfQorCisgIGVtaXRfbGViX3UodmFsLCBtYXhfbGVuKSB7CisgICAgdGhpcy5l
bnN1cmVfc3BhY2UobWF4X2xlbik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhfbGVuOyAr
K2kpIHsKKyAgICAgIGxldCB2ID0gdmFsICYgMHhmZjsKKyAgICAgIHZhbCA9IHZhbCA+Pj4gNzsK
KyAgICAgIGlmICh2YWwgPT0gMCkgeworICAgICAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsr
XSA9IHY7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHRoaXMuYnVmZmVyW3RoaXMu
bGVuZ3RoKytdID0gdiB8IDB4ODA7CisgICAgfQorICAgIHRocm93IG5ldyBFcnJvcignTGViIHZh
bHVlIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJyArIG1heF9sZW4pOworICB9CisKKyAgZW1p
dF91MzJ2KHZhbCkgeworICAgIHRoaXMuZW1pdF9sZWJfdSh2YWwsIGtNYXhWYXJJbnQzMlNpemUp
OworICB9CisKKyAgZW1pdF91NjR2KHZhbCkgeworICAgIHRoaXMuZW1pdF9sZWJfdSh2YWwsIGtN
YXhWYXJJbnQ2NFNpemUpOworICB9CisKKyAgZW1pdF9ieXRlcyhkYXRhKSB7CisgICAgdGhpcy5l
bnN1cmVfc3BhY2UoZGF0YS5sZW5ndGgpOworICAgIHRoaXMuYnVmZmVyLnNldChkYXRhLCB0aGlz
Lmxlbmd0aCk7CisgICAgdGhpcy5sZW5ndGggKz0gZGF0YS5sZW5ndGg7CisgIH0KKworICBlbWl0
X3N0cmluZyhzdHJpbmcpIHsKKyAgICAvLyBXaGVuIHRlc3RpbmcgaWxsZWdhbCBuYW1lcywgd2Ug
cGFzcyBhIGJ5dGUgYXJyYXkgZGlyZWN0bHkuCisgICAgaWYgKHN0cmluZyBpbnN0YW5jZW9mIEFy
cmF5KSB7CisgICAgICB0aGlzLmVtaXRfdTMydihzdHJpbmcubGVuZ3RoKTsKKyAgICAgIHRoaXMu
ZW1pdF9ieXRlcyhzdHJpbmcpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMg
aXMgdGhlIGhhY2t5IHdheSB0byBjb252ZXJ0IGEgSmF2YVNjcmlwdCBzdHJpbmcgdG8gYSBVVEY4
IGVuY29kZWQKKyAgICAvLyBzdHJpbmcgb25seSBjb250YWluaW5nIHNpbmdsZS1ieXRlIGNoYXJh
Y3RlcnMuCisgICAgbGV0IHN0cmluZ191dGY4ID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50
KHN0cmluZykpOworICAgIHRoaXMuZW1pdF91MzJ2KHN0cmluZ191dGY4Lmxlbmd0aCk7CisgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdfdXRmOC5sZW5ndGg7IGkrKykgeworICAgICAgdGhp
cy5lbWl0X3U4KHN0cmluZ191dGY4LmNoYXJDb2RlQXQoaSkpOworICAgIH0KKyAgfQorCisgIGVt
aXRfaGVhcF90eXBlKGhlYXBfdHlwZSkgeworICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNtU2lnbmVk
TGViKGhlYXBfdHlwZSwga01heFZhckludDMyU2l6ZSkpOworICB9CisKKyAgZW1pdF90eXBlKHR5
cGUpIHsKKyAgICBpZiAoKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVyJykgeworICAgICAgdGhpcy5l
bWl0X3U4KHR5cGUgPj0gMCA/IHR5cGUgOiB0eXBlICYga0xlYjEyOE1hc2spOworICAgIH0gZWxz
ZSB7CisgICAgICB0aGlzLmVtaXRfdTgodHlwZS5vcGNvZGUpOworICAgICAgaWYgKCdkZXB0aCcg
aW4gdHlwZSkgdGhpcy5lbWl0X3U4KHR5cGUuZGVwdGgpOworICAgICAgdGhpcy5lbWl0X2hlYXBf
dHlwZSh0eXBlLmhlYXBfdHlwZSk7CisgICAgfQorICB9CisKKyAgZW1pdF9pbml0X2V4cHJfcmVj
dXJzaXZlKGV4cHIpIHsKKyAgICBzd2l0Y2ggKGV4cHIua2luZCkgeworICAgICAgY2FzZSBrRXhw
ckdsb2JhbEdldDoKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtFeHByR2xvYmFsR2V0KTsKKyAgICAg
ICAgdGhpcy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBrRXhwckkzMkNvbnN0OgorICAgICAgICB0aGlzLmVtaXRfYnl0ZXMod2FzbUkzMkNvbnN0KGV4
cHIudmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHBySTY0Q29uc3Q6Cisg
ICAgICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNtSTY0Q29uc3QoZXhwci52YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJGMzJDb25zdDoKKyAgICAgICAgdGhpcy5lbWl0X2J5
dGVzKHdhc21GMzJDb25zdChleHByLnZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBrRXhwckY2NENvbnN0OgorICAgICAgICB0aGlzLmVtaXRfYnl0ZXMod2FzbUY2NENvbnN0KGV4
cHIudmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtTaW1kUHJlZml4OgorICAg
ICAgICB0aGlzLmVtaXRfYnl0ZXMod2FzbVMxMjhDb25zdChleHByLnZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBrRXhwclJlZkZ1bmM6CisgICAgICAgIHRoaXMuZW1pdF91OChr
RXhwclJlZkZ1bmMpOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByUmVmTnVsbDoKKyAgICAgICAgdGhpcy5lbWl0X3U4
KGtFeHByUmVmTnVsbCk7CisgICAgICAgIHRoaXMuZW1pdF9oZWFwX3R5cGUoZXhwci52YWx1ZSk7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwclN0cnVjdE5ldzoKKyAgICAgIGNhc2Ug
a0V4cHJTdHJ1Y3ROZXdXaXRoUnR0OgorICAgICAgY2FzZSBrRXhwclN0cnVjdE5ld0RlZmF1bHQ6
CisgICAgICBjYXNlIGtFeHByU3RydWN0TmV3RGVmYXVsdFdpdGhSdHQ6CisgICAgICAgIGZvciAo
bGV0IG9wZXJhbmQgb2YgZXhwci5vcGVyYW5kcykgeworICAgICAgICAgIHRoaXMuZW1pdF9pbml0
X2V4cHJfcmVjdXJzaXZlKG9wZXJhbmQpOworICAgICAgICB9CisgICAgICAgIHRoaXMuZW1pdF91
OChrR0NQcmVmaXgpOworICAgICAgICB0aGlzLmVtaXRfdTgoZXhwci5raW5kKTsKKyAgICAgICAg
dGhpcy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBr
RXhwckFycmF5SW5pdDoKKyAgICAgIGNhc2Uga0V4cHJBcnJheUluaXRTdGF0aWM6CisgICAgICAg
IGZvciAobGV0IG9wZXJhbmQgb2YgZXhwci5vcGVyYW5kcykgeworICAgICAgICAgIHRoaXMuZW1p
dF9pbml0X2V4cHJfcmVjdXJzaXZlKG9wZXJhbmQpOworICAgICAgICB9CisgICAgICAgIHRoaXMu
ZW1pdF91OChrR0NQcmVmaXgpOworICAgICAgICB0aGlzLmVtaXRfdTgoZXhwci5raW5kKTsKKyAg
ICAgICAgdGhpcy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIHRoaXMuZW1pdF91MzJ2
KGV4cHIub3BlcmFuZHMubGVuZ3RoIC0gMSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBr
RXhwclJ0dENhbm9uOgorICAgICAgICB0aGlzLmVtaXRfdTgoa0dDUHJlZml4KTsKKyAgICAgICAg
dGhpcy5lbWl0X3U4KGtFeHByUnR0Q2Fub24pOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHBy
LnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByUnR0U3ViOgorICAgICAg
ICB0aGlzLmVtaXRfaW5pdF9leHByX3JlY3Vyc2l2ZShleHByLnBhcmVudCk7CisgICAgICAgIHRo
aXMuZW1pdF91OChrR2NQcmVmaXgpOworICAgICAgICB0aGlzLmVtaXRfdTgoa0V4cHJSdHRTdWIp
OworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIGtFeHByUnR0RnJlc2hTdWI6CisgICAgICAgIHRoaXMuZW1pdF9pbml0X2V4cHJf
cmVjdXJzaXZlKGV4cHIucGFyZW50KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtHY1ByZWZpeCk7
CisgICAgICAgIHRoaXMuZW1pdF91OChrRXhwclJ0dEZyZXNoU3ViKTsKKyAgICAgICAgdGhpcy5l
bWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGVt
aXRfaW5pdF9leHByKGV4cHIpIHsKKyAgICB0aGlzLmVtaXRfaW5pdF9leHByX3JlY3Vyc2l2ZShl
eHByKTsKKyAgICB0aGlzLmVtaXRfdTgoa0V4cHJFbmQpOworICB9CisKKyAgZW1pdF9oZWFkZXIo
KSB7CisgICAgdGhpcy5lbWl0X2J5dGVzKFsKKyAgICAgIGtXYXNtSDAsIGtXYXNtSDEsIGtXYXNt
SDIsIGtXYXNtSDMsIGtXYXNtVjAsIGtXYXNtVjEsIGtXYXNtVjIsIGtXYXNtVjMKKyAgICBdKTsK
KyAgfQorCisgIGVtaXRfc2VjdGlvbihzZWN0aW9uX2NvZGUsIGNvbnRlbnRfZ2VuZXJhdG9yKSB7
CisgICAgLy8gRW1pdCBzZWN0aW9uIG5hbWUuCisgICAgdGhpcy5lbWl0X3U4KHNlY3Rpb25fY29k
ZSk7CisgICAgLy8gRW1pdCB0aGUgc2VjdGlvbiB0byBhIHRlbXBvcmFyeSBidWZmZXI6IGl0cyBm
dWxsIGxlbmd0aCBpc24ndCBrbm93IHlldC4KKyAgICBjb25zdCBzZWN0aW9uID0gbmV3IEJpbmFy
eTsKKyAgICBjb250ZW50X2dlbmVyYXRvcihzZWN0aW9uKTsKKyAgICAvLyBFbWl0IHNlY3Rpb24g
bGVuZ3RoLgorICAgIHRoaXMuZW1pdF91MzJ2KHNlY3Rpb24ubGVuZ3RoKTsKKyAgICAvLyBDb3B5
IHRoZSB0ZW1wb3JhcnkgYnVmZmVyLgorICAgIC8vIEF2b2lkIHNwcmVhZCBiZWNhdXNlIHtzZWN0
aW9ufSBjYW4gYmUgaHVnZS4KKyAgICB0aGlzLmVtaXRfYnl0ZXMoc2VjdGlvbi50cnVuY19idWZm
ZXIoKSk7CisgIH0KK30KKworY2xhc3MgV2FzbUZ1bmN0aW9uQnVpbGRlciB7CisgIC8vIEVuY29k
aW5nIG9mIGxvY2FsIG5hbWVzOiBhIHN0cmluZyBjb3JyZXNwb25kcyB0byBhIGxvY2FsIG5hbWUs
CisgIC8vIGEgbnVtYmVyIG4gY29ycmVzcG9uZHMgdG8gbiB1bmRlZmluZWQgbmFtZXMuCisgIGNv
bnN0cnVjdG9yKG1vZHVsZSwgbmFtZSwgdHlwZV9pbmRleCwgYXJnX25hbWVzKSB7CisgICAgdGhp
cy5tb2R1bGUgPSBtb2R1bGU7CisgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICB0aGlzLnR5cGVf
aW5kZXggPSB0eXBlX2luZGV4OworICAgIHRoaXMuYm9keSA9IFtdOworICAgIHRoaXMubG9jYWxz
ID0gW107CisgICAgdGhpcy5sb2NhbF9uYW1lcyA9IGFyZ19uYW1lczsKKyAgICB0aGlzLmJvZHlf
b2Zmc2V0ID0gdW5kZWZpbmVkOyAgLy8gTm90IHZhbGlkIHVudGlsIG1vZHVsZSBpcyBzZXJpYWxp
emVkLgorICB9CisKKyAgbnVtTG9jYWxOYW1lcygpIHsKKyAgICBsZXQgbnVtX2xvY2FsX25hbWVz
ID0gMDsKKyAgICBmb3IgKGxldCBsb2NfbmFtZSBvZiB0aGlzLmxvY2FsX25hbWVzKSB7CisgICAg
ICBpZiAodHlwZW9mIGxvY19uYW1lID09ICdzdHJpbmcnKSArK251bV9sb2NhbF9uYW1lczsKKyAg
ICB9CisgICAgcmV0dXJuIG51bV9sb2NhbF9uYW1lczsKKyAgfQorCisgIGV4cG9ydEFzKG5hbWUp
IHsKKyAgICB0aGlzLm1vZHVsZS5hZGRFeHBvcnQobmFtZSwgdGhpcy5pbmRleCk7CisgICAgcmV0
dXJuIHRoaXM7CisgIH0KKworICBleHBvcnRGdW5jKCkgeworICAgIHRoaXMuZXhwb3J0QXModGhp
cy5uYW1lKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHNldENvbXBpbGF0aW9uSGludChz
dHJhdGVneSwgYmFzZWxpbmVUaWVyLCB0b3BUaWVyKSB7CisgICAgdGhpcy5tb2R1bGUuc2V0Q29t
cGlsYXRpb25IaW50KHN0cmF0ZWd5LCBiYXNlbGluZVRpZXIsIHRvcFRpZXIsIHRoaXMuaW5kZXgp
OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRkQm9keShib2R5KSB7CisgICAgZm9yIChs
ZXQgYiBvZiBib2R5KSB7CisgICAgICBpZiAodHlwZW9mIGIgIT09ICdudW1iZXInIHx8IChiICYg
KH4weEZGKSkgIT09IDApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgICAgICAg
J2ludmFsaWQgYm9keSAoZW50cmllcyBtdXN0IGJlIDggYml0IG51bWJlcnMpOiAnICsgYm9keSk7
CisgICAgICB9CisgICAgfQorICAgIHRoaXMuYm9keSA9IGJvZHkuc2xpY2UoKTsKKyAgICAvLyBB
dXRvbWF0aWNhbGx5IGFkZCB0aGUgZW5kIGZvciB0aGUgZnVuY3Rpb24gYmxvY2sgdG8gdGhlIGJv
ZHkuCisgICAgdGhpcy5ib2R5LnB1c2goa0V4cHJFbmQpOworICAgIHJldHVybiB0aGlzOworICB9
CisKKyAgYWRkQm9keVdpdGhFbmQoYm9keSkgeworICAgIHRoaXMuYm9keSA9IGJvZHk7CisgICAg
cmV0dXJuIHRoaXM7CisgIH0KKworICBnZXROdW1Mb2NhbHMoKSB7CisgICAgbGV0IHRvdGFsX2xv
Y2FscyA9IDA7CisgICAgZm9yIChsZXQgbCBvZiB0aGlzLmxvY2FscykgeworICAgICAgdG90YWxf
bG9jYWxzICs9IGwuY291bnQKKyAgICB9CisgICAgcmV0dXJuIHRvdGFsX2xvY2FsczsKKyAgfQor
CisgIGFkZExvY2Fscyh0eXBlLCBjb3VudCwgbmFtZXMpIHsKKyAgICB0aGlzLmxvY2Fscy5wdXNo
KHt0eXBlOiB0eXBlLCBjb3VudDogY291bnR9KTsKKyAgICBuYW1lcyA9IG5hbWVzIHx8IFtdOwor
ICAgIGlmIChuYW1lcy5sZW5ndGggPiBjb3VudCkgdGhyb3cgbmV3IEVycm9yKCd0b28gbWFueSBs
b2NhbHMgbmFtZXMgZ2l2ZW4nKTsKKyAgICB0aGlzLmxvY2FsX25hbWVzLnB1c2goLi4ubmFtZXMp
OworICAgIGlmIChjb3VudCA+IG5hbWVzLmxlbmd0aCkgdGhpcy5sb2NhbF9uYW1lcy5wdXNoKGNv
dW50IC0gbmFtZXMubGVuZ3RoKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGVuZCgpIHsK
KyAgICByZXR1cm4gdGhpcy5tb2R1bGU7CisgIH0KK30KKworY2xhc3MgV2FzbUluaXRFeHByIHsK
KyAgc3RhdGljIEkzMkNvbnN0KHZhbHVlKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckkzMkNv
bnN0LCB2YWx1ZTogdmFsdWV9OworICB9CisgIHN0YXRpYyBJNjRDb25zdCh2YWx1ZSkgeworICAg
IHJldHVybiB7a2luZDoga0V4cHJJNjRDb25zdCwgdmFsdWU6IHZhbHVlfTsKKyAgfQorICBzdGF0
aWMgRjMyQ29uc3QodmFsdWUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByRjMyQ29uc3QsIHZh
bHVlOiB2YWx1ZX07CisgIH0KKyAgc3RhdGljIEY2NENvbnN0KHZhbHVlKSB7CisgICAgcmV0dXJu
IHtraW5kOiBrRXhwckY2NENvbnN0LCB2YWx1ZTogdmFsdWV9OworICB9CisgIHN0YXRpYyBTMTI4
Q29uc3QodmFsdWUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtTaW1kUHJlZml4LCB2YWx1ZTogdmFs
dWV9OworICB9CisgIHN0YXRpYyBHbG9iYWxHZXQoaW5kZXgpIHsKKyAgICByZXR1cm4ge2tpbmQ6
IGtFeHByR2xvYmFsR2V0LCB2YWx1ZTogaW5kZXh9OworICB9CisgIHN0YXRpYyBSZWZGdW5jKGlu
ZGV4KSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclJlZkZ1bmMsIHZhbHVlOiBpbmRleH07Cisg
IH0KKyAgc3RhdGljIFJlZk51bGwodHlwZSkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJSZWZO
dWxsLCB2YWx1ZTogdHlwZX07CisgIH0KKyAgc3RhdGljIFN0cnVjdE5ld1dpdGhSdHQodHlwZSwg
YXJncykgeworICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXdXaXRoUnR0LCB2YWx1ZTog
dHlwZSwgb3BlcmFuZHM6IGFyZ3N9OworICB9CisgIHN0YXRpYyBTdHJ1Y3ROZXcodHlwZSwgYXJn
cykgeworICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXcsIHZhbHVlOiB0eXBlLCBvcGVy
YW5kczogYXJnc307CisgIH0KKyAgc3RhdGljIFN0cnVjdE5ld0RlZmF1bHRXaXRoUnR0KHR5cGUs
IHJ0dCkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0V2l0aFJ0dCwg
dmFsdWU6IHR5cGUsIG9wZXJhbmRzOiBbcnR0XX07CisgIH0KKyAgc3RhdGljIFN0cnVjdE5ld0Rl
ZmF1bHQodHlwZSkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0LCB2
YWx1ZTogdHlwZSwgb3BlcmFuZHM6IFtdfTsKKyAgfQorICBzdGF0aWMgQXJyYXlJbml0KHR5cGUs
IGFyZ3MpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByQXJyYXlJbml0LCB2YWx1ZTogdHlwZSwg
b3BlcmFuZHM6IGFyZ3N9OworICB9CisgIHN0YXRpYyBBcnJheUluaXRTdGF0aWModHlwZSwgYXJn
cykgeworICAgIHJldHVybiB7a2luZDoga0V4cHJBcnJheUluaXRTdGF0aWMsIHZhbHVlOiB0eXBl
LCBvcGVyYW5kczogYXJnc307CisgIH0KKyAgc3RhdGljIFJ0dENhbm9uKHR5cGUpIHsKKyAgICBy
ZXR1cm4ge2tpbmQ6IGtFeHByUnR0Q2Fub24sIHZhbHVlOiB0eXBlfTsKKyAgfQorICBzdGF0aWMg
UnR0U3ViKHR5cGUsIHBhcmVudCkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJSdHRTdWIsIHZh
bHVlOiB0eXBlLCBwYXJlbnQ6IHBhcmVudH07CisgIH0KKyAgc3RhdGljIFJ0dEZyZXNoU3ViKHR5
cGUsIHBhcmVudCkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJSdHRGcmVzaFN1YiwgdmFsdWU6
IHR5cGUsIHBhcmVudDogcGFyZW50fTsKKyAgfQorCisgIHN0YXRpYyBkZWZhdWx0Rm9yKHR5cGUp
IHsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgIGNhc2Uga1dhc21JMzI6CisgICAgICAgIHJl
dHVybiB0aGlzLkkzMkNvbnN0KDApOworICAgICAgY2FzZSBrV2FzbUk2NDoKKyAgICAgICAgcmV0
dXJuIHRoaXMuSTY0Q29uc3QoMCk7CisgICAgICBjYXNlIGtXYXNtRjMyOgorICAgICAgICByZXR1
cm4gdGhpcy5GMzJDb25zdCgwKTsKKyAgICAgIGNhc2Uga1dhc21GNjQ6CisgICAgICAgIHJldHVy
biB0aGlzLkY2NENvbnN0KDApOworICAgICAgY2FzZSBrV2FzbVMxMjg6CisgICAgICAgIHJldHVy
biB0aGlzLlMxMjhDb25zdChuZXcgQXJyYXkoMTYpLmZpbGwoMCkpOworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgaWYgKCh0eXBlb2YgdHlwZSkgIT0gJ251bWJlcicgJiYgdHlwZS5vcGNvZGUgIT0g
a1dhc21PcHRSZWYpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vbi1kZWZhdWx0YWJs
ZSB0eXBlIik7CisgICAgICAgIH0KKyAgICAgICAgbGV0IGhlYXBfdHlwZSA9ICh0eXBlb2YgdHlw
ZSkgPT0gJ251bWJlcicgPyB0eXBlIDogdHlwZS5oZWFwX3R5cGU7CisgICAgICAgIHJldHVybiB0
aGlzLlJlZk51bGwoaGVhcF90eXBlKTsKKyAgICB9CisgIH0KK30KKworY2xhc3MgV2FzbUdsb2Jh
bEJ1aWxkZXIgeworICAvLyB7aW5pdH0gc2hvdWxkIGJlIGNvbnN0cnVjdGVkIHdpdGggV2FzbUlu
aXRFeHByLgorICBjb25zdHJ1Y3Rvcihtb2R1bGUsIHR5cGUsIG11dGFibGUsIGluaXQpIHsKKyAg
ICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIHRoaXMu
bXV0YWJsZSA9IG11dGFibGU7CisgICAgdGhpcy5pbml0ID0gaW5pdDsKKyAgfQorCisgIGV4cG9y
dEFzKG5hbWUpIHsKKyAgICB0aGlzLm1vZHVsZS5leHBvcnRzLnB1c2goCisgICAgICAgIHtuYW1l
OiBuYW1lLCBraW5kOiBrRXh0ZXJuYWxHbG9iYWwsIGluZGV4OiB0aGlzLmluZGV4fSk7CisgICAg
cmV0dXJuIHRoaXM7CisgIH0KK30KKworY2xhc3MgV2FzbVRhYmxlQnVpbGRlciB7CisgIGNvbnN0
cnVjdG9yKG1vZHVsZSwgdHlwZSwgaW5pdGlhbF9zaXplLCBtYXhfc2l6ZSwgaW5pdF9leHByKSB7
CisgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7CisgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICB0
aGlzLmluaXRpYWxfc2l6ZSA9IGluaXRpYWxfc2l6ZTsKKyAgICB0aGlzLmhhc19tYXggPSBtYXhf
c2l6ZSAhPT0gdW5kZWZpbmVkOworICAgIHRoaXMubWF4X3NpemUgPSBtYXhfc2l6ZTsKKyAgICB0
aGlzLmluaXRfZXhwciA9IGluaXRfZXhwcjsKKyAgICB0aGlzLmhhc19pbml0ID0gaW5pdF9leHBy
ICE9PSB1bmRlZmluZWQ7CisgIH0KKworICBleHBvcnRBcyhuYW1lKSB7CisgICAgdGhpcy5tb2R1
bGUuZXhwb3J0cy5wdXNoKAorICAgICAgICB7bmFtZTogbmFtZSwga2luZDoga0V4dGVybmFsVGFi
bGUsIGluZGV4OiB0aGlzLmluZGV4fSk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KK30KKworZnVu
Y3Rpb24gbWFrZUZpZWxkKHR5cGUsIG11dGFiaWxpdHkpIHsKKyAgaWYgKCh0eXBlb2YgbXV0YWJp
bGl0eSkgIT0gJ2Jvb2xlYW4nKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdmaWVsZCBtdXRhYmls
aXR5IG11c3QgYmUgYm9vbGVhbicpOworICB9CisgIHJldHVybiB7dHlwZTogdHlwZSwgbXV0YWJp
bGl0eTogbXV0YWJpbGl0eX07Cit9CisKK2NsYXNzIFdhc21TdHJ1Y3QgeworICBjb25zdHJ1Y3Rv
cihmaWVsZHMpIHsKKyAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGRzKSkgeworICAgICAgdGhy
b3cgbmV3IEVycm9yKCdzdHJ1Y3QgZmllbGRzIG11c3QgYmUgYW4gYXJyYXknKTsKKyAgICB9Cisg
ICAgdGhpcy5maWVsZHMgPSBmaWVsZHM7CisgICAgdGhpcy50eXBlX2Zvcm0gPSBrV2FzbVN0cnVj
dFR5cGVGb3JtOworICB9Cit9CisKK2NsYXNzIFdhc21TdHJ1Y3RTdWJ0eXBlIGV4dGVuZHMgV2Fz
bVN0cnVjdCB7CisgIGNvbnN0cnVjdG9yKGZpZWxkcywgc3VwZXJ0eXBlX2lkeCkgeworICAgIHN1
cGVyKGZpZWxkcyk7CisgICAgdGhpcy5zdXBlcnR5cGUgPSBzdXBlcnR5cGVfaWR4OworICAgIHRo
aXMudHlwZV9mb3JtID0ga1dhc21TdHJ1Y3RTdWJ0eXBlRm9ybTsKKyAgfQorfQorCitjbGFzcyBX
YXNtQXJyYXkgeworICBjb25zdHJ1Y3Rvcih0eXBlLCBtdXRhYmlsaXR5KSB7CisgICAgdGhpcy50
eXBlID0gdHlwZTsKKyAgICBpZiAoIW11dGFiaWxpdHkpIHRocm93IG5ldyBFcnJvcigiSW1tdXRh
YmxlIGFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQiKTsKKyAgICB0aGlzLm11dGFiaWxpdHkg
PSBtdXRhYmlsaXR5OworICAgIHRoaXMudHlwZV9mb3JtID0ga1dhc21BcnJheVR5cGVGb3JtOwor
ICB9Cit9CisKK2NsYXNzIFdhc21BcnJheVN1YnR5cGUgZXh0ZW5kcyBXYXNtQXJyYXkgeworICBj
b25zdHJ1Y3Rvcih0eXBlLCBtdXRhYmlsaXR5LCBzdXBlcnR5cGVfaWR4KSB7CisgICAgc3VwZXIo
dHlwZSwgbXV0YWJpbGl0eSk7CisgICAgdGhpcy5zdXBlcnR5cGUgPSBzdXBlcnR5cGVfaWR4Owor
ICAgIHRoaXMudHlwZV9mb3JtID0ga1dhc21BcnJheVN1YnR5cGVGb3JtOworICB9Cit9CitjbGFz
cyBXYXNtRWxlbVNlZ21lbnQgeworICBjb25zdHJ1Y3Rvcih0YWJsZSwgb2Zmc2V0LCB0eXBlLCBl
bGVtZW50cywgaXNfZGVjbCkgeworICAgIHRoaXMudGFibGUgPSB0YWJsZTsKKyAgICB0aGlzLm9m
ZnNldCA9IG9mZnNldDsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIHRoaXMuZWxlbWVudHMg
PSBlbGVtZW50czsKKyAgICB0aGlzLmlzX2RlY2wgPSBpc19kZWNsOworICAgIC8vIEludmFyaWFu
dCBjaGVja3MuCisgICAgaWYgKCh0YWJsZSA9PT0gdW5kZWZpbmVkKSAhPSAob2Zmc2V0ID09PSB1
bmRlZmluZWQpKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZWxlbWVudCBzZWdt
ZW50Iik7CisgICAgfQorICAgIGZvciAobGV0IGVsZW0gb2YgZWxlbWVudHMpIHsKKyAgICAgIGlm
ICgoKHR5cGVvZiBlbGVtKSA9PSAnbnVtYmVyJykgIT0gKHR5cGUgPT09IHVuZGVmaW5lZCkpIHsK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGVsZW1lbnQiKTsKKyAgICAgIH0KKyAg
ICB9CisgIH0KKworICBpc19hY3RpdmUoKSB7CisgICAgcmV0dXJuIHRoaXMudGFibGUgIT09IHVu
ZGVmaW5lZDsKKyAgfQorCisgIGlzX3Bhc3NpdmUoKSB7CisgICAgcmV0dXJuIHRoaXMudGFibGUg
PT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc19kZWNsOworICB9CisKKyAgaXNfZGVjbGFyYXRpdmUo
KSB7CisgICAgcmV0dXJuIHRoaXMudGFibGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLmlzX2RlY2w7
CisgIH0KKworICBleHByZXNzaW9uc19hc19lbGVtZW50cygpIHsKKyAgICByZXR1cm4gdGhpcy50
eXBlICE9PSB1bmRlZmluZWQ7CisgIH0KK30KKworY2xhc3MgV2FzbU1vZHVsZUJ1aWxkZXIgewor
ICBjb25zdHJ1Y3RvcigpIHsKKyAgICB0aGlzLnR5cGVzID0gW107CisgICAgdGhpcy5pbXBvcnRz
ID0gW107CisgICAgdGhpcy5leHBvcnRzID0gW107CisgICAgdGhpcy5nbG9iYWxzID0gW107Cisg
ICAgdGhpcy50YWJsZXMgPSBbXTsKKyAgICB0aGlzLnRhZ3MgPSBbXTsKKyAgICB0aGlzLmZ1bmN0
aW9ucyA9IFtdOworICAgIHRoaXMuY29tcGlsYXRpb25faGludHMgPSBbXTsKKyAgICB0aGlzLmVs
ZW1lbnRfc2VnbWVudHMgPSBbXTsKKyAgICB0aGlzLmRhdGFfc2VnbWVudHMgPSBbXTsKKyAgICB0
aGlzLmV4cGxpY2l0ID0gW107CisgICAgdGhpcy5udW1faW1wb3J0ZWRfZnVuY3MgPSAwOworICAg
IHRoaXMubnVtX2ltcG9ydGVkX2dsb2JhbHMgPSAwOworICAgIHRoaXMubnVtX2ltcG9ydGVkX3Rh
YmxlcyA9IDA7CisgICAgdGhpcy5udW1faW1wb3J0ZWRfdGFncyA9IDA7CisgICAgcmV0dXJuIHRo
aXM7CisgIH0KKworICBhZGRTdGFydChzdGFydF9pbmRleCkgeworICAgIHRoaXMuc3RhcnRfaW5k
ZXggPSBzdGFydF9pbmRleDsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZE1lbW9yeSht
aW4sIG1heCwgZXhwb3J0ZWQsIHNoYXJlZCkgeworICAgIHRoaXMubWVtb3J5ID0geworICAgICAg
bWluOiBtaW4sCisgICAgICBtYXg6IG1heCwKKyAgICAgIGV4cG9ydGVkOiBleHBvcnRlZCwKKyAg
ICAgIHNoYXJlZDogc2hhcmVkIHx8IGZhbHNlLAorICAgICAgaXNfbWVtb3J5NjQ6IGZhbHNlCisg
ICAgfTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZE1lbW9yeTY0KG1pbiwgbWF4LCBl
eHBvcnRlZCkgeworICAgIHRoaXMubWVtb3J5ID0geworICAgICAgbWluOiBtaW4sCisgICAgICBt
YXg6IG1heCwKKyAgICAgIGV4cG9ydGVkOiBleHBvcnRlZCwKKyAgICAgIHNoYXJlZDogZmFsc2Us
CisgICAgICBpc19tZW1vcnk2NDogdHJ1ZQorICAgIH07CisgICAgcmV0dXJuIHRoaXM7CisgIH0K
KworICBhZGRFeHBsaWNpdFNlY3Rpb24oYnl0ZXMpIHsKKyAgICB0aGlzLmV4cGxpY2l0LnB1c2go
Ynl0ZXMpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgc3RyaW5nVG9CeXRlcyhuYW1lKSB7
CisgICAgdmFyIHJlc3VsdCA9IG5ldyBCaW5hcnkoKTsKKyAgICByZXN1bHQuZW1pdF91MzJ2KG5h
bWUubGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHsK
KyAgICAgIHJlc3VsdC5lbWl0X3U4KG5hbWUuY2hhckNvZGVBdChpKSk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQudHJ1bmNfYnVmZmVyKCkKKyAgfQorCisgIGNyZWF0ZUN1c3RvbVNlY3Rpb24o
bmFtZSwgYnl0ZXMpIHsKKyAgICBuYW1lID0gdGhpcy5zdHJpbmdUb0J5dGVzKG5hbWUpOworICAg
IHZhciBzZWN0aW9uID0gbmV3IEJpbmFyeSgpOworICAgIHNlY3Rpb24uZW1pdF91OCgwKTsKKyAg
ICBzZWN0aW9uLmVtaXRfdTMydihuYW1lLmxlbmd0aCArIGJ5dGVzLmxlbmd0aCk7CisgICAgc2Vj
dGlvbi5lbWl0X2J5dGVzKG5hbWUpOworICAgIHNlY3Rpb24uZW1pdF9ieXRlcyhieXRlcyk7Cisg
ICAgcmV0dXJuIHNlY3Rpb24udHJ1bmNfYnVmZmVyKCk7CisgIH0KKworICBhZGRDdXN0b21TZWN0
aW9uKG5hbWUsIGJ5dGVzKSB7CisgICAgdGhpcy5leHBsaWNpdC5wdXNoKHRoaXMuY3JlYXRlQ3Vz
dG9tU2VjdGlvbihuYW1lLCBieXRlcykpOworICB9CisKKyAgYWRkVHlwZSh0eXBlKSB7CisgICAg
dGhpcy50eXBlcy5wdXNoKHR5cGUpOworICAgIHZhciBwbCA9IHR5cGUucGFyYW1zLmxlbmd0aDsg
ICAvLyBzaG91bGQgaGF2ZSBwYXJhbXMKKyAgICB2YXIgcmwgPSB0eXBlLnJlc3VsdHMubGVuZ3Ro
OyAgLy8gc2hvdWxkIGhhdmUgcmVzdWx0cworICAgIHJldHVybiB0aGlzLnR5cGVzLmxlbmd0aCAt
IDE7CisgIH0KKworICBhZGRTdHJ1Y3QoZmllbGRzKSB7CisgICAgdGhpcy50eXBlcy5wdXNoKG5l
dyBXYXNtU3RydWN0KGZpZWxkcykpOworICAgIHJldHVybiB0aGlzLnR5cGVzLmxlbmd0aCAtIDE7
CisgIH0KKworICBrR2VuZXJpY1N1cGVyVHlwZSA9IDB4RkZGRkZGRkU7CisgIGFkZFN0cnVjdFN1
YnR5cGUoZmllbGRzLCBzdXBlcnR5cGVfaWR4ID0gdGhpcy5rR2VuZXJpY1N1cGVyVHlwZSkgewor
ICAgIHRoaXMudHlwZXMucHVzaChuZXcgV2FzbVN0cnVjdFN1YnR5cGUoZmllbGRzLCBzdXBlcnR5
cGVfaWR4KSk7CisgICAgcmV0dXJuIHRoaXMudHlwZXMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGFk
ZEFycmF5KHR5cGUsIG11dGFiaWxpdHkpIHsKKyAgICB0aGlzLnR5cGVzLnB1c2gobmV3IFdhc21B
cnJheSh0eXBlLCBtdXRhYmlsaXR5KSk7CisgICAgcmV0dXJuIHRoaXMudHlwZXMubGVuZ3RoIC0g
MTsKKyAgfQorCisgIGFkZEFycmF5U3VidHlwZSh0eXBlLCBtdXRhYmlsaXR5LCBzdXBlcnR5cGVf
aWR4ID0gdGhpcy5rR2VuZXJpY1N1cGVyVHlwZSkgeworICAgIHRoaXMudHlwZXMucHVzaChuZXcg
V2FzbUFycmF5U3VidHlwZSh0eXBlLCBtdXRhYmlsaXR5LCBzdXBlcnR5cGVfaWR4KSk7CisgICAg
cmV0dXJuIHRoaXMudHlwZXMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGFkZEdsb2JhbCh0eXBlLCBt
dXRhYmxlLCBpbml0KSB7CisgICAgaWYgKGluaXQgPT09IHVuZGVmaW5lZCkgaW5pdCA9IFdhc21J
bml0RXhwci5kZWZhdWx0Rm9yKHR5cGUpOworICAgIGxldCBnbG9iID0gbmV3IFdhc21HbG9iYWxC
dWlsZGVyKHRoaXMsIHR5cGUsIG11dGFibGUsIGluaXQpOworICAgIGdsb2IuaW5kZXggPSB0aGlz
Lmdsb2JhbHMubGVuZ3RoICsgdGhpcy5udW1faW1wb3J0ZWRfZ2xvYmFsczsKKyAgICB0aGlzLmds
b2JhbHMucHVzaChnbG9iKTsKKyAgICByZXR1cm4gZ2xvYjsKKyAgfQorCisgIGFkZFRhYmxlKAor
ICAgICAgdHlwZSwgaW5pdGlhbF9zaXplLCBtYXhfc2l6ZSA9IHVuZGVmaW5lZCwgaW5pdF9leHBy
ID0gdW5kZWZpbmVkKSB7CisgICAgaWYgKHR5cGUgPT0ga1dhc21JMzIgfHwgdHlwZSA9PSBrV2Fz
bUk2NCB8fCB0eXBlID09IGtXYXNtRjMyIHx8CisgICAgICAgIHR5cGUgPT0ga1dhc21GNjQgfHwg
dHlwZSA9PSBrV2FzbVMxMjggfHwgdHlwZSA9PSBrV2FzbVZvaWQpIHsKKyAgICAgIHRocm93IG5l
dyBFcnJvcignVGFibGVzIG11c3QgYmUgb2YgYSByZWZlcmVuY2UgdHlwZScpOworICAgIH0KKyAg
ICBsZXQgdGFibGUgPSBuZXcgV2FzbVRhYmxlQnVpbGRlcigKKyAgICAgICAgdGhpcywgdHlwZSwg
aW5pdGlhbF9zaXplLCBtYXhfc2l6ZSwgaW5pdF9leHByKTsKKyAgICB0YWJsZS5pbmRleCA9IHRo
aXMudGFibGVzLmxlbmd0aCArIHRoaXMubnVtX2ltcG9ydGVkX3RhYmxlczsKKyAgICB0aGlzLnRh
Ymxlcy5wdXNoKHRhYmxlKTsKKyAgICByZXR1cm4gdGFibGU7CisgIH0KKworICBhZGRUYWcodHlw
ZSkgeworICAgIGxldCB0eXBlX2luZGV4ID0gKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVyJyA/IHR5
cGUgOiB0aGlzLmFkZFR5cGUodHlwZSk7CisgICAgbGV0IHRhZ19pbmRleCA9IHRoaXMudGFncy5s
ZW5ndGggKyB0aGlzLm51bV9pbXBvcnRlZF90YWdzOworICAgIHRoaXMudGFncy5wdXNoKHR5cGVf
aW5kZXgpOworICAgIHJldHVybiB0YWdfaW5kZXg7CisgIH0KKworICBhZGRGdW5jdGlvbihuYW1l
LCB0eXBlLCBhcmdfbmFtZXMpIHsKKyAgICBhcmdfbmFtZXMgPSBhcmdfbmFtZXMgfHwgW107Cisg
ICAgbGV0IHR5cGVfaW5kZXggPSAodHlwZW9mIHR5cGUpID09ICdudW1iZXInID8gdHlwZSA6IHRo
aXMuYWRkVHlwZSh0eXBlKTsKKyAgICBsZXQgbnVtX2FyZ3MgPSB0aGlzLnR5cGVzW3R5cGVfaW5k
ZXhdLnBhcmFtcy5sZW5ndGg7CisgICAgaWYgKG51bV9hcmdzIDwgYXJnX25hbWVzLmxlbmd0aCkK
KyAgICAgIHRocm93IG5ldyBFcnJvcigndG9vIG1hbnkgYXJnIG5hbWVzIHByb3ZpZGVkJyk7Cisg
ICAgaWYgKG51bV9hcmdzID4gYXJnX25hbWVzLmxlbmd0aCkKKyAgICAgIGFyZ19uYW1lcy5wdXNo
KG51bV9hcmdzIC0gYXJnX25hbWVzLmxlbmd0aCk7CisgICAgbGV0IGZ1bmMgPSBuZXcgV2FzbUZ1
bmN0aW9uQnVpbGRlcih0aGlzLCBuYW1lLCB0eXBlX2luZGV4LCBhcmdfbmFtZXMpOworICAgIGZ1
bmMuaW5kZXggPSB0aGlzLmZ1bmN0aW9ucy5sZW5ndGggKyB0aGlzLm51bV9pbXBvcnRlZF9mdW5j
czsKKyAgICB0aGlzLmZ1bmN0aW9ucy5wdXNoKGZ1bmMpOworICAgIHJldHVybiBmdW5jOworICB9
CisKKyAgYWRkSW1wb3J0KG1vZHVsZSwgbmFtZSwgdHlwZSkgeworICAgIGlmICh0aGlzLmZ1bmN0
aW9ucy5sZW5ndGggIT0gMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXBvcnRlZCBmdW5j
dGlvbnMgbXVzdCBiZSBkZWNsYXJlZCBiZWZvcmUgbG9jYWwgb25lcycpOworICAgIH0KKyAgICBs
ZXQgdHlwZV9pbmRleCA9ICh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicgPyB0eXBlIDogdGhpcy5h
ZGRUeXBlKHR5cGUpOworICAgIHRoaXMuaW1wb3J0cy5wdXNoKHsKKyAgICAgIG1vZHVsZTogbW9k
dWxlLAorICAgICAgbmFtZTogbmFtZSwKKyAgICAgIGtpbmQ6IGtFeHRlcm5hbEZ1bmN0aW9uLAor
ICAgICAgdHlwZV9pbmRleDogdHlwZV9pbmRleAorICAgIH0pOworICAgIHJldHVybiB0aGlzLm51
bV9pbXBvcnRlZF9mdW5jcysrOworICB9CisKKyAgYWRkSW1wb3J0ZWRHbG9iYWwobW9kdWxlLCBu
YW1lLCB0eXBlLCBtdXRhYmxlID0gZmFsc2UpIHsKKyAgICBpZiAodGhpcy5nbG9iYWxzLmxlbmd0
aCAhPSAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcG9ydGVkIGdsb2JhbHMgbXVzdCBi
ZSBkZWNsYXJlZCBiZWZvcmUgbG9jYWwgb25lcycpOworICAgIH0KKyAgICBsZXQgbyA9IHsKKyAg
ICAgIG1vZHVsZTogbW9kdWxlLAorICAgICAgbmFtZTogbmFtZSwKKyAgICAgIGtpbmQ6IGtFeHRl
cm5hbEdsb2JhbCwKKyAgICAgIHR5cGU6IHR5cGUsCisgICAgICBtdXRhYmxlOiBtdXRhYmxlCisg
ICAgfTsKKyAgICB0aGlzLmltcG9ydHMucHVzaChvKTsKKyAgICByZXR1cm4gdGhpcy5udW1faW1w
b3J0ZWRfZ2xvYmFscysrOworICB9CisKKyAgYWRkSW1wb3J0ZWRNZW1vcnkobW9kdWxlLCBuYW1l
LCBpbml0aWFsID0gMCwgbWF4aW11bSwgc2hhcmVkKSB7CisgICAgbGV0IG8gPSB7CisgICAgICBt
b2R1bGU6IG1vZHVsZSwKKyAgICAgIG5hbWU6IG5hbWUsCisgICAgICBraW5kOiBrRXh0ZXJuYWxN
ZW1vcnksCisgICAgICBpbml0aWFsOiBpbml0aWFsLAorICAgICAgbWF4aW11bTogbWF4aW11bSwK
KyAgICAgIHNoYXJlZDogc2hhcmVkCisgICAgfTsKKyAgICB0aGlzLmltcG9ydHMucHVzaChvKTsK
KyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZEltcG9ydGVkVGFibGUobW9kdWxlLCBuYW1l
LCBpbml0aWFsLCBtYXhpbXVtLCB0eXBlKSB7CisgICAgaWYgKHRoaXMudGFibGVzLmxlbmd0aCAh
PSAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcG9ydGVkIHRhYmxlcyBtdXN0IGJlIGRl
Y2xhcmVkIGJlZm9yZSBsb2NhbCBvbmVzJyk7CisgICAgfQorICAgIGxldCBvID0geworICAgICAg
bW9kdWxlOiBtb2R1bGUsCisgICAgICBuYW1lOiBuYW1lLAorICAgICAga2luZDoga0V4dGVybmFs
VGFibGUsCisgICAgICBpbml0aWFsOiBpbml0aWFsLAorICAgICAgbWF4aW11bTogbWF4aW11bSwK
KyAgICAgIHR5cGU6IHR5cGUgfHwga1dhc21GdW5jUmVmCisgICAgfTsKKyAgICB0aGlzLmltcG9y
dHMucHVzaChvKTsKKyAgICByZXR1cm4gdGhpcy5udW1faW1wb3J0ZWRfdGFibGVzKys7CisgIH0K
KworICBhZGRJbXBvcnRlZFRhZyhtb2R1bGUsIG5hbWUsIHR5cGUpIHsKKyAgICBpZiAodGhpcy50
YWdzLmxlbmd0aCAhPSAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcG9ydGVkIHRhZ3Mg
bXVzdCBiZSBkZWNsYXJlZCBiZWZvcmUgbG9jYWwgb25lcycpOworICAgIH0KKyAgICBsZXQgdHlw
ZV9pbmRleCA9ICh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicgPyB0eXBlIDogdGhpcy5hZGRUeXBl
KHR5cGUpOworICAgIGxldCBvID0geworICAgICAgbW9kdWxlOiBtb2R1bGUsCisgICAgICBuYW1l
OiBuYW1lLAorICAgICAga2luZDoga0V4dGVybmFsVGFnLAorICAgICAgdHlwZV9pbmRleDogdHlw
ZV9pbmRleAorICAgIH07CisgICAgdGhpcy5pbXBvcnRzLnB1c2gobyk7CisgICAgcmV0dXJuIHRo
aXMubnVtX2ltcG9ydGVkX3RhZ3MrKzsKKyAgfQorCisgIGFkZEV4cG9ydChuYW1lLCBpbmRleCkg
eworICAgIHRoaXMuZXhwb3J0cy5wdXNoKHtuYW1lOiBuYW1lLCBraW5kOiBrRXh0ZXJuYWxGdW5j
dGlvbiwgaW5kZXg6IGluZGV4fSk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBhZGRFeHBv
cnRPZktpbmQobmFtZSwga2luZCwgaW5kZXgpIHsKKyAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5l
ZCAmJiBraW5kICE9IGtFeHRlcm5hbFRhYmxlICYmCisgICAgICAgIGtpbmQgIT0ga0V4dGVybmFs
TWVtb3J5KSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAgICAgJ0luZGV4IGZvciBl
eHBvcnRzIG90aGVyIHRoYW4gdGFibGVzL21lbW9yaWVzIG11c3QgYmUgcHJvdmlkZWQnKTsKKyAg
ICB9CisgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBpbmRleCkgIT0gJ251
bWJlcicpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignSW5kZXggZm9yIGV4cG9ydHMgbXVzdCBi
ZSBhIG51bWJlcicpCisgICAgfQorICAgIHRoaXMuZXhwb3J0cy5wdXNoKHtuYW1lOiBuYW1lLCBr
aW5kOiBraW5kLCBpbmRleDogaW5kZXh9KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHNl
dENvbXBpbGF0aW9uSGludChzdHJhdGVneSwgYmFzZWxpbmVUaWVyLCB0b3BUaWVyLCBpbmRleCkg
eworICAgIHRoaXMuY29tcGlsYXRpb25faGludHNbaW5kZXhdID0geworICAgICAgc3RyYXRlZ3k6
IHN0cmF0ZWd5LAorICAgICAgYmFzZWxpbmVUaWVyOiBiYXNlbGluZVRpZXIsCisgICAgICB0b3BU
aWVyOiB0b3BUaWVyCisgICAgfTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZERhdGFT
ZWdtZW50KGFkZHIsIGRhdGEsIGlzX2dsb2JhbCA9IGZhbHNlKSB7CisgICAgdGhpcy5kYXRhX3Nl
Z21lbnRzLnB1c2goCisgICAgICAgIHthZGRyOiBhZGRyLCBkYXRhOiBkYXRhLCBpc19nbG9iYWw6
IGlzX2dsb2JhbCwgaXNfYWN0aXZlOiB0cnVlfSk7CisgICAgcmV0dXJuIHRoaXMuZGF0YV9zZWdt
ZW50cy5sZW5ndGggLSAxOworICB9CisKKyAgYWRkUGFzc2l2ZURhdGFTZWdtZW50KGRhdGEpIHsK
KyAgICB0aGlzLmRhdGFfc2VnbWVudHMucHVzaCh7ZGF0YTogZGF0YSwgaXNfYWN0aXZlOiBmYWxz
ZX0pOworICAgIHJldHVybiB0aGlzLmRhdGFfc2VnbWVudHMubGVuZ3RoIC0gMTsKKyAgfQorCisg
IGV4cG9ydE1lbW9yeUFzKG5hbWUpIHsKKyAgICB0aGlzLmV4cG9ydHMucHVzaCh7bmFtZTogbmFt
ZSwga2luZDoga0V4dGVybmFsTWVtb3J5LCBpbmRleDogMH0pOworICB9CisKKyAgLy8ge29mZnNl
dH0gaXMgYW4gaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbi4KKyAgLy8gSWYge3R5cGV9IGlzIHVuZGVm
aW5lZCwgdGhlbiB7ZWxlbWVudHN9IGFyZSBmdW5jdGlvbiBpbmRpY2VzLiBPdGhlcndpc2UsCisg
IC8vIHRoZXkgYXJlIGluaXRpYWxpemVyIGV4cHJlc3Npb25zLgorICBhZGRBY3RpdmVFbGVtZW50
U2VnbWVudCh0YWJsZSwgb2Zmc2V0LCBlbGVtZW50cywgdHlwZSkgeworICAgIHRoaXMuZWxlbWVu
dF9zZWdtZW50cy5wdXNoKAorICAgICAgICBuZXcgV2FzbUVsZW1TZWdtZW50KHRhYmxlLCBvZmZz
ZXQsIHR5cGUsIGVsZW1lbnRzLCBmYWxzZSkpOworICAgIHJldHVybiB0aGlzLmVsZW1lbnRfc2Vn
bWVudHMubGVuZ3RoIC0gMTsKKyAgfQorCisgIC8vIElmIHt0eXBlfSBpcyB1bmRlZmluZWQsIHRo
ZW4ge2VsZW1lbnRzfSBhcmUgZnVuY3Rpb24gaW5kaWNlcy4gT3RoZXJ3aXNlLAorICAvLyB0aGV5
IGFyZSBpbml0aWFsaXplciBleHByZXNzaW9ucy4KKyAgYWRkUGFzc2l2ZUVsZW1lbnRTZWdtZW50
KGVsZW1lbnRzLCB0eXBlKSB7CisgICAgdGhpcy5lbGVtZW50X3NlZ21lbnRzLnB1c2goCisgICAg
ICBuZXcgV2FzbUVsZW1TZWdtZW50KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0eXBlLCBlbGVtZW50
cywgZmFsc2UpKTsKKyAgICByZXR1cm4gdGhpcy5lbGVtZW50X3NlZ21lbnRzLmxlbmd0aCAtIDE7
CisgIH0KKworICAvLyBJZiB7dHlwZX0gaXMgdW5kZWZpbmVkLCB0aGVuIHtlbGVtZW50c30gYXJl
IGZ1bmN0aW9uIGluZGljZXMuIE90aGVyd2lzZSwKKyAgLy8gdGhleSBhcmUgaW5pdGlhbGl6ZXIg
ZXhwcmVzc2lvbnMuCisgIGFkZERlY2xhcmF0aXZlRWxlbWVudFNlZ21lbnQoZWxlbWVudHMsIHR5
cGUpIHsKKyAgICB0aGlzLmVsZW1lbnRfc2VnbWVudHMucHVzaCgKKyAgICAgIG5ldyBXYXNtRWxl
bVNlZ21lbnQodW5kZWZpbmVkLCB1bmRlZmluZWQsIHR5cGUsIGVsZW1lbnRzLCB0cnVlKSk7Cisg
ICAgcmV0dXJuIHRoaXMuZWxlbWVudF9zZWdtZW50cy5sZW5ndGggLSAxOworICB9CisKKyAgYXBw
ZW5kVG9UYWJsZShhcnJheSkgeworICAgIGZvciAobGV0IG4gb2YgYXJyYXkpIHsKKyAgICAgIGlm
ICh0eXBlb2YgbiAhPSAnbnVtYmVyJykKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlk
IHRhYmxlIChlbnRyaWVzIGhhdmUgdG8gYmUgbnVtYmVycyk6ICcgKyBhcnJheSk7CisgICAgfQor
ICAgIGlmICh0aGlzLnRhYmxlcy5sZW5ndGggPT0gMCkgeworICAgICAgdGhpcy5hZGRUYWJsZShr
V2FzbUFueUZ1bmMsIDApOworICAgIH0KKyAgICAvLyBBZGp1c3QgdGhlIHRhYmxlIHRvIHRoZSBj
b3JyZWN0IHNpemUuCisgICAgbGV0IHRhYmxlID0gdGhpcy50YWJsZXNbMF07CisgICAgY29uc3Qg
YmFzZSA9IHRhYmxlLmluaXRpYWxfc2l6ZTsKKyAgICBjb25zdCB0YWJsZV9zaXplID0gYmFzZSAr
IGFycmF5Lmxlbmd0aDsKKyAgICB0YWJsZS5pbml0aWFsX3NpemUgPSB0YWJsZV9zaXplOworICAg
IGlmICh0YWJsZS5oYXNfbWF4ICYmIHRhYmxlX3NpemUgPiB0YWJsZS5tYXhfc2l6ZSkgeworICAg
ICAgdGFibGUubWF4X3NpemUgPSB0YWJsZV9zaXplOworICAgIH0KKyAgICByZXR1cm4gdGhpcy5h
ZGRBY3RpdmVFbGVtZW50U2VnbWVudCgwLCBXYXNtSW5pdEV4cHIuSTMyQ29uc3QoYmFzZSksIGFy
cmF5KTsKKyAgfQorCisgIHNldFRhYmxlQm91bmRzKG1pbiwgbWF4ID0gdW5kZWZpbmVkKSB7Cisg
ICAgaWYgKHRoaXMudGFibGVzLmxlbmd0aCAhPSAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3Io
J1RoZSB0YWJsZSBib3VuZHMgb2YgdGFibGUgXCcwXCcgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0Licp
OworICAgIH0KKyAgICB0aGlzLmFkZFRhYmxlKGtXYXNtQW55RnVuYywgbWluLCBtYXgpOworICAg
IHJldHVybiB0aGlzOworICB9CisKKyAgc2V0TmFtZShuYW1lKSB7CisgICAgdGhpcy5uYW1lID0g
bmFtZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHRvQnVmZmVyKGRlYnVnID0gZmFsc2Up
IHsKKyAgICBsZXQgYmluYXJ5ID0gbmV3IEJpbmFyeTsKKyAgICBsZXQgd2FzbSA9IHRoaXM7CisK
KyAgICAvLyBBZGQgaGVhZGVyCisgICAgYmluYXJ5LmVtaXRfaGVhZGVyKCk7CisKKyAgICAvLyBB
ZGQgdHlwZSBzZWN0aW9uCisgICAgaWYgKHdhc20udHlwZXMubGVuZ3RoID4gMCkgeworICAgICAg
aWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgdHlwZXMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7Cisg
ICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtUeXBlU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4gewor
ICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLnR5cGVzLmxlbmd0aCk7CisgICAgICAgIGZv
ciAobGV0IHR5cGUgb2Ygd2FzbS50eXBlcykgeworICAgICAgICAgIGlmICh0eXBlIGluc3RhbmNl
b2YgV2FzbVN0cnVjdCkgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KHR5cGUudHlwZV9m
b3JtKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHR5cGUuZmllbGRzLmxlbmd0aCk7
CisgICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0eXBlLmZpZWxkcykgeworICAgICAgICAg
ICAgICBzZWN0aW9uLmVtaXRfdHlwZShmaWVsZC50eXBlKTsKKyAgICAgICAgICAgICAgc2VjdGlv
bi5lbWl0X3U4KGZpZWxkLm11dGFiaWxpdHkgPyAxIDogMCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFdhc21TdHJ1Y3RTdWJ0eXBlKSB7CisgICAgICAg
ICAgICAgIGlmICh0eXBlLnN1cGVydHlwZSA9PT0gdGhpcy5rR2VuZXJpY1N1cGVyVHlwZSkgewor
ICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChrRGF0YVJlZkNvZGUpOworICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF9oZWFwX3R5cGUodHlw
ZS5zdXBlcnR5cGUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
fSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgV2FzbUFycmF5KSB7CisgICAgICAgICAgICBzZWN0
aW9uLmVtaXRfdTgodHlwZS50eXBlX2Zvcm0pOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5
cGUodHlwZS50eXBlKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCh0eXBlLm11dGFiaWxp
dHkgPyAxIDogMCk7CisgICAgICAgICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFdhc21BcnJheVN1
YnR5cGUpIHsKKyAgICAgICAgICAgICAgaWYgKHR5cGUuc3VwZXJ0eXBlID09PSB0aGlzLmtHZW5l
cmljU3VwZXJUeXBlKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtEYXRhUmVm
Q29kZSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5l
bWl0X2hlYXBfdHlwZSh0eXBlLnN1cGVydHlwZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtX
YXNtRnVuY3Rpb25UeXBlRm9ybSk7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih0eXBl
LnBhcmFtcy5sZW5ndGgpOworICAgICAgICAgICAgZm9yIChsZXQgcGFyYW0gb2YgdHlwZS5wYXJh
bXMpIHsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUocGFyYW0pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYodHlwZS5yZXN1bHRzLmxlbmd0aCk7
CisgICAgICAgICAgICBmb3IgKGxldCByZXN1bHQgb2YgdHlwZS5yZXN1bHRzKSB7CisgICAgICAg
ICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKHJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgaW1wb3J0cyBz
ZWN0aW9uCisgICAgaWYgKHdhc20uaW1wb3J0cy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVi
dWcpIHByaW50KCdlbWl0dGluZyBpbXBvcnRzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAg
YmluYXJ5LmVtaXRfc2VjdGlvbihrSW1wb3J0U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAg
ICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLmltcG9ydHMubGVuZ3RoKTsKKyAgICAgICAgZm9y
IChsZXQgaW1wIG9mIHdhc20uaW1wb3J0cykgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF9zdHJp
bmcoaW1wLm1vZHVsZSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3N0cmluZyhpbXAubmFtZSB8
fCAnJyk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGltcC5raW5kKTsKKyAgICAgICAgICBp
ZiAoaW1wLmtpbmQgPT0ga0V4dGVybmFsRnVuY3Rpb24pIHsKKyAgICAgICAgICAgIHNlY3Rpb24u
ZW1pdF91MzJ2KGltcC50eXBlX2luZGV4KTsKKyAgICAgICAgICB9IGVsc2UgaWYgKGltcC5raW5k
ID09IGtFeHRlcm5hbEdsb2JhbCkgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUoaW1w
LnR5cGUpOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGltcC5tdXRhYmxlKTsKKyAgICAg
ICAgICB9IGVsc2UgaWYgKGltcC5raW5kID09IGtFeHRlcm5hbE1lbW9yeSkgeworICAgICAgICAg
ICAgdmFyIGhhc19tYXggPSAodHlwZW9mIGltcC5tYXhpbXVtKSAhPSAndW5kZWZpbmVkJzsKKyAg
ICAgICAgICAgIHZhciBpc19zaGFyZWQgPSAodHlwZW9mIGltcC5zaGFyZWQpICE9ICd1bmRlZmlu
ZWQnOworICAgICAgICAgICAgaWYgKGlzX3NoYXJlZCkgeworICAgICAgICAgICAgICBzZWN0aW9u
LmVtaXRfdTgoaGFzX21heCA/IDMgOiAyKTsgIC8vIGZsYWdzCisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoaGFzX21heCA/IDEgOiAwKTsgIC8vIGZs
YWdzCisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihpbXAuaW5p
dGlhbCk7ICAgICAgICAgICAgICAgLy8gaW5pdGlhbAorICAgICAgICAgICAgaWYgKGhhc19tYXgp
IHNlY3Rpb24uZW1pdF91MzJ2KGltcC5tYXhpbXVtKTsgIC8vIG1heGltdW0KKyAgICAgICAgICB9
IGVsc2UgaWYgKGltcC5raW5kID09IGtFeHRlcm5hbFRhYmxlKSB7CisgICAgICAgICAgICBzZWN0
aW9uLmVtaXRfdHlwZShpbXAudHlwZSk7CisgICAgICAgICAgICB2YXIgaGFzX21heCA9ICh0eXBl
b2YgaW1wLm1heGltdW0pICE9ICd1bmRlZmluZWQnOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0
X3U4KGhhc19tYXggPyAxIDogMCk7ICAgICAgICAgICAgIC8vIGZsYWdzCisgICAgICAgICAgICBz
ZWN0aW9uLmVtaXRfdTMydihpbXAuaW5pdGlhbCk7ICAgICAgICAgICAgICAgLy8gaW5pdGlhbAor
ICAgICAgICAgICAgaWYgKGhhc19tYXgpIHNlY3Rpb24uZW1pdF91MzJ2KGltcC5tYXhpbXVtKTsg
IC8vIG1heGltdW0KKyAgICAgICAgICB9IGVsc2UgaWYgKGltcC5raW5kID09IGtFeHRlcm5hbFRh
ZykgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoa0V4Y2VwdGlvbkF0dHJpYnV0ZSk7
CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihpbXAudHlwZV9pbmRleCk7CisgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93bi91bnN1cHBv
cnRlZCBpbXBvcnQga2luZCAnICsgaW1wLmtpbmQpOworICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIGZ1bmN0aW9ucyBkZWNsYXJhdGlvbnMKKyAg
ICBpZiAod2FzbS5mdW5jdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmlu
dCgnZW1pdHRpbmcgZnVuY3Rpb24gZGVjbHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBi
aW5hcnkuZW1pdF9zZWN0aW9uKGtGdW5jdGlvblNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAg
ICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS5mdW5jdGlvbnMubGVuZ3RoKTsKKyAgICAgICAg
Zm9yIChsZXQgZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgeworICAgICAgICAgIHNlY3Rpb24uZW1p
dF91MzJ2KGZ1bmMudHlwZV9pbmRleCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKwor
ICAgIC8vIEFkZCB0YWJsZSBzZWN0aW9uCisgICAgaWYgKHdhc20udGFibGVzLmxlbmd0aCA+IDAp
IHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIHRhYmxlcyBAICcgKyBiaW5hcnku
bGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1RhYmxlU2VjdGlvbkNvZGUsIHNl
Y3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLnRhYmxlcy5sZW5ndGgp
OworICAgICAgICBmb3IgKGxldCB0YWJsZSBvZiB3YXNtLnRhYmxlcykgeworICAgICAgICAgIHNl
Y3Rpb24uZW1pdF90eXBlKHRhYmxlLnR5cGUpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCh0
YWJsZS5oYXNfbWF4KTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih0YWJsZS5pbml0aWFs
X3NpemUpOworICAgICAgICAgIGlmICh0YWJsZS5oYXNfbWF4KSBzZWN0aW9uLmVtaXRfdTMydih0
YWJsZS5tYXhfc2l6ZSk7CisgICAgICAgICAgaWYgKHRhYmxlLmhhc19pbml0KSB7CisgICAgICAg
ICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKHRhYmxlLmluaXRfZXhwcik7CisgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgbWVtb3J5IHNlY3Rp
b24KKyAgICBpZiAod2FzbS5tZW1vcnkgIT09IHVuZGVmaW5lZCkgeworICAgICAgaWYgKGRlYnVn
KSBwcmludCgnZW1pdHRpbmcgbWVtb3J5IEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmlu
YXJ5LmVtaXRfc2VjdGlvbihrTWVtb3J5U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAg
ICBzZWN0aW9uLmVtaXRfdTgoMSk7ICAvLyBvbmUgbWVtb3J5IGVudHJ5CisgICAgICAgIGNvbnN0
IGhhc19tYXggPSB3YXNtLm1lbW9yeS5tYXggIT09IHVuZGVmaW5lZDsKKyAgICAgICAgaWYgKHdh
c20ubWVtb3J5LmlzX21lbW9yeTY0KSB7CisgICAgICAgICAgaWYgKHdhc20ubWVtb3J5LnNoYXJl
ZCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaGFyaW5nIG1lbW9yeTY0IGlzIG5v
dCBzdXBwb3J0ZWQgKHlldCknKTsKKyAgICAgICAgICB9CisgICAgICAgICAgc2VjdGlvbi5lbWl0
X3U4KAorICAgICAgICAgICAgICBoYXNfbWF4ID8ga0xpbWl0c01lbW9yeTY0V2l0aE1heGltdW0g
OiBrTGltaXRzTWVtb3J5NjROb01heGltdW0pOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91NjR2
KHdhc20ubWVtb3J5Lm1pbik7CisgICAgICAgICAgaWYgKGhhc19tYXgpIHNlY3Rpb24uZW1pdF91
NjR2KHdhc20ubWVtb3J5Lm1heCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc2VjdGlv
bi5lbWl0X3U4KAorICAgICAgICAgICAgICB3YXNtLm1lbW9yeS5zaGFyZWQgPworICAgICAgICAg
ICAgICAgICAgKGhhc19tYXggPyBrTGltaXRzU2hhcmVkV2l0aE1heGltdW0gOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrTGltaXRzU2hhcmVkTm9NYXhpbXVtKSA6CisgICAgICAgICAg
ICAgICAgICAoaGFzX21heCA/IGtMaW1pdHNXaXRoTWF4aW11bSA6IGtMaW1pdHNOb01heGltdW0p
KTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLm1lbW9yeS5taW4pOworICAgICAg
ICAgIGlmIChoYXNfbWF4KSBzZWN0aW9uLmVtaXRfdTMydih3YXNtLm1lbW9yeS5tYXgpOworICAg
ICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgdGFnIHNlY3Rpb24uCisgICAg
aWYgKHdhc20udGFncy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0
dGluZyB0YWdzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlv
bihrVGFnU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMy
dih3YXNtLnRhZ3MubGVuZ3RoKTsKKyAgICAgICAgZm9yIChsZXQgdHlwZV9pbmRleCBvZiB3YXNt
LnRhZ3MpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihrRXhjZXB0aW9uQXR0cmlidXRl
KTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih0eXBlX2luZGV4KTsKKyAgICAgICAgfQor
ICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIGdsb2JhbCBzZWN0aW9uLgorICAgIGlmICh3
YXNtLmdsb2JhbHMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRp
bmcgZ2xvYmFscyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rp
b24oa0dsb2JhbFNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0
X3UzMnYod2FzbS5nbG9iYWxzLmxlbmd0aCk7CisgICAgICAgIGZvciAobGV0IGdsb2JhbCBvZiB3
YXNtLmdsb2JhbHMpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShnbG9iYWwudHlwZSk7
CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGdsb2JhbC5tdXRhYmxlKTsKKyAgICAgICAgICBz
ZWN0aW9uLmVtaXRfaW5pdF9leHByKGdsb2JhbC5pbml0KTsKKyAgICAgICAgfQorICAgICAgfSk7
CisgICAgfQorCisgICAgLy8gQWRkIGV4cG9ydCB0YWJsZS4KKyAgICB2YXIgbWVtX2V4cG9ydCA9
ICh3YXNtLm1lbW9yeSAhPT0gdW5kZWZpbmVkICYmIHdhc20ubWVtb3J5LmV4cG9ydGVkKTsKKyAg
ICB2YXIgZXhwb3J0c19jb3VudCA9IHdhc20uZXhwb3J0cy5sZW5ndGggKyAobWVtX2V4cG9ydCA/
IDEgOiAwKTsKKyAgICBpZiAoZXhwb3J0c19jb3VudCA+IDApIHsKKyAgICAgIGlmIChkZWJ1Zykg
cHJpbnQoJ2VtaXR0aW5nIGV4cG9ydHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5h
cnkuZW1pdF9zZWN0aW9uKGtFeHBvcnRTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAg
IHNlY3Rpb24uZW1pdF91MzJ2KGV4cG9ydHNfY291bnQpOworICAgICAgICBmb3IgKGxldCBleHAg
b2Ygd2FzbS5leHBvcnRzKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3N0cmluZyhleHAubmFt
ZSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGV4cC5raW5kKTsKKyAgICAgICAgICBzZWN0
aW9uLmVtaXRfdTMydihleHAuaW5kZXgpOworICAgICAgICB9CisgICAgICAgIGlmIChtZW1fZXhw
b3J0KSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3N0cmluZygnbWVtb3J5Jyk7CisgICAgICAg
ICAgc2VjdGlvbi5lbWl0X3U4KGtFeHRlcm5hbE1lbW9yeSk7CisgICAgICAgICAgc2VjdGlvbi5l
bWl0X3U4KDApOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgc3Rh
cnQgZnVuY3Rpb24gc2VjdGlvbi4KKyAgICBpZiAod2FzbS5zdGFydF9pbmRleCAhPT0gdW5kZWZp
bmVkKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBzdGFydCBmdW5jdGlvbiBA
ICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1N0YXJ0U2Vj
dGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLnN0
YXJ0X2luZGV4KTsKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCBlbGVtZW50IHNlZ21l
bnRzCisgICAgaWYgKHdhc20uZWxlbWVudF9zZWdtZW50cy5sZW5ndGggPiAwKSB7CisgICAgICBp
ZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBlbGVtZW50IHNlZ21lbnRzIEAgJyArIGJpbmFyeS5s
ZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrRWxlbWVudFNlY3Rpb25Db2RlLCBz
ZWN0aW9uID0+IHsKKyAgICAgICAgdmFyIHNlZ21lbnRzID0gd2FzbS5lbGVtZW50X3NlZ21lbnRz
OworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWdtZW50cy5sZW5ndGgpOworCisgICAgICAg
IGZvciAobGV0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHsKKyAgICAgICAgICAvLyBFbWl0IGZsYWcg
YW5kIGhlYWRlci4KKyAgICAgICAgICAvLyBFYWNoIGNhc2UgYmVsb3cgY29ycmVzcG9uZHMgdG8g
YSBmbGFnIGZyb20KKyAgICAgICAgICAvLyBodHRwczovL3dlYmFzc2VtYmx5LmdpdGh1Yi5pby9z
cGVjL2NvcmUvYmluYXJ5L21vZHVsZXMuaHRtbCNlbGVtZW50LXNlY3Rpb24KKyAgICAgICAgICAv
LyAobm90IGluIGluY3JlYXNpbmcgb3JkZXIpLgorICAgICAgICAgIGlmIChzZWdtZW50LmlzX2Fj
dGl2ZSgpKSB7CisgICAgICAgICAgICBpZiAoc2VnbWVudC50YWJsZSA9PSAwICYmIHNlZ21lbnQu
dHlwZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgIGlmIChzZWdtZW50LmV4cHJlc3Np
b25zX2FzX2VsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgw
NCk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcihzZWdtZW50Lm9mZnNl
dCk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0
X3U4KDB4MDApCisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcihzZWdtZW50
Lm9mZnNldCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgIGlmIChzZWdtZW50LmV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkpIHsKKyAgICAgICAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwNik7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5l
bWl0X3UzMnYoc2VnbWVudC50YWJsZSk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2lu
aXRfZXhwcihzZWdtZW50Lm9mZnNldCk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5
cGUoc2VnbWVudC50eXBlKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBzZWN0aW9uLmVtaXRfdTgoMHgwMik7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3Uz
MnYoc2VnbWVudC50YWJsZSk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhw
cihzZWdtZW50Lm9mZnNldCk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHRl
cm5hbEZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc2VnbWVudC5leHByZXNzaW9uc19hc19lbGVtZW50
cygpKSB7CisgICAgICAgICAgICAgIGlmIChzZWdtZW50LmlzX3Bhc3NpdmUoKSkgeworICAgICAg
ICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDA1KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwNyk7CisgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUoc2VnbWVudC50eXBlKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGlmIChzZWdtZW50LmlzX3Bhc3NpdmUoKSkgewor
ICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDAxKTsKKyAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwMyk7CisgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHRlcm5hbEZ1bmN0aW9uKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyBFbWl0IGVsZW1lbnRz
LgorICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHNlZ21lbnQuZWxlbWVudHMubGVuZ3RoKTsK
KyAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIHNlZ21lbnQuZWxlbWVudHMpIHsKKyAgICAg
ICAgICAgIGlmIChzZWdtZW50LmV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkpIHsKKyAgICAgICAg
ICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcihlbGVtZW50KTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGVsZW1lbnQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSkKKyAgICB9CisKKyAgICAvLyBJ
ZiB0aGVyZSBhcmUgYW55IHBhc3NpdmUgZGF0YSBzZWdtZW50cywgYWRkIHRoZSBEYXRhQ291bnQg
c2VjdGlvbi4KKyAgICBpZiAod2FzbS5kYXRhX3NlZ21lbnRzLnNvbWUoc2VnID0+ICFzZWcuaXNf
YWN0aXZlKSkgeworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrRGF0YUNvdW50U2VjdGlvbkNv
ZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLmRhdGFfc2Vn
bWVudHMubGVuZ3RoKTsKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIElmIHRoZXJlIGFyZSBj
b21waWxhdGlvbiBoaW50cyBhZGQgYSBjdXN0b20gc2VjdGlvbiAnY29tcGlsYXRpb25IaW50cycK
KyAgICAvLyBhZnRlciB0aGUgZnVuY3Rpb24gc2VjdGlvbiBhbmQgYmVmb3JlIHRoZSBjb2RlIHNl
Y3Rpb24uCisgICAgaWYgKHdhc20uY29tcGlsYXRpb25faGludHMubGVuZ3RoID4gMCkgeworICAg
ICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgY29tcGlsYXRpb24gaGludHMgQCAnICsgYmlu
YXJ5Lmxlbmd0aCk7CisgICAgICAvLyBCdWlsZCBjdXN0b20gc2VjdGlvbiBwYXlsb2FkLgorICAg
ICAgbGV0IHBheWxvYWRCaW5hcnkgPSBuZXcgQmluYXJ5KCk7CisgICAgICBsZXQgaW1wbGljaXRf
Y29tcGlsYXRpb25faGludHNfY291bnQgPSB3YXNtLmZ1bmN0aW9ucy5sZW5ndGg7CisgICAgICBw
YXlsb2FkQmluYXJ5LmVtaXRfdTMydihpbXBsaWNpdF9jb21waWxhdGlvbl9oaW50c19jb3VudCk7
CisKKyAgICAgIC8vIERlZmF1bHRzIHRvIHRoZSBjb21waWxlcidzIGNob2ljZSBpZiBubyBiZXR0
ZXIgaGludCB3YXMgZ2l2ZW4gKDB4MDApLgorICAgICAgbGV0IGRlZmF1bHRIaW50Qnl0ZSA9IGtD
b21waWxhdGlvbkhpbnRTdHJhdGVneURlZmF1bHQgfAorICAgICAgICAgIChrQ29tcGlsYXRpb25I
aW50VGllckRlZmF1bHQgPDwgMikgfAorICAgICAgICAgIChrQ29tcGlsYXRpb25IaW50VGllckRl
ZmF1bHQgPDwgNCk7CisKKyAgICAgIC8vIEVtaXQgaGludCBieXRlIGZvciBldmVyeSBmdW5jdGlv
biBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLgorICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbXBs
aWNpdF9jb21waWxhdGlvbl9oaW50c19jb3VudDsgaSsrKSB7CisgICAgICAgIGxldCBpbmRleCA9
IHdhc20ubnVtX2ltcG9ydGVkX2Z1bmNzICsgaTsKKyAgICAgICAgdmFyIGhpbnRCeXRlOworICAg
ICAgICBpZiAoaW5kZXggaW4gd2FzbS5jb21waWxhdGlvbl9oaW50cykgeworICAgICAgICAgIGxl
dCBoaW50ID0gd2FzbS5jb21waWxhdGlvbl9oaW50c1tpbmRleF07CisgICAgICAgICAgaGludEJ5
dGUgPQorICAgICAgICAgICAgICBoaW50LnN0cmF0ZWd5IHwgKGhpbnQuYmFzZWxpbmVUaWVyIDw8
IDIpIHwgKGhpbnQudG9wVGllciA8PCA0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBo
aW50Qnl0ZSA9IGRlZmF1bHRIaW50Qnl0ZTsKKyAgICAgICAgfQorICAgICAgICBwYXlsb2FkQmlu
YXJ5LmVtaXRfdTgoaGludEJ5dGUpOworICAgICAgfQorCisgICAgICAvLyBGaW5hbGl6ZSBhcyBj
dXN0b20gc2VjdGlvbi4KKyAgICAgIGxldCBuYW1lID0gJ2NvbXBpbGF0aW9uSGludHMnOworICAg
ICAgbGV0IGJ5dGVzID0gdGhpcy5jcmVhdGVDdXN0b21TZWN0aW9uKG5hbWUsIHBheWxvYWRCaW5h
cnkudHJ1bmNfYnVmZmVyKCkpOworICAgICAgYmluYXJ5LmVtaXRfYnl0ZXMoYnl0ZXMpOworICAg
IH0KKworICAgIC8vIEFkZCBmdW5jdGlvbiBib2RpZXMuCisgICAgaWYgKHdhc20uZnVuY3Rpb25z
Lmxlbmd0aCA+IDApIHsKKyAgICAgIC8vIGVtaXQgZnVuY3Rpb24gYm9kaWVzCisgICAgICBpZiAo
ZGVidWcpIHByaW50KCdlbWl0dGluZyBjb2RlIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAg
bGV0IHNlY3Rpb25fbGVuZ3RoID0gMDsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa0NvZGVT
ZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20u
ZnVuY3Rpb25zLmxlbmd0aCk7CisgICAgICAgIGxldCBoZWFkZXIgPSBuZXcgQmluYXJ5OworICAg
ICAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAgICAgICAgaGVhZGVy
LnJlc2V0KCk7CisgICAgICAgICAgLy8gRnVuY3Rpb24gYm9keSBsZW5ndGggd2lsbCBiZSBwYXRj
aGVkIGxhdGVyLgorICAgICAgICAgIGxldCBsb2NhbF9kZWNscyA9IGZ1bmMubG9jYWxzIHx8IFtd
OworICAgICAgICAgIGhlYWRlci5lbWl0X3UzMnYobG9jYWxfZGVjbHMubGVuZ3RoKTsKKyAgICAg
ICAgICBmb3IgKGxldCBkZWNsIG9mIGxvY2FsX2RlY2xzKSB7CisgICAgICAgICAgICBoZWFkZXIu
ZW1pdF91MzJ2KGRlY2wuY291bnQpOworICAgICAgICAgICAgaGVhZGVyLmVtaXRfdHlwZShkZWNs
LnR5cGUpOworICAgICAgICAgIH0KKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihoZWFkZXIu
bGVuZ3RoICsgZnVuYy5ib2R5Lmxlbmd0aCk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X2J5dGVz
KGhlYWRlci50cnVuY19idWZmZXIoKSk7CisgICAgICAgICAgLy8gU2V0IHRvIHNlY3Rpb24gb2Zm
c2V0IGZvciBub3csIHdpbGwgdXBkYXRlLgorICAgICAgICAgIGZ1bmMuYm9keV9vZmZzZXQgPSBz
ZWN0aW9uLmxlbmd0aDsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfYnl0ZXMoZnVuYy5ib2R5KTsK
KyAgICAgICAgfQorICAgICAgICBzZWN0aW9uX2xlbmd0aCA9IHNlY3Rpb24ubGVuZ3RoOworICAg
ICAgfSk7CisgICAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAgICAg
IGZ1bmMuYm9keV9vZmZzZXQgKz0gYmluYXJ5Lmxlbmd0aCAtIHNlY3Rpb25fbGVuZ3RoOworICAg
ICAgfQorICAgIH0KKworICAgIC8vIEFkZCBkYXRhIHNlZ21lbnRzLgorICAgIGlmICh3YXNtLmRh
dGFfc2VnbWVudHMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRp
bmcgZGF0YSBzZWdtZW50cyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0
X3NlY3Rpb24oa0RhdGFTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24u
ZW1pdF91MzJ2KHdhc20uZGF0YV9zZWdtZW50cy5sZW5ndGgpOworICAgICAgICBmb3IgKGxldCBz
ZWcgb2Ygd2FzbS5kYXRhX3NlZ21lbnRzKSB7CisgICAgICAgICAgaWYgKHNlZy5pc19hY3RpdmUp
IHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgwKTsgIC8vIGxpbmVhciBtZW1vcnkgaW5k
ZXggMCAvIGZsYWdzCisgICAgICAgICAgICBpZiAoc2VnLmlzX2dsb2JhbCkgeworICAgICAgICAg
ICAgICAvLyBpbml0aWFsaXplciBpcyBhIGdsb2JhbCB2YXJpYWJsZQorICAgICAgICAgICAgICBz
ZWN0aW9uLmVtaXRfdTgoa0V4cHJHbG9iYWxHZXQpOworICAgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfdTMydihzZWcuYWRkcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAv
LyBpbml0aWFsaXplciBpcyBhIGNvbnN0YW50CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91
OChrRXhwckkzMkNvbnN0KTsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoc2VnLmFk
ZHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHByRW5k
KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtQYXNz
aXZlKTsgIC8vIGZsYWdzCisgICAgICAgICAgfQorICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2
KHNlZy5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X2J5dGVzKHNlZy5kYXRh
KTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIGFueSBleHBsaWNp
dGx5IGFkZGVkIHNlY3Rpb25zCisgICAgZm9yIChsZXQgZXhwIG9mIHdhc20uZXhwbGljaXQpIHsK
KyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGV4cGxpY2l0IEAgJyArIGJpbmFyeS5s
ZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfYnl0ZXMoZXhwKTsKKyAgICB9CisKKyAgICAvLyBB
ZGQgbmFtZXMuCisgICAgbGV0IG51bV9mdW5jdGlvbl9uYW1lcyA9IDA7CisgICAgbGV0IG51bV9m
dW5jdGlvbnNfd2l0aF9sb2NhbF9uYW1lcyA9IDA7CisgICAgZm9yIChsZXQgZnVuYyBvZiB3YXNt
LmZ1bmN0aW9ucykgeworICAgICAgaWYgKGZ1bmMubmFtZSAhPT0gdW5kZWZpbmVkKSArK251bV9m
dW5jdGlvbl9uYW1lczsKKyAgICAgIGlmIChmdW5jLm51bUxvY2FsTmFtZXMoKSA+IDApICsrbnVt
X2Z1bmN0aW9uc193aXRoX2xvY2FsX25hbWVzOworICAgIH0KKyAgICBpZiAobnVtX2Z1bmN0aW9u
X25hbWVzID4gMCB8fCBudW1fZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFtZXMgPiAwIHx8CisgICAg
ICAgIHdhc20ubmFtZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdl
bWl0dGluZyBuYW1lcyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3Nl
Y3Rpb24oa1Vua25vd25TZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24u
ZW1pdF9zdHJpbmcoJ25hbWUnKTsKKyAgICAgICAgLy8gRW1pdCBtb2R1bGUgbmFtZS4KKyAgICAg
ICAgaWYgKHdhc20ubmFtZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0
X3NlY3Rpb24oa01vZHVsZU5hbWVDb2RlLCBuYW1lX3NlY3Rpb24gPT4geworICAgICAgICAgICAg
bmFtZV9zZWN0aW9uLmVtaXRfc3RyaW5nKHdhc20ubmFtZSk7CisgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gRW1pdCBmdW5jdGlvbiBuYW1lcy4KKyAgICAgICAgaWYgKG51bV9m
dW5jdGlvbl9uYW1lcyA+IDApIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfc2VjdGlvbihrRnVu
Y3Rpb25OYW1lc0NvZGUsIG5hbWVfc2VjdGlvbiA9PiB7CisgICAgICAgICAgICBuYW1lX3NlY3Rp
b24uZW1pdF91MzJ2KG51bV9mdW5jdGlvbl9uYW1lcyk7CisgICAgICAgICAgICBmb3IgKGxldCBm
dW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAgICAgICAgICAgIGlmIChmdW5jLm5hbWUgPT09
IHVuZGVmaW5lZCkgY29udGludWU7CisgICAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0X3Uz
MnYoZnVuYy5pbmRleCk7CisgICAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0X3N0cmluZyhm
dW5jLm5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg
ICAgIC8vIEVtaXQgbG9jYWwgbmFtZXMuCisgICAgICAgIGlmIChudW1fZnVuY3Rpb25zX3dpdGhf
bG9jYWxfbmFtZXMgPiAwKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3NlY3Rpb24oa0xvY2Fs
TmFtZXNDb2RlLCBuYW1lX3NlY3Rpb24gPT4geworICAgICAgICAgICAgbmFtZV9zZWN0aW9uLmVt
aXRfdTMydihudW1fZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFtZXMpOworICAgICAgICAgICAgZm9y
IChsZXQgZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgeworICAgICAgICAgICAgICBpZiAoZnVuYy5u
dW1Mb2NhbE5hbWVzKCkgPT0gMCkgY29udGludWU7CisgICAgICAgICAgICAgIG5hbWVfc2VjdGlv
bi5lbWl0X3UzMnYoZnVuYy5pbmRleCk7CisgICAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0
X3UzMnYoZnVuYy5udW1Mb2NhbE5hbWVzKCkpOworICAgICAgICAgICAgICBsZXQgbmFtZV9pbmRl
eCA9IDA7CisgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnVuYy5sb2NhbF9uYW1l
cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuYy5sb2NhbF9u
YW1lc1tpXSA9PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAgICAgbmFtZV9zZWN0aW9uLmVt
aXRfdTMydihuYW1lX2luZGV4KTsKKyAgICAgICAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0
X3N0cmluZyhmdW5jLmxvY2FsX25hbWVzW2ldKTsKKyAgICAgICAgICAgICAgICAgIG5hbWVfaW5k
ZXgrKzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgbmFtZV9p
bmRleCArPSBmdW5jLmxvY2FsX25hbWVzW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICB9
KTsKKyAgICB9CisKKyAgICByZXR1cm4gYmluYXJ5LnRydW5jX2J1ZmZlcigpOworICB9CisKKyAg
dG9BcnJheShkZWJ1ZyA9IGZhbHNlKSB7CisgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy50b0J1
ZmZlcihkZWJ1ZykpOworICB9CisKKyAgaW5zdGFudGlhdGUoZmZpKSB7CisgICAgbGV0IG1vZHVs
ZSA9IHRoaXMudG9Nb2R1bGUoKTsKKyAgICBsZXQgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlLCBmZmkpOworICAgIHJldHVybiBpbnN0YW5jZTsKKyAgfQorCisgIGFz
eW5jSW5zdGFudGlhdGUoZmZpKSB7CisgICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRl
KHRoaXMudG9CdWZmZXIoKSwgZmZpKQorICAgICAgICAudGhlbigoe21vZHVsZSwgaW5zdGFuY2V9
KSA9PiBpbnN0YW5jZSk7CisgIH0KKworICB0b01vZHVsZShkZWJ1ZyA9IGZhbHNlKSB7CisgICAg
cmV0dXJuIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUodGhpcy50b0J1ZmZlcihkZWJ1ZykpOworICB9
Cit9CisKK2Z1bmN0aW9uIHdhc21TaWduZWRMZWIodmFsLCBtYXhfbGVuID0gNSkgeworICBsZXQg
cmVzID0gW107CisgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4X2xlbjsgKytpKSB7CisgICAgbGV0
IHYgPSB2YWwgJiAweDdmOworICAgIC8vIElmIHt2fSBzaWduLWV4dGVuZGVkIGZyb20gNyB0byAz
MiBiaXRzIGlzIGVxdWFsIHRvIHZhbCwgd2UgYXJlIGRvbmUuCisgICAgaWYgKCgodiA8PCAyNSkg
Pj4gMjUpID09IHZhbCkgeworICAgICAgcmVzLnB1c2godik7CisgICAgICByZXR1cm4gcmVzOwor
ICAgIH0KKyAgICByZXMucHVzaCh2IHwgMHg4MCk7CisgICAgdmFsID0gdmFsID4+IDc7CisgIH0K
KyAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgJ0xlYiB2YWx1ZSA8JyArIHZhbCArICc+IGV4Y2Vl
ZHMgbWF4aW11bSBsZW5ndGggb2YgJyArIG1heF9sZW4pOworfQorCitmdW5jdGlvbiB3YXNtVW5z
aWduZWRMZWIodmFsLCBtYXhfbGVuID0gNSkgeworICBsZXQgcmVzID0gW107CisgIGZvciAobGV0
IGkgPSAwOyBpIDwgbWF4X2xlbjsgKytpKSB7CisgICAgbGV0IHYgPSB2YWwgJiAweDdmOworICAg
IGlmICh2ID09IHZhbCkgeworICAgICAgcmVzLnB1c2godik7CisgICAgICByZXR1cm4gcmVzOwor
ICAgIH0KKyAgICByZXMucHVzaCh2IHwgMHg4MCk7CisgICAgdmFsID0gdmFsID4+PiA3OworICB9
CisgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICdMZWIgdmFsdWUgPCcgKyB2YWwgKyAnPiBleGNl
ZWRzIG1heGltdW0gbGVuZ3RoIG9mICcgKyBtYXhfbGVuKTsKK30KKworZnVuY3Rpb24gd2FzbUkz
MkNvbnN0KHZhbCkgeworICByZXR1cm4gW2tFeHBySTMyQ29uc3QsIC4uLndhc21TaWduZWRMZWIo
dmFsLCA1KV07Cit9CisKKy8vIE5vdGU6IFNpbmNlIHt2YWx9IGlzIGEgSlMgbnVtYmVyLCB0aGUg
Z2VuZXJhdGVkIGNvbnN0YW50IG9ubHkgaGFzIDUzIGJpdHMgb2YKKy8vIHByZWNpc2lvbi4KK2Z1
bmN0aW9uIHdhc21JNjRDb25zdCh2YWwpIHsKKyAgcmV0dXJuIFtrRXhwckk2NENvbnN0LCAuLi53
YXNtU2lnbmVkTGViKHZhbCwgMTApXTsKK30KKworZnVuY3Rpb24gd2FzbUYzMkNvbnN0KGYpIHsK
KyAgLy8gV3JpdGUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciBhdCBvZmZzZXQgMC4KKyAgZGF0YV92
aWV3LnNldEZsb2F0MzIoMCwgZiwgdHJ1ZSk7CisgIHJldHVybiBbCisgICAga0V4cHJGMzJDb25z
dCwgYnl0ZV92aWV3WzBdLCBieXRlX3ZpZXdbMV0sIGJ5dGVfdmlld1syXSwgYnl0ZV92aWV3WzNd
CisgIF07Cit9CisKK2Z1bmN0aW9uIHdhc21GNjRDb25zdChmKSB7CisgIC8vIFdyaXRlIGluIGxp
dHRsZS1lbmRpYW4gb3JkZXIgYXQgb2Zmc2V0IDAuCisgIGRhdGFfdmlldy5zZXRGbG9hdDY0KDAs
IGYsIHRydWUpOworICByZXR1cm4gWworICAgIGtFeHByRjY0Q29uc3QsIGJ5dGVfdmlld1swXSwg
Ynl0ZV92aWV3WzFdLCBieXRlX3ZpZXdbMl0sIGJ5dGVfdmlld1szXSwKKyAgICBieXRlX3ZpZXdb
NF0sIGJ5dGVfdmlld1s1XSwgYnl0ZV92aWV3WzZdLCBieXRlX3ZpZXdbN10KKyAgXTsKK30KKwor
ZnVuY3Rpb24gd2FzbVMxMjhDb25zdChmKSB7CisgIC8vIFdyaXRlIGluIGxpdHRsZS1lbmRpYW4g
b3JkZXIgYXQgb2Zmc2V0IDAuCisgIHJldHVybiBba1NpbWRQcmVmaXgsIGtFeHByUzEyOENvbnN0
LCAuLi5mXTsKK30KKworZnVuY3Rpb24gZ2V0T3Bjb2RlTmFtZShvcGNvZGUpIHsKKyAgcmV0dXJu
IGdsb2JhbFRoaXMua1dhc21PcGNvZGVOYW1lcz8uW29wY29kZV0gPz8gJ3Vua25vd24nOworfQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3dhc20uanNvbiBiL0pTVGVzdHMvd2FzbS93YXNtLmpz
b24KaW5kZXggNGY4ZGQ5ZTNkMjEzNDM1MDAwMDA2ZTI0MTQ2YjAxOTRjOWFjODhmMS4uOWQyMjVl
NGU4MjI0OTY2MDQ0NGZmNDFhZWJiYTI3YzY0Yzc2ZWVmMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93
YXNtL3dhc20uanNvbgorKysgYi9KU1Rlc3RzL3dhc20vd2FzbS5qc29uCkBAIC0yMywzNCArMjMs
MzggQEAKICAgICAiYmxvY2tfdHlwZSI6IFsiaTMyIiwgImk2NCIsICJmMzIiLCAiZjY0IiwgInZv
aWQiLCAiZXh0ZXJucmVmIiwgImZ1bmNyZWYiXSwKICAgICAicmVmX3R5cGUiOiBbImZ1bmNyZWYi
LCAiZXh0ZXJucmVmIiwgInR5cGVfaWR4Il0sCiAgICAgImV4dGVybmFsX2tpbmQiOiB7Ci0gICAg
ICAgICJGdW5jdGlvbiI6IHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAwIH0sCi0gICAgICAg
ICJUYWJsZSI6ICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAxIH0sCi0gICAgICAgICJN
ZW1vcnkiOiAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAyIH0sCi0gICAgICAgICJHbG9i
YWwiOiAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAzIH0KKyAgICAgICAgIkZ1bmN0aW9u
IjogICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDAgfSwKKyAgICAgICAgIlRhYmxlIjog
ICAgICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDEgfSwKKyAgICAgICAgIk1lbW9yeSI6
ICAgICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDIgfSwKKyAgICAgICAgIkdsb2JhbCI6
ICAgICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDMgfSwKKyAgICAgICAgIkV4Y2VwdGlv
biI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDQgfQogICAgIH0sCiAgICAgInNlY3Rp
b24iIDogewotICAgICAgICAiVHlwZSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogIDEsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBzaWduYXR1cmUgZGVjbGFyYXRpb25zIiB9
LAotICAgICAgICAiSW1wb3J0IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDIs
ICJkZXNjcmlwdGlvbiI6ICJJbXBvcnQgZGVjbGFyYXRpb25zIiB9LAotICAgICAgICAiRnVuY3Rp
b24iOiB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDMsICJkZXNjcmlwdGlvbiI6ICJG
dW5jdGlvbiBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJUYWJsZSI6ICAgIHsgInR5cGUiOiAi
dmFydWludDciLCAidmFsdWUiOiAgNCwgImRlc2NyaXB0aW9uIjogIkluZGlyZWN0IGZ1bmN0aW9u
IHRhYmxlIGFuZCBvdGhlciB0YWJsZXMiIH0sCi0gICAgICAgICJNZW1vcnkiOiAgIHsgInR5cGUi
OiAidmFydWludDciLCAidmFsdWUiOiAgNSwgImRlc2NyaXB0aW9uIjogIk1lbW9yeSBhdHRyaWJ1
dGVzIiB9LAotICAgICAgICAiR2xvYmFsIjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogIDYsICJkZXNjcmlwdGlvbiI6ICJHbG9iYWwgZGVjbGFyYXRpb25zIiB9LAotICAgICAgICAi
RXhwb3J0IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDcsICJkZXNjcmlwdGlv
biI6ICJFeHBvcnRzIiB9LAotICAgICAgICAiU3RhcnQiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3
IiwgInZhbHVlIjogIDgsICJkZXNjcmlwdGlvbiI6ICJTdGFydCBmdW5jdGlvbiBkZWNsYXJhdGlv
biIgfSwKLSAgICAgICAgIkVsZW1lbnQiOiAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6
ICA5LCAiZGVzY3JpcHRpb24iOiAiRWxlbWVudHMgc2VjdGlvbiIgfSwKLSAgICAgICAgIkNvZGUi
OiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEwLCAiZGVzY3JpcHRpb24iOiAi
RnVuY3Rpb24gYm9kaWVzIChjb2RlKSIgfSwKLSAgICAgICAgIkRhdGEiOiAgICAgeyAidHlwZSI6
ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDExLCAiZGVzY3JpcHRpb24iOiAiRGF0YSBzZWdtZW50cyIg
fQorICAgICAgICAiVHlwZSI6ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAx
LCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0aW9ucyIgfSwKKyAg
ICAgICAgIkltcG9ydCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMiwgImRl
c2NyaXB0aW9uIjogIkltcG9ydCBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJGdW5jdGlvbiI6
ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDMsICJkZXNjcmlwdGlvbiI6ICJGdW5j
dGlvbiBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJUYWJsZSI6ICAgICB7ICJ0eXBlIjogInZh
cnVpbnQ3IiwgInZhbHVlIjogIDQsICJkZXNjcmlwdGlvbiI6ICJJbmRpcmVjdCBmdW5jdGlvbiB0
YWJsZSBhbmQgb3RoZXIgdGFibGVzIiB9LAorICAgICAgICAiTWVtb3J5IjogICAgeyAidHlwZSI6
ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA1LCAiZGVzY3JpcHRpb24iOiAiTWVtb3J5IGF0dHJpYnV0
ZXMiIH0sCisgICAgICAgICJFeGNlcHRpb24iOiB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogMTMsICJkZXNjcmlwdGlvbiI6ICJFeGNlcHRpb24gZGVjbGFyYXRpb25zIiB9LAorICAgICAg
ICAiR2xvYmFsIjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA2LCAiZGVzY3Jp
cHRpb24iOiAiR2xvYmFsIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIkV4cG9ydCI6ICAgIHsg
InR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNywgImRlc2NyaXB0aW9uIjogIkV4cG9ydHMi
IH0sCisgICAgICAgICJTdGFydCI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjog
IDgsICJkZXNjcmlwdGlvbiI6ICJTdGFydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiIgfSwKKyAgICAg
ICAgIkVsZW1lbnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgOSwgImRlc2Ny
aXB0aW9uIjogIkVsZW1lbnRzIHNlY3Rpb24iIH0sCisgICAgICAgICJDb2RlIjogICAgICB7ICJ0
eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTAsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBi
b2RpZXMgKGNvZGUpIiB9LAorICAgICAgICAiRGF0YSI6ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50
NyIsICJ2YWx1ZSI6IDExLCAiZGVzY3JpcHRpb24iOiAiRGF0YSBzZWdtZW50cyIgfSwKKyAgICAg
ICAgIkRhdGFDb3VudCI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMiwgImRlc2Ny
aXB0aW9uIjogIk51bWJlciBvZiBkYXRhIHNlZ21lbnRzIiB9CiAgICAgfSwKICAgICAib3Bjb2Rl
IjogewogICAgICAgICAidW5yZWFjaGFibGUiOiAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRy
b2wiLCAgICAidmFsdWUiOiAgIDAsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlt
bWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogInRyYXAgaW1tZWRpYXRlbHkiIH0sCisgICAgICAgICJub3AiOiAgICAgICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMSwgInJldHVybiI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibm8gb3BlcmF0aW9uIiB9LAogICAgICAgICAi
YmxvY2siOiAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUi
OiAgIDIsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFt
ZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5h
bWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGEg
c2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnMsIHlpZWxkaW5nIDAgb3IgMSB2YWx1ZXMiIH0sCiAgICAg
ICAgICJsb29wIjogICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2
YWx1ZSI6ICAgMywgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAi
cGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjog
W3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVn
aW4gYSBibG9jayB3aGljaCBjYW4gYWxzbyBmb3JtIGNvbnRyb2wgZmxvdyBsb29wcyIgfSwKICAg
ICAgICAgImlmIjogICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAg
InZhbHVlIjogICA0LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAg
ICJwYXJhbWV0ZXIiOiBbImJvb2wiXSwgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUi
OiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJi
ZWdpbiBpZiBleHByZXNzaW9uIiB9LAogICAgICAgICAiZWxzZSI6ICAgICAgICAgICAgICAgIHsg
ImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDUsICJyZXR1cm4iOiBbImNvbnRy
b2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGVsc2UgZXhwcmVzc2lvbiBvZiBpZiIgfSwK
LSAgICAgICAgInNlbGVjdCI6ICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwg
ICAgInZhbHVlIjogIDI3LCAicmV0dXJuIjogWyJwcmV2Il0sICAgICAgICAgICAgICAgICAgICAg
ICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wiXSwgICAgICAgICJpbW1lZGlh
dGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJzZWxlY3Qgb25lIG9mIHR3byB2YWx1ZXMgYmFzZWQgb24gY29uZGl0aW9uIiB9LAotICAgICAg
ICAiYW5ub3RhdGVkX3NlbGVjdCI6ICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFs
dWUiOiAgMjgsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAgICAgICAgICAgICAgInBh
cmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAgImltbWVkaWF0ZSI6IFt7
Im5hbWUiOiAidGFyZ2V0X3R5cGVzX2NvdW50IiwgInR5cGUiOiAidmFydWludDMyIiwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIm51bWJl
ciBvZiBlbnRyaWVzIGluIHRoZSB0YXJnZXQgdHlwZXMgdmVjdG9yIn0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsibmFtZSI6
ICJ0YXJnZXRfdHlwZXMiLCAgICAgICAidHlwZSI6ICJ2YWx1ZV90eXBlKiIsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGFyZ2V0IHR5cGVz
IHRoYXQgaW5kaWNhdGUgcmVzdWx0IG9mIHNlbGVjdCBpbnN0cnVjdGlvbiJ9XSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgc2Ft
ZSBhcyBqdXN0IHNlbGVjdCBidXQgd2l0aCB0aGUgYW5ub3RhdGlvbiBmb3IgcmVzdWx0IHR5cGVz
IiB9LAorICAgICAgICAidHJ5IjogICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRy
b2wiLCAgICAidmFsdWUiOiAgIDYsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAg
ICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlt
bWVkaWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogImJlZ2luIHRyeSBleHByZXNzaW9uIiB9LAorICAgICAgICAiY2F0Y2giOiAgICAgICAg
ICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDcsICJyZXR1cm4i
OiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZXhuIiwgInR5
cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGNhdGNoIGV4cHJlc3Npb24g
b2YgdHJ5IiB9LAorICAgICAgICAidGhyb3ciOiAgICAgICAgICAgICAgIHsgImNhdGVnb3J5Ijog
ImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDgsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAg
ICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZXhuIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogInRocm93IGV4Y2VwdGlvbiIgfSwKKyAgICAgICAgInJldGhyb3ciOiAgICAg
ICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA5LCAicmV0dXJu
IjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZl
X2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJyZXRocm93IHRoZSBleGNlcHRpb24g
YXQgdGhlIHRvcCBvZiB0aGUgc3RhY2siIH0sCiAgICAgICAgICJiciI6ICAgICAgICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMiwgInJldHVybiI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2ZV9kZXB0
aCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYnJlYWsgdGhhdCB0YXJnZXRzIGFuIG91dGVy
IG5lc3RlZCBibG9jayIgfSwKICAgICAgICAgImJyX2lmIjogICAgICAgICAgICAgICB7ICJjYXRl
Z29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDEzLCAicmV0dXJuIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2RlcHRoIiwgInR5cGUi
OiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJjb25kaXRpb25hbCBicmVhayB0aGF0IHRhcmdldHMgYW4gb3V0
ZXIgbmVzdGVkIGJsb2NrIiB9LAogICAgICAgICAiYnJfdGFibGUiOiAgICAgICAgICAgIHsgImNh
dGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTQsICJyZXR1cm4iOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidGFyZ2V0X2NvdW50IiwgICAidHlw
ZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIm51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YXJnZXRfdGFi
bGUifSwKQEAgLTU4LDggKzYyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsibmFtZSI6ICJkZWZhdWx0X3RhcmdldCIs
ICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYW4gb3V0ZXIgYmxvY2sgb3IgbG9vcCB0byB3aGlj
aCB0byBicmVhayBpbiB0aGUgZGVmYXVsdCBjYXNlIn1dLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJyYW5jaCB0YWJsZSBjb250cm9s
IGZsb3cgY29uc3RydWN0IiB9LAogICAgICAgICAicmV0dXJuIjogICAgICAgICAgICAgIHsgImNh
dGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTUsICJyZXR1cm4iOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogInJldHVybiB6ZXJvIG9yIG9uZSB2YWx1ZSBmcm9tIHRoaXMg
ZnVuY3Rpb24iIH0sCisgICAgICAgICJkZWxlZ2F0ZSI6ICAgICAgICAgICAgeyAiY2F0ZWdvcnki
OiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNCwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAg
ICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2ZV9kZXB0aCIsICJ0eXBlIjogInZh
cnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiZGVsZWdhdGUgdG8gYSBwYXJlbnQgdHJ5IGJsb2NrIiB9LAorICAgICAg
ICAiY2F0Y2hfYWxsIjogICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFs
dWUiOiAgMjUsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBh
cmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImNhdGNo
IGV4Y2VwdGlvbnMgcmVnYXJkbGVzcyBvZiB0YWciIH0sCiAgICAgICAgICJkcm9wIjogICAgICAg
ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNiwgInJldHVy
biI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnki
XSwgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiaWdub3JlIHZhbHVlIiB9LAotICAg
ICAgICAibm9wIjogICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAi
dmFsdWUiOiAgIDEsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6
IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIm5v
IG9wZXJhdGlvbiIgfSwKKyAgICAgICAgInNlbGVjdCI6ICAgICAgICAgICAgICB7ICJjYXRlZ29y
eSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI3LCAicmV0dXJuIjogWyJwcmV2Il0sICAgICAg
ICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wiXSwg
ICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJzZWxlY3Qgb25lIG9mIHR3byB2YWx1ZXMgYmFzZWQgb24gY29uZGl0
aW9uIiB9LAorICAgICAgICAiYW5ub3RhdGVkX3NlbGVjdCI6ICAgIHsgImNhdGVnb3J5IjogImNv
bnRyb2wiLCAgICAidmFsdWUiOiAgMjgsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAg
ICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAg
ImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidGFyZ2V0X3R5cGVzX2NvdW50IiwgInR5cGUiOiAidmFy
dWludDMyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIm51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YXJnZXQgdHlwZXMgdmVjdG9yIn0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsibmFtZSI6ICJ0YXJnZXRfdHlwZXMiLCAgICAgICAidHlwZSI6ICJ2YWx1ZV90eXBl
KiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAidGFyZ2V0IHR5cGVzIHRoYXQgaW5kaWNhdGUgcmVzdWx0IG9mIHNlbGVjdCBpbnN0cnVjdGlv
biJ9XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJ0aGUgc2FtZSBhcyBqdXN0IHNlbGVjdCBidXQgd2l0aCB0aGUgYW5ub3RhdGlvbiBm
b3IgcmVzdWx0IHR5cGVzIiB9LAogICAgICAgICAiZW5kIjogICAgICAgICAgICAgICAgIHsgImNh
dGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTEsICJyZXR1cm4iOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogImVuZCBhIGJsb2NrLCBsb29wLCBvciBpZiIgfSwKICAgICAg
ICAgImkzMi5jb25zdCI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJzcGVjaWFsIiwgICAgInZh
bHVlIjogIDY1LCAicmV0dXJuIjogWyJpMzIiXSwgICAgICAgICAgICAgICAgICAgICAgICAgICJw
YXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBb
eyJuYW1lIjogInZhbHVlIiwgICAgICAgICAgInR5cGUiOiAidmFyaW50MzIifV0sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhIGNv
bnN0YW50IHZhbHVlIGludGVycHJldGVkIGFzIGkzMiIgfSwKICAgICAgICAgImk2NC5jb25zdCI6
ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJzcGVjaWFsIiwgICAgInZhbHVlIjogIDY2LCAicmV0
dXJuIjogWyJpNjQiXSwgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInZhbHVl
IiwgICAgICAgICAgInR5cGUiOiAidmFyaW50NjQifV0sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhIGNvbnN0YW50IHZhbHVlIGlu
dGVycHJldGVkIGFzIGk2NCIgfSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440424</attachid>
            <date>2021-10-06 13:11:02 -0700</date>
            <delta_ts>2021-10-06 19:01:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229681-20211006131100.patch</filename>
            <type>text/plain</type>
            <size>706299</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
YzUyN2ZiNmZlZjIwNjViZWEzODc0OGJjOGE0MWI3MWQzZjljNmY5Li41NmIyNDM4ZTM3NzI4NGI2
MzU5MTg2NmFlZWNjYWE1Nzg4NTk5MjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NTAgQEAKKzIwMjEtMDktMTYgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+IGFuZCBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCB0aGUgV2ViQXNzZW1ibHkgZXhjZXB0aW9uIGhhbmRsaW5nIHByb3Bvc2FsCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk2ODEKKyAg
ICAgICAgPHJkYXI6Ly84MTYwMzM4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlv
biBoYW5kbGluZyBwcm9wb3NhbCwgYXMgcGVyCisgICAgICAgIHRoZSBXSVAgc3BlYzogaHR0cHM6
Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2V4Y2VwdGlvbi1oYW5kbGluZworCisgICAgICAgIFRo
ZSBwcm9wb3NhbCBpbmNsdWRlcyA2IG5ldyBpbnN0cnVjdGlvbnM6IHRyeSwgY2F0Y2gsIGNhdGNo
X2FsbCwKKyAgICAgICAgZGVsZWdhdGUsIHRocm93IGFuZCByZXRocm93LiBBbGwgdGhlIGluc3Ry
dWN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5CisgICAgICAgIHRoZSBMTEludCBhbmQgQjMgZ2VuZXJh
dG9ycywgYnV0IG5vdCB5ZXQgc3VwcG9ydGVkIGluIEFpci4gQW55CisgICAgICAgIGZ1bmN0aW9u
cyB1c2UgZXhjZXB0aW9ucyB3aWxsIHVzZSBCMyBpbiBCQlEuCisKKyAgICAgICAgQSBmZXcgaW1w
b3J0YW50IG5vdGVzIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgLSBJbiBCMywg
c2luY2Ugd2UgY2FuIG5vdyBoYXZlIG11bHRpcGxlIGVudHJ5cG9pbnRzIChvbmUgZm9yIHRoZQor
ICAgICAgICBmdW5jdGlvbiBlbnRyeSArIDEgZm9yIGVhY2ggY2F0Y2gvY2F0Y2hfYWxsKSwgd2Ug
Y2FuIG5vIGxvbmdlciBqdXN0CisgICAgICAgIHJlcGxhY2UgZXZlcnkgdmFsdWUgaW4gdGhlIHN0
YWNrIHdpdGggYSBQaGkgd2hlbiB3ZSBmaW5kIGEgbmV3CisgICAgICAgIGVudHJ5cG9pbnQuIFRo
aXMgd29ya2VkIHNvIGZhciBiZWNhdXNlIG9mIHRoZSBhc3N1bXB0aW9uIHRoYXQgYW55CisgICAg
ICAgIGJsb2NrIGNvdWxkbid0IGFjY2VzcyBpdHMgZW5jbG9zaW5nIHN0YWNrLCBhbmQgc2luY2Ug
dGhlIGVuY2xvc2luZyBzdGFjaworICAgICAgICB3b3VsZCBvbmx5IGJlIGFjY2Vzc2libGUgd2hl
biB3ZSBleGl0ZWQgdGhlIGN1cnJlbnQgYmxvY2ssIHdlIGFkZGVkIFBoaXMKKyAgICAgICAgYXQg
dGhlIGVuZCBvZiBlYWNoIGJsb2NrIHdoZW4gd2UgaGFkIGEgbmV3IGVudHJ5cG9pbnQuIE5vdywg
c2luY2Ugd2UgaGF2ZSB0byBjYXB0dXJlIGFsbAorICAgICAgICBsaXZlIHZhbHVlcyBhdCBhbnkg
cG9pbnQgdGhhdCBtaWdodCB0aHJvdyAoY2FsbHMsIHRocm93IGFuZCByZXRocm93KSwKKyAgICAg
ICAgd2UgYnJlYWsgdGhhdCBhc3N1bXB0aW9uLiBUbyBzaW1wbGlmeSBhbGwgdGhlIHBvc3NpYmxl
IHdheXMgd2UgbWlnaHQKKyAgICAgICAgaGF2ZSB0byBtZXJnZSB0aGUgc3RhdGUgZnJvbSBtdWx0
aXBsZSBlbnRyeXBvaW50cyB3ZSBub3cgdXNlIEIzCisgICAgICAgIFZhcmlhYmxlcyB0byByZXBy
ZXNlbnQgc3RhY2sgc2xvdHMuCisgICAgICAgIC0gU29tZSBleHRyYSBpbmZvcm1hdGlvbiBpcyBy
ZXF1aXJlZCB0byBiZSBhYmxlIHRvIHByb3Blcmx5IHJlc3RvcmUKKyAgICAgICAgdGhlIHN0YXRl
IHdoZW4gY2F0Y2hpbmcgYW4gZXhjZXB0aW9uOgorICAgICAgICAgICAgLSBXZSBhZGRlZCBhIGZp
ZWxkIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2guIFRoaXMgZmllbGQgaXMgbmVjZXNzYXJ5CisgICAg
ICAgICAgICBiZWNhdXNlIHdoZW5ldmVyIHdlIHRocm93LCB3ZSBtaWdodCBlbmQgdXAgaW4gSmF2
YVNjcmlwdCwgd2hpY2gKKyAgICAgICAgICAgIGFzc3VtZXMgdGhlIGNhbGxlZSBpcyBhIGNlbGwg
YW5kIHVzZXMgaXQgdG8gZ2V0IHRoZSBWTSBhbmQgcmVzdG9yZQorICAgICAgICAgICAgY2FsbGVl
IHNhdmVzLiBUaGUgaXNzdWUgaXMgd2hlbiBjYXRjaGluZyBleGNlcHRpb25zIGluIHdhc20gd2UK
KyAgICAgICAgICAgIHN0aWxsIG5lZWQgdGhlIG9yaWdpbmFsIGNhbGxlZSwgYW5kIGlmIHRocm93
aW5nIGFuZCBjYXRjaGluZyBmcm9tCisgICAgICAgICAgICB0aGUgc2FtZSBmcmFtZSwgdGhhdCBj
YWxsIGZyYW1lIHNsb3QgaGFzIG5vdyBiZWVuIG92ZXJ3cml0dGVuLCBzbworICAgICAgICAgICAg
d2Ugc3RvcmUgaXRzIG9yaWdpbmFsIHZhbHVlIGluIHRoZSBWTSBmaWVsZC4KKyAgICAgICAgICAg
IC0gV2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZSBjdXJyZW50IFdhc20gSW5zdGFuY2UgaW50byB0
aGUgY2FsbAorICAgICAgICAgICAgZnJhbWUncyBzbG90IGZvciB0aGUgYHRoaXNgIGFyZ3VtZW50
LiBUaGUgaW5zdGFuY2UgaXMgdXNlZCBib3RoIGJ5CisgICAgICAgICAgICB0aGUgdW53aW5kZXIs
IHRvIGNoZWNrIGlmIHRoZSBleGNlcHRpb24gYmVpbmcgdGhyb3duIG1hdGNoZXMgdGhlCisgICAg
ICAgICAgICBleGNlcHRpb25zIGhhbmRsZWQgYnkgY2F0Y2ggY2FuZGlkYXRlcywgYW5kIGJ5IHRo
ZSBjYXRjaCBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgICAgIHdoaWNoIGlzIG5lY2Vzc2FyeSB3
aGVuIHRocm93aW5nIGZyb20gYSBjcm9zcyBpbnN0YW5jZSBjYWxsIHdoZXJlIGJvdGgKKyAgICAg
ICAgICAgIHRoZSBjYWxsZWUgc2F2ZSBvciBUTFMgd2lsbCBoYXZlIHRoZSBjYWxsZWUncyBpbnN0
YW5jZS4KKyAgICAgICAgICAgIC0gV2Ugc3RvcmUgdGhlIGN1cnJlbnQgb3Bjb2RlIGZvciB0aGUg
bGxpbnQsIG9yIHRoZQorICAgICAgICAgICAgY2FsbCBzaXRlIGluZGV4IGZvciBCMywgaW4gdGhl
IGNhbGwgZnJhbWUgc2xvdCBmb3IgdGhlIGFyZ3VtZW50CisgICAgICAgICAgICBjb3VudCB0YWcu
IFRoZSBjYWxsIHNpdGUgaW5kZXggaXMgdXNlZCBieSB0aGUgdW53aW5kZXIgdG8gY2hlY2sKKyAg
ICAgICAgICAgIGlmIGEgZ2l2ZW4gY2F0Y2ggY2FuIGhhbmRsZSB0aGUgZXhjZXB0aW9uIGJlaW5n
IHRocm93bi4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6Cisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9IYW5kbGVySW5mby5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6OkJhc2VJbnN0cnVj
dGlvbjo6bmFtZSBjb25zdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Omhhc2ggY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpkZWxldGVkVmFsdWUpOgorICAgICAgICAo
SlNDOjpDYWxsU2l0ZUluZGV4Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXhIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6Q2FsbFNp
dGVJbmRleEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkNhdGNoSW5mbzo6Q2F0Y2hJbmZvKToKKyAgICAgICAgKEpTQzo6
VW53aW5kRnVuY3Rvcjo6VW53aW5kRnVuY3Rvcik6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0
b3I6Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5k
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpD
YXRjaEluZm86OkNhdGNoSW5mbyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKToK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBq
aXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAg
ICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJ
VDo6Y29udmVydENhbGxlZVRvVk0pOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5oOgorICAg
ICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZVJlZik6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRX
aWRlMTZDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldFdpZGUzMkNvZGVSZWYpOgor
ICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50
Ojp3YXNtUmV0dXJuVG9UaHJvdyk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVXYXNtQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlV2FzbUNhdGNoQWxsKToKKyAgICAgICAg
KiBsbGludC9MTEludEV4Y2VwdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludE9mZnNldHNF
eHRyYWN0b3IuY3BwOgorICAgICAgICAqIGxsaW50L1dlYkFzc2VtYmx5LmFzbToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNl
OjpFcnJvckluc3RhbmNlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c2V0Q2F0Y2hhYmxlRnJvbVdhc20pOgorICAgICAg
ICAoSlNDOjpFcnJvckluc3RhbmNlOjppc0NhdGNoYWJsZUZyb21XYXNtIGNvbnN0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmNhbGxlZUZvcldhc21DYXRjaE9mZnNldCk6Cisg
ICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzVHJ5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0FueUNhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzQmxvY2spOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6Q29udHJvbERhdGEpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNUcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNBbnlDYXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpDb250cm9sRGF0YTo6aXNCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2gpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2hBbGwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6dHJ5U3Rh
cnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6dHJ5RW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGE6OnRyeURlcHRoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmNhdGNoS2luZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpleGNlcHRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6c3RhY2tTaXplIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZGlkUG9wVmFsdWVGcm9tU3RhY2sp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRTdGFja01hcCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnRha2VTdGFja21hcHMpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjp0YWtlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpwdXNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
c2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Z2Vu
ZXJhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpmaXh1cFBv
aW50ZXJQbHVzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnJlc3RvcmVX
ZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6aW5zZXJ0RW50cnlTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjppbnNlcnRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRSZWZJc051bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUYWJs
ZUdldCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkUmVmRnVuYyk6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlSW5pdCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRhYmxlQ29weSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6Omdl
dExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0
Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5RmlsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUluaXQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlDb3B5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpnZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpzZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hl
Y2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmVtaXRMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpzdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OnNhbml0aXplQXRvbWljUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNMb2FkT3ApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNMb2FkKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY1N0b3JlT3ApOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNTdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNCaW5hcnlSTVdPcCk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmF0b21pY0JpbmFyeVJNVyk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YXRvbWljTm90aWZ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6dHJ1bmNTYXR1cmF0ZWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRTZWxlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRMb29w
VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkRnJv
bVNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjb25u
ZWN0Q29udHJvbEVudHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
TG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNo
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRG
b3JFeGNlcHRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0
Y2hUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
Q2F0Y2hBbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYXRjaEFs
bFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0
Q2F0Y2hJbXBsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdh
dGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5y
ZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUaHJvdyk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbmRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEVuZFRv
VW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjcmVhdGVD
YWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENh
bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayk6CisgICAgICAgIChKU0M6Oldh
c206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVFeGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
ZW1pdENoZWNrc0Zvck1vZE9yRGl2KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1VPik6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4pOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0ej4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0
ej4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRP
cDxGNjRDb252ZXJ0VUk2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNT
RjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyVHJ1bmNTRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyVHJ1bmNVRjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0Pik6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0Pik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMy
Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNVRjMyPik6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAg
ICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpw
cmVwYXJlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBs
YW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpDYWxsZWU6OmhhbmRsZXJGb3JJbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2Fs
bGVlOjpMTEludENhbGxlZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2FsbGVlOjpsaW5r
RXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6aW5nSklUQ2Fs
bGVlOjpsaW5rRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6
aW5nSklUQ2FsbGVlOjpzdGFja21hcCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVl
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6aGFzRXhjZXB0aW9uSGFuZGxlcnMgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmZ1bmN0aW9uQ29kZUJsb2NrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6T3B0aW1pemluZ0pJVENhbGxlZTo6T3B0aW1pemluZ0pJ
VENhbGxlZSk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V2FzbUNhbGxpbmdDb252ZW50aW9uOjpjYWxsSW5mb3JtYXRpb25Gb3Ig
Y29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0eXBlVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjppc1ZhbGlkRXh0ZXJuYWxLaW5k
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVN0cmluZyk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxv
Y2s6Om51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpGdW5jdGlvbkNvZGVCbG9jazo6ZXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uQ29kZUJsb2NrOjphZGRFeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKiB3
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjppc1RyeU9yQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eGNlcHRpb25JbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20v
V2FzbUhhbmRsZXJJbmZvLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkhhbmRsZXJJ
bmZvOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmhhbmRs
ZXJGb3JJbmRleCk6CisgICAgICAgICogd2FzbS9XYXNtSGFuZGxlckluZm8uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlVubGlua2VkSGFuZGxlckluZm86OlVubGlua2VkSGFuZGxlcklu
Zm8pOgorICAgICAgICAoSlNDOjpXYXNtOjpIYW5kbGVySW5mbzo6dGFnIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmRlbGVnYXRlVGFyZ2V0IGNvbnN0KToKKyAgICAg
ICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojp+SW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmg6CisgICAgICAgIChK
U0M6Oldhc206Okluc3RhbmNlOjphZGRUYWcpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5j
ZTo6dGFnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6dHJ5Xyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6Y2F0Y2hfKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc0xvb3Ap
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmlzQmxv
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
SWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
VHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpp
c0FueUNhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xU
eXBlOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnVuaWZ5
VmFsdWVzV2l0aEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6Ondh
bGtFeHByZXNzaW9uU3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
bWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJz
ZUFuZENvbXBpbGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpMTEludEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpy
ZXBhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNh
bGxlcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRp
b25Gb3JDYWxsZWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZExvb3ApOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21MaW1pdHMuaDoKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5m
b3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmV4Y2Vw
dGlvbkluZGV4U3BhY2VTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb246OmlzSW1wb3J0ZWRFeGNlcHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25z
dCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpzaWduYXR1cmVJbmRl
eEZyb21FeGNlcHRpb25JbmRleFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlSW5mb3JtYXRpb246OmltcG9ydEV4Y2VwdGlvbkNvdW50IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmlzRGVjbGFyZWRFeGNlcHRpb24gY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6YWRkRGVjbGFyZWRFeGNlcHRp
b24pOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9X
YXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAqIHdhc20vV2FzbU9TUkVudHJ5RGF0YS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpPU1JF
bnRyeURhdGE6OnZhbHVlcyk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OmxvYWRWYWx1ZXNJbnRvQnVmZmVyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6ZG9PU1JFbnRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTik6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHdh
c20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFy
c2VyOjpwYXJzZUltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBh
cnNlRXhwb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFeGNl
cHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25zLmg6CisgICAgICAgIChKU0M6Oldh
c206OnZhbGlkYXRlT3JkZXIpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWduYXR1cmVJbmZvcm1h
dGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpzaWduYXR1
cmVGb3IpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpXQVNNX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0
aHMuaDoKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rpb25TaXplKToKKyAgICAg
ICAgKiB3YXNtL1dhc21UYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9XYXNt
VGFnLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdl
bmVyYXRvci5oLgorICAgICAgICAoSlNDOjpXYXNtOjpUYWc6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6Oldhc206OlRhZzo6cGFyYW1ldGVyQ291bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUYWc6OnBhcmFtZXRlciBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6c2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6VGFnOjpUYWcpOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5jcHA6CisgICAg
ICAgICogd2FzbS9XYXNtVGh1bmtzLmg6CisgICAgICAgICogd2FzbS9nZW5lcmF0ZVdhc21CM0lS
R2VuZXJhdG9ySW5saW5lc0hlYWRlci5weToKKyAgICAgICAgKENvZGVHZW5lcmF0b3IuZ2VuZXJh
dGVPcGNvZGUpOgorICAgICAgICAoQ29kZUdlbmVyYXRvci5tYWtlUmVzdWx0KToKKyAgICAgICAg
KENvZGVHZW5lcmF0b3IuZ2VuZXJhdGUpOgorICAgICAgICAqIHdhc20vZ2VuZXJhdGVXYXNtT3Bz
SGVhZGVyLnB5OgorICAgICAgICAodHlwZU1hY3JvaXplcik6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6SlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRp
b246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlv
bjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Z2V0
QXJnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnN1YnNwYWNlRm9y
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6dGFnIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6cGF5bG9hZCBjb25zdCk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjp0b0pTVmFsdWUpOgor
ICAgICAgICAoSlNDOjpmcm9tSlNWYWx1ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRy
eUNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwOgorICAgICAgICAo
SlNDOjpjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKToKKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eVRhZzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6SlNXZWJBc3NlbWJseVRh
Zyk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaC4K
KyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2Fz
bVRvSlMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3I6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAg
ICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OmdldEV4Y2VwdGlv
bik6CisgICAgICAgIChKU0M6OmdldFRhZyk6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1
Y3Rvcjo6Y3JlYXRlVGFnKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
OjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlUYWdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFnUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpnZXRUYWcp
OgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAq
IHdhc20vd2FzbS5qc29uOgorCiAyMDIxLTEwLTA2ICBYYW4gTMOzcGV6ICA8eGFuQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0pTQ11bMzJiaXRdIFJlbW92ZSBhIGJ1bmNoIG9mIGNvbXBpbGVyIHdh
cm5pbmdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYjMyYzMwZjExMGY2
YTI5ZTJjODE2Zjg3YzU1NmExMmZkYmUwZDZjOC4uZmNmMGQ5YjZiZGZiOGFjOGExYjMyNTU3ZDRh
MTlkMWUyZmQwMjZjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTIy
LDYgKzEyMiw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9PQkpFQ1RfTFVUX1NPVVJDRVMKICAgICB3
YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBp
bGVFcnJvckNvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJy
b3JQcm90b3R5cGUuY3BwCisgICAgd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmNwcAorICAgIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwCiAg
ICAgd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMv
V2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0xMzYsNiArMTM4LDggQEAgc2V0KEphdmFTY3JpcHRD
b3JlX09CSkVDVF9MVVRfU09VUkNFUwogICAgIHdhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3JQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3Iu
Y3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAorICAgIHdhc20v
anMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAKKyAgICB3YXNtL2pzL1dlYkFzc2VtYmx5
VGFnUHJvdG90eXBlLmNwcAogKQogCiBzZXQoSmF2YVNjcmlwdENvcmVfRlJBTUVXT1JLUwpAQCAt
NjAzLDYgKzYwNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAKICAgICBiMy9CM0NvbW1vbi5oCiAgICAgYjMvQjNUeXBlLmgKKyAgICBiMy9CM1ZhbHVl
UmVwLmgKIAogICAgIGJpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCiAgICAgYmluZGluZ3Mv
U2NyaXB0T2JqZWN0LmgKQEAgLTEyMjAsNiArMTIyNSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmgKICAgICB3YXNtL1dhc21Gb3JtYXQuaAogICAgIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
LmgKKyAgICB3YXNtL1dhc21IYW5kbGVySW5mby5oCiAgICAgd2FzbS9XYXNtSW5kZXhPck5hbWUu
aAogICAgIHdhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCiAgICAgd2FzbS9XYXNtTWVtb3J5
LmgKQEAgLTEyMjgsMTIgKzEyMzQsMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICB3YXNtL1dhc21Nb2R1bGUuaAogICAgIHdhc20vV2FzbU5hbWUu
aAogICAgIHdhc20vV2FzbU5hbWVTZWN0aW9uLmgKKyAgICB3YXNtL1dhc21PU1JFbnRyeURhdGEu
aAogICAgIHdhc20vV2FzbVBhZ2VDb3VudC5oCiAgICAgd2FzbS9XYXNtU2VjdGlvbnMuaAogICAg
IHdhc20vV2FzbVNpZ25hdHVyZS5oCiAgICAgd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuaAog
ICAgIHdhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5oCiAgICAgd2FzbS9XYXNtVGllclVwQ291bnQu
aAorICAgIHdhc20vV2FzbVZhbHVlTG9jYXRpb24uaAogCiAgICAgd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmgKICAgICB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCAy
ODg1YjUxMDE3Y2MxYWUzZDg5MmVmM2M1ZjI3YTRiMTIzNzUzODQyLi4wNmIyMTc1MTJjNmZiYzJk
ODUyNzI0YWFhNzZmYTU3OTRlM2RhZDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTk3LDYgKzE5Nyw4IEBA
ICQoUFJPSkVDVF9ESVIpL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CiAkKFBST0pFQ1Rf
RElSKS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dl
YkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNt
L2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAorJChQUk9KRUNUX0RJUikv
d2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAorJChQUk9KRUNUX0RJ
Uikvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAKICQoUFJPSkVDVF9E
SVIpL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAKICQoUFJPSkVDVF9E
SVIpL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCiAkKFBST0pFQ1RfRElS
KS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTIxMSw2ICsy
MTMsOCBAQCAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29u
c3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yUHJvdG90eXBlLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
Q29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQ
cm90b3R5cGUuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBl
LmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS93YXNtLmpzb24KICQoUFJPSkVDVF9ESVIpL3lhcnIv
Y3JlYXRlX3JlZ2V4X3RhYmxlcwogJChQUk9KRUNUX0RJUikveWFyci9nZW5lcmF0ZVlhcnJDYW5v
bmljYWxpemVVbmljb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggMmFkMjEzMWM1ODY2OWJkMDU3NWM3YWY0
MGE2YzQyN2E1OTRmNWMzZS4uY2IwNWQ4MjE2MmFkOWM0Y2ZmNjRjYTE4Y2FlYWUxODcxYmVjNmY2
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdApAQCAtODIsNiArODIsOCBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2FzbUxMSW50R2VuZXJhdG9ySW5saW5lcy5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2Fz
bU9wcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENv
cmUvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaAogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5Q29tcGls
ZUVycm9yUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaAor
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFz
c2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5s
dXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3Jl
L1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmx1dC5oCkBAIC05Niw2ICs5OCw4IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0CiAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3JQcm90b3R5cGUubHV0LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9X
ZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5sdXQu
aAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dl
YkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCmluZGV4IGVjYmNlNjdmNzhjMDAzNGMxNjZmNTBkNTg5MmE2ZjA4YzVk
YTQwZDYuLjc4OTc1NmYxMGY4YmRiODBjNTJmNGJlOTgwZjUzZjQ5MmEyZDFkNGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yMDMsNiArMjAzLDggQEAg
T0JKRUNUX0xVVF9IRUFERVJTID0gXAogICAgIFRlbXBvcmFsVGltZVpvbmVQcm90b3R5cGUubHV0
LmggXAogICAgIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggXAogICAg
IFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJs
eUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJseUV4Y2VwdGlvblBy
b3RvdHlwZS5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5sdXQuaCBc
CiAgICAgV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUubHV0LmggXAogICAgIFdlYkFzc2VtYmx5
SW5zdGFuY2VDb25zdHJ1Y3Rvci5sdXQuaCBcCkBAIC0yMTcsNiArMjE5LDggQEAgT0JKRUNUX0xV
VF9IRUFERVJTID0gXAogICAgIFdlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmx1dC5o
IFwKICAgICBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0LmggXAogICAgIFdlYkFzc2Vt
Ymx5VGFibGVQcm90b3R5cGUubHV0LmggXAorICAgIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3Iu
bHV0LmggXAorICAgIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oIFwKICMKIAogJChPQkpF
Q1RfTFVUX0hFQURFUlMpOiAlLmx1dC5oIDogJS5jcHAgJChKYXZhU2NyaXB0Q29yZSkvY3JlYXRl
X2hhc2hfdGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGMzNTU0NTBkMjRm
NjlhOGM5MThmYmQzOTA1YjQyYmNiOTUwNzkzOC4uODg4OWIxMGZmMjI3YWMxNzQ5MTVjMWFkNTcx
ZWMzMzNhN2ExY2E0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY2Myw3ICs2
NjMsNyBAQAogCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovOyB9OwogCQkwRkVDODU0MjFCREFDREFDMDA4
MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLzsg
fTsKIAkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmggKi87IH07Ci0JCTBGRUM4NTQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlUmVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oICovOyB9OworCQkwRkVDODU0
NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVSZXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xv
cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3Jpbmcu
aCAqLzsgfTsKIAkJMEZFQzg1NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckFyZy5oICovOyB9OwogCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyog
QWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLzsgfTsK
QEAgLTc5Niw2ICs3OTYsNyBAQAogCQkxNDc4Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxl
VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NkZBNUE4MTM3OEY2QjAwMDM2MjdBMyAvKiBIYW5kbGVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVB
NCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3QjgzQUEwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNo
ZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5
U2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
Qjg0NjIwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0ODUyMUQ4MjZFQUVCRkUwMEND
MUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlcklu
Zm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NDg2QThDMDI0QUJFRDQ4MDA3MzkyMkQgLyogSlNMb2NrUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NkE4QkYyNEFCRUQzQzAwNzM5
MjJEIC8qIEpTTG9ja1JlZlByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NzRBRTIx
NUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDhBN0JGMDFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5l
Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDhBN0JFRTFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2FsbEZyYW1lLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNyw2ICs4MjgsMTMg
QEAKIAkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0E5NThB
MTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDQTk1OEQxNkFCNTBGQTAw
OTM4QTA2IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNEQwMUE3NzIxRkIzNTFGMDBCQzU0RTkgLyogSlNTY3JpcHRTb3Vy
Y2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTREMDFBNzYyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCAq
LzsgfTsKKwkJMTREMDFCRTYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
RDAxQkRBMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi87
IH07CisJCTE0RDAxQkU3MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFC
REIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggKi87IH07CisJ
CTE0RDAxQkU5MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFC
REQyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggKi87
IH07CisJCTE0RDAxQkVDMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJFMDI2REVF
RjM3MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5oICovOyB9OworCQkxNEQwMUJFRDI2REVF
RjM4MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCRTEyNkRFRUYzODAwQ0FFMEQwIC8q
IEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLzsgfTsKKwkJMTREMDFCRUYyNkRFRUYzODAwQ0FF
MEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkUzMjZERUVGMzgwMENBRTBEMCAv
KiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi87IH07CisJCTE0RDAxQkY1MjZE
RUVGNTMwMENBRTBEMCAvKiBXYXNtVGFnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICov
OyB9OwogCQkxNEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDJGM0Q5MTM5RjRCRTIw
MDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9w
ZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNERGMDREOTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RTg0
RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlBMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFr
QmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTI2NCw3ICsxMjcyLDcgQEAKIAkJODYyODFFRjAyNUI2MTYwMDAwMzY3MDA0IC8qIENoZWNr
UHJpdmF0ZUJyYW5kVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODYyODFFRUYyNUI2MTYwMDAwMzY3MDA0IC8qIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudC5oICovOyB9OwogCQk4NjI4MUVGNDI1QjYxQUYwMDAzNjcwMDQgLyogQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2MjgxRUYzMjVCNjFBRjAwMDM2NzAwNCAvKiBDaGVja1ByaXZhdGVCcmFuZFN0YXR1
cy5oICovOyB9OwogCQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NjNCMjNERjBGQzYwRTYyMDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJODYzRkJDNUEyNUIw
OTNCOTAwRjZDOTMwIC8qIFdhc21WYWx1ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjNGQkM1ODI1QjA5M0I5MDBGNkM5MzAgLyogV2Fz
bVZhbHVlTG9jYXRpb24uaCAqLzsgfTsKKwkJODYzRkJDNUEyNUIwOTNCOTAwRjZDOTMwIC8qIFdh
c21WYWx1ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NjNGQkM1ODI1QjA5M0I5MDBGNkM5MzAgLyogV2FzbVZhbHVlTG9jYXRpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjVBMzBG
MTEzNTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5RSAv
KiBKU0NKU1ZhbHVlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTg2NURBMEM1MjVCODk1NzQwMDg3NTc3MiAvKiBTZXRQcml2YXRlQnJh
bmRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NjVEQTBDNDI1Qjg5NTc0MDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oICov
OyB9OwogCQk4NjVEQTBDODI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjVEQTBD
NzI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmggKi87IH07CkBAIC0x
OTM3LDcgKzE5NDUsNyBAQAogCQlFM0JGQTVEMDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJl
ZEdsb2JhbFByb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFM0JGQTVDRDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJlZEdsb2JhbFByb3Bl
cnR5LmggKi87IH07CiAJCUUzQkZEMEJDMURBRjgwOEUwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25p
cHBldFBhcmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTNCRkQwQkExREFGODA3QzAwNjVERUEyIC8qIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmgg
Ki87IH07CiAJCUUzQzI5NUREMUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5n
ZUFkYXB0aXZlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTNDMjk1REMxRUQyQ0JBQTAwRDMwMTZGIC8qIE9iamVjdFByb3BlcnR5Q2hh
bmdlQWRhcHRpdmVXYXRjaHBvaW50LmggKi87IH07Ci0JCUUzQzY5NEIzMjMwMjY4NzcwMDZGQkU0
MiAvKiBXYXNtT1NSRW50cnlEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFM0M2OTRCMTIzMDI2ODczMDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5RGF0
YS5oICovOyB9OworCQlFM0M2OTRCMzIzMDI2ODc3MDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5RGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNDNjk0
QjEyMzAyNjg3MzAwNkZCRTQyIC8qIFdhc21PU1JFbnRyeURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFM0M3M0E5MTI1QkZBNzNCMDBFRkUz
MDMgLyogV2FzbVN0cmVhbWluZ1BsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzQzczQTkwMjVCRkE3MzQwMEVGRTMwMyAvKiBXYXNtU3RyZWFtaW5n
UGxhbi5oICovOyB9OwogCQlFM0M3OUNBQjFEQjlBNERDMDBEMUVDQTQgLyogRE9NSklURWZmZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0M3OUNB
QTFEQjlBNEQ2MDBEMUVDQTQgLyogRE9NSklURWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTNDOEVENDMyM0ExREJDQjAwMTMxOTU4IC8q
IElzb0lubGluZWRIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzQzhFRDQyMjNBMURCQzUwMDEzMTk1OCAvKiBJc29JbmxpbmVkSGVh
cENlbGxUeXBlLmggKi87IH07CkBAIC0zNDYxLDYgKzM0NjksOCBAQAogCQkxNDgyQjc4QTBBNDMw
NUFCMDA1MTdDRkMgLyogQVBJQ2FzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBUElDYXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODJCN0UxMEE0MzA3
NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU09iamVjdFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDgyQjdF
MjBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNPYmplY3RSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNDg1MjFENTI2RUFFQkRGMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21IYW5kbGVySW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUhhbmRsZXJJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODZBOEJFMjRBQkVEM0IwMDczOTIyRCAvKiBK
U0xvY2tSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNMb2NrUmVmLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4NkE4QkYyNEFCRUQzQzAwNzM5MjJEIC8qIEpTTG9ja1Jl
ZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNMb2NrUmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Njb3BlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1NDQsNiArMzU1NCwyMCBAQAogCQkxNENDM0JB
MjIxMzhBMjM4MDAyRDU4QjYgLyogSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5zdHJ1Y3Rpb25TdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTREMDFBNzUyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJv
dmlkZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQwMUE3NjIxRkIzNTAzMDBCQzU0RTkg
LyogSlNTY3JpcHRTb3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdFNvdXJj
ZVByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRBMjZERUVG
MzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaDsgcGF0aCA9IGpz
L1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTREMDFCREIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFnUHJvdG90eXBl
Lmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxNEQwMUJEQzI2REVFRjM3MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJERDI2REVFRjM3MDBDQUUwRDAg
LyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaDsgcGF0aCA9IGpzL1dl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTE0RDAxQkRFMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFn
Q29uc3RydWN0b3IuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRGMjZERUVGMzcwMENBRTBEMCAv
KiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHA7IHBhdGggPSBqcy9XZWJBc3Nl
bWJseVRhZ1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAx
QkUwMjZERUVGMzcwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlUYWcuaDsgcGF0aCA9IGpzL0pTV2ViQXNz
ZW1ibHlUYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRTEyNkRFRUYz
ODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJF
MjI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJFMzI2REVFRjM4MDBDQUUwRDAg
LyogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmg7IHBhdGggPSBq
cy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0RDAxQkU0MjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlUYWcu
Y3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseVRhZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0RDAxQkU1MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlv
bkNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlF
eGNlcHRpb25Db25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0
RDAxQkYyMjZERUVGNTIwMENBRTBEMCAvKiBXYXNtVGFnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UYWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRTcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUgLyogQ0xvb3BTdGFjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTG9vcFN0YWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0RDg1Nzc0MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gdGVzdGFwaS5qczsgcGF0aCA9
IEFQSS90ZXN0cy90ZXN0YXBpLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE1
NSw2ICs3MTc5LDggQEAKIAkJCQkxNDg3Q0UxNjIzNzc0MTAwMDA0NDQyOUMgLyogV2FzbUdlbmVy
YXRvclRyYWl0cy5oICovLAogCQkJCUUzODM1MDA4MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNtR2xv
YmFsLmNwcCAqLywKIAkJCQlFMzgzNTAwOTIzOTBEOTM3MDAzNjMxNkQgLyogV2FzbUdsb2JhbC5o
ICovLAorCQkJCTE0ODUyMUQ1MjZFQUVCREYwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uY3Bw
ICovLAorCQkJCTE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCAq
LywKIAkJCQlBRDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmNwcCAq
LywKIAkJCQlBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi8s
CiAJCQkJQUQ1QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8sCkBA
IC03MjEyLDYgKzcyMzgsOCBAQAogCQkJCUUzQzczQTkwMjVCRkE3MzQwMEVGRTMwMyAvKiBXYXNt
U3RyZWFtaW5nUGxhbi5oICovLAogCQkJCUFENUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUu
aCAqLywKKwkJCQkxNEQwMUJGMjI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5jcHAgKi8sCisJ
CQkJMTREMDFCRjMyNkRFRUY1MjAwQ0FFMEQwIC8qIFdhc21UYWcuaCAqLywKIAkJCQk1MjUwRDJD
RjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCiAJCQkJNTI1MEQyRDAxRThE
QTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLywKIAkJCQlFM0M2OTRCMjIzMDI2ODc0MDA2
RkJFNDIgLyogV2FzbVRpZXJVcENvdW50LmNwcCAqLywKQEAgLTkwOTcsNiArOTEyNSw4IEBACiAJ
CQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAq
LywKIAkJCQlBRDJGQ0JBNjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvci5jcHAgKi8sCiAJCQkJQUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3IuaCAqLywKKwkJCQkxNEQwMUJEQzI2REVFRjM3MDBDQUUwRDAgLyogSlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHAgKi8sCisJCQkJMTREMDFCRTEyNkRFRUYzODAwQ0FFMEQw
IC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLywKIAkJCQlFM0JGM0M0QzIzOTBEMUUzMDA4
QkM3NTIgLyogSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAgKi8sCiAJCQkJRTNCRjNDNEIyMzkwRDFF
MjAwOEJDNzUyIC8qIEpTV2ViQXNzZW1ibHlHbG9iYWwuaCAqLywKIAkJCQk3OTZGQjQzOTFERkY4
QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCAqLywKQEAgLTkxMTIsMTIgKzkx
NDIsMTggQEAKIAkJCQlBRDJGQ0JBRDFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvci5oICovLAogCQkJCUFEMkZDQkFFMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5VGFibGUuY3BwICovLAogCQkJCUFEMkZDQkFGMURCNThEQTQwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5VGFibGUuaCAqLywKKwkJCQkxNEQwMUJFNDI2REVFRjM4MDBDQUUwRDAgLyogSlNX
ZWJBc3NlbWJseVRhZy5jcHAgKi8sCisJCQkJMTREMDFCRTAyNkRFRUYzNzAwQ0FFMEQwIC8qIEpT
V2ViQXNzZW1ibHlUYWcuaCAqLywKIAkJCQlBREQwOUFFRjFGNUY2MjNGMDAxMzEzQzIgLyogV2Fz
bVRvSlMuY3BwICovLAogCQkJCUFERDA5QUVFMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5o
ICovLAogCQkJCUFEMkZDQkIwMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVF
cnJvckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBRDJGQ0JCMTFEQjU4REE0MDBCM0U3MzYgLyog
V2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUFEMkZDQkIyMURC
NThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAgKi8s
CiAJCQkJQUQyRkNCQjMxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9y
UHJvdG90eXBlLmggKi8sCisJCQkJMTREMDFCRTUyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2Vt
Ymx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTE0RDAxQkUzMjZERUVGMzgwMENB
RTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi8sCisJCQkJMTREMDFC
RTIyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcCAq
LywKKwkJCQkxNEQwMUJERDI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUuaCAqLywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb24uaCAqLywKIAkJCQk1MjEzMjI0MzFFQ0JDRTgyMDBGNjU2MTUgLyogV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwICovLApAQCAtOTE1Miw2ICs5MTg4LDEwIEBACiAJCQkJ
QUQyRkNCQzExREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5o
ICovLAogCQkJCUFEMkZDQkMyMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmNwcCAqLywKIAkJCQlBRDJGQ0JDMzFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZS5oICovLAorCQkJCTE0RDAxQkRFMjZERUVGMzcwMENBRTBEMCAvKiBX
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQkxNEQwMUJEQTI2REVFRjM3MDBD
QUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oICovLAorCQkJCTE0RDAxQkRGMjZE
RUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgKi8sCisJCQkJMTRE
MDFCREIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggKi8sCiAJ
CQkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmNwcCAqLywKIAkJCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLywKIAkJCSk7CkBAIC0xMDQwMiw2ICsxMDQ0Miw3IEBACiAJCQkJQUQ1
QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFMzFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRUQyNkRFRUYzODAw
Q0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUz
QkYzQzREMjM5MEQxRTgwMDhCQzc1MiAvKiBKU1dlYkFzc2VtYmx5R2xvYmFsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBl
cnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTA0MTAsNiArMTA0NTEsNyBA
QAogCQkJCUFEMkZDQzA1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5TW9kdWxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFOTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRUIxREI1OERBRDAw
QjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFC
RUMyNkRFRUYzODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlUYWcuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDgzNyw2ICsxMDg3OSw3IEBACiAJCQkJMTQ1MEZBMUMy
MzU3QkRCRTAwOTNDRDREIC8qIFdhc21GdW5jdGlvbkNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTM4MzUwMEEyMzkwRDkzQjAwMzYzMTZEIC8qIFdhc21HbG9iYWwu
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0ODUyMUQ4MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFu
ZGxlckluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAv
KiBXYXNtSW5kZXhPck5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkUyMUY2OTlFQzAw
MDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMDA2NTlFMUVD
QUM4MTIwMDBDQTkyNiAvKiBXYXNtTGltaXRzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwODY3LDYg
KzEwOTEwLDcgQEAKIAkJCQlFM0EwNTMxQTIxMzQyQjY4MDAyMkVDMTQgLyogV2FzbVN0cmVhbWlu
Z1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDNzNBOTEyNUJGQTczQjAwRUZFMzAzIC8q
IFdhc21TdHJlYW1pbmdQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkx
MDAwQkNBQUYgLyogV2FzbVRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJGNTI2REVF
RjUzMDBDQUUwRDAgLyogV2FzbVRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIxRThE
QTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRTlFMEFG
MUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDg5OCw2ICsxMDk0Miw4IEBACiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDJGQ0JFRjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzE3MURCNTlDQjIwMEIzRTczNiAvKiBX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTE0RDAxQkVGMjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJFOTI2REVFRjM4MDBDQUUwRDAgLyogV2Vi
QXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENDkzN0Q0
MURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MjEzMjI0NjFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUzQkYzQzUzMjM5MEQyMDUwMDhCQzc1MiAvKiBXZWJBc3Nl
bWJseUdsb2JhbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEwOTI1LDYgKzEwOTcx
LDggQEAKIAkJCQlBRDJGQ0MyMDFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRkYxREI1OERBRDAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
MkZDQzIxMURCNTlDQjIwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRTYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RDAxQkU3MjZERUVGMzgw
MENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ3QTBFMTZGNUNEMDBCMzQ0NjAgLyogV2ViS2l0QXZh
aWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBNjFCRDU5OTMxMDBGNDU3NUMg
Lyogd2tidWlsdGlucy5weSBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CmluZGV4IGE4NTk3M2U3ZWRjZTFiODM3MTFlMDI5MTk3MmEzMWE0NDZhZjg1MTAuLmYwNDQ1MWQw
MzhkYjMwYzc1MWY0NmE5YTRkNzQ4NjNjYjZiMmQ4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKQEAgLTEwNzksNiArMTA3OSw3IEBAIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5j
cHAKIHdhc20vV2FzbUZvcm1hdC5jcHAKIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmNwcAog
d2FzbS9XYXNtR2xvYmFsLmNwcAord2FzbS9XYXNtSGFuZGxlckluZm8uY3BwCiB3YXNtL1dhc21J
bmRleE9yTmFtZS5jcHAKIHdhc20vV2FzbUluc3RhbmNlLmNwcAogd2FzbS9XYXNtSW5zdGFuY2Uu
aApAQCAtMTEwNSw2ICsxMTA2LDcgQEAgd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuY3BwCiB3
YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCiB3YXNtL1dhc21TdHJlYW1pbmdQbGFuLmNwcAog
d2FzbS9XYXNtVGFibGUuY3BwCit3YXNtL1dhc21UYWcuY3BwCiB3YXNtL1dhc21UaHVua3MuY3Bw
CiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHAKIHdhc20vV2FzbVZhbHVlTG9jYXRpb24uY3BwCkBA
IC0xMTE2LDYgKzExMTgsNyBAQCB3YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHkuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwCit3YXNtL2pzL0pTV2ViQXNzZW1i
bHlFeGNlcHRpb24uY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUxpbmtFcnJv
ci5jcHAKQEAgLTExMjMsMTAgKzExMjYsMTMgQEAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5
LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCit3YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWcuY3BwCiB3YXNtL2pzL1dhc21Ub0pTLmNwcAogd2FzbS9qcy9X
YXNtVG9KUy5oCiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3Bw
CiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAord2FzbS9qcy9X
ZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAord2FzbS9qcy9XZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvdHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKIHdh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5R2xv
YmFsQ29uc3RydWN0b3IuY3BwCkBAIC0xMTQ0LDYgKzExNTAsOCBAQCB3YXNtL2pzL1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yUHJvdG90eXBlLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3Iu
Y3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCit3YXNtL2pzL1dlYkFz
c2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwCit3YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBl
LmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKIAogeWFyci9SZWd1
bGFyRXhwcmVzc2lvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCmluZGV4IDhjYzU1MTU2YjU3YWJjZTQ5Y2VhYjk4MmMzMTQ3YTk4ODlkMTRm
NTYuLmJlMmU4YzgxMWQ2ZGRkMGMxODRiYTVlZDRkOTU3OTM2ZmQyMjU4YTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtMTgzOSw0ICsx
ODM5LDM2IEBAIG9wIDphdG9taWNfZmVuY2UsCiAgICAgYXJnczogewogICAgIH0KIAorb3AgOnRo
cm93LAorICAgIGFyZ3M6IHsKKyAgICAgICAgZXhjZXB0aW9uSW5kZXg6IHVuc2lnbmVkLAorICAg
ICAgICBmaXJzdFZhbHVlOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgfQorCitvcCA6cmV0aHJvdywK
KyAgICBhcmdzOiB7CisgICAgICAgIGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0K
Kworb3BfZ3JvdXAgOkNhdGNoLAorICAgIFsKKyAgICAgICAgOmNhdGNoLAorICAgICAgICA6Y2F0
Y2hfbm9fdGxzLAorICAgIF0sCisgICAgYXJnczogeworICAgICAgICBleGNlcHRpb25JbmRleDog
dW5zaWduZWQsCisgICAgICAgIGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBh
cmd1bWVudENvdW50OiB1bnNpZ25lZCwKKyAgICAgICAgc3RhcnRPZmZzZXQ6IHVuc2lnbmVkLAor
ICAgIH0KKworb3BfZ3JvdXAgOkNhdGNoQWxsLAorICAgIFsKKyAgICAgICAgOmNhdGNoX2FsbCwK
KyAgICAgICAgOmNhdGNoX2FsbF9ub190bHMsCisgICAgXSwKKyAgICBhcmdzOiB7CisgICAgICAg
IGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0KKwogZW5kX3NlY3Rpb24gOldhc20K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKaW5kZXggMDFk
ZGNmOTY5OWI0ODAyOWExYmQ4YmVlNDAzNDkwNDc5YTFmOWQ3Zi4uNjZkZjA5OTlmMjFiMjc0ZTA5
OTliYjVhMzg1MjM0ZDE0NTE1Yzk4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0hhbmRsZXJJbmZvLmgKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWVudW0gY2xhc3MgSGFuZGxlclR5cGUgeworZW51bSBjbGFzcyBIYW5kbGVyVHlwZSA6IHVpbnQ4
X3QgewogICAgIENhdGNoID0gMCwKICAgICBGaW5hbGx5ID0gMSwKICAgICBTeW50aGVzaXplZENh
dGNoID0gMiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgK
aW5kZXggNjgwZTk0MDFkYzYxZmY2M2RjYjVkNWU2ZjlkZWJlYzQwNjg4YjQ0OS4uNTFmMWQwMmUx
ODI1NThjOWMyOTEyZDg0MGM1ODgxMDQ4Y2E4MDFkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cyA9IEpTT3Bjb2RlVHJhaXRzPgogICAgIGNvbnN0IGNo
YXIqIG5hbWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFRyYWl0czo6b3Bjb2RlTmFt
ZXNbb3Bjb2RlSUQoKV07CisgICAgICAgIHJldHVybiBUcmFpdHM6Om9wY29kZU5hbWVzW29wY29k
ZUlEPFRyYWl0cz4oKV07CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzID0g
SlNPcGNvZGVUcmFpdHM+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCmluZGV4IDYzZmY0ZWVjZTYyNmI1ZDhkZmRlYzBjNzIzYTFjZDc0ODg3MWJj
NWEuLjllZGY1OWI5Njg2YTVhZDZjZWE4MzgzZjc0MzMzMzYwYTE5YzZkNDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC0xMzAsNyAr
MTMwLDggQEAgdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0
KCkgY29uc3QKIAogQnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgoKSBjb25z
dAogewotICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOworICAgIGlmIChjYWxsZWUoKS5p
c1dhc20oKSkKKyAgICAgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCk7
CiAgICAgaWYgKCFjb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoMCk7
CiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgKaW5kZXggMWNhYjIyNWJjZTAzOGQ4ZmU1ZTFjNDU4OTAzZmYzOWQ5NTZm
ZmY0YS4uZDg2NGEyNjhjZDdjYjUwNWE0MTMzZTM3MGNjMzM5ZDk1ODQyOWE0YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApAQCAtNDQsNiArNDQs
MTEgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIGNsYXNzIENhbGxTaXRlSW5kZXggewogICAgIHB1
YmxpYzoKICAgICAgICAgQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsKKworICAgICAgICBDYWxs
U2l0ZUluZGV4KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgICAgIDog
bV9iaXRzKGRlbGV0ZWRWYWx1ZSgpLmJpdHMoKSkKKyAgICAgICAgeworICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKICAgICAgICAgICAgIDogbV9iaXRzKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpCkBA
IC01NywxMyArNjIsMjUgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2JpdHM7IH0KICAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2JpdHMg
PT0gb3RoZXIubV9iaXRzOyB9CiAKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0
dXJuIGludEhhc2gobV9iaXRzKTsgfQorICAgICAgICBzdGF0aWMgQ2FsbFNpdGVJbmRleCBkZWxl
dGVkVmFsdWUoKSB7IHJldHVybiBmcm9tQml0cyhzX2ludmFsaWRJbmRleCAtIDEpOyB9CisgICAg
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9
PSBkZWxldGVkVmFsdWUoKTsgfQorCiAgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJl
dHVybiBtX2JpdHM7IH0KICAgICAgICAgc3RhdGljIENhbGxTaXRlSW5kZXggZnJvbUJpdHModWlu
dDMyX3QgYml0cykgeyByZXR1cm4gQ2FsbFNpdGVJbmRleChiaXRzKTsgfQogCiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgo
Yml0cygpKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgQnl0
ZWNvZGVJbmRleCgpLm9mZnNldCgpIH07CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMy
X3Qgc19pbnZhbGlkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7
CisKKyAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgc19pbnZhbGlkSW5kZXggfTsKKyAgICB9Owor
CisgICAgc3RydWN0IENhbGxTaXRlSW5kZXhIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgQ2FsbFNpdGVJbmRleCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENhbGxTaXRlSW5kZXgmIGEsIGNvbnN0IENh
bGxTaXRlSW5kZXgmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogICAgIH07CiAK
ICAgICBjbGFzcyBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4
IHsKQEAgLTMzMiwzICszNDksMTUgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0Zyb21KU0Nv
ZGUodm9pZCogcmV0dXJuQWRkcmVzcyk7CiAKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVz
cGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkNhbGxTaXRlSW5kZXg+IDogSlNDOjpD
YWxsU2l0ZUluZGV4SGFzaCB7IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNo
VHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkNhbGxTaXRlSW5kZXg+
IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6Q2FsbFNpdGVJbmRleD4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCmluZGV4IDkxMjZlZjU1OWYzNTMxMjUyZWI0ZGQ1MjllZGI0N2QzY2VmYWJh
M2MuLjljYWM0MGE2NjEyYzMxNmE4ZWFmMWFhNjJiODlmNDFhNTZmYjRiZDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtNTIs
NiArNTIsNyBAQAogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJK
U01vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAi
TGl0ZXJhbFBhcnNlci5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKQEAg
LTUxMiwxNSArNTEzLDYzIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbm90aWZ5RGVidWdn
ZXJPZlVud2luZGluZyhWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgfQogfQogCitD
YXRjaEluZm86OkNhdGNoSW5mbyhjb25zdCBIYW5kbGVySW5mbyogaGFuZGxlciwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit7CisgICAgbV92YWxpZCA9ICEhaGFuZGxlcjsKKyAgICBpZiAobV92YWxp
ZCkgeworICAgICAgICBtX3R5cGUgPSBoYW5kbGVyLT50eXBlKCk7CisjaWYgRU5BQkxFKEpJVCkK
KyAgICAgICAgbV9uYXRpdmVDb2RlID0gaGFuZGxlci0+bmF0aXZlQ29kZTsKKyNlbmRpZgorCisg
ICAgICAgIC8vIGhhbmRsZXItPnRhcmdldCBpcyBtZWFuaW5nbGVzcyBmb3IgZ2V0dGluZyBhIGNv
ZGUgb2Zmc2V0IHdoZW4gY2F0Y2hpbmcKKyAgICAgICAgLy8gdGhlIGV4Y2VwdGlvbiBpbiBhIERG
Ry9GVEwgZnJhbWUuIFRoaXMgYnl0ZWNvZGUgdGFyZ2V0IG9mZnNldCBjb3VsZCBiZQorICAgICAg
ICAvLyBzb21ldGhpbmcgdGhhdCdzIGluIGFuIGlubGluZWQgZnJhbWUsIHdoaWNoIG1lYW5zIGFu
IGFycmF5IGFjY2VzcworICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNvZGUgb2Zmc2V0IGluIHRo
ZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKKyAgICAgICAgLy8gYW5kIGNh
biBjYXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhpdHMgdG8gaGFuZGxlci0+
dGFyZ2V0CisgICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCisgICAgICAgIGlmICghSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKKyAgICAgICAgICAg
IG1fY2F0Y2hQQ0ZvckludGVycHJldGVyID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdCho
YW5kbGVyLT50YXJnZXQpLnB0cigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NhdGNo
UENGb3JJbnRlcnByZXRlciA9IG51bGxwdHI7CisgICAgfQorfQorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorQ2F0Y2hJbmZvOjpDYXRjaEluZm8oY29uc3QgV2FzbTo6SGFuZGxlckluZm8qIGhh
bmRsZXIsIGNvbnN0IFdhc206OkNhbGxlZSogY2FsbGVlKQoreworICAgIG1fdmFsaWQgPSAhIWhh
bmRsZXI7CisgICAgaWYgKG1fdmFsaWQpIHsKKyAgICAgICAgbV90eXBlID0gSGFuZGxlclR5cGU6
OkNhdGNoOworICAgICAgICBtX25hdGl2ZUNvZGUgPSBoYW5kbGVyLT5tX25hdGl2ZUNvZGU7Cisg
ICAgICAgIGlmIChjb25zdCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bGVlLT5mdW5jdGlvbkNvZGVCbG9jaygpKQorICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJw
cmV0ZXIgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPm1fdGFyZ2V0KS5w
dHIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXIg
PSBudWxscHRyOworICAgIH0KK30KKyNlbmRpZgorCiBjbGFzcyBVbndpbmRGdW5jdG9yIHsKIHB1
YmxpYzoKLSAgICBVbndpbmRGdW5jdG9yKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBi
b29sIGlzVGVybWluYXRpb24sIENvZGVCbG9jayomIGNvZGVCbG9jaywgSGFuZGxlckluZm8qJiBo
YW5kbGVyKQorICAgIFVud2luZEZ1bmN0b3IoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUs
IGJvb2wgaXNUZXJtaW5hdGlvbiwgSlNWYWx1ZSB0aHJvd25WYWx1ZSwgQ29kZUJsb2NrKiYgY29k
ZUJsb2NrLCBDYXRjaEluZm8mIGhhbmRsZXIpCiAgICAgICAgIDogbV92bSh2bSkKICAgICAgICAg
LCBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCiAgICAgICAgICwgbV9pc1Rlcm1pbmF0aW9uKGlzVGVy
bWluYXRpb24pCiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAgICAsIG1f
aGFuZGxlcihoYW5kbGVyKQogICAgIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAg
IGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7CisgICAgICAgICAgICBpZiAoSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbiogd2FzbUV4Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbio+KG1fdm0sIHRocm93blZhbHVlKSkgeworICAgICAgICAgICAgICAgIG1fY2F0Y2hhYmxl
RnJvbVdhc20gPSB0cnVlOworICAgICAgICAgICAgICAgIG1fd2FzbVRhZyA9ICZ3YXNtRXhjZXB0
aW9uLT50YWcoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoRXJyb3JJbnN0YW5jZSogZXJyb3Ig
PSBqc0R5bmFtaWNDYXN0PEVycm9ySW5zdGFuY2UqPihtX3ZtLCB0aHJvd25WYWx1ZSkpCisgICAg
ICAgICAgICAgICAgbV9jYXRjaGFibGVGcm9tV2FzbSA9IGVycm9yLT5pc0NhdGNoYWJsZUZyb21X
YXNtKCk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTSh0aHJvd25WYWx1
ZSk7CisjZW5kaWYKICAgICB9CiAKICAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigp
KFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKQEAgLTUyOSwxOSArNTc4LDMyIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9jYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKICAgICAgICAg
bV9jb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKIAotICAgICAgICBtX2hhbmRsZXIg
PSBudWxscHRyOworICAgICAgICBtX2hhbmRsZXIubV92YWxpZCA9IGZhbHNlOwogICAgICAgICBp
ZiAobV9jb2RlQmxvY2spIHsKICAgICAgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhhbmRsZXIodmlzaXRvciwg
bV9jb2RlQmxvY2ssIFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1faGFuZGxlcikKKyAgICAgICAgICAgICAgICBtX2hhbmRsZXIgPSB7IGZpbmRFeGNl
cHRpb25IYW5kbGVyKHZpc2l0b3IsIG1fY29kZUJsb2NrLCBSZXF1aXJlZEhhbmRsZXI6OkFueUhh
bmRsZXIpLCBtX2NvZGVCbG9jayB9OworICAgICAgICAgICAgICAgIGlmIChtX2hhbmRsZXIubV92
YWxpZCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgICAg
ICBpZiAodmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRv
KiBqc1RvV2FzbUlDQ2FsbGVlID0ganNEeW5hbWljQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4obV92
bSwgdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkpKQorICAgICAgICBDYWxsZWVCaXRzIGNhbGxl
ZSA9IHZpc2l0b3ItPmNhbGxlZSgpOworICAgICAgICBpZiAoY2FsbGVlLmlzQ2VsbCgpKSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byoganNUb1dhc21JQ0NhbGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNU
b1dhc21JQ0NhbGxlZSo+KG1fdm0sIGNhbGxlZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICAgICAg
bV92bS53YXNtQ29udGV4dC5zdG9yZShqc1RvV2FzbUlDQ2FsbGVlLT5mdW5jdGlvbigpLT5wcmV2
aW91c0luc3RhbmNlKG1fY2FsbEZyYW1lKSwgbV92bS5zb2Z0U3RhY2tMaW1pdCgpKTsKKworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fY2F0Y2hhYmxlRnJvbVdhc20gJiYgY2FsbGVlLmlzV2Fz
bSgpKSB7CisgICAgICAgICAgICBXYXNtOjpDYWxsZWUqIHdhc21DYWxsZWUgPSBjYWxsZWUuYXNX
YXNtQ2FsbGVlKCk7CisgICAgICAgICAgICBpZiAod2FzbUNhbGxlZS0+aGFzRXhjZXB0aW9uSGFu
ZGxlcnMoKSkgeworICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0
YW5jZSA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihtX2NhbGxGcmFtZS0+dGhpc1Zh
bHVlKCkpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9
IG1fY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOworICAgICAgICAgICAgICAgIG1f
aGFuZGxlciA9IHsgd2FzbUNhbGxlZS0+aGFuZGxlckZvckluZGV4KGpzSW5zdGFuY2UtPmluc3Rh
bmNlKCksIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgbV93YXNtVGFnKSwgd2FzbUNhbGxlZSB9Owor
ICAgICAgICAgICAgICAgIGlmIChtX2hhbmRsZXIubV92YWxpZCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
I2VuZGlmCiAKQEAgLTU4OCwxMCArNjUwLDE0IEBAIHByaXZhdGU6CiAgICAgQ2FsbEZyYW1lKiYg
bV9jYWxsRnJhbWU7CiAgICAgYm9vbCBtX2lzVGVybWluYXRpb247CiAgICAgQ29kZUJsb2NrKiYg
bV9jb2RlQmxvY2s7Ci0gICAgSGFuZGxlckluZm8qJiBtX2hhbmRsZXI7CisgICAgQ2F0Y2hJbmZv
JiBtX2hhbmRsZXI7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGNvbnN0IFdhc206OlRh
ZyogbV93YXNtVGFnIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV9jYXRjaGFibGVGcm9tV2FzbSB7
IGZhbHNlIH07CisjZW5kaWYKIH07CiAKLU5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJw
cmV0ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBl
eGNlcHRpb24pCitORVZFUl9JTkxJTkUgQ2F0Y2hJbmZvIEludGVycHJldGVyOjp1bndpbmQoVk0m
IHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIApAQCAtNjA5LDE2ICs2NzUs
MTMgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2
bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGMKICAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNF
RChzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2Vw
dGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KLSAg
ICBIYW5kbGVySW5mbyogaGFuZGxlciA9IG51bGxwdHI7Ci0gICAgVW53aW5kRnVuY3RvciBmdW5j
dG9yKHZtLCBjYWxsRnJhbWUsIHZtLmlzVGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSwg
Y29kZUJsb2NrLCBoYW5kbGVyKTsKKyAgICBDYXRjaEluZm8gY2F0Y2hJbmZvOworICAgIFVud2lu
ZEZ1bmN0b3IgZnVuY3Rvcih2bSwgY2FsbEZyYW1lLCB2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9u
KGV4Y2VwdGlvbiksIGV4Y2VwdGlvblZhbHVlLCBjb2RlQmxvY2ssIGNhdGNoSW5mbyk7CiAgICAg
U3RhY2tWaXNpdG9yOjp2aXNpdDxTdGFja1Zpc2l0b3I6OlRlcm1pbmF0ZUlmVG9wRW50cnlGcmFt
ZUlzRW1wdHk+KGNhbGxGcmFtZSwgdm0sIGZ1bmN0b3IpOwogICAgIGlmICh2bS5oYXNDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKCkpCiAgICAgICAgIHZtLnBvcEFsbENoZWNrcG9pbnRPU1JTaWRlU3Rh
dGVVbnRpbChjYWxsRnJhbWUpOwogCi0gICAgaWYgKCFoYW5kbGVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBoYW5kbGVyOworICAgIHJldHVybiBjYXRjaEluZm87CiB9
CiAKIHZvaWQgSW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3du
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCAwYzNlZmUxMmU1MTA1Mzg4ZjZjZjI4NTExZDll
YTVlNGVhZjMwN2ZjLi40ZDk2ODhlNWFhOGNhMGE0YWQwZjVkOTBmZGZhYzE0MjAzYzU4OWMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApA
QCAtNDMsNiArNDMsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBDYWxsZWU7CitzdHJ1Y3QgSGFuZGxlcklu
Zm87Cit9CisjZW5kaWYKKwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBFdmFsRXhl
Y3V0YWJsZTsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC01OCw2ICs2NSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTU2NvcGU7CiAgICAgY2xhc3MgU291cmNlQ29k
ZTsKICAgICBjbGFzcyBTdGFja0ZyYW1lOworICAgIGVudW0gY2xhc3MgSGFuZGxlclR5cGUgOiB1
aW50OF90OwogICAgIHN0cnVjdCBDYWxsRnJhbWVDbG9zdXJlOwogICAgIHN0cnVjdCBIYW5kbGVy
SW5mbzsKICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CkBAIC04MSw2ICs4OSwyNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgU3RhY2tGcmFtZU5hdGl2ZUNvZGUKICAgICB9OwogCisgICAgc3Ry
dWN0IENhdGNoSW5mbyB7CisgICAgICAgIENhdGNoSW5mbygpCisgICAgICAgICAgICA6IG1fdmFs
aWQoZmFsc2UpCisgICAgICAgIHsgfQorCisgICAgICAgIENhdGNoSW5mbyhjb25zdCBIYW5kbGVy
SW5mbyosIENvZGVCbG9jayopOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgQ2F0
Y2hJbmZvKGNvbnN0IFdhc206OkhhbmRsZXJJbmZvKiwgY29uc3QgV2FzbTo6Q2FsbGVlKik7Cisj
ZW5kaWYKKworICAgICAgICBib29sIG1fdmFsaWQ7CisgICAgICAgIEhhbmRsZXJUeXBlIG1fdHlw
ZTsKKyNpZiBFTkFCTEUoSklUKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4gbV9uYXRpdmVDb2RlOworI2VuZGlmCisgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBtX2NhdGNoUENGb3JJbnRlcnByZXRlcjsKKyAgICB9OworCiAgICAgY2xhc3Mg
SW50ZXJwcmV0ZXIgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIENhY2hlZENhbGw7CkBAIC0xMTIsNyArMTM4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgdm9pZCBnZXRBcmd1bWVudHNEYXRhKENhbGxGcmFtZSosIEpTRnVuY3Rp
b24qJiwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFyZ3YsIGlu
dCYgYXJnYyk7CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiB1bndpbmQoVk0m
LCBDYWxsRnJhbWUqJiwgRXhjZXB0aW9uKik7CisgICAgICAgIE5FVkVSX0lOTElORSBDYXRjaElu
Zm8gdW53aW5kKFZNJiwgQ2FsbEZyYW1lKiYsIEV4Y2VwdGlvbiopOwogICAgICAgICB2b2lkIG5v
dGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqLCBFeGNlcHRpb24qKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgZGVidWco
Q2FsbEZyYW1lKiwgRGVidWdIb29rVHlwZSk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgc3RhY2tU
cmFjZUFzU3RyaW5nKFZNJiwgY29uc3QgVmVjdG9yPFN0YWNrRnJhbWU+Jik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IDU3
YTFiZGI2ZGJkNWIxNjA2OTFjNjU2NTBmYzBkNDVkYmU4MDllYWIuLmRjNWVjY2UwNWVlMzlmYmJm
ZWJmNWQ5YjJkYmIzYjk1NmZkNjZhNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0xNjYsMjMgKzE2NiwyMCBAQCB2b2lk
IFN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q29kZU9yaWdpbiogY29kZU9yaQogICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSBudWxs
cHRyOwogI2VuZGlmCiAKKyAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKKyAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9ICFtX2ZyYW1lLmNvZGVCbG9j
aygpID8gQnl0ZWNvZGVJbmRleCgwKQorICAgICAgICA6IGNvZGVPcmlnaW4gPyBjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KCkKKyAgICAgICAgOiBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsK
KwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoY2FsbEZyYW1lLT5pc0FueVdhc21D
YWxsZWUoKSkgewogICAgICAgICBtX2ZyYW1lLm1faXNXYXNtRnJhbWUgPSB0cnVlOwogICAgICAg
ICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgbV9mcmFtZS5tX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7CiAKICAgICAgICAgaWYgKG1fZnJhbWUubV9jYWxs
ZWUuaXNXYXNtKCkpCiAgICAgICAgICAgICBtX2ZyYW1lLm1fd2FzbUZ1bmN0aW9uSW5kZXhPck5h
bWUgPSBtX2ZyYW1lLm1fY2FsbGVlLmFzV2FzbUNhbGxlZSgpLT5pbmRleE9yTmFtZSgpOwotCi0g
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9ICFt
X2ZyYW1lLmNvZGVCbG9jaygpID8gQnl0ZWNvZGVJbmRleCgwKQotICAgICAgICA6IGNvZGVPcmln
aW4gPyBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkKLSAgICAgICAgOiBjYWxsRnJhbWUtPmJ5
dGVjb2RlSW5kZXgoKTsKLQogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggZWYyZmNiNDJmMzVmZTcy
ZTQ0ZGYzZTAyMjRiMmU5MDhiMjU1ZWU5OC4uYTkxYTlkZDk3YWJlZTg3NDhkMDc2N2MzMjNhZWNh
OGQ0OThlYjRjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcApAQCAtNzA0LDkgKzcwNCw0NyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9y
ZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYQogI2Vu
ZGlmCiAKICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCBzY3JhdGNoKTsKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQo
KSksIHNjcmF0Y2gpOworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwoc2NyYXRjaCwgc2tpcExpc3QpOwogCi0gICAgTG9hZFJlZ1Nwb29s
ZXIgc3Bvb2xlcigqdGhpcywgc2NyYXRjaCk7CisgICAgLy8gUmVzdG9yZSB0aGUgY2FsbGVlIHNh
dmUgdmFsdWUgb2YgdGhlIHNjcmF0Y2guCisgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFs
bENhbGxlZVNhdmVzLT5hdChzY3JhdGNoR1BSRW50cnlJbmRleCk7CisgICAgQVNTRVJUKCFkb250
UmVzdG9yZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKTsKKyAgICBBU1NFUlQoZW50cnkucmVn
KCkuaXNHUFIoKSk7CisgICAgQVNTRVJUKHNjcmF0Y2ggPT0gZW50cnkucmVnKCkuZ3ByKCkpOwor
I2lmIENQVShBUk02NCkKKyAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5MiA9IGFsbENhbGxlZVNh
dmVzLT5hdChzY3JhdGNoR1BSRW50cnlJbmRleCArIDEpOworICAgIEFTU0VSVF9VTlVTRUQoZW50
cnkyLCAhZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5Mi5yZWcoKSkpOworICAgIEFTU0VS
VChlbnRyeTIucmVnKCkuaXNHUFIoKSk7CisgICAgQVNTRVJUKHVudXNlZE5leHRTbG90R1BSID09
IGVudHJ5Mi5yZWcoKS5ncHIoKSk7CisgICAgbG9hZFBhaXI2NChzY3JhdGNoLCBUcnVzdGVkSW1t
MzIoZW50cnkub2Zmc2V0KCkpLCBzY3JhdGNoLCB1bnVzZWROZXh0U2xvdEdQUik7CisjZWxzZQor
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoLCBlbnRyeS5vZmZzZXQoKSksIHNjcmF0Y2gpOwor
I2VuZGlmCisKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOworI2VuZGlm
IC8vIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorfQorCit2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKEdQUlJlZyB2bUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpCit7CisjaWYgTlVNQkVSX09G
X0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCisgICAgbG9hZFB0cihBZGRyZXNzKHZtR1BSLCBW
TTo6dG9wRW50cnlGcmFtZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgcmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3JhdGNoR1BSLCBS
ZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2
bUdQUik7CisjZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCit9
CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBlbnRyeUZyYW1lR1BSLCBjb25zdCBSZWdp
c3RlclNldCYgc2tpcExpc3QpCit7CisjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RF
UlMgPiAwCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVn
aXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBlbnRyeUZyYW1lR1BSKTsKKworICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdp
c3Rlck9mZnNldHMoKTsKKyAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2
ZXMtPnNpemUoKTsKKworICAgIExvYWRSZWdTcG9vbGVyIHNwb29sZXIoKnRoaXMsIGVudHJ5RnJh
bWVHUFIpOwogCiAgICAgLy8gUmVzdG9yZSBhbGwgY2FsbGVlIHNhdmVzIGV4Y2VwdCBmb3IgdGhl
IHNjcmF0Y2guCiAgICAgdW5zaWduZWQgaSA9IDA7CkBAIC03MjgsMjMgKzc2Niw5IEBAIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKEVudHJ5RnJhCiAgICAgfQogICAgIHNwb29sZXIuZmluYWxpemVGUFIoKTsKIAot
ICAgIC8vIFJlc3RvcmUgdGhlIGNhbGxlZSBzYXZlIHZhbHVlIG9mIHRoZSBzY3JhdGNoLgotICAg
IFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoc2NyYXRjaEdQUkVu
dHJ5SW5kZXgpOwotICAgIEFTU0VSVCghZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJl
ZygpKSk7Ci0gICAgQVNTRVJUKGVudHJ5LnJlZygpLmlzR1BSKCkpOwotICAgIEFTU0VSVChzY3Jh
dGNoID09IGVudHJ5LnJlZygpLmdwcigpKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgUmVnaXN0ZXJB
dE9mZnNldCBlbnRyeTIgPSBhbGxDYWxsZWVTYXZlcy0+YXQoc2NyYXRjaEdQUkVudHJ5SW5kZXgg
KyAxKTsKLSAgICBBU1NFUlRfVU5VU0VEKGVudHJ5MiwgIWRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdl
dChlbnRyeTIucmVnKCkpKTsKLSAgICBBU1NFUlQoZW50cnkyLnJlZygpLmlzR1BSKCkpOwotICAg
IEFTU0VSVCh1bnVzZWROZXh0U2xvdEdQUiA9PSBlbnRyeTIucmVnKCkuZ3ByKCkpOwotICAgIGxv
YWRQYWlyNjQoc2NyYXRjaCwgVHJ1c3RlZEltbTMyKGVudHJ5Lm9mZnNldCgpKSwgc2NyYXRjaCwg
dW51c2VkTmV4dFNsb3RHUFIpOwotI2Vsc2UKLSAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwg
ZW50cnkub2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSNlbmRpZgotCiAjZWxzZQotICAgIFVOVVNFRF9Q
QVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICBVTlVTRURfUEFSQU0odm1HUFIpOworICAgIFVOVVNF
RF9QQVJBTShza2lwTGlzdCk7CiAjZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJ
U1RFUlMgPiAwCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCmluZGV4IDBkMjUzZDk4OGVjMjg3YzhjOTdiNTZkNWE4NzQxNWYxMTYxYjU4Y2IuLjlhNDc5
ZjY3MGI2ZDZlZDkxZDY4OTk4YjlmOTNiZjEwNmRlN2ZhMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtNDEzLDYgKzQxMyw4IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomKTsKKyAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJSZWcgdm1HUFIsIEdQUlJlZyBzY3Jh
dGNoR1BSKTsKKyAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGVudHJ5RnJhbWUsIGNvbnN0IFJlZ2lzdGVyU2V0JiBz
a2lwTGlzdCk7CiAKICAgICB2b2lkIGNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJh
bWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomLCBj
b25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURXhjZXB0aW9ucy5jcHAKaW5kZXggNmQ1ODNhNDg5ZWQ1MzAzMThjZTMwOTZjNjZiMDJlN2Qx
YzU4YTRiYy4uYjg2ZTlhNDEwM2M4NTA2YzNmZGJiYWM1NGQ3ZTk0ZTY2NjBhYWQ5OSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCkBAIC01NCwyMSArNTQs
MTQgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAK
ICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwogICAgIFJFTEVB
U0VfQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSB2bS5pbnRl
cnByZXRlci0+dW53aW5kKHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRoaXMgbWF5IHVw
ZGF0ZSBjYWxsRnJhbWUuCisgICAgQ2F0Y2hJbmZvIGhhbmRsZXIgPSB2bS5pbnRlcnByZXRlci0+
dW53aW5kKHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRoaXMgbWF5IHVwZGF0ZSBjYWxs
RnJhbWUuCiAKICAgICB2b2lkKiBjYXRjaFJvdXRpbmU7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGNhdGNoUENGb3JJbnRlcnByZXRlciA9IG51bGxwdHI7Ci0gICAgaWYgKGhhbmRsZXIpIHsKLSAg
ICAgICAgLy8gaGFuZGxlci0+dGFyZ2V0IGlzIG1lYW5pbmdsZXNzIGZvciBnZXR0aW5nIGEgY29k
ZSBvZmZzZXQgd2hlbiBjYXRjaGluZwotICAgICAgICAvLyB0aGUgZXhjZXB0aW9uIGluIGEgREZH
L0ZUTCBmcmFtZS4gVGhpcyBieXRlY29kZSB0YXJnZXQgb2Zmc2V0IGNvdWxkIGJlCi0gICAgICAg
IC8vIHNvbWV0aGluZyB0aGF0J3MgaW4gYW4gaW5saW5lZCBmcmFtZSwgd2hpY2ggbWVhbnMgYW4g
YXJyYXkgYWNjZXNzCi0gICAgICAgIC8vIHdpdGggdGhpcyBieXRlY29kZSBvZmZzZXQgaW4gdGhl
IG1hY2hpbmUgZnJhbWUgaXMgdXR0ZXJseSBtZWFuaW5nbGVzcwotICAgICAgICAvLyBhbmQgY2Fu
IGNhdXNlIGFuIG92ZXJmbG93LiBPU1IgZXhpdCBwcm9wZXJseSBleGl0cyB0byBoYW5kbGVyLT50
YXJnZXQKLSAgICAgICAgLy8gaW4gdGhlIHByb3BlciBmcmFtZS4KLSAgICAgICAgaWYgKCFKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSkK
LSAgICAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPnRhcmdldCkucHRyKCk7CisgICAgaWYgKGhh
bmRsZXIubV92YWxpZCkgeworICAgICAgICBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBoYW5kbGVy
Lm1fY2F0Y2hQQ0ZvckludGVycHJldGVyOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIGNhdGNo
Um91dGluZSA9IGhhbmRsZXItPm5hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAg
ICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci5tX25hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKICNlbHNlCiAgICAgICAgIGlmIChjYXRjaFBDRm9ySW50ZXJwcmV0ZXItPmlzV2lkZTMyKCkp
CiAgICAgICAgICAgICBjYXRjaFJvdXRpbmUgPSBMTEludDo6Z2V0V2lkZTMyQ29kZVB0cihjYXRj
aFBDRm9ySW50ZXJwcmV0ZXItPm9wY29kZUlEKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDdjYTFiNGU3YzNmZDA4NGRkMjdhYzM4NTA2YWE5YzZh
ZWQ5NWRlYjAuLjk5MjI5ZTQ5OTMxN2MxMmExZjM0Y2JlYWNkYWVjOTAxNTM4MDhhZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKQEAgLTU3LDYgKzU3LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKICAgICAgICAgdm9pZCBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRy
eSk7CiAgICAgICAgIHZvaWQgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAgICAgIHZvaWQgY29udmVydENhbGxl
ZVRvVk0oUmVnaXN0ZXJJRCBjYWxsZWUpOwogCiAgICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0
dXJuIG1fdm07IH0KIApAQCAtMTU4LDYgKzE1OSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRp
ZgogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6Y29udmVy
dENhbGxlZVRvVk0oUmVnaXN0ZXJJRCBjYWxsZWUpCisgICAgeworICAgICAgICBhdXRvIHByZWNp
c2VBbGxvY2F0aW9uQ2FzZSA9IGJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBj
YWxsZWUsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxm
QWxpZ25tZW50KSk7CisgICAgICAgIGFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
TWFya2VkQmxvY2s6OmJsb2NrTWFzayksIGNhbGxlZSk7CisgICAgICAgIGxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGNhbGxlZSwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFy
a2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgY2FsbGVlKTsKKyAgICAgICAgYXV0byBs
b2FkZWRDYXNlID0ganVtcCgpOworCisgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5r
KHRoaXMpOworICAgICAgICBsb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWUsIFBy
ZWNpc2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0o
KSAtIFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBjYWxsZWUpOworCisgICAgICAg
IGxvYWRlZENhc2UubGluayh0aGlzKTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEu
aAppbmRleCA0NzFmYjVkMmZkM2I4MDkzOTZhNTIzY2UzM2ZjYjJhODU5ODM2YWNiLi4zN2MxYWZl
NmRlNzZjODkzNWFjNzQ2ZDYwZmI0OTdkMzFlNmU3Y2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RGF0YS5oCkBAIC0zMjIsNiArMzIyLDI0IEBAIEFMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTMyQ29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bj
b2RlSUQpCiAjZW5kaWYKIH0KIAordGVtcGxhdGU8UHRyVGFnIHRhZz4KK0FMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz4gZ2V0Q29kZVJlZihXYXNtT3Bjb2RlSUQgb3Bjb2Rl
SUQpCit7CisgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+OjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoZ2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKSk7Cit9CisKK3RlbXBsYXRl
PFB0clRhZyB0YWc+CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+IGdl
dFdpZGUxNkNvZGVSZWYoV2FzbU9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8dGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdldFdpZGUx
NkNvZGVQdHI8dGFnPihvcGNvZGVJRCkpOworfQorCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPiBnZXRXaWRlMzJDb2RlUmVmKFdh
c21PcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PHRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bj
b2RlSUQpKTsKK30KKwogdGVtcGxhdGU8UHRyVGFnIHRhZz4KIEFMV0FZU19JTkxJTkUgTExJbnRD
b2RlIGdldENvZGVGdW5jdGlvblB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI5MTNl
ZWRhYjBjNDMwZmE3ODQ2MjliZTMwOTEyNDAwZTU2OThjMTQuLjZkODY3ZjI2ZWFhYTJjZThhYjk5
ZWRhZWMwZjBhYTIzNmRjOTJjZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludEV4Y2VwdGlvbnMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTExJbnRD
b21tb24uaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5o
IgorI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCiAKICNpZiBMTElOVF9UUkFDSU5HCiAjaW5jbHVk
ZSAiQ2F0Y2hTY29wZS5oIgpAQCAtNDksNiArNTAsMTggQEAgSW5zdHJ1Y3Rpb24qIHJldHVyblRv
VGhyb3coVk0mIHZtKQogICAgIHJldHVybiBMTEludDo6ZXhjZXB0aW9uSW5zdHJ1Y3Rpb25zKCk7
CiB9CiAKK0luc3RydWN0aW9uKiB3YXNtUmV0dXJuVG9UaHJvdyhWTSYgdm0pCit7CisgICAgVU5V
U0VEX1BBUkFNKHZtKTsKKyNpZiBMTElOVF9UUkFDSU5HCisgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnRyYWNlTExJbnRTbG93UGF0aCgpKSkgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAi
LCBKU1ZhbHVlKHNjb3BlLmV4Y2VwdGlvbigpKSwgIiAocmV0dXJuVG9UaHJvdykuXG4iKTsKKyAg
ICB9CisjZW5kaWYKKyAgICByZXR1cm4gTExJbnQ6Ondhc21FeGNlcHRpb25JbnN0cnVjdGlvbnMo
KTsKK30KKwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGNh
bGxUb1Rocm93KFZNJiB2bSkKIHsKICAgICBVTlVTRURfUEFSQU0odm0pOwpAQCAtOTIsNCArMTA1
LDM2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5k
bGVDYXRjaChPcGNvZGVTaXplIHNpemUpCiAgICAgcmV0dXJuIHt9OwogfQogCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IGhhbmRsZVdhc21DYXRjaChPcGNvZGVTaXplIHNpemUpCit7CisgICAgV2FzbU9wY29kZUlE
IG9wY29kZSA9IFdhc206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21fY2F0Y2ggOiB3YXNt
X2NhdGNoX25vX3RsczsKKyAgICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIE9wY29kZVNpemU6
Ok5hcnJvdzoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+KG9wY29kZSk7CisgICAgY2FzZSBPcGNvZGVTaXplOjpXaWRlMTY6CisgICAgICAg
IHJldHVybiBMTEludDo6Z2V0V2lkZTE2Q29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihv
cGNvZGUpOworICAgIGNhc2UgT3Bjb2RlU2l6ZTo6V2lkZTMyOgorICAgICAgICByZXR1cm4gTExJ
bnQ6OmdldFdpZGUzMkNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4ob3Bjb2RlKTsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9Owor
fQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFuZGxl
V2FzbUNhdGNoQWxsKE9wY29kZVNpemUgc2l6ZSkKK3sKKyAgICBXYXNtT3Bjb2RlSUQgb3Bjb2Rl
ID0gV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpID8gd2FzbV9jYXRjaF9hbGwgOiB3YXNtX2Nh
dGNoX2FsbF9ub190bHM7CisgICAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSBPcGNvZGVTaXpl
OjpOYXJyb3c6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPihvcGNvZGUpOworICAgIGNhc2UgT3Bjb2RlU2l6ZTo6V2lkZTE2OgorICAgICAg
ICByZXR1cm4gTExJbnQ6OmdldFdpZGUxNkNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4o
b3Bjb2RlKTsKKyAgICBjYXNlIE9wY29kZVNpemU6OldpZGUzMjoKKyAgICAgICAgcmV0dXJuIExM
SW50OjpnZXRXaWRlMzJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KG9wY29kZSk7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpMTEludApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhj
ZXB0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5o
CmluZGV4IDgwNmIxOWY2NjA1ODY2Yjg4Y2U4NDk1ODdhMDQxYWRlNGYzNmQ2MjkuLmU1ZjkwMjFm
YWRiOGVmY2IyNTg3YzBjYTYwMTc2ZWJmMWRjYmFjNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmgKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNwYWNl
IExMSW50IHsKIC8vIGJldHdlZW4gMSBhbmQgOSBzbG90cyB3aWxsIGdpdmUgeW91IGFuICJpbnN0
cnVjdGlvbiIgdGhhdCB0aHJlYWRzIHRvIHRoZQogLy8gaW50ZXJwcmV0ZXIncyBleGNlcHRpb24g
aGFuZGxlci4KIEluc3RydWN0aW9uKiByZXR1cm5Ub1Rocm93KFZNJik7CitJbnN0cnVjdGlvbiog
d2FzbVJldHVyblRvVGhyb3coVk0mKTsKIAogLy8gVXNlIHRoaXMgd2hlbiB5b3UncmUgdGhyb3dp
bmcgdG8gYSBjYWxsIHRodW5rLgogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+IGNhbGxUb1Rocm93KFZNJik7CkBAIC00OSw0ICs1MCw5IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBjYWxsVG9UaHJvdyhWTSYpOwogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGhhbmRsZVVuY2F1Z2h0
RXhjZXB0aW9uKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4gaGFuZGxlQ2F0Y2goT3Bjb2RlU2l6ZSk7CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFuZGxlV2Fz
bUNhdGNoKE9wY29kZVNpemUpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+IGhhbmRsZVdhc21DYXRjaEFsbChPcGNvZGVTaXplKTsKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcApp
bmRleCA2ZGY0Njg1MGUyYzdlYjk2ODk4ZWM0YzU3ZmNiNzdkZDg3NWQyZDUwLi5iMmNhYTE4NTQx
MzBmZjhiOTMxODA3NmQyN2RmZWJkZDIxMzM4NDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcApAQCAtNTMsNiArNTMs
NyBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkpT
U3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0
YS5oIgogI2luY2x1ZGUgIkxMSW50T2ZmbGluZUFzbUNvbmZpZy5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5hc20KaW5kZXggNDM2Y2Y2NjQ5MGQ3MWM1ZWU5YmIz
MGU4NmZlNmY0MmJhZWU3NmRmMS4uZmU5ODljODNhMTEwYjFjODM4NzQzZjk3MzJjOWEyYmNlNWFm
ZDU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5
LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCkBA
IC0yNTYsNiArMjU2LDcgQEAgbWFjcm8gdGhyb3dFeGNlcHRpb24oZXhjZXB0aW9uKQogZW5kCiAK
IG1hY3JvIGNhbGxXYXNtU2xvd1BhdGgoc2xvd1BhdGgpCisgICAgc3RvcmVpIFBDLCBBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdCiAgICAgcHJlcGFyZVN0YXRlRm9y
Q0NhbGwoKQogICAgIG1vdmUgY2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCkBAIC0yNzQsNiArMjc1
LDE0IEBAIG1hY3JvIGNhbGxXYXNtQ2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCiAgICAg
YWN0aW9uKHIwLCByMSkKIGVuZAogCittYWNybyByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxs
KCkKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgd3MxCisgICAgbG9hZGkgV2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2s6Om1fbnVtQ2FsbGVlTG9jYWxzW3dzMV0sIHdzMQorICAgIGxzaGlmdHAgMywg
d3MxCisgICAgYWRkcCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCwgd3MxCisgICAgc3Vi
cCBjZnIsIHdzMSwgc3AKK2VuZAorCiBtYWNybyB3YXNtUHJvbG9ndWUoY29kZUJsb2NrR2V0dGVy
LCBjb2RlQmxvY2tTZXR0ZXIsIGxvYWRXYXNtSW5zdGFuY2UpCiAgICAgIyBTZXQgdXAgdGhlIGNh
bGwgZnJhbWUgYW5kIGNoZWNrIGlmIHdlIHNob3VsZCBPU1IuCiAgICAgcHJlc2VydmVDYWxsZXJQ
Q0FuZENGUigpCkBAIC0yODEsNiArMjkwLDkgQEAgbWFjcm8gd2FzbVByb2xvZ3VlKGNvZGVCbG9j
a0dldHRlciwgY29kZUJsb2NrU2V0dGVyLCBsb2FkV2FzbUluc3RhbmNlKQogICAgIGxvYWRXYXNt
SW5zdGFuY2UoKQogICAgIHJlbG9hZE1lbW9yeVJlZ2lzdGVyc0Zyb21JbnN0YW5jZSh3YXNtSW5z
dGFuY2UsIHdzMCwgd3MxKQogCisgICAgbG9hZHAgV2FzbTo6SW5zdGFuY2U6Om1fb3duZXJbd2Fz
bUluc3RhbmNlXSwgd3MwCisgICAgc3RvcmVwIHdzMCwgVGhpc0FyZ3VtZW50T2Zmc2V0W2Nmcl0K
KwogICAgIGNvZGVCbG9ja0dldHRlcih3czApCiAgICAgY29kZUJsb2NrU2V0dGVyKHdzMCkKIApA
QCAtMzMzLDE1ICszNDUsMTkgQEAgbWFjcm8gdHJhY2VFeGVjdXRpb24oKQogICAgIGVuZAogZW5k
CiAKLSMgTGVzcyBjb252ZW5pZW50LCBidXQgcmVxdWlyZWQgZm9yIG9wY29kZXMgdGhhdCBjb2xs
aWRlIHdpdGggcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb25zIChlLmcuIHdhc21fbm9wKQotbWFjcm8gdW5w
cmVmaXhlZFdhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGZuKQotICAgIGNvbW1vbk9w
KG9wY29kZU5hbWUsIHRyYWNlRXhlY3V0aW9uLCBtYWNybyhzaXplKQorbWFjcm8gY29tbW9uV2Fz
bU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgcHJvbG9ndWUsIGZuKQorICAgIGNvbW1vbk9w
KG9wY29kZU5hbWUsIHByb2xvZ3VlLCBtYWNybyhzaXplKQogICAgICAgICBmbihtYWNybyhmbjIp
CiAgICAgICAgICAgICBmbjIob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBzaXplKQogICAgICAg
ICBlbmQpCiAgICAgZW5kKQogZW5kCiAKKyMgTGVzcyBjb252ZW5pZW50LCBidXQgcmVxdWlyZWQg
Zm9yIG9wY29kZXMgdGhhdCBjb2xsaWRlIHdpdGggcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb25zIChlLmcu
IHdhc21fbm9wKQorbWFjcm8gdW5wcmVmaXhlZFdhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1
Y3QsIGZuKQorICAgIGNvbW1vbldhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHRyYWNl
RXhlY3V0aW9uLCBmbikKK2VuZAorCiBtYWNybyB3YXNtT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3Ry
dWN0LCBmbikKICAgICB1bnByZWZpeGVkV2FzbU9wKHdhc21fJW9wY29kZU5hbWUlLCBvcGNvZGVT
dHJ1Y3QsIGZuKQogZW5kCkBAIC01MTIsNiArNTI4LDE2IEBAIG9wKHdhc21fZnVuY3Rpb25fcHJv
bG9ndWVfbm9fdGxzLCBtYWNybyAoKQogICAgIHdhc21OZXh0SW5zdHJ1Y3Rpb24oKQogZW5kKQog
CittYWNybyBqdW1wVG9FeGNlcHRpb24oKQorICAgIGlmIEFSTTY0RQorICAgICAgICBtb3ZlIHIw
LCBhMAorICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlND
Q29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6ZXhjZXB0aW9uSGFuZGxlcikgKiBQdHJT
aXplLCBhMQorICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgRXhjZXB0
aW9uSGFuZGxlclB0clRhZworICAgIGVsc2UKKyAgICAgICAgam1wIHIwLCBFeGNlcHRpb25IYW5k
bGVyUHRyVGFnCisgICAgZW5kCitlbmQKKwogb3Aod2FzbV90aHJvd19mcm9tX3Nsb3dfcGF0aF90
cmFtcG9saW5lLCBtYWNybyAoKQogICAgIGxvYWRwIFdhc206Okluc3RhbmNlOjptX3BvaW50ZXJU
b1RvcEVudHJ5RnJhbWVbd2FzbUluc3RhbmNlXSwgdDUKICAgICBsb2FkcCBbdDVdLCB0NQpAQCAt
NTIzLDE0ICs1NDksNyBAQCBvcCh3YXNtX3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUs
IG1hY3JvICgpCiAgICAgIyBTbG93IHBhdGhzIGFuZCB0aGUgdGhyb3dFeGNlcHRpb24gbWFjcm8g
c3RvcmUgdGhlIGV4Y2VwdGlvbiBjb2RlIGluIHRoZSBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyBzbG90CiAgICAgbG9hZGkgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBQYXlsb2FkT2Zm
c2V0W2Nmcl0sIGEzCiAgICAgY0NhbGw0KF9zbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24p
Ci0KLSAgICBpZiBBUk02NEUKLSAgICAgICAgbW92ZSByMCwgYTAKLSAgICAgICAgbGVhcCBKU0ND
b25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3Rl
eHByIEdhdGU6OmV4Y2VwdGlvbkhhbmRsZXIpICogUHRyU2l6ZSwgYTEKLSAgICAgICAgam1wIFth
MV0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLSAgICBl
bHNlCi0gICAgICAgIGptcCByMCwgRXhjZXB0aW9uSGFuZGxlclB0clRhZwotICAgIGVuZAorICAg
IGp1bXBUb0V4Y2VwdGlvbigpCiBlbmQpCiAKIG1hY3JvIHdhc21fdGhyb3dfZnJvbV9mYXVsdF9o
YW5kbGVyKGluc3RhbmNlKQpAQCAtNTQzLDE0ICs1NjIsNyBAQCBtYWNybyB3YXNtX3Rocm93X2Zy
b21fZmF1bHRfaGFuZGxlcihpbnN0YW5jZSkKICAgICBtb3ZlIDAsIGExCiAgICAgbW92ZSBjZnIs
IGEwCiAgICAgY0NhbGw0KF9zbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24pCi0KLSAgICBp
ZiBBUk02NEUKLSAgICAgICAgbW92ZSByMCwgYTAKLSAgICAgICAgbGVhcCBKU0NDb25maWcgKyBj
b25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6
OmV4Y2VwdGlvbkhhbmRsZXIpICogUHRyU2l6ZSwgYTEKLSAgICAgICAgam1wIFthMV0sIE5hdGl2
ZVRvSklUR2F0ZVB0clRhZyAjIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLSAgICBlbHNlCi0gICAg
ICAgIGptcCByMCwgRXhjZXB0aW9uSGFuZGxlclB0clRhZwotICAgIGVuZAorICAgIGp1bXBUb0V4
Y2VwdGlvbigpCiBlbmQKIAogb3Aod2FzbV90aHJvd19mcm9tX2ZhdWx0X2hhbmRsZXJfdHJhbXBv
bGluZV9mYXN0VExTLCBtYWNybyAoKQpAQCAtNzcwLDExICs3ODIsMTEgQEAgbWFjcm8gc2xvd1Bh
dGhGb3JXYXNtQ2FsbChjdHgsIHNsb3dQYXRoLCBzdG9yZVdhc21JbnN0YW5jZSkKIAogICAgICAg
ICAgICAgIyBMb2FkIHJlZ2lzdGVycyBmcm9tIHN0YWNrCiAgICAgICAgICAgICBmb3JFYWNoQXJn
dW1lbnRHUFIobWFjcm8gKG9mZnNldCwgZ3ByKQotICAgICAgICAgICAgICAgIGxvYWRxIENhbGxG
cmFtZUhlYWRlclNpemUgKyBvZmZzZXRbc3AsIHdzMSwgOF0sIGdwcgorICAgICAgICAgICAgICAg
IGxvYWRxIENhbGxGcmFtZUhlYWRlclNpemUgKyA4ICsgb2Zmc2V0W3NwLCB3czEsIDhdLCBncHIK
ICAgICAgICAgICAgIGVuZCkKIAogICAgICAgICAgICAgZm9yRWFjaEFyZ3VtZW50RlBSKG1hY3Jv
IChvZmZzZXQsIGZwcikKLSAgICAgICAgICAgICAgICBsb2FkZCBDYWxsRnJhbWVIZWFkZXJTaXpl
ICsgb2Zmc2V0W3NwLCB3czEsIDhdLCBmcHIKKyAgICAgICAgICAgICAgICBsb2FkZCBDYWxsRnJh
bWVIZWFkZXJTaXplICsgOCArIG9mZnNldFtzcCwgd3MxLCA4XSwgZnByCiAgICAgICAgICAgICBl
bmQpCiAKICAgICAgICAgICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCkBAIC04MTEs
MTEgKzgyMyw3IEBAIG1hY3JvIHNsb3dQYXRoRm9yV2FzbUNhbGwoY3R4LCBzbG93UGF0aCwgc3Rv
cmVXYXNtSW5zdGFuY2UpCiAgICAgICAgICAgICAgICAgZGVmaW5lUmV0dXJuTGFiZWwob3Bjb2Rl
TmFtZSwgc2l6ZSkKICAgICAgICAgICAgIGVuZCkKIAotICAgICAgICAgICAgbG9hZHAgQ29kZUJs
b2NrW2Nmcl0sIHdzMQotICAgICAgICAgICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6
Om1fbnVtQ2FsbGVlTG9jYWxzW3dzMV0sIHdzMQotICAgICAgICAgICAgbHNoaWZ0cCAzLCB3czEK
LSAgICAgICAgICAgIGFkZHAgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwsIHdzMQotICAg
ICAgICAgICAgc3VicCBjZnIsIHdzMSwgc3AKKyAgICAgICAgICAgIHJlc3RvcmVTdGFja1BvaW50
ZXJBZnRlckNhbGwoKQogCiAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gc2V0IFBDIHRvIGxvYWQg
aW5mb3JtYXRpb24gZnJvbSB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLCBidXQgd2UKICAgICAgICAg
ICAgICMgbmVlZCB0byBwcmVzZXJ2ZSBpdHMgY3VycmVudCB2YWx1ZSBzaW5jZSBpdCBtaWdodCBj
b250YWluIGEgcmV0dXJuIHZhbHVlCkBAIC04MzYsMTEgKzg0NCwxMSBAQCBtYWNybyBzbG93UGF0
aEZvcldhc21DYWxsKGN0eCwgc2xvd1BhdGgsIHN0b3JlV2FzbUluc3RhbmNlKQogICAgICAgICAg
ICAgd2dldHUoY3R4LCBtX251bWJlck9mU3RhY2tBcmdzLCB3czApCiAgICAgICAgICAgICBtb3Zl
IG1lbW9yeUJhc2UsIFBDCiAgICAgICAgICAgICBmb3JFYWNoQXJndW1lbnRHUFIobWFjcm8gKG9m
ZnNldCwgZ3ByKQotICAgICAgICAgICAgICAgIHN0b3JlcSBncHIsIENhbGxGcmFtZUhlYWRlclNp
emUgKyBvZmZzZXRbd3MxLCB3czAsIDhdCisgICAgICAgICAgICAgICAgc3RvcmVxIGdwciwgQ2Fs
bEZyYW1lSGVhZGVyU2l6ZSArIDggKyBvZmZzZXRbd3MxLCB3czAsIDhdCiAgICAgICAgICAgICBl
bmQpCiAKICAgICAgICAgICAgIGZvckVhY2hBcmd1bWVudEZQUihtYWNybyAob2Zmc2V0LCBmcHIp
Ci0gICAgICAgICAgICAgICAgc3RvcmVkIGZwciwgQ2FsbEZyYW1lSGVhZGVyU2l6ZSArIG9mZnNl
dFt3czEsIHdzMCwgOF0KKyAgICAgICAgICAgICAgICBzdG9yZWQgZnByLCBDYWxsRnJhbWVIZWFk
ZXJTaXplICsgOCArIG9mZnNldFt3czEsIHdzMCwgOF0KICAgICAgICAgICAgIGVuZCkKIAogICAg
ICAgICAgICAgbG9hZGkgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2Zy
XSwgUEMKQEAgLTI4MDQsMyArMjgxMiwxMTQgQEAgd2FzbU9wKGF0b21pY19mZW5jZSwgV2FzbURy
b3BLZWVwLCBtYWNybyhjdHgpCiAgICAgZmVuY2UKICAgICBkaXNwYXRjaChjdHgpCiBlbmQpCisK
K3dhc21PcCh0aHJvdywgV2FzbVRocm93LCBtYWNybyhjdHgpCisgICAgbG9hZHAgV2FzbTo6SW5z
dGFuY2U6Om1fcG9pbnRlclRvVG9wRW50cnlGcmFtZVt3YXNtSW5zdGFuY2VdLCB0NQorICAgIGxv
YWRwIFt0NV0sIHQ1CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodDUpCisKKyAgICBjYWxsV2FzbVNsb3dQYXRoKF9zbG93X3BhdGhfd2FzbV90aHJvdykK
KyAgICBqdW1wVG9FeGNlcHRpb24oKQorZW5kKQorCit3YXNtT3AocmV0aHJvdywgV2FzbVJldGhy
b3csIG1hY3JvKGN0eCkKKyAgICBjYWxsV2FzbVNsb3dQYXRoKF9zbG93X3BhdGhfd2FzbV9yZXRo
cm93KQorICAgIGp1bXBUb0V4Y2VwdGlvbigpCitlbmQpCisKK21hY3JvIGNhdGNoSW1wbChjdHgs
IHN0b3JlV2FzbUluc3RhbmNlKQorICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MworICAgIGNvbnZl
cnRDYWxsZWVUb1ZNKHQzKQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih0MywgdDApCisKKyAgICBsb2FkcCBWTTo6Y2FsbGVlRm9yV2FzbUNh
dGNoW3QzXSwgd3MxCisgICAgc3RvcmVwIDAsIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hbdDNdCisg
ICAgc3RvcmVwIHdzMSwgQ2FsbGVlW2Nmcl0KKworICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JD
YXRjaFt0M10sIGNmcgorICAgIHN0b3JlcCAwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hbdDNdCisK
KyAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKKworICAgIGxvYWRwIFRoaXNBcmd1
bWVudE9mZnNldFtjZnJdLCB3YXNtSW5zdGFuY2UKKyAgICBsb2FkcCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6Om1faW5zdGFuY2Vbd2FzbUluc3RhbmNlXSwgd2FzbUluc3RhbmNlCisgICAgc3RvcmVX
YXNtSW5zdGFuY2Uod2FzbUluc3RhbmNlKQorICAgIHJlbG9hZE1lbW9yeVJlZ2lzdGVyc0Zyb21J
bnN0YW5jZSh3YXNtSW5zdGFuY2UsIHdzMCwgd3MxKQorCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nm
cl0sIFBCCisgICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcltQQl0sIFBCCisgICAgbG9hZHAgVk06OnRhcmdldEludGVycHJldGVyUENGb3JU
aHJvd1t0M10sIFBDCisgICAgc3VicCBQQiwgUEMKKworICAgIGNhbGxXYXNtU2xvd1BhdGgoX3Ns
b3dfcGF0aF93YXNtX3JldHJpZXZlX2FuZF9jbGVhcl9leGNlcHRpb24pCisgICAgbW92ZSByMSwg
dDEKKworICAgIHdnZXR1KGN0eCwgbV9zdGFydE9mZnNldCwgdDIpCisgICAgd2dldHUoY3R4LCBt
X2FyZ3VtZW50Q291bnQsIHQzKQorCisgICAgbHNoaWZ0aSAzLCB0MgorICAgIHN1YnAgY2ZyLCB0
MiwgdDIKKworLmNvcHlMb29wOgorICAgIGJ0aXogdDMsIC5kb25lCisgICAgbG9hZHEgW3QxXSwg
dDYKKyAgICBzdG9yZXEgdDYsIFt0Ml0KKyAgICBzdWJpIDEsIHQzCisgICAgIyBGSVhNRTogVXNl
IGFybSBzdG9yZS1hZGQvc3ViIGluc3RydWN0aW9ucyBpbiB3YXNtIExMSW50IGNhdGNoCisgICAg
IyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjEwCisgICAgc3Vi
cCA4LCB0MgorICAgIGFkZHAgOCwgdDEKKyAgICBqbXAgLmNvcHlMb29wCisKKy5kb25lOgorICAg
IHRyYWNlRXhlY3V0aW9uKCkKKworICAgIGRpc3BhdGNoKGN0eCkKK2VuZAorCitjb21tb25XYXNt
T3Aod2FzbV9jYXRjaCwgV2FzbUNhdGNoLCBtYWNybygpIGVuZCwgbWFjcm8oY3R4KQorICAgIGNh
dGNoSW1wbChjdHgsIHN0b3JlV2FzbUluc3RhbmNlVG9UTFMpCitlbmQpCisKK2NvbW1vbldhc21P
cCh3YXNtX2NhdGNoX25vX3RscywgV2FzbUNhdGNoLCBtYWNybygpIGVuZCwgbWFjcm8oY3R4KQor
ICAgIGNhdGNoSW1wbChjdHgsIG1hY3JvKGluc3RhbmNlKSBlbmQpCitlbmQpCisKK21hY3JvIGNh
dGNoQWxsSW1wbChjdHgsIHN0b3JlV2FzbUluc3RhbmNlKQorICAgIGxvYWRwIENhbGxlZVtjZnJd
LCB0MworICAgIGNvbnZlcnRDYWxsZWVUb1ZNKHQzKQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0MywgdDApCisKKyAgICBsb2FkcCBWTTo6
Y2FsbGVlRm9yV2FzbUNhdGNoW3QzXSwgd3MxCisgICAgc3RvcmVwIDAsIFZNOjpjYWxsZWVGb3JX
YXNtQ2F0Y2hbdDNdCisgICAgc3RvcmVwIHdzMSwgQ2FsbGVlW2Nmcl0KKworICAgIGxvYWRwIFZN
OjpjYWxsRnJhbWVGb3JDYXRjaFt0M10sIGNmcgorICAgIHN0b3JlcCAwLCBWTTo6Y2FsbEZyYW1l
Rm9yQ2F0Y2hbdDNdCisKKyAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKKworICAg
IGxvYWRwIFRoaXNBcmd1bWVudE9mZnNldFtjZnJdLCB3YXNtSW5zdGFuY2UKKyAgICBsb2FkcCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1faW5zdGFuY2Vbd2FzbUluc3RhbmNlXSwgd2FzbUluc3Rh
bmNlCisgICAgc3RvcmVXYXNtSW5zdGFuY2Uod2FzbUluc3RhbmNlKQorICAgIHJlbG9hZE1lbW9y
eVJlZ2lzdGVyc0Zyb21JbnN0YW5jZSh3YXNtSW5zdGFuY2UsIHdzMCwgd3MxKQorCisgICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6
Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCisgICAgbG9hZHAgVk06OnRhcmdldElu
dGVycHJldGVyUENGb3JUaHJvd1t0M10sIFBDCisgICAgc3VicCBQQiwgUEMKKworICAgIGNhbGxX
YXNtU2xvd1BhdGgoX3Nsb3dfcGF0aF93YXNtX3JldHJpZXZlX2FuZF9jbGVhcl9leGNlcHRpb24p
CisKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisKKyAgICBkaXNwYXRjaChjdHgpCitlbmQKKworY29t
bW9uV2FzbU9wKHdhc21fY2F0Y2hfYWxsLCBXYXNtQ2F0Y2hBbGwsIG1hY3JvKCkgZW5kLCBtYWNy
byhjdHgpCisgICAgY2F0Y2hBbGxJbXBsKGN0eCwgc3RvcmVXYXNtSW5zdGFuY2VUb1RMUykKK2Vu
ZCkKKworY29tbW9uV2FzbU9wKHdhc21fY2F0Y2hfYWxsX25vX3RscywgV2FzbUNhdGNoQWxsLCBt
YWNybygpIGVuZCwgbWFjcm8oY3R4KQorICAgIGNhdGNoQWxsSW1wbChjdHgsIG1hY3JvKGluc3Rh
bmNlKSBlbmQpCitlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvckluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
SW5zdGFuY2UuY3BwCmluZGV4IGRmYjkzMTg4YzA4ZmQ4ZGJhZDNiZjdmODVlMTg1MmI1MjQwNmI1
ZDYuLmI2Y2E1YmM0MjM2YjlkNTY1ZjU4Yzg2YTk3MGNhMzc2NTU5MDk1MDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCkBAIC00MCw2ICs0
MCw5IEBAIEVycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgRXJyb3JUeXBlIGVycm9yVHlwZSkKICAgICAsIG1fb3V0T2ZNZW1vcnlFcnJvcihm
YWxzZSkKICAgICAsIG1fZXJyb3JJbmZvTWF0ZXJpYWxpemVkKGZhbHNlKQogICAgICwgbV9uYXRp
dmVHZXR0ZXJUeXBlRXJyb3IoZmFsc2UpCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICwg
bV9jYXRjaGFibGVGcm9tV2FzbSh0cnVlKQorI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
IHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJ
bnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5o
CmluZGV4IDdkMmU2NDMyNmE4MWRiNmM3NzBhNDYzZDhmOTYzNzY3M2RmYjI5M2IuLmVmZjVlOTg3
MjRiOTA2MjFiMTgyMjAyOWEwOTUwNmI5Yzc5OWUxZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgKQEAgLTgwLDYgKzgwLDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldE5hdGl2ZUdldHRlclR5cGVFcnJvcigpIHsgbV9uYXRpdmVHZXR0ZXJUeXBl
RXJyb3IgPSB0cnVlOyB9CiAgICAgYm9vbCBpc05hdGl2ZUdldHRlclR5cGVFcnJvcigpIGNvbnN0
IHsgcmV0dXJuIG1fbmF0aXZlR2V0dGVyVHlwZUVycm9yOyB9CiAKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgdm9pZCBzZXRDYXRjaGFibGVGcm9tV2FzbShib29sIGZsYWcpIHsgbV9jYXRj
aGFibGVGcm9tV2FzbSA9IGZsYWc7IH0KKyAgICBib29sIGlzQ2F0Y2hhYmxlRnJvbVdhc20oKSBj
b25zdCB7IHJldHVybiBtX2NhdGNoYWJsZUZyb21XYXNtOyB9CisjZW5kaWYKKwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIFN0cmluZyBzYW5pdGl6ZWRUb1N0cmluZyhKU0dsb2JhbE9iamVjdCopOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzYW5pdGl6ZWRNZXNzYWdlU3RyaW5nKEpTR2xv
YmFsT2JqZWN0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNhbml0aXplZE5hbWVT
dHJpbmcoSlNHbG9iYWxPYmplY3QqKTsKQEAgLTExNiw2ICsxMjEsOSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgYm9vbCBtX291dE9mTWVtb3J5RXJyb3IgOiAxOwogICAgIGJvb2wgbV9lcnJvckluZm9NYXRl
cmlhbGl6ZWQgOiAxOwogICAgIGJvb2wgbV9uYXRpdmVHZXR0ZXJUeXBlRXJyb3IgOiAxOworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBib29sIG1fY2F0Y2hhYmxlRnJvbVdhc20gOiAxOwor
I2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyOTdmY2Q2OThmZmJhOTRiNzcy
NmRlNjdkMTliMjQyNTk3MDNhMzJiLi4zMTllNGIzZDhhYjE4MzAwNjBmMjI1NzYxYTE5MmJjY2I4
MDQzN2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCkBAIC0xNTMsNiArMTUzLDcgQEAKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIKICNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5R2xvYmFsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgpAQCAtMTYwLDYgKzE2MSw3IEBA
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNs
dWRlICJMYXp5Q2xhc3NTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGF6eVByb3BlcnR5
SW5saW5lcy5oIgpAQCAtMjIwLDYgKzIyMiw4IEBACiAjaW5jbHVkZSAiV2Vha1NldFByb3RvdHlw
ZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNp
bmNsdWRlICJXZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlHbG9iYWxQcm90b3R5cGUuaCIKQEAgLTIzNiw2ICsyNDAsOCBAQAogI2luY2x1ZGUgIldl
YkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlU
YWJsZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5o
IgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJB
c3NlbWJseVRhZ1Byb3RvdHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KICNp
bmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCA5NjFjMjQ3ZTlhNzkyYTFhZmU2YzljOTg5
NDA3NmYxNGY3MDgyZGVhLi4xYmRjYzRkZTc0ZDA5MjRkMzljODRmOTUyNWM1ZTBiM2U2YWY0MTBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
QEAgLTE2OSwxNCArMTY5LDE2IEBAIGNvbnN0ZXhwciBib29sIHR5cGVFeHBvc2VkQnlEZWZhdWx0
ID0gdHJ1ZTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICNkZWZpbmUgRk9SX0VBQ0hfV0VC
QVNTRU1CTFlfQ09OU1RSVUNUT1JfVFlQRShtYWNybykgXAotICAgIG1hY3JvKFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yLCB3ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgd2ViQXNzZW1ibHlDb21waWxl
RXJyb3IsIEVycm9ySW5zdGFuY2UsICAgICAgICAgICAgIENvbXBpbGVFcnJvciwgZXJyb3IsIHR5
cGVFeHBvc2VkQnlEZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlDb21waWxlRXJyb3Is
IHdlYkFzc2VtYmx5Q29tcGlsZUVycm9yLCB3ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgRXJyb3JJ
bnN0YW5jZSwgICAgICAgICAgICAgQ29tcGlsZUVycm9yLCBlcnJvciwgIHR5cGVFeHBvc2VkQnlE
ZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlFeGNlcHRpb24sICAgIHdlYkFzc2VtYmx5
RXhjZXB0aW9uLCAgICB3ZWJBc3NlbWJseUV4Y2VwdGlvbiwgICAgSlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbiwgICAgRXhjZXB0aW9uLCAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCiAg
ICAgbWFjcm8oV2ViQXNzZW1ibHlHbG9iYWwsICAgICAgIHdlYkFzc2VtYmx5R2xvYmFsLCAgICAg
ICB3ZWJBc3NlbWJseUdsb2JhbCwgICAgICAgSlNXZWJBc3NlbWJseUdsb2JhbCwgICAgICAgR2xv
YmFsLCAgICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCiAgICAgbWFjcm8oV2Vi
QXNzZW1ibHlJbnN0YW5jZSwgICAgIHdlYkFzc2VtYmx5SW5zdGFuY2UsICAgICB3ZWJBc3NlbWJs
eUluc3RhbmNlLCAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlLCAgICAgSW5zdGFuY2UsICAgICBv
YmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCi0gICAgbWFjcm8oV2ViQXNzZW1ibHlMaW5r
RXJyb3IsICAgIHdlYkFzc2VtYmx5TGlua0Vycm9yLCAgICB3ZWJBc3NlbWJseUxpbmtFcnJvciwg
ICAgRXJyb3JJbnN0YW5jZSwgICAgICAgICAgICAgTGlua0Vycm9yLCAgICBlcnJvciwgdHlwZUV4
cG9zZWRCeURlZmF1bHQpIFwKKyAgICBtYWNybyhXZWJBc3NlbWJseUxpbmtFcnJvciwgICAgd2Vi
QXNzZW1ibHlMaW5rRXJyb3IsICAgIHdlYkFzc2VtYmx5TGlua0Vycm9yLCAgICBFcnJvckluc3Rh
bmNlLCAgICAgICAgICAgICBMaW5rRXJyb3IsICAgIGVycm9yLCAgdHlwZUV4cG9zZWRCeURlZmF1
bHQpIFwKICAgICBtYWNybyhXZWJBc3NlbWJseU1lbW9yeSwgICAgICAgd2ViQXNzZW1ibHlNZW1v
cnksICAgICAgIHdlYkFzc2VtYmx5TWVtb3J5LCAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5LCAg
ICAgICBNZW1vcnksICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKICAgICBt
YWNybyhXZWJBc3NlbWJseU1vZHVsZSwgICAgICAgd2ViQXNzZW1ibHlNb2R1bGUsICAgICAgIHdl
YkFzc2VtYmx5TW9kdWxlLCAgICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlLCAgICAgICBNb2R1bGUs
ICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKLSAgICBtYWNybyhXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvciwgd2ViQXNzZW1ibHlSdW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVu
dGltZUVycm9yLCBFcnJvckluc3RhbmNlLCAgICAgICAgICAgICBSdW50aW1lRXJyb3IsIGVycm9y
LCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAotICAgIG1hY3JvKFdlYkFzc2VtYmx5VGFibGUsICAg
ICAgICB3ZWJBc3NlbWJseVRhYmxlLCAgICAgICAgd2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIEpT
V2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIFRhYmxlLCAgICAgICAgb2JqZWN0LCB0eXBlRXhwb3Nl
ZEJ5RGVmYXVsdCkKKyAgICBtYWNybyhXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciwgd2ViQXNzZW1i
bHlSdW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVudGltZUVycm9yLCBFcnJvckluc3RhbmNlLCAg
ICAgICAgICAgICBSdW50aW1lRXJyb3IsIGVycm9yLCAgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwK
KyAgICBtYWNybyhXZWJBc3NlbWJseVRhYmxlLCAgICAgICAgd2ViQXNzZW1ibHlUYWJsZSwgICAg
ICAgIHdlYkFzc2VtYmx5VGFibGUsICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUsICAgICAgICBU
YWJsZSwgICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKKyAgICBtYWNybyhX
ZWJBc3NlbWJseVRhZywgICAgICAgICAgd2ViQXNzZW1ibHlUYWcsICAgICAgICAgIHdlYkFzc2Vt
Ymx5VGFnLCAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFnLCAgICAgICAgICBUYWcsICAgICAgICAg
IG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIAogI2Vsc2UKICNkZWZpbmUgRk9SX0VBQ0hf
V0VCQVNTRU1CTFlfQ09OU1RSVUNUT1JfVFlQRShtYWNybykKICNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaApp
bmRleCA1NDAxZmYzODMxZDg2NTA3MTU1YjE5MzI0YmUzOTdmZmJkMzNkOTM0Li5lMDc4MzNmNDdh
YmMxYTRiMDkyNDIxNWM1NzU3YmY2ZWJkZTU2NDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKQEAgLTU0Myw2ICs1NDMsNyBAQCBib29sIGNhblVzZVdl
YkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoQm9vbCwgdXNlVGVtcG9yYWwsIGZhbHNlLCBO
b3JtYWwsICJFeHBvc2UgdGhlIFRlbXBvcmFsIG9iamVjdC4iKSBcCiAgICAgdihCb29sLCB1c2VX
ZWJBc3NlbWJseVRocmVhZGluZywgdHJ1ZSwgTm9ybWFsLCAiQWxsb3cgaW5zdHJ1Y3Rpb25zIGZy
b20gdGhlIHdhc20gdGhyZWFkaW5nIHNwZWMuIikgXAogICAgIHYoQm9vbCwgdXNlV2ViQXNzZW1i
bHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNlcywgZmFsc2UsIE5vcm1hbCwgIkFsbG93IGZ1bmN0aW9u
IHR5cGVzIGZyb20gdGhlIHdhc20gdHlwZWQgZnVuY3Rpb24gcmVmZXJlbmNlcyBzcGVjLiIpIFwK
KyAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucywgdHJ1ZSwgTm9ybWFsLCAiQWxs
b3cgdGhlIG5ldyBzZWN0aW9uIGFuZCBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgd2FzbSBleGNlcHRp
b24gaGFuZGxpbmcgc3BlYy4iKSBcCiAKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggOTk2YTA2ZGFhYmE4MmNjZWZiNDNkZjNm
NjVmMTMxZTZmZGU2ZWUwNy4uMzhlOTUxMjliYTlmMDIxMTBhMWM0M2UwNTFjNGFhNjc4YzZmZDBk
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMTI5LDExICsxMjksMTMg
QEAKICNpbmNsdWRlICJKU1dlYWtPYmplY3RSZWYuaCIKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlHbG9iYWwuaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVt
b3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRl
ICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk1pbmlt
dW1SZXNlcnZlZFpvbmVTaXplLmgiCkBAIC0zMzQsNiArMzM2LDcgQEAgVk06OlZNKFZNVHlwZSB2
bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlLCBXVEY6OlJ1bkxvb3AqIHJ1bkxvb3AsIGJvb2wqIHN1
Y2Nlc3MpCiAgICAgLCBpbnRsU2VnbWVudHNIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpj
cmVhdGU8SW50bFNlZ21lbnRzPigpKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAsIHdl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s+KCkpCisgICAgLCB3ZWJBc3NlbWJseUV4Y2VwdGlvbkhlYXBD
ZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uPigp
KQogICAgICwgd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6
OmNyZWF0ZTxXZWJBc3NlbWJseUZ1bmN0aW9uPigpKQogICAgICwgd2ViQXNzZW1ibHlHbG9iYWxI
ZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseUdsb2JhbD4o
KSkKICAgICAsIHdlYkFzc2VtYmx5SW5zdGFuY2VIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBl
OjpjcmVhdGU8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpKQpAQCAtMzQxLDYgKzM0NCw3IEBAIFZN
OjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSwgV1RGOjpSdW5Mb29wKiBydW5M
b29wLCBib29sKiBzdWNjZXNzKQogICAgICwgd2ViQXNzZW1ibHlNb2R1bGVIZWFwQ2VsbFR5cGUo
SXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseU1vZHVsZT4oKSkKICAgICAsIHdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRl
PFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkPigpKQogICAgICwgd2ViQXNzZW1ibHlUYWJsZUhlYXBD
ZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5VGFibGU+KCkpCisg
ICAgLCB3ZWJBc3NlbWJseVRhZ0hlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxK
U1dlYkFzc2VtYmx5VGFnPigpKQogI2VuZGlmCiAgICAgLCBwcmltaXRpdmVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlKCJQcmltaXRpdmUgR2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5
SGVhcENlbGxUeXBlLmdldCgpLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkgLy8g
SGFzaDoweDNlN2NkNzYyCiAgICAgLCBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiSlNW
YWx1ZSBHaWdhY2FnZSBBdXhpbGlhcnkiLCBoZWFwLCBhdXhpbGlhcnlIZWFwQ2VsbFR5cGUuZ2V0
KCksIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkgLy8gSGFzaDoweDI0MWU5NDYKQEAg
LTE2MjksNiArMTYzMyw3IEBAIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhpbnRsU2VnbWVudHNTcGFjZSwgaW50bFNlZ21lbnRzSGVhcENlbGxUCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpzVG9X
YXNtSUNDYWxsZWVTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUb1dhc21JQ0NhbGxl
ZSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUNv
ZGVCbG9ja1NwYWNlLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5nZXQoKSwgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jaykgLy8gSGFzaDoweDlhZDk5NWNkCitEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlFeGNlcHRpb25TcGFjZSwgd2ViQXNz
ZW1ibHlFeGNlcHRpb25IZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24p
CiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlGdW5j
dGlvblNwYWNlLCB3ZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmdldCgpLCBXZWJBc3Nl
bWJseUZ1bmN0aW9uKSAvLyBIYXNoOjB4OGI3YzMyZGIKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUdsb2JhbFNwYWNlLCB3ZWJBc3NlbWJseUdsb2Jh
bEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNXZWJBc3NlbWJseUdsb2JhbCkKIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UsIHdlYkFz
c2VtYmx5SW5zdGFuY2VIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkK
QEAgLTE2MzYsNiArMTY0MSw3IEBAIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyh3ZWJBc3NlbWJseU1lbW9yeVNwYWNlLCB3ZWJBc3NlbWJseU1lbW9yCiBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlNb2R1bGVTcGFjZSwgd2Vi
QXNzZW1ibHlNb2R1bGVIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlNb2R1bGUpCiBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmRTcGFjZSwgd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRIZWFwQ2VsbFR5cGUuZ2V0KCksIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKHdlYkFzc2VtYmx5VGFibGVTcGFjZSwgd2ViQXNzZW1ibHlUYWJsZUhlYXBDZWxsVHlw
ZS5nZXQoKSwgSlNXZWJBc3NlbWJseVRhYmxlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5VGFnU3BhY2UsIHdlYkFzc2VtYmx5VGFnSGVhcENlbGxU
eXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5VGFnKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3BhY2UsIGNlbGxIZWFwQ2Vs
bFR5cGUuZ2V0KCksIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKSAvLyBIYXNoOjB4ZDRhNWZm
MDEKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA3YTU4YjI3OWU2
NzBhODQwM2QxZjM5NDEyMzU3ZDVlNzcxMTNmNTc4Li5hYTg5YjI4YWRlMmYyNWI2Y2M4NDQwZDYx
NGJjOTQ3YWUzYmE0Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTI5LDYg
KzI5LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKKyNpbmNsdWRl
ICJDYWxsZWVCaXRzLmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2lu
Y2x1ZGUgIkNvbXBsZXRlU3Vic3BhY2UuaCIKICNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgi
CkBAIC00NTAsNiArNDUxLDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFw
Q2VsbFR5cGU+IGludGxTZWdtZW50c0hlYXBDZWxsVHlwZTsKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlDb2Rl
QmxvY2tIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4g
d2ViQXNzZW1ibHlFeGNlcHRpb25IZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElz
b0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUdsb2JhbEhlYXBDZWxsVHlw
ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUluc3Rh
bmNlSGVhcENlbGxUeXBlOwpAQCAtNDU3LDYgKzQ1OSw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseU1vZHVsZUhlYXBDZWxsVHlwZTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseU1vZHVsZVJl
Y29yZEhlYXBDZWxsVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3
ZWJBc3NlbWJseVRhYmxlSGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFw
Q2VsbFR5cGU+IHdlYkFzc2VtYmx5VGFnSGVhcENlbGxUeXBlOwogI2VuZGlmCiAKICNpZiBFTkFC
TEUoSklUKQpAQCAtNjI2LDYgKzYyOSw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1RvV2FzbUlDQ2Fs
bGVlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3Nl
bWJseUNvZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIod2ViQXNzZW1ibHlFeGNlcHRpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5R2xvYmFsU3BhY2UpCiAgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UpCkBA
IC02MzMsNiArNjM3LDcgQEAgcHVibGljOgogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIod2ViQXNzZW1ibHlNb2R1bGVTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3BhY2UpCiAgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVRhYmxlU3BhY2UpCisgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVRhZ1NwYWNlKQog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb25TcGFjZSkKICNlbmRpZgogCkBAIC04OTYsNiArOTAxLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWTSwgY2FsbEZyYW1lRm9yQ2F0Y2gpOwogICAg
IH0KIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGNhbGxlZUZvcldhc21DYXRj
aCk7CisgICAgfQorCiAgICAgc3RhdGljIHB0cmRpZmZfdCB0b3BFbnRyeUZyYW1lT2Zmc2V0KCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcEVudHJ5RnJhbWUp
OwpAQCAtOTkwLDYgKzEwMDAsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgdmFyYXJnc0xlbmd0
aDsKICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZVJldHVyblZhbHVlOwogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lRm9yQ2F0Y2g7CisgICAgQ2FsbGVlQml0cyBjYWxsZWVGb3JXYXNtQ2F0Y2g7
CiAgICAgdm9pZCogdGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIHRhcmdldEludGVycHJldGVyUENGb3JUaHJvdzsKICAgICB1aW50MzJfdCBvc3JFeGl0SW5k
ZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5l
cmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9y
LmNwcAppbmRleCBmOWMyOTQ2MDA2MTg3M2QwMDQ0OThhODAwNDQ2NjJjZTIxN2Y2YmU0Li43OTI4
MmI3N2U3ODYxNjFkNWRmMDhhNmRmODFhNDJmZWUxMTgzOWZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTE0Nyw3ICsxNDcs
MTIgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNJZihjb25z
dCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBC
bG9ja1R5cGU6OklmOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzVHJ5KGNvbnN0IENvbnRyb2xE
YXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6
VHJ5OyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNv
bnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpDYXRjaDsg
fQorICAgICAgICBzdGF0aWMgYm9vbCBpc0FueUNhdGNoKGNvbnN0IENvbnRyb2xEYXRhJiBjb250
cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2g7IH0K
ICAgICAgICAgc3RhdGljIGJvb2wgaXNUb3BMZXZlbChjb25zdCBDb250cm9sRGF0YSYgY29udHJv
bCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsOyB9
CisgICAgICAgIHN0YXRpYyBib29sIGlzTG9vcChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkg
eyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3A7IH0KKyAgICAg
ICAgc3RhdGljIGJvb2wgaXNCbG9jayhjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1
cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkJsb2NrOyB9CiAKICAgICAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIHsKQEAgLTE2NCw2ICsx
NjksMTIgQEAgcHVibGljOgogICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRvcExldmVsOgog
ICAgICAgICAgICAgICAgIG91dC5wcmludCgiVG9wTGV2ZWw6ICIpOwogICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRyeToKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoIlRyeTogIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEJsb2NrVHlwZTo6Q2F0Y2g6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJDYXRj
aDogIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBvdXQucHJpbnQoIkNvbnRpbnVhdGlvbjogIiwgKmNvbnRpbnVhdGlvbiwgIiwgU3BlY2lhbDog
Iik7CiAgICAgICAgICAgICBpZiAoc3BlY2lhbCkKQEAgLTMxNCw2ICszMjUsMTYgQEAgcHVibGlj
OgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERh
dGEmLCBjb25zdCBTdGFjayYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3Np
bmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25J
bmRleCwgY29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3Qm
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFj
aGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xU
eXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhdGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShDb250cm9s
VHlwZSYsIENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUaHJvdyh1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXRocm93KHVuc2lnbmVkLCBD
b250cm9sVHlwZSYpOworCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
UmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRh
JiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29u
dHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsK
QEAgLTI5ODIsNiArMzAwMyw2MCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJl
YWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7
IH07CiB9CiAKKy8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgV2FzbSBleGNlcHRpb25zIGluIHRo
ZSBBaXIgZ2VuZXJhdG9yCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMxMjExCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0
YWNrJiwgQ29udHJvbFR5cGUmLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCwgY29u
c3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUo
dW5zaWduZWQsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsKFN0YWNr
JiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9Owor
fQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRy
b2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRGVs
ZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIFN0YWNrJikgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIFVOVVNFRF9QQVJBTShleGNlcHRpb25JbmRleCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5
cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKwogYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBTdGFj
ayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ2FsbEluZm9ybWF0aW9u
IHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZv
cigqZGF0YS5zaWduYXR1cmUoKSwgQ2FsbFJvbGU6OkNhbGxlZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggMDgxY2MyYjI1NWVm
ZDk1NTcxYzNlNTkxMWU0Mzc4MGI3OTRjYzNhMC4uNTA3ZTg5MzE0NjNlYThmNjY4OWU5MjJhMGZh
ZDM3OGJmN2M5MDc4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcApAQCAtNDgsNiArNDgsOCBAQAogI2luY2x1ZGUgIkIzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2lu
Y2x1ZGUgIldhc21Db250ZXh0SW5saW5lcy5oIgpAQCAtODMsMTggKzg1LDMzIEBAIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiB9CiAKK2NsYXNzIEIzSVJHZW5lcmF0
b3I7CitzdHJ1Y3QgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7CisgICAgdm9pZCBnZW5lcmF0
ZShDQ2FsbEhlbHBlcnMmLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiwgQjNJ
UkdlbmVyYXRvciopIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX2lu
dmFsaWRDYWxsU2l0ZUluZGV4ID0gIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsKKworICAgIHVuc2lnbmVkIG1fY2FsbFNpdGVJbmRleCB7c19pbnZhbGlkQ2FsbFNpdGVJbmRl
eCB9OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworfTsKKwogY2xhc3MgQjNJUkdlbmVyYXRvciB7
CiBwdWJsaWM6Ci0gICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSBWYWx1ZSo7CisgICAgdXNpbmcg
RXhwcmVzc2lvblR5cGUgPSBWYXJpYWJsZSo7CiAgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3Rv
cjxFeHByZXNzaW9uVHlwZSwgOD47CiAKICAgICBzdHJ1Y3QgQ29udHJvbERhdGEgewotICAgICAg
ICBDb250cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIEJsb2NrU2lnbmF0
dXJlIHNpZ25hdHVyZSwgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwg
QmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIpCisgICAgICAgIENvbnRyb2xEYXRhKFByb2Nl
ZHVyZSYgcHJvYywgT3JpZ2luIG9yaWdpbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBCbG9j
a1R5cGUgdHlwZSwgdW5zaWduZWQgc3RhY2tTaXplLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24s
IEJhc2ljQmxvY2sqIHNwZWNpYWwgPSBudWxscHRyKQogICAgICAgICAgICAgOiBjb250cm9sQmxv
Y2tUeXBlKHR5cGUpCiAgICAgICAgICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKKyAgICAg
ICAgICAgICwgbV9zdGFja1NpemUoc3RhY2tTaXplKQogICAgICAgICAgICAgLCBjb250aW51YXRp
b24oY29udGludWF0aW9uKQogICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwpCiAgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlICE9IEJsb2NrVHlwZTo6VHJ5ICYmIHR5cGUgIT0g
QmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICBpZiAodHlwZSAhPSBCbG9ja1R5cGU6OlRv
cExldmVsKQorICAgICAgICAgICAgICAgIG1fc3RhY2tTaXplIC09IHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOworCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBCbG9ja1R5cGU6Okxvb3ApIHsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5h
ZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJlLT5hcmd1bWVudChpKSksIG9yaWdpbikp
OwpAQCAtMTA0LDEyICsxMjEsMzcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKKyAgICAgICAgQ29udHJvbERhdGEoUHJvY2VkdXJlJiBwcm9jLCBPcmlnaW4gb3JpZ2luLCBC
bG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIEJsb2NrVHlwZSB0eXBlLCB1bnNpZ25lZCBzdGFja1Np
emUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgdW5zaWduZWQgdHJ5U3RhcnQsIHVuc2lnbmVk
IHRyeURlcHRoKQorICAgICAgICAgICAgOiBjb250cm9sQmxvY2tUeXBlKHR5cGUpCisgICAgICAg
ICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKKyAgICAgICAgICAgICwgbV9zdGFja1NpemUo
c3RhY2tTaXplKQorICAgICAgICAgICAgLCBjb250aW51YXRpb24oY29udGludWF0aW9uKQorICAg
ICAgICAgICAgLCBzcGVjaWFsKG51bGxwdHIpCisgICAgICAgICAgICAsIG1fdHJ5U3RhcnQodHJ5
U3RhcnQpCisgICAgICAgICAgICAsIG1fdHJ5RGVwdGgodHJ5RGVwdGgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFVOVVNFRF9QQVJBTShwcm9jKTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShv
cmlnaW4pOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+
cmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICAgICAgICAgIHBoaXMuYXBwZW5kKHByb2MuYWRk
PFZhbHVlPihQaGksIHRvQjNUeXBlKHNpZ25hdHVyZS0+cmV0dXJuVHlwZShpKSksIG9yaWdpbikp
OworICAgICAgICB9CisKICAgICAgICAgQ29udHJvbERhdGEoKQogICAgICAgICB7CiAgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0lmKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9s
KSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWY7IH0KKyAgICAg
ICAgc3RhdGljIGJvb2wgaXNUcnkoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJu
IGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUcnk7IH0KKyAgICAgICAgc3RhdGlj
IGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29u
dHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoOyB9CiAgICAgICAgIHN0YXRpYyBi
b29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRy
b2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbDsgfQorICAgICAgICBzdGF0aWMg
Ym9vbCBpc0xvb3AoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wu
YmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlz
QmxvY2soY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tU
eXBlKCkgPT0gQmxvY2tUeXBlOjpCbG9jazsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNo
KGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udHJvbC5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5cGU6OkNhdGNoKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBjb250cm9sLmNhdGNoS2luZCgpID09
IENhdGNoS2luZDo6Q2F0Y2g7CisgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgewpAQCAtMTI2LDYgKzE2OCwxMiBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6VG9wTGV2ZWw6CiAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCJUb3BMZXZlbDogIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEJsb2NrVHlwZTo6VHJ5OgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVHJ5
OiAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBl
OjpDYXRjaDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkNhdGNoOiAiKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5wcmludCgiQ29u
dGludWF0aW9uOiAiLCAqY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKICAgICAgICAgICAg
IGlmIChzcGVjaWFsKQpAQCAtMTU0LDYgKzIwMiwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBz
cGVjaWFsID0gbnVsbHB0cjsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgY29udmVydFRyeVRv
Q2F0Y2godW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVmFyaWFibGUqIGV4Y2VwdGlvbikK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6
VHJ5KTsKKyAgICAgICAgICAgIGNvbnRyb2xCbG9ja1R5cGUgPSBCbG9ja1R5cGU6OkNhdGNoOwor
ICAgICAgICAgICAgbV9jYXRjaEtpbmQgPSBDYXRjaEtpbmQ6OkNhdGNoOworICAgICAgICAgICAg
bV90cnlFbmQgPSB0cnlFbmRDYWxsU2l0ZUluZGV4OworICAgICAgICAgICAgbV9leGNlcHRpb24g
PSBleGNlcHRpb247CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNvbnZlcnRUcnlUb0NhdGNo
QWxsKHVuc2lnbmVkIHRyeUVuZENhbGxTaXRlSW5kZXgsIFZhcmlhYmxlKiBleGNlcHRpb24pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRy
eSk7CisgICAgICAgICAgICBjb250cm9sQmxvY2tUeXBlID0gQmxvY2tUeXBlOjpDYXRjaDsKKyAg
ICAgICAgICAgIG1fY2F0Y2hLaW5kID0gQ2F0Y2hLaW5kOjpDYXRjaEFsbDsKKyAgICAgICAgICAg
IG1fdHJ5RW5kID0gdHJ5RW5kQ2FsbFNpdGVJbmRleDsKKyAgICAgICAgICAgIG1fZXhjZXB0aW9u
ID0gZXhjZXB0aW9uOworICAgICAgICB9CisKICAgICAgICAgU2lnbmF0dXJlQXJnQ291bnQgYnJh
bmNoVGFyZ2V0QXJpdHkoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoYmxvY2tU
eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQpAQCAtMTY5LDEzICsyMzUsNTMgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpOwogICAgICAgICB9
CiAKKyAgICAgICAgdW5zaWduZWQgdHJ5U3RhcnQoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBjb250cm9s
QmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fdHJ5
U3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlFbmQoKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6
OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeUVuZDsKKyAgICAgICAgfQorCisgICAg
ICAgIHVuc2lnbmVkIHRyeURlcHRoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlw
ZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeURlcHRoOwor
ICAgICAgICB9CisKKyAgICAgICAgQ2F0Y2hLaW5kIGNhdGNoS2luZCgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0
Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fY2F0Y2hLaW5kOworICAgICAgICB9CisKKyAgICAg
ICAgVmFyaWFibGUqIGV4Y2VwdGlvbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAg
cmV0dXJuIG1fZXhjZXB0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc3RhY2tT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1NpemU7IH0KKwogICAgIHByaXZhdGU6CisgICAg
ICAgIC8vIEZJWE1FOiBDb21wcmVzcyBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBmaWVsZHMg
dXNpbmcgYW4gdW5pb24KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMTIxMgogICAgICAgICBmcmllbmQgY2xhc3MgQjNJUkdlbmVyYXRvcjsKICAg
ICAgICAgQmxvY2tUeXBlIGNvbnRyb2xCbG9ja1R5cGU7CiAgICAgICAgIEJsb2NrU2lnbmF0dXJl
IG1fc2lnbmF0dXJlOworICAgICAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKICAgICAgICAgQmFz
aWNCbG9jayogY29udGludWF0aW9uOwogICAgICAgICBCYXNpY0Jsb2NrKiBzcGVjaWFsOwotICAg
ICAgICBSZXN1bHRMaXN0IHBoaXM7CisgICAgICAgIFZlY3RvcjxWYWx1ZSo+IHBoaXM7CisgICAg
ICAgIHVuc2lnbmVkIG1fdHJ5U3RhcnQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5RW5kOworICAg
ICAgICB1bnNpZ25lZCBtX3RyeURlcHRoOworICAgICAgICBDYXRjaEtpbmQgbV9jYXRjaEtpbmQ7
CisgICAgICAgIFZhcmlhYmxlKiBtX2V4Y2VwdGlvbjsKICAgICB9OwogCiAgICAgdXNpbmcgQ29u
dHJvbFR5cGUgPSBDb250cm9sRGF0YTsKQEAgLTI3Myw2ICszNzksMTYgQEAgcHVibGljOgogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBj
b25zdCBTdGFjayYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVs
c2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFj
aywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFjaGFibGUo
dW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwg
UmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENh
dGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShDb250cm9sVHlwZSYs
IENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
RGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9s
VHlwZSYpOworCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJu
KGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhw
cmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERh
dGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKQEAgLTI4
NiwyMCArNDAyLDM2IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJl
JiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbFJlZihjb25zdCBTaWdu
YXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRz
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgp
OwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRJbmRpcmVjdENhbGwo
VmFsdWUqIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlLCBjb25zdCBT
aWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdEluZGlyZWN0Q2FsbChWYWx1
ZSogY2FsbGVlSW5zdGFuY2UsIFZhbHVlKiBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmLCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7CiAgICAgQjM6OlZhbHVl
KiBjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiwgT3JpZ2luLCBjb25zdCBTaWduYXR1
cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBjb25zdCBTY29wZWRMYW1iZGE8dm9p
ZChQYXRjaHBvaW50VmFsdWUqKT4mIHBhdGNocG9pbnRGdW5jdG9yKTsKIAogICAgIHZvaWQgZHVt
cChjb25zdCBDb250cm9sU3RhY2smLCBjb25zdCBTdGFjayogZXhwcmVzc2lvblN0YWNrKTsKICAg
ICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiogcGFyc2VyKSB7
IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2Fscygp
IHsgfQotICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IH0KKyAgICB2b2lkIGRpZFBv
cFZhbHVlRnJvbVN0YWNrKCkgeyAtLW1fc3RhY2tTaXplOyB9CiAKICAgICBWYWx1ZSogY29uc3Rh
bnQoQjM6OlR5cGUsIHVpbnQ2NF90IGJpdHMsIHN0ZDo6b3B0aW9uYWw8T3JpZ2luPiA9IHN0ZDo6
bnVsbG9wdCk7CiAgICAgVmFsdWUqIGZyYW1lUG9pbnRlcigpOworICAgIHZvaWQgaW5zZXJ0RW50
cnlTd2l0Y2goKTsKICAgICB2b2lkIGluc2VydENvbnN0YW50cygpOwogCiAgICAgQjM6OlR5cGUg
dG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUpOwogCisgICAgdm9pZCBhZGRTdGFja01hcCh1
bnNpZ25lZCBjYWxsU2l0ZUluZGV4LCBTdGFja01hcCYmIHN0YWNrbWFwKQorICAgIHsKKyAgICAg
ICAgbV9zdGFja21hcHMuYWRkKENhbGxTaXRlSW5kZXgoY2FsbFNpdGVJbmRleCksIFdURk1vdmUo
c3RhY2ttYXApKTsKKyAgICB9CisKKyAgICBTdGFja01hcHMmJiB0YWtlU3RhY2ttYXBzKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fc3RhY2ttYXBzKTsKKyAgICB9CisKKyAgICBW
ZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiB0YWtlRXhjZXB0aW9uSGFuZGxlcnMoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9leGNlcHRpb25IYW5kbGVycyk7CisgICAgfQor
CiBwcml2YXRlOgogICAgIHZvaWQgZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVycyYsIEV4
Y2VwdGlvblR5cGUpOwogCkBAIC0zMDcsMjggKzQzOSwzMyBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgsIGNvbnN0IFN0YWNrJiBlbmNs
b3NpbmdTdGFjaywgY29uc3QgU3RhY2smIG5ld1N0YWNrKTsKIAogICAgIHZvaWQgZW1pdFdyaXRl
QmFycmllckZvckpTV3JhcHBlcigpOwotICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFBy
ZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWlu
dDMyX3Qgc2l6ZU9mT3ApOworICAgIFZhbHVlKiBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihW
YWx1ZSogcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CiAgICAg
QjM6OktpbmQgbWVtb3J5S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9wKTsKLSAgICBFeHByZXNzaW9u
VHlwZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQz
Ml90IG9mZnNldCk7Ci0gICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7Cisg
ICAgVmFsdWUqIGVtaXRMb2FkT3AoTG9hZE9wVHlwZSwgVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90
IG9mZnNldCk7CisgICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgVmFsdWUqIHBvaW50
ZXIsIFZhbHVlKiwgdWludDMyX3Qgb2Zmc2V0KTsKIAotICAgIEV4cHJlc3Npb25UeXBlIHNhbml0
aXplQXRvbWljUmVzdWx0KEV4dEF0b21pY09wVHlwZSwgVHlwZSwgRXhwcmVzc2lvblR5cGUgcmVz
dWx0KTsKLSAgICBFeHByZXNzaW9uVHlwZSBlbWl0QXRvbWljTG9hZE9wKEV4dEF0b21pY09wVHlw
ZSwgVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KTsKLSAgICB2
b2lkIGVtaXRBdG9taWNTdG9yZU9wKEV4dEF0b21pY09wVHlwZSwgVHlwZSwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7Ci0gICAg
RXhwcmVzc2lvblR5cGUgZW1pdEF0b21pY0JpbmFyeVJNV09wKEV4dEF0b21pY09wVHlwZSwgVHlw
ZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90
IG9mZnNldCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdEF0b21pY0NvbXBhcmVFeGNoYW5nZShF
eHRBdG9taWNPcFR5cGUsIFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25U
eXBlIGV4cGVjdGVkLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAg
ICBWYWx1ZSogc2FuaXRpemVBdG9taWNSZXN1bHQoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1
ZSogcmVzdWx0KTsKKyAgICBWYWx1ZSogZW1pdEF0b21pY0xvYWRPcChFeHRBdG9taWNPcFR5cGUs
IFR5cGUsIFZhbHVlKiBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOworICAgIHZvaWQgZW1pdEF0
b21pY1N0b3JlT3AoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUq
LCB1aW50MzJfdCBvZmZzZXQpOworICAgIFZhbHVlKiBlbWl0QXRvbWljQmluYXJ5Uk1XT3AoRXh0
QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUqLCB1aW50MzJfdCBvZmZz
ZXQpOworICAgIFZhbHVlKiBlbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0b21pY09wVHlw
ZSwgVHlwZSwgVmFsdWUqIHBvaW50ZXIsIFZhbHVlKiBleHBlY3RlZCwgVmFsdWUqLCB1aW50MzJf
dCBvZmZzZXQpOwogCi0gICAgdm9pZCB1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSBwaGksIGNv
bnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSk7Ci0gICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9j
ayhjb25zdCBTdGFjayYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHN0YWNrKTsKKyAg
ICB2b2lkIHVuaWZ5KFZhbHVlKiBwaGksIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSk7Cisg
ICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYgcmVzdWx0U3RhY2ssIGNv
bnN0IENvbnRyb2xEYXRhJiBibG9jayk7CiAKLSAgICB2b2lkIGVtaXRDaGVja3NGb3JNb2RPckRp
dihCMzo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCk7
CisgICAgdm9pZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSwgVmFsdWUqIGxlZnQs
IFZhbHVlKiByaWdodCk7CiAKLSAgICBpbnQzMl90IFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBv
aW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiwgdWludDMyX3QpOwotICAgIEV4cHJlc3Np
b25UeXBlIFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWlj
T3BzKEV4dEF0b21pY09wVHlwZSwgRXhwcmVzc2lvblR5cGUsIHVpbnQzMl90KTsKKyAgICBpbnQz
Ml90IFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KFZhbHVlKiYsIHVp
bnQzMl90KTsKKyAgICBWYWx1ZSogV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNP
ZmZzZXRGb3JBdG9taWNPcHMoRXh0QXRvbWljT3BUeXBlLCBWYWx1ZSosIHVpbnQzMl90KTsKIAog
ICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiwgQmFzaWNCbG9j
ayosIFZhbHVlKik7CiAgICAgZW51bSBjbGFzcyBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCB7IE5v
LCBZZXMgfTsKLSAgICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVD
YWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFZhbHVlKiBpbnN0YW5j
ZSwgUHJvY2VkdXJlJiwgQmFzaWNCbG9jayopOworICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5
R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9ybWF0
aW9uJiwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKiwgYm9vbCByZXN0
b3JlSW5zdGFuY2UgPSB0cnVlKTsKKworICAgIFZhbHVlKiBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIo
dW5zaWduZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBwb2ludGVyLCBCMzo6VHlwZSk7CisgICAg
dm9pZCBjb25uZWN0Q29udHJvbEVudHJ5KHVuc2lnbmVkJiBpbmRleEluQnVmZmVyLCBWYWx1ZSog
cG9pbnRlciwgQ29udHJvbERhdGEmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBDb250cm9sRGF0
YSYgY3VycmVudERhdGEsIGJvb2wgZmlsbExvb3BQaGlzID0gZmFsc2UpOworICAgIFZhbHVlKiBl
bWl0Q2F0Y2hJbXBsKENhdGNoS2luZCwgQ29udHJvbFR5cGUmLCB1bnNpZ25lZCBleGNlcHRpb25J
bmRleCA9IDApOworICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgcHJlcGFyZVBhdGNocG9p
bnRGb3JFeGNlcHRpb25zKEJhc2ljQmxvY2sqLCBQYXRjaHBvaW50VmFsdWUqKTsKIAogICAgIE9y
aWdpbiBvcmlnaW4oKTsKIApAQCAtMzM5LDYgKzQ3Niw2MiBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gbV9vdXRlckxvb3BzLmxhc3QoKTsKICAgICB9CiAKKyAgICBFeHByZXNzaW9uVHlwZSBw
dXNoKFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBwdXNoKHRvQjNUeXBlKHR5cGUp
KTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uVHlwZSBwdXNoKEIzOjpUeXBlIHR5cGUpCisgICAg
eworICAgICAgICArK21fc3RhY2tTaXplOworICAgICAgICBpZiAobV9zdGFja1NpemUgPiBtX21h
eFN0YWNrU2l6ZSkgeworICAgICAgICAgICAgbV9tYXhTdGFja1NpemUgPSBtX3N0YWNrU2l6ZTsK
KyAgICAgICAgICAgIFZhcmlhYmxlKiB2YXIgPSBtX3Byb2MuYWRkVmFyaWFibGUodHlwZSk7Cisg
ICAgICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXIpOworICAgICAgICAgICAgcmV0dXJuIHZhcjsK
KyAgICAgICAgfQorCisgICAgICAgIFZhcmlhYmxlKiB2YXIgPSBtX3N0YWNrW21fc3RhY2tTaXpl
IC0gMV07CisgICAgICAgIGlmICh2YXItPnR5cGUoKSA9PSB0eXBlKQorICAgICAgICAgICAgcmV0
dXJuIHZhcjsKKworICAgICAgICB2YXIgPSBtX3Byb2MuYWRkVmFyaWFibGUodHlwZSk7CisgICAg
ICAgIG1fc3RhY2tbbV9zdGFja1NpemUgLSAxXSA9IHZhcjsKKyAgICAgICAgcmV0dXJuIHZhcjsK
KyAgICB9CisKKyAgICBFeHByZXNzaW9uVHlwZSBwdXNoKFZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIFZhcmlhYmxlKiB2YXIgPSBwdXNoKHZhbHVlLT50eXBlKCkpOworICAgICAgICBzZXQo
dmFyLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB2YXI7CisgICAgfQorCisgICAgVmFsdWUqIGdl
dChCYXNpY0Jsb2NrKiBibG9jaywgVmFyaWFibGUqIHZhcmlhYmxlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBv
cmlnaW4oKSwgdmFyaWFibGUpOworICAgIH0KKworICAgIFZhbHVlKiBnZXQoVmFyaWFibGUqIHZh
cmlhYmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldChtX2N1cnJlbnRCbG9jaywgdmFyaWFi
bGUpOworICAgIH0KKworICAgIFZhbHVlKiBzZXQoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxl
KiBkc3QsIFZhbHVlKiBzcmMpCisgICAgeworICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5l
dzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIG9yaWdpbigpLCBkc3QsIHNyYyk7Cisg
ICAgfQorCisgICAgVmFsdWUqIHNldChWYXJpYWJsZSogZHN0LCBWYWx1ZSogc3JjKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHNldChtX2N1cnJlbnRCbG9jaywgZHN0LCBzcmMpOworICAgIH0KKwor
ICAgIFZhbHVlKiBzZXQoVmFyaWFibGUqIGRzdCwgVmFyaWFibGUqIHNyYykKKyAgICB7CisgICAg
ICAgIHJldHVybiBzZXQoZHN0LCBnZXQoc3JjKSk7CisgICAgfQorCiAgICAgRnVuY3Rpb25QYXJz
ZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OwogICAgIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBtX2luZm87CiAgICAgY29uc3QgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwpAQCAtMzQ4LDEwICs1NDEsMTIgQEAgcHJpdmF0ZToK
ICAgICBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRyIH07CiAKICAgICBQcm9jZWR1cmUm
IG1fcHJvYzsKLSAgICBCYXNpY0Jsb2NrKiBtX3Jvb3RCbG9jayB7IG51bGxwdHIgfTsKKyAgICBW
ZWN0b3I8QmFzaWNCbG9jayo+IG1fcm9vdEJsb2NrczsKKyAgICBCYXNpY0Jsb2NrKiBtX3RvcExl
dmVsQmxvY2s7CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAg
ICAgVmVjdG9yPHVpbnQzMl90PiBtX291dGVyTG9vcHM7CiAgICAgVmVjdG9yPFZhcmlhYmxlKj4g
bV9sb2NhbHM7CisgICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9zdGFjazsKICAgICBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3Qg
ZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNo
b3VsZCBiZSBwYXRjaGVkIHdpdGguCiAgICAgdW5zaWduZWQmIG1fb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZTsKICAgICBIYXNoTWFwPFZhbHVlS2V5LCBWYWx1ZSo+IG1fY29uc3RhbnRQb29sOwpA
QCAtMzY1LDYgKzU2MCw3IEBAIHByaXZhdGU6CiAKICAgICBWYWx1ZSogbV9pbnN0YW5jZVZhbHVl
IHsgbnVsbHB0ciB9OyAvLyBBbHdheXMgdXNlIHRoZSBhY2Nlc3NvciBiZWxvdyB0byBlbnN1cmUg
dGhlIGluc3RhbmNlIHZhbHVlIGlzIG1hdGVyaWFsaXplZCB3aGVuIHVzZWQuCiAgICAgYm9vbCBt
X3VzZXNJbnN0YW5jZVZhbHVlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzQ2F0Y2ggeyBmYWxz
ZSB9OwogICAgIFZhbHVlKiBpbnN0YW5jZVZhbHVlKCkKICAgICB7CiAgICAgICAgIG1fdXNlc0lu
c3RhbmNlVmFsdWUgPSB0cnVlOwpAQCAtMzczLDEwICs1NjksMjkgQEAgcHJpdmF0ZToKIAogICAg
IHVpbnQzMl90IG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1f
bnVtSW1wb3J0RnVuY3Rpb25zOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV90cnlEZXB0aCB7
IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX2NhbGxTaXRlSW5kZXggeyAwIH07CisgICAg
Q2hlY2tlZDx1bnNpZ25lZD4gbV9zdGFja1NpemUgeyAwIH07CisgICAgQ2hlY2tlZDx1bnNpZ25l
ZD4gbV9tYXhTdGFja1NpemUgeyAwIH07CisgICAgU3RhY2tNYXBzIG1fc3RhY2ttYXBzOworICAg
IFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwogfTsKIAor
dm9pZCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCBCM0lSR2VuZXJh
dG9yKiBnZW5lcmF0b3IpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FsbFNpdGVJbmRleCA9PSBzX2lu
dmFsaWRDYWxsU2l0ZUluZGV4KQorICAgICAgICByZXR1cm47CisKKyAgICBTdGFja01hcCB2YWx1
ZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vZmZzZXQ7IGkgPCBwYXJhbXMudmFsdWUoKS0+
bnVtQ2hpbGRyZW4oKTsgKytpKQorICAgICAgICB2YWx1ZXMuY29uc3RydWN0QW5kQXBwZW5kKHBh
cmFtc1tpXSwgcGFyYW1zLnZhbHVlKCktPmNoaWxkKGkpLT50eXBlKCkpOworICAgIGdlbmVyYXRv
ci0+YWRkU3RhY2tNYXAobV9jYWxsU2l0ZUluZGV4LCBXVEZNb3ZlKHZhbHVlcykpOworICAgIGpp
dC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fY2FsbFNpdGVJbmRleCksIEND
YWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7Cit9CisKIC8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJseSBoYXZlIHVuc2ln
bmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQgMzItYml0IG9mZnNl
dHMgaW4gQjMuCi1pbnQzMl90IEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQo
RXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMyX3Qgb2Zmc2V0KQoraW50MzJfdCBCM0lSR2VuZXJh
dG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KFZhbHVlKiYgcHRyLCB1aW50MzJfdCBvZmZzZXQp
CiB7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpID4gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkgewogICAgICAg
ICBwdHIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3Jp
Z2luKCksIHB0ciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIG9mZnNldCkpOwpAQCAtNDI4LDggKzY0Myw5IEBAIEIzSVJHZW5lcmF0b3I6
OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYg
cHJvY2VkdXJlCiAgICAgLCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzKG1fcHJvYykKICAgICAs
IG1fbnVtSW1wb3J0RnVuY3Rpb25zKGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpKQogewotICAg
IG1fcm9vdEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBt
X3Jvb3RCbG9jazsKKyAgICBtX3RvcExldmVsQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAg
ICBtX3Jvb3RCbG9ja3MuYXBwZW5kKG1fcHJvYy5hZGRCbG9jaygpKTsKKyAgICBtX2N1cnJlbnRC
bG9jayA9IG1fcm9vdEJsb2Nrc1swXTsKIAogICAgIC8vIEZJWE1FIHdlIGRvbid0IHJlYWxseSBu
ZWVkIHRvIHBpbiByZWdpc3RlcnMgaGVyZSBpZiB0aGVyZSdzIG5vIG1lbW9yeS4gSXQgbWFrZXMg
d2FzbSAtPiB3YXNtIHRodW5rcyBzaW1wbGVyIGZvciBub3cuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2MjMKICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8m
IHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAtNDYxLDYgKzY3Nywy
NiBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICB9KTsKICAgICB9CiAKKyAgICB7
CisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGdldEluc3RhbmNlID0gbV90b3BMZXZlbEJs
b2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBwb2ludGVyVHlwZSgp
LCBPcmlnaW4oKSk7CisgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAg
ICAgICBnZXRJbnN0YW5jZS0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0
ZXJzKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdh
c21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dEluc3RhbmNlIHJlZ2lzdGVyIGFuZCBk
b2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBz
aWRlLgorICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIEFyZ3VtZW50
UmVnIHRvIHRoaXMgKGxvZ2ljYWxseSkgaW1tdXRhYmxlIHBpbm5lZCByZWdpc3Rlci4KKyAgICAg
ICAgICAgIGdldEluc3RhbmNlLT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IGZhbHNlOworICAgICAg
ICAgICAgZ2V0SW5zdGFuY2UtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAg
ICAgZ2V0SW5zdGFuY2UtPnJlc3VsdENvbnN0cmFpbnRzID0geyBWYWx1ZVJlcDo6cmVnKG1fd2Fz
bUNvbnRleHRJbnN0YW5jZUdQUikgfTsKKyAgICAgICAgfQorICAgICAgICBnZXRJbnN0YW5jZS0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZh
c3RUTFMoKSkgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFu
Y2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5sb2Fk
V2FzbUNvbnRleHRJbnN0YW5jZShwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9KTsKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gZ2V0SW5zdGFuY2U7CisgICAgfQor
CiAgICAgewogICAgICAgICBhdXRvKiBjYWxsZWVNb3ZlTG9jYXRpb24gPSAmY29tcGlsYXRpb24t
PmNhbGxlZU1vdmVMb2NhdGlvbjsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpIDwgV2FzbUNhbGxpbmdDb252ZW50aW9uOjpo
ZWFkZXJTaXplSW5CeXRlcywgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CkBAIC00
OTQsMTcgKzczMCwxMCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgIH0KIAogICAgIHsK
LSAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogc3RhY2tPdmVyZmxvd0NoZWNrID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIHBvaW50ZXJU
eXBlKCksIE9yaWdpbigpKTsKLSAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gc3RhY2tPdmVyZmxv
d0NoZWNrOworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBzdGFja092ZXJmbG93Q2hlY2sg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
Vm9pZCwgT3JpZ2luKCkpOworICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmFwcGVuZFNvbWVS
ZWdpc3RlcihpbnN0YW5jZVZhbHVlKCkpOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmFw
cGVuZFNvbWVSZWdpc3RlcihmcmFtZVBvaW50ZXIoKSk7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dD
aGVjay0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotICAg
ICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6
IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVn
aXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0
aGUgY2FsbGVyIHNpZGUuCi0gICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNp
bmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lz
dGVyLgotICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLndyaXRlc1Bpbm5l
ZCA9IGZhbHNlOwotICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLnJlYWRz
UGlubmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+cmVzdWx0Q29u
c3RyYWludHMgPSB7IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSB9Owot
ICAgICAgICB9CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+bnVtR1BTY3JhdGNoUmVnaXN0
ZXJzID0gMjsKICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CiAgICAgICAgICAgICBjb25zdCBDaGVja2VkPGludDMyX3Q+IHdhc21GcmFtZVNpemUg
PSBwYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpOwpAQCAtNTI2LDE5ICs3NTUsMTUgQEAgQjNJUkdl
bmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJv
Y2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgIGJvb2wgbmVlZFVuZGVyZmxvd0NoZWNrID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoZWNrU2l6ZSkgPiBPcHRpb25zOjpyZXNlcnZlZFpvbmVT
aXplKCk7CiAgICAgICAgICAgICBib29sIG5lZWRzT3ZlcmZsb3dDaGVjayA9IG1fbWFrZXNDYWxs
cyB8fCB3YXNtRnJhbWVTaXplID49IHN0YXRpY19jYXN0PGludDMyX3Q+KG1pbmltdW1QYXJlbnRD
aGVja1NpemUpIHx8IG5lZWRVbmRlcmZsb3dDaGVjazsKIAotICAgICAgICAgICAgR1BSUmVnIGNv
bnRleHRJbnN0YW5jZSA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHBhcmFtc1swXS5ncHIoKSA6
IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKLQogICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3Mg
bGVhZiBmdW5jdGlvbnMgdG8gbm90IGRvIHN0YWNrIGNoZWNrcyBpZiB0aGVpciBmcmFtZSBzaXpl
IGlzIHdpdGhpbgogICAgICAgICAgICAgLy8gY2VydGFpbiBsaW1pdHMgc2luY2UgdGhlaXIgY2Fs
bGVyIHdvdWxkIGhhdmUgYWxyZWFkeSBkb25lIHRoZSBjaGVjay4KICAgICAgICAgICAgIGlmIChu
ZWVkc092ZXJmbG93Q2hlY2spIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGNv
bnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcg
ZnAgPSBwYXJhbXNbMV0uZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cGFyYW1zLmdwU2NyYXRjaCgwKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBw
YXJhbXMuZ3BTY3JhdGNoKDEpOwogCi0gICAgICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZh
c3RUTFMoKSkKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KGNvbnRleHRJbnN0YW5jZSk7Ci0KICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoY29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRT
dGFja0xpbWl0KCkpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgZnAsIHNjcmF0Y2gxKTsKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7CkBAIC01NDgsMTIg
Kzc3Myw2IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3RhY2tPdmVyZmxv
d0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIENvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkgewotICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93IGNoZWNrIGlzIG5l
ZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMgdG8gYmUgY29ycmVjdC4K
LSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1Nj
cmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNy
b1NjcmF0Y2hSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0
SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgLy8gV2Ugc2FpZCB3ZSdkIHJldHVybiBhIHBvaW50ZXIuIFdlIGRvbid0IGFjdHVh
bGx5IG5lZWQgdG8gYmVjYXVzZSBpdCBpc24ndCB1c2VkLCBidXQgdGhlIHBhdGNocG9pbnQgY29u
c2VydmF0aXZlbHkgc2FpZCBpdCBoYWQgZWZmZWN0cyAocG90ZW50aWFsIHN0YWNrIGNoZWNrKSB3
aGljaCBwcmV2ZW50IGl0IGZyb20gZ2V0dGluZyByZW1vdmVkLgogICAgICAgICAgICAgfQogICAg
ICAgICB9KTsKICAgICB9CkBAIC01NjQsOSArNzgzLDEwIEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJH
ZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2Vk
dXJlCiAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CiB9CiAKLXZv
aWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNh
Y2hlZFN0YWNrTGltaXQgcmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9y
bWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Js
b2NrKiBibG9jaykKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFs
U3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgcmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNv
bnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJl
JiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywgYm9vbCByZXN0b3JlSW5zdGFuY2UpCiB7Ci0gICAg
cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKKyAgICBp
ZiAocmVzdG9yZUluc3RhbmNlKQorICAgICAgICByZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShw
cm9jLCBibG9jaywgaW5zdGFuY2UpOwogCiAgICAgaWYgKHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0
ID09IFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMpIHsKICAgICAgICAgLy8gVGhlIEluc3Rh
bmNlIGNhY2hlcyB0aGUgc3RhY2sgbGltaXQsIGJ1dCBhbHNvIGtub3dzIHdoZXJlIGl0cyBjYW5v
bmljYWwgbG9jYXRpb24gaXMuCkBAIC02MzQsOSArODU0LDgxIEBAIFZhbHVlKiBCM0lSR2VuZXJh
dG9yOjpmcmFtZVBvaW50ZXIoKQogICAgIHJldHVybiBtX2ZyYW1lUG9pbnRlcjsKIH0KIAorc3Rh
dGljIHZvaWQgYnVpbGRFbnRyeUJ1ZmZlckZvckNhdGNoKFByb2JlOjpDb250ZXh0JiBjb250ZXh0
KQoreworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigp
OworICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJ
bmRleCgpOworICAgIE9wdGltaXppbmdKSVRDYWxsZWUqIGNhbGxlZSA9IGJpdHdpc2VfY2FzdDxP
cHRpbWl6aW5nSklUQ2FsbGVlKj4oY2FsbEZyYW1lLT5jYWxsZWUoKS5hc1dhc21DYWxsZWUoKSk7
CisgICAgY29uc3QgU3RhY2tNYXAmIHN0YWNrbWFwID0gY2FsbGVlLT5zdGFja21hcChjYWxsU2l0
ZUluZGV4KTsKKyAgICBWTSogdm0gPSBjb250ZXh0LmdwcjxWTSo+KEdQUkluZm86OnJlZ1QwKTsK
KyAgICB1aW50NjRfdCogYnVmZmVyID0gdm0tPndhc21Db250ZXh0LnNjcmF0Y2hCdWZmZXJGb3JT
aXplKHN0YWNrbWFwLnNpemUoKSAqIDgpOworICAgIGxvYWRWYWx1ZXNJbnRvQnVmZmVyKGNvbnRl
eHQsIHN0YWNrbWFwLCBidWZmZXIpOworCisgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJ1ZmZlcik7Cit9CisKK3ZvaWQgQjNJ
UkdlbmVyYXRvcjo6aW5zZXJ0RW50cnlTd2l0Y2goKQoreworICAgIG1fcHJvYy5zZXROdW1FbnRy
eXBvaW50cyhtX3Jvb3RCbG9ja3Muc2l6ZSgpKTsKKworICAgIFJlZjxCMzo6QWlyOjpQcm9sb2d1
ZUdlbmVyYXRvcj4gY2F0Y2hQcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6
OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oW10gKENDYWxsSGVscGVycyYgaml0LCBC
Mzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGluZyBwcmVjaXNlIGFsbG9jYXRpb25z
IGluIFdhc21CM0lSR2VuZXJhdG9yIGNhdGNoIGVudHJ5cG9pbnRzIG1pZ2h0IGJlIHVubmVjZXNz
YXJ5CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMxMjEzCisgICAgICAgICAgICBhdXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5i
cmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDAsIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxpZ25tZW50KSk7
CisgICAgICAgICAgICBqaXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJr
ZWRCbG9jazo6YmxvY2tNYXNrKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBNYXJrZWRCbG9jazo6
b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZzZXRPZlZNKCkpLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICBhdXRvIGxvYWRlZENhc2UgPSBqaXQuanVtcCgpOwor
CisgICAgICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluaygmaml0KTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgUHJl
Y2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgp
IC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIEdQUkluZm86OnJlZ1QwKTsKKwor
ICAgICAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOworICAgICAgICB9CisgICAgICAgIGpp
dC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BS
SW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QzKTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hP
ZmZzZXQoKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0KCkpKTsKKyAgICAgICAgaml0
LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJJbmZvOjpyZWdUMywgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKTsKKworICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpyZWdUMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwg
Vk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKKworICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFt
ZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpyZWdUMyk7
CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
MywgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkluc3RhbmNlKCkpLCBHUFJJbmZvOjpy
ZWdUMyk7CisgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6cmVn
VDMpOworCisgICAgICAgIGppdC5wcm9iZSh0YWdDRnVuY3Rpb248SklUUHJvYmVQdHJUYWc+KGJ1
aWxkRW50cnlCdWZmZXJGb3JDYXRjaCksIG51bGxwdHIpOworCisgICAgICAgIGppdC5hZGRQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgfSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9yb290QmxvY2tzLnNpemUo
KTsgKytpKQorICAgICAgICBtX3Byb2MuY29kZSgpLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludChp
LCBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yLmNvcHlSZWYoKSk7CisKKyAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fdG9wTGV2ZWxCbG9jazsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEVudHJ5U3dpdGNoLCBPcmlnaW4oKSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcm9vdEJsb2NrcykKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZFN1Y2Nl
c3NvcihGcmVxdWVudGVkQmxvY2soYmxvY2spKTsKK30KKwogdm9pZCBCM0lSR2VuZXJhdG9yOjpp
bnNlcnRDb25zdGFudHMoKQogewogICAgIG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXMuZXhlY3V0
ZShtX3Byb2MuYXQoMCkpOworCisgICAgaWYgKCFtX2hhc0NhdGNoKQorICAgICAgICByZXR1cm47
CisKKyAgICBWYWx1ZSoganNJbnN0YW5jZSA9IG1fcHJvYy5hZGQ8TWVtb3J5VmFsdWU+KExvYWQs
IHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMy
X3Q+KEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpKTsKKyAgICBWYWx1ZSogc3RvcmUgPSBtX3By
b2MuYWRkPEIzOjpNZW1vcnlWYWx1ZT4oQjM6OlN0b3JlLCBPcmlnaW4oKSwganNJbnN0YW5jZSwg
ZnJhbWVQb2ludGVyKCksIHNhZmVDYXN0PGludDMyX3Q+KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1
bWVudCAqIHNpemVvZihSZWdpc3RlcikpKTsKKworICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9y
b290QmxvY2tzWzBdOworICAgIG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXMuaW5zZXJ0VmFsdWUo
MCwganNJbnN0YW5jZSk7CisgICAgbV9jb25zdGFudEluc2VydGlvblZhbHVlcy5pbnNlcnRWYWx1
ZSgwLCBzdG9yZSk7CisgICAgbV9jb25zdGFudEluc2VydGlvblZhbHVlcy5leGVjdXRlKGJsb2Nr
KTsKIH0KIAogQjM6OlR5cGUgQjNJUkdlbmVyYXRvcjo6dG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWdu
YXR1cmUgcmV0dXJuVHlwZSkKQEAgLTcwNSwyMCArOTk3LDIxIEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVz
dWx0CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlIHZh
bHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVz
dWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWws
IG9yaWdpbigpLCB2YWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKTsKKyAgICByZXN1
bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkVx
dWFsLCBvcmlnaW4oKSwgZ2V0KHZhbHVlKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUdldCh1
bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5s
aW5lIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KLSAg
ICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywg
dG9CM1R5cGUoVHlwZXM6OkV4dGVybnJlZiksIG9yaWdpbigpLAorICAgIFZhbHVlKiByZXN1bHRW
YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0Iz
VHlwZShUeXBlczo6RXh0ZXJucmVmKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9u
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0V2FzbVRhYmxlRWxlbWVudCkpLAotICAgICAg
ICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgaW5kZXgpOworICAgICAgICBpbnN0YW5j
ZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZ2V0KGluZGV4KSk7CiAKICAgICB7CisgICAgICAgIHJl
c3VsdCA9IHB1c2gocmVzdWx0VmFsdWUpOwogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2lu
KCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1
ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAg
ICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNUYWJsZUFjY2Vzcyk7CkBAIC03MzMsNyArMTAyNiw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkVGFibGVTZXQodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4
cHJlCiAgICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1MDY+LgogICAgIGF1dG8gc2hvdWxkVGhyb3cgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgQjM6OkludDMyLCBvcmln
aW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25T
ZXRXYXNtVGFibGVFbGVtZW50KSksCi0gICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5k
ZXgpLCBpbmRleCwgdmFsdWUpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4
KSwgZ2V0KGluZGV4KSwgZ2V0KHZhbHVlKSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUq
IGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENo
ZWNrLCBvcmlnaW4oKSwKQEAgLTc1MSwyNiArMTA0NCwyNiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZFJlZkZ1bmModWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYQogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KIAotICAgIHJlc3VsdCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBCMzo6SW50NjQsIG9yaWdpbigp
LAorICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVl
PihtX3Byb2MsIEIzOjpJbnQ2NCwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVJlZkZ1bmMpKSwKLSAgICAgICAgaW5zdGFuY2VW
YWx1ZSgpLCBhZGRDb25zdGFudChUeXBlczo6STMyLCBpbmRleCkpOworICAgICAgICBpbnN0YW5j
ZVZhbHVlKCksIGNvbnN0YW50KHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBpbmRleCkpKTsKIAogICAg
IHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVJbml0KHVuc2ln
bmVkIGVsZW1lbnRJbmRleCwgdW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgZHN0
T2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBzcmNPZmZzZXQsIEV4cHJlc3Npb25UeXBlIGxlbmd0aCkg
LT4gUGFydGlhbFJlc3VsdAogewotICAgIGF1dG8gcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICBtX3Byb2MsIHRvQjNUeXBlKFR5
cGVzOjpJMzIpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25XYXNtVGFibGVJbml0KSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIGVsZW1lbnRJbmRleCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwKLSAgICAgICAg
ZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGdldChkc3RPZmZzZXQpLCBn
ZXQoc3JjT2Zmc2V0KSwgZ2V0KGxlbmd0aCkpOwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVl
KiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBD
aGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigp
LCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
ewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlw
ZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC03OTQsMzEgKzEwODcsMzEgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRFbGVtRHJvcCh1bnNpZ25lZCBlbGVtZW50SW5kZXgpIC0+IFBhcnRp
YWxSZXN1bHQKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVTaXplKHVuc2lnbmVkIHRhYmxl
SW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICAv
LyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5ODUwNj4uCi0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKKyAg
ICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9w
cm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0
aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0V2FzbVRhYmxlU2l6ZSkpLAotICAgICAg
ICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSk7CisgICAgICAgIGluc3RhbmNlVmFsdWUo
KSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHRhYmxlSW5kZXgpKSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZFRhYmxlR3Jvdyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBm
aWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0Nh
bGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCisgICAgcmVz
dWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywg
dG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxP
cGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UYWJsZUdyb3cpKSwKLSAgICAgICAgaW5zdGFu
Y2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgdGFibGVJbmRleCksIGZpbGwsIGRlbHRhKTsKKyAgICAgICAgaW5zdGFuY2VW
YWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgdGFibGVJbmRleCksIGdldChmaWxsKSwgZ2V0KGRlbHRhKSkpOwogCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUZpbGwodW5zaWduZWQg
dGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgb2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBmaWxsLCBF
eHByZXNzaW9uVHlwZSBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGF1dG8gcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBl
KFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKKyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6Okkz
MiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRy
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbldhc21UYWJsZUZpbGwpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJ
bmRleCksIG9mZnNldCwgZmlsbCwgY291bnQpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0
YWJsZUluZGV4KSwgZ2V0KG9mZnNldCksIGdldChmaWxsKSwgZ2V0KGNvdW50KSk7CiAKICAgICB7
CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
aGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQs
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVj
ay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hl
Y2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTgzMCwx
NyArMTEyMywxNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCh1bnNpZ25lZCB0
YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBvZmZzZXQsIEV4cAogCiBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZFRhYmxlQ29weSh1bnNpZ25lZCBkc3RUYWJsZUluZGV4LCB1bnNpZ25lZCBzcmNUYWJs
ZUluZGV4LCBFeHByZXNzaW9uVHlwZSBkc3RPZmZzZXQsIEV4cHJlc3Npb25UeXBlIHNyY09mZnNl
dCwgRXhwcmVzc2lvblR5cGUgbGVuZ3RoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVl
KiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAg
ICAgICAgIG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UYWJsZUNvcHkpKSwK
ICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZHN0VGFibGVJbmRleCksCiAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCBzcmNUYWJsZUluZGV4KSwKLSAgICAgICAgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIGxlbmd0
aCk7CisgICAgICAgIGdldChkc3RPZmZzZXQpLCBnZXQoc3JjT2Zmc2V0KSwgZ2V0KGxlbmd0aCkp
OwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4o
KSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAg
ICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4
Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7
CkBAIC04NTMsNyArMTE0Niw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVDb3B5KHVu
c2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsCiBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7Ci0gICAg
cmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2Ms
IEIzOjpHZXQsIG9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0pOworICAgIHJlc3VsdCA9IHB1c2go
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQs
IG9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0pKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC04
NjcsNyArMTE2MCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQ
YXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjpl
bWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2Fs
bGVlQ29kZSwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJ
UkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIFZhbHVl
KiBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewog
ICAgIC8vIERvIGEgY29udGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgogICAgIHsKQEAgLTkxNiw3ICsx
MjA5LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxs
ZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGUKICAgICB9CiAKICAgICBCMzo6VHlwZSBy
ZXR1cm5UeXBlID0gdG9CM1Jlc3VsdFR5cGUoJnNpZ25hdHVyZSk7Ci0gICAgRXhwcmVzc2lvblR5
cGUgY2FsbFJlc3VsdCA9IGNyZWF0ZUNhbGxQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBvcmln
aW4oKSwgc2lnbmF0dXJlLCBhcmdzLAorICAgIFZhbHVlKiBjYWxsUmVzdWx0ID0gY3JlYXRlQ2Fs
bFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBzaWduYXR1cmUsIGFyZ3MsCiAg
ICAgICAgIHNjb3BlZExhbWJkYVJlZjx2b2lkKFBhdGNocG9pbnRWYWx1ZSopPihbPV0gKFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgLT4gdm9pZCB7CiAgICAgICAgICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKQEAgLTkyOCw4ICsxMjIxLDEwIEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIEV4cHJl
c3Npb25UeXBlIGNhbGxlCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykp
OwogCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoY2FsbGVlQ29kZSwgVmFsdWVSZXA6
OlNvbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhh
bmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhtX2N1cnJlbnRCbG9jaywgcGF0
Y2hwb2ludCk7CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFt
cywgdGhpcyk7CiAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3BhcmFtcy5wcm9jKCku
cmVzdWx0Q291bnQocmV0dXJuVHlwZSldLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0pKTsKQEAgLTk0MSwxMSArMTIzNiwxMSBAQCBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBFeHByZXNz
aW9uVHlwZSBjYWxsZQogICAgIGNhc2UgQjM6OlR1cGxlOiB7CiAgICAgICAgIGNvbnN0IFZlY3Rv
cjxCMzo6VHlwZT4mIHR1cGxlID0gbV9wcm9jLnR1cGxlRm9yVHlwZShyZXR1cm5UeXBlKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyAr
K2kpCi0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHVwbGVbaV0sIGNhbGxSZXN1bHQsIGkp
KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxFeHRyYWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHR1cGxlW2ldLCBjYWxsUmVzdWx0
LCBpKSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDogewotICAgICAgICBy
ZXN1bHRzLmFwcGVuZChjYWxsUmVzdWx0KTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaChj
YWxsUmVzdWx0KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CkBAIC05NTgsOSArMTI1
Myw5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVl
SW5zdGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
R3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCisgICAgcmVzdWx0ID0gcHVz
aChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9y
aWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bkdyb3dNZW1vcnkpKSwKLSAgICAgICAgZnJhbWVQb2ludGVyKCksIGluc3RhbmNlVmFsdWUoKSwg
ZGVsdGEpOworICAgICAgICBmcmFtZVBvaW50ZXIoKSwgaW5zdGFuY2VWYWx1ZSgpLCBnZXQoZGVs
dGEpKSk7CiAKICAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVk
U3RhY2tMaW1pdDo6Tm8sIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9wcm9jLCBt
X2N1cnJlbnRCbG9jayk7CiAKQEAgLTk4MCwyMiArMTI3NSwyMiBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogICAgIFZhbHVlKiBudW1QYWdlcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgWlNociwgb3JpZ2luKCksCiAgICAgICAgIHNpemUsIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzaGlmdFZhbHVlKSk7
CiAKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IFRydW5jLCBvcmlnaW4oKSwgbnVtUGFnZXMpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIG51bVBhZ2Vz
KSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE1lbW9y
eUZpbGwoRXhwcmVzc2lvblR5cGUgZHN0QWRkcmVzcywgRXhwcmVzc2lvblR5cGUgdGFyZ2V0VmFs
dWUsIEV4cHJlc3Npb25UeXBlIGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVl
KiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAg
ICAgICAgIG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21NZW1vcnlGaWxsKSks
CiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwKLSAgICAgICAgZHN0QWRkcmVzcywgdGFyZ2V0VmFs
dWUsIGNvdW50KTsKKyAgICAgICAgZ2V0KGRzdEFkZHJlc3MpLCBnZXQodGFyZ2V0VmFsdWUpLCBn
ZXQoY291bnQpKTsKIAogICAgIHsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAot
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVh
bCwgb3JpZ2luKCksIHJlc3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAw
KSkpOwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRo
aXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVGFi
bGVBY2Nlc3MpOwpAQCAtMTAwNywxNiArMTMwMiwxNiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE1lbW9yeUZpbGwoRXhwcmVzc2lvblR5cGUgZHN0QWRkcmVzcywgRXhwcmVzc2lvblR5cGUgdGFy
ZwogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUluaXQodW5zaWduZWQgZGF0YVNlZ21l
bnRJbmRleCwgRXhwcmVzc2lvblR5cGUgZHN0QWRkcmVzcywgRXhwcmVzc2lvblR5cGUgc3JjQWRk
cmVzcywgRXhwcmVzc2lvblR5cGUgbGVuZ3RoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0
byByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZh
bHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4o
CiAgICAgICAgIG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21NZW1vcnlJbml0
KSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGRhdGFTZWdtZW50SW5kZXgp
LAotICAgICAgICBkc3RBZGRyZXNzLCBzcmNBZGRyZXNzLCBsZW5ndGgpOworICAgICAgICBnZXQo
ZHN0QWRkcmVzcyksIGdldChzcmNBZGRyZXNzKSwgZ2V0KGxlbmd0aCkpOwogCiAgICAgewogICAg
ICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tW
YWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkp
KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
RXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGpp
dCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC0xMDI4LDE1ICsx
MzIzLDE1IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5SW5pdCh1bnNpZ25lZCBkYXRh
U2VnbWVudEluZGV4LCBFeHByZXNzaW9uVHlwZSBkc3RBCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkTWVtb3J5Q29weShFeHByZXNzaW9uVHlwZSBkc3RBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSBz
cmNBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAogewotICAg
IGF1dG8gcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAg
ICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFs
dWU+KAogICAgICAgICBtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtTWVtb3J5
Q29weSkpLAogICAgICAgICBpbnN0YW5jZVZhbHVlKCksCi0gICAgICAgIGRzdEFkZHJlc3MsIHNy
Y0FkZHJlc3MsIGNvdW50KTsKKyAgICAgICAgZ2V0KGRzdEFkZHJlc3MpLCBnZXQoc3JjQWRkcmVz
cyksIGdldChjb3VudCkpOwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2lu
KCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1
ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAg
ICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNUYWJsZUFjY2Vzcyk7CkBAIC0xMDYwLDcgKzEzNTUsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZERhdGFEcm9wKHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQK
IGF1dG8gQjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25U
eXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4
XSk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2Ms
IEIzOjpTZXQsIG9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0sIHZhbHVlKTsKKyAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgb3JpZ2lu
KCksIG1fbG9jYWxzW2luZGV4XSwgZ2V0KHZhbHVlKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApA
QCAtMTA3MCwxMiArMTM2NSwxMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbAogICAgIFZhbHVl
KiBnbG9iYWxzQXJyYXkgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNh
ZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSkpOwogICAgIHN3aXRj
aCAoZ2xvYmFsLmJpbmRpbmdNb2RlKSB7CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlv
bjo6QmluZGluZ01vZGU6OkVtYmVkZGVkSW5JbnN0YW5jZToKLSAgICAgICAgcmVzdWx0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlw
ZShnbG9iYWwudHlwZSksIG9yaWdpbigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+
KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICByZXN1bHQgPSBwdXNoKG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUo
Z2xvYmFsLnR5cGUpLCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90Pihp
bmRleCAqIHNpemVvZihSZWdpc3RlcikpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2Fz
bTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTogewogICAgICAgICBB
U1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFi
aWxpdHk6Ok11dGFibGUpOwogICAgICAgICBWYWx1ZSogcG9pbnRlciA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgQjM6OkludDY0LCBvcmlnaW4o
KSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3Rl
cikpKTsKLSAgICAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlwZShnbG9iYWwudHlwZSksIG9yaWdpbigpLCBwb2lu
dGVyKTsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKGdsb2JhbC50eXBlKSwgb3JpZ2luKCks
IHBvaW50ZXIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KQEAgLTEwODksMTQgKzEz
ODQsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4
cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKICAgICBWYWx1ZSogZ2xvYmFsc0FycmF5
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBw
b2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90
PihJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpKTsKICAgICBzd2l0Y2ggKGdsb2JhbC5iaW5k
aW5nTW9kZSkgewogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2Rl
OjpFbWJlZGRlZEluSW5zdGFuY2U6Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCB2YWx1ZSwgZ2xvYmFsc0FycmF5
LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3Jp
Z2luKCksIGdldCh2YWx1ZSksIGdsb2JhbHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXgg
KiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgIGlmIChpc1JlZlR5cGUoZ2xvYmFsLnR5cGUp
KQogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllckZvckpTV3JhcHBlcigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9y
dGFibGU6IHsKICAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Okdsb2Jh
bEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKICAgICAgICAgVmFsdWUqIHBvaW50
ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IEIzOjpJbnQ2NCwgb3JpZ2luKCksIGdsb2JhbHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5k
ZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCB2YWx1ZSwgcG9pbnRlcik7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
U3RvcmUsIG9yaWdpbigpLCBnZXQodmFsdWUpLCBwb2ludGVyKTsKICAgICAgICAgLy8gV2UgZW1p
dCBhIHdyaXRlLWJhcnJpZXIgb250byBKU1dlYkFzc2VtYmx5R2xvYmFsLCBub3QgSlNXZWJBc3Nl
bWJseUluc3RhbmNlLgogICAgICAgICBpZiAoaXNSZWZUeXBlKGdsb2JhbC50eXBlKSkgewogICAg
ICAgICAgICAgVmFsdWUqIGluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VW
YWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSk7CkBA
IC0xMTk5LDcgKzE0OTQsNyBAQCBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0V3JpdGVC
YXJyaWVyRm9ySlNXcmFwcGVyKCkKICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsK
IH0KIAotaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9p
bnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNp
emVPZk9wZXJhdGlvbikKK2lubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5k
UHJlcGFyZVBvaW50ZXIoVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qg
c2l6ZU9mT3BlcmF0aW9uKQogewogICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIpOwogCkBAIC0x
MjY4LDcgKzE1NjMsNyBAQCBpbmxpbmUgQjM6OktpbmQgQjNJUkdlbmVyYXRvcjo6bWVtb3J5S2lu
ZChCMzo6T3Bjb2RlIG1lbW9yeU9wKQogICAgIHJldHVybiBtZW1vcnlPcDsKIH0KIAotaW5saW5l
IFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0TG9hZE9wKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IHVvZmZzZXQpCitpbmxpbmUgVmFsdWUqIEIzSVJHZW5l
cmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90
IHVvZmZzZXQpCiB7CiAgICAgaW50MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0
KHBvaW50ZXIsIHVvZmZzZXQpOwogCkBAIC0xMzM4LDggKzE2MzMsOSBAQCBpbmxpbmUgVmFsdWUq
IEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUg
cG9pbnRlciwgdQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWF1dG8g
QjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVy
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1
bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogcG9pbnRlciA9IGdldChwb2ludGVyVmFyKTsK
ICAgICBBU1NFUlQocG9pbnRlci0+dHlwZSgpID09IEludDMyKTsKIAogICAgIGlmIChVTkxJS0VM
WShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSkpKSB7CkBA
IC0xMzU2LDcgKzE2NTIsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBv
cCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmCiAgICAgICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDoKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZV
OgogICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VToKLSAgICAgICAgICAgIHJlc3Vs
dCA9IGNvbnN0YW50KEludDMyLCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3Rh
bnQoSW50MzIsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQ4UzoKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CkBAIC0x
MzY1LDE4ICsxNjYxLDE4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9w
LCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYKICAgICAgICAgY2FzZSBM
b2FkT3BUeXBlOjpJNjRMb2FkMzJTOgogICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6
CiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKLSAgICAgICAgICAgIHJlc3Vs
dCA9IGNvbnN0YW50KEludDY0LCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3Rh
bnQoSW50NjQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRPcFR5
cGU6OkYzMkxvYWQ6Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChGbG9hdCwgMCk7Cisg
ICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50KEZsb2F0LCAwKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgotICAgICAgICAgICAg
cmVzdWx0ID0gY29uc3RhbnQoRG91YmxlLCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2go
Y29uc3RhbnQoRG91YmxlLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAg
ICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGVtaXRMb2FkT3Aob3AsIGVtaXRDaGVja0FuZFBy
ZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7
CisgICAgICAgIHJlc3VsdCA9IHB1c2goZW1pdExvYWRPcChvcCwgZW1pdENoZWNrQW5kUHJlcGFy
ZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0KSk7CiAK
ICAgICByZXR1cm4geyB9OwogfQpAQCAtMTQwMiw3ICsxNjk4LDcgQEAgaW5saW5lIHVpbnQzMl90
IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCiB9CiAKIAotaW5saW5lIHZvaWQgQjNJUkdl
bmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQoraW5saW5lIHZvaWQg
QjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIFZhbHVlKiBwb2ludGVy
LCBWYWx1ZSogdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCiB7CiAgICAgaW50MzJfdCBvZmZzZXQg
PSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIHVvZmZzZXQpOwogCkBAIC0xNDM3LDgg
KzE3MzMsMTAgQEAgaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVP
cFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEUKICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OnN0b3JlKFN0b3JlT3BUeXBl
IG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMy
X3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OnN0b3JlKFN0
b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyVmFyLCBFeHByZXNzaW9uVHlwZSB2
YWx1ZVZhciwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUq
IHBvaW50ZXIgPSBnZXQocG9pbnRlclZhcik7CisgICAgVmFsdWUqIHZhbHVlID0gZ2V0KHZhbHVl
VmFyKTsKICAgICBBU1NFUlQocG9pbnRlci0+dHlwZSgpID09IEludDMyKTsKIAogICAgIGlmIChV
TkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkp
KSkgewpAQCAtMTQ2NCw5ICsxNzYyLDkgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZkF0b21pY09w
TWVtb3J5QWNjZXNzKEV4dEF0b21pY09wVHlwZSBvcCkKICAgICByZXR1cm4gYnl0ZXNGb3JXaWR0
aChhY2Nlc3NXaWR0aChvcCkpOwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OnNh
bml0aXplQXRvbWljUmVzdWx0KEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4
cHJlc3Npb25UeXBlIHJlc3VsdCkKK2lubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6c2FuaXRp
emVBdG9taWNSZXN1bHQoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgVmFsdWUq
IHJlc3VsdCkKIHsKLSAgICBhdXRvIHNhbml0aXplMzIgPSBbJl0oRXhwcmVzc2lvblR5cGUgcmVz
dWx0KSB7CisgICAgYXV0byBzYW5pdGl6ZTMyID0gWyZdKFZhbHVlKiByZXN1bHQpIHsKICAgICAg
ICAgc3dpdGNoIChhY2Nlc3NXaWR0aChvcCkpIHsKICAgICAgICAgY2FzZSBCMzo6V2lkdGg4Ogog
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQml0QW5kLCBvcmlnaW4oKSwgcmVzdWx0LCBjb25zdGFudChJbnQzMiwgMHhmZikpOwpAQCAt
MTQ5MSw3ICsxNzg5LDcgQEAgaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpzYW5pdGl6ZUF0
b21pY1Jlc3VsdChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWUKICAgICB9CiB9CiAKLVZh
bHVlKiBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKEV4
dEF0b21pY09wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcHRyLCB1aW50MzJfdCBvZmZzZXQpCitW
YWx1ZSogQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhF
eHRBdG9taWNPcFR5cGUgb3AsIFZhbHVlKiBwdHIsIHVpbnQzMl90IG9mZnNldCkKIHsKICAgICBh
dXRvIHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFk
ZCwgb3JpZ2luKCksIHB0ciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIG9mZnNldCkpOwogICAgIGlmIChhY2Nlc3NXaWR0aChvcCkgIT0g
QjM6OldpZHRoOCkgewpAQCAtMTUwNCwxMSArMTgwMiwxMSBAQCBWYWx1ZSogQjNJUkdlbmVyYXRv
cjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhFeHRBdG9taWNPcFR5cGUgb3As
IEV4cAogICAgIHJldHVybiBwb2ludGVyOwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0
b3I6OmVtaXRBdG9taWNMb2FkT3AoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwg
RXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK2lubGluZSBWYWx1ZSog
QjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY0xvYWRPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUg
dmFsdWVUeXBlLCBWYWx1ZSogcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBwb2lu
dGVyID0gZml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhvcCwgcG9pbnRlciwgdW9m
ZnNldCk7CiAKLSAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZSA9IG51bGxwdHI7CisgICAgVmFsdWUq
IHZhbHVlID0gbnVsbHB0cjsKICAgICBzd2l0Y2ggKGFjY2Vzc1dpZHRoKG9wKSkgewogICAgIGNh
c2UgQjM6OldpZHRoODoKICAgICBjYXNlIEIzOjpXaWR0aDE2OgpAQCAtMTUzNywyMiArMTgzNSwy
MiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmF0b21pY0xvYWQoRXh0QXRvbWljT3BUeXBlIG9wLCBU
eXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5cAogCiAgICAgICAgIHN3aXRjaCAodmFsdWVUeXBl
LmtpbmQpIHsKICAgICAgICAgY2FzZSBUeXBlS2luZDo6STMyOgotICAgICAgICAgICAgcmVzdWx0
ID0gY29uc3RhbnQoSW50MzIsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFu
dChJbnQzMiwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6
Okk2NDoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDY0LCAwKTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50NjQsIDApKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAg
IHJlc3VsdCA9IGVtaXRBdG9taWNMb2FkT3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJl
cGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2Vzcyhv
cCkpLCBvZmZzZXQpOworICAgICAgICByZXN1bHQgPSBwdXNoKGVtaXRBdG9taWNMb2FkT3Aob3As
IHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBvZmZz
ZXQsIHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNzKG9wKSksIG9mZnNldCkpOwogCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY1N0b3Jl
T3AoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9p
bnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCitpbmxpbmUgdm9p
ZCBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWljU3RvcmVPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5
cGUgdmFsdWVUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUqIHZhbHVlLCB1aW50MzJfdCB1b2Zm
c2V0KQogewogICAgIHBvaW50ZXIgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3Bz
KG9wLCBwb2ludGVyLCB1b2Zmc2V0KTsKIApAQCAtMTU3MywxMiArMTg3MSwxMiBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmF0b21pY1N0b3JlKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5
cGUsIEV4cHJlc3Npb25UeQogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGpp
dCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOwogICAgICAgICB9KTsK
ICAgICB9IGVsc2UKLSAgICAgICAgZW1pdEF0b21pY1N0b3JlT3Aob3AsIHZhbHVlVHlwZSwgZW1p
dENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1l
bW9yeUFjY2VzcyhvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKKyAgICAgICAgZW1pdEF0b21pY1N0b3Jl
T3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIp
LCBvZmZzZXQsIHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNzKG9wKSksIGdldCh2YWx1ZSksIG9m
ZnNldCk7CiAKICAgICByZXR1cm4geyB9OwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0
b3I6OmVtaXRBdG9taWNCaW5hcnlSTVdPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVU
eXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMy
X3QgdW9mZnNldCkKK2lubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY0JpbmFy
eVJNV09wKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVy
LCBWYWx1ZSogdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCiB7CiAgICAgcG9pbnRlciA9IGZpeHVw
UG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNPcHMob3AsIHBvaW50ZXIsIHVvZmZzZXQpOwogCkBA
IC0xNjYzLDIyICsxOTYxLDIyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljQmluYXJ5Uk1X
KEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3NpCiAKICAgICAgICAg
c3dpdGNoICh2YWx1ZVR5cGUua2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6Ci0g
ICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChJbnQzMiwgMCk7CisgICAgICAgICAgICByZXN1
bHQgPSBwdXNoKGNvbnN0YW50KEludDMyLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBUeXBlS2luZDo6STY0OgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50
NjQsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQ2NCwgMCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZW1pdEF0b21pY0JpbmFyeVJNV09wKG9wLCB2YWx1
ZVR5cGUsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9m
QXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgdmFsdWUsIG9mZnNldCk7CisgICAgICAgIHJlc3Vs
dCA9IHB1c2goZW1pdEF0b21pY0JpbmFyeVJNV09wKG9wLCB2YWx1ZVR5cGUsIGVtaXRDaGVja0Fu
ZFByZXBhcmVQb2ludGVyKGdldChwb2ludGVyKSwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1lbW9y
eUFjY2VzcyhvcCkpLCBnZXQodmFsdWUpLCBvZmZzZXQpKTsKIAogICAgIHJldHVybiB7IH07CiB9
CiAKLVZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0
b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4
cHJlc3Npb25UeXBlIGV4cGVjdGVkLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9m
ZnNldCkKK1ZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4
dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSog
ZXhwZWN0ZWQsIFZhbHVlKiB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBwb2ludGVy
ID0gZml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhvcCwgcG9pbnRlciwgdW9mZnNl
dCk7CiAKQEAgLTE3ODgsMzYgKzIwODYsNDEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWND
b21wYXJlRXhjaGFuZ2UoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXgKIAog
ICAgICAgICBzd2l0Y2ggKHZhbHVlVHlwZS5raW5kKSB7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6
OkkzMjoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDMyLCAwKTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50MzIsIDApKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJNjQ6Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25z
dGFudChJbnQ2NCwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50KEludDY0
LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgIH0gZWxzZQotICAgICAgICByZXN1bHQgPSBlbWl0QXRvbWljQ29tcGFyZUV4Y2hh
bmdlKG9wLCB2YWx1ZVR5cGUsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9m
ZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgZXhwZWN0ZWQsIHZhbHVlLCBv
ZmZzZXQpOworICAgICAgICByZXN1bHQgPSBwdXNoKGVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2Uo
b3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBv
ZmZzZXQsIHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNzKG9wKSksIGdldChleHBlY3RlZCksIGdl
dCh2YWx1ZSksIG9mZnNldCkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2Vu
ZXJhdG9yOjphdG9taWNXYWl0KEV4dEF0b21pY09wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9p
bnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHRpbWVvdXQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KEV4dEF0b21pY09wVHlwZSBvcCwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlclZhciwgRXhwcmVzc2lvblR5cGUgdmFsdWVWYXIsIEV4cHJlc3Npb25UeXBl
IHRpbWVvdXRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4g
UGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBwb2ludGVyID0gZ2V0KHBvaW50ZXJWYXIpOwor
ICAgIFZhbHVlKiB2YWx1ZSA9IGdldCh2YWx1ZVZhcik7CisgICAgVmFsdWUqIHRpbWVvdXQgPSBn
ZXQodGltZW91dFZhcik7CisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbnVsbHB0cjsKICAgICBp
ZiAob3AgPT0gRXh0QXRvbWljT3BUeXBlOjpNZW1vcnlBdG9taWNXYWl0MzIpIHsKLSAgICAgICAg
cmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIElu
dDMyLCBvcmlnaW4oKSwKKyAgICAgICAgcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAogICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NZW1vcnlBdG9taWNXYWl0
MzIpKSwKICAgICAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgcG9pbnRlciwgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG9mZnNldCksIHZh
bHVlLCB0aW1lb3V0KTsKICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAorICAg
ICAgICByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4o
bV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbk1lbW9yeUF0b21pY1dhaXQ2NCkpLAogICAgICAgICAgICAg
aW5zdGFuY2VWYWx1ZSgpLCBwb2ludGVyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSwgdmFsdWUsIHRpbWVvdXQpOwogICAg
IH0KIAogICAgIHsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChyZXN1bHRWYWx1ZSk7CiAgICAgICAg
IENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVl
PihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCByZXN1bHQsIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkp
OworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBM
ZXNzVGhhbiwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2so
aml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CkBAIC0xODI5LDEz
ICsyMTMyLDEzIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljV2FpdChFeHRBdG9taWNPcFR5
cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlCiAKIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YXRvbWljTm90aWZ5KEV4dEF0b21pY09wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
RXhwcmVzc2lvblR5cGUgY291bnQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9m
ZnNldCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCisgICAgVmFsdWUq
IHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3By
b2MsIEludDMyLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25NZW1vcnlBdG9taWNOb3RpZnkpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1
ZSgpLCBwb2ludGVyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSwgY291bnQpOwotCisgICAgICAgIGluc3RhbmNlVmFsdWUo
KSwgZ2V0KHBvaW50ZXIpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSwgZ2V0KGNvdW50KSk7CiAgICAgeworICAgICAgICBy
ZXN1bHQgPSBwdXNoKHJlc3VsdFZhbHVlKTsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdp
bigpLAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBMZXNzVGhhbiwgb3JpZ2luKCksIHJlc3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgcmVz
dWx0VmFsdWUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCAwKSkpOwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAg
ICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91
dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKQEAgLTE4NTEsOCArMjE1NCw5IEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YXRvbWljRmVuY2UoRXh0QXRvbWljT3BUeXBlLCB1aW50OF90KSAtPiBQYXJ0aWFs
UmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjp0cnVuY1Nh
dHVyYXRlZChFeHQxT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQsIFR5cGUgcmV0dXJuVHlwZSwgVHlwZSkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBC
M0lSR2VuZXJhdG9yOjp0cnVuY1NhdHVyYXRlZChFeHQxT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlw
ZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIFR5cGUgcmV0dXJuVHlwZSwgVHlwZSkg
LT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBW
YWx1ZSogbWF4RmxvYXQgPSBudWxscHRyOwogICAgIFZhbHVlKiBtaW5GbG9hdCA9IG51bGxwdHI7
CiAgICAgVmFsdWUqIHNpZ25CaXRDb25zdGFudCA9IG51bGxwdHI7CkBAIC0yMDAyLDI2ICsyMzA2
LDI2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6dHJ1bmNTYXR1cmF0ZWQoRXh0MU9wVHlwZSBvcCwg
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6
OlNlbGVjdCwgb3JpZ2luKCksCisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLAogICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4o
KSwgYXJnLCBtaW5GbG9hdCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBt
YXhGbG9hdCksCiAgICAgICAgICAgICBwYXRjaHBvaW50LCBtYXhSZXN1bHQpLAotICAgICAgICBy
ZXF1aXJlc05hTkNoZWNrID8gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIGFyZywgYXJnKSwgbWluUmVzdWx0LCB6ZXJvKSA6IG1p
blJlc3VsdCk7CisgICAgICAgIHJlcXVpcmVzTmFOQ2hlY2sgPyBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgYXJnLCBhcmcpLCBt
aW5SZXN1bHQsIHplcm8pIDogbWluUmVzdWx0KSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCiBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4
cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBjb25kaXRp
b24sIG5vblplcm8sIHplcm8pOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgZ2V0KGNvbmRpdGlv
biksIGdldChub25aZXJvKSwgZ2V0KHplcm8pKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogQjNJ
UkdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgQjNJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoVHlw
ZSB0eXBlLCB1aW50NjRfdCB2YWx1ZSkKIHsKIAotICAgIHJldHVybiBjb25zdGFudCh0b0IzVHlw
ZSh0eXBlKSwgdmFsdWUpOworICAgIHJldHVybiBwdXNoKGNvbnN0YW50KHRvQjNUeXBlKHR5cGUp
LCB2YWx1ZSkpOwogfQogCiB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRFbnRyeVRpZXJVcENoZWNr
KCkKQEAgLTIwODIsMjAgKzIzODYsMjEgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0TG9vcFRp
ZXJVcENoZWNrKHVpbnQzMl90IGxvb3BJbmRleCwgY29uc3QgU3RhY2smIGVuY2xvc2kKIAogICAg
IFZhbHVlKiBjb3VudERvd25Mb2NhdGlvbiA9IGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KCZtX3RpZXJVcC0+bV9jb3VudGVyKSwgb3JpZ2luKTsKIAotICAg
IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4gc3RhY2ttYXA7Ci0gICAgZm9yIChhdXRvJiBsb2NhbCA6
IG1fbG9jYWxzKSB7Ci0gICAgICAgIFZhbHVlKiByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luLCBsb2NhbCk7Ci0g
ICAgICAgIHN0YWNrbWFwLmFwcGVuZChyZXN1bHQpOwotICAgIH0KKyAgICBWZWN0b3I8VmFsdWUq
PiBzdGFja21hcDsKKyAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCisgICAgICAgIHN0
YWNrbWFwLmFwcGVuZChnZXQobG9jYWwpKTsKICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRl
eCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsr
Y29udHJvbEluZGV4KSB7CisgICAgICAgIGF1dG8mIGRhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0
YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKICAgICAgICAgYXV0byYgZXhwcmVzc2lv
blN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRF
eHByZXNzaW9uU3RhY2s7CiAgICAgICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVlIDogZXhw
cmVzc2lvblN0YWNrKQotICAgICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHZhbHVlKTsKKyAgICAg
ICAgICAgIHN0YWNrbWFwLmFwcGVuZChnZXQodmFsdWUpKTsKKyAgICAgICAgaWYgKENvbnRyb2xU
eXBlOjppc0FueUNhdGNoKGRhdGEpKQorICAgICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKGdldChk
YXRhLmV4Y2VwdGlvbigpKSk7CiAgICAgfQogICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVl
IDogZW5jbG9zaW5nU3RhY2spCi0gICAgICAgIHN0YWNrbWFwLmFwcGVuZCh2YWx1ZSk7CisgICAg
ICAgIHN0YWNrbWFwLmFwcGVuZChnZXQodmFsdWUpKTsKICAgICBmb3IgKFR5cGVkRXhwcmVzc2lv
biB2YWx1ZSA6IG5ld1N0YWNrKQotICAgICAgICBzdGFja21hcC5hcHBlbmQodmFsdWUpOworICAg
ICAgICBzdGFja21hcC5hcHBlbmQoZ2V0KHZhbHVlKSk7CiAKICAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNoID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJv
YywgQjM6OlZvaWQsIG9yaWdpbik7CiAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9u
ZSgpOwpAQCAtMjE0MCw5MyArMjQ0NSw3MiBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRMb29w
VGllclVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4LCBjb25zdCBTdGFjayYgZW5jbG9zaQogICAg
IH0pOwogfQogCitWYWx1ZSogQjNJUkdlbmVyYXRvcjo6bG9hZEZyb21TY3JhdGNoQnVmZmVyKHVu
c2lnbmVkJiBpbmRleEluQnVmZmVyLCBWYWx1ZSogcG9pbnRlciwgQjM6OlR5cGUgdHlwZSkKK3sK
KyAgICBzaXplX3Qgb2Zmc2V0ID0gc2l6ZW9mKHVpbnQ2NF90KSAqIGluZGV4SW5CdWZmZXIrKzsK
KyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlLmlzTnVtZXJpYygpKTsKKyAgICByZXR1cm4gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0eXBlLCBvcmln
aW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKK30KKwordm9pZCBCM0lSR2VuZXJhdG9yOjpjb25uZWN0
Q29udHJvbEVudHJ5KHVuc2lnbmVkJiBpbmRleEluQnVmZmVyLCBWYWx1ZSogcG9pbnRlciwgQ29u
dHJvbERhdGEmIGRhdGEsIFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xEYXRhJiBjdXJy
ZW50RGF0YSwgYm9vbCBmaWxsTG9vcFBoaXMpCit7CisgICAgLy8gRm9yIGVhY2ggc3RhY2sgZW50
cnkgZW5jbG9zZWQgYnkgdGhpcyBsb29wIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgdmFsdWUgd2l0
aCBhIHBoaSBzbyB3ZSBjYW4gZmlsbCBpdCBvbiBPU1IgZW50cnkuCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCk7IGkrKykgeworICAgICAgICBUeXBl
ZEV4cHJlc3Npb24gdmFsdWUgPSBleHByZXNzaW9uU3RhY2tbaV07CisgICAgICAgIGF1dG8qIGxv
YWQgPSBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgdmFsdWUt
PnR5cGUoKSk7CisgICAgICAgIGlmIChmaWxsTG9vcFBoaXMpCisgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgbG9hZCwg
ZGF0YS5waGlzW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgb3JpZ2luKCksIHZhbHVlLnZh
bHVlKCksIGxvYWQpOworICAgIH0KKyAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0
YSkgJiYgJmRhdGEgIT0gJmN1cnJlbnREYXRhKSB7CisgICAgICAgIGF1dG8qIGxvYWQgPSBsb2Fk
RnJvbVNjcmF0Y2hCdWZmZXIoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgcG9pbnRlclR5cGUoKSk7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9j
LCBTZXQsIG9yaWdpbigpLCBkYXRhLmV4Y2VwdGlvbigpLCBsb2FkKTsKKyAgICB9Cit9OworCiBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFj
ayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBibG9jaywgU3RhY2smIG5ld1N0YWNrLCB1
aW50MzJfdCBsb29wSW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBCYXNpY0Jsb2NrKiBi
b2R5ID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9wcm9jLmFkZEJsb2NrKCk7CiAKLSAgICBibG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3Jp
Z2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJvZHkpOwor
ICAgIGJsb2NrID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9j
a1R5cGU6Okxvb3AsIG1fc3RhY2tTaXplLCBjb250aW51YXRpb24sIGJvZHkpOworCiAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gZW5jbG9zaW5nU3RhY2suc2l6ZSgpIC0gc2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlID0gZW5jbG9z
aW5nU3RhY2suYXQob2Zmc2V0ICsgaSk7Ci0gICAgICAgIGF1dG8qIHVwc2lsb24gPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUp
OwogICAgICAgICBWYWx1ZSogcGhpID0gYmxvY2sucGhpc1tpXTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGdldCh2YWx1
ZSksIHBoaSk7CiAgICAgICAgIGJvZHktPmFwcGVuZChwaGkpOwotICAgICAgICB1cHNpbG9uLT5z
ZXRQaGkocGhpKTsKLSAgICAgICAgbmV3U3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHZhbHVlLnR5
cGUoKSwgcGhpKTsKKyAgICAgICAgc2V0KGJvZHksIHZhbHVlLCBwaGkpOworICAgICAgICBuZXdT
dGFjay5hcHBlbmQodmFsdWUpOwogICAgIH0KKyAgICBlbmNsb3NpbmdTdGFjay5zaHJpbmsob2Zm
c2V0KTsKIAogICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBKdW1wLCBvcmlnaW4oKSwgYm9keSk7CiAgICAgaWYgKGxvb3BJbmRleCA9PSBtX2xvb3BJbmRl
eEZvck9TUkVudHJ5KSB7CiAgICAgICAgIGRhdGFMb2dMbklmKFdhc21CM0lSR2VuZXJhdG9ySW50
ZXJuYWw6OnZlcmJvc2UsICJTZXR0aW5nIHVwIGZvciBPU1IgZW50cnkiKTsKIAotICAgICAgICBt
X2N1cnJlbnRCbG9jayA9IG1fcm9vdEJsb2NrOwotICAgICAgICBWYWx1ZSogcG9pbnRlciA9IG1f
cm9vdEJsb2NrLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Jvb3RC
bG9ja3NbMF07CisgICAgICAgIFZhbHVlKiBwb2ludGVyID0gbV9yb290QmxvY2tzWzBdLT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKIAogICAgICAgICB1bnNpZ25lZCBpbmRleEluQnVmZmVyID0gMDsKLSAgICAgICAg
YXV0byBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIgPSBbJl0gKEIzOjpUeXBlIHR5cGUpIHsKLSAgICAg
ICAgICAgIHNpemVfdCBvZmZzZXQgPSBzaXplb2YodWludDY0X3QpICogaW5kZXhJbkJ1ZmZlcisr
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodHlwZS5pc051bWVyaWMoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBMb2FkLCB0eXBlLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKLSAgICAgICAgfTsKIAog
ICAgICAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCi0gICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwg
bG9jYWwsIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihsb2NhbC0+dHlwZSgpKSk7Ci0KLSAgICAgICAg
YXV0byBjb25uZWN0Q29udHJvbEVudHJ5ID0gWyZdKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBT
dGFjayYgZXhwcmVzc2lvblN0YWNrKSB7Ci0gICAgICAgICAgICAvLyBGb3IgZWFjaCBzdGFjayBl
bnRyeSBlbmNsb3NlZCBieSB0aGlzIGxvb3Agd2UgbmVlZCB0byByZXBsYWNlIHRoZSB2YWx1ZSB3
aXRoIGEgcGhpIHNvIHdlIGNhbiBmaWxsIGl0IG9uIE9TUiBlbnRyeS4KLSAgICAgICAgICAgIEJh
c2ljQmxvY2sqIHNvdXJjZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJs
b2NrSW5kZXggPSAwOwotICAgICAgICAgICAgQjM6Okluc2VydGlvblNldCBpbnNlcnRpb25TZXQo
bV9wcm9jKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHByZXNzaW9u
U3RhY2suc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFs
dWUgPSBleHByZXNzaW9uU3RhY2tbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5pc0Nv
bnN0YW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgKytpbmRleEluQnVmZmVyOwotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWUtPm93bmVyICE9IHNvdXJjZUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2VCbG9jaykKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5leGVjdXRlKHNvdXJjZUJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluc2Vy
dGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNt
QjNJUkdlbmVyYXRvckludGVybmFsOjp2ZXJib3NlICYmIHNvdXJjZUJsb2NrLCAiRXhlY3V0ZWQg
aW5zZXJ0aW9uIHNldCBpbnRvOiAiLCAqc291cmNlQmxvY2spOwotICAgICAgICAgICAgICAgICAg
ICBibG9ja0luZGV4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlQmxvY2sgPSB2YWx1
ZS0+b3duZXI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgd2hpbGUgKHNv
dXJjZUJsb2NrLT5hdChibG9ja0luZGV4KyspICE9IHZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoYmxvY2tJbmRleCA8IHNvdXJjZUJsb2NrLT5zaXplKCkpOwotICAgICAgICAgICAg
ICAgIEFTU0VSVChzb3VyY2VCbG9jay0+YXQoYmxvY2tJbmRleCAtIDEpID09IHZhbHVlKTsKLQot
ICAgICAgICAgICAgICAgIGF1dG8qIHBoaSA9IGRhdGEuY29udGludWF0aW9uLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgUGhpLCAgdmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpKTsKLSAg
ICAgICAgICAgICAgICBleHByZXNzaW9uU3RhY2tbaV0gPSBUeXBlZEV4cHJlc3Npb24geyB2YWx1
ZS50eXBlKCksIHBoaSB9OwotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIHZhbHVlLT5vcmlnaW4oKSwgbG9hZEZyb21TY3JhdGNo
QnVmZmVyKHZhbHVlLT50eXBlKCkpLCBwaGkpOwotCi0gICAgICAgICAgICAgICAgYXV0byogc291
cmNlVXBzaWxvbiA9IG1fcHJvYy5hZGQ8VXBzaWxvblZhbHVlPih2YWx1ZS0+b3JpZ2luKCksIHZh
bHVlLCBwaGkpOwotICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRWYWx1ZShibG9j
a0luZGV4LCBzb3VyY2VVcHNpbG9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChz
b3VyY2VCbG9jaykKLSAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShzb3VyY2VC
bG9jayk7Ci0gICAgICAgIH07CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRGcm9tU2Ny
YXRjaEJ1ZmZlcihpbmRleEluQnVmZmVyLCBwb2ludGVyLCBsb2NhbC0+dHlwZSgpKSk7CiAKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3Bh
cnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgewogICAgICAgICAg
ICAgYXV0byYgZGF0YSA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNv
bnRyb2xEYXRhOwogICAgICAgICAgICAgYXV0byYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXIt
PmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7Ci0g
ICAgICAgICAgICBjb25uZWN0Q29udHJvbEVudHJ5KGRhdGEsIGV4cHJlc3Npb25TdGFjayk7Cisg
ICAgICAgICAgICBjb25uZWN0Q29udHJvbEVudHJ5KGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIGRh
dGEsIGV4cHJlc3Npb25TdGFjaywgYmxvY2spOwogICAgICAgICB9Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBlbmNsb3NpbmdTdGFjay5hdChvZmZzZXQg
KyBpKTsKLSAgICAgICAgICAgIFZhbHVlKiBwaGkgPSBibG9jay5waGlzW2ldOwotICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgdmFsdWUt
Pm9yaWdpbigpLCBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIodmFsdWUtPnR5cGUoKSksIHBoaSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZW5jbG9zaW5nU3RhY2suc2hyaW5rKG9mZnNldCk7Ci0gICAgICAg
IGNvbm5lY3RDb250cm9sRW50cnkoYmxvY2ssIGVuY2xvc2luZ1N0YWNrKTsKKyAgICAgICAgY29u
bmVjdENvbnRyb2xFbnRyeShpbmRleEluQnVmZmVyLCBwb2ludGVyLCBibG9jaywgZW5jbG9zaW5n
U3RhY2ssIGJsb2NrKTsKKyAgICAgICAgY29ubmVjdENvbnRyb2xFbnRyeShpbmRleEluQnVmZmVy
LCBwb2ludGVyLCBibG9jaywgbmV3U3RhY2ssIGJsb2NrLCB0cnVlKTsKIAogICAgICAgICBtX29z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSBpbmRleEluQnVmZmVyOwogICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGJv
ZHkpOwogICAgICAgICBib2R5LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGVuY2xvc2luZ1N0YWNrLnNocmluayhvZmZzZXQpOworICAgIH0KIAog
ICAgIG1fY3VycmVudEJsb2NrID0gYm9keTsKICAgICBlbWl0TG9vcFRpZXJVcENoZWNrKGxvb3BJ
bmRleCwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKQEAgLTIyMzUsNyArMjUxOSw3IEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNr
JiBlbmNsb3NpbmdTdGFjaywgQ29uCiAKIEIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEIzSVJH
ZW5lcmF0b3I6OmFkZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkKIHsKLSAgICBy
ZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBPcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6
OlRvcExldmVsLCBtX3Byb2MuYWRkQmxvY2soKSk7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG1f
cHJvYywgT3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpUb3BMZXZlbCwgbV9zdGFja1Np
emUsIG1fcHJvYy5hZGRCbG9jaygpKTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRCbG9j
ayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJv
bFR5cGUmIG5ld0Jsb2NrLCBTdGFjayYgbmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKQEAgLTIy
NDMsNyArMjUyNyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQmxvY2soQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvCiAgICAgQmFzaWNCbG9jayog
Y29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAKICAgICBzcGxpdFN0YWNrKHNpZ25h
dHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKLSAgICBuZXdCbG9jayA9IENvbnRyb2xE
YXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywgY29udGlu
dWF0aW9uKTsKKyAgICBuZXdCbG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNp
Z25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywgbV9zdGFja1NpemUsIGNvbnRpbnVhdGlvbik7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMjI1NSwyMCArMjUzOSwyMCBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgQmxvY2tTaWduYXR1cmUgc2ln
bmF0dXJlLCBTdAogICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7
CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAKLSAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9y
aWdpbigpLCBjb25kaXRpb24pOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGdldChjb25kaXRpb24pKTsKICAgICBtX2N1
cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sodGFrZW4pLCBGcmVxdWVu
dGVkQmxvY2sobm90VGFrZW4pKTsKICAgICB0YWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50
QmxvY2spOwogICAgIG5vdFRha2VuLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CiAK
ICAgICBtX2N1cnJlbnRCbG9jayA9IHRha2VuOwogICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBl
bmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwotICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG1fcHJv
Yywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpJZiwgY29udGludWF0aW9uLCBub3RU
YWtlbik7CisgICAgcmVzdWx0ID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0
dXJlLCBCbG9ja1R5cGU6OklmLCBtX3N0YWNrU2l6ZSwgY29udGludWF0aW9uLCBub3RUYWtlbik7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRy
b2xEYXRhJiBkYXRhLCBjb25zdCBTdGFjayYgY3VycmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0
CiB7Ci0gICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnBoaXMpOwor
ICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0YSk7CiAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBk
YXRhLmNvbnRpbnVhdGlvbik7CiAgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEp
OwogfQpAQCAtMjI3NiwxMSArMjU2MCwyNDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNl
KENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBTdGFjayYgY3VycmVudFN0YWNrKSAtPiBQYXIKIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9j
a1R5cGU6OklmKTsKKyAgICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCkgKyBkYXRhLm1f
c2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNw
ZWNpYWw7CiAgICAgZGF0YS5jb252ZXJ0SWZUb0Jsb2NrKCk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBT
dGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFj
aykgLT4gUGFydGlhbFJlc3VsdAoreworICAgICsrbV90cnlEZXB0aDsKKworICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgIHNwbGl0U3RhY2soc2ln
bmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOworICAgIHJlc3VsdCA9IENvbnRyb2xE
YXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpUcnksIG1fc3RhY2tT
aXplLCBjb250aW51YXRpb24sICsrbV9jYWxsU2l0ZUluZGV4LCBtX3RyeURlcHRoKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkIGV4
Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgU3RhY2smIGN1cnJlbnRT
dGFjaywgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEpOwor
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBv
cmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRDYXRjaFRvVW5yZWFj
aGFibGUoZXhjZXB0aW9uSW5kZXgsIHNpZ25hdHVyZSwgZGF0YSwgcmVzdWx0cyk7Cit9CisKK1Bh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGUgQjNJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRG
b3JFeGNlcHRpb25zKEJhc2ljQmxvY2sqIGJsb2NrLCBQYXRjaHBvaW50VmFsdWUqIHBhdGNoKQor
eworICAgICsrbV9jYWxsU2l0ZUluZGV4OworICAgIGlmICghbV90cnlEZXB0aCkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxWYWx1ZSo+IHN0YWNrbWFwOworICAgIE9yaWdpbiBv
cmlnaW4gPSB0aGlzLT5vcmlnaW4oKTsKKyAgICBmb3IgKFZhcmlhYmxlKiBsb2NhbCA6IG1fbG9j
YWxzKSB7CisgICAgICAgIFZhbHVlKiByZXN1bHQgPSBibG9jay0+YXBwZW5kTmV3PFZhcmlhYmxl
VmFsdWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luLCBsb2NhbCk7CisgICAgICAgIHN0YWNrbWFw
LmFwcGVuZChyZXN1bHQpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9
IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29u
dHJvbEluZGV4KSB7CisgICAgICAgIENvbnRyb2xEYXRhJiBkYXRhID0gbV9wYXJzZXItPmNvbnRy
b2xTdGFjaygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7CisgICAgICAgIFN0YWNrJiBleHBy
ZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgZm9yIChWYXJpYWJsZSogdmFsdWUgOiBleHBy
ZXNzaW9uU3RhY2spCisgICAgICAgICAgICBzdGFja21hcC5hcHBlbmQoZ2V0KGJsb2NrLCB2YWx1
ZSkpOworICAgICAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpCisgICAgICAg
ICAgICBzdGFja21hcC5hcHBlbmQoZ2V0KGJsb2NrLCBkYXRhLmV4Y2VwdGlvbigpKSk7CisgICAg
fQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gcGF0Y2gtPm51bUNoaWxkcmVuKCk7CisgICAgaWYg
KHBhdGNoLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgb2Zmc2V0Kys7CisKKyAgICBwYXRjaC0+
ZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKyAgICBwYXRjaC0+YXBwZW5kVmVjdG9yV2l0
aFJlcChzdGFja21hcCwgVmFsdWVSZXA6OkxhdGVDb2xkQW55KTsKKworICAgIHJldHVybiBQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlIHsgbV9jYWxsU2l0ZUluZGV4LCBvZmZzZXQgfTsKK30KKwor
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0
aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgZGF0YSwg
UmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFZhbHVlKiBvcGVy
YXRpb25SZXN1bHQgPSBlbWl0Q2F0Y2hJbXBsKENhdGNoS2luZDo6Q2F0Y2gsIGRhdGEsIGV4Y2Vw
dGlvbkluZGV4KTsKKyAgICBWYWx1ZSogcGF5bG9hZCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyVHlwZSgpLCBvcGVyYXRp
b25SZXN1bHQsIDEpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFyZ3Vt
ZW50KGkpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKHR5cGUpLCBvcmlnaW4oKSwgcGF5
bG9hZCwgaSAqIHNpemVvZih1aW50NjRfdCkpOworICAgICAgICByZXN1bHRzLmFwcGVuZChwdXNo
KHZhbHVlKSk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQ2F0Y2hBbGwoU3RhY2smIGN1cnJlbnRTdGFjaywgQ29udHJvbFR5cGUmIGRhdGEpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ss
IGRhdGEpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBKdW1wLCBvcmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRDYXRj
aEFsbFRvVW5yZWFjaGFibGUoZGF0YSk7Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2F0
Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgZW1pdENhdGNoSW1wbChDYXRjaEtpbmQ6OkNhdGNoQWxsLCBkYXRhKTsKKyAgICByZXR1
cm4geyB9OworfQorCitWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENhdGNoSW1wbChDYXRjaEtp
bmQga2luZCwgQ29udHJvbFR5cGUmIGRhdGEsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4KQorewor
ICAgIG1faGFzQ2F0Y2ggPSB0cnVlOworICAgIG1fY3VycmVudEJsb2NrID0gbV9wcm9jLmFkZEJs
b2NrKCk7CisgICAgbV9yb290QmxvY2tzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CisgICAgbV9z
dGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOworCisgICAgaWYgKENvbnRyb2xUeXBlOjppc1Ry
eShkYXRhKSkgeworICAgICAgICBpZiAoa2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoKQorICAgICAg
ICAgICAgZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaCgrK21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFk
ZFZhcmlhYmxlKHBvaW50ZXJUeXBlKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0
YS5jb252ZXJ0VHJ5VG9DYXRjaEFsbCgrK21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFkZFZhcmlh
YmxlKHBvaW50ZXJUeXBlKCkpKTsKKyAgICB9CisKKyAgICBIYW5kbGVyVHlwZSBoYW5kbGVyVHlw
ZSA9IGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCA/IEhhbmRsZXJUeXBlOjpDYXRjaCA6IEhhbmRs
ZXJUeXBlOjpDYXRjaEFsbDsKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IGhhbmRs
ZXJUeXBlLCBkYXRhLnRyeVN0YXJ0KCksIGRhdGEudHJ5RW5kKCksIDAsIG1fdHJ5RGVwdGgsIGV4
Y2VwdGlvbkluZGV4IH0pOworCisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVz
dG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgp
LCBtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBmYWxzZSk7CisKKyAgICBWYWx1ZSogcG9pbnRlciA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4obV9wcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKworICAgIHVuc2lnbmVkIGluZGV4SW5CdWZm
ZXIgPSAwOworCisgICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKQorICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4o
KSwgbG9jYWwsIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihpbmRleEluQnVmZmVyLCBwb2ludGVyLCBs
b2NhbC0+dHlwZSgpKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNv
bnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbElu
ZGV4KSB7CisgICAgICAgIGF1dG8mIGNvbnRyb2xEYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFj
aygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7CisgICAgICAgIGF1dG8mIGV4cHJlc3Npb25T
dGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrOworICAgICAgICBjb25uZWN0Q29udHJvbEVudHJ5KGluZGV4SW5CdWZmZXIs
IHBvaW50ZXIsIGNvbnRyb2xEYXRhLCBleHByZXNzaW9uU3RhY2ssIGRhdGEpOworICAgIH0KKwor
ICAgIFBhdGNocG9pbnRWYWx1ZSogcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgbV9wcm9jLmFkZFR1cGxlKHsgcG9pbnRlclR5cGUoKSwg
cG9pbnRlclR5cGUoKSB9KSwgb3JpZ2luKCkpOworICAgIHJlc3VsdC0+ZWZmZWN0cy5leGl0c1Np
ZGV3YXlzID0gdHJ1ZTsKKyAgICByZXN1bHQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2Ny
YXRjaFJlZ2lzdGVycygpKTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyTGF0ZSA9IFJlZ2lzdGVy
U2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpOworICAgIGNsb2JiZXJMYXRlLmFkZChH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJlc3VsdC0+Y2xvYmJlckxhdGUoY2xvYmJlckxh
dGUpOworICAgIHJlc3VsdC0+YXBwZW5kKGluc3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVS
ZWdpc3Rlcik7CisgICAgcmVzdWx0LT5yZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoVmFsdWVSZXA6
OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJlc3VsdC0+cmVzdWx0Q29uc3Ry
YWludHMuYXBwZW5kKFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7Cisg
ICAgcmVzdWx0LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBqaXQubW92ZShwYXJh
bXNbMl0uZ3ByKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uV2FzbVJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSkpOworICAgICAgICB9
KTsKKyAgICB9KTsKKworICAgIFZhbHVlKiBleGNlcHRpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRlclR5cGUoKSwgcmVz
dWx0LCAwKTsKKyAgICBzZXQoZGF0YS5leGNlcHRpb24oKSwgZXhjZXB0aW9uKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUoQ29udHJv
bFR5cGUmIHRhcmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXR1cm4gYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKHRhcmdldCwgZGF0YSk7Cit9CisKK2F1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiB0
YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5zaWdu
ZWQgdGFyZ2V0RGVwdGggPSAwOworICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkodGFyZ2V0KSkK
KyAgICAgICAgdGFyZ2V0RGVwdGggPSB0YXJnZXQudHJ5RGVwdGgoKTsKKworICAgIG1fZXhjZXB0
aW9uSGFuZGxlcnMuYXBwZW5kKHsgSGFuZGxlclR5cGU6OkRlbGVnYXRlLCBkYXRhLnRyeVN0YXJ0
KCksICsrbV9jYWxsU2l0ZUluZGV4LCAwLCBtX3RyeURlcHRoLCB0YXJnZXREZXB0aCB9KTsKKyAg
ICByZXR1cm4geyB9OworfQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRocm93KHVuc2lnbmVk
IGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gbV9wcm9jLmFk
ZDxQYXRjaHBvaW50VmFsdWU+KEIzOjpWb2lkLCBvcmlnaW4oKSk7CisgICAgcGF0Y2gtPmVmZmVj
dHMudGVybWluYWwgPSB0cnVlOworICAgIHBhdGNoLT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBW
YWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgIHBhdGNoLT5hcHBlbmQo
ZnJhbWVQb2ludGVyKCksIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHBh
dGNoLT5hcHBlbmQoZ2V0KGFyZ3NbaV0pLCBWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXIgPSBSZWdpc3Rl
clNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCk7CisgICAgY2xvYmJlci5hZGQoR1BSSW5mbzo6
YXJndW1lbnRHUFIyKTsKKyAgICBjbG9iYmVyLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjMpOwor
ICAgIHBhdGNoLT5jbG9iYmVyKGNsb2JiZXIpOworICAgIHBhdGNoLT5jbG9iYmVyTGF0ZShSZWdp
c3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisgICAgcGF0Y2gtPm51bUdQ
U2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5k
bGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMobV9jdXJyZW50QmxvY2ssIHBhdGNo
KTsKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBleGNlcHRpb25JbmRleCwgaGFuZGxl
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgw
KTsKKyAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKKworICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0Nh
bGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQ
cmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICAgICAgaml0LmFuZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNj
cmF0Y2gpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNj
cmF0Y2gsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6
Om9mZnNldE9mVk0oKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0g
aml0Lmp1bXAoKTsKKworICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmpp
dCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aCwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0
T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOworCisg
ICAgICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0KKyAgICAgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7
CisKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihleGNlcHRp
b25JbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIGppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJU
YWcpOworICAgICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0
aW9uSGFuZGxlclB0clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UaHJvdykpOworICAgICAg
ICB9KTsKKyAgICB9KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHBhdGNoKTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25l
ZCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNoID0gbV9wcm9jLmFkZDxQYXRjaHBvaW50VmFsdWU+KEIzOjpWb2lkLCBvcmln
aW4oKSk7CisgICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lz
dGVycygpKTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyTGF0ZTsKKyAgICBjbG9iYmVyTGF0ZS5h
ZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIy
KTsKKyAgICBwYXRjaC0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7CisgICAgcGF0Y2gtPmFwcGVu
ZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7
CisgICAgcGF0Y2gtPmFwcGVuZChmcmFtZVBvaW50ZXIoKSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZv
Ojphcmd1bWVudEdQUjEpKTsKKyAgICBwYXRjaC0+YXBwZW5kKGdldChkYXRhLmV4Y2VwdGlvbigp
KSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQUjIpKTsKKyAgICBwYXRjaC0+bnVt
R1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhh
bmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhtX2N1cnJlbnRCbG9jaywgcGF0
Y2gpOworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3RoaXMsIGhhbmRsZV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwor
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKKyAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
SW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSksIHNjcmF0Y2gpOworICAgICAgICB7CisgICAgICAg
ICAgICBhdXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxs
SGVscGVyczo6Tm9uWmVybywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJl
Y2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3Jh
dGNoKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3Jh
dGNoLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpv
ZmZzZXRPZlZNKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGpp
dC5qdW1wKCk7CisKKyAgICAgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gs
IFByZWNpc2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9m
Vk0oKSAtIFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBzY3JhdGNoKTsKKworICAg
ICAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOworICAgICAgICB9CisgICAgICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHNjcmF0Y2gpOwor
CisgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CisgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAg
ICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWcpOworICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmV0aHJvdykpOworICAgICAgICB9KTsKKyAg
ICB9KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHBhdGNoKTsKKworICAgIHJldHVybiB7
IH07Cit9CisKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRh
JiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIENh
bGxJbmZvcm1hdGlvbiB3YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxs
SW5mb3JtYXRpb25Gb3IobV9wYXJzZXItPnNpZ25hdHVyZSgpLCBDYWxsUm9sZTo6Q2FsbGVlKTsK
QEAgLTIzMDAsMTAgKzI4MjAsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29u
c3QgQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPgogICAgICAgICBC
Mzo6VmFsdWVSZXAgcmVwID0gd2FzbUNhbGxJbmZvLnJlc3VsdHNbaV07CiAgICAgICAgIGlmIChy
ZXAuaXNTdGFjaygpKSB7CiAgICAgICAgICAgICBCMzo6VmFsdWUqIGFkZHJlc3MgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QWRkLCBPcmlnaW4oKSwg
ZnJhbWVQb2ludGVyKCksIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHJlcC5vZmZzZXRGcm9tRlAo
KSkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6TWVtb3J5VmFs
dWU+KG1fcHJvYywgQjM6OlN0b3JlLCBPcmlnaW4oKSwgcmV0dXJuVmFsdWVzW29mZnNldCArIGld
LCBhZGRyZXNzKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6Ok1l
bW9yeVZhbHVlPihtX3Byb2MsIEIzOjpTdG9yZSwgT3JpZ2luKCksIGdldChyZXR1cm5WYWx1ZXNb
b2Zmc2V0ICsgaV0pLCBhZGRyZXNzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFT
U0VSVChyZXAuaXNSZWcoKSk7Ci0gICAgICAgICAgICBwYXRjaC0+YXBwZW5kKHJldHVyblZhbHVl
c1tvZmZzZXQgKyBpXSwgcmVwKTsKKyAgICAgICAgICAgIHBhdGNoLT5hcHBlbmQoZ2V0KHJldHVy
blZhbHVlc1tvZmZzZXQgKyBpXSksIHJlcCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIzMTMs
MTIgKzI4MzMsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJv
bERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPgogCiBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZEJyYW5jaChDb250cm9sRGF0YSYgZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgdW5p
ZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnBoaXMpOworICAgIHVuaWZ5VmFs
dWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YSk7CiAKICAgICBCYXNpY0Jsb2NrKiB0YXJn
ZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CiAgICAgaWYgKGNvbmRpdGlvbikgewog
ICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNo
LCBvcmlnaW4oKSwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgZ2V0KGNvbmRpdGlvbikpOwog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sodGFy
Z2V0KSwgRnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikpOwogICAgICAgICB0YXJnZXQtPmFk
ZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKICAgICAgICAgY29udGludWF0aW9uLT5hZGRQ
cmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CkBAIC0yMzMzLDExICsyODUzLDEyIEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIGNvbnN0CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMs
IENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNr
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVU5VU0VEX1BBUkFNKGV4cHJlc3Npb25TdGFjayk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKQotICAgICAg
ICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIHRhcmdldHNbaV0tPnBoaXMp
OwotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGVmYXVsdFRhcmdl
dC5waGlzKTsKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCAq
dGFyZ2V0c1tpXSk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBk
ZWZhdWx0VGFyZ2V0KTsKIAotICAgIFN3aXRjaFZhbHVlKiBzd2l0Y2hWYWx1ZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8U3dpdGNoVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGNvbmRpdGlv
bik7CisgICAgU3dpdGNoVmFsdWUqIHN3aXRjaFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxTd2l0Y2hWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ2V0KGNvbmRpdGlvbikpOwogICAg
IHN3aXRjaFZhbHVlLT5zZXRGYWxsVGhyb3VnaChGcmVxdWVudGVkQmxvY2soZGVmYXVsdFRhcmdl
dC50YXJnZXRCbG9ja0ZvckJyYW5jaCgpKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0
YXJnZXRzLnNpemUoKTsgKytpKQogICAgICAgICBzd2l0Y2hWYWx1ZS0+YXBwZW5kQ2FzZShTd2l0
Y2hDYXNlKGksIEZyZXF1ZW50ZWRCbG9jayh0YXJnZXRzW2ldLT50YXJnZXRCbG9ja0ZvckJyYW5j
aCgpKSkpOwpAQCAtMjM1MSw3ICsyODcyLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjplbmRCbG9j
ayhDb250cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXIKIAog
ICAgIEFTU0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgpID09IGRhdGEuc2lnbmF0dXJlKCktPnJl
dHVybkNvdW50KCkpOwogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpICE9IEJsb2NrVHlwZTo6TG9v
cCkKLSAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkYXRhLnBo
aXMpOworICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEp
OwogCiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1
bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CiAgICAgZGF0YS5jb250aW51YXRpb24t
PmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKQEAgLTIzNjMsMzAgKzI4ODQsMzQgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50
cnksIGNvbnN0IFN0YWNrJiBleHByZXMKIHsKICAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5
LmNvbnRyb2xEYXRhOwogICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5jb250aW51YXRpb247Cisg
ICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOwogCiAgICAgaWYgKGRhdGEuYmxvY2tU
eXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgewogICAgICAgICBkYXRhLnNwZWNpYWwtPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CiAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hZGRQcmVkZWNlc3NvcihkYXRhLnNwZWNpYWwpOwotICAg
IH0KKyAgICB9IGVsc2UgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUcnkgfHwg
ZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoKQorICAgICAgICAtLW1fdHJ5RGVw
dGg7CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5cGU6Okxvb3ApIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJlKCktPnJldHVybkNv
dW50KCk7ICsraSkgewogICAgICAgICAgICAgVmFsdWUqIHJlc3VsdCA9IGRhdGEucGhpc1tpXTsK
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgICAg
IGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChkYXRhLnNp
Z25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpLCByZXN1bHQpOworICAgICAgICAgICAgZW50cnkuZW5j
bG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRhdGEuc2lnbmF0dXJlKCkt
PnJldHVyblR5cGUoaSksIHB1c2gocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICBtX291dGVyTG9vcHMucmVtb3ZlTGFzdCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkpCisgICAgICAgICAgICBpZiAo
aSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICArK21fc3RhY2tT
aXplOwogICAgICAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVu
ZChleHByZXNzaW9uU3RhY2tbaV0pOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIFR5cGUgcmV0dXJuVHlwZSA9IGRhdGEuc2lnbmF0dXJl
KCktPnJldHVyblR5cGUoaSk7Ci0gICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNz
aW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHJldHVyblR5cGUsIGNvbnN0YW50KHRvQjNUeXBl
KHJldHVyblR5cGUpLCAweGJiYWRiZWVmKSk7CisgICAgICAgICAgICAgICAgZW50cnkuZW5jbG9z
ZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHJldHVyblR5cGUsIHB1c2goY29u
c3RhbnQodG9CM1R5cGUocmV0dXJuVHlwZSksIDB4YmJhZGJlZWYpKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKKwogICAgIC8vIFRvcExldmVsIGRvZXMgbm90IGhhdmUgYW55
IGNvZGUgYWZ0ZXIgdGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0IGEgcmV0dXJu
IGhlcmUuCiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbCkK
ICAgICAgICAgcmV0dXJuIGFkZFJldHVybihlbnRyeS5jb250cm9sRGF0YSwgZW50cnkuZW5jbG9z
ZWRFeHByZXNzaW9uU3RhY2spOwpAQCAtMjQwMCwxMiArMjkyNSwxMiBAQCBCMzo6VmFsdWUqIEIz
SVJHZW5lcmF0b3I6OmNyZWF0ZUNhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBPcmln
aW4gb3JpZ2luLAogICAgIFZlY3RvcjxCMzo6Q29uc3RyYWluZWRWYWx1ZT4gY29uc3RyYWluZWRB
cmd1bWVudHM7CiAgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5n
Q29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcihzaWduYXR1cmUpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQotICAgICAgICBjb25zdHJhaW5lZEFy
Z3VtZW50cy5hcHBlbmQoQjM6OkNvbnN0cmFpbmVkVmFsdWUoYXJnc1tpXSwgd2FzbUNhbGxJbmZv
LnBhcmFtc1tpXSkpOworICAgICAgICBjb25zdHJhaW5lZEFyZ3VtZW50cy5hcHBlbmQoQjM6OkNv
bnN0cmFpbmVkVmFsdWUoZ2V0KGJsb2NrLCBhcmdzW2ldKSwgd2FzbUNhbGxJbmZvLnBhcmFtc1tp
XSkpOwogCiAgICAgbV9wcm9jLnJlcXVlc3RDYWxsQXJnQXJlYVNpemVJbkJ5dGVzKFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHdhc21DYWxsSW5mby5oZWFk
ZXJBbmRBcmd1bWVudFN0YWNrU2l6ZUluQnl0ZXMpKTsKIAogICAgIEIzOjpUeXBlIHJldHVyblR5
cGUgPSB0b0IzUmVzdWx0VHlwZSgmc2lnbmF0dXJlKTsKLSAgICBCMzo6UGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3By
b2MsIHJldHVyblR5cGUsIG9yaWdpbik7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbV9wcm9jLmFkZDxQYXRjaHBvaW50VmFsdWU+KHJldHVyblR5cGUsIG9yaWdpbik7CiAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3Rl
cnMoKSk7CiAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxl
UmVnaXN0ZXJzRm9ySlNDYWxsKCkpOwogICAgIHBhdGNocG9pbnRGdW5jdG9yKHBhdGNocG9pbnQp
OwpAQCAtMjQxNyw2ICsyOTQyLDcgQEAgQjM6OlZhbHVlKiBCM0lSR2VuZXJhdG9yOjpjcmVhdGVD
YWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9jaywgT3JpZ2luIG9yaWdpbiwKICAgICAgICAg
ICAgIHJlc3VsdENvbnN0cmFpbnRzLmFwcGVuZChCMzo6VmFsdWVSZXAodmFsdWVMb2NhdGlvbikp
OwogICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50cyA9IFdURk1vdmUocmVzdWx0
Q29uc3RyYWludHMpOwogICAgIH0KKyAgICBibG9jay0+YXBwZW5kKHBhdGNocG9pbnQpOwogICAg
IHJldHVybiBwYXRjaHBvaW50OwogfQogCkBAIC0yNDM4LDExICsyOTY0LDExIEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxCMzo6VHlwZT4mIHR1cGxl
ID0gbV9wcm9jLnR1cGxlRm9yVHlwZShyZXR1cm5UeXBlKTsKICAgICAgICAgICAgIEFTU0VSVChz
aWduYXR1cmUucmV0dXJuQ291bnQoKSA9PSB0dXBsZS5zaXplKCkpOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxFeHRy
YWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHR1cGxlW2ldLCBjYWxsUmVzdWx0LCBpKSk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHVwbGVbaV0sIGNhbGxSZXN1bHQs
IGkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OiB7
Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChjYWxsUmVzdWx0KTsKKyAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKHB1c2goY2FsbFJlc3VsdCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMjQ3MSw4ICsyOTk3LDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwKICAgICAgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNv
dWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1Nh
dmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKLSAgICAgICAgICAgICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
KSB7CisgICAgICAgICAgICAgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBw
cmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoaXNXYXNtQmxvY2ssIHBhdGNocG9pbnQpOwor
ICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdGhpcywgaGFuZGxlLCB1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAg
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRo
aXMpOwogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50
aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwpAQCAtMjQ5OCw4ICsz
MDI2LDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAvLyBXZSBw
ZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRo
YXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlu
bmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcp
KTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3JldHVyblR5cGVd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICAgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5k
bGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoaXNFbWJlZGRlckJsb2NrLCBwYXRj
aHBvaW50KTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3RoaXMs
IGhhbmRsZSwgcmV0dXJuVHlwZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAg
ICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICAgICAg
ICAgICAgICBqaXQuY2FsbChwYXJhbXNbcGFyYW1zLnByb2MoKS5yZXN1bHRDb3VudChyZXR1cm5U
eXBlKV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICB9KSk7CkBAIC0yNTI3LDggKzMwNTcsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LAogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciB0aGUgc2l6ZSByZWdpc3Rl
ciBzaW5jZSB0aGUgTExJbnQgYWx3YXlzIGJvdW5kcyBjaGVja3MKICAgICAgICAgICAgICAgICBp
ZiAobV9tb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZyB8fCBtX2luZm8ubWVtb3J5LmlzU2hh
cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lz
dGVyU2V0IHsgUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS5ib3VuZHNDaGVja2luZ1NpemVSZWdp
c3RlciB9KTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICAgICAgUGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2Vw
dGlvbnMobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQpOworICAgICAgICAgICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbdGhpcywgaGFuZGxlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAg
ICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVh
ckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5h
cHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNh
bGwpLCBmdW5jdGlvbkluZGV4IH0pOwpAQCAtMjU0Myw3ICszMDc1LDcgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25l
ZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgpOworICAgIFZh
bHVlKiBjYWxsZWVJbmRleCA9IGdldChhcmdzLnRha2VMYXN0KCkpOwogICAgIEFTU0VSVChzaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKIAogICAgIG1fbWFrZXNDYWxs
cyA9IHRydWU7CkBAIC0yNTUyLDExICszMDg0LDExIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
CiAgICAgLy8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBmb3Igb3VyIHN0YWNrIGNoZWNrIGNhbGN1
bGF0aW9uLgogICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1K
U0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOwogCi0g
ICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlcjsKLSAgICBFeHByZXNzaW9u
VHlwZSBpbnN0YW5jZXNCdWZmZXI7Ci0gICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlckxlbmd0aDsKKyAgICBWYWx1ZSogY2FsbGFibGVGdW5jdGlvbkJ1ZmZlcjsKKyAgICBW
YWx1ZSogaW5zdGFuY2VzQnVmZmVyOworICAgIFZhbHVlKiBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVy
TGVuZ3RoOwogICAgIHsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLAorICAgICAgICBWYWx1ZSogdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAog
ICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6
b2Zmc2V0T2ZUYWJsZVB0cihtX251bUltcG9ydEZ1bmN0aW9ucywgdGFibGVJbmRleCkpKTsKICAg
ICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAg
ICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oRnVuY1JlZlRhYmxlOjpvZmZzZXRPZkZ1
bmN0aW9ucygpKSk7CkBAIC0yNTc4LDE3ICszMTEwLDE3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0CiAKICAgICBjYWxsZWVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgpOwogCi0gICAgRXhwcmVzc2lv
blR5cGUgY2FsbGFibGVGdW5jdGlvbjsKKyAgICBWYWx1ZSogY2FsbGFibGVGdW5jdGlvbjsKICAg
ICB7CiAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBpbiB0aGUgdGFibGUgaW5kZXggc3Bh
Y2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgotICAgICAgICBFeHByZXNzaW9uVHlwZSBvZmZzZXQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwgb3JpZ2luKCksCisg
ICAgICAgIFZhbHVlKiBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIE11bCwgb3JpZ2luKCksCiAgICAgICAgICAgICBjYWxsZWVJbmRleCwgY29uc3RhbnQo
cG9pbnRlclR5cGUoKSwgc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24pKSk7CiAg
ICAgICAgIGNhbGxhYmxlRnVuY3Rpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIsIG9mZnNldCk7
CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
biBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25h
dHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4KICAgICAgICAgLy8gRklY
TUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRsZXJzLCB3ZSBjYW4ganVzdCBsZXQgdGhlIGNhbGwg
ZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4IGlzIDAuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcyMTAKICAgICAgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpID09IHNp
emVvZih1aW50NjRfdCksICJMb2FkIGNvZGVnZW4gYXNzdW1lcyBpNjQiKTsKLSAgICAgICAgRXhw
cmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgY2FsbGFibGVG
dW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSk7CisgICAgICAgIFZhbHVlKiBjYWxsZWVTaWduYXR1
cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgSW50NjQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90
PihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkp
KTsKICAgICAgICAgewogICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAogICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1
YWwsIG9yaWdpbigpLApAQCAtMjYwMiw3ICszMTM0LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXQKIAogICAgICAgICAvLyBDaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgdGhlIHZhbHVlIHdl
IGV4cGVjdC4KICAgICAgICAgewotICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUgZXhwZWN0ZWRT
aWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpOwor
ICAgICAgICAgICAgVmFsdWUqIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmUpKTsKICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNr
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBv
cmlnaW4oKSwKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIE5vdEVxdWFsLCBvcmlnaW4oKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgsIGV4cGVj
dGVkU2lnbmF0dXJlSW5kZXgpKTsKIApAQCAtMjYxNiw3ICszMTQ4LDcgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXQKICAgICAgICAgY2FsbGVlSW5kZXgsIGNvbnN0YW50KHBvaW50ZXJUeXBlKCks
IHNpemVvZihJbnN0YW5jZSopKSk7CiAgICAgVmFsdWUqIGNhbGxlZUluc3RhbmNlID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBBZGQsIG9yaWdpbigpLCBpbnN0YW5jZXNCdWZmZXIsIG9mZnNldCkpOwotICAgIEV4
cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgIFZhbHVl
KiBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKICAgICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+
KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2Nh
dGlvbigpKSkpOwogCkBAIC0yNjI1LDcgKzMxNTcsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxSZWYoY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWUgPSBhcmdzLnRh
a2VMYXN0KCk7CisgICAgVmFsdWUqIGNhbGxlZSA9IGdldChhcmdzLnRha2VMYXN0KCkpOwogICAg
IEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKICAgICBt
X21ha2VzQ2FsbHMgPSB0cnVlOwogCkBAIC0yNjQyLDI0ICszMTc0LDI3IEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlCiAgICAgVmFsdWUqIGNhbGxlZUluc3RhbmNlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBB
ZGQsIG9yaWdpbigpLCBqc0NhbGxlZUluc3RhbmNlLCBpbnN0YW5jZU9mZnNldCkpOwogCi0gICAg
RXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgVmFs
dWUqIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLCBjYWxsZWUsCiAgICAgICAgICAgICBzYWZlQ2FzdDxpbnQzMl90PihXZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZTo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkpKSk7CiAK
ICAgICByZXR1cm4gZW1pdEluZGlyZWN0Q2FsbChjYWxsZWVJbnN0YW5jZSwgY2FsbGVlQ29kZSwg
c2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKTsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlm
eShjb25zdCBFeHByZXNzaW9uVHlwZSBwaGksIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSkK
K3ZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnkoVmFsdWUqIHBoaSwgY29uc3QgRXhwcmVzc2lvblR5
cGUgc291cmNlKQogewotICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCBzb3VyY2UsIHBoaSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGdldChzb3VyY2UpLCBwaGkp
OwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IFN0
YWNrJiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0KQordm9pZCBCM0lSR2Vu
ZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYgcmVzdWx0U3RhY2ssIGNv
bnN0IENvbnRyb2xEYXRhJiBibG9jaykKIHsKLSAgICBBU1NFUlQocmVzdWx0LnNpemUoKSA8PSBy
ZXN1bHRTdGFjay5zaXplKCkpOworICAgIGNvbnN0IFZlY3RvcjxWYWx1ZSo+JiBwaGlzID0gYmxv
Y2sucGhpczsKKyAgICBzaXplX3QgcmVzdWx0U2l6ZSA9IHBoaXMuc2l6ZSgpOwogCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kpCi0gICAgICAgIHVuaWZ5KHJl
c3VsdFtyZXN1bHQuc2l6ZSgpIC0gMSAtIGldLCByZXN1bHRTdGFjay5hdChyZXN1bHRTdGFjay5z
aXplKCkgLSAxIC0gaSkpOworICAgIEFTU0VSVChyZXN1bHRTaXplIDw9IHJlc3VsdFN0YWNrLnNp
emUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdFNpemU7ICsraSkKKyAg
ICAgICAgdW5pZnkocGhpc1tyZXN1bHRTaXplIC0gMSAtIGldLCByZXN1bHRTdGFjay5hdChyZXN1
bHRTdGFjay5zaXplKCkgLSAxIC0gaSkpOwogfQogCiBzdGF0aWMgdm9pZCBkdW1wRXhwcmVzc2lv
blN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEIzSVJHZW5lcmF0b3I6OlN0
YWNrJiBleHByZXNzaW9uU3RhY2spCkBAIC0yNzAzLDggKzMyMzgsMTEgQEAgRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShD
b21waWxhdGlvbkMKIAogICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRK
SVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAgICBjb21waWxhdGlvbkNvbnRleHQu
d2FzbUVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKKyAgICBjb21w
aWxhdGlvbkNvbnRleHQucHJvY2VkdXJlID0gbWFrZVVuaXF1ZTxQcm9jZWR1cmU+KCk7CisKKyAg
ICBQcm9jZWR1cmUmIHByb2NlZHVyZSA9ICpjb21waWxhdGlvbkNvbnRleHQucHJvY2VkdXJlOwog
Ci0gICAgUHJvY2VkdXJlIHByb2NlZHVyZTsKKyAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVu
dHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKIAogICAgIHByb2NlZHVy
ZS5zZXRPcmlnaW5QcmludGVyKFtdIChQcmludFN0cmVhbSYgb3V0LCBPcmlnaW4gb3JpZ2luKSB7
CiAgICAgICAgIGlmIChvcmlnaW4uZGF0YSgpKQpAQCAtMjcyNSw2ICszMjYzLDcgQEAgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZShDb21waWxhdGlvbkMKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJz
ZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUo
KSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNl
ci5wYXJzZSgpKTsKIAorICAgIGlyR2VuZXJhdG9yLmluc2VydEVudHJ5U3dpdGNoKCk7CiAgICAg
aXJHZW5lcmF0b3IuaW5zZXJ0Q29uc3RhbnRzKCk7CiAKICAgICBwcm9jZWR1cmUucmVzZXRSZWFj
aGFiaWxpdHkoKTsKQEAgLTI3MzYsMTggKzMyNzUsNDMgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlv
bkMKICAgICBkYXRhTG9nSWYoV2FzbUIzSVJHZW5lcmF0b3JJbnRlcm5hbDo6dmVyYm9zZSwgIlBv
c3QgU1NBOiAiLCBwcm9jZWR1cmUpOwogICAgIAogICAgIHsKKyAgICAgICAgaWYgKHNob3VsZER1
bXBEaXNhc3NlbWJseUZvcihjb21waWxhdGlvbk1vZGUpKQorICAgICAgICAgICAgcHJvY2VkdXJl
LmNvZGUoKS5zZXREaXNhc3NlbWJsZXIobWFrZVVuaXF1ZTxCMzo6QWlyOjpEaXNhc3NlbWJsZXI+
KCkpOwogICAgICAgICBCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJlKTsKICAgICAg
ICAgQjM6OmdlbmVyYXRlKHByb2NlZHVyZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlw
b2ludEpJVCk7CiAgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJv
ZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKICAgICAgICAgcmVzdWx0LT5l
bnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVlU2F2ZVJlZ2lz
dGVyQXRPZmZzZXRMaXN0KCk7CiAgICAgfQogCisgICAgcmVzdWx0LT5zdGFja21hcHMgPSBpckdl
bmVyYXRvci50YWtlU3RhY2ttYXBzKCk7CisgICAgcmVzdWx0LT5leGNlcHRpb25IYW5kbGVycyA9
IGlyR2VuZXJhdG9yLnRha2VFeGNlcHRpb25IYW5kbGVycygpOworCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAordm9pZCBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhWZWN0b3I8Q29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiBoYW5kbGVycywgY29uc3Qg
SW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIGNvbnN0IENvbXBpbGF0aW9uQ29udGV4dCYgY29u
dGV4dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBpZiAoIWNvbnRleHQucHJvY2Vk
dXJlKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAw
OworICAgIHVuc2lnbmVkIG51bUVudHJ5cG9pbnRzID0gY29udGV4dC5wcm9jZWR1cmUtPm51bUVu
dHJ5cG9pbnRzKCk7CisgICAgZm9yIChjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVy
SW5mbyA6IGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycykgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVChlbnRyeXBvaW50SW5kZXggPCBudW1FbnRyeXBvaW50cyk7CisgICAgICAgIGlmIChoYW5k
bGVySW5mby5tX3R5cGUgPT0gSGFuZGxlclR5cGU6OkRlbGVnYXRlKSB7CisgICAgICAgICAgICBo
YW5kbGVycy5hcHBlbmQoeyB9KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgKytlbnRyeXBvaW50SW5kZXg7CisgICAgICAgIGhhbmRsZXJzLmFwcGVuZChsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oY29udGV4dC5wcm9jZWR1
cmUtPmNvZGUoKS5lbnRyeXBvaW50TGFiZWwoZW50cnlwb2ludEluZGV4KSkpOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVChlbnRyeXBvaW50SW5kZXggPT0gbnVtRW50cnlwb2ludHMgLSAxKTsK
K30KKwogLy8gQ3VzdG9tIHdhc20gb3BzLiBUaGVzZSBhcmUgdGhlIG9uZXMgdG9vIG1lc3N5IHRv
IGRvIGluIHdhc20uanNvbi4KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9yTW9k
T3JEaXYoQjM6Ok9wY29kZSBvcGVyYXRpb24sIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Np
b25UeXBlIHJpZ2h0KQordm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9yTW9kT3JEaXYo
QjM6Ok9wY29kZSBvcGVyYXRpb24sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCiB7CiAgICAg
QVNTRVJUKG9wZXJhdGlvbiA9PSBEaXYgfHwgb3BlcmF0aW9uID09IE1vZCB8fCBvcGVyYXRpb24g
PT0gVURpdiB8fCBvcGVyYXRpb24gPT0gVU1vZCk7CiAgICAgY29uc3QgQjM6OlR5cGUgdHlwZSA9
IGxlZnQtPnR5cGUoKTsKQEAgLTI3NzYsMTA2ICszMzQwLDEyNSBAQCB2b2lkIEIzSVJHZW5lcmF0
b3I6OmVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlIG9wZXJhdGlvbiwgRXhwcmVzc2lv
blR5cGUgbAogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyRGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNz
aW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBEaXY7CisgICAgVmFsdWUqIGxlZnQgPSBn
ZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFyKTsKICAgICBlbWl0
Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmln
aHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVM+
KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyUmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5cGUgcmln
aHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBj
b25zdCBCMzo6T3Bjb2RlIG9wID0gTW9kOworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIp
OworICAgIFZhbHVlKiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1v
ZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7
CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsgfTsK
IH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRp
dlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyRGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5cGUg
cmlnaHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAg
ICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVURpdjsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChsZWZ0
VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVja3NG
b3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7Cisg
ICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1w
bGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtVT4oRXhwcmVz
c2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIz
OjpPcGNvZGUgb3AgPSBVTW9kOworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAg
IFZhbHVlKiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2
KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQg
PSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdp
bigpLCBsZWZ0LCByaWdodCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZTPihFeHByZXNzaW9uVHlwZSBs
ZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlM+KEV4
cHJlc3Npb25UeXBlIGxlZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBv
cCA9IERpdjsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChsZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmln
aHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwg
cmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwg
cmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVz
c2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1TPihFeHByZXNzaW9uVHlw
ZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBNb2Q7Cisg
ICAgVmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJp
Z2h0VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAg
ICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIGNoaWxs
KG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hpbGwob3ApLCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhw
cmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPihFeHByZXNzaW9u
VHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBVRGl2
OworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVlKiByaWdodCA9IGdl
dChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7
Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBv
cCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCkp
OwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlw
ZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnRW
YXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVNb2Q7CisgICAgVmFs
dWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFy
KTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMkN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6
PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50
VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
YXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKICAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczMyKHBhcmFtc1sxXS5n
cHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
ID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0
ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1h
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcg
PSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2lu
KCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
OwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQuY291
bnRUcmFpbGluZ1plcm9zNjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAg
IH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVz
dWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJl
dHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogI2lmIENQ
VShYODZfNjQpCiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0NvdW50UG9wdWxhdGlv
bigpKSB7CiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7
CkBAIC0yODg0LDE5ICszNDY3LDIwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmCiAgICAgICAg
ICAgICBqaXQuY291bnRQb3B1bGF0aW9uMzIocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3By
KCkpOwogICAgICAgICB9KTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6
Om5vbmUoKTsKLSAgICAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAgICAgcmVzdWx0ID0g
cHVzaChwYXRjaHBvaW50KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAjZW5kaWYKIAog
ICAgIFZhbHVlKiBmdW5jQWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uUG9wY291bnQzMikpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksIEVmZmVjdHM6Om5vbmUo
KSwgZnVuY0FkZHJlc3MsIGFyZyk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLCBFZmZlY3RzOjpu
b25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0
ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNz
aW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBl
IGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAg
IFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICNpZiBDUFUoWDg2XzY0KQogICAgIGlmIChNYWNy
b0Fzc2VtYmxlcjo6c3VwcG9ydHNDb3VudFBvcHVsYXRpb24oKSkgewogICAgICAgICBQYXRjaHBv
aW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9p
bnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOwpAQCAtMjkwNSwxOSArMzQ4OSwyMCBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJgogICAgICAgICAgICAgaml0LmNvdW50UG9wdWxhdGlv
bjY0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAgfSk7CiAgICAg
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgICAgIHJlc3Vs
dCA9IHBhdGNocG9pbnQ7CisgICAgICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogI2VuZGlmCiAKICAgICBWYWx1ZSogZnVuY0FkZHJlc3Mg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblBvcGNvdW50NjQpKTsK
LSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJv
YywgSW50NjQsIG9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpOwor
ICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPiht
X3Byb2MsIEludDY0LCBvcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLCBmdW5jQWRkcmVzcywgYXJn
KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPEY2
NENvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBvcmlnaW4oKSk7CiAgICAgaWYgKGlz
WDg2KCkpCiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CkBA
IC0yOTMyLDEzICszNTE3LDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVy
dFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlCiAjZW5kaWYKICAg
ICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJl
c3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICBy
ZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyQ29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zh
cik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIG9yaWdpbigpKTsKICAgICBp
ZiAoaXNYODYoKSkKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0g
MTsKQEAgLTI5NTMsNjUgKzM1MzksNzAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb24KICNlbmRp
ZgogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0g
ICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwog
ICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7
CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBvcmlnaW4oKSk7CiAgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5yb3VuZFRvd2FyZE5lYXJl
c3RJbnREb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOwogICAgIH0pOwog
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0g
cGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7
IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZWFy
ZXN0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBv
aW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBl
bmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludEZsb2F0KHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7Cisg
ICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1w
bGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFRydW5jPihFeHByZXNzaW9uVHlw
ZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAg
ICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
RG91YmxlLCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6
OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAg
ICAgICAgIGppdC5yb3VuZFRvd2FyZFplcm9Eb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNb
MF0uZnByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNo
cG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyVHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJn
VmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBGbG9hdCwgb3JpZ2luKCkpOwogICAg
IHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQucm91bmRUb3dhcmRa
ZXJvRmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOwogICAgIH0pOwogICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0
Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07
CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJU
cnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5j
U0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVl
KiBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLXN0YXRpY19j
YXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CiAgICAg
VmFsdWUqIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0
aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAtIDEu
MCkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMwMjgsMTMgKzM2MTksMTQgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2ND4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9JbnQz
MihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50
OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAog
dGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Yz
Mj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihF
eHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1heCA9
IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNfY2FzdDxmbG9h
dD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CiAgICAgVmFsdWUqIG1p
biA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZs
b2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSog
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJp
dEFuZCwgb3JpZ2luKCksCkBAIC0zMDUxLDE0ICszNjQzLDE1IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5CiAgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9JbnQzMihwYXJhbXNbMV0uZnByKCks
IHBhcmFtc1swXS5ncHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVm
ZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1
c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogCiB0ZW1wbGF0ZTw+Ci1hdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFy
Z1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZh
bHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRG91Ymxl
LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogLTIuMCkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25z
dGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOwogICAgIFZhbHVlKiBv
dXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0
QW5kLCBvcmlnaW4oKSwKQEAgLTMwNzUsMTMgKzM2NjgsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50MzIocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBF
ZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBw
dXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJn
VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFs
dWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChGbG9hdCwg
Yml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQzMl90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0yLjApKSk7CiAgICAg
VmFsdWUqIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRp
Y19jYXN0PGZsb2F0PigtMS4wKSkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMw
OTgsMTMgKzM2OTIsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRy
dW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRy
dW5jYXRlRmxvYXRUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAg
ICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICBy
ZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7
CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90
Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4o
KSkpKTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWlu
dDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6
bWluKCkpKSk7CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzEyMSwxMyArMzcxNiwx
NCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0PihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVU
b0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNo
cG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9Owog
fQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1
bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VG
NjQ+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSog
bWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0
PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogLTIuMCkpOwog
ICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4o
LTEuMCkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMxNjQsMTMgKzM3NjAsMTQg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9V
aW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50
KTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwot
ICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsK
ICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJn
VmFyKTsKICAgICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50
MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+Ojpt
aW4oKSkpKTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1pbigpKSkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMxODcsMTMgKzM3ODQs
MTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRmxvYXRU
b0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNo
cG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9Owog
fQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1
bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VG
MzI+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSog
bWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0
PGZsb2F0PigtMi4wKSkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lz
ZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKICAgICBWYWx1ZSog
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJp
dEFuZCwgb3JpZ2luKCksCkBAIC0zMjMwLDcgKzM4MjgsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeQogICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDY0KHBhcmFtc1sxXS5mcHIoKSwg
cGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CiAgICAgfSk7CiAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50
OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKaW5kZXgg
MWQ2NjIxMGUxYjUwNDNhOWE0MWZhNjEzZjUyMjQ5M2FlZTMwNzQ3YS4uMjg5MWQxZTQ0ZjNhZjM3
ZDg2MTkzNDY2ZjlkYzk3ZTZiOGRkNjE5YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCkBAIC00MCw3ICs0MCwxMyBAQAogCiBleHRlcm4gIkMi
IHZvaWQgZHVtcFByb2NlZHVyZSh2b2lkKik7CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEIzIHsKK2NsYXNzIFByb2NlZHVy
ZTsKK30KKworbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBNZW1vcnlJbmZvcm1hdGlvbjsKIApA
QCAtNDgsMTAgKzU0LDEzIEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDQ2FsbEhlbHBlcnM+IGVtYmVkZGVyRW50cnlwb2ludEpJVDsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q0NhbGxIZWxwZXJzPiB3YXNtRW50cnlwb2ludEpJVDsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gd2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxCMzo6UHJvY2VkdXJlPiBwcm9jZWR1cmUgeyBudWxscHRyIH07CiB9
OwogCiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4g
cGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYs
IGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIHVuc2ln
bmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWlu
dDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIpOwogCit2
b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKFZlY3RvcjxDb2RlTG9jYXRpb25M
YWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJbnRlcm5hbEZ1
bmN0aW9uKiwgY29uc3QgQ29tcGlsYXRpb25Db250ZXh0JiwgTGlua0J1ZmZlciYpOworCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZX0Iz
SklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4IGFm
MmZjNzJiYWNiYjM0YzhiMzM1NzhkOTA3YjM3YzYwMjQwZmI5ZmIuLjQ2NmEyNjBiZmYyNDhiZGI0
MjU5M2IwNGM3MDdlNWZiODkxZWFhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbi5jcHAKQEAgLTY2LDYgKzY2LDcgQEAgYm9vbCBCQlFQbGFuOjpwcmVwYXJlSW1w
bCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25z
LnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fY29tcGlsYXRpb25Db250ZXh0cy5y
ZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV90aWVyVXBDb3VudHMucmVzaXplKGZ1bmN0
aW9ucy5zaXplKCkpOwogCkBAIC0xMDksNiArMTEwLDkgQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENv
bXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIFZl
Y3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4gZXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhl
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBmdW5jdGlvbi5nZXQoKSwgY29udGV4dCwgbGlua0J1
ZmZlcik7CisKICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gbV9mdW5jdGlvbkluZGV4
ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwogICAgIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxG
dW5jdGlvblNpZ25hdHVyZUluZGljZXNbbV9mdW5jdGlvbkluZGV4XTsKICAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOwpAQCAtMTE4LDcgKzEyMiw3IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFn
PiBlbnRyeXBvaW50OwogICAgIHsKLSAgICAgICAgUmVmPEJCUUNhbGxlZT4gY2FsbGVlID0gQkJR
Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbklu
ZGV4U3BhY2UpLCBXVEZNb3ZlKHRpZXJVcCksIFdURk1vdmUodW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMpKTsKKyAgICAgICAgUmVmPEJCUUNhbGxlZT4gY2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUo
V1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZN
b3ZlKHRpZXJVcCksIFdURk1vdmUodW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpLCBXVEZNb3ZlKGZ1
bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyks
IFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVl
Qml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKICAgICAgICAgQVNTRVJUKCFtX2NvZGVCbG9j
ay0+bV9iYnFDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0pOwogICAgICAgICBlbnRyeXBvaW50ID0g
Y2FsbGVlLT5lbnRyeXBvaW50KCk7CkBAIC0xOTQsMTEgKzE5OCwxNSBAQCBzdGQ6OnVuaXF1ZV9w
dHI8SW50ZXJuYWxGdW5jdGlvbj4gQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZQogICAgIGJvb2wgZm9yY2VVc2luZ0IzID0gZmFsc2U7CiAgICAgaWYgKE9wdGlv
bnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpICYmIG1fbW9kdWxlSW5mb3JtYXRp
b24tPmNvZGVTZWN0aW9uU2l6ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJl
c2hvbGQoKSkKICAgICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKKyAgICBlbHNlIGlmICghbV9t
b2R1bGVJbmZvcm1hdGlvbi0+bV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrR2V0
KGZ1bmN0aW9uSW5kZXgpKQorICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOworICAgIGVsc2Ug
aWYgKCFPcHRpb25zOjp3YXNtQkJRVXNlc0FpcigpKQorICAgICAgICBmb3JjZVVzaW5nQjMgPSB0
cnVlOwogCi0gICAgaWYgKCFmb3JjZVVzaW5nQjMgJiYgT3B0aW9uczo6d2FzbUJCUVVzZXNBaXIo
KSkKLSAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWlyKGNv
bnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtX21v
ZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7Ci0g
ICAgZWxzZQorICAgIGlmIChmb3JjZVVzaW5nQjMpCiAgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJl
c3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0
aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCk7CisgICAgZWxzZQorICAgICAgICBwYXJzZUFu
ZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIoY29udGV4dCwgZnVuY3Rpb24sIHNp
Z25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIAogICAgIGlmIChVTkxJS0VMWSgh
cGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2Nr
IH07CkBAIC0yMjIsMTMgKzIzMCwxNSBAQCB2b2lkIEJCUVBsYW46OmRpZENvbXBsZXRlQ29tcGls
YXRpb24oKQogICAgICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBmdW5j
dGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwog
ICAgICAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKICAgICAgICAgeworICAgICAgICAgICAgSW50ZXJu
YWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbklu
ZGV4XS5nZXQoKTsKICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53
YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6V2FzbSwgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVy
LmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAgQmFzZTo6ZmFpbChtYWtl
U3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwg
U3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1
bmN0aW9uSW5kZXhdLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxh
dGlvbj4oCisgICAgICAgICAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhtX2V4
Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLCBjb250ZXh0
LCBsaW5rQnVmZmVyKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0
aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4oCiAgICAgICAgICAgICAgICAgRklOQUxJWkVf
Q09ERShsaW5rQnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IEJCUSBm
dW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmlu
ZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhT
cGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4
U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4
dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgfQpAQCAtMjcyLDcgKzI4Miw3
IEBAIHZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2FsbGVlSW5pdGlhbGl6
ZXImIGNhbGxiYWNrKQogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93
YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKICAgICAg
ICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGludGVybmFsRnVuY3Rpb25JbmRleCArIG1f
bW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKLSAgICAgICAgUmVmPEJC
UUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3Zl
KGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9y
bWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90
aWVyVXBDb3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUobV91bmxpbmtlZFdh
c21Ub1dhc21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7CisgICAgICAgIFJlZjxCQlFD
YWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShm
dW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKG1fdGll
clVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3ZlKG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUoZnVuY3Rpb24tPnN0
YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZSht
X2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSkpOwogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVM
b2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50cnlwb2ludENhbGxlZS5wdHIoKSkp
OwogCiAgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RGTW92ZShlbWJl
ZGRlckVudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAppbmRleCBkYmVmYzU0YWQ3NTAw
NWE3MGQxZTFhZjk2MDAwMTc0ZjhlY2JkYjNmLi5kYzAwMjI3NTY2MjI1MWI4YWIwZjA3ZGVhYjA5
ODZlOTdjZmU2YTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QkJRUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgK
QEAgLTgzLDYgKzgzLDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4gY29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvbXBpbGF0
aW9uQ29udGV4dCYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIFRpZXJVcENvdW50
Kik7CiAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+PiBtX3dh
c21JbnRlcm5hbEZ1bmN0aW9uczsKKyAgICBWZWN0b3I8VmVjdG9yPENvZGVMb2NhdGlvbkxhYmVs
PEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+Pj4gbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zOwog
ICAgIEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwg
RGVmYXVsdEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVpbnQzMl90Pj4gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3Rv
cjxDb21waWxhdGlvbkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKICAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50Pj4gbV90aWVyVXBDb3VudHM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwCmluZGV4IDIxZDk3YjEzY2VlMGM2NWUxNjMx
Yzc2ZDI1ODkzMzMzNTMyZWU5NDAuLmI0NjZiN2ZjZWI4MGEzZTI3Mjc5OWYzNzVmYWQwYmRkYWFi
ZDk0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJMTElu
dEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlUmVnaXN0cnkuaCIKICNpbmNsdWRl
ICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKIApAQCAtNTYsNiArNTcsMTIgQEAgdm9pZCBDYWxs
ZWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBvdXQucHJpbnQobWFrZVN0cmlu
ZyhtX2luZGV4T3JOYW1lKSk7CiB9CiAKK2NvbnN0IEhhbmRsZXJJbmZvKiBDYWxsZWU6OmhhbmRs
ZXJGb3JJbmRleChJbnN0YW5jZSYgaW5zdGFuY2UsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBUYWcq
IHRhZykKK3sKKyAgICBBU1NFUlQoaGFzRXhjZXB0aW9uSGFuZGxlcnMoKSk7CisgICAgcmV0dXJu
IEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgoaW5zdGFuY2UsIG1fZXhjZXB0aW9uSGFuZGxl
cnMsIGluZGV4LCB0YWcpOworfQorCiBKSVRDYWxsZWU6OkpJVENhbGxlZShXYXNtOjpDb21waWxh
dGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCBFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKICAgICA6
IENhbGxlZShjb21waWxhdGlvbk1vZGUpCiAgICAgLCBtX2VudHJ5cG9pbnQoV1RGTW92ZShlbnRy
eXBvaW50KSkKQEAgLTY5LDYgKzc2LDMyIEBAIEpJVENhbGxlZTo6SklUQ2FsbGVlKFdhc206OkNv
bXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5cG9pbnQmJiBlbnRyeXBvCiB7CiB9
CiAKK0xMSW50Q2FsbGVlOjpMTEludENhbGxlZShzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2Rl
QmxvY2s+IGNvZGVCbG9jaywgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJl
ZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKKyAgICA6IENhbGxlZShXYXNtOjpDb21waWxhdGlv
bk1vZGU6OkxMSW50TW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCisgICAgLCBtX2NvZGVCbG9j
ayhXVEZNb3ZlKGNvZGVCbG9jaykpCit7CisgICAgbGlua0V4Y2VwdGlvbkhhbmRsZXJzKCk7Cit9
CisKK3ZvaWQgTExJbnRDYWxsZWU6OmxpbmtFeGNlcHRpb25IYW5kbGVycygpCit7CisgICAgaWYg
KHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkp
IHsKKyAgICAgICAgbV9leGNlcHRpb25IYW5kbGVycy5yZXNpemVUb0ZpdChjb3VudCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgY29u
c3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4
Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1f
ZXhjZXB0aW9uSGFuZGxlcnNbaV07CisgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICpt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVyLm1fdGFyZ2V0KS5w
dHIoKTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IHRhcmdldDsKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZEhhbmRsZXIubV90eXBlID09IEhh
bmRsZXJUeXBlOjpDYXRjaCkKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBDb2RlTG9jYXRpb25M
YWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6aGFuZGxlV2FzbUNhdGNoKGluc3Ry
dWN0aW9uLndpZHRoPFdhc21PcGNvZGVUcmFpdHM+KCkpLmNvZGUoKSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZVdhc21DYXRjaEFsbChpbnN0cnVjdGlvbi53aWR0
aDxXYXNtT3Bjb2RlVHJhaXRzPigpKS5jb2RlKCkpOworCisgICAgICAgICAgICBoYW5kbGVyLmlu
aXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfQorfQor
CiB2b2lkIExMSW50Q2FsbGVlOjpzZXRFbnRyeXBvaW50KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxX
YXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQpCiB7CiAgICAgbV9lbnRyeXBvaW50ID0gZW50cnlw
b2ludDsKQEAgLTEwNCw2ICsxMzcsMzYgQEAgc3RkOjp0dXBsZTx2b2lkKiwgdm9pZCo+IExMSW50
Q2FsbGVlOjpyYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbnVsbHB0ciB9Owog
fQogCit2b2lkIE9wdGltaXppbmdKSVRDYWxsZWU6OmxpbmtFeGNlcHRpb25IYW5kbGVycygpCit7
CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZEV4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsK
KyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgSGFuZGxlckluZm8mIGhhbmRs
ZXIgPSBtX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOworICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRs
ZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkRXhjZXB0aW9uSGFuZGxlcnNbaV07
CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGxvY2F0
aW9uID0gbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zW2ldOworICAgICAgICBoYW5kbGVyLmlu
aXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBsb2NhdGlvbik7CisgICAgfQorICAgIG1fdW5saW5r
ZWRFeGNlcHRpb25IYW5kbGVycy5jbGVhcigpOworICAgIG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucy5jbGVhcigpOworfQorCitjb25zdCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4mIE9wdGltaXpp
bmdKSVRDYWxsZWU6OnN0YWNrbWFwKENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkgY29uc3QK
K3sKKyAgICBhdXRvIGl0ZXIgPSBtX3N0YWNrbWFwcy5maW5kKGNhbGxTaXRlSW5kZXgpOworICAg
IGlmIChpdGVyID09IG1fc3RhY2ttYXBzLmVuZCgpKSB7CisgICAgICAgIGZvciAoYXV0byBwYWly
IDogbV9zdGFja21hcHMpIHsKKyAgICAgICAgICAgIGRhdGFMb2cocGFpci5rZXkuYml0cygpLCAi
OiAiKTsKKyAgICAgICAgICAgIGZvciAoYXV0byB2YWx1ZSA6IHBhaXIudmFsdWUpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZyh2YWx1ZSwgIiwgIik7CisgICAgICAgICAgICBkYXRhTG9nTG4oIiIp
OworICAgICAgICB9CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gbV9zdGFja21h
cHMuZW5kKCkpOworICAgIHJldHVybiBpdGVyLT52YWx1ZTsKK30KKworCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCmluZGV4IDA4MWRiNzZlNDJmOWU0MGU0M2I5MmM5
ODJhZmNkOGNlOTUwYmIxZTEuLjdkNjlkNjI2ZDhjM2YwZDkzN2UxZDBiNTAyNTAzYzk0YjViZjE1
NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKQEAgLTMyLDcgKzMy
LDkgQEAKICNpbmNsdWRlICJXYXNtQ29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiV2FzbUZv
cm1hdC5oIgogI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIldh
c21IYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIldhc21JbmRleE9yTmFtZS5oIgorI2luY2x1ZGUg
Ildhc21MTEludFRpZXJVcENvdW50ZXIuaCIKICNpbmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIK
ICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIApAQCAtNTksNiArNjEsMTAg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSA9IDA7CiAgICAgdmlydHVhbCBzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4gcmFu
Z2UoKSBjb25zdCA9IDA7CiAKKyAgICBjb25zdCBIYW5kbGVySW5mbyogaGFuZGxlckZvckluZGV4
KEluc3RhbmNlJiwgdW5zaWduZWQsIGNvbnN0IFRhZyopOworCisgICAgYm9vbCBoYXNFeGNlcHRp
b25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuICEhbV9leGNlcHRpb25IYW5kbGVycy5zaXplKCk7
IH0KKwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKICAgICB2aXJ0dWFsIHZvaWQgc2V0
T1NSRW50cnlDYWxsZWUoUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiYmKQogICAgIHsKQEAgLTY4
LDYgKzc0LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAKKyAgICB2aXJ0dWFsIEZ1bmN0aW9uQ29kZUJsb2NrKiBmdW5jdGlvbkNvZGVCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKwogcHJvdGVjdGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENh
bGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxl
ZShXYXNtOjpDb21waWxhdGlvbk1vZGUsIHNpemVfdCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBS
ZWZQdHI8TmFtZVNlY3Rpb24+PiYmKTsKQEAgLTc1LDYgKzgzLDkgQEAgcHJvdGVjdGVkOgogcHJp
dmF0ZToKICAgICBDb21waWxhdGlvbk1vZGUgbV9jb21waWxhdGlvbk1vZGU7CiAgICAgSW5kZXhP
ck5hbWUgbV9pbmRleE9yTmFtZTsKKworcHJvdGVjdGVkOgorICAgIFZlY3RvcjxIYW5kbGVySW5m
bz4gbV9leGNlcHRpb25IYW5kbGVyczsKIH07CiAKIGNsYXNzIEpJVENhbGxlZSA6IHB1YmxpYyBD
YWxsZWUgewpAQCAtOTksNjQgKzExMCw4NiBAQCBwcml2YXRlOgogICAgIFdhc206OkVudHJ5cG9p
bnQgbV9lbnRyeXBvaW50OwogfTsKIAotI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKLWNs
YXNzIE9NR0NhbGxlZSBmaW5hbCA6IHB1YmxpYyBKSVRDYWxsZWUgeworY2xhc3MgRW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlIGZpbmFsIDogcHVibGljIEpJVENhbGxlZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxPTUdDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2lu
dCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlv
bj4+JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxs
cykKKyAgICBzdGF0aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKFdhc206
OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgT01HQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpKSk7CiAgICAgfQog
CiBwcml2YXRlOgotICAgIE9NR0NhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwg
c2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+
JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykK
LSAgICAgICAgOiBKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBXVEZN
b3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENh
bGxzKSkKKyAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVu
dHJ5cG9pbnQpCisgICAgICAgIDogSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6RW1i
ZWRkZXJFbnRyeXBvaW50TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSkKICAgICB7CiAgICAgfQog
fTsKIAotY2xhc3MgT01HRm9yT1NSRW50cnlDYWxsZWUgZmluYWwgOiBwdWJsaWMgSklUQ2FsbGVl
IHsKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKK2NsYXNzIE9wdGltaXppbmdKSVRD
YWxsZWUgOiBwdWJsaWMgSklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE9NR0Zv
ck9TUkVudHJ5Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNp
emVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYm
IG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJ
bmRleCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKKyAg
ICBjb25zdCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4mIHN0YWNrbWFwKENhbGxTaXRlSW5kZXgpIGNv
bnN0OworCitwcm90ZWN0ZWQ6CisgICAgT3B0aW1pemluZ0pJVENhbGxlZShXYXNtOjpDb21waWxh
dGlvbk1vZGUgbW9kZSwgV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRl
eCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hNYXA8Q2Fs
bFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVjdG9yPFVu
bGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRp
b25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRp
b25zKQorICAgICAgICA6IEpJVENhbGxlZShtb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRl
eCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkKKyAgICAgICAgLCBtX3N0
YWNrbWFwcyhXVEZNb3ZlKHN0YWNrbWFwcykpCisgICAgICAgICwgbV91bmxpbmtlZEV4Y2VwdGlv
bkhhbmRsZXJzKFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpKQorICAgICAgICAsIG1fZXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9ucyhXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50cnlDYWxsZWUo
V1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIG9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUsIGxvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkRXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpID09IG1f
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucy5zaXplKCkpOworICAgICAgICBsaW5rRXhjZXB0aW9u
SGFuZGxlcnMoKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOyB9Ci0gICAg
dWludDMyX3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9sb29wSW5kZXg7IH0KLQogcHJp
dmF0ZToKLSAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlw
b2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2Vj
dGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMy
X3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENh
bGxzKQotICAgICAgICA6IEpJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9T
UkVudHJ5TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdU
Rk1vdmUodW5saW5rZWRDYWxscykpCi0gICAgICAgICwgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCi0gICAgICAgICwgbV9sb29wSW5kZXgobG9v
cEluZGV4KQorICAgIHZvaWQgbGlua0V4Y2VwdGlvbkhhbmRsZXJzKCk7CisKKyAgICBIYXNoTWFw
PENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4gbV9zdGFja21hcHM7CisgICAg
VmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fdW5saW5rZWRFeGNlcHRpb25IYW5kbGVyczsK
KyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IG1f
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKK307CisKK2NsYXNzIE9NR0NhbGxlZSBmaW5hbCA6
IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE9N
R0NhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5k
ZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBIYXNoTWFwPENh
bGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMsIFZlY3RvcjxV
bmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0
aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucykKICAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0NhbGxlZShXVEZN
b3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENh
bGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RG
TW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkpOwogICAgIH0KIAotICAgIHVuc2lnbmVk
IG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKLSAgICB1aW50MzJfdCBtX2xvb3BJbmRleDsK
K3ByaXZhdGU6CisgICAgT01HQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBz
aXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4m
JiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBI
YXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMs
IFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8
Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206OkNvbXBp
bGF0aW9uTW9kZTo6T01HTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUo
bmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92
ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykp
CisgICAgeworICAgIH0KIH07Ci0jZW5kaWYKIAotY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlIGZpbmFsIDogcHVibGljIEpJVENhbGxlZSB7CitjbGFzcyBPTUdGb3JPU1JFbnRyeUNhbGxl
ZSBmaW5hbCA6IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQm
JiBlbnRyeXBvaW50KQorICAgIHN0YXRpYyBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNyZWF0
ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8
Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZl
Y3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJ
bmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXVEZN
b3ZlKGVudHJ5cG9pbnQpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0Zvck9T
UkVudHJ5Q2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBsb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxs
cyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1v
dmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpKTsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplOyB9CisgICAgdWludDMyX3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9sb29wSW5kZXg7IH0KKwogcHJpdmF0ZToKLSAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUo
V2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCi0gICAgICAgIDogSklUQ2FsbGVlKFdhc206
OkNvbXBpbGF0aW9uTW9kZTo6RW1iZWRkZXJFbnRyeXBvaW50TW9kZSwgV1RGTW92ZShlbnRyeXBv
aW50KSkKKyAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlw
b2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2Vj
dGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMy
X3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENh
bGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFj
a21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBW
ZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206
OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQp
LCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShz
dGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25I
YW5kbGVyTG9jYXRpb25zKSkKKyAgICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUo
b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKKyAgICAgICAgLCBtX2xvb3BJbmRleChsb29wSW5k
ZXgpCiAgICAgewogICAgIH0KKworICAgIHVuc2lnbmVkIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZTsKKyAgICB1aW50MzJfdCBtX2xvb3BJbmRleDsKIH07CiAKLSNpZiBFTkFCTEUoV0VCQVNT
RU1CTFlfQjNKSVQpCi1jbGFzcyBCQlFDYWxsZWUgZmluYWwgOiBwdWJsaWMgSklUQ2FsbGVlIHsK
K2NsYXNzIEJCUUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJCUUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQm
JiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRy
PE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGll
clVwQ291bnQsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMp
CisgICAgc3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50
cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1l
U2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENv
dW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBIYXNo
TWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMsIFZl
Y3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxl
ckxvY2F0aW9ucykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJCUUNhbGxl
ZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0aWVy
VXBDb3VudCksIFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQkJRQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5h
bWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92
ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKSkpOwogICAgIH0KIAogICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVl
KiBvc3JFbnRyeUNhbGxlZSgpIHsgcmV0dXJuIG1fb3NyRW50cnlDYWxsZWUuZ2V0KCk7IH0KQEAg
LTE3Nyw4ICsyMTAsOCBAQCBwdWJsaWM6CiAgICAgVGllclVwQ291bnQqIHRpZXJVcENvdW50KCkg
eyByZXR1cm4gbV90aWVyVXBDb3VudC5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIEJCUUNhbGxl
ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8
Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRy
PFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mJiB1bmxpbmtlZENhbGxzKQotICAgICAgICA6IEpJVENhbGxlZShXYXNtOjpDb21waWxhdGlv
bk1vZGU6OkJCUU1vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKQorICAgIEJCUUNhbGxlZShXYXNtOjpFbnRyeXBvaW50
JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0
cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRp
ZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxz
LCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21h
cHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0
b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206OkNv
bXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1v
dmUobmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RG
TW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9u
cykpCiAgICAgICAgICwgbV90aWVyVXBDb3VudChXVEZNb3ZlKHRpZXJVcENvdW50KSkKICAgICB7
CiAgICAgfQpAQCAtMjE4LDE1ICsyNTEsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIExMSW50
VGllclVwQ291bnRlciYgdGllclVwQ291bnRlcigpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT50aWVy
VXBDb3VudGVyKCk7IH0KKyAgICBGdW5jdGlvbkNvZGVCbG9jayogZnVuY3Rpb25Db2RlQmxvY2so
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQogI2VuZGlmCiAKIHBy
aXZhdGU6Ci0gICAgTExJbnRDYWxsZWUoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2Nr
PiBjb2RlQmxvY2ssIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8
TmFtZVNlY3Rpb24+PiYmIG5hbWUpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9u
TW9kZTo6TExJbnRNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBtX2NvZGVC
bG9jayhXVEZNb3ZlKGNvZGVCbG9jaykpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X2NvZGVCbG9jayk7Ci0gICAgfQorICAgIExMSW50Q2FsbGVlKHN0ZDo6dW5pcXVlX3B0cjxGdW5j
dGlvbkNvZGVCbG9jaz4sIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQ
dHI8TmFtZVNlY3Rpb24+PiYmKTsKKworICAgIHZvaWQgbGlua0V4Y2VwdGlvbkhhbmRsZXJzKCk7
CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCiAgICAgUmVmUHRyPEpJVENhbGxlZT4g
bV9yZXBsYWNlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsaW5nQ29udmVudGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxpbmdDb252ZW50aW9uLmgKaW5kZXggNmMwMjZlMDhhNDA5ZTk5NWQ0MzE4ZGZiMTgwNDYyNmQw
ZmFkMTc1Zi4uN2JmMDAxZWQ5MmVmY2JhZmMwZmJjOGE1MGI0YmY2MjcyNWQyY2NlNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgK
QEAgLTEyNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgcmVzdWx0c0luY2x1ZGVJ
NjQgPSBmYWxzZTsKICAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7CiAgICAgICAg
IHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAgICBzaXplX3QgYXJnU3RhY2tPZmZz
ZXQgPSBoZWFkZXJTaXplSW5CeXRlczsKKyAgICAgICAgc2l6ZV90IGFyZ1N0YWNrT2Zmc2V0ID0g
aGVhZGVyU2l6ZUluQnl0ZXMgKyBzaXplb2YoUmVnaXN0ZXIpOwogICAgICAgICBpZiAocm9sZSA9
PSBDYWxsUm9sZTo6Q2FsbGVyKQogICAgICAgICAgICAgYXJnU3RhY2tPZmZzZXQgLT0gc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpOwogCkBAIC0xMzYsNyArMTM2LDcgQEAgcHVibGljOgogICAgICAg
ICB9CiAgICAgICAgIGdwQXJndW1lbnRDb3VudCA9IDA7CiAgICAgICAgIGZwQXJndW1lbnRDb3Vu
dCA9IDA7Ci0gICAgICAgIHNpemVfdCByZXN1bHRTdGFja09mZnNldCA9IGhlYWRlclNpemVJbkJ5
dGVzOworICAgICAgICBzaXplX3QgcmVzdWx0U3RhY2tPZmZzZXQgPSBoZWFkZXJTaXplSW5CeXRl
cyArIHNpemVvZihSZWdpc3Rlcik7CiAgICAgICAgIGlmIChyb2xlID09IENhbGxSb2xlOjpDYWxs
ZXIpCiAgICAgICAgICAgICByZXN1bHRTdGFja09mZnNldCAtPSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCBjMGNi
MzFiN2NiZjAwNmFhMDE5MzZjMWY0NDZkNmIxODlmMGRlMTU1Li40OWRmOTUxNTQ3YzA4YTk4MTEw
NTA3ZWVlYzMxMTY4ZWY3YzVhOGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5oCkBAIC0yOSwxMSArMjksMTMgQEAKIAogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgog
I2luY2x1ZGUgIklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0
LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU5h
bWUuaCIKICNpbmNsdWRlICJXYXNtTmFtZVNlY3Rpb24uaCIKKyNpbmNsdWRlICJXYXNtT1NSRW50
cnlEYXRhLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21QYWdlQ291bnQu
aCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCkBAIC01MCw2ICs1Miw3IEBAIG5hbWVzcGFj
ZSBXYXNtIHsKIAogc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dDsKIHN0cnVjdCBNb2R1bGVJbmZv
cm1hdGlvbjsKK3N0cnVjdCBVbmxpbmtlZEhhbmRsZXJJbmZvOwogCiB1c2luZyBCbG9ja1NpZ25h
dHVyZSA9IGNvbnN0IFNpZ25hdHVyZSo7CiAKQEAgLTc2LDYgKzc5LDE5IEBAIGlubGluZSBib29s
IGlzVmFsdWVUeXBlKFR5cGUgdHlwZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2lubGluZSBK
U1N0cmluZyogdHlwZVRvU3RyaW5nKFZNJiB2bSwgVHlwZUtpbmQgdHlwZSkKK3sKKyNkZWZpbmUg
VFlQRV9DQVNFKG1hY3JvTmFtZSwgdmFsdWUsIGIzLCBpbmMsIHdhc21OYW1lKSBcCisgICAgY2Fz
ZSBUeXBlS2luZDo6bWFjcm9OYW1lOiBcCisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcodm0sICN3YXNtTmFtZSk7IFwKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBGT1Jf
RUFDSF9XQVNNX1RZUEUoVFlQRV9DQVNFKQorICAgIH0KKworI3VuZGVmIFRZUEVfQ0FTRQorfQor
CiBpbmxpbmUgYm9vbCBpc1N1YnR5cGUoVHlwZSBzdWIsIFR5cGUgcGFyZW50KQogewogICAgIGlm
IChzdWIuaXNOdWxsYWJsZSgpICYmICFwYXJlbnQuaXNOdWxsYWJsZSgpKQpAQCAtMTE1LDYgKzEz
MSw3IEBAIGVudW0gY2xhc3MgRXh0ZXJuYWxLaW5kIDogdWludDhfdCB7CiAgICAgVGFibGUgPSAx
LAogICAgIE1lbW9yeSA9IDIsCiAgICAgR2xvYmFsID0gMywKKyAgICBFeGNlcHRpb24gPSA0LAog
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSW50PgpAQCAtMTI1LDYgKzE0Miw3IEBAIGlubGluZSBi
b29sIGlzVmFsaWRFeHRlcm5hbEtpbmQoSW50IHZhbCkKICAgICBjYXNlIHN0YXRpY19jYXN0PElu
dD4oRXh0ZXJuYWxLaW5kOjpUYWJsZSk6CiAgICAgY2FzZSBzdGF0aWNfY2FzdDxJbnQ+KEV4dGVy
bmFsS2luZDo6TWVtb3J5KToKICAgICBjYXNlIHN0YXRpY19jYXN0PEludD4oRXh0ZXJuYWxLaW5k
OjpHbG9iYWwpOgorICAgIGNhc2Ugc3RhdGljX2Nhc3Q8SW50PihFeHRlcm5hbEtpbmQ6OkV4Y2Vw
dGlvbik6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMzQsNiArMTUyLDcgQEAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVybmFs
S2luZDo6RnVuY3Rpb24pID09IDAsICJXYXNtIG5lZWRzIEZ1bmN0aW8KIHN0YXRpY19hc3NlcnQo
c3RhdGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6OlRhYmxlKSAgICA9PSAxLCAiV2FzbSBuZWVk
cyBUYWJsZSB0byBoYXZlIHRoZSB2YWx1ZSAxIik7CiBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0
PGludD4oRXh0ZXJuYWxLaW5kOjpNZW1vcnkpICAgPT0gMiwgIldhc20gbmVlZHMgTWVtb3J5IHRv
IGhhdmUgdGhlIHZhbHVlIDIiKTsKIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRl
cm5hbEtpbmQ6Okdsb2JhbCkgICA9PSAzLCAiV2FzbSBuZWVkcyBHbG9iYWwgdG8gaGF2ZSB0aGUg
dmFsdWUgMyIpOworc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6
RXhjZXB0aW9uKSAgID09IDQsICJXYXNtIG5lZWRzIEV4Y2VwdGlvbiB0byBoYXZlIHRoZSB2YWx1
ZSA0Iik7CiAKIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKEV4dGVybmFsS2luZCBraW5k
KQogewpAQCAtMTQyLDYgKzE2MSw3IEBAIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKEV4
dGVybmFsS2luZCBraW5kKQogICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTogcmV0dXJuICJ0
YWJsZSI7CiAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogcmV0dXJuICJtZW1vcnkiOwog
ICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHJldHVybiAiZ2xvYmFsIjsKKyAgICBjYXNl
IEV4dGVybmFsS2luZDo6RXhjZXB0aW9uOiByZXR1cm4gInRhZyI7CiAgICAgfQogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuICI/IjsKQEAgLTM3Miw2ICszOTIs
OCBAQCBzdHJ1Y3QgRW50cnlwb2ludCB7CiBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbiB7CiAgICAg
V1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0cjxXYXNtRW50cnlQdHJUYWc+IGNhbGxlZU1vdmVMb2NhdGlvbjsKKyAgICBTdGFja01hcHMg
c3RhY2ttYXBzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBleGNlcHRpb25IYW5k
bGVyczsKICAgICBFbnRyeXBvaW50IGVudHJ5cG9pbnQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCmluZGV4IGVhNzVmZTJm
NmIwZjlhM2YxNGU3OTNlZDExMjc4ZWZkMGUwOWFjNzEuLjcyZjNlNjQxMzJjMTdiOTUxMWEzZWJl
YTZjNjBkMDAyNGIzMjdiNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDggKzI4LDEwIEBACiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkhh
bmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKICNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtSGFuZGxlckluZm8uaCIKICNp
bmNsdWRlICJXYXNtTExJbnRUaWVyVXBDb3VudGVyLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0xMjAsNiArMTIyLDEwIEBAIHB1YmxpYzoKICAg
ICBjb25zdCBKdW1wVGFibGUmIGp1bXBUYWJsZSh1bnNpZ25lZCB0YWJsZUluZGV4KSBjb25zdDsK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkp1bXBUYWJsZXMoKSBjb25zdDsKIAorICAgIHNpemVfdCBu
dW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV9leGNlcHRpb25IYW5k
bGVycy5zaXplKCk7IH0KKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5kbGVy
KGludCBpbmRleCkgeyByZXR1cm4gbV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07IH0KKyAgICB2
b2lkIGFkZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxl
cikgeyBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZChoYW5kbGVyKTsgfQorCiBwcml2YXRlOgog
ICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0LCBpbnQ+OwogCkBAIC0xMzksNiArMTQ1LDcgQEAgcHJpdmF0ZToKICAgICBPdXRP
ZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIExMSW50VGllclVw
Q291bnRlciBtX3RpZXJVcENvdW50ZXI7CiAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qdW1wVGFi
bGVzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJz
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggNGU2YjgzMjIwNDA3NzZhMjUx
NzIyZWVhMjE4ZjQ2YzJjMzk5MTMxMC4uZmFkN2Q3NjhlYjEwZjZiNTQ5YzdjODkxOGMxNzZkZTVm
MTJmZDY2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0
aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9u
UGFyc2VyLmgKQEAgLTM3LDcgKzM3LDE0IEBAIGVudW0gY2xhc3MgQmxvY2tUeXBlIHsKICAgICBJ
ZiwKICAgICBCbG9jaywKICAgICBMb29wLAotICAgIFRvcExldmVsCisgICAgVG9wTGV2ZWwsCisg
ICAgVHJ5LAorICAgIENhdGNoLAorfTsKKworZW51bSBjbGFzcyBDYXRjaEtpbmQgeworICAgIENh
dGNoLAorICAgIENhdGNoQWxsLAogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRW5jbG9zaW5nU3Rh
Y2ssIHR5cGVuYW1lIE5ld1N0YWNrPgpAQCAtMTQ3LDYgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbmRleEZvckxvY2FsKHVpbnQz
Ml90Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbmRleEZv
ckdsb2JhbCh1aW50MzJfdCYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlRnVuY3Rpb25JbmRleCh1aW50MzJfdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIHBhcnNlRXhjZXB0aW9uSW5kZXgodWludDMyX3QmKTsKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJyYW5jaFRhcmdldCh1aW50MzJfdCYpOwog
CiAgICAgc3RydWN0IFRhYmxlSW5pdEltbWVkaWF0ZXMgewpAQCAtMjExLDYgKzIxOSwxMiBAQCBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1fbG9vcEluZGV4IHsgMCB9OwogfTsKIAordGVtcGxhdGU8
dHlwZW5hbWUgQ29udHJvbFR5cGU+CitzdGF0aWMgYm9vbCBpc1RyeU9yQ2F0Y2goQ29udHJvbFR5
cGUmIGRhdGEpCit7CisgICAgcmV0dXJuIENvbnRyb2xUeXBlOjppc1RyeShkYXRhKSB8fCBDb250
cm9sVHlwZTo6aXNDYXRjaChkYXRhKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4K
IEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihDb250ZXh0JiBjb250ZXh0
LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykK
ICAgICA6IFBhcnNlcihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCkKQEAgLTU3NSw2ICs1
ODksMTYgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VGdW5jdGlvbkluZGV4
KHVpbnQzMl90JiByZXN1bHRJbmRleCkgLT4gUGFydGkKICAgICByZXR1cm4geyB9OwogfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
cGFyc2VFeGNlcHRpb25JbmRleCh1aW50MzJfdCYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgdWludDMyX3QgZXhjZXB0aW9uSW5kZXg7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoZXhjZXB0aW9uSW5kZXgpLCAiY2FuJ3QgcGFyc2UgZXhjZXB0aW9uIGlu
ZGV4Iik7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihleGNlcHRpb25JbmRleCA+PSBtX2lu
Zm8uZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSwgImV4Y2VwdGlvbiBpbmRleCAiLCBleGNlcHRp
b25JbmRleCwgIiBpcyBpbnZhbGlkLCBsaW1pdCBpcyAiLCBtX2luZm8uZXhjZXB0aW9uSW5kZXhT
cGFjZVNpemUoKSk7CisgICAgcmVzdWx0ID0gZXhjZXB0aW9uSW5kZXg7CisgICAgcmV0dXJuIHsg
fTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIGF1dG8gRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlQnJhbmNoVGFyZ2V0KHVpbnQzMl90JiByZXN1bHRUYXJnZXQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKQEAgLTEzMzMsNiArMTM1NywxMzEgQEAgRk9SX0VBQ0hfV0FTTV9NRU1P
UllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisg
ICAgY2FzZSBUcnk6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNl
V2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVk
Iik7CisKKyAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlOworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2ln
bmF0dXJlKSwgImNhbid0IGdldCB0cnkncyBzaWduYXR1cmUiKTsKKworICAgICAgICBXQVNNX1ZB
TElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGlubGluZVNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyBhcmd1bWVudHMgb24gc3RhY2sgZm9yIHRyeSBi
bG9jay4gVHJ5ZSBleHBlY3RzICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAi
LCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBU
cnkgYmxvY2sgaGFzIHNpZ25hdHVyZTogIiwgaW5saW5lU2lnbmF0dXJlLT50b1N0cmluZygpKTsK
KyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gaW5s
aW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICAg
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFja1tvZmZzZXQgKyBpXS50
eXBlKCkgIT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKSwgIlRyeSBleHBlY3RzIHRoZSBh
cmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVu
dChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBtX2V4cHJlc3Npb25TdGFja1tp
XS50eXBlKCkua2luZCk7CisKKyAgICAgICAgaW50NjRfdCBvbGRTaXplID0gbV9leHByZXNzaW9u
U3RhY2suc2l6ZSgpOworICAgICAgICBTdGFjayBuZXdTdGFjazsKKyAgICAgICAgQ29udHJvbFR5
cGUgY29udHJvbDsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkVHJ5KGlubGlu
ZVNpZ25hdHVyZSwgbV9leHByZXNzaW9uU3RhY2ssIGNvbnRyb2wsIG5ld1N0YWNrKSk7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQob2xkU2l6ZSwgb2xkU2l6ZSAtIG1fZXhwcmVzc2lvblN0YWNrLnNp
emUoKSA9PSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgICAgIEFTU0VS
VChuZXdTdGFjay5zaXplKCkgPT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwor
CisgICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZCh7IFdURk1vdmUobV9leHByZXNzaW9uU3Rh
Y2spLCB7IH0sIFdURk1vdmUoY29udHJvbCkgfSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNr
ID0gV1RGTW92ZShuZXdTdGFjayk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAg
Y2FzZSBDYXRjaDogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VX
ZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQi
KTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fY29udHJvbFN0YWNrLnNpemUoKSA9
PSAxLCAiY2FuJ3QgdXNlIGNhdGNoIGJsb2NrIGF0IHRoZSB0b3AtbGV2ZWwgb2YgYSBmdW5jdGlv
biIpOworCisgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4OworICAgICAgICBXQVNNX0ZB
SUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhjZXB0aW9uSW5kZXgpKTsK
KyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8uc2lnbmF0dXJl
SW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRleCk7CisgICAgICAgIGNv
bnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChzaWduYXR1cmVJbmRleCk7CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBjb250cm9sRW50
cnkgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYoIWlzVHJ5T3JDYXRjaChjb250cm9sRW50cnkuY29udHJvbERhdGEpLCAiY2F0Y2ggYmxvY2sg
aXNuJ3QgYXNzb2NpYXRlZCB0byBhIHRyeSIpOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVS
X0ZBSUxTKHVuaWZ5KGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworCisgICAgICAgIFJlc3Vs
dExpc3QgcmVzdWx0czsKKyAgICAgICAgU3RhY2sgcHJlQ2F0Y2hTdGFjazsKKyAgICAgICAgbV9l
eHByZXNzaW9uU3RhY2suc3dhcChwcmVDYXRjaFN0YWNrKTsKKyAgICAgICAgV0FTTV9UUllfQURE
X1RPX0NPTlRFWFQoYWRkQ2F0Y2goZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvblNpZ25hdHVyZSwg
cHJlQ2F0Y2hTdGFjaywgY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhLCByZXN1bHRzKSk7CisKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9
PSByZXN1bHRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNl
cHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBtX2V4cHJl
c3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50
KGkpLCByZXN1bHRzW2ldKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNl
IENhdGNoQWxsOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIp
OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09
IDEsICJjYW4ndCB1c2UgY2F0Y2ggYmxvY2sgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9u
Iik7CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFj
ay5sYXN0KCk7CisKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNUcnlPckNhdGNo
KGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSksICJjYXRjaCBibG9jayBpc24ndCBhc3NvY2lhdGVk
IHRvIGEgdHJ5Iik7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFModW5pZnkoY29u
dHJvbEVudHJ5LmNvbnRyb2xEYXRhKSk7CisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRzOwor
ICAgICAgICBTdGFjayBwcmVDYXRjaFN0YWNrOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5z
d2FwKHByZUNhdGNoU3RhY2spOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRD
YXRjaEFsbChwcmVDYXRjaFN0YWNrLCBjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIERlbGVnYXRlOiB7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAi
d2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09IDEsICJjYW4ndCB1c2UgZGVsZWdhdGUg
YXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisKKyAgICAgICAgdWludDMyX3QgdGFy
Z2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0
KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xFbnRyeSBjb250cm9sRW50cnkgPSBtX2NvbnRy
b2xTdGFjay50YWtlTGFzdCgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250
cm9sVHlwZTo6aXNUcnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSwgImRlbGVnYXRlIGlzbid0
IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKworICAgICAgICBDb250cm9sVHlwZSYgdGFyZ2V0RGF0
YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdLmNv
bnRyb2xEYXRhOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6
aXNUcnkodGFyZ2V0RGF0YSkgJiYgIUNvbnRyb2xUeXBlOjppc1RvcExldmVsKHRhcmdldERhdGEp
LCAiZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5IG9yIHRoZSB0b3AgbGV2ZWwgYmxvY2siKTsK
KworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGREZWxlZ2F0ZSh0YXJnZXREYXRh
LCBjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyh1bmlmeShjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKyAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQoZW5kQmxvY2soY29udHJvbEVudHJ5LCBtX2V4cHJlc3Npb25TdGFj
aykpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKGNvbnRyb2xFbnRyeS5lbmNsb3Nl
ZEV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgY2Fz
ZSBUaHJvdzogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJB
c3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsK
KworICAgICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lG
X0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisgICAg
ICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4
RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOworICAgICAgICBjb25zdCBT
aWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlSW5kZXgpOworCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHBy
ZXNzaW9uU3RhY2suc2l6ZSgpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwg
IlRvbyBmZXcgYXJndW1lbnRzIG9uIHN0YWNrIGZvciB0aGUgZXhjZXB0aW9uIGJlaW5nIHRocm93
bi4gVGhlIGV4Y2VwdGlvbiBleHBlY3RzICIsIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksICIsIGJ1dCBvbmx5ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB3ZXJlIHBy
ZXNlbnQuIEV4Y2VwdGlvbiBoYXMgc2lnbmF0dXJlOiAiLCBleGNlcHRpb25TaWduYXR1cmUudG9T
dHJpbmcoKSk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNp
emUoKSAtIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CisgICAgICAgIFZlY3Rv
cjxFeHByZXNzaW9uVHlwZT4gYXJnczsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJn
cy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSks
ICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciB0aHJvdydzICIsIGV4Y2VwdGlvblNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIik7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kp
IHsKKyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBhcmcgPSBtX2V4cHJlc3Npb25TdGFjay5h
dChvZmZzZXQgKyBpKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoYXJnLnR5
cGUoKSAhPSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSksICJUaGUgZXhjZXB0aW9uIGJl
aW5nIHRocm93biBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCAiLCBpLCAiIHRvIGJlICIs
IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMg
dHlwZSAiLCBhcmcudHlwZSgpLmtpbmQpOworICAgICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBl
bmQoYXJnKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1ZUZyb21TdGFjaygpOwor
ICAgICAgICB9CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhvZmZzZXQpOworCisg
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFRocm93KGV4Y2VwdGlvbkluZGV4LCBh
cmdzLCBtX2V4cHJlc3Npb25TdGFjaykpOworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0g
MTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIFJldGhyb3c6IHsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRp
b25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAgdWlu
dDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJh
bmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250
cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7
CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjppc0FueUNhdGNo
KGRhdGEpLCAicmV0aHJvdyBkb2Vzbid0IHJlZmVyIHRvIGEgY2F0Y2ggYmxvY2siKTsKKworICAg
ICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRSZXRocm93KHRhcmdldCwgZGF0YSkpOwor
ICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKICAgICBjYXNlIEJyOgogICAgIGNhc2UgQnJJZjogewogICAgICAgICB1aW50MzJfdCB0
YXJnZXQ7CkBAIC0xNDg3LDYgKzE2MzYsNjYgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0
Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogCisgICAgY2FzZSBDYXRjaDogeworICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20g
ZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICB1aW50MzJfdCBleGNlcHRp
b25JbmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlv
bkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhj
ZXB0aW9uSW5kZXgpOworICAgICAgICBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVy
ZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworCisgICAgICAg
IGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisK
KyAgICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9jb250cm9sU3RhY2subGFzdCgpOworICAg
ICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1RyeU9yQ2F0Y2goZGF0YS5jb250cm9sRGF0
YSksICJjYXRjaCBibG9jayBpc24ndCBhc3NvY2lhdGVkIHRvIGEgdHJ5Iik7CisKKyAgICAgICAg
bV91bnJlYWNoYWJsZUJsb2NrcyA9IDA7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0geyB9
OworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19D
T05URVhUKGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRleCwgZXhjZXB0aW9uU2ln
bmF0dXJlLCBkYXRhLmNvbnRyb2xEYXRhLCByZXN1bHRzKSk7CisKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSByZXN1bHRzLnNpemUo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25z
dHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkpLCByZXN1bHRzW2ld
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIENhdGNoQWxsOiB7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0
aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIGlm
IChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9jb250cm9sU3RhY2subGFzdCgpOworICAgICAg
ICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMDsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSB7
IH07CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzVHJ5T3JDYXRjaChkYXRhLmNv
bnRyb2xEYXRhKSwgImNhdGNoIGJsb2NrIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKyAg
ICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKGRh
dGEuY29udHJvbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNl
IERlbGVnYXRlOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIp
OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09
IDEsICJjYW4ndCB1c2UgZGVsZWdhdGUgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7
CisKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVS
X0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xFbnRy
eSBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOworICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnkoY29udHJvbEVudHJ5LmNvbnRy
b2xEYXRhKSwgImRlbGVnYXRlIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKworICAgICAg
ICBDb250cm9sVHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUo
KSAtIDEgLSB0YXJnZXRdLmNvbnRyb2xEYXRhOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKCFDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkgJiYgIUNvbnRyb2xUeXBlOjppc1RvcExldmVs
KGRhdGEpLCAiZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5IGJsb2NrIik7CisKKyAgICAgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKGRhdGEsIGNv
bnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworICAgICAgICBTdGFjayBlbXB0eVN0YWNrOworICAg
ICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbmRUb1VucmVhY2hhYmxlKGNvbnRyb2xF
bnRyeSwgZW1wdHlTdGFjaykpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKGNvbnRy
b2xFbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCiAgICAgY2FzZSBFbmQ6IHsKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3Mg
PT0gMSkgewogICAgICAgICAgICAgQ29udHJvbEVudHJ5IGRhdGEgPSBtX2NvbnRyb2xTdGFjay50
YWtlTGFzdCgpOwpAQCAtMTQ5NSw4ICsxNzA0LDEwIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAg
ICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gV1RGTW92ZShkYXRhLmVsc2VCbG9ja1N0
YWNrKTsKICAgICAgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KGRh
dGEuY29udHJvbERhdGEpKTsKICAgICAgICAgICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChlbmRCbG9jayhkYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwotICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRW5kVG9VbnJlYWNo
YWJsZShkYXRhKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFN0YWNr
IGVtcHR5U3RhY2s7CisgICAgICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRk
RW5kVG9VbnJlYWNoYWJsZShkYXRhLCBlbXB0eVN0YWNrKSk7CisgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoZGF0YS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjayk7CiAgICAgICAgIH0KQEAgLTE1MDQsNiArMTcxNSwxMCBAQCBhdXRvIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1
bHQKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKKyAgICBjYXNlIFRyeToKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCks
ICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisgICAgICAgIEZBTExUSFJPVUdI
OworCiAgICAgY2FzZSBMb29wOgogICAgIGNhc2UgSWY6CiAgICAgY2FzZSBCbG9jazogewpAQCAt
MTU3Niw2ICsxNzkxLDE2IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5y
ZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAorICAgIGNhc2UgUmV0aHJvdzogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9u
cyBhcmUgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBX
QVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisg
ICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2su
c2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7CisgICAgICAgIFdBU01fVkFMSURBVE9S
X0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpLCAicmV0aHJvdyBkb2Vzbid0
IHJlZmVyIHRvIGEgY2F0Y2ggYmxvY2siKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
ICAgICBjYXNlIEJyOgogICAgIGNhc2UgQnJJZjogewogICAgICAgICB1aW50MzJfdCB0YXJnZXQ7
CkBAIC0xNTgzLDYgKzE4MDgsMTUgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCisgICAgY2FzZSBUaHJvdzogeworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0
aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRl
eDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4
KGV4Y2VwdGlvbkluZGV4KSk7CisKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBj
YXNlIEkzMkNvbnN0OiB7CiAgICAgICAgIGludDMyX3QgdW51c2VkOwogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDMyKHVudXNlZCksICJjYW4ndCBnZXQgaW1tZWRpYXRl
IGZvciAiLCBtX2N1cnJlbnRPcGNvZGUsICIgaW4gdW5yZWFjaGFibGUgY29udGV4dCIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5mby5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTU3YmNmNDliYjJjZWExNzUwZmZiNmJmMWU1NWE3ODIzZGYxMzYyMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5mby5jcHAKQEAg
LTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21IYW5kbGVySW5mby5oIgor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCisj
aW5jbHVkZSAiV2FzbVRhZy5oIgorCituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBXYXNtIHsK
Kwordm9pZCBIYW5kbGVySW5mbzo6aW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZv
JiB1bmxpbmtlZEluZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPiBsYWJlbCkKK3sKKyAgICBtX3R5cGUgPSB1bmxpbmtlZEluZm8ubV90eXBlOworICAgIG1f
c3RhcnQgPSB1bmxpbmtlZEluZm8ubV9zdGFydDsKKyAgICBtX2VuZCA9IHVubGlua2VkSW5mby5t
X2VuZDsKKyAgICBtX3RhcmdldCA9IHVubGlua2VkSW5mby5tX3RhcmdldDsKKyAgICBtX3RyeURl
cHRoID0gdW5saW5rZWRJbmZvLm1fdHJ5RGVwdGg7CisgICAgbV9uYXRpdmVDb2RlID0gbGFiZWw7
CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSGFuZGxlclR5cGU6OkNhdGNoOgor
ICAgICAgICBtX3RhZyA9IHVubGlua2VkSW5mby5tX2V4Y2VwdGlvbkluZGV4T3JEZWxlZ2F0ZVRh
cmdldDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhhbmRsZXJUeXBlOjpDYXRjaEFsbDoK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZToKKyAgICAg
ICAgbV9kZWxlZ2F0ZVRhcmdldCA9IHVubGlua2VkSW5mby5tX2V4Y2VwdGlvbkluZGV4T3JEZWxl
Z2F0ZVRhcmdldDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitjb25zdCBIYW5kbGVySW5m
byogSGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRleChJbnN0YW5jZSYgaW5zdGFuY2UsIGNvbnN0
IFZlY3RvcjxIYW5kbGVySW5mbz4mIGV4ZXB0aW9uSGFuZGxlcnMsIHVuc2lnbmVkIGluZGV4LCBj
b25zdCBXYXNtOjpUYWcqIGV4Y2VwdGlvblRhZykKK3sKKyAgICBib29sIGRlbGVnYXRpbmcgPSBm
YWxzZTsKKyAgICB1bnNpZ25lZCBkZWxlZ2F0ZVRhcmdldCA9IDA7CisgICAgZm9yIChhdXRvJiBo
YW5kbGVyIDogZXhlcHRpb25IYW5kbGVycykgeworICAgICAgICAvLyBIYW5kbGVycyBhcmUgb3Jk
ZXJlZCBpbm5lcm1vc3QgZmlyc3QsIHNvIHRoZSBmaXJzdCBoYW5kbGVyIHdlIGVuY291bnRlcgor
ICAgICAgICAvLyB0aGF0IGNvbnRhaW5zIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyB0aGUgY29ycmVj
dCBoYW5kbGVyIHRvIHVzZS4KKyAgICAgICAgLy8gVGhpcyBpbmRleCB1c2VkIGlzIGVpdGhlciB0
aGUgQnl0ZWNvZGVPZmZzZXQgb3IgYSBDYWxsU2l0ZUluZGV4LgorICAgICAgICBpZiAoaGFuZGxl
ci5tX3N0YXJ0IDw9IGluZGV4ICYmIGhhbmRsZXIubV9lbmQgPiBpbmRleCkgeworICAgICAgICAg
ICAgaWYgKGRlbGVnYXRpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5tX3RyeURl
cHRoICE9IGRlbGVnYXRlVGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBkZWxlZ2F0aW5nID0gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGJvb2wgbWF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgIHN3aXRjaCAoaGFuZGxlci5t
X3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSGFuZGxlclR5cGU6OkNhdGNoOgorICAgICAgICAg
ICAgICAgIG1hdGNoID0gZXhjZXB0aW9uVGFnICYmIGluc3RhbmNlLnRhZyhoYW5kbGVyLm1fdGFn
KSA9PSAqZXhjZXB0aW9uVGFnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBIYW5kbGVyVHlwZTo6Q2F0Y2hBbGw6CisgICAgICAgICAgICAgICAgbWF0Y2ggPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBIYW5kbGVyVHlwZTo6
RGVsZWdhdGU6CisgICAgICAgICAgICAgICAgZGVsZWdhdGluZyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgZGVsZWdhdGVUYXJnZXQgPSBoYW5kbGVyLm1fZGVsZWdhdGVUYXJnZXQ7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbWF0Y2gp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHJldHVybiAmaGFuZGxl
cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
MjUxMTkzZDIxMzE3OWViZGU5OTU0NGMyNTNlZDQ5ODlkMmY2NDNlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmgKQEAgLTAsMCAr
MSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkNvZGVM
b2NhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
bmFtZXNwYWNlIFdhc20geworCitjbGFzcyBJbnN0YW5jZTsKK2NsYXNzIFRhZzsKKworZW51bSBj
bGFzcyBIYW5kbGVyVHlwZSB7CisgICAgQ2F0Y2ggPSAwLAorICAgIENhdGNoQWxsID0gMSwKKyAg
ICBEZWxlZ2F0ZSA9IDIsCit9OworCitzdHJ1Y3QgSGFuZGxlckluZm9CYXNlIHsKKyAgICBIYW5k
bGVyVHlwZSBtX3R5cGU7CisgICAgdWludDMyX3QgbV9zdGFydDsKKyAgICB1aW50MzJfdCBtX2Vu
ZDsKKyAgICB1aW50MzJfdCBtX3RhcmdldDsKKyAgICB1aW50MzJfdCBtX3RyeURlcHRoOworICAg
IHVpbnQzMl90IG1fZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0OworfTsKKworc3RydWN0
IFVubGlua2VkSGFuZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9CYXNlIHsKKyAgICBVbmxp
bmtlZEhhbmRsZXJJbmZvKCkKKyAgICB7CisgICAgfQorCisgICAgVW5saW5rZWRIYW5kbGVySW5m
byhIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCwg
dWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCB0cnlEZXB0aCwgdWludDMyX3QgZXhjZXB0aW9uSW5k
ZXhPckRlbGVnYXRlVGFyZ2V0KQorICAgIHsKKyAgICAgICAgbV90eXBlID0gaGFuZGxlclR5cGU7
CisgICAgICAgIG1fc3RhcnQgPSBzdGFydDsKKyAgICAgICAgbV9lbmQgPSBlbmQ7CisgICAgICAg
IG1fdGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICBtX3RyeURlcHRoID0gdHJ5RGVwdGg7CisgICAg
ICAgIG1fZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0ID0gZXhjZXB0aW9uSW5kZXhPckRl
bGVnYXRlVGFyZ2V0OworICAgIH0KK307CisKK3N0cnVjdCBIYW5kbGVySW5mbyA6IHB1YmxpYyBI
YW5kbGVySW5mb0Jhc2UgeworICAgIHN0YXRpYyBjb25zdCBIYW5kbGVySW5mbyogaGFuZGxlckZv
ckluZGV4KEluc3RhbmNlJiwgY29uc3QgVmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhlcHRpb25IYW5k
bGVycywgdW5zaWduZWQgaW5kZXgsIGNvbnN0IFdhc206OlRhZyogZXhjZXB0aW9uVGFnKTsKKwor
ICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KTsKKworICAgIHVuc2lnbmVkIHRh
ZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IEhhbmRsZXJUeXBlOjpD
YXRjaCk7CisgICAgICAgIHJldHVybiBtX3RhZzsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBkZWxl
Z2F0ZVRhcmdldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IEhhbmRs
ZXJUeXBlOjpEZWxlZ2F0ZSk7CisgICAgICAgIHJldHVybiBtX2RlbGVnYXRlVGFyZ2V0OworICAg
IH0KKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBt
X25hdGl2ZUNvZGU7CisKK3ByaXZhdGU6CisgICAgdW5pb24geworICAgICAgICB1bnNpZ25lZCBt
X3RhZzsKKyAgICAgICAgdW5zaWduZWQgbV9kZWxlZ2F0ZVRhcmdldDsKKyAgICB9OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCmluZGV4IGZm
ZDc1YzhkMGM4ZjlhYjczMWY3Y2I0OWE4NDJkOTA2NWI4MjgzYjYuLjAyNTRhMGMxMDI5N2FiOGRl
MTg1NGVhODBjOWRhYWU0YzFlYTQ4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlJlZ2lzdGVyLmgi
CiAjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25h
dHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVGFnLmgiCiAjaW5jbHVkZSA8d3RmL0NoZWNr
ZWRBcml0aG1ldGljLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CkBAIC05
MCw3ICs5MSw5IEBAIFJlZjxJbnN0YW5jZT4gSW5zdGFuY2U6OmNyZWF0ZShDb250ZXh0KiBjb250
ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgRW50cnlGcmFtCiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemUobW9kdWxlLT5tb2R1bGVJ
bmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSwgbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpLnRhYmxlQ291bnQoKSkpKSBJbnN0YW5jZShjb250ZXh0LCBXVEZNb3ZlKG1vZHVsZSks
IHBvaW50ZXJUb1RvcEVudHJ5RnJhbWUsIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQsIFdURk1v
dmUoc3RvcmVUb3BDYWxsRnJhbWUpKSk7CiB9CiAKLUluc3RhbmNlOjp+SW5zdGFuY2UoKSB7IH0K
K0luc3RhbmNlOjp+SW5zdGFuY2UoKQoreworfQogCiBzaXplX3QgSW5zdGFuY2U6OmV4dHJhTWVt
b3J5QWxsb2NhdGVkKCkgY29uc3QKIHsKQEAgLTI5Nyw2ICszMDAsMTYgQEAgdm9pZCBJbnN0YW5j
ZTo6bGlua0dsb2JhbCh1bnNpZ25lZCBpLCBSZWY8R2xvYmFsPiYmIGdsb2JhbCkKICAgICBtX2xp
bmtlZEdsb2JhbHMuc2V0KGksIFdURk1vdmUoZ2xvYmFsKSk7CiB9CiAKK3ZvaWQgSW5zdGFuY2U6
OmFkZFRhZyhjb25zdCBUYWcmIHRhZykKK3sKKyAgICBtX3RhZ3MuYXBwZW5kKFJlZiB7IHRhZyB9
KTsKK30KKwordm9pZCBJbnN0YW5jZTo6YWRkVGFnKFRhZyYmIHRhZykKK3sKKyAgICBtX3RhZ3Mu
YXBwZW5kKGFkb3B0UmVmKHRhZykpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtSW5zdGFuY2UuaAppbmRleCA2MGUxNGNiNWFjMDY1ODI0NDM0Mzc4MDlkNTQ2MzNlZGY3
MWNjOGI5Li5kYjk3NGQxMzBkMjcyODU3YWNjMzRkZGU1OGRlMTRmNDM1MjE0NGE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApAQCAtMjEwLDYgKzIxMCwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fc3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKICAgICB9
CiAKKyAgICB2b2lkIGFkZFRhZyhjb25zdCBUYWcmKTsKKyAgICB2b2lkIGFkZFRhZyhUYWcmJik7
CisgICAgY29uc3QgVGFnJiB0YWcodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fdGFnc1tp
XTsgfQorCiBwcml2YXRlOgogICAgIEluc3RhbmNlKENvbnRleHQqLCBSZWY8TW9kdWxlPiYmLCBF
bnRyeUZyYW1lKiosIHZvaWQqKiwgU3RvcmVUb3BDYWxsRnJhbWVDYWxsYmFjayYmKTsKICAgICAK
QEAgLTIzNyw2ICsyNDEsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDMyX3QsIFJlZjxH
bG9iYWw+LCBJbnRIYXNoPHVpbnQzMl90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czx1aW50MzJfdD4+IG1fbGlua2VkR2xvYmFsczsKICAgICBCaXRWZWN0b3IgbV9wYXNzaXZl
RWxlbWVudHM7CiAgICAgQml0VmVjdG9yIG1fcGFzc2l2ZURhdGFTZWdtZW50czsKKyAgICBWZWN0
b3I8UmVmUHRyPGNvbnN0IFRhZz4+IG1fdGFnczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRH
ZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJh
dG9yLmNwcAppbmRleCA4MWE1Y2RiY2FlMzI4NmJlMzJjYTQ5MGRlNDVlZTNhZmY3ODE5ODU2Li4z
NTc2NjZiZGMzZDY1ZGU0NTcwZmQ1NWU4OTljNjZlZWQxMjgzYzExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKQEAgLTYyLDggKzYy
LDI2IEBAIHB1YmxpYzoKICAgICAgICAgUmVmPExhYmVsPiBtX2FsdGVybmF0ZTsKICAgICB9Owog
Ci0gICAgc3RydWN0IENvbnRyb2xUeXBlIDogcHVibGljIFZhcmlhbnQ8Q29udHJvbExvb3AsIENv
bnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWY+IHsKLSAgICAgICAgdXNpbmcg
QmFzZSA9IFZhcmlhbnQ8Q29udHJvbExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2Nr
LCBDb250cm9sSWY+OworICAgIHN0cnVjdCBDb250cm9sVHJ5IHsKKyAgICAgICAgUmVmPExhYmVs
PiBtX3RyeTsKKyAgICAgICAgdW5zaWduZWQgbV90cnlEZXB0aDsKKyAgICB9OworCisgICAgc3Ry
dWN0IENvbnRyb2xDYXRjaCB7CisgICAgICAgIENhdGNoS2luZCBtX2tpbmQ7CisgICAgICAgIFJl
ZjxMYWJlbD4gbV90cnlTdGFydDsKKyAgICAgICAgUmVmPExhYmVsPiBtX3RyeUVuZDsKKyAgICAg
ICAgdW5zaWduZWQgbV90cnlEZXB0aDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fZXhjZXB0
aW9uOworICAgIH07CisKKyAgICBzdHJ1Y3QgQ2F0Y2hSZXdyaXRlSW5mbyB7CisgICAgICAgIHVu
c2lnbmVkIG1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5RGVwdGg7
CisgICAgfTsKKworICAgIHN0cnVjdCBDb250cm9sVHlwZSA6IHB1YmxpYyBWYXJpYW50PENvbnRy
b2xMb29wLCBDb250cm9sVG9wTGV2ZWwsIENvbnRyb2xCbG9jaywgQ29udHJvbElmLCBDb250cm9s
VHJ5LCBDb250cm9sQ2F0Y2g+IHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IFZhcmlhbnQ8Q29udHJv
bExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWYsIENvbnRyb2xU
cnksIENvbnRyb2xDYXRjaD47CiAKICAgICAgICAgQ29udHJvbFR5cGUoKQogICAgICAgICAgICAg
OiBCYXNlKENvbnRyb2xCbG9jayB7IH0pCkBAIC05MCw4ICsxMDgsMjkgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0
dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbElmIHsg
V1RGTW92ZShhbHRlcm5hdGUpIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIGJvb2wg
aXNJZihjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxDb250cm9sSWY+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBDb250cm9sVHlw
ZSBjcmVhdGVUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUs
IFJlZjxMYWJlbD4mJiB0cnlMYWJlbCwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbiwgdW5z
aWduZWQgdHJ5RGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlw
ZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZN
b3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xUcnkgeyBXVEZNb3ZlKHRyeUxhYmVsKSwgdHJ5RGVw
dGggfSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgY3JlYXRlQ2F0
Y2goQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZjxMYWJl
bD4mJiB0cnlTdGFydCwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbiwgUmVmPExhYmVsPiB0
cnlFbmQsIHVuc2lnbmVkIHRyeURlcHRoLCBWaXJ0dWFsUmVnaXN0ZXIgZXhjZXB0aW9uKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1Np
emUgLSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBD
b250cm9sQ2F0Y2ggeyBDYXRjaEtpbmQ6OkNhdGNoLCBXVEZNb3ZlKHRyeVN0YXJ0KSwgV1RGTW92
ZSh0cnlFbmQpLCB0cnlEZXB0aCwgZXhjZXB0aW9uIH0pOworICAgICAgICB9CisKKyAgICAgICAg
c3RhdGljIGJvb2wgaXNMb29wKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29wPihjb250cm9sKTsgfQogICAgICAgICBz
dGF0aWMgYm9vbCBpc1RvcExldmVsKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVy
biBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xUb3BMZXZlbD4oY29udHJvbCk7IH0KKyAg
ICAgICAgc3RhdGljIGJvb2wgaXNCbG9jayhjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyBy
ZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQmxvY2s+KGNvbnRyb2wpOyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0
dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbElmPihjb250cm9sKTsgfQorICAgICAg
ICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4g
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sVHJ5Pihjb250cm9sKTsgfQorICAgICAgICBz
dGF0aWMgYm9vbCBpc0FueUNhdGNoKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVy
biBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xDYXRjaD4oY29udHJvbCk7IH0KKyAgICAg
ICAgc3RhdGljIGJvb2wgaXNDYXRjaChjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xDYXRj
aD4oY29udHJvbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
Q29udHJvbENhdGNoIGNhdGNoRGF0YSA9IFdURjo6Z2V0PENvbnRyb2xDYXRjaD4oY29udHJvbCk7
CisgICAgICAgICAgICByZXR1cm4gY2F0Y2hEYXRhLm1fa2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNo
OworICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zdGFja1NpemU7IH0KICAgICAgICAgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV9zaWduYXR1cmU7IH0KQEAgLTE1MiwxNyArMTkxLDI0IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHku
TW9kdWxlIGZhaWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOwogICAg
IH0KIAotICAgIExMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgdW5zaWdu
ZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJik7CisgICAgTExJbnRHZW5lcmF0b3Io
TW9kdWxlSW5mb3JtYXRpb24mLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4gZmluYWxpemUo
KTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KKyAgICB2b2lkIHJlcGF0Y2goY29u
c3QgQ2F0Y2hSZXdyaXRlSW5mbyYpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhwcmVzc2lv
bkxpc3RBLCB0eXBlbmFtZSBFeHByZXNzaW9uTGlzdEI+CiAgICAgdm9pZCB1bmlmeVZhbHVlc1dp
dGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdEEmIGRlc3RpbmF0aW9ucywgY29uc3QgRXhwcmVz
c2lvbkxpc3RCJiB2YWx1ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoZGVzdGluYXRpb25zLnNp
emUoKSA8PSB2YWx1ZXMuc2l6ZSgpKTsKICAgICAgICAgYXV0byBvZmZzZXQgPSB2YWx1ZXMuc2l6
ZSgpIC0gZGVzdGluYXRpb25zLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBXYXNtTW92OjplbWl0KHRo
aXMsIGRlc3RpbmF0aW9uc1tpXSwgdmFsdWVzW29mZnNldCArIGldKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGF1dG8mIHNyYyA9IHZhbHVlc1tvZmZzZXQgKyBpXTsKKyAgICAgICAgICAgIGF1dG8mIGRzdCA9
IGRlc3RpbmF0aW9uc1tpXTsKKyAgICAgICAgICAgIGlmICgoVmlydHVhbFJlZ2lzdGVyKXNyYyAh
PSAoVmlydHVhbFJlZ2lzdGVyKWRzdCkKKyAgICAgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRo
aXMsIGRzdCwgc3JjKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGVudW0gTm9Db25zaXN0ZW5j
eUNoZWNrVGFnIHsgTm9Db25zaXN0ZW5jeUNoZWNrIH07CkBAIC0yNDMsMTEgKzI4OSwyMSBAQCBw
dWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250
cm9sVHlwZSYsIFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKIAorICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2lu
Z1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYp
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoVG9VbnJlYWNo
YWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5
cGUmLCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQ2F0Y2hBbGwoU3RhY2smLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRlKENvbnRyb2xU
eXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRocm93KHVuc2lnbmVkIGV4
Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldGhyb3codW5zaWduZWQsIENv
bnRyb2xUeXBlJik7CisKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRS
ZXR1cm4oY29uc3QgQ29udHJvbFR5cGUmLCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbFR5cGUmLCBFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRp
b24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZSo+JiB0YXJnZXRzLCBDb250cm9sVHlwZSYgZGVm
YXVsdFRhcmdldHMsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIFN0YWNrJiBleHByZXNz
aW9uU3RhY2spOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRv
VW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9
IHsgfSwgYm9vbCB1bnJlYWNoYWJsZSA9IHRydWUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiwgU3RhY2smIGV4
cHJlc3Npb25TdGFjaywgYm9vbCB1bnJlYWNoYWJsZSA9IHRydWUpOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlLCBjb25zdCBT
dGFjayYpOwogCiAgICAgLy8gQ2FsbHMKQEAgLTMzNyw3ICszOTMsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgV2FzbURyb3BLZWVwOjplbWl0KHRoaXMsIHN0YXJ0T2Zmc2V0LCBkcm9wLCBrZWVw
KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFN0YWNrLCB0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgd2Fsa0V4cHJlc3Np
b25TdGFjayhTdGFjayYgZXhwcmVzc2lvblN0YWNrLCB1bnNpZ25lZCBzdGFja1NpemUsIGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBleHBy
ZXNzaW9uU3RhY2suc2l6ZSgpOyBpID4gMDsgLS1pKSB7CkBAIC0zNDYsNyArNDAyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RhY2ssIHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9p
ZCB3YWxrRXhwcmVzc2lvblN0YWNrKFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGV4cHJlc3Np
b25TdGFjaywgbV9zdGFja1NpemUsIGZ1bmN0b3IpOwpAQCAtMzU1LDcgKzQxMSw4IEBAIHByaXZh
dGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHdhbGtFeHByZXNz
aW9uU3RhY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAg
ICB7Ci0gICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZW50cnkuZW5jbG9zZWRFeHByZXNzaW9u
U3RhY2ssIGVudHJ5LmNvbnRyb2xEYXRhLnN0YWNrU2l6ZSgpLCBmdW5jdG9yKTsKKyAgICAgICAg
dW5zaWduZWQgc3RhY2tTaXplID0gZW50cnkuY29udHJvbERhdGEuc3RhY2tTaXplKCk7CisgICAg
ICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2ssIHN0
YWNrU2l6ZSwgZnVuY3Rvcik7CiAgICAgfQogCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkK
QEAgLTM4MSw3ICs0MzgsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBtYXRlcmlhbGl6ZUNvbnN0
YW50c0FuZExvY2FscyhTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBOb0NvbnNpc3RlbmN5Q2hlY2tU
YWcpCiAgICAgewotICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGV4cHJlc3Npb25TdGFjaywg
WyZdKFR5cGVkRXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsK
KyAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhleHByZXNzaW9uU3RhY2ssIFsmXShhdXRvJiBl
eHByZXNzaW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgewogICAgICAgICAgICAgQVNTRVJUKGV4
cHJlc3Npb24udmFsdWUoKSA9PSBzbG90IHx8IGV4cHJlc3Npb24udmFsdWUoKS5pc0NvbnN0YW50
KCkgfHwgZXhwcmVzc2lvbi52YWx1ZSgpLmlzQXJndW1lbnQoKSB8fCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZXhwcmVzc2lvbi52YWx1ZSgpLnRvTG9jYWwoKSkgPCBtX2NvZGVCbG9jay0+bV9udW1W
YXJzKTsKICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLnZhbHVlKCkgPT0gc2xvdCkKICAgICAg
ICAgICAgICAgICByZXR1cm47CkBAIC00MTcsNiArNDc0LDggQEAgcHJpdmF0ZToKICAgICAgICAg
bV9zdGFja1NpemUgKz0gbmV3U3RhY2suc2l6ZSgpOwogICAgIH0KIAorICAgIHZvaWQgZmluYWxp
emVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2goQ29udHJvbFR5cGUmLCBTdGFjayYpOworCiAgICAgc3Ry
dWN0IFN3aXRjaEVudHJ5IHsKICAgICAgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZz
ZXQ7CiAgICAgICAgIGludCoganVtcFRhcmdldDsKQEAgLTQyOSw3ICs0ODgsNyBAQCBwcml2YXRl
OgogICAgIH07CiAKICAgICBGdW5jdGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj4qIG1fcGFyc2Vy
IHsgbnVsbHB0ciB9OwotICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CisgICAg
TW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKICAgICBjb25zdCB1bnNpZ25lZCBtX2Z1bmN0aW9u
SW5kZXggeyBVSU5UX01BWCB9OwogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IG1fbm9ybWFs
aXplZEFyZ3VtZW50czsKICAgICBIYXNoTWFwPExhYmVsKiwgVmVjdG9yPFN3aXRjaEVudHJ5Pj4g
bV9zd2l0Y2hlczsKQEAgLTQ0MCw5ICs0OTksMTIgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Vmly
dHVhbFJlZ2lzdGVyLCAyPiBtX3Jlc3VsdHM7CiAgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9zdGFj
a1NpemUgeyAwIH07CiAgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9tYXhTdGFja1NpemUgeyAwIH07
CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV90cnlEZXB0aCB7IDAgfTsKKyAgICBDaGVja2VkPHVu
c2lnbmVkPiBtX21heFRyeURlcHRoIHsgMCB9OworICAgIGJvb2wgbV91c2VzRXhjZXB0aW9ucyB7
IGZhbHNlIH07CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0
aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
KQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBw
YXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXpl
X3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbywgdWludDMyX3QgZnVuY3Rpb25JbmRleCkKIHsKICAgICBMTEludEdlbmVy
YXRvciBsbGludEdlbmVyYXRvcihpbmZvLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmUpOwogICAg
IEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiBwYXJzZXIobGxpbnRHZW5lcmF0b3IsIGZ1
bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOwpAQCAtNDY2LDcg
KzUyOCw3IEBAIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxCdWZmZXI+JiB0aHJlYWRTcGVjaWZpY0J1
ZmZlcigpCiAgICAgcmV0dXJuICp0aHJlYWRTcGVjaWZpY0J1ZmZlclB0cjsKIH0KIAotTExJbnRH
ZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKQorTExJbnRHZW5lcmF0b3I6
OkxMSW50R2VuZXJhdG9yKE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmKQogICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKG1h
a2VVbmlxdWU8RnVuY3Rpb25Db2RlQmxvY2s+KGZ1bmN0aW9uSW5kZXgpLCAwKQogICAgICwgbV9p
bmZvKGluZm8pCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKQEAgLTQ4NSw5
ICs1NDcsMjIgQEAgTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkkKICAgICBXYXNtRW50ZXI6OmVtaXQo
dGhpcyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3ZvaWQgTExJbnRHZW5lcmF0
b3I6OnJlcGF0Y2goY29uc3QgQ2F0Y2hSZXdyaXRlSW5mbyYgaW5mbykKK3sKKyAgICBhdXRvIHJl
ZiA9IG1fd3JpdGVyLnJlZihpbmZvLm1faW5zdHJ1Y3Rpb25PZmZzZXQpOworICAgIE9wY29kZSog
aW5zdHJ1Y3Rpb24gPSByZWYtPmNhc3Q8T3Bjb2RlLCBXYXNtT3Bjb2RlVHJhaXRzPigpOworICAg
IFZpcnR1YWxSZWdpc3RlciBleGNlcHRpb25SZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKG1fbWF4U3RhY2tTaXplICsgaW5mby5tX3RyeURlcHRoIC0gMSk7CisgICAgaW5zdHJ1Y3Rp
b24tPnNldEV4Y2VwdGlvbihleGNlcHRpb25SZWdpc3RlciwgW10oKSB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICB9KTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBMTElu
dEdlbmVyYXRvcjo6ZmluYWxpemUoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29kZUJsb2Nr
KTsKKwogICAgIHNpemVfdCBudW1DYWxsZWVMb2NhbHMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgbV9tYXhTdGFja1NpemUpOwogICAgIG1fY29k
ZUJsb2NrLT5tX251bUNhbGxlZUxvY2FscyA9IG51bUNhbGxlZUxvY2FsczsKICAgICBSRUxFQVNF
X0FTU0VSVChudW1DYWxsZWVMb2NhbHMgPT0gbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlTG9jYWxz
KTsKQEAgLTUwMCw2ICs1NzUsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+
IExMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSgpCiAgICAgUkVMRUFTRV9BU1NFUlQodXNlZEJ1ZmZl
ci5jYXBhY2l0eSgpID09IG9sZENhcGFjaXR5KTsKICAgICAqdGhyZWFkU3BlY2lmaWMgPSBXVEZN
b3ZlKHVzZWRCdWZmZXIpOwogCisgICAgaWYgKCFtX3VzZXNFeGNlcHRpb25zKQorICAgICAgICBt
X2luZm8ubV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrU2V0KG1fZnVuY3Rpb25J
bmRleCk7CisKICAgICByZXR1cm4gV1RGTW92ZShtX2NvZGVCbG9jayk7CiB9CiAKQEAgLTU4MCw3
ICs2NTgsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIo
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IExMSQogCiAgICAgLy8gRklYTUU6IHdlIGFy
ZSBhbGxvY2F0aW5nIHRoZSBleHRyYSBzcGFjZSBmb3IgdGhlIGFyZ3VtZW50L3JldHVybiBjb3Vu
dCBpbiBvcmRlciB0byBhdm9pZCBpbnRlcmZlcmVuY2UsIGJ1dCB3ZSBjb3VsZCBkbyBiZXR0ZXIK
ICAgICAvLyBOT1RFOiBXZSBpbmNyZWFzZSBhcmcgY291bnQgYnkgMSBmb3IgdGhlIGNhc2Ugb2Yg
aW5kaXJlY3QgY2FsbHMKLSAgICBtX3N0YWNrU2l6ZSArPSBzdGQ6Om1heChzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpICsgMSwgc2lnbmF0dXJlLnJldHVybkNvdW50KCkpICsgZ3ByQ291bnQgKyBm
cHJDb3VudCArIHN0YWNrQ291bnQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsK
KyAgICBtX3N0YWNrU2l6ZSArPSBzdGQ6Om1heChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpICsg
MSwgc2lnbmF0dXJlLnJldHVybkNvdW50KCkpICsgZ3ByQ291bnQgKyBmcHJDb3VudCArIHN0YWNr
Q291bnQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIDE7CiAgICAgaWYgKG1f
c3RhY2tTaXplLnZhbHVlKCkgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKQogICAgICAgICAr
K21fc3RhY2tTaXplOwogICAgIGlmIChtX21heFN0YWNrU2l6ZSA8IG1fc3RhY2tTaXplKQpAQCAt
NTkxLDcgKzY2OSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNh
bGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAgICAgUmVzdWx0TGlzdCB0
ZW1wb3JhcnlSZXN1bHRzKHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpKTsKIAogICAgIGNvbnN0IHVu
c2lnbmVkIHN0YWNrT2Zmc2V0ID0gbV9zdGFja1NpemU7Ci0gICAgY29uc3QgdW5zaWduZWQgYmFz
ZSA9IHN0YWNrT2Zmc2V0IC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7CisgICAg
Y29uc3QgdW5zaWduZWQgYmFzZSA9IHN0YWNrT2Zmc2V0IC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnMgLSAxOwogCiAgICAgY29uc3QgdWludDMyX3QgZ3ByTGltaXQgPSBiYXNlIC0g
c3RhY2tDb3VudCAtIGdwckNvdW50OwogICAgIGNvbnN0IHVpbnQzMl90IGZwckxpbWl0ID0gZ3By
TGltaXQgLSBmcHJDb3VudDsKQEAgLTY4Myw3ICs3NjEsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9y
OjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+
IFZlYwogCiAgICAgdWludDMyX3QgZ3BySW5kZXggPSAwOwogICAgIHVpbnQzMl90IGZwckluZGV4
ID0gZ3ByQ291bnQ7Ci0gICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7CisgICAgdWludDMyX3Qg
c3RhY2tJbmRleCA9IDE7CiAgICAgY29uc3QgdWludDMyX3QgbWF4R1BSSW5kZXggPSBncHJDb3Vu
dDsKICAgICBjb25zdCB1aW50MzJfdCBtYXhGUFJJbmRleCA9IG1heEdQUkluZGV4ICsgZnByQ291
bnQ7CiAKQEAgLTczMSw3ICs4MDksNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRBcmd1bWVu
dHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBjb25z
dCB1aW50MzJfdCBtYXhGUFJJbmRleCA9IGdwckNvdW50ICsgZnByQ291bnQ7CiAgICAgdWludDMy
X3QgZ3BySW5kZXggPSAwOwogICAgIHVpbnQzMl90IGZwckluZGV4ID0gbWF4R1BSSW5kZXg7Ci0g
ICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7CisgICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDE7
CiAKICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiByZWdpc3RlckFyZ3VtZW50cyhncHJDb3Vu
dCArIGZwckNvdW50KTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZ3ByQ291bnQgKyBm
cHJDb3VudDsgaSsrKQpAQCAtOTA2LDYgKzk4NCw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFk
ZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENv
CiAKICAgICBibG9jayA9IENvbnRyb2xUeXBlOjpsb29wKHNpZ25hdHVyZSwgbV9zdGFja1NpemUs
IFdURk1vdmUoYm9keSksIFdURk1vdmUoY29udGludWF0aW9uKSk7CiAKKyAgICBWZWN0b3I8dW5z
aWduZWQ+IHVucmVzb2x2ZWRPZmZzZXRzOwogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IG9z
ckVudHJ5RGF0YTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm1f
bnVtQXJndW1lbnRzOyBpKyspCiAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQobV9ub3JtYWxp
emVkQXJndW1lbnRzW2ldKTsKQEAgLTkxNiw5ICs5OTUsMTIgQEAgYXV0byBMTEludEdlbmVyYXRv
cjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFj
aywgQ28KICAgICBmb3IgKHVpbnQzMl90IGkgPSBncHJDb3VudCArIGZwckNvdW50ICsgbnVtYmVy
T2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnM7IGkgPCBtX2NvZGVCbG9jay0+bV9udW1WYXJzOyBp
KyspCiAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
aSkpOwogICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwg
bV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKKyAgICAg
ICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbElu
ZGV4XS5jb250cm9sRGF0YTsKICAgICAgICAgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9IG1fcGFy
c2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNr
OwogICAgICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0
YWNrKQogICAgICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZChleHByZXNzaW9uKTsKKyAgICAg
ICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpKQorICAgICAgICAgICAgb3NyRW50
cnlEYXRhLmFwcGVuZChXVEY6OmdldDxDb250cm9sQ2F0Y2g+KGRhdGEpLm1fZXhjZXB0aW9uKTsK
ICAgICB9CiAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gZXhwcmVzc2lvbiA6IGVuY2xvc2luZ1N0
YWNrKQogICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKGV4cHJlc3Npb24pOwpAQCAtOTc1LDYg
KzEwNTcsMTU5IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENv
bnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAor
YXV0byBMTEludEdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3Rh
Y2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2sp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICAr
K21fdHJ5RGVwdGg7CisgICAgaWYgKG1fbWF4VHJ5RGVwdGggPCBtX3RyeURlcHRoKQorICAgICAg
ICBtX21heFRyeURlcHRoID0gbV90cnlEZXB0aDsKKworICAgIHNwbGl0U3RhY2soc2lnbmF0dXJl
LCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOworICAgIFJlZjxMYWJlbD4gdHJ5TGFiZWwgPSBu
ZXdFbWl0dGVkTGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+IGNvbnRpbnVhdGlvbiA9IG5ld0xhYmVs
KCk7CisgICAgcmVzdWx0ID0gQ29udHJvbFR5cGU6OmNyZWF0ZVRyeShzaWduYXR1cmUsIG1fc3Rh
Y2tTaXplLCBXVEZNb3ZlKHRyeUxhYmVsKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBtX3RyeURl
cHRoKTsKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIExMSW50R2VuZXJhdG9yOjpmaW5hbGl6
ZVByZXZpb3VzQmxvY2tGb3JDYXRjaChDb250cm9sVHlwZSYgZGF0YSwgU3RhY2smIGV4cHJlc3Np
b25TdGFjaykKK3sKKyAgICBpZiAoIUNvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpKQorICAg
ICAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNzaW9uU3RhY2spOworICAg
IGVsc2UgeworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChkYXRhLnN0YWNrU2l6ZSgpKTsKKyAg
ICAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24mIHZhbHVlIDogZXhwcmVzc2lvblN0YWNrKSB7Cisg
ICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIGRzdCwgdmFsdWUpOworICAgICAgICAgICAg
dmFsdWUgPSBUeXBlZEV4cHJlc3Npb24geyB2YWx1ZS50eXBlKCksIGRzdCB9OworICAgICAgICAg
ICAgZHN0IC09IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgV2FzbUptcDo6ZW1pdCh0aGlzLCBk
YXRhLm1fY29udGludWF0aW9uLT5iaW5kKHRoaXMpKTsKK30KKworYXV0byBMTEludEdlbmVyYXRv
cjo6YWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgZXhj
ZXB0aW9uU2lnbmF0dXJlLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBDb250cm9sVHlwZSYgZGF0
YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGZpbmFsaXpl
UHJldmlvdXNCbG9ja0ZvckNhdGNoKGRhdGEsIGV4cHJlc3Npb25TdGFjayk7CisgICAgcmV0dXJu
IGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRleCwgZXhjZXB0aW9uU2lnbmF0dXJl
LCBkYXRhLCByZXN1bHRzKTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1Vu
cmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIGV4Y2Vw
dGlvblNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICBSZWY8
TGFiZWw+IGNhdGNoTGFiZWwgPSBuZXdFbWl0dGVkTGFiZWwoKTsKKworICAgIG1fc3RhY2tTaXpl
ID0gZGF0YS5zdGFja1NpemUoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZXhjZXB0aW9uID0gcHVz
aCgpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xUcnk+KGRhdGEpKSB7
CisgICAgICAgIENvbnRyb2xUcnkmIHRyeURhdGEgPSBXVEY6OmdldDxDb250cm9sVHJ5PihkYXRh
KTsKKyAgICAgICAgZGF0YSA9IENvbnRyb2xUeXBlOjpjcmVhdGVDYXRjaChkYXRhLm1fc2lnbmF0
dXJlLCBkYXRhLnN0YWNrU2l6ZSgpLCBXVEZNb3ZlKHRyeURhdGEubV90cnkpLCBXVEZNb3ZlKGRh
dGEubV9jb250aW51YXRpb24pLCBjYXRjaExhYmVsLCB0cnlEYXRhLm1fdHJ5RGVwdGgsIGV4Y2Vw
dGlvbik7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2go
KSk7CisKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBXYXNtQ2F0Y2g6
OmVtaXQodGhpcywgZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvbiwgZXhjZXB0aW9uU2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSwgcmVzdWx0cy5pc0VtcHR5KCkgPyAwIDogLXJlc3VsdHNbMF0ub2Zm
c2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgV2FzbUNhdGNoTm9UbHM6OmVtaXQodGhpcywgZXhj
ZXB0aW9uSW5kZXgsIGV4Y2VwdGlvbiwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSwgcmVzdWx0cy5pc0VtcHR5KCkgPyAwIDogLXJlc3VsdHNbMF0ub2Zmc2V0KCkpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCk7ICsraSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gcmVzdWx0c1tpXTsKKyAg
ICAgICAgVHlwZSB0eXBlID0gZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAg
ICBzd2l0Y2ggKHR5cGUua2luZCkgeworICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGMzI6
CisgICAgICAgICAgICBXYXNtRjMyUmVpbnRlcnByZXRJMzI6OmVtaXQodGhpcywgZHN0LCBkc3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkY2NDoK
KyAgICAgICAgICAgIFdhc21GNjRSZWludGVycHJldEk2NDo6ZW1pdCh0aGlzLCBkc3QsIGRzdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STMyOgor
ICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJNjQ6CisgICAgICAgIGNhc2UgV2FzbTo6VHlw
ZUtpbmQ6OkV4dGVybnJlZjoKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RnVuY3JlZjoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorCisgICAgQ29udHJvbENhdGNoJiBjYXRjaERhdGEgPSBXVEY6OmdldDxDb250cm9sQ2F0
Y2g+KGRhdGEpOworICAgIGNhdGNoRGF0YS5tX2tpbmQgPSBDYXRjaEtpbmQ6OkNhdGNoOworICAg
IG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKHsgSGFuZGxlclR5cGU6OkNhdGNoLCBj
YXRjaERhdGEubV90cnlTdGFydC0+bG9jYXRpb24oKSwgY2F0Y2hEYXRhLm1fdHJ5RW5kLT5sb2Nh
dGlvbigpLCBjYXRjaExhYmVsLT5sb2NhdGlvbigpLCBtX3RyeURlcHRoLCBleGNlcHRpb25JbmRl
eCB9KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENh
dGNoQWxsKFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2goZGF0YSwgZXhw
cmVzc2lvblN0YWNrKTsKKyAgICBXYXNtSm1wOjplbWl0KHRoaXMsIGRhdGEubV9jb250aW51YXRp
b24tPmJpbmQodGhpcykpOworICAgIHJldHVybiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoZGF0
YSk7Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShD
b250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIG1fdXNlc0V4Y2VwdGlv
bnMgPSB0cnVlOworICAgIFJlZjxMYWJlbD4gY2F0Y2hMYWJlbCA9IG5ld0VtaXR0ZWRMYWJlbCgp
OworICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZXhjZXB0aW9uID0gcHVzaCgpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENv
bnRyb2xUcnk+KGRhdGEpKSB7CisgICAgICAgIENvbnRyb2xUcnkmIHRyeURhdGEgPSBXVEY6Omdl
dDxDb250cm9sVHJ5PihkYXRhKTsKKyAgICAgICAgZGF0YSA9IENvbnRyb2xUeXBlOjpjcmVhdGVD
YXRjaChkYXRhLm1fc2lnbmF0dXJlLCBkYXRhLnN0YWNrU2l6ZSgpLCBXVEZNb3ZlKHRyeURhdGEu
bV90cnkpLCBXVEZNb3ZlKGRhdGEubV9jb250aW51YXRpb24pLCBjYXRjaExhYmVsLCB0cnlEYXRh
Lm1fdHJ5RGVwdGgsIGV4Y2VwdGlvbik7CisgICAgfQorICAgIENvbnRyb2xDYXRjaCYgY2F0Y2hE
YXRhID0gV1RGOjpnZXQ8Q29udHJvbENhdGNoPihkYXRhKTsKKyAgICBjYXRjaERhdGEubV9raW5k
ID0gQ2F0Y2hLaW5kOjpDYXRjaEFsbDsKKworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkp
CisgICAgICAgIFdhc21DYXRjaEFsbDo6ZW1pdCh0aGlzLCBleGNlcHRpb24pOworICAgIGVsc2UK
KyAgICAgICAgV2FzbUNhdGNoQWxsTm9UbHM6OmVtaXQodGhpcywgZXhjZXB0aW9uKTsKKworICAg
IG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKHsgSGFuZGxlclR5cGU6OkNhdGNoQWxs
LCBjYXRjaERhdGEubV90cnlTdGFydC0+bG9jYXRpb24oKSwgY2F0Y2hEYXRhLm1fdHJ5RW5kLT5s
b2NhdGlvbigpLCBjYXRjaExhYmVsLT5sb2NhdGlvbigpLCBtX3RyeURlcHRoLCAwIH0pOworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZERlbGVnYXRlKENvbnRy
b2xUeXBlJiB0YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIGFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZSh0YXJnZXQsIGRhdGEpOworfQorCith
dXRvIExMSW50R2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUm
IHRhcmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3Vz
ZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICBSZWY8TGFiZWw+IGRlbGVnYXRlTGFiZWwgPSBuZXdF
bWl0dGVkTGFiZWwoKTsKKworICAgIEFTU0VSVChDb250cm9sVHlwZTo6aXNUcnkodGFyZ2V0KSB8
fCBDb250cm9sVHlwZTo6aXNUb3BMZXZlbCh0YXJnZXQpKTsKKyAgICB1bnNpZ25lZCB0YXJnZXRE
ZXB0aCA9IENvbnRyb2xUeXBlOjppc1RyeSh0YXJnZXQpID8gV1RGOjpnZXQ8Q29udHJvbFRyeT4o
dGFyZ2V0KS5tX3RyeURlcHRoIDogMDsKKworICAgIENvbnRyb2xUcnkmIHRyeURhdGEgPSBXVEY6
OmdldDxDb250cm9sVHJ5PihkYXRhKTsKKyAgICBtX2NvZGVCbG9jay0+YWRkRXhjZXB0aW9uSGFu
ZGxlcih7IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSwgdHJ5RGF0YS5tX3RyeS0+bG9jYXRpb24oKSwg
ZGVsZWdhdGVMYWJlbC0+bG9jYXRpb24oKSwgMCwgbV90cnlEZXB0aCwgdGFyZ2V0RGVwdGggfSk7
CisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJ
bnRHZW5lcmF0b3I6OmFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3Vz
ZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGFyZ3MsIFsmXShW
aXJ0dWFsUmVnaXN0ZXImIGFyZywgVmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsKKyAgICAgICAgaWYg
KGFyZyA9PSBzbG90KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBXYXNtTW92OjplbWl0
KHRoaXMsIHNsb3QsIGFyZyk7CisgICAgICAgIGFyZyA9IHNsb3Q7CisgICAgfSk7CisgICAgV2Fz
bVRocm93OjplbWl0KHRoaXMsIGV4Y2VwdGlvbkluZGV4LCBhcmdzLmlzRW1wdHkoKSA/IHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKDApIDogYXJnc1swXSk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5cGUmIGRh
dGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAg
ICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQ2F0Y2g+KGRhdGEpKTsKKyAg
ICBDb250cm9sQ2F0Y2ggY2F0Y2hEYXRhID0gV1RGOjpnZXQ8Q29udHJvbENhdGNoPihkYXRhKTsK
KyAgICBXYXNtUmV0aHJvdzo6ZW1pdCh0aGlzLCBjYXRjaERhdGEubV9leGNlcHRpb24pOworICAg
IHJldHVybiB7IH07Cit9CisKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBD
b250cm9sVHlwZSYgZGF0YSwgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAog
ewogICAgIGlmICghZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSkgewpAQCAtMTA0OSwx
OSArMTI4NCwyNSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjplbmRCbG9jayhDb250cm9sRW50cnkm
IGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYQogewogICAgIC8vIEZJWE1FOiBX
ZSBvbmx5IG5lZWQgdG8gbWF0ZXJpYWxpemUgY29uc3RhbnRzIGhlcmUgaWYgdGhlcmUgZXhpc3Rz
IGEganVtcCB0byB0aGlzIGxhYmVsCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMzY1NwotICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKGV4
cHJlc3Npb25TdGFjayk7CisgICAgZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2goZW50cnku
Y29udHJvbERhdGEsIGV4cHJlc3Npb25TdGFjayk7CiAgICAgcmV0dXJuIGFkZEVuZFRvVW5yZWFj
aGFibGUoZW50cnksIGV4cHJlc3Npb25TdGFjaywgZmFsc2UpOwogfQogCiAKLWF1dG8gTExJbnRH
ZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3Qg
U3RhY2smIGV4cHJlc3Npb25TdGFjaywgYm9vbCB1bnJlYWNoYWJsZSkgLT4gUGFydGlhbFJlc3Vs
dAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkm
IGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBib29sIHVucmVhY2hhYmxlKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CiAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsK
IAotICAgIFJFTEVBU0VfQVNTRVJUKHVucmVhY2hhYmxlIHx8IG1fc3RhY2tTaXplID09IGRhdGEu
c3RhY2tTaXplKCkgKyBkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKTsKKyAgICB1bnNp
Z25lZCBzdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOworICAgIGlmIChDb250cm9sVHlwZTo6
aXNBbnlDYXRjaChlbnRyeS5jb250cm9sRGF0YSkpCisgICAgICAgICsrc3RhY2tTaXplOyAvLyBB
Y2NvdW50IGZvciB0aGUgY2F1Z2h0IGV4Y2VwdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKHVucmVh
Y2hhYmxlIHx8IG1fc3RhY2tTaXplID09ICBzdGFja1NpemUgKyBkYXRhLm1fc2lnbmF0dXJlLT5y
ZXR1cm5Db3VudCgpKTsKIAogICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKIAor
ICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkgfHwgV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxDb250cm9sQ2F0Y2g+KGRhdGEpKQorICAgICAgICAtLW1fdHJ5RGVwdGg7CisKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytp
KSB7CiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG8gYSBjb25zaXN0ZW5jeSBjaGVjayBo
ZXJlIGJlY2F1c2Ugd2UganVzdCByZXNldCB0aGUgc3RhY2sgc2l6ZQogICAgICAgICAvLyBhcmUg
cHVzaGluZyBuZXcgdmFsdWVzLCB3aGlsZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHNhbWUgdmFsdWVz
IGluIHRoZSBzdGFjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21MTEludEdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50
R2VuZXJhdG9yLmgKaW5kZXggOGExNjAzODI2YzEwMGViZmYwOGEwMzA2ZjYyZWQxOTdiYmNlZmY1
Yi4uYzAxMmZiMWVlNzE0YWY5ODIzZGEyNmM2YzM0ZDhhYjc3MmViNDU1MiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKQEAgLTM2LDcgKzM2
LDcgQEAgY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBTaWduYXR1cmU7CiBzdHJ1Y3Qg
TW9kdWxlSW5mb3JtYXRpb247CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCos
IHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4KTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCos
IHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgTW9kdWxlSW5mb3JtYXRpb24mLCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oCmluZGV4IGNmOGI0NDYwMzY4MTEyM2VjYzI1Y2Zj
MzcyNDk4YjVmNWI1OGM5ODYuLmY4ZjA1M2I1ODYwZTdkZjk3ZGI0NDY0YWEwZWExNzQ4ZDliODdm
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MaW1pdHMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmgKQEAgLTQxLDYgKzQx
LDcgQEAgY29uc3RleHByIHNpemVfdCBtYXhUeXBlcyA9IDEwMDAwMDA7CiBjb25zdGV4cHIgc2l6
ZV90IG1heEZ1bmN0aW9ucyA9IDEwMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEltcG9ydHMg
PSAxMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEV4cG9ydHMgPSAxMDAwMDA7Citjb25zdGV4
cHIgc2l6ZV90IG1heEV4Y2VwdGlvbnMgPSAxMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEds
b2JhbHMgPSAxMDAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhEYXRhU2VnbWVudHMgPSAxMDAw
MDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5m
b3JtYXRpb24uY3BwCmluZGV4IDM1NDkxY2ZlNTQxMDU3M2FiZDM1YmEzOWI3NTYwN2Q4NmMyNjhk
YjYuLmM2ZThiOGM3ZmViOWNjMjA4ZWIyNzk2ZWE3ZjJhNDIwNGQ0MDc2NzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcApA
QCAtMzYsNiArMzYsNyBAQCBNb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3JtYXRpb24oKQog
ICAgIDogbmFtZVNlY3Rpb24oTmFtZVNlY3Rpb246OmNyZWF0ZSgpKQogewogfQorCiBNb2R1bGVJ
bmZvcm1hdGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKCkgeyB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlSW5mb3JtYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oCmluZGV4IGEyYjBmODM2Yzg5YzIwZWVlMjRiOWFiMzRiZTEwMWMyODUxNDAz
NTIuLjMyOGM2YmNhNmJmYTY2MmI1M2U5YzhjOGRhOWFjYjE4ZjUwNDRhYzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCkBAIC01
OCw4ICs1OCwyMiBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICAgICAgICAgIDogaW50ZXJuYWxG
dW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleCAtIGltcG9ydEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlcy5zaXplKCldOwogICAgIH0KIAorICAgIHNpemVfdCBleGNlcHRpb25JbmRl
eFNwYWNlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGlj
ZXMuc2l6ZSgpICsgaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQor
ICAgIGJvb2wgaXNJbXBvcnRlZEV4Y2VwdGlvbkZyb21FeGNlcHRpb25JbmRleFNwYWNlKHNpemVf
dCBleGNlcHRpb25JbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChleGNlcHRpb25J
bmRleCA8IGV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCkpOworICAgICAgICByZXR1cm4gZXhjZXB0
aW9uSW5kZXggPCBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICB9
CisgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFj
ZShzaXplX3QgZXhjZXB0aW9uSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNJ
bXBvcnRlZEV4Y2VwdGlvbkZyb21FeGNlcHRpb25JbmRleFNwYWNlKGV4Y2VwdGlvbkluZGV4KQor
ICAgICAgICAgICAgPyBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzW2V4Y2VwdGlvbklu
ZGV4XQorICAgICAgICAgICAgOiBpbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXNbZXhj
ZXB0aW9uSW5kZXggLSBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKV07Cisg
ICAgfQorCiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KICAgICB1aW50MzJfdCBp
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbXBvcnRFeGNlcHRpb25Db3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgp
OyB9CiAKICAgICAvLyBDdXJyZW50bHksIG91ciB3YXNtIGltcGxlbWVudGF0aW9uIGFsbG93cyBv
bmx5IG9uZSBtZW1vcnkgYW5kIHRhYmxlLgogICAgIC8vIElmIHdlIG5lZWQgdG8gcmVtb3ZlIHRo
aXMgbGltaXRhdGlvbiwgd2Ugd291bGQgaGF2ZSBNZW1vcnlJbmZvcm1hdGlvbiBhbmQgVGFibGVJ
bmZvcm1hdGlvbiBpbiB0aGUgVmVjdG9ycy4KQEAgLTc2LDkgKzkwLDE0IEBAIHN0cnVjdCBNb2R1
bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1bGVJbmZvcm1h
dGlvbj4gewogICAgIGJvb2wgaXNEZWNsYXJlZEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2RlY2xhcmVkRnVuY3Rpb25zLmNvbnRhaW5zKGluZGV4KTsgfQogICAgIHZv
aWQgYWRkRGVjbGFyZWRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkgeyBtX2RlY2xhcmVkRnVuY3Rp
b25zLnNldChpbmRleCk7IH0KIAorICAgIGJvb2wgaXNEZWNsYXJlZEV4Y2VwdGlvbih1aW50MzJf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9kZWNsYXJlZEV4Y2VwdGlvbnMuY29udGFpbnMoaW5k
ZXgpOyB9CisgICAgdm9pZCBhZGREZWNsYXJlZEV4Y2VwdGlvbih1aW50MzJfdCBpbmRleCkgeyBt
X2RlY2xhcmVkRXhjZXB0aW9ucy5zZXQoaW5kZXgpOyB9CisKICAgICBWZWN0b3I8SW1wb3J0PiBp
bXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW50ZXJuYWxGdW5jdGlvblNp
Z25hdHVyZUluZGljZXM7CisgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbXBvcnRFeGNlcHRp
b25TaWduYXR1cmVJbmRpY2VzOworICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW50ZXJuYWxF
eGNlcHRpb25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxSZWY8U2lnbmF0dXJlPj4gdXNl
ZFNpZ25hdHVyZXM7CiAKICAgICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1vcnk7CkBAIC05OCw2ICsx
MTcsOCBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICB1aW50MzJfdCBudW1iZXJPZkRhdGFTZWdt
ZW50cyB7IDAgfTsKIAogICAgIEJpdFZlY3RvciBtX2RlY2xhcmVkRnVuY3Rpb25zOworICAgIEJp
dFZlY3RvciBtX2RlY2xhcmVkRXhjZXB0aW9uczsKKyAgICBCaXRWZWN0b3IgbV9mdW5jdGlvbkRv
ZXNOb3RVc2VFeGNlcHRpb25zOwogICAgIG11dGFibGUgQml0VmVjdG9yIG1fcmVmZXJlbmNlZEZ1
bmN0aW9uczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKaW5kZXggMGQ0MzM4ZDY1OTIxMzIyZjAyODBkZWY2OWQ1
ODM2MTZiNDlkNjFjYi4uNjEwMzE2MWMxYzJmMDI0YzI5NGMwZmUxNTQwZmViYzc1MmI5ZGRjNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5
UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVu
dHJ5UGxhbi5jcHAKQEAgLTkxLDE2ICs5MSwyMCBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6
d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIElu
dGVybmFsRnVuY3Rpb24qIGludGVybmFsRnVuY3Rpb24gPSBwYXJzZUFuZENvbXBpbGVSZXN1bHQt
PmdldCgpOworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPj4gZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBpbnRlcm5hbEZ1bmN0aW9u
LCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKKwogICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24g
PSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfV0FTTV9DT0RFX0ZP
Ul9NT0RFKENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBsaW5rQnVmZmVyLCBK
SVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9NR0Zvck9TUkVudHJ5IGZ1bmN0aW9u
WyVpXSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2Us
IG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNl
KSkpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBv
aW50Qnlwcm9kdWN0cykpOwogCi0gICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJz
ID0gV1RGTW92ZShwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+ZW50cnlwb2ludC5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMg
PSBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVy
cyk7CiAKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9j
a0Zvcihtb2RlKCkpKTsKLSAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNhbGxlZSA9IE9N
R0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rp
b25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0
aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4LCBX
VEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKKyAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNh
bGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50
KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+
Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9v
cEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24t
PnN0YWNrbWFwcyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMp
LCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKICAgICB7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUo
KS0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkp
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoaW50ZXJuYWxGdW5jdGlv
bi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkp
OwogCiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NvZGVCbG9jay0+bV9sb2NrIH07CiAgICAg
ICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKaW5kZXggNWU3OWYxYmM5
ODVjNjVkNWNiYmFmODc4NGJkYjQ4OTBkYzhlNjI1MC4uZjhlZTAwMDgwODk5ZGM2YWE1NjViMjJh
ZDkzM2M5M2QzNGFhMmJlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQ
bGFuLmNwcApAQCAtODgsMTcgKzg4LDIxIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlv
bkVmZm9ydCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIEludGVybmFsRnVuY3Rpb24q
IGludGVybmFsRnVuY3Rpb24gPSBwYXJzZUFuZENvbXBpbGVSZXN1bHQtPmdldCgpOworICAgIFZl
Y3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4gZXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhl
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb250ZXh0LCBsaW5r
QnVmZmVyKTsKKwogICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPENv
bXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfV0FTTV9DT0RFX0ZPUl9NT0RFKENvbXBpbGF0
aW9uTW9kZTo6T01HTW9kZSwgbGlua0J1ZmZlciwgSklUQ29tcGlsYXRpb25QdHJUYWcsICJXZWJB
c3NlbWJseSBPTUcgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNp
Z25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1l
KGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdl
dChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICBXVEZNb3Zl
KGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAKLSAgICBvbWdFbnRyeXBvaW50
LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1
ZSgpLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgIG9tZ0VudHJ5cG9pbnQu
Y2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2lu
dC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgewogICAgICAgICBBU1NFUlQobV9jb2RlQmxv
Y2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKLSAgICAgICAgUmVm
PE9NR0NhbGxlZT4gY2FsbGVlID0gT01HQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBv
aW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlv
bi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodW5saW5rZWRDYWxscykpOwotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIocGFyc2VBbmRDb21waWxlUmVzdWx0
LnZhbHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUu
cHRyKCkpKTsKKyAgICAgICAgUmVmPE9NR0NhbGxlZT4gY2FsbGVlID0gT01HQ2FsbGVlOjpjcmVh
dGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUo
dW5saW5rZWRDYWxscyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RG
TW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9ucykpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBv
aW50ZXIoaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpi
b3hXYXNtKGNhbGxlZS5wdHIoKSkpOwogICAgICAgICBBU1NFUlQoIW1fY29kZUJsb2NrLT5tX29t
Z0NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSk7CiAgICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUt
PmVudHJ5cG9pbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9TUkVudHJ5RGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9TUkVu
dHJ5RGF0YS5oCmluZGV4IGQ0MWVkNzkzMmIzMGU5YWEwYWU4NzYzYmE4MmE2MTJjYWY3ZTY0OGIu
LmQ5M2YzNDJjZTY0MmQyYzY2MzlmNjkwNjU5ZTZhMjViM2EwYTc4MjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeURhdGEuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlEYXRhLmgKQEAgLTI3LDggKzI3LDggQEAK
IAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKIAorI2luY2x1ZGUgIkIzVHlwZS5oIgog
I2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKLSNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpAQCAt
NDcsNiArNDcsOSBAQCBwcml2YXRlOgogICAgIEIzOjpUeXBlIG1fdHlwZTsKIH07CiAKK3VzaW5n
IFN0YWNrTWFwID0gVmVjdG9yPE9TUkVudHJ5VmFsdWU+OwordXNpbmcgU3RhY2tNYXBzID0gSGFz
aE1hcDxDYWxsU2l0ZUluZGV4LCBTdGFja01hcD47CisKIGNsYXNzIE9TUkVudHJ5RGF0YSB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT1NSRW50cnlEYXRhKTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKQEAgLTU5LDEyICs2MiwxMiBAQCBwdWJsaWM6CiAKICAgICB1aW50MzJfdCBm
dW5jdGlvbkluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbkluZGV4OyB9CiAgICAgdWlu
dDMyX3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9sb29wSW5kZXg7IH0KLSAgICBWZWN0
b3I8T1NSRW50cnlWYWx1ZT4mIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAgU3Rh
Y2tNYXAmIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAKIHByaXZhdGU6CiAgICAgdWlu
dDMyX3QgbV9mdW5jdGlvbkluZGV4OwogICAgIHVpbnQzMl90IG1fbG9vcEluZGV4OwotICAgIFZl
Y3RvcjxPU1JFbnRyeVZhbHVlPiBtX3ZhbHVlczsKKyAgICBTdGFja01hcCBtX3ZhbHVlczsKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggODViNDI0ZmIxODQ4OTMwOGRmMjdmOWE2MTdl
N2Y3MzBmNjNlMjU2OS4uZGFiYWVlN2ViODJkNzFiZGRiMTI5N2MwMWIzZTNmZWRhNTNkNzc4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCiAjaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdElubGluZXMuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCkBAIC0xMDUsMjQgKzEwNiwxMCBAQCBzdGF0
aWMgdm9pZCB0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21waWxlKFRpZXJVcENvdW50JiB0aWVyVXAs
IE9NR0NhbGxlZSogcmVwbGFjZQogICAgIH0KIH0KIAotU1VQUFJFU1NfQVNBTgotc3RhdGljIHZv
aWQgZG9PU1JFbnRyeShJbnN0YW5jZSogaW5zdGFuY2UsIFByb2JlOjpDb250ZXh0JiBjb250ZXh0
LCBCQlFDYWxsZWUmIGNhbGxlZSwgT01HRm9yT1NSRW50cnlDYWxsZWUmIG9zckVudHJ5Q2FsbGVl
LCBPU1JFbnRyeURhdGEmIG9zckVudHJ5RGF0YSkKK3ZvaWQgbG9hZFZhbHVlc0ludG9CdWZmZXIo
UHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0YWNrTWFwJiB2YWx1ZXMsIHVpbnQ2NF90
KiBidWZmZXIpCiB7Ci0gICAgYXV0byByZXR1cm5XaXRob3V0T1NSRW50cnkgPSBbJl0gewotICAg
ICAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0gMDsKLSAgICB9OwotCi0g
ICAgUkVMRUFTRV9BU1NFUlQob3NyRW50cnlDYWxsZWUub3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSgpID09IG9zckVudHJ5RGF0YS52YWx1ZXMoKS5zaXplKCkpOwotCi0gICAgdWludDY0X3QqIGJ1
ZmZlciA9IGluc3RhbmNlLT5jb250ZXh0KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKG9zckVudHJ5
Q2FsbGVlLm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSk7Ci0gICAgaWYgKCFidWZmZXIpCi0g
ICAgICAgIHJldHVybiByZXR1cm5XaXRob3V0T1NSRW50cnkoKTsKLQotICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgb3NyRW50cnlEYXRhLmZ1bmN0aW9uSW5kZXgoKSwgIjpP
TUcgT1NSIGVudHJ5OiBnb3QgZW50cnkgY2FsbGVlICIsIFJhd1BvaW50ZXIoJm9zckVudHJ5Q2Fs
bGVlKSk7Ci0KLSAgICAvLyAxLiBQbGFjZSByZXF1aXJlZCB2YWx1ZXMgaW4gc2NyYXRjaCBidWZm
ZXIuCi0gICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgb3NyRW50cnlEYXRhLnZh
bHVlcygpLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBPU1JFbnRyeVZhbHVlJiB2
YWx1ZSA9IG9zckVudHJ5RGF0YS52YWx1ZXMoKVtpbmRleF07CisgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IGluZGV4IDwgdmFsdWVzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBjb25z
dCBPU1JFbnRyeVZhbHVlJiB2YWx1ZSA9IHZhbHVlc1tpbmRleF07CiAgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9NRyBPU1IgZW50cnkgdmFsdWVzWyIsIGluZGV4
LCAiXSAiLCB2YWx1ZS50eXBlKCksICIgIiwgdmFsdWUpOwogICAgICAgICBpZiAodmFsdWUuaXNH
UFIoKSkgewogICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKCkua2luZCgpKSB7CkBAIC0x
NjQsMjEgKzE1MSwyOCBAQCBzdGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5j
ZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgYwogICAgICAgICAgICAgICAg
ICpiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihidWZmZXIgKyBpbmRleCkgPSAqYml0d2lzZV9jYXN0
PHVpbnQ2NF90Kj4oYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb250ZXh0LmZwKCkpICsgdmFsdWUu
b2Zmc2V0RnJvbUZQKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzU3RhY2tBcmd1bWVudCgpKSB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKHZhbHVlLnR5cGUoKS5raW5kKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQjM6OkZs
b2F0OgotICAgICAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8ZmxvYXQqPihidWZmZXIgKyBpbmRl
eCkgPSAqYml0d2lzZV9jYXN0PGZsb2F0Kj4oYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb250ZXh0
LnNwKCkpICsgdmFsdWUub2Zmc2V0RnJvbVNQKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBCMzo6RG91YmxlOgotICAgICAgICAgICAgICAgICpiaXR3aXNlX2Nh
c3Q8ZG91YmxlKj4oYnVmZmVyICsgaW5kZXgpID0gKmJpdHdpc2VfY2FzdDxkb3VibGUqPihiaXR3
aXNlX2Nhc3Q8dWludDhfdCo+KGNvbnRleHQuc3AoKSkgKyB2YWx1ZS5vZmZzZXRGcm9tU1AoKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgICpiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihidWZmZXIgKyBpbmRleCkgPSAqYml0d2lz
ZV9jYXN0PHVpbnQ2NF90Kj4oYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb250ZXh0LnNwKCkpICsg
dmFsdWUub2Zmc2V0RnJvbVNQKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQorfQorCitTVVBQUkVTU19BU0FOCitzdGF0aWMgdm9pZCBkb09TUkVudHJ5
KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYg
Y2FsbGVlLCBPTUdGb3JPU1JFbnRyeUNhbGxlZSYgb3NyRW50cnlDYWxsZWUsIE9TUkVudHJ5RGF0
YSYgb3NyRW50cnlEYXRhKQoreworICAgIGF1dG8gcmV0dXJuV2l0aG91dE9TUkVudHJ5ID0gWyZd
IHsKKyAgICAgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSA9IDA7CisgICAg
fTsKKworICAgIFJFTEVBU0VfQVNTRVJUKG9zckVudHJ5Q2FsbGVlLm9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUoKSA9PSBvc3JFbnRyeURhdGEudmFsdWVzKCkuc2l6ZSgpKTsKKworICAgIHVpbnQ2
NF90KiBidWZmZXIgPSBpbnN0YW5jZS0+Y29udGV4dCgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShv
c3JFbnRyeUNhbGxlZS5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkpOworICAgIGlmICghYnVm
ZmVyKQorICAgICAgICByZXR1cm4gcmV0dXJuV2l0aG91dE9TUkVudHJ5KCk7CisKKyAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIG9zckVudHJ5RGF0YS5mdW5jdGlvbkluZGV4
KCksICI6T01HIE9TUiBlbnRyeTogZ290IGVudHJ5IGNhbGxlZSAiLCBSYXdQb2ludGVyKCZvc3JF
bnRyeUNhbGxlZSkpOworCisgICAgLy8gMS4gUGxhY2UgcmVxdWlyZWQgdmFsdWVzIGluIHNjcmF0
Y2ggYnVmZmVyLgorICAgIGxvYWRWYWx1ZXNJbnRvQnVmZmVyKGNvbnRleHQsIG9zckVudHJ5RGF0
YS52YWx1ZXMoKSwgYnVmZmVyKTsKIAogICAgIC8vIDIuIFJlc3RvcmUgY2FsbGVlIHNhdmVzLgog
ICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCk7CkBAIC02NTgsMTIgKzY1MiwxMiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uR3Jvd01lbW9yeSwgaW50MzJfdCwgKHZvaWQqIGNhbGxGcmFtZSwgSW5zdGFu
YwogICAgIHJldHVybiBncm93bi52YWx1ZSgpLnBhZ2VDb3VudCgpOwogfQogCi1KU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUZpbGwsIGJvb2wsIChJbnN0YW5jZSog
aW5zdGFuY2UsIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHRhcmdldFZhbHVlLCB1aW50
MzJfdCBjb3VudCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9y
eUZpbGwsIHNpemVfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZHN0QWRkcmVzcywg
dWludDMyX3QgdGFyZ2V0VmFsdWUsIHVpbnQzMl90IGNvdW50KSkKIHsKICAgICByZXR1cm4gaW5z
dGFuY2UtPm1lbW9yeSgpLT5maWxsKGRzdEFkZHJlc3MsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRh
cmdldFZhbHVlKSwgY291bnQpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uV2FzbU1lbW9yeUNvcHksIGJvb2wsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IGRz
dEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGNvdW50KSkKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSwgc2l6ZV90LCAoSW5zdGFu
Y2UqIGluc3RhbmNlLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1
aW50MzJfdCBjb3VudCkpCiB7CiAgICAgcmV0dXJuIGluc3RhbmNlLT5tZW1vcnkoKS0+Y29weShk
c3RBZGRyZXNzLCBzcmNBZGRyZXNzLCBjb3VudCk7CiB9CkBAIC03MTEsMTIgKzcwNSwxMiBAQCBz
dGF0aWMgYm9vbCBzZXRXYXNtVGFibGVFbGVtZW50KEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWdu
ZWQgdGFibGVJbmRleCwgdWludDMyXwogICAgIHJldHVybiB0cnVlOwogfQogCi1KU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxlbWVudCwgYm9vbCwgKEluc3Rh
bmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3Qgc2lnbmVkSW5kZXgs
IEVuY29kZWRKU1ZhbHVlIGVuY1ZhbHVlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25TZXRXYXNtVGFibGVFbGVtZW50LCBzaXplX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVu
c2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IHNpZ25lZEluZGV4LCBFbmNvZGVkSlNWYWx1ZSBl
bmNWYWx1ZSkpCiB7CiAgICAgcmV0dXJuIHNldFdhc21UYWJsZUVsZW1lbnQoaW5zdGFuY2UsIHRh
YmxlSW5kZXgsIHNpZ25lZEluZGV4LCBlbmNWYWx1ZSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVJbml0LCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNl
LCB1bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IGRz
dE9mZnNldCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKQorSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUluaXQsIHNpemVfdCwgKEluc3RhbmNl
KiBpbnN0YW5jZSwgdW5zaWduZWQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1
aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY09mZnNldCwgdWludDMyX3QgbGVuZ3RoKSkK
IHsKICAgICBBU1NFUlQoZWxlbWVudEluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUlu
Zm9ybWF0aW9uKCkuZWxlbWVudENvdW50KCkpOwogICAgIEFTU0VSVCh0YWJsZUluZGV4IDwgaW5z
dGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgpKTsKQEAgLTc2
MSw3ICs3NTUsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxl
R3JvdywgaW50MzJfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdQogICAgIHJldHVybiBvbGRTaXpl
OwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwg
Ym9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3Qg
b2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSBmaWxsLCB1aW50MzJfdCBjb3VudCkpCitKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwgc2l6ZV90LCAoSW5zdGFuY2Uq
IGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBvZmZzZXQsIEVuY29kZWRK
U1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50KSkKIHsKICAgICBBU1NFUlQodGFibGVJbmRleCA8
IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSk7CiAK
QEAgLTc3Nyw3ICs3NzEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bVRhYmxlRmlsbCwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaQogICAgIHJldHVybiB0
cnVlOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlQ29w
eSwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZHN0VGFibGVJbmRleCwgdW5z
aWduZWQgc3JjVGFibGVJbmRleCwgaW50MzJfdCBkc3RPZmZzZXQsIGludDMyX3Qgc3JjT2Zmc2V0
LCBpbnQzMl90IGxlbmd0aCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bVRhYmxlQ29weSwgc2l6ZV90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBkc3RUYWJs
ZUluZGV4LCB1bnNpZ25lZCBzcmNUYWJsZUluZGV4LCBpbnQzMl90IGRzdE9mZnNldCwgaW50MzJf
dCBzcmNPZmZzZXQsIGludDMyX3QgbGVuZ3RoKSkKIHsKICAgICBBU1NFUlQoZHN0VGFibGVJbmRl
eCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSk7
CiAgICAgQVNTRVJUKHNyY1RhYmxlSW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5m
b3JtYXRpb24oKS50YWJsZUNvdW50KCkpOwpAQCAtOTA0LDcgKzg5OCw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNOb3RpZnksIGludDMyX3QsIChJbnN0
YW5jZSogaW5zdGFuCiAgICAgcmV0dXJuIFBhcmtpbmdMb3Q6OnVucGFya0NvdW50KHBvaW50ZXIs
IGNvdW50KTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1v
cnlJbml0LCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBkYXRhU2VnbWVudElu
ZGV4LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1aW50MzJfdCBs
ZW5ndGgpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlJbml0
LCBzaXplX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgs
IHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGxlbmd0
aCkpCiB7CiAgICAgQVNTRVJUKGRhdGFTZWdtZW50SW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCku
bW9kdWxlSW5mb3JtYXRpb24oKS5kYXRhU2VnbWVudHNDb3VudCgpKTsKICAgICByZXR1cm4gaW5z
dGFuY2UtPm1lbW9yeUluaXQoZHN0QWRkcmVzcywgc3JjQWRkcmVzcywgbGVuZ3RoLCBkYXRhU2Vn
bWVudEluZGV4KTsKQEAgLTkxNiw2ICs5MTAsNjUgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21EYXRhRHJvcCwgdm9pZCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWcK
ICAgICBpbnN0YW5jZS0+ZGF0YURyb3AoZGF0YVNlZ21lbnRJbmRleCk7CiB9CiAKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGhyb3csIHZvaWQqLCAoSW5zdGFuY2UqIGlu
c3RhbmNlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIEVu
Y29kZWRKU1ZhbHVlKiBhcmd1bWVudHMpKQoreworICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxG
cmFtZShjYWxsRnJhbWUpOworCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3RhbmNl
ID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKKyAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcgPSBpbnN0YW5j
ZS0+dGFnKGV4Y2VwdGlvbkluZGV4KTsKKworICAgIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiB2YWx1
ZXModGFnLnBhcmFtZXRlckNvdW50KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
YWcucGFyYW1ldGVyQ291bnQoKTsgKytpKQorICAgICAgICB2YWx1ZXNbaV0gPSBhcmd1bWVudHNb
aV07CisKKyAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBleGNlcHRpb24gPSBKU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlFeGNlcHRp
b25TdHJ1Y3R1cmUoKSwgdGFnLCBXVEZNb3ZlKHZhbHVlcykpOworICAgIHRocm93RXhjZXB0aW9u
KGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZXhjZXB0aW9uKTsKKworICAgIGdlbmVyaWNVbndp
bmQodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKCEhdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOwor
ICAgIEFTU0VSVCghIXZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKKyAgICAvLyBGSVhNRTog
V2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKKyAgICAvLyBUaGlzIGlzIGEgdG90YWwgaGFjaywg
YnV0IHRoZSBsbGludCAoYm90aCBvcF9jYXRjaCBhbmQgbGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4
Y2VwdGlvbikKKyAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVlIGZpZWxkIHRvIGxv
YWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJlCisgICAgLy8gdGhp
cyBzaW5jZSBpdCBpcyBjb21waWxlZCB3aXRoIGEgY29uc3RhbnQgVk0gcG9pbnRlci4pIFdlIGNv
dWxkIG1ha2UgdGhlIGNhbGxpbmcgY29udmVudGlvbgorICAgIC8vIGZvciBleGNlcHRpb25zIGZp
cnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9y
ZSBqdW1waW5nCisgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhp
cywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4KKyAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCisgICAgdm0uY2FsbGVlRm9yV2Fz
bUNhdGNoID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKKyAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3Qq
PihjYWxsRnJhbWUpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBi
aXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGpzSW5zdGFuY2UtPm1vZHVsZSgpKTsKKyAgICByZXR1cm4g
dm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtUmV0aHJvdywgdm9pZCosIChJbnN0YW5jZSogaW5zdGFuY2UsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSB0aHJvd25WYWx1ZSkpCit7CisgICAgaW5z
dGFuY2UtPnN0b3JlVG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisKKyAgICBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3Rh
bmNlPigpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5n
bG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIEpTVmFsdWU6OmRlY29kZSh0aHJvd25WYWx1
ZSkpOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoISF2
bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNTRVJUKCEhdm0udGFyZ2V0TWFjaGluZVBDRm9y
VGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgYmV0dGVyOgorICAgIC8v
IFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBs
bGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uKQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGlu
IHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMg
bm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25z
dGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisg
ICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNh
bGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9u
IGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBo
YWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0
NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJhbWUtPmNhbGxlZSgpOworICAg
IGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oanNJbnN0YW5jZS0+
bW9kdWxlKCkpOworICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKK30KKwog
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uLCB2b2lk
KiwgKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUsIEluc3Rh
bmNlKiB3YXNtSW5zdGFuY2UpKQogewogICAgIHdhc21JbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJh
bWUoY2FsbEZyYW1lKTsKQEAgLTkzMiw3ICs5ODUsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24sIHZvaWQqLCAoQ2FsbEZyYW1lKiBjYWxsRnJh
bQogICAgICAgICBpZiAodHlwZSA9PSBFeGNlcHRpb25UeXBlOjpTdGFja092ZXJmbG93KQogICAg
ICAgICAgICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVKU1dlYkFzc2VtYmx5UnVu
dGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sIFdhc206OmVycm9yTWVzc2FnZUZvckV4Y2VwdGlv
blR5cGUodHlwZSkpOworICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVKU1dlYkFzc2VtYmx5UnVu
dGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sIHR5cGUpOwogICAgICAgICB0aHJvd0V4Y2VwdGlv
bihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGVycm9yKTsKICAgICB9CiAKQEAgLTk0NiwxMCAr
OTk5LDM0IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVG9KU0V4Y2Vw
dGlvbiwgdm9pZCosIChDYWxsRnJhbWUqIGNhbGxGcmFtCiAgICAgLy8gZm9yIGV4Y2VwdGlvbnMg
Zmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVm
b3JlIGp1bXBpbmcKICAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0
aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgogICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JX
YXNtQ2F0Y2ggPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwogICAgIGJpdHdpc2VfY2FzdDx1aW50NjRf
dCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVsZSgpKTsKICAgICByZXR1cm4g
dm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCBQb2lu
dGVyUGFpciwgKEluc3RhbmNlKiBpbnN0YW5jZSkpCit7CisgICAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBqc0luc3RhbmNlID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4o
KTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFs
T2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgUkVMRUFTRV9BU1NFUlQo
ISF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0g
dGhyb3dTY29wZS5leGNlcHRpb24oKTsKKyAgICBKU1ZhbHVlIHRocm93blZhbHVlID0gZXhjZXB0
aW9uLT52YWx1ZSgpOworCisgICAgLy8gV2Ugd2FudCB0byBjbGVhciB0aGUgZXhjZXB0aW9uIGhl
cmUgcmF0aGVyIHRoYW4gaW4gdGhlIGNhdGNoIHByb2xvZ3VlCisgICAgLy8gSklUIGNvZGUgYmVj
YXVzZSBjbGVhcmluZyBpdCBhbHNvIGVudGFpbHMgY2xlYXJpbmcgYSBiaXQgaW4gYW4gQXRvbWlj
CisgICAgLy8gYml0IGZpZWxkIGluIFZNVHJhcHMuCisgICAgdGhyb3dTY29wZS5jbGVhckV4Y2Vw
dGlvbigpOworCisgICAgdm9pZCogcGF5bG9hZCA9IG51bGxwdHI7CisgICAgaWYgKEpTV2ViQXNz
ZW1ibHlFeGNlcHRpb24qIHdhc21FeGNlcHRpb24gPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1i
bHlFeGNlcHRpb24qPih2bSwgdGhyb3duVmFsdWUpKQorICAgICAgICBwYXlsb2FkID0gYml0d2lz
ZV9jYXN0PHZvaWQqPih3YXNtRXhjZXB0aW9uLT5wYXlsb2FkKCkuZGF0YSgpKTsKKyAgICByZXR1
cm4gUG9pbnRlclBhaXIgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFsdWU6OmVuY29kZSh0aHJv
d25WYWx1ZSkpLCBwYXlsb2FkIH07Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAK
IElHTk9SRV9XQVJOSU5HU19FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bl
cmF0aW9ucy5oCmluZGV4IGVlYmU1Yjc2NGJhODk3OGM5NDQyZWI1MTgyODEwODcyYzY3MjRjYTQu
LjVlYzdhNTk0N2NjNzM4YzNiMmI5YmIyNWQ3ZTVhNjA4ZjFiMjZlZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaApAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJTbG93UGF0aFJldHVyblR5cGUuaCIKICNp
bmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgorI2luY2x1ZGUgIldhc21PU1JFbnRyeURhdGEu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ2LDYgKzQ3LDggQEAgbmFtZXNwYWNlIFdhc20g
ewogY2xhc3MgSW5zdGFuY2U7CiBjbGFzcyBTaWduYXR1cmU7CiAKK3ZvaWQgbG9hZFZhbHVlc0lu
dG9CdWZmZXIoUHJvYmU6OkNvbnRleHQmLCBjb25zdCBTdGFja01hcCYsIHVpbnQ2NF90KiBidWZm
ZXIpOworCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25XYXNtVHJpZ2dlck9TUkVudHJ5Tm93LCB2b2lkLCAoUHJvYmU6OkNv
bnRleHQmKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UcmlnZ2Vy
VGllclVwTm93LCB2b2lkLCAoSW5zdGFuY2UqLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KSk7CkBA
IC02NiwyNiArNjksMzQgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNt
V3JpdGVCYXJyaWVyU2xvd1BhdGgsIHZvaWQsIChKU0NlbGwqLCBWTSoKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUG9wY291bnQzMiwgdWludDMyX3QsIChpbnQzMl90KSk7CiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblBvcGNvdW50NjQsIHVpbnQ2NF90LCAo
aW50NjRfdCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Hcm93TWVtb3J5
LCBpbnQzMl90LCAodm9pZCosIEluc3RhbmNlKiwgaW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5RmlsbCwgYm9vbCwgKEluc3RhbmNlKiwgdWlu
dDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFsdWUsIHVpbnQzMl90IGNvdW50KSk7
Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlDb3B5LCBib29s
LCAoSW5zdGFuY2UqLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1
aW50MzJfdCBjb3VudCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNt
TWVtb3J5RmlsbCwgc2l6ZV90LCAoSW5zdGFuY2UqLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50
MzJfdCB0YXJnZXRWYWx1ZSwgdWludDMyX3QgY291bnQpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUNvcHksIHNpemVfdCwgKEluc3RhbmNlKiwgdWludDMy
X3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgY291bnQpKTsKIAog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXYXNtVGFibGVFbGVtZW50LCBF
bmNvZGVkSlNWYWx1ZSwgKEluc3RhbmNlKiwgdW5zaWduZWQsIGludDMyX3QpKTsKLUpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxlbWVudCwgYm9vbCwgKElu
c3RhbmNlKiwgdW5zaWduZWQsIHVpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSBlbmNWYWx1ZSkpOwor
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25TZXRXYXNtVGFibGVFbGVtZW50LCBz
aXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkLCB1aW50MzJfdCwgRW5jb2RlZEpTVmFsdWUgZW5j
VmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVJlZkZ1bmMs
IEVuY29kZWRKU1ZhbHVlLCAoSW5zdGFuY2UqLCB1aW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVJbml0LCBib29sLCAoSW5zdGFuY2UqLCB1bnNp
Z25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IGRzdE9mZnNl
dCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKTsKK0pTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlSW5pdCwgc2l6ZV90LCAoSW5zdGFuY2UqLCB1
bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IGRzdE9m
ZnNldCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKTsKIEpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUVsZW1Ecm9wLCB2b2lkLCAoSW5zdGFuY2UqLCB1
bnNpZ25lZCBlbGVtZW50SW5kZXgpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uV2FzbVRhYmxlR3JvdywgaW50MzJfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQsIEVuY29kZWRK
U1ZhbHVlIGZpbGwsIHVpbnQzMl90IGRlbHRhKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21UYWJsZUZpbGwsIGJvb2wsIChJbnN0YW5jZSosIHVuc2lnbmVkLCB1aW50
MzJfdCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50KSk7Ci1KU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUNvcHksIGJvb2wsIChJbnN0
YW5jZSosIHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsIGlu
dDMyX3QgZHN0T2Zmc2V0LCBpbnQzMl90IHNyY09mZnNldCwgaW50MzJfdCBsZW5ndGgpKTsKK0pT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwgc2l6ZV90LCAo
SW5zdGFuY2UqLCB1bnNpZ25lZCwgdWludDMyX3Qgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSBmaWxs
LCB1aW50MzJfdCBjb3VudCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25X
YXNtVGFibGVDb3B5LCBzaXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgs
IHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsIGludDMyX3QgZHN0T2Zmc2V0LCBpbnQzMl90IHNyY09m
ZnNldCwgaW50MzJfdCBsZW5ndGgpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uR2V0V2FzbVRhYmxlU2l6ZSwgaW50MzJfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQpKTsKIAog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNXYWl0MzIsIGlu
dDMyX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIG9mZnNl
dCwgdWludDMyX3QgdmFsdWUsIGludDY0X3QgdGltZW91dCkpOwogSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNXYWl0NjQsIGludDMyX3QsIChJbnN0YW5jZSog
aW5zdGFuY2UsIHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIG9mZnNldCwgdWludDY0X3QgdmFsdWUs
IGludDY0X3QgdGltZW91dCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25N
ZW1vcnlBdG9taWNOb3RpZnksIGludDMyX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkLCB1bnNpZ25l
ZCwgaW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVt
b3J5SW5pdCwgYm9vbCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCwgdWlu
dDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgbGVuZ3RoKSk7
CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlJbml0LCBzaXpl
X3QsIChJbnN0YW5jZSosIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgsIHVpbnQzMl90IGRzdEFk
ZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGxlbmd0aCkpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtRGF0YURyb3AsIHZvaWQsIChJbnN0YW5jZSos
IHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgpKTsKIAorSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtVGhyb3csIHZvaWQqLCAoSW5zdGFuY2UqLCBDYWxsRnJhbWUqLCB1bnNp
Z25lZCBleGNlcHRpb25JbmRleCwgRW5jb2RlZEpTVmFsdWUqKSk7CitKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZXRocm93LCB2b2lkKiwgKEluc3RhbmNlKiwgQ2FsbEZy
YW1lKiwgRW5jb2RlZEpTVmFsdWUgdGhyb3duVmFsdWUpKTsKKwogSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbiwgdm9pZCosIChDYWxsRnJhbWUqLCBX
YXNtOjpFeGNlcHRpb25UeXBlLCBJbnN0YW5jZSopKTsKK3N0cnVjdCBQb2ludGVyUGFpciB7Cisg
ICAgdm9pZCogZmlyc3Q7CisgICAgdm9pZCogc2Vjb25kOworfTsKK0pTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uV2FzbVJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJs
ZSwgUG9pbnRlclBhaXIsIChJbnN0YW5jZSopKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25Q
YXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIu
Y3BwCmluZGV4IDBmOGNjYjdlMmMzYjY0MTE2MzVjZDlmNWIwNDhiMzU2MzIwNWZhNzQuLmNmZGFm
ZmRkN2E0MmNjODFlNWJhM2E2MWU0YmFlOGVmNWVjYmQzYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKQEAgLTkxLDYgKzkxLDggQEAg
YXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGlt
cG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENv
dW50LCAiIGdsb2JhbHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZp
eCB0aGUgRklYTUVzIGJlbG93LgogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1w
b3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5v
dWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlz
IG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCiAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5
UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1v
cnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8v
IEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4K
KyAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCkpCisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNl
cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdo
IG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0IGV4Y2VwdGlvbiBzaWduYXR1cmVz
Iik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBi
ZWxvdy4KIAogICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVy
IDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7CiAgICAgICAgIHVpbnQzMl90IG1vZHVs
ZUxlbjsKQEAgLTE0Miw2ICsxNDQsMjEgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9y
dCgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgICAgIG1faW5mby0+Z2xvYmFscy51bmNoZWNr
ZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsKKyAgICAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAi
d2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgICAgICB1aW50OF90
IHRhZ1R5cGU7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KHRh
Z1R5cGUpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCBleGNlcHRpb24n
cyB0YWcgdHlwZSIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0YWdUeXBlLCBp
bXBvcnROdW1iZXIsICJ0aCBJbXBvcnQgZXhjZXB0aW9uIGhhcyB0YWcgdHlwZSAiLCB0YWdUeXBl
LCAiIGJ1dCB0aGUgb25seSBzdXBwb3J0ZWQgdGFnIHR5cGUgaXMgMCIpOworCisgICAgICAgICAg
ICB1aW50MzJfdCBleGNlcHRpb25TaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4KSwgImNh
bid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBleGNlcHRpb24gc2lnbmF0dXJl
IGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICIn
Iik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4Y2VwdGlvblNpZ25hdHVyZUlu
ZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBleGNlcHRpb24g
c2lnbmF0dXJlIGZvciAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQsICIsIGV4Y2VwdGlvblNp
Z25hdHVyZUluZGV4LCAiIGlzIG91dCBvZiByYW5nZSBvZiAiLCBtX2luZm8tPnVzZWRTaWduYXR1
cmVzLnNpemUoKSwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZp
ZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAga2luZEluZGV4ID0gbV9pbmZvLT5pbXBvcnRF
eGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVz
ZWRTaWduYXR1cmVzW2V4Y2VwdGlvblNpZ25hdHVyZUluZGV4XSk7CisgICAgICAgICAgICBtX2lu
Zm8tPmltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVja2VkQXBwZW5kKHNpZ25h
dHVyZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIH0KIAog
ICAgICAgICBtX2luZm8tPmltcG9ydHMudW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZShtb2R1bGVT
dHJpbmcpLCBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4IH0pOwpAQCAtMzU4
LDYgKzM3NSwxMyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRXhwb3J0KCkgLT4gUGFydGlh
bFJlc3VsdAogICAgICAgICAgICAgICAgIGdsb2JhbC5iaW5kaW5nTW9kZSA9IEdsb2JhbEluZm9y
bWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6RXhjZXB0aW9uOiB7CisgICAgICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMo
KSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5leGNlcHRpb25JbmRleFNwYWNl
U2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGludmFsaWQgZXhjZXB0aW9uIG51
bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZXhjZXB0aW9uIGluZGV4IHNwYWNl
ICIsIG1faW5mby0+ZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxk
U3RyaW5nLCAiJyIpOworICAgICAgICAgICAgbV9pbmZvLT5hZGREZWNsYXJlZEV4Y2VwdGlvbihr
aW5kSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgfQogCiAg
ICAgICAgIG1faW5mby0+ZXhwb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGZpZWxkU3Ry
aW5nKSwga2luZCwga2luZEluZGV4IH0pOwpAQCAtODE3LDYgKzg0MSwyOSBAQCBhdXRvIFNlY3Rp
b25QYXJzZXI6OnBhcnNlRGF0YUNvdW50KCkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7
IH07CiB9CiAKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VFeGNlcHRpb24oKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1i
bHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAg
ICB1aW50MzJfdCBleGNlcHRpb25Db3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihleGNlcHRpb25Db3VudCksICJjYW4ndCBnZXQgRXhjZXB0aW9uIHNlY3Rpb24n
cyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhjZXB0aW9uQ291bnQgPiBtYXhF
eGNlcHRpb25zLCAiRXhwb3J0IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGV4Y2VwdGlv
bkNvdW50LCAiIG1heGltdW0gIiwgbWF4RXhjZXB0aW9ucyk7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighbV9pbmZvLT5pbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGV4Y2VwdGlvbkNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yICIsIGV4Y2VwdGlvbkNvdW50LCAiIGV4Y2VwdGlvbnMiKTsKKworICAgIGZvciAodWludDMy
X3QgZXhjZXB0aW9uTnVtYmVyID0gMDsgZXhjZXB0aW9uTnVtYmVyIDwgZXhjZXB0aW9uQ291bnQ7
ICsrZXhjZXB0aW9uTnVtYmVyKSB7CisgICAgICAgIHVpbnQ4X3QgdGFnVHlwZTsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OCh0YWdUeXBlKSwgImNhbid0IGdldCAiLCBl
eGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24gdGFnIHR5cGUiKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRih0YWdUeXBlLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24gaGFz
IHRhZyB0eXBlICIsIHRhZ1R5cGUsICIgYnV0IHRoZSBvbmx5IHN1cHBvcnRlZCB0YWcgdHlwZSBp
cyAwIik7CisKKyAgICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodHlwZU51bWJlciksICJjYW4ndCBnZXQgIiwgZXhj
ZXB0aW9uTnVtYmVyLCAidGggRXhjZXB0aW9uJ3MgdHlwZSBudW1iZXIiKTsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6
ZSgpLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24gdHlwZSBudW1iZXIgaXMgaW52YWxp
ZCAiLCB0eXBlTnVtYmVyKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgg
PSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dXNlZFNpZ25hdHVyZXNbdHlwZU51
bWJlcl0pOworICAgICAgICBtX2luZm8tPmludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNl
cy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOworICAgIH0KKworICAgIHJldHVybiB7
IH07Cit9CiBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKCkgLT4gUGFydGlhbFJlc3Vs
dAogewogICAgIEN1c3RvbVNlY3Rpb24gc2VjdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNlY3Rpb25zLmgKaW5kZXggZjM2OWU3Yjg2Y2FmYTkzYWQzZjgzYWQ2MGNhMDg3Yzhm
NTg4MGVjYS4uYmVmMjA3MDFmNDBmZTQwYjRhMjhhMGFkY2ZjNDdmNmJmMGQ1YmZmMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKQEAgLTQ1LDcgKzQ1LDggQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKICAgICBtYWNybyhFbGVtZW50LCAgICA5
LCAiRWxlbWVudHMgc2VjdGlvbiIpIFwKICAgICBtYWNybyhDb2RlLCAgICAgIDEwLCAiRnVuY3Rp
b24gYm9kaWVzIChjb2RlKSIpIFwKICAgICBtYWNybyhEYXRhLCAgICAgIDExLCAiRGF0YSBzZWdt
ZW50cyIpIFwKLSAgICBtYWNybyhEYXRhQ291bnQsIDEyLCAiRGF0YSBjb3VudCIpCisgICAgbWFj
cm8oRGF0YUNvdW50LCAxMiwgIkRhdGEgY291bnQiKSBcCisgICAgbWFjcm8oRXhjZXB0aW9uLCAx
MywgIkV4Y2VwdGlvbiBkZWNsYXJhdGlvbnMiKSBcCiAKIGVudW0gY2xhc3MgU2VjdGlvbiA6IHVp
bnQ4X3QgewogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgQmVnaW4gaXMgbGVzcyB0aGFuIGV2
ZXJ5IG90aGVyIHNlY3Rpb24gbnVtYmVyIGFuZCB0aGF0IEN1c3RvbSBpcyBncmVhdGVyLgpAQCAt
OTAsNiArOTEsMTAgQEAgaW5saW5lIGJvb2wgdmFsaWRhdGVPcmRlcihTZWN0aW9uIHByZXZpb3Vz
S25vd24sIFNlY3Rpb24gbmV4dCkKICAgICBBU1NFUlQoaXNLbm93blNlY3Rpb24ocHJldmlvdXNL
bm93bikgfHwgcHJldmlvdXNLbm93biA9PSBTZWN0aW9uOjpCZWdpbik7CiAgICAgaWYgKHByZXZp
b3VzS25vd24gPT0gU2VjdGlvbjo6RGF0YUNvdW50ICYmIG5leHQgPT0gU2VjdGlvbjo6Q29kZSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHByZXZpb3VzS25vd24gPT0gU2VjdGlvbjo6
RXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gbmV4dCA+PSBTZWN0aW9uOjpHbG9iYWw7CisgICAg
aWYgKG5leHQgPT0gU2VjdGlvbjo6RXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gcHJldmlvdXNL
bm93biA8PSBTZWN0aW9uOjpNZW1vcnk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHByZXZpb3VzS25vd24pIDwgc3RhdGljX2Nhc3Q8dWludDhfdD4obmV4dCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKaW5kZXggNzFhYWIzZGY3
NTcyMmQ0MDhjNTE4YzEzZjUzODVjM2FmOWE0ODAwNi4uZjlhNTYxYjg1MGZjNWMxOTM5ZDBlZjU5
ZThhOWZkMmI2MDU5NzhmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVNpZ25hdHVyZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNp
Z25hdHVyZS5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgUmVmUHRyPFNpZ25hdHVyZT4gU2lnbmF0dXJl
Ojp0cnlDcmVhdGUoU2lnbmF0dXJlQXJnQ291bnQgcmV0dXJuQ291bnQsIFNpZ25hdHVyZUEKIAog
U2lnbmF0dXJlSW5mb3JtYXRpb246OlNpZ25hdHVyZUluZm9ybWF0aW9uKCkKIHsKLSNkZWZpbmUg
TUFLRV9USFVOS19TSUdOQVRVUkUodHlwZSwgZW5jLCBzdHIsIHZhbCkgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyNkZWZpbmUgTUFLRV9USFVOS19TSUdOQVRVUkUodHlwZSwgZW5jLCBzdHIs
IHZhbCwgXykgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgaWYgKFR5cGVLaW5kOjp0eXBlICE9IFR5cGVLaW5kOjpWb2lkKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IHNpZyA9IFNp
Z25hdHVyZTo6dHJ5Q3JlYXRlKDEsIDApOyAgICAgICAgICAgIFwKQEAgLTE2NSw2ICsxNjUsMTAg
QEAgc3RydWN0IFBhcmFtZXRlclR5cGVzIHsKIAogUmVmUHRyPFNpZ25hdHVyZT4gU2lnbmF0dXJl
SW5mb3JtYXRpb246OnNpZ25hdHVyZUZvcihjb25zdCBWZWN0b3I8VHlwZSwgMT4mIHJlc3VsdHMs
IGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJncykKIHsKKyAgICBpZiBjb25zdGV4cHIgKEFTU0VSVF9F
TkFCTEVEKSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0cy5jb250YWlucyhXYXNtOjpUeXBlczo6
Vm9pZCkpOworICAgICAgICBBU1NFUlQoIWFyZ3MuY29udGFpbnMoV2FzbTo6VHlwZXM6OlZvaWQp
KTsKKyAgICB9CiAgICAgU2lnbmF0dXJlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5nbGV0b24oKTsK
ICAgICBMb2NrZXIgbG9ja2VyIHsgaW5mby5tX2xvY2sgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAppbmRleCBkOWZhZjVkNTlkOTlmNWU5MDRjM2E3
YjI0MDA3ZDA5MWZkMWQ5YzE3Li5hZDUxMzVlN2FkNjU3OGMzOTc2MWJkN2QzYjU2OGEwZmQyYmY2
MDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApA
QCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkJ5
dGVjb2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNl
LmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiV2FzbUJCUVBsYW4uaCIKQEAg
LTU4Niw2ICs1ODgsMTExIEBAIFdBU01fU0xPV19QQVRIX0RFQ0wobWVtb3J5X2F0b21pY19ub3Rp
ZnkpCiAgICAgV0FTTV9SRVRVUk4ocmVzdWx0KTsKIH0KIAorV0FTTV9TTE9XX1BBVEhfREVDTCh0
aHJvdykKK3sKKyAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKwor
ICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGluc3RhbmNlLT5vd25lcjxK
U1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwYy0+YXM8V2FzbVRocm93LCBXYXNtT3Bjb2RlVHJh
aXRzPigpOworICAgIGNvbnN0IFdhc206OlRhZyYgdGFnID0gaW5zdGFuY2UtPnRhZyhpbnN0cnVj
dGlvbi5tX2V4Y2VwdGlvbkluZGV4KTsKKworICAgIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiB2YWx1
ZXModGFnLnBhcmFtZXRlckNvdW50KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
YWcucGFyYW1ldGVyQ291bnQoKTsgKytpKQorICAgICAgICB2YWx1ZXNbaV0gPSBSRUFEKChpbnN0
cnVjdGlvbi5tX2ZpcnN0VmFsdWUgLSBpKSkuZW5jb2RlZEpTVmFsdWUoKTsKKworICAgIEpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUV4Y2VwdGlvblN0cnVjdHVyZSgpLCB0
YWcsIFdURk1vdmUodmFsdWVzKSk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBleGNlcHRpb24pOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1l
KTsKKyAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNTRVJUKCEhdm0u
dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRo
aXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChi
b3RoIG9wX2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uKQorICAgIC8v
IHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUg
YmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNv
bXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2Fs
bGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJh
bWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAv
LyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1v
dmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJh
bWUtPmNhbGxlZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3Rh
dGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4oanNJbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIFdBU01fUkVUVVJOX1RXTyh2bS50YXJn
ZXRNYWNoaW5lUENGb3JUaHJvdywgbnVsbHB0cik7Cit9CisKK1dBU01fU0xPV19QQVRIX0RFQ0wo
cmV0aHJvdykKK3sKKyAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsK
KworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGluc3RhbmNlLT5vd25l
cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwYy0+YXM8V2FzbVJldGhyb3csIFdhc21PcGNv
ZGVUcmFpdHM+KCk7CisgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBSRUFEKGluc3RydWN0aW9uLm1f
ZXhjZXB0aW9uKS5qc1ZhbHVlKCk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBleGNlcHRpb24pOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1l
KTsKKyAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNTRVJUKCEhdm0u
dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRo
aXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChi
b3RoIG9wX2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uKQorICAgIC8v
IHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUg
YmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNv
bXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2Fs
bGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJh
bWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAv
LyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1v
dmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJh
bWUtPmNhbGxlZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3Rh
dGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4oanNJbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIFdBU01fUkVUVVJOX1RXTyh2bS50YXJn
ZXRNYWNoaW5lUENGb3JUaHJvdywgbnVsbHB0cik7Cit9CisKK1dBU01fU0xPV19QQVRIX0RFQ0wo
cmV0cmlldmVfYW5kX2NsZWFyX2V4Y2VwdGlvbikKK3sKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+
b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCghIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwor
CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSB0aHJvd1Njb3BlLmV4Y2VwdGlvbigpOworICAg
IEpTVmFsdWUgdGhyb3duVmFsdWUgPSBleGNlcHRpb24tPnZhbHVlKCk7CisgICAgdm9pZCogcGF5
bG9hZCA9IG51bGxwdHI7CisKKyAgICBjb25zdCBhdXRvJiBoYW5kbGVDYXRjaEFsbCA9IFsmXShj
b25zdCBhdXRvJiBpbnN0cnVjdGlvbikgeworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
aW5zdHJ1Y3Rpb24ubV9leGNlcHRpb24pID0gdGhyb3duVmFsdWU7CisgICAgfTsKKworICAgIGNv
bnN0IGF1dG8mIGhhbmRsZUNhdGNoID0gWyZdKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uKSB7Cisg
ICAgICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIHdhc21FeGNlcHRpb24gPSBqc0R5bmFtaWND
YXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPih2bSwgdGhyb3duVmFsdWUpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVCghIXdhc21FeGNlcHRpb24pOworICAgICAgICBwYXlsb2FkID0gYml0d2lz
ZV9jYXN0PHZvaWQqPih3YXNtRXhjZXB0aW9uLT5wYXlsb2FkKCkuZGF0YSgpKTsKKyAgICAgICAg
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGluc3RydWN0aW9uLm1fZXhjZXB0aW9uKSA9IHRocm93blZh
bHVlOworICAgIH07CisKKyAgICBpZiAocGMtPmlzPFdhc21DYXRjaCwgV2FzbU9wY29kZVRyYWl0
cz4oKSkKKyAgICAgICAgaGFuZGxlQ2F0Y2gocGMtPmFzPFdhc21DYXRjaCwgV2FzbU9wY29kZVRy
YWl0cz4oKSk7CisgICAgZWxzZSBpZiAocGMtPmlzPFdhc21DYXRjaEFsbCwgV2FzbU9wY29kZVRy
YWl0cz4oKSkKKyAgICAgICAgaGFuZGxlQ2F0Y2hBbGwocGMtPmFzPFdhc21DYXRjaEFsbCwgV2Fz
bU9wY29kZVRyYWl0cz4oKSk7CisgICAgZWxzZSBpZiAocGMtPmlzPFdhc21DYXRjaE5vVGxzLCBX
YXNtT3Bjb2RlVHJhaXRzPigpKQorICAgICAgICBoYW5kbGVDYXRjaChwYy0+YXM8V2FzbUNhdGNo
Tm9UbHMsIFdhc21PcGNvZGVUcmFpdHM+KCkpOworICAgIGVsc2UgaWYgKHBjLT5pczxXYXNtQ2F0
Y2hBbGxOb1RscywgV2FzbU9wY29kZVRyYWl0cz4oKSkKKyAgICAgICAgaGFuZGxlQ2F0Y2hBbGwo
cGMtPmFzPFdhc21DYXRjaEFsbE5vVGxzLCBXYXNtT3Bjb2RlVHJhaXRzPigpKTsKKyAgICBlbHNl
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAvLyBXZSB3YW50
IHRvIGNsZWFyIHRoZSBleGNlcHRpb24gaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgY2F0Y2ggcHJv
bG9ndWUKKyAgICAvLyBKSVQgY29kZSBiZWNhdXNlIGNsZWFyaW5nIGl0IGFsc28gZW50YWlscyBj
bGVhcmluZyBhIGJpdCBpbiBhbiBBdG9taWMKKyAgICAvLyBiaXQgZmllbGQgaW4gVk1UcmFwcy4K
KyAgICB0aHJvd1Njb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgV0FTTV9SRVRVUk5fVFdPKHBj
LCBwYXlsb2FkKTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRo
X3dhc21fdGhyb3dfZXhjZXB0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVj
dGlvbiogcGMsIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6RXhjZXB0aW9uVHlwZSBl
eGNlcHRpb25UeXBlKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmgKaW5kZXggNzc2MjExODMzOGE3YjcwNjk2OWIyNWI1
MmNlMTZlMmMzZGM3YmQ0ZS4uYjY0Y2U3Y2RlNDFhYWEwNjg5N2U4ZmZmZWQ4MmE4ZDA2NDMyZGZk
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuaApAQCAtODMs
NiArODMsOSBAQCBXQVNNX1NMT1dfUEFUSF9ISURERU5fREVDTChzZXRfZ2xvYmFsX3JlZl9wb3J0
YWJsZV9iaW5kaW5nKTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9yeV9hdG9taWNf
d2FpdDMyKTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9yeV9hdG9taWNfd2FpdDY0
KTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9yeV9hdG9taWNfbm90aWZ5KTsKK1dB
U01fU0xPV19QQVRIX0hJRERFTl9ERUNMKHRocm93KTsKK1dBU01fU0xPV19QQVRIX0hJRERFTl9E
RUNMKHJldGhyb3cpOworV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wocmV0cmlldmVfYW5kX2Ns
ZWFyX2V4Y2VwdGlvbik7CiAKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0
aF93YXNtX3Rocm93X2V4Y2VwdGlvbihDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbiosIFdh
c206Okluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6RXhjZXB0aW9uVHlwZSkgUkVGRVJFTkNFRF9G
Uk9NX0FTTSBXVEZfSU5URVJOQUw7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93
X3BhdGhfd2FzbV9wb3Bjb3VudChjb25zdCBJbnN0cnVjdGlvbiogcGMsIHVpbnQzMl90KSBSRUZF
UkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKaW5kZXggZmE1NTJlZmZmMTc0MWVjYjVh
NGI2YzJmODlmY2EwOTc1OWVlMzE1ZC4uMTJjZGFhOTY1ZWE5OGJhMThhYzI3MTZkY2M3NmU4Mjcw
ODUwMjEwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVh
bWluZ1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVh
bWluZ1BhcnNlci5jcHAKQEAgLTExNyw2ICsxMTcsNyBAQCBhdXRvIFN0cmVhbWluZ1BhcnNlcjo6
cGFyc2VDb2RlU2VjdGlvblNpemUodWludDMyX3QgZnVuY3Rpb25Db3VudCkgLT4gU3RhdGUKICAg
ICBtX2Z1bmN0aW9uQ291bnQgPSBmdW5jdGlvbkNvdW50OwogICAgIG1fZnVuY3Rpb25JbmRleCA9
IDA7CiAgICAgbV9jb2RlT2Zmc2V0ID0gbV9vZmZzZXQ7CisgICAgbV9pbmZvLT5tX2Z1bmN0aW9u
RG9lc05vdFVzZUV4Y2VwdGlvbnMuZW5zdXJlU2l6ZShmdW5jdGlvbkNvdW50KTsKIAogICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGZ1bmN0
aW9uQ291bnQpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCAhPSBtX2lu
Zm8tPmZ1bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwgZnVuY3Rpb25Db3Vu
dCwgIiBleGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25zICIsIG1faW5mby0+
ZnVuY3Rpb25zLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGFnLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjRlYzY3MzYyMzJmMDcyMWZjNjI1N2Q0Nzk0MTcxN2I1MjYyYmJlZTUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmNwcApAQCAt
MCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21UYWcuaCIKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgV2FzbSB7CisKK3Vp
bnQzMl90IFRhZzo6c19pZCA9IDA7CisKK319IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTAzOTUzZDVk
NmVlZmM5MzM4MWZjOTBlNjRmNWI3MmVjMzBkMTQ3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuaApAQCAtMCwwICsxLDYyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFRhZyA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxUYWc+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShUYWcpOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VGFn
PiBjcmVhdGUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgVGFnKHNpZ25hdHVyZSkpOyB9CisKKyAgICBTaWduYXR1cmVBcmdDb3VudCBwYXJhbWV0ZXJD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7IH0KKyAg
ICBUeXBlIHBhcmFtZXRlcihTaWduYXR1cmVBcmdDb3VudCBpKSBjb25zdCB7IHJldHVybiBtX3Np
Z25hdHVyZS0+YXJndW1lbnQoaSk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUYWcm
IG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lkID09IG90aGVyLm1faWQ7IH0KKyAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgVGFnJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pZCAhPSBvdGhlci5t
X2lkOyB9CisKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2lnbmF0dXJlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGFnKGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlKQorICAgICAgICA6IG1faWQoKytzX2lkKQorICAgICAgICAsIG1fc2lnbmF0
dXJlKFJlZiB7IHNpZ25hdHVyZSB9KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdWludDMy
X3Qgc19pZDsKKyAgICB1aW50MzJfdCBtX2lkOworICAgIFJlZjxjb25zdCBTaWduYXR1cmU+IG1f
c2lnbmF0dXJlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21UaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5r
cy5jcHAKaW5kZXggNzlkMWJjZmY4OWZiMDRlMjJlZDU0ZjJmNjQwOGJlMDlmMjkzZDBjMy4uZmVj
MmExMzc3OWJmMjdmNjQ4ZmFhMzhhNWVmODY0OGUwOTQ4NWMxYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw4ICsyOCwxMSBAQAogCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNJbnRlcmZhY2VK
SVQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUV4
Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaHVua3MuaAppbmRleCBjMjM1Y2ZlNjI5NWU2NjlhZTVhODBlZThmMjUy
ZWE2Y2EyNDMxYjgzLi5mNDVkZWIyYTU5NmNhYTI1N2UzMzFlZDIxZWYwOWUwNmIwNWVjNTFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNI
ZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2Vu
ZXJhdG9ySW5saW5lc0hlYWRlci5weQppbmRleCAxZTM4MGRlZjFjZDhjYjY3NjA3NWVkMzI1NTc5
YjBmNTFkMWJjZTU1Li45Njc3ZWI4M2Q5NmE3YWQ2NGZiNTE0N2E0MmI0YTg1OGQ5NTk0MDQ3IDEw
MDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2Vu
ZXJhdG9ySW5saW5lc0hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9n
ZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQpAQCAtMTQ0LDcgKzE0NCw3
IEBAIGNsYXNzIENvZGVHZW5lcmF0b3I6CiAgICAgICAgICAgICBzZWxmLmFkdmFuY2UoKQogICAg
ICAgICAgICAgc2VsZi5jb25zdW1lKCIpIikKICAgICAgICAgZWxpZiBhcmd1bWVudFJlZ2V4Lm1h
dGNoKHNlbGYudG9rZW4oKSk6Ci0gICAgICAgICAgICByZXN1bHQgPSAiYXJnIiArIHNlbGYudG9r
ZW4oKVsxOl0KKyAgICAgICAgICAgIHJlc3VsdCA9ICJnZXQoYXJnIiArIHNlbGYudG9rZW4oKVsx
Ol0gKyAiKSIKICAgICAgICAgICAgIHNlbGYuYWR2YW5jZSgpCiAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICBvcCA9IHNlbGYudG9rZW4oKQpAQCAtMTU2LDEzICsxNTYsMTYgQEAgY2xhc3MgQ29k
ZUdlbmVyYXRvcjoKIAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKKyAgICBkZWYgbWFrZVJlc3Vs
dChzZWxmLCByZXN1bHRWYWx1ZSk6CisgICAgICAgIHJldHVybiByZXN1bHRWYWx1ZSArICI7XG4i
ICsgInJlc3VsdCA9IHB1c2gocmVzdWx0VmFsdWUtPnR5cGUoKSk7XG4iICsgIm1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIG9yaWdpbigpLCByZXN1
bHQsIHJlc3VsdFZhbHVlKTsiCisKICAgICBkZWYgZ2VuZXJhdGUoc2VsZiwgd2FzbU9wKToKICAg
ICAgICAgaWYgbGVuKHNlbGYudG9rZW5zKSA9PSAxOgotICAgICAgICAgICAgcGFyYW1zID0gWyJh
cmciICsgc3RyKHBhcmFtKSBmb3IgcGFyYW0gaW4gcmFuZ2UobGVuKHdhc21PcFsicGFyYW1ldGVy
Il0pKV0KLSAgICAgICAgICAgIHJldHVybiAiICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OiIgKyBzZWxmLnRva2VuKCkgKyAiLCBvcmlnaW4o
KSwgIiArICIsICIuam9pbihwYXJhbXMpICsgIikiCisgICAgICAgICAgICBwYXJhbXMgPSBbImdl
dChhcmciICsgc3RyKHBhcmFtKSArICIpIiBmb3IgcGFyYW0gaW4gcmFuZ2UobGVuKHdhc21PcFsi
cGFyYW1ldGVyIl0pKV0KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1ha2VSZXN1bHQoIiAgICBW
YWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEIzOjoiICsgc2VsZi50b2tlbigpICsgIiwgb3JpZ2luKCksICIgKyAiLCAiLmpvaW4ocGFy
YW1zKSArICIpIikKICAgICAgICAgcmVzdWx0ID0gc2VsZi5nZW5lcmF0ZU9wY29kZSgpCi0gICAg
ICAgIHNlbGYuY29kZS5hcHBlbmQoInJlc3VsdCA9ICIgKyByZXN1bHQpCi0gICAgICAgIHJldHVy
biAiICAgICIgKyAiICAgIFxuIi5qb2luKHNlbGYuY29kZSkKKyAgICAgICAgc2VsZi5jb2RlLmFw
cGVuZCgiVmFsdWUqIHJlc3VsdFZhbHVlID0gIiArIHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHNl
bGYubWFrZVJlc3VsdCgiICAgICIgKyAiICAgIFxuIi5qb2luKHNlbGYuY29kZSkpCiAKIAogZGVm
IHRlbXAoaW5kZXgpOgpAQCAtMTkxLDcgKzE5NCw3IEBAIGRlZiBnZW5lcmF0ZVNpbXBsZUNvZGUo
b3ApOgogICAgIHJldHVybiAiIiIKIHRlbXBsYXRlPD4gYXV0byBCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OiIiIiArIHdhc20udG9DcHAob3BbIm5hbWUiXSkgKyAiPigiICsgIiwgIi5qb2lu
KGFyZ3MpICsgIiIiKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0iIiIgKyBnZW5lcmF0ZUIzQ29kZShv
cGNvZGUsIGIzb3ApICsgIiIiOworIiIiICsgZ2VuZXJhdGVCM0NvZGUob3Bjb2RlLCBiM29wKSAr
ICIiIgogICAgIHJldHVybiB7IH07CiB9CiAiIiIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQppbmRleCBjMjBiZmE1NDJlMDg2NGJj
ZDBhZjgyOGU3OWQ2OTIwODA0YTU3MjM3Li43Y2NmY2FmYzZhZmIzMjEwOGNiNGE1MDljNWI5MjA3
MmE4MWM3NjI0IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0
ZVdhc21PcHNIZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJh
dGVXYXNtT3BzSGVhZGVyLnB5CkBAIC01Myw3ICs1Myw3IEBAIGRlZiBjcHBNYWNybyh3YXNtT3Bj
b2RlLCB2YWx1ZSwgYjMsIGluYywgKmV4dHJhQXJncyk6CiBkZWYgdHlwZU1hY3JvaXplcigpOgog
ICAgIGluYyA9IDAKICAgICBmb3IgdHkgaW4gd2FzbS50eXBlczoKLSAgICAgICAgeWllbGQgY3Bw
TWFjcm8odHksIHdhc20udHlwZXNbdHldWyJ2YWx1ZSJdLCB3YXNtLnR5cGVzW3R5XVsiYjN0eXBl
Il0sIGluYykKKyAgICAgICAgeWllbGQgY3BwTWFjcm8odHksIHdhc20udHlwZXNbdHldWyJ2YWx1
ZSJdLCB3YXNtLnR5cGVzW3R5XVsiYjN0eXBlIl0sIGluYywgdHkpCiAgICAgICAgIGluYyArPSAx
CiAKIHR5cGVfZGVmaW5pdGlvbnMgPSBbIiNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9UWVBFKG1hY3Jv
KSJdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3Bw
CmluZGV4IDcxOGJjYjk3NTU2ZWY0NWE4MmQzZGI5ZTRiYTA3NzU4MGJiYzllNTYuLjc4ZjE3NmFi
NjNhMjY1ZTE1NDlkNWQ3MmNiMzYyY2E3ZTg1NDdjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCkBAIC03OCw2ICs3OCw3IEBAIGNvbnN0
IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseSIsICZCYXNl
OjpzX2luZm8sICZ3ZWJBc3NlCiAvKiBTb3VyY2UgZm9yIEpTV2ViQXNzZW1ibHkubHV0LmgKIEBi
ZWdpbiB3ZWJBc3NlbWJseVRhYmxlCiAgIENvbXBpbGVFcnJvciAgICBjcmVhdGVXZWJBc3NlbWJs
eUNvbXBpbGVFcnJvciAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjaworICBFeGNlcHRpb24gICAg
ICAgY3JlYXRlV2ViQXNzZW1ibHlFeGNlcHRpb24gICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJh
Y2sKICAgR2xvYmFsICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5R2xvYmFsICAgICAgICBEb250
RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIEluc3RhbmNlICAgICAgICBjcmVhdGVXZWJBc3NlbWJs
eUluc3RhbmNlICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBMaW5rRXJyb3IgICAg
ICAgY3JlYXRlV2ViQXNzZW1ibHlMaW5rRXJyb3IgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJh
Y2sKQEAgLTg1LDYgKzg2LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHk6OnNfaW5m
byA9IHsgIldlYkFzc2VtYmx5IiwgJkJhc2U6OnNfaW5mbywgJndlYkFzc2UKICAgTW9kdWxlICAg
ICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5TW9kdWxlICAgICAgICBEb250RW51bXxQcm9wZXJ0eUNh
bGxiYWNrCiAgIFJ1bnRpbWVFcnJvciAgICBjcmVhdGVXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciAg
RG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBUYWJsZSAgICAgICAgICAgY3JlYXRlV2ViQXNz
ZW1ibHlUYWJsZSAgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKKyAgVGFnICAgICAg
ICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5VGFnICAgICAgICAgICBEb250RW51bXxQcm9wZXJ0eUNh
bGxiYWNrCiAgIGNvbXBpbGUgICAgICAgICB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jICAgICAgICAg
RnVuY3Rpb24gMQogICBpbnN0YW50aWF0ZSAgICAgd2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1bmMg
ICAgIEZ1bmN0aW9uIDEKICAgdmFsaWRhdGUgICAgICAgIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5j
ICAgICAgICBGdW5jdGlvbiAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwM2Q0MzAzM2Nl
YWQ1ZjFiNDNiNmNkNjUxZjM2YTc4NTJmZjAxODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcApAQCAtMCww
ICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIK
KworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxw
ZXJzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJs
eUV4Y2VwdGlvbjo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5
RXhjZXB0aW9uKSB9OworCitKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpKU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFdhc206OlRhZyYgdGFn
LCBGaXhlZFZlY3Rvcjx1aW50NjRfdD4mJiBwYXlsb2FkKQorICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlKQorICAgICwgbV90YWcoUmVmIHsgdGFnIH0pCisgICAgLCBtX3BheWxvYWQoV1RGTW92ZShw
YXlsb2FkKSkKK3sKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGws
IHZpc2l0b3IpOworCisgICAgYXV0byogZXhjZXB0aW9uID0ganNDYXN0PEpTV2ViQXNzZW1ibHlF
eGNlcHRpb24qPihjZWxsKTsKKyAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9
IGV4Y2VwdGlvbi0+dGFnKCkuc2lnbmF0dXJlKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBpZiAoaXNSZWZU
eXBlKHNpZ25hdHVyZS5hcmd1bWVudChpKSkpCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChi
aXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+PihleGNlcHRpb24tPnBheWxvYWQoKVtp
XSkpOworICAgIH0KK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlFeGNl
cHRpb24pOworCit2b2lkIEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQoreworICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPihjZWxsKS0+
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6fkpTV2ViQXNzZW1ibHlFeGNlcHRpb24oKTsKK30KKwor
SlNWYWx1ZSBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpnZXRBcmcoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgdW5zaWduZWQgaSkgY29uc3QKK3sKKyAgICBjb25zdCBXYXNtOjpTaWduYXR1
cmUmIHNpZ25hdHVyZSA9IHRhZygpLnNpZ25hdHVyZSgpOworICAgIEFTU0VSVChpIDwgc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSk7CisgICAgcmV0dXJuIHRvSlNWYWx1ZShnbG9iYWxPYmplY3Qs
IHNpZ25hdHVyZS5hcmd1bWVudChpKSwgcGF5bG9hZCgpW2ldKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDNiOWEzMmY5NWIxOTRkZWU4YzE1NDZiMmRjNWQ5OTRkNzJjNjNjYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNl
cHRpb24uaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisK
KyNpbmNsdWRlICJXYXNtVGFnLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKK3B1YmxpYzoK
KyAgICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworCisgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5RXhjZXB0aW9uU3BhY2U8bW9k
ZT4oKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhFcnJvckluc3Rh
bmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBK
U1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcsIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiYmIHBheWxvYWQp
CisgICAgeworICAgICAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBleGNlcHRpb24gPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uPih2bS5oZWFwKSkg
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbih2bSwgc3RydWN0dXJlLCB0YWcsIFdURk1vdmUocGF5bG9h
ZCkpOworICAgICAgICBleGNlcHRpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbjsKKyAgICB9CisKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCisg
ICAgY29uc3QgV2FzbTo6VGFnJiB0YWcoKSBjb25zdCB7IHJldHVybiBtX3RhZy5nZXQoKTsgfQor
ICAgIGNvbnN0IEZpeGVkVmVjdG9yPHVpbnQ2NF90PiYgcGF5bG9hZCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGF5bG9hZDsgfQorICAgIEpTVmFsdWUgZ2V0QXJnKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWdu
ZWQpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbihWTSYs
IFN0cnVjdHVyZSosIGNvbnN0IFdhc206OlRhZyYsIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiYmKTsK
KworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIFJlZjxjb25zdCBXYXNtOjpU
YWc+IG1fdGFnOworICAgIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiBtX3BheWxvYWQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5o
CmluZGV4IGQ4ZjI2NTBjYWE1ODY3MjM1NGJkNWYzOWY3ZGVhYjY0MTBkMDA1NGMuLmI2MjBlZGNh
MjhhOWUyNDI5ZjEyMGNlMTk2N2EzYjBjMTEyMTM1NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgogI2luY2x1ZGUgIkpTU291cmNlQ29kZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgi
CkBAIC0xNDQsNiArMTQ1LDc1IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBkZWZhdWx0VmFsdWVG
b3JSZWZlcmVuY2VUeXBlKGNvbnN0IFdhc206OlR5cGUgdHlwZSkKICAgICByZXR1cm4ganNOdWxs
KCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSB0b0pTVmFsdWUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgV2FzbTo6VHlwZSB0eXBlLCB1aW50NjRfdCBiaXRzKQorewor
ICAgIHN3aXRjaCAodHlwZS5raW5kKSB7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6Vm9pZDoK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6
STMyOgorICAgICAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYml0cykp
OworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkYzMjoKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KGJpdHdpc2VfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4oYml0cykpKTsKKyAgICBj
YXNlIFdhc206OlR5cGVLaW5kOjpGNjQ6CisgICAgICAgIHJldHVybiBqc051bWJlcihiaXR3aXNl
X2Nhc3Q8ZG91YmxlPihiaXRzKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STY0OgorICAg
ICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxpbnQ2NF90PihiaXRzKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RXh0ZXJucmVmOgor
ICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkZ1bmNyZWY6CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZT4oYml0cyk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEpTVmFsdWUo
KTsKK30KKworQUxXQVlTX0lOTElORSB1aW50NjRfdCBmcm9tSlNWYWx1ZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXYXNtOjpUeXBlIHR5cGUsIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBzd2l0Y2ggKHR5cGUua2luZCkgeworICAgIGNhc2Ug
V2FzbTo6VHlwZUtpbmQ6OlR5cGVJZHg6CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RnVuY3Jl
ZjogeworICAgICAgICBib29sIGlzTnVsbGFibGUgPSB0eXBlLmlzTnVsbGFibGUoKTsKKyAgICAg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICAgICAg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rpb24gPSBudWxscHRy
OworICAgICAgICBpZiAoIWlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIHZhbHVlLCB3YXNt
RnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pICYmICghaXNOdWxsYWJsZSB8fCAhdmFsdWUu
aXNOdWxsKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FeGNlcHRpb24oZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3Qs
IHZtLCAiRnVuY3JlZiBtdXN0IGJlIGFuIGV4cG9ydGVkIHdhc20gZnVuY3Rpb24iKSk7CisgICAg
ICAgIGlmICh0eXBlLmtpbmQgPT0gV2FzbTo6VHlwZUtpbmQ6OlR5cGVJZHggJiYgKHdhc21GdW5j
dGlvbiB8fCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgeworICAgICAgICAgICAgV2FzbTo6U2lnbmF0
dXJlSW5kZXggcGFyYW1JbmRleCA9IHR5cGUuaW5kZXg7CisgICAgICAgICAgICBXYXNtOjpTaWdu
YXR1cmVJbmRleCBhcmdJbmRleDsKKyAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCisgICAg
ICAgICAgICAgICAgYXJnSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJnSW5kZXggPSB3YXNtV3JhcHBlckZ1
bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgaWYgKHBhcmFtSW5kZXggIT0g
YXJnSW5kZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FeGNlcHRpb24oZ2xvYmFs
T2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmpl
Y3QsIHZtLCAiQXJndW1lbnQgZnVuY3Rpb24gZGlkIG5vdCBtYXRjaCB0aGUgcmVmZXJlbmNlIHR5
cGUiKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV2FzbTo6
VHlwZUtpbmQ6OkV4dGVybnJlZjoKKyAgICAgICAgaWYgKCF0eXBlLmlzTnVsbGFibGUoKSAmJiB2
YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXhjZXB0aW9uKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCB2bSwgIk5vbi1udWxsIEV4dGVybnJlZiBjYW5ub3QgYmUgbnVsbCIpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STMyOgorICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHZhbHVlLnRvSW50MzIoZ2xvYmFsT2JqZWN0KSk7CisgICAgY2FzZSBX
YXNtOjpUeXBlS2luZDo6STY0OgorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUudG9CaWdJbnQ2NChnbG9iYWxPYmplY3QpKSk7Cisg
ICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjMyOgorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChnbG9iYWxPYmplY3Qp
KSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjY0OgorICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUudG9OdW1iZXIoZ2xvYmFs
T2JqZWN0KSkpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlZvaWQ6CisgICAgY2FzZSBXYXNt
OjpUeXBlS2luZDo6RnVuYzoKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpSZWZOdWxsOgorICAg
IGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlJlZjoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZSh2YWx1ZSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmluZGV4IDY2ZGExMGE3ODAwM2RiMjdhMTkx
ODJlOWIxYjBjM2M4MDVkNGEzYjYuLjFkN2Y0NmNkNjgzMDQ1ZWFiNjQ2Yjg3MmY1NzhlZDc1MDIy
NWNiZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtMjE2LDYgKzIxNiw3IEBAIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjp0cnlDcmVhdGUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOgogICAg
ICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xvYmFsOgogICAgICAgICBjYXNlIFdhc206
OkV4dGVybmFsS2luZDo6VGFibGU6CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpF
eGNlcHRpb246CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgY2FzZSBXYXNtOjpFeHRl
cm5hbEtpbmQ6Ok1lbW9yeToKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQyLDYgKzI0Myw3IEBA
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjp0cnlDcmVhdGUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6
OkZ1bmN0aW9uOgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xvYmFsOgogICAg
ICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6CisgICAgICAgIGNhc2UgV2FzbTo6
RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBj
YXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCmluZGV4IDU2ZjU4Zjk1
NDM0OTM5NTliODI2ZDFmOTczYThmMmIwZDVjZjc2OWYuLjk3NGQ2ZDdiYTVlN2E1ODc4YTg4YjZj
MTE2ZDUyYWRlNTM4YmFmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCkBAIC00OCw2ICs0OCw4IEBAIGNsYXNzIENv
ZGVCbG9jazsKIH0KIAogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlIGZpbmFsIDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgeworICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CisKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9y
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuY3BwCmluZGV4IDEwMjJhNTIyNzQzMjk2N2FlYWE1MmI4Yjg5NzQ2NzkzYmZhZmY0ZGIu
LmIxMDI5N2ZlZGFiNzVmYTIzN2M1NzY2ZTcxMTkzMjQyNDI2NDg2N2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM3LDYgKzM3LDEzIEBAIEpTT2JqZWN0KiBjcmVhdGVKU1dlYkFzc2VtYmx5UnVu
dGltZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwKICAgICBBU1NF
UlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKICAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRl
KGdsb2JhbE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlSdW50aW1lRXJyb3JT
dHJ1Y3R1cmUoKSwgbWVzc2FnZSwgSlNWYWx1ZSgpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIFR5
cGVOb3RoaW5nLCBFcnJvclR5cGU6OkVycm9yLCB0cnVlKTsKIH0KKworSlNPYmplY3QqIGNyZWF0
ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Vk0mIHZtLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUpCit7CisgICAgRXJyb3JJbnN0YW5jZSog
ZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgZ2xvYmFsT2Jq
ZWN0LT53ZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBXYXNtOjplcnJvck1lc3Nh
Z2VGb3JFeGNlcHRpb25UeXBlKHR5cGUpLCBKU1ZhbHVlKCksIGRlZmF1bHRTb3VyY2VBcHBlbmRl
ciwgVHlwZU5vdGhpbmcsIEVycm9yVHlwZTo6RXJyb3IsIHRydWUpOworICAgIGVycm9yLT5zZXRD
YXRjaGFibGVGcm9tV2FzbShmYWxzZSk7CisgICAgcmV0dXJuIGVycm9yOworfQogICAgIAogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaAppbmRleCBiZTQxMzA5MGQzMjc0YzYx
OGZhZmQ0OWIxMTY3YjBkMjIyN2NlNWZjLi5jODZiNjNmOTEyZDNjZjQxZDFjNmM0OTBjMDg5NjM5
Y2I3YjBiM2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5UnVudGltZUVycm9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEwICsyOCwxMiBAQAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkVycm9ySW5zdGFuY2UuaCIKKyNpbmNsdWRlICJX
YXNtRXhjZXB0aW9uVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogSlNPYmplY3QqIGNyZWF0
ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBWTSYsIGNvbnN0IFN0
cmluZyYpOworSlNPYmplY3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9i
YWxPYmplY3QqLCBWTSYsIFdhc206OkV4Y2VwdGlvblR5cGUpOwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVRhZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iOGQ1NjBmMDcxMDZlNGQwYWNiYTU1YTMzYTc0MmM3MDk3NzM3
YjFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseVRhZy5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5VGFnLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRl
ICJXYXNtVGFnLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNXZWJB
c3NlbWJseVRhZzo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFnIiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5VGFnKSB9
OworCitKU1dlYkFzc2VtYmx5VGFnKiBKU1dlYkFzc2VtYmx5VGFnOjpjcmVhdGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3Qg
V2FzbTo6VGFnJiB0YWcpCit7CisgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisgICAg
YXV0byoganNUYWcgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5VGFn
Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseVRhZyh2bSwgc3RydWN0dXJlLCB0YWcpOworICAgIGpz
VGFnLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIGpzVGFnOworfQorCitTdHJ1Y3R1
cmUqIEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworSlNXZWJBc3NlbWJseVRhZzo6
SlNXZWJBc3NlbWJseVRhZyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBXYXNt
OjpUYWcmIHRhZykKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fdGFnKFJlZiB7
IHRhZyB9KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTJiZjQzZGI3N2U1N2ZkNTFiODBjMTkwM2YyMmNlOTlj
MGE3ZWUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseVRhZy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21UYWcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEpTV2ViQXNzZW1ibHlUYWcgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citw
dWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KKyAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS53
ZWJBc3NlbWJseVRhZ1NwYWNlPG1vZGU+KCk7CisgICAgfQorCisgICAgREVDTEFSRV9FWFBPUlRf
SU5GTzsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1dlYkFzc2VtYmx5VGFnKiBj
cmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGNvbnN0IFdhc206OlRhZyYp
OworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRhZygpIGNvbnN0IHsgcmV0
dXJuIG1fdGFnOyB9CisgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUoKSBjb25z
dCB7IHJldHVybiB0YWcoKS5zaWduYXR1cmUoKTsgfQorCitwcml2YXRlOgorICAgIEpTV2ViQXNz
ZW1ibHlUYWcoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBXYXNtOjpUYWcmKTsKKworICAgIGNvbnN0
IFJlZjxjb25zdCBXYXNtOjpUYWc+IG1fdGFnOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XYXNtVG9KUy5jcHAKaW5kZXggZjY3ZjI0MmE3ODkxM2FlNWMwMmFhNTY4ZTk5YWM2NWNk
YmI4MGZkZS4uZDY1ZmM2MTIxYjYwOTBiZDdmMmQ0MGQwM2JiNDVlZTdhYTY0MDIzNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApAQCAtOTgsNyArOTgsNyBA
QCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGlu
Z0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkR1BS
cyA9IDA7CiAgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKICAgICAgICAgdW5z
aWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgdW5zaWduZWQgZnJP
ZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZy
YW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7
ICsrYXJnTnVtKSB7CiAgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1l
bnQoYXJnTnVtKTsKICAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZS5raW5kKSB7CkBAIC0xNjIs
NyArMTYyLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRh
Zz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgdW5zaWduZWQgbWFy
c2hhbGxlZEdQUnMgPSAwOwogICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7CiAg
ICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RB
cmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIHVu
c2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1bnNpZ25lZCBmck9mZnNl
dCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOwogCiAgICAgICAgIGF1dG8gbWFyc2hhbGxGUFIgPSBbJl0gKEZQUlJlZyBm
cHJSZWcpIHsKICAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oZnByUmVnKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNl
cHRpb25Db25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY0YTVmNDQ4NmI0ZjE3YzhmZmZjODcw
NzQxMTUwMmI4NjdlNjlmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEs
MTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0
b3IuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkl0ZXJhdG9yT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKKyNpbmNs
dWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oIgorCisjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Nv
bnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpzX2luZm8gPSB7
ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sICZjb25zdHJ1Y3RvclRhYmxlV2ViQXNzZW1ibHlF
eGNlcHRpb24sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlFeGNlcHRp
b25Db25zdHJ1Y3RvcikgfTsKKworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29u
c3RydWN0SlNXZWJBc3NlbWJseUV4Y2VwdGlvbik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihjYWxsSlNXZWJBc3NlbWJseUV4Y2VwdGlvbik7CisKKy8qIFNvdXJjZSBmb3IgV2Vi
QXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaAorIEBiZWdpbiBjb25zdHJ1Y3RvclRh
YmxlV2ViQXNzZW1ibHlFeGNlcHRpb24KKyBAZW5kCisgKi8KKworSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlFeGNlcHRpb24sIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgYXV0byYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIEpTVmFsdWUgdGFnVmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAg
IEpTVmFsdWUgdGFnUGFyYW1ldGVycyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSk7CisKKyAgICBh
dXRvIHRhZyA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhZyo+KHZtLCB0YWdWYWx1ZSk7
CisgICAgaWYgKCF0YWcpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRpb24gY29uc3RydWN0b3IgZXhwZWN0cyB0
aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBXZWJBc3NlbWJseS5UYWciKTsKKworICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIHZhbHVlczsKKyAgICBmb3JFYWNoSW5JdGVyYWJsZShnbG9iYWxPYmpl
Y3QsIHRhZ1BhcmFtZXRlcnMsIFsmXSAoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbmV4
dFZhbHVlKSB7CisgICAgICAgIHZhbHVlcy5hcHBlbmQobmV4dFZhbHVlKTsKKyAgICB9KTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKHZhbHVlcy5zaXpl
KCkgIT0gdGFnLT5zaWduYXR1cmUoKS5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRp
b24gY29uc3RydWN0b3IgZXhwZWN0cyB0aGUgbnVtYmVyIG9mIHBhcmVtZXRlcnMgaW4gV2ViQXNz
ZW1ibHkuVGFnIHRvIG1hdGNoIHRoZSB0YWdzIHBhcmFtZXRlciBjb3VudC4iKTsKKworICAgIC8v
IEFueSBHQydkIHZhbHVlcyBpbiBoZXJlIHdpbGwgYmUgbWFya2VkIGJ5IHRoZSBNYXJrZWRBcnVn
ZW1lbnRCdWZmZXIgdW50aWwgc3RvcmVkIGluIHRoZSBFeGNlcHRpb24uCisgICAgRml4ZWRWZWN0
b3I8dWludDY0X3Q+IHBheWxvYWQodmFsdWVzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBwYXlsb2FkW2ldID0gZnJv
bUpTVmFsdWUoZ2xvYmFsT2JqZWN0LCB0YWctPnNpZ25hdHVyZSgpLmFyZ3VtZW50KGkpLCB2YWx1
ZXMuYXQoaSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAg
IH0KKworICAgIEpTT2JqZWN0KiBuZXdUYXJnZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPm5ld1Rh
cmdldCgpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJV
Q1RVUkUodm0sIHdlYkFzc2VtYmx5RXhjZXB0aW9uU3RydWN0dXJlLCBuZXdUYXJnZXQsIGNhbGxG
cmFtZS0+anNDYWxsZWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNz
ZW1ibHlFeGNlcHRpb246OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCB0YWctPnRhZygpLCBXVEZNb3Zl
KHBheWxvYWQpKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbEpTV2ViQXNz
ZW1ibHlFeGNlcHRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
KSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIikpOworfQorCitXZWJBc3NlbWJseUV4
Y2VwdGlvbkNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVh
dGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90
b3R5cGUqIHRoaXNQcm90b3R5cGUpCit7CisgICAgYXV0byogY29uc3RydWN0b3IgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yPih2bS5o
ZWFwKSkgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAg
ICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUpOworICAgIHJl
dHVybiBjb25zdHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9u
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhj
ZXB0aW9uQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlFeGNl
cHRpb25Qcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSwgMSwgIkV4Y2VwdGlvbiJfcywgUHJvcGVydHlBZGRpdGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1
cmVUcmFuc2l0aW9uKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpE
b250RGVsZXRlKTsKK30KKworV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6V2ViQXNz
ZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjYWxsSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiwgY29u
c3RydWN0SlNXZWJBc3NlbWJseUV4Y2VwdGlvbikKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTdiYzkyMzU0NTUzMGRlNTg1OTcwZThkY2U3YzYwMDY5MDRhYjEz
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisjaW5j
bHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5
RXhjZXB0aW9uUHJvdG90eXBlOworCitjbGFzcyBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yIGZpbmFsIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVk
ZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5
VGFibGU7CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3RvciogY3Jl
YXRlKFZNJiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqKTsKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFdlYkFzc2Vt
Ymx5RXhjZXB0aW9uQ29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqKTsKK307CitTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0
cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uM2MzNmM0Nzk4NWEzMjRjMWIzODk5MzVlZjFhMWI5MTFhYWY1ZjhlNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG90eXBlLmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCIKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mgeworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1Rf
RlVOQ1RJT04od2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNHZXRBcmcpOworc3RhdGljIEpT
Q19ERUNMQVJFX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNJcyk7
Cit9CisKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5sdXQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUV4Y2VwdGlvblBy
b3RvdHlwZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIiwgJkJhc2U6OnNfaW5m
bywgJnByb3RvdHlwZVRhYmxlV2ViQXNzZW1ibHlFeGNlcHRpb24sIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUpIH07CisKKy8qIFNvdXJj
ZSBmb3IgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUubHV0LmgKKyBAYmVnaW4gcHJvdG90
eXBlVGFibGVXZWJBc3NlbWJseUV4Y2VwdGlvbgorIGdldEFyZyAgIHdlYkFzc2VtYmx5RXhjZXB0
aW9uUHJvdG9GdW5jR2V0QXJnICAgRnVuY3Rpb24gMgorIGlzICAgd2ViQXNzZW1ibHlFeGNlcHRp
b25Qcm90b0Z1bmNJcyAgIEZ1bmN0aW9uIDEKKyBAZW5kCisgKi8KKworV2ViQXNzZW1ibHlFeGNl
cHRpb25Qcm90b3R5cGUqIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGF1dG8q
IG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RXhjZXB0aW9u
UHJvdG90eXBlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUodm0sIHN0
cnVjdHVyZSk7CisgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIG9i
amVjdDsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFT
U0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Cit9CisKK1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJv
dG90eXBlOjpXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCitBTFdBWVNfSU5M
SU5FIHN0YXRpYyBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBnZXRFeGNlcHRpb24oSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2VsbCgpKSkgeworICAgICAg
ICB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlTm90QW5PYmplY3RFcnJv
cihnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisgICAgYXV0byogdGFnID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5RXhjZXB0aW9u
Kj4odm0sIHRoaXNWYWx1ZS5hc0NlbGwoKSk7CisgICAgaWYgKExJS0VMWSh0YWcpKQorICAgICAg
ICByZXR1cm4gdGFnOworICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJX
ZWJBc3NlbWJseS5FeGNlcHRpb24gb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tRXhjZXB0aW9uIG9i
amVjdCJfcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FMV0FZU19JTkxJTkUgc3RhdGlj
IEpTV2ViQXNzZW1ibHlUYWcqIGdldFRhZyhWTSYgdm0sIEpTVmFsdWUgdGFnVmFsdWUpCit7Cisg
ICAgaWYgKCF0YWdWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhZyo+KHZtLCB0YWdWYWx1ZS5hc0Nl
bGwoKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih3ZWJBc3NlbWJseUV4Y2VwdGlv
blByb3RvRnVuY0dldEFyZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBjb25zdCBh
dXRvJiBmb3JtYXRNZXNzYWdlID0gWyZdKGNvbnN0IGF1dG8mIG1lc3NhZ2UpIHsKKyAgICAgICAg
cmV0dXJuIG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5LkV4Y2VwdGlvbi5nZXRBcmcoKTogIiwgbWVz
c2FnZSk7CisgICAgfTsKKyAgICBjb25zdCBhdXRvJiB0eXBlRXJyb3IgPSBbJl0oY29uc3QgYXV0
byYgbWVzc2FnZSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGZvcm1hdE1lc3NhZ2UobWVzc2FnZSkpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpT
VmFsdWUoKTsKKyAgICB9OworCisgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbioganNFeGNlcHRp
b24gPSBnZXRFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
CisgICAgSlNXZWJBc3NlbWJseVRhZyogdGFnID0gZ2V0VGFnKHZtLCBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoIXRhZykKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJvcigiRmlyc3Qg
YXJndW1lbnQgbXVzdCBiZSBhIFdlYkFzc2VtYmx5LlRhZyIpOworCisgICAgaWYgKGpzRXhjZXB0
aW9uLT50YWcoKSAhPSB0YWctPnRhZygpKQorICAgICAgICByZXR1cm4gdHlwZUVycm9yKCJGaXJz
dCBhcmd1bWVudCBkb2VzIG5vdCBtYXRjaCB0aGUgZXhjZXB0aW9uIHRhZyIpOworCisgICAgdWlu
dDMyX3QgaW5kZXggPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpLnRvVUludDMyKGdsb2JhbE9iamVj
dCk7CisgICAgaWYgKGluZGV4ID49IHRhZy0+dGFnKCkucGFyYW1ldGVyQ291bnQoKSkgeworICAg
ICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBmb3JtYXRNZXNz
YWdlKCJJbmRleCBvdXQgb2YgcmFuZ2UiKSk7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1
ZSgpOworICAgIH0KKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVl
OjplbmNvZGUoanNFeGNlcHRpb24tPmdldEFyZyhnbG9iYWxPYmplY3QsIGluZGV4KSkpOworfQor
CitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNJ
cywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9u
KiBqc0V4Y2VwdGlvbiA9IGdldEV4Y2VwdGlvbihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFnKiB0YWcgPSBnZXRUYWcodm0sIGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkpOworICAgIGlmICghdGFnKSB7CisgICAgICAgIHRocm93VHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgIldlYkFzc2VtYmx5LkV4Y2VwdGlvbi5pcygp
OiBGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuVGFnIik7CisgICAgICAgIHJl
dHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGpzRXhjZXB0aW9uLT50YWcoKSA9
PSB0YWctPnRhZygpKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRj
MjEwNmQ4Yjk5MzFmZGE0YTBlOTRiNjFmYjVjN2UxZWEzNDhkYmMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKwor
I2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBl
IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJh
c2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFi
bGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+Cisg
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAg
ICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseUV4Y2VwdGlv
blByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsK
KyAgICB9CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqIGNyZWF0
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAg
IERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcAppbmRleCAzYWIzYzNkNWNiNWM5MDA5YmVjMmI2ZDgwZDQ0NGM4MGMxNDNlYWRlLi4x
OTcxOGRjZTY5OTY5MDAxZWUxMmQ2NDRmODYyNDVlMDE3MzY1YjA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAt
NzgsNTEgKzc4LDkgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJseUZ1
bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBXYXNtOjpJbnN0YW5j
ZSogd2FzbUluc3RhbmNlID0gJmluc3RhbmNlLT5pbnN0YW5jZSgpOwogCiAgICAgZm9yICh1bnNp
Z25lZCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsg
KythcmdJbmRleCkgewotICAgICAgICBKU1ZhbHVlIGFyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQo
YXJnSW5kZXgpOwotICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChhcmdJbmRleCku
a2luZCkgewotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJMzI6Ci0gICAgICAgICAgICBh
cmcgPSBKU1ZhbHVlOjpkZWNvZGUoYXJnLnRvSW50MzIoZ2xvYmFsT2JqZWN0KSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6VHlwZUlkeDoKLSAgICAg
ICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RnVuY3JlZjogewotICAgICAgICAgICAgYm9vbCBpc051
bGxhYmxlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ0luZGV4KS5pc051bGxhYmxlKCk7Ci0gICAg
ICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb24gPSBudWxscHRyOwotICAg
ICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rpb24g
PSBudWxscHRyOwotICAgICAgICAgICAgaWYgKCFpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZt
LCBhcmcsIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlvbikgJiYgKCFpc051bGxhYmxl
IHx8ICFhcmcuaXNOdWxsKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAiRnVuY3JlZiBtdXN0IGJlIGFuIGV4cG9y
dGVkIHdhc20gZnVuY3Rpb24iKSkpOwotICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVu
dChhcmdJbmRleCkua2luZCA9PSBXYXNtOjpUeXBlS2luZDo6VHlwZUlkeCAmJiAod2FzbUZ1bmN0
aW9uIHx8IHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2ln
bmF0dXJlSW5kZXggcGFyYW1JbmRleCA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdJbmRleCkuaW5k
ZXg7Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggYXJnSW5kZXg7Ci0gICAg
ICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAgYXJnSW5k
ZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBhcmdJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNp
Z25hdHVyZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtSW5kZXggIT0gYXJnSW5k
ZXgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNl
cHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
cihnbG9iYWxPYmplY3QsIHZtLCAiQXJndW1lbnQgZnVuY3Rpb24gZGlkIG5vdCBtYXRjaCB0aGUg
cmVmZXJlbmNlIHR5cGUiKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RXh0ZXJucmVmOgotICAgICAg
ICAgICAgaWYgKCFzaWduYXR1cmUuYXJndW1lbnQoYXJnSW5kZXgpLmlzTnVsbGFibGUoKSAmJiBh
cmcuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sICJOb24tbnVsbCBFeHRlcm5yZWYgY2Fubm90IGJlIG51
bGwiKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6
Okk2NDoKLSAgICAgICAgICAgIGFyZyA9IEpTVmFsdWU6OmRlY29kZShiaXR3aXNlX2Nhc3Q8dWlu
dDY0X3Q+KGFyZy50b0JpZ0ludDY0KGdsb2JhbE9iamVjdCkpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGMzI6Ci0gICAgICAgICAgICBhcmcgPSBK
U1ZhbHVlOjpkZWNvZGUoYml0d2lzZV9jYXN0PHVpbnQzMl90PihhcmcudG9GbG9hdChnbG9iYWxP
YmplY3QpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2lu
ZDo6RjY0OgotICAgICAgICAgICAgYXJnID0gSlNWYWx1ZTo6ZGVjb2RlKGJpdHdpc2VfY2FzdDx1
aW50NjRfdD4oYXJnLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpWb2lkOgotICAgICAgICBjYXNlIFdhc206
OlR5cGVLaW5kOjpGdW5jOgotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpSZWZOdWxsOgot
ICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpSZWY6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9CisgICAgICAgIHVpbnQ2NF90IHZhbHVlID0g
ZnJvbUpTVmFsdWUoZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnQoYXJnSW5kZXgpLCBj
YWxsRnJhbWUtPmFyZ3VtZW50KGFyZ0luZGV4KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKGFy
Zyk7CisgICAgICAgIGJveGVkQXJncy5hcHBlbmQoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiAg
ICAgfQogCiAgICAgLy8gV2hlbiB3ZSBkb24ndCB1c2UgZmFzdCBUTFMgdG8gc3RvcmUgdGhlIGNv
bnRleHQsIHRoZSBKUwpAQCAtMTUyLDEwICsxMTAsNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LAogICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkpOwogICAgIEFTU0VSVCgmd2Fz
bUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5jZSgpID09IHZtLndhc21Db250ZXh0LmxvYWQo
KSk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1FbnRyeVRvV2FzbSh3YXNtRnVu
Y3Rpb24tPmpzRW50cnlwb2ludChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
JnZtLCAmcHJvdG9DYWxsRnJhbWUpOwotICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMg
aXMgaW4gYSByZWdpc3RlciBvciBvbiB0aGUgc3RhY2sgc2luY2UgaXQncyBzdG9yZWQgaW4gVmVj
dG9yPEpTVmFsdWU+LgotICAgIC8vIFRoaXMgcHJvYmFibHkgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNz
YXJ5LCBzaW5jZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlvbiogc2hvdWxkIGtlZXAgdGhlIGluc3Rh
bmNlCi0gICAgLy8gYWxpdmUuIEJ1dCBpdCdzIGdvb2QgaHlnaWVuZS4KLSAgICBpbnN0YW5jZS0+
dXNlKCk7CiAgICAgaWYgKHByZXZXYXNtSW5zdGFuY2UgIT0gd2FzbUluc3RhbmNlKSB7CiAgICAg
ICAgIC8vIFRoaXMgaXMganVzdCBmb3Igc29tZSBleHRyYSBzYWZldHkgaW5zdGVhZCBvZiBsZWF2
aW5nIGEgY2FjaGVkCiAgICAgICAgIC8vIHZhbHVlIGluIHRoZXJlLiBJZiB3ZSBldmVyIGZvcmdl
dCB0byBzZXQgdGhlIHZhbHVlIHRvIGJlIGEgcmVhbApAQCAtMTY4LDYgKzEyMiwxMSBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHZtLndhc21Db250ZXh0LnN0b3JlKHByZXZXYXNtSW5z
dGFuY2UsIHZtLnNvZnRTdGFja0xpbWl0KCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKKyAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGluIGEgcmVn
aXN0ZXIgb3Igb24gdGhlIHN0YWNrIHNpbmNlIGl0J3Mgc3RvcmVkIGluIFZlY3RvcjxKU1ZhbHVl
Pi4KKyAgICAvLyBUaGlzIHByb2JhYmx5IGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSwgc2luY2Ug
dGhlIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHNob3VsZCBrZWVwIHRoZSBpbnN0YW5jZQorICAgIC8v
IGFsaXZlLiBCdXQgaXQncyBnb29kIGh5Z2llbmUuCisgICAgaW5zdGFuY2UtPnVzZSgpOworCiAg
ICAgcmV0dXJuIHJhd1Jlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IGRiNDA5MmFk
Njk0ODJmN2EwOWQzYmUxZjc1MjM0MjJkOWQ1YWYxM2QuLmY3YjA4N2JmNTg5MmJmMjZiZmU2M2U1
ZTM4Y2ZhZDIwMmJhYmEyMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlG
dW5jdGlvbi5oIgpAQCAtMTMwLDYgKzEzMSw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQ6OmxpbmtJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBpCiAg
ICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjoKICAgICAgICAgY2FzZSBX
YXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtp
bmQ6OlRhYmxlOgorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RXhjZXB0aW9uOgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1v
cnk6CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTM2Myw3ICszNjUsNyBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU09iamVjdCogaQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtp
bmQ6OlRhYmxlOiB7Ci0gICAgICAgICAgICAvLyA3LiBPdGhlcndpc2UgKGkgaXMgYSB0YWJsZSBp
bXBvcnQpOgorICAgICAgICAgICAgLy8gNy4gSWYgaSBpcyBhIHRhYmxlIGltcG9ydDoKICAgICAg
ICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNz
ZW1ibHlUYWJsZSo+KHZtLCB2YWx1ZSk7CiAgICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBh
IFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3Iu
CiAgICAgICAgICAgICBpZiAoIXRhYmxlKQpAQCAtMzk0LDYgKzM5NiwyMiBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU09iamVjdCogaQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBj
YXNlIFdhc206OkV4dGVybmFsS2luZDo6RXhjZXB0aW9uOiB7CisgICAgICAgICAgICBKU1dlYkFz
c2VtYmx5VGFnKiB0YWcgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlUYWcqPih2bSwgdmFs
dWUpOworICAgICAgICAgICAgaWYgKCF0YWcpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9y
dEZhaWxNZXNzYWdlKGltcG9ydCwgIlRhZyBpbXBvcnQiLCAiaXMgbm90IGFuIGluc3RhbmNlIG9m
IFdlYkFzc2VtYmx5LlRhZyIpKSk7CisKKyAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4
IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRFeGNlcHRp
b25TaWduYXR1cmVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOworICAgICAgICAgICAgVU5VU0VE
X1ZBUklBQkxFKGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpOworCisgICAgICAgICAgICBpZiAoZXhw
ZWN0ZWRTaWduYXR1cmVJbmRleCAhPSB0YWctPnRhZygpLnNpZ25hdHVyZSgpLmluZGV4KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydGVk
IFRhZyIsICJzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgaW1wb3J0ZWQgV2ViQXNzZW1ibHkg
VGFnJ3Mgc2lnbmF0dXJlIikpKTsKKworICAgICAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2Uo
KS5hZGRUYWcodGFnLT50YWcoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBj
YXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTQyMSw2ICs0MzksOSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjps
aW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogaQogICAgICAg
ICB9CiAgICAgfQogCisgICAgZm9yIChXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA6IG1vZHVsZUluZm9ybWF0aW9uLmludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcykK
KyAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5hZGRUYWcoV2FzbTo6VGFnOjpjcmVhdGUo
V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkpLmxlYWtSZWYo
KSk7CisKICAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50ID0gY29kZUJsb2NrLT5mdW5j
dGlvbkltcG9ydENvdW50KCk7CiAgICAgYXV0byBtYWtlRnVuY3Rpb25XcmFwcGVyID0gWyZdICh1
aW50MzJfdCBpbmRleCkgLT4gSlNWYWx1ZSB7CiAgICAgICAgIC8vIElmIHdlIGFscmVhZHkgbWFk
ZSBhIHdyYXBwZXIsIGRvIG5vdCBtYWtlIGEgbmV3IG9uZS4KQEAgLTU1Nyw2ICs1NzgsMTAgQEAg
dm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlua0ltcGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIGkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246
IHsKKyAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1dlYkFzc2VtYmx5VGFnOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5tX3dlYkFzc2VtYmx5VGFnU3RydWN0dXJl
LmdldChnbG9iYWxPYmplY3QpLCBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLnRhZyhleHAua2luZElu
ZGV4KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICB9CiAKICAgICAg
ICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBT
dHJpbmc6OmZyb21VVEY4KGV4cC5maWVsZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iMzEyMTEwMzc0NTBjOGE0YjRmMzc2YjFjYWRkYzk4ZGFhMTFjMDFlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25z
dHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlUYWdDb25zdHJ1Y3Rvci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5j
bHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKKyNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKKyNpbmNs
dWRlICJXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29u
c3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0
aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKSB9OworCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihjYWxsSlNXZWJBc3NlbWJseVRhZyk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFnKTsKKworSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWcsIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICAKKyAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHku
VGFnIGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlIHRhZyB0eXBlIGFzIHRoZSBmaXJzdCBhcmd1bWVu
dC4iX3MpOworCisgICAgSlNWYWx1ZSB0YWdUeXBlVmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApOworICAgIEpTVmFsdWUgc2lnbmF0dXJlT2JqZWN0ID0gdGFnVHlwZVZhbHVlLmdldChnbG9i
YWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJhbWV0ZXJzIl9zKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlmICghc2lnbmF0dXJl
T2JqZWN0LmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWcgY29uc3RydWN0b3IgZXhwZWN0cyBhIHRh
ZyB0eXBlIHdpdGggdGhlICdwYXJhbWV0ZXJzJyBwcm9wZXJ0eS4iX3MpOworCisgICAgVmVjdG9y
PFdhc206OlR5cGU+IHBhcmFtZXRlcnM7CisgICAgZm9yRWFjaEluSXRlcmFibGUoZ2xvYmFsT2Jq
ZWN0LCBzaWduYXR1cmVPYmplY3QsIFsmXSAoYXV0byYgdm0sIGF1dG8qIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBuZXh0VHlwZSkgLT4gdm9pZCB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBXYXNtOjpUeXBlIHR5cGU7CisgICAgICAgIFN0
cmluZyB2YWx1ZVN0cmluZyA9IG5leHRUeXBlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgIGlmICh2
YWx1ZVN0cmluZyA9PSAiaTMyIl9zKQorICAgICAgICAgICAgdHlwZSA9IFdhc206OlR5cGVzOjpJ
MzI7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09ICJpNjQiX3MpCisgICAgICAgICAg
ICB0eXBlID0gV2FzbTo6VHlwZXM6Okk2NDsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVTdHJpbmcg
PT0gImYzMiJfcykKKyAgICAgICAgICAgIHR5cGUgPSBXYXNtOjpUeXBlczo6RjMyOworICAgICAg
ICBlbHNlIGlmICh2YWx1ZVN0cmluZyA9PSAiZjY0Il9zKQorICAgICAgICAgICAgdHlwZSA9IFdh
c206OlR5cGVzOjpGNjQ7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09ICJhbnlmdW5j
Il9zKQorICAgICAgICAgICAgdHlwZSA9IFdhc206OlR5cGVzOjpGdW5jcmVmOworICAgICAgICBl
bHNlIGlmICh2YWx1ZVN0cmluZyA9PSAiZXh0ZXJucmVmIl9zKQorICAgICAgICAgICAgdHlwZSA9
IFdhc206OlR5cGVzOjpFeHRlcm5yZWY7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LlRhZyBjb25zdHJ1
Y3RvciBleHBlY3RzIHRoZSAncGFyYW1ldGVycycgZmllbGQgb2YgdGhlIGZpcnN0IGFyZ3VtZW50
IHRvIGJlIGEgc2VxdWVuY2Ugb2YgV2ViQXNzZW1ibHkgdmFsdWUgdHlwZXMuIl9zKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHR5
cGUpOworICAgIH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAg
ICBSZWZQdHI8V2FzbTo6U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZv
cm1hdGlvbjo6c2lnbmF0dXJlRm9yKHsgfSwgcGFyYW1ldGVycyk7CisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBKU0NfR0VUX0RFUklWRURfU1RSVUNUVVJFKHZtLCB3ZWJBc3NlbWJseVRhZ1N0
cnVjdHVyZSwgYXNPYmplY3QoY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSksIGNhbGxGcmFtZS0+anND
YWxsZWUoKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUo
SlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgV2Fz
bTo6VGFnOjpjcmVhdGUoKnNpZ25hdHVyZSkuZ2V0KCkpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihjYWxsSlNXZWJBc3NlbWJseVRhZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSopKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWciKSk7Cit9CisKK0pT
V2ViQXNzZW1ibHlUYWcqIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OmNyZWF0ZVRhZyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgV2Fz
bTo6VGFnJiB0YWcpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBuZXdU
YXJnZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgpKTsKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUodm0sIHdlYkFzc2VtYmx5VGFn
U3RydWN0dXJlLCBuZXdUYXJnZXQsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUsIHRhZykpOworfQorCitXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKiBXZWJBc3NlbWJseVRh
Z0NvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNz
ZW1ibHlUYWdQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCit7CisgICAgYXV0byogY29uc3RydWN0
b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
Pih2bS5oZWFwKSkgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAg
ICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUpOworICAgIHJl
dHVybiBjb25zdHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqIHBy
b3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgMSwgIlRhZyJfcywgUHJv
cGVydHlBZGRpdGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFuc2l0aW9uKTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBw
cm90b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKK30KKworV2ViQXNz
ZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvcihWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjYWxsSlNXZWJB
c3NlbWJseVRhZywgY29uc3RydWN0SlNXZWJBc3NlbWJseVRhZykKK3sKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTFlMmYxZDgwNmU5MDIxZWQ4NTc1ZmFjNWIzODE2YzEzOTlhMzE1OQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiV2Fz
bU9wcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseVRhZzsKK2Ns
YXNzIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlOworCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBU
YWc7Cit9CisKK2NsYXNzIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IgZmluYWwgOiBwdWJsaWMg
SW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9u
IEJhc2U7CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvciogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqKTsKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwor
CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWcqIGNyZWF0ZVRhZyhKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSosIGNvbnN0IFdhc206OlRhZyYpOworCisgICAgREVDTEFSRV9JTkZPOworCitw
cml2YXRlOgorICAgIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqKTsK
K307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseVRhZ0Nv
bnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDkzZDQxN2MxOGFjODRhNzI5NGQyZTkxNDJhNTQzMzFmMjYzMDQwNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBl
LmNwcApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVRh
Z1Byb3RvdHlwZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiT2Jq
ZWN0Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisKK25hbWVzcGFjZSBK
U0Mgeworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlUYWdQcm90
b0Z1bmNUeXBlKTsKK30KKworI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5VGFnUHJv
dG90eXBlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5UYWciLCAmQmFzZTo6c19pbmZvLCAmcHJv
dG90eXBlVGFibGVXZWJBc3NlbWJseVRhZywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShX
ZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSkgfTsKKworLyogU291cmNlIGZvciBXZWJBc3NlbWJseVRh
Z1Byb3RvdHlwZS5sdXQuaAorIEBiZWdpbiBwcm90b3R5cGVUYWJsZVdlYkFzc2VtYmx5VGFnCisg
dHlwZSAgIHdlYkFzc2VtYmx5VGFnUHJvdG9GdW5jVHlwZSAgIEZ1bmN0aW9uIDAKKyBAZW5kCisg
Ki8KKworCitXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSogV2ViQXNzZW1ibHlUYWdQcm90b3R5cGU6
OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7
CisgICAgYXV0byogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1i
bHlUYWdQcm90b3R5cGU+KHZtLmhlYXApKSBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSh2bSwgc3Ry
dWN0dXJlKTsKKyAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gb2Jq
ZWN0OworfQorCitTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRz
KHZtLCBpbmZvKCkpKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04o
KTsKK30KKworV2ViQXNzZW1ibHlUYWdQcm90b3R5cGU6OldlYkFzc2VtYmx5VGFnUHJvdG90eXBl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUp
Cit7Cit9CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWcqIGdldFRhZyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgaWYgKFVOTElLRUxZKCF0aGlzVmFsdWUuaXNDZWxsKCkpKSB7
CisgICAgICAgIHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBbk9i
amVjdEVycm9yKGdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlKSk7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKyAgICBhdXRvKiB0YWcgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlU
YWcqPih2bSwgdGhpc1ZhbHVlLmFzQ2VsbCgpKTsKKyAgICBpZiAoTElLRUxZKHRhZykpCisgICAg
ICAgIHJldHVybiB0YWc7CisgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IldlYkFzc2VtYmx5LlRhZyBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1UYWcgb2JqZWN0Il9zKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHdlYkFz
c2VtYmx5VGFnUHJvdG9GdW5jVHlwZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBK
U1dlYkFzc2VtYmx5VGFnKiBqc1RhZyA9IGdldFRhZyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRhZyA9IGpzVGFnLT50YWcoKTsK
KworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0YWcucGFyYW1ldGVyQ291bnQoKTsgKytpKQorICAgICAgICBhcmdMaXN0LmFwcGVu
ZChXYXNtOjp0eXBlVG9TdHJpbmcodm0sIHRhZy5wYXJhbWV0ZXIoaSkua2luZCkpOworCisgICAg
aWYgKFVOTElLRUxZKGFyZ0xpc3QuaGFzT3ZlcmZsb3dlZCgpKSkgeworICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJu
IGVuY29kZWRKU1ZhbHVlKCk7CisgICAgfQorCisgICAgSlNBcnJheSogcGFyYW1ldGVycyA9IGNv
bnN0cnVjdEFycmF5KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8QXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSo+KG51bGxwdHIpLCBhcmdMaXN0KTsKKyAgICBKU09iamVjdCogdHlwZSA9IGNvbnN0cnVj
dEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUo
KSwgMSk7CisgICAgdHlwZS0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAicGFyYW1ldGVycyIpLCBwYXJhbWV0ZXJzKTsKKworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0eXBlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjI0MzJmOWM4OWJkY2RhN2RjN2I5NDE4NDc2MmIyNTI2YjU5YmI2YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90
eXBlLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisj
aW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYkFzc2Vt
Ymx5VGFnUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGlj
OgorICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0
YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJB
c3NlbWJseVRhZ1Byb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZTsKKyAgICB9CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqIGNy
ZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKwor
ICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCmluZGV4IDRmOGRkOWUzZDIxMzQzNTAwMDAwNmUy
NDE0NmIwMTk0YzlhYzg4ZjEuLmE0MzUxMGY0Zjg0NzMwMzg2NDNjMTY1YzNjMzA4MTQ4ZjA3NTA0
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20uanNvbgorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24KQEAgLTIzLDM0ICsyMywzOCBA
QAogICAgICJibG9ja190eXBlIjogWyJpMzIiLCAiaTY0IiwgImYzMiIsICJmNjQiLCAidm9pZCIs
ICJleHRlcm5yZWYiLCAiZnVuY3JlZiJdLAogICAgICJyZWZfdHlwZSI6IFsiZnVuY3JlZiIsICJl
eHRlcm5yZWYiLCAidHlwZV9pZHgiXSwKICAgICAiZXh0ZXJuYWxfa2luZCI6IHsKLSAgICAgICAg
IkZ1bmN0aW9uIjogeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDAgfSwKLSAgICAgICAgIlRh
YmxlIjogICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDEgfSwKLSAgICAgICAgIk1lbW9y
eSI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDIgfSwKLSAgICAgICAgIkdsb2JhbCI6
ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDMgfQorICAgICAgICAiRnVuY3Rpb24iOiAg
ICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMCB9LAorICAgICAgICAiVGFibGUiOiAgICAg
ICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMSB9LAorICAgICAgICAiTWVtb3J5IjogICAg
ICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMiB9LAorICAgICAgICAiR2xvYmFsIjogICAg
ICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMyB9LAorICAgICAgICAiRXhjZXB0aW9uIjog
ICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogNCB9CiAgICAgfSwKICAgICAic2VjdGlvbiIg
OiB7Ci0gICAgICAgICJUeXBlIjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAg
MSwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIHNpZ25hdHVyZSBkZWNsYXJhdGlvbnMiIH0sCi0g
ICAgICAgICJJbXBvcnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMiwgImRl
c2NyaXB0aW9uIjogIkltcG9ydCBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJGdW5jdGlvbiI6
IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMywgImRlc2NyaXB0aW9uIjogIkZ1bmN0
aW9uIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAgIlRhYmxlIjogICAgeyAidHlwZSI6ICJ2YXJ1
aW50NyIsICJ2YWx1ZSI6ICA0LCAiZGVzY3JpcHRpb24iOiAiSW5kaXJlY3QgZnVuY3Rpb24gdGFi
bGUgYW5kIG90aGVyIHRhYmxlcyIgfSwKLSAgICAgICAgIk1lbW9yeSI6ICAgeyAidHlwZSI6ICJ2
YXJ1aW50NyIsICJ2YWx1ZSI6ICA1LCAiZGVzY3JpcHRpb24iOiAiTWVtb3J5IGF0dHJpYnV0ZXMi
IH0sCi0gICAgICAgICJHbG9iYWwiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAg
NiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJFeHBv
cnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNywgImRlc2NyaXB0aW9uIjog
IkV4cG9ydHMiIH0sCi0gICAgICAgICJTdGFydCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIiB9
LAotICAgICAgICAiRWxlbWVudCI6ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDks
ICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9uIiB9LAotICAgICAgICAiQ29kZSI6ICAg
ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTAsICJkZXNjcmlwdGlvbiI6ICJGdW5j
dGlvbiBib2RpZXMgKGNvZGUpIiB9LAotICAgICAgICAiRGF0YSI6ICAgICB7ICJ0eXBlIjogInZh
cnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlwdGlvbiI6ICJEYXRhIHNlZ21lbnRzIiB9Cisg
ICAgICAgICJUeXBlIjogICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDEsICJk
ZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBzaWduYXR1cmUgZGVjbGFyYXRpb25zIiB9LAorICAgICAg
ICAiSW1wb3J0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAyLCAiZGVzY3Jp
cHRpb24iOiAiSW1wb3J0IGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIkZ1bmN0aW9uIjogIHsg
InR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMywgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9u
IGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIlRhYmxlIjogICAgIHsgInR5cGUiOiAidmFydWlu
dDciLCAidmFsdWUiOiAgNCwgImRlc2NyaXB0aW9uIjogIkluZGlyZWN0IGZ1bmN0aW9uIHRhYmxl
IGFuZCBvdGhlciB0YWJsZXMiIH0sCisgICAgICAgICJNZW1vcnkiOiAgICB7ICJ0eXBlIjogInZh
cnVpbnQ3IiwgInZhbHVlIjogIDUsICJkZXNjcmlwdGlvbiI6ICJNZW1vcnkgYXR0cmlidXRlcyIg
fSwKKyAgICAgICAgIkdsb2JhbCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAg
NiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJFeHBv
cnQiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDcsICJkZXNjcmlwdGlvbiI6
ICJFeHBvcnRzIiB9LAorICAgICAgICAiU3RhcnQiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIs
ICJ2YWx1ZSI6ICA4LCAiZGVzY3JpcHRpb24iOiAiU3RhcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24i
IH0sCisgICAgICAgICJFbGVtZW50IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjog
IDksICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9uIiB9LAorICAgICAgICAiQ29kZSI6
ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEwLCAiZGVzY3JpcHRpb24iOiAi
RnVuY3Rpb24gYm9kaWVzIChjb2RlKSIgfSwKKyAgICAgICAgIkRhdGEiOiAgICAgIHsgInR5cGUi
OiAidmFydWludDciLCAidmFsdWUiOiAxMSwgImRlc2NyaXB0aW9uIjogIkRhdGEgc2VnbWVudHMi
IH0sCisgICAgICAgICJEYXRhQ291bnQiOiB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjog
MTIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgZGF0YSBzZWdtZW50cyIgfSwKKyAgICAgICAg
IkV4Y2VwdGlvbiI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMywgImRlc2NyaXB0
aW9uIjogIkV4Y2VwdGlvbiBkZWNsYXJhdGlvbnMiIH0KICAgICB9LAogICAgICJvcGNvZGUiOiB7
CiAgICAgICAgICJ1bnJlYWNoYWJsZSI6ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIs
ICAgICJ2YWx1ZSI6ICAgMCwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRp
YXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAidHJhcCBpbW1lZGlhdGVseSIgfSwKKyAgICAgICAgIm5vcCI6ICAgICAgICAgICAgICAgICB7
ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAxLCAicmV0dXJuIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJubyBvcGVyYXRpb24iIH0sCiAgICAgICAgICJibG9j
ayI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAg
MiwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVy
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6
ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gYSBzZXF1
ZW5jZSBvZiBleHByZXNzaW9ucywgeWllbGRpbmcgMCBvciAxIHZhbHVlcyIgfSwKICAgICAgICAg
Imxvb3AiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVl
IjogICAzLCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJh
bWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJu
YW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBh
IGJsb2NrIHdoaWNoIGNhbiBhbHNvIGZvcm0gY29udHJvbCBmbG93IGxvb3BzIiB9LAogICAgICAg
ICAiaWYiOiAgICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFs
dWUiOiAgIDQsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBh
cmFtZXRlciI6IFsiYm9vbCJdLCAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7
Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2lu
IGlmIGV4cHJlc3Npb24iIH0sCiAgICAgICAgICJlbHNlIjogICAgICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNSwgInJldHVybiI6IFsiY29udHJvbCJd
LCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gZWxzZSBleHByZXNzaW9uIG9mIGlmIiB9LAotICAg
ICAgICAic2VsZWN0IjogICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAi
dmFsdWUiOiAgMjcsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAgICAgICAgICAgICAg
InBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAgImltbWVkaWF0ZSI6
IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInNl
bGVjdCBvbmUgb2YgdHdvIHZhbHVlcyBiYXNlZCBvbiBjb25kaXRpb24iIH0sCi0gICAgICAgICJh
bm5vdGF0ZWRfc2VsZWN0IjogICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6
ICAyOCwgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1l
dGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFt
ZSI6ICJ0YXJnZXRfdHlwZXNfY291bnQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9m
IGVudHJpZXMgaW4gdGhlIHRhcmdldCB0eXBlcyB2ZWN0b3IifSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogInRh
cmdldF90eXBlcyIsICAgICAgICJ0eXBlIjogInZhbHVlX3R5cGUqIiwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0YXJnZXQgdHlwZXMgdGhh
dCBpbmRpY2F0ZSByZXN1bHQgb2Ygc2VsZWN0IGluc3RydWN0aW9uIn1dLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBzYW1lIGFz
IGp1c3Qgc2VsZWN0IGJ1dCB3aXRoIHRoZSBhbm5vdGF0aW9uIGZvciByZXN1bHQgdHlwZXMiIH0s
CisgICAgICAgICJ0cnkiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIs
ICAgICJ2YWx1ZSI6ICAgNiwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAg
ICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRp
YXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiYmVnaW4gdHJ5IGV4cHJlc3Npb24iIH0sCisgICAgICAgICJjYXRjaCI6ICAgICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNywgInJldHVybiI6IFsi
Y29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4iLCAidHlwZSI6
ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gY2F0Y2ggZXhwcmVzc2lvbiBvZiB0
cnkiIH0sCisgICAgICAgICJ0aHJvdyI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29u
dHJvbCIsICAgICJ2YWx1ZSI6ICAgOCwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAg
ICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4iLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAidGhyb3cgZXhjZXB0aW9uIiB9LAorICAgICAgICAicmV0aHJvdyI6ICAgICAgICAg
ICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDksICJyZXR1cm4iOiBb
ImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVw
dGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInJldGhyb3cgdGhlIGV4Y2VwdGlvbiBhdCB0
aGUgdG9wIG9mIHRoZSBzdGFjayIgfSwKICAgICAgICAgImJyIjogICAgICAgICAgICAgICAgICB7
ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDEyLCAicmV0dXJuIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2RlcHRoIiwg
InR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJicmVhayB0aGF0IHRhcmdldHMgYW4gb3V0ZXIgbmVz
dGVkIGJsb2NrIiB9LAogICAgICAgICAiYnJfaWYiOiAgICAgICAgICAgICAgIHsgImNhdGVnb3J5
IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTMsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2
YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogImNvbmRpdGlvbmFsIGJyZWFrIHRoYXQgdGFyZ2V0cyBhbiBvdXRlciBu
ZXN0ZWQgYmxvY2siIH0sCiAgICAgICAgICJicl90YWJsZSI6ICAgICAgICAgICAgeyAiY2F0ZWdv
cnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxNCwgInJldHVybiI6IFtdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfY291bnQiLCAgICJ0eXBlIjog
InZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldF90YWJsZSJ9
LApAQCAtNTgsOCArNjIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogImRlZmF1bHRfdGFyZ2V0IiwgInR5
cGUiOiAidmFydWludDMyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJhbiBvdXRlciBibG9jayBvciBsb29wIHRvIHdoaWNoIHRv
IGJyZWFrIGluIHRoZSBkZWZhdWx0IGNhc2UifV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYnJhbmNoIHRhYmxlIGNvbnRyb2wgZmxv
dyBjb25zdHJ1Y3QiIH0sCiAgICAgICAgICJyZXR1cm4iOiAgICAgICAgICAgICAgeyAiY2F0ZWdv
cnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxNSwgInJldHVybiI6IFtdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAicmV0dXJuIHplcm8gb3Igb25lIHZhbHVlIGZyb20gdGhpcyBmdW5j
dGlvbiIgfSwKKyAgICAgICAgImRlbGVnYXRlIjogICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJj
b250cm9sIiwgICAgInZhbHVlIjogIDI0LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAg
ICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2RlcHRoIiwgInR5cGUiOiAidmFydWlu
dDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJkZWxlZ2F0ZSB0byBhIHBhcmVudCB0cnkgYmxvY2siIH0sCisgICAgICAgICJj
YXRjaF9hbGwiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6
ICAyNSwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1l
dGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiY2F0Y2ggZXhj
ZXB0aW9ucyByZWdhcmRsZXNzIG9mIHRhZyIgfSwKICAgICAgICAgImRyb3AiOiAgICAgICAgICAg
ICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI2LCAicmV0dXJuIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSJdLCAg
ICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJpZ25vcmUgdmFsdWUiIH0sCi0gICAgICAg
ICJub3AiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1
ZSI6ICAgMSwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFy
YW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibm8gb3Bl
cmF0aW9uIiB9LAorICAgICAgICAic2VsZWN0IjogICAgICAgICAgICAgIHsgImNhdGVnb3J5Ijog
ImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAg
ICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVlcyBiYXNlZCBvbiBjb25kaXRpb24i
IH0sCisgICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAgeyAiY2F0ZWdvcnkiOiAiY29udHJv
bCIsICAgICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAgICAiaW1t
ZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291bnQiLCAidHlwZSI6ICJ2YXJ1aW50
MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldCB0eXBlcyB2ZWN0b3IifSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyJuYW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0eXBlIjogInZhbHVlX3R5cGUqIiwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0
YXJnZXQgdHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Ygc2VsZWN0IGluc3RydWN0aW9uIn1d
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogInRoZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRoIHRoZSBhbm5vdGF0aW9uIGZvciBy
ZXN1bHQgdHlwZXMiIH0sCiAgICAgICAgICJlbmQiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdv
cnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMSwgInJldHVybiI6IFtdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiZW5kIGEgYmxvY2ssIGxvb3AsIG9yIGlmIiB9LAogICAgICAgICAi
aTMyLmNvbnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAidmFsdWUi
OiAgNjUsICJyZXR1cm4iOiBbImkzMiJdLCAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFt
ZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5h
bWUiOiAidmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJpbnQzMiJ9XSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImEgY29uc3Rh
bnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTMyIiB9LAogICAgICAgICAiaTY0LmNvbnN0IjogICAg
ICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAidmFsdWUiOiAgNjYsICJyZXR1cm4i
OiBbImk2NCJdLCAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidmFsdWUiLCAg
ICAgICAgICAidHlwZSI6ICJ2YXJpbnQ2NCJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImEgY29uc3RhbnQgdmFsdWUgaW50ZXJw
cmV0ZWQgYXMgaTY0IiB9LApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IGE5NDVhMGRhMzNiODNmNmJhZjM2Y2NlNzA3ZDdjMDcxYTQ5MWE5NzAuLmEy
ZmZmMWI3ZGNkNGUwMGNjODFkZGQzNWZlYzBhOWY3MzlhN2JkMzQgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0x
MC0wNSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBs
ZW1lbnQgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlvbiBoYW5kbGluZyBwcm9wb3NhbAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5NjgxCisgICAgICAg
IDxyZGFyOi8vODE2MDMzODc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzOgorCiAyMDIxLTEwLTA2
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQg
aHR0cHM6Ly93M2MuZ2l0aHViLmlvL3B1c2gtYXBpLyNyZWNlaXZpbmctYS1wdXNoLW1lc3NhZ2UK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29scy9T
Y3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IGUwODE2ZGMwNTYxYjE4MGE5ZWZiNjY3
OGRiODJjYzY0NmUxOWI0ODEuLmRkZjk0N2RlYjc3MjM4MmIyODk2MDk3ZGE2NGMxM2I4MGNhMmFm
MTggMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysrIGIv
VG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtMTIyNywxNiArMTIyNywyMSBA
QCBkZWYgcnVuV2ViQXNzZW1ibHlTdWl0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQog
ICAgIG1vZHVsZXMgPSBEaXJbV0FTTVRFU1RTX1BBVEggKyAiKi5qcyJdLm1hcCB7IHxmfCBGaWxl
LmJhc2VuYW1lKGYpIH0KICAgICBwcmVwYXJlRXh0cmFBYnNvbHV0ZUZpbGVzKFdBU01URVNUU19Q
QVRILCBbIndhc20uanNvbiJdKQogICAgIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXMobW9kdWxl
cy5tYXAgeyB8ZnwgIi4uLyIgKyBmIH0sICRjb2xsZWN0aW9uKQotICAgIHJ1bigiZGVmYXVsdC13
YXNtIiwgIi1tIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykp
CisgICAgaWYgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zWzBdID09IDpub19tb2R1bGUKKyAg
ICAgIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucy5zaGlmdAorICAgIGVsc2UKKyAgICAgIG9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucy51bnNoaWZ0ICItbSIKKyAgICBlbmQKKyAgICBydW4o
ImRlZmF1bHQtd2FzbSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
bnMpKQogICAgIGlmICRtb2RlICE9ICJxdWljayIKLSAgICAgICAgcnVuKCJ3YXNtLW5vLWNqaXQt
eWVzLXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUi
LCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyIiwgIi1tIiwgKihGVExfT1BUSU9OUyAr
IEVBR0VSX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBy
dW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLW0iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlz
b25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxs
b2NhdGlvbj10cnVlIiwgIi0tdmVyaWZ5R0M9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tbm8tdGxzLWNvbnRleHQi
LCAiLW0iLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAqKEZUTF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLXNsb3ct
bWVtb3J5IiwgIi1tIiwgIi0tdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNlIiwgKihGVExf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigid2Fz
bS1iMyIsICItbSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZh
bHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAg
ICAgIHJ1bigid2FzbS1haXIiLCAiLW0iLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VS
YW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLWNvbGxl
Y3QtY29udGludW91c2x5IiwgIi1tIiwgIi0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIiwgIi0t
dmVyaWZ5R0M9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
bnMpKSBpZiBzaG91bGRDb2xsZWN0Q29udGludW91c2x5PworICAgICAgICBydW4oIndhc20tbm8t
Y2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIs
ICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpKQorICAgICAgICBydW4oIndhc20tZWFnZXIiLCAqKEZUTF9PUFRJT05TICsgRUFHRVJf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2Fz
bS1lYWdlci1qZXR0aXNvbiIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdl
PXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUi
LCAiLS12ZXJpZnlHQz10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1uby10bHMtY29udGV4dCIsICItLXVzZUZhc3RU
TFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAiLS11c2VXZWJB
c3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWIzIiwgIi0tdXNlV2FzbUxMSW50PWZh
bHNlIiwgIi0td2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWFpciIsICItLXVzZVdhc21M
TEludD1mYWxzZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249
dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAg
ICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91
c2x5PXRydWUiLCAiLS12ZXJpZnlHQz10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5k
CiBlbmQKIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxv
ZwppbmRleCBjZDI3ZDNmYWVkYTY5Y2Q5NGUzMWNiZjBhODMxMTc3MzJmOTg4ZWFlLi45NzQ2OTEw
MGYzM2UyMTMwYTI4MjhhMDVjNjNmYjg4Y2ZlYjEzZDZmIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0No
YW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzNiBAQAorMjAyMS0x
MC0wNSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBs
ZW1lbnQgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlvbiBoYW5kbGluZyBwcm9wb3NhbAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5NjgxCisgICAgICAg
IDxyZGFyOi8vODE2MDMzODc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIG5ldyB0ZXN0cyBmb3IgdGhlIGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQg
aW1wb3J0IGEgc2V0IG9mIHRlc3RzIHVzZWQgYnkgVjggaW50byB3YXNtL3Y4LgorCisgICAgICAg
ICogd2FzbS55YW1sOgorICAgICAgICAqIHdhc20vQnVpbGRlci5qczoKKyAgICAgICAgKGNvbnN0
Ll9pbXBvcnRFeGNlcHRpb25Db250aW51YXRpb24udHlwZS5JbXBvcnQuZmllbGQpOgorICAgICAg
ICAoZXhwb3J0LmRlZmF1bHQuQnVpbGRlci5wcm90b3R5cGUuX3JlZ2lzdGVyU2VjdGlvbkJ1aWxk
ZXJzLmNvbnN0LnNlY3Rpb24uaW4uV0FTTS5kZXNjcmlwdGlvbi5zZWN0aW9uLnN3aXRjaC5zZWN0
aW9uLmNhc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUudGhpcy5zZWN0aW9uKToKKyAgICAgICAgKGNv
bnN0Ll9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbi50eXBlLkV4cG9ydC5maWVsZCk6IERlbGV0
ZWQuCisgICAgICAgIChjb25zdC5fZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24pOiBEZWxldGVk
LgorICAgICAgICAqIHdhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qczoKKyAgICAgICAg
KGNvbnN0LmVtaXR0ZXJzLkltcG9ydCk6CisgICAgICAgIChjb25zdC5lbWl0dGVycy5FeHBvcnQp
OgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL2Fz
c2VydC5qczoKKyAgICAgICAgKiB3YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzOgor
ICAgICAgICAoSW1wb3J0QmVmb3JlVHlwZVNlY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
YXNtL3N0cmVzcy9jYXRjaC13aXRoLWRlbGVnYXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9y
dC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9t
LnN0cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKGFzc2VydC50aHJvd3Mp
OgorICAgICAgICAqIHdhc20vc3RyZXNzL2NyZWF0ZS10YWctZnJvbS5qczogQWRkZWQuCisgICAg
ICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLTIuanM6IEFkZGVkLgor
ICAgICAgICAodGVzdCk6CisgICAgICAgIChhc3NlcnQuZXEpOgorICAgICAgICAqIHdhc20vc3Ry
ZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0zLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3Qp
OgorICAgICAgICAoYXNzZXJ0LmVxKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24t
Y3Jvc3MtaW5zdGFuY2UuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgIChhc3Nl
cnQudGhyb3dzKToKKyAgICAgICAgKGluc3RCLm5ldy5XZWJBc3NlbWJseS5JbnN0YW5jZSk6Cisg
ICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWxpdmVuZXNzLXRpZXItdXAuanM6IEFkZGVk
LgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBv
cnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2F0Y2gpOgorICAgICAgICAo
YXNzZXJ0LmVxLik6CisgICAgICAgIChhc3NlcnQuZXEpOgorICAgICAgICAqIHdhc20vc3RyZXNz
L2V4Y2VwdGlvbi1tdWx0aXBsZS1pbnN0YW5jZXMuanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0
LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20u
c3RyaW5nX2FwcGVhcmVkX2hlcmUuY29uc3QubW9kdWxlLm5ldy5XZWJBc3NlbWJseS5Nb2R1bGUp
OgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBv
cnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW5zdC5leHBvcnRzLnRocm93
KToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLWRlbGVnYXRlLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUu
aW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLnRlc3RTaW1wbGVUaHJv
d0RlbGVnYXRlKToKKyAgICAgICAgKHRlc3RUaHJvd0RlbGVnYXRlU2tpcCk6CisgICAgICAgICh0
ZXN0RGVsZWdhdGVDYWxsZXIpOgorICAgICAgICAodGVzdFNpbXBsZURlbGVnYXRlTWVyZ2UpOgor
ICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtdGhyb3ctY2F0Y2guanM6IEFk
ZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5p
bXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUudGVzdFNpbXBsZVRyeUNh
dGNoKToKKyAgICAgICAgKHRlc3RTaW1wbGVUcnlDYXRjaEFsbCk6CisgICAgICAgICh0ZXN0Q2Fs
bFRyeUNhdGNoKToKKyAgICAgICAgKHRlc3RDYWxsVHJ5Q2F0Y2hBbGwpOgorICAgICAgICAodGVz
dFNpbXBsZVRyeUNhdGNoVmFsdWUpOgorICAgICAgICAodGVzdENhbGxUcnlDYXRjaFZhbHVlKToK
KyAgICAgICAgKHRlc3RTdGFja1RyeUNhdGNoKToKKyAgICAgICAgKHRlc3RMaXZlQWZ0ZXJUcnlD
YXRjaCk6CisgICAgICAgICh0ZXN0TGl2ZUFmdGVyVHJ5Q2F0Y2hBbGwpOgorICAgICAgICAodGVz
dFVuaWZ5VHJ5Q2F0Y2hDYXRjaCk6CisgICAgICAgICh0ZXN0VW5pZnlUcnlDYXRjaENhdGNoQWxs
KToKKyAgICAgICAgKHRlc3RVbmlmeVRyeU5vVGhyb3cpOgorICAgICAgICAodGVzdFVuaWZ5VHJ5
Tm9DYXRjaCk6CisgICAgICAgICh0ZXN0TmVzdGVkQ2F0Y2gpOgorICAgICAgICAqIHdhc20vc3Ry
ZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLWNhdGNoYWxsLXJldGhyb3cuanM6
IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVy
ZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2FsbGJhY2spOgor
ICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLWNh
dGNoYWxsLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2Fw
cGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNh
bGxiYWNrKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMt
dG8td2FzbS5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19h
cHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5j
YWxsYmFjayk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdXQtb2Yt
d2FzbS5qczogQWRkZWQuCisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1v
dmVyLXdhc20uanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUu
Y2FsbGJhY2spOgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi10cmFwLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1w
b3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLnRlc3RDYW5ub3RDYXRjaFVu
cmVhY2hhYmxlKToKKyAgICAgICAgKHRlc3RDYW5ub3RDYXRjaE9PQik6CisgICAgICAgICh0ZXN0
V2FzbUFQSVRocm93KToKKyAgICAgICAgKHRlc3RKU0NhdGNoQW5kUmV0aHJvdyk6CisgICAgICAg
ICogd2FzbS9zdHJlc3MvcmV0aHJvdy1mcm9tLWNhdGNoLXRvLWNhdGNoLmpzOiBBZGRlZC4KKyAg
ICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFz
LmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKiB3
YXNtL3N0cmVzcy9yZXRocm93LXRvLWNhdGNoLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5C
dWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0
cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKGFzc2VydC50aHJvd3MuY2Fs
bGJhY2spOgorICAgICAgICAoYXNzZXJ0LnRocm93cyk6CisgICAgICAgICogd2FzbS9zdHJlc3Mv
cmV0aHJvdy10by1kZWxlZ2F0ZS10by1jYXRjaC5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQu
QnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5z
dHJpbmdfYXBwZWFyZWRfaGVyZSk6CisgICAgICAgIChhc3NlcnQuZXEuZXhuLmdldEFyZyk6Cisg
ICAgICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAgICAgKGFzc2VydC50aHJvd3MuY2FsbGJhY2sp
OgorICAgICAgICAoYXNzZXJ0LmVxKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9zaW1wbGUtZXhw
b3J0LWV4Y2VwdGlvbi5qczogQWRkZWQuCisgICAgICAgICogd2FzbS92OC9MSUNFTlNFOiBBZGRl
ZC4KKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMtYXBpLmpzOiBBZGRlZC4KKyAgICAgICAg
KFRlc3RJbXBvcnQpOgorICAgICAgICAoVGVzdEltcG9ydEV4cG9ydCk6CisgICAgICAgIChUZXN0
RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9y
V2l0aFBheWxvYWQpOgorICAgICAgICAoVGVzdENhdGNoSlNFeGNlcHRpb24uanNfZnVuYyk6Cisg
ICAgICAgIChqc19mdW5jKToKKyAgICAgICAgKFRlc3RDYXRjaEpTKToKKyAgICAgICAgKFRlc3RD
YXRjaEpTRXhjZXB0aW9uV2l0aFBheWxvYWQpOgorICAgICAgICAoVGVzdEdldEFyZyk6CisgICAg
ICAgICogd2FzbS92OC9leGNlcHRpb25zLWV4cG9ydC5qczogQWRkZWQuCisgICAgICAgIChUZXN0
RXhwb3J0TXVsdGlwbGUpOgorICAgICAgICAoVGVzdEV4cG9ydE91dE9mQm91bmRzKToKKyAgICAg
ICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMtZXh0ZXJucmVmLmpzOiBBZGRlZC4KKyAgICAgICAgKFRl
c3RUaHJvd1JlZk51bGwpOgorICAgICAgICAoVGVzdFRocm93UmVmUGFyYW0pOgorICAgICAgICAq
IHdhc20vdjgvZXhjZXB0aW9ucy1pbXBvcnQuanM6IEFkZGVkLgorICAgICAgICAoTmV3RXhwb3J0
ZWRUYWcpOgorICAgICAgICAoVGVzdEltcG9ydFNpbXBsZSk6CisgICAgICAgIChUZXN0SW1wb3J0
TWlzc2luZyk6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLXJldGhyb3cuanM6IEFkZGVk
LgorICAgICAgICAoVGVzdFJldGhyb3dJbkNhdGNoKToKKyAgICAgICAgKFRlc3RSZXRocm93SW5D
YXRjaEFsbCk6CisgICAgICAgIChUZXN0UmV0aHJvd05lc3RlZCk6CisgICAgICAgIChUZXN0UmV0
aHJvd1JlY2F0Y2gpOgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy1zaGFyZWQuanM6IEFk
ZGVkLgorICAgICAgICAoTmV3RXhwb3J0ZWRFeGNlcHRpb24pOgorICAgICAgICAoVGVzdFNpbmds
ZUluc3RhbmNlLmxldC5pbnN0YW5jZS5idWlsZGVyLmluc3RhbnRpYXRlLik6CisgICAgICAgIChU
ZXN0U2luZ2xlSW5zdGFuY2UpOgorICAgICAgICAoVGVzdE11bHRpSW5zdGFuY2VOb25TaGFyZWQu
bGV0Lmluc3RhbmNlMi5idWlsZGVyLmluc3RhbnRpYXRlLik6CisgICAgICAgIChUZXN0TXVsdGlJ
bnN0YW5jZVNoYXJlZC5sZXQuaW5zdGFuY2UyLmJ1aWxkZXIuaW5zdGFudGlhdGUuKToKKyAgICAg
ICAgKFRlc3RNdWx0aU1vZHVsZVNoYXJlZC5sZXQuaW5zdGFuY2UyLmJ1aWxkZXIyLmluc3RhbnRp
YXRlLik6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLXR5cGUtcmVmbGVjdGlvbi5qczog
QWRkZWQuCisgICAgICAgIChUZXN0RXhwb3J0KToKKyAgICAgICAgKFRlc3RJbXBvcnRFeHBvcnQp
OgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy11dGlscy5qczogQWRkZWQuCisgICAgICAg
IChhc3NlcnRXYXNtVGhyb3dzKToKKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMuanM6IEFk
ZGVkLgorICAgICAgICAoVGVzdFRocm93U2ltcGxlKToKKyAgICAgICAgKFRlc3RDYXRjaFNpbXBs
ZSk6CisgICAgICAgIChUZXN0VHJhcE5vdENhdWdodCk6CisgICAgICAgIChUZXN0VHJhcFZpYUpT
Tm90Q2F1Z2h0LmpzX2ltcG9ydCk6CisgICAgICAgIChUZXN0TWFudWFsbHlUaHJvd25SdW50aW1l
RXJyb3JDYXVnaHQudGhyb3dfZXhjKToKKyAgICAgICAgKFRlc3RNYW51YWxseVRocm93blJ1bnRp
bWVFcnJvckNhdWdodCk6CisgICAgICAgIChUZXN0RXhuV2l0aFdhc21Qcm90b05vdENhdWdodC5q
c19pbXBvcnQpOgorICAgICAgICAoVGVzdEV4bldpdGhXYXNtUHJvdG9Ob3RDYXVnaHQpOgorICAg
ICAgICAoVGVzdFN0YWNrT3ZlcmZsb3dOb3RDYXVnaHQuc3RhY2tfb3ZlcmZsb3cpOgorICAgICAg
ICAoVGVzdFN0YWNrT3ZlcmZsb3dOb3RDYXVnaHQpOgorICAgICAgICAoVGVzdFRocm93UGFyYW1J
KToKKyAgICAgICAgKFRlc3RUaHJvd1BhcmFtRik6CisgICAgICAgIChUZXN0VGhyb3dQYXJhbUwp
OgorICAgICAgICAoVGVzdFRocm93UGFyYW1EKToKKyAgICAgICAgKFRlc3RDYXRjaENyb3NzRnVu
Y3Rpb25zLnRocm93X3ZhbHVlKToKKyAgICAgICAgKFRlc3RDYXRjaENyb3NzRnVuY3Rpb25zLnRo
cm93X3N0cmluZyk6CisgICAgICAgIChUZXN0Q2F0Y2hDcm9zc0Z1bmN0aW9ucy50aHJvd191bmRl
ZmluZWQpOgorICAgICAgICAoVGVzdENhdGNoQ3Jvc3NGdW5jdGlvbnMudGhyb3dfZnApOgorICAg
ICAgICAoVGVzdENhdGNoQ3Jvc3NGdW5jdGlvbnMudGhyb3dfbGFyZ2UpOgorICAgICAgICAoVGVz
dERlbGVnYXRlTm9UaHJvdyk6CisgICAgICAgIChUZXN0RGVsZWdhdGVUaHJvdyk6CisgICAgICAg
IChUZXN0RGVsZWdhdGVUaHJvd05vQ2F0Y2gpOgorICAgICAgICAoVGVzdERlbGVnYXRlTWVyZ2Up
OgorICAgICAgICAoVGVzdERlbGVnYXRlMSk6CisgICAgICAgIChUZXN0RGVsZWdhdGVVbnJlYWNo
YWJsZSk6CisgICAgICAgIChUZXN0RGVsZWdhdGVUb0NhbGxlcik6CisgICAgICAgIChUZXN0VW5y
ZWFjaGFibGVJbkNhdGNoQWxsKToKKyAgICAgICAgKFRlc3RUaHJvd1dpdGhMb2NhbCk6CisgICAg
ICAgIChUZXN0Q2F0Y2hsZXNzVHJ5KToKKyAgICAgICAgKiB3YXNtL3Y4L21qc3VuaXQuanM6IEFk
ZGVkLgorICAgICAgICAoTWpzVW5pdEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgKE1qc1VuaXRB
c3NlcnRpb25FcnJvci5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoY2F0Y2gpOgorICAg
ICAgICAoY2xhc3NPZik6CisgICAgICAgIChWYWx1ZU9mKToKKyAgICAgICAgKHByZXR0eVByaW50
ZWQpOgorICAgICAgICAocHJldHR5UHJpbnRlZEFycmF5RWxlbWVudCk6CisgICAgICAgIChmYWls
V2l0aE1lc3NhZ2UpOgorICAgICAgICAoZm9ybWF0RmFpbHVyZVRleHQpOgorICAgICAgICAoZmFp
bCk6CisgICAgICAgIChkZWVwT2JqZWN0RXF1YWxzKToKKyAgICAgICAgKGRlZXBFcXVhbHMpOgor
ICAgICAgICAoYXNzZXJ0U2FtZSk6CisgICAgICAgIChhc3NlcnROb3RTYW1lKToKKyAgICAgICAg
KGFzc2VydEVxdWFscyk6CisgICAgICAgIChhc3NlcnROb3RFcXVhbHMpOgorICAgICAgICAoYXNz
ZXJ0RXF1YWxzRGVsdGEpOgorICAgICAgICAoYXNzZXJ0QXJyYXlFcXVhbHMpOgorICAgICAgICAo
YXNzZXJ0UHJvcGVydGllc0VxdWFsKToKKyAgICAgICAgKGFzc2VydFRvU3RyaW5nRXF1YWxzKToK
KyAgICAgICAgKGFzc2VydFRydWUpOgorICAgICAgICAoYXNzZXJ0RmFsc2UpOgorICAgICAgICAo
YXNzZXJ0TnVsbCk6CisgICAgICAgIChhc3NlcnROb3ROdWxsKToKKyAgICAgICAgKGV4ZWN1dGVD
b2RlKToKKyAgICAgICAgKGNoZWNrRXhjZXB0aW9uKToKKyAgICAgICAgKGFzc2VydFRocm93cyk6
CisgICAgICAgIChhc3NlcnRUaHJvd3NFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0VGhyb3dzQXN5
bmMpOgorICAgICAgICAoYXNzZXJ0SW5zdGFuY2VvZik6CisgICAgICAgIChhc3NlcnREb2VzTm90
VGhyb3cpOgorICAgICAgICAoYXNzZXJ0VW5yZWFjaGFibGUpOgorICAgICAgICAoYXNzZXJ0Q29u
dGFpbnMpOgorICAgICAgICAoYXNzZXJ0TWF0Y2hlcyk6CisgICAgICAgIChjb25jYXRlbmF0ZUVy
cm9ycyk6CisgICAgICAgIChhc3NlcnRQcm9taXNlUmVzdWx0KToKKyAgICAgICAgKE9wdGltaXph
dGlvblN0YXR1cyk6CisgICAgICAgIChhc3NlcnRVbm9wdGltaXplZCk6CisgICAgICAgIChhc3Nl
cnRPcHRpbWl6ZWQpOgorICAgICAgICAoaXNOZXZlck9wdGltaXplTGl0ZU1vZGUpOgorICAgICAg
ICAoaXNOZXZlck9wdGltaXplKToKKyAgICAgICAgKGlzQWx3YXlzT3B0aW1pemUpOgorICAgICAg
ICAoaXNJbnRlcnByZXRlZCk6CisgICAgICAgIChpc0Jhc2VsaW5lKToKKyAgICAgICAgKGlzVW5v
cHRpbWl6ZWQpOgorICAgICAgICAoaXNPcHRpbWl6ZWQpOgorICAgICAgICAoaXNUdXJib0Zhbm5l
ZCk6CisgICAgICAgIChNanNVbml0QXNzZXJ0aW9uRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpOgor
ICAgICAgICAqIHdhc20vdjgvd2FzbS1tb2R1bGUtYnVpbGRlci5qczogQWRkZWQuCisgICAgICAg
IChieXRlcyk6CisgICAgICAgICh3YXNtT3B0UmVmVHlwZSk6CisgICAgICAgICh3YXNtUmVmVHlw
ZSk6CisgICAgICAgICh3YXNtUnR0KToKKyAgICAgICAgKHdhc21SdHROb0RlcHRoKToKKyAgICAg
ICAgKG1ha2VTaWcpOgorICAgICAgICAobWFrZVNpZ192X3gpOgorICAgICAgICAobWFrZVNpZ194
X3YpOgorICAgICAgICAobWFrZVNpZ192X3h4KToKKyAgICAgICAgKG1ha2VTaWdfcl92KToKKyAg
ICAgICAgKG1ha2VTaWdfcl94KToKKyAgICAgICAgKG1ha2VTaWdfcl94eCk6CisgICAgICAgIChk
ZWZpbmVXYXNtT3Bjb2RlKToKKyAgICAgICAgKGFzc2VydFRyYXBzKToKKyAgICAgICAgKEJpbmFy
eSk6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVuc3VyZV9zcGFjZSk6CisgICAgICAgIChC
aW5hcnkucHJvdG90eXBlLnRydW5jX2J1ZmZlcik6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBl
LnJlc2V0KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF91OCk6CisgICAgICAgIChC
aW5hcnkucHJvdG90eXBlLmVtaXRfdTE2KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1p
dF91MzIpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2xlYl91KToKKyAgICAgICAg
KEJpbmFyeS5wcm90b3R5cGUuZW1pdF91MzJ2KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUu
ZW1pdF91NjR2KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF9ieXRlcyk6CisgICAg
ICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfc3RyaW5nKToKKyAgICAgICAgKEJpbmFyeS5wcm90
b3R5cGUuZW1pdF9oZWFwX3R5cGUpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X3R5
cGUpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUp
OgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2luaXRfZXhwcik6CisgICAgICAgIChC
aW5hcnkucHJvdG90eXBlLmVtaXRfaGVhZGVyKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUu
ZW1pdF9zZWN0aW9uKToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIpOgorICAgICAgICAo
V2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUubnVtTG9jYWxOYW1lcyk6CisgICAgICAgIChX
YXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5leHBvcnRBcyk6CisgICAgICAgIChXYXNtRnVu
Y3Rpb25CdWlsZGVyLnByb3RvdHlwZS5leHBvcnRGdW5jKToKKyAgICAgICAgKFdhc21GdW5jdGlv
bkJ1aWxkZXIucHJvdG90eXBlLnNldENvbXBpbGF0aW9uSGludCk6CisgICAgICAgIChXYXNtRnVu
Y3Rpb25CdWlsZGVyLnByb3RvdHlwZS5hZGRCb2R5KToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1
aWxkZXIucHJvdG90eXBlLmFkZEJvZHlXaXRoRW5kKToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1
aWxkZXIucHJvdG90eXBlLmdldE51bUxvY2Fscyk6CisgICAgICAgIChXYXNtRnVuY3Rpb25CdWls
ZGVyLnByb3RvdHlwZS5hZGRMb2NhbHMpOgorICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5w
cm90b3R5cGUuZW5kKToKKyAgICAgICAgKFdhc21Jbml0RXhwci5JMzJDb25zdCk6CisgICAgICAg
IChXYXNtSW5pdEV4cHIuSTY0Q29uc3QpOgorICAgICAgICAoV2FzbUluaXRFeHByLkYzMkNvbnN0
KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5GNjRDb25zdCk6CisgICAgICAgIChXYXNtSW5pdEV4
cHIuUzEyOENvbnN0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5HbG9iYWxHZXQpOgorICAgICAg
ICAoV2FzbUluaXRFeHByLlJlZkZ1bmMpOgorICAgICAgICAoV2FzbUluaXRFeHByLlJlZk51bGwp
OgorICAgICAgICAoV2FzbUluaXRFeHByLlN0cnVjdE5ld1dpdGhSdHQpOgorICAgICAgICAoV2Fz
bUluaXRFeHByLlN0cnVjdE5ldyk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuU3RydWN0TmV3RGVm
YXVsdFdpdGhSdHQpOgorICAgICAgICAoV2FzbUluaXRFeHByLlN0cnVjdE5ld0RlZmF1bHQpOgor
ICAgICAgICAoV2FzbUluaXRFeHByLkFycmF5SW5pdCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIu
QXJyYXlJbml0U3RhdGljKToKKyAgICAgICAgKFdhc21Jbml0RXhwci5SdHRDYW5vbik6CisgICAg
ICAgIChXYXNtSW5pdEV4cHIuUnR0U3ViKToKKyAgICAgICAgKFdhc21Jbml0RXhwci5SdHRGcmVz
aFN1Yik6CisgICAgICAgIChXYXNtSW5pdEV4cHIuZGVmYXVsdEZvcik6CisgICAgICAgIChXYXNt
SW5pdEV4cHIpOgorICAgICAgICAoV2FzbUdsb2JhbEJ1aWxkZXIpOgorICAgICAgICAoV2FzbUds
b2JhbEJ1aWxkZXIucHJvdG90eXBlLmV4cG9ydEFzKToKKyAgICAgICAgKFdhc21UYWJsZUJ1aWxk
ZXIpOgorICAgICAgICAoV2FzbVRhYmxlQnVpbGRlci5wcm90b3R5cGUuZXhwb3J0QXMpOgorICAg
ICAgICAobWFrZUZpZWxkKToKKyAgICAgICAgKFdhc21TdHJ1Y3QpOgorICAgICAgICAoV2FzbVN0
cnVjdFN1YnR5cGUpOgorICAgICAgICAoV2FzbUFycmF5KToKKyAgICAgICAgKFdhc21BcnJheVN1
YnR5cGUpOgorICAgICAgICAoV2FzbUVsZW1TZWdtZW50KToKKyAgICAgICAgKFdhc21FbGVtU2Vn
bWVudC5wcm90b3R5cGUuaXNfYWN0aXZlKToKKyAgICAgICAgKFdhc21FbGVtU2VnbWVudC5wcm90
b3R5cGUuaXNfcGFzc2l2ZSk6CisgICAgICAgIChXYXNtRWxlbVNlZ21lbnQucHJvdG90eXBlLmlz
X2RlY2xhcmF0aXZlKToKKyAgICAgICAgKFdhc21FbGVtU2VnbWVudC5wcm90b3R5cGUuZXhwcmVz
c2lvbnNfYXNfZWxlbWVudHMpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIpOgorICAgICAg
ICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZFN0YXJ0KToKKyAgICAgICAgKFdhc21N
b2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRNZW1vcnkpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1
aWxkZXIucHJvdG90eXBlLmFkZE1lbW9yeTY0KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVy
LnByb3RvdHlwZS5hZGRFeHBsaWNpdFNlY3Rpb24pOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxk
ZXIucHJvdG90eXBlLnN0cmluZ1RvQnl0ZXMpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIu
cHJvdG90eXBlLmNyZWF0ZUN1c3RvbVNlY3Rpb24pOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxk
ZXIucHJvdG90eXBlLmFkZEN1c3RvbVNlY3Rpb24pOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxk
ZXIucHJvdG90eXBlLmFkZFR5cGUpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90
eXBlLmFkZFN0cnVjdCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRk
U3RydWN0U3VidHlwZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRk
QXJyYXkpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEFycmF5U3Vi
dHlwZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkR2xvYmFsKToK
KyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRUYWJsZSk6CisgICAgICAg
IChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkVGFnKToKKyAgICAgICAgKFdhc21Nb2R1
bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRGdW5jdGlvbik6CisgICAgICAgIChXYXNtTW9kdWxlQnVp
bGRlci5wcm90b3R5cGUuYWRkSW1wb3J0KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnBy
b3RvdHlwZS5hZGRJbXBvcnRlZEdsb2JhbCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5w
cm90b3R5cGUuYWRkSW1wb3J0ZWRNZW1vcnkpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIu
cHJvdG90eXBlLmFkZEltcG9ydGVkVGFibGUpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIu
cHJvdG90eXBlLmFkZEltcG9ydGVkVGFnKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnBy
b3RvdHlwZS5hZGRFeHBvcnQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBl
LmFkZEV4cG9ydE9mS2luZCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUu
c2V0Q29tcGlsYXRpb25IaW50KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlw
ZS5hZGREYXRhU2VnbWVudCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUu
YWRkUGFzc2l2ZURhdGFTZWdtZW50KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3Rv
dHlwZS5leHBvcnRNZW1vcnlBcyk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5
cGUuYWRkQWN0aXZlRWxlbWVudFNlZ21lbnQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIu
cHJvdG90eXBlLmFkZFBhc3NpdmVFbGVtZW50U2VnbWVudCk6CisgICAgICAgIChXYXNtTW9kdWxl
QnVpbGRlci5wcm90b3R5cGUuYWRkRGVjbGFyYXRpdmVFbGVtZW50U2VnbWVudCk6CisgICAgICAg
IChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYXBwZW5kVG9UYWJsZSk6CisgICAgICAgIChX
YXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuc2V0VGFibGVCb3VuZHMpOgorICAgICAgICAoV2Fz
bU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLnNldE5hbWUpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1
aWxkZXIucHJvdG90eXBlLnRvQnVmZmVyKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnBy
b3RvdHlwZS50b0FycmF5KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5p
bnN0YW50aWF0ZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYXN5bmNJ
bnN0YW50aWF0ZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUudG9Nb2R1
bGUpOgorICAgICAgICAod2FzbVNpZ25lZExlYik6CisgICAgICAgICh3YXNtVW5zaWduZWRMZWIp
OgorICAgICAgICAod2FzbUkzMkNvbnN0KToKKyAgICAgICAgKHdhc21JNjRDb25zdCk6CisgICAg
ICAgICh3YXNtRjMyQ29uc3QpOgorICAgICAgICAod2FzbUY2NENvbnN0KToKKyAgICAgICAgKHdh
c21TMTI4Q29uc3QpOgorICAgICAgICAoZ2V0T3Bjb2RlTmFtZSk6CisgICAgICAgICogd2FzbS93
YXNtLmpzb246CisKIDIwMjEtMTAtMDUgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+
CiAKICAgICAgICAgRG9uJ3QgcGFzcyBEb250QnVpbGRTdHJpbmdzIHRvIG5leHQgdG9rZW4gYWZ0
ZXIgcGFyc2luZyBhbiBlbXB0eSBwYXJhbWV0ZXIgbGlzdApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93
YXNtLnlhbWwgYi9KU1Rlc3RzL3dhc20ueWFtbAppbmRleCAyZWNiNjM0ZGJmNWIyYmVlNzJjZGQx
M2M0MDE3OWJmMmY1ZTk0YmMxLi4xZjQ1MWJjOTExOGNjYWMzMzk4OTcwZWE0OWIyNTg5Y2FmMzNj
YzI3IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20ueWFtbAorKysgYi9KU1Rlc3RzL3dhc20ueWFt
bApAQCAtNDUsNiArNDUsOCBAQAogICBjbWQ6IHJ1bldlYkFzc2VtYmx5IHVubGVzcyBwYXJzZVJ1
bkNvbW1hbmRzCiAtIHBhdGg6IHdhc20vc2VsZi10ZXN0LwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5
U3VpdGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKKy0gcGF0aDogd2FzbS92OC8KKyAgY21kOiBy
dW5XZWJBc3NlbWJseVN1aXRlKDpub19tb2R1bGUsICJtanN1bml0LmpzIikgdW5sZXNzIHBhcnNl
UnVuQ29tbWFuZHMKIAogLSBwYXRoOiB3YXNtL3JlZmVyZW5jZXMtc3BlYy10ZXN0cy9lbGVtLndh
c3QuanMKICAgY21kOiBydW5XZWJBc3NlbWJseVJlZmVyZW5jZVNwZWNUZXN0IDpub3JtYWwKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIu
anMKaW5kZXggMzJmZmU2YmJiNTYxYTUzMzM4NTdlZDIzMWIwNDdhN2YyYWZiZjExNS4uMTEwMWY3
MjVjY2RkYjBjYzFlODlhMDVjN2FkZDdiYjQ5ZDJmNTk3YyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93
YXNtL0J1aWxkZXIuanMKKysrIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKQEAgLTEyOCw2ICsx
MjgsMTggQEAgY29uc3QgX2ltcG9ydFRhYmxlQ29udGludWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rp
b24sIG5leHRCdWlsZGVyKSA9PiB7CiAgICAgfTsKIH07CiAKK2NvbnN0IF9pbXBvcnRFeGNlcHRp
b25Db250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKKyAg
ICByZXR1cm4gKG1vZHVsZSwgZmllbGQsIHR5cGUpID0+IHsKKyAgICAgICAgYXNzZXJ0LmlzU3Ry
aW5nKG1vZHVsZSwgYEltcG9ydCBmdW5jdGlvbiBtb2R1bGUgc2hvdWxkIGJlIGEgc3RyaW5nLCBn
b3QgIiR7bW9kdWxlfSJgKTsKKyAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKGZpZWxkLCBgSW1wb3J0
IGZ1bmN0aW9uIGZpZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKKyAg
ICAgICAgY29uc3QgdHlwZVNlY3Rpb24gPSBidWlsZGVyLl9nZXRTZWN0aW9uKCJUeXBlIik7Cisg
ICAgICAgIHR5cGUgPSBfbWF5YmVSZWdpc3RlclR5cGUoYnVpbGRlciwgdHlwZSk7CisgICAgICAg
IGNvbnN0IHRhZyA9IDA7CisgICAgICAgIHNlY3Rpb24uZGF0YS5wdXNoKHsgZmllbGQsIHR5cGUs
IHRhZywga2luZDogIkV4Y2VwdGlvbiIsIG1vZHVsZSB9KTsKKyAgICAgICAgcmV0dXJuIF9lcnJv
ckhhbmRsaW5nUHJveHlGb3IobmV4dEJ1aWxkZXIpOworICAgIH0KK307CisKIGNvbnN0IF9leHBv
cnRGdW5jdGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikg
PT4gewogICAgIHJldHVybiAoZmllbGQsIGluZGV4LCB0eXBlKSA9PiB7CiAgICAgICAgIGFzc2Vy
dC5pc1N0cmluZyhmaWVsZCwgYEV4cG9ydCBmdW5jdGlvbiBmaWVsZCBzaG91bGQgYmUgYSBzdHJp
bmcsIGdvdCAiJHtmaWVsZH0iYCk7CkBAIC0yMTUsNiArMjI3LDE0IEBAIGNvbnN0IF9leHBvcnRU
YWJsZUNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewog
ICAgIH0KIH07CiAKK2NvbnN0IF9leHBvcnRFeGNlcHRpb25Db250aW51YXRpb24gPSAoYnVpbGRl
ciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKKyAgICByZXR1cm4gKGZpZWxkLCBpbmRleCkg
PT4geworICAgICAgICBhc3NlcnQuaXNOdW1iZXIoaW5kZXgsIGBFeGNlcHRpb24gZXhwb3J0cyBv
bmx5IHN1cHBvcnQgbnVtYmVyIGluZGljZXNgKTsKKyAgICAgICAgc2VjdGlvbi5kYXRhLnB1c2go
e2ZpZWxkLCBraW5kOiAiRXhjZXB0aW9uIiwgaW5kZXh9KTsKKyAgICAgICAgcmV0dXJuIF9lcnJv
ckhhbmRsaW5nUHJveHlGb3IobmV4dEJ1aWxkZXIpOworICAgIH0KK307CisKIGNvbnN0IF9pbXBv
cnRHbG9iYWxDb250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+
IHsKICAgICByZXR1cm4gKCkgPT4gewogICAgICAgICBjb25zdCBnbG9iYWxCdWlsZGVyID0gewpA
QCAtMzA3LDYgKzMyNyw3IEBAIGNvbnN0IF9jaGVja0ltbXMgPSAob3AsIGltbXMsIGV4cGVjdGVk
SW1tcywgcmV0KSA9PiB7CiAgICAgICAgIGNhc2UgInRhcmdldF90YWJsZSI6IGJyZWFrOyAvLyBp
bXByb3ZlIGNoZWNraW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjM0MjEKICAgICAgICAgY2FzZSAicmVzZXJ2ZWQiOiBicmVhazsgLy8gaW1wcm92ZSBjaGVja2lu
ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNDIxCiAgICAgICAg
IGNhc2UgInRhYmxlX2luZGV4IjogYnJlYWs7IC8vIGltcHJvdmUgY2hlY2tpbmcgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzQyMQorICAgICAgICBjYXNlICJleG4i
OiBicmVhazsKICAgICAgICAgY2FzZSAicmVmdHlwZSI6CiAgICAgICAgICAgICBhc3NlcnQudHJ1
dGh5KFdBU00uaXNWYWxpZFJlZlR5cGUoaW1tc1tpZHhdKSwgYEludmFsaWQgcmVmIHR5cGUgb24g
JHtvcH06ICIke2ltbXNbaWR4XX0iYCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTMzNSwxMSAr
MzU2LDEzIEBAIGNvbnN0IF9jcmVhdGVGdW5jdGlvbkJ1aWxkZXIgPSAoZnVuYywgYnVpbGRlciwg
cHJldmlvdXNCdWlsZGVyKSA9PiB7CiAgICAgICAgICAgICAgICAgbmV4dEJ1aWxkZXIgPSBmdW5j
dGlvbkJ1aWxkZXI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICJF
bmQiOgorICAgICAgICAgICAgY2FzZSAiRGVsZWdhdGUiOgogICAgICAgICAgICAgICAgIG5leHRC
dWlsZGVyID0gcHJldmlvdXNCdWlsZGVyOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSAiQmxvY2siOgogICAgICAgICAgICAgY2FzZSAiTG9vcCI6CiAgICAgICAgICAg
ICBjYXNlICJJZiI6CisgICAgICAgICAgICBjYXNlICJUcnkiOgogICAgICAgICAgICAgICAgIG5l
eHRCdWlsZGVyID0gX2NyZWF0ZUZ1bmN0aW9uQnVpbGRlcihmdW5jLCBidWlsZGVyLCBmdW5jdGlv
bkJ1aWxkZXIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNDg4
LDYgKzUxMSw3IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAg
ICAgICAgICBpbXBvcnRCdWlsZGVyLkZ1bmN0aW9uID0gX2ltcG9ydEZ1bmN0aW9uQ29udGludWF0
aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICBpbXBvcnRC
dWlsZGVyLk1lbW9yeSA9IF9pbXBvcnRNZW1vcnlDb250aW51YXRpb24odGhpcywgcywgaW1wb3J0
QnVpbGRlcik7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuVGFibGUgPSBfaW1w
b3J0VGFibGVDb250aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVpbGRlcik7CisgICAgICAgICAg
ICAgICAgICAgIGltcG9ydEJ1aWxkZXIuRXhjZXB0aW9uID0gX2ltcG9ydEV4Y2VwdGlvbkNvbnRp
bnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IoaW1wb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAg
ICAgfTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTUzMSw2ICs1NTUsMjMgQEAgZXhwb3J0
IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAg
ICAgICBicmVhazsKIAorICAgICAgICAgICAgY2FzZSAiRXhjZXB0aW9uIjogeworICAgICAgICAg
ICAgICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7CisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGRhdGFCdWlsZGVyID0geworICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9
PiB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOiAoc2lnbmF0dXJlKSA9
PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR5cGUgPSBfbWF5YmVSZWdpc3Rl
clR5cGUodGhpcywgc2lnbmF0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmRh
dGEucHVzaCh7IHRhZzogMCwgdHlwZSB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihkYXRhQnVpbGRlcik7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYWRkIHRhZ3Mg
d2l0aCBub24temVybyB2YWx1ZSB0aGVuIHdlIGNhbiBhZGQgYSBuZXcgbWVtYmVyLgorICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxp
bmdQcm94eUZvcihkYXRhQnVpbGRlcik7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY2FzZSAiR2xvYmFsIjoK
ICAgICAgICAgICAgICAgICB0aGlzW3NlY3Rpb25dID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLl9hZGRTZWN0aW9uKHNlY3Rpb24pOwpAQCAtNTY5LDYg
KzYxMCw3IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAg
ICAgICBleHBvcnRCdWlsZGVyLkZ1bmN0aW9uID0gX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9u
KHRoaXMsIHMsIGV4cG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICBleHBvcnRCdWls
ZGVyLk1lbW9yeSA9IF9leHBvcnRNZW1vcnlDb250aW51YXRpb24odGhpcywgcywgZXhwb3J0QnVp
bGRlcik7CiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuVGFibGUgPSBfZXhwb3J0
VGFibGVDb250aW51YXRpb24odGhpcywgcywgZXhwb3J0QnVpbGRlcik7CisgICAgICAgICAgICAg
ICAgICAgIGV4cG9ydEJ1aWxkZXIuRXhjZXB0aW9uID0gX2V4cG9ydEV4Y2VwdGlvbkNvbnRpbnVh
dGlvbih0aGlzLCBzLCBleHBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IF9lcnJvckhhbmRsaW5nUHJveHlGb3IoZXhwb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAgICAg
fTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTczNywxNSArNzc5LDYgQEAgZXhwb3J0IGRl
ZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5f
c2VjdGlvbnMpCiAgICAgICAgICAgICAgICAgaWYgKG51bWJlciAhPT0gX3Vua25vd25TZWN0aW9u
SWQpCiAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5mYWxzeShzLm5hbWUgPT09IG5hbWUgJiYg
cy5pZCA9PT0gbnVtYmVyLCBgQ2Fubm90IGhhdmUgdHdvIHNlY3Rpb25zIHdpdGggdGhlIHNhbWUg
bmFtZSAiJHtuYW1lfSIgYW5kIElEICR7bnVtYmVyfWApOwotICAgICAgICAgICAgLy8gQ2hlY2sg
b3JkZXJpbmcuCi0gICAgICAgICAgICBpZiAoKG51bWJlciAhPT0gX3Vua25vd25TZWN0aW9uSWQp
ICYmICh0aGlzLl9zZWN0aW9ucy5sZW5ndGggIT09IDApKSB7Ci0gICAgICAgICAgICAgICAgZm9y
IChsZXQgaSA9IHRoaXMuX3NlY3Rpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZWN0aW9uc1tpXS5pZCA9PT0gX3Vua25vd25TZWN0
aW9uSWQpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgYXNzZXJ0LmxlKHRoaXMuX3NlY3Rpb25zW2ldLmlkLCBudW1iZXIsIGBCYWQgc2VjdGlv
biBvcmRlcmluZzogIiR7dGhpcy5fc2VjdGlvbnNbaV0ubmFtZX0iIGNhbm5vdCBwcmVjZWRlICIk
e25hbWV9ImApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgY29uc3QgcyA9IE9iamVjdC5hc3Np
Z24oeyBuYW1lOiBuYW1lLCBpZDogbnVtYmVyLCBkYXRhOiBbXSB9LCBleHRyYU9iamVjdCB8fCB7
fSk7CiAgICAgICAgIHRoaXMuX3NlY3Rpb25zLnB1c2gocyk7CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVy
X1dlYkFzc2VtYmx5QmluYXJ5LmpzCmluZGV4IDM1OGJiNDgyZDRlMDczMjZhMjBlNTg5MzRlNTUy
OTJiYjU1MTYzNzAuLmU5YzU3NjI2MGY1ZDJlNWI2N2ZhZThhM2RiNTBlNmM3NDE2ODg4MTcgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCisrKyBi
L0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCkBAIC0xNDMsNiArMTQz
LDEwIEBAIGNvbnN0IGVtaXR0ZXJzID0gewogICAgICAgICAgICAgY2FzZSAiR2xvYmFsIjoKICAg
ICAgICAgICAgICAgICBwdXRHbG9iYWxUeXBlKGJpbiwgZW50cnkuZ2xvYmFsRGVzY3JpcHRpb24p
OwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiRXhjZXB0aW9uIjoK
KyAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZW50cnkudGFnKTsKKyAgICAg
ICAgICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZW50cnkudHlwZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9LApAQCAtMTg1LDYg
KzE4OSw3IEBAIGNvbnN0IGVtaXR0ZXJzID0gewogICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb24i
OgogICAgICAgICAgICAgY2FzZSAiTWVtb3J5IjoKICAgICAgICAgICAgIGNhc2UgIlRhYmxlIjoK
KyAgICAgICAgICAgIGNhc2UgIkV4Y2VwdGlvbiI6CiAgICAgICAgICAgICAgICAgcHV0KGJpbiwg
InZhcnVpbnQzMiIsIGVudHJ5LmluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJvYmxlbTog
dW5leHBlY3RlZCBraW5kICR7ZW50cnkua2luZH1gKTsKQEAgLTI1NCw2ICsyNTksMTQgQEAgY29u
c3QgZW1pdHRlcnMgPSB7CiAgICAgICAgICAgICAgICAgcHV0KGJpbiwgInVpbnQ4IiwgYnl0ZSk7
CiAgICAgICAgIH0KICAgICB9LAorCisgICAgRXhjZXB0aW9uOiAoc2VjdGlvbiwgYmluKSA9PiB7
CisgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBzZWN0aW9uLmRhdGEubGVuZ3RoKTsKKyAg
ICAgICAgZm9yIChjb25zdCBleG4gb2Ygc2VjdGlvbi5kYXRhKSB7CisgICAgICAgICAgICBwdXQo
YmluLCAidmFydWludDMyIiwgZXhuLnRhZyk7CisgICAgICAgICAgICBwdXQoYmluLCAidmFydWlu
dDMyIiwgZXhuLnR5cGUpOworICAgICAgICB9CisgICAgfSwKIH07CiAKIGV4cG9ydCBjb25zdCBC
aW5hcnkgPSAocHJlYW1ibGUsIHNlY3Rpb25zKSA9PiB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dh
c20vYXNzZXJ0LmpzIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwppbmRleCA2ZmRiNjVhNGRhZGRj
MGQ3N2E3MjRjMDE5MmQ4ZmI1M2JmMTBiZjY4Li45NDgzOGQ5N2VmNTUwZjYxZmQyMzg2YzNmMmFi
ZDhlZjkyMzZlNDAyIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCisrKyBiL0pT
VGVzdHMvd2FzbS9hc3NlcnQuanMKQEAgLTEyNCw3ICsxMjQsNyBAQCBjb25zdCBfdGhyb3dzID0g
KGZ1bmMsIHR5cGUsIG1lc3NhZ2UsIC4uLmFyZ3MpID0+IHsKICAgICB0cnkgewogICAgICAgICBm
dW5jKC4uLmFyZ3MpOwogICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgaWYgKGUgaW5zdGFuY2Vv
ZiB0eXBlICYmIGUubWVzc2FnZS5pbmRleE9mKG1lc3NhZ2UpID49IDApCisgICAgICAgIGlmIChl
IGluc3RhbmNlb2YgdHlwZSAmJiAodHlwZW9mKGUubWVzc2FnZSkgPT0gInVuZGVmaW5lZCIgfHwg
ZS5tZXNzYWdlLmluZGV4T2YobWVzc2FnZSkgPj0gMCkpCiAgICAgICAgICAgICByZXR1cm4gZTsK
ICAgICAgICAgX2ZhaWwoYEV4cGVjdGVkIHRvIHRocm93IGEgJHt0eXBlLm5hbWV9IHdpdGggbWVz
c2FnZSAiJHttZXNzYWdlfSIsIGdvdCAke2UubmFtZX0gd2l0aCBtZXNzYWdlICIke2UubWVzc2Fn
ZX0iYCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1
aWxkZXJKU09OLmpzIGIvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpz
CmluZGV4IGJiMWI5N2IxOWQ1Y2MxYzc4YjVmMDA3ZGM2OTBhYWRiZDcwZDIwZjguLjIwOWYyMGI3
NmJiYThiNzBjNTE3MjFlZTQ1NjgzZDFmNzYwMzJhNmYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2Fz
bS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcworKysgYi9KU1Rlc3RzL3dhc20vc2VsZi10
ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMKQEAgLTE0MCwxMSArMTQwLDYgQEAgY29uc3QgYXNzZXJ0
T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MF0uZGF0YS5sZW5ndGgsIDApOwogfSkoKTsKIAotKGZ1bmN0aW9uIEltcG9ydEJlZm9yZVR5cGVT
ZWN0aW9ucygpIHsKLSAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkltcG9ydCgpLkVuZCgp
OwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYi5UeXBlKCksIEVycm9yLCBgRXhwZWN0ZWQ6ICIy
IiA+ICIxIjogQmFkIHNlY3Rpb24gb3JkZXJpbmc6ICJJbXBvcnQiIGNhbm5vdCBwcmVjZWRlICJU
eXBlImApOwotfSkoKTsKLQogKGZ1bmN0aW9uIEltcG9ydEZ1bmN0aW9uV2l0aG91dFR5cGVTZWN0
aW9uKCkgewogICAgIGNvbnN0IGkgPSAobmV3IEJ1aWxkZXIoKSkuSW1wb3J0KCk7CiAgICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBpLkZ1bmN0aW9uKCJmb28iLCAiYmFyIiwgMCksIEVycm9yLCBgU2hv
dWxkbid0IGJlIHVuZGVmaW5lZDogQ2FuIG5vdCB1c2UgdHlwZSAwIGlmIGEgdHlwZSBzZWN0aW9u
IGlzIG5vdCBwcmVzZW50YCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2NhdGNo
LXdpdGgtZGVsZWdhdGUuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2NhdGNoLXdpdGgtZGVsZWdh
dGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDMwYmVmNTkzY2M0MjM2MmIyMmFlMjk5NzY0MmIzMjg1MTQ4ODU0
MgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvY2F0Y2gtd2l0aC1kZWxl
Z2F0ZS5qcwpAQCAtMCwwICsxLDkwIEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVy
LmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNv
bnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBv
cnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
dm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2Vw
dGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCku
RnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAg
ICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQorICAgICAgICAg
ICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3Qg
YmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBsZXQg
dGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsK
KyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9
CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMpOworCisgICAgdGFn
ID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFtdIH0pOworCisgICAgYXNzZXJ0
LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9
CisKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNh
bGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgLkV4Y2Vw
dGlvbigiY29udGV4dCIsICJ0YWciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAidm9pZCIgfSkK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNl
cHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgp
LkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDEpCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwi
LCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisg
ICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAg
ICAgIC5DYXRjaCgxKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0
IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdlYkFzc2VtYmx5
LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdl
YkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrLCB0YWc6IG90
aGVyVGFnIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKyAgICBs
ZXQgYXJncyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93
IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBhcmdzKTsKKyAgICB9CisKKyAgICBhc3Nl
cnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMpOworCisgICAgdGFnID0gb3RoZXJUYWc7
CisgICAgYXJncyA9IFsxMDBdOworCisgICAgbGV0IGV4biA9IGFzc2VydC50aHJvd3MoaW5zdGFu
Y2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICAgIGFzc2VydC5lcShl
eG4uZ2V0QXJnKHRhZywgMCksIDEwMCk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3Ry
ZXNzL2NyZWF0ZS10YWctZnJvbS5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvY3JlYXRlLXRhZy1m
cm9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmIyNzhkNmMyMTc2Y2ZiNTgxNGFmYWU3Njg0ZjE5ZmQ1NjgxMDFm
YTkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2NyZWF0ZS10YWctZnJv
bS5qcwpAQCAtMCwwICsxLDIyIEBACitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0
LmpzJworCitsZXQgcGFyYW1ldGVycyA9IFsiaTMyIiwgImYzMiIsICJleHRlcm5yZWYiXTsKKwor
YXNzZXJ0LnRocm93cyhXZWJBc3NlbWJseS5UYWcsIFR5cGVFcnJvciwgImNhbGxpbmcgV2ViQXNz
ZW1ibHkuVGFnIGNvbnN0cnVjdG9yIHdpdGhvdXQgbmV3IGlzIGludmFsaWQiKTsKK2xldCBwYXNz
ZWRQYXJhbWV0ZXJzID0geyBwYXJhbWV0ZXJzIH07CitsZXQgdGFnID0gbmV3IFdlYkFzc2VtYmx5
LlRhZyhwYXNzZWRQYXJhbWV0ZXJzKTsKKworYXNzZXJ0LnRydXRoeSh0YWcudHlwZSgpICE9PSBw
YXNzZWRQYXJhbWV0ZXJzLCAiVGFnIHR5cGUgc2hvdWxkIHJldHVybiBhIGZyZXNoIG9iamVjdCIp
OworYXNzZXJ0LmVxKHRhZy50eXBlKCkucGFyYW1ldGVycywgcGFyYW1ldGVycywgIlRhZ3MgdHlw
ZSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIGluIik7CisKK2Fz
c2VydC50aHJvd3MoV2ViQXNzZW1ibHkuRXhjZXB0aW9uLCBUeXBlRXJyb3IsICJjYWxsaW5nIFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciB3aXRob3V0IG5ldyBpcyBpbnZhbGlkIik7
CisKK2xldCBleGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgWzEsIDIu
NSwgcGFyYW1ldGVyc10pOworYXNzZXJ0LnRydXRoeShleGNlcHRpb24uaXModGFnKSk7Cithc3Nl
cnQuZXEoZXhjZXB0aW9uLmdldEFyZyh0YWcsIDApLCAxKTsKK2Fzc2VydC5lcShleGNlcHRpb24u
Z2V0QXJnKHRhZywgMSksIDIuNSk7Cithc3NlcnQuZXEoZXhjZXB0aW9uLmdldEFyZyh0YWcsIDIp
LCBwYXJhbWV0ZXJzKTsKKworYXNzZXJ0LnRocm93cygoKSA9PiBleGNlcHRpb24uZ2V0QXJnKHRh
ZywgMyksIFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5FeGNlcHRpb24uZ2V0QXJnKCk6IEluZGV4
IG91dCBvZiByYW5nZSIpOworCithc3NlcnQuZXEoV2ViQXNzZW1ibHkuRXhjZXB0aW9uLnByb3Rv
dHlwZS5fX3Byb3RvX18sIE9iamVjdC5wcm90b3R5cGUpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dh
c20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0yLmpzIGIvSlNUZXN0cy93YXNtL3N0
cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UtMi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZWM3ZmJhZDA3
NTg5NTVlYTJmOGU0MzQyODE0MTdjOTZmMDBkYjczCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0
cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UtMi5qcwpAQCAtMCwwICsxLDkw
IEBACisKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBh
c3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCitjb25zdCBwYWdlU2l6ZSA9IDY0ICogMTAyNDsK
K2NvbnN0IG51bVBhZ2VzID0gMTsKKwordmFyIGluc3RBOwordmFyIGluc3RCOwordmFyIGdyb3c7
Cit2YXIgbWVtb3J5RGVzY3JpcHRpb24gPSB7aW5pdGlhbDogMH07Cit2YXIgbWVtID0gbmV3IFdl
YkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7CisKK2Z1bmN0aW9uIHRlc3QoKSB7
CisgICAgYXNzZXJ0LmVxKGluc3RBLmV4cG9ydHMubWFpbig0MiksIDQyKTsKK30KKworeworICAg
IGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5J
bXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiY29udGV4dCIsICJtZW0iLCBtZW1vcnlEZXNj
cmlwdGlvbikKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJncm93IiwgeyBwYXJh
bXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9u
KCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigidHJhbXBvbGlu
ZSIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oInRyYW1wb2xpbmUiLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAg
ICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisg
ICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBpbnN0QiA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHsKKyAgICAgICAgY29udGV4dDogeworICAgICAgICAgICAgbWVt
LAorICAgICAgICAgICAgZ3JvdygpIHsgaW5zdEEuZXhwb3J0cy5ncm93KDEpOyB9LAorICAgICAg
ICB9CisgICAgfSk7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBi
LlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5NZW1vcnkoImNv
bnRleHQiLCAibWVtIiwgbWVtb3J5RGVzY3JpcHRpb24pCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImNvbnRleHQiLCAidHJhbXBvbGluZSIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRp
b24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oIm1haW4iKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJncm93
IikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigibWFpbiIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAg
ICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAg
ICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJMb2Fk
KDAsIDApCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiZ3JvdyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9
KQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5Hcm93TWVt
b3J5KDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDQyKQorICAgICAgICAgICAgICAgIC5J
MzJTdG9yZSgwLCAwKQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCku
Z2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwor
ICAgIGluc3RBID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeworICAgICAgICBj
b250ZXh0OiB7CisgICAgICAgICAgICBtZW0sCisgICAgICAgICAgICB0cmFtcG9saW5lOiBpbnN0
Qi5leHBvcnRzLnRyYW1wb2xpbmUsCisgICAgICAgIH0KKyAgICB9KTsKK30KKwordGVzdCgpOwpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2Ut
My5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLTMuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uN2E4OTgwYmViOTNmNmMyYzMwNjRjMmNjOTE0ZWFjMWExMzRjMDQ4MAotLS0g
L2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3Rh
bmNlLTMuanMKQEAgLTAsMCArMSw3NSBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRl
ci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK2NvbnN0IHBh
Z2VTaXplID0gNjQgKiAxMDI0OworY29uc3QgbnVtUGFnZXMgPSAxOworCit2YXIgaW5zdEE7Cit2
YXIgaW5zdEI7Cit2YXIgZ3JvdzsKK3ZhciBtZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiBu
dW1QYWdlc307Cit2YXIgbWVtID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlw
dGlvbik7CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgYXNzZXJ0LmVxKGluc3RBLmV4cG9ydHMu
bWFpbigpLCA0Mik7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBi
LlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5NZW1vcnkoImNv
bnRleHQiLCAibWVtIiwgeyBpbml0aWFsOiAwIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAu
RnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1z
OiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0
aHJvdyIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJleCIsIDApCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oInRocm93IiwgeyBwYXJhbXM6
IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOworICAgIGluc3RCID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250
ZXh0OiB7IG1lbTogbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRpYWw6IDAgfSkgfSB9KTsK
K30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiY29udGV4dCIsICJtZW0i
LCBtZW1vcnlEZXNjcmlwdGlvbikKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJ0
aHJvdyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgIC5FeGNlcHRp
b24oImNvbnRleHQiLCAiZXgiLCB7IHBhcmFtczogW10gfSkKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBw
YXJhbXM6IFsiaTMyIl19KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigibWFpbiIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAg
ICAgICAuRnVuY3Rpb24oIm1haW4iLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoNDIpCisg
ICAgICAgICAgICAgICAgLkkzMlN0b3JlKDAsIDApCisgICAgICAgICAgICAgICAgLlRyeSgiaTMy
IikKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDApCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAg
IC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyTG9hZCgwLCAwKQorICAgICAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisK
KyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxl
ID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGluc3RBID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IC4uLmluc3RCLmV4cG9ydHMsIG1lbSB9
IH0pOworfQorCit0ZXN0KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2Vw
dGlvbi1jcm9zcy1pbnN0YW5jZS5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNy
b3NzLWluc3RhbmNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjNjdjOTE4NjllMmFiMmRiZTcwZDVjZWMxZTdm
MjU3ODk4YjU4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2Vw
dGlvbi1jcm9zcy1pbnN0YW5jZS5qcwpAQCAtMCwwICsxLDU4IEBACitpbXBvcnQgQnVpbGRlciBm
cm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5q
cycKKwordmFyIGluc3RBOwordmFyIGluc3RCOworCitmdW5jdGlvbiB0ZXN0KCkgeworICAgIGFz
c2VydC50aHJvd3MoaW5zdEEuZXhwb3J0cy5tYWluLCBXZWJBc3NlbWJseS5FeGNlcHRpb24sICJ3
YXNtIGV4Y2VwdGlvbiIpOworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Cisg
ICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigidGhyb3ciKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvdyIsIHsgcGFyYW1zOiBbXSwg
cmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCku
Z2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwor
ICAgIGluc3RCID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7Cit9CisKK3sKKyAg
ICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAu
SW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJ0aHJvdyIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9u
KCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIi
LCAiaTMyIl19KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigibWFpbiIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oIm1haW4iLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAg
ICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQWRkKCkKKyAgICAgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisg
ICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBpbnN0QSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyB0aHJvdzogaW5zdEIuZXhwb3J0cy50aHJv
dyB9IH0pOworfQorCit0ZXN0KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4
Y2VwdGlvbi1saXZlbmVzcy10aWVyLXVwLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRp
b24tbGl2ZW5lc3MtdGllci11cC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZTYwNTI0MGQyMTVlYjE0MjEwMmM4
NWYxYzk4MDM1MjRjODVjNmYyCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVz
cy9leGNlcHRpb24tbGl2ZW5lc3MtdGllci11cC5qcwpAQCAtMCwwICsxLDg3IEBACitpbXBvcnQg
QnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4u
L2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24o
KQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisg
ICAgICAgICAgICAuRXhjZXB0aW9uKCJ0YWciLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6
ICJpMzIiIH0sIFsiaTMyIl0pCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDFlNikKKyAgICAg
ICAgICAgICAgICAuU2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAg
ICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoNDIpCisgICAgICAgICAgICAgICAgICAgIC5UaHJv
dygwKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuTG9v
cCgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAuQmxvY2soInZvaWQiLCBiID0+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5HZXRMb2NhbCgwKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5JMzJFcXooKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5CcklmKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkdldExvY2FsKDAp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLkkzMlN1YigpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLlNldExvY2FsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJyKDEp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgICAgICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBi
aW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5
Lkluc3RhbmNlKG1vZHVsZSk7CisgICAgY29uc3QgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy50YWc7
CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHku
RXhjZXB0aW9uLCAid2FzbSBleGNlcHRpb24iKTsKKyAgICB0cnkgeworICAgICAgICBpbnN0YW5j
ZS5leHBvcnRzLmNhbGwoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGFzc2VydC50cnV0
aHkoZS5pcyh0YWcpKTsKKyAgICAgICAgYXNzZXJ0LmVxKGUuZ2V0QXJnKHRhZywgMCksIDQyKTsK
KyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUo
KS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2si
LCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCku
RW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQo
KQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFsi
aTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAg
ICAgICAgICAgICAuTG9vcCgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgIC5DYWxsKDIpCisg
ICAgICAgICAgICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAgICAg
LlRocm93KDApCisgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkVxeigpCisg
ICAgICAgICAgICAgICAgICAgICAgICAuQnJJZigxKQorICAgICAgICAgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJ3cmFwcGVyIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAg
ICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisgICAgdmFyIGNvdW50ZXIgPSAxZTU7
CisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVs
ZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5l
dyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjazogZnVu
Y3Rpb24oKSB7IGlmICghLS1jb3VudGVyKSByZXR1cm4gdHJ1ZTt9IH0gfSk7CisKKyAgICBhc3Nl
cnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDApOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy93YXNtL3N0cmVzcy9leGNlcHRpb24tbXVsdGlwbGUtaW5zdGFuY2VzLmpzIGIvSlNUZXN0cy93
YXNtL3N0cmVzcy9leGNlcHRpb24tbXVsdGlwbGUtaW5zdGFuY2VzLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcx
MDI2NzlhOWQxMWExYmU4MTMwOGQ2MTdiOTdkYWM5YWE3ZjMwZWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1tdWx0aXBsZS1pbnN0YW5jZXMuanMKQEAg
LTAsMCArMSwzMiBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9y
dCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisg
ICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvdyIpCisgICAgICAg
ICAgICAuRXhjZXB0aW9uKCJ0YWciLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvdyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9p
ZCIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAg
LlRocm93KDApCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKyAgICBjb25zdCBiaW4g
PSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4pOworICAgIHsKKyAgICAgICAgbGV0IGluc3QgPSBuZXcgV2ViQXNzZW1i
bHkuSW5zdGFuY2UobW9kdWxlKTsKKyAgICAgICAgaW5zdC5leHBvcnRzLnRocm93KCk7CisgICAg
fQorICAgIHsKKyAgICAgICAgbGV0IGluc3QgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9k
dWxlKTsKKyAgICAgICAgaW5zdC5leHBvcnRzLnRocm93KCk7CisgICAgfQorfQpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLWRlbGVnYXRlLmpzIGIvSlNU
ZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLWRlbGVnYXRlLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmJiMTJhOGVmMjk2MmNiMTFjOTQ2ZDBjNWZkODBmNGEwNmZkYTRjNzkKLS0tIC9kZXYvbnVsbAor
KysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtZGVsZWdhdGUuanMKQEAg
LTAsMCArMSwxMjUgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBv
cnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCitmdW5jdGlvbiB0ZXN0U2ltcGxl
VGhyb3dEZWxlZ2F0ZSgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5
cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9u
KCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5j
dGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBw
YXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAu
VGhyb3coMCkKKyAgICAgICAgICAgICAgICAgICAgLkRlbGVnYXRlKDApCisgICAgICAgICAgICAg
ICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAg
ICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0g
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdl
YkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5j
ZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93
biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0VGhyb3dE
ZWxlZ2F0ZVNraXAoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBl
KCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigp
LlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rp
b24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAg
ICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAuVHJ5
KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgxKQorICAgICAgICAgICAgICAgICAgICAuQ2F0Y2go
MCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAg
ICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7Cisg
ICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0p
OworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcg
YW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7
Cit9CisKK2Z1bmN0aW9uIHRlc3REZWxlZ2F0ZUNhbGxlcigpIHsKKyAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisg
ICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9u
KCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMSkKKyAgICAgICAg
ICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAg
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKworICAgICAgICAgICAgLkZ1
bmN0aW9uKCJjYWxsMiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAg
ICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgICAgIC5EZWxlZ2F0
ZSgxKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOwor
ICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25z
dCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAg
ICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBv
cnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKwor
ZnVuY3Rpb24gdGVzdFNpbXBsZURlbGVnYXRlTWVyZ2UoKXsKKyBjb25zdCBiID0gbmV3IEJ1aWxk
ZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBh
cmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAg
ICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgICAgICAgLkRlbGVnYXRl
KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlLCB7IH0pOworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNh
bGwoKSwgMyk7Cit9CisKK3Rlc3RTaW1wbGVUaHJvd0RlbGVnYXRlKCk7Cit0ZXN0VGhyb3dEZWxl
Z2F0ZVNraXAoKTsKK3Rlc3REZWxlZ2F0ZUNhbGxlcigpOwordGVzdFNpbXBsZURlbGVnYXRlTWVy
Z2UoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXNpbXBsZS10
aHJvdy1jYXRjaC5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXNpbXBsZS10aHJv
dy1jYXRjaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDk3NDAxNWY3MzAxZGViZTZiNGQ2NjJlMzViMDkyZmU0
OGUwYzc2Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24t
c2ltcGxlLXRocm93LWNhdGNoLmpzCkBAIC0wLDAgKzEsNDE0IEBACitpbXBvcnQgQnVpbGRlciBm
cm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5q
cycKKworZnVuY3Rpb24gdGVzdFNpbXBsZVRyeUNhdGNoKCl7CisgICAgY29uc3QgYiA9IG5ldyBC
dWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigi
Zm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAg
LlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAu
STMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJD
b25zdCgyKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBj
b25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5z
dGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNz
ZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQg
d2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0
aW9uIHRlc3RTaW1wbGVUcnlDYXRjaEFsbCgpeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAg
IC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDAp
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkz
MiIpCisgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0
KDEpCisgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgy
KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgp
CisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBt
b2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2Ug
PSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVx
KGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0
YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRl
c3RDYWxsVHJ5Q2F0Y2goKXsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5
cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9u
KCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5j
dGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBw
YXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAg
ICAgICAgICAgIC5DYWxsKDEpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbDIiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAg
IGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBp
bnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBh
c3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRl
ZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVu
Y3Rpb24gdGVzdENhbGxUcnlDYXRjaEFsbCgpeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAg
IC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDAp
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkz
MiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAg
ICAuRW5kKCkKKworICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsMiIsIHsgcGFyYW1zOiBbXSwg
cmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCku
Z2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwor
ICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9
KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5n
IGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIp
OworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlVHJ5Q2F0Y2hWYWx1ZSgpeworICAgIGNvbnN0IGIg
PSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFsiaTMyIl19
KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAg
LkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQor
ICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAg
ICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNv
bnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNz
ZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4
cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZy
b20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RDYWxsVHJ5Q2F0
Y2hWYWx1ZSgpeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWdu
YXR1cmUoeyBwYXJhbXM6IFsiaTMyIl19KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rp
b24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAg
ICAgICAgICAuQ2FsbCgxKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgIC5FbmQoKQorCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwyIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIp
CisgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBj
b25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5z
dGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNz
ZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQg
d2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0
aW9uIHRlc3RTdGFja1RyeUNhdGNoKCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Cisg
ICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAw
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuSTMyQ29u
c3QoMikKKyAgICAgICAgICAgIC8vIFRPRE86IGJ1aWxkZXIgZXJyb3IKKyAgICAgICAgICAgIC5U
cnkoeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVGhy
b3coMCkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9k
dWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAi
Y2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBv
c3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RMaXZlQWZ0ZXJUcnlDYXRjaCgpIHsKKyAgICBj
b25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVu
Y3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBb
XSB9KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAg
ICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9
KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5UcnkoInZv
aWQiKQorICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAuQ2F0
Y2goMCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAg
IGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBp
bnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBh
c3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRl
ZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVu
Y3Rpb24gdGVzdExpdmVBZnRlclRyeUNhdGNoQWxsKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVp
bGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisg
ICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJm
b28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAg
ICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAg
ICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAg
ICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKwor
ICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3Rh
bmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhy
b3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RVbmlm
eVRyeUNhdGNoQ2F0Y2goKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5U
eXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlv
bigpCisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAgICAg
LlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwg
cmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAg
ICAgICAgIC5UaHJvdygxKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAg
ICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMSkKKyAgICAgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9k
dWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAi
Y2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBv
c3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RVbmlmeVRyeUNhdGNoQ2F0Y2hBbGwoKSB7Cisg
ICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAg
LkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpCisgICAgICAgICAgICAuU2ln
bmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczog
W10gfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAg
ICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5UaHJvdygxKQorICAg
ICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkK
KyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAg
IGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBp
bnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBh
c3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRl
ZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVu
Y3Rpb24gdGVzdFVuaWZ5VHJ5Tm9UaHJvdygpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIo
KTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAuRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pCisg
ICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBw
YXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLkNhdGNoKDAp
CisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4g
PSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNh
bGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNo
b3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0VW5pZnlUcnlOb0NhdGNoKCkg
eworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKQorICAgICAgICAgICAg
LlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJh
bXM6IFtdIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAg
IC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAg
ICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3Qo
MikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNv
bnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0
YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3Nl
cnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3
YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rp
b24gdGVzdE5lc3RlZENhdGNoICgpeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAg
IGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNl
cHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgp
LkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0p
CisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLlRyeSgidm9p
ZCIpCisgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgIC5DYXRj
aEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAg
ICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3Qg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNl
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7CisKKyAgICBhc3NlcnQudGhyb3dz
KGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uLCAid2FzbSBleGNl
cHRpb24iKTsKK30KKwordGVzdFNpbXBsZVRyeUNhdGNoKCk7Cit0ZXN0U2ltcGxlVHJ5Q2F0Y2hB
bGwoKTsKK3Rlc3RTaW1wbGVUcnlDYXRjaFZhbHVlKCk7Cit0ZXN0Q2FsbFRyeUNhdGNoKCk7Cit0
ZXN0Q2FsbFRyeUNhdGNoQWxsKCk7Cit0ZXN0Q2FsbFRyeUNhdGNoVmFsdWUoKTsKK3Rlc3RMaXZl
QWZ0ZXJUcnlDYXRjaCgpOwordGVzdExpdmVBZnRlclRyeUNhdGNoQWxsKCk7Cit0ZXN0VW5pZnlU
cnlDYXRjaENhdGNoKCk7Cit0ZXN0VW5pZnlUcnlDYXRjaENhdGNoQWxsKCk7Cit0ZXN0VW5pZnlU
cnlOb1Rocm93KCk7Cit0ZXN0VW5pZnlUcnlOb0NhdGNoKCk7CisKKy8vIFRPRE86IGVuYWJsZSB0
aGlzIHRlc3QKKy8vIHRlc3RTdGFja1RyeUNhdGNoKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dh
c20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLWNhdGNoYWxsLXJldGhy
b3cuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13
YXNtLWNhdGNoYWxsLXJldGhyb3cuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI0YzMwZDkxYWM2YmEzNzU0MTA0
N2JjNjUyM2ZhYmFmMTFiYjQyZAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJl
c3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwtcmV0aHJvdy5qcwpA
QCAtMCwwICsxLDQxIEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1w
b3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBu
ZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5j
dGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSku
RW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNp
Z25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24o
ImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAg
ICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAg
LkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAg
ICAuUmV0aHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6
IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOwor
CisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJs
eS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5j
ZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisKKyAgICB0YWcgPSBuZXcg
V2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQudGhyb3dz
KGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KZGlmZiAt
LWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdh
c20tY2F0Y2hhbGwuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJv
bS1qcy10by13YXNtLWNhdGNoYWxsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3ZTRhNDRiMWZlYzQxNmQzODRj
Nzk0OTlmOThiZjk0NjY5Y2I2NGMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3Ry
ZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLWNhdGNoYWxsLmpzCkBAIC0wLDAg
KzEsNDAgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBh
cyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWls
ZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJj
b250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQor
ICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJl
KHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIp
CisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5D
YWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuQ2F0Y2hB
bGwoKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRhZyA9IGlu
c3RhbmNlLmV4cG9ydHMuZm9vOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAg
IHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAgfQorCisgICAg
YXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hfYWxsaW5nIGFuIGV4
cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworCisg
ICAgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFtdIH0pOworCisgICAg
YXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hfYWxsaW5nIGFuIG9w
YXF1ZSB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRv
LXdhc20uanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10
by13YXNtLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1MDE5MjAwYzlmZDlmMmY2MWZhYjQzODc0MDZlODY2YmMz
MmY3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10
aHJvd24tZnJvbS1qcy10by13YXNtLmpzCkBAIC0wLDAgKzEsNDAgQEAKK2ltcG9ydCBCdWlsZGVy
IGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0
LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5k
KCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBw
YXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisg
ICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9u
KCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAg
LkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
IC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGlu
c3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNh
bGxiYWNrIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKworICAg
IGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhj
ZXB0aW9uKHRhZywgW10pOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRz
LmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpT
IHNob3VsZCBiZSBwb3NzaWJsZSIpOworCisgICAgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7
IHBhcmFtZXRlcnM6IFtdIH0pOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRz
LmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dh
c20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3V0LW9mLXdhc20uanMgYi9KU1Rlc3RzL3dhc20v
c3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3V0LW9mLXdhc20uanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYThlMzMw
MWUzYjgwMDNhNTJhMmRlNjMzNTg2NzY5ZmY4OTA4MmY4ZQotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdXQtb2Ytd2FzbS5qcwpAQCAtMCww
ICsxLDI0IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICog
YXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVp
bGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisg
ICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJm
b28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAu
VGhyb3coMCkKKyAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5FbmQoKQorCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOwor
ICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25z
dCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworCisgICAgYXNz
ZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7
Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3Zl
ci13YXNtLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLW92ZXItd2Fz
bS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41OWY0YzJlOTAzMWU5ZWQ0OWRlNjk3MWM5NzFiNjQwYmVlMjRhZmMz
Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3du
LW92ZXItd2FzbS5qcwpAQCAtMCwwICsxLDMwIEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9C
dWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworewor
ICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAg
IC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwg
cmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhw
b3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Y2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLkNhbGwoMCkK
KyAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5F
bmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29u
c3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3Rh
bmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxi
YWNrIH19KTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcg
V2ViQXNzZW1ibHkuRXhjZXB0aW9uKGluc3RhbmNlLmV4cG9ydHMuZm9vLCBbXSk7CisgICAgfQor
CisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4
Y2VwdGlvbiwgIndhc20gZXhjZXB0aW9uIik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
c3RyZXNzL2V4Y2VwdGlvbi10cmFwLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24t
dHJhcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kZmRmNTNlYjUwNWMzOTBiNDBiZjE1MzU1YjZkNTM3MmU1NjBl
OTFiCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdHJh
cC5qcwpAQCAtMCwwICsxLDEzNCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5q
cycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK2Z1bmN0aW9uIHRl
c3RDYW5ub3RDYXRjaFVucmVhY2hhYmxlKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAg
IC5FeHBvcnQoKQorICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAg
ICAgICAgICAgIC5VbnJlYWNoYWJsZSgpCisgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAg
ICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlKTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBX
ZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsICJVbnJlYWNoYWJsZSBjb2RlIHNob3VsZCBub3QgYmUg
ZXhlY3V0ZWQiKTsKK30KKworZnVuY3Rpb24gdGVzdENhbm5vdENhdGNoT09CKCkgeworICAgIGNv
bnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5NZW1vcnkoKQorICAgICAgICAgICAgLkluaXRpYWxNYXhQ
YWdlcygwLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAu
RnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAg
ICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEw
MjQpCisgICAgICAgICAgICAgICAgICAgIC5JMzJMb2FkKDAsIDApCisgICAgICAgICAgICAgICAg
LkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAg
IGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2Uu
ZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsICJPdXQgb2YgYm91bmRzIG1l
bW9yeSBhY2Nlc3MiKTsKK30KKworZnVuY3Rpb24gdGVzdFdhc21BUElUaHJvdygpIHsKKyAgICBj
b25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1w
b3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDog
InZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwg
cmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAg
ICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAg
ICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQor
ICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQo
KQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3Qg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNl
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNr
IH19KTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICBuZXcgV2ViQXNzZW1i
bHkuR2xvYmFsKHsKKyAgICAgICAgICAgIHZhbHVlOiAnYW55ZnVuYycKKyAgICAgICAgfSwge30p
OworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMSk7Cit9
CitmdW5jdGlvbiB0ZXN0SlNDYXRjaEFuZFJldGhyb3coKSB7CisgICAgY29uc3QgYiA9IG5ldyBC
dWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9u
KCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQo
KQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMy
IiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5H
ZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyRXF6KCkKKyAgICAgICAgICAgICAg
ICAgICAgLklmKCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5VbnJlYWNoYWJsZSgp
CisgICAgICAgICAgICAgICAgICAgIC5FbHNlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5D
YWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgICAgICAu
STMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgp
LmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
KyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsg
Y29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGluc3RhbmNlLmV4cG9ydHMuY2FsbCgwKTsKKyAgICAg
ICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICB9CisgICAgfQor
CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmNhbGwoMSksIFdlYkFz
c2VtYmx5LlJ1bnRpbWVFcnJvciwgIlVucmVhY2hhYmxlIGNvZGUgc2hvdWxkIG5vdCBiZSBleGVj
dXRlZCIpOworfQorCit0ZXN0Q2Fubm90Q2F0Y2hVbnJlYWNoYWJsZSgpOwordGVzdENhbm5vdENh
dGNoT09CKCk7Cit0ZXN0V2FzbUFQSVRocm93KCk7Cit0ZXN0SlNDYXRjaEFuZFJldGhyb3coKTsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy1mcm9tLWNhdGNoLXRvLWNh
dGNoLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LWZyb20tY2F0Y2gtdG8tY2F0Y2gu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMGRmZGE2ZDhhNjkxMTg0ZDk5OTU1NWQxOGU4ZDllZTUxYmU0YWVhOAot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy1mcm9tLWNhdGNo
LXRvLWNhdGNoLmpzCkBAIC0wLDAgKzEsNDUgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1
aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7Cisg
ICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAg
LkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAu
RXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
YWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIi
KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlJldGhyb3coMCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAg
IGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBp
bnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBj
YWxsYmFjayB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAg
ICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4
Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsKCksIDMpOworCisgICAgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRl
cnM6IFtdIH0pOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNz
L3JldGhyb3ctdG8tY2F0Y2guanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ctdG8tY2F0
Y2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGYxY2JhNDNkY2I1YjQ0ZDlhZTY0ZmRjNTc5YTBjOGE2NTUwM2Y3
ZAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy10by1jYXRj
aC5qcwpAQCAtMCwwICsxLDg4IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpz
JworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0
IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQo
KS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9p
ZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlv
bigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVu
Y3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAg
LkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsg
cGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAg
ICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAg
ICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLlJldGhyb3coMCkKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0
KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5k
KCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5j
ZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFj
ayB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAgICBmdW5j
dGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlv
bih0YWcsIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxs
KCksIDMpOworCisgICAgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFtd
IH0pOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2Vt
Ymx5LkV4Y2VwdGlvbik7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAg
ICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAi
Y2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6
IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAg
ICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAg
ICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAg
ICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAg
ICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuQ2F0
Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBi
LldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3Rh
bmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxldCB0YWcgPSBp
bnN0YW5jZS5leHBvcnRzLmZvbzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAg
ICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAgIH0KKworICAg
IGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0YWcgPSBuZXcg
V2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQudGhyb3dz
KGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KZGlmZiAt
LWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy10by1kZWxlZ2F0ZS10by1jYXRjaC5q
cyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy10by1kZWxlZ2F0ZS10by1jYXRjaC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43MDQ3OWMwY2VhMjNiNjBlMzk1NWExYjUxNzQ5MWZiNGY3NmVlN2FkCi0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LXRvLWRlbGVnYXRlLXRv
LWNhdGNoLmpzCkBAIC0wLDAgKzEsMjU5IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWls
ZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAg
IGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5J
bXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBw
YXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiY29udGV4
dCIsICJ0YWciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWdu
YXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJj
YWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDEpCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczog
W10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAg
ICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMSkKKyAgICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgICAgICAgICAgLlJldGhyb3coMCkK
KyAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgLkRlbGVnYXRlKDAp
CisgICAgICAgICAgICAuQ2F0Y2goMSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisK
KyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxl
ID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGxldCBvdGhlclRhZyA9IG5ldyBX
ZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbImkzMiJdfSkKKyAgICBjb25zdCBpbnN0YW5j
ZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFj
aywgdGFnOiBvdGhlclRhZyB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5m
b287CisgICAgbGV0IGFyZ3MgPSBbXTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAg
ICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7CisgICAgfQor
CisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKKworICAgIHRhZyA9
IG90aGVyVGFnOworICAgIGFyZ3MgPSBbMTAwXTsKKworICAgIGxldCBleG4gPSBhc3NlcnQudGhy
b3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgICBh
c3NlcnQuZXEoZXhuLmdldEFyZyh0YWcsIDApLCAxMDApOworfQorCit7CisgICAgY29uc3QgYiA9
IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10s
IHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJjb250ZXh0IiwgInRhZyIs
IHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBh
cmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAg
ICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
aTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuVHJ5KCJp
MzIiKQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAu
STMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAg
ICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgICAgICAuQ2F0
Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAg
ICAgICAgICAgICAgICAuUmV0aHJvdygxKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOworICAgIGxldCBvdGhlclRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJz
OiBbImkzMiJdfSkKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5j
ZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjaywgdGFnOiBvdGhlclRhZyB9fSk7CisKKyAg
ICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisgICAgbGV0IGFyZ3MgPSBbXTsKKwor
ICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICBsZXQgZXhuID0gbmV3IFdlYkFzc2Vt
Ymx5LkV4Y2VwdGlvbih0YWcsIGFyZ3MpOworICAgICAgICB0YWcgPSBvdGhlclRhZzsKKyAgICAg
ICAgYXJncyA9IFsxMDBdOworICAgICAgICB0aHJvdyBleG47CisgICAgfQorCisgICAgYXNzZXJ0
LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9
CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQor
ICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJjYWxs
YmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgIC5FeGNlcHRp
b24oImNvbnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogInZvaWQiIH0pCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0
aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5G
dW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAxKQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAg
ICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIp
CisgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAg
ICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAg
ICAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAg
ICAgICAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5SZXRocm93KDEp
CisgICAgICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAgICAgLkRlbGVnYXRlKDEpCisgICAgICAgICAgICAuQ2F0Y2hBbGwo
KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2Vi
QXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFt
ZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrLCB0YWc6IG90aGVyVGFnIH19KTsK
KworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKyAgICBsZXQgYXJncyA9IFtd
OworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIGxldCBleG4gPSBuZXcgV2Vi
QXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7CisgICAgICAgIHRhZyA9IG90aGVyVGFnOwor
ICAgICAgICBhcmdzID0gWzEwMF07CisgICAgICAgIHRocm93IGV4bjsKKyAgICB9CisKKyAgICBh
c3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9u
KTsKK30KKworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCku
RW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNvbnRleHQi
LCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAu
RXhjZXB0aW9uKCJjb250ZXh0IiwgInRhZyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lk
IiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhw
b3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMSkK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Y2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMy
IikKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVHJ5
KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQor
ICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgICAg
ICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
ICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdlYkFzc2VtYmx5LlRh
Zyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFz
c2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrLCB0YWc6IG90aGVy
VGFnIH19KTsKKworICAgIGxldCB0YWcgPSBvdGhlclRhZzsKKyAgICBsZXQgYXJncyA9IFsxMDBd
OworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIGxldCBleG4gPSBuZXcgV2Vi
QXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7CisgICAgICAgIHRocm93IGV4bjsKKyAgICB9
CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDEwMCk7Cit9CisKK3sK
KyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAg
ICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImNv
bnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogInZvaWQiIH0pCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCku
U2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlv
bigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAxKQorICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJh
bXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAg
ICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDApCisgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxs
KDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAg
ICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5J
MzJDb25zdCgyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5SZXRocm93KDEpCisgICAg
ICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgICAgICAgICAgLkRlbGVnYXRlKDApCisgICAgICAgICAgICAuQ2F0Y2goMSkKKyAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGxldCBvdGhlclRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBb
ImkzMiJdfSkKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZSht
b2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjaywgdGFnOiBvdGhlclRhZyB9fSk7CisKKyAgICBs
ZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisgICAgbGV0IGFyZ3MgPSBbXTsKKworICAg
IGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICBsZXQgZXhuID0gbmV3IFdlYkFzc2VtYmx5
LkV4Y2VwdGlvbih0YWcsIGFyZ3MpOworICAgICAgICB0YWcgPSBvdGhlclRhZzsKKyAgICAgICAg
YXJncyA9IFsxMDBdOworICAgICAgICB0aHJvdyBleG47CisgICAgfQorCisgICAgYXNzZXJ0LmVx
KGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS9zdHJlc3Mvc2ltcGxlLWV4cG9ydC1leGNlcHRpb24uanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNz
L3NpbXBsZS1leHBvcnQtZXhjZXB0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiOTY5OTk3NTNkM2E0YWQw
ODZhMGVjZTU4OTgyODRmOGZjYjhiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20v
c3RyZXNzL3NpbXBsZS1leHBvcnQtZXhjZXB0aW9uLmpzCkBAIC0wLDAgKzEsMTYgQEAKK2ltcG9y
dCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAn
Li4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5U
eXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlv
bigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQo
KS5FeGNlcHRpb24oImZvbyIsIDApLkVuZCgpCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSk7CisKKyAgICBhc3NlcnQuaW5zdGFuY2VvZihpbnN0YW5jZS5leHBvcnRzLmZvbywgV2ViQXNz
ZW1ibHkuVGFnKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9MSUNFTlNFIGIvSlNU
ZXN0cy93YXNtL3Y4L0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTNkOWM0N2UzM2MxODI5Mjc0MWYxZTQw
ODkwYzhmZTJkNjI5OTY0NgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9MSUNF
TlNFCkBAIC0wLDAgKzEsNjIgQEAKK1RoaXMgbGljZW5zZSBhcHBsaWVzIHRvIGFsbCBwYXJ0cyBv
ZiBWOCB0aGF0IGFyZSBub3QgZXh0ZXJuYWxseQorbWFpbnRhaW5lZCBsaWJyYXJpZXMuICBUaGUg
ZXh0ZXJuYWxseSBtYWludGFpbmVkIGxpYnJhcmllcyB1c2VkIGJ5IFY4CithcmU6CisKKyAgLSBQ
Q1JFIHRlc3Qgc3VpdGUsIGxvY2F0ZWQgaW4KKyAgICB0ZXN0L21qc3VuaXQvdGhpcmRfcGFydHkv
cmVnZXhwLXBjcmUvcmVnZXhwLXBjcmUuanMuICBUaGlzIGlzIGJhc2VkIG9uIHRoZQorICAgIHRl
c3Qgc3VpdGUgZnJvbSBQQ1JFLTcuMywgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIFVuaXZl
cnNpdHkKKyAgICBvZiBDYW1icmlkZ2UgYW5kIEdvb2dsZSwgSW5jLiAgVGhlIGNvcHlyaWdodCBu
b3RpY2UgYW5kIGxpY2Vuc2UKKyAgICBhcmUgZW1iZWRkZWQgaW4gcmVnZXhwLXBjcmUuanMuCisK
KyAgLSBMYXlvdXQgdGVzdHMsIGxvY2F0ZWQgaW4gdGVzdC9tanN1bml0L3RoaXJkX3BhcnR5L29i
amVjdC1rZXlzLiAgVGhlc2UgYXJlCisgICAgYmFzZWQgb24gbGF5b3V0IHRlc3RzIGZyb20gd2Vi
a2l0Lm9yZyB3aGljaCBhcmUgY29weXJpZ2h0ZWQgYnkKKyAgICBBcHBsZSBDb21wdXRlciwgSW5j
LiBhbmQgcmVsZWFzZWQgdW5kZXIgYSAzLWNsYXVzZSBCU0QgbGljZW5zZS4KKworICAtIFN0cm9u
Z3RhbGsgYXNzZW1ibGVyLCB0aGUgYmFzaXMgb2YgdGhlIGZpbGVzIGFzc2VtYmxlci1hcm0taW5s
LmgsCisgICAgYXNzZW1ibGVyLWFybS5jYywgYXNzZW1ibGVyLWFybS5oLCBhc3NlbWJsZXItaWEz
Mi1pbmwuaCwKKyAgICBhc3NlbWJsZXItaWEzMi5jYywgYXNzZW1ibGVyLWlhMzIuaCwgYXNzZW1i
bGVyLXg2NC1pbmwuaCwKKyAgICBhc3NlbWJsZXIteDY0LmNjLCBhc3NlbWJsZXIteDY0LmgsIGFz
c2VtYmxlci1taXBzLWlubC5oLAorICAgIGFzc2VtYmxlci1taXBzLmNjLCBhc3NlbWJsZXItbWlw
cy5oLCBhc3NlbWJsZXIuY2MgYW5kIGFzc2VtYmxlci5oLgorICAgIFRoaXMgY29kZSBpcyBjb3B5
cmlnaHRlZCBieSBTdW4gTWljcm9zeXN0ZW1zIEluYy4gYW5kIHJlbGVhc2VkCisgICAgdW5kZXIg
YSAzLWNsYXVzZSBCU0QgbGljZW5zZS4KKworICAtIFZhbGdyaW5kIGNsaWVudCBBUEkgaGVhZGVy
LCBsb2NhdGVkIGF0IHNyYy90aGlyZF9wYXJ0eS92YWxncmluZC92YWxncmluZC5oCisgICAgVGhp
cyBpcyByZWxlYXNlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UuCisKKyAgLSBUaGUgV2FzbSBDL0Mr
KyBBUEkgaGVhZGVycywgbG9jYXRlZCBhdCB0aGlyZF9wYXJ0eS93YXNtLWFwaS93YXNtLntoLGho
fQorICAgIFRoaXMgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEFwYWNoZSBsaWNlbnNlLiBUaGUgQVBJ
J3MgdXBzdHJlYW0gcHJvdG90eXBlCisgICAgaW1wbGVtZW50YXRpb24gYWxzbyBmb3JtZWQgdGhl
IGJhc2lzIG9mIFY4J3MgaW1wbGVtZW50YXRpb24gaW4KKyAgICBzcmMvd2FzbS9jLWFwaS5jYy4K
KworVGhlc2UgbGlicmFyaWVzIGhhdmUgdGhlaXIgb3duIGxpY2Vuc2VzOyB3ZSByZWNvbW1lbmQg
eW91IHJlYWQgdGhlbSwKK2FzIHRoZWlyIHRlcm1zIG1heSBkaWZmZXIgZnJvbSB0aGUgdGVybXMg
YmVsb3cuCisKK0Z1cnRoZXIgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElD
RU5TRSBmaWxlcyBsb2NhdGVkIGluIAorc3ViLWRpcmVjdG9yaWVzLgorCitDb3B5cmlnaHQgMjAx
NCwgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1JlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1hcGkuanMgYi9KU1Rlc3RzL3dhc20v
djgvZXhjZXB0aW9ucy1hcGkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFkNTM2ODE0NTZjNjVlYzg2NzE4Yjg1
ZTFhZmQ2ZmMwZmQ4OTc2NQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9leGNl
cHRpb25zLWFwaS5qcwpAQCAtMCwwICsxLDIzMiBAQAorLy8gQ29weXJpZ2h0IDIwMjEgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cGVyaW1lbnRh
bC13YXNtLWVoIC0tZXhwZXJpbWVudGFsLXdhc20tcmVmdHlwZXMKKworbG9hZCgid2FzbS1tb2R1
bGUtYnVpbGRlci5qcyIpOworCisoZnVuY3Rpb24gVGVzdEltcG9ydCgpIHsKKworICBhc3NlcnRU
aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5LlRhZygpLCBUeXBlRXJyb3IsCisgICAgICAvZXhw
ZWN0cyB0aGUgdGFnIHR5cGUgYXMgdGhlIGZpcnN0IGFyZ3VtZW50Lyk7CisgIGFzc2VydFRocm93
cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuVGFnKHt9KSwgVHlwZUVycm9yLAorICAgICAgL2V4cGVj
dHMgYSB0YWcgdHlwZSB3aXRoIHRoZSAncGFyYW1ldGVycycgcHJvcGVydHkvKTsKKyAgYXNzZXJ0
VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFsnZm9vJ119KSwg
VHlwZUVycm9yLAorICAgICAgL2V4cGVjdHMgdGhlICdwYXJhbWV0ZXJzJyBmaWVsZCBvZiB0aGUg
Zmlyc3QgYXJndW1lbnQgdG8gYmUgYSBzZXF1ZW5jZSBvZiBXZWJBc3NlbWJseSB2YWx1ZSB0eXBl
cy8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVy
czoge319KSwgVHlwZUVycm9yLAorICAgICAgL1R5cGUgZXJyb3IvKTsKKworICBsZXQganNfZXhj
ZXB0X2kzMiA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFsnaTMyJ119KTsKKyAg
bGV0IGpzX2V4Y2VwdF92ID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogW119KTsK
KyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgYnVpbGRlci5hZGRJ
bXBvcnRlZFRhZygibSIsICJleCIsIGtTaWdfdl9pKTsKKworICBhc3NlcnREb2VzTm90VGhyb3co
KCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IGpzX2V4Y2VwdF9pMzIgfX0pKTsK
KyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsg
ZXg6IGpzX2V4Y2VwdF92IH19KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAorICAgICAgL2ltcG9y
dGVkIFRhZyBtOmV4IHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBpbXBvcnRlZCBXZWJBc3Nl
bWJseSBUYWcncyBzaWduYXR1cmUvKTsKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVp
bGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IGpzX2V4Y2VwdF92IH19KSwgV2ViQXNzZW1ibHku
TGlua0Vycm9yLAorICAgICAgL2ltcG9ydGVkIFRhZyBtOmV4IHNpZ25hdHVyZSBkb2Vzbid0IG1h
dGNoIHRoZSBpbXBvcnRlZCBXZWJBc3NlbWJseSBUYWcncyBzaWduYXR1cmUvKTsKKyAgYXNzZXJ0
VHJ1ZShqc19leGNlcHRfaTMyLnRvU3RyaW5nKCkgPT0gIltvYmplY3QgV2ViQXNzZW1ibHkuVGFn
XSIpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RFeHBvcnQoKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywg
ZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFz
c2VydFRydWUoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGluc3RhbmNlLmV4
cG9ydHMsICdleCcpKTsKKyAgYXNzZXJ0RXF1YWxzKCJvYmplY3QiLCB0eXBlb2YgaW5zdGFuY2Uu
ZXhwb3J0cy5leCk7CisgIGFzc2VydEluc3RhbmNlb2YoaW5zdGFuY2UuZXhwb3J0cy5leCwgV2Vi
QXNzZW1ibHkuVGFnKTsKKyAgYXNzZXJ0U2FtZShpbnN0YW5jZS5leHBvcnRzLmV4LmNvbnN0cnVj
dG9yLCBXZWJBc3NlbWJseS5UYWcpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJbXBvcnRFeHBv
cnQoKSB7CisKKyAgbGV0IGpzX2V4X2kzMiA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRl
cnM6IFsnaTMyJ119KTsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsK
KyAgbGV0IGluZGV4ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleCIsIGtTaWdfdl9p
KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBpbmRleCk7
CisKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IGpzX2V4
X2kzMiB9fSk7CisgIGxldCByZXMgPSBpbnN0YW5jZS5leHBvcnRzLmV4OworICBhc3NlcnRFcXVh
bHMocmVzLCBqc19leF9pMzIpOworfSkoKTsKKworCisoZnVuY3Rpb24gVGVzdEV4Y2VwdGlvbkNv
bnN0cnVjdG9yKCkgeworICAvLyBDaGVjayBlcnJvcnMuCisgIGxldCBqc190YWcgPSBuZXcgV2Vi
QXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbXX0pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbigwKSwgVHlwZUVycm9yLAorICAgICAgL1dlYkFzc2VtYmx5
LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciBleHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBh
IFdlYkFzc2VtYmx5LlRhZy8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5
LkV4Y2VwdGlvbih7fSksIFR5cGVFcnJvciwKKyAgICAgIC9XZWJBc3NlbWJseS5FeGNlcHRpb24g
Y29uc3RydWN0b3IgZXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBXZWJBc3NlbWJs
eS5UYWcvKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbihqc190
YWcpLCBUeXBlRXJyb3IsCisgICAgICAvY2FsbGluZyBXZWJBc3NlbWJseS5FeGNlcHRpb24gY29u
c3RydWN0b3Igd2l0aG91dCBuZXcgaXMgaW52YWxpZC8pOworICBsZXQganNfZXhjZXB0aW9uID0g
bmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbihqc190YWcsIFtdKTsKKworICAvLyBDaGVjayBwcm90
b3R5cGUuCisgIGFzc2VydFNhbWUoV2ViQXNzZW1ibHkuRXhjZXB0aW9uLnByb3RvdHlwZSwganNf
ZXhjZXB0aW9uLl9fcHJvdG9fXyk7CisgIGFzc2VydFRydWUoanNfZXhjZXB0aW9uIGluc3RhbmNl
b2YgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKworICAvLyBDaGVjayBwcm90b3R5cGUgb2YgYSB0
aHJvd24gZXhjZXB0aW9uLgorICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigp
OworICBsZXQgd2FzbV90YWcgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oInRocm93Iiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShba0V4cHJUaHJv
dywgd2FzbV90YWddKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5z
dGFudGlhdGUoKTsKKyAgdHJ5IHsKKyAgICBpbnN0YW5jZS5leHBvcnRzLnRocm93KCk7CisgIH0g
Y2F0Y2ggKGUpIHsKKyAgICBhc3NlcnRUcnVlKGUgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5FeGNl
cHRpb24pOworICB9Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9y
V2l0aFBheWxvYWQoKSB7CisgIGxldCB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKAorICAgICAg
e3BhcmFtZXRlcnM6IFsnaTMyJywgJ2YzMicsICdpNjQnLCAnZjY0JywgJ2V4dGVybnJlZiddfSk7
CisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKAorICAgICAg
dGFnLCBbMW4sIDIsIDNuLCA0LCB7fV0pLCBUeXBlRXJyb3IpOworICBhc3NlcnREb2VzTm90VGhy
b3coKCkgPT4gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFszLCA0LCA1biwgNiwge31d
KSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdENhdGNoSlNFeGNlcHRpb24oKSB7CisgIGxldCBi
dWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBqc190YWcgPSBuZXcgV2Vi
QXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbXX0pOworICBsZXQganNfZnVuY19pbmRleCA9IGJ1
aWxkZXIuYWRkSW1wb3J0KCdtJywgJ2pzX2Z1bmMnLCBrU2lnX3Zfdik7CisgIGxldCBqc190YWdf
aW5kZXggPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImpzX3RhZyIsIGtTaWdfdl92KTsK
KyAgbGV0IHRhZ19pbmRleCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5h
ZGRFeHBvcnRPZktpbmQoIndhc21fdGFnIiwga0V4dGVybmFsVGFnLCB0YWdfaW5kZXgpOworICBi
dWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaCIsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWwor
ICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBq
c19mdW5jX2luZGV4LAorICAgICAgICBrRXhwckkzMkNvbnN0LCAwLAorICAgICAgICBrRXhwckNh
dGNoLCBqc190YWdfaW5kZXgsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgIGtF
eHByQ2F0Y2gsIHRhZ19pbmRleCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAg
a0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IHRhZzsKKyAgZnVuY3Rpb24g
anNfZnVuYygpIHsKKyAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10p
OworICB9CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoe206IHtqc19mdW5j
LCBqc190YWd9fSk7CisgIHRhZyA9IGpzX3RhZzsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNl
LmV4cG9ydHMuY2F0Y2goKSk7CisgIHRhZyA9IGluc3RhbmNlLmV4cG9ydHMud2FzbV90YWc7Cisg
IGFzc2VydEVxdWFscygyLCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoKCkpOworfSkoKTsKKworZnVu
Y3Rpb24gVGVzdENhdGNoSlModHlwZXNfc3RyLCB0eXBlcywgdmFsdWVzKSB7CisgIC8vIENyZWF0
ZSBhIEpTIGV4Y2VwdGlvbiwgY2F0Y2ggaXQgaW4gd2FzbSBhbmQgY2hlY2sgdGhlIHVucGFja2Vk
IHZhbHVlKHMpLgorICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBs
ZXQganNfdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogdHlwZXNfc3RyfSk7
CisgIGxldCBqc19mdW5jX2luZGV4ID0gYnVpbGRlci5hZGRJbXBvcnQoJ20nLCAnanNfZnVuYycs
IGtTaWdfdl92KTsKKyAgbGV0IHNpZzEgPSBtYWtlU2lnKHR5cGVzLCBbXSk7CisgIGxldCBzaWcy
ID0gbWFrZVNpZyhbXSwgdHlwZXMpOworICBsZXQganNfdGFnX2luZGV4ID0gYnVpbGRlci5hZGRJ
bXBvcnRlZFRhZygibSIsICJqc190YWciLCBzaWcxKTsKKyAgbGV0IHRhZ19pbmRleCA9IGJ1aWxk
ZXIuYWRkVGFnKHNpZzEpOworICBsZXQgcmV0dXJuX3R5cGUgPSBidWlsZGVyLmFkZFR5cGUoc2ln
Mik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJ3YXNtX3RhZyIsIGtFeHRlcm5hbFRhZywg
dGFnX2luZGV4KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2giLCBzaWcyKQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwgcmV0dXJuX3R5cGUsCisgICAgICAgIGtFeHBy
Q2FsbEZ1bmN0aW9uLCBqc19mdW5jX2luZGV4LAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAor
ICAgICAgICBrRXhwckNhdGNoLCBqc190YWdfaW5kZXgsCisgICAgICAgIGtFeHByQ2F0Y2gsIHRh
Z19pbmRleCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0
IGV4Y2VwdGlvbjsKKyAgZnVuY3Rpb24ganNfZnVuYygpIHsKKyAgICB0aHJvdyBleGNlcHRpb247
CisgIH0KKyAgbGV0IGV4cGVjdGVkID0gdmFsdWVzLmxlbmd0aCA9PSAxID8gdmFsdWVzWzBdIDog
dmFsdWVzOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHttOiB7anNfZnVu
YywganNfdGFnfX0pOworICBleGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKGpz
X3RhZywgdmFsdWVzKTsKKyAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBpbnN0YW5jZS5leHBvcnRz
LmNhdGNoKCkpOworICBleGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKGluc3Rh
bmNlLmV4cG9ydHMud2FzbV90YWcsIHZhbHVlcyk7CisgIGFzc2VydEVxdWFscyhleHBlY3RlZCwg
aW5zdGFuY2UuZXhwb3J0cy5jYXRjaCgpKTsKK30KKworKGZ1bmN0aW9uIFRlc3RDYXRjaEpTRXhj
ZXB0aW9uV2l0aFBheWxvYWQoKSB7CisgIFRlc3RDYXRjaEpTKFsnaTMyJ10sIFtrV2FzbUkzMl0s
IFsxXSk7CisgIFRlc3RDYXRjaEpTKFsnaTY0J10sIFtrV2FzbUk2NF0sIFsybl0pOworICBUZXN0
Q2F0Y2hKUyhbJ2YzMiddLCBba1dhc21GMzJdLCBbM10pOworICBUZXN0Q2F0Y2hKUyhbJ2Y2NCdd
LCBba1dhc21GNjRdLCBbNF0pOworICBUZXN0Q2F0Y2hKUyhbJ2V4dGVybnJlZiddLCBba1dhc21F
eHRlcm5SZWZdLCBbe3ZhbHVlOiA1fV0pOworICBUZXN0Q2F0Y2hKUyhbJ2kzMicsICdpNjQnLCAn
ZjMyJywgJ2Y2NCcsICdleHRlcm5yZWYnXSwKKyAgICAgICAgICAgICAgW2tXYXNtSTMyLCBrV2Fz
bUk2NCwga1dhc21GMzIsIGtXYXNtRjY0LCBrV2FzbUV4dGVyblJlZl0sCisgICAgICAgICAgICAg
IFs2LCA3biwgOCwgOSwge3ZhbHVlOiAxMH1dKTsKK30pKCk7CisKK2Z1bmN0aW9uIFRlc3RHZXRB
cmdIZWxwZXIodHlwZXNfc3RyLCB0eXBlcywgdmFsdWVzKSB7CisgIGxldCB0YWcgPSBuZXcgV2Vi
QXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiB0eXBlc19zdHJ9KTsKKyAgbGV0IGV4Y2VwdGlvbiA9
IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCB2YWx1ZXMpOworICBmb3IgKGkgPSAwOyBp
IDwgdHlwZXMubGVuZ3RoOyArK2kpIHsKKyAgICBhc3NlcnRFcXVhbHMoZXhjZXB0aW9uLmdldEFy
Zyh0YWcsIGkpLCB2YWx1ZXNbaV0pOworICB9CisKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1v
ZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IHNpZyA9IG1ha2VTaWcodHlwZXMsIFtdKTsKKyAgbGV0IHRh
Z19pbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAidCIsIHNpZyk7CisgIGxldCBi
b2R5ID0gW107CisgIGZvciAoaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7ICsraSkgeworICAgIGJv
ZHkucHVzaChrRXhwckxvY2FsR2V0LCBpKTsKKyAgfQorICBib2R5LnB1c2goa0V4cHJUaHJvdywg
dGFnX2luZGV4KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBzaWcpCisgICAgICAu
YWRkQm9keShib2R5KS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5z
dGFudGlhdGUoeydtJzogeyd0JzogdGFnfX0pOworICB0cnkgeworICAgIGluc3RhbmNlLmV4cG9y
dHMudGhyb3coLi4udmFsdWVzKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGZvciAoaSA9IDA7IGkg
PCB0eXBlcy5sZW5ndGg7ICsraSkgeworICAgICAgYXNzZXJ0RXF1YWxzKGUuZ2V0QXJnKHRhZywg
aSksIHZhbHVlc1tpXSk7CisgICAgfQorICB9Cit9CisKKyhmdW5jdGlvbiBUZXN0R2V0QXJnKCkg
eworICAvLyBDaGVjayBlcnJvcnMuCisgIGxldCB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtw
YXJhbWV0ZXJzOiBbJ2kzMiddfSk7CisgIGxldCBleGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHku
RXhjZXB0aW9uKHRhZywgWzBdKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGV4Y2VwdGlvbi5nZXRB
cmcoMCwgMCksIFR5cGVFcnJvciwKKyAgICAgIC9GaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV2Vi
QXNzZW1ibHkuVGFnLyk7CisgIGFzc2VydFRocm93cygoKSA9PiBleGNlcHRpb24uZ2V0QXJnKHt9
LCAwKSwgVHlwZUVycm9yLAorICAgICAgL0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBXZWJBc3Nl
bWJseS5UYWcvKTsKKyAgLy9hc3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0aW9uLmdldEFyZyh0YWcs
IHVuZGVmaW5lZCksIFR5cGVFcnJvciwKKyAgICAgIC8vL0luZGV4IG11c3QgYmUgY29udmVydGli
bGUgdG8gYSB2YWxpZCBudW1iZXIvKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGV4Y2VwdGlvbi5n
ZXRBcmcodGFnLCAweEZGRkZGRkZGKSwgUmFuZ2VFcnJvciwKKyAgICAgIC9JbmRleCBvdXQgb2Yg
cmFuZ2UvKTsKKyAgbGV0IHdyb25nX3RhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRl
cnM6IFsnaTMyJ119KTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGV4Y2VwdGlvbi5nZXRBcmcod3Jv
bmdfdGFnLCAwKSwgVHlwZUVycm9yLAorICAgICAgL0ZpcnN0IGFyZ3VtZW50IGRvZXMgbm90IG1h
dGNoIHRoZSBleGNlcHRpb24gdGFnLyk7CisKKyAgLy8gQ2hlY2sgZGVjb2RpbmcuCisgIFRlc3RH
ZXRBcmdIZWxwZXIoWydpMzInXSwgW2tXYXNtSTMyXSwgWzFdKTsKKyAgVGVzdEdldEFyZ0hlbHBl
cihbJ2k2NCddLCBba1dhc21JNjRdLCBbMm5dKTsKKyAgVGVzdEdldEFyZ0hlbHBlcihbJ2YzMidd
LCBba1dhc21GMzJdLCBbM10pOworICBUZXN0R2V0QXJnSGVscGVyKFsnZjY0J10sIFtrV2FzbUY2
NF0sIFs0XSk7CisgIFRlc3RHZXRBcmdIZWxwZXIoWydleHRlcm5yZWYnXSwgW2tXYXNtRXh0ZXJu
UmVmXSwgW3t2YWw6IDV9XSk7CisgIFRlc3RHZXRBcmdIZWxwZXIoWydpMzInLCAnaTY0JywgJ2Yz
MicsICdmNjQnLCAnZXh0ZXJucmVmJ10sIFtrV2FzbUkzMiwga1dhc21JNjQsIGtXYXNtRjMyLCBr
V2FzbUY2NCwga1dhc21FeHRlcm5SZWZdLCBbNSwgNm4sIDcsIDgsIHt2YWw6IDl9XSk7Cit9KSgp
OworCisoZnVuY3Rpb24gVGVzdEV4Y2VwdGlvbklzKCkgeworICBsZXQgdGFnMSA9IG5ldyBXZWJB
c3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFtdfSk7CisgIGxldCB0YWcyID0gbmV3IFdlYkFzc2Vt
Ymx5LlRhZyh7cGFyYW1ldGVyczogW119KTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseS5FeGNlcHRpb24oe30sIFtdKSwgVHlwZUVycm9yLAorICAgICAgL2V4cGVjdHMgdGhl
IGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgV2ViQXNzZW1ibHkuVGFnLyk7CisKKyAgbGV0IGV4Y2Vw
dGlvbiA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnMSwgW10pOworICBhc3NlcnRUcnVl
KGV4Y2VwdGlvbi5pcyh0YWcxKSk7CisgIGFzc2VydEZhbHNlKGV4Y2VwdGlvbi5pcyh0YWcyKSk7
CisKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGV4Y2VwdGlvbi5pcy5hcHBseSh7fSwgdGFnMSksIFR5
cGVFcnJvciwKKyAgICAgIC9XZWJBc3NlbWJseS5FeGNlcHRpb24gb3BlcmF0aW9uIGNhbGxlZCBv
biBub24tRXhjZXB0aW9uIG9iamVjdC8pOworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS92OC9leGNlcHRpb25zLWV4cG9ydC5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWV4
cG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wYzk2OTBmNWI4OGY3ZTU0M2NkYzkzZDkxY2MxYTgxODNkODM4
M2JmCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXhwb3J0
LmpzCkBAIC0wLDAgKzEsNTMgQEAKKy8vIENvcHlyaWdodCAyMDE4IHRoZSBWOCBwcm9qZWN0IGF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1leHBvc2Utd2FzbSAtLWV4cGVyaW1l
bnRhbC13YXNtLWVoCisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKKworKGZ1bmN0
aW9uIFRlc3RFeHBvcnRNdWx0aXBsZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7Cisg
IGxldCBleGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2kpOworICBidWlsZGVyLmFkZEV4
cG9ydE9mS2luZCgiZXgxYSIsIGtFeHRlcm5hbFRhZywgZXhjZXB0MSk7CisgIGJ1aWxkZXIuYWRk
RXhwb3J0T2ZLaW5kKCJleDFiIiwga0V4dGVybmFsVGFnLCBleGNlcHQxKTsKKyAgYnVpbGRlci5h
ZGRFeHBvcnRPZktpbmQoImV4MiIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Mik7CisgIGxldCBpbnN0
YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRUcnVlKE9iamVjdC5wcm90
b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnN0YW5jZS5leHBvcnRzLCAnZXgxYScpKTsKKyAg
YXNzZXJ0VHJ1ZShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5zdGFuY2Uu
ZXhwb3J0cywgJ2V4MWInKSk7CisgIGFzc2VydFRydWUoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q
cm9wZXJ0eS5jYWxsKGluc3RhbmNlLmV4cG9ydHMsICdleDInKSk7CisgIC8vIEZJWE1FOiBmaXgg
YnJva2VuIHY4IHdhc20gZXhjZXB0aW9ucyB0ZXN0cworICAvLyBhc3NlcnRTYW1lKGluc3RhbmNl
LmV4cG9ydHMuZXgxYSwgaW5zdGFuY2UuZXhwb3J0cy5leDFiKTsKKyAgYXNzZXJ0Tm90U2FtZShp
bnN0YW5jZS5leHBvcnRzLmV4MWEsIGluc3RhbmNlLmV4cG9ydHMuZXgyKTsKK30pKCk7CisKKyhm
dW5jdGlvbiBUZXN0RXhwb3J0T3V0T2ZCb3VuZHMoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdh
c21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zf
dik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleF9vb2IiLCBrRXh0ZXJuYWxUYWcsIGV4
Y2VwdCArIDEpOworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRp
YXRlKCksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwKKyAgICAgIC9XZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMxOiAwdGggRXhwb3J0IGhhcyBpbnZhbGlkIGV4Y2Vw
dGlvbiBudW1iZXIgMSBpdCBleGNlZWRzIHRoZSBleGNlcHRpb24gaW5kZXggc3BhY2UgMSwgbmFt
ZWQgJ2V4X29vYicvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0U2FtZU5hbWVUd2lj
ZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4
Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktp
bmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2lu
ZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGFzc2VydFRocm93cygKKyAgICAgICgp
ID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLAorICAg
ICAgL1dlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzA6IGR1cGxpY2F0
ZSBleHBvcnQ6ICdleCcvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0TW9kdWxlR2V0
RXhwb3J0cygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAg
bGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBv
cnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgbW9kdWxlID0gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLnRvQnVmZmVyKCkpOworCisgIGxldCBleHBvcnRz
ID0gV2ViQXNzZW1ibHkuTW9kdWxlLmV4cG9ydHMobW9kdWxlKTsKKyAgYXNzZXJ0QXJyYXlFcXVh
bHMoW3sgbmFtZTogImV4Iiwga2luZDogInRhZyIgfV0sIGV4cG9ydHMpOworfSkoKTsKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWV4dGVybnJlZi5qcyBiL0pTVGVzdHMv
d2FzbS92OC9leGNlcHRpb25zLWV4dGVybnJlZi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYmJkYTM3ZjE2ZWIx
NTAzMjQ5MDlkNmI2YzUwZmRhYThkMDQ4ZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93
YXNtL3Y4L2V4Y2VwdGlvbnMtZXh0ZXJucmVmLmpzCkBAIC0wLDAgKzEsOTYgQEAKKy8vIENvcHly
aWdodCAyMDE4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFn
czogLS1leHBlcmltZW50YWwtd2FzbS1laCAtLWV4cGVyaW1lbnRhbC13YXNtLXJlZnR5cGVzIC0t
YWxsb3ctbmF0aXZlcy1zeW50YXgKKworbG9hZCgid2FzbS1tb2R1bGUtYnVpbGRlci5qcyIpOwor
bG9hZCgiZXhjZXB0aW9ucy11dGlscy5qcyIpOworCisvLyBUZXN0IHRoZSBlbmNvZGluZyBvZiBh
IHRocm93biBleGNlcHRpb24gd2l0aCBhIG51bGwtcmVmIHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RU
aHJvd1JlZk51bGwoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7
CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfcik7CisgIGJ1aWxkZXIuYWRk
RnVuY3Rpb24oInRocm93X251bGwiLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAg
ICAga0V4cHJSZWZOdWxsLCBrRXh0ZXJuUmVmQ29kZSwKKyAgICAgICAga0V4cHJUaHJvdywgZXhj
ZXB0LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgi
ZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5z
dGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBv
cnRzLmV4LCBbbnVsbF0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfbnVsbCgpKTsKK30p
KCk7CisKKy8vIFRlc3QgdGhyb3dpbmcvY2F0Y2hpbmcgdGhlIG51bGwtcmVmIHZhbHVlLgorKGZ1
bmN0aW9uIFRlc3RUaHJvd0NhdGNoUmVmTnVsbCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2Fz
bU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9y
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfY2F0Y2hfbnVsbCIsIGtTaWdfaV9pKQor
ICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAg
a0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICBrRXhw
cklmLCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByUmVmTnVsbCwga0V4dGVyblJlZkNvZGUs
CisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJFbHNlLAor
ICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgNDIsCisgICAgICAgICAga0V4cHJFbmQsCisgICAg
ICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclJlZklzTnVsbCwKKyAgICAg
ICAgICBrRXhwcklmLCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIzLAor
ICAgICAgICAgIGtFeHByRWxzZSwKKyAgICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAg
ICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygp
OworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7
CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVh
bHMoMjMsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfbnVsbCgwKSk7CisgIGFzc2VydEVx
dWFscyg0MiwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9udWxsKDEpKTsKK30pKCk7CisK
Ky8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3duIGV4Y2VwdGlvbiB3aXRoIGEgcmVmZXJl
bmNlIHR5cGUgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93UmVmUGFyYW0oKSB7CisgIGxldCBi
dWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVy
LmFkZFRhZyhrU2lnX3Zfcik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X3BhcmFtIiwg
a1NpZ192X3IpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisg
ICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVp
bGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQg
aW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGxldCBvID0gbmV3IE9iamVjdCgp
OworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtv
XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbShvKSk7CisgIGFzc2VydFdhc21U
aHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFsxXSwgKCkgPT4gaW5zdGFuY2Uu
ZXhwb3J0cy50aHJvd19wYXJhbSgxKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGlu
c3RhbmNlLmV4cG9ydHMuZXgsIFsyLjNdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3Bh
cmFtKDIuMykpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRz
LmV4LCBbInN0ciJdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKCJzdHIiKSk7
Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nL2NhdGNoaW5nIHRoZSByZWZlcmVuY2UgdHlwZSB2
YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFJlZlBhcmFtKCkgeworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRU
YWcoa1NpZ192X3IpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19jYXRjaF9wYXJhbSIs
IGtTaWdfcl9yKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga0V4dGVyblJl
ZkNvZGUsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwclRocm93
LCBleGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICAvLyBmYWxs
LXRocm91Z2gKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1
aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0
IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBsZXQgbyA9IG5ldyBPYmplY3Qo
KTsKKworICBhc3NlcnRFcXVhbHMobywgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJh
bShvKSk7CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3Bh
cmFtKDEpKTsKKyAgYXNzZXJ0RXF1YWxzKDIuMywgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRj
aF9wYXJhbSgyLjMpKTsKKyAgYXNzZXJ0RXF1YWxzKCJzdHIiLCBpbnN0YW5jZS5leHBvcnRzLnRo
cm93X2NhdGNoX3BhcmFtKCJzdHIiKSk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L3Y4L2V4Y2VwdGlvbnMtaW1wb3J0LmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtaW1w
b3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjdhNGYwYTA1NmJmY2Y3Y2MwMzM1ZWRmYjBjNzEyZTU1YjVlNzFh
NDgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1pbXBvcnQu
anMKQEAgLTAsMCArMSw5MCBAQAorLy8gQ29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2plY3QgYXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cG9zZS13YXNtIC0tZXhwZXJpbWVu
dGFsLXdhc20tZWgKKworbG9hZCgid2FzbS1tb2R1bGUtYnVpbGRlci5qcyIpOworCisvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gcmV0dXJuIGEgbmV3IGV4cG9ydGVkIGV4Y2VwdGlvbiB3aXRoIHRoZSB7
a1NpZ192X3Z9IHR5cGUKKy8vIHNpZ25hdHVyZSBmcm9tIGFuIGFub255bW91cyBtb2R1bGUuIFRo
ZSB1bmRlcmx5aW5nIG1vZHVsZSBpcyB0aHJvd24gYXdheS4KKy8vIFRoaXMgYWxsb3dzIHRlc3Rz
IHRvIHJlYXNvbiBzb2xlbHkgYWJvdXQgaW1wb3J0aW5nIGV4Y2VwdGlvbnMuCitmdW5jdGlvbiBO
ZXdFeHBvcnRlZFRhZygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIo
KTsKKyAgbGV0IHRhZyA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRF
eHBvcnRPZktpbmQoInQiLCBrRXh0ZXJuYWxUYWcsIHRhZyk7CisgIGxldCBpbnN0YW5jZSA9IGJ1
aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgcmV0dXJuIGluc3RhbmNlLmV4cG9ydHMudDsKK30KKwor
KGZ1bmN0aW9uIFRlc3RJbXBvcnRTaW1wbGUoKSB7CisgIGxldCBleHBvcnRlZCA9IE5ld0V4cG9y
dGVkVGFnKCk7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxl
dCBleGNlcHQgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X3YpOwor
CisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBl
eDogZXhwb3J0ZWQgfX0pKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0TXVsdGlwbGUo
KSB7CisgIGxldCBleHBvcnRlZCA9IE5ld0V4cG9ydGVkVGFnKCk7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlci5hZGRJbXBv
cnRlZFRhZygibSIsICJleDEiLCBrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5h
ZGRJbXBvcnRlZFRhZygibSIsICJleDIiLCBrU2lnX3Zfdik7CisgIGxldCBleGNlcHQzID0gYnVp
bGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgyIiwg
a0V4dGVybmFsVGFnLCBleGNlcHQyKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4MyIs
IGtFeHRlcm5hbFRhZywgZXhjZXB0Myk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoeyBtOiB7IGV4MTogZXhwb3J0ZWQsIGV4MjogZXhwb3J0ZWQgfX0pOworCisgIGFzc2Vy
dFRydWUoZXhjZXB0MSA8IGV4Y2VwdDMgJiYgZXhjZXB0MiA8IGV4Y2VwdDMpOworICBhc3NlcnRF
cXVhbHModW5kZWZpbmVkLCBpbnN0YW5jZS5leHBvcnRzLmV4MSk7CisgIC8vIEZJWE1FOiBmaXgg
YnJva2VuIHY4IHdhc20gZXhjZXB0aW9ucyB0ZXN0cworICAvLyBhc3NlcnRTYW1lKGV4cG9ydGVk
LCBpbnN0YW5jZS5leHBvcnRzLmV4Mik7CisgIGFzc2VydE5vdFNhbWUoZXhwb3J0ZWQsIGluc3Rh
bmNlLmV4cG9ydHMuZXgzKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0TWlzc2luZygp
IHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2Vw
dCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3Zfdik7CisKKyAgYXNz
ZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7fSksIFR5cGVFcnJv
ciwKKyAgICAgIC9pbXBvcnQgbTpleCBtdXN0IGJlIGFuIG9iamVjdC8pOworICBhc3NlcnRUaHJv
d3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbToge319KSwgV2ViQXNzZW1i
bHkuTGlua0Vycm9yLAorICAgICAgL1RhZyBpbXBvcnQgbTpleCBpcyBub3QgYW4gaW5zdGFuY2Ug
b2YgV2ViQXNzZW1ibHkuVGFnLyk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEltcG9ydFZhbHVl
TWlzbWF0Y2goKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7Cisg
IGxldCBleGNlcHQgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X3Yp
OworCisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBt
OiB7IGV4OiAyMyB9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9UYWcgaW1wb3J0
IG06ZXggaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhZy8pOworICBhc3NlcnRU
aHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDoge30gfX0p
LCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvVGFnIGltcG9ydCBtOmV4IGlzIG5vdCBh
biBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWcvKTsKKyAgdmFyIG1vbmtleSA9IE9iamVjdC5j
cmVhdGUoTmV3RXhwb3J0ZWRUYWcoKSk7CisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1
aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4OiBtb25rZXkgfX0pLCBXZWJBc3NlbWJseS5MaW5r
RXJyb3IsCisgICAgICAvVGFnIGltcG9ydCBtOmV4IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJB
c3NlbWJseS5UYWcvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0U2lnbmF0dXJlTWlz
bWF0Y2goKSB7CisgIGxldCBleHBvcnRlZCA9IE5ld0V4cG9ydGVkVGFnKCk7CisgIGxldCBidWls
ZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFk
ZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X2kpOworCisgIGFzc2VydFRocm93cygKKyAg
ICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4OiBleHBvcnRlZCB9fSksIFdl
YkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9pbXBvcnRlZCBUYWcgbTpleCBzaWduYXR1cmUg
ZG9lc24ndCBtYXRjaCB0aGUgaW1wb3J0ZWQgV2ViQXNzZW1ibHkgVGFnJ3Mgc2lnbmF0dXJlLyk7
Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEltcG9ydE1vZHVsZUdldEltcG9ydHMoKSB7CisgIGxl
dCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWls
ZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X3YpOworICBsZXQgbW9kdWxlID0g
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLnRvQnVmZmVyKCkpOworCisgIGxldCBpbXBv
cnRzID0gV2ViQXNzZW1ibHkuTW9kdWxlLmltcG9ydHMobW9kdWxlKTsKKyAgYXNzZXJ0QXJyYXlF
cXVhbHMoW3sgbW9kdWxlOiAibSIsIG5hbWU6ICJleCIsIGtpbmQ6ICJ0YWciIH1dLCBpbXBvcnRz
KTsKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1yZXRocm93
LmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtcmV0aHJvdy5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
MjMzOWJlZjJmNjk0MmJkNWY2ZTVlYjM1ZDcxODljMmNhYzU5MGE4Ci0tLSAvZGV2L251bGwKKysr
IGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtcmV0aHJvdy5qcwpAQCAtMCwwICsxLDE0MiBA
QAorLy8gQ29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisKKy8vIEZsYWdzOiAtLWV4cG9zZS13YXNtIC0tZXhwZXJpbWVudGFsLXdhc20tZWggLS1hbGxv
dy1uYXRpdmVzLXN5bnRheAorCitsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7Citsb2Fk
KCJleGNlcHRpb25zLXV0aWxzLmpzIik7CisKKy8vIFRlc3QgdGhhdCByZXRocm93IGV4cHJlc3Np
b25zIGNhbiB0YXJnZXQgY2F0Y2ggYmxvY2tzLgorKGZ1bmN0aW9uIFRlc3RSZXRocm93SW5DYXRj
aCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4
Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigi
cmV0aHJvdzAiLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnks
IGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgIGtFeHBy
Q2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclJldGhyb3csIDAsCisgICAgICAgIGtFeHBy
RW5kLAorICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInJldGhyb3cx
Iiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkz
MiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4
Y2VwdCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBySTMyRXF6
LAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByUmV0aHJv
dywgMSwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyMywK
KyAgICAgICAga0V4cHJFbmQKKyAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9y
dE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1
aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0
YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93MCgpKTsK
KyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW10sICgp
ID0+IGluc3RhbmNlLmV4cG9ydHMucmV0aHJvdzEoMCkpOworICBhc3NlcnRFcXVhbHMoMjMsIGlu
c3RhbmNlLmV4cG9ydHMucmV0aHJvdzEoMSkpOworfSkoKTsKKworLy8gVGVzdCB0aGF0IHJldGhy
b3cgZXhwcmVzc2lvbnMgY2FuIHRhcmdldCBjYXRjaC1hbGwgYmxvY2tzLgorKGZ1bmN0aW9uIFRl
c3RSZXRocm93SW5DYXRjaEFsbCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVp
bGRlci5hZGRGdW5jdGlvbigicmV0aHJvdzAiLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNl
cHQsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJSZXRocm93LCAwLAor
ICAgICAgICBrRXhwckVuZCwKKyAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEZ1bmN0
aW9uKCJyZXRocm93MSIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhw
clRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICBr
RXhwckNhdGNoQWxsLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4
cHJJMzJFcXosCisgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4
cHJSZXRocm93LCAxLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgIGtFeHBySTMyQ29u
c3QsIDIzLAorICAgICAgICBrRXhwckVuZAorICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIu
YWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3Rh
bmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFu
Y2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnJldGhy
b3cwKCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4
LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93MSgwKSk7CisgIGFzc2VydEVxdWFs
cygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93MSgxKSk7Cit9KSgpOworCisvLyBUZXN0IHRo
YXQgcmV0aHJvdyBleHByZXNzaW9uIHByb3Blcmx5IHRhcmdldCB0aGUgY29ycmVjdCBzdXJyb3Vu
ZGluZyB0cnkKKy8vIGJsb2NrIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIG11bHRpcGxlIGhhbmRs
ZXJzIGJlaW5nIGludm9sdmVkLgorKGZ1bmN0aW9uIFRlc3RSZXRocm93TmVzdGVkKCkgeworICBs
ZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1
aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInJldGhyb3dfbmVzdGVkIiwga1NpZ19p
X2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAg
ICAgICBrRXhwclRocm93LCBleGNlcHQyLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQyLAor
ICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4
Y2VwdDEsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAgICAgICAgICAgIGtFeHBy
TG9jYWxHZXQsIDAsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAwLAorICAgICAgICAgICAg
a0V4cHJJMzJFcSwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAg
ICAga0V4cHJSZXRocm93LCAxLAorICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICBr
RXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAg
ICAgIGtFeHBySTMyRXEsCisgICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAg
ICAgICAgIGtFeHByUmV0aHJvdywgMiwKKyAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAg
ICAga0V4cHJJMzJDb25zdCwgMjMsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHBy
RW5kLAorICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDEi
LCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDEpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgy
Iiwga0V4dGVybmFsVGFnLCBleGNlcHQyKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0
YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9y
dHMuZXgxLCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X25lc3RlZCgwKSk7Cisg
IGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgyLCBbXSwgKCkg
PT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X25lc3RlZCgxKSk7CisgIGFzc2VydEVxdWFscygy
MywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X25lc3RlZCgyKSk7Cit9KSgpOworCisvLyBUZXN0
IHRoYXQgYW4gZXhjZXB0aW9uIGJlaW5nIHJldGhyb3cgY2FuIGJlIGNhdWdodCBieSBhbm90aGVy
IGxvY2FsIGNhdGNoCisvLyBibG9jayBpbiB0aGUgc2FtZSBmdW5jdGlvbiB3aXRob3V0IGV2ZXIg
dW53aW5kaW5nIHRoZSBhY3RpdmF0aW9uLgorKGZ1bmN0aW9uIFRlc3RSZXRocm93UmVjYXRjaCgp
IHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2Vw
dCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigicmV0
aHJvd19yZWNhdGNoIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBy
VHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgIGtF
eHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAg
ICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJJMzJFcXosCisgICAgICAg
ICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgIGtFeHByUmV0aHJvdywgMiwK
KyAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgNDIsCisg
ICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwg
MjMsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByRW5kLAorICBdKS5leHBvcnRG
dW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhj
ZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2Vy
dEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93X3JlY2F0Y2goMCkpOworICBhc3Nl
cnRFcXVhbHMoNDIsIGluc3RhbmNlLmV4cG9ydHMucmV0aHJvd19yZWNhdGNoKDEpKTsKK30pKCk7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1zaGFyZWQuanMgYi9KU1Rl
c3RzL3dhc20vdjgvZXhjZXB0aW9ucy1zaGFyZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODUyZjViYThhMTM3
MTYxZmY3NTc3NWE0YzllMjEwZjkwY2QyODgzNQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMv
d2FzbS92OC9leGNlcHRpb25zLXNoYXJlZC5qcwpAQCAtMCwwICsxLDE1MyBAQAorLy8gQ29weXJp
Z2h0IDIwMTggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdz
OiAtLWV4cG9zZS13YXNtIC0tZXhwZXJpbWVudGFsLXdhc20tZWgKKworbG9hZCgid2FzbS1tb2R1
bGUtYnVpbGRlci5qcyIpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcmV0dXJuIGEgbmV3IGV4
cG9ydGVkIGV4Y2VwdGlvbiB3aXRoIHRoZSB7a1NpZ192X3Z9IHR5cGUKKy8vIHNpZ25hdHVyZSBm
cm9tIGFuIGFub255bW91cyBtb2R1bGUuIFRoZSB1bmRlcmx5aW5nIG1vZHVsZSBpcyB0aHJvd24g
YXdheS4KK2Z1bmN0aW9uIE5ld0V4cG9ydGVkRXhjZXB0aW9uKCkgeworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWco
a1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcs
IGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgcmV0
dXJuIGluc3RhbmNlLmV4cG9ydHMuZXg7Cit9CisKKy8vIENoZWNrIHRoYXQgYW4gaW5zdGFuY2Ug
bWF0Y2hlcyBhbiBleGNlcHRpb24gdGhyb3duIGJ5IGl0c2VsZiwgZXZlbiB3aGVuIHRoZQorLy8g
ZXhjZXB0aW9uIGlzIHJlLXRocm93biBieSBhIHJlZ3VsYXIgSmF2YVNjcmlwdCBmdW5jdGlvbi4K
KyhmdW5jdGlvbiBUZXN0U2luZ2xlSW5zdGFuY2UoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdh
c21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBzaWdfaW5kZXggPSBidWlsZGVyLmFkZFR5cGUoa1Np
Z192X3YpOworICBsZXQgZnVuID0gYnVpbGRlci5hZGRJbXBvcnQoIm0iLCAiZiIsIHNpZ19pbmRl
eCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oInRocm93Iiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAg
IGtFeHByVGhyb3csIGV4Y2VwdAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFk
ZEZ1bmN0aW9uKCJjYXRjaCIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBr
RXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBmdW4sCisg
ICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5l
eHBvcnRGdW5jKCk7CisgIGxldCBleF9vYmogPSBuZXcgRXJyb3IoIm15IGV4Y2VwdGlvbiIpOwor
ICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBmOiBmdW5jdGlvbigp
IHsgdGhyb3cgZXhfb2JqIH19fSk7CisKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlLmV4
cG9ydHMudGhyb3coKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgYXNzZXJ0VGhyb3dzRXF1
YWxzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2goKSwgZXhfb2JqKTsKKyAgdHJ5IHsKKyAg
ICBpbnN0YW5jZS5leHBvcnRzLnRocm93KCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBleF9vYmog
PSBlOworICB9CisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmNh
dGNoKCkpOworfSkoKTsKKworLy8gQ2hlY2sgdGhhdCB0d28gaW5zdGFuY2VzIGRpc3Rpbmd1aXNo
IHRoZWlyIGluZGl2aWR1YWwgZXhjZXB0aW9ucyBpZiB0aGV5IGFyZQorLy8gbm90IHNoYXJlZCwg
ZXZlbiB3aGVuIGRlY2xhcmVkIGJ5IHRoZSBzYW1lIHVuZGVybHlpbmcgbW9kdWxlLgorKGZ1bmN0
aW9uIFRlc3RNdWx0aUluc3RhbmNlTm9uU2hhcmVkKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBX
YXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgc2lnX2luZGV4ID0gYnVpbGRlci5hZGRUeXBlKGtT
aWdfdl92KTsKKyAgbGV0IGZ1biA9IGJ1aWxkZXIuYWRkSW1wb3J0KCJtIiwgImYiLCBzaWdfaW5k
ZXgpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAg
ICBrRXhwclRocm93LCBleGNlcHQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5h
ZGRGdW5jdGlvbigiY2F0Y2giLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAg
a0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgZnVuLAor
ICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSku
ZXhwb3J0RnVuYygpOworICBsZXQgZXhfb2JqID0gbmV3IEVycm9yKCJteSBleGNlcHRpb24iKTsK
KyAgbGV0IGluc3RhbmNlMSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGY6IGFzc2VydFVu
cmVhY2hhYmxlIH19KTsKKyAgbGV0IGluc3RhbmNlMiA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBt
OiB7IGY6IGZ1bmN0aW9uKCkgeyB0aHJvdyBleF9vYmogfX19KTsKKworICBhc3NlcnRUaHJvd3Mo
KCkgPT4gaW5zdGFuY2UxLmV4cG9ydHMudGhyb3coKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsK
KyAgYXNzZXJ0VGhyb3dzRXF1YWxzKCgpID0+IGluc3RhbmNlMi5leHBvcnRzLmNhdGNoKCksIGV4
X29iaik7CisgIHRyeSB7CisgICAgaW5zdGFuY2UxLmV4cG9ydHMudGhyb3coKTsKKyAgfSBjYXRj
aCAoZSkgeworICAgIGV4X29iaiA9IGU7CisgIH0KKyAgYXNzZXJ0VGhyb3dzRXF1YWxzKCgpID0+
IGluc3RhbmNlMi5leHBvcnRzLmNhdGNoKCksIGV4X29iaik7Cit9KSgpOworCisvLyBDaGVjayB0
aGF0IHR3byBpbnN0YW5jZXMgbWF0Y2ggdGhlaXIgZXhjZXB0aW9ucyBpZiB0aGV5IGFyZSBzaGFy
ZWQgcHJvcGVybHksCisvLyBldmVuIGlmIHRoZSBsb2NhbCBleGNlcHRpb24gaW5kZXggb2YgZXhw
b3J0IGFuZCBpbXBvcnQgaXMgZGlmZmVyZW50LgorKGZ1bmN0aW9uIFRlc3RNdWx0aUluc3RhbmNl
U2hhcmVkKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBs
ZXQgc2lnX2luZGV4ID0gYnVpbGRlci5hZGRUeXBlKGtTaWdfdl92KTsKKyAgbGV0IGZ1biA9IGJ1
aWxkZXIuYWRkSW1wb3J0KCJtIiwgImYiLCBzaWdfaW5kZXgpOworICBsZXQgZXhjZXB0MSA9IGJ1
aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgxIiwga1NpZ192X3YpOworICBsZXQgZXhjZXB0
MiA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQo
ImV4MiIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Mik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRo
cm93Iiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVGhyb3csIGV4
Y2VwdDIKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0
Y2giLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNt
Vm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgZnVuLAorICAgICAgICBrRXhwckNh
dGNoLCBleGNlcHQxLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsK
KyAgbGV0IGV4X29iaiA9IG5ldyBFcnJvcigibXkgZXhjZXB0aW9uIik7CisgIGxldCBpbnN0YW5j
ZTEgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBmOiBhc3NlcnRVbnJlYWNoYWJsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4MTogTmV3RXhwb3J0
ZWRFeGNlcHRpb24oKSB9fSk7CisgIGxldCBpbnN0YW5jZTIgPSBidWlsZGVyLmluc3RhbnRpYXRl
KHsgbTogeyBmOiBmdW5jdGlvbigpIHsgdGhyb3cgZXhfb2JqIH0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleDE6IGluc3RhbmNlMS5leHBvcnRzLmV4MiB9
fSk7CisKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlMS5leHBvcnRzLnRocm93KCksIFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFzc2VydFRocm93c0VxdWFscygoKSA9PiBpbnN0YW5j
ZTIuZXhwb3J0cy5jYXRjaCgpLCBleF9vYmopOworICB0cnkgeworICAgIGluc3RhbmNlMS5leHBv
cnRzLnRocm93KCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBleF9vYmogPSBlOworICB9CisgIGFz
c2VydERvZXNOb3RUaHJvdygoKSA9PiBpbnN0YW5jZTIuZXhwb3J0cy5jYXRjaCgpKTsKK30pKCk7
CisKKy8vIENoZWNrIHRoYXQgdHdvIGluc3RhbmNlcyBiYXNlZCBvbiBkaWZmZXJlbnQgbW9kdWxl
cyBtYXRjaCB0aGVpciBleGNlcHRpb25zIGlmCisvLyB0aGV5IGFyZSBzaGFyZWQgcHJvcGVybHks
IGV2ZW4gaWYgdGhlIGxvY2FsIGV4Y2VwdGlvbiBpbmRleCBpcyBkaWZmZXJlbnQuCisoZnVuY3Rp
b24gVGVzdE11bHRpTW9kdWxlU2hhcmVkKCkgeworICBsZXQgYnVpbGRlcjEgPSBuZXcgV2FzbU1v
ZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyMS5hZGRUYWcoa1NpZ192X3Yp
OworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIxLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIx
LmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDIpOworICBidWlsZGVy
MS5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAg
ICAga0V4cHJUaHJvdywgZXhjZXB0MgorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgYnVp
bGRlcjIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IHNpZ19pbmRleCA9IGJ1aWxk
ZXIyLmFkZFR5cGUoa1NpZ192X3YpOworICBsZXQgZnVuID0gYnVpbGRlcjIuYWRkSW1wb3J0KCJt
IiwgImYiLCBzaWdfaW5kZXgpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlcjIuYWRkSW1wb3J0ZWRU
YWcoIm0iLCAiZXgiLCBrU2lnX3Zfdik7CisgIGJ1aWxkZXIyLmFkZEZ1bmN0aW9uKCJjYXRjaCIs
IGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lk
LAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBmdW4sCisgICAgICAgIGtFeHByQ2F0Y2gs
IGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxl
dCBleF9vYmogPSBuZXcgRXJyb3IoIm15IGV4Y2VwdGlvbiIpOworICBsZXQgaW5zdGFuY2UxID0g
YnVpbGRlcjEuaW5zdGFudGlhdGUoKTsKKyAgbGV0IGluc3RhbmNlMiA9IGJ1aWxkZXIyLmluc3Rh
bnRpYXRlKHsgbTogeyBmOiBmdW5jdGlvbigpIHsgdGhyb3cgZXhfb2JqIH0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXg6IGluc3RhbmNlMS5leHBvcnRz
LmV4IH19KTsKKworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UxLmV4cG9ydHMudGhyb3co
KSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzKCgpID0+IGlu
c3RhbmNlMi5leHBvcnRzLmNhdGNoKCksIGV4X29iaik7CisgIHRyeSB7CisgICAgaW5zdGFuY2Ux
LmV4cG9ydHMudGhyb3coKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGV4X29iaiA9IGU7CisgIH0K
KyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+IGluc3RhbmNlMi5leHBvcnRzLmNhdGNoKCkpOwor
fSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXR5cGUtcmVmbGVj
dGlvbi5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXR5cGUtcmVmbGVjdGlvbi5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iNGMyMGVkYWU4ZTAyMzVhYmY3YzJlMTllYmM3MTgwZmFiMDhjZjU5Ci0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtdHlwZS1yZWZsZWN0aW9u
LmpzCkBAIC0wLDAgKzEsNDcgQEAKKy8vIENvcHlyaWdodCAyMDIxIHRoZSBWOCBwcm9qZWN0IGF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1leHBlcmltZW50YWwtd2FzbS1laCAt
LWV4cGVyaW1lbnRhbC13YXNtLXR5cGUtcmVmbGVjdGlvbgorCitsb2FkKCJ3YXNtLW1vZHVsZS1i
dWlsZGVyLmpzIik7CisKK2xldCB0ZXN0Y2FzZXMgPSBbCit7dHlwZXM6IHtwYXJhbWV0ZXJzOltd
fSwgc2lnOiBrU2lnX3Zfdn0sCit7dHlwZXM6IHtwYXJhbWV0ZXJzOlsiaTMyIl19LCBzaWc6IGtT
aWdfdl9pfSwKK3t0eXBlczoge3BhcmFtZXRlcnM6WyJpNjQiXX0sIHNpZzoga1NpZ192X2x9LAor
e3R5cGVzOiB7cGFyYW1ldGVyczpbImY2NCIsICJmNjQiLCAiaTMyIl19LCBzaWc6IGtTaWdfdl9k
ZGl9LAore3R5cGVzOiB7cGFyYW1ldGVyczpbImYzMiJdfSwgc2lnOiBrU2lnX3ZfZn0sCitdOwor
CisoZnVuY3Rpb24gVGVzdEV4cG9ydCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKworICB0ZXN0Y2FzZXMuZm9yRWFjaChmdW5jdGlvbihleHBlY3RlZCwgaSkg
eworICAgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhleHBlY3RlZC5zaWcpOworICAgIGJ1
aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIgKyBpLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7Cisg
IH0pOworCisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgdGVzdGNh
c2VzLmZvckVhY2goZnVuY3Rpb24oZXhwZWN0ZWQsIGkpIHsKKyAgICBhc3NlcnRFcXVhbHMoaW5z
dGFuY2UuZXhwb3J0c1siZXgiICsgaV0udHlwZSgpLCBleHBlY3RlZC50eXBlcyk7CisgIH0pOwor
fSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJbXBvcnRFeHBvcnQoKSB7CisKKyAgbGV0IGJ1aWxkZXIg
PSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGltcG9ydHMgPSB7bToge319OworCisg
IHRlc3RjYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGV4cGVjdGVkLCBpKSB7CisgICAgbGV0IHQgPSBu
ZXcgV2ViQXNzZW1ibHkuVGFnKGV4cGVjdGVkLnR5cGVzKTsKKyAgICBsZXQgaW5kZXggPSBidWls
ZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4IiArIGksIGV4cGVjdGVkLnNpZyk7CisgICAgYnVp
bGRlci5hZGRFeHBvcnRPZktpbmQoImV4IiArIGksIGtFeHRlcm5hbFRhZywgaW5kZXgpOworICAg
IGltcG9ydHMubVsiZXgiICsgaV0gPSB0OworICB9KTsKKworICBsZXQgaW5zdGFuY2UgPSBidWls
ZGVyLmluc3RhbnRpYXRlKGltcG9ydHMpOworICB0ZXN0Y2FzZXMuZm9yRWFjaChmdW5jdGlvbihl
eHBlY3RlZCwgaSkgeworICAgIGFzc2VydEVxdWFscyhpbnN0YW5jZS5leHBvcnRzWyJleCIgKyBp
XS50eXBlKCksIGV4cGVjdGVkLnR5cGVzKTsKKyAgfSkKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vdjgvZXhjZXB0aW9ucy11dGlscy5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRp
b25zLXV0aWxzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiZTE5MTlkZWU2ODAzMjNjZWIwOTM5NjRmZTYxYTk1
ZjA2ZGU2OTcKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy11
dGlscy5qcwpAQCAtMCwwICsxLDI3IEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVj
dCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tYWxsb3ctbmF0aXZlcy1zeW50
YXgKKworLy8gVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIGxvYWRlZCBieSBvdGhlciB0ZXN0
cyB0byBwcm92aWRlIHV0aWxpdHkgbWV0aG9kcworLy8gcmVxdWlyaW5nIG5hdGl2ZXMgc3ludGF4
IChhbmQgaGVuY2Ugbm90IHN1aXRlZCBmb3IgdGhlIG1qc3VuaXQuanMgZmlsZSkuCisKK2Z1bmN0
aW9uIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIHRhZywgdmFsdWVzLCBjb2RlKSB7CisgIHRy
eSB7CisgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICBjb2RlKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgIGV2YWwoY29kZSk7CisgICAgfQorICB9IGNhdGNoIChlKSB7
CisgICAgYXNzZXJ0SW5zdGFuY2VvZihlLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICAgIGFz
c2VydFRydWUoZS5pcyh0YWcpKTsKKyAgICBhc3NlcnRFcXVhbHModmFsdWVzLmxlbmd0aCwgdGFn
LnR5cGUoKS5wYXJhbWV0ZXJzLmxlbmd0aCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1
ZXMubGVuZ3RoOyArK2kpCisgICAgICBhc3NlcnRFcXVhbHModmFsdWVzW2ldLCBlLmdldEFyZyh0
YWcsIGkpKTsKKyAgICByZXR1cm47ICAvLyBTdWNjZXNzLgorICB9CisgIHRocm93IG5ldyBNanNV
bml0QXNzZXJ0aW9uRXJyb3IoJ0RpZCBub3QgdGhyb3cgZXhwZWN0ZWQgPCcgKyB0YWcgKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc+IHdpdGggdmFsdWVzOiAnICsgdmFsdWVz
KTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLmpzIGIvSlNUZXN0
cy93YXNtL3Y4L2V4Y2VwdGlvbnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzkxNTUwNDUwNDk4ODE3MzA3ZDI5
NDc1MDJhYjJhZmJjMDRjNjJhNAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9l
eGNlcHRpb25zLmpzCkBAIC0wLDAgKzEsMTA4NyBAQAorLy8gQ29weXJpZ2h0IDIwMTggdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cG9zZS13YXNt
IC0tZXhwZXJpbWVudGFsLXdhc20tZWggLS1hbGxvdy1uYXRpdmVzLXN5bnRheAorCitsb2FkKCJ3
YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7Citsb2FkKCJleGNlcHRpb25zLXV0aWxzLmpzIik7CisK
Ky8vIFRoZSBmb2xsb3dpbmcgbWV0aG9kIGRvZXNuJ3QgYXR0ZW1wdCB0byBjYXRjaCBhbiByYWlz
ZWQgZXhjZXB0aW9uLgorKGZ1bmN0aW9uIFRlc3RUaHJvd1NpbXBsZSgpIHsKKyAgbGV0IGJ1aWxk
ZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRk
VGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfaWZfcGFyYW1fbm90
X3plcm8iLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdl
dCwgMCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMCwKKyAgICAgICAga0V4cHJJMzJOZSwKKyAg
ICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwK
KyAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDEKKyAgICAgIF0pLmV4
cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFn
LCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAg
YXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfaWZfcGFyYW1fbm90X3plcm8o
MCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBb
XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19pZl9wYXJhbV9ub3RfemVybygxMCkpOwor
ICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkg
PT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19pZl9wYXJhbV9ub3RfemVybygtMSkpOworfSkoKTsK
KworLy8gVGVzdCB0aGF0IGVtcHR5IHRyeS9jYXRjaCBibG9ja3Mgd29yay4KKyhmdW5jdGlvbiBU
ZXN0Q2F0Y2hFbXB0eUJsb2NrcygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVp
bGRlci5hZGRGdW5jdGlvbigiY2F0Y2hfZW1wdHlfdHJ5Iiwga1NpZ192X3YpCisgICAgICAuYWRk
Qm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgIGtFeHByQ2F0Y2gs
IGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxl
dCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnREb2VzTm90VGhy
b3coaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9lbXB0eV90cnkpOworfSkoKTsKKworLy8gTm93IHRo
YXQgd2Uga25vdyB0aHJvd2luZyB3b3Jrcywgd2UgdGVzdCBjYXRjaGluZyB0aGUgZXhjZXB0aW9u
cyB3ZSByYWlzZS4KKyhmdW5jdGlvbiBUZXN0Q2F0Y2hTaW1wbGUoKSB7CisgIGxldCBidWlsZGVy
ID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRh
ZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInNpbXBsZV90aHJvd19jYXRjaF90
b18wXzEiLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtX
YXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJJMzJF
cXosCisgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJv
dywgZXhjZXB0LAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgIGtFeHBySTMyQ29uc3Qs
IDQyLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJJMzJDb25z
dCwgMjMsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMjMsIGlu
c3RhbmNlLmV4cG9ydHMuc2ltcGxlX3Rocm93X2NhdGNoX3RvXzBfMSgwKSk7CisgIGFzc2VydEVx
dWFscyg0MiwgaW5zdGFuY2UuZXhwb3J0cy5zaW1wbGVfdGhyb3dfY2F0Y2hfdG9fMF8xKDEpKTsK
K30pKCk7CisKKyhmdW5jdGlvbiBUZXN0VHJhcE5vdENhdWdodCgpIHsKKyAgbGV0IGJ1aWxkZXIg
PSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndW5yZWFj
aGFibGVfaW5fdHJ5Jywga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBy
VHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAga0V4
cHJDYXRjaEFsbCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAg
bGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFRyYXBzKGtU
cmFwVW5yZWFjaGFibGUsICgpID0+IGluc3RhbmNlLmV4cG9ydHMudW5yZWFjaGFibGVfaW5fdHJ5
KCkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RUcmFwSW5DYWxsZWVOb3RDYXVnaHQoKSB7Cisg
IGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBmdW5jX2RpdiA9
IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ2RpdicsIGtTaWdfaV9paSkuYWRkQm9keShbCisgICAga0V4
cHJMb2NhbEdldCwgMCwKKyAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgIGtFeHBySTMyRGl2VQor
ICBdKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndHJhcF9pbl9jYWxsZWUnLCBrU2lnX2lfaWkp
CisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAg
ICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAg
ICAga0V4cHJDYWxsRnVuY3Rpb24sIGZ1bmNfZGl2LmluZGV4LAorICAgICAgICBrRXhwckNhdGNo
QWxsLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDExLAorICAgICAgICBrRXhwckVuZAorICAg
ICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRl
KCk7CisKKyAgYXNzZXJ0RXF1YWxzKDMsIGluc3RhbmNlLmV4cG9ydHMudHJhcF9pbl9jYWxsZWUo
NywgMikpOworICBhc3NlcnRUcmFwcyhrVHJhcERpdkJ5WmVybywgKCkgPT4gaW5zdGFuY2UuZXhw
b3J0cy50cmFwX2luX2NhbGxlZSgxLCAwKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdFRyYXBW
aWFKU05vdENhdWdodCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIo
KTsKKyAgbGV0IGltcCA9IGJ1aWxkZXIuYWRkSW1wb3J0KCdpbXAnLCAnb3J0Jywga1NpZ19pX3Yp
OworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCdkaXYnLCBrU2lnX2lfaWkpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDEs
CisgICAgICAgIGtFeHBySTMyRGl2VQorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCdjYWxsX2ltcG9ydCcsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWwor
ICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24s
IGltcCwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAx
MSwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGV4Y2Vw
dGlvbiA9IHVuZGVmaW5lZDsKKyAgbGV0IGluc3RhbmNlOworICBmdW5jdGlvbiBqc19pbXBvcnQo
KSB7CisgICAgdHJ5IHsKKyAgICAgIGluc3RhbmNlLmV4cG9ydHMuZGl2KDEsIDApOworICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgIGV4Y2VwdGlvbiA9IGU7CisgICAgfQorICAgIHRocm93IGV4Y2Vw
dGlvbjsKKyAgfQorICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoe2ltcDoge29ydDog
anNfaW1wb3J0fX0pOworCisgIGxldCBjYXVnaHQgPSB1bmRlZmluZWQ7CisgIHRyeSB7CisgICAg
bGV0IHJlcyA9IGluc3RhbmNlLmV4cG9ydHMuY2FsbF9pbXBvcnQoKTsKKyAgICBhc3NlcnRVbnJl
YWNoYWJsZSgnY2FsbF9pbXBvcnQgc2hvdWxkIHRyYXAsIGJ1dCByZXR1cm5lZCB3aXRoICcgKyBy
ZXMpOworICB9IGNhdGNoIChlKSB7CisgICAgY2F1Z2h0ID0gZTsKKyAgfQorICBhc3NlcnRTYW1l
KGV4Y2VwdGlvbiwgY2F1Z2h0KTsKKyAgYXNzZXJ0VGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2Fs
bF9pbXBvcnQsIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwga1RyYXBNc2dzW2tUcmFwRGl2Qnla
ZXJvXSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdE1hbnVhbGx5VGhyb3duUnVudGltZUVycm9y
Q2F1Z2h0KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBs
ZXQgaW1wID0gYnVpbGRlci5hZGRJbXBvcnQoJ2ltcCcsICdvcnQnLCBrU2lnX2lfdik7CisgIGJ1
aWxkZXIuYWRkRnVuY3Rpb24oJ2NhbGxfaW1wb3J0Jywga1NpZ19pX3YpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckNhbGxGdW5j
dGlvbiwgaW1wLAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICAgIGtFeHBySTMyQ29u
c3QsIDExLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBmdW5j
dGlvbiB0aHJvd19leGMoKSB7CisgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJv
cignTXkgdXNlciB0ZXh0Jyk7CisgIH0KKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50
aWF0ZSh7aW1wOiB7b3J0OiB0aHJvd19leGN9fSk7CisKKyAgYXNzZXJ0RXF1YWxzKDExLCBpbnN0
YW5jZS5leHBvcnRzLmNhbGxfaW1wb3J0KCkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RFeG5X
aXRoV2FzbVByb3RvTm90Q2F1Z2h0KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBs
ZXQgaW1wID0gYnVpbGRlci5hZGRJbXBvcnQoJ2ltcCcsICdvcnQnLCBrU2lnX3Zfdik7CisgIGxl
dCB0aHJvd19mbiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93Jywga1NpZ192X3YpCisgICAg
ICAgICAgICAgICAgICAgICAuYWRkQm9keShba0V4cHJUaHJvdywgZXhjZXB0XSkKKyAgICAgICAg
ICAgICAgICAgICAgIC5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3Qn
LCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAgLy8gQ2FsbGluZyAidGhyb3ci
IGRpcmVjdGx5IHNob3VsZCBwcm9kdWNlIHRoZSBleHBlY3RlZCBleGNlcHRpb24uCisgICAgICAg
IGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIHRocm93
X2ZuLmluZGV4LAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByRW5k
LAorICAgICAgICAvLyBDYWxsaW5nIHRocm91Z2ggSlMgcHJvZHVjZXMgYSB3cmFwcGVkIGV4Y2Vw
dGlvbnMgd2hpY2ggZG9lcyBub3QgbWF0Y2gKKyAgICAgICAgLy8gdGhlIGNhdGNoLgorICAgICAg
ICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBpbXAs
CisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0p
LmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlOworICBsZXQgd3JhcHBlZF9leG47CisgIGZ1
bmN0aW9uIGpzX2ltcG9ydCgpIHsKKyAgICB0cnkgeworICAgICAgaW5zdGFuY2UuZXhwb3J0cy50
aHJvdygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHdyYXBwZWRfZXhuID0gbmV3IEVycm9y
KCk7CisgICAgICB3cmFwcGVkX2V4bi5fX3Byb3RvX18gPSBlOworICAgICAgdGhyb3cgd3JhcHBl
ZF9leG47CisgICAgfQorICB9CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7aW1w
OiB7b3J0OiBqc19pbXBvcnR9fSk7CisgIGxldCBjYXVnaHQgPSB1bmRlZmluZWQ7CisgIHRyeSB7
CisgICAgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBjYXVn
aHQgPSBlOworICB9CisgIGFzc2VydFRydWUoISFjYXVnaHQsICdzaG91bGQgaGF2ZSB0cmFwcGVk
Jyk7CisgIGFzc2VydEVxdWFscyhjYXVnaHQsIHdyYXBwZWRfZXhuKTsKKyAgYXNzZXJ0SW5zdGFu
Y2VvZihjYXVnaHQuX19wcm90b19fLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfSkoKTsKKwor
KGZ1bmN0aW9uIFRlc3RTdGFja092ZXJmbG93Tm90Q2F1Z2h0KCkgeworICBmdW5jdGlvbiBzdGFj
a19vdmVyZmxvdygpIHsKKyAgICAvLyVUaHJvd1N0YWNrT3ZlcmZsb3coKTsKKyAgfQorICBsZXQg
YnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgc2lnX3ZfdiA9IGJ1aWxk
ZXIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBrU3RhY2tPdmVyZmxvdyA9IGJ1aWxkZXIuYWRk
SW1wb3J0KCcnLCAnc3RhY2tfb3ZlcmZsb3cnLCBzaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5j
dGlvbigndHJ5X3N0YWNrX292ZXJmbG93Jywga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisg
ICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24s
IDAsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5l
eHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeycnOiB7
J3N0YWNrX292ZXJmbG93Jzogc3RhY2tfb3ZlcmZsb3d9fSk7CisKKyAgYXNzZXJ0VGhyb3dzKCgp
ID0+IGluc3RhbmNlLmV4cG9ydHMudHJ5X3N0YWNrX292ZXJmbG93KCksCisgICAgICBSYW5nZUVy
cm9yLCAnTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQnKTsKK30pOworLy8gRklYTUU6
IG5lZWRzIHN0YWNrIG92ZXJmbG93IGhlbHBlcgorLy8oKTsKKworLy8gVGVzdCB0aGF0IHdlIGNh
biBkaXN0aW5ndWlzaCB3aGljaCBleGNlcHRpb24gd2FzIHRocm93biBieSB1c2luZyBhIGNhc2Nh
ZGVkCisvLyBzZXF1ZW5jZSBvZiBuZXN0ZWQgdHJ5IGJsb2NrcyB3aXRoIGEgc2luZ2xlIGNhdGNo
IGJsb2NrIGVhY2guCisoZnVuY3Rpb24gVGVzdENhdGNoQ29tcGxleDEoKSB7CisgIGxldCBidWls
ZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92
KTsKKyAgbGV0IGV4Y2VwdDMgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oImNhdGNoX2NvbXBsZXgiLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkz
MiwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICBrRXhwckkzMkVx
eiwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAga0V4cHJU
aHJvdywgZXhjZXB0MSwKKyAgICAgICAgICAgIGtFeHByRWxzZSwKKyAgICAgICAgICAgICAga0V4
cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAg
ICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAg
ICAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDIsCisgICAgICAgICAgICAgIGtFeHByRWxz
ZSwKKyAgICAgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQzLAorICAgICAgICAgICAgICBr
RXhwckVuZCwKKyAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAga0V4cHJJMzJDb25z
dCwgMiwKKyAgICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQxLAorICAgICAgICAgICAga0V4cHJJ
MzJDb25zdCwgMywKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhj
ZXB0MiwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCA0LAorICAgICAgICBrRXhwckVuZCwKKyAg
ICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4
dGVybmFsVGFnLCBleGNlcHQzKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0
ZSgpOworCisgIGFzc2VydEVxdWFscygzLCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoX2NvbXBsZXgo
MCkpOworICBhc3NlcnRFcXVhbHMoNCwgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9jb21wbGV4KDEp
KTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW10s
ICgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hfY29tcGxleCgyKSk7Cit9KSgpOworCisvLyBU
ZXN0IHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHdoaWNoIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGJ5
IHVzaW5nIGEgc2luZ2xlCisvLyB0cnkgYmxvY2sgd2l0aCBtdWx0aXBsZSBhc3NvY2lhdGVkIGNh
dGNoIGJsb2NrcyBpbiBzZXF1ZW5jZS4KKyhmdW5jdGlvbiBUZXN0Q2F0Y2hDb21wbGV4MigpIHsK
KyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEg
PSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5hZGRU
YWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MyA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsK
KyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2hfY29tcGxleCIsIGtTaWdfaV9pKQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJM
b2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICBrRXhwcklmLCBr
V2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQxLAorICAgICAgICAgIGtF
eHByRWxzZSwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICBrRXhw
ckkzMkNvbnN0LCAxLAorICAgICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAgICAgIGtFeHBy
SWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MiwKKyAgICAg
ICAgICAgIGtFeHByRWxzZSwKKyAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MywKKyAg
ICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAgICAgICAga0V4
cHJJMzJDb25zdCwgMywKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MiwKKyAgICAgICAgICBr
RXhwckkzMkNvbnN0LCA0LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQz
KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVx
dWFscygzLCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoX2NvbXBsZXgoMCkpOworICBhc3NlcnRFcXVh
bHMoNCwgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9jb21wbGV4KDEpKTsKKyAgYXNzZXJ0V2FzbVRo
cm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW10sICgpID0+IGluc3RhbmNlLmV4
cG9ydHMuY2F0Y2hfY29tcGxleCgyKSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nIGFuIGV4
Y2VwdGlvbiB3aXRoIG11bHRpcGxlIHZhbHVlcy4KKyhmdW5jdGlvbiBUZXN0VGhyb3dNdWx0aXBs
ZVZhbHVlcygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAg
bGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9paSk7CisgIGJ1aWxkZXIuYWRkRnVu
Y3Rpb24oInRocm93XzFfMiIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBr
RXhwckkzMkNvbnN0LCAxLAorICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhw
clRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhw
b3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0g
YnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGlu
c3RhbmNlLmV4cG9ydHMuZXgsIFsxLCAyXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd18x
XzIoKSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nL2NhdGNoaW5nIHRoZSBpMzIgcGFyYW1l
dGVyIHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd0NhdGNoUGFyYW1JKCkgeworICBsZXQgYnVp
bGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X2kpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19jYXRjaF9wYXJh
bSIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21J
MzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwclRocm93LCBl
eGNlcHQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJDYXRjaCwg
ZXhjZXB0LAorICAgICAgICAgIGtFeHByUmV0dXJuLAorICAgICAgICBrRXhwckVuZCwKKyAgICAg
IF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgp
OworCisgIGFzc2VydEVxdWFscygwLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFt
KDApKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFy
YW0oMSkpOworICBhc3NlcnRFcXVhbHMoMTAsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hf
cGFyYW0oMTApKTsKK30pKCk7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3duIGV4
Y2VwdGlvbiB3aXRoIGFuIGludGVnZXIgZXhjZXB0aW9uLgorKGZ1bmN0aW9uIFRlc3RUaHJvd1Bh
cmFtSSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0
IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9pKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlv
bigidGhyb3dfcGFyYW0iLCBrU2lnX3ZfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4
cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSkuZXhw
b3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcs
IGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBh
c3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbNV0sICgpID0+
IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oNSkpOworICBhc3NlcnRXYXNtVGhyb3dzKGlu
c3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbNDI0MjQyXSwgKCkgPT4gaW5zdGFuY2UuZXhw
b3J0cy50aHJvd19wYXJhbSg0MjQyNDIpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcvY2F0
Y2hpbmcgdGhlIGYzMiBwYXJhbWV0ZXIgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hQ
YXJhbUYoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxl
dCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfZik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rp
b24oInRocm93X2NhdGNoX3BhcmFtIiwga1NpZ19mX2YpCisgICAgICAuYWRkQm9keShbCisgICAg
ICAgIGtFeHByVHJ5LCBrV2FzbUYzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAg
ICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckYzMkNvbnN0LCAwLCAw
LCAwLCAwLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJSZXR1
cm4sCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5z
dGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDUuMCwgaW5z
dGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSg1LjApKTsKKyAgYXNzZXJ0RXF1YWxzKDEw
LjUsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oMTAuNSkpOworfSkoKTsKKwor
Ly8gVGVzdCB0aGUgZW5jb2Rpbmcgb2YgYSB0aHJvd24gZXhjZXB0aW9uIHdpdGggYSBmbG9hdCB2
YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dQYXJhbUYoKSB7CisgIGxldCBidWlsZGVyID0gbmV3
IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2ln
X3ZfZik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X3BhcmFtIiwga1NpZ192X2YpCisg
ICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHBy
VGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBv
cnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBi
dWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5z
dGFuY2UuZXhwb3J0cy5leCwgWzUuMF0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFy
YW0oNS4wKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMu
ZXgsIFsxMC41XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSgxMC41KSk7Cit9
KSgpOworCisvLyBUZXN0IHRocm93aW5nL2NhdGNoaW5nIGFuIEk2NCB2YWx1ZQorKGZ1bmN0aW9u
IFRlc3RUaHJvd0NhdGNoUGFyYW1MKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2wpOworICBi
dWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19jYXRjaF9wYXJhbSIsIGtTaWdfaV9pKQorICAgICAg
LmFkZExvY2FscyhrV2FzbUk2NCwgMSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJM
b2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJJNjRVQ29udmVydEkzMiwKKyAgICAgICAga0V4cHJM
b2NhbFNldCwgMSwKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHBy
TG9jYWxHZXQsIDEsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtF
eHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBr
RXhwckxvY2FsR2V0LCAxLAorICAgICAgICAgIGtFeHBySTY0RXEsCisgICAgICAgICAga0V4cHJJ
Ziwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgIGtF
eHByRWxzZSwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDAsCisgICAgICAgICAga0V4cHJF
bmQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5z
dGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3Rh
bmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oNSkpOworICBhc3NlcnRFcXVhbHMoMSwgaW5z
dGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgwKSk7CisgIGFzc2VydEVxdWFscygxLCBp
bnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKC0xKSk7Cit9KSgpOworCisvLyBUZXN0
IHRoZSBlbmNvZGluZyBvZiBhIHRocm93biBleGNlcHRpb24gd2l0aCBhbiBJNjQgdmFsdWUuCiso
ZnVuY3Rpb24gVGVzdFRocm93UGFyYW1MKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9k
dWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2wpOwor
ICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19wYXJhbSIsIGtTaWdfdl9paSkKKyAgICAgIC5h
ZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJJNjRVQ29u
dmVydEkzMiwKKyAgICAgICAga0V4cHJJNjRDb25zdCwgMzIsCisgICAgICAgIGtFeHBySTY0U2hs
LAorICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICBrRXhwckk2NFVDb252ZXJ0STMy
LAorICAgICAgICBrRXhwckk2NElvciwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAg
ICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0
ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUo
KTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBb
NDI5NDk2NzI5NjVuXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSgxMCwgNSkp
OworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbLTQy
OTQ5NjcyODNuXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSgtMSwgMTMpKTsK
K30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcvY2F0Y2hpbmcgdGhlIEY2NCBwYXJhbWV0ZXIgdmFs
dWUKKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFBhcmFtRCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBu
ZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtT
aWdfdl9kKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfY2F0Y2hfcGFyYW0iLCBrU2ln
X2RfZCkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtRjY0LAorICAg
ICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAor
ICAgICAgICAgIGtFeHByRjY0Q29uc3QsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAg
IGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclJldHVybiwKKyAgICAgICAga0V4
cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIu
aW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoNS4wLCBpbnN0YW5jZS5leHBvcnRzLnRo
cm93X2NhdGNoX3BhcmFtKDUuMCkpOworICBhc3NlcnRFcXVhbHMoMTAuNSwgaW5zdGFuY2UuZXhw
b3J0cy50aHJvd19jYXRjaF9wYXJhbSgxMC41KSk7Cit9KSgpOworCisvLyBUZXN0IHRoZSBlbmNv
ZGluZyBvZiBhIHRocm93biBleGNlcHRpb24gd2l0aCBhbiBmNjQgdmFsdWUuCisoZnVuY3Rpb24g
VGVzdFRocm93UGFyYW1EKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2QpOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJ0aHJvd19wYXJhbSIsIGtTaWdfdl9mKQorICAgICAgLmFkZEJvZHkoWwor
ICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckY2NENvbnZlcnRGMzIsCisg
ICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVp
bGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQg
aW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhp
bnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzUuMF0sICgpID0+IGluc3RhbmNlLmV4cG9y
dHMudGhyb3dfcGFyYW0oNS4wKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3Rh
bmNlLmV4cG9ydHMuZXgsIFsxMDAwMDAwMF0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3df
cGFyYW0oMTAwMDAwMDAuNSkpOworfSkoKTsKKworLy8gVGVzdCB0aGUgZW5jb2Rpbmcgb2YgYSBj
b21wdXRlZCBwYXJhbWV0ZXIgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93UGFyYW1Db21wdXRl
ZCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4
Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9pKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigi
dGhyb3dfZXhwcl93aXRoX3BhcmFtcyIsIGtTaWdfdl9kZGkpCisgICAgICAuYWRkQm9keShbCisg
ICAgICAgIC8vIHAyICogKHAwICsgbWluKHAwLCBwMSkpfDAgLSAyMAorICAgICAgICBrRXhwckxv
Y2FsR2V0LCAyLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckxvY2Fs
R2V0LCAwLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICBrRXhwckY2NE1pbiwK
KyAgICAgICAga0V4cHJGNjRBZGQsCisgICAgICAgIGtFeHBySTMyU0NvbnZlcnRGNjQsCisgICAg
ICAgIGtFeHBySTMyTXVsLAorICAgICAgICBrRXhwckkzMkNvbnN0LCAyMCwKKyAgICAgICAga0V4
cHJJMzJTdWIsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1
bmMoKQorICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2Vw
dCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRX
YXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbLThdLCAoKSA9PiBpbnN0
YW5jZS5leHBvcnRzLnRocm93X2V4cHJfd2l0aF9wYXJhbXMoMS41LCAyLjUsIDQpKTsKKyAgYXNz
ZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzEyXSwgKCkgPT4g
aW5zdGFuY2UuZXhwb3J0cy50aHJvd19leHByX3dpdGhfcGFyYW1zKDUuNywgMi41LCA0KSk7Cit9
KSgpOworCisvLyBOb3cgdGhhdCB3ZSBrbm93IGNhdGNoaW5nIHdvcmtzIGxvY2FsbHksIHdlIHRl
c3QgY2F0Y2hpbmcgZXhjZXB0aW9ucyB0aGF0CisvLyBjcm9zcyBmdW5jdGlvbiBib3VuZGFyaWVz
IGFuZC9vciByYWlzZWQgYnkgSmF2YVNjcmlwdC4KKyhmdW5jdGlvbiBUZXN0Q2F0Y2hDcm9zc0Z1
bmN0aW9ucygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAg
bGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9pKTsKKworICAvLyBIZWxwZXIgZnVu
Y3Rpb24gZm9yIHRocm93aW5nIGZyb20gSlMuIEl0IGlzIGltcG9ydGVkIGJ5IHRoZSBXYXNtIG1v
ZHVsZQorICAvLyBhcyB0aHJvd19pLgorICBmdW5jdGlvbiB0aHJvd192YWx1ZSh2YWx1ZSkgewor
ICAgIHRocm93IHZhbHVlOworICB9CisgIGxldCBzaWdfaW5kZXggPSBidWlsZGVyLmFkZFR5cGUo
a1NpZ192X2kpOworICBsZXQga0pTVGhyb3dJID0gYnVpbGRlci5hZGRJbXBvcnQoIiIsICJ0aHJv
d19pIiwgc2lnX2luZGV4KTsKKworICAvLyBIZWxwZXIgZnVuY3Rpb24gdGhhdCB0aHJvd3MgYSBz
dHJpbmcuIFdhc20gc2hvdWxkIG5vdCBjYXRjaCBpdC4KKyAgZnVuY3Rpb24gdGhyb3dfc3RyaW5n
KCkgeworICAgIHRocm93ICJ1c2Ugd2FzbSI7CisgIH0KKyAgc2lnX2luZGV4ID0gYnVpbGRlci5h
ZGRUeXBlKGtTaWdfdl92KTsKKyAgbGV0IGtKU1Rocm93U3RyaW5nID0gYnVpbGRlci5hZGRJbXBv
cnQoIiIsICJ0aHJvd19zdHJpbmciLCBzaWdfaW5kZXgpOworCisgIC8vIEhlbHBlciBmdW5jdGlv
biB0aGF0IHRocm93cyB1bmRlZmluZWQuIFdhc20gc2hvdWxkIG5vdCBjYXRjaCBpdC4KKyAgZnVu
Y3Rpb24gdGhyb3dfdW5kZWZpbmVkKCkgeworICAgIHRocm93IHVuZGVmaW5lZDsKKyAgfQorICBs
ZXQga0pTVGhyb3dVbmRlZmluZWQgPSBidWlsZGVyLmFkZEltcG9ydCgiIiwgInRocm93X3VuZGVm
aW5lZCIsIHNpZ19pbmRleCk7CisKKyAgLy8gSGVscGVyIGZ1bmN0aW9uIHRoYXQgdGhyb3dzIGFu
IGZwLiBXYXNtIHNob3VsZCBub3QgY2F0Y2ggaXQuCisgIGZ1bmN0aW9uIHRocm93X2ZwKCkgewor
ICAgIHRocm93IDEwLjU7CisgIH0KKyAgbGV0IGtKU1Rocm93RlAgPSBidWlsZGVyLmFkZEltcG9y
dCgiIiwgInRocm93X2ZwIiwgc2lnX2luZGV4KTsKKworICAvLyBIZWxwZXIgZnVuY3Rpb24gdGhh
dCB0aHJvd3MgYSBsYXJnZSBudW1iZXIuIFdhc20gc2hvdWxkIG5vdCBjYXRjaCBpdC4KKyAgZnVu
Y3Rpb24gdGhyb3dfbGFyZ2UoKSB7CisgICAgdGhyb3cgMWUrMjg7CisgIH0KKyAgbGV0IGtKU1Ro
cm93TGFyZ2UgPSBidWlsZGVyLmFkZEltcG9ydCgiIiwgInRocm93X2xhcmdlIiwgc2lnX2luZGV4
KTsKKworICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRocm93aW5nIGZyb20gV2ViQXNzZW1ibHku
CisgIGxldCBrV2FzbVRocm93RnVuY3Rpb24gPQorICAgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRo
cm93Iiwga1NpZ192X2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQs
IDAsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pCisgICAgICAuaW5kZXg7
CisKKyAgLy8gU2NlbmFyaW8gMTogVGhyb3cgYW5kIGNhdGNoIGFwcGVhciBvbiB0aGUgc2FtZSBm
dW5jdGlvbi4gVGhpcyBzaG91bGQKKyAgLy8gaGFwcGVuIGluIGNhc2Ugb2YgaW5saW5pbmcsIGZv
ciBleGFtcGxlLgorICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJzYW1lX3Njb3BlIiwga1NpZ19pX2kp
CisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICBrRXhw
ckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckkzMkNvbnN0LCAwLAorICAgICAgICBrRXhwckkz
Mk5lLAorICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJMb2NhbEdl
dCwgMCwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJVbnJl
YWNoYWJsZSwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDYzLAor
ICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAga0V4cHJFbmQKKyAgICBdKQorICAgIC5l
eHBvcnRGdW5jKCk7CisKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigic2FtZV9zY29wZV9pZ25vcmUi
LCBrU2lnX2lfaSkKKyAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwK
KyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2Vw
dCwKKyAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICBrRXhwckNhdGNoLCBleGNl
cHQsCisgICAgICAgIGtFeHByRW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBi
dWlsZGVyLmFkZEZ1bmN0aW9uKCJzYW1lX3Njb3BlX211bHRpcGxlIiwga1NpZ19pX2kpCisgICAg
Ly8gcGF0aCA9IDA7CisgICAgLy8KKyAgICAvLyB0cnkgeworICAgIC8vICAgdHJ5IHsKKyAgICAv
LyAgICAgdHJ5IHsKKyAgICAvLyAgICAgICBpZiAocCA9PSAxKQorICAgIC8vICAgICAgICAgdGhy
b3cgMTsKKyAgICAvLyAgICAgICBwYXRoIHw9IDIKKyAgICAvLyAgICAgfSBjYXRjaCAodikgewor
ICAgIC8vICAgICAgIHBhdGggfD0gdiB8IDQ7CisgICAgLy8gICAgICAgdGhyb3cgcGF0aDsKKyAg
ICAvLyAgICAgfQorICAgIC8vICAgICBpZiAocCA9PSAyKQorICAgIC8vICAgICAgIHRocm93IHBh
dGh8ODsKKyAgICAvLyAgICAgcGF0aCB8PSAxNjsKKyAgICAvLyAgIH0gY2F0Y2ggKHYpIHsKKyAg
ICAvLyAgICAgcGF0aCB8PSB2IHwgMzI7CisgICAgLy8gICAgIHRocm93IHBhdGg7CisgICAgLy8g
ICB9CisgICAgLy8gICBpZiAocCA9PSAzKQorICAgIC8vICAgICB0aHJvdyBwYXRofDY0OworICAg
IC8vICAgcGF0aCB8PSAxMjgKKyAgICAvLyB9IGNhdGNoICh2KSB7CisgICAgLy8gICBwYXRoIHw9
IHYgfCAyNTY7CisgICAgLy8gfQorICAgIC8vCisgICAgLy8gcmV0dXJuIHBhdGg7CisgICAgLy8K
KyAgICAvLyBwID09IDEgLT4gcGF0aCA9PSAyOTMKKyAgICAvLyBwID09IDIgLT4gcGF0aCA9PSAy
OTgKKyAgICAvLyBwID09IDMgLT4gcGF0aCA9PSAzMzgKKyAgICAvLyBlbHNlICAgLT4gcGF0aCA9
PSAxNDYKKyAgICAuYWRkTG9jYWxzKGtXYXNtSTMyLCAxKQorICAgIC5hZGRCb2R5KFsKKyAgICAg
ICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAg
ICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgICAga0V4cHJMb2NhbEdl
dCwgMCwKKyAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICAgICAga0V4
cHJJMzJFcSwKKyAgICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0
LAorICAgICAgICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgICAgICAgIGtFeHBy
RW5kLAorICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICAgICAga0V4cHJD
YXRjaCwgZXhjZXB0LAorICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCA0LAorICAgICAgICAg
ICAgICBrRXhwckkzMklvciwKKyAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAg
ICAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICAgICAga0V4cHJFbmQsCisgICAg
ICAgICAgICBrRXhwckxvY2FsVGVlLCAxLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwK
KyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgICAgICBrRXhwckkzMkVxLAor
ICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAgICBrRXhwckxvY2Fs
R2V0LCAxLAorICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCA4LAorICAgICAgICAgICAgICBr
RXhwckkzMklvciwKKyAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAg
ICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAg
ICBrRXhwckkzMkNvbnN0LCAxNiwKKyAgICAgICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICAg
IGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDMyLAorICAg
ICAgICAgICAga0V4cHJJMzJJb3IsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisg
ICAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAg
ICAgIGtFeHByTG9jYWxUZWUsIDEsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAg
ICAgICBrRXhwckkzMkNvbnN0LCAzLAorICAgICAgICAgIGtFeHBySTMyRXEsCisgICAgICAgICAg
a0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAg
ICAgICAgIGtFeHBySTMyQ29uc3QsIC8qNjQ9Ki8gMTkyLCAwLAorICAgICAgICAgICAga0V4cHJJ
MzJJb3IsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAgICBrRXhw
clVucmVhY2hhYmxlLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgIGtFeHBySTMyQ29u
c3QsIC8qMTI4PSovIDEyOCwgMSwKKyAgICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAga0V4
cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIC8qMjU2PSovIDEyOCwg
MiwKKyAgICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAga0V4cHJFbmQsCisgICAgXSkKKyAg
ICAuZXhwb3J0RnVuYygpOworCisgIC8vIFNjZW5hcmlvIDI6IENhdGNoZXMgYW4gZXhjZXB0aW9u
IHJhaXNlZCBmcm9tIHRoZSBkaXJlY3QgY2FsbGVlLgorICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJm
cm9tX2RpcmVjdF9jYWxsZWUiLCBrU2lnX2lfaSkKKyAgICAuYWRkQm9keShbCisgICAgICBrRXhw
clRyeSwga1dhc21JMzIsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHBy
Q2FsbEZ1bmN0aW9uLCBrV2FzbVRocm93RnVuY3Rpb24sCisgICAgICAgIGtFeHByVW5yZWFjaGFi
bGUsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICBrRXhwckVuZCwKKyAgICBdKQor
ICAgIC5leHBvcnRGdW5jKCk7CisKKyAgLy8gU2NlbmFyaW8gMzogQ2F0Y2hlcyBhbiBleGNlcHRp
b24gcmFpc2VkIGZyb20gYW4gaW5kaXJlY3QgY2FsbGVlLgorICBsZXQgc2lnX3ZfaSA9IGJ1aWxk
ZXIuYWRkVHlwZShrU2lnX3ZfaSk7CisgIGJ1aWxkZXIuYXBwZW5kVG9UYWJsZShba1dhc21UaHJv
d0Z1bmN0aW9uLCBrV2FzbVRocm93RnVuY3Rpb25dKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigi
ZnJvbV9pbmRpcmVjdF9jYWxsZWUiLCBrU2lnX2lfaWkpCisgICAgLmFkZEJvZHkoWworICAgICAg
a0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBr
RXhwckxvY2FsR2V0LCAxLAorICAgICAgICBrRXhwckNhbGxJbmRpcmVjdCwgc2lnX3ZfaSwga1Rh
YmxlWmVybywKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByQ2F0Y2gsIGV4
Y2VwdCwKKyAgICAgIGtFeHByRW5kCisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIC8v
IFNjZW5hcmlvIDQ6IERvZXMgbm90IGNhdGNoIGFuIGV4Y2VwdGlvbiByYWlzZWQgaW4gSlMsIGV2
ZW4gaWYgcHJpbWl0aXZlCisgIC8vIHZhbHVlcyBhcmUgYmVpbmcgdXNlZCBhcyBleGNlcHRpb25z
LgorICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJpX2Zyb21fanMiLCBrU2lnX2lfaSkKKyAgICAuYWRk
Qm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgIGtFeHByTG9jYWxHZXQs
IDAsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrSlNUaHJvd0ksCisgICAgICAgIGtFeHBy
VW5yZWFjaGFibGUsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByVW5y
ZWFjaGFibGUsCisgICAgICBrRXhwckVuZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisK
KyAgYnVpbGRlci5hZGRGdW5jdGlvbigic3RyaW5nX2Zyb21fanMiLCBrU2lnX3ZfdikKKyAgICAu
YWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICBrRXhwckNhbGxG
dW5jdGlvbiwga0pTVGhyb3dTdHJpbmcsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAg
ICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICBrRXhwckVuZCwKKyAgICBdKQorICAgIC5leHBv
cnRGdW5jKCk7CisKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiZnBfZnJvbV9qcyIsIGtTaWdfdl92
KQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgIGtF
eHByQ2FsbEZ1bmN0aW9uLCBrSlNUaHJvd0ZQLAorICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAor
ICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAga0V4cHJFbmQsCisgICAgXSkKKyAgICAu
ZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImxhcmdlX2Zyb21fanMiLCBr
U2lnX3ZfdikKKyAgICAuYWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAg
ICAgICBrRXhwckNhbGxGdW5jdGlvbiwga0pTVGhyb3dMYXJnZSwKKyAgICAgIGtFeHByQ2F0Y2gs
IGV4Y2VwdCwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByRW5kLAorICAg
IF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ1bmRlZmlu
ZWRfZnJvbV9qcyIsIGtTaWdfdl92KQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBr
V2FzbVZvaWQsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrSlNUaHJvd1VuZGVmaW5lZCwK
KyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAg
ICAgIGtFeHByRW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBsZXQgaW5zdGFu
Y2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsiIjogeworICAgICAgdGhyb3dfaTogdGhyb3dfdmFs
dWUsCisgICAgICB0aHJvd19zdHJpbmc6IHRocm93X3N0cmluZywKKyAgICAgIHRocm93X2ZwOiB0
aHJvd19mcCwKKyAgICAgIHRocm93X2xhcmdlLCB0aHJvd19sYXJnZSwKKyAgICAgIHRocm93X3Vu
ZGVmaW5lZDogdGhyb3dfdW5kZWZpbmVkCisgIH19KTsKKworICBhc3NlcnRFcXVhbHMoNjMsIGlu
c3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZSgwKSk7CisgIGFzc2VydEVxdWFscygxMDI0LCBpbnN0
YW5jZS5leHBvcnRzLnNhbWVfc2NvcGUoMTAyNCkpOworICBhc3NlcnRFcXVhbHMoLTMsIGluc3Rh
bmNlLmV4cG9ydHMuc2FtZV9zY29wZSgtMykpOworICBhc3NlcnRFcXVhbHMoLTEsIGluc3RhbmNl
LmV4cG9ydHMuc2FtZV9zY29wZV9pZ25vcmUoLTEpKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3Rh
bmNlLmV4cG9ydHMuc2FtZV9zY29wZV9pZ25vcmUoMSkpOworICBhc3NlcnRFcXVhbHMoMHg3RkZG
RkZGRiwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX2lnbm9yZSgweDdGRkZGRkZGKSk7Cisg
IGFzc2VydEVxdWFscygxMDI0LCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfaWdub3JlKDEw
MjQpKTsKKyAgYXNzZXJ0RXF1YWxzKC0xLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfaWdu
b3JlKC0xKSk7CisgIGFzc2VydEVxdWFscygyOTMsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29w
ZV9tdWx0aXBsZSgxKSk7CisgIGFzc2VydEVxdWFscygyOTgsIGluc3RhbmNlLmV4cG9ydHMuc2Ft
ZV9zY29wZV9tdWx0aXBsZSgyKSk7CisgIGFzc2VydEVxdWFscygzMzgsIGluc3RhbmNlLmV4cG9y
dHMuc2FtZV9zY29wZV9tdWx0aXBsZSgzKSk7CisgIGFzc2VydEVxdWFscygxNDYsIGluc3RhbmNl
LmV4cG9ydHMuc2FtZV9zY29wZV9tdWx0aXBsZSgwKSk7CisgIGFzc2VydEVxdWFscygtMTAwMjQs
IGluc3RhbmNlLmV4cG9ydHMuZnJvbV9kaXJlY3RfY2FsbGVlKC0xMDAyNCkpOworICBhc3NlcnRF
cXVhbHMoMzMzNDMzMywgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2RpcmVjdF9jYWxsZWUoMzMzNDMz
MykpOworICBhc3NlcnRFcXVhbHMoLTEsIGluc3RhbmNlLmV4cG9ydHMuZnJvbV9kaXJlY3RfY2Fs
bGVlKDB4RkZGRkZGRkYpKTsKKyAgYXNzZXJ0RXF1YWxzKDB4N0ZGRkZGRkYsIGluc3RhbmNlLmV4
cG9ydHMuZnJvbV9kaXJlY3RfY2FsbGVlKDB4N0ZGRkZGRkYpKTsKKyAgYXNzZXJ0RXF1YWxzKDEw
LCBpbnN0YW5jZS5leHBvcnRzLmZyb21faW5kaXJlY3RfY2FsbGVlKDEwLCAwKSk7CisgIGFzc2Vy
dEVxdWFscyg3NywgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2luZGlyZWN0X2NhbGxlZSg3NywgMSkp
OworCisgIGFzc2VydFRocm93c0VxdWFscygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmlfZnJvbV9q
cygxMCksIDEwKTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMu
aV9mcm9tX2pzKC0xMCksIC0xMCk7CisgIGFzc2VydFRocm93c0VxdWFscyhpbnN0YW5jZS5leHBv
cnRzLnN0cmluZ19mcm9tX2pzLCAidXNlIHdhc20iKTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzKGlu
c3RhbmNlLmV4cG9ydHMuZnBfZnJvbV9qcywgMTAuNSk7CisgIGFzc2VydFRocm93c0VxdWFscyhp
bnN0YW5jZS5leHBvcnRzLmxhcmdlX2Zyb21fanMsIDFlKzI4KTsKKyAgYXNzZXJ0VGhyb3dzRXF1
YWxzKGluc3RhbmNlLmV4cG9ydHMudW5kZWZpbmVkX2Zyb21fanMsIHVuZGVmaW5lZCk7Cit9KSgp
OworCisvLyBEZWxlZ2F0ZSB3aXRoIGEgdHJ5IGJsb2NrIHRoYXQgbmV2ZXIgdGhyb3dzLgorKGZ1
bmN0aW9uIFRlc3REZWxlZ2F0ZU5vVGhyb3coKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21N
b2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3Yp
OworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ19pX3YpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRyeSwga1dh
c21JMzIsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgIGtFeHByRGVs
ZWdhdGUsIDAsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAgICAgICAga0V4cHJJ
MzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7Cisg
IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMoMSwgaW5z
dGFuY2UuZXhwb3J0cy50ZXN0KCkpOworfSkoKTsKKworLy8gRGVsZWdhdGUgZXhjZXB0aW9uIGhh
bmRsaW5nIHRvIG91dGVyIHRyeS9jYXRjaCBibG9jay4KKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVU
aHJvdygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0
IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IHRocm93X2lmID0gYnVp
bGRlci5hZGRGdW5jdGlvbigndGhyb3cnLCBrU2lnX3ZfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAg
ICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwK
KyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckVuZF0pLmV4
cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfaV9pKQorICAg
ICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4
cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAg
ICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCB0aHJvd19pZi5pbmRleCwKKyAgICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDEsCisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAga0V4cHJD
YXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHBy
RW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGVzdCgwKSk7Cisg
IGFzc2VydEVxdWFscygyLCBpbnN0YW5jZS5leHBvcnRzLnRlc3QoMSkpOworfSkoKTsKKworLy8g
Tm8gY2F0Y2ggYmxvY2sgbWF0Y2hpbmcgdGhlIGV4Y2VwdGlvbiBpbiB0aGUgZGVsZWdhdGUgdGFy
Z2V0LgorKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZVRocm93Tm9DYXRjaCgpIHsKKyAgbGV0IGJ1aWxk
ZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFk
ZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3Yp
OworICBsZXQgdGhyb3dfZm4gPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvdycsIGtTaWdfdl92
KQorICAgICAgICAgICAgICAgICAgICAgLmFkZEJvZHkoW2tFeHByVGhyb3csIGV4Y2VwdDFdKQor
ICAgICAgICAgICAgICAgICAgICAgLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IHRocm93X2ZuXzIgPSBi
dWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvd18yJywga1NpZ192X3YpCisgICAgICAgICAgICAgICAg
ICAgICAuYWRkQm9keShba0V4cHJUaHJvdywgZXhjZXB0Ml0pCisgICAgICAgICAgICAgICAgICAg
ICAuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ19pX3Yp
CisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAg
ICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgdGhy
b3dfZm4uaW5kZXgsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgIGtF
eHByRGVsZWdhdGUsIDAsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDIsCisgICAgICAgICAg
a0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRUaHJvd3Mo
aW5zdGFuY2UuZXhwb3J0cy50ZXN0LCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfSkoKTsKKwor
Ly8gQ2hlY2sgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIG1lcmdlZCBwcm9wZXJseSB3aGVuIGJvdGgg
c2NvcGVzIGNhbiB0aHJvdy4KKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVNZXJnZSgpIHsKKyAgbGV0
IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWls
ZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X3YpOworICAvLyB0aHJvd19mbjogMCAtPiByZXR1cm5zCisgIC8vICAgICAgICAgICAxIC0+
IHRocm93IGV4Y2VwdDEKKyAgLy8gICAgICAgICAgIDIgLT4gdGhyb3cgZXhjZXB0MgorICBsZXQg
dGhyb3dfZm4gPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvdycsIGtTaWdfdl9pKQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICAgIGtFeHByQmxvY2ssIGtXYXNtVm9pZCwKKyAgICAgICAgICAg
IGtFeHByQmxvY2ssIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAga0V4cHJCbG9jaywga1dhc21W
b2lkLAorICAgICAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICAgICAg
a0V4cHJCclRhYmxlLCAyLCAwLCAxLCAyLAorICAgICAgICAgICAgICBrRXhwckVuZCwKKyAgICAg
ICAgICAgICAga0V4cHJSZXR1cm4sCisgICAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAg
IGtFeHByVGhyb3csIGV4Y2VwdDEsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAga0V4
cHJUaHJvdywgZXhjZXB0Ml0pCisgICAgICAuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEZ1
bmN0aW9uKCd0ZXN0Jywga1NpZ19pX2lpKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhw
clRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBr
RXhwckNhbGxGdW5jdGlvbiwgdGhyb3dfZm4uaW5kZXgsCisgICAgICAgICAga0V4cHJUcnksIGtX
YXNtSTMyLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAgICAgIGtFeHBy
Q2FsbEZ1bmN0aW9uLCB0aHJvd19mbi5pbmRleCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3Qs
IDEsCisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhj
ZXB0MSwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckVuZCwKKyAg
ICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7
CisgIGFzc2VydEVxdWFscygyLCBpbnN0YW5jZS5leHBvcnRzLnRlc3QoMSwgMCkpOworICBhc3Nl
cnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50ZXN0KDIsIDApLCBXZWJBc3NlbWJseS5F
eGNlcHRpb24pOworICBhc3NlcnRFcXVhbHMoMiwgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KDAsIDEp
KTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMudGVzdCgwLCAyKSwgV2Vi
QXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMu
dGVzdCgwLCAwKSk7Cit9KSgpOworCisvLyBEZWxlZ2F0ZSB0byBzZWNvbmQgZW5jbG9zaW5nIHRy
eSBzY29wZS4KKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGUxKCkgeworICBsZXQgYnVpbGRlciA9IG5l
dyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X3YpOworICBsZXQgdGhyb3dfZm4gPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvdycsIGtT
aWdfdl92KQorICAgICAgICAgICAgICAgICAgICAgLmFkZEJvZHkoW2tFeHByVGhyb3csIGV4Y2Vw
dF0pCisgICAgICAgICAgICAgICAgICAgICAuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEZ1
bmN0aW9uKCd0ZXN0Jywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBy
VHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAg
ICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCB0
aHJvd19mbi5pbmRleCwKKyAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAg
ICAgIGtFeHByRGVsZWdhdGUsIDEsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAg
a0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDMsCisgICAgICAg
IGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBpbnN0YW5jZSA9IGJ1aWxkZXIu
aW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDMsIGluc3RhbmNlLmV4cG9ydHMudGVzdCgp
KTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVVbnJlYWNoYWJsZSgpIHsKKyAgbGV0
IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWls
ZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ19pX3YpCisgICAgICAu
YWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRy
eSwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MSwKKyAgICAgICAg
ICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAg
IGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAg
ICAga0V4cHJDYXRjaCwgZXhjZXB0MiwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAzLAorICAg
ICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWls
ZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscygyLCBpbnN0YW5jZS5leHBvcnRzLnRl
c3QoKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlVG9DYWxsZXIoKSB7CisgIGxl
dCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWls
ZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2ln
X3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAg
ICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhj
ZXB0LAorICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDEsCisgICAgICAgIGtFeHByQ2F0Y2hBbGws
CisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGluc3RhbmNlID0g
YnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhw
b3J0cy50ZXN0KCksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9KSgpOworCisoZnVuY3Rpb24g
VGVzdFRocm93QmVmb3JlVW5yZWFjaGFibGUoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21N
b2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7
CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93X2JlZm9yZV91bnJlYWNoYWJsZScsIGtTaWdf
aV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAg
ICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisg
ICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgNDIsCisgICAg
ICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworCisgIGxldCBpbnN0YW5jZSA9
IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDQyLCBpbnN0YW5jZS5leHBv
cnRzLnRocm93X2JlZm9yZV91bnJlYWNoYWJsZSgpKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0
VW5yZWFjaGFibGVJbkNhdGNoQWxsKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBi
dWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvd19iZWZvcmVfdW5yZWFjaGFibGUnLCBrU2lnX2lfdikK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAg
IGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBr
RXhwclVucmVhY2hhYmxlLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDQyLAorICAgICAgICBr
RXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKworICBsZXQgaW5zdGFuY2UgPSBidWls
ZGVyLmluc3RhbnRpYXRlKCk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdFRocm93V2l0aExvY2Fs
KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhj
ZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0
aHJvd193aXRoX2xvY2FsJywga1NpZ19pX3YpCisgICAgLmFkZExvY2FscyhrV2FzbUkzMiwgNCkK
KyAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDQyLAorICAgICAgICBrRXhw
ckY2NENvbnN0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICBrRXhwclRyeSwga1dh
c21GMzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICBrRXhwckNhdGNo
QWxsLAorICAgICAgICAgIGtFeHByRjMyQ29uc3QsIDAsIDAsIDAsIDAsCisgICAgICAgIGtFeHBy
RW5kLAorICAgICAgICBrRXhwckRyb3AsICAvLyBEcm9wIHRoZSBmMzIuCisgICAgICAgIGtFeHBy
RHJvcCwgIC8vIERyb3AgdGhlIGY2NC4KKyAgICAgICAgLy8gTGVhdmUgdGhlICc0Micgb24gdGhl
IHN0YWNrLgorICAgIF0pLmV4cG9ydEZ1bmMoKTsKKworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVy
Lmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscyg0MiwgaW5zdGFuY2UuZXhwb3J0cy50aHJv
d193aXRoX2xvY2FsKCkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RDYXRjaGxlc3NUcnkoKSB7
CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQg
PSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ2NhdGNo
bGVzc190cnknLCBrU2lnX3ZfaSkKKyAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBr
V2FzbVZvaWQsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwcklm
LCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAg
a0V4cHJFbmQsCisgICAgICAgIGtFeHByRW5kLAorICAgIF0pLmV4cG9ydEZ1bmMoKTsKKworICBi
dWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxl
dCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RG9lc05vdFRocm93
KCgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hsZXNzX3RyeSgwKSk7CisgIGFzc2VydFdhc21U
aHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5l
eHBvcnRzLmNhdGNobGVzc190cnkoMSkpOworfSkoKTsKKworLy8gRGVsZWdhdGUgdG8gYSByZWd1
bGFyIGJsb2NrIGluc2lkZSBhIHRyeSBibG9jay4KKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVUb0Js
b2NrKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQg
ZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9u
KCd0ZXN0Jywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBr
V2FzbUkzMiwKKyAgICAgICAgICBrRXhwckJsb2NrLCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtF
eHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAg
ICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAg
a0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAg
IGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICAgIGFzc2VydFRocm93cygoKSA9
PiBidWlsZGVyLmluc3RhbnRpYXRlKCksIEVycm9yLCAvZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEg
dHJ5IGJsb2NrLyk7Cit9KSgpOworCisvLyBEZWxlZ2F0ZSB0byBhIHJlZ3VsYXIgYmxvY2sgd2l0
aCBubyBvdXRlciB0cnkgKGRlbGVnYXRlIHRvIGNhbGxlcikuCisoZnVuY3Rpb24gVGVzdERlbGVn
YXRlVG9DYWxsZXJXaXRoQmxvY2soKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1
aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAg
ICAgICAga0V4cHJCbG9jaywga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZv
aWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJEZWxl
Z2F0ZSwgMCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYXNz
ZXJ0VGhyb3dzKCgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoKSwgRXJyb3IsIC9kZWxlZ2F0ZSB0
YXJnZXQgaXNuJ3QgYSB0cnkgYmxvY2svKTsKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dh
c20vdjgvbWpzdW5pdC5qcyBiL0pTVGVzdHMvd2FzbS92OC9tanN1bml0LmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQyNDU1YmFhNjE2OTY2ZjhkMGE2YjlkZTFkYTMyMTFmZmEyZGEzNjIKLS0tIC9kZXYvbnVsbAor
KysgYi9KU1Rlc3RzL3dhc20vdjgvbWpzdW5pdC5qcwpAQCAtMCwwICsxLDgyNiBAQAorLy8gQ29w
eXJpZ2h0IDIwMDggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
Ky8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitmdW5jdGlvbiBNanNVbml0QXNzZXJ0aW9uRXJyb3IobWVz
c2FnZSkgeworICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAvLyBUZW1wb3JhcmlseSBpbnN0
YWxsIGEgY3VzdG9tIHN0YWNrIHRyYWNlIGZvcm1hdHRlciBhbmQgcmVzdG9yZSB0aGUKKyAgLy8g
cHJldmlvdXMgdmFsdWUuCisgIGxldCBwcmV2UHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVw
YXJlU3RhY2tUcmFjZTsKKyAgdHJ5IHsKKyAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IE1q
c1VuaXRBc3NlcnRpb25FcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsKKyAgICAvLyBUaGlzIGFsbG93
cyBmZXRjaGluZyB0aGUgc3RhY2sgdHJhY2UgdXNpbmcgVHJ5Q2F0Y2g6OlN0YWNrVHJhY2UuCisg
ICAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcigiTWpzVW5pdEFzc2VydGlvbkVycm9yIikuc3RhY2s7
CisgIH0gZmluYWxseSB7CisgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2UHJlcGFy
ZVN0YWNrVHJhY2U7CisgIH0KK30KKworLyoKKyAqIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBpbiBh
bGwgbWluaSBqc3VuaXQgdGVzdCBjYXNlcy4gIFRoZSB0ZXN0CisgKiBmcmFtZXdvcmsgZXhwZWN0
cyBsaW5lcyB0aGF0IHNpZ25hbCBmYWlsZWQgdGVzdHMgdG8gc3RhcnQgd2l0aAorICogdGhlIGYt
d29yZCBhbmQgaWdub3JlIGFsbCBvdGhlciBsaW5lcy4KKyAqLworCitNanNVbml0QXNzZXJ0aW9u
RXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhpcy5t
ZXNzYWdlICsgIlxuXG5TdGFjazogIiArIHRoaXMuc3RhY2s7Cit9OworCisKKy8vIEV4cGVjdGVk
IGFuZCBmb3VuZCB2YWx1ZXMgdGhlIHNhbWUgb2JqZWN0cywgb3IgdGhlIHNhbWUgcHJpbWl0aXZl
CisvLyB2YWx1ZXMuCisvLyBGb3Iga25vd24gcHJpbWl0aXZlIHZhbHVlcywgcGxlYXNlIHVzZSBh
c3NlcnRFcXVhbHMuCit2YXIgYXNzZXJ0U2FtZTsKKworLy8gSW52ZXJzZSBvZiBhc3NlcnRTYW1l
LgordmFyIGFzc2VydE5vdFNhbWU7CisKKy8vIEV4cGVjdGVkIGFuZCBmb3VuZCB2YWx1ZXMgYXJl
IGlkZW50aWNhbCBwcmltaXRpdmUgdmFsdWVzIG9yIGZ1bmN0aW9ucworLy8gb3Igc2ltaWxhcmx5
IHN0cnVjdHVyZWQgb2JqZWN0cyAoY2hlY2tpbmcgaW50ZXJuYWwgcHJvcGVydGllcworLy8gb2Ys
IGUuZy4sIE51bWJlciBhbmQgRGF0ZSBvYmplY3RzLCB0aGUgZWxlbWVudHMgb2YgYXJyYXlzCisv
LyBhbmQgdGhlIHByb3BlcnRpZXMgb2Ygbm9uLUFycmF5IG9iamVjdHMpLgordmFyIGFzc2VydEVx
dWFsczsKKworLy8gRGVlcCBlcXVhbGl0eSBwcmVkaWNhdGUgdXNlZCBieSBhc3NlcnRFcXVhbHMu
Cit2YXIgZGVlcEVxdWFsczsKKworLy8gRXhwZWN0ZWQgYW5kIGZvdW5kIHZhbHVlcyBhcmUgbm90
IGlkZW50aWNhbCBwcmltaXRpdmUgdmFsdWVzIG9yIGZ1bmN0aW9ucworLy8gb3Igc2ltaWxhcmx5
IHN0cnVjdHVyZWQgb2JqZWN0cyAoY2hlY2tpbmcgaW50ZXJuYWwgcHJvcGVydGllcworLy8gb2Ys
IGUuZy4sIE51bWJlciBhbmQgRGF0ZSBvYmplY3RzLCB0aGUgZWxlbWVudHMgb2YgYXJyYXlzCisv
LyBhbmQgdGhlIHByb3BlcnRpZXMgb2Ygbm9uLUFycmF5IG9iamVjdHMpLgordmFyIGFzc2VydE5v
dEVxdWFsczsKKworLy8gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBleHBlY3RlZCBhbmQgZm91bmQg
dmFsdWUgaXMgd2l0aGluIGNlcnRhaW4gdG9sZXJhbmNlLgordmFyIGFzc2VydEVxdWFsc0RlbHRh
OworCisvLyBUaGUgZm91bmQgb2JqZWN0IGlzIGFuIEFycmF5IHdpdGggdGhlIHNhbWUgbGVuZ3Ro
IGFuZCBlbGVtZW50cworLy8gYXMgdGhlIGV4cGVjdGVkIG9iamVjdC4gVGhlIGV4cGVjdGVkIG9i
amVjdCBkb2Vzbid0IG5lZWQgdG8gYmUgYW4gQXJyYXksCisvLyBhcyBsb25nIGFzIGl0J3MgImFy
cmF5LWlzaCIuCit2YXIgYXNzZXJ0QXJyYXlFcXVhbHM7CisKKy8vIFRoZSBmb3VuZCBvYmplY3Qg
bXVzdCBoYXZlIHRoZSBzYW1lIGVudW1lcmFibGUgcHJvcGVydGllcyBhcyB0aGUKKy8vIGV4cGVj
dGVkIG9iamVjdC4gVGhlIHR5cGUgb2Ygb2JqZWN0IGlzbid0IGNoZWNrZWQuCit2YXIgYXNzZXJ0
UHJvcGVydGllc0VxdWFsOworCisvLyBBc3NlcnQgdGhhdCB0aGUgc3RyaW5nIGNvbnZlcnNpb24g
b2YgdGhlIGZvdW5kIHZhbHVlIGlzIGVxdWFsIHRvCisvLyB0aGUgZXhwZWN0ZWQgc3RyaW5nLiBP
bmx5IGtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBwbGVhc2UKKy8vIGNoZWNrIHRo
ZSByZWFsIHN0cnVjdHVyZSBvZiB0aGUgZm91bmQgdmFsdWUuCit2YXIgYXNzZXJ0VG9TdHJpbmdF
cXVhbHM7CisKKy8vIENoZWNrcyB0aGF0IHRoZSBmb3VuZCB2YWx1ZSBpcyB0cnVlLiBVc2Ugd2l0
aCBib29sZWFuIGV4cHJlc3Npb25zCisvLyBmb3IgdGVzdHMgdGhhdCBkb2Vzbid0IGhhdmUgdGhl
aXIgb3duIGFzc2VydFhYWCBmdW5jdGlvbi4KK3ZhciBhc3NlcnRUcnVlOworCisvLyBDaGVja3Mg
dGhhdCB0aGUgZm91bmQgdmFsdWUgaXMgZmFsc2UuCit2YXIgYXNzZXJ0RmFsc2U7CisKKy8vIENo
ZWNrcyB0aGF0IHRoZSBmb3VuZCB2YWx1ZSBpcyBudWxsLiBLZXB0IGZvciBoaXN0b3JpY2FsIGNv
bXBhdGliaWxpdHksCisvLyBwbGVhc2UganVzdCB1c2UgYXNzZXJ0RXF1YWxzKG51bGwsIGV4cGVj
dGVkKS4KK3ZhciBhc3NlcnROdWxsOworCisvLyBDaGVja3MgdGhhdCB0aGUgZm91bmQgdmFsdWUg
aXMgKm5vdCogbnVsbC4KK3ZhciBhc3NlcnROb3ROdWxsOworCisvLyBBc3NlcnQgdGhhdCB0aGUg
cGFzc2VkIGZ1bmN0aW9uIG9yIGV2YWwgY29kZSB0aHJvd3MgYW4gZXhjZXB0aW9uLgorLy8gVGhl
IG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBpcyBhbiBleGNlcHRpb24gY29uc3RydWN0b3IgdGhh
dCB0aGUKKy8vIHRocm93biBleGNlcHRpb24gaXMgY2hlY2tlZCBhZ2FpbnN0IHdpdGggImluc3Rh
bmNlb2YiLgorLy8gVGhlIG9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50IGlzIGEgbWVzc2FnZSB0eXBl
IHN0cmluZyBvciBSZWdFeHAgb2JqZWN0IHRoYXQgaXMKKy8vIGNvbXBhcmVkIHRvIHRoZSBtZXNz
YWdlIG9mIHRoZSB0aHJvd24gZXhjZXB0aW9uLgordmFyIGFzc2VydFRocm93czsKKworLy8gQXNz
ZXJ0IHRoYXQgdGhlIHBhc3NlZCBmdW5jdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uLgorLy8gVGhl
IGV4Y2VwdGlvbiBpcyBjaGVja2VkIGFnYWluc3QgdGhlIHNlY29uZCBhcmd1bWVudCB1c2luZyBh
c3NlcnRFcXVhbHMuCit2YXIgYXNzZXJ0VGhyb3dzRXF1YWxzOworCisvLyBBc3NlcnQgdGhhdCB0
aGUgcGFzc2VkIHByb21pc2UgZG9lcyBub3QgcmVzb2x2ZSwgYnV0IGV2ZW50dWFsbHkgdGhyb3dz
IGFuCisvLyBleGNlcHRpb24uIFRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgaXMgYW4gZXhj
ZXB0aW9uIGNvbnN0cnVjdG9yIHRoYXQgdGhlCisvLyB0aHJvd24gZXhjZXB0aW9uIGlzIGNoZWNr
ZWQgYWdhaW5zdCB3aXRoICJpbnN0YW5jZW9mIi4KKy8vIFRoZSBvcHRpb25hbCB0aGlyZCBhcmd1
bWVudCBpcyBhIG1lc3NhZ2UgdHlwZSBzdHJpbmcgb3IgUmVnRXhwIG9iamVjdCB0aGF0IGlzCisv
LyBjb21wYXJlZCB0byB0aGUgbWVzc2FnZSBvZiB0aGUgdGhyb3duIGV4Y2VwdGlvbi4KK3ZhciBh
c3NlcnRUaHJvd3NBc3luYzsKKworLy8gQXNzZXJ0IHRoYXQgdGhlIHBhc3NlZCBmdW5jdGlvbiBv
ciBldmFsIGNvZGUgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgordmFyIGFzc2VydERvZXNO
b3RUaHJvdzsKKworLy8gQXNzZXJ0cyB0aGF0IHRoZSBmb3VuZCB2YWx1ZSBpcyBhbiBpbnN0YW5j
ZSBvZiB0aGUgY29uc3RydWN0b3IgcGFzc2VkCisvLyBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50Lgor
dmFyIGFzc2VydEluc3RhbmNlb2Y7CisKKy8vIEFzc2VydCB0aGF0IHRoaXMgY29kZSBpcyBuZXZl
ciBleGVjdXRlZCAoaS5lLiwgYWx3YXlzIGZhaWxzIGlmIGV4ZWN1dGVkKS4KK3ZhciBhc3NlcnRV
bnJlYWNoYWJsZTsKKworLy8gQXNzZXJ0IHRoYXQgdGhlIGZ1bmN0aW9uIGNvZGUgaXMgKG5vdCkg
b3B0aW1pemVkLgorLy8gT25seSB3b3JrcyB3aXRoIC0tYWxsb3ctbmF0aXZlcy1zeW50YXguCit2
YXIgYXNzZXJ0T3B0aW1pemVkOwordmFyIGFzc2VydFVub3B0aW1pemVkOworCisvLyBBc3NlcnQg
dGhhdCBhIHN0cmluZyBjb250YWlucyBhbm90aGVyIGV4cGVjdGVkIHN1YnN0cmluZy4KK3ZhciBh
c3NlcnRDb250YWluczsKKworLy8gQXNzZXJ0IHRoYXQgYSBzdHJpbmcgbWF0Y2hlcyBhIGdpdmVu
IHJlZ2V4LgordmFyIGFzc2VydE1hdGNoZXM7CisKKy8vIEFzc2VydCB0aGF0IGEgcHJvbWlzZSBy
ZXNvbHZlcyBvciByZWplY3RzLgorLy8gUGFyYW1ldGVyczoKKy8vIHtwcm9taXNlfSAtIHRoZSBw
cm9taXNlCisvLyB7c3VjY2Vzc30gLSBvcHRpb25hbCAtIGEgY2FsbGJhY2sgd2hpY2ggaXMgY2Fs
bGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUKKy8vICAgICAgICAgICAgIHJlc29sdmluZyBwcm9t
aXNlLgorLy8gIHtmYWlsfSAtICAgb3B0aW9uYWwgLSBhIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxl
ZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlCisvLyAgICAgICAgICAgICByZWplY3RpbmcgcHJvbWlz
ZS4gSWYgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgYnV0IG5vIHtmYWlsfQorLy8gICAgICAgICAg
ICAgY2FsbGJhY2sgaXMgc2V0LCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCBvdXQgb2YgdGhlIHBy
b21pc2UKKy8vICAgICAgICAgICAgIGNoYWluLgordmFyIGFzc2VydFByb21pc2VSZXN1bHQ7CisK
K3ZhciBwcm9taXNlVGVzdENoYWluOwordmFyIHByb21pc2VUZXN0Q291bnQgPSAwOworCisvLyBU
aGVzZSBiaXRzIG11c3QgYmUgaW4gc3luYyB3aXRoIGJpdHMgZGVmaW5lZCBpbiBSdW50aW1lX0dl
dE9wdGltaXphdGlvblN0YXR1cwordmFyIFY4T3B0aW1pemF0aW9uU3RhdHVzID0geworICBrSXNG
dW5jdGlvbjogMSA8PCAwLAorICBrTmV2ZXJPcHRpbWl6ZTogMSA8PCAxLAorICBrQWx3YXlzT3B0
aW1pemU6IDEgPDwgMiwKKyAga01heWJlRGVvcHRlZDogMSA8PCAzLAorICBrT3B0aW1pemVkOiAx
IDw8IDQsCisgIGtUdXJib0Zhbm5lZDogMSA8PCA1LAorICBrSW50ZXJwcmV0ZWQ6IDEgPDwgNiwK
KyAga01hcmtlZEZvck9wdGltaXphdGlvbjogMSA8PCA3LAorICBrTWFya2VkRm9yQ29uY3VycmVu
dE9wdGltaXphdGlvbjogMSA8PCA4LAorICBrT3B0aW1pemluZ0NvbmN1cnJlbnRseTogMSA8PCA5
LAorICBrSXNFeGVjdXRpbmc6IDEgPDwgMTAsCisgIGtUb3Btb3N0RnJhbWVJc1R1cmJvRmFubmVk
OiAxIDw8IDExLAorICBrTGl0ZU1vZGU6IDEgPDwgMTIsCisgIGtNYXJrZWRGb3JEZW9wdGltaXph
dGlvbjogMSA8PCAxMywKKyAga0Jhc2VsaW5lOiAxIDw8IDE0LAorICBrVG9wbW9zdEZyYW1lSXNJ
bnRlcnByZXRlZDogMSA8PCAxNSwKKyAga1RvcG1vc3RGcmFtZUlzQmFzZWxpbmU6IDEgPDwgMTYs
Cit9OworCisvLyBSZXR1cm5zIHRydWUgaWYgLS1saXRlLW1vZGUgaXMgb24gYW5kIHdlIGNhbid0
IGV2ZXIgdHVybiBvbiBvcHRpbWl6YXRpb24uCit2YXIgaXNOZXZlck9wdGltaXplTGl0ZU1vZGU7
CisKKy8vIFJldHVybnMgdHJ1ZSBpZiAtLW5vLW9wdCBtb2RlIGlzIG9uLgordmFyIGlzTmV2ZXJP
cHRpbWl6ZTsKKworLy8gUmV0dXJucyB0cnVlIGlmIC0tYWx3YXlzLW9wdCBtb2RlIGlzIG9uLgor
dmFyIGlzQWx3YXlzT3B0aW1pemU7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBmdW5jdGlv
biBpbiBpbnRlcnByZXRlZC4KK3ZhciBpc0ludGVycHJldGVkOworCisvLyBSZXR1cm5zIHRydWUg
aWYgZ2l2ZW4gZnVuY3Rpb24gaW4gYmFzZWxpbmUuCit2YXIgaXNCYXNlbGluZTsKKworLy8gUmV0
dXJucyB0cnVlIGlmIGdpdmVuIGZ1bmN0aW9uIGluIHVub3B0aW1pemVkIChpbnRlcnByZXRlZCBv
ciBiYXNlbGluZSkuCit2YXIgaXNVbm9wdGltaXplZDsKKworLy8gUmV0dXJucyB0cnVlIGlmIGdp
dmVuIGZ1bmN0aW9uIGlzIG9wdGltaXplZC4KK3ZhciBpc09wdGltaXplZDsKKworLy8gUmV0dXJu
cyB0cnVlIGlmIGdpdmVuIGZ1bmN0aW9uIGlzIGNvbXBpbGVkIGJ5IFR1cmJvRmFuLgordmFyIGlz
VHVyYm9GYW5uZWQ7CisKKy8vIE1vbmtleS1wYXRjaGFibGUgYWxsLXB1cnBvc2UgZmFpbHVyZSBo
YW5kbGVyLgordmFyIGZhaWxXaXRoTWVzc2FnZTsKKworLy8gUmV0dXJucyB0aGUgZm9ybWF0dGVk
IGZhaWx1cmUgdGV4dC4gIFVzZWQgYnkgdGVzdC1hc3luYy5qcy4KK3ZhciBmb3JtYXRGYWlsdXJl
VGV4dDsKKworLy8gUmV0dXJucyBhIHByZXR0eS1wcmludGVkIHN0cmluZyByZXByZXNlbnRhdGlv
biBvZiB0aGUgcGFzc2VkIHZhbHVlLgordmFyIHByZXR0eVByaW50ZWQ7CisKKyhmdW5jdGlvbiAo
KSB7ICAvLyBTY29wZSBmb3IgdXRpbGl0eSBmdW5jdGlvbnMuCisKKyAgdmFyIE9iamVjdFByb3Rv
dHlwZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKKyAgdmFyIE51bWJlclBy
b3RvdHlwZVZhbHVlT2YgPSBOdW1iZXIucHJvdG90eXBlLnZhbHVlT2Y7CisgIHZhciBCb29sZWFu
UHJvdG90eXBlVmFsdWVPZiA9IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2Y7CisgIHZhciBTdHJp
bmdQcm90b3R5cGVWYWx1ZU9mID0gU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mOworICB2YXIgRGF0
ZVByb3RvdHlwZVZhbHVlT2YgPSBEYXRlLnByb3RvdHlwZS52YWx1ZU9mOworICB2YXIgUmVnRXhw
UHJvdG90eXBlVG9TdHJpbmcgPSBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nOworICB2YXIgQXJy
YXlQcm90b3R5cGVGb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2g7CisgIHZhciBBcnJh
eVByb3RvdHlwZUpvaW4gPSBBcnJheS5wcm90b3R5cGUuam9pbjsKKyAgdmFyIEFycmF5UHJvdG90
eXBlTWFwID0gQXJyYXkucHJvdG90eXBlLm1hcDsKKyAgdmFyIEFycmF5UHJvdG90eXBlUHVzaCA9
IEFycmF5LnByb3RvdHlwZS5wdXNoOworICB2YXIgSlNPTlN0cmluZ2lmeSA9IEpTT04uc3RyaW5n
aWZ5OworCisgIHZhciBCaWdJbnRQcm90b3R5cGVWYWx1ZU9mOworICAvLyBUT0RPKG5laXMpOiBS
ZW1vdmUgdHJ5LWNhdGNoIG9uY2UgQmlnSW50cyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgorICB0
cnkgeworICAgIEJpZ0ludFByb3RvdHlwZVZhbHVlT2YgPSBCaWdJbnQucHJvdG90eXBlLnZhbHVl
T2Y7CisgIH0gY2F0Y2ggKGUpIHt9CisKKyAgZnVuY3Rpb24gY2xhc3NPZihvYmplY3QpIHsKKyAg
ICAvLyBBcmd1bWVudCBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4KKyAgICB2YXIgc3Ry
aW5nID0gT2JqZWN0UHJvdG90eXBlVG9TdHJpbmcuY2FsbChvYmplY3QpOworICAgIC8vIFN0cmlu
ZyBoYXMgZm9ybWF0IFtvYmplY3QgPENsYXNzTmFtZT5dLgorICAgIHJldHVybiBzdHJpbmcuc3Vi
c3RyaW5nKDgsIHN0cmluZy5sZW5ndGggLSAxKTsKKyAgfQorCisKKyAgZnVuY3Rpb24gVmFsdWVP
Zih2YWx1ZSkgeworICAgIHN3aXRjaCAoY2xhc3NPZih2YWx1ZSkpIHsKKyAgICAgIGNhc2UgIk51
bWJlciI6CisgICAgICAgIHJldHVybiBOdW1iZXJQcm90b3R5cGVWYWx1ZU9mLmNhbGwodmFsdWUp
OworICAgICAgY2FzZSAiQmlnSW50IjoKKyAgICAgICAgcmV0dXJuIEJpZ0ludFByb3RvdHlwZVZh
bHVlT2YuY2FsbCh2YWx1ZSk7CisgICAgICBjYXNlICJTdHJpbmciOgorICAgICAgICByZXR1cm4g
U3RyaW5nUHJvdG90eXBlVmFsdWVPZi5jYWxsKHZhbHVlKTsKKyAgICAgIGNhc2UgIkJvb2xlYW4i
OgorICAgICAgICByZXR1cm4gQm9vbGVhblByb3RvdHlwZVZhbHVlT2YuY2FsbCh2YWx1ZSk7Cisg
ICAgICBjYXNlICJEYXRlIjoKKyAgICAgICAgcmV0dXJuIERhdGVQcm90b3R5cGVWYWx1ZU9mLmNh
bGwodmFsdWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0K
KyAgfQorCisKKyAgcHJldHR5UHJpbnRlZCA9IGZ1bmN0aW9uIHByZXR0eVByaW50ZWQodmFsdWUp
IHsKKyAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgeworICAgICAgY2FzZSAic3RyaW5nIjoKKyAg
ICAgICAgcmV0dXJuIEpTT05TdHJpbmdpZnkodmFsdWUpOworICAgICAgY2FzZSAiYmlnaW50IjoK
KyAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSkgKyAibiI7CisgICAgICBjYXNlICJudW1iZXIi
OgorICAgICAgICBpZiAodmFsdWUgPT09IDAgJiYgKDEgLyB2YWx1ZSkgPCAwKSByZXR1cm4gIi0w
IjsKKyAgICAgICAgLy8gRkFMTFRIUk9VR0guCisgICAgICBjYXNlICJib29sZWFuIjoKKyAgICAg
IGNhc2UgInVuZGVmaW5lZCI6CisgICAgICBjYXNlICJmdW5jdGlvbiI6CisgICAgICBjYXNlICJz
eW1ib2wiOgorICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTsKKyAgICAgIGNhc2UgIm9iamVj
dCI6CisgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICJudWxsIjsKKyAgICAgICAg
dmFyIG9iamVjdENsYXNzID0gY2xhc3NPZih2YWx1ZSk7CisgICAgICAgIHN3aXRjaCAob2JqZWN0
Q2xhc3MpIHsKKyAgICAgICAgICBjYXNlICJOdW1iZXIiOgorICAgICAgICAgIGNhc2UgIkJpZ0lu
dCI6CisgICAgICAgICAgY2FzZSAiU3RyaW5nIjoKKyAgICAgICAgICBjYXNlICJCb29sZWFuIjoK
KyAgICAgICAgICBjYXNlICJEYXRlIjoKKyAgICAgICAgICAgIHJldHVybiBvYmplY3RDbGFzcyAr
ICIoIiArIHByZXR0eVByaW50ZWQoVmFsdWVPZih2YWx1ZSkpICsgIikiOworICAgICAgICAgIGNh
c2UgIlJlZ0V4cCI6CisgICAgICAgICAgICByZXR1cm4gUmVnRXhwUHJvdG90eXBlVG9TdHJpbmcu
Y2FsbCh2YWx1ZSk7CisgICAgICAgICAgY2FzZSAiQXJyYXkiOgorICAgICAgICAgICAgdmFyIG1h
cHBlZCA9IEFycmF5UHJvdG90eXBlTWFwLmNhbGwoCisgICAgICAgICAgICAgICAgdmFsdWUsIHBy
ZXR0eVByaW50ZWRBcnJheUVsZW1lbnQpOworICAgICAgICAgICAgdmFyIGpvaW5lZCA9IEFycmF5
UHJvdG90eXBlSm9pbi5jYWxsKG1hcHBlZCwgIiwiKTsKKyAgICAgICAgICAgIHJldHVybiAiWyIg
KyBqb2luZWQgKyAiXSI7CisgICAgICAgICAgY2FzZSAiVWludDhBcnJheSI6CisgICAgICAgICAg
Y2FzZSAiSW50OEFycmF5IjoKKyAgICAgICAgICBjYXNlICJJbnQxNkFycmF5IjoKKyAgICAgICAg
ICBjYXNlICJVaW50MTZBcnJheSI6CisgICAgICAgICAgY2FzZSAiVWludDMyQXJyYXkiOgorICAg
ICAgICAgIGNhc2UgIkludDMyQXJyYXkiOgorICAgICAgICAgIGNhc2UgIkZsb2F0MzJBcnJheSI6
CisgICAgICAgICAgY2FzZSAiRmxvYXQ2NEFycmF5IjoKKyAgICAgICAgICAgIHZhciBqb2luZWQg
PSBBcnJheVByb3RvdHlwZUpvaW4uY2FsbCh2YWx1ZSwgIiwiKTsKKyAgICAgICAgICAgIHJldHVy
biBvYmplY3RDbGFzcyArICIoWyIgKyBqb2luZWQgKyAiXSkiOworICAgICAgICAgIGNhc2UgIk9i
amVjdCI6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIG9iamVjdENsYXNzICsgIigiICsgU3RyaW5nKHZhbHVlKSArICIpIjsKKyAgICAg
ICAgfQorICAgICAgICAvLyBjbGFzc09mKCkgcmV0dXJuZWQgIk9iamVjdCIuCisgICAgICAgIHZh
ciBuYW1lID0gdmFsdWUuY29uc3RydWN0b3IubmFtZTsKKyAgICAgICAgaWYgKG5hbWUpIHJldHVy
biBuYW1lICsgIigpIjsKKyAgICAgICAgcmV0dXJuICJPYmplY3QoKSI7CisgICAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gIi0tIHVua25vd24gdmFsdWUgLS0iOworICAgIH0KKyAgfQorCisK
KyAgZnVuY3Rpb24gcHJldHR5UHJpbnRlZEFycmF5RWxlbWVudCh2YWx1ZSwgaW5kZXgsIGFycmF5
KSB7CisgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShpbmRleCBpbiBhcnJheSkpIHJl
dHVybiAiIjsKKyAgICByZXR1cm4gcHJldHR5UHJpbnRlZCh2YWx1ZSk7CisgIH0KKworCisgIGZh
aWxXaXRoTWVzc2FnZSA9IGZ1bmN0aW9uIGZhaWxXaXRoTWVzc2FnZShtZXNzYWdlKSB7CisgICAg
dGhyb3cgbmV3IE1qc1VuaXRBc3NlcnRpb25FcnJvcihtZXNzYWdlKTsKKyAgfQorCisgIGZvcm1h
dEZhaWx1cmVUZXh0ID0gZnVuY3Rpb24oZXhwZWN0ZWRUZXh0LCBmb3VuZCwgbmFtZV9vcHQpIHsK
KyAgICB2YXIgbWVzc2FnZSA9ICJGYWlsIiArICJ1cmUiOworICAgIGlmIChuYW1lX29wdCkgewor
ICAgICAgLy8gRml4IHRoaXMgd2hlbiB3ZSBkaXRjaCB0aGUgb2xkIHRlc3QgcnVubmVyLgorICAg
ICAgbWVzc2FnZSArPSAiICgiICsgbmFtZV9vcHQgKyAiKSI7CisgICAgfQorCisgICAgdmFyIGZv
dW5kVGV4dCA9IHByZXR0eVByaW50ZWQoZm91bmQpOworICAgIGlmIChleHBlY3RlZFRleHQubGVu
Z3RoIDw9IDQwICYmIGZvdW5kVGV4dC5sZW5ndGggPD0gNDApIHsKKyAgICAgIG1lc3NhZ2UgKz0g
IjogZXhwZWN0ZWQgPCIgKyBleHBlY3RlZFRleHQgKyAiPiBmb3VuZCA8IiArIGZvdW5kVGV4dCAr
ICI+IjsKKyAgICB9IGVsc2UgeworICAgICAgbWVzc2FnZSArPSAiOlxuZXhwZWN0ZWQ6XG4iICsg
ZXhwZWN0ZWRUZXh0ICsgIlxuZm91bmQ6XG4iICsgZm91bmRUZXh0OworICAgIH0KKyAgICByZXR1
cm4gbWVzc2FnZTsKKyAgfQorCisgIGZ1bmN0aW9uIGZhaWwoZXhwZWN0ZWRUZXh0LCBmb3VuZCwg
bmFtZV9vcHQpIHsKKyAgICByZXR1cm4gZmFpbFdpdGhNZXNzYWdlKGZvcm1hdEZhaWx1cmVUZXh0
KGV4cGVjdGVkVGV4dCwgZm91bmQsIG5hbWVfb3B0KSk7CisgIH0KKworCisgIGZ1bmN0aW9uIGRl
ZXBPYmplY3RFcXVhbHMoYSwgYikgeworICAgIHZhciBhUHJvcHMgPSBPYmplY3Qua2V5cyhhKTsK
KyAgICBhUHJvcHMuc29ydCgpOworICAgIHZhciBiUHJvcHMgPSBPYmplY3Qua2V5cyhiKTsKKyAg
ICBiUHJvcHMuc29ydCgpOworICAgIGlmICghZGVlcEVxdWFscyhhUHJvcHMsIGJQcm9wcykpIHsK
KyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhUHJv
cHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmICghZGVlcEVxdWFscyhhW2FQcm9wc1tpXV0sIGJb
YVByb3BzW2ldXSkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKKyAgfQorCisKKyAgZGVlcEVxdWFscyA9IGZ1bmN0aW9uIGRlZXBFcXVh
bHMoYSwgYikgeworICAgIGlmIChhID09PSBiKSB7CisgICAgICAvLyBDaGVjayBmb3IgLTAuCisg
ICAgICBpZiAoYSA9PT0gMCkgcmV0dXJuICgxIC8gYSkgPT09ICgxIC8gYik7CisgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikgcmV0dXJuIGZh
bHNlOworICAgIGlmICh0eXBlb2YgYSA9PT0gIm51bWJlciIpIHJldHVybiBpc05hTihhKSAmJiBp
c05hTihiKTsKKyAgICBpZiAodHlwZW9mIGEgIT09ICJvYmplY3QiICYmIHR5cGVvZiBhICE9PSAi
ZnVuY3Rpb24iKSByZXR1cm4gZmFsc2U7CisgICAgLy8gTmVpdGhlciBhIG5vciBiIGlzIHByaW1p
dGl2ZS4KKyAgICB2YXIgb2JqZWN0Q2xhc3MgPSBjbGFzc09mKGEpOworICAgIGlmIChvYmplY3RD
bGFzcyAhPT0gY2xhc3NPZihiKSkgcmV0dXJuIGZhbHNlOworICAgIGlmIChvYmplY3RDbGFzcyA9
PT0gIlJlZ0V4cCIpIHsKKyAgICAgIC8vIEZvciBSZWdFeHAsIGp1c3QgY29tcGFyZSBwYXR0ZXJu
IGFuZCBmbGFncyB1c2luZyBpdHMgdG9TdHJpbmcuCisgICAgICByZXR1cm4gUmVnRXhwUHJvdG90
eXBlVG9TdHJpbmcuY2FsbChhKSA9PT0KKyAgICAgICAgICAgICBSZWdFeHBQcm90b3R5cGVUb1N0
cmluZy5jYWxsKGIpOworICAgIH0KKyAgICAvLyBGdW5jdGlvbnMgYXJlIG9ubHkgaWRlbnRpY2Fs
IHRvIHRoZW1zZWx2ZXMuCisgICAgaWYgKG9iamVjdENsYXNzID09PSAiRnVuY3Rpb24iKSByZXR1
cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdENsYXNzID09PSAiQXJyYXkiKSB7CisgICAgICB2YXIg
ZWxlbWVudENvdW50ID0gMDsKKyAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBh
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmICghZGVlcEVxdWFscyhhW2ldLCBiW2ldKSkgcmV0
dXJuIGZhbHNlOworICAgICAgfQorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChv
YmplY3RDbGFzcyA9PT0gIlN0cmluZyIgfHwgb2JqZWN0Q2xhc3MgPT09ICJOdW1iZXIiIHx8Cisg
ICAgICBvYmplY3RDbGFzcyA9PT0gIkJpZ0ludCIgfHwgb2JqZWN0Q2xhc3MgPT09ICJCb29sZWFu
IiB8fAorICAgICAgb2JqZWN0Q2xhc3MgPT09ICJEYXRlIikgeworICAgICAgaWYgKFZhbHVlT2Yo
YSkgIT09IFZhbHVlT2YoYikpIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGRlZXBP
YmplY3RFcXVhbHMoYSwgYik7CisgIH0KKworICBhc3NlcnRTYW1lID0gZnVuY3Rpb24gYXNzZXJ0
U2FtZShleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAgaWYgKE9iamVjdC5pcyhleHBl
Y3RlZCwgZm91bmQpKSByZXR1cm47CisgICAgZmFpbChwcmV0dHlQcmludGVkKGV4cGVjdGVkKSwg
Zm91bmQsIG5hbWVfb3B0KTsKKyAgfTsKKworICBhc3NlcnROb3RTYW1lID0gZnVuY3Rpb24gYXNz
ZXJ0Tm90U2FtZShleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAgaWYgKCFPYmplY3Qu
aXMoZXhwZWN0ZWQsIGZvdW5kKSkgcmV0dXJuOworICAgIGZhaWwoIm5vdCBzYW1lIGFzICIgKyBw
cmV0dHlQcmludGVkKGV4cGVjdGVkKSwgZm91bmQsIG5hbWVfb3B0KTsKKyAgfQorCisgIGFzc2Vy
dEVxdWFscyA9IGZ1bmN0aW9uIGFzc2VydEVxdWFscyhleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0
KSB7CisgICAgaWYgKCFkZWVwRXF1YWxzKGZvdW5kLCBleHBlY3RlZCkpIHsKKyAgICAgIGZhaWwo
cHJldHR5UHJpbnRlZChleHBlY3RlZCksIGZvdW5kLCBuYW1lX29wdCk7CisgICAgfQorICB9Owor
CisgIGFzc2VydE5vdEVxdWFscyA9IGZ1bmN0aW9uIGFzc2VydE5vdEVxdWFscyhleHBlY3RlZCwg
Zm91bmQsIG5hbWVfb3B0KSB7CisgICAgaWYgKGRlZXBFcXVhbHMoZm91bmQsIGV4cGVjdGVkKSkg
eworICAgICAgZmFpbCgibm90IGVxdWFscyB0byAiICsgcHJldHR5UHJpbnRlZChleHBlY3RlZCks
IGZvdW5kLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0RXF1YWxzRGVsdGEg
PQorICAgICAgZnVuY3Rpb24gYXNzZXJ0RXF1YWxzRGVsdGEoZXhwZWN0ZWQsIGZvdW5kLCBkZWx0
YSwgbmFtZV9vcHQpIHsKKyAgICBpZiAoTWF0aC5hYnMoZXhwZWN0ZWQgLSBmb3VuZCkgPiBkZWx0
YSkgeworICAgICAgZmFpbChwcmV0dHlQcmludGVkKGV4cGVjdGVkKSArICIgKy0gIiArIHByZXR0
eVByaW50ZWQoZGVsdGEpLCBmb3VuZCwgbmFtZV9vcHQpOworICAgIH0KKyAgfTsKKworCisgIGFz
c2VydEFycmF5RXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0QXJyYXlFcXVhbHMoZXhwZWN0ZWQsIGZv
dW5kLCBuYW1lX29wdCkgeworICAgIHZhciBzdGFydCA9ICIiOworICAgIGlmIChuYW1lX29wdCkg
eworICAgICAgc3RhcnQgPSBuYW1lX29wdCArICIgLSAiOworICAgIH0KKyAgICBhc3NlcnRFcXVh
bHMoZXhwZWN0ZWQubGVuZ3RoLCBmb3VuZC5sZW5ndGgsIHN0YXJ0ICsgImFycmF5IGxlbmd0aCIp
OworICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IGZvdW5kLmxlbmd0aCkgeworICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZC5sZW5ndGg7ICsraSkgeworICAgICAgICBhc3NlcnRF
cXVhbHMoZXhwZWN0ZWRbaV0sIGZvdW5kW2ldLAorICAgICAgICAgICAgICAgICAgICAgc3RhcnQg
KyAiYXJyYXkgZWxlbWVudCBhdCBpbmRleCAiICsgaSk7CisgICAgICB9CisgICAgfQorICB9Owor
CisKKyAgYXNzZXJ0UHJvcGVydGllc0VxdWFsID0gZnVuY3Rpb24gYXNzZXJ0UHJvcGVydGllc0Vx
dWFsKGV4cGVjdGVkLCBmb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5hbWVfb3B0KSB7CisgICAgLy8gQ2hlY2sgcHJvcGVydGll
cyBvbmx5LgorICAgIGlmICghZGVlcE9iamVjdEVxdWFscyhleHBlY3RlZCwgZm91bmQpKSB7Cisg
ICAgICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpOworICAgIH0KKyAgfTsKKworCisg
IGFzc2VydFRvU3RyaW5nRXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0VG9TdHJpbmdFcXVhbHMoZXhw
ZWN0ZWQsIGZvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWVfb3B0KSB7CisgICAgaWYgKGV4cGVjdGVkICE9PSBTdHJpbmcoZm91
bmQpKSB7CisgICAgICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpOworICAgIH0KKyAg
fTsKKworCisgIGFzc2VydFRydWUgPSBmdW5jdGlvbiBhc3NlcnRUcnVlKHZhbHVlLCBuYW1lX29w
dCkgeworICAgIGFzc2VydEVxdWFscyh0cnVlLCB2YWx1ZSwgbmFtZV9vcHQpOworICB9OworCisK
KyAgYXNzZXJ0RmFsc2UgPSBmdW5jdGlvbiBhc3NlcnRGYWxzZSh2YWx1ZSwgbmFtZV9vcHQpIHsK
KyAgICBhc3NlcnRFcXVhbHMoZmFsc2UsIHZhbHVlLCBuYW1lX29wdCk7CisgIH07CisKKworICBh
c3NlcnROdWxsID0gZnVuY3Rpb24gYXNzZXJ0TnVsbCh2YWx1ZSwgbmFtZV9vcHQpIHsKKyAgICBp
ZiAodmFsdWUgIT09IG51bGwpIHsKKyAgICAgIGZhaWwoIm51bGwiLCB2YWx1ZSwgbmFtZV9vcHQp
OworICAgIH0KKyAgfTsKKworCisgIGFzc2VydE5vdE51bGwgPSBmdW5jdGlvbiBhc3NlcnROb3RO
dWxsKHZhbHVlLCBuYW1lX29wdCkgeworICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgeworICAgICAg
ZmFpbCgibm90IG51bGwiLCB2YWx1ZSwgbmFtZV9vcHQpOworICAgIH0KKyAgfTsKKworICBmdW5j
dGlvbiBleGVjdXRlQ29kZShjb2RlKSB7CisgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnZnVuY3Rp
b24nKSAgcmV0dXJuIGNvZGUoKTsKKyAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnKSBy
ZXR1cm4gZXZhbChjb2RlKTsKKyAgICBmYWlsV2l0aE1lc3NhZ2UoCisgICAgICAgICdHaXZlbiBj
b2RlIGlzIG5laXRoZXIgZnVuY3Rpb24gbm9yIHN0cmluZywgYnV0ICcgKyAodHlwZW9mIGNvZGUp
ICsKKyAgICAgICAgJzogPCcgKyBwcmV0dHlQcmludGVkKGNvZGUpICsgJz4nKTsKKyAgfQorCisg
IGZ1bmN0aW9uIGNoZWNrRXhjZXB0aW9uKGUsIHR5cGVfb3B0LCBjYXVzZV9vcHQpIHsKKyAgICBp
ZiAodHlwZV9vcHQgIT09IHVuZGVmaW5lZCkgeworICAgICAgYXNzZXJ0RXF1YWxzKCdmdW5jdGlv
bicsIHR5cGVvZiB0eXBlX29wdCk7CisgICAgICBhc3NlcnRJbnN0YW5jZW9mKGUsIHR5cGVfb3B0
KTsKKyAgICB9CisgICAgaWYgKFJlZ0V4cCAhPT0gdW5kZWZpbmVkICYmIGNhdXNlX29wdCBpbnN0
YW5jZW9mIFJlZ0V4cCkgeworICAgICAgYXNzZXJ0TWF0Y2hlcyhjYXVzZV9vcHQsIGUubWVzc2Fn
ZSwgJ0Vycm9yIG1lc3NhZ2UnKTsKKyAgICB9IGVsc2UgaWYgKGNhdXNlX29wdCAhPT0gdW5kZWZp
bmVkKSB7CisgICAgICBhc3NlcnRFcXVhbHMoY2F1c2Vfb3B0LCBlLm1lc3NhZ2UsICdFcnJvciBt
ZXNzYWdlJyk7CisgICAgfQorICB9CisKKyAgYXNzZXJ0VGhyb3dzID0gZnVuY3Rpb24gYXNzZXJ0
VGhyb3dzKGNvZGUsIHR5cGVfb3B0LCBjYXVzZV9vcHQpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxl
bmd0aCA+IDEgJiYgdHlwZV9vcHQgPT09IHVuZGVmaW5lZCkgeworICAgICAgZmFpbFdpdGhNZXNz
YWdlKCdpbnZhbGlkIHVzZSBvZiBhc3NlcnRUaHJvd3MsIHVua25vd24gdHlwZV9vcHQgZ2l2ZW4n
KTsKKyAgICB9CisgICAgaWYgKHR5cGVfb3B0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHR5cGVf
b3B0ICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICBmYWlsV2l0aE1lc3NhZ2UoCisgICAgICAgICAg
J2ludmFsaWQgdXNlIG9mIGFzc2VydFRocm93cywgbWF5YmUgeW91IHdhbnQgYXNzZXJ0VGhyb3dz
RXF1YWxzJyk7CisgICAgfQorICAgIHRyeSB7CisgICAgICBleGVjdXRlQ29kZShjb2RlKTsKKyAg
ICB9IGNhdGNoIChlKSB7CisgICAgICBjaGVja0V4Y2VwdGlvbihlLCB0eXBlX29wdCwgY2F1c2Vf
b3B0KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgbGV0IG1zZyA9ICdEaWQgbm90IHRocm93
IGV4Y2VwdGlvbic7CisgICAgaWYgKHR5cGVfb3B0ICE9PSB1bmRlZmluZWQgJiYgdHlwZV9vcHQu
bmFtZSAhPT0gdW5kZWZpbmVkKQorICAgICAgbXNnICs9ICcsIGV4cGVjdGVkICcgKyB0eXBlX29w
dC5uYW1lOworICAgIGZhaWxXaXRoTWVzc2FnZShtc2cpOworICB9OworCisgIGFzc2VydFRocm93
c0VxdWFscyA9IGZ1bmN0aW9uIGFzc2VydFRocm93c0VxdWFscyhmdW4sIHZhbCkgeworICAgIHRy
eSB7CisgICAgICBmdW4oKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBhc3NlcnRTYW1lKHZh
bCwgZSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZhaWxXaXRoTWVzc2FnZSgnRGlkIG5v
dCB0aHJvdyBleGNlcHRpb24sIGV4cGVjdGVkICcgKyBwcmV0dHlQcmludGVkKHZhbCkpOworICB9
OworCisgIGFzc2VydFRocm93c0FzeW5jID0gZnVuY3Rpb24gYXNzZXJ0VGhyb3dzQXN5bmMocHJv
bWlzZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4g
MSAmJiB0eXBlX29wdCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICBmYWlsV2l0aE1lc3NhZ2UoJ2lu
dmFsaWQgdXNlIG9mIGFzc2VydFRocm93cywgdW5rbm93biB0eXBlX29wdCBnaXZlbicpOworICAg
IH0KKyAgICBpZiAodHlwZV9vcHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdHlwZV9vcHQgIT09
ICdmdW5jdGlvbicpIHsKKyAgICAgIGZhaWxXaXRoTWVzc2FnZSgKKyAgICAgICAgICAnaW52YWxp
ZCB1c2Ugb2YgYXNzZXJ0VGhyb3dzLCBtYXliZSB5b3Ugd2FudCBhc3NlcnRUaHJvd3NFcXVhbHMn
KTsKKyAgICB9CisgICAgbGV0IG1zZyA9ICdQcm9taXNlIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9u
JzsKKyAgICBpZiAodHlwZV9vcHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlX29wdC5uYW1lICE9PSB1
bmRlZmluZWQpCisgICAgICBtc2cgKz0gJywgZXhwZWN0ZWQgJyArIHR5cGVfb3B0Lm5hbWU7Cisg
ICAgcmV0dXJuIGFzc2VydFByb21pc2VSZXN1bHQoCisgICAgICAgIHByb21pc2UsCisgICAgICAg
IC8vIFVzZSBzZXRUaW1lb3V0IHRvIHRocm93IHRoZSBlcnJvciBhZ2FpbiB0byBnZXQgb3V0IG9m
IHRoZSBwcm9taXNlCisgICAgICAgIC8vIGNoYWluLgorICAgICAgICByZXMgPT4gc2V0VGltZW91
dChfID0+IGZhaWwoJzx0aHJvdz4nLCByZXMsIG1zZyksIDApLAorICAgICAgICBlID0+IGNoZWNr
RXhjZXB0aW9uKGUsIHR5cGVfb3B0LCBjYXVzZV9vcHQpKTsKKyAgfTsKKworICBhc3NlcnRJbnN0
YW5jZW9mID0gZnVuY3Rpb24gYXNzZXJ0SW5zdGFuY2VvZihvYmosIHR5cGUpIHsKKyAgICBpZiAo
IShvYmogaW5zdGFuY2VvZiB0eXBlKSkgeworICAgICAgdmFyIGFjdHVhbFR5cGVOYW1lID0gbnVs
bDsKKyAgICAgIHZhciBhY3R1YWxDb25zdHJ1Y3RvciA9IG9iaiAmJiBPYmplY3QuZ2V0UHJvdG90
eXBlT2Yob2JqKS5jb25zdHJ1Y3RvcjsKKyAgICAgIGlmICh0eXBlb2YgYWN0dWFsQ29uc3RydWN0
b3IgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgYWN0dWFsVHlwZU5hbWUgPSBhY3R1YWxDb25z
dHJ1Y3Rvci5uYW1lIHx8IFN0cmluZyhhY3R1YWxDb25zdHJ1Y3Rvcik7CisgICAgICB9CisgICAg
ICBmYWlsV2l0aE1lc3NhZ2UoCisgICAgICAgICAgJ09iamVjdCA8JyArIHByZXR0eVByaW50ZWQo
b2JqKSArICc+IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiA8JyArCisgICAgICAgICAgKHR5cGUubmFt
ZSB8fCB0eXBlKSArICc+JyArCisgICAgICAgICAgKGFjdHVhbFR5cGVOYW1lID8gJyBidXQgb2Yg
PCcgKyBhY3R1YWxUeXBlTmFtZSArICc+JyA6ICcnKSk7CisgICAgfQorICB9OworCisgIGFzc2Vy
dERvZXNOb3RUaHJvdyA9IGZ1bmN0aW9uIGFzc2VydERvZXNOb3RUaHJvdyhjb2RlLCBuYW1lX29w
dCkgeworICAgIHRyeSB7CisgICAgICBleGVjdXRlQ29kZShjb2RlKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICBpZiAoZSBpbnN0YW5jZW9mIE1qc1VuaXRBc3NlcnRpb25FcnJvcikgdGhyb3cg
ZTsKKyAgICAgIGZhaWxXaXRoTWVzc2FnZSgidGhyZXcgYW4gZXhjZXB0aW9uOiAiICsgKGUubWVz
c2FnZSB8fCBlKSk7CisgICAgfQorICB9OworCisgIGFzc2VydFVucmVhY2hhYmxlID0gZnVuY3Rp
b24gYXNzZXJ0VW5yZWFjaGFibGUobmFtZV9vcHQpIHsKKyAgICAvLyBGaXggdGhpcyB3aGVuIHdl
IGRpdGNoIHRoZSBvbGQgdGVzdCBydW5uZXIuCisgICAgdmFyIG1lc3NhZ2UgPSAiRmFpbCIgKyAi
dXJlOiB1bnJlYWNoYWJsZSI7CisgICAgaWYgKG5hbWVfb3B0KSB7CisgICAgICBtZXNzYWdlICs9
ICIgLSAiICsgbmFtZV9vcHQ7CisgICAgfQorICAgIGZhaWxXaXRoTWVzc2FnZShtZXNzYWdlKTsK
KyAgfTsKKworICBhc3NlcnRDb250YWlucyA9IGZ1bmN0aW9uKHN1YiwgdmFsdWUsIG5hbWVfb3B0
KSB7CisgICAgaWYgKHZhbHVlID09IG51bGwgPyAoc3ViICE9IG51bGwpIDogdmFsdWUuaW5kZXhP
ZihzdWIpID09IC0xKSB7CisgICAgICBmYWlsKCJjb250YWlucyAnIiArIFN0cmluZyhzdWIpICsg
IiciLCB2YWx1ZSwgbmFtZV9vcHQpOworICAgIH0KKyAgfTsKKworICBhc3NlcnRNYXRjaGVzID0g
ZnVuY3Rpb24ocmVnZXhwLCBzdHIsIG5hbWVfb3B0KSB7CisgICAgaWYgKCEocmVnZXhwIGluc3Rh
bmNlb2YgUmVnRXhwKSkgeworICAgICAgcmVnZXhwID0gbmV3IFJlZ0V4cChyZWdleHApOworICAg
IH0KKyAgICBpZiAoIXN0ci5tYXRjaChyZWdleHApKSB7CisgICAgICBmYWlsKCJzaG91bGQgbWF0
Y2ggJyIgKyByZWdleHAgKyAiJyIsIHN0ciwgbmFtZV9vcHQpOworICAgIH0KKyAgfTsKKworICBm
dW5jdGlvbiBjb25jYXRlbmF0ZUVycm9ycyhzdGFjaywgZXhjZXB0aW9uKSB7CisgICAgLy8gSWYg
dGhlIGV4Y2VwdGlvbiBkb2VzIG5vdCBjb250YWluIGEgc3RhY2sgdHJhY2UsIHdyYXAgaXQgaW4g
YSBuZXcgRXJyb3IuCisgICAgaWYgKCFleGNlcHRpb24uc3RhY2spIGV4Y2VwdGlvbiA9IG5ldyBF
cnJvcihleGNlcHRpb24pOworCisgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiBhbHJlYWR5IHByb3Zp
ZGVzIGEgc3BlY2lhbCBzdGFjayB0cmFjZSwgd2UgZG8gbm90IG1vZGlmeQorICAgIC8vIGl0Lgor
ICAgIGlmICh0eXBlb2YgZXhjZXB0aW9uLnN0YWNrICE9PSAnc3RyaW5nJykgeworICAgICAgcmV0
dXJuIGV4Y2VwdGlvbjsKKyAgICB9CisgICAgZXhjZXB0aW9uLnN0YWNrID0gc3RhY2sgKyAnXG5c
bicgKyBleGNlcHRpb24uc3RhY2s7CisgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgfQorCisgIGFz
c2VydFByb21pc2VSZXN1bHQgPSBmdW5jdGlvbihwcm9taXNlLCBzdWNjZXNzLCBmYWlsKSB7Cisg
ICAgaWYgKHN1Y2Nlc3MgIT09IHVuZGVmaW5lZCkgYXNzZXJ0RXF1YWxzKCdmdW5jdGlvbicsIHR5
cGVvZiBzdWNjZXNzKTsKKyAgICBpZiAoZmFpbCAhPT0gdW5kZWZpbmVkKSBhc3NlcnRFcXVhbHMo
J2Z1bmN0aW9uJywgdHlwZW9mIGZhaWwpOworICAgIGFzc2VydEluc3RhbmNlb2YocHJvbWlzZSwg
UHJvbWlzZSk7CisgICAgY29uc3Qgc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrOworCisgICAg
dmFyIHRlc3RfcHJvbWlzZSA9IHByb21pc2UudGhlbigKKyAgICAgICAgcmVzdWx0ID0+IHsKKyAg
ICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKC0tcHJvbWlzZVRlc3RDb3VudCA9PSAwKSB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIGlmIChzdWNjZXNzICE9PSB1bmRl
ZmluZWQpIHN1Y2Nlc3MocmVzdWx0KTsKKyAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
ICAgICAvLyBVc2Ugc2V0VGltZW91dCB0byB0aHJvdyB0aGUgZXJyb3IgYWdhaW4gdG8gZ2V0IG91
dCBvZiB0aGUgcHJvbWlzZQorICAgICAgICAgICAgLy8gY2hhaW4uCisgICAgICAgICAgICBzZXRU
aW1lb3V0KF8gPT4geworICAgICAgICAgICAgICB0aHJvdyBjb25jYXRlbmF0ZUVycm9ycyhzdGFj
aywgZSk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAg
ICAgIHJlc3VsdCA9PiB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmICgtLXByb21p
c2VUZXN0Q291bnQgPT0gMCkgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICBp
ZiAoZmFpbCA9PT0gdW5kZWZpbmVkKSB0aHJvdyByZXN1bHQ7CisgICAgICAgICAgICBmYWlsKHJl
c3VsdCk7CisgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgLy8gVXNlIHNldFRp
bWVvdXQgdG8gdGhyb3cgdGhlIGVycm9yIGFnYWluIHRvIGdldCBvdXQgb2YgdGhlIHByb21pc2UK
KyAgICAgICAgICAgIC8vIGNoYWluLgorICAgICAgICAgICAgc2V0VGltZW91dChfID0+IHsKKyAg
ICAgICAgICAgICAgdGhyb3cgY29uY2F0ZW5hdGVFcnJvcnMoc3RhY2ssIGUpOworICAgICAgICAg
ICAgfSwgMCk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgIGlmICghcHJvbWlzZVRl
c3RDaGFpbikgcHJvbWlzZVRlc3RDaGFpbiA9IFByb21pc2UucmVzb2x2ZSgpOworICAgIC8vIHdh
aXRVbnRpbERvbmUgaXMgaWRlbXBvdGVudC4KKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICArK3Byb21pc2VUZXN0Q291bnQ7CisgICAgcmV0dXJuIHByb21pc2VUZXN0Q2hhaW4u
dGhlbih0ZXN0X3Byb21pc2UpOworICB9OworCisgIHZhciBPcHRpbWl6YXRpb25TdGF0dXNJbXBs
ID0gdW5kZWZpbmVkOworCisgIHZhciBPcHRpbWl6YXRpb25TdGF0dXMgPSBmdW5jdGlvbihmdW4p
IHsKKyAgICBpZiAoT3B0aW1pemF0aW9uU3RhdHVzSW1wbCA9PT0gdW5kZWZpbmVkKSB7CisgICAg
ICB0cnkgeworICAgICAgICBPcHRpbWl6YXRpb25TdGF0dXNJbXBsID0gbmV3IEZ1bmN0aW9uKAor
ICAgICAgICAgICAgImZ1biIsICJyZXR1cm4gJUdldE9wdGltaXphdGlvblN0YXR1cyhmdW4pOyIp
OworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm5hdGl2ZXMg
c3ludGF4IG5vdCBhbGxvd2VkIik7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBPcHRpbWl6
YXRpb25TdGF0dXNJbXBsKGZ1bik7CisgIH0KKworICBhc3NlcnRVbm9wdGltaXplZCA9IGZ1bmN0
aW9uIGFzc2VydFVub3B0aW1pemVkKAorICAgICAgZnVuLCBuYW1lX29wdCwgc2tpcF9pZl9tYXli
ZV9kZW9wdGVkID0gdHJ1ZSkgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3Rh
dHVzKGZ1bik7CisgICAgLy8gVGVzdHMgdGhhdCB1c2UgYXNzZXJ0VW5vcHRpbWl6ZWQoKSBkbyBu
b3QgbWFrZSBzZW5zZSBpZiAtLWFsd2F5cy1vcHQKKyAgICAvLyBvcHRpb24gaXMgcHJvdmlkZWQu
IFN1Y2ggdGVzdHMgbXVzdCBhZGQgLS1uby1hbHdheXMtb3B0IHRvIGZsYWdzIGNvbW1lbnQuCisg
ICAgYXNzZXJ0RmFsc2UoKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rQWx3YXlz
T3B0aW1pemUpICE9PSAwLAorICAgICAgICAgICAgICAgICJ0ZXN0IGRvZXMgbm90IG1ha2Ugc2Vu
c2Ugd2l0aCAtLWFsd2F5cy1vcHQiKTsKKyAgICBhc3NlcnRUcnVlKChvcHRfc3RhdHVzICYgVjhP
cHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAwLCBuYW1lX29wdCk7CisgICAgaWYg
KHNraXBfaWZfbWF5YmVfZGVvcHRlZCAmJgorICAgICAgICAob3B0X3N0YXR1cyAmIFY4T3B0aW1p
emF0aW9uU3RhdHVzLmtNYXliZURlb3B0ZWQpICE9PSAwKSB7CisgICAgICAvLyBXaGVuIC0tZGVv
cHQtZXZlcnktbi10aW1lcyBmbGFnIGlzIHNwZWNpZmllZCBpdCdzIG5vIGxvbmdlciBndWFyYW50
ZWVkCisgICAgICAvLyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgc3RpbGwgZGVvcHRpbWl6
ZWQsIHNvIGtlZXAgcnVubmluZyB0aGUgdGVzdAorICAgICAgLy8gdG8gc3RyZXNzIHRlc3QgdGhl
IGRlb3B0aW1pemVyLgorICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIgaXNfb3B0aW1pemVk
ID0gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rT3B0aW1pemVkKSAhPT0gMDsK
KyAgICBhc3NlcnRGYWxzZShpc19vcHRpbWl6ZWQsIG5hbWVfb3B0KTsKKyAgfQorCisgIGFzc2Vy
dE9wdGltaXplZCA9IGZ1bmN0aW9uIGFzc2VydE9wdGltaXplZCgKKyAgICAgIGZ1biwgbmFtZV9v
cHQsIHNraXBfaWZfbWF5YmVfZGVvcHRlZCA9IHRydWUpIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9
IE9wdGltaXphdGlvblN0YXR1cyhmdW4pOworICAgIC8vIFRlc3RzIHRoYXQgdXNlIGFzc2VydE9w
dGltaXplZCgpIGRvIG5vdCBtYWtlIHNlbnNlIGZvciBMaXRlIG1vZGUgd2hlcmUKKyAgICAvLyBv
cHRpbWl6YXRpb24gaXMgYWx3YXlzIGRpc2FibGVkLCBleHBsaWNpdGx5IGV4aXQgdGhlIHRlc3Qg
d2l0aCBhIHdhcm5pbmcuCisgICAgaWYgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1
cy5rTGl0ZU1vZGUpIHsKKyAgICAgIHByaW50KCJXYXJuaW5nOiBUZXN0IHVzZXMgYXNzZXJ0T3B0
aW1pemVkIGluIExpdGUgbW9kZSwgc2tpcHBpbmcgdGVzdC4iKTsKKyAgICAgIHRlc3RSdW5uZXIu
cXVpdCgwKTsKKyAgICB9CisgICAgLy8gVGVzdHMgdGhhdCB1c2UgYXNzZXJ0T3B0aW1pemVkKCkg
ZG8gbm90IG1ha2Ugc2Vuc2UgaWYgLS1uby1vcHQKKyAgICAvLyBvcHRpb24gaXMgcHJvdmlkZWQu
IFN1Y2ggdGVzdHMgbXVzdCBhZGQgLS1vcHQgdG8gZmxhZ3MgY29tbWVudC4KKyAgICBhc3NlcnRG
YWxzZSgob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtOZXZlck9wdGltaXplKSAh
PT0gMCwKKyAgICAgICAgICAgICAgICAidGVzdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggLS1u
by1vcHQiKTsKKyAgICBhc3NlcnRUcnVlKAorICAgICAgICAob3B0X3N0YXR1cyAmIFY4T3B0aW1p
emF0aW9uU3RhdHVzLmtJc0Z1bmN0aW9uKSAhPT0gMCwKKyAgICAgICAgJ3Nob3VsZCBiZSBhIGZ1
bmN0aW9uOiAnICsgbmFtZV9vcHQpOworICAgIGlmIChza2lwX2lmX21heWJlX2Rlb3B0ZWQgJiYK
KyAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rTWF5YmVEZW9wdGVk
KSAhPT0gMCkgeworICAgICAgLy8gV2hlbiAtLWRlb3B0LWV2ZXJ5LW4tdGltZXMgZmxhZyBpcyBz
cGVjaWZpZWQgaXQncyBubyBsb25nZXIgZ3VhcmFudGVlZAorICAgICAgLy8gdGhhdCBwYXJ0aWN1
bGFyIGZ1bmN0aW9uIGlzIHN0aWxsIG9wdGltaXplZCwgc28ga2VlcCBydW5uaW5nIHRoZSB0ZXN0
CisgICAgICAvLyB0byBzdHJlc3MgdGVzdCB0aGUgZGVvcHRpbWl6ZXIuCisgICAgICByZXR1cm47
CisgICAgfQorICAgIGFzc2VydFRydWUoCisgICAgICAgIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6
YXRpb25TdGF0dXMua09wdGltaXplZCkgIT09IDAsCisgICAgICAgICdzaG91bGQgYmUgb3B0aW1p
emVkOiAnICsgbmFtZV9vcHQpOworICB9CisKKyAgaXNOZXZlck9wdGltaXplTGl0ZU1vZGUgPSBm
dW5jdGlvbiBpc05ldmVyT3B0aW1pemVMaXRlTW9kZSgpIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9
IE9wdGltaXphdGlvblN0YXR1cyh1bmRlZmluZWQsICIiKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0
dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rTGl0ZU1vZGUpICE9PSAwOworICB9CisKKyAgaXNO
ZXZlck9wdGltaXplID0gZnVuY3Rpb24gaXNOZXZlck9wdGltaXplKCkgeworICAgIHZhciBvcHRf
c3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKHVuZGVmaW5lZCwgIiIpOworICAgIHJldHVybiAo
b3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtOZXZlck9wdGltaXplKSAhPT0gMDsK
KyAgfQorCisgIGlzQWx3YXlzT3B0aW1pemUgPSBmdW5jdGlvbiBpc0Fsd2F5c09wdGltaXplKCkg
eworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKHVuZGVmaW5lZCwgIiIp
OworICAgIHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtBbHdheXNP
cHRpbWl6ZSkgIT09IDA7CisgIH0KKworICBpc0ludGVycHJldGVkID0gZnVuY3Rpb24gaXNJbnRl
cnByZXRlZChmdW4pIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1cyhm
dW4sICIiKTsKKyAgICBhc3NlcnRUcnVlKChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0
dXMua0lzRnVuY3Rpb24pICE9PSAwLAorICAgICAgICAgICAgICAgIm5vdCBhIGZ1bmN0aW9uIik7
CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua09wdGltaXpl
ZCkgPT09IDAgJiYKKyAgICAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1
cy5rSW50ZXJwcmV0ZWQpICE9PSAwOworICB9CisKKyAgaXNCYXNlbGluZSA9IGZ1bmN0aW9uIGlz
QmFzZWxpbmUoZnVuKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXMo
ZnVuLCAiIik7CisgICAgYXNzZXJ0VHJ1ZSgob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3Rh
dHVzLmtJc0Z1bmN0aW9uKSAhPT0gMCwKKyAgICAgICAgICAgICAgICJub3QgYSBmdW5jdGlvbiIp
OworICAgIHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtPcHRpbWl6
ZWQpID09PSAwICYmCisgICAgICAgICAgIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0
dXMua0Jhc2VsaW5lKSAhPT0gMDsKKyAgfQorCisgIGlzVW5vcHRpbWl6ZWQgPSBmdW5jdGlvbiBp
c1Vub3B0aW1pemVkKGZ1bikgeworICAgIHJldHVybiBpc0ludGVycHJldGVkKGZ1bikgfHwgaXNC
YXNlbGluZShmdW4pOworICB9CisKKyAgaXNPcHRpbWl6ZWQgPSBmdW5jdGlvbiBpc09wdGltaXpl
ZChmdW4pIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1cyhmdW4sICIi
KTsKKyAgICBhc3NlcnRUcnVlKChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0lz
RnVuY3Rpb24pICE9PSAwLAorICAgICAgICAgICAgICAgIm5vdCBhIGZ1bmN0aW9uIik7CisgICAg
cmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua09wdGltaXplZCkgIT09
IDA7CisgIH0KKworICBpc1R1cmJvRmFubmVkID0gZnVuY3Rpb24gaXNUdXJib0Zhbm5lZChmdW4p
IHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1cyhmdW4sICIiKTsKKyAg
ICBhc3NlcnRUcnVlKChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rp
b24pICE9PSAwLAorICAgICAgICAgICAgICAgIm5vdCBhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJu
IChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua09wdGltaXplZCkgIT09IDAgJiYK
KyAgICAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rVHVyYm9GYW5u
ZWQpICE9PSAwOworICB9CisKKyAgLy8gQ3VzdG9tIFY4LXNwZWNpZmljIHN0YWNrIHRyYWNlIGZv
cm1hdHRlciB0aGF0IGlzIHRlbXBvcmFyaWx5IGluc3RhbGxlZCBvbgorICAvLyB0aGUgRXJyb3Ig
b2JqZWN0LgorICBNanNVbml0QXNzZXJ0aW9uRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBmdW5j
dGlvbihlcnJvciwgc3RhY2spIHsKKyAgICAvLyBUcmlnZ2VyIGRlZmF1bHQgZm9ybWF0dGluZyB3
aXRoIHJlY3Vyc2lvbi4KKyAgICB0cnkgeworICAgICAgLy8gRmlsdGVyLW91dCBhbGwgYnV0IHRo
ZSBmaXJzdCBtanN1bml0IGZyYW1lLgorICAgICAgbGV0IGZpbHRlcmVkU3RhY2sgPSBbXTsKKyAg
ICAgIGxldCBpbk1qc3VuaXQgPSB0cnVlOworICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGFj
ay5sZW5ndGg7IGkrKykgeworICAgICAgICBsZXQgZnJhbWUgPSBzdGFja1tpXTsKKyAgICAgICAg
aWYgKGluTWpzdW5pdCkgeworICAgICAgICAgIGxldCBmaWxlID0gZnJhbWUuZ2V0RmlsZU5hbWUo
KTsKKyAgICAgICAgICBpZiAoIWZpbGUgfHwgIWZpbGUuZW5kc1dpdGgoIm1qc3VuaXQuanMiKSkg
eworICAgICAgICAgICAgaW5NanN1bml0ID0gZmFsc2U7CisgICAgICAgICAgICAvLyBQdXNoIHRo
ZSBsYXN0IG1qc3VuaXQgZnJhbWUsIHR5cGljYWxseSBjb250YWluaW5nIHRoZSBhc3NlcnRpb24K
KyAgICAgICAgICAgIC8vIGZ1bmN0aW9uLgorICAgICAgICAgICAgaWYgKGkgPiAwKSBBcnJheVBy
b3RvdHlwZVB1c2guY2FsbChmaWx0ZXJlZFN0YWNrLCBzdGFja1tpLTFdKTsKKyAgICAgICAgICAg
IEFycmF5UHJvdG90eXBlUHVzaC5jYWxsKGZpbHRlcmVkU3RhY2ssIHN0YWNrW2ldKTsKKyAgICAg
ICAgICB9CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQXJyYXlQcm90
b3R5cGVQdXNoLmNhbGwoZmlsdGVyZWRTdGFjaywgZnJhbWUpOworICAgICAgfQorICAgICAgc3Rh
Y2sgPSBmaWx0ZXJlZFN0YWNrOworCisgICAgICAvLyBJbmZlciBmdW5jdGlvbiBuYW1lcyBhbmQg
Y2FsY3VsYXRlIHttYXhfbmFtZV9sZW5ndGh9CisgICAgICBsZXQgbWF4X25hbWVfbGVuZ3RoID0g
MDsKKyAgICAgIEFycmF5UHJvdG90eXBlRm9yRWFjaC5jYWxsKHN0YWNrLCBlYWNoID0+IHsKKyAg
ICAgICAgbGV0IG5hbWUgPSBlYWNoLmdldEZ1bmN0aW9uTmFtZSgpOworICAgICAgICBpZiAobmFt
ZSA9PSBudWxsKSBuYW1lID0gIiI7CisgICAgICAgIGlmIChlYWNoLmlzRXZhbCgpKSB7CisgICAg
ICAgICAgbmFtZSA9IG5hbWU7CisgICAgICAgIH0gZWxzZSBpZiAoZWFjaC5pc0NvbnN0cnVjdG9y
KCkpIHsKKyAgICAgICAgICBuYW1lID0gIm5ldyAiICsgbmFtZTsKKyAgICAgICAgfSBlbHNlIGlm
IChlYWNoLmlzTmF0aXZlKCkpIHsKKyAgICAgICAgICBuYW1lID0gIm5hdGl2ZSAiICsgbmFtZTsK
KyAgICAgICAgfSBlbHNlIGlmICghZWFjaC5pc1RvcGxldmVsKCkpIHsKKyAgICAgICAgICBuYW1l
ID0gZWFjaC5nZXRUeXBlTmFtZSgpICsgIi4iICsgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBl
YWNoLm5hbWUgPSBuYW1lOworICAgICAgICBtYXhfbmFtZV9sZW5ndGggPSBNYXRoLm1heChuYW1l
Lmxlbmd0aCwgbWF4X25hbWVfbGVuZ3RoKQorICAgICAgfSk7CisKKyAgICAgIC8vIEZvcm1hdCBz
dGFjayBmcmFtZXMuCisgICAgICBzdGFjayA9IEFycmF5UHJvdG90eXBlTWFwLmNhbGwoc3RhY2ss
IGVhY2ggPT4geworICAgICAgICBsZXQgZnJhbWUgPSAiICAgIGF0ICIgKyBlYWNoLm5hbWUucGFk
RW5kKG1heF9uYW1lX2xlbmd0aCk7CisgICAgICAgIGxldCBmaWxlTmFtZSA9IGVhY2guZ2V0Rmls
ZU5hbWUoKTsKKyAgICAgICAgaWYgKGVhY2guaXNFdmFsKCkpIHJldHVybiBmcmFtZSArICIgIiAr
IGVhY2guZ2V0RXZhbE9yaWdpbigpOworICAgICAgICBmcmFtZSArPSAiICIgKyAoZmlsZU5hbWUg
PyBmaWxlTmFtZSA6ICIiKTsKKyAgICAgICAgbGV0IGxpbmU9IGVhY2guZ2V0TGluZU51bWJlcigp
OworICAgICAgICBmcmFtZSArPSAiICIgKyAobGluZSA/IGxpbmUgOiAiIik7CisgICAgICAgIGxl
dCBjb2x1bW4gPSBlYWNoLmdldENvbHVtbk51bWJlcigpOworICAgICAgICBmcmFtZSArPSAoY29s
dW1uID8gIjoiICsgY29sdW1uIDogIiIpOworICAgICAgICByZXR1cm4gZnJhbWU7CisgICAgICB9
KTsKKyAgICAgIHJldHVybiAiIiArIGVycm9yLm1lc3NhZ2UgKyAiXG4iICsgQXJyYXlQcm90b3R5
cGVKb2luLmNhbGwoc3RhY2ssICJcbiIpOworICAgIH0gY2F0Y2ggKGUpIHt9OworICAgIHJldHVy
biBlcnJvci5zdGFjazsKKyAgfQorfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC93
YXNtLW1vZHVsZS1idWlsZGVyLmpzIGIvSlNUZXN0cy93YXNtL3Y4L3dhc20tbW9kdWxlLWJ1aWxk
ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDY3ZWQ4NGQwZTU5ZjI4NTJhY2E0YTUyMjNmZDU5ZTlmZWRmN2Ix
MAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC93YXNtLW1vZHVsZS1idWlsZGVy
LmpzCkBAIC0wLDAgKzEsMjE2OSBAQAorLy8gQ29weXJpZ2h0IDIwMTYgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIFVzZWQgZm9yIGVuY29kaW5nIGYzMiBhbmQgZG91
YmxlIGNvbnN0YW50cyB0byBiaXRzLgorbGV0IGJ5dGVfdmlldyA9IG5ldyBVaW50OEFycmF5KDgp
OworbGV0IGRhdGFfdmlldyA9IG5ldyBEYXRhVmlldyhieXRlX3ZpZXcuYnVmZmVyKTsKKworLy8g
VGhlIGJ5dGVzIGZ1bmN0aW9uIHJlY2VpdmVzIG9uZSBvZgorLy8gIC0gc2V2ZXJhbCBhcmd1bWVu
dHMsIGVhY2ggb2Ygd2hpY2ggaXMgZWl0aGVyIGEgbnVtYmVyIG9yIGEgc3RyaW5nIG9mIGxlbmd0
aAorLy8gICAgMTsgaWYgaXQncyBhIHN0cmluZywgdGhlIGNoYXJjb2RlIG9mIHRoZSBjb250YWlu
ZWQgY2hhcmFjdGVyIGlzIHVzZWQuCisvLyAgLSBhIHNpbmdsZSBhcnJheSBhcmd1bWVudCBjb250
YWluaW5nIHRoZSBhY3R1YWwgYXJndW1lbnRzCisvLyAgLSBhIHNpbmdsZSBzdHJpbmc7IHRoZSBy
ZXR1cm5lZCBidWZmZXIgd2lsbCBjb250YWluIHRoZSBjaGFyIGNvZGVzIG9mIGFsbAorLy8gICAg
Y29udGFpbmVkIGNoYXJhY3RlcnMuCitmdW5jdGlvbiBieXRlcyguLi5pbnB1dCkgeworICBpZiAo
aW5wdXQubGVuZ3RoID09IDEgJiYgdHlwZW9mIGlucHV0WzBdID09ICdhcnJheScpIGlucHV0ID0g
aW5wdXRbMF07CisgIGlmIChpbnB1dC5sZW5ndGggPT0gMSAmJiB0eXBlb2YgaW5wdXRbMF0gPT0g
J3N0cmluZycpIHsKKyAgICBsZXQgbGVuID0gaW5wdXRbMF0ubGVuZ3RoOworICAgIGxldCB2aWV3
ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsr
KSB2aWV3W2ldID0gaW5wdXRbMF0uY2hhckNvZGVBdChpKTsKKyAgICByZXR1cm4gdmlldy5idWZm
ZXI7CisgIH0KKyAgbGV0IHZpZXcgPSBuZXcgVWludDhBcnJheShpbnB1dC5sZW5ndGgpOworICBm
b3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7CisgICAgbGV0IHZhbCA9IGlu
cHV0W2ldOworICAgIGlmICh0eXBlb2YgdmFsID09ICdzdHJpbmcnKSB7CisgICAgICBpZiAodmFs
Lmxlbmd0aCAhPSAxKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5nIGlucHV0cyBt
dXN0IGhhdmUgbGVuZ3RoIDEnKTsKKyAgICAgIH0KKyAgICAgIHZhbCA9IHZhbC5jaGFyQ29kZUF0
KDApOworICAgIH0KKyAgICB2aWV3W2ldID0gdmFsIHwgMDsKKyAgfQorICByZXR1cm4gdmlldy5i
dWZmZXI7Cit9CisKKy8vIEhlYWRlciBkZWNsYXJhdGlvbiBjb25zdGFudHMKK3ZhciBrV2FzbUgw
ID0gMDsKK3ZhciBrV2FzbUgxID0gMHg2MTsKK3ZhciBrV2FzbUgyID0gMHg3MzsKK3ZhciBrV2Fz
bUgzID0gMHg2ZDsKKwordmFyIGtXYXNtVjAgPSAweDE7Cit2YXIga1dhc21WMSA9IDA7Cit2YXIg
a1dhc21WMiA9IDA7Cit2YXIga1dhc21WMyA9IDA7CisKK3ZhciBrSGVhZGVyU2l6ZSA9IDg7Cit2
YXIga1BhZ2VTaXplID0gNjU1MzY7Cit2YXIga1NwZWNNYXhQYWdlcyA9IDY1NTM2OwordmFyIGtN
YXhWYXJJbnQzMlNpemUgPSA1OwordmFyIGtNYXhWYXJJbnQ2NFNpemUgPSAxMDsKKworbGV0IGtE
ZWNsTm9Mb2NhbHMgPSAwOworCisvLyBTZWN0aW9uIGRlY2xhcmF0aW9uIGNvbnN0YW50cworbGV0
IGtVbmtub3duU2VjdGlvbkNvZGUgPSAwOworbGV0IGtUeXBlU2VjdGlvbkNvZGUgPSAxOyAgICAg
ICAgLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0aW9ucworbGV0IGtJbXBvcnRTZWN0aW9u
Q29kZSA9IDI7ICAgICAgLy8gSW1wb3J0IGRlY2xhcmF0aW9ucworbGV0IGtGdW5jdGlvblNlY3Rp
b25Db2RlID0gMzsgICAgLy8gRnVuY3Rpb24gZGVjbGFyYXRpb25zCitsZXQga1RhYmxlU2VjdGlv
bkNvZGUgPSA0OyAgICAgICAvLyBJbmRpcmVjdCBmdW5jdGlvbiB0YWJsZSBhbmQgb3RoZXIgdGFi
bGVzCitsZXQga01lbW9yeVNlY3Rpb25Db2RlID0gNTsgICAgICAvLyBNZW1vcnkgYXR0cmlidXRl
cworbGV0IGtHbG9iYWxTZWN0aW9uQ29kZSA9IDY7ICAgICAgLy8gR2xvYmFsIGRlY2xhcmF0aW9u
cworbGV0IGtFeHBvcnRTZWN0aW9uQ29kZSA9IDc7ICAgICAgLy8gRXhwb3J0cworbGV0IGtTdGFy
dFNlY3Rpb25Db2RlID0gODsgICAgICAgLy8gU3RhcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24KK2xl
dCBrRWxlbWVudFNlY3Rpb25Db2RlID0gOTsgICAgIC8vIEVsZW1lbnRzIHNlY3Rpb24KK2xldCBr
Q29kZVNlY3Rpb25Db2RlID0gMTA7ICAgICAgIC8vIEZ1bmN0aW9uIGNvZGUKK2xldCBrRGF0YVNl
Y3Rpb25Db2RlID0gMTE7ICAgICAgIC8vIERhdGEgc2VnbWVudHMKK2xldCBrRGF0YUNvdW50U2Vj
dGlvbkNvZGUgPSAxMjsgIC8vIERhdGEgc2VnbWVudCBjb3VudCAoYmV0d2VlbiBFbGVtZW50ICYg
Q29kZSkKK2xldCBrVGFnU2VjdGlvbkNvZGUgPSAxMzsgICAgICAgIC8vIFRhZyBzZWN0aW9uIChi
ZXR3ZWVuIE1lbW9yeSAmIEdsb2JhbCkKKworLy8gTmFtZSBzZWN0aW9uIHR5cGVzCitsZXQga01v
ZHVsZU5hbWVDb2RlID0gMDsKK2xldCBrRnVuY3Rpb25OYW1lc0NvZGUgPSAxOworbGV0IGtMb2Nh
bE5hbWVzQ29kZSA9IDI7CisKK2xldCBrV2FzbUZ1bmN0aW9uVHlwZUZvcm0gPSAweDYwOworbGV0
IGtXYXNtU3RydWN0VHlwZUZvcm0gPSAweDVmOworbGV0IGtXYXNtQXJyYXlUeXBlRm9ybSA9IDB4
NWU7CitsZXQga1dhc21GdW5jdGlvblN1YnR5cGVGb3JtID0gMHg1ZDsKK2xldCBrV2FzbVN0cnVj
dFN1YnR5cGVGb3JtID0gMHg1YzsKK2xldCBrV2FzbUFycmF5U3VidHlwZUZvcm0gPSAweDViOwor
CitsZXQga0xpbWl0c05vTWF4aW11bSA9IDB4MDA7CitsZXQga0xpbWl0c1dpdGhNYXhpbXVtID0g
MHgwMTsKK2xldCBrTGltaXRzU2hhcmVkTm9NYXhpbXVtID0gMHgwMjsKK2xldCBrTGltaXRzU2hh
cmVkV2l0aE1heGltdW0gPSAweDAzOworbGV0IGtMaW1pdHNNZW1vcnk2NE5vTWF4aW11bSA9IDB4
MDQ7CitsZXQga0xpbWl0c01lbW9yeTY0V2l0aE1heGltdW0gPSAweDA1OworCisvLyBTZWdtZW50
IGZsYWdzCitsZXQga0FjdGl2ZU5vSW5kZXggPSAwOworbGV0IGtQYXNzaXZlID0gMTsKK2xldCBr
QWN0aXZlV2l0aEluZGV4ID0gMjsKK2xldCBrRGVjbGFyYXRpdmUgPSAzOworbGV0IGtQYXNzaXZl
V2l0aEVsZW1lbnRzID0gNTsKK2xldCBrRGVjbGFyYXRpdmVXaXRoRWxlbWVudHMgPSA3OworCisv
LyBGdW5jdGlvbiBkZWNsYXJhdGlvbiBmbGFncworbGV0IGtEZWNsRnVuY3Rpb25OYW1lID0gMHgw
MTsKK2xldCBrRGVjbEZ1bmN0aW9uSW1wb3J0ID0gMHgwMjsKK2xldCBrRGVjbEZ1bmN0aW9uTG9j
YWxzID0gMHgwNDsKK2xldCBrRGVjbEZ1bmN0aW9uRXhwb3J0ID0gMHgwODsKKworLy8gVmFsdWUg
dHlwZXMgYW5kIHJlbGF0ZWQKK2xldCBrV2FzbVZvaWQgPSAweDQwOworbGV0IGtXYXNtSTMyID0g
MHg3ZjsKK2xldCBrV2FzbUk2NCA9IDB4N2U7CitsZXQga1dhc21GMzIgPSAweDdkOworbGV0IGtX
YXNtRjY0ID0gMHg3YzsKK2xldCBrV2FzbVMxMjggPSAweDdiOworbGV0IGtXYXNtSTggPSAweDdh
OworbGV0IGtXYXNtSTE2ID0gMHg3OTsKKworLy8gVGhlc2UgYXJlIGRlZmluZWQgYXMgbmVnYXRp
dmUgaW50ZWdlcnMgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIHBvc2l0aXZlIHR5cGUKKy8vIGlu
ZGljZXMuCitsZXQga1dhc21GdW5jUmVmID0gLTB4MTA7CitsZXQga1dhc21BbnlGdW5jID0ga1dh
c21GdW5jUmVmOyAgLy8gQWxpYXMgbmFtZWQgYXMgaW4gdGhlIEpTIEFQSSBzcGVjCitsZXQga1dh
c21FeHRlcm5SZWYgPSAtMHgxMTsKK2xldCBrV2FzbUFueVJlZiA9IC0weDEyOworbGV0IGtXYXNt
RXFSZWYgPSAtMHgxMzsKK2xldCBrV2FzbUkzMVJlZiA9IC0weDE2OworbGV0IGtXYXNtRGF0YVJl
ZiA9IC0weDE5OworCisvLyBVc2UgdGhlIHBvc2l0aXZlLWJ5dGUgdmVyc2lvbnMgaW5zaWRlIGZ1
bmN0aW9uIGJvZGllcy4KK2xldCBrTGViMTI4TWFzayA9IDB4N2Y7CitsZXQga0Z1bmNSZWZDb2Rl
ID0ga1dhc21GdW5jUmVmICYga0xlYjEyOE1hc2s7CitsZXQga0FueUZ1bmNDb2RlID0ga0Z1bmNS
ZWZDb2RlOyAgLy8gQWxpYXMgbmFtZWQgYXMgaW4gdGhlIEpTIEFQSSBzcGVjCitsZXQga0V4dGVy
blJlZkNvZGUgPSBrV2FzbUV4dGVyblJlZiAmIGtMZWIxMjhNYXNrOworbGV0IGtBbnlSZWZDb2Rl
ID0ga1dhc21BbnlSZWYgJiBrTGViMTI4TWFzazsKK2xldCBrRXFSZWZDb2RlID0ga1dhc21FcVJl
ZiAmIGtMZWIxMjhNYXNrOworbGV0IGtJMzFSZWZDb2RlID0ga1dhc21JMzFSZWYgICYga0xlYjEy
OE1hc2s7CitsZXQga0RhdGFSZWZDb2RlID0ga1dhc21EYXRhUmVmICAmIGtMZWIxMjhNYXNrOwor
CitsZXQga1dhc21PcHRSZWYgPSAweDZjOworbGV0IGtXYXNtUmVmID0gMHg2YjsKK2Z1bmN0aW9u
IHdhc21PcHRSZWZUeXBlKGhlYXBfdHlwZSkgeworICByZXR1cm4ge29wY29kZToga1dhc21PcHRS
ZWYsIGhlYXBfdHlwZTogaGVhcF90eXBlfTsKK30KK2Z1bmN0aW9uIHdhc21SZWZUeXBlKGhlYXBf
dHlwZSkgeworICByZXR1cm4ge29wY29kZToga1dhc21SZWYsIGhlYXBfdHlwZTogaGVhcF90eXBl
fTsKK30KKworbGV0IGtXYXNtUnR0V2l0aERlcHRoID0gMHg2OTsKK2Z1bmN0aW9uIHdhc21SdHQo
aW5kZXgsIGRlcHRoKSB7CisgIGlmIChpbmRleCA8IDApIHRocm93IG5ldyBFcnJvcigiRXhwZWN0
aW5nIG5vbi1uZWdhdGl2ZSB0eXBlIGluZGV4Iik7CisgIHJldHVybiB7b3Bjb2RlOiBrV2FzbVJ0
dFdpdGhEZXB0aCwgaW5kZXg6IGluZGV4LCBkZXB0aDogZGVwdGh9OworfQorbGV0IGtXYXNtUnR0
ID0gMHg2ODsKK2Z1bmN0aW9uIHdhc21SdHROb0RlcHRoKGluZGV4KSB7CisgIGlmIChpbmRleCA8
IDApIHRocm93IG5ldyBFcnJvcigiRXhwZWN0aW5nIG5vbi1uZWdhdGl2ZSB0eXBlIGluZGV4Iik7
CisgIHJldHVybiB7b3Bjb2RlOiBrV2FzbVJ0dCwgaW5kZXg6IGluZGV4fTsKK30KKworbGV0IGtF
eHRlcm5hbEZ1bmN0aW9uID0gMDsKK2xldCBrRXh0ZXJuYWxUYWJsZSA9IDE7CitsZXQga0V4dGVy
bmFsTWVtb3J5ID0gMjsKK2xldCBrRXh0ZXJuYWxHbG9iYWwgPSAzOworbGV0IGtFeHRlcm5hbFRh
ZyA9IDQ7CisKK2xldCBrVGFibGVaZXJvID0gMDsKK2xldCBrTWVtb3J5WmVybyA9IDA7CitsZXQg
a1NlZ21lbnRaZXJvID0gMDsKKworbGV0IGtFeGNlcHRpb25BdHRyaWJ1dGUgPSAwOworCisvLyBV
c2VmdWwgc2lnbmF0dXJlcworbGV0IGtTaWdfaV9pID0gbWFrZVNpZyhba1dhc21JMzJdLCBba1dh
c21JMzJdKTsKK2xldCBrU2lnX2xfbCA9IG1ha2VTaWcoW2tXYXNtSTY0XSwgW2tXYXNtSTY0XSk7
CitsZXQga1NpZ19pX2wgPSBtYWtlU2lnKFtrV2FzbUk2NF0sIFtrV2FzbUkzMl0pOworbGV0IGtT
aWdfaV9paSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMl0sIFtrV2FzbUkzMl0pOworbGV0
IGtTaWdfaV9paWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSwgW2tX
YXNtSTMyXSk7CitsZXQga1NpZ192X2lpaWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dhc21JMzIs
IGtXYXNtSTMyLCBrV2FzbUkzMl0sIFtdKTsKK2xldCBrU2lnX2ZfZmYgPSBtYWtlU2lnKFtrV2Fz
bUYzMiwga1dhc21GMzJdLCBba1dhc21GMzJdKTsKK2xldCBrU2lnX2RfZGQgPSBtYWtlU2lnKFtr
V2FzbUY2NCwga1dhc21GNjRdLCBba1dhc21GNjRdKTsKK2xldCBrU2lnX2xfbGwgPSBtYWtlU2ln
KFtrV2FzbUk2NCwga1dhc21JNjRdLCBba1dhc21JNjRdKTsKK2xldCBrU2lnX2lfZGQgPSBtYWtl
U2lnKFtrV2FzbUY2NCwga1dhc21GNjRdLCBba1dhc21JMzJdKTsKK2xldCBrU2lnX3ZfdiA9IG1h
a2VTaWcoW10sIFtdKTsKK2xldCBrU2lnX2lfdiA9IG1ha2VTaWcoW10sIFtrV2FzbUkzMl0pOwor
bGV0IGtTaWdfbF92ID0gbWFrZVNpZyhbXSwgW2tXYXNtSTY0XSk7CitsZXQga1NpZ19mX3YgPSBt
YWtlU2lnKFtdLCBba1dhc21GMzJdKTsKK2xldCBrU2lnX2RfdiA9IG1ha2VTaWcoW10sIFtrV2Fz
bUY2NF0pOworbGV0IGtTaWdfdl9pID0gbWFrZVNpZyhba1dhc21JMzJdLCBbXSk7CitsZXQga1Np
Z192X2lpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMyXSwgW10pOworbGV0IGtTaWdfdl9p
aWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSwgW10pOworbGV0IGtT
aWdfdl9sID0gbWFrZVNpZyhba1dhc21JNjRdLCBbXSk7CitsZXQga1NpZ192X2QgPSBtYWtlU2ln
KFtrV2FzbUY2NF0sIFtdKTsKK2xldCBrU2lnX3ZfZGQgPSBtYWtlU2lnKFtrV2FzbUY2NCwga1dh
c21GNjRdLCBbXSk7CitsZXQga1NpZ192X2RkaSA9IG1ha2VTaWcoW2tXYXNtRjY0LCBrV2FzbUY2
NCwga1dhc21JMzJdLCBbXSk7CitsZXQga1NpZ19paV92ID0gbWFrZVNpZyhbXSwgW2tXYXNtSTMy
LCBrV2FzbUkzMl0pOworbGV0IGtTaWdfaWlpX3YgPSBtYWtlU2lnKFtdLCBba1dhc21JMzIsIGtX
YXNtSTMyLCBrV2FzbUkzMl0pOworbGV0IGtTaWdfaWlfaSA9IG1ha2VTaWcoW2tXYXNtSTMyXSwg
W2tXYXNtSTMyLCBrV2FzbUkzMl0pOworbGV0IGtTaWdfaWlpX2kgPSBtYWtlU2lnKFtrV2FzbUkz
Ml0sIFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSk7CitsZXQga1NpZ19paV9paSA9IG1h
a2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMl0sIFtrV2FzbUkzMiwga1dhc21JMzJdKTsKK2xldCBr
U2lnX2lpaV9paSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMl0sIFtrV2FzbUkzMiwga1dh
c21JMzIsIGtXYXNtSTMyXSk7CisKK2xldCBrU2lnX3ZfZiA9IG1ha2VTaWcoW2tXYXNtRjMyXSwg
W10pOworbGV0IGtTaWdfZl9mID0gbWFrZVNpZyhba1dhc21GMzJdLCBba1dhc21GMzJdKTsKK2xl
dCBrU2lnX2ZfZCA9IG1ha2VTaWcoW2tXYXNtRjY0XSwgW2tXYXNtRjMyXSk7CitsZXQga1NpZ19k
X2QgPSBtYWtlU2lnKFtrV2FzbUY2NF0sIFtrV2FzbUY2NF0pOworbGV0IGtTaWdfcl9yID0gbWFr
ZVNpZyhba1dhc21FeHRlcm5SZWZdLCBba1dhc21FeHRlcm5SZWZdKTsKK2xldCBrU2lnX2FfYSA9
IG1ha2VTaWcoW2tXYXNtQW55RnVuY10sIFtrV2FzbUFueUZ1bmNdKTsKK2xldCBrU2lnX2lfciA9
IG1ha2VTaWcoW2tXYXNtRXh0ZXJuUmVmXSwgW2tXYXNtSTMyXSk7CitsZXQga1NpZ192X3IgPSBt
YWtlU2lnKFtrV2FzbUV4dGVyblJlZl0sIFtdKTsKK2xldCBrU2lnX3ZfYSA9IG1ha2VTaWcoW2tX
YXNtQW55RnVuY10sIFtdKTsKK2xldCBrU2lnX3ZfcnIgPSBtYWtlU2lnKFtrV2FzbUV4dGVyblJl
Ziwga1dhc21FeHRlcm5SZWZdLCBbXSk7CitsZXQga1NpZ192X2FhID0gbWFrZVNpZyhba1dhc21B
bnlGdW5jLCBrV2FzbUFueUZ1bmNdLCBbXSk7CitsZXQga1NpZ19yX3YgPSBtYWtlU2lnKFtdLCBb
a1dhc21FeHRlcm5SZWZdKTsKK2xldCBrU2lnX2FfdiA9IG1ha2VTaWcoW10sIFtrV2FzbUFueUZ1
bmNdKTsKK2xldCBrU2lnX2FfaSA9IG1ha2VTaWcoW2tXYXNtSTMyXSwgW2tXYXNtQW55RnVuY10p
OworbGV0IGtTaWdfc19pID0gbWFrZVNpZyhba1dhc21JMzJdLCBba1dhc21TMTI4XSk7CitsZXQg
a1NpZ19pX3MgPSBtYWtlU2lnKFtrV2FzbVMxMjhdLCBba1dhc21JMzJdKTsKKworZnVuY3Rpb24g
bWFrZVNpZyhwYXJhbXMsIHJlc3VsdHMpIHsKKyAgcmV0dXJuIHtwYXJhbXM6IHBhcmFtcywgcmVz
dWx0czogcmVzdWx0c307Cit9CisKK2Z1bmN0aW9uIG1ha2VTaWdfdl94KHgpIHsKKyAgcmV0dXJu
IG1ha2VTaWcoW3hdLCBbXSk7Cit9CisKK2Z1bmN0aW9uIG1ha2VTaWdfeF92KHgpIHsKKyAgcmV0
dXJuIG1ha2VTaWcoW10sIFt4XSk7Cit9CisKK2Z1bmN0aW9uIG1ha2VTaWdfdl94eCh4KSB7Cisg
IHJldHVybiBtYWtlU2lnKFt4LCB4XSwgW10pOworfQorCitmdW5jdGlvbiBtYWtlU2lnX3Jfdihy
KSB7CisgIHJldHVybiBtYWtlU2lnKFtdLCBbcl0pOworfQorCitmdW5jdGlvbiBtYWtlU2lnX3Jf
eChyLCB4KSB7CisgIHJldHVybiBtYWtlU2lnKFt4XSwgW3JdKTsKK30KKworZnVuY3Rpb24gbWFr
ZVNpZ19yX3h4KHIsIHgpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW3gsIHhdLCBbcl0pOworfQorCisv
LyBPcGNvZGVzCitjb25zdCBrV2FzbU9wY29kZXMgPSB7CisgICdVbnJlYWNoYWJsZSc6IDB4MDAs
CisgICdOb3AnOiAweDAxLAorICAnQmxvY2snOiAweDAyLAorICAnTG9vcCc6IDB4MDMsCisgICdJ
Zic6IDB4MDQsCisgICdFbHNlJzogMHgwNSwKKyAgJ1RyeSc6IDB4MDYsCisgICdDYXRjaCc6IDB4
MDcsCisgICdUaHJvdyc6IDB4MDgsCisgICdSZXRocm93JzogMHgwOSwKKyAgJ0NhdGNoQWxsJzog
MHgxOSwKKyAgJ0VuZCc6IDB4MGIsCisgICdCcic6IDB4MGMsCisgICdCcklmJzogMHgwZCwKKyAg
J0JyVGFibGUnOiAweDBlLAorICAnUmV0dXJuJzogMHgwZiwKKyAgJ0NhbGxGdW5jdGlvbic6IDB4
MTAsCisgICdDYWxsSW5kaXJlY3QnOiAweDExLAorICAnUmV0dXJuQ2FsbCc6IDB4MTIsCisgICdS
ZXR1cm5DYWxsSW5kaXJlY3QnOiAweDEzLAorICAnQ2FsbFJlZic6IDB4MTQsCisgICdSZXR1cm5D
YWxsUmVmJzogMHgxNSwKKyAgJ0xldCc6IDB4MTcsCisgICdEZWxlZ2F0ZSc6IDB4MTgsCisgICdE
cm9wJzogMHgxYSwKKyAgJ1NlbGVjdCc6IDB4MWIsCisgICdTZWxlY3RXaXRoVHlwZSc6IDB4MWMs
CisgICdMb2NhbEdldCc6IDB4MjAsCisgICdMb2NhbFNldCc6IDB4MjEsCisgICdMb2NhbFRlZSc6
IDB4MjIsCisgICdHbG9iYWxHZXQnOiAweDIzLAorICAnR2xvYmFsU2V0JzogMHgyNCwKKyAgJ1Rh
YmxlR2V0JzogMHgyNSwKKyAgJ1RhYmxlU2V0JzogMHgyNiwKKyAgJ0kzMkxvYWRNZW0nOiAweDI4
LAorICAnSTY0TG9hZE1lbSc6IDB4MjksCisgICdGMzJMb2FkTWVtJzogMHgyYSwKKyAgJ0Y2NExv
YWRNZW0nOiAweDJiLAorICAnSTMyTG9hZE1lbThTJzogMHgyYywKKyAgJ0kzMkxvYWRNZW04VSc6
IDB4MmQsCisgICdJMzJMb2FkTWVtMTZTJzogMHgyZSwKKyAgJ0kzMkxvYWRNZW0xNlUnOiAweDJm
LAorICAnSTY0TG9hZE1lbThTJzogMHgzMCwKKyAgJ0k2NExvYWRNZW04VSc6IDB4MzEsCisgICdJ
NjRMb2FkTWVtMTZTJzogMHgzMiwKKyAgJ0k2NExvYWRNZW0xNlUnOiAweDMzLAorICAnSTY0TG9h
ZE1lbTMyUyc6IDB4MzQsCisgICdJNjRMb2FkTWVtMzJVJzogMHgzNSwKKyAgJ0kzMlN0b3JlTWVt
JzogMHgzNiwKKyAgJ0k2NFN0b3JlTWVtJzogMHgzNywKKyAgJ0YzMlN0b3JlTWVtJzogMHgzOCwK
KyAgJ0Y2NFN0b3JlTWVtJzogMHgzOSwKKyAgJ0kzMlN0b3JlTWVtOCc6IDB4M2EsCisgICdJMzJT
dG9yZU1lbTE2JzogMHgzYiwKKyAgJ0k2NFN0b3JlTWVtOCc6IDB4M2MsCisgICdJNjRTdG9yZU1l
bTE2JzogMHgzZCwKKyAgJ0k2NFN0b3JlTWVtMzInOiAweDNlLAorICAnTWVtb3J5U2l6ZSc6IDB4
M2YsCisgICdNZW1vcnlHcm93JzogMHg0MCwKKyAgJ0kzMkNvbnN0JzogMHg0MSwKKyAgJ0k2NENv
bnN0JzogMHg0MiwKKyAgJ0YzMkNvbnN0JzogMHg0MywKKyAgJ0Y2NENvbnN0JzogMHg0NCwKKyAg
J0kzMkVxeic6IDB4NDUsCisgICdJMzJFcSc6IDB4NDYsCisgICdJMzJOZSc6IDB4NDcsCisgICdJ
MzJMdFMnOiAweDQ4LAorICAnSTMyTHRVJzogMHg0OSwKKyAgJ0kzMkd0Uyc6IDB4NGEsCisgICdJ
MzJHdFUnOiAweDRiLAorICAnSTMyTGVTJzogMHg0YywKKyAgJ0kzMkxlVSc6IDB4NGQsCisgICdJ
MzJHZVMnOiAweDRlLAorICAnSTMyR2VVJzogMHg0ZiwKKyAgJ0k2NEVxeic6IDB4NTAsCisgICdJ
NjRFcSc6IDB4NTEsCisgICdJNjROZSc6IDB4NTIsCisgICdJNjRMdFMnOiAweDUzLAorICAnSTY0
THRVJzogMHg1NCwKKyAgJ0k2NEd0Uyc6IDB4NTUsCisgICdJNjRHdFUnOiAweDU2LAorICAnSTY0
TGVTJzogMHg1NywKKyAgJ0k2NExlVSc6IDB4NTgsCisgICdJNjRHZVMnOiAweDU5LAorICAnSTY0
R2VVJzogMHg1YSwKKyAgJ0YzMkVxJzogMHg1YiwKKyAgJ0YzMk5lJzogMHg1YywKKyAgJ0YzMkx0
JzogMHg1ZCwKKyAgJ0YzMkd0JzogMHg1ZSwKKyAgJ0YzMkxlJzogMHg1ZiwKKyAgJ0YzMkdlJzog
MHg2MCwKKyAgJ0Y2NEVxJzogMHg2MSwKKyAgJ0Y2NE5lJzogMHg2MiwKKyAgJ0Y2NEx0JzogMHg2
MywKKyAgJ0Y2NEd0JzogMHg2NCwKKyAgJ0Y2NExlJzogMHg2NSwKKyAgJ0Y2NEdlJzogMHg2NiwK
KyAgJ0kzMkNseic6IDB4NjcsCisgICdJMzJDdHonOiAweDY4LAorICAnSTMyUG9wY250JzogMHg2
OSwKKyAgJ0kzMkFkZCc6IDB4NmEsCisgICdJMzJTdWInOiAweDZiLAorICAnSTMyTXVsJzogMHg2
YywKKyAgJ0kzMkRpdlMnOiAweDZkLAorICAnSTMyRGl2VSc6IDB4NmUsCisgICdJMzJSZW1TJzog
MHg2ZiwKKyAgJ0kzMlJlbVUnOiAweDcwLAorICAnSTMyQW5kJzogMHg3MSwKKyAgJ0kzMklvcic6
IDB4NzIsCisgICdJMzJYb3InOiAweDczLAorICAnSTMyU2hsJzogMHg3NCwKKyAgJ0kzMlNoclMn
OiAweDc1LAorICAnSTMyU2hyVSc6IDB4NzYsCisgICdJMzJSb2wnOiAweDc3LAorICAnSTMyUm9y
JzogMHg3OCwKKyAgJ0k2NENseic6IDB4NzksCisgICdJNjRDdHonOiAweDdhLAorICAnSTY0UG9w
Y250JzogMHg3YiwKKyAgJ0k2NEFkZCc6IDB4N2MsCisgICdJNjRTdWInOiAweDdkLAorICAnSTY0
TXVsJzogMHg3ZSwKKyAgJ0k2NERpdlMnOiAweDdmLAorICAnSTY0RGl2VSc6IDB4ODAsCisgICdJ
NjRSZW1TJzogMHg4MSwKKyAgJ0k2NFJlbVUnOiAweDgyLAorICAnSTY0QW5kJzogMHg4MywKKyAg
J0k2NElvcic6IDB4ODQsCisgICdJNjRYb3InOiAweDg1LAorICAnSTY0U2hsJzogMHg4NiwKKyAg
J0k2NFNoclMnOiAweDg3LAorICAnSTY0U2hyVSc6IDB4ODgsCisgICdJNjRSb2wnOiAweDg5LAor
ICAnSTY0Um9yJzogMHg4YSwKKyAgJ0YzMkFicyc6IDB4OGIsCisgICdGMzJOZWcnOiAweDhjLAor
ICAnRjMyQ2VpbCc6IDB4OGQsCisgICdGMzJGbG9vcic6IDB4OGUsCisgICdGMzJUcnVuYyc6IDB4
OGYsCisgICdGMzJOZWFyZXN0SW50JzogMHg5MCwKKyAgJ0YzMlNxcnQnOiAweDkxLAorICAnRjMy
QWRkJzogMHg5MiwKKyAgJ0YzMlN1Yic6IDB4OTMsCisgICdGMzJNdWwnOiAweDk0LAorICAnRjMy
RGl2JzogMHg5NSwKKyAgJ0YzMk1pbic6IDB4OTYsCisgICdGMzJNYXgnOiAweDk3LAorICAnRjMy
Q29weVNpZ24nOiAweDk4LAorICAnRjY0QWJzJzogMHg5OSwKKyAgJ0Y2NE5lZyc6IDB4OWEsCisg
ICdGNjRDZWlsJzogMHg5YiwKKyAgJ0Y2NEZsb29yJzogMHg5YywKKyAgJ0Y2NFRydW5jJzogMHg5
ZCwKKyAgJ0Y2NE5lYXJlc3RJbnQnOiAweDllLAorICAnRjY0U3FydCc6IDB4OWYsCisgICdGNjRB
ZGQnOiAweGEwLAorICAnRjY0U3ViJzogMHhhMSwKKyAgJ0Y2NE11bCc6IDB4YTIsCisgICdGNjRE
aXYnOiAweGEzLAorICAnRjY0TWluJzogMHhhNCwKKyAgJ0Y2NE1heCc6IDB4YTUsCisgICdGNjRD
b3B5U2lnbic6IDB4YTYsCisgICdJMzJDb252ZXJ0STY0JzogMHhhNywKKyAgJ0kzMlNDb252ZXJ0
RjMyJzogMHhhOCwKKyAgJ0kzMlVDb252ZXJ0RjMyJzogMHhhOSwKKyAgJ0kzMlNDb252ZXJ0RjY0
JzogMHhhYSwKKyAgJ0kzMlVDb252ZXJ0RjY0JzogMHhhYiwKKyAgJ0k2NFNDb252ZXJ0STMyJzog
MHhhYywKKyAgJ0k2NFVDb252ZXJ0STMyJzogMHhhZCwKKyAgJ0k2NFNDb252ZXJ0RjMyJzogMHhh
ZSwKKyAgJ0k2NFVDb252ZXJ0RjMyJzogMHhhZiwKKyAgJ0k2NFNDb252ZXJ0RjY0JzogMHhiMCwK
KyAgJ0k2NFVDb252ZXJ0RjY0JzogMHhiMSwKKyAgJ0YzMlNDb252ZXJ0STMyJzogMHhiMiwKKyAg
J0YzMlVDb252ZXJ0STMyJzogMHhiMywKKyAgJ0YzMlNDb252ZXJ0STY0JzogMHhiNCwKKyAgJ0Yz
MlVDb252ZXJ0STY0JzogMHhiNSwKKyAgJ0YzMkNvbnZlcnRGNjQnOiAweGI2LAorICAnRjY0U0Nv
bnZlcnRJMzInOiAweGI3LAorICAnRjY0VUNvbnZlcnRJMzInOiAweGI4LAorICAnRjY0U0NvbnZl
cnRJNjQnOiAweGI5LAorICAnRjY0VUNvbnZlcnRJNjQnOiAweGJhLAorICAnRjY0Q29udmVydEYz
Mic6IDB4YmIsCisgICdJMzJSZWludGVycHJldEYzMic6IDB4YmMsCisgICdJNjRSZWludGVycHJl
dEY2NCc6IDB4YmQsCisgICdGMzJSZWludGVycHJldEkzMic6IDB4YmUsCisgICdGNjRSZWludGVy
cHJldEk2NCc6IDB4YmYsCisgICdJMzJTRXh0ZW5kSTgnOiAweGMwLAorICAnSTMyU0V4dGVuZEkx
Nic6IDB4YzEsCisgICdJNjRTRXh0ZW5kSTgnOiAweGMyLAorICAnSTY0U0V4dGVuZEkxNic6IDB4
YzMsCisgICdJNjRTRXh0ZW5kSTMyJzogMHhjNCwKKyAgJ1JlZk51bGwnOiAweGQwLAorICAnUmVm
SXNOdWxsJzogMHhkMSwKKyAgJ1JlZkZ1bmMnOiAweGQyLAorICAnUmVmQXNOb25OdWxsJzogMHhk
MywKKyAgJ0JyT25OdWxsJzogMHhkNCwKKyAgJ1JlZkVxJzogMHhkNSwKKyAgJ0JyT25Ob25OdWxs
JzogMHhkNgorfTsKKworZnVuY3Rpb24gZGVmaW5lV2FzbU9wY29kZShuYW1lLCB2YWx1ZSkgewor
ICBpZiAoZ2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVzID09PSB1bmRlZmluZWQpIHsKKyAgICBn
bG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXMgPSB7fTsKKyAgfQorICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoZ2xvYmFsVGhpcywgbmFtZSwge3ZhbHVlOiB2YWx1ZX0pOworICBpZiAoZ2xvYmFsVGhp
cy5rV2FzbU9wY29kZU5hbWVzW3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7CisgICAgdGhyb3cgbmV3
IEVycm9yKGBEdXBsaWNhdGUgd2FzbSBvcGNvZGU6ICR7dmFsdWV9LiBQcmV2aW91cyBuYW1lOiAk
eworICAgICAgICBnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXNbdmFsdWVdfSwgbmV3IG5hbWU6
ICR7bmFtZX1gKTsKKyAgfQorICBnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXNbdmFsdWVdID0g
bmFtZTsKK30KK2ZvciAobGV0IG5hbWUgaW4ga1dhc21PcGNvZGVzKSB7CisgIGRlZmluZVdhc21P
cGNvZGUoYGtFeHByJHtuYW1lfWAsIGtXYXNtT3Bjb2Rlc1tuYW1lXSk7Cit9CisKKy8vIFByZWZp
eCBvcGNvZGVzCitjb25zdCBrUHJlZml4T3Bjb2RlcyA9IHsKKyAgJ0dDJzogMHhmYiwKKyAgJ051
bWVyaWMnOiAweGZjLAorICAnU2ltZCc6IDB4ZmQsCisgICdBdG9taWMnOiAweGZlCit9OworZm9y
IChsZXQgcHJlZml4IGluIGtQcmVmaXhPcGNvZGVzKSB7CisgIGRlZmluZVdhc21PcGNvZGUoYGsk
e3ByZWZpeH1QcmVmaXhgLCBrUHJlZml4T3Bjb2Rlc1twcmVmaXhdKTsKK30KKworLy8gR0Mgb3Bj
b2RlcworbGV0IGtFeHByU3RydWN0TmV3V2l0aFJ0dCA9IDB4MDE7CitsZXQga0V4cHJTdHJ1Y3RO
ZXdEZWZhdWx0V2l0aFJ0dCA9IDB4MDI7CitsZXQga0V4cHJTdHJ1Y3RHZXQgPSAweDAzOworbGV0
IGtFeHByU3RydWN0R2V0UyA9IDB4MDQ7CitsZXQga0V4cHJTdHJ1Y3RHZXRVID0gMHgwNTsKK2xl
dCBrRXhwclN0cnVjdFNldCA9IDB4MDY7CitsZXQga0V4cHJTdHJ1Y3ROZXcgPSAweDA3OworbGV0
IGtFeHByU3RydWN0TmV3RGVmYXVsdCA9IDB4MDg7CitsZXQga0V4cHJBcnJheU5ld1dpdGhSdHQg
PSAweDExOworbGV0IGtFeHByQXJyYXlOZXdEZWZhdWx0V2l0aFJ0dCA9IDB4MTI7CitsZXQga0V4
cHJBcnJheUdldCA9IDB4MTM7CitsZXQga0V4cHJBcnJheUdldFMgPSAweDE0OworbGV0IGtFeHBy
QXJyYXlHZXRVID0gMHgxNTsKK2xldCBrRXhwckFycmF5U2V0ID0gMHgxNjsKK2xldCBrRXhwckFy
cmF5TGVuID0gMHgxNzsKK2xldCBrRXhwckFycmF5Q29weSA9IDB4MTg7CitsZXQga0V4cHJBcnJh
eUluaXQgPSAweDE5OworbGV0IGtFeHByQXJyYXlJbml0U3RhdGljID0gMHgxYTsKK2xldCBrRXhw
ckFycmF5TmV3ID0gMHgxYjsKK2xldCBrRXhwckFycmF5TmV3RGVmYXVsdCA9IDB4MWM7CitsZXQg
a0V4cHJJMzFOZXcgPSAweDIwOworbGV0IGtFeHBySTMxR2V0UyA9IDB4MjE7CitsZXQga0V4cHJJ
MzFHZXRVID0gMHgyMjsKK2xldCBrRXhwclJ0dENhbm9uID0gMHgzMDsKK2xldCBrRXhwclJ0dFN1
YiA9IDB4MzE7CitsZXQga0V4cHJSdHRGcmVzaFN1YiA9IDB4MzI7CitsZXQga0V4cHJSZWZUZXN0
ID0gMHg0MDsKK2xldCBrRXhwclJlZkNhc3QgPSAweDQxOworbGV0IGtFeHByQnJPbkNhc3QgPSAw
eDQyOworbGV0IGtFeHByQnJPbkNhc3RGYWlsID0gMHg0MzsKK2xldCBrRXhwclJlZlRlc3RTdGF0
aWMgPSAweDQ0OworbGV0IGtFeHByUmVmQ2FzdFN0YXRpYyA9IDB4NDU7CitsZXQga0V4cHJCck9u
Q2FzdFN0YXRpYyA9IDB4NDY7CitsZXQga0V4cHJCck9uQ2FzdFN0YXRpY0ZhaWwgPSAweDQ3Owor
bGV0IGtFeHByUmVmSXNGdW5jID0gMHg1MDsKK2xldCBrRXhwclJlZklzRGF0YSA9IDB4NTE7Cits
ZXQga0V4cHJSZWZJc0kzMSA9IDB4NTI7CitsZXQga0V4cHJSZWZBc0Z1bmMgPSAweDU4OworbGV0
IGtFeHByUmVmQXNEYXRhID0gMHg1OTsKK2xldCBrRXhwclJlZkFzSTMxID0gMHg1YTsKK2xldCBr
RXhwckJyT25GdW5jID0gMHg2MDsKK2xldCBrRXhwckJyT25EYXRhID0gMHg2MTsKK2xldCBrRXhw
ckJyT25JMzEgPSAweDYyOworCisvLyBOdW1lcmljIG9wY29kZXMuCitsZXQga0V4cHJJMzJTQ29u
dmVydFNhdEYzMiA9IDB4MDA7CitsZXQga0V4cHJJMzJVQ29udmVydFNhdEYzMiA9IDB4MDE7Cits
ZXQga0V4cHJJMzJTQ29udmVydFNhdEY2NCA9IDB4MDI7CitsZXQga0V4cHJJMzJVQ29udmVydFNh
dEY2NCA9IDB4MDM7CitsZXQga0V4cHJJNjRTQ29udmVydFNhdEYzMiA9IDB4MDQ7CitsZXQga0V4
cHJJNjRVQ29udmVydFNhdEYzMiA9IDB4MDU7CitsZXQga0V4cHJJNjRTQ29udmVydFNhdEY2NCA9
IDB4MDY7CitsZXQga0V4cHJJNjRVQ29udmVydFNhdEY2NCA9IDB4MDc7CitsZXQga0V4cHJNZW1v
cnlJbml0ID0gMHgwODsKK2xldCBrRXhwckRhdGFEcm9wID0gMHgwOTsKK2xldCBrRXhwck1lbW9y
eUNvcHkgPSAweDBhOworbGV0IGtFeHByTWVtb3J5RmlsbCA9IDB4MGI7CitsZXQga0V4cHJUYWJs
ZUluaXQgPSAweDBjOworbGV0IGtFeHByRWxlbURyb3AgPSAweDBkOworbGV0IGtFeHByVGFibGVD
b3B5ID0gMHgwZTsKK2xldCBrRXhwclRhYmxlR3JvdyA9IDB4MGY7CitsZXQga0V4cHJUYWJsZVNp
emUgPSAweDEwOworbGV0IGtFeHByVGFibGVGaWxsID0gMHgxMTsKKworLy8gQXRvbWljIG9wY29k
ZXMuCitsZXQga0V4cHJBdG9taWNOb3RpZnkgPSAweDAwOworbGV0IGtFeHBySTMyQXRvbWljV2Fp
dCA9IDB4MDE7CitsZXQga0V4cHJJNjRBdG9taWNXYWl0ID0gMHgwMjsKK2xldCBrRXhwckkzMkF0
b21pY0xvYWQgPSAweDEwOworbGV0IGtFeHBySTMyQXRvbWljTG9hZDhVID0gMHgxMjsKK2xldCBr
RXhwckkzMkF0b21pY0xvYWQxNlUgPSAweDEzOworbGV0IGtFeHBySTMyQXRvbWljU3RvcmUgPSAw
eDE3OworbGV0IGtFeHBySTMyQXRvbWljU3RvcmU4VSA9IDB4MTk7CitsZXQga0V4cHJJMzJBdG9t
aWNTdG9yZTE2VSA9IDB4MWE7CitsZXQga0V4cHJJMzJBdG9taWNBZGQgPSAweDFlOworbGV0IGtF
eHBySTMyQXRvbWljQWRkOFUgPSAweDIwOworbGV0IGtFeHBySTMyQXRvbWljQWRkMTZVID0gMHgy
MTsKK2xldCBrRXhwckkzMkF0b21pY1N1YiA9IDB4MjU7CitsZXQga0V4cHJJMzJBdG9taWNTdWI4
VSA9IDB4Mjc7CitsZXQga0V4cHJJMzJBdG9taWNTdWIxNlUgPSAweDI4OworbGV0IGtFeHBySTMy
QXRvbWljQW5kID0gMHgyYzsKK2xldCBrRXhwckkzMkF0b21pY0FuZDhVID0gMHgyZTsKK2xldCBr
RXhwckkzMkF0b21pY0FuZDE2VSA9IDB4MmY7CitsZXQga0V4cHJJMzJBdG9taWNPciA9IDB4MzM7
CitsZXQga0V4cHJJMzJBdG9taWNPcjhVID0gMHgzNTsKK2xldCBrRXhwckkzMkF0b21pY09yMTZV
ID0gMHgzNjsKK2xldCBrRXhwckkzMkF0b21pY1hvciA9IDB4M2E7CitsZXQga0V4cHJJMzJBdG9t
aWNYb3I4VSA9IDB4M2M7CitsZXQga0V4cHJJMzJBdG9taWNYb3IxNlUgPSAweDNkOworbGV0IGtF
eHBySTMyQXRvbWljRXhjaGFuZ2UgPSAweDQxOworbGV0IGtFeHBySTMyQXRvbWljRXhjaGFuZ2U4
VSA9IDB4NDM7CitsZXQga0V4cHJJMzJBdG9taWNFeGNoYW5nZTE2VSA9IDB4NDQ7CitsZXQga0V4
cHJJMzJBdG9taWNDb21wYXJlRXhjaGFuZ2UgPSAweDQ4OworbGV0IGtFeHBySTMyQXRvbWljQ29t
cGFyZUV4Y2hhbmdlOFUgPSAweDRhOworbGV0IGtFeHBySTMyQXRvbWljQ29tcGFyZUV4Y2hhbmdl
MTZVID0gMHg0YjsKKworbGV0IGtFeHBySTY0QXRvbWljTG9hZCA9IDB4MTE7CitsZXQga0V4cHJJ
NjRBdG9taWNMb2FkOFUgPSAweDE0OworbGV0IGtFeHBySTY0QXRvbWljTG9hZDE2VSA9IDB4MTU7
CitsZXQga0V4cHJJNjRBdG9taWNMb2FkMzJVID0gMHgxNjsKK2xldCBrRXhwckk2NEF0b21pY1N0
b3JlID0gMHgxODsKK2xldCBrRXhwckk2NEF0b21pY1N0b3JlOFUgPSAweDFiOworbGV0IGtFeHBy
STY0QXRvbWljU3RvcmUxNlUgPSAweDFjOworbGV0IGtFeHBySTY0QXRvbWljU3RvcmUzMlUgPSAw
eDFkOworbGV0IGtFeHBySTY0QXRvbWljQWRkID0gMHgxZjsKK2xldCBrRXhwckk2NEF0b21pY0Fk
ZDhVID0gMHgyMjsKK2xldCBrRXhwckk2NEF0b21pY0FkZDE2VSA9IDB4MjM7CitsZXQga0V4cHJJ
NjRBdG9taWNBZGQzMlUgPSAweDI0OworbGV0IGtFeHBySTY0QXRvbWljU3ViID0gMHgyNjsKK2xl
dCBrRXhwckk2NEF0b21pY1N1YjhVID0gMHgyOTsKK2xldCBrRXhwckk2NEF0b21pY1N1YjE2VSA9
IDB4MmE7CitsZXQga0V4cHJJNjRBdG9taWNTdWIzMlUgPSAweDJiOworbGV0IGtFeHBySTY0QXRv
bWljQW5kID0gMHgyZDsKK2xldCBrRXhwckk2NEF0b21pY0FuZDhVID0gMHgzMDsKK2xldCBrRXhw
ckk2NEF0b21pY0FuZDE2VSA9IDB4MzE7CitsZXQga0V4cHJJNjRBdG9taWNBbmQzMlUgPSAweDMy
OworbGV0IGtFeHBySTY0QXRvbWljT3IgPSAweDM0OworbGV0IGtFeHBySTY0QXRvbWljT3I4VSA9
IDB4Mzc7CitsZXQga0V4cHJJNjRBdG9taWNPcjE2VSA9IDB4Mzg7CitsZXQga0V4cHJJNjRBdG9t
aWNPcjMyVSA9IDB4Mzk7CitsZXQga0V4cHJJNjRBdG9taWNYb3IgPSAweDNiOworbGV0IGtFeHBy
STY0QXRvbWljWG9yOFUgPSAweDNlOworbGV0IGtFeHBySTY0QXRvbWljWG9yMTZVID0gMHgzZjsK
K2xldCBrRXhwckk2NEF0b21pY1hvcjMyVSA9IDB4NDA7CitsZXQga0V4cHJJNjRBdG9taWNFeGNo
YW5nZSA9IDB4NDI7CitsZXQga0V4cHJJNjRBdG9taWNFeGNoYW5nZThVID0gMHg0NTsKK2xldCBr
RXhwckk2NEF0b21pY0V4Y2hhbmdlMTZVID0gMHg0NjsKK2xldCBrRXhwckk2NEF0b21pY0V4Y2hh
bmdlMzJVID0gMHg0NzsKK2xldCBrRXhwckk2NEF0b21pY0NvbXBhcmVFeGNoYW5nZSA9IDB4NDkK
K2xldCBrRXhwckk2NEF0b21pY0NvbXBhcmVFeGNoYW5nZThVID0gMHg0YzsKK2xldCBrRXhwckk2
NEF0b21pY0NvbXBhcmVFeGNoYW5nZTE2VSA9IDB4NGQ7CitsZXQga0V4cHJJNjRBdG9taWNDb21w
YXJlRXhjaGFuZ2UzMlUgPSAweDRlOworCisvLyBTaW1kIG9wY29kZXMuCitsZXQga0V4cHJTMTI4
TG9hZE1lbSA9IDB4MDA7CitsZXQga0V4cHJTMTI4TG9hZDh4OFMgPSAweDAxOworbGV0IGtFeHBy
UzEyOExvYWQ4eDhVID0gMHgwMjsKK2xldCBrRXhwclMxMjhMb2FkMTZ4NFMgPSAweDAzOworbGV0
IGtFeHByUzEyOExvYWQxNng0VSA9IDB4MDQ7CitsZXQga0V4cHJTMTI4TG9hZDMyeDJTID0gMHgw
NTsKK2xldCBrRXhwclMxMjhMb2FkMzJ4MlUgPSAweDA2OworbGV0IGtFeHByUzEyOExvYWQ4U3Bs
YXQgPSAweDA3OworbGV0IGtFeHByUzEyOExvYWQxNlNwbGF0ID0gMHgwODsKK2xldCBrRXhwclMx
MjhMb2FkMzJTcGxhdCA9IDB4MDk7CitsZXQga0V4cHJTMTI4TG9hZDY0U3BsYXQgPSAweDBhOwor
bGV0IGtFeHByUzEyOFN0b3JlTWVtID0gMHgwYjsKK2xldCBrRXhwclMxMjhDb25zdCA9IDB4MGM7
CitsZXQga0V4cHJJOHgxNlNodWZmbGUgPSAweDBkOworbGV0IGtFeHBySTh4MTZTd2l6emxlID0g
MHgwZTsKKworbGV0IGtFeHBySTh4MTZTcGxhdCA9IDB4MGY7CitsZXQga0V4cHJJMTZ4OFNwbGF0
ID0gMHgxMDsKK2xldCBrRXhwckkzMng0U3BsYXQgPSAweDExOworbGV0IGtFeHBySTY0eDJTcGxh
dCA9IDB4MTI7CitsZXQga0V4cHJGMzJ4NFNwbGF0ID0gMHgxMzsKK2xldCBrRXhwckY2NHgyU3Bs
YXQgPSAweDE0OworbGV0IGtFeHBySTh4MTZFeHRyYWN0TGFuZVMgPSAweDE1OworbGV0IGtFeHBy
STh4MTZFeHRyYWN0TGFuZVUgPSAweDE2OworbGV0IGtFeHBySTh4MTZSZXBsYWNlTGFuZSA9IDB4
MTc7CitsZXQga0V4cHJJMTZ4OEV4dHJhY3RMYW5lUyA9IDB4MTg7CitsZXQga0V4cHJJMTZ4OEV4
dHJhY3RMYW5lVSA9IDB4MTk7CitsZXQga0V4cHJJMTZ4OFJlcGxhY2VMYW5lID0gMHgxYTsKK2xl
dCBrRXhwckkzMng0RXh0cmFjdExhbmUgPSAweDFiOworbGV0IGtFeHBySTMyeDRSZXBsYWNlTGFu
ZSA9IDB4MWM7CitsZXQga0V4cHJJNjR4MkV4dHJhY3RMYW5lID0gMHgxZDsKK2xldCBrRXhwckk2
NHgyUmVwbGFjZUxhbmUgPSAweDFlOworbGV0IGtFeHByRjMyeDRFeHRyYWN0TGFuZSA9IDB4MWY7
CitsZXQga0V4cHJGMzJ4NFJlcGxhY2VMYW5lID0gMHgyMDsKK2xldCBrRXhwckY2NHgyRXh0cmFj
dExhbmUgPSAweDIxOworbGV0IGtFeHByRjY0eDJSZXBsYWNlTGFuZSA9IDB4MjI7CitsZXQga0V4
cHJJOHgxNkVxID0gMHgyMzsKK2xldCBrRXhwckk4eDE2TmUgPSAweDI0OworbGV0IGtFeHBySTh4
MTZMdFMgPSAweDI1OworbGV0IGtFeHBySTh4MTZMdFUgPSAweDI2OworbGV0IGtFeHBySTh4MTZH
dFMgPSAweDI3OworbGV0IGtFeHBySTh4MTZHdFUgPSAweDI4OworbGV0IGtFeHBySTh4MTZMZVMg
PSAweDI5OworbGV0IGtFeHBySTh4MTZMZVUgPSAweDJhOworbGV0IGtFeHBySTh4MTZHZVMgPSAw
eDJiOworbGV0IGtFeHBySTh4MTZHZVUgPSAweDJjOworbGV0IGtFeHBySTE2eDhFcSA9IDB4MmQ7
CitsZXQga0V4cHJJMTZ4OE5lID0gMHgyZTsKK2xldCBrRXhwckkxNng4THRTID0gMHgyZjsKK2xl
dCBrRXhwckkxNng4THRVID0gMHgzMDsKK2xldCBrRXhwckkxNng4R3RTID0gMHgzMTsKK2xldCBr
RXhwckkxNng4R3RVID0gMHgzMjsKK2xldCBrRXhwckkxNng4TGVTID0gMHgzMzsKK2xldCBrRXhw
ckkxNng4TGVVID0gMHgzNDsKK2xldCBrRXhwckkxNng4R2VTID0gMHgzNTsKK2xldCBrRXhwckkx
Nng4R2VVID0gMHgzNjsKK2xldCBrRXhwckkzMng0RXEgPSAweDM3OworbGV0IGtFeHBySTMyeDRO
ZSA9IDB4Mzg7CitsZXQga0V4cHJJMzJ4NEx0UyA9IDB4Mzk7CitsZXQga0V4cHJJMzJ4NEx0VSA9
IDB4M2E7CitsZXQga0V4cHJJMzJ4NEd0UyA9IDB4M2I7CitsZXQga0V4cHJJMzJ4NEd0VSA9IDB4
M2M7CitsZXQga0V4cHJJMzJ4NExlUyA9IDB4M2Q7CitsZXQga0V4cHJJMzJ4NExlVSA9IDB4M2U7
CitsZXQga0V4cHJJMzJ4NEdlUyA9IDB4M2Y7CitsZXQga0V4cHJJMzJ4NEdlVSA9IDB4NDA7Cits
ZXQga0V4cHJGMzJ4NEVxID0gMHg0MTsKK2xldCBrRXhwckYzMng0TmUgPSAweDQyOworbGV0IGtF
eHByRjMyeDRMdCA9IDB4NDM7CitsZXQga0V4cHJGMzJ4NEd0ID0gMHg0NDsKK2xldCBrRXhwckYz
Mng0TGUgPSAweDQ1OworbGV0IGtFeHByRjMyeDRHZSA9IDB4NDY7CitsZXQga0V4cHJGNjR4MkVx
ID0gMHg0NzsKK2xldCBrRXhwckY2NHgyTmUgPSAweDQ4OworbGV0IGtFeHByRjY0eDJMdCA9IDB4
NDk7CitsZXQga0V4cHJGNjR4Mkd0ID0gMHg0YTsKK2xldCBrRXhwckY2NHgyTGUgPSAweDRiOwor
bGV0IGtFeHByRjY0eDJHZSA9IDB4NGM7CitsZXQga0V4cHJTMTI4Tm90ID0gMHg0ZDsKK2xldCBr
RXhwclMxMjhBbmQgPSAweDRlOworbGV0IGtFeHByUzEyOEFuZE5vdCA9IDB4NGY7CitsZXQga0V4
cHJTMTI4T3IgPSAweDUwOworbGV0IGtFeHByUzEyOFhvciA9IDB4NTE7CitsZXQga0V4cHJTMTI4
U2VsZWN0ID0gMHg1MjsKK2xldCBrRXhwclYxMjhBbnlUcnVlID0gMHg1MzsKK2xldCBrRXhwclMx
MjhMb2FkOExhbmUgPSAweDU0OworbGV0IGtFeHByUzEyOExvYWQxNkxhbmUgPSAweDU1OworbGV0
IGtFeHByUzEyOExvYWQzMkxhbmUgPSAweDU2OworbGV0IGtFeHByUzEyOExvYWQ2NExhbmUgPSAw
eDU3OworbGV0IGtFeHByUzEyOFN0b3JlOExhbmUgPSAweDU4OworbGV0IGtFeHByUzEyOFN0b3Jl
MTZMYW5lID0gMHg1OTsKK2xldCBrRXhwclMxMjhTdG9yZTMyTGFuZSA9IDB4NWE7CitsZXQga0V4
cHJTMTI4U3RvcmU2NExhbmUgPSAweDViOworbGV0IGtFeHByUzEyOExvYWQzMlplcm8gPSAweDVj
OworbGV0IGtFeHByUzEyOExvYWQ2NFplcm8gPSAweDVkOworbGV0IGtFeHByRjMyeDREZW1vdGVG
NjR4Mlplcm8gPSAweDVlOworbGV0IGtFeHByRjY0eDJQcm9tb3RlTG93RjMyeDQgPSAweDVmOwor
bGV0IGtFeHBySTh4MTZBYnMgPSAweDYwOworbGV0IGtFeHBySTh4MTZOZWcgPSAweDYxOworbGV0
IGtFeHBySTh4MTZQb3BjbnQgPSAweDYyOworbGV0IGtFeHBySTh4MTZBbGxUcnVlID0gMHg2MzsK
K2xldCBrRXhwckk4eDE2Qml0TWFzayA9IDB4NjQ7CitsZXQga0V4cHJJOHgxNlNDb252ZXJ0STE2
eDggPSAweDY1OworbGV0IGtFeHBySTh4MTZVQ29udmVydEkxNng4ID0gMHg2NjsKK2xldCBrRXhw
ckYzMng0Q2VpbCA9IDB4Njc7CitsZXQga0V4cHJGMzJ4NEZsb29yID0gMHg2ODsKK2xldCBrRXhw
ckYzMng0VHJ1bmMgPSAweDY5OworbGV0IGtFeHByRjMyeDROZWFyZXN0SW50ID0gMHg2YTsKK2xl
dCBrRXhwckk4eDE2U2hsID0gMHg2YjsKK2xldCBrRXhwckk4eDE2U2hyUyA9IDB4NmM7CitsZXQg
a0V4cHJJOHgxNlNoclUgPSAweDZkOworbGV0IGtFeHBySTh4MTZBZGQgPSAweDZlOworbGV0IGtF
eHBySTh4MTZBZGRTYXRTID0gMHg2ZjsKK2xldCBrRXhwckk4eDE2QWRkU2F0VSA9IDB4NzA7Cits
ZXQga0V4cHJJOHgxNlN1YiA9IDB4NzE7CitsZXQga0V4cHJJOHgxNlN1YlNhdFMgPSAweDcyOwor
bGV0IGtFeHBySTh4MTZTdWJTYXRVID0gMHg3MzsKK2xldCBrRXhwckY2NHgyQ2VpbCA9IDB4NzQ7
CitsZXQga0V4cHJGNjR4MkZsb29yID0gMHg3NTsKK2xldCBrRXhwckk4eDE2TWluUyA9IDB4NzY7
CitsZXQga0V4cHJJOHgxNk1pblUgPSAweDc3OworbGV0IGtFeHBySTh4MTZNYXhTID0gMHg3ODsK
K2xldCBrRXhwckk4eDE2TWF4VSA9IDB4Nzk7CitsZXQga0V4cHJGNjR4MlRydW5jID0gMHg3YTsK
K2xldCBrRXhwckk4eDE2Um91bmRpbmdBdmVyYWdlVSA9IDB4N2I7CitsZXQga0V4cHJJMTZ4OEV4
dEFkZFBhaXJ3aXNlSTh4MTZTID0gMHg3YzsKK2xldCBrRXhwckkxNng4RXh0QWRkUGFpcndpc2VJ
OHgxNlUgPSAweDdkOworbGV0IGtFeHBySTMyeDRFeHRBZGRQYWlyd2lzZUkxNng4UyA9IDB4N2U7
CitsZXQga0V4cHJJMzJ4NEV4dEFkZFBhaXJ3aXNlSTE2eDhVID0gMHg3ZjsKK2xldCBrRXhwckkx
Nng4QWJzID0gMHg4MDsKK2xldCBrRXhwckkxNng4TmVnID0gMHg4MTsKK2xldCBrRXhwckkxNng4
UTE1TXVsUlNhdFMgPSAweDgyOworbGV0IGtFeHBySTE2eDhBbGxUcnVlID0gMHg4MzsKK2xldCBr
RXhwckkxNng4Qml0TWFzayA9IDB4ODQ7CitsZXQga0V4cHJJMTZ4OFNDb252ZXJ0STMyeDQgPSAw
eDg1OworbGV0IGtFeHBySTE2eDhVQ29udmVydEkzMng0ID0gMHg4NjsKK2xldCBrRXhwckkxNng4
U0NvbnZlcnRJOHgxNkxvdyA9IDB4ODc7CitsZXQga0V4cHJJMTZ4OFNDb252ZXJ0STh4MTZIaWdo
ID0gMHg4ODsKK2xldCBrRXhwckkxNng4VUNvbnZlcnRJOHgxNkxvdyA9IDB4ODk7CitsZXQga0V4
cHJJMTZ4OFVDb252ZXJ0STh4MTZIaWdoID0gMHg4YTsKK2xldCBrRXhwckkxNng4U2hsID0gMHg4
YjsKK2xldCBrRXhwckkxNng4U2hyUyA9IDB4OGM7CitsZXQga0V4cHJJMTZ4OFNoclUgPSAweDhk
OworbGV0IGtFeHBySTE2eDhBZGQgPSAweDhlOworbGV0IGtFeHBySTE2eDhBZGRTYXRTID0gMHg4
ZjsKK2xldCBrRXhwckkxNng4QWRkU2F0VSA9IDB4OTA7CitsZXQga0V4cHJJMTZ4OFN1YiA9IDB4
OTE7CitsZXQga0V4cHJJMTZ4OFN1YlNhdFMgPSAweDkyOworbGV0IGtFeHBySTE2eDhTdWJTYXRV
ID0gMHg5MzsKK2xldCBrRXhwckY2NHgyTmVhcmVzdEludCA9IDB4OTQ7CitsZXQga0V4cHJJMTZ4
OE11bCA9IDB4OTU7CitsZXQga0V4cHJJMTZ4OE1pblMgPSAweDk2OworbGV0IGtFeHBySTE2eDhN
aW5VID0gMHg5NzsKK2xldCBrRXhwckkxNng4TWF4UyA9IDB4OTg7CitsZXQga0V4cHJJMTZ4OE1h
eFUgPSAweDk5OworbGV0IGtFeHBySTE2eDhSb3VuZGluZ0F2ZXJhZ2VVID0gMHg5YjsKK2xldCBr
RXhwckkxNng4RXh0TXVsTG93STh4MTZTID0gMHg5YzsKK2xldCBrRXhwckkxNng4RXh0TXVsSGln
aEk4eDE2UyA9IDB4OWQ7CitsZXQga0V4cHJJMTZ4OEV4dE11bExvd0k4eDE2VSA9IDB4OWU7Cits
ZXQga0V4cHJJMTZ4OEV4dE11bEhpZ2hJOHgxNlUgPSAweDlmOworbGV0IGtFeHBySTMyeDRBYnMg
PSAweGEwOworbGV0IGtFeHBySTMyeDROZWcgPSAweGExOworbGV0IGtFeHBySTMyeDRBbGxUcnVl
ID0gMHhhMzsKK2xldCBrRXhwckkzMng0Qml0TWFzayA9IDB4YTQ7CitsZXQga0V4cHJJMzJ4NFND
b252ZXJ0STE2eDhMb3cgPSAweGE3OworbGV0IGtFeHBySTMyeDRTQ29udmVydEkxNng4SGlnaCA9
IDB4YTg7CitsZXQga0V4cHJJMzJ4NFVDb252ZXJ0STE2eDhMb3cgPSAweGE5OworbGV0IGtFeHBy
STMyeDRVQ29udmVydEkxNng4SGlnaCA9IDB4YWE7CitsZXQga0V4cHJJMzJ4NFNobCA9IDB4YWI7
CitsZXQga0V4cHJJMzJ4NFNoclMgPSAweGFjOworbGV0IGtFeHBySTMyeDRTaHJVID0gMHhhZDsK
K2xldCBrRXhwckkzMng0QWRkID0gMHhhZTsKK2xldCBrRXhwckkzMng0U3ViID0gMHhiMTsKK2xl
dCBrRXhwckkzMng0TXVsID0gMHhiNTsKK2xldCBrRXhwckkzMng0TWluUyA9IDB4YjY7CitsZXQg
a0V4cHJJMzJ4NE1pblUgPSAweGI3OworbGV0IGtFeHBySTMyeDRNYXhTID0gMHhiODsKK2xldCBr
RXhwckkzMng0TWF4VSA9IDB4Yjk7CitsZXQga0V4cHJJMzJ4NERvdEkxNng4UyA9IDB4YmE7Cits
ZXQga0V4cHJJMzJ4NEV4dE11bExvd0kxNng4UyA9IDB4YmM7CitsZXQga0V4cHJJMzJ4NEV4dE11
bEhpZ2hJMTZ4OFMgPSAweGJkOworbGV0IGtFeHBySTMyeDRFeHRNdWxMb3dJMTZ4OFUgPSAweGJl
OworbGV0IGtFeHBySTMyeDRFeHRNdWxIaWdoSTE2eDhVID0gMHhiZjsKK2xldCBrRXhwckk2NHgy
QWJzID0gMHhjMDsKK2xldCBrRXhwckk2NHgyTmVnID0gMHhjMTsKK2xldCBrRXhwckk2NHgyQWxs
VHJ1ZSA9IDB4YzM7CitsZXQga0V4cHJJNjR4MkJpdE1hc2sgPSAweGM0OworbGV0IGtFeHBySTY0
eDJTQ29udmVydEkzMng0TG93ID0gMHhjNzsKK2xldCBrRXhwckk2NHgyU0NvbnZlcnRJMzJ4NEhp
Z2ggPSAweGM4OworbGV0IGtFeHBySTY0eDJVQ29udmVydEkzMng0TG93ID0gMHhjOTsKK2xldCBr
RXhwckk2NHgyVUNvbnZlcnRJMzJ4NEhpZ2ggPSAweGNhOworbGV0IGtFeHBySTY0eDJTaGwgPSAw
eGNiOworbGV0IGtFeHBySTY0eDJTaHJTID0gMHhjYzsKK2xldCBrRXhwckk2NHgyU2hyVSA9IDB4
Y2Q7CitsZXQga0V4cHJJNjR4MkFkZCA9IDB4Y2U7CitsZXQga0V4cHJJNjR4MlN1YiA9IDB4ZDE7
CitsZXQga0V4cHJJNjR4Mk11bCA9IDB4ZDU7CitsZXQga0V4cHJJNjR4MkVxID0gMHhkNjsKK2xl
dCBrRXhwckk2NHgyTmUgPSAweGQ3OworbGV0IGtFeHBySTY0eDJMdFMgPSAweGQ4OworbGV0IGtF
eHBySTY0eDJHdFMgPSAweGQ5OworbGV0IGtFeHBySTY0eDJMZVMgPSAweGRhOworbGV0IGtFeHBy
STY0eDJHZVMgPSAweGRiOworbGV0IGtFeHBySTY0eDJFeHRNdWxMb3dJMzJ4NFMgPSAweGRjOwor
bGV0IGtFeHBySTY0eDJFeHRNdWxIaWdoSTMyeDRTID0gMHhkZDsKK2xldCBrRXhwckk2NHgyRXh0
TXVsTG93STMyeDRVID0gMHhkZTsKK2xldCBrRXhwckk2NHgyRXh0TXVsSGlnaEkzMng0VSA9IDB4
ZGY7CitsZXQga0V4cHJGMzJ4NEFicyA9IDB4ZTA7CitsZXQga0V4cHJGMzJ4NE5lZyA9IDB4ZTE7
CitsZXQga0V4cHJGMzJ4NFNxcnQgPSAweGUzOworbGV0IGtFeHByRjMyeDRBZGQgPSAweGU0Owor
bGV0IGtFeHByRjMyeDRTdWIgPSAweGU1OworbGV0IGtFeHByRjMyeDRNdWwgPSAweGU2OworbGV0
IGtFeHByRjMyeDREaXYgPSAweGU3OworbGV0IGtFeHByRjMyeDRNaW4gPSAweGU4OworbGV0IGtF
eHByRjMyeDRNYXggPSAweGU5OworbGV0IGtFeHByRjMyeDRQbWluID0gMHhlYTsKK2xldCBrRXhw
ckYzMng0UG1heCA9IDB4ZWI7CitsZXQga0V4cHJGNjR4MkFicyA9IDB4ZWM7CitsZXQga0V4cHJG
NjR4Mk5lZyA9IDB4ZWQ7CitsZXQga0V4cHJGNjR4MlNxcnQgPSAweGVmOworbGV0IGtFeHByRjY0
eDJBZGQgPSAweGYwOworbGV0IGtFeHByRjY0eDJTdWIgPSAweGYxOworbGV0IGtFeHByRjY0eDJN
dWwgPSAweGYyOworbGV0IGtFeHByRjY0eDJEaXYgPSAweGYzOworbGV0IGtFeHByRjY0eDJNaW4g
PSAweGY0OworbGV0IGtFeHByRjY0eDJNYXggPSAweGY1OworbGV0IGtFeHByRjY0eDJQbWluID0g
MHhmNjsKK2xldCBrRXhwckY2NHgyUG1heCA9IDB4Zjc7CitsZXQga0V4cHJJMzJ4NFNDb252ZXJ0
RjMyeDQgPSAweGY4OworbGV0IGtFeHBySTMyeDRVQ29udmVydEYzMng0ID0gMHhmOTsKK2xldCBr
RXhwckYzMng0U0NvbnZlcnRJMzJ4NCA9IDB4ZmE7CitsZXQga0V4cHJGMzJ4NFVDb252ZXJ0STMy
eDQgPSAweGZiOworbGV0IGtFeHBySTMyeDRUcnVuY1NhdEY2NHgyU1plcm8gPSAweGZjOworbGV0
IGtFeHBySTMyeDRUcnVuY1NhdEY2NHgyVVplcm8gPSAweGZkOworbGV0IGtFeHByRjY0eDJDb252
ZXJ0TG93STMyeDRTID0gMHhmZTsKK2xldCBrRXhwckY2NHgyQ29udmVydExvd0kzMng0VSA9IDB4
ZmY7CisKKy8vIENvbXBpbGF0aW9uIGhpbnQgY29uc3RhbnRzLgorbGV0IGtDb21waWxhdGlvbkhp
bnRTdHJhdGVneURlZmF1bHQgPSAweDAwOworbGV0IGtDb21waWxhdGlvbkhpbnRTdHJhdGVneUxh
enkgPSAweDAxOworbGV0IGtDb21waWxhdGlvbkhpbnRTdHJhdGVneUVhZ2VyID0gMHgwMjsKK2xl
dCBrQ29tcGlsYXRpb25IaW50U3RyYXRlZ3lMYXp5QmFzZWxpbmVFYWdlclRvcFRpZXIgPSAweDAz
OworbGV0IGtDb21waWxhdGlvbkhpbnRUaWVyRGVmYXVsdCA9IDB4MDA7CitsZXQga0NvbXBpbGF0
aW9uSGludFRpZXJCYXNlbGluZSA9IDB4MDE7CitsZXQga0NvbXBpbGF0aW9uSGludFRpZXJPcHRp
bWl6ZWQgPSAweDAyOworCitsZXQga1RyYXBVbnJlYWNoYWJsZSA9IDA7CitsZXQga1RyYXBNZW1P
dXRPZkJvdW5kcyA9IDE7CitsZXQga1RyYXBEaXZCeVplcm8gPSAyOworbGV0IGtUcmFwRGl2VW5y
ZXByZXNlbnRhYmxlID0gMzsKK2xldCBrVHJhcFJlbUJ5WmVybyA9IDQ7CitsZXQga1RyYXBGbG9h
dFVucmVwcmVzZW50YWJsZSA9IDU7CitsZXQga1RyYXBUYWJsZU91dE9mQm91bmRzID0gNjsKK2xl
dCBrVHJhcEZ1bmNTaWdNaXNtYXRjaCA9IDc7CitsZXQga1RyYXBVbmFsaWduZWRBY2Nlc3MgPSA4
OworbGV0IGtUcmFwRGF0YVNlZ21lbnREcm9wcGVkID0gOTsKK2xldCBrVHJhcEVsZW1TZWdtZW50
RHJvcHBlZCA9IDEwOworbGV0IGtUcmFwUmV0aHJvd051bGwgPSAxMTsKKworbGV0IGtUcmFwTXNn
cyA9IFsKKyAgL1VucmVhY2hhYmxlLywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAtLQorICAnbWVtb3J5IGFjY2VzcyBvdXQgb2YgYm91bmRzJywgICAgICAgICAgICAgICAg
ICAgIC8vIC0tCisgIC9EaXZpc2lvbiBieSB6ZXJvLywgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gLS0KKyAgJ2RpdmlkZSByZXN1bHQgdW5yZXByZXNlbnRhYmxlJywgICAgICAgICAg
ICAgICAgICAvLyAtLQorICAncmVtYWluZGVyIGJ5IHplcm8nLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIC0tCisgICdmbG9hdCB1bnJlcHJlc2VudGFibGUgaW4gaW50ZWdlciByYW5n
ZScsICAgICAgICAgLy8gLS0KKyAgJ3RhYmxlIGluZGV4IGlzIG91dCBvZiBib3VuZHMnLCAgICAg
ICAgICAgICAgICAgICAvLyAtLQorICAnbnVsbCBmdW5jdGlvbiBvciBmdW5jdGlvbiBzaWduYXR1
cmUgbWlzbWF0Y2gnLCAgIC8vIC0tCisgICdvcGVyYXRpb24gZG9lcyBub3Qgc3VwcG9ydCB1bmFs
aWduZWQgYWNjZXNzZXMnLCAgLy8gLS0KKyAgJ2RhdGEgc2VnbWVudCBoYXMgYmVlbiBkcm9wcGVk
JywgICAgICAgICAgICAgICAgICAvLyAtLQorICAnZWxlbWVudCBzZWdtZW50IGhhcyBiZWVuIGRy
b3BwZWQnLCAgICAgICAgICAgICAgIC8vIC0tCisgICdyZXRocm93aW5nIG51bGwgdmFsdWUnICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0KK107CisKKy8vIFRoaXMgcmVxdWlyZXMgdGVz
dC9tanN1bml0L21qc3VuaXQuanMuCitmdW5jdGlvbiBhc3NlcnRUcmFwcyh0cmFwLCBjb2RlKSB7
CisgIGFzc2VydFRocm93cyhjb2RlLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsIGtUcmFwTXNn
c1t0cmFwXSk7Cit9CisKK2NsYXNzIEJpbmFyeSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRo
aXMubGVuZ3RoID0gMDsKKyAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDgxOTIpOwor
ICB9CisKKyAgZW5zdXJlX3NwYWNlKG5lZWRlZCkgeworICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5n
dGggLSB0aGlzLmxlbmd0aCA+PSBuZWVkZWQpIHJldHVybjsKKyAgICBsZXQgbmV3X2NhcGFjaXR5
ID0gdGhpcy5idWZmZXIubGVuZ3RoICogMjsKKyAgICB3aGlsZSAobmV3X2NhcGFjaXR5IC0gdGhp
cy5sZW5ndGggPCBuZWVkZWQpIG5ld19jYXBhY2l0eSAqPSAyOworICAgIGxldCBuZXdfYnVmZmVy
ID0gbmV3IFVpbnQ4QXJyYXkobmV3X2NhcGFjaXR5KTsKKyAgICBuZXdfYnVmZmVyLnNldCh0aGlz
LmJ1ZmZlcik7CisgICAgdGhpcy5idWZmZXIgPSBuZXdfYnVmZmVyOworICB9CisKKyAgdHJ1bmNf
YnVmZmVyKCkgeworICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5idWZmZXIs
IDAsIHRoaXMubGVuZ3RoKTsKKyAgfQorCisgIHJlc2V0KCkgeworICAgIHRoaXMubGVuZ3RoID0g
MDsKKyAgfQorCisgIGVtaXRfdTgodmFsKSB7CisgICAgdGhpcy5lbnN1cmVfc3BhY2UoMSk7Cisg
ICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWw7CisgIH0KKworICBlbWl0X3UxNih2
YWwpIHsKKyAgICB0aGlzLmVuc3VyZV9zcGFjZSgyKTsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxl
bmd0aCsrXSA9IHZhbDsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbCA+PiA4
OworICB9CisKKyAgZW1pdF91MzIodmFsKSB7CisgICAgdGhpcy5lbnN1cmVfc3BhY2UoNCk7Cisg
ICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWw7CisgICAgdGhpcy5idWZmZXJbdGhp
cy5sZW5ndGgrK10gPSB2YWwgPj4gODsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9
IHZhbCA+PiAxNjsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbCA+PiAyNDsK
KyAgfQorCisgIGVtaXRfbGViX3UodmFsLCBtYXhfbGVuKSB7CisgICAgdGhpcy5lbnN1cmVfc3Bh
Y2UobWF4X2xlbik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhfbGVuOyArK2kpIHsKKyAg
ICAgIGxldCB2ID0gdmFsICYgMHhmZjsKKyAgICAgIHZhbCA9IHZhbCA+Pj4gNzsKKyAgICAgIGlm
ICh2YWwgPT0gMCkgeworICAgICAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHY7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3RoKytd
ID0gdiB8IDB4ODA7CisgICAgfQorICAgIHRocm93IG5ldyBFcnJvcignTGViIHZhbHVlIGV4Y2Vl
ZHMgbWF4aW11bSBsZW5ndGggb2YgJyArIG1heF9sZW4pOworICB9CisKKyAgZW1pdF91MzJ2KHZh
bCkgeworICAgIHRoaXMuZW1pdF9sZWJfdSh2YWwsIGtNYXhWYXJJbnQzMlNpemUpOworICB9CisK
KyAgZW1pdF91NjR2KHZhbCkgeworICAgIHRoaXMuZW1pdF9sZWJfdSh2YWwsIGtNYXhWYXJJbnQ2
NFNpemUpOworICB9CisKKyAgZW1pdF9ieXRlcyhkYXRhKSB7CisgICAgdGhpcy5lbnN1cmVfc3Bh
Y2UoZGF0YS5sZW5ndGgpOworICAgIHRoaXMuYnVmZmVyLnNldChkYXRhLCB0aGlzLmxlbmd0aCk7
CisgICAgdGhpcy5sZW5ndGggKz0gZGF0YS5sZW5ndGg7CisgIH0KKworICBlbWl0X3N0cmluZyhz
dHJpbmcpIHsKKyAgICAvLyBXaGVuIHRlc3RpbmcgaWxsZWdhbCBuYW1lcywgd2UgcGFzcyBhIGJ5
dGUgYXJyYXkgZGlyZWN0bHkuCisgICAgaWYgKHN0cmluZyBpbnN0YW5jZW9mIEFycmF5KSB7Cisg
ICAgICB0aGlzLmVtaXRfdTMydihzdHJpbmcubGVuZ3RoKTsKKyAgICAgIHRoaXMuZW1pdF9ieXRl
cyhzdHJpbmcpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgdGhlIGhh
Y2t5IHdheSB0byBjb252ZXJ0IGEgSmF2YVNjcmlwdCBzdHJpbmcgdG8gYSBVVEY4IGVuY29kZWQK
KyAgICAvLyBzdHJpbmcgb25seSBjb250YWluaW5nIHNpbmdsZS1ieXRlIGNoYXJhY3RlcnMuCisg
ICAgbGV0IHN0cmluZ191dGY4ID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZykp
OworICAgIHRoaXMuZW1pdF91MzJ2KHN0cmluZ191dGY4Lmxlbmd0aCk7CisgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCBzdHJpbmdfdXRmOC5sZW5ndGg7IGkrKykgeworICAgICAgdGhpcy5lbWl0X3U4
KHN0cmluZ191dGY4LmNoYXJDb2RlQXQoaSkpOworICAgIH0KKyAgfQorCisgIGVtaXRfaGVhcF90
eXBlKGhlYXBfdHlwZSkgeworICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNtU2lnbmVkTGViKGhlYXBf
dHlwZSwga01heFZhckludDMyU2l6ZSkpOworICB9CisKKyAgZW1pdF90eXBlKHR5cGUpIHsKKyAg
ICBpZiAoKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVyJykgeworICAgICAgdGhpcy5lbWl0X3U4KHR5
cGUgPj0gMCA/IHR5cGUgOiB0eXBlICYga0xlYjEyOE1hc2spOworICAgIH0gZWxzZSB7CisgICAg
ICB0aGlzLmVtaXRfdTgodHlwZS5vcGNvZGUpOworICAgICAgaWYgKCdkZXB0aCcgaW4gdHlwZSkg
dGhpcy5lbWl0X3U4KHR5cGUuZGVwdGgpOworICAgICAgdGhpcy5lbWl0X2hlYXBfdHlwZSh0eXBl
LmhlYXBfdHlwZSk7CisgICAgfQorICB9CisKKyAgZW1pdF9pbml0X2V4cHJfcmVjdXJzaXZlKGV4
cHIpIHsKKyAgICBzd2l0Y2ggKGV4cHIua2luZCkgeworICAgICAgY2FzZSBrRXhwckdsb2JhbEdl
dDoKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtFeHByR2xvYmFsR2V0KTsKKyAgICAgICAgdGhpcy5l
bWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwckkz
MkNvbnN0OgorICAgICAgICB0aGlzLmVtaXRfYnl0ZXMod2FzbUkzMkNvbnN0KGV4cHIudmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHBySTY0Q29uc3Q6CisgICAgICAgIHRo
aXMuZW1pdF9ieXRlcyh3YXNtSTY0Q29uc3QoZXhwci52YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2Uga0V4cHJGMzJDb25zdDoKKyAgICAgICAgdGhpcy5lbWl0X2J5dGVzKHdhc21G
MzJDb25zdChleHByLnZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwckY2
NENvbnN0OgorICAgICAgICB0aGlzLmVtaXRfYnl0ZXMod2FzbUY2NENvbnN0KGV4cHIudmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtTaW1kUHJlZml4OgorICAgICAgICB0aGlz
LmVtaXRfYnl0ZXMod2FzbVMxMjhDb25zdChleHByLnZhbHVlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBrRXhwclJlZkZ1bmM6CisgICAgICAgIHRoaXMuZW1pdF91OChrRXhwclJlZkZ1
bmMpOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIGtFeHByUmVmTnVsbDoKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtFeHByUmVm
TnVsbCk7CisgICAgICAgIHRoaXMuZW1pdF9oZWFwX3R5cGUoZXhwci52YWx1ZSk7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBrRXhwclN0cnVjdE5ldzoKKyAgICAgIGNhc2Uga0V4cHJTdHJ1
Y3ROZXdXaXRoUnR0OgorICAgICAgY2FzZSBrRXhwclN0cnVjdE5ld0RlZmF1bHQ6CisgICAgICBj
YXNlIGtFeHByU3RydWN0TmV3RGVmYXVsdFdpdGhSdHQ6CisgICAgICAgIGZvciAobGV0IG9wZXJh
bmQgb2YgZXhwci5vcGVyYW5kcykgeworICAgICAgICAgIHRoaXMuZW1pdF9pbml0X2V4cHJfcmVj
dXJzaXZlKG9wZXJhbmQpOworICAgICAgICB9CisgICAgICAgIHRoaXMuZW1pdF91OChrR0NQcmVm
aXgpOworICAgICAgICB0aGlzLmVtaXRfdTgoZXhwci5raW5kKTsKKyAgICAgICAgdGhpcy5lbWl0
X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwckFycmF5
SW5pdDoKKyAgICAgIGNhc2Uga0V4cHJBcnJheUluaXRTdGF0aWM6CisgICAgICAgIGZvciAobGV0
IG9wZXJhbmQgb2YgZXhwci5vcGVyYW5kcykgeworICAgICAgICAgIHRoaXMuZW1pdF9pbml0X2V4
cHJfcmVjdXJzaXZlKG9wZXJhbmQpOworICAgICAgICB9CisgICAgICAgIHRoaXMuZW1pdF91OChr
R0NQcmVmaXgpOworICAgICAgICB0aGlzLmVtaXRfdTgoZXhwci5raW5kKTsKKyAgICAgICAgdGhp
cy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIub3Bl
cmFuZHMubGVuZ3RoIC0gMSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwclJ0dENh
bm9uOgorICAgICAgICB0aGlzLmVtaXRfdTgoa0dDUHJlZml4KTsKKyAgICAgICAgdGhpcy5lbWl0
X3U4KGtFeHByUnR0Q2Fub24pOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByUnR0U3ViOgorICAgICAgICB0aGlzLmVt
aXRfaW5pdF9leHByX3JlY3Vyc2l2ZShleHByLnBhcmVudCk7CisgICAgICAgIHRoaXMuZW1pdF91
OChrR2NQcmVmaXgpOworICAgICAgICB0aGlzLmVtaXRfdTgoa0V4cHJSdHRTdWIpOworICAgICAg
ICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IGtFeHByUnR0RnJlc2hTdWI6CisgICAgICAgIHRoaXMuZW1pdF9pbml0X2V4cHJfcmVjdXJzaXZl
KGV4cHIucGFyZW50KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtHY1ByZWZpeCk7CisgICAgICAg
IHRoaXMuZW1pdF91OChrRXhwclJ0dEZyZXNoU3ViKTsKKyAgICAgICAgdGhpcy5lbWl0X3UzMnYo
ZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGVtaXRfaW5pdF9l
eHByKGV4cHIpIHsKKyAgICB0aGlzLmVtaXRfaW5pdF9leHByX3JlY3Vyc2l2ZShleHByKTsKKyAg
ICB0aGlzLmVtaXRfdTgoa0V4cHJFbmQpOworICB9CisKKyAgZW1pdF9oZWFkZXIoKSB7CisgICAg
dGhpcy5lbWl0X2J5dGVzKFsKKyAgICAgIGtXYXNtSDAsIGtXYXNtSDEsIGtXYXNtSDIsIGtXYXNt
SDMsIGtXYXNtVjAsIGtXYXNtVjEsIGtXYXNtVjIsIGtXYXNtVjMKKyAgICBdKTsKKyAgfQorCisg
IGVtaXRfc2VjdGlvbihzZWN0aW9uX2NvZGUsIGNvbnRlbnRfZ2VuZXJhdG9yKSB7CisgICAgLy8g
RW1pdCBzZWN0aW9uIG5hbWUuCisgICAgdGhpcy5lbWl0X3U4KHNlY3Rpb25fY29kZSk7CisgICAg
Ly8gRW1pdCB0aGUgc2VjdGlvbiB0byBhIHRlbXBvcmFyeSBidWZmZXI6IGl0cyBmdWxsIGxlbmd0
aCBpc24ndCBrbm93IHlldC4KKyAgICBjb25zdCBzZWN0aW9uID0gbmV3IEJpbmFyeTsKKyAgICBj
b250ZW50X2dlbmVyYXRvcihzZWN0aW9uKTsKKyAgICAvLyBFbWl0IHNlY3Rpb24gbGVuZ3RoLgor
ICAgIHRoaXMuZW1pdF91MzJ2KHNlY3Rpb24ubGVuZ3RoKTsKKyAgICAvLyBDb3B5IHRoZSB0ZW1w
b3JhcnkgYnVmZmVyLgorICAgIC8vIEF2b2lkIHNwcmVhZCBiZWNhdXNlIHtzZWN0aW9ufSBjYW4g
YmUgaHVnZS4KKyAgICB0aGlzLmVtaXRfYnl0ZXMoc2VjdGlvbi50cnVuY19idWZmZXIoKSk7Cisg
IH0KK30KKworY2xhc3MgV2FzbUZ1bmN0aW9uQnVpbGRlciB7CisgIC8vIEVuY29kaW5nIG9mIGxv
Y2FsIG5hbWVzOiBhIHN0cmluZyBjb3JyZXNwb25kcyB0byBhIGxvY2FsIG5hbWUsCisgIC8vIGEg
bnVtYmVyIG4gY29ycmVzcG9uZHMgdG8gbiB1bmRlZmluZWQgbmFtZXMuCisgIGNvbnN0cnVjdG9y
KG1vZHVsZSwgbmFtZSwgdHlwZV9pbmRleCwgYXJnX25hbWVzKSB7CisgICAgdGhpcy5tb2R1bGUg
PSBtb2R1bGU7CisgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICB0aGlzLnR5cGVfaW5kZXggPSB0
eXBlX2luZGV4OworICAgIHRoaXMuYm9keSA9IFtdOworICAgIHRoaXMubG9jYWxzID0gW107Cisg
ICAgdGhpcy5sb2NhbF9uYW1lcyA9IGFyZ19uYW1lczsKKyAgICB0aGlzLmJvZHlfb2Zmc2V0ID0g
dW5kZWZpbmVkOyAgLy8gTm90IHZhbGlkIHVudGlsIG1vZHVsZSBpcyBzZXJpYWxpemVkLgorICB9
CisKKyAgbnVtTG9jYWxOYW1lcygpIHsKKyAgICBsZXQgbnVtX2xvY2FsX25hbWVzID0gMDsKKyAg
ICBmb3IgKGxldCBsb2NfbmFtZSBvZiB0aGlzLmxvY2FsX25hbWVzKSB7CisgICAgICBpZiAodHlw
ZW9mIGxvY19uYW1lID09ICdzdHJpbmcnKSArK251bV9sb2NhbF9uYW1lczsKKyAgICB9CisgICAg
cmV0dXJuIG51bV9sb2NhbF9uYW1lczsKKyAgfQorCisgIGV4cG9ydEFzKG5hbWUpIHsKKyAgICB0
aGlzLm1vZHVsZS5hZGRFeHBvcnQobmFtZSwgdGhpcy5pbmRleCk7CisgICAgcmV0dXJuIHRoaXM7
CisgIH0KKworICBleHBvcnRGdW5jKCkgeworICAgIHRoaXMuZXhwb3J0QXModGhpcy5uYW1lKTsK
KyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHNldENvbXBpbGF0aW9uSGludChzdHJhdGVneSwg
YmFzZWxpbmVUaWVyLCB0b3BUaWVyKSB7CisgICAgdGhpcy5tb2R1bGUuc2V0Q29tcGlsYXRpb25I
aW50KHN0cmF0ZWd5LCBiYXNlbGluZVRpZXIsIHRvcFRpZXIsIHRoaXMuaW5kZXgpOworICAgIHJl
dHVybiB0aGlzOworICB9CisKKyAgYWRkQm9keShib2R5KSB7CisgICAgZm9yIChsZXQgYiBvZiBi
b2R5KSB7CisgICAgICBpZiAodHlwZW9mIGIgIT09ICdudW1iZXInIHx8IChiICYgKH4weEZGKSkg
IT09IDApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgICAgICAgJ2ludmFsaWQg
Ym9keSAoZW50cmllcyBtdXN0IGJlIDggYml0IG51bWJlcnMpOiAnICsgYm9keSk7CisgICAgICB9
CisgICAgfQorICAgIHRoaXMuYm9keSA9IGJvZHkuc2xpY2UoKTsKKyAgICAvLyBBdXRvbWF0aWNh
bGx5IGFkZCB0aGUgZW5kIGZvciB0aGUgZnVuY3Rpb24gYmxvY2sgdG8gdGhlIGJvZHkuCisgICAg
dGhpcy5ib2R5LnB1c2goa0V4cHJFbmQpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRk
Qm9keVdpdGhFbmQoYm9keSkgeworICAgIHRoaXMuYm9keSA9IGJvZHk7CisgICAgcmV0dXJuIHRo
aXM7CisgIH0KKworICBnZXROdW1Mb2NhbHMoKSB7CisgICAgbGV0IHRvdGFsX2xvY2FscyA9IDA7
CisgICAgZm9yIChsZXQgbCBvZiB0aGlzLmxvY2FscykgeworICAgICAgdG90YWxfbG9jYWxzICs9
IGwuY291bnQKKyAgICB9CisgICAgcmV0dXJuIHRvdGFsX2xvY2FsczsKKyAgfQorCisgIGFkZExv
Y2Fscyh0eXBlLCBjb3VudCwgbmFtZXMpIHsKKyAgICB0aGlzLmxvY2Fscy5wdXNoKHt0eXBlOiB0
eXBlLCBjb3VudDogY291bnR9KTsKKyAgICBuYW1lcyA9IG5hbWVzIHx8IFtdOworICAgIGlmIChu
YW1lcy5sZW5ndGggPiBjb3VudCkgdGhyb3cgbmV3IEVycm9yKCd0b28gbWFueSBsb2NhbHMgbmFt
ZXMgZ2l2ZW4nKTsKKyAgICB0aGlzLmxvY2FsX25hbWVzLnB1c2goLi4ubmFtZXMpOworICAgIGlm
IChjb3VudCA+IG5hbWVzLmxlbmd0aCkgdGhpcy5sb2NhbF9uYW1lcy5wdXNoKGNvdW50IC0gbmFt
ZXMubGVuZ3RoKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGVuZCgpIHsKKyAgICByZXR1
cm4gdGhpcy5tb2R1bGU7CisgIH0KK30KKworY2xhc3MgV2FzbUluaXRFeHByIHsKKyAgc3RhdGlj
IEkzMkNvbnN0KHZhbHVlKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckkzMkNvbnN0LCB2YWx1
ZTogdmFsdWV9OworICB9CisgIHN0YXRpYyBJNjRDb25zdCh2YWx1ZSkgeworICAgIHJldHVybiB7
a2luZDoga0V4cHJJNjRDb25zdCwgdmFsdWU6IHZhbHVlfTsKKyAgfQorICBzdGF0aWMgRjMyQ29u
c3QodmFsdWUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByRjMyQ29uc3QsIHZhbHVlOiB2YWx1
ZX07CisgIH0KKyAgc3RhdGljIEY2NENvbnN0KHZhbHVlKSB7CisgICAgcmV0dXJuIHtraW5kOiBr
RXhwckY2NENvbnN0LCB2YWx1ZTogdmFsdWV9OworICB9CisgIHN0YXRpYyBTMTI4Q29uc3QodmFs
dWUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtTaW1kUHJlZml4LCB2YWx1ZTogdmFsdWV9OworICB9
CisgIHN0YXRpYyBHbG9iYWxHZXQoaW5kZXgpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByR2xv
YmFsR2V0LCB2YWx1ZTogaW5kZXh9OworICB9CisgIHN0YXRpYyBSZWZGdW5jKGluZGV4KSB7Cisg
ICAgcmV0dXJuIHtraW5kOiBrRXhwclJlZkZ1bmMsIHZhbHVlOiBpbmRleH07CisgIH0KKyAgc3Rh
dGljIFJlZk51bGwodHlwZSkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJSZWZOdWxsLCB2YWx1
ZTogdHlwZX07CisgIH0KKyAgc3RhdGljIFN0cnVjdE5ld1dpdGhSdHQodHlwZSwgYXJncykgewor
ICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXdXaXRoUnR0LCB2YWx1ZTogdHlwZSwgb3Bl
cmFuZHM6IGFyZ3N9OworICB9CisgIHN0YXRpYyBTdHJ1Y3ROZXcodHlwZSwgYXJncykgeworICAg
IHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXcsIHZhbHVlOiB0eXBlLCBvcGVyYW5kczogYXJn
c307CisgIH0KKyAgc3RhdGljIFN0cnVjdE5ld0RlZmF1bHRXaXRoUnR0KHR5cGUsIHJ0dCkgewor
ICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0V2l0aFJ0dCwgdmFsdWU6IHR5
cGUsIG9wZXJhbmRzOiBbcnR0XX07CisgIH0KKyAgc3RhdGljIFN0cnVjdE5ld0RlZmF1bHQodHlw
ZSkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0LCB2YWx1ZTogdHlw
ZSwgb3BlcmFuZHM6IFtdfTsKKyAgfQorICBzdGF0aWMgQXJyYXlJbml0KHR5cGUsIGFyZ3MpIHsK
KyAgICByZXR1cm4ge2tpbmQ6IGtFeHByQXJyYXlJbml0LCB2YWx1ZTogdHlwZSwgb3BlcmFuZHM6
IGFyZ3N9OworICB9CisgIHN0YXRpYyBBcnJheUluaXRTdGF0aWModHlwZSwgYXJncykgeworICAg
IHJldHVybiB7a2luZDoga0V4cHJBcnJheUluaXRTdGF0aWMsIHZhbHVlOiB0eXBlLCBvcGVyYW5k
czogYXJnc307CisgIH0KKyAgc3RhdGljIFJ0dENhbm9uKHR5cGUpIHsKKyAgICByZXR1cm4ge2tp
bmQ6IGtFeHByUnR0Q2Fub24sIHZhbHVlOiB0eXBlfTsKKyAgfQorICBzdGF0aWMgUnR0U3ViKHR5
cGUsIHBhcmVudCkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJSdHRTdWIsIHZhbHVlOiB0eXBl
LCBwYXJlbnQ6IHBhcmVudH07CisgIH0KKyAgc3RhdGljIFJ0dEZyZXNoU3ViKHR5cGUsIHBhcmVu
dCkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJSdHRGcmVzaFN1YiwgdmFsdWU6IHR5cGUsIHBh
cmVudDogcGFyZW50fTsKKyAgfQorCisgIHN0YXRpYyBkZWZhdWx0Rm9yKHR5cGUpIHsKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgIGNhc2Uga1dhc21JMzI6CisgICAgICAgIHJldHVybiB0aGlz
LkkzMkNvbnN0KDApOworICAgICAgY2FzZSBrV2FzbUk2NDoKKyAgICAgICAgcmV0dXJuIHRoaXMu
STY0Q29uc3QoMCk7CisgICAgICBjYXNlIGtXYXNtRjMyOgorICAgICAgICByZXR1cm4gdGhpcy5G
MzJDb25zdCgwKTsKKyAgICAgIGNhc2Uga1dhc21GNjQ6CisgICAgICAgIHJldHVybiB0aGlzLkY2
NENvbnN0KDApOworICAgICAgY2FzZSBrV2FzbVMxMjg6CisgICAgICAgIHJldHVybiB0aGlzLlMx
MjhDb25zdChuZXcgQXJyYXkoMTYpLmZpbGwoMCkpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
aWYgKCh0eXBlb2YgdHlwZSkgIT0gJ251bWJlcicgJiYgdHlwZS5vcGNvZGUgIT0ga1dhc21PcHRS
ZWYpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vbi1kZWZhdWx0YWJsZSB0eXBlIik7
CisgICAgICAgIH0KKyAgICAgICAgbGV0IGhlYXBfdHlwZSA9ICh0eXBlb2YgdHlwZSkgPT0gJ251
bWJlcicgPyB0eXBlIDogdHlwZS5oZWFwX3R5cGU7CisgICAgICAgIHJldHVybiB0aGlzLlJlZk51
bGwoaGVhcF90eXBlKTsKKyAgICB9CisgIH0KK30KKworY2xhc3MgV2FzbUdsb2JhbEJ1aWxkZXIg
eworICAvLyB7aW5pdH0gc2hvdWxkIGJlIGNvbnN0cnVjdGVkIHdpdGggV2FzbUluaXRFeHByLgor
ICBjb25zdHJ1Y3Rvcihtb2R1bGUsIHR5cGUsIG11dGFibGUsIGluaXQpIHsKKyAgICB0aGlzLm1v
ZHVsZSA9IG1vZHVsZTsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIHRoaXMubXV0YWJsZSA9
IG11dGFibGU7CisgICAgdGhpcy5pbml0ID0gaW5pdDsKKyAgfQorCisgIGV4cG9ydEFzKG5hbWUp
IHsKKyAgICB0aGlzLm1vZHVsZS5leHBvcnRzLnB1c2goCisgICAgICAgIHtuYW1lOiBuYW1lLCBr
aW5kOiBrRXh0ZXJuYWxHbG9iYWwsIGluZGV4OiB0aGlzLmluZGV4fSk7CisgICAgcmV0dXJuIHRo
aXM7CisgIH0KK30KKworY2xhc3MgV2FzbVRhYmxlQnVpbGRlciB7CisgIGNvbnN0cnVjdG9yKG1v
ZHVsZSwgdHlwZSwgaW5pdGlhbF9zaXplLCBtYXhfc2l6ZSwgaW5pdF9leHByKSB7CisgICAgdGhp
cy5tb2R1bGUgPSBtb2R1bGU7CisgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICB0aGlzLmluaXRp
YWxfc2l6ZSA9IGluaXRpYWxfc2l6ZTsKKyAgICB0aGlzLmhhc19tYXggPSBtYXhfc2l6ZSAhPT0g
dW5kZWZpbmVkOworICAgIHRoaXMubWF4X3NpemUgPSBtYXhfc2l6ZTsKKyAgICB0aGlzLmluaXRf
ZXhwciA9IGluaXRfZXhwcjsKKyAgICB0aGlzLmhhc19pbml0ID0gaW5pdF9leHByICE9PSB1bmRl
ZmluZWQ7CisgIH0KKworICBleHBvcnRBcyhuYW1lKSB7CisgICAgdGhpcy5tb2R1bGUuZXhwb3J0
cy5wdXNoKAorICAgICAgICB7bmFtZTogbmFtZSwga2luZDoga0V4dGVybmFsVGFibGUsIGluZGV4
OiB0aGlzLmluZGV4fSk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KK30KKworZnVuY3Rpb24gbWFr
ZUZpZWxkKHR5cGUsIG11dGFiaWxpdHkpIHsKKyAgaWYgKCh0eXBlb2YgbXV0YWJpbGl0eSkgIT0g
J2Jvb2xlYW4nKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdmaWVsZCBtdXRhYmlsaXR5IG11c3Qg
YmUgYm9vbGVhbicpOworICB9CisgIHJldHVybiB7dHlwZTogdHlwZSwgbXV0YWJpbGl0eTogbXV0
YWJpbGl0eX07Cit9CisKK2NsYXNzIFdhc21TdHJ1Y3QgeworICBjb25zdHJ1Y3RvcihmaWVsZHMp
IHsKKyAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGRzKSkgeworICAgICAgdGhyb3cgbmV3IEVy
cm9yKCdzdHJ1Y3QgZmllbGRzIG11c3QgYmUgYW4gYXJyYXknKTsKKyAgICB9CisgICAgdGhpcy5m
aWVsZHMgPSBmaWVsZHM7CisgICAgdGhpcy50eXBlX2Zvcm0gPSBrV2FzbVN0cnVjdFR5cGVGb3Jt
OworICB9Cit9CisKK2NsYXNzIFdhc21TdHJ1Y3RTdWJ0eXBlIGV4dGVuZHMgV2FzbVN0cnVjdCB7
CisgIGNvbnN0cnVjdG9yKGZpZWxkcywgc3VwZXJ0eXBlX2lkeCkgeworICAgIHN1cGVyKGZpZWxk
cyk7CisgICAgdGhpcy5zdXBlcnR5cGUgPSBzdXBlcnR5cGVfaWR4OworICAgIHRoaXMudHlwZV9m
b3JtID0ga1dhc21TdHJ1Y3RTdWJ0eXBlRm9ybTsKKyAgfQorfQorCitjbGFzcyBXYXNtQXJyYXkg
eworICBjb25zdHJ1Y3Rvcih0eXBlLCBtdXRhYmlsaXR5KSB7CisgICAgdGhpcy50eXBlID0gdHlw
ZTsKKyAgICBpZiAoIW11dGFiaWxpdHkpIHRocm93IG5ldyBFcnJvcigiSW1tdXRhYmxlIGFycmF5
cyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQiKTsKKyAgICB0aGlzLm11dGFiaWxpdHkgPSBtdXRhYmls
aXR5OworICAgIHRoaXMudHlwZV9mb3JtID0ga1dhc21BcnJheVR5cGVGb3JtOworICB9Cit9CisK
K2NsYXNzIFdhc21BcnJheVN1YnR5cGUgZXh0ZW5kcyBXYXNtQXJyYXkgeworICBjb25zdHJ1Y3Rv
cih0eXBlLCBtdXRhYmlsaXR5LCBzdXBlcnR5cGVfaWR4KSB7CisgICAgc3VwZXIodHlwZSwgbXV0
YWJpbGl0eSk7CisgICAgdGhpcy5zdXBlcnR5cGUgPSBzdXBlcnR5cGVfaWR4OworICAgIHRoaXMu
dHlwZV9mb3JtID0ga1dhc21BcnJheVN1YnR5cGVGb3JtOworICB9Cit9CitjbGFzcyBXYXNtRWxl
bVNlZ21lbnQgeworICBjb25zdHJ1Y3Rvcih0YWJsZSwgb2Zmc2V0LCB0eXBlLCBlbGVtZW50cywg
aXNfZGVjbCkgeworICAgIHRoaXMudGFibGUgPSB0YWJsZTsKKyAgICB0aGlzLm9mZnNldCA9IG9m
ZnNldDsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIHRoaXMuZWxlbWVudHMgPSBlbGVtZW50
czsKKyAgICB0aGlzLmlzX2RlY2wgPSBpc19kZWNsOworICAgIC8vIEludmFyaWFudCBjaGVja3Mu
CisgICAgaWYgKCh0YWJsZSA9PT0gdW5kZWZpbmVkKSAhPSAob2Zmc2V0ID09PSB1bmRlZmluZWQp
KSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZWxlbWVudCBzZWdtZW50Iik7Cisg
ICAgfQorICAgIGZvciAobGV0IGVsZW0gb2YgZWxlbWVudHMpIHsKKyAgICAgIGlmICgoKHR5cGVv
ZiBlbGVtKSA9PSAnbnVtYmVyJykgIT0gKHR5cGUgPT09IHVuZGVmaW5lZCkpIHsKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGVsZW1lbnQiKTsKKyAgICAgIH0KKyAgICB9CisgIH0K
KworICBpc19hY3RpdmUoKSB7CisgICAgcmV0dXJuIHRoaXMudGFibGUgIT09IHVuZGVmaW5lZDsK
KyAgfQorCisgIGlzX3Bhc3NpdmUoKSB7CisgICAgcmV0dXJuIHRoaXMudGFibGUgPT09IHVuZGVm
aW5lZCAmJiAhdGhpcy5pc19kZWNsOworICB9CisKKyAgaXNfZGVjbGFyYXRpdmUoKSB7CisgICAg
cmV0dXJuIHRoaXMudGFibGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLmlzX2RlY2w7CisgIH0KKwor
ICBleHByZXNzaW9uc19hc19lbGVtZW50cygpIHsKKyAgICByZXR1cm4gdGhpcy50eXBlICE9PSB1
bmRlZmluZWQ7CisgIH0KK30KKworY2xhc3MgV2FzbU1vZHVsZUJ1aWxkZXIgeworICBjb25zdHJ1
Y3RvcigpIHsKKyAgICB0aGlzLnR5cGVzID0gW107CisgICAgdGhpcy5pbXBvcnRzID0gW107Cisg
ICAgdGhpcy5leHBvcnRzID0gW107CisgICAgdGhpcy5nbG9iYWxzID0gW107CisgICAgdGhpcy50
YWJsZXMgPSBbXTsKKyAgICB0aGlzLnRhZ3MgPSBbXTsKKyAgICB0aGlzLmZ1bmN0aW9ucyA9IFtd
OworICAgIHRoaXMuY29tcGlsYXRpb25faGludHMgPSBbXTsKKyAgICB0aGlzLmVsZW1lbnRfc2Vn
bWVudHMgPSBbXTsKKyAgICB0aGlzLmRhdGFfc2VnbWVudHMgPSBbXTsKKyAgICB0aGlzLmV4cGxp
Y2l0ID0gW107CisgICAgdGhpcy5udW1faW1wb3J0ZWRfZnVuY3MgPSAwOworICAgIHRoaXMubnVt
X2ltcG9ydGVkX2dsb2JhbHMgPSAwOworICAgIHRoaXMubnVtX2ltcG9ydGVkX3RhYmxlcyA9IDA7
CisgICAgdGhpcy5udW1faW1wb3J0ZWRfdGFncyA9IDA7CisgICAgcmV0dXJuIHRoaXM7CisgIH0K
KworICBhZGRTdGFydChzdGFydF9pbmRleCkgeworICAgIHRoaXMuc3RhcnRfaW5kZXggPSBzdGFy
dF9pbmRleDsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZE1lbW9yeShtaW4sIG1heCwg
ZXhwb3J0ZWQsIHNoYXJlZCkgeworICAgIHRoaXMubWVtb3J5ID0geworICAgICAgbWluOiBtaW4s
CisgICAgICBtYXg6IG1heCwKKyAgICAgIGV4cG9ydGVkOiBleHBvcnRlZCwKKyAgICAgIHNoYXJl
ZDogc2hhcmVkIHx8IGZhbHNlLAorICAgICAgaXNfbWVtb3J5NjQ6IGZhbHNlCisgICAgfTsKKyAg
ICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZE1lbW9yeTY0KG1pbiwgbWF4LCBleHBvcnRlZCkg
eworICAgIHRoaXMubWVtb3J5ID0geworICAgICAgbWluOiBtaW4sCisgICAgICBtYXg6IG1heCwK
KyAgICAgIGV4cG9ydGVkOiBleHBvcnRlZCwKKyAgICAgIHNoYXJlZDogZmFsc2UsCisgICAgICBp
c19tZW1vcnk2NDogdHJ1ZQorICAgIH07CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBhZGRF
eHBsaWNpdFNlY3Rpb24oYnl0ZXMpIHsKKyAgICB0aGlzLmV4cGxpY2l0LnB1c2goYnl0ZXMpOwor
ICAgIHJldHVybiB0aGlzOworICB9CisKKyAgc3RyaW5nVG9CeXRlcyhuYW1lKSB7CisgICAgdmFy
IHJlc3VsdCA9IG5ldyBCaW5hcnkoKTsKKyAgICByZXN1bHQuZW1pdF91MzJ2KG5hbWUubGVuZ3Ro
KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHsKKyAgICAgIHJl
c3VsdC5lbWl0X3U4KG5hbWUuY2hhckNvZGVBdChpKSk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQudHJ1bmNfYnVmZmVyKCkKKyAgfQorCisgIGNyZWF0ZUN1c3RvbVNlY3Rpb24obmFtZSwgYnl0
ZXMpIHsKKyAgICBuYW1lID0gdGhpcy5zdHJpbmdUb0J5dGVzKG5hbWUpOworICAgIHZhciBzZWN0
aW9uID0gbmV3IEJpbmFyeSgpOworICAgIHNlY3Rpb24uZW1pdF91OCgwKTsKKyAgICBzZWN0aW9u
LmVtaXRfdTMydihuYW1lLmxlbmd0aCArIGJ5dGVzLmxlbmd0aCk7CisgICAgc2VjdGlvbi5lbWl0
X2J5dGVzKG5hbWUpOworICAgIHNlY3Rpb24uZW1pdF9ieXRlcyhieXRlcyk7CisgICAgcmV0dXJu
IHNlY3Rpb24udHJ1bmNfYnVmZmVyKCk7CisgIH0KKworICBhZGRDdXN0b21TZWN0aW9uKG5hbWUs
IGJ5dGVzKSB7CisgICAgdGhpcy5leHBsaWNpdC5wdXNoKHRoaXMuY3JlYXRlQ3VzdG9tU2VjdGlv
bihuYW1lLCBieXRlcykpOworICB9CisKKyAgYWRkVHlwZSh0eXBlKSB7CisgICAgdGhpcy50eXBl
cy5wdXNoKHR5cGUpOworICAgIHZhciBwbCA9IHR5cGUucGFyYW1zLmxlbmd0aDsgICAvLyBzaG91
bGQgaGF2ZSBwYXJhbXMKKyAgICB2YXIgcmwgPSB0eXBlLnJlc3VsdHMubGVuZ3RoOyAgLy8gc2hv
dWxkIGhhdmUgcmVzdWx0cworICAgIHJldHVybiB0aGlzLnR5cGVzLmxlbmd0aCAtIDE7CisgIH0K
KworICBhZGRTdHJ1Y3QoZmllbGRzKSB7CisgICAgdGhpcy50eXBlcy5wdXNoKG5ldyBXYXNtU3Ry
dWN0KGZpZWxkcykpOworICAgIHJldHVybiB0aGlzLnR5cGVzLmxlbmd0aCAtIDE7CisgIH0KKwor
ICBrR2VuZXJpY1N1cGVyVHlwZSA9IDB4RkZGRkZGRkU7CisgIGFkZFN0cnVjdFN1YnR5cGUoZmll
bGRzLCBzdXBlcnR5cGVfaWR4ID0gdGhpcy5rR2VuZXJpY1N1cGVyVHlwZSkgeworICAgIHRoaXMu
dHlwZXMucHVzaChuZXcgV2FzbVN0cnVjdFN1YnR5cGUoZmllbGRzLCBzdXBlcnR5cGVfaWR4KSk7
CisgICAgcmV0dXJuIHRoaXMudHlwZXMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGFkZEFycmF5KHR5
cGUsIG11dGFiaWxpdHkpIHsKKyAgICB0aGlzLnR5cGVzLnB1c2gobmV3IFdhc21BcnJheSh0eXBl
LCBtdXRhYmlsaXR5KSk7CisgICAgcmV0dXJuIHRoaXMudHlwZXMubGVuZ3RoIC0gMTsKKyAgfQor
CisgIGFkZEFycmF5U3VidHlwZSh0eXBlLCBtdXRhYmlsaXR5LCBzdXBlcnR5cGVfaWR4ID0gdGhp
cy5rR2VuZXJpY1N1cGVyVHlwZSkgeworICAgIHRoaXMudHlwZXMucHVzaChuZXcgV2FzbUFycmF5
U3VidHlwZSh0eXBlLCBtdXRhYmlsaXR5LCBzdXBlcnR5cGVfaWR4KSk7CisgICAgcmV0dXJuIHRo
aXMudHlwZXMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGFkZEdsb2JhbCh0eXBlLCBtdXRhYmxlLCBp
bml0KSB7CisgICAgaWYgKGluaXQgPT09IHVuZGVmaW5lZCkgaW5pdCA9IFdhc21Jbml0RXhwci5k
ZWZhdWx0Rm9yKHR5cGUpOworICAgIGxldCBnbG9iID0gbmV3IFdhc21HbG9iYWxCdWlsZGVyKHRo
aXMsIHR5cGUsIG11dGFibGUsIGluaXQpOworICAgIGdsb2IuaW5kZXggPSB0aGlzLmdsb2JhbHMu
bGVuZ3RoICsgdGhpcy5udW1faW1wb3J0ZWRfZ2xvYmFsczsKKyAgICB0aGlzLmdsb2JhbHMucHVz
aChnbG9iKTsKKyAgICByZXR1cm4gZ2xvYjsKKyAgfQorCisgIGFkZFRhYmxlKAorICAgICAgdHlw
ZSwgaW5pdGlhbF9zaXplLCBtYXhfc2l6ZSA9IHVuZGVmaW5lZCwgaW5pdF9leHByID0gdW5kZWZp
bmVkKSB7CisgICAgaWYgKHR5cGUgPT0ga1dhc21JMzIgfHwgdHlwZSA9PSBrV2FzbUk2NCB8fCB0
eXBlID09IGtXYXNtRjMyIHx8CisgICAgICAgIHR5cGUgPT0ga1dhc21GNjQgfHwgdHlwZSA9PSBr
V2FzbVMxMjggfHwgdHlwZSA9PSBrV2FzbVZvaWQpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcign
VGFibGVzIG11c3QgYmUgb2YgYSByZWZlcmVuY2UgdHlwZScpOworICAgIH0KKyAgICBsZXQgdGFi
bGUgPSBuZXcgV2FzbVRhYmxlQnVpbGRlcigKKyAgICAgICAgdGhpcywgdHlwZSwgaW5pdGlhbF9z
aXplLCBtYXhfc2l6ZSwgaW5pdF9leHByKTsKKyAgICB0YWJsZS5pbmRleCA9IHRoaXMudGFibGVz
Lmxlbmd0aCArIHRoaXMubnVtX2ltcG9ydGVkX3RhYmxlczsKKyAgICB0aGlzLnRhYmxlcy5wdXNo
KHRhYmxlKTsKKyAgICByZXR1cm4gdGFibGU7CisgIH0KKworICBhZGRUYWcodHlwZSkgeworICAg
IGxldCB0eXBlX2luZGV4ID0gKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVyJyA/IHR5cGUgOiB0aGlz
LmFkZFR5cGUodHlwZSk7CisgICAgbGV0IHRhZ19pbmRleCA9IHRoaXMudGFncy5sZW5ndGggKyB0
aGlzLm51bV9pbXBvcnRlZF90YWdzOworICAgIHRoaXMudGFncy5wdXNoKHR5cGVfaW5kZXgpOwor
ICAgIHJldHVybiB0YWdfaW5kZXg7CisgIH0KKworICBhZGRGdW5jdGlvbihuYW1lLCB0eXBlLCBh
cmdfbmFtZXMpIHsKKyAgICBhcmdfbmFtZXMgPSBhcmdfbmFtZXMgfHwgW107CisgICAgbGV0IHR5
cGVfaW5kZXggPSAodHlwZW9mIHR5cGUpID09ICdudW1iZXInID8gdHlwZSA6IHRoaXMuYWRkVHlw
ZSh0eXBlKTsKKyAgICBsZXQgbnVtX2FyZ3MgPSB0aGlzLnR5cGVzW3R5cGVfaW5kZXhdLnBhcmFt
cy5sZW5ndGg7CisgICAgaWYgKG51bV9hcmdzIDwgYXJnX25hbWVzLmxlbmd0aCkKKyAgICAgIHRo
cm93IG5ldyBFcnJvcigndG9vIG1hbnkgYXJnIG5hbWVzIHByb3ZpZGVkJyk7CisgICAgaWYgKG51
bV9hcmdzID4gYXJnX25hbWVzLmxlbmd0aCkKKyAgICAgIGFyZ19uYW1lcy5wdXNoKG51bV9hcmdz
IC0gYXJnX25hbWVzLmxlbmd0aCk7CisgICAgbGV0IGZ1bmMgPSBuZXcgV2FzbUZ1bmN0aW9uQnVp
bGRlcih0aGlzLCBuYW1lLCB0eXBlX2luZGV4LCBhcmdfbmFtZXMpOworICAgIGZ1bmMuaW5kZXgg
PSB0aGlzLmZ1bmN0aW9ucy5sZW5ndGggKyB0aGlzLm51bV9pbXBvcnRlZF9mdW5jczsKKyAgICB0
aGlzLmZ1bmN0aW9ucy5wdXNoKGZ1bmMpOworICAgIHJldHVybiBmdW5jOworICB9CisKKyAgYWRk
SW1wb3J0KG1vZHVsZSwgbmFtZSwgdHlwZSkgeworICAgIGlmICh0aGlzLmZ1bmN0aW9ucy5sZW5n
dGggIT0gMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXBvcnRlZCBmdW5jdGlvbnMgbXVz
dCBiZSBkZWNsYXJlZCBiZWZvcmUgbG9jYWwgb25lcycpOworICAgIH0KKyAgICBsZXQgdHlwZV9p
bmRleCA9ICh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicgPyB0eXBlIDogdGhpcy5hZGRUeXBlKHR5
cGUpOworICAgIHRoaXMuaW1wb3J0cy5wdXNoKHsKKyAgICAgIG1vZHVsZTogbW9kdWxlLAorICAg
ICAgbmFtZTogbmFtZSwKKyAgICAgIGtpbmQ6IGtFeHRlcm5hbEZ1bmN0aW9uLAorICAgICAgdHlw
ZV9pbmRleDogdHlwZV9pbmRleAorICAgIH0pOworICAgIHJldHVybiB0aGlzLm51bV9pbXBvcnRl
ZF9mdW5jcysrOworICB9CisKKyAgYWRkSW1wb3J0ZWRHbG9iYWwobW9kdWxlLCBuYW1lLCB0eXBl
LCBtdXRhYmxlID0gZmFsc2UpIHsKKyAgICBpZiAodGhpcy5nbG9iYWxzLmxlbmd0aCAhPSAwKSB7
CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcG9ydGVkIGdsb2JhbHMgbXVzdCBiZSBkZWNsYXJl
ZCBiZWZvcmUgbG9jYWwgb25lcycpOworICAgIH0KKyAgICBsZXQgbyA9IHsKKyAgICAgIG1vZHVs
ZTogbW9kdWxlLAorICAgICAgbmFtZTogbmFtZSwKKyAgICAgIGtpbmQ6IGtFeHRlcm5hbEdsb2Jh
bCwKKyAgICAgIHR5cGU6IHR5cGUsCisgICAgICBtdXRhYmxlOiBtdXRhYmxlCisgICAgfTsKKyAg
ICB0aGlzLmltcG9ydHMucHVzaChvKTsKKyAgICByZXR1cm4gdGhpcy5udW1faW1wb3J0ZWRfZ2xv
YmFscysrOworICB9CisKKyAgYWRkSW1wb3J0ZWRNZW1vcnkobW9kdWxlLCBuYW1lLCBpbml0aWFs
ID0gMCwgbWF4aW11bSwgc2hhcmVkKSB7CisgICAgbGV0IG8gPSB7CisgICAgICBtb2R1bGU6IG1v
ZHVsZSwKKyAgICAgIG5hbWU6IG5hbWUsCisgICAgICBraW5kOiBrRXh0ZXJuYWxNZW1vcnksCisg
ICAgICBpbml0aWFsOiBpbml0aWFsLAorICAgICAgbWF4aW11bTogbWF4aW11bSwKKyAgICAgIHNo
YXJlZDogc2hhcmVkCisgICAgfTsKKyAgICB0aGlzLmltcG9ydHMucHVzaChvKTsKKyAgICByZXR1
cm4gdGhpczsKKyAgfQorCisgIGFkZEltcG9ydGVkVGFibGUobW9kdWxlLCBuYW1lLCBpbml0aWFs
LCBtYXhpbXVtLCB0eXBlKSB7CisgICAgaWYgKHRoaXMudGFibGVzLmxlbmd0aCAhPSAwKSB7Cisg
ICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcG9ydGVkIHRhYmxlcyBtdXN0IGJlIGRlY2xhcmVkIGJl
Zm9yZSBsb2NhbCBvbmVzJyk7CisgICAgfQorICAgIGxldCBvID0geworICAgICAgbW9kdWxlOiBt
b2R1bGUsCisgICAgICBuYW1lOiBuYW1lLAorICAgICAga2luZDoga0V4dGVybmFsVGFibGUsCisg
ICAgICBpbml0aWFsOiBpbml0aWFsLAorICAgICAgbWF4aW11bTogbWF4aW11bSwKKyAgICAgIHR5
cGU6IHR5cGUgfHwga1dhc21GdW5jUmVmCisgICAgfTsKKyAgICB0aGlzLmltcG9ydHMucHVzaChv
KTsKKyAgICByZXR1cm4gdGhpcy5udW1faW1wb3J0ZWRfdGFibGVzKys7CisgIH0KKworICBhZGRJ
bXBvcnRlZFRhZyhtb2R1bGUsIG5hbWUsIHR5cGUpIHsKKyAgICBpZiAodGhpcy50YWdzLmxlbmd0
aCAhPSAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcG9ydGVkIHRhZ3MgbXVzdCBiZSBk
ZWNsYXJlZCBiZWZvcmUgbG9jYWwgb25lcycpOworICAgIH0KKyAgICBsZXQgdHlwZV9pbmRleCA9
ICh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicgPyB0eXBlIDogdGhpcy5hZGRUeXBlKHR5cGUpOwor
ICAgIGxldCBvID0geworICAgICAgbW9kdWxlOiBtb2R1bGUsCisgICAgICBuYW1lOiBuYW1lLAor
ICAgICAga2luZDoga0V4dGVybmFsVGFnLAorICAgICAgdHlwZV9pbmRleDogdHlwZV9pbmRleAor
ICAgIH07CisgICAgdGhpcy5pbXBvcnRzLnB1c2gobyk7CisgICAgcmV0dXJuIHRoaXMubnVtX2lt
cG9ydGVkX3RhZ3MrKzsKKyAgfQorCisgIGFkZEV4cG9ydChuYW1lLCBpbmRleCkgeworICAgIHRo
aXMuZXhwb3J0cy5wdXNoKHtuYW1lOiBuYW1lLCBraW5kOiBrRXh0ZXJuYWxGdW5jdGlvbiwgaW5k
ZXg6IGluZGV4fSk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBhZGRFeHBvcnRPZktpbmQo
bmFtZSwga2luZCwgaW5kZXgpIHsKKyAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCAmJiBraW5k
ICE9IGtFeHRlcm5hbFRhYmxlICYmCisgICAgICAgIGtpbmQgIT0ga0V4dGVybmFsTWVtb3J5KSB7
CisgICAgICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAgICAgJ0luZGV4IGZvciBleHBvcnRzIG90
aGVyIHRoYW4gdGFibGVzL21lbW9yaWVzIG11c3QgYmUgcHJvdmlkZWQnKTsKKyAgICB9CisgICAg
aWYgKGluZGV4ICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBpbmRleCkgIT0gJ251bWJlcicpIHsK
KyAgICAgIHRocm93IG5ldyBFcnJvcignSW5kZXggZm9yIGV4cG9ydHMgbXVzdCBiZSBhIG51bWJl
cicpCisgICAgfQorICAgIHRoaXMuZXhwb3J0cy5wdXNoKHtuYW1lOiBuYW1lLCBraW5kOiBraW5k
LCBpbmRleDogaW5kZXh9KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHNldENvbXBpbGF0
aW9uSGludChzdHJhdGVneSwgYmFzZWxpbmVUaWVyLCB0b3BUaWVyLCBpbmRleCkgeworICAgIHRo
aXMuY29tcGlsYXRpb25faGludHNbaW5kZXhdID0geworICAgICAgc3RyYXRlZ3k6IHN0cmF0ZWd5
LAorICAgICAgYmFzZWxpbmVUaWVyOiBiYXNlbGluZVRpZXIsCisgICAgICB0b3BUaWVyOiB0b3BU
aWVyCisgICAgfTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZERhdGFTZWdtZW50KGFk
ZHIsIGRhdGEsIGlzX2dsb2JhbCA9IGZhbHNlKSB7CisgICAgdGhpcy5kYXRhX3NlZ21lbnRzLnB1
c2goCisgICAgICAgIHthZGRyOiBhZGRyLCBkYXRhOiBkYXRhLCBpc19nbG9iYWw6IGlzX2dsb2Jh
bCwgaXNfYWN0aXZlOiB0cnVlfSk7CisgICAgcmV0dXJuIHRoaXMuZGF0YV9zZWdtZW50cy5sZW5n
dGggLSAxOworICB9CisKKyAgYWRkUGFzc2l2ZURhdGFTZWdtZW50KGRhdGEpIHsKKyAgICB0aGlz
LmRhdGFfc2VnbWVudHMucHVzaCh7ZGF0YTogZGF0YSwgaXNfYWN0aXZlOiBmYWxzZX0pOworICAg
IHJldHVybiB0aGlzLmRhdGFfc2VnbWVudHMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGV4cG9ydE1l
bW9yeUFzKG5hbWUpIHsKKyAgICB0aGlzLmV4cG9ydHMucHVzaCh7bmFtZTogbmFtZSwga2luZDog
a0V4dGVybmFsTWVtb3J5LCBpbmRleDogMH0pOworICB9CisKKyAgLy8ge29mZnNldH0gaXMgYW4g
aW5pdGlhbGl6ZXIgZXhwcmVzc2lvbi4KKyAgLy8gSWYge3R5cGV9IGlzIHVuZGVmaW5lZCwgdGhl
biB7ZWxlbWVudHN9IGFyZSBmdW5jdGlvbiBpbmRpY2VzLiBPdGhlcndpc2UsCisgIC8vIHRoZXkg
YXJlIGluaXRpYWxpemVyIGV4cHJlc3Npb25zLgorICBhZGRBY3RpdmVFbGVtZW50U2VnbWVudCh0
YWJsZSwgb2Zmc2V0LCBlbGVtZW50cywgdHlwZSkgeworICAgIHRoaXMuZWxlbWVudF9zZWdtZW50
cy5wdXNoKAorICAgICAgICBuZXcgV2FzbUVsZW1TZWdtZW50KHRhYmxlLCBvZmZzZXQsIHR5cGUs
IGVsZW1lbnRzLCBmYWxzZSkpOworICAgIHJldHVybiB0aGlzLmVsZW1lbnRfc2VnbWVudHMubGVu
Z3RoIC0gMTsKKyAgfQorCisgIC8vIElmIHt0eXBlfSBpcyB1bmRlZmluZWQsIHRoZW4ge2VsZW1l
bnRzfSBhcmUgZnVuY3Rpb24gaW5kaWNlcy4gT3RoZXJ3aXNlLAorICAvLyB0aGV5IGFyZSBpbml0
aWFsaXplciBleHByZXNzaW9ucy4KKyAgYWRkUGFzc2l2ZUVsZW1lbnRTZWdtZW50KGVsZW1lbnRz
LCB0eXBlKSB7CisgICAgdGhpcy5lbGVtZW50X3NlZ21lbnRzLnB1c2goCisgICAgICBuZXcgV2Fz
bUVsZW1TZWdtZW50KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0eXBlLCBlbGVtZW50cywgZmFsc2Up
KTsKKyAgICByZXR1cm4gdGhpcy5lbGVtZW50X3NlZ21lbnRzLmxlbmd0aCAtIDE7CisgIH0KKwor
ICAvLyBJZiB7dHlwZX0gaXMgdW5kZWZpbmVkLCB0aGVuIHtlbGVtZW50c30gYXJlIGZ1bmN0aW9u
IGluZGljZXMuIE90aGVyd2lzZSwKKyAgLy8gdGhleSBhcmUgaW5pdGlhbGl6ZXIgZXhwcmVzc2lv
bnMuCisgIGFkZERlY2xhcmF0aXZlRWxlbWVudFNlZ21lbnQoZWxlbWVudHMsIHR5cGUpIHsKKyAg
ICB0aGlzLmVsZW1lbnRfc2VnbWVudHMucHVzaCgKKyAgICAgIG5ldyBXYXNtRWxlbVNlZ21lbnQo
dW5kZWZpbmVkLCB1bmRlZmluZWQsIHR5cGUsIGVsZW1lbnRzLCB0cnVlKSk7CisgICAgcmV0dXJu
IHRoaXMuZWxlbWVudF9zZWdtZW50cy5sZW5ndGggLSAxOworICB9CisKKyAgYXBwZW5kVG9UYWJs
ZShhcnJheSkgeworICAgIGZvciAobGV0IG4gb2YgYXJyYXkpIHsKKyAgICAgIGlmICh0eXBlb2Yg
biAhPSAnbnVtYmVyJykKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHRhYmxlIChl
bnRyaWVzIGhhdmUgdG8gYmUgbnVtYmVycyk6ICcgKyBhcnJheSk7CisgICAgfQorICAgIGlmICh0
aGlzLnRhYmxlcy5sZW5ndGggPT0gMCkgeworICAgICAgdGhpcy5hZGRUYWJsZShrV2FzbUFueUZ1
bmMsIDApOworICAgIH0KKyAgICAvLyBBZGp1c3QgdGhlIHRhYmxlIHRvIHRoZSBjb3JyZWN0IHNp
emUuCisgICAgbGV0IHRhYmxlID0gdGhpcy50YWJsZXNbMF07CisgICAgY29uc3QgYmFzZSA9IHRh
YmxlLmluaXRpYWxfc2l6ZTsKKyAgICBjb25zdCB0YWJsZV9zaXplID0gYmFzZSArIGFycmF5Lmxl
bmd0aDsKKyAgICB0YWJsZS5pbml0aWFsX3NpemUgPSB0YWJsZV9zaXplOworICAgIGlmICh0YWJs
ZS5oYXNfbWF4ICYmIHRhYmxlX3NpemUgPiB0YWJsZS5tYXhfc2l6ZSkgeworICAgICAgdGFibGUu
bWF4X3NpemUgPSB0YWJsZV9zaXplOworICAgIH0KKyAgICByZXR1cm4gdGhpcy5hZGRBY3RpdmVF
bGVtZW50U2VnbWVudCgwLCBXYXNtSW5pdEV4cHIuSTMyQ29uc3QoYmFzZSksIGFycmF5KTsKKyAg
fQorCisgIHNldFRhYmxlQm91bmRzKG1pbiwgbWF4ID0gdW5kZWZpbmVkKSB7CisgICAgaWYgKHRo
aXMudGFibGVzLmxlbmd0aCAhPSAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0YWJs
ZSBib3VuZHMgb2YgdGFibGUgXCcwXCcgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0LicpOworICAgIH0K
KyAgICB0aGlzLmFkZFRhYmxlKGtXYXNtQW55RnVuYywgbWluLCBtYXgpOworICAgIHJldHVybiB0
aGlzOworICB9CisKKyAgc2V0TmFtZShuYW1lKSB7CisgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAg
ICByZXR1cm4gdGhpczsKKyAgfQorCisgIHRvQnVmZmVyKGRlYnVnID0gZmFsc2UpIHsKKyAgICBs
ZXQgYmluYXJ5ID0gbmV3IEJpbmFyeTsKKyAgICBsZXQgd2FzbSA9IHRoaXM7CisKKyAgICAvLyBB
ZGQgaGVhZGVyCisgICAgYmluYXJ5LmVtaXRfaGVhZGVyKCk7CisKKyAgICAvLyBBZGQgdHlwZSBz
ZWN0aW9uCisgICAgaWYgKHdhc20udHlwZXMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVn
KSBwcmludCgnZW1pdHRpbmcgdHlwZXMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5h
cnkuZW1pdF9zZWN0aW9uKGtUeXBlU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBz
ZWN0aW9uLmVtaXRfdTMydih3YXNtLnR5cGVzLmxlbmd0aCk7CisgICAgICAgIGZvciAobGV0IHR5
cGUgb2Ygd2FzbS50eXBlcykgeworICAgICAgICAgIGlmICh0eXBlIGluc3RhbmNlb2YgV2FzbVN0
cnVjdCkgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KHR5cGUudHlwZV9mb3JtKTsKKyAg
ICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHR5cGUuZmllbGRzLmxlbmd0aCk7CisgICAgICAg
ICAgICBmb3IgKGxldCBmaWVsZCBvZiB0eXBlLmZpZWxkcykgeworICAgICAgICAgICAgICBzZWN0
aW9uLmVtaXRfdHlwZShmaWVsZC50eXBlKTsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4
KGZpZWxkLm11dGFiaWxpdHkgPyAxIDogMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAodHlwZSBpbnN0YW5jZW9mIFdhc21TdHJ1Y3RTdWJ0eXBlKSB7CisgICAgICAgICAgICAgIGlm
ICh0eXBlLnN1cGVydHlwZSA9PT0gdGhpcy5rR2VuZXJpY1N1cGVyVHlwZSkgeworICAgICAgICAg
ICAgICAgIHNlY3Rpb24uZW1pdF91OChrRGF0YVJlZkNvZGUpOworICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF9oZWFwX3R5cGUodHlwZS5zdXBlcnR5
cGUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIGlm
ICh0eXBlIGluc3RhbmNlb2YgV2FzbUFycmF5KSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRf
dTgodHlwZS50eXBlX2Zvcm0pOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUodHlwZS50
eXBlKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCh0eXBlLm11dGFiaWxpdHkgPyAxIDog
MCk7CisgICAgICAgICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFdhc21BcnJheVN1YnR5cGUpIHsK
KyAgICAgICAgICAgICAgaWYgKHR5cGUuc3VwZXJ0eXBlID09PSB0aGlzLmtHZW5lcmljU3VwZXJU
eXBlKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtEYXRhUmVmQ29kZSk7Cisg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2hlYXBf
dHlwZSh0eXBlLnN1cGVydHlwZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtXYXNtRnVuY3Rp
b25UeXBlRm9ybSk7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih0eXBlLnBhcmFtcy5s
ZW5ndGgpOworICAgICAgICAgICAgZm9yIChsZXQgcGFyYW0gb2YgdHlwZS5wYXJhbXMpIHsKKyAg
ICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUocGFyYW0pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYodHlwZS5yZXN1bHRzLmxlbmd0aCk7CisgICAgICAg
ICAgICBmb3IgKGxldCByZXN1bHQgb2YgdHlwZS5yZXN1bHRzKSB7CisgICAgICAgICAgICAgIHNl
Y3Rpb24uZW1pdF90eXBlKHJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgaW1wb3J0cyBzZWN0aW9uCisg
ICAgaWYgKHdhc20uaW1wb3J0cy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50
KCdlbWl0dGluZyBpbXBvcnRzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVt
aXRfc2VjdGlvbihrSW1wb3J0U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0
aW9uLmVtaXRfdTMydih3YXNtLmltcG9ydHMubGVuZ3RoKTsKKyAgICAgICAgZm9yIChsZXQgaW1w
IG9mIHdhc20uaW1wb3J0cykgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF9zdHJpbmcoaW1wLm1v
ZHVsZSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3N0cmluZyhpbXAubmFtZSB8fCAnJyk7Cisg
ICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGltcC5raW5kKTsKKyAgICAgICAgICBpZiAoaW1wLmtp
bmQgPT0ga0V4dGVybmFsRnVuY3Rpb24pIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2
KGltcC50eXBlX2luZGV4KTsKKyAgICAgICAgICB9IGVsc2UgaWYgKGltcC5raW5kID09IGtFeHRl
cm5hbEdsb2JhbCkgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUoaW1wLnR5cGUpOwor
ICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGltcC5tdXRhYmxlKTsKKyAgICAgICAgICB9IGVs
c2UgaWYgKGltcC5raW5kID09IGtFeHRlcm5hbE1lbW9yeSkgeworICAgICAgICAgICAgdmFyIGhh
c19tYXggPSAodHlwZW9mIGltcC5tYXhpbXVtKSAhPSAndW5kZWZpbmVkJzsKKyAgICAgICAgICAg
IHZhciBpc19zaGFyZWQgPSAodHlwZW9mIGltcC5zaGFyZWQpICE9ICd1bmRlZmluZWQnOworICAg
ICAgICAgICAgaWYgKGlzX3NoYXJlZCkgeworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgo
aGFzX21heCA/IDMgOiAyKTsgIC8vIGZsYWdzCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdTgoaGFzX21heCA/IDEgOiAwKTsgIC8vIGZsYWdzCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihpbXAuaW5pdGlhbCk7ICAg
ICAgICAgICAgICAgLy8gaW5pdGlhbAorICAgICAgICAgICAgaWYgKGhhc19tYXgpIHNlY3Rpb24u
ZW1pdF91MzJ2KGltcC5tYXhpbXVtKTsgIC8vIG1heGltdW0KKyAgICAgICAgICB9IGVsc2UgaWYg
KGltcC5raW5kID09IGtFeHRlcm5hbFRhYmxlKSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRf
dHlwZShpbXAudHlwZSk7CisgICAgICAgICAgICB2YXIgaGFzX21heCA9ICh0eXBlb2YgaW1wLm1h
eGltdW0pICE9ICd1bmRlZmluZWQnOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGhhc19t
YXggPyAxIDogMCk7ICAgICAgICAgICAgIC8vIGZsYWdzCisgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfdTMydihpbXAuaW5pdGlhbCk7ICAgICAgICAgICAgICAgLy8gaW5pdGlhbAorICAgICAgICAg
ICAgaWYgKGhhc19tYXgpIHNlY3Rpb24uZW1pdF91MzJ2KGltcC5tYXhpbXVtKTsgIC8vIG1heGlt
dW0KKyAgICAgICAgICB9IGVsc2UgaWYgKGltcC5raW5kID09IGtFeHRlcm5hbFRhZykgeworICAg
ICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoa0V4Y2VwdGlvbkF0dHJpYnV0ZSk7CisgICAgICAg
ICAgICBzZWN0aW9uLmVtaXRfdTMydihpbXAudHlwZV9pbmRleCk7CisgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93bi91bnN1cHBvcnRlZCBpbXBv
cnQga2luZCAnICsgaW1wLmtpbmQpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSk7
CisgICAgfQorCisgICAgLy8gQWRkIGZ1bmN0aW9ucyBkZWNsYXJhdGlvbnMKKyAgICBpZiAod2Fz
bS5mdW5jdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRp
bmcgZnVuY3Rpb24gZGVjbHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1p
dF9zZWN0aW9uKGtGdW5jdGlvblNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2Vj
dGlvbi5lbWl0X3UzMnYod2FzbS5mdW5jdGlvbnMubGVuZ3RoKTsKKyAgICAgICAgZm9yIChsZXQg
ZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGZ1
bmMudHlwZV9pbmRleCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFk
ZCB0YWJsZSBzZWN0aW9uCisgICAgaWYgKHdhc20udGFibGVzLmxlbmd0aCA+IDApIHsKKyAgICAg
IGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIHRhYmxlcyBAICcgKyBiaW5hcnkubGVuZ3RoKTsK
KyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1RhYmxlU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4g
eworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLnRhYmxlcy5sZW5ndGgpOworICAgICAg
ICBmb3IgKGxldCB0YWJsZSBvZiB3YXNtLnRhYmxlcykgeworICAgICAgICAgIHNlY3Rpb24uZW1p
dF90eXBlKHRhYmxlLnR5cGUpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCh0YWJsZS5oYXNf
bWF4KTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih0YWJsZS5pbml0aWFsX3NpemUpOwor
ICAgICAgICAgIGlmICh0YWJsZS5oYXNfbWF4KSBzZWN0aW9uLmVtaXRfdTMydih0YWJsZS5tYXhf
c2l6ZSk7CisgICAgICAgICAgaWYgKHRhYmxlLmhhc19pbml0KSB7CisgICAgICAgICAgICBzZWN0
aW9uLmVtaXRfaW5pdF9leHByKHRhYmxlLmluaXRfZXhwcik7CisgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgbWVtb3J5IHNlY3Rpb24KKyAgICBp
ZiAod2FzbS5tZW1vcnkgIT09IHVuZGVmaW5lZCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgn
ZW1pdHRpbmcgbWVtb3J5IEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRf
c2VjdGlvbihrTWVtb3J5U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9u
LmVtaXRfdTgoMSk7ICAvLyBvbmUgbWVtb3J5IGVudHJ5CisgICAgICAgIGNvbnN0IGhhc19tYXgg
PSB3YXNtLm1lbW9yeS5tYXggIT09IHVuZGVmaW5lZDsKKyAgICAgICAgaWYgKHdhc20ubWVtb3J5
LmlzX21lbW9yeTY0KSB7CisgICAgICAgICAgaWYgKHdhc20ubWVtb3J5LnNoYXJlZCkgeworICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaGFyaW5nIG1lbW9yeTY0IGlzIG5vdCBzdXBwb3J0
ZWQgKHlldCknKTsKKyAgICAgICAgICB9CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KAorICAg
ICAgICAgICAgICBoYXNfbWF4ID8ga0xpbWl0c01lbW9yeTY0V2l0aE1heGltdW0gOiBrTGltaXRz
TWVtb3J5NjROb01heGltdW0pOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91NjR2KHdhc20ubWVt
b3J5Lm1pbik7CisgICAgICAgICAgaWYgKGhhc19tYXgpIHNlY3Rpb24uZW1pdF91NjR2KHdhc20u
bWVtb3J5Lm1heCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4
KAorICAgICAgICAgICAgICB3YXNtLm1lbW9yeS5zaGFyZWQgPworICAgICAgICAgICAgICAgICAg
KGhhc19tYXggPyBrTGltaXRzU2hhcmVkV2l0aE1heGltdW0gOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrTGltaXRzU2hhcmVkTm9NYXhpbXVtKSA6CisgICAgICAgICAgICAgICAgICAo
aGFzX21heCA/IGtMaW1pdHNXaXRoTWF4aW11bSA6IGtMaW1pdHNOb01heGltdW0pKTsKKyAgICAg
ICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLm1lbW9yeS5taW4pOworICAgICAgICAgIGlmICho
YXNfbWF4KSBzZWN0aW9uLmVtaXRfdTMydih3YXNtLm1lbW9yeS5tYXgpOworICAgICAgICB9Cisg
ICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgdGFnIHNlY3Rpb24uCisgICAgaWYgKHdhc20u
dGFncy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyB0YWdz
IEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrVGFnU2Vj
dGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLnRh
Z3MubGVuZ3RoKTsKKyAgICAgICAgZm9yIChsZXQgdHlwZV9pbmRleCBvZiB3YXNtLnRhZ3MpIHsK
KyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihrRXhjZXB0aW9uQXR0cmlidXRlKTsKKyAgICAg
ICAgICBzZWN0aW9uLmVtaXRfdTMydih0eXBlX2luZGV4KTsKKyAgICAgICAgfQorICAgICAgfSk7
CisgICAgfQorCisgICAgLy8gQWRkIGdsb2JhbCBzZWN0aW9uLgorICAgIGlmICh3YXNtLmdsb2Jh
bHMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgZ2xvYmFs
cyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa0dsb2Jh
bFNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2Fz
bS5nbG9iYWxzLmxlbmd0aCk7CisgICAgICAgIGZvciAobGV0IGdsb2JhbCBvZiB3YXNtLmdsb2Jh
bHMpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShnbG9iYWwudHlwZSk7CisgICAgICAg
ICAgc2VjdGlvbi5lbWl0X3U4KGdsb2JhbC5tdXRhYmxlKTsKKyAgICAgICAgICBzZWN0aW9uLmVt
aXRfaW5pdF9leHByKGdsb2JhbC5pbml0KTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQor
CisgICAgLy8gQWRkIGV4cG9ydCB0YWJsZS4KKyAgICB2YXIgbWVtX2V4cG9ydCA9ICh3YXNtLm1l
bW9yeSAhPT0gdW5kZWZpbmVkICYmIHdhc20ubWVtb3J5LmV4cG9ydGVkKTsKKyAgICB2YXIgZXhw
b3J0c19jb3VudCA9IHdhc20uZXhwb3J0cy5sZW5ndGggKyAobWVtX2V4cG9ydCA/IDEgOiAwKTsK
KyAgICBpZiAoZXhwb3J0c19jb3VudCA+IDApIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2Vt
aXR0aW5nIGV4cG9ydHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9z
ZWN0aW9uKGtFeHBvcnRTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24u
ZW1pdF91MzJ2KGV4cG9ydHNfY291bnQpOworICAgICAgICBmb3IgKGxldCBleHAgb2Ygd2FzbS5l
eHBvcnRzKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3N0cmluZyhleHAubmFtZSk7CisgICAg
ICAgICAgc2VjdGlvbi5lbWl0X3U4KGV4cC5raW5kKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRf
dTMydihleHAuaW5kZXgpOworICAgICAgICB9CisgICAgICAgIGlmIChtZW1fZXhwb3J0KSB7Cisg
ICAgICAgICAgc2VjdGlvbi5lbWl0X3N0cmluZygnbWVtb3J5Jyk7CisgICAgICAgICAgc2VjdGlv
bi5lbWl0X3U4KGtFeHRlcm5hbE1lbW9yeSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDAp
OworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgc3RhcnQgZnVuY3Rp
b24gc2VjdGlvbi4KKyAgICBpZiAod2FzbS5zdGFydF9pbmRleCAhPT0gdW5kZWZpbmVkKSB7Cisg
ICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBzdGFydCBmdW5jdGlvbiBAICcgKyBiaW5h
cnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1N0YXJ0U2VjdGlvbkNvZGUs
IHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLnN0YXJ0X2luZGV4
KTsKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCBlbGVtZW50IHNlZ21lbnRzCisgICAg
aWYgKHdhc20uZWxlbWVudF9zZWdtZW50cy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcp
IHByaW50KCdlbWl0dGluZyBlbGVtZW50IHNlZ21lbnRzIEAgJyArIGJpbmFyeS5sZW5ndGgpOwor
ICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrRWxlbWVudFNlY3Rpb25Db2RlLCBzZWN0aW9uID0+
IHsKKyAgICAgICAgdmFyIHNlZ21lbnRzID0gd2FzbS5lbGVtZW50X3NlZ21lbnRzOworICAgICAg
ICBzZWN0aW9uLmVtaXRfdTMydihzZWdtZW50cy5sZW5ndGgpOworCisgICAgICAgIGZvciAobGV0
IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHsKKyAgICAgICAgICAvLyBFbWl0IGZsYWcgYW5kIGhlYWRl
ci4KKyAgICAgICAgICAvLyBFYWNoIGNhc2UgYmVsb3cgY29ycmVzcG9uZHMgdG8gYSBmbGFnIGZy
b20KKyAgICAgICAgICAvLyBodHRwczovL3dlYmFzc2VtYmx5LmdpdGh1Yi5pby9zcGVjL2NvcmUv
YmluYXJ5L21vZHVsZXMuaHRtbCNlbGVtZW50LXNlY3Rpb24KKyAgICAgICAgICAvLyAobm90IGlu
IGluY3JlYXNpbmcgb3JkZXIpLgorICAgICAgICAgIGlmIChzZWdtZW50LmlzX2FjdGl2ZSgpKSB7
CisgICAgICAgICAgICBpZiAoc2VnbWVudC50YWJsZSA9PSAwICYmIHNlZ21lbnQudHlwZSA9PT0g
dW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgIGlmIChzZWdtZW50LmV4cHJlc3Npb25zX2FzX2Vs
ZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwNCk7CisgICAg
ICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcihzZWdtZW50Lm9mZnNldCk7CisgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDAp
CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcihzZWdtZW50Lm9mZnNldCk7
CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGlm
IChzZWdtZW50LmV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBz
ZWN0aW9uLmVtaXRfdTgoMHgwNik7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYo
c2VnbWVudC50YWJsZSk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcihz
ZWdtZW50Lm9mZnNldCk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUoc2VnbWVu
dC50eXBlKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9u
LmVtaXRfdTgoMHgwMik7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoc2VnbWVu
dC50YWJsZSk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcihzZWdtZW50
Lm9mZnNldCk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHRlcm5hbEZ1bmN0
aW9uKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAoc2VnbWVudC5leHByZXNzaW9uc19hc19lbGVtZW50cygpKSB7Cisg
ICAgICAgICAgICAgIGlmIChzZWdtZW50LmlzX3Bhc3NpdmUoKSkgeworICAgICAgICAgICAgICAg
IHNlY3Rpb24uZW1pdF91OCgweDA1KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwNyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgc2VjdGlvbi5lbWl0X3R5cGUoc2VnbWVudC50eXBlKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgIGlmIChzZWdtZW50LmlzX3Bhc3NpdmUoKSkgeworICAgICAgICAg
ICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDAxKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwMyk7CisgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHRlcm5hbEZ1bmN0aW9uKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyBFbWl0IGVsZW1lbnRzLgorICAgICAg
ICAgIHNlY3Rpb24uZW1pdF91MzJ2KHNlZ21lbnQuZWxlbWVudHMubGVuZ3RoKTsKKyAgICAgICAg
ICBmb3IgKGxldCBlbGVtZW50IG9mIHNlZ21lbnQuZWxlbWVudHMpIHsKKyAgICAgICAgICAgIGlm
IChzZWdtZW50LmV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X2luaXRfZXhwcihlbGVtZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGVsZW1lbnQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSkKKyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSBh
cmUgYW55IHBhc3NpdmUgZGF0YSBzZWdtZW50cywgYWRkIHRoZSBEYXRhQ291bnQgc2VjdGlvbi4K
KyAgICBpZiAod2FzbS5kYXRhX3NlZ21lbnRzLnNvbWUoc2VnID0+ICFzZWcuaXNfYWN0aXZlKSkg
eworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrRGF0YUNvdW50U2VjdGlvbkNvZGUsIHNlY3Rp
b24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLmRhdGFfc2VnbWVudHMubGVu
Z3RoKTsKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIElmIHRoZXJlIGFyZSBjb21waWxhdGlv
biBoaW50cyBhZGQgYSBjdXN0b20gc2VjdGlvbiAnY29tcGlsYXRpb25IaW50cycKKyAgICAvLyBh
ZnRlciB0aGUgZnVuY3Rpb24gc2VjdGlvbiBhbmQgYmVmb3JlIHRoZSBjb2RlIHNlY3Rpb24uCisg
ICAgaWYgKHdhc20uY29tcGlsYXRpb25faGludHMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRl
YnVnKSBwcmludCgnZW1pdHRpbmcgY29tcGlsYXRpb24gaGludHMgQCAnICsgYmluYXJ5Lmxlbmd0
aCk7CisgICAgICAvLyBCdWlsZCBjdXN0b20gc2VjdGlvbiBwYXlsb2FkLgorICAgICAgbGV0IHBh
eWxvYWRCaW5hcnkgPSBuZXcgQmluYXJ5KCk7CisgICAgICBsZXQgaW1wbGljaXRfY29tcGlsYXRp
b25faGludHNfY291bnQgPSB3YXNtLmZ1bmN0aW9ucy5sZW5ndGg7CisgICAgICBwYXlsb2FkQmlu
YXJ5LmVtaXRfdTMydihpbXBsaWNpdF9jb21waWxhdGlvbl9oaW50c19jb3VudCk7CisKKyAgICAg
IC8vIERlZmF1bHRzIHRvIHRoZSBjb21waWxlcidzIGNob2ljZSBpZiBubyBiZXR0ZXIgaGludCB3
YXMgZ2l2ZW4gKDB4MDApLgorICAgICAgbGV0IGRlZmF1bHRIaW50Qnl0ZSA9IGtDb21waWxhdGlv
bkhpbnRTdHJhdGVneURlZmF1bHQgfAorICAgICAgICAgIChrQ29tcGlsYXRpb25IaW50VGllckRl
ZmF1bHQgPDwgMikgfAorICAgICAgICAgIChrQ29tcGlsYXRpb25IaW50VGllckRlZmF1bHQgPDwg
NCk7CisKKyAgICAgIC8vIEVtaXQgaGludCBieXRlIGZvciBldmVyeSBmdW5jdGlvbiBkZWZpbmVk
IGluIHRoaXMgbW9kdWxlLgorICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbXBsaWNpdF9jb21w
aWxhdGlvbl9oaW50c19jb3VudDsgaSsrKSB7CisgICAgICAgIGxldCBpbmRleCA9IHdhc20ubnVt
X2ltcG9ydGVkX2Z1bmNzICsgaTsKKyAgICAgICAgdmFyIGhpbnRCeXRlOworICAgICAgICBpZiAo
aW5kZXggaW4gd2FzbS5jb21waWxhdGlvbl9oaW50cykgeworICAgICAgICAgIGxldCBoaW50ID0g
d2FzbS5jb21waWxhdGlvbl9oaW50c1tpbmRleF07CisgICAgICAgICAgaGludEJ5dGUgPQorICAg
ICAgICAgICAgICBoaW50LnN0cmF0ZWd5IHwgKGhpbnQuYmFzZWxpbmVUaWVyIDw8IDIpIHwgKGhp
bnQudG9wVGllciA8PCA0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBoaW50Qnl0ZSA9
IGRlZmF1bHRIaW50Qnl0ZTsKKyAgICAgICAgfQorICAgICAgICBwYXlsb2FkQmluYXJ5LmVtaXRf
dTgoaGludEJ5dGUpOworICAgICAgfQorCisgICAgICAvLyBGaW5hbGl6ZSBhcyBjdXN0b20gc2Vj
dGlvbi4KKyAgICAgIGxldCBuYW1lID0gJ2NvbXBpbGF0aW9uSGludHMnOworICAgICAgbGV0IGJ5
dGVzID0gdGhpcy5jcmVhdGVDdXN0b21TZWN0aW9uKG5hbWUsIHBheWxvYWRCaW5hcnkudHJ1bmNf
YnVmZmVyKCkpOworICAgICAgYmluYXJ5LmVtaXRfYnl0ZXMoYnl0ZXMpOworICAgIH0KKworICAg
IC8vIEFkZCBmdW5jdGlvbiBib2RpZXMuCisgICAgaWYgKHdhc20uZnVuY3Rpb25zLmxlbmd0aCA+
IDApIHsKKyAgICAgIC8vIGVtaXQgZnVuY3Rpb24gYm9kaWVzCisgICAgICBpZiAoZGVidWcpIHBy
aW50KCdlbWl0dGluZyBjb2RlIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgbGV0IHNlY3Rp
b25fbGVuZ3RoID0gMDsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa0NvZGVTZWN0aW9uQ29k
ZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20uZnVuY3Rpb25z
Lmxlbmd0aCk7CisgICAgICAgIGxldCBoZWFkZXIgPSBuZXcgQmluYXJ5OworICAgICAgICBmb3Ig
KGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAgICAgICAgaGVhZGVyLnJlc2V0KCk7
CisgICAgICAgICAgLy8gRnVuY3Rpb24gYm9keSBsZW5ndGggd2lsbCBiZSBwYXRjaGVkIGxhdGVy
LgorICAgICAgICAgIGxldCBsb2NhbF9kZWNscyA9IGZ1bmMubG9jYWxzIHx8IFtdOworICAgICAg
ICAgIGhlYWRlci5lbWl0X3UzMnYobG9jYWxfZGVjbHMubGVuZ3RoKTsKKyAgICAgICAgICBmb3Ig
KGxldCBkZWNsIG9mIGxvY2FsX2RlY2xzKSB7CisgICAgICAgICAgICBoZWFkZXIuZW1pdF91MzJ2
KGRlY2wuY291bnQpOworICAgICAgICAgICAgaGVhZGVyLmVtaXRfdHlwZShkZWNsLnR5cGUpOwor
ICAgICAgICAgIH0KKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihoZWFkZXIubGVuZ3RoICsg
ZnVuYy5ib2R5Lmxlbmd0aCk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X2J5dGVzKGhlYWRlci50
cnVuY19idWZmZXIoKSk7CisgICAgICAgICAgLy8gU2V0IHRvIHNlY3Rpb24gb2Zmc2V0IGZvciBu
b3csIHdpbGwgdXBkYXRlLgorICAgICAgICAgIGZ1bmMuYm9keV9vZmZzZXQgPSBzZWN0aW9uLmxl
bmd0aDsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfYnl0ZXMoZnVuYy5ib2R5KTsKKyAgICAgICAg
fQorICAgICAgICBzZWN0aW9uX2xlbmd0aCA9IHNlY3Rpb24ubGVuZ3RoOworICAgICAgfSk7Cisg
ICAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAgICAgIGZ1bmMuYm9k
eV9vZmZzZXQgKz0gYmluYXJ5Lmxlbmd0aCAtIHNlY3Rpb25fbGVuZ3RoOworICAgICAgfQorICAg
IH0KKworICAgIC8vIEFkZCBkYXRhIHNlZ21lbnRzLgorICAgIGlmICh3YXNtLmRhdGFfc2VnbWVu
dHMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgZGF0YSBz
ZWdtZW50cyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24o
a0RhdGFTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2
KHdhc20uZGF0YV9zZWdtZW50cy5sZW5ndGgpOworICAgICAgICBmb3IgKGxldCBzZWcgb2Ygd2Fz
bS5kYXRhX3NlZ21lbnRzKSB7CisgICAgICAgICAgaWYgKHNlZy5pc19hY3RpdmUpIHsKKyAgICAg
ICAgICAgIHNlY3Rpb24uZW1pdF91OCgwKTsgIC8vIGxpbmVhciBtZW1vcnkgaW5kZXggMCAvIGZs
YWdzCisgICAgICAgICAgICBpZiAoc2VnLmlzX2dsb2JhbCkgeworICAgICAgICAgICAgICAvLyBp
bml0aWFsaXplciBpcyBhIGdsb2JhbCB2YXJpYWJsZQorICAgICAgICAgICAgICBzZWN0aW9uLmVt
aXRfdTgoa0V4cHJHbG9iYWxHZXQpOworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihz
ZWcuYWRkcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvLyBpbml0aWFs
aXplciBpcyBhIGNvbnN0YW50CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChrRXhwckkz
MkNvbnN0KTsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoc2VnLmFkZHIpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHByRW5kKTsKKyAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtQYXNzaXZlKTsgIC8v
IGZsYWdzCisgICAgICAgICAgfQorICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHNlZy5kYXRh
Lmxlbmd0aCk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X2J5dGVzKHNlZy5kYXRhKTsKKyAgICAg
ICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIGFueSBleHBsaWNpdGx5IGFkZGVk
IHNlY3Rpb25zCisgICAgZm9yIChsZXQgZXhwIG9mIHdhc20uZXhwbGljaXQpIHsKKyAgICAgIGlm
IChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGV4cGxpY2l0IEAgJyArIGJpbmFyeS5sZW5ndGgpOwor
ICAgICAgYmluYXJ5LmVtaXRfYnl0ZXMoZXhwKTsKKyAgICB9CisKKyAgICAvLyBBZGQgbmFtZXMu
CisgICAgbGV0IG51bV9mdW5jdGlvbl9uYW1lcyA9IDA7CisgICAgbGV0IG51bV9mdW5jdGlvbnNf
d2l0aF9sb2NhbF9uYW1lcyA9IDA7CisgICAgZm9yIChsZXQgZnVuYyBvZiB3YXNtLmZ1bmN0aW9u
cykgeworICAgICAgaWYgKGZ1bmMubmFtZSAhPT0gdW5kZWZpbmVkKSArK251bV9mdW5jdGlvbl9u
YW1lczsKKyAgICAgIGlmIChmdW5jLm51bUxvY2FsTmFtZXMoKSA+IDApICsrbnVtX2Z1bmN0aW9u
c193aXRoX2xvY2FsX25hbWVzOworICAgIH0KKyAgICBpZiAobnVtX2Z1bmN0aW9uX25hbWVzID4g
MCB8fCBudW1fZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFtZXMgPiAwIHx8CisgICAgICAgIHdhc20u
bmFtZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBu
YW1lcyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1Vu
a25vd25TZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF9zdHJp
bmcoJ25hbWUnKTsKKyAgICAgICAgLy8gRW1pdCBtb2R1bGUgbmFtZS4KKyAgICAgICAgaWYgKHdh
c20ubmFtZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3NlY3Rpb24o
a01vZHVsZU5hbWVDb2RlLCBuYW1lX3NlY3Rpb24gPT4geworICAgICAgICAgICAgbmFtZV9zZWN0
aW9uLmVtaXRfc3RyaW5nKHdhc20ubmFtZSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gRW1pdCBmdW5jdGlvbiBuYW1lcy4KKyAgICAgICAgaWYgKG51bV9mdW5jdGlvbl9u
YW1lcyA+IDApIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfc2VjdGlvbihrRnVuY3Rpb25OYW1l
c0NvZGUsIG5hbWVfc2VjdGlvbiA9PiB7CisgICAgICAgICAgICBuYW1lX3NlY3Rpb24uZW1pdF91
MzJ2KG51bV9mdW5jdGlvbl9uYW1lcyk7CisgICAgICAgICAgICBmb3IgKGxldCBmdW5jIG9mIHdh
c20uZnVuY3Rpb25zKSB7CisgICAgICAgICAgICAgIGlmIChmdW5jLm5hbWUgPT09IHVuZGVmaW5l
ZCkgY29udGludWU7CisgICAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0X3UzMnYoZnVuYy5p
bmRleCk7CisgICAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0X3N0cmluZyhmdW5jLm5hbWUp
OworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIC8vIEVt
aXQgbG9jYWwgbmFtZXMuCisgICAgICAgIGlmIChudW1fZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFt
ZXMgPiAwKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3NlY3Rpb24oa0xvY2FsTmFtZXNDb2Rl
LCBuYW1lX3NlY3Rpb24gPT4geworICAgICAgICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfdTMydihu
dW1fZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFtZXMpOworICAgICAgICAgICAgZm9yIChsZXQgZnVu
YyBvZiB3YXNtLmZ1bmN0aW9ucykgeworICAgICAgICAgICAgICBpZiAoZnVuYy5udW1Mb2NhbE5h
bWVzKCkgPT0gMCkgY29udGludWU7CisgICAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0X3Uz
MnYoZnVuYy5pbmRleCk7CisgICAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0X3UzMnYoZnVu
Yy5udW1Mb2NhbE5hbWVzKCkpOworICAgICAgICAgICAgICBsZXQgbmFtZV9pbmRleCA9IDA7Cisg
ICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnVuYy5sb2NhbF9uYW1lcy5sZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuYy5sb2NhbF9uYW1lc1tpXSA9
PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfdTMydihu
YW1lX2luZGV4KTsKKyAgICAgICAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0X3N0cmluZyhm
dW5jLmxvY2FsX25hbWVzW2ldKTsKKyAgICAgICAgICAgICAgICAgIG5hbWVfaW5kZXgrKzsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgbmFtZV9pbmRleCArPSBm
dW5jLmxvY2FsX25hbWVzW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9
CisKKyAgICByZXR1cm4gYmluYXJ5LnRydW5jX2J1ZmZlcigpOworICB9CisKKyAgdG9BcnJheShk
ZWJ1ZyA9IGZhbHNlKSB7CisgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy50b0J1ZmZlcihkZWJ1
ZykpOworICB9CisKKyAgaW5zdGFudGlhdGUoZmZpKSB7CisgICAgbGV0IG1vZHVsZSA9IHRoaXMu
dG9Nb2R1bGUoKTsKKyAgICBsZXQgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2Uo
bW9kdWxlLCBmZmkpOworICAgIHJldHVybiBpbnN0YW5jZTsKKyAgfQorCisgIGFzeW5jSW5zdGFu
dGlhdGUoZmZpKSB7CisgICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHRoaXMudG9C
dWZmZXIoKSwgZmZpKQorICAgICAgICAudGhlbigoe21vZHVsZSwgaW5zdGFuY2V9KSA9PiBpbnN0
YW5jZSk7CisgIH0KKworICB0b01vZHVsZShkZWJ1ZyA9IGZhbHNlKSB7CisgICAgcmV0dXJuIG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUodGhpcy50b0J1ZmZlcihkZWJ1ZykpOworICB9Cit9CisKK2Z1
bmN0aW9uIHdhc21TaWduZWRMZWIodmFsLCBtYXhfbGVuID0gNSkgeworICBsZXQgcmVzID0gW107
CisgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4X2xlbjsgKytpKSB7CisgICAgbGV0IHYgPSB2YWwg
JiAweDdmOworICAgIC8vIElmIHt2fSBzaWduLWV4dGVuZGVkIGZyb20gNyB0byAzMiBiaXRzIGlz
IGVxdWFsIHRvIHZhbCwgd2UgYXJlIGRvbmUuCisgICAgaWYgKCgodiA8PCAyNSkgPj4gMjUpID09
IHZhbCkgeworICAgICAgcmVzLnB1c2godik7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAg
ICByZXMucHVzaCh2IHwgMHg4MCk7CisgICAgdmFsID0gdmFsID4+IDc7CisgIH0KKyAgdGhyb3cg
bmV3IEVycm9yKAorICAgICAgJ0xlYiB2YWx1ZSA8JyArIHZhbCArICc+IGV4Y2VlZHMgbWF4aW11
bSBsZW5ndGggb2YgJyArIG1heF9sZW4pOworfQorCitmdW5jdGlvbiB3YXNtVW5zaWduZWRMZWIo
dmFsLCBtYXhfbGVuID0gNSkgeworICBsZXQgcmVzID0gW107CisgIGZvciAobGV0IGkgPSAwOyBp
IDwgbWF4X2xlbjsgKytpKSB7CisgICAgbGV0IHYgPSB2YWwgJiAweDdmOworICAgIGlmICh2ID09
IHZhbCkgeworICAgICAgcmVzLnB1c2godik7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAg
ICByZXMucHVzaCh2IHwgMHg4MCk7CisgICAgdmFsID0gdmFsID4+PiA3OworICB9CisgIHRocm93
IG5ldyBFcnJvcigKKyAgICAgICdMZWIgdmFsdWUgPCcgKyB2YWwgKyAnPiBleGNlZWRzIG1heGlt
dW0gbGVuZ3RoIG9mICcgKyBtYXhfbGVuKTsKK30KKworZnVuY3Rpb24gd2FzbUkzMkNvbnN0KHZh
bCkgeworICByZXR1cm4gW2tFeHBySTMyQ29uc3QsIC4uLndhc21TaWduZWRMZWIodmFsLCA1KV07
Cit9CisKKy8vIE5vdGU6IFNpbmNlIHt2YWx9IGlzIGEgSlMgbnVtYmVyLCB0aGUgZ2VuZXJhdGVk
IGNvbnN0YW50IG9ubHkgaGFzIDUzIGJpdHMgb2YKKy8vIHByZWNpc2lvbi4KK2Z1bmN0aW9uIHdh
c21JNjRDb25zdCh2YWwpIHsKKyAgcmV0dXJuIFtrRXhwckk2NENvbnN0LCAuLi53YXNtU2lnbmVk
TGViKHZhbCwgMTApXTsKK30KKworZnVuY3Rpb24gd2FzbUYzMkNvbnN0KGYpIHsKKyAgLy8gV3Jp
dGUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciBhdCBvZmZzZXQgMC4KKyAgZGF0YV92aWV3LnNldEZs
b2F0MzIoMCwgZiwgdHJ1ZSk7CisgIHJldHVybiBbCisgICAga0V4cHJGMzJDb25zdCwgYnl0ZV92
aWV3WzBdLCBieXRlX3ZpZXdbMV0sIGJ5dGVfdmlld1syXSwgYnl0ZV92aWV3WzNdCisgIF07Cit9
CisKK2Z1bmN0aW9uIHdhc21GNjRDb25zdChmKSB7CisgIC8vIFdyaXRlIGluIGxpdHRsZS1lbmRp
YW4gb3JkZXIgYXQgb2Zmc2V0IDAuCisgIGRhdGFfdmlldy5zZXRGbG9hdDY0KDAsIGYsIHRydWUp
OworICByZXR1cm4gWworICAgIGtFeHByRjY0Q29uc3QsIGJ5dGVfdmlld1swXSwgYnl0ZV92aWV3
WzFdLCBieXRlX3ZpZXdbMl0sIGJ5dGVfdmlld1szXSwKKyAgICBieXRlX3ZpZXdbNF0sIGJ5dGVf
dmlld1s1XSwgYnl0ZV92aWV3WzZdLCBieXRlX3ZpZXdbN10KKyAgXTsKK30KKworZnVuY3Rpb24g
d2FzbVMxMjhDb25zdChmKSB7CisgIC8vIFdyaXRlIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIgYXQg
b2Zmc2V0IDAuCisgIHJldHVybiBba1NpbWRQcmVmaXgsIGtFeHByUzEyOENvbnN0LCAuLi5mXTsK
K30KKworZnVuY3Rpb24gZ2V0T3Bjb2RlTmFtZShvcGNvZGUpIHsKKyAgcmV0dXJuIGdsb2JhbFRo
aXMua1dhc21PcGNvZGVOYW1lcz8uW29wY29kZV0gPz8gJ3Vua25vd24nOworfQpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy93YXNtL3dhc20uanNvbiBiL0pTVGVzdHMvd2FzbS93YXNtLmpzb24KaW5kZXgg
NGY4ZGQ5ZTNkMjEzNDM1MDAwMDA2ZTI0MTQ2YjAxOTRjOWFjODhmMS4uOWQyMjVlNGU4MjI0OTY2
MDQ0NGZmNDFhZWJiYTI3YzY0Yzc2ZWVmMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL3dhc20u
anNvbgorKysgYi9KU1Rlc3RzL3dhc20vd2FzbS5qc29uCkBAIC0yMywzNCArMjMsMzggQEAKICAg
ICAiYmxvY2tfdHlwZSI6IFsiaTMyIiwgImk2NCIsICJmMzIiLCAiZjY0IiwgInZvaWQiLCAiZXh0
ZXJucmVmIiwgImZ1bmNyZWYiXSwKICAgICAicmVmX3R5cGUiOiBbImZ1bmNyZWYiLCAiZXh0ZXJu
cmVmIiwgInR5cGVfaWR4Il0sCiAgICAgImV4dGVybmFsX2tpbmQiOiB7Ci0gICAgICAgICJGdW5j
dGlvbiI6IHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAwIH0sCi0gICAgICAgICJUYWJsZSI6
ICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAxIH0sCi0gICAgICAgICJNZW1vcnkiOiAg
IHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAyIH0sCi0gICAgICAgICJHbG9iYWwiOiAgIHsg
InR5cGUiOiAidWludDgiLCAidmFsdWUiOiAzIH0KKyAgICAgICAgIkZ1bmN0aW9uIjogICAgeyAi
dHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDAgfSwKKyAgICAgICAgIlRhYmxlIjogICAgICAgeyAi
dHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDEgfSwKKyAgICAgICAgIk1lbW9yeSI6ICAgICAgeyAi
dHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDIgfSwKKyAgICAgICAgIkdsb2JhbCI6ICAgICAgeyAi
dHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDMgfSwKKyAgICAgICAgIkV4Y2VwdGlvbiI6ICAgeyAi
dHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDQgfQogICAgIH0sCiAgICAgInNlY3Rpb24iIDogewot
ICAgICAgICAiVHlwZSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDEsICJk
ZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBzaWduYXR1cmUgZGVjbGFyYXRpb25zIiB9LAotICAgICAg
ICAiSW1wb3J0IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDIsICJkZXNjcmlw
dGlvbiI6ICJJbXBvcnQgZGVjbGFyYXRpb25zIiB9LAotICAgICAgICAiRnVuY3Rpb24iOiB7ICJ0
eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDMsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBk
ZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJUYWJsZSI6ICAgIHsgInR5cGUiOiAidmFydWludDci
LCAidmFsdWUiOiAgNCwgImRlc2NyaXB0aW9uIjogIkluZGlyZWN0IGZ1bmN0aW9uIHRhYmxlIGFu
ZCBvdGhlciB0YWJsZXMiIH0sCi0gICAgICAgICJNZW1vcnkiOiAgIHsgInR5cGUiOiAidmFydWlu
dDciLCAidmFsdWUiOiAgNSwgImRlc2NyaXB0aW9uIjogIk1lbW9yeSBhdHRyaWJ1dGVzIiB9LAot
ICAgICAgICAiR2xvYmFsIjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDYsICJk
ZXNjcmlwdGlvbiI6ICJHbG9iYWwgZGVjbGFyYXRpb25zIiB9LAotICAgICAgICAiRXhwb3J0Ijog
ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDcsICJkZXNjcmlwdGlvbiI6ICJFeHBv
cnRzIiB9LAotICAgICAgICAiU3RhcnQiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogIDgsICJkZXNjcmlwdGlvbiI6ICJTdGFydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiIgfSwKLSAg
ICAgICAgIkVsZW1lbnQiOiAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA5LCAiZGVz
Y3JpcHRpb24iOiAiRWxlbWVudHMgc2VjdGlvbiIgfSwKLSAgICAgICAgIkNvZGUiOiAgICAgeyAi
dHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEwLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24g
Ym9kaWVzIChjb2RlKSIgfSwKLSAgICAgICAgIkRhdGEiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50
NyIsICJ2YWx1ZSI6IDExLCAiZGVzY3JpcHRpb24iOiAiRGF0YSBzZWdtZW50cyIgfQorICAgICAg
ICAiVHlwZSI6ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAxLCAiZGVzY3Jp
cHRpb24iOiAiRnVuY3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIklt
cG9ydCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMiwgImRlc2NyaXB0aW9u
IjogIkltcG9ydCBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJGdW5jdGlvbiI6ICB7ICJ0eXBl
IjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDMsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBkZWNs
YXJhdGlvbnMiIH0sCisgICAgICAgICJUYWJsZSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3Iiwg
InZhbHVlIjogIDQsICJkZXNjcmlwdGlvbiI6ICJJbmRpcmVjdCBmdW5jdGlvbiB0YWJsZSBhbmQg
b3RoZXIgdGFibGVzIiB9LAorICAgICAgICAiTWVtb3J5IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50
NyIsICJ2YWx1ZSI6ICA1LCAiZGVzY3JpcHRpb24iOiAiTWVtb3J5IGF0dHJpYnV0ZXMiIH0sCisg
ICAgICAgICJFeGNlcHRpb24iOiB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTMsICJk
ZXNjcmlwdGlvbiI6ICJFeGNlcHRpb24gZGVjbGFyYXRpb25zIiB9LAorICAgICAgICAiR2xvYmFs
IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA2LCAiZGVzY3JpcHRpb24iOiAi
R2xvYmFsIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIkV4cG9ydCI6ICAgIHsgInR5cGUiOiAi
dmFydWludDciLCAidmFsdWUiOiAgNywgImRlc2NyaXB0aW9uIjogIkV4cG9ydHMiIH0sCisgICAg
ICAgICJTdGFydCI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDgsICJkZXNj
cmlwdGlvbiI6ICJTdGFydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiIgfSwKKyAgICAgICAgIkVsZW1l
bnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgOSwgImRlc2NyaXB0aW9uIjog
IkVsZW1lbnRzIHNlY3Rpb24iIH0sCisgICAgICAgICJDb2RlIjogICAgICB7ICJ0eXBlIjogInZh
cnVpbnQ3IiwgInZhbHVlIjogMTAsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBib2RpZXMgKGNv
ZGUpIiB9LAorICAgICAgICAiRGF0YSI6ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1
ZSI6IDExLCAiZGVzY3JpcHRpb24iOiAiRGF0YSBzZWdtZW50cyIgfSwKKyAgICAgICAgIkRhdGFD
b3VudCI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMiwgImRlc2NyaXB0aW9uIjog
Ik51bWJlciBvZiBkYXRhIHNlZ21lbnRzIiB9CiAgICAgfSwKICAgICAib3Bjb2RlIjogewogICAg
ICAgICAidW5yZWFjaGFibGUiOiAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAi
dmFsdWUiOiAgIDAsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6
IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRy
YXAgaW1tZWRpYXRlbHkiIH0sCisgICAgICAgICJub3AiOiAgICAgICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMSwgInJldHVybiI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAibm8gb3BlcmF0aW9uIiB9LAogICAgICAgICAiYmxvY2siOiAg
ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDIsICJy
ZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAic2ln
IiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGEgc2VxdWVuY2Ug
b2YgZXhwcmVzc2lvbnMsIHlpZWxkaW5nIDAgb3IgMSB2YWx1ZXMiIH0sCiAgICAgICAgICJsb29w
IjogICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAg
MywgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVy
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6
ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gYSBibG9j
ayB3aGljaCBjYW4gYWxzbyBmb3JtIGNvbnRyb2wgZmxvdyBsb29wcyIgfSwKICAgICAgICAgImlm
IjogICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjog
ICA0LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0
ZXIiOiBbImJvb2wiXSwgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1l
IjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBpZiBl
eHByZXNzaW9uIiB9LAogICAgICAgICAiZWxzZSI6ICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5
IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDUsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAg
ICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogImJlZ2luIGVsc2UgZXhwcmVzc2lvbiBvZiBpZiIgfSwKLSAgICAgICAg
InNlbGVjdCI6ICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVl
IjogIDI3LCAicmV0dXJuIjogWyJwcmV2Il0sICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJh
bWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wiXSwgICAgICAgICJpbW1lZGlhdGUiOiBbXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJzZWxlY3Qg
b25lIG9mIHR3byB2YWx1ZXMgYmFzZWQgb24gY29uZGl0aW9uIiB9LAotICAgICAgICAiYW5ub3Rh
dGVkX3NlbGVjdCI6ICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjgs
ICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6
IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAi
dGFyZ2V0X3R5cGVzX2NvdW50IiwgInR5cGUiOiAidmFydWludDMyIiwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIm51bWJlciBvZiBlbnRy
aWVzIGluIHRoZSB0YXJnZXQgdHlwZXMgdmVjdG9yIn0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsibmFtZSI6ICJ0YXJnZXRf
dHlwZXMiLCAgICAgICAidHlwZSI6ICJ2YWx1ZV90eXBlKiIsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGFyZ2V0IHR5cGVzIHRoYXQgaW5k
aWNhdGUgcmVzdWx0IG9mIHNlbGVjdCBpbnN0cnVjdGlvbiJ9XSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgc2FtZSBhcyBqdXN0
IHNlbGVjdCBidXQgd2l0aCB0aGUgYW5ub3RhdGlvbiBmb3IgcmVzdWx0IHR5cGVzIiB9LAorICAg
ICAgICAidHJ5IjogICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAi
dmFsdWUiOiAgIDYsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAg
InBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6
IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJl
Z2luIHRyeSBleHByZXNzaW9uIiB9LAorICAgICAgICAiY2F0Y2giOiAgICAgICAgICAgICAgIHsg
ImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDcsICJyZXR1cm4iOiBbImNvbnRy
b2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZXhuIiwgInR5cGUiOiAidmFy
dWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGNhdGNoIGV4cHJlc3Npb24gb2YgdHJ5IiB9
LAorICAgICAgICAidGhyb3ciOiAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wi
LCAgICAidmFsdWUiOiAgIDgsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAg
ICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAiZXhuIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogInRocm93IGV4Y2VwdGlvbiIgfSwKKyAgICAgICAgInJldGhyb3ciOiAgICAgICAgICAgICB7
ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA5LCAicmV0dXJuIjogWyJjb250
cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2RlcHRoIiwg
InR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJyZXRocm93IHRoZSBleGNlcHRpb24gYXQgdGhlIHRv
cCBvZiB0aGUgc3RhY2siIH0sCiAgICAgICAgICJiciI6ICAgICAgICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMiwgInJldHVybiI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2ZV9kZXB0aCIsICJ0eXBl
IjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiYnJlYWsgdGhhdCB0YXJnZXRzIGFuIG91dGVyIG5lc3RlZCBi
bG9jayIgfSwKICAgICAgICAgImJyX2lmIjogICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJj
b250cm9sIiwgICAgInZhbHVlIjogIDEzLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2RlcHRoIiwgInR5cGUiOiAidmFydWlu
dDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJjb25kaXRpb25hbCBicmVhayB0aGF0IHRhcmdldHMgYW4gb3V0ZXIgbmVzdGVk
IGJsb2NrIiB9LAogICAgICAgICAiYnJfdGFibGUiOiAgICAgICAgICAgIHsgImNhdGVnb3J5Ijog
ImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTQsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidGFyZ2V0X2NvdW50IiwgICAidHlwZSI6ICJ2YXJ1
aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIm51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YXJnZXRfdGFibGUifSwKQEAg
LTU4LDggKzYyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsibmFtZSI6ICJkZWZhdWx0X3RhcmdldCIsICJ0eXBlIjog
InZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiYW4gb3V0ZXIgYmxvY2sgb3IgbG9vcCB0byB3aGljaCB0byBicmVh
ayBpbiB0aGUgZGVmYXVsdCBjYXNlIn1dLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJyYW5jaCB0YWJsZSBjb250cm9sIGZsb3cgY29u
c3RydWN0IiB9LAogICAgICAgICAicmV0dXJuIjogICAgICAgICAgICAgIHsgImNhdGVnb3J5Ijog
ImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTUsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogInJldHVybiB6ZXJvIG9yIG9uZSB2YWx1ZSBmcm9tIHRoaXMgZnVuY3Rpb24i
IH0sCisgICAgICAgICJkZWxlZ2F0ZSI6ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJv
bCIsICAgICJ2YWx1ZSI6ICAyNCwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAg
ICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1t
ZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2ZV9kZXB0aCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiZGVsZWdhdGUgdG8gYSBwYXJlbnQgdHJ5IGJsb2NrIiB9LAorICAgICAgICAiY2F0Y2hf
YWxsIjogICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjUs
ICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6
IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImNhdGNoIGV4Y2VwdGlv
bnMgcmVnYXJkbGVzcyBvZiB0YWciIH0sCiAgICAgICAgICJkcm9wIjogICAgICAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNiwgInJldHVybiI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiXSwgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiaWdub3JlIHZhbHVlIiB9LAotICAgICAgICAibm9w
IjogICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAg
IDEsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRl
ciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIm5vIG9wZXJhdGlv
biIgfSwKKyAgICAgICAgInNlbGVjdCI6ICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250
cm9sIiwgICAgInZhbHVlIjogIDI3LCAicmV0dXJuIjogWyJwcmV2Il0sICAgICAgICAgICAgICAg
ICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wiXSwgICAgICAgICJp
bW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJzZWxlY3Qgb25lIG9mIHR3byB2YWx1ZXMgYmFzZWQgb24gY29uZGl0aW9uIiB9LAor
ICAgICAgICAiYW5ub3RhdGVkX3NlbGVjdCI6ICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAg
ICAidmFsdWUiOiAgMjgsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAgImltbWVkaWF0
ZSI6IFt7Im5hbWUiOiAidGFyZ2V0X3R5cGVzX2NvdW50IiwgInR5cGUiOiAidmFydWludDMyIiwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
Im51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YXJnZXQgdHlwZXMgdmVjdG9yIn0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsi
bmFtZSI6ICJ0YXJnZXRfdHlwZXMiLCAgICAgICAidHlwZSI6ICJ2YWx1ZV90eXBlKiIsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGFyZ2V0
IHR5cGVzIHRoYXQgaW5kaWNhdGUgcmVzdWx0IG9mIHNlbGVjdCBpbnN0cnVjdGlvbiJ9XSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0
aGUgc2FtZSBhcyBqdXN0IHNlbGVjdCBidXQgd2l0aCB0aGUgYW5ub3RhdGlvbiBmb3IgcmVzdWx0
IHR5cGVzIiB9LAogICAgICAgICAiZW5kIjogICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5Ijog
ImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTEsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogImVuZCBhIGJsb2NrLCBsb29wLCBvciBpZiIgfSwKICAgICAgICAgImkzMi5j
b25zdCI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJzcGVjaWFsIiwgICAgInZhbHVlIjogIDY1
LCAicmV0dXJuIjogWyJpMzIiXSwgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIi
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjog
InZhbHVlIiwgICAgICAgICAgInR5cGUiOiAidmFyaW50MzIifV0sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhIGNvbnN0YW50IHZh
bHVlIGludGVycHJldGVkIGFzIGkzMiIgfSwKICAgICAgICAgImk2NC5jb25zdCI6ICAgICAgICAg
ICB7ICJjYXRlZ29yeSI6ICJzcGVjaWFsIiwgICAgInZhbHVlIjogIDY2LCAicmV0dXJuIjogWyJp
NjQiXSwgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInZhbHVlIiwgICAgICAg
ICAgInR5cGUiOiAidmFyaW50NjQifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhIGNvbnN0YW50IHZhbHVlIGludGVycHJldGVk
IGFzIGk2NCIgfSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440463</attachid>
            <date>2021-10-06 19:01:14 -0700</date>
            <delta_ts>2021-10-08 15:35:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229681-20211006190112.patch</filename>
            <type>text/plain</type>
            <size>705796</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
YzUyN2ZiNmZlZjIwNjViZWEzODc0OGJjOGE0MWI3MWQzZjljNmY5Li41NmIyNDM4ZTM3NzI4NGI2
MzU5MTg2NmFlZWNjYWE1Nzg4NTk5MjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NTAgQEAKKzIwMjEtMDktMTYgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+IGFuZCBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCB0aGUgV2ViQXNzZW1ibHkgZXhjZXB0aW9uIGhhbmRsaW5nIHByb3Bvc2FsCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk2ODEKKyAg
ICAgICAgPHJkYXI6Ly84MTYwMzM4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIFdlYkFzc2VtYmx5IGV4Y2VwdGlv
biBoYW5kbGluZyBwcm9wb3NhbCwgYXMgcGVyCisgICAgICAgIHRoZSBXSVAgc3BlYzogaHR0cHM6
Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2V4Y2VwdGlvbi1oYW5kbGluZworCisgICAgICAgIFRo
ZSBwcm9wb3NhbCBpbmNsdWRlcyA2IG5ldyBpbnN0cnVjdGlvbnM6IHRyeSwgY2F0Y2gsIGNhdGNo
X2FsbCwKKyAgICAgICAgZGVsZWdhdGUsIHRocm93IGFuZCByZXRocm93LiBBbGwgdGhlIGluc3Ry
dWN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5CisgICAgICAgIHRoZSBMTEludCBhbmQgQjMgZ2VuZXJh
dG9ycywgYnV0IG5vdCB5ZXQgc3VwcG9ydGVkIGluIEFpci4gQW55CisgICAgICAgIGZ1bmN0aW9u
cyB1c2UgZXhjZXB0aW9ucyB3aWxsIHVzZSBCMyBpbiBCQlEuCisKKyAgICAgICAgQSBmZXcgaW1w
b3J0YW50IG5vdGVzIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgLSBJbiBCMywg
c2luY2Ugd2UgY2FuIG5vdyBoYXZlIG11bHRpcGxlIGVudHJ5cG9pbnRzIChvbmUgZm9yIHRoZQor
ICAgICAgICBmdW5jdGlvbiBlbnRyeSArIDEgZm9yIGVhY2ggY2F0Y2gvY2F0Y2hfYWxsKSwgd2Ug
Y2FuIG5vIGxvbmdlciBqdXN0CisgICAgICAgIHJlcGxhY2UgZXZlcnkgdmFsdWUgaW4gdGhlIHN0
YWNrIHdpdGggYSBQaGkgd2hlbiB3ZSBmaW5kIGEgbmV3CisgICAgICAgIGVudHJ5cG9pbnQuIFRo
aXMgd29ya2VkIHNvIGZhciBiZWNhdXNlIG9mIHRoZSBhc3N1bXB0aW9uIHRoYXQgYW55CisgICAg
ICAgIGJsb2NrIGNvdWxkbid0IGFjY2VzcyBpdHMgZW5jbG9zaW5nIHN0YWNrLCBhbmQgc2luY2Ug
dGhlIGVuY2xvc2luZyBzdGFjaworICAgICAgICB3b3VsZCBvbmx5IGJlIGFjY2Vzc2libGUgd2hl
biB3ZSBleGl0ZWQgdGhlIGN1cnJlbnQgYmxvY2ssIHdlIGFkZGVkIFBoaXMKKyAgICAgICAgYXQg
dGhlIGVuZCBvZiBlYWNoIGJsb2NrIHdoZW4gd2UgaGFkIGEgbmV3IGVudHJ5cG9pbnQuIE5vdywg
c2luY2Ugd2UgaGF2ZSB0byBjYXB0dXJlIGFsbAorICAgICAgICBsaXZlIHZhbHVlcyBhdCBhbnkg
cG9pbnQgdGhhdCBtaWdodCB0aHJvdyAoY2FsbHMsIHRocm93IGFuZCByZXRocm93KSwKKyAgICAg
ICAgd2UgYnJlYWsgdGhhdCBhc3N1bXB0aW9uLiBUbyBzaW1wbGlmeSBhbGwgdGhlIHBvc3NpYmxl
IHdheXMgd2UgbWlnaHQKKyAgICAgICAgaGF2ZSB0byBtZXJnZSB0aGUgc3RhdGUgZnJvbSBtdWx0
aXBsZSBlbnRyeXBvaW50cyB3ZSBub3cgdXNlIEIzCisgICAgICAgIFZhcmlhYmxlcyB0byByZXBy
ZXNlbnQgc3RhY2sgc2xvdHMuCisgICAgICAgIC0gU29tZSBleHRyYSBpbmZvcm1hdGlvbiBpcyBy
ZXF1aXJlZCB0byBiZSBhYmxlIHRvIHByb3Blcmx5IHJlc3RvcmUKKyAgICAgICAgdGhlIHN0YXRl
IHdoZW4gY2F0Y2hpbmcgYW4gZXhjZXB0aW9uOgorICAgICAgICAgICAgLSBXZSBhZGRlZCBhIGZp
ZWxkIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2guIFRoaXMgZmllbGQgaXMgbmVjZXNzYXJ5CisgICAg
ICAgICAgICBiZWNhdXNlIHdoZW5ldmVyIHdlIHRocm93LCB3ZSBtaWdodCBlbmQgdXAgaW4gSmF2
YVNjcmlwdCwgd2hpY2gKKyAgICAgICAgICAgIGFzc3VtZXMgdGhlIGNhbGxlZSBpcyBhIGNlbGwg
YW5kIHVzZXMgaXQgdG8gZ2V0IHRoZSBWTSBhbmQgcmVzdG9yZQorICAgICAgICAgICAgY2FsbGVl
IHNhdmVzLiBUaGUgaXNzdWUgaXMgd2hlbiBjYXRjaGluZyBleGNlcHRpb25zIGluIHdhc20gd2UK
KyAgICAgICAgICAgIHN0aWxsIG5lZWQgdGhlIG9yaWdpbmFsIGNhbGxlZSwgYW5kIGlmIHRocm93
aW5nIGFuZCBjYXRjaGluZyBmcm9tCisgICAgICAgICAgICB0aGUgc2FtZSBmcmFtZSwgdGhhdCBj
YWxsIGZyYW1lIHNsb3QgaGFzIG5vdyBiZWVuIG92ZXJ3cml0dGVuLCBzbworICAgICAgICAgICAg
d2Ugc3RvcmUgaXRzIG9yaWdpbmFsIHZhbHVlIGluIHRoZSBWTSBmaWVsZC4KKyAgICAgICAgICAg
IC0gV2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZSBjdXJyZW50IFdhc20gSW5zdGFuY2UgaW50byB0
aGUgY2FsbAorICAgICAgICAgICAgZnJhbWUncyBzbG90IGZvciB0aGUgYHRoaXNgIGFyZ3VtZW50
LiBUaGUgaW5zdGFuY2UgaXMgdXNlZCBib3RoIGJ5CisgICAgICAgICAgICB0aGUgdW53aW5kZXIs
IHRvIGNoZWNrIGlmIHRoZSBleGNlcHRpb24gYmVpbmcgdGhyb3duIG1hdGNoZXMgdGhlCisgICAg
ICAgICAgICBleGNlcHRpb25zIGhhbmRsZWQgYnkgY2F0Y2ggY2FuZGlkYXRlcywgYW5kIGJ5IHRo
ZSBjYXRjaCBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgICAgIHdoaWNoIGlzIG5lY2Vzc2FyeSB3
aGVuIHRocm93aW5nIGZyb20gYSBjcm9zcyBpbnN0YW5jZSBjYWxsIHdoZXJlIGJvdGgKKyAgICAg
ICAgICAgIHRoZSBjYWxsZWUgc2F2ZSBvciBUTFMgd2lsbCBoYXZlIHRoZSBjYWxsZWUncyBpbnN0
YW5jZS4KKyAgICAgICAgICAgIC0gV2Ugc3RvcmUgdGhlIGN1cnJlbnQgb3Bjb2RlIGZvciB0aGUg
bGxpbnQsIG9yIHRoZQorICAgICAgICAgICAgY2FsbCBzaXRlIGluZGV4IGZvciBCMywgaW4gdGhl
IGNhbGwgZnJhbWUgc2xvdCBmb3IgdGhlIGFyZ3VtZW50CisgICAgICAgICAgICBjb3VudCB0YWcu
IFRoZSBjYWxsIHNpdGUgaW5kZXggaXMgdXNlZCBieSB0aGUgdW53aW5kZXIgdG8gY2hlY2sKKyAg
ICAgICAgICAgIGlmIGEgZ2l2ZW4gY2F0Y2ggY2FuIGhhbmRsZSB0aGUgZXhjZXB0aW9uIGJlaW5n
IHRocm93bi4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6Cisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9IYW5kbGVySW5mby5oOgorICAg
ICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6OkJhc2VJbnN0cnVj
dGlvbjo6bmFtZSBjb25zdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Omhhc2ggY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpkZWxldGVkVmFsdWUpOgorICAgICAgICAo
SlNDOjpDYWxsU2l0ZUluZGV4Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXhIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6Q2FsbFNp
dGVJbmRleEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkNhdGNoSW5mbzo6Q2F0Y2hJbmZvKToKKyAgICAgICAgKEpTQzo6
VW53aW5kRnVuY3Rvcjo6VW53aW5kRnVuY3Rvcik6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0
b3I6Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5k
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpD
YXRjaEluZm86OkNhdGNoSW5mbyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKToK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBq
aXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAg
ICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJ
VDo6Y29udmVydENhbGxlZVRvVk0pOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5oOgorICAg
ICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZVJlZik6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRX
aWRlMTZDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldFdpZGUzMkNvZGVSZWYpOgor
ICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50
Ojp3YXNtUmV0dXJuVG9UaHJvdyk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVXYXNtQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlV2FzbUNhdGNoQWxsKToKKyAgICAgICAg
KiBsbGludC9MTEludEV4Y2VwdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludE9mZnNldHNF
eHRyYWN0b3IuY3BwOgorICAgICAgICAqIGxsaW50L1dlYkFzc2VtYmx5LmFzbToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNl
OjpFcnJvckluc3RhbmNlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c2V0Q2F0Y2hhYmxlRnJvbVdhc20pOgorICAgICAg
ICAoSlNDOjpFcnJvckluc3RhbmNlOjppc0NhdGNoYWJsZUZyb21XYXNtIGNvbnN0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmNhbGxlZUZvcldhc21DYXRjaE9mZnNldCk6Cisg
ICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzVHJ5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0FueUNhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzQmxvY2spOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6Q29udHJvbERhdGEpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNUcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6aXNBbnlDYXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhOjppc0xvb3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpDb250cm9sRGF0YTo6aXNCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2gpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Y29udmVydFRyeVRvQ2F0Y2hBbGwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6dHJ5U3Rh
cnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YTo6dHJ5RW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGE6OnRyeURlcHRoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGE6OmNhdGNoS2luZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpleGNlcHRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6c3RhY2tTaXplIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZGlkUG9wVmFsdWVGcm9tU3RhY2sp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRTdGFja01hcCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnRha2VTdGFja21hcHMpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjp0YWtlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpwdXNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
c2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Z2Vu
ZXJhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpmaXh1cFBv
aW50ZXJQbHVzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnJlc3RvcmVX
ZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6aW5zZXJ0RW50cnlTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjppbnNlcnRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRSZWZJc051bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUYWJs
ZUdldCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkUmVmRnVuYyk6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlSW5pdCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRhYmxlQ29weSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6Omdl
dExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0
Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5RmlsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUluaXQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlDb3B5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpnZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpzZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0Q2hl
Y2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmVtaXRMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpzdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OnNhbml0aXplQXRvbWljUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNMb2FkT3ApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNMb2FkKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY1N0b3JlT3ApOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNTdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNCaW5hcnlSTVdPcCk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmF0b21pY0JpbmFyeVJNVyk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YXRvbWljTm90aWZ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6dHJ1bmNTYXR1cmF0ZWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRTZWxlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRMb29w
VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpsb2FkRnJv
bVNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjb25u
ZWN0Q29udHJvbEVudHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
TG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNo
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRG
b3JFeGNlcHRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0
Y2hUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
Q2F0Y2hBbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYXRjaEFs
bFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0
Q2F0Y2hJbXBsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdh
dGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5y
ZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUaHJvdyk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbmRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEVuZFRv
VW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpjcmVhdGVD
YWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENh
bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayk6CisgICAgICAgIChKU0M6Oldh
c206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVFeGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
ZW1pdENoZWNrc0Zvck1vZE9yRGl2KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1VPik6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4pOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0ej4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0
ej4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRP
cDxGNjRDb252ZXJ0VUk2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNT
RjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyVHJ1bmNTRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyVHJ1bmNVRjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0Pik6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0Pik6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMy
Pik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNVRjMyPik6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAg
ICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpw
cmVwYXJlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBs
YW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpDYWxsZWU6OmhhbmRsZXJGb3JJbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2Fs
bGVlOjpMTEludENhbGxlZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2FsbGVlOjpsaW5r
RXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6aW5nSklUQ2Fs
bGVlOjpsaW5rRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpPcHRpbWl6
aW5nSklUQ2FsbGVlOjpzdGFja21hcCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVl
Lmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6aGFzRXhjZXB0aW9uSGFuZGxlcnMgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmZ1bmN0aW9uQ29kZUJsb2NrIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6T3B0aW1pemluZ0pJVENhbGxlZTo6T3B0aW1pemluZ0pJ
VENhbGxlZSk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V2FzbUNhbGxpbmdDb252ZW50aW9uOjpjYWxsSW5mb3JtYXRpb25Gb3Ig
Y29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0eXBlVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjppc1ZhbGlkRXh0ZXJuYWxLaW5k
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVN0cmluZyk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxv
Y2s6Om51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpGdW5jdGlvbkNvZGVCbG9jazo6ZXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uQ29kZUJsb2NrOjphZGRFeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKiB3
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjppc1RyeU9yQ2F0
Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eGNlcHRpb25JbmRleCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20v
V2FzbUhhbmRsZXJJbmZvLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkhhbmRsZXJJ
bmZvOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmhhbmRs
ZXJGb3JJbmRleCk6CisgICAgICAgICogd2FzbS9XYXNtSGFuZGxlckluZm8uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlVubGlua2VkSGFuZGxlckluZm86OlVubGlua2VkSGFuZGxlcklu
Zm8pOgorICAgICAgICAoSlNDOjpXYXNtOjpIYW5kbGVySW5mbzo6dGFnIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OmRlbGVnYXRlVGFyZ2V0IGNvbnN0KToKKyAgICAg
ICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojp+SW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmg6CisgICAgICAgIChK
U0M6Oldhc206Okluc3RhbmNlOjphZGRUYWcpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5j
ZTo6dGFnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6dHJ5Xyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6Y2F0Y2hfKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc0xvb3Ap
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmlzQmxv
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
SWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omlz
VHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpp
c0FueUNhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xU
eXBlOjppc0NhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnVuaWZ5
VmFsdWVzV2l0aEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6Ondh
bGtFeHByZXNzaW9uU3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
bWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJz
ZUFuZENvbXBpbGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpMTEludEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpy
ZXBhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNh
bGxlcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRp
b25Gb3JDYWxsZWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZExvb3ApOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkVHJ5KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRocm93KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFJldGhyb3cpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21MaW1pdHMuaDoKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5m
b3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmV4Y2Vw
dGlvbkluZGV4U3BhY2VTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb246OmlzSW1wb3J0ZWRFeGNlcHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25z
dCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpzaWduYXR1cmVJbmRl
eEZyb21FeGNlcHRpb25JbmRleFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlSW5mb3JtYXRpb246OmltcG9ydEV4Y2VwdGlvbkNvdW50IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmlzRGVjbGFyZWRFeGNlcHRpb24gY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6YWRkRGVjbGFyZWRFeGNlcHRp
b24pOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9X
YXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAqIHdhc20vV2FzbU9TUkVudHJ5RGF0YS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpPU1JF
bnRyeURhdGE6OnZhbHVlcyk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OmxvYWRWYWx1ZXNJbnRvQnVmZmVyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6ZG9PU1JFbnRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTik6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHdh
c20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFy
c2VyOjpwYXJzZUltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBh
cnNlRXhwb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFeGNl
cHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25zLmg6CisgICAgICAgIChKU0M6Oldh
c206OnZhbGlkYXRlT3JkZXIpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWduYXR1cmVJbmZvcm1h
dGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpzaWduYXR1
cmVGb3IpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpXQVNNX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0
aHMuaDoKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rpb25TaXplKToKKyAgICAg
ICAgKiB3YXNtL1dhc21UYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9XYXNt
VGFnLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdl
bmVyYXRvci5oLgorICAgICAgICAoSlNDOjpXYXNtOjpUYWc6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6Oldhc206OlRhZzo6cGFyYW1ldGVyQ291bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUYWc6OnBhcmFtZXRlciBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206OlRhZzo6c2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6VGFnOjpUYWcpOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5jcHA6CisgICAg
ICAgICogd2FzbS9XYXNtVGh1bmtzLmg6CisgICAgICAgICogd2FzbS9nZW5lcmF0ZVdhc21CM0lS
R2VuZXJhdG9ySW5saW5lc0hlYWRlci5weToKKyAgICAgICAgKENvZGVHZW5lcmF0b3IuZ2VuZXJh
dGVPcGNvZGUpOgorICAgICAgICAoQ29kZUdlbmVyYXRvci5tYWtlUmVzdWx0KToKKyAgICAgICAg
KENvZGVHZW5lcmF0b3IuZ2VuZXJhdGUpOgorICAgICAgICAqIHdhc20vZ2VuZXJhdGVXYXNtT3Bz
SGVhZGVyLnB5OgorICAgICAgICAodHlwZU1hY3JvaXplcik6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6SlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRp
b246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlv
bjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5RXhjZXB0
aW9uOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Z2V0
QXJnIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnN1YnNwYWNlRm9y
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6dGFnIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6cGF5bG9hZCBjb25zdCk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjp0b0pTVmFsdWUpOgor
ICAgICAgICAoSlNDOjpmcm9tSlNWYWx1ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRy
eUNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwOgorICAgICAgICAo
SlNDOjpjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKToKKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eVRhZzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhZzo6SlNXZWJBc3NlbWJseVRh
Zyk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaC4K
KyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2Fz
bVRvSlMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3Ry
dWN0b3I6OldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisgICAg
ICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpX
ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OmdldEV4Y2VwdGlv
bik6CisgICAgICAgIChKU0M6OmdldFRhZyk6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yLmguCisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1
Y3Rvcjo6Y3JlYXRlVGFnKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
OjpXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlUYWdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFnUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1By
b3RvdHlwZTo6V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpnZXRUYWcp
OgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAq
IHdhc20vd2FzbS5qc29uOgorCiAyMDIxLTEwLTA2ICBYYW4gTMOzcGV6ICA8eGFuQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0pTQ11bMzJiaXRdIFJlbW92ZSBhIGJ1bmNoIG9mIGNvbXBpbGVyIHdh
cm5pbmdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYjMyYzMwZjExMGY2
YTI5ZTJjODE2Zjg3YzU1NmExMmZkYmUwZDZjOC4uZmNmMGQ5YjZiZGZiOGFjOGExYjMyNTU3ZDRh
MTlkMWUyZmQwMjZjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTIy
LDYgKzEyMiw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9PQkpFQ1RfTFVUX1NPVVJDRVMKICAgICB3
YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBp
bGVFcnJvckNvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJy
b3JQcm90b3R5cGUuY3BwCisgICAgd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmNwcAorICAgIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwCiAg
ICAgd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMv
V2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0xMzYsNiArMTM4LDggQEAgc2V0KEphdmFTY3JpcHRD
b3JlX09CSkVDVF9MVVRfU09VUkNFUwogICAgIHdhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3JQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3Iu
Y3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAorICAgIHdhc20v
anMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAKKyAgICB3YXNtL2pzL1dlYkFzc2VtYmx5
VGFnUHJvdG90eXBlLmNwcAogKQogCiBzZXQoSmF2YVNjcmlwdENvcmVfRlJBTUVXT1JLUwpAQCAt
NjAzLDYgKzYwNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAKICAgICBiMy9CM0NvbW1vbi5oCiAgICAgYjMvQjNUeXBlLmgKKyAgICBiMy9CM1ZhbHVl
UmVwLmgKIAogICAgIGJpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCiAgICAgYmluZGluZ3Mv
U2NyaXB0T2JqZWN0LmgKQEAgLTEyMjAsNiArMTIyNSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmgKICAgICB3YXNtL1dhc21Gb3JtYXQuaAogICAgIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
LmgKKyAgICB3YXNtL1dhc21IYW5kbGVySW5mby5oCiAgICAgd2FzbS9XYXNtSW5kZXhPck5hbWUu
aAogICAgIHdhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCiAgICAgd2FzbS9XYXNtTWVtb3J5
LmgKQEAgLTEyMjgsMTIgKzEyMzQsMTQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICB3YXNtL1dhc21Nb2R1bGUuaAogICAgIHdhc20vV2FzbU5hbWUu
aAogICAgIHdhc20vV2FzbU5hbWVTZWN0aW9uLmgKKyAgICB3YXNtL1dhc21PU1JFbnRyeURhdGEu
aAogICAgIHdhc20vV2FzbVBhZ2VDb3VudC5oCiAgICAgd2FzbS9XYXNtU2VjdGlvbnMuaAogICAg
IHdhc20vV2FzbVNpZ25hdHVyZS5oCiAgICAgd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuaAog
ICAgIHdhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5oCiAgICAgd2FzbS9XYXNtVGllclVwQ291bnQu
aAorICAgIHdhc20vV2FzbVZhbHVlTG9jYXRpb24uaAogCiAgICAgd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmgKICAgICB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCAy
ODg1YjUxMDE3Y2MxYWUzZDg5MmVmM2M1ZjI3YTRiMTIzNzUzODQyLi4wNmIyMTc1MTJjNmZiYzJk
ODUyNzI0YWFhNzZmYTU3OTRlM2RhZDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTk3LDYgKzE5Nyw4IEBA
ICQoUFJPSkVDVF9ESVIpL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CiAkKFBST0pFQ1Rf
RElSKS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dl
YkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNt
L2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAorJChQUk9KRUNUX0RJUikv
d2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAorJChQUk9KRUNUX0RJ
Uikvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAKICQoUFJPSkVDVF9E
SVIpL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAKICQoUFJPSkVDVF9E
SVIpL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCiAkKFBST0pFQ1RfRElS
KS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTIxMSw2ICsy
MTMsOCBAQCAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29u
c3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yUHJvdG90eXBlLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
Q29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQ
cm90b3R5cGUuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuY3BwCiskKFBST0pFQ1RfRElSKS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBl
LmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS93YXNtLmpzb24KICQoUFJPSkVDVF9ESVIpL3lhcnIv
Y3JlYXRlX3JlZ2V4X3RhYmxlcwogJChQUk9KRUNUX0RJUikveWFyci9nZW5lcmF0ZVlhcnJDYW5v
bmljYWxpemVVbmljb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggMmFkMjEzMWM1ODY2OWJkMDU3NWM3YWY0
MGE2YzQyN2E1OTRmNWMzZS4uY2IwNWQ4MjE2MmFkOWM0Y2ZmNjRjYTE4Y2FlYWUxODcxYmVjNmY2
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdApAQCAtODIsNiArODIsOCBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2FzbUxMSW50R2VuZXJhdG9ySW5saW5lcy5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2Fz
bU9wcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENv
cmUvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaAogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5Q29tcGls
ZUVycm9yUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaAor
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFz
c2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5s
dXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3Jl
L1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmx1dC5oCkBAIC05Niw2ICs5OCw4IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0CiAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3JQcm90b3R5cGUubHV0LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9X
ZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5sdXQu
aAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dl
YkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCmluZGV4IGVjYmNlNjdmNzhjMDAzNGMxNjZmNTBkNTg5MmE2ZjA4YzVk
YTQwZDYuLjc4OTc1NmYxMGY4YmRiODBjNTJmNGJlOTgwZjUzZjQ5MmEyZDFkNGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yMDMsNiArMjAzLDggQEAg
T0JKRUNUX0xVVF9IRUFERVJTID0gXAogICAgIFRlbXBvcmFsVGltZVpvbmVQcm90b3R5cGUubHV0
LmggXAogICAgIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggXAogICAg
IFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJs
eUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJseUV4Y2VwdGlvblBy
b3RvdHlwZS5sdXQuaCBcCiAgICAgV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5sdXQuaCBc
CiAgICAgV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUubHV0LmggXAogICAgIFdlYkFzc2VtYmx5
SW5zdGFuY2VDb25zdHJ1Y3Rvci5sdXQuaCBcCkBAIC0yMTcsNiArMjE5LDggQEAgT0JKRUNUX0xV
VF9IRUFERVJTID0gXAogICAgIFdlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmx1dC5o
IFwKICAgICBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0LmggXAogICAgIFdlYkFzc2Vt
Ymx5VGFibGVQcm90b3R5cGUubHV0LmggXAorICAgIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3Iu
bHV0LmggXAorICAgIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oIFwKICMKIAogJChPQkpF
Q1RfTFVUX0hFQURFUlMpOiAlLmx1dC5oIDogJS5jcHAgJChKYXZhU2NyaXB0Q29yZSkvY3JlYXRl
X2hhc2hfdGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGMzNTU0NTBkMjRm
NjlhOGM5MThmYmQzOTA1YjQyYmNiOTUwNzkzOC4uODg4OWIxMGZmMjI3YWMxNzQ5MTVjMWFkNTcx
ZWMzMzNhN2ExY2E0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY2Myw3ICs2
NjMsNyBAQAogCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovOyB9OwogCQkwRkVDODU0MjFCREFDREFDMDA4
MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLzsg
fTsKIAkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmggKi87IH07Ci0JCTBGRUM4NTQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlUmVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oICovOyB9OworCQkwRkVDODU0
NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVSZXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xv
cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3Jpbmcu
aCAqLzsgfTsKIAkJMEZFQzg1NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckFyZy5oICovOyB9OwogCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyog
QWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLzsgfTsK
QEAgLTc5Niw2ICs3OTYsNyBAQAogCQkxNDc4Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxl
VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NkZBNUE4MTM3OEY2QjAwMDM2MjdBMyAvKiBIYW5kbGVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVB
NCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3QjgzQUEwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNo
ZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5
U2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
Qjg0NjIwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0ODUyMUQ4MjZFQUVCRkUwMEND
MUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlcklu
Zm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NDg2QThDMDI0QUJFRDQ4MDA3MzkyMkQgLyogSlNMb2NrUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NkE4QkYyNEFCRUQzQzAwNzM5
MjJEIC8qIEpTTG9ja1JlZlByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NzRBRTIx
NUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDhBN0JGMDFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5l
Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDhBN0JFRTFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2FsbEZyYW1lLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNyw2ICs4MjgsMTMg
QEAKIAkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0E5NThB
MTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDQTk1OEQxNkFCNTBGQTAw
OTM4QTA2IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNEQwMUE3NzIxRkIzNTFGMDBCQzU0RTkgLyogSlNTY3JpcHRTb3Vy
Y2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTREMDFBNzYyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCAq
LzsgfTsKKwkJMTREMDFCRTYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
RDAxQkRBMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi87
IH07CisJCTE0RDAxQkU3MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFC
REIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggKi87IH07CisJ
CTE0RDAxQkU5MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFC
REQyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggKi87
IH07CisJCTE0RDAxQkVDMjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJFMDI2REVF
RjM3MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5oICovOyB9OworCQkxNEQwMUJFRDI2REVF
RjM4MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCRTEyNkRFRUYzODAwQ0FFMEQwIC8q
IEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLzsgfTsKKwkJMTREMDFCRUYyNkRFRUYzODAwQ0FF
MEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkUzMjZERUVGMzgwMENBRTBEMCAv
KiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi87IH07CisJCTE0RDAxQkY1MjZE
RUVGNTMwMENBRTBEMCAvKiBXYXNtVGFnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICov
OyB9OwogCQkxNEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDJGM0Q5MTM5RjRCRTIw
MDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9w
ZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNERGMDREOTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RTg0
RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTg0RjlBMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFr
QmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTI2NCw3ICsxMjcyLDcgQEAKIAkJODYyODFFRjAyNUI2MTYwMDAwMzY3MDA0IC8qIENoZWNr
UHJpdmF0ZUJyYW5kVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODYyODFFRUYyNUI2MTYwMDAwMzY3MDA0IC8qIENoZWNrUHJpdmF0ZUJyYW5k
VmFyaWFudC5oICovOyB9OwogCQk4NjI4MUVGNDI1QjYxQUYwMDAzNjcwMDQgLyogQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2MjgxRUYzMjVCNjFBRjAwMDM2NzAwNCAvKiBDaGVja1ByaXZhdGVCcmFuZFN0YXR1
cy5oICovOyB9OwogCQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NjNCMjNERjBGQzYwRTYyMDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJODYzRkJDNUEyNUIw
OTNCOTAwRjZDOTMwIC8qIFdhc21WYWx1ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjNGQkM1ODI1QjA5M0I5MDBGNkM5MzAgLyogV2Fz
bVZhbHVlTG9jYXRpb24uaCAqLzsgfTsKKwkJODYzRkJDNUEyNUIwOTNCOTAwRjZDOTMwIC8qIFdh
c21WYWx1ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NjNGQkM1ODI1QjA5M0I5MDBGNkM5MzAgLyogV2FzbVZhbHVlTG9jYXRpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjVBMzBG
MTEzNTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5RSAv
KiBKU0NKU1ZhbHVlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTg2NURBMEM1MjVCODk1NzQwMDg3NTc3MiAvKiBTZXRQcml2YXRlQnJh
bmRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NjVEQTBDNDI1Qjg5NTc0MDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oICov
OyB9OwogCQk4NjVEQTBDODI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjVEQTBD
NzI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmggKi87IH07CkBAIC0x
OTM3LDcgKzE5NDUsNyBAQAogCQlFM0JGQTVEMDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJl
ZEdsb2JhbFByb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFM0JGQTVDRDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJlZEdsb2JhbFByb3Bl
cnR5LmggKi87IH07CiAJCUUzQkZEMEJDMURBRjgwOEUwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25p
cHBldFBhcmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTNCRkQwQkExREFGODA3QzAwNjVERUEyIC8qIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmgg
Ki87IH07CiAJCUUzQzI5NUREMUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5n
ZUFkYXB0aXZlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTNDMjk1REMxRUQyQ0JBQTAwRDMwMTZGIC8qIE9iamVjdFByb3BlcnR5Q2hh
bmdlQWRhcHRpdmVXYXRjaHBvaW50LmggKi87IH07Ci0JCUUzQzY5NEIzMjMwMjY4NzcwMDZGQkU0
MiAvKiBXYXNtT1NSRW50cnlEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFM0M2OTRCMTIzMDI2ODczMDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5RGF0
YS5oICovOyB9OworCQlFM0M2OTRCMzIzMDI2ODc3MDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5RGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNDNjk0
QjEyMzAyNjg3MzAwNkZCRTQyIC8qIFdhc21PU1JFbnRyeURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFM0M3M0E5MTI1QkZBNzNCMDBFRkUz
MDMgLyogV2FzbVN0cmVhbWluZ1BsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzQzczQTkwMjVCRkE3MzQwMEVGRTMwMyAvKiBXYXNtU3RyZWFtaW5n
UGxhbi5oICovOyB9OwogCQlFM0M3OUNBQjFEQjlBNERDMDBEMUVDQTQgLyogRE9NSklURWZmZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0M3OUNB
QTFEQjlBNEQ2MDBEMUVDQTQgLyogRE9NSklURWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTNDOEVENDMyM0ExREJDQjAwMTMxOTU4IC8q
IElzb0lubGluZWRIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzQzhFRDQyMjNBMURCQzUwMDEzMTk1OCAvKiBJc29JbmxpbmVkSGVh
cENlbGxUeXBlLmggKi87IH07CkBAIC0zNDYxLDYgKzM0NjksOCBAQAogCQkxNDgyQjc4QTBBNDMw
NUFCMDA1MTdDRkMgLyogQVBJQ2FzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBUElDYXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODJCN0UxMEE0MzA3
NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU09iamVjdFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDgyQjdF
MjBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNPYmplY3RSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNDg1MjFENTI2RUFFQkRGMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21IYW5kbGVySW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUhhbmRsZXJJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODZBOEJFMjRBQkVEM0IwMDczOTIyRCAvKiBK
U0xvY2tSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNMb2NrUmVmLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4NkE4QkYyNEFCRUQzQzAwNzM5MjJEIC8qIEpTTG9ja1Jl
ZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNMb2NrUmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Njb3BlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1NDQsNiArMzU1NCwyMCBAQAogCQkxNENDM0JB
MjIxMzhBMjM4MDAyRDU4QjYgLyogSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5zdHJ1Y3Rpb25TdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTREMDFBNzUyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJv
dmlkZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQwMUE3NjIxRkIzNTAzMDBCQzU0RTkg
LyogSlNTY3JpcHRTb3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdFNvdXJj
ZVByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRBMjZERUVG
MzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaDsgcGF0aCA9IGpz
L1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTREMDFCREIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFnUHJvdG90eXBl
Lmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxNEQwMUJEQzI2REVFRjM3MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJERDI2REVFRjM3MDBDQUUwRDAg
LyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaDsgcGF0aCA9IGpzL1dl
YkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTE0RDAxQkRFMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5VGFn
Q29uc3RydWN0b3IuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkRGMjZERUVGMzcwMENBRTBEMCAv
KiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHA7IHBhdGggPSBqcy9XZWJBc3Nl
bWJseVRhZ1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAx
QkUwMjZERUVGMzcwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlUYWcuaDsgcGF0aCA9IGpzL0pTV2ViQXNz
ZW1ibHlUYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRTEyNkRFRUYz
ODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJF
MjI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJFMzI2REVFRjM4MDBDQUUwRDAg
LyogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmg7IHBhdGggPSBq
cy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0RDAxQkU0MjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlUYWcu
Y3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseVRhZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0RDAxQkU1MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlv
bkNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlF
eGNlcHRpb25Db25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0
RDAxQkYyMjZERUVGNTIwMENBRTBEMCAvKiBXYXNtVGFnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UYWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNEQwMUJGMzI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRTcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUgLyogQ0xvb3BTdGFjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTG9vcFN0YWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0RDg1Nzc0MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gdGVzdGFwaS5qczsgcGF0aCA9
IEFQSS90ZXN0cy90ZXN0YXBpLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE1
NSw2ICs3MTc5LDggQEAKIAkJCQkxNDg3Q0UxNjIzNzc0MTAwMDA0NDQyOUMgLyogV2FzbUdlbmVy
YXRvclRyYWl0cy5oICovLAogCQkJCUUzODM1MDA4MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNtR2xv
YmFsLmNwcCAqLywKIAkJCQlFMzgzNTAwOTIzOTBEOTM3MDAzNjMxNkQgLyogV2FzbUdsb2JhbC5o
ICovLAorCQkJCTE0ODUyMUQ1MjZFQUVCREYwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uY3Bw
ICovLAorCQkJCTE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCAq
LywKIAkJCQlBRDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmNwcCAq
LywKIAkJCQlBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi8s
CiAJCQkJQUQ1QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8sCkBA
IC03MjEyLDYgKzcyMzgsOCBAQAogCQkJCUUzQzczQTkwMjVCRkE3MzQwMEVGRTMwMyAvKiBXYXNt
U3RyZWFtaW5nUGxhbi5oICovLAogCQkJCUFENUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUu
aCAqLywKKwkJCQkxNEQwMUJGMjI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5jcHAgKi8sCisJ
CQkJMTREMDFCRjMyNkRFRUY1MjAwQ0FFMEQwIC8qIFdhc21UYWcuaCAqLywKIAkJCQk1MjUwRDJD
RjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCiAJCQkJNTI1MEQyRDAxRThE
QTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLywKIAkJCQlFM0M2OTRCMjIzMDI2ODc0MDA2
RkJFNDIgLyogV2FzbVRpZXJVcENvdW50LmNwcCAqLywKQEAgLTkwOTcsNiArOTEyNSw4IEBACiAJ
CQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAq
LywKIAkJCQlBRDJGQ0JBNjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvci5jcHAgKi8sCiAJCQkJQUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3IuaCAqLywKKwkJCQkxNEQwMUJEQzI2REVFRjM3MDBDQUUwRDAgLyogSlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHAgKi8sCisJCQkJMTREMDFCRTEyNkRFRUYzODAwQ0FFMEQw
IC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCAqLywKIAkJCQlFM0JGM0M0QzIzOTBEMUUzMDA4
QkM3NTIgLyogSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAgKi8sCiAJCQkJRTNCRjNDNEIyMzkwRDFF
MjAwOEJDNzUyIC8qIEpTV2ViQXNzZW1ibHlHbG9iYWwuaCAqLywKIAkJCQk3OTZGQjQzOTFERkY4
QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCAqLywKQEAgLTkxMTIsMTIgKzkx
NDIsMTggQEAKIAkJCQlBRDJGQ0JBRDFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvci5oICovLAogCQkJCUFEMkZDQkFFMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5VGFibGUuY3BwICovLAogCQkJCUFEMkZDQkFGMURCNThEQTQwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5VGFibGUuaCAqLywKKwkJCQkxNEQwMUJFNDI2REVFRjM4MDBDQUUwRDAgLyogSlNX
ZWJBc3NlbWJseVRhZy5jcHAgKi8sCisJCQkJMTREMDFCRTAyNkRFRUYzNzAwQ0FFMEQwIC8qIEpT
V2ViQXNzZW1ibHlUYWcuaCAqLywKIAkJCQlBREQwOUFFRjFGNUY2MjNGMDAxMzEzQzIgLyogV2Fz
bVRvSlMuY3BwICovLAogCQkJCUFERDA5QUVFMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5o
ICovLAogCQkJCUFEMkZDQkIwMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVF
cnJvckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBRDJGQ0JCMTFEQjU4REE0MDBCM0U3MzYgLyog
V2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUFEMkZDQkIyMURC
NThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAgKi8s
CiAJCQkJQUQyRkNCQjMxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9y
UHJvdG90eXBlLmggKi8sCisJCQkJMTREMDFCRTUyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2Vt
Ymx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTE0RDAxQkUzMjZERUVGMzgwMENB
RTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggKi8sCisJCQkJMTREMDFC
RTIyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcCAq
LywKKwkJCQkxNEQwMUJERDI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUuaCAqLywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb24uaCAqLywKIAkJCQk1MjEzMjI0MzFFQ0JDRTgyMDBGNjU2MTUgLyogV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwICovLApAQCAtOTE1Miw2ICs5MTg4LDEwIEBACiAJCQkJ
QUQyRkNCQzExREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5o
ICovLAogCQkJCUFEMkZDQkMyMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmNwcCAqLywKIAkJCQlBRDJGQ0JDMzFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZS5oICovLAorCQkJCTE0RDAxQkRFMjZERUVGMzcwMENBRTBEMCAvKiBX
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQkxNEQwMUJEQTI2REVFRjM3MDBD
QUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oICovLAorCQkJCTE0RDAxQkRGMjZE
RUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAgKi8sCisJCQkJMTRE
MDFCREIyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmggKi8sCiAJ
CQkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmNwcCAqLywKIAkJCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLywKIAkJCSk7CkBAIC0xMDQwMiw2ICsxMDQ0Miw3IEBACiAJCQkJQUQ1
QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFMzFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRUQyNkRFRUYzODAw
Q0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUz
QkYzQzREMjM5MEQxRTgwMDhCQzc1MiAvKiBKU1dlYkFzc2VtYmx5R2xvYmFsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBl
cnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTA0MTAsNiArMTA0NTEsNyBA
QAogCQkJCUFEMkZDQzA1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5TW9kdWxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFOTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRUIxREI1OERBRDAw
QjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFC
RUMyNkRFRUYzODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlUYWcuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDgzNyw2ICsxMDg3OSw3IEBACiAJCQkJMTQ1MEZBMUMy
MzU3QkRCRTAwOTNDRDREIC8qIFdhc21GdW5jdGlvbkNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTM4MzUwMEEyMzkwRDkzQjAwMzYzMTZEIC8qIFdhc21HbG9iYWwu
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0ODUyMUQ4MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFu
ZGxlckluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAv
KiBXYXNtSW5kZXhPck5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkUyMUY2OTlFQzAw
MDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMDA2NTlFMUVD
QUM4MTIwMDBDQTkyNiAvKiBXYXNtTGltaXRzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwODY3LDYg
KzEwOTEwLDcgQEAKIAkJCQlFM0EwNTMxQTIxMzQyQjY4MDAyMkVDMTQgLyogV2FzbVN0cmVhbWlu
Z1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDNzNBOTEyNUJGQTczQjAwRUZFMzAzIC8q
IFdhc21TdHJlYW1pbmdQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkx
MDAwQkNBQUYgLyogV2FzbVRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJGNTI2REVF
RjUzMDBDQUUwRDAgLyogV2FzbVRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIxRThE
QTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRTlFMEFG
MUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDg5OCw2ICsxMDk0Miw4IEBACiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDJGQ0JFRjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzE3MURCNTlDQjIwMEIzRTczNiAvKiBX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTE0RDAxQkVGMjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJFOTI2REVFRjM4MDBDQUUwRDAgLyogV2Vi
QXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENDkzN0Q0
MURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MjEzMjI0NjFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUzQkYzQzUzMjM5MEQyMDUwMDhCQzc1MiAvKiBXZWJBc3Nl
bWJseUdsb2JhbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEwOTI1LDYgKzEwOTcx
LDggQEAKIAkJCQlBRDJGQ0MyMDFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRkYxREI1OERBRDAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
MkZDQzIxMURCNTlDQjIwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRTYyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RDAxQkU3MjZERUVGMzgw
MENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ3QTBFMTZGNUNEMDBCMzQ0NjAgLyogV2ViS2l0QXZh
aWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBNjFCRDU5OTMxMDBGNDU3NUMg
Lyogd2tidWlsdGlucy5weSBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CmluZGV4IGE4NTk3M2U3ZWRjZTFiODM3MTFlMDI5MTk3MmEzMWE0NDZhZjg1MTAuLmYwNDQ1MWQw
MzhkYjMwYzc1MWY0NmE5YTRkNzQ4NjNjYjZiMmQ4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKQEAgLTEwNzksNiArMTA3OSw3IEBAIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5j
cHAKIHdhc20vV2FzbUZvcm1hdC5jcHAKIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmNwcAog
d2FzbS9XYXNtR2xvYmFsLmNwcAord2FzbS9XYXNtSGFuZGxlckluZm8uY3BwCiB3YXNtL1dhc21J
bmRleE9yTmFtZS5jcHAKIHdhc20vV2FzbUluc3RhbmNlLmNwcAogd2FzbS9XYXNtSW5zdGFuY2Uu
aApAQCAtMTEwNSw2ICsxMTA2LDcgQEAgd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuY3BwCiB3
YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCiB3YXNtL1dhc21TdHJlYW1pbmdQbGFuLmNwcAog
d2FzbS9XYXNtVGFibGUuY3BwCit3YXNtL1dhc21UYWcuY3BwCiB3YXNtL1dhc21UaHVua3MuY3Bw
CiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHAKIHdhc20vV2FzbVZhbHVlTG9jYXRpb24uY3BwCkBA
IC0xMTE2LDYgKzExMTgsNyBAQCB3YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuY3BwCiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHkuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwCit3YXNtL2pzL0pTV2ViQXNzZW1i
bHlFeGNlcHRpb24uY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUxpbmtFcnJv
ci5jcHAKQEAgLTExMjMsMTAgKzExMjYsMTMgQEAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5
LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCit3YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWcuY3BwCiB3YXNtL2pzL1dhc21Ub0pTLmNwcAogd2FzbS9qcy9X
YXNtVG9KUy5oCiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3Bw
CiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAord2FzbS9qcy9X
ZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAord2FzbS9qcy9XZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvdHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKIHdh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5R2xv
YmFsQ29uc3RydWN0b3IuY3BwCkBAIC0xMTQ0LDYgKzExNTAsOCBAQCB3YXNtL2pzL1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yUHJvdG90eXBlLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3Iu
Y3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCit3YXNtL2pzL1dlYkFz
c2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwCit3YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBl
LmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKIAogeWFyci9SZWd1
bGFyRXhwcmVzc2lvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCmluZGV4IDhjYzU1MTU2YjU3YWJjZTQ5Y2VhYjk4MmMzMTQ3YTk4ODlkMTRm
NTYuLmJlMmU4YzgxMWQ2ZGRkMGMxODRiYTVlZDRkOTU3OTM2ZmQyMjU4YTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtMTgzOSw0ICsx
ODM5LDM2IEBAIG9wIDphdG9taWNfZmVuY2UsCiAgICAgYXJnczogewogICAgIH0KIAorb3AgOnRo
cm93LAorICAgIGFyZ3M6IHsKKyAgICAgICAgZXhjZXB0aW9uSW5kZXg6IHVuc2lnbmVkLAorICAg
ICAgICBmaXJzdFZhbHVlOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgfQorCitvcCA6cmV0aHJvdywK
KyAgICBhcmdzOiB7CisgICAgICAgIGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0K
Kworb3BfZ3JvdXAgOkNhdGNoLAorICAgIFsKKyAgICAgICAgOmNhdGNoLAorICAgICAgICA6Y2F0
Y2hfbm9fdGxzLAorICAgIF0sCisgICAgYXJnczogeworICAgICAgICBleGNlcHRpb25JbmRleDog
dW5zaWduZWQsCisgICAgICAgIGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBh
cmd1bWVudENvdW50OiB1bnNpZ25lZCwKKyAgICAgICAgc3RhcnRPZmZzZXQ6IHVuc2lnbmVkLAor
ICAgIH0KKworb3BfZ3JvdXAgOkNhdGNoQWxsLAorICAgIFsKKyAgICAgICAgOmNhdGNoX2FsbCwK
KyAgICAgICAgOmNhdGNoX2FsbF9ub190bHMsCisgICAgXSwKKyAgICBhcmdzOiB7CisgICAgICAg
IGV4Y2VwdGlvbjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0KKwogZW5kX3NlY3Rpb24gOldhc20K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKaW5kZXggMDFk
ZGNmOTY5OWI0ODAyOWExYmQ4YmVlNDAzNDkwNDc5YTFmOWQ3Zi4uNjZkZjA5OTlmMjFiMjc0ZTA5
OTliYjVhMzg1MjM0ZDE0NTE1Yzk4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0hhbmRsZXJJbmZvLmgKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWVudW0gY2xhc3MgSGFuZGxlclR5cGUgeworZW51bSBjbGFzcyBIYW5kbGVyVHlwZSA6IHVpbnQ4
X3QgewogICAgIENhdGNoID0gMCwKICAgICBGaW5hbGx5ID0gMSwKICAgICBTeW50aGVzaXplZENh
dGNoID0gMiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgK
aW5kZXggNjgwZTk0MDFkYzYxZmY2M2RjYjVkNWU2ZjlkZWJlYzQwNjg4YjQ0OS4uNTFmMWQwMmUx
ODI1NThjOWMyOTEyZDg0MGM1ODgxMDQ4Y2E4MDFkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cyA9IEpTT3Bjb2RlVHJhaXRzPgogICAgIGNvbnN0IGNo
YXIqIG5hbWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFRyYWl0czo6b3Bjb2RlTmFt
ZXNbb3Bjb2RlSUQoKV07CisgICAgICAgIHJldHVybiBUcmFpdHM6Om9wY29kZU5hbWVzW29wY29k
ZUlEPFRyYWl0cz4oKV07CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzID0g
SlNPcGNvZGVUcmFpdHM+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCmluZGV4IDYzZmY0ZWVjZTYyNmI1ZDhkZmRlYzBjNzIzYTFjZDc0ODg3MWJj
NWEuLjllZGY1OWI5Njg2YTVhZDZjZWE4MzgzZjc0MzMzMzYwYTE5YzZkNDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC0xMzAsNyAr
MTMwLDggQEAgdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0
KCkgY29uc3QKIAogQnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgoKSBjb25z
dAogewotICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOworICAgIGlmIChjYWxsZWUoKS5p
c1dhc20oKSkKKyAgICAgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCk7
CiAgICAgaWYgKCFjb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoMCk7
CiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgKaW5kZXggMWNhYjIyNWJjZTAzOGQ4ZmU1ZTFjNDU4OTAzZmYzOWQ5NTZm
ZmY0YS4uZDg2NGEyNjhjZDdjYjUwNWE0MTMzZTM3MGNjMzM5ZDk1ODQyOWE0YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApAQCAtNDQsNiArNDQs
MTEgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIGNsYXNzIENhbGxTaXRlSW5kZXggewogICAgIHB1
YmxpYzoKICAgICAgICAgQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsKKworICAgICAgICBDYWxs
U2l0ZUluZGV4KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgICAgIDog
bV9iaXRzKGRlbGV0ZWRWYWx1ZSgpLmJpdHMoKSkKKyAgICAgICAgeworICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKICAgICAgICAgICAgIDogbV9iaXRzKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpCkBA
IC01NywxMyArNjIsMjUgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2JpdHM7IH0KICAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2JpdHMg
PT0gb3RoZXIubV9iaXRzOyB9CiAKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0
dXJuIGludEhhc2gobV9iaXRzKTsgfQorICAgICAgICBzdGF0aWMgQ2FsbFNpdGVJbmRleCBkZWxl
dGVkVmFsdWUoKSB7IHJldHVybiBmcm9tQml0cyhzX2ludmFsaWRJbmRleCAtIDEpOyB9CisgICAg
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9
PSBkZWxldGVkVmFsdWUoKTsgfQorCiAgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJl
dHVybiBtX2JpdHM7IH0KICAgICAgICAgc3RhdGljIENhbGxTaXRlSW5kZXggZnJvbUJpdHModWlu
dDMyX3QgYml0cykgeyByZXR1cm4gQ2FsbFNpdGVJbmRleChiaXRzKTsgfQogCiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgo
Yml0cygpKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgQnl0
ZWNvZGVJbmRleCgpLm9mZnNldCgpIH07CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMy
X3Qgc19pbnZhbGlkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7
CisKKyAgICAgICAgdWludDMyX3QgbV9iaXRzIHsgc19pbnZhbGlkSW5kZXggfTsKKyAgICB9Owor
CisgICAgc3RydWN0IENhbGxTaXRlSW5kZXhIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgQ2FsbFNpdGVJbmRleCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENhbGxTaXRlSW5kZXgmIGEsIGNvbnN0IENh
bGxTaXRlSW5kZXgmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogICAgIH07CiAK
ICAgICBjbGFzcyBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4
IHsKQEAgLTMzMiwzICszNDksMTUgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0Zyb21KU0Nv
ZGUodm9pZCogcmV0dXJuQWRkcmVzcyk7CiAKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVz
cGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkNhbGxTaXRlSW5kZXg+IDogSlNDOjpD
YWxsU2l0ZUluZGV4SGFzaCB7IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNo
VHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkNhbGxTaXRlSW5kZXg+
IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6Q2FsbFNpdGVJbmRleD4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCmluZGV4IDkxMjZlZjU1OWYzNTMxMjUyZWI0ZGQ1MjllZGI0N2QzY2VmYWJh
M2MuLjljYWM0MGE2NjEyYzMxNmE4ZWFmMWFhNjJiODlmNDFhNTZmYjRiZDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtNTIs
NiArNTIsNyBAQAogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJK
U01vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAi
TGl0ZXJhbFBhcnNlci5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKQEAg
LTUxMiwxNSArNTEzLDYzIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbm90aWZ5RGVidWdn
ZXJPZlVud2luZGluZyhWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgfQogfQogCitD
YXRjaEluZm86OkNhdGNoSW5mbyhjb25zdCBIYW5kbGVySW5mbyogaGFuZGxlciwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit7CisgICAgbV92YWxpZCA9ICEhaGFuZGxlcjsKKyAgICBpZiAobV92YWxp
ZCkgeworICAgICAgICBtX3R5cGUgPSBoYW5kbGVyLT50eXBlKCk7CisjaWYgRU5BQkxFKEpJVCkK
KyAgICAgICAgbV9uYXRpdmVDb2RlID0gaGFuZGxlci0+bmF0aXZlQ29kZTsKKyNlbmRpZgorCisg
ICAgICAgIC8vIGhhbmRsZXItPnRhcmdldCBpcyBtZWFuaW5nbGVzcyBmb3IgZ2V0dGluZyBhIGNv
ZGUgb2Zmc2V0IHdoZW4gY2F0Y2hpbmcKKyAgICAgICAgLy8gdGhlIGV4Y2VwdGlvbiBpbiBhIERG
Ry9GVEwgZnJhbWUuIFRoaXMgYnl0ZWNvZGUgdGFyZ2V0IG9mZnNldCBjb3VsZCBiZQorICAgICAg
ICAvLyBzb21ldGhpbmcgdGhhdCdzIGluIGFuIGlubGluZWQgZnJhbWUsIHdoaWNoIG1lYW5zIGFu
IGFycmF5IGFjY2VzcworICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNvZGUgb2Zmc2V0IGluIHRo
ZSBtYWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKKyAgICAgICAgLy8gYW5kIGNh
biBjYXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhpdHMgdG8gaGFuZGxlci0+
dGFyZ2V0CisgICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCisgICAgICAgIGlmICghSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKKyAgICAgICAgICAg
IG1fY2F0Y2hQQ0ZvckludGVycHJldGVyID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdCho
YW5kbGVyLT50YXJnZXQpLnB0cigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NhdGNo
UENGb3JJbnRlcnByZXRlciA9IG51bGxwdHI7CisgICAgfQorfQorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorQ2F0Y2hJbmZvOjpDYXRjaEluZm8oY29uc3QgV2FzbTo6SGFuZGxlckluZm8qIGhh
bmRsZXIsIGNvbnN0IFdhc206OkNhbGxlZSogY2FsbGVlKQoreworICAgIG1fdmFsaWQgPSAhIWhh
bmRsZXI7CisgICAgaWYgKG1fdmFsaWQpIHsKKyAgICAgICAgbV90eXBlID0gSGFuZGxlclR5cGU6
OkNhdGNoOworICAgICAgICBtX25hdGl2ZUNvZGUgPSBoYW5kbGVyLT5tX25hdGl2ZUNvZGU7Cisg
ICAgICAgIGlmIChjb25zdCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bGVlLT5mdW5jdGlvbkNvZGVCbG9jaygpKQorICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJw
cmV0ZXIgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPm1fdGFyZ2V0KS5w
dHIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXIg
PSBudWxscHRyOworICAgIH0KK30KKyNlbmRpZgorCiBjbGFzcyBVbndpbmRGdW5jdG9yIHsKIHB1
YmxpYzoKLSAgICBVbndpbmRGdW5jdG9yKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBi
b29sIGlzVGVybWluYXRpb24sIENvZGVCbG9jayomIGNvZGVCbG9jaywgSGFuZGxlckluZm8qJiBo
YW5kbGVyKQorICAgIFVud2luZEZ1bmN0b3IoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUs
IGJvb2wgaXNUZXJtaW5hdGlvbiwgSlNWYWx1ZSB0aHJvd25WYWx1ZSwgQ29kZUJsb2NrKiYgY29k
ZUJsb2NrLCBDYXRjaEluZm8mIGhhbmRsZXIpCiAgICAgICAgIDogbV92bSh2bSkKICAgICAgICAg
LCBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCiAgICAgICAgICwgbV9pc1Rlcm1pbmF0aW9uKGlzVGVy
bWluYXRpb24pCiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAgICAsIG1f
aGFuZGxlcihoYW5kbGVyKQogICAgIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAg
IGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7CisgICAgICAgICAgICBpZiAoSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbiogd2FzbUV4Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbio+KG1fdm0sIHRocm93blZhbHVlKSkgeworICAgICAgICAgICAgICAgIG1fY2F0Y2hhYmxl
RnJvbVdhc20gPSB0cnVlOworICAgICAgICAgICAgICAgIG1fd2FzbVRhZyA9ICZ3YXNtRXhjZXB0
aW9uLT50YWcoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoRXJyb3JJbnN0YW5jZSogZXJyb3Ig
PSBqc0R5bmFtaWNDYXN0PEVycm9ySW5zdGFuY2UqPihtX3ZtLCB0aHJvd25WYWx1ZSkpCisgICAg
ICAgICAgICAgICAgbV9jYXRjaGFibGVGcm9tV2FzbSA9IGVycm9yLT5pc0NhdGNoYWJsZUZyb21X
YXNtKCk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTSh0aHJvd25WYWx1
ZSk7CisjZW5kaWYKICAgICB9CiAKICAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigp
KFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKQEAgLTUyOSwxOSArNTc4LDMyIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9jYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKICAgICAgICAg
bV9jb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKIAotICAgICAgICBtX2hhbmRsZXIg
PSBudWxscHRyOworICAgICAgICBtX2hhbmRsZXIubV92YWxpZCA9IGZhbHNlOwogICAgICAgICBp
ZiAobV9jb2RlQmxvY2spIHsKICAgICAgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhhbmRsZXIodmlzaXRvciwg
bV9jb2RlQmxvY2ssIFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1faGFuZGxlcikKKyAgICAgICAgICAgICAgICBtX2hhbmRsZXIgPSB7IGZpbmRFeGNl
cHRpb25IYW5kbGVyKHZpc2l0b3IsIG1fY29kZUJsb2NrLCBSZXF1aXJlZEhhbmRsZXI6OkFueUhh
bmRsZXIpLCBtX2NvZGVCbG9jayB9OworICAgICAgICAgICAgICAgIGlmIChtX2hhbmRsZXIubV92
YWxpZCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgICAg
ICBpZiAodmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRv
KiBqc1RvV2FzbUlDQ2FsbGVlID0ganNEeW5hbWljQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4obV92
bSwgdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkpKQorICAgICAgICBDYWxsZWVCaXRzIGNhbGxl
ZSA9IHZpc2l0b3ItPmNhbGxlZSgpOworICAgICAgICBpZiAoY2FsbGVlLmlzQ2VsbCgpKSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byoganNUb1dhc21JQ0NhbGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNU
b1dhc21JQ0NhbGxlZSo+KG1fdm0sIGNhbGxlZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICAgICAg
bV92bS53YXNtQ29udGV4dC5zdG9yZShqc1RvV2FzbUlDQ2FsbGVlLT5mdW5jdGlvbigpLT5wcmV2
aW91c0luc3RhbmNlKG1fY2FsbEZyYW1lKSwgbV92bS5zb2Z0U3RhY2tMaW1pdCgpKTsKKworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fY2F0Y2hhYmxlRnJvbVdhc20gJiYgY2FsbGVlLmlzV2Fz
bSgpKSB7CisgICAgICAgICAgICBXYXNtOjpDYWxsZWUqIHdhc21DYWxsZWUgPSBjYWxsZWUuYXNX
YXNtQ2FsbGVlKCk7CisgICAgICAgICAgICBpZiAod2FzbUNhbGxlZS0+aGFzRXhjZXB0aW9uSGFu
ZGxlcnMoKSkgeworICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0
YW5jZSA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihtX2NhbGxGcmFtZS0+dGhpc1Zh
bHVlKCkpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9
IG1fY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOworICAgICAgICAgICAgICAgIG1f
aGFuZGxlciA9IHsgd2FzbUNhbGxlZS0+aGFuZGxlckZvckluZGV4KGpzSW5zdGFuY2UtPmluc3Rh
bmNlKCksIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgbV93YXNtVGFnKSwgd2FzbUNhbGxlZSB9Owor
ICAgICAgICAgICAgICAgIGlmIChtX2hhbmRsZXIubV92YWxpZCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
I2VuZGlmCiAKQEAgLTU4OCwxMCArNjUwLDE0IEBAIHByaXZhdGU6CiAgICAgQ2FsbEZyYW1lKiYg
bV9jYWxsRnJhbWU7CiAgICAgYm9vbCBtX2lzVGVybWluYXRpb247CiAgICAgQ29kZUJsb2NrKiYg
bV9jb2RlQmxvY2s7Ci0gICAgSGFuZGxlckluZm8qJiBtX2hhbmRsZXI7CisgICAgQ2F0Y2hJbmZv
JiBtX2hhbmRsZXI7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGNvbnN0IFdhc206OlRh
ZyogbV93YXNtVGFnIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV9jYXRjaGFibGVGcm9tV2FzbSB7
IGZhbHNlIH07CisjZW5kaWYKIH07CiAKLU5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJw
cmV0ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBl
eGNlcHRpb24pCitORVZFUl9JTkxJTkUgQ2F0Y2hJbmZvIEludGVycHJldGVyOjp1bndpbmQoVk0m
IHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIApAQCAtNjA5LDE2ICs2NzUs
MTMgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2
bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGMKICAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNF
RChzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2Vw
dGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KLSAg
ICBIYW5kbGVySW5mbyogaGFuZGxlciA9IG51bGxwdHI7Ci0gICAgVW53aW5kRnVuY3RvciBmdW5j
dG9yKHZtLCBjYWxsRnJhbWUsIHZtLmlzVGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSwg
Y29kZUJsb2NrLCBoYW5kbGVyKTsKKyAgICBDYXRjaEluZm8gY2F0Y2hJbmZvOworICAgIFVud2lu
ZEZ1bmN0b3IgZnVuY3Rvcih2bSwgY2FsbEZyYW1lLCB2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9u
KGV4Y2VwdGlvbiksIGV4Y2VwdGlvblZhbHVlLCBjb2RlQmxvY2ssIGNhdGNoSW5mbyk7CiAgICAg
U3RhY2tWaXNpdG9yOjp2aXNpdDxTdGFja1Zpc2l0b3I6OlRlcm1pbmF0ZUlmVG9wRW50cnlGcmFt
ZUlzRW1wdHk+KGNhbGxGcmFtZSwgdm0sIGZ1bmN0b3IpOwogICAgIGlmICh2bS5oYXNDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKCkpCiAgICAgICAgIHZtLnBvcEFsbENoZWNrcG9pbnRPU1JTaWRlU3Rh
dGVVbnRpbChjYWxsRnJhbWUpOwogCi0gICAgaWYgKCFoYW5kbGVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBoYW5kbGVyOworICAgIHJldHVybiBjYXRjaEluZm87CiB9
CiAKIHZvaWQgSW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3du
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCAwYzNlZmUxMmU1MTA1Mzg4ZjZjZjI4NTExZDll
YTVlNGVhZjMwN2ZjLi40ZDk2ODhlNWFhOGNhMGE0YWQwZjVkOTBmZGZhYzE0MjAzYzU4OWMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApA
QCAtNDMsNiArNDMsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBDYWxsZWU7CitzdHJ1Y3QgSGFuZGxlcklu
Zm87Cit9CisjZW5kaWYKKwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBFdmFsRXhl
Y3V0YWJsZTsKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC01OCw2ICs2NSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTU2NvcGU7CiAgICAgY2xhc3MgU291cmNlQ29k
ZTsKICAgICBjbGFzcyBTdGFja0ZyYW1lOworICAgIGVudW0gY2xhc3MgSGFuZGxlclR5cGUgOiB1
aW50OF90OwogICAgIHN0cnVjdCBDYWxsRnJhbWVDbG9zdXJlOwogICAgIHN0cnVjdCBIYW5kbGVy
SW5mbzsKICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CkBAIC04MSw2ICs4OSwyNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgU3RhY2tGcmFtZU5hdGl2ZUNvZGUKICAgICB9OwogCisgICAgc3Ry
dWN0IENhdGNoSW5mbyB7CisgICAgICAgIENhdGNoSW5mbygpCisgICAgICAgICAgICA6IG1fdmFs
aWQoZmFsc2UpCisgICAgICAgIHsgfQorCisgICAgICAgIENhdGNoSW5mbyhjb25zdCBIYW5kbGVy
SW5mbyosIENvZGVCbG9jayopOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgQ2F0
Y2hJbmZvKGNvbnN0IFdhc206OkhhbmRsZXJJbmZvKiwgY29uc3QgV2FzbTo6Q2FsbGVlKik7Cisj
ZW5kaWYKKworICAgICAgICBib29sIG1fdmFsaWQ7CisgICAgICAgIEhhbmRsZXJUeXBlIG1fdHlw
ZTsKKyNpZiBFTkFCTEUoSklUKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4gbV9uYXRpdmVDb2RlOworI2VuZGlmCisgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBtX2NhdGNoUENGb3JJbnRlcnByZXRlcjsKKyAgICB9OworCiAgICAgY2xhc3Mg
SW50ZXJwcmV0ZXIgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIENhY2hlZENhbGw7CkBAIC0xMTIsNyArMTM4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgdm9pZCBnZXRBcmd1bWVudHNEYXRhKENhbGxGcmFtZSosIEpTRnVuY3Rp
b24qJiwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFyZ3YsIGlu
dCYgYXJnYyk7CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiB1bndpbmQoVk0m
LCBDYWxsRnJhbWUqJiwgRXhjZXB0aW9uKik7CisgICAgICAgIE5FVkVSX0lOTElORSBDYXRjaElu
Zm8gdW53aW5kKFZNJiwgQ2FsbEZyYW1lKiYsIEV4Y2VwdGlvbiopOwogICAgICAgICB2b2lkIG5v
dGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqLCBFeGNlcHRpb24qKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgZGVidWco
Q2FsbEZyYW1lKiwgRGVidWdIb29rVHlwZSk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgc3RhY2tU
cmFjZUFzU3RyaW5nKFZNJiwgY29uc3QgVmVjdG9yPFN0YWNrRnJhbWU+Jik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IDU3
YTFiZGI2ZGJkNWIxNjA2OTFjNjU2NTBmYzBkNDVkYmU4MDllYWIuLmRjNWVjY2UwNWVlMzlmYmJm
ZWJmNWQ5YjJkYmIzYjk1NmZkNjZhNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0xNjYsMjMgKzE2NiwyMCBAQCB2b2lk
IFN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q29kZU9yaWdpbiogY29kZU9yaQogICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSBudWxs
cHRyOwogI2VuZGlmCiAKKyAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKKyAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9ICFtX2ZyYW1lLmNvZGVCbG9j
aygpID8gQnl0ZWNvZGVJbmRleCgwKQorICAgICAgICA6IGNvZGVPcmlnaW4gPyBjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KCkKKyAgICAgICAgOiBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKTsK
KwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoY2FsbEZyYW1lLT5pc0FueVdhc21D
YWxsZWUoKSkgewogICAgICAgICBtX2ZyYW1lLm1faXNXYXNtRnJhbWUgPSB0cnVlOwogICAgICAg
ICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgbV9mcmFtZS5tX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7CiAKICAgICAgICAgaWYgKG1fZnJhbWUubV9jYWxs
ZWUuaXNXYXNtKCkpCiAgICAgICAgICAgICBtX2ZyYW1lLm1fd2FzbUZ1bmN0aW9uSW5kZXhPck5h
bWUgPSBtX2ZyYW1lLm1fY2FsbGVlLmFzV2FzbUNhbGxlZSgpLT5pbmRleE9yTmFtZSgpOwotCi0g
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9ICFt
X2ZyYW1lLmNvZGVCbG9jaygpID8gQnl0ZWNvZGVJbmRleCgwKQotICAgICAgICA6IGNvZGVPcmln
aW4gPyBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkKLSAgICAgICAgOiBjYWxsRnJhbWUtPmJ5
dGVjb2RlSW5kZXgoKTsKLQogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggZWYyZmNiNDJmMzVmZTcy
ZTQ0ZGYzZTAyMjRiMmU5MDhiMjU1ZWU5OC4uYTkxYTlkZDk3YWJlZTg3NDhkMDc2N2MzMjNhZWNh
OGQ0OThlYjRjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcApAQCAtNzA0LDkgKzcwNCw0NyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9y
ZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYQogI2Vu
ZGlmCiAKICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCBzY3JhdGNoKTsKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQo
KSksIHNjcmF0Y2gpOworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwoc2NyYXRjaCwgc2tpcExpc3QpOwogCi0gICAgTG9hZFJlZ1Nwb29s
ZXIgc3Bvb2xlcigqdGhpcywgc2NyYXRjaCk7CisgICAgLy8gUmVzdG9yZSB0aGUgY2FsbGVlIHNh
dmUgdmFsdWUgb2YgdGhlIHNjcmF0Y2guCisgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFs
bENhbGxlZVNhdmVzLT5hdChzY3JhdGNoR1BSRW50cnlJbmRleCk7CisgICAgQVNTRVJUKCFkb250
UmVzdG9yZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKTsKKyAgICBBU1NFUlQoZW50cnkucmVn
KCkuaXNHUFIoKSk7CisgICAgQVNTRVJUKHNjcmF0Y2ggPT0gZW50cnkucmVnKCkuZ3ByKCkpOwor
I2lmIENQVShBUk02NCkKKyAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5MiA9IGFsbENhbGxlZVNh
dmVzLT5hdChzY3JhdGNoR1BSRW50cnlJbmRleCArIDEpOworICAgIEFTU0VSVF9VTlVTRUQoZW50
cnkyLCAhZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5Mi5yZWcoKSkpOworICAgIEFTU0VS
VChlbnRyeTIucmVnKCkuaXNHUFIoKSk7CisgICAgQVNTRVJUKHVudXNlZE5leHRTbG90R1BSID09
IGVudHJ5Mi5yZWcoKS5ncHIoKSk7CisgICAgbG9hZFBhaXI2NChzY3JhdGNoLCBUcnVzdGVkSW1t
MzIoZW50cnkub2Zmc2V0KCkpLCBzY3JhdGNoLCB1bnVzZWROZXh0U2xvdEdQUik7CisjZWxzZQor
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoLCBlbnRyeS5vZmZzZXQoKSksIHNjcmF0Y2gpOwor
I2VuZGlmCisKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOworI2VuZGlm
IC8vIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorfQorCit2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKEdQUlJlZyB2bUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIpCit7CisjaWYgTlVNQkVSX09G
X0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCisgICAgbG9hZFB0cihBZGRyZXNzKHZtR1BSLCBW
TTo6dG9wRW50cnlGcmFtZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgcmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3JhdGNoR1BSLCBS
ZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2
bUdQUik7CisjZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCit9
CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBlbnRyeUZyYW1lR1BSLCBjb25zdCBSZWdp
c3RlclNldCYgc2tpcExpc3QpCit7CisjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RF
UlMgPiAwCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVn
aXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBlbnRyeUZyYW1lR1BSKTsKKworICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdp
c3Rlck9mZnNldHMoKTsKKyAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2
ZXMtPnNpemUoKTsKKworICAgIExvYWRSZWdTcG9vbGVyIHNwb29sZXIoKnRoaXMsIGVudHJ5RnJh
bWVHUFIpOwogCiAgICAgLy8gUmVzdG9yZSBhbGwgY2FsbGVlIHNhdmVzIGV4Y2VwdCBmb3IgdGhl
IHNjcmF0Y2guCiAgICAgdW5zaWduZWQgaSA9IDA7CkBAIC03MjgsMjMgKzc2Niw5IEBAIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKEVudHJ5RnJhCiAgICAgfQogICAgIHNwb29sZXIuZmluYWxpemVGUFIoKTsKIAot
ICAgIC8vIFJlc3RvcmUgdGhlIGNhbGxlZSBzYXZlIHZhbHVlIG9mIHRoZSBzY3JhdGNoLgotICAg
IFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoc2NyYXRjaEdQUkVu
dHJ5SW5kZXgpOwotICAgIEFTU0VSVCghZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJl
ZygpKSk7Ci0gICAgQVNTRVJUKGVudHJ5LnJlZygpLmlzR1BSKCkpOwotICAgIEFTU0VSVChzY3Jh
dGNoID09IGVudHJ5LnJlZygpLmdwcigpKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgUmVnaXN0ZXJB
dE9mZnNldCBlbnRyeTIgPSBhbGxDYWxsZWVTYXZlcy0+YXQoc2NyYXRjaEdQUkVudHJ5SW5kZXgg
KyAxKTsKLSAgICBBU1NFUlRfVU5VU0VEKGVudHJ5MiwgIWRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdl
dChlbnRyeTIucmVnKCkpKTsKLSAgICBBU1NFUlQoZW50cnkyLnJlZygpLmlzR1BSKCkpOwotICAg
IEFTU0VSVCh1bnVzZWROZXh0U2xvdEdQUiA9PSBlbnRyeTIucmVnKCkuZ3ByKCkpOwotICAgIGxv
YWRQYWlyNjQoc2NyYXRjaCwgVHJ1c3RlZEltbTMyKGVudHJ5Lm9mZnNldCgpKSwgc2NyYXRjaCwg
dW51c2VkTmV4dFNsb3RHUFIpOwotI2Vsc2UKLSAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwg
ZW50cnkub2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSNlbmRpZgotCiAjZWxzZQotICAgIFVOVVNFRF9Q
QVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICBVTlVTRURfUEFSQU0odm1HUFIpOworICAgIFVOVVNF
RF9QQVJBTShza2lwTGlzdCk7CiAjZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJ
U1RFUlMgPiAwCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCmluZGV4IDBkMjUzZDk4OGVjMjg3YzhjOTdiNTZkNWE4NzQxNWYxMTYxYjU4Y2IuLjlhNDc5
ZjY3MGI2ZDZlZDkxZDY4OTk4YjlmOTNiZjEwNmRlN2ZhMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtNDEzLDYgKzQxMyw4IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomKTsKKyAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJSZWcgdm1HUFIsIEdQUlJlZyBzY3Jh
dGNoR1BSKTsKKyAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGVudHJ5RnJhbWUsIGNvbnN0IFJlZ2lzdGVyU2V0JiBz
a2lwTGlzdCk7CiAKICAgICB2b2lkIGNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJh
bWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomLCBj
b25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURXhjZXB0aW9ucy5jcHAKaW5kZXggNmQ1ODNhNDg5ZWQ1MzAzMThjZTMwOTZjNjZiMDJlN2Qx
YzU4YTRiYy4uYjg2ZTlhNDEwM2M4NTA2YzNmZGJiYWM1NGQ3ZTk0ZTY2NjBhYWQ5OSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCkBAIC01NCwyMSArNTQs
MTQgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAK
ICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwogICAgIFJFTEVB
U0VfQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSB2bS5pbnRl
cnByZXRlci0+dW53aW5kKHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRoaXMgbWF5IHVw
ZGF0ZSBjYWxsRnJhbWUuCisgICAgQ2F0Y2hJbmZvIGhhbmRsZXIgPSB2bS5pbnRlcnByZXRlci0+
dW53aW5kKHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRoaXMgbWF5IHVwZGF0ZSBjYWxs
RnJhbWUuCiAKICAgICB2b2lkKiBjYXRjaFJvdXRpbmU7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGNhdGNoUENGb3JJbnRlcnByZXRlciA9IG51bGxwdHI7Ci0gICAgaWYgKGhhbmRsZXIpIHsKLSAg
ICAgICAgLy8gaGFuZGxlci0+dGFyZ2V0IGlzIG1lYW5pbmdsZXNzIGZvciBnZXR0aW5nIGEgY29k
ZSBvZmZzZXQgd2hlbiBjYXRjaGluZwotICAgICAgICAvLyB0aGUgZXhjZXB0aW9uIGluIGEgREZH
L0ZUTCBmcmFtZS4gVGhpcyBieXRlY29kZSB0YXJnZXQgb2Zmc2V0IGNvdWxkIGJlCi0gICAgICAg
IC8vIHNvbWV0aGluZyB0aGF0J3MgaW4gYW4gaW5saW5lZCBmcmFtZSwgd2hpY2ggbWVhbnMgYW4g
YXJyYXkgYWNjZXNzCi0gICAgICAgIC8vIHdpdGggdGhpcyBieXRlY29kZSBvZmZzZXQgaW4gdGhl
IG1hY2hpbmUgZnJhbWUgaXMgdXR0ZXJseSBtZWFuaW5nbGVzcwotICAgICAgICAvLyBhbmQgY2Fu
IGNhdXNlIGFuIG92ZXJmbG93LiBPU1IgZXhpdCBwcm9wZXJseSBleGl0cyB0byBoYW5kbGVyLT50
YXJnZXQKLSAgICAgICAgLy8gaW4gdGhlIHByb3BlciBmcmFtZS4KLSAgICAgICAgaWYgKCFKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSkK
LSAgICAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPnRhcmdldCkucHRyKCk7CisgICAgaWYgKGhh
bmRsZXIubV92YWxpZCkgeworICAgICAgICBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBoYW5kbGVy
Lm1fY2F0Y2hQQ0ZvckludGVycHJldGVyOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIGNhdGNo
Um91dGluZSA9IGhhbmRsZXItPm5hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAg
ICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci5tX25hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKICNlbHNlCiAgICAgICAgIGlmIChjYXRjaFBDRm9ySW50ZXJwcmV0ZXItPmlzV2lkZTMyKCkp
CiAgICAgICAgICAgICBjYXRjaFJvdXRpbmUgPSBMTEludDo6Z2V0V2lkZTMyQ29kZVB0cihjYXRj
aFBDRm9ySW50ZXJwcmV0ZXItPm9wY29kZUlEKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDdjYTFiNGU3YzNmZDA4NGRkMjdhYzM4NTA2YWE5YzZh
ZWQ5NWRlYjAuLjk5MjI5ZTQ5OTMxN2MxMmExZjM0Y2JlYWNkYWVjOTAxNTM4MDhhZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKQEAgLTU3LDYgKzU3LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKICAgICAgICAgdm9pZCBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRy
eSk7CiAgICAgICAgIHZvaWQgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CisgICAgICAgIHZvaWQgY29udmVydENhbGxl
ZVRvVk0oUmVnaXN0ZXJJRCBjYWxsZWUpOwogCiAgICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0
dXJuIG1fdm07IH0KIApAQCAtMTU4LDYgKzE1OSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRp
ZgogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6Y29udmVy
dENhbGxlZVRvVk0oUmVnaXN0ZXJJRCBjYWxsZWUpCisgICAgeworICAgICAgICBhdXRvIHByZWNp
c2VBbGxvY2F0aW9uQ2FzZSA9IGJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBj
YWxsZWUsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxm
QWxpZ25tZW50KSk7CisgICAgICAgIGFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
TWFya2VkQmxvY2s6OmJsb2NrTWFzayksIGNhbGxlZSk7CisgICAgICAgIGxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGNhbGxlZSwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFy
a2VkQmxvY2s6OkZvb3Rlcjo6b2Zmc2V0T2ZWTSgpKSwgY2FsbGVlKTsKKyAgICAgICAgYXV0byBs
b2FkZWRDYXNlID0ganVtcCgpOworCisgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5r
KHRoaXMpOworICAgICAgICBsb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWUsIFBy
ZWNpc2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9mVk0o
KSAtIFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBjYWxsZWUpOworCisgICAgICAg
IGxvYWRlZENhc2UubGluayh0aGlzKTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEu
aAppbmRleCA0NzFmYjVkMmZkM2I4MDkzOTZhNTIzY2UzM2ZjYjJhODU5ODM2YWNiLi4zN2MxYWZl
NmRlNzZjODkzNWFjNzQ2ZDYwZmI0OTdkMzFlNmU3Y2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RGF0YS5oCkBAIC0zMjIsNiArMzIyLDI0IEBAIEFMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0V2lkZTMyQ29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bj
b2RlSUQpCiAjZW5kaWYKIH0KIAordGVtcGxhdGU8UHRyVGFnIHRhZz4KK0FMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz4gZ2V0Q29kZVJlZihXYXNtT3Bjb2RlSUQgb3Bjb2Rl
SUQpCit7CisgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+OjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoZ2V0Q29kZVB0cjx0YWc+KG9wY29kZUlEKSk7Cit9CisKK3RlbXBsYXRl
PFB0clRhZyB0YWc+CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+IGdl
dFdpZGUxNkNvZGVSZWYoV2FzbU9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8dGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdldFdpZGUx
NkNvZGVQdHI8dGFnPihvcGNvZGVJRCkpOworfQorCit0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPiBnZXRXaWRlMzJDb2RlUmVmKFdh
c21PcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PHRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnZXRXaWRlMzJDb2RlUHRyPHRhZz4ob3Bj
b2RlSUQpKTsKK30KKwogdGVtcGxhdGU8UHRyVGFnIHRhZz4KIEFMV0FZU19JTkxJTkUgTExJbnRD
b2RlIGdldENvZGVGdW5jdGlvblB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI5MTNl
ZWRhYjBjNDMwZmE3ODQ2MjliZTMwOTEyNDAwZTU2OThjMTQuLjZkODY3ZjI2ZWFhYTJjZThhYjk5
ZWRhZWMwZjBhYTIzNmRjOTJjZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludEV4Y2VwdGlvbnMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTExJbnRD
b21tb24uaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5o
IgorI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCiAKICNpZiBMTElOVF9UUkFDSU5HCiAjaW5jbHVk
ZSAiQ2F0Y2hTY29wZS5oIgpAQCAtNDksNiArNTAsMTggQEAgSW5zdHJ1Y3Rpb24qIHJldHVyblRv
VGhyb3coVk0mIHZtKQogICAgIHJldHVybiBMTEludDo6ZXhjZXB0aW9uSW5zdHJ1Y3Rpb25zKCk7
CiB9CiAKK0luc3RydWN0aW9uKiB3YXNtUmV0dXJuVG9UaHJvdyhWTSYgdm0pCit7CisgICAgVU5V
U0VEX1BBUkFNKHZtKTsKKyNpZiBMTElOVF9UUkFDSU5HCisgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnRyYWNlTExJbnRTbG93UGF0aCgpKSkgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAi
LCBKU1ZhbHVlKHNjb3BlLmV4Y2VwdGlvbigpKSwgIiAocmV0dXJuVG9UaHJvdykuXG4iKTsKKyAg
ICB9CisjZW5kaWYKKyAgICByZXR1cm4gTExJbnQ6Ondhc21FeGNlcHRpb25JbnN0cnVjdGlvbnMo
KTsKK30KKwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGNh
bGxUb1Rocm93KFZNJiB2bSkKIHsKICAgICBVTlVTRURfUEFSQU0odm0pOwpAQCAtOTIsNCArMTA1
LDM2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5k
bGVDYXRjaChPcGNvZGVTaXplIHNpemUpCiAgICAgcmV0dXJuIHt9OwogfQogCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IGhhbmRsZVdhc21DYXRjaChPcGNvZGVTaXplIHNpemUpCit7CisgICAgV2FzbU9wY29kZUlE
IG9wY29kZSA9IFdhc206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21fY2F0Y2ggOiB3YXNt
X2NhdGNoX25vX3RsczsKKyAgICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIE9wY29kZVNpemU6
Ok5hcnJvdzoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+KG9wY29kZSk7CisgICAgY2FzZSBPcGNvZGVTaXplOjpXaWRlMTY6CisgICAgICAg
IHJldHVybiBMTEludDo6Z2V0V2lkZTE2Q29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihv
cGNvZGUpOworICAgIGNhc2UgT3Bjb2RlU2l6ZTo6V2lkZTMyOgorICAgICAgICByZXR1cm4gTExJ
bnQ6OmdldFdpZGUzMkNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4ob3Bjb2RlKTsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9Owor
fQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFuZGxl
V2FzbUNhdGNoQWxsKE9wY29kZVNpemUgc2l6ZSkKK3sKKyAgICBXYXNtT3Bjb2RlSUQgb3Bjb2Rl
ID0gV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpID8gd2FzbV9jYXRjaF9hbGwgOiB3YXNtX2Nh
dGNoX2FsbF9ub190bHM7CisgICAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSBPcGNvZGVTaXpl
OjpOYXJyb3c6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPihvcGNvZGUpOworICAgIGNhc2UgT3Bjb2RlU2l6ZTo6V2lkZTE2OgorICAgICAg
ICByZXR1cm4gTExJbnQ6OmdldFdpZGUxNkNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4o
b3Bjb2RlKTsKKyAgICBjYXNlIE9wY29kZVNpemU6OldpZGUzMjoKKyAgICAgICAgcmV0dXJuIExM
SW50OjpnZXRXaWRlMzJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KG9wY29kZSk7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpMTEludApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhj
ZXB0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5o
CmluZGV4IDgwNmIxOWY2NjA1ODY2Yjg4Y2U4NDk1ODdhMDQxYWRlNGYzNmQ2MjkuLmU1ZjkwMjFm
YWRiOGVmY2IyNTg3YzBjYTYwMTc2ZWJmMWRjYmFjNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmgKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNwYWNl
IExMSW50IHsKIC8vIGJldHdlZW4gMSBhbmQgOSBzbG90cyB3aWxsIGdpdmUgeW91IGFuICJpbnN0
cnVjdGlvbiIgdGhhdCB0aHJlYWRzIHRvIHRoZQogLy8gaW50ZXJwcmV0ZXIncyBleGNlcHRpb24g
aGFuZGxlci4KIEluc3RydWN0aW9uKiByZXR1cm5Ub1Rocm93KFZNJik7CitJbnN0cnVjdGlvbiog
d2FzbVJldHVyblRvVGhyb3coVk0mKTsKIAogLy8gVXNlIHRoaXMgd2hlbiB5b3UncmUgdGhyb3dp
bmcgdG8gYSBjYWxsIHRodW5rLgogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+IGNhbGxUb1Rocm93KFZNJik7CkBAIC00OSw0ICs1MCw5IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBjYWxsVG9UaHJvdyhWTSYpOwogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGhhbmRsZVVuY2F1Z2h0
RXhjZXB0aW9uKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4gaGFuZGxlQ2F0Y2goT3Bjb2RlU2l6ZSk7CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFuZGxlV2Fz
bUNhdGNoKE9wY29kZVNpemUpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+IGhhbmRsZVdhc21DYXRjaEFsbChPcGNvZGVTaXplKTsKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcApp
bmRleCA2ZGY0Njg1MGUyYzdlYjk2ODk4ZWM0YzU3ZmNiNzdkZDg3NWQyZDUwLi5iMmNhYTE4NTQx
MzBmZjhiOTMxODA3NmQyN2RmZWJkZDIxMzM4NDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcApAQCAtNTMsNiArNTMs
NyBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkpT
U3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0
YS5oIgogI2luY2x1ZGUgIkxMSW50T2ZmbGluZUFzbUNvbmZpZy5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5hc20KaW5kZXggNDM2Y2Y2NjQ5MGQ3MWM1ZWU5YmIz
MGU4NmZlNmY0MmJhZWU3NmRmMS4uZmU5ODljODNhMTEwYjFjODM4NzQzZjk3MzJjOWEyYmNlNWFm
ZDU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5
LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCkBA
IC0yNTYsNiArMjU2LDcgQEAgbWFjcm8gdGhyb3dFeGNlcHRpb24oZXhjZXB0aW9uKQogZW5kCiAK
IG1hY3JvIGNhbGxXYXNtU2xvd1BhdGgoc2xvd1BhdGgpCisgICAgc3RvcmVpIFBDLCBBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdCiAgICAgcHJlcGFyZVN0YXRlRm9y
Q0NhbGwoKQogICAgIG1vdmUgY2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCkBAIC0yNzQsNiArMjc1
LDE0IEBAIG1hY3JvIGNhbGxXYXNtQ2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCiAgICAg
YWN0aW9uKHIwLCByMSkKIGVuZAogCittYWNybyByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxs
KCkKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgd3MxCisgICAgbG9hZGkgV2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2s6Om1fbnVtQ2FsbGVlTG9jYWxzW3dzMV0sIHdzMQorICAgIGxzaGlmdHAgMywg
d3MxCisgICAgYWRkcCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCwgd3MxCisgICAgc3Vi
cCBjZnIsIHdzMSwgc3AKK2VuZAorCiBtYWNybyB3YXNtUHJvbG9ndWUoY29kZUJsb2NrR2V0dGVy
LCBjb2RlQmxvY2tTZXR0ZXIsIGxvYWRXYXNtSW5zdGFuY2UpCiAgICAgIyBTZXQgdXAgdGhlIGNh
bGwgZnJhbWUgYW5kIGNoZWNrIGlmIHdlIHNob3VsZCBPU1IuCiAgICAgcHJlc2VydmVDYWxsZXJQ
Q0FuZENGUigpCkBAIC0yODEsNiArMjkwLDkgQEAgbWFjcm8gd2FzbVByb2xvZ3VlKGNvZGVCbG9j
a0dldHRlciwgY29kZUJsb2NrU2V0dGVyLCBsb2FkV2FzbUluc3RhbmNlKQogICAgIGxvYWRXYXNt
SW5zdGFuY2UoKQogICAgIHJlbG9hZE1lbW9yeVJlZ2lzdGVyc0Zyb21JbnN0YW5jZSh3YXNtSW5z
dGFuY2UsIHdzMCwgd3MxKQogCisgICAgbG9hZHAgV2FzbTo6SW5zdGFuY2U6Om1fb3duZXJbd2Fz
bUluc3RhbmNlXSwgd3MwCisgICAgc3RvcmVwIHdzMCwgVGhpc0FyZ3VtZW50T2Zmc2V0W2Nmcl0K
KwogICAgIGNvZGVCbG9ja0dldHRlcih3czApCiAgICAgY29kZUJsb2NrU2V0dGVyKHdzMCkKIApA
QCAtMzMzLDE1ICszNDUsMTkgQEAgbWFjcm8gdHJhY2VFeGVjdXRpb24oKQogICAgIGVuZAogZW5k
CiAKLSMgTGVzcyBjb252ZW5pZW50LCBidXQgcmVxdWlyZWQgZm9yIG9wY29kZXMgdGhhdCBjb2xs
aWRlIHdpdGggcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb25zIChlLmcuIHdhc21fbm9wKQotbWFjcm8gdW5w
cmVmaXhlZFdhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGZuKQotICAgIGNvbW1vbk9w
KG9wY29kZU5hbWUsIHRyYWNlRXhlY3V0aW9uLCBtYWNybyhzaXplKQorbWFjcm8gY29tbW9uV2Fz
bU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgcHJvbG9ndWUsIGZuKQorICAgIGNvbW1vbk9w
KG9wY29kZU5hbWUsIHByb2xvZ3VlLCBtYWNybyhzaXplKQogICAgICAgICBmbihtYWNybyhmbjIp
CiAgICAgICAgICAgICBmbjIob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBzaXplKQogICAgICAg
ICBlbmQpCiAgICAgZW5kKQogZW5kCiAKKyMgTGVzcyBjb252ZW5pZW50LCBidXQgcmVxdWlyZWQg
Zm9yIG9wY29kZXMgdGhhdCBjb2xsaWRlIHdpdGggcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb25zIChlLmcu
IHdhc21fbm9wKQorbWFjcm8gdW5wcmVmaXhlZFdhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1
Y3QsIGZuKQorICAgIGNvbW1vbldhc21PcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHRyYWNl
RXhlY3V0aW9uLCBmbikKK2VuZAorCiBtYWNybyB3YXNtT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3Ry
dWN0LCBmbikKICAgICB1bnByZWZpeGVkV2FzbU9wKHdhc21fJW9wY29kZU5hbWUlLCBvcGNvZGVT
dHJ1Y3QsIGZuKQogZW5kCkBAIC01MTIsNiArNTI4LDE2IEBAIG9wKHdhc21fZnVuY3Rpb25fcHJv
bG9ndWVfbm9fdGxzLCBtYWNybyAoKQogICAgIHdhc21OZXh0SW5zdHJ1Y3Rpb24oKQogZW5kKQog
CittYWNybyBqdW1wVG9FeGNlcHRpb24oKQorICAgIGlmIEFSTTY0RQorICAgICAgICBtb3ZlIHIw
LCBhMAorICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlND
Q29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6ZXhjZXB0aW9uSGFuZGxlcikgKiBQdHJT
aXplLCBhMQorICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgRXhjZXB0
aW9uSGFuZGxlclB0clRhZworICAgIGVsc2UKKyAgICAgICAgam1wIHIwLCBFeGNlcHRpb25IYW5k
bGVyUHRyVGFnCisgICAgZW5kCitlbmQKKwogb3Aod2FzbV90aHJvd19mcm9tX3Nsb3dfcGF0aF90
cmFtcG9saW5lLCBtYWNybyAoKQogICAgIGxvYWRwIFdhc206Okluc3RhbmNlOjptX3BvaW50ZXJU
b1RvcEVudHJ5RnJhbWVbd2FzbUluc3RhbmNlXSwgdDUKICAgICBsb2FkcCBbdDVdLCB0NQpAQCAt
NTIzLDE0ICs1NDksNyBAQCBvcCh3YXNtX3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUs
IG1hY3JvICgpCiAgICAgIyBTbG93IHBhdGhzIGFuZCB0aGUgdGhyb3dFeGNlcHRpb24gbWFjcm8g
c3RvcmUgdGhlIGV4Y2VwdGlvbiBjb2RlIGluIHRoZSBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyBzbG90CiAgICAgbG9hZGkgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBQYXlsb2FkT2Zm
c2V0W2Nmcl0sIGEzCiAgICAgY0NhbGw0KF9zbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24p
Ci0KLSAgICBpZiBBUk02NEUKLSAgICAgICAgbW92ZSByMCwgYTAKLSAgICAgICAgbGVhcCBKU0ND
b25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3Rl
eHByIEdhdGU6OmV4Y2VwdGlvbkhhbmRsZXIpICogUHRyU2l6ZSwgYTEKLSAgICAgICAgam1wIFth
MV0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLSAgICBl
bHNlCi0gICAgICAgIGptcCByMCwgRXhjZXB0aW9uSGFuZGxlclB0clRhZwotICAgIGVuZAorICAg
IGp1bXBUb0V4Y2VwdGlvbigpCiBlbmQpCiAKIG1hY3JvIHdhc21fdGhyb3dfZnJvbV9mYXVsdF9o
YW5kbGVyKGluc3RhbmNlKQpAQCAtNTQzLDE0ICs1NjIsNyBAQCBtYWNybyB3YXNtX3Rocm93X2Zy
b21fZmF1bHRfaGFuZGxlcihpbnN0YW5jZSkKICAgICBtb3ZlIDAsIGExCiAgICAgbW92ZSBjZnIs
IGEwCiAgICAgY0NhbGw0KF9zbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24pCi0KLSAgICBp
ZiBBUk02NEUKLSAgICAgICAgbW92ZSByMCwgYTAKLSAgICAgICAgbGVhcCBKU0NDb25maWcgKyBj
b25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6
OmV4Y2VwdGlvbkhhbmRsZXIpICogUHRyU2l6ZSwgYTEKLSAgICAgICAgam1wIFthMV0sIE5hdGl2
ZVRvSklUR2F0ZVB0clRhZyAjIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLSAgICBlbHNlCi0gICAg
ICAgIGptcCByMCwgRXhjZXB0aW9uSGFuZGxlclB0clRhZwotICAgIGVuZAorICAgIGp1bXBUb0V4
Y2VwdGlvbigpCiBlbmQKIAogb3Aod2FzbV90aHJvd19mcm9tX2ZhdWx0X2hhbmRsZXJfdHJhbXBv
bGluZV9mYXN0VExTLCBtYWNybyAoKQpAQCAtNzcwLDExICs3ODIsMTEgQEAgbWFjcm8gc2xvd1Bh
dGhGb3JXYXNtQ2FsbChjdHgsIHNsb3dQYXRoLCBzdG9yZVdhc21JbnN0YW5jZSkKIAogICAgICAg
ICAgICAgIyBMb2FkIHJlZ2lzdGVycyBmcm9tIHN0YWNrCiAgICAgICAgICAgICBmb3JFYWNoQXJn
dW1lbnRHUFIobWFjcm8gKG9mZnNldCwgZ3ByKQotICAgICAgICAgICAgICAgIGxvYWRxIENhbGxG
cmFtZUhlYWRlclNpemUgKyBvZmZzZXRbc3AsIHdzMSwgOF0sIGdwcgorICAgICAgICAgICAgICAg
IGxvYWRxIENhbGxGcmFtZUhlYWRlclNpemUgKyA4ICsgb2Zmc2V0W3NwLCB3czEsIDhdLCBncHIK
ICAgICAgICAgICAgIGVuZCkKIAogICAgICAgICAgICAgZm9yRWFjaEFyZ3VtZW50RlBSKG1hY3Jv
IChvZmZzZXQsIGZwcikKLSAgICAgICAgICAgICAgICBsb2FkZCBDYWxsRnJhbWVIZWFkZXJTaXpl
ICsgb2Zmc2V0W3NwLCB3czEsIDhdLCBmcHIKKyAgICAgICAgICAgICAgICBsb2FkZCBDYWxsRnJh
bWVIZWFkZXJTaXplICsgOCArIG9mZnNldFtzcCwgd3MxLCA4XSwgZnByCiAgICAgICAgICAgICBl
bmQpCiAKICAgICAgICAgICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCkBAIC04MTEs
MTEgKzgyMyw3IEBAIG1hY3JvIHNsb3dQYXRoRm9yV2FzbUNhbGwoY3R4LCBzbG93UGF0aCwgc3Rv
cmVXYXNtSW5zdGFuY2UpCiAgICAgICAgICAgICAgICAgZGVmaW5lUmV0dXJuTGFiZWwob3Bjb2Rl
TmFtZSwgc2l6ZSkKICAgICAgICAgICAgIGVuZCkKIAotICAgICAgICAgICAgbG9hZHAgQ29kZUJs
b2NrW2Nmcl0sIHdzMQotICAgICAgICAgICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6
Om1fbnVtQ2FsbGVlTG9jYWxzW3dzMV0sIHdzMQotICAgICAgICAgICAgbHNoaWZ0cCAzLCB3czEK
LSAgICAgICAgICAgIGFkZHAgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwsIHdzMQotICAg
ICAgICAgICAgc3VicCBjZnIsIHdzMSwgc3AKKyAgICAgICAgICAgIHJlc3RvcmVTdGFja1BvaW50
ZXJBZnRlckNhbGwoKQogCiAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gc2V0IFBDIHRvIGxvYWQg
aW5mb3JtYXRpb24gZnJvbSB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLCBidXQgd2UKICAgICAgICAg
ICAgICMgbmVlZCB0byBwcmVzZXJ2ZSBpdHMgY3VycmVudCB2YWx1ZSBzaW5jZSBpdCBtaWdodCBj
b250YWluIGEgcmV0dXJuIHZhbHVlCkBAIC04MzYsMTEgKzg0NCwxMSBAQCBtYWNybyBzbG93UGF0
aEZvcldhc21DYWxsKGN0eCwgc2xvd1BhdGgsIHN0b3JlV2FzbUluc3RhbmNlKQogICAgICAgICAg
ICAgd2dldHUoY3R4LCBtX251bWJlck9mU3RhY2tBcmdzLCB3czApCiAgICAgICAgICAgICBtb3Zl
IG1lbW9yeUJhc2UsIFBDCiAgICAgICAgICAgICBmb3JFYWNoQXJndW1lbnRHUFIobWFjcm8gKG9m
ZnNldCwgZ3ByKQotICAgICAgICAgICAgICAgIHN0b3JlcSBncHIsIENhbGxGcmFtZUhlYWRlclNp
emUgKyBvZmZzZXRbd3MxLCB3czAsIDhdCisgICAgICAgICAgICAgICAgc3RvcmVxIGdwciwgQ2Fs
bEZyYW1lSGVhZGVyU2l6ZSArIDggKyBvZmZzZXRbd3MxLCB3czAsIDhdCiAgICAgICAgICAgICBl
bmQpCiAKICAgICAgICAgICAgIGZvckVhY2hBcmd1bWVudEZQUihtYWNybyAob2Zmc2V0LCBmcHIp
Ci0gICAgICAgICAgICAgICAgc3RvcmVkIGZwciwgQ2FsbEZyYW1lSGVhZGVyU2l6ZSArIG9mZnNl
dFt3czEsIHdzMCwgOF0KKyAgICAgICAgICAgICAgICBzdG9yZWQgZnByLCBDYWxsRnJhbWVIZWFk
ZXJTaXplICsgOCArIG9mZnNldFt3czEsIHdzMCwgOF0KICAgICAgICAgICAgIGVuZCkKIAogICAg
ICAgICAgICAgbG9hZGkgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2Zy
XSwgUEMKQEAgLTI4MDQsMyArMjgxMiwxMTQgQEAgd2FzbU9wKGF0b21pY19mZW5jZSwgV2FzbURy
b3BLZWVwLCBtYWNybyhjdHgpCiAgICAgZmVuY2UKICAgICBkaXNwYXRjaChjdHgpCiBlbmQpCisK
K3dhc21PcCh0aHJvdywgV2FzbVRocm93LCBtYWNybyhjdHgpCisgICAgbG9hZHAgV2FzbTo6SW5z
dGFuY2U6Om1fcG9pbnRlclRvVG9wRW50cnlGcmFtZVt3YXNtSW5zdGFuY2VdLCB0NQorICAgIGxv
YWRwIFt0NV0sIHQ1CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodDUpCisKKyAgICBjYWxsV2FzbVNsb3dQYXRoKF9zbG93X3BhdGhfd2FzbV90aHJvdykK
KyAgICBqdW1wVG9FeGNlcHRpb24oKQorZW5kKQorCit3YXNtT3AocmV0aHJvdywgV2FzbVJldGhy
b3csIG1hY3JvKGN0eCkKKyAgICBjYWxsV2FzbVNsb3dQYXRoKF9zbG93X3BhdGhfd2FzbV9yZXRo
cm93KQorICAgIGp1bXBUb0V4Y2VwdGlvbigpCitlbmQpCisKK21hY3JvIGNhdGNoSW1wbChjdHgs
IHN0b3JlV2FzbUluc3RhbmNlKQorICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MworICAgIGNvbnZl
cnRDYWxsZWVUb1ZNKHQzKQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih0MywgdDApCisKKyAgICBsb2FkcCBWTTo6Y2FsbGVlRm9yV2FzbUNh
dGNoW3QzXSwgd3MxCisgICAgc3RvcmVwIDAsIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hbdDNdCisg
ICAgc3RvcmVwIHdzMSwgQ2FsbGVlW2Nmcl0KKworICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JD
YXRjaFt0M10sIGNmcgorICAgIHN0b3JlcCAwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hbdDNdCisK
KyAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKKworICAgIGxvYWRwIFRoaXNBcmd1
bWVudE9mZnNldFtjZnJdLCB3YXNtSW5zdGFuY2UKKyAgICBsb2FkcCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6Om1faW5zdGFuY2Vbd2FzbUluc3RhbmNlXSwgd2FzbUluc3RhbmNlCisgICAgc3RvcmVX
YXNtSW5zdGFuY2Uod2FzbUluc3RhbmNlKQorICAgIHJlbG9hZE1lbW9yeVJlZ2lzdGVyc0Zyb21J
bnN0YW5jZSh3YXNtSW5zdGFuY2UsIHdzMCwgd3MxKQorCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nm
cl0sIFBCCisgICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcltQQl0sIFBCCisgICAgbG9hZHAgVk06OnRhcmdldEludGVycHJldGVyUENGb3JU
aHJvd1t0M10sIFBDCisgICAgc3VicCBQQiwgUEMKKworICAgIGNhbGxXYXNtU2xvd1BhdGgoX3Ns
b3dfcGF0aF93YXNtX3JldHJpZXZlX2FuZF9jbGVhcl9leGNlcHRpb24pCisgICAgbW92ZSByMSwg
dDEKKworICAgIHdnZXR1KGN0eCwgbV9zdGFydE9mZnNldCwgdDIpCisgICAgd2dldHUoY3R4LCBt
X2FyZ3VtZW50Q291bnQsIHQzKQorCisgICAgbHNoaWZ0aSAzLCB0MgorICAgIHN1YnAgY2ZyLCB0
MiwgdDIKKworLmNvcHlMb29wOgorICAgIGJ0aXogdDMsIC5kb25lCisgICAgbG9hZHEgW3QxXSwg
dDYKKyAgICBzdG9yZXEgdDYsIFt0Ml0KKyAgICBzdWJpIDEsIHQzCisgICAgIyBGSVhNRTogVXNl
IGFybSBzdG9yZS1hZGQvc3ViIGluc3RydWN0aW9ucyBpbiB3YXNtIExMSW50IGNhdGNoCisgICAg
IyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjEwCisgICAgc3Vi
cCA4LCB0MgorICAgIGFkZHAgOCwgdDEKKyAgICBqbXAgLmNvcHlMb29wCisKKy5kb25lOgorICAg
IHRyYWNlRXhlY3V0aW9uKCkKKworICAgIGRpc3BhdGNoKGN0eCkKK2VuZAorCitjb21tb25XYXNt
T3Aod2FzbV9jYXRjaCwgV2FzbUNhdGNoLCBtYWNybygpIGVuZCwgbWFjcm8oY3R4KQorICAgIGNh
dGNoSW1wbChjdHgsIHN0b3JlV2FzbUluc3RhbmNlVG9UTFMpCitlbmQpCisKK2NvbW1vbldhc21P
cCh3YXNtX2NhdGNoX25vX3RscywgV2FzbUNhdGNoLCBtYWNybygpIGVuZCwgbWFjcm8oY3R4KQor
ICAgIGNhdGNoSW1wbChjdHgsIG1hY3JvKGluc3RhbmNlKSBlbmQpCitlbmQpCisKK21hY3JvIGNh
dGNoQWxsSW1wbChjdHgsIHN0b3JlV2FzbUluc3RhbmNlKQorICAgIGxvYWRwIENhbGxlZVtjZnJd
LCB0MworICAgIGNvbnZlcnRDYWxsZWVUb1ZNKHQzKQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0MywgdDApCisKKyAgICBsb2FkcCBWTTo6
Y2FsbGVlRm9yV2FzbUNhdGNoW3QzXSwgd3MxCisgICAgc3RvcmVwIDAsIFZNOjpjYWxsZWVGb3JX
YXNtQ2F0Y2hbdDNdCisgICAgc3RvcmVwIHdzMSwgQ2FsbGVlW2Nmcl0KKworICAgIGxvYWRwIFZN
OjpjYWxsRnJhbWVGb3JDYXRjaFt0M10sIGNmcgorICAgIHN0b3JlcCAwLCBWTTo6Y2FsbEZyYW1l
Rm9yQ2F0Y2hbdDNdCisKKyAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKKworICAg
IGxvYWRwIFRoaXNBcmd1bWVudE9mZnNldFtjZnJdLCB3YXNtSW5zdGFuY2UKKyAgICBsb2FkcCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1faW5zdGFuY2Vbd2FzbUluc3RhbmNlXSwgd2FzbUluc3Rh
bmNlCisgICAgc3RvcmVXYXNtSW5zdGFuY2Uod2FzbUluc3RhbmNlKQorICAgIHJlbG9hZE1lbW9y
eVJlZ2lzdGVyc0Zyb21JbnN0YW5jZSh3YXNtSW5zdGFuY2UsIHdzMCwgd3MxKQorCisgICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6
Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCisgICAgbG9hZHAgVk06OnRhcmdldElu
dGVycHJldGVyUENGb3JUaHJvd1t0M10sIFBDCisgICAgc3VicCBQQiwgUEMKKworICAgIGNhbGxX
YXNtU2xvd1BhdGgoX3Nsb3dfcGF0aF93YXNtX3JldHJpZXZlX2FuZF9jbGVhcl9leGNlcHRpb24p
CisKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisKKyAgICBkaXNwYXRjaChjdHgpCitlbmQKKworY29t
bW9uV2FzbU9wKHdhc21fY2F0Y2hfYWxsLCBXYXNtQ2F0Y2hBbGwsIG1hY3JvKCkgZW5kLCBtYWNy
byhjdHgpCisgICAgY2F0Y2hBbGxJbXBsKGN0eCwgc3RvcmVXYXNtSW5zdGFuY2VUb1RMUykKK2Vu
ZCkKKworY29tbW9uV2FzbU9wKHdhc21fY2F0Y2hfYWxsX25vX3RscywgV2FzbUNhdGNoQWxsLCBt
YWNybygpIGVuZCwgbWFjcm8oY3R4KQorICAgIGNhdGNoQWxsSW1wbChjdHgsIG1hY3JvKGluc3Rh
bmNlKSBlbmQpCitlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvckluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
SW5zdGFuY2UuY3BwCmluZGV4IGRmYjkzMTg4YzA4ZmQ4ZGJhZDNiZjdmODVlMTg1MmI1MjQwNmI1
ZDYuLmI2Y2E1YmM0MjM2YjlkNTY1ZjU4Yzg2YTk3MGNhMzc2NTU5MDk1MDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCkBAIC00MCw2ICs0
MCw5IEBAIEVycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgRXJyb3JUeXBlIGVycm9yVHlwZSkKICAgICAsIG1fb3V0T2ZNZW1vcnlFcnJvcihm
YWxzZSkKICAgICAsIG1fZXJyb3JJbmZvTWF0ZXJpYWxpemVkKGZhbHNlKQogICAgICwgbV9uYXRp
dmVHZXR0ZXJUeXBlRXJyb3IoZmFsc2UpCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICwg
bV9jYXRjaGFibGVGcm9tV2FzbSh0cnVlKQorI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
IHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJ
bnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5o
CmluZGV4IDdkMmU2NDMyNmE4MWRiNmM3NzBhNDYzZDhmOTYzNzY3M2RmYjI5M2IuLmVmZjVlOTg3
MjRiOTA2MjFiMTgyMjAyOWEwOTUwNmI5Yzc5OWUxZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgKQEAgLTgwLDYgKzgwLDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldE5hdGl2ZUdldHRlclR5cGVFcnJvcigpIHsgbV9uYXRpdmVHZXR0ZXJUeXBl
RXJyb3IgPSB0cnVlOyB9CiAgICAgYm9vbCBpc05hdGl2ZUdldHRlclR5cGVFcnJvcigpIGNvbnN0
IHsgcmV0dXJuIG1fbmF0aXZlR2V0dGVyVHlwZUVycm9yOyB9CiAKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgdm9pZCBzZXRDYXRjaGFibGVGcm9tV2FzbShib29sIGZsYWcpIHsgbV9jYXRj
aGFibGVGcm9tV2FzbSA9IGZsYWc7IH0KKyAgICBib29sIGlzQ2F0Y2hhYmxlRnJvbVdhc20oKSBj
b25zdCB7IHJldHVybiBtX2NhdGNoYWJsZUZyb21XYXNtOyB9CisjZW5kaWYKKwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIFN0cmluZyBzYW5pdGl6ZWRUb1N0cmluZyhKU0dsb2JhbE9iamVjdCopOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzYW5pdGl6ZWRNZXNzYWdlU3RyaW5nKEpTR2xv
YmFsT2JqZWN0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNhbml0aXplZE5hbWVT
dHJpbmcoSlNHbG9iYWxPYmplY3QqKTsKQEAgLTExNiw2ICsxMjEsOSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgYm9vbCBtX291dE9mTWVtb3J5RXJyb3IgOiAxOwogICAgIGJvb2wgbV9lcnJvckluZm9NYXRl
cmlhbGl6ZWQgOiAxOwogICAgIGJvb2wgbV9uYXRpdmVHZXR0ZXJUeXBlRXJyb3IgOiAxOworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBib29sIG1fY2F0Y2hhYmxlRnJvbVdhc20gOiAxOwor
I2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyOTdmY2Q2OThmZmJhOTRiNzcy
NmRlNjdkMTliMjQyNTk3MDNhMzJiLi4zMTllNGIzZDhhYjE4MzAwNjBmMjI1NzYxYTE5MmJjY2I4
MDQzN2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCkBAIC0xNTMsNiArMTUzLDcgQEAKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIKICNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5R2xvYmFsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgpAQCAtMTYwLDYgKzE2MSw3IEBA
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNs
dWRlICJMYXp5Q2xhc3NTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGF6eVByb3BlcnR5
SW5saW5lcy5oIgpAQCAtMjIwLDYgKzIyMiw4IEBACiAjaW5jbHVkZSAiV2Vha1NldFByb3RvdHlw
ZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNp
bmNsdWRlICJXZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlHbG9iYWxQcm90b3R5cGUuaCIKQEAgLTIzNiw2ICsyNDAsOCBAQAogI2luY2x1ZGUgIldl
YkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlU
YWJsZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5o
IgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJB
c3NlbWJseVRhZ1Byb3RvdHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KICNp
bmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCA5NjFjMjQ3ZTlhNzkyYTFhZmU2YzljOTg5
NDA3NmYxNGY3MDgyZGVhLi4xYmRjYzRkZTc0ZDA5MjRkMzljODRmOTUyNWM1ZTBiM2U2YWY0MTBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
QEAgLTE2OSwxNCArMTY5LDE2IEBAIGNvbnN0ZXhwciBib29sIHR5cGVFeHBvc2VkQnlEZWZhdWx0
ID0gdHJ1ZTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICNkZWZpbmUgRk9SX0VBQ0hfV0VC
QVNTRU1CTFlfQ09OU1RSVUNUT1JfVFlQRShtYWNybykgXAotICAgIG1hY3JvKFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yLCB3ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgd2ViQXNzZW1ibHlDb21waWxl
RXJyb3IsIEVycm9ySW5zdGFuY2UsICAgICAgICAgICAgIENvbXBpbGVFcnJvciwgZXJyb3IsIHR5
cGVFeHBvc2VkQnlEZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlDb21waWxlRXJyb3Is
IHdlYkFzc2VtYmx5Q29tcGlsZUVycm9yLCB3ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgRXJyb3JJ
bnN0YW5jZSwgICAgICAgICAgICAgQ29tcGlsZUVycm9yLCBlcnJvciwgIHR5cGVFeHBvc2VkQnlE
ZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlFeGNlcHRpb24sICAgIHdlYkFzc2VtYmx5
RXhjZXB0aW9uLCAgICB3ZWJBc3NlbWJseUV4Y2VwdGlvbiwgICAgSlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbiwgICAgRXhjZXB0aW9uLCAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCiAg
ICAgbWFjcm8oV2ViQXNzZW1ibHlHbG9iYWwsICAgICAgIHdlYkFzc2VtYmx5R2xvYmFsLCAgICAg
ICB3ZWJBc3NlbWJseUdsb2JhbCwgICAgICAgSlNXZWJBc3NlbWJseUdsb2JhbCwgICAgICAgR2xv
YmFsLCAgICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCiAgICAgbWFjcm8oV2Vi
QXNzZW1ibHlJbnN0YW5jZSwgICAgIHdlYkFzc2VtYmx5SW5zdGFuY2UsICAgICB3ZWJBc3NlbWJs
eUluc3RhbmNlLCAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlLCAgICAgSW5zdGFuY2UsICAgICBv
YmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCi0gICAgbWFjcm8oV2ViQXNzZW1ibHlMaW5r
RXJyb3IsICAgIHdlYkFzc2VtYmx5TGlua0Vycm9yLCAgICB3ZWJBc3NlbWJseUxpbmtFcnJvciwg
ICAgRXJyb3JJbnN0YW5jZSwgICAgICAgICAgICAgTGlua0Vycm9yLCAgICBlcnJvciwgdHlwZUV4
cG9zZWRCeURlZmF1bHQpIFwKKyAgICBtYWNybyhXZWJBc3NlbWJseUxpbmtFcnJvciwgICAgd2Vi
QXNzZW1ibHlMaW5rRXJyb3IsICAgIHdlYkFzc2VtYmx5TGlua0Vycm9yLCAgICBFcnJvckluc3Rh
bmNlLCAgICAgICAgICAgICBMaW5rRXJyb3IsICAgIGVycm9yLCAgdHlwZUV4cG9zZWRCeURlZmF1
bHQpIFwKICAgICBtYWNybyhXZWJBc3NlbWJseU1lbW9yeSwgICAgICAgd2ViQXNzZW1ibHlNZW1v
cnksICAgICAgIHdlYkFzc2VtYmx5TWVtb3J5LCAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5LCAg
ICAgICBNZW1vcnksICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKICAgICBt
YWNybyhXZWJBc3NlbWJseU1vZHVsZSwgICAgICAgd2ViQXNzZW1ibHlNb2R1bGUsICAgICAgIHdl
YkFzc2VtYmx5TW9kdWxlLCAgICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlLCAgICAgICBNb2R1bGUs
ICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKLSAgICBtYWNybyhXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvciwgd2ViQXNzZW1ibHlSdW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVu
dGltZUVycm9yLCBFcnJvckluc3RhbmNlLCAgICAgICAgICAgICBSdW50aW1lRXJyb3IsIGVycm9y
LCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAotICAgIG1hY3JvKFdlYkFzc2VtYmx5VGFibGUsICAg
ICAgICB3ZWJBc3NlbWJseVRhYmxlLCAgICAgICAgd2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIEpT
V2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIFRhYmxlLCAgICAgICAgb2JqZWN0LCB0eXBlRXhwb3Nl
ZEJ5RGVmYXVsdCkKKyAgICBtYWNybyhXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciwgd2ViQXNzZW1i
bHlSdW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVudGltZUVycm9yLCBFcnJvckluc3RhbmNlLCAg
ICAgICAgICAgICBSdW50aW1lRXJyb3IsIGVycm9yLCAgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwK
KyAgICBtYWNybyhXZWJBc3NlbWJseVRhYmxlLCAgICAgICAgd2ViQXNzZW1ibHlUYWJsZSwgICAg
ICAgIHdlYkFzc2VtYmx5VGFibGUsICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUsICAgICAgICBU
YWJsZSwgICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKKyAgICBtYWNybyhX
ZWJBc3NlbWJseVRhZywgICAgICAgICAgd2ViQXNzZW1ibHlUYWcsICAgICAgICAgIHdlYkFzc2Vt
Ymx5VGFnLCAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFnLCAgICAgICAgICBUYWcsICAgICAgICAg
IG9iamVjdCwgdHlwZUV4cG9zZWRCeURlZmF1bHQpIAogI2Vsc2UKICNkZWZpbmUgRk9SX0VBQ0hf
V0VCQVNTRU1CTFlfQ09OU1RSVUNUT1JfVFlQRShtYWNybykKICNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaApp
bmRleCA1NDAxZmYzODMxZDg2NTA3MTU1YjE5MzI0YmUzOTdmZmJkMzNkOTM0Li5lMDc4MzNmNDdh
YmMxYTRiMDkyNDIxNWM1NzU3YmY2ZWJkZTU2NDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKQEAgLTU0Myw2ICs1NDMsNyBAQCBib29sIGNhblVzZVdl
YkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoQm9vbCwgdXNlVGVtcG9yYWwsIGZhbHNlLCBO
b3JtYWwsICJFeHBvc2UgdGhlIFRlbXBvcmFsIG9iamVjdC4iKSBcCiAgICAgdihCb29sLCB1c2VX
ZWJBc3NlbWJseVRocmVhZGluZywgdHJ1ZSwgTm9ybWFsLCAiQWxsb3cgaW5zdHJ1Y3Rpb25zIGZy
b20gdGhlIHdhc20gdGhyZWFkaW5nIHNwZWMuIikgXAogICAgIHYoQm9vbCwgdXNlV2ViQXNzZW1i
bHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNlcywgZmFsc2UsIE5vcm1hbCwgIkFsbG93IGZ1bmN0aW9u
IHR5cGVzIGZyb20gdGhlIHdhc20gdHlwZWQgZnVuY3Rpb24gcmVmZXJlbmNlcyBzcGVjLiIpIFwK
KyAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucywgdHJ1ZSwgTm9ybWFsLCAiQWxs
b3cgdGhlIG5ldyBzZWN0aW9uIGFuZCBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgd2FzbSBleGNlcHRp
b24gaGFuZGxpbmcgc3BlYy4iKSBcCiAKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggOTk2YTA2ZGFhYmE4MmNjZWZiNDNkZjNm
NjVmMTMxZTZmZGU2ZWUwNy4uMzhlOTUxMjliYTlmMDIxMTBhMWM0M2UwNTFjNGFhNjc4YzZmZDBk
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMTI5LDExICsxMjksMTMg
QEAKICNpbmNsdWRlICJKU1dlYWtPYmplY3RSZWYuaCIKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlHbG9iYWwuaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVt
b3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRl
ICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk1pbmlt
dW1SZXNlcnZlZFpvbmVTaXplLmgiCkBAIC0zMzQsNiArMzM2LDcgQEAgVk06OlZNKFZNVHlwZSB2
bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlLCBXVEY6OlJ1bkxvb3AqIHJ1bkxvb3AsIGJvb2wqIHN1
Y2Nlc3MpCiAgICAgLCBpbnRsU2VnbWVudHNIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpj
cmVhdGU8SW50bFNlZ21lbnRzPigpKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAsIHdl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s+KCkpCisgICAgLCB3ZWJBc3NlbWJseUV4Y2VwdGlvbkhlYXBD
ZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uPigp
KQogICAgICwgd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6
OmNyZWF0ZTxXZWJBc3NlbWJseUZ1bmN0aW9uPigpKQogICAgICwgd2ViQXNzZW1ibHlHbG9iYWxI
ZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseUdsb2JhbD4o
KSkKICAgICAsIHdlYkFzc2VtYmx5SW5zdGFuY2VIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBl
OjpjcmVhdGU8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpKQpAQCAtMzQxLDYgKzM0NCw3IEBAIFZN
OjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSwgV1RGOjpSdW5Mb29wKiBydW5M
b29wLCBib29sKiBzdWNjZXNzKQogICAgICwgd2ViQXNzZW1ibHlNb2R1bGVIZWFwQ2VsbFR5cGUo
SXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseU1vZHVsZT4oKSkKICAgICAsIHdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRl
PFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkPigpKQogICAgICwgd2ViQXNzZW1ibHlUYWJsZUhlYXBD
ZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dlYkFzc2VtYmx5VGFibGU+KCkpCisg
ICAgLCB3ZWJBc3NlbWJseVRhZ0hlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxK
U1dlYkFzc2VtYmx5VGFnPigpKQogI2VuZGlmCiAgICAgLCBwcmltaXRpdmVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlKCJQcmltaXRpdmUgR2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5
SGVhcENlbGxUeXBlLmdldCgpLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkgLy8g
SGFzaDoweDNlN2NkNzYyCiAgICAgLCBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiSlNW
YWx1ZSBHaWdhY2FnZSBBdXhpbGlhcnkiLCBoZWFwLCBhdXhpbGlhcnlIZWFwQ2VsbFR5cGUuZ2V0
KCksIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkgLy8gSGFzaDoweDI0MWU5NDYKQEAg
LTE2MjksNiArMTYzMyw3IEBAIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhpbnRsU2VnbWVudHNTcGFjZSwgaW50bFNlZ21lbnRzSGVhcENlbGxUCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGpzVG9X
YXNtSUNDYWxsZWVTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUb1dhc21JQ0NhbGxl
ZSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUNv
ZGVCbG9ja1NwYWNlLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5nZXQoKSwgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jaykgLy8gSGFzaDoweDlhZDk5NWNkCitEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlFeGNlcHRpb25TcGFjZSwgd2ViQXNz
ZW1ibHlFeGNlcHRpb25IZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24p
CiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlGdW5j
dGlvblNwYWNlLCB3ZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmdldCgpLCBXZWJBc3Nl
bWJseUZ1bmN0aW9uKSAvLyBIYXNoOjB4OGI3YzMyZGIKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUdsb2JhbFNwYWNlLCB3ZWJBc3NlbWJseUdsb2Jh
bEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNXZWJBc3NlbWJseUdsb2JhbCkKIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UsIHdlYkFz
c2VtYmx5SW5zdGFuY2VIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkK
QEAgLTE2MzYsNiArMTY0MSw3IEBAIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyh3ZWJBc3NlbWJseU1lbW9yeVNwYWNlLCB3ZWJBc3NlbWJseU1lbW9yCiBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlNb2R1bGVTcGFjZSwgd2Vi
QXNzZW1ibHlNb2R1bGVIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlNb2R1bGUpCiBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmRTcGFjZSwgd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRIZWFwQ2VsbFR5cGUuZ2V0KCksIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKHdlYkFzc2VtYmx5VGFibGVTcGFjZSwgd2ViQXNzZW1ibHlUYWJsZUhlYXBDZWxsVHlw
ZS5nZXQoKSwgSlNXZWJBc3NlbWJseVRhYmxlKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5VGFnU3BhY2UsIHdlYkFzc2VtYmx5VGFnSGVhcENlbGxU
eXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5VGFnKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3BhY2UsIGNlbGxIZWFwQ2Vs
bFR5cGUuZ2V0KCksIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKSAvLyBIYXNoOjB4ZDRhNWZm
MDEKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA3YTU4YjI3OWU2
NzBhODQwM2QxZjM5NDEyMzU3ZDVlNzcxMTNmNTc4Li5hYTg5YjI4YWRlMmYyNWI2Y2M4NDQwZDYx
NGJjOTQ3YWUzYmE0Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTI5LDYg
KzI5LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKKyNpbmNsdWRl
ICJDYWxsZWVCaXRzLmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2lu
Y2x1ZGUgIkNvbXBsZXRlU3Vic3BhY2UuaCIKICNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgi
CkBAIC00NTAsNiArNDUxLDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFw
Q2VsbFR5cGU+IGludGxTZWdtZW50c0hlYXBDZWxsVHlwZTsKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlDb2Rl
QmxvY2tIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4g
d2ViQXNzZW1ibHlFeGNlcHRpb25IZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElz
b0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUdsb2JhbEhlYXBDZWxsVHlw
ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUluc3Rh
bmNlSGVhcENlbGxUeXBlOwpAQCAtNDU3LDYgKzQ1OSw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseU1vZHVsZUhlYXBDZWxsVHlwZTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseU1vZHVsZVJl
Y29yZEhlYXBDZWxsVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiB3
ZWJBc3NlbWJseVRhYmxlSGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFw
Q2VsbFR5cGU+IHdlYkFzc2VtYmx5VGFnSGVhcENlbGxUeXBlOwogI2VuZGlmCiAKICNpZiBFTkFC
TEUoSklUKQpAQCAtNjI2LDYgKzYyOSw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1RvV2FzbUlDQ2Fs
bGVlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3Nl
bWJseUNvZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIod2ViQXNzZW1ibHlFeGNlcHRpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5R2xvYmFsU3BhY2UpCiAgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UpCkBA
IC02MzMsNiArNjM3LDcgQEAgcHVibGljOgogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIod2ViQXNzZW1ibHlNb2R1bGVTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3BhY2UpCiAgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVRhYmxlU3BhY2UpCisgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseVRhZ1NwYWNlKQog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb25TcGFjZSkKICNlbmRpZgogCkBAIC04OTYsNiArOTAxLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWTSwgY2FsbEZyYW1lRm9yQ2F0Y2gpOwogICAg
IH0KIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGNhbGxlZUZvcldhc21DYXRj
aCk7CisgICAgfQorCiAgICAgc3RhdGljIHB0cmRpZmZfdCB0b3BFbnRyeUZyYW1lT2Zmc2V0KCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcEVudHJ5RnJhbWUp
OwpAQCAtOTkwLDYgKzEwMDAsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgdmFyYXJnc0xlbmd0
aDsKICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZVJldHVyblZhbHVlOwogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lRm9yQ2F0Y2g7CisgICAgQ2FsbGVlQml0cyBjYWxsZWVGb3JXYXNtQ2F0Y2g7
CiAgICAgdm9pZCogdGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIHRhcmdldEludGVycHJldGVyUENGb3JUaHJvdzsKICAgICB1aW50MzJfdCBvc3JFeGl0SW5k
ZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5l
cmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9y
LmNwcAppbmRleCBmOWMyOTQ2MDA2MTg3M2QwMDQ0OThhODAwNDQ2NjJjZTIxN2Y2YmU0Li43OTI4
MmI3N2U3ODYxNjFkNWRmMDhhNmRmODFhNDJmZWUxMTgzOWZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTE0Nyw3ICsxNDcs
MTIgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNJZihjb25z
dCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBC
bG9ja1R5cGU6OklmOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzVHJ5KGNvbnN0IENvbnRyb2xE
YXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6
VHJ5OyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2goY29uc3QgQ29udHJvbERhdGEmIGNv
bnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpDYXRjaDsg
fQorICAgICAgICBzdGF0aWMgYm9vbCBpc0FueUNhdGNoKGNvbnN0IENvbnRyb2xEYXRhJiBjb250
cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2g7IH0K
ICAgICAgICAgc3RhdGljIGJvb2wgaXNUb3BMZXZlbChjb25zdCBDb250cm9sRGF0YSYgY29udHJv
bCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsOyB9
CisgICAgICAgIHN0YXRpYyBib29sIGlzTG9vcChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkg
eyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3A7IH0KKyAgICAg
ICAgc3RhdGljIGJvb2wgaXNCbG9jayhjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1
cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkJsb2NrOyB9CiAKICAgICAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIHsKQEAgLTE2NCw2ICsx
NjksMTIgQEAgcHVibGljOgogICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRvcExldmVsOgog
ICAgICAgICAgICAgICAgIG91dC5wcmludCgiVG9wTGV2ZWw6ICIpOwogICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRyeToKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoIlRyeTogIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEJsb2NrVHlwZTo6Q2F0Y2g6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJDYXRj
aDogIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBvdXQucHJpbnQoIkNvbnRpbnVhdGlvbjogIiwgKmNvbnRpbnVhdGlvbiwgIiwgU3BlY2lhbDog
Iik7CiAgICAgICAgICAgICBpZiAoc3BlY2lhbCkKQEAgLTMxNCw2ICszMjUsMTYgQEAgcHVibGlj
OgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERh
dGEmLCBjb25zdCBTdGFjayYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3Np
bmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25J
bmRleCwgY29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3Qm
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFj
aGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xU
eXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhdGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShDb250cm9s
VHlwZSYsIENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUaHJvdyh1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXRocm93KHVuc2lnbmVkLCBD
b250cm9sVHlwZSYpOworCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
UmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRh
JiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29u
dHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsK
QEAgLTI5ODIsNiArMzAwMyw2MCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJl
YWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7
IH07CiB9CiAKKy8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgV2FzbSBleGNlcHRpb25zIGluIHRo
ZSBBaXIgZ2VuZXJhdG9yCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMxMjExCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0
YWNrJiwgQ29udHJvbFR5cGUmLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCwgY29u
c3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUo
dW5zaWduZWQsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoQWxsKFN0YWNr
JiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9Owor
fQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRy
b2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRGVs
ZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIFN0YWNrJikgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIFVOVVNFRF9QQVJBTShleGNlcHRpb25JbmRleCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5
cGUmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKwogYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBTdGFj
ayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ2FsbEluZm9ybWF0aW9u
IHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZv
cigqZGF0YS5zaWduYXR1cmUoKSwgQ2FsbFJvbGU6OkNhbGxlZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggMDgxY2MyYjI1NWVm
ZDk1NTcxYzNlNTkxMWU0Mzc4MGI3OTRjYzNhMC4uNTA3ZTg5MzE0NjNlYThmNjY4OWU5MjJhMGZh
ZDM3OGJmN2M5MDc4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcApAQCAtNDgsNiArNDgsOCBAQAogI2luY2x1ZGUgIkIzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2lu
Y2x1ZGUgIldhc21Db250ZXh0SW5saW5lcy5oIgpAQCAtODMsMTggKzg1LDMzIEBAIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiB9CiAKK2NsYXNzIEIzSVJHZW5lcmF0
b3I7CitzdHJ1Y3QgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7CisgICAgdm9pZCBnZW5lcmF0
ZShDQ2FsbEhlbHBlcnMmLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiwgQjNJ
UkdlbmVyYXRvciopIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX2lu
dmFsaWRDYWxsU2l0ZUluZGV4ID0gIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsKKworICAgIHVuc2lnbmVkIG1fY2FsbFNpdGVJbmRleCB7c19pbnZhbGlkQ2FsbFNpdGVJbmRl
eCB9OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworfTsKKwogY2xhc3MgQjNJUkdlbmVyYXRvciB7
CiBwdWJsaWM6Ci0gICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSBWYWx1ZSo7CisgICAgdXNpbmcg
RXhwcmVzc2lvblR5cGUgPSBWYXJpYWJsZSo7CiAgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3Rv
cjxFeHByZXNzaW9uVHlwZSwgOD47CiAKICAgICBzdHJ1Y3QgQ29udHJvbERhdGEgewotICAgICAg
ICBDb250cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIEJsb2NrU2lnbmF0
dXJlIHNpZ25hdHVyZSwgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwg
QmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIpCisgICAgICAgIENvbnRyb2xEYXRhKFByb2Nl
ZHVyZSYgcHJvYywgT3JpZ2luIG9yaWdpbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBCbG9j
a1R5cGUgdHlwZSwgdW5zaWduZWQgc3RhY2tTaXplLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24s
IEJhc2ljQmxvY2sqIHNwZWNpYWwgPSBudWxscHRyKQogICAgICAgICAgICAgOiBjb250cm9sQmxv
Y2tUeXBlKHR5cGUpCiAgICAgICAgICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKKyAgICAg
ICAgICAgICwgbV9zdGFja1NpemUoc3RhY2tTaXplKQogICAgICAgICAgICAgLCBjb250aW51YXRp
b24oY29udGludWF0aW9uKQogICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwpCiAgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlICE9IEJsb2NrVHlwZTo6VHJ5ICYmIHR5cGUgIT0g
QmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICBpZiAodHlwZSAhPSBCbG9ja1R5cGU6OlRv
cExldmVsKQorICAgICAgICAgICAgICAgIG1fc3RhY2tTaXplIC09IHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOworCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBCbG9ja1R5cGU6Okxvb3ApIHsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5h
ZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJlLT5hcmd1bWVudChpKSksIG9yaWdpbikp
OwpAQCAtMTA0LDEyICsxMjEsMzcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKKyAgICAgICAgQ29udHJvbERhdGEoUHJvY2VkdXJlJiBwcm9jLCBPcmlnaW4gb3JpZ2luLCBC
bG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIEJsb2NrVHlwZSB0eXBlLCB1bnNpZ25lZCBzdGFja1Np
emUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgdW5zaWduZWQgdHJ5U3RhcnQsIHVuc2lnbmVk
IHRyeURlcHRoKQorICAgICAgICAgICAgOiBjb250cm9sQmxvY2tUeXBlKHR5cGUpCisgICAgICAg
ICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKKyAgICAgICAgICAgICwgbV9zdGFja1NpemUo
c3RhY2tTaXplKQorICAgICAgICAgICAgLCBjb250aW51YXRpb24oY29udGludWF0aW9uKQorICAg
ICAgICAgICAgLCBzcGVjaWFsKG51bGxwdHIpCisgICAgICAgICAgICAsIG1fdHJ5U3RhcnQodHJ5
U3RhcnQpCisgICAgICAgICAgICAsIG1fdHJ5RGVwdGgodHJ5RGVwdGgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFVOVVNFRF9QQVJBTShwcm9jKTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShv
cmlnaW4pOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+
cmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICAgICAgICAgIHBoaXMuYXBwZW5kKHByb2MuYWRk
PFZhbHVlPihQaGksIHRvQjNUeXBlKHNpZ25hdHVyZS0+cmV0dXJuVHlwZShpKSksIG9yaWdpbikp
OworICAgICAgICB9CisKICAgICAgICAgQ29udHJvbERhdGEoKQogICAgICAgICB7CiAgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0lmKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9s
KSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWY7IH0KKyAgICAg
ICAgc3RhdGljIGJvb2wgaXNUcnkoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJu
IGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUcnk7IH0KKyAgICAgICAgc3RhdGlj
IGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29u
dHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoOyB9CiAgICAgICAgIHN0YXRpYyBi
b29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRy
b2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbDsgfQorICAgICAgICBzdGF0aWMg
Ym9vbCBpc0xvb3AoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wu
YmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlz
QmxvY2soY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tU
eXBlKCkgPT0gQmxvY2tUeXBlOjpCbG9jazsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNo
KGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udHJvbC5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5cGU6OkNhdGNoKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBjb250cm9sLmNhdGNoS2luZCgpID09
IENhdGNoS2luZDo6Q2F0Y2g7CisgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgewpAQCAtMTI2LDYgKzE2OCwxMiBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6VG9wTGV2ZWw6CiAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCJUb3BMZXZlbDogIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEJsb2NrVHlwZTo6VHJ5OgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVHJ5
OiAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBl
OjpDYXRjaDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkNhdGNoOiAiKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5wcmludCgiQ29u
dGludWF0aW9uOiAiLCAqY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKICAgICAgICAgICAg
IGlmIChzcGVjaWFsKQpAQCAtMTU0LDYgKzIwMiwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBz
cGVjaWFsID0gbnVsbHB0cjsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgY29udmVydFRyeVRv
Q2F0Y2godW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVmFyaWFibGUqIGV4Y2VwdGlvbikK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6
VHJ5KTsKKyAgICAgICAgICAgIGNvbnRyb2xCbG9ja1R5cGUgPSBCbG9ja1R5cGU6OkNhdGNoOwor
ICAgICAgICAgICAgbV9jYXRjaEtpbmQgPSBDYXRjaEtpbmQ6OkNhdGNoOworICAgICAgICAgICAg
bV90cnlFbmQgPSB0cnlFbmRDYWxsU2l0ZUluZGV4OworICAgICAgICAgICAgbV9leGNlcHRpb24g
PSBleGNlcHRpb247CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNvbnZlcnRUcnlUb0NhdGNo
QWxsKHVuc2lnbmVkIHRyeUVuZENhbGxTaXRlSW5kZXgsIFZhcmlhYmxlKiBleGNlcHRpb24pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRy
eSk7CisgICAgICAgICAgICBjb250cm9sQmxvY2tUeXBlID0gQmxvY2tUeXBlOjpDYXRjaDsKKyAg
ICAgICAgICAgIG1fY2F0Y2hLaW5kID0gQ2F0Y2hLaW5kOjpDYXRjaEFsbDsKKyAgICAgICAgICAg
IG1fdHJ5RW5kID0gdHJ5RW5kQ2FsbFNpdGVJbmRleDsKKyAgICAgICAgICAgIG1fZXhjZXB0aW9u
ID0gZXhjZXB0aW9uOworICAgICAgICB9CisKICAgICAgICAgU2lnbmF0dXJlQXJnQ291bnQgYnJh
bmNoVGFyZ2V0QXJpdHkoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoYmxvY2tU
eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQpAQCAtMTY5LDEzICsyMzUsNTMgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpOwogICAgICAgICB9
CiAKKyAgICAgICAgdW5zaWduZWQgdHJ5U3RhcnQoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBjb250cm9s
QmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fdHJ5
U3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0cnlFbmQoKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6
OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeUVuZDsKKyAgICAgICAgfQorCisgICAg
ICAgIHVuc2lnbmVkIHRyeURlcHRoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpUcnkgfHwgY29udHJvbEJsb2NrVHlw
ZSA9PSBCbG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3RyeURlcHRoOwor
ICAgICAgICB9CisKKyAgICAgICAgQ2F0Y2hLaW5kIGNhdGNoS2luZCgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0
Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fY2F0Y2hLaW5kOworICAgICAgICB9CisKKyAgICAg
ICAgVmFyaWFibGUqIGV4Y2VwdGlvbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAg
cmV0dXJuIG1fZXhjZXB0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc3RhY2tT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1NpemU7IH0KKwogICAgIHByaXZhdGU6CisgICAg
ICAgIC8vIEZJWE1FOiBDb21wcmVzcyBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBmaWVsZHMg
dXNpbmcgYW4gdW5pb24KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMTIxMgogICAgICAgICBmcmllbmQgY2xhc3MgQjNJUkdlbmVyYXRvcjsKICAg
ICAgICAgQmxvY2tUeXBlIGNvbnRyb2xCbG9ja1R5cGU7CiAgICAgICAgIEJsb2NrU2lnbmF0dXJl
IG1fc2lnbmF0dXJlOworICAgICAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKICAgICAgICAgQmFz
aWNCbG9jayogY29udGludWF0aW9uOwogICAgICAgICBCYXNpY0Jsb2NrKiBzcGVjaWFsOwotICAg
ICAgICBSZXN1bHRMaXN0IHBoaXM7CisgICAgICAgIFZlY3RvcjxWYWx1ZSo+IHBoaXM7CisgICAg
ICAgIHVuc2lnbmVkIG1fdHJ5U3RhcnQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHJ5RW5kOworICAg
ICAgICB1bnNpZ25lZCBtX3RyeURlcHRoOworICAgICAgICBDYXRjaEtpbmQgbV9jYXRjaEtpbmQ7
CisgICAgICAgIFZhcmlhYmxlKiBtX2V4Y2VwdGlvbjsKICAgICB9OwogCiAgICAgdXNpbmcgQ29u
dHJvbFR5cGUgPSBDb250cm9sRGF0YTsKQEAgLTI3Myw2ICszNzksMTYgQEAgcHVibGljOgogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBj
b25zdCBTdGFjayYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVs
c2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFj
aywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFjaGFibGUo
dW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwg
UmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENh
dGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShDb250cm9sVHlwZSYs
IENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
RGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUaHJvdyh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgU3RhY2smKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9s
VHlwZSYpOworCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJu
KGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhw
cmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERh
dGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKQEAgLTI4
NiwyMCArNDAyLDM2IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJl
JiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbFJlZihjb25zdCBTaWdu
YXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRz
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgp
OwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRJbmRpcmVjdENhbGwo
VmFsdWUqIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlLCBjb25zdCBT
aWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdEluZGlyZWN0Q2FsbChWYWx1
ZSogY2FsbGVlSW5zdGFuY2UsIFZhbHVlKiBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmLCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7CiAgICAgQjM6OlZhbHVl
KiBjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiwgT3JpZ2luLCBjb25zdCBTaWduYXR1
cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBjb25zdCBTY29wZWRMYW1iZGE8dm9p
ZChQYXRjaHBvaW50VmFsdWUqKT4mIHBhdGNocG9pbnRGdW5jdG9yKTsKIAogICAgIHZvaWQgZHVt
cChjb25zdCBDb250cm9sU3RhY2smLCBjb25zdCBTdGFjayogZXhwcmVzc2lvblN0YWNrKTsKICAg
ICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiogcGFyc2VyKSB7
IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2Fscygp
IHsgfQotICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IH0KKyAgICB2b2lkIGRpZFBv
cFZhbHVlRnJvbVN0YWNrKCkgeyAtLW1fc3RhY2tTaXplOyB9CiAKICAgICBWYWx1ZSogY29uc3Rh
bnQoQjM6OlR5cGUsIHVpbnQ2NF90IGJpdHMsIHN0ZDo6b3B0aW9uYWw8T3JpZ2luPiA9IHN0ZDo6
bnVsbG9wdCk7CiAgICAgVmFsdWUqIGZyYW1lUG9pbnRlcigpOworICAgIHZvaWQgaW5zZXJ0RW50
cnlTd2l0Y2goKTsKICAgICB2b2lkIGluc2VydENvbnN0YW50cygpOwogCiAgICAgQjM6OlR5cGUg
dG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUpOwogCisgICAgdm9pZCBhZGRTdGFja01hcCh1
bnNpZ25lZCBjYWxsU2l0ZUluZGV4LCBTdGFja01hcCYmIHN0YWNrbWFwKQorICAgIHsKKyAgICAg
ICAgbV9zdGFja21hcHMuYWRkKENhbGxTaXRlSW5kZXgoY2FsbFNpdGVJbmRleCksIFdURk1vdmUo
c3RhY2ttYXApKTsKKyAgICB9CisKKyAgICBTdGFja01hcHMmJiB0YWtlU3RhY2ttYXBzKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fc3RhY2ttYXBzKTsKKyAgICB9CisKKyAgICBW
ZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4mJiB0YWtlRXhjZXB0aW9uSGFuZGxlcnMoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9leGNlcHRpb25IYW5kbGVycyk7CisgICAgfQor
CiBwcml2YXRlOgogICAgIHZvaWQgZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVycyYsIEV4
Y2VwdGlvblR5cGUpOwogCkBAIC0zMDcsMjggKzQzOSwzMyBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgsIGNvbnN0IFN0YWNrJiBlbmNs
b3NpbmdTdGFjaywgY29uc3QgU3RhY2smIG5ld1N0YWNrKTsKIAogICAgIHZvaWQgZW1pdFdyaXRl
QmFycmllckZvckpTV3JhcHBlcigpOwotICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFBy
ZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWlu
dDMyX3Qgc2l6ZU9mT3ApOworICAgIFZhbHVlKiBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihW
YWx1ZSogcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CiAgICAg
QjM6OktpbmQgbWVtb3J5S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9wKTsKLSAgICBFeHByZXNzaW9u
VHlwZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQz
Ml90IG9mZnNldCk7Ci0gICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7Cisg
ICAgVmFsdWUqIGVtaXRMb2FkT3AoTG9hZE9wVHlwZSwgVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90
IG9mZnNldCk7CisgICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgVmFsdWUqIHBvaW50
ZXIsIFZhbHVlKiwgdWludDMyX3Qgb2Zmc2V0KTsKIAotICAgIEV4cHJlc3Npb25UeXBlIHNhbml0
aXplQXRvbWljUmVzdWx0KEV4dEF0b21pY09wVHlwZSwgVHlwZSwgRXhwcmVzc2lvblR5cGUgcmVz
dWx0KTsKLSAgICBFeHByZXNzaW9uVHlwZSBlbWl0QXRvbWljTG9hZE9wKEV4dEF0b21pY09wVHlw
ZSwgVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KTsKLSAgICB2
b2lkIGVtaXRBdG9taWNTdG9yZU9wKEV4dEF0b21pY09wVHlwZSwgVHlwZSwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7Ci0gICAg
RXhwcmVzc2lvblR5cGUgZW1pdEF0b21pY0JpbmFyeVJNV09wKEV4dEF0b21pY09wVHlwZSwgVHlw
ZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90
IG9mZnNldCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdEF0b21pY0NvbXBhcmVFeGNoYW5nZShF
eHRBdG9taWNPcFR5cGUsIFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25U
eXBlIGV4cGVjdGVkLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAg
ICBWYWx1ZSogc2FuaXRpemVBdG9taWNSZXN1bHQoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1
ZSogcmVzdWx0KTsKKyAgICBWYWx1ZSogZW1pdEF0b21pY0xvYWRPcChFeHRBdG9taWNPcFR5cGUs
IFR5cGUsIFZhbHVlKiBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOworICAgIHZvaWQgZW1pdEF0
b21pY1N0b3JlT3AoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUq
LCB1aW50MzJfdCBvZmZzZXQpOworICAgIFZhbHVlKiBlbWl0QXRvbWljQmluYXJ5Uk1XT3AoRXh0
QXRvbWljT3BUeXBlLCBUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUqLCB1aW50MzJfdCBvZmZz
ZXQpOworICAgIFZhbHVlKiBlbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0b21pY09wVHlw
ZSwgVHlwZSwgVmFsdWUqIHBvaW50ZXIsIFZhbHVlKiBleHBlY3RlZCwgVmFsdWUqLCB1aW50MzJf
dCBvZmZzZXQpOwogCi0gICAgdm9pZCB1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSBwaGksIGNv
bnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSk7Ci0gICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9j
ayhjb25zdCBTdGFjayYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHN0YWNrKTsKKyAg
ICB2b2lkIHVuaWZ5KFZhbHVlKiBwaGksIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSk7Cisg
ICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYgcmVzdWx0U3RhY2ssIGNv
bnN0IENvbnRyb2xEYXRhJiBibG9jayk7CiAKLSAgICB2b2lkIGVtaXRDaGVja3NGb3JNb2RPckRp
dihCMzo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCk7
CisgICAgdm9pZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSwgVmFsdWUqIGxlZnQs
IFZhbHVlKiByaWdodCk7CiAKLSAgICBpbnQzMl90IFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBv
aW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiwgdWludDMyX3QpOwotICAgIEV4cHJlc3Np
b25UeXBlIFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWlj
T3BzKEV4dEF0b21pY09wVHlwZSwgRXhwcmVzc2lvblR5cGUsIHVpbnQzMl90KTsKKyAgICBpbnQz
Ml90IFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KFZhbHVlKiYsIHVp
bnQzMl90KTsKKyAgICBWYWx1ZSogV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNP
ZmZzZXRGb3JBdG9taWNPcHMoRXh0QXRvbWljT3BUeXBlLCBWYWx1ZSosIHVpbnQzMl90KTsKIAog
ICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiwgQmFzaWNCbG9j
ayosIFZhbHVlKik7CiAgICAgZW51bSBjbGFzcyBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCB7IE5v
LCBZZXMgfTsKLSAgICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVD
YWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFZhbHVlKiBpbnN0YW5j
ZSwgUHJvY2VkdXJlJiwgQmFzaWNCbG9jayopOworICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5
R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9ybWF0
aW9uJiwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKiwgYm9vbCByZXN0
b3JlSW5zdGFuY2UgPSB0cnVlKTsKKworICAgIFZhbHVlKiBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIo
dW5zaWduZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBwb2ludGVyLCBCMzo6VHlwZSk7CisgICAg
dm9pZCBjb25uZWN0Q29udHJvbEVudHJ5KHVuc2lnbmVkJiBpbmRleEluQnVmZmVyLCBWYWx1ZSog
cG9pbnRlciwgQ29udHJvbERhdGEmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBDb250cm9sRGF0
YSYgY3VycmVudERhdGEsIGJvb2wgZmlsbExvb3BQaGlzID0gZmFsc2UpOworICAgIFZhbHVlKiBl
bWl0Q2F0Y2hJbXBsKENhdGNoS2luZCwgQ29udHJvbFR5cGUmLCB1bnNpZ25lZCBleGNlcHRpb25J
bmRleCA9IDApOworICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgcHJlcGFyZVBhdGNocG9p
bnRGb3JFeGNlcHRpb25zKEJhc2ljQmxvY2sqLCBQYXRjaHBvaW50VmFsdWUqKTsKIAogICAgIE9y
aWdpbiBvcmlnaW4oKTsKIApAQCAtMzM5LDYgKzQ3Niw2MiBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gbV9vdXRlckxvb3BzLmxhc3QoKTsKICAgICB9CiAKKyAgICBFeHByZXNzaW9uVHlwZSBw
dXNoKFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBwdXNoKHRvQjNUeXBlKHR5cGUp
KTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uVHlwZSBwdXNoKEIzOjpUeXBlIHR5cGUpCisgICAg
eworICAgICAgICArK21fc3RhY2tTaXplOworICAgICAgICBpZiAobV9zdGFja1NpemUgPiBtX21h
eFN0YWNrU2l6ZSkgeworICAgICAgICAgICAgbV9tYXhTdGFja1NpemUgPSBtX3N0YWNrU2l6ZTsK
KyAgICAgICAgICAgIFZhcmlhYmxlKiB2YXIgPSBtX3Byb2MuYWRkVmFyaWFibGUodHlwZSk7Cisg
ICAgICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXIpOworICAgICAgICAgICAgcmV0dXJuIHZhcjsK
KyAgICAgICAgfQorCisgICAgICAgIFZhcmlhYmxlKiB2YXIgPSBtX3N0YWNrW21fc3RhY2tTaXpl
IC0gMV07CisgICAgICAgIGlmICh2YXItPnR5cGUoKSA9PSB0eXBlKQorICAgICAgICAgICAgcmV0
dXJuIHZhcjsKKworICAgICAgICB2YXIgPSBtX3Byb2MuYWRkVmFyaWFibGUodHlwZSk7CisgICAg
ICAgIG1fc3RhY2tbbV9zdGFja1NpemUgLSAxXSA9IHZhcjsKKyAgICAgICAgcmV0dXJuIHZhcjsK
KyAgICB9CisKKyAgICBFeHByZXNzaW9uVHlwZSBwdXNoKFZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIFZhcmlhYmxlKiB2YXIgPSBwdXNoKHZhbHVlLT50eXBlKCkpOworICAgICAgICBzZXQo
dmFyLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB2YXI7CisgICAgfQorCisgICAgVmFsdWUqIGdl
dChCYXNpY0Jsb2NrKiBibG9jaywgVmFyaWFibGUqIHZhcmlhYmxlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBv
cmlnaW4oKSwgdmFyaWFibGUpOworICAgIH0KKworICAgIFZhbHVlKiBnZXQoVmFyaWFibGUqIHZh
cmlhYmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldChtX2N1cnJlbnRCbG9jaywgdmFyaWFi
bGUpOworICAgIH0KKworICAgIFZhbHVlKiBzZXQoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxl
KiBkc3QsIFZhbHVlKiBzcmMpCisgICAgeworICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5l
dzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpTZXQsIG9yaWdpbigpLCBkc3QsIHNyYyk7Cisg
ICAgfQorCisgICAgVmFsdWUqIHNldChWYXJpYWJsZSogZHN0LCBWYWx1ZSogc3JjKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHNldChtX2N1cnJlbnRCbG9jaywgZHN0LCBzcmMpOworICAgIH0KKwor
ICAgIFZhbHVlKiBzZXQoVmFyaWFibGUqIGRzdCwgVmFyaWFibGUqIHNyYykKKyAgICB7CisgICAg
ICAgIHJldHVybiBzZXQoZHN0LCBnZXQoc3JjKSk7CisgICAgfQorCiAgICAgRnVuY3Rpb25QYXJz
ZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OwogICAgIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBtX2luZm87CiAgICAgY29uc3QgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwpAQCAtMzQ4LDEwICs1NDEsMTIgQEAgcHJpdmF0ZToK
ICAgICBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRyIH07CiAKICAgICBQcm9jZWR1cmUm
IG1fcHJvYzsKLSAgICBCYXNpY0Jsb2NrKiBtX3Jvb3RCbG9jayB7IG51bGxwdHIgfTsKKyAgICBW
ZWN0b3I8QmFzaWNCbG9jayo+IG1fcm9vdEJsb2NrczsKKyAgICBCYXNpY0Jsb2NrKiBtX3RvcExl
dmVsQmxvY2s7CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAg
ICAgVmVjdG9yPHVpbnQzMl90PiBtX291dGVyTG9vcHM7CiAgICAgVmVjdG9yPFZhcmlhYmxlKj4g
bV9sb2NhbHM7CisgICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9zdGFjazsKICAgICBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3Qg
ZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNo
b3VsZCBiZSBwYXRjaGVkIHdpdGguCiAgICAgdW5zaWduZWQmIG1fb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZTsKICAgICBIYXNoTWFwPFZhbHVlS2V5LCBWYWx1ZSo+IG1fY29uc3RhbnRQb29sOwpA
QCAtMzY1LDYgKzU2MCw3IEBAIHByaXZhdGU6CiAKICAgICBWYWx1ZSogbV9pbnN0YW5jZVZhbHVl
IHsgbnVsbHB0ciB9OyAvLyBBbHdheXMgdXNlIHRoZSBhY2Nlc3NvciBiZWxvdyB0byBlbnN1cmUg
dGhlIGluc3RhbmNlIHZhbHVlIGlzIG1hdGVyaWFsaXplZCB3aGVuIHVzZWQuCiAgICAgYm9vbCBt
X3VzZXNJbnN0YW5jZVZhbHVlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzQ2F0Y2ggeyBmYWxz
ZSB9OwogICAgIFZhbHVlKiBpbnN0YW5jZVZhbHVlKCkKICAgICB7CiAgICAgICAgIG1fdXNlc0lu
c3RhbmNlVmFsdWUgPSB0cnVlOwpAQCAtMzczLDEwICs1NjksMjkgQEAgcHJpdmF0ZToKIAogICAg
IHVpbnQzMl90IG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1f
bnVtSW1wb3J0RnVuY3Rpb25zOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV90cnlEZXB0aCB7
IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX2NhbGxTaXRlSW5kZXggeyAwIH07CisgICAg
Q2hlY2tlZDx1bnNpZ25lZD4gbV9zdGFja1NpemUgeyAwIH07CisgICAgQ2hlY2tlZDx1bnNpZ25l
ZD4gbV9tYXhTdGFja1NpemUgeyAwIH07CisgICAgU3RhY2tNYXBzIG1fc3RhY2ttYXBzOworICAg
IFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwogfTsKIAor
dm9pZCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCBCM0lSR2VuZXJh
dG9yKiBnZW5lcmF0b3IpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FsbFNpdGVJbmRleCA9PSBzX2lu
dmFsaWRDYWxsU2l0ZUluZGV4KQorICAgICAgICByZXR1cm47CisKKyAgICBTdGFja01hcCB2YWx1
ZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vZmZzZXQ7IGkgPCBwYXJhbXMudmFsdWUoKS0+
bnVtQ2hpbGRyZW4oKTsgKytpKQorICAgICAgICB2YWx1ZXMuY29uc3RydWN0QW5kQXBwZW5kKHBh
cmFtc1tpXSwgcGFyYW1zLnZhbHVlKCktPmNoaWxkKGkpLT50eXBlKCkpOworICAgIGdlbmVyYXRv
ci0+YWRkU3RhY2tNYXAobV9jYWxsU2l0ZUluZGV4LCBXVEZNb3ZlKHZhbHVlcykpOworICAgIGpp
dC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fY2FsbFNpdGVJbmRleCksIEND
YWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7Cit9CisKIC8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJseSBoYXZlIHVuc2ln
bmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQgMzItYml0IG9mZnNl
dHMgaW4gQjMuCi1pbnQzMl90IEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQo
RXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMyX3Qgb2Zmc2V0KQoraW50MzJfdCBCM0lSR2VuZXJh
dG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KFZhbHVlKiYgcHRyLCB1aW50MzJfdCBvZmZzZXQp
CiB7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpID4gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkgewogICAgICAg
ICBwdHIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3Jp
Z2luKCksIHB0ciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIG9mZnNldCkpOwpAQCAtNDI4LDggKzY0Myw5IEBAIEIzSVJHZW5lcmF0b3I6
OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYg
cHJvY2VkdXJlCiAgICAgLCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzKG1fcHJvYykKICAgICAs
IG1fbnVtSW1wb3J0RnVuY3Rpb25zKGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpKQogewotICAg
IG1fcm9vdEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBt
X3Jvb3RCbG9jazsKKyAgICBtX3RvcExldmVsQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAg
ICBtX3Jvb3RCbG9ja3MuYXBwZW5kKG1fcHJvYy5hZGRCbG9jaygpKTsKKyAgICBtX2N1cnJlbnRC
bG9jayA9IG1fcm9vdEJsb2Nrc1swXTsKIAogICAgIC8vIEZJWE1FIHdlIGRvbid0IHJlYWxseSBu
ZWVkIHRvIHBpbiByZWdpc3RlcnMgaGVyZSBpZiB0aGVyZSdzIG5vIG1lbW9yeS4gSXQgbWFrZXMg
d2FzbSAtPiB3YXNtIHRodW5rcyBzaW1wbGVyIGZvciBub3cuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2MjMKICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8m
IHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAtNDYxLDYgKzY3Nywy
NiBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICB9KTsKICAgICB9CiAKKyAgICB7
CisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGdldEluc3RhbmNlID0gbV90b3BMZXZlbEJs
b2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBwb2ludGVyVHlwZSgp
LCBPcmlnaW4oKSk7CisgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAg
ICAgICBnZXRJbnN0YW5jZS0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0
ZXJzKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdh
c21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dEluc3RhbmNlIHJlZ2lzdGVyIGFuZCBk
b2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBz
aWRlLgorICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIEFyZ3VtZW50
UmVnIHRvIHRoaXMgKGxvZ2ljYWxseSkgaW1tdXRhYmxlIHBpbm5lZCByZWdpc3Rlci4KKyAgICAg
ICAgICAgIGdldEluc3RhbmNlLT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IGZhbHNlOworICAgICAg
ICAgICAgZ2V0SW5zdGFuY2UtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAg
ICAgZ2V0SW5zdGFuY2UtPnJlc3VsdENvbnN0cmFpbnRzID0geyBWYWx1ZVJlcDo6cmVnKG1fd2Fz
bUNvbnRleHRJbnN0YW5jZUdQUikgfTsKKyAgICAgICAgfQorICAgICAgICBnZXRJbnN0YW5jZS0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZh
c3RUTFMoKSkgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFu
Y2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5sb2Fk
V2FzbUNvbnRleHRJbnN0YW5jZShwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9KTsKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gZ2V0SW5zdGFuY2U7CisgICAgfQor
CiAgICAgewogICAgICAgICBhdXRvKiBjYWxsZWVNb3ZlTG9jYXRpb24gPSAmY29tcGlsYXRpb24t
PmNhbGxlZU1vdmVMb2NhdGlvbjsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpIDwgV2FzbUNhbGxpbmdDb252ZW50aW9uOjpo
ZWFkZXJTaXplSW5CeXRlcywgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CkBAIC00
OTQsMTcgKzczMCwxMCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgIH0KIAogICAgIHsK
LSAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogc3RhY2tPdmVyZmxvd0NoZWNrID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIHBvaW50ZXJU
eXBlKCksIE9yaWdpbigpKTsKLSAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gc3RhY2tPdmVyZmxv
d0NoZWNrOworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBzdGFja092ZXJmbG93Q2hlY2sg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
Vm9pZCwgT3JpZ2luKCkpOworICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmFwcGVuZFNvbWVS
ZWdpc3RlcihpbnN0YW5jZVZhbHVlKCkpOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmFw
cGVuZFNvbWVSZWdpc3RlcihmcmFtZVBvaW50ZXIoKSk7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dD
aGVjay0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotICAg
ICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6
IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVn
aXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0
aGUgY2FsbGVyIHNpZGUuCi0gICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNp
bmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lz
dGVyLgotICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLndyaXRlc1Bpbm5l
ZCA9IGZhbHNlOwotICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLnJlYWRz
UGlubmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+cmVzdWx0Q29u
c3RyYWludHMgPSB7IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSB9Owot
ICAgICAgICB9CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+bnVtR1BTY3JhdGNoUmVnaXN0
ZXJzID0gMjsKICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CiAgICAgICAgICAgICBjb25zdCBDaGVja2VkPGludDMyX3Q+IHdhc21GcmFtZVNpemUg
PSBwYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpOwpAQCAtNTI2LDE5ICs3NTUsMTUgQEAgQjNJUkdl
bmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJv
Y2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgIGJvb2wgbmVlZFVuZGVyZmxvd0NoZWNrID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoZWNrU2l6ZSkgPiBPcHRpb25zOjpyZXNlcnZlZFpvbmVT
aXplKCk7CiAgICAgICAgICAgICBib29sIG5lZWRzT3ZlcmZsb3dDaGVjayA9IG1fbWFrZXNDYWxs
cyB8fCB3YXNtRnJhbWVTaXplID49IHN0YXRpY19jYXN0PGludDMyX3Q+KG1pbmltdW1QYXJlbnRD
aGVja1NpemUpIHx8IG5lZWRVbmRlcmZsb3dDaGVjazsKIAotICAgICAgICAgICAgR1BSUmVnIGNv
bnRleHRJbnN0YW5jZSA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHBhcmFtc1swXS5ncHIoKSA6
IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKLQogICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3Mg
bGVhZiBmdW5jdGlvbnMgdG8gbm90IGRvIHN0YWNrIGNoZWNrcyBpZiB0aGVpciBmcmFtZSBzaXpl
IGlzIHdpdGhpbgogICAgICAgICAgICAgLy8gY2VydGFpbiBsaW1pdHMgc2luY2UgdGhlaXIgY2Fs
bGVyIHdvdWxkIGhhdmUgYWxyZWFkeSBkb25lIHRoZSBjaGVjay4KICAgICAgICAgICAgIGlmIChu
ZWVkc092ZXJmbG93Q2hlY2spIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGNv
bnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcg
ZnAgPSBwYXJhbXNbMV0uZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cGFyYW1zLmdwU2NyYXRjaCgwKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBw
YXJhbXMuZ3BTY3JhdGNoKDEpOwogCi0gICAgICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZh
c3RUTFMoKSkKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KGNvbnRleHRJbnN0YW5jZSk7Ci0KICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoY29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRT
dGFja0xpbWl0KCkpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgZnAsIHNjcmF0Y2gxKTsKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7CkBAIC01NDgsMTIg
Kzc3Myw2IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3RhY2tPdmVyZmxv
d0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIENvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkgewotICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93IGNoZWNrIGlzIG5l
ZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMgdG8gYmUgY29ycmVjdC4K
LSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1Nj
cmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNy
b1NjcmF0Y2hSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0
SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgLy8gV2Ugc2FpZCB3ZSdkIHJldHVybiBhIHBvaW50ZXIuIFdlIGRvbid0IGFjdHVh
bGx5IG5lZWQgdG8gYmVjYXVzZSBpdCBpc24ndCB1c2VkLCBidXQgdGhlIHBhdGNocG9pbnQgY29u
c2VydmF0aXZlbHkgc2FpZCBpdCBoYWQgZWZmZWN0cyAocG90ZW50aWFsIHN0YWNrIGNoZWNrKSB3
aGljaCBwcmV2ZW50IGl0IGZyb20gZ2V0dGluZyByZW1vdmVkLgogICAgICAgICAgICAgfQogICAg
ICAgICB9KTsKICAgICB9CkBAIC01NjQsOSArNzgzLDEwIEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJH
ZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2Vk
dXJlCiAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CiB9CiAKLXZv
aWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNh
Y2hlZFN0YWNrTGltaXQgcmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9y
bWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Js
b2NrKiBibG9jaykKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFs
U3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgcmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNv
bnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJl
JiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywgYm9vbCByZXN0b3JlSW5zdGFuY2UpCiB7Ci0gICAg
cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKKyAgICBp
ZiAocmVzdG9yZUluc3RhbmNlKQorICAgICAgICByZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShw
cm9jLCBibG9jaywgaW5zdGFuY2UpOwogCiAgICAgaWYgKHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0
ID09IFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMpIHsKICAgICAgICAgLy8gVGhlIEluc3Rh
bmNlIGNhY2hlcyB0aGUgc3RhY2sgbGltaXQsIGJ1dCBhbHNvIGtub3dzIHdoZXJlIGl0cyBjYW5v
bmljYWwgbG9jYXRpb24gaXMuCkBAIC02MzQsOSArODU0LDgxIEBAIFZhbHVlKiBCM0lSR2VuZXJh
dG9yOjpmcmFtZVBvaW50ZXIoKQogICAgIHJldHVybiBtX2ZyYW1lUG9pbnRlcjsKIH0KIAorc3Rh
dGljIHZvaWQgYnVpbGRFbnRyeUJ1ZmZlckZvckNhdGNoKFByb2JlOjpDb250ZXh0JiBjb250ZXh0
KQoreworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigp
OworICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJ
bmRleCgpOworICAgIE9wdGltaXppbmdKSVRDYWxsZWUqIGNhbGxlZSA9IGJpdHdpc2VfY2FzdDxP
cHRpbWl6aW5nSklUQ2FsbGVlKj4oY2FsbEZyYW1lLT5jYWxsZWUoKS5hc1dhc21DYWxsZWUoKSk7
CisgICAgY29uc3QgU3RhY2tNYXAmIHN0YWNrbWFwID0gY2FsbGVlLT5zdGFja21hcChjYWxsU2l0
ZUluZGV4KTsKKyAgICBWTSogdm0gPSBjb250ZXh0LmdwcjxWTSo+KEdQUkluZm86OnJlZ1QwKTsK
KyAgICB1aW50NjRfdCogYnVmZmVyID0gdm0tPndhc21Db250ZXh0LnNjcmF0Y2hCdWZmZXJGb3JT
aXplKHN0YWNrbWFwLnNpemUoKSAqIDgpOworICAgIGxvYWRWYWx1ZXNJbnRvQnVmZmVyKGNvbnRl
eHQsIHN0YWNrbWFwLCBidWZmZXIpOworCisgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJ1ZmZlcik7Cit9CisKK3ZvaWQgQjNJ
UkdlbmVyYXRvcjo6aW5zZXJ0RW50cnlTd2l0Y2goKQoreworICAgIG1fcHJvYy5zZXROdW1FbnRy
eXBvaW50cyhtX3Jvb3RCbG9ja3Muc2l6ZSgpKTsKKworICAgIFJlZjxCMzo6QWlyOjpQcm9sb2d1
ZUdlbmVyYXRvcj4gY2F0Y2hQcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6
OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oW10gKENDYWxsSGVscGVycyYgaml0LCBC
Mzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGluZyBwcmVjaXNlIGFsbG9jYXRpb25z
IGluIFdhc21CM0lSR2VuZXJhdG9yIGNhdGNoIGVudHJ5cG9pbnRzIG1pZ2h0IGJlIHVubmVjZXNz
YXJ5CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMxMjEzCisgICAgICAgICAgICBhdXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5i
cmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDAsIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKFByZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxpZ25tZW50KSk7
CisgICAgICAgICAgICBqaXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJr
ZWRCbG9jazo6YmxvY2tNYXNrKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBNYXJrZWRCbG9jazo6
b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpvZmZzZXRPZlZNKCkpLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICBhdXRvIGxvYWRlZENhc2UgPSBqaXQuanVtcCgpOwor
CisgICAgICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluaygmaml0KTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgUHJl
Y2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZWTSgp
IC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIEdQUkluZm86OnJlZ1QwKTsKKwor
ICAgICAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOworICAgICAgICB9CisgICAgICAgIGpp
dC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BS
SW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QzKTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hP
ZmZzZXQoKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoT2Zmc2V0KCkpKTsKKyAgICAgICAgaml0
LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJJbmZvOjpyZWdUMywgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKTsKKworICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpyZWdUMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwg
Vk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKKworICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFt
ZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpyZWdUMyk7
CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
MywgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkluc3RhbmNlKCkpLCBHUFJJbmZvOjpy
ZWdUMyk7CisgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6cmVn
VDMpOworCisgICAgICAgIGppdC5wcm9iZSh0YWdDRnVuY3Rpb248SklUUHJvYmVQdHJUYWc+KGJ1
aWxkRW50cnlCdWZmZXJGb3JDYXRjaCksIG51bGxwdHIpOworCisgICAgICAgIGppdC5hZGRQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgfSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9yb290QmxvY2tzLnNpemUo
KTsgKytpKQorICAgICAgICBtX3Byb2MuY29kZSgpLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludChp
LCBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yLmNvcHlSZWYoKSk7CisKKyAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fdG9wTGV2ZWxCbG9jazsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEVudHJ5U3dpdGNoLCBPcmlnaW4oKSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcm9vdEJsb2NrcykKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZFN1Y2Nl
c3NvcihGcmVxdWVudGVkQmxvY2soYmxvY2spKTsKK30KKwogdm9pZCBCM0lSR2VuZXJhdG9yOjpp
bnNlcnRDb25zdGFudHMoKQogewogICAgIG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXMuZXhlY3V0
ZShtX3Byb2MuYXQoMCkpOworCisgICAgaWYgKCFtX2hhc0NhdGNoKQorICAgICAgICByZXR1cm47
CisKKyAgICBWYWx1ZSoganNJbnN0YW5jZSA9IG1fcHJvYy5hZGQ8TWVtb3J5VmFsdWU+KExvYWQs
IHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMy
X3Q+KEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpKTsKKyAgICBWYWx1ZSogc3RvcmUgPSBtX3By
b2MuYWRkPEIzOjpNZW1vcnlWYWx1ZT4oQjM6OlN0b3JlLCBPcmlnaW4oKSwganNJbnN0YW5jZSwg
ZnJhbWVQb2ludGVyKCksIHNhZmVDYXN0PGludDMyX3Q+KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1
bWVudCAqIHNpemVvZihSZWdpc3RlcikpKTsKKworICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9y
b290QmxvY2tzWzBdOworICAgIG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXMuaW5zZXJ0VmFsdWUo
MCwganNJbnN0YW5jZSk7CisgICAgbV9jb25zdGFudEluc2VydGlvblZhbHVlcy5pbnNlcnRWYWx1
ZSgwLCBzdG9yZSk7CisgICAgbV9jb25zdGFudEluc2VydGlvblZhbHVlcy5leGVjdXRlKGJsb2Nr
KTsKIH0KIAogQjM6OlR5cGUgQjNJUkdlbmVyYXRvcjo6dG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWdu
YXR1cmUgcmV0dXJuVHlwZSkKQEAgLTcwNSwyMCArOTk3LDIxIEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVz
dWx0CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlIHZh
bHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVz
dWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWws
IG9yaWdpbigpLCB2YWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKTsKKyAgICByZXN1
bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkVx
dWFsLCBvcmlnaW4oKSwgZ2V0KHZhbHVlKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUdldCh1
bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5s
aW5lIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KLSAg
ICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywg
dG9CM1R5cGUoVHlwZXM6OkV4dGVybnJlZiksIG9yaWdpbigpLAorICAgIFZhbHVlKiByZXN1bHRW
YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0Iz
VHlwZShUeXBlczo6RXh0ZXJucmVmKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9u
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0V2FzbVRhYmxlRWxlbWVudCkpLAotICAgICAg
ICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwgaW5kZXgpOworICAgICAgICBpbnN0YW5j
ZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZ2V0KGluZGV4KSk7CiAKICAgICB7CisgICAgICAgIHJl
c3VsdCA9IHB1c2gocmVzdWx0VmFsdWUpOwogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2lu
KCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1
ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAg
ICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNUYWJsZUFjY2Vzcyk7CkBAIC03MzMsNyArMTAyNiw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkVGFibGVTZXQodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4
cHJlCiAgICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1MDY+LgogICAgIGF1dG8gc2hvdWxkVGhyb3cgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgQjM6OkludDMyLCBvcmln
aW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25T
ZXRXYXNtVGFibGVFbGVtZW50KSksCi0gICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5k
ZXgpLCBpbmRleCwgdmFsdWUpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4
KSwgZ2V0KGluZGV4KSwgZ2V0KHZhbHVlKSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUq
IGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENo
ZWNrLCBvcmlnaW4oKSwKQEAgLTc1MSwyNiArMTA0NCwyNiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZFJlZkZ1bmModWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYQogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KIAotICAgIHJlc3VsdCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBCMzo6SW50NjQsIG9yaWdpbigp
LAorICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVl
PihtX3Byb2MsIEIzOjpJbnQ2NCwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVJlZkZ1bmMpKSwKLSAgICAgICAgaW5zdGFuY2VW
YWx1ZSgpLCBhZGRDb25zdGFudChUeXBlczo6STMyLCBpbmRleCkpOworICAgICAgICBpbnN0YW5j
ZVZhbHVlKCksIGNvbnN0YW50KHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBpbmRleCkpKTsKIAogICAg
IHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVJbml0KHVuc2ln
bmVkIGVsZW1lbnRJbmRleCwgdW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgZHN0
T2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBzcmNPZmZzZXQsIEV4cHJlc3Npb25UeXBlIGxlbmd0aCkg
LT4gUGFydGlhbFJlc3VsdAogewotICAgIGF1dG8gcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICBtX3Byb2MsIHRvQjNUeXBlKFR5
cGVzOjpJMzIpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25XYXNtVGFibGVJbml0KSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIGVsZW1lbnRJbmRleCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSwKLSAgICAgICAg
ZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGdldChkc3RPZmZzZXQpLCBn
ZXQoc3JjT2Zmc2V0KSwgZ2V0KGxlbmd0aCkpOwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVl
KiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBD
aGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigp
LCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
ewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlw
ZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC03OTQsMzEgKzEwODcsMzEgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRFbGVtRHJvcCh1bnNpZ25lZCBlbGVtZW50SW5kZXgpIC0+IFBhcnRp
YWxSZXN1bHQKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVTaXplKHVuc2lnbmVkIHRhYmxl
SW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICAv
LyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5ODUwNj4uCi0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKKyAg
ICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9w
cm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0
aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0V2FzbVRhYmxlU2l6ZSkpLAotICAgICAg
ICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUluZGV4KSk7CisgICAgICAgIGluc3RhbmNlVmFsdWUo
KSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHRhYmxlSW5kZXgpKSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZFRhYmxlR3Jvdyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBm
aWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0Nh
bGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCisgICAgcmVz
dWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywg
dG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxP
cGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UYWJsZUdyb3cpKSwKLSAgICAgICAgaW5zdGFu
Y2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgdGFibGVJbmRleCksIGZpbGwsIGRlbHRhKTsKKyAgICAgICAgaW5zdGFuY2VW
YWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgdGFibGVJbmRleCksIGdldChmaWxsKSwgZ2V0KGRlbHRhKSkpOwogCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUZpbGwodW5zaWduZWQg
dGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgb2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBmaWxsLCBF
eHByZXNzaW9uVHlwZSBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGF1dG8gcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBl
KFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKKyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6Okkz
MiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRy
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbldhc21UYWJsZUZpbGwpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJ
bmRleCksIG9mZnNldCwgZmlsbCwgY291bnQpOworICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0
YWJsZUluZGV4KSwgZ2V0KG9mZnNldCksIGdldChmaWxsKSwgZ2V0KGNvdW50KSk7CiAKICAgICB7
CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
aGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQs
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVj
ay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hl
Y2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTgzMCwx
NyArMTEyMywxNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCh1bnNpZ25lZCB0
YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBvZmZzZXQsIEV4cAogCiBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZFRhYmxlQ29weSh1bnNpZ25lZCBkc3RUYWJsZUluZGV4LCB1bnNpZ25lZCBzcmNUYWJs
ZUluZGV4LCBFeHByZXNzaW9uVHlwZSBkc3RPZmZzZXQsIEV4cHJlc3Npb25UeXBlIHNyY09mZnNl
dCwgRXhwcmVzc2lvblR5cGUgbGVuZ3RoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVl
KiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAg
ICAgICAgIG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UYWJsZUNvcHkpKSwK
ICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZHN0VGFibGVJbmRleCksCiAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCBzcmNUYWJsZUluZGV4KSwKLSAgICAgICAgZHN0T2Zmc2V0LCBzcmNPZmZzZXQsIGxlbmd0
aCk7CisgICAgICAgIGdldChkc3RPZmZzZXQpLCBnZXQoc3JjT2Zmc2V0KSwgZ2V0KGxlbmd0aCkp
OwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4o
KSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAg
ICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4
Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7
CkBAIC04NTMsNyArMTE0Niw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVDb3B5KHVu
c2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsCiBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7Ci0gICAg
cmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2Ms
IEIzOjpHZXQsIG9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0pOworICAgIHJlc3VsdCA9IHB1c2go
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQs
IG9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0pKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC04
NjcsNyArMTE2MCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQ
YXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjpl
bWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2Fs
bGVlQ29kZSwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJ
UkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIFZhbHVl
KiBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewog
ICAgIC8vIERvIGEgY29udGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgogICAgIHsKQEAgLTkxNiw3ICsx
MjA5LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxs
ZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGUKICAgICB9CiAKICAgICBCMzo6VHlwZSBy
ZXR1cm5UeXBlID0gdG9CM1Jlc3VsdFR5cGUoJnNpZ25hdHVyZSk7Ci0gICAgRXhwcmVzc2lvblR5
cGUgY2FsbFJlc3VsdCA9IGNyZWF0ZUNhbGxQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBvcmln
aW4oKSwgc2lnbmF0dXJlLCBhcmdzLAorICAgIFZhbHVlKiBjYWxsUmVzdWx0ID0gY3JlYXRlQ2Fs
bFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBzaWduYXR1cmUsIGFyZ3MsCiAg
ICAgICAgIHNjb3BlZExhbWJkYVJlZjx2b2lkKFBhdGNocG9pbnRWYWx1ZSopPihbPV0gKFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgLT4gdm9pZCB7CiAgICAgICAgICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKQEAgLTkyOCw4ICsxMjIxLDEwIEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIEV4cHJl
c3Npb25UeXBlIGNhbGxlCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykp
OwogCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoY2FsbGVlQ29kZSwgVmFsdWVSZXA6
OlNvbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhh
bmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhtX2N1cnJlbnRCbG9jaywgcGF0
Y2hwb2ludCk7CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFt
cywgdGhpcyk7CiAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3BhcmFtcy5wcm9jKCku
cmVzdWx0Q291bnQocmV0dXJuVHlwZSldLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0pKTsKQEAgLTk0MSwxMSArMTIzNiwxMSBAQCBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBFeHByZXNz
aW9uVHlwZSBjYWxsZQogICAgIGNhc2UgQjM6OlR1cGxlOiB7CiAgICAgICAgIGNvbnN0IFZlY3Rv
cjxCMzo6VHlwZT4mIHR1cGxlID0gbV9wcm9jLnR1cGxlRm9yVHlwZShyZXR1cm5UeXBlKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyAr
K2kpCi0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHVwbGVbaV0sIGNhbGxSZXN1bHQsIGkp
KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxFeHRyYWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHR1cGxlW2ldLCBjYWxsUmVzdWx0
LCBpKSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDogewotICAgICAgICBy
ZXN1bHRzLmFwcGVuZChjYWxsUmVzdWx0KTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaChj
YWxsUmVzdWx0KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CkBAIC05NTgsOSArMTI1
Myw5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVl
SW5zdGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
R3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCisgICAgcmVzdWx0ID0gcHVz
aChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9y
aWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bkdyb3dNZW1vcnkpKSwKLSAgICAgICAgZnJhbWVQb2ludGVyKCksIGluc3RhbmNlVmFsdWUoKSwg
ZGVsdGEpOworICAgICAgICBmcmFtZVBvaW50ZXIoKSwgaW5zdGFuY2VWYWx1ZSgpLCBnZXQoZGVs
dGEpKSk7CiAKICAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVk
U3RhY2tMaW1pdDo6Tm8sIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9wcm9jLCBt
X2N1cnJlbnRCbG9jayk7CiAKQEAgLTk4MCwyMiArMTI3NSwyMiBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogICAgIFZhbHVlKiBudW1QYWdlcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgWlNociwgb3JpZ2luKCksCiAgICAgICAgIHNpemUsIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzaGlmdFZhbHVlKSk7
CiAKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IFRydW5jLCBvcmlnaW4oKSwgbnVtUGFnZXMpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIG51bVBhZ2Vz
KSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE1lbW9y
eUZpbGwoRXhwcmVzc2lvblR5cGUgZHN0QWRkcmVzcywgRXhwcmVzc2lvblR5cGUgdGFyZ2V0VmFs
dWUsIEV4cHJlc3Npb25UeXBlIGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVl
KiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAg
ICAgICAgIG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21NZW1vcnlGaWxsKSks
CiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwKLSAgICAgICAgZHN0QWRkcmVzcywgdGFyZ2V0VmFs
dWUsIGNvdW50KTsKKyAgICAgICAgZ2V0KGRzdEFkZHJlc3MpLCBnZXQodGFyZ2V0VmFsdWUpLCBn
ZXQoY291bnQpKTsKIAogICAgIHsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAot
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVh
bCwgb3JpZ2luKCksIHJlc3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAw
KSkpOwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRo
aXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVGFi
bGVBY2Nlc3MpOwpAQCAtMTAwNywxNiArMTMwMiwxNiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE1lbW9yeUZpbGwoRXhwcmVzc2lvblR5cGUgZHN0QWRkcmVzcywgRXhwcmVzc2lvblR5cGUgdGFy
ZwogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUluaXQodW5zaWduZWQgZGF0YVNlZ21l
bnRJbmRleCwgRXhwcmVzc2lvblR5cGUgZHN0QWRkcmVzcywgRXhwcmVzc2lvblR5cGUgc3JjQWRk
cmVzcywgRXhwcmVzc2lvblR5cGUgbGVuZ3RoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0
byByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZh
bHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4o
CiAgICAgICAgIG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21NZW1vcnlJbml0
KSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGRhdGFTZWdtZW50SW5kZXgp
LAotICAgICAgICBkc3RBZGRyZXNzLCBzcmNBZGRyZXNzLCBsZW5ndGgpOworICAgICAgICBnZXQo
ZHN0QWRkcmVzcyksIGdldChzcmNBZGRyZXNzKSwgZ2V0KGxlbmd0aCkpOwogCiAgICAgewogICAg
ICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tW
YWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkp
KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
RXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGpp
dCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJsZUFjY2Vzcyk7CkBAIC0xMDI4LDE1ICsx
MzIzLDE1IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5SW5pdCh1bnNpZ25lZCBkYXRh
U2VnbWVudEluZGV4LCBFeHByZXNzaW9uVHlwZSBkc3RBCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkTWVtb3J5Q29weShFeHByZXNzaW9uVHlwZSBkc3RBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSBz
cmNBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAogewotICAg
IGF1dG8gcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAg
ICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFs
dWU+KAogICAgICAgICBtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtTWVtb3J5
Q29weSkpLAogICAgICAgICBpbnN0YW5jZVZhbHVlKCksCi0gICAgICAgIGRzdEFkZHJlc3MsIHNy
Y0FkZHJlc3MsIGNvdW50KTsKKyAgICAgICAgZ2V0KGRzdEFkZHJlc3MpLCBnZXQoc3JjQWRkcmVz
cyksIGdldChjb3VudCkpOwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2lu
KCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1
ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAg
ICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNUYWJsZUFjY2Vzcyk7CkBAIC0xMDYwLDcgKzEzNTUsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZERhdGFEcm9wKHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQK
IGF1dG8gQjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25U
eXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4
XSk7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2Ms
IEIzOjpTZXQsIG9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0sIHZhbHVlKTsKKyAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgb3JpZ2lu
KCksIG1fbG9jYWxzW2luZGV4XSwgZ2V0KHZhbHVlKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApA
QCAtMTA3MCwxMiArMTM2NSwxMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbAogICAgIFZhbHVl
KiBnbG9iYWxzQXJyYXkgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNh
ZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSkpOwogICAgIHN3aXRj
aCAoZ2xvYmFsLmJpbmRpbmdNb2RlKSB7CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlv
bjo6QmluZGluZ01vZGU6OkVtYmVkZGVkSW5JbnN0YW5jZToKLSAgICAgICAgcmVzdWx0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlw
ZShnbG9iYWwudHlwZSksIG9yaWdpbigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+
KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICByZXN1bHQgPSBwdXNoKG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUo
Z2xvYmFsLnR5cGUpLCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90Pihp
bmRleCAqIHNpemVvZihSZWdpc3RlcikpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2Fz
bTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTogewogICAgICAgICBB
U1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFi
aWxpdHk6Ok11dGFibGUpOwogICAgICAgICBWYWx1ZSogcG9pbnRlciA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgQjM6OkludDY0LCBvcmlnaW4o
KSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3Rl
cikpKTsKLSAgICAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlwZShnbG9iYWwudHlwZSksIG9yaWdpbigpLCBwb2lu
dGVyKTsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKGdsb2JhbC50eXBlKSwgb3JpZ2luKCks
IHBvaW50ZXIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KQEAgLTEwODksMTQgKzEz
ODQsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4
cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKICAgICBWYWx1ZSogZ2xvYmFsc0FycmF5
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBw
b2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90
PihJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpKTsKICAgICBzd2l0Y2ggKGdsb2JhbC5iaW5k
aW5nTW9kZSkgewogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2Rl
OjpFbWJlZGRlZEluSW5zdGFuY2U6Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCB2YWx1ZSwgZ2xvYmFsc0FycmF5
LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3Jp
Z2luKCksIGdldCh2YWx1ZSksIGdsb2JhbHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXgg
KiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgIGlmIChpc1JlZlR5cGUoZ2xvYmFsLnR5cGUp
KQogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllckZvckpTV3JhcHBlcigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9y
dGFibGU6IHsKICAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Okdsb2Jh
bEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKICAgICAgICAgVmFsdWUqIHBvaW50
ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IEIzOjpJbnQ2NCwgb3JpZ2luKCksIGdsb2JhbHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5k
ZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCB2YWx1ZSwgcG9pbnRlcik7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
U3RvcmUsIG9yaWdpbigpLCBnZXQodmFsdWUpLCBwb2ludGVyKTsKICAgICAgICAgLy8gV2UgZW1p
dCBhIHdyaXRlLWJhcnJpZXIgb250byBKU1dlYkFzc2VtYmx5R2xvYmFsLCBub3QgSlNXZWJBc3Nl
bWJseUluc3RhbmNlLgogICAgICAgICBpZiAoaXNSZWZUeXBlKGdsb2JhbC50eXBlKSkgewogICAg
ICAgICAgICAgVmFsdWUqIGluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VW
YWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSk7CkBA
IC0xMTk5LDcgKzE0OTQsNyBAQCBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0V3JpdGVC
YXJyaWVyRm9ySlNXcmFwcGVyKCkKICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsK
IH0KIAotaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9p
bnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNp
emVPZk9wZXJhdGlvbikKK2lubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5k
UHJlcGFyZVBvaW50ZXIoVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qg
c2l6ZU9mT3BlcmF0aW9uKQogewogICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIpOwogCkBAIC0x
MjY4LDcgKzE1NjMsNyBAQCBpbmxpbmUgQjM6OktpbmQgQjNJUkdlbmVyYXRvcjo6bWVtb3J5S2lu
ZChCMzo6T3Bjb2RlIG1lbW9yeU9wKQogICAgIHJldHVybiBtZW1vcnlPcDsKIH0KIAotaW5saW5l
IFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0TG9hZE9wKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IHVvZmZzZXQpCitpbmxpbmUgVmFsdWUqIEIzSVJHZW5l
cmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90
IHVvZmZzZXQpCiB7CiAgICAgaW50MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0
KHBvaW50ZXIsIHVvZmZzZXQpOwogCkBAIC0xMzM4LDggKzE2MzMsOSBAQCBpbmxpbmUgVmFsdWUq
IEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUg
cG9pbnRlciwgdQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWF1dG8g
QjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVy
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1
bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogcG9pbnRlciA9IGdldChwb2ludGVyVmFyKTsK
ICAgICBBU1NFUlQocG9pbnRlci0+dHlwZSgpID09IEludDMyKTsKIAogICAgIGlmIChVTkxJS0VM
WShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSkpKSB7CkBA
IC0xMzU2LDcgKzE2NTIsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBv
cCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmCiAgICAgICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDoKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZV
OgogICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VToKLSAgICAgICAgICAgIHJlc3Vs
dCA9IGNvbnN0YW50KEludDMyLCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3Rh
bnQoSW50MzIsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQ4UzoKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CkBAIC0x
MzY1LDE4ICsxNjYxLDE4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9w
LCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYKICAgICAgICAgY2FzZSBM
b2FkT3BUeXBlOjpJNjRMb2FkMzJTOgogICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6
CiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKLSAgICAgICAgICAgIHJlc3Vs
dCA9IGNvbnN0YW50KEludDY0LCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3Rh
bnQoSW50NjQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRPcFR5
cGU6OkYzMkxvYWQ6Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChGbG9hdCwgMCk7Cisg
ICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50KEZsb2F0LCAwKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgotICAgICAgICAgICAg
cmVzdWx0ID0gY29uc3RhbnQoRG91YmxlLCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2go
Y29uc3RhbnQoRG91YmxlLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAg
ICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGVtaXRMb2FkT3Aob3AsIGVtaXRDaGVja0FuZFBy
ZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7
CisgICAgICAgIHJlc3VsdCA9IHB1c2goZW1pdExvYWRPcChvcCwgZW1pdENoZWNrQW5kUHJlcGFy
ZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0KSk7CiAK
ICAgICByZXR1cm4geyB9OwogfQpAQCAtMTQwMiw3ICsxNjk4LDcgQEAgaW5saW5lIHVpbnQzMl90
IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCiB9CiAKIAotaW5saW5lIHZvaWQgQjNJUkdl
bmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQoraW5saW5lIHZvaWQg
QjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIFZhbHVlKiBwb2ludGVy
LCBWYWx1ZSogdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCiB7CiAgICAgaW50MzJfdCBvZmZzZXQg
PSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIHVvZmZzZXQpOwogCkBAIC0xNDM3LDgg
KzE3MzMsMTAgQEAgaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVP
cFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEUKICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OnN0b3JlKFN0b3JlT3BUeXBl
IG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMy
X3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OnN0b3JlKFN0
b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyVmFyLCBFeHByZXNzaW9uVHlwZSB2
YWx1ZVZhciwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUq
IHBvaW50ZXIgPSBnZXQocG9pbnRlclZhcik7CisgICAgVmFsdWUqIHZhbHVlID0gZ2V0KHZhbHVl
VmFyKTsKICAgICBBU1NFUlQocG9pbnRlci0+dHlwZSgpID09IEludDMyKTsKIAogICAgIGlmIChV
TkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkp
KSkgewpAQCAtMTQ2NCw5ICsxNzYyLDkgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZkF0b21pY09w
TWVtb3J5QWNjZXNzKEV4dEF0b21pY09wVHlwZSBvcCkKICAgICByZXR1cm4gYnl0ZXNGb3JXaWR0
aChhY2Nlc3NXaWR0aChvcCkpOwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OnNh
bml0aXplQXRvbWljUmVzdWx0KEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4
cHJlc3Npb25UeXBlIHJlc3VsdCkKK2lubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6c2FuaXRp
emVBdG9taWNSZXN1bHQoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgVmFsdWUq
IHJlc3VsdCkKIHsKLSAgICBhdXRvIHNhbml0aXplMzIgPSBbJl0oRXhwcmVzc2lvblR5cGUgcmVz
dWx0KSB7CisgICAgYXV0byBzYW5pdGl6ZTMyID0gWyZdKFZhbHVlKiByZXN1bHQpIHsKICAgICAg
ICAgc3dpdGNoIChhY2Nlc3NXaWR0aChvcCkpIHsKICAgICAgICAgY2FzZSBCMzo6V2lkdGg4Ogog
ICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQml0QW5kLCBvcmlnaW4oKSwgcmVzdWx0LCBjb25zdGFudChJbnQzMiwgMHhmZikpOwpAQCAt
MTQ5MSw3ICsxNzg5LDcgQEAgaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpzYW5pdGl6ZUF0
b21pY1Jlc3VsdChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWUKICAgICB9CiB9CiAKLVZh
bHVlKiBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKEV4
dEF0b21pY09wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcHRyLCB1aW50MzJfdCBvZmZzZXQpCitW
YWx1ZSogQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhF
eHRBdG9taWNPcFR5cGUgb3AsIFZhbHVlKiBwdHIsIHVpbnQzMl90IG9mZnNldCkKIHsKICAgICBh
dXRvIHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFk
ZCwgb3JpZ2luKCksIHB0ciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIG9mZnNldCkpOwogICAgIGlmIChhY2Nlc3NXaWR0aChvcCkgIT0g
QjM6OldpZHRoOCkgewpAQCAtMTUwNCwxMSArMTgwMiwxMSBAQCBWYWx1ZSogQjNJUkdlbmVyYXRv
cjo6Zml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhFeHRBdG9taWNPcFR5cGUgb3As
IEV4cAogICAgIHJldHVybiBwb2ludGVyOwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0
b3I6OmVtaXRBdG9taWNMb2FkT3AoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwg
RXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK2lubGluZSBWYWx1ZSog
QjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY0xvYWRPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUg
dmFsdWVUeXBlLCBWYWx1ZSogcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBwb2lu
dGVyID0gZml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhvcCwgcG9pbnRlciwgdW9m
ZnNldCk7CiAKLSAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZSA9IG51bGxwdHI7CisgICAgVmFsdWUq
IHZhbHVlID0gbnVsbHB0cjsKICAgICBzd2l0Y2ggKGFjY2Vzc1dpZHRoKG9wKSkgewogICAgIGNh
c2UgQjM6OldpZHRoODoKICAgICBjYXNlIEIzOjpXaWR0aDE2OgpAQCAtMTUzNywyMiArMTgzNSwy
MiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmF0b21pY0xvYWQoRXh0QXRvbWljT3BUeXBlIG9wLCBU
eXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5cAogCiAgICAgICAgIHN3aXRjaCAodmFsdWVUeXBl
LmtpbmQpIHsKICAgICAgICAgY2FzZSBUeXBlS2luZDo6STMyOgotICAgICAgICAgICAgcmVzdWx0
ID0gY29uc3RhbnQoSW50MzIsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFu
dChJbnQzMiwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6
Okk2NDoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDY0LCAwKTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50NjQsIDApKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAg
IHJlc3VsdCA9IGVtaXRBdG9taWNMb2FkT3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJl
cGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2Vzcyhv
cCkpLCBvZmZzZXQpOworICAgICAgICByZXN1bHQgPSBwdXNoKGVtaXRBdG9taWNMb2FkT3Aob3As
IHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBvZmZz
ZXQsIHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNzKG9wKSksIG9mZnNldCkpOwogCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY1N0b3Jl
T3AoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9p
bnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCitpbmxpbmUgdm9p
ZCBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWljU3RvcmVPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5
cGUgdmFsdWVUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUqIHZhbHVlLCB1aW50MzJfdCB1b2Zm
c2V0KQogewogICAgIHBvaW50ZXIgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3Bz
KG9wLCBwb2ludGVyLCB1b2Zmc2V0KTsKIApAQCAtMTU3MywxMiArMTg3MSwxMiBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmF0b21pY1N0b3JlKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5
cGUsIEV4cHJlc3Npb25UeQogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGpp
dCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOwogICAgICAgICB9KTsK
ICAgICB9IGVsc2UKLSAgICAgICAgZW1pdEF0b21pY1N0b3JlT3Aob3AsIHZhbHVlVHlwZSwgZW1p
dENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1l
bW9yeUFjY2VzcyhvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKKyAgICAgICAgZW1pdEF0b21pY1N0b3Jl
T3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIp
LCBvZmZzZXQsIHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNzKG9wKSksIGdldCh2YWx1ZSksIG9m
ZnNldCk7CiAKICAgICByZXR1cm4geyB9OwogfQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0
b3I6OmVtaXRBdG9taWNCaW5hcnlSTVdPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVU
eXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMy
X3QgdW9mZnNldCkKK2lubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdEF0b21pY0JpbmFy
eVJNV09wKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVy
LCBWYWx1ZSogdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCiB7CiAgICAgcG9pbnRlciA9IGZpeHVw
UG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNPcHMob3AsIHBvaW50ZXIsIHVvZmZzZXQpOwogCkBA
IC0xNjYzLDIyICsxOTYxLDIyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljQmluYXJ5Uk1X
KEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3NpCiAKICAgICAgICAg
c3dpdGNoICh2YWx1ZVR5cGUua2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6Ci0g
ICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChJbnQzMiwgMCk7CisgICAgICAgICAgICByZXN1
bHQgPSBwdXNoKGNvbnN0YW50KEludDMyLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBUeXBlS2luZDo6STY0OgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50
NjQsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQ2NCwgMCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZW1pdEF0b21pY0JpbmFyeVJNV09wKG9wLCB2YWx1
ZVR5cGUsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9m
QXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgdmFsdWUsIG9mZnNldCk7CisgICAgICAgIHJlc3Vs
dCA9IHB1c2goZW1pdEF0b21pY0JpbmFyeVJNV09wKG9wLCB2YWx1ZVR5cGUsIGVtaXRDaGVja0Fu
ZFByZXBhcmVQb2ludGVyKGdldChwb2ludGVyKSwgb2Zmc2V0LCBzaXplT2ZBdG9taWNPcE1lbW9y
eUFjY2VzcyhvcCkpLCBnZXQodmFsdWUpLCBvZmZzZXQpKTsKIAogICAgIHJldHVybiB7IH07CiB9
CiAKLVZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0
b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4
cHJlc3Npb25UeXBlIGV4cGVjdGVkLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9m
ZnNldCkKK1ZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4
dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSog
ZXhwZWN0ZWQsIFZhbHVlKiB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBwb2ludGVy
ID0gZml4dXBQb2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhvcCwgcG9pbnRlciwgdW9mZnNl
dCk7CiAKQEAgLTE3ODgsMzYgKzIwODYsNDEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWND
b21wYXJlRXhjaGFuZ2UoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXgKIAog
ICAgICAgICBzd2l0Y2ggKHZhbHVlVHlwZS5raW5kKSB7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6
OkkzMjoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDMyLCAwKTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50MzIsIDApKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJNjQ6Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25z
dGFudChJbnQ2NCwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50KEludDY0
LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgIH0gZWxzZQotICAgICAgICByZXN1bHQgPSBlbWl0QXRvbWljQ29tcGFyZUV4Y2hh
bmdlKG9wLCB2YWx1ZVR5cGUsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9m
ZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgZXhwZWN0ZWQsIHZhbHVlLCBv
ZmZzZXQpOworICAgICAgICByZXN1bHQgPSBwdXNoKGVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2Uo
b3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBv
ZmZzZXQsIHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNzKG9wKSksIGdldChleHBlY3RlZCksIGdl
dCh2YWx1ZSksIG9mZnNldCkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2Vu
ZXJhdG9yOjphdG9taWNXYWl0KEV4dEF0b21pY09wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9p
bnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHRpbWVvdXQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KEV4dEF0b21pY09wVHlwZSBvcCwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlclZhciwgRXhwcmVzc2lvblR5cGUgdmFsdWVWYXIsIEV4cHJlc3Npb25UeXBl
IHRpbWVvdXRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4g
UGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBwb2ludGVyID0gZ2V0KHBvaW50ZXJWYXIpOwor
ICAgIFZhbHVlKiB2YWx1ZSA9IGdldCh2YWx1ZVZhcik7CisgICAgVmFsdWUqIHRpbWVvdXQgPSBn
ZXQodGltZW91dFZhcik7CisgICAgVmFsdWUqIHJlc3VsdFZhbHVlID0gbnVsbHB0cjsKICAgICBp
ZiAob3AgPT0gRXh0QXRvbWljT3BUeXBlOjpNZW1vcnlBdG9taWNXYWl0MzIpIHsKLSAgICAgICAg
cmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIElu
dDMyLCBvcmlnaW4oKSwKKyAgICAgICAgcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAogICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NZW1vcnlBdG9taWNXYWl0
MzIpKSwKICAgICAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgcG9pbnRlciwgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG9mZnNldCksIHZh
bHVlLCB0aW1lb3V0KTsKICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAorICAg
ICAgICByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4o
bV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbk1lbW9yeUF0b21pY1dhaXQ2NCkpLAogICAgICAgICAgICAg
aW5zdGFuY2VWYWx1ZSgpLCBwb2ludGVyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSwgdmFsdWUsIHRpbWVvdXQpOwogICAg
IH0KIAogICAgIHsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChyZXN1bHRWYWx1ZSk7CiAgICAgICAg
IENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVl
PihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCByZXN1bHQsIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkp
OworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBM
ZXNzVGhhbiwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2so
aml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CkBAIC0xODI5LDEz
ICsyMTMyLDEzIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljV2FpdChFeHRBdG9taWNPcFR5
cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlCiAKIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YXRvbWljTm90aWZ5KEV4dEF0b21pY09wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
RXhwcmVzc2lvblR5cGUgY291bnQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9m
ZnNldCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCisgICAgVmFsdWUq
IHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3By
b2MsIEludDMyLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25NZW1vcnlBdG9taWNOb3RpZnkpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1
ZSgpLCBwb2ludGVyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSwgY291bnQpOwotCisgICAgICAgIGluc3RhbmNlVmFsdWUo
KSwgZ2V0KHBvaW50ZXIpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSwgZ2V0KGNvdW50KSk7CiAgICAgeworICAgICAgICBy
ZXN1bHQgPSBwdXNoKHJlc3VsdFZhbHVlKTsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdp
bigpLAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBMZXNzVGhhbiwgb3JpZ2luKCksIHJlc3VsdCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7CisgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgcmVz
dWx0VmFsdWUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCAwKSkpOwogCiAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAg
ICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91
dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKQEAgLTE4NTEsOCArMjE1NCw5IEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YXRvbWljRmVuY2UoRXh0QXRvbWljT3BUeXBlLCB1aW50OF90KSAtPiBQYXJ0aWFs
UmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjp0cnVuY1Nh
dHVyYXRlZChFeHQxT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQsIFR5cGUgcmV0dXJuVHlwZSwgVHlwZSkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBC
M0lSR2VuZXJhdG9yOjp0cnVuY1NhdHVyYXRlZChFeHQxT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlw
ZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIFR5cGUgcmV0dXJuVHlwZSwgVHlwZSkg
LT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBW
YWx1ZSogbWF4RmxvYXQgPSBudWxscHRyOwogICAgIFZhbHVlKiBtaW5GbG9hdCA9IG51bGxwdHI7
CiAgICAgVmFsdWUqIHNpZ25CaXRDb25zdGFudCA9IG51bGxwdHI7CkBAIC0yMDAyLDI2ICsyMzA2
LDI2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6dHJ1bmNTYXR1cmF0ZWQoRXh0MU9wVHlwZSBvcCwg
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6
OlNlbGVjdCwgb3JpZ2luKCksCisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLAogICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4o
KSwgYXJnLCBtaW5GbG9hdCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBt
YXhGbG9hdCksCiAgICAgICAgICAgICBwYXRjaHBvaW50LCBtYXhSZXN1bHQpLAotICAgICAgICBy
ZXF1aXJlc05hTkNoZWNrID8gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIGFyZywgYXJnKSwgbWluUmVzdWx0LCB6ZXJvKSA6IG1p
blJlc3VsdCk7CisgICAgICAgIHJlcXVpcmVzTmFOQ2hlY2sgPyBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgYXJnLCBhcmcpLCBt
aW5SZXN1bHQsIHplcm8pIDogbWluUmVzdWx0KSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCiBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4
cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBjb25kaXRp
b24sIG5vblplcm8sIHplcm8pOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgZ2V0KGNvbmRpdGlv
biksIGdldChub25aZXJvKSwgZ2V0KHplcm8pKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogQjNJ
UkdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgQjNJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoVHlw
ZSB0eXBlLCB1aW50NjRfdCB2YWx1ZSkKIHsKIAotICAgIHJldHVybiBjb25zdGFudCh0b0IzVHlw
ZSh0eXBlKSwgdmFsdWUpOworICAgIHJldHVybiBwdXNoKGNvbnN0YW50KHRvQjNUeXBlKHR5cGUp
LCB2YWx1ZSkpOwogfQogCiB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRFbnRyeVRpZXJVcENoZWNr
KCkKQEAgLTIwODIsMjAgKzIzODYsMjEgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0TG9vcFRp
ZXJVcENoZWNrKHVpbnQzMl90IGxvb3BJbmRleCwgY29uc3QgU3RhY2smIGVuY2xvc2kKIAogICAg
IFZhbHVlKiBjb3VudERvd25Mb2NhdGlvbiA9IGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KCZtX3RpZXJVcC0+bV9jb3VudGVyKSwgb3JpZ2luKTsKIAotICAg
IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4gc3RhY2ttYXA7Ci0gICAgZm9yIChhdXRvJiBsb2NhbCA6
IG1fbG9jYWxzKSB7Ci0gICAgICAgIFZhbHVlKiByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luLCBsb2NhbCk7Ci0g
ICAgICAgIHN0YWNrbWFwLmFwcGVuZChyZXN1bHQpOwotICAgIH0KKyAgICBWZWN0b3I8VmFsdWUq
PiBzdGFja21hcDsKKyAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCisgICAgICAgIHN0
YWNrbWFwLmFwcGVuZChnZXQobG9jYWwpKTsKICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRl
eCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsr
Y29udHJvbEluZGV4KSB7CisgICAgICAgIGF1dG8mIGRhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0
YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKICAgICAgICAgYXV0byYgZXhwcmVzc2lv
blN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRF
eHByZXNzaW9uU3RhY2s7CiAgICAgICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVlIDogZXhw
cmVzc2lvblN0YWNrKQotICAgICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHZhbHVlKTsKKyAgICAg
ICAgICAgIHN0YWNrbWFwLmFwcGVuZChnZXQodmFsdWUpKTsKKyAgICAgICAgaWYgKENvbnRyb2xU
eXBlOjppc0FueUNhdGNoKGRhdGEpKQorICAgICAgICAgICAgc3RhY2ttYXAuYXBwZW5kKGdldChk
YXRhLmV4Y2VwdGlvbigpKSk7CiAgICAgfQogICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVl
IDogZW5jbG9zaW5nU3RhY2spCi0gICAgICAgIHN0YWNrbWFwLmFwcGVuZCh2YWx1ZSk7CisgICAg
ICAgIHN0YWNrbWFwLmFwcGVuZChnZXQodmFsdWUpKTsKICAgICBmb3IgKFR5cGVkRXhwcmVzc2lv
biB2YWx1ZSA6IG5ld1N0YWNrKQotICAgICAgICBzdGFja21hcC5hcHBlbmQodmFsdWUpOworICAg
ICAgICBzdGFja21hcC5hcHBlbmQoZ2V0KHZhbHVlKSk7CiAKICAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNoID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJv
YywgQjM6OlZvaWQsIG9yaWdpbik7CiAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9u
ZSgpOwpAQCAtMjE0MCw5MyArMjQ0NSw3MiBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRMb29w
VGllclVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4LCBjb25zdCBTdGFjayYgZW5jbG9zaQogICAg
IH0pOwogfQogCitWYWx1ZSogQjNJUkdlbmVyYXRvcjo6bG9hZEZyb21TY3JhdGNoQnVmZmVyKHVu
c2lnbmVkJiBpbmRleEluQnVmZmVyLCBWYWx1ZSogcG9pbnRlciwgQjM6OlR5cGUgdHlwZSkKK3sK
KyAgICBzaXplX3Qgb2Zmc2V0ID0gc2l6ZW9mKHVpbnQ2NF90KSAqIGluZGV4SW5CdWZmZXIrKzsK
KyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlLmlzTnVtZXJpYygpKTsKKyAgICByZXR1cm4gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0eXBlLCBvcmln
aW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKK30KKwordm9pZCBCM0lSR2VuZXJhdG9yOjpjb25uZWN0
Q29udHJvbEVudHJ5KHVuc2lnbmVkJiBpbmRleEluQnVmZmVyLCBWYWx1ZSogcG9pbnRlciwgQ29u
dHJvbERhdGEmIGRhdGEsIFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xEYXRhJiBjdXJy
ZW50RGF0YSwgYm9vbCBmaWxsTG9vcFBoaXMpCit7CisgICAgLy8gRm9yIGVhY2ggc3RhY2sgZW50
cnkgZW5jbG9zZWQgYnkgdGhpcyBsb29wIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgdmFsdWUgd2l0
aCBhIHBoaSBzbyB3ZSBjYW4gZmlsbCBpdCBvbiBPU1IgZW50cnkuCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCk7IGkrKykgeworICAgICAgICBUeXBl
ZEV4cHJlc3Npb24gdmFsdWUgPSBleHByZXNzaW9uU3RhY2tbaV07CisgICAgICAgIGF1dG8qIGxv
YWQgPSBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgdmFsdWUt
PnR5cGUoKSk7CisgICAgICAgIGlmIChmaWxsTG9vcFBoaXMpCisgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgbG9hZCwg
ZGF0YS5waGlzW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgb3JpZ2luKCksIHZhbHVlLnZh
bHVlKCksIGxvYWQpOworICAgIH0KKyAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0
YSkgJiYgJmRhdGEgIT0gJmN1cnJlbnREYXRhKSB7CisgICAgICAgIGF1dG8qIGxvYWQgPSBsb2Fk
RnJvbVNjcmF0Y2hCdWZmZXIoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgcG9pbnRlclR5cGUoKSk7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9j
LCBTZXQsIG9yaWdpbigpLCBkYXRhLmV4Y2VwdGlvbigpLCBsb2FkKTsKKyAgICB9Cit9OworCiBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFj
ayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBibG9jaywgU3RhY2smIG5ld1N0YWNrLCB1
aW50MzJfdCBsb29wSW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBCYXNpY0Jsb2NrKiBi
b2R5ID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9wcm9jLmFkZEJsb2NrKCk7CiAKLSAgICBibG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3Jp
Z2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJvZHkpOwor
ICAgIGJsb2NrID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9j
a1R5cGU6Okxvb3AsIG1fc3RhY2tTaXplLCBjb250aW51YXRpb24sIGJvZHkpOworCiAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gZW5jbG9zaW5nU3RhY2suc2l6ZSgpIC0gc2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlID0gZW5jbG9z
aW5nU3RhY2suYXQob2Zmc2V0ICsgaSk7Ci0gICAgICAgIGF1dG8qIHVwc2lsb24gPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUp
OwogICAgICAgICBWYWx1ZSogcGhpID0gYmxvY2sucGhpc1tpXTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGdldCh2YWx1
ZSksIHBoaSk7CiAgICAgICAgIGJvZHktPmFwcGVuZChwaGkpOwotICAgICAgICB1cHNpbG9uLT5z
ZXRQaGkocGhpKTsKLSAgICAgICAgbmV3U3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHZhbHVlLnR5
cGUoKSwgcGhpKTsKKyAgICAgICAgc2V0KGJvZHksIHZhbHVlLCBwaGkpOworICAgICAgICBuZXdT
dGFjay5hcHBlbmQodmFsdWUpOwogICAgIH0KKyAgICBlbmNsb3NpbmdTdGFjay5zaHJpbmsob2Zm
c2V0KTsKIAogICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBKdW1wLCBvcmlnaW4oKSwgYm9keSk7CiAgICAgaWYgKGxvb3BJbmRleCA9PSBtX2xvb3BJbmRl
eEZvck9TUkVudHJ5KSB7CiAgICAgICAgIGRhdGFMb2dMbklmKFdhc21CM0lSR2VuZXJhdG9ySW50
ZXJuYWw6OnZlcmJvc2UsICJTZXR0aW5nIHVwIGZvciBPU1IgZW50cnkiKTsKIAotICAgICAgICBt
X2N1cnJlbnRCbG9jayA9IG1fcm9vdEJsb2NrOwotICAgICAgICBWYWx1ZSogcG9pbnRlciA9IG1f
cm9vdEJsb2NrLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Jvb3RC
bG9ja3NbMF07CisgICAgICAgIFZhbHVlKiBwb2ludGVyID0gbV9yb290QmxvY2tzWzBdLT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKIAogICAgICAgICB1bnNpZ25lZCBpbmRleEluQnVmZmVyID0gMDsKLSAgICAgICAg
YXV0byBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIgPSBbJl0gKEIzOjpUeXBlIHR5cGUpIHsKLSAgICAg
ICAgICAgIHNpemVfdCBvZmZzZXQgPSBzaXplb2YodWludDY0X3QpICogaW5kZXhJbkJ1ZmZlcisr
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodHlwZS5pc051bWVyaWMoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBMb2FkLCB0eXBlLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKLSAgICAgICAgfTsKIAog
ICAgICAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCi0gICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwg
bG9jYWwsIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihsb2NhbC0+dHlwZSgpKSk7Ci0KLSAgICAgICAg
YXV0byBjb25uZWN0Q29udHJvbEVudHJ5ID0gWyZdKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBT
dGFjayYgZXhwcmVzc2lvblN0YWNrKSB7Ci0gICAgICAgICAgICAvLyBGb3IgZWFjaCBzdGFjayBl
bnRyeSBlbmNsb3NlZCBieSB0aGlzIGxvb3Agd2UgbmVlZCB0byByZXBsYWNlIHRoZSB2YWx1ZSB3
aXRoIGEgcGhpIHNvIHdlIGNhbiBmaWxsIGl0IG9uIE9TUiBlbnRyeS4KLSAgICAgICAgICAgIEJh
c2ljQmxvY2sqIHNvdXJjZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJs
b2NrSW5kZXggPSAwOwotICAgICAgICAgICAgQjM6Okluc2VydGlvblNldCBpbnNlcnRpb25TZXQo
bV9wcm9jKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHByZXNzaW9u
U3RhY2suc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFs
dWUgPSBleHByZXNzaW9uU3RhY2tbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5pc0Nv
bnN0YW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgKytpbmRleEluQnVmZmVyOwotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWUtPm93bmVyICE9IHNvdXJjZUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2VCbG9jaykKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5leGVjdXRlKHNvdXJjZUJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluc2Vy
dGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNt
QjNJUkdlbmVyYXRvckludGVybmFsOjp2ZXJib3NlICYmIHNvdXJjZUJsb2NrLCAiRXhlY3V0ZWQg
aW5zZXJ0aW9uIHNldCBpbnRvOiAiLCAqc291cmNlQmxvY2spOwotICAgICAgICAgICAgICAgICAg
ICBibG9ja0luZGV4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlQmxvY2sgPSB2YWx1
ZS0+b3duZXI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgd2hpbGUgKHNv
dXJjZUJsb2NrLT5hdChibG9ja0luZGV4KyspICE9IHZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoYmxvY2tJbmRleCA8IHNvdXJjZUJsb2NrLT5zaXplKCkpOwotICAgICAgICAgICAg
ICAgIEFTU0VSVChzb3VyY2VCbG9jay0+YXQoYmxvY2tJbmRleCAtIDEpID09IHZhbHVlKTsKLQot
ICAgICAgICAgICAgICAgIGF1dG8qIHBoaSA9IGRhdGEuY29udGludWF0aW9uLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgUGhpLCAgdmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpKTsKLSAg
ICAgICAgICAgICAgICBleHByZXNzaW9uU3RhY2tbaV0gPSBUeXBlZEV4cHJlc3Npb24geyB2YWx1
ZS50eXBlKCksIHBoaSB9OwotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIHZhbHVlLT5vcmlnaW4oKSwgbG9hZEZyb21TY3JhdGNo
QnVmZmVyKHZhbHVlLT50eXBlKCkpLCBwaGkpOwotCi0gICAgICAgICAgICAgICAgYXV0byogc291
cmNlVXBzaWxvbiA9IG1fcHJvYy5hZGQ8VXBzaWxvblZhbHVlPih2YWx1ZS0+b3JpZ2luKCksIHZh
bHVlLCBwaGkpOwotICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRWYWx1ZShibG9j
a0luZGV4LCBzb3VyY2VVcHNpbG9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChz
b3VyY2VCbG9jaykKLSAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShzb3VyY2VC
bG9jayk7Ci0gICAgICAgIH07CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgbG9jYWwsIGxvYWRGcm9tU2Ny
YXRjaEJ1ZmZlcihpbmRleEluQnVmZmVyLCBwb2ludGVyLCBsb2NhbC0+dHlwZSgpKSk7CiAKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3Bh
cnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgewogICAgICAgICAg
ICAgYXV0byYgZGF0YSA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmNv
bnRyb2xEYXRhOwogICAgICAgICAgICAgYXV0byYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXIt
PmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7Ci0g
ICAgICAgICAgICBjb25uZWN0Q29udHJvbEVudHJ5KGRhdGEsIGV4cHJlc3Npb25TdGFjayk7Cisg
ICAgICAgICAgICBjb25uZWN0Q29udHJvbEVudHJ5KGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIGRh
dGEsIGV4cHJlc3Npb25TdGFjaywgYmxvY2spOwogICAgICAgICB9Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBlbmNsb3NpbmdTdGFjay5hdChvZmZzZXQg
KyBpKTsKLSAgICAgICAgICAgIFZhbHVlKiBwaGkgPSBibG9jay5waGlzW2ldOwotICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgdmFsdWUt
Pm9yaWdpbigpLCBsb2FkRnJvbVNjcmF0Y2hCdWZmZXIodmFsdWUtPnR5cGUoKSksIHBoaSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZW5jbG9zaW5nU3RhY2suc2hyaW5rKG9mZnNldCk7Ci0gICAgICAg
IGNvbm5lY3RDb250cm9sRW50cnkoYmxvY2ssIGVuY2xvc2luZ1N0YWNrKTsKKyAgICAgICAgY29u
bmVjdENvbnRyb2xFbnRyeShpbmRleEluQnVmZmVyLCBwb2ludGVyLCBibG9jaywgZW5jbG9zaW5n
U3RhY2ssIGJsb2NrKTsKKyAgICAgICAgY29ubmVjdENvbnRyb2xFbnRyeShpbmRleEluQnVmZmVy
LCBwb2ludGVyLCBibG9jaywgbmV3U3RhY2ssIGJsb2NrLCB0cnVlKTsKIAogICAgICAgICBtX29z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSBpbmRleEluQnVmZmVyOwogICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGJv
ZHkpOwogICAgICAgICBib2R5LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGVuY2xvc2luZ1N0YWNrLnNocmluayhvZmZzZXQpOworICAgIH0KIAog
ICAgIG1fY3VycmVudEJsb2NrID0gYm9keTsKICAgICBlbWl0TG9vcFRpZXJVcENoZWNrKGxvb3BJ
bmRleCwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKQEAgLTIyMzUsNyArMjUxOSw3IEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNr
JiBlbmNsb3NpbmdTdGFjaywgQ29uCiAKIEIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEIzSVJH
ZW5lcmF0b3I6OmFkZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkKIHsKLSAgICBy
ZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBPcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6
OlRvcExldmVsLCBtX3Byb2MuYWRkQmxvY2soKSk7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG1f
cHJvYywgT3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpUb3BMZXZlbCwgbV9zdGFja1Np
emUsIG1fcHJvYy5hZGRCbG9jaygpKTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRCbG9j
ayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJv
bFR5cGUmIG5ld0Jsb2NrLCBTdGFjayYgbmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKQEAgLTIy
NDMsNyArMjUyNyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQmxvY2soQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvCiAgICAgQmFzaWNCbG9jayog
Y29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAKICAgICBzcGxpdFN0YWNrKHNpZ25h
dHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKLSAgICBuZXdCbG9jayA9IENvbnRyb2xE
YXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywgY29udGlu
dWF0aW9uKTsKKyAgICBuZXdCbG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNp
Z25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywgbV9zdGFja1NpemUsIGNvbnRpbnVhdGlvbik7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMjI1NSwyMCArMjUzOSwyMCBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgQmxvY2tTaWduYXR1cmUgc2ln
bmF0dXJlLCBTdAogICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7
CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAKLSAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9y
aWdpbigpLCBjb25kaXRpb24pOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGdldChjb25kaXRpb24pKTsKICAgICBtX2N1
cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sodGFrZW4pLCBGcmVxdWVu
dGVkQmxvY2sobm90VGFrZW4pKTsKICAgICB0YWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50
QmxvY2spOwogICAgIG5vdFRha2VuLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CiAK
ICAgICBtX2N1cnJlbnRCbG9jayA9IHRha2VuOwogICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBl
bmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwotICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG1fcHJv
Yywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpJZiwgY29udGludWF0aW9uLCBub3RU
YWtlbik7CisgICAgcmVzdWx0ID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0
dXJlLCBCbG9ja1R5cGU6OklmLCBtX3N0YWNrU2l6ZSwgY29udGludWF0aW9uLCBub3RUYWtlbik7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRy
b2xEYXRhJiBkYXRhLCBjb25zdCBTdGFjayYgY3VycmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0
CiB7Ci0gICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnBoaXMpOwor
ICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0YSk7CiAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBk
YXRhLmNvbnRpbnVhdGlvbik7CiAgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEp
OwogfQpAQCAtMjI3NiwxMSArMjU2MCwyNDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNl
KENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBTdGFjayYgY3VycmVudFN0YWNrKSAtPiBQYXIKIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9j
a1R5cGU6OklmKTsKKyAgICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCkgKyBkYXRhLm1f
c2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNw
ZWNpYWw7CiAgICAgZGF0YS5jb252ZXJ0SWZUb0Jsb2NrKCk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBT
dGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFj
aykgLT4gUGFydGlhbFJlc3VsdAoreworICAgICsrbV90cnlEZXB0aDsKKworICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgIHNwbGl0U3RhY2soc2ln
bmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOworICAgIHJlc3VsdCA9IENvbnRyb2xE
YXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpUcnksIG1fc3RhY2tT
aXplLCBjb250aW51YXRpb24sICsrbV9jYWxsU2l0ZUluZGV4LCBtX3RyeURlcHRoKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkIGV4
Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgU3RhY2smIGN1cnJlbnRT
dGFjaywgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEpOwor
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBv
cmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRDYXRjaFRvVW5yZWFj
aGFibGUoZXhjZXB0aW9uSW5kZXgsIHNpZ25hdHVyZSwgZGF0YSwgcmVzdWx0cyk7Cit9CisKK1Bh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGUgQjNJUkdlbmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRG
b3JFeGNlcHRpb25zKEJhc2ljQmxvY2sqIGJsb2NrLCBQYXRjaHBvaW50VmFsdWUqIHBhdGNoKQor
eworICAgICsrbV9jYWxsU2l0ZUluZGV4OworICAgIGlmICghbV90cnlEZXB0aCkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxWYWx1ZSo+IHN0YWNrbWFwOworICAgIE9yaWdpbiBv
cmlnaW4gPSB0aGlzLT5vcmlnaW4oKTsKKyAgICBmb3IgKFZhcmlhYmxlKiBsb2NhbCA6IG1fbG9j
YWxzKSB7CisgICAgICAgIFZhbHVlKiByZXN1bHQgPSBibG9jay0+YXBwZW5kTmV3PFZhcmlhYmxl
VmFsdWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luLCBsb2NhbCk7CisgICAgICAgIHN0YWNrbWFw
LmFwcGVuZChyZXN1bHQpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9
IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29u
dHJvbEluZGV4KSB7CisgICAgICAgIENvbnRyb2xEYXRhJiBkYXRhID0gbV9wYXJzZXItPmNvbnRy
b2xTdGFjaygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7CisgICAgICAgIFN0YWNrJiBleHBy
ZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgZm9yIChWYXJpYWJsZSogdmFsdWUgOiBleHBy
ZXNzaW9uU3RhY2spCisgICAgICAgICAgICBzdGFja21hcC5hcHBlbmQoZ2V0KGJsb2NrLCB2YWx1
ZSkpOworICAgICAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpCisgICAgICAg
ICAgICBzdGFja21hcC5hcHBlbmQoZ2V0KGJsb2NrLCBkYXRhLmV4Y2VwdGlvbigpKSk7CisgICAg
fQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gcGF0Y2gtPm51bUNoaWxkcmVuKCk7CisgICAgaWYg
KHBhdGNoLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgb2Zmc2V0Kys7CisKKyAgICBwYXRjaC0+
ZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKyAgICBwYXRjaC0+YXBwZW5kVmVjdG9yV2l0
aFJlcChzdGFja21hcCwgVmFsdWVSZXA6OkxhdGVDb2xkQW55KTsKKworICAgIHJldHVybiBQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlIHsgbV9jYWxsU2l0ZUluZGV4LCBvZmZzZXQgfTsKK30KKwor
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0
aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgZGF0YSwg
UmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFZhbHVlKiBvcGVy
YXRpb25SZXN1bHQgPSBlbWl0Q2F0Y2hJbXBsKENhdGNoS2luZDo6Q2F0Y2gsIGRhdGEsIGV4Y2Vw
dGlvbkluZGV4KTsKKyAgICBWYWx1ZSogcGF5bG9hZCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyVHlwZSgpLCBvcGVyYXRp
b25SZXN1bHQsIDEpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFyZ3Vt
ZW50KGkpOworICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKHR5cGUpLCBvcmlnaW4oKSwgcGF5
bG9hZCwgaSAqIHNpemVvZih1aW50NjRfdCkpOworICAgICAgICByZXN1bHRzLmFwcGVuZChwdXNo
KHZhbHVlKSk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQ2F0Y2hBbGwoU3RhY2smIGN1cnJlbnRTdGFjaywgQ29udHJvbFR5cGUmIGRhdGEpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ss
IGRhdGEpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBKdW1wLCBvcmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRDYXRj
aEFsbFRvVW5yZWFjaGFibGUoZGF0YSk7Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2F0
Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgZW1pdENhdGNoSW1wbChDYXRjaEtpbmQ6OkNhdGNoQWxsLCBkYXRhKTsKKyAgICByZXR1
cm4geyB9OworfQorCitWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENhdGNoSW1wbChDYXRjaEtp
bmQga2luZCwgQ29udHJvbFR5cGUmIGRhdGEsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4KQorewor
ICAgIG1faGFzQ2F0Y2ggPSB0cnVlOworICAgIG1fY3VycmVudEJsb2NrID0gbV9wcm9jLmFkZEJs
b2NrKCk7CisgICAgbV9yb290QmxvY2tzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CisgICAgbV9z
dGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOworCisgICAgaWYgKENvbnRyb2xUeXBlOjppc1Ry
eShkYXRhKSkgeworICAgICAgICBpZiAoa2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoKQorICAgICAg
ICAgICAgZGF0YS5jb252ZXJ0VHJ5VG9DYXRjaCgrK21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFk
ZFZhcmlhYmxlKHBvaW50ZXJUeXBlKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0
YS5jb252ZXJ0VHJ5VG9DYXRjaEFsbCgrK21fY2FsbFNpdGVJbmRleCwgbV9wcm9jLmFkZFZhcmlh
YmxlKHBvaW50ZXJUeXBlKCkpKTsKKyAgICB9CisKKyAgICBIYW5kbGVyVHlwZSBoYW5kbGVyVHlw
ZSA9IGtpbmQgPT0gQ2F0Y2hLaW5kOjpDYXRjaCA/IEhhbmRsZXJUeXBlOjpDYXRjaCA6IEhhbmRs
ZXJUeXBlOjpDYXRjaEFsbDsKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IGhhbmRs
ZXJUeXBlLCBkYXRhLnRyeVN0YXJ0KCksIGRhdGEudHJ5RW5kKCksIDAsIG1fdHJ5RGVwdGgsIGV4
Y2VwdGlvbkluZGV4IH0pOworCisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVz
dG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgp
LCBtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBmYWxzZSk7CisKKyAgICBWYWx1ZSogcG9pbnRlciA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4obV9wcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKworICAgIHVuc2lnbmVkIGluZGV4SW5CdWZm
ZXIgPSAwOworCisgICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKQorICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4o
KSwgbG9jYWwsIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihpbmRleEluQnVmZmVyLCBwb2ludGVyLCBs
b2NhbC0+dHlwZSgpKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNv
bnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbElu
ZGV4KSB7CisgICAgICAgIGF1dG8mIGNvbnRyb2xEYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFj
aygpW2NvbnRyb2xJbmRleF0uY29udHJvbERhdGE7CisgICAgICAgIGF1dG8mIGV4cHJlc3Npb25T
dGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrOworICAgICAgICBjb25uZWN0Q29udHJvbEVudHJ5KGluZGV4SW5CdWZmZXIs
IHBvaW50ZXIsIGNvbnRyb2xEYXRhLCBleHByZXNzaW9uU3RhY2ssIGRhdGEpOworICAgIH0KKwor
ICAgIFBhdGNocG9pbnRWYWx1ZSogcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgbV9wcm9jLmFkZFR1cGxlKHsgcG9pbnRlclR5cGUoKSwg
cG9pbnRlclR5cGUoKSB9KSwgb3JpZ2luKCkpOworICAgIHJlc3VsdC0+ZWZmZWN0cy5leGl0c1Np
ZGV3YXlzID0gdHJ1ZTsKKyAgICByZXN1bHQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2Ny
YXRjaFJlZ2lzdGVycygpKTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyTGF0ZSA9IFJlZ2lzdGVy
U2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpOworICAgIGNsb2JiZXJMYXRlLmFkZChH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJlc3VsdC0+Y2xvYmJlckxhdGUoY2xvYmJlckxh
dGUpOworICAgIHJlc3VsdC0+YXBwZW5kKGluc3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVS
ZWdpc3Rlcik7CisgICAgcmVzdWx0LT5yZXN1bHRDb25zdHJhaW50cy5hcHBlbmQoVmFsdWVSZXA6
OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJlc3VsdC0+cmVzdWx0Q29uc3Ry
YWludHMuYXBwZW5kKFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7Cisg
ICAgcmVzdWx0LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBqaXQubW92ZShwYXJh
bXNbMl0uZ3ByKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uV2FzbVJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSkpOworICAgICAgICB9
KTsKKyAgICB9KTsKKworICAgIFZhbHVlKiBleGNlcHRpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRlclR5cGUoKSwgcmVz
dWx0LCAwKTsKKyAgICBzZXQoZGF0YS5leGNlcHRpb24oKSwgZXhjZXB0aW9uKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUoQ29udHJv
bFR5cGUmIHRhcmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXR1cm4gYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKHRhcmdldCwgZGF0YSk7Cit9CisKK2F1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiB0
YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5zaWdu
ZWQgdGFyZ2V0RGVwdGggPSAwOworICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkodGFyZ2V0KSkK
KyAgICAgICAgdGFyZ2V0RGVwdGggPSB0YXJnZXQudHJ5RGVwdGgoKTsKKworICAgIG1fZXhjZXB0
aW9uSGFuZGxlcnMuYXBwZW5kKHsgSGFuZGxlclR5cGU6OkRlbGVnYXRlLCBkYXRhLnRyeVN0YXJ0
KCksICsrbV9jYWxsU2l0ZUluZGV4LCAwLCBtX3RyeURlcHRoLCB0YXJnZXREZXB0aCB9KTsKKyAg
ICByZXR1cm4geyB9OworfQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRocm93KHVuc2lnbmVk
IGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gbV9wcm9jLmFk
ZDxQYXRjaHBvaW50VmFsdWU+KEIzOjpWb2lkLCBvcmlnaW4oKSk7CisgICAgcGF0Y2gtPmVmZmVj
dHMudGVybWluYWwgPSB0cnVlOworICAgIHBhdGNoLT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBW
YWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgIHBhdGNoLT5hcHBlbmQo
ZnJhbWVQb2ludGVyKCksIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHBh
dGNoLT5hcHBlbmQoZ2V0KGFyZ3NbaV0pLCBWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXIgPSBSZWdpc3Rl
clNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCk7CisgICAgY2xvYmJlci5hZGQoR1BSSW5mbzo6
YXJndW1lbnRHUFIyKTsKKyAgICBjbG9iYmVyLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjMpOwor
ICAgIHBhdGNoLT5jbG9iYmVyKGNsb2JiZXIpOworICAgIHBhdGNoLT5jbG9iYmVyTGF0ZShSZWdp
c3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisgICAgcGF0Y2gtPm51bUdQ
U2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5k
bGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMobV9jdXJyZW50QmxvY2ssIHBhdGNo
KTsKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBleGNlcHRpb25JbmRleCwgaGFuZGxl
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgw
KTsKKyAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKKworICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0Nh
bGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQ
cmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICAgICAgaml0LmFuZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNj
cmF0Y2gpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNj
cmF0Y2gsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6
Om9mZnNldE9mVk0oKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0g
aml0Lmp1bXAoKTsKKworICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmpp
dCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aCwgUHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0
T2ZWTSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOworCisg
ICAgICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0KKyAgICAgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7
CisKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihleGNlcHRp
b25JbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIGppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJU
YWcpOworICAgICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0
aW9uSGFuZGxlclB0clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21UaHJvdykpOworICAgICAg
ICB9KTsKKyAgICB9KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHBhdGNoKTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25l
ZCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNoID0gbV9wcm9jLmFkZDxQYXRjaHBvaW50VmFsdWU+KEIzOjpWb2lkLCBvcmln
aW4oKSk7CisgICAgcGF0Y2gtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lz
dGVycygpKTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyTGF0ZTsKKyAgICBjbG9iYmVyTGF0ZS5h
ZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKKyAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIy
KTsKKyAgICBwYXRjaC0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7CisgICAgcGF0Y2gtPmFwcGVu
ZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7
CisgICAgcGF0Y2gtPmFwcGVuZChmcmFtZVBvaW50ZXIoKSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZv
Ojphcmd1bWVudEdQUjEpKTsKKyAgICBwYXRjaC0+YXBwZW5kKGdldChkYXRhLmV4Y2VwdGlvbigp
KSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQUjIpKTsKKyAgICBwYXRjaC0+bnVt
R1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhh
bmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhtX2N1cnJlbnRCbG9jaywgcGF0
Y2gpOworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3RoaXMsIGhhbmRsZV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwor
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKKyAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
SW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSksIHNjcmF0Y2gpOworICAgICAgICB7CisgICAgICAg
ICAgICBhdXRvIHByZWNpc2VBbGxvY2F0aW9uQ2FzZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxs
SGVscGVyczo6Tm9uWmVybywgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJl
Y2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3Jh
dGNoKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3Jh
dGNoLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpv
ZmZzZXRPZlZNKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGpp
dC5qdW1wKCk7CisKKyAgICAgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gs
IFByZWNpc2VBbGxvY2F0aW9uOjpvZmZzZXRPZldlYWtTZXQoKSArIFdlYWtTZXQ6Om9mZnNldE9m
Vk0oKSAtIFByZWNpc2VBbGxvY2F0aW9uOjpoZWFkZXJTaXplKCkpLCBzY3JhdGNoKTsKKworICAg
ICAgICAgICAgbG9hZGVkQ2FzZS5saW5rKCZqaXQpOworICAgICAgICB9CisgICAgICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHNjcmF0Y2gpOwor
CisgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CisgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAg
ICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWcpOworICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmV0aHJvdykpOworICAgICAgICB9KTsKKyAg
ICB9KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHBhdGNoKTsKKworICAgIHJldHVybiB7
IH07Cit9CisKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRh
JiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIENh
bGxJbmZvcm1hdGlvbiB3YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxs
SW5mb3JtYXRpb25Gb3IobV9wYXJzZXItPnNpZ25hdHVyZSgpLCBDYWxsUm9sZTo6Q2FsbGVlKTsK
QEAgLTIzMDAsMTAgKzI4MjAsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29u
c3QgQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPgogICAgICAgICBC
Mzo6VmFsdWVSZXAgcmVwID0gd2FzbUNhbGxJbmZvLnJlc3VsdHNbaV07CiAgICAgICAgIGlmIChy
ZXAuaXNTdGFjaygpKSB7CiAgICAgICAgICAgICBCMzo6VmFsdWUqIGFkZHJlc3MgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QWRkLCBPcmlnaW4oKSwg
ZnJhbWVQb2ludGVyKCksIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHJlcC5vZmZzZXRGcm9tRlAo
KSkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6TWVtb3J5VmFs
dWU+KG1fcHJvYywgQjM6OlN0b3JlLCBPcmlnaW4oKSwgcmV0dXJuVmFsdWVzW29mZnNldCArIGld
LCBhZGRyZXNzKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6Ok1l
bW9yeVZhbHVlPihtX3Byb2MsIEIzOjpTdG9yZSwgT3JpZ2luKCksIGdldChyZXR1cm5WYWx1ZXNb
b2Zmc2V0ICsgaV0pLCBhZGRyZXNzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFT
U0VSVChyZXAuaXNSZWcoKSk7Ci0gICAgICAgICAgICBwYXRjaC0+YXBwZW5kKHJldHVyblZhbHVl
c1tvZmZzZXQgKyBpXSwgcmVwKTsKKyAgICAgICAgICAgIHBhdGNoLT5hcHBlbmQoZ2V0KHJldHVy
blZhbHVlc1tvZmZzZXQgKyBpXSksIHJlcCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIzMTMs
MTIgKzI4MzMsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJv
bERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPgogCiBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZEJyYW5jaChDb250cm9sRGF0YSYgZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgdW5p
ZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnBoaXMpOworICAgIHVuaWZ5VmFs
dWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YSk7CiAKICAgICBCYXNpY0Jsb2NrKiB0YXJn
ZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CiAgICAgaWYgKGNvbmRpdGlvbikgewog
ICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNo
LCBvcmlnaW4oKSwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgZ2V0KGNvbmRpdGlvbikpOwog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sodGFy
Z2V0KSwgRnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikpOwogICAgICAgICB0YXJnZXQtPmFk
ZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKICAgICAgICAgY29udGludWF0aW9uLT5hZGRQ
cmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CkBAIC0yMzMzLDExICsyODUzLDEyIEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIGNvbnN0CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMs
IENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNr
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVU5VU0VEX1BBUkFNKGV4cHJlc3Npb25TdGFjayk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKQotICAgICAg
ICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIHRhcmdldHNbaV0tPnBoaXMp
OwotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGVmYXVsdFRhcmdl
dC5waGlzKTsKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCAq
dGFyZ2V0c1tpXSk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBk
ZWZhdWx0VGFyZ2V0KTsKIAotICAgIFN3aXRjaFZhbHVlKiBzd2l0Y2hWYWx1ZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8U3dpdGNoVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGNvbmRpdGlv
bik7CisgICAgU3dpdGNoVmFsdWUqIHN3aXRjaFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxTd2l0Y2hWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ2V0KGNvbmRpdGlvbikpOwogICAg
IHN3aXRjaFZhbHVlLT5zZXRGYWxsVGhyb3VnaChGcmVxdWVudGVkQmxvY2soZGVmYXVsdFRhcmdl
dC50YXJnZXRCbG9ja0ZvckJyYW5jaCgpKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0
YXJnZXRzLnNpemUoKTsgKytpKQogICAgICAgICBzd2l0Y2hWYWx1ZS0+YXBwZW5kQ2FzZShTd2l0
Y2hDYXNlKGksIEZyZXF1ZW50ZWRCbG9jayh0YXJnZXRzW2ldLT50YXJnZXRCbG9ja0ZvckJyYW5j
aCgpKSkpOwpAQCAtMjM1MSw3ICsyODcyLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjplbmRCbG9j
ayhDb250cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXIKIAog
ICAgIEFTU0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgpID09IGRhdGEuc2lnbmF0dXJlKCktPnJl
dHVybkNvdW50KCkpOwogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpICE9IEJsb2NrVHlwZTo6TG9v
cCkKLSAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkYXRhLnBo
aXMpOworICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEp
OwogCiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1
bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CiAgICAgZGF0YS5jb250aW51YXRpb24t
PmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKQEAgLTIzNjMsMzAgKzI4ODQsMzQgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50
cnksIGNvbnN0IFN0YWNrJiBleHByZXMKIHsKICAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5
LmNvbnRyb2xEYXRhOwogICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5jb250aW51YXRpb247Cisg
ICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOwogCiAgICAgaWYgKGRhdGEuYmxvY2tU
eXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgewogICAgICAgICBkYXRhLnNwZWNpYWwtPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CiAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hZGRQcmVkZWNlc3NvcihkYXRhLnNwZWNpYWwpOwotICAg
IH0KKyAgICB9IGVsc2UgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUcnkgfHwg
ZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoKQorICAgICAgICAtLW1fdHJ5RGVw
dGg7CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5cGU6Okxvb3ApIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJlKCktPnJldHVybkNv
dW50KCk7ICsraSkgewogICAgICAgICAgICAgVmFsdWUqIHJlc3VsdCA9IGRhdGEucGhpc1tpXTsK
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgICAg
IGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChkYXRhLnNp
Z25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpLCByZXN1bHQpOworICAgICAgICAgICAgZW50cnkuZW5j
bG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRhdGEuc2lnbmF0dXJlKCkt
PnJldHVyblR5cGUoaSksIHB1c2gocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICBtX291dGVyTG9vcHMucmVtb3ZlTGFzdCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkpCisgICAgICAgICAgICBpZiAo
aSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICArK21fc3RhY2tT
aXplOwogICAgICAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVu
ZChleHByZXNzaW9uU3RhY2tbaV0pOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIFR5cGUgcmV0dXJuVHlwZSA9IGRhdGEuc2lnbmF0dXJl
KCktPnJldHVyblR5cGUoaSk7Ci0gICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNz
aW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHJldHVyblR5cGUsIGNvbnN0YW50KHRvQjNUeXBl
KHJldHVyblR5cGUpLCAweGJiYWRiZWVmKSk7CisgICAgICAgICAgICAgICAgZW50cnkuZW5jbG9z
ZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHJldHVyblR5cGUsIHB1c2goY29u
c3RhbnQodG9CM1R5cGUocmV0dXJuVHlwZSksIDB4YmJhZGJlZWYpKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKKwogICAgIC8vIFRvcExldmVsIGRvZXMgbm90IGhhdmUgYW55
IGNvZGUgYWZ0ZXIgdGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0IGEgcmV0dXJu
IGhlcmUuCiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbCkK
ICAgICAgICAgcmV0dXJuIGFkZFJldHVybihlbnRyeS5jb250cm9sRGF0YSwgZW50cnkuZW5jbG9z
ZWRFeHByZXNzaW9uU3RhY2spOwpAQCAtMjQwMCwxMiArMjkyNSwxMiBAQCBCMzo6VmFsdWUqIEIz
SVJHZW5lcmF0b3I6OmNyZWF0ZUNhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBPcmln
aW4gb3JpZ2luLAogICAgIFZlY3RvcjxCMzo6Q29uc3RyYWluZWRWYWx1ZT4gY29uc3RyYWluZWRB
cmd1bWVudHM7CiAgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5n
Q29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcihzaWduYXR1cmUpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQotICAgICAgICBjb25zdHJhaW5lZEFy
Z3VtZW50cy5hcHBlbmQoQjM6OkNvbnN0cmFpbmVkVmFsdWUoYXJnc1tpXSwgd2FzbUNhbGxJbmZv
LnBhcmFtc1tpXSkpOworICAgICAgICBjb25zdHJhaW5lZEFyZ3VtZW50cy5hcHBlbmQoQjM6OkNv
bnN0cmFpbmVkVmFsdWUoZ2V0KGJsb2NrLCBhcmdzW2ldKSwgd2FzbUNhbGxJbmZvLnBhcmFtc1tp
XSkpOwogCiAgICAgbV9wcm9jLnJlcXVlc3RDYWxsQXJnQXJlYVNpemVJbkJ5dGVzKFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHdhc21DYWxsSW5mby5oZWFk
ZXJBbmRBcmd1bWVudFN0YWNrU2l6ZUluQnl0ZXMpKTsKIAogICAgIEIzOjpUeXBlIHJldHVyblR5
cGUgPSB0b0IzUmVzdWx0VHlwZSgmc2lnbmF0dXJlKTsKLSAgICBCMzo6UGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3By
b2MsIHJldHVyblR5cGUsIG9yaWdpbik7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbV9wcm9jLmFkZDxQYXRjaHBvaW50VmFsdWU+KHJldHVyblR5cGUsIG9yaWdpbik7CiAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3Rl
cnMoKSk7CiAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxl
UmVnaXN0ZXJzRm9ySlNDYWxsKCkpOwogICAgIHBhdGNocG9pbnRGdW5jdG9yKHBhdGNocG9pbnQp
OwpAQCAtMjQxNyw2ICsyOTQyLDcgQEAgQjM6OlZhbHVlKiBCM0lSR2VuZXJhdG9yOjpjcmVhdGVD
YWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9jaywgT3JpZ2luIG9yaWdpbiwKICAgICAgICAg
ICAgIHJlc3VsdENvbnN0cmFpbnRzLmFwcGVuZChCMzo6VmFsdWVSZXAodmFsdWVMb2NhdGlvbikp
OwogICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50cyA9IFdURk1vdmUocmVzdWx0
Q29uc3RyYWludHMpOwogICAgIH0KKyAgICBibG9jay0+YXBwZW5kKHBhdGNocG9pbnQpOwogICAg
IHJldHVybiBwYXRjaHBvaW50OwogfQogCkBAIC0yNDM4LDExICsyOTY0LDExIEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxCMzo6VHlwZT4mIHR1cGxl
ID0gbV9wcm9jLnR1cGxlRm9yVHlwZShyZXR1cm5UeXBlKTsKICAgICAgICAgICAgIEFTU0VSVChz
aWduYXR1cmUucmV0dXJuQ291bnQoKSA9PSB0dXBsZS5zaXplKCkpOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxFeHRy
YWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHR1cGxlW2ldLCBjYWxsUmVzdWx0LCBpKSk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHVwbGVbaV0sIGNhbGxSZXN1bHQs
IGkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OiB7
Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChjYWxsUmVzdWx0KTsKKyAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKHB1c2goY2FsbFJlc3VsdCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMjQ3MSw4ICsyOTk3LDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwKICAgICAgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNv
dWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1Nh
dmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKLSAgICAgICAgICAgICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
KSB7CisgICAgICAgICAgICAgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBw
cmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoaXNXYXNtQmxvY2ssIHBhdGNocG9pbnQpOwor
ICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdGhpcywgaGFuZGxlLCB1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAg
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRo
aXMpOwogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50
aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwpAQCAtMjQ5OCw4ICsz
MDI2LDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAvLyBXZSBw
ZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRo
YXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlu
bmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcp
KTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3JldHVyblR5cGVd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICAgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5k
bGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoaXNFbWJlZGRlckJsb2NrLCBwYXRj
aHBvaW50KTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3RoaXMs
IGhhbmRsZSwgcmV0dXJuVHlwZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAg
ICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICAgICAg
ICAgICAgICBqaXQuY2FsbChwYXJhbXNbcGFyYW1zLnByb2MoKS5yZXN1bHRDb3VudChyZXR1cm5U
eXBlKV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICB9KSk7CkBAIC0yNTI3LDggKzMwNTcsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LAogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciB0aGUgc2l6ZSByZWdpc3Rl
ciBzaW5jZSB0aGUgTExJbnQgYWx3YXlzIGJvdW5kcyBjaGVja3MKICAgICAgICAgICAgICAgICBp
ZiAobV9tb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZyB8fCBtX2luZm8ubWVtb3J5LmlzU2hh
cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lz
dGVyU2V0IHsgUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS5ib3VuZHNDaGVja2luZ1NpemVSZWdp
c3RlciB9KTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICAgICAgUGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBoYW5kbGUgPSBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2Vw
dGlvbnMobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQpOworICAgICAgICAgICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbdGhpcywgaGFuZGxlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAg
ICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOwogICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVh
ckNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5h
cHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNh
bGwpLCBmdW5jdGlvbkluZGV4IH0pOwpAQCAtMjU0Myw3ICszMDc1LDcgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25l
ZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgpOworICAgIFZh
bHVlKiBjYWxsZWVJbmRleCA9IGdldChhcmdzLnRha2VMYXN0KCkpOwogICAgIEFTU0VSVChzaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKIAogICAgIG1fbWFrZXNDYWxs
cyA9IHRydWU7CkBAIC0yNTUyLDExICszMDg0LDExIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
CiAgICAgLy8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBmb3Igb3VyIHN0YWNrIGNoZWNrIGNhbGN1
bGF0aW9uLgogICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1K
U0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOwogCi0g
ICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlcjsKLSAgICBFeHByZXNzaW9u
VHlwZSBpbnN0YW5jZXNCdWZmZXI7Ci0gICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlckxlbmd0aDsKKyAgICBWYWx1ZSogY2FsbGFibGVGdW5jdGlvbkJ1ZmZlcjsKKyAgICBW
YWx1ZSogaW5zdGFuY2VzQnVmZmVyOworICAgIFZhbHVlKiBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVy
TGVuZ3RoOwogICAgIHsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLAorICAgICAgICBWYWx1ZSogdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAog
ICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6
b2Zmc2V0T2ZUYWJsZVB0cihtX251bUltcG9ydEZ1bmN0aW9ucywgdGFibGVJbmRleCkpKTsKICAg
ICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAg
ICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oRnVuY1JlZlRhYmxlOjpvZmZzZXRPZkZ1
bmN0aW9ucygpKSk7CkBAIC0yNTc4LDE3ICszMTEwLDE3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0CiAKICAgICBjYWxsZWVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgpOwogCi0gICAgRXhwcmVzc2lv
blR5cGUgY2FsbGFibGVGdW5jdGlvbjsKKyAgICBWYWx1ZSogY2FsbGFibGVGdW5jdGlvbjsKICAg
ICB7CiAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBpbiB0aGUgdGFibGUgaW5kZXggc3Bh
Y2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgotICAgICAgICBFeHByZXNzaW9uVHlwZSBvZmZzZXQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwgb3JpZ2luKCksCisg
ICAgICAgIFZhbHVlKiBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIE11bCwgb3JpZ2luKCksCiAgICAgICAgICAgICBjYWxsZWVJbmRleCwgY29uc3RhbnQo
cG9pbnRlclR5cGUoKSwgc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24pKSk7CiAg
ICAgICAgIGNhbGxhYmxlRnVuY3Rpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIsIG9mZnNldCk7
CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
biBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25h
dHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4KICAgICAgICAgLy8gRklY
TUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRsZXJzLCB3ZSBjYW4ganVzdCBsZXQgdGhlIGNhbGwg
ZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4IGlzIDAuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcyMTAKICAgICAgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpID09IHNp
emVvZih1aW50NjRfdCksICJMb2FkIGNvZGVnZW4gYXNzdW1lcyBpNjQiKTsKLSAgICAgICAgRXhw
cmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgY2FsbGFibGVG
dW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSk7CisgICAgICAgIFZhbHVlKiBjYWxsZWVTaWduYXR1
cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgSW50NjQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90
PihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkp
KTsKICAgICAgICAgewogICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAogICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1
YWwsIG9yaWdpbigpLApAQCAtMjYwMiw3ICszMTM0LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXQKIAogICAgICAgICAvLyBDaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgdGhlIHZhbHVlIHdl
IGV4cGVjdC4KICAgICAgICAgewotICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUgZXhwZWN0ZWRT
aWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpOwor
ICAgICAgICAgICAgVmFsdWUqIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmUpKTsKICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNr
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBv
cmlnaW4oKSwKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIE5vdEVxdWFsLCBvcmlnaW4oKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgsIGV4cGVj
dGVkU2lnbmF0dXJlSW5kZXgpKTsKIApAQCAtMjYxNiw3ICszMTQ4LDcgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXQKICAgICAgICAgY2FsbGVlSW5kZXgsIGNvbnN0YW50KHBvaW50ZXJUeXBlKCks
IHNpemVvZihJbnN0YW5jZSopKSk7CiAgICAgVmFsdWUqIGNhbGxlZUluc3RhbmNlID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBBZGQsIG9yaWdpbigpLCBpbnN0YW5jZXNCdWZmZXIsIG9mZnNldCkpOwotICAgIEV4
cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgIFZhbHVl
KiBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKICAgICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+
KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2Nh
dGlvbigpKSkpOwogCkBAIC0yNjI1LDcgKzMxNTcsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxSZWYoY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWUgPSBhcmdzLnRh
a2VMYXN0KCk7CisgICAgVmFsdWUqIGNhbGxlZSA9IGdldChhcmdzLnRha2VMYXN0KCkpOwogICAg
IEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKICAgICBt
X21ha2VzQ2FsbHMgPSB0cnVlOwogCkBAIC0yNjQyLDI0ICszMTc0LDI3IEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlCiAgICAgVmFsdWUqIGNhbGxlZUluc3RhbmNlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBB
ZGQsIG9yaWdpbigpLCBqc0NhbGxlZUluc3RhbmNlLCBpbnN0YW5jZU9mZnNldCkpOwogCi0gICAg
RXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgVmFs
dWUqIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLCBjYWxsZWUsCiAgICAgICAgICAgICBzYWZlQ2FzdDxpbnQzMl90PihXZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZTo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkpKSk7CiAK
ICAgICByZXR1cm4gZW1pdEluZGlyZWN0Q2FsbChjYWxsZWVJbnN0YW5jZSwgY2FsbGVlQ29kZSwg
c2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKTsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlm
eShjb25zdCBFeHByZXNzaW9uVHlwZSBwaGksIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSkK
K3ZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnkoVmFsdWUqIHBoaSwgY29uc3QgRXhwcmVzc2lvblR5
cGUgc291cmNlKQogewotICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCBzb3VyY2UsIHBoaSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGdldChzb3VyY2UpLCBwaGkp
OwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IFN0
YWNrJiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0KQordm9pZCBCM0lSR2Vu
ZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYgcmVzdWx0U3RhY2ssIGNv
bnN0IENvbnRyb2xEYXRhJiBibG9jaykKIHsKLSAgICBBU1NFUlQocmVzdWx0LnNpemUoKSA8PSBy
ZXN1bHRTdGFjay5zaXplKCkpOworICAgIGNvbnN0IFZlY3RvcjxWYWx1ZSo+JiBwaGlzID0gYmxv
Y2sucGhpczsKKyAgICBzaXplX3QgcmVzdWx0U2l6ZSA9IHBoaXMuc2l6ZSgpOwogCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kpCi0gICAgICAgIHVuaWZ5KHJl
c3VsdFtyZXN1bHQuc2l6ZSgpIC0gMSAtIGldLCByZXN1bHRTdGFjay5hdChyZXN1bHRTdGFjay5z
aXplKCkgLSAxIC0gaSkpOworICAgIEFTU0VSVChyZXN1bHRTaXplIDw9IHJlc3VsdFN0YWNrLnNp
emUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdFNpemU7ICsraSkKKyAg
ICAgICAgdW5pZnkocGhpc1tyZXN1bHRTaXplIC0gMSAtIGldLCByZXN1bHRTdGFjay5hdChyZXN1
bHRTdGFjay5zaXplKCkgLSAxIC0gaSkpOwogfQogCiBzdGF0aWMgdm9pZCBkdW1wRXhwcmVzc2lv
blN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEIzSVJHZW5lcmF0b3I6OlN0
YWNrJiBleHByZXNzaW9uU3RhY2spCkBAIC0yNzAzLDggKzMyMzgsMTEgQEAgRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShD
b21waWxhdGlvbkMKIAogICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRK
SVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAgICBjb21waWxhdGlvbkNvbnRleHQu
d2FzbUVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKKyAgICBjb21w
aWxhdGlvbkNvbnRleHQucHJvY2VkdXJlID0gbWFrZVVuaXF1ZTxQcm9jZWR1cmU+KCk7CisKKyAg
ICBQcm9jZWR1cmUmIHByb2NlZHVyZSA9ICpjb21waWxhdGlvbkNvbnRleHQucHJvY2VkdXJlOwog
Ci0gICAgUHJvY2VkdXJlIHByb2NlZHVyZTsKKyAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVu
dHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKIAogICAgIHByb2NlZHVy
ZS5zZXRPcmlnaW5QcmludGVyKFtdIChQcmludFN0cmVhbSYgb3V0LCBPcmlnaW4gb3JpZ2luKSB7
CiAgICAgICAgIGlmIChvcmlnaW4uZGF0YSgpKQpAQCAtMjcyNSw2ICszMjYzLDcgQEAgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZShDb21waWxhdGlvbkMKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJz
ZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUo
KSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNl
ci5wYXJzZSgpKTsKIAorICAgIGlyR2VuZXJhdG9yLmluc2VydEVudHJ5U3dpdGNoKCk7CiAgICAg
aXJHZW5lcmF0b3IuaW5zZXJ0Q29uc3RhbnRzKCk7CiAKICAgICBwcm9jZWR1cmUucmVzZXRSZWFj
aGFiaWxpdHkoKTsKQEAgLTI3MzYsMTggKzMyNzUsNDMgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlv
bkMKICAgICBkYXRhTG9nSWYoV2FzbUIzSVJHZW5lcmF0b3JJbnRlcm5hbDo6dmVyYm9zZSwgIlBv
c3QgU1NBOiAiLCBwcm9jZWR1cmUpOwogICAgIAogICAgIHsKKyAgICAgICAgaWYgKHNob3VsZER1
bXBEaXNhc3NlbWJseUZvcihjb21waWxhdGlvbk1vZGUpKQorICAgICAgICAgICAgcHJvY2VkdXJl
LmNvZGUoKS5zZXREaXNhc3NlbWJsZXIobWFrZVVuaXF1ZTxCMzo6QWlyOjpEaXNhc3NlbWJsZXI+
KCkpOwogICAgICAgICBCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJlKTsKICAgICAg
ICAgQjM6OmdlbmVyYXRlKHByb2NlZHVyZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlw
b2ludEpJVCk7CiAgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJv
ZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKICAgICAgICAgcmVzdWx0LT5l
bnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVlU2F2ZVJlZ2lz
dGVyQXRPZmZzZXRMaXN0KCk7CiAgICAgfQogCisgICAgcmVzdWx0LT5zdGFja21hcHMgPSBpckdl
bmVyYXRvci50YWtlU3RhY2ttYXBzKCk7CisgICAgcmVzdWx0LT5leGNlcHRpb25IYW5kbGVycyA9
IGlyR2VuZXJhdG9yLnRha2VFeGNlcHRpb25IYW5kbGVycygpOworCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAordm9pZCBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhWZWN0b3I8Q29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiBoYW5kbGVycywgY29uc3Qg
SW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIGNvbnN0IENvbXBpbGF0aW9uQ29udGV4dCYgY29u
dGV4dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBpZiAoIWNvbnRleHQucHJvY2Vk
dXJlKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAw
OworICAgIHVuc2lnbmVkIG51bUVudHJ5cG9pbnRzID0gY29udGV4dC5wcm9jZWR1cmUtPm51bUVu
dHJ5cG9pbnRzKCk7CisgICAgZm9yIChjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVy
SW5mbyA6IGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycykgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVChlbnRyeXBvaW50SW5kZXggPCBudW1FbnRyeXBvaW50cyk7CisgICAgICAgIGlmIChoYW5k
bGVySW5mby5tX3R5cGUgPT0gSGFuZGxlclR5cGU6OkRlbGVnYXRlKSB7CisgICAgICAgICAgICBo
YW5kbGVycy5hcHBlbmQoeyB9KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgKytlbnRyeXBvaW50SW5kZXg7CisgICAgICAgIGhhbmRsZXJzLmFwcGVuZChsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oY29udGV4dC5wcm9jZWR1
cmUtPmNvZGUoKS5lbnRyeXBvaW50TGFiZWwoZW50cnlwb2ludEluZGV4KSkpOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVChlbnRyeXBvaW50SW5kZXggPT0gbnVtRW50cnlwb2ludHMgLSAxKTsK
K30KKwogLy8gQ3VzdG9tIHdhc20gb3BzLiBUaGVzZSBhcmUgdGhlIG9uZXMgdG9vIG1lc3N5IHRv
IGRvIGluIHdhc20uanNvbi4KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9yTW9k
T3JEaXYoQjM6Ok9wY29kZSBvcGVyYXRpb24sIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Np
b25UeXBlIHJpZ2h0KQordm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9yTW9kT3JEaXYo
QjM6Ok9wY29kZSBvcGVyYXRpb24sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCiB7CiAgICAg
QVNTRVJUKG9wZXJhdGlvbiA9PSBEaXYgfHwgb3BlcmF0aW9uID09IE1vZCB8fCBvcGVyYXRpb24g
PT0gVURpdiB8fCBvcGVyYXRpb24gPT0gVU1vZCk7CiAgICAgY29uc3QgQjM6OlR5cGUgdHlwZSA9
IGxlZnQtPnR5cGUoKTsKQEAgLTI3NzYsMTA2ICszMzQwLDEyNSBAQCB2b2lkIEIzSVJHZW5lcmF0
b3I6OmVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlIG9wZXJhdGlvbiwgRXhwcmVzc2lv
blR5cGUgbAogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyRGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNz
aW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBEaXY7CisgICAgVmFsdWUqIGxlZnQgPSBn
ZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFyKTsKICAgICBlbWl0
Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmln
aHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVM+
KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyUmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5cGUgcmln
aHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBj
b25zdCBCMzo6T3Bjb2RlIG9wID0gTW9kOworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIp
OworICAgIFZhbHVlKiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1v
ZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7
CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsgfTsK
IH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRp
dlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyRGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5cGUg
cmlnaHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAg
ICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVURpdjsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChsZWZ0
VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVja3NG
b3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7Cisg
ICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1w
bGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtVT4oRXhwcmVz
c2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIz
OjpPcGNvZGUgb3AgPSBVTW9kOworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAg
IFZhbHVlKiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2
KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQg
PSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdp
bigpLCBsZWZ0LCByaWdodCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZTPihFeHByZXNzaW9uVHlwZSBs
ZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlM+KEV4
cHJlc3Npb25UeXBlIGxlZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBv
cCA9IERpdjsKKyAgICBWYWx1ZSogbGVmdCA9IGdldChsZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmln
aHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwg
cmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwg
cmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVz
c2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1TPihFeHByZXNzaW9uVHlw
ZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBNb2Q7Cisg
ICAgVmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJp
Z2h0VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAg
ICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIGNoaWxs
KG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hpbGwob3ApLCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhw
cmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPihFeHByZXNzaW9u
VHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBVRGl2
OworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVlKiByaWdodCA9IGdl
dChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7
Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBv
cCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCkp
OwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlw
ZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnRW
YXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVNb2Q7CisgICAgVmFs
dWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFy
KTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMkN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6
PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50
VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
YXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKICAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczMyKHBhcmFtc1sxXS5n
cHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
ID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0
ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1h
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcg
PSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2lu
KCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
OwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQuY291
bnRUcmFpbGluZ1plcm9zNjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAg
IH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVz
dWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJl
dHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogI2lmIENQ
VShYODZfNjQpCiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0NvdW50UG9wdWxhdGlv
bigpKSB7CiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7
CkBAIC0yODg0LDE5ICszNDY3LDIwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmCiAgICAgICAg
ICAgICBqaXQuY291bnRQb3B1bGF0aW9uMzIocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3By
KCkpOwogICAgICAgICB9KTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6
Om5vbmUoKTsKLSAgICAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAgICAgcmVzdWx0ID0g
cHVzaChwYXRjaHBvaW50KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAjZW5kaWYKIAog
ICAgIFZhbHVlKiBmdW5jQWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uUG9wY291bnQzMikpOwotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksIEVmZmVjdHM6Om5vbmUo
KSwgZnVuY0FkZHJlc3MsIGFyZyk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLCBFZmZlY3RzOjpu
b25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpKTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0
ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNz
aW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBl
IGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAg
IFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICNpZiBDUFUoWDg2XzY0KQogICAgIGlmIChNYWNy
b0Fzc2VtYmxlcjo6c3VwcG9ydHNDb3VudFBvcHVsYXRpb24oKSkgewogICAgICAgICBQYXRjaHBv
aW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9p
bnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOwpAQCAtMjkwNSwxOSArMzQ4OSwyMCBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJgogICAgICAgICAgICAgaml0LmNvdW50UG9wdWxhdGlv
bjY0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAgfSk7CiAgICAg
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgICAgIHJlc3Vs
dCA9IHBhdGNocG9pbnQ7CisgICAgICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogI2VuZGlmCiAKICAgICBWYWx1ZSogZnVuY0FkZHJlc3Mg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblBvcGNvdW50NjQpKTsK
LSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJv
YywgSW50NjQsIG9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpOwor
ICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPiht
X3Byb2MsIEludDY0LCBvcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLCBmdW5jQWRkcmVzcywgYXJn
KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPEY2
NENvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBvcmlnaW4oKSk7CiAgICAgaWYgKGlz
WDg2KCkpCiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CkBA
IC0yOTMyLDEzICszNTE3LDE0IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVy
dFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlCiAjZW5kaWYKICAg
ICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJl
c3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICBy
ZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyQ29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zh
cik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIG9yaWdpbigpKTsKICAgICBp
ZiAoaXNYODYoKSkKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0g
MTsKQEAgLTI5NTMsNjUgKzM1MzksNzAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb24KICNlbmRp
ZgogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0g
ICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwog
ICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7
CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBvcmlnaW4oKSk7CiAgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5yb3VuZFRvd2FyZE5lYXJl
c3RJbnREb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOwogICAgIH0pOwog
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0g
cGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7
IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZWFy
ZXN0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBv
aW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBl
bmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludEZsb2F0KHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7Cisg
ICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1w
bGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFRydW5jPihFeHByZXNzaW9uVHlw
ZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAg
ICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
RG91YmxlLCBvcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6
OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAg
ICAgICAgIGppdC5yb3VuZFRvd2FyZFplcm9Eb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNb
MF0uZnByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNo
cG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyVHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJn
VmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBGbG9hdCwgb3JpZ2luKCkpOwogICAg
IHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBqaXQucm91bmRUb3dhcmRa
ZXJvRmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOwogICAgIH0pOwogICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0
Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07
CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJU
cnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5j
U0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVl
KiBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLXN0YXRpY19j
YXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CiAgICAg
VmFsdWUqIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0
aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAtIDEu
MCkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMwMjgsMTMgKzM2MTksMTQgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2ND4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9JbnQz
MihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50
OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAog
dGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Yz
Mj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihF
eHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1heCA9
IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNfY2FzdDxmbG9h
dD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CiAgICAgVmFsdWUqIG1p
biA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZs
b2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSog
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJp
dEFuZCwgb3JpZ2luKCksCkBAIC0zMDUxLDE0ICszNjQzLDE1IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5CiAgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9JbnQzMihwYXJhbXNbMV0uZnByKCks
IHBhcmFtc1swXS5ncHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVm
ZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1
c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogCiB0ZW1wbGF0ZTw+Ci1hdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFy
Z1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZh
bHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRG91Ymxl
LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogLTIuMCkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25z
dGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOwogICAgIFZhbHVlKiBv
dXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0
QW5kLCBvcmlnaW4oKSwKQEAgLTMwNzUsMTMgKzM2NjgsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50MzIocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBF
ZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBw
dXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJn
VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFs
dWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChGbG9hdCwg
Yml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQzMl90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0yLjApKSk7CiAgICAg
VmFsdWUqIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRp
Y19jYXN0PGZsb2F0PigtMS4wKSkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMw
OTgsMTMgKzM2OTIsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRy
dW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRy
dW5jYXRlRmxvYXRUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAg
ICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICBy
ZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7
CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90
Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4o
KSkpKTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWlu
dDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6
bWluKCkpKSk7CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzEyMSwxMyArMzcxNiwx
NCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0PihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVU
b0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNo
cG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9Owog
fQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1
bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VG
NjQ+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSog
bWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0
PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogLTIuMCkpOwog
ICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4o
LTEuMCkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMxNjQsMTMgKzM3NjAsMTQg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9V
aW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50
KTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwot
ICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsK
ICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJn
VmFyKTsKICAgICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50
MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+Ojpt
aW4oKSkpKTsKICAgICBWYWx1ZSogbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1pbigpKSkpOwogICAgIFZhbHVlKiBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKQEAgLTMxODcsMTMgKzM3ODQs
MTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRmxvYXRU
b0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNo
cG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9Owog
fQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1
bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VG
MzI+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSog
bWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0
PGZsb2F0PigtMi4wKSkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lz
ZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKICAgICBWYWx1ZSog
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJp
dEFuZCwgb3JpZ2luKCksCkBAIC0zMjMwLDcgKzM4MjgsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeQogICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDY0KHBhcmFtc1sxXS5mcHIoKSwg
cGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CiAgICAgfSk7CiAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50
OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKaW5kZXgg
MWQ2NjIxMGUxYjUwNDNhOWE0MWZhNjEzZjUyMjQ5M2FlZTMwNzQ3YS4uMjg5MWQxZTQ0ZjNhZjM3
ZDg2MTkzNDY2ZjlkYzk3ZTZiOGRkNjE5YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCkBAIC00MCw3ICs0MCwxMyBAQAogCiBleHRlcm4gIkMi
IHZvaWQgZHVtcFByb2NlZHVyZSh2b2lkKik7CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEIzIHsKK2NsYXNzIFByb2NlZHVy
ZTsKK30KKworbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBNZW1vcnlJbmZvcm1hdGlvbjsKIApA
QCAtNDgsMTAgKzU0LDEzIEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDQ2FsbEhlbHBlcnM+IGVtYmVkZGVyRW50cnlwb2ludEpJVDsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q0NhbGxIZWxwZXJzPiB3YXNtRW50cnlwb2ludEpJVDsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gd2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxCMzo6UHJvY2VkdXJlPiBwcm9jZWR1cmUgeyBudWxscHRyIH07CiB9
OwogCiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4g
cGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYs
IGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIHVuc2ln
bmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWlu
dDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIpOwogCit2
b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKFZlY3RvcjxDb2RlTG9jYXRpb25M
YWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJbnRlcm5hbEZ1
bmN0aW9uKiwgY29uc3QgQ29tcGlsYXRpb25Db250ZXh0JiwgTGlua0J1ZmZlciYpOworCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZX0Iz
SklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4IGFm
MmZjNzJiYWNiYjM0YzhiMzM1NzhkOTA3YjM3YzYwMjQwZmI5ZmIuLjQ2NmEyNjBiZmYyNDhiZGI0
MjU5M2IwNGM3MDdlNWZiODkxZWFhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbi5jcHAKQEAgLTY2LDYgKzY2LDcgQEAgYm9vbCBCQlFQbGFuOjpwcmVwYXJlSW1w
bCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25z
LnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fY29tcGlsYXRpb25Db250ZXh0cy5y
ZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV90aWVyVXBDb3VudHMucmVzaXplKGZ1bmN0
aW9ucy5zaXplKCkpOwogCkBAIC0xMDksNiArMTEwLDkgQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENv
bXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIFZl
Y3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4gZXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhl
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBmdW5jdGlvbi5nZXQoKSwgY29udGV4dCwgbGlua0J1
ZmZlcik7CisKICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gbV9mdW5jdGlvbkluZGV4
ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwogICAgIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxG
dW5jdGlvblNpZ25hdHVyZUluZGljZXNbbV9mdW5jdGlvbkluZGV4XTsKICAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOwpAQCAtMTE4LDcgKzEyMiw3IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFn
PiBlbnRyeXBvaW50OwogICAgIHsKLSAgICAgICAgUmVmPEJCUUNhbGxlZT4gY2FsbGVlID0gQkJR
Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbklu
ZGV4U3BhY2UpLCBXVEZNb3ZlKHRpZXJVcCksIFdURk1vdmUodW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMpKTsKKyAgICAgICAgUmVmPEJCUUNhbGxlZT4gY2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUo
V1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZN
b3ZlKHRpZXJVcCksIFdURk1vdmUodW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpLCBXVEZNb3ZlKGZ1
bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyks
IFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVl
Qml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKICAgICAgICAgQVNTRVJUKCFtX2NvZGVCbG9j
ay0+bV9iYnFDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0pOwogICAgICAgICBlbnRyeXBvaW50ID0g
Y2FsbGVlLT5lbnRyeXBvaW50KCk7CkBAIC0xOTQsMTEgKzE5OCwxNSBAQCBzdGQ6OnVuaXF1ZV9w
dHI8SW50ZXJuYWxGdW5jdGlvbj4gQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZQogICAgIGJvb2wgZm9yY2VVc2luZ0IzID0gZmFsc2U7CiAgICAgaWYgKE9wdGlv
bnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpICYmIG1fbW9kdWxlSW5mb3JtYXRp
b24tPmNvZGVTZWN0aW9uU2l6ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJl
c2hvbGQoKSkKICAgICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKKyAgICBlbHNlIGlmICghbV9t
b2R1bGVJbmZvcm1hdGlvbi0+bV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrR2V0
KGZ1bmN0aW9uSW5kZXgpKQorICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOworICAgIGVsc2Ug
aWYgKCFPcHRpb25zOjp3YXNtQkJRVXNlc0FpcigpKQorICAgICAgICBmb3JjZVVzaW5nQjMgPSB0
cnVlOwogCi0gICAgaWYgKCFmb3JjZVVzaW5nQjMgJiYgT3B0aW9uczo6d2FzbUJCUVVzZXNBaXIo
KSkKLSAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWlyKGNv
bnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtX21v
ZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7Ci0g
ICAgZWxzZQorICAgIGlmIChmb3JjZVVzaW5nQjMpCiAgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJl
c3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0
aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCk7CisgICAgZWxzZQorICAgICAgICBwYXJzZUFu
ZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIoY29udGV4dCwgZnVuY3Rpb24sIHNp
Z25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIAogICAgIGlmIChVTkxJS0VMWSgh
cGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2Nr
IH07CkBAIC0yMjIsMTMgKzIzMCwxNSBAQCB2b2lkIEJCUVBsYW46OmRpZENvbXBsZXRlQ29tcGls
YXRpb24oKQogICAgICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBmdW5j
dGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwog
ICAgICAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKICAgICAgICAgeworICAgICAgICAgICAgSW50ZXJu
YWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbklu
ZGV4XS5nZXQoKTsKICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53
YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6V2FzbSwgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVy
LmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAgQmFzZTo6ZmFpbChtYWtl
U3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwg
U3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1
bmN0aW9uSW5kZXhdLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxh
dGlvbj4oCisgICAgICAgICAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhtX2V4
Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLCBjb250ZXh0
LCBsaW5rQnVmZmVyKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0
aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4oCiAgICAgICAgICAgICAgICAgRklOQUxJWkVf
Q09ERShsaW5rQnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IEJCUSBm
dW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmlu
ZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhT
cGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4
U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4
dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgfQpAQCAtMjcyLDcgKzI4Miw3
IEBAIHZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2FsbGVlSW5pdGlhbGl6
ZXImIGNhbGxiYWNrKQogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93
YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKICAgICAg
ICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGludGVybmFsRnVuY3Rpb25JbmRleCArIG1f
bW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKLSAgICAgICAgUmVmPEJC
UUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3Zl
KGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9y
bWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90
aWVyVXBDb3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUobV91bmxpbmtlZFdh
c21Ub1dhc21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7CisgICAgICAgIFJlZjxCQlFD
YWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShm
dW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKG1fdGll
clVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3ZlKG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUoZnVuY3Rpb24tPnN0
YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZSht
X2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSkpOwogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVM
b2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50cnlwb2ludENhbGxlZS5wdHIoKSkp
OwogCiAgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RGTW92ZShlbWJl
ZGRlckVudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAppbmRleCBkYmVmYzU0YWQ3NTAw
NWE3MGQxZTFhZjk2MDAwMTc0ZjhlY2JkYjNmLi5kYzAwMjI3NTY2MjI1MWI4YWIwZjA3ZGVhYjA5
ODZlOTdjZmU2YTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QkJRUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgK
QEAgLTgzLDYgKzgzLDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4gY29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvbXBpbGF0
aW9uQ29udGV4dCYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIFRpZXJVcENvdW50
Kik7CiAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+PiBtX3dh
c21JbnRlcm5hbEZ1bmN0aW9uczsKKyAgICBWZWN0b3I8VmVjdG9yPENvZGVMb2NhdGlvbkxhYmVs
PEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+Pj4gbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zOwog
ICAgIEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwg
RGVmYXVsdEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVpbnQzMl90Pj4gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3Rv
cjxDb21waWxhdGlvbkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKICAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50Pj4gbV90aWVyVXBDb3VudHM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwCmluZGV4IDIxZDk3YjEzY2VlMGM2NWUxNjMx
Yzc2ZDI1ODkzMzMzNTMyZWU5NDAuLmI0NjZiN2ZjZWI4MGEzZTI3Mjc5OWYzNzVmYWQwYmRkYWFi
ZDk0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJMTElu
dEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlUmVnaXN0cnkuaCIKICNpbmNsdWRl
ICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKIApAQCAtNTYsNiArNTcsMTIgQEAgdm9pZCBDYWxs
ZWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBvdXQucHJpbnQobWFrZVN0cmlu
ZyhtX2luZGV4T3JOYW1lKSk7CiB9CiAKK2NvbnN0IEhhbmRsZXJJbmZvKiBDYWxsZWU6OmhhbmRs
ZXJGb3JJbmRleChJbnN0YW5jZSYgaW5zdGFuY2UsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBUYWcq
IHRhZykKK3sKKyAgICBBU1NFUlQoaGFzRXhjZXB0aW9uSGFuZGxlcnMoKSk7CisgICAgcmV0dXJu
IEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgoaW5zdGFuY2UsIG1fZXhjZXB0aW9uSGFuZGxl
cnMsIGluZGV4LCB0YWcpOworfQorCiBKSVRDYWxsZWU6OkpJVENhbGxlZShXYXNtOjpDb21waWxh
dGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCBFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKICAgICA6
IENhbGxlZShjb21waWxhdGlvbk1vZGUpCiAgICAgLCBtX2VudHJ5cG9pbnQoV1RGTW92ZShlbnRy
eXBvaW50KSkKQEAgLTY5LDYgKzc2LDMyIEBAIEpJVENhbGxlZTo6SklUQ2FsbGVlKFdhc206OkNv
bXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5cG9pbnQmJiBlbnRyeXBvCiB7CiB9
CiAKK0xMSW50Q2FsbGVlOjpMTEludENhbGxlZShzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2Rl
QmxvY2s+IGNvZGVCbG9jaywgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJl
ZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKKyAgICA6IENhbGxlZShXYXNtOjpDb21waWxhdGlv
bk1vZGU6OkxMSW50TW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCisgICAgLCBtX2NvZGVCbG9j
ayhXVEZNb3ZlKGNvZGVCbG9jaykpCit7CisgICAgbGlua0V4Y2VwdGlvbkhhbmRsZXJzKCk7Cit9
CisKK3ZvaWQgTExJbnRDYWxsZWU6OmxpbmtFeGNlcHRpb25IYW5kbGVycygpCit7CisgICAgaWYg
KHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkp
IHsKKyAgICAgICAgbV9leGNlcHRpb25IYW5kbGVycy5yZXNpemVUb0ZpdChjb3VudCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgY29u
c3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4
Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1f
ZXhjZXB0aW9uSGFuZGxlcnNbaV07CisgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICpt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVyLm1fdGFyZ2V0KS5w
dHIoKTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IHRhcmdldDsKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZEhhbmRsZXIubV90eXBlID09IEhh
bmRsZXJUeXBlOjpDYXRjaCkKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBDb2RlTG9jYXRpb25M
YWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6aGFuZGxlV2FzbUNhdGNoKGluc3Ry
dWN0aW9uLndpZHRoPFdhc21PcGNvZGVUcmFpdHM+KCkpLmNvZGUoKSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZVdhc21DYXRjaEFsbChpbnN0cnVjdGlvbi53aWR0
aDxXYXNtT3Bjb2RlVHJhaXRzPigpKS5jb2RlKCkpOworCisgICAgICAgICAgICBoYW5kbGVyLmlu
aXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfQorfQor
CiB2b2lkIExMSW50Q2FsbGVlOjpzZXRFbnRyeXBvaW50KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxX
YXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQpCiB7CiAgICAgbV9lbnRyeXBvaW50ID0gZW50cnlw
b2ludDsKQEAgLTEwNCw2ICsxMzcsMzYgQEAgc3RkOjp0dXBsZTx2b2lkKiwgdm9pZCo+IExMSW50
Q2FsbGVlOjpyYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbnVsbHB0ciB9Owog
fQogCit2b2lkIE9wdGltaXppbmdKSVRDYWxsZWU6OmxpbmtFeGNlcHRpb25IYW5kbGVycygpCit7
CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZEV4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsK
KyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgSGFuZGxlckluZm8mIGhhbmRs
ZXIgPSBtX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOworICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRs
ZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkRXhjZXB0aW9uSGFuZGxlcnNbaV07
CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGxvY2F0
aW9uID0gbV9leGNlcHRpb25IYW5kbGVyTG9jYXRpb25zW2ldOworICAgICAgICBoYW5kbGVyLmlu
aXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBsb2NhdGlvbik7CisgICAgfQorICAgIG1fdW5saW5r
ZWRFeGNlcHRpb25IYW5kbGVycy5jbGVhcigpOworICAgIG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucy5jbGVhcigpOworfQorCitjb25zdCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4mIE9wdGltaXpp
bmdKSVRDYWxsZWU6OnN0YWNrbWFwKENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkgY29uc3QK
K3sKKyAgICBhdXRvIGl0ZXIgPSBtX3N0YWNrbWFwcy5maW5kKGNhbGxTaXRlSW5kZXgpOworICAg
IGlmIChpdGVyID09IG1fc3RhY2ttYXBzLmVuZCgpKSB7CisgICAgICAgIGZvciAoYXV0byBwYWly
IDogbV9zdGFja21hcHMpIHsKKyAgICAgICAgICAgIGRhdGFMb2cocGFpci5rZXkuYml0cygpLCAi
OiAiKTsKKyAgICAgICAgICAgIGZvciAoYXV0byB2YWx1ZSA6IHBhaXIudmFsdWUpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZyh2YWx1ZSwgIiwgIik7CisgICAgICAgICAgICBkYXRhTG9nTG4oIiIp
OworICAgICAgICB9CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gbV9zdGFja21h
cHMuZW5kKCkpOworICAgIHJldHVybiBpdGVyLT52YWx1ZTsKK30KKworCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCmluZGV4IDA4MWRiNzZlNDJmOWU0MGU0M2I5MmM5
ODJhZmNkOGNlOTUwYmIxZTEuLjdkNjlkNjI2ZDhjM2YwZDkzN2UxZDBiNTAyNTAzYzk0YjViZjE1
NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKQEAgLTMyLDcgKzMy
LDkgQEAKICNpbmNsdWRlICJXYXNtQ29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiV2FzbUZv
cm1hdC5oIgogI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIldh
c21IYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIldhc21JbmRleE9yTmFtZS5oIgorI2luY2x1ZGUg
Ildhc21MTEludFRpZXJVcENvdW50ZXIuaCIKICNpbmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIK
ICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIApAQCAtNTksNiArNjEsMTAg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSA9IDA7CiAgICAgdmlydHVhbCBzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4gcmFu
Z2UoKSBjb25zdCA9IDA7CiAKKyAgICBjb25zdCBIYW5kbGVySW5mbyogaGFuZGxlckZvckluZGV4
KEluc3RhbmNlJiwgdW5zaWduZWQsIGNvbnN0IFRhZyopOworCisgICAgYm9vbCBoYXNFeGNlcHRp
b25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuICEhbV9leGNlcHRpb25IYW5kbGVycy5zaXplKCk7
IH0KKwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKICAgICB2aXJ0dWFsIHZvaWQgc2V0
T1NSRW50cnlDYWxsZWUoUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiYmKQogICAgIHsKQEAgLTY4
LDYgKzc0LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAKKyAgICB2aXJ0dWFsIEZ1bmN0aW9uQ29kZUJsb2NrKiBmdW5jdGlvbkNvZGVCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKwogcHJvdGVjdGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENh
bGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxl
ZShXYXNtOjpDb21waWxhdGlvbk1vZGUsIHNpemVfdCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBS
ZWZQdHI8TmFtZVNlY3Rpb24+PiYmKTsKQEAgLTc1LDYgKzgzLDkgQEAgcHJvdGVjdGVkOgogcHJp
dmF0ZToKICAgICBDb21waWxhdGlvbk1vZGUgbV9jb21waWxhdGlvbk1vZGU7CiAgICAgSW5kZXhP
ck5hbWUgbV9pbmRleE9yTmFtZTsKKworcHJvdGVjdGVkOgorICAgIFZlY3RvcjxIYW5kbGVySW5m
bz4gbV9leGNlcHRpb25IYW5kbGVyczsKIH07CiAKIGNsYXNzIEpJVENhbGxlZSA6IHB1YmxpYyBD
YWxsZWUgewpAQCAtOTksNjQgKzExMCw4NiBAQCBwcml2YXRlOgogICAgIFdhc206OkVudHJ5cG9p
bnQgbV9lbnRyeXBvaW50OwogfTsKIAotI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKLWNs
YXNzIE9NR0NhbGxlZSBmaW5hbCA6IHB1YmxpYyBKSVRDYWxsZWUgeworY2xhc3MgRW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlIGZpbmFsIDogcHVibGljIEpJVENhbGxlZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxPTUdDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2lu
dCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlv
bj4+JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxs
cykKKyAgICBzdGF0aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKFdhc206
OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgT01HQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpKSk7CiAgICAgfQog
CiBwcml2YXRlOgotICAgIE9NR0NhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwg
c2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+
JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykK
LSAgICAgICAgOiBKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBXVEZN
b3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENh
bGxzKSkKKyAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVu
dHJ5cG9pbnQpCisgICAgICAgIDogSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6RW1i
ZWRkZXJFbnRyeXBvaW50TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSkKICAgICB7CiAgICAgfQog
fTsKIAotY2xhc3MgT01HRm9yT1NSRW50cnlDYWxsZWUgZmluYWwgOiBwdWJsaWMgSklUQ2FsbGVl
IHsKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKK2NsYXNzIE9wdGltaXppbmdKSVRD
YWxsZWUgOiBwdWJsaWMgSklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE9NR0Zv
ck9TUkVudHJ5Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNp
emVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYm
IG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJ
bmRleCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKKyAg
ICBjb25zdCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4mIHN0YWNrbWFwKENhbGxTaXRlSW5kZXgpIGNv
bnN0OworCitwcm90ZWN0ZWQ6CisgICAgT3B0aW1pemluZ0pJVENhbGxlZShXYXNtOjpDb21waWxh
dGlvbk1vZGUgbW9kZSwgV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRl
eCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hNYXA8Q2Fs
bFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVjdG9yPFVu
bGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRp
b25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRp
b25zKQorICAgICAgICA6IEpJVENhbGxlZShtb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRl
eCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkKKyAgICAgICAgLCBtX3N0
YWNrbWFwcyhXVEZNb3ZlKHN0YWNrbWFwcykpCisgICAgICAgICwgbV91bmxpbmtlZEV4Y2VwdGlv
bkhhbmRsZXJzKFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpKQorICAgICAgICAsIG1fZXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9ucyhXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50cnlDYWxsZWUo
V1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIG9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUsIGxvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkRXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpID09IG1f
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucy5zaXplKCkpOworICAgICAgICBsaW5rRXhjZXB0aW9u
SGFuZGxlcnMoKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOyB9Ci0gICAg
dWludDMyX3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9sb29wSW5kZXg7IH0KLQogcHJp
dmF0ZToKLSAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlw
b2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2Vj
dGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMy
X3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENh
bGxzKQotICAgICAgICA6IEpJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9T
UkVudHJ5TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdU
Rk1vdmUodW5saW5rZWRDYWxscykpCi0gICAgICAgICwgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCi0gICAgICAgICwgbV9sb29wSW5kZXgobG9v
cEluZGV4KQorICAgIHZvaWQgbGlua0V4Y2VwdGlvbkhhbmRsZXJzKCk7CisKKyAgICBIYXNoTWFw
PENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4gbV9zdGFja21hcHM7CisgICAg
VmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fdW5saW5rZWRFeGNlcHRpb25IYW5kbGVyczsK
KyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IG1f
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKK307CisKK2NsYXNzIE9NR0NhbGxlZSBmaW5hbCA6
IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE9N
R0NhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5k
ZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBIYXNoTWFwPENh
bGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMsIFZlY3RvcjxV
bmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0
aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucykKICAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0NhbGxlZShXVEZN
b3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENh
bGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RG
TW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkpOwogICAgIH0KIAotICAgIHVuc2lnbmVk
IG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKLSAgICB1aW50MzJfdCBtX2xvb3BJbmRleDsK
K3ByaXZhdGU6CisgICAgT01HQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBz
aXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4m
JiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBI
YXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMs
IFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8
Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206OkNvbXBp
bGF0aW9uTW9kZTo6T01HTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUo
bmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92
ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykp
CisgICAgeworICAgIH0KIH07Ci0jZW5kaWYKIAotY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlIGZpbmFsIDogcHVibGljIEpJVENhbGxlZSB7CitjbGFzcyBPTUdGb3JPU1JFbnRyeUNhbGxl
ZSBmaW5hbCA6IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQm
JiBlbnRyeXBvaW50KQorICAgIHN0YXRpYyBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNyZWF0
ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8
Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZl
Y3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJ
bmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXVEZN
b3ZlKGVudHJ5cG9pbnQpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0Zvck9T
UkVudHJ5Q2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBsb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxs
cyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1v
dmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpKTsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplOyB9CisgICAgdWludDMyX3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9sb29wSW5kZXg7IH0KKwogcHJpdmF0ZToKLSAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUo
V2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCi0gICAgICAgIDogSklUQ2FsbGVlKFdhc206
OkNvbXBpbGF0aW9uTW9kZTo6RW1iZWRkZXJFbnRyeXBvaW50TW9kZSwgV1RGTW92ZShlbnRyeXBv
aW50KSkKKyAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlw
b2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2Vj
dGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMy
X3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENh
bGxzLCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFj
a21hcHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBW
ZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206
OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQp
LCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShz
dGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25I
YW5kbGVyTG9jYXRpb25zKSkKKyAgICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUo
b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKKyAgICAgICAgLCBtX2xvb3BJbmRleChsb29wSW5k
ZXgpCiAgICAgewogICAgIH0KKworICAgIHVuc2lnbmVkIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZTsKKyAgICB1aW50MzJfdCBtX2xvb3BJbmRleDsKIH07CiAKLSNpZiBFTkFCTEUoV0VCQVNT
RU1CTFlfQjNKSVQpCi1jbGFzcyBCQlFDYWxsZWUgZmluYWwgOiBwdWJsaWMgSklUQ2FsbGVlIHsK
K2NsYXNzIEJCUUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBPcHRpbWl6aW5nSklUQ2FsbGVlIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJCUUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQm
JiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRy
PE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGll
clVwQ291bnQsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMp
CisgICAgc3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50
cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1l
U2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENv
dW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzLCBIYXNo
TWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21hcHMsIFZl
Y3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0b3I8Q29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9uSGFuZGxl
ckxvY2F0aW9ucykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJCUUNhbGxl
ZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0aWVy
VXBDb3VudCksIFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQkJRQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5h
bWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92
ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKSkpOwogICAgIH0KIAogICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVl
KiBvc3JFbnRyeUNhbGxlZSgpIHsgcmV0dXJuIG1fb3NyRW50cnlDYWxsZWUuZ2V0KCk7IH0KQEAg
LTE3Nyw4ICsyMTAsOCBAQCBwdWJsaWM6CiAgICAgVGllclVwQ291bnQqIHRpZXJVcENvdW50KCkg
eyByZXR1cm4gbV90aWVyVXBDb3VudC5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIEJCUUNhbGxl
ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8
Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRy
PFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mJiB1bmxpbmtlZENhbGxzKQotICAgICAgICA6IEpJVENhbGxlZShXYXNtOjpDb21waWxhdGlv
bk1vZGU6OkJCUU1vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKQorICAgIEJCUUNhbGxlZShXYXNtOjpFbnRyeXBvaW50
JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0
cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRp
ZXJVcENvdW50LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxz
LCBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFZlY3RvcjxPU1JFbnRyeVZhbHVlPj4mJiBzdGFja21h
cHMsIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIGV4Y2VwdGlvbkhhbmRsZXJzLCBWZWN0
b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiYgZXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9ucykKKyAgICAgICAgOiBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206OkNv
bXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1v
dmUobmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoc3RhY2ttYXBzKSwgV1RG
TW92ZShleGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9u
cykpCiAgICAgICAgICwgbV90aWVyVXBDb3VudChXVEZNb3ZlKHRpZXJVcENvdW50KSkKICAgICB7
CiAgICAgfQpAQCAtMjE4LDE1ICsyNTEsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIExMSW50
VGllclVwQ291bnRlciYgdGllclVwQ291bnRlcigpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT50aWVy
VXBDb3VudGVyKCk7IH0KKyAgICBGdW5jdGlvbkNvZGVCbG9jayogZnVuY3Rpb25Db2RlQmxvY2so
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQogI2VuZGlmCiAKIHBy
aXZhdGU6Ci0gICAgTExJbnRDYWxsZWUoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2Nr
PiBjb2RlQmxvY2ssIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8
TmFtZVNlY3Rpb24+PiYmIG5hbWUpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9u
TW9kZTo6TExJbnRNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBtX2NvZGVC
bG9jayhXVEZNb3ZlKGNvZGVCbG9jaykpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X2NvZGVCbG9jayk7Ci0gICAgfQorICAgIExMSW50Q2FsbGVlKHN0ZDo6dW5pcXVlX3B0cjxGdW5j
dGlvbkNvZGVCbG9jaz4sIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQ
dHI8TmFtZVNlY3Rpb24+PiYmKTsKKworICAgIHZvaWQgbGlua0V4Y2VwdGlvbkhhbmRsZXJzKCk7
CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCiAgICAgUmVmUHRyPEpJVENhbGxlZT4g
bV9yZXBsYWNlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsaW5nQ29udmVudGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxpbmdDb252ZW50aW9uLmgKaW5kZXggNmMwMjZlMDhhNDA5ZTk5NWQ0MzE4ZGZiMTgwNDYyNmQw
ZmFkMTc1Zi4uN2JmMDAxZWQ5MmVmY2JhZmMwZmJjOGE1MGI0YmY2MjcyNWQyY2NlNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgK
QEAgLTEyNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgcmVzdWx0c0luY2x1ZGVJ
NjQgPSBmYWxzZTsKICAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7CiAgICAgICAg
IHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAgICBzaXplX3QgYXJnU3RhY2tPZmZz
ZXQgPSBoZWFkZXJTaXplSW5CeXRlczsKKyAgICAgICAgc2l6ZV90IGFyZ1N0YWNrT2Zmc2V0ID0g
aGVhZGVyU2l6ZUluQnl0ZXMgKyBzaXplb2YoUmVnaXN0ZXIpOwogICAgICAgICBpZiAocm9sZSA9
PSBDYWxsUm9sZTo6Q2FsbGVyKQogICAgICAgICAgICAgYXJnU3RhY2tPZmZzZXQgLT0gc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpOwogCkBAIC0xMzYsNyArMTM2LDcgQEAgcHVibGljOgogICAgICAg
ICB9CiAgICAgICAgIGdwQXJndW1lbnRDb3VudCA9IDA7CiAgICAgICAgIGZwQXJndW1lbnRDb3Vu
dCA9IDA7Ci0gICAgICAgIHNpemVfdCByZXN1bHRTdGFja09mZnNldCA9IGhlYWRlclNpemVJbkJ5
dGVzOworICAgICAgICBzaXplX3QgcmVzdWx0U3RhY2tPZmZzZXQgPSBoZWFkZXJTaXplSW5CeXRl
cyArIHNpemVvZihSZWdpc3Rlcik7CiAgICAgICAgIGlmIChyb2xlID09IENhbGxSb2xlOjpDYWxs
ZXIpCiAgICAgICAgICAgICByZXN1bHRTdGFja09mZnNldCAtPSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCBjMGNi
MzFiN2NiZjAwNmFhMDE5MzZjMWY0NDZkNmIxODlmMGRlMTU1Li40OWRmOTUxNTQ3YzA4YTk4MTEw
NTA3ZWVlYzMxMTY4ZWY3YzVhOGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5oCkBAIC0yOSwxMSArMjksMTMgQEAKIAogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgog
I2luY2x1ZGUgIklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0
LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU5h
bWUuaCIKICNpbmNsdWRlICJXYXNtTmFtZVNlY3Rpb24uaCIKKyNpbmNsdWRlICJXYXNtT1NSRW50
cnlEYXRhLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21QYWdlQ291bnQu
aCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCkBAIC01MCw2ICs1Miw3IEBAIG5hbWVzcGFj
ZSBXYXNtIHsKIAogc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dDsKIHN0cnVjdCBNb2R1bGVJbmZv
cm1hdGlvbjsKK3N0cnVjdCBVbmxpbmtlZEhhbmRsZXJJbmZvOwogCiB1c2luZyBCbG9ja1NpZ25h
dHVyZSA9IGNvbnN0IFNpZ25hdHVyZSo7CiAKQEAgLTc2LDYgKzc5LDE5IEBAIGlubGluZSBib29s
IGlzVmFsdWVUeXBlKFR5cGUgdHlwZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2lubGluZSBK
U1N0cmluZyogdHlwZVRvU3RyaW5nKFZNJiB2bSwgVHlwZUtpbmQgdHlwZSkKK3sKKyNkZWZpbmUg
VFlQRV9DQVNFKG1hY3JvTmFtZSwgdmFsdWUsIGIzLCBpbmMsIHdhc21OYW1lKSBcCisgICAgY2Fz
ZSBUeXBlS2luZDo6bWFjcm9OYW1lOiBcCisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcodm0sICN3YXNtTmFtZSk7IFwKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBGT1Jf
RUFDSF9XQVNNX1RZUEUoVFlQRV9DQVNFKQorICAgIH0KKworI3VuZGVmIFRZUEVfQ0FTRQorfQor
CiBpbmxpbmUgYm9vbCBpc1N1YnR5cGUoVHlwZSBzdWIsIFR5cGUgcGFyZW50KQogewogICAgIGlm
IChzdWIuaXNOdWxsYWJsZSgpICYmICFwYXJlbnQuaXNOdWxsYWJsZSgpKQpAQCAtMTE1LDYgKzEz
MSw3IEBAIGVudW0gY2xhc3MgRXh0ZXJuYWxLaW5kIDogdWludDhfdCB7CiAgICAgVGFibGUgPSAx
LAogICAgIE1lbW9yeSA9IDIsCiAgICAgR2xvYmFsID0gMywKKyAgICBFeGNlcHRpb24gPSA0LAog
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSW50PgpAQCAtMTI1LDYgKzE0Miw3IEBAIGlubGluZSBi
b29sIGlzVmFsaWRFeHRlcm5hbEtpbmQoSW50IHZhbCkKICAgICBjYXNlIHN0YXRpY19jYXN0PElu
dD4oRXh0ZXJuYWxLaW5kOjpUYWJsZSk6CiAgICAgY2FzZSBzdGF0aWNfY2FzdDxJbnQ+KEV4dGVy
bmFsS2luZDo6TWVtb3J5KToKICAgICBjYXNlIHN0YXRpY19jYXN0PEludD4oRXh0ZXJuYWxLaW5k
OjpHbG9iYWwpOgorICAgIGNhc2Ugc3RhdGljX2Nhc3Q8SW50PihFeHRlcm5hbEtpbmQ6OkV4Y2Vw
dGlvbik6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMzQsNiArMTUyLDcgQEAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVybmFs
S2luZDo6RnVuY3Rpb24pID09IDAsICJXYXNtIG5lZWRzIEZ1bmN0aW8KIHN0YXRpY19hc3NlcnQo
c3RhdGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6OlRhYmxlKSAgICA9PSAxLCAiV2FzbSBuZWVk
cyBUYWJsZSB0byBoYXZlIHRoZSB2YWx1ZSAxIik7CiBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0
PGludD4oRXh0ZXJuYWxLaW5kOjpNZW1vcnkpICAgPT0gMiwgIldhc20gbmVlZHMgTWVtb3J5IHRv
IGhhdmUgdGhlIHZhbHVlIDIiKTsKIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihFeHRl
cm5hbEtpbmQ6Okdsb2JhbCkgICA9PSAzLCAiV2FzbSBuZWVkcyBHbG9iYWwgdG8gaGF2ZSB0aGUg
dmFsdWUgMyIpOworc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6
RXhjZXB0aW9uKSAgID09IDQsICJXYXNtIG5lZWRzIEV4Y2VwdGlvbiB0byBoYXZlIHRoZSB2YWx1
ZSA0Iik7CiAKIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKEV4dGVybmFsS2luZCBraW5k
KQogewpAQCAtMTQyLDYgKzE2MSw3IEBAIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKEV4
dGVybmFsS2luZCBraW5kKQogICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTogcmV0dXJuICJ0
YWJsZSI7CiAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogcmV0dXJuICJtZW1vcnkiOwog
ICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHJldHVybiAiZ2xvYmFsIjsKKyAgICBjYXNl
IEV4dGVybmFsS2luZDo6RXhjZXB0aW9uOiByZXR1cm4gInRhZyI7CiAgICAgfQogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuICI/IjsKQEAgLTM3Miw2ICszOTIs
OCBAQCBzdHJ1Y3QgRW50cnlwb2ludCB7CiBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbiB7CiAgICAg
V1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0cjxXYXNtRW50cnlQdHJUYWc+IGNhbGxlZU1vdmVMb2NhdGlvbjsKKyAgICBTdGFja01hcHMg
c3RhY2ttYXBzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBleGNlcHRpb25IYW5k
bGVyczsKICAgICBFbnRyeXBvaW50IGVudHJ5cG9pbnQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCmluZGV4IGVhNzVmZTJm
NmIwZjlhM2YxNGU3OTNlZDExMjc4ZWZkMGUwOWFjNzEuLjcyZjNlNjQxMzJjMTdiOTUxMWEzZWJl
YTZjNjBkMDAyNGIzMjdiNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDggKzI4LDEwIEBACiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkhh
bmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKICNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtSGFuZGxlckluZm8uaCIKICNp
bmNsdWRlICJXYXNtTExJbnRUaWVyVXBDb3VudGVyLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0xMjAsNiArMTIyLDEwIEBAIHB1YmxpYzoKICAg
ICBjb25zdCBKdW1wVGFibGUmIGp1bXBUYWJsZSh1bnNpZ25lZCB0YWJsZUluZGV4KSBjb25zdDsK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkp1bXBUYWJsZXMoKSBjb25zdDsKIAorICAgIHNpemVfdCBu
dW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV9leGNlcHRpb25IYW5k
bGVycy5zaXplKCk7IH0KKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5kbGVy
KGludCBpbmRleCkgeyByZXR1cm4gbV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07IH0KKyAgICB2
b2lkIGFkZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxl
cikgeyBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZChoYW5kbGVyKTsgfQorCiBwcml2YXRlOgog
ICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0LCBpbnQ+OwogCkBAIC0xMzksNiArMTQ1LDcgQEAgcHJpdmF0ZToKICAgICBPdXRP
ZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIExMSW50VGllclVw
Q291bnRlciBtX3RpZXJVcENvdW50ZXI7CiAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qdW1wVGFi
bGVzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJz
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggNGU2YjgzMjIwNDA3NzZhMjUx
NzIyZWVhMjE4ZjQ2YzJjMzk5MTMxMC4uZmFkN2Q3NjhlYjEwZjZiNTQ5YzdjODkxOGMxNzZkZTVm
MTJmZDY2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0
aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9u
UGFyc2VyLmgKQEAgLTM3LDcgKzM3LDE0IEBAIGVudW0gY2xhc3MgQmxvY2tUeXBlIHsKICAgICBJ
ZiwKICAgICBCbG9jaywKICAgICBMb29wLAotICAgIFRvcExldmVsCisgICAgVG9wTGV2ZWwsCisg
ICAgVHJ5LAorICAgIENhdGNoLAorfTsKKworZW51bSBjbGFzcyBDYXRjaEtpbmQgeworICAgIENh
dGNoLAorICAgIENhdGNoQWxsLAogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRW5jbG9zaW5nU3Rh
Y2ssIHR5cGVuYW1lIE5ld1N0YWNrPgpAQCAtMTQ3LDYgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbmRleEZvckxvY2FsKHVpbnQz
Ml90Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbmRleEZv
ckdsb2JhbCh1aW50MzJfdCYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlRnVuY3Rpb25JbmRleCh1aW50MzJfdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIHBhcnNlRXhjZXB0aW9uSW5kZXgodWludDMyX3QmKTsKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJyYW5jaFRhcmdldCh1aW50MzJfdCYpOwog
CiAgICAgc3RydWN0IFRhYmxlSW5pdEltbWVkaWF0ZXMgewpAQCAtMjExLDYgKzIxOSwxMiBAQCBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1fbG9vcEluZGV4IHsgMCB9OwogfTsKIAordGVtcGxhdGU8
dHlwZW5hbWUgQ29udHJvbFR5cGU+CitzdGF0aWMgYm9vbCBpc1RyeU9yQ2F0Y2goQ29udHJvbFR5
cGUmIGRhdGEpCit7CisgICAgcmV0dXJuIENvbnRyb2xUeXBlOjppc1RyeShkYXRhKSB8fCBDb250
cm9sVHlwZTo6aXNDYXRjaChkYXRhKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4K
IEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihDb250ZXh0JiBjb250ZXh0
LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykK
ICAgICA6IFBhcnNlcihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCkKQEAgLTU3NSw2ICs1
ODksMTYgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VGdW5jdGlvbkluZGV4
KHVpbnQzMl90JiByZXN1bHRJbmRleCkgLT4gUGFydGkKICAgICByZXR1cm4geyB9OwogfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
cGFyc2VFeGNlcHRpb25JbmRleCh1aW50MzJfdCYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgdWludDMyX3QgZXhjZXB0aW9uSW5kZXg7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoZXhjZXB0aW9uSW5kZXgpLCAiY2FuJ3QgcGFyc2UgZXhjZXB0aW9uIGlu
ZGV4Iik7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihleGNlcHRpb25JbmRleCA+PSBtX2lu
Zm8uZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSwgImV4Y2VwdGlvbiBpbmRleCAiLCBleGNlcHRp
b25JbmRleCwgIiBpcyBpbnZhbGlkLCBsaW1pdCBpcyAiLCBtX2luZm8uZXhjZXB0aW9uSW5kZXhT
cGFjZVNpemUoKSk7CisgICAgcmVzdWx0ID0gZXhjZXB0aW9uSW5kZXg7CisgICAgcmV0dXJuIHsg
fTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIGF1dG8gRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlQnJhbmNoVGFyZ2V0KHVpbnQzMl90JiByZXN1bHRUYXJnZXQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKQEAgLTEzMzMsNiArMTM1NywxMzEgQEAgRk9SX0VBQ0hfV0FTTV9NRU1P
UllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisg
ICAgY2FzZSBUcnk6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNl
V2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVk
Iik7CisKKyAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlOworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2ln
bmF0dXJlKSwgImNhbid0IGdldCB0cnkncyBzaWduYXR1cmUiKTsKKworICAgICAgICBXQVNNX1ZB
TElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGlubGluZVNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyBhcmd1bWVudHMgb24gc3RhY2sgZm9yIHRyeSBi
bG9jay4gVHJ5ZSBleHBlY3RzICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAi
LCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBU
cnkgYmxvY2sgaGFzIHNpZ25hdHVyZTogIiwgaW5saW5lU2lnbmF0dXJlLT50b1N0cmluZygpKTsK
KyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gaW5s
aW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICAg
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFja1tvZmZzZXQgKyBpXS50
eXBlKCkgIT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKSwgIlRyeSBleHBlY3RzIHRoZSBh
cmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVu
dChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBtX2V4cHJlc3Npb25TdGFja1tp
XS50eXBlKCkua2luZCk7CisKKyAgICAgICAgaW50NjRfdCBvbGRTaXplID0gbV9leHByZXNzaW9u
U3RhY2suc2l6ZSgpOworICAgICAgICBTdGFjayBuZXdTdGFjazsKKyAgICAgICAgQ29udHJvbFR5
cGUgY29udHJvbDsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkVHJ5KGlubGlu
ZVNpZ25hdHVyZSwgbV9leHByZXNzaW9uU3RhY2ssIGNvbnRyb2wsIG5ld1N0YWNrKSk7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQob2xkU2l6ZSwgb2xkU2l6ZSAtIG1fZXhwcmVzc2lvblN0YWNrLnNp
emUoKSA9PSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgICAgIEFTU0VS
VChuZXdTdGFjay5zaXplKCkgPT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwor
CisgICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZCh7IFdURk1vdmUobV9leHByZXNzaW9uU3Rh
Y2spLCB7IH0sIFdURk1vdmUoY29udHJvbCkgfSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNr
ID0gV1RGTW92ZShuZXdTdGFjayk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAg
Y2FzZSBDYXRjaDogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VX
ZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQi
KTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fY29udHJvbFN0YWNrLnNpemUoKSA9
PSAxLCAiY2FuJ3QgdXNlIGNhdGNoIGJsb2NrIGF0IHRoZSB0b3AtbGV2ZWwgb2YgYSBmdW5jdGlv
biIpOworCisgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4OworICAgICAgICBXQVNNX0ZB
SUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhjZXB0aW9uSW5kZXgpKTsK
KyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8uc2lnbmF0dXJl
SW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRleCk7CisgICAgICAgIGNv
bnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChzaWduYXR1cmVJbmRleCk7CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBjb250cm9sRW50
cnkgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYoIWlzVHJ5T3JDYXRjaChjb250cm9sRW50cnkuY29udHJvbERhdGEpLCAiY2F0Y2ggYmxvY2sg
aXNuJ3QgYXNzb2NpYXRlZCB0byBhIHRyeSIpOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVS
X0ZBSUxTKHVuaWZ5KGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworCisgICAgICAgIFJlc3Vs
dExpc3QgcmVzdWx0czsKKyAgICAgICAgU3RhY2sgcHJlQ2F0Y2hTdGFjazsKKyAgICAgICAgbV9l
eHByZXNzaW9uU3RhY2suc3dhcChwcmVDYXRjaFN0YWNrKTsKKyAgICAgICAgV0FTTV9UUllfQURE
X1RPX0NPTlRFWFQoYWRkQ2F0Y2goZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvblNpZ25hdHVyZSwg
cHJlQ2F0Y2hTdGFjaywgY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhLCByZXN1bHRzKSk7CisKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9
PSByZXN1bHRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNl
cHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBtX2V4cHJl
c3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50
KGkpLCByZXN1bHRzW2ldKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNl
IENhdGNoQWxsOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIp
OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09
IDEsICJjYW4ndCB1c2UgY2F0Y2ggYmxvY2sgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9u
Iik7CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFj
ay5sYXN0KCk7CisKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNUcnlPckNhdGNo
KGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSksICJjYXRjaCBibG9jayBpc24ndCBhc3NvY2lhdGVk
IHRvIGEgdHJ5Iik7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFModW5pZnkoY29u
dHJvbEVudHJ5LmNvbnRyb2xEYXRhKSk7CisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRzOwor
ICAgICAgICBTdGFjayBwcmVDYXRjaFN0YWNrOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5z
d2FwKHByZUNhdGNoU3RhY2spOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRD
YXRjaEFsbChwcmVDYXRjaFN0YWNrLCBjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIERlbGVnYXRlOiB7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAi
d2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09IDEsICJjYW4ndCB1c2UgZGVsZWdhdGUg
YXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7CisKKyAgICAgICAgdWludDMyX3QgdGFy
Z2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0
KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xFbnRyeSBjb250cm9sRW50cnkgPSBtX2NvbnRy
b2xTdGFjay50YWtlTGFzdCgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250
cm9sVHlwZTo6aXNUcnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSwgImRlbGVnYXRlIGlzbid0
IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKworICAgICAgICBDb250cm9sVHlwZSYgdGFyZ2V0RGF0
YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdLmNv
bnRyb2xEYXRhOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6
aXNUcnkodGFyZ2V0RGF0YSkgJiYgIUNvbnRyb2xUeXBlOjppc1RvcExldmVsKHRhcmdldERhdGEp
LCAiZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5IG9yIHRoZSB0b3AgbGV2ZWwgYmxvY2siKTsK
KworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGREZWxlZ2F0ZSh0YXJnZXREYXRh
LCBjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyh1bmlmeShjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKyAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQoZW5kQmxvY2soY29udHJvbEVudHJ5LCBtX2V4cHJlc3Npb25TdGFj
aykpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKGNvbnRyb2xFbnRyeS5lbmNsb3Nl
ZEV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgY2Fz
ZSBUaHJvdzogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJB
c3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsK
KworICAgICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lG
X0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisgICAg
ICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4
RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOworICAgICAgICBjb25zdCBT
aWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlSW5kZXgpOworCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHBy
ZXNzaW9uU3RhY2suc2l6ZSgpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwg
IlRvbyBmZXcgYXJndW1lbnRzIG9uIHN0YWNrIGZvciB0aGUgZXhjZXB0aW9uIGJlaW5nIHRocm93
bi4gVGhlIGV4Y2VwdGlvbiBleHBlY3RzICIsIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksICIsIGJ1dCBvbmx5ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB3ZXJlIHBy
ZXNlbnQuIEV4Y2VwdGlvbiBoYXMgc2lnbmF0dXJlOiAiLCBleGNlcHRpb25TaWduYXR1cmUudG9T
dHJpbmcoKSk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNp
emUoKSAtIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CisgICAgICAgIFZlY3Rv
cjxFeHByZXNzaW9uVHlwZT4gYXJnczsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJn
cy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSks
ICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciB0aHJvdydzICIsIGV4Y2VwdGlvblNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIik7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kp
IHsKKyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBhcmcgPSBtX2V4cHJlc3Npb25TdGFjay5h
dChvZmZzZXQgKyBpKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoYXJnLnR5
cGUoKSAhPSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSksICJUaGUgZXhjZXB0aW9uIGJl
aW5nIHRocm93biBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCAiLCBpLCAiIHRvIGJlICIs
IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMg
dHlwZSAiLCBhcmcudHlwZSgpLmtpbmQpOworICAgICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBl
bmQoYXJnKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1ZUZyb21TdGFjaygpOwor
ICAgICAgICB9CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhvZmZzZXQpOworCisg
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFRocm93KGV4Y2VwdGlvbkluZGV4LCBh
cmdzLCBtX2V4cHJlc3Npb25TdGFjaykpOworICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0g
MTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIFJldGhyb3c6IHsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRp
b25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAgdWlu
dDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJh
bmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250
cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7
CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjppc0FueUNhdGNo
KGRhdGEpLCAicmV0aHJvdyBkb2Vzbid0IHJlZmVyIHRvIGEgY2F0Y2ggYmxvY2siKTsKKworICAg
ICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRSZXRocm93KHRhcmdldCwgZGF0YSkpOwor
ICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKICAgICBjYXNlIEJyOgogICAgIGNhc2UgQnJJZjogewogICAgICAgICB1aW50MzJfdCB0
YXJnZXQ7CkBAIC0xNDg3LDYgKzE2MzYsNjYgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0
Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogCisgICAgY2FzZSBDYXRjaDogeworICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20g
ZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICB1aW50MzJfdCBleGNlcHRp
b25JbmRleDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlv
bkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7CisgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhj
ZXB0aW9uSW5kZXgpOworICAgICAgICBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVy
ZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworCisgICAgICAg
IGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisK
KyAgICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9jb250cm9sU3RhY2subGFzdCgpOworICAg
ICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1RyeU9yQ2F0Y2goZGF0YS5jb250cm9sRGF0
YSksICJjYXRjaCBibG9jayBpc24ndCBhc3NvY2lhdGVkIHRvIGEgdHJ5Iik7CisKKyAgICAgICAg
bV91bnJlYWNoYWJsZUJsb2NrcyA9IDA7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0geyB9
OworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19D
T05URVhUKGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRleCwgZXhjZXB0aW9uU2ln
bmF0dXJlLCBkYXRhLmNvbnRyb2xEYXRhLCByZXN1bHRzKSk7CisKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSByZXN1bHRzLnNpemUo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25z
dHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkpLCByZXN1bHRzW2ld
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIENhdGNoQWxsOiB7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0
aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIGlm
IChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9jb250cm9sU3RhY2subGFzdCgpOworICAgICAg
ICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMDsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSB7
IH07CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzVHJ5T3JDYXRjaChkYXRhLmNv
bnRyb2xEYXRhKSwgImNhdGNoIGJsb2NrIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKyAg
ICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKGRh
dGEuY29udHJvbERhdGEpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNl
IERlbGVnYXRlOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIp
OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09
IDEsICJjYW4ndCB1c2UgZGVsZWdhdGUgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9uIik7
CisKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVS
X0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisgICAgICAgIENvbnRyb2xFbnRy
eSBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOworICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKCFDb250cm9sVHlwZTo6aXNUcnkoY29udHJvbEVudHJ5LmNvbnRy
b2xEYXRhKSwgImRlbGVnYXRlIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKworICAgICAg
ICBDb250cm9sVHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUo
KSAtIDEgLSB0YXJnZXRdLmNvbnRyb2xEYXRhOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKCFDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkgJiYgIUNvbnRyb2xUeXBlOjppc1RvcExldmVs
KGRhdGEpLCAiZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5IGJsb2NrIik7CisKKyAgICAgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKGRhdGEsIGNv
bnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworICAgICAgICBTdGFjayBlbXB0eVN0YWNrOworICAg
ICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbmRUb1VucmVhY2hhYmxlKGNvbnRyb2xF
bnRyeSwgZW1wdHlTdGFjaykpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKGNvbnRy
b2xFbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCiAgICAgY2FzZSBFbmQ6IHsKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3Mg
PT0gMSkgewogICAgICAgICAgICAgQ29udHJvbEVudHJ5IGRhdGEgPSBtX2NvbnRyb2xTdGFjay50
YWtlTGFzdCgpOwpAQCAtMTQ5NSw4ICsxNzA0LDEwIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAg
ICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gV1RGTW92ZShkYXRhLmVsc2VCbG9ja1N0
YWNrKTsKICAgICAgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KGRh
dGEuY29udHJvbERhdGEpKTsKICAgICAgICAgICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChlbmRCbG9jayhkYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwotICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRW5kVG9VbnJlYWNo
YWJsZShkYXRhKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFN0YWNr
IGVtcHR5U3RhY2s7CisgICAgICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRk
RW5kVG9VbnJlYWNoYWJsZShkYXRhLCBlbXB0eVN0YWNrKSk7CisgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoZGF0YS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjayk7CiAgICAgICAgIH0KQEAgLTE1MDQsNiArMTcxNSwxMCBAQCBhdXRvIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1
bHQKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKKyAgICBjYXNlIFRyeToKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCks
ICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisgICAgICAgIEZBTExUSFJPVUdI
OworCiAgICAgY2FzZSBMb29wOgogICAgIGNhc2UgSWY6CiAgICAgY2FzZSBCbG9jazogewpAQCAt
MTU3Niw2ICsxNzkxLDE2IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5y
ZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAorICAgIGNhc2UgUmV0aHJvdzogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9u
cyBhcmUgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0OworICAgICAgICBX
QVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQnJhbmNoVGFyZ2V0KHRhcmdldCkpOworCisg
ICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2su
c2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7CisgICAgICAgIFdBU01fVkFMSURBVE9S
X0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpLCAicmV0aHJvdyBkb2Vzbid0
IHJlZmVyIHRvIGEgY2F0Y2ggYmxvY2siKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
ICAgICBjYXNlIEJyOgogICAgIGNhc2UgQnJJZjogewogICAgICAgICB1aW50MzJfdCB0YXJnZXQ7
CkBAIC0xNTgzLDYgKzE4MDgsMTUgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCisgICAgY2FzZSBUaHJvdzogeworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0
aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRl
eDsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4
KGV4Y2VwdGlvbkluZGV4KSk7CisKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBj
YXNlIEkzMkNvbnN0OiB7CiAgICAgICAgIGludDMyX3QgdW51c2VkOwogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDMyKHVudXNlZCksICJjYW4ndCBnZXQgaW1tZWRpYXRl
IGZvciAiLCBtX2N1cnJlbnRPcGNvZGUsICIgaW4gdW5yZWFjaGFibGUgY29udGV4dCIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5mby5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTU3YmNmNDliYjJjZWExNzUwZmZiNmJmMWU1NWE3ODIzZGYxMzYyMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5mby5jcHAKQEAg
LTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21IYW5kbGVySW5mby5oIgor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCisj
aW5jbHVkZSAiV2FzbVRhZy5oIgorCituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBXYXNtIHsK
Kwordm9pZCBIYW5kbGVySW5mbzo6aW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZv
JiB1bmxpbmtlZEluZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPiBsYWJlbCkKK3sKKyAgICBtX3R5cGUgPSB1bmxpbmtlZEluZm8ubV90eXBlOworICAgIG1f
c3RhcnQgPSB1bmxpbmtlZEluZm8ubV9zdGFydDsKKyAgICBtX2VuZCA9IHVubGlua2VkSW5mby5t
X2VuZDsKKyAgICBtX3RhcmdldCA9IHVubGlua2VkSW5mby5tX3RhcmdldDsKKyAgICBtX3RyeURl
cHRoID0gdW5saW5rZWRJbmZvLm1fdHJ5RGVwdGg7CisgICAgbV9uYXRpdmVDb2RlID0gbGFiZWw7
CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSGFuZGxlclR5cGU6OkNhdGNoOgor
ICAgICAgICBtX3RhZyA9IHVubGlua2VkSW5mby5tX2V4Y2VwdGlvbkluZGV4T3JEZWxlZ2F0ZVRh
cmdldDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhhbmRsZXJUeXBlOjpDYXRjaEFsbDoK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZToKKyAgICAg
ICAgbV9kZWxlZ2F0ZVRhcmdldCA9IHVubGlua2VkSW5mby5tX2V4Y2VwdGlvbkluZGV4T3JEZWxl
Z2F0ZVRhcmdldDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitjb25zdCBIYW5kbGVySW5m
byogSGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRleChJbnN0YW5jZSYgaW5zdGFuY2UsIGNvbnN0
IFZlY3RvcjxIYW5kbGVySW5mbz4mIGV4ZXB0aW9uSGFuZGxlcnMsIHVuc2lnbmVkIGluZGV4LCBj
b25zdCBXYXNtOjpUYWcqIGV4Y2VwdGlvblRhZykKK3sKKyAgICBib29sIGRlbGVnYXRpbmcgPSBm
YWxzZTsKKyAgICB1bnNpZ25lZCBkZWxlZ2F0ZVRhcmdldCA9IDA7CisgICAgZm9yIChhdXRvJiBo
YW5kbGVyIDogZXhlcHRpb25IYW5kbGVycykgeworICAgICAgICAvLyBIYW5kbGVycyBhcmUgb3Jk
ZXJlZCBpbm5lcm1vc3QgZmlyc3QsIHNvIHRoZSBmaXJzdCBoYW5kbGVyIHdlIGVuY291bnRlcgor
ICAgICAgICAvLyB0aGF0IGNvbnRhaW5zIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyB0aGUgY29ycmVj
dCBoYW5kbGVyIHRvIHVzZS4KKyAgICAgICAgLy8gVGhpcyBpbmRleCB1c2VkIGlzIGVpdGhlciB0
aGUgQnl0ZWNvZGVPZmZzZXQgb3IgYSBDYWxsU2l0ZUluZGV4LgorICAgICAgICBpZiAoaGFuZGxl
ci5tX3N0YXJ0IDw9IGluZGV4ICYmIGhhbmRsZXIubV9lbmQgPiBpbmRleCkgeworICAgICAgICAg
ICAgaWYgKGRlbGVnYXRpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5tX3RyeURl
cHRoICE9IGRlbGVnYXRlVGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBkZWxlZ2F0aW5nID0gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGJvb2wgbWF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgIHN3aXRjaCAoaGFuZGxlci5t
X3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSGFuZGxlclR5cGU6OkNhdGNoOgorICAgICAgICAg
ICAgICAgIG1hdGNoID0gZXhjZXB0aW9uVGFnICYmIGluc3RhbmNlLnRhZyhoYW5kbGVyLm1fdGFn
KSA9PSAqZXhjZXB0aW9uVGFnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBIYW5kbGVyVHlwZTo6Q2F0Y2hBbGw6CisgICAgICAgICAgICAgICAgbWF0Y2ggPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBIYW5kbGVyVHlwZTo6
RGVsZWdhdGU6CisgICAgICAgICAgICAgICAgZGVsZWdhdGluZyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgZGVsZWdhdGVUYXJnZXQgPSBoYW5kbGVyLm1fZGVsZWdhdGVUYXJnZXQ7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbWF0Y2gp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHJldHVybiAmaGFuZGxl
cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
MjUxMTkzZDIxMzE3OWViZGU5OTU0NGMyNTNlZDQ5ODlkMmY2NDNlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmgKQEAgLTAsMCAr
MSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkNvZGVM
b2NhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
bmFtZXNwYWNlIFdhc20geworCitjbGFzcyBJbnN0YW5jZTsKK2NsYXNzIFRhZzsKKworZW51bSBj
bGFzcyBIYW5kbGVyVHlwZSB7CisgICAgQ2F0Y2ggPSAwLAorICAgIENhdGNoQWxsID0gMSwKKyAg
ICBEZWxlZ2F0ZSA9IDIsCit9OworCitzdHJ1Y3QgSGFuZGxlckluZm9CYXNlIHsKKyAgICBIYW5k
bGVyVHlwZSBtX3R5cGU7CisgICAgdWludDMyX3QgbV9zdGFydDsKKyAgICB1aW50MzJfdCBtX2Vu
ZDsKKyAgICB1aW50MzJfdCBtX3RhcmdldDsKKyAgICB1aW50MzJfdCBtX3RyeURlcHRoOworICAg
IHVpbnQzMl90IG1fZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0OworfTsKKworc3RydWN0
IFVubGlua2VkSGFuZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9CYXNlIHsKKyAgICBVbmxp
bmtlZEhhbmRsZXJJbmZvKCkKKyAgICB7CisgICAgfQorCisgICAgVW5saW5rZWRIYW5kbGVySW5m
byhIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCwg
dWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCB0cnlEZXB0aCwgdWludDMyX3QgZXhjZXB0aW9uSW5k
ZXhPckRlbGVnYXRlVGFyZ2V0KQorICAgIHsKKyAgICAgICAgbV90eXBlID0gaGFuZGxlclR5cGU7
CisgICAgICAgIG1fc3RhcnQgPSBzdGFydDsKKyAgICAgICAgbV9lbmQgPSBlbmQ7CisgICAgICAg
IG1fdGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICBtX3RyeURlcHRoID0gdHJ5RGVwdGg7CisgICAg
ICAgIG1fZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFyZ2V0ID0gZXhjZXB0aW9uSW5kZXhPckRl
bGVnYXRlVGFyZ2V0OworICAgIH0KK307CisKK3N0cnVjdCBIYW5kbGVySW5mbyA6IHB1YmxpYyBI
YW5kbGVySW5mb0Jhc2UgeworICAgIHN0YXRpYyBjb25zdCBIYW5kbGVySW5mbyogaGFuZGxlckZv
ckluZGV4KEluc3RhbmNlJiwgY29uc3QgVmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhlcHRpb25IYW5k
bGVycywgdW5zaWduZWQgaW5kZXgsIGNvbnN0IFdhc206OlRhZyogZXhjZXB0aW9uVGFnKTsKKwor
ICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KTsKKworICAgIHVuc2lnbmVkIHRh
ZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IEhhbmRsZXJUeXBlOjpD
YXRjaCk7CisgICAgICAgIHJldHVybiBtX3RhZzsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBkZWxl
Z2F0ZVRhcmdldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IEhhbmRs
ZXJUeXBlOjpEZWxlZ2F0ZSk7CisgICAgICAgIHJldHVybiBtX2RlbGVnYXRlVGFyZ2V0OworICAg
IH0KKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBt
X25hdGl2ZUNvZGU7CisKK3ByaXZhdGU6CisgICAgdW5pb24geworICAgICAgICB1bnNpZ25lZCBt
X3RhZzsKKyAgICAgICAgdW5zaWduZWQgbV9kZWxlZ2F0ZVRhcmdldDsKKyAgICB9OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCmluZGV4IGZm
ZDc1YzhkMGM4ZjlhYjczMWY3Y2I0OWE4NDJkOTA2NWI4MjgzYjYuLmFiMDdmZmE3NjIzYTM0NTA5
MDk4NWVlNmVhYzRlZWZlOTIwODg2YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlJlZ2lzdGVyLmgi
CiAjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25h
dHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVGFnLmgiCiAjaW5jbHVkZSA8d3RmL0NoZWNr
ZWRBcml0aG1ldGljLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CkBAIC05
MCw3ICs5MSw5IEBAIFJlZjxJbnN0YW5jZT4gSW5zdGFuY2U6OmNyZWF0ZShDb250ZXh0KiBjb250
ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgRW50cnlGcmFtCiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemUobW9kdWxlLT5tb2R1bGVJ
bmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSwgbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpLnRhYmxlQ291bnQoKSkpKSBJbnN0YW5jZShjb250ZXh0LCBXVEZNb3ZlKG1vZHVsZSks
IHBvaW50ZXJUb1RvcEVudHJ5RnJhbWUsIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQsIFdURk1v
dmUoc3RvcmVUb3BDYWxsRnJhbWUpKSk7CiB9CiAKLUluc3RhbmNlOjp+SW5zdGFuY2UoKSB7IH0K
K0luc3RhbmNlOjp+SW5zdGFuY2UoKQoreworfQogCiBzaXplX3QgSW5zdGFuY2U6OmV4dHJhTWVt
b3J5QWxsb2NhdGVkKCkgY29uc3QKIHsKQEAgLTI5Nyw2ICszMDAsMTYgQEAgdm9pZCBJbnN0YW5j
ZTo6bGlua0dsb2JhbCh1bnNpZ25lZCBpLCBSZWY8R2xvYmFsPiYmIGdsb2JhbCkKICAgICBtX2xp
bmtlZEdsb2JhbHMuc2V0KGksIFdURk1vdmUoZ2xvYmFsKSk7CiB9CiAKK3ZvaWQgSW5zdGFuY2U6
OmFkZFRhZyhjb25zdCBUYWcmIHRhZykKK3sKKyAgICBtX3RhZ3MuYXBwZW5kKFJlZiB7IHRhZyB9
KTsKK30KKwordm9pZCBJbnN0YW5jZTo6YWRkVGFnKFJlZjxUYWc+JiYgdGFnKQoreworICAgIG1f
dGFncy5hcHBlbmQoV1RGTW92ZSh0YWcpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUluc3RhbmNlLmgKaW5kZXggNjBlMTRjYjVhYzA2NTgyNDQzNDM3ODA5ZDU0NjMz
ZWRmNzFjYzhiOS4uYzJhYTUzNDAxNTZiNGNiOTY3ZWMzZmU2MmQxM2UyYWQzZmQ3ZWJmNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTIxMCw2ICsyMTAs
MTAgQEAgcHVibGljOgogICAgICAgICBtX3N0b3JlVG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CiAg
ICAgfQogCisgICAgdm9pZCBhZGRUYWcoY29uc3QgVGFnJik7CisgICAgdm9pZCBhZGRUYWcoUmVm
PFRhZz4mJik7CisgICAgY29uc3QgVGFnJiB0YWcodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4g
Km1fdGFnc1tpXTsgfQorCiBwcml2YXRlOgogICAgIEluc3RhbmNlKENvbnRleHQqLCBSZWY8TW9k
dWxlPiYmLCBFbnRyeUZyYW1lKiosIHZvaWQqKiwgU3RvcmVUb3BDYWxsRnJhbWVDYWxsYmFjayYm
KTsKICAgICAKQEAgLTIzNyw2ICsyNDEsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDMy
X3QsIFJlZjxHbG9iYWw+LCBJbnRIYXNoPHVpbnQzMl90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fbGlua2VkR2xvYmFsczsKICAgICBCaXRWZWN0b3Ig
bV9wYXNzaXZlRWxlbWVudHM7CiAgICAgQml0VmVjdG9yIG1fcGFzc2l2ZURhdGFTZWdtZW50czsK
KyAgICBWZWN0b3I8UmVmUHRyPGNvbnN0IFRhZz4+IG1fdGFnczsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTExJbnRHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxM
SW50R2VuZXJhdG9yLmNwcAppbmRleCA4MWE1Y2RiY2FlMzI4NmJlMzJjYTQ5MGRlNDVlZTNhZmY3
ODE5ODU2Li4zNTc2NjZiZGMzZDY1ZGU0NTcwZmQ1NWU4OTljNjZlZWQxMjgzYzExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKQEAg
LTYyLDggKzYyLDI2IEBAIHB1YmxpYzoKICAgICAgICAgUmVmPExhYmVsPiBtX2FsdGVybmF0ZTsK
ICAgICB9OwogCi0gICAgc3RydWN0IENvbnRyb2xUeXBlIDogcHVibGljIFZhcmlhbnQ8Q29udHJv
bExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWY+IHsKLSAgICAg
ICAgdXNpbmcgQmFzZSA9IFZhcmlhbnQ8Q29udHJvbExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29u
dHJvbEJsb2NrLCBDb250cm9sSWY+OworICAgIHN0cnVjdCBDb250cm9sVHJ5IHsKKyAgICAgICAg
UmVmPExhYmVsPiBtX3RyeTsKKyAgICAgICAgdW5zaWduZWQgbV90cnlEZXB0aDsKKyAgICB9Owor
CisgICAgc3RydWN0IENvbnRyb2xDYXRjaCB7CisgICAgICAgIENhdGNoS2luZCBtX2tpbmQ7Cisg
ICAgICAgIFJlZjxMYWJlbD4gbV90cnlTdGFydDsKKyAgICAgICAgUmVmPExhYmVsPiBtX3RyeUVu
ZDsKKyAgICAgICAgdW5zaWduZWQgbV90cnlEZXB0aDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG1fZXhjZXB0aW9uOworICAgIH07CisKKyAgICBzdHJ1Y3QgQ2F0Y2hSZXdyaXRlSW5mbyB7Cisg
ICAgICAgIHVuc2lnbmVkIG1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIG1f
dHJ5RGVwdGg7CisgICAgfTsKKworICAgIHN0cnVjdCBDb250cm9sVHlwZSA6IHB1YmxpYyBWYXJp
YW50PENvbnRyb2xMb29wLCBDb250cm9sVG9wTGV2ZWwsIENvbnRyb2xCbG9jaywgQ29udHJvbElm
LCBDb250cm9sVHJ5LCBDb250cm9sQ2F0Y2g+IHsKKyAgICAgICAgdXNpbmcgQmFzZSA9IFZhcmlh
bnQ8Q29udHJvbExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWYs
IENvbnRyb2xUcnksIENvbnRyb2xDYXRjaD47CiAKICAgICAgICAgQ29udHJvbFR5cGUoKQogICAg
ICAgICAgICAgOiBCYXNlKENvbnRyb2xCbG9jayB7IH0pCkBAIC05MCw4ICsxMDgsMjkgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXpl
IC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29u
dHJvbElmIHsgV1RGTW92ZShhbHRlcm5hdGUpIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3Rh
dGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxDb250cm9sSWY+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBD
b250cm9sVHlwZSBjcmVhdGVUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBz
dGFja1NpemUsIFJlZjxMYWJlbD4mJiB0cnlMYWJlbCwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVh
dGlvbiwgdW5zaWduZWQgdHJ5RGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBD
b250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3Vu
dCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xUcnkgeyBXVEZNb3ZlKHRyeUxhYmVs
KSwgdHJ5RGVwdGggfSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUg
Y3JlYXRlQ2F0Y2goQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUs
IFJlZjxMYWJlbD4mJiB0cnlTdGFydCwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbiwgUmVm
PExhYmVsPiB0cnlFbmQsIHVuc2lnbmVkIHRyeURlcHRoLCBWaXJ0dWFsUmVnaXN0ZXIgZXhjZXB0
aW9uKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJl
LCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51
YXRpb24pLCBDb250cm9sQ2F0Y2ggeyBDYXRjaEtpbmQ6OkNhdGNoLCBXVEZNb3ZlKHRyeVN0YXJ0
KSwgV1RGTW92ZSh0cnlFbmQpLCB0cnlEZXB0aCwgZXhjZXB0aW9uIH0pOworICAgICAgICB9CisK
KyAgICAgICAgc3RhdGljIGJvb2wgaXNMb29wKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7
IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29wPihjb250cm9sKTsgfQog
ICAgICAgICBzdGF0aWMgYm9vbCBpc1RvcExldmVsKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9s
KSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xUb3BMZXZlbD4oY29udHJv
bCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNCbG9jayhjb25zdCBDb250cm9sVHlwZSYgY29u
dHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQmxvY2s+KGNvbnRy
b2wpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRy
b2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbElmPihjb250cm9sKTsg
fQorICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkg
eyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sVHJ5Pihjb250cm9sKTsgfQor
ICAgICAgICBzdGF0aWMgYm9vbCBpc0FueUNhdGNoKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9s
KSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xDYXRjaD4oY29udHJvbCk7
IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNDYXRjaChjb25zdCBDb250cm9sVHlwZSYgY29udHJv
bCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENv
bnRyb2xDYXRjaD4oY29udHJvbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgQ29udHJvbENhdGNoIGNhdGNoRGF0YSA9IFdURjo6Z2V0PENvbnRyb2xDYXRjaD4o
Y29udHJvbCk7CisgICAgICAgICAgICByZXR1cm4gY2F0Y2hEYXRhLm1fa2luZCA9PSBDYXRjaEtp
bmQ6OkNhdGNoOworICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zdGFja1NpemU7IH0KICAgICAgICAgQmxvY2tTaWduYXR1cmUgc2lnbmF0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmU7IH0KQEAgLTE1MiwxNyArMTkxLDI0IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2Vi
QXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4u
LikpOwogICAgIH0KIAotICAgIExMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJik7CisgICAgTExJbnRH
ZW5lcmF0b3IoTW9kdWxlSW5mb3JtYXRpb24mLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4g
ZmluYWxpemUoKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KKyAgICB2b2lkIHJl
cGF0Y2goY29uc3QgQ2F0Y2hSZXdyaXRlSW5mbyYpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhwcmVzc2lvbkxpc3RBLCB0eXBlbmFtZSBFeHByZXNzaW9uTGlzdEI+CiAgICAgdm9pZCB1bmlm
eVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdEEmIGRlc3RpbmF0aW9ucywgY29u
c3QgRXhwcmVzc2lvbkxpc3RCJiB2YWx1ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoZGVzdGlu
YXRpb25zLnNpemUoKSA8PSB2YWx1ZXMuc2l6ZSgpKTsKICAgICAgICAgYXV0byBvZmZzZXQgPSB2
YWx1ZXMuc2l6ZSgpIC0gZGVzdGluYXRpb25zLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBXYXNtTW92
OjplbWl0KHRoaXMsIGRlc3RpbmF0aW9uc1tpXSwgdmFsdWVzW29mZnNldCArIGldKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGF1dG8mIHNyYyA9IHZhbHVlc1tvZmZzZXQgKyBpXTsKKyAgICAgICAgICAgIGF1
dG8mIGRzdCA9IGRlc3RpbmF0aW9uc1tpXTsKKyAgICAgICAgICAgIGlmICgoVmlydHVhbFJlZ2lz
dGVyKXNyYyAhPSAoVmlydHVhbFJlZ2lzdGVyKWRzdCkKKyAgICAgICAgICAgICAgICBXYXNtTW92
OjplbWl0KHRoaXMsIGRzdCwgc3JjKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGVudW0gTm9D
b25zaXN0ZW5jeUNoZWNrVGFnIHsgTm9Db25zaXN0ZW5jeUNoZWNrIH07CkBAIC0yNDMsMTEgKzI4
OSwyMSBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
RWxzZShDb250cm9sVHlwZSYsIFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKIAorICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2sm
IGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4
Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVz
dWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNo
VG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwg
Q29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQ2F0Y2hBbGwoU3RhY2smLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9s
VHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRl
KENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmLCBDb250cm9s
VHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRocm93KHVu
c2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFj
ayYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldGhyb3codW5z
aWduZWQsIENvbnRyb2xUeXBlJik7CisKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbFR5cGUmLCBTdGFjayYgcmV0dXJuVmFsdWVzKTsK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbFR5
cGUmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZSo+JiB0YXJnZXRzLCBDb250cm9s
VHlwZSYgZGVmYXVsdFRhcmdldHMsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIFN0YWNr
JiBleHByZXNzaW9uU3RhY2spOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiwgY29uc3QgU3RhY2smIGV4cHJlc3Np
b25TdGFjayA9IHsgfSwgYm9vbCB1bnJlYWNoYWJsZSA9IHRydWUpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jiwg
U3RhY2smIGV4cHJlc3Npb25TdGFjaywgYm9vbCB1bnJlYWNoYWJsZSA9IHRydWUpOwogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJl
LCBjb25zdCBTdGFjayYpOwogCiAgICAgLy8gQ2FsbHMKQEAgLTMzNyw3ICszOTMsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgV2FzbURyb3BLZWVwOjplbWl0KHRoaXMsIHN0YXJ0T2Zmc2V0LCBk
cm9wLCBrZWVwKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFN0YWNrLCB0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgd2Fs
a0V4cHJlc3Npb25TdGFjayhTdGFjayYgZXhwcmVzc2lvblN0YWNrLCB1bnNpZ25lZCBzdGFja1Np
emUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBleHByZXNzaW9uU3RhY2suc2l6ZSgpOyBpID4gMDsgLS1pKSB7CkBAIC0zNDYsNyArNDAy
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RhY2ssIHR5cGVuYW1lIEZ1bmN0b3I+
CiAgICAgdm9pZCB3YWxrRXhwcmVzc2lvblN0YWNrKFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNr
KGV4cHJlc3Npb25TdGFjaywgbV9zdGFja1NpemUsIGZ1bmN0b3IpOwpAQCAtMzU1LDcgKzQxMSw4
IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHdh
bGtFeHByZXNzaW9uU3RhY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKICAgICB7Ci0gICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZW50cnkuZW5jbG9zZWRF
eHByZXNzaW9uU3RhY2ssIGVudHJ5LmNvbnRyb2xEYXRhLnN0YWNrU2l6ZSgpLCBmdW5jdG9yKTsK
KyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplID0gZW50cnkuY29udHJvbERhdGEuc3RhY2tTaXpl
KCk7CisgICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZW50cnkuZW5jbG9zZWRFeHByZXNzaW9u
U3RhY2ssIHN0YWNrU2l6ZSwgZnVuY3Rvcik7CiAgICAgfQogCiAgICAgdm9pZCBjaGVja0NvbnNp
c3RlbmN5KCkKQEAgLTM4MSw3ICs0MzgsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBtYXRlcmlh
bGl6ZUNvbnN0YW50c0FuZExvY2FscyhTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBOb0NvbnNpc3Rl
bmN5Q2hlY2tUYWcpCiAgICAgewotICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGV4cHJlc3Np
b25TdGFjaywgWyZdKFR5cGVkRXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVmlydHVhbFJlZ2lzdGVy
IHNsb3QpIHsKKyAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhleHByZXNzaW9uU3RhY2ssIFsm
XShhdXRvJiBleHByZXNzaW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgewogICAgICAgICAgICAg
QVNTRVJUKGV4cHJlc3Npb24udmFsdWUoKSA9PSBzbG90IHx8IGV4cHJlc3Npb24udmFsdWUoKS5p
c0NvbnN0YW50KCkgfHwgZXhwcmVzc2lvbi52YWx1ZSgpLmlzQXJndW1lbnQoKSB8fCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZXhwcmVzc2lvbi52YWx1ZSgpLnRvTG9jYWwoKSkgPCBtX2NvZGVCbG9j
ay0+bV9udW1WYXJzKTsKICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLnZhbHVlKCkgPT0gc2xv
dCkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00MTcsNiArNDc0LDggQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9zdGFja1NpemUgKz0gbmV3U3RhY2suc2l6ZSgpOwogICAgIH0KIAorICAgIHZv
aWQgZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2goQ29udHJvbFR5cGUmLCBTdGFjayYpOwor
CiAgICAgc3RydWN0IFN3aXRjaEVudHJ5IHsKICAgICAgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldCBvZmZzZXQ7CiAgICAgICAgIGludCoganVtcFRhcmdldDsKQEAgLTQyOSw3ICs0ODgsNyBA
QCBwcml2YXRlOgogICAgIH07CiAKICAgICBGdW5jdGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj4q
IG1fcGFyc2VyIHsgbnVsbHB0ciB9OwotICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2lu
Zm87CisgICAgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKICAgICBjb25zdCB1bnNpZ25lZCBt
X2Z1bmN0aW9uSW5kZXggeyBVSU5UX01BWCB9OwogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+
IG1fbm9ybWFsaXplZEFyZ3VtZW50czsKICAgICBIYXNoTWFwPExhYmVsKiwgVmVjdG9yPFN3aXRj
aEVudHJ5Pj4gbV9zd2l0Y2hlczsKQEAgLTQ0MCw5ICs0OTksMTIgQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAyPiBtX3Jlc3VsdHM7CiAgICAgQ2hlY2tlZDx1bnNpZ25l
ZD4gbV9zdGFja1NpemUgeyAwIH07CiAgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9tYXhTdGFja1Np
emUgeyAwIH07CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV90cnlEZXB0aCB7IDAgfTsKKyAgICBD
aGVja2VkPHVuc2lnbmVkPiBtX21heFRyeURlcHRoIHsgMCB9OworICAgIGJvb2wgbV91c2VzRXhj
ZXB0aW9ucyB7IGZhbHNlIH07CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rp
b25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4
X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4KQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwg
U3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90KiBmdW5jdGlvblN0
YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBN
b2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdWludDMyX3QgZnVuY3Rpb25JbmRleCkKIHsKICAgICBM
TEludEdlbmVyYXRvciBsbGludEdlbmVyYXRvcihpbmZvLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1
cmUpOwogICAgIEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiBwYXJzZXIobGxpbnRHZW5l
cmF0b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOwpA
QCAtNDY2LDcgKzUyOCw3IEBAIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxCdWZmZXI+JiB0aHJlYWRT
cGVjaWZpY0J1ZmZlcigpCiAgICAgcmV0dXJuICp0aHJlYWRTcGVjaWZpY0J1ZmZlclB0cjsKIH0K
IAotTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKQorTExJbnRH
ZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKQogICAgIDogQnl0ZWNvZGVHZW5lcmF0
b3JCYXNlKG1ha2VVbmlxdWU8RnVuY3Rpb25Db2RlQmxvY2s+KGZ1bmN0aW9uSW5kZXgpLCAwKQog
ICAgICwgbV9pbmZvKGluZm8pCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkK
QEAgLTQ4NSw5ICs1NDcsMjIgQEAgTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkkKICAgICBXYXNtRW50
ZXI6OmVtaXQodGhpcyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3ZvaWQgTExJ
bnRHZW5lcmF0b3I6OnJlcGF0Y2goY29uc3QgQ2F0Y2hSZXdyaXRlSW5mbyYgaW5mbykKK3sKKyAg
ICBhdXRvIHJlZiA9IG1fd3JpdGVyLnJlZihpbmZvLm1faW5zdHJ1Y3Rpb25PZmZzZXQpOworICAg
IE9wY29kZSogaW5zdHJ1Y3Rpb24gPSByZWYtPmNhc3Q8T3Bjb2RlLCBXYXNtT3Bjb2RlVHJhaXRz
PigpOworICAgIFZpcnR1YWxSZWdpc3RlciBleGNlcHRpb25SZWdpc3RlciA9IHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKG1fbWF4U3RhY2tTaXplICsgaW5mby5tX3RyeURlcHRoIC0gMSk7CisgICAg
aW5zdHJ1Y3Rpb24tPnNldEV4Y2VwdGlvbihleGNlcHRpb25SZWdpc3RlciwgW10oKSB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICB9KTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiBMTEludEdlbmVyYXRvcjo6ZmluYWxpemUoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1f
Y29kZUJsb2NrKTsKKwogICAgIHNpemVfdCBudW1DYWxsZWVMb2NhbHMgPSBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgbV9tYXhTdGFja1NpemUpOwog
ICAgIG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxvY2FscyA9IG51bUNhbGxlZUxvY2FsczsKICAg
ICBSRUxFQVNFX0FTU0VSVChudW1DYWxsZWVMb2NhbHMgPT0gbV9jb2RlQmxvY2stPm1fbnVtQ2Fs
bGVlTG9jYWxzKTsKQEAgLTUwMCw2ICs1NzUsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25D
b2RlQmxvY2s+IExMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSgpCiAgICAgUkVMRUFTRV9BU1NFUlQo
dXNlZEJ1ZmZlci5jYXBhY2l0eSgpID09IG9sZENhcGFjaXR5KTsKICAgICAqdGhyZWFkU3BlY2lm
aWMgPSBXVEZNb3ZlKHVzZWRCdWZmZXIpOwogCisgICAgaWYgKCFtX3VzZXNFeGNlcHRpb25zKQor
ICAgICAgICBtX2luZm8ubV9mdW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zLnF1aWNrU2V0KG1f
ZnVuY3Rpb25JbmRleCk7CisKICAgICByZXR1cm4gV1RGTW92ZShtX2NvZGVCbG9jayk7CiB9CiAK
QEAgLTU4MCw3ICs2NTgsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25G
b3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IExMSQogCiAgICAgLy8gRklY
TUU6IHdlIGFyZSBhbGxvY2F0aW5nIHRoZSBleHRyYSBzcGFjZSBmb3IgdGhlIGFyZ3VtZW50L3Jl
dHVybiBjb3VudCBpbiBvcmRlciB0byBhdm9pZCBpbnRlcmZlcmVuY2UsIGJ1dCB3ZSBjb3VsZCBk
byBiZXR0ZXIKICAgICAvLyBOT1RFOiBXZSBpbmNyZWFzZSBhcmcgY291bnQgYnkgMSBmb3IgdGhl
IGNhc2Ugb2YgaW5kaXJlY3QgY2FsbHMKLSAgICBtX3N0YWNrU2l6ZSArPSBzdGQ6Om1heChzaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpICsgMSwgc2lnbmF0dXJlLnJldHVybkNvdW50KCkpICsgZ3By
Q291bnQgKyBmcHJDb3VudCArIHN0YWNrQ291bnQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVyczsKKyAgICBtX3N0YWNrU2l6ZSArPSBzdGQ6Om1heChzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpICsgMSwgc2lnbmF0dXJlLnJldHVybkNvdW50KCkpICsgZ3ByQ291bnQgKyBmcHJDb3Vu
dCArIHN0YWNrQ291bnQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIDE7CiAg
ICAgaWYgKG1fc3RhY2tTaXplLnZhbHVlKCkgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKQog
ICAgICAgICArK21fc3RhY2tTaXplOwogICAgIGlmIChtX21heFN0YWNrU2l6ZSA8IG1fc3RhY2tT
aXplKQpAQCAtNTkxLDcgKzY2OSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1h
dGlvbkZvckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAgICAgUmVz
dWx0TGlzdCB0ZW1wb3JhcnlSZXN1bHRzKHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpKTsKIAogICAg
IGNvbnN0IHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gbV9zdGFja1NpemU7Ci0gICAgY29uc3QgdW5z
aWduZWQgYmFzZSA9IHN0YWNrT2Zmc2V0IC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3Rl
cnM7CisgICAgY29uc3QgdW5zaWduZWQgYmFzZSA9IHN0YWNrT2Zmc2V0IC0gQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMgLSAxOwogCiAgICAgY29uc3QgdWludDMyX3QgZ3ByTGltaXQg
PSBiYXNlIC0gc3RhY2tDb3VudCAtIGdwckNvdW50OwogICAgIGNvbnN0IHVpbnQzMl90IGZwckxp
bWl0ID0gZ3ByTGltaXQgLSBmcHJDb3VudDsKQEAgLTY4Myw3ICs3NjEsNyBAQCBhdXRvIExMSW50
R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUpIC0+IFZlYwogCiAgICAgdWludDMyX3QgZ3BySW5kZXggPSAwOwogICAgIHVpbnQzMl90
IGZwckluZGV4ID0gZ3ByQ291bnQ7Ci0gICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7CisgICAg
dWludDMyX3Qgc3RhY2tJbmRleCA9IDE7CiAgICAgY29uc3QgdWludDMyX3QgbWF4R1BSSW5kZXgg
PSBncHJDb3VudDsKICAgICBjb25zdCB1aW50MzJfdCBtYXhGUFJJbmRleCA9IG1heEdQUkluZGV4
ICsgZnByQ291bnQ7CiAKQEAgLTczMSw3ICs4MDksNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjph
ZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQK
ICAgICBjb25zdCB1aW50MzJfdCBtYXhGUFJJbmRleCA9IGdwckNvdW50ICsgZnByQ291bnQ7CiAg
ICAgdWludDMyX3QgZ3BySW5kZXggPSAwOwogICAgIHVpbnQzMl90IGZwckluZGV4ID0gbWF4R1BS
SW5kZXg7Ci0gICAgdWludDMyX3Qgc3RhY2tJbmRleCA9IDA7CisgICAgdWludDMyX3Qgc3RhY2tJ
bmRleCA9IDE7CiAKICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiByZWdpc3RlckFyZ3VtZW50
cyhncHJDb3VudCArIGZwckNvdW50KTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZ3By
Q291bnQgKyBmcHJDb3VudDsgaSsrKQpAQCAtOTA2LDYgKzk4NCw3IEBAIGF1dG8gTExJbnRHZW5l
cmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5n
U3RhY2ssIENvCiAKICAgICBibG9jayA9IENvbnRyb2xUeXBlOjpsb29wKHNpZ25hdHVyZSwgbV9z
dGFja1NpemUsIFdURk1vdmUoYm9keSksIFdURk1vdmUoY29udGludWF0aW9uKSk7CiAKKyAgICBW
ZWN0b3I8dW5zaWduZWQ+IHVucmVzb2x2ZWRPZmZzZXRzOwogICAgIFZlY3RvcjxWaXJ0dWFsUmVn
aXN0ZXI+IG9zckVudHJ5RGF0YTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9jb2Rl
QmxvY2stPm1fbnVtQXJndW1lbnRzOyBpKyspCiAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQo
bV9ub3JtYWxpemVkQXJndW1lbnRzW2ldKTsKQEAgLTkxNiw5ICs5OTUsMTIgQEAgYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNs
b3NpbmdTdGFjaywgQ28KICAgICBmb3IgKHVpbnQzMl90IGkgPSBncHJDb3VudCArIGZwckNvdW50
ICsgbnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnM7IGkgPCBtX2NvZGVCbG9jay0+bV9u
dW1WYXJzOyBpKyspCiAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQodmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwoaSkpOwogICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJv
bEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgp
IHsKKyAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClb
Y29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKICAgICAgICAgU3RhY2smIGV4cHJlc3Npb25TdGFj
ayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVz
c2lvblN0YWNrOwogICAgICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiBleHByZXNzaW9uIDogZXhw
cmVzc2lvblN0YWNrKQogICAgICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZChleHByZXNzaW9u
KTsKKyAgICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRhdGEpKQorICAgICAgICAg
ICAgb3NyRW50cnlEYXRhLmFwcGVuZChXVEY6OmdldDxDb250cm9sQ2F0Y2g+KGRhdGEpLm1fZXhj
ZXB0aW9uKTsKICAgICB9CiAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gZXhwcmVzc2lvbiA6IGVu
Y2xvc2luZ1N0YWNrKQogICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKGV4cHJlc3Npb24pOwpA
QCAtOTc1LDYgKzEwNTcsMTU5IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVh
Y2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsg
fTsKIH0KIAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlIHNpZ25h
dHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYg
bmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1
ZTsKKyAgICArK21fdHJ5RGVwdGg7CisgICAgaWYgKG1fbWF4VHJ5RGVwdGggPCBtX3RyeURlcHRo
KQorICAgICAgICBtX21heFRyeURlcHRoID0gbV90cnlEZXB0aDsKKworICAgIHNwbGl0U3RhY2so
c2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOworICAgIFJlZjxMYWJlbD4gdHJ5
TGFiZWwgPSBuZXdFbWl0dGVkTGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+IGNvbnRpbnVhdGlvbiA9
IG5ld0xhYmVsKCk7CisgICAgcmVzdWx0ID0gQ29udHJvbFR5cGU6OmNyZWF0ZVRyeShzaWduYXR1
cmUsIG1fc3RhY2tTaXplLCBXVEZNb3ZlKHRyeUxhYmVsKSwgV1RGTW92ZShjb250aW51YXRpb24p
LCBtX3RyeURlcHRoKTsKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIExMSW50R2VuZXJhdG9y
OjpmaW5hbGl6ZVByZXZpb3VzQmxvY2tGb3JDYXRjaChDb250cm9sVHlwZSYgZGF0YSwgU3RhY2sm
IGV4cHJlc3Npb25TdGFjaykKK3sKKyAgICBpZiAoIUNvbnRyb2xUeXBlOjppc0FueUNhdGNoKGRh
dGEpKQorICAgICAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNzaW9uU3Rh
Y2spOworICAgIGVsc2UgeworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChkYXRhLnN0YWNrU2l6
ZSgpKTsKKyAgICAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24mIHZhbHVlIDogZXhwcmVzc2lvblN0
YWNrKSB7CisgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIGRzdCwgdmFsdWUpOworICAg
ICAgICAgICAgdmFsdWUgPSBUeXBlZEV4cHJlc3Npb24geyB2YWx1ZS50eXBlKCksIGRzdCB9Owor
ICAgICAgICAgICAgZHN0IC09IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgV2FzbUptcDo6ZW1p
dCh0aGlzLCBkYXRhLm1fY29udGludWF0aW9uLT5iaW5kKHRoaXMpKTsKK30KKworYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBDb250cm9s
VHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IGZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKGRhdGEsIGV4cHJlc3Npb25TdGFjayk7Cisg
ICAgcmV0dXJuIGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRleCwgZXhjZXB0aW9u
U2lnbmF0dXJlLCBkYXRhLCByZXN1bHRzKTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
Q2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJl
c3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsK
KyAgICBSZWY8TGFiZWw+IGNhdGNoTGFiZWwgPSBuZXdFbWl0dGVkTGFiZWwoKTsKKworICAgIG1f
c3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZXhjZXB0
aW9uID0gcHVzaCgpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xUcnk+
KGRhdGEpKSB7CisgICAgICAgIENvbnRyb2xUcnkmIHRyeURhdGEgPSBXVEY6OmdldDxDb250cm9s
VHJ5PihkYXRhKTsKKyAgICAgICAgZGF0YSA9IENvbnRyb2xUeXBlOjpjcmVhdGVDYXRjaChkYXRh
Lm1fc2lnbmF0dXJlLCBkYXRhLnN0YWNrU2l6ZSgpLCBXVEZNb3ZlKHRyeURhdGEubV90cnkpLCBX
VEZNb3ZlKGRhdGEubV9jb250aW51YXRpb24pLCBjYXRjaExhYmVsLCB0cnlEYXRhLm1fdHJ5RGVw
dGgsIGV4Y2VwdGlvbik7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNl
cHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKHB1c2goKSk7CisKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBX
YXNtQ2F0Y2g6OmVtaXQodGhpcywgZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvbiwgZXhjZXB0aW9u
U2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgcmVzdWx0cy5pc0VtcHR5KCkgPyAwIDogLXJlc3Vs
dHNbMF0ub2Zmc2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgV2FzbUNhdGNoTm9UbHM6OmVtaXQo
dGhpcywgZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvbiwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKSwgcmVzdWx0cy5pc0VtcHR5KCkgPyAwIDogLXJlc3VsdHNbMF0ub2Zmc2V0KCkp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gcmVzdWx0
c1tpXTsKKyAgICAgICAgVHlwZSB0eXBlID0gZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkp
OworICAgICAgICBzd2l0Y2ggKHR5cGUua2luZCkgeworICAgICAgICBjYXNlIFdhc206OlR5cGVL
aW5kOjpGMzI6CisgICAgICAgICAgICBXYXNtRjMyUmVpbnRlcnByZXRJMzI6OmVtaXQodGhpcywg
ZHN0LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6VHlwZUtp
bmQ6OkY2NDoKKyAgICAgICAgICAgIFdhc21GNjRSZWludGVycHJldEk2NDo6ZW1pdCh0aGlzLCBk
c3QsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2lu
ZDo6STMyOgorICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJNjQ6CisgICAgICAgIGNhc2Ug
V2FzbTo6VHlwZUtpbmQ6OkV4dGVybnJlZjoKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6
RnVuY3JlZjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgQ29udHJvbENhdGNoJiBjYXRjaERhdGEgPSBXVEY6OmdldDxD
b250cm9sQ2F0Y2g+KGRhdGEpOworICAgIGNhdGNoRGF0YS5tX2tpbmQgPSBDYXRjaEtpbmQ6OkNh
dGNoOworICAgIG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKHsgSGFuZGxlclR5cGU6
OkNhdGNoLCBjYXRjaERhdGEubV90cnlTdGFydC0+bG9jYXRpb24oKSwgY2F0Y2hEYXRhLm1fdHJ5
RW5kLT5sb2NhdGlvbigpLCBjYXRjaExhYmVsLT5sb2NhdGlvbigpLCBtX3RyeURlcHRoLCBleGNl
cHRpb25JbmRleCB9KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0
b3I6OmFkZENhdGNoQWxsKFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xUeXBlJiBkYXRh
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2go
ZGF0YSwgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBXYXNtSm1wOjplbWl0KHRoaXMsIGRhdGEubV9j
b250aW51YXRpb24tPmJpbmQodGhpcykpOworICAgIHJldHVybiBhZGRDYXRjaEFsbFRvVW5yZWFj
aGFibGUoZGF0YSk7Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhdGNoQWxsVG9VbnJl
YWNoYWJsZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIG1fdXNl
c0V4Y2VwdGlvbnMgPSB0cnVlOworICAgIFJlZjxMYWJlbD4gY2F0Y2hMYWJlbCA9IG5ld0VtaXR0
ZWRMYWJlbCgpOworICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZXhjZXB0aW9uID0gcHVzaCgpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPENvbnRyb2xUcnk+KGRhdGEpKSB7CisgICAgICAgIENvbnRyb2xUcnkmIHRyeURhdGEg
PSBXVEY6OmdldDxDb250cm9sVHJ5PihkYXRhKTsKKyAgICAgICAgZGF0YSA9IENvbnRyb2xUeXBl
OjpjcmVhdGVDYXRjaChkYXRhLm1fc2lnbmF0dXJlLCBkYXRhLnN0YWNrU2l6ZSgpLCBXVEZNb3Zl
KHRyeURhdGEubV90cnkpLCBXVEZNb3ZlKGRhdGEubV9jb250aW51YXRpb24pLCBjYXRjaExhYmVs
LCB0cnlEYXRhLm1fdHJ5RGVwdGgsIGV4Y2VwdGlvbik7CisgICAgfQorICAgIENvbnRyb2xDYXRj
aCYgY2F0Y2hEYXRhID0gV1RGOjpnZXQ8Q29udHJvbENhdGNoPihkYXRhKTsKKyAgICBjYXRjaERh
dGEubV9raW5kID0gQ2F0Y2hLaW5kOjpDYXRjaEFsbDsKKworICAgIGlmIChDb250ZXh0Ojp1c2VG
YXN0VExTKCkpCisgICAgICAgIFdhc21DYXRjaEFsbDo6ZW1pdCh0aGlzLCBleGNlcHRpb24pOwor
ICAgIGVsc2UKKyAgICAgICAgV2FzbUNhdGNoQWxsTm9UbHM6OmVtaXQodGhpcywgZXhjZXB0aW9u
KTsKKworICAgIG1fY29kZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKHsgSGFuZGxlclR5cGU6
OkNhdGNoQWxsLCBjYXRjaERhdGEubV90cnlTdGFydC0+bG9jYXRpb24oKSwgY2F0Y2hEYXRhLm1f
dHJ5RW5kLT5sb2NhdGlvbigpLCBjYXRjaExhYmVsLT5sb2NhdGlvbigpLCBtX3RyeURlcHRoLCAw
IH0pOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZERlbGVn
YXRlKENvbnRyb2xUeXBlJiB0YXJnZXQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmV0dXJuIGFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZSh0YXJnZXQsIGRhdGEp
OworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29u
dHJvbFR5cGUmIHRhcmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICBSZWY8TGFiZWw+IGRlbGVnYXRlTGFi
ZWwgPSBuZXdFbWl0dGVkTGFiZWwoKTsKKworICAgIEFTU0VSVChDb250cm9sVHlwZTo6aXNUcnko
dGFyZ2V0KSB8fCBDb250cm9sVHlwZTo6aXNUb3BMZXZlbCh0YXJnZXQpKTsKKyAgICB1bnNpZ25l
ZCB0YXJnZXREZXB0aCA9IENvbnRyb2xUeXBlOjppc1RyeSh0YXJnZXQpID8gV1RGOjpnZXQ8Q29u
dHJvbFRyeT4odGFyZ2V0KS5tX3RyeURlcHRoIDogMDsKKworICAgIENvbnRyb2xUcnkmIHRyeURh
dGEgPSBXVEY6OmdldDxDb250cm9sVHJ5PihkYXRhKTsKKyAgICBtX2NvZGVCbG9jay0+YWRkRXhj
ZXB0aW9uSGFuZGxlcih7IEhhbmRsZXJUeXBlOjpEZWxlZ2F0ZSwgdHJ5RGF0YS5tX3RyeS0+bG9j
YXRpb24oKSwgZGVsZWdhdGVMYWJlbC0+bG9jYXRpb24oKSwgMCwgbV90cnlEZXB0aCwgdGFyZ2V0
RGVwdGggfSk7CisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIHJldHVybiB7IH07Cit9CisK
K2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKKyAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGFy
Z3MsIFsmXShWaXJ0dWFsUmVnaXN0ZXImIGFyZywgVmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsKKyAg
ICAgICAgaWYgKGFyZyA9PSBzbG90KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBXYXNt
TW92OjplbWl0KHRoaXMsIHNsb3QsIGFyZyk7CisgICAgICAgIGFyZyA9IHNsb3Q7CisgICAgfSk7
CisgICAgV2FzbVRocm93OjplbWl0KHRoaXMsIGV4Y2VwdGlvbkluZGV4LCBhcmdzLmlzRW1wdHko
KSA/IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKDApIDogYXJnc1swXSk7CisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJv
bFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBtX3VzZXNFeGNlcHRpb25zID0g
dHJ1ZTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQ2F0Y2g+KGRh
dGEpKTsKKyAgICBDb250cm9sQ2F0Y2ggY2F0Y2hEYXRhID0gV1RGOjpnZXQ8Q29udHJvbENhdGNo
PihkYXRhKTsKKyAgICBXYXNtUmV0aHJvdzo6ZW1pdCh0aGlzLCBjYXRjaERhdGEubV9leGNlcHRp
b24pOworICAgIHJldHVybiB7IH07Cit9CisKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJldHVy
bihjb25zdCBDb250cm9sVHlwZSYgZGF0YSwgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlh
bFJlc3VsdAogewogICAgIGlmICghZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSkgewpA
QCAtMTA0OSwxOSArMTI4NCwyNSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjplbmRCbG9jayhDb250
cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYQogewogICAgIC8v
IEZJWE1FOiBXZSBvbmx5IG5lZWQgdG8gbWF0ZXJpYWxpemUgY29uc3RhbnRzIGhlcmUgaWYgdGhl
cmUgZXhpc3RzIGEganVtcCB0byB0aGlzIGxhYmVsCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzY1NwotICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5k
TG9jYWxzKGV4cHJlc3Npb25TdGFjayk7CisgICAgZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0
Y2goZW50cnkuY29udHJvbERhdGEsIGV4cHJlc3Npb25TdGFjayk7CiAgICAgcmV0dXJuIGFkZEVu
ZFRvVW5yZWFjaGFibGUoZW50cnksIGV4cHJlc3Npb25TdGFjaywgZmFsc2UpOwogfQogCiAKLWF1
dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRy
eSwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgYm9vbCB1bnJlYWNoYWJsZSkgLT4gUGFy
dGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250
cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBib29sIHVucmVhY2hhYmxl
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBlbnRyeS5jb250
cm9sRGF0YTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKHVucmVhY2hhYmxlIHx8IG1fc3RhY2tTaXpl
ID09IGRhdGEuc3RhY2tTaXplKCkgKyBkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKTsK
KyAgICB1bnNpZ25lZCBzdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOworICAgIGlmIChDb250
cm9sVHlwZTo6aXNBbnlDYXRjaChlbnRyeS5jb250cm9sRGF0YSkpCisgICAgICAgICsrc3RhY2tT
aXplOyAvLyBBY2NvdW50IGZvciB0aGUgY2F1Z2h0IGV4Y2VwdGlvbgorICAgIFJFTEVBU0VfQVNT
RVJUKHVucmVhY2hhYmxlIHx8IG1fc3RhY2tTaXplID09ICBzdGFja1NpemUgKyBkYXRhLm1fc2ln
bmF0dXJlLT5yZXR1cm5Db3VudCgpKTsKIAogICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1Np
emUoKTsKIAorICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkgfHwgV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxDb250cm9sQ2F0Y2g+KGRhdGEpKQorICAgICAgICAtLW1fdHJ5RGVwdGg7CisK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291
bnQoKTsgKytpKSB7CiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG8gYSBjb25zaXN0ZW5j
eSBjaGVjayBoZXJlIGJlY2F1c2Ugd2UganVzdCByZXNldCB0aGUgc3RhY2sgc2l6ZQogICAgICAg
ICAvLyBhcmUgcHVzaGluZyBuZXcgdmFsdWVzLCB3aGlsZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHNh
bWUgdmFsdWVzIGluIHRoZSBzdGFjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxMSW50R2VuZXJhdG9yLmgKaW5kZXggOGExNjAzODI2YzEwMGViZmYwOGEwMzA2ZjYyZWQx
OTdiYmNlZmY1Yi4uYzAxMmZiMWVlNzE0YWY5ODIzZGEyNmM2YzM0ZDhhYjc3MmViNDU1MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKQEAg
LTM2LDcgKzM2LDcgQEAgY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBTaWduYXR1cmU7
CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxG
dW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3Qg
dWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxG
dW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3Qg
dWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgTW9kdWxlSW5mb3JtYXRpb24mLCB1
aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oCmluZGV4IGNmOGI0NDYwMzY4MTEy
M2VjYzI1Y2ZjMzcyNDk4YjVmNWI1OGM5ODYuLmY4ZjA1M2I1ODYwZTdkZjk3ZGI0NDY0YWEwZWEx
NzQ4ZDliODdmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21M
aW1pdHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmgKQEAg
LTQxLDYgKzQxLDcgQEAgY29uc3RleHByIHNpemVfdCBtYXhUeXBlcyA9IDEwMDAwMDA7CiBjb25z
dGV4cHIgc2l6ZV90IG1heEZ1bmN0aW9ucyA9IDEwMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1h
eEltcG9ydHMgPSAxMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEV4cG9ydHMgPSAxMDAwMDA7
Citjb25zdGV4cHIgc2l6ZV90IG1heEV4Y2VwdGlvbnMgPSAxMDAwMDA7CiBjb25zdGV4cHIgc2l6
ZV90IG1heEdsb2JhbHMgPSAxMDAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhEYXRhU2VnbWVu
dHMgPSAxMDAwMDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlSW5mb3JtYXRpb24uY3BwCmluZGV4IDM1NDkxY2ZlNTQxMDU3M2FiZDM1YmEzOWI3NTYw
N2Q4NmMyNjhkYjYuLmM2ZThiOGM3ZmViOWNjMjA4ZWIyNzk2ZWE3ZjJhNDIwNGQ0MDc2NzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlv
bi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0
aW9uLmNwcApAQCAtMzYsNiArMzYsNyBAQCBNb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3Jt
YXRpb24oKQogICAgIDogbmFtZVNlY3Rpb24oTmFtZVNlY3Rpb246OmNyZWF0ZSgpKQogewogfQor
CiBNb2R1bGVJbmZvcm1hdGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKCkgeyB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVJbmZvcm1hdGlvbi5oCmluZGV4IGEyYjBmODM2Yzg5YzIwZWVlMjRiOWFiMzRiZTEw
MWMyODUxNDAzNTIuLjMyOGM2YmNhNmJmYTY2MmI1M2U5YzhjOGRhOWFjYjE4ZjUwNDRhYzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlv
bi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlv
bi5oCkBAIC01OCw4ICs1OCwyMiBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICAgICAgICAgIDog
aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleCAtIGltcG9ydEZ1
bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCldOwogICAgIH0KIAorICAgIHNpemVfdCBleGNl
cHRpb25JbmRleFNwYWNlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEV4Y2VwdGlvblNpZ25h
dHVyZUluZGljZXMuc2l6ZSgpICsgaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNp
emUoKTsgfQorICAgIGJvb2wgaXNJbXBvcnRlZEV4Y2VwdGlvbkZyb21FeGNlcHRpb25JbmRleFNw
YWNlKHNpemVfdCBleGNlcHRpb25JbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChl
eGNlcHRpb25JbmRleCA8IGV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCkpOworICAgICAgICByZXR1
cm4gZXhjZXB0aW9uSW5kZXggPCBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUo
KTsKKyAgICB9CisgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9u
SW5kZXhTcGFjZShzaXplX3QgZXhjZXB0aW9uSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaXNJbXBvcnRlZEV4Y2VwdGlvbkZyb21FeGNlcHRpb25JbmRleFNwYWNlKGV4Y2VwdGlv
bkluZGV4KQorICAgICAgICAgICAgPyBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzW2V4
Y2VwdGlvbkluZGV4XQorICAgICAgICAgICAgOiBpbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUlu
ZGljZXNbZXhjZXB0aW9uSW5kZXggLSBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNp
emUoKV07CisgICAgfQorCiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0
IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KICAgICB1
aW50MzJfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1
bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbXBvcnRFeGNl
cHRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGlj
ZXMuc2l6ZSgpOyB9CiAKICAgICAvLyBDdXJyZW50bHksIG91ciB3YXNtIGltcGxlbWVudGF0aW9u
IGFsbG93cyBvbmx5IG9uZSBtZW1vcnkgYW5kIHRhYmxlLgogICAgIC8vIElmIHdlIG5lZWQgdG8g
cmVtb3ZlIHRoaXMgbGltaXRhdGlvbiwgd2Ugd291bGQgaGF2ZSBNZW1vcnlJbmZvcm1hdGlvbiBh
bmQgVGFibGVJbmZvcm1hdGlvbiBpbiB0aGUgVmVjdG9ycy4KQEAgLTc2LDkgKzkwLDE0IEBAIHN0
cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1
bGVJbmZvcm1hdGlvbj4gewogICAgIGJvb2wgaXNEZWNsYXJlZEZ1bmN0aW9uKHVpbnQzMl90IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2RlY2xhcmVkRnVuY3Rpb25zLmNvbnRhaW5zKGluZGV4KTsg
fQogICAgIHZvaWQgYWRkRGVjbGFyZWRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkgeyBtX2RlY2xh
cmVkRnVuY3Rpb25zLnNldChpbmRleCk7IH0KIAorICAgIGJvb2wgaXNEZWNsYXJlZEV4Y2VwdGlv
bih1aW50MzJfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9kZWNsYXJlZEV4Y2VwdGlvbnMuY29u
dGFpbnMoaW5kZXgpOyB9CisgICAgdm9pZCBhZGREZWNsYXJlZEV4Y2VwdGlvbih1aW50MzJfdCBp
bmRleCkgeyBtX2RlY2xhcmVkRXhjZXB0aW9ucy5zZXQoaW5kZXgpOyB9CisKICAgICBWZWN0b3I8
SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW1wb3J0RnVuY3Rp
b25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW50ZXJuYWxG
dW5jdGlvblNpZ25hdHVyZUluZGljZXM7CisgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbXBv
cnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzOworICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4g
aW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxSZWY8U2lnbmF0
dXJlPj4gdXNlZFNpZ25hdHVyZXM7CiAKICAgICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1vcnk7CkBA
IC05OCw2ICsxMTcsOCBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICB1aW50MzJfdCBudW1iZXJP
ZkRhdGFTZWdtZW50cyB7IDAgfTsKIAogICAgIEJpdFZlY3RvciBtX2RlY2xhcmVkRnVuY3Rpb25z
OworICAgIEJpdFZlY3RvciBtX2RlY2xhcmVkRXhjZXB0aW9uczsKKyAgICBCaXRWZWN0b3IgbV9m
dW5jdGlvbkRvZXNOb3RVc2VFeGNlcHRpb25zOwogICAgIG11dGFibGUgQml0VmVjdG9yIG1fcmVm
ZXJlbmNlZEZ1bmN0aW9uczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKaW5kZXggMGQ0MzM4ZDY1OTIxMzIyZjAy
ODBkZWY2OWQ1ODM2MTZiNDlkNjFjYi4uNjEwMzE2MWMxYzJmMDI0YzI5NGMwZmUxNTQwZmViYzc1
MmI5ZGRjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9N
R0Zvck9TUkVudHJ5UGxhbi5jcHAKQEAgLTkxLDE2ICs5MSwyMCBAQCB2b2lkIE9NR0Zvck9TUkVu
dHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorICAgIEludGVybmFsRnVuY3Rpb24qIGludGVybmFsRnVuY3Rpb24gPSBwYXJzZUFuZENvbXBp
bGVSZXN1bHQtPmdldCgpOworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPj4gZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhj
ZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBpbnRlcm5h
bEZ1bmN0aW9uLCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKKwogICAgIG9tZ0VudHJ5cG9pbnQuY29t
cGlsYXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfV0FT
TV9DT0RFX0ZPUl9NT0RFKENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBsaW5r
QnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9NR0Zvck9TUkVudHJ5
IGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9T
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbklu
ZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25J
bmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndh
c21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogCi0gICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZl
UmVnaXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+ZW50cnlw
b2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVS
ZWdpc3RlcnMgPSBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyk7CiAKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUt
PmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKLSAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNh
bGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50
KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+
Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9v
cEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKKyAgICBSZWY8T01HRm9yT1NSRW50cnlD
YWxsZWU+IGNhbGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdF
bnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1l
U2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUsIG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKGludGVybmFs
RnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZXhjZXB0aW9u
SGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKICAgICB7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1
bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxl
ZS5wdHIoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoaW50ZXJu
YWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxl
ZS5wdHIoKSkpOwogCiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NvZGVCbG9jay0+bV9sb2Nr
IH07CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRl
cygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxh
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKaW5kZXgg
NWU3OWYxYmM5ODVjNjVkNWNiYmFmODc4NGJkYjQ4OTBkYzhlNjI1MC4uZjhlZTAwMDgwODk5ZGM2
YWE1NjViMjJhZDkzM2M5M2QzNGFhMmJlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PTUdQbGFuLmNwcApAQCAtODgsMTcgKzg4LDIxIEBAIHZvaWQgT01HUGxhbjo6d29yayhD
b21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIEludGVybmFs
RnVuY3Rpb24qIGludGVybmFsRnVuY3Rpb24gPSBwYXJzZUFuZENvbXBpbGVSZXN1bHQtPmdldCgp
OworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4g
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKKyAgICBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxv
Y2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb250
ZXh0LCBsaW5rQnVmZmVyKTsKKwogICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtl
VW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfV0FTTV9DT0RFX0ZPUl9NT0RF
KENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbGlua0J1ZmZlciwgSklUQ29tcGlsYXRpb25QdHJU
YWcsICJXZWJBc3NlbWJseSBPTUcgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9u
SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKElu
ZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNl
Y3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAg
ICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAKLSAgICBvbWdF
bnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJl
c3VsdC52YWx1ZSgpLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgIG9tZ0Vu
dHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+
ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgewogICAgICAgICBBU1NFUlQo
bV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKLSAg
ICAgICAgUmVmPE9NR0NhbGxlZT4gY2FsbGVlID0gT01HQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShv
bWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5u
YW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodW5saW5rZWRDYWxs
cykpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIocGFyc2VBbmRDb21w
aWxlUmVzdWx0LnZhbHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2Fz
bShjYWxsZWUucHRyKCkpKTsKKyAgICAgICAgUmVmPE9NR0NhbGxlZT4gY2FsbGVlID0gT01HQ2Fs
bGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBt
X21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSks
IFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+c3RhY2tt
YXBzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1v
dmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaFBvaW50ZXIoaW50ZXJuYWxGdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxs
ZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwogICAgICAgICBBU1NFUlQoIW1fY29kZUJs
b2NrLT5tX29tZ0NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSk7CiAgICAgICAgIGVudHJ5cG9pbnQg
PSBjYWxsZWUtPmVudHJ5cG9pbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9TUkVudHJ5RGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9TUkVudHJ5RGF0YS5oCmluZGV4IGQ0MWVkNzkzMmIzMGU5YWEwYWU4NzYzYmE4MmE2MTJj
YWY3ZTY0OGIuLmQ5M2YzNDJjZTY0MmQyYzY2MzlmNjkwNjU5ZTZhMjViM2EwYTc4MjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeURhdGEuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlEYXRhLmgKQEAgLTI3LDgg
KzI3LDggQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKIAorI2luY2x1ZGUgIkIz
VHlwZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKLSNpbmNsdWRlICJXYXNtRm9ybWF0Lmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewpAQCAtNDcsNiArNDcsOSBAQCBwcml2YXRlOgogICAgIEIzOjpUeXBlIG1fdHlwZTsKIH07
CiAKK3VzaW5nIFN0YWNrTWFwID0gVmVjdG9yPE9TUkVudHJ5VmFsdWU+OwordXNpbmcgU3RhY2tN
YXBzID0gSGFzaE1hcDxDYWxsU2l0ZUluZGV4LCBTdGFja01hcD47CisKIGNsYXNzIE9TUkVudHJ5
RGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT1NSRW50cnlEYXRhKTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTU5LDEyICs2MiwxMiBAQCBwdWJsaWM6CiAKICAgICB1
aW50MzJfdCBmdW5jdGlvbkluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbkluZGV4OyB9
CiAgICAgdWludDMyX3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9sb29wSW5kZXg7IH0K
LSAgICBWZWN0b3I8T1NSRW50cnlWYWx1ZT4mIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9
CisgICAgU3RhY2tNYXAmIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAKIHByaXZhdGU6
CiAgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4OwogICAgIHVpbnQzMl90IG1fbG9vcEluZGV4
OwotICAgIFZlY3RvcjxPU1JFbnRyeVZhbHVlPiBtX3ZhbHVlczsKKyAgICBTdGFja01hcCBtX3Zh
bHVlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggODViNDI0ZmIxODQ4OTMwOGRm
MjdmOWE2MTdlN2Y3MzBmNjNlMjU2OS4uZGFiYWVlN2ViODJkNzFiZGRiMTI5N2MwMWIzZTNmZWRh
NTNkNzc4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJh
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25z
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCiAjaW5j
bHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdElubGlu
ZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCkBAIC0xMDUsMjQgKzEwNiwx
MCBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21waWxlKFRpZXJVcENvdW50
JiB0aWVyVXAsIE9NR0NhbGxlZSogcmVwbGFjZQogICAgIH0KIH0KIAotU1VQUFJFU1NfQVNBTgot
c3RhdGljIHZvaWQgZG9PU1JFbnRyeShJbnN0YW5jZSogaW5zdGFuY2UsIFByb2JlOjpDb250ZXh0
JiBjb250ZXh0LCBCQlFDYWxsZWUmIGNhbGxlZSwgT01HRm9yT1NSRW50cnlDYWxsZWUmIG9zckVu
dHJ5Q2FsbGVlLCBPU1JFbnRyeURhdGEmIG9zckVudHJ5RGF0YSkKK3ZvaWQgbG9hZFZhbHVlc0lu
dG9CdWZmZXIoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0YWNrTWFwJiB2YWx1ZXMs
IHVpbnQ2NF90KiBidWZmZXIpCiB7Ci0gICAgYXV0byByZXR1cm5XaXRob3V0T1NSRW50cnkgPSBb
Jl0gewotICAgICAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0gMDsKLSAg
ICB9OwotCi0gICAgUkVMRUFTRV9BU1NFUlQob3NyRW50cnlDYWxsZWUub3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSgpID09IG9zckVudHJ5RGF0YS52YWx1ZXMoKS5zaXplKCkpOwotCi0gICAgdWlu
dDY0X3QqIGJ1ZmZlciA9IGluc3RhbmNlLT5jb250ZXh0KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXpl
KG9zckVudHJ5Q2FsbGVlLm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSk7Ci0gICAgaWYgKCFi
dWZmZXIpCi0gICAgICAgIHJldHVybiByZXR1cm5XaXRob3V0T1NSRW50cnkoKTsKLQotICAgIGRh
dGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgb3NyRW50cnlEYXRhLmZ1bmN0aW9uSW5k
ZXgoKSwgIjpPTUcgT1NSIGVudHJ5OiBnb3QgZW50cnkgY2FsbGVlICIsIFJhd1BvaW50ZXIoJm9z
ckVudHJ5Q2FsbGVlKSk7Ci0KLSAgICAvLyAxLiBQbGFjZSByZXF1aXJlZCB2YWx1ZXMgaW4gc2Ny
YXRjaCBidWZmZXIuCi0gICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgb3NyRW50
cnlEYXRhLnZhbHVlcygpLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBPU1JFbnRy
eVZhbHVlJiB2YWx1ZSA9IG9zckVudHJ5RGF0YS52YWx1ZXMoKVtpbmRleF07CisgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWVzLnNpemUoKTsgKytpbmRleCkgeworICAg
ICAgICBjb25zdCBPU1JFbnRyeVZhbHVlJiB2YWx1ZSA9IHZhbHVlc1tpbmRleF07CiAgICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIk9NRyBPU1IgZW50cnkgdmFsdWVz
WyIsIGluZGV4LCAiXSAiLCB2YWx1ZS50eXBlKCksICIgIiwgdmFsdWUpOwogICAgICAgICBpZiAo
dmFsdWUuaXNHUFIoKSkgewogICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKCkua2luZCgp
KSB7CkBAIC0xNjQsMjEgKzE1MSwyOCBAQCBzdGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNl
KiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgYwogICAgICAg
ICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihidWZmZXIgKyBpbmRleCkgPSAqYml0
d2lzZV9jYXN0PHVpbnQ2NF90Kj4oYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb250ZXh0LmZwKCkp
ICsgdmFsdWUub2Zmc2V0RnJvbUZQKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzU3RhY2tBcmd1bWVudCgpKSB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUoKS5raW5kKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgQjM6OkZsb2F0OgotICAgICAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8ZmxvYXQqPihidWZm
ZXIgKyBpbmRleCkgPSAqYml0d2lzZV9jYXN0PGZsb2F0Kj4oYml0d2lzZV9jYXN0PHVpbnQ4X3Qq
Pihjb250ZXh0LnNwKCkpICsgdmFsdWUub2Zmc2V0RnJvbVNQKCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCMzo6RG91YmxlOgotICAgICAgICAgICAgICAgICpi
aXR3aXNlX2Nhc3Q8ZG91YmxlKj4oYnVmZmVyICsgaW5kZXgpID0gKmJpdHdpc2VfY2FzdDxkb3Vi
bGUqPihiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGNvbnRleHQuc3AoKSkgKyB2YWx1ZS5vZmZzZXRG
cm9tU1AoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihidWZmZXIgKyBpbmRleCkg
PSAqYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihjb250ZXh0
LnNwKCkpICsgdmFsdWUub2Zmc2V0RnJvbVNQKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQorfQorCitTVVBQUkVTU19BU0FOCitzdGF0aWMgdm9pZCBk
b09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJC
UUNhbGxlZSYgY2FsbGVlLCBPTUdGb3JPU1JFbnRyeUNhbGxlZSYgb3NyRW50cnlDYWxsZWUsIE9T
UkVudHJ5RGF0YSYgb3NyRW50cnlEYXRhKQoreworICAgIGF1dG8gcmV0dXJuV2l0aG91dE9TUkVu
dHJ5ID0gWyZdIHsKKyAgICAgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSA9
IDA7CisgICAgfTsKKworICAgIFJFTEVBU0VfQVNTRVJUKG9zckVudHJ5Q2FsbGVlLm9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUoKSA9PSBvc3JFbnRyeURhdGEudmFsdWVzKCkuc2l6ZSgpKTsKKwor
ICAgIHVpbnQ2NF90KiBidWZmZXIgPSBpbnN0YW5jZS0+Y29udGV4dCgpLT5zY3JhdGNoQnVmZmVy
Rm9yU2l6ZShvc3JFbnRyeUNhbGxlZS5vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkpOworICAg
IGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gcmV0dXJuV2l0aG91dE9TUkVudHJ5KCk7CisK
KyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIG9zckVudHJ5RGF0YS5mdW5j
dGlvbkluZGV4KCksICI6T01HIE9TUiBlbnRyeTogZ290IGVudHJ5IGNhbGxlZSAiLCBSYXdQb2lu
dGVyKCZvc3JFbnRyeUNhbGxlZSkpOworCisgICAgLy8gMS4gUGxhY2UgcmVxdWlyZWQgdmFsdWVz
IGluIHNjcmF0Y2ggYnVmZmVyLgorICAgIGxvYWRWYWx1ZXNJbnRvQnVmZmVyKGNvbnRleHQsIG9z
ckVudHJ5RGF0YS52YWx1ZXMoKSwgYnVmZmVyKTsKIAogICAgIC8vIDIuIFJlc3RvcmUgY2FsbGVl
IHNhdmVzLgogICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJT
ZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CkBAIC02NTgsMTIgKzY1MiwxMiBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uR3Jvd01lbW9yeSwgaW50MzJfdCwgKHZvaWQqIGNhbGxGcmFt
ZSwgSW5zdGFuYwogICAgIHJldHVybiBncm93bi52YWx1ZSgpLnBhZ2VDb3VudCgpOwogfQogCi1K
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUZpbGwsIGJvb2wsIChJ
bnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHRhcmdldFZh
bHVlLCB1aW50MzJfdCBjb3VudCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
V2FzbU1lbW9yeUZpbGwsIHNpemVfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZHN0
QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFsdWUsIHVpbnQzMl90IGNvdW50KSkKIHsKICAgICBy
ZXR1cm4gaW5zdGFuY2UtPm1lbW9yeSgpLT5maWxsKGRzdEFkZHJlc3MsIHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHRhcmdldFZhbHVlKSwgY291bnQpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uV2FzbU1lbW9yeUNvcHksIGJvb2wsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVp
bnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGNvdW50KSkK
K0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSwgc2l6ZV90
LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNB
ZGRyZXNzLCB1aW50MzJfdCBjb3VudCkpCiB7CiAgICAgcmV0dXJuIGluc3RhbmNlLT5tZW1vcnko
KS0+Y29weShkc3RBZGRyZXNzLCBzcmNBZGRyZXNzLCBjb3VudCk7CiB9CkBAIC03MTEsMTIgKzcw
NSwxMiBAQCBzdGF0aWMgYm9vbCBzZXRXYXNtVGFibGVFbGVtZW50KEluc3RhbmNlKiBpbnN0YW5j
ZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyXwogICAgIHJldHVybiB0cnVlOwogfQogCi1K
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxlbWVudCwgYm9v
bCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3Qgc2ln
bmVkSW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY1ZhbHVlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25TZXRXYXNtVGFibGVFbGVtZW50LCBzaXplX3QsIChJbnN0YW5jZSogaW5z
dGFuY2UsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IHNpZ25lZEluZGV4LCBFbmNvZGVk
SlNWYWx1ZSBlbmNWYWx1ZSkpCiB7CiAgICAgcmV0dXJuIHNldFdhc21UYWJsZUVsZW1lbnQoaW5z
dGFuY2UsIHRhYmxlSW5kZXgsIHNpZ25lZEluZGV4LCBlbmNWYWx1ZSk7CiB9CiAKLUpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVJbml0LCBib29sLCAoSW5zdGFuY2Uq
IGluc3RhbmNlLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVp
bnQzMl90IGRzdE9mZnNldCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKQor
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUluaXQsIHNpemVfdCwg
KEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCB0YWJs
ZUluZGV4LCB1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY09mZnNldCwgdWludDMyX3Qg
bGVuZ3RoKSkKIHsKICAgICBBU1NFUlQoZWxlbWVudEluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgp
Lm1vZHVsZUluZm9ybWF0aW9uKCkuZWxlbWVudENvdW50KCkpOwogICAgIEFTU0VSVCh0YWJsZUlu
ZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgp
KTsKQEAgLTc2MSw3ICs3NTUsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
V2FzbVRhYmxlR3JvdywgaW50MzJfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdQogICAgIHJldHVy
biBvbGRTaXplOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRh
YmxlRmlsbCwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwg
dWludDMyX3Qgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSBmaWxsLCB1aW50MzJfdCBjb3VudCkpCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwgc2l6ZV90LCAo
SW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBvZmZzZXQs
IEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50KSkKIHsKICAgICBBU1NFUlQodGFi
bGVJbmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291
bnQoKSk7CiAKQEAgLTc3Nyw3ICs3NzEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uV2FzbVRhYmxlRmlsbCwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaQogICAg
IHJldHVybiB0cnVlOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bVRhYmxlQ29weSwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZHN0VGFibGVJ
bmRleCwgdW5zaWduZWQgc3JjVGFibGVJbmRleCwgaW50MzJfdCBkc3RPZmZzZXQsIGludDMyX3Qg
c3JjT2Zmc2V0LCBpbnQzMl90IGxlbmd0aCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uV2FzbVRhYmxlQ29weSwgc2l6ZV90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25l
ZCBkc3RUYWJsZUluZGV4LCB1bnNpZ25lZCBzcmNUYWJsZUluZGV4LCBpbnQzMl90IGRzdE9mZnNl
dCwgaW50MzJfdCBzcmNPZmZzZXQsIGludDMyX3QgbGVuZ3RoKSkKIHsKICAgICBBU1NFUlQoZHN0
VGFibGVJbmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxl
Q291bnQoKSk7CiAgICAgQVNTRVJUKHNyY1RhYmxlSW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCku
bW9kdWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50KCkpOwpAQCAtOTA0LDcgKzg5OCw3IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNOb3RpZnksIGludDMy
X3QsIChJbnN0YW5jZSogaW5zdGFuCiAgICAgcmV0dXJuIFBhcmtpbmdMb3Q6OnVucGFya0NvdW50
KHBvaW50ZXIsIGNvdW50KTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bldhc21NZW1vcnlJbml0LCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBkYXRh
U2VnbWVudEluZGV4LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1
aW50MzJfdCBsZW5ndGgpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21N
ZW1vcnlJbml0LCBzaXplX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGRhdGFTZWdt
ZW50SW5kZXgsIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQz
Ml90IGxlbmd0aCkpCiB7CiAgICAgQVNTRVJUKGRhdGFTZWdtZW50SW5kZXggPCBpbnN0YW5jZS0+
bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS5kYXRhU2VnbWVudHNDb3VudCgpKTsKICAgICBy
ZXR1cm4gaW5zdGFuY2UtPm1lbW9yeUluaXQoZHN0QWRkcmVzcywgc3JjQWRkcmVzcywgbGVuZ3Ro
LCBkYXRhU2VnbWVudEluZGV4KTsKQEAgLTkxNiw2ICs5MTAsNjUgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbldhc21EYXRhRHJvcCwgdm9pZCwgKEluc3RhbmNlKiBpbnN0YW5j
ZSwgdW5zaWcKICAgICBpbnN0YW5jZS0+ZGF0YURyb3AoZGF0YVNlZ21lbnRJbmRleCk7CiB9CiAK
K0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGhyb3csIHZvaWQqLCAoSW5z
dGFuY2UqIGluc3RhbmNlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQgZXhjZXB0aW9u
SW5kZXgsIEVuY29kZWRKU1ZhbHVlKiBhcmd1bWVudHMpKQoreworICAgIGluc3RhbmNlLT5zdG9y
ZVRvcENhbGxGcmFtZShjYWxsRnJhbWUpOworCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBq
c0luc3RhbmNlID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0
KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcg
PSBpbnN0YW5jZS0+dGFnKGV4Y2VwdGlvbkluZGV4KTsKKworICAgIEZpeGVkVmVjdG9yPHVpbnQ2
NF90PiB2YWx1ZXModGFnLnBhcmFtZXRlckNvdW50KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0YWcucGFyYW1ldGVyQ291bnQoKTsgKytpKQorICAgICAgICB2YWx1ZXNbaV0gPSBh
cmd1bWVudHNbaV07CisKKyAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBleGNlcHRpb24gPSBK
U1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1i
bHlFeGNlcHRpb25TdHJ1Y3R1cmUoKSwgdGFnLCBXVEZNb3ZlKHZhbHVlcykpOworICAgIHRocm93
RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZXhjZXB0aW9uKTsKKworICAgIGdl
bmVyaWNVbndpbmQodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKCEhdm0uY2FsbEZyYW1lRm9y
Q2F0Y2gpOworICAgIEFTU0VSVCghIXZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKKyAgICAv
LyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKKyAgICAvLyBUaGlzIGlzIGEgdG90
YWwgaGFjaywgYnV0IHRoZSBsbGludCAoYm90aCBvcF9jYXRjaCBhbmQgbGxpbnRfaGFuZGxlX3Vu
Y2F1Z2h0X2V4Y2VwdGlvbikKKyAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVlIGZp
ZWxkIHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJlCisg
ICAgLy8gdGhpcyBzaW5jZSBpdCBpcyBjb21waWxlZCB3aXRoIGEgY29uc3RhbnQgVk0gcG9pbnRl
ci4pIFdlIGNvdWxkIG1ha2UgdGhlIGNhbGxpbmcgY29udmVudGlvbgorICAgIC8vIGZvciBleGNl
cHRpb25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lz
dGVyIGJlZm9yZSBqdW1waW5nCisgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3
ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4KKyAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCisgICAgdm0uY2Fs
bGVlRm9yV2FzbUNhdGNoID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKKyAgICBiaXR3aXNlX2Nhc3Q8
dWludDY0X3QqPihjYWxsRnJhbWUpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGpzSW5zdGFuY2UtPm1vZHVsZSgpKTsKKyAg
ICByZXR1cm4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7Cit9CisKK0pTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0aHJvdywgdm9pZCosIChJbnN0YW5jZSogaW5zdGFu
Y2UsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSB0aHJvd25WYWx1ZSkpCit7
CisgICAgaW5zdGFuY2UtPnN0b3JlVG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisKKyAgICBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8SlNXZWJBc3Nl
bWJseUluc3RhbmNlPigpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0lu
c3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICB0
aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIEpTVmFsdWU6OmRlY29kZSh0
aHJvd25WYWx1ZSkpOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1lKTsKKyAgICBB
U1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNTRVJUKCEhdm0udGFyZ2V0TWFj
aGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgYmV0dGVy
OgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9wX2Nh
dGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uKQorICAgIC8vIHJlcXVpcmUg
YSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUgYmFzZWxpbmUg
SklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdp
dGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252
ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRj
aCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAvLyB0byB0aGUg
ZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0
ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJhbWUtPmNhbGxl
ZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8
aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oanNJ
bnN0YW5jZS0+bW9kdWxlKCkpOworICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJv
dzsKK30KKwogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0
aW9uLCB2b2lkKiwgKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5
cGUsIEluc3RhbmNlKiB3YXNtSW5zdGFuY2UpKQogewogICAgIHdhc21JbnN0YW5jZS0+c3RvcmVU
b3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKQEAgLTkzMiw3ICs5ODUsNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24sIHZvaWQqLCAoQ2FsbEZyYW1l
KiBjYWxsRnJhbQogICAgICAgICBpZiAodHlwZSA9PSBFeGNlcHRpb25UeXBlOjpTdGFja092ZXJm
bG93KQogICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFs
T2JqZWN0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVKU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sIFdhc206OmVycm9yTWVzc2FnZUZv
ckV4Y2VwdGlvblR5cGUodHlwZSkpOworICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVKU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sIHR5cGUpOwogICAgICAgICB0aHJv
d0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGVycm9yKTsKICAgICB9CiAKQEAg
LTk0NiwxMCArOTk5LDM0IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNt
VG9KU0V4Y2VwdGlvbiwgdm9pZCosIChDYWxsRnJhbWUqIGNhbGxGcmFtCiAgICAgLy8gZm9yIGV4
Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVn
aXN0ZXIgYmVmb3JlIGp1bXBpbmcKICAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElm
IHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5j
YWxsZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwogICAgIGJpdHdpc2VfY2Fz
dDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVsZSgpKTsKICAg
ICByZXR1cm4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiB9CiAKK0pTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hh
YmxlLCBQb2ludGVyUGFpciwgKEluc3RhbmNlKiBpbnN0YW5jZSkpCit7CisgICAgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBqc0luc3RhbmNlID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZT4oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5j
ZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgUkVMRUFT
RV9BU1NFUlQoISF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKworICAgIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0gdGhyb3dTY29wZS5leGNlcHRpb24oKTsKKyAgICBKU1ZhbHVlIHRocm93blZhbHVl
ID0gZXhjZXB0aW9uLT52YWx1ZSgpOworCisgICAgLy8gV2Ugd2FudCB0byBjbGVhciB0aGUgZXhj
ZXB0aW9uIGhlcmUgcmF0aGVyIHRoYW4gaW4gdGhlIGNhdGNoIHByb2xvZ3VlCisgICAgLy8gSklU
IGNvZGUgYmVjYXVzZSBjbGVhcmluZyBpdCBhbHNvIGVudGFpbHMgY2xlYXJpbmcgYSBiaXQgaW4g
YW4gQXRvbWljCisgICAgLy8gYml0IGZpZWxkIGluIFZNVHJhcHMuCisgICAgdGhyb3dTY29wZS5j
bGVhckV4Y2VwdGlvbigpOworCisgICAgdm9pZCogcGF5bG9hZCA9IG51bGxwdHI7CisgICAgaWYg
KEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIHdhc21FeGNlcHRpb24gPSBqc0R5bmFtaWNDYXN0PEpT
V2ViQXNzZW1ibHlFeGNlcHRpb24qPih2bSwgdGhyb3duVmFsdWUpKQorICAgICAgICBwYXlsb2Fk
ID0gYml0d2lzZV9jYXN0PHZvaWQqPih3YXNtRXhjZXB0aW9uLT5wYXlsb2FkKCkuZGF0YSgpKTsK
KyAgICByZXR1cm4gUG9pbnRlclBhaXIgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFsdWU6OmVu
Y29kZSh0aHJvd25WYWx1ZSkpLCBwYXlsb2FkIH07Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCiAKIElHTk9SRV9XQVJOSU5HU19FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT3BlcmF0aW9ucy5oCmluZGV4IGVlYmU1Yjc2NGJhODk3OGM5NDQyZWI1MTgyODEwODcy
YzY3MjRjYTQuLjVlYzdhNTk0N2NjNzM4YzNiMmI5YmIyNWQ3ZTVhNjA4ZjFiMjZlZDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJTbG93UGF0aFJldHVyblR5
cGUuaCIKICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgorI2luY2x1ZGUgIldhc21PU1JF
bnRyeURhdGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ2LDYgKzQ3LDggQEAgbmFtZXNw
YWNlIFdhc20gewogY2xhc3MgSW5zdGFuY2U7CiBjbGFzcyBTaWduYXR1cmU7CiAKK3ZvaWQgbG9h
ZFZhbHVlc0ludG9CdWZmZXIoUHJvYmU6OkNvbnRleHQmLCBjb25zdCBTdGFja01hcCYsIHVpbnQ2
NF90KiBidWZmZXIpOworCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVHJpZ2dlck9TUkVudHJ5Tm93LCB2b2lkLCAo
UHJvYmU6OkNvbnRleHQmKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldh
c21UcmlnZ2VyVGllclVwTm93LCB2b2lkLCAoSW5zdGFuY2UqLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4KSk7CkBAIC02NiwyNiArNjksMzQgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25XYXNtV3JpdGVCYXJyaWVyU2xvd1BhdGgsIHZvaWQsIChKU0NlbGwqLCBWTSoKIEpTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUG9wY291bnQzMiwgdWludDMyX3QsIChpbnQz
Ml90KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblBvcGNvdW50NjQsIHVp
bnQ2NF90LCAoaW50NjRfdCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25H
cm93TWVtb3J5LCBpbnQzMl90LCAodm9pZCosIEluc3RhbmNlKiwgaW50MzJfdCkpOwotSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5RmlsbCwgYm9vbCwgKEluc3Rh
bmNlKiwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFsdWUsIHVpbnQzMl90
IGNvdW50KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlD
b3B5LCBib29sLCAoSW5zdGFuY2UqLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNB
ZGRyZXNzLCB1aW50MzJfdCBjb3VudCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25XYXNtTWVtb3J5RmlsbCwgc2l6ZV90LCAoSW5zdGFuY2UqLCB1aW50MzJfdCBkc3RBZGRy
ZXNzLCB1aW50MzJfdCB0YXJnZXRWYWx1ZSwgdWludDMyX3QgY291bnQpKTsKK0pTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUNvcHksIHNpemVfdCwgKEluc3RhbmNl
KiwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgY291
bnQpKTsKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXYXNtVGFibGVF
bGVtZW50LCBFbmNvZGVkSlNWYWx1ZSwgKEluc3RhbmNlKiwgdW5zaWduZWQsIGludDMyX3QpKTsK
LUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxlbWVudCwg
Ym9vbCwgKEluc3RhbmNlKiwgdW5zaWduZWQsIHVpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSBlbmNW
YWx1ZSkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25TZXRXYXNtVGFibGVF
bGVtZW50LCBzaXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkLCB1aW50MzJfdCwgRW5jb2RlZEpT
VmFsdWUgZW5jVmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bVJlZkZ1bmMsIEVuY29kZWRKU1ZhbHVlLCAoSW5zdGFuY2UqLCB1aW50MzJfdCkpOwotSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVJbml0LCBib29sLCAoSW5zdGFu
Y2UqLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90
IGRzdE9mZnNldCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKTsKK0pTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlSW5pdCwgc2l6ZV90LCAoSW5z
dGFuY2UqLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQz
Ml90IGRzdE9mZnNldCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKTsKIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUVsZW1Ecm9wLCB2b2lkLCAoSW5z
dGFuY2UqLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uV2FzbVRhYmxlR3JvdywgaW50MzJfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQs
IEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGRlbHRhKSk7Ci1KU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUZpbGwsIGJvb2wsIChJbnN0YW5jZSosIHVuc2ln
bmVkLCB1aW50MzJfdCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50
KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUNvcHksIGJv
b2wsIChJbnN0YW5jZSosIHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxl
SW5kZXgsIGludDMyX3QgZHN0T2Zmc2V0LCBpbnQzMl90IHNyY09mZnNldCwgaW50MzJfdCBsZW5n
dGgpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwg
c2l6ZV90LCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgdWludDMyX3Qgb2Zmc2V0LCBFbmNvZGVkSlNW
YWx1ZSBmaWxsLCB1aW50MzJfdCBjb3VudCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25XYXNtVGFibGVDb3B5LCBzaXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkIGRzdFRh
YmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsIGludDMyX3QgZHN0T2Zmc2V0LCBpbnQz
Ml90IHNyY09mZnNldCwgaW50MzJfdCBsZW5ndGgpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uR2V0V2FzbVRhYmxlU2l6ZSwgaW50MzJfdCwgKEluc3RhbmNlKiwgdW5zaWdu
ZWQpKTsKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNX
YWl0MzIsIGludDMyX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGJhc2UsIHVuc2ln
bmVkIG9mZnNldCwgdWludDMyX3QgdmFsdWUsIGludDY0X3QgdGltZW91dCkpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNXYWl0NjQsIGludDMyX3QsIChJ
bnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIG9mZnNldCwgdWludDY0
X3QgdmFsdWUsIGludDY0X3QgdGltZW91dCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25NZW1vcnlBdG9taWNOb3RpZnksIGludDMyX3QsIChJbnN0YW5jZSosIHVuc2lnbmVk
LCB1bnNpZ25lZCwgaW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtTWVtb3J5SW5pdCwgYm9vbCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZGF0YVNlZ21lbnRJ
bmRleCwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3Qg
bGVuZ3RoKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlJ
bml0LCBzaXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgsIHVpbnQz
Ml90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGxlbmd0aCkpOwog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtRGF0YURyb3AsIHZvaWQsIChJ
bnN0YW5jZSosIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgpKTsKIAorSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtVGhyb3csIHZvaWQqLCAoSW5zdGFuY2UqLCBDYWxsRnJh
bWUqLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgRW5jb2RlZEpTVmFsdWUqKSk7CitKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZXRocm93LCB2b2lkKiwgKEluc3RhbmNl
KiwgQ2FsbEZyYW1lKiwgRW5jb2RlZEpTVmFsdWUgdGhyb3duVmFsdWUpKTsKKwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbiwgdm9pZCosIChDYWxs
RnJhbWUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBJbnN0YW5jZSopKTsKK3N0cnVjdCBQb2ludGVy
UGFpciB7CisgICAgdm9pZCogZmlyc3Q7CisgICAgdm9pZCogc2Vjb25kOworfTsKK0pTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25J
ZkNhdGNoYWJsZSwgUG9pbnRlclBhaXIsIChJbnN0YW5jZSopKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNlY3Rpb25QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rp
b25QYXJzZXIuY3BwCmluZGV4IDBmOGNjYjdlMmMzYjY0MTE2MzVjZDlmNWIwNDhiMzU2MzIwNWZh
NzQuLmNmZGFmZmRkN2E0MmNjODFlNWJhM2E2MWU0YmFlOGVmNWVjYmQzYmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKQEAgLTkxLDYg
KzkxLDggQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1
bHQKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIs
IGltcG9ydENvdW50LCAiIGdsb2JhbHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3
aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1f
aW5mby0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxs
b2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBG
SVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCiAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUlu
ZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1
cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1F
cyBiZWxvdy4KKyAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCkpCisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0
dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2Nh
dGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0IGV4Y2VwdGlvbiBz
aWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhl
IEZJWE1FcyBiZWxvdy4KIAogICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1w
b3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7CiAgICAgICAgIHVpbnQz
Ml90IG1vZHVsZUxlbjsKQEAgLTE0Miw2ICsxNDQsMjEgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpw
YXJzZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgICAgIG1faW5mby0+Z2xvYmFs
cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsKKyAgICAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0
aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgICAg
ICB1aW50OF90IHRhZ1R5cGU7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVVJbnQ4KHRhZ1R5cGUpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCBl
eGNlcHRpb24ncyB0YWcgdHlwZSIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0
YWdUeXBlLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQgZXhjZXB0aW9uIGhhcyB0YWcgdHlwZSAi
LCB0YWdUeXBlLCAiIGJ1dCB0aGUgb25seSBzdXBwb3J0ZWQgdGFnIHR5cGUgaXMgMCIpOworCisg
ICAgICAgICAgICB1aW50MzJfdCBleGNlcHRpb25TaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4Y2VwdGlvblNpZ25hdHVyZUlu
ZGV4KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBleGNlcHRpb24g
c2lnbmF0dXJlIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRT
dHJpbmcsICInIik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4Y2VwdGlvblNp
Z25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBl
eGNlcHRpb24gc2lnbmF0dXJlIGZvciAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQsICIsIGV4
Y2VwdGlvblNpZ25hdHVyZUluZGV4LCAiIGlzIG91dCBvZiByYW5nZSBvZiAiLCBtX2luZm8tPnVz
ZWRTaWduYXR1cmVzLnNpemUoKSwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmll
bGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAga2luZEluZGV4ID0gbV9pbmZv
LT5pbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCht
X2luZm8tPnVzZWRTaWduYXR1cmVzW2V4Y2VwdGlvblNpZ25hdHVyZUluZGV4XSk7CisgICAgICAg
ICAgICBtX2luZm8tPmltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVja2VkQXBw
ZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIH0KIAogICAgICAgICBtX2luZm8tPmltcG9ydHMudW5jaGVja2VkQXBwZW5kKHsgV1RGTW92
ZShtb2R1bGVTdHJpbmcpLCBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4IH0p
OwpAQCAtMzU4LDYgKzM3NSwxMyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRXhwb3J0KCkg
LT4gUGFydGlhbFJlc3VsdAogICAgICAgICAgICAgICAgIGdsb2JhbC5iaW5kaW5nTW9kZSA9IEds
b2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6RXhjZXB0aW9uOiB7Cisg
ICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4
Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5leGNlcHRpb25J
bmRleFNwYWNlU2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGludmFsaWQgZXhj
ZXB0aW9uIG51bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZXhjZXB0aW9uIGlu
ZGV4IHNwYWNlICIsIG1faW5mby0+ZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSwgIiwgbmFtZWQg
JyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAgbV9pbmZvLT5hZGREZWNsYXJlZEV4
Y2VwdGlvbihraW5kSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAg
ICAgfQogCiAgICAgICAgIG1faW5mby0+ZXhwb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3Zl
KGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4IH0pOwpAQCAtODE3LDYgKzg0MSwyOSBAQCBh
dXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YUNvdW50KCkgLT4gUGFydGlhbFJlc3VsdAogICAg
IHJldHVybiB7IH07CiB9CiAKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VFeGNlcHRpb24oKSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNl
V2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVk
Iik7CisKKyAgICB1aW50MzJfdCBleGNlcHRpb25Db3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihleGNlcHRpb25Db3VudCksICJjYW4ndCBnZXQgRXhjZXB0aW9u
IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhjZXB0aW9uQ291
bnQgPiBtYXhFeGNlcHRpb25zLCAiRXhwb3J0IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIs
IGV4Y2VwdGlvbkNvdW50LCAiIG1heGltdW0gIiwgbWF4RXhjZXB0aW9ucyk7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4Y2VwdGlvbkNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3Vn
aCBtZW1vcnkgZm9yICIsIGV4Y2VwdGlvbkNvdW50LCAiIGV4Y2VwdGlvbnMiKTsKKworICAgIGZv
ciAodWludDMyX3QgZXhjZXB0aW9uTnVtYmVyID0gMDsgZXhjZXB0aW9uTnVtYmVyIDwgZXhjZXB0
aW9uQ291bnQ7ICsrZXhjZXB0aW9uTnVtYmVyKSB7CisgICAgICAgIHVpbnQ4X3QgdGFnVHlwZTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OCh0YWdUeXBlKSwgImNhbid0
IGdldCAiLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24gdGFnIHR5cGUiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0YWdUeXBlLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNl
cHRpb24gaGFzIHRhZyB0eXBlICIsIHRhZ1R5cGUsICIgYnV0IHRoZSBvbmx5IHN1cHBvcnRlZCB0
YWcgdHlwZSBpcyAwIik7CisKKyAgICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodHlwZU51bWJlciksICJjYW4ndCBn
ZXQgIiwgZXhjZXB0aW9uTnVtYmVyLCAidGggRXhjZXB0aW9uJ3MgdHlwZSBudW1iZXIiKTsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dXNlZFNpZ25h
dHVyZXMuc2l6ZSgpLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24gdHlwZSBudW1iZXIg
aXMgaW52YWxpZCAiLCB0eXBlTnVtYmVyKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dXNlZFNpZ25hdHVy
ZXNbdHlwZU51bWJlcl0pOworICAgICAgICBtX2luZm8tPmludGVybmFsRXhjZXB0aW9uU2lnbmF0
dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOworICAgIH0KKworICAg
IHJldHVybiB7IH07Cit9CiBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKCkgLT4gUGFy
dGlhbFJlc3VsdAogewogICAgIEN1c3RvbVNlY3Rpb24gc2VjdGlvbjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKaW5kZXggZjM2OWU3Yjg2Y2FmYTkzYWQzZjgzYWQ2
MGNhMDg3YzhmNTg4MGVjYS4uYmVmMjA3MDFmNDBmZTQwYjRhMjhhMGFkY2ZjNDdmNmJmMGQ1YmZm
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKQEAgLTQ1LDcg
KzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKICAgICBtYWNybyhFbGVt
ZW50LCAgICA5LCAiRWxlbWVudHMgc2VjdGlvbiIpIFwKICAgICBtYWNybyhDb2RlLCAgICAgIDEw
LCAiRnVuY3Rpb24gYm9kaWVzIChjb2RlKSIpIFwKICAgICBtYWNybyhEYXRhLCAgICAgIDExLCAi
RGF0YSBzZWdtZW50cyIpIFwKLSAgICBtYWNybyhEYXRhQ291bnQsIDEyLCAiRGF0YSBjb3VudCIp
CisgICAgbWFjcm8oRGF0YUNvdW50LCAxMiwgIkRhdGEgY291bnQiKSBcCisgICAgbWFjcm8oRXhj
ZXB0aW9uLCAxMywgIkV4Y2VwdGlvbiBkZWNsYXJhdGlvbnMiKSBcCiAKIGVudW0gY2xhc3MgU2Vj
dGlvbiA6IHVpbnQ4X3QgewogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgQmVnaW4gaXMgbGVz
cyB0aGFuIGV2ZXJ5IG90aGVyIHNlY3Rpb24gbnVtYmVyIGFuZCB0aGF0IEN1c3RvbSBpcyBncmVh
dGVyLgpAQCAtOTAsNiArOTEsMTAgQEAgaW5saW5lIGJvb2wgdmFsaWRhdGVPcmRlcihTZWN0aW9u
IHByZXZpb3VzS25vd24sIFNlY3Rpb24gbmV4dCkKICAgICBBU1NFUlQoaXNLbm93blNlY3Rpb24o
cHJldmlvdXNLbm93bikgfHwgcHJldmlvdXNLbm93biA9PSBTZWN0aW9uOjpCZWdpbik7CiAgICAg
aWYgKHByZXZpb3VzS25vd24gPT0gU2VjdGlvbjo6RGF0YUNvdW50ICYmIG5leHQgPT0gU2VjdGlv
bjo6Q29kZSkKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHByZXZpb3VzS25vd24gPT0g
U2VjdGlvbjo6RXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gbmV4dCA+PSBTZWN0aW9uOjpHbG9i
YWw7CisgICAgaWYgKG5leHQgPT0gU2VjdGlvbjo6RXhjZXB0aW9uKQorICAgICAgICByZXR1cm4g
cHJldmlvdXNLbm93biA8PSBTZWN0aW9uOjpNZW1vcnk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHByZXZpb3VzS25vd24pIDwgc3RhdGljX2Nhc3Q8dWludDhfdD4obmV4dCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKaW5kZXgg
NzFhYWIzZGY3NTcyMmQ0MDhjNTE4YzEzZjUzODVjM2FmOWE0ODAwNi4uZjlhNTYxYjg1MGZjNWMx
OTM5ZDBlZjU5ZThhOWZkMmI2MDU5NzhmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNpZ25hdHVyZS5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgUmVmUHRyPFNpZ25hdHVyZT4g
U2lnbmF0dXJlOjp0cnlDcmVhdGUoU2lnbmF0dXJlQXJnQ291bnQgcmV0dXJuQ291bnQsIFNpZ25h
dHVyZUEKIAogU2lnbmF0dXJlSW5mb3JtYXRpb246OlNpZ25hdHVyZUluZm9ybWF0aW9uKCkKIHsK
LSNkZWZpbmUgTUFLRV9USFVOS19TSUdOQVRVUkUodHlwZSwgZW5jLCBzdHIsIHZhbCkgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgTUFLRV9USFVOS19TSUdOQVRVUkUodHlwZSwg
ZW5jLCBzdHIsIHZhbCwgXykgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgaWYgKFR5cGVLaW5kOjp0eXBlICE9IFR5cGVLaW5kOjpWb2lkKSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+
IHNpZyA9IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlKDEsIDApOyAgICAgICAgICAgIFwKQEAgLTE2NSw2
ICsxNjUsMTAgQEAgc3RydWN0IFBhcmFtZXRlclR5cGVzIHsKIAogUmVmUHRyPFNpZ25hdHVyZT4g
U2lnbmF0dXJlSW5mb3JtYXRpb246OnNpZ25hdHVyZUZvcihjb25zdCBWZWN0b3I8VHlwZSwgMT4m
IHJlc3VsdHMsIGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJncykKIHsKKyAgICBpZiBjb25zdGV4cHIg
KEFTU0VSVF9FTkFCTEVEKSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0cy5jb250YWlucyhXYXNt
OjpUeXBlczo6Vm9pZCkpOworICAgICAgICBBU1NFUlQoIWFyZ3MuY29udGFpbnMoV2FzbTo6VHlw
ZXM6OlZvaWQpKTsKKyAgICB9CiAgICAgU2lnbmF0dXJlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5n
bGV0b24oKTsKICAgICBMb2NrZXIgbG9ja2VyIHsgaW5mby5tX2xvY2sgfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAppbmRleCBkOWZhZjVkNTlkOTlm
NWU5MDRjM2E3YjI0MDA3ZDA5MWZkMWQ5YzE3Li5hZDUxMzVlN2FkNjU3OGMzOTc2MWJkN2QzYjU2
OGEwZmQyYmY2MDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1Bh
dGhzLmNwcApAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2lu
Y2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiV2FzbUJCUVBs
YW4uaCIKQEAgLTU4Niw2ICs1ODgsMTExIEBAIFdBU01fU0xPV19QQVRIX0RFQ0wobWVtb3J5X2F0
b21pY19ub3RpZnkpCiAgICAgV0FTTV9SRVRVUk4ocmVzdWx0KTsKIH0KIAorV0FTTV9TTE9XX1BB
VEhfREVDTCh0aHJvdykKK3sKKyAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZy
YW1lKTsKKworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGluc3RhbmNl
LT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwYy0+YXM8V2FzbVRocm93LCBXYXNt
T3Bjb2RlVHJhaXRzPigpOworICAgIGNvbnN0IFdhc206OlRhZyYgdGFnID0gaW5zdGFuY2UtPnRh
ZyhpbnN0cnVjdGlvbi5tX2V4Y2VwdGlvbkluZGV4KTsKKworICAgIEZpeGVkVmVjdG9yPHVpbnQ2
NF90PiB2YWx1ZXModGFnLnBhcmFtZXRlckNvdW50KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0YWcucGFyYW1ldGVyQ291bnQoKTsgKytpKQorICAgICAgICB2YWx1ZXNbaV0gPSBS
RUFEKChpbnN0cnVjdGlvbi5tX2ZpcnN0VmFsdWUgLSBpKSkuZW5jb2RlZEpTVmFsdWUoKTsKKwor
ICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IEpTV2ViQXNzZW1ibHlFeGNl
cHRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUV4Y2VwdGlvblN0cnVj
dHVyZSgpLCB0YWcsIFdURk1vdmUodmFsdWVzKSk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBleGNlcHRpb24pOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwg
Y2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNT
RVJUKCEhdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBtYWtlIHRoaXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhl
IGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9u
KQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUg
Vk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNl
IGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFr
ZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9h
ZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBp
bmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBj
b3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2gg
PSBjYWxsRnJhbWUtPmNhbGxlZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxG
cmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4oanNJbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIFdBU01fUkVUVVJOX1RX
Tyh2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdywgbnVsbHB0cik7Cit9CisKK1dBU01fU0xPV19Q
QVRIX0RFQ0wocmV0aHJvdykKK3sKKyAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2Fs
bEZyYW1lKTsKKworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGluc3Rh
bmNlLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwYy0+YXM8V2FzbVJldGhyb3cs
IFdhc21PcGNvZGVUcmFpdHM+KCk7CisgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBSRUFEKGluc3Ry
dWN0aW9uLm1fZXhjZXB0aW9uKS5qc1ZhbHVlKCk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBleGNlcHRpb24pOworCisgICAgZ2VuZXJpY1Vud2luZCh2bSwg
Y2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgQVNT
RVJUKCEhdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBtYWtlIHRoaXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhl
IGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9u
KQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUg
Vk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNpbmNl
IGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFr
ZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9h
ZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBp
bmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBj
b3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxsZWVGb3JXYXNtQ2F0Y2gg
PSBjYWxsRnJhbWUtPmNhbGxlZSgpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxG
cmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4oanNJbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIFdBU01fUkVUVVJOX1RX
Tyh2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdywgbnVsbHB0cik7Cit9CisKK1dBU01fU0xPV19Q
QVRIX0RFQ0wocmV0cmlldmVfYW5kX2NsZWFyX2V4Y2VwdGlvbikKK3sKKyAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBp
bnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOworICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCghIXRocm93U2NvcGUuZXhjZXB0
aW9uKCkpOworCisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSB0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpOworICAgIEpTVmFsdWUgdGhyb3duVmFsdWUgPSBleGNlcHRpb24tPnZhbHVlKCk7CisgICAg
dm9pZCogcGF5bG9hZCA9IG51bGxwdHI7CisKKyAgICBjb25zdCBhdXRvJiBoYW5kbGVDYXRjaEFs
bCA9IFsmXShjb25zdCBhdXRvJiBpbnN0cnVjdGlvbikgeworICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoaW5zdHJ1Y3Rpb24ubV9leGNlcHRpb24pID0gdGhyb3duVmFsdWU7CisgICAgfTsK
KworICAgIGNvbnN0IGF1dG8mIGhhbmRsZUNhdGNoID0gWyZdKGNvbnN0IGF1dG8mIGluc3RydWN0
aW9uKSB7CisgICAgICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIHdhc21FeGNlcHRpb24gPSBq
c0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPih2bSwgdGhyb3duVmFsdWUpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghIXdhc21FeGNlcHRpb24pOworICAgICAgICBwYXlsb2Fk
ID0gYml0d2lzZV9jYXN0PHZvaWQqPih3YXNtRXhjZXB0aW9uLT5wYXlsb2FkKCkuZGF0YSgpKTsK
KyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGluc3RydWN0aW9uLm1fZXhjZXB0aW9uKSA9
IHRocm93blZhbHVlOworICAgIH07CisKKyAgICBpZiAocGMtPmlzPFdhc21DYXRjaCwgV2FzbU9w
Y29kZVRyYWl0cz4oKSkKKyAgICAgICAgaGFuZGxlQ2F0Y2gocGMtPmFzPFdhc21DYXRjaCwgV2Fz
bU9wY29kZVRyYWl0cz4oKSk7CisgICAgZWxzZSBpZiAocGMtPmlzPFdhc21DYXRjaEFsbCwgV2Fz
bU9wY29kZVRyYWl0cz4oKSkKKyAgICAgICAgaGFuZGxlQ2F0Y2hBbGwocGMtPmFzPFdhc21DYXRj
aEFsbCwgV2FzbU9wY29kZVRyYWl0cz4oKSk7CisgICAgZWxzZSBpZiAocGMtPmlzPFdhc21DYXRj
aE5vVGxzLCBXYXNtT3Bjb2RlVHJhaXRzPigpKQorICAgICAgICBoYW5kbGVDYXRjaChwYy0+YXM8
V2FzbUNhdGNoTm9UbHMsIFdhc21PcGNvZGVUcmFpdHM+KCkpOworICAgIGVsc2UgaWYgKHBjLT5p
czxXYXNtQ2F0Y2hBbGxOb1RscywgV2FzbU9wY29kZVRyYWl0cz4oKSkKKyAgICAgICAgaGFuZGxl
Q2F0Y2hBbGwocGMtPmFzPFdhc21DYXRjaEFsbE5vVGxzLCBXYXNtT3Bjb2RlVHJhaXRzPigpKTsK
KyAgICBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAv
LyBXZSB3YW50IHRvIGNsZWFyIHRoZSBleGNlcHRpb24gaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUg
Y2F0Y2ggcHJvbG9ndWUKKyAgICAvLyBKSVQgY29kZSBiZWNhdXNlIGNsZWFyaW5nIGl0IGFsc28g
ZW50YWlscyBjbGVhcmluZyBhIGJpdCBpbiBhbiBBdG9taWMKKyAgICAvLyBiaXQgZmllbGQgaW4g
Vk1UcmFwcy4KKyAgICB0aHJvd1Njb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgV0FTTV9SRVRV
Uk5fVFdPKHBjLCBwYXlsb2FkKTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUg
c2xvd19wYXRoX3dhc21fdGhyb3dfZXhjZXB0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25z
dCBJbnN0cnVjdGlvbiogcGMsIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6RXhjZXB0
aW9uVHlwZSBleGNlcHRpb25UeXBlKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmgKaW5kZXggNzc2MjExODMzOGE3Yjcw
Njk2OWIyNWI1MmNlMTZlMmMzZGM3YmQ0ZS4uYjY0Y2U3Y2RlNDFhYWEwNjg5N2U4ZmZmZWQ4MmE4
ZDA2NDMyZGZkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNs
b3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMu
aApAQCAtODMsNiArODMsOSBAQCBXQVNNX1NMT1dfUEFUSF9ISURERU5fREVDTChzZXRfZ2xvYmFs
X3JlZl9wb3J0YWJsZV9iaW5kaW5nKTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9y
eV9hdG9taWNfd2FpdDMyKTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9yeV9hdG9t
aWNfd2FpdDY0KTsKIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKG1lbW9yeV9hdG9taWNfbm90
aWZ5KTsKK1dBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKHRocm93KTsKK1dBU01fU0xPV19QQVRI
X0hJRERFTl9ERUNMKHJldGhyb3cpOworV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wocmV0cmll
dmVfYW5kX2NsZWFyX2V4Y2VwdGlvbik7CiAKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBl
IHNsb3dfcGF0aF93YXNtX3Rocm93X2V4Y2VwdGlvbihDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVj
dGlvbiosIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6RXhjZXB0aW9uVHlwZSkgUkVG
RVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJu
VHlwZSBzbG93X3BhdGhfd2FzbV9wb3Bjb3VudChjb25zdCBJbnN0cnVjdGlvbiogcGMsIHVpbnQz
Ml90KSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKaW5kZXggZmE1NTJlZmZm
MTc0MWVjYjVhNGI2YzJmODlmY2EwOTc1OWVlMzE1ZC4uMTJjZGFhOTY1ZWE5OGJhMThhYzI3MTZk
Y2M3NmU4MjcwODUwMjEwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKQEAgLTExNyw2ICsxMTcsNyBAQCBhdXRvIFN0cmVhbWlu
Z1BhcnNlcjo6cGFyc2VDb2RlU2VjdGlvblNpemUodWludDMyX3QgZnVuY3Rpb25Db3VudCkgLT4g
U3RhdGUKICAgICBtX2Z1bmN0aW9uQ291bnQgPSBmdW5jdGlvbkNvdW50OwogICAgIG1fZnVuY3Rp
b25JbmRleCA9IDA7CiAgICAgbV9jb2RlT2Zmc2V0ID0gbV9vZmZzZXQ7CisgICAgbV9pbmZvLT5t
X2Z1bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlvbnMuZW5zdXJlU2l6ZShmdW5jdGlvbkNvdW50KTsK
IAogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCA9PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmln
ICIsIGZ1bmN0aW9uQ291bnQpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3Vu
dCAhPSBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwgZnVu
Y3Rpb25Db3VudCwgIiBleGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25zICIs
IG1faW5mby0+ZnVuY3Rpb25zLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGFnLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRlYzY3MzYyMzJmMDcyMWZjNjI1N2Q0Nzk0MTcxN2I1MjYyYmJl
ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFn
LmNwcApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21UYWcuaCIKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgV2Fz
bSB7CisKK3VpbnQzMl90IFRhZzo6c19pZCA9IDA7CisKK319IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGFnLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTAzOTUzZDVkNmVlZmM5MzM4MWZjOTBlNjRmNWI3MmVjMzBkMTQ3OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuaApAQCAtMCwwICsxLDYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtU2lnbmF0dXJl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFRhZyA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUYWc+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUYWcpOworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8VGFnPiBjcmVhdGUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgVGFnKHNpZ25hdHVyZSkpOyB9CisKKyAgICBTaWduYXR1cmVBcmdDb3VudCBw
YXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCk7IH0KKyAgICBUeXBlIHBhcmFtZXRlcihTaWduYXR1cmVBcmdDb3VudCBpKSBjb25zdCB7IHJl
dHVybiBtX3NpZ25hdHVyZS0+YXJndW1lbnQoaSk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBUYWcmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lkID09IG90aGVyLm1faWQ7IH0KKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGFnJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pZCAh
PSBvdGhlci5tX2lkOyB9CisKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2lnbmF0dXJlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGFnKGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQorICAgICAgICA6IG1faWQoKytzX2lkKQorICAgICAgICAs
IG1fc2lnbmF0dXJlKFJlZiB7IHNpZ25hdHVyZSB9KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0
aWMgdWludDMyX3Qgc19pZDsKKyAgICB1aW50MzJfdCBtX2lkOworICAgIFJlZjxjb25zdCBTaWdu
YXR1cmU+IG1fc2lnbmF0dXJlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRodW5rcy5jcHAKaW5kZXggNzlkMWJjZmY4OWZiMDRlMjJlZDU0ZjJmNjQwOGJlMDlmMjkz
ZDBjMy4uZmVjMmExMzc3OWJmMjdmNjQ4ZmFhMzhhNWVmODY0OGUwOTQ4NWMxYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw4ICsyOCwxMSBAQAog
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNJ
bnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUHJvYmVD
b250ZXh0LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVk
ZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAppbmRleCBjMjM1Y2ZlNjI5NWU2NjlhZTVh
ODBlZThmMjUyZWE2Y2EyNDMxYjgzLi5mNDVkZWIyYTU5NmNhYTI1N2UzMzFlZDIxZWYwOWUwNmIw
NWVjNTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRv
cklubGluZXNIZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdh
c21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQppbmRleCAxZTM4MGRlZjFjZDhjYjY3NjA3
NWVkMzI1NTc5YjBmNTFkMWJjZTU1Li45Njc3ZWI4M2Q5NmE3YWQ2NGZiNTE0N2E0MmI0YTg1OGQ5
NTk0MDQ3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdh
c21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weQpAQCAtMTQ0
LDcgKzE0NCw3IEBAIGNsYXNzIENvZGVHZW5lcmF0b3I6CiAgICAgICAgICAgICBzZWxmLmFkdmFu
Y2UoKQogICAgICAgICAgICAgc2VsZi5jb25zdW1lKCIpIikKICAgICAgICAgZWxpZiBhcmd1bWVu
dFJlZ2V4Lm1hdGNoKHNlbGYudG9rZW4oKSk6Ci0gICAgICAgICAgICByZXN1bHQgPSAiYXJnIiAr
IHNlbGYudG9rZW4oKVsxOl0KKyAgICAgICAgICAgIHJlc3VsdCA9ICJnZXQoYXJnIiArIHNlbGYu
dG9rZW4oKVsxOl0gKyAiKSIKICAgICAgICAgICAgIHNlbGYuYWR2YW5jZSgpCiAgICAgICAgIGVs
c2U6CiAgICAgICAgICAgICBvcCA9IHNlbGYudG9rZW4oKQpAQCAtMTU2LDEzICsxNTYsMTYgQEAg
Y2xhc3MgQ29kZUdlbmVyYXRvcjoKIAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKKyAgICBkZWYg
bWFrZVJlc3VsdChzZWxmLCByZXN1bHRWYWx1ZSk6CisgICAgICAgIHJldHVybiByZXN1bHRWYWx1
ZSArICI7XG4iICsgInJlc3VsdCA9IHB1c2gocmVzdWx0VmFsdWUtPnR5cGUoKSk7XG4iICsgIm1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIG9yaWdp
bigpLCByZXN1bHQsIHJlc3VsdFZhbHVlKTsiCisKICAgICBkZWYgZ2VuZXJhdGUoc2VsZiwgd2Fz
bU9wKToKICAgICAgICAgaWYgbGVuKHNlbGYudG9rZW5zKSA9PSAxOgotICAgICAgICAgICAgcGFy
YW1zID0gWyJhcmciICsgc3RyKHBhcmFtKSBmb3IgcGFyYW0gaW4gcmFuZ2UobGVuKHdhc21PcFsi
cGFyYW1ldGVyIl0pKV0KLSAgICAgICAgICAgIHJldHVybiAiICAgIHJlc3VsdCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OiIgKyBzZWxmLnRva2VuKCkgKyAi
LCBvcmlnaW4oKSwgIiArICIsICIuam9pbihwYXJhbXMpICsgIikiCisgICAgICAgICAgICBwYXJh
bXMgPSBbImdldChhcmciICsgc3RyKHBhcmFtKSArICIpIiBmb3IgcGFyYW0gaW4gcmFuZ2UobGVu
KHdhc21PcFsicGFyYW1ldGVyIl0pKV0KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1ha2VSZXN1
bHQoIiAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEIzOjoiICsgc2VsZi50b2tlbigpICsgIiwgb3JpZ2luKCksICIgKyAiLCAi
LmpvaW4ocGFyYW1zKSArICIpIikKICAgICAgICAgcmVzdWx0ID0gc2VsZi5nZW5lcmF0ZU9wY29k
ZSgpCi0gICAgICAgIHNlbGYuY29kZS5hcHBlbmQoInJlc3VsdCA9ICIgKyByZXN1bHQpCi0gICAg
ICAgIHJldHVybiAiICAgICIgKyAiICAgIFxuIi5qb2luKHNlbGYuY29kZSkKKyAgICAgICAgc2Vs
Zi5jb2RlLmFwcGVuZCgiVmFsdWUqIHJlc3VsdFZhbHVlID0gIiArIHJlc3VsdCkKKyAgICAgICAg
cmV0dXJuIHNlbGYubWFrZVJlc3VsdCgiICAgICIgKyAiICAgIFxuIi5qb2luKHNlbGYuY29kZSkp
CiAKIAogZGVmIHRlbXAoaW5kZXgpOgpAQCAtMTkxLDcgKzE5NCw3IEBAIGRlZiBnZW5lcmF0ZVNp
bXBsZUNvZGUob3ApOgogICAgIHJldHVybiAiIiIKIHRlbXBsYXRlPD4gYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OiIiIiArIHdhc20udG9DcHAob3BbIm5hbWUiXSkgKyAiPigiICsg
IiwgIi5qb2luKGFyZ3MpICsgIiIiKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0iIiIgKyBnZW5lcmF0
ZUIzQ29kZShvcGNvZGUsIGIzb3ApICsgIiIiOworIiIiICsgZ2VuZXJhdGVCM0NvZGUob3Bjb2Rl
LCBiM29wKSArICIiIgogICAgIHJldHVybiB7IH07CiB9CiAiIiIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQppbmRleCBjMjBiZmE1
NDJlMDg2NGJjZDBhZjgyOGU3OWQ2OTIwODA0YTU3MjM3Li43Y2NmY2FmYzZhZmIzMjEwOGNiNGE1
MDljNWI5MjA3MmE4MWM3NjI0IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CkBAIC01Myw3ICs1Myw3IEBAIGRlZiBjcHBNYWNy
byh3YXNtT3Bjb2RlLCB2YWx1ZSwgYjMsIGluYywgKmV4dHJhQXJncyk6CiBkZWYgdHlwZU1hY3Jv
aXplcigpOgogICAgIGluYyA9IDAKICAgICBmb3IgdHkgaW4gd2FzbS50eXBlczoKLSAgICAgICAg
eWllbGQgY3BwTWFjcm8odHksIHdhc20udHlwZXNbdHldWyJ2YWx1ZSJdLCB3YXNtLnR5cGVzW3R5
XVsiYjN0eXBlIl0sIGluYykKKyAgICAgICAgeWllbGQgY3BwTWFjcm8odHksIHdhc20udHlwZXNb
dHldWyJ2YWx1ZSJdLCB3YXNtLnR5cGVzW3R5XVsiYjN0eXBlIl0sIGluYywgdHkpCiAgICAgICAg
IGluYyArPSAxCiAKIHR5cGVfZGVmaW5pdGlvbnMgPSBbIiNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9U
WVBFKG1hY3JvKSJdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHkuY3BwCmluZGV4IDcxOGJjYjk3NTU2ZWY0NWE4MmQzZGI5ZTRiYTA3NzU4MGJiYzllNTYu
Ljc4ZjE3NmFiNjNhMjY1ZTE1NDlkNWQ3MmNiMzYyY2E3ZTg1NDdjZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCkBAIC03OCw2ICs3OCw3
IEBAIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJs
eSIsICZCYXNlOjpzX2luZm8sICZ3ZWJBc3NlCiAvKiBTb3VyY2UgZm9yIEpTV2ViQXNzZW1ibHku
bHV0LmgKIEBiZWdpbiB3ZWJBc3NlbWJseVRhYmxlCiAgIENvbXBpbGVFcnJvciAgICBjcmVhdGVX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvciAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjaworICBFeGNl
cHRpb24gICAgICAgY3JlYXRlV2ViQXNzZW1ibHlFeGNlcHRpb24gICAgIERvbnRFbnVtfFByb3Bl
cnR5Q2FsbGJhY2sKICAgR2xvYmFsICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5R2xvYmFsICAg
ICAgICBEb250RW51bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIEluc3RhbmNlICAgICAgICBjcmVhdGVX
ZWJBc3NlbWJseUluc3RhbmNlICAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBMaW5r
RXJyb3IgICAgICAgY3JlYXRlV2ViQXNzZW1ibHlMaW5rRXJyb3IgICAgIERvbnRFbnVtfFByb3Bl
cnR5Q2FsbGJhY2sKQEAgLTg1LDYgKzg2LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1i
bHk6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5IiwgJkJhc2U6OnNfaW5mbywgJndlYkFzc2UKICAg
TW9kdWxlICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5TW9kdWxlICAgICAgICBEb250RW51bXxQ
cm9wZXJ0eUNhbGxiYWNrCiAgIFJ1bnRpbWVFcnJvciAgICBjcmVhdGVXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvciAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBUYWJsZSAgICAgICAgICAgY3Jl
YXRlV2ViQXNzZW1ibHlUYWJsZSAgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKKyAg
VGFnICAgICAgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5VGFnICAgICAgICAgICBEb250RW51bXxQ
cm9wZXJ0eUNhbGxiYWNrCiAgIGNvbXBpbGUgICAgICAgICB3ZWJBc3NlbWJseUNvbXBpbGVGdW5j
ICAgICAgICAgRnVuY3Rpb24gMQogICBpbnN0YW50aWF0ZSAgICAgd2ViQXNzZW1ibHlJbnN0YW50
aWF0ZUZ1bmMgICAgIEZ1bmN0aW9uIDEKICAgdmFsaWRhdGUgICAgICAgIHdlYkFzc2VtYmx5VmFs
aWRhdGVGdW5jICAgICAgICBGdW5jdGlvbiAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEw
M2Q0MzAzM2NlYWQ1ZjFiNDNiNmNkNjUxZjM2YTc4NTJmZjAxODgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNw
cApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNl
cHRpb24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbjo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dl
YkFzc2VtYmx5RXhjZXB0aW9uKSB9OworCitKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFdhc206
OlRhZyYgdGFnLCBGaXhlZFZlY3Rvcjx1aW50NjRfdD4mJiBwYXlsb2FkKQorICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlKQorICAgICwgbV90YWcoUmVmIHsgdGFnIH0pCisgICAgLCBtX3BheWxvYWQo
V1RGTW92ZShwYXlsb2FkKSkKK3sKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKGNlbGwsIHZpc2l0b3IpOworCisgICAgYXV0byogZXhjZXB0aW9uID0ganNDYXN0PEpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24qPihjZWxsKTsKKyAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IGV4Y2VwdGlvbi0+dGFnKCkuc2lnbmF0dXJlKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBp
ZiAoaXNSZWZUeXBlKHNpZ25hdHVyZS5hcmd1bWVudChpKSkpCisgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZChiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+PihleGNlcHRpb24tPnBh
eWxvYWQoKVtpXSkpOworICAgIH0KK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNz
ZW1ibHlFeGNlcHRpb24pOworCit2b2lkIEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQoreworICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24q
PihjZWxsKS0+SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6fkpTV2ViQXNzZW1ibHlFeGNlcHRpb24o
KTsKK30KKworSlNWYWx1ZSBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpnZXRBcmcoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaSkgY29uc3QKK3sKKyAgICBjb25zdCBXYXNt
OjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IHRhZygpLnNpZ25hdHVyZSgpOworICAgIEFTU0VSVChp
IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CisgICAgcmV0dXJuIHRvSlNWYWx1ZShnbG9i
YWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudChpKSwgcGF5bG9hZCgpW2ldKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9u
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTkyZDM3ODJmYTE1NmRiZTA2NDViMGFjODdkNzcxYWZkMmU0M2ViMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlFeGNlcHRpb24uaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisKKyNpbmNsdWRlICJXYXNtVGFnLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
eworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKworICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS53ZWJBc3NlbWJseUV4Y2VwdGlvblNw
YWNlPG1vZGU+KCk7CisgICAgfQorCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRXJy
b3JJbnN0YW5jZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IFdhc206OlRhZyYgdGFnLCBGaXhlZFZlY3Rvcjx1aW50NjRfdD4mJiBw
YXlsb2FkKQorICAgIHsKKyAgICAgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogZXhjZXB0aW9u
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUV4Y2VwdGlvbj4odm0u
aGVhcCkpIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24odm0sIHN0cnVjdHVyZSwgdGFnLCBXVEZNb3Zl
KHBheWxvYWQpKTsKKyAgICAgICAgZXhjZXB0aW9uLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAg
ICAgIHJldHVybiBleGNlcHRpb247CisgICAgfQorCisgICAgREVDTEFSRV9WSVNJVF9DSElMRFJF
TjsKKworICAgIGNvbnN0IFdhc206OlRhZyYgdGFnKCkgY29uc3QgeyByZXR1cm4gbV90YWcuZ2V0
KCk7IH0KKyAgICBjb25zdCBGaXhlZFZlY3Rvcjx1aW50NjRfdD4mIHBheWxvYWQoKSBjb25zdCB7
IHJldHVybiBtX3BheWxvYWQ7IH0KKyAgICBKU1ZhbHVlIGdldEFyZyhKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRp
b24oVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBXYXNtOjpUYWcmLCBGaXhlZFZlY3Rvcjx1aW50NjRf
dD4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisKKyAgICBSZWY8Y29uc3Qg
V2FzbTo6VGFnPiBtX3RhZzsKKyAgICBGaXhlZFZlY3Rvcjx1aW50NjRfdD4gbV9wYXlsb2FkOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhl
bHBlcnMuaAppbmRleCBkOGYyNjUwY2FhNTg2NzIzNTRiZDVmMzlmN2RlYWI2NDEwZDAwNTRjLi5i
NjIwZWRjYTI4YTllMjQyOWYxMjBjZTE5NjdhM2IwYzExMjEzNTcxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpT
Q0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU1NvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUg
IldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi5oIgpAQCAtMTQ0LDYgKzE0NSw3NSBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZGVmYXVs
dFZhbHVlRm9yUmVmZXJlbmNlVHlwZShjb25zdCBXYXNtOjpUeXBlIHR5cGUpCiAgICAgcmV0dXJu
IGpzTnVsbCgpOwogfQogCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgdG9KU1ZhbHVlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFdhc206OlR5cGUgdHlwZSwgdWludDY0X3QgYml0
cykKK3sKKyAgICBzd2l0Y2ggKHR5cGUua2luZCkgeworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6
OlZvaWQ6CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIGNhc2UgV2FzbTo6VHlw
ZUtpbmQ6OkkzMjoKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+
KGJpdHMpKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGMzI6CisgICAgICAgIHJldHVybiBq
c051bWJlcihiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PGludDMyX3Q+KGJpdHMpKSk7
CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjY0OgorICAgICAgICByZXR1cm4ganNOdW1iZXIo
Yml0d2lzZV9jYXN0PGRvdWJsZT4oYml0cykpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6Okk2
NDoKKyAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oYml0cykpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkV4dGVy
bnJlZjoKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGdW5jcmVmOgorICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PEpTVmFsdWU+KGJpdHMpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBK
U1ZhbHVlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdWludDY0X3QgZnJvbUpTVmFsdWUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgV2FzbTo6VHlwZSB0eXBlLCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgc3dpdGNoICh0eXBlLmtpbmQpIHsKKyAg
ICBjYXNlIFdhc206OlR5cGVLaW5kOjpUeXBlSWR4OgorICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6
OkZ1bmNyZWY6IHsKKyAgICAgICAgYm9vbCBpc051bGxhYmxlID0gdHlwZS5pc051bGxhYmxlKCk7
CisgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IG51bGxwdHI7Cisg
ICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uID0g
bnVsbHB0cjsKKyAgICAgICAgaWYgKCFpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCB2YWx1
ZSwgd2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSAmJiAoIWlzTnVsbGFibGUgfHwg
IXZhbHVlLmlzTnVsbCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXhjZXB0aW9uKGds
b2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFs
T2JqZWN0LCB2bSwgIkZ1bmNyZWYgbXVzdCBiZSBhbiBleHBvcnRlZCB3YXNtIGZ1bmN0aW9uIikp
OworICAgICAgICBpZiAodHlwZS5raW5kID09IFdhc206OlR5cGVLaW5kOjpUeXBlSWR4ICYmICh3
YXNtRnVuY3Rpb24gfHwgd2FzbVdyYXBwZXJGdW5jdGlvbikpIHsKKyAgICAgICAgICAgIFdhc206
OlNpZ25hdHVyZUluZGV4IHBhcmFtSW5kZXggPSB0eXBlLmluZGV4OworICAgICAgICAgICAgV2Fz
bTo6U2lnbmF0dXJlSW5kZXggYXJnSW5kZXg7CisgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9u
KQorICAgICAgICAgICAgICAgIGFyZ0luZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRl
eCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ0luZGV4ID0gd2FzbVdy
YXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgIGlmIChwYXJhbUlu
ZGV4ICE9IGFyZ0luZGV4KQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXhjZXB0aW9u
KGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xv
YmFsT2JqZWN0LCB2bSwgIkFyZ3VtZW50IGZ1bmN0aW9uIGRpZCBub3QgbWF0Y2ggdGhlIHJlZmVy
ZW5jZSB0eXBlIikpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFdhc206OlR5cGVLaW5kOjpFeHRlcm5yZWY6CisgICAgICAgIGlmICghdHlwZS5pc051bGxhYmxl
KCkgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUV4Y2VwdGlv
bihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKGds
b2JhbE9iamVjdCwgdm0sICJOb24tbnVsbCBFeHRlcm5yZWYgY2Fubm90IGJlIG51bGwiKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkkzMjoKKyAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB2YWx1ZS50b0ludDMyKGdsb2JhbE9iamVjdCkpOworICAg
IGNhc2UgV2FzbTo6VHlwZUtpbmQ6Okk2NDoKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLnRvQmlnSW50NjQoZ2xvYmFsT2JqZWN0
KSkpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkYzMjoKKyAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQoZ2xvYmFs
T2JqZWN0KSkpOworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkY2NDoKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLnRvTnVtYmVy
KGdsb2JhbE9iamVjdCkpKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpWb2lkOgorICAgIGNh
c2UgV2FzbTo6VHlwZUtpbmQ6OkZ1bmM6CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6UmVmTnVs
bDoKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpSZWY6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U1ZhbHVlOjplbmNvZGUodmFsdWUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCA2NmRhMTBhNzgwMDNk
YjI3YTE5MTgyZTliMWIwYzNjODA1ZDRhM2I2Li4xZDdmNDZjZDY4MzA0NWVhYjY0NmI4NzJmNTc4
ZWQ3NTAyMjVjYmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKQEAgLTIxNiw2ICsyMTYsNyBAQCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dHJ5Q3JlYXRlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpGdW5jdGlv
bjoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDoKICAgICAgICAgY2Fz
ZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOgorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFs
S2luZDo6RXhjZXB0aW9uOgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGNhc2UgV2Fz
bTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6CiAgICAgICAgICAgICBicmVhazsKQEAgLTI0Miw2ICsy
NDMsNyBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dHJ5
Q3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWxLaW5kOjpGdW5jdGlvbjoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2Jh
bDoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOgorICAgICAgICBjYXNl
IFdhc206OkV4dGVybmFsS2luZDo6RXhjZXB0aW9uOgogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAppbmRleCA1
NmY1OGY5NTQzNDkzOTU5YjgyNmQxZjk3M2E4ZjJiMGQ1Y2Y3NjlmLi45NzRkNmQ3YmE1ZTdhNTg3
OGE4OGI2YzExNmQ1MmFkZTUzOGJhZjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaApAQCAtNDgsNiArNDgsOCBAQCBj
bGFzcyBDb2RlQmxvY2s7CiB9CiAKIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSBmaW5hbCA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOworCiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
UnVudGltZUVycm9yLmNwcAppbmRleCAxMDIyYTUyMjc0MzI5NjdhZWFhNTJiOGI4OTc0Njc5M2Jm
YWZmNGRiLi5iMTAyOTdmZWRhYjc1ZmEyMzdjNTc2NmU3MTE5MzI0MjQyNjQ4NjdlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
UnVudGltZUVycm9yLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNyw2ICszNywxMyBAQCBKU09iamVjdCogY3JlYXRlSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sCiAg
ICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7CiAgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6
OmNyZWF0ZShnbG9iYWxPYmplY3QsIHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5UnVudGlt
ZUVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UsIEpTVmFsdWUoKSwgZGVmYXVsdFNvdXJjZUFwcGVu
ZGVyLCBUeXBlTm90aGluZywgRXJyb3JUeXBlOjpFcnJvciwgdHJ1ZSk7CiB9CisKK0pTT2JqZWN0
KiBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFZNJiB2bSwgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlKQoreworICAgIEVycm9ySW5z
dGFuY2UqIGVycm9yID0gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIGds
b2JhbE9iamVjdC0+d2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgV2FzbTo6ZXJy
b3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBlKSwgSlNWYWx1ZSgpLCBkZWZhdWx0U291cmNl
QXBwZW5kZXIsIFR5cGVOb3RoaW5nLCBFcnJvclR5cGU6OkVycm9yLCB0cnVlKTsKKyAgICBlcnJv
ci0+c2V0Q2F0Y2hhYmxlRnJvbVdhc20oZmFsc2UpOworICAgIHJldHVybiBlcnJvcjsKK30KICAg
ICAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgKaW5kZXggYmU0MTMwOTBk
MzI3NGM2MThmYWZkNDliMTE2N2IwZDIyMjdjZTVmYy4uYzg2YjYzZjkxMmQzY2Y0MWQxYzZjNDkw
YzA4OTYzOWNiN2IwYjNmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsMTIgQEAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJFcnJvckluc3RhbmNlLmgiCisjaW5j
bHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIEpTT2JqZWN0
KiBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBj
b25zdCBTdHJpbmcmKTsKK0pTT2JqZWN0KiBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9y
KEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBXYXNtOjpFeGNlcHRpb25UeXBlKTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseVRhZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNmYzJiMzhhYzBmOWZiN2U1YzFjYzc2NzBjNGNk
ZGQwMTYwYmRmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWcuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseVRhZy5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisj
aW5jbHVkZSAiV2FzbVRhZy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZv
IEpTV2ViQXNzZW1ibHlUYWc6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5LlRhZyIsICZCYXNlOjpz
X2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJs
eVRhZykgfTsKKworSlNXZWJBc3NlbWJseVRhZyogSlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGNvbnN0IFdhc206OlRhZyYgdGFnKQoreworICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OworICAgIGF1dG8qIGpzVGFnID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3Nl
bWJseVRhZz4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlUYWcodm0sIHN0cnVjdHVyZSwgdGFnKTsK
KyAgICBqc1RhZy0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBqc1RhZzsKK30KKwor
U3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5VGFnOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK0pTV2ViQXNzZW1i
bHlUYWc6OkpTV2ViQXNzZW1ibHlUYWcoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgV2FzbTo6VGFnJiB0YWcpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3Rh
ZyhSZWYgeyB0YWcgfSkKK3sKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5VGFnOjpkZXN0cm95KEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5VGFnKj4oY2VsbCkt
PkpTV2ViQXNzZW1ibHlUYWc6On5KU1dlYkFzc2VtYmx5VGFnKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwM2I1
ZDU2ZTNkOWU3NTM4NmFmYzM3ZWIwY2E0MGVkMmEyYWI0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmgKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbVRh
Zy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseVRhZyBmaW5hbCA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNO
b25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IHRydWU7CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CisgICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4g
dm0ud2ViQXNzZW1ibHlUYWdTcGFjZTxtb2RlPigpOworICAgIH0KKworICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNXZWJBc3NlbWJseVRh
ZyogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBjb25zdCBXYXNtOjpU
YWcmKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUpOworCisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcoKSBjb25zdCB7
IHJldHVybiBtX3RhZzsgfQorICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlKCkg
Y29uc3QgeyByZXR1cm4gdGFnKCkuc2lnbmF0dXJlKCk7IH0KKworcHJpdmF0ZToKKyAgICBKU1dl
YkFzc2VtYmx5VGFnKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgV2FzbTo6VGFnJik7CisKKyAgICBj
b25zdCBSZWY8Y29uc3QgV2FzbTo6VGFnPiBtX3RhZzsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2FzbVRvSlMuY3BwCmluZGV4IGY2N2YyNDJhNzg5MTNhZTVjMDJhYTU2OGU5OWFj
NjVjZGJiODBmZGUuLmQ2NWZjNjEyMWI2MDkwYmQ3ZjJkNDBkMDNiYjQ1ZWU3YWE2NDAyMzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKQEAgLTk4LDcgKzk4
LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJp
bmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxl
ZEdQUnMgPSAwOwogICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7CiAgICAgICAg
IHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVu
dCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIHVuc2lnbmVk
IGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENh
bGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0Nv
dW50OyArK2FyZ051bSkgewogICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFy
Z3VtZW50KGFyZ051bSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUua2luZCkgewpAQCAt
MTYyLDcgKzE2Miw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQ
dHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0mIHZtCiAgICAgICAgIHVuc2lnbmVk
IG1hcnNoYWxsZWRHUFJzID0gMDsKICAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAw
OwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZp
cnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwotICAgICAg
ICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgdW5zaWduZWQgZnJP
ZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YoUmVnaXN0ZXIpKTsKIAogICAgICAgICBhdXRvIG1hcnNoYWxsRlBSID0gWyZdIChGUFJS
ZWcgZnByUmVnKSB7CiAgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZwclJlZyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmNGE1ZjQ0ODZiNGYxN2M4ZmZm
Yzg3MDc0MTE1MDJiODY3ZTY5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcApAQCAtMCww
ICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0
cnVjdG9yLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJJdGVyYXRv
ck9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCisj
aW5jbHVkZSAiV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIldl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IubHV0LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Citjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6c19pbmZv
ID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAmY29uc3RydWN0b3JUYWJsZVdlYkFzc2Vt
Ymx5RXhjZXB0aW9uLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5RXhj
ZXB0aW9uQ29uc3RydWN0b3IpIH07CisKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlFeGNlcHRpb24pOworc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oY2FsbEpTV2ViQXNzZW1ibHlFeGNlcHRpb24pOworCisvKiBTb3VyY2UgZm9y
IFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IubHV0LmgKKyBAYmVnaW4gY29uc3RydWN0
b3JUYWJsZVdlYkFzc2VtYmx5RXhjZXB0aW9uCisgQGVuZAorICovCisKK0pTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIGF1dG8mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBKU1ZhbHVlIHRhZ1ZhbHVlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsK
KyAgICBKU1ZhbHVlIHRhZ1BhcmFtZXRlcnMgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOworCisg
ICAgYXV0byB0YWcgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlUYWcqPih2bSwgdGFnVmFs
dWUpOworICAgIGlmICghdGFnKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGNvbnN0cnVjdG9yIGV4cGVj
dHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgV2ViQXNzZW1ibHkuVGFnIik7CisKKyAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciB2YWx1ZXM7CisgICAgZm9yRWFjaEluSXRlcmFibGUoZ2xvYmFs
T2JqZWN0LCB0YWdQYXJhbWV0ZXJzLCBbJl0gKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IG5leHRWYWx1ZSkgeworICAgICAgICB2YWx1ZXMuYXBwZW5kKG5leHRWYWx1ZSk7CisgICAgfSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGlmICh2YWx1ZXMu
c2l6ZSgpICE9IHRhZy0+c2lnbmF0dXJlKCkuYXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuRXhj
ZXB0aW9uIGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlIG51bWJlciBvZiBwYXJlbWV0ZXJzIGluIFdl
YkFzc2VtYmx5LlRhZyB0byBtYXRjaCB0aGUgdGFncyBwYXJhbWV0ZXIgY291bnQuIik7CisKKyAg
ICAvLyBBbnkgR0MnZCB2YWx1ZXMgaW4gaGVyZSB3aWxsIGJlIG1hcmtlZCBieSB0aGUgTWFya2Vk
QXJ1Z2VtZW50QnVmZmVyIHVudGlsIHN0b3JlZCBpbiB0aGUgRXhjZXB0aW9uLgorICAgIEZpeGVk
VmVjdG9yPHVpbnQ2NF90PiBwYXlsb2FkKHZhbHVlcy5zaXplKCkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcGF5bG9hZFtpXSA9
IGZyb21KU1ZhbHVlKGdsb2JhbE9iamVjdCwgdGFnLT5zaWduYXR1cmUoKS5hcmd1bWVudChpKSwg
dmFsdWVzLmF0KGkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICB9CisKKyAgICBKU09iamVjdCogbmV3VGFyZ2V0ID0gYXNPYmplY3QoY2FsbEZyYW1lLT5u
ZXdUYXJnZXQoKSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0NfR0VUX0RFUklWRURf
U1RSVUNUVVJFKHZtLCB3ZWJBc3NlbWJseUV4Y2VwdGlvblN0cnVjdHVyZSwgbmV3VGFyZ2V0LCBj
YWxsRnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU1dl
YkFzc2VtYmx5RXhjZXB0aW9uOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgdGFnLT50YWcoKSwgV1RG
TW92ZShwYXlsb2FkKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxKU1dl
YkFzc2VtYmx5RXhjZXB0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LkV4Y2VwdGlvbiIpKTsKK30KKworV2ViQXNzZW1i
bHlFeGNlcHRpb25Db25zdHJ1Y3RvciogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6
Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5RXhjZXB0aW9u
UHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQoreworICAgIGF1dG8qIGNvbnN0cnVjdG9yID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcj4o
dm0uaGVhcCkpIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3Iodm0sIHN0cnVjdHVyZSk7
CisgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCB0aGlzUHJvdG90eXBlKTsKKyAg
ICByZXR1cm4gY29uc3RydWN0b3I7Cit9CisKK1N0cnVjdHVyZSogV2ViQXNzZW1ibHlFeGNlcHRp
b25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSW50ZXJuYWxGdW5j
dGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBXZWJBc3NlbWJs
eUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdlYkFzc2VtYmx5
RXhjZXB0aW9uUHJvdG90eXBlKiBwcm90b3R5cGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0sIDEsICJFeGNlcHRpb24iX3MsIFByb3BlcnR5QWRkaXRpb25Nb2RlOjpXaXRob3V0U3Ry
dWN0dXJlVHJhbnNpdGlvbik7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udERlbGV0ZSk7Cit9CisKK1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3I6Oldl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY2FsbEpTV2ViQXNzZW1ibHlFeGNlcHRpb24s
IGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlFeGNlcHRpb24pCit7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25z
dHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlMWY4NWVkNWMzNmY0ZDA4M2QyMjRiYmNlZDIyYzk0Y2Vm
NDcxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgor
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBXZWJBc3Nl
bWJseUV4Y2VwdGlvblByb3RvdHlwZTsKKworY2xhc3MgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25z
dHJ1Y3RvciBmaW5hbCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlID0gSW50ZXJuYWxGdW5jdGlvbjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9w
ZXJ0eVRhYmxlOworCisgICAgc3RhdGljIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3Iq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlKik7
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBXZWJB
c3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlKik7Cit9Owor
U1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNzZW1ibHlFeGNlcHRpb25D
b25zdHJ1Y3RvciwgSW50ZXJuYWxGdW5jdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjNjMzZjNDc5ODVhMzI0YzFiMzg5OTM1ZWYxYTFiOTExYWFmNWY4ZTUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUV4Y2VwdGlvblByb3RvdHlwZS5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaCIKKworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKworI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKK3N0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKHdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG9GdW5jR2V0QXJnKTsKK3N0YXRp
YyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG9GdW5j
SXMpOworfQorCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUubHV0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlFeGNlcHRp
b25Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5LkV4Y2VwdGlvbiIsICZCYXNlOjpz
X2luZm8sICZwcm90b3R5cGVUYWJsZVdlYkFzc2VtYmx5RXhjZXB0aW9uLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlKSB9OworCisvKiBT
b3VyY2UgZm9yIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmx1dC5oCisgQGJlZ2luIHBy
b3RvdHlwZVRhYmxlV2ViQXNzZW1ibHlFeGNlcHRpb24KKyBnZXRBcmcgICB3ZWJBc3NlbWJseUV4
Y2VwdGlvblByb3RvRnVuY0dldEFyZyAgIEZ1bmN0aW9uIDIKKyBpcyAgIHdlYkFzc2VtYmx5RXhj
ZXB0aW9uUHJvdG9GdW5jSXMgICBGdW5jdGlvbiAxCisgQGVuZAorICovCisKK1dlYkFzc2VtYmx5
RXhjZXB0aW9uUHJvdG90eXBlKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBh
dXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUV4Y2Vw
dGlvblByb3RvdHlwZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlKHZt
LCBzdHJ1Y3R1cmUpOworICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVy
biBvYmplY3Q7Cit9CisKK1N0cnVjdHVyZSogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKK30KKwordm9pZCBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworfQorCitXZWJBc3NlbWJseUV4Y2VwdGlv
blByb3RvdHlwZTo6V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKworQUxXQVlT
X0lOTElORSBzdGF0aWMgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogZ2V0RXhjZXB0aW9uKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBpZiAoVU5MSUtFTFkoIXRoaXNWYWx1ZS5pc0NlbGwoKSkpIHsKKyAg
ICAgICAgdGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFuT2JqZWN0
RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorICAgIGF1dG8qIHRhZyA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbio+KHZtLCB0aGlzVmFsdWUuYXNDZWxsKCkpOworICAgIGlmIChMSUtFTFkodGFnKSkKKyAg
ICAgICAgcmV0dXJuIHRhZzsKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLUV4Y2VwdGlv
biBvYmplY3QiX3MpOworICAgIHJldHVybiBudWxscHRyOworfQorCitBTFdBWVNfSU5MSU5FIHN0
YXRpYyBKU1dlYkFzc2VtYmx5VGFnKiBnZXRUYWcoVk0mIHZtLCBKU1ZhbHVlIHRhZ1ZhbHVlKQor
eworICAgIGlmICghdGFnVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlUYWcqPih2bSwgdGFnVmFsdWUu
YXNDZWxsKCkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlFeGNl
cHRpb25Qcm90b0Z1bmNHZXRBcmcsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgY29u
c3QgYXV0byYgZm9ybWF0TWVzc2FnZSA9IFsmXShjb25zdCBhdXRvJiBtZXNzYWdlKSB7CisgICAg
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJXZWJBc3NlbWJseS5FeGNlcHRpb24uZ2V0QXJnKCk6ICIs
IG1lc3NhZ2UpOworICAgIH07CisgICAgY29uc3QgYXV0byYgdHlwZUVycm9yID0gWyZdKGNvbnN0
IGF1dG8mIG1lc3NhZ2UpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBmb3JtYXRNZXNzYWdlKG1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuIGVuY29k
ZWRKU1ZhbHVlKCk7CisgICAgfTsKKworICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIGpzRXhj
ZXB0aW9uID0gZ2V0RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKworICAgIEpTV2ViQXNzZW1ibHlUYWcqIHRhZyA9IGdldFRhZyh2bSwgY2FsbEZyYW1lLT5h
cmd1bWVudCgwKSk7CisgICAgaWYgKCF0YWcpCisgICAgICAgIHJldHVybiB0eXBlRXJyb3IoIkZp
cnN0IGFyZ3VtZW50IG11c3QgYmUgYSBXZWJBc3NlbWJseS5UYWciKTsKKworICAgIGlmIChqc0V4
Y2VwdGlvbi0+dGFnKCkgIT0gdGFnLT50YWcoKSkKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJvcigi
Rmlyc3QgYXJndW1lbnQgZG9lcyBub3QgbWF0Y2ggdGhlIGV4Y2VwdGlvbiB0YWciKTsKKworICAg
IHVpbnQzMl90IGluZGV4ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKS50b1VJbnQzMihnbG9iYWxP
YmplY3QpOworICAgIGlmIChpbmRleCA+PSB0YWctPnRhZygpLnBhcmFtZXRlckNvdW50KCkpIHsK
KyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZm9ybWF0
TWVzc2FnZSgiSW5kZXggb3V0IG9mIHJhbmdlIikpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpT
VmFsdWUoKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNW
YWx1ZTo6ZW5jb2RlKGpzRXhjZXB0aW9uLT5nZXRBcmcoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsK
K30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG9G
dW5jSXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbioganNFeGNlcHRpb24gPSBnZXRFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworCisgICAgSlNXZWJBc3NlbWJseVRhZyogdGFnID0gZ2V0VGFnKHZtLCBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXRhZykgeworICAgICAgICB0aHJvd1R5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRpb24u
aXMoKTogRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIFdlYkFzc2VtYmx5LlRhZyIpOworICAgICAg
ICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihqc0V4Y2VwdGlvbi0+dGFn
KCkgPT0gdGFnLT50YWcoKSkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kYzIxMDZkOGI5OTMxZmRhNGEwZTk0YjYxZmI1YzdlMWVhMzQ4ZGJjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2lu
ZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0
eVRhYmxlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNz
PgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNzZW1ibHlFeGNl
cHRpb25Qcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2U7CisgICAgfQorCisgICAgc3RhdGljIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlKiBj
cmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisK
KyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHAKaW5kZXggM2FiM2MzZDVjYjVjOTAwOWJlYzJiNmQ4MGQ0NDRjODBjMTQzZWFk
ZS4uMTk3MThkY2U2OTk2OTAwMWVlMTJkNjQ0Zjg2MjQ1ZTAxNzM2NWIwOCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAK
QEAgLTc4LDUxICs3OCw5IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1i
bHlGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgV2FzbTo6SW5z
dGFuY2UqIHdhc21JbnN0YW5jZSA9ICZpbnN0YW5jZS0+aW5zdGFuY2UoKTsKIAogICAgIGZvciAo
dW5zaWduZWQgYXJnSW5kZXggPSAwOyBhcmdJbmRleCA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCk7ICsrYXJnSW5kZXgpIHsKLSAgICAgICAgSlNWYWx1ZSBhcmcgPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KGFyZ0luZGV4KTsKLSAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoYXJnSW5k
ZXgpLmtpbmQpIHsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STMyOgotICAgICAgICAg
ICAgYXJnID0gSlNWYWx1ZTo6ZGVjb2RlKGFyZy50b0ludDMyKGdsb2JhbE9iamVjdCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlR5cGVJZHg6Ci0g
ICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkZ1bmNyZWY6IHsKLSAgICAgICAgICAgIGJvb2wg
aXNOdWxsYWJsZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdJbmRleCkuaXNOdWxsYWJsZSgpOwot
ICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0gbnVsbHB0cjsK
LSAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0
aW9uID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmICghaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlv
bih2bSwgYXJnLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pICYmICghaXNOdWxs
YWJsZSB8fCAhYXJnLmlzTnVsbCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgIkZ1bmNyZWYgbXVzdCBiZSBhbiBl
eHBvcnRlZCB3YXNtIGZ1bmN0aW9uIikpKTsKLSAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJn
dW1lbnQoYXJnSW5kZXgpLmtpbmQgPT0gV2FzbTo6VHlwZUtpbmQ6OlR5cGVJZHggJiYgKHdhc21G
dW5jdGlvbiB8fCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewotICAgICAgICAgICAgICAgIFdhc206
OlNpZ25hdHVyZUluZGV4IHBhcmFtSW5kZXggPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnSW5kZXgp
LmluZGV4OwotICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGFyZ0luZGV4Owot
ICAgICAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgIGFy
Z0luZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYXJnSW5kZXggPSB3YXNtV3JhcHBlckZ1bmN0aW9u
LT5zaWduYXR1cmVJbmRleCgpOwotICAgICAgICAgICAgICAgIGlmIChwYXJhbUluZGV4ICE9IGFy
Z0luZGV4KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgIkFyZ3VtZW50IGZ1bmN0aW9uIGRpZCBub3QgbWF0Y2gg
dGhlIHJlZmVyZW5jZSB0eXBlIikpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkV4dGVybnJlZjoKLSAg
ICAgICAgICAgIGlmICghc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ0luZGV4KS5pc051bGxhYmxlKCkg
JiYgYXJnLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAiTm9uLW51bGwgRXh0ZXJucmVmIGNhbm5vdCBi
ZSBudWxsIikpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OlR5cGVL
aW5kOjpJNjQ6Ci0gICAgICAgICAgICBhcmcgPSBKU1ZhbHVlOjpkZWNvZGUoYml0d2lzZV9jYXN0
PHVpbnQ2NF90PihhcmcudG9CaWdJbnQ2NChnbG9iYWxPYmplY3QpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjMyOgotICAgICAgICAgICAgYXJn
ID0gSlNWYWx1ZTo6ZGVjb2RlKGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oYXJnLnRvRmxvYXQoZ2xv
YmFsT2JqZWN0KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlw
ZUtpbmQ6OkY2NDoKLSAgICAgICAgICAgIGFyZyA9IEpTVmFsdWU6OmRlY29kZShiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KGFyZy50b051bWJlcihnbG9iYWxPYmplY3QpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6Vm9pZDoKLSAgICAgICAgY2FzZSBX
YXNtOjpUeXBlS2luZDo6RnVuYzoKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6UmVmTnVs
bDoKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6UmVmOgotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQorICAgICAgICB1aW50NjRfdCB2YWx1
ZSA9IGZyb21KU1ZhbHVlKGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ0luZGV4
KSwgY2FsbEZyYW1lLT5hcmd1bWVudChhcmdJbmRleCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICAgICAgYm94ZWRBcmdzLmFwcGVu
ZChhcmcpOworICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkp
OwogICAgIH0KIAogICAgIC8vIFdoZW4gd2UgZG9uJ3QgdXNlIGZhc3QgVExTIHRvIHN0b3JlIHRo
ZSBjb250ZXh0LCB0aGUgSlMKQEAgLTE1MiwxMCArMTEwLDYgQEAgSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwKICAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsKICAgICBBU1NFUlQo
Jndhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFuY2UoKSA9PSB2bS53YXNtQ29udGV4dC5s
b2FkKCkpOwogICAgIEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dhc20od2Fz
bUZ1bmN0aW9uLT5qc0VudHJ5cG9pbnQoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNz
KCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKTsKLSAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0
aGlzIGlzIGluIGEgcmVnaXN0ZXIgb3Igb24gdGhlIHN0YWNrIHNpbmNlIGl0J3Mgc3RvcmVkIGlu
IFZlY3RvcjxKU1ZhbHVlPi4KLSAgICAvLyBUaGlzIHByb2JhYmx5IGlzbid0IHN0cmljdGx5IG5l
Y2Vzc2FyeSwgc2luY2UgdGhlIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHNob3VsZCBrZWVwIHRoZSBp
bnN0YW5jZQotICAgIC8vIGFsaXZlLiBCdXQgaXQncyBnb29kIGh5Z2llbmUuCi0gICAgaW5zdGFu
Y2UtPnVzZSgpOwogICAgIGlmIChwcmV2V2FzbUluc3RhbmNlICE9IHdhc21JbnN0YW5jZSkgewog
ICAgICAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIHNvbWUgZXh0cmEgc2FmZXR5IGluc3RlYWQgb2Yg
bGVhdmluZyBhIGNhY2hlZAogICAgICAgICAvLyB2YWx1ZSBpbiB0aGVyZS4gSWYgd2UgZXZlciBm
b3JnZXQgdG8gc2V0IHRoZSB2YWx1ZSB0byBiZSBhIHJlYWwKQEAgLTE2OCw2ICsxMjIsMTEgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICB2bS53YXNtQ29udGV4dC5zdG9yZShwcmV2V2Fz
bUluc3RhbmNlLCB2bS5zb2Z0U3RhY2tMaW1pdCgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCisgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBpbiBh
IHJlZ2lzdGVyIG9yIG9uIHRoZSBzdGFjayBzaW5jZSBpdCdzIHN0b3JlZCBpbiBWZWN0b3I8SlNW
YWx1ZT4uCisgICAgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksIHNp
bmNlIHRoZSBXZWJBc3NlbWJseUZ1bmN0aW9uKiBzaG91bGQga2VlcCB0aGUgaW5zdGFuY2UKKyAg
ICAvLyBhbGl2ZS4gQnV0IGl0J3MgZ29vZCBoeWdpZW5lLgorICAgIGluc3RhbmNlLT51c2UoKTsK
KwogICAgIHJldHVybiByYXdSZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCBkYjQw
OTJhZDY5NDgyZjdhMDlkM2JlMWY3NTIzNDIyZDlkNWFmMTNkLi5hNDU3YzAyN2Y5MjhkNDJiYjIw
ZGU5OTZiYWM4OGE1MGNiOGZjZDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBAIC0zNyw2ICszNyw3
IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUxpbmtFcnJvci5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5RnVuY3Rpb24uaCIKQEAgLTEzMCw2ICsxMzEsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCog
aQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RnVuY3Rpb246CiAgICAgICAgIGNh
c2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpHbG9iYWw6CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWxLaW5kOjpUYWJsZToKKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlv
bjoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6
TWVtb3J5OgogICAgICAgICAgICAgY29udGludWU7CkBAIC0zNjMsNyArMzY1LDcgQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlua0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNPYmplY3QqIGkKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWxLaW5kOjpUYWJsZTogewotICAgICAgICAgICAgLy8gNy4gT3RoZXJ3aXNlIChpIGlzIGEgdGFi
bGUgaW1wb3J0KToKKyAgICAgICAgICAgIC8vIDcuIElmIGkgaXMgYSB0YWJsZSBpbXBvcnQ6CiAg
ICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0ganNEeW5hbWljQ2FzdDxKU1dl
YkFzc2VtYmx5VGFibGUqPih2bSwgdmFsdWUpOwogICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBu
b3QgYSBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3QsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vy
cm9yLgogICAgICAgICAgICAgaWYgKCF0YWJsZSkKQEAgLTM5NCw2ICszOTYsMjAgQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlua0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNPYmplY3QqIGkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAg
ICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbjogeworICAgICAgICAgICAgSlNX
ZWJBc3NlbWJseVRhZyogdGFnID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5VGFnKj4odm0s
IHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghdGFnKQorICAgICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBp
bXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJUYWcgaW1wb3J0IiwgImlzIG5vdCBhbiBpbnN0YW5j
ZSBvZiBXZWJBc3NlbWJseS5UYWciKSkpOworCisgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJ
bmRleCBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RXhj
ZXB0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4XTsKKworICAgICAgICAgICAg
aWYgKGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggIT0gdGFnLT50YWcoKS5zaWduYXR1cmUoKS5pbmRl
eCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJp
bXBvcnRlZCBUYWciLCAic2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIGltcG9ydGVkIFdlYkFz
c2VtYmx5IFRhZydzIHNpZ25hdHVyZSIpKSk7CisKKyAgICAgICAgICAgIG1faW5zdGFuY2UtPmlu
c3RhbmNlKCkuYWRkVGFnKHRhZy0+dGFnKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKwogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6TWVtb3J5OgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTQyMSw2ICs0MzcsOSBAQCB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09i
amVjdCogaQogICAgICAgICB9CiAgICAgfQogCisgICAgZm9yIChXYXNtOjpTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCA6IG1vZHVsZUluZm9ybWF0aW9uLmludGVybmFsRXhjZXB0aW9uU2ln
bmF0dXJlSW5kaWNlcykKKyAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5hZGRUYWcoV2Fz
bTo6VGFnOjpjcmVhdGUoV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCkpKTsKKwogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQgPSBjb2RlQmxvY2st
PmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKICAgICBhdXRvIG1ha2VGdW5jdGlvbldyYXBwZXIgPSBb
Jl0gKHVpbnQzMl90IGluZGV4KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgLy8gSWYgd2UgYWxyZWFk
eSBtYWRlIGEgd3JhcHBlciwgZG8gbm90IG1ha2UgYSBuZXcgb25lLgpAQCAtNTU3LDYgKzU3Niwx
MCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1wbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogaQogICAgICAgICAgICAgfQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkV4Y2Vw
dGlvbjogeworICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTV2ViQXNzZW1ibHlUYWc6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm1fd2ViQXNzZW1ibHlUYWdTdHJ1
Y3R1cmUuZ2V0KGdsb2JhbE9iamVjdCksIG1faW5zdGFuY2UtPmluc3RhbmNlKCkudGFnKGV4cC5r
aW5kSW5kZXgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIH0KIAog
ICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIFN0cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJmYjdjYjAxNDBiNTE5ZWVkM2NiYWFkNjNlNmZjM2NlMTliMGMyMzgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRh
Z0NvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisK
KyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgorI2lu
Y2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhZy5oIgor
I2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Citjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAi
RnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IpIH07CisKK3N0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGNhbGxKU1dlYkFzc2VtYmx5VGFnKTsKK3N0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWcpOworCitKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oY29uc3RydWN0SlNXZWJBc3NlbWJseVRhZywgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIAorICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3Nl
bWJseS5UYWcgY29uc3RydWN0b3IgZXhwZWN0cyB0aGUgdGFnIHR5cGUgYXMgdGhlIGZpcnN0IGFy
Z3VtZW50LiJfcyk7CisKKyAgICBKU1ZhbHVlIHRhZ1R5cGVWYWx1ZSA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CisgICAgSlNWYWx1ZSBzaWduYXR1cmVPYmplY3QgPSB0YWdUeXBlVmFsdWUuZ2V0
KGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcmFtZXRlcnMiX3Mp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKCFzaWdu
YXR1cmVPYmplY3QuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LlRhZyBjb25zdHJ1Y3RvciBleHBlY3Rz
IGEgdGFnIHR5cGUgd2l0aCB0aGUgJ3BhcmFtZXRlcnMnIHByb3BlcnR5LiJfcyk7CisKKyAgICBW
ZWN0b3I8V2FzbTo6VHlwZT4gcGFyYW1ldGVyczsKKyAgICBmb3JFYWNoSW5JdGVyYWJsZShnbG9i
YWxPYmplY3QsIHNpZ25hdHVyZU9iamVjdCwgWyZdIChhdXRvJiB2bSwgYXV0byogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIG5leHRUeXBlKSAtPiB2b2lkIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIFdhc206OlR5cGUgdHlwZTsKKyAgICAg
ICAgU3RyaW5nIHZhbHVlU3RyaW5nID0gbmV4dFR5cGUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAg
aWYgKHZhbHVlU3RyaW5nID09ICJpMzIiX3MpCisgICAgICAgICAgICB0eXBlID0gV2FzbTo6VHlw
ZXM6OkkzMjsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVTdHJpbmcgPT0gImk2NCJfcykKKyAgICAg
ICAgICAgIHR5cGUgPSBXYXNtOjpUeXBlczo6STY0OworICAgICAgICBlbHNlIGlmICh2YWx1ZVN0
cmluZyA9PSAiZjMyIl9zKQorICAgICAgICAgICAgdHlwZSA9IFdhc206OlR5cGVzOjpGMzI7Cisg
ICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09ICJmNjQiX3MpCisgICAgICAgICAgICB0eXBl
ID0gV2FzbTo6VHlwZXM6OkY2NDsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVTdHJpbmcgPT0gImFu
eWZ1bmMiX3MpCisgICAgICAgICAgICB0eXBlID0gV2FzbTo6VHlwZXM6OkZ1bmNyZWY7CisgICAg
ICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09ICJleHRlcm5yZWYiX3MpCisgICAgICAgICAgICB0
eXBlID0gV2FzbTo6VHlwZXM6OkV4dGVybnJlZjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuVGFnIGNv
bnN0cnVjdG9yIGV4cGVjdHMgdGhlICdwYXJhbWV0ZXJzJyBmaWVsZCBvZiB0aGUgZmlyc3QgYXJn
dW1lbnQgdG8gYmUgYSBzZXF1ZW5jZSBvZiBXZWJBc3NlbWJseSB2YWx1ZSB0eXBlcy4iX3MpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcGFyYW1ldGVycy5hcHBl
bmQodHlwZSk7CisgICAgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgIFJlZlB0cjxXYXNtOjpTaWduYXR1cmU+IHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpzaWduYXR1cmVGb3IoeyB9LCBwYXJhbWV0ZXJzKTsKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUodm0sIHdlYkFzc2VtYmx5
VGFnU3RydWN0dXJlLCBhc09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgpKSwgY2FsbEZyYW1l
LT5qc0NhbGxlZSgpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShKU1dlYkFzc2VtYmx5VGFnOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBXYXNtOjpUYWc6OmNyZWF0ZSgqc2lnbmF0dXJlKS5nZXQoKSkpKTsKK30KKworSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGNhbGxKU1dlYkFzc2VtYmx5VGFnLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rp
b25UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LlRhZyIpKTsKK30K
KworV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5VGFnUHJvdG90
eXBlKiB0aGlzUHJvdG90eXBlKQoreworICAgIGF1dG8qIGNvbnN0cnVjdG9yID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIFdl
YkFzc2VtYmx5VGFnQ29uc3RydWN0b3Iodm0sIHN0cnVjdHVyZSk7CisgICAgY29uc3RydWN0b3It
PmZpbmlzaENyZWF0aW9uKHZtLCB0aGlzUHJvdG90eXBlKTsKKyAgICByZXR1cm4gY29uc3RydWN0
b3I7Cit9CisKK1N0cnVjdHVyZSogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oSW50ZXJuYWxGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKK30KKwordm9pZCBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlKiBwcm90b3R5cGUpCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIDEsICJUYWciX3MsIFByb3BlcnR5QWRkaXRpb25N
b2RlOjpXaXRob3V0U3RydWN0dXJlVHJhbnNpdGlvbik7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Cit9CisKK1dlYkFzc2VtYmx5VGFnQ29uc3Ry
dWN0b3I6OldlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgY2FsbEpTV2ViQXNzZW1ibHlUYWcsIGNv
bnN0cnVjdEpTV2ViQXNzZW1ibHlUYWcpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjIwODVkOTY3ZDc3YTYxNzBkYTM3ZjY2Yzg4NjU4N2E2ZjE5YmRhZDAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVj
dG9yLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisj
aW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgIldhc21PcHMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlUYWc7CitjbGFzcyBXZWJBc3NlbWJs
eVRhZ1Byb3RvdHlwZTsKKworbmFtZXNwYWNlIFdhc20geworY2xhc3MgVGFnOworfQorCitjbGFz
cyBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yIGZpbmFsIDogcHVibGljIEludGVybmFsRnVuY3Rp
b24geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBJbnRlcm5hbEZ1bmN0aW9uOworCisgICAg
c3RhdGljIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSos
IFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVf
SU5GTzsKKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKFZNJiwgU3Ry
dWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5VGFnUHJv
dG90eXBlKik7Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoV2ViQXNz
ZW1ibHlUYWdDb25zdHJ1Y3RvciwgSW50ZXJuYWxGdW5jdGlvbik7CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ5M2Q0MTdjMThhYzg0YTcyOTRkMmU5MTQyYTU0MzMxZjI2MzA0MDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRh
Z1Byb3RvdHlwZS5jcHAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2Vt
Ymx5VGFnUHJvdG9GdW5jVHlwZSk7Cit9CisKKyNpbmNsdWRlICJXZWJBc3NlbWJseVRhZ1Byb3Rv
dHlwZS5sdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3Nl
bWJseVRhZ1Byb3RvdHlwZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFnIiwgJkJhc2U6OnNf
aW5mbywgJnByb3RvdHlwZVRhYmxlV2ViQXNzZW1ibHlUYWcsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUpIH07CisKKy8qIFNvdXJjZSBmb3IgV2Vi
QXNzZW1ibHlUYWdQcm90b3R5cGUubHV0LmgKKyBAYmVnaW4gcHJvdG90eXBlVGFibGVXZWJBc3Nl
bWJseVRhZworIHR5cGUgICB3ZWJBc3NlbWJseVRhZ1Byb3RvRnVuY1R5cGUgICBGdW5jdGlvbiAw
CisgQGVuZAorICovCisKKworV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqIFdlYkFzc2VtYmx5VGFn
UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQoreworICAgIGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlUYWdQcm90b3R5
cGUodm0sIHN0cnVjdHVyZSk7CisgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAg
cmV0dXJuIG9iamVjdDsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9U
UkFOU0lUSU9OKCk7Cit9CisKK1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlOjpXZWJBc3NlbWJseVRh
Z1Byb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlKQoreworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1dlYkFzc2VtYmx5VGFn
KiBnZXRUYWcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlz
Q2VsbCgpKSkgeworICAgICAgICB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3Jl
YXRlTm90QW5PYmplY3RFcnJvcihnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSkpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgYXV0byogdGFnID0ganNEeW5hbWljQ2FzdDxKU1dl
YkFzc2VtYmx5VGFnKj4odm0sIHRoaXNWYWx1ZS5hc0NlbGwoKSk7CisgICAgaWYgKExJS0VMWSh0
YWcpKQorICAgICAgICByZXR1cm4gdGFnOworICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWcgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tVGFnIG9i
amVjdCJfcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTih3ZWJBc3NlbWJseVRhZ1Byb3RvRnVuY1R5cGUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgSlNXZWJBc3NlbWJseVRhZyoganNUYWcgPSBnZXRUYWcoZ2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworCisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcgPSBqc1Rh
Zy0+dGFnKCk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdGFnLnBhcmFtZXRlckNvdW50KCk7ICsraSkKKyAgICAgICAgYXJn
TGlzdC5hcHBlbmQoV2FzbTo6dHlwZVRvU3RyaW5nKHZtLCB0YWcucGFyYW1ldGVyKGkpLmtpbmQp
KTsKKworICAgIGlmIChVTkxJS0VMWShhcmdMaXN0Lmhhc092ZXJmbG93ZWQoKSkpIHsKKyAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAg
ICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAgIEpTQXJyYXkqIHBhcmFt
ZXRlcnMgPSBjb25zdHJ1Y3RBcnJheShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEFycmF5QWxs
b2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgYXJnTGlzdCk7CisgICAgSlNPYmplY3QqIHR5cGUg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0
UHJvdG90eXBlKCksIDEpOworICAgIHR5cGUtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInBhcmFtZXRlcnMiKSwgcGFyYW1ldGVycyk7CisKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodHlwZSkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmYyNDMyZjljODliZGNkYTdkYzdiOTQxODQ3NjJiMjUyNmI1OWJiNmMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVRhZ1Byb3RvdHlwZS5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hB
UkFCTEUoV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2U7CisgICAgfQorCisgICAgc3RhdGljIFdlYkFzc2VtYmx5VGFnUHJv
dG90eXBlKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgV2ViQXNzZW1ibHlU
YWdQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20uanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20uanNvbgppbmRleCA0ZjhkZDllM2QyMTM0
MzUwMDAwMDZlMjQxNDZiMDE5NGM5YWM4OGYxLi5hNDM1MTBmNGY4NDczMDM4NjQzYzE2NWMzYzMw
ODE0OGYwNzUwNGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNt
Lmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCkBAIC0yMywz
NCArMjMsMzggQEAKICAgICAiYmxvY2tfdHlwZSI6IFsiaTMyIiwgImk2NCIsICJmMzIiLCAiZjY0
IiwgInZvaWQiLCAiZXh0ZXJucmVmIiwgImZ1bmNyZWYiXSwKICAgICAicmVmX3R5cGUiOiBbImZ1
bmNyZWYiLCAiZXh0ZXJucmVmIiwgInR5cGVfaWR4Il0sCiAgICAgImV4dGVybmFsX2tpbmQiOiB7
Ci0gICAgICAgICJGdW5jdGlvbiI6IHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAwIH0sCi0g
ICAgICAgICJUYWJsZSI6ICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAxIH0sCi0gICAg
ICAgICJNZW1vcnkiOiAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAyIH0sCi0gICAgICAg
ICJHbG9iYWwiOiAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAzIH0KKyAgICAgICAgIkZ1
bmN0aW9uIjogICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDAgfSwKKyAgICAgICAgIlRh
YmxlIjogICAgICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDEgfSwKKyAgICAgICAgIk1l
bW9yeSI6ICAgICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDIgfSwKKyAgICAgICAgIkds
b2JhbCI6ICAgICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDMgfSwKKyAgICAgICAgIkV4
Y2VwdGlvbiI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6IDQgfQogICAgIH0sCiAgICAg
InNlY3Rpb24iIDogewotICAgICAgICAiVHlwZSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3Iiwg
InZhbHVlIjogIDEsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBzaWduYXR1cmUgZGVjbGFyYXRp
b25zIiB9LAotICAgICAgICAiSW1wb3J0IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogIDIsICJkZXNjcmlwdGlvbiI6ICJJbXBvcnQgZGVjbGFyYXRpb25zIiB9LAotICAgICAgICAi
RnVuY3Rpb24iOiB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDMsICJkZXNjcmlwdGlv
biI6ICJGdW5jdGlvbiBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJUYWJsZSI6ICAgIHsgInR5
cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNCwgImRlc2NyaXB0aW9uIjogIkluZGlyZWN0IGZ1
bmN0aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMiIH0sCi0gICAgICAgICJNZW1vcnkiOiAgIHsg
InR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNSwgImRlc2NyaXB0aW9uIjogIk1lbW9yeSBh
dHRyaWJ1dGVzIiB9LAotICAgICAgICAiR2xvYmFsIjogICB7ICJ0eXBlIjogInZhcnVpbnQ3Iiwg
InZhbHVlIjogIDYsICJkZXNjcmlwdGlvbiI6ICJHbG9iYWwgZGVjbGFyYXRpb25zIiB9LAotICAg
ICAgICAiRXhwb3J0IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDcsICJkZXNj
cmlwdGlvbiI6ICJFeHBvcnRzIiB9LAotICAgICAgICAiU3RhcnQiOiAgICB7ICJ0eXBlIjogInZh
cnVpbnQ3IiwgInZhbHVlIjogIDgsICJkZXNjcmlwdGlvbiI6ICJTdGFydCBmdW5jdGlvbiBkZWNs
YXJhdGlvbiIgfSwKLSAgICAgICAgIkVsZW1lbnQiOiAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2
YWx1ZSI6ICA5LCAiZGVzY3JpcHRpb24iOiAiRWxlbWVudHMgc2VjdGlvbiIgfSwKLSAgICAgICAg
IkNvZGUiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEwLCAiZGVzY3JpcHRp
b24iOiAiRnVuY3Rpb24gYm9kaWVzIChjb2RlKSIgfSwKLSAgICAgICAgIkRhdGEiOiAgICAgeyAi
dHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDExLCAiZGVzY3JpcHRpb24iOiAiRGF0YSBzZWdt
ZW50cyIgfQorICAgICAgICAiVHlwZSI6ICAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1
ZSI6ICAxLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0aW9ucyIg
fSwKKyAgICAgICAgIkltcG9ydCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAg
MiwgImRlc2NyaXB0aW9uIjogIkltcG9ydCBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJGdW5j
dGlvbiI6ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDMsICJkZXNjcmlwdGlvbiI6
ICJGdW5jdGlvbiBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJUYWJsZSI6ICAgICB7ICJ0eXBl
IjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDQsICJkZXNjcmlwdGlvbiI6ICJJbmRpcmVjdCBmdW5j
dGlvbiB0YWJsZSBhbmQgb3RoZXIgdGFibGVzIiB9LAorICAgICAgICAiTWVtb3J5IjogICAgeyAi
dHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA1LCAiZGVzY3JpcHRpb24iOiAiTWVtb3J5IGF0
dHJpYnV0ZXMiIH0sCisgICAgICAgICJHbG9iYWwiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3Iiwg
InZhbHVlIjogIDYsICJkZXNjcmlwdGlvbiI6ICJHbG9iYWwgZGVjbGFyYXRpb25zIiB9LAorICAg
ICAgICAiRXhwb3J0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA3LCAiZGVz
Y3JpcHRpb24iOiAiRXhwb3J0cyIgfSwKKyAgICAgICAgIlN0YXJ0IjogICAgIHsgInR5cGUiOiAi
dmFydWludDciLCAidmFsdWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IGZ1bmN0aW9uIGRl
Y2xhcmF0aW9uIiB9LAorICAgICAgICAiRWxlbWVudCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIs
ICJ2YWx1ZSI6ICA5LCAiZGVzY3JpcHRpb24iOiAiRWxlbWVudHMgc2VjdGlvbiIgfSwKKyAgICAg
ICAgIkNvZGUiOiAgICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMCwgImRlc2Ny
aXB0aW9uIjogIkZ1bmN0aW9uIGJvZGllcyAoY29kZSkiIH0sCisgICAgICAgICJEYXRhIjogICAg
ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlwdGlvbiI6ICJEYXRh
IHNlZ21lbnRzIiB9LAorICAgICAgICAiRGF0YUNvdW50IjogeyAidHlwZSI6ICJ2YXJ1aW50NyIs
ICJ2YWx1ZSI6IDEyLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIGRhdGEgc2VnbWVudHMiIH0s
CisgICAgICAgICJFeGNlcHRpb24iOiB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTMs
ICJkZXNjcmlwdGlvbiI6ICJFeGNlcHRpb24gZGVjbGFyYXRpb25zIiB9CiAgICAgfSwKICAgICAi
b3Bjb2RlIjogewogICAgICAgICAidW5yZWFjaGFibGUiOiAgICAgICAgIHsgImNhdGVnb3J5Ijog
ImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDAsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogInRyYXAgaW1tZWRpYXRlbHkiIH0sCisgICAgICAgICJub3AiOiAgICAgICAg
ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMSwgInJldHVy
biI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibm8gb3BlcmF0aW9uIiB9LAogICAg
ICAgICAiYmxvY2siOiAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAi
dmFsdWUiOiAgIDIsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAg
InBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6
IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJl
Z2luIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnMsIHlpZWxkaW5nIDAgb3IgMSB2YWx1ZXMiIH0s
CiAgICAgICAgICJsb29wIjogICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIs
ICAgICJ2YWx1ZSI6ICAgMywgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAg
ICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRp
YXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiYmVnaW4gYSBibG9jayB3aGljaCBjYW4gYWxzbyBmb3JtIGNvbnRyb2wgZmxvdyBsb29wcyIg
fSwKICAgICAgICAgImlmIjogICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9s
IiwgICAgInZhbHVlIjogICA0LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAg
ICAgICAgICJwYXJhbWV0ZXIiOiBbImJvb2wiXSwgICAgICAgICAgICAgICAgICAgICAgICJpbW1l
ZGlhdGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJiZWdpbiBpZiBleHByZXNzaW9uIiB9LAogICAgICAgICAiZWxzZSI6ICAgICAgICAgICAg
ICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDUsICJyZXR1cm4iOiBb
ImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGVsc2UgZXhwcmVzc2lvbiBvZiBp
ZiIgfSwKLSAgICAgICAgInNlbGVjdCI6ICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250
cm9sIiwgICAgInZhbHVlIjogIDI3LCAicmV0dXJuIjogWyJwcmV2Il0sICAgICAgICAgICAgICAg
ICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wiXSwgICAgICAgICJp
bW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJzZWxlY3Qgb25lIG9mIHR3byB2YWx1ZXMgYmFzZWQgb24gY29uZGl0aW9uIiB9LAot
ICAgICAgICAiYW5ub3RhdGVkX3NlbGVjdCI6ICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAg
ICAidmFsdWUiOiAgMjgsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAgImltbWVkaWF0
ZSI6IFt7Im5hbWUiOiAidGFyZ2V0X3R5cGVzX2NvdW50IiwgInR5cGUiOiAidmFydWludDMyIiwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
Im51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YXJnZXQgdHlwZXMgdmVjdG9yIn0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsi
bmFtZSI6ICJ0YXJnZXRfdHlwZXMiLCAgICAgICAidHlwZSI6ICJ2YWx1ZV90eXBlKiIsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGFyZ2V0
IHR5cGVzIHRoYXQgaW5kaWNhdGUgcmVzdWx0IG9mIHNlbGVjdCBpbnN0cnVjdGlvbiJ9XSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0
aGUgc2FtZSBhcyBqdXN0IHNlbGVjdCBidXQgd2l0aCB0aGUgYW5ub3RhdGlvbiBmb3IgcmVzdWx0
IHR5cGVzIiB9LAorICAgICAgICAidHJ5IjogICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5Ijog
ImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDYsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAg
ICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogImJlZ2luIHRyeSBleHByZXNzaW9uIiB9LAorICAgICAgICAiY2F0Y2giOiAg
ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDcsICJy
ZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZXhu
IiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGNhdGNoIGV4cHJl
c3Npb24gb2YgdHJ5IiB9LAorICAgICAgICAidGhyb3ciOiAgICAgICAgICAgICAgIHsgImNhdGVn
b3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDgsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwg
ICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZXhuIiwgInR5cGUiOiAidmFydWludDMy
In1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogInRocm93IGV4Y2VwdGlvbiIgfSwKKyAgICAgICAgInJldGhyb3ci
OiAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA5LCAi
cmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJl
bGF0aXZlX2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJyZXRocm93IHRoZSBleGNl
cHRpb24gYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2siIH0sCiAgICAgICAgICJiciI6ICAgICAgICAg
ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMiwgInJldHVy
biI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2
ZV9kZXB0aCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYnJlYWsgdGhhdCB0YXJnZXRzIGFu
IG91dGVyIG5lc3RlZCBibG9jayIgfSwKICAgICAgICAgImJyX2lmIjogICAgICAgICAgICAgICB7
ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDEzLCAicmV0dXJuIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2RlcHRoIiwg
InR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJjb25kaXRpb25hbCBicmVhayB0aGF0IHRhcmdldHMg
YW4gb3V0ZXIgbmVzdGVkIGJsb2NrIiB9LAogICAgICAgICAiYnJfdGFibGUiOiAgICAgICAgICAg
IHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTQsICJyZXR1cm4iOiBbXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidGFyZ2V0X2NvdW50Iiwg
ICAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIm51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YXJn
ZXRfdGFibGUifSwKQEAgLTU4LDggKzYyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsibmFtZSI6ICJkZWZhdWx0X3Rh
cmdldCIsICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYW4gb3V0ZXIgYmxvY2sgb3IgbG9vcCB0
byB3aGljaCB0byBicmVhayBpbiB0aGUgZGVmYXVsdCBjYXNlIn1dLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJyYW5jaCB0YWJsZSBj
b250cm9sIGZsb3cgY29uc3RydWN0IiB9LAogICAgICAgICAicmV0dXJuIjogICAgICAgICAgICAg
IHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTUsICJyZXR1cm4iOiBbXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInJldHVybiB6ZXJvIG9yIG9uZSB2YWx1ZSBmcm9t
IHRoaXMgZnVuY3Rpb24iIH0sCisgICAgICAgICJkZWxlZ2F0ZSI6ICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNCwgInJldHVybiI6IFsiY29udHJvbCJd
LCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2ZV9kZXB0aCIsICJ0eXBl
IjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiZGVsZWdhdGUgdG8gYSBwYXJlbnQgdHJ5IGJsb2NrIiB9LAor
ICAgICAgICAiY2F0Y2hfYWxsIjogICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAg
ICAidmFsdWUiOiAgMjUsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAg
ICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0
ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
ImNhdGNoIGV4Y2VwdGlvbnMgcmVnYXJkbGVzcyBvZiB0YWciIH0sCiAgICAgICAgICJkcm9wIjog
ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNiwg
InJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjog
WyJhbnkiXSwgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiaWdub3JlIHZhbHVlIiB9
LAotICAgICAgICAibm9wIjogICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wi
LCAgICAidmFsdWUiOiAgIDEsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIm5vIG9wZXJhdGlvbiIgfSwKKyAgICAgICAgInNlbGVjdCI6ICAgICAgICAgICAgICB7ICJj
YXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI3LCAicmV0dXJuIjogWyJwcmV2Il0s
ICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJv
b2wiXSwgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJzZWxlY3Qgb25lIG9mIHR3byB2YWx1ZXMgYmFzZWQgb24g
Y29uZGl0aW9uIiB9LAorICAgICAgICAiYW5ub3RhdGVkX3NlbGVjdCI6ICAgIHsgImNhdGVnb3J5
IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjgsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAg
ICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidGFyZ2V0X3R5cGVzX2NvdW50IiwgInR5cGUi
OiAidmFydWludDMyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIm51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YXJnZXQgdHlwZXMgdmVj
dG9yIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsibmFtZSI6ICJ0YXJnZXRfdHlwZXMiLCAgICAgICAidHlwZSI6ICJ2YWx1
ZV90eXBlKiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAidGFyZ2V0IHR5cGVzIHRoYXQgaW5kaWNhdGUgcmVzdWx0IG9mIHNlbGVjdCBpbnN0
cnVjdGlvbiJ9XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJ0aGUgc2FtZSBhcyBqdXN0IHNlbGVjdCBidXQgd2l0aCB0aGUgYW5ub3Rh
dGlvbiBmb3IgcmVzdWx0IHR5cGVzIiB9LAogICAgICAgICAiZW5kIjogICAgICAgICAgICAgICAg
IHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTEsICJyZXR1cm4iOiBbXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImVuZCBhIGJsb2NrLCBsb29wLCBvciBpZiIgfSwK
ICAgICAgICAgImkzMi5jb25zdCI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJzcGVjaWFsIiwg
ICAgInZhbHVlIjogIDY1LCAicmV0dXJuIjogWyJpMzIiXSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlh
dGUiOiBbeyJuYW1lIjogInZhbHVlIiwgICAgICAgICAgInR5cGUiOiAidmFyaW50MzIifV0sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJhIGNvbnN0YW50IHZhbHVlIGludGVycHJldGVkIGFzIGkzMiIgfSwKICAgICAgICAgImk2NC5j
b25zdCI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJzcGVjaWFsIiwgICAgInZhbHVlIjogIDY2
LCAicmV0dXJuIjogWyJpNjQiXSwgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIi
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjog
InZhbHVlIiwgICAgICAgICAgInR5cGUiOiAidmFyaW50NjQifV0sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhIGNvbnN0YW50IHZh
bHVlIGludGVycHJldGVkIGFzIGk2NCIgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhOTQ1YTBkYTMzYjgzZjZiYWYzNmNjZTcwN2Q3YzA3MWE0
OTFhOTcwLi5hMmZmZjFiN2RjZDRlMDBjYzgxZGRkMzVmZWMwYTlmNzM5YTdiZDM0IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMjEtMTAtMDUgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgSW1wbGVtZW50IHRoZSBXZWJBc3NlbWJseSBleGNlcHRpb24gaGFuZGxpbmcgcHJvcG9z
YWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTY4
MQorICAgICAgICA8cmRhcjovLzgxNjAzMzg3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwog
MjAyMS0xMC0wNiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAg
SW1wbGVtZW50IGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9wdXNoLWFwaS8jcmVjZWl2aW5nLWEtcHVz
aC1tZXNzYWdlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3Rz
IGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwppbmRleCBlMDgxNmRjMDU2MWIx
ODBhOWVmYjY2NzhkYjgyY2M2NDZlMTliNDgxLi5kZGY5NDdkZWI3NzIzODJiMjg5NjA5N2RhNjRj
MTNiODBjYTJhZjE4IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRl
c3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKQEAgLTEyMjcsMTYg
KzEyMjcsMjEgQEAgZGVmIHJ1bldlYkFzc2VtYmx5U3VpdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykKICAgICBtb2R1bGVzID0gRGlyW1dBU01URVNUU19QQVRIICsgIiouanMiXS5tYXAg
eyB8ZnwgRmlsZS5iYXNlbmFtZShmKSB9CiAgICAgcHJlcGFyZUV4dHJhQWJzb2x1dGVGaWxlcyhX
QVNNVEVTVFNfUEFUSCwgWyJ3YXNtLmpzb24iXSkKICAgICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZp
bGVzKG1vZHVsZXMubWFwIHsgfGZ8ICIuLi8iICsgZiB9LCAkY29sbGVjdGlvbikKLSAgICBydW4o
ImRlZmF1bHQtd2FzbSIsICItbSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQorICAgIGlmIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9uc1swXSA9PSA6bm9f
bW9kdWxlCisgICAgICBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMuc2hpZnQKKyAgICBlbHNl
CisgICAgICBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMudW5zaGlmdCAiLW0iCisgICAgZW5k
CisgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKSkKICAgICBpZiAkbW9kZSAhPSAicXVpY2siCi0gICAgICAgIHJ1bigid2Fz
bS1uby1jaml0LXllcy10bHMtY29udGV4dCIsICItbSIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29u
dGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigid2FzbS1lYWdlciIsICItbSIsICooRlRM
X09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkK
LSAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi1tIiwgIi0tZm9yY2VDb2RlQmxv
Y2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJs
ZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICItLXZlcmlmeUdDPXRydWUiLCAqKEZUTF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLW5vLXRs
cy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKihG
VExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigi
d2FzbS1zbG93LW1lbW9yeSIsICItbSIsICItLXVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxz
ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAg
ICBydW4oIndhc20tYjMiLCAiLW0iLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJR
VXNlc0Fpcj1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
bnMpKQotICAgICAgICBydW4oIndhc20tYWlyIiwgIi1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNl
IiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihG
VExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigi
d2FzbS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsICItbSIsICItLWNvbGxlY3RDb250aW51b3VzbHk9
dHJ1ZSIsICItLXZlcmlmeUdDPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKSkgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KKyAgICAgICAgcnVu
KCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250
ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyIiwgKihGVExfT1BUSU9O
UyArIEVBR0VSX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAg
ICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25E
dWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2Nh
dGlvbj10cnVlIiwgIi0tdmVyaWZ5R0M9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tbm8tdGxzLWNvbnRleHQiLCAi
LS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLXNsb3ctbWVtb3J5Iiwg
Ii0tdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1iMyIsICItLXVzZVdh
c21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKihGVExfT1BUSU9OUyAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1haXIiLCAi
LS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRB
bGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5IiwgIi0tY29sbGVj
dENvbnRpbnVvdXNseT10cnVlIiwgIi0tdmVyaWZ5R0M9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKSBpZiBzaG91bGRDb2xsZWN0Q29udGludW91c2x5
PwogICAgIGVuZAogZW5kCiAKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggY2QyN2QzZmFlZGE2OWNkOTRlMzFjYmYwYTgzMTE3NzMyZjk4OGVh
ZS4uOTc0NjkxMDBmMzNlMjEzMGEyODI4YTA1YzYzZmI4OGNmZWIxM2Q2ZiAxMDA2NDQKLS0tIGEv
SlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMzYg
QEAKKzIwMjEtMTAtMDUgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgSW1wbGVtZW50IHRoZSBXZWJBc3NlbWJseSBleGNlcHRpb24gaGFuZGxpbmcgcHJvcG9z
YWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTY4
MQorICAgICAgICA8cmRhcjovLzgxNjAzMzg3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBuZXcgdGVzdHMgZm9yIHRoZSBleGNlcHRpb24gaGFu
ZGxpbmcgYW5kIGltcG9ydCBhIHNldCBvZiB0ZXN0cyB1c2VkIGJ5IFY4IGludG8gd2FzbS92OC4K
KworICAgICAgICAqIHdhc20ueWFtbDoKKyAgICAgICAgKiB3YXNtL0J1aWxkZXIuanM6CisgICAg
ICAgIChjb25zdC5faW1wb3J0RXhjZXB0aW9uQ29udGludWF0aW9uLnR5cGUuSW1wb3J0LmZpZWxk
KToKKyAgICAgICAgKGV4cG9ydC5kZWZhdWx0LkJ1aWxkZXIucHJvdG90eXBlLl9yZWdpc3RlclNl
Y3Rpb25CdWlsZGVycy5jb25zdC5zZWN0aW9uLmluLldBU00uZGVzY3JpcHRpb24uc2VjdGlvbi5z
d2l0Y2guc2VjdGlvbi5jYXNlLnN0cmluZ19hcHBlYXJlZF9oZXJlLnRoaXMuc2VjdGlvbik6Cisg
ICAgICAgIChjb25zdC5fZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24udHlwZS5FeHBvcnQuZmll
bGQpOiBEZWxldGVkLgorICAgICAgICAoY29uc3QuX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanM6
CisgICAgICAgIChjb25zdC5lbWl0dGVycy5JbXBvcnQpOgorICAgICAgICAoY29uc3QuZW1pdHRl
cnMuRXhwb3J0KToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkV4Y2VwdGlvbik6CisgICAgICAg
ICogd2FzbS9hc3NlcnQuanM6CisgICAgICAgICogd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVy
SlNPTi5qczoKKyAgICAgICAgKEltcG9ydEJlZm9yZVR5cGVTZWN0aW9ucyk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9zdHJlc3MvY2F0Y2gtd2l0aC1kZWxlZ2F0ZS5qczogQWRkZWQuCisgICAg
ICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5h
c3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5jYWxsYmFjayk6CisgICAgICAgIChhc3Nl
cnQudGhyb3dzKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9jcmVhdGUtdGFnLWZyb20uanM6IEFk
ZGVkLgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0yLmpz
OiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAgICAgICAoYXNzZXJ0LmVxKToKKyAgICAgICAg
KiB3YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UtMy5qczogQWRkZWQuCisgICAg
ICAgICh0ZXN0KToKKyAgICAgICAgKGFzc2VydC5lcSk6CisgICAgICAgICogd2FzbS9zdHJlc3Mv
ZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAg
ICAgICAoYXNzZXJ0LnRocm93cyk6CisgICAgICAgIChpbnN0Qi5uZXcuV2ViQXNzZW1ibHkuSW5z
dGFuY2UpOgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi1saXZlbmVzcy10aWVyLXVw
LmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVk
X2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNhdGNoKToK
KyAgICAgICAgKGFzc2VydC5lcS4pOgorICAgICAgICAoYXNzZXJ0LmVxKToKKyAgICAgICAgKiB3
YXNtL3N0cmVzcy9leGNlcHRpb24tbXVsdGlwbGUtaW5zdGFuY2VzLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFz
c2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNvbnN0Lm1vZHVsZS5uZXcuV2ViQXNzZW1i
bHkuTW9kdWxlKToKKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVk
X2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmluc3QuZXhw
b3J0cy50aHJvdyk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXNpbXBsZS1kZWxl
Z2F0ZS5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBl
YXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS50ZXN0
U2ltcGxlVGhyb3dEZWxlZ2F0ZSk6CisgICAgICAgICh0ZXN0VGhyb3dEZWxlZ2F0ZVNraXApOgor
ICAgICAgICAodGVzdERlbGVnYXRlQ2FsbGVyKToKKyAgICAgICAgKHRlc3RTaW1wbGVEZWxlZ2F0
ZU1lcmdlKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLXRocm93LWNh
dGNoLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVh
cmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLnRlc3RT
aW1wbGVUcnlDYXRjaCk6CisgICAgICAgICh0ZXN0U2ltcGxlVHJ5Q2F0Y2hBbGwpOgorICAgICAg
ICAodGVzdENhbGxUcnlDYXRjaCk6CisgICAgICAgICh0ZXN0Q2FsbFRyeUNhdGNoQWxsKToKKyAg
ICAgICAgKHRlc3RTaW1wbGVUcnlDYXRjaFZhbHVlKToKKyAgICAgICAgKHRlc3RDYWxsVHJ5Q2F0
Y2hWYWx1ZSk6CisgICAgICAgICh0ZXN0U3RhY2tUcnlDYXRjaCk6CisgICAgICAgICh0ZXN0TGl2
ZUFmdGVyVHJ5Q2F0Y2gpOgorICAgICAgICAodGVzdExpdmVBZnRlclRyeUNhdGNoQWxsKToKKyAg
ICAgICAgKHRlc3RVbmlmeVRyeUNhdGNoQ2F0Y2gpOgorICAgICAgICAodGVzdFVuaWZ5VHJ5Q2F0
Y2hDYXRjaEFsbCk6CisgICAgICAgICh0ZXN0VW5pZnlUcnlOb1Rocm93KToKKyAgICAgICAgKHRl
c3RVbmlmeVRyeU5vQ2F0Y2gpOgorICAgICAgICAodGVzdE5lc3RlZENhdGNoKToKKyAgICAgICAg
KiB3YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS1jYXRjaGFsbC1y
ZXRocm93LmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2Fw
cGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNh
bGxiYWNrKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMt
dG8td2FzbS1jYXRjaGFsbC5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9t
LnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFy
ZWRfaGVyZS5jYWxsYmFjayk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93
bi1mcm9tLWpzLXRvLXdhc20uanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJv
bS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVh
cmVkX2hlcmUuY2FsbGJhY2spOgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJv
d24tb3V0LW9mLXdhc20uanM6IEFkZGVkLgorICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlv
bi10aHJvd24tb3Zlci13YXNtLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZy
b20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBl
YXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRpb24tdHJh
cC5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJl
ZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS50ZXN0Q2Fu
bm90Q2F0Y2hVbnJlYWNoYWJsZSk6CisgICAgICAgICh0ZXN0Q2Fubm90Q2F0Y2hPT0IpOgorICAg
ICAgICAodGVzdFdhc21BUElUaHJvdyk6CisgICAgICAgICh0ZXN0SlNDYXRjaEFuZFJldGhyb3cp
OgorICAgICAgICAqIHdhc20vc3RyZXNzL3JldGhyb3ctZnJvbS1jYXRjaC10by1jYXRjaC5qczog
QWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJl
LmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5jYWxsYmFjayk6Cisg
ICAgICAgICogd2FzbS9zdHJlc3MvcmV0aHJvdy10by1jYXRjaC5qczogQWRkZWQuCisgICAgICAg
IChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3Nl
cnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5jYWxsYmFjayk6CisgICAgICAgIChhc3NlcnQu
dGhyb3dzLmNhbGxiYWNrKToKKyAgICAgICAgKGFzc2VydC50aHJvd3MpOgorICAgICAgICAqIHdh
c20vc3RyZXNzL3JldGhyb3ctdG8tZGVsZWdhdGUtdG8tY2F0Y2guanM6IEFkZGVkLgorICAgICAg
ICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNz
ZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUpOgorICAgICAgICAoYXNzZXJ0LmVxLmV4bi5n
ZXRBcmcpOgorICAgICAgICAoYXNzZXJ0LnRocm93cyk6CisgICAgICAgIChhc3NlcnQudGhyb3dz
LmNhbGxiYWNrKToKKyAgICAgICAgKGFzc2VydC5lcSk6CisgICAgICAgICogd2FzbS9zdHJlc3Mv
c2ltcGxlLWV4cG9ydC1leGNlcHRpb24uanM6IEFkZGVkLgorICAgICAgICAqIHdhc20vdjgvTElD
RU5TRTogQWRkZWQuCisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLWFwaS5qczogQWRkZWQu
CisgICAgICAgIChUZXN0SW1wb3J0KToKKyAgICAgICAgKFRlc3RJbXBvcnRFeHBvcnQpOgorICAg
ICAgICAoVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFRlc3RFeGNlcHRpb25D
b25zdHJ1Y3RvcldpdGhQYXlsb2FkKToKKyAgICAgICAgKFRlc3RDYXRjaEpTRXhjZXB0aW9uLmpz
X2Z1bmMpOgorICAgICAgICAoanNfZnVuYyk6CisgICAgICAgIChUZXN0Q2F0Y2hKUyk6CisgICAg
ICAgIChUZXN0Q2F0Y2hKU0V4Y2VwdGlvbldpdGhQYXlsb2FkKToKKyAgICAgICAgKFRlc3RHZXRB
cmcpOgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy1leHBvcnQuanM6IEFkZGVkLgorICAg
ICAgICAoVGVzdEV4cG9ydE11bHRpcGxlKToKKyAgICAgICAgKFRlc3RFeHBvcnRPdXRPZkJvdW5k
cyk6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLWV4dGVybnJlZi5qczogQWRkZWQuCisg
ICAgICAgIChUZXN0VGhyb3dSZWZOdWxsKToKKyAgICAgICAgKFRlc3RUaHJvd1JlZlBhcmFtKToK
KyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMtaW1wb3J0LmpzOiBBZGRlZC4KKyAgICAgICAg
KE5ld0V4cG9ydGVkVGFnKToKKyAgICAgICAgKFRlc3RJbXBvcnRTaW1wbGUpOgorICAgICAgICAo
VGVzdEltcG9ydE1pc3NpbmcpOgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy1yZXRocm93
LmpzOiBBZGRlZC4KKyAgICAgICAgKFRlc3RSZXRocm93SW5DYXRjaCk6CisgICAgICAgIChUZXN0
UmV0aHJvd0luQ2F0Y2hBbGwpOgorICAgICAgICAoVGVzdFJldGhyb3dOZXN0ZWQpOgorICAgICAg
ICAoVGVzdFJldGhyb3dSZWNhdGNoKToKKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMtc2hh
cmVkLmpzOiBBZGRlZC4KKyAgICAgICAgKE5ld0V4cG9ydGVkRXhjZXB0aW9uKToKKyAgICAgICAg
KFRlc3RTaW5nbGVJbnN0YW5jZS5sZXQuaW5zdGFuY2UuYnVpbGRlci5pbnN0YW50aWF0ZS4pOgor
ICAgICAgICAoVGVzdFNpbmdsZUluc3RhbmNlKToKKyAgICAgICAgKFRlc3RNdWx0aUluc3RhbmNl
Tm9uU2hhcmVkLmxldC5pbnN0YW5jZTIuYnVpbGRlci5pbnN0YW50aWF0ZS4pOgorICAgICAgICAo
VGVzdE11bHRpSW5zdGFuY2VTaGFyZWQubGV0Lmluc3RhbmNlMi5idWlsZGVyLmluc3RhbnRpYXRl
Lik6CisgICAgICAgIChUZXN0TXVsdGlNb2R1bGVTaGFyZWQubGV0Lmluc3RhbmNlMi5idWlsZGVy
Mi5pbnN0YW50aWF0ZS4pOgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy10eXBlLXJlZmxl
Y3Rpb24uanM6IEFkZGVkLgorICAgICAgICAoVGVzdEV4cG9ydCk6CisgICAgICAgIChUZXN0SW1w
b3J0RXhwb3J0KToKKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMtdXRpbHMuanM6IEFkZGVk
LgorICAgICAgICAoYXNzZXJ0V2FzbVRocm93cyk6CisgICAgICAgICogd2FzbS92OC9leGNlcHRp
b25zLmpzOiBBZGRlZC4KKyAgICAgICAgKFRlc3RUaHJvd1NpbXBsZSk6CisgICAgICAgIChUZXN0
Q2F0Y2hTaW1wbGUpOgorICAgICAgICAoVGVzdFRyYXBOb3RDYXVnaHQpOgorICAgICAgICAoVGVz
dFRyYXBWaWFKU05vdENhdWdodC5qc19pbXBvcnQpOgorICAgICAgICAoVGVzdE1hbnVhbGx5VGhy
b3duUnVudGltZUVycm9yQ2F1Z2h0LnRocm93X2V4Yyk6CisgICAgICAgIChUZXN0TWFudWFsbHlU
aHJvd25SdW50aW1lRXJyb3JDYXVnaHQpOgorICAgICAgICAoVGVzdEV4bldpdGhXYXNtUHJvdG9O
b3RDYXVnaHQuanNfaW1wb3J0KToKKyAgICAgICAgKFRlc3RFeG5XaXRoV2FzbVByb3RvTm90Q2F1
Z2h0KToKKyAgICAgICAgKFRlc3RTdGFja092ZXJmbG93Tm90Q2F1Z2h0LnN0YWNrX292ZXJmbG93
KToKKyAgICAgICAgKFRlc3RTdGFja092ZXJmbG93Tm90Q2F1Z2h0KToKKyAgICAgICAgKFRlc3RU
aHJvd1BhcmFtSSk6CisgICAgICAgIChUZXN0VGhyb3dQYXJhbUYpOgorICAgICAgICAoVGVzdFRo
cm93UGFyYW1MKToKKyAgICAgICAgKFRlc3RUaHJvd1BhcmFtRCk6CisgICAgICAgIChUZXN0Q2F0
Y2hDcm9zc0Z1bmN0aW9ucy50aHJvd192YWx1ZSk6CisgICAgICAgIChUZXN0Q2F0Y2hDcm9zc0Z1
bmN0aW9ucy50aHJvd19zdHJpbmcpOgorICAgICAgICAoVGVzdENhdGNoQ3Jvc3NGdW5jdGlvbnMu
dGhyb3dfdW5kZWZpbmVkKToKKyAgICAgICAgKFRlc3RDYXRjaENyb3NzRnVuY3Rpb25zLnRocm93
X2ZwKToKKyAgICAgICAgKFRlc3RDYXRjaENyb3NzRnVuY3Rpb25zLnRocm93X2xhcmdlKToKKyAg
ICAgICAgKFRlc3REZWxlZ2F0ZU5vVGhyb3cpOgorICAgICAgICAoVGVzdERlbGVnYXRlVGhyb3cp
OgorICAgICAgICAoVGVzdERlbGVnYXRlVGhyb3dOb0NhdGNoKToKKyAgICAgICAgKFRlc3REZWxl
Z2F0ZU1lcmdlKToKKyAgICAgICAgKFRlc3REZWxlZ2F0ZTEpOgorICAgICAgICAoVGVzdERlbGVn
YXRlVW5yZWFjaGFibGUpOgorICAgICAgICAoVGVzdERlbGVnYXRlVG9DYWxsZXIpOgorICAgICAg
ICAoVGVzdFVucmVhY2hhYmxlSW5DYXRjaEFsbCk6CisgICAgICAgIChUZXN0VGhyb3dXaXRoTG9j
YWwpOgorICAgICAgICAoVGVzdENhdGNobGVzc1RyeSk6CisgICAgICAgICogd2FzbS92OC9tanN1
bml0LmpzOiBBZGRlZC4KKyAgICAgICAgKE1qc1VuaXRBc3NlcnRpb25FcnJvcik6CisgICAgICAg
IChNanNVbml0QXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKGNh
dGNoKToKKyAgICAgICAgKGNsYXNzT2YpOgorICAgICAgICAoVmFsdWVPZik6CisgICAgICAgIChw
cmV0dHlQcmludGVkKToKKyAgICAgICAgKHByZXR0eVByaW50ZWRBcnJheUVsZW1lbnQpOgorICAg
ICAgICAoZmFpbFdpdGhNZXNzYWdlKToKKyAgICAgICAgKGZvcm1hdEZhaWx1cmVUZXh0KToKKyAg
ICAgICAgKGZhaWwpOgorICAgICAgICAoZGVlcE9iamVjdEVxdWFscyk6CisgICAgICAgIChkZWVw
RXF1YWxzKToKKyAgICAgICAgKGFzc2VydFNhbWUpOgorICAgICAgICAoYXNzZXJ0Tm90U2FtZSk6
CisgICAgICAgIChhc3NlcnRFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0Tm90RXF1YWxzKToKKyAg
ICAgICAgKGFzc2VydEVxdWFsc0RlbHRhKToKKyAgICAgICAgKGFzc2VydEFycmF5RXF1YWxzKToK
KyAgICAgICAgKGFzc2VydFByb3BlcnRpZXNFcXVhbCk6CisgICAgICAgIChhc3NlcnRUb1N0cmlu
Z0VxdWFscyk6CisgICAgICAgIChhc3NlcnRUcnVlKToKKyAgICAgICAgKGFzc2VydEZhbHNlKToK
KyAgICAgICAgKGFzc2VydE51bGwpOgorICAgICAgICAoYXNzZXJ0Tm90TnVsbCk6CisgICAgICAg
IChleGVjdXRlQ29kZSk6CisgICAgICAgIChjaGVja0V4Y2VwdGlvbik6CisgICAgICAgIChhc3Nl
cnRUaHJvd3MpOgorICAgICAgICAoYXNzZXJ0VGhyb3dzRXF1YWxzKToKKyAgICAgICAgKGFzc2Vy
dFRocm93c0FzeW5jKToKKyAgICAgICAgKGFzc2VydEluc3RhbmNlb2YpOgorICAgICAgICAoYXNz
ZXJ0RG9lc05vdFRocm93KToKKyAgICAgICAgKGFzc2VydFVucmVhY2hhYmxlKToKKyAgICAgICAg
KGFzc2VydENvbnRhaW5zKToKKyAgICAgICAgKGFzc2VydE1hdGNoZXMpOgorICAgICAgICAoY29u
Y2F0ZW5hdGVFcnJvcnMpOgorICAgICAgICAoYXNzZXJ0UHJvbWlzZVJlc3VsdCk6CisgICAgICAg
IChPcHRpbWl6YXRpb25TdGF0dXMpOgorICAgICAgICAoYXNzZXJ0VW5vcHRpbWl6ZWQpOgorICAg
ICAgICAoYXNzZXJ0T3B0aW1pemVkKToKKyAgICAgICAgKGlzTmV2ZXJPcHRpbWl6ZUxpdGVNb2Rl
KToKKyAgICAgICAgKGlzTmV2ZXJPcHRpbWl6ZSk6CisgICAgICAgIChpc0Fsd2F5c09wdGltaXpl
KToKKyAgICAgICAgKGlzSW50ZXJwcmV0ZWQpOgorICAgICAgICAoaXNCYXNlbGluZSk6CisgICAg
ICAgIChpc1Vub3B0aW1pemVkKToKKyAgICAgICAgKGlzT3B0aW1pemVkKToKKyAgICAgICAgKGlz
VHVyYm9GYW5uZWQpOgorICAgICAgICAoTWpzVW5pdEFzc2VydGlvbkVycm9yLnByZXBhcmVTdGFj
a1RyYWNlKToKKyAgICAgICAgKiB3YXNtL3Y4L3dhc20tbW9kdWxlLWJ1aWxkZXIuanM6IEFkZGVk
LgorICAgICAgICAoYnl0ZXMpOgorICAgICAgICAod2FzbU9wdFJlZlR5cGUpOgorICAgICAgICAo
d2FzbVJlZlR5cGUpOgorICAgICAgICAod2FzbVJ0dCk6CisgICAgICAgICh3YXNtUnR0Tm9EZXB0
aCk6CisgICAgICAgIChtYWtlU2lnKToKKyAgICAgICAgKG1ha2VTaWdfdl94KToKKyAgICAgICAg
KG1ha2VTaWdfeF92KToKKyAgICAgICAgKG1ha2VTaWdfdl94eCk6CisgICAgICAgIChtYWtlU2ln
X3Jfdik6CisgICAgICAgIChtYWtlU2lnX3JfeCk6CisgICAgICAgIChtYWtlU2lnX3JfeHgpOgor
ICAgICAgICAoZGVmaW5lV2FzbU9wY29kZSk6CisgICAgICAgIChhc3NlcnRUcmFwcyk6CisgICAg
ICAgIChCaW5hcnkpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbnN1cmVfc3BhY2UpOgor
ICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS50cnVuY19idWZmZXIpOgorICAgICAgICAoQmluYXJ5
LnByb3RvdHlwZS5yZXNldCk6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfdTgpOgor
ICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X3UxNik6CisgICAgICAgIChCaW5hcnkucHJv
dG90eXBlLmVtaXRfdTMyKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF9sZWJfdSk6
CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfdTMydik6CisgICAgICAgIChCaW5hcnku
cHJvdG90eXBlLmVtaXRfdTY0dik6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfYnl0
ZXMpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X3N0cmluZyk6CisgICAgICAgIChC
aW5hcnkucHJvdG90eXBlLmVtaXRfaGVhcF90eXBlKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5
cGUuZW1pdF90eXBlKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF9pbml0X2V4cHJf
cmVjdXJzaXZlKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF9pbml0X2V4cHIpOgor
ICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2hlYWRlcik6CisgICAgICAgIChCaW5hcnku
cHJvdG90eXBlLmVtaXRfc2VjdGlvbik6CisgICAgICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyKToK
KyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLm51bUxvY2FsTmFtZXMpOgor
ICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuZXhwb3J0QXMpOgorICAgICAg
ICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuZXhwb3J0RnVuYyk6CisgICAgICAgIChX
YXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5zZXRDb21waWxhdGlvbkhpbnQpOgorICAgICAg
ICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuYWRkQm9keSk6CisgICAgICAgIChXYXNt
RnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5hZGRCb2R5V2l0aEVuZCk6CisgICAgICAgIChXYXNt
RnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5nZXROdW1Mb2NhbHMpOgorICAgICAgICAoV2FzbUZ1
bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuYWRkTG9jYWxzKToKKyAgICAgICAgKFdhc21GdW5jdGlv
bkJ1aWxkZXIucHJvdG90eXBlLmVuZCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuSTMyQ29uc3Qp
OgorICAgICAgICAoV2FzbUluaXRFeHByLkk2NENvbnN0KToKKyAgICAgICAgKFdhc21Jbml0RXhw
ci5GMzJDb25zdCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuRjY0Q29uc3QpOgorICAgICAgICAo
V2FzbUluaXRFeHByLlMxMjhDb25zdCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuR2xvYmFsR2V0
KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5SZWZGdW5jKToKKyAgICAgICAgKFdhc21Jbml0RXhw
ci5SZWZOdWxsKToKKyAgICAgICAgKFdhc21Jbml0RXhwci5TdHJ1Y3ROZXdXaXRoUnR0KToKKyAg
ICAgICAgKFdhc21Jbml0RXhwci5TdHJ1Y3ROZXcpOgorICAgICAgICAoV2FzbUluaXRFeHByLlN0
cnVjdE5ld0RlZmF1bHRXaXRoUnR0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5TdHJ1Y3ROZXdE
ZWZhdWx0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5BcnJheUluaXQpOgorICAgICAgICAoV2Fz
bUluaXRFeHByLkFycmF5SW5pdFN0YXRpYyk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuUnR0Q2Fu
b24pOgorICAgICAgICAoV2FzbUluaXRFeHByLlJ0dFN1Yik6CisgICAgICAgIChXYXNtSW5pdEV4
cHIuUnR0RnJlc2hTdWIpOgorICAgICAgICAoV2FzbUluaXRFeHByLmRlZmF1bHRGb3IpOgorICAg
ICAgICAoV2FzbUluaXRFeHByKToKKyAgICAgICAgKFdhc21HbG9iYWxCdWlsZGVyKToKKyAgICAg
ICAgKFdhc21HbG9iYWxCdWlsZGVyLnByb3RvdHlwZS5leHBvcnRBcyk6CisgICAgICAgIChXYXNt
VGFibGVCdWlsZGVyKToKKyAgICAgICAgKFdhc21UYWJsZUJ1aWxkZXIucHJvdG90eXBlLmV4cG9y
dEFzKToKKyAgICAgICAgKG1ha2VGaWVsZCk6CisgICAgICAgIChXYXNtU3RydWN0KToKKyAgICAg
ICAgKFdhc21TdHJ1Y3RTdWJ0eXBlKToKKyAgICAgICAgKFdhc21BcnJheSk6CisgICAgICAgIChX
YXNtQXJyYXlTdWJ0eXBlKToKKyAgICAgICAgKFdhc21FbGVtU2VnbWVudCk6CisgICAgICAgIChX
YXNtRWxlbVNlZ21lbnQucHJvdG90eXBlLmlzX2FjdGl2ZSk6CisgICAgICAgIChXYXNtRWxlbVNl
Z21lbnQucHJvdG90eXBlLmlzX3Bhc3NpdmUpOgorICAgICAgICAoV2FzbUVsZW1TZWdtZW50LnBy
b3RvdHlwZS5pc19kZWNsYXJhdGl2ZSk6CisgICAgICAgIChXYXNtRWxlbVNlZ21lbnQucHJvdG90
eXBlLmV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVy
KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRTdGFydCk6CisgICAg
ICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkTWVtb3J5KToKKyAgICAgICAgKFdh
c21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRNZW1vcnk2NCk6CisgICAgICAgIChXYXNtTW9k
dWxlQnVpbGRlci5wcm90b3R5cGUuYWRkRXhwbGljaXRTZWN0aW9uKToKKyAgICAgICAgKFdhc21N
b2R1bGVCdWlsZGVyLnByb3RvdHlwZS5zdHJpbmdUb0J5dGVzKToKKyAgICAgICAgKFdhc21Nb2R1
bGVCdWlsZGVyLnByb3RvdHlwZS5jcmVhdGVDdXN0b21TZWN0aW9uKToKKyAgICAgICAgKFdhc21N
b2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRDdXN0b21TZWN0aW9uKToKKyAgICAgICAgKFdhc21N
b2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRUeXBlKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWls
ZGVyLnByb3RvdHlwZS5hZGRTdHJ1Y3QpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJv
dG90eXBlLmFkZFN0cnVjdFN1YnR5cGUpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJv
dG90eXBlLmFkZEFycmF5KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5h
ZGRBcnJheVN1YnR5cGUpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFk
ZEdsb2JhbCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkVGFibGUp
OgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZFRhZyk6CisgICAgICAg
IChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkRnVuY3Rpb24pOgorICAgICAgICAoV2Fz
bU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEltcG9ydCk6CisgICAgICAgIChXYXNtTW9kdWxl
QnVpbGRlci5wcm90b3R5cGUuYWRkSW1wb3J0ZWRHbG9iYWwpOgorICAgICAgICAoV2FzbU1vZHVs
ZUJ1aWxkZXIucHJvdG90eXBlLmFkZEltcG9ydGVkTWVtb3J5KToKKyAgICAgICAgKFdhc21Nb2R1
bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRJbXBvcnRlZFRhYmxlKToKKyAgICAgICAgKFdhc21Nb2R1
bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRJbXBvcnRlZFRhZyk6CisgICAgICAgIChXYXNtTW9kdWxl
QnVpbGRlci5wcm90b3R5cGUuYWRkRXhwb3J0KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVy
LnByb3RvdHlwZS5hZGRFeHBvcnRPZktpbmQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIu
cHJvdG90eXBlLnNldENvbXBpbGF0aW9uSGludCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRl
ci5wcm90b3R5cGUuYWRkRGF0YVNlZ21lbnQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIu
cHJvdG90eXBlLmFkZFBhc3NpdmVEYXRhU2VnbWVudCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVp
bGRlci5wcm90b3R5cGUuZXhwb3J0TWVtb3J5QXMpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxk
ZXIucHJvdG90eXBlLmFkZEFjdGl2ZUVsZW1lbnRTZWdtZW50KToKKyAgICAgICAgKFdhc21Nb2R1
bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRQYXNzaXZlRWxlbWVudFNlZ21lbnQpOgorICAgICAgICAo
V2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZERlY2xhcmF0aXZlRWxlbWVudFNlZ21lbnQp
OgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFwcGVuZFRvVGFibGUpOgor
ICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLnNldFRhYmxlQm91bmRzKToKKyAg
ICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5zZXROYW1lKToKKyAgICAgICAgKFdh
c21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS50b0J1ZmZlcik6CisgICAgICAgIChXYXNtTW9kdWxl
QnVpbGRlci5wcm90b3R5cGUudG9BcnJheSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5w
cm90b3R5cGUuaW5zdGFudGlhdGUpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90
eXBlLmFzeW5jSW5zdGFudGlhdGUpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90
eXBlLnRvTW9kdWxlKToKKyAgICAgICAgKHdhc21TaWduZWRMZWIpOgorICAgICAgICAod2FzbVVu
c2lnbmVkTGViKToKKyAgICAgICAgKHdhc21JMzJDb25zdCk6CisgICAgICAgICh3YXNtSTY0Q29u
c3QpOgorICAgICAgICAod2FzbUYzMkNvbnN0KToKKyAgICAgICAgKHdhc21GNjRDb25zdCk6Cisg
ICAgICAgICh3YXNtUzEyOENvbnN0KToKKyAgICAgICAgKGdldE9wY29kZU5hbWUpOgorICAgICAg
ICAqIHdhc20vd2FzbS5qc29uOgorCiAyMDIxLTEwLTA1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlA
YXBwbGUuY29tPgogCiAgICAgICAgIERvbid0IHBhc3MgRG9udEJ1aWxkU3RyaW5ncyB0byBuZXh0
IHRva2VuIGFmdGVyIHBhcnNpbmcgYW4gZW1wdHkgcGFyYW1ldGVyIGxpc3QKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvd2FzbS55YW1sIGIvSlNUZXN0cy93YXNtLnlhbWwKaW5kZXggMmVjYjYzNGRiZjVi
MmJlZTcyY2RkMTNjNDAxNzliZjJmNWU5NGJjMS4uMWY0NTFiYzkxMThjY2FjMzM5ODk3MGVhNDli
MjU4OWNhZjMzY2MyNyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtLnlhbWwKKysrIGIvSlNUZXN0
cy93YXNtLnlhbWwKQEAgLTQ1LDYgKzQ1LDggQEAKICAgY21kOiBydW5XZWJBc3NlbWJseSB1bmxl
c3MgcGFyc2VSdW5Db21tYW5kcwogLSBwYXRoOiB3YXNtL3NlbGYtdGVzdC8KICAgY21kOiBydW5X
ZWJBc3NlbWJseVN1aXRlIHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCistIHBhdGg6IHdhc20vdjgv
CisgIGNtZDogcnVuV2ViQXNzZW1ibHlTdWl0ZSg6bm9fbW9kdWxlLCAibWpzdW5pdC5qcyIpIHVu
bGVzcyBwYXJzZVJ1bkNvbW1hbmRzCiAKIC0gcGF0aDogd2FzbS9yZWZlcmVuY2VzLXNwZWMtdGVz
dHMvZWxlbS53YXN0LmpzCiAgIGNtZDogcnVuV2ViQXNzZW1ibHlSZWZlcmVuY2VTcGVjVGVzdCA6
bm9ybWFsCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcyBiL0pTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzCmluZGV4IDMyZmZlNmJiYjU2MWE1MzMzODU3ZWQyMzFiMDQ3YTdmMmFmYmYx
MTUuLjExMDFmNzI1Y2NkZGIwY2MxZTg5YTA1YzdhZGQ3YmI0OWQyZjU5N2MgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCkBA
IC0xMjgsNiArMTI4LDE4IEBAIGNvbnN0IF9pbXBvcnRUYWJsZUNvbnRpbnVhdGlvbiA9IChidWls
ZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewogICAgIH07CiB9OwogCitjb25zdCBfaW1w
b3J0RXhjZXB0aW9uQ29udGludWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVy
KSA9PiB7CisgICAgcmV0dXJuIChtb2R1bGUsIGZpZWxkLCB0eXBlKSA9PiB7CisgICAgICAgIGFz
c2VydC5pc1N0cmluZyhtb2R1bGUsIGBJbXBvcnQgZnVuY3Rpb24gbW9kdWxlIHNob3VsZCBiZSBh
IHN0cmluZywgZ290ICIke21vZHVsZX0iYCk7CisgICAgICAgIGFzc2VydC5pc1N0cmluZyhmaWVs
ZCwgYEltcG9ydCBmdW5jdGlvbiBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtmaWVs
ZH0iYCk7CisgICAgICAgIGNvbnN0IHR5cGVTZWN0aW9uID0gYnVpbGRlci5fZ2V0U2VjdGlvbigi
VHlwZSIpOworICAgICAgICB0eXBlID0gX21heWJlUmVnaXN0ZXJUeXBlKGJ1aWxkZXIsIHR5cGUp
OworICAgICAgICBjb25zdCB0YWcgPSAwOworICAgICAgICBzZWN0aW9uLmRhdGEucHVzaCh7IGZp
ZWxkLCB0eXBlLCB0YWcsIGtpbmQ6ICJFeGNlcHRpb24iLCBtb2R1bGUgfSk7CisgICAgICAgIHJl
dHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKG5leHRCdWlsZGVyKTsKKyAgICB9Cit9OworCiBj
b25zdCBfZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4
dEJ1aWxkZXIpID0+IHsKICAgICByZXR1cm4gKGZpZWxkLCBpbmRleCwgdHlwZSkgPT4gewogICAg
ICAgICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBFeHBvcnQgZnVuY3Rpb24gZmllbGQgc2hvdWxk
IGJlIGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOwpAQCAtMjE1LDYgKzIyNywxNCBAQCBjb25z
dCBfZXhwb3J0VGFibGVDb250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxk
ZXIpID0+IHsKICAgICB9CiB9OwogCitjb25zdCBfZXhwb3J0RXhjZXB0aW9uQ29udGludWF0aW9u
ID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CisgICAgcmV0dXJuIChmaWVs
ZCwgaW5kZXgpID0+IHsKKyAgICAgICAgYXNzZXJ0LmlzTnVtYmVyKGluZGV4LCBgRXhjZXB0aW9u
IGV4cG9ydHMgb25seSBzdXBwb3J0IG51bWJlciBpbmRpY2VzYCk7CisgICAgICAgIHNlY3Rpb24u
ZGF0YS5wdXNoKHtmaWVsZCwga2luZDogIkV4Y2VwdGlvbiIsIGluZGV4fSk7CisgICAgICAgIHJl
dHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKG5leHRCdWlsZGVyKTsKKyAgICB9Cit9OworCiBj
b25zdCBfaW1wb3J0R2xvYmFsQ29udGludWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRC
dWlsZGVyKSA9PiB7CiAgICAgcmV0dXJuICgpID0+IHsKICAgICAgICAgY29uc3QgZ2xvYmFsQnVp
bGRlciA9IHsKQEAgLTMwNyw2ICszMjcsNyBAQCBjb25zdCBfY2hlY2tJbW1zID0gKG9wLCBpbW1z
LCBleHBlY3RlZEltbXMsIHJldCkgPT4gewogICAgICAgICBjYXNlICJ0YXJnZXRfdGFibGUiOiBi
cmVhazsgLy8gaW1wcm92ZSBjaGVja2luZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYzNDIxCiAgICAgICAgIGNhc2UgInJlc2VydmVkIjogYnJlYWs7IC8vIGltcHJv
dmUgY2hlY2tpbmcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzQy
MQogICAgICAgICBjYXNlICJ0YWJsZV9pbmRleCI6IGJyZWFrOyAvLyBpbXByb3ZlIGNoZWNraW5n
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM0MjEKKyAgICAgICAg
Y2FzZSAiZXhuIjogYnJlYWs7CiAgICAgICAgIGNhc2UgInJlZnR5cGUiOgogICAgICAgICAgICAg
YXNzZXJ0LnRydXRoeShXQVNNLmlzVmFsaWRSZWZUeXBlKGltbXNbaWR4XSksIGBJbnZhbGlkIHJl
ZiB0eXBlIG9uICR7b3B9OiAiJHtpbW1zW2lkeF19ImApOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC0zMzUsMTEgKzM1NiwxMyBAQCBjb25zdCBfY3JlYXRlRnVuY3Rpb25CdWlsZGVyID0gKGZ1bmMs
IGJ1aWxkZXIsIHByZXZpb3VzQnVpbGRlcikgPT4gewogICAgICAgICAgICAgICAgIG5leHRCdWls
ZGVyID0gZnVuY3Rpb25CdWlsZGVyOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSAiRW5kIjoKKyAgICAgICAgICAgIGNhc2UgIkRlbGVnYXRlIjoKICAgICAgICAgICAg
ICAgICBuZXh0QnVpbGRlciA9IHByZXZpb3VzQnVpbGRlcjsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgIkJsb2NrIjoKICAgICAgICAgICAgIGNhc2UgIkxvb3AiOgog
ICAgICAgICAgICAgY2FzZSAiSWYiOgorICAgICAgICAgICAgY2FzZSAiVHJ5IjoKICAgICAgICAg
ICAgICAgICBuZXh0QnVpbGRlciA9IF9jcmVhdGVGdW5jdGlvbkJ1aWxkZXIoZnVuYywgYnVpbGRl
ciwgZnVuY3Rpb25CdWlsZGVyKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KQEAgLTQ4OCw2ICs1MTEsNyBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsKICAg
ICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5GdW5jdGlvbiA9IF9pbXBvcnRGdW5jdGlv
bkNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAg
ICAgaW1wb3J0QnVpbGRlci5NZW1vcnkgPSBfaW1wb3J0TWVtb3J5Q29udGludWF0aW9uKHRoaXMs
IHMsIGltcG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLlRh
YmxlID0gX2ltcG9ydFRhYmxlQ29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOwor
ICAgICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLkV4Y2VwdGlvbiA9IF9pbXBvcnRFeGNl
cHRpb25Db250aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKGltcG9ydEJ1aWxkZXIpOwogICAg
ICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MzEsNiArNTU1LDIz
IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAgIH07CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgIGNhc2UgIkV4Y2VwdGlvbiI6IHsK
KyAgICAgICAgICAgICAgICB0aGlzW3NlY3Rpb25dID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLl9hZGRTZWN0aW9uKHNlY3Rpb24pOworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBkYXRhQnVpbGRlciA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEVuZDogKCkgPT4gdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZTogKHNp
Z25hdHVyZSkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0eXBlID0gX21h
eWJlUmVnaXN0ZXJUeXBlKHRoaXMsIHNpZ25hdHVyZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcy5kYXRhLnB1c2goeyB0YWc6IDAsIHR5cGUgfSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IoZGF0YUJ1aWxkZXIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdl
IGFkZCB0YWdzIHdpdGggbm9uLXplcm8gdmFsdWUgdGhlbiB3ZSBjYW4gYWRkIGEgbmV3IG1lbWJl
ci4KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9l
cnJvckhhbmRsaW5nUHJveHlGb3IoZGF0YUJ1aWxkZXIpOworICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNhc2Ug
Ikdsb2JhbCI6CiAgICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsK
QEAgLTU2OSw2ICs2MTAsNyBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsKICAgICAg
ICAgICAgICAgICAgICAgZXhwb3J0QnVpbGRlci5GdW5jdGlvbiA9IF9leHBvcnRGdW5jdGlvbkNv
bnRpbnVhdGlvbih0aGlzLCBzLCBleHBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAgICAg
ZXhwb3J0QnVpbGRlci5NZW1vcnkgPSBfZXhwb3J0TWVtb3J5Q29udGludWF0aW9uKHRoaXMsIHMs
IGV4cG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICBleHBvcnRCdWlsZGVyLlRhYmxl
ID0gX2V4cG9ydFRhYmxlQ29udGludWF0aW9uKHRoaXMsIHMsIGV4cG9ydEJ1aWxkZXIpOworICAg
ICAgICAgICAgICAgICAgICBleHBvcnRCdWlsZGVyLkV4Y2VwdGlvbiA9IF9leHBvcnRFeGNlcHRp
b25Db250aW51YXRpb24odGhpcywgcywgZXhwb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKGV4cG9ydEJ1aWxkZXIpOwogICAgICAg
ICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03MzcsMTUgKzc3OSw2IEBA
IGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgZm9yIChjb25zdCBz
IG9mIHRoaXMuX3NlY3Rpb25zKQogICAgICAgICAgICAgICAgIGlmIChudW1iZXIgIT09IF91bmtu
b3duU2VjdGlvbklkKQogICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZmFsc3kocy5uYW1lID09
PSBuYW1lICYmIHMuaWQgPT09IG51bWJlciwgYENhbm5vdCBoYXZlIHR3byBzZWN0aW9ucyB3aXRo
IHRoZSBzYW1lIG5hbWUgIiR7bmFtZX0iIGFuZCBJRCAke251bWJlcn1gKTsKLSAgICAgICAgICAg
IC8vIENoZWNrIG9yZGVyaW5nLgotICAgICAgICAgICAgaWYgKChudW1iZXIgIT09IF91bmtub3du
U2VjdGlvbklkKSAmJiAodGhpcy5fc2VjdGlvbnMubGVuZ3RoICE9PSAwKSkgewotICAgICAgICAg
ICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9zZWN0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IC0t
aSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2VjdGlvbnNbaV0uaWQgPT09IF91
bmtub3duU2VjdGlvbklkKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIGFzc2VydC5sZSh0aGlzLl9zZWN0aW9uc1tpXS5pZCwgbnVtYmVyLCBg
QmFkIHNlY3Rpb24gb3JkZXJpbmc6ICIke3RoaXMuX3NlY3Rpb25zW2ldLm5hbWV9IiBjYW5ub3Qg
cHJlY2VkZSAiJHtuYW1lfSJgKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGNvbnN0IHMgPSBP
YmplY3QuYXNzaWduKHsgbmFtZTogbmFtZSwgaWQ6IG51bWJlciwgZGF0YTogW10gfSwgZXh0cmFP
YmplY3QgfHwge30pOwogICAgICAgICB0aGlzLl9zZWN0aW9ucy5wdXNoKHMpOwpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMgYi9KU1Rlc3RzL3dh
c20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwppbmRleCAzNThiYjQ4MmQ0ZTA3MzI2YTIw
ZTU4OTM0ZTU1MjkyYmI1NTE2MzcwLi5lOWM1NzYyNjBmNWQyZTViNjdmYWU4YTNkYjUwZTZjNzQx
Njg4ODE3IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFy
eS5qcworKysgYi9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwpAQCAt
MTQzLDYgKzE0MywxMCBAQCBjb25zdCBlbWl0dGVycyA9IHsKICAgICAgICAgICAgIGNhc2UgIkds
b2JhbCI6CiAgICAgICAgICAgICAgICAgcHV0R2xvYmFsVHlwZShiaW4sIGVudHJ5Lmdsb2JhbERl
c2NyaXB0aW9uKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIkV4
Y2VwdGlvbiI6CisgICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGVudHJ5LnRh
Zyk7CisgICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGVudHJ5LnR5cGUpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSwK
QEAgLTE4NSw2ICsxODksNyBAQCBjb25zdCBlbWl0dGVycyA9IHsKICAgICAgICAgICAgIGNhc2Ug
IkZ1bmN0aW9uIjoKICAgICAgICAgICAgIGNhc2UgIk1lbW9yeSI6CiAgICAgICAgICAgICBjYXNl
ICJUYWJsZSI6CisgICAgICAgICAgICBjYXNlICJFeGNlcHRpb24iOgogICAgICAgICAgICAgICAg
IHB1dChiaW4sICJ2YXJ1aW50MzIiLCBlbnRyeS5pbmRleCk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9u
IHByb2JsZW06IHVuZXhwZWN0ZWQga2luZCAke2VudHJ5LmtpbmR9YCk7CkBAIC0yNTQsNiArMjU5
LDE0IEBAIGNvbnN0IGVtaXR0ZXJzID0gewogICAgICAgICAgICAgICAgIHB1dChiaW4sICJ1aW50
OCIsIGJ5dGUpOwogICAgICAgICB9CiAgICAgfSwKKworICAgIEV4Y2VwdGlvbjogKHNlY3Rpb24s
IGJpbikgPT4geworICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgc2VjdGlvbi5kYXRhLmxl
bmd0aCk7CisgICAgICAgIGZvciAoY29uc3QgZXhuIG9mIHNlY3Rpb24uZGF0YSkgeworICAgICAg
ICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGV4bi50YWcpOworICAgICAgICAgICAgcHV0KGJp
biwgInZhcnVpbnQzMiIsIGV4bi50eXBlKTsKKyAgICAgICAgfQorICAgIH0sCiB9OwogCiBleHBv
cnQgY29uc3QgQmluYXJ5ID0gKHByZWFtYmxlLCBzZWN0aW9ucykgPT4gewpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy93YXNtL2Fzc2VydC5qcyBiL0pTVGVzdHMvd2FzbS9hc3NlcnQuanMKaW5kZXggNmZk
YjY1YTRkYWRkYzBkNzdhNzI0YzAxOTJkOGZiNTNiZjEwYmY2OC4uOTQ4MzhkOTdlZjU1MGY2MWZk
MjM4NmMzZjJhYmQ4ZWY5MjM2ZTQwMiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Fzc2VydC5q
cworKysgYi9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCkBAIC0xMjQsNyArMTI0LDcgQEAgY29uc3Qg
X3Rocm93cyA9IChmdW5jLCB0eXBlLCBtZXNzYWdlLCAuLi5hcmdzKSA9PiB7CiAgICAgdHJ5IHsK
ICAgICAgICAgZnVuYyguLi5hcmdzKTsKICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGlmIChl
IGluc3RhbmNlb2YgdHlwZSAmJiBlLm1lc3NhZ2UuaW5kZXhPZihtZXNzYWdlKSA+PSAwKQorICAg
ICAgICBpZiAoZSBpbnN0YW5jZW9mIHR5cGUgJiYgKHR5cGVvZihlLm1lc3NhZ2UpID09ICJ1bmRl
ZmluZWQiIHx8IGUubWVzc2FnZS5pbmRleE9mKG1lc3NhZ2UpID49IDApKQogICAgICAgICAgICAg
cmV0dXJuIGU7CiAgICAgICAgIF9mYWlsKGBFeHBlY3RlZCB0byB0aHJvdyBhICR7dHlwZS5uYW1l
fSB3aXRoIG1lc3NhZ2UgIiR7bWVzc2FnZX0iLCBnb3QgJHtlLm5hbWV9IHdpdGggbWVzc2FnZSAi
JHtlLm1lc3NhZ2V9ImApOwogICAgIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zZWxmLXRl
c3QvdGVzdF9CdWlsZGVySlNPTi5qcyBiL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWls
ZGVySlNPTi5qcwppbmRleCBiYjFiOTdiMTlkNWNjMWM3OGI1ZjAwN2RjNjkwYWFkYmQ3MGQyMGY4
Li4yMDlmMjBiNzZiYmE4YjcwYzUxNzIxZWU0NTY4M2QxZjc2MDMyYTZmIDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMKKysrIGIvSlNUZXN0cy93
YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzCkBAIC0xNDAsMTEgKzE0MCw2IEBAIGNv
bnN0IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2UpID0+IHsKICAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCAwKTsKIH0pKCk7CiAKLShmdW5jdGlvbiBJbXBvcnRC
ZWZvcmVUeXBlU2VjdGlvbnMoKSB7Ci0gICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5JbXBv
cnQoKS5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IGIuVHlwZSgpLCBFcnJvciwgYEV4
cGVjdGVkOiAiMiIgPiAiMSI6IEJhZCBzZWN0aW9uIG9yZGVyaW5nOiAiSW1wb3J0IiBjYW5ub3Qg
cHJlY2VkZSAiVHlwZSJgKTsKLX0pKCk7Ci0KIChmdW5jdGlvbiBJbXBvcnRGdW5jdGlvbldpdGhv
dXRUeXBlU2VjdGlvbigpIHsKICAgICBjb25zdCBpID0gKG5ldyBCdWlsZGVyKCkpLkltcG9ydCgp
OwogICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaS5GdW5jdGlvbigiZm9vIiwgImJhciIsIDApLCBF
cnJvciwgYFNob3VsZG4ndCBiZSB1bmRlZmluZWQ6IENhbiBub3QgdXNlIHR5cGUgMCBpZiBhIHR5
cGUgc2VjdGlvbiBpcyBub3QgcHJlc2VudGApOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0
cmVzcy9jYXRjaC13aXRoLWRlbGVnYXRlLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9jYXRjaC13
aXRoLWRlbGVnYXRlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMGJlZjU5M2NjNDIzNjJiMjJhZTI5OTc2NDJi
MzI4NTE0ODg1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2NhdGNo
LXdpdGgtZGVsZWdhdGUuanMKQEAgLTAsMCArMSw5MCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAn
Li4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisK
K3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAg
ICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczog
W10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIs
IDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5Ucnko
ImkzMiIpCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDAp
CisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuRGVsZWdhdGUoMCkK
KyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAg
ICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKwor
ICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOwor
CisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworCisgICAgZnVuY3Rpb24gY2Fs
bGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBb
XSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsK
KworICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbXSB9KTsKKwor
ICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNl
cHRpb24pOworfQorCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5
cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29u
dGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAg
ICAgIC5FeGNlcHRpb24oImNvbnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDog
InZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAg
IC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28i
LCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5
KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgw
KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkRlbGVnYXRlKDAp
CisgICAgICAgICAgICAuQ2F0Y2goMSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisK
KyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxl
ID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGxldCBvdGhlclRhZyA9IG5ldyBX
ZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbImkzMiJdfSkKKyAgICBjb25zdCBpbnN0YW5j
ZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFj
aywgdGFnOiBvdGhlclRhZyB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5m
b287CisgICAgbGV0IGFyZ3MgPSBbXTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAg
ICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7CisgICAgfQor
CisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKKworICAgIHRhZyA9
IG90aGVyVGFnOworICAgIGFyZ3MgPSBbMTAwXTsKKworICAgIGxldCBleG4gPSBhc3NlcnQudGhy
b3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgICBh
c3NlcnQuZXEoZXhuLmdldEFyZyh0YWcsIDApLCAxMDApOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy93YXNtL3N0cmVzcy9jcmVhdGUtdGFnLWZyb20uanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2Ny
ZWF0ZS10YWctZnJvbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMjc4ZDZjMjE3NmNmYjU4MTRhZmFlNzY4NGYx
OWZkNTY4MTAxZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9jcmVh
dGUtdGFnLWZyb20uanMKQEAgLTAsMCArMSwyMiBAQAoraW1wb3J0ICogYXMgYXNzZXJ0IGZyb20g
Jy4uL2Fzc2VydC5qcycKKworbGV0IHBhcmFtZXRlcnMgPSBbImkzMiIsICJmMzIiLCAiZXh0ZXJu
cmVmIl07CisKK2Fzc2VydC50aHJvd3MoV2ViQXNzZW1ibHkuVGFnLCBUeXBlRXJyb3IsICJjYWxs
aW5nIFdlYkFzc2VtYmx5LlRhZyBjb25zdHJ1Y3RvciB3aXRob3V0IG5ldyBpcyBpbnZhbGlkIik7
CitsZXQgcGFzc2VkUGFyYW1ldGVycyA9IHsgcGFyYW1ldGVycyB9OworbGV0IHRhZyA9IG5ldyBX
ZWJBc3NlbWJseS5UYWcocGFzc2VkUGFyYW1ldGVycyk7CisKK2Fzc2VydC50cnV0aHkodGFnLnR5
cGUoKSAhPT0gcGFzc2VkUGFyYW1ldGVycywgIlRhZyB0eXBlIHNob3VsZCByZXR1cm4gYSBmcmVz
aCBvYmplY3QiKTsKK2Fzc2VydC5lcSh0YWcudHlwZSgpLnBhcmFtZXRlcnMsIHBhcmFtZXRlcnMs
ICJUYWdzIHR5cGUgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCBp
biIpOworCithc3NlcnQudGhyb3dzKFdlYkFzc2VtYmx5LkV4Y2VwdGlvbiwgVHlwZUVycm9yLCAi
Y2FsbGluZyBXZWJBc3NlbWJseS5FeGNlcHRpb24gY29uc3RydWN0b3Igd2l0aG91dCBuZXcgaXMg
aW52YWxpZCIpOworCitsZXQgZXhjZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0
YWcsIFsxLCAyLjUsIHBhcmFtZXRlcnNdKTsKK2Fzc2VydC50cnV0aHkoZXhjZXB0aW9uLmlzKHRh
ZykpOworYXNzZXJ0LmVxKGV4Y2VwdGlvbi5nZXRBcmcodGFnLCAwKSwgMSk7Cithc3NlcnQuZXEo
ZXhjZXB0aW9uLmdldEFyZyh0YWcsIDEpLCAyLjUpOworYXNzZXJ0LmVxKGV4Y2VwdGlvbi5nZXRB
cmcodGFnLCAyKSwgcGFyYW1ldGVycyk7CisKK2Fzc2VydC50aHJvd3MoKCkgPT4gZXhjZXB0aW9u
LmdldEFyZyh0YWcsIDMpLCBSYW5nZUVycm9yLCAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uLmdldEFy
ZygpOiBJbmRleCBvdXQgb2YgcmFuZ2UiKTsKKworYXNzZXJ0LmVxKFdlYkFzc2VtYmx5LkV4Y2Vw
dGlvbi5wcm90b3R5cGUuX19wcm90b19fLCBPYmplY3QucHJvdG90eXBlKQpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UtMi5qcyBiL0pTVGVz
dHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLTIuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGVjN2ZiYWQwNzU4OTU1ZWEyZjhlNDM0MjgxNDE3Yzk2ZjAwZGI3MwotLS0gL2Rldi9udWxsCisr
KyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLTIuanMKQEAg
LTAsMCArMSw5MCBAQAorCitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1w
b3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworY29uc3QgcGFnZVNpemUgPSA2
NCAqIDEwMjQ7Citjb25zdCBudW1QYWdlcyA9IDE7CisKK3ZhciBpbnN0QTsKK3ZhciBpbnN0QjsK
K3ZhciBncm93OwordmFyIG1lbW9yeURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDB9OwordmFyIG1l
bSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVtb3J5RGVzY3JpcHRpb24pOworCitmdW5jdGlv
biB0ZXN0KCkgeworICAgIGFzc2VydC5lcShpbnN0QS5leHBvcnRzLm1haW4oNDIpLCA0Mik7Cit9
CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQor
ICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5NZW1vcnkoImNvbnRleHQiLCAibWVtIiwg
bWVtb3J5RGVzY3JpcHRpb24pCisgICAgICAgICAgICAuRnVuY3Rpb24oImNvbnRleHQiLCAiZ3Jv
dyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJh
bXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
InRyYW1wb2xpbmUiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJ0cmFtcG9saW5lIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQor
ICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25z
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgaW5zdEIgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7CisgICAgICAgIGNvbnRleHQ6IHsKKyAgICAg
ICAgICAgIG1lbSwKKyAgICAgICAgICAgIGdyb3coKSB7IGluc3RBLmV4cG9ydHMuZ3JvdygxKTsg
fSwKKyAgICAgICAgfQorICAgIH0pOworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVy
KCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAu
TWVtb3J5KCJjb250ZXh0IiwgIm1lbSIsIG1lbW9yeURlc2NyaXB0aW9uKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjb250ZXh0IiwgInRyYW1wb2xpbmUiLCB7IHBhcmFtczogW10sIHJldDogInZv
aWQiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYWluIikKKyAgICAgICAgICAgIC5GdW5j
dGlvbigiZ3JvdyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oIm1haW4iLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KQorICAg
ICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisg
ICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAgICAgIC5DYXRjaEFs
bCgpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgICAg
ICAuSTMyTG9hZCgwLCAwKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImdyb3ciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0
OiAidm9pZCIgfSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAg
ICAuR3Jvd01lbW9yeSgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCg0MikKKyAgICAgICAg
ICAgICAgICAuSTMyU3RvcmUoMCwgMCkKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJB
c3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluKTsKKyAgICBpbnN0QSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsK
KyAgICAgICAgY29udGV4dDogeworICAgICAgICAgICAgbWVtLAorICAgICAgICAgICAgdHJhbXBv
bGluZTogaW5zdEIuZXhwb3J0cy50cmFtcG9saW5lLAorICAgICAgICB9CisgICAgfSk7Cit9CisK
K3Rlc3QoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3Nz
LWluc3RhbmNlLTMuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0
YW5jZS0zLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhODk4MGJlYjkzZjZjMmMzMDY0YzJjYzkxNGVhYzFhMTM0
YzA0ODAKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1j
cm9zcy1pbnN0YW5jZS0zLmpzCkBAIC0wLDAgKzEsNzUgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20g
Jy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJwor
Citjb25zdCBwYWdlU2l6ZSA9IDY0ICogMTAyNDsKK2NvbnN0IG51bVBhZ2VzID0gMTsKKwordmFy
IGluc3RBOwordmFyIGluc3RCOwordmFyIGdyb3c7Cit2YXIgbWVtb3J5RGVzY3JpcHRpb24gPSB7
aW5pdGlhbDogbnVtUGFnZXN9OwordmFyIG1lbSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVt
b3J5RGVzY3JpcHRpb24pOworCitmdW5jdGlvbiB0ZXN0KCkgeworICAgIGFzc2VydC5lcShpbnN0
QS5leHBvcnRzLm1haW4oKSwgNDIpOworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVy
KCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAu
TWVtb3J5KCJjb250ZXh0IiwgIm1lbSIsIHsgaW5pdGlhbDogMCB9KQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVy
ZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigidGhyb3ciKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZXgiLCAwKQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0aHJvdyIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkK
KyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0g
Yi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluKTsKKyAgICBpbnN0QiA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1
bGUsIHsgY29udGV4dDogeyBtZW06IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoeyBpbml0aWFsOiAw
IH0pIH0gfSk7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5
cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5NZW1vcnkoImNvbnRl
eHQiLCAibWVtIiwgbWVtb3J5RGVzY3JpcHRpb24pCisgICAgICAgICAgICAuRnVuY3Rpb24oImNv
bnRleHQiLCAidGhyb3ciLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAg
ICAuRXhjZXB0aW9uKCJjb250ZXh0IiwgImV4IiwgeyBwYXJhbXM6IFtdIH0pCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2ln
bmF0dXJlKHsgcGFyYW1zOiBbImkzMiJdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oIm1haW4iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYWluIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIi
IH0pCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgLkkzMkNv
bnN0KDQyKQorICAgICAgICAgICAgICAgIC5JMzJTdG9yZSgwLCAwKQorICAgICAgICAgICAgICAg
IC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkxvYWQoMCwg
MCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNv
bnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBpbnN0QSA9IG5l
dyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyAuLi5pbnN0Qi5leHBv
cnRzLCBtZW0gfSB9KTsKK30KKwordGVzdCgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0
cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4
Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYzY3YzkxODY5ZTJhYjJkYmU3
MGQ1Y2VjMWU3ZjI1Nzg5OGI1OGY2Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0
cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UuanMKQEAgLTAsMCArMSw1OCBAQAoraW1wb3J0
IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcu
Li9hc3NlcnQuanMnCisKK3ZhciBpbnN0QTsKK3ZhciBpbnN0QjsKKworZnVuY3Rpb24gdGVzdCgp
IHsKKyAgICBhc3NlcnQudGhyb3dzKGluc3RBLmV4cG9ydHMubWFpbiwgV2ViQXNzZW1ibHkuRXhj
ZXB0aW9uLCAid2FzbSBleGNlcHRpb24iKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVp
bGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisg
ICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAg
ICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oInRocm93IikKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigidGhyb3ciLCB7IHBh
cmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJB
c3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluKTsKKyAgICBpbnN0QiA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOwor
fQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNvbnRleHQiLCAidGhy
b3ciLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJh
bXM6IFsiaTMyIiwgImkzMiJdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oIm1haW4iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJtYWluIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisg
ICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkK
KyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkFkZCgp
CisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25z
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgaW5zdEEgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgdGhyb3c6IGluc3RCLmV4
cG9ydHMudGhyb3cgfSB9KTsKK30KKwordGVzdCgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L3N0cmVzcy9leGNlcHRpb24tbGl2ZW5lc3MtdGllci11cC5qcyBiL0pTVGVzdHMvd2FzbS9zdHJl
c3MvZXhjZXB0aW9uLWxpdmVuZXNzLXRpZXItdXAuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGU2MDUyNDBkMjE1
ZWIxNDIxMDJjODVmMWM5ODAzNTI0Yzg1YzZmMgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMv
d2FzbS9zdHJlc3MvZXhjZXB0aW9uLWxpdmVuZXNzLXRpZXItdXAuanMKQEAgLTAsMCArMSw4NyBA
QAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2Vy
dCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsK
KyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAu
RXhjZXB0aW9uKCkKKyAgICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFsiaTMyIl19KQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigidGFnIiwgMCkKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAiaTMyIiB9LCBbImkzMiJdKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgx
ZTYpCisgICAgICAgICAgICAgICAgLlNldExvY2FsKDApCisgICAgICAgICAgICAgICAgLlRyeSgi
aTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDQyKQorICAgICAgICAgICAgICAg
ICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAg
ICAgICAgLkxvb3AoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkJsb2NrKCJ2b2lk
IiwgYiA9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIuR2V0TG9jYWwoMCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMyRXF6KCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuQnJJZigwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5H
ZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJTdWIoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5TZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5CcigxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAgICAgLlJldGhyb3coMCkKKyAgICAgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisg
ICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBX
ZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworICAgIGNvbnN0IHRhZyA9IGluc3RhbmNlLmV4
cG9ydHMudGFnOworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbiwgIndhc20gZXhjZXB0aW9uIik7CisgICAgdHJ5IHsKKyAgICAg
ICAgaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBh
c3NlcnQudHJ1dGh5KGUuaXModGFnKSk7CisgICAgICAgIGFzc2VydC5lcShlLmdldEFyZyh0YWcs
IDApLCA0Mik7CisgICAgfQorfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Cisg
ICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0Iiwg
ImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6
IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAg
LkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsg
cGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLkdldExvY2Fs
KDApCisgICAgICAgICAgICAgICAgLkxvb3AoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAu
Q2FsbCgyKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5J
MzJFcXooKQorICAgICAgICAgICAgICAgICAgICAgICAgLkJySWYoMSkKKyAgICAgICAgICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigid3JhcHBlciIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9p
ZCIgfSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworICAgIHZhciBjb3Vu
dGVyID0gMWU1OworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBj
b25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5z
dGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2Fs
bGJhY2s6IGZ1bmN0aW9uKCkgeyBpZiAoIS0tY291bnRlcikgcmV0dXJuIHRydWU7fSB9IH0pOwor
CisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAwKTsKK30KZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLW11bHRpcGxlLWluc3RhbmNlcy5qcyBi
L0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLW11bHRpcGxlLWluc3RhbmNlcy5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43MTAyNjc5YTlkMTFhMWJlODEzMDhkNjE3Yjk3ZGFjOWFhN2YzMGVlCi0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tbXVsdGlwbGUtaW5zdGFu
Y2VzLmpzCkBAIC0wLDAgKzEsMzIgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIu
anMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29u
c3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119
KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigidGhyb3ci
KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigidGFnIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigidGhyb3ciLCB7IHBhcmFtczogW10s
IHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAg
ICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisgICAg
Y29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICB7CisgICAgICAgIGxldCBpbnN0ID0gbmV3
IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7CisgICAgICAgIGluc3QuZXhwb3J0cy50aHJv
dygpOworICAgIH0KKyAgICB7CisgICAgICAgIGxldCBpbnN0ID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSk7CisgICAgICAgIGluc3QuZXhwb3J0cy50aHJvdygpOworICAgIH0KK30K
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXNpbXBsZS1kZWxlZ2F0
ZS5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXNpbXBsZS1kZWxlZ2F0ZS5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iYjEyYThlZjI5NjJjYjExYzk0NmQwYzVmZDgwZjRhMDZmZGE0Yzc5Ci0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLWRlbGVn
YXRlLmpzCkBAIC0wLDAgKzEsMTI1IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVy
LmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworZnVuY3Rpb24g
dGVzdFNpbXBsZVRocm93RGVsZWdhdGUoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7
CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhw
b3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Y2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5Ucnko
ImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQorICAg
ICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikK
KyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5k
KCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5j
ZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQu
ZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNt
IHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24g
dGVzdFRocm93RGVsZWdhdGVTa2lwKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOwor
ICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5F
eGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9y
dCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNh
bGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJp
MzIiKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAg
ICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLlRocm93KDAp
CisgICAgICAgICAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMSkKKyAgICAgICAgICAgICAgICAg
ICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAg
ICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1v
ZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwg
ImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBw
b3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0RGVsZWdhdGVDYWxsZXIoKSB7CisgICAgY29u
c3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119
KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAg
LkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQor
ICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5DYWxsKDEp
CisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25z
dCgyKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiY2FsbDIiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAg
ICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lk
IikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgICAg
ICAuRGVsZWdhdGUoMSkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAg
ICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHko
KS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7
CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7
IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hp
bmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxl
Iik7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVEZWxlZ2F0ZU1lcmdlKCl7CisgY29uc3QgYiA9
IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCku
RW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
YWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgi
aTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAgICAg
IC5EZWxlZ2F0ZSgwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAg
ICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0g
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdl
YkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2Uu
ZXhwb3J0cy5jYWxsKCksIDMpOworfQorCit0ZXN0U2ltcGxlVGhyb3dEZWxlZ2F0ZSgpOwordGVz
dFRocm93RGVsZWdhdGVTa2lwKCk7Cit0ZXN0RGVsZWdhdGVDYWxsZXIoKTsKK3Rlc3RTaW1wbGVE
ZWxlZ2F0ZU1lcmdlKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlv
bi1zaW1wbGUtdGhyb3ctY2F0Y2guanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1z
aW1wbGUtdGhyb3ctY2F0Y2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTA5NzQwMTVmNzMwMWRlYmU2YjRkNjYy
ZTM1YjA5MmZlNDhlMGM3NgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mv
ZXhjZXB0aW9uLXNpbXBsZS10aHJvdy1jYXRjaC5qcwpAQCAtMCwwICsxLDQxNCBAQAoraW1wb3J0
IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcu
Li9hc3NlcnQuanMnCisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVUcnlDYXRjaCgpeworICAgIGNvbnN0
IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlv
bigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSku
RW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5F
eGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAg
ICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0
KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAg
IGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsK
KworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFu
IGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOwor
fQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlVHJ5Q2F0Y2hBbGwoKXsKKyAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisg
ICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9u
KCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAg
IC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAu
STMyQ29uc3QoMikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7Cisg
ICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0
IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAg
IGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9y
dGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitm
dW5jdGlvbiB0ZXN0Q2FsbFRyeUNhdGNoKCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7
CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhw
b3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Y2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMy
IikKKyAgICAgICAgICAgICAgICAuQ2FsbCgxKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
IC5FbmQoKQorCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwyIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7Cisg
ICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0p
OworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcg
YW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7
Cit9CisKK2Z1bmN0aW9uIHRlc3RDYWxsVHJ5Q2F0Y2hBbGwoKXsKKyAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisg
ICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9u
KCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDEpCisgICAgICAgICAgICAuQ2F0
Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgLkVuZCgpCisKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbDIiLCB7IHBh
cmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJB
c3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZSht
b2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIs
ICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUg
cG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZVRyeUNhdGNoVmFsdWUoKXsKKyAg
ICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAu
RnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1z
OiBbImkzMiJdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAg
ICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAu
Q29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDog
ImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkkzMkNv
bnN0KDIpCisgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuQ2F0Y2goMCkK
KyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQor
CisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9k
dWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0g
bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShp
bnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFn
IHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0
Q2FsbFRyeUNhdGNoVmFsdWUoKXsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBi
LlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0
aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbImkzMiJdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9y
dCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNh
bGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIp
CisgICAgICAgICAgICAgICAgLkNhbGwoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKworICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjYWxsMiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5J
MzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0
KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAg
IGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsK
KworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFu
IGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOwor
fQorCitmdW5jdGlvbiB0ZXN0U3RhY2tUcnlDYXRjaCgpeworICAgIGNvbnN0IGIgPSBuZXcgQnVp
bGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisg
ICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFsiaTMyIl19KS5FbmQoKQor
ICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlv
bigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAg
IC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAg
ICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAvLyBUT0RPOiBidWlsZGVyIGVycm9yCisgICAg
ICAgICAgICAuVHJ5KHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4g
PSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNh
bGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNo
b3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0TGl2ZUFmdGVyVHJ5Q2F0Y2go
KSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7
IHBhcmFtczogW10gfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikK
KyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAg
ICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJl
dDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAg
ICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAg
ICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7Cisg
ICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0p
OworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcg
YW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7
Cit9CisKK2Z1bmN0aW9uIHRlc3RMaXZlQWZ0ZXJUcnlDYXRjaEFsbCgpIHsKKyAgICBjb25zdCBi
ID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24o
KS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KS5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4
Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5UcnkoInZvaWQiKQor
ICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwo
KQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5F
bmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29u
c3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3Rh
bmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2Vy
dC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdh
c20gdGFnIHRocm93biBmcm9tIEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlv
biB0ZXN0VW5pZnlUcnlDYXRjaENhdGNoKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAg
IC5FeGNlcHRpb24oKQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAg
ICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBh
cmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAg
ICAgICAgICAgICAgICAgICAuVGhyb3coMSkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAg
ICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkNhdGNoKDEp
CisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4g
PSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNh
bGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNo
b3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0VW5pZnlUcnlDYXRjaENhdGNo
QWxsKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKQorICAgICAg
ICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAgICAgIC5TaWduYXR1cmUo
eyBwYXJhbXM6IFtdIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVGhy
b3coMSkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAg
ICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7Cisg
ICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0p
OworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcg
YW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7
Cit9CisKK2Z1bmN0aW9uIHRlc3RVbmlmeVRyeU5vVGhyb3coKSB7CisgICAgY29uc3QgYiA9IG5l
dyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5k
KCkKKyAgICAgICAgLkV4Y2VwdGlvbigpCisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1z
OiBbXSB9KQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Y2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5Ucnko
ImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAg
IC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAg
Y29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2Uu
ZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24g
ZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFVuaWZ5VHJ5
Tm9DYXRjaCgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5F
bmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkKKyAg
ICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pCisgICAgICAgICAgICAuU2lnbmF0
dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNv
ZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJp
MzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAg
LkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
Y29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOwor
CisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4g
ZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9
CisKK2Z1bmN0aW9uIHRlc3ROZXN0ZWRDYXRjaCAoKXsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxk
ZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAg
IC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29k
ZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0
OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAg
IC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAg
ICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgICAgICAuQ2F0Y2hB
bGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5FbmQoKQorCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOwor
ICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25z
dCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworCisgICAgYXNz
ZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbiwg
Indhc20gZXhjZXB0aW9uIik7Cit9CisKK3Rlc3RTaW1wbGVUcnlDYXRjaCgpOwordGVzdFNpbXBs
ZVRyeUNhdGNoQWxsKCk7Cit0ZXN0U2ltcGxlVHJ5Q2F0Y2hWYWx1ZSgpOwordGVzdENhbGxUcnlD
YXRjaCgpOwordGVzdENhbGxUcnlDYXRjaEFsbCgpOwordGVzdENhbGxUcnlDYXRjaFZhbHVlKCk7
Cit0ZXN0TGl2ZUFmdGVyVHJ5Q2F0Y2goKTsKK3Rlc3RMaXZlQWZ0ZXJUcnlDYXRjaEFsbCgpOwor
dGVzdFVuaWZ5VHJ5Q2F0Y2hDYXRjaCgpOwordGVzdFVuaWZ5VHJ5Q2F0Y2hDYXRjaEFsbCgpOwor
dGVzdFVuaWZ5VHJ5Tm9UaHJvdygpOwordGVzdFVuaWZ5VHJ5Tm9DYXRjaCgpOworCisvLyBUT0RP
OiBlbmFibGUgdGhpcyB0ZXN0CisvLyB0ZXN0U3RhY2tUcnlDYXRjaCgpOwpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS1jYXRj
aGFsbC1yZXRocm93LmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZy
b20tanMtdG8td2FzbS1jYXRjaGFsbC1yZXRocm93LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiNGMzMGQ5MWFj
NmJhMzc1NDEwNDdiYzY1MjNmYWJhZjExYmI0MmQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLWNhdGNoYWxsLXJl
dGhyb3cuanMKQEAgLTAsMCArMSw0MSBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRl
ci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBj
b25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1w
b3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDog
InZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNl
cHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgp
LkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwi
LCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisg
ICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAg
ICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAg
ICAgICAgICAgICAgLlJldGhyb3coMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwg
eyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBv
cnRzLmZvbzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcg
V2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAgIH0KKworICAgIGFzc2VydC50aHJv
d3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworCisgICAg
dGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFtdIH0pOworCisgICAgYXNz
ZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7
Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJv
bS1qcy10by13YXNtLWNhdGNoYWxsLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24t
dGhyb3duLWZyb20tanMtdG8td2FzbS1jYXRjaGFsbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zN2U0YTQ0YjFm
ZWM0MTZkMzg0Yzc5NDk5Zjk4YmY5NDY2OWNiNjRjCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0
cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS1jYXRjaGFsbC5q
cwpAQCAtMCwwICsxLDQwIEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJwor
aW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIg
PSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5G
dW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIg
fSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigp
LlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rp
b24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAg
ICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAg
ICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25z
dCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxl
dCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkg
eworICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAg
IH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoX2Fs
bGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2li
bGUiKTsKKworICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbXSB9
KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMiwgImNhdGNoX2Fs
bGluZyBhbiBvcGFxdWUgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxl
Iik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24t
ZnJvbS1qcy10by13YXNtLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3du
LWZyb20tanMtdG8td2FzbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NTAxOTIwMGM5ZmQ5ZjJmNjFmYWI0Mzg3
NDA2ZTg2NmJjMzJmNzY5Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9l
eGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS5qcwpAQCAtMCwwICsxLDQwIEBACitpbXBv
cnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20g
Jy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIu
VHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxs
YmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119
KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAg
LkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQor
ICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAg
ICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAg
ICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdl
dCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAg
ICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29u
dGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5m
b287CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFz
c2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFu
Y2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJv
d24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKKworICAgIHRhZyA9IG5ldyBXZWJBc3Nl
bWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbXSB9KTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFu
Y2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLW91dC1vZi13YXNtLmpzIGIvSlNU
ZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLW91dC1vZi13YXNtLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE4ZTMzMDFlM2I4MDAzYTUyYTJkZTYzMzU4Njc2OWZmODkwODJmOGUKLS0tIC9kZXYvbnVs
bAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3V0LW9mLXdhc20u
anMKQEAgLTAsMCArMSwyNCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycK
K2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBi
ID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24o
KS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KS5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4
Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAg
ICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAuRW5kKCkKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHko
KS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7
CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsK
KworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5F
eGNlcHRpb24pOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24t
dGhyb3duLW92ZXItd2FzbS5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93
bi1vdmVyLXdhc20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTlmNGMyZTkwMzFlOWVkNDlkZTY5NzFjOTcxYjY0
MGJlZTI0YWZjMwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0
aW9uLXRocm93bi1vdmVyLXdhc20uanMKQEAgLTAsMCArMSwzMCBAQAoraW1wb3J0IEJ1aWxkZXIg
ZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQu
anMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQo
KQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBh
cmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgp
CisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAg
ICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24o
ImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAg
IC5DYWxsKDApCisgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgp
OworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBj
b25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4
dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAg
dGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbihpbnN0YW5jZS5leHBvcnRzLmZvbywgW10p
OworICAgIH0KKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJB
c3NlbWJseS5FeGNlcHRpb24sICJ3YXNtIGV4Y2VwdGlvbiIpOworfQpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdHJhcC5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mv
ZXhjZXB0aW9uLXRyYXAuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGZkZjUzZWI1MDVjMzkwYjQwYmYxNTM1NWI2
ZDUzNzJlNTYwZTkxYgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhj
ZXB0aW9uLXRyYXAuanMKQEAgLTAsMCArMSwxMzQgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4u
L0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCitm
dW5jdGlvbiB0ZXN0Q2Fubm90Q2F0Y2hVbnJlYWNoYWJsZSgpIHsKKyAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7
IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQor
ICAgICAgICAgICAgICAgICAgICAuVW5yZWFjaGFibGUoKQorICAgICAgICAgICAgICAgIC5DYXRj
aEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25z
dCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9y
dHMuY2FsbCwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAiVW5yZWFjaGFibGUgY29kZSBzaG91
bGQgbm90IGJlIGV4ZWN1dGVkIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RDYW5ub3RDYXRjaE9PQigp
IHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuTWVtb3J5KCkKKyAgICAgICAgICAgIC5J
bml0aWFsTWF4UGFnZXMoMCwgMSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQor
ICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2Rl
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMy
IiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5J
MzJDb25zdCgxMDI0KQorICAgICAgICAgICAgICAgICAgICAuSTMyTG9hZCgwLCAwKQorICAgICAg
ICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQor
ICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQo
KQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3Qg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNl
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7CisKKyAgICBhc3NlcnQudGhyb3dz
KGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAiT3V0IG9m
IGJvdW5kcyBtZW1vcnkgYWNjZXNzIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RXYXNtQVBJVGhyb3co
KSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAg
ICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6
IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBh
cmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAg
ICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3Qo
MCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAuSTMy
Q29uc3QoMSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOwor
ICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25z
dCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDog
eyBjYWxsYmFjayB9fSk7CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgbmV3
IFdlYkFzc2VtYmx5Lkdsb2JhbCh7CisgICAgICAgICAgICB2YWx1ZTogJ2FueWZ1bmMnCisgICAg
ICAgIH0sIHt9KTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxs
KCksIDEpOworfQorZnVuY3Rpb24gdGVzdEpTQ2F0Y2hBbmRSZXRocm93KCkgeworICAgIGNvbnN0
IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQo
KS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9p
ZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFsiaTMyIl0s
IHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAg
ICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkVxeigpCisgICAg
ICAgICAgICAgICAgICAgIC5JZigidm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAuVW5y
ZWFjaGFibGUoKQorICAgICAgICAgICAgICAgICAgICAuRWxzZSgpCisgICAgICAgICAgICAgICAg
ICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAg
ICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2Vi
QXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2Uo
bW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgZnVuY3Rpb24gY2FsbGJh
Y2soKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbnN0YW5jZS5leHBvcnRzLmNhbGwo
MCk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5jYWxs
KDEpLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsICJVbnJlYWNoYWJsZSBjb2RlIHNob3VsZCBu
b3QgYmUgZXhlY3V0ZWQiKTsKK30KKwordGVzdENhbm5vdENhdGNoVW5yZWFjaGFibGUoKTsKK3Rl
c3RDYW5ub3RDYXRjaE9PQigpOwordGVzdFdhc21BUElUaHJvdygpOwordGVzdEpTQ2F0Y2hBbmRS
ZXRocm93KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ctZnJvbS1j
YXRjaC10by1jYXRjaC5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy1mcm9tLWNhdGNo
LXRvLWNhdGNoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkZmRhNmQ4YTY5MTE4NGQ5OTk1NTVkMThlOGQ5ZWU1
MWJlNGFlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ct
ZnJvbS1jYXRjaC10by1jYXRjaC5qcwpAQCAtMCwwICsxLDQ1IEBACitpbXBvcnQgQnVpbGRlciBm
cm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5q
cycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFy
YW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkK
KyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigi
Zm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAg
LlRyeSgiaTMyIikKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNh
bGwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaCgw
KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5SZXRocm93
KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7Cisg
ICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNv
bnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMu
Zm9vOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJB
c3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3Rh
bmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKKworICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWco
eyBwYXJhbWV0ZXJzOiBbXSB9KTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93
YXNtL3N0cmVzcy9yZXRocm93LXRvLWNhdGNoLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9yZXRo
cm93LXRvLWNhdGNoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmMWNiYTQzZGNiNWI0NGQ5YWU2NGZkYzU3OWEw
YzhhNjU1MDNmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhy
b3ctdG8tY2F0Y2guanMKQEAgLTAsMCArMSw4OCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4v
QnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sK
KyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAg
ICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10s
IHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAg
IC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDAp
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkz
MiIpCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisg
ICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAg
IC5JMzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6
IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOwor
CisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJs
eS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4
cG9ydHMuY2FsbCgpLCAzKTsKKworICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJh
bWV0ZXJzOiBbXSB9KTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxs
LCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWls
ZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJj
b250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQor
ICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJl
KHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIp
CisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCBy
ZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgi
aTMyIikKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25z
dCgxKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIp
CisgICAgICAgICAgICAgICAgLlJldGhyb3coMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29u
c3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3Nl
bWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBs
ZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygp
IHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsKKyAg
ICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDMpOworCisgICAg
dGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFtdIH0pOworCisgICAgYXNz
ZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7
Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ctdG8tZGVsZWdhdGUt
dG8tY2F0Y2guanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3JldGhyb3ctdG8tZGVsZWdhdGUtdG8t
Y2F0Y2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA0NzljMGNlYTIzYjYwZTM5NTVhMWI1MTc0OTFmYjRmNzZl
ZTdhZAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy10by1k
ZWxlZ2F0ZS10by1jYXRjaC5qcwpAQCAtMCwwICsxLDI1OSBAQAoraW1wb3J0IEJ1aWxkZXIgZnJv
bSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMn
CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQor
ICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJjYWxs
YmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgIC5FeGNlcHRp
b24oImNvbnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogInZvaWQiIH0pCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0
aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5G
dW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAxKQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAg
ICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIp
CisgICAgICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAg
ICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAg
ICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5S
ZXRocm93KDApCisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5E
ZWxlZ2F0ZSgwKQorICAgICAgICAgICAgLkNhdGNoKDEpCisgICAgICAgICAgICAgICAgLkkzMkNv
bnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNv
bnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgb3RoZXJU
YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIiXX0pCisgICAgY29u
c3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6
IHsgY2FsbGJhY2ssIHRhZzogb3RoZXJUYWcgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNl
LmV4cG9ydHMuZm9vOworICAgIGxldCBhcmdzID0gW107CisKKyAgICBmdW5jdGlvbiBjYWxsYmFj
aygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIGFyZ3Mp
OworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMyk7CisK
KyAgICB0YWcgPSBvdGhlclRhZzsKKyAgICBhcmdzID0gWzEwMF07CisKKyAgICBsZXQgZXhuID0g
YXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LkV4Y2VwdGlv
bik7CisgICAgYXNzZXJ0LmVxKGV4bi5nZXRBcmcodGFnLCAwKSwgMTAwKTsKK30KKworeworICAg
IGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5J
bXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBw
YXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiY29udGV4
dCIsICJ0YWciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWdu
YXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJj
YWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDEpCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczog
W10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAg
ICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAg
ICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxs
KDApCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAg
ICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgLlJldGhyb3coMSkKKyAgICAgICAgICAgICAgICAgICAg
LkVuZCgpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRGVsZWdhdGUoMCkK
KyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0g
Yi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgb3RoZXJUYWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsg
cGFyYW1ldGVyczogWyJpMzIiXX0pCisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1i
bHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2ssIHRhZzogb3RoZXJUYWcg
fX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworICAgIGxldCBhcmdz
ID0gW107CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgbGV0IGV4biA9IG5l
dyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBhcmdzKTsKKyAgICAgICAgdGFnID0gb3RoZXJU
YWc7CisgICAgICAgIGFyZ3MgPSBbMTAwXTsKKyAgICAgICAgdGhyb3cgZXhuOworICAgIH0KKwor
ICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNl
cHRpb24pOworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBl
KCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNvbnRl
eHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAg
ICAuRXhjZXB0aW9uKCJjb250ZXh0IiwgInRhZyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2
b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAg
ICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAu
RXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwg
MSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgi
aTMyIikKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAu
VHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwo
KQorICAgICAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25z
dCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
UmV0aHJvdygxKQorICAgICAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgxKQorICAgICAgICAgICAg
LkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBi
aW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGxldCBvdGhlclRhZyA9IG5ldyBXZWJBc3NlbWJseS5U
YWcoeyBwYXJhbWV0ZXJzOiBbImkzMiJdfSkKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjaywgdGFnOiBvdGhl
clRhZyB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisgICAgbGV0
IGFyZ3MgPSBbXTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICBsZXQgZXhu
ID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIGFyZ3MpOworICAgICAgICB0YWcgPSBv
dGhlclRhZzsKKyAgICAgICAgYXJncyA9IFsxMDBdOworICAgICAgICB0aHJvdyBleG47CisgICAg
fQorCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5
LkV4Y2VwdGlvbik7Cit9CisKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAg
IGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAg
ICAgICAgICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJ0YWciLCB7IHBhcmFtczogWyJpMzIiXSwg
cmV0OiAidm9pZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgp
CisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAg
ICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24o
ImZvbyIsIDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAg
IC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAg
ICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAg
ICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAgICAgLkNh
dGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAg
ICAgICAgICAgICAgICAgLlJldGhyb3coMCkKKyAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgICAgICAgICAgLkRlbGVnYXRlKDApCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAg
ICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0g
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGxldCBvdGhlclRhZyA9IG5ldyBXZWJB
c3NlbWJseS5UYWcoeyBwYXJhbWV0ZXJzOiBbImkzMiJdfSkKKyAgICBjb25zdCBpbnN0YW5jZSA9
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjaywg
dGFnOiBvdGhlclRhZyB9fSk7CisKKyAgICBsZXQgdGFnID0gb3RoZXJUYWc7CisgICAgbGV0IGFy
Z3MgPSBbMTAwXTsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICBsZXQgZXhu
ID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIGFyZ3MpOworICAgICAgICB0aHJvdyBl
eG47CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAxMDAp
OworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5k
KCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNvbnRleHQiLCAi
Y2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAuRXhj
ZXB0aW9uKCJjb250ZXh0IiwgInRhZyIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0
KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMSkKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2Fs
bCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikK
KyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJp
MzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQor
ICAgICAgICAgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuUmV0aHJv
dygxKQorICAgICAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQorICAgICAgICAgICAgLkNhdGNo
KDEpCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICBsZXQgb3RoZXJUYWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFy
YW1ldGVyczogWyJpMzIiXX0pCisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2ssIHRhZzogb3RoZXJUYWcgfX0p
OworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworICAgIGxldCBhcmdzID0g
W107CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgbGV0IGV4biA9IG5ldyBX
ZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBhcmdzKTsKKyAgICAgICAgdGFnID0gb3RoZXJUYWc7
CisgICAgICAgIGFyZ3MgPSBbMTAwXTsKKyAgICAgICAgdGhyb3cgZXhuOworICAgIH0KKworICAg
IGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMyk7Cit9CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vc3RyZXNzL3NpbXBsZS1leHBvcnQtZXhjZXB0aW9uLmpzIGIvSlNUZXN0cy93
YXNtL3N0cmVzcy9zaW1wbGUtZXhwb3J0LWV4Y2VwdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYjk2OTk5
NzUzZDNhNGFkMDg2YTBlY2U1ODk4Mjg0ZjhmY2I4YjcwCi0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3N0cmVzcy9zaW1wbGUtZXhwb3J0LWV4Y2VwdGlvbi5qcwpAQCAtMCwwICsxLDE2
IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNz
ZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAg
IC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFsiaTMyIl19KS5FbmQoKQorICAgICAg
ICAuRXhwb3J0KCkuRXhjZXB0aW9uKCJmb28iLCAwKS5FbmQoKQorCisgICAgY29uc3QgYmluID0g
Yi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0
YW5jZShtb2R1bGUpOworCisgICAgYXNzZXJ0Lmluc3RhbmNlb2YoaW5zdGFuY2UuZXhwb3J0cy5m
b28sIFdlYkFzc2VtYmx5LlRhZyk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvTElD
RU5TRSBiL0pTVGVzdHMvd2FzbS92OC9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzZDljNDdlMzNjMTgy
OTI3NDFmMWU0MDg5MGM4ZmUyZDYyOTk2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dh
c20vdjgvTElDRU5TRQpAQCAtMCwwICsxLDYyIEBACitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byBh
bGwgcGFydHMgb2YgVjggdGhhdCBhcmUgbm90IGV4dGVybmFsbHkKK21haW50YWluZWQgbGlicmFy
aWVzLiAgVGhlIGV4dGVybmFsbHkgbWFpbnRhaW5lZCBsaWJyYXJpZXMgdXNlZCBieSBWOAorYXJl
OgorCisgIC0gUENSRSB0ZXN0IHN1aXRlLCBsb2NhdGVkIGluCisgICAgdGVzdC9tanN1bml0L3Ro
aXJkX3BhcnR5L3JlZ2V4cC1wY3JlL3JlZ2V4cC1wY3JlLmpzLiAgVGhpcyBpcyBiYXNlZCBvbiB0
aGUKKyAgICB0ZXN0IHN1aXRlIGZyb20gUENSRS03LjMsIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5
IHRoZSBVbml2ZXJzaXR5CisgICAgb2YgQ2FtYnJpZGdlIGFuZCBHb29nbGUsIEluYy4gIFRoZSBj
b3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCisgICAgYXJlIGVtYmVkZGVkIGluIHJlZ2V4cC1w
Y3JlLmpzLgorCisgIC0gTGF5b3V0IHRlc3RzLCBsb2NhdGVkIGluIHRlc3QvbWpzdW5pdC90aGly
ZF9wYXJ0eS9vYmplY3Qta2V5cy4gIFRoZXNlIGFyZQorICAgIGJhc2VkIG9uIGxheW91dCB0ZXN0
cyBmcm9tIHdlYmtpdC5vcmcgd2hpY2ggYXJlIGNvcHlyaWdodGVkIGJ5CisgICAgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gYW5kIHJlbGVhc2VkIHVuZGVyIGEgMy1jbGF1c2UgQlNEIGxpY2Vuc2UuCisK
KyAgLSBTdHJvbmd0YWxrIGFzc2VtYmxlciwgdGhlIGJhc2lzIG9mIHRoZSBmaWxlcyBhc3NlbWJs
ZXItYXJtLWlubC5oLAorICAgIGFzc2VtYmxlci1hcm0uY2MsIGFzc2VtYmxlci1hcm0uaCwgYXNz
ZW1ibGVyLWlhMzItaW5sLmgsCisgICAgYXNzZW1ibGVyLWlhMzIuY2MsIGFzc2VtYmxlci1pYTMy
LmgsIGFzc2VtYmxlci14NjQtaW5sLmgsCisgICAgYXNzZW1ibGVyLXg2NC5jYywgYXNzZW1ibGVy
LXg2NC5oLCBhc3NlbWJsZXItbWlwcy1pbmwuaCwKKyAgICBhc3NlbWJsZXItbWlwcy5jYywgYXNz
ZW1ibGVyLW1pcHMuaCwgYXNzZW1ibGVyLmNjIGFuZCBhc3NlbWJsZXIuaC4KKyAgICBUaGlzIGNv
ZGUgaXMgY29weXJpZ2h0ZWQgYnkgU3VuIE1pY3Jvc3lzdGVtcyBJbmMuIGFuZCByZWxlYXNlZAor
ICAgIHVuZGVyIGEgMy1jbGF1c2UgQlNEIGxpY2Vuc2UuCisKKyAgLSBWYWxncmluZCBjbGllbnQg
QVBJIGhlYWRlciwgbG9jYXRlZCBhdCBzcmMvdGhpcmRfcGFydHkvdmFsZ3JpbmQvdmFsZ3JpbmQu
aAorICAgIFRoaXMgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlLgorCisgIC0gVGhl
IFdhc20gQy9DKysgQVBJIGhlYWRlcnMsIGxvY2F0ZWQgYXQgdGhpcmRfcGFydHkvd2FzbS1hcGkv
d2FzbS57aCxoaH0KKyAgICBUaGlzIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBBcGFjaGUgbGljZW5z
ZS4gVGhlIEFQSSdzIHVwc3RyZWFtIHByb3RvdHlwZQorICAgIGltcGxlbWVudGF0aW9uIGFsc28g
Zm9ybWVkIHRoZSBiYXNpcyBvZiBWOCdzIGltcGxlbWVudGF0aW9uIGluCisgICAgc3JjL3dhc20v
Yy1hcGkuY2MuCisKK1RoZXNlIGxpYnJhcmllcyBoYXZlIHRoZWlyIG93biBsaWNlbnNlczsgd2Ug
cmVjb21tZW5kIHlvdSByZWFkIHRoZW0sCithcyB0aGVpciB0ZXJtcyBtYXkgZGlmZmVyIGZyb20g
dGhlIHRlcm1zIGJlbG93LgorCitGdXJ0aGVyIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZv
dW5kIGluIExJQ0VOU0UgZmlsZXMgbG9jYXRlZCBpbiAKK3N1Yi1kaXJlY3Rvcmllcy4KKworQ29w
eXJpZ2h0IDIwMTQsIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtYXBpLmpzIGIvSlNU
ZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtYXBpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxZDUzNjgxNDU2YzY1
ZWM4NjcxOGI4NWUxYWZkNmZjMGZkODk3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dh
c20vdjgvZXhjZXB0aW9ucy1hcGkuanMKQEAgLTAsMCArMSwyMzIgQEAKKy8vIENvcHlyaWdodCAy
MDIxIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1l
eHBlcmltZW50YWwtd2FzbS1laCAtLWV4cGVyaW1lbnRhbC13YXNtLXJlZnR5cGVzCisKK2xvYWQo
Indhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKKworKGZ1bmN0aW9uIFRlc3RJbXBvcnQoKSB7CisK
KyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5UYWcoKSwgVHlwZUVycm9yLAor
ICAgICAgL2V4cGVjdHMgdGhlIHRhZyB0eXBlIGFzIHRoZSBmaXJzdCBhcmd1bWVudC8pOworICBh
c3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5LlRhZyh7fSksIFR5cGVFcnJvciwKKyAg
ICAgIC9leHBlY3RzIGEgdGFnIHR5cGUgd2l0aCB0aGUgJ3BhcmFtZXRlcnMnIHByb3BlcnR5Lyk7
CisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBb
J2ZvbyddfSksIFR5cGVFcnJvciwKKyAgICAgIC9leHBlY3RzIHRoZSAncGFyYW1ldGVycycgZmll
bGQgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgc2VxdWVuY2Ugb2YgV2ViQXNzZW1ibHkg
dmFsdWUgdHlwZXMvKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5UYWco
e3BhcmFtZXRlcnM6IHt9fSksIFR5cGVFcnJvciwKKyAgICAgIC9UeXBlIGVycm9yLyk7CisKKyAg
bGV0IGpzX2V4Y2VwdF9pMzIgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbJ2kz
MiddfSk7CisgIGxldCBqc19leGNlcHRfdiA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRl
cnM6IFtdfSk7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGJ1
aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3ZfaSk7CisKKyAgYXNzZXJ0RG9l
c05vdFRocm93KCgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4OiBqc19leGNlcHRf
aTMyIH19KSk7CisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlh
dGUoeyBtOiB7IGV4OiBqc19leGNlcHRfdiB9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwKKyAg
ICAgIC9pbXBvcnRlZCBUYWcgbTpleCBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgaW1wb3J0
ZWQgV2ViQXNzZW1ibHkgVGFnJ3Mgc2lnbmF0dXJlLyk7CisgIGFzc2VydFRocm93cygKKyAgICAg
ICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4OiBqc19leGNlcHRfdiB9fSksIFdl
YkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9pbXBvcnRlZCBUYWcgbTpleCBzaWduYXR1cmUg
ZG9lc24ndCBtYXRjaCB0aGUgaW1wb3J0ZWQgV2ViQXNzZW1ibHkgVGFnJ3Mgc2lnbmF0dXJlLyk7
CisgIGFzc2VydFRydWUoanNfZXhjZXB0X2kzMi50b1N0cmluZygpID09ICJbb2JqZWN0IFdlYkFz
c2VtYmx5LlRhZ10iKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0KCkgeworICBsZXQg
YnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRl
ci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0
ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUo
KTsKKworICBhc3NlcnRUcnVlKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChp
bnN0YW5jZS5leHBvcnRzLCAnZXgnKSk7CisgIGFzc2VydEVxdWFscygib2JqZWN0IiwgdHlwZW9m
IGluc3RhbmNlLmV4cG9ydHMuZXgpOworICBhc3NlcnRJbnN0YW5jZW9mKGluc3RhbmNlLmV4cG9y
dHMuZXgsIFdlYkFzc2VtYmx5LlRhZyk7CisgIGFzc2VydFNhbWUoaW5zdGFuY2UuZXhwb3J0cy5l
eC5jb25zdHJ1Y3RvciwgV2ViQXNzZW1ibHkuVGFnKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0
SW1wb3J0RXhwb3J0KCkgeworCisgIGxldCBqc19leF9pMzIgPSBuZXcgV2ViQXNzZW1ibHkuVGFn
KHtwYXJhbWV0ZXJzOiBbJ2kzMiddfSk7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBpbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgi
LCBrU2lnX3ZfaSk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRh
ZywgaW5kZXgpOworCisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7
IGV4OiBqc19leF9pMzIgfX0pOworICBsZXQgcmVzID0gaW5zdGFuY2UuZXhwb3J0cy5leDsKKyAg
YXNzZXJ0RXF1YWxzKHJlcywganNfZXhfaTMyKTsKK30pKCk7CisKKworKGZ1bmN0aW9uIFRlc3RF
eGNlcHRpb25Db25zdHJ1Y3RvcigpIHsKKyAgLy8gQ2hlY2sgZXJyb3JzLgorICBsZXQganNfdGFn
ID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogW119KTsKKyAgYXNzZXJ0VGhyb3dz
KCgpID0+IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oMCksIFR5cGVFcnJvciwKKyAgICAgIC9X
ZWJBc3NlbWJseS5FeGNlcHRpb24gY29uc3RydWN0b3IgZXhwZWN0cyB0aGUgZmlyc3QgYXJndW1l
bnQgdG8gYmUgYSBXZWJBc3NlbWJseS5UYWcvKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBX
ZWJBc3NlbWJseS5FeGNlcHRpb24oe30pLCBUeXBlRXJyb3IsCisgICAgICAvV2ViQXNzZW1ibHku
RXhjZXB0aW9uIGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEg
V2ViQXNzZW1ibHkuVGFnLyk7CisgIGFzc2VydFRocm93cygoKSA9PiBXZWJBc3NlbWJseS5FeGNl
cHRpb24oanNfdGFnKSwgVHlwZUVycm9yLAorICAgICAgL2NhbGxpbmcgV2ViQXNzZW1ibHkuRXhj
ZXB0aW9uIGNvbnN0cnVjdG9yIHdpdGhvdXQgbmV3IGlzIGludmFsaWQvKTsKKyAgbGV0IGpzX2V4
Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oanNfdGFnLCBbXSk7CisKKyAgLy8g
Q2hlY2sgcHJvdG90eXBlLgorICBhc3NlcnRTYW1lKFdlYkFzc2VtYmx5LkV4Y2VwdGlvbi5wcm90
b3R5cGUsIGpzX2V4Y2VwdGlvbi5fX3Byb3RvX18pOworICBhc3NlcnRUcnVlKGpzX2V4Y2VwdGlv
biBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisKKyAgLy8gQ2hlY2sgcHJvdG90
eXBlIG9mIGEgdGhyb3duIGV4Y2VwdGlvbi4KKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKyAgbGV0IHdhc21fdGFnID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOwor
ICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHko
W2tFeHByVGhyb3csIHdhc21fdGFnXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBi
dWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIHRyeSB7CisgICAgaW5zdGFuY2UuZXhwb3J0cy50aHJv
dygpOworICB9IGNhdGNoIChlKSB7CisgICAgYXNzZXJ0VHJ1ZShlIGluc3RhbmNlb2YgV2ViQXNz
ZW1ibHkuRXhjZXB0aW9uKTsKKyAgfQorfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RFeGNlcHRpb25D
b25zdHJ1Y3RvcldpdGhQYXlsb2FkKCkgeworICBsZXQgdGFnID0gbmV3IFdlYkFzc2VtYmx5LlRh
ZygKKyAgICAgIHtwYXJhbWV0ZXJzOiBbJ2kzMicsICdmMzInLCAnaTY0JywgJ2Y2NCcsICdleHRl
cm5yZWYnXX0pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlv
bigKKyAgICAgIHRhZywgWzFuLCAyLCAzbiwgNCwge31dKSwgVHlwZUVycm9yKTsKKyAgYXNzZXJ0
RG9lc05vdFRocm93KCgpID0+IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbMywgNCwg
NW4sIDYsIHt9XSkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RDYXRjaEpTRXhjZXB0aW9uKCkg
eworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQganNfdGFn
ID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogW119KTsKKyAgbGV0IGpzX2Z1bmNf
aW5kZXggPSBidWlsZGVyLmFkZEltcG9ydCgnbScsICdqc19mdW5jJywga1NpZ192X3YpOworICBs
ZXQganNfdGFnX2luZGV4ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJqc190YWciLCBr
U2lnX3Zfdik7CisgIGxldCB0YWdfaW5kZXggPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7Cisg
IGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJ3YXNtX3RhZyIsIGtFeHRlcm5hbFRhZywgdGFnX2lu
ZGV4KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2giLCBrU2lnX2lfdikKKyAgICAgIC5h
ZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICBrRXhwckNhbGxG
dW5jdGlvbiwganNfZnVuY19pbmRleCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMCwKKyAgICAg
ICAga0V4cHJDYXRjaCwganNfdGFnX2luZGV4LAorICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAor
ICAgICAgICBrRXhwckNhdGNoLCB0YWdfaW5kZXgsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDIs
CisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCB0YWc7Cisg
IGZ1bmN0aW9uIGpzX2Z1bmMoKSB7CisgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlv
bih0YWcsIFtdKTsKKyAgfQorICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHtt
OiB7anNfZnVuYywganNfdGFnfX0pOworICB0YWcgPSBqc190YWc7CisgIGFzc2VydEVxdWFscygx
LCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoKCkpOworICB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLndh
c21fdGFnOworICBhc3NlcnRFcXVhbHMoMiwgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaCgpKTsKK30p
KCk7CisKK2Z1bmN0aW9uIFRlc3RDYXRjaEpTKHR5cGVzX3N0ciwgdHlwZXMsIHZhbHVlcykgewor
ICAvLyBDcmVhdGUgYSBKUyBleGNlcHRpb24sIGNhdGNoIGl0IGluIHdhc20gYW5kIGNoZWNrIHRo
ZSB1bnBhY2tlZCB2YWx1ZShzKS4KKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgbGV0IGpzX3RhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IHR5
cGVzX3N0cn0pOworICBsZXQganNfZnVuY19pbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0KCdtJywg
J2pzX2Z1bmMnLCBrU2lnX3Zfdik7CisgIGxldCBzaWcxID0gbWFrZVNpZyh0eXBlcywgW10pOwor
ICBsZXQgc2lnMiA9IG1ha2VTaWcoW10sIHR5cGVzKTsKKyAgbGV0IGpzX3RhZ19pbmRleCA9IGJ1
aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAianNfdGFnIiwgc2lnMSk7CisgIGxldCB0YWdfaW5k
ZXggPSBidWlsZGVyLmFkZFRhZyhzaWcxKTsKKyAgbGV0IHJldHVybl90eXBlID0gYnVpbGRlci5h
ZGRUeXBlKHNpZzIpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgid2FzbV90YWciLCBrRXh0
ZXJuYWxUYWcsIHRhZ19pbmRleCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoIiwgc2ln
MikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIHJldHVybl90eXBlLAorICAg
ICAgICBrRXhwckNhbGxGdW5jdGlvbiwganNfZnVuY19pbmRleCwKKyAgICAgICAga0V4cHJVbnJl
YWNoYWJsZSwKKyAgICAgICAga0V4cHJDYXRjaCwganNfdGFnX2luZGV4LAorICAgICAgICBrRXhw
ckNhdGNoLCB0YWdfaW5kZXgsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGxldCBleGNlcHRpb247CisgIGZ1bmN0aW9uIGpzX2Z1bmMoKSB7CisgICAgdGhyb3cg
ZXhjZXB0aW9uOworICB9CisgIGxldCBleHBlY3RlZCA9IHZhbHVlcy5sZW5ndGggPT0gMSA/IHZh
bHVlc1swXSA6IHZhbHVlczsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7
bToge2pzX2Z1bmMsIGpzX3RhZ319KTsKKyAgZXhjZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4
Y2VwdGlvbihqc190YWcsIHZhbHVlcyk7CisgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgaW5zdGFu
Y2UuZXhwb3J0cy5jYXRjaCgpKTsKKyAgZXhjZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2Vw
dGlvbihpbnN0YW5jZS5leHBvcnRzLndhc21fdGFnLCB2YWx1ZXMpOworICBhc3NlcnRFcXVhbHMo
ZXhwZWN0ZWQsIGluc3RhbmNlLmV4cG9ydHMuY2F0Y2goKSk7Cit9CisKKyhmdW5jdGlvbiBUZXN0
Q2F0Y2hKU0V4Y2VwdGlvbldpdGhQYXlsb2FkKCkgeworICBUZXN0Q2F0Y2hKUyhbJ2kzMiddLCBb
a1dhc21JMzJdLCBbMV0pOworICBUZXN0Q2F0Y2hKUyhbJ2k2NCddLCBba1dhc21JNjRdLCBbMm5d
KTsKKyAgVGVzdENhdGNoSlMoWydmMzInXSwgW2tXYXNtRjMyXSwgWzNdKTsKKyAgVGVzdENhdGNo
SlMoWydmNjQnXSwgW2tXYXNtRjY0XSwgWzRdKTsKKyAgVGVzdENhdGNoSlMoWydleHRlcm5yZWYn
XSwgW2tXYXNtRXh0ZXJuUmVmXSwgW3t2YWx1ZTogNX1dKTsKKyAgVGVzdENhdGNoSlMoWydpMzIn
LCAnaTY0JywgJ2YzMicsICdmNjQnLCAnZXh0ZXJucmVmJ10sCisgICAgICAgICAgICAgIFtrV2Fz
bUkzMiwga1dhc21JNjQsIGtXYXNtRjMyLCBrV2FzbUY2NCwga1dhc21FeHRlcm5SZWZdLAorICAg
ICAgICAgICAgICBbNiwgN24sIDgsIDksIHt2YWx1ZTogMTB9XSk7Cit9KSgpOworCitmdW5jdGlv
biBUZXN0R2V0QXJnSGVscGVyKHR5cGVzX3N0ciwgdHlwZXMsIHZhbHVlcykgeworICBsZXQgdGFn
ID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogdHlwZXNfc3RyfSk7CisgIGxldCBl
eGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgdmFsdWVzKTsKKyAgZm9y
IChpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgYXNzZXJ0RXF1YWxzKGV4Y2Vw
dGlvbi5nZXRBcmcodGFnLCBpKSwgdmFsdWVzW2ldKTsKKyAgfQorCisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBzaWcgPSBtYWtlU2lnKHR5cGVzLCBbXSk7
CisgIGxldCB0YWdfaW5kZXggPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgInQiLCBzaWcp
OworICBsZXQgYm9keSA9IFtdOworICBmb3IgKGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyArK2kp
IHsKKyAgICBib2R5LnB1c2goa0V4cHJMb2NhbEdldCwgaSk7CisgIH0KKyAgYm9keS5wdXNoKGtF
eHByVGhyb3csIHRhZ19pbmRleCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93Iiwgc2ln
KQorICAgICAgLmFkZEJvZHkoYm9keSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBi
dWlsZGVyLmluc3RhbnRpYXRlKHsnbSc6IHsndCc6IHRhZ319KTsKKyAgdHJ5IHsKKyAgICBpbnN0
YW5jZS5leHBvcnRzLnRocm93KC4uLnZhbHVlcyk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBmb3Ig
KGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgIGFzc2VydEVxdWFscyhlLmdl
dEFyZyh0YWcsIGkpLCB2YWx1ZXNbaV0pOworICAgIH0KKyAgfQorfQorCisoZnVuY3Rpb24gVGVz
dEdldEFyZygpIHsKKyAgLy8gQ2hlY2sgZXJyb3JzLgorICBsZXQgdGFnID0gbmV3IFdlYkFzc2Vt
Ymx5LlRhZyh7cGFyYW1ldGVyczogWydpMzInXX0pOworICBsZXQgZXhjZXB0aW9uID0gbmV3IFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFswXSk7CisgIGFzc2VydFRocm93cygoKSA9PiBleGNl
cHRpb24uZ2V0QXJnKDAsIDApLCBUeXBlRXJyb3IsCisgICAgICAvRmlyc3QgYXJndW1lbnQgbXVz
dCBiZSBhIFdlYkFzc2VtYmx5LlRhZy8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0aW9u
LmdldEFyZyh7fSwgMCksIFR5cGVFcnJvciwKKyAgICAgIC9GaXJzdCBhcmd1bWVudCBtdXN0IGJl
IGEgV2ViQXNzZW1ibHkuVGFnLyk7CisgIC8vYXNzZXJ0VGhyb3dzKCgpID0+IGV4Y2VwdGlvbi5n
ZXRBcmcodGFnLCB1bmRlZmluZWQpLCBUeXBlRXJyb3IsCisgICAgICAvLy9JbmRleCBtdXN0IGJl
IGNvbnZlcnRpYmxlIHRvIGEgdmFsaWQgbnVtYmVyLyk7CisgIGFzc2VydFRocm93cygoKSA9PiBl
eGNlcHRpb24uZ2V0QXJnKHRhZywgMHhGRkZGRkZGRiksIFJhbmdlRXJyb3IsCisgICAgICAvSW5k
ZXggb3V0IG9mIHJhbmdlLyk7CisgIGxldCB3cm9uZ190YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFn
KHtwYXJhbWV0ZXJzOiBbJ2kzMiddfSk7CisgIGFzc2VydFRocm93cygoKSA9PiBleGNlcHRpb24u
Z2V0QXJnKHdyb25nX3RhZywgMCksIFR5cGVFcnJvciwKKyAgICAgIC9GaXJzdCBhcmd1bWVudCBk
b2VzIG5vdCBtYXRjaCB0aGUgZXhjZXB0aW9uIHRhZy8pOworCisgIC8vIENoZWNrIGRlY29kaW5n
LgorICBUZXN0R2V0QXJnSGVscGVyKFsnaTMyJ10sIFtrV2FzbUkzMl0sIFsxXSk7CisgIFRlc3RH
ZXRBcmdIZWxwZXIoWydpNjQnXSwgW2tXYXNtSTY0XSwgWzJuXSk7CisgIFRlc3RHZXRBcmdIZWxw
ZXIoWydmMzInXSwgW2tXYXNtRjMyXSwgWzNdKTsKKyAgVGVzdEdldEFyZ0hlbHBlcihbJ2Y2NCdd
LCBba1dhc21GNjRdLCBbNF0pOworICBUZXN0R2V0QXJnSGVscGVyKFsnZXh0ZXJucmVmJ10sIFtr
V2FzbUV4dGVyblJlZl0sIFt7dmFsOiA1fV0pOworICBUZXN0R2V0QXJnSGVscGVyKFsnaTMyJywg
J2k2NCcsICdmMzInLCAnZjY0JywgJ2V4dGVybnJlZiddLCBba1dhc21JMzIsIGtXYXNtSTY0LCBr
V2FzbUYzMiwga1dhc21GNjQsIGtXYXNtRXh0ZXJuUmVmXSwgWzUsIDZuLCA3LCA4LCB7dmFsOiA5
fV0pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RFeGNlcHRpb25JcygpIHsKKyAgbGV0IHRhZzEg
PSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbXX0pOworICBsZXQgdGFnMiA9IG5l
dyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFtdfSk7CisgIGFzc2VydFRocm93cygoKSA9
PiBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHt9LCBbXSksIFR5cGVFcnJvciwKKyAgICAgIC9l
eHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIFdlYkFzc2VtYmx5LlRhZy8pOworCisg
IGxldCBleGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZzEsIFtdKTsKKyAg
YXNzZXJ0VHJ1ZShleGNlcHRpb24uaXModGFnMSkpOworICBhc3NlcnRGYWxzZShleGNlcHRpb24u
aXModGFnMikpOworCisgIGFzc2VydFRocm93cygoKSA9PiBleGNlcHRpb24uaXMuYXBwbHkoe30s
IHRhZzEpLCBUeXBlRXJyb3IsCisgICAgICAvV2ViQXNzZW1ibHkuRXhjZXB0aW9uIG9wZXJhdGlv
biBjYWxsZWQgb24gbm9uLUV4Y2VwdGlvbiBvYmplY3QvKTsKK30pKCk7CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1leHBvcnQuanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhj
ZXB0aW9ucy1leHBvcnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGM5NjkwZjViODhmN2U1NDNjZGM5M2Q5MWNj
MWE4MTgzZDgzODNiZgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRp
b25zLWV4cG9ydC5qcwpAQCAtMCwwICsxLDUzIEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUgVjgg
cHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwb3NlLXdhc20g
LS1leHBlcmltZW50YWwtd2FzbS1laAorCitsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7
CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0TXVsdGlwbGUoKSB7CisgIGxldCBidWlsZGVyID0gbmV3
IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9pKTsKKyAgYnVp
bGRlci5hZGRFeHBvcnRPZktpbmQoImV4MWEiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDEpOworICBi
dWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgxYiIsIGtFeHRlcm5hbFRhZywgZXhjZXB0MSk7Cisg
IGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDIpOwor
ICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0VHJ1ZShP
YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5zdGFuY2UuZXhwb3J0cywgJ2V4
MWEnKSk7CisgIGFzc2VydFRydWUoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxs
KGluc3RhbmNlLmV4cG9ydHMsICdleDFiJykpOworICBhc3NlcnRUcnVlKE9iamVjdC5wcm90b3R5
cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnN0YW5jZS5leHBvcnRzLCAnZXgyJykpOworICAvLyBG
SVhNRTogZml4IGJyb2tlbiB2OCB3YXNtIGV4Y2VwdGlvbnMgdGVzdHMKKyAgLy8gYXNzZXJ0U2Ft
ZShpbnN0YW5jZS5leHBvcnRzLmV4MWEsIGluc3RhbmNlLmV4cG9ydHMuZXgxYik7CisgIGFzc2Vy
dE5vdFNhbWUoaW5zdGFuY2UuZXhwb3J0cy5leDFhLCBpbnN0YW5jZS5leHBvcnRzLmV4Mik7Cit9
KSgpOworCisoZnVuY3Rpb24gVGVzdEV4cG9ydE91dE9mQm91bmRzKCkgeworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRU
YWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXhfb29iIiwga0V4dGVy
bmFsVGFnLCBleGNlcHQgKyAxKTsKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRl
ci5pbnN0YW50aWF0ZSgpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsCisgICAgICAvV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMTogMHRoIEV4cG9ydCBoYXMgaW52
YWxpZCBleGNlcHRpb24gbnVtYmVyIDEgaXQgZXhjZWVkcyB0aGUgZXhjZXB0aW9uIGluZGV4IHNw
YWNlIDEsIG5hbWVkICdleF9vb2InLyk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEV4cG9ydFNh
bWVOYW1lVHdpY2UoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7
CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRk
RXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgYnVpbGRlci5hZGRF
eHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBhc3NlcnRUaHJvd3Mo
CisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKCksIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwKKyAgICAgIC9XZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMw
OiBkdXBsaWNhdGUgZXhwb3J0OiAnZXgnLyk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEV4cG9y
dE1vZHVsZUdldEV4cG9ydHMoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWls
ZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxk
ZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IG1v
ZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci50b0J1ZmZlcigpKTsKKworICBs
ZXQgZXhwb3J0cyA9IFdlYkFzc2VtYmx5Lk1vZHVsZS5leHBvcnRzKG1vZHVsZSk7CisgIGFzc2Vy
dEFycmF5RXF1YWxzKFt7IG5hbWU6ICJleCIsIGtpbmQ6ICJ0YWciIH1dLCBleHBvcnRzKTsKK30p
KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1leHRlcm5yZWYuanMg
Yi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1leHRlcm5yZWYuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWJi
ZGEzN2YxNmViMTUwMzI0OTA5ZDZiNmM1MGZkYWE4ZDA0OGQ1NAotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWV4dGVybnJlZi5qcwpAQCAtMCwwICsxLDk2IEBA
CisvLyBDb3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KworLy8gRmxhZ3M6IC0tZXhwZXJpbWVudGFsLXdhc20tZWggLS1leHBlcmltZW50YWwtd2FzbS1y
ZWZ0eXBlcyAtLWFsbG93LW5hdGl2ZXMtc3ludGF4CisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxk
ZXIuanMiKTsKK2xvYWQoImV4Y2VwdGlvbnMtdXRpbHMuanMiKTsKKworLy8gVGVzdCB0aGUgZW5j
b2Rpbmcgb2YgYSB0aHJvd24gZXhjZXB0aW9uIHdpdGggYSBudWxsLXJlZiB2YWx1ZS4KKyhmdW5j
dGlvbiBUZXN0VGhyb3dSZWZOdWxsKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3IpOworICBi
dWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19udWxsIiwga1NpZ192X3YpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHByUmVmTnVsbCwga0V4dGVyblJlZkNvZGUsCisgICAgICAgIGtFeHBy
VGhyb3csIGV4Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBv
cnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBi
dWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5z
dGFuY2UuZXhwb3J0cy5leCwgW251bGxdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X251
bGwoKSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nL2NhdGNoaW5nIHRoZSBudWxsLXJlZiB2
YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFJlZk51bGwoKSB7CisgIGxldCBidWlsZGVy
ID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRh
ZyhrU2lnX3Zfcik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X2NhdGNoX251bGwiLCBr
U2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAor
ICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJJMzJFcXosCisgICAg
ICAgICAga0V4cHJJZiwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwclJlZk51bGwsIGtFeHRl
cm5SZWZDb2RlLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtF
eHByRWxzZSwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDQyLAorICAgICAgICAgIGtFeHBy
RW5kLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJSZWZJc051
bGwsCisgICAgICAgICAga0V4cHJJZiwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckkzMkNv
bnN0LCAyMywKKyAgICAgICAgICBrRXhwckVsc2UsCisgICAgICAgICAgICBrRXhwclVucmVhY2hh
YmxlLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4
cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFn
LCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAg
YXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX251bGwoMCkpOwor
ICBhc3NlcnRFcXVhbHMoNDIsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfbnVsbCgxKSk7
Cit9KSgpOworCisvLyBUZXN0IHRoZSBlbmNvZGluZyBvZiBhIHRocm93biBleGNlcHRpb24gd2l0
aCBhIHJlZmVyZW5jZSB0eXBlIHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd1JlZlBhcmFtKCkg
eworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0
ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3IpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJv
d19wYXJhbSIsIGtTaWdfdl9yKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2Fs
R2V0LCAwLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0
KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBsZXQgbyA9IG5l
dyBPYmplY3QoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBv
cnRzLmV4LCBbb10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0obykpOworICBh
c3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbMV0sICgpID0+
IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oMSkpOworICBhc3NlcnRXYXNtVGhyb3dzKGlu
c3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbMi4zXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0
cy50aHJvd19wYXJhbSgyLjMpKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFu
Y2UuZXhwb3J0cy5leCwgWyJzdHIiXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJh
bSgic3RyIikpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2luZy9jYXRjaGluZyB0aGUgcmVmZXJl
bmNlIHR5cGUgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hSZWZQYXJhbSgpIHsKKyAg
bGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1
aWxkZXIuYWRkVGFnKGtTaWdfdl9yKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfY2F0
Y2hfcGFyYW0iLCBrU2lnX3JfcikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnks
IGtFeHRlcm5SZWZDb2RlLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAg
a0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAg
ICAgLy8gZmFsbC10aHJvdWdoCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVu
YygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2Vw
dCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgbGV0IG8gPSBu
ZXcgT2JqZWN0KCk7CisKKyAgYXNzZXJ0RXF1YWxzKG8sIGluc3RhbmNlLmV4cG9ydHMudGhyb3df
Y2F0Y2hfcGFyYW0obykpOworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50aHJv
d19jYXRjaF9wYXJhbSgxKSk7CisgIGFzc2VydEVxdWFscygyLjMsIGluc3RhbmNlLmV4cG9ydHMu
dGhyb3dfY2F0Y2hfcGFyYW0oMi4zKSk7CisgIGFzc2VydEVxdWFscygic3RyIiwgaW5zdGFuY2Uu
ZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgic3RyIikpOworfSkoKTsKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWltcG9ydC5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNl
cHRpb25zLWltcG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTRmMGEwNTZiZmNmN2NjMDMzNWVkZmIwYzcx
MmU1NWI1ZTcxYTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlv
bnMtaW1wb3J0LmpzCkBAIC0wLDAgKzEsOTAgQEAKKy8vIENvcHlyaWdodCAyMDE4IHRoZSBWOCBw
cm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1leHBvc2Utd2FzbSAt
LWV4cGVyaW1lbnRhbC13YXNtLWVoCisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsK
KworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJldHVybiBhIG5ldyBleHBvcnRlZCBleGNlcHRpb24g
d2l0aCB0aGUge2tTaWdfdl92fSB0eXBlCisvLyBzaWduYXR1cmUgZnJvbSBhbiBhbm9ueW1vdXMg
bW9kdWxlLiBUaGUgdW5kZXJseWluZyBtb2R1bGUgaXMgdGhyb3duIGF3YXkuCisvLyBUaGlzIGFs
bG93cyB0ZXN0cyB0byByZWFzb24gc29sZWx5IGFib3V0IGltcG9ydGluZyBleGNlcHRpb25zLgor
ZnVuY3Rpb24gTmV3RXhwb3J0ZWRUYWcoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1
bGVCdWlsZGVyKCk7CisgIGxldCB0YWcgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1
aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJ0Iiwga0V4dGVybmFsVGFnLCB0YWcpOworICBsZXQgaW5z
dGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIHJldHVybiBpbnN0YW5jZS5leHBvcnRz
LnQ7Cit9CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0U2ltcGxlKCkgeworICBsZXQgZXhwb3J0ZWQg
PSBOZXdFeHBvcnRlZFRhZygpOworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleCIsIGtT
aWdfdl92KTsKKworICBhc3NlcnREb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0
ZSh7IG06IHsgZXg6IGV4cG9ydGVkIH19KSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEltcG9y
dE11bHRpcGxlKCkgeworICBsZXQgZXhwb3J0ZWQgPSBOZXdFeHBvcnRlZFRhZygpOworICBsZXQg
YnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxk
ZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgxIiwga1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9
IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgyIiwga1NpZ192X3YpOworICBsZXQgZXhj
ZXB0MyA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktp
bmQoImV4MiIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Mik7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZL
aW5kKCJleDMiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDMpOworICBsZXQgaW5zdGFuY2UgPSBidWls
ZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDE6IGV4cG9ydGVkLCBleDI6IGV4cG9ydGVkIH19KTsK
KworICBhc3NlcnRUcnVlKGV4Y2VwdDEgPCBleGNlcHQzICYmIGV4Y2VwdDIgPCBleGNlcHQzKTsK
KyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgaW5zdGFuY2UuZXhwb3J0cy5leDEpOworICAvLyBG
SVhNRTogZml4IGJyb2tlbiB2OCB3YXNtIGV4Y2VwdGlvbnMgdGVzdHMKKyAgLy8gYXNzZXJ0U2Ft
ZShleHBvcnRlZCwgaW5zdGFuY2UuZXhwb3J0cy5leDIpOworICBhc3NlcnROb3RTYW1lKGV4cG9y
dGVkLCBpbnN0YW5jZS5leHBvcnRzLmV4Myk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEltcG9y
dE1pc3NpbmcoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7Cisg
IGxldCBleGNlcHQgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X3Yp
OworCisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoe30p
LCBUeXBlRXJyb3IsCisgICAgICAvaW1wb3J0IG06ZXggbXVzdCBiZSBhbiBvYmplY3QvKTsKKyAg
YXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHt9fSks
IFdlYkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9UYWcgaW1wb3J0IG06ZXggaXMgbm90IGFu
IGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhZy8pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJ
bXBvcnRWYWx1ZU1pc21hdGNoKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVp
bGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleCIs
IGtTaWdfdl92KTsKKworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3Rh
bnRpYXRlKHsgbTogeyBleDogMjMgfX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAv
VGFnIGltcG9ydCBtOmV4IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWcvKTsK
KyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsg
ZXg6IHt9IH19KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAorICAgICAgL1RhZyBpbXBvcnQgbTpl
eCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFnLyk7CisgIHZhciBtb25rZXkg
PSBPYmplY3QuY3JlYXRlKE5ld0V4cG9ydGVkVGFnKCkpOworICBhc3NlcnRUaHJvd3MoCisgICAg
ICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDogbW9ua2V5IH19KSwgV2ViQXNz
ZW1ibHkuTGlua0Vycm9yLAorICAgICAgL1RhZyBpbXBvcnQgbTpleCBpcyBub3QgYW4gaW5zdGFu
Y2Ugb2YgV2ViQXNzZW1ibHkuVGFnLyk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEltcG9ydFNp
Z25hdHVyZU1pc21hdGNoKCkgeworICBsZXQgZXhwb3J0ZWQgPSBOZXdFeHBvcnRlZFRhZygpOwor
ICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0g
YnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleCIsIGtTaWdfdl9pKTsKKworICBhc3NlcnRU
aHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDogZXhwb3J0
ZWQgfX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvaW1wb3J0ZWQgVGFnIG06ZXgg
c2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIGltcG9ydGVkIFdlYkFzc2VtYmx5IFRhZydzIHNp
Z25hdHVyZS8pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RJbXBvcnRNb2R1bGVHZXRJbXBvcnRz
KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhj
ZXB0ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleCIsIGtTaWdfdl92KTsKKyAgbGV0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci50b0J1ZmZlcigpKTsKKwor
ICBsZXQgaW1wb3J0cyA9IFdlYkFzc2VtYmx5Lk1vZHVsZS5pbXBvcnRzKG1vZHVsZSk7CisgIGFz
c2VydEFycmF5RXF1YWxzKFt7IG1vZHVsZTogIm0iLCBuYW1lOiAiZXgiLCBraW5kOiAidGFnIiB9
XSwgaW1wb3J0cyk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlv
bnMtcmV0aHJvdy5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXJldGhyb3cuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTIzMzliZWYyZjY5NDJiZDVmNmU1ZWIzNWQ3MTg5YzJjYWM1OTBhOAotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXJldGhyb3cuanMKQEAgLTAs
MCArMSwxNDIgQEAKKy8vIENvcHlyaWdodCAyMDE4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1leHBvc2Utd2FzbSAtLWV4cGVyaW1lbnRhbC13YXNt
LWVoIC0tYWxsb3ctbmF0aXZlcy1zeW50YXgKKworbG9hZCgid2FzbS1tb2R1bGUtYnVpbGRlci5q
cyIpOworbG9hZCgiZXhjZXB0aW9ucy11dGlscy5qcyIpOworCisvLyBUZXN0IHRoYXQgcmV0aHJv
dyBleHByZXNzaW9ucyBjYW4gdGFyZ2V0IGNhdGNoIGJsb2Nrcy4KKyhmdW5jdGlvbiBUZXN0UmV0
aHJvd0luQ2F0Y2goKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7
CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRk
RnVuY3Rpb24oInJldGhyb3cwIiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAg
IGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAg
ICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJSZXRocm93LCAwLAorICAg
ICAgICBrRXhwckVuZCwKKyAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEZ1bmN0aW9u
KCJyZXRocm93MSIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRy
eSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICBrRXhw
ckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBr
RXhwckkzMkVxeiwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICBr
RXhwclJldGhyb3csIDEsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAga0V4cHJJMzJD
b25zdCwgMjMsCisgICAgICAgIGtFeHByRW5kCisgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRl
ci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5z
dGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0
YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMucmV0
aHJvdzAoKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMu
ZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3cxKDApKTsKKyAgYXNzZXJ0RXF1
YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3cxKDEpKTsKK30pKCk7CisKKy8vIFRlc3Qg
dGhhdCByZXRocm93IGV4cHJlc3Npb25zIGNhbiB0YXJnZXQgY2F0Y2gtYWxsIGJsb2Nrcy4KKyhm
dW5jdGlvbiBUZXN0UmV0aHJvd0luQ2F0Y2hBbGwoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdh
c21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zf
dik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInJldGhyb3cwIiwga1NpZ192X3YpCisgICAgICAu
YWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJU
aHJvdywgZXhjZXB0LAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICAgIGtFeHByUmV0
aHJvdywgMCwKKyAgICAgICAga0V4cHJFbmQsCisgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRl
ci5hZGRGdW5jdGlvbigicmV0aHJvdzEiLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAg
ICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwK
KyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAg
ICAgICAgIGtFeHBySTMyRXF6LAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAg
ICAgICAgIGtFeHByUmV0aHJvdywgMSwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICBr
RXhwckkzMkNvbnN0LCAyMywKKyAgICAgICAga0V4cHJFbmQKKyAgXSkuZXhwb3J0RnVuYygpOwor
ICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7Cisg
IGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhy
b3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhw
b3J0cy5yZXRocm93MCgpKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2Uu
ZXhwb3J0cy5leCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMucmV0aHJvdzEoMCkpOworICBh
c3NlcnRFcXVhbHMoMjMsIGluc3RhbmNlLmV4cG9ydHMucmV0aHJvdzEoMSkpOworfSkoKTsKKwor
Ly8gVGVzdCB0aGF0IHJldGhyb3cgZXhwcmVzc2lvbiBwcm9wZXJseSB0YXJnZXQgdGhlIGNvcnJl
Y3Qgc3Vycm91bmRpbmcgdHJ5CisvLyBibG9jayBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiBtdWx0
aXBsZSBoYW5kbGVycyBiZWluZyBpbnZvbHZlZC4KKyhmdW5jdGlvbiBUZXN0UmV0aHJvd05lc3Rl
ZCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4
Y2VwdDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRl
ci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJyZXRocm93X25lc3Rl
ZCIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21J
MzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MiwKKyAgICAgICAga0V4cHJDYXRjaCwg
ZXhjZXB0MiwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhw
clRocm93LCBleGNlcHQxLAorICAgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAgICAg
ICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMCwKKyAg
ICAgICAgICAgIGtFeHBySTMyRXEsCisgICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisg
ICAgICAgICAgICAgIGtFeHByUmV0aHJvdywgMSwKKyAgICAgICAgICAgIGtFeHByRW5kLAorICAg
ICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEs
CisgICAgICAgICAgICBrRXhwckkzMkVxLAorICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lk
LAorICAgICAgICAgICAgICBrRXhwclJldGhyb3csIDIsCisgICAgICAgICAgICBrRXhwckVuZCwK
KyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIzLAorICAgICAgICAgIGtFeHByRW5kLAorICAg
ICAgICBrRXhwckVuZCwKKyAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9m
S2luZCgiZXgxIiwga0V4dGVybmFsVGFnLCBleGNlcHQxKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRP
ZktpbmQoImV4MiIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Mik7CisgIGxldCBpbnN0YW5jZSA9IGJ1
aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0
YW5jZS5leHBvcnRzLmV4MSwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMucmV0aHJvd19uZXN0
ZWQoMCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4
MiwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMucmV0aHJvd19uZXN0ZWQoMSkpOworICBhc3Nl
cnRFcXVhbHMoMjMsIGluc3RhbmNlLmV4cG9ydHMucmV0aHJvd19uZXN0ZWQoMikpOworfSkoKTsK
KworLy8gVGVzdCB0aGF0IGFuIGV4Y2VwdGlvbiBiZWluZyByZXRocm93IGNhbiBiZSBjYXVnaHQg
YnkgYW5vdGhlciBsb2NhbCBjYXRjaAorLy8gYmxvY2sgaW4gdGhlIHNhbWUgZnVuY3Rpb24gd2l0
aG91dCBldmVyIHVud2luZGluZyB0aGUgYWN0aXZhdGlvbi4KKyhmdW5jdGlvbiBUZXN0UmV0aHJv
d1JlY2F0Y2goKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7Cisg
IGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVu
Y3Rpb24oInJldGhyb3dfcmVjYXRjaCIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAg
ICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAor
ICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMy
LAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAgIGtFeHBySTMyRXF6
LAorICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAgICBrRXhwclJl
dGhyb3csIDIsCisgICAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29u
c3QsIDQyLAorICAgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDIzLAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckVuZCwKKyAg
XSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJu
YWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsK
KworICBhc3NlcnRFcXVhbHMoMjMsIGluc3RhbmNlLmV4cG9ydHMucmV0aHJvd19yZWNhdGNoKDAp
KTsKKyAgYXNzZXJ0RXF1YWxzKDQyLCBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3dfcmVjYXRjaCgx
KSk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtc2hhcmVk
LmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtc2hhcmVkLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1
MmY1YmE4YTEzNzE2MWZmNzU3NzVhNGM5ZTIxMGY5MGNkMjg4MzUKLS0tIC9kZXYvbnVsbAorKysg
Yi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1zaGFyZWQuanMKQEAgLTAsMCArMSwxNTMgQEAK
Ky8vIENvcHlyaWdodCAyMDE4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
CisvLyBGbGFnczogLS1leHBvc2Utd2FzbSAtLWV4cGVyaW1lbnRhbC13YXNtLWVoCisKK2xvYWQo
Indhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJldHVy
biBhIG5ldyBleHBvcnRlZCBleGNlcHRpb24gd2l0aCB0aGUge2tTaWdfdl92fSB0eXBlCisvLyBz
aWduYXR1cmUgZnJvbSBhbiBhbm9ueW1vdXMgbW9kdWxlLiBUaGUgdW5kZXJseWluZyBtb2R1bGUg
aXMgdGhyb3duIGF3YXkuCitmdW5jdGlvbiBOZXdFeHBvcnRlZEV4Y2VwdGlvbigpIHsKKyAgbGV0
IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4
dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRl
KCk7CisgIHJldHVybiBpbnN0YW5jZS5leHBvcnRzLmV4OworfQorCisvLyBDaGVjayB0aGF0IGFu
IGluc3RhbmNlIG1hdGNoZXMgYW4gZXhjZXB0aW9uIHRocm93biBieSBpdHNlbGYsIGV2ZW4gd2hl
biB0aGUKKy8vIGV4Y2VwdGlvbiBpcyByZS10aHJvd24gYnkgYSByZWd1bGFyIEphdmFTY3JpcHQg
ZnVuY3Rpb24uCisoZnVuY3Rpb24gVGVzdFNpbmdsZUluc3RhbmNlKCkgeworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgc2lnX2luZGV4ID0gYnVpbGRlci5h
ZGRUeXBlKGtTaWdfdl92KTsKKyAgbGV0IGZ1biA9IGJ1aWxkZXIuYWRkSW1wb3J0KCJtIiwgImYi
LCBzaWdfaW5kZXgpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOwor
ICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHko
WworICAgICAgICBrRXhwclRocm93LCBleGNlcHQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAg
YnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2giLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlv
biwgZnVuLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByRW5kLAor
ICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgZXhfb2JqID0gbmV3IEVycm9yKCJteSBleGNl
cHRpb24iKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZjog
ZnVuY3Rpb24oKSB7IHRocm93IGV4X29iaiB9fX0pOworCisgIGFzc2VydFRocm93cygoKSA9PiBp
bnN0YW5jZS5leHBvcnRzLnRocm93KCksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFzc2Vy
dFRocm93c0VxdWFscygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmNhdGNoKCksIGV4X29iaik7Cisg
IHRyeSB7CisgICAgaW5zdGFuY2UuZXhwb3J0cy50aHJvdygpOworICB9IGNhdGNoIChlKSB7Cisg
ICAgZXhfb2JqID0gZTsKKyAgfQorICBhc3NlcnREb2VzTm90VGhyb3coKCkgPT4gaW5zdGFuY2Uu
ZXhwb3J0cy5jYXRjaCgpKTsKK30pKCk7CisKKy8vIENoZWNrIHRoYXQgdHdvIGluc3RhbmNlcyBk
aXN0aW5ndWlzaCB0aGVpciBpbmRpdmlkdWFsIGV4Y2VwdGlvbnMgaWYgdGhleSBhcmUKKy8vIG5v
dCBzaGFyZWQsIGV2ZW4gd2hlbiBkZWNsYXJlZCBieSB0aGUgc2FtZSB1bmRlcmx5aW5nIG1vZHVs
ZS4KKyhmdW5jdGlvbiBUZXN0TXVsdGlJbnN0YW5jZU5vblNoYXJlZCgpIHsKKyAgbGV0IGJ1aWxk
ZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IHNpZ19pbmRleCA9IGJ1aWxkZXIu
YWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBmdW4gPSBidWlsZGVyLmFkZEltcG9ydCgibSIsICJm
Iiwgc2lnX2luZGV4KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsK
KyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5
KFsKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0CisgICAgICBdKS5leHBvcnRGdW5jKCk7Cisg
IGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoIiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShb
CisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rp
b24sIGZ1biwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwckVuZCwK
KyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGV4X29iaiA9IG5ldyBFcnJvcigibXkgZXhj
ZXB0aW9uIik7CisgIGxldCBpbnN0YW5jZTEgPSBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBm
OiBhc3NlcnRVbnJlYWNoYWJsZSB9fSk7CisgIGxldCBpbnN0YW5jZTIgPSBidWlsZGVyLmluc3Rh
bnRpYXRlKHsgbTogeyBmOiBmdW5jdGlvbigpIHsgdGhyb3cgZXhfb2JqIH19fSk7CisKKyAgYXNz
ZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlMS5leHBvcnRzLnRocm93KCksIFdlYkFzc2VtYmx5LkV4
Y2VwdGlvbik7CisgIGFzc2VydFRocm93c0VxdWFscygoKSA9PiBpbnN0YW5jZTIuZXhwb3J0cy5j
YXRjaCgpLCBleF9vYmopOworICB0cnkgeworICAgIGluc3RhbmNlMS5leHBvcnRzLnRocm93KCk7
CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBleF9vYmogPSBlOworICB9CisgIGFzc2VydFRocm93c0Vx
dWFscygoKSA9PiBpbnN0YW5jZTIuZXhwb3J0cy5jYXRjaCgpLCBleF9vYmopOworfSkoKTsKKwor
Ly8gQ2hlY2sgdGhhdCB0d28gaW5zdGFuY2VzIG1hdGNoIHRoZWlyIGV4Y2VwdGlvbnMgaWYgdGhl
eSBhcmUgc2hhcmVkIHByb3Blcmx5LAorLy8gZXZlbiBpZiB0aGUgbG9jYWwgZXhjZXB0aW9uIGlu
ZGV4IG9mIGV4cG9ydCBhbmQgaW1wb3J0IGlzIGRpZmZlcmVudC4KKyhmdW5jdGlvbiBUZXN0TXVs
dGlJbnN0YW5jZVNoYXJlZCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgbGV0IHNpZ19pbmRleCA9IGJ1aWxkZXIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxl
dCBmdW4gPSBidWlsZGVyLmFkZEltcG9ydCgibSIsICJmIiwgc2lnX2luZGV4KTsKKyAgbGV0IGV4
Y2VwdDEgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4MSIsIGtTaWdfdl92KTsKKyAg
bGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRXhw
b3J0T2ZLaW5kKCJleDIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDIpOworICBidWlsZGVyLmFkZEZ1
bmN0aW9uKCJ0aHJvdyIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhw
clRocm93LCBleGNlcHQyCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVu
Y3Rpb24oImNhdGNoIiwga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBy
VHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGZ1biwKKyAgICAg
ICAga0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBv
cnRGdW5jKCk7CisgIGxldCBleF9vYmogPSBuZXcgRXJyb3IoIm15IGV4Y2VwdGlvbiIpOworICBs
ZXQgaW5zdGFuY2UxID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZjogYXNzZXJ0VW5yZWFj
aGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleDE6
IE5ld0V4cG9ydGVkRXhjZXB0aW9uKCkgfX0pOworICBsZXQgaW5zdGFuY2UyID0gYnVpbGRlci5p
bnN0YW50aWF0ZSh7IG06IHsgZjogZnVuY3Rpb24oKSB7IHRocm93IGV4X29iaiB9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXgxOiBpbnN0YW5jZTEuZXhw
b3J0cy5leDIgfX0pOworCisgIGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZTEuZXhwb3J0cy50
aHJvdygpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkg
PT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2goKSwgZXhfb2JqKTsKKyAgdHJ5IHsKKyAgICBpbnN0
YW5jZTEuZXhwb3J0cy50aHJvdygpOworICB9IGNhdGNoIChlKSB7CisgICAgZXhfb2JqID0gZTsK
KyAgfQorICBhc3NlcnREb2VzTm90VGhyb3coKCkgPT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2go
KSk7Cit9KSgpOworCisvLyBDaGVjayB0aGF0IHR3byBpbnN0YW5jZXMgYmFzZWQgb24gZGlmZmVy
ZW50IG1vZHVsZXMgbWF0Y2ggdGhlaXIgZXhjZXB0aW9ucyBpZgorLy8gdGhleSBhcmUgc2hhcmVk
IHByb3Blcmx5LCBldmVuIGlmIHRoZSBsb2NhbCBleGNlcHRpb24gaW5kZXggaXMgZGlmZmVyZW50
LgorKGZ1bmN0aW9uIFRlc3RNdWx0aU1vZHVsZVNoYXJlZCgpIHsKKyAgbGV0IGJ1aWxkZXIxID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlcjEuYWRkVGFn
KGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyMS5hZGRUYWcoa1NpZ192X3YpOwor
ICBidWlsZGVyMS5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQyKTsK
KyAgYnVpbGRlcjEuYWRkRnVuY3Rpb24oInRocm93Iiwga1NpZ192X3YpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDIKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsK
KyAgbGV0IGJ1aWxkZXIyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBzaWdfaW5k
ZXggPSBidWlsZGVyMi5hZGRUeXBlKGtTaWdfdl92KTsKKyAgbGV0IGZ1biA9IGJ1aWxkZXIyLmFk
ZEltcG9ydCgibSIsICJmIiwgc2lnX2luZGV4KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIyLmFk
ZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X3YpOworICBidWlsZGVyMi5hZGRGdW5jdGlv
bigiY2F0Y2giLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnks
IGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgZnVuLAorICAgICAgICBr
RXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVu
YygpOworICBsZXQgZXhfb2JqID0gbmV3IEVycm9yKCJteSBleGNlcHRpb24iKTsKKyAgbGV0IGlu
c3RhbmNlMSA9IGJ1aWxkZXIxLmluc3RhbnRpYXRlKCk7CisgIGxldCBpbnN0YW5jZTIgPSBidWls
ZGVyMi5pbnN0YW50aWF0ZSh7IG06IHsgZjogZnVuY3Rpb24oKSB7IHRocm93IGV4X29iaiB9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4OiBpbnN0YW5j
ZTEuZXhwb3J0cy5leCB9fSk7CisKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlMS5leHBv
cnRzLnRocm93KCksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFzc2VydFRocm93c0VxdWFs
cygoKSA9PiBpbnN0YW5jZTIuZXhwb3J0cy5jYXRjaCgpLCBleF9vYmopOworICB0cnkgeworICAg
IGluc3RhbmNlMS5leHBvcnRzLnRocm93KCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBleF9vYmog
PSBlOworICB9CisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9PiBpbnN0YW5jZTIuZXhwb3J0cy5j
YXRjaCgpKTsKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy10
eXBlLXJlZmxlY3Rpb24uanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy10eXBlLXJlZmxl
Y3Rpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRjMjBlZGFlOGUwMjM1YWJmN2MyZTE5ZWJjNzE4MGZhYjA4
Y2Y1OQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXR5cGUt
cmVmbGVjdGlvbi5qcwpAQCAtMCwwICsxLDQ3IEBACisvLyBDb3B5cmlnaHQgMjAyMSB0aGUgVjgg
cHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwZXJpbWVudGFs
LXdhc20tZWggLS1leHBlcmltZW50YWwtd2FzbS10eXBlLXJlZmxlY3Rpb24KKworbG9hZCgid2Fz
bS1tb2R1bGUtYnVpbGRlci5qcyIpOworCitsZXQgdGVzdGNhc2VzID0gWwore3R5cGVzOiB7cGFy
YW1ldGVyczpbXX0sIHNpZzoga1NpZ192X3Z9LAore3R5cGVzOiB7cGFyYW1ldGVyczpbImkzMiJd
fSwgc2lnOiBrU2lnX3ZfaX0sCit7dHlwZXM6IHtwYXJhbWV0ZXJzOlsiaTY0Il19LCBzaWc6IGtT
aWdfdl9sfSwKK3t0eXBlczoge3BhcmFtZXRlcnM6WyJmNjQiLCAiZjY0IiwgImkzMiJdfSwgc2ln
OiBrU2lnX3ZfZGRpfSwKK3t0eXBlczoge3BhcmFtZXRlcnM6WyJmMzIiXX0sIHNpZzoga1NpZ192
X2Z9LAorXTsKKworKGZ1bmN0aW9uIFRlc3RFeHBvcnQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3
IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisKKyAgdGVzdGNhc2VzLmZvckVhY2goZnVuY3Rpb24oZXhw
ZWN0ZWQsIGkpIHsKKyAgICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoZXhwZWN0ZWQuc2ln
KTsKKyAgICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiICsgaSwga0V4dGVybmFsVGFnLCBl
eGNlcHQpOworICB9KTsKKworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7
CisgIHRlc3RjYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGV4cGVjdGVkLCBpKSB7CisgICAgYXNzZXJ0
RXF1YWxzKGluc3RhbmNlLmV4cG9ydHNbImV4IiArIGldLnR5cGUoKSwgZXhwZWN0ZWQudHlwZXMp
OworICB9KTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0RXhwb3J0KCkgeworCisgIGxl
dCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBpbXBvcnRzID0ge206
IHt9fTsKKworICB0ZXN0Y2FzZXMuZm9yRWFjaChmdW5jdGlvbihleHBlY3RlZCwgaSkgeworICAg
IGxldCB0ID0gbmV3IFdlYkFzc2VtYmx5LlRhZyhleHBlY3RlZC50eXBlcyk7CisgICAgbGV0IGlu
ZGV4ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIsICJleCIgKyBpLCBleHBlY3RlZC5zaWcp
OworICAgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIgKyBpLCBrRXh0ZXJuYWxUYWcsIGlu
ZGV4KTsKKyAgICBpbXBvcnRzLm1bImV4IiArIGldID0gdDsKKyAgfSk7CisKKyAgbGV0IGluc3Rh
bmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZShpbXBvcnRzKTsKKyAgdGVzdGNhc2VzLmZvckVhY2go
ZnVuY3Rpb24oZXhwZWN0ZWQsIGkpIHsKKyAgICBhc3NlcnRFcXVhbHMoaW5zdGFuY2UuZXhwb3J0
c1siZXgiICsgaV0udHlwZSgpLCBleHBlY3RlZC50eXBlcyk7CisgIH0pCit9KSgpOwpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtdXRpbHMuanMgYi9KU1Rlc3RzL3dhc20v
djgvZXhjZXB0aW9ucy11dGlscy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYmUxOTE5ZGVlNjgwMzIzY2ViMDkz
OTY0ZmU2MWE5NWYwNmRlNjk3Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4
Y2VwdGlvbnMtdXRpbHMuanMKQEAgLTAsMCArMSwyNyBAQAorLy8gQ29weXJpZ2h0IDIwMTggdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWFsbG93LW5h
dGl2ZXMtc3ludGF4CisKKy8vIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBsb2FkZWQgYnkg
b3RoZXIgdGVzdHMgdG8gcHJvdmlkZSB1dGlsaXR5IG1ldGhvZHMKKy8vIHJlcXVpcmluZyBuYXRp
dmVzIHN5bnRheCAoYW5kIGhlbmNlIG5vdCBzdWl0ZWQgZm9yIHRoZSBtanN1bml0LmpzIGZpbGUp
LgorCitmdW5jdGlvbiBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCB0YWcsIHZhbHVlcywgY29k
ZSkgeworICB0cnkgeworICAgIGlmICh0eXBlb2YgY29kZSA9PT0gJ2Z1bmN0aW9uJykgeworICAg
ICAgY29kZSgpOworICAgIH0gZWxzZSB7CisgICAgICBldmFsKGNvZGUpOworICAgIH0KKyAgfSBj
YXRjaCAoZSkgeworICAgIGFzc2VydEluc3RhbmNlb2YoZSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9u
KTsKKyAgICBhc3NlcnRUcnVlKGUuaXModGFnKSk7CisgICAgYXNzZXJ0RXF1YWxzKHZhbHVlcy5s
ZW5ndGgsIHRhZy50eXBlKCkucGFyYW1ldGVycy5sZW5ndGgpOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgdmFsdWVzLmxlbmd0aDsgKytpKQorICAgICAgYXNzZXJ0RXF1YWxzKHZhbHVlc1tpXSwg
ZS5nZXRBcmcodGFnLCBpKSk7CisgICAgcmV0dXJuOyAgLy8gU3VjY2Vzcy4KKyAgfQorICB0aHJv
dyBuZXcgTWpzVW5pdEFzc2VydGlvbkVycm9yKCdEaWQgbm90IHRocm93IGV4cGVjdGVkIDwnICsg
dGFnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPiB3aXRoIHZhbHVlczog
JyArIHZhbHVlcyk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy5q
cyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5MTU1MDQ1MDQ5
ODgxNzMwN2QyOTQ3NTAyYWIyYWZiYzA0YzYyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3dhc20vdjgvZXhjZXB0aW9ucy5qcwpAQCAtMCwwICsxLDEwODcgQEAKKy8vIENvcHlyaWdodCAy
MDE4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBGbGFnczogLS1l
eHBvc2Utd2FzbSAtLWV4cGVyaW1lbnRhbC13YXNtLWVoIC0tYWxsb3ctbmF0aXZlcy1zeW50YXgK
KworbG9hZCgid2FzbS1tb2R1bGUtYnVpbGRlci5qcyIpOworbG9hZCgiZXhjZXB0aW9ucy11dGls
cy5qcyIpOworCisvLyBUaGUgZm9sbG93aW5nIG1ldGhvZCBkb2Vzbid0IGF0dGVtcHQgdG8gY2F0
Y2ggYW4gcmFpc2VkIGV4Y2VwdGlvbi4KKyhmdW5jdGlvbiBUZXN0VGhyb3dTaW1wbGUoKSB7Cisg
IGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBi
dWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X2lm
X3BhcmFtX25vdF96ZXJvIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtF
eHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDAsCisgICAgICAgIGtFeHBy
STMyTmUsCisgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwclRocm93
LCBleGNlcHQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckkzMkNvbnN0LCAxCisg
ICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtF
eHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0
ZSgpOworCisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2lmX3BhcmFt
X25vdF96ZXJvKDApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhw
b3J0cy5leCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfaWZfcGFyYW1fbm90X3pl
cm8oMTApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5l
eCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfaWZfcGFyYW1fbm90X3plcm8oLTEp
KTsKK30pKCk7CisKKy8vIFRlc3QgdGhhdCBlbXB0eSB0cnkvY2F0Y2ggYmxvY2tzIHdvcmsuCiso
ZnVuY3Rpb24gVGVzdENhdGNoRW1wdHlCbG9ja3MoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdh
c21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zf
dik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoX2VtcHR5X3RyeSIsIGtTaWdfdl92KQor
ICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICBr
RXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVu
YygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0
RG9lc05vdFRocm93KGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hfZW1wdHlfdHJ5KTsKK30pKCk7CisK
Ky8vIE5vdyB0aGF0IHdlIGtub3cgdGhyb3dpbmcgd29ya3MsIHdlIHRlc3QgY2F0Y2hpbmcgdGhl
IGV4Y2VwdGlvbnMgd2UgcmFpc2UuCisoZnVuY3Rpb24gVGVzdENhdGNoU2ltcGxlKCkgeworICBs
ZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVp
bGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJzaW1wbGVfdGhy
b3dfY2F0Y2hfdG9fMF8xIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtF
eHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAg
IGtFeHBySTMyRXF6LAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAg
IGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICBrRXhw
ckkzMkNvbnN0LCA0MiwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtF
eHBySTMyQ29uc3QsIDIzLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygp
OworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1
YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnNpbXBsZV90aHJvd19jYXRjaF90b18wXzEoMCkpOwor
ICBhc3NlcnRFcXVhbHMoNDIsIGluc3RhbmNlLmV4cG9ydHMuc2ltcGxlX3Rocm93X2NhdGNoX3Rv
XzBfMSgxKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdFRyYXBOb3RDYXVnaHQoKSB7CisgIGxl
dCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rp
b24oJ3VucmVhY2hhYmxlX2luX3RyeScsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAg
ICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisg
ICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRG
dW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3Nl
cnRUcmFwcyhrVHJhcFVucmVhY2hhYmxlLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnVucmVhY2hh
YmxlX2luX3RyeSgpKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0VHJhcEluQ2FsbGVlTm90Q2F1
Z2h0KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQg
ZnVuY19kaXYgPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCdkaXYnLCBrU2lnX2lfaWkpLmFkZEJvZHko
WworICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICBrRXhw
ckkzMkRpdlUKKyAgXSk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3RyYXBfaW5fY2FsbGVlJywg
a1NpZ19pX2lpKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIs
CisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAx
LAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBmdW5jX2Rpdi5pbmRleCwKKyAgICAgICAg
a0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxMSwKKyAgICAgICAga0V4
cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5p
bnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygzLCBpbnN0YW5jZS5leHBvcnRzLnRyYXBf
aW5fY2FsbGVlKDcsIDIpKTsKKyAgYXNzZXJ0VHJhcHMoa1RyYXBEaXZCeVplcm8sICgpID0+IGlu
c3RhbmNlLmV4cG9ydHMudHJhcF9pbl9jYWxsZWUoMSwgMCkpOworfSkoKTsKKworKGZ1bmN0aW9u
IFRlc3RUcmFwVmlhSlNOb3RDYXVnaHQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1
bGVCdWlsZGVyKCk7CisgIGxldCBpbXAgPSBidWlsZGVyLmFkZEltcG9ydCgnaW1wJywgJ29ydCcs
IGtTaWdfaV92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbignZGl2Jywga1NpZ19pX2lpKQorICAg
ICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckxv
Y2FsR2V0LCAxLAorICAgICAgICBrRXhwckkzMkRpdlUKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsK
KyAgYnVpbGRlci5hZGRGdW5jdGlvbignY2FsbF9pbXBvcnQnLCBrU2lnX2lfdikKKyAgICAgIC5h
ZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByQ2Fs
bEZ1bmN0aW9uLCBpbXAsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJJ
MzJDb25zdCwgMTEsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7Cisg
IGxldCBleGNlcHRpb24gPSB1bmRlZmluZWQ7CisgIGxldCBpbnN0YW5jZTsKKyAgZnVuY3Rpb24g
anNfaW1wb3J0KCkgeworICAgIHRyeSB7CisgICAgICBpbnN0YW5jZS5leHBvcnRzLmRpdigxLCAw
KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBleGNlcHRpb24gPSBlOworICAgIH0KKyAgICB0
aHJvdyBleGNlcHRpb247CisgIH0KKyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHtp
bXA6IHtvcnQ6IGpzX2ltcG9ydH19KTsKKworICBsZXQgY2F1Z2h0ID0gdW5kZWZpbmVkOworICB0
cnkgeworICAgIGxldCByZXMgPSBpbnN0YW5jZS5leHBvcnRzLmNhbGxfaW1wb3J0KCk7CisgICAg
YXNzZXJ0VW5yZWFjaGFibGUoJ2NhbGxfaW1wb3J0IHNob3VsZCB0cmFwLCBidXQgcmV0dXJuZWQg
d2l0aCAnICsgcmVzKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGNhdWdodCA9IGU7CisgIH0KKyAg
YXNzZXJ0U2FtZShleGNlcHRpb24sIGNhdWdodCk7CisgIGFzc2VydFRocm93cyhpbnN0YW5jZS5l
eHBvcnRzLmNhbGxfaW1wb3J0LCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsIGtUcmFwTXNnc1tr
VHJhcERpdkJ5WmVyb10pOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RNYW51YWxseVRocm93blJ1
bnRpbWVFcnJvckNhdWdodCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgbGV0IGltcCA9IGJ1aWxkZXIuYWRkSW1wb3J0KCdpbXAnLCAnb3J0Jywga1NpZ19p
X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCdjYWxsX2ltcG9ydCcsIGtTaWdfaV92KQorICAg
ICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4
cHJDYWxsRnVuY3Rpb24sIGltcCwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBr
RXhwckkzMkNvbnN0LCAxMSwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMo
KTsKKyAgZnVuY3Rpb24gdGhyb3dfZXhjKCkgeworICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5S
dW50aW1lRXJyb3IoJ015IHVzZXIgdGV4dCcpOworICB9CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxk
ZXIuaW5zdGFudGlhdGUoe2ltcDoge29ydDogdGhyb3dfZXhjfX0pOworCisgIGFzc2VydEVxdWFs
cygxMSwgaW5zdGFuY2UuZXhwb3J0cy5jYWxsX2ltcG9ydCgpKTsKK30pKCk7CisKKyhmdW5jdGlv
biBUZXN0RXhuV2l0aFdhc21Qcm90b05vdENhdWdodCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcg
V2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdf
dl92KTsKKyAgbGV0IGltcCA9IGJ1aWxkZXIuYWRkSW1wb3J0KCdpbXAnLCAnb3J0Jywga1NpZ192
X3YpOworICBsZXQgdGhyb3dfZm4gPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvdycsIGtTaWdf
dl92KQorICAgICAgICAgICAgICAgICAgICAgLmFkZEJvZHkoW2tFeHByVGhyb3csIGV4Y2VwdF0p
CisgICAgICAgICAgICAgICAgICAgICAuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEZ1bmN0
aW9uKCd0ZXN0Jywga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIC8vIENhbGxp
bmcgInRocm93IiBkaXJlY3RseSBzaG91bGQgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgZXhjZXB0aW9u
LgorICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0
aW9uLCB0aHJvd19mbi5pbmRleCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAg
ICBrRXhwckVuZCwKKyAgICAgICAgLy8gQ2FsbGluZyB0aHJvdWdoIEpTIHByb2R1Y2VzIGEgd3Jh
cHBlZCBleGNlcHRpb25zIHdoaWNoIGRvZXMgbm90IG1hdGNoCisgICAgICAgIC8vIHRoZSBjYXRj
aC4KKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwckNhbGxGdW5j
dGlvbiwgaW1wLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByRW5k
CisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZTsKKyAgbGV0IHdyYXBwZWRf
ZXhuOworICBmdW5jdGlvbiBqc19pbXBvcnQoKSB7CisgICAgdHJ5IHsKKyAgICAgIGluc3RhbmNl
LmV4cG9ydHMudGhyb3coKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICB3cmFwcGVkX2V4biA9
IG5ldyBFcnJvcigpOworICAgICAgd3JhcHBlZF9leG4uX19wcm90b19fID0gZTsKKyAgICAgIHRo
cm93IHdyYXBwZWRfZXhuOworICAgIH0KKyAgfQorICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoe2ltcDoge29ydDoganNfaW1wb3J0fX0pOworICBsZXQgY2F1Z2h0ID0gdW5kZWZpbmVk
OworICB0cnkgeworICAgIGluc3RhbmNlLmV4cG9ydHMudGVzdCgpOworICB9IGNhdGNoIChlKSB7
CisgICAgY2F1Z2h0ID0gZTsKKyAgfQorICBhc3NlcnRUcnVlKCEhY2F1Z2h0LCAnc2hvdWxkIGhh
dmUgdHJhcHBlZCcpOworICBhc3NlcnRFcXVhbHMoY2F1Z2h0LCB3cmFwcGVkX2V4bik7CisgIGFz
c2VydEluc3RhbmNlb2YoY2F1Z2h0Ll9fcHJvdG9fXywgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsK
K30pKCk7CisKKyhmdW5jdGlvbiBUZXN0U3RhY2tPdmVyZmxvd05vdENhdWdodCgpIHsKKyAgZnVu
Y3Rpb24gc3RhY2tfb3ZlcmZsb3coKSB7CisgICAgLy8lVGhyb3dTdGFja092ZXJmbG93KCk7Cisg
IH0KKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IHNpZ192
X3YgPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X3YpOworICBsZXQga1N0YWNrT3ZlcmZsb3cgPSBi
dWlsZGVyLmFkZEltcG9ydCgnJywgJ3N0YWNrX292ZXJmbG93Jywgc2lnX3Zfdik7CisgIGJ1aWxk
ZXIuYWRkRnVuY3Rpb24oJ3RyeV9zdGFja19vdmVyZmxvdycsIGtTaWdfdl92KQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByQ2Fs
bEZ1bmN0aW9uLCAwLAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICBrRXhwckVuZAor
ICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRp
YXRlKHsnJzogeydzdGFja19vdmVyZmxvdyc6IHN0YWNrX292ZXJmbG93fX0pOworCisgIGFzc2Vy
dFRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRyeV9zdGFja19vdmVyZmxvdygpLAorICAg
ICAgUmFuZ2VFcnJvciwgJ01heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkJyk7Cit9KTsK
Ky8vIEZJWE1FOiBuZWVkcyBzdGFjayBvdmVyZmxvdyBoZWxwZXIKKy8vKCk7CisKKy8vIFRlc3Qg
dGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggd2hpY2ggZXhjZXB0aW9uIHdhcyB0aHJvd24gYnkgdXNp
bmcgYSBjYXNjYWRlZAorLy8gc2VxdWVuY2Ugb2YgbmVzdGVkIHRyeSBibG9ja3Mgd2l0aCBhIHNp
bmdsZSBjYXRjaCBibG9jayBlYWNoLgorKGZ1bmN0aW9uIFRlc3RDYXRjaENvbXBsZXgxKCkgewor
ICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9
IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZFRh
ZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQzID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOwor
ICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaF9jb21wbGV4Iiwga1NpZ19pX2kpCisgICAgICAu
YWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRy
eSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAg
a0V4cHJJMzJFcXosCisgICAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAg
ICAgIGtFeHByVGhyb3csIGV4Y2VwdDEsCisgICAgICAgICAgICBrRXhwckVsc2UsCisgICAgICAg
ICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEs
CisgICAgICAgICAgICAgIGtFeHBySTMyRXEsCisgICAgICAgICAgICAgIGtFeHBySWYsIGtXYXNt
Vm9pZCwKKyAgICAgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQyLAorICAgICAgICAgICAg
ICBrRXhwckVsc2UsCisgICAgICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MywKKyAgICAg
ICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgIGtF
eHBySTMyQ29uc3QsIDIsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAgICAgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDMsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHBy
Q2F0Y2gsIGV4Y2VwdDIsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgNCwKKyAgICAgICAga0V4
cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5k
KCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0Myk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIu
aW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMywgaW5zdGFuY2UuZXhwb3J0cy5jYXRj
aF9jb21wbGV4KDApKTsKKyAgYXNzZXJ0RXF1YWxzKDQsIGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hf
Y29tcGxleCgxKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9y
dHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmNhdGNoX2NvbXBsZXgoMikpOworfSko
KTsKKworLy8gVGVzdCB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB3aGljaCBleGNlcHRpb24gd2Fz
IHRocm93biBieSB1c2luZyBhIHNpbmdsZQorLy8gdHJ5IGJsb2NrIHdpdGggbXVsdGlwbGUgYXNz
b2NpYXRlZCBjYXRjaCBibG9ja3MgaW4gc2VxdWVuY2UuCisoZnVuY3Rpb24gVGVzdENhdGNoQ29t
cGxleDIoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxl
dCBleGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1
aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDMgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoX2NvbXBsZXgiLCBrU2lnX2lf
aSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAg
ICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJJMzJFcXosCisgICAgICAgICAg
a0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MSwKKyAg
ICAgICAgICBrRXhwckVsc2UsCisgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAg
ICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICAgIGtFeHBySTMyRXEsCisgICAgICAg
ICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2Vw
dDIsCisgICAgICAgICAgICBrRXhwckVsc2UsCisgICAgICAgICAgICAgIGtFeHByVGhyb3csIGV4
Y2VwdDMsCisgICAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAg
ICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQxLAorICAg
ICAgICAgIGtFeHBySTMyQ29uc3QsIDMsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDIsCisg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgNCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5l
eHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRh
ZywgZXhjZXB0Myk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKwor
ICBhc3NlcnRFcXVhbHMoMywgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9jb21wbGV4KDApKTsKKyAg
YXNzZXJ0RXF1YWxzKDQsIGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hfY29tcGxleCgxKSk7CisgIGFz
c2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBp
bnN0YW5jZS5leHBvcnRzLmNhdGNoX2NvbXBsZXgoMikpOworfSkoKTsKKworLy8gVGVzdCB0aHJv
d2luZyBhbiBleGNlcHRpb24gd2l0aCBtdWx0aXBsZSB2YWx1ZXMuCisoZnVuY3Rpb24gVGVzdFRo
cm93TXVsdGlwbGVWYWx1ZXMoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWls
ZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfaWkpOworICBidWls
ZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd18xXzIiLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsK
KyAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAg
ICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWls
ZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGlu
c3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbMSwgMl0sICgpID0+IGluc3RhbmNlLmV4cG9y
dHMudGhyb3dfMV8yKCkpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2luZy9jYXRjaGluZyB0aGUg
aTMyIHBhcmFtZXRlciB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFBhcmFtSSgpIHsK
KyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9
IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9pKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3df
Y2F0Y2hfcGFyYW0iLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJU
cnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4
cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtF
eHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclJldHVybiwKKyAgICAgICAga0V4cHJF
bmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5z
dGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMCwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19j
YXRjaF9wYXJhbSgwKSk7CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRocm93
X2NhdGNoX3BhcmFtKDEpKTsKKyAgYXNzZXJ0RXF1YWxzKDEwLCBpbnN0YW5jZS5leHBvcnRzLnRo
cm93X2NhdGNoX3BhcmFtKDEwKSk7Cit9KSgpOworCisvLyBUZXN0IHRoZSBlbmNvZGluZyBvZiBh
IHRocm93biBleGNlcHRpb24gd2l0aCBhbiBpbnRlZ2VyIGV4Y2VwdGlvbi4KKyhmdW5jdGlvbiBU
ZXN0VGhyb3dQYXJhbUkoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVy
KCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfaSk7CisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oInRocm93X3BhcmFtIiwga1NpZ192X2kpCisgICAgICAuYWRkQm9keShbCisg
ICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAg
ICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4
dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRl
KCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwg
WzVdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDUpKTsKKyAgYXNzZXJ0V2Fz
bVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzQyNDI0Ml0sICgpID0+IGlu
c3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oNDI0MjQyKSk7Cit9KSgpOworCisvLyBUZXN0IHRo
cm93aW5nL2NhdGNoaW5nIHRoZSBmMzIgcGFyYW1ldGVyIHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RU
aHJvd0NhdGNoUGFyYW1GKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2YpOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJ0aHJvd19jYXRjaF9wYXJhbSIsIGtTaWdfZl9mKQorICAgICAgLmFkZEJv
ZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21GMzIsCisgICAgICAgICAga0V4cHJMb2NhbEdl
dCwgMCwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJGMzJD
b25zdCwgMCwgMCwgMCwgMCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAg
IGtFeHByUmV0dXJuLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsK
KyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFs
cyg1LjAsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oNS4wKSk7CisgIGFzc2Vy
dEVxdWFscygxMC41LCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDEwLjUpKTsK
K30pKCk7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3duIGV4Y2VwdGlvbiB3aXRo
IGEgZmxvYXQgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93UGFyYW1GKCkgeworICBsZXQgYnVp
bGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X2YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19wYXJhbSIsIGtT
aWdfdl9mKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAg
ICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxk
ZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGlu
c3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5z
dGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFs1LjBdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRz
LnRocm93X3BhcmFtKDUuMCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5j
ZS5leHBvcnRzLmV4LCBbMTAuNV0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0o
MTAuNSkpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2luZy9jYXRjaGluZyBhbiBJNjQgdmFsdWUK
KyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFBhcmFtTCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcg
V2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdf
dl9sKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfY2F0Y2hfcGFyYW0iLCBrU2lnX2lf
aSkKKyAgICAgIC5hZGRMb2NhbHMoa1dhc21JNjQsIDEpCisgICAgICAuYWRkQm9keShbCisgICAg
ICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHBySTY0VUNvbnZlcnRJMzIsCisgICAg
ICAgIGtFeHByTG9jYWxTZXQsIDEsCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAg
ICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAg
ICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisg
ICAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAgICBrRXhwckk2NEVxLAorICAgICAg
ICAgIGtFeHBySWYsIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAg
ICAgICAgICBrRXhwckVsc2UsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAwLAorICAgICAg
ICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsK
KyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFs
cygxLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDUpKTsKKyAgYXNzZXJ0RXF1
YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oMCkpOworICBhc3NlcnRF
cXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgtMSkpOworfSkoKTsK
KworLy8gVGVzdCB0aGUgZW5jb2Rpbmcgb2YgYSB0aHJvd24gZXhjZXB0aW9uIHdpdGggYW4gSTY0
IHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd1BhcmFtTCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBu
ZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtT
aWdfdl9sKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfcGFyYW0iLCBrU2lnX3ZfaWkp
CisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtF
eHBySTY0VUNvbnZlcnRJMzIsCisgICAgICAgIGtFeHBySTY0Q29uc3QsIDMyLAorICAgICAgICBr
RXhwckk2NFNobCwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAga0V4cHJJNjRV
Q29udmVydEkzMiwKKyAgICAgICAga0V4cHJJNjRJb3IsCisgICAgICAgIGtFeHByVGhyb3csIGV4
Y2VwdCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQo
ImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmlu
c3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhw
b3J0cy5leCwgWzQyOTQ5NjcyOTY1bl0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFy
YW0oMTAsIDUpKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0
cy5leCwgWy00Mjk0OTY3Mjgzbl0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0o
LTEsIDEzKSk7Cit9KSgpOworCisvLyBUZXN0IHRocm93aW5nL2NhdGNoaW5nIHRoZSBGNjQgcGFy
YW1ldGVyIHZhbHVlCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hQYXJhbUQoKSB7CisgIGxldCBi
dWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVy
LmFkZFRhZyhrU2lnX3ZfZCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X2NhdGNoX3Bh
cmFtIiwga1NpZ19kX2QpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2Fz
bUY2NCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByVGhyb3cs
IGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckY2NENvbnN0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJSZXR1cm4sCisg
ICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2Ug
PSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDUuMCwgaW5zdGFuY2Uu
ZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSg1LjApKTsKKyAgYXNzZXJ0RXF1YWxzKDEwLjUsIGlu
c3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oMTAuNSkpOworfSkoKTsKKworLy8gVGVz
dCB0aGUgZW5jb2Rpbmcgb2YgYSB0aHJvd24gZXhjZXB0aW9uIHdpdGggYW4gZjY0IHZhbHVlLgor
KGZ1bmN0aW9uIFRlc3RUaHJvd1BhcmFtRCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1v
ZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9kKTsK
KyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfcGFyYW0iLCBrU2lnX3ZfZikKKyAgICAgIC5h
ZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJGNjRDb252
ZXJ0RjMyLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0
KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdh
c21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFs1LjBdLCAoKSA9PiBpbnN0
YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDUuMCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3Rh
bmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbMTAwMDAwMDBdLCAoKSA9PiBpbnN0YW5jZS5leHBv
cnRzLnRocm93X3BhcmFtKDEwMDAwMDAwLjUpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhlIGVuY29k
aW5nIG9mIGEgY29tcHV0ZWQgcGFyYW1ldGVyIHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJvd1Bh
cmFtQ29tcHV0ZWQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7
CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfaSk7CisgIGJ1aWxkZXIuYWRk
RnVuY3Rpb24oInRocm93X2V4cHJfd2l0aF9wYXJhbXMiLCBrU2lnX3ZfZGRpKQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICAvLyBwMiAqIChwMCArIG1pbihwMCwgcDEpKXwwIC0gMjAKKyAgICAg
ICAga0V4cHJMb2NhbEdldCwgMiwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAg
a0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAga0V4
cHJGNjRNaW4sCisgICAgICAgIGtFeHByRjY0QWRkLAorICAgICAgICBrRXhwckkzMlNDb252ZXJ0
RjY0LAorICAgICAgICBrRXhwckkzMk11bCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMjAsCisg
ICAgICAgIGtFeHBySTMyU3ViLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBd
KS5leHBvcnRGdW5jKCkKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFs
VGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisK
KyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWy04XSwg
KCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19leHByX3dpdGhfcGFyYW1zKDEuNSwgMi41LCA0
KSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFsx
Ml0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfZXhwcl93aXRoX3BhcmFtcyg1LjcsIDIu
NSwgNCkpOworfSkoKTsKKworLy8gTm93IHRoYXQgd2Uga25vdyBjYXRjaGluZyB3b3JrcyBsb2Nh
bGx5LCB3ZSB0ZXN0IGNhdGNoaW5nIGV4Y2VwdGlvbnMgdGhhdAorLy8gY3Jvc3MgZnVuY3Rpb24g
Ym91bmRhcmllcyBhbmQvb3IgcmFpc2VkIGJ5IEphdmFTY3JpcHQuCisoZnVuY3Rpb24gVGVzdENh
dGNoQ3Jvc3NGdW5jdGlvbnMoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWls
ZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfaSk7CisKKyAgLy8g
SGVscGVyIGZ1bmN0aW9uIGZvciB0aHJvd2luZyBmcm9tIEpTLiBJdCBpcyBpbXBvcnRlZCBieSB0
aGUgV2FzbSBtb2R1bGUKKyAgLy8gYXMgdGhyb3dfaS4KKyAgZnVuY3Rpb24gdGhyb3dfdmFsdWUo
dmFsdWUpIHsKKyAgICB0aHJvdyB2YWx1ZTsKKyAgfQorICBsZXQgc2lnX2luZGV4ID0gYnVpbGRl
ci5hZGRUeXBlKGtTaWdfdl9pKTsKKyAgbGV0IGtKU1Rocm93SSA9IGJ1aWxkZXIuYWRkSW1wb3J0
KCIiLCAidGhyb3dfaSIsIHNpZ19pbmRleCk7CisKKyAgLy8gSGVscGVyIGZ1bmN0aW9uIHRoYXQg
dGhyb3dzIGEgc3RyaW5nLiBXYXNtIHNob3VsZCBub3QgY2F0Y2ggaXQuCisgIGZ1bmN0aW9uIHRo
cm93X3N0cmluZygpIHsKKyAgICB0aHJvdyAidXNlIHdhc20iOworICB9CisgIHNpZ19pbmRleCA9
IGJ1aWxkZXIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBrSlNUaHJvd1N0cmluZyA9IGJ1aWxk
ZXIuYWRkSW1wb3J0KCIiLCAidGhyb3dfc3RyaW5nIiwgc2lnX2luZGV4KTsKKworICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdGhhdCB0aHJvd3MgdW5kZWZpbmVkLiBXYXNtIHNob3VsZCBub3QgY2F0Y2gg
aXQuCisgIGZ1bmN0aW9uIHRocm93X3VuZGVmaW5lZCgpIHsKKyAgICB0aHJvdyB1bmRlZmluZWQ7
CisgIH0KKyAgbGV0IGtKU1Rocm93VW5kZWZpbmVkID0gYnVpbGRlci5hZGRJbXBvcnQoIiIsICJ0
aHJvd191bmRlZmluZWQiLCBzaWdfaW5kZXgpOworCisgIC8vIEhlbHBlciBmdW5jdGlvbiB0aGF0
IHRocm93cyBhbiBmcC4gV2FzbSBzaG91bGQgbm90IGNhdGNoIGl0LgorICBmdW5jdGlvbiB0aHJv
d19mcCgpIHsKKyAgICB0aHJvdyAxMC41OworICB9CisgIGxldCBrSlNUaHJvd0ZQID0gYnVpbGRl
ci5hZGRJbXBvcnQoIiIsICJ0aHJvd19mcCIsIHNpZ19pbmRleCk7CisKKyAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRoYXQgdGhyb3dzIGEgbGFyZ2UgbnVtYmVyLiBXYXNtIHNob3VsZCBub3QgY2F0Y2gg
aXQuCisgIGZ1bmN0aW9uIHRocm93X2xhcmdlKCkgeworICAgIHRocm93IDFlKzI4OworICB9Cisg
IGxldCBrSlNUaHJvd0xhcmdlID0gYnVpbGRlci5hZGRJbXBvcnQoIiIsICJ0aHJvd19sYXJnZSIs
IHNpZ19pbmRleCk7CisKKyAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0aHJvd2luZyBmcm9tIFdl
YkFzc2VtYmx5LgorICBsZXQga1dhc21UaHJvd0Z1bmN0aW9uID0KKyAgICBidWlsZGVyLmFkZEZ1
bmN0aW9uKCJ0aHJvdyIsIGtTaWdfdl9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhw
ckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKQorICAg
ICAgLmluZGV4OworCisgIC8vIFNjZW5hcmlvIDE6IFRocm93IGFuZCBjYXRjaCBhcHBlYXIgb24g
dGhlIHNhbWUgZnVuY3Rpb24uIFRoaXMgc2hvdWxkCisgIC8vIGhhcHBlbiBpbiBjYXNlIG9mIGlu
bGluaW5nLCBmb3IgZXhhbXBsZS4KKyAgYnVpbGRlci5hZGRGdW5jdGlvbigic2FtZV9zY29wZSIs
IGtTaWdfaV9pKQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAg
ICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgMCwKKyAgICAg
ICAga0V4cHJJMzJOZSwKKyAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgIGtF
eHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAg
IGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckkzMkNv
bnN0LCA2MywKKyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgIGtFeHByRW5kCisgICAg
XSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInNhbWVfc2Nv
cGVfaWdub3JlIiwga1NpZ19pX2kpCisgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwg
a1dhc21JMzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwclRo
cm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAga0V4cHJD
YXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwckVuZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5j
KCk7CisKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigic2FtZV9zY29wZV9tdWx0aXBsZSIsIGtTaWdf
aV9pKQorICAgIC8vIHBhdGggPSAwOworICAgIC8vCisgICAgLy8gdHJ5IHsKKyAgICAvLyAgIHRy
eSB7CisgICAgLy8gICAgIHRyeSB7CisgICAgLy8gICAgICAgaWYgKHAgPT0gMSkKKyAgICAvLyAg
ICAgICAgIHRocm93IDE7CisgICAgLy8gICAgICAgcGF0aCB8PSAyCisgICAgLy8gICAgIH0gY2F0
Y2ggKHYpIHsKKyAgICAvLyAgICAgICBwYXRoIHw9IHYgfCA0OworICAgIC8vICAgICAgIHRocm93
IHBhdGg7CisgICAgLy8gICAgIH0KKyAgICAvLyAgICAgaWYgKHAgPT0gMikKKyAgICAvLyAgICAg
ICB0aHJvdyBwYXRofDg7CisgICAgLy8gICAgIHBhdGggfD0gMTY7CisgICAgLy8gICB9IGNhdGNo
ICh2KSB7CisgICAgLy8gICAgIHBhdGggfD0gdiB8IDMyOworICAgIC8vICAgICB0aHJvdyBwYXRo
OworICAgIC8vICAgfQorICAgIC8vICAgaWYgKHAgPT0gMykKKyAgICAvLyAgICAgdGhyb3cgcGF0
aHw2NDsKKyAgICAvLyAgIHBhdGggfD0gMTI4CisgICAgLy8gfSBjYXRjaCAodikgeworICAgIC8v
ICAgcGF0aCB8PSB2IHwgMjU2OworICAgIC8vIH0KKyAgICAvLworICAgIC8vIHJldHVybiBwYXRo
OworICAgIC8vCisgICAgLy8gcCA9PSAxIC0+IHBhdGggPT0gMjkzCisgICAgLy8gcCA9PSAyIC0+
IHBhdGggPT0gMjk4CisgICAgLy8gcCA9PSAzIC0+IHBhdGggPT0gMzM4CisgICAgLy8gZWxzZSAg
IC0+IHBhdGggPT0gMTQ2CisgICAgLmFkZExvY2FscyhrV2FzbUkzMiwgMSkKKyAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRyeSwga1dh
c21JMzIsCisgICAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICAgIGtF
eHByTG9jYWxHZXQsIDAsCisgICAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAg
ICAgICAgIGtFeHBySTMyRXEsCisgICAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAg
ICAgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgICAgICAgIGtFeHByVGhy
b3csIGV4Y2VwdCwKKyAgICAgICAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICAg
ICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAg
ICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgNCwK
KyAgICAgICAgICAgICAga0V4cHJJMzJJb3IsCisgICAgICAgICAgICAgIGtFeHByVGhyb3csIGV4
Y2VwdCwKKyAgICAgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAgICAgIGtFeHBy
RW5kLAorICAgICAgICAgICAga0V4cHJMb2NhbFRlZSwgMSwKKyAgICAgICAgICAgIGtFeHByTG9j
YWxHZXQsIDAsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICAgICAga0V4
cHJJMzJFcSwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAg
a0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgOCwKKyAgICAg
ICAgICAgICAga0V4cHJJMzJJb3IsCisgICAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwK
KyAgICAgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAgICAgIGtFeHByRW5kLAor
ICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMTYsCisgICAgICAgICAgICBrRXhwckkzMklvciwK
KyAgICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0
LCAzMiwKKyAgICAgICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICAgICAga0V4cHJUaHJvdywg
ZXhjZXB0LAorICAgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAgICBrRXhwckVu
ZCwKKyAgICAgICAgICBrRXhwckxvY2FsVGVlLCAxLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQs
IDAsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMywKKyAgICAgICAgICBrRXhwckkzMkVxLAor
ICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQs
IDEsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAvKjY0PSovIDE5MiwgMCwKKyAgICAgICAg
ICAgIGtFeHBySTMySW9yLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAg
ICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICBr
RXhwckkzMkNvbnN0LCAvKjEyOD0qLyAxMjgsIDEsCisgICAgICAgICAga0V4cHJJMzJJb3IsCisg
ICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAvKjI1
Nj0qLyAxMjgsIDIsCisgICAgICAgICAga0V4cHJJMzJJb3IsCisgICAgICAgIGtFeHByRW5kLAor
ICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICAvLyBTY2VuYXJpbyAyOiBDYXRjaGVzIGFu
IGV4Y2VwdGlvbiByYWlzZWQgZnJvbSB0aGUgZGlyZWN0IGNhbGxlZS4KKyAgYnVpbGRlci5hZGRG
dW5jdGlvbigiZnJvbV9kaXJlY3RfY2FsbGVlIiwga1NpZ19pX2kpCisgICAgLmFkZEJvZHkoWwor
ICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAg
ICAgICBrRXhwckNhbGxGdW5jdGlvbiwga1dhc21UaHJvd0Z1bmN0aW9uLAorICAgICAgICBrRXhw
clVucmVhY2hhYmxlLAorICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAga0V4cHJFbmQs
CisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIC8vIFNjZW5hcmlvIDM6IENhdGNoZXMg
YW4gZXhjZXB0aW9uIHJhaXNlZCBmcm9tIGFuIGluZGlyZWN0IGNhbGxlZS4KKyAgbGV0IHNpZ192
X2kgPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X2kpOworICBidWlsZGVyLmFwcGVuZFRvVGFibGUo
W2tXYXNtVGhyb3dGdW5jdGlvbiwga1dhc21UaHJvd0Z1bmN0aW9uXSk7CisgIGJ1aWxkZXIuYWRk
RnVuY3Rpb24oImZyb21faW5kaXJlY3RfY2FsbGVlIiwga1NpZ19pX2lpKQorICAgIC5hZGRCb2R5
KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwK
KyAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAga0V4cHJDYWxsSW5kaXJlY3QsIHNp
Z192X2ksIGtUYWJsZVplcm8sCisgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICBrRXhw
ckNhdGNoLCBleGNlcHQsCisgICAgICBrRXhwckVuZAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMo
KTsKKworICAvLyBTY2VuYXJpbyA0OiBEb2VzIG5vdCBjYXRjaCBhbiBleGNlcHRpb24gcmFpc2Vk
IGluIEpTLCBldmVuIGlmIHByaW1pdGl2ZQorICAvLyB2YWx1ZXMgYXJlIGJlaW5nIHVzZWQgYXMg
ZXhjZXB0aW9ucy4KKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiaV9mcm9tX2pzIiwga1NpZ19pX2kp
CisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICBrRXhw
ckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwga0pTVGhyb3dJLAorICAg
ICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAg
ICBrRXhwclVucmVhY2hhYmxlLAorICAgICAga0V4cHJFbmQsCisgICAgXSkKKyAgICAuZXhwb3J0
RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInN0cmluZ19mcm9tX2pzIiwga1NpZ192
X3YpCisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAg
a0V4cHJDYWxsRnVuY3Rpb24sIGtKU1Rocm93U3RyaW5nLAorICAgICAga0V4cHJDYXRjaCwgZXhj
ZXB0LAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAga0V4cHJFbmQsCisgICAgXSkK
KyAgICAuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImZwX2Zyb21fanMi
LCBrU2lnX3ZfdikKKyAgICAuYWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAor
ICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwga0pTVGhyb3dGUCwKKyAgICAgIGtFeHByQ2F0Y2gs
IGV4Y2VwdCwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByRW5kLAorICAg
IF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJsYXJnZV9m
cm9tX2pzIiwga1NpZ192X3YpCisgICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtXYXNt
Vm9pZCwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtKU1Rocm93TGFyZ2UsCisgICAgICBr
RXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICBrRXhw
ckVuZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgYnVpbGRlci5hZGRGdW5jdGlv
bigidW5kZWZpbmVkX2Zyb21fanMiLCBrU2lnX3ZfdikKKyAgICAuYWRkQm9keShbCisgICAgICBr
RXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwga0pTVGhyb3dV
bmRlZmluZWQsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByVW5yZWFj
aGFibGUsCisgICAgICBrRXhwckVuZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAg
bGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IiI6IHsKKyAgICAgIHRocm93X2k6
IHRocm93X3ZhbHVlLAorICAgICAgdGhyb3dfc3RyaW5nOiB0aHJvd19zdHJpbmcsCisgICAgICB0
aHJvd19mcDogdGhyb3dfZnAsCisgICAgICB0aHJvd19sYXJnZSwgdGhyb3dfbGFyZ2UsCisgICAg
ICB0aHJvd191bmRlZmluZWQ6IHRocm93X3VuZGVmaW5lZAorICB9fSk7CisKKyAgYXNzZXJ0RXF1
YWxzKDYzLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGUoMCkpOworICBhc3NlcnRFcXVhbHMo
MTAyNCwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlKDEwMjQpKTsKKyAgYXNzZXJ0RXF1YWxz
KC0zLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGUoLTMpKTsKKyAgYXNzZXJ0RXF1YWxzKC0x
LCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfaWdub3JlKC0xKSk7CisgIGFzc2VydEVxdWFs
cygxLCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfaWdub3JlKDEpKTsKKyAgYXNzZXJ0RXF1
YWxzKDB4N0ZGRkZGRkYsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZV9pZ25vcmUoMHg3RkZG
RkZGRikpOworICBhc3NlcnRFcXVhbHMoMTAyNCwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3Bl
X2lnbm9yZSgxMDI0KSk7CisgIGFzc2VydEVxdWFscygtMSwgaW5zdGFuY2UuZXhwb3J0cy5zYW1l
X3Njb3BlX2lnbm9yZSgtMSkpOworICBhc3NlcnRFcXVhbHMoMjkzLCBpbnN0YW5jZS5leHBvcnRz
LnNhbWVfc2NvcGVfbXVsdGlwbGUoMSkpOworICBhc3NlcnRFcXVhbHMoMjk4LCBpbnN0YW5jZS5l
eHBvcnRzLnNhbWVfc2NvcGVfbXVsdGlwbGUoMikpOworICBhc3NlcnRFcXVhbHMoMzM4LCBpbnN0
YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfbXVsdGlwbGUoMykpOworICBhc3NlcnRFcXVhbHMoMTQ2
LCBpbnN0YW5jZS5leHBvcnRzLnNhbWVfc2NvcGVfbXVsdGlwbGUoMCkpOworICBhc3NlcnRFcXVh
bHMoLTEwMDI0LCBpbnN0YW5jZS5leHBvcnRzLmZyb21fZGlyZWN0X2NhbGxlZSgtMTAwMjQpKTsK
KyAgYXNzZXJ0RXF1YWxzKDMzMzQzMzMsIGluc3RhbmNlLmV4cG9ydHMuZnJvbV9kaXJlY3RfY2Fs
bGVlKDMzMzQzMzMpKTsKKyAgYXNzZXJ0RXF1YWxzKC0xLCBpbnN0YW5jZS5leHBvcnRzLmZyb21f
ZGlyZWN0X2NhbGxlZSgweEZGRkZGRkZGKSk7CisgIGFzc2VydEVxdWFscygweDdGRkZGRkZGLCBp
bnN0YW5jZS5leHBvcnRzLmZyb21fZGlyZWN0X2NhbGxlZSgweDdGRkZGRkZGKSk7CisgIGFzc2Vy
dEVxdWFscygxMCwgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2luZGlyZWN0X2NhbGxlZSgxMCwgMCkp
OworICBhc3NlcnRFcXVhbHMoNzcsIGluc3RhbmNlLmV4cG9ydHMuZnJvbV9pbmRpcmVjdF9jYWxs
ZWUoNzcsIDEpKTsKKworICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UuZXhwb3J0
cy5pX2Zyb21fanMoMTApLCAxMCk7CisgIGFzc2VydFRocm93c0VxdWFscygoKSA9PiBpbnN0YW5j
ZS5leHBvcnRzLmlfZnJvbV9qcygtMTApLCAtMTApOworICBhc3NlcnRUaHJvd3NFcXVhbHMoaW5z
dGFuY2UuZXhwb3J0cy5zdHJpbmdfZnJvbV9qcywgInVzZSB3YXNtIik7CisgIGFzc2VydFRocm93
c0VxdWFscyhpbnN0YW5jZS5leHBvcnRzLmZwX2Zyb21fanMsIDEwLjUpOworICBhc3NlcnRUaHJv
d3NFcXVhbHMoaW5zdGFuY2UuZXhwb3J0cy5sYXJnZV9mcm9tX2pzLCAxZSsyOCk7CisgIGFzc2Vy
dFRocm93c0VxdWFscyhpbnN0YW5jZS5leHBvcnRzLnVuZGVmaW5lZF9mcm9tX2pzLCB1bmRlZmlu
ZWQpOworfSkoKTsKKworLy8gRGVsZWdhdGUgd2l0aCBhIHRyeSBibG9jayB0aGF0IG5ldmVyIHRo
cm93cy4KKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVOb1Rocm93KCkgeworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFn
KGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfaV92KQorICAg
ICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4
cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAg
ICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQxLAorICAgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0
RnVuYygpOworICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1
YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGVzdCgpKTsKK30pKCk7CisKKy8vIERlbGVnYXRlIGV4
Y2VwdGlvbiBoYW5kbGluZyB0byBvdXRlciB0cnkvY2F0Y2ggYmxvY2suCisoZnVuY3Rpb24gVGVz
dERlbGVnYXRlVGhyb3coKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVy
KCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCB0aHJv
d19pZiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93Jywga1NpZ192X2kpCisgICAgICAuYWRk
Qm9keShbCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwcklmLCBr
V2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4
cHJFbmRdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2ln
X2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAg
ICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAs
CisgICAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgdGhyb3dfaWYuaW5kZXgsCisgICAgICAg
ICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDAsCisgICAg
ICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAg
ICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWls
ZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRl
c3QoMCkpOworICBhc3NlcnRFcXVhbHMoMiwgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KDEpKTsKK30p
KCk7CisKKy8vIE5vIGNhdGNoIGJsb2NrIG1hdGNoaW5nIHRoZSBleGNlcHRpb24gaW4gdGhlIGRl
bGVnYXRlIHRhcmdldC4KKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVUaHJvd05vQ2F0Y2goKSB7Cisg
IGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0g
YnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIuYWRkVGFn
KGtTaWdfdl92KTsKKyAgbGV0IHRocm93X2ZuID0gYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3cn
LCBrU2lnX3ZfdikKKyAgICAgICAgICAgICAgICAgICAgIC5hZGRCb2R5KFtrRXhwclRocm93LCBl
eGNlcHQxXSkKKyAgICAgICAgICAgICAgICAgICAgIC5leHBvcnRGdW5jKCk7CisgIGxldCB0aHJv
d19mbl8yID0gYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3dfMicsIGtTaWdfdl92KQorICAgICAg
ICAgICAgICAgICAgICAgLmFkZEJvZHkoW2tFeHByVGhyb3csIGV4Y2VwdDJdKQorICAgICAgICAg
ICAgICAgICAgICAgLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcs
IGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIs
CisgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJDYWxsRnVu
Y3Rpb24sIHRocm93X2ZuLmluZGV4LAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAg
ICAgICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQyLAor
ICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSku
ZXhwb3J0RnVuYygpOworICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNz
ZXJ0VGhyb3dzKGluc3RhbmNlLmV4cG9ydHMudGVzdCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsK
K30pKCk7CisKKy8vIENoZWNrIHRoYXQgdGhlIGV4Y2VwdGlvbiBpcyBtZXJnZWQgcHJvcGVybHkg
d2hlbiBib3RoIHNjb3BlcyBjYW4gdGhyb3cuCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlTWVyZ2Uo
KSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNl
cHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIu
YWRkVGFnKGtTaWdfdl92KTsKKyAgLy8gdGhyb3dfZm46IDAgLT4gcmV0dXJucworICAvLyAgICAg
ICAgICAgMSAtPiB0aHJvdyBleGNlcHQxCisgIC8vICAgICAgICAgICAyIC0+IHRocm93IGV4Y2Vw
dDIKKyAgbGV0IHRocm93X2ZuID0gYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3cnLCBrU2lnX3Zf
aSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAgICBrRXhwckJsb2NrLCBrV2FzbVZvaWQsCisg
ICAgICAgICAgICBrRXhwckJsb2NrLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgIGtFeHByQmxv
Y2ssIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAg
ICAgICAgICAgIGtFeHByQnJUYWJsZSwgMiwgMCwgMSwgMiwKKyAgICAgICAgICAgICAga0V4cHJF
bmQsCisgICAgICAgICAgICAgIGtFeHByUmV0dXJuLAorICAgICAgICAgICAga0V4cHJFbmQsCisg
ICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQxLAorICAgICAgICAgIGtFeHByRW5kLAorICAg
ICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDJdKQorICAgICAgLmV4cG9ydEZ1bmMoKTsKKyAgYnVp
bGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfaV9paSkKKyAgICAgIC5hZGRCb2R5KFsKKyAg
ICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisg
ICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIHRocm93X2ZuLmluZGV4LAorICAgICAgICAgIGtF
eHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAg
ICAgICBrRXhwckNhbGxGdW5jdGlvbiwgdGhyb3dfZm4uaW5kZXgsCisgICAgICAgICAgICBrRXhw
ckkzMkNvbnN0LCAxLAorICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDAsCisgICAgICAgIGtFeHBy
Q2F0Y2gsIGV4Y2VwdDEsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4
cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0
YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMoMiwgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KDEsIDAp
KTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMudGVzdCgyLCAwKSwgV2Vi
QXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3RhbmNlLmV4cG9ydHMu
dGVzdCgwLCAxKSk7CisgIGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRlc3Qo
MCwgMiksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5j
ZS5leHBvcnRzLnRlc3QoMCwgMCkpOworfSkoKTsKKworLy8gRGVsZWdhdGUgdG8gc2Vjb25kIGVu
Y2xvc2luZyB0cnkgc2NvcGUuCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlMSgpIHsKKyAgbGV0IGJ1
aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIu
YWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IHRocm93X2ZuID0gYnVpbGRlci5hZGRGdW5jdGlvbign
dGhyb3cnLCBrU2lnX3ZfdikKKyAgICAgICAgICAgICAgICAgICAgIC5hZGRCb2R5KFtrRXhwclRo
cm93LCBleGNlcHRdKQorICAgICAgICAgICAgICAgICAgICAgLmV4cG9ydEZ1bmMoKTsKKyAgYnVp
bGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAg
ICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAor
ICAgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAgICBrRXhwckNhbGxG
dW5jdGlvbiwgdGhyb3dfZm4uaW5kZXgsCisgICAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEs
CisgICAgICAgICAgICBrRXhwckRlbGVnYXRlLCAxLAorICAgICAgICAgIGtFeHByQ2F0Y2gsIGV4
Y2VwdCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgICAga0V4cHJFbmQs
CisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAz
LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2Ug
PSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscygzLCBpbnN0YW5jZS5leHBv
cnRzLnRlc3QoKSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlVW5yZWFjaGFibGUo
KSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNl
cHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIu
YWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfaV92
KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAg
ICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDEs
CisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAx
LAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQxLAorICAgICAgICAgIGtFeHBySTMyQ29uc3Qs
IDIsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDIsCisgICAgICAgICAga0V4cHJJMzJDb25z
dCwgMywKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGluc3Rh
bmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMoMiwgaW5zdGFuY2Uu
ZXhwb3J0cy50ZXN0KCkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZVRvQ2FsbGVy
KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhj
ZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0
ZXN0Jywga1NpZ192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2Fz
bVZvaWQsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHBy
VGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckRlbGVnYXRlLCAxLAorICAgICAgICBrRXhw
ckNhdGNoQWxsLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IGlu
c3RhbmNlLmV4cG9ydHMudGVzdCgpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfSkoKTsKKwor
KGZ1bmN0aW9uIFRlc3RUaHJvd0JlZm9yZVVucmVhY2hhYmxlKCkgeworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWco
a1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvd19iZWZvcmVfdW5yZWFjaGFi
bGUnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNt
STMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclVucmVh
Y2hhYmxlLAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICAgIGtFeHBySTMyQ29uc3Qs
IDQyLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKworICBsZXQg
aW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydEVxdWFscyg0MiwgaW5z
dGFuY2UuZXhwb3J0cy50aHJvd19iZWZvcmVfdW5yZWFjaGFibGUoKSk7Cit9KSgpOworCisoZnVu
Y3Rpb24gVGVzdFVucmVhY2hhYmxlSW5DYXRjaEFsbCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcg
V2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdf
dl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGhyb3dfYmVmb3JlX3VucmVhY2hhYmxlJywg
a1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwK
KyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisg
ICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCA0MiwK
KyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisKKyAgbGV0IGluc3Rh
bmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RUaHJv
d1dpdGhMb2NhbCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsK
KyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRG
dW5jdGlvbigndGhyb3dfd2l0aF9sb2NhbCcsIGtTaWdfaV92KQorICAgIC5hZGRMb2NhbHMoa1dh
c21JMzIsIDQpCisgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckkzMkNvbnN0LCA0MiwKKyAg
ICAgICAga0V4cHJGNjRDb25zdCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAga0V4
cHJUcnksIGtXYXNtRjMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAg
a0V4cHJDYXRjaEFsbCwKKyAgICAgICAgICBrRXhwckYzMkNvbnN0LCAwLCAwLCAwLCAwLAorICAg
ICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJEcm9wLCAgLy8gRHJvcCB0aGUgZjMyLgorICAg
ICAgICBrRXhwckRyb3AsICAvLyBEcm9wIHRoZSBmNjQuCisgICAgICAgIC8vIExlYXZlIHRoZSAn
NDInIG9uIHRoZSBzdGFjay4KKyAgICBdKS5leHBvcnRGdW5jKCk7CisKKyAgbGV0IGluc3RhbmNl
ID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMoNDIsIGluc3RhbmNlLmV4
cG9ydHMudGhyb3dfd2l0aF9sb2NhbCgpKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0Q2F0Y2hs
ZXNzVHJ5KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBs
ZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0
aW9uKCdjYXRjaGxlc3NfdHJ5Jywga1NpZ192X2kpCisgICAgLmFkZEJvZHkoWworICAgICAgICBr
RXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAg
ICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAor
ICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckVuZCwKKyAgICBdKS5leHBvcnRGdW5j
KCk7CisKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNl
cHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisgIGFzc2VydERv
ZXNOb3RUaHJvdygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmNhdGNobGVzc190cnkoMCkpOworICBh
c3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkgPT4g
aW5zdGFuY2UuZXhwb3J0cy5jYXRjaGxlc3NfdHJ5KDEpKTsKK30pKCk7CisKKy8vIERlbGVnYXRl
IHRvIGEgcmVndWxhciBibG9jayBpbnNpZGUgYSB0cnkgYmxvY2suCisoZnVuY3Rpb24gVGVzdERl
bGVnYXRlVG9CbG9jaygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIo
KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5h
ZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBr
RXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJCbG9jaywga1dhc21JMzIsCisgICAg
ICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICAgIGtFeHByVGhyb3csIGV4
Y2VwdCwKKyAgICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDAsCisgICAgICAgICAga0V4cHJFbmQs
CisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAy
LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgICBhc3NlcnRU
aHJvd3MoKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSgpLCBFcnJvciwgL2RlbGVnYXRlIHRhcmdl
dCBpc24ndCBhIHRyeSBibG9jay8pOworfSkoKTsKKworLy8gRGVsZWdhdGUgdG8gYSByZWd1bGFy
IGJsb2NrIHdpdGggbm8gb3V0ZXIgdHJ5IChkZWxlZ2F0ZSB0byBjYWxsZXIpLgorKGZ1bmN0aW9u
IFRlc3REZWxlZ2F0ZVRvQ2FsbGVyV2l0aEJsb2NrKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBX
YXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192
X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ192X3YpCisgICAgICAuYWRk
Qm9keShbCisgICAgICAgIGtFeHByQmxvY2ssIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhwclRy
eSwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAg
IGtFeHByRGVsZWdhdGUsIDAsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGFzc2VydFRocm93cygoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKCksIEVycm9yLCAv
ZGVsZWdhdGUgdGFyZ2V0IGlzbid0IGEgdHJ5IGJsb2NrLyk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy93YXNtL3Y4L21qc3VuaXQuanMgYi9KU1Rlc3RzL3dhc20vdjgvbWpzdW5pdC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40MjQ1NWJhYTYxNjk2NmY4ZDBhNmI5ZGUxZGEzMjExZmZhMmRhMzYyCi0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L21qc3VuaXQuanMKQEAgLTAsMCArMSw4MjYg
QEAKKy8vIENvcHlyaWdodCAyMDA4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisv
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAg
ICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAg
ICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnVuY3Rpb24gTWpzVW5pdEFzc2VydGlv
bkVycm9yKG1lc3NhZ2UpIHsKKyAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKKyAgLy8gVGVtcG9y
YXJpbHkgaW5zdGFsbCBhIGN1c3RvbSBzdGFjayB0cmFjZSBmb3JtYXR0ZXIgYW5kIHJlc3RvcmUg
dGhlCisgIC8vIHByZXZpb3VzIHZhbHVlLgorICBsZXQgcHJldlByZXBhcmVTdGFja1RyYWNlID0g
RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7CisgIHRyeSB7CisgICAgRXJyb3IucHJlcGFyZVN0YWNr
VHJhY2UgPSBNanNVbml0QXNzZXJ0aW9uRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7CisgICAgLy8g
VGhpcyBhbGxvd3MgZmV0Y2hpbmcgdGhlIHN0YWNrIHRyYWNlIHVzaW5nIFRyeUNhdGNoOjpTdGFj
a1RyYWNlLgorICAgIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoIk1qc1VuaXRBc3NlcnRpb25FcnJv
ciIpLnN0YWNrOworICB9IGZpbmFsbHkgeworICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0g
cHJldlByZXBhcmVTdGFja1RyYWNlOworICB9Cit9CisKKy8qCisgKiBUaGlzIGZpbGUgaXMgaW5j
bHVkZWQgaW4gYWxsIG1pbmkganN1bml0IHRlc3QgY2FzZXMuICBUaGUgdGVzdAorICogZnJhbWV3
b3JrIGV4cGVjdHMgbGluZXMgdGhhdCBzaWduYWwgZmFpbGVkIHRlc3RzIHRvIHN0YXJ0IHdpdGgK
KyAqIHRoZSBmLXdvcmQgYW5kIGlnbm9yZSBhbGwgb3RoZXIgbGluZXMuCisgKi8KKworTWpzVW5p
dEFzc2VydGlvbkVycm9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0
dXJuIHRoaXMubWVzc2FnZSArICJcblxuU3RhY2s6ICIgKyB0aGlzLnN0YWNrOworfTsKKworCisv
LyBFeHBlY3RlZCBhbmQgZm91bmQgdmFsdWVzIHRoZSBzYW1lIG9iamVjdHMsIG9yIHRoZSBzYW1l
IHByaW1pdGl2ZQorLy8gdmFsdWVzLgorLy8gRm9yIGtub3duIHByaW1pdGl2ZSB2YWx1ZXMsIHBs
ZWFzZSB1c2UgYXNzZXJ0RXF1YWxzLgordmFyIGFzc2VydFNhbWU7CisKKy8vIEludmVyc2Ugb2Yg
YXNzZXJ0U2FtZS4KK3ZhciBhc3NlcnROb3RTYW1lOworCisvLyBFeHBlY3RlZCBhbmQgZm91bmQg
dmFsdWVzIGFyZSBpZGVudGljYWwgcHJpbWl0aXZlIHZhbHVlcyBvciBmdW5jdGlvbnMKKy8vIG9y
IHNpbWlsYXJseSBzdHJ1Y3R1cmVkIG9iamVjdHMgKGNoZWNraW5nIGludGVybmFsIHByb3BlcnRp
ZXMKKy8vIG9mLCBlLmcuLCBOdW1iZXIgYW5kIERhdGUgb2JqZWN0cywgdGhlIGVsZW1lbnRzIG9m
IGFycmF5cworLy8gYW5kIHRoZSBwcm9wZXJ0aWVzIG9mIG5vbi1BcnJheSBvYmplY3RzKS4KK3Zh
ciBhc3NlcnRFcXVhbHM7CisKKy8vIERlZXAgZXF1YWxpdHkgcHJlZGljYXRlIHVzZWQgYnkgYXNz
ZXJ0RXF1YWxzLgordmFyIGRlZXBFcXVhbHM7CisKKy8vIEV4cGVjdGVkIGFuZCBmb3VuZCB2YWx1
ZXMgYXJlIG5vdCBpZGVudGljYWwgcHJpbWl0aXZlIHZhbHVlcyBvciBmdW5jdGlvbnMKKy8vIG9y
IHNpbWlsYXJseSBzdHJ1Y3R1cmVkIG9iamVjdHMgKGNoZWNraW5nIGludGVybmFsIHByb3BlcnRp
ZXMKKy8vIG9mLCBlLmcuLCBOdW1iZXIgYW5kIERhdGUgb2JqZWN0cywgdGhlIGVsZW1lbnRzIG9m
IGFycmF5cworLy8gYW5kIHRoZSBwcm9wZXJ0aWVzIG9mIG5vbi1BcnJheSBvYmplY3RzKS4KK3Zh
ciBhc3NlcnROb3RFcXVhbHM7CisKKy8vIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gZXhwZWN0ZWQg
YW5kIGZvdW5kIHZhbHVlIGlzIHdpdGhpbiBjZXJ0YWluIHRvbGVyYW5jZS4KK3ZhciBhc3NlcnRF
cXVhbHNEZWx0YTsKKworLy8gVGhlIGZvdW5kIG9iamVjdCBpcyBhbiBBcnJheSB3aXRoIHRoZSBz
YW1lIGxlbmd0aCBhbmQgZWxlbWVudHMKKy8vIGFzIHRoZSBleHBlY3RlZCBvYmplY3QuIFRoZSBl
eHBlY3RlZCBvYmplY3QgZG9lc24ndCBuZWVkIHRvIGJlIGFuIEFycmF5LAorLy8gYXMgbG9uZyBh
cyBpdCdzICJhcnJheS1pc2giLgordmFyIGFzc2VydEFycmF5RXF1YWxzOworCisvLyBUaGUgZm91
bmQgb2JqZWN0IG11c3QgaGF2ZSB0aGUgc2FtZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgYXMgdGhl
CisvLyBleHBlY3RlZCBvYmplY3QuIFRoZSB0eXBlIG9mIG9iamVjdCBpc24ndCBjaGVja2VkLgor
dmFyIGFzc2VydFByb3BlcnRpZXNFcXVhbDsKKworLy8gQXNzZXJ0IHRoYXQgdGhlIHN0cmluZyBj
b252ZXJzaW9uIG9mIHRoZSBmb3VuZCB2YWx1ZSBpcyBlcXVhbCB0bworLy8gdGhlIGV4cGVjdGVk
IHN0cmluZy4gT25seSBrZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgcGxlYXNlCisv
LyBjaGVjayB0aGUgcmVhbCBzdHJ1Y3R1cmUgb2YgdGhlIGZvdW5kIHZhbHVlLgordmFyIGFzc2Vy
dFRvU3RyaW5nRXF1YWxzOworCisvLyBDaGVja3MgdGhhdCB0aGUgZm91bmQgdmFsdWUgaXMgdHJ1
ZS4gVXNlIHdpdGggYm9vbGVhbiBleHByZXNzaW9ucworLy8gZm9yIHRlc3RzIHRoYXQgZG9lc24n
dCBoYXZlIHRoZWlyIG93biBhc3NlcnRYWFggZnVuY3Rpb24uCit2YXIgYXNzZXJ0VHJ1ZTsKKwor
Ly8gQ2hlY2tzIHRoYXQgdGhlIGZvdW5kIHZhbHVlIGlzIGZhbHNlLgordmFyIGFzc2VydEZhbHNl
OworCisvLyBDaGVja3MgdGhhdCB0aGUgZm91bmQgdmFsdWUgaXMgbnVsbC4gS2VwdCBmb3IgaGlz
dG9yaWNhbCBjb21wYXRpYmlsaXR5LAorLy8gcGxlYXNlIGp1c3QgdXNlIGFzc2VydEVxdWFscyhu
dWxsLCBleHBlY3RlZCkuCit2YXIgYXNzZXJ0TnVsbDsKKworLy8gQ2hlY2tzIHRoYXQgdGhlIGZv
dW5kIHZhbHVlIGlzICpub3QqIG51bGwuCit2YXIgYXNzZXJ0Tm90TnVsbDsKKworLy8gQXNzZXJ0
IHRoYXQgdGhlIHBhc3NlZCBmdW5jdGlvbiBvciBldmFsIGNvZGUgdGhyb3dzIGFuIGV4Y2VwdGlv
bi4KKy8vIFRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgaXMgYW4gZXhjZXB0aW9uIGNvbnN0
cnVjdG9yIHRoYXQgdGhlCisvLyB0aHJvd24gZXhjZXB0aW9uIGlzIGNoZWNrZWQgYWdhaW5zdCB3
aXRoICJpbnN0YW5jZW9mIi4KKy8vIFRoZSBvcHRpb25hbCB0aGlyZCBhcmd1bWVudCBpcyBhIG1l
c3NhZ2UgdHlwZSBzdHJpbmcgb3IgUmVnRXhwIG9iamVjdCB0aGF0IGlzCisvLyBjb21wYXJlZCB0
byB0aGUgbWVzc2FnZSBvZiB0aGUgdGhyb3duIGV4Y2VwdGlvbi4KK3ZhciBhc3NlcnRUaHJvd3M7
CisKKy8vIEFzc2VydCB0aGF0IHRoZSBwYXNzZWQgZnVuY3Rpb24gdGhyb3dzIGFuIGV4Y2VwdGlv
bi4KKy8vIFRoZSBleGNlcHRpb24gaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBzZWNvbmQgYXJndW1l
bnQgdXNpbmcgYXNzZXJ0RXF1YWxzLgordmFyIGFzc2VydFRocm93c0VxdWFsczsKKworLy8gQXNz
ZXJ0IHRoYXQgdGhlIHBhc3NlZCBwcm9taXNlIGRvZXMgbm90IHJlc29sdmUsIGJ1dCBldmVudHVh
bGx5IHRocm93cyBhbgorLy8gZXhjZXB0aW9uLiBUaGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50
IGlzIGFuIGV4Y2VwdGlvbiBjb25zdHJ1Y3RvciB0aGF0IHRoZQorLy8gdGhyb3duIGV4Y2VwdGlv
biBpcyBjaGVja2VkIGFnYWluc3Qgd2l0aCAiaW5zdGFuY2VvZiIuCisvLyBUaGUgb3B0aW9uYWwg
dGhpcmQgYXJndW1lbnQgaXMgYSBtZXNzYWdlIHR5cGUgc3RyaW5nIG9yIFJlZ0V4cCBvYmplY3Qg
dGhhdCBpcworLy8gY29tcGFyZWQgdG8gdGhlIG1lc3NhZ2Ugb2YgdGhlIHRocm93biBleGNlcHRp
b24uCit2YXIgYXNzZXJ0VGhyb3dzQXN5bmM7CisKKy8vIEFzc2VydCB0aGF0IHRoZSBwYXNzZWQg
ZnVuY3Rpb24gb3IgZXZhbCBjb2RlIGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK3ZhciBh
c3NlcnREb2VzTm90VGhyb3c7CisKKy8vIEFzc2VydHMgdGhhdCB0aGUgZm91bmQgdmFsdWUgaXMg
YW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnN0cnVjdG9yIHBhc3NlZAorLy8gYXMgdGhlIHNlY29uZCBh
cmd1bWVudC4KK3ZhciBhc3NlcnRJbnN0YW5jZW9mOworCisvLyBBc3NlcnQgdGhhdCB0aGlzIGNv
ZGUgaXMgbmV2ZXIgZXhlY3V0ZWQgKGkuZS4sIGFsd2F5cyBmYWlscyBpZiBleGVjdXRlZCkuCit2
YXIgYXNzZXJ0VW5yZWFjaGFibGU7CisKKy8vIEFzc2VydCB0aGF0IHRoZSBmdW5jdGlvbiBjb2Rl
IGlzIChub3QpIG9wdGltaXplZC4KKy8vIE9ubHkgd29ya3Mgd2l0aCAtLWFsbG93LW5hdGl2ZXMt
c3ludGF4LgordmFyIGFzc2VydE9wdGltaXplZDsKK3ZhciBhc3NlcnRVbm9wdGltaXplZDsKKwor
Ly8gQXNzZXJ0IHRoYXQgYSBzdHJpbmcgY29udGFpbnMgYW5vdGhlciBleHBlY3RlZCBzdWJzdHJp
bmcuCit2YXIgYXNzZXJ0Q29udGFpbnM7CisKKy8vIEFzc2VydCB0aGF0IGEgc3RyaW5nIG1hdGNo
ZXMgYSBnaXZlbiByZWdleC4KK3ZhciBhc3NlcnRNYXRjaGVzOworCisvLyBBc3NlcnQgdGhhdCBh
IHByb21pc2UgcmVzb2x2ZXMgb3IgcmVqZWN0cy4KKy8vIFBhcmFtZXRlcnM6CisvLyB7cHJvbWlz
ZX0gLSB0aGUgcHJvbWlzZQorLy8ge3N1Y2Nlc3N9IC0gb3B0aW9uYWwgLSBhIGNhbGxiYWNrIHdo
aWNoIGlzIGNhbGxlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlCisvLyAgICAgICAgICAgICByZXNv
bHZpbmcgcHJvbWlzZS4KKy8vICB7ZmFpbH0gLSAgIG9wdGlvbmFsIC0gYSBjYWxsYmFjayB3aGlj
aCBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZQorLy8gICAgICAgICAgICAgcmVqZWN0
aW5nIHByb21pc2UuIElmIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIGJ1dCBubyB7ZmFpbH0KKy8v
ICAgICAgICAgICAgIGNhbGxiYWNrIGlzIHNldCwgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQgb3V0
IG9mIHRoZSBwcm9taXNlCisvLyAgICAgICAgICAgICBjaGFpbi4KK3ZhciBhc3NlcnRQcm9taXNl
UmVzdWx0OworCit2YXIgcHJvbWlzZVRlc3RDaGFpbjsKK3ZhciBwcm9taXNlVGVzdENvdW50ID0g
MDsKKworLy8gVGhlc2UgYml0cyBtdXN0IGJlIGluIHN5bmMgd2l0aCBiaXRzIGRlZmluZWQgaW4g
UnVudGltZV9HZXRPcHRpbWl6YXRpb25TdGF0dXMKK3ZhciBWOE9wdGltaXphdGlvblN0YXR1cyA9
IHsKKyAga0lzRnVuY3Rpb246IDEgPDwgMCwKKyAga05ldmVyT3B0aW1pemU6IDEgPDwgMSwKKyAg
a0Fsd2F5c09wdGltaXplOiAxIDw8IDIsCisgIGtNYXliZURlb3B0ZWQ6IDEgPDwgMywKKyAga09w
dGltaXplZDogMSA8PCA0LAorICBrVHVyYm9GYW5uZWQ6IDEgPDwgNSwKKyAga0ludGVycHJldGVk
OiAxIDw8IDYsCisgIGtNYXJrZWRGb3JPcHRpbWl6YXRpb246IDEgPDwgNywKKyAga01hcmtlZEZv
ckNvbmN1cnJlbnRPcHRpbWl6YXRpb246IDEgPDwgOCwKKyAga09wdGltaXppbmdDb25jdXJyZW50
bHk6IDEgPDwgOSwKKyAga0lzRXhlY3V0aW5nOiAxIDw8IDEwLAorICBrVG9wbW9zdEZyYW1lSXNU
dXJib0Zhbm5lZDogMSA8PCAxMSwKKyAga0xpdGVNb2RlOiAxIDw8IDEyLAorICBrTWFya2VkRm9y
RGVvcHRpbWl6YXRpb246IDEgPDwgMTMsCisgIGtCYXNlbGluZTogMSA8PCAxNCwKKyAga1RvcG1v
c3RGcmFtZUlzSW50ZXJwcmV0ZWQ6IDEgPDwgMTUsCisgIGtUb3Btb3N0RnJhbWVJc0Jhc2VsaW5l
OiAxIDw8IDE2LAorfTsKKworLy8gUmV0dXJucyB0cnVlIGlmIC0tbGl0ZS1tb2RlIGlzIG9uIGFu
ZCB3ZSBjYW4ndCBldmVyIHR1cm4gb24gb3B0aW1pemF0aW9uLgordmFyIGlzTmV2ZXJPcHRpbWl6
ZUxpdGVNb2RlOworCisvLyBSZXR1cm5zIHRydWUgaWYgLS1uby1vcHQgbW9kZSBpcyBvbi4KK3Zh
ciBpc05ldmVyT3B0aW1pemU7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiAtLWFsd2F5cy1vcHQgbW9k
ZSBpcyBvbi4KK3ZhciBpc0Fsd2F5c09wdGltaXplOworCisvLyBSZXR1cm5zIHRydWUgaWYgZ2l2
ZW4gZnVuY3Rpb24gaW4gaW50ZXJwcmV0ZWQuCit2YXIgaXNJbnRlcnByZXRlZDsKKworLy8gUmV0
dXJucyB0cnVlIGlmIGdpdmVuIGZ1bmN0aW9uIGluIGJhc2VsaW5lLgordmFyIGlzQmFzZWxpbmU7
CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBmdW5jdGlvbiBpbiB1bm9wdGltaXplZCAoaW50
ZXJwcmV0ZWQgb3IgYmFzZWxpbmUpLgordmFyIGlzVW5vcHRpbWl6ZWQ7CisKKy8vIFJldHVybnMg
dHJ1ZSBpZiBnaXZlbiBmdW5jdGlvbiBpcyBvcHRpbWl6ZWQuCit2YXIgaXNPcHRpbWl6ZWQ7CisK
Ky8vIFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBmdW5jdGlvbiBpcyBjb21waWxlZCBieSBUdXJib0Zh
bi4KK3ZhciBpc1R1cmJvRmFubmVkOworCisvLyBNb25rZXktcGF0Y2hhYmxlIGFsbC1wdXJwb3Nl
IGZhaWx1cmUgaGFuZGxlci4KK3ZhciBmYWlsV2l0aE1lc3NhZ2U7CisKKy8vIFJldHVybnMgdGhl
IGZvcm1hdHRlZCBmYWlsdXJlIHRleHQuICBVc2VkIGJ5IHRlc3QtYXN5bmMuanMuCit2YXIgZm9y
bWF0RmFpbHVyZVRleHQ7CisKKy8vIFJldHVybnMgYSBwcmV0dHktcHJpbnRlZCBzdHJpbmcgcmVw
cmVzZW50YXRpb24gb2YgdGhlIHBhc3NlZCB2YWx1ZS4KK3ZhciBwcmV0dHlQcmludGVkOworCiso
ZnVuY3Rpb24gKCkgeyAgLy8gU2NvcGUgZm9yIHV0aWxpdHkgZnVuY3Rpb25zLgorCisgIHZhciBP
YmplY3RQcm90b3R5cGVUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CisgIHZh
ciBOdW1iZXJQcm90b3R5cGVWYWx1ZU9mID0gTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mOworICB2
YXIgQm9vbGVhblByb3RvdHlwZVZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mOwor
ICB2YXIgU3RyaW5nUHJvdG90eXBlVmFsdWVPZiA9IFN0cmluZy5wcm90b3R5cGUudmFsdWVPZjsK
KyAgdmFyIERhdGVQcm90b3R5cGVWYWx1ZU9mID0gRGF0ZS5wcm90b3R5cGUudmFsdWVPZjsKKyAg
dmFyIFJlZ0V4cFByb3RvdHlwZVRvU3RyaW5nID0gUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZzsK
KyAgdmFyIEFycmF5UHJvdG90eXBlRm9yRWFjaCA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoOwor
ICB2YXIgQXJyYXlQcm90b3R5cGVKb2luID0gQXJyYXkucHJvdG90eXBlLmpvaW47CisgIHZhciBB
cnJheVByb3RvdHlwZU1hcCA9IEFycmF5LnByb3RvdHlwZS5tYXA7CisgIHZhciBBcnJheVByb3Rv
dHlwZVB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDsKKyAgdmFyIEpTT05TdHJpbmdpZnkgPSBK
U09OLnN0cmluZ2lmeTsKKworICB2YXIgQmlnSW50UHJvdG90eXBlVmFsdWVPZjsKKyAgLy8gVE9E
TyhuZWlzKTogUmVtb3ZlIHRyeS1jYXRjaCBvbmNlIEJpZ0ludHMgYXJlIGVuYWJsZWQgYnkgZGVm
YXVsdC4KKyAgdHJ5IHsKKyAgICBCaWdJbnRQcm90b3R5cGVWYWx1ZU9mID0gQmlnSW50LnByb3Rv
dHlwZS52YWx1ZU9mOworICB9IGNhdGNoIChlKSB7fQorCisgIGZ1bmN0aW9uIGNsYXNzT2Yob2Jq
ZWN0KSB7CisgICAgLy8gQXJndW1lbnQgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuCisg
ICAgdmFyIHN0cmluZyA9IE9iamVjdFByb3RvdHlwZVRvU3RyaW5nLmNhbGwob2JqZWN0KTsKKyAg
ICAvLyBTdHJpbmcgaGFzIGZvcm1hdCBbb2JqZWN0IDxDbGFzc05hbWU+XS4KKyAgICByZXR1cm4g
c3RyaW5nLnN1YnN0cmluZyg4LCBzdHJpbmcubGVuZ3RoIC0gMSk7CisgIH0KKworCisgIGZ1bmN0
aW9uIFZhbHVlT2YodmFsdWUpIHsKKyAgICBzd2l0Y2ggKGNsYXNzT2YodmFsdWUpKSB7CisgICAg
ICBjYXNlICJOdW1iZXIiOgorICAgICAgICByZXR1cm4gTnVtYmVyUHJvdG90eXBlVmFsdWVPZi5j
YWxsKHZhbHVlKTsKKyAgICAgIGNhc2UgIkJpZ0ludCI6CisgICAgICAgIHJldHVybiBCaWdJbnRQ
cm90b3R5cGVWYWx1ZU9mLmNhbGwodmFsdWUpOworICAgICAgY2FzZSAiU3RyaW5nIjoKKyAgICAg
ICAgcmV0dXJuIFN0cmluZ1Byb3RvdHlwZVZhbHVlT2YuY2FsbCh2YWx1ZSk7CisgICAgICBjYXNl
ICJCb29sZWFuIjoKKyAgICAgICAgcmV0dXJuIEJvb2xlYW5Qcm90b3R5cGVWYWx1ZU9mLmNhbGwo
dmFsdWUpOworICAgICAgY2FzZSAiRGF0ZSI6CisgICAgICAgIHJldHVybiBEYXRlUHJvdG90eXBl
VmFsdWVPZi5jYWxsKHZhbHVlKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICB9CisgIH0KKworCisgIHByZXR0eVByaW50ZWQgPSBmdW5jdGlvbiBwcmV0dHlQcmlu
dGVkKHZhbHVlKSB7CisgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHsKKyAgICAgIGNhc2UgInN0
cmluZyI6CisgICAgICAgIHJldHVybiBKU09OU3RyaW5naWZ5KHZhbHVlKTsKKyAgICAgIGNhc2Ug
ImJpZ2ludCI6CisgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpICsgIm4iOworICAgICAgY2Fz
ZSAibnVtYmVyIjoKKyAgICAgICAgaWYgKHZhbHVlID09PSAwICYmICgxIC8gdmFsdWUpIDwgMCkg
cmV0dXJuICItMCI7CisgICAgICAgIC8vIEZBTExUSFJPVUdILgorICAgICAgY2FzZSAiYm9vbGVh
biI6CisgICAgICBjYXNlICJ1bmRlZmluZWQiOgorICAgICAgY2FzZSAiZnVuY3Rpb24iOgorICAg
ICAgY2FzZSAic3ltYm9sIjoKKyAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7CisgICAgICBj
YXNlICJvYmplY3QiOgorICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAibnVsbCI7
CisgICAgICAgIHZhciBvYmplY3RDbGFzcyA9IGNsYXNzT2YodmFsdWUpOworICAgICAgICBzd2l0
Y2ggKG9iamVjdENsYXNzKSB7CisgICAgICAgICAgY2FzZSAiTnVtYmVyIjoKKyAgICAgICAgICBj
YXNlICJCaWdJbnQiOgorICAgICAgICAgIGNhc2UgIlN0cmluZyI6CisgICAgICAgICAgY2FzZSAi
Qm9vbGVhbiI6CisgICAgICAgICAgY2FzZSAiRGF0ZSI6CisgICAgICAgICAgICByZXR1cm4gb2Jq
ZWN0Q2xhc3MgKyAiKCIgKyBwcmV0dHlQcmludGVkKFZhbHVlT2YodmFsdWUpKSArICIpIjsKKyAg
ICAgICAgICBjYXNlICJSZWdFeHAiOgorICAgICAgICAgICAgcmV0dXJuIFJlZ0V4cFByb3RvdHlw
ZVRvU3RyaW5nLmNhbGwodmFsdWUpOworICAgICAgICAgIGNhc2UgIkFycmF5IjoKKyAgICAgICAg
ICAgIHZhciBtYXBwZWQgPSBBcnJheVByb3RvdHlwZU1hcC5jYWxsKAorICAgICAgICAgICAgICAg
IHZhbHVlLCBwcmV0dHlQcmludGVkQXJyYXlFbGVtZW50KTsKKyAgICAgICAgICAgIHZhciBqb2lu
ZWQgPSBBcnJheVByb3RvdHlwZUpvaW4uY2FsbChtYXBwZWQsICIsIik7CisgICAgICAgICAgICBy
ZXR1cm4gIlsiICsgam9pbmVkICsgIl0iOworICAgICAgICAgIGNhc2UgIlVpbnQ4QXJyYXkiOgor
ICAgICAgICAgIGNhc2UgIkludDhBcnJheSI6CisgICAgICAgICAgY2FzZSAiSW50MTZBcnJheSI6
CisgICAgICAgICAgY2FzZSAiVWludDE2QXJyYXkiOgorICAgICAgICAgIGNhc2UgIlVpbnQzMkFy
cmF5IjoKKyAgICAgICAgICBjYXNlICJJbnQzMkFycmF5IjoKKyAgICAgICAgICBjYXNlICJGbG9h
dDMyQXJyYXkiOgorICAgICAgICAgIGNhc2UgIkZsb2F0NjRBcnJheSI6CisgICAgICAgICAgICB2
YXIgam9pbmVkID0gQXJyYXlQcm90b3R5cGVKb2luLmNhbGwodmFsdWUsICIsIik7CisgICAgICAg
ICAgICByZXR1cm4gb2JqZWN0Q2xhc3MgKyAiKFsiICsgam9pbmVkICsgIl0pIjsKKyAgICAgICAg
ICBjYXNlICJPYmplY3QiOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBvYmplY3RDbGFzcyArICIoIiArIFN0cmluZyh2YWx1ZSkgKyAi
KSI7CisgICAgICAgIH0KKyAgICAgICAgLy8gY2xhc3NPZigpIHJldHVybmVkICJPYmplY3QiLgor
ICAgICAgICB2YXIgbmFtZSA9IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7CisgICAgICAgIGlmIChu
YW1lKSByZXR1cm4gbmFtZSArICIoKSI7CisgICAgICAgIHJldHVybiAiT2JqZWN0KCkiOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICItLSB1bmtub3duIHZhbHVlIC0tIjsKKyAgICB9
CisgIH0KKworCisgIGZ1bmN0aW9uIHByZXR0eVByaW50ZWRBcnJheUVsZW1lbnQodmFsdWUsIGlu
ZGV4LCBhcnJheSkgeworICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoaW5kZXggaW4g
YXJyYXkpKSByZXR1cm4gIiI7CisgICAgcmV0dXJuIHByZXR0eVByaW50ZWQodmFsdWUpOworICB9
CisKKworICBmYWlsV2l0aE1lc3NhZ2UgPSBmdW5jdGlvbiBmYWlsV2l0aE1lc3NhZ2UobWVzc2Fn
ZSkgeworICAgIHRocm93IG5ldyBNanNVbml0QXNzZXJ0aW9uRXJyb3IobWVzc2FnZSk7CisgIH0K
KworICBmb3JtYXRGYWlsdXJlVGV4dCA9IGZ1bmN0aW9uKGV4cGVjdGVkVGV4dCwgZm91bmQsIG5h
bWVfb3B0KSB7CisgICAgdmFyIG1lc3NhZ2UgPSAiRmFpbCIgKyAidXJlIjsKKyAgICBpZiAobmFt
ZV9vcHQpIHsKKyAgICAgIC8vIEZpeCB0aGlzIHdoZW4gd2UgZGl0Y2ggdGhlIG9sZCB0ZXN0IHJ1
bm5lci4KKyAgICAgIG1lc3NhZ2UgKz0gIiAoIiArIG5hbWVfb3B0ICsgIikiOworICAgIH0KKwor
ICAgIHZhciBmb3VuZFRleHQgPSBwcmV0dHlQcmludGVkKGZvdW5kKTsKKyAgICBpZiAoZXhwZWN0
ZWRUZXh0Lmxlbmd0aCA8PSA0MCAmJiBmb3VuZFRleHQubGVuZ3RoIDw9IDQwKSB7CisgICAgICBt
ZXNzYWdlICs9ICI6IGV4cGVjdGVkIDwiICsgZXhwZWN0ZWRUZXh0ICsgIj4gZm91bmQgPCIgKyBm
b3VuZFRleHQgKyAiPiI7CisgICAgfSBlbHNlIHsKKyAgICAgIG1lc3NhZ2UgKz0gIjpcbmV4cGVj
dGVkOlxuIiArIGV4cGVjdGVkVGV4dCArICJcbmZvdW5kOlxuIiArIGZvdW5kVGV4dDsKKyAgICB9
CisgICAgcmV0dXJuIG1lc3NhZ2U7CisgIH0KKworICBmdW5jdGlvbiBmYWlsKGV4cGVjdGVkVGV4
dCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAgcmV0dXJuIGZhaWxXaXRoTWVzc2FnZShmb3JtYXRG
YWlsdXJlVGV4dChleHBlY3RlZFRleHQsIGZvdW5kLCBuYW1lX29wdCkpOworICB9CisKKworICBm
dW5jdGlvbiBkZWVwT2JqZWN0RXF1YWxzKGEsIGIpIHsKKyAgICB2YXIgYVByb3BzID0gT2JqZWN0
LmtleXMoYSk7CisgICAgYVByb3BzLnNvcnQoKTsKKyAgICB2YXIgYlByb3BzID0gT2JqZWN0Lmtl
eXMoYik7CisgICAgYlByb3BzLnNvcnQoKTsKKyAgICBpZiAoIWRlZXBFcXVhbHMoYVByb3BzLCBi
UHJvcHMpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgYVByb3BzLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAoIWRlZXBFcXVhbHMoYVthUHJv
cHNbaV1dLCBiW2FQcm9wc1tpXV0pKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworCisgIGRlZXBFcXVhbHMgPSBmdW5jdGlv
biBkZWVwRXF1YWxzKGEsIGIpIHsKKyAgICBpZiAoYSA9PT0gYikgeworICAgICAgLy8gQ2hlY2sg
Zm9yIC0wLgorICAgICAgaWYgKGEgPT09IDApIHJldHVybiAoMSAvIGEpID09PSAoMSAvIGIpOwor
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIp
IHJldHVybiBmYWxzZTsKKyAgICBpZiAodHlwZW9mIGEgPT09ICJudW1iZXIiKSByZXR1cm4gaXNO
YU4oYSkgJiYgaXNOYU4oYik7CisgICAgaWYgKHR5cGVvZiBhICE9PSAib2JqZWN0IiAmJiB0eXBl
b2YgYSAhPT0gImZ1bmN0aW9uIikgcmV0dXJuIGZhbHNlOworICAgIC8vIE5laXRoZXIgYSBub3Ig
YiBpcyBwcmltaXRpdmUuCisgICAgdmFyIG9iamVjdENsYXNzID0gY2xhc3NPZihhKTsKKyAgICBp
ZiAob2JqZWN0Q2xhc3MgIT09IGNsYXNzT2YoYikpIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2Jq
ZWN0Q2xhc3MgPT09ICJSZWdFeHAiKSB7CisgICAgICAvLyBGb3IgUmVnRXhwLCBqdXN0IGNvbXBh
cmUgcGF0dGVybiBhbmQgZmxhZ3MgdXNpbmcgaXRzIHRvU3RyaW5nLgorICAgICAgcmV0dXJuIFJl
Z0V4cFByb3RvdHlwZVRvU3RyaW5nLmNhbGwoYSkgPT09CisgICAgICAgICAgICAgUmVnRXhwUHJv
dG90eXBlVG9TdHJpbmcuY2FsbChiKTsKKyAgICB9CisgICAgLy8gRnVuY3Rpb25zIGFyZSBvbmx5
IGlkZW50aWNhbCB0byB0aGVtc2VsdmVzLgorICAgIGlmIChvYmplY3RDbGFzcyA9PT0gIkZ1bmN0
aW9uIikgcmV0dXJuIGZhbHNlOworICAgIGlmIChvYmplY3RDbGFzcyA9PT0gIkFycmF5Iikgewor
ICAgICAgdmFyIGVsZW1lbnRDb3VudCA9IDA7CisgICAgICBpZiAoYS5sZW5ndGggIT09IGIubGVu
Z3RoKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoIWRlZXBFcXVhbHMoYVtpXSwg
YltpXSkpIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBpZiAob2JqZWN0Q2xhc3MgPT09ICJTdHJpbmciIHx8IG9iamVjdENsYXNzID09PSAiTnVt
YmVyIiB8fAorICAgICAgb2JqZWN0Q2xhc3MgPT09ICJCaWdJbnQiIHx8IG9iamVjdENsYXNzID09
PSAiQm9vbGVhbiIgfHwKKyAgICAgIG9iamVjdENsYXNzID09PSAiRGF0ZSIpIHsKKyAgICAgIGlm
IChWYWx1ZU9mKGEpICE9PSBWYWx1ZU9mKGIpKSByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiBkZWVwT2JqZWN0RXF1YWxzKGEsIGIpOworICB9CisKKyAgYXNzZXJ0U2FtZSA9IGZ1bmN0
aW9uIGFzc2VydFNhbWUoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCkgeworICAgIGlmIChPYmpl
Y3QuaXMoZXhwZWN0ZWQsIGZvdW5kKSkgcmV0dXJuOworICAgIGZhaWwocHJldHR5UHJpbnRlZChl
eHBlY3RlZCksIGZvdW5kLCBuYW1lX29wdCk7CisgIH07CisKKyAgYXNzZXJ0Tm90U2FtZSA9IGZ1
bmN0aW9uIGFzc2VydE5vdFNhbWUoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCkgeworICAgIGlm
ICghT2JqZWN0LmlzKGV4cGVjdGVkLCBmb3VuZCkpIHJldHVybjsKKyAgICBmYWlsKCJub3Qgc2Ft
ZSBhcyAiICsgcHJldHR5UHJpbnRlZChleHBlY3RlZCksIGZvdW5kLCBuYW1lX29wdCk7CisgIH0K
KworICBhc3NlcnRFcXVhbHMgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGZvdW5k
LCBuYW1lX29wdCkgeworICAgIGlmICghZGVlcEVxdWFscyhmb3VuZCwgZXhwZWN0ZWQpKSB7Cisg
ICAgICBmYWlsKHByZXR0eVByaW50ZWQoZXhwZWN0ZWQpLCBmb3VuZCwgbmFtZV9vcHQpOworICAg
IH0KKyAgfTsKKworICBhc3NlcnROb3RFcXVhbHMgPSBmdW5jdGlvbiBhc3NlcnROb3RFcXVhbHMo
ZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCkgeworICAgIGlmIChkZWVwRXF1YWxzKGZvdW5kLCBl
eHBlY3RlZCkpIHsKKyAgICAgIGZhaWwoIm5vdCBlcXVhbHMgdG8gIiArIHByZXR0eVByaW50ZWQo
ZXhwZWN0ZWQpLCBmb3VuZCwgbmFtZV9vcHQpOworICAgIH0KKyAgfTsKKworCisgIGFzc2VydEVx
dWFsc0RlbHRhID0KKyAgICAgIGZ1bmN0aW9uIGFzc2VydEVxdWFsc0RlbHRhKGV4cGVjdGVkLCBm
b3VuZCwgZGVsdGEsIG5hbWVfb3B0KSB7CisgICAgaWYgKE1hdGguYWJzKGV4cGVjdGVkIC0gZm91
bmQpID4gZGVsdGEpIHsKKyAgICAgIGZhaWwocHJldHR5UHJpbnRlZChleHBlY3RlZCkgKyAiICst
ICIgKyBwcmV0dHlQcmludGVkKGRlbHRhKSwgZm91bmQsIG5hbWVfb3B0KTsKKyAgICB9CisgIH07
CisKKworICBhc3NlcnRBcnJheUVxdWFscyA9IGZ1bmN0aW9uIGFzc2VydEFycmF5RXF1YWxzKGV4
cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgICB2YXIgc3RhcnQgPSAiIjsKKyAgICBpZiAo
bmFtZV9vcHQpIHsKKyAgICAgIHN0YXJ0ID0gbmFtZV9vcHQgKyAiIC0gIjsKKyAgICB9CisgICAg
YXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmxlbmd0aCwgZm91bmQubGVuZ3RoLCBzdGFydCArICJhcnJh
eSBsZW5ndGgiKTsKKyAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09PSBmb3VuZC5sZW5ndGgpIHsK
KyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkW2ldLCBmb3VuZFtpXSwKKyAgICAgICAgICAgICAgICAg
ICAgIHN0YXJ0ICsgImFycmF5IGVsZW1lbnQgYXQgaW5kZXggIiArIGkpOworICAgICAgfQorICAg
IH0KKyAgfTsKKworCisgIGFzc2VydFByb3BlcnRpZXNFcXVhbCA9IGZ1bmN0aW9uIGFzc2VydFBy
b3BlcnRpZXNFcXVhbChleHBlY3RlZCwgZm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX29wdCkgeworICAgIC8vIENoZWNr
IHByb3BlcnRpZXMgb25seS4KKyAgICBpZiAoIWRlZXBPYmplY3RFcXVhbHMoZXhwZWN0ZWQsIGZv
dW5kKSkgeworICAgICAgZmFpbChleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KTsKKyAgICB9Cisg
IH07CisKKworICBhc3NlcnRUb1N0cmluZ0VxdWFscyA9IGZ1bmN0aW9uIGFzc2VydFRvU3RyaW5n
RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lX29wdCkgeworICAgIGlmIChleHBlY3RlZCAhPT0g
U3RyaW5nKGZvdW5kKSkgeworICAgICAgZmFpbChleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KTsK
KyAgICB9CisgIH07CisKKworICBhc3NlcnRUcnVlID0gZnVuY3Rpb24gYXNzZXJ0VHJ1ZSh2YWx1
ZSwgbmFtZV9vcHQpIHsKKyAgICBhc3NlcnRFcXVhbHModHJ1ZSwgdmFsdWUsIG5hbWVfb3B0KTsK
KyAgfTsKKworCisgIGFzc2VydEZhbHNlID0gZnVuY3Rpb24gYXNzZXJ0RmFsc2UodmFsdWUsIG5h
bWVfb3B0KSB7CisgICAgYXNzZXJ0RXF1YWxzKGZhbHNlLCB2YWx1ZSwgbmFtZV9vcHQpOworICB9
OworCisKKyAgYXNzZXJ0TnVsbCA9IGZ1bmN0aW9uIGFzc2VydE51bGwodmFsdWUsIG5hbWVfb3B0
KSB7CisgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7CisgICAgICBmYWlsKCJudWxsIiwgdmFsdWUs
IG5hbWVfb3B0KTsKKyAgICB9CisgIH07CisKKworICBhc3NlcnROb3ROdWxsID0gZnVuY3Rpb24g
YXNzZXJ0Tm90TnVsbCh2YWx1ZSwgbmFtZV9vcHQpIHsKKyAgICBpZiAodmFsdWUgPT09IG51bGwp
IHsKKyAgICAgIGZhaWwoIm5vdCBudWxsIiwgdmFsdWUsIG5hbWVfb3B0KTsKKyAgICB9CisgIH07
CisKKyAgZnVuY3Rpb24gZXhlY3V0ZUNvZGUoY29kZSkgeworICAgIGlmICh0eXBlb2YgY29kZSA9
PT0gJ2Z1bmN0aW9uJykgIHJldHVybiBjb2RlKCk7CisgICAgaWYgKHR5cGVvZiBjb2RlID09PSAn
c3RyaW5nJykgcmV0dXJuIGV2YWwoY29kZSk7CisgICAgZmFpbFdpdGhNZXNzYWdlKAorICAgICAg
ICAnR2l2ZW4gY29kZSBpcyBuZWl0aGVyIGZ1bmN0aW9uIG5vciBzdHJpbmcsIGJ1dCAnICsgKHR5
cGVvZiBjb2RlKSArCisgICAgICAgICc6IDwnICsgcHJldHR5UHJpbnRlZChjb2RlKSArICc+Jyk7
CisgIH0KKworICBmdW5jdGlvbiBjaGVja0V4Y2VwdGlvbihlLCB0eXBlX29wdCwgY2F1c2Vfb3B0
KSB7CisgICAgaWYgKHR5cGVfb3B0ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIGFzc2VydEVxdWFs
cygnZnVuY3Rpb24nLCB0eXBlb2YgdHlwZV9vcHQpOworICAgICAgYXNzZXJ0SW5zdGFuY2VvZihl
LCB0eXBlX29wdCk7CisgICAgfQorICAgIGlmIChSZWdFeHAgIT09IHVuZGVmaW5lZCAmJiBjYXVz
ZV9vcHQgaW5zdGFuY2VvZiBSZWdFeHApIHsKKyAgICAgIGFzc2VydE1hdGNoZXMoY2F1c2Vfb3B0
LCBlLm1lc3NhZ2UsICdFcnJvciBtZXNzYWdlJyk7CisgICAgfSBlbHNlIGlmIChjYXVzZV9vcHQg
IT09IHVuZGVmaW5lZCkgeworICAgICAgYXNzZXJ0RXF1YWxzKGNhdXNlX29wdCwgZS5tZXNzYWdl
LCAnRXJyb3IgbWVzc2FnZScpOworICAgIH0KKyAgfQorCisgIGFzc2VydFRocm93cyA9IGZ1bmN0
aW9uIGFzc2VydFRocm93cyhjb2RlLCB0eXBlX29wdCwgY2F1c2Vfb3B0KSB7CisgICAgaWYgKGFy
Z3VtZW50cy5sZW5ndGggPiAxICYmIHR5cGVfb3B0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgIGZh
aWxXaXRoTWVzc2FnZSgnaW52YWxpZCB1c2Ugb2YgYXNzZXJ0VGhyb3dzLCB1bmtub3duIHR5cGVf
b3B0IGdpdmVuJyk7CisgICAgfQorICAgIGlmICh0eXBlX29wdCAhPT0gdW5kZWZpbmVkICYmIHR5
cGVvZiB0eXBlX29wdCAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAgZmFpbFdpdGhNZXNzYWdlKAor
ICAgICAgICAgICdpbnZhbGlkIHVzZSBvZiBhc3NlcnRUaHJvd3MsIG1heWJlIHlvdSB3YW50IGFz
c2VydFRocm93c0VxdWFscycpOworICAgIH0KKyAgICB0cnkgeworICAgICAgZXhlY3V0ZUNvZGUo
Y29kZSk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgY2hlY2tFeGNlcHRpb24oZSwgdHlwZV9v
cHQsIGNhdXNlX29wdCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGxldCBtc2cgPSAnRGlk
IG5vdCB0aHJvdyBleGNlcHRpb24nOworICAgIGlmICh0eXBlX29wdCAhPT0gdW5kZWZpbmVkICYm
IHR5cGVfb3B0Lm5hbWUgIT09IHVuZGVmaW5lZCkKKyAgICAgIG1zZyArPSAnLCBleHBlY3RlZCAn
ICsgdHlwZV9vcHQubmFtZTsKKyAgICBmYWlsV2l0aE1lc3NhZ2UobXNnKTsKKyAgfTsKKworICBh
c3NlcnRUaHJvd3NFcXVhbHMgPSBmdW5jdGlvbiBhc3NlcnRUaHJvd3NFcXVhbHMoZnVuLCB2YWwp
IHsKKyAgICB0cnkgeworICAgICAgZnVuKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgYXNz
ZXJ0U2FtZSh2YWwsIGUpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmYWlsV2l0aE1lc3Nh
Z2UoJ0RpZCBub3QgdGhyb3cgZXhjZXB0aW9uLCBleHBlY3RlZCAnICsgcHJldHR5UHJpbnRlZCh2
YWwpKTsKKyAgfTsKKworICBhc3NlcnRUaHJvd3NBc3luYyA9IGZ1bmN0aW9uIGFzc2VydFRocm93
c0FzeW5jKHByb21pc2UsIHR5cGVfb3B0LCBjYXVzZV9vcHQpIHsKKyAgICBpZiAoYXJndW1lbnRz
Lmxlbmd0aCA+IDEgJiYgdHlwZV9vcHQgPT09IHVuZGVmaW5lZCkgeworICAgICAgZmFpbFdpdGhN
ZXNzYWdlKCdpbnZhbGlkIHVzZSBvZiBhc3NlcnRUaHJvd3MsIHVua25vd24gdHlwZV9vcHQgZ2l2
ZW4nKTsKKyAgICB9CisgICAgaWYgKHR5cGVfb3B0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHR5
cGVfb3B0ICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICBmYWlsV2l0aE1lc3NhZ2UoCisgICAgICAg
ICAgJ2ludmFsaWQgdXNlIG9mIGFzc2VydFRocm93cywgbWF5YmUgeW91IHdhbnQgYXNzZXJ0VGhy
b3dzRXF1YWxzJyk7CisgICAgfQorICAgIGxldCBtc2cgPSAnUHJvbWlzZSBkaWQgbm90IHRocm93
IGV4Y2VwdGlvbic7CisgICAgaWYgKHR5cGVfb3B0ICE9PSB1bmRlZmluZWQgJiYgdHlwZV9vcHQu
bmFtZSAhPT0gdW5kZWZpbmVkKQorICAgICAgbXNnICs9ICcsIGV4cGVjdGVkICcgKyB0eXBlX29w
dC5uYW1lOworICAgIHJldHVybiBhc3NlcnRQcm9taXNlUmVzdWx0KAorICAgICAgICBwcm9taXNl
LAorICAgICAgICAvLyBVc2Ugc2V0VGltZW91dCB0byB0aHJvdyB0aGUgZXJyb3IgYWdhaW4gdG8g
Z2V0IG91dCBvZiB0aGUgcHJvbWlzZQorICAgICAgICAvLyBjaGFpbi4KKyAgICAgICAgcmVzID0+
IHNldFRpbWVvdXQoXyA9PiBmYWlsKCc8dGhyb3c+JywgcmVzLCBtc2cpLCAwKSwKKyAgICAgICAg
ZSA9PiBjaGVja0V4Y2VwdGlvbihlLCB0eXBlX29wdCwgY2F1c2Vfb3B0KSk7CisgIH07CisKKyAg
YXNzZXJ0SW5zdGFuY2VvZiA9IGZ1bmN0aW9uIGFzc2VydEluc3RhbmNlb2Yob2JqLCB0eXBlKSB7
CisgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgdHlwZSkpIHsKKyAgICAgIHZhciBhY3R1YWxUeXBl
TmFtZSA9IG51bGw7CisgICAgICB2YXIgYWN0dWFsQ29uc3RydWN0b3IgPSBvYmogJiYgT2JqZWN0
LmdldFByb3RvdHlwZU9mKG9iaikuY29uc3RydWN0b3I7CisgICAgICBpZiAodHlwZW9mIGFjdHVh
bENvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgIGFjdHVhbFR5cGVOYW1lID0g
YWN0dWFsQ29uc3RydWN0b3IubmFtZSB8fCBTdHJpbmcoYWN0dWFsQ29uc3RydWN0b3IpOworICAg
ICAgfQorICAgICAgZmFpbFdpdGhNZXNzYWdlKAorICAgICAgICAgICdPYmplY3QgPCcgKyBwcmV0
dHlQcmludGVkKG9iaikgKyAnPiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgPCcgKworICAgICAgICAg
ICh0eXBlLm5hbWUgfHwgdHlwZSkgKyAnPicgKworICAgICAgICAgIChhY3R1YWxUeXBlTmFtZSA/
ICcgYnV0IG9mIDwnICsgYWN0dWFsVHlwZU5hbWUgKyAnPicgOiAnJykpOworICAgIH0KKyAgfTsK
KworICBhc3NlcnREb2VzTm90VGhyb3cgPSBmdW5jdGlvbiBhc3NlcnREb2VzTm90VGhyb3coY29k
ZSwgbmFtZV9vcHQpIHsKKyAgICB0cnkgeworICAgICAgZXhlY3V0ZUNvZGUoY29kZSk7CisgICAg
fSBjYXRjaCAoZSkgeworICAgICAgaWYgKGUgaW5zdGFuY2VvZiBNanNVbml0QXNzZXJ0aW9uRXJy
b3IpIHRocm93IGU7CisgICAgICBmYWlsV2l0aE1lc3NhZ2UoInRocmV3IGFuIGV4Y2VwdGlvbjog
IiArIChlLm1lc3NhZ2UgfHwgZSkpOworICAgIH0KKyAgfTsKKworICBhc3NlcnRVbnJlYWNoYWJs
ZSA9IGZ1bmN0aW9uIGFzc2VydFVucmVhY2hhYmxlKG5hbWVfb3B0KSB7CisgICAgLy8gRml4IHRo
aXMgd2hlbiB3ZSBkaXRjaCB0aGUgb2xkIHRlc3QgcnVubmVyLgorICAgIHZhciBtZXNzYWdlID0g
IkZhaWwiICsgInVyZTogdW5yZWFjaGFibGUiOworICAgIGlmIChuYW1lX29wdCkgeworICAgICAg
bWVzc2FnZSArPSAiIC0gIiArIG5hbWVfb3B0OworICAgIH0KKyAgICBmYWlsV2l0aE1lc3NhZ2Uo
bWVzc2FnZSk7CisgIH07CisKKyAgYXNzZXJ0Q29udGFpbnMgPSBmdW5jdGlvbihzdWIsIHZhbHVl
LCBuYW1lX29wdCkgeworICAgIGlmICh2YWx1ZSA9PSBudWxsID8gKHN1YiAhPSBudWxsKSA6IHZh
bHVlLmluZGV4T2Yoc3ViKSA9PSAtMSkgeworICAgICAgZmFpbCgiY29udGFpbnMgJyIgKyBTdHJp
bmcoc3ViKSArICInIiwgdmFsdWUsIG5hbWVfb3B0KTsKKyAgICB9CisgIH07CisKKyAgYXNzZXJ0
TWF0Y2hlcyA9IGZ1bmN0aW9uKHJlZ2V4cCwgc3RyLCBuYW1lX29wdCkgeworICAgIGlmICghKHJl
Z2V4cCBpbnN0YW5jZW9mIFJlZ0V4cCkpIHsKKyAgICAgIHJlZ2V4cCA9IG5ldyBSZWdFeHAocmVn
ZXhwKTsKKyAgICB9CisgICAgaWYgKCFzdHIubWF0Y2gocmVnZXhwKSkgeworICAgICAgZmFpbCgi
c2hvdWxkIG1hdGNoICciICsgcmVnZXhwICsgIiciLCBzdHIsIG5hbWVfb3B0KTsKKyAgICB9Cisg
IH07CisKKyAgZnVuY3Rpb24gY29uY2F0ZW5hdGVFcnJvcnMoc3RhY2ssIGV4Y2VwdGlvbikgewor
ICAgIC8vIElmIHRoZSBleGNlcHRpb24gZG9lcyBub3QgY29udGFpbiBhIHN0YWNrIHRyYWNlLCB3
cmFwIGl0IGluIGEgbmV3IEVycm9yLgorICAgIGlmICghZXhjZXB0aW9uLnN0YWNrKSBleGNlcHRp
b24gPSBuZXcgRXJyb3IoZXhjZXB0aW9uKTsKKworICAgIC8vIElmIHRoZSBleGNlcHRpb24gYWxy
ZWFkeSBwcm92aWRlcyBhIHNwZWNpYWwgc3RhY2sgdHJhY2UsIHdlIGRvIG5vdCBtb2RpZnkKKyAg
ICAvLyBpdC4KKyAgICBpZiAodHlwZW9mIGV4Y2VwdGlvbi5zdGFjayAhPT0gJ3N0cmluZycpIHsK
KyAgICAgIHJldHVybiBleGNlcHRpb247CisgICAgfQorICAgIGV4Y2VwdGlvbi5zdGFjayA9IHN0
YWNrICsgJ1xuXG4nICsgZXhjZXB0aW9uLnN0YWNrOworICAgIHJldHVybiBleGNlcHRpb247Cisg
IH0KKworICBhc3NlcnRQcm9taXNlUmVzdWx0ID0gZnVuY3Rpb24ocHJvbWlzZSwgc3VjY2Vzcywg
ZmFpbCkgeworICAgIGlmIChzdWNjZXNzICE9PSB1bmRlZmluZWQpIGFzc2VydEVxdWFscygnZnVu
Y3Rpb24nLCB0eXBlb2Ygc3VjY2Vzcyk7CisgICAgaWYgKGZhaWwgIT09IHVuZGVmaW5lZCkgYXNz
ZXJ0RXF1YWxzKCdmdW5jdGlvbicsIHR5cGVvZiBmYWlsKTsKKyAgICBhc3NlcnRJbnN0YW5jZW9m
KHByb21pc2UsIFByb21pc2UpOworICAgIGNvbnN0IHN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFj
azsKKworICAgIHZhciB0ZXN0X3Byb21pc2UgPSBwcm9taXNlLnRoZW4oCisgICAgICAgIHJlc3Vs
dCA9PiB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmICgtLXByb21pc2VUZXN0Q291
bnQgPT0gMCkgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICBpZiAoc3VjY2Vz
cyAhPT0gdW5kZWZpbmVkKSBzdWNjZXNzKHJlc3VsdCk7CisgICAgICAgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gdGhyb3cgdGhlIGVycm9yIGFnYWlu
IHRvIGdldCBvdXQgb2YgdGhlIHByb21pc2UKKyAgICAgICAgICAgIC8vIGNoYWluLgorICAgICAg
ICAgICAgc2V0VGltZW91dChfID0+IHsKKyAgICAgICAgICAgICAgdGhyb3cgY29uY2F0ZW5hdGVF
cnJvcnMoc3RhY2ssIGUpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgfQorICAgICAg
ICB9LAorICAgICAgICByZXN1bHQgPT4geworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBp
ZiAoLS1wcm9taXNlVGVzdENvdW50ID09IDApIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAg
ICAgICAgICAgaWYgKGZhaWwgPT09IHVuZGVmaW5lZCkgdGhyb3cgcmVzdWx0OworICAgICAgICAg
ICAgZmFpbChyZXN1bHQpOworICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIC8v
IFVzZSBzZXRUaW1lb3V0IHRvIHRocm93IHRoZSBlcnJvciBhZ2FpbiB0byBnZXQgb3V0IG9mIHRo
ZSBwcm9taXNlCisgICAgICAgICAgICAvLyBjaGFpbi4KKyAgICAgICAgICAgIHNldFRpbWVvdXQo
XyA9PiB7CisgICAgICAgICAgICAgIHRocm93IGNvbmNhdGVuYXRlRXJyb3JzKHN0YWNrLCBlKTsK
KyAgICAgICAgICAgIH0sIDApOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICBpZiAo
IXByb21pc2VUZXN0Q2hhaW4pIHByb21pc2VUZXN0Q2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTsK
KyAgICAvLyB3YWl0VW50aWxEb25lIGlzIGlkZW1wb3RlbnQuCisgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7CisgICAgKytwcm9taXNlVGVzdENvdW50OworICAgIHJldHVybiBwcm9taXNl
VGVzdENoYWluLnRoZW4odGVzdF9wcm9taXNlKTsKKyAgfTsKKworICB2YXIgT3B0aW1pemF0aW9u
U3RhdHVzSW1wbCA9IHVuZGVmaW5lZDsKKworICB2YXIgT3B0aW1pemF0aW9uU3RhdHVzID0gZnVu
Y3Rpb24oZnVuKSB7CisgICAgaWYgKE9wdGltaXphdGlvblN0YXR1c0ltcGwgPT09IHVuZGVmaW5l
ZCkgeworICAgICAgdHJ5IHsKKyAgICAgICAgT3B0aW1pemF0aW9uU3RhdHVzSW1wbCA9IG5ldyBG
dW5jdGlvbigKKyAgICAgICAgICAgICJmdW4iLCAicmV0dXJuICVHZXRPcHRpbWl6YXRpb25TdGF0
dXMoZnVuKTsiKTsKKyAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJuYXRpdmVzIHN5bnRheCBub3QgYWxsb3dlZCIpOworICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gT3B0aW1pemF0aW9uU3RhdHVzSW1wbChmdW4pOworICB9CisKKyAgYXNzZXJ0VW5vcHRpbWl6
ZWQgPSBmdW5jdGlvbiBhc3NlcnRVbm9wdGltaXplZCgKKyAgICAgIGZ1biwgbmFtZV9vcHQsIHNr
aXBfaWZfbWF5YmVfZGVvcHRlZCA9IHRydWUpIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGlt
aXphdGlvblN0YXR1cyhmdW4pOworICAgIC8vIFRlc3RzIHRoYXQgdXNlIGFzc2VydFVub3B0aW1p
emVkKCkgZG8gbm90IG1ha2Ugc2Vuc2UgaWYgLS1hbHdheXMtb3B0CisgICAgLy8gb3B0aW9uIGlz
IHByb3ZpZGVkLiBTdWNoIHRlc3RzIG11c3QgYWRkIC0tbm8tYWx3YXlzLW9wdCB0byBmbGFncyBj
b21tZW50LgorICAgIGFzc2VydEZhbHNlKChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0
dXMua0Fsd2F5c09wdGltaXplKSAhPT0gMCwKKyAgICAgICAgICAgICAgICAidGVzdCBkb2VzIG5v
dCBtYWtlIHNlbnNlIHdpdGggLS1hbHdheXMtb3B0Iik7CisgICAgYXNzZXJ0VHJ1ZSgob3B0X3N0
YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtJc0Z1bmN0aW9uKSAhPT0gMCwgbmFtZV9vcHQp
OworICAgIGlmIChza2lwX2lmX21heWJlX2Rlb3B0ZWQgJiYKKyAgICAgICAgKG9wdF9zdGF0dXMg
JiBWOE9wdGltaXphdGlvblN0YXR1cy5rTWF5YmVEZW9wdGVkKSAhPT0gMCkgeworICAgICAgLy8g
V2hlbiAtLWRlb3B0LWV2ZXJ5LW4tdGltZXMgZmxhZyBpcyBzcGVjaWZpZWQgaXQncyBubyBsb25n
ZXIgZ3VhcmFudGVlZAorICAgICAgLy8gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIHN0aWxs
IGRlb3B0aW1pemVkLCBzbyBrZWVwIHJ1bm5pbmcgdGhlIHRlc3QKKyAgICAgIC8vIHRvIHN0cmVz
cyB0ZXN0IHRoZSBkZW9wdGltaXplci4KKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIGlz
X29wdGltaXplZCA9IChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua09wdGltaXpl
ZCkgIT09IDA7CisgICAgYXNzZXJ0RmFsc2UoaXNfb3B0aW1pemVkLCBuYW1lX29wdCk7CisgIH0K
KworICBhc3NlcnRPcHRpbWl6ZWQgPSBmdW5jdGlvbiBhc3NlcnRPcHRpbWl6ZWQoCisgICAgICBm
dW4sIG5hbWVfb3B0LCBza2lwX2lmX21heWJlX2Rlb3B0ZWQgPSB0cnVlKSB7CisgICAgdmFyIG9w
dF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXMoZnVuKTsKKyAgICAvLyBUZXN0cyB0aGF0IHVz
ZSBhc3NlcnRPcHRpbWl6ZWQoKSBkbyBub3QgbWFrZSBzZW5zZSBmb3IgTGl0ZSBtb2RlIHdoZXJl
CisgICAgLy8gb3B0aW1pemF0aW9uIGlzIGFsd2F5cyBkaXNhYmxlZCwgZXhwbGljaXRseSBleGl0
IHRoZSB0ZXN0IHdpdGggYSB3YXJuaW5nLgorICAgIGlmIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6
YXRpb25TdGF0dXMua0xpdGVNb2RlKSB7CisgICAgICBwcmludCgiV2FybmluZzogVGVzdCB1c2Vz
IGFzc2VydE9wdGltaXplZCBpbiBMaXRlIG1vZGUsIHNraXBwaW5nIHRlc3QuIik7CisgICAgICB0
ZXN0UnVubmVyLnF1aXQoMCk7CisgICAgfQorICAgIC8vIFRlc3RzIHRoYXQgdXNlIGFzc2VydE9w
dGltaXplZCgpIGRvIG5vdCBtYWtlIHNlbnNlIGlmIC0tbm8tb3B0CisgICAgLy8gb3B0aW9uIGlz
IHByb3ZpZGVkLiBTdWNoIHRlc3RzIG11c3QgYWRkIC0tb3B0IHRvIGZsYWdzIGNvbW1lbnQuCisg
ICAgYXNzZXJ0RmFsc2UoKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rTmV2ZXJP
cHRpbWl6ZSkgIT09IDAsCisgICAgICAgICAgICAgICAgInRlc3QgZG9lcyBub3QgbWFrZSBzZW5z
ZSB3aXRoIC0tbm8tb3B0Iik7CisgICAgYXNzZXJ0VHJ1ZSgKKyAgICAgICAgKG9wdF9zdGF0dXMg
JiBWOE9wdGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAgICAgICdzaG91
bGQgYmUgYSBmdW5jdGlvbjogJyArIG5hbWVfb3B0KTsKKyAgICBpZiAoc2tpcF9pZl9tYXliZV9k
ZW9wdGVkICYmCisgICAgICAgIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua01h
eWJlRGVvcHRlZCkgIT09IDApIHsKKyAgICAgIC8vIFdoZW4gLS1kZW9wdC1ldmVyeS1uLXRpbWVz
IGZsYWcgaXMgc3BlY2lmaWVkIGl0J3Mgbm8gbG9uZ2VyIGd1YXJhbnRlZWQKKyAgICAgIC8vIHRo
YXQgcGFydGljdWxhciBmdW5jdGlvbiBpcyBzdGlsbCBvcHRpbWl6ZWQsIHNvIGtlZXAgcnVubmlu
ZyB0aGUgdGVzdAorICAgICAgLy8gdG8gc3RyZXNzIHRlc3QgdGhlIGRlb3B0aW1pemVyLgorICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBhc3NlcnRUcnVlKAorICAgICAgICAob3B0X3N0YXR1cyAm
IFY4T3B0aW1pemF0aW9uU3RhdHVzLmtPcHRpbWl6ZWQpICE9PSAwLAorICAgICAgICAnc2hvdWxk
IGJlIG9wdGltaXplZDogJyArIG5hbWVfb3B0KTsKKyAgfQorCisgIGlzTmV2ZXJPcHRpbWl6ZUxp
dGVNb2RlID0gZnVuY3Rpb24gaXNOZXZlck9wdGltaXplTGl0ZU1vZGUoKSB7CisgICAgdmFyIG9w
dF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXModW5kZWZpbmVkLCAiIik7CisgICAgcmV0dXJu
IChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0xpdGVNb2RlKSAhPT0gMDsKKyAg
fQorCisgIGlzTmV2ZXJPcHRpbWl6ZSA9IGZ1bmN0aW9uIGlzTmV2ZXJPcHRpbWl6ZSgpIHsKKyAg
ICB2YXIgb3B0X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1cyh1bmRlZmluZWQsICIiKTsKKyAg
ICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rTmV2ZXJPcHRpbWl6
ZSkgIT09IDA7CisgIH0KKworICBpc0Fsd2F5c09wdGltaXplID0gZnVuY3Rpb24gaXNBbHdheXNP
cHRpbWl6ZSgpIHsKKyAgICB2YXIgb3B0X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1cyh1bmRl
ZmluZWQsICIiKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1
cy5rQWx3YXlzT3B0aW1pemUpICE9PSAwOworICB9CisKKyAgaXNJbnRlcnByZXRlZCA9IGZ1bmN0
aW9uIGlzSW50ZXJwcmV0ZWQoZnVuKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRp
b25TdGF0dXMoZnVuLCAiIik7CisgICAgYXNzZXJ0VHJ1ZSgob3B0X3N0YXR1cyAmIFY4T3B0aW1p
emF0aW9uU3RhdHVzLmtJc0Z1bmN0aW9uKSAhPT0gMCwKKyAgICAgICAgICAgICAgICJub3QgYSBm
dW5jdGlvbiIpOworICAgIHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVz
LmtPcHRpbWl6ZWQpID09PSAwICYmCisgICAgICAgICAgIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6
YXRpb25TdGF0dXMua0ludGVycHJldGVkKSAhPT0gMDsKKyAgfQorCisgIGlzQmFzZWxpbmUgPSBm
dW5jdGlvbiBpc0Jhc2VsaW5lKGZ1bikgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0
aW9uU3RhdHVzKGZ1biwgIiIpOworICAgIGFzc2VydFRydWUoKG9wdF9zdGF0dXMgJiBWOE9wdGlt
aXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAgICAgICAgICAgICAibm90IGEg
ZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1
cy5rT3B0aW1pemVkKSA9PT0gMCAmJgorICAgICAgICAgICAob3B0X3N0YXR1cyAmIFY4T3B0aW1p
emF0aW9uU3RhdHVzLmtCYXNlbGluZSkgIT09IDA7CisgIH0KKworICBpc1Vub3B0aW1pemVkID0g
ZnVuY3Rpb24gaXNVbm9wdGltaXplZChmdW4pIHsKKyAgICByZXR1cm4gaXNJbnRlcnByZXRlZChm
dW4pIHx8IGlzQmFzZWxpbmUoZnVuKTsKKyAgfQorCisgIGlzT3B0aW1pemVkID0gZnVuY3Rpb24g
aXNPcHRpbWl6ZWQoZnVuKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0
dXMoZnVuLCAiIik7CisgICAgYXNzZXJ0VHJ1ZSgob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9u
U3RhdHVzLmtJc0Z1bmN0aW9uKSAhPT0gMCwKKyAgICAgICAgICAgICAgICJub3QgYSBmdW5jdGlv
biIpOworICAgIHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtPcHRp
bWl6ZWQpICE9PSAwOworICB9CisKKyAgaXNUdXJib0Zhbm5lZCA9IGZ1bmN0aW9uIGlzVHVyYm9G
YW5uZWQoZnVuKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXMoZnVu
LCAiIik7CisgICAgYXNzZXJ0VHJ1ZSgob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVz
LmtJc0Z1bmN0aW9uKSAhPT0gMCwKKyAgICAgICAgICAgICAgICJub3QgYSBmdW5jdGlvbiIpOwor
ICAgIHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtPcHRpbWl6ZWQp
ICE9PSAwICYmCisgICAgICAgICAgIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMu
a1R1cmJvRmFubmVkKSAhPT0gMDsKKyAgfQorCisgIC8vIEN1c3RvbSBWOC1zcGVjaWZpYyBzdGFj
ayB0cmFjZSBmb3JtYXR0ZXIgdGhhdCBpcyB0ZW1wb3JhcmlseSBpbnN0YWxsZWQgb24KKyAgLy8g
dGhlIEVycm9yIG9iamVjdC4KKyAgTWpzVW5pdEFzc2VydGlvbkVycm9yLnByZXBhcmVTdGFja1Ry
YWNlID0gZnVuY3Rpb24oZXJyb3IsIHN0YWNrKSB7CisgICAgLy8gVHJpZ2dlciBkZWZhdWx0IGZv
cm1hdHRpbmcgd2l0aCByZWN1cnNpb24uCisgICAgdHJ5IHsKKyAgICAgIC8vIEZpbHRlci1vdXQg
YWxsIGJ1dCB0aGUgZmlyc3QgbWpzdW5pdCBmcmFtZS4KKyAgICAgIGxldCBmaWx0ZXJlZFN0YWNr
ID0gW107CisgICAgICBsZXQgaW5NanN1bml0ID0gdHJ1ZTsKKyAgICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbGV0IGZyYW1lID0gc3RhY2tbaV07
CisgICAgICAgIGlmIChpbk1qc3VuaXQpIHsKKyAgICAgICAgICBsZXQgZmlsZSA9IGZyYW1lLmdl
dEZpbGVOYW1lKCk7CisgICAgICAgICAgaWYgKCFmaWxlIHx8ICFmaWxlLmVuZHNXaXRoKCJtanN1
bml0LmpzIikpIHsKKyAgICAgICAgICAgIGluTWpzdW5pdCA9IGZhbHNlOworICAgICAgICAgICAg
Ly8gUHVzaCB0aGUgbGFzdCBtanN1bml0IGZyYW1lLCB0eXBpY2FsbHkgY29udGFpbmluZyB0aGUg
YXNzZXJ0aW9uCisgICAgICAgICAgICAvLyBmdW5jdGlvbi4KKyAgICAgICAgICAgIGlmIChpID4g
MCkgQXJyYXlQcm90b3R5cGVQdXNoLmNhbGwoZmlsdGVyZWRTdGFjaywgc3RhY2tbaS0xXSk7Cisg
ICAgICAgICAgICBBcnJheVByb3RvdHlwZVB1c2guY2FsbChmaWx0ZXJlZFN0YWNrLCBzdGFja1tp
XSk7CisgICAgICAgICAgfQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IEFycmF5UHJvdG90eXBlUHVzaC5jYWxsKGZpbHRlcmVkU3RhY2ssIGZyYW1lKTsKKyAgICAgIH0K
KyAgICAgIHN0YWNrID0gZmlsdGVyZWRTdGFjazsKKworICAgICAgLy8gSW5mZXIgZnVuY3Rpb24g
bmFtZXMgYW5kIGNhbGN1bGF0ZSB7bWF4X25hbWVfbGVuZ3RofQorICAgICAgbGV0IG1heF9uYW1l
X2xlbmd0aCA9IDA7CisgICAgICBBcnJheVByb3RvdHlwZUZvckVhY2guY2FsbChzdGFjaywgZWFj
aCA9PiB7CisgICAgICAgIGxldCBuYW1lID0gZWFjaC5nZXRGdW5jdGlvbk5hbWUoKTsKKyAgICAg
ICAgaWYgKG5hbWUgPT0gbnVsbCkgbmFtZSA9ICIiOworICAgICAgICBpZiAoZWFjaC5pc0V2YWwo
KSkgeworICAgICAgICAgIG5hbWUgPSBuYW1lOworICAgICAgICB9IGVsc2UgaWYgKGVhY2guaXND
b25zdHJ1Y3RvcigpKSB7CisgICAgICAgICAgbmFtZSA9ICJuZXcgIiArIG5hbWU7CisgICAgICAg
IH0gZWxzZSBpZiAoZWFjaC5pc05hdGl2ZSgpKSB7CisgICAgICAgICAgbmFtZSA9ICJuYXRpdmUg
IiArIG5hbWU7CisgICAgICAgIH0gZWxzZSBpZiAoIWVhY2guaXNUb3BsZXZlbCgpKSB7CisgICAg
ICAgICAgbmFtZSA9IGVhY2guZ2V0VHlwZU5hbWUoKSArICIuIiArIG5hbWU7CisgICAgICAgIH0K
KyAgICAgICAgZWFjaC5uYW1lID0gbmFtZTsKKyAgICAgICAgbWF4X25hbWVfbGVuZ3RoID0gTWF0
aC5tYXgobmFtZS5sZW5ndGgsIG1heF9uYW1lX2xlbmd0aCkKKyAgICAgIH0pOworCisgICAgICAv
LyBGb3JtYXQgc3RhY2sgZnJhbWVzLgorICAgICAgc3RhY2sgPSBBcnJheVByb3RvdHlwZU1hcC5j
YWxsKHN0YWNrLCBlYWNoID0+IHsKKyAgICAgICAgbGV0IGZyYW1lID0gIiAgICBhdCAiICsgZWFj
aC5uYW1lLnBhZEVuZChtYXhfbmFtZV9sZW5ndGgpOworICAgICAgICBsZXQgZmlsZU5hbWUgPSBl
YWNoLmdldEZpbGVOYW1lKCk7CisgICAgICAgIGlmIChlYWNoLmlzRXZhbCgpKSByZXR1cm4gZnJh
bWUgKyAiICIgKyBlYWNoLmdldEV2YWxPcmlnaW4oKTsKKyAgICAgICAgZnJhbWUgKz0gIiAiICsg
KGZpbGVOYW1lID8gZmlsZU5hbWUgOiAiIik7CisgICAgICAgIGxldCBsaW5lPSBlYWNoLmdldExp
bmVOdW1iZXIoKTsKKyAgICAgICAgZnJhbWUgKz0gIiAiICsgKGxpbmUgPyBsaW5lIDogIiIpOwor
ICAgICAgICBsZXQgY29sdW1uID0gZWFjaC5nZXRDb2x1bW5OdW1iZXIoKTsKKyAgICAgICAgZnJh
bWUgKz0gKGNvbHVtbiA/ICI6IiArIGNvbHVtbiA6ICIiKTsKKyAgICAgICAgcmV0dXJuIGZyYW1l
OworICAgICAgfSk7CisgICAgICByZXR1cm4gIiIgKyBlcnJvci5tZXNzYWdlICsgIlxuIiArIEFy
cmF5UHJvdG90eXBlSm9pbi5jYWxsKHN0YWNrLCAiXG4iKTsKKyAgICB9IGNhdGNoIChlKSB7fTsK
KyAgICByZXR1cm4gZXJyb3Iuc3RhY2s7CisgIH0KK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3dhc20vdjgvd2FzbS1tb2R1bGUtYnVpbGRlci5qcyBiL0pTVGVzdHMvd2FzbS92OC93YXNtLW1v
ZHVsZS1idWlsZGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2N2VkODRkMGU1OWYyODUyYWNhNGE1MjIzZmQ1
OWU5ZmVkZjdiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvd2FzbS1tb2R1
bGUtYnVpbGRlci5qcwpAQCAtMCwwICsxLDIxNjkgQEAKKy8vIENvcHlyaWdodCAyMDE2IHRoZSBW
OCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBVc2VkIGZvciBlbmNvZGluZyBm
MzIgYW5kIGRvdWJsZSBjb25zdGFudHMgdG8gYml0cy4KK2xldCBieXRlX3ZpZXcgPSBuZXcgVWlu
dDhBcnJheSg4KTsKK2xldCBkYXRhX3ZpZXcgPSBuZXcgRGF0YVZpZXcoYnl0ZV92aWV3LmJ1ZmZl
cik7CisKKy8vIFRoZSBieXRlcyBmdW5jdGlvbiByZWNlaXZlcyBvbmUgb2YKKy8vICAtIHNldmVy
YWwgYXJndW1lbnRzLCBlYWNoIG9mIHdoaWNoIGlzIGVpdGhlciBhIG51bWJlciBvciBhIHN0cmlu
ZyBvZiBsZW5ndGgKKy8vICAgIDE7IGlmIGl0J3MgYSBzdHJpbmcsIHRoZSBjaGFyY29kZSBvZiB0
aGUgY29udGFpbmVkIGNoYXJhY3RlciBpcyB1c2VkLgorLy8gIC0gYSBzaW5nbGUgYXJyYXkgYXJn
dW1lbnQgY29udGFpbmluZyB0aGUgYWN0dWFsIGFyZ3VtZW50cworLy8gIC0gYSBzaW5nbGUgc3Ry
aW5nOyB0aGUgcmV0dXJuZWQgYnVmZmVyIHdpbGwgY29udGFpbiB0aGUgY2hhciBjb2RlcyBvZiBh
bGwKKy8vICAgIGNvbnRhaW5lZCBjaGFyYWN0ZXJzLgorZnVuY3Rpb24gYnl0ZXMoLi4uaW5wdXQp
IHsKKyAgaWYgKGlucHV0Lmxlbmd0aCA9PSAxICYmIHR5cGVvZiBpbnB1dFswXSA9PSAnYXJyYXkn
KSBpbnB1dCA9IGlucHV0WzBdOworICBpZiAoaW5wdXQubGVuZ3RoID09IDEgJiYgdHlwZW9mIGlu
cHV0WzBdID09ICdzdHJpbmcnKSB7CisgICAgbGV0IGxlbiA9IGlucHV0WzBdLmxlbmd0aDsKKyAg
ICBsZXQgdmlldyA9IG5ldyBVaW50OEFycmF5KGxlbik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCBsZW47IGkrKykgdmlld1tpXSA9IGlucHV0WzBdLmNoYXJDb2RlQXQoaSk7CisgICAgcmV0dXJu
IHZpZXcuYnVmZmVyOworICB9CisgIGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXQubGVu
Z3RoKTsKKyAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykgeworICAgIGxl
dCB2YWwgPSBpbnB1dFtpXTsKKyAgICBpZiAodHlwZW9mIHZhbCA9PSAnc3RyaW5nJykgeworICAg
ICAgaWYgKHZhbC5sZW5ndGggIT0gMSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmlu
ZyBpbnB1dHMgbXVzdCBoYXZlIGxlbmd0aCAxJyk7CisgICAgICB9CisgICAgICB2YWwgPSB2YWwu
Y2hhckNvZGVBdCgwKTsKKyAgICB9CisgICAgdmlld1tpXSA9IHZhbCB8IDA7CisgIH0KKyAgcmV0
dXJuIHZpZXcuYnVmZmVyOworfQorCisvLyBIZWFkZXIgZGVjbGFyYXRpb24gY29uc3RhbnRzCit2
YXIga1dhc21IMCA9IDA7Cit2YXIga1dhc21IMSA9IDB4NjE7Cit2YXIga1dhc21IMiA9IDB4NzM7
Cit2YXIga1dhc21IMyA9IDB4NmQ7CisKK3ZhciBrV2FzbVYwID0gMHgxOwordmFyIGtXYXNtVjEg
PSAwOwordmFyIGtXYXNtVjIgPSAwOwordmFyIGtXYXNtVjMgPSAwOworCit2YXIga0hlYWRlclNp
emUgPSA4OwordmFyIGtQYWdlU2l6ZSA9IDY1NTM2OwordmFyIGtTcGVjTWF4UGFnZXMgPSA2NTUz
NjsKK3ZhciBrTWF4VmFySW50MzJTaXplID0gNTsKK3ZhciBrTWF4VmFySW50NjRTaXplID0gMTA7
CisKK2xldCBrRGVjbE5vTG9jYWxzID0gMDsKKworLy8gU2VjdGlvbiBkZWNsYXJhdGlvbiBjb25z
dGFudHMKK2xldCBrVW5rbm93blNlY3Rpb25Db2RlID0gMDsKK2xldCBrVHlwZVNlY3Rpb25Db2Rl
ID0gMTsgICAgICAgIC8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBkZWNsYXJhdGlvbnMKK2xldCBrSW1w
b3J0U2VjdGlvbkNvZGUgPSAyOyAgICAgIC8vIEltcG9ydCBkZWNsYXJhdGlvbnMKK2xldCBrRnVu
Y3Rpb25TZWN0aW9uQ29kZSA9IDM7ICAgIC8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucworbGV0IGtU
YWJsZVNlY3Rpb25Db2RlID0gNDsgICAgICAgLy8gSW5kaXJlY3QgZnVuY3Rpb24gdGFibGUgYW5k
IG90aGVyIHRhYmxlcworbGV0IGtNZW1vcnlTZWN0aW9uQ29kZSA9IDU7ICAgICAgLy8gTWVtb3J5
IGF0dHJpYnV0ZXMKK2xldCBrR2xvYmFsU2VjdGlvbkNvZGUgPSA2OyAgICAgIC8vIEdsb2JhbCBk
ZWNsYXJhdGlvbnMKK2xldCBrRXhwb3J0U2VjdGlvbkNvZGUgPSA3OyAgICAgIC8vIEV4cG9ydHMK
K2xldCBrU3RhcnRTZWN0aW9uQ29kZSA9IDg7ICAgICAgIC8vIFN0YXJ0IGZ1bmN0aW9uIGRlY2xh
cmF0aW9uCitsZXQga0VsZW1lbnRTZWN0aW9uQ29kZSA9IDk7ICAgICAvLyBFbGVtZW50cyBzZWN0
aW9uCitsZXQga0NvZGVTZWN0aW9uQ29kZSA9IDEwOyAgICAgICAvLyBGdW5jdGlvbiBjb2RlCits
ZXQga0RhdGFTZWN0aW9uQ29kZSA9IDExOyAgICAgICAvLyBEYXRhIHNlZ21lbnRzCitsZXQga0Rh
dGFDb3VudFNlY3Rpb25Db2RlID0gMTI7ICAvLyBEYXRhIHNlZ21lbnQgY291bnQgKGJldHdlZW4g
RWxlbWVudCAmIENvZGUpCitsZXQga1RhZ1NlY3Rpb25Db2RlID0gMTM7ICAgICAgICAvLyBUYWcg
c2VjdGlvbiAoYmV0d2VlbiBNZW1vcnkgJiBHbG9iYWwpCisKKy8vIE5hbWUgc2VjdGlvbiB0eXBl
cworbGV0IGtNb2R1bGVOYW1lQ29kZSA9IDA7CitsZXQga0Z1bmN0aW9uTmFtZXNDb2RlID0gMTsK
K2xldCBrTG9jYWxOYW1lc0NvZGUgPSAyOworCitsZXQga1dhc21GdW5jdGlvblR5cGVGb3JtID0g
MHg2MDsKK2xldCBrV2FzbVN0cnVjdFR5cGVGb3JtID0gMHg1ZjsKK2xldCBrV2FzbUFycmF5VHlw
ZUZvcm0gPSAweDVlOworbGV0IGtXYXNtRnVuY3Rpb25TdWJ0eXBlRm9ybSA9IDB4NWQ7CitsZXQg
a1dhc21TdHJ1Y3RTdWJ0eXBlRm9ybSA9IDB4NWM7CitsZXQga1dhc21BcnJheVN1YnR5cGVGb3Jt
ID0gMHg1YjsKKworbGV0IGtMaW1pdHNOb01heGltdW0gPSAweDAwOworbGV0IGtMaW1pdHNXaXRo
TWF4aW11bSA9IDB4MDE7CitsZXQga0xpbWl0c1NoYXJlZE5vTWF4aW11bSA9IDB4MDI7CitsZXQg
a0xpbWl0c1NoYXJlZFdpdGhNYXhpbXVtID0gMHgwMzsKK2xldCBrTGltaXRzTWVtb3J5NjROb01h
eGltdW0gPSAweDA0OworbGV0IGtMaW1pdHNNZW1vcnk2NFdpdGhNYXhpbXVtID0gMHgwNTsKKwor
Ly8gU2VnbWVudCBmbGFncworbGV0IGtBY3RpdmVOb0luZGV4ID0gMDsKK2xldCBrUGFzc2l2ZSA9
IDE7CitsZXQga0FjdGl2ZVdpdGhJbmRleCA9IDI7CitsZXQga0RlY2xhcmF0aXZlID0gMzsKK2xl
dCBrUGFzc2l2ZVdpdGhFbGVtZW50cyA9IDU7CitsZXQga0RlY2xhcmF0aXZlV2l0aEVsZW1lbnRz
ID0gNzsKKworLy8gRnVuY3Rpb24gZGVjbGFyYXRpb24gZmxhZ3MKK2xldCBrRGVjbEZ1bmN0aW9u
TmFtZSA9IDB4MDE7CitsZXQga0RlY2xGdW5jdGlvbkltcG9ydCA9IDB4MDI7CitsZXQga0RlY2xG
dW5jdGlvbkxvY2FscyA9IDB4MDQ7CitsZXQga0RlY2xGdW5jdGlvbkV4cG9ydCA9IDB4MDg7CisK
Ky8vIFZhbHVlIHR5cGVzIGFuZCByZWxhdGVkCitsZXQga1dhc21Wb2lkID0gMHg0MDsKK2xldCBr
V2FzbUkzMiA9IDB4N2Y7CitsZXQga1dhc21JNjQgPSAweDdlOworbGV0IGtXYXNtRjMyID0gMHg3
ZDsKK2xldCBrV2FzbUY2NCA9IDB4N2M7CitsZXQga1dhc21TMTI4ID0gMHg3YjsKK2xldCBrV2Fz
bUk4ID0gMHg3YTsKK2xldCBrV2FzbUkxNiA9IDB4Nzk7CisKKy8vIFRoZXNlIGFyZSBkZWZpbmVk
IGFzIG5lZ2F0aXZlIGludGVnZXJzIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBwb3NpdGl2ZSB0
eXBlCisvLyBpbmRpY2VzLgorbGV0IGtXYXNtRnVuY1JlZiA9IC0weDEwOworbGV0IGtXYXNtQW55
RnVuYyA9IGtXYXNtRnVuY1JlZjsgIC8vIEFsaWFzIG5hbWVkIGFzIGluIHRoZSBKUyBBUEkgc3Bl
YworbGV0IGtXYXNtRXh0ZXJuUmVmID0gLTB4MTE7CitsZXQga1dhc21BbnlSZWYgPSAtMHgxMjsK
K2xldCBrV2FzbUVxUmVmID0gLTB4MTM7CitsZXQga1dhc21JMzFSZWYgPSAtMHgxNjsKK2xldCBr
V2FzbURhdGFSZWYgPSAtMHgxOTsKKworLy8gVXNlIHRoZSBwb3NpdGl2ZS1ieXRlIHZlcnNpb25z
IGluc2lkZSBmdW5jdGlvbiBib2RpZXMuCitsZXQga0xlYjEyOE1hc2sgPSAweDdmOworbGV0IGtG
dW5jUmVmQ29kZSA9IGtXYXNtRnVuY1JlZiAmIGtMZWIxMjhNYXNrOworbGV0IGtBbnlGdW5jQ29k
ZSA9IGtGdW5jUmVmQ29kZTsgIC8vIEFsaWFzIG5hbWVkIGFzIGluIHRoZSBKUyBBUEkgc3BlYwor
bGV0IGtFeHRlcm5SZWZDb2RlID0ga1dhc21FeHRlcm5SZWYgJiBrTGViMTI4TWFzazsKK2xldCBr
QW55UmVmQ29kZSA9IGtXYXNtQW55UmVmICYga0xlYjEyOE1hc2s7CitsZXQga0VxUmVmQ29kZSA9
IGtXYXNtRXFSZWYgJiBrTGViMTI4TWFzazsKK2xldCBrSTMxUmVmQ29kZSA9IGtXYXNtSTMxUmVm
ICAmIGtMZWIxMjhNYXNrOworbGV0IGtEYXRhUmVmQ29kZSA9IGtXYXNtRGF0YVJlZiAgJiBrTGVi
MTI4TWFzazsKKworbGV0IGtXYXNtT3B0UmVmID0gMHg2YzsKK2xldCBrV2FzbVJlZiA9IDB4NmI7
CitmdW5jdGlvbiB3YXNtT3B0UmVmVHlwZShoZWFwX3R5cGUpIHsKKyAgcmV0dXJuIHtvcGNvZGU6
IGtXYXNtT3B0UmVmLCBoZWFwX3R5cGU6IGhlYXBfdHlwZX07Cit9CitmdW5jdGlvbiB3YXNtUmVm
VHlwZShoZWFwX3R5cGUpIHsKKyAgcmV0dXJuIHtvcGNvZGU6IGtXYXNtUmVmLCBoZWFwX3R5cGU6
IGhlYXBfdHlwZX07Cit9CisKK2xldCBrV2FzbVJ0dFdpdGhEZXB0aCA9IDB4Njk7CitmdW5jdGlv
biB3YXNtUnR0KGluZGV4LCBkZXB0aCkgeworICBpZiAoaW5kZXggPCAwKSB0aHJvdyBuZXcgRXJy
b3IoIkV4cGVjdGluZyBub24tbmVnYXRpdmUgdHlwZSBpbmRleCIpOworICByZXR1cm4ge29wY29k
ZToga1dhc21SdHRXaXRoRGVwdGgsIGluZGV4OiBpbmRleCwgZGVwdGg6IGRlcHRofTsKK30KK2xl
dCBrV2FzbVJ0dCA9IDB4Njg7CitmdW5jdGlvbiB3YXNtUnR0Tm9EZXB0aChpbmRleCkgeworICBp
ZiAoaW5kZXggPCAwKSB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGluZyBub24tbmVnYXRpdmUgdHlw
ZSBpbmRleCIpOworICByZXR1cm4ge29wY29kZToga1dhc21SdHQsIGluZGV4OiBpbmRleH07Cit9
CisKK2xldCBrRXh0ZXJuYWxGdW5jdGlvbiA9IDA7CitsZXQga0V4dGVybmFsVGFibGUgPSAxOwor
bGV0IGtFeHRlcm5hbE1lbW9yeSA9IDI7CitsZXQga0V4dGVybmFsR2xvYmFsID0gMzsKK2xldCBr
RXh0ZXJuYWxUYWcgPSA0OworCitsZXQga1RhYmxlWmVybyA9IDA7CitsZXQga01lbW9yeVplcm8g
PSAwOworbGV0IGtTZWdtZW50WmVybyA9IDA7CisKK2xldCBrRXhjZXB0aW9uQXR0cmlidXRlID0g
MDsKKworLy8gVXNlZnVsIHNpZ25hdHVyZXMKK2xldCBrU2lnX2lfaSA9IG1ha2VTaWcoW2tXYXNt
STMyXSwgW2tXYXNtSTMyXSk7CitsZXQga1NpZ19sX2wgPSBtYWtlU2lnKFtrV2FzbUk2NF0sIFtr
V2FzbUk2NF0pOworbGV0IGtTaWdfaV9sID0gbWFrZVNpZyhba1dhc21JNjRdLCBba1dhc21JMzJd
KTsKK2xldCBrU2lnX2lfaWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dhc21JMzJdLCBba1dhc21J
MzJdKTsKK2xldCBrU2lnX2lfaWlpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMyLCBrV2Fz
bUkzMl0sIFtrV2FzbUkzMl0pOworbGV0IGtTaWdfdl9paWlpID0gbWFrZVNpZyhba1dhc21JMzIs
IGtXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJdLCBbXSk7CitsZXQga1NpZ19mX2ZmID0gbWFr
ZVNpZyhba1dhc21GMzIsIGtXYXNtRjMyXSwgW2tXYXNtRjMyXSk7CitsZXQga1NpZ19kX2RkID0g
bWFrZVNpZyhba1dhc21GNjQsIGtXYXNtRjY0XSwgW2tXYXNtRjY0XSk7CitsZXQga1NpZ19sX2xs
ID0gbWFrZVNpZyhba1dhc21JNjQsIGtXYXNtSTY0XSwgW2tXYXNtSTY0XSk7CitsZXQga1NpZ19p
X2RkID0gbWFrZVNpZyhba1dhc21GNjQsIGtXYXNtRjY0XSwgW2tXYXNtSTMyXSk7CitsZXQga1Np
Z192X3YgPSBtYWtlU2lnKFtdLCBbXSk7CitsZXQga1NpZ19pX3YgPSBtYWtlU2lnKFtdLCBba1dh
c21JMzJdKTsKK2xldCBrU2lnX2xfdiA9IG1ha2VTaWcoW10sIFtrV2FzbUk2NF0pOworbGV0IGtT
aWdfZl92ID0gbWFrZVNpZyhbXSwgW2tXYXNtRjMyXSk7CitsZXQga1NpZ19kX3YgPSBtYWtlU2ln
KFtdLCBba1dhc21GNjRdKTsKK2xldCBrU2lnX3ZfaSA9IG1ha2VTaWcoW2tXYXNtSTMyXSwgW10p
OworbGV0IGtTaWdfdl9paSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMl0sIFtdKTsKK2xl
dCBrU2lnX3ZfaWlpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMl0sIFtd
KTsKK2xldCBrU2lnX3ZfbCA9IG1ha2VTaWcoW2tXYXNtSTY0XSwgW10pOworbGV0IGtTaWdfdl9k
ID0gbWFrZVNpZyhba1dhc21GNjRdLCBbXSk7CitsZXQga1NpZ192X2RkID0gbWFrZVNpZyhba1dh
c21GNjQsIGtXYXNtRjY0XSwgW10pOworbGV0IGtTaWdfdl9kZGkgPSBtYWtlU2lnKFtrV2FzbUY2
NCwga1dhc21GNjQsIGtXYXNtSTMyXSwgW10pOworbGV0IGtTaWdfaWlfdiA9IG1ha2VTaWcoW10s
IFtrV2FzbUkzMiwga1dhc21JMzJdKTsKK2xldCBrU2lnX2lpaV92ID0gbWFrZVNpZyhbXSwgW2tX
YXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJdKTsKK2xldCBrU2lnX2lpX2kgPSBtYWtlU2lnKFtr
V2FzbUkzMl0sIFtrV2FzbUkzMiwga1dhc21JMzJdKTsKK2xldCBrU2lnX2lpaV9pID0gbWFrZVNp
Zyhba1dhc21JMzJdLCBba1dhc21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMl0pOworbGV0IGtTaWdf
aWlfaWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dhc21JMzJdLCBba1dhc21JMzIsIGtXYXNtSTMy
XSk7CitsZXQga1NpZ19paWlfaWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dhc21JMzJdLCBba1dh
c21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMl0pOworCitsZXQga1NpZ192X2YgPSBtYWtlU2lnKFtr
V2FzbUYzMl0sIFtdKTsKK2xldCBrU2lnX2ZfZiA9IG1ha2VTaWcoW2tXYXNtRjMyXSwgW2tXYXNt
RjMyXSk7CitsZXQga1NpZ19mX2QgPSBtYWtlU2lnKFtrV2FzbUY2NF0sIFtrV2FzbUYzMl0pOwor
bGV0IGtTaWdfZF9kID0gbWFrZVNpZyhba1dhc21GNjRdLCBba1dhc21GNjRdKTsKK2xldCBrU2ln
X3JfciA9IG1ha2VTaWcoW2tXYXNtRXh0ZXJuUmVmXSwgW2tXYXNtRXh0ZXJuUmVmXSk7CitsZXQg
a1NpZ19hX2EgPSBtYWtlU2lnKFtrV2FzbUFueUZ1bmNdLCBba1dhc21BbnlGdW5jXSk7CitsZXQg
a1NpZ19pX3IgPSBtYWtlU2lnKFtrV2FzbUV4dGVyblJlZl0sIFtrV2FzbUkzMl0pOworbGV0IGtT
aWdfdl9yID0gbWFrZVNpZyhba1dhc21FeHRlcm5SZWZdLCBbXSk7CitsZXQga1NpZ192X2EgPSBt
YWtlU2lnKFtrV2FzbUFueUZ1bmNdLCBbXSk7CitsZXQga1NpZ192X3JyID0gbWFrZVNpZyhba1dh
c21FeHRlcm5SZWYsIGtXYXNtRXh0ZXJuUmVmXSwgW10pOworbGV0IGtTaWdfdl9hYSA9IG1ha2VT
aWcoW2tXYXNtQW55RnVuYywga1dhc21BbnlGdW5jXSwgW10pOworbGV0IGtTaWdfcl92ID0gbWFr
ZVNpZyhbXSwgW2tXYXNtRXh0ZXJuUmVmXSk7CitsZXQga1NpZ19hX3YgPSBtYWtlU2lnKFtdLCBb
a1dhc21BbnlGdW5jXSk7CitsZXQga1NpZ19hX2kgPSBtYWtlU2lnKFtrV2FzbUkzMl0sIFtrV2Fz
bUFueUZ1bmNdKTsKK2xldCBrU2lnX3NfaSA9IG1ha2VTaWcoW2tXYXNtSTMyXSwgW2tXYXNtUzEy
OF0pOworbGV0IGtTaWdfaV9zID0gbWFrZVNpZyhba1dhc21TMTI4XSwgW2tXYXNtSTMyXSk7CisK
K2Z1bmN0aW9uIG1ha2VTaWcocGFyYW1zLCByZXN1bHRzKSB7CisgIHJldHVybiB7cGFyYW1zOiBw
YXJhbXMsIHJlc3VsdHM6IHJlc3VsdHN9OworfQorCitmdW5jdGlvbiBtYWtlU2lnX3ZfeCh4KSB7
CisgIHJldHVybiBtYWtlU2lnKFt4XSwgW10pOworfQorCitmdW5jdGlvbiBtYWtlU2lnX3hfdih4
KSB7CisgIHJldHVybiBtYWtlU2lnKFtdLCBbeF0pOworfQorCitmdW5jdGlvbiBtYWtlU2lnX3Zf
eHgoeCkgeworICByZXR1cm4gbWFrZVNpZyhbeCwgeF0sIFtdKTsKK30KKworZnVuY3Rpb24gbWFr
ZVNpZ19yX3YocikgeworICByZXR1cm4gbWFrZVNpZyhbXSwgW3JdKTsKK30KKworZnVuY3Rpb24g
bWFrZVNpZ19yX3gociwgeCkgeworICByZXR1cm4gbWFrZVNpZyhbeF0sIFtyXSk7Cit9CisKK2Z1
bmN0aW9uIG1ha2VTaWdfcl94eChyLCB4KSB7CisgIHJldHVybiBtYWtlU2lnKFt4LCB4XSwgW3Jd
KTsKK30KKworLy8gT3Bjb2RlcworY29uc3Qga1dhc21PcGNvZGVzID0geworICAnVW5yZWFjaGFi
bGUnOiAweDAwLAorICAnTm9wJzogMHgwMSwKKyAgJ0Jsb2NrJzogMHgwMiwKKyAgJ0xvb3AnOiAw
eDAzLAorICAnSWYnOiAweDA0LAorICAnRWxzZSc6IDB4MDUsCisgICdUcnknOiAweDA2LAorICAn
Q2F0Y2gnOiAweDA3LAorICAnVGhyb3cnOiAweDA4LAorICAnUmV0aHJvdyc6IDB4MDksCisgICdD
YXRjaEFsbCc6IDB4MTksCisgICdFbmQnOiAweDBiLAorICAnQnInOiAweDBjLAorICAnQnJJZic6
IDB4MGQsCisgICdCclRhYmxlJzogMHgwZSwKKyAgJ1JldHVybic6IDB4MGYsCisgICdDYWxsRnVu
Y3Rpb24nOiAweDEwLAorICAnQ2FsbEluZGlyZWN0JzogMHgxMSwKKyAgJ1JldHVybkNhbGwnOiAw
eDEyLAorICAnUmV0dXJuQ2FsbEluZGlyZWN0JzogMHgxMywKKyAgJ0NhbGxSZWYnOiAweDE0LAor
ICAnUmV0dXJuQ2FsbFJlZic6IDB4MTUsCisgICdMZXQnOiAweDE3LAorICAnRGVsZWdhdGUnOiAw
eDE4LAorICAnRHJvcCc6IDB4MWEsCisgICdTZWxlY3QnOiAweDFiLAorICAnU2VsZWN0V2l0aFR5
cGUnOiAweDFjLAorICAnTG9jYWxHZXQnOiAweDIwLAorICAnTG9jYWxTZXQnOiAweDIxLAorICAn
TG9jYWxUZWUnOiAweDIyLAorICAnR2xvYmFsR2V0JzogMHgyMywKKyAgJ0dsb2JhbFNldCc6IDB4
MjQsCisgICdUYWJsZUdldCc6IDB4MjUsCisgICdUYWJsZVNldCc6IDB4MjYsCisgICdJMzJMb2Fk
TWVtJzogMHgyOCwKKyAgJ0k2NExvYWRNZW0nOiAweDI5LAorICAnRjMyTG9hZE1lbSc6IDB4MmEs
CisgICdGNjRMb2FkTWVtJzogMHgyYiwKKyAgJ0kzMkxvYWRNZW04Uyc6IDB4MmMsCisgICdJMzJM
b2FkTWVtOFUnOiAweDJkLAorICAnSTMyTG9hZE1lbTE2Uyc6IDB4MmUsCisgICdJMzJMb2FkTWVt
MTZVJzogMHgyZiwKKyAgJ0k2NExvYWRNZW04Uyc6IDB4MzAsCisgICdJNjRMb2FkTWVtOFUnOiAw
eDMxLAorICAnSTY0TG9hZE1lbTE2Uyc6IDB4MzIsCisgICdJNjRMb2FkTWVtMTZVJzogMHgzMywK
KyAgJ0k2NExvYWRNZW0zMlMnOiAweDM0LAorICAnSTY0TG9hZE1lbTMyVSc6IDB4MzUsCisgICdJ
MzJTdG9yZU1lbSc6IDB4MzYsCisgICdJNjRTdG9yZU1lbSc6IDB4MzcsCisgICdGMzJTdG9yZU1l
bSc6IDB4MzgsCisgICdGNjRTdG9yZU1lbSc6IDB4MzksCisgICdJMzJTdG9yZU1lbTgnOiAweDNh
LAorICAnSTMyU3RvcmVNZW0xNic6IDB4M2IsCisgICdJNjRTdG9yZU1lbTgnOiAweDNjLAorICAn
STY0U3RvcmVNZW0xNic6IDB4M2QsCisgICdJNjRTdG9yZU1lbTMyJzogMHgzZSwKKyAgJ01lbW9y
eVNpemUnOiAweDNmLAorICAnTWVtb3J5R3Jvdyc6IDB4NDAsCisgICdJMzJDb25zdCc6IDB4NDEs
CisgICdJNjRDb25zdCc6IDB4NDIsCisgICdGMzJDb25zdCc6IDB4NDMsCisgICdGNjRDb25zdCc6
IDB4NDQsCisgICdJMzJFcXonOiAweDQ1LAorICAnSTMyRXEnOiAweDQ2LAorICAnSTMyTmUnOiAw
eDQ3LAorICAnSTMyTHRTJzogMHg0OCwKKyAgJ0kzMkx0VSc6IDB4NDksCisgICdJMzJHdFMnOiAw
eDRhLAorICAnSTMyR3RVJzogMHg0YiwKKyAgJ0kzMkxlUyc6IDB4NGMsCisgICdJMzJMZVUnOiAw
eDRkLAorICAnSTMyR2VTJzogMHg0ZSwKKyAgJ0kzMkdlVSc6IDB4NGYsCisgICdJNjRFcXonOiAw
eDUwLAorICAnSTY0RXEnOiAweDUxLAorICAnSTY0TmUnOiAweDUyLAorICAnSTY0THRTJzogMHg1
MywKKyAgJ0k2NEx0VSc6IDB4NTQsCisgICdJNjRHdFMnOiAweDU1LAorICAnSTY0R3RVJzogMHg1
NiwKKyAgJ0k2NExlUyc6IDB4NTcsCisgICdJNjRMZVUnOiAweDU4LAorICAnSTY0R2VTJzogMHg1
OSwKKyAgJ0k2NEdlVSc6IDB4NWEsCisgICdGMzJFcSc6IDB4NWIsCisgICdGMzJOZSc6IDB4NWMs
CisgICdGMzJMdCc6IDB4NWQsCisgICdGMzJHdCc6IDB4NWUsCisgICdGMzJMZSc6IDB4NWYsCisg
ICdGMzJHZSc6IDB4NjAsCisgICdGNjRFcSc6IDB4NjEsCisgICdGNjROZSc6IDB4NjIsCisgICdG
NjRMdCc6IDB4NjMsCisgICdGNjRHdCc6IDB4NjQsCisgICdGNjRMZSc6IDB4NjUsCisgICdGNjRH
ZSc6IDB4NjYsCisgICdJMzJDbHonOiAweDY3LAorICAnSTMyQ3R6JzogMHg2OCwKKyAgJ0kzMlBv
cGNudCc6IDB4NjksCisgICdJMzJBZGQnOiAweDZhLAorICAnSTMyU3ViJzogMHg2YiwKKyAgJ0kz
Mk11bCc6IDB4NmMsCisgICdJMzJEaXZTJzogMHg2ZCwKKyAgJ0kzMkRpdlUnOiAweDZlLAorICAn
STMyUmVtUyc6IDB4NmYsCisgICdJMzJSZW1VJzogMHg3MCwKKyAgJ0kzMkFuZCc6IDB4NzEsCisg
ICdJMzJJb3InOiAweDcyLAorICAnSTMyWG9yJzogMHg3MywKKyAgJ0kzMlNobCc6IDB4NzQsCisg
ICdJMzJTaHJTJzogMHg3NSwKKyAgJ0kzMlNoclUnOiAweDc2LAorICAnSTMyUm9sJzogMHg3NywK
KyAgJ0kzMlJvcic6IDB4NzgsCisgICdJNjRDbHonOiAweDc5LAorICAnSTY0Q3R6JzogMHg3YSwK
KyAgJ0k2NFBvcGNudCc6IDB4N2IsCisgICdJNjRBZGQnOiAweDdjLAorICAnSTY0U3ViJzogMHg3
ZCwKKyAgJ0k2NE11bCc6IDB4N2UsCisgICdJNjREaXZTJzogMHg3ZiwKKyAgJ0k2NERpdlUnOiAw
eDgwLAorICAnSTY0UmVtUyc6IDB4ODEsCisgICdJNjRSZW1VJzogMHg4MiwKKyAgJ0k2NEFuZCc6
IDB4ODMsCisgICdJNjRJb3InOiAweDg0LAorICAnSTY0WG9yJzogMHg4NSwKKyAgJ0k2NFNobCc6
IDB4ODYsCisgICdJNjRTaHJTJzogMHg4NywKKyAgJ0k2NFNoclUnOiAweDg4LAorICAnSTY0Um9s
JzogMHg4OSwKKyAgJ0k2NFJvcic6IDB4OGEsCisgICdGMzJBYnMnOiAweDhiLAorICAnRjMyTmVn
JzogMHg4YywKKyAgJ0YzMkNlaWwnOiAweDhkLAorICAnRjMyRmxvb3InOiAweDhlLAorICAnRjMy
VHJ1bmMnOiAweDhmLAorICAnRjMyTmVhcmVzdEludCc6IDB4OTAsCisgICdGMzJTcXJ0JzogMHg5
MSwKKyAgJ0YzMkFkZCc6IDB4OTIsCisgICdGMzJTdWInOiAweDkzLAorICAnRjMyTXVsJzogMHg5
NCwKKyAgJ0YzMkRpdic6IDB4OTUsCisgICdGMzJNaW4nOiAweDk2LAorICAnRjMyTWF4JzogMHg5
NywKKyAgJ0YzMkNvcHlTaWduJzogMHg5OCwKKyAgJ0Y2NEFicyc6IDB4OTksCisgICdGNjROZWcn
OiAweDlhLAorICAnRjY0Q2VpbCc6IDB4OWIsCisgICdGNjRGbG9vcic6IDB4OWMsCisgICdGNjRU
cnVuYyc6IDB4OWQsCisgICdGNjROZWFyZXN0SW50JzogMHg5ZSwKKyAgJ0Y2NFNxcnQnOiAweDlm
LAorICAnRjY0QWRkJzogMHhhMCwKKyAgJ0Y2NFN1Yic6IDB4YTEsCisgICdGNjRNdWwnOiAweGEy
LAorICAnRjY0RGl2JzogMHhhMywKKyAgJ0Y2NE1pbic6IDB4YTQsCisgICdGNjRNYXgnOiAweGE1
LAorICAnRjY0Q29weVNpZ24nOiAweGE2LAorICAnSTMyQ29udmVydEk2NCc6IDB4YTcsCisgICdJ
MzJTQ29udmVydEYzMic6IDB4YTgsCisgICdJMzJVQ29udmVydEYzMic6IDB4YTksCisgICdJMzJT
Q29udmVydEY2NCc6IDB4YWEsCisgICdJMzJVQ29udmVydEY2NCc6IDB4YWIsCisgICdJNjRTQ29u
dmVydEkzMic6IDB4YWMsCisgICdJNjRVQ29udmVydEkzMic6IDB4YWQsCisgICdJNjRTQ29udmVy
dEYzMic6IDB4YWUsCisgICdJNjRVQ29udmVydEYzMic6IDB4YWYsCisgICdJNjRTQ29udmVydEY2
NCc6IDB4YjAsCisgICdJNjRVQ29udmVydEY2NCc6IDB4YjEsCisgICdGMzJTQ29udmVydEkzMic6
IDB4YjIsCisgICdGMzJVQ29udmVydEkzMic6IDB4YjMsCisgICdGMzJTQ29udmVydEk2NCc6IDB4
YjQsCisgICdGMzJVQ29udmVydEk2NCc6IDB4YjUsCisgICdGMzJDb252ZXJ0RjY0JzogMHhiNiwK
KyAgJ0Y2NFNDb252ZXJ0STMyJzogMHhiNywKKyAgJ0Y2NFVDb252ZXJ0STMyJzogMHhiOCwKKyAg
J0Y2NFNDb252ZXJ0STY0JzogMHhiOSwKKyAgJ0Y2NFVDb252ZXJ0STY0JzogMHhiYSwKKyAgJ0Y2
NENvbnZlcnRGMzInOiAweGJiLAorICAnSTMyUmVpbnRlcnByZXRGMzInOiAweGJjLAorICAnSTY0
UmVpbnRlcnByZXRGNjQnOiAweGJkLAorICAnRjMyUmVpbnRlcnByZXRJMzInOiAweGJlLAorICAn
RjY0UmVpbnRlcnByZXRJNjQnOiAweGJmLAorICAnSTMyU0V4dGVuZEk4JzogMHhjMCwKKyAgJ0kz
MlNFeHRlbmRJMTYnOiAweGMxLAorICAnSTY0U0V4dGVuZEk4JzogMHhjMiwKKyAgJ0k2NFNFeHRl
bmRJMTYnOiAweGMzLAorICAnSTY0U0V4dGVuZEkzMic6IDB4YzQsCisgICdSZWZOdWxsJzogMHhk
MCwKKyAgJ1JlZklzTnVsbCc6IDB4ZDEsCisgICdSZWZGdW5jJzogMHhkMiwKKyAgJ1JlZkFzTm9u
TnVsbCc6IDB4ZDMsCisgICdCck9uTnVsbCc6IDB4ZDQsCisgICdSZWZFcSc6IDB4ZDUsCisgICdC
ck9uTm9uTnVsbCc6IDB4ZDYKK307CisKK2Z1bmN0aW9uIGRlZmluZVdhc21PcGNvZGUobmFtZSwg
dmFsdWUpIHsKKyAgaWYgKGdsb2JhbFRoaXMua1dhc21PcGNvZGVOYW1lcyA9PT0gdW5kZWZpbmVk
KSB7CisgICAgZ2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVzID0ge307CisgIH0KKyAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIG5hbWUsIHt2YWx1ZTogdmFsdWV9KTsKKyAgaWYg
KGdsb2JhbFRoaXMua1dhc21PcGNvZGVOYW1lc1t2YWx1ZV0gIT09IHVuZGVmaW5lZCkgeworICAg
IHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIHdhc20gb3Bjb2RlOiAke3ZhbHVlfS4gUHJldmlv
dXMgbmFtZTogJHsKKyAgICAgICAgZ2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVzW3ZhbHVlXX0s
IG5ldyBuYW1lOiAke25hbWV9YCk7CisgIH0KKyAgZ2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVz
W3ZhbHVlXSA9IG5hbWU7Cit9Citmb3IgKGxldCBuYW1lIGluIGtXYXNtT3Bjb2RlcykgeworICBk
ZWZpbmVXYXNtT3Bjb2RlKGBrRXhwciR7bmFtZX1gLCBrV2FzbU9wY29kZXNbbmFtZV0pOworfQor
CisvLyBQcmVmaXggb3Bjb2RlcworY29uc3Qga1ByZWZpeE9wY29kZXMgPSB7CisgICdHQyc6IDB4
ZmIsCisgICdOdW1lcmljJzogMHhmYywKKyAgJ1NpbWQnOiAweGZkLAorICAnQXRvbWljJzogMHhm
ZQorfTsKK2ZvciAobGV0IHByZWZpeCBpbiBrUHJlZml4T3Bjb2RlcykgeworICBkZWZpbmVXYXNt
T3Bjb2RlKGBrJHtwcmVmaXh9UHJlZml4YCwga1ByZWZpeE9wY29kZXNbcHJlZml4XSk7Cit9CisK
Ky8vIEdDIG9wY29kZXMKK2xldCBrRXhwclN0cnVjdE5ld1dpdGhSdHQgPSAweDAxOworbGV0IGtF
eHByU3RydWN0TmV3RGVmYXVsdFdpdGhSdHQgPSAweDAyOworbGV0IGtFeHByU3RydWN0R2V0ID0g
MHgwMzsKK2xldCBrRXhwclN0cnVjdEdldFMgPSAweDA0OworbGV0IGtFeHByU3RydWN0R2V0VSA9
IDB4MDU7CitsZXQga0V4cHJTdHJ1Y3RTZXQgPSAweDA2OworbGV0IGtFeHByU3RydWN0TmV3ID0g
MHgwNzsKK2xldCBrRXhwclN0cnVjdE5ld0RlZmF1bHQgPSAweDA4OworbGV0IGtFeHByQXJyYXlO
ZXdXaXRoUnR0ID0gMHgxMTsKK2xldCBrRXhwckFycmF5TmV3RGVmYXVsdFdpdGhSdHQgPSAweDEy
OworbGV0IGtFeHByQXJyYXlHZXQgPSAweDEzOworbGV0IGtFeHByQXJyYXlHZXRTID0gMHgxNDsK
K2xldCBrRXhwckFycmF5R2V0VSA9IDB4MTU7CitsZXQga0V4cHJBcnJheVNldCA9IDB4MTY7Cits
ZXQga0V4cHJBcnJheUxlbiA9IDB4MTc7CitsZXQga0V4cHJBcnJheUNvcHkgPSAweDE4OworbGV0
IGtFeHByQXJyYXlJbml0ID0gMHgxOTsKK2xldCBrRXhwckFycmF5SW5pdFN0YXRpYyA9IDB4MWE7
CitsZXQga0V4cHJBcnJheU5ldyA9IDB4MWI7CitsZXQga0V4cHJBcnJheU5ld0RlZmF1bHQgPSAw
eDFjOworbGV0IGtFeHBySTMxTmV3ID0gMHgyMDsKK2xldCBrRXhwckkzMUdldFMgPSAweDIxOwor
bGV0IGtFeHBySTMxR2V0VSA9IDB4MjI7CitsZXQga0V4cHJSdHRDYW5vbiA9IDB4MzA7CitsZXQg
a0V4cHJSdHRTdWIgPSAweDMxOworbGV0IGtFeHByUnR0RnJlc2hTdWIgPSAweDMyOworbGV0IGtF
eHByUmVmVGVzdCA9IDB4NDA7CitsZXQga0V4cHJSZWZDYXN0ID0gMHg0MTsKK2xldCBrRXhwckJy
T25DYXN0ID0gMHg0MjsKK2xldCBrRXhwckJyT25DYXN0RmFpbCA9IDB4NDM7CitsZXQga0V4cHJS
ZWZUZXN0U3RhdGljID0gMHg0NDsKK2xldCBrRXhwclJlZkNhc3RTdGF0aWMgPSAweDQ1OworbGV0
IGtFeHByQnJPbkNhc3RTdGF0aWMgPSAweDQ2OworbGV0IGtFeHByQnJPbkNhc3RTdGF0aWNGYWls
ID0gMHg0NzsKK2xldCBrRXhwclJlZklzRnVuYyA9IDB4NTA7CitsZXQga0V4cHJSZWZJc0RhdGEg
PSAweDUxOworbGV0IGtFeHByUmVmSXNJMzEgPSAweDUyOworbGV0IGtFeHByUmVmQXNGdW5jID0g
MHg1ODsKK2xldCBrRXhwclJlZkFzRGF0YSA9IDB4NTk7CitsZXQga0V4cHJSZWZBc0kzMSA9IDB4
NWE7CitsZXQga0V4cHJCck9uRnVuYyA9IDB4NjA7CitsZXQga0V4cHJCck9uRGF0YSA9IDB4NjE7
CitsZXQga0V4cHJCck9uSTMxID0gMHg2MjsKKworLy8gTnVtZXJpYyBvcGNvZGVzLgorbGV0IGtF
eHBySTMyU0NvbnZlcnRTYXRGMzIgPSAweDAwOworbGV0IGtFeHBySTMyVUNvbnZlcnRTYXRGMzIg
PSAweDAxOworbGV0IGtFeHBySTMyU0NvbnZlcnRTYXRGNjQgPSAweDAyOworbGV0IGtFeHBySTMy
VUNvbnZlcnRTYXRGNjQgPSAweDAzOworbGV0IGtFeHBySTY0U0NvbnZlcnRTYXRGMzIgPSAweDA0
OworbGV0IGtFeHBySTY0VUNvbnZlcnRTYXRGMzIgPSAweDA1OworbGV0IGtFeHBySTY0U0NvbnZl
cnRTYXRGNjQgPSAweDA2OworbGV0IGtFeHBySTY0VUNvbnZlcnRTYXRGNjQgPSAweDA3OworbGV0
IGtFeHByTWVtb3J5SW5pdCA9IDB4MDg7CitsZXQga0V4cHJEYXRhRHJvcCA9IDB4MDk7CitsZXQg
a0V4cHJNZW1vcnlDb3B5ID0gMHgwYTsKK2xldCBrRXhwck1lbW9yeUZpbGwgPSAweDBiOworbGV0
IGtFeHByVGFibGVJbml0ID0gMHgwYzsKK2xldCBrRXhwckVsZW1Ecm9wID0gMHgwZDsKK2xldCBr
RXhwclRhYmxlQ29weSA9IDB4MGU7CitsZXQga0V4cHJUYWJsZUdyb3cgPSAweDBmOworbGV0IGtF
eHByVGFibGVTaXplID0gMHgxMDsKK2xldCBrRXhwclRhYmxlRmlsbCA9IDB4MTE7CisKKy8vIEF0
b21pYyBvcGNvZGVzLgorbGV0IGtFeHByQXRvbWljTm90aWZ5ID0gMHgwMDsKK2xldCBrRXhwckkz
MkF0b21pY1dhaXQgPSAweDAxOworbGV0IGtFeHBySTY0QXRvbWljV2FpdCA9IDB4MDI7CitsZXQg
a0V4cHJJMzJBdG9taWNMb2FkID0gMHgxMDsKK2xldCBrRXhwckkzMkF0b21pY0xvYWQ4VSA9IDB4
MTI7CitsZXQga0V4cHJJMzJBdG9taWNMb2FkMTZVID0gMHgxMzsKK2xldCBrRXhwckkzMkF0b21p
Y1N0b3JlID0gMHgxNzsKK2xldCBrRXhwckkzMkF0b21pY1N0b3JlOFUgPSAweDE5OworbGV0IGtF
eHBySTMyQXRvbWljU3RvcmUxNlUgPSAweDFhOworbGV0IGtFeHBySTMyQXRvbWljQWRkID0gMHgx
ZTsKK2xldCBrRXhwckkzMkF0b21pY0FkZDhVID0gMHgyMDsKK2xldCBrRXhwckkzMkF0b21pY0Fk
ZDE2VSA9IDB4MjE7CitsZXQga0V4cHJJMzJBdG9taWNTdWIgPSAweDI1OworbGV0IGtFeHBySTMy
QXRvbWljU3ViOFUgPSAweDI3OworbGV0IGtFeHBySTMyQXRvbWljU3ViMTZVID0gMHgyODsKK2xl
dCBrRXhwckkzMkF0b21pY0FuZCA9IDB4MmM7CitsZXQga0V4cHJJMzJBdG9taWNBbmQ4VSA9IDB4
MmU7CitsZXQga0V4cHJJMzJBdG9taWNBbmQxNlUgPSAweDJmOworbGV0IGtFeHBySTMyQXRvbWlj
T3IgPSAweDMzOworbGV0IGtFeHBySTMyQXRvbWljT3I4VSA9IDB4MzU7CitsZXQga0V4cHJJMzJB
dG9taWNPcjE2VSA9IDB4MzY7CitsZXQga0V4cHJJMzJBdG9taWNYb3IgPSAweDNhOworbGV0IGtF
eHBySTMyQXRvbWljWG9yOFUgPSAweDNjOworbGV0IGtFeHBySTMyQXRvbWljWG9yMTZVID0gMHgz
ZDsKK2xldCBrRXhwckkzMkF0b21pY0V4Y2hhbmdlID0gMHg0MTsKK2xldCBrRXhwckkzMkF0b21p
Y0V4Y2hhbmdlOFUgPSAweDQzOworbGV0IGtFeHBySTMyQXRvbWljRXhjaGFuZ2UxNlUgPSAweDQ0
OworbGV0IGtFeHBySTMyQXRvbWljQ29tcGFyZUV4Y2hhbmdlID0gMHg0ODsKK2xldCBrRXhwckkz
MkF0b21pY0NvbXBhcmVFeGNoYW5nZThVID0gMHg0YTsKK2xldCBrRXhwckkzMkF0b21pY0NvbXBh
cmVFeGNoYW5nZTE2VSA9IDB4NGI7CisKK2xldCBrRXhwckk2NEF0b21pY0xvYWQgPSAweDExOwor
bGV0IGtFeHBySTY0QXRvbWljTG9hZDhVID0gMHgxNDsKK2xldCBrRXhwckk2NEF0b21pY0xvYWQx
NlUgPSAweDE1OworbGV0IGtFeHBySTY0QXRvbWljTG9hZDMyVSA9IDB4MTY7CitsZXQga0V4cHJJ
NjRBdG9taWNTdG9yZSA9IDB4MTg7CitsZXQga0V4cHJJNjRBdG9taWNTdG9yZThVID0gMHgxYjsK
K2xldCBrRXhwckk2NEF0b21pY1N0b3JlMTZVID0gMHgxYzsKK2xldCBrRXhwckk2NEF0b21pY1N0
b3JlMzJVID0gMHgxZDsKK2xldCBrRXhwckk2NEF0b21pY0FkZCA9IDB4MWY7CitsZXQga0V4cHJJ
NjRBdG9taWNBZGQ4VSA9IDB4MjI7CitsZXQga0V4cHJJNjRBdG9taWNBZGQxNlUgPSAweDIzOwor
bGV0IGtFeHBySTY0QXRvbWljQWRkMzJVID0gMHgyNDsKK2xldCBrRXhwckk2NEF0b21pY1N1YiA9
IDB4MjY7CitsZXQga0V4cHJJNjRBdG9taWNTdWI4VSA9IDB4Mjk7CitsZXQga0V4cHJJNjRBdG9t
aWNTdWIxNlUgPSAweDJhOworbGV0IGtFeHBySTY0QXRvbWljU3ViMzJVID0gMHgyYjsKK2xldCBr
RXhwckk2NEF0b21pY0FuZCA9IDB4MmQ7CitsZXQga0V4cHJJNjRBdG9taWNBbmQ4VSA9IDB4MzA7
CitsZXQga0V4cHJJNjRBdG9taWNBbmQxNlUgPSAweDMxOworbGV0IGtFeHBySTY0QXRvbWljQW5k
MzJVID0gMHgzMjsKK2xldCBrRXhwckk2NEF0b21pY09yID0gMHgzNDsKK2xldCBrRXhwckk2NEF0
b21pY09yOFUgPSAweDM3OworbGV0IGtFeHBySTY0QXRvbWljT3IxNlUgPSAweDM4OworbGV0IGtF
eHBySTY0QXRvbWljT3IzMlUgPSAweDM5OworbGV0IGtFeHBySTY0QXRvbWljWG9yID0gMHgzYjsK
K2xldCBrRXhwckk2NEF0b21pY1hvcjhVID0gMHgzZTsKK2xldCBrRXhwckk2NEF0b21pY1hvcjE2
VSA9IDB4M2Y7CitsZXQga0V4cHJJNjRBdG9taWNYb3IzMlUgPSAweDQwOworbGV0IGtFeHBySTY0
QXRvbWljRXhjaGFuZ2UgPSAweDQyOworbGV0IGtFeHBySTY0QXRvbWljRXhjaGFuZ2U4VSA9IDB4
NDU7CitsZXQga0V4cHJJNjRBdG9taWNFeGNoYW5nZTE2VSA9IDB4NDY7CitsZXQga0V4cHJJNjRB
dG9taWNFeGNoYW5nZTMyVSA9IDB4NDc7CitsZXQga0V4cHJJNjRBdG9taWNDb21wYXJlRXhjaGFu
Z2UgPSAweDQ5CitsZXQga0V4cHJJNjRBdG9taWNDb21wYXJlRXhjaGFuZ2U4VSA9IDB4NGM7Cits
ZXQga0V4cHJJNjRBdG9taWNDb21wYXJlRXhjaGFuZ2UxNlUgPSAweDRkOworbGV0IGtFeHBySTY0
QXRvbWljQ29tcGFyZUV4Y2hhbmdlMzJVID0gMHg0ZTsKKworLy8gU2ltZCBvcGNvZGVzLgorbGV0
IGtFeHByUzEyOExvYWRNZW0gPSAweDAwOworbGV0IGtFeHByUzEyOExvYWQ4eDhTID0gMHgwMTsK
K2xldCBrRXhwclMxMjhMb2FkOHg4VSA9IDB4MDI7CitsZXQga0V4cHJTMTI4TG9hZDE2eDRTID0g
MHgwMzsKK2xldCBrRXhwclMxMjhMb2FkMTZ4NFUgPSAweDA0OworbGV0IGtFeHByUzEyOExvYWQz
MngyUyA9IDB4MDU7CitsZXQga0V4cHJTMTI4TG9hZDMyeDJVID0gMHgwNjsKK2xldCBrRXhwclMx
MjhMb2FkOFNwbGF0ID0gMHgwNzsKK2xldCBrRXhwclMxMjhMb2FkMTZTcGxhdCA9IDB4MDg7Cits
ZXQga0V4cHJTMTI4TG9hZDMyU3BsYXQgPSAweDA5OworbGV0IGtFeHByUzEyOExvYWQ2NFNwbGF0
ID0gMHgwYTsKK2xldCBrRXhwclMxMjhTdG9yZU1lbSA9IDB4MGI7CitsZXQga0V4cHJTMTI4Q29u
c3QgPSAweDBjOworbGV0IGtFeHBySTh4MTZTaHVmZmxlID0gMHgwZDsKK2xldCBrRXhwckk4eDE2
U3dpenpsZSA9IDB4MGU7CisKK2xldCBrRXhwckk4eDE2U3BsYXQgPSAweDBmOworbGV0IGtFeHBy
STE2eDhTcGxhdCA9IDB4MTA7CitsZXQga0V4cHJJMzJ4NFNwbGF0ID0gMHgxMTsKK2xldCBrRXhw
ckk2NHgyU3BsYXQgPSAweDEyOworbGV0IGtFeHByRjMyeDRTcGxhdCA9IDB4MTM7CitsZXQga0V4
cHJGNjR4MlNwbGF0ID0gMHgxNDsKK2xldCBrRXhwckk4eDE2RXh0cmFjdExhbmVTID0gMHgxNTsK
K2xldCBrRXhwckk4eDE2RXh0cmFjdExhbmVVID0gMHgxNjsKK2xldCBrRXhwckk4eDE2UmVwbGFj
ZUxhbmUgPSAweDE3OworbGV0IGtFeHBySTE2eDhFeHRyYWN0TGFuZVMgPSAweDE4OworbGV0IGtF
eHBySTE2eDhFeHRyYWN0TGFuZVUgPSAweDE5OworbGV0IGtFeHBySTE2eDhSZXBsYWNlTGFuZSA9
IDB4MWE7CitsZXQga0V4cHJJMzJ4NEV4dHJhY3RMYW5lID0gMHgxYjsKK2xldCBrRXhwckkzMng0
UmVwbGFjZUxhbmUgPSAweDFjOworbGV0IGtFeHBySTY0eDJFeHRyYWN0TGFuZSA9IDB4MWQ7Cits
ZXQga0V4cHJJNjR4MlJlcGxhY2VMYW5lID0gMHgxZTsKK2xldCBrRXhwckYzMng0RXh0cmFjdExh
bmUgPSAweDFmOworbGV0IGtFeHByRjMyeDRSZXBsYWNlTGFuZSA9IDB4MjA7CitsZXQga0V4cHJG
NjR4MkV4dHJhY3RMYW5lID0gMHgyMTsKK2xldCBrRXhwckY2NHgyUmVwbGFjZUxhbmUgPSAweDIy
OworbGV0IGtFeHBySTh4MTZFcSA9IDB4MjM7CitsZXQga0V4cHJJOHgxNk5lID0gMHgyNDsKK2xl
dCBrRXhwckk4eDE2THRTID0gMHgyNTsKK2xldCBrRXhwckk4eDE2THRVID0gMHgyNjsKK2xldCBr
RXhwckk4eDE2R3RTID0gMHgyNzsKK2xldCBrRXhwckk4eDE2R3RVID0gMHgyODsKK2xldCBrRXhw
ckk4eDE2TGVTID0gMHgyOTsKK2xldCBrRXhwckk4eDE2TGVVID0gMHgyYTsKK2xldCBrRXhwckk4
eDE2R2VTID0gMHgyYjsKK2xldCBrRXhwckk4eDE2R2VVID0gMHgyYzsKK2xldCBrRXhwckkxNng4
RXEgPSAweDJkOworbGV0IGtFeHBySTE2eDhOZSA9IDB4MmU7CitsZXQga0V4cHJJMTZ4OEx0UyA9
IDB4MmY7CitsZXQga0V4cHJJMTZ4OEx0VSA9IDB4MzA7CitsZXQga0V4cHJJMTZ4OEd0UyA9IDB4
MzE7CitsZXQga0V4cHJJMTZ4OEd0VSA9IDB4MzI7CitsZXQga0V4cHJJMTZ4OExlUyA9IDB4MzM7
CitsZXQga0V4cHJJMTZ4OExlVSA9IDB4MzQ7CitsZXQga0V4cHJJMTZ4OEdlUyA9IDB4MzU7Cits
ZXQga0V4cHJJMTZ4OEdlVSA9IDB4MzY7CitsZXQga0V4cHJJMzJ4NEVxID0gMHgzNzsKK2xldCBr
RXhwckkzMng0TmUgPSAweDM4OworbGV0IGtFeHBySTMyeDRMdFMgPSAweDM5OworbGV0IGtFeHBy
STMyeDRMdFUgPSAweDNhOworbGV0IGtFeHBySTMyeDRHdFMgPSAweDNiOworbGV0IGtFeHBySTMy
eDRHdFUgPSAweDNjOworbGV0IGtFeHBySTMyeDRMZVMgPSAweDNkOworbGV0IGtFeHBySTMyeDRM
ZVUgPSAweDNlOworbGV0IGtFeHBySTMyeDRHZVMgPSAweDNmOworbGV0IGtFeHBySTMyeDRHZVUg
PSAweDQwOworbGV0IGtFeHByRjMyeDRFcSA9IDB4NDE7CitsZXQga0V4cHJGMzJ4NE5lID0gMHg0
MjsKK2xldCBrRXhwckYzMng0THQgPSAweDQzOworbGV0IGtFeHByRjMyeDRHdCA9IDB4NDQ7Cits
ZXQga0V4cHJGMzJ4NExlID0gMHg0NTsKK2xldCBrRXhwckYzMng0R2UgPSAweDQ2OworbGV0IGtF
eHByRjY0eDJFcSA9IDB4NDc7CitsZXQga0V4cHJGNjR4Mk5lID0gMHg0ODsKK2xldCBrRXhwckY2
NHgyTHQgPSAweDQ5OworbGV0IGtFeHByRjY0eDJHdCA9IDB4NGE7CitsZXQga0V4cHJGNjR4Mkxl
ID0gMHg0YjsKK2xldCBrRXhwckY2NHgyR2UgPSAweDRjOworbGV0IGtFeHByUzEyOE5vdCA9IDB4
NGQ7CitsZXQga0V4cHJTMTI4QW5kID0gMHg0ZTsKK2xldCBrRXhwclMxMjhBbmROb3QgPSAweDRm
OworbGV0IGtFeHByUzEyOE9yID0gMHg1MDsKK2xldCBrRXhwclMxMjhYb3IgPSAweDUxOworbGV0
IGtFeHByUzEyOFNlbGVjdCA9IDB4NTI7CitsZXQga0V4cHJWMTI4QW55VHJ1ZSA9IDB4NTM7Cits
ZXQga0V4cHJTMTI4TG9hZDhMYW5lID0gMHg1NDsKK2xldCBrRXhwclMxMjhMb2FkMTZMYW5lID0g
MHg1NTsKK2xldCBrRXhwclMxMjhMb2FkMzJMYW5lID0gMHg1NjsKK2xldCBrRXhwclMxMjhMb2Fk
NjRMYW5lID0gMHg1NzsKK2xldCBrRXhwclMxMjhTdG9yZThMYW5lID0gMHg1ODsKK2xldCBrRXhw
clMxMjhTdG9yZTE2TGFuZSA9IDB4NTk7CitsZXQga0V4cHJTMTI4U3RvcmUzMkxhbmUgPSAweDVh
OworbGV0IGtFeHByUzEyOFN0b3JlNjRMYW5lID0gMHg1YjsKK2xldCBrRXhwclMxMjhMb2FkMzJa
ZXJvID0gMHg1YzsKK2xldCBrRXhwclMxMjhMb2FkNjRaZXJvID0gMHg1ZDsKK2xldCBrRXhwckYz
Mng0RGVtb3RlRjY0eDJaZXJvID0gMHg1ZTsKK2xldCBrRXhwckY2NHgyUHJvbW90ZUxvd0YzMng0
ID0gMHg1ZjsKK2xldCBrRXhwckk4eDE2QWJzID0gMHg2MDsKK2xldCBrRXhwckk4eDE2TmVnID0g
MHg2MTsKK2xldCBrRXhwckk4eDE2UG9wY250ID0gMHg2MjsKK2xldCBrRXhwckk4eDE2QWxsVHJ1
ZSA9IDB4NjM7CitsZXQga0V4cHJJOHgxNkJpdE1hc2sgPSAweDY0OworbGV0IGtFeHBySTh4MTZT
Q29udmVydEkxNng4ID0gMHg2NTsKK2xldCBrRXhwckk4eDE2VUNvbnZlcnRJMTZ4OCA9IDB4NjY7
CitsZXQga0V4cHJGMzJ4NENlaWwgPSAweDY3OworbGV0IGtFeHByRjMyeDRGbG9vciA9IDB4Njg7
CitsZXQga0V4cHJGMzJ4NFRydW5jID0gMHg2OTsKK2xldCBrRXhwckYzMng0TmVhcmVzdEludCA9
IDB4NmE7CitsZXQga0V4cHJJOHgxNlNobCA9IDB4NmI7CitsZXQga0V4cHJJOHgxNlNoclMgPSAw
eDZjOworbGV0IGtFeHBySTh4MTZTaHJVID0gMHg2ZDsKK2xldCBrRXhwckk4eDE2QWRkID0gMHg2
ZTsKK2xldCBrRXhwckk4eDE2QWRkU2F0UyA9IDB4NmY7CitsZXQga0V4cHJJOHgxNkFkZFNhdFUg
PSAweDcwOworbGV0IGtFeHBySTh4MTZTdWIgPSAweDcxOworbGV0IGtFeHBySTh4MTZTdWJTYXRT
ID0gMHg3MjsKK2xldCBrRXhwckk4eDE2U3ViU2F0VSA9IDB4NzM7CitsZXQga0V4cHJGNjR4MkNl
aWwgPSAweDc0OworbGV0IGtFeHByRjY0eDJGbG9vciA9IDB4NzU7CitsZXQga0V4cHJJOHgxNk1p
blMgPSAweDc2OworbGV0IGtFeHBySTh4MTZNaW5VID0gMHg3NzsKK2xldCBrRXhwckk4eDE2TWF4
UyA9IDB4Nzg7CitsZXQga0V4cHJJOHgxNk1heFUgPSAweDc5OworbGV0IGtFeHByRjY0eDJUcnVu
YyA9IDB4N2E7CitsZXQga0V4cHJJOHgxNlJvdW5kaW5nQXZlcmFnZVUgPSAweDdiOworbGV0IGtF
eHBySTE2eDhFeHRBZGRQYWlyd2lzZUk4eDE2UyA9IDB4N2M7CitsZXQga0V4cHJJMTZ4OEV4dEFk
ZFBhaXJ3aXNlSTh4MTZVID0gMHg3ZDsKK2xldCBrRXhwckkzMng0RXh0QWRkUGFpcndpc2VJMTZ4
OFMgPSAweDdlOworbGV0IGtFeHBySTMyeDRFeHRBZGRQYWlyd2lzZUkxNng4VSA9IDB4N2Y7Cits
ZXQga0V4cHJJMTZ4OEFicyA9IDB4ODA7CitsZXQga0V4cHJJMTZ4OE5lZyA9IDB4ODE7CitsZXQg
a0V4cHJJMTZ4OFExNU11bFJTYXRTID0gMHg4MjsKK2xldCBrRXhwckkxNng4QWxsVHJ1ZSA9IDB4
ODM7CitsZXQga0V4cHJJMTZ4OEJpdE1hc2sgPSAweDg0OworbGV0IGtFeHBySTE2eDhTQ29udmVy
dEkzMng0ID0gMHg4NTsKK2xldCBrRXhwckkxNng4VUNvbnZlcnRJMzJ4NCA9IDB4ODY7CitsZXQg
a0V4cHJJMTZ4OFNDb252ZXJ0STh4MTZMb3cgPSAweDg3OworbGV0IGtFeHBySTE2eDhTQ29udmVy
dEk4eDE2SGlnaCA9IDB4ODg7CitsZXQga0V4cHJJMTZ4OFVDb252ZXJ0STh4MTZMb3cgPSAweDg5
OworbGV0IGtFeHBySTE2eDhVQ29udmVydEk4eDE2SGlnaCA9IDB4OGE7CitsZXQga0V4cHJJMTZ4
OFNobCA9IDB4OGI7CitsZXQga0V4cHJJMTZ4OFNoclMgPSAweDhjOworbGV0IGtFeHBySTE2eDhT
aHJVID0gMHg4ZDsKK2xldCBrRXhwckkxNng4QWRkID0gMHg4ZTsKK2xldCBrRXhwckkxNng4QWRk
U2F0UyA9IDB4OGY7CitsZXQga0V4cHJJMTZ4OEFkZFNhdFUgPSAweDkwOworbGV0IGtFeHBySTE2
eDhTdWIgPSAweDkxOworbGV0IGtFeHBySTE2eDhTdWJTYXRTID0gMHg5MjsKK2xldCBrRXhwckkx
Nng4U3ViU2F0VSA9IDB4OTM7CitsZXQga0V4cHJGNjR4Mk5lYXJlc3RJbnQgPSAweDk0OworbGV0
IGtFeHBySTE2eDhNdWwgPSAweDk1OworbGV0IGtFeHBySTE2eDhNaW5TID0gMHg5NjsKK2xldCBr
RXhwckkxNng4TWluVSA9IDB4OTc7CitsZXQga0V4cHJJMTZ4OE1heFMgPSAweDk4OworbGV0IGtF
eHBySTE2eDhNYXhVID0gMHg5OTsKK2xldCBrRXhwckkxNng4Um91bmRpbmdBdmVyYWdlVSA9IDB4
OWI7CitsZXQga0V4cHJJMTZ4OEV4dE11bExvd0k4eDE2UyA9IDB4OWM7CitsZXQga0V4cHJJMTZ4
OEV4dE11bEhpZ2hJOHgxNlMgPSAweDlkOworbGV0IGtFeHBySTE2eDhFeHRNdWxMb3dJOHgxNlUg
PSAweDllOworbGV0IGtFeHBySTE2eDhFeHRNdWxIaWdoSTh4MTZVID0gMHg5ZjsKK2xldCBrRXhw
ckkzMng0QWJzID0gMHhhMDsKK2xldCBrRXhwckkzMng0TmVnID0gMHhhMTsKK2xldCBrRXhwckkz
Mng0QWxsVHJ1ZSA9IDB4YTM7CitsZXQga0V4cHJJMzJ4NEJpdE1hc2sgPSAweGE0OworbGV0IGtF
eHBySTMyeDRTQ29udmVydEkxNng4TG93ID0gMHhhNzsKK2xldCBrRXhwckkzMng0U0NvbnZlcnRJ
MTZ4OEhpZ2ggPSAweGE4OworbGV0IGtFeHBySTMyeDRVQ29udmVydEkxNng4TG93ID0gMHhhOTsK
K2xldCBrRXhwckkzMng0VUNvbnZlcnRJMTZ4OEhpZ2ggPSAweGFhOworbGV0IGtFeHBySTMyeDRT
aGwgPSAweGFiOworbGV0IGtFeHBySTMyeDRTaHJTID0gMHhhYzsKK2xldCBrRXhwckkzMng0U2hy
VSA9IDB4YWQ7CitsZXQga0V4cHJJMzJ4NEFkZCA9IDB4YWU7CitsZXQga0V4cHJJMzJ4NFN1YiA9
IDB4YjE7CitsZXQga0V4cHJJMzJ4NE11bCA9IDB4YjU7CitsZXQga0V4cHJJMzJ4NE1pblMgPSAw
eGI2OworbGV0IGtFeHBySTMyeDRNaW5VID0gMHhiNzsKK2xldCBrRXhwckkzMng0TWF4UyA9IDB4
Yjg7CitsZXQga0V4cHJJMzJ4NE1heFUgPSAweGI5OworbGV0IGtFeHBySTMyeDREb3RJMTZ4OFMg
PSAweGJhOworbGV0IGtFeHBySTMyeDRFeHRNdWxMb3dJMTZ4OFMgPSAweGJjOworbGV0IGtFeHBy
STMyeDRFeHRNdWxIaWdoSTE2eDhTID0gMHhiZDsKK2xldCBrRXhwckkzMng0RXh0TXVsTG93STE2
eDhVID0gMHhiZTsKK2xldCBrRXhwckkzMng0RXh0TXVsSGlnaEkxNng4VSA9IDB4YmY7CitsZXQg
a0V4cHJJNjR4MkFicyA9IDB4YzA7CitsZXQga0V4cHJJNjR4Mk5lZyA9IDB4YzE7CitsZXQga0V4
cHJJNjR4MkFsbFRydWUgPSAweGMzOworbGV0IGtFeHBySTY0eDJCaXRNYXNrID0gMHhjNDsKK2xl
dCBrRXhwckk2NHgyU0NvbnZlcnRJMzJ4NExvdyA9IDB4Yzc7CitsZXQga0V4cHJJNjR4MlNDb252
ZXJ0STMyeDRIaWdoID0gMHhjODsKK2xldCBrRXhwckk2NHgyVUNvbnZlcnRJMzJ4NExvdyA9IDB4
Yzk7CitsZXQga0V4cHJJNjR4MlVDb252ZXJ0STMyeDRIaWdoID0gMHhjYTsKK2xldCBrRXhwckk2
NHgyU2hsID0gMHhjYjsKK2xldCBrRXhwckk2NHgyU2hyUyA9IDB4Y2M7CitsZXQga0V4cHJJNjR4
MlNoclUgPSAweGNkOworbGV0IGtFeHBySTY0eDJBZGQgPSAweGNlOworbGV0IGtFeHBySTY0eDJT
dWIgPSAweGQxOworbGV0IGtFeHBySTY0eDJNdWwgPSAweGQ1OworbGV0IGtFeHBySTY0eDJFcSA9
IDB4ZDY7CitsZXQga0V4cHJJNjR4Mk5lID0gMHhkNzsKK2xldCBrRXhwckk2NHgyTHRTID0gMHhk
ODsKK2xldCBrRXhwckk2NHgyR3RTID0gMHhkOTsKK2xldCBrRXhwckk2NHgyTGVTID0gMHhkYTsK
K2xldCBrRXhwckk2NHgyR2VTID0gMHhkYjsKK2xldCBrRXhwckk2NHgyRXh0TXVsTG93STMyeDRT
ID0gMHhkYzsKK2xldCBrRXhwckk2NHgyRXh0TXVsSGlnaEkzMng0UyA9IDB4ZGQ7CitsZXQga0V4
cHJJNjR4MkV4dE11bExvd0kzMng0VSA9IDB4ZGU7CitsZXQga0V4cHJJNjR4MkV4dE11bEhpZ2hJ
MzJ4NFUgPSAweGRmOworbGV0IGtFeHByRjMyeDRBYnMgPSAweGUwOworbGV0IGtFeHByRjMyeDRO
ZWcgPSAweGUxOworbGV0IGtFeHByRjMyeDRTcXJ0ID0gMHhlMzsKK2xldCBrRXhwckYzMng0QWRk
ID0gMHhlNDsKK2xldCBrRXhwckYzMng0U3ViID0gMHhlNTsKK2xldCBrRXhwckYzMng0TXVsID0g
MHhlNjsKK2xldCBrRXhwckYzMng0RGl2ID0gMHhlNzsKK2xldCBrRXhwckYzMng0TWluID0gMHhl
ODsKK2xldCBrRXhwckYzMng0TWF4ID0gMHhlOTsKK2xldCBrRXhwckYzMng0UG1pbiA9IDB4ZWE7
CitsZXQga0V4cHJGMzJ4NFBtYXggPSAweGViOworbGV0IGtFeHByRjY0eDJBYnMgPSAweGVjOwor
bGV0IGtFeHByRjY0eDJOZWcgPSAweGVkOworbGV0IGtFeHByRjY0eDJTcXJ0ID0gMHhlZjsKK2xl
dCBrRXhwckY2NHgyQWRkID0gMHhmMDsKK2xldCBrRXhwckY2NHgyU3ViID0gMHhmMTsKK2xldCBr
RXhwckY2NHgyTXVsID0gMHhmMjsKK2xldCBrRXhwckY2NHgyRGl2ID0gMHhmMzsKK2xldCBrRXhw
ckY2NHgyTWluID0gMHhmNDsKK2xldCBrRXhwckY2NHgyTWF4ID0gMHhmNTsKK2xldCBrRXhwckY2
NHgyUG1pbiA9IDB4ZjY7CitsZXQga0V4cHJGNjR4MlBtYXggPSAweGY3OworbGV0IGtFeHBySTMy
eDRTQ29udmVydEYzMng0ID0gMHhmODsKK2xldCBrRXhwckkzMng0VUNvbnZlcnRGMzJ4NCA9IDB4
Zjk7CitsZXQga0V4cHJGMzJ4NFNDb252ZXJ0STMyeDQgPSAweGZhOworbGV0IGtFeHByRjMyeDRV
Q29udmVydEkzMng0ID0gMHhmYjsKK2xldCBrRXhwckkzMng0VHJ1bmNTYXRGNjR4MlNaZXJvID0g
MHhmYzsKK2xldCBrRXhwckkzMng0VHJ1bmNTYXRGNjR4MlVaZXJvID0gMHhmZDsKK2xldCBrRXhw
ckY2NHgyQ29udmVydExvd0kzMng0UyA9IDB4ZmU7CitsZXQga0V4cHJGNjR4MkNvbnZlcnRMb3dJ
MzJ4NFUgPSAweGZmOworCisvLyBDb21waWxhdGlvbiBoaW50IGNvbnN0YW50cy4KK2xldCBrQ29t
cGlsYXRpb25IaW50U3RyYXRlZ3lEZWZhdWx0ID0gMHgwMDsKK2xldCBrQ29tcGlsYXRpb25IaW50
U3RyYXRlZ3lMYXp5ID0gMHgwMTsKK2xldCBrQ29tcGlsYXRpb25IaW50U3RyYXRlZ3lFYWdlciA9
IDB4MDI7CitsZXQga0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5TGF6eUJhc2VsaW5lRWFnZXJUb3BU
aWVyID0gMHgwMzsKK2xldCBrQ29tcGlsYXRpb25IaW50VGllckRlZmF1bHQgPSAweDAwOworbGV0
IGtDb21waWxhdGlvbkhpbnRUaWVyQmFzZWxpbmUgPSAweDAxOworbGV0IGtDb21waWxhdGlvbkhp
bnRUaWVyT3B0aW1pemVkID0gMHgwMjsKKworbGV0IGtUcmFwVW5yZWFjaGFibGUgPSAwOworbGV0
IGtUcmFwTWVtT3V0T2ZCb3VuZHMgPSAxOworbGV0IGtUcmFwRGl2QnlaZXJvID0gMjsKK2xldCBr
VHJhcERpdlVucmVwcmVzZW50YWJsZSA9IDM7CitsZXQga1RyYXBSZW1CeVplcm8gPSA0OworbGV0
IGtUcmFwRmxvYXRVbnJlcHJlc2VudGFibGUgPSA1OworbGV0IGtUcmFwVGFibGVPdXRPZkJvdW5k
cyA9IDY7CitsZXQga1RyYXBGdW5jU2lnTWlzbWF0Y2ggPSA3OworbGV0IGtUcmFwVW5hbGlnbmVk
QWNjZXNzID0gODsKK2xldCBrVHJhcERhdGFTZWdtZW50RHJvcHBlZCA9IDk7CitsZXQga1RyYXBF
bGVtU2VnbWVudERyb3BwZWQgPSAxMDsKK2xldCBrVHJhcFJldGhyb3dOdWxsID0gMTE7CisKK2xl
dCBrVHJhcE1zZ3MgPSBbCisgIC9VbnJlYWNoYWJsZS8sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gLS0KKyAgJ21lbW9yeSBhY2Nlc3Mgb3V0IG9mIGJvdW5kcycsICAgICAg
ICAgICAgICAgICAgICAvLyAtLQorICAvRGl2aXNpb24gYnkgemVyby8sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIC0tCisgICdkaXZpZGUgcmVzdWx0IHVucmVwcmVzZW50YWJsZScs
ICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgJ3JlbWFpbmRlciBieSB6ZXJvJywgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAtLQorICAnZmxvYXQgdW5yZXByZXNlbnRhYmxlIGluIGlu
dGVnZXIgcmFuZ2UnLCAgICAgICAgIC8vIC0tCisgICd0YWJsZSBpbmRleCBpcyBvdXQgb2YgYm91
bmRzJywgICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgJ251bGwgZnVuY3Rpb24gb3IgZnVuY3Rp
b24gc2lnbmF0dXJlIG1pc21hdGNoJywgICAvLyAtLQorICAnb3BlcmF0aW9uIGRvZXMgbm90IHN1
cHBvcnQgdW5hbGlnbmVkIGFjY2Vzc2VzJywgIC8vIC0tCisgICdkYXRhIHNlZ21lbnQgaGFzIGJl
ZW4gZHJvcHBlZCcsICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgJ2VsZW1lbnQgc2VnbWVudCBo
YXMgYmVlbiBkcm9wcGVkJywgICAgICAgICAgICAgICAvLyAtLQorICAncmV0aHJvd2luZyBudWxs
IHZhbHVlJyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0tCitdOworCisvLyBUaGlzIHJl
cXVpcmVzIHRlc3QvbWpzdW5pdC9tanN1bml0LmpzLgorZnVuY3Rpb24gYXNzZXJ0VHJhcHModHJh
cCwgY29kZSkgeworICBhc3NlcnRUaHJvd3MoY29kZSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9y
LCBrVHJhcE1zZ3NbdHJhcF0pOworfQorCitjbGFzcyBCaW5hcnkgeworICBjb25zdHJ1Y3Rvcigp
IHsKKyAgICB0aGlzLmxlbmd0aCA9IDA7CisgICAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJh
eSg4MTkyKTsKKyAgfQorCisgIGVuc3VyZV9zcGFjZShuZWVkZWQpIHsKKyAgICBpZiAodGhpcy5i
dWZmZXIubGVuZ3RoIC0gdGhpcy5sZW5ndGggPj0gbmVlZGVkKSByZXR1cm47CisgICAgbGV0IG5l
d19jYXBhY2l0eSA9IHRoaXMuYnVmZmVyLmxlbmd0aCAqIDI7CisgICAgd2hpbGUgKG5ld19jYXBh
Y2l0eSAtIHRoaXMubGVuZ3RoIDwgbmVlZGVkKSBuZXdfY2FwYWNpdHkgKj0gMjsKKyAgICBsZXQg
bmV3X2J1ZmZlciA9IG5ldyBVaW50OEFycmF5KG5ld19jYXBhY2l0eSk7CisgICAgbmV3X2J1ZmZl
ci5zZXQodGhpcy5idWZmZXIpOworICAgIHRoaXMuYnVmZmVyID0gbmV3X2J1ZmZlcjsKKyAgfQor
CisgIHRydW5jX2J1ZmZlcigpIHsKKyAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZm
ZXIuYnVmZmVyLCAwLCB0aGlzLmxlbmd0aCk7CisgIH0KKworICByZXNldCgpIHsKKyAgICB0aGlz
Lmxlbmd0aCA9IDA7CisgIH0KKworICBlbWl0X3U4KHZhbCkgeworICAgIHRoaXMuZW5zdXJlX3Nw
YWNlKDEpOworICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdmFsOworICB9CisKKyAg
ZW1pdF91MTYodmFsKSB7CisgICAgdGhpcy5lbnN1cmVfc3BhY2UoMik7CisgICAgdGhpcy5idWZm
ZXJbdGhpcy5sZW5ndGgrK10gPSB2YWw7CisgICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10g
PSB2YWwgPj4gODsKKyAgfQorCisgIGVtaXRfdTMyKHZhbCkgeworICAgIHRoaXMuZW5zdXJlX3Nw
YWNlKDQpOworICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdmFsOworICAgIHRoaXMu
YnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdmFsID4+IDg7CisgICAgdGhpcy5idWZmZXJbdGhpcy5s
ZW5ndGgrK10gPSB2YWwgPj4gMTY7CisgICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2
YWwgPj4gMjQ7CisgIH0KKworICBlbWl0X2xlYl91KHZhbCwgbWF4X2xlbikgeworICAgIHRoaXMu
ZW5zdXJlX3NwYWNlKG1heF9sZW4pOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4X2xlbjsg
KytpKSB7CisgICAgICBsZXQgdiA9IHZhbCAmIDB4ZmY7CisgICAgICB2YWwgPSB2YWwgPj4+IDc7
CisgICAgICBpZiAodmFsID09IDApIHsKKyAgICAgICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgr
K10gPSB2OworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICB0aGlzLmJ1ZmZlclt0aGlz
Lmxlbmd0aCsrXSA9IHYgfCAweDgwOworICAgIH0KKyAgICB0aHJvdyBuZXcgRXJyb3IoJ0xlYiB2
YWx1ZSBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICcgKyBtYXhfbGVuKTsKKyAgfQorCisgIGVt
aXRfdTMydih2YWwpIHsKKyAgICB0aGlzLmVtaXRfbGViX3UodmFsLCBrTWF4VmFySW50MzJTaXpl
KTsKKyAgfQorCisgIGVtaXRfdTY0dih2YWwpIHsKKyAgICB0aGlzLmVtaXRfbGViX3UodmFsLCBr
TWF4VmFySW50NjRTaXplKTsKKyAgfQorCisgIGVtaXRfYnl0ZXMoZGF0YSkgeworICAgIHRoaXMu
ZW5zdXJlX3NwYWNlKGRhdGEubGVuZ3RoKTsKKyAgICB0aGlzLmJ1ZmZlci5zZXQoZGF0YSwgdGhp
cy5sZW5ndGgpOworICAgIHRoaXMubGVuZ3RoICs9IGRhdGEubGVuZ3RoOworICB9CisKKyAgZW1p
dF9zdHJpbmcoc3RyaW5nKSB7CisgICAgLy8gV2hlbiB0ZXN0aW5nIGlsbGVnYWwgbmFtZXMsIHdl
IHBhc3MgYSBieXRlIGFycmF5IGRpcmVjdGx5LgorICAgIGlmIChzdHJpbmcgaW5zdGFuY2VvZiBB
cnJheSkgeworICAgICAgdGhpcy5lbWl0X3UzMnYoc3RyaW5nLmxlbmd0aCk7CisgICAgICB0aGlz
LmVtaXRfYnl0ZXMoc3RyaW5nKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGlz
IGlzIHRoZSBoYWNreSB3YXkgdG8gY29udmVydCBhIEphdmFTY3JpcHQgc3RyaW5nIHRvIGEgVVRG
OCBlbmNvZGVkCisgICAgLy8gc3RyaW5nIG9ubHkgY29udGFpbmluZyBzaW5nbGUtYnl0ZSBjaGFy
YWN0ZXJzLgorICAgIGxldCBzdHJpbmdfdXRmOCA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVu
dChzdHJpbmcpKTsKKyAgICB0aGlzLmVtaXRfdTMydihzdHJpbmdfdXRmOC5sZW5ndGgpOworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nX3V0ZjgubGVuZ3RoOyBpKyspIHsKKyAgICAgIHRo
aXMuZW1pdF91OChzdHJpbmdfdXRmOC5jaGFyQ29kZUF0KGkpKTsKKyAgICB9CisgIH0KKworICBl
bWl0X2hlYXBfdHlwZShoZWFwX3R5cGUpIHsKKyAgICB0aGlzLmVtaXRfYnl0ZXMod2FzbVNpZ25l
ZExlYihoZWFwX3R5cGUsIGtNYXhWYXJJbnQzMlNpemUpKTsKKyAgfQorCisgIGVtaXRfdHlwZSh0
eXBlKSB7CisgICAgaWYgKCh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicpIHsKKyAgICAgIHRoaXMu
ZW1pdF91OCh0eXBlID49IDAgPyB0eXBlIDogdHlwZSAmIGtMZWIxMjhNYXNrKTsKKyAgICB9IGVs
c2UgeworICAgICAgdGhpcy5lbWl0X3U4KHR5cGUub3Bjb2RlKTsKKyAgICAgIGlmICgnZGVwdGgn
IGluIHR5cGUpIHRoaXMuZW1pdF91OCh0eXBlLmRlcHRoKTsKKyAgICAgIHRoaXMuZW1pdF9oZWFw
X3R5cGUodHlwZS5oZWFwX3R5cGUpOworICAgIH0KKyAgfQorCisgIGVtaXRfaW5pdF9leHByX3Jl
Y3Vyc2l2ZShleHByKSB7CisgICAgc3dpdGNoIChleHByLmtpbmQpIHsKKyAgICAgIGNhc2Uga0V4
cHJHbG9iYWxHZXQ6CisgICAgICAgIHRoaXMuZW1pdF91OChrRXhwckdsb2JhbEdldCk7CisgICAg
ICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIudmFsdWUpOworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2Uga0V4cHJJMzJDb25zdDoKKyAgICAgICAgdGhpcy5lbWl0X2J5dGVzKHdhc21JMzJDb25zdChl
eHByLnZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwckk2NENvbnN0Ogor
ICAgICAgICB0aGlzLmVtaXRfYnl0ZXMod2FzbUk2NENvbnN0KGV4cHIudmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByRjMyQ29uc3Q6CisgICAgICAgIHRoaXMuZW1pdF9i
eXRlcyh3YXNtRjMyQ29uc3QoZXhwci52YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2Uga0V4cHJGNjRDb25zdDoKKyAgICAgICAgdGhpcy5lbWl0X2J5dGVzKHdhc21GNjRDb25zdChl
eHByLnZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2ltZFByZWZpeDoKKyAg
ICAgICAgdGhpcy5lbWl0X2J5dGVzKHdhc21TMTI4Q29uc3QoZXhwci52YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJSZWZGdW5jOgorICAgICAgICB0aGlzLmVtaXRfdTgo
a0V4cHJSZWZGdW5jKTsKKyAgICAgICAgdGhpcy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwclJlZk51bGw6CisgICAgICAgIHRoaXMuZW1pdF91
OChrRXhwclJlZk51bGwpOworICAgICAgICB0aGlzLmVtaXRfaGVhcF90eXBlKGV4cHIudmFsdWUp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJTdHJ1Y3ROZXc6CisgICAgICBjYXNl
IGtFeHByU3RydWN0TmV3V2l0aFJ0dDoKKyAgICAgIGNhc2Uga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0
OgorICAgICAgY2FzZSBrRXhwclN0cnVjdE5ld0RlZmF1bHRXaXRoUnR0OgorICAgICAgICBmb3Ig
KGxldCBvcGVyYW5kIG9mIGV4cHIub3BlcmFuZHMpIHsKKyAgICAgICAgICB0aGlzLmVtaXRfaW5p
dF9leHByX3JlY3Vyc2l2ZShvcGVyYW5kKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmVtaXRf
dTgoa0dDUHJlZml4KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4KGV4cHIua2luZCk7CisgICAgICAg
IHRoaXMuZW1pdF91MzJ2KGV4cHIudmFsdWUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
a0V4cHJBcnJheUluaXQ6CisgICAgICBjYXNlIGtFeHByQXJyYXlJbml0U3RhdGljOgorICAgICAg
ICBmb3IgKGxldCBvcGVyYW5kIG9mIGV4cHIub3BlcmFuZHMpIHsKKyAgICAgICAgICB0aGlzLmVt
aXRfaW5pdF9leHByX3JlY3Vyc2l2ZShvcGVyYW5kKTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
LmVtaXRfdTgoa0dDUHJlZml4KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4KGV4cHIua2luZCk7Cisg
ICAgICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIudmFsdWUpOworICAgICAgICB0aGlzLmVtaXRfdTMy
dihleHByLm9wZXJhbmRzLmxlbmd0aCAtIDEpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
a0V4cHJSdHRDYW5vbjoKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtHQ1ByZWZpeCk7CisgICAgICAg
IHRoaXMuZW1pdF91OChrRXhwclJ0dENhbm9uKTsKKyAgICAgICAgdGhpcy5lbWl0X3UzMnYoZXhw
ci52YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwclJ0dFN1YjoKKyAgICAg
ICAgdGhpcy5lbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUoZXhwci5wYXJlbnQpOworICAgICAgICB0
aGlzLmVtaXRfdTgoa0djUHJlZml4KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtFeHByUnR0U3Vi
KTsKKyAgICAgICAgdGhpcy5lbWl0X3UzMnYoZXhwci52YWx1ZSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBrRXhwclJ0dEZyZXNoU3ViOgorICAgICAgICB0aGlzLmVtaXRfaW5pdF9leHBy
X3JlY3Vyc2l2ZShleHByLnBhcmVudCk7CisgICAgICAgIHRoaXMuZW1pdF91OChrR2NQcmVmaXgp
OworICAgICAgICB0aGlzLmVtaXRfdTgoa0V4cHJSdHRGcmVzaFN1Yik7CisgICAgICAgIHRoaXMu
ZW1pdF91MzJ2KGV4cHIudmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBl
bWl0X2luaXRfZXhwcihleHByKSB7CisgICAgdGhpcy5lbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUo
ZXhwcik7CisgICAgdGhpcy5lbWl0X3U4KGtFeHByRW5kKTsKKyAgfQorCisgIGVtaXRfaGVhZGVy
KCkgeworICAgIHRoaXMuZW1pdF9ieXRlcyhbCisgICAgICBrV2FzbUgwLCBrV2FzbUgxLCBrV2Fz
bUgyLCBrV2FzbUgzLCBrV2FzbVYwLCBrV2FzbVYxLCBrV2FzbVYyLCBrV2FzbVYzCisgICAgXSk7
CisgIH0KKworICBlbWl0X3NlY3Rpb24oc2VjdGlvbl9jb2RlLCBjb250ZW50X2dlbmVyYXRvcikg
eworICAgIC8vIEVtaXQgc2VjdGlvbiBuYW1lLgorICAgIHRoaXMuZW1pdF91OChzZWN0aW9uX2Nv
ZGUpOworICAgIC8vIEVtaXQgdGhlIHNlY3Rpb24gdG8gYSB0ZW1wb3JhcnkgYnVmZmVyOiBpdHMg
ZnVsbCBsZW5ndGggaXNuJ3Qga25vdyB5ZXQuCisgICAgY29uc3Qgc2VjdGlvbiA9IG5ldyBCaW5h
cnk7CisgICAgY29udGVudF9nZW5lcmF0b3Ioc2VjdGlvbik7CisgICAgLy8gRW1pdCBzZWN0aW9u
IGxlbmd0aC4KKyAgICB0aGlzLmVtaXRfdTMydihzZWN0aW9uLmxlbmd0aCk7CisgICAgLy8gQ29w
eSB0aGUgdGVtcG9yYXJ5IGJ1ZmZlci4KKyAgICAvLyBBdm9pZCBzcHJlYWQgYmVjYXVzZSB7c2Vj
dGlvbn0gY2FuIGJlIGh1Z2UuCisgICAgdGhpcy5lbWl0X2J5dGVzKHNlY3Rpb24udHJ1bmNfYnVm
ZmVyKCkpOworICB9Cit9CisKK2NsYXNzIFdhc21GdW5jdGlvbkJ1aWxkZXIgeworICAvLyBFbmNv
ZGluZyBvZiBsb2NhbCBuYW1lczogYSBzdHJpbmcgY29ycmVzcG9uZHMgdG8gYSBsb2NhbCBuYW1l
LAorICAvLyBhIG51bWJlciBuIGNvcnJlc3BvbmRzIHRvIG4gdW5kZWZpbmVkIG5hbWVzLgorICBj
b25zdHJ1Y3Rvcihtb2R1bGUsIG5hbWUsIHR5cGVfaW5kZXgsIGFyZ19uYW1lcykgeworICAgIHRo
aXMubW9kdWxlID0gbW9kdWxlOworICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgdGhpcy50eXBl
X2luZGV4ID0gdHlwZV9pbmRleDsKKyAgICB0aGlzLmJvZHkgPSBbXTsKKyAgICB0aGlzLmxvY2Fs
cyA9IFtdOworICAgIHRoaXMubG9jYWxfbmFtZXMgPSBhcmdfbmFtZXM7CisgICAgdGhpcy5ib2R5
X29mZnNldCA9IHVuZGVmaW5lZDsgIC8vIE5vdCB2YWxpZCB1bnRpbCBtb2R1bGUgaXMgc2VyaWFs
aXplZC4KKyAgfQorCisgIG51bUxvY2FsTmFtZXMoKSB7CisgICAgbGV0IG51bV9sb2NhbF9uYW1l
cyA9IDA7CisgICAgZm9yIChsZXQgbG9jX25hbWUgb2YgdGhpcy5sb2NhbF9uYW1lcykgeworICAg
ICAgaWYgKHR5cGVvZiBsb2NfbmFtZSA9PSAnc3RyaW5nJykgKytudW1fbG9jYWxfbmFtZXM7Cisg
ICAgfQorICAgIHJldHVybiBudW1fbG9jYWxfbmFtZXM7CisgIH0KKworICBleHBvcnRBcyhuYW1l
KSB7CisgICAgdGhpcy5tb2R1bGUuYWRkRXhwb3J0KG5hbWUsIHRoaXMuaW5kZXgpOworICAgIHJl
dHVybiB0aGlzOworICB9CisKKyAgZXhwb3J0RnVuYygpIHsKKyAgICB0aGlzLmV4cG9ydEFzKHRo
aXMubmFtZSk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBzZXRDb21waWxhdGlvbkhpbnQo
c3RyYXRlZ3ksIGJhc2VsaW5lVGllciwgdG9wVGllcikgeworICAgIHRoaXMubW9kdWxlLnNldENv
bXBpbGF0aW9uSGludChzdHJhdGVneSwgYmFzZWxpbmVUaWVyLCB0b3BUaWVyLCB0aGlzLmluZGV4
KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZEJvZHkoYm9keSkgeworICAgIGZvciAo
bGV0IGIgb2YgYm9keSkgeworICAgICAgaWYgKHR5cGVvZiBiICE9PSAnbnVtYmVyJyB8fCAoYiAm
ICh+MHhGRikpICE9PSAwKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAg
ICdpbnZhbGlkIGJvZHkgKGVudHJpZXMgbXVzdCBiZSA4IGJpdCBudW1iZXJzKTogJyArIGJvZHkp
OworICAgICAgfQorICAgIH0KKyAgICB0aGlzLmJvZHkgPSBib2R5LnNsaWNlKCk7CisgICAgLy8g
QXV0b21hdGljYWxseSBhZGQgdGhlIGVuZCBmb3IgdGhlIGZ1bmN0aW9uIGJsb2NrIHRvIHRoZSBi
b2R5LgorICAgIHRoaXMuYm9keS5wdXNoKGtFeHByRW5kKTsKKyAgICByZXR1cm4gdGhpczsKKyAg
fQorCisgIGFkZEJvZHlXaXRoRW5kKGJvZHkpIHsKKyAgICB0aGlzLmJvZHkgPSBib2R5OworICAg
IHJldHVybiB0aGlzOworICB9CisKKyAgZ2V0TnVtTG9jYWxzKCkgeworICAgIGxldCB0b3RhbF9s
b2NhbHMgPSAwOworICAgIGZvciAobGV0IGwgb2YgdGhpcy5sb2NhbHMpIHsKKyAgICAgIHRvdGFs
X2xvY2FscyArPSBsLmNvdW50CisgICAgfQorICAgIHJldHVybiB0b3RhbF9sb2NhbHM7CisgIH0K
KworICBhZGRMb2NhbHModHlwZSwgY291bnQsIG5hbWVzKSB7CisgICAgdGhpcy5sb2NhbHMucHVz
aCh7dHlwZTogdHlwZSwgY291bnQ6IGNvdW50fSk7CisgICAgbmFtZXMgPSBuYW1lcyB8fCBbXTsK
KyAgICBpZiAobmFtZXMubGVuZ3RoID4gY291bnQpIHRocm93IG5ldyBFcnJvcigndG9vIG1hbnkg
bG9jYWxzIG5hbWVzIGdpdmVuJyk7CisgICAgdGhpcy5sb2NhbF9uYW1lcy5wdXNoKC4uLm5hbWVz
KTsKKyAgICBpZiAoY291bnQgPiBuYW1lcy5sZW5ndGgpIHRoaXMubG9jYWxfbmFtZXMucHVzaChj
b3VudCAtIG5hbWVzLmxlbmd0aCk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBlbmQoKSB7
CisgICAgcmV0dXJuIHRoaXMubW9kdWxlOworICB9Cit9CisKK2NsYXNzIFdhc21Jbml0RXhwciB7
CisgIHN0YXRpYyBJMzJDb25zdCh2YWx1ZSkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJJMzJD
b25zdCwgdmFsdWU6IHZhbHVlfTsKKyAgfQorICBzdGF0aWMgSTY0Q29uc3QodmFsdWUpIHsKKyAg
ICByZXR1cm4ge2tpbmQ6IGtFeHBySTY0Q29uc3QsIHZhbHVlOiB2YWx1ZX07CisgIH0KKyAgc3Rh
dGljIEYzMkNvbnN0KHZhbHVlKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckYzMkNvbnN0LCB2
YWx1ZTogdmFsdWV9OworICB9CisgIHN0YXRpYyBGNjRDb25zdCh2YWx1ZSkgeworICAgIHJldHVy
biB7a2luZDoga0V4cHJGNjRDb25zdCwgdmFsdWU6IHZhbHVlfTsKKyAgfQorICBzdGF0aWMgUzEy
OENvbnN0KHZhbHVlKSB7CisgICAgcmV0dXJuIHtraW5kOiBrU2ltZFByZWZpeCwgdmFsdWU6IHZh
bHVlfTsKKyAgfQorICBzdGF0aWMgR2xvYmFsR2V0KGluZGV4KSB7CisgICAgcmV0dXJuIHtraW5k
OiBrRXhwckdsb2JhbEdldCwgdmFsdWU6IGluZGV4fTsKKyAgfQorICBzdGF0aWMgUmVmRnVuYyhp
bmRleCkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJSZWZGdW5jLCB2YWx1ZTogaW5kZXh9Owor
ICB9CisgIHN0YXRpYyBSZWZOdWxsKHR5cGUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByUmVm
TnVsbCwgdmFsdWU6IHR5cGV9OworICB9CisgIHN0YXRpYyBTdHJ1Y3ROZXdXaXRoUnR0KHR5cGUs
IGFyZ3MpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByU3RydWN0TmV3V2l0aFJ0dCwgdmFsdWU6
IHR5cGUsIG9wZXJhbmRzOiBhcmdzfTsKKyAgfQorICBzdGF0aWMgU3RydWN0TmV3KHR5cGUsIGFy
Z3MpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByU3RydWN0TmV3LCB2YWx1ZTogdHlwZSwgb3Bl
cmFuZHM6IGFyZ3N9OworICB9CisgIHN0YXRpYyBTdHJ1Y3ROZXdEZWZhdWx0V2l0aFJ0dCh0eXBl
LCBydHQpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByU3RydWN0TmV3RGVmYXVsdFdpdGhSdHQs
IHZhbHVlOiB0eXBlLCBvcGVyYW5kczogW3J0dF19OworICB9CisgIHN0YXRpYyBTdHJ1Y3ROZXdE
ZWZhdWx0KHR5cGUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByU3RydWN0TmV3RGVmYXVsdCwg
dmFsdWU6IHR5cGUsIG9wZXJhbmRzOiBbXX07CisgIH0KKyAgc3RhdGljIEFycmF5SW5pdCh0eXBl
LCBhcmdzKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckFycmF5SW5pdCwgdmFsdWU6IHR5cGUs
IG9wZXJhbmRzOiBhcmdzfTsKKyAgfQorICBzdGF0aWMgQXJyYXlJbml0U3RhdGljKHR5cGUsIGFy
Z3MpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByQXJyYXlJbml0U3RhdGljLCB2YWx1ZTogdHlw
ZSwgb3BlcmFuZHM6IGFyZ3N9OworICB9CisgIHN0YXRpYyBSdHRDYW5vbih0eXBlKSB7CisgICAg
cmV0dXJuIHtraW5kOiBrRXhwclJ0dENhbm9uLCB2YWx1ZTogdHlwZX07CisgIH0KKyAgc3RhdGlj
IFJ0dFN1Yih0eXBlLCBwYXJlbnQpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByUnR0U3ViLCB2
YWx1ZTogdHlwZSwgcGFyZW50OiBwYXJlbnR9OworICB9CisgIHN0YXRpYyBSdHRGcmVzaFN1Yih0
eXBlLCBwYXJlbnQpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByUnR0RnJlc2hTdWIsIHZhbHVl
OiB0eXBlLCBwYXJlbnQ6IHBhcmVudH07CisgIH0KKworICBzdGF0aWMgZGVmYXVsdEZvcih0eXBl
KSB7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICBjYXNlIGtXYXNtSTMyOgorICAgICAgICBy
ZXR1cm4gdGhpcy5JMzJDb25zdCgwKTsKKyAgICAgIGNhc2Uga1dhc21JNjQ6CisgICAgICAgIHJl
dHVybiB0aGlzLkk2NENvbnN0KDApOworICAgICAgY2FzZSBrV2FzbUYzMjoKKyAgICAgICAgcmV0
dXJuIHRoaXMuRjMyQ29uc3QoMCk7CisgICAgICBjYXNlIGtXYXNtRjY0OgorICAgICAgICByZXR1
cm4gdGhpcy5GNjRDb25zdCgwKTsKKyAgICAgIGNhc2Uga1dhc21TMTI4OgorICAgICAgICByZXR1
cm4gdGhpcy5TMTI4Q29uc3QobmV3IEFycmF5KDE2KS5maWxsKDApKTsKKyAgICAgIGRlZmF1bHQ6
CisgICAgICAgIGlmICgodHlwZW9mIHR5cGUpICE9ICdudW1iZXInICYmIHR5cGUub3Bjb2RlICE9
IGtXYXNtT3B0UmVmKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb24tZGVmYXVsdGFi
bGUgdHlwZSIpOworICAgICAgICB9CisgICAgICAgIGxldCBoZWFwX3R5cGUgPSAodHlwZW9mIHR5
cGUpID09ICdudW1iZXInID8gdHlwZSA6IHR5cGUuaGVhcF90eXBlOworICAgICAgICByZXR1cm4g
dGhpcy5SZWZOdWxsKGhlYXBfdHlwZSk7CisgICAgfQorICB9Cit9CisKK2NsYXNzIFdhc21HbG9i
YWxCdWlsZGVyIHsKKyAgLy8ge2luaXR9IHNob3VsZCBiZSBjb25zdHJ1Y3RlZCB3aXRoIFdhc21J
bml0RXhwci4KKyAgY29uc3RydWN0b3IobW9kdWxlLCB0eXBlLCBtdXRhYmxlLCBpbml0KSB7Cisg
ICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7CisgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICB0aGlz
Lm11dGFibGUgPSBtdXRhYmxlOworICAgIHRoaXMuaW5pdCA9IGluaXQ7CisgIH0KKworICBleHBv
cnRBcyhuYW1lKSB7CisgICAgdGhpcy5tb2R1bGUuZXhwb3J0cy5wdXNoKAorICAgICAgICB7bmFt
ZTogbmFtZSwga2luZDoga0V4dGVybmFsR2xvYmFsLCBpbmRleDogdGhpcy5pbmRleH0pOworICAg
IHJldHVybiB0aGlzOworICB9Cit9CisKK2NsYXNzIFdhc21UYWJsZUJ1aWxkZXIgeworICBjb25z
dHJ1Y3Rvcihtb2R1bGUsIHR5cGUsIGluaXRpYWxfc2l6ZSwgbWF4X3NpemUsIGluaXRfZXhwcikg
eworICAgIHRoaXMubW9kdWxlID0gbW9kdWxlOworICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAg
dGhpcy5pbml0aWFsX3NpemUgPSBpbml0aWFsX3NpemU7CisgICAgdGhpcy5oYXNfbWF4ID0gbWF4
X3NpemUgIT09IHVuZGVmaW5lZDsKKyAgICB0aGlzLm1heF9zaXplID0gbWF4X3NpemU7CisgICAg
dGhpcy5pbml0X2V4cHIgPSBpbml0X2V4cHI7CisgICAgdGhpcy5oYXNfaW5pdCA9IGluaXRfZXhw
ciAhPT0gdW5kZWZpbmVkOworICB9CisKKyAgZXhwb3J0QXMobmFtZSkgeworICAgIHRoaXMubW9k
dWxlLmV4cG9ydHMucHVzaCgKKyAgICAgICAge25hbWU6IG5hbWUsIGtpbmQ6IGtFeHRlcm5hbFRh
YmxlLCBpbmRleDogdGhpcy5pbmRleH0pOworICAgIHJldHVybiB0aGlzOworICB9Cit9CisKK2Z1
bmN0aW9uIG1ha2VGaWVsZCh0eXBlLCBtdXRhYmlsaXR5KSB7CisgIGlmICgodHlwZW9mIG11dGFi
aWxpdHkpICE9ICdib29sZWFuJykgeworICAgIHRocm93IG5ldyBFcnJvcignZmllbGQgbXV0YWJp
bGl0eSBtdXN0IGJlIGJvb2xlYW4nKTsKKyAgfQorICByZXR1cm4ge3R5cGU6IHR5cGUsIG11dGFi
aWxpdHk6IG11dGFiaWxpdHl9OworfQorCitjbGFzcyBXYXNtU3RydWN0IHsKKyAgY29uc3RydWN0
b3IoZmllbGRzKSB7CisgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpZWxkcykpIHsKKyAgICAgIHRo
cm93IG5ldyBFcnJvcignc3RydWN0IGZpZWxkcyBtdXN0IGJlIGFuIGFycmF5Jyk7CisgICAgfQor
ICAgIHRoaXMuZmllbGRzID0gZmllbGRzOworICAgIHRoaXMudHlwZV9mb3JtID0ga1dhc21TdHJ1
Y3RUeXBlRm9ybTsKKyAgfQorfQorCitjbGFzcyBXYXNtU3RydWN0U3VidHlwZSBleHRlbmRzIFdh
c21TdHJ1Y3QgeworICBjb25zdHJ1Y3RvcihmaWVsZHMsIHN1cGVydHlwZV9pZHgpIHsKKyAgICBz
dXBlcihmaWVsZHMpOworICAgIHRoaXMuc3VwZXJ0eXBlID0gc3VwZXJ0eXBlX2lkeDsKKyAgICB0
aGlzLnR5cGVfZm9ybSA9IGtXYXNtU3RydWN0U3VidHlwZUZvcm07CisgIH0KK30KKworY2xhc3Mg
V2FzbUFycmF5IHsKKyAgY29uc3RydWN0b3IodHlwZSwgbXV0YWJpbGl0eSkgeworICAgIHRoaXMu
dHlwZSA9IHR5cGU7CisgICAgaWYgKCFtdXRhYmlsaXR5KSB0aHJvdyBuZXcgRXJyb3IoIkltbXV0
YWJsZSBhcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0Iik7CisgICAgdGhpcy5tdXRhYmlsaXR5
ID0gbXV0YWJpbGl0eTsKKyAgICB0aGlzLnR5cGVfZm9ybSA9IGtXYXNtQXJyYXlUeXBlRm9ybTsK
KyAgfQorfQorCitjbGFzcyBXYXNtQXJyYXlTdWJ0eXBlIGV4dGVuZHMgV2FzbUFycmF5IHsKKyAg
Y29uc3RydWN0b3IodHlwZSwgbXV0YWJpbGl0eSwgc3VwZXJ0eXBlX2lkeCkgeworICAgIHN1cGVy
KHR5cGUsIG11dGFiaWxpdHkpOworICAgIHRoaXMuc3VwZXJ0eXBlID0gc3VwZXJ0eXBlX2lkeDsK
KyAgICB0aGlzLnR5cGVfZm9ybSA9IGtXYXNtQXJyYXlTdWJ0eXBlRm9ybTsKKyAgfQorfQorY2xh
c3MgV2FzbUVsZW1TZWdtZW50IHsKKyAgY29uc3RydWN0b3IodGFibGUsIG9mZnNldCwgdHlwZSwg
ZWxlbWVudHMsIGlzX2RlY2wpIHsKKyAgICB0aGlzLnRhYmxlID0gdGFibGU7CisgICAgdGhpcy5v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICB0aGlzLmVsZW1lbnRz
ID0gZWxlbWVudHM7CisgICAgdGhpcy5pc19kZWNsID0gaXNfZGVjbDsKKyAgICAvLyBJbnZhcmlh
bnQgY2hlY2tzLgorICAgIGlmICgodGFibGUgPT09IHVuZGVmaW5lZCkgIT0gKG9mZnNldCA9PT0g
dW5kZWZpbmVkKSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGVsZW1lbnQgc2Vn
bWVudCIpOworICAgIH0KKyAgICBmb3IgKGxldCBlbGVtIG9mIGVsZW1lbnRzKSB7CisgICAgICBp
ZiAoKCh0eXBlb2YgZWxlbSkgPT0gJ251bWJlcicpICE9ICh0eXBlID09PSB1bmRlZmluZWQpKSB7
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiaW52YWxpZCBlbGVtZW50Iik7CisgICAgICB9Cisg
ICAgfQorICB9CisKKyAgaXNfYWN0aXZlKCkgeworICAgIHJldHVybiB0aGlzLnRhYmxlICE9PSB1
bmRlZmluZWQ7CisgIH0KKworICBpc19wYXNzaXZlKCkgeworICAgIHJldHVybiB0aGlzLnRhYmxl
ID09PSB1bmRlZmluZWQgJiYgIXRoaXMuaXNfZGVjbDsKKyAgfQorCisgIGlzX2RlY2xhcmF0aXZl
KCkgeworICAgIHJldHVybiB0aGlzLnRhYmxlID09PSB1bmRlZmluZWQgJiYgdGhpcy5pc19kZWNs
OworICB9CisKKyAgZXhwcmVzc2lvbnNfYXNfZWxlbWVudHMoKSB7CisgICAgcmV0dXJuIHRoaXMu
dHlwZSAhPT0gdW5kZWZpbmVkOworICB9Cit9CisKK2NsYXNzIFdhc21Nb2R1bGVCdWlsZGVyIHsK
KyAgY29uc3RydWN0b3IoKSB7CisgICAgdGhpcy50eXBlcyA9IFtdOworICAgIHRoaXMuaW1wb3J0
cyA9IFtdOworICAgIHRoaXMuZXhwb3J0cyA9IFtdOworICAgIHRoaXMuZ2xvYmFscyA9IFtdOwor
ICAgIHRoaXMudGFibGVzID0gW107CisgICAgdGhpcy50YWdzID0gW107CisgICAgdGhpcy5mdW5j
dGlvbnMgPSBbXTsKKyAgICB0aGlzLmNvbXBpbGF0aW9uX2hpbnRzID0gW107CisgICAgdGhpcy5l
bGVtZW50X3NlZ21lbnRzID0gW107CisgICAgdGhpcy5kYXRhX3NlZ21lbnRzID0gW107CisgICAg
dGhpcy5leHBsaWNpdCA9IFtdOworICAgIHRoaXMubnVtX2ltcG9ydGVkX2Z1bmNzID0gMDsKKyAg
ICB0aGlzLm51bV9pbXBvcnRlZF9nbG9iYWxzID0gMDsKKyAgICB0aGlzLm51bV9pbXBvcnRlZF90
YWJsZXMgPSAwOworICAgIHRoaXMubnVtX2ltcG9ydGVkX3RhZ3MgPSAwOworICAgIHJldHVybiB0
aGlzOworICB9CisKKyAgYWRkU3RhcnQoc3RhcnRfaW5kZXgpIHsKKyAgICB0aGlzLnN0YXJ0X2lu
ZGV4ID0gc3RhcnRfaW5kZXg7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBhZGRNZW1vcnko
bWluLCBtYXgsIGV4cG9ydGVkLCBzaGFyZWQpIHsKKyAgICB0aGlzLm1lbW9yeSA9IHsKKyAgICAg
IG1pbjogbWluLAorICAgICAgbWF4OiBtYXgsCisgICAgICBleHBvcnRlZDogZXhwb3J0ZWQsCisg
ICAgICBzaGFyZWQ6IHNoYXJlZCB8fCBmYWxzZSwKKyAgICAgIGlzX21lbW9yeTY0OiBmYWxzZQor
ICAgIH07CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBhZGRNZW1vcnk2NChtaW4sIG1heCwg
ZXhwb3J0ZWQpIHsKKyAgICB0aGlzLm1lbW9yeSA9IHsKKyAgICAgIG1pbjogbWluLAorICAgICAg
bWF4OiBtYXgsCisgICAgICBleHBvcnRlZDogZXhwb3J0ZWQsCisgICAgICBzaGFyZWQ6IGZhbHNl
LAorICAgICAgaXNfbWVtb3J5NjQ6IHRydWUKKyAgICB9OworICAgIHJldHVybiB0aGlzOworICB9
CisKKyAgYWRkRXhwbGljaXRTZWN0aW9uKGJ5dGVzKSB7CisgICAgdGhpcy5leHBsaWNpdC5wdXNo
KGJ5dGVzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHN0cmluZ1RvQnl0ZXMobmFtZSkg
eworICAgIHZhciByZXN1bHQgPSBuZXcgQmluYXJ5KCk7CisgICAgcmVzdWx0LmVtaXRfdTMydihu
YW1lLmxlbmd0aCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKSB7
CisgICAgICByZXN1bHQuZW1pdF91OChuYW1lLmNoYXJDb2RlQXQoaSkpOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0LnRydW5jX2J1ZmZlcigpCisgIH0KKworICBjcmVhdGVDdXN0b21TZWN0aW9u
KG5hbWUsIGJ5dGVzKSB7CisgICAgbmFtZSA9IHRoaXMuc3RyaW5nVG9CeXRlcyhuYW1lKTsKKyAg
ICB2YXIgc2VjdGlvbiA9IG5ldyBCaW5hcnkoKTsKKyAgICBzZWN0aW9uLmVtaXRfdTgoMCk7Cisg
ICAgc2VjdGlvbi5lbWl0X3UzMnYobmFtZS5sZW5ndGggKyBieXRlcy5sZW5ndGgpOworICAgIHNl
Y3Rpb24uZW1pdF9ieXRlcyhuYW1lKTsKKyAgICBzZWN0aW9uLmVtaXRfYnl0ZXMoYnl0ZXMpOwor
ICAgIHJldHVybiBzZWN0aW9uLnRydW5jX2J1ZmZlcigpOworICB9CisKKyAgYWRkQ3VzdG9tU2Vj
dGlvbihuYW1lLCBieXRlcykgeworICAgIHRoaXMuZXhwbGljaXQucHVzaCh0aGlzLmNyZWF0ZUN1
c3RvbVNlY3Rpb24obmFtZSwgYnl0ZXMpKTsKKyAgfQorCisgIGFkZFR5cGUodHlwZSkgeworICAg
IHRoaXMudHlwZXMucHVzaCh0eXBlKTsKKyAgICB2YXIgcGwgPSB0eXBlLnBhcmFtcy5sZW5ndGg7
ICAgLy8gc2hvdWxkIGhhdmUgcGFyYW1zCisgICAgdmFyIHJsID0gdHlwZS5yZXN1bHRzLmxlbmd0
aDsgIC8vIHNob3VsZCBoYXZlIHJlc3VsdHMKKyAgICByZXR1cm4gdGhpcy50eXBlcy5sZW5ndGgg
LSAxOworICB9CisKKyAgYWRkU3RydWN0KGZpZWxkcykgeworICAgIHRoaXMudHlwZXMucHVzaChu
ZXcgV2FzbVN0cnVjdChmaWVsZHMpKTsKKyAgICByZXR1cm4gdGhpcy50eXBlcy5sZW5ndGggLSAx
OworICB9CisKKyAga0dlbmVyaWNTdXBlclR5cGUgPSAweEZGRkZGRkZFOworICBhZGRTdHJ1Y3RT
dWJ0eXBlKGZpZWxkcywgc3VwZXJ0eXBlX2lkeCA9IHRoaXMua0dlbmVyaWNTdXBlclR5cGUpIHsK
KyAgICB0aGlzLnR5cGVzLnB1c2gobmV3IFdhc21TdHJ1Y3RTdWJ0eXBlKGZpZWxkcywgc3VwZXJ0
eXBlX2lkeCkpOworICAgIHJldHVybiB0aGlzLnR5cGVzLmxlbmd0aCAtIDE7CisgIH0KKworICBh
ZGRBcnJheSh0eXBlLCBtdXRhYmlsaXR5KSB7CisgICAgdGhpcy50eXBlcy5wdXNoKG5ldyBXYXNt
QXJyYXkodHlwZSwgbXV0YWJpbGl0eSkpOworICAgIHJldHVybiB0aGlzLnR5cGVzLmxlbmd0aCAt
IDE7CisgIH0KKworICBhZGRBcnJheVN1YnR5cGUodHlwZSwgbXV0YWJpbGl0eSwgc3VwZXJ0eXBl
X2lkeCA9IHRoaXMua0dlbmVyaWNTdXBlclR5cGUpIHsKKyAgICB0aGlzLnR5cGVzLnB1c2gobmV3
IFdhc21BcnJheVN1YnR5cGUodHlwZSwgbXV0YWJpbGl0eSwgc3VwZXJ0eXBlX2lkeCkpOworICAg
IHJldHVybiB0aGlzLnR5cGVzLmxlbmd0aCAtIDE7CisgIH0KKworICBhZGRHbG9iYWwodHlwZSwg
bXV0YWJsZSwgaW5pdCkgeworICAgIGlmIChpbml0ID09PSB1bmRlZmluZWQpIGluaXQgPSBXYXNt
SW5pdEV4cHIuZGVmYXVsdEZvcih0eXBlKTsKKyAgICBsZXQgZ2xvYiA9IG5ldyBXYXNtR2xvYmFs
QnVpbGRlcih0aGlzLCB0eXBlLCBtdXRhYmxlLCBpbml0KTsKKyAgICBnbG9iLmluZGV4ID0gdGhp
cy5nbG9iYWxzLmxlbmd0aCArIHRoaXMubnVtX2ltcG9ydGVkX2dsb2JhbHM7CisgICAgdGhpcy5n
bG9iYWxzLnB1c2goZ2xvYik7CisgICAgcmV0dXJuIGdsb2I7CisgIH0KKworICBhZGRUYWJsZSgK
KyAgICAgIHR5cGUsIGluaXRpYWxfc2l6ZSwgbWF4X3NpemUgPSB1bmRlZmluZWQsIGluaXRfZXhw
ciA9IHVuZGVmaW5lZCkgeworICAgIGlmICh0eXBlID09IGtXYXNtSTMyIHx8IHR5cGUgPT0ga1dh
c21JNjQgfHwgdHlwZSA9PSBrV2FzbUYzMiB8fAorICAgICAgICB0eXBlID09IGtXYXNtRjY0IHx8
IHR5cGUgPT0ga1dhc21TMTI4IHx8IHR5cGUgPT0ga1dhc21Wb2lkKSB7CisgICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ1RhYmxlcyBtdXN0IGJlIG9mIGEgcmVmZXJlbmNlIHR5cGUnKTsKKyAgICB9Cisg
ICAgbGV0IHRhYmxlID0gbmV3IFdhc21UYWJsZUJ1aWxkZXIoCisgICAgICAgIHRoaXMsIHR5cGUs
IGluaXRpYWxfc2l6ZSwgbWF4X3NpemUsIGluaXRfZXhwcik7CisgICAgdGFibGUuaW5kZXggPSB0
aGlzLnRhYmxlcy5sZW5ndGggKyB0aGlzLm51bV9pbXBvcnRlZF90YWJsZXM7CisgICAgdGhpcy50
YWJsZXMucHVzaCh0YWJsZSk7CisgICAgcmV0dXJuIHRhYmxlOworICB9CisKKyAgYWRkVGFnKHR5
cGUpIHsKKyAgICBsZXQgdHlwZV9pbmRleCA9ICh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicgPyB0
eXBlIDogdGhpcy5hZGRUeXBlKHR5cGUpOworICAgIGxldCB0YWdfaW5kZXggPSB0aGlzLnRhZ3Mu
bGVuZ3RoICsgdGhpcy5udW1faW1wb3J0ZWRfdGFnczsKKyAgICB0aGlzLnRhZ3MucHVzaCh0eXBl
X2luZGV4KTsKKyAgICByZXR1cm4gdGFnX2luZGV4OworICB9CisKKyAgYWRkRnVuY3Rpb24obmFt
ZSwgdHlwZSwgYXJnX25hbWVzKSB7CisgICAgYXJnX25hbWVzID0gYXJnX25hbWVzIHx8IFtdOwor
ICAgIGxldCB0eXBlX2luZGV4ID0gKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVyJyA/IHR5cGUgOiB0
aGlzLmFkZFR5cGUodHlwZSk7CisgICAgbGV0IG51bV9hcmdzID0gdGhpcy50eXBlc1t0eXBlX2lu
ZGV4XS5wYXJhbXMubGVuZ3RoOworICAgIGlmIChudW1fYXJncyA8IGFyZ19uYW1lcy5sZW5ndGgp
CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvbyBtYW55IGFyZyBuYW1lcyBwcm92aWRlZCcpOwor
ICAgIGlmIChudW1fYXJncyA+IGFyZ19uYW1lcy5sZW5ndGgpCisgICAgICBhcmdfbmFtZXMucHVz
aChudW1fYXJncyAtIGFyZ19uYW1lcy5sZW5ndGgpOworICAgIGxldCBmdW5jID0gbmV3IFdhc21G
dW5jdGlvbkJ1aWxkZXIodGhpcywgbmFtZSwgdHlwZV9pbmRleCwgYXJnX25hbWVzKTsKKyAgICBm
dW5jLmluZGV4ID0gdGhpcy5mdW5jdGlvbnMubGVuZ3RoICsgdGhpcy5udW1faW1wb3J0ZWRfZnVu
Y3M7CisgICAgdGhpcy5mdW5jdGlvbnMucHVzaChmdW5jKTsKKyAgICByZXR1cm4gZnVuYzsKKyAg
fQorCisgIGFkZEltcG9ydChtb2R1bGUsIG5hbWUsIHR5cGUpIHsKKyAgICBpZiAodGhpcy5mdW5j
dGlvbnMubGVuZ3RoICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignSW1wb3J0ZWQgZnVu
Y3Rpb25zIG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGxvY2FsIG9uZXMnKTsKKyAgICB9CisgICAg
bGV0IHR5cGVfaW5kZXggPSAodHlwZW9mIHR5cGUpID09ICdudW1iZXInID8gdHlwZSA6IHRoaXMu
YWRkVHlwZSh0eXBlKTsKKyAgICB0aGlzLmltcG9ydHMucHVzaCh7CisgICAgICBtb2R1bGU6IG1v
ZHVsZSwKKyAgICAgIG5hbWU6IG5hbWUsCisgICAgICBraW5kOiBrRXh0ZXJuYWxGdW5jdGlvbiwK
KyAgICAgIHR5cGVfaW5kZXg6IHR5cGVfaW5kZXgKKyAgICB9KTsKKyAgICByZXR1cm4gdGhpcy5u
dW1faW1wb3J0ZWRfZnVuY3MrKzsKKyAgfQorCisgIGFkZEltcG9ydGVkR2xvYmFsKG1vZHVsZSwg
bmFtZSwgdHlwZSwgbXV0YWJsZSA9IGZhbHNlKSB7CisgICAgaWYgKHRoaXMuZ2xvYmFscy5sZW5n
dGggIT0gMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXBvcnRlZCBnbG9iYWxzIG11c3Qg
YmUgZGVjbGFyZWQgYmVmb3JlIGxvY2FsIG9uZXMnKTsKKyAgICB9CisgICAgbGV0IG8gPSB7Cisg
ICAgICBtb2R1bGU6IG1vZHVsZSwKKyAgICAgIG5hbWU6IG5hbWUsCisgICAgICBraW5kOiBrRXh0
ZXJuYWxHbG9iYWwsCisgICAgICB0eXBlOiB0eXBlLAorICAgICAgbXV0YWJsZTogbXV0YWJsZQor
ICAgIH07CisgICAgdGhpcy5pbXBvcnRzLnB1c2gobyk7CisgICAgcmV0dXJuIHRoaXMubnVtX2lt
cG9ydGVkX2dsb2JhbHMrKzsKKyAgfQorCisgIGFkZEltcG9ydGVkTWVtb3J5KG1vZHVsZSwgbmFt
ZSwgaW5pdGlhbCA9IDAsIG1heGltdW0sIHNoYXJlZCkgeworICAgIGxldCBvID0geworICAgICAg
bW9kdWxlOiBtb2R1bGUsCisgICAgICBuYW1lOiBuYW1lLAorICAgICAga2luZDoga0V4dGVybmFs
TWVtb3J5LAorICAgICAgaW5pdGlhbDogaW5pdGlhbCwKKyAgICAgIG1heGltdW06IG1heGltdW0s
CisgICAgICBzaGFyZWQ6IHNoYXJlZAorICAgIH07CisgICAgdGhpcy5pbXBvcnRzLnB1c2gobyk7
CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBhZGRJbXBvcnRlZFRhYmxlKG1vZHVsZSwgbmFt
ZSwgaW5pdGlhbCwgbWF4aW11bSwgdHlwZSkgeworICAgIGlmICh0aGlzLnRhYmxlcy5sZW5ndGgg
IT0gMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXBvcnRlZCB0YWJsZXMgbXVzdCBiZSBk
ZWNsYXJlZCBiZWZvcmUgbG9jYWwgb25lcycpOworICAgIH0KKyAgICBsZXQgbyA9IHsKKyAgICAg
IG1vZHVsZTogbW9kdWxlLAorICAgICAgbmFtZTogbmFtZSwKKyAgICAgIGtpbmQ6IGtFeHRlcm5h
bFRhYmxlLAorICAgICAgaW5pdGlhbDogaW5pdGlhbCwKKyAgICAgIG1heGltdW06IG1heGltdW0s
CisgICAgICB0eXBlOiB0eXBlIHx8IGtXYXNtRnVuY1JlZgorICAgIH07CisgICAgdGhpcy5pbXBv
cnRzLnB1c2gobyk7CisgICAgcmV0dXJuIHRoaXMubnVtX2ltcG9ydGVkX3RhYmxlcysrOworICB9
CisKKyAgYWRkSW1wb3J0ZWRUYWcobW9kdWxlLCBuYW1lLCB0eXBlKSB7CisgICAgaWYgKHRoaXMu
dGFncy5sZW5ndGggIT0gMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXBvcnRlZCB0YWdz
IG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGxvY2FsIG9uZXMnKTsKKyAgICB9CisgICAgbGV0IHR5
cGVfaW5kZXggPSAodHlwZW9mIHR5cGUpID09ICdudW1iZXInID8gdHlwZSA6IHRoaXMuYWRkVHlw
ZSh0eXBlKTsKKyAgICBsZXQgbyA9IHsKKyAgICAgIG1vZHVsZTogbW9kdWxlLAorICAgICAgbmFt
ZTogbmFtZSwKKyAgICAgIGtpbmQ6IGtFeHRlcm5hbFRhZywKKyAgICAgIHR5cGVfaW5kZXg6IHR5
cGVfaW5kZXgKKyAgICB9OworICAgIHRoaXMuaW1wb3J0cy5wdXNoKG8pOworICAgIHJldHVybiB0
aGlzLm51bV9pbXBvcnRlZF90YWdzKys7CisgIH0KKworICBhZGRFeHBvcnQobmFtZSwgaW5kZXgp
IHsKKyAgICB0aGlzLmV4cG9ydHMucHVzaCh7bmFtZTogbmFtZSwga2luZDoga0V4dGVybmFsRnVu
Y3Rpb24sIGluZGV4OiBpbmRleH0pOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRkRXhw
b3J0T2ZLaW5kKG5hbWUsIGtpbmQsIGluZGV4KSB7CisgICAgaWYgKGluZGV4ID09PSB1bmRlZmlu
ZWQgJiYga2luZCAhPSBrRXh0ZXJuYWxUYWJsZSAmJgorICAgICAgICBraW5kICE9IGtFeHRlcm5h
bE1lbW9yeSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgICAgICdJbmRleCBmb3Ig
ZXhwb3J0cyBvdGhlciB0aGFuIHRhYmxlcy9tZW1vcmllcyBtdXN0IGJlIHByb3ZpZGVkJyk7Cisg
ICAgfQorICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2YgaW5kZXgpICE9ICdu
dW1iZXInKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luZGV4IGZvciBleHBvcnRzIG11c3Qg
YmUgYSBudW1iZXInKQorICAgIH0KKyAgICB0aGlzLmV4cG9ydHMucHVzaCh7bmFtZTogbmFtZSwg
a2luZDoga2luZCwgaW5kZXg6IGluZGV4fSk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBz
ZXRDb21waWxhdGlvbkhpbnQoc3RyYXRlZ3ksIGJhc2VsaW5lVGllciwgdG9wVGllciwgaW5kZXgp
IHsKKyAgICB0aGlzLmNvbXBpbGF0aW9uX2hpbnRzW2luZGV4XSA9IHsKKyAgICAgIHN0cmF0ZWd5
OiBzdHJhdGVneSwKKyAgICAgIGJhc2VsaW5lVGllcjogYmFzZWxpbmVUaWVyLAorICAgICAgdG9w
VGllcjogdG9wVGllcgorICAgIH07CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBhZGREYXRh
U2VnbWVudChhZGRyLCBkYXRhLCBpc19nbG9iYWwgPSBmYWxzZSkgeworICAgIHRoaXMuZGF0YV9z
ZWdtZW50cy5wdXNoKAorICAgICAgICB7YWRkcjogYWRkciwgZGF0YTogZGF0YSwgaXNfZ2xvYmFs
OiBpc19nbG9iYWwsIGlzX2FjdGl2ZTogdHJ1ZX0pOworICAgIHJldHVybiB0aGlzLmRhdGFfc2Vn
bWVudHMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGFkZFBhc3NpdmVEYXRhU2VnbWVudChkYXRhKSB7
CisgICAgdGhpcy5kYXRhX3NlZ21lbnRzLnB1c2goe2RhdGE6IGRhdGEsIGlzX2FjdGl2ZTogZmFs
c2V9KTsKKyAgICByZXR1cm4gdGhpcy5kYXRhX3NlZ21lbnRzLmxlbmd0aCAtIDE7CisgIH0KKwor
ICBleHBvcnRNZW1vcnlBcyhuYW1lKSB7CisgICAgdGhpcy5leHBvcnRzLnB1c2goe25hbWU6IG5h
bWUsIGtpbmQ6IGtFeHRlcm5hbE1lbW9yeSwgaW5kZXg6IDB9KTsKKyAgfQorCisgIC8vIHtvZmZz
ZXR9IGlzIGFuIGluaXRpYWxpemVyIGV4cHJlc3Npb24uCisgIC8vIElmIHt0eXBlfSBpcyB1bmRl
ZmluZWQsIHRoZW4ge2VsZW1lbnRzfSBhcmUgZnVuY3Rpb24gaW5kaWNlcy4gT3RoZXJ3aXNlLAor
ICAvLyB0aGV5IGFyZSBpbml0aWFsaXplciBleHByZXNzaW9ucy4KKyAgYWRkQWN0aXZlRWxlbWVu
dFNlZ21lbnQodGFibGUsIG9mZnNldCwgZWxlbWVudHMsIHR5cGUpIHsKKyAgICB0aGlzLmVsZW1l
bnRfc2VnbWVudHMucHVzaCgKKyAgICAgICAgbmV3IFdhc21FbGVtU2VnbWVudCh0YWJsZSwgb2Zm
c2V0LCB0eXBlLCBlbGVtZW50cywgZmFsc2UpKTsKKyAgICByZXR1cm4gdGhpcy5lbGVtZW50X3Nl
Z21lbnRzLmxlbmd0aCAtIDE7CisgIH0KKworICAvLyBJZiB7dHlwZX0gaXMgdW5kZWZpbmVkLCB0
aGVuIHtlbGVtZW50c30gYXJlIGZ1bmN0aW9uIGluZGljZXMuIE90aGVyd2lzZSwKKyAgLy8gdGhl
eSBhcmUgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbnMuCisgIGFkZFBhc3NpdmVFbGVtZW50U2VnbWVu
dChlbGVtZW50cywgdHlwZSkgeworICAgIHRoaXMuZWxlbWVudF9zZWdtZW50cy5wdXNoKAorICAg
ICAgbmV3IFdhc21FbGVtU2VnbWVudCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHlwZSwgZWxlbWVu
dHMsIGZhbHNlKSk7CisgICAgcmV0dXJuIHRoaXMuZWxlbWVudF9zZWdtZW50cy5sZW5ndGggLSAx
OworICB9CisKKyAgLy8gSWYge3R5cGV9IGlzIHVuZGVmaW5lZCwgdGhlbiB7ZWxlbWVudHN9IGFy
ZSBmdW5jdGlvbiBpbmRpY2VzLiBPdGhlcndpc2UsCisgIC8vIHRoZXkgYXJlIGluaXRpYWxpemVy
IGV4cHJlc3Npb25zLgorICBhZGREZWNsYXJhdGl2ZUVsZW1lbnRTZWdtZW50KGVsZW1lbnRzLCB0
eXBlKSB7CisgICAgdGhpcy5lbGVtZW50X3NlZ21lbnRzLnB1c2goCisgICAgICBuZXcgV2FzbUVs
ZW1TZWdtZW50KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0eXBlLCBlbGVtZW50cywgdHJ1ZSkpOwor
ICAgIHJldHVybiB0aGlzLmVsZW1lbnRfc2VnbWVudHMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGFw
cGVuZFRvVGFibGUoYXJyYXkpIHsKKyAgICBmb3IgKGxldCBuIG9mIGFycmF5KSB7CisgICAgICBp
ZiAodHlwZW9mIG4gIT0gJ251bWJlcicpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxp
ZCB0YWJsZSAoZW50cmllcyBoYXZlIHRvIGJlIG51bWJlcnMpOiAnICsgYXJyYXkpOworICAgIH0K
KyAgICBpZiAodGhpcy50YWJsZXMubGVuZ3RoID09IDApIHsKKyAgICAgIHRoaXMuYWRkVGFibGUo
a1dhc21BbnlGdW5jLCAwKTsKKyAgICB9CisgICAgLy8gQWRqdXN0IHRoZSB0YWJsZSB0byB0aGUg
Y29ycmVjdCBzaXplLgorICAgIGxldCB0YWJsZSA9IHRoaXMudGFibGVzWzBdOworICAgIGNvbnN0
IGJhc2UgPSB0YWJsZS5pbml0aWFsX3NpemU7CisgICAgY29uc3QgdGFibGVfc2l6ZSA9IGJhc2Ug
KyBhcnJheS5sZW5ndGg7CisgICAgdGFibGUuaW5pdGlhbF9zaXplID0gdGFibGVfc2l6ZTsKKyAg
ICBpZiAodGFibGUuaGFzX21heCAmJiB0YWJsZV9zaXplID4gdGFibGUubWF4X3NpemUpIHsKKyAg
ICAgIHRhYmxlLm1heF9zaXplID0gdGFibGVfc2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMu
YWRkQWN0aXZlRWxlbWVudFNlZ21lbnQoMCwgV2FzbUluaXRFeHByLkkzMkNvbnN0KGJhc2UpLCBh
cnJheSk7CisgIH0KKworICBzZXRUYWJsZUJvdW5kcyhtaW4sIG1heCA9IHVuZGVmaW5lZCkgewor
ICAgIGlmICh0aGlzLnRhYmxlcy5sZW5ndGggIT0gMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9y
KCdUaGUgdGFibGUgYm91bmRzIG9mIHRhYmxlIFwnMFwnIGhhdmUgYWxyZWFkeSBiZWVuIHNldC4n
KTsKKyAgICB9CisgICAgdGhpcy5hZGRUYWJsZShrV2FzbUFueUZ1bmMsIG1pbiwgbWF4KTsKKyAg
ICByZXR1cm4gdGhpczsKKyAgfQorCisgIHNldE5hbWUobmFtZSkgeworICAgIHRoaXMubmFtZSA9
IG5hbWU7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICB0b0J1ZmZlcihkZWJ1ZyA9IGZhbHNl
KSB7CisgICAgbGV0IGJpbmFyeSA9IG5ldyBCaW5hcnk7CisgICAgbGV0IHdhc20gPSB0aGlzOwor
CisgICAgLy8gQWRkIGhlYWRlcgorICAgIGJpbmFyeS5lbWl0X2hlYWRlcigpOworCisgICAgLy8g
QWRkIHR5cGUgc2VjdGlvbgorICAgIGlmICh3YXNtLnR5cGVzLmxlbmd0aCA+IDApIHsKKyAgICAg
IGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIHR5cGVzIEAgJyArIGJpbmFyeS5sZW5ndGgpOwor
ICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrVHlwZVNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsK
KyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS50eXBlcy5sZW5ndGgpOworICAgICAgICBm
b3IgKGxldCB0eXBlIG9mIHdhc20udHlwZXMpIHsKKyAgICAgICAgICBpZiAodHlwZSBpbnN0YW5j
ZW9mIFdhc21TdHJ1Y3QpIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCh0eXBlLnR5cGVf
Zm9ybSk7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih0eXBlLmZpZWxkcy5sZW5ndGgp
OworICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdHlwZS5maWVsZHMpIHsKKyAgICAgICAg
ICAgICAgc2VjdGlvbi5lbWl0X3R5cGUoZmllbGQudHlwZSk7CisgICAgICAgICAgICAgIHNlY3Rp
b24uZW1pdF91OChmaWVsZC5tdXRhYmlsaXR5ID8gMSA6IDApOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBXYXNtU3RydWN0U3VidHlwZSkgeworICAgICAg
ICAgICAgICBpZiAodHlwZS5zdXBlcnR5cGUgPT09IHRoaXMua0dlbmVyaWNTdXBlclR5cGUpIHsK
KyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0RhdGFSZWZDb2RlKTsKKyAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfaGVhcF90eXBlKHR5
cGUuc3VwZXJ0eXBlKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
IH0gZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFdhc21BcnJheSkgeworICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3U4KHR5cGUudHlwZV9mb3JtKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90
eXBlKHR5cGUudHlwZSk7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgodHlwZS5tdXRhYmls
aXR5ID8gMSA6IDApOworICAgICAgICAgICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBXYXNtQXJyYXlT
dWJ0eXBlKSB7CisgICAgICAgICAgICAgIGlmICh0eXBlLnN1cGVydHlwZSA9PT0gdGhpcy5rR2Vu
ZXJpY1N1cGVyVHlwZSkgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChrRGF0YVJl
ZkNvZGUpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24u
ZW1pdF9oZWFwX3R5cGUodHlwZS5zdXBlcnR5cGUpOworICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChr
V2FzbUZ1bmN0aW9uVHlwZUZvcm0pOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYodHlw
ZS5wYXJhbXMubGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAobGV0IHBhcmFtIG9mIHR5cGUucGFy
YW1zKSB7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKHBhcmFtKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHR5cGUucmVzdWx0cy5sZW5ndGgp
OworICAgICAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHR5cGUucmVzdWx0cykgeworICAgICAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShyZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIGltcG9ydHMg
c2VjdGlvbgorICAgIGlmICh3YXNtLmltcG9ydHMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRl
YnVnKSBwcmludCgnZW1pdHRpbmcgaW1wb3J0cyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAg
IGJpbmFyeS5lbWl0X3NlY3Rpb24oa0ltcG9ydFNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAg
ICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS5pbXBvcnRzLmxlbmd0aCk7CisgICAgICAgIGZv
ciAobGV0IGltcCBvZiB3YXNtLmltcG9ydHMpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfc3Ry
aW5nKGltcC5tb2R1bGUpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF9zdHJpbmcoaW1wLm5hbWUg
fHwgJycpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChpbXAua2luZCk7CisgICAgICAgICAg
aWYgKGltcC5raW5kID09IGtFeHRlcm5hbEZ1bmN0aW9uKSB7CisgICAgICAgICAgICBzZWN0aW9u
LmVtaXRfdTMydihpbXAudHlwZV9pbmRleCk7CisgICAgICAgICAgfSBlbHNlIGlmIChpbXAua2lu
ZCA9PSBrRXh0ZXJuYWxHbG9iYWwpIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKGlt
cC50eXBlKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChpbXAubXV0YWJsZSk7CisgICAg
ICAgICAgfSBlbHNlIGlmIChpbXAua2luZCA9PSBrRXh0ZXJuYWxNZW1vcnkpIHsKKyAgICAgICAg
ICAgIHZhciBoYXNfbWF4ID0gKHR5cGVvZiBpbXAubWF4aW11bSkgIT0gJ3VuZGVmaW5lZCc7Cisg
ICAgICAgICAgICB2YXIgaXNfc2hhcmVkID0gKHR5cGVvZiBpbXAuc2hhcmVkKSAhPSAndW5kZWZp
bmVkJzsKKyAgICAgICAgICAgIGlmIChpc19zaGFyZWQpIHsKKyAgICAgICAgICAgICAgc2VjdGlv
bi5lbWl0X3U4KGhhc19tYXggPyAzIDogMik7ICAvLyBmbGFncworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGhhc19tYXggPyAxIDogMCk7ICAvLyBm
bGFncworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoaW1wLmlu
aXRpYWwpOyAgICAgICAgICAgICAgIC8vIGluaXRpYWwKKyAgICAgICAgICAgIGlmIChoYXNfbWF4
KSBzZWN0aW9uLmVtaXRfdTMydihpbXAubWF4aW11bSk7ICAvLyBtYXhpbXVtCisgICAgICAgICAg
fSBlbHNlIGlmIChpbXAua2luZCA9PSBrRXh0ZXJuYWxUYWJsZSkgeworICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3R5cGUoaW1wLnR5cGUpOworICAgICAgICAgICAgdmFyIGhhc19tYXggPSAodHlw
ZW9mIGltcC5tYXhpbXVtKSAhPSAndW5kZWZpbmVkJzsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1p
dF91OChoYXNfbWF4ID8gMSA6IDApOyAgICAgICAgICAgICAvLyBmbGFncworICAgICAgICAgICAg
c2VjdGlvbi5lbWl0X3UzMnYoaW1wLmluaXRpYWwpOyAgICAgICAgICAgICAgIC8vIGluaXRpYWwK
KyAgICAgICAgICAgIGlmIChoYXNfbWF4KSBzZWN0aW9uLmVtaXRfdTMydihpbXAubWF4aW11bSk7
ICAvLyBtYXhpbXVtCisgICAgICAgICAgfSBlbHNlIGlmIChpbXAua2luZCA9PSBrRXh0ZXJuYWxU
YWcpIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGtFeGNlcHRpb25BdHRyaWJ1dGUp
OworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoaW1wLnR5cGVfaW5kZXgpOworICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24vdW5zdXBw
b3J0ZWQgaW1wb3J0IGtpbmQgJyArIGltcC5raW5kKTsKKyAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCBmdW5jdGlvbnMgZGVjbGFyYXRpb25zCisg
ICAgaWYgKHdhc20uZnVuY3Rpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJp
bnQoJ2VtaXR0aW5nIGZ1bmN0aW9uIGRlY2xzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAg
YmluYXJ5LmVtaXRfc2VjdGlvbihrRnVuY3Rpb25TZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7Cisg
ICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20uZnVuY3Rpb25zLmxlbmd0aCk7CisgICAgICAg
IGZvciAobGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsKKyAgICAgICAgICBzZWN0aW9uLmVt
aXRfdTMydihmdW5jLnR5cGVfaW5kZXgpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisK
KyAgICAvLyBBZGQgdGFibGUgc2VjdGlvbgorICAgIGlmICh3YXNtLnRhYmxlcy5sZW5ndGggPiAw
KSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyB0YWJsZXMgQCAnICsgYmluYXJ5
Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtUYWJsZVNlY3Rpb25Db2RlLCBz
ZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS50YWJsZXMubGVuZ3Ro
KTsKKyAgICAgICAgZm9yIChsZXQgdGFibGUgb2Ygd2FzbS50YWJsZXMpIHsKKyAgICAgICAgICBz
ZWN0aW9uLmVtaXRfdHlwZSh0YWJsZS50eXBlKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgo
dGFibGUuaGFzX21heCk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYodGFibGUuaW5pdGlh
bF9zaXplKTsKKyAgICAgICAgICBpZiAodGFibGUuaGFzX21heCkgc2VjdGlvbi5lbWl0X3UzMnYo
dGFibGUubWF4X3NpemUpOworICAgICAgICAgIGlmICh0YWJsZS5oYXNfaW5pdCkgeworICAgICAg
ICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcih0YWJsZS5pbml0X2V4cHIpOworICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIG1lbW9yeSBzZWN0
aW9uCisgICAgaWYgKHdhc20ubWVtb3J5ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIGlmIChkZWJ1
ZykgcHJpbnQoJ2VtaXR0aW5nIG1lbW9yeSBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJp
bmFyeS5lbWl0X3NlY3Rpb24oa01lbW9yeVNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAg
ICAgc2VjdGlvbi5lbWl0X3U4KDEpOyAgLy8gb25lIG1lbW9yeSBlbnRyeQorICAgICAgICBjb25z
dCBoYXNfbWF4ID0gd2FzbS5tZW1vcnkubWF4ICE9PSB1bmRlZmluZWQ7CisgICAgICAgIGlmICh3
YXNtLm1lbW9yeS5pc19tZW1vcnk2NCkgeworICAgICAgICAgIGlmICh3YXNtLm1lbW9yeS5zaGFy
ZWQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2hhcmluZyBtZW1vcnk2NCBpcyBu
b3Qgc3VwcG9ydGVkICh5ZXQpJyk7CisgICAgICAgICAgfQorICAgICAgICAgIHNlY3Rpb24uZW1p
dF91OCgKKyAgICAgICAgICAgICAgaGFzX21heCA/IGtMaW1pdHNNZW1vcnk2NFdpdGhNYXhpbXVt
IDoga0xpbWl0c01lbW9yeTY0Tm9NYXhpbXVtKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTY0
dih3YXNtLm1lbW9yeS5taW4pOworICAgICAgICAgIGlmIChoYXNfbWF4KSBzZWN0aW9uLmVtaXRf
dTY0dih3YXNtLm1lbW9yeS5tYXgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNlY3Rp
b24uZW1pdF91OCgKKyAgICAgICAgICAgICAgd2FzbS5tZW1vcnkuc2hhcmVkID8KKyAgICAgICAg
ICAgICAgICAgIChoYXNfbWF4ID8ga0xpbWl0c1NoYXJlZFdpdGhNYXhpbXVtIDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAga0xpbWl0c1NoYXJlZE5vTWF4aW11bSkgOgorICAgICAgICAg
ICAgICAgICAgKGhhc19tYXggPyBrTGltaXRzV2l0aE1heGltdW0gOiBrTGltaXRzTm9NYXhpbXVt
KSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS5tZW1vcnkubWluKTsKKyAgICAg
ICAgICBpZiAoaGFzX21heCkgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS5tZW1vcnkubWF4KTsKKyAg
ICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIHRhZyBzZWN0aW9uLgorICAg
IGlmICh3YXNtLnRhZ3MubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1p
dHRpbmcgdGFncyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rp
b24oa1RhZ1NlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3Uz
MnYod2FzbS50YWdzLmxlbmd0aCk7CisgICAgICAgIGZvciAobGV0IHR5cGVfaW5kZXggb2Ygd2Fz
bS50YWdzKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoa0V4Y2VwdGlvbkF0dHJpYnV0
ZSk7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYodHlwZV9pbmRleCk7CisgICAgICAgIH0K
KyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCBnbG9iYWwgc2VjdGlvbi4KKyAgICBpZiAo
d2FzbS5nbG9iYWxzLmxlbmd0aCA+IDApIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0
aW5nIGdsb2JhbHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0
aW9uKGtHbG9iYWxTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1p
dF91MzJ2KHdhc20uZ2xvYmFscy5sZW5ndGgpOworICAgICAgICBmb3IgKGxldCBnbG9iYWwgb2Yg
d2FzbS5nbG9iYWxzKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUoZ2xvYmFsLnR5cGUp
OworICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChnbG9iYWwubXV0YWJsZSk7CisgICAgICAgICAg
c2VjdGlvbi5lbWl0X2luaXRfZXhwcihnbG9iYWwuaW5pdCk7CisgICAgICAgIH0KKyAgICAgIH0p
OworICAgIH0KKworICAgIC8vIEFkZCBleHBvcnQgdGFibGUuCisgICAgdmFyIG1lbV9leHBvcnQg
PSAod2FzbS5tZW1vcnkgIT09IHVuZGVmaW5lZCAmJiB3YXNtLm1lbW9yeS5leHBvcnRlZCk7Cisg
ICAgdmFyIGV4cG9ydHNfY291bnQgPSB3YXNtLmV4cG9ydHMubGVuZ3RoICsgKG1lbV9leHBvcnQg
PyAxIDogMCk7CisgICAgaWYgKGV4cG9ydHNfY291bnQgPiAwKSB7CisgICAgICBpZiAoZGVidWcp
IHByaW50KCdlbWl0dGluZyBleHBvcnRzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmlu
YXJ5LmVtaXRfc2VjdGlvbihrRXhwb3J0U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAg
ICBzZWN0aW9uLmVtaXRfdTMydihleHBvcnRzX2NvdW50KTsKKyAgICAgICAgZm9yIChsZXQgZXhw
IG9mIHdhc20uZXhwb3J0cykgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF9zdHJpbmcoZXhwLm5h
bWUpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChleHAua2luZCk7CisgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3UzMnYoZXhwLmluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWVtX2V4
cG9ydCkgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF9zdHJpbmcoJ21lbW9yeScpOworICAgICAg
ICAgIHNlY3Rpb24uZW1pdF91OChrRXh0ZXJuYWxNZW1vcnkpOworICAgICAgICAgIHNlY3Rpb24u
ZW1pdF91OCgwKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIHN0
YXJ0IGZ1bmN0aW9uIHNlY3Rpb24uCisgICAgaWYgKHdhc20uc3RhcnRfaW5kZXggIT09IHVuZGVm
aW5lZCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgc3RhcnQgZnVuY3Rpb24g
QCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtTdGFydFNl
Y3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS5z
dGFydF9pbmRleCk7CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgZWxlbWVudCBzZWdt
ZW50cworICAgIGlmICh3YXNtLmVsZW1lbnRfc2VnbWVudHMubGVuZ3RoID4gMCkgeworICAgICAg
aWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgZWxlbWVudCBzZWdtZW50cyBAICcgKyBiaW5hcnku
bGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa0VsZW1lbnRTZWN0aW9uQ29kZSwg
c2VjdGlvbiA9PiB7CisgICAgICAgIHZhciBzZWdtZW50cyA9IHdhc20uZWxlbWVudF9zZWdtZW50
czsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoc2VnbWVudHMubGVuZ3RoKTsKKworICAgICAg
ICBmb3IgKGxldCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7CisgICAgICAgICAgLy8gRW1pdCBmbGFn
IGFuZCBoZWFkZXIuCisgICAgICAgICAgLy8gRWFjaCBjYXNlIGJlbG93IGNvcnJlc3BvbmRzIHRv
IGEgZmxhZyBmcm9tCisgICAgICAgICAgLy8gaHR0cHM6Ly93ZWJhc3NlbWJseS5naXRodWIuaW8v
c3BlYy9jb3JlL2JpbmFyeS9tb2R1bGVzLmh0bWwjZWxlbWVudC1zZWN0aW9uCisgICAgICAgICAg
Ly8gKG5vdCBpbiBpbmNyZWFzaW5nIG9yZGVyKS4KKyAgICAgICAgICBpZiAoc2VnbWVudC5pc19h
Y3RpdmUoKSkgeworICAgICAgICAgICAgaWYgKHNlZ21lbnQudGFibGUgPT0gMCAmJiBzZWdtZW50
LnR5cGUgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICBpZiAoc2VnbWVudC5leHByZXNz
aW9uc19hc19lbGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4
MDQpOworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIoc2VnbWVudC5vZmZz
ZXQpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1p
dF91OCgweDAwKQorICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIoc2VnbWVu
dC5vZmZzZXQpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICBpZiAoc2VnbWVudC5leHByZXNzaW9uc19hc19lbGVtZW50cygpKSB7CisgICAgICAg
ICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDYpOworICAgICAgICAgICAgICAgIHNlY3Rpb24u
ZW1pdF91MzJ2KHNlZ21lbnQudGFibGUpOworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF9p
bml0X2V4cHIoc2VnbWVudC5vZmZzZXQpOworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90
eXBlKHNlZ21lbnQudHlwZSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc2VjdGlvbi5lbWl0X3U4KDB4MDIpOworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91
MzJ2KHNlZ21lbnQudGFibGUpOworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4
cHIoc2VnbWVudC5vZmZzZXQpOworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChrRXh0
ZXJuYWxGdW5jdGlvbik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHNlZ21lbnQuZXhwcmVzc2lvbnNfYXNfZWxlbWVu
dHMoKSkgeworICAgICAgICAgICAgICBpZiAoc2VnbWVudC5pc19wYXNzaXZlKCkpIHsKKyAgICAg
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwNSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDcpOworICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKHNlZ21lbnQudHlwZSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBpZiAoc2VnbWVudC5pc19wYXNzaXZlKCkpIHsK
KyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwMSk7CisgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDMpOworICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChrRXh0ZXJuYWxGdW5jdGlvbik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgLy8gRW1pdCBlbGVtZW50
cy4KKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWdtZW50LmVsZW1lbnRzLmxlbmd0aCk7
CisgICAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBzZWdtZW50LmVsZW1lbnRzKSB7CisgICAg
ICAgICAgICBpZiAoc2VnbWVudC5leHByZXNzaW9uc19hc19lbGVtZW50cygpKSB7CisgICAgICAg
ICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIoZWxlbWVudCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihlbGVtZW50KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pCisgICAgfQorCisgICAgLy8g
SWYgdGhlcmUgYXJlIGFueSBwYXNzaXZlIGRhdGEgc2VnbWVudHMsIGFkZCB0aGUgRGF0YUNvdW50
IHNlY3Rpb24uCisgICAgaWYgKHdhc20uZGF0YV9zZWdtZW50cy5zb21lKHNlZyA9PiAhc2VnLmlz
X2FjdGl2ZSkpIHsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa0RhdGFDb3VudFNlY3Rpb25D
b2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS5kYXRhX3Nl
Z21lbnRzLmxlbmd0aCk7CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSBhcmUg
Y29tcGlsYXRpb24gaGludHMgYWRkIGEgY3VzdG9tIHNlY3Rpb24gJ2NvbXBpbGF0aW9uSGludHMn
CisgICAgLy8gYWZ0ZXIgdGhlIGZ1bmN0aW9uIHNlY3Rpb24gYW5kIGJlZm9yZSB0aGUgY29kZSBz
ZWN0aW9uLgorICAgIGlmICh3YXNtLmNvbXBpbGF0aW9uX2hpbnRzLmxlbmd0aCA+IDApIHsKKyAg
ICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGNvbXBpbGF0aW9uIGhpbnRzIEAgJyArIGJp
bmFyeS5sZW5ndGgpOworICAgICAgLy8gQnVpbGQgY3VzdG9tIHNlY3Rpb24gcGF5bG9hZC4KKyAg
ICAgIGxldCBwYXlsb2FkQmluYXJ5ID0gbmV3IEJpbmFyeSgpOworICAgICAgbGV0IGltcGxpY2l0
X2NvbXBpbGF0aW9uX2hpbnRzX2NvdW50ID0gd2FzbS5mdW5jdGlvbnMubGVuZ3RoOworICAgICAg
cGF5bG9hZEJpbmFyeS5lbWl0X3UzMnYoaW1wbGljaXRfY29tcGlsYXRpb25faGludHNfY291bnQp
OworCisgICAgICAvLyBEZWZhdWx0cyB0byB0aGUgY29tcGlsZXIncyBjaG9pY2UgaWYgbm8gYmV0
dGVyIGhpbnQgd2FzIGdpdmVuICgweDAwKS4KKyAgICAgIGxldCBkZWZhdWx0SGludEJ5dGUgPSBr
Q29tcGlsYXRpb25IaW50U3RyYXRlZ3lEZWZhdWx0IHwKKyAgICAgICAgICAoa0NvbXBpbGF0aW9u
SGludFRpZXJEZWZhdWx0IDw8IDIpIHwKKyAgICAgICAgICAoa0NvbXBpbGF0aW9uSGludFRpZXJE
ZWZhdWx0IDw8IDQpOworCisgICAgICAvLyBFbWl0IGhpbnQgYnl0ZSBmb3IgZXZlcnkgZnVuY3Rp
b24gZGVmaW5lZCBpbiB0aGlzIG1vZHVsZS4KKyAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW1w
bGljaXRfY29tcGlsYXRpb25faGludHNfY291bnQ7IGkrKykgeworICAgICAgICBsZXQgaW5kZXgg
PSB3YXNtLm51bV9pbXBvcnRlZF9mdW5jcyArIGk7CisgICAgICAgIHZhciBoaW50Qnl0ZTsKKyAg
ICAgICAgaWYgKGluZGV4IGluIHdhc20uY29tcGlsYXRpb25faGludHMpIHsKKyAgICAgICAgICBs
ZXQgaGludCA9IHdhc20uY29tcGlsYXRpb25faGludHNbaW5kZXhdOworICAgICAgICAgIGhpbnRC
eXRlID0KKyAgICAgICAgICAgICAgaGludC5zdHJhdGVneSB8IChoaW50LmJhc2VsaW5lVGllciA8
PCAyKSB8IChoaW50LnRvcFRpZXIgPDwgNCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
aGludEJ5dGUgPSBkZWZhdWx0SGludEJ5dGU7CisgICAgICAgIH0KKyAgICAgICAgcGF5bG9hZEJp
bmFyeS5lbWl0X3U4KGhpbnRCeXRlKTsKKyAgICAgIH0KKworICAgICAgLy8gRmluYWxpemUgYXMg
Y3VzdG9tIHNlY3Rpb24uCisgICAgICBsZXQgbmFtZSA9ICdjb21waWxhdGlvbkhpbnRzJzsKKyAg
ICAgIGxldCBieXRlcyA9IHRoaXMuY3JlYXRlQ3VzdG9tU2VjdGlvbihuYW1lLCBwYXlsb2FkQmlu
YXJ5LnRydW5jX2J1ZmZlcigpKTsKKyAgICAgIGJpbmFyeS5lbWl0X2J5dGVzKGJ5dGVzKTsKKyAg
ICB9CisKKyAgICAvLyBBZGQgZnVuY3Rpb24gYm9kaWVzLgorICAgIGlmICh3YXNtLmZ1bmN0aW9u
cy5sZW5ndGggPiAwKSB7CisgICAgICAvLyBlbWl0IGZ1bmN0aW9uIGJvZGllcworICAgICAgaWYg
KGRlYnVnKSBwcmludCgnZW1pdHRpbmcgY29kZSBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAg
IGxldCBzZWN0aW9uX2xlbmd0aCA9IDA7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtDb2Rl
U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNt
LmZ1bmN0aW9ucy5sZW5ndGgpOworICAgICAgICBsZXQgaGVhZGVyID0gbmV3IEJpbmFyeTsKKyAg
ICAgICAgZm9yIChsZXQgZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgeworICAgICAgICAgIGhlYWRl
ci5yZXNldCgpOworICAgICAgICAgIC8vIEZ1bmN0aW9uIGJvZHkgbGVuZ3RoIHdpbGwgYmUgcGF0
Y2hlZCBsYXRlci4KKyAgICAgICAgICBsZXQgbG9jYWxfZGVjbHMgPSBmdW5jLmxvY2FscyB8fCBb
XTsKKyAgICAgICAgICBoZWFkZXIuZW1pdF91MzJ2KGxvY2FsX2RlY2xzLmxlbmd0aCk7CisgICAg
ICAgICAgZm9yIChsZXQgZGVjbCBvZiBsb2NhbF9kZWNscykgeworICAgICAgICAgICAgaGVhZGVy
LmVtaXRfdTMydihkZWNsLmNvdW50KTsKKyAgICAgICAgICAgIGhlYWRlci5lbWl0X3R5cGUoZGVj
bC50eXBlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoaGVhZGVy
Lmxlbmd0aCArIGZ1bmMuYm9keS5sZW5ndGgpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF9ieXRl
cyhoZWFkZXIudHJ1bmNfYnVmZmVyKCkpOworICAgICAgICAgIC8vIFNldCB0byBzZWN0aW9uIG9m
ZnNldCBmb3Igbm93LCB3aWxsIHVwZGF0ZS4KKyAgICAgICAgICBmdW5jLmJvZHlfb2Zmc2V0ID0g
c2VjdGlvbi5sZW5ndGg7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X2J5dGVzKGZ1bmMuYm9keSk7
CisgICAgICAgIH0KKyAgICAgICAgc2VjdGlvbl9sZW5ndGggPSBzZWN0aW9uLmxlbmd0aDsKKyAg
ICAgIH0pOworICAgICAgZm9yIChsZXQgZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgeworICAgICAg
ICBmdW5jLmJvZHlfb2Zmc2V0ICs9IGJpbmFyeS5sZW5ndGggLSBzZWN0aW9uX2xlbmd0aDsKKyAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBBZGQgZGF0YSBzZWdtZW50cy4KKyAgICBpZiAod2FzbS5k
YXRhX3NlZ21lbnRzLmxlbmd0aCA+IDApIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0
aW5nIGRhdGEgc2VnbWVudHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1p
dF9zZWN0aW9uKGtEYXRhU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9u
LmVtaXRfdTMydih3YXNtLmRhdGFfc2VnbWVudHMubGVuZ3RoKTsKKyAgICAgICAgZm9yIChsZXQg
c2VnIG9mIHdhc20uZGF0YV9zZWdtZW50cykgeworICAgICAgICAgIGlmIChzZWcuaXNfYWN0aXZl
KSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMCk7ICAvLyBsaW5lYXIgbWVtb3J5IGlu
ZGV4IDAgLyBmbGFncworICAgICAgICAgICAgaWYgKHNlZy5pc19nbG9iYWwpIHsKKyAgICAgICAg
ICAgICAgLy8gaW5pdGlhbGl6ZXIgaXMgYSBnbG9iYWwgdmFyaWFibGUKKyAgICAgICAgICAgICAg
c2VjdGlvbi5lbWl0X3U4KGtFeHByR2xvYmFsR2V0KTsKKyAgICAgICAgICAgICAgc2VjdGlvbi5l
bWl0X3UzMnYoc2VnLmFkZHIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
Ly8gaW5pdGlhbGl6ZXIgaXMgYSBjb25zdGFudAorICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRf
dTgoa0V4cHJJMzJDb25zdCk7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHNlZy5h
ZGRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChrRXhwckVu
ZCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChrUGFz
c2l2ZSk7ICAvLyBmbGFncworICAgICAgICAgIH0KKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMy
dihzZWcuZGF0YS5sZW5ndGgpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF9ieXRlcyhzZWcuZGF0
YSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIEFkZCBhbnkgZXhwbGlj
aXRseSBhZGRlZCBzZWN0aW9ucworICAgIGZvciAobGV0IGV4cCBvZiB3YXNtLmV4cGxpY2l0KSB7
CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBleHBsaWNpdCBAICcgKyBiaW5hcnku
bGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X2J5dGVzKGV4cCk7CisgICAgfQorCisgICAgLy8g
QWRkIG5hbWVzLgorICAgIGxldCBudW1fZnVuY3Rpb25fbmFtZXMgPSAwOworICAgIGxldCBudW1f
ZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFtZXMgPSAwOworICAgIGZvciAobGV0IGZ1bmMgb2Ygd2Fz
bS5mdW5jdGlvbnMpIHsKKyAgICAgIGlmIChmdW5jLm5hbWUgIT09IHVuZGVmaW5lZCkgKytudW1f
ZnVuY3Rpb25fbmFtZXM7CisgICAgICBpZiAoZnVuYy5udW1Mb2NhbE5hbWVzKCkgPiAwKSArK251
bV9mdW5jdGlvbnNfd2l0aF9sb2NhbF9uYW1lczsKKyAgICB9CisgICAgaWYgKG51bV9mdW5jdGlv
bl9uYW1lcyA+IDAgfHwgbnVtX2Z1bmN0aW9uc193aXRoX2xvY2FsX25hbWVzID4gMCB8fAorICAg
ICAgICB3YXNtLm5hbWUgIT09IHVuZGVmaW5lZCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgn
ZW1pdHRpbmcgbmFtZXMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9z
ZWN0aW9uKGtVbmtub3duU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9u
LmVtaXRfc3RyaW5nKCduYW1lJyk7CisgICAgICAgIC8vIEVtaXQgbW9kdWxlIG5hbWUuCisgICAg
ICAgIGlmICh3YXNtLm5hbWUgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgIHNlY3Rpb24uZW1p
dF9zZWN0aW9uKGtNb2R1bGVOYW1lQ29kZSwgbmFtZV9zZWN0aW9uID0+IHsKKyAgICAgICAgICAg
IG5hbWVfc2VjdGlvbi5lbWl0X3N0cmluZyh3YXNtLm5hbWUpOworICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgICAgIC8vIEVtaXQgZnVuY3Rpb24gbmFtZXMuCisgICAgICAgIGlmIChudW1f
ZnVuY3Rpb25fbmFtZXMgPiAwKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3NlY3Rpb24oa0Z1
bmN0aW9uTmFtZXNDb2RlLCBuYW1lX3NlY3Rpb24gPT4geworICAgICAgICAgICAgbmFtZV9zZWN0
aW9uLmVtaXRfdTMydihudW1fZnVuY3Rpb25fbmFtZXMpOworICAgICAgICAgICAgZm9yIChsZXQg
ZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgeworICAgICAgICAgICAgICBpZiAoZnVuYy5uYW1lID09
PSB1bmRlZmluZWQpIGNvbnRpbnVlOworICAgICAgICAgICAgICBuYW1lX3NlY3Rpb24uZW1pdF91
MzJ2KGZ1bmMuaW5kZXgpOworICAgICAgICAgICAgICBuYW1lX3NlY3Rpb24uZW1pdF9zdHJpbmco
ZnVuYy5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
ICAgICAvLyBFbWl0IGxvY2FsIG5hbWVzLgorICAgICAgICBpZiAobnVtX2Z1bmN0aW9uc193aXRo
X2xvY2FsX25hbWVzID4gMCkgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF9zZWN0aW9uKGtMb2Nh
bE5hbWVzQ29kZSwgbmFtZV9zZWN0aW9uID0+IHsKKyAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5l
bWl0X3UzMnYobnVtX2Z1bmN0aW9uc193aXRoX2xvY2FsX25hbWVzKTsKKyAgICAgICAgICAgIGZv
ciAobGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsKKyAgICAgICAgICAgICAgaWYgKGZ1bmMu
bnVtTG9jYWxOYW1lcygpID09IDApIGNvbnRpbnVlOworICAgICAgICAgICAgICBuYW1lX3NlY3Rp
b24uZW1pdF91MzJ2KGZ1bmMuaW5kZXgpOworICAgICAgICAgICAgICBuYW1lX3NlY3Rpb24uZW1p
dF91MzJ2KGZ1bmMubnVtTG9jYWxOYW1lcygpKTsKKyAgICAgICAgICAgICAgbGV0IG5hbWVfaW5k
ZXggPSAwOworICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZ1bmMubG9jYWxfbmFt
ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmMubG9jYWxf
bmFtZXNbaV0gPT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5l
bWl0X3UzMnYobmFtZV9pbmRleCk7CisgICAgICAgICAgICAgICAgICBuYW1lX3NlY3Rpb24uZW1p
dF9zdHJpbmcoZnVuYy5sb2NhbF9uYW1lc1tpXSk7CisgICAgICAgICAgICAgICAgICBuYW1lX2lu
ZGV4Kys7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIG5hbWVf
aW5kZXggKz0gZnVuYy5sb2NhbF9uYW1lc1tpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAg
fSk7CisgICAgfQorCisgICAgcmV0dXJuIGJpbmFyeS50cnVuY19idWZmZXIoKTsKKyAgfQorCisg
IHRvQXJyYXkoZGVidWcgPSBmYWxzZSkgeworICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudG9C
dWZmZXIoZGVidWcpKTsKKyAgfQorCisgIGluc3RhbnRpYXRlKGZmaSkgeworICAgIGxldCBtb2R1
bGUgPSB0aGlzLnRvTW9kdWxlKCk7CisgICAgbGV0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5
Lkluc3RhbmNlKG1vZHVsZSwgZmZpKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7CisgIH0KKworICBh
c3luY0luc3RhbnRpYXRlKGZmaSkgeworICAgIHJldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0
ZSh0aGlzLnRvQnVmZmVyKCksIGZmaSkKKyAgICAgICAgLnRoZW4oKHttb2R1bGUsIGluc3RhbmNl
fSkgPT4gaW5zdGFuY2UpOworICB9CisKKyAgdG9Nb2R1bGUoZGVidWcgPSBmYWxzZSkgeworICAg
IHJldHVybiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKHRoaXMudG9CdWZmZXIoZGVidWcpKTsKKyAg
fQorfQorCitmdW5jdGlvbiB3YXNtU2lnbmVkTGViKHZhbCwgbWF4X2xlbiA9IDUpIHsKKyAgbGV0
IHJlcyA9IFtdOworICBmb3IgKGxldCBpID0gMDsgaSA8IG1heF9sZW47ICsraSkgeworICAgIGxl
dCB2ID0gdmFsICYgMHg3ZjsKKyAgICAvLyBJZiB7dn0gc2lnbi1leHRlbmRlZCBmcm9tIDcgdG8g
MzIgYml0cyBpcyBlcXVhbCB0byB2YWwsIHdlIGFyZSBkb25lLgorICAgIGlmICgoKHYgPDwgMjUp
ID4+IDI1KSA9PSB2YWwpIHsKKyAgICAgIHJlcy5wdXNoKHYpOworICAgICAgcmV0dXJuIHJlczsK
KyAgICB9CisgICAgcmVzLnB1c2godiB8IDB4ODApOworICAgIHZhbCA9IHZhbCA+PiA3OworICB9
CisgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICdMZWIgdmFsdWUgPCcgKyB2YWwgKyAnPiBleGNl
ZWRzIG1heGltdW0gbGVuZ3RoIG9mICcgKyBtYXhfbGVuKTsKK30KKworZnVuY3Rpb24gd2FzbVVu
c2lnbmVkTGViKHZhbCwgbWF4X2xlbiA9IDUpIHsKKyAgbGV0IHJlcyA9IFtdOworICBmb3IgKGxl
dCBpID0gMDsgaSA8IG1heF9sZW47ICsraSkgeworICAgIGxldCB2ID0gdmFsICYgMHg3ZjsKKyAg
ICBpZiAodiA9PSB2YWwpIHsKKyAgICAgIHJlcy5wdXNoKHYpOworICAgICAgcmV0dXJuIHJlczsK
KyAgICB9CisgICAgcmVzLnB1c2godiB8IDB4ODApOworICAgIHZhbCA9IHZhbCA+Pj4gNzsKKyAg
fQorICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAnTGViIHZhbHVlIDwnICsgdmFsICsgJz4gZXhj
ZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAnICsgbWF4X2xlbik7Cit9CisKK2Z1bmN0aW9uIHdhc21J
MzJDb25zdCh2YWwpIHsKKyAgcmV0dXJuIFtrRXhwckkzMkNvbnN0LCAuLi53YXNtU2lnbmVkTGVi
KHZhbCwgNSldOworfQorCisvLyBOb3RlOiBTaW5jZSB7dmFsfSBpcyBhIEpTIG51bWJlciwgdGhl
IGdlbmVyYXRlZCBjb25zdGFudCBvbmx5IGhhcyA1MyBiaXRzIG9mCisvLyBwcmVjaXNpb24uCitm
dW5jdGlvbiB3YXNtSTY0Q29uc3QodmFsKSB7CisgIHJldHVybiBba0V4cHJJNjRDb25zdCwgLi4u
d2FzbVNpZ25lZExlYih2YWwsIDEwKV07Cit9CisKK2Z1bmN0aW9uIHdhc21GMzJDb25zdChmKSB7
CisgIC8vIFdyaXRlIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIgYXQgb2Zmc2V0IDAuCisgIGRhdGFf
dmlldy5zZXRGbG9hdDMyKDAsIGYsIHRydWUpOworICByZXR1cm4gWworICAgIGtFeHByRjMyQ29u
c3QsIGJ5dGVfdmlld1swXSwgYnl0ZV92aWV3WzFdLCBieXRlX3ZpZXdbMl0sIGJ5dGVfdmlld1sz
XQorICBdOworfQorCitmdW5jdGlvbiB3YXNtRjY0Q29uc3QoZikgeworICAvLyBXcml0ZSBpbiBs
aXR0bGUtZW5kaWFuIG9yZGVyIGF0IG9mZnNldCAwLgorICBkYXRhX3ZpZXcuc2V0RmxvYXQ2NCgw
LCBmLCB0cnVlKTsKKyAgcmV0dXJuIFsKKyAgICBrRXhwckY2NENvbnN0LCBieXRlX3ZpZXdbMF0s
IGJ5dGVfdmlld1sxXSwgYnl0ZV92aWV3WzJdLCBieXRlX3ZpZXdbM10sCisgICAgYnl0ZV92aWV3
WzRdLCBieXRlX3ZpZXdbNV0sIGJ5dGVfdmlld1s2XSwgYnl0ZV92aWV3WzddCisgIF07Cit9CisK
K2Z1bmN0aW9uIHdhc21TMTI4Q29uc3QoZikgeworICAvLyBXcml0ZSBpbiBsaXR0bGUtZW5kaWFu
IG9yZGVyIGF0IG9mZnNldCAwLgorICByZXR1cm4gW2tTaW1kUHJlZml4LCBrRXhwclMxMjhDb25z
dCwgLi4uZl07Cit9CisKK2Z1bmN0aW9uIGdldE9wY29kZU5hbWUob3Bjb2RlKSB7CisgIHJldHVy
biBnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXM/LltvcGNvZGVdID8/ICd1bmtub3duJzsKK30K
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS93YXNtLmpzb24gYi9KU1Rlc3RzL3dhc20vd2FzbS5q
c29uCmluZGV4IDRmOGRkOWUzZDIxMzQzNTAwMDAwNmUyNDE0NmIwMTk0YzlhYzg4ZjEuLjlkMjI1
ZTRlODIyNDk2NjA0NDRmZjQxYWViYmEyN2M2NGM3NmVlZjEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
d2FzbS93YXNtLmpzb24KKysrIGIvSlNUZXN0cy93YXNtL3dhc20uanNvbgpAQCAtMjMsMzQgKzIz
LDM4IEBACiAgICAgImJsb2NrX3R5cGUiOiBbImkzMiIsICJpNjQiLCAiZjMyIiwgImY2NCIsICJ2
b2lkIiwgImV4dGVybnJlZiIsICJmdW5jcmVmIl0sCiAgICAgInJlZl90eXBlIjogWyJmdW5jcmVm
IiwgImV4dGVybnJlZiIsICJ0eXBlX2lkeCJdLAogICAgICJleHRlcm5hbF9raW5kIjogewotICAg
ICAgICAiRnVuY3Rpb24iOiB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMCB9LAotICAgICAg
ICAiVGFibGUiOiAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMSB9LAotICAgICAgICAi
TWVtb3J5IjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMiB9LAotICAgICAgICAiR2xv
YmFsIjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjogMyB9CisgICAgICAgICJGdW5jdGlv
biI6ICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAwIH0sCisgICAgICAgICJUYWJsZSI6
ICAgICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAxIH0sCisgICAgICAgICJNZW1vcnki
OiAgICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAyIH0sCisgICAgICAgICJHbG9iYWwi
OiAgICAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiAzIH0sCisgICAgICAgICJFeGNlcHRp
b24iOiAgIHsgInR5cGUiOiAidWludDgiLCAidmFsdWUiOiA0IH0KICAgICB9LAogICAgICJzZWN0
aW9uIiA6IHsKLSAgICAgICAgIlR5cGUiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1
ZSI6ICAxLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0aW9ucyIg
fSwKLSAgICAgICAgIkltcG9ydCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAy
LCAiZGVzY3JpcHRpb24iOiAiSW1wb3J0IGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAgIkZ1bmN0
aW9uIjogeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAzLCAiZGVzY3JpcHRpb24iOiAi
RnVuY3Rpb24gZGVjbGFyYXRpb25zIiB9LAotICAgICAgICAiVGFibGUiOiAgICB7ICJ0eXBlIjog
InZhcnVpbnQ3IiwgInZhbHVlIjogIDQsICJkZXNjcmlwdGlvbiI6ICJJbmRpcmVjdCBmdW5jdGlv
biB0YWJsZSBhbmQgb3RoZXIgdGFibGVzIiB9LAotICAgICAgICAiTWVtb3J5IjogICB7ICJ0eXBl
IjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDUsICJkZXNjcmlwdGlvbiI6ICJNZW1vcnkgYXR0cmli
dXRlcyIgfSwKLSAgICAgICAgIkdsb2JhbCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1
ZSI6ICA2LCAiZGVzY3JpcHRpb24iOiAiR2xvYmFsIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAg
IkV4cG9ydCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA3LCAiZGVzY3JpcHRp
b24iOiAiRXhwb3J0cyIgfSwKLSAgICAgICAgIlN0YXJ0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50
NyIsICJ2YWx1ZSI6ICA4LCAiZGVzY3JpcHRpb24iOiAiU3RhcnQgZnVuY3Rpb24gZGVjbGFyYXRp
b24iIH0sCi0gICAgICAgICJFbGVtZW50IjogIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAgOSwgImRlc2NyaXB0aW9uIjogIkVsZW1lbnRzIHNlY3Rpb24iIH0sCi0gICAgICAgICJDb2Rl
IjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMCwgImRlc2NyaXB0aW9uIjog
IkZ1bmN0aW9uIGJvZGllcyAoY29kZSkiIH0sCi0gICAgICAgICJEYXRhIjogICAgIHsgInR5cGUi
OiAidmFydWludDciLCAidmFsdWUiOiAxMSwgImRlc2NyaXB0aW9uIjogIkRhdGEgc2VnbWVudHMi
IH0KKyAgICAgICAgIlR5cGUiOiAgICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAg
MSwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIHNpZ25hdHVyZSBkZWNsYXJhdGlvbnMiIH0sCisg
ICAgICAgICJJbXBvcnQiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDIsICJk
ZXNjcmlwdGlvbiI6ICJJbXBvcnQgZGVjbGFyYXRpb25zIiB9LAorICAgICAgICAiRnVuY3Rpb24i
OiAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAzLCAiZGVzY3JpcHRpb24iOiAiRnVu
Y3Rpb24gZGVjbGFyYXRpb25zIiB9LAorICAgICAgICAiVGFibGUiOiAgICAgeyAidHlwZSI6ICJ2
YXJ1aW50NyIsICJ2YWx1ZSI6ICA0LCAiZGVzY3JpcHRpb24iOiAiSW5kaXJlY3QgZnVuY3Rpb24g
dGFibGUgYW5kIG90aGVyIHRhYmxlcyIgfSwKKyAgICAgICAgIk1lbW9yeSI6ICAgIHsgInR5cGUi
OiAidmFydWludDciLCAidmFsdWUiOiAgNSwgImRlc2NyaXB0aW9uIjogIk1lbW9yeSBhdHRyaWJ1
dGVzIiB9LAorICAgICAgICAiRXhjZXB0aW9uIjogeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1
ZSI6IDEzLCAiZGVzY3JpcHRpb24iOiAiRXhjZXB0aW9uIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAg
ICAgIkdsb2JhbCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNiwgImRlc2Ny
aXB0aW9uIjogIkdsb2JhbCBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJFeHBvcnQiOiAgICB7
ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDcsICJkZXNjcmlwdGlvbiI6ICJFeHBvcnRz
IiB9LAorICAgICAgICAiU3RhcnQiOiAgICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6
ICA4LCAiZGVzY3JpcHRpb24iOiAiU3RhcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24iIH0sCisgICAg
ICAgICJFbGVtZW50IjogICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDksICJkZXNj
cmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0aW9uIiB9LAorICAgICAgICAiQ29kZSI6ICAgICAgeyAi
dHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEwLCAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb24g
Ym9kaWVzIChjb2RlKSIgfSwKKyAgICAgICAgIkRhdGEiOiAgICAgIHsgInR5cGUiOiAidmFydWlu
dDciLCAidmFsdWUiOiAxMSwgImRlc2NyaXB0aW9uIjogIkRhdGEgc2VnbWVudHMiIH0sCisgICAg
ICAgICJEYXRhQ291bnQiOiB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTIsICJkZXNj
cmlwdGlvbiI6ICJOdW1iZXIgb2YgZGF0YSBzZWdtZW50cyIgfQogICAgIH0sCiAgICAgIm9wY29k
ZSI6IHsKICAgICAgICAgInVucmVhY2hhYmxlIjogICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250
cm9sIiwgICAgInZhbHVlIjogICAwLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJp
bW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJ0cmFwIGltbWVkaWF0ZWx5IiB9LAorICAgICAgICAibm9wIjogICAgICAgICAgICAg
ICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDEsICJyZXR1cm4iOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIm5vIG9wZXJhdGlvbiIgfSwKICAgICAgICAg
ImJsb2NrIjogICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVl
IjogICAyLCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJh
bWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJu
YW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBh
IHNlcXVlbmNlIG9mIGV4cHJlc3Npb25zLCB5aWVsZGluZyAwIG9yIDEgdmFsdWVzIiB9LAogICAg
ICAgICAibG9vcCI6ICAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAi
dmFsdWUiOiAgIDMsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAg
InBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6
IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJl
Z2luIGEgYmxvY2sgd2hpY2ggY2FuIGFsc28gZm9ybSBjb250cm9sIGZsb3cgbG9vcHMiIH0sCiAg
ICAgICAgICJpZiI6ICAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAg
ICJ2YWx1ZSI6ICAgNCwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAg
ICAicGFyYW1ldGVyIjogWyJib29sIl0sICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRl
IjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
YmVnaW4gaWYgZXhwcmVzc2lvbiIgfSwKICAgICAgICAgImVsc2UiOiAgICAgICAgICAgICAgICB7
ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA1LCAicmV0dXJuIjogWyJjb250
cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBlbHNlIGV4cHJlc3Npb24gb2YgaWYiIH0s
Ci0gICAgICAgICJzZWxlY3QiOiAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIs
ICAgICJ2YWx1ZSI6ICAyNywgInJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAgICAiaW1tZWRp
YXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAic2VsZWN0IG9uZSBvZiB0d28gdmFsdWVzIGJhc2VkIG9uIGNvbmRpdGlvbiIgfSwKLSAgICAg
ICAgImFubm90YXRlZF9zZWxlY3QiOiAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZh
bHVlIjogIDI4LCAicmV0dXJuIjogWyJwcmV2Il0sICAgICAgICAgICAgICAgICAgICAgICAgICJw
YXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wiXSwgICAgICAgICJpbW1lZGlhdGUiOiBb
eyJuYW1lIjogInRhcmdldF90eXBlc19jb3VudCIsICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJudW1i
ZXIgb2YgZW50cmllcyBpbiB0aGUgdGFyZ2V0IHR5cGVzIHZlY3RvciJ9LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Im5hbWUi
OiAidGFyZ2V0X3R5cGVzIiwgICAgICAgInR5cGUiOiAidmFsdWVfdHlwZSoiLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRhcmdldCB0eXBl
cyB0aGF0IGluZGljYXRlIHJlc3VsdCBvZiBzZWxlY3QgaW5zdHJ1Y3Rpb24ifV0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIHNh
bWUgYXMganVzdCBzZWxlY3QgYnV0IHdpdGggdGhlIGFubm90YXRpb24gZm9yIHJlc3VsdCB0eXBl
cyIgfSwKKyAgICAgICAgInRyeSI6ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250
cm9sIiwgICAgInZhbHVlIjogICA2LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAg
ICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJp
bW1lZGlhdGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5cGUifV0sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJiZWdpbiB0cnkgZXhwcmVzc2lvbiIgfSwKKyAgICAgICAgImNhdGNoIjogICAgICAg
ICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICA3LCAicmV0dXJu
IjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImV4biIsICJ0
eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBjYXRjaCBleHByZXNzaW9u
IG9mIHRyeSIgfSwKKyAgICAgICAgInRocm93IjogICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6
ICJjb250cm9sIiwgICAgInZhbHVlIjogICA4LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAg
ICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImV4biIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJ0aHJvdyBleGNlcHRpb24iIH0sCisgICAgICAgICJyZXRocm93IjogICAg
ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgOSwgInJldHVy
biI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2
ZV9kZXB0aCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAicmV0aHJvdyB0aGUgZXhjZXB0aW9u
IGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIiB9LAogICAgICAgICAiYnIiOiAgICAgICAgICAgICAg
ICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTIsICJyZXR1cm4iOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVw
dGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJyZWFrIHRoYXQgdGFyZ2V0cyBhbiBvdXRl
ciBuZXN0ZWQgYmxvY2siIH0sCiAgICAgICAgICJicl9pZiI6ICAgICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAxMywgInJldHVybiI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJyZWxhdGl2ZV9kZXB0aCIsICJ0eXBl
IjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiY29uZGl0aW9uYWwgYnJlYWsgdGhhdCB0YXJnZXRzIGFuIG91
dGVyIG5lc3RlZCBibG9jayIgfSwKICAgICAgICAgImJyX3RhYmxlIjogICAgICAgICAgICB7ICJj
YXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDE0LCAicmV0dXJuIjogW10sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInRhcmdldF9jb3VudCIsICAgInR5
cGUiOiAidmFydWludDMyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFyZ2V0X3Rh
YmxlIn0sCkBAIC01OCw4ICs2MiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Im5hbWUiOiAiZGVmYXVsdF90YXJnZXQi
LCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImFuIG91dGVyIGJsb2NrIG9yIGxvb3AgdG8gd2hp
Y2ggdG8gYnJlYWsgaW4gdGhlIGRlZmF1bHQgY2FzZSJ9XSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJicmFuY2ggdGFibGUgY29udHJv
bCBmbG93IGNvbnN0cnVjdCIgfSwKICAgICAgICAgInJldHVybiI6ICAgICAgICAgICAgICB7ICJj
YXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDE1LCAicmV0dXJuIjogW10sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJyZXR1cm4gemVybyBvciBvbmUgdmFsdWUgZnJvbSB0aGlz
IGZ1bmN0aW9uIiB9LAorICAgICAgICAiZGVsZWdhdGUiOiAgICAgICAgICAgIHsgImNhdGVnb3J5
IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjQsICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAg
ICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2
YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogImRlbGVnYXRlIHRvIGEgcGFyZW50IHRyeSBibG9jayIgfSwKKyAgICAg
ICAgImNhdGNoX2FsbCI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZh
bHVlIjogIDI1LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJw
YXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJjYXRj
aCBleGNlcHRpb25zIHJlZ2FyZGxlc3Mgb2YgdGFnIiB9LAogICAgICAgICAiZHJvcCI6ICAgICAg
ICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjYsICJyZXR1
cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55
Il0sICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImlnbm9yZSB2YWx1ZSIgfSwKLSAg
ICAgICAgIm5vcCI6ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAg
InZhbHVlIjogICAxLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUi
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJu
byBvcGVyYXRpb24iIH0sCisgICAgICAgICJzZWxlY3QiOiAgICAgICAgICAgICAgeyAiY2F0ZWdv
cnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNywgInJldHVybiI6IFsicHJldiJdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0s
ICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAic2VsZWN0IG9uZSBvZiB0d28gdmFsdWVzIGJhc2VkIG9uIGNvbmRp
dGlvbiIgfSwKKyAgICAgICAgImFubm90YXRlZF9zZWxlY3QiOiAgICB7ICJjYXRlZ29yeSI6ICJj
b250cm9sIiwgICAgInZhbHVlIjogIDI4LCAicmV0dXJuIjogWyJwcmV2Il0sICAgICAgICAgICAg
ICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSIsICJwcmV2IiwgImJvb2wiXSwgICAgICAg
ICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInRhcmdldF90eXBlc19jb3VudCIsICJ0eXBlIjogInZh
cnVpbnQzMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFyZ2V0IHR5cGVzIHZlY3RvciJ9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7Im5hbWUiOiAidGFyZ2V0X3R5cGVzIiwgICAgICAgInR5cGUiOiAidmFsdWVfdHlw
ZSoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogInRhcmdldCB0eXBlcyB0aGF0IGluZGljYXRlIHJlc3VsdCBvZiBzZWxlY3QgaW5zdHJ1Y3Rp
b24ifV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAidGhlIHNhbWUgYXMganVzdCBzZWxlY3QgYnV0IHdpdGggdGhlIGFubm90YXRpb24g
Zm9yIHJlc3VsdCB0eXBlcyIgfSwKICAgICAgICAgImVuZCI6ICAgICAgICAgICAgICAgICB7ICJj
YXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDExLCAicmV0dXJuIjogW10sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJlbmQgYSBibG9jaywgbG9vcCwgb3IgaWYiIH0sCiAgICAg
ICAgICJpMzIuY29uc3QiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAic3BlY2lhbCIsICAgICJ2
YWx1ZSI6ICA2NSwgInJldHVybiI6IFsiaTMyIl0sICAgICAgICAgICAgICAgICAgICAgICAgICAi
cGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjog
W3sibmFtZSI6ICJ2YWx1ZSIsICAgICAgICAgICJ0eXBlIjogInZhcmludDMyIn1dLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYSBj
b25zdGFudCB2YWx1ZSBpbnRlcnByZXRlZCBhcyBpMzIiIH0sCiAgICAgICAgICJpNjQuY29uc3Qi
OiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAic3BlY2lhbCIsICAgICJ2YWx1ZSI6ICA2NiwgInJl
dHVybiI6IFsiaTY0Il0sICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ2YWx1
ZSIsICAgICAgICAgICJ0eXBlIjogInZhcmludDY0In1dLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYSBjb25zdGFudCB2YWx1ZSBp
bnRlcnByZXRlZCBhcyBpNjQiIH0sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440683</attachid>
            <date>2021-10-08 15:35:52 -0700</date>
            <delta_ts>2021-10-20 06:51:06 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-229681-20211008153551.patch</filename>
            <type>text/plain</type>
            <size>705818</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
YzUyN2ZiNmZlZjIwNjViZWEzODc0OGJjOGE0MWI3MWQzZjljNmY5Li4wMTlmZWQ0MzdiNmM5MTFk
N2Q3YTgyYWMyYTFjMDk0MjIyY2U1YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NTAgQEAKKzIwMjEtMDktMTYgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+IGFuZCBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCB0aGUgV2ViQXNzZW1ibHkgZXhjZXB0aW9uIGhhbmRsaW5nIHByb3Bvc2FsCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk2ODEKKyAg
ICAgICAgPHJkYXI6Ly84MTYwMzM4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBLZWl0aCBNaWxs
ZXIuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBXZWJBc3NlbWJseSBleGNlcHRpb24g
aGFuZGxpbmcgcHJvcG9zYWwsIGFzIHBlcgorICAgICAgICB0aGUgV0lQIHNwZWM6IGh0dHBzOi8v
Z2l0aHViLmNvbS9XZWJBc3NlbWJseS9leGNlcHRpb24taGFuZGxpbmcKKworICAgICAgICBUaGUg
cHJvcG9zYWwgaW5jbHVkZXMgNiBuZXcgaW5zdHJ1Y3Rpb25zOiB0cnksIGNhdGNoLCBjYXRjaF9h
bGwsCisgICAgICAgIGRlbGVnYXRlLCB0aHJvdyBhbmQgcmV0aHJvdy4gQWxsIHRoZSBpbnN0cnVj
dGlvbnMgYXJlIHN1cHBvcnRlZCBieQorICAgICAgICB0aGUgTExJbnQgYW5kIEIzIGdlbmVyYXRv
cnMsIGJ1dCBub3QgeWV0IHN1cHBvcnRlZCBpbiBBaXIuIEFueQorICAgICAgICBmdW5jdGlvbnMg
dXNlIGV4Y2VwdGlvbnMgd2lsbCB1c2UgQjMgaW4gQkJRLgorCisgICAgICAgIEEgZmV3IGltcG9y
dGFudCBub3RlcyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb246CisgICAgICAgIC0gSW4gQjMsIHNp
bmNlIHdlIGNhbiBub3cgaGF2ZSBtdWx0aXBsZSBlbnRyeXBvaW50cyAob25lIGZvciB0aGUKKyAg
ICAgICAgZnVuY3Rpb24gZW50cnkgKyAxIGZvciBlYWNoIGNhdGNoL2NhdGNoX2FsbCksIHdlIGNh
biBubyBsb25nZXIganVzdAorICAgICAgICByZXBsYWNlIGV2ZXJ5IHZhbHVlIGluIHRoZSBzdGFj
ayB3aXRoIGEgUGhpIHdoZW4gd2UgZmluZCBhIG5ldworICAgICAgICBlbnRyeXBvaW50LiBUaGlz
IHdvcmtlZCBzbyBmYXIgYmVjYXVzZSBvZiB0aGUgYXNzdW1wdGlvbiB0aGF0IGFueQorICAgICAg
ICBibG9jayBjb3VsZG4ndCBhY2Nlc3MgaXRzIGVuY2xvc2luZyBzdGFjaywgYW5kIHNpbmNlIHRo
ZSBlbmNsb3Npbmcgc3RhY2sKKyAgICAgICAgd291bGQgb25seSBiZSBhY2Nlc3NpYmxlIHdoZW4g
d2UgZXhpdGVkIHRoZSBjdXJyZW50IGJsb2NrLCB3ZSBhZGRlZCBQaGlzCisgICAgICAgIGF0IHRo
ZSBlbmQgb2YgZWFjaCBibG9jayB3aGVuIHdlIGhhZCBhIG5ldyBlbnRyeXBvaW50LiBOb3csIHNp
bmNlIHdlIGhhdmUgdG8gY2FwdHVyZSBhbGwKKyAgICAgICAgbGl2ZSB2YWx1ZXMgYXQgYW55IHBv
aW50IHRoYXQgbWlnaHQgdGhyb3cgKGNhbGxzLCB0aHJvdyBhbmQgcmV0aHJvdyksCisgICAgICAg
IHdlIGJyZWFrIHRoYXQgYXNzdW1wdGlvbi4gVG8gc2ltcGxpZnkgYWxsIHRoZSBwb3NzaWJsZSB3
YXlzIHdlIG1pZ2h0CisgICAgICAgIGhhdmUgdG8gbWVyZ2UgdGhlIHN0YXRlIGZyb20gbXVsdGlw
bGUgZW50cnlwb2ludHMgd2Ugbm93IHVzZSBCMworICAgICAgICBWYXJpYWJsZXMgdG8gcmVwcmVz
ZW50IHN0YWNrIHNsb3RzLgorICAgICAgICAtIFNvbWUgZXh0cmEgaW5mb3JtYXRpb24gaXMgcmVx
dWlyZWQgdG8gYmUgYWJsZSB0byBwcm9wZXJseSByZXN0b3JlCisgICAgICAgIHRoZSBzdGF0ZSB3
aGVuIGNhdGNoaW5nIGFuIGV4Y2VwdGlvbjoKKyAgICAgICAgICAgIC0gV2UgYWRkZWQgYSBmaWVs
ZCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoLiBUaGlzIGZpZWxkIGlzIG5lY2Vzc2FyeQorICAgICAg
ICAgICAgYmVjYXVzZSB3aGVuZXZlciB3ZSB0aHJvdywgd2UgbWlnaHQgZW5kIHVwIGluIEphdmFT
Y3JpcHQsIHdoaWNoCisgICAgICAgICAgICBhc3N1bWVzIHRoZSBjYWxsZWUgaXMgYSBjZWxsIGFu
ZCB1c2VzIGl0IHRvIGdldCB0aGUgVk0gYW5kIHJlc3RvcmUKKyAgICAgICAgICAgIGNhbGxlZSBz
YXZlcy4gVGhlIGlzc3VlIGlzIHdoZW4gY2F0Y2hpbmcgZXhjZXB0aW9ucyBpbiB3YXNtIHdlCisg
ICAgICAgICAgICBzdGlsbCBuZWVkIHRoZSBvcmlnaW5hbCBjYWxsZWUsIGFuZCBpZiB0aHJvd2lu
ZyBhbmQgY2F0Y2hpbmcgZnJvbQorICAgICAgICAgICAgdGhlIHNhbWUgZnJhbWUsIHRoYXQgY2Fs
bCBmcmFtZSBzbG90IGhhcyBub3cgYmVlbiBvdmVyd3JpdHRlbiwgc28KKyAgICAgICAgICAgIHdl
IHN0b3JlIGl0cyBvcmlnaW5hbCB2YWx1ZSBpbiB0aGUgVk0gZmllbGQuCisgICAgICAgICAgICAt
IFdlIGFsc28gbmVlZCB0byBzdG9yZSB0aGUgY3VycmVudCBXYXNtIEluc3RhbmNlIGludG8gdGhl
IGNhbGwKKyAgICAgICAgICAgIGZyYW1lJ3Mgc2xvdCBmb3IgdGhlIGB0aGlzYCBhcmd1bWVudC4g
VGhlIGluc3RhbmNlIGlzIHVzZWQgYm90aCBieQorICAgICAgICAgICAgdGhlIHVud2luZGVyLCB0
byBjaGVjayBpZiB0aGUgZXhjZXB0aW9uIGJlaW5nIHRocm93biBtYXRjaGVzIHRoZQorICAgICAg
ICAgICAgZXhjZXB0aW9ucyBoYW5kbGVkIGJ5IGNhdGNoIGNhbmRpZGF0ZXMsIGFuZCBieSB0aGUg
Y2F0Y2ggaW1wbGVtZW50YXRpb24sCisgICAgICAgICAgICB3aGljaCBpcyBuZWNlc3Nhcnkgd2hl
biB0aHJvd2luZyBmcm9tIGEgY3Jvc3MgaW5zdGFuY2UgY2FsbCB3aGVyZSBib3RoCisgICAgICAg
ICAgICB0aGUgY2FsbGVlIHNhdmUgb3IgVExTIHdpbGwgaGF2ZSB0aGUgY2FsbGVlJ3MgaW5zdGFu
Y2UuCisgICAgICAgICAgICAtIFdlIHN0b3JlIHRoZSBjdXJyZW50IG9wY29kZSBmb3IgdGhlIGxs
aW50LCBvciB0aGUKKyAgICAgICAgICAgIGNhbGwgc2l0ZSBpbmRleCBmb3IgQjMsIGluIHRoZSBj
YWxsIGZyYW1lIHNsb3QgZm9yIHRoZSBhcmd1bWVudAorICAgICAgICAgICAgY291bnQgdGFnLiBU
aGUgY2FsbCBzaXRlIGluZGV4IGlzIHVzZWQgYnkgdGhlIHVud2luZGVyIHRvIGNoZWNrCisgICAg
ICAgICAgICBpZiBhIGdpdmVuIGNhdGNoIGNhbiBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBiZWluZyB0
aHJvd24uCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAg
ICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9C
eXRlY29kZUxpc3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvSGFuZGxlckluZm8uaDoKKyAgICAg
ICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAoSlNDOjpCYXNlSW5zdHJ1Y3Rp
b246Om5hbWUgY29uc3QpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6Cisg
ICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OkNh
bGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpoYXNoIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6ZGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpT
Qzo6Q2FsbFNpdGVJbmRleDo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWxsU2l0ZUluZGV4SGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRl
SW5kZXhIYXNoOjplcXVhbCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpDYXRjaEluZm86OkNhdGNoSW5mbyk6CisgICAgICAgIChKU0M6OlVu
d2luZEZ1bmN0b3I6OlVud2luZEZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9y
OjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZCk6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6Q2F0
Y2hJbmZvOjpDYXRjaEluZm8pOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5j
cHA6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZSk6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJv
bVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXJJbXBsKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0
L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAg
ICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6
OmNvbnZlcnRDYWxsZWVUb1ZNKToKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuaDoKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OmdldENvZGVSZWYpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0V2lk
ZTE2Q29kZVJlZik6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRXaWRlMzJDb2RlUmVmKToKKyAg
ICAgICAgKiBsbGludC9MTEludEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6
d2FzbVJldHVyblRvVGhyb3cpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlV2FzbUNhdGNo
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmhhbmRsZVdhc21DYXRjaEFsbCk6CisgICAgICAgICog
bGxpbnQvTExJbnRFeGNlcHRpb25zLmg6CisgICAgICAgICogbGxpbnQvTExJbnRPZmZzZXRzRXh0
cmFjdG9yLmNwcDoKKyAgICAgICAgKiBsbGludC9XZWJBc3NlbWJseS5hc206CisgICAgICAgICog
cnVudGltZS9FcnJvckluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6
RXJyb3JJbnN0YW5jZSk6CisgICAgICAgICogcnVudGltZS9FcnJvckluc3RhbmNlLmg6CisgICAg
ICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OnNldENhdGNoYWJsZUZyb21XYXNtKToKKyAgICAgICAg
KEpTQzo6RXJyb3JJbnN0YW5jZTo6aXNDYXRjaGFibGVGcm9tV2FzbSBjb25zdCk6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hPZmZzZXQpOgorICAg
ICAgICAqIHdhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc1RyeSk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNDYXRjaCk6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNBbnlDYXRjaCk6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNMb29wKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0Jsb2NrKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpkdW1wIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRyeSk6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRUaHJvdyk6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRSZXRocm93KToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6
OkNvbnRyb2xEYXRhKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29udHJv
bERhdGE6OmlzVHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29udHJv
bERhdGE6OmlzQW55Q2F0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpD
b250cm9sRGF0YTo6aXNMb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
Q29udHJvbERhdGE6OmlzQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpDb250cm9sRGF0YTo6aXNDYXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6Q29udHJvbERhdGE6OmNvbnZlcnRUcnlUb0NhdGNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmNvbnZlcnRUcnlUb0NhdGNoQWxsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OnRyeVN0YXJ0
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6
OnRyeUVuZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRy
b2xEYXRhOjp0cnlEZXB0aCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjpjYXRjaEtpbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6ZXhjZXB0aW9uIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OnN0YWNrU2l6ZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmRpZFBvcFZhbHVlRnJvbVN0YWNrKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkU3RhY2tNYXApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjp0YWtlU3RhY2ttYXBzKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6dGFrZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6cHVzaCk6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmdldCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnNl
dCk6CisgICAgICAgIChKU0M6Oldhc206OlBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OmdlbmVy
YXRlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Zml4dXBQb2lu
dGVyUGx1c09mZnNldCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2Vi
QXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
Omluc2VydEVudHJ5U3dpdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
aW5zZXJ0Q29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
UmVmSXNOdWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkVGFibGVH
ZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUYWJsZVNldCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFJlZkZ1bmMpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUluaXQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUYWJsZVNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjphZGRUYWJsZUdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRUYWJsZUZpbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjphZGRUYWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpnZXRM
b2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENh
bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeSk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE1lbW9yeUZpbGwpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlJbml0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5Q29weSk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6Z2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
c2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNr
QW5kUHJlcGFyZVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpl
bWl0TG9hZE9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6bG9hZCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6c3RvcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjpzYW5pdGl6ZUF0b21pY1Jlc3VsdCk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNPcHMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWljTG9hZE9wKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YXRvbWljTG9hZCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNTdG9yZU9wKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6YXRvbWljU3RvcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjplbWl0QXRvbWljQmluYXJ5Uk1XT3ApOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphdG9taWNCaW5hcnlSTVcpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjplbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YXRvbWljV2FpdCk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmF0b21pY05vdGlmeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OnRydW5jU2F0dXJhdGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6YWRkU2VsZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0TG9vcFRp
ZXJVcENoZWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6bG9hZEZyb21T
Y3JhdGNoQnVmZmVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Y29ubmVj
dENvbnRyb2xFbnRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZExv
b3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUb3BMZXZlbCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRFbHNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
YWRkRWxzZVRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjphZGRUcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYXRjaCk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnByZXBhcmVQYXRjaHBvaW50Rm9y
RXhjZXB0aW9ucyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNo
VG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENh
dGNoQWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxU
b1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdENh
dGNoSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZERlbGVnYXRl
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGVUb1VucmVh
Y2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkVGhyb3cpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRSZXRocm93KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6YWRkU3dpdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1Vu
cmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Y3JlYXRlQ2Fs
bFBhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxs
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbFJlZik6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnVuaWZ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNt
OjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpjb21wdXRlRXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9ucyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVt
aXRDaGVja3NGb3JNb2RPckRpdik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyRGl2Uz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVM+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZVPik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtVT4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlM+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1TPik6CisgICAgICAgIChK
U0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2VT4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVU+KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRDdHo+
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJQ
b3BjbnQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRQb3BjbnQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8
RjY0Q29udmVydFVJNjQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lYXJlc3Q+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZWFyZXN0Pik6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2
ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlRydW5jU0YzMj4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMlRydW5jVUY2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUYzMj4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0Y2ND4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRy
dW5jVUYzMj4pOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAg
KiB3YXNtL1dhc21CQlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6cHJl
cGFyZUltcGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjp3b3JrKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbik6CisgICAgICAgIChKU0M6Oldhc206
OkJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFu
Lmg6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
Q2FsbGVlOjpoYW5kbGVyRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludENhbGxl
ZTo6TExJbnRDYWxsZWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludENhbGxlZTo6bGlua0V4
Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T3B0aW1pemluZ0pJVENhbGxl
ZTo6bGlua0V4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T3B0aW1pemlu
Z0pJVENhbGxlZTo6c3RhY2ttYXAgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUNhbGxlZS5o
OgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6Omhhc0V4Y2VwdGlvbkhhbmRsZXJzIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlOjpmdW5jdGlvbkNvZGVCbG9jayBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206Ok9wdGltaXppbmdKSVRDYWxsZWU6Ok9wdGltaXppbmdKSVRD
YWxsZWUpOgorICAgICAgICAqIHdhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmg6CisgICAgICAg
IChKU0M6Oldhc206Oldhc21DYWxsaW5nQ29udmVudGlvbjo6Y2FsbEluZm9ybWF0aW9uRm9yIGNv
bnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
dHlwZVRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6V2FzbTo6aXNWYWxpZEV4dGVybmFsS2luZCk6
CisgICAgICAgIChKU0M6Oldhc206Om1ha2VTdHJpbmcpOgorICAgICAgICAqIHdhc20vV2FzbUZ1
bmN0aW9uQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2Nr
OjpudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
RnVuY3Rpb25Db2RlQmxvY2s6OmV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNt
OjpGdW5jdGlvbkNvZGVCbG9jazo6YWRkRXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgICogd2Fz
bS9XYXNtRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6aXNUcnlPckNhdGNo
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhj
ZXB0aW9uSW5kZXgpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0
Pjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKToKKyAgICAgICAgKiB3YXNtL1dh
c21IYW5kbGVySW5mby5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpIYW5kbGVySW5m
bzo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6Oldhc206OkhhbmRsZXJJbmZvOjpoYW5kbGVy
Rm9ySW5kZXgpOgorICAgICAgICAqIHdhc20vV2FzbUhhbmRsZXJJbmZvLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpXYXNtOjpVbmxpbmtlZEhhbmRsZXJJbmZvOjpVbmxpbmtlZEhhbmRsZXJJbmZv
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SGFuZGxlckluZm86OnRhZyBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OkhhbmRsZXJJbmZvOjpkZWxlZ2F0ZVRhcmdldCBjb25zdCk6CisgICAgICAg
ICogd2FzbS9XYXNtSW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6
fkluc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5oOgorICAgICAgICAoSlND
OjpXYXNtOjpJbnN0YW5jZTo6YWRkVGFnKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6
OnRhZyBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OnRyeV8pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmNhdGNoXyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6aXNMb29wKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc0Jsb2Nr
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc0lm
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjppc1Ry
eSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6aXNB
bnlDYXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlw
ZTo6aXNDYXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjp1bmlmeVZh
bHVlc1dpdGhCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjp3YWxr
RXhwcmVzc2lvblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6Om1h
dGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VB
bmRDb21waWxlQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
TExJbnRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6cmVw
YXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxs
ZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9u
Rm9yQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEFyZ3Vt
ZW50cyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRMb29wKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFRyeSk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZVByZXZpb3VzQmxvY2tGb3JDYXRjaCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaCk6CisgICAgICAgIChK
U0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGwpOgorICAgICAgICAoSlND
OjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZERlbGVnYXRlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRUaHJvdyk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRSZXRocm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OmVuZEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50R2Vu
ZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNtTGltaXRzLmg6CisgICAgICAgICogd2FzbS9X
YXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmg6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpleGNlcHRp
b25JbmRleFNwYWNlU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9y
bWF0aW9uOjppc0ltcG9ydGVkRXhjZXB0aW9uRnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6c2lnbmF0dXJlSW5kZXhG
cm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZUluZm9ybWF0aW9uOjppbXBvcnRFeGNlcHRpb25Db3VudCBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjppc0RlY2xhcmVkRXhjZXB0aW9uIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmFkZERlY2xhcmVkRXhjZXB0aW9u
KToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2Fz
bU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3b3JrKToKKyAgICAg
ICAgKiB3YXNtL1dhc21PU1JFbnRyeURhdGEuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T1NSRW50
cnlEYXRhOjp2YWx1ZXMpOgorICAgICAgICAqIHdhc20vV2FzbU9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpsb2FkVmFsdWVzSW50b0J1ZmZlcik6CisgICAgICAgIChKU0M6Oldh
c206OmRvT1NSRW50cnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04pOgorICAgICAgICAqIHdhc20vV2FzbU9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiB3YXNt
L1dhc21TZWN0aW9uUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VJbXBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJz
ZUV4cG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRXhjZXB0
aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9ucy5oOgorICAgICAgICAoSlNDOjpXYXNt
Ojp2YWxpZGF0ZU9yZGVyKToKKyAgICAgICAgKiB3YXNtL1dhc21TaWduYXR1cmUuY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6U2lnbmF0dXJlSW5mb3JtYXRp
b24pOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6c2lnbmF0dXJl
Rm9yKToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpM
TEludDo6V0FTTV9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogd2FzbS9XYXNtU2xvd1BhdGhz
Lmg6CisgICAgICAgICogd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZUNvZGVTZWN0aW9uU2l6ZSk6CisgICAgICAg
ICogd2FzbS9XYXNtVGFnLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAqIHdhc20vV2FzbVRh
Zy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5l
cmF0b3IuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGFnOjpjcmVhdGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpUYWc6OnBhcmFtZXRlckNvdW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
VGFnOjpwYXJhbWV0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWc6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWc6Om9wZXJhdG9yIT0gY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpUYWc6OnNpZ25hdHVyZSBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OlRhZzo6VGFnKToKKyAgICAgICAgKiB3YXNtL1dhc21UaHVua3MuY3BwOgorICAgICAg
ICAqIHdhc20vV2FzbVRodW5rcy5oOgorICAgICAgICAqIHdhc20vZ2VuZXJhdGVXYXNtQjNJUkdl
bmVyYXRvcklubGluZXNIZWFkZXIucHk6CisgICAgICAgIChDb2RlR2VuZXJhdG9yLmdlbmVyYXRl
T3Bjb2RlKToKKyAgICAgICAgKENvZGVHZW5lcmF0b3IubWFrZVJlc3VsdCk6CisgICAgICAgIChD
b2RlR2VuZXJhdG9yLmdlbmVyYXRlKToKKyAgICAgICAgKiB3YXNtL2dlbmVyYXRlV2FzbU9wc0hl
YWRlci5weToKKyAgICAgICAgKHR5cGVNYWNyb2l6ZXIpOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseS5jcHA6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OkpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5RXhjZXB0aW9u
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246
OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUV4Y2VwdGlv
bjo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmdldEFy
ZyBjb25zdCk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpzdWJzcGFjZUZvcik6
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnRhZyBjb25zdCk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnBheWxvYWQgY29uc3QpOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6dG9KU1ZhbHVlKToKKyAg
ICAgICAgKEpTQzo6ZnJvbUpTVmFsdWUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp0cnlD
cmVhdGUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmg6CisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6Y3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcik6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFnLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5jcHAuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlU
YWc6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWc6OkpTV2ViQXNzZW1ibHlUYWcp
OgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmguCisg
ICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ondhc21U
b0pTKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3Iu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yOjpXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6OldlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6V2Vi
QXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpnZXRFeGNlcHRpb24p
OgorICAgICAgICAoSlNDOjpnZXRUYWcpOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5
cGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvci5oLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6Oldl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1wbCk6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFnQ29uc3RydWN0
b3I6OmNyZWF0ZVRhZyk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3I6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6
V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJs
eVRhZ0NvbnN0cnVjdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFz
c2VtYmx5VGFnUHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5
VGFnUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhZ1Byb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWdQcm90
b3R5cGU6OldlYkFzc2VtYmx5VGFnUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6Z2V0VGFnKToK
KyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiB3YXNt
L2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaC4KKyAgICAgICAgKiB3
YXNtL3dhc20uanNvbjoKKwogMjAyMS0xMC0wNiAgWGFuIEzDs3BleiAgPHhhbkBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtKU0NdWzMyYml0XSBSZW1vdmUgYSBidW5jaCBvZiBjb21waWxlciB3YXJu
aW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGIzMmMzMGYxMTBmNmEy
OWUyYzgxNmY4N2M1NTZhMTJmZGJlMGQ2YzguLmZjZjBkOWI2YmRmYjhhYzhhMWIzMjU1N2Q0YTE5
ZDFlMmZkMDI2Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEyMiw2
ICsxMjIsOCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfT0JKRUNUX0xVVF9TT1VSQ0VTCiAgICAgd2Fz
bS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JDb25zdHJ1Y3Rvci5jcHAKICAgICB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9y
UHJvdG90eXBlLmNwcAorICAgIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ci5jcHAKKyAgICB3YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcAogICAg
IHdhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAKICAgICB3YXNtL2pzL1dl
YkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0
YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtMTM2LDYgKzEzOCw4IEBAIHNldChKYXZhU2NyaXB0Q29y
ZV9PQkpFQ1RfTFVUX1NPVVJDRVMKICAgICB3YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9y
UHJvdG90eXBlLmNwcAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNw
cAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAKKyAgICB3YXNtL2pz
L1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwCisgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRh
Z1Byb3RvdHlwZS5jcHAKICkKIAogc2V0KEphdmFTY3JpcHRDb3JlX0ZSQU1FV09SS1MKQEAgLTYw
Myw2ICs2MDcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVS
UwogCiAgICAgYjMvQjNDb21tb24uaAogICAgIGIzL0IzVHlwZS5oCisgICAgYjMvQjNWYWx1ZVJl
cC5oCiAKICAgICBiaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuaAogICAgIGJpbmRpbmdzL1Nj
cmlwdE9iamVjdC5oCkBAIC0xMjIwLDYgKzEyMjUsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5o
CiAgICAgd2FzbS9XYXNtRm9ybWF0LmgKICAgICB3YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5o
CisgICAgd2FzbS9XYXNtSGFuZGxlckluZm8uaAogICAgIHdhc20vV2FzbUluZGV4T3JOYW1lLmgK
ICAgICB3YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAogICAgIHdhc20vV2FzbU1lbW9yeS5o
CkBAIC0xMjI4LDEyICsxMjM0LDE0IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgd2FzbS9XYXNtTW9kdWxlLmgKICAgICB3YXNtL1dhc21OYW1lLmgK
ICAgICB3YXNtL1dhc21OYW1lU2VjdGlvbi5oCisgICAgd2FzbS9XYXNtT1NSRW50cnlEYXRhLmgK
ICAgICB3YXNtL1dhc21QYWdlQ291bnQuaAogICAgIHdhc20vV2FzbVNlY3Rpb25zLmgKICAgICB3
YXNtL1dhc21TaWduYXR1cmUuaAogICAgIHdhc20vV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmgKICAg
ICB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuaAogICAgIHdhc20vV2FzbVRpZXJVcENvdW50LmgK
KyAgICB3YXNtL1dhc21WYWx1ZUxvY2F0aW9uLmgKIAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJs
eS5oCiAgICAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggMjg4
NWI1MTAxN2NjMWFlM2Q4OTJlZjNjNWYyN2E0YjEyMzc1Mzg0Mi4uMDZiMjE3NTEyYzZmYmMyZDg1
MjcyNGFhYTc2ZmE1Nzk0ZTNkYWQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTE5Nyw2ICsxOTcsOCBAQCAk
KFBST0pFQ1RfRElSKS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQogJChQUk9KRUNUX0RJ
Uikvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJB
c3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9q
cy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAKKyQoUFJPSkVDVF9ESVIpL3dh
c20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAKKyQoUFJPSkVDVF9ESVIp
L3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUuY3BwCiAkKFBST0pFQ1RfRElS
KS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElS
KS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcAogJChQUk9KRUNUX0RJUikv
d2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0yMTEsNiArMjEz
LDggQEAgJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0
cnVjdG9yLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJv
clByb3RvdHlwZS5jcHAKICQoUFJPSkVDVF9ESVIpL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmNwcAorJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVj
dG9yLmNwcAorJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5j
cHAKICQoUFJPSkVDVF9ESVIpL3dhc20vd2FzbS5qc29uCiAkKFBST0pFQ1RfRElSKS95YXJyL2Ny
ZWF0ZV9yZWdleF90YWJsZXMKICQoUFJPSkVDVF9ESVIpL3lhcnIvZ2VuZXJhdGVZYXJyQ2Fub25p
Y2FsaXplVW5pY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRT
b3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRT
b3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDJhZDIxMzFjNTg2NjliZDA1NzVjN2FmNDBh
NmM0MjdhNTk0ZjVjM2UuLmNiMDVkODIxNjJhZDljNGNmZjY0Y2ExOGNhZWFlMTg3MWJlYzZmNjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQu
eGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtb3V0
cHV0LnhjZmlsZWxpc3QKQEAgLTgyLDYgKzgyLDggQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dhc21MTEludEdlbmVyYXRvcklubGluZXMuaAog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dhc21P
cHMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3Jl
L1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmgKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseUNvbXBpbGVF
cnJvclByb3RvdHlwZS5sdXQuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IubHV0LmgKKyQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3Nl
bWJseUV4Y2VwdGlvblByb3RvdHlwZS5sdXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0b3IubHV0
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9X
ZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZS5sdXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5sdXQuaApAQCAtOTYsNiArOTgsOCBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5
UnVudGltZUVycm9yUHJvdG90eXBlLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2Vi
QXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IubHV0LmgK
KyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJB
c3NlbWJseVRhZ1Byb3RvdHlwZS5sdXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQppbmRleCBlY2JjZTY3Zjc4YzAwMzRjMTY2ZjUwZDU4OTJhNmYwOGM1ZGE0
MGQ2Li43ODk3NTZmMTBmOGJkYjgwYzUyZjRiZTk4MGY1M2Y0OTJhMmQxZDRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjAzLDYgKzIwMyw4IEBAIE9C
SkVDVF9MVVRfSEVBREVSUyA9IFwKICAgICBUZW1wb3JhbFRpbWVab25lUHJvdG90eXBlLmx1dC5o
IFwKICAgICBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5sdXQuaCBcCisgICAgV2ViQXNzZW1ibHlF
eGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaCBcCisgICAgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90
b3R5cGUubHV0LmggXAogICAgIFdlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0b3IubHV0LmggXAog
ICAgIFdlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmx1dC5oIFwKICAgICBXZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IubHV0LmggXApAQCAtMjE3LDYgKzIxOSw4IEBAIE9CSkVDVF9MVVRf
SEVBREVSUyA9IFwKICAgICBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5sdXQuaCBc
CiAgICAgV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBXZWJBc3NlbWJs
eVRhYmxlUHJvdG90eXBlLmx1dC5oIFwKKyAgICBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmx1
dC5oIFwKKyAgICBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5sdXQuaCBcCiAjCiAKICQoT0JKRUNU
X0xVVF9IRUFERVJTKTogJS5sdXQuaCA6ICUuY3BwICQoSmF2YVNjcmlwdENvcmUpL2NyZWF0ZV9o
YXNoX3RhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhjMzU1NDUwZDI0ZjY5
YThjOTE4ZmJkMzkwNWI0MmJjYjk1MDc5MzguLjg4ODliMTBmZjIyN2FjMTc0OTE1YzFhZDU3MWVj
MzMzYTdhMWNhNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NjMsNyArNjYz
LDcgQEAKIAkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNjFCREFDREFD
MDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLzsgfTsKIAkJMEZFQzg1NDIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi87IH07
CiAJCTBGRUM4NTQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGQTFCREFDREFDMDA4MEZGNzQg
LyogQjNWYWx1ZS5oICovOyB9OwotCQkwRkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1
ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLzsgfTsKKwkJMEZFQzg1NDcx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVl
UmVwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZFQzg1NkUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3Jp
bmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NTQ5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmgg
Ki87IH07CiAJCTBGRUM4NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRCMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJBcmcuaCAqLzsgfTsKIAkJMEZFQzg1NzIxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi87IH07CkBA
IC03OTYsNiArNzk2LDcgQEAKIAkJMTQ3ODI5N0IxMzc5RThBODAwQTdDMkEzIC8qIEhhbmRsZVR5
cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDZG
QTVBODEzNzhGNkIwMDAzNjI3QTMgLyogSGFuZGxlVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQg
LyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0N0I4M0FBMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVk
VHJhbnNpdGlvbk9wdGltaXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNs
b3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0N0I4
NDYyMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDg1MjFEODI2RUFFQkZFMDBDQzFE
MUEgLyogV2FzbUhhbmRsZXJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDg1MjFENzI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZv
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4
NkE4QzAyNEFCRUQ0ODAwNzM5MjJEIC8qIEpTTG9ja1JlZlByaXZhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODZBOEJGMjRBQkVEM0MwMDczOTIy
RCAvKiBKU0xvY2tSZWZQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQ4NzRBRTYxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODc0QUUyMTVF
QkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4QTdCRjAxQjgyOTc1QTAwMkQ5MTU3IC8qIElubGluZUNh
bGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQ4QTdCRUUxQjgyOTc1QTAwMkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04MjcsNiArODI4LDEzIEBA
CiAJCTE0Q0E5NThCMTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNENBOTU4QTE2
QUI1MERFMDA5MzhBMDYgLyogU3RhdGljUHJvcGVydHlBbmFseXplci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0Q0E5NThEMTZBQjUwRkEwMDkz
OEEwNiAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDQTk1OEMxNkFCNTBGQTAwOTM4QTA2IC8qIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTREMDFBNzcyMUZCMzUxRjAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNl
UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0RDAxQTc2MjFGQjM1MDMwMEJDNTRFOSAvKiBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLmggKi87
IH07CisJCTE0RDAxQkU2MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ0NvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQw
MUJEQTI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oICovOyB9
OworCQkxNEQwMUJFNzI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkRC
MjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oICovOyB9OworCQkx
NEQwMUJFOTI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkRE
MjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oICovOyB9
OworCQkxNEQwMUJFQzI2REVFRjM4MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFCRTAyNkRFRUYz
NzAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlUYWcuaCAqLzsgfTsKKwkJMTREMDFCRUQyNkRFRUYz
ODAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQkUxMjZERUVGMzgwMENBRTBEMCAvKiBK
U1dlYkFzc2VtYmx5RXhjZXB0aW9uLmggKi87IH07CisJCTE0RDAxQkVGMjZERUVGMzgwMENBRTBE
MCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQwMUJFMzI2REVFRjM4MDBDQUUwRDAgLyog
V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oICovOyB9OworCQkxNEQwMUJGNTI2REVF
RjUzMDBDQUUwRDAgLyogV2FzbVRhZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTREMDFCRjMyNkRFRUY1MjAwQ0FFMEQwIC8qIFdhc21UYWcuaCAqLzsg
fTsKIAkJMTREMkYzREIxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQyRjNEOTEzOUY0QkUyMDA0
OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNERGMDREQTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVy
dHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTRERjA0RDkxNkIzOTk2RDAwMTZBNTEzIC8qIFN0YXRpY1Byb3BlcnR5QW5hbHlzaXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNEU4NEY5
RjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEU4NEY5QTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Js
b2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTEyNjQsNyArMTI3Miw3IEBACiAJCTg2MjgxRUYwMjVCNjE2MDAwMDM2NzAwNCAvKiBDaGVja1By
aXZhdGVCcmFuZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2MjgxRUVGMjVCNjE2MDAwMDM2NzAwNCAvKiBDaGVja1ByaXZhdGVCcmFuZFZh
cmlhbnQuaCAqLzsgfTsKIAkJODYyODFFRjQyNUI2MUFGMDAwMzY3MDA0IC8qIENoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NjI4MUVGMzI1QjYxQUYwMDAzNjcwMDQgLyogQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMu
aCAqLzsgfTsKIAkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYz
QjIzREYwRkM2MEU2MjAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTg2M0ZCQzVBMjVCMDkz
QjkwMEY2QzkzMCAvKiBXYXNtVmFsdWVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYzRkJDNTgyNUIwOTNCOTAwRjZDOTMwIC8qIFdhc21W
YWx1ZUxvY2F0aW9uLmggKi87IH07CisJCTg2M0ZCQzVBMjVCMDkzQjkwMEY2QzkzMCAvKiBXYXNt
VmFsdWVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODYzRkJDNTgyNUIwOTNCOTAwRjZDOTMwIC8qIFdhc21WYWx1ZUxvY2F0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY1QTMwRjEx
MzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjVBMzBGMDEzNTAwN0UxMDBDREI0OUUgLyog
SlNDSlNWYWx1ZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk4NjVEQTBDNTI1Qjg5NTc0MDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5k
VmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODY1REEwQzQyNUI4OTU3NDAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFZhcmlhbnQuaCAqLzsg
fTsKIAkJODY1REEwQzgyNUI4OTYwQzAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFN0YXR1cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY1REEwQzcy
NUI4OTYwQzAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFN0YXR1cy5oICovOyB9OwpAQCAtMTkz
Nyw3ICsxOTQ1LDcgQEAKIAkJRTNCRkE1RDAyMUU4NTNBMTAwOUMwRUJBIC8qIERGR0Rlc2lyZWRH
bG9iYWxQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTNCRkE1Q0QyMUU4NTNBMTAwOUMwRUJBIC8qIERGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0
eS5oICovOyB9OwogCQlFM0JGRDBCQzFEQUY4MDhFMDA2NURFQTIgLyogQWNjZXNzQ2FzZVNuaXBw
ZXRQYXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUzQkZEMEJBMURBRjgwN0MwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5oICov
OyB9OwogCQlFM0MyOTVERDFFRDJDQkRBMDBEMzAxNkYgLyogT2JqZWN0UHJvcGVydHlDaGFuZ2VB
ZGFwdGl2ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzQzI5NURDMUVEMkNCQUEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5n
ZUFkYXB0aXZlV2F0Y2hwb2ludC5oICovOyB9OwotCQlFM0M2OTRCMzIzMDI2ODc3MDA2RkJFNDIg
LyogV2FzbU9TUkVudHJ5RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTNDNjk0QjEyMzAyNjg3MzAwNkZCRTQyIC8qIFdhc21PU1JFbnRyeURhdGEu
aCAqLzsgfTsKKwkJRTNDNjk0QjMyMzAyNjg3NzAwNkZCRTQyIC8qIFdhc21PU1JFbnRyeURhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQzY5NEIx
MjMwMjY4NzMwMDZGQkU0MiAvKiBXYXNtT1NSRW50cnlEYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTNDNzNBOTEyNUJGQTczQjAwRUZFMzAz
IC8qIFdhc21TdHJlYW1pbmdQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFM0M3M0E5MDI1QkZBNzM0MDBFRkUzMDMgLyogV2FzbVN0cmVhbWluZ1Bs
YW4uaCAqLzsgfTsKIAkJRTNDNzlDQUIxREI5QTREQzAwRDFFQ0E0IC8qIERPTUpJVEVmZmVjdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNDNzlDQUEx
REI5QTRENjAwRDFFQ0E0IC8qIERPTUpJVEVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzQzhFRDQzMjNBMURCQ0IwMDEzMTk1OCAvKiBJ
c29JbmxpbmVkSGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFM0M4RUQ0MjIzQTFEQkM1MDAxMzE5NTggLyogSXNvSW5saW5lZEhlYXBD
ZWxsVHlwZS5oICovOyB9OwpAQCAtMzQ2MSw2ICszNDY5LDggQEAKIAkJMTQ4MkI3OEEwQTQzMDVB
QjAwNTE3Q0ZDIC8qIEFQSUNhc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QVBJQ2FzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDgyQjdFMTBBNDMwNzYw
MDA1MTdDRkMgLyogSlNPYmplY3RSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNPYmplY3RSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4MkI3RTIw
QTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0UmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTT2JqZWN0UmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMTQ4NTIxRDUyNkVBRUJERjAwQ0MxRDFBIC8qIFdhc21IYW5kbGVySW5mby5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXYXNtSGFuZGxlckluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxNDg1MjFENzI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21IYW5kbGVySW5mby5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDg2QThCRTI0QUJFRDNCMDA3MzkyMkQgLyogSlNM
b2NrUmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTG9ja1JlZi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0ODZBOEJGMjRBQkVEM0MwMDczOTIyRCAvKiBKU0xvY2tSZWZQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTG9ja1JlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4NzRBRTExNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTY29wZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTQ0LDYgKzM1NTQsMjAgQEAKIAkJMTRDQzNCQTIy
MTM4QTIzODAwMkQ1OEI2IC8qIEluc3RydWN0aW9uU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluc3RydWN0aW9uU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0RDAxQTc1MjFGQjM1MDMwMEJDNTRFOSAvKiBKU1NjcmlwdFNvdXJjZVByb3Zp
ZGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTREMDFBNzYyMUZCMzUwMzAwQkM1NEU5IC8q
IEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTY3JpcHRTb3VyY2VQ
cm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJEQTI2REVFRjM3
MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmg7IHBhdGggPSBqcy9X
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTE0RDAxQkRCMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5o
OyBwYXRoID0ganMvV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMTREMDFCREMyNkRFRUYzNzAwQ0FFMEQwIC8qIEpTV2ViQXNzZW1ibHlFeGNl
cHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3Nl
bWJseUV4Y2VwdGlvbi5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCREQyNkRFRUYzNzAwQ0FFMEQwIC8q
IFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmg7IHBhdGggPSBqcy9XZWJB
c3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxNEQwMUJERTI2REVFRjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVRhZ0Nv
bnN0cnVjdG9yLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJERjI2REVFRjM3MDBDQUUwRDAgLyog
V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1i
bHlUYWdQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUJF
MDI2REVFRjM3MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5VGFnLmg7IHBhdGggPSBqcy9KU1dlYkFzc2Vt
Ymx5VGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQkUxMjZERUVGMzgw
MENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaDsgcGF0aCA9IGpzL0pTV2ViQXNz
ZW1ibHlFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRTIy
NkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJv
dG90eXBlLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFCRTMyNkRFRUYzODAwQ0FFMEQwIC8q
IFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oOyBwYXRoID0ganMv
V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNEQwMUJFNDI2REVFRjM4MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseVRhZy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5VGFnLmNw
cDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlUYWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNEQwMUJFNTI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25D
b25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJB
c3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5RXhj
ZXB0aW9uQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQw
MUJGMjI2REVFRjUyMDBDQUUwRDAgLyogV2FzbVRhZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXYXNtVGFnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTREMDFCRjMyNkRFRUY1MjAwQ0FFMEQwIC8qIFdhc21UYWcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2FzbVRhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkU3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8qIENMb29wU3RhY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0xvb3BTdGFjay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IHRlc3RhcGkuanM7IHBhdGggPSBB
UEkvdGVzdHMvdGVzdGFwaS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcxNTUs
NiArNzE3OSw4IEBACiAJCQkJMTQ4N0NFMTYyMzc3NDEwMDAwNDQ0MjlDIC8qIFdhc21HZW5lcmF0
b3JUcmFpdHMuaCAqLywKIAkJCQlFMzgzNTAwODIzOTBEOTM3MDAzNjMxNkQgLyogV2FzbUdsb2Jh
bC5jcHAgKi8sCiAJCQkJRTM4MzUwMDkyMzkwRDkzNzAwMzYzMTZEIC8qIFdhc21HbG9iYWwuaCAq
LywKKwkJCQkxNDg1MjFENTI2RUFFQkRGMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmNwcCAq
LywKKwkJCQkxNDg1MjFENzI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggKi8s
CiAJCQkJQUQ4RkYzOTYxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5jcHAgKi8s
CiAJCQkJQUQ4RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5oICovLAog
CQkJCUFENUMzNkRFMUY2OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuY3BwICovLApAQCAt
NzIxMiw2ICs3MjM4LDggQEAKIAkJCQlFM0M3M0E5MDI1QkZBNzM0MDBFRkUzMDMgLyogV2FzbVN0
cmVhbWluZ1BsYW4uaCAqLywKIAkJCQlBRDVDMzZFMzFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmNwcCAqLywKIAkJCQlBRDVDMzZFNDFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmgg
Ki8sCisJCQkJMTREMDFCRjIyNkRFRUY1MjAwQ0FFMEQwIC8qIFdhc21UYWcuY3BwICovLAorCQkJ
CTE0RDAxQkYzMjZERUVGNTIwMENBRTBEMCAvKiBXYXNtVGFnLmggKi8sCiAJCQkJNTI1MEQyQ0Yx
RThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuY3BwICovLAogCQkJCTUyNTBEMkQwMUU4REEw
NUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggKi8sCiAJCQkJRTNDNjk0QjIyMzAyNjg3NDAwNkZC
RTQyIC8qIFdhc21UaWVyVXBDb3VudC5jcHAgKi8sCkBAIC05MDk3LDYgKzkxMjUsOCBAQAogCQkJ
CUFEOUU4NTJFMUU4QTBDNkUwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggKi8s
CiAJCQkJQUQyRkNCQTYxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJy
b3IuY3BwICovLAogCQkJCUFEMkZDQkE3MURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yLmggKi8sCisJCQkJMTREMDFCREMyNkRFRUYzNzAwQ0FFMEQwIC8qIEpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24uY3BwICovLAorCQkJCTE0RDAxQkUxMjZERUVGMzgwMENBRTBEMCAv
KiBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmggKi8sCiAJCQkJRTNCRjNDNEMyMzkwRDFFMzAwOEJD
NzUyIC8qIEpTV2ViQXNzZW1ibHlHbG9iYWwuY3BwICovLAogCQkJCUUzQkYzQzRCMjM5MEQxRTIw
MDhCQzc1MiAvKiBKU1dlYkFzc2VtYmx5R2xvYmFsLmggKi8sCiAJCQkJNzk2RkI0MzkxREZGOEMz
RjAwMzlDOTVEIC8qIEpTV2ViQXNzZW1ibHlIZWxwZXJzLmggKi8sCkBAIC05MTEyLDEyICs5MTQy
LDE4IEBACiAJCQkJQUQyRkNCQUQxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3IuaCAqLywKIAkJCQlBRDJGQ0JBRTFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseVRhYmxlLmNwcCAqLywKIAkJCQlBRDJGQ0JBRjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJB
c3NlbWJseVRhYmxlLmggKi8sCisJCQkJMTREMDFCRTQyNkRFRUYzODAwQ0FFMEQwIC8qIEpTV2Vi
QXNzZW1ibHlUYWcuY3BwICovLAorCQkJCTE0RDAxQkUwMjZERUVGMzcwMENBRTBEMCAvKiBKU1dl
YkFzc2VtYmx5VGFnLmggKi8sCiAJCQkJQUREMDlBRUYxRjVGNjIzRjAwMTMxM0MyIC8qIFdhc21U
b0pTLmNwcCAqLywKIAkJCQlBREQwOUFFRTFGNUY2MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMuaCAq
LywKIAkJCQlBRDJGQ0JCMDFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJy
b3JDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQUQyRkNCQjExREI1OERBNDAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCAqLywKIAkJCQlBRDJGQ0JCMjFEQjU4
REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuY3BwICovLAog
CQkJCUFEMkZDQkIzMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclBy
b3RvdHlwZS5oICovLAorCQkJCTE0RDAxQkU1MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJs
eUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQkxNEQwMUJFMzI2REVFRjM4MDBDQUUw
RDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5oICovLAorCQkJCTE0RDAxQkUy
MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAgKi8s
CisJCQkJMTREMDFCREQyNkRFRUYzNzAwQ0FFMEQwIC8qIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJv
dG90eXBlLmggKi8sCiAJCQkJQUQ0OTM3QzkxREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5
RnVuY3Rpb24uY3BwICovLAogCQkJCUFENDkzN0NBMURERDI3MzQwMDc3QzgwNyAvKiBXZWJBc3Nl
bWJseUZ1bmN0aW9uLmggKi8sCiAJCQkJNTIxMzIyNDMxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb25CYXNlLmNwcCAqLywKQEAgLTkxNTIsNiArOTE4OCwxMCBAQAogCQkJCUFE
MkZDQkMxMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuaCAq
LywKIAkJCQlBRDJGQ0JDMjFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3Rv
dHlwZS5jcHAgKi8sCiAJCQkJQUQyRkNCQzMxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
VGFibGVQcm90b3R5cGUuaCAqLywKKwkJCQkxNEQwMUJERTI2REVFRjM3MDBDQUUwRDAgLyogV2Vi
QXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAgKi8sCisJCQkJMTREMDFCREEyNkRFRUYzNzAwQ0FF
MEQwIC8qIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaCAqLywKKwkJCQkxNEQwMUJERjI2REVF
RjM3MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuY3BwICovLAorCQkJCTE0RDAx
QkRCMjZERUVGMzcwMENBRTBEMCAvKiBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oICovLAogCQkJ
CTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmggKi8sCiAJCQkpOwpAQCAtMTA0MDIsNiArMTA0NDIsNyBAQAogCQkJCUFENUMz
NkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRTMxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RDAxQkVEMjZERUVGMzgwMENB
RTBEMCAvKiBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0JG
M0M0RDIzOTBEMUU4MDA4QkM3NTIgLyogSlNXZWJBc3NlbWJseUdsb2JhbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzk2RkI0M0ExREZGOEMzRjAwMzlDOTVEIC8qIEpTV2ViQXNzZW1ibHlIZWxwZXJz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFNTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJB
c3NlbWJseUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNDEwLDYgKzEwNDUxLDcgQEAK
IAkJCQlBRDJGQ0MwNTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1vZHVsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRTkxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkVCMURCNThEQUQwMEIz
RTczNiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0RDAxQkVD
MjZERUVGMzgwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5VGFnLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDJFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1dyYXBwZXJPYmplY3Qu
aCBpbiBIZWFkZXJzICovLApAQCAtMTA4MzcsNiArMTA4NzksNyBAQAogCQkJCTE0NTBGQTFDMjM1
N0JEQkUwMDkzQ0Q0RCAvKiBXYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAog
CQkJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzODM1MDBBMjM5MEQ5M0IwMDM2MzE2RCAvKiBXYXNtR2xvYmFsLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkxNDg1MjFEODI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRs
ZXJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDhGRjM5ODFFQjVCREIyMDA4N0ZGODIgLyog
V2FzbUluZGV4T3JOYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFMjFGNjk5RUMwMDAw
QkNBQUYgLyogV2FzbUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDAwNjU5RTFFQ0FD
ODEyMDAwQ0E5MjYgLyogV2FzbUxpbWl0cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDg2Nyw2ICsx
MDkxMCw3IEBACiAJCQkJRTNBMDUzMUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJlYW1pbmdQ
YXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzQzczQTkxMjVCRkE3M0IwMEVGRTMwMyAvKiBX
YXNtU3RyZWFtaW5nUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RTYxRjY5RUM5MTAw
MEJDQUFGIC8qIFdhc21UYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRjUyNkRFRUY1
MzAwQ0FFMEQwIC8qIFdhc21UYWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyNTBEMkQyMUU4REEw
NUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0U5RTBBRjFF
QUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
RDVDMzZFQzFGNzVBRDdDMDAwQkNBQUYgLyogV2FzbVRvSlMuaCBpbiBIZWFkZXJzICovLApAQCAt
MTA4OTgsNiArMTA5NDIsOCBAQAogCQkJCUFEMkZDQzE2MURCNTlDQjIwMEIzRTczNiAvKiBXZWJB
c3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QUQyRkNCRUYxREI1OERBRDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0MxNzFEQjU5Q0IyMDBCM0U3MzYgLyogV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQkx
NEQwMUJFRjI2REVFRjM4MDBDQUUwRDAgLyogV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMDFCRTkyNkRFRUYzODAwQ0FFMEQwIC8qIFdlYkFz
c2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDQ5MzdENDFE
REQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTIxMzIyNDYxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFM0JGM0M1MzIzOTBEMjA1MDA4QkM3NTIgLyogV2ViQXNzZW1i
bHlHbG9iYWxDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDkyNSw2ICsxMDk3MSw4
IEBACiAJCQkJQUQyRkNDMjAxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25z
dHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkZGMURCNThEQUQwMEIzRTcz
NiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJG
Q0MyMTFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCBp
biBIZWFkZXJzICovLAorCQkJCTE0RDAxQkU2MjZERUVGMzgwMENBRTBEMCAvKiBXZWJBc3NlbWJs
eVRhZ0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUJFNzI2REVFRjM4MDBD
QUUwRDAgLyogV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUy
RjZDMzVFMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0N0EwRTE2RjVDRDAwQjM0NDYwIC8qIFdlYktpdEF2YWls
YWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlEQTAwQTYxQkQ1OTkzMTAwRjQ1NzVDIC8q
IHdrYnVpbHRpbnMucHkgaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApp
bmRleCBhODU5NzNlN2VkY2UxYjgzNzExZTAyOTE5NzJhMzFhNDQ2YWY4NTEwLi5mMDQ0NTFkMDM4
ZGIzMGM3NTFmNDZhOWE0ZDc0ODYzY2I2YjJkODU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CkBAIC0xMDc5LDYgKzEwNzksNyBAQCB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3Bw
CiB3YXNtL1dhc21Gb3JtYXQuY3BwCiB3YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5jcHAKIHdh
c20vV2FzbUdsb2JhbC5jcHAKK3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcAogd2FzbS9XYXNtSW5k
ZXhPck5hbWUuY3BwCiB3YXNtL1dhc21JbnN0YW5jZS5jcHAKIHdhc20vV2FzbUluc3RhbmNlLmgK
QEAgLTExMDUsNiArMTEwNiw3IEBAIHdhc20vV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmNwcAogd2Fz
bS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAogd2FzbS9XYXNtU3RyZWFtaW5nUGxhbi5jcHAKIHdh
c20vV2FzbVRhYmxlLmNwcAord2FzbS9XYXNtVGFnLmNwcAogd2FzbS9XYXNtVGh1bmtzLmNwcAog
d2FzbS9XYXNtVGllclVwQ291bnQuY3BwCiB3YXNtL1dhc21WYWx1ZUxvY2F0aW9uLmNwcApAQCAt
MTExNiw2ICsxMTE4LDcgQEAgd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcAord2FzbS9qcy9KU1dlYkFzc2VtYmx5
RXhjZXB0aW9uLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlMaW5rRXJyb3Iu
Y3BwCkBAIC0xMTIzLDEwICsxMTI2LDEzIEBAIHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5j
cHAKIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvci5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAord2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFnLmNwcAogd2FzbS9qcy9XYXNtVG9KUy5jcHAKIHdhc20vanMvV2Fz
bVRvSlMuaAogd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcAog
d2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAKK3dhc20vanMvV2Vi
QXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAKK3dhc20vanMvV2ViQXNzZW1ibHlFeGNl
cHRpb25Qcm90b3R5cGUuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCiB3YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseUdsb2Jh
bENvbnN0cnVjdG9yLmNwcApAQCAtMTE0NCw2ICsxMTUwLDggQEAgd2FzbS9qcy9XZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVF
cnJvclByb3RvdHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNw
cAogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAord2FzbS9qcy9XZWJBc3Nl
bWJseVRhZ0NvbnN0cnVjdG9yLmNwcAord2FzbS9qcy9XZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5j
cHAKIHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCiAKIHlhcnIvUmVndWxh
ckV4cHJlc3Npb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYgppbmRleCA4Y2M1NTE1NmI1N2FiY2U0OWNlYWI5ODJjMzE0N2E5ODg5ZDE0ZjU2
Li5iZTJlOGM4MTFkNmRkZDBjMTg0YmE1ZWQ0ZDk1NzkzNmZkMjI1OGEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTE4MzksNCArMTgz
OSwzNiBAQCBvcCA6YXRvbWljX2ZlbmNlLAogICAgIGFyZ3M6IHsKICAgICB9CiAKK29wIDp0aHJv
dywKKyAgICBhcmdzOiB7CisgICAgICAgIGV4Y2VwdGlvbkluZGV4OiB1bnNpZ25lZCwKKyAgICAg
ICAgZmlyc3RWYWx1ZTogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0KKworb3AgOnJldGhyb3csCisg
ICAgYXJnczogeworICAgICAgICBleGNlcHRpb246IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9CisK
K29wX2dyb3VwIDpDYXRjaCwKKyAgICBbCisgICAgICAgIDpjYXRjaCwKKyAgICAgICAgOmNhdGNo
X25vX3RscywKKyAgICBdLAorICAgIGFyZ3M6IHsKKyAgICAgICAgZXhjZXB0aW9uSW5kZXg6IHVu
c2lnbmVkLAorICAgICAgICBleGNlcHRpb246IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgYXJn
dW1lbnRDb3VudDogdW5zaWduZWQsCisgICAgICAgIHN0YXJ0T2Zmc2V0OiB1bnNpZ25lZCwKKyAg
ICB9CisKK29wX2dyb3VwIDpDYXRjaEFsbCwKKyAgICBbCisgICAgICAgIDpjYXRjaF9hbGwsCisg
ICAgICAgIDpjYXRjaF9hbGxfbm9fdGxzLAorICAgIF0sCisgICAgYXJnczogeworICAgICAgICBl
eGNlcHRpb246IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9CisKIGVuZF9zZWN0aW9uIDpXYXNtCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCmluZGV4IDAxZGRj
Zjk2OTliNDgwMjlhMWJkOGJlZTQwMzQ5MDQ3OWExZjlkN2YuLjY2ZGYwOTk5ZjIxYjI3NGUwOTk5
YmI1YTM4NTIzNGQxNDUxNWM5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9IYW5kbGVySW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9IYW5kbGVySW5mby5oCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1l
bnVtIGNsYXNzIEhhbmRsZXJUeXBlIHsKK2VudW0gY2xhc3MgSGFuZGxlclR5cGUgOiB1aW50OF90
IHsKICAgICBDYXRjaCA9IDAsCiAgICAgRmluYWxseSA9IDEsCiAgICAgU3ludGhlc2l6ZWRDYXRj
aCA9IDIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1
Y3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCmlu
ZGV4IDY4MGU5NDAxZGM2MWZmNjNkY2I1ZDVlNmY5ZGViZWM0MDY4OGI0NDkuLjUxZjFkMDJlMTgy
NTU4YzljMjkxMmQ4NDBjNTg4MTA0OGNhODAxZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHMgPSBKU09wY29kZVRyYWl0cz4KICAgICBjb25zdCBjaGFy
KiBuYW1lKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBUcmFpdHM6Om9wY29kZU5hbWVz
W29wY29kZUlEKCldOworICAgICAgICByZXR1cm4gVHJhaXRzOjpvcGNvZGVOYW1lc1tvcGNvZGVJ
RDxUcmFpdHM+KCldOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cyA9IEpT
T3Bjb2RlVHJhaXRzPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmNwcAppbmRleCA2M2ZmNGVlY2U2MjZiNWQ4ZGZkZWMwYzcyM2ExY2Q3NDg4NzFiYzVh
Li45ZWRmNTliOTY4NmE1YWQ2Y2VhODM4M2Y3NDMzMzM2MGExOWM2ZDQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtMTMwLDcgKzEz
MCw4IEBAIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgp
IGNvbnN0CiAKIEJ5dGVjb2RlSW5kZXggQ2FsbEZyYW1lOjpieXRlY29kZUluZGV4KCkgY29uc3QK
IHsKLSAgICBBU1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsKKyAgICBpZiAoY2FsbGVlKCkuaXNX
YXNtKCkpCisgICAgICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgpOwog
ICAgIGlmICghY29kZUJsb2NrKCkpCiAgICAgICAgIHJldHVybiBCeXRlY29kZUluZGV4KDApOwog
I2lmIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZS5oCmluZGV4IDFjYWIyMjViY2UwMzhkOGZlNWUxYzQ1ODkwM2ZmMzlkOTU2ZmZm
NGEuLmQ4NjRhMjY4Y2Q3Y2I1MDVhNDEzM2UzNzBjYzMzOWQ5NTg0MjlhNGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTQ0LDYgKzQ0LDEx
IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICBjbGFzcyBDYWxsU2l0ZUluZGV4IHsKICAgICBwdWJs
aWM6CiAgICAgICAgIENhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgQ2FsbFNp
dGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgICAgICA6IG1f
Yml0cyhkZWxldGVkVmFsdWUoKS5iaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgZXhwbGljaXQgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgpCiAgICAgICAgICAgICA6IG1fYml0cyhieXRlY29kZUluZGV4Lm9mZnNldCgpKQpAQCAt
NTcsMTMgKzYyLDI1IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9iaXRzOyB9CiAgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDYWxsU2l0ZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9iaXRzID09
IG90aGVyLm1fYml0czsgfQogCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVy
biBpbnRIYXNoKG1fYml0cyk7IH0KKyAgICAgICAgc3RhdGljIENhbGxTaXRlSW5kZXggZGVsZXRl
ZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoc19pbnZhbGlkSW5kZXggLSAxKTsgfQorICAgICAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgPT0g
ZGVsZXRlZFZhbHVlKCk7IH0KKwogICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1
cm4gbV9iaXRzOyB9CiAgICAgICAgIHN0YXRpYyBDYWxsU2l0ZUluZGV4IGZyb21CaXRzKHVpbnQz
Ml90IGJpdHMpIHsgcmV0dXJuIENhbGxTaXRlSW5kZXgoYml0cyk7IH0KIAogICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBCeXRlY29kZUluZGV4KGJp
dHMoKSk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQzMl90IG1fYml0cyB7IEJ5dGVj
b2RlSW5kZXgoKS5vZmZzZXQoKSB9OworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90
IHNfaW52YWxpZEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwor
CisgICAgICAgIHVpbnQzMl90IG1fYml0cyB7IHNfaW52YWxpZEluZGV4IH07CisgICAgfTsKKwor
ICAgIHN0cnVjdCBDYWxsU2l0ZUluZGV4SGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IENhbGxTaXRlSW5kZXgmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDYWxsU2l0ZUluZGV4JiBhLCBjb25zdCBDYWxs
U2l0ZUluZGV4JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKICAgICB9OwogCiAg
ICAgY2xhc3MgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJbmRleCB7
CkBAIC0zMzIsMyArMzQ5LDE1IEBAIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNGcm9tSlNDb2Rl
KHZvaWQqIHJldHVybkFkZHJlc3MpOwogCiAKIH0gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVt
cGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpDYWxsU2l0ZUluZGV4PiA6IEpTQzo6Q2Fs
bFNpdGVJbmRleEhhc2ggeyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRy
YWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpDYWxsU2l0ZUluZGV4PiA6
IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkNhbGxTaXRlSW5kZXg+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAppbmRleCA5MTI2ZWY1NTlmMzUzMTI1MmViNGRkNTI5ZWRiNDdkM2NlZmFiYTNj
Li45Y2FjNDBhNjYxMmMzMTZhOGVhZjFhYTYyYjg5ZjQxYTU2ZmI0YmQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTUyLDYg
KzUyLDcgQEAKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNN
b2R1bGVSZWNvcmQuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIkxp
dGVyYWxQYXJzZXIuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCkBAIC01
MTIsMTUgKzUxMyw2MyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIG5vdGlmeURlYnVnZ2Vy
T2ZVbndpbmRpbmcoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgIH0KIH0KIAorQ2F0
Y2hJbmZvOjpDYXRjaEluZm8oY29uc3QgSGFuZGxlckluZm8qIGhhbmRsZXIsIENvZGVCbG9jayog
Y29kZUJsb2NrKQoreworICAgIG1fdmFsaWQgPSAhIWhhbmRsZXI7CisgICAgaWYgKG1fdmFsaWQp
IHsKKyAgICAgICAgbV90eXBlID0gaGFuZGxlci0+dHlwZSgpOworI2lmIEVOQUJMRShKSVQpCisg
ICAgICAgIG1fbmF0aXZlQ29kZSA9IGhhbmRsZXItPm5hdGl2ZUNvZGU7CisjZW5kaWYKKworICAg
ICAgICAvLyBoYW5kbGVyLT50YXJnZXQgaXMgbWVhbmluZ2xlc3MgZm9yIGdldHRpbmcgYSBjb2Rl
IG9mZnNldCB3aGVuIGNhdGNoaW5nCisgICAgICAgIC8vIHRoZSBleGNlcHRpb24gaW4gYSBERkcv
RlRMIGZyYW1lLiBUaGlzIGJ5dGVjb2RlIHRhcmdldCBvZmZzZXQgY291bGQgYmUKKyAgICAgICAg
Ly8gc29tZXRoaW5nIHRoYXQncyBpbiBhbiBpbmxpbmVkIGZyYW1lLCB3aGljaCBtZWFucyBhbiBh
cnJheSBhY2Nlc3MKKyAgICAgICAgLy8gd2l0aCB0aGlzIGJ5dGVjb2RlIG9mZnNldCBpbiB0aGUg
bWFjaGluZSBmcmFtZSBpcyB1dHRlcmx5IG1lYW5pbmdsZXNzCisgICAgICAgIC8vIGFuZCBjYW4g
Y2F1c2UgYW4gb3ZlcmZsb3cuIE9TUiBleGl0IHByb3Blcmx5IGV4aXRzIHRvIGhhbmRsZXItPnRh
cmdldAorICAgICAgICAvLyBpbiB0aGUgcHJvcGVyIGZyYW1lLgorICAgICAgICBpZiAoIUpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCisgICAgICAgICAgICBt
X2NhdGNoUENGb3JJbnRlcnByZXRlciA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaGFu
ZGxlci0+dGFyZ2V0KS5wdHIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jYXRjaFBD
Rm9ySW50ZXJwcmV0ZXIgPSBudWxscHRyOworICAgIH0KK30KKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKK0NhdGNoSW5mbzo6Q2F0Y2hJbmZvKGNvbnN0IFdhc206OkhhbmRsZXJJbmZvKiBoYW5k
bGVyLCBjb25zdCBXYXNtOjpDYWxsZWUqIGNhbGxlZSkKK3sKKyAgICBtX3ZhbGlkID0gISFoYW5k
bGVyOworICAgIGlmIChtX3ZhbGlkKSB7CisgICAgICAgIG1fdHlwZSA9IEhhbmRsZXJUeXBlOjpD
YXRjaDsKKyAgICAgICAgbV9uYXRpdmVDb2RlID0gaGFuZGxlci0+bV9uYXRpdmVDb2RlOworICAg
ICAgICBpZiAoY29uc3QgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxl
ZS0+ZnVuY3Rpb25Db2RlQmxvY2soKSkKKyAgICAgICAgICAgIG1fY2F0Y2hQQ0ZvckludGVycHJl
dGVyID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChoYW5kbGVyLT5tX3RhcmdldCkucHRy
KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY2F0Y2hQQ0ZvckludGVycHJldGVyID0g
bnVsbHB0cjsKKyAgICB9Cit9CisjZW5kaWYKKwogY2xhc3MgVW53aW5kRnVuY3RvciB7CiBwdWJs
aWM6Ci0gICAgVW53aW5kRnVuY3RvcihWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgYm9v
bCBpc1Rlcm1pbmF0aW9uLCBDb2RlQmxvY2sqJiBjb2RlQmxvY2ssIEhhbmRsZXJJbmZvKiYgaGFu
ZGxlcikKKyAgICBVbndpbmRGdW5jdG9yKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBi
b29sIGlzVGVybWluYXRpb24sIEpTVmFsdWUgdGhyb3duVmFsdWUsIENvZGVCbG9jayomIGNvZGVC
bG9jaywgQ2F0Y2hJbmZvJiBoYW5kbGVyKQogICAgICAgICA6IG1fdm0odm0pCiAgICAgICAgICwg
bV9jYWxsRnJhbWUoY2FsbEZyYW1lKQogICAgICAgICAsIG1faXNUZXJtaW5hdGlvbihpc1Rlcm1p
bmF0aW9uKQogICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAgICAgLCBtX2hh
bmRsZXIoaGFuZGxlcikKICAgICB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBp
ZiAoIW1faXNUZXJtaW5hdGlvbikgeworICAgICAgICAgICAgaWYgKEpTV2ViQXNzZW1ibHlFeGNl
cHRpb24qIHdhc21FeGNlcHRpb24gPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRp
b24qPihtX3ZtLCB0aHJvd25WYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBtX2NhdGNoYWJsZUZy
b21XYXNtID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX3dhc21UYWcgPSAmd2FzbUV4Y2VwdGlv
bi0+dGFnKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEVycm9ySW5zdGFuY2UqIGVycm9yID0g
anNEeW5hbWljQ2FzdDxFcnJvckluc3RhbmNlKj4obV92bSwgdGhyb3duVmFsdWUpKQorICAgICAg
ICAgICAgICAgIG1fY2F0Y2hhYmxlRnJvbVdhc20gPSBlcnJvci0+aXNDYXRjaGFibGVGcm9tV2Fz
bSgpOworICAgICAgICB9CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0odGhyb3duVmFsdWUp
OworI2VuZGlmCiAgICAgfQogCiAgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShT
dGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CkBAIC01MjksMTkgKzU3OCwzMiBAQCBwdWJsaWM6
CiAgICAgICAgIG1fY2FsbEZyYW1lID0gdmlzaXRvci0+Y2FsbEZyYW1lKCk7CiAgICAgICAgIG1f
Y29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCk7CiAKLSAgICAgICAgbV9oYW5kbGVyID0g
bnVsbHB0cjsKKyAgICAgICAgbV9oYW5kbGVyLm1fdmFsaWQgPSBmYWxzZTsKICAgICAgICAgaWYg
KG1fY29kZUJsb2NrKSB7CiAgICAgICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewotICAg
ICAgICAgICAgICAgIG1faGFuZGxlciA9IGZpbmRFeGNlcHRpb25IYW5kbGVyKHZpc2l0b3IsIG1f
Y29kZUJsb2NrLCBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwotICAgICAgICAgICAgICAg
IGlmIChtX2hhbmRsZXIpCisgICAgICAgICAgICAgICAgbV9oYW5kbGVyID0geyBmaW5kRXhjZXB0
aW9uSGFuZGxlcih2aXNpdG9yLCBtX2NvZGVCbG9jaywgUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5k
bGVyKSwgbV9jb2RlQmxvY2sgfTsKKyAgICAgICAgICAgICAgICBpZiAobV9oYW5kbGVyLm1fdmFs
aWQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICAgICAg
aWYgKHZpc2l0b3ItPmNhbGxlZSgpLmlzQ2VsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byog
anNUb1dhc21JQ0NhbGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KG1fdm0s
IHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpKSkKKyAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUg
PSB2aXNpdG9yLT5jYWxsZWUoKTsKKyAgICAgICAgaWYgKGNhbGxlZS5pc0NlbGwoKSkgeworICAg
ICAgICAgICAgaWYgKGF1dG8qIGpzVG9XYXNtSUNDYWxsZWUgPSBqc0R5bmFtaWNDYXN0PEpTVG9X
YXNtSUNDYWxsZWUqPihtX3ZtLCBjYWxsZWUuYXNDZWxsKCkpKQogICAgICAgICAgICAgICAgIG1f
dm0ud2FzbUNvbnRleHQuc3RvcmUoanNUb1dhc21JQ0NhbGxlZS0+ZnVuY3Rpb24oKS0+cHJldmlv
dXNJbnN0YW5jZShtX2NhbGxGcmFtZSksIG1fdm0uc29mdFN0YWNrTGltaXQoKSk7CisKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtX2NhdGNoYWJsZUZyb21XYXNtICYmIGNhbGxlZS5pc1dhc20o
KSkgeworICAgICAgICAgICAgV2FzbTo6Q2FsbGVlKiB3YXNtQ2FsbGVlID0gY2FsbGVlLmFzV2Fz
bUNhbGxlZSgpOworICAgICAgICAgICAgaWYgKHdhc21DYWxsZWUtPmhhc0V4Y2VwdGlvbkhhbmRs
ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFu
Y2UgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4obV9jYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBleGNlcHRpb25IYW5kbGVySW5kZXggPSBt
X2NhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKKyAgICAgICAgICAgICAgICBtX2hh
bmRsZXIgPSB7IHdhc21DYWxsZWUtPmhhbmRsZXJGb3JJbmRleChqc0luc3RhbmNlLT5pbnN0YW5j
ZSgpLCBleGNlcHRpb25IYW5kbGVySW5kZXgsIG1fd2FzbVRhZyksIHdhc21DYWxsZWUgfTsKKyAg
ICAgICAgICAgICAgICBpZiAobV9oYW5kbGVyLm1fdmFsaWQpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICNl
bmRpZgogCkBAIC01ODgsMTAgKzY1MCwxNCBAQCBwcml2YXRlOgogICAgIENhbGxGcmFtZSomIG1f
Y2FsbEZyYW1lOwogICAgIGJvb2wgbV9pc1Rlcm1pbmF0aW9uOwogICAgIENvZGVCbG9jayomIG1f
Y29kZUJsb2NrOwotICAgIEhhbmRsZXJJbmZvKiYgbV9oYW5kbGVyOworICAgIENhdGNoSW5mbyYg
bV9oYW5kbGVyOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBjb25zdCBXYXNtOjpUYWcq
IG1fd2FzbVRhZyB7IG51bGxwdHIgfTsKKyAgICBib29sIG1fY2F0Y2hhYmxlRnJvbVdhc20geyBm
YWxzZSB9OworI2VuZGlmCiB9OwogCi1ORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJl
dGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uKQorTkVWRVJfSU5MSU5FIENhdGNoSW5mbyBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2
bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKIHsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKQEAgLTYwOSwxNiArNjc1LDEz
IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChWTSYgdm0s
IENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjCiAgICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQo
c2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIC8vIENhbGN1bGF0ZSBhbiBleGNlcHRp
b24gaGFuZGxlciB2UEMsIHVud2luZGluZyBjYWxsIGZyYW1lcyBhcyBuZWNlc3NhcnkuCi0gICAg
SGFuZGxlckluZm8qIGhhbmRsZXIgPSBudWxscHRyOwotICAgIFVud2luZEZ1bmN0b3IgZnVuY3Rv
cih2bSwgY2FsbEZyYW1lLCB2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbiksIGNv
ZGVCbG9jaywgaGFuZGxlcik7CisgICAgQ2F0Y2hJbmZvIGNhdGNoSW5mbzsKKyAgICBVbndpbmRG
dW5jdG9yIGZ1bmN0b3Iodm0sIGNhbGxGcmFtZSwgdm0uaXNUZXJtaW5hdGlvbkV4Y2VwdGlvbihl
eGNlcHRpb24pLCBleGNlcHRpb25WYWx1ZSwgY29kZUJsb2NrLCBjYXRjaEluZm8pOwogICAgIFN0
YWNrVmlzaXRvcjo6dmlzaXQ8U3RhY2tWaXNpdG9yOjpUZXJtaW5hdGVJZlRvcEVudHJ5RnJhbWVJ
c0VtcHR5PihjYWxsRnJhbWUsIHZtLCBmdW5jdG9yKTsKICAgICBpZiAodm0uaGFzQ2hlY2twb2lu
dE9TUlNpZGVTdGF0ZSgpKQogICAgICAgICB2bS5wb3BBbGxDaGVja3BvaW50T1NSU2lkZVN0YXRl
VW50aWwoY2FsbEZyYW1lKTsKIAotICAgIGlmICghaGFuZGxlcikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICByZXR1cm4gaGFuZGxlcjsKKyAgICByZXR1cm4gY2F0Y2hJbmZvOwogfQog
CiB2b2lkIEludGVycHJldGVyOjpub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmgKaW5kZXggMGMzZWZlMTJlNTEwNTM4OGY2Y2YyODUxMWQ5ZWE1
ZTRlYWYzMDdmYy4uNGQ5Njg4ZTVhYThjYTBhNGFkMGY1ZDkwZmRmYWMxNDIwM2M1ODljMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKQEAg
LTQzLDYgKzQzLDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorbmFtZXNwYWNlIFdhc20geworY2xhc3MgQ2FsbGVlOworc3RydWN0IEhhbmRsZXJJbmZv
OworfQorI2VuZGlmCisKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3MgRXZhbEV4ZWN1
dGFibGU7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtNTgsNiArNjUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU1Njb3BlOwogICAgIGNsYXNzIFNvdXJjZUNvZGU7
CiAgICAgY2xhc3MgU3RhY2tGcmFtZTsKKyAgICBlbnVtIGNsYXNzIEhhbmRsZXJUeXBlIDogdWlu
dDhfdDsKICAgICBzdHJ1Y3QgQ2FsbEZyYW1lQ2xvc3VyZTsKICAgICBzdHJ1Y3QgSGFuZGxlcklu
Zm87CiAgICAgc3RydWN0IEluc3RydWN0aW9uOwpAQCAtODEsNiArODksMjQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFN0YWNrRnJhbWVOYXRpdmVDb2RlCiAgICAgfTsKIAorICAgIHN0cnVj
dCBDYXRjaEluZm8geworICAgICAgICBDYXRjaEluZm8oKQorICAgICAgICAgICAgOiBtX3ZhbGlk
KGZhbHNlKQorICAgICAgICB7IH0KKworICAgICAgICBDYXRjaEluZm8oY29uc3QgSGFuZGxlcklu
Zm8qLCBDb2RlQmxvY2sqKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIENhdGNo
SW5mbyhjb25zdCBXYXNtOjpIYW5kbGVySW5mbyosIGNvbnN0IFdhc206OkNhbGxlZSopOworI2Vu
ZGlmCisKKyAgICAgICAgYm9vbCBtX3ZhbGlkOworICAgICAgICBIYW5kbGVyVHlwZSBtX3R5cGU7
CisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+IG1fbmF0aXZlQ29kZTsKKyNlbmRpZgorICAgICAgICBjb25zdCBJbnN0
cnVjdGlvbiogbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXI7CisgICAgfTsKKwogICAgIGNsYXNzIElu
dGVycHJldGVyIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBDYWNoZWRDYWxsOwpAQCAtMTEyLDcgKzEzOCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZvaWQgZ2V0QXJndW1lbnRzRGF0YShDYWxsRnJhbWUqLCBKU0Z1bmN0aW9u
KiYsIHB0cmRpZmZfdCYgZmlyc3RQYXJhbWV0ZXJJbmRleCwgUmVnaXN0ZXIqJiBhcmd2LCBpbnQm
IGFyZ2MpOwogCi0gICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdW53aW5kKFZNJiwg
Q2FsbEZyYW1lKiYsIEV4Y2VwdGlvbiopOworICAgICAgICBORVZFUl9JTkxJTkUgQ2F0Y2hJbmZv
IHVud2luZChWTSYsIENhbGxGcmFtZSomLCBFeGNlcHRpb24qKTsKICAgICAgICAgdm9pZCBub3Rp
ZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiwgRXhjZXB0aW9uKik7CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGRlYnVnKENh
bGxGcmFtZSosIERlYnVnSG9va1R5cGUpOwogICAgICAgICBzdGF0aWMgU3RyaW5nIHN0YWNrVHJh
Y2VBc1N0cmluZyhWTSYsIGNvbnN0IFZlY3RvcjxTdGFja0ZyYW1lPiYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCA1N2Ex
YmRiNmRiZDViMTYwNjkxYzY1NjUwZmMwZDQ1ZGJlODA5ZWFiLi5kYzVlY2NlMDVlZTM5ZmJiZmVi
ZjVkOWIyZGJiM2I5NTZmZDY2YTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApAQCAtMTY2LDIzICsxNjYsMjAgQEAgdm9pZCBT
dGFja1Zpc2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENv
ZGVPcmlnaW4qIGNvZGVPcmkKICAgICBtX2ZyYW1lLm1faW5saW5lQ2FsbEZyYW1lID0gbnVsbHB0
cjsKICNlbmRpZgogCisgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7CisgICAgbV9mcmFtZS5tX2J5dGVjb2RlSW5kZXggPSAhbV9mcmFtZS5jb2RlQmxvY2so
KSA/IEJ5dGVjb2RlSW5kZXgoMCkKKyAgICAgICAgOiBjb2RlT3JpZ2luID8gY29kZU9yaWdpbi0+
Ynl0ZWNvZGVJbmRleCgpCisgICAgICAgIDogY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCk7CisK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgaWYgKGNhbGxGcmFtZS0+aXNBbnlXYXNtQ2Fs
bGVlKCkpIHsKICAgICAgICAgbV9mcmFtZS5tX2lzV2FzbUZyYW1lID0gdHJ1ZTsKICAgICAgICAg
bV9mcmFtZS5tX2NvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgICAgIG1fZnJhbWUubV9ieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwogCiAgICAgICAgIGlmIChtX2ZyYW1lLm1fY2FsbGVl
LmlzV2FzbSgpKQogICAgICAgICAgICAgbV9mcmFtZS5tX3dhc21GdW5jdGlvbkluZGV4T3JOYW1l
ID0gbV9mcmFtZS5tX2NhbGxlZS5hc1dhc21DYWxsZWUoKS0+aW5kZXhPck5hbWUoKTsKLQotICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgbV9mcmFtZS5tX2J5dGVjb2RlSW5kZXggPSAhbV9m
cmFtZS5jb2RlQmxvY2soKSA/IEJ5dGVjb2RlSW5kZXgoMCkKLSAgICAgICAgOiBjb2RlT3JpZ2lu
ID8gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpCi0gICAgICAgIDogY2FsbEZyYW1lLT5ieXRl
Y29kZUluZGV4KCk7Ci0KIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4IGVmMmZjYjQyZjM1ZmU3MmU0
NGRmM2UwMjI0YjJlOTA4YjI1NWVlOTguLmE5MWE5ZGQ5N2FiZWU4NzQ4ZDA3NjdjMzIzYWVjYThk
NDk4ZWI0YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAKQEAgLTcwNCw5ICs3MDQsNDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmEKICNlbmRp
ZgogCiAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7Ci0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkp
LCBzY3JhdGNoKTsKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXJJbXBsKHNjcmF0Y2gsIHNraXBMaXN0KTsKIAotICAgIExvYWRSZWdTcG9vbGVy
IHNwb29sZXIoKnRoaXMsIHNjcmF0Y2gpOworICAgIC8vIFJlc3RvcmUgdGhlIGNhbGxlZSBzYXZl
IHZhbHVlIG9mIHRoZSBzY3JhdGNoLgorICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxD
YWxsZWVTYXZlcy0+YXQoc2NyYXRjaEdQUkVudHJ5SW5kZXgpOworICAgIEFTU0VSVCghZG9udFJl
c3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSk7CisgICAgQVNTRVJUKGVudHJ5LnJlZygp
LmlzR1BSKCkpOworICAgIEFTU0VSVChzY3JhdGNoID09IGVudHJ5LnJlZygpLmdwcigpKTsKKyNp
ZiBDUFUoQVJNNjQpCisgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeTIgPSBhbGxDYWxsZWVTYXZl
cy0+YXQoc2NyYXRjaEdQUkVudHJ5SW5kZXggKyAxKTsKKyAgICBBU1NFUlRfVU5VU0VEKGVudHJ5
MiwgIWRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRyeTIucmVnKCkpKTsKKyAgICBBU1NFUlQo
ZW50cnkyLnJlZygpLmlzR1BSKCkpOworICAgIEFTU0VSVCh1bnVzZWROZXh0U2xvdEdQUiA9PSBl
bnRyeTIucmVnKCkuZ3ByKCkpOworICAgIGxvYWRQYWlyNjQoc2NyYXRjaCwgVHJ1c3RlZEltbTMy
KGVudHJ5Lm9mZnNldCgpKSwgc2NyYXRjaCwgdW51c2VkTmV4dFNsb3RHUFIpOworI2Vsc2UKKyAg
ICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgZW50cnkub2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyNl
bmRpZgorCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyNlbmRpZiAv
LyBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKK30KKwordm9pZCBBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcihHUFJSZWcgdm1HUFIsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworI2lmIE5VTUJFUl9PRl9D
QUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorICAgIGxvYWRQdHIoQWRkcmVzcyh2bUdQUiwgVk06
OnRvcEVudHJ5RnJhbWVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIHJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoc2NyYXRjaEdQUiwgUmVn
aXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odm1H
UFIpOworI2VuZGlmIC8vIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorfQor
Cit2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgZW50cnlGcmFtZUdQUiwgY29uc3QgUmVnaXN0
ZXJTZXQmIHNraXBMaXN0KQoreworI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJT
ID4gMAorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lz
dGVyc0J1ZmZlck9mZnNldCgpKSwgZW50cnlGcmFtZUdQUik7CisKKyAgICBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0
ZXJPZmZzZXRzKCk7CisgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVz
LT5zaXplKCk7CisKKyAgICBMb2FkUmVnU3Bvb2xlciBzcG9vbGVyKCp0aGlzLCBlbnRyeUZyYW1l
R1BSKTsKIAogICAgIC8vIFJlc3RvcmUgYWxsIGNhbGxlZSBzYXZlcyBleGNlcHQgZm9yIHRoZSBz
Y3JhdGNoLgogICAgIHVuc2lnbmVkIGkgPSAwOwpAQCAtNzI4LDIzICs3NjYsOSBAQCB2b2lkIEFz
c2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcihFbnRyeUZyYQogICAgIH0KICAgICBzcG9vbGVyLmZpbmFsaXplRlBSKCk7CiAKLSAg
ICAvLyBSZXN0b3JlIHRoZSBjYWxsZWUgc2F2ZSB2YWx1ZSBvZiB0aGUgc2NyYXRjaC4KLSAgICBS
ZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KHNjcmF0Y2hHUFJFbnRy
eUluZGV4KTsKLSAgICBBU1NFUlQoIWRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWco
KSkpOwotICAgIEFTU0VSVChlbnRyeS5yZWcoKS5pc0dQUigpKTsKLSAgICBBU1NFUlQoc2NyYXRj
aCA9PSBlbnRyeS5yZWcoKS5ncHIoKSk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgIFJlZ2lzdGVyQXRP
ZmZzZXQgZW50cnkyID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KHNjcmF0Y2hHUFJFbnRyeUluZGV4ICsg
MSk7Ci0gICAgQVNTRVJUX1VOVVNFRChlbnRyeTIsICFkb250UmVzdG9yZVJlZ2lzdGVycy5nZXQo
ZW50cnkyLnJlZygpKSk7Ci0gICAgQVNTRVJUKGVudHJ5Mi5yZWcoKS5pc0dQUigpKTsKLSAgICBB
U1NFUlQodW51c2VkTmV4dFNsb3RHUFIgPT0gZW50cnkyLnJlZygpLmdwcigpKTsKLSAgICBsb2Fk
UGFpcjY0KHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihlbnRyeS5vZmZzZXQoKSksIHNjcmF0Y2gsIHVu
dXNlZE5leHRTbG90R1BSKTsKLSNlbHNlCi0gICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gsIGVu
dHJ5Lm9mZnNldCgpKSwgc2NyYXRjaCk7Ci0jZW5kaWYKLQogI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0odG9wRW50cnlGcmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKHZtR1BSKTsKKyAgICBVTlVTRURf
UEFSQU0oc2tpcExpc3QpOwogI2VuZGlmIC8vIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNU
RVJTID4gMAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAppbmRleCAwZDI1M2Q5ODhlYzI4N2M4Yzk3YjU2ZDVhODc0MTVmMTE2MWI1OGNiLi45YTQ3OWY2
NzBiNmQ2ZWQ5MWQ2ODk5OGI5ZjkzYmYxMDZkZTdmYTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTQxMyw2ICs0MTMsOCBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKEVudHJ5RnJhbWUqJik7CisgICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSUmVnIHZtR1BSLCBHUFJSZWcgc2NyYXRj
aEdQUik7CisgICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBlbnRyeUZyYW1lLCBjb25zdCBSZWdpc3RlclNldCYgc2tp
cExpc3QpOwogCiAgICAgdm9pZCBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1l
T3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJiwgY29u
c3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEV4Y2VwdGlvbnMuY3BwCmluZGV4IDZkNTgzYTQ4OWVkNTMwMzE4Y2UzMDk2YzY2YjAyZTdkMWM1
OGE0YmMuLmI4NmU5YTQxMDNjODUwNmMzZmRiYmFjNTRkN2U5NGU2NjYwYWFkOTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApAQCAtNTQsMjEgKzU0LDE0
IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lKQogCiAg
ICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKICAgICBSRUxFQVNF
X0FTU0VSVChleGNlcHRpb24pOwotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gdm0uaW50ZXJw
cmV0ZXItPnVud2luZCh2bSwgY2FsbEZyYW1lLCBleGNlcHRpb24pOyAvLyBUaGlzIG1heSB1cGRh
dGUgY2FsbEZyYW1lLgorICAgIENhdGNoSW5mbyBoYW5kbGVyID0gdm0uaW50ZXJwcmV0ZXItPnVu
d2luZCh2bSwgY2FsbEZyYW1lLCBleGNlcHRpb24pOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZy
YW1lLgogCiAgICAgdm9pZCogY2F0Y2hSb3V0aW5lOwogICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
YXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBudWxscHRyOwotICAgIGlmIChoYW5kbGVyKSB7Ci0gICAg
ICAgIC8vIGhhbmRsZXItPnRhcmdldCBpcyBtZWFuaW5nbGVzcyBmb3IgZ2V0dGluZyBhIGNvZGUg
b2Zmc2V0IHdoZW4gY2F0Y2hpbmcKLSAgICAgICAgLy8gdGhlIGV4Y2VwdGlvbiBpbiBhIERGRy9G
VEwgZnJhbWUuIFRoaXMgYnl0ZWNvZGUgdGFyZ2V0IG9mZnNldCBjb3VsZCBiZQotICAgICAgICAv
LyBzb21ldGhpbmcgdGhhdCdzIGluIGFuIGlubGluZWQgZnJhbWUsIHdoaWNoIG1lYW5zIGFuIGFy
cmF5IGFjY2VzcwotICAgICAgICAvLyB3aXRoIHRoaXMgYnl0ZWNvZGUgb2Zmc2V0IGluIHRoZSBt
YWNoaW5lIGZyYW1lIGlzIHV0dGVybHkgbWVhbmluZ2xlc3MKLSAgICAgICAgLy8gYW5kIGNhbiBj
YXVzZSBhbiBvdmVyZmxvdy4gT1NSIGV4aXQgcHJvcGVybHkgZXhpdHMgdG8gaGFuZGxlci0+dGFy
Z2V0Ci0gICAgICAgIC8vIGluIHRoZSBwcm9wZXIgZnJhbWUuCi0gICAgICAgIGlmICghSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpCi0g
ICAgICAgICAgICBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT5pbnN0cnVjdGlvbnMoKS5hdChoYW5kbGVyLT50YXJnZXQpLnB0cigpOworICAgIGlmIChoYW5k
bGVyLm1fdmFsaWQpIHsKKyAgICAgICAgY2F0Y2hQQ0ZvckludGVycHJldGVyID0gaGFuZGxlci5t
X2NhdGNoUENGb3JJbnRlcnByZXRlcjsKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBjYXRjaFJv
dXRpbmUgPSBoYW5kbGVyLT5uYXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
IGNhdGNoUm91dGluZSA9IGhhbmRsZXIubV9uYXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CiAjZWxzZQogICAgICAgICBpZiAoY2F0Y2hQQ0ZvckludGVycHJldGVyLT5pc1dpZGUzMigpKQog
ICAgICAgICAgICAgY2F0Y2hSb3V0aW5lID0gTExJbnQ6OmdldFdpZGUzMkNvZGVQdHIoY2F0Y2hQ
Q0ZvckludGVycHJldGVyLT5vcGNvZGVJRCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SlNJbnRlcmZhY2VKSVQuaAppbmRleCA3Y2ExYjRlN2MzZmQwODRkZDI3YWMzODUwNmFhOWM2YWVk
OTVkZWIwLi45OTIyOWU0OTkzMTdjMTJhMWYzNGNiZWFjZGFlYzkwMTUzODA4YWRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCkBAIC01Nyw2ICs1Nyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7CiAgICAgICAgIHZvaWQgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkp
OwogICAgICAgICB2b2lkIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBm
cm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOworICAgICAgICB2b2lkIGNvbnZlcnRDYWxsZWVU
b1ZNKFJlZ2lzdGVySUQgY2FsbGVlKTsKIAogICAgICAgICBWTSogdm0oKSBjb25zdCB7IHJldHVy
biBtX3ZtOyB9CiAKQEAgLTE1OCw2ICsxNTksMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYK
ICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmNvbnZlcnRD
YWxsZWVUb1ZNKFJlZ2lzdGVySUQgY2FsbGVlKQorICAgIHsKKyAgICAgICAgYXV0byBwcmVjaXNl
QWxsb2NhdGlvbkNhc2UgPSBicmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgY2Fs
bGVlLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVjaXNlQWxsb2NhdGlvbjo6aGFsZkFs
aWdubWVudCkpOworICAgICAgICBhbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKE1h
cmtlZEJsb2NrOjpibG9ja01hc2spLCBjYWxsZWUpOworICAgICAgICBsb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhjYWxsZWUsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtl
ZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIGNhbGxlZSk7CisgICAgICAgIGF1dG8gbG9h
ZGVkQ2FzZSA9IGp1bXAoKTsKKworICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluayh0
aGlzKTsKKyAgICAgICAgbG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlLCBQcmVj
aXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkg
LSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgY2FsbGVlKTsKKworICAgICAgICBs
b2FkZWRDYXNlLmxpbmsodGhpcyk7CisgICAgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnREYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgK
aW5kZXggNDcxZmI1ZDJmZDNiODA5Mzk2YTUyM2NlMzNmY2IyYTg1OTgzNmFjYi4uMzdjMWFmZTZk
ZTc2Yzg5MzVhYzc0NmQ2MGZiNDk3ZDMxZTZlN2NhOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludERhdGEuaApAQCAtMzIyLDYgKzMyMiwyNCBAQCBBTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNvZGVQdHIoV2FzbU9wY29kZUlEIG9wY29k
ZUlEKQogI2VuZGlmCiB9CiAKK3RlbXBsYXRlPFB0clRhZyB0YWc+CitBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjx0YWc+IGdldENvZGVSZWYoV2FzbU9wY29kZUlEIG9wY29kZUlE
KQoreworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKGdldENvZGVQdHI8dGFnPihvcGNvZGVJRCkpOworfQorCit0ZW1wbGF0ZTxQ
dHJUYWcgdGFnPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPiBnZXRX
aWRlMTZDb2RlUmVmKFdhc21PcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPHRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnZXRXaWRlMTZD
b2RlUHRyPHRhZz4ob3Bjb2RlSUQpKTsKK30KKwordGVtcGxhdGU8UHRyVGFnIHRhZz4KK0FMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz4gZ2V0V2lkZTMyQ29kZVJlZihXYXNt
T3Bjb2RlSUQgb3Bjb2RlSUQpCit7CisgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjx0
YWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2V0V2lkZTMyQ29kZVB0cjx0YWc+KG9wY29k
ZUlEKSk7Cit9CisKIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBBTFdBWVNfSU5MSU5FIExMSW50Q29k
ZSBnZXRDb2RlRnVuY3Rpb25QdHIoV2FzbU9wY29kZUlEIG9wY29kZUlEKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAppbmRleCBiOTEzZWVk
YWIwYzQzMGZhNzg0NjI5YmUzMDkxMjQwMGU1Njk4YzE0Li42ZDg2N2YyNmVhYWEyY2U4YWI5OWVk
YWVjMGYwYWEyMzZkYzkyY2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRFeGNlcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRFeGNlcHRpb25zLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkxMSW50Q29t
bW9uLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIK
KyNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogCiAjaWYgTExJTlRfVFJBQ0lORwogI2luY2x1ZGUg
IkNhdGNoU2NvcGUuaCIKQEAgLTQ5LDYgKzUwLDE4IEBAIEluc3RydWN0aW9uKiByZXR1cm5Ub1Ro
cm93KFZNJiB2bSkKICAgICByZXR1cm4gTExJbnQ6OmV4Y2VwdGlvbkluc3RydWN0aW9ucygpOwog
fQogCitJbnN0cnVjdGlvbiogd2FzbVJldHVyblRvVGhyb3coVk0mIHZtKQoreworICAgIFVOVVNF
RF9QQVJBTSh2bSk7CisjaWYgTExJTlRfVFJBQ0lORworICAgIGlmIChVTkxJS0VMWShPcHRpb25z
Ojp0cmFjZUxMSW50U2xvd1BhdGgoKSkpIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworICAgICAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwg
SlNWYWx1ZShzY29wZS5leGNlcHRpb24oKSksICIgKHJldHVyblRvVGhyb3cpLlxuIik7CisgICAg
fQorI2VuZGlmCisgICAgcmV0dXJuIExMSW50Ojp3YXNtRXhjZXB0aW9uSW5zdHJ1Y3Rpb25zKCk7
Cit9CisKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBjYWxs
VG9UaHJvdyhWTSYgdm0pCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKQEAgLTkyLDQgKzEwNSwz
NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gaGFuZGxl
Q2F0Y2goT3Bjb2RlU2l6ZSBzaXplKQogICAgIHJldHVybiB7fTsKIH0KIAorI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFn
PiBoYW5kbGVXYXNtQ2F0Y2goT3Bjb2RlU2l6ZSBzaXplKQoreworICAgIFdhc21PcGNvZGVJRCBv
cGNvZGUgPSBXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyB3YXNtX2NhdGNoIDogd2FzbV9j
YXRjaF9ub190bHM7CisgICAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSBPcGNvZGVTaXplOjpO
YXJyb3c6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPihvcGNvZGUpOworICAgIGNhc2UgT3Bjb2RlU2l6ZTo6V2lkZTE2OgorICAgICAgICBy
ZXR1cm4gTExJbnQ6OmdldFdpZGUxNkNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4ob3Bj
b2RlKTsKKyAgICBjYXNlIE9wY29kZVNpemU6OldpZGUzMjoKKyAgICAgICAgcmV0dXJuIExMSW50
OjpnZXRXaWRlMzJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KG9wY29kZSk7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGhhbmRsZVdh
c21DYXRjaEFsbChPcGNvZGVTaXplIHNpemUpCit7CisgICAgV2FzbU9wY29kZUlEIG9wY29kZSA9
IFdhc206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21fY2F0Y2hfYWxsIDogd2FzbV9jYXRj
aF9hbGxfbm9fdGxzOworICAgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNhc2UgT3Bjb2RlU2l6ZTo6
TmFycm93OgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4ob3Bjb2RlKTsKKyAgICBjYXNlIE9wY29kZVNpemU6OldpZGUxNjoKKyAgICAgICAg
cmV0dXJuIExMSW50OjpnZXRXaWRlMTZDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KG9w
Y29kZSk7CisgICAgY2FzZSBPcGNvZGVTaXplOjpXaWRlMzI6CisgICAgICAgIHJldHVybiBMTElu
dDo6Z2V0V2lkZTMyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihvcGNvZGUpOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
TExJbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2Vw
dGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuaApp
bmRleCA4MDZiMTlmNjYwNTg2NmI4OGNlODQ5NTg3YTA0MWFkZTRmMzZkNjI5Li5lNWY5MDIxZmFk
YjhlZmNiMjU4N2MwY2E2MDE3NmViZjFkY2JhYzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5oCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBM
TEludCB7CiAvLyBiZXR3ZWVuIDEgYW5kIDkgc2xvdHMgd2lsbCBnaXZlIHlvdSBhbiAiaW5zdHJ1
Y3Rpb24iIHRoYXQgdGhyZWFkcyB0byB0aGUKIC8vIGludGVycHJldGVyJ3MgZXhjZXB0aW9uIGhh
bmRsZXIuCiBJbnN0cnVjdGlvbiogcmV0dXJuVG9UaHJvdyhWTSYpOworSW5zdHJ1Y3Rpb24qIHdh
c21SZXR1cm5Ub1Rocm93KFZNJik7CiAKIC8vIFVzZSB0aGlzIHdoZW4geW91J3JlIHRocm93aW5n
IHRvIGEgY2FsbCB0aHVuay4KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPiBjYWxsVG9UaHJvdyhWTSYpOwpAQCAtNDksNCArNTAsOSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gY2FsbFRvVGhyb3coVk0mKTsKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBoYW5kbGVVbmNhdWdodEV4
Y2VwdGlvbihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IGhhbmRsZUNhdGNoKE9wY29kZVNpemUpOwogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGhhbmRsZVdhc21D
YXRjaChPcGNvZGVTaXplKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPiBoYW5kbGVXYXNtQ2F0Y2hBbGwoT3Bjb2RlU2l6ZSk7CisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6TExJbnQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAKaW5k
ZXggNmRmNDY4NTBlMmM3ZWI5Njg5OGVjNGM1N2ZjYjc3ZGQ4NzVkMmQ1MC4uYjJjYWExODU0MTMw
ZmY4YjkzMTgwNzZkMjdkZmViZGQyMTMzODQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAKQEAgLTUzLDYgKzUzLDcg
QEAKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0
cmluZy5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKdW1wVGFibGUuaCIKICNpbmNsdWRlICJMTEludERhdGEu
aCIKICNpbmNsdWRlICJMTEludE9mZmxpbmVBc21Db25maWcuaCIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5hc20gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCmluZGV4IDQzNmNmNjY0OTBkNzFjNWVlOWJiMzBl
ODZmZTZmNDJiYWVlNzZkZjEuLmZlOTg5YzgzYTExMGIxYzgzODc0M2Y5NzMyYzlhMmJjZTVhZmQ1
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5h
c20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbQpAQCAt
MjU2LDYgKzI1Niw3IEBAIG1hY3JvIHRocm93RXhjZXB0aW9uKGV4Y2VwdGlvbikKIGVuZAogCiBt
YWNybyBjYWxsV2FzbVNsb3dQYXRoKHNsb3dQYXRoKQorICAgIHN0b3JlaSBQQywgQXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2ZyXQogICAgIHByZXBhcmVTdGF0ZUZvckND
YWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQpAQCAtMjc0LDYgKzI3NSwx
NCBAQCBtYWNybyBjYWxsV2FzbUNhbGxTbG93UGF0aChzbG93UGF0aCwgYWN0aW9uKQogICAgIGFj
dGlvbihyMCwgcjEpCiBlbmQKIAorbWFjcm8gcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgp
CisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHdzMQorICAgIGxvYWRpIFdhc206OkZ1bmN0aW9u
Q29kZUJsb2NrOjptX251bUNhbGxlZUxvY2Fsc1t3czFdLCB3czEKKyAgICBsc2hpZnRwIDMsIHdz
MQorICAgIGFkZHAgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwsIHdzMQorICAgIHN1YnAg
Y2ZyLCB3czEsIHNwCitlbmQKKwogbWFjcm8gd2FzbVByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwg
Y29kZUJsb2NrU2V0dGVyLCBsb2FkV2FzbUluc3RhbmNlKQogICAgICMgU2V0IHVwIHRoZSBjYWxs
IGZyYW1lIGFuZCBjaGVjayBpZiB3ZSBzaG91bGQgT1NSLgogICAgIHByZXNlcnZlQ2FsbGVyUENB
bmRDRlIoKQpAQCAtMjgxLDYgKzI5MCw5IEBAIG1hY3JvIHdhc21Qcm9sb2d1ZShjb2RlQmxvY2tH
ZXR0ZXIsIGNvZGVCbG9ja1NldHRlciwgbG9hZFdhc21JbnN0YW5jZSkKICAgICBsb2FkV2FzbUlu
c3RhbmNlKCkKICAgICByZWxvYWRNZW1vcnlSZWdpc3RlcnNGcm9tSW5zdGFuY2Uod2FzbUluc3Rh
bmNlLCB3czAsIHdzMSkKIAorICAgIGxvYWRwIFdhc206Okluc3RhbmNlOjptX293bmVyW3dhc21J
bnN0YW5jZV0sIHdzMAorICAgIHN0b3JlcCB3czAsIFRoaXNBcmd1bWVudE9mZnNldFtjZnJdCisK
ICAgICBjb2RlQmxvY2tHZXR0ZXIod3MwKQogICAgIGNvZGVCbG9ja1NldHRlcih3czApCiAKQEAg
LTMzMywxNSArMzQ1LDE5IEBAIG1hY3JvIHRyYWNlRXhlY3V0aW9uKCkKICAgICBlbmQKIGVuZAog
Ci0jIExlc3MgY29udmVuaWVudCwgYnV0IHJlcXVpcmVkIGZvciBvcGNvZGVzIHRoYXQgY29sbGlk
ZSB3aXRoIHJlc2VydmVkIGluc3RydWN0aW9ucyAoZS5nLiB3YXNtX25vcCkKLW1hY3JvIHVucHJl
Zml4ZWRXYXNtT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBmbikKLSAgICBjb21tb25PcChv
cGNvZGVOYW1lLCB0cmFjZUV4ZWN1dGlvbiwgbWFjcm8oc2l6ZSkKK21hY3JvIGNvbW1vbldhc21P
cChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHByb2xvZ3VlLCBmbikKKyAgICBjb21tb25PcChv
cGNvZGVOYW1lLCBwcm9sb2d1ZSwgbWFjcm8oc2l6ZSkKICAgICAgICAgZm4obWFjcm8oZm4yKQog
ICAgICAgICAgICAgZm4yKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgc2l6ZSkKICAgICAgICAg
ZW5kKQogICAgIGVuZCkKIGVuZAogCisjIExlc3MgY29udmVuaWVudCwgYnV0IHJlcXVpcmVkIGZv
ciBvcGNvZGVzIHRoYXQgY29sbGlkZSB3aXRoIHJlc2VydmVkIGluc3RydWN0aW9ucyAoZS5nLiB3
YXNtX25vcCkKK21hY3JvIHVucHJlZml4ZWRXYXNtT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0
LCBmbikKKyAgICBjb21tb25XYXNtT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCB0cmFjZUV4
ZWN1dGlvbiwgZm4pCitlbmQKKwogbWFjcm8gd2FzbU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVj
dCwgZm4pCiAgICAgdW5wcmVmaXhlZFdhc21PcCh3YXNtXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3Ry
dWN0LCBmbikKIGVuZApAQCAtNTEyLDYgKzUyOCwxNiBAQCBvcCh3YXNtX2Z1bmN0aW9uX3Byb2xv
Z3VlX25vX3RscywgbWFjcm8gKCkKICAgICB3YXNtTmV4dEluc3RydWN0aW9uKCkKIGVuZCkKIAor
bWFjcm8ganVtcFRvRXhjZXB0aW9uKCkKKyAgICBpZiBBUk02NEUKKyAgICAgICAgbW92ZSByMCwg
YTAKKyAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0Nv
bmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OmV4Y2VwdGlvbkhhbmRsZXIpICogUHRyU2l6
ZSwgYTEKKyAgICAgICAgam1wIFthMV0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWcKKyAgICBlbHNlCisgICAgICAgIGptcCByMCwgRXhjZXB0aW9uSGFuZGxl
clB0clRhZworICAgIGVuZAorZW5kCisKIG9wKHdhc21fdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJh
bXBvbGluZSwgbWFjcm8gKCkKICAgICBsb2FkcCBXYXNtOjpJbnN0YW5jZTo6bV9wb2ludGVyVG9U
b3BFbnRyeUZyYW1lW3dhc21JbnN0YW5jZV0sIHQ1CiAgICAgbG9hZHAgW3Q1XSwgdDUKQEAgLTUy
MywxNCArNTQ5LDcgQEAgb3Aod2FzbV90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lLCBt
YWNybyAoKQogICAgICMgU2xvdyBwYXRocyBhbmQgdGhlIHRocm93RXhjZXB0aW9uIG1hY3JvIHN0
b3JlIHRoZSBleGNlcHRpb24gY29kZSBpbiB0aGUgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
c2xvdAogICAgIGxvYWRpIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgUGF5bG9hZE9mZnNl
dFtjZnJdLCBhMwogICAgIGNDYWxsNChfc2xvd19wYXRoX3dhc21fdGhyb3dfZXhjZXB0aW9uKQot
Ci0gICAgaWYgQVJNNjRFCi0gICAgICAgIG1vdmUgcjAsIGEwCi0gICAgICAgIGxlYXAgSlNDQ29u
ZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhw
ciBHYXRlOjpleGNlcHRpb25IYW5kbGVyKSAqIFB0clNpemUsIGExCi0gICAgICAgIGptcCBbYTFd
LCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBFeGNlcHRpb25IYW5kbGVyUHRyVGFnCi0gICAgZWxz
ZQotICAgICAgICBqbXAgcjAsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLSAgICBlbmQKKyAgICBq
dW1wVG9FeGNlcHRpb24oKQogZW5kKQogCiBtYWNybyB3YXNtX3Rocm93X2Zyb21fZmF1bHRfaGFu
ZGxlcihpbnN0YW5jZSkKQEAgLTU0MywxNCArNTYyLDcgQEAgbWFjcm8gd2FzbV90aHJvd19mcm9t
X2ZhdWx0X2hhbmRsZXIoaW5zdGFuY2UpCiAgICAgbW92ZSAwLCBhMQogICAgIG1vdmUgY2ZyLCBh
MAogICAgIGNDYWxsNChfc2xvd19wYXRoX3dhc21fdGhyb3dfZXhjZXB0aW9uKQotCi0gICAgaWYg
QVJNNjRFCi0gICAgICAgIG1vdmUgcjAsIGEwCi0gICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29u
c3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpl
eGNlcHRpb25IYW5kbGVyKSAqIFB0clNpemUsIGExCi0gICAgICAgIGptcCBbYTFdLCBOYXRpdmVU
b0pJVEdhdGVQdHJUYWcgIyBFeGNlcHRpb25IYW5kbGVyUHRyVGFnCi0gICAgZWxzZQotICAgICAg
ICBqbXAgcjAsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLSAgICBlbmQKKyAgICBqdW1wVG9FeGNl
cHRpb24oKQogZW5kCiAKIG9wKHdhc21fdGhyb3dfZnJvbV9mYXVsdF9oYW5kbGVyX3RyYW1wb2xp
bmVfZmFzdFRMUywgbWFjcm8gKCkKQEAgLTc3MCwxMSArNzgyLDExIEBAIG1hY3JvIHNsb3dQYXRo
Rm9yV2FzbUNhbGwoY3R4LCBzbG93UGF0aCwgc3RvcmVXYXNtSW5zdGFuY2UpCiAKICAgICAgICAg
ICAgICMgTG9hZCByZWdpc3RlcnMgZnJvbSBzdGFjawogICAgICAgICAgICAgZm9yRWFjaEFyZ3Vt
ZW50R1BSKG1hY3JvIChvZmZzZXQsIGdwcikKLSAgICAgICAgICAgICAgICBsb2FkcSBDYWxsRnJh
bWVIZWFkZXJTaXplICsgb2Zmc2V0W3NwLCB3czEsIDhdLCBncHIKKyAgICAgICAgICAgICAgICBs
b2FkcSBDYWxsRnJhbWVIZWFkZXJTaXplICsgOCArIG9mZnNldFtzcCwgd3MxLCA4XSwgZ3ByCiAg
ICAgICAgICAgICBlbmQpCiAKICAgICAgICAgICAgIGZvckVhY2hBcmd1bWVudEZQUihtYWNybyAo
b2Zmc2V0LCBmcHIpCi0gICAgICAgICAgICAgICAgbG9hZGQgQ2FsbEZyYW1lSGVhZGVyU2l6ZSAr
IG9mZnNldFtzcCwgd3MxLCA4XSwgZnByCisgICAgICAgICAgICAgICAgbG9hZGQgQ2FsbEZyYW1l
SGVhZGVyU2l6ZSArIDggKyBvZmZzZXRbc3AsIHdzMSwgOF0sIGZwcgogICAgICAgICAgICAgZW5k
KQogCiAgICAgICAgICAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcApAQCAtODExLDEx
ICs4MjMsNyBAQCBtYWNybyBzbG93UGF0aEZvcldhc21DYWxsKGN0eCwgc2xvd1BhdGgsIHN0b3Jl
V2FzbUluc3RhbmNlKQogICAgICAgICAgICAgICAgIGRlZmluZVJldHVybkxhYmVsKG9wY29kZU5h
bWUsIHNpemUpCiAgICAgICAgICAgICBlbmQpCiAKLSAgICAgICAgICAgIGxvYWRwIENvZGVCbG9j
a1tjZnJdLCB3czEKLSAgICAgICAgICAgIGxvYWRpIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpt
X251bUNhbGxlZUxvY2Fsc1t3czFdLCB3czEKLSAgICAgICAgICAgIGxzaGlmdHAgMywgd3MxCi0g
ICAgICAgICAgICBhZGRwIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLCB3czEKLSAgICAg
ICAgICAgIHN1YnAgY2ZyLCB3czEsIHNwCisgICAgICAgICAgICByZXN0b3JlU3RhY2tQb2ludGVy
QWZ0ZXJDYWxsKCkKIAogICAgICAgICAgICAgIyBXZSBuZWVkIHRvIHNldCBQQyB0byBsb2FkIGlu
Zm9ybWF0aW9uIGZyb20gdGhlIGluc3RydWN0aW9uIHN0cmVhbSwgYnV0IHdlCiAgICAgICAgICAg
ICAjIG5lZWQgdG8gcHJlc2VydmUgaXRzIGN1cnJlbnQgdmFsdWUgc2luY2UgaXQgbWlnaHQgY29u
dGFpbiBhIHJldHVybiB2YWx1ZQpAQCAtODM2LDExICs4NDQsMTEgQEAgbWFjcm8gc2xvd1BhdGhG
b3JXYXNtQ2FsbChjdHgsIHNsb3dQYXRoLCBzdG9yZVdhc21JbnN0YW5jZSkKICAgICAgICAgICAg
IHdnZXR1KGN0eCwgbV9udW1iZXJPZlN0YWNrQXJncywgd3MwKQogICAgICAgICAgICAgbW92ZSBt
ZW1vcnlCYXNlLCBQQwogICAgICAgICAgICAgZm9yRWFjaEFyZ3VtZW50R1BSKG1hY3JvIChvZmZz
ZXQsIGdwcikKLSAgICAgICAgICAgICAgICBzdG9yZXEgZ3ByLCBDYWxsRnJhbWVIZWFkZXJTaXpl
ICsgb2Zmc2V0W3dzMSwgd3MwLCA4XQorICAgICAgICAgICAgICAgIHN0b3JlcSBncHIsIENhbGxG
cmFtZUhlYWRlclNpemUgKyA4ICsgb2Zmc2V0W3dzMSwgd3MwLCA4XQogICAgICAgICAgICAgZW5k
KQogCiAgICAgICAgICAgICBmb3JFYWNoQXJndW1lbnRGUFIobWFjcm8gKG9mZnNldCwgZnByKQot
ICAgICAgICAgICAgICAgIHN0b3JlZCBmcHIsIENhbGxGcmFtZUhlYWRlclNpemUgKyBvZmZzZXRb
d3MxLCB3czAsIDhdCisgICAgICAgICAgICAgICAgc3RvcmVkIGZwciwgQ2FsbEZyYW1lSGVhZGVy
U2l6ZSArIDggKyBvZmZzZXRbd3MxLCB3czAsIDhdCiAgICAgICAgICAgICBlbmQpCiAKICAgICAg
ICAgICAgIGxvYWRpIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0s
IFBDCkBAIC0yODA0LDMgKzI4MTIsMTE0IEBAIHdhc21PcChhdG9taWNfZmVuY2UsIFdhc21Ecm9w
S2VlcCwgbWFjcm8oY3R4KQogICAgIGZlbmNlCiAgICAgZGlzcGF0Y2goY3R4KQogZW5kKQorCit3
YXNtT3AodGhyb3csIFdhc21UaHJvdywgbWFjcm8oY3R4KQorICAgIGxvYWRwIFdhc206Okluc3Rh
bmNlOjptX3BvaW50ZXJUb1RvcEVudHJ5RnJhbWVbd2FzbUluc3RhbmNlXSwgdDUKKyAgICBsb2Fk
cCBbdDVdLCB0NQorICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHQ1KQorCisgICAgY2FsbFdhc21TbG93UGF0aChfc2xvd19wYXRoX3dhc21fdGhyb3cpCisg
ICAganVtcFRvRXhjZXB0aW9uKCkKK2VuZCkKKword2FzbU9wKHJldGhyb3csIFdhc21SZXRocm93
LCBtYWNybyhjdHgpCisgICAgY2FsbFdhc21TbG93UGF0aChfc2xvd19wYXRoX3dhc21fcmV0aHJv
dykKKyAgICBqdW1wVG9FeGNlcHRpb24oKQorZW5kKQorCittYWNybyBjYXRjaEltcGwoY3R4LCBz
dG9yZVdhc21JbnN0YW5jZSkKKyAgICBsb2FkcCBDYWxsZWVbY2ZyXSwgdDMKKyAgICBjb252ZXJ0
Q2FsbGVlVG9WTSh0MykKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodDMsIHQwKQorCisgICAgbG9hZHAgVk06OmNhbGxlZUZvcldhc21DYXRj
aFt0M10sIHdzMQorICAgIHN0b3JlcCAwLCBWTTo6Y2FsbGVlRm9yV2FzbUNhdGNoW3QzXQorICAg
IHN0b3JlcCB3czEsIENhbGxlZVtjZnJdCisKKyAgICBsb2FkcCBWTTo6Y2FsbEZyYW1lRm9yQ2F0
Y2hbdDNdLCBjZnIKKyAgICBzdG9yZXAgMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoW3QzXQorCisg
ICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCisKKyAgICBsb2FkcCBUaGlzQXJndW1l
bnRPZmZzZXRbY2ZyXSwgd2FzbUluc3RhbmNlCisgICAgbG9hZHAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjptX2luc3RhbmNlW3dhc21JbnN0YW5jZV0sIHdhc21JbnN0YW5jZQorICAgIHN0b3JlV2Fz
bUluc3RhbmNlKHdhc21JbnN0YW5jZSkKKyAgICByZWxvYWRNZW1vcnlSZWdpc3RlcnNGcm9tSW5z
dGFuY2Uod2FzbUluc3RhbmNlLCB3czAsIHdzMSkKKworICAgIGxvYWRwIENvZGVCbG9ja1tjZnJd
LCBQQgorICAgIGxvYWRwIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1Jh
d1BvaW50ZXJbUEJdLCBQQgorICAgIGxvYWRwIFZNOjp0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhy
b3dbdDNdLCBQQworICAgIHN1YnAgUEIsIFBDCisKKyAgICBjYWxsV2FzbVNsb3dQYXRoKF9zbG93
X3BhdGhfd2FzbV9yZXRyaWV2ZV9hbmRfY2xlYXJfZXhjZXB0aW9uKQorICAgIG1vdmUgcjEsIHQx
CisKKyAgICB3Z2V0dShjdHgsIG1fc3RhcnRPZmZzZXQsIHQyKQorICAgIHdnZXR1KGN0eCwgbV9h
cmd1bWVudENvdW50LCB0MykKKworICAgIGxzaGlmdGkgMywgdDIKKyAgICBzdWJwIGNmciwgdDIs
IHQyCisKKy5jb3B5TG9vcDoKKyAgICBidGl6IHQzLCAuZG9uZQorICAgIGxvYWRxIFt0MV0sIHQ2
CisgICAgc3RvcmVxIHQ2LCBbdDJdCisgICAgc3ViaSAxLCB0MworICAgICMgRklYTUU6IFVzZSBh
cm0gc3RvcmUtYWRkL3N1YiBpbnN0cnVjdGlvbnMgaW4gd2FzbSBMTEludCBjYXRjaAorICAgICMg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTIxMAorICAgIHN1YnAg
OCwgdDIKKyAgICBhZGRwIDgsIHQxCisgICAgam1wIC5jb3B5TG9vcAorCisuZG9uZToKKyAgICB0
cmFjZUV4ZWN1dGlvbigpCisKKyAgICBkaXNwYXRjaChjdHgpCitlbmQKKworY29tbW9uV2FzbU9w
KHdhc21fY2F0Y2gsIFdhc21DYXRjaCwgbWFjcm8oKSBlbmQsIG1hY3JvKGN0eCkKKyAgICBjYXRj
aEltcGwoY3R4LCBzdG9yZVdhc21JbnN0YW5jZVRvVExTKQorZW5kKQorCitjb21tb25XYXNtT3Ao
d2FzbV9jYXRjaF9ub190bHMsIFdhc21DYXRjaCwgbWFjcm8oKSBlbmQsIG1hY3JvKGN0eCkKKyAg
ICBjYXRjaEltcGwoY3R4LCBtYWNybyhpbnN0YW5jZSkgZW5kKQorZW5kKQorCittYWNybyBjYXRj
aEFsbEltcGwoY3R4LCBzdG9yZVdhc21JbnN0YW5jZSkKKyAgICBsb2FkcCBDYWxsZWVbY2ZyXSwg
dDMKKyAgICBjb252ZXJ0Q2FsbGVlVG9WTSh0MykKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodDMsIHQwKQorCisgICAgbG9hZHAgVk06OmNh
bGxlZUZvcldhc21DYXRjaFt0M10sIHdzMQorICAgIHN0b3JlcCAwLCBWTTo6Y2FsbGVlRm9yV2Fz
bUNhdGNoW3QzXQorICAgIHN0b3JlcCB3czEsIENhbGxlZVtjZnJdCisKKyAgICBsb2FkcCBWTTo6
Y2FsbEZyYW1lRm9yQ2F0Y2hbdDNdLCBjZnIKKyAgICBzdG9yZXAgMCwgVk06OmNhbGxGcmFtZUZv
ckNhdGNoW3QzXQorCisgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCisKKyAgICBs
b2FkcCBUaGlzQXJndW1lbnRPZmZzZXRbY2ZyXSwgd2FzbUluc3RhbmNlCisgICAgbG9hZHAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjptX2luc3RhbmNlW3dhc21JbnN0YW5jZV0sIHdhc21JbnN0YW5j
ZQorICAgIHN0b3JlV2FzbUluc3RhbmNlKHdhc21JbnN0YW5jZSkKKyAgICByZWxvYWRNZW1vcnlS
ZWdpc3RlcnNGcm9tSW5zdGFuY2Uod2FzbUluc3RhbmNlLCB3czAsIHdzMSkKKworICAgIGxvYWRw
IENvZGVCbG9ja1tjZnJdLCBQQgorICAgIGxvYWRwIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpt
X2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgorICAgIGxvYWRwIFZNOjp0YXJnZXRJbnRl
cnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQworICAgIHN1YnAgUEIsIFBDCisKKyAgICBjYWxsV2Fz
bVNsb3dQYXRoKF9zbG93X3BhdGhfd2FzbV9yZXRyaWV2ZV9hbmRfY2xlYXJfZXhjZXB0aW9uKQor
CisgICAgdHJhY2VFeGVjdXRpb24oKQorCisgICAgZGlzcGF0Y2goY3R4KQorZW5kCisKK2NvbW1v
bldhc21PcCh3YXNtX2NhdGNoX2FsbCwgV2FzbUNhdGNoQWxsLCBtYWNybygpIGVuZCwgbWFjcm8o
Y3R4KQorICAgIGNhdGNoQWxsSW1wbChjdHgsIHN0b3JlV2FzbUluc3RhbmNlVG9UTFMpCitlbmQp
CisKK2NvbW1vbldhc21PcCh3YXNtX2NhdGNoX2FsbF9ub190bHMsIFdhc21DYXRjaEFsbCwgbWFj
cm8oKSBlbmQsIG1hY3JvKGN0eCkKKyAgICBjYXRjaEFsbEltcGwoY3R4LCBtYWNybyhpbnN0YW5j
ZSkgZW5kKQorZW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvcklu
c3RhbmNlLmNwcAppbmRleCBkZmI5MzE4OGMwOGZkOGRiYWQzYmY3Zjg1ZTE4NTJiNTI0MDZiNWQ2
Li5iNmNhNWJjNDIzNmI5ZDU2NWY1OGM4NmE5NzBjYTM3NjU1OTA5NTAyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcApAQCAtNDAsNiArNDAs
OSBAQCBFcnJvckluc3RhbmNlOjpFcnJvckluc3RhbmNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEVycm9yVHlwZSBlcnJvclR5cGUpCiAgICAgLCBtX291dE9mTWVtb3J5RXJyb3IoZmFs
c2UpCiAgICAgLCBtX2Vycm9ySW5mb01hdGVyaWFsaXplZChmYWxzZSkKICAgICAsIG1fbmF0aXZl
R2V0dGVyVHlwZUVycm9yKGZhbHNlKQorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAsIG1f
Y2F0Y2hhYmxlRnJvbVdhc20odHJ1ZSkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCiB7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5z
dGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaApp
bmRleCA3ZDJlNjQzMjZhODFkYjZjNzcwYTQ2M2Q4Zjk2Mzc2NzNkZmIyOTNiLi5lZmY1ZTk4NzI0
YjkwNjIxYjE4MjIwMjlhMDk1MDZiOWM3OTllMWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCkBAIC04MCw2ICs4MCwxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXROYXRpdmVHZXR0ZXJUeXBlRXJyb3IoKSB7IG1fbmF0aXZlR2V0dGVyVHlwZUVy
cm9yID0gdHJ1ZTsgfQogICAgIGJvb2wgaXNOYXRpdmVHZXR0ZXJUeXBlRXJyb3IoKSBjb25zdCB7
IHJldHVybiBtX25hdGl2ZUdldHRlclR5cGVFcnJvcjsgfQogCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorICAgIHZvaWQgc2V0Q2F0Y2hhYmxlRnJvbVdhc20oYm9vbCBmbGFnKSB7IG1fY2F0Y2hh
YmxlRnJvbVdhc20gPSBmbGFnOyB9CisgICAgYm9vbCBpc0NhdGNoYWJsZUZyb21XYXNtKCkgY29u
c3QgeyByZXR1cm4gbV9jYXRjaGFibGVGcm9tV2FzbTsgfQorI2VuZGlmCisKICAgICBKU19FWFBP
UlRfUFJJVkFURSBTdHJpbmcgc2FuaXRpemVkVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc2FuaXRpemVkTWVzc2FnZVN0cmluZyhKU0dsb2Jh
bE9iamVjdCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzYW5pdGl6ZWROYW1lU3Ry
aW5nKEpTR2xvYmFsT2JqZWN0Kik7CkBAIC0xMTYsNiArMTIxLDkgQEAgcHJvdGVjdGVkOgogICAg
IGJvb2wgbV9vdXRPZk1lbW9yeUVycm9yIDogMTsKICAgICBib29sIG1fZXJyb3JJbmZvTWF0ZXJp
YWxpemVkIDogMTsKICAgICBib29sIG1fbmF0aXZlR2V0dGVyVHlwZUVycm9yIDogMTsKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisgICAgYm9vbCBtX2NhdGNoYWJsZUZyb21XYXNtIDogMTsKKyNl
bmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggMjk3ZmNkNjk4ZmZiYTk0Yjc3MjZk
ZTY3ZDE5YjI0MjU5NzAzYTMyYi4uMzE5ZTRiM2Q4YWIxODMwMDYwZjIyNTc2MWExOTJiY2NiODA0
MzdkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcApAQCAtMTUzLDYgKzE1Myw3IEBACiAjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb21waWxlRXJy
b3IuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUdsb2JhbC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKQEAgLTE2MCw2ICsxNjEsNyBAQAog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
UnVudGltZUVycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCisjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseVRhZy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVk
ZSAiTGF6eUNsYXNzU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIkxhenlQcm9wZXJ0eUlu
bGluZXMuaCIKQEAgLTIyMCw2ICsyMjIsOCBAQAogI2luY2x1ZGUgIldlYWtTZXRQcm90b3R5cGUu
aCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJB
c3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlFeGNl
cHRpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5j
bHVkZSAiV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5R2xvYmFsUHJvdG90eXBlLmgiCkBAIC0yMzYsNiArMjQwLDggQEAKICNpbmNsdWRlICJXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFi
bGVDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCIK
KyNpbmNsdWRlICJXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlUYWdQcm90b3R5cGUuaCIKICNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CiAjaW5j
bHVkZSA8d3RmL1N5c3RlbVRyYWNpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggOTYxYzI0N2U5YTc5MmExYWZlNmM5Yzk4OTQw
NzZmMTRmNzA4MmRlYS4uMWJkY2M0ZGU3NGQwOTI0ZDM5Yzg0Zjk1MjVjNWUwYjNlNmFmNDEwZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBA
IC0xNjksMTQgKzE2OSwxNiBAQCBjb25zdGV4cHIgYm9vbCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCA9
IHRydWU7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAjZGVmaW5lIEZPUl9FQUNIX1dFQkFT
U0VNQkxZX0NPTlNUUlVDVE9SX1RZUEUobWFjcm8pIFwKLSAgICBtYWNybyhXZWJBc3NlbWJseUNv
bXBpbGVFcnJvciwgd2ViQXNzZW1ibHlDb21waWxlRXJyb3IsIHdlYkFzc2VtYmx5Q29tcGlsZUVy
cm9yLCBFcnJvckluc3RhbmNlLCAgICAgICAgICAgICBDb21waWxlRXJyb3IsIGVycm9yLCB0eXBl
RXhwb3NlZEJ5RGVmYXVsdCkgXAorICAgIG1hY3JvKFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yLCB3
ZWJBc3NlbWJseUNvbXBpbGVFcnJvciwgd2ViQXNzZW1ibHlDb21waWxlRXJyb3IsIEVycm9ySW5z
dGFuY2UsICAgICAgICAgICAgIENvbXBpbGVFcnJvciwgZXJyb3IsICB0eXBlRXhwb3NlZEJ5RGVm
YXVsdCkgXAorICAgIG1hY3JvKFdlYkFzc2VtYmx5RXhjZXB0aW9uLCAgICB3ZWJBc3NlbWJseUV4
Y2VwdGlvbiwgICAgd2ViQXNzZW1ibHlFeGNlcHRpb24sICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRp
b24sICAgIEV4Y2VwdGlvbiwgICAgb2JqZWN0LCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAogICAg
IG1hY3JvKFdlYkFzc2VtYmx5R2xvYmFsLCAgICAgICB3ZWJBc3NlbWJseUdsb2JhbCwgICAgICAg
d2ViQXNzZW1ibHlHbG9iYWwsICAgICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwsICAgICAgIEdsb2Jh
bCwgICAgICAgb2JqZWN0LCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAogICAgIG1hY3JvKFdlYkFz
c2VtYmx5SW5zdGFuY2UsICAgICB3ZWJBc3NlbWJseUluc3RhbmNlLCAgICAgd2ViQXNzZW1ibHlJ
bnN0YW5jZSwgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgICAgIEluc3RhbmNlLCAgICAgb2Jq
ZWN0LCB0eXBlRXhwb3NlZEJ5RGVmYXVsdCkgXAotICAgIG1hY3JvKFdlYkFzc2VtYmx5TGlua0Vy
cm9yLCAgICB3ZWJBc3NlbWJseUxpbmtFcnJvciwgICAgd2ViQXNzZW1ibHlMaW5rRXJyb3IsICAg
IEVycm9ySW5zdGFuY2UsICAgICAgICAgICAgIExpbmtFcnJvciwgICAgZXJyb3IsIHR5cGVFeHBv
c2VkQnlEZWZhdWx0KSBcCisgICAgbWFjcm8oV2ViQXNzZW1ibHlMaW5rRXJyb3IsICAgIHdlYkFz
c2VtYmx5TGlua0Vycm9yLCAgICB3ZWJBc3NlbWJseUxpbmtFcnJvciwgICAgRXJyb3JJbnN0YW5j
ZSwgICAgICAgICAgICAgTGlua0Vycm9yLCAgICBlcnJvciwgIHR5cGVFeHBvc2VkQnlEZWZhdWx0
KSBcCiAgICAgbWFjcm8oV2ViQXNzZW1ibHlNZW1vcnksICAgICAgIHdlYkFzc2VtYmx5TWVtb3J5
LCAgICAgICB3ZWJBc3NlbWJseU1lbW9yeSwgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSwgICAg
ICAgTWVtb3J5LCAgICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCiAgICAgbWFj
cm8oV2ViQXNzZW1ibHlNb2R1bGUsICAgICAgIHdlYkFzc2VtYmx5TW9kdWxlLCAgICAgICB3ZWJB
c3NlbWJseU1vZHVsZSwgICAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSwgICAgICAgTW9kdWxlLCAg
ICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCi0gICAgbWFjcm8oV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5UnVudGltZUVycm9yLCB3ZWJBc3NlbWJseVJ1bnRp
bWVFcnJvciwgRXJyb3JJbnN0YW5jZSwgICAgICAgICAgICAgUnVudGltZUVycm9yLCBlcnJvciwg
dHlwZUV4cG9zZWRCeURlZmF1bHQpIFwKLSAgICBtYWNybyhXZWJBc3NlbWJseVRhYmxlLCAgICAg
ICAgd2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIHdlYkFzc2VtYmx5VGFibGUsICAgICAgICBKU1dl
YkFzc2VtYmx5VGFibGUsICAgICAgICBUYWJsZSwgICAgICAgIG9iamVjdCwgdHlwZUV4cG9zZWRC
eURlZmF1bHQpCisgICAgbWFjcm8oV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IsIHdlYkFzc2VtYmx5
UnVudGltZUVycm9yLCB3ZWJBc3NlbWJseVJ1bnRpbWVFcnJvciwgRXJyb3JJbnN0YW5jZSwgICAg
ICAgICAgICAgUnVudGltZUVycm9yLCBlcnJvciwgIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCisg
ICAgbWFjcm8oV2ViQXNzZW1ibHlUYWJsZSwgICAgICAgIHdlYkFzc2VtYmx5VGFibGUsICAgICAg
ICB3ZWJBc3NlbWJseVRhYmxlLCAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlLCAgICAgICAgVGFi
bGUsICAgICAgICBvYmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSBcCisgICAgbWFjcm8oV2Vi
QXNzZW1ibHlUYWcsICAgICAgICAgIHdlYkFzc2VtYmx5VGFnLCAgICAgICAgICB3ZWJBc3NlbWJs
eVRhZywgICAgICAgICAgSlNXZWJBc3NlbWJseVRhZywgICAgICAgICAgVGFnLCAgICAgICAgICBv
YmplY3QsIHR5cGVFeHBvc2VkQnlEZWZhdWx0KSAKICNlbHNlCiAjZGVmaW5lIEZPUl9FQUNIX1dF
QkFTU0VNQkxZX0NPTlNUUlVDVE9SX1RZUEUobWFjcm8pCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKaW5k
ZXggNTQwMWZmMzgzMWQ4NjUwNzE1NWIxOTMyNGJlMzk3ZmZiZDMzZDkzNC4uZTA3ODMzZjQ3YWJj
MWE0YjA5MjQyMTVjNTc1N2JmNmViZGU1NjQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zTGlzdC5oCkBAIC01NDMsNiArNTQzLDcgQEAgYm9vbCBjYW5Vc2VXZWJB
c3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZVRlbXBvcmFsLCBmYWxzZSwgTm9y
bWFsLCAiRXhwb3NlIHRoZSBUZW1wb3JhbCBvYmplY3QuIikgXAogICAgIHYoQm9vbCwgdXNlV2Vi
QXNzZW1ibHlUaHJlYWRpbmcsIHRydWUsIE5vcm1hbCwgIkFsbG93IGluc3RydWN0aW9ucyBmcm9t
IHRoZSB3YXNtIHRocmVhZGluZyBzcGVjLiIpIFwKICAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5
VHlwZWRGdW5jdGlvblJlZmVyZW5jZXMsIGZhbHNlLCBOb3JtYWwsICJBbGxvdyBmdW5jdGlvbiB0
eXBlcyBmcm9tIHRoZSB3YXNtIHR5cGVkIGZ1bmN0aW9uIHJlZmVyZW5jZXMgc3BlYy4iKSBcCisg
ICAgdihCb29sLCB1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMsIHRydWUsIE5vcm1hbCwgIkFsbG93
IHRoZSBuZXcgc2VjdGlvbiBhbmQgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHdhc20gZXhjZXB0aW9u
IGhhbmRsaW5nIHNwZWMuIikgXAogCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDk5NmEwNmRhYWJhODJjY2VmYjQzZGYzZjY1
ZjEzMWU2ZmRlNmVlMDcuLjM4ZTk1MTI5YmE5ZjAyMTEwYTFjNDNlMDUxYzRhYTY3OGM2ZmQwZDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTEyOSwxMSArMTI5LDEzIEBA
CiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0UmVmLmgiCiAjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5R2xvYmFsLmgiCiAjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9y
eS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5VGFibGUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAi
SlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJNaW5pbXVt
UmVzZXJ2ZWRab25lU2l6ZS5oIgpAQCAtMzM0LDYgKzMzNiw3IEBAIFZNOjpWTShWTVR5cGUgdm1U
eXBlLCBIZWFwVHlwZSBoZWFwVHlwZSwgV1RGOjpSdW5Mb29wKiBydW5Mb29wLCBib29sKiBzdWNj
ZXNzKQogICAgICwgaW50bFNlZ21lbnRzSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3Jl
YXRlPEludGxTZWdtZW50cz4oKSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgLCB3ZWJB
c3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrPigpKQorICAgICwgd2ViQXNzZW1ibHlFeGNlcHRpb25IZWFwQ2Vs
bFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseUV4Y2VwdGlvbj4oKSkK
ICAgICAsIHdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpj
cmVhdGU8V2ViQXNzZW1ibHlGdW5jdGlvbj4oKSkKICAgICAsIHdlYkFzc2VtYmx5R2xvYmFsSGVh
cENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEpTV2ViQXNzZW1ibHlHbG9iYWw+KCkp
CiAgICAgLCB3ZWJBc3NlbWJseUluc3RhbmNlSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6
Y3JlYXRlPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKSkKQEAgLTM0MSw2ICszNDQsNyBAQCBWTTo6
Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUsIFdURjo6UnVuTG9vcCogcnVuTG9v
cCwgYm9vbCogc3VjY2VzcykKICAgICAsIHdlYkFzc2VtYmx5TW9kdWxlSGVhcENlbGxUeXBlKElz
b0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEpTV2ViQXNzZW1ibHlNb2R1bGU+KCkpCiAgICAgLCB3ZWJB
c3NlbWJseU1vZHVsZVJlY29yZEhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZD4oKSkKICAgICAsIHdlYkFzc2VtYmx5VGFibGVIZWFwQ2Vs
bFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNXZWJBc3NlbWJseVRhYmxlPigpKQorICAg
ICwgd2ViQXNzZW1ibHlUYWdIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SlNX
ZWJBc3NlbWJseVRhZz4oKSkKICNlbmRpZgogICAgICwgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlh
cnlTcGFjZSgiUHJpbWl0aXZlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhlYXAsIGF1eGlsaWFyeUhl
YXBDZWxsVHlwZS5nZXQoKSwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpIC8vIEhh
c2g6MHgzZTdjZDc2MgogICAgICwganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIkpTVmFs
dWUgR2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5SGVhcENlbGxUeXBlLmdldCgp
LCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpIC8vIEhhc2g6MHgyNDFlOTQ2CkBAIC0x
NjI5LDYgKzE2MzMsNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
aW50bFNlZ21lbnRzU3BhY2UsIGludGxTZWdtZW50c0hlYXBDZWxsVAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhqc1RvV2Fz
bUlDQ2FsbGVlU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVG9XYXNtSUNDYWxsZWUp
CiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlDb2Rl
QmxvY2tTcGFjZSwgd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2spIC8vIEhhc2g6MHg5YWQ5OTVjZAorRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5RXhjZXB0aW9uU3BhY2UsIHdlYkFzc2Vt
Ymx5RXhjZXB0aW9uSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKQog
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5RnVuY3Rp
b25TcGFjZSwgd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZS5nZXQoKSwgV2ViQXNzZW1i
bHlGdW5jdGlvbikgLy8gSGFzaDoweDhiN2MzMmRiCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlHbG9iYWxTcGFjZSwgd2ViQXNzZW1ibHlHbG9iYWxI
ZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlHbG9iYWwpCiBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlJbnN0YW5jZVNwYWNlLCB3ZWJBc3Nl
bWJseUluc3RhbmNlSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UpCkBA
IC0xNjM2LDYgKzE2NDEsNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NM
T1cod2ViQXNzZW1ibHlNZW1vcnlTcGFjZSwgd2ViQXNzZW1ibHlNZW1vcgogRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5TW9kdWxlU3BhY2UsIHdlYkFz
c2VtYmx5TW9kdWxlSGVhcENlbGxUeXBlLmdldCgpLCBKU1dlYkFzc2VtYmx5TW9kdWxlKQogRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkU3BhY2UsIHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkSGVhcENlbGxUeXBlLmdldCgpLCBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZCkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyh3ZWJBc3NlbWJseVRhYmxlU3BhY2UsIHdlYkFzc2VtYmx5VGFibGVIZWFwQ2VsbFR5cGUu
Z2V0KCksIEpTV2ViQXNzZW1ibHlUYWJsZSkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyh3ZWJBc3NlbWJseVRhZ1NwYWNlLCB3ZWJBc3NlbWJseVRhZ0hlYXBDZWxsVHlw
ZS5nZXQoKSwgSlNXZWJBc3NlbWJseVRhZykKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyh3ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxU
eXBlLmdldCgpLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbikgLy8gSGFzaDoweGQ0YTVmZjAx
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggN2E1OGIyNzllNjcw
YTg0MDNkMWYzOTQxMjM1N2Q1ZTc3MTEzZjU3OC4uYWE4OWIyOGFkZTJmMjViNmNjODQ0MGQ2MTRi
Yzk0N2FlM2JhNGY3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0yOSw2ICsy
OSw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCisjaW5jbHVkZSAi
Q2FsbGVlQml0cy5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKICNpbmNs
dWRlICJDb21wbGV0ZVN1YnNwYWNlLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgpA
QCAtNDUwLDYgKzQ1MSw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENl
bGxUeXBlPiBpbnRsU2VnbWVudHNIZWFwQ2VsbFR5cGU7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5Q29kZUJs
b2NrSGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdl
YkFzc2VtYmx5RXhjZXB0aW9uSGVhcENlbGxUeXBlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29I
ZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlHbG9iYWxIZWFwQ2VsbFR5cGU7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlJbnN0YW5j
ZUhlYXBDZWxsVHlwZTsKQEAgLTQ1Nyw2ICs0NTksNyBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlx
dWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlNb2R1bGVIZWFwQ2VsbFR5cGU7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmRIZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2Vi
QXNzZW1ibHlUYWJsZUhlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENl
bGxUeXBlPiB3ZWJBc3NlbWJseVRhZ0hlYXBDZWxsVHlwZTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KEpJVCkKQEAgLTYyNiw2ICs2MjksNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoanNUb1dhc21JQ0NhbGxl
ZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1i
bHlDb2RlQmxvY2tTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KHdlYkFzc2VtYmx5RXhjZXB0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUih3ZWJBc3NlbWJseUZ1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUdsb2JhbFNwYWNlKQogICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlJbnN0YW5jZVNwYWNlKQpAQCAt
NjMzLDYgKzYzNyw3IEBAIHB1YmxpYzoKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKHdlYkFzc2VtYmx5TW9kdWxlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUih3ZWJBc3NlbWJseU1vZHVsZVJlY29yZFNwYWNlKQogICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlUYWJsZVNwYWNlKQorICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlUYWdTcGFjZSkKICAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uU3BhY2UpCiAjZW5kaWYKIApAQCAtODk2LDYgKzkwMSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGNhbGxGcmFtZUZvckNhdGNoKTsKICAgICB9
CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IGNhbGxlZUZvcldhc21DYXRjaE9mZnNldCgpCisgICAg
eworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCBjYWxsZWVGb3JXYXNtQ2F0Y2gp
OworICAgIH0KKwogICAgIHN0YXRpYyBwdHJkaWZmX3QgdG9wRW50cnlGcmFtZU9mZnNldCgpCiAg
ICAgewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCB0b3BFbnRyeUZyYW1lKTsK
QEAgLTk5MCw2ICsxMDAwLDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHZhcmFyZ3NMZW5ndGg7
CiAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWVSZXR1cm5WYWx1ZTsKICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZUZvckNhdGNoOworICAgIENhbGxlZUJpdHMgY2FsbGVlRm9yV2FzbUNhdGNoOwog
ICAgIHZvaWQqIHRhcmdldE1hY2hpbmVQQ0ZvclRocm93OwogICAgIGNvbnN0IEluc3RydWN0aW9u
KiB0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3c7CiAgICAgdWludDMyX3Qgb3NyRXhpdEluZGV4
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJh
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5j
cHAKaW5kZXggZjljMjk0NjAwNjE4NzNkMDA0NDk4YTgwMDQ0NjYyY2UyMTdmNmJlNC4uNzkyODJi
NzdlNzg2MTYxZDVkZjA4YTZkZjgxYTQyZmVlMTE4MzlmYyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCkBAIC0xNDcsNyArMTQ3LDEy
IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3Qg
Q29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpJZjsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250cm9sRGF0
YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRy
eTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNoKGNvbnN0IENvbnRyb2xEYXRhJiBjb250
cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2g7IH0K
KyAgICAgICAgc3RhdGljIGJvb2wgaXNBbnlDYXRjaChjb25zdCBDb250cm9sRGF0YSYgY29udHJv
bCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OkNhdGNoOyB9CiAg
ICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wp
IHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbDsgfQor
ICAgICAgICBzdGF0aWMgYm9vbCBpc0xvb3AoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsg
cmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wOyB9CisgICAgICAg
IHN0YXRpYyBib29sIGlzQmxvY2soY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJu
IGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpCbG9jazsgfQogCiAgICAgICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICB7CkBAIC0xNjQsNiArMTY5
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpUb3BMZXZlbDoKICAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIlRvcExldmVsOiAiKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpUcnk6CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KCJUcnk6ICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBCbG9ja1R5cGU6OkNhdGNoOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiQ2F0Y2g6
ICIpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
b3V0LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIsIFNwZWNpYWw6ICIp
OwogICAgICAgICAgICAgaWYgKHNwZWNpYWwpCkBAIC0zMTQsNiArMzI1LDE2IEBAIHB1YmxpYzoK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRh
JiwgY29uc3QgU3RhY2smKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOwogCisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkVHJ5KEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5n
U3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjayk7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hUb1VucmVhY2hh
YmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBDb250cm9sVHlw
ZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRDYXRjaEFsbChTdGFjayYsIENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJik7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRGVsZWdhdGUoQ29udHJvbFR5
cGUmLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYsIENvbnRyb2xUeXBlJik7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGhyb3codW5zaWduZWQgZXhj
ZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFN0YWNrJik7CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29u
dHJvbFR5cGUmKTsKKwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJl
dHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYs
IEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRy
b2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CkBA
IC0yOTgyLDYgKzMwMDMsNjAgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFj
aGFibGUoQ29udHJvbERhdGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9
OwogfQogCisvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIFdhc20gZXhjZXB0aW9ucyBpbiB0aGUg
QWlyIGdlbmVyYXRvcgorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzMTIxMQorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlLCBTdGFj
ayYsIENvbnRyb2xUeXBlJiwgU3RhY2smKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2godW5zaWduZWQsIGNvbnN0
IFNpZ25hdHVyZSYsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0JikgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVu
c2lnbmVkLCBjb25zdCBTaWduYXR1cmUmLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbChTdGFjayYs
IENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmLCBDb250cm9s
VHlwZSYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZERlbGVn
YXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYsIENvbnRyb2xUeXBlJikgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGhyb3codW5zaWduZWQgZXhjZXB0aW9u
SW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mLCBTdGFjayYpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBVTlVTRURfUEFSQU0oZXhjZXB0aW9uSW5kZXgpOworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBl
JikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9CisKIGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYgZGF0YSwgY29uc3QgU3RhY2sm
IHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIENhbGxJbmZvcm1hdGlvbiB3
YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3Io
KmRhdGEuc2lnbmF0dXJlKCksIENhbGxSb2xlOjpDYWxsZWUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDA4MWNjMmIyNTVlZmQ5
NTU3MWMzZTU5MTFlNDM3ODBiNzk0Y2MzYTAuLjliN2UwMGYyYzc3YzQ3MGU1NzNhMzcwMzAxY2Iy
YmRkNWJhY2MwODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKQEAgLTQ4LDYgKzQ4LDggQEAKICNpbmNsdWRlICJCM1dhc21Cb3VuZHND
aGVja1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKKyNpbmNs
dWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKICNpbmNs
dWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKQEAgLTgzLDE4ICs4NSwzMyBAQCBzdGF0aWMgY29u
c3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogfQogCitjbGFzcyBCM0lSR2VuZXJhdG9y
Oworc3RydWN0IFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgeworICAgIHZvaWQgZ2VuZXJhdGUo
Q0NhbGxIZWxwZXJzJiwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYsIEIzSVJH
ZW5lcmF0b3IqKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc19pbnZh
bGlkQ2FsbFNpdGVJbmRleCA9ICBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7
CisKKyAgICB1bnNpZ25lZCBtX2NhbGxTaXRlSW5kZXggeyBzX2ludmFsaWRDYWxsU2l0ZUluZGV4
IH07CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCiBjbGFzcyBCM0lSR2VuZXJhdG9yIHsK
IHB1YmxpYzoKLSAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IFZhbHVlKjsKKyAgICB1c2luZyBF
eHByZXNzaW9uVHlwZSA9IFZhcmlhYmxlKjsKICAgICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9y
PEV4cHJlc3Npb25UeXBlLCA4PjsKIAogICAgIHN0cnVjdCBDb250cm9sRGF0YSB7Ci0gICAgICAg
IENvbnRyb2xEYXRhKFByb2NlZHVyZSYgcHJvYywgT3JpZ2luIG9yaWdpbiwgQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uLCBC
YXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAgICAgICAgQ29udHJvbERhdGEoUHJvY2Vk
dXJlJiBwcm9jLCBPcmlnaW4gb3JpZ2luLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIEJsb2Nr
VHlwZSB0eXBlLCB1bnNpZ25lZCBzdGFja1NpemUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwg
QmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIpCiAgICAgICAgICAgICA6IGNvbnRyb2xCbG9j
a1R5cGUodHlwZSkKICAgICAgICAgICAgICwgbV9zaWduYXR1cmUoc2lnbmF0dXJlKQorICAgICAg
ICAgICAgLCBtX3N0YWNrU2l6ZShzdGFja1NpemUpCiAgICAgICAgICAgICAsIGNvbnRpbnVhdGlv
bihjb250aW51YXRpb24pCiAgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKICAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKHR5cGUgIT0gQmxvY2tUeXBlOjpUcnkgJiYgdHlwZSAhPSBC
bG9ja1R5cGU6OkNhdGNoKTsKKyAgICAgICAgICAgIGlmICh0eXBlICE9IEJsb2NrVHlwZTo6VG9w
TGV2ZWwpCisgICAgICAgICAgICAgICAgbV9zdGFja1NpemUgLT0gc2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCk7CisKICAgICAgICAgICAgIGlmICh0eXBlID09IEJsb2NrVHlwZTo6TG9vcCkgewog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3Vt
ZW50Q291bnQoKTsgKytpKQogICAgICAgICAgICAgICAgICAgICBwaGlzLmFwcGVuZChwcm9jLmFk
ZDxWYWx1ZT4oUGhpLCB0b0IzVHlwZShzaWduYXR1cmUtPmFyZ3VtZW50KGkpKSwgb3JpZ2luKSk7
CkBAIC0xMDQsMTIgKzEyMSwzNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAorICAgICAgICBDb250cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIEJs
b2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgQmxvY2tUeXBlIHR5cGUsIHVuc2lnbmVkIHN0YWNrU2l6
ZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uLCB1bnNpZ25lZCB0cnlTdGFydCwgdW5zaWduZWQg
dHJ5RGVwdGgpCisgICAgICAgICAgICA6IGNvbnRyb2xCbG9ja1R5cGUodHlwZSkKKyAgICAgICAg
ICAgICwgbV9zaWduYXR1cmUoc2lnbmF0dXJlKQorICAgICAgICAgICAgLCBtX3N0YWNrU2l6ZShz
dGFja1NpemUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCisgICAg
ICAgICAgICAsIHNwZWNpYWwobnVsbHB0cikKKyAgICAgICAgICAgICwgbV90cnlTdGFydCh0cnlT
dGFydCkKKyAgICAgICAgICAgICwgbV90cnlEZXB0aCh0cnlEZXB0aCkKKyAgICAgICAgeworICAg
ICAgICAgICAgVU5VU0VEX1BBUkFNKHByb2MpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKG9y
aWdpbik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5y
ZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5hZGQ8
VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpKSwgb3JpZ2luKSk7
CisgICAgICAgIH0KKwogICAgICAgICBDb250cm9sRGF0YSgpCiAgICAgICAgIHsKICAgICAgICAg
fQogCiAgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wp
IHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZjsgfQorICAgICAg
ICBzdGF0aWMgYm9vbCBpc1RyeShjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4g
Y29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeTsgfQorICAgICAgICBzdGF0aWMg
Ym9vbCBpc0FueUNhdGNoKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250
cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2g7IH0KICAgICAgICAgc3RhdGljIGJv
b2wgaXNUb3BMZXZlbChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJv
bC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsOyB9CisgICAgICAgIHN0YXRpYyBi
b29sIGlzTG9vcChjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5i
bG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3A7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNC
bG9jayhjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5
cGUoKSA9PSBCbG9ja1R5cGU6OkJsb2NrOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzQ2F0Y2go
Y29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250cm9sLmJsb2NrVHlwZSgpICE9IEJsb2NrVHlwZTo6Q2F0Y2gpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wuY2F0Y2hLaW5kKCkgPT0g
Q2F0Y2hLaW5kOjpDYXRjaDsKKyAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogICAgICAgICB7CkBAIC0xMjYsNiArMTY4LDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpUb3BMZXZlbDoKICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIlRvcExldmVsOiAiKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQmxvY2tUeXBlOjpUcnk6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJUcnk6
ICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6
OkNhdGNoOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiQ2F0Y2g6ICIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb3V0LnByaW50KCJDb250
aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOwogICAgICAgICAgICAg
aWYgKHNwZWNpYWwpCkBAIC0xNTQsNiArMjAyLDI0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHNw
ZWNpYWwgPSBudWxscHRyOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBjb252ZXJ0VHJ5VG9D
YXRjaCh1bnNpZ25lZCB0cnlFbmRDYWxsU2l0ZUluZGV4LCBWYXJpYWJsZSogZXhjZXB0aW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpU
cnkpOworICAgICAgICAgICAgY29udHJvbEJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6Q2F0Y2g7Cisg
ICAgICAgICAgICBtX2NhdGNoS2luZCA9IENhdGNoS2luZDo6Q2F0Y2g7CisgICAgICAgICAgICBt
X3RyeUVuZCA9IHRyeUVuZENhbGxTaXRlSW5kZXg7CisgICAgICAgICAgICBtX2V4Y2VwdGlvbiA9
IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY29udmVydFRyeVRvQ2F0Y2hB
bGwodW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVmFyaWFibGUqIGV4Y2VwdGlvbikKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VHJ5
KTsKKyAgICAgICAgICAgIGNvbnRyb2xCbG9ja1R5cGUgPSBCbG9ja1R5cGU6OkNhdGNoOworICAg
ICAgICAgICAgbV9jYXRjaEtpbmQgPSBDYXRjaEtpbmQ6OkNhdGNoQWxsOworICAgICAgICAgICAg
bV90cnlFbmQgPSB0cnlFbmRDYWxsU2l0ZUluZGV4OworICAgICAgICAgICAgbV9leGNlcHRpb24g
PSBleGNlcHRpb247CisgICAgICAgIH0KKwogICAgICAgICBTaWduYXR1cmVBcmdDb3VudCBicmFu
Y2hUYXJnZXRBcml0eSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChibG9ja1R5
cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCkBAIC0xNjksMTMgKzIzNSw1MyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPnJldHVyblR5cGUoaSk7CiAgICAgICAgIH0K
IAorICAgICAgICB1bnNpZ25lZCB0cnlTdGFydCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6VHJ5IHx8IGNvbnRyb2xC
bG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gbV90cnlT
dGFydDsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHRyeUVuZCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250cm9sQmxvY2tUeXBlID09IEJsb2NrVHlwZTo6
Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fdHJ5RW5kOworICAgICAgICB9CisKKyAgICAg
ICAgdW5zaWduZWQgdHJ5RGVwdGgoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoY29udHJvbEJsb2NrVHlwZSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBjb250cm9sQmxvY2tUeXBl
ID09IEJsb2NrVHlwZTo6Q2F0Y2gpOworICAgICAgICAgICAgcmV0dXJuIG1fdHJ5RGVwdGg7Cisg
ICAgICAgIH0KKworICAgICAgICBDYXRjaEtpbmQgY2F0Y2hLaW5kKCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRj
aCk7CisgICAgICAgICAgICByZXR1cm4gbV9jYXRjaEtpbmQ7CisgICAgICAgIH0KKworICAgICAg
ICBWYXJpYWJsZSogZXhjZXB0aW9uKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKGNvbnRyb2xCbG9ja1R5cGUgPT0gQmxvY2tUeXBlOjpDYXRjaCk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9leGNlcHRpb247CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzdGFja1Np
emUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrU2l6ZTsgfQorCiAgICAgcHJpdmF0ZToKKyAgICAg
ICAgLy8gRklYTUU6IENvbXByZXNzIEIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIGZpZWxkcyB1
c2luZyBhbiB1bmlvbgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMxMjEyCiAgICAgICAgIGZyaWVuZCBjbGFzcyBCM0lSR2VuZXJhdG9yOwogICAg
ICAgICBCbG9ja1R5cGUgY29udHJvbEJsb2NrVHlwZTsKICAgICAgICAgQmxvY2tTaWduYXR1cmUg
bV9zaWduYXR1cmU7CisgICAgICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOwogICAgICAgICBCYXNp
Y0Jsb2NrKiBjb250aW51YXRpb247CiAgICAgICAgIEJhc2ljQmxvY2sqIHNwZWNpYWw7Ci0gICAg
ICAgIFJlc3VsdExpc3QgcGhpczsKKyAgICAgICAgVmVjdG9yPFZhbHVlKj4gcGhpczsKKyAgICAg
ICAgdW5zaWduZWQgbV90cnlTdGFydDsKKyAgICAgICAgdW5zaWduZWQgbV90cnlFbmQ7CisgICAg
ICAgIHVuc2lnbmVkIG1fdHJ5RGVwdGg7CisgICAgICAgIENhdGNoS2luZCBtX2NhdGNoS2luZDsK
KyAgICAgICAgVmFyaWFibGUqIG1fZXhjZXB0aW9uOwogICAgIH07CiAKICAgICB1c2luZyBDb250
cm9sVHlwZSA9IENvbnRyb2xEYXRhOwpAQCAtMjczLDYgKzM3OSwxNiBAQCBwdWJsaWM6CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNv
bnN0IFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxz
ZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIAorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNr
LCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBj
b25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoVG9VbnJlYWNoYWJsZSh1
bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBS
ZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0
Y2hBbGwoU3RhY2smLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwg
Q29udHJvbFR5cGUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRE
ZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRocm93KHVuc2lnbmVkIGV4Y2VwdGlv
bkluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBTdGFjayYpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xU
eXBlJik7CisKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4o
Y29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0
YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwpAQCAtMjg2
LDIwICs0MDIsMzYgQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUm
LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsUmVmKGNvbnN0IFNpZ25h
dHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMp
OwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7
Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdEluZGlyZWN0Q2FsbChW
YWx1ZSogY2FsbGVlSW5zdGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUsIGNvbnN0IFNp
Z25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0SW5kaXJlY3RDYWxsKFZhbHVl
KiBjYWxsZWVJbnN0YW5jZSwgVmFsdWUqIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmKTsKICAgICBCMzo6VmFsdWUq
IGNyZWF0ZUNhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqLCBPcmlnaW4sIGNvbnN0IFNpZ25hdHVy
ZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIGNvbnN0IFNjb3BlZExhbWJkYTx2b2lk
KFBhdGNocG9pbnRWYWx1ZSopPiYgcGF0Y2hwb2ludEZ1bmN0b3IpOwogCiAgICAgdm9pZCBkdW1w
KGNvbnN0IENvbnRyb2xTdGFjayYsIGNvbnN0IFN0YWNrKiBleHByZXNzaW9uU3RhY2spOwogICAg
IHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+KiBwYXJzZXIpIHsg
bV9wYXJzZXIgPSBwYXJzZXI7IH07CiAgICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkg
eyB9Ci0gICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsgfQorICAgIHZvaWQgZGlkUG9w
VmFsdWVGcm9tU3RhY2soKSB7IC0tbV9zdGFja1NpemU7IH0KIAogICAgIFZhbHVlKiBjb25zdGFu
dChCMzo6VHlwZSwgdWludDY0X3QgYml0cywgc3RkOjpvcHRpb25hbDxPcmlnaW4+ID0gc3RkOjpu
dWxsb3B0KTsKICAgICBWYWx1ZSogZnJhbWVQb2ludGVyKCk7CisgICAgdm9pZCBpbnNlcnRFbnRy
eVN3aXRjaCgpOwogICAgIHZvaWQgaW5zZXJ0Q29uc3RhbnRzKCk7CiAKICAgICBCMzo6VHlwZSB0
b0IzUmVzdWx0VHlwZShCbG9ja1NpZ25hdHVyZSk7CiAKKyAgICB2b2lkIGFkZFN0YWNrTWFwKHVu
c2lnbmVkIGNhbGxTaXRlSW5kZXgsIFN0YWNrTWFwJiYgc3RhY2ttYXApCisgICAgeworICAgICAg
ICBtX3N0YWNrbWFwcy5hZGQoQ2FsbFNpdGVJbmRleChjYWxsU2l0ZUluZGV4KSwgV1RGTW92ZShz
dGFja21hcCkpOworICAgIH0KKworICAgIFN0YWNrTWFwcyYmIHRha2VTdGFja21hcHMoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9zdGFja21hcHMpOworICAgIH0KKworICAgIFZl
Y3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiYmIHRha2VFeGNlcHRpb25IYW5kbGVycygpCisgICAg
eworICAgICAgICByZXR1cm4gV1RGTW92ZShtX2V4Y2VwdGlvbkhhbmRsZXJzKTsKKyAgICB9CisK
IHByaXZhdGU6CiAgICAgdm9pZCBlbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzJiwgRXhj
ZXB0aW9uVHlwZSk7CiAKQEAgLTMwNywyOCArNDM5LDMzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBl
bWl0TG9vcFRpZXJVcENoZWNrKHVpbnQzMl90IGxvb3BJbmRleCwgY29uc3QgU3RhY2smIGVuY2xv
c2luZ1N0YWNrLCBjb25zdCBTdGFjayYgbmV3U3RhY2spOwogCiAgICAgdm9pZCBlbWl0V3JpdGVC
YXJyaWVyRm9ySlNXcmFwcGVyKCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJl
cGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50
MzJfdCBzaXplT2ZPcCk7CisgICAgVmFsdWUqIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKFZh
bHVlKiBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKICAgICBC
Mzo6S2luZCBtZW1vcnlLaW5kKEIzOjpPcGNvZGUgbWVtb3J5T3ApOwotICAgIEV4cHJlc3Npb25U
eXBlIGVtaXRMb2FkT3AoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMy
X3Qgb2Zmc2V0KTsKLSAgICB2b2lkIGVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAg
ICBWYWx1ZSogZW1pdExvYWRPcChMb2FkT3BUeXBlLCBWYWx1ZSogcG9pbnRlciwgdWludDMyX3Qg
b2Zmc2V0KTsKKyAgICB2b2lkIGVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlLCBWYWx1ZSogcG9pbnRl
ciwgVmFsdWUqLCB1aW50MzJfdCBvZmZzZXQpOwogCi0gICAgRXhwcmVzc2lvblR5cGUgc2FuaXRp
emVBdG9taWNSZXN1bHQoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBFeHByZXNzaW9uVHlwZSByZXN1
bHQpOwotICAgIEV4cHJlc3Npb25UeXBlIGVtaXRBdG9taWNMb2FkT3AoRXh0QXRvbWljT3BUeXBl
LCBUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOwotICAgIHZv
aWQgZW1pdEF0b21pY1N0b3JlT3AoRXh0QXRvbWljT3BUeXBlLCBUeXBlLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKLSAgICBF
eHByZXNzaW9uVHlwZSBlbWl0QXRvbWljQmluYXJ5Uk1XT3AoRXh0QXRvbWljT3BUeXBlLCBUeXBl
LCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qg
b2Zmc2V0KTsKLSAgICBFeHByZXNzaW9uVHlwZSBlbWl0QXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4
dEF0b21pY09wVHlwZSwgVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5
cGUgZXhwZWN0ZWQsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworICAg
IFZhbHVlKiBzYW5pdGl6ZUF0b21pY1Jlc3VsdChFeHRBdG9taWNPcFR5cGUsIFR5cGUsIFZhbHVl
KiByZXN1bHQpOworICAgIFZhbHVlKiBlbWl0QXRvbWljTG9hZE9wKEV4dEF0b21pY09wVHlwZSwg
VHlwZSwgVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7CisgICAgdm9pZCBlbWl0QXRv
bWljU3RvcmVPcChFeHRBdG9taWNPcFR5cGUsIFR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSos
IHVpbnQzMl90IG9mZnNldCk7CisgICAgVmFsdWUqIGVtaXRBdG9taWNCaW5hcnlSTVdPcChFeHRB
dG9taWNPcFR5cGUsIFR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSosIHVpbnQzMl90IG9mZnNl
dCk7CisgICAgVmFsdWUqIGVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2UoRXh0QXRvbWljT3BUeXBl
LCBUeXBlLCBWYWx1ZSogcG9pbnRlciwgVmFsdWUqIGV4cGVjdGVkLCBWYWx1ZSosIHVpbnQzMl90
IG9mZnNldCk7CiAKLSAgICB2b2lkIHVuaWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBlIHBoaSwgY29u
c3QgRXhwcmVzc2lvblR5cGUgc291cmNlKTsKLSAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2Nr
KGNvbnN0IFN0YWNrJiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgc3RhY2spOworICAg
IHZvaWQgdW5pZnkoVmFsdWUqIHBoaSwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291cmNlKTsKKyAg
ICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IFN0YWNrJiByZXN1bHRTdGFjaywgY29u
c3QgQ29udHJvbERhdGEmIGJsb2NrKTsKIAotICAgIHZvaWQgZW1pdENoZWNrc0Zvck1vZE9yRGl2
KEIzOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KTsK
KyAgICB2b2lkIGVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlLCBWYWx1ZSogbGVmdCwg
VmFsdWUqIHJpZ2h0KTsKIAotICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9p
bnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCk7Ci0gICAgRXhwcmVzc2lv
blR5cGUgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNP
cHMoRXh0QXRvbWljT3BUeXBlLCBFeHByZXNzaW9uVHlwZSwgdWludDMyX3QpOworICAgIGludDMy
X3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoVmFsdWUqJiwgdWlu
dDMyX3QpOworICAgIFZhbHVlKiBXQVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09m
ZnNldEZvckF0b21pY09wcyhFeHRBdG9taWNPcFR5cGUsIFZhbHVlKiwgdWludDMyX3QpOwogCiAg
ICAgdm9pZCByZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShQcm9jZWR1cmUmLCBCYXNpY0Jsb2Nr
KiwgVmFsdWUqKTsKICAgICBlbnVtIGNsYXNzIFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHsgTm8s
IFllcyB9OwotICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNh
Y2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiwgVmFsdWUqIGluc3RhbmNl
LCBQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKik7CisgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlH
bG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRp
b24mLCBWYWx1ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBib29sIHJlc3Rv
cmVJbnN0YW5jZSA9IHRydWUpOworCisgICAgVmFsdWUqIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcih1
bnNpZ25lZCYgaW5kZXhJbkJ1ZmZlciwgVmFsdWUqIHBvaW50ZXIsIEIzOjpUeXBlKTsKKyAgICB2
b2lkIGNvbm5lY3RDb250cm9sRW50cnkodW5zaWduZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBw
b2ludGVyLCBDb250cm9sRGF0YSYsIFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xEYXRh
JiBjdXJyZW50RGF0YSwgYm9vbCBmaWxsTG9vcFBoaXMgPSBmYWxzZSk7CisgICAgVmFsdWUqIGVt
aXRDYXRjaEltcGwoQ2F0Y2hLaW5kLCBDb250cm9sVHlwZSYsIHVuc2lnbmVkIGV4Y2VwdGlvbklu
ZGV4ID0gMCk7CisgICAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBwcmVwYXJlUGF0Y2hwb2lu
dEZvckV4Y2VwdGlvbnMoQmFzaWNCbG9jayosIFBhdGNocG9pbnRWYWx1ZSopOwogCiAgICAgT3Jp
Z2luIG9yaWdpbigpOwogCkBAIC0zMzksNiArNDc2LDYyIEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBtX291dGVyTG9vcHMubGFzdCgpOwogICAgIH0KIAorICAgIEV4cHJlc3Npb25UeXBlIHB1
c2goVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHB1c2godG9CM1R5cGUodHlwZSkp
OworICAgIH0KKworICAgIEV4cHJlc3Npb25UeXBlIHB1c2goQjM6OlR5cGUgdHlwZSkKKyAgICB7
CisgICAgICAgICsrbV9zdGFja1NpemU7CisgICAgICAgIGlmIChtX3N0YWNrU2l6ZSA+IG1fbWF4
U3RhY2tTaXplKSB7CisgICAgICAgICAgICBtX21heFN0YWNrU2l6ZSA9IG1fc3RhY2tTaXplOwor
ICAgICAgICAgICAgVmFyaWFibGUqIHZhciA9IG1fcHJvYy5hZGRWYXJpYWJsZSh0eXBlKTsKKyAg
ICAgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcik7CisgICAgICAgICAgICByZXR1cm4gdmFyOwor
ICAgICAgICB9CisKKyAgICAgICAgVmFyaWFibGUqIHZhciA9IG1fc3RhY2tbbV9zdGFja1NpemUg
LSAxXTsKKyAgICAgICAgaWYgKHZhci0+dHlwZSgpID09IHR5cGUpCisgICAgICAgICAgICByZXR1
cm4gdmFyOworCisgICAgICAgIHZhciA9IG1fcHJvYy5hZGRWYXJpYWJsZSh0eXBlKTsKKyAgICAg
ICAgbV9zdGFja1ttX3N0YWNrU2l6ZSAtIDFdID0gdmFyOworICAgICAgICByZXR1cm4gdmFyOwor
ICAgIH0KKworICAgIEV4cHJlc3Npb25UeXBlIHB1c2goVmFsdWUqIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgVmFyaWFibGUqIHZhciA9IHB1c2godmFsdWUtPnR5cGUoKSk7CisgICAgICAgIHNldCh2
YXIsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHZhcjsKKyAgICB9CisKKyAgICBWYWx1ZSogZ2V0
KEJhc2ljQmxvY2sqIGJsb2NrLCBWYXJpYWJsZSogdmFyaWFibGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9y
aWdpbigpLCB2YXJpYWJsZSk7CisgICAgfQorCisgICAgVmFsdWUqIGdldChWYXJpYWJsZSogdmFy
aWFibGUpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0KG1fY3VycmVudEJsb2NrLCB2YXJpYWJs
ZSk7CisgICAgfQorCisgICAgVmFsdWUqIHNldChCYXNpY0Jsb2NrKiBibG9jaywgVmFyaWFibGUq
IGRzdCwgVmFsdWUqIHNyYykKKyAgICB7CisgICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3
PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgb3JpZ2luKCksIGRzdCwgc3JjKTsKKyAg
ICB9CisKKyAgICBWYWx1ZSogc2V0KFZhcmlhYmxlKiBkc3QsIFZhbHVlKiBzcmMpCisgICAgewor
ICAgICAgICByZXR1cm4gc2V0KG1fY3VycmVudEJsb2NrLCBkc3QsIHNyYyk7CisgICAgfQorCisg
ICAgVmFsdWUqIHNldChWYXJpYWJsZSogZHN0LCBWYXJpYWJsZSogc3JjKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHNldChkc3QsIGdldChzcmMpKTsKKyAgICB9CisKICAgICBGdW5jdGlvblBhcnNl
cjxCM0lSR2VuZXJhdG9yPiogbV9wYXJzZXIgeyBudWxscHRyIH07CiAgICAgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIG1faW5mbzsKICAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9y
eU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CkBAIC0zNDgsMTAgKzU0MSwxMiBAQCBwcml2YXRlOgog
ICAgIFRpZXJVcENvdW50KiBtX3RpZXJVcCB7IG51bGxwdHIgfTsKIAogICAgIFByb2NlZHVyZSYg
bV9wcm9jOwotICAgIEJhc2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9OworICAgIFZl
Y3RvcjxCYXNpY0Jsb2NrKj4gbV9yb290QmxvY2tzOworICAgIEJhc2ljQmxvY2sqIG1fdG9wTGV2
ZWxCbG9jazsKICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAg
ICBWZWN0b3I8dWludDMyX3Q+IG1fb3V0ZXJMb29wczsKICAgICBWZWN0b3I8VmFyaWFibGUqPiBt
X2xvY2FsczsKKyAgICBWZWN0b3I8VmFyaWFibGUqPiBtX3N0YWNrOwogICAgIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiYgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsgLy8gTGlzdCBl
YWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4IHdob3NlIGFkZHJlc3MgaXQgc2hv
dWxkIGJlIHBhdGNoZWQgd2l0aC4KICAgICB1bnNpZ25lZCYgbV9vc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplOwogICAgIEhhc2hNYXA8VmFsdWVLZXksIFZhbHVlKj4gbV9jb25zdGFudFBvb2w7CkBA
IC0zNjUsNiArNTYwLDcgQEAgcHJpdmF0ZToKIAogICAgIFZhbHVlKiBtX2luc3RhbmNlVmFsdWUg
eyBudWxscHRyIH07IC8vIEFsd2F5cyB1c2UgdGhlIGFjY2Vzc29yIGJlbG93IHRvIGVuc3VyZSB0
aGUgaW5zdGFuY2UgdmFsdWUgaXMgbWF0ZXJpYWxpemVkIHdoZW4gdXNlZC4KICAgICBib29sIG1f
dXNlc0luc3RhbmNlVmFsdWUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNDYXRjaCB7IGZhbHNl
IH07CiAgICAgVmFsdWUqIGluc3RhbmNlVmFsdWUoKQogICAgIHsKICAgICAgICAgbV91c2VzSW5z
dGFuY2VWYWx1ZSA9IHRydWU7CkBAIC0zNzMsMTAgKzU2OSwyOSBAQCBwcml2YXRlOgogCiAgICAg
dWludDMyX3QgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9u
dW1JbXBvcnRGdW5jdGlvbnM7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX3RyeURlcHRoIHsg
MCB9OworICAgIENoZWNrZWQ8dW5zaWduZWQ+IG1fY2FsbFNpdGVJbmRleCB7IDAgfTsKKyAgICBD
aGVja2VkPHVuc2lnbmVkPiBtX3N0YWNrU2l6ZSB7IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVk
PiBtX21heFN0YWNrU2l6ZSB7IDAgfTsKKyAgICBTdGFja01hcHMgbV9zdGFja21hcHM7CisgICAg
VmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CiB9OwogCit2
b2lkIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OmdlbmVyYXRlKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMsIEIzSVJHZW5lcmF0
b3IqIGdlbmVyYXRvcikgY29uc3QKK3sKKyAgICBpZiAobV9jYWxsU2l0ZUluZGV4ID09IHNfaW52
YWxpZENhbGxTaXRlSW5kZXgpCisgICAgICAgIHJldHVybjsKKworICAgIFN0YWNrTWFwIHZhbHVl
czsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29mZnNldDsgaSA8IHBhcmFtcy52YWx1ZSgpLT5u
dW1DaGlsZHJlbigpOyArK2kpCisgICAgICAgIHZhbHVlcy5jb25zdHJ1Y3RBbmRBcHBlbmQocGFy
YW1zW2ldLCBwYXJhbXMudmFsdWUoKS0+Y2hpbGQoaSktPnR5cGUoKSk7CisgICAgZ2VuZXJhdG9y
LT5hZGRTdGFja01hcChtX2NhbGxTaXRlSW5kZXgsIFdURk1vdmUodmFsdWVzKSk7CisgICAgaml0
LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9jYWxsU2l0ZUluZGV4KSwgQ0Nh
bGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKK30KKwogLy8gTWVtb3J5IGFjY2Vzc2VzIGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWdu
ZWQgMzItYml0IG9mZnNldHMsIHdoZXJlYXMgdGhleSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0
cyBpbiBCMy4KLWludDMyX3QgQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChF
eHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJfdCBvZmZzZXQpCitpbnQzMl90IEIzSVJHZW5lcmF0
b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQoVmFsdWUqJiBwdHIsIHVpbnQzMl90IG9mZnNldCkK
IHsKICAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkgPiBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7CiAgICAgICAg
IHB0ciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmln
aW4oKSwgcHRyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgb2Zmc2V0KSk7CkBAIC00MjgsOCArNjQzLDkgQEAgQjNJUkdlbmVyYXRvcjo6
QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBw
cm9jZWR1cmUKICAgICAsIG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXMobV9wcm9jKQogICAgICwg
bV9udW1JbXBvcnRGdW5jdGlvbnMoaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCiB7Ci0gICAg
bV9yb290QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAgICBtX2N1cnJlbnRCbG9jayA9IG1f
cm9vdEJsb2NrOworICAgIG1fdG9wTGV2ZWxCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOworICAg
IG1fcm9vdEJsb2Nrcy5hcHBlbmQobV9wcm9jLmFkZEJsb2NrKCkpOworICAgIG1fY3VycmVudEJs
b2NrID0gbV9yb290QmxvY2tzWzBdOwogCiAgICAgLy8gRklYTUUgd2UgZG9uJ3QgcmVhbGx5IG5l
ZWQgdG8gcGluIHJlZ2lzdGVycyBoZXJlIGlmIHRoZXJlJ3Mgbm8gbWVtb3J5LiBJdCBtYWtlcyB3
YXNtIC0+IHdhc20gdGh1bmtzIHNpbXBsZXIgZm9yIG5vdy4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NjYyMwogICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYg
cGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CkBAIC00NjEsNiArNjc3LDI2
IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgIH0pOwogICAgIH0KIAorICAgIHsK
KyAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogZ2V0SW5zdGFuY2UgPSBtX3RvcExldmVsQmxv
Y2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIHBvaW50ZXJUeXBlKCks
IE9yaWdpbigpKTsKKyAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAg
ICAgIGdldEluc3RhbmNlLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3Rl
cnMoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2Fz
bVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRv
ZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNp
ZGUuCisgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRS
ZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgorICAgICAg
ICAgICAgZ2V0SW5zdGFuY2UtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gZmFsc2U7CisgICAgICAg
ICAgICBnZXRJbnN0YW5jZS0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAg
ICBnZXRJbnN0YW5jZS0+cmVzdWx0Q29uc3RyYWludHMgPSB7IFZhbHVlUmVwOjpyZWcobV93YXNt
Q29udGV4dEluc3RhbmNlR1BSKSB9OworICAgICAgICB9CisgICAgICAgIGdldEluc3RhbmNlLT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFz
dFRMUygpKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
SWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5j
ZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRX
YXNtQ29udGV4dEluc3RhbmNlKHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgICAgICBtX2luc3RhbmNlVmFsdWUgPSBnZXRJbnN0YW5jZTsKKyAgICB9CisK
ICAgICB7CiAgICAgICAgIGF1dG8qIGNhbGxlZU1vdmVMb2NhdGlvbiA9ICZjb21waWxhdGlvbi0+
Y2FsbGVlTW92ZUxvY2F0aW9uOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikgPCBXYXNtQ2FsbGluZ0NvbnZlbnRpb246Omhl
YWRlclNpemVJbkJ5dGVzLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5vdy4iKTsKQEAgLTQ5
NCwxNyArNzMwLDEwIEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgfQogCiAgICAgewot
ICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBzdGFja092ZXJmbG93Q2hlY2sgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgcG9pbnRlclR5
cGUoKSwgT3JpZ2luKCkpOwotICAgICAgICBtX2luc3RhbmNlVmFsdWUgPSBzdGFja092ZXJmbG93
Q2hlY2s7CisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHN0YWNrT3ZlcmZsb3dDaGVjayA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBW
b2lkLCBPcmlnaW4oKSk7CisgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+YXBwZW5kU29tZVJl
Z2lzdGVyKGluc3RhbmNlVmFsdWUoKSk7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+YXBw
ZW5kU29tZVJlZ2lzdGVyKGZyYW1lUG9pbnRlcigpKTsKICAgICAgICAgc3RhY2tPdmVyZmxvd0No
ZWNrLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAg
ICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
QmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdp
c3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRo
ZSBjYWxsZXIgc2lkZS4KLSAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2lu
ZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0
ZXIuCi0gICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMud3JpdGVzUGlubmVk
ID0gZmFsc2U7Ci0gICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMucmVhZHNQ
aW5uZWQgPSB0cnVlOwotICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5yZXN1bHRDb25z
dHJhaW50cyA9IHsgVmFsdWVSZXA6OnJlZyhtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpIH07Ci0g
ICAgICAgIH0KICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5udW1HUFNjcmF0Y2hSZWdpc3Rl
cnMgPSAyOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgICAgIGNvbnN0IENoZWNrZWQ8aW50MzJfdD4gd2FzbUZyYW1lU2l6ZSA9
IHBhcmFtcy5wcm9jKCkuZnJhbWVTaXplKCk7CkBAIC01MjYsMTkgKzc1NSwxNSBAQCBCM0lSR2Vu
ZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9j
ZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgYm9vbCBuZWVkVW5kZXJmbG93Q2hlY2sgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hlY2tTaXplKSA+IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNp
emUoKTsKICAgICAgICAgICAgIGJvb2wgbmVlZHNPdmVyZmxvd0NoZWNrID0gbV9tYWtlc0NhbGxz
IHx8IHdhc21GcmFtZVNpemUgPj0gc3RhdGljX2Nhc3Q8aW50MzJfdD4obWluaW11bVBhcmVudENo
ZWNrU2l6ZSkgfHwgbmVlZFVuZGVyZmxvd0NoZWNrOwogCi0gICAgICAgICAgICBHUFJSZWcgY29u
dGV4dEluc3RhbmNlID0gQ29udGV4dDo6dXNlRmFzdFRMUygpID8gcGFyYW1zWzBdLmdwcigpIDog
bV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwotCiAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBs
ZWFmIGZ1bmN0aW9ucyB0byBub3QgZG8gc3RhY2sgY2hlY2tzIGlmIHRoZWlyIGZyYW1lIHNpemUg
aXMgd2l0aGluCiAgICAgICAgICAgICAvLyBjZXJ0YWluIGxpbWl0cyBzaW5jZSB0aGVpciBjYWxs
ZXIgd291bGQgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIGNoZWNrLgogICAgICAgICAgICAgaWYgKG5l
ZWRzT3ZlcmZsb3dDaGVjaykgewogICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgY29u
dGV4dEluc3RhbmNlID0gcGFyYW1zWzBdLmdwcigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyBm
cCA9IHBhcmFtc1sxXS5ncHIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBw
YXJhbXMuZ3BTY3JhdGNoKDApOwogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHBh
cmFtcy5ncFNjcmF0Y2goMSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFz
dFRMUygpKQotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
Y29udGV4dEluc3RhbmNlKTsKLQogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhjb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0
YWNrTGltaXQoKSksIHNjcmF0Y2gyKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKC1jaGVja1NpemUpLCBmcCwgc2NyYXRjaDEpOwogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBvdmVyZmxvdzsKQEAgLTU0OCwxMiAr
NzczLDYgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soW292ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dTdGFja092ZXJmbG93
RnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNl
RmFzdFRMUygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVl
ZGVkLCBidXQgdGhlIGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0Lgot
ICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2Ny
YXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3Jv
U2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJ
bnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAvLyBXZSBzYWlkIHdlJ2QgcmV0dXJuIGEgcG9pbnRlci4gV2UgZG9uJ3QgYWN0dWFs
bHkgbmVlZCB0byBiZWNhdXNlIGl0IGlzbid0IHVzZWQsIGJ1dCB0aGUgcGF0Y2hwb2ludCBjb25z
ZXJ2YXRpdmVseSBzYWlkIGl0IGhhZCBlZmZlY3RzIChwb3RlbnRpYWwgc3RhY2sgY2hlY2spIHdo
aWNoIHByZXZlbnQgaXQgZnJvbSBnZXR0aW5nIHJlbW92ZWQuCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0pOwogICAgIH0KQEAgLTU2NCw5ICs3ODMsMTAgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1
cmUKICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKIH0KIAotdm9p
ZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2Fj
aGVkU3RhY2tMaW1pdCByZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3Jt
YXRpb24mIG1lbW9yeSwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxv
Y2sqIGJsb2NrKQordm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxT
dGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCByZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCwgY29u
c3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUm
IHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBib29sIHJlc3RvcmVJbnN0YW5jZSkKIHsKLSAgICBy
ZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShwcm9jLCBibG9jaywgaW5zdGFuY2UpOworICAgIGlm
IChyZXN0b3JlSW5zdGFuY2UpCisgICAgICAgIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHBy
b2MsIGJsb2NrLCBpbnN0YW5jZSk7CiAKICAgICBpZiAocmVzdG9yZUNhY2hlZFN0YWNrTGltaXQg
PT0gUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcykgewogICAgICAgICAvLyBUaGUgSW5zdGFu
Y2UgY2FjaGVzIHRoZSBzdGFjayBsaW1pdCwgYnV0IGFsc28ga25vd3Mgd2hlcmUgaXRzIGNhbm9u
aWNhbCBsb2NhdGlvbiBpcy4KQEAgLTYzNCw5ICs4NTQsODEgQEAgVmFsdWUqIEIzSVJHZW5lcmF0
b3I6OmZyYW1lUG9pbnRlcigpCiAgICAgcmV0dXJuIG1fZnJhbWVQb2ludGVyOwogfQogCitzdGF0
aWMgdm9pZCBidWlsZEVudHJ5QnVmZmVyRm9yQ2F0Y2goUHJvYmU6OkNvbnRleHQmIGNvbnRleHQp
Cit7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7
CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUlu
ZGV4KCk7CisgICAgT3B0aW1pemluZ0pJVENhbGxlZSogY2FsbGVlID0gYml0d2lzZV9jYXN0PE9w
dGltaXppbmdKSVRDYWxsZWUqPihjYWxsRnJhbWUtPmNhbGxlZSgpLmFzV2FzbUNhbGxlZSgpKTsK
KyAgICBjb25zdCBTdGFja01hcCYgc3RhY2ttYXAgPSBjYWxsZWUtPnN0YWNrbWFwKGNhbGxTaXRl
SW5kZXgpOworICAgIFZNKiB2bSA9IGNvbnRleHQuZ3ByPFZNKj4oR1BSSW5mbzo6cmVnVDApOwor
ICAgIHVpbnQ2NF90KiBidWZmZXIgPSB2bS0+d2FzbUNvbnRleHQuc2NyYXRjaEJ1ZmZlckZvclNp
emUoc3RhY2ttYXAuc2l6ZSgpICogOCk7CisgICAgbG9hZFZhbHVlc0ludG9CdWZmZXIoY29udGV4
dCwgc3RhY2ttYXAsIGJ1ZmZlcik7CisKKyAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVu
dEdQUjApID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYnVmZmVyKTsKK30KKwordm9pZCBCM0lS
R2VuZXJhdG9yOjppbnNlcnRFbnRyeVN3aXRjaCgpCit7CisgICAgbV9wcm9jLnNldE51bUVudHJ5
cG9pbnRzKG1fcm9vdEJsb2Nrcy5zaXplKCkpOworCisgICAgUmVmPEIzOjpBaXI6OlByb2xvZ3Vl
R2VuZXJhdG9yPiBjYXRjaFByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6
QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIz
OjpBaXI6OkNvZGUmIGNvZGUpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsaW5nIHByZWNpc2UgYWxsb2NhdGlvbnMg
aW4gV2FzbUIzSVJHZW5lcmF0b3IgY2F0Y2ggZW50cnlwb2ludHMgbWlnaHQgYmUgdW5uZWNlc3Nh
cnkKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzEyMTMKKyAgICAgICAgICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJy
YW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJlY2lzZUFsbG9jYXRpb246OmhhbGZBbGlnbm1lbnQpKTsK
KyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKE1hcmtl
ZEJsb2NrOjpibG9ja01hc2spLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIE1hcmtlZEJsb2NrOjpv
ZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9mZnNldE9mVk0oKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGF1dG8gbG9hZGVkQ2FzZSA9IGppdC5qdW1wKCk7CisK
KyAgICAgICAgICAgIHByZWNpc2VBbGxvY2F0aW9uQ2FzZS5saW5rKCZqaXQpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBQcmVj
aXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRPZlZNKCkg
LSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgR1BSSW5mbzo6cmVnVDApOworCisg
ICAgICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0KKyAgICAgICAgaml0
LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJJ
bmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDMpOworCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxlZUZvcldhc21DYXRjaE9m
ZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDAsIFZNOjpjYWxsZWVGb3JXYXNtQ2F0Y2hPZmZzZXQoKSkpOworICAgICAgICBqaXQu
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QzLCBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpOworCisgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBW
TTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOworCisgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1l
U2xvdDo6dGhpc0FyZ3VtZW50ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OnJlZ1QzKTsK
KyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Qz
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mSW5zdGFuY2UoKSksIEdQUkluZm86OnJl
Z1QzKTsKKyAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjpyZWdU
Myk7CisKKyAgICAgICAgaml0LnByb2JlKHRhZ0NGdW5jdGlvbjxKSVRQcm9iZVB0clRhZz4oYnVp
bGRFbnRyeUJ1ZmZlckZvckNhdGNoKSwgbnVsbHB0cik7CisKKyAgICAgICAgaml0LmFkZFB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICB9KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX3Jvb3RCbG9ja3Muc2l6ZSgp
OyArK2kpCisgICAgICAgIG1fcHJvYy5jb2RlKCkuc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KGks
IGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IuY29weVJlZigpKTsKKworICAgIG1fY3VycmVudEJsb2Nr
ID0gbV90b3BMZXZlbEJsb2NrOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgRW50cnlTd2l0Y2gsIE9yaWdpbigpKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogbV9yb290QmxvY2tzKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kU3VjY2Vz
c29yKEZyZXF1ZW50ZWRCbG9jayhibG9jaykpOworfQorCiB2b2lkIEIzSVJHZW5lcmF0b3I6Omlu
c2VydENvbnN0YW50cygpCiB7CiAgICAgbV9jb25zdGFudEluc2VydGlvblZhbHVlcy5leGVjdXRl
KG1fcHJvYy5hdCgwKSk7CisKKyAgICBpZiAoIW1faGFzQ2F0Y2gpCisgICAgICAgIHJldHVybjsK
KworICAgIFZhbHVlKiBqc0luc3RhbmNlID0gbV9wcm9jLmFkZDxNZW1vcnlWYWx1ZT4oTG9hZCwg
cG9pbnRlclR5cGUoKSwgT3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJf
dD4oSW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSkpOworICAgIFZhbHVlKiBzdG9yZSA9IG1fcHJv
Yy5hZGQ8QjM6Ok1lbW9yeVZhbHVlPihCMzo6U3RvcmUsIE9yaWdpbigpLCBqc0luc3RhbmNlLCBm
cmFtZVBvaW50ZXIoKSwgc2FmZUNhc3Q8aW50MzJfdD4oQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3Vt
ZW50ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX3Jv
b3RCbG9ja3NbMF07CisgICAgbV9jb25zdGFudEluc2VydGlvblZhbHVlcy5pbnNlcnRWYWx1ZSgw
LCBqc0luc3RhbmNlKTsKKyAgICBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzLmluc2VydFZhbHVl
KDAsIHN0b3JlKTsKKyAgICBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzLmV4ZWN1dGUoYmxvY2sp
OwogfQogCiBCMzo6VHlwZSBCM0lSR2VuZXJhdG9yOjp0b0IzUmVzdWx0VHlwZShCbG9ja1NpZ25h
dHVyZSByZXR1cm5UeXBlKQpAQCAtNzA1LDIwICs5OTcsMjEgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1
bHQKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZWZJc051bGwoRXhwcmVzc2lvblR5cGUgdmFs
dWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpFcXVhbCwg
b3JpZ2luKCksIHZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOworICAgIHJlc3Vs
dCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6RXF1
YWwsIG9yaWdpbigpLCBnZXQodmFsdWUpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpKTsK
ICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KHVu
c2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxp
bmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1MDY+LgotICAg
IHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0
b0IzVHlwZShUeXBlczo6RXh0ZXJucmVmKSwgb3JpZ2luKCksCisgICAgVmFsdWUqIHJlc3VsdFZh
bHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNU
eXBlKFR5cGVzOjpFeHRlcm5yZWYpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRXYXNtVGFibGVFbGVtZW50KSksCi0gICAgICAg
IGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpLCBpbmRleCk7CisgICAgICAgIGluc3RhbmNl
VmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIHRhYmxlSW5kZXgpLCBnZXQoaW5kZXgpKTsKIAogICAgIHsKKyAgICAgICAgcmVz
dWx0ID0gcHVzaChyZXN1bHRWYWx1ZSk7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4o
KSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
RXF1YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdFZhbHVl
LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAg
ICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5k
c1RhYmxlQWNjZXNzKTsKQEAgLTczMyw3ICsxMDI2LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRUYWJsZVNldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBpbmRleCwgRXhw
cmUKICAgICAvLyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5ODUwNj4uCiAgICAgYXV0byBzaG91bGRUaHJvdyA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBCMzo6SW50MzIsIG9yaWdp
bigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblNl
dFdhc21UYWJsZUVsZW1lbnQpKSwKLSAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJbmRl
eCksIGluZGV4LCB2YWx1ZSk7CisgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgp
LCBnZXQoaW5kZXgpLCBnZXQodmFsdWUpKTsKIAogICAgIHsKICAgICAgICAgQ2hlY2tWYWx1ZSog
Y2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hl
Y2ssIG9yaWdpbigpLApAQCAtNzUxLDI2ICsxMDQ0LDI2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkUmVmRnVuYyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhCiB7CiAgICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1MDY+LgogCi0gICAgcmVzdWx0ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEIzOjpJbnQ2NCwgb3JpZ2luKCks
CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+
KG1fcHJvYywgQjM6OkludDY0LCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtUmVmRnVuYykpLAotICAgICAgICBpbnN0YW5jZVZh
bHVlKCksIGFkZENvbnN0YW50KFR5cGVzOjpJMzIsIGluZGV4KSk7CisgICAgICAgIGluc3RhbmNl
VmFsdWUoKSwgY29uc3RhbnQodG9CM1R5cGUoVHlwZXM6OkkzMiksIGluZGV4KSkpOwogCiAgICAg
cmV0dXJuIHsgfTsKIH0KIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUluaXQodW5zaWdu
ZWQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBkc3RP
ZmZzZXQsIEV4cHJlc3Npb25UeXBlIHNyY09mZnNldCwgRXhwcmVzc2lvblR5cGUgbGVuZ3RoKSAt
PiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENDYWxsVmFsdWU+KAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIG1fcHJvYywgdG9CM1R5cGUoVHlw
ZXM6OkkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbldhc21UYWJsZUluaXQpKSwKICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLAog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgZWxlbWVudEluZGV4KSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpLAotICAgICAgICBk
c3RPZmZzZXQsIHNyY09mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgZ2V0KGRzdE9mZnNldCksIGdl
dChzcmNPZmZzZXQpLCBnZXQobGVuZ3RoKSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUq
IGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENo
ZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCks
IHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBl
OjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTc5NCwzMSArMTA4NywzMSBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZEVsZW1Ecm9wKHVuc2lnbmVkIGVsZW1lbnRJbmRleCkgLT4gUGFydGlh
bFJlc3VsdAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZVNpemUodW5zaWduZWQgdGFibGVJ
bmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIC8v
IEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk4NTA2Pi4KLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAorICAg
IHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3By
b2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rp
b248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRXYXNtVGFibGVTaXplKSksCi0gICAgICAg
IGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpKTsKKyAgICAgICAgaW5zdGFuY2VWYWx1ZSgp
LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgdGFibGVJbmRleCkpKTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGZp
bGwsIEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2Fs
bFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKFR5cGVzOjpJMzIpLCBvcmlnaW4oKSwKKyAgICByZXN1
bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0
b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVRhYmxlR3JvdykpLAotICAgICAgICBpbnN0YW5j
ZVZhbHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCB0YWJsZUluZGV4KSwgZmlsbCwgZGVsdGEpOworICAgICAgICBpbnN0YW5jZVZh
bHVlKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCB0YWJsZUluZGV4KSwgZ2V0KGZpbGwpLCBnZXQoZGVsdGEpKSk7CiAKICAgICByZXR1
cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCh1bnNpZ25lZCB0
YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBvZmZzZXQsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4
cHJlc3Npb25UeXBlIGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgYXV0byByZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUo
VHlwZXM6OkkzMiksIG9yaWdpbigpLAorICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMy
KSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uV2FzbVRhYmxlRmlsbCkpLAotICAgICAgICBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWJsZUlu
ZGV4KSwgb2Zmc2V0LCBmaWxsLCBjb3VudCk7CisgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRh
YmxlSW5kZXgpLCBnZXQob2Zmc2V0KSwgZ2V0KGZpbGwpLCBnZXQoY291bnQpKTsKIAogICAgIHsK
ICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENo
ZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdCwg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IDApKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEVxdWFsLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOwogCiAgICAgICAgIGNoZWNr
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVj
ayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVGFibGVBY2Nlc3MpOwpAQCAtODMwLDE3
ICsxMTIzLDE3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKHVuc2lnbmVkIHRh
YmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhwCiAKIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkVGFibGVDb3B5KHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxl
SW5kZXgsIEV4cHJlc3Npb25UeXBlIGRzdE9mZnNldCwgRXhwcmVzc2lvblR5cGUgc3JjT2Zmc2V0
LCBFeHByZXNzaW9uVHlwZSBsZW5ndGgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBhdXRvIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgVmFsdWUq
IHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAg
ICAgICAgbV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
dGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVRhYmxlQ29weSkpLAog
ICAgICAgICBpbnN0YW5jZVZhbHVlKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBkc3RUYWJsZUluZGV4KSwKICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHNyY1RhYmxlSW5kZXgpLAotICAgICAgICBkc3RPZmZzZXQsIHNyY09mZnNldCwgbGVuZ3Ro
KTsKKyAgICAgICAgZ2V0KGRzdE9mZnNldCksIGdldChzcmNPZmZzZXQpLCBnZXQobGVuZ3RoKSk7
CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigp
LCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAg
ICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhj
ZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsK
QEAgLTg1Myw3ICsxMTQ2LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUNvcHkodW5z
aWduZWQgZHN0VGFibGVJbmRleCwgdW5zaWduZWQgc3JjVGFibGVJbmRleCwKIGF1dG8gQjNJUkdl
bmVyYXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdKTsKLSAgICBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywg
QjM6OkdldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSk7CisgICAgcmVzdWx0ID0gcHVzaCht
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwg
b3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSkpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTg2
Nyw3ICsxMTYwLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgpIC0+IFBh
cnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmVt
aXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxs
ZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lS
R2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgVmFsdWUq
IGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgLy8gRG8gYSBjb250ZXh0IHN3aXRjaCBpZiBuZWVkZWQuCiAgICAgewpAQCAtOTE2LDcgKzEy
MDksNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxl
ZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZQogICAgIH0KIAogICAgIEIzOjpUeXBlIHJl
dHVyblR5cGUgPSB0b0IzUmVzdWx0VHlwZSgmc2lnbmF0dXJlKTsKLSAgICBFeHByZXNzaW9uVHlw
ZSBjYWxsUmVzdWx0ID0gY3JlYXRlQ2FsbFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIG9yaWdp
bigpLCBzaWduYXR1cmUsIGFyZ3MsCisgICAgVmFsdWUqIGNhbGxSZXN1bHQgPSBjcmVhdGVDYWxs
UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIHNpZ25hdHVyZSwgYXJncywKICAg
ICAgICAgc2NvcGVkTGFtYmRhUmVmPHZvaWQoUGF0Y2hwb2ludFZhbHVlKik+KFs9XSAoUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50KSAtPiB2b2lkIHsKICAgICAgICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwpAQCAtOTI4LDggKzEyMjEsMTAgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgRXhwcmVz
c2lvblR5cGUgY2FsbGUKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7
CiAKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVDb2RlLCBWYWx1ZVJlcDo6
U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFu
ZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKG1fY3VycmVudEJsb2NrLCBwYXRj
aHBvaW50KTsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1z
LCB0aGlzKTsKICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcGFyYW1zLnByb2MoKS5y
ZXN1bHRDb3VudChyZXR1cm5UeXBlKV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgfSkpOwpAQCAtOTQxLDExICsxMjM2LDExIEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIEV4cHJlc3Np
b25UeXBlIGNhbGxlCiAgICAgY2FzZSBCMzo6VHVwbGU6IHsKICAgICAgICAgY29uc3QgVmVjdG9y
PEIzOjpUeXBlPiYgdHVwbGUgPSBtX3Byb2MudHVwbGVGb3JUeXBlKHJldHVyblR5cGUpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJldHVybkNvdW50KCk7ICsr
aSkKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0dXBsZVtpXSwgY2FsbFJlc3VsdCwgaSkp
OworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHVwbGVbaV0sIGNhbGxSZXN1bHQs
IGkpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OiB7Ci0gICAgICAgIHJl
c3VsdHMuYXBwZW5kKGNhbGxSZXN1bHQpOworICAgICAgICByZXN1bHRzLmFwcGVuZChwdXNoKGNh
bGxSZXN1bHQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KQEAgLTk1OCw5ICsxMjUz
LDkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJ
bnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGUKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRH
cm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKKyAgICByZXN1bHQgPSBwdXNo
KG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3Jp
Z2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
R3Jvd01lbW9yeSkpLAotICAgICAgICBmcmFtZVBvaW50ZXIoKSwgaW5zdGFuY2VWYWx1ZSgpLCBk
ZWx0YSk7CisgICAgICAgIGZyYW1lUG9pbnRlcigpLCBpbnN0YW5jZVZhbHVlKCksIGdldChkZWx0
YSkpKTsKIAogICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRT
dGFja0xpbWl0OjpObywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3Byb2MsIG1f
Y3VycmVudEJsb2NrKTsKIApAQCAtOTgwLDIyICsxMjc1LDIyIEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiAgICAgVmFsdWUqIG51bVBhZ2VzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBaU2hyLCBvcmlnaW4oKSwKICAgICAgICAgc2l6ZSwgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHNoaWZ0VmFsdWUpKTsK
IAotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
VHJ1bmMsIG9yaWdpbigpLCBudW1QYWdlcyk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgbnVtUGFnZXMp
KTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5
RmlsbChFeHByZXNzaW9uVHlwZSBkc3RBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSB0YXJnZXRWYWx1
ZSwgRXhwcmVzc2lvblR5cGUgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBhdXRvIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgVmFsdWUq
IHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAg
ICAgICAgbV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
dGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbU1lbW9yeUZpbGwpKSwK
ICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLAotICAgICAgICBkc3RBZGRyZXNzLCB0YXJnZXRWYWx1
ZSwgY291bnQpOworICAgICAgICBnZXQoZHN0QWRkcmVzcyksIGdldCh0YXJnZXRWYWx1ZSksIGdl
dChjb3VudCkpOwogCiAgICAgewogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCi0g
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFs
LCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHRWYWx1ZSwgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDAp
KSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhp
cy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUYWJs
ZUFjY2Vzcyk7CkBAIC0xMDA3LDE2ICsxMzAyLDE2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
TWVtb3J5RmlsbChFeHByZXNzaW9uVHlwZSBkc3RBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSB0YXJn
CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTWVtb3J5SW5pdCh1bnNpZ25lZCBkYXRhU2VnbWVu
dEluZGV4LCBFeHByZXNzaW9uVHlwZSBkc3RBZGRyZXNzLCBFeHByZXNzaW9uVHlwZSBzcmNBZGRy
ZXNzLCBFeHByZXNzaW9uVHlwZSBsZW5ndGgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBhdXRv
IHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgVmFs
dWUqIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigK
ICAgICAgICAgbV9wcm9jLCB0b0IzVHlwZShUeXBlczo6STMyKSwgb3JpZ2luKCksCiAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbU1lbW9yeUluaXQp
KSwKICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZGF0YVNlZ21lbnRJbmRleCks
Ci0gICAgICAgIGRzdEFkZHJlc3MsIHNyY0FkZHJlc3MsIGxlbmd0aCk7CisgICAgICAgIGdldChk
c3RBZGRyZXNzKSwgZ2V0KHNyY0FkZHJlc3MpLCBnZXQobGVuZ3RoKSk7CiAKICAgICB7CiAgICAg
ICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1Zh
bHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkp
OworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBF
cXVhbCwgb3JpZ2luKCksIHJlc3VsdFZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0
LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RhYmxlQWNjZXNzKTsKQEAgLTEwMjgsMTUgKzEz
MjMsMTUgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRNZW1vcnlJbml0KHVuc2lnbmVkIGRhdGFT
ZWdtZW50SW5kZXgsIEV4cHJlc3Npb25UeXBlIGRzdEEKIAogYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRNZW1vcnlDb3B5KEV4cHJlc3Npb25UeXBlIGRzdEFkZHJlc3MsIEV4cHJlc3Npb25UeXBlIHNy
Y0FkZHJlc3MsIEV4cHJlc3Npb25UeXBlIGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAg
YXV0byByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAg
IFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1
ZT4oCiAgICAgICAgIG1fcHJvYywgdG9CM1R5cGUoVHlwZXM6OkkzMiksIG9yaWdpbigpLAogICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21NZW1vcnlD
b3B5KSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwKLSAgICAgICAgZHN0QWRkcmVzcywgc3Jj
QWRkcmVzcywgY291bnQpOworICAgICAgICBnZXQoZHN0QWRkcmVzcyksIGdldChzcmNBZGRyZXNz
KSwgZ2V0KGNvdW50KSk7CiAKICAgICB7CiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4o
KSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
RXF1YWwsIG9yaWdpbigpLCByZXN1bHQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOworICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIHJlc3VsdFZhbHVl
LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgMCkpKTsKIAogICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAg
ICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5k
c1RhYmxlQWNjZXNzKTsKQEAgLTEwNjAsNyArMTM1NSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkRGF0YURyb3AodW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCkgLT4gUGFydGlhbFJlc3VsdAog
YXV0byBCM0lSR2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5
cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhd
KTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywg
QjM6OlNldCwgb3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSwgdmFsdWUpOworICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6U2V0LCBvcmlnaW4o
KSwgbV9sb2NhbHNbaW5kZXhdLCBnZXQodmFsdWUpKTsKICAgICByZXR1cm4geyB9OwogfQogCkBA
IC0xMDcwLDEyICsxMzY1LDEyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQz
Ml90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsCiAgICAgVmFsdWUq
IGdsb2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2Fm
ZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSk7CiAgICAgc3dpdGNo
IChnbG9iYWwuYmluZGluZ01vZGUpIHsKICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9u
OjpCaW5kaW5nTW9kZTo6RW1iZWRkZWRJbkluc3RhbmNlOgotICAgICAgICByZXN1bHQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBl
KGdsb2JhbC50eXBlKSwgb3JpZ2luKCksIGdsb2JhbHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4o
aW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHJlc3VsdCA9IHB1c2gobV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlwZShn
bG9iYWwudHlwZSksIG9yaWdpbigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGlu
ZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXYXNt
OjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOiB7CiAgICAgICAgIEFT
U0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJp
bGl0eTo6TXV0YWJsZSk7CiAgICAgICAgIFZhbHVlKiBwb2ludGVyID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBCMzo6SW50NjQsIG9yaWdpbigp
LCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVy
KSkpOwotICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKGdsb2JhbC50eXBlKSwgb3JpZ2luKCksIHBvaW50
ZXIpOworICAgICAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUoZ2xvYmFsLnR5cGUpLCBvcmlnaW4oKSwg
cG9pbnRlcikpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQpAQCAtMTA4OSwxNCArMTM4
NCwxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZQogICAgIFZhbHVlKiBnbG9iYWxzQXJyYXkg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+
KEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSkpOwogICAgIHN3aXRjaCAoZ2xvYmFsLmJpbmRp
bmdNb2RlKSB7CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6
OkVtYmVkZGVkSW5JbnN0YW5jZToKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIHZhbHVlLCBnbG9iYWxzQXJyYXks
IHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmln
aW4oKSwgZ2V0KHZhbHVlKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAq
IHNpemVvZihSZWdpc3RlcikpKTsKICAgICAgICAgaWYgKGlzUmVmVHlwZShnbG9iYWwudHlwZSkp
CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyRm9ySlNXcmFwcGVyKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0
YWJsZTogewogICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFs
SW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpOwogICAgICAgICBWYWx1ZSogcG9pbnRl
ciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
QjM6OkludDY0LCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRl
eCAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyKTsK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBT
dG9yZSwgb3JpZ2luKCksIGdldCh2YWx1ZSksIHBvaW50ZXIpOwogICAgICAgICAvLyBXZSBlbWl0
IGEgd3JpdGUtYmFycmllciBvbnRvIEpTV2ViQXNzZW1ibHlHbG9iYWwsIG5vdCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuCiAgICAgICAgIGlmIChpc1JlZlR5cGUoZ2xvYmFsLnR5cGUpKSB7CiAgICAg
ICAgICAgICBWYWx1ZSogaW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZh
bHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpKTsKQEAg
LTExOTksNyArMTQ5NCw3IEBAIGlubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRXcml0ZUJh
cnJpZXJGb3JKU1dyYXBwZXIoKQogICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOwog
fQogCi1pbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2lu
dGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6
ZU9mT3BlcmF0aW9uKQoraW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQ
cmVwYXJlUG9pbnRlcihWYWx1ZSogcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBz
aXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7CiAKQEAgLTEy
NjgsNyArMTU2Myw3IEBAIGlubGluZSBCMzo6S2luZCBCM0lSR2VuZXJhdG9yOjptZW1vcnlLaW5k
KEIzOjpPcGNvZGUgbWVtb3J5T3ApCiAgICAgcmV0dXJuIG1lbW9yeU9wOwogfQogCi1pbmxpbmUg
VmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK2lubGluZSBWYWx1ZSogQjNJUkdlbmVy
YXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBWYWx1ZSogcG9pbnRlciwgdWludDMyX3Qg
dW9mZnNldCkKIHsKICAgICBpbnQzMl90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQo
cG9pbnRlciwgdW9mZnNldCk7CiAKQEAgLTEzMzgsOCArMTYzMyw5IEBAIGlubGluZSBWYWx1ZSog
QjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBw
b2ludGVyLCB1CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotYXV0byBC
M0lSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3Vs
dAorYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBl
IHBvaW50ZXJWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4g
UGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBwb2ludGVyID0gZ2V0KHBvaW50ZXJWYXIpOwog
ICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIpOwogCiAgICAgaWYgKFVOTElLRUxZ
KHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSkpIHsKQEAg
LTEzNTYsNyArMTY1Miw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9w
LCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYKICAgICAgICAgY2FzZSBM
b2FkT3BUeXBlOjpJMzJMb2FkOgogICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlU6
CiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOgotICAgICAgICAgICAgcmVzdWx0
ID0gY29uc3RhbnQoSW50MzIsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFu
dChJbnQzMiwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STY0TG9hZDhTOgogICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4VToKQEAgLTEz
NjUsMTggKzE2NjEsMTggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3As
IEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJgogICAgICAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQzMlM6CiAgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDoK
ICAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgotICAgICAgICAgICAgcmVzdWx0
ID0gY29uc3RhbnQoSW50NjQsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChjb25zdGFu
dChJbnQ2NCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9hZE9wVHlw
ZTo6RjMyTG9hZDoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEZsb2F0LCAwKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoRmxvYXQsIDApKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBjb25zdGFudChEb3VibGUsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gcHVzaChj
b25zdGFudChEb3VibGUsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAg
ICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZW1pdExvYWRPcChvcCwgZW1pdENoZWNrQW5kUHJl
cGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0KTsK
KyAgICAgICAgcmVzdWx0ID0gcHVzaChlbWl0TG9hZE9wKG9wLCBlbWl0Q2hlY2tBbmRQcmVwYXJl
UG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkxvYWRPcChvcCkpLCBvZmZzZXQpKTsKIAog
ICAgIHJldHVybiB7IH07CiB9CkBAIC0xNDAyLDcgKzE2OTgsNyBAQCBpbmxpbmUgdWludDMyX3Qg
c2l6ZU9mU3RvcmVPcChTdG9yZU9wVHlwZSBvcCkKIH0KIAogCi1pbmxpbmUgdm9pZCBCM0lSR2Vu
ZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCitpbmxpbmUgdm9pZCBC
M0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgVmFsdWUqIHBvaW50ZXIs
IFZhbHVlKiB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBpbnQzMl90IG9mZnNldCA9
IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CiAKQEAgLTE0MzcsOCAr
MTczMywxMCBAQCBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9w
VHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRQogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6c3RvcmUoU3RvcmVPcFR5cGUg
b3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJf
dCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6c3RvcmUoU3Rv
cmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXJWYXIsIEV4cHJlc3Npb25UeXBlIHZh
bHVlVmFyLCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSog
cG9pbnRlciA9IGdldChwb2ludGVyVmFyKTsKKyAgICBWYWx1ZSogdmFsdWUgPSBnZXQodmFsdWVW
YXIpOwogICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIpOwogCiAgICAgaWYgKFVO
TElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXplT2ZTdG9yZU9wKG9wKSkp
KSB7CkBAIC0xNDY0LDkgKzE3NjIsOSBAQCBpbmxpbmUgdWludDMyX3Qgc2l6ZU9mQXRvbWljT3BN
ZW1vcnlBY2Nlc3MoRXh0QXRvbWljT3BUeXBlIG9wKQogICAgIHJldHVybiBieXRlc0ZvcldpZHRo
KGFjY2Vzc1dpZHRoKG9wKSk7CiB9CiAKLWlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6c2Fu
aXRpemVBdG9taWNSZXN1bHQoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhw
cmVzc2lvblR5cGUgcmVzdWx0KQoraW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpzYW5pdGl6
ZUF0b21pY1Jlc3VsdChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBWYWx1ZSog
cmVzdWx0KQogewotICAgIGF1dG8gc2FuaXRpemUzMiA9IFsmXShFeHByZXNzaW9uVHlwZSByZXN1
bHQpIHsKKyAgICBhdXRvIHNhbml0aXplMzIgPSBbJl0oVmFsdWUqIHJlc3VsdCkgewogICAgICAg
ICBzd2l0Y2ggKGFjY2Vzc1dpZHRoKG9wKSkgewogICAgICAgICBjYXNlIEIzOjpXaWR0aDg6CiAg
ICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBCaXRBbmQsIG9yaWdpbigpLCByZXN1bHQsIGNvbnN0YW50KEludDMyLCAweGZmKSk7CkBAIC0x
NDkxLDcgKzE3ODksNyBAQCBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OnNhbml0aXplQXRv
bWljUmVzdWx0KEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZQogICAgIH0KIH0KIAotVmFs
dWUqIEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNPcHMoRXh0
QXRvbWljT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwdHIsIHVpbnQzMl90IG9mZnNldCkKK1Zh
bHVlKiBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKEV4
dEF0b21pY09wVHlwZSBvcCwgVmFsdWUqIHB0ciwgdWludDMyX3Qgb2Zmc2V0KQogewogICAgIGF1
dG8gcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRk
LCBvcmlnaW4oKSwgcHRyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSk7CiAgICAgaWYgKGFjY2Vzc1dpZHRoKG9wKSAhPSBC
Mzo6V2lkdGg4KSB7CkBAIC0xNTA0LDExICsxODAyLDExIEBAIFZhbHVlKiBCM0lSR2VuZXJhdG9y
OjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKEV4dEF0b21pY09wVHlwZSBvcCwg
RXhwCiAgICAgcmV0dXJuIHBvaW50ZXI7CiB9CiAKLWlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRv
cjo6ZW1pdEF0b21pY0xvYWRPcChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQoraW5saW5lIFZhbHVlKiBC
M0lSR2VuZXJhdG9yOjplbWl0QXRvbWljTG9hZE9wKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2
YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQogewogICAgIHBvaW50
ZXIgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKG9wLCBwb2ludGVyLCB1b2Zm
c2V0KTsKIAotICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlID0gbnVsbHB0cjsKKyAgICBWYWx1ZSog
dmFsdWUgPSBudWxscHRyOwogICAgIHN3aXRjaCAoYWNjZXNzV2lkdGgob3ApKSB7CiAgICAgY2Fz
ZSBCMzo6V2lkdGg4OgogICAgIGNhc2UgQjM6OldpZHRoMTY6CkBAIC0xNTM3LDIyICsxODM1LDIy
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YXRvbWljTG9hZChFeHRBdG9taWNPcFR5cGUgb3AsIFR5
cGUgdmFsdWVUeXBlLCBFeHByZXNzaW9uVHlwCiAKICAgICAgICAgc3dpdGNoICh2YWx1ZVR5cGUu
a2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6Ci0gICAgICAgICAgICByZXN1bHQg
PSBjb25zdGFudChJbnQzMiwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50
KEludDMyLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBlS2luZDo6
STY0OgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50NjQsIDApOworICAgICAgICAg
ICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQ2NCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAg
cmVzdWx0ID0gZW1pdEF0b21pY0xvYWRPcChvcCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVw
YXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkF0b21pY09wTWVtb3J5QWNjZXNzKG9w
KSksIG9mZnNldCk7CisgICAgICAgIHJlc3VsdCA9IHB1c2goZW1pdEF0b21pY0xvYWRPcChvcCwg
dmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihnZXQocG9pbnRlciksIG9mZnNl
dCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgb2Zmc2V0KSk7CiAKICAgICByZXR1
cm4geyB9OwogfQogCi1pbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWljU3RvcmVP
cChFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKK2lubGluZSB2b2lk
IEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNTdG9yZU9wKEV4dEF0b21pY09wVHlwZSBvcCwgVHlw
ZSB2YWx1ZVR5cGUsIFZhbHVlKiBwb2ludGVyLCBWYWx1ZSogdmFsdWUsIHVpbnQzMl90IHVvZmZz
ZXQpCiB7CiAgICAgcG9pbnRlciA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXRGb3JBdG9taWNPcHMo
b3AsIHBvaW50ZXIsIHVvZmZzZXQpOwogCkBAIC0xNTczLDEyICsxODcxLDEyIEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YXRvbWljU3RvcmUoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlw
ZSwgRXhwcmVzc2lvblR5CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0
LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAgICAgICAgIH0pOwog
ICAgIH0gZWxzZQotICAgICAgICBlbWl0QXRvbWljU3RvcmVPcChvcCwgdmFsdWVUeXBlLCBlbWl0
Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkF0b21pY09wTWVt
b3J5QWNjZXNzKG9wKSksIHZhbHVlLCBvZmZzZXQpOworICAgICAgICBlbWl0QXRvbWljU3RvcmVP
cChvcCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihnZXQocG9pbnRlciks
IG9mZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgZ2V0KHZhbHVlKSwgb2Zm
c2V0KTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKLWlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRv
cjo6ZW1pdEF0b21pY0JpbmFyeVJNV09wKEV4dEF0b21pY09wVHlwZSBvcCwgVHlwZSB2YWx1ZVR5
cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJf
dCB1b2Zmc2V0KQoraW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0QXRvbWljQmluYXJ5
Uk1XT3AoRXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgVmFsdWUqIHBvaW50ZXIs
IFZhbHVlKiB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKIHsKICAgICBwb2ludGVyID0gZml4dXBQ
b2ludGVyUGx1c09mZnNldEZvckF0b21pY09wcyhvcCwgcG9pbnRlciwgdW9mZnNldCk7CiAKQEAg
LTE2NjMsMjIgKzE5NjEsMjIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWNCaW5hcnlSTVco
RXh0QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2kKIAogICAgICAgICBz
d2l0Y2ggKHZhbHVlVHlwZS5raW5kKSB7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkkzMjoKLSAg
ICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDMyLCAwKTsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHB1c2goY29uc3RhbnQoSW50MzIsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFR5cGVLaW5kOjpJNjQ6Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChJbnQ2
NCwgMCk7CisgICAgICAgICAgICByZXN1bHQgPSBwdXNoKGNvbnN0YW50KEludDY0LCAwKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
IH0gZWxzZQotICAgICAgICByZXN1bHQgPSBlbWl0QXRvbWljQmluYXJ5Uk1XT3Aob3AsIHZhbHVl
VHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZB
dG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKKyAgICAgICAgcmVzdWx0
ID0gcHVzaChlbWl0QXRvbWljQmluYXJ5Uk1XT3Aob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5k
UHJlcGFyZVBvaW50ZXIoZ2V0KHBvaW50ZXIpLCBvZmZzZXQsIHNpemVPZkF0b21pY09wTWVtb3J5
QWNjZXNzKG9wKSksIGdldCh2YWx1ZSksIG9mZnNldCkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2UoRXh0QXRv
bWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhw
cmVzc2lvblR5cGUgZXhwZWN0ZWQsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCB1b2Zm
c2V0KQorVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRBdG9taWNDb21wYXJlRXhjaGFuZ2UoRXh0
QXRvbWljT3BUeXBlIG9wLCBUeXBlIHZhbHVlVHlwZSwgVmFsdWUqIHBvaW50ZXIsIFZhbHVlKiBl
eHBlY3RlZCwgVmFsdWUqIHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQogewogICAgIHBvaW50ZXIg
PSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0Rm9yQXRvbWljT3BzKG9wLCBwb2ludGVyLCB1b2Zmc2V0
KTsKIApAQCAtMTc4OCwzNiArMjA4Niw0MSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmF0b21pY0Nv
bXBhcmVFeGNoYW5nZShFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUgdmFsdWVUeXBlLCBFeAogCiAg
ICAgICAgIHN3aXRjaCAodmFsdWVUeXBlLmtpbmQpIHsKICAgICAgICAgY2FzZSBUeXBlS2luZDo6
STMyOgotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50MzIsIDApOworICAgICAgICAg
ICAgcmVzdWx0ID0gcHVzaChjb25zdGFudChJbnQzMiwgMCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6Okk2NDoKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0
YW50KEludDY0LCAwKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHB1c2goY29uc3RhbnQoSW50NjQs
IDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGVtaXRBdG9taWNDb21wYXJlRXhjaGFu
Z2Uob3AsIHZhbHVlVHlwZSwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zm
c2V0LCBzaXplT2ZBdG9taWNPcE1lbW9yeUFjY2VzcyhvcCkpLCBleHBlY3RlZCwgdmFsdWUsIG9m
ZnNldCk7CisgICAgICAgIHJlc3VsdCA9IHB1c2goZW1pdEF0b21pY0NvbXBhcmVFeGNoYW5nZShv
cCwgdmFsdWVUeXBlLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihnZXQocG9pbnRlciksIG9m
ZnNldCwgc2l6ZU9mQXRvbWljT3BNZW1vcnlBY2Nlc3Mob3ApKSwgZ2V0KGV4cGVjdGVkKSwgZ2V0
KHZhbHVlKSwgb2Zmc2V0KSk7CiAKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5l
cmF0b3I6OmF0b21pY1dhaXQoRXh0QXRvbWljT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgdGltZW91dCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRv
IEIzSVJHZW5lcmF0b3I6OmF0b21pY1dhaXQoRXh0QXRvbWljT3BUeXBlIG9wLCBFeHByZXNzaW9u
VHlwZSBwb2ludGVyVmFyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZVZhciwgRXhwcmVzc2lvblR5cGUg
dGltZW91dFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIHBvaW50ZXIgPSBnZXQocG9pbnRlclZhcik7Cisg
ICAgVmFsdWUqIHZhbHVlID0gZ2V0KHZhbHVlVmFyKTsKKyAgICBWYWx1ZSogdGltZW91dCA9IGdl
dCh0aW1lb3V0VmFyKTsKKyAgICBWYWx1ZSogcmVzdWx0VmFsdWUgPSBudWxscHRyOwogICAgIGlm
IChvcCA9PSBFeHRBdG9taWNPcFR5cGU6Ok1lbW9yeUF0b21pY1dhaXQzMikgewotICAgICAgICBy
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50
MzIsIG9yaWdpbigpLAorICAgICAgICByZXN1bHRWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCiAgICAgICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1lbW9yeUF0b21pY1dhaXQz
MikpLAogICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBwb2ludGVyLCBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSwgdmFs
dWUsIHRpbWVvdXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCisgICAg
ICAgIHJlc3VsdFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPiht
X3Byb2MsIEludDMyLCBvcmlnaW4oKSwKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uPE9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uTWVtb3J5QXRvbWljV2FpdDY0KSksCiAgICAgICAgICAgICBp
bnN0YW5jZVZhbHVlKCksIHBvaW50ZXIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpLCB2YWx1ZSwgdGltZW91dCk7CiAgICAg
fQogCiAgICAgeworICAgICAgICByZXN1bHQgPSBwdXNoKHJlc3VsdFZhbHVlKTsKICAgICAgICAg
Q2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+
KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIHJlc3VsdCwgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKSk7
CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExl
c3NUaGFuLCBvcmlnaW4oKSwgcmVzdWx0VmFsdWUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSkpOwogCiAgICAgICAgIGNoZWNrLT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKQEAgLTE4MjksMTMg
KzIxMzIsMTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphdG9taWNXYWl0KEV4dEF0b21pY09wVHlw
ZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmUKIAogYXV0byBCM0lSR2VuZXJhdG9y
OjphdG9taWNOb3RpZnkoRXh0QXRvbWljT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBF
eHByZXNzaW9uVHlwZSBjb3VudCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zm
c2V0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKKyAgICBWYWx1ZSog
cmVzdWx0VmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJv
YywgSW50MzIsIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbk1lbW9yeUF0b21pY05vdGlmeSkpLAotICAgICAgICBpbnN0YW5jZVZhbHVl
KCksIHBvaW50ZXIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBvZmZzZXQpLCBjb3VudCk7Ci0KKyAgICAgICAgaW5zdGFuY2VWYWx1ZSgp
LCBnZXQocG9pbnRlciksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpLCBnZXQoY291bnQpKTsKICAgICB7CisgICAgICAgIHJl
c3VsdCA9IHB1c2gocmVzdWx0VmFsdWUpOwogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2lu
KCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IExlc3NUaGFuLCBvcmlnaW4oKSwgcmVzdWx0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCByZXN1
bHRWYWx1ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIDApKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAg
ICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0
T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOwpAQCAtMTg1MSw4ICsyMTU0LDkgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphdG9taWNGZW5jZShFeHRBdG9taWNPcFR5cGUsIHVpbnQ4X3QpIC0+IFBhcnRpYWxS
ZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OnRydW5jU2F0
dXJhdGVkKEV4dDFPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCwgVHlwZSByZXR1cm5UeXBlLCBUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIz
SVJHZW5lcmF0b3I6OnRydW5jU2F0dXJhdGVkKEV4dDFPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBl
IGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgVHlwZSByZXR1cm5UeXBlLCBUeXBlKSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZh
bHVlKiBtYXhGbG9hdCA9IG51bGxwdHI7CiAgICAgVmFsdWUqIG1pbkZsb2F0ID0gbnVsbHB0cjsK
ICAgICBWYWx1ZSogc2lnbkJpdENvbnN0YW50ID0gbnVsbHB0cjsKQEAgLTIwMDIsMjYgKzIzMDYs
MjYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjp0cnVuY1NhdHVyYXRlZChFeHQxT3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb24KICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6
U2VsZWN0LCBvcmlnaW4oKSwKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksCiAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIG9yaWdpbigp
LCBhcmcsIG1pbkZsb2F0KSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwKICAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1h
eEZsb2F0KSwKICAgICAgICAgICAgIHBhdGNocG9pbnQsIG1heFJlc3VsdCksCi0gICAgICAgIHJl
cXVpcmVzTmFOQ2hlY2sgPyBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEIzOjpTZWxlY3QsIG9yaWdpbigpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgYXJnLCBhcmcpLCBtaW5SZXN1bHQsIHplcm8pIDogbWlu
UmVzdWx0KTsKKyAgICAgICAgcmVxdWlyZXNOYU5DaGVjayA/IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBhcmcsIGFyZyksIG1p
blJlc3VsdCwgemVybykgOiBtaW5SZXN1bHQpKTsKIAogICAgIHJldHVybiB7IH07CiB9CiAKIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhw
cmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIGNvbmRpdGlv
biwgbm9uWmVybywgemVybyk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBnZXQoY29uZGl0aW9u
KSwgZ2V0KG5vblplcm8pLCBnZXQoemVybykpKTsKICAgICByZXR1cm4geyB9OwogfQogCiBCM0lS
R2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBl
IHR5cGUsIHVpbnQ2NF90IHZhbHVlKQogewogCi0gICAgcmV0dXJuIGNvbnN0YW50KHRvQjNUeXBl
KHR5cGUpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHB1c2goY29uc3RhbnQodG9CM1R5cGUodHlwZSks
IHZhbHVlKSk7CiB9CiAKIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdEVudHJ5VGllclVwQ2hlY2so
KQpAQCAtMjA4MiwyMCArMjM4NiwyMSBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRMb29wVGll
clVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4LCBjb25zdCBTdGFjayYgZW5jbG9zaQogCiAgICAg
VmFsdWUqIGNvdW50RG93bkxvY2F0aW9uID0gY29uc3RhbnQocG9pbnRlclR5cGUoKSwgYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oJm1fdGllclVwLT5tX2NvdW50ZXIpLCBvcmlnaW4pOwogCi0gICAg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiBzdGFja21hcDsKLSAgICBmb3IgKGF1dG8mIGxvY2FsIDog
bV9sb2NhbHMpIHsKLSAgICAgICAgVmFsdWUqIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBvcmlnaW4sIGxvY2FsKTsKLSAg
ICAgICAgc3RhY2ttYXAuYXBwZW5kKHJlc3VsdCk7Ci0gICAgfQorICAgIFZlY3RvcjxWYWx1ZSo+
IHN0YWNrbWFwOworICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykKKyAgICAgICAgc3Rh
Y2ttYXAuYXBwZW5kKGdldChsb2NhbCkpOwogICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4
ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytj
b250cm9sSW5kZXgpIHsKKyAgICAgICAgYXV0byYgZGF0YSA9IG1fcGFyc2VyLT5jb250cm9sU3Rh
Y2soKVtjb250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOwogICAgICAgICBhdXRvJiBleHByZXNzaW9u
U3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4
cHJlc3Npb25TdGFjazsKICAgICAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gdmFsdWUgOiBleHBy
ZXNzaW9uU3RhY2spCi0gICAgICAgICAgICBzdGFja21hcC5hcHBlbmQodmFsdWUpOworICAgICAg
ICAgICAgc3RhY2ttYXAuYXBwZW5kKGdldCh2YWx1ZSkpOworICAgICAgICBpZiAoQ29udHJvbFR5
cGU6OmlzQW55Q2F0Y2goZGF0YSkpCisgICAgICAgICAgICBzdGFja21hcC5hcHBlbmQoZ2V0KGRh
dGEuZXhjZXB0aW9uKCkpKTsKICAgICB9CiAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gdmFsdWUg
OiBlbmNsb3NpbmdTdGFjaykKLSAgICAgICAgc3RhY2ttYXAuYXBwZW5kKHZhbHVlKTsKKyAgICAg
ICAgc3RhY2ttYXAuYXBwZW5kKGdldCh2YWx1ZSkpOwogICAgIGZvciAoVHlwZWRFeHByZXNzaW9u
IHZhbHVlIDogbmV3U3RhY2spCi0gICAgICAgIHN0YWNrbWFwLmFwcGVuZCh2YWx1ZSk7CisgICAg
ICAgIHN0YWNrbWFwLmFwcGVuZChnZXQodmFsdWUpKTsKIAogICAgIFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2ggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9j
LCBCMzo6Vm9pZCwgb3JpZ2luKTsKICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25l
KCk7CkBAIC0yMTQwLDkzICsyNDQ1LDcyIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdExvb3BU
aWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgsIGNvbnN0IFN0YWNrJiBlbmNsb3NpCiAgICAg
fSk7CiB9CiAKK1ZhbHVlKiBCM0lSR2VuZXJhdG9yOjpsb2FkRnJvbVNjcmF0Y2hCdWZmZXIodW5z
aWduZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBwb2ludGVyLCBCMzo6VHlwZSB0eXBlKQorewor
ICAgIHNpemVfdCBvZmZzZXQgPSBzaXplb2YodWludDY0X3QpICogaW5kZXhJbkJ1ZmZlcisrOwor
ICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUuaXNOdW1lcmljKCkpOworICAgIHJldHVybiBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHR5cGUsIG9yaWdp
bigpLCBwb2ludGVyLCBvZmZzZXQpOworfQorCit2b2lkIEIzSVJHZW5lcmF0b3I6OmNvbm5lY3RD
b250cm9sRW50cnkodW5zaWduZWQmIGluZGV4SW5CdWZmZXIsIFZhbHVlKiBwb2ludGVyLCBDb250
cm9sRGF0YSYgZGF0YSwgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgQ29udHJvbERhdGEmIGN1cnJl
bnREYXRhLCBib29sIGZpbGxMb29wUGhpcykKK3sKKyAgICAvLyBGb3IgZWFjaCBzdGFjayBlbnRy
eSBlbmNsb3NlZCBieSB0aGlzIGxvb3Agd2UgbmVlZCB0byByZXBsYWNlIHRoZSB2YWx1ZSB3aXRo
IGEgcGhpIHNvIHdlIGNhbiBmaWxsIGl0IG9uIE9TUiBlbnRyeS4KKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFR5cGVk
RXhwcmVzc2lvbiB2YWx1ZSA9IGV4cHJlc3Npb25TdGFja1tpXTsKKyAgICAgICAgYXV0byogbG9h
ZCA9IGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcihpbmRleEluQnVmZmVyLCBwb2ludGVyLCB2YWx1ZS0+
dHlwZSgpKTsKKyAgICAgICAgaWYgKGZpbGxMb29wUGhpcykKKyAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBsb2FkLCBk
YXRhLnBoaXNbaV0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBvcmlnaW4oKSwgdmFsdWUudmFs
dWUoKSwgbG9hZCk7CisgICAgfQorICAgIGlmIChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRh
KSAmJiAmZGF0YSAhPSAmY3VycmVudERhdGEpIHsKKyAgICAgICAgYXV0byogbG9hZCA9IGxvYWRG
cm9tU2NyYXRjaEJ1ZmZlcihpbmRleEluQnVmZmVyLCBwb2ludGVyLCBwb2ludGVyVHlwZSgpKTsK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2Ms
IFNldCwgb3JpZ2luKCksIGRhdGEuZXhjZXB0aW9uKCksIGxvYWQpOworICAgIH0KK307CisKIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNr
JiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIGJsb2NrLCBTdGFjayYgbmV3U3RhY2ssIHVp
bnQzMl90IGxvb3BJbmRleCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEJhc2ljQmxvY2sqIGJv
ZHkgPSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBt
X3Byb2MuYWRkQmxvY2soKTsKIAotICAgIGJsb2NrID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmln
aW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6Okxvb3AsIGNvbnRpbnVhdGlvbiwgYm9keSk7Cisg
ICAgYmxvY2sgPSBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2Nr
VHlwZTo6TG9vcCwgbV9zdGFja1NpemUsIGNvbnRpbnVhdGlvbiwgYm9keSk7CisKICAgICB1bnNp
Z25lZCBvZmZzZXQgPSBlbmNsb3NpbmdTdGFjay5zaXplKCkgLSBzaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCk7ICsraSkgewogICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBlbmNsb3Np
bmdTdGFjay5hdChvZmZzZXQgKyBpKTsKLSAgICAgICAgYXV0byogdXBzaWxvbiA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB2YWx1ZSk7
CiAgICAgICAgIFZhbHVlKiBwaGkgPSBibG9jay5waGlzW2ldOworICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ2V0KHZhbHVl
KSwgcGhpKTsKICAgICAgICAgYm9keS0+YXBwZW5kKHBoaSk7Ci0gICAgICAgIHVwc2lsb24tPnNl
dFBoaShwaGkpOwotICAgICAgICBuZXdTdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQodmFsdWUudHlw
ZSgpLCBwaGkpOworICAgICAgICBzZXQoYm9keSwgdmFsdWUsIHBoaSk7CisgICAgICAgIG5ld1N0
YWNrLmFwcGVuZCh2YWx1ZSk7CiAgICAgfQorICAgIGVuY2xvc2luZ1N0YWNrLnNocmluayhvZmZz
ZXQpOwogCiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2Ms
IEp1bXAsIG9yaWdpbigpLCBib2R5KTsKICAgICBpZiAobG9vcEluZGV4ID09IG1fbG9vcEluZGV4
Rm9yT1NSRW50cnkpIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUIzSVJHZW5lcmF0b3JJbnRl
cm5hbDo6dmVyYm9zZSwgIlNldHRpbmcgdXAgZm9yIE9TUiBlbnRyeSIpOwogCi0gICAgICAgIG1f
Y3VycmVudEJsb2NrID0gbV9yb290QmxvY2s7Ci0gICAgICAgIFZhbHVlKiBwb2ludGVyID0gbV9y
b290QmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fcm9vdEJs
b2Nrc1swXTsKKyAgICAgICAgVmFsdWUqIHBvaW50ZXIgPSBtX3Jvb3RCbG9ja3NbMF0tPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwogCiAgICAgICAgIHVuc2lnbmVkIGluZGV4SW5CdWZmZXIgPSAwOwotICAgICAgICBh
dXRvIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlciA9IFsmXSAoQjM6OlR5cGUgdHlwZSkgewotICAgICAg
ICAgICAgc2l6ZV90IG9mZnNldCA9IHNpemVvZih1aW50NjRfdCkgKiBpbmRleEluQnVmZmVyKys7
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0eXBlLmlzTnVtZXJpYygpKTsKLSAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIHR5cGUsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwotICAgICAgICB9OwogCiAg
ICAgICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2FscykKLSAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigpLCBs
b2NhbCwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKGxvY2FsLT50eXBlKCkpKTsKLQotICAgICAgICBh
dXRvIGNvbm5lY3RDb250cm9sRW50cnkgPSBbJl0oY29uc3QgQ29udHJvbERhdGEmIGRhdGEsIFN0
YWNrJiBleHByZXNzaW9uU3RhY2spIHsKLSAgICAgICAgICAgIC8vIEZvciBlYWNoIHN0YWNrIGVu
dHJ5IGVuY2xvc2VkIGJ5IHRoaXMgbG9vcCB3ZSBuZWVkIHRvIHJlcGxhY2UgdGhlIHZhbHVlIHdp
dGggYSBwaGkgc28gd2UgY2FuIGZpbGwgaXQgb24gT1NSIGVudHJ5LgotICAgICAgICAgICAgQmFz
aWNCbG9jayogc291cmNlQmxvY2sgPSBudWxscHRyOwotICAgICAgICAgICAgdW5zaWduZWQgYmxv
Y2tJbmRleCA9IDA7Ci0gICAgICAgICAgICBCMzo6SW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCht
X3Byb2MpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4cHJlc3Npb25T
dGFjay5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1
ZSA9IGV4cHJlc3Npb25TdGFja1tpXTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmlzQ29u
c3RhbnQoKSkgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4SW5CdWZmZXI7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS0+b3duZXIgIT0gc291cmNlQmxvY2spIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHNvdXJjZUJsb2NrKQotICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoc291cmNlQmxvY2spOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5zZXJ0
aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21C
M0lSR2VuZXJhdG9ySW50ZXJuYWw6OnZlcmJvc2UgJiYgc291cmNlQmxvY2ssICJFeGVjdXRlZCBp
bnNlcnRpb24gc2V0IGludG86ICIsICpzb3VyY2VCbG9jayk7Ci0gICAgICAgICAgICAgICAgICAg
IGJsb2NrSW5kZXggPSAwOwotICAgICAgICAgICAgICAgICAgICBzb3VyY2VCbG9jayA9IHZhbHVl
LT5vd25lcjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoc291
cmNlQmxvY2stPmF0KGJsb2NrSW5kZXgrKykgIT0gdmFsdWUpCi0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVChibG9ja0luZGV4IDwgc291cmNlQmxvY2stPnNpemUoKSk7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKHNvdXJjZUJsb2NrLT5hdChibG9ja0luZGV4IC0gMSkgPT0gdmFsdWUpOwotCi0g
ICAgICAgICAgICAgICAgYXV0byogcGhpID0gZGF0YS5jb250aW51YXRpb24tPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBQaGksICB2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCkpOwotICAg
ICAgICAgICAgICAgIGV4cHJlc3Npb25TdGFja1tpXSA9IFR5cGVkRXhwcmVzc2lvbiB7IHZhbHVl
LnR5cGUoKSwgcGhpIH07Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgdmFsdWUtPm9yaWdpbigpLCBsb2FkRnJvbVNjcmF0Y2hC
dWZmZXIodmFsdWUtPnR5cGUoKSksIHBoaSk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvKiBzb3Vy
Y2VVcHNpbG9uID0gbV9wcm9jLmFkZDxVcHNpbG9uVmFsdWU+KHZhbHVlLT5vcmlnaW4oKSwgdmFs
dWUsIHBoaSk7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKGJsb2Nr
SW5kZXgsIHNvdXJjZVVwc2lsb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNv
dXJjZUJsb2NrKQotICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKHNvdXJjZUJs
b2NrKTsKLSAgICAgICAgfTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigpLCBsb2NhbCwgbG9hZEZyb21TY3Jh
dGNoQnVmZmVyKGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIGxvY2FsLT50eXBlKCkpKTsKIAogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFy
c2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CiAgICAgICAgICAg
ICBhdXRvJiBkYXRhID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uY29u
dHJvbERhdGE7CiAgICAgICAgICAgICBhdXRvJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+
Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKLSAg
ICAgICAgICAgIGNvbm5lY3RDb250cm9sRW50cnkoZGF0YSwgZXhwcmVzc2lvblN0YWNrKTsKKyAg
ICAgICAgICAgIGNvbm5lY3RDb250cm9sRW50cnkoaW5kZXhJbkJ1ZmZlciwgcG9pbnRlciwgZGF0
YSwgZXhwcmVzc2lvblN0YWNrLCBibG9jayk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKLSAgICAg
ICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA9IGVuY2xvc2luZ1N0YWNrLmF0KG9mZnNldCAr
IGkpOwotICAgICAgICAgICAgVmFsdWUqIHBoaSA9IGJsb2NrLnBoaXNbaV07Ci0gICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCB2YWx1ZS0+
b3JpZ2luKCksIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcih2YWx1ZS0+dHlwZSgpKSwgcGhpKTsKLSAg
ICAgICAgfQotICAgICAgICBlbmNsb3NpbmdTdGFjay5zaHJpbmsob2Zmc2V0KTsKLSAgICAgICAg
Y29ubmVjdENvbnRyb2xFbnRyeShibG9jaywgZW5jbG9zaW5nU3RhY2spOworICAgICAgICBjb25u
ZWN0Q29udHJvbEVudHJ5KGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIGJsb2NrLCBlbmNsb3NpbmdT
dGFjaywgYmxvY2spOworICAgICAgICBjb25uZWN0Q29udHJvbEVudHJ5KGluZGV4SW5CdWZmZXIs
IHBvaW50ZXIsIGJsb2NrLCBuZXdTdGFjaywgYmxvY2ssIHRydWUpOwogCiAgICAgICAgIG1fb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IGluZGV4SW5CdWZmZXI7CiAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgYm9k
eSk7CiAgICAgICAgIGJvZHktPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgZW5jbG9zaW5nU3RhY2suc2hyaW5rKG9mZnNldCk7CisgICAgfQogCiAg
ICAgbV9jdXJyZW50QmxvY2sgPSBib2R5OwogICAgIGVtaXRMb29wVGllclVwQ2hlY2sobG9vcElu
ZGV4LCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwpAQCAtMjIzNSw3ICsyNTE5LDcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2sm
IGVuY2xvc2luZ1N0YWNrLCBDb24KIAogQjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdl
bmVyYXRvcjo6YWRkVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKQogewotICAgIHJl
dHVybiBDb250cm9sRGF0YShtX3Byb2MsIE9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6
VG9wTGV2ZWwsIG1fcHJvYy5hZGRCbG9jaygpKTsKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9w
cm9jLCBPcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OlRvcExldmVsLCBtX3N0YWNrU2l6
ZSwgbV9wcm9jLmFkZEJsb2NrKCkpOwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEJsb2Nr
KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9s
VHlwZSYgbmV3QmxvY2ssIFN0YWNrJiBuZXdTdGFjaykgLT4gUGFydGlhbFJlc3VsdApAQCAtMjI0
Myw3ICsyNTI3LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRCbG9jayhCbG9ja1NpZ25hdHVy
ZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ28KICAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKIAogICAgIHNwbGl0U3RhY2soc2lnbmF0
dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwotICAgIG5ld0Jsb2NrID0gQ29udHJvbERh
dGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OkJsb2NrLCBjb250aW51
YXRpb24pOworICAgIG5ld0Jsb2NrID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2ln
bmF0dXJlLCBCbG9ja1R5cGU6OkJsb2NrLCBtX3N0YWNrU2l6ZSwgY29udGludWF0aW9uKTsKICAg
ICByZXR1cm4geyB9OwogfQogCkBAIC0yMjU1LDIwICsyNTM5LDIwIEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWdu
YXR1cmUsIFN0CiAgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBtX3Byb2MuYWRkQmxvY2soKTsK
ICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKIAotICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgb3Jp
Z2luKCksIGNvbmRpdGlvbik7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgZ2V0KGNvbmRpdGlvbikpOwogICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YWtlbiksIEZyZXF1ZW50
ZWRCbG9jayhub3RUYWtlbikpOwogICAgIHRha2VuLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRC
bG9jayk7CiAgICAgbm90VGFrZW4tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKIAog
ICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47CiAgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVu
Y2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7Ci0gICAgcmVzdWx0ID0gQ29udHJvbERhdGEobV9wcm9j
LCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OklmLCBjb250aW51YXRpb24sIG5vdFRh
a2VuKTsKKyAgICByZXN1bHQgPSBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1
cmUsIEJsb2NrVHlwZTo6SWYsIG1fc3RhY2tTaXplLCBjb250aW51YXRpb24sIG5vdFRha2VuKTsK
ICAgICByZXR1cm4geyB9OwogfQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJv
bERhdGEmIGRhdGEsIGNvbnN0IFN0YWNrJiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQK
IHsKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEucGhpcyk7Cisg
ICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhKTsKICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGRh
dGEuY29udGludWF0aW9uKTsKICAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YSk7
CiB9CkBAIC0yMjc2LDExICsyNTYwLDI0NyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2Uo
Q29udHJvbERhdGEmIGRhdGEsIGNvbnN0IFN0YWNrJiBjdXJyZW50U3RhY2spIC0+IFBhcgogYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChkYXRhLmJsb2NrVHlwZSgpID09IEJsb2Nr
VHlwZTo6SWYpOworICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKSArIGRhdGEubV9z
aWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuc3Bl
Y2lhbDsKICAgICBkYXRhLmNvbnZlcnRJZlRvQmxvY2soKTsKICAgICByZXR1cm4geyB9OwogfQog
CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRyeShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0
YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNr
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgKyttX3RyeURlcHRoOworCisgICAgQmFzaWNCbG9j
ayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgc3BsaXRTdGFjayhzaWdu
YXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CisgICAgcmVzdWx0ID0gQ29udHJvbERh
dGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OlRyeSwgbV9zdGFja1Np
emUsIGNvbnRpbnVhdGlvbiwgKyttX2NhbGxTaXRlSW5kZXgsIG1fdHJ5RGVwdGgpOworICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2godW5zaWduZWQgZXhj
ZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBTdGFjayYgY3VycmVudFN0
YWNrLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0YSk7Cisg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9y
aWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgcmV0dXJuIGFkZENhdGNoVG9VbnJlYWNo
YWJsZShleGNlcHRpb25JbmRleCwgc2lnbmF0dXJlLCBkYXRhLCByZXN1bHRzKTsKK30KKworUGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBCM0lSR2VuZXJhdG9yOjpwcmVwYXJlUGF0Y2hwb2ludEZv
ckV4Y2VwdGlvbnMoQmFzaWNCbG9jayogYmxvY2ssIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2gpCit7
CisgICAgKyttX2NhbGxTaXRlSW5kZXg7CisgICAgaWYgKCFtX3RyeURlcHRoKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgVmVjdG9yPFZhbHVlKj4gc3RhY2ttYXA7CisgICAgT3JpZ2luIG9y
aWdpbiA9IHRoaXMtPm9yaWdpbigpOworICAgIGZvciAoVmFyaWFibGUqIGxvY2FsIDogbV9sb2Nh
bHMpIHsKKyAgICAgICAgVmFsdWUqIHJlc3VsdCA9IGJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVW
YWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBvcmlnaW4sIGxvY2FsKTsKKyAgICAgICAgc3RhY2ttYXAu
YXBwZW5kKHJlc3VsdCk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0g
MDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250
cm9sSW5kZXgpIHsKKyAgICAgICAgQ29udHJvbERhdGEmIGRhdGEgPSBtX3BhcnNlci0+Y29udHJv
bFN0YWNrKClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKKyAgICAgICAgU3RhY2smIGV4cHJl
c3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xv
c2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBmb3IgKFZhcmlhYmxlKiB2YWx1ZSA6IGV4cHJl
c3Npb25TdGFjaykKKyAgICAgICAgICAgIHN0YWNrbWFwLmFwcGVuZChnZXQoYmxvY2ssIHZhbHVl
KSk7CisgICAgICAgIGlmIChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChkYXRhKSkKKyAgICAgICAg
ICAgIHN0YWNrbWFwLmFwcGVuZChnZXQoYmxvY2ssIGRhdGEuZXhjZXB0aW9uKCkpKTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBwYXRjaC0+bnVtQ2hpbGRyZW4oKTsKKyAgICBpZiAo
cGF0Y2gtPnR5cGUoKSAhPSBWb2lkKQorICAgICAgICBvZmZzZXQrKzsKKworICAgIHBhdGNoLT5l
ZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOworICAgIHBhdGNoLT5hcHBlbmRWZWN0b3JXaXRo
UmVwKHN0YWNrbWFwLCBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpOworCisgICAgcmV0dXJuIFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUgeyBtX2NhbGxTaXRlSW5kZXgsIG9mZnNldCB9OworfQorCith
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBS
ZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVmFsdWUqIG9wZXJh
dGlvblJlc3VsdCA9IGVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5kOjpDYXRjaCwgZGF0YSwgZXhjZXB0
aW9uSW5kZXgpOworICAgIFZhbHVlKiBwYXlsb2FkID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxFeHRyYWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXJUeXBlKCksIG9wZXJhdGlv
blJlc3VsdCwgMSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1l
bnQoaSk7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUodHlwZSksIG9yaWdpbigpLCBwYXls
b2FkLCBpICogc2l6ZW9mKHVpbnQ2NF90KSk7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2go
dmFsdWUpKTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRDYXRjaEFsbChTdGFjayYgY3VycmVudFN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywg
ZGF0YSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2Ms
IEp1bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgcmV0dXJuIGFkZENhdGNo
QWxsVG9VbnJlYWNoYWJsZShkYXRhKTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYXRj
aEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBlbWl0Q2F0Y2hJbXBsKENhdGNoS2luZDo6Q2F0Y2hBbGwsIGRhdGEpOworICAgIHJldHVy
biB7IH07Cit9CisKK1ZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2F0Y2hJbXBsKENhdGNoS2lu
ZCBraW5kLCBDb250cm9sVHlwZSYgZGF0YSwgdW5zaWduZWQgZXhjZXB0aW9uSW5kZXgpCit7Cisg
ICAgbV9oYXNDYXRjaCA9IHRydWU7CisgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxv
Y2soKTsKKyAgICBtX3Jvb3RCbG9ja3MuYXBwZW5kKG1fY3VycmVudEJsb2NrKTsKKyAgICBtX3N0
YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCk7CisKKyAgICBpZiAoQ29udHJvbFR5cGU6OmlzVHJ5
KGRhdGEpKSB7CisgICAgICAgIGlmIChraW5kID09IENhdGNoS2luZDo6Q2F0Y2gpCisgICAgICAg
ICAgICBkYXRhLmNvbnZlcnRUcnlUb0NhdGNoKCsrbV9jYWxsU2l0ZUluZGV4LCBtX3Byb2MuYWRk
VmFyaWFibGUocG9pbnRlclR5cGUoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRh
LmNvbnZlcnRUcnlUb0NhdGNoQWxsKCsrbV9jYWxsU2l0ZUluZGV4LCBtX3Byb2MuYWRkVmFyaWFi
bGUocG9pbnRlclR5cGUoKSkpOworICAgIH0KKworICAgIEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBl
ID0ga2luZCA9PSBDYXRjaEtpbmQ6OkNhdGNoID8gSGFuZGxlclR5cGU6OkNhdGNoIDogSGFuZGxl
clR5cGU6OkNhdGNoQWxsOworICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKHsgaGFuZGxl
clR5cGUsIGRhdGEudHJ5U3RhcnQoKSwgZGF0YS50cnlFbmQoKSwgMCwgbV90cnlEZXB0aCwgZXhj
ZXB0aW9uSW5kZXggfSk7CisKKyAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0
b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCks
IG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIGZhbHNlKTsKKworICAgIFZhbHVlKiBwb2ludGVyID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihtX3Byb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworCisgICAgdW5zaWduZWQgaW5kZXhJbkJ1ZmZl
ciA9IDA7CisKKyAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigp
LCBsb2NhbCwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKGluZGV4SW5CdWZmZXIsIHBvaW50ZXIsIGxv
Y2FsLT50eXBlKCkpKTsKKworICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29u
dHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5k
ZXgpIHsKKyAgICAgICAgYXV0byYgY29udHJvbERhdGEgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNr
KClbY29udHJvbEluZGV4XS5jb250cm9sRGF0YTsKKyAgICAgICAgYXV0byYgZXhwcmVzc2lvblN0
YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHBy
ZXNzaW9uU3RhY2s7CisgICAgICAgIGNvbm5lY3RDb250cm9sRW50cnkoaW5kZXhJbkJ1ZmZlciwg
cG9pbnRlciwgY29udHJvbERhdGEsIGV4cHJlc3Npb25TdGFjaywgZGF0YSk7CisgICAgfQorCisg
ICAgUGF0Y2hwb2ludFZhbHVlKiByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBh
dGNocG9pbnRWYWx1ZT4obV9wcm9jLCBtX3Byb2MuYWRkVHVwbGUoeyBwb2ludGVyVHlwZSgpLCBw
b2ludGVyVHlwZSgpIH0pLCBvcmlnaW4oKSk7CisgICAgcmVzdWx0LT5lZmZlY3RzLmV4aXRzU2lk
ZXdheXMgPSB0cnVlOworICAgIHJlc3VsdC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3Jh
dGNoUmVnaXN0ZXJzKCkpOworICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJMYXRlID0gUmVnaXN0ZXJT
ZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCk7CisgICAgY2xvYmJlckxhdGUuYWRkKEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcmVzdWx0LT5jbG9iYmVyTGF0ZShjbG9iYmVyTGF0
ZSk7CisgICAgcmVzdWx0LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJl
Z2lzdGVyKTsKKyAgICByZXN1bHQtPnJlc3VsdENvbnN0cmFpbnRzLmFwcGVuZChWYWx1ZVJlcDo6
cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcmVzdWx0LT5yZXN1bHRDb25zdHJh
aW50cy5hcHBlbmQoVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpKTsKKyAg
ICByZXN1bHQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIGppdC5tb3ZlKHBhcmFt
c1syXS5ncHIoKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQuYWRk
TGlua1Rhc2soW2NhbGxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlKSk7CisgICAgICAgIH0p
OworICAgIH0pOworCisgICAgVmFsdWUqIGV4Y2VwdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyVHlwZSgpLCByZXN1
bHQsIDApOworICAgIHNldChkYXRhLmV4Y2VwdGlvbigpLCBleGNlcHRpb24pOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZShDb250cm9s
VHlwZSYgdGFyZ2V0LCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJldHVybiBhZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUodGFyZ2V0LCBkYXRhKTsKK30KKworYXV0
byBCM0lSR2VuZXJhdG9yOjphZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIHRh
cmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bnNpZ25l
ZCB0YXJnZXREZXB0aCA9IDA7CisgICAgaWYgKENvbnRyb2xUeXBlOjppc1RyeSh0YXJnZXQpKQor
ICAgICAgICB0YXJnZXREZXB0aCA9IHRhcmdldC50cnlEZXB0aCgpOworCisgICAgbV9leGNlcHRp
b25IYW5kbGVycy5hcHBlbmQoeyBIYW5kbGVyVHlwZTo6RGVsZWdhdGUsIGRhdGEudHJ5U3RhcnQo
KSwgKyttX2NhbGxTaXRlSW5kZXgsIDAsIG1fdHJ5RGVwdGgsIHRhcmdldERlcHRoIH0pOworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGhyb3codW5zaWduZWQg
ZXhjZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFN0YWNrJikgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2ggPSBtX3Byb2MuYWRk
PFBhdGNocG9pbnRWYWx1ZT4oQjM6OlZvaWQsIG9yaWdpbigpKTsKKyAgICBwYXRjaC0+ZWZmZWN0
cy50ZXJtaW5hbCA9IHRydWU7CisgICAgcGF0Y2gtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZh
bHVlUmVwOjpyZWcoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgcGF0Y2gtPmFwcGVuZChm
cmFtZVBvaW50ZXIoKSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAgcGF0
Y2gtPmFwcGVuZChnZXQoYXJnc1tpXSksIFZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KGkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgUmVnaXN0ZXJTZXQgY2xvYmJlciA9IFJlZ2lzdGVy
U2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKTsKKyAgICBjbG9iYmVyLmFkZChHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgIGNsb2JiZXIuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMyk7Cisg
ICAgcGF0Y2gtPmNsb2JiZXIoY2xvYmJlcik7CisgICAgcGF0Y2gtPmNsb2JiZXJMYXRlKFJlZ2lz
dGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICBwYXRjaC0+bnVtR1BT
Y3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRs
ZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhtX2N1cnJlbnRCbG9jaywgcGF0Y2gp
OworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3RoaXMsIGV4Y2VwdGlvbkluZGV4LCBoYW5kbGVd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBwYXJhbXMuZ3BTY3JhdGNoKDAp
OworICAgICAgICBoYW5kbGUuZ2VuZXJhdGUoaml0LCBwYXJhbXMsIHRoaXMpOworCisgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAs
IEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgeworICAgICAg
ICAgICAgYXV0byBwcmVjaXNlQWxsb2NhdGlvbkNhc2UgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2Fs
bEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFBy
ZWNpc2VBbGxvY2F0aW9uOjpoYWxmQWxpZ25tZW50KSk7CisgICAgICAgICAgICBqaXQuYW5kUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2Ny
YXRjaCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2Ny
YXRjaCwgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6
b2Zmc2V0T2ZWTSgpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBhdXRvIGxvYWRlZENhc2UgPSBq
aXQuanVtcCgpOworCisgICAgICAgICAgICBwcmVjaXNlQWxsb2NhdGlvbkNhc2UubGluaygmaml0
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
LCBQcmVjaXNlQWxsb2NhdGlvbjo6b2Zmc2V0T2ZXZWFrU2V0KCkgKyBXZWFrU2V0OjpvZmZzZXRP
ZlZNKCkgLSBQcmVjaXNlQWxsb2NhdGlvbjo6aGVhZGVyU2l6ZSgpKSwgc2NyYXRjaCk7CisKKyAg
ICAgICAgICAgIGxvYWRlZENhc2UubGluaygmaml0KTsKKyAgICAgICAgfQorICAgICAgICBqaXQu
Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihzY3JhdGNoKTsK
KworICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4Y2VwdGlv
bkluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwor
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRh
Zyk7CisgICAgICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBFeGNlcHRp
b25IYW5kbGVyUHRyVGFnKTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsXSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVRocm93KSk7CisgICAgICAg
IH0pOworICAgIH0pOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocGF0Y2gpOworCisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXRocm93KHVuc2lnbmVk
LCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2ggPSBtX3Byb2MuYWRkPFBhdGNocG9pbnRWYWx1ZT4oQjM6OlZvaWQsIG9yaWdp
bigpKTsKKyAgICBwYXRjaC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0
ZXJzKCkpOworICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJMYXRlOworICAgIGNsb2JiZXJMYXRlLmFk
ZChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjph
cmd1bWVudEdQUjEpOworICAgIGNsb2JiZXJMYXRlLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjIp
OworICAgIHBhdGNoLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1ZTsKKyAgICBwYXRjaC0+YXBwZW5k
KGluc3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICBwYXRjaC0+YXBwZW5kKGZyYW1lUG9pbnRlcigpLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86
OmFyZ3VtZW50R1BSMSkpOworICAgIHBhdGNoLT5hcHBlbmQoZ2V0KGRhdGEuZXhjZXB0aW9uKCkp
LCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OmFyZ3VtZW50R1BSMikpOworICAgIHBhdGNoLT5udW1H
UFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgaGFu
ZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKG1fY3VycmVudEJsb2NrLCBwYXRj
aCk7CisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpcywgaGFuZGxlXSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBJ
bnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgc2NyYXRjaCk7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGF1dG8gcHJlY2lzZUFsbG9jYXRpb25DYXNlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxI
ZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcmVj
aXNlQWxsb2NhdGlvbjo6aGFsZkFsaWdubWVudCkpOworICAgICAgICAgICAgaml0LmFuZFB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0
Y2gpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2gsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkZvb3RlciArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om9m
ZnNldE9mVk0oKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgYXV0byBsb2FkZWRDYXNlID0gaml0
Lmp1bXAoKTsKKworICAgICAgICAgICAgcHJlY2lzZUFsbG9jYXRpb25DYXNlLmxpbmsoJmppdCk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwg
UHJlY2lzZUFsbG9jYXRpb246Om9mZnNldE9mV2Vha1NldCgpICsgV2Vha1NldDo6b2Zmc2V0T2ZW
TSgpIC0gUHJlY2lzZUFsbG9jYXRpb246OmhlYWRlclNpemUoKSksIHNjcmF0Y2gpOworCisgICAg
ICAgICAgICBsb2FkZWRDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LmNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoc2NyYXRjaCk7CisK
KyAgICAgICAgaGFuZGxlLmdlbmVyYXRlKGppdCwgcGFyYW1zLCB0aGlzKTsKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgICAg
ICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0
clRhZyk7CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbF0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21SZXRocm93KSk7CisgICAgICAgIH0pOworICAg
IH0pOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocGF0Y2gpOworCisgICAgcmV0dXJuIHsg
fTsKK30KKwogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEm
LCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ2Fs
bEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJ
bmZvcm1hdGlvbkZvcihtX3BhcnNlci0+c2lnbmF0dXJlKCksIENhbGxSb2xlOjpDYWxsZWUpOwpA
QCAtMjMwMCwxMCArMjgyMCwxMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25z
dCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+CiAgICAgICAgIEIz
OjpWYWx1ZVJlcCByZXAgPSB3YXNtQ2FsbEluZm8ucmVzdWx0c1tpXTsKICAgICAgICAgaWYgKHJl
cC5pc1N0YWNrKCkpIHsKICAgICAgICAgICAgIEIzOjpWYWx1ZSogYWRkcmVzcyA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpBZGQsIE9yaWdpbigpLCBm
cmFtZVBvaW50ZXIoKSwgY29uc3RhbnQocG9pbnRlclR5cGUoKSwgcmVwLm9mZnNldEZyb21GUCgp
KSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1
ZT4obV9wcm9jLCBCMzo6U3RvcmUsIE9yaWdpbigpLCByZXR1cm5WYWx1ZXNbb2Zmc2V0ICsgaV0s
IGFkZHJlc3MpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6TWVt
b3J5VmFsdWU+KG1fcHJvYywgQjM6OlN0b3JlLCBPcmlnaW4oKSwgZ2V0KHJldHVyblZhbHVlc1tv
ZmZzZXQgKyBpXSksIGFkZHJlc3MpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNT
RVJUKHJlcC5pc1JlZygpKTsKLSAgICAgICAgICAgIHBhdGNoLT5hcHBlbmQocmV0dXJuVmFsdWVz
W29mZnNldCArIGldLCByZXApOworICAgICAgICAgICAgcGF0Y2gtPmFwcGVuZChnZXQocmV0dXJu
VmFsdWVzW29mZnNldCArIGldKSwgcmVwKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjMxMywx
MiArMjgzMywxMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9s
RGF0YSYsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+CiAKIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICB1bmlm
eVZhbHVlc1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMsIGRhdGEucGhpcyk7CisgICAgdW5pZnlWYWx1
ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhKTsKIAogICAgIEJhc2ljQmxvY2sqIHRhcmdl
dCA9IGRhdGEudGFyZ2V0QmxvY2tGb3JCcmFuY2goKTsKICAgICBpZiAoY29uZGl0aW9uKSB7CiAg
ICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gs
IG9yaWdpbigpLCBjb25kaXRpb24pOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBnZXQoY29uZGl0aW9uKSk7CiAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJn
ZXQpLCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CiAgICAgICAgIHRhcmdldC0+YWRk
UHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogICAgICAgICBjb250aW51YXRpb24tPmFkZFBy
ZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKQEAgLTIzMzMsMTEgKzI4NTMsMTIgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBl
IGNvbmRpdGlvbiwgY29uc3QKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRTd2l0Y2goRXhwcmVz
c2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywg
Q29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2sp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBVTlVTRURfUEFSQU0oZXhwcmVzc2lvblN0YWNrKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgdGFyZ2V0c1tpXS0+cGhpcyk7
Ci0gICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkZWZhdWx0VGFyZ2V0
LnBoaXMpOworICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssICp0
YXJnZXRzW2ldKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRl
ZmF1bHRUYXJnZXQpOwogCi0gICAgU3dpdGNoVmFsdWUqIHN3aXRjaFZhbHVlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxTd2l0Y2hWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgY29uZGl0aW9u
KTsKKyAgICBTd2l0Y2hWYWx1ZSogc3dpdGNoVmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFN3aXRjaFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnZXQoY29uZGl0aW9uKSk7CiAgICAg
c3dpdGNoVmFsdWUtPnNldEZhbGxUaHJvdWdoKEZyZXF1ZW50ZWRCbG9jayhkZWZhdWx0VGFyZ2V0
LnRhcmdldEJsb2NrRm9yQnJhbmNoKCkpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRh
cmdldHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHN3aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3aXRj
aENhc2UoaSwgRnJlcXVlbnRlZEJsb2NrKHRhcmdldHNbaV0tPnRhcmdldEJsb2NrRm9yQnJhbmNo
KCkpKSk7CkBAIC0yMzUxLDcgKzI4NzIsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2Nr
KENvbnRyb2xFbnRyeSYgZW50cnksIFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFBhcgogCiAg
ICAgQVNTRVJUKGV4cHJlc3Npb25TdGFjay5zaXplKCkgPT0gZGF0YS5zaWduYXR1cmUoKS0+cmV0
dXJuQ291bnQoKSk7CiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBlOjpMb29w
KQotICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEucGhp
cyk7CisgICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGF0YSk7
CiAKICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVt
cCwgb3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsKICAgICBkYXRhLmNvbnRpbnVhdGlvbi0+
YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwpAQCAtMjM2MywzMCArMjg4NCwzNCBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRy
eSwgY29uc3QgU3RhY2smIGV4cHJlcwogewogICAgIENvbnRyb2xEYXRhJiBkYXRhID0gZW50cnku
Y29udHJvbERhdGE7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLmNvbnRpbnVhdGlvbjsKKyAg
ICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCk7CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5
cGUoKSA9PSBCbG9ja1R5cGU6OklmKSB7CiAgICAgICAgIGRhdGEuc3BlY2lhbC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFkZFByZWRlY2Vzc29yKGRhdGEuc3BlY2lhbCk7Ci0gICAg
fQorICAgIH0gZWxzZSBpZiAoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRyeSB8fCBk
YXRhLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6Q2F0Y2gpCisgICAgICAgIC0tbV90cnlEZXB0
aDsKIAogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpICE9IEJsb2NrVHlwZTo6TG9vcCkgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291
bnQoKTsgKytpKSB7CiAgICAgICAgICAgICBWYWx1ZSogcmVzdWx0ID0gZGF0YS5waGlzW2ldOwog
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwotICAgICAgICAgICAg
ZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRhdGEuc2ln
bmF0dXJlKCktPnJldHVyblR5cGUoaSksIHJlc3VsdCk7CisgICAgICAgICAgICBlbnRyeS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZGF0YS5zaWduYXR1cmUoKS0+
cmV0dXJuVHlwZShpKSwgcHVzaChyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAg
ICAgICAgIG1fb3V0ZXJMb29wcy5yZW1vdmVMYXN0KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmIChpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKSkKKyAgICAgICAgICAgIGlmIChp
IDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKSkgeworICAgICAgICAgICAgICAgICsrbV9zdGFja1Np
emU7CiAgICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5k
KGV4cHJlc3Npb25TdGFja1tpXSk7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgVHlwZSByZXR1cm5UeXBlID0gZGF0YS5zaWduYXR1cmUo
KS0+cmV0dXJuVHlwZShpKTsKLSAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Np
b25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQocmV0dXJuVHlwZSwgY29uc3RhbnQodG9CM1R5cGUo
cmV0dXJuVHlwZSksIDB4YmJhZGJlZWYpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3Nl
ZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQocmV0dXJuVHlwZSwgcHVzaChjb25z
dGFudCh0b0IzVHlwZShyZXR1cm5UeXBlKSwgMHhiYmFkYmVlZikpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KIAorCiAgICAgLy8gVG9wTGV2ZWwgZG9lcyBub3QgaGF2ZSBhbnkg
Y29kZSBhZnRlciB0aGlzIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGVtaXQgYSByZXR1cm4g
aGVyZS4KICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsKQog
ICAgICAgICByZXR1cm4gYWRkUmV0dXJuKGVudHJ5LmNvbnRyb2xEYXRhLCBlbnRyeS5lbmNsb3Nl
ZEV4cHJlc3Npb25TdGFjayk7CkBAIC0yNDAwLDEyICsyOTI1LDEyIEBAIEIzOjpWYWx1ZSogQjNJ
UkdlbmVyYXRvcjo6Y3JlYXRlQ2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmxvY2ssIE9yaWdp
biBvcmlnaW4sCiAgICAgVmVjdG9yPEIzOjpDb25zdHJhaW5lZFZhbHVlPiBjb25zdHJhaW5lZEFy
Z3VtZW50czsKICAgICBDYWxsSW5mb3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdD
b252ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKHNpZ25hdHVyZSk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAgIGNvbnN0cmFpbmVkQXJn
dW1lbnRzLmFwcGVuZChCMzo6Q29uc3RyYWluZWRWYWx1ZShhcmdzW2ldLCB3YXNtQ2FsbEluZm8u
cGFyYW1zW2ldKSk7CisgICAgICAgIGNvbnN0cmFpbmVkQXJndW1lbnRzLmFwcGVuZChCMzo6Q29u
c3RyYWluZWRWYWx1ZShnZXQoYmxvY2ssIGFyZ3NbaV0pLCB3YXNtQ2FsbEluZm8ucGFyYW1zW2ld
KSk7CiAKICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUluQnl0ZXMoV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgd2FzbUNhbGxJbmZvLmhlYWRl
ckFuZEFyZ3VtZW50U3RhY2tTaXplSW5CeXRlcykpOwogCiAgICAgQjM6OlR5cGUgcmV0dXJuVHlw
ZSA9IHRvQjNSZXN1bHRUeXBlKCZzaWduYXR1cmUpOwotICAgIEIzOjpQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJv
YywgcmV0dXJuVHlwZSwgb3JpZ2luKTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX3Byb2MuYWRkPFBhdGNocG9pbnRWYWx1ZT4ocmV0dXJuVHlwZSwgb3JpZ2luKTsKICAgICBw
YXRjaHBvaW50LT5jbG9iYmVyRWFybHkoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVy
cygpKTsKICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldDo6dm9sYXRpbGVS
ZWdpc3RlcnNGb3JKU0NhbGwoKSk7CiAgICAgcGF0Y2hwb2ludEZ1bmN0b3IocGF0Y2hwb2ludCk7
CkBAIC0yNDE3LDYgKzI5NDIsNyBAQCBCMzo6VmFsdWUqIEIzSVJHZW5lcmF0b3I6OmNyZWF0ZUNh
bGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBPcmlnaW4gb3JpZ2luLAogICAgICAgICAg
ICAgcmVzdWx0Q29uc3RyYWludHMuYXBwZW5kKEIzOjpWYWx1ZVJlcCh2YWx1ZUxvY2F0aW9uKSk7
CiAgICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnRzID0gV1RGTW92ZShyZXN1bHRD
b25zdHJhaW50cyk7CiAgICAgfQorICAgIGJsb2NrLT5hcHBlbmQocGF0Y2hwb2ludCk7CiAgICAg
cmV0dXJuIHBhdGNocG9pbnQ7CiB9CiAKQEAgLTI0MzgsMTEgKzI5NjQsMTEgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLAogICAgICAgICAgICAgY29uc3QgVmVjdG9yPEIzOjpUeXBlPiYgdHVwbGUg
PSBtX3Byb2MudHVwbGVGb3JUeXBlKHJldHVyblR5cGUpOwogICAgICAgICAgICAgQVNTRVJUKHNp
Z25hdHVyZS5yZXR1cm5Db3VudCgpID09IHR1cGxlLnNpemUoKSk7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJldHVybkNvdW50KCk7ICsraSkKLSAgICAg
ICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJh
Y3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHVwbGVbaV0sIGNhbGxSZXN1bHQsIGkpKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0dXBsZVtpXSwgY2FsbFJlc3VsdCwg
aSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6IHsK
LSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGNhbGxSZXN1bHQpOworICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQocHVzaChjYWxsUmVzdWx0KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0yNDcxLDggKzI5OTcsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLAogICAgICAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291
bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCiAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgICAgICAg
ICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2
ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwotICAgICAgICAgICAgICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKKyAgICAgICAgICAgICAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHBy
ZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhpc1dhc21CbG9jaywgcGF0Y2hwb2ludCk7Cisg
ICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBoYW5kbGUsIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAg
ICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhp
cyk7CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRo
cmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CkBAIC0yNDk4LDggKzMw
MjYsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICAgICAgICAgIC8vIFdlIHBl
c3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhh
dCBpcyBib3VuZHMgY2hlY2tpbmcuCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzIxODEKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykp
OwotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcmV0dXJuVHlwZV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKKyAgICAgICAgICAgICAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRs
ZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhpc0VtYmVkZGVyQmxvY2ssIHBhdGNo
cG9pbnQpOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdGhpcywg
aGFuZGxlLCByZXR1cm5UeXBlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICAg
ICAgICAgIGppdC5jYWxsKHBhcmFtc1twYXJhbXMucHJvYygpLnJlc3VsdENvdW50KHJldHVyblR5
cGUpXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIH0pKTsKQEAgLTI1MjcsOCArMzA1NywxMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIHRoZSBzaXplIHJlZ2lzdGVy
IHNpbmNlIHRoZSBMTEludCBhbHdheXMgYm91bmRzIGNoZWNrcwogICAgICAgICAgICAgICAgIGlm
IChtX21vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nIHx8IG1faW5mby5tZW1vcnkuaXNTaGFy
ZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0
ZXJTZXQgeyBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lz
dGVyIH0pOwotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICBQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlIGhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0
aW9ucyhtX2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCk7CisgICAgICAgICAgICAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFt0aGlzLCBoYW5kbGUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZS5nZW5lcmF0ZShqaXQsIHBhcmFtcywgdGhpcyk7CiAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFy
Q2FsbCgpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewogICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFw
cGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2Fs
bCksIGZ1bmN0aW9uSW5kZXggfSk7CkBAIC0yNTQzLDcgKzMwNzUsNyBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVk
IHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0g
ICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CisgICAgVmFs
dWUqIGNhbGxlZUluZGV4ID0gZ2V0KGFyZ3MudGFrZUxhc3QoKSk7CiAgICAgQVNTRVJUKHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogCiAgICAgbV9tYWtlc0NhbGxz
ID0gdHJ1ZTsKQEAgLTI1NTIsMTEgKzMwODQsMTEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRD
YWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQK
ICAgICAvLyBjYW4gYmUgdG8gdGhlIGVtYmVkZGVyIGZvciBvdXIgc3RhY2sgY2hlY2sgY2FsY3Vs
YXRpb24uCiAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpT
Q2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CiAKLSAg
ICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyOwotICAgIEV4cHJlc3Npb25U
eXBlIGluc3RhbmNlc0J1ZmZlcjsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9u
QnVmZmVyTGVuZ3RoOworICAgIFZhbHVlKiBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyOworICAgIFZh
bHVlKiBpbnN0YW5jZXNCdWZmZXI7CisgICAgVmFsdWUqIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJM
ZW5ndGg7CiAgICAgewotICAgICAgICBFeHByZXNzaW9uVHlwZSB0YWJsZSA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwg
b3JpZ2luKCksCisgICAgICAgIFZhbHVlKiB0YWJsZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAg
ICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpv
ZmZzZXRPZlRhYmxlUHRyKG1fbnVtSW1wb3J0RnVuY3Rpb25zLCB0YWJsZUluZGV4KSkpOwogICAg
ICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAg
ICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihGdW5jUmVmVGFibGU6Om9mZnNldE9mRnVu
Y3Rpb25zKCkpKTsKQEAgLTI1NzgsMTcgKzMxMTAsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXQKIAogICAgIGNhbGxlZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBaRXh0MzIsIG9yaWdpbigpLCBjYWxsZWVJbmRleCk7CiAKLSAgICBFeHByZXNzaW9u
VHlwZSBjYWxsYWJsZUZ1bmN0aW9uOworICAgIFZhbHVlKiBjYWxsYWJsZUZ1bmN0aW9uOwogICAg
IHsKICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0IGluIHRoZSB0YWJsZSBpbmRleCBzcGFj
ZSB3ZSBhcmUgbG9va2luZyBmb3IuCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIG9mZnNldCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKKyAg
ICAgICAgVmFsdWUqIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgTXVsLCBvcmlnaW4oKSwKICAgICAgICAgICAgIGNhbGxlZUluZGV4LCBjb25zdGFudChw
b2ludGVyVHlwZSgpLCBzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbikpKTsKICAg
ICAgICAgY2FsbGFibGVGdW5jdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgb2Zmc2V0KTsK
IAogICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9u
IGlzIGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0
dXJlSW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgogICAgICAgICAvLyBGSVhN
RTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBm
YWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMAogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpzaWduYXR1cmVJbmRleCkgPT0gc2l6
ZW9mKHVpbnQ2NF90KSwgIkxvYWQgY29kZWdlbiBhc3N1bWVzIGk2NCIpOwotICAgICAgICBFeHBy
ZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1
bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpv
ZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkpKTsKKyAgICAgICAgVmFsdWUqIGNhbGxlZVNpZ25hdHVy
ZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBJbnQ2NCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIHNhZmVDYXN0PGludDMyX3Q+
KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSkp
OwogICAgICAgICB7CiAgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCiAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVh
bCwgb3JpZ2luKCksCkBAIC0yNjAyLDcgKzMxMzQsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dAogCiAgICAgICAgIC8vIENoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyB0aGUgdmFsdWUgd2Ug
ZXhwZWN0LgogICAgICAgICB7Ci0gICAgICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNp
Z25hdHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlKSk7Cisg
ICAgICAgICAgICBWYWx1ZSogZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpOwogICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9y
aWdpbigpLAogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgTm90RXF1YWwsIG9yaWdpbigpLCBjYWxsZWVTaWduYXR1cmVJbmRleCwgZXhwZWN0
ZWRTaWduYXR1cmVJbmRleCkpOwogCkBAIC0yNjE2LDcgKzMxNDgsNyBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdAogICAgICAgICBjYWxsZWVJbmRleCwgY29uc3RhbnQocG9pbnRlclR5cGUoKSwg
c2l6ZW9mKEluc3RhbmNlKikpKTsKICAgICBWYWx1ZSogY2FsbGVlSW5zdGFuY2UgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEFkZCwgb3JpZ2luKCksIGluc3RhbmNlc0J1ZmZlciwgb2Zmc2V0KSk7Ci0gICAgRXhw
cmVzc2lvblR5cGUgY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgVmFsdWUq
IGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9y
aWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLAogICAgICAgICAgICAgc2FmZUNhc3Q8aW50MzJfdD4o
V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0
aW9uKCkpKSk7CiAKQEAgLTI2MjUsNyArMzE1Nyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykg
LT4gUGFydGlhbFJlc3VsdAogewotICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZSA9IGFyZ3MudGFr
ZUxhc3QoKTsKKyAgICBWYWx1ZSogY2FsbGVlID0gZ2V0KGFyZ3MudGFrZUxhc3QoKSk7CiAgICAg
QVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogICAgIG1f
bWFrZXNDYWxscyA9IHRydWU7CiAKQEAgLTI2NDIsMjQgKzMxNzQsMjcgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsUmVmKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhw
cmVzc2lvblR5cGUKICAgICBWYWx1ZSogY2FsbGVlSW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdp
bigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFk
ZCwgb3JpZ2luKCksIGpzQ2FsbGVlSW5zdGFuY2UsIGluc3RhbmNlT2Zmc2V0KSk7CiAKLSAgICBF
eHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICBWYWx1
ZSogY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwg
b3JpZ2luKCksIGNhbGxlZSwKICAgICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+KFdlYkFzc2Vt
Ymx5RnVuY3Rpb25CYXNlOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSkpKTsKIAog
ICAgIHJldHVybiBlbWl0SW5kaXJlY3RDYWxsKGNhbGxlZUluc3RhbmNlLCBjYWxsZWVDb2RlLCBz
aWduYXR1cmUsIGFyZ3MsIHJlc3VsdHMpOwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5
KGNvbnN0IEV4cHJlc3Npb25UeXBlIHBoaSwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291cmNlKQor
dm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeShWYWx1ZSogcGhpLCBjb25zdCBFeHByZXNzaW9uVHlw
ZSBzb3VyY2UpCiB7Ci0gICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHNvdXJjZSwgcGhpKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ2V0KHNvdXJjZSksIHBoaSk7
CiB9CiAKLXZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgU3Rh
Y2smIHJlc3VsdFN0YWNrLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHQpCit2b2lkIEIzSVJHZW5l
cmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IFN0YWNrJiByZXN1bHRTdGFjaywgY29u
c3QgQ29udHJvbERhdGEmIGJsb2NrKQogewotICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpIDw9IHJl
c3VsdFN0YWNrLnNpemUoKSk7CisgICAgY29uc3QgVmVjdG9yPFZhbHVlKj4mIHBoaXMgPSBibG9j
ay5waGlzOworICAgIHNpemVfdCByZXN1bHRTaXplID0gcGhpcy5zaXplKCk7CiAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKLSAgICAgICAgdW5pZnkocmVz
dWx0W3Jlc3VsdC5zaXplKCkgLSAxIC0gaV0sIHJlc3VsdFN0YWNrLmF0KHJlc3VsdFN0YWNrLnNp
emUoKSAtIDEgLSBpKSk7CisgICAgQVNTRVJUKHJlc3VsdFNpemUgPD0gcmVzdWx0U3RhY2suc2l6
ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0U2l6ZTsgKytpKQorICAg
ICAgICB1bmlmeShwaGlzW3Jlc3VsdFNpemUgLSAxIC0gaV0sIHJlc3VsdFN0YWNrLmF0KHJlc3Vs
dFN0YWNrLnNpemUoKSAtIDEgLSBpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBFeHByZXNzaW9u
U3RhY2soY29uc3QgQ29tbWFQcmludGVyJiBjb21tYSwgY29uc3QgQjNJUkdlbmVyYXRvcjo6U3Rh
Y2smIGV4cHJlc3Npb25TdGFjaykKQEAgLTI3MDMsOCArMzIzOCwxMSBAQCBFeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENv
bXBpbGF0aW9uQwogCiAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJ
VCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53
YXNtRW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOworICAgIGNvbXBp
bGF0aW9uQ29udGV4dC5wcm9jZWR1cmUgPSBtYWtlVW5pcXVlPFByb2NlZHVyZT4oKTsKKworICAg
IFByb2NlZHVyZSYgcHJvY2VkdXJlID0gKmNvbXBpbGF0aW9uQ29udGV4dC5wcm9jZWR1cmU7CiAK
LSAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50
cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogCiAgICAgcHJvY2VkdXJl
LnNldE9yaWdpblByaW50ZXIoW10gKFByaW50U3RyZWFtJiBvdXQsIE9yaWdpbiBvcmlnaW4pIHsK
ICAgICAgICAgaWYgKG9yaWdpbi5kYXRhKCkpCkBAIC0yNzI1LDYgKzMyNjMsNyBAQCBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlKENvbXBpbGF0aW9uQwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNl
cihpckdlbmVyYXRvciwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgp
LCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2Vy
LnBhcnNlKCkpOwogCisgICAgaXJHZW5lcmF0b3IuaW5zZXJ0RW50cnlTd2l0Y2goKTsKICAgICBp
ckdlbmVyYXRvci5pbnNlcnRDb25zdGFudHMoKTsKIAogICAgIHByb2NlZHVyZS5yZXNldFJlYWNo
YWJpbGl0eSgpOwpAQCAtMjczNiwxOCArMzI3NSw0MyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9u
QwogICAgIGRhdGFMb2dJZihXYXNtQjNJUkdlbmVyYXRvckludGVybmFsOjp2ZXJib3NlLCAiUG9z
dCBTU0E6ICIsIHByb2NlZHVyZSk7CiAgICAgCiAgICAgeworICAgICAgICBpZiAoc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKGNvbXBpbGF0aW9uTW9kZSkpCisgICAgICAgICAgICBwcm9jZWR1cmUu
Y29kZSgpLnNldERpc2Fzc2VtYmxlcihtYWtlVW5pcXVlPEIzOjpBaXI6OkRpc2Fzc2VtYmxlcj4o
KSk7CiAgICAgICAgIEIzOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUpOwogICAgICAg
ICBCMzo6Z2VuZXJhdGUocHJvY2VkdXJlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBv
aW50SklUKTsKICAgICAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9k
dWN0cyA9IHByb2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpOwogICAgICAgICByZXN1bHQtPmVu
dHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHByb2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0
ZXJBdE9mZnNldExpc3QoKTsKICAgICB9CiAKKyAgICByZXN1bHQtPnN0YWNrbWFwcyA9IGlyR2Vu
ZXJhdG9yLnRha2VTdGFja21hcHMoKTsKKyAgICByZXN1bHQtPmV4Y2VwdGlvbkhhbmRsZXJzID0g
aXJHZW5lcmF0b3IudGFrZUV4Y2VwdGlvbkhhbmRsZXJzKCk7CisKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCit2b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKFZlY3RvcjxDb2Rl
TG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJ
bnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgY29uc3QgQ29tcGlsYXRpb25Db250ZXh0JiBjb250
ZXh0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQoreworICAgIGlmICghY29udGV4dC5wcm9jZWR1
cmUpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDA7
CisgICAgdW5zaWduZWQgbnVtRW50cnlwb2ludHMgPSBjb250ZXh0LnByb2NlZHVyZS0+bnVtRW50
cnlwb2ludHMoKTsKKyAgICBmb3IgKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXJJ
bmZvIDogZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGVudHJ5cG9pbnRJbmRleCA8IG51bUVudHJ5cG9pbnRzKTsKKyAgICAgICAgaWYgKGhhbmRs
ZXJJbmZvLm1fdHlwZSA9PSBIYW5kbGVyVHlwZTo6RGVsZWdhdGUpIHsKKyAgICAgICAgICAgIGhh
bmRsZXJzLmFwcGVuZCh7IH0pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICArK2VudHJ5cG9pbnRJbmRleDsKKyAgICAgICAgaGFuZGxlcnMuYXBwZW5kKGxpbmtC
dWZmZXIubG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihjb250ZXh0LnByb2NlZHVy
ZS0+Y29kZSgpLmVudHJ5cG9pbnRMYWJlbChlbnRyeXBvaW50SW5kZXgpKSk7CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUKGVudHJ5cG9pbnRJbmRleCA9PSBudW1FbnRyeXBvaW50cyAtIDEpOwor
fQorCiAvLyBDdXN0b20gd2FzbSBvcHMuIFRoZXNlIGFyZSB0aGUgb25lcyB0b28gbWVzc3kgdG8g
ZG8gaW4gd2FzbS5qc29uLgogCi12b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JNb2RP
ckRpdihCMzo6T3Bjb2RlIG9wZXJhdGlvbiwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lv
blR5cGUgcmlnaHQpCit2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JNb2RPckRpdihC
Mzo6T3Bjb2RlIG9wZXJhdGlvbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKIHsKICAgICBB
U1NFUlQob3BlcmF0aW9uID09IERpdiB8fCBvcGVyYXRpb24gPT0gTW9kIHx8IG9wZXJhdGlvbiA9
PSBVRGl2IHx8IG9wZXJhdGlvbiA9PSBVTW9kKTsKICAgICBjb25zdCBCMzo6VHlwZSB0eXBlID0g
bGVmdC0+dHlwZSgpOwpAQCAtMjc3NiwxMDYgKzMzNDAsMTI1IEBAIHZvaWQgQjNJUkdlbmVyYXRv
cjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUgb3BlcmF0aW9uLCBFeHByZXNzaW9u
VHlwZSBsCiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJEaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMkRpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnRWYXIsIEV4cHJlc3Np
b25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IERpdjsKKyAgICBWYWx1ZSogbGVmdCA9IGdl
dChsZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIpOwogICAgIGVtaXRD
aGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3VsdCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9OwogfQog
CiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4o
RXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSByaWdo
dFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIGNv
bnN0IEIzOjpPcGNvZGUgb3AgPSBNb2Q7CisgICAgVmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7
CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9k
T3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsK
KyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgY2hpbGwob3ApLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1cm4geyB9Owog
fQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2
VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJEaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0VmFyLCBFeHByZXNzaW9uVHlwZSBy
aWdodFZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAg
IGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBVRGl2OworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRW
YXIpOworICAgIFZhbHVlKiByaWdodCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zv
ck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAg
ICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
b3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBs
YXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1VPihFeHByZXNz
aW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6
Ok9wY29kZSBvcCA9IFVNb2Q7CisgICAgVmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAg
VmFsdWUqIHJpZ2h0ID0gZ2V0KHJpZ2h0VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYo
b3AsIGxlZnQsIHJpZ2h0KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9
IHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlM+KEV4cHJlc3Npb25UeXBlIGxl
ZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4oRXhw
cmVzc2lvblR5cGUgbGVmdFZhciwgRXhwcmVzc2lvblR5cGUgcmlnaHRWYXIsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9w
ID0gRGl2OworICAgIFZhbHVlKiBsZWZ0ID0gZ2V0KGxlZnRWYXIpOworICAgIFZhbHVlKiByaWdo
dCA9IGdldChyaWdodFZhcik7CiAgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCBy
aWdodCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNz
aW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KEV4cHJlc3Npb25UeXBl
IGxlZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IE1vZDsKKyAg
ICBWYWx1ZSogbGVmdCA9IGdldChsZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmln
aHRWYXIpOwogICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAg
IHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hpbGwo
b3ApLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0
LCByaWdodCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHBy
ZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlU+KEV4cHJlc3Npb25U
eXBlIGxlZnRWYXIsIEV4cHJlc3Npb25UeXBlIHJpZ2h0VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVEaXY7
CisgICAgVmFsdWUqIGxlZnQgPSBnZXQobGVmdFZhcik7CisgICAgVmFsdWUqIHJpZ2h0ID0gZ2V0
KHJpZ2h0VmFyKTsKICAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsK
LSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9w
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBl
IHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4oRXhwcmVzc2lvblR5cGUgbGVmdFZh
ciwgRXhwcmVzc2lvblR5cGUgcmlnaHRWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKICAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVU1vZDsKKyAgICBWYWx1
ZSogbGVmdCA9IGdldChsZWZ0VmFyKTsKKyAgICBWYWx1ZSogcmlnaHQgPSBnZXQocmlnaHRWYXIp
OwogICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwotICAgIHJlc3Vs
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigp
LCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKICAgICByZXR1
cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyQ3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+
KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRW
YWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChh
cmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgewogICAgICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zMzIocGFyYW1zWzFdLmdw
cigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQg
PSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9
IGdldChhcmdWYXIpOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4o
KSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7
CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5jb3Vu
dFRyYWlsaW5nWmVyb3M2NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAg
fSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1
bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
UG9wY250PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAjaWYgQ1BV
KFg4Nl82NCkKICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9u
KCkpIHsKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsK
QEAgLTI4ODQsMTkgKzM0NjcsMjAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYKICAgICAgICAg
ICAgIGppdC5jb3VudFBvcHVsYXRpb24zMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIo
KSk7CiAgICAgICAgIH0pOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6
bm9uZSgpOwotICAgICAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICAgICByZXN1bHQgPSBw
dXNoKHBhdGNocG9pbnQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICNlbmRpZgogCiAg
ICAgVmFsdWUqIGZ1bmNBZGRyZXNzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0
clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25Qb3Bjb3VudDMyKSk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgp
LCBmdW5jQWRkcmVzcywgYXJnKTsKKyAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksIEVmZmVjdHM6Om5v
bmUoKSwgZnVuY0FkZHJlc3MsIGFyZykpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRl
PD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUg
YXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAg
VmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogI2lmIENQVShYODZfNjQpCiAgICAgaWYgKE1hY3Jv
QXNzZW1ibGVyOjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CiAgICAgICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2lu
dFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CkBAIC0yOTA1LDE5ICszNDg5LDIwIEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5cGUmCiAgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9u
NjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICB9KTsKICAgICAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICAgICAgcmVzdWx0
ID0gcGF0Y2hwb2ludDsKKyAgICAgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAjZW5kaWYKIAogICAgIFZhbHVlKiBmdW5jQWRkcmVzcyA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgdGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uUG9wY291bnQ2NCkpOwot
ICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9j
LCBJbnQ2NCwgb3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwgZnVuY0FkZHJlc3MsIGFyZyk7Cisg
ICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1f
cHJvYywgSW50NjQsIG9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcp
KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPEY2NENvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0
Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAg
ICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBEb3VibGUsIG9yaWdpbigpKTsKICAgICBpZiAoaXNY
ODYoKSkKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKQEAg
LTI5MzIsMTMgKzM1MTcsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0
VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmUKICNlbmRpZgogICAg
IH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVz
dWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJl
dHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjMyQ29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFy
KTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBGbG9hdCwgb3JpZ2luKCkpOwogICAgIGlm
IChpc1g4NigpKQogICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAx
OwpAQCAtMjk1Myw2NSArMzUzOSw3MCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjMyQ29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvbgogI2VuZGlm
CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAg
ICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkY2NE5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkY2NE5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsK
ICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBEb3VibGUsIG9yaWdpbigpKTsKICAgICBwYXRj
aHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVz
dEludERvdWJsZShwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CiAgICAgfSk7CiAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBw
YXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYz
Mk5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJl
c3Q+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBv
aW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9p
bnRWYWx1ZT4obV9wcm9jLCBGbG9hdCwgb3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgewogICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0SW50RmxvYXQocGFy
YW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOwogICAgIH0pOwogICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAg
ICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBs
YXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cith
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KEV4cHJlc3Npb25UeXBl
IGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAg
IFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBE
b3VibGUsIG9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6
U29tZVJlZ2lzdGVyKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAg
ICAgICAgaml0LnJvdW5kVG93YXJkWmVyb0RvdWJsZShwYXJhbXNbMV0uZnByKCksIHBhcmFtc1sw
XS5mcHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5v
bmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hw
b2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdW
YXIpOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEZsb2F0LCBvcmlnaW4oKSk7CiAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIGppdC5yb3VuZFRvd2FyZFpl
cm9GbG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CiAgICAgfSk7CiAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRj
aHBvaW50OworICAgIHJlc3VsdCA9IHB1c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsK
IH0KIAogdGVtcGxhdGU8PgotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRy
dW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNT
RjY0PihFeHByZXNzaW9uVHlwZSBhcmdWYXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFsdWUq
IG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nh
c3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKICAgICBW
YWx1ZSogbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRp
Y19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpIC0gMS4w
KSk7CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzAyOCwxMyArMzYxOSwxNCBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDMy
KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7
CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiB0
ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMy
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4
cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsKICAgICBWYWx1ZSogbWF4ID0g
Y29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0
PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKICAgICBWYWx1ZSogbWlu
ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOwogICAgIFZhbHVlKiBv
dXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0
QW5kLCBvcmlnaW4oKSwKQEAgLTMwNTEsMTQgKzM2NDMsMTUgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHkKICAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb0ludDMyKHBhcmFtc1sxXS5mcHIoKSwg
cGFyYW1zWzBdLmdwcigpKTsKICAgICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZm
ZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVz
aChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCiAKIHRlbXBsYXRlPD4KLWF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJn
VmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFs
dWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChEb3VibGUs
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNf
bGltaXRzPGludDMyX3Q+OjptaW4oKSkgKiAtMi4wKSk7CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0
YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PigtMS4wKSk7CiAgICAgVmFsdWUqIG91
dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRB
bmQsIG9yaWdpbigpLApAQCAtMzA3NSwxMyArMzY2OCwxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeQogICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb1VpbnQzMihwYXJhbXNbMV0uZnByKCks
IHBhcmFtc1swXS5ncHIoKSk7CiAgICAgfSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVm
ZmVjdHM6Om5vbmUoKTsKLSAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJlc3VsdCA9IHB1
c2gocGF0Y2hwb2ludCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8PgotYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmdW
YXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKKyAgICBWYWx1
ZSogYXJnID0gZ2V0KGFyZ1Zhcik7CiAgICAgVmFsdWUqIG1heCA9IGNvbnN0YW50KEZsb2F0LCBi
aXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptaW4oKSkgKiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKICAgICBW
YWx1ZSogbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KC0xLjApKSk7CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzA5
OCwxMyArMzY5MiwxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1
bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1
bmNhdGVGbG9hdFRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKICAg
ICB9KTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJl
c3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICBy
ZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTw+Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZ1ZhciwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogeworICAgIFZhbHVlKiBhcmcgPSBnZXQoYXJnVmFyKTsK
ICAgICBWYWx1ZSogbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigp
KSkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+Ojpt
aW4oKSkpKTsKICAgICBWYWx1ZSogb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCkBAIC0zMTIxLDEzICszNzE2LDE0
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5CiAgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRv
SW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hw
b2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9
CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVu
Y1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2
ND4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBt
YXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8
ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiAtMi4wKSk7CiAg
ICAgVmFsdWUqIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigt
MS4wKSk7CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzE2NCwxMyArMzc2MCwxNCBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNz
aW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb1Vp
bnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSwgc2NyYXRjaCwgY29uc3RhbnQp
OwogICAgIH0pOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0g
ICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwog
ICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdW
YXIpOwogICAgIFZhbHVlKiBtYXggPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQz
Ml90Pigtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1p
bigpKSkpOwogICAgIFZhbHVlKiBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVp
bnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6
bWluKCkpKSk7CiAgICAgVmFsdWUqIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLApAQCAtMzE4NywxMyArMzc4NCwx
NCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeQogICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRv
SW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgIH0pOwogICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgcmVzdWx0ID0gcGF0Y2hw
b2ludDsKKyAgICByZXN1bHQgPSBwdXNoKHBhdGNocG9pbnQpOwogICAgIHJldHVybiB7IH07CiB9
CiAKIHRlbXBsYXRlPD4KLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVu
Y1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYz
Mj4oRXhwcmVzc2lvblR5cGUgYXJnVmFyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CisgICAgVmFsdWUqIGFyZyA9IGdldChhcmdWYXIpOwogICAgIFZhbHVlKiBt
YXggPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxm
bG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8
ZmxvYXQ+KC0yLjApKSk7CiAgICAgVmFsdWUqIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNl
X2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PigtMS4wKSkpOwogICAgIFZhbHVlKiBv
dXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0
QW5kLCBvcmlnaW4oKSwKQEAgLTMyMzAsNyArMzgyOCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5CiAgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9VaW50NjQocGFyYW1zWzFdLmZwcigpLCBw
YXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50KTsKICAgICB9KTsKICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7
CisgICAgcmVzdWx0ID0gcHVzaChwYXRjaHBvaW50KTsKICAgICByZXR1cm4geyB9OwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCAx
ZDY2MjEwZTFiNTA0M2E5YTQxZmE2MTNmNTIyNDkzYWVlMzA3NDdhLi4yODkxZDFlNDRmM2FmMzdk
ODYxOTM0NjZmOWRjOTdlNmI4ZGQ2MTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTQwLDcgKzQwLDEzIEBACiAKIGV4dGVybiAiQyIg
dm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQjMgeworY2xhc3MgUHJvY2VkdXJl
OworfQorCituYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIE1lbW9yeUluZm9ybWF0aW9uOwogCkBA
IC00OCwxMCArNTQsMTMgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPENDYWxsSGVscGVycz4gZW1iZWRkZXJFbnRyeXBvaW50SklUOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDQ2FsbEhlbHBlcnM+IHdhc21FbnRyeXBvaW50SklUOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiB3YXNtRW50cnlwb2ludEJ5cHJvZHVjdHM7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEIzOjpQcm9jZWR1cmU+IHByb2NlZHVyZSB7IG51bGxwdHIgfTsKIH07
CiAKIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBw
YXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwg
Y29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWdu
ZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwg
TWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50
MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0cik7CiAKK3Zv
aWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoVmVjdG9yPENvZGVMb2NhdGlvbkxh
YmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYgaGFuZGxlcnMsIGNvbnN0IEludGVybmFsRnVu
Y3Rpb24qLCBjb25zdCBDb21waWxhdGlvbkNvbnRleHQmLCBMaW5rQnVmZmVyJik7CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFlfQjNK
SVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKaW5kZXggYWYy
ZmM3MmJhY2JiMzRjOGIzMzU3OGQ5MDdiMzdjNjAyNDBmYjlmYi4uNDY2YTI2MGJmZjI0OGJkYjQy
NTkzYjA0YzcwN2U1ZmI4OTFlYWFjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CQlFQbGFuLmNwcApAQCAtNjYsNiArNjYsNyBAQCBib29sIEJCUVBsYW46OnByZXBhcmVJbXBs
KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMu
cmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOworICAgIG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9u
cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJl
c2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKICAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rp
b25zLnNpemUoKSk7CiAKQEAgLTEwOSw2ICsxMTAsOSBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgVmVj
dG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiBleGNlcHRpb25I
YW5kbGVyTG9jYXRpb25zOworICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKGV4
Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMsIGZ1bmN0aW9uLmdldCgpLCBjb250ZXh0LCBsaW5rQnVm
ZmVyKTsKKwogICAgIHNpemVfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5kZXgg
KyBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CiAgICAgU2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1
bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1ttX2Z1bmN0aW9uSW5kZXhdOwogICAgIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7CkBAIC0xMTgsNyArMTIyLDcgQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+
IGVudHJ5cG9pbnQ7CiAgICAgewotICAgICAgICBSZWY8QkJRQ2FsbGVlPiBjYWxsZWUgPSBCQlFD
YWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRl
eFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5k
ZXhTcGFjZSksIFdURk1vdmUodGllclVwKSwgV1RGTW92ZSh1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cykpOworICAgICAgICBSZWY8QkJRQ2FsbGVlPiBjYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShX
VEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1v
dmUodGllclVwKSwgV1RGTW92ZSh1bmxpbmtlZFdhc21Ub1dhc21DYWxscyksIFdURk1vdmUoZnVu
Y3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwg
V1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSk7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVC
aXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwogICAgICAgICBBU1NFUlQoIW1fY29kZUJsb2Nr
LT5tX2JicUNhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSk7CiAgICAgICAgIGVudHJ5cG9pbnQgPSBj
YWxsZWUtPmVudHJ5cG9pbnQoKTsKQEAgLTE5NCwxMSArMTk4LDE1IEBAIHN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW9uPiBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24odWludDMyX3QgZnVu
Y3Rpb25JbmRlCiAgICAgYm9vbCBmb3JjZVVzaW5nQjMgPSBmYWxzZTsKICAgICBpZiAoT3B0aW9u
czo6d2ViQXNzZW1ibHlCQlFBaXJNb2RlVGhyZXNob2xkKCkgJiYgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+Y29kZVNlY3Rpb25TaXplID49IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVz
aG9sZCgpKQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOworICAgIGVsc2UgaWYgKCFtX21v
ZHVsZUluZm9ybWF0aW9uLT5tX2Z1bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlvbnMucXVpY2tHZXQo
ZnVuY3Rpb25JbmRleCkpCisgICAgICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7CisgICAgZWxzZSBp
ZiAoIU9wdGlvbnM6Ondhc21CQlFVc2VzQWlyKCkpCisgICAgICAgIGZvcmNlVXNpbmdCMyA9IHRy
dWU7CiAKLSAgICBpZiAoIWZvcmNlVXNpbmdCMyAmJiBPcHRpb25zOjp3YXNtQkJRVXNlc0Fpcigp
KQotICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIoY29u
dGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1fbW9k
dWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKLSAg
ICBlbHNlCisgICAgaWYgKGZvcmNlVXNpbmdCMykKICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVz
dWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rp
b25JbmRleCwgVUlOVDMyX01BWCwgdGllclVwKTsKKyAgICBlbHNlCisgICAgICAgIHBhcnNlQW5k
Q29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUFpcihjb250ZXh0LCBmdW5jdGlvbiwgc2ln
bmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQo
KSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXApOwogCiAgICAgaWYgKFVOTElLRUxZKCFw
YXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sg
fTsKQEAgLTIyMiwxMyArMjMwLDE1IEBAIHZvaWQgQkJRUGxhbjo6ZGlkQ29tcGxldGVDb21waWxh
dGlvbigpCiAgICAgICAgIGNvbnN0IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0
aW9uSW5kZXggKyBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CiAg
ICAgICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZUluZm9ybWF0aW9uLT5m
dW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwogICAgICAgICB7CisgICAgICAgICAgICBJbnRlcm5h
bEZ1bmN0aW9uKiBmdW5jdGlvbiA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5k
ZXhdLmdldCgpOwogICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndh
c21FbnRyeXBvaW50SklULCBudWxscHRyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpXYXNtLCBKSVRD
b21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIu
ZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsKICAgICAgICAgICAgICAgICBCYXNlOjpmYWlsKG1ha2VT
dHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBT
dHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVu
Y3Rpb25JbmRleF0tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0
aW9uPigKKyAgICAgICAgICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKG1fZXhj
ZXB0aW9uSGFuZGxlckxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24sIGNvbnRleHQs
IGxpbmtCdWZmZXIpOworICAgICAgICAgICAgZnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGlsYXRp
b24gPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgICAgICAgICBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgQkJRIGZ1
bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNw
YWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhT
cGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0
Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogICAgICAgICB9CkBAIC0yNzIsNyArMjgyLDcg
QEAgdm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBDYWxsZWVJbml0aWFsaXpl
ciYgY2FsbGJhY2spCiAKICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dh
c21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwogICAgICAg
ICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gaW50ZXJuYWxGdW5jdGlvbkluZGV4ICsgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgICAgICBSZWY8QkJR
Q2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUo
ZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3Jt
YXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZShtX3Rp
ZXJVcENvdW50c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShtX3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pKTsKKyAgICAgICAgUmVmPEJCUUNh
bGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1
bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0
aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90aWVy
VXBDb3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUobV91bmxpbmtlZFdhc21U
b1dhc21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShmdW5jdGlvbi0+c3Rh
Y2ttYXBzKSwgV1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKG1f
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxv
Y2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7
CiAKICAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmluZGV4IGRiZWZjNTRhZDc1MDA1
YTcwZDFlMWFmOTYwMDAxNzRmOGVjYmRiM2YuLmRjMDAyMjc1NjYyMjUxYjhhYjBmMDdkZWFiMDk4
NmU5N2NmZTZhMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaApA
QCAtODMsNiArODMsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiBjb21waWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRp
b25Db250ZXh0JiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgVGllclVwQ291bnQq
KTsKIAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4+IG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zOworICAgIFZlY3RvcjxWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+PiBtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnM7CiAg
ICAgSGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBE
ZWZhdWx0SGFzaDx1aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dWludDMyX3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgVmVjdG9y
PENvbXBpbGF0aW9uQ29udGV4dD4gbV9jb21waWxhdGlvbkNvbnRleHRzOwogICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+PiBtX3RpZXJVcENvdW50czsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKaW5kZXggMjFkOTdiMTNjZWUwYzY1ZTE2MzFj
NzZkMjU4OTMzMzM1MzJlZTk0MC4uYjQ2NmI3ZmNlYjgwYTNlMjcyNzk5ZjM3NWZhZDBiZGRhYWJk
OTQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkxMSW50
RXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWVSZWdpc3RyeS5oIgogI2luY2x1ZGUg
Ildhc21DYWxsaW5nQ29udmVudGlvbi5oIgogCkBAIC01Niw2ICs1NywxMiBAQCB2b2lkIENhbGxl
ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIG91dC5wcmludChtYWtlU3RyaW5n
KG1faW5kZXhPck5hbWUpKTsKIH0KIAorY29uc3QgSGFuZGxlckluZm8qIENhbGxlZTo6aGFuZGxl
ckZvckluZGV4KEluc3RhbmNlJiBpbnN0YW5jZSwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IFRhZyog
dGFnKQoreworICAgIEFTU0VSVChoYXNFeGNlcHRpb25IYW5kbGVycygpKTsKKyAgICByZXR1cm4g
SGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRleChpbnN0YW5jZSwgbV9leGNlcHRpb25IYW5kbGVy
cywgaW5kZXgsIHRhZyk7Cit9CisKIEpJVENhbGxlZTo6SklUQ2FsbGVlKFdhc206OkNvbXBpbGF0
aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQogICAgIDog
Q2FsbGVlKGNvbXBpbGF0aW9uTW9kZSkKICAgICAsIG1fZW50cnlwb2ludChXVEZNb3ZlKGVudHJ5
cG9pbnQpKQpAQCAtNjksNiArNzYsMzIgQEAgSklUQ2FsbGVlOjpKSVRDYWxsZWUoV2FzbTo6Q29t
cGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgRW50cnlwb2ludCYmIGVudHJ5cG8KIHsKIH0K
IAorTExJbnRDYWxsZWU6OkxMSW50Q2FsbGVlKHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVC
bG9jaz4gY29kZUJsb2NrLCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVm
UHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQorICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9u
TW9kZTo6TExJbnRNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKKyAgICAsIG1fY29kZUJsb2Nr
KFdURk1vdmUoY29kZUJsb2NrKSkKK3sKKyAgICBsaW5rRXhjZXB0aW9uSGFuZGxlcnMoKTsKK30K
Kwordm9pZCBMTEludENhbGxlZTo6bGlua0V4Y2VwdGlvbkhhbmRsZXJzKCkKK3sKKyAgICBpZiAo
c2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkg
eworICAgICAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBjb25z
dCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhj
ZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9l
eGNlcHRpb25IYW5kbGVyc1tpXTsKKyAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKm1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIubV90YXJnZXQpLnB0
cigpOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRh
Zz4gdGFyZ2V0OworICAgICAgICAgICAgaWYgKHVubGlua2VkSGFuZGxlci5tX3R5cGUgPT0gSGFu
ZGxlclR5cGU6OkNhdGNoKQorICAgICAgICAgICAgICAgIHRhcmdldCA9IENvZGVMb2NhdGlvbkxh
YmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVXYXNtQ2F0Y2goaW5zdHJ1
Y3Rpb24ud2lkdGg8V2FzbU9wY29kZVRyYWl0cz4oKSkuY29kZSgpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPihMTEludDo6aGFuZGxlV2FzbUNhdGNoQWxsKGluc3RydWN0aW9uLndpZHRo
PFdhc21PcGNvZGVUcmFpdHM+KCkpLmNvZGUoKSk7CisKKyAgICAgICAgICAgIGhhbmRsZXIuaW5p
dGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
IHZvaWQgTExJbnRDYWxsZWU6OnNldEVudHJ5cG9pbnQoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdh
c21FbnRyeVB0clRhZz4gZW50cnlwb2ludCkKIHsKICAgICBtX2VudHJ5cG9pbnQgPSBlbnRyeXBv
aW50OwpAQCAtMTA0LDYgKzEzNywzNiBAQCBzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4gTExJbnRD
YWxsZWU6OnJhbmdlKCkgY29uc3QKICAgICByZXR1cm4geyBudWxscHRyLCBudWxscHRyIH07CiB9
CiAKK3ZvaWQgT3B0aW1pemluZ0pJVENhbGxlZTo6bGlua0V4Y2VwdGlvbkhhbmRsZXJzKCkKK3sK
KyAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkRXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpOwor
ICAgIG1fZXhjZXB0aW9uSGFuZGxlcnMucmVzaXplVG9GaXQoY291bnQpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxl
ciA9IG1fZXhjZXB0aW9uSGFuZGxlcnNbaV07CisgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxl
ckluZm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRFeGNlcHRpb25IYW5kbGVyc1tpXTsK
KyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbG9jYXRp
b24gPSBtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbaV07CisgICAgICAgIGhhbmRsZXIuaW5p
dGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIGxvY2F0aW9uKTsKKyAgICB9CisgICAgbV91bmxpbmtl
ZEV4Y2VwdGlvbkhhbmRsZXJzLmNsZWFyKCk7CisgICAgbV9leGNlcHRpb25IYW5kbGVyTG9jYXRp
b25zLmNsZWFyKCk7Cit9CisKK2NvbnN0IFZlY3RvcjxPU1JFbnRyeVZhbHVlPiYgT3B0aW1pemlu
Z0pJVENhbGxlZTo6c3RhY2ttYXAoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KSBjb25zdAor
eworICAgIGF1dG8gaXRlciA9IG1fc3RhY2ttYXBzLmZpbmQoY2FsbFNpdGVJbmRleCk7CisgICAg
aWYgKGl0ZXIgPT0gbV9zdGFja21hcHMuZW5kKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHBhaXIg
OiBtX3N0YWNrbWFwcykgeworICAgICAgICAgICAgZGF0YUxvZyhwYWlyLmtleS5iaXRzKCksICI6
ICIpOworICAgICAgICAgICAgZm9yIChhdXRvIHZhbHVlIDogcGFpci52YWx1ZSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKHZhbHVlLCAiLCAiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiIik7
CisgICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBtX3N0YWNrbWFw
cy5lbmQoKSk7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworfQorCisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKaW5kZXggMDgxZGI3NmU0MmY5ZTQwZTQzYjkyYzk4
MmFmY2Q4Y2U5NTBiYjFlMS4uN2Q2OWQ2MjZkOGMzZjBkOTM3ZTFkMGI1MDI1MDNjOTRiNWJmMTU0
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaApAQCAtMzIsNyArMzIs
OSBAQAogI2luY2x1ZGUgIldhc21Db21waWxhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJXYXNtRm9y
bWF0LmgiCiAjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiV2Fz
bUhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCisjaW5jbHVkZSAi
V2FzbUxMSW50VGllclVwQ291bnRlci5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCkBAIC01OSw2ICs2MSwxMCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJl
Z2lzdGVycygpID0gMDsKICAgICB2aXJ0dWFsIHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPiByYW5n
ZSgpIGNvbnN0ID0gMDsKIAorICAgIGNvbnN0IEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9ySW5kZXgo
SW5zdGFuY2UmLCB1bnNpZ25lZCwgY29uc3QgVGFnKik7CisKKyAgICBib29sIGhhc0V4Y2VwdGlv
bkhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gISFtX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsg
fQorCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogICAgIHZpcnR1YWwgdm9pZCBzZXRP
U1JFbnRyeUNhbGxlZShSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+JiYpCiAgICAgewpAQCAtNjgs
NiArNzQsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
IAorICAgIHZpcnR1YWwgRnVuY3Rpb25Db2RlQmxvY2sqIGZ1bmN0aW9uQ29kZUJsb2NrKCkgY29u
c3QgeyByZXR1cm4gMDsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2Fs
bGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVl
KFdhc206OkNvbXBpbGF0aW9uTW9kZSwgc2l6ZV90LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJl
ZlB0cjxOYW1lU2VjdGlvbj4+JiYpOwpAQCAtNzUsNiArODMsOSBAQCBwcm90ZWN0ZWQ6CiBwcml2
YXRlOgogICAgIENvbXBpbGF0aW9uTW9kZSBtX2NvbXBpbGF0aW9uTW9kZTsKICAgICBJbmRleE9y
TmFtZSBtX2luZGV4T3JOYW1lOworCitwcm90ZWN0ZWQ6CisgICAgVmVjdG9yPEhhbmRsZXJJbmZv
PiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwogfTsKIAogY2xhc3MgSklUQ2FsbGVlIDogcHVibGljIENh
bGxlZSB7CkBAIC05OSw2NCArMTEwLDg2IEBAIHByaXZhdGU6CiAgICAgV2FzbTo6RW50cnlwb2lu
dCBtX2VudHJ5cG9pbnQ7CiB9OwogCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQotY2xh
c3MgT01HQ2FsbGVlIGZpbmFsIDogcHVibGljIEpJVENhbGxlZSB7CitjbGFzcyBFbWJlZGRlckVu
dHJ5cG9pbnRDYWxsZWUgZmluYWwgOiBwdWJsaWMgSklUQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPE9NR0NhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50
LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9u
Pj4mJiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxz
KQorICAgIHN0YXRpYyBSZWY8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiBjcmVhdGUoV2FzbTo6
RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBPTUdDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSks
IFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCkpKTsKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgT01HQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBz
aXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4m
JiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQot
ICAgICAgICA6IEpJVENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIFdURk1v
dmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2Fs
bHMpKQorICAgIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50
cnlwb2ludCkKKyAgICAgICAgOiBKSVRDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpFbWJl
ZGRlckVudHJ5cG9pbnRNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpKQogICAgIHsKICAgICB9CiB9
OwogCi1jbGFzcyBPTUdGb3JPU1JFbnRyeUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBKSVRDYWxsZWUg
eworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQorY2xhc3MgT3B0aW1pemluZ0pJVENh
bGxlZSA6IHB1YmxpYyBKSVRDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8T01HRm9y
T1NSRW50cnlDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6
ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYg
bmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcElu
ZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQorICAg
IGNvbnN0IFZlY3RvcjxPU1JFbnRyeVZhbHVlPiYgc3RhY2ttYXAoQ2FsbFNpdGVJbmRleCkgY29u
c3Q7CisKK3Byb3RlY3RlZDoKKyAgICBPcHRpbWl6aW5nSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0
aW9uTW9kZSBtb2RlLCBXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4
LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscywgSGFzaE1hcDxDYWxs
U2l0ZUluZGV4LCBWZWN0b3I8T1NSRW50cnlWYWx1ZT4+JiYgc3RhY2ttYXBzLCBWZWN0b3I8VW5s
aW5rZWRIYW5kbGVySW5mbz4mJiBleGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlv
bkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYmIGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlv
bnMpCisgICAgICAgIDogSklUQ2FsbGVlKG1vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4
LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKQorICAgICAgICAsIG1fc3Rh
Y2ttYXBzKFdURk1vdmUoc3RhY2ttYXBzKSkKKyAgICAgICAgLCBtX3VubGlua2VkRXhjZXB0aW9u
SGFuZGxlcnMoV1RGTW92ZShleGNlcHRpb25IYW5kbGVycykpCisgICAgICAgICwgbV9leGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeUNhbGxlZShX
VEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSwgbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRFeGNlcHRpb25IYW5kbGVycy5zaXplKCkgPT0gbV9l
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLnNpemUoKSk7CisgICAgICAgIGxpbmtFeGNlcHRpb25I
YW5kbGVycygpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUoKSBjb25zdCB7IHJldHVybiBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7IH0KLSAgICB1
aW50MzJfdCBsb29wSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2xvb3BJbmRleDsgfQotCiBwcml2
YXRlOgotICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBv
aW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0
aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJf
dCBsb29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2Fs
bHMpCi0gICAgICAgIDogSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NS
RW50cnlNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZSh1bmxpbmtlZENhbGxzKSkKLSAgICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKLSAgICAgICAgLCBtX2xvb3BJbmRleChsb29w
SW5kZXgpCisgICAgdm9pZCBsaW5rRXhjZXB0aW9uSGFuZGxlcnMoKTsKKworICAgIEhhc2hNYXA8
Q2FsbFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiBtX3N0YWNrbWFwczsKKyAgICBW
ZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gbV91bmxpbmtlZEV4Y2VwdGlvbkhhbmRsZXJzOwor
ICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4gbV9l
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zOworfTsKKworY2xhc3MgT01HQ2FsbGVlIGZpbmFsIDog
cHVibGljIE9wdGltaXppbmdKSVRDYWxsZWUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8T01H
Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRl
eCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hNYXA8Q2Fs
bFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVjdG9yPFVu
bGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRp
b25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRp
b25zKQogICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HQ2FsbGVlKFdURk1v
dmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2Fs
bHMpLCBXVEZNb3ZlKHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZN
b3ZlKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKSk7CiAgICAgfQogCi0gICAgdW5zaWduZWQg
bV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwotICAgIHVpbnQzMl90IG1fbG9vcEluZGV4Owor
cHJpdmF0ZToKKyAgICBPTUdDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNp
emVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYm
IG5hbWUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhh
c2hNYXA8Q2FsbFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywg
VmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxD
b2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5k
bGVyTG9jYXRpb25zKQorICAgICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUoV2FzbTo6Q29tcGls
YXRpb25Nb2RlOjpPTUdNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShu
YW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3Zl
KGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkK
KyAgICB7CisgICAgfQogfTsKLSNlbmRpZgogCi1jbGFzcyBFbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWUgZmluYWwgOiBwdWJsaWMgSklUQ2FsbGVlIHsKK2NsYXNzIE9NR0Zvck9TUkVudHJ5Q2FsbGVl
IGZpbmFsIDogcHVibGljIE9wdGltaXppbmdKSVRDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYm
IGVudHJ5cG9pbnQpCisgICAgc3RhdGljIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY3JlYXRl
KFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxj
b25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRy
eVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hNYXA8Q2FsbFNpdGVJbmRleCwgVmVj
dG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlcklu
Zm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKFdURk1v
dmUoZW50cnlwb2ludCkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HRm9yT1NS
RW50cnlDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGxvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxz
KSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92
ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSkpOwogICAgIH0KIAorICAgIHVuc2lnbmVkIG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX29zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemU7IH0KKyAgICB1aW50MzJfdCBsb29wSW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2xvb3BJbmRleDsgfQorCiBwcml2YXRlOgotICAgIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShX
YXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKLSAgICAgICAgOiBKSVRDYWxsZWUoV2FzbTo6
Q29tcGlsYXRpb25Nb2RlOjpFbWJlZGRlckVudHJ5cG9pbnRNb2RlLCBXVEZNb3ZlKGVudHJ5cG9p
bnQpKQorICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBv
aW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0
aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJf
dCBsb29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2Fs
bHMsIEhhc2hNYXA8Q2FsbFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNr
bWFwcywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZl
Y3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKQorICAgICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUoV2FzbTo6
Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIFdURk1vdmUoZW50cnlwb2ludCks
IGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3ZlKHN0
YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlvbkhh
bmRsZXJMb2NhdGlvbnMpKQorICAgICAgICAsIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZShv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQorICAgICAgICAsIG1fbG9vcEluZGV4KGxvb3BJbmRl
eCkKICAgICB7CiAgICAgfQorCisgICAgdW5zaWduZWQgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplOworICAgIHVpbnQzMl90IG1fbG9vcEluZGV4OwogfTsKIAotI2lmIEVOQUJMRShXRUJBU1NF
TUJMWV9CM0pJVCkKLWNsYXNzIEJCUUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBKSVRDYWxsZWUgewor
Y2xhc3MgQkJRQ2FsbGVlIGZpbmFsIDogcHVibGljIE9wdGltaXppbmdKSVRDYWxsZWUgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8QkJRQ2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYm
IGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8
TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVy
VXBDb3VudCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykK
KyAgICBzdGF0aWMgUmVmPEJCUUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRy
eXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVT
ZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291
bnQsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMsIEhhc2hN
YXA8Q2FsbFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFwcywgVmVj
dG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3RvcjxDb2Rl
TG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25IYW5kbGVy
TG9jYXRpb25zKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQkJRQ2FsbGVl
KFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHRpZXJV
cENvdW50KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBCQlFDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFt
ZSksIFdURk1vdmUodGllclVwQ291bnQpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpLCBXVEZNb3Zl
KHN0YWNrbWFwcyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKGV4Y2VwdGlv
bkhhbmRsZXJMb2NhdGlvbnMpKSk7CiAgICAgfQogCiAgICAgT01HRm9yT1NSRW50cnlDYWxsZWUq
IG9zckVudHJ5Q2FsbGVlKCkgeyByZXR1cm4gbV9vc3JFbnRyeUNhbGxlZS5nZXQoKTsgfQpAQCAt
MTc3LDggKzIxMCw4IEBAIHB1YmxpYzoKICAgICBUaWVyVXBDb3VudCogdGllclVwQ291bnQoKSB7
IHJldHVybiBtX3RpZXJVcENvdW50LmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgQkJRQ2FsbGVl
KFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxj
b25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8
VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYmIHVubGlua2VkQ2FsbHMpCi0gICAgICAgIDogSklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9u
TW9kZTo6QkJRTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSks
IFdURk1vdmUodW5saW5rZWRDYWxscykpCisgICAgQkJRQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQm
JiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRy
PE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGll
clVwQ291bnQsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMs
IEhhc2hNYXA8Q2FsbFNpdGVJbmRleCwgVmVjdG9yPE9TUkVudHJ5VmFsdWU+PiYmIHN0YWNrbWFw
cywgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+JiYgZXhjZXB0aW9uSGFuZGxlcnMsIFZlY3Rv
cjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4mJiBleGNlcHRpb25I
YW5kbGVyTG9jYXRpb25zKQorICAgICAgICA6IE9wdGltaXppbmdKSVRDYWxsZWUoV2FzbTo6Q29t
cGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92
ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShzdGFja21hcHMpLCBXVEZN
b3ZlKGV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25z
KSkKICAgICAgICAgLCBtX3RpZXJVcENvdW50KFdURk1vdmUodGllclVwQ291bnQpKQogICAgIHsK
ICAgICB9CkBAIC0yMTgsMTUgKzI1MSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgTExJbnRU
aWVyVXBDb3VudGVyJiB0aWVyVXBDb3VudGVyKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPnRpZXJV
cENvdW50ZXIoKTsgfQorICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBmdW5jdGlvbkNvZGVCbG9jaygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CiAjZW5kaWYKIAogcHJp
dmF0ZToKLSAgICBMTEludENhbGxlZShzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+
IGNvZGVCbG9jaywgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxO
YW1lU2VjdGlvbj4+JiYgbmFtZSkKLSAgICAgICAgOiBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25N
b2RlOjpMTEludE1vZGUsIGluZGV4LCBXVEZNb3ZlKG5hbWUpKQotICAgICAgICAsIG1fY29kZUJs
b2NrKFdURk1vdmUoY29kZUJsb2NrKSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
Y29kZUJsb2NrKTsKLSAgICB9CisgICAgTExJbnRDYWxsZWUoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPiwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0
cjxOYW1lU2VjdGlvbj4+JiYpOworCisgICAgdm9pZCBsaW5rRXhjZXB0aW9uSGFuZGxlcnMoKTsK
IAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKICAgICBSZWZQdHI8SklUQ2FsbGVlPiBt
X3JlcGxhY2VtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaAppbmRleCA2YzAyNmUwOGE0MDllOTk1ZDQzMThkZmIxODA0NjI2ZDBm
YWQxNzVmLi43YmYwMDFlZDkyZWZjYmFmYzBmYmM4YTUwYjRiZjYyNzI1ZDJjY2U1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaApA
QCAtMTI1LDcgKzEyNSw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCByZXN1bHRzSW5jbHVkZUk2
NCA9IGZhbHNlOwogICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKICAgICAgICAg
c2l6ZV90IGZwQXJndW1lbnRDb3VudCA9IDA7Ci0gICAgICAgIHNpemVfdCBhcmdTdGFja09mZnNl
dCA9IGhlYWRlclNpemVJbkJ5dGVzOworICAgICAgICBzaXplX3QgYXJnU3RhY2tPZmZzZXQgPSBo
ZWFkZXJTaXplSW5CeXRlcyArIHNpemVvZihSZWdpc3Rlcik7CiAgICAgICAgIGlmIChyb2xlID09
IENhbGxSb2xlOjpDYWxsZXIpCiAgICAgICAgICAgICBhcmdTdGFja09mZnNldCAtPSBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQyk7CiAKQEAgLTEzNiw3ICsxMzYsNyBAQCBwdWJsaWM6CiAgICAgICAg
IH0KICAgICAgICAgZ3BBcmd1bWVudENvdW50ID0gMDsKICAgICAgICAgZnBBcmd1bWVudENvdW50
ID0gMDsKLSAgICAgICAgc2l6ZV90IHJlc3VsdFN0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6ZUluQnl0
ZXM7CisgICAgICAgIHNpemVfdCByZXN1bHRTdGFja09mZnNldCA9IGhlYWRlclNpemVJbkJ5dGVz
ICsgc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICAgICAgaWYgKHJvbGUgPT0gQ2FsbFJvbGU6OkNhbGxl
cikKICAgICAgICAgICAgIHJlc3VsdFN0YWNrT2Zmc2V0IC09IHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1h
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IGMwY2Iz
MWI3Y2JmMDA2YWEwMTkzNmMxZjQ0NmQ2YjE4OWYwZGUxNTUuLjQ5ZGY5NTE1NDdjMDhhOTgxMTA1
MDdlZWVjMzExNjhlZjdjNWE4YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9y
bWF0LmgKQEAgLTI5LDExICsyOSwxMyBAQAogCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCiAj
aW5jbHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3Qu
aCIKICNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtTmFt
ZS5oIgogI2luY2x1ZGUgIldhc21OYW1lU2VjdGlvbi5oIgorI2luY2x1ZGUgIldhc21PU1JFbnRy
eURhdGEuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5o
IgogI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIKQEAgLTUwLDYgKzUyLDcgQEAgbmFtZXNwYWNl
IFdhc20gewogCiBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0Owogc3RydWN0IE1vZHVsZUluZm9y
bWF0aW9uOworc3RydWN0IFVubGlua2VkSGFuZGxlckluZm87CiAKIHVzaW5nIEJsb2NrU2lnbmF0
dXJlID0gY29uc3QgU2lnbmF0dXJlKjsKIApAQCAtNzYsNiArNzksMTkgQEAgaW5saW5lIGJvb2wg
aXNWYWx1ZVR5cGUoVHlwZSB0eXBlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAoraW5saW5lIEpT
U3RyaW5nKiB0eXBlVG9TdHJpbmcoVk0mIHZtLCBUeXBlS2luZCB0eXBlKQoreworI2RlZmluZSBU
WVBFX0NBU0UobWFjcm9OYW1lLCB2YWx1ZSwgYjMsIGluYywgd2FzbU5hbWUpIFwKKyAgICBjYXNl
IFR5cGVLaW5kOjptYWNyb05hbWU6IFwKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmlu
Zyh2bSwgI3dhc21OYW1lKTsgXAorCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIEZPUl9F
QUNIX1dBU01fVFlQRShUWVBFX0NBU0UpCisgICAgfQorCisjdW5kZWYgVFlQRV9DQVNFCit9CisK
IGlubGluZSBib29sIGlzU3VidHlwZShUeXBlIHN1YiwgVHlwZSBwYXJlbnQpCiB7CiAgICAgaWYg
KHN1Yi5pc051bGxhYmxlKCkgJiYgIXBhcmVudC5pc051bGxhYmxlKCkpCkBAIC0xMTUsNiArMTMx
LDcgQEAgZW51bSBjbGFzcyBFeHRlcm5hbEtpbmQgOiB1aW50OF90IHsKICAgICBUYWJsZSA9IDEs
CiAgICAgTWVtb3J5ID0gMiwKICAgICBHbG9iYWwgPSAzLAorICAgIEV4Y2VwdGlvbiA9IDQsCiB9
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQ+CkBAIC0xMjUsNiArMTQyLDcgQEAgaW5saW5lIGJv
b2wgaXNWYWxpZEV4dGVybmFsS2luZChJbnQgdmFsKQogICAgIGNhc2Ugc3RhdGljX2Nhc3Q8SW50
PihFeHRlcm5hbEtpbmQ6OlRhYmxlKToKICAgICBjYXNlIHN0YXRpY19jYXN0PEludD4oRXh0ZXJu
YWxLaW5kOjpNZW1vcnkpOgogICAgIGNhc2Ugc3RhdGljX2Nhc3Q8SW50PihFeHRlcm5hbEtpbmQ6
Okdsb2JhbCk6CisgICAgY2FzZSBzdGF0aWNfY2FzdDxJbnQ+KEV4dGVybmFsS2luZDo6RXhjZXB0
aW9uKToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAg
LTEzNCw2ICsxNTIsNyBAQCBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGludD4oRXh0ZXJuYWxL
aW5kOjpGdW5jdGlvbikgPT0gMCwgIldhc20gbmVlZHMgRnVuY3Rpbwogc3RhdGljX2Fzc2VydChz
dGF0aWNfY2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6VGFibGUpICAgID09IDEsICJXYXNtIG5lZWRz
IFRhYmxlIHRvIGhhdmUgdGhlIHZhbHVlIDEiKTsKIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
aW50PihFeHRlcm5hbEtpbmQ6Ok1lbW9yeSkgICA9PSAyLCAiV2FzbSBuZWVkcyBNZW1vcnkgdG8g
aGF2ZSB0aGUgdmFsdWUgMiIpOwogc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVy
bmFsS2luZDo6R2xvYmFsKSAgID09IDMsICJXYXNtIG5lZWRzIEdsb2JhbCB0byBoYXZlIHRoZSB2
YWx1ZSAzIik7CitzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGludD4oRXh0ZXJuYWxLaW5kOjpF
eGNlcHRpb24pICAgPT0gNCwgIldhc20gbmVlZHMgRXhjZXB0aW9uIHRvIGhhdmUgdGhlIHZhbHVl
IDQiKTsKIAogaW5saW5lIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoRXh0ZXJuYWxLaW5kIGtpbmQp
CiB7CkBAIC0xNDIsNiArMTYxLDcgQEAgaW5saW5lIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoRXh0
ZXJuYWxLaW5kIGtpbmQpCiAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OlRhYmxlOiByZXR1cm4gInRh
YmxlIjsKICAgICBjYXNlIEV4dGVybmFsS2luZDo6TWVtb3J5OiByZXR1cm4gIm1lbW9yeSI7CiAg
ICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogcmV0dXJuICJnbG9iYWwiOworICAgIGNhc2Ug
RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHJldHVybiAidGFnIjsKICAgICB9CiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gIj8iOwpAQCAtMzcyLDYgKzM5Miw4
IEBAIHN0cnVjdCBFbnRyeXBvaW50IHsKIHN0cnVjdCBJbnRlcm5hbEZ1bmN0aW9uIHsKICAgICBX
VEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVs
UHRyPFdhc21FbnRyeVB0clRhZz4gY2FsbGVlTW92ZUxvY2F0aW9uOworICAgIFN0YWNrTWFwcyBz
dGFja21hcHM7CisgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IGV4Y2VwdGlvbkhhbmRs
ZXJzOwogICAgIEVudHJ5cG9pbnQgZW50cnlwb2ludDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKaW5kZXggZWE3NWZlMmY2
YjBmOWEzZjE0ZTc5M2VkMTEyNzhlZmQwZTA5YWM3MS4uNzJmM2U2NDEzMmMxN2I5NTExYTNlYmVh
NmM2MGQwMDI0YjMyN2I1MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOCArMjgsMTAgQEAKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiSGFu
ZGxlckluZm8uaCIKICNpbmNsdWRlICJJbnN0cnVjdGlvblN0cmVhbS5oIgogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgIldhc21IYW5kbGVySW5mby5oIgogI2lu
Y2x1ZGUgIldhc21MTEludFRpZXJVcENvdW50ZXIuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTEyMCw2ICsxMjIsMTAgQEAgcHVibGljOgogICAg
IGNvbnN0IEp1bXBUYWJsZSYganVtcFRhYmxlKHVuc2lnbmVkIHRhYmxlSW5kZXgpIGNvbnN0Owog
ICAgIHVuc2lnbmVkIG51bWJlck9mSnVtcFRhYmxlcygpIGNvbnN0OwogCisgICAgc2l6ZV90IG51
bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbkhhbmRs
ZXJzLnNpemUoKTsgfQorICAgIFVubGlua2VkSGFuZGxlckluZm8mIGV4Y2VwdGlvbkhhbmRsZXIo
aW50IGluZGV4KSB7IHJldHVybiBtX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQorICAgIHZv
aWQgYWRkRXhjZXB0aW9uSGFuZGxlcihjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVy
KSB7IG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKGhhbmRsZXIpOyB9CisKIHByaXZhdGU6CiAg
ICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFt
OjpPZmZzZXQsIGludD47CiAKQEAgLTEzOSw2ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIE91dE9m
TGluZUp1bXBUYXJnZXRzIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHM7CiAgICAgTExJbnRUaWVyVXBD
b3VudGVyIG1fdGllclVwQ291bnRlcjsKICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2p1bXBUYWJs
ZXM7CisgICAgVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRleCA0ZTZiODMyMjA0MDc3NmEyNTE3
MjJlZWEyMThmNDZjMmMzOTkxMzEwLi5mYWQ3ZDc2OGViMTBmNmI1NDljN2M4OTE4YzE3NmRlNWYx
MmZkNjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Q
YXJzZXIuaApAQCAtMzcsNyArMzcsMTQgQEAgZW51bSBjbGFzcyBCbG9ja1R5cGUgewogICAgIElm
LAogICAgIEJsb2NrLAogICAgIExvb3AsCi0gICAgVG9wTGV2ZWwKKyAgICBUb3BMZXZlbCwKKyAg
ICBUcnksCisgICAgQ2F0Y2gsCit9OworCitlbnVtIGNsYXNzIENhdGNoS2luZCB7CisgICAgQ2F0
Y2gsCisgICAgQ2F0Y2hBbGwsCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNsb3NpbmdTdGFj
aywgdHlwZW5hbWUgTmV3U3RhY2s+CkBAIC0xNDcsNiArMTU0LDcgQEAgcHJpdmF0ZToKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluZGV4Rm9yTG9jYWwodWludDMy
X3QmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluZGV4Rm9y
R2xvYmFsKHVpbnQzMl90Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
cGFyc2VGdW5jdGlvbkluZGV4KHVpbnQzMl90Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gcGFyc2VFeGNlcHRpb25JbmRleCh1aW50MzJfdCYpOwogICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQnJhbmNoVGFyZ2V0KHVpbnQzMl90Jik7CiAK
ICAgICBzdHJ1Y3QgVGFibGVJbml0SW1tZWRpYXRlcyB7CkBAIC0yMTEsNiArMjE5LDEyIEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgbV9sb29wSW5kZXggeyAwIH07CiB9OwogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb250cm9sVHlwZT4KK3N0YXRpYyBib29sIGlzVHJ5T3JDYXRjaChDb250cm9sVHlw
ZSYgZGF0YSkKK3sKKyAgICByZXR1cm4gQ29udHJvbFR5cGU6OmlzVHJ5KGRhdGEpIHx8IENvbnRy
b2xUeXBlOjppc0NhdGNoKGRhdGEpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0Pgog
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQs
IGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQog
ICAgIDogUGFyc2VyKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoKQpAQCAtNTc1LDYgKzU4
OSwxNiBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUZ1bmN0aW9uSW5kZXgo
dWludDMyX3QmIHJlc3VsdEluZGV4KSAtPiBQYXJ0aQogICAgIHJldHVybiB7IH07CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZUV4Y2VwdGlvbkluZGV4KHVpbnQzMl90JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICB1aW50MzJfdCBleGNlcHRpb25JbmRleDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihleGNlcHRpb25JbmRleCksICJjYW4ndCBwYXJzZSBleGNlcHRpb24gaW5k
ZXgiKTsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGV4Y2VwdGlvbkluZGV4ID49IG1faW5m
by5leGNlcHRpb25JbmRleFNwYWNlU2l6ZSgpLCAiZXhjZXB0aW9uIGluZGV4ICIsIGV4Y2VwdGlv
bkluZGV4LCAiIGlzIGludmFsaWQsIGxpbWl0IGlzICIsIG1faW5mby5leGNlcHRpb25JbmRleFNw
YWNlU2l6ZSgpKTsKKyAgICByZXN1bHQgPSBleGNlcHRpb25JbmRleDsKKyAgICByZXR1cm4geyB9
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgogYXV0byBGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VCcmFuY2hUYXJnZXQodWludDMyX3QmIHJlc3VsdFRhcmdldCkgLT4gUGFy
dGlhbFJlc3VsdAogewpAQCAtMTMzMyw2ICsxMzU3LDEzMSBAQCBGT1JfRUFDSF9XQVNNX01FTU9S
WV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKKyAg
ICBjYXNlIFRyeTogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VX
ZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQi
KTsKKworICAgICAgICBCbG9ja1NpZ25hdHVyZSBpbmxpbmVTaWduYXR1cmU7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlQmxvY2tTaWduYXR1cmUobV9pbmZvLCBpbmxpbmVTaWdu
YXR1cmUpLCAiY2FuJ3QgZ2V0IHRyeSdzIHNpZ25hdHVyZSIpOworCisgICAgICAgIFdBU01fVkFM
SURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIDwgaW5saW5lU2lnbmF0dXJl
LT5hcmd1bWVudENvdW50KCksICJUb28gZmV3IGFyZ3VtZW50cyBvbiBzdGFjayBmb3IgdHJ5IGJs
b2NrLiBUcnllIGV4cGVjdHMgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICIs
IGJ1dCBvbmx5ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB3ZXJlIHByZXNlbnQuIFRy
eSBibG9jayBoYXMgc2lnbmF0dXJlOiAiLCBpbmxpbmVTaWduYXR1cmUtPnRvU3RyaW5nKCkpOwor
ICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBpbmxp
bmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrW29mZnNldCArIGldLnR5
cGUoKSAhPSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiVHJ5IGV4cGVjdHMgdGhlIGFy
Z3VtZW50IGF0IGluZGV4IiwgaSwgIiB0byBiZSAiLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50
KGkpLmtpbmQsICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIsIG1fZXhwcmVzc2lvblN0YWNrW2ld
LnR5cGUoKS5raW5kKTsKKworICAgICAgICBpbnQ2NF90IG9sZFNpemUgPSBtX2V4cHJlc3Npb25T
dGFjay5zaXplKCk7CisgICAgICAgIFN0YWNrIG5ld1N0YWNrOworICAgICAgICBDb250cm9sVHlw
ZSBjb250cm9sOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRUcnkoaW5saW5l
U2lnbmF0dXJlLCBtX2V4cHJlc3Npb25TdGFjaywgY29udHJvbCwgbmV3U3RhY2spKTsKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChvbGRTaXplLCBvbGRTaXplIC0gbV9leHByZXNzaW9uU3RhY2suc2l6
ZSgpID09IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICAgICAgQVNTRVJU
KG5ld1N0YWNrLnNpemUoKSA9PSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CisK
KyAgICAgICAgbV9jb250cm9sU3RhY2suYXBwZW5kKHsgV1RGTW92ZShtX2V4cHJlc3Npb25TdGFj
ayksIHsgfSwgV1RGTW92ZShjb250cm9sKSB9KTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2sg
PSBXVEZNb3ZlKG5ld1N0YWNrKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBj
YXNlIENhdGNoOiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIp
OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09
IDEsICJjYW4ndCB1c2UgY2F0Y2ggYmxvY2sgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9u
Iik7CisKKyAgICAgICAgdWludDMyX3QgZXhjZXB0aW9uSW5kZXg7CisgICAgICAgIFdBU01fRkFJ
TF9JRl9IRUxQRVJfRkFJTFMocGFyc2VFeGNlcHRpb25JbmRleChleGNlcHRpb25JbmRleCkpOwor
ICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1faW5mby5zaWduYXR1cmVJ
bmRleEZyb21FeGNlcHRpb25JbmRleFNwYWNlKGV4Y2VwdGlvbkluZGV4KTsKKyAgICAgICAgY29u
c3QgU2lnbmF0dXJlJiBleGNlcHRpb25TaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKKworICAgICAgICBDb250cm9sRW50cnkmIGNvbnRyb2xFbnRy
eSA9IG1fY29udHJvbFN0YWNrLmxhc3QoKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9J
RighaXNUcnlPckNhdGNoKGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSksICJjYXRjaCBibG9jayBp
c24ndCBhc3NvY2lhdGVkIHRvIGEgdHJ5Iik7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJf
RkFJTFModW5pZnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSk7CisKKyAgICAgICAgUmVzdWx0
TGlzdCByZXN1bHRzOworICAgICAgICBTdGFjayBwcmVDYXRjaFN0YWNrOworICAgICAgICBtX2V4
cHJlc3Npb25TdGFjay5zd2FwKHByZUNhdGNoU3RhY2spOworICAgICAgICBXQVNNX1RSWV9BRERf
VE9fQ09OVEVYVChhZGRDYXRjaChleGNlcHRpb25JbmRleCwgZXhjZXB0aW9uU2lnbmF0dXJlLCBw
cmVDYXRjaFN0YWNrLCBjb250cm9sRW50cnkuY29udHJvbERhdGEsIHJlc3VsdHMpKTsKKworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09
IHJlc3VsdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2Vw
dGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQo
aSksIHJlc3VsdHNbaV0pOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGNhc2Ug
Q2F0Y2hBbGw6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2Vi
QXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7
CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2NvbnRyb2xTdGFjay5zaXplKCkgPT0g
MSwgImNhbid0IHVzZSBjYXRjaCBibG9jayBhdCB0aGUgdG9wLWxldmVsIG9mIGEgZnVuY3Rpb24i
KTsKKworICAgICAgICBDb250cm9sRW50cnkmIGNvbnRyb2xFbnRyeSA9IG1fY29udHJvbFN0YWNr
Lmxhc3QoKTsKKworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1RyeU9yQ2F0Y2go
Y29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSwgImNhdGNoIGJsb2NrIGlzbid0IGFzc29jaWF0ZWQg
dG8gYSB0cnkiKTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeShjb250
cm9sRW50cnkuY29udHJvbERhdGEpKTsKKworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7Cisg
ICAgICAgIFN0YWNrIHByZUNhdGNoU3RhY2s7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3
YXAocHJlQ2F0Y2hTdGFjayk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENh
dGNoQWxsKHByZUNhdGNoU3RhY2ssIGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0KKworICAgIGNhc2UgRGVsZWdhdGU6IHsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3
YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihtX2NvbnRyb2xTdGFjay5zaXplKCkgPT0gMSwgImNhbid0IHVzZSBkZWxlZ2F0ZSBh
dCB0aGUgdG9wLWxldmVsIG9mIGEgZnVuY3Rpb24iKTsKKworICAgICAgICB1aW50MzJfdCB0YXJn
ZXQ7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VCcmFuY2hUYXJnZXQo
dGFyZ2V0KSk7CisKKyAgICAgICAgQ29udHJvbEVudHJ5IGNvbnRyb2xFbnRyeSA9IG1fY29udHJv
bFN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRy
b2xUeXBlOjppc1RyeShjb250cm9sRW50cnkuY29udHJvbERhdGEpLCAiZGVsZWdhdGUgaXNuJ3Qg
YXNzb2NpYXRlZCB0byBhIHRyeSIpOworCisgICAgICAgIENvbnRyb2xUeXBlJiB0YXJnZXREYXRh
ID0gbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29u
dHJvbERhdGE7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjpp
c1RyeSh0YXJnZXREYXRhKSAmJiAhQ29udHJvbFR5cGU6OmlzVG9wTGV2ZWwodGFyZ2V0RGF0YSks
ICJkZWxlZ2F0ZSB0YXJnZXQgaXNuJ3QgYSB0cnkgb3IgdGhlIHRvcCBsZXZlbCBibG9jayIpOwor
CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZERlbGVnYXRlKHRhcmdldERhdGEs
IGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVS
X0ZBSUxTKHVuaWZ5KGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworICAgICAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVChlbmRCbG9jayhjb250cm9sRW50cnksIG1fZXhwcmVzc2lvblN0YWNr
KSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoY29udHJvbEVudHJ5LmVuY2xvc2Vk
RXhwcmVzc2lvblN0YWNrKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNl
IFRocm93OiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFz
c2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOwor
CisgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4OworICAgICAgICBXQVNNX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhjZXB0aW9uSW5kZXgpKTsKKyAgICAg
ICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8uc2lnbmF0dXJlSW5kZXhG
cm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRleCk7CisgICAgICAgIGNvbnN0IFNp
Z25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChz
aWduYXR1cmVJbmRleCk7CisKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJl
c3Npb25TdGFjay5zaXplKCkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAi
VG9vIGZldyBhcmd1bWVudHMgb24gc3RhY2sgZm9yIHRoZSBleGNlcHRpb24gYmVpbmcgdGhyb3du
LiBUaGUgZXhjZXB0aW9uIGV4cGVjdHMgIiwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKSwgIiwgYnV0IG9ubHkgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHdlcmUgcHJl
c2VudC4gRXhjZXB0aW9uIGhhcyBzaWduYXR1cmU6ICIsIGV4Y2VwdGlvblNpZ25hdHVyZS50b1N0
cmluZygpKTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9leHByZXNzaW9uU3RhY2suc2l6
ZSgpIC0gZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiBhcmdzOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdz
LnRyeVJlc2VydmVDYXBhY2l0eShleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKSwg
ImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHRocm93J3MgIiwgZXhjZXB0aW9uU2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkg
eworICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9uIGFyZyA9IG1fZXhwcmVzc2lvblN0YWNrLmF0
KG9mZnNldCArIGkpOworICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihhcmcudHlw
ZSgpICE9IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudChpKSwgIlRoZSBleGNlcHRpb24gYmVp
bmcgdGhyb3duIGV4cGVjdHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4ICIsIGksICIgdG8gYmUgIiwg
ZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkpLmtpbmQsICIgYnV0IGFyZ3VtZW50IGhhcyB0
eXBlICIsIGFyZy50eXBlKCkua2luZCk7CisgICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVu
ZChhcmcpOworICAgICAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVlRnJvbVN0YWNrKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc2hyaW5rKG9mZnNldCk7CisKKyAg
ICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkVGhyb3coZXhjZXB0aW9uSW5kZXgsIGFy
Z3MsIG1fZXhwcmVzc2lvblN0YWNrKSk7CisgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAx
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGNhc2UgUmV0aHJvdzogeworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlv
bnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKworICAgICAgICB1aW50
MzJfdCB0YXJnZXQ7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VCcmFu
Y2hUYXJnZXQodGFyZ2V0KSk7CisKKyAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRy
b2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0XS5jb250cm9sRGF0YTsK
KyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2go
ZGF0YSksICJyZXRocm93IGRvZXNuJ3QgcmVmZXIgdG8gYSBjYXRjaCBibG9jayIpOworCisgICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFJldGhyb3codGFyZ2V0LCBkYXRhKSk7Cisg
ICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKwogICAgIGNhc2UgQnI6CiAgICAgY2FzZSBCcklmOiB7CiAgICAgICAgIHVpbnQzMl90IHRh
cmdldDsKQEAgLTE0ODcsNiArMTYzNiw2NiBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKKyAgICBjYXNlIENhdGNoOiB7CisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBl
eGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlv
bkluZGV4OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9u
SW5kZXgoZXhjZXB0aW9uSW5kZXgpKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXggPSBtX2luZm8uc2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNl
cHRpb25JbmRleCk7CisgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJl
ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisKKyAgICAgICAg
aWYgKG1fdW5yZWFjaGFibGVCbG9ja3MgPiAxKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgICAgICBDb250cm9sRW50cnkmIGRhdGEgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisgICAg
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzVHJ5T3JDYXRjaChkYXRhLmNvbnRyb2xEYXRh
KSwgImNhdGNoIGJsb2NrIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0cnkiKTsKKworICAgICAgICBt
X3VucmVhY2hhYmxlQmxvY2tzID0gMDsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSB7IH07
CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb25TaWdu
YXR1cmUsIGRhdGEuY29udHJvbERhdGEsIHJlc3VsdHMpKTsKKworICAgICAgICBSRUxFQVNFX0FT
U0VSVChleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IHJlc3VsdHMuc2l6ZSgp
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0
cnVjdEFuZEFwcGVuZChleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSksIHJlc3VsdHNbaV0p
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGNhc2UgQ2F0Y2hBbGw6IHsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRp
b25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAgaWYg
KG1fdW5yZWFjaGFibGVCbG9ja3MgPiAxKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
ICAgICBDb250cm9sRW50cnkmIGRhdGEgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisgICAgICAg
IG1fdW5yZWFjaGFibGVCbG9ja3MgPSAwOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IHsg
fTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNUcnlPckNhdGNoKGRhdGEuY29u
dHJvbERhdGEpLCAiY2F0Y2ggYmxvY2sgaXNuJ3QgYXNzb2NpYXRlZCB0byBhIHRyeSIpOworICAg
ICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoZGF0
YS5jb250cm9sRGF0YSkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGNhc2Ug
RGVsZWdhdGU6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2Vi
QXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7
CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2NvbnRyb2xTdGFjay5zaXplKCkgPT0g
MSwgImNhbid0IHVzZSBkZWxlZ2F0ZSBhdCB0aGUgdG9wLWxldmVsIG9mIGEgZnVuY3Rpb24iKTsK
KworICAgICAgICB1aW50MzJfdCB0YXJnZXQ7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJf
RkFJTFMocGFyc2VCcmFuY2hUYXJnZXQodGFyZ2V0KSk7CisKKyAgICAgICAgQ29udHJvbEVudHJ5
IGNvbnRyb2xFbnRyeSA9IG1fY29udHJvbFN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIFdBU01f
VkFMSURBVE9SX0ZBSUxfSUYoIUNvbnRyb2xUeXBlOjppc1RyeShjb250cm9sRW50cnkuY29udHJv
bERhdGEpLCAiZGVsZWdhdGUgaXNuJ3QgYXNzb2NpYXRlZCB0byBhIHRyeSIpOworCisgICAgICAg
IENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgp
IC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYoIUNvbnRyb2xUeXBlOjppc1RyeShkYXRhKSAmJiAhQ29udHJvbFR5cGU6OmlzVG9wTGV2ZWwo
ZGF0YSksICJkZWxlZ2F0ZSB0YXJnZXQgaXNuJ3QgYSB0cnkgYmxvY2siKTsKKworICAgICAgICBX
QVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGREZWxlZ2F0ZVRvVW5yZWFjaGFibGUoZGF0YSwgY29u
dHJvbEVudHJ5LmNvbnRyb2xEYXRhKSk7CisgICAgICAgIFN0YWNrIGVtcHR5U3RhY2s7CisgICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEVuZFRvVW5yZWFjaGFibGUoY29udHJvbEVu
dHJ5LCBlbXB0eVN0YWNrKSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoY29udHJv
bEVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKICAgICBjYXNlIEVuZDogewogICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJsb2NrcyA9
PSAxKSB7CiAgICAgICAgICAgICBDb250cm9sRW50cnkgZGF0YSA9IG1fY29udHJvbFN0YWNrLnRh
a2VMYXN0KCk7CkBAIC0xNDk1LDggKzE3MDQsMTAgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAg
ICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSBXVEZNb3ZlKGRhdGEuZWxzZUJsb2NrU3Rh
Y2spOwogICAgICAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFModW5pZnkoZGF0
YS5jb250cm9sRGF0YSkpOwogICAgICAgICAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhU
KGVuZEJsb2NrKGRhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSk7Ci0gICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbmRUb1VucmVhY2hh
YmxlKGRhdGEpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3RhY2sg
ZW1wdHlTdGFjazsKKyAgICAgICAgICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRF
bmRUb1VucmVhY2hhYmxlKGRhdGEsIGVtcHR5U3RhY2spKTsKKyAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc3dhcChkYXRhLmVuY2xvc2VkRXhwcmVzc2lvblN0
YWNrKTsKICAgICAgICAgfQpAQCAtMTUwNCw2ICsxNzE1LDEwIEBAIGF1dG8gRnVuY3Rpb25QYXJz
ZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3Vs
dAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAorICAgIGNhc2UgVHJ5OgorICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwg
Indhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7
CisKICAgICBjYXNlIExvb3A6CiAgICAgY2FzZSBJZjoKICAgICBjYXNlIEJsb2NrOiB7CkBAIC0x
NTc2LDYgKzE3OTEsMTYgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJl
YWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCisgICAgY2FzZSBSZXRocm93OiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25z
IGFyZSBub3QgZW5hYmxlZCIpOworICAgICAgICB1aW50MzJfdCB0YXJnZXQ7CisgICAgICAgIFdB
U01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VCcmFuY2hUYXJnZXQodGFyZ2V0KSk7CisKKyAg
ICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5z
aXplKCkgLSAxIC0gdGFyZ2V0XS5jb250cm9sRGF0YTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRighQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSksICJyZXRocm93IGRvZXNuJ3Qg
cmVmZXIgdG8gYSBjYXRjaCBibG9jayIpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwog
ICAgIGNhc2UgQnI6CiAgICAgY2FzZSBCcklmOiB7CiAgICAgICAgIHVpbnQzMl90IHRhcmdldDsK
QEAgLTE1ODMsNiArMTgwOCwxNSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJz
ZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKKyAgICBjYXNlIFRocm93OiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAid2FzbSBleGNlcHRp
b25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4
OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgo
ZXhjZXB0aW9uSW5kZXgpKTsKKworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIGNh
c2UgSTMyQ29uc3Q6IHsKICAgICAgICAgaW50MzJfdCB1bnVzZWQ7CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50MzIodW51c2VkKSwgImNhbid0IGdldCBpbW1lZGlhdGUg
Zm9yICIsIG1fY3VycmVudE9wY29kZSwgIiBpbiB1bnJlYWNoYWJsZSBjb250ZXh0Iik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hNTdiY2Y0OWJiMmNlYTE3NTBmZmI2YmYxZTU1YTc4MjNkZjEzNjIyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcApAQCAt
MCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUhhbmRsZXJJbmZvLmgiCisK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKKyNp
bmNsdWRlICJXYXNtVGFnLmgiCisKK25hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIFdhc20gewor
Cit2b2lkIEhhbmRsZXJJbmZvOjppbml0aWFsaXplKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8m
IHVubGlua2VkSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IGxhYmVsKQoreworICAgIG1fdHlwZSA9IHVubGlua2VkSW5mby5tX3R5cGU7CisgICAgbV9z
dGFydCA9IHVubGlua2VkSW5mby5tX3N0YXJ0OworICAgIG1fZW5kID0gdW5saW5rZWRJbmZvLm1f
ZW5kOworICAgIG1fdGFyZ2V0ID0gdW5saW5rZWRJbmZvLm1fdGFyZ2V0OworICAgIG1fdHJ5RGVw
dGggPSB1bmxpbmtlZEluZm8ubV90cnlEZXB0aDsKKyAgICBtX25hdGl2ZUNvZGUgPSBsYWJlbDsK
KworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBIYW5kbGVyVHlwZTo6Q2F0Y2g6Cisg
ICAgICAgIG1fdGFnID0gdW5saW5rZWRJbmZvLm1fZXhjZXB0aW9uSW5kZXhPckRlbGVnYXRlVGFy
Z2V0OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSGFuZGxlclR5cGU6OkNhdGNoQWxsOgor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgSGFuZGxlclR5cGU6OkRlbGVnYXRlOgorICAgICAg
ICBtX2RlbGVnYXRlVGFyZ2V0ID0gdW5saW5rZWRJbmZvLm1fZXhjZXB0aW9uSW5kZXhPckRlbGVn
YXRlVGFyZ2V0OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2NvbnN0IEhhbmRsZXJJbmZv
KiBIYW5kbGVySW5mbzo6aGFuZGxlckZvckluZGV4KEluc3RhbmNlJiBpbnN0YW5jZSwgY29uc3Qg
VmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhlcHRpb25IYW5kbGVycywgdW5zaWduZWQgaW5kZXgsIGNv
bnN0IFdhc206OlRhZyogZXhjZXB0aW9uVGFnKQoreworICAgIGJvb2wgZGVsZWdhdGluZyA9IGZh
bHNlOworICAgIHVuc2lnbmVkIGRlbGVnYXRlVGFyZ2V0ID0gMDsKKyAgICBmb3IgKGF1dG8mIGhh
bmRsZXIgOiBleGVwdGlvbkhhbmRsZXJzKSB7CisgICAgICAgIC8vIEhhbmRsZXJzIGFyZSBvcmRl
cmVkIGlubmVybW9zdCBmaXJzdCwgc28gdGhlIGZpcnN0IGhhbmRsZXIgd2UgZW5jb3VudGVyCisg
ICAgICAgIC8vIHRoYXQgY29udGFpbnMgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIHRoZSBjb3JyZWN0
IGhhbmRsZXIgdG8gdXNlLgorICAgICAgICAvLyBUaGlzIGluZGV4IHVzZWQgaXMgZWl0aGVyIHRo
ZSBCeXRlY29kZU9mZnNldCBvciBhIENhbGxTaXRlSW5kZXguCisgICAgICAgIGlmIChoYW5kbGVy
Lm1fc3RhcnQgPD0gaW5kZXggJiYgaGFuZGxlci5tX2VuZCA+IGluZGV4KSB7CisgICAgICAgICAg
ICBpZiAoZGVsZWdhdGluZykgeworICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLm1fdHJ5RGVw
dGggIT0gZGVsZWdhdGVUYXJnZXQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIGRlbGVnYXRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgYm9vbCBtYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgc3dpdGNoIChoYW5kbGVyLm1f
dHlwZSkgeworICAgICAgICAgICAgY2FzZSBIYW5kbGVyVHlwZTo6Q2F0Y2g6CisgICAgICAgICAg
ICAgICAgbWF0Y2ggPSBleGNlcHRpb25UYWcgJiYgaW5zdGFuY2UudGFnKGhhbmRsZXIubV90YWcp
ID09ICpleGNlcHRpb25UYWc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEhhbmRsZXJUeXBlOjpDYXRjaEFsbDoKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEhhbmRsZXJUeXBlOjpE
ZWxlZ2F0ZToKKyAgICAgICAgICAgICAgICBkZWxlZ2F0aW5nID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBkZWxlZ2F0ZVRhcmdldCA9IGhhbmRsZXIubV9kZWxlZ2F0ZVRhcmdldDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFtYXRjaCkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgcmV0dXJuICZoYW5kbGVy
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5mby5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMy
NTExOTNkMjEzMTc5ZWJkZTk5NTQ0YzI1M2VkNDk4OWQyZjY0M2UKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaApAQCAtMCwwICsx
LDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ29kZUxv
Y2F0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIEpTQyB7Citu
YW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIEluc3RhbmNlOworY2xhc3MgVGFnOworCitlbnVtIGNs
YXNzIEhhbmRsZXJUeXBlIHsKKyAgICBDYXRjaCA9IDAsCisgICAgQ2F0Y2hBbGwgPSAxLAorICAg
IERlbGVnYXRlID0gMiwKK307CisKK3N0cnVjdCBIYW5kbGVySW5mb0Jhc2UgeworICAgIEhhbmRs
ZXJUeXBlIG1fdHlwZTsKKyAgICB1aW50MzJfdCBtX3N0YXJ0OworICAgIHVpbnQzMl90IG1fZW5k
OworICAgIHVpbnQzMl90IG1fdGFyZ2V0OworICAgIHVpbnQzMl90IG1fdHJ5RGVwdGg7CisgICAg
dWludDMyX3QgbV9leGNlcHRpb25JbmRleE9yRGVsZWdhdGVUYXJnZXQ7Cit9OworCitzdHJ1Y3Qg
VW5saW5rZWRIYW5kbGVySW5mbyA6IHB1YmxpYyBIYW5kbGVySW5mb0Jhc2UgeworICAgIFVubGlu
a2VkSGFuZGxlckluZm8oKQorICAgIHsKKyAgICB9CisKKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZv
KEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgZW5kLCB1
aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHRyeURlcHRoLCB1aW50MzJfdCBleGNlcHRpb25JbmRl
eE9yRGVsZWdhdGVUYXJnZXQpCisgICAgeworICAgICAgICBtX3R5cGUgPSBoYW5kbGVyVHlwZTsK
KyAgICAgICAgbV9zdGFydCA9IHN0YXJ0OworICAgICAgICBtX2VuZCA9IGVuZDsKKyAgICAgICAg
bV90YXJnZXQgPSB0YXJnZXQ7CisgICAgICAgIG1fdHJ5RGVwdGggPSB0cnlEZXB0aDsKKyAgICAg
ICAgbV9leGNlcHRpb25JbmRleE9yRGVsZWdhdGVUYXJnZXQgPSBleGNlcHRpb25JbmRleE9yRGVs
ZWdhdGVUYXJnZXQ7CisgICAgfQorfTsKKworc3RydWN0IEhhbmRsZXJJbmZvIDogcHVibGljIEhh
bmRsZXJJbmZvQmFzZSB7CisgICAgc3RhdGljIGNvbnN0IEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9y
SW5kZXgoSW5zdGFuY2UmLCBjb25zdCBWZWN0b3I8SGFuZGxlckluZm8+JiBleGVwdGlvbkhhbmRs
ZXJzLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgV2FzbTo6VGFnKiBleGNlcHRpb25UYWcpOworCisg
ICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4pOworCisgICAgdW5zaWduZWQgdGFn
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSGFuZGxlclR5cGU6OkNh
dGNoKTsKKyAgICAgICAgcmV0dXJuIG1fdGFnOworICAgIH0KKworICAgIHVuc2lnbmVkIGRlbGVn
YXRlVGFyZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSGFuZGxl
clR5cGU6OkRlbGVnYXRlKTsKKyAgICAgICAgcmV0dXJuIG1fZGVsZWdhdGVUYXJnZXQ7CisgICAg
fQorCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1f
bmF0aXZlQ29kZTsKKworcHJpdmF0ZToKKyAgICB1bmlvbiB7CisgICAgICAgIHVuc2lnbmVkIG1f
dGFnOworICAgICAgICB1bnNpZ25lZCBtX2RlbGVnYXRlVGFyZ2V0OworICAgIH07Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKaW5kZXggZmZk
NzVjOGQwYzhmOWFiNzMxZjdjYjQ5YTg0MmQ5MDY1YjgyODNiNi4uYWIwN2ZmYTc2MjNhMzQ1MDkw
OTg1ZWU2ZWFjNGVlZmU5MjA4ODZjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtSW5zdGFuY2UuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIK
ICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0
dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21UYWcuaCIKICNpbmNsdWRlIDx3dGYvQ2hlY2tl
ZEFyaXRobWV0aWMuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTkw
LDcgKzkxLDkgQEAgUmVmPEluc3RhbmNlPiBJbnN0YW5jZTo6Y3JlYXRlKENvbnRleHQqIGNvbnRl
eHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCBFbnRyeUZyYW0KICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyAoTm90TnVsbCwgZmFzdE1hbGxvYyhhbGxvY2F0aW9uU2l6ZShtb2R1bGUtPm1vZHVsZUlu
Zm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpLCBtb2R1bGUtPm1vZHVsZUluZm9ybWF0
aW9uKCkudGFibGVDb3VudCgpKSkpIEluc3RhbmNlKGNvbnRleHQsIFdURk1vdmUobW9kdWxlKSwg
cG9pbnRlclRvVG9wRW50cnlGcmFtZSwgcG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCwgV1RGTW92
ZShzdG9yZVRvcENhbGxGcmFtZSkpKTsKIH0KIAotSW5zdGFuY2U6On5JbnN0YW5jZSgpIHsgfQor
SW5zdGFuY2U6On5JbnN0YW5jZSgpCit7Cit9CiAKIHNpemVfdCBJbnN0YW5jZTo6ZXh0cmFNZW1v
cnlBbGxvY2F0ZWQoKSBjb25zdAogewpAQCAtMjk3LDYgKzMwMCwxNiBAQCB2b2lkIEluc3RhbmNl
OjpsaW5rR2xvYmFsKHVuc2lnbmVkIGksIFJlZjxHbG9iYWw+JiYgZ2xvYmFsKQogICAgIG1fbGlu
a2VkR2xvYmFscy5zZXQoaSwgV1RGTW92ZShnbG9iYWwpKTsKIH0KIAordm9pZCBJbnN0YW5jZTo6
YWRkVGFnKGNvbnN0IFRhZyYgdGFnKQoreworICAgIG1fdGFncy5hcHBlbmQoUmVmIHsgdGFnIH0p
OworfQorCit2b2lkIEluc3RhbmNlOjphZGRUYWcoUmVmPFRhZz4mJiB0YWcpCit7CisgICAgbV90
YWdzLmFwcGVuZChXVEZNb3ZlKHRhZykpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtSW5zdGFuY2UuaAppbmRleCA2MGUxNGNiNWFjMDY1ODI0NDM0Mzc4MDlkNTQ2MzNl
ZGY3MWNjOGI5Li5jMmFhNTM0MDE1NmI0Y2I5NjdlYzNmZTYyZDEzZTJhZDNmZDdlYmY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApAQCAtMjEwLDYgKzIxMCwx
MCBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKICAg
ICB9CiAKKyAgICB2b2lkIGFkZFRhZyhjb25zdCBUYWcmKTsKKyAgICB2b2lkIGFkZFRhZyhSZWY8
VGFnPiYmKTsKKyAgICBjb25zdCBUYWcmIHRhZyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAq
bV90YWdzW2ldOyB9CisKIHByaXZhdGU6CiAgICAgSW5zdGFuY2UoQ29udGV4dCosIFJlZjxNb2R1
bGU+JiYsIEVudHJ5RnJhbWUqKiwgdm9pZCoqLCBTdG9yZVRvcENhbGxGcmFtZUNhbGxiYWNrJiYp
OwogICAgIApAQCAtMjM3LDYgKzI0MSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDx1aW50MzJf
dCwgUmVmPEdsb2JhbD4sIEludEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9saW5rZWRHbG9iYWxzOwogICAgIEJpdFZlY3RvciBt
X3Bhc3NpdmVFbGVtZW50czsKICAgICBCaXRWZWN0b3IgbV9wYXNzaXZlRGF0YVNlZ21lbnRzOwor
ICAgIFZlY3RvcjxSZWZQdHI8Y29uc3QgVGFnPj4gbV90YWdzOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21MTEludEdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRHZW5lcmF0b3IuY3BwCmluZGV4IDgxYTVjZGJjYWUzMjg2YmUzMmNhNDkwZGU0NWVlM2FmZjc4
MTk4NTYuLjM1NzY2NmJkYzNkNjVkZTQ1NzBmZDU1ZTg5OWM2NmVlZDEyODNjMTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAt
NjIsOCArNjIsMjYgQEAgcHVibGljOgogICAgICAgICBSZWY8TGFiZWw+IG1fYWx0ZXJuYXRlOwog
ICAgIH07CiAKLSAgICBzdHJ1Y3QgQ29udHJvbFR5cGUgOiBwdWJsaWMgVmFyaWFudDxDb250cm9s
TG9vcCwgQ29udHJvbFRvcExldmVsLCBDb250cm9sQmxvY2ssIENvbnRyb2xJZj4gewotICAgICAg
ICB1c2luZyBCYXNlID0gVmFyaWFudDxDb250cm9sTG9vcCwgQ29udHJvbFRvcExldmVsLCBDb250
cm9sQmxvY2ssIENvbnRyb2xJZj47CisgICAgc3RydWN0IENvbnRyb2xUcnkgeworICAgICAgICBS
ZWY8TGFiZWw+IG1fdHJ5OworICAgICAgICB1bnNpZ25lZCBtX3RyeURlcHRoOworICAgIH07CisK
KyAgICBzdHJ1Y3QgQ29udHJvbENhdGNoIHsKKyAgICAgICAgQ2F0Y2hLaW5kIG1fa2luZDsKKyAg
ICAgICAgUmVmPExhYmVsPiBtX3RyeVN0YXJ0OworICAgICAgICBSZWY8TGFiZWw+IG1fdHJ5RW5k
OworICAgICAgICB1bnNpZ25lZCBtX3RyeURlcHRoOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9leGNlcHRpb247CisgICAgfTsKKworICAgIHN0cnVjdCBDYXRjaFJld3JpdGVJbmZvIHsKKyAg
ICAgICAgdW5zaWduZWQgbV9pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgdW5zaWduZWQgbV90
cnlEZXB0aDsKKyAgICB9OworCisgICAgc3RydWN0IENvbnRyb2xUeXBlIDogcHVibGljIFZhcmlh
bnQ8Q29udHJvbExvb3AsIENvbnRyb2xUb3BMZXZlbCwgQ29udHJvbEJsb2NrLCBDb250cm9sSWYs
IENvbnRyb2xUcnksIENvbnRyb2xDYXRjaD4geworICAgICAgICB1c2luZyBCYXNlID0gVmFyaWFu
dDxDb250cm9sTG9vcCwgQ29udHJvbFRvcExldmVsLCBDb250cm9sQmxvY2ssIENvbnRyb2xJZiwg
Q29udHJvbFRyeSwgQ29udHJvbENhdGNoPjsKIAogICAgICAgICBDb250cm9sVHlwZSgpCiAgICAg
ICAgICAgICA6IEJhc2UoQ29udHJvbEJsb2NrIHsgfSkKQEAgLTkwLDggKzEwOCwyOSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUg
LSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250
cm9sSWYgeyBXVEZNb3ZlKGFsdGVybmF0ZSkgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgYm9vbCBpc0lmKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPENvbnRyb2xJZj4oY29udHJvbCk7IH0KKyAgICAgICAgc3RhdGljIENv
bnRyb2xUeXBlIGNyZWF0ZVRyeShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0
YWNrU2l6ZSwgUmVmPExhYmVsPiYmIHRyeUxhYmVsLCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0
aW9uLCB1bnNpZ25lZCB0cnlEZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIENv
bnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbFRyeSB7IFdURk1vdmUodHJ5TGFiZWwp
LCB0cnlEZXB0aCB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBj
cmVhdGVDYXRjaChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwg
UmVmPExhYmVsPiYmIHRyeVN0YXJ0LCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9uLCBSZWY8
TGFiZWw+IHRyeUVuZCwgdW5zaWduZWQgdHJ5RGVwdGgsIFZpcnR1YWxSZWdpc3RlciBleGNlcHRp
b24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUs
IHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVh
dGlvbiksIENvbnRyb2xDYXRjaCB7IENhdGNoS2luZDo6Q2F0Y2gsIFdURk1vdmUodHJ5U3RhcnQp
LCBXVEZNb3ZlKHRyeUVuZCksIHRyeURlcHRoLCBleGNlcHRpb24gfSk7CisgICAgICAgIH0KKwor
ICAgICAgICBzdGF0aWMgYm9vbCBpc0xvb3AoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsg
cmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+KGNvbnRyb2wpOyB9CiAg
ICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wp
IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbFRvcExldmVsPihjb250cm9s
KTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0Jsb2NrKGNvbnN0IENvbnRyb2xUeXBlJiBjb250
cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xCbG9jaz4oY29udHJv
bCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sVHlwZSYgY29udHJv
bCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sSWY+KGNvbnRyb2wpOyB9
CisgICAgICAgIHN0YXRpYyBib29sIGlzVHJ5KGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7
IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xUcnk+KGNvbnRyb2wpOyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGlzQW55Q2F0Y2goY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wp
IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbENhdGNoPihjb250cm9sKTsg
fQorICAgICAgICBzdGF0aWMgYm9vbCBpc0NhdGNoKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9s
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29u
dHJvbENhdGNoPihjb250cm9sKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBDb250cm9sQ2F0Y2ggY2F0Y2hEYXRhID0gV1RGOjpnZXQ8Q29udHJvbENhdGNoPihj
b250cm9sKTsKKyAgICAgICAgICAgIHJldHVybiBjYXRjaERhdGEubV9raW5kID09IENhdGNoS2lu
ZDo6Q2F0Y2g7CisgICAgICAgIH0KIAogICAgICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25z
dCB7IHJldHVybiBtX3N0YWNrU2l6ZTsgfQogICAgICAgICBCbG9ja1NpZ25hdHVyZSBzaWduYXR1
cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQpAQCAtMTUyLDE3ICsxOTEsMjQgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gVW5leHBlY3RlZFJlc3VsdChtYWtlU3RyaW5nKCJXZWJB
c3NlbWJseS5Nb2R1bGUgZmFpbGVkIGNvbXBpbGluZzogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4u
KSk7CiAgICAgfQogCi0gICAgTExJbnRHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
LCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKTsKKyAgICBMTEludEdl
bmVyYXRvcihNb2R1bGVJbmZvcm1hdGlvbiYsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBm
aW5hbGl6ZSgpOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHZvaWQgcmVw
YXRjaChjb25zdCBDYXRjaFJld3JpdGVJbmZvJik7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
eHByZXNzaW9uTGlzdEEsIHR5cGVuYW1lIEV4cHJlc3Npb25MaXN0Qj4KICAgICB2b2lkIHVuaWZ5
VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0QSYgZGVzdGluYXRpb25zLCBjb25z
dCBFeHByZXNzaW9uTGlzdEImIHZhbHVlcykKICAgICB7CiAgICAgICAgIEFTU0VSVChkZXN0aW5h
dGlvbnMuc2l6ZSgpIDw9IHZhbHVlcy5zaXplKCkpOwogICAgICAgICBhdXRvIG9mZnNldCA9IHZh
bHVlcy5zaXplKCkgLSBkZXN0aW5hdGlvbnMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIFdhc21Nb3Y6
OmVtaXQodGhpcywgZGVzdGluYXRpb25zW2ldLCB2YWx1ZXNbb2Zmc2V0ICsgaV0pOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgYXV0byYgc3JjID0gdmFsdWVzW29mZnNldCArIGldOworICAgICAgICAgICAgYXV0
byYgZHN0ID0gZGVzdGluYXRpb25zW2ldOworICAgICAgICAgICAgaWYgKChWaXJ0dWFsUmVnaXN0
ZXIpc3JjICE9IChWaXJ0dWFsUmVnaXN0ZXIpZHN0KQorICAgICAgICAgICAgICAgIFdhc21Nb3Y6
OmVtaXQodGhpcywgZHN0LCBzcmMpOworICAgICAgICB9CiAgICAgfQogCiAgICAgZW51bSBOb0Nv
bnNpc3RlbmN5Q2hlY2tUYWcgeyBOb0NvbnNpc3RlbmN5Q2hlY2sgfTsKQEAgLTI0MywxMSArMjg5
LDIxIEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRF
bHNlKENvbnRyb2xUeXBlJiwgU3RhY2smKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpOwogCisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVHJ5KEJsb2NrU2lnbmF0dXJlLCBTdGFjayYg
ZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjayk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2godW5zaWduZWQgZXhj
ZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBSZXN1
bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hU
b1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBD
b250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDYXRjaEFsbChTdGFjayYsIENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xU
eXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRGVsZWdhdGUo
Q29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYsIENvbnRyb2xU
eXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGhyb3codW5z
aWduZWQgZXhjZXB0aW9uSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFN0YWNr
Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0aHJvdyh1bnNp
Z25lZCwgQ29udHJvbFR5cGUmKTsKKwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZFJldHVybihjb25zdCBDb250cm9sVHlwZSYsIFN0YWNrJiByZXR1cm5WYWx1ZXMpOwog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sVHlw
ZSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBl
IGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlKj4mIHRhcmdldHMsIENvbnRyb2xU
eXBlJiBkZWZhdWx0VGFyZ2V0cywgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgU3RhY2sm
IGV4cHJlc3Npb25TdGFjayk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmLCBjb25zdCBTdGFjayYgZXhwcmVzc2lv
blN0YWNrID0geyB9LCBib29sIHVucmVhY2hhYmxlID0gdHJ1ZSk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmLCBT
dGFjayYgZXhwcmVzc2lvblN0YWNrLCBib29sIHVucmVhY2hhYmxlID0gdHJ1ZSk7CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUs
IGNvbnN0IFN0YWNrJik7CiAKICAgICAvLyBDYWxscwpAQCAtMzM3LDcgKzM5Myw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBXYXNtRHJvcEtlZXA6OmVtaXQodGhpcywgc3RhcnRPZmZzZXQsIGRy
b3AsIGtlZXApOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgU3RhY2ssIHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCB3YWxr
RXhwcmVzc2lvblN0YWNrKFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIHVuc2lnbmVkIHN0YWNrU2l6
ZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGV4cHJlc3Npb25TdGFjay5zaXplKCk7IGkgPiAwOyAtLWkpIHsKQEAgLTM0Niw3ICs0MDIs
NyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdGFjaywgdHlwZW5hbWUgRnVuY3Rvcj4K
ICAgICB2b2lkIHdhbGtFeHByZXNzaW9uU3RhY2soU3RhY2smIGV4cHJlc3Npb25TdGFjaywgY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAgICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2so
ZXhwcmVzc2lvblN0YWNrLCBtX3N0YWNrU2l6ZSwgZnVuY3Rvcik7CkBAIC0zNTUsNyArNDExLDgg
QEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgd2Fs
a0V4cHJlc3Npb25TdGFjayhDb250cm9sRW50cnkmIGVudHJ5LCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQogICAgIHsKLSAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhlbnRyeS5lbmNsb3NlZEV4
cHJlc3Npb25TdGFjaywgZW50cnkuY29udHJvbERhdGEuc3RhY2tTaXplKCksIGZ1bmN0b3IpOwor
ICAgICAgICB1bnNpZ25lZCBzdGFja1NpemUgPSBlbnRyeS5jb250cm9sRGF0YS5zdGFja1NpemUo
KTsKKyAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjaywgc3RhY2tTaXplLCBmdW5jdG9yKTsKICAgICB9CiAKICAgICB2b2lkIGNoZWNrQ29uc2lz
dGVuY3koKQpAQCAtMzgxLDcgKzQzOCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIG1hdGVyaWFs
aXplQ29uc3RhbnRzQW5kTG9jYWxzKFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIE5vQ29uc2lzdGVu
Y3lDaGVja1RhZykKICAgICB7Ci0gICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZXhwcmVzc2lv
blN0YWNrLCBbJl0oVHlwZWRFeHByZXNzaW9uJiBleHByZXNzaW9uLCBWaXJ0dWFsUmVnaXN0ZXIg
c2xvdCkgeworICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGV4cHJlc3Npb25TdGFjaywgWyZd
KGF1dG8mIGV4cHJlc3Npb24sIFZpcnR1YWxSZWdpc3RlciBzbG90KSB7CiAgICAgICAgICAgICBB
U1NFUlQoZXhwcmVzc2lvbi52YWx1ZSgpID09IHNsb3QgfHwgZXhwcmVzc2lvbi52YWx1ZSgpLmlz
Q29uc3RhbnQoKSB8fCBleHByZXNzaW9uLnZhbHVlKCkuaXNBcmd1bWVudCgpIHx8IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihleHByZXNzaW9uLnZhbHVlKCkudG9Mb2NhbCgpKSA8IG1fY29kZUJsb2Nr
LT5tX251bVZhcnMpOwogICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24udmFsdWUoKSA9PSBzbG90
KQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTQxNyw2ICs0NzQsOCBAQCBwcml2YXRlOgog
ICAgICAgICBtX3N0YWNrU2l6ZSArPSBuZXdTdGFjay5zaXplKCk7CiAgICAgfQogCisgICAgdm9p
ZCBmaW5hbGl6ZVByZXZpb3VzQmxvY2tGb3JDYXRjaChDb250cm9sVHlwZSYsIFN0YWNrJik7CisK
ICAgICBzdHJ1Y3QgU3dpdGNoRW50cnkgewogICAgICAgICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zm
c2V0IG9mZnNldDsKICAgICAgICAgaW50KiBqdW1wVGFyZ2V0OwpAQCAtNDI5LDcgKzQ4OCw3IEBA
IHByaXZhdGU6CiAgICAgfTsKIAogICAgIEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiog
bV9wYXJzZXIgeyBudWxscHRyIH07Ci0gICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5m
bzsKKyAgICBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOwogICAgIGNvbnN0IHVuc2lnbmVkIG1f
ZnVuY3Rpb25JbmRleCB7IFVJTlRfTUFYIH07CiAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4g
bV9ub3JtYWxpemVkQXJndW1lbnRzOwogICAgIEhhc2hNYXA8TGFiZWwqLCBWZWN0b3I8U3dpdGNo
RW50cnk+PiBtX3N3aXRjaGVzOwpAQCAtNDQwLDkgKzQ5OSwxMiBAQCBwcml2YXRlOgogICAgIFZl
Y3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IG1fcmVzdWx0czsKICAgICBDaGVja2VkPHVuc2lnbmVk
PiBtX3N0YWNrU2l6ZSB7IDAgfTsKICAgICBDaGVja2VkPHVuc2lnbmVkPiBtX21heFN0YWNrU2l6
ZSB7IDAgfTsKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBtX3RyeURlcHRoIHsgMCB9OworICAgIENo
ZWNrZWQ8dW5zaWduZWQ+IG1fbWF4VHJ5RGVwdGggeyAwIH07CisgICAgYm9vbCBtX3VzZXNFeGNl
cHRpb25zIHsgZmFsc2UgfTsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlv
bkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhf
dCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgpCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBT
dHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3Rh
cnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogewogICAgIExM
SW50R2VuZXJhdG9yIGxsaW50R2VuZXJhdG9yKGluZm8sIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVy
ZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+IHBhcnNlcihsbGludEdlbmVy
YXRvciwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CkBA
IC00NjYsNyArNTI4LDcgQEAgc3RhdGljIFRocmVhZFNwZWNpZmljPEJ1ZmZlcj4mIHRocmVhZFNw
ZWNpZmljQnVmZmVyKCkKICAgICByZXR1cm4gKnRocmVhZFNwZWNpZmljQnVmZmVyUHRyOwogfQog
Ci1MTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYpCitMTEludEdl
bmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYpCiAgICAgOiBCeXRlY29kZUdlbmVyYXRv
ckJhc2UobWFrZVVuaXF1ZTxGdW5jdGlvbkNvZGVCbG9jaz4oZnVuY3Rpb25JbmRleCksIDApCiAg
ICAgLCBtX2luZm8oaW5mbykKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQpA
QCAtNDg1LDkgKzU0NywyMiBAQCBMTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSQogICAgIFdhc21FbnRl
cjo6ZW1pdCh0aGlzKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlPgordm9pZCBMTElu
dEdlbmVyYXRvcjo6cmVwYXRjaChjb25zdCBDYXRjaFJld3JpdGVJbmZvJiBpbmZvKQoreworICAg
IGF1dG8gcmVmID0gbV93cml0ZXIucmVmKGluZm8ubV9pbnN0cnVjdGlvbk9mZnNldCk7CisgICAg
T3Bjb2RlKiBpbnN0cnVjdGlvbiA9IHJlZi0+Y2FzdDxPcGNvZGUsIFdhc21PcGNvZGVUcmFpdHM+
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGV4Y2VwdGlvblJlZ2lzdGVyID0gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwobV9tYXhTdGFja1NpemUgKyBpbmZvLm1fdHJ5RGVwdGggLSAxKTsKKyAgICBp
bnN0cnVjdGlvbi0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvblJlZ2lzdGVyLCBbXSgpIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxS
ZWdpc3RlcigpOworICAgIH0pOworfQorCiBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IExMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9j
b2RlQmxvY2spOworCiAgICAgc2l6ZV90IG51bUNhbGxlZUxvY2FscyA9IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBtX21heFN0YWNrU2l6ZSk7CiAg
ICAgbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlTG9jYWxzID0gbnVtQ2FsbGVlTG9jYWxzOwogICAg
IFJFTEVBU0VfQVNTRVJUKG51bUNhbGxlZUxvY2FscyA9PSBtX2NvZGVCbG9jay0+bV9udW1DYWxs
ZWVMb2NhbHMpOwpAQCAtNTAwLDYgKzU3NSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4gTExJbnRHZW5lcmF0b3I6OmZpbmFsaXplKCkKICAgICBSRUxFQVNFX0FTU0VSVCh1
c2VkQnVmZmVyLmNhcGFjaXR5KCkgPT0gb2xkQ2FwYWNpdHkpOwogICAgICp0aHJlYWRTcGVjaWZp
YyA9IFdURk1vdmUodXNlZEJ1ZmZlcik7CiAKKyAgICBpZiAoIW1fdXNlc0V4Y2VwdGlvbnMpCisg
ICAgICAgIG1faW5mby5tX2Z1bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlvbnMucXVpY2tTZXQobV9m
dW5jdGlvbkluZGV4KTsKKwogICAgIHJldHVybiBXVEZNb3ZlKG1fY29kZUJsb2NrKTsKIH0KIApA
QCAtNTgwLDcgKzY1OCw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZv
ckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAKICAgICAvLyBGSVhN
RTogd2UgYXJlIGFsbG9jYXRpbmcgdGhlIGV4dHJhIHNwYWNlIGZvciB0aGUgYXJndW1lbnQvcmV0
dXJuIGNvdW50IGluIG9yZGVyIHRvIGF2b2lkIGludGVyZmVyZW5jZSwgYnV0IHdlIGNvdWxkIGRv
IGJldHRlcgogICAgIC8vIE5PVEU6IFdlIGluY3JlYXNlIGFyZyBjb3VudCBieSAxIGZvciB0aGUg
Y2FzZSBvZiBpbmRpcmVjdCBjYWxscwotICAgIG1fc3RhY2tTaXplICs9IHN0ZDo6bWF4KHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkgKyAxLCBzaWduYXR1cmUucmV0dXJuQ291bnQoKSkgKyBncHJD
b3VudCArIGZwckNvdW50ICsgc3RhY2tDb3VudCArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVn
aXN0ZXJzOworICAgIG1fc3RhY2tTaXplICs9IHN0ZDo6bWF4KHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCkgKyAxLCBzaWduYXR1cmUucmV0dXJuQ291bnQoKSkgKyBncHJDb3VudCArIGZwckNvdW50
ICsgc3RhY2tDb3VudCArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgMTsKICAg
ICBpZiAobV9zdGFja1NpemUudmFsdWUoKSAlIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpCiAg
ICAgICAgICsrbV9zdGFja1NpemU7CiAgICAgaWYgKG1fbWF4U3RhY2tTaXplIDwgbV9zdGFja1Np
emUpCkBAIC01OTEsNyArNjY5LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0
aW9uRm9yQ2FsbGVyKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBMTEkKICAgICBSZXN1
bHRMaXN0IHRlbXBvcmFyeVJlc3VsdHMoc2lnbmF0dXJlLnJldHVybkNvdW50KCkpOwogCiAgICAg
Y29uc3QgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSBtX3N0YWNrU2l6ZTsKLSAgICBjb25zdCB1bnNp
Z25lZCBiYXNlID0gc3RhY2tPZmZzZXQgLSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVy
czsKKyAgICBjb25zdCB1bnNpZ25lZCBiYXNlID0gc3RhY2tPZmZzZXQgLSBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycyAtIDE7CiAKICAgICBjb25zdCB1aW50MzJfdCBncHJMaW1pdCA9
IGJhc2UgLSBzdGFja0NvdW50IC0gZ3ByQ291bnQ7CiAgICAgY29uc3QgdWludDMyX3QgZnByTGlt
aXQgPSBncHJMaW1pdCAtIGZwckNvdW50OwpAQCAtNjgzLDcgKzc2MSw3IEBAIGF1dG8gTExJbnRH
ZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZShjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSkgLT4gVmVjCiAKICAgICB1aW50MzJfdCBncHJJbmRleCA9IDA7CiAgICAgdWludDMyX3Qg
ZnBySW5kZXggPSBncHJDb3VudDsKLSAgICB1aW50MzJfdCBzdGFja0luZGV4ID0gMDsKKyAgICB1
aW50MzJfdCBzdGFja0luZGV4ID0gMTsKICAgICBjb25zdCB1aW50MzJfdCBtYXhHUFJJbmRleCA9
IGdwckNvdW50OwogICAgIGNvbnN0IHVpbnQzMl90IG1heEZQUkluZGV4ID0gbWF4R1BSSW5kZXgg
KyBmcHJDb3VudDsKIApAQCAtNzMxLDcgKzgwOSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFk
ZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAog
ICAgIGNvbnN0IHVpbnQzMl90IG1heEZQUkluZGV4ID0gZ3ByQ291bnQgKyBmcHJDb3VudDsKICAg
ICB1aW50MzJfdCBncHJJbmRleCA9IDA7CiAgICAgdWludDMyX3QgZnBySW5kZXggPSBtYXhHUFJJ
bmRleDsKLSAgICB1aW50MzJfdCBzdGFja0luZGV4ID0gMDsKKyAgICB1aW50MzJfdCBzdGFja0lu
ZGV4ID0gMTsKIAogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IHJlZ2lzdGVyQXJndW1lbnRz
KGdwckNvdW50ICsgZnByQ291bnQpOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBncHJD
b3VudCArIGZwckNvdW50OyBpKyspCkBAIC05MDYsNiArOTg0LDcgQEAgYXV0byBMTEludEdlbmVy
YXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdT
dGFjaywgQ28KIAogICAgIGJsb2NrID0gQ29udHJvbFR5cGU6Omxvb3Aoc2lnbmF0dXJlLCBtX3N0
YWNrU2l6ZSwgV1RGTW92ZShib2R5KSwgV1RGTW92ZShjb250aW51YXRpb24pKTsKIAorICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gdW5yZXNvbHZlZE9mZnNldHM7CiAgICAgVmVjdG9yPFZpcnR1YWxSZWdp
c3Rlcj4gb3NyRW50cnlEYXRhOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtX2NvZGVC
bG9jay0+bV9udW1Bcmd1bWVudHM7IGkrKykKICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZCht
X25vcm1hbGl6ZWRBcmd1bWVudHNbaV0pOwpAQCAtOTE2LDkgKzk5NSwxMiBAQCBhdXRvIExMSW50
R2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xv
c2luZ1N0YWNrLCBDbwogICAgIGZvciAodWludDMyX3QgaSA9IGdwckNvdW50ICsgZnByQ291bnQg
KyBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVyczsgaSA8IG1fY29kZUJsb2NrLT5tX251
bVZhcnM7IGkrKykKICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9s
SW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkg
eworICAgICAgICBDb250cm9sVHlwZSYgZGF0YSA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtj
b250cm9sSW5kZXhdLmNvbnRyb2xEYXRhOwogICAgICAgICBTdGFjayYgZXhwcmVzc2lvblN0YWNr
ID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNz
aW9uU3RhY2s7CiAgICAgICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIGV4cHJlc3Npb24gOiBleHBy
ZXNzaW9uU3RhY2spCiAgICAgICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKGV4cHJlc3Npb24p
OworICAgICAgICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0YSkpCisgICAgICAgICAg
ICBvc3JFbnRyeURhdGEuYXBwZW5kKFdURjo6Z2V0PENvbnRyb2xDYXRjaD4oZGF0YSkubV9leGNl
cHRpb24pOwogICAgIH0KICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiBleHByZXNzaW9uIDogZW5j
bG9zaW5nU3RhY2spCiAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQoZXhwcmVzc2lvbik7CkBA
IC05NzUsNiArMTA1NywxNTkgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFj
aGFibGUoQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9
OwogfQogCithdXRvIExMSW50R2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0
dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBu
ZXdTdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVl
OworICAgICsrbV90cnlEZXB0aDsKKyAgICBpZiAobV9tYXhUcnlEZXB0aCA8IG1fdHJ5RGVwdGgp
CisgICAgICAgIG1fbWF4VHJ5RGVwdGggPSBtX3RyeURlcHRoOworCisgICAgc3BsaXRTdGFjayhz
aWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CisgICAgUmVmPExhYmVsPiB0cnlM
YWJlbCA9IG5ld0VtaXR0ZWRMYWJlbCgpOworICAgIFJlZjxMYWJlbD4gY29udGludWF0aW9uID0g
bmV3TGFiZWwoKTsKKyAgICByZXN1bHQgPSBDb250cm9sVHlwZTo6Y3JlYXRlVHJ5KHNpZ25hdHVy
ZSwgbV9zdGFja1NpemUsIFdURk1vdmUodHJ5TGFiZWwpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiks
IG1fdHJ5RGVwdGgpOworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgTExJbnRHZW5lcmF0b3I6
OmZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKENvbnRyb2xUeXBlJiBkYXRhLCBTdGFjayYg
ZXhwcmVzc2lvblN0YWNrKQoreworICAgIGlmICghQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZGF0
YSkpCisgICAgICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKGV4cHJlc3Npb25TdGFj
ayk7CisgICAgZWxzZSB7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGRhdGEuc3RhY2tTaXpl
KCkpOworICAgICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiYgdmFsdWUgOiBleHByZXNzaW9uU3Rh
Y2spIHsKKyAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgZHN0LCB2YWx1ZSk7CisgICAg
ICAgICAgICB2YWx1ZSA9IFR5cGVkRXhwcmVzc2lvbiB7IHZhbHVlLnR5cGUoKSwgZHN0IH07Cisg
ICAgICAgICAgICBkc3QgLT0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBXYXNtSm1wOjplbWl0
KHRoaXMsIGRhdGEubV9jb250aW51YXRpb24tPmJpbmQodGhpcykpOworfQorCithdXRvIExMSW50
R2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBleGNlcHRpb25TaWduYXR1cmUsIFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xU
eXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
ZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2goZGF0YSwgZXhwcmVzc2lvblN0YWNrKTsKKyAg
ICByZXR1cm4gYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb25T
aWduYXR1cmUsIGRhdGEsIHJlc3VsdHMpOworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjphZGRD
YXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVy
ZSYgZXhjZXB0aW9uU2lnbmF0dXJlLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVz
dWx0cykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOwor
ICAgIFJlZjxMYWJlbD4gY2F0Y2hMYWJlbCA9IG5ld0VtaXR0ZWRMYWJlbCgpOworCisgICAgbV9z
dGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOworICAgIFZpcnR1YWxSZWdpc3RlciBleGNlcHRp
b24gPSBwdXNoKCk7CisgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbFRyeT4o
ZGF0YSkpIHsKKyAgICAgICAgQ29udHJvbFRyeSYgdHJ5RGF0YSA9IFdURjo6Z2V0PENvbnRyb2xU
cnk+KGRhdGEpOworICAgICAgICBkYXRhID0gQ29udHJvbFR5cGU6OmNyZWF0ZUNhdGNoKGRhdGEu
bV9zaWduYXR1cmUsIGRhdGEuc3RhY2tTaXplKCksIFdURk1vdmUodHJ5RGF0YS5tX3RyeSksIFdU
Rk1vdmUoZGF0YS5tX2NvbnRpbnVhdGlvbiksIGNhdGNoTGFiZWwsIHRyeURhdGEubV90cnlEZXB0
aCwgZXhjZXB0aW9uKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2Vw
dGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgcmVzdWx0cy5hcHBl
bmQocHVzaCgpKTsKKworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgIFdh
c21DYXRjaDo6ZW1pdCh0aGlzLCBleGNlcHRpb25JbmRleCwgZXhjZXB0aW9uLCBleGNlcHRpb25T
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCByZXN1bHRzLmlzRW1wdHkoKSA/IDAgOiAtcmVzdWx0
c1swXS5vZmZzZXQoKSk7CisgICAgZWxzZQorICAgICAgICBXYXNtQ2F0Y2hOb1Rsczo6ZW1pdCh0
aGlzLCBleGNlcHRpb25JbmRleCwgZXhjZXB0aW9uLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpLCByZXN1bHRzLmlzRW1wdHkoKSA/IDAgOiAtcmVzdWx0c1swXS5vZmZzZXQoKSk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSByZXN1bHRz
W2ldOworICAgICAgICBUeXBlIHR5cGUgPSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSk7
CisgICAgICAgIHN3aXRjaCAodHlwZS5raW5kKSB7CisgICAgICAgIGNhc2UgV2FzbTo6VHlwZUtp
bmQ6OkYzMjoKKyAgICAgICAgICAgIFdhc21GMzJSZWludGVycHJldEkzMjo6ZW1pdCh0aGlzLCBk
c3QsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2lu
ZDo6RjY0OgorICAgICAgICAgICAgV2FzbUY2NFJlaW50ZXJwcmV0STY0OjplbWl0KHRoaXMsIGRz
dCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5k
OjpJMzI6CisgICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6Okk2NDoKKyAgICAgICAgY2FzZSBX
YXNtOjpUeXBlS2luZDo6RXh0ZXJucmVmOgorICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpG
dW5jcmVmOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBDb250cm9sQ2F0Y2gmIGNhdGNoRGF0YSA9IFdURjo6Z2V0PENv
bnRyb2xDYXRjaD4oZGF0YSk7CisgICAgY2F0Y2hEYXRhLm1fa2luZCA9IENhdGNoS2luZDo6Q2F0
Y2g7CisgICAgbV9jb2RlQmxvY2stPmFkZEV4Y2VwdGlvbkhhbmRsZXIoeyBIYW5kbGVyVHlwZTo6
Q2F0Y2gsIGNhdGNoRGF0YS5tX3RyeVN0YXJ0LT5sb2NhdGlvbigpLCBjYXRjaERhdGEubV90cnlF
bmQtPmxvY2F0aW9uKCksIGNhdGNoTGFiZWwtPmxvY2F0aW9uKCksIG1fdHJ5RGVwdGgsIGV4Y2Vw
dGlvbkluZGV4IH0pOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBMTEludEdlbmVyYXRv
cjo6YWRkQ2F0Y2hBbGwoU3RhY2smIGV4cHJlc3Npb25TdGFjaywgQ29udHJvbFR5cGUmIGRhdGEp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBmaW5hbGl6ZVByZXZpb3VzQmxvY2tGb3JDYXRjaChk
YXRhLCBleHByZXNzaW9uU3RhY2spOworICAgIFdhc21KbXA6OmVtaXQodGhpcywgZGF0YS5tX2Nv
bnRpbnVhdGlvbi0+YmluZCh0aGlzKSk7CisgICAgcmV0dXJuIGFkZENhdGNoQWxsVG9VbnJlYWNo
YWJsZShkYXRhKTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2F0Y2hBbGxUb1VucmVh
Y2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgbV91c2Vz
RXhjZXB0aW9ucyA9IHRydWU7CisgICAgUmVmPExhYmVsPiBjYXRjaExhYmVsID0gbmV3RW1pdHRl
ZExhYmVsKCk7CisgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBleGNlcHRpb24gPSBwdXNoKCk7CisgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8Q29udHJvbFRyeT4oZGF0YSkpIHsKKyAgICAgICAgQ29udHJvbFRyeSYgdHJ5RGF0YSA9
IFdURjo6Z2V0PENvbnRyb2xUcnk+KGRhdGEpOworICAgICAgICBkYXRhID0gQ29udHJvbFR5cGU6
OmNyZWF0ZUNhdGNoKGRhdGEubV9zaWduYXR1cmUsIGRhdGEuc3RhY2tTaXplKCksIFdURk1vdmUo
dHJ5RGF0YS5tX3RyeSksIFdURk1vdmUoZGF0YS5tX2NvbnRpbnVhdGlvbiksIGNhdGNoTGFiZWws
IHRyeURhdGEubV90cnlEZXB0aCwgZXhjZXB0aW9uKTsKKyAgICB9CisgICAgQ29udHJvbENhdGNo
JiBjYXRjaERhdGEgPSBXVEY6OmdldDxDb250cm9sQ2F0Y2g+KGRhdGEpOworICAgIGNhdGNoRGF0
YS5tX2tpbmQgPSBDYXRjaEtpbmQ6OkNhdGNoQWxsOworCisgICAgaWYgKENvbnRleHQ6OnVzZUZh
c3RUTFMoKSkKKyAgICAgICAgV2FzbUNhdGNoQWxsOjplbWl0KHRoaXMsIGV4Y2VwdGlvbik7Cisg
ICAgZWxzZQorICAgICAgICBXYXNtQ2F0Y2hBbGxOb1Rsczo6ZW1pdCh0aGlzLCBleGNlcHRpb24p
OworCisgICAgbV9jb2RlQmxvY2stPmFkZEV4Y2VwdGlvbkhhbmRsZXIoeyBIYW5kbGVyVHlwZTo6
Q2F0Y2hBbGwsIGNhdGNoRGF0YS5tX3RyeVN0YXJ0LT5sb2NhdGlvbigpLCBjYXRjaERhdGEubV90
cnlFbmQtPmxvY2F0aW9uKCksIGNhdGNoTGFiZWwtPmxvY2F0aW9uKCksIG1fdHJ5RGVwdGgsIDAg
fSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRGVsZWdh
dGUoQ29udHJvbFR5cGUmIHRhcmdldCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXR1cm4gYWRkRGVsZWdhdGVUb1VucmVhY2hhYmxlKHRhcmdldCwgZGF0YSk7
Cit9CisKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZERlbGVnYXRlVG9VbnJlYWNoYWJsZShDb250
cm9sVHlwZSYgdGFyZ2V0LCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOworICAgIFJlZjxMYWJlbD4gZGVsZWdhdGVMYWJl
bCA9IG5ld0VtaXR0ZWRMYWJlbCgpOworCisgICAgQVNTRVJUKENvbnRyb2xUeXBlOjppc1RyeSh0
YXJnZXQpIHx8IENvbnRyb2xUeXBlOjppc1RvcExldmVsKHRhcmdldCkpOworICAgIHVuc2lnbmVk
IHRhcmdldERlcHRoID0gQ29udHJvbFR5cGU6OmlzVHJ5KHRhcmdldCkgPyBXVEY6OmdldDxDb250
cm9sVHJ5Pih0YXJnZXQpLm1fdHJ5RGVwdGggOiAwOworCisgICAgQ29udHJvbFRyeSYgdHJ5RGF0
YSA9IFdURjo6Z2V0PENvbnRyb2xUcnk+KGRhdGEpOworICAgIG1fY29kZUJsb2NrLT5hZGRFeGNl
cHRpb25IYW5kbGVyKHsgSGFuZGxlclR5cGU6OkRlbGVnYXRlLCB0cnlEYXRhLm1fdHJ5LT5sb2Nh
dGlvbigpLCBkZWxlZ2F0ZUxhYmVsLT5sb2NhdGlvbigpLCAwLCBtX3RyeURlcHRoLCB0YXJnZXRE
ZXB0aCB9KTsKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBMTEludEdlbmVyYXRvcjo6YWRkVGhyb3codW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFN0YWNrJikgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOworICAgIHdhbGtFeHByZXNzaW9uU3RhY2soYXJn
cywgWyZdKFZpcnR1YWxSZWdpc3RlciYgYXJnLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgeworICAg
ICAgICBpZiAoYXJnID09IHNsb3QpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFdhc21N
b3Y6OmVtaXQodGhpcywgc2xvdCwgYXJnKTsKKyAgICAgICAgYXJnID0gc2xvdDsKKyAgICB9KTsK
KyAgICBXYXNtVGhyb3c6OmVtaXQodGhpcywgZXhjZXB0aW9uSW5kZXgsIGFyZ3MuaXNFbXB0eSgp
ID8gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoMCkgOiBhcmdzWzBdKTsKKyAgICByZXR1cm4geyB9
OworfQorCithdXRvIExMSW50R2VuZXJhdG9yOjphZGRSZXRocm93KHVuc2lnbmVkLCBDb250cm9s
VHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0
cnVlOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xDYXRjaD4oZGF0
YSkpOworICAgIENvbnRyb2xDYXRjaCBjYXRjaERhdGEgPSBXVEY6OmdldDxDb250cm9sQ2F0Y2g+
KGRhdGEpOworICAgIFdhc21SZXRocm93OjplbWl0KHRoaXMsIGNhdGNoRGF0YS5tX2V4Y2VwdGlv
bik7CisgICAgcmV0dXJuIHsgfTsKK30KKwogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmV0dXJu
KGNvbnN0IENvbnRyb2xUeXBlJiBkYXRhLCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgaWYgKCFkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKSB7CkBA
IC0xMDQ5LDE5ICsxMjg0LDI1IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRy
b2xFbnRyeSYgZW50cnksIFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFBhCiB7CiAgICAgLy8g
RklYTUU6IFdlIG9ubHkgbmVlZCB0byBtYXRlcmlhbGl6ZSBjb25zdGFudHMgaGVyZSBpZiB0aGVy
ZSBleGlzdHMgYSBqdW1wIHRvIHRoaXMgbGFiZWwKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNjU3Ci0gICAgbWF0ZXJpYWxpemVDb25zdGFudHNBbmRM
b2NhbHMoZXhwcmVzc2lvblN0YWNrKTsKKyAgICBmaW5hbGl6ZVByZXZpb3VzQmxvY2tGb3JDYXRj
aChlbnRyeS5jb250cm9sRGF0YSwgZXhwcmVzc2lvblN0YWNrKTsKICAgICByZXR1cm4gYWRkRW5k
VG9VbnJlYWNoYWJsZShlbnRyeSwgZXhwcmVzc2lvblN0YWNrLCBmYWxzZSk7CiB9CiAKIAotYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5
LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBib29sIHVucmVhY2hhYmxlKSAtPiBQYXJ0
aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRy
b2xFbnRyeSYgZW50cnksIFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIGJvb2wgdW5yZWFjaGFibGUp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBDb250cm9sVHlwZSYgZGF0YSA9IGVudHJ5LmNvbnRy
b2xEYXRhOwogCi0gICAgUkVMRUFTRV9BU1NFUlQodW5yZWFjaGFibGUgfHwgbV9zdGFja1NpemUg
PT0gZGF0YS5zdGFja1NpemUoKSArIGRhdGEubV9zaWduYXR1cmUtPnJldHVybkNvdW50KCkpOwor
ICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCk7CisgICAgaWYgKENvbnRy
b2xUeXBlOjppc0FueUNhdGNoKGVudHJ5LmNvbnRyb2xEYXRhKSkKKyAgICAgICAgKytzdGFja1Np
emU7IC8vIEFjY291bnQgZm9yIHRoZSBjYXVnaHQgZXhjZXB0aW9uCisgICAgUkVMRUFTRV9BU1NF
UlQodW5yZWFjaGFibGUgfHwgbV9zdGFja1NpemUgPT0gIHN0YWNrU2l6ZSArIGRhdGEubV9zaWdu
YXR1cmUtPnJldHVybkNvdW50KCkpOwogCiAgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6
ZSgpOwogCisgICAgaWYgKENvbnRyb2xUeXBlOjppc1RyeShkYXRhKSB8fCBXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPENvbnRyb2xDYXRjaD4oZGF0YSkpCisgICAgICAgIC0tbV90cnlEZXB0aDsKKwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3Vu
dCgpOyArK2kpIHsKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkbyBhIGNvbnNpc3RlbmN5
IGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBqdXN0IHJlc2V0IHRoZSBzdGFjayBzaXplCiAgICAgICAg
IC8vIGFyZSBwdXNoaW5nIG5ldyB2YWx1ZXMsIHdoaWxlIHdlIGFscmVhZHkgaGF2ZSB0aGUgc2Ft
ZSB2YWx1ZXMgaW4gdGhlIHN0YWNrLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTExJbnRHZW5lcmF0b3IuaAppbmRleCA4YTE2MDM4MjZjMTAwZWJmZjA4YTAzMDZmNjJlZDE5
N2JiY2VmZjViLi5jMDEyZmIxZWU3MTRhZjk4MjNkYTI2YzZjMzRkOGFiNzcyZWI0NTUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaApAQCAt
MzYsNyArMzYsNyBAQCBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFNpZ25hdHVyZTsK
IHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1
bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1
aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1
bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1
aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBNb2R1bGVJbmZvcm1hdGlvbiYsIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmgKaW5kZXggY2Y4YjQ0NjAzNjgxMTIz
ZWNjMjVjZmMzNzI0OThiNWY1YjU4Yzk4Ni4uZjhmMDUzYjU4NjBlN2RmOTdkYjQ0NjRhYTBlYTE3
NDhkOWI4N2YzNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxp
bWl0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MaW1pdHMuaApAQCAt
NDEsNiArNDEsNyBAQCBjb25zdGV4cHIgc2l6ZV90IG1heFR5cGVzID0gMTAwMDAwMDsKIGNvbnN0
ZXhwciBzaXplX3QgbWF4RnVuY3Rpb25zID0gMTAwMDAwMDsKIGNvbnN0ZXhwciBzaXplX3QgbWF4
SW1wb3J0cyA9IDEwMDAwMDsKIGNvbnN0ZXhwciBzaXplX3QgbWF4RXhwb3J0cyA9IDEwMDAwMDsK
K2NvbnN0ZXhwciBzaXplX3QgbWF4RXhjZXB0aW9ucyA9IDEwMDAwMDsKIGNvbnN0ZXhwciBzaXpl
X3QgbWF4R2xvYmFscyA9IDEwMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heERhdGFTZWdtZW50
cyA9IDEwMDAwMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1vZHVsZUluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVJbmZvcm1hdGlvbi5jcHAKaW5kZXggMzU0OTFjZmU1NDEwNTczYWJkMzViYTM5Yjc1NjA3
ZDg2YzI2OGRiNi4uYzZlOGI4YzdmZWI5Y2MyMDhlYjI3OTZlYTdmMmE0MjA0ZDQwNzY3MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9u
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRp
b24uY3BwCkBAIC0zNiw2ICszNiw3IEBAIE1vZHVsZUluZm9ybWF0aW9uOjpNb2R1bGVJbmZvcm1h
dGlvbigpCiAgICAgOiBuYW1lU2VjdGlvbihOYW1lU2VjdGlvbjo6Y3JlYXRlKCkpCiB7CiB9CisK
IE1vZHVsZUluZm9ybWF0aW9uOjp+TW9kdWxlSW5mb3JtYXRpb24oKSB7IH0KIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1vZHVsZUluZm9ybWF0aW9uLmgKaW5kZXggYTJiMGY4MzZjODljMjBlZWUyNGI5YWIzNGJlMTAx
YzI4NTE0MDM1Mi4uMzI4YzZiY2E2YmZhNjYyYjUzZTljOGM4ZGE5YWNiMThmNTA0NGFjNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9u
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9u
LmgKQEAgLTU4LDggKzU4LDIyIEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1bGVJbmZvcm1hdGlvbj4gewogICAgICAgICAgICAgOiBp
bnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4IC0gaW1wb3J0RnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKV07CiAgICAgfQogCisgICAgc2l6ZV90IGV4Y2Vw
dGlvbkluZGV4U3BhY2VTaXplKCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RXhjZXB0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCkgKyBpbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6
ZSgpOyB9CisgICAgYm9vbCBpc0ltcG9ydGVkRXhjZXB0aW9uRnJvbUV4Y2VwdGlvbkluZGV4U3Bh
Y2Uoc2l6ZV90IGV4Y2VwdGlvbkluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGV4
Y2VwdGlvbkluZGV4IDwgZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAgICAgIHJldHVy
biBleGNlcHRpb25JbmRleCA8IGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgp
OworICAgIH0KKyAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21FeGNlcHRpb25J
bmRleFNwYWNlKHNpemVfdCBleGNlcHRpb25JbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc0ltcG9ydGVkRXhjZXB0aW9uRnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9u
SW5kZXgpCisgICAgICAgICAgICA/IGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXNbZXhj
ZXB0aW9uSW5kZXhdCisgICAgICAgICAgICA6IGludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5k
aWNlc1tleGNlcHRpb25JbmRleCAtIGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6
ZSgpXTsKKyAgICB9CisKICAgICB1aW50MzJfdCBpbXBvcnRGdW5jdGlvbkNvdW50KCkgY29uc3Qg
eyByZXR1cm4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQogICAgIHVp
bnQzMl90IGludGVybmFsRnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsRnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQorICAgIHVpbnQzMl90IGltcG9ydEV4Y2Vw
dGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNl
cy5zaXplKCk7IH0KIAogICAgIC8vIEN1cnJlbnRseSwgb3VyIHdhc20gaW1wbGVtZW50YXRpb24g
YWxsb3dzIG9ubHkgb25lIG1lbW9yeSBhbmQgdGFibGUuCiAgICAgLy8gSWYgd2UgbmVlZCB0byBy
ZW1vdmUgdGhpcyBsaW1pdGF0aW9uLCB3ZSB3b3VsZCBoYXZlIE1lbW9yeUluZm9ybWF0aW9uIGFu
ZCBUYWJsZUluZm9ybWF0aW9uIGluIHRoZSBWZWN0b3JzLgpAQCAtNzYsOSArOTAsMTQgQEAgc3Ry
dWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVs
ZUluZm9ybWF0aW9uPiB7CiAgICAgYm9vbCBpc0RlY2xhcmVkRnVuY3Rpb24odWludDMyX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjbGFyZWRGdW5jdGlvbnMuY29udGFpbnMoaW5kZXgpOyB9
CiAgICAgdm9pZCBhZGREZWNsYXJlZEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KSB7IG1fZGVjbGFy
ZWRGdW5jdGlvbnMuc2V0KGluZGV4KTsgfQogCisgICAgYm9vbCBpc0RlY2xhcmVkRXhjZXB0aW9u
KHVpbnQzMl90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2RlY2xhcmVkRXhjZXB0aW9ucy5jb250
YWlucyhpbmRleCk7IH0KKyAgICB2b2lkIGFkZERlY2xhcmVkRXhjZXB0aW9uKHVpbnQzMl90IGlu
ZGV4KSB7IG1fZGVjbGFyZWRFeGNlcHRpb25zLnNldChpbmRleCk7IH0KKwogICAgIFZlY3RvcjxJ
bXBvcnQ+IGltcG9ydHM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbXBvcnRGdW5jdGlv
blNpZ25hdHVyZUluZGljZXM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbnRlcm5hbEZ1
bmN0aW9uU2lnbmF0dXJlSW5kaWNlczsKKyAgICBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+IGltcG9y
dEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXM7CisgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBp
bnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXM7CiAgICAgVmVjdG9yPFJlZjxTaWduYXR1
cmU+PiB1c2VkU2lnbmF0dXJlczsKIAogICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKQEAg
LTk4LDYgKzExNyw4IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxNb2R1bGVJbmZvcm1hdGlvbj4gewogICAgIHVpbnQzMl90IG51bWJlck9m
RGF0YVNlZ21lbnRzIHsgMCB9OwogCiAgICAgQml0VmVjdG9yIG1fZGVjbGFyZWRGdW5jdGlvbnM7
CisgICAgQml0VmVjdG9yIG1fZGVjbGFyZWRFeGNlcHRpb25zOworICAgIEJpdFZlY3RvciBtX2Z1
bmN0aW9uRG9lc05vdFVzZUV4Y2VwdGlvbnM7CiAgICAgbXV0YWJsZSBCaXRWZWN0b3IgbV9yZWZl
cmVuY2VkRnVuY3Rpb25zOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAppbmRleCAwZDQzMzhkNjU5MjEzMjJmMDI4
MGRlZjY5ZDU4MzYxNmI0OWQ2MWNiLi42MTAzMTYxYzFjMmYwMjRjMjk0YzBmZTE1NDBmZWJjNzUy
YjlkZGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9y
T1NSRW50cnlQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01H
Rm9yT1NSRW50cnlQbGFuLmNwcApAQCAtOTEsMTYgKzkxLDIwIEBAIHZvaWQgT01HRm9yT1NSRW50
cnlQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgICAgICByZXR1cm47CiAgICAgfQog
CisgICAgSW50ZXJuYWxGdW5jdGlvbiogaW50ZXJuYWxGdW5jdGlvbiA9IHBhcnNlQW5kQ29tcGls
ZVJlc3VsdC0+Z2V0KCk7CisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+PiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zOworICAgIGNvbXB1dGVFeGNl
cHRpb25IYW5kbGVyTG9jYXRpb25zKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMsIGludGVybmFs
RnVuY3Rpb24sIGNvbnRleHQsIGxpbmtCdWZmZXIpOworCiAgICAgb21nRW50cnlwb2ludC5jb21w
aWxhdGlvbiA9IG1ha2VVbmlxdWU8Q29tcGlsYXRpb24+KAogICAgICAgICBGSU5BTElaRV9XQVNN
X0NPREVfRk9SX01PREUoQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIGxpbmtC
dWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgT01HRm9yT1NSRW50cnkg
ZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0
cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbklu
ZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2Fz
bUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAKLSAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVS
ZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5lbnRyeXBv
aW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJl
Z2lzdGVycyA9IFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5jYWxsZWVTYXZl
UmVnaXN0ZXJzKTsKIAogICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+
Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwotICAgIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY2Fs
bGVlID0gT01HRm9yT1NSRW50cnlDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQp
LCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5n
ZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9sb29w
SW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxscykpOworICAgIFJlZjxPTUdGb3JPU1JFbnRyeUNh
bGxlZT4gY2FsbGVlID0gT01HRm9yT1NSRW50cnlDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0Vu
dHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVT
ZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSwgbV9sb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxscyksIFdURk1vdmUoaW50ZXJuYWxG
dW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5leGNlcHRpb25I
YW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucykpOwogICAgIHsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHBhcnNlQW5kQ29tcGlsZVJlc3Vs
dC52YWx1ZSgpLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVl
LnB0cigpKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihpbnRlcm5h
bEZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVl
LnB0cigpKSk7CiAKICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fY29kZUJsb2NrLT5tX2xvY2sg
fTsKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVz
KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCA1
ZTc5ZjFiYzk4NWM2NWQ1Y2JiYWY4Nzg0YmRiNDg5MGRjOGU2MjUwLi5mOGVlMDAwODA4OTlkYzZh
YTU2NWIyMmFkOTMzYzkzZDM0YWEyYmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR1BsYW4uY3BwCkBAIC04OCwxNyArODgsMjEgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENv
bXBpbGF0aW9uRWZmb3J0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgSW50ZXJuYWxG
dW5jdGlvbiogaW50ZXJuYWxGdW5jdGlvbiA9IHBhcnNlQW5kQ29tcGlsZVJlc3VsdC0+Z2V0KCk7
CisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiBl
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zOworICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9j
YXRpb25zKGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMsIGludGVybmFsRnVuY3Rpb24sIGNvbnRl
eHQsIGxpbmtCdWZmZXIpOworCiAgICAgb21nRW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VV
bmlxdWU8Q29tcGlsYXRpb24+KAogICAgICAgICBGSU5BTElaRV9XQVNNX0NPREVfRk9SX01PREUo
Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBsaW5rQnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRh
ZywgIldlYkFzc2VtYmx5IE9NRyBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVuY3Rpb25J
bmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5k
ZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2Vj
dGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAg
IFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKIAotICAgIG9tZ0Vu
dHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VBbmRDb21waWxlUmVz
dWx0LnZhbHVlKCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CisgICAgb21nRW50
cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5l
bnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwotICAg
ICAgICBSZWY8T01HQ2FsbGVlPiBjYWxsZWUgPSBPTUdDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9t
Z0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5h
bWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxz
KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBp
bGVSZXN1bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNt
KGNhbGxlZS5wdHIoKSkpOworICAgICAgICBSZWY8T01HQ2FsbGVlPiBjYWxsZWUgPSBPTUdDYWxs
ZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1f
bW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwg
V1RGTW92ZSh1bmxpbmtlZENhbGxzKSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21h
cHMpLCBXVEZNb3ZlKGludGVybmFsRnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92
ZShleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihpbnRlcm5hbEZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxl
ZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CiAgICAgICAgIEFTU0VSVCghbV9jb2RlQmxv
Y2stPm1fb21nQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdKTsKICAgICAgICAgZW50cnlwb2ludCA9
IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT1NSRW50cnlEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT1NSRW50cnlEYXRhLmgKaW5kZXggZDQxZWQ3OTMyYjMwZTlhYTBhZTg3NjNiYTgyYTYxMmNh
ZjdlNjQ4Yi4uZDkzZjM0MmNlNjQyZDJjNjYzOWY2OTA2NTllNmEyNWIzYTBhNzgyNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9TUkVudHJ5RGF0YS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeURhdGEuaApAQCAtMjcsOCAr
MjcsOCBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogCisjaW5jbHVkZSAiQjNU
eXBlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgotI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIK
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CkBAIC00Nyw2ICs0Nyw5IEBAIHByaXZhdGU6CiAgICAgQjM6OlR5cGUgbV90eXBlOwogfTsK
IAordXNpbmcgU3RhY2tNYXAgPSBWZWN0b3I8T1NSRW50cnlWYWx1ZT47Cit1c2luZyBTdGFja01h
cHMgPSBIYXNoTWFwPENhbGxTaXRlSW5kZXgsIFN0YWNrTWFwPjsKKwogY2xhc3MgT1NSRW50cnlE
YXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPU1JFbnRyeURhdGEpOwogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTksMTIgKzYyLDEyIEBAIHB1YmxpYzoKIAogICAgIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uSW5kZXg7IH0K
ICAgICB1aW50MzJfdCBsb29wSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2xvb3BJbmRleDsgfQot
ICAgIFZlY3RvcjxPU1JFbnRyeVZhbHVlPiYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0K
KyAgICBTdGFja01hcCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KIAogcHJpdmF0ZToK
ICAgICB1aW50MzJfdCBtX2Z1bmN0aW9uSW5kZXg7CiAgICAgdWludDMyX3QgbV9sb29wSW5kZXg7
Ci0gICAgVmVjdG9yPE9TUkVudHJ5VmFsdWU+IG1fdmFsdWVzOworICAgIFN0YWNrTWFwIG1fdmFs
dWVzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAppbmRleCA4NWI0MjRmYjE4NDg5MzA4ZGYy
N2Y5YTYxN2U3ZjczMGY2M2UyNTY5Li5kYWJhZWU3ZWI4MmQ3MWJkZGIxMjk3YzAxYjNlM2ZlZGE1
M2Q3NzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0
aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKICNpbmNs
dWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0SW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKQEAgLTEwNSwyNCArMTA2LDEw
IEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJPTUdSZXBsYWNlbWVudENvbXBpbGUoVGllclVwQ291bnQm
IHRpZXJVcCwgT01HQ2FsbGVlKiByZXBsYWNlCiAgICAgfQogfQogCi1TVVBQUkVTU19BU0FOCi1z
dGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQm
IGNvbnRleHQsIEJCUUNhbGxlZSYgY2FsbGVlLCBPTUdGb3JPU1JFbnRyeUNhbGxlZSYgb3NyRW50
cnlDYWxsZWUsIE9TUkVudHJ5RGF0YSYgb3NyRW50cnlEYXRhKQordm9pZCBsb2FkVmFsdWVzSW50
b0J1ZmZlcihQcm9iZTo6Q29udGV4dCYgY29udGV4dCwgY29uc3QgU3RhY2tNYXAmIHZhbHVlcywg
dWludDY0X3QqIGJ1ZmZlcikKIHsKLSAgICBhdXRvIHJldHVybldpdGhvdXRPU1JFbnRyeSA9IFsm
XSB7Ci0gICAgICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPSAwOwotICAg
IH07Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChvc3JFbnRyeUNhbGxlZS5vc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplKCkgPT0gb3NyRW50cnlEYXRhLnZhbHVlcygpLnNpemUoKSk7Ci0KLSAgICB1aW50
NjRfdCogYnVmZmVyID0gaW5zdGFuY2UtPmNvbnRleHQoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUo
b3NyRW50cnlDYWxsZWUub3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSgpKTsKLSAgICBpZiAoIWJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuIHJldHVybldpdGhvdXRPU1JFbnRyeSgpOwotCi0gICAgZGF0
YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBvc3JFbnRyeURhdGEuZnVuY3Rpb25JbmRl
eCgpLCAiOk9NRyBPU1IgZW50cnk6IGdvdCBlbnRyeSBjYWxsZWUgIiwgUmF3UG9pbnRlcigmb3Ny
RW50cnlDYWxsZWUpKTsKLQotICAgIC8vIDEuIFBsYWNlIHJlcXVpcmVkIHZhbHVlcyBpbiBzY3Jh
dGNoIGJ1ZmZlci4KLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBvc3JFbnRy
eURhdGEudmFsdWVzKCkuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IE9TUkVudHJ5
VmFsdWUmIHZhbHVlID0gb3NyRW50cnlEYXRhLnZhbHVlcygpW2luZGV4XTsKKyAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCB2YWx1ZXMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAg
ICAgIGNvbnN0IE9TUkVudHJ5VmFsdWUmIHZhbHVlID0gdmFsdWVzW2luZGV4XTsKICAgICAgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiT01HIE9TUiBlbnRyeSB2YWx1ZXNb
IiwgaW5kZXgsICJdICIsIHZhbHVlLnR5cGUoKSwgIiAiLCB2YWx1ZSk7CiAgICAgICAgIGlmICh2
YWx1ZS5pc0dQUigpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUoKS5raW5kKCkp
IHsKQEAgLTE2NCwyMSArMTUxLDI4IEBAIHN0YXRpYyB2b2lkIGRvT1NSRW50cnkoSW5zdGFuY2Uq
IGluc3RhbmNlLCBQcm9iZTo6Q29udGV4dCYgY29udGV4dCwgQkJRQ2FsbGVlJiBjCiAgICAgICAg
ICAgICAgICAgKmJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGJ1ZmZlciArIGluZGV4KSA9ICpiaXR3
aXNlX2Nhc3Q8dWludDY0X3QqPihiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGNvbnRleHQuZnAoKSkg
KyB2YWx1ZS5vZmZzZXRGcm9tRlAoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUuaXNTdGFja0FyZ3VtZW50KCkpIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAodmFsdWUudHlwZSgpLmtpbmQoKSkgewotICAgICAgICAgICAgY2Fz
ZSBCMzo6RmxvYXQ6Ci0gICAgICAgICAgICAgICAgKmJpdHdpc2VfY2FzdDxmbG9hdCo+KGJ1ZmZl
ciArIGluZGV4KSA9ICpiaXR3aXNlX2Nhc3Q8ZmxvYXQqPihiaXR3aXNlX2Nhc3Q8dWludDhfdCo+
KGNvbnRleHQuc3AoKSkgKyB2YWx1ZS5vZmZzZXRGcm9tU1AoKSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEIzOjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgKmJp
dHdpc2VfY2FzdDxkb3VibGUqPihidWZmZXIgKyBpbmRleCkgPSAqYml0d2lzZV9jYXN0PGRvdWJs
ZSo+KGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oY29udGV4dC5zcCgpKSArIHZhbHVlLm9mZnNldEZy
b21TUCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgKmJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGJ1ZmZlciArIGluZGV4KSA9
ICpiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGNvbnRleHQu
c3AoKSkgKyB2YWx1ZS5vZmZzZXRGcm9tU1AoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9Cit9CisKK1NVUFBSRVNTX0FTQU4KK3N0YXRpYyB2b2lkIGRv
T1NSRW50cnkoSW5zdGFuY2UqIGluc3RhbmNlLCBQcm9iZTo6Q29udGV4dCYgY29udGV4dCwgQkJR
Q2FsbGVlJiBjYWxsZWUsIE9NR0Zvck9TUkVudHJ5Q2FsbGVlJiBvc3JFbnRyeUNhbGxlZSwgT1NS
RW50cnlEYXRhJiBvc3JFbnRyeURhdGEpCit7CisgICAgYXV0byByZXR1cm5XaXRob3V0T1NSRW50
cnkgPSBbJl0geworICAgICAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0g
MDsKKyAgICB9OworCisgICAgUkVMRUFTRV9BU1NFUlQob3NyRW50cnlDYWxsZWUub3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSgpID09IG9zckVudHJ5RGF0YS52YWx1ZXMoKS5zaXplKCkpOworCisg
ICAgdWludDY0X3QqIGJ1ZmZlciA9IGluc3RhbmNlLT5jb250ZXh0KCktPnNjcmF0Y2hCdWZmZXJG
b3JTaXplKG9zckVudHJ5Q2FsbGVlLm9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSk7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiByZXR1cm5XaXRob3V0T1NSRW50cnkoKTsKKwor
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgb3NyRW50cnlEYXRhLmZ1bmN0
aW9uSW5kZXgoKSwgIjpPTUcgT1NSIGVudHJ5OiBnb3QgZW50cnkgY2FsbGVlICIsIFJhd1BvaW50
ZXIoJm9zckVudHJ5Q2FsbGVlKSk7CisKKyAgICAvLyAxLiBQbGFjZSByZXF1aXJlZCB2YWx1ZXMg
aW4gc2NyYXRjaCBidWZmZXIuCisgICAgbG9hZFZhbHVlc0ludG9CdWZmZXIoY29udGV4dCwgb3Ny
RW50cnlEYXRhLnZhbHVlcygpLCBidWZmZXIpOwogCiAgICAgLy8gMi4gUmVzdG9yZSBjYWxsZWUg
c2F2ZXMuCiAgICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmVSZWdpc3RlcnMgPSBSZWdpc3RlclNl
dDo6c3RhY2tSZWdpc3RlcnMoKTsKQEAgLTY1OCwxMiArNjUyLDEyIEBAIEpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25Hcm93TWVtb3J5LCBpbnQzMl90LCAodm9pZCogY2FsbEZyYW1l
LCBJbnN0YW5jCiAgICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNvdW50KCk7CiB9CiAKLUpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5RmlsbCwgYm9vbCwgKElu
c3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFs
dWUsIHVpbnQzMl90IGNvdW50KSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25X
YXNtTWVtb3J5RmlsbCwgc2l6ZV90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBkc3RB
ZGRyZXNzLCB1aW50MzJfdCB0YXJnZXRWYWx1ZSwgdWludDMyX3QgY291bnQpKQogewogICAgIHJl
dHVybiBpbnN0YW5jZS0+bWVtb3J5KCktPmZpbGwoZHN0QWRkcmVzcywgc3RhdGljX2Nhc3Q8dWlu
dDhfdD4odGFyZ2V0VmFsdWUpLCBjb3VudCk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSwgYm9vbCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWlu
dDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgY291bnQpKQor
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlDb3B5LCBzaXplX3Qs
IChJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0Fk
ZHJlc3MsIHVpbnQzMl90IGNvdW50KSkKIHsKICAgICByZXR1cm4gaW5zdGFuY2UtPm1lbW9yeSgp
LT5jb3B5KGRzdEFkZHJlc3MsIHNyY0FkZHJlc3MsIGNvdW50KTsKIH0KQEAgLTcxMSwxMiArNzA1
LDEyIEBAIHN0YXRpYyBib29sIHNldFdhc21UYWJsZUVsZW1lbnQoSW5zdGFuY2UqIGluc3RhbmNl
LCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25TZXRXYXNtVGFibGVFbGVtZW50LCBib29s
LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBzaWdu
ZWRJbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jVmFsdWUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblNldFdhc21UYWJsZUVsZW1lbnQsIHNpemVfdCwgKEluc3RhbmNlKiBpbnN0
YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3Qgc2lnbmVkSW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY1ZhbHVlKSkKIHsKICAgICByZXR1cm4gc2V0V2FzbVRhYmxlRWxlbWVudChpbnN0
YW5jZSwgdGFibGVJbmRleCwgc2lnbmVkSW5kZXgsIGVuY1ZhbHVlKTsKIH0KIAotSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUluaXQsIGJvb2wsIChJbnN0YW5jZSog
aW5zdGFuY2UsIHVuc2lnbmVkIGVsZW1lbnRJbmRleCwgdW5zaWduZWQgdGFibGVJbmRleCwgdWlu
dDMyX3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkpCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlSW5pdCwgc2l6ZV90LCAo
SW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxl
SW5kZXgsIHVpbnQzMl90IGRzdE9mZnNldCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBs
ZW5ndGgpKQogewogICAgIEFTU0VSVChlbGVtZW50SW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCku
bW9kdWxlSW5mb3JtYXRpb24oKS5lbGVtZW50Q291bnQoKSk7CiAgICAgQVNTRVJUKHRhYmxlSW5k
ZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50KCkp
OwpAQCAtNzYxLDcgKzc1NSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25X
YXNtVGFibGVHcm93LCBpbnQzMl90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1CiAgICAgcmV0dXJu
IG9sZFNpemU7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFi
bGVGaWxsLCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1
aW50MzJfdCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50KSkKK0pT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVGaWxsLCBzaXplX3QsIChJ
bnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IG9mZnNldCwg
RW5jb2RlZEpTVmFsdWUgZmlsbCwgdWludDMyX3QgY291bnQpKQogewogICAgIEFTU0VSVCh0YWJs
ZUluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3Vu
dCgpKTsKIApAQCAtNzc3LDcgKzc3MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25XYXNtVGFibGVGaWxsLCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNt
VGFibGVDb3B5LCBib29sLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBkc3RUYWJsZUlu
ZGV4LCB1bnNpZ25lZCBzcmNUYWJsZUluZGV4LCBpbnQzMl90IGRzdE9mZnNldCwgaW50MzJfdCBz
cmNPZmZzZXQsIGludDMyX3QgbGVuZ3RoKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25XYXNtVGFibGVDb3B5LCBzaXplX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVk
IGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsIGludDMyX3QgZHN0T2Zmc2V0
LCBpbnQzMl90IHNyY09mZnNldCwgaW50MzJfdCBsZW5ndGgpKQogewogICAgIEFTU0VSVChkc3RU
YWJsZUluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVD
b3VudCgpKTsKICAgICBBU1NFUlQoc3JjVGFibGVJbmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5t
b2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSk7CkBAIC05MDQsNyArODk4LDcgQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk1lbW9yeUF0b21pY05vdGlmeSwgaW50MzJf
dCwgKEluc3RhbmNlKiBpbnN0YW4KICAgICByZXR1cm4gUGFya2luZ0xvdDo6dW5wYXJrQ291bnQo
cG9pbnRlciwgY291bnQpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
V2FzbU1lbW9yeUluaXQsIGJvb2wsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGRhdGFT
ZWdtZW50SW5kZXgsIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVp
bnQzMl90IGxlbmd0aCkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1l
bW9yeUluaXQsIHNpemVfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZGF0YVNlZ21l
bnRJbmRleCwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMy
X3QgbGVuZ3RoKSkKIHsKICAgICBBU1NFUlQoZGF0YVNlZ21lbnRJbmRleCA8IGluc3RhbmNlLT5t
b2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLmRhdGFTZWdtZW50c0NvdW50KCkpOwogICAgIHJl
dHVybiBpbnN0YW5jZS0+bWVtb3J5SW5pdChkc3RBZGRyZXNzLCBzcmNBZGRyZXNzLCBsZW5ndGgs
IGRhdGFTZWdtZW50SW5kZXgpOwpAQCAtOTE2LDYgKzkxMCw2NSBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uV2FzbURhdGFEcm9wLCB2b2lkLCAoSW5zdGFuY2UqIGluc3RhbmNl
LCB1bnNpZwogICAgIGluc3RhbmNlLT5kYXRhRHJvcChkYXRhU2VnbWVudEluZGV4KTsKIH0KIAor
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UaHJvdywgdm9pZCosIChJbnN0
YW5jZSogaW5zdGFuY2UsIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCBleGNlcHRpb25J
bmRleCwgRW5jb2RlZEpTVmFsdWUqIGFyZ3VtZW50cykpCit7CisgICAgaW5zdGFuY2UtPnN0b3Jl
VG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpz
SW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOworICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3Qo
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBjb25zdCBXYXNtOjpUYWcmIHRhZyA9
IGluc3RhbmNlLT50YWcoZXhjZXB0aW9uSW5kZXgpOworCisgICAgRml4ZWRWZWN0b3I8dWludDY0
X3Q+IHZhbHVlcyh0YWcucGFyYW1ldGVyQ291bnQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHRhZy5wYXJhbWV0ZXJDb3VudCgpOyArK2kpCisgICAgICAgIHZhbHVlc1tpXSA9IGFy
Z3VtZW50c1tpXTsKKworICAgIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IEpT
V2ViQXNzZW1ibHlFeGNlcHRpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJs
eUV4Y2VwdGlvblN0cnVjdHVyZSgpLCB0YWcsIFdURk1vdmUodmFsdWVzKSk7CisgICAgdGhyb3dF
eGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBleGNlcHRpb24pOworCisgICAgZ2Vu
ZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JD
YXRjaCk7CisgICAgQVNTRVJUKCEhdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3Rh
bCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBsbGludF9oYW5kbGVfdW5j
YXVnaHRfZXhjZXB0aW9uKQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmll
bGQgdG8gbG9hZCB0aGUgVk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAg
ICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVy
LikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2Vw
dGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0
ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdl
IGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICB2bS5jYWxs
ZWVGb3JXYXNtQ2F0Y2ggPSBjYWxsRnJhbWUtPmNhbGxlZSgpOworICAgIGJpdHdpc2VfY2FzdDx1
aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oanNJbnN0YW5jZS0+bW9kdWxlKCkpOworICAg
IHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKK30KKworSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZXRocm93LCB2b2lkKiwgKEluc3RhbmNlKiBpbnN0YW5j
ZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIHRocm93blZhbHVlKSkKK3sK
KyAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKworICAgIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGluc3RhbmNlLT5vd25lcjxKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzSW5z
dGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHRo
cm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgSlNWYWx1ZTo6ZGVjb2RlKHRo
cm93blZhbHVlKSk7CisKKyAgICBnZW5lcmljVW53aW5kKHZtLCBjYWxsRnJhbWUpOworICAgIEFT
U0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICBBU1NFUlQoISF2bS50YXJnZXRNYWNo
aW5lUENGb3JUaHJvdyk7CisgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6
CisgICAgLy8gVGhpcyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0
Y2ggYW5kIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb24pCisgICAgLy8gcmVxdWlyZSBh
IGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNlbGluZSBK
SVQgZG9lcyBub3QgcmVxdWlyZQorICAgIC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0
aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZl
bnRpb24KKyAgICAvLyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNo
IGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBiZWZvcmUganVtcGluZworICAgIC8vIHRvIHRoZSBl
eGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRl
cnJpYmxlIGhhY2suCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDQ0MAorICAgIHZtLmNhbGxlZUZvcldhc21DYXRjaCA9IGNhbGxGcmFtZS0+Y2FsbGVl
KCk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxp
bnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihqc0lu
c3RhbmNlLT5tb2R1bGUoKSk7CisgICAgcmV0dXJuIHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93
OworfQorCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRp
b24sIHZvaWQqLCAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFdhc206OkV4Y2VwdGlvblR5cGUgdHlw
ZSwgSW5zdGFuY2UqIHdhc21JbnN0YW5jZSkpCiB7CiAgICAgd2FzbUluc3RhbmNlLT5zdG9yZVRv
cENhbGxGcmFtZShjYWxsRnJhbWUpOwpAQCAtOTMyLDcgKzk4NSw3IEBAIEpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbiwgdm9pZCosIChDYWxsRnJhbWUq
IGNhbGxGcmFtCiAgICAgICAgIGlmICh0eXBlID09IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZs
b3cpCiAgICAgICAgICAgICBlcnJvciA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxP
YmplY3QpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvciA9IGNyZWF0ZUpTV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9y
RXhjZXB0aW9uVHlwZSh0eXBlKSk7CisgICAgICAgICAgICBlcnJvciA9IGNyZWF0ZUpTV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgdHlwZSk7CiAgICAgICAgIHRocm93
RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZXJyb3IpOwogICAgIH0KIApAQCAt
OTQ2LDEwICs5OTksMzQgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21U
b0pTRXhjZXB0aW9uLCB2b2lkKiwgKENhbGxGcmFtZSogY2FsbEZyYW0KICAgICAvLyBmb3IgZXhj
ZXB0aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdp
c3RlciBiZWZvcmUganVtcGluZwogICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYg
d2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAorICAgIHZtLmNh
bGxlZUZvcldhc21DYXRjaCA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CiAgICAgYml0d2lzZV9jYXN0
PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSldID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOwogICAg
IHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKIH0KIAorSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFi
bGUsIFBvaW50ZXJQYWlyLCAoSW5zdGFuY2UqIGluc3RhbmNlKSkKK3sKKyAgICBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUlu
c3RhbmNlPigpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNl
LT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBSRUxFQVNF
X0FTU0VSVCghIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworCisgICAgRXhjZXB0aW9uKiBleGNl
cHRpb24gPSB0aHJvd1Njb3BlLmV4Y2VwdGlvbigpOworICAgIEpTVmFsdWUgdGhyb3duVmFsdWUg
PSBleGNlcHRpb24tPnZhbHVlKCk7CisKKyAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBleGNl
cHRpb24gaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgY2F0Y2ggcHJvbG9ndWUKKyAgICAvLyBKSVQg
Y29kZSBiZWNhdXNlIGNsZWFyaW5nIGl0IGFsc28gZW50YWlscyBjbGVhcmluZyBhIGJpdCBpbiBh
biBBdG9taWMKKyAgICAvLyBiaXQgZmllbGQgaW4gVk1UcmFwcy4KKyAgICB0aHJvd1Njb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CisKKyAgICB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cjsKKyAgICBpZiAo
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogd2FzbUV4Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbio+KHZtLCB0aHJvd25WYWx1ZSkpCisgICAgICAgIHBheWxvYWQg
PSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHdhc21FeGNlcHRpb24tPnBheWxvYWQoKS5kYXRhKCkpOwor
ICAgIHJldHVybiBQb2ludGVyUGFpciB7IGJpdHdpc2VfY2FzdDx2b2lkKj4oSlNWYWx1ZTo6ZW5j
b2RlKHRocm93blZhbHVlKSksIHBheWxvYWQgfTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KIAogSUdOT1JFX1dBUk5JTkdTX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PcGVyYXRpb25zLmgKaW5kZXggZWViZTViNzY0YmE4OTc4Yzk0NDJlYjUxODI4MTA4NzJj
NjcyNGNhNC4uNWVjN2E1OTQ3Y2M3MzhjM2IyYjliYjI1ZDdlNWE2MDhmMWIyNmVkOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5oCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoUmV0dXJuVHlw
ZS5oIgogI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisjaW5jbHVkZSAiV2FzbU9TUkVu
dHJ5RGF0YS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDYsNiArNDcsOCBAQCBuYW1lc3Bh
Y2UgV2FzbSB7CiBjbGFzcyBJbnN0YW5jZTsKIGNsYXNzIFNpZ25hdHVyZTsKIAordm9pZCBsb2Fk
VmFsdWVzSW50b0J1ZmZlcihQcm9iZTo6Q29udGV4dCYsIGNvbnN0IFN0YWNrTWFwJiwgdWludDY0
X3QqIGJ1ZmZlcik7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCiBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UcmlnZ2VyT1NSRW50cnlOb3csIHZvaWQsIChQ
cm9iZTo6Q29udGV4dCYpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bVRyaWdnZXJUaWVyVXBOb3csIHZvaWQsIChJbnN0YW5jZSosIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgpKTsKQEAgLTY2LDI2ICs2OSwzNCBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbldhc21Xcml0ZUJhcnJpZXJTbG93UGF0aCwgdm9pZCwgKEpTQ2VsbCosIFZNKgogSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Qb3Bjb3VudDMyLCB1aW50MzJfdCwgKGludDMy
X3QpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUG9wY291bnQ2NCwgdWlu
dDY0X3QsIChpbnQ2NF90KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdy
b3dNZW1vcnksIGludDMyX3QsICh2b2lkKiwgSW5zdGFuY2UqLCBpbnQzMl90KSk7Ci1KU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlGaWxsLCBib29sLCAoSW5zdGFu
Y2UqLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCB0YXJnZXRWYWx1ZSwgdWludDMyX3Qg
Y291bnQpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUNv
cHksIGJvb2wsIChJbnN0YW5jZSosIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHNyY0Fk
ZHJlc3MsIHVpbnQzMl90IGNvdW50KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbldhc21NZW1vcnlGaWxsLCBzaXplX3QsIChJbnN0YW5jZSosIHVpbnQzMl90IGRzdEFkZHJl
c3MsIHVpbnQzMl90IHRhcmdldFZhbHVlLCB1aW50MzJfdCBjb3VudCkpOworSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSwgc2l6ZV90LCAoSW5zdGFuY2Uq
LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1aW50MzJfdCBjb3Vu
dCkpOwogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFdhc21UYWJsZUVs
ZW1lbnQsIEVuY29kZWRKU1ZhbHVlLCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgaW50MzJfdCkpOwot
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25TZXRXYXNtVGFibGVFbGVtZW50LCBi
b29sLCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgdWludDMyX3QsIEVuY29kZWRKU1ZhbHVlIGVuY1Zh
bHVlKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNldFdhc21UYWJsZUVs
ZW1lbnQsIHNpemVfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQsIHVpbnQzMl90LCBFbmNvZGVkSlNW
YWx1ZSBlbmNWYWx1ZSkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNt
UmVmRnVuYywgRW5jb2RlZEpTVmFsdWUsIChJbnN0YW5jZSosIHVpbnQzMl90KSk7Ci1KU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUluaXQsIGJvb2wsIChJbnN0YW5j
ZSosIHVuc2lnbmVkIGVsZW1lbnRJbmRleCwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3Qg
ZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkpOworSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVJbml0LCBzaXplX3QsIChJbnN0
YW5jZSosIHVuc2lnbmVkIGVsZW1lbnRJbmRleCwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMy
X3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkpOwogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtRWxlbURyb3AsIHZvaWQsIChJbnN0
YW5jZSosIHVuc2lnbmVkIGVsZW1lbnRJbmRleCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtVGFibGVHcm93LCBpbnQzMl90LCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwg
RW5jb2RlZEpTVmFsdWUgZmlsbCwgdWludDMyX3QgZGVsdGEpKTsKLUpTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwgYm9vbCwgKEluc3RhbmNlKiwgdW5zaWdu
ZWQsIHVpbnQzMl90IG9mZnNldCwgRW5jb2RlZEpTVmFsdWUgZmlsbCwgdWludDMyX3QgY291bnQp
KTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlQ29weSwgYm9v
bCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZHN0VGFibGVJbmRleCwgdW5zaWduZWQgc3JjVGFibGVJ
bmRleCwgaW50MzJfdCBkc3RPZmZzZXQsIGludDMyX3Qgc3JjT2Zmc2V0LCBpbnQzMl90IGxlbmd0
aCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVGaWxsLCBz
aXplX3QsIChJbnN0YW5jZSosIHVuc2lnbmVkLCB1aW50MzJfdCBvZmZzZXQsIEVuY29kZWRKU1Zh
bHVlIGZpbGwsIHVpbnQzMl90IGNvdW50KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbldhc21UYWJsZUNvcHksIHNpemVfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZHN0VGFi
bGVJbmRleCwgdW5zaWduZWQgc3JjVGFibGVJbmRleCwgaW50MzJfdCBkc3RPZmZzZXQsIGludDMy
X3Qgc3JjT2Zmc2V0LCBpbnQzMl90IGxlbmd0aCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25HZXRXYXNtVGFibGVTaXplLCBpbnQzMl90LCAoSW5zdGFuY2UqLCB1bnNpZ25l
ZCkpOwogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk1lbW9yeUF0b21pY1dh
aXQzMiwgaW50MzJfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgYmFzZSwgdW5zaWdu
ZWQgb2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgaW50NjRfdCB0aW1lb3V0KSk7CiBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk1lbW9yeUF0b21pY1dhaXQ2NCwgaW50MzJfdCwgKElu
c3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgYmFzZSwgdW5zaWduZWQgb2Zmc2V0LCB1aW50NjRf
dCB2YWx1ZSwgaW50NjRfdCB0aW1lb3V0KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbk1lbW9yeUF0b21pY05vdGlmeSwgaW50MzJfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQs
IHVuc2lnbmVkLCBpbnQzMl90KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bldhc21NZW1vcnlJbml0LCBib29sLCAoSW5zdGFuY2UqLCB1bnNpZ25lZCBkYXRhU2VnbWVudElu
ZGV4LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1aW50MzJfdCBs
ZW5ndGgpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUlu
aXQsIHNpemVfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCwgdWludDMy
X3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgbGVuZ3RoKSk7CiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21EYXRhRHJvcCwgdm9pZCwgKElu
c3RhbmNlKiwgdW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCkpOwogCitKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbldhc21UaHJvdywgdm9pZCosIChJbnN0YW5jZSosIENhbGxGcmFt
ZSosIHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBFbmNvZGVkSlNWYWx1ZSopKTsKK0pTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVJldGhyb3csIHZvaWQqLCAoSW5zdGFuY2Uq
LCBDYWxsRnJhbWUqLCBFbmNvZGVkSlNWYWx1ZSB0aHJvd25WYWx1ZSkpOworCiBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uLCB2b2lkKiwgKENhbGxG
cmFtZSosIFdhc206OkV4Y2VwdGlvblR5cGUsIEluc3RhbmNlKikpOworc3RydWN0IFBvaW50ZXJQ
YWlyIHsKKyAgICB2b2lkKiBmaXJzdDsKKyAgICB2b2lkKiBzZWNvbmQ7Cit9OworSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklm
Q2F0Y2hhYmxlLCBQb2ludGVyUGFpciwgKEluc3RhbmNlKikpOwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlv
blBhcnNlci5jcHAKaW5kZXggMGY4Y2NiN2UyYzNiNjQxMTYzNWNkOWY1YjA0OGIzNTYzMjA1ZmE3
NC4uY2ZkYWZmZGQ3YTQyY2M4MWU1YmEzYTYxZTRiYWU4ZWY1ZWNiZDNiYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcApAQCAtOTEsNiAr
OTEsOCBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3Vs
dAogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+Z2xvYmFscy50cnlSZXNlcnZlQ2Fw
YWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwg
aW1wb3J0Q291bnQsICIgZ2xvYmFscyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdo
ZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9p
bmZvLT5pbXBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxv
Y2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnRzIik7IC8vIEZJ
WE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5v
dWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0IGZ1bmN0aW9uIHNpZ25hdHVy
ZXMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVz
IGJlbG93LgorICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSkKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRFeGNlcHRpb25TaWduYXR1
cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0
ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnQgZXhjZXB0aW9uIHNp
Z25hdHVyZXMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUg
RklYTUVzIGJlbG93LgogCiAgICAgZm9yICh1aW50MzJfdCBpbXBvcnROdW1iZXIgPSAwOyBpbXBv
cnROdW1iZXIgPCBpbXBvcnRDb3VudDsgKytpbXBvcnROdW1iZXIpIHsKICAgICAgICAgdWludDMy
X3QgbW9kdWxlTGVuOwpAQCAtMTQyLDYgKzE0NCwyMSBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBh
cnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICAgICAgbV9pbmZvLT5nbG9iYWxz
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkV4Y2VwdGlvbjogeworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRp
b25zKCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CisKKyAgICAgICAgICAg
IHVpbnQ4X3QgdGFnVHlwZTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VUludDgodGFnVHlwZSksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0IGV4
Y2VwdGlvbidzIHRhZyB0eXBlIik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRh
Z1R5cGUsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCBleGNlcHRpb24gaGFzIHRhZyB0eXBlICIs
IHRhZ1R5cGUsICIgYnV0IHRoZSBvbmx5IHN1cHBvcnRlZCB0YWcgdHlwZSBpcyAwIik7CisKKyAg
ICAgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4OworICAgICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhjZXB0aW9uU2lnbmF0dXJlSW5k
ZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGV4Y2VwdGlvbiBz
aWduYXR1cmUgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0
cmluZywgIiciKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhjZXB0aW9uU2ln
bmF0dXJlSW5kZXggPj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICJpbnZhbGlkIGV4
Y2VwdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZXhj
ZXB0aW9uU2lnbmF0dXJlSW5kZXgsICIgaXMgb3V0IG9mIHJhbmdlIG9mICIsIG1faW5mby0+dXNl
ZFNpZ25hdHVyZXMuc2l6ZSgpLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVs
ZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8t
PmltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOworICAgICAgICAgICAgU2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1f
aW5mby0+dXNlZFNpZ25hdHVyZXNbZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXhdKTsKKyAgICAgICAg
ICAgIG1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBl
bmQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAg
ICAgfQogCiAgICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3Zl
KG1vZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7
CkBAIC0zNTgsNiArMzc1LDEzIEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VFeHBvcnQoKSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgICAgICAgICAgZ2xvYmFsLmJpbmRpbmdNb2RlID0gR2xv
YmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsKKyAg
ICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhj
ZXB0aW9ucygpLCAid2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOworCisgICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCA+PSBtX2luZm8tPmV4Y2VwdGlvbklu
ZGV4U3BhY2VTaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBleGNl
cHRpb24gbnVtYmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBleGNlcHRpb24gaW5k
ZXggc3BhY2UgIiwgbV9pbmZvLT5leGNlcHRpb25JbmRleFNwYWNlU2l6ZSgpLCAiLCBuYW1lZCAn
IiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBtX2luZm8tPmFkZERlY2xhcmVkRXhj
ZXB0aW9uKGtpbmRJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg
ICB9CiAKICAgICAgICAgbV9pbmZvLT5leHBvcnRzLnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUo
ZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7CkBAIC04MTcsNiArODQxLDI5IEBAIGF1
dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VEYXRhQ291bnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAorYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUV4Y2VwdGlvbigpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VX
ZWJBc3NlbWJseUV4Y2VwdGlvbnMoKSwgIndhc20gZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQi
KTsKKworICAgIHVpbnQzMl90IGV4Y2VwdGlvbkNvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGV4Y2VwdGlvbkNvdW50KSwgImNhbid0IGdldCBFeGNlcHRpb24g
c2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleGNlcHRpb25Db3Vu
dCA+IG1heEV4Y2VwdGlvbnMsICJFeHBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwg
ZXhjZXB0aW9uQ291bnQsICIgbWF4aW11bSAiLCBtYXhFeGNlcHRpb25zKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy50
cnlSZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9uQ291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdo
IG1lbW9yeSBmb3IgIiwgZXhjZXB0aW9uQ291bnQsICIgZXhjZXB0aW9ucyIpOworCisgICAgZm9y
ICh1aW50MzJfdCBleGNlcHRpb25OdW1iZXIgPSAwOyBleGNlcHRpb25OdW1iZXIgPCBleGNlcHRp
b25Db3VudDsgKytleGNlcHRpb25OdW1iZXIpIHsKKyAgICAgICAgdWludDhfdCB0YWdUeXBlOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KHRhZ1R5cGUpLCAiY2FuJ3Qg
Z2V0ICIsIGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2VwdGlvbiB0YWcgdHlwZSIpOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhZ1R5cGUsIGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2Vw
dGlvbiBoYXMgdGFnIHR5cGUgIiwgdGFnVHlwZSwgIiBidXQgdGhlIG9ubHkgc3VwcG9ydGVkIHRh
ZyB0eXBlIGlzIDAiKTsKKworICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSwgImNhbid0IGdl
dCAiLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24ncyB0eXBlIG51bWJlciIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9pbmZvLT51c2VkU2lnbmF0
dXJlcy5zaXplKCksIGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2VwdGlvbiB0eXBlIG51bWJlciBp
cyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJl
c1t0eXBlTnVtYmVyXSk7CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxFeGNlcHRpb25TaWduYXR1
cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7CisgICAgfQorCisgICAg
cmV0dXJuIHsgfTsKK30KIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VDdXN0b20oKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CiAgICAgQ3VzdG9tU2VjdGlvbiBzZWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaAppbmRleCBmMzY5ZTdiODZjYWZhOTNhZDNmODNhZDYw
Y2EwODdjOGY1ODgwZWNhLi5iZWYyMDcwMWY0MGZlNDBiNGEyOGEwYWRjZmM0N2Y2YmYwZDViZmYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaApAQCAtNDUsNyAr
NDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogICAgIG1hY3JvKEVsZW1l
bnQsICAgIDksICJFbGVtZW50cyBzZWN0aW9uIikgXAogICAgIG1hY3JvKENvZGUsICAgICAgMTAs
ICJGdW5jdGlvbiBib2RpZXMgKGNvZGUpIikgXAogICAgIG1hY3JvKERhdGEsICAgICAgMTEsICJE
YXRhIHNlZ21lbnRzIikgXAotICAgIG1hY3JvKERhdGFDb3VudCwgMTIsICJEYXRhIGNvdW50IikK
KyAgICBtYWNybyhEYXRhQ291bnQsIDEyLCAiRGF0YSBjb3VudCIpIFwKKyAgICBtYWNybyhFeGNl
cHRpb24sIDEzLCAiRXhjZXB0aW9uIGRlY2xhcmF0aW9ucyIpIFwKIAogZW51bSBjbGFzcyBTZWN0
aW9uIDogdWludDhfdCB7CiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCBCZWdpbiBpcyBsZXNz
IHRoYW4gZXZlcnkgb3RoZXIgc2VjdGlvbiBudW1iZXIgYW5kIHRoYXQgQ3VzdG9tIGlzIGdyZWF0
ZXIuCkBAIC05MCw2ICs5MSwxMCBAQCBpbmxpbmUgYm9vbCB2YWxpZGF0ZU9yZGVyKFNlY3Rpb24g
cHJldmlvdXNLbm93biwgU2VjdGlvbiBuZXh0KQogICAgIEFTU0VSVChpc0tub3duU2VjdGlvbihw
cmV2aW91c0tub3duKSB8fCBwcmV2aW91c0tub3duID09IFNlY3Rpb246OkJlZ2luKTsKICAgICBp
ZiAocHJldmlvdXNLbm93biA9PSBTZWN0aW9uOjpEYXRhQ291bnQgJiYgbmV4dCA9PSBTZWN0aW9u
OjpDb2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocHJldmlvdXNLbm93biA9PSBT
ZWN0aW9uOjpFeGNlcHRpb24pCisgICAgICAgIHJldHVybiBuZXh0ID49IFNlY3Rpb246Okdsb2Jh
bDsKKyAgICBpZiAobmV4dCA9PSBTZWN0aW9uOjpFeGNlcHRpb24pCisgICAgICAgIHJldHVybiBw
cmV2aW91c0tub3duIDw9IFNlY3Rpb246Ok1lbW9yeTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dWludDhfdD4ocHJldmlvdXNLbm93bikgPCBzdGF0aWNfY2FzdDx1aW50OF90PihuZXh0KTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAppbmRleCA3
MWFhYjNkZjc1NzIyZDQwOGM1MThjMTNmNTM4NWMzYWY5YTQ4MDA2Li5mOWE1NjFiODUwZmM1YzE5
MzlkMGVmNTllOGE5ZmQyYjYwNTk3OGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU2lnbmF0dXJlLmNwcApAQCAtOTYsNyArOTYsNyBAQCBSZWZQdHI8U2lnbmF0dXJlPiBT
aWduYXR1cmU6OnRyeUNyZWF0ZShTaWduYXR1cmVBcmdDb3VudCByZXR1cm5Db3VudCwgU2lnbmF0
dXJlQQogCiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6U2lnbmF0dXJlSW5mb3JtYXRpb24oKQogewot
I2RlZmluZSBNQUtFX1RIVU5LX1NJR05BVFVSRSh0eXBlLCBlbmMsIHN0ciwgdmFsKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBNQUtFX1RIVU5LX1NJR05BVFVSRSh0eXBlLCBl
bmMsIHN0ciwgdmFsLCBfKSAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICBpZiAoVHlwZUtpbmQ6OnR5cGUgIT0gVHlwZUtpbmQ6OlZvaWQpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4g
c2lnID0gU2lnbmF0dXJlOjp0cnlDcmVhdGUoMSwgMCk7ICAgICAgICAgICAgXApAQCAtMTY1LDYg
KzE2NSwxMCBAQCBzdHJ1Y3QgUGFyYW1ldGVyVHlwZXMgewogCiBSZWZQdHI8U2lnbmF0dXJlPiBT
aWduYXR1cmVJbmZvcm1hdGlvbjo6c2lnbmF0dXJlRm9yKGNvbnN0IFZlY3RvcjxUeXBlLCAxPiYg
cmVzdWx0cywgY29uc3QgVmVjdG9yPFR5cGU+JiBhcmdzKQogeworICAgIGlmIGNvbnN0ZXhwciAo
QVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHRzLmNvbnRhaW5zKFdhc206
OlR5cGVzOjpWb2lkKSk7CisgICAgICAgIEFTU0VSVCghYXJncy5jb250YWlucyhXYXNtOjpUeXBl
czo6Vm9pZCkpOworICAgIH0KICAgICBTaWduYXR1cmVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmds
ZXRvbigpOwogICAgIExvY2tlciBsb2NrZXIgeyBpbmZvLm1fbG9jayB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IGQ5ZmFmNWQ1OWQ5OWY1
ZTkwNGMzYTdiMjQwMDdkMDkxZmQxZDljMTcuLmFkNTEzNWU3YWQ2NTc4YzM5NzYxYmQ3ZDNiNTY4
YTBmZDJiZjYwNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21T
bG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0
aHMuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5j
bHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgorI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJXYXNtQkJRUGxh
bi5oIgpAQCAtNTg2LDYgKzU4OCwxMTEgQEAgV0FTTV9TTE9XX1BBVEhfREVDTChtZW1vcnlfYXRv
bWljX25vdGlmeSkKICAgICBXQVNNX1JFVFVSTihyZXN1bHQpOwogfQogCitXQVNNX1NMT1dfUEFU
SF9ERUNMKHRocm93KQoreworICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFtZShjYWxsRnJh
bWUpOworCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3RhbmNlID0gaW5zdGFuY2Ut
Pm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHBjLT5hczxXYXNtVGhyb3csIFdhc21P
cGNvZGVUcmFpdHM+KCk7CisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcgPSBpbnN0YW5jZS0+dGFn
KGluc3RydWN0aW9uLm1fZXhjZXB0aW9uSW5kZXgpOworCisgICAgRml4ZWRWZWN0b3I8dWludDY0
X3Q+IHZhbHVlcyh0YWcucGFyYW1ldGVyQ291bnQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHRhZy5wYXJhbWV0ZXJDb3VudCgpOyArK2kpCisgICAgICAgIHZhbHVlc1tpXSA9IFJF
QUQoKGluc3RydWN0aW9uLm1fZmlyc3RWYWx1ZSAtIGkpKS5lbmNvZGVkSlNWYWx1ZSgpOworCisg
ICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogZXhjZXB0aW9uID0gSlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RXhjZXB0aW9uU3RydWN0
dXJlKCksIHRhZywgV1RGTW92ZSh2YWx1ZXMpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGV4Y2VwdGlvbik7CisKKyAgICBnZW5lcmljVW53aW5kKHZtLCBj
YWxsRnJhbWUpOworICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICBBU1NF
UlQoISF2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CisgICAgLy8gRklYTUU6IFdlIGNvdWxk
IG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhpcyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUg
bGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb24p
CisgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBW
TS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQorICAgIC8vIHRoaXMgc2luY2Ug
aXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtl
IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KKyAgICAvLyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBsb2Fk
IGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBiZWZvcmUganVtcGlu
ZworICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNv
dWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAorICAgIHZtLmNhbGxlZUZvcldhc21DYXRjaCA9
IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZy
YW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pihqc0luc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgV0FTTV9SRVRVUk5fVFdP
KHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93LCBudWxscHRyKTsKK30KKworV0FTTV9TTE9XX1BB
VEhfREVDTChyZXRocm93KQoreworICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFtZShjYWxs
RnJhbWUpOworCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3RhbmNlID0gaW5zdGFu
Y2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKKyAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHBjLT5hczxXYXNtUmV0aHJvdywg
V2FzbU9wY29kZVRyYWl0cz4oKTsKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IFJFQUQoaW5zdHJ1
Y3Rpb24ubV9leGNlcHRpb24pLmpzVmFsdWUoKTsKKyAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGV4Y2VwdGlvbik7CisKKyAgICBnZW5lcmljVW53aW5kKHZtLCBj
YWxsRnJhbWUpOworICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICBBU1NF
UlQoISF2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CisgICAgLy8gRklYTUU6IFdlIGNvdWxk
IG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhpcyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUg
bGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb24p
CisgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBW
TS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQorICAgIC8vIHRoaXMgc2luY2Ug
aXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtl
IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KKyAgICAvLyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBsb2Fk
IGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBiZWZvcmUganVtcGlu
ZworICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNv
dWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAorICAgIHZtLmNhbGxlZUZvcldhc21DYXRjaCA9
IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2FsbEZy
YW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pihqc0luc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgV0FTTV9SRVRVUk5fVFdP
KHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93LCBudWxscHRyKTsKK30KKworV0FTTV9TTE9XX1BB
VEhfREVDTChyZXRyaWV2ZV9hbmRfY2xlYXJfZXhjZXB0aW9uKQoreworICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGlu
c3RhbmNlLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCEhdGhyb3dTY29wZS5leGNlcHRp
b24oKSk7CisKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHRocm93U2NvcGUuZXhjZXB0aW9u
KCk7CisgICAgSlNWYWx1ZSB0aHJvd25WYWx1ZSA9IGV4Y2VwdGlvbi0+dmFsdWUoKTsKKyAgICB2
b2lkKiBwYXlsb2FkID0gbnVsbHB0cjsKKworICAgIGNvbnN0IGF1dG8mIGhhbmRsZUNhdGNoQWxs
ID0gWyZdKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uKSB7CisgICAgICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihpbnN0cnVjdGlvbi5tX2V4Y2VwdGlvbikgPSB0aHJvd25WYWx1ZTsKKyAgICB9Owor
CisgICAgY29uc3QgYXV0byYgaGFuZGxlQ2F0Y2ggPSBbJl0oY29uc3QgYXV0byYgaW5zdHJ1Y3Rp
b24pIHsKKyAgICAgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiogd2FzbUV4Y2VwdGlvbiA9IGpz
RHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2VwdGlvbio+KHZtLCB0aHJvd25WYWx1ZSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhd2FzbUV4Y2VwdGlvbik7CisgICAgICAgIHBheWxvYWQg
PSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHdhc21FeGNlcHRpb24tPnBheWxvYWQoKS5kYXRhKCkpOwor
ICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoaW5zdHJ1Y3Rpb24ubV9leGNlcHRpb24pID0g
dGhyb3duVmFsdWU7CisgICAgfTsKKworICAgIGlmIChwYy0+aXM8V2FzbUNhdGNoLCBXYXNtT3Bj
b2RlVHJhaXRzPigpKQorICAgICAgICBoYW5kbGVDYXRjaChwYy0+YXM8V2FzbUNhdGNoLCBXYXNt
T3Bjb2RlVHJhaXRzPigpKTsKKyAgICBlbHNlIGlmIChwYy0+aXM8V2FzbUNhdGNoQWxsLCBXYXNt
T3Bjb2RlVHJhaXRzPigpKQorICAgICAgICBoYW5kbGVDYXRjaEFsbChwYy0+YXM8V2FzbUNhdGNo
QWxsLCBXYXNtT3Bjb2RlVHJhaXRzPigpKTsKKyAgICBlbHNlIGlmIChwYy0+aXM8V2FzbUNhdGNo
Tm9UbHMsIFdhc21PcGNvZGVUcmFpdHM+KCkpCisgICAgICAgIGhhbmRsZUNhdGNoKHBjLT5hczxX
YXNtQ2F0Y2hOb1RscywgV2FzbU9wY29kZVRyYWl0cz4oKSk7CisgICAgZWxzZSBpZiAocGMtPmlz
PFdhc21DYXRjaEFsbE5vVGxzLCBXYXNtT3Bjb2RlVHJhaXRzPigpKQorICAgICAgICBoYW5kbGVD
YXRjaEFsbChwYy0+YXM8V2FzbUNhdGNoQWxsTm9UbHMsIFdhc21PcGNvZGVUcmFpdHM+KCkpOwor
ICAgIGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIC8v
IFdlIHdhbnQgdG8gY2xlYXIgdGhlIGV4Y2VwdGlvbiBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBj
YXRjaCBwcm9sb2d1ZQorICAgIC8vIEpJVCBjb2RlIGJlY2F1c2UgY2xlYXJpbmcgaXQgYWxzbyBl
bnRhaWxzIGNsZWFyaW5nIGEgYml0IGluIGFuIEF0b21pYworICAgIC8vIGJpdCBmaWVsZCBpbiBW
TVRyYXBzLgorICAgIHRocm93U2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICBXQVNNX1JFVFVS
Tl9UV08ocGMsIHBheWxvYWQpOworfQorCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBz
bG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0
IEluc3RydWN0aW9uKiBwYywgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpFeGNlcHRp
b25UeXBlIGV4Y2VwdGlvblR5cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuaAppbmRleCA3NzYyMTE4MzM4YTdiNzA2
OTY5YjI1YjUyY2UxNmUyYzNkYzdiZDRlLi5iNjRjZTdjZGU0MWFhYTA2ODk3ZThmZmZlZDgyYThk
MDY0MzJkZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xv
d1BhdGhzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5o
CkBAIC04Myw2ICs4Myw5IEBAIFdBU01fU0xPV19QQVRIX0hJRERFTl9ERUNMKHNldF9nbG9iYWxf
cmVmX3BvcnRhYmxlX2JpbmRpbmcpOwogV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wobWVtb3J5
X2F0b21pY193YWl0MzIpOwogV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wobWVtb3J5X2F0b21p
Y193YWl0NjQpOwogV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wobWVtb3J5X2F0b21pY19ub3Rp
ZnkpOworV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0wodGhyb3cpOworV0FTTV9TTE9XX1BBVEhf
SElEREVOX0RFQ0wocmV0aHJvdyk7CitXQVNNX1NMT1dfUEFUSF9ISURERU5fREVDTChyZXRyaWV2
ZV9hbmRfY2xlYXJfZXhjZXB0aW9uKTsKIAogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUg
c2xvd19wYXRoX3dhc21fdGhyb3dfZXhjZXB0aW9uKENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0
aW9uKiwgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpFeGNlcHRpb25UeXBlKSBSRUZF
UkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5U
eXBlIHNsb3dfcGF0aF93YXNtX3BvcGNvdW50KGNvbnN0IEluc3RydWN0aW9uKiBwYywgdWludDMy
X3QpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAppbmRleCBmYTU1MmVmZmYx
NzQxZWNiNWE0YjZjMmY4OWZjYTA5NzU5ZWUzMTVkLi4xMmNkYWE5NjVlYTk4YmExOGFjMjcxNmRj
Yzc2ZTgyNzA4NTAyMTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU3RyZWFtaW5nUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU3RyZWFtaW5nUGFyc2VyLmNwcApAQCAtMTE3LDYgKzExNyw3IEBAIGF1dG8gU3RyZWFtaW5n
UGFyc2VyOjpwYXJzZUNvZGVTZWN0aW9uU2l6ZSh1aW50MzJfdCBmdW5jdGlvbkNvdW50KSAtPiBT
dGF0ZQogICAgIG1fZnVuY3Rpb25Db3VudCA9IGZ1bmN0aW9uQ291bnQ7CiAgICAgbV9mdW5jdGlv
bkluZGV4ID0gMDsKICAgICBtX2NvZGVPZmZzZXQgPSBtX29mZnNldDsKKyAgICBtX2luZm8tPm1f
ZnVuY3Rpb25Eb2VzTm90VXNlRXhjZXB0aW9ucy5lbnN1cmVTaXplKGZ1bmN0aW9uQ291bnQpOwog
CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkNvdW50ID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcg
IiwgZnVuY3Rpb25Db3VudCk7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkNvdW50
ICE9IG1faW5mby0+ZnVuY3Rpb25zLnNpemUoKSwgIkNvZGUgc2VjdGlvbiBjb3VudCAiLCBmdW5j
dGlvbkNvdW50LCAiIGV4Y2VlZHMgdGhlIGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwg
bV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UYWcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRh
Zy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTBmNWE4NDdmZDgyYjhjODNmMGVkOGYyYWE1MzZhZTE0MWYyNjMy
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcu
Y3BwCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbVRhZy5oIgorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBXYXNt
IHsKKworc3RkOjphdG9taWM8dWludDMyX3Q+IFRhZzo6c19pZCA9IDA7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRhZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhZy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQyYzc2NDEwMzQ5MDA0OWFmNWRiNDQxZjMyODRlZTcwZDQzMjg3ZTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmgKQEAg
LTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAi
V2FzbVNpZ25hdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitj
bGFzcyBUYWcgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGFnPiB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGFnKTsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPFRhZz4gY3JlYXRlKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFRhZyhzaWduYXR1cmUpKTsgfQorCisgICAgU2lnbmF0
dXJlQXJnQ291bnQgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpOyB9CisgICAgVHlwZSBwYXJhbWV0ZXIoU2lnbmF0dXJlQXJnQ291bnQg
aSkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50KGkpOyB9CisKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgVGFnJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pZCA9PSBvdGhl
ci5tX2lkOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRhZyYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuIG1faWQgIT0gb3RoZXIubV9pZDsgfQorCisgICAgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZS5nZXQoKTsgfQorCitwcml2YXRlOgor
ICAgIFRhZyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKKyAgICAgICAgOiBtX2lkKCsrc19p
ZCkKKyAgICAgICAgLCBtX3NpZ25hdHVyZShSZWYgeyBzaWduYXR1cmUgfSkKKyAgICB7CisgICAg
fQorCisgICAgc3RhdGljIHN0ZDo6YXRvbWljPHVpbnQzMl90PiBzX2lkOworICAgIHVpbnQzMl90
IG1faWQ7CisgICAgUmVmPGNvbnN0IFNpZ25hdHVyZT4gbV9zaWduYXR1cmU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAppbmRleCA3OWQxYmNmZjg5
ZmIwNGUyMmVkNTRmMmY2NDA4YmUwOWYyOTNkMGMzLi5mZWMyYTEzNzc5YmYyN2Y2NDhmYWEzOGE1
ZWY4NjQ4ZTA5NDg1YzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtz
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI4LDggKzI4LDExIEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNp
bmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJDQ2Fs
bEhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1
ZGUgIldhc21JbnN0YW5jZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5o
CmluZGV4IGMyMzVjZmU2Mjk1ZTY2OWFlNWE4MGVlOGYyNTJlYTZjYTI0MzFiODMuLmY0NWRlYjJh
NTk2Y2FhMjU3ZTMzMWVkMjFlZjA5ZTA2YjA1ZWM1MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGh1bmtzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5
CmluZGV4IDFlMzgwZGVmMWNkOGNiNjc2MDc1ZWQzMjU1NzliMGY1MWQxYmNlNTUuLjk2NzdlYjgz
ZDk2YTdhZDY0ZmI1MTQ3YTQyYjRhODU4ZDk1OTQwNDcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0
b3JJbmxpbmVzSGVhZGVyLnB5CkBAIC0xNDQsNyArMTQ0LDcgQEAgY2xhc3MgQ29kZUdlbmVyYXRv
cjoKICAgICAgICAgICAgIHNlbGYuYWR2YW5jZSgpCiAgICAgICAgICAgICBzZWxmLmNvbnN1bWUo
IikiKQogICAgICAgICBlbGlmIGFyZ3VtZW50UmVnZXgubWF0Y2goc2VsZi50b2tlbigpKToKLSAg
ICAgICAgICAgIHJlc3VsdCA9ICJhcmciICsgc2VsZi50b2tlbigpWzE6XQorICAgICAgICAgICAg
cmVzdWx0ID0gImdldChhcmciICsgc2VsZi50b2tlbigpWzE6XSArICIpIgogICAgICAgICAgICAg
c2VsZi5hZHZhbmNlKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG9wID0gc2VsZi50b2tl
bigpCkBAIC0xNTYsMTMgKzE1NiwxNiBAQCBjbGFzcyBDb2RlR2VuZXJhdG9yOgogCiAgICAgICAg
IHJldHVybiByZXN1bHQKIAorICAgIGRlZiBtYWtlUmVzdWx0KHNlbGYsIHJlc3VsdFZhbHVlKToK
KyAgICAgICAgcmV0dXJuIHJlc3VsdFZhbHVlICsgIjtcbiIgKyAicmVzdWx0ID0gcHVzaChyZXN1
bHRWYWx1ZS0+dHlwZSgpKTtcbiIgKyAibV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihtX3Byb2MsIFNldCwgb3JpZ2luKCksIHJlc3VsdCwgcmVzdWx0VmFsdWUpOyIKKwog
ICAgIGRlZiBnZW5lcmF0ZShzZWxmLCB3YXNtT3ApOgogICAgICAgICBpZiBsZW4oc2VsZi50b2tl
bnMpID09IDE6Ci0gICAgICAgICAgICBwYXJhbXMgPSBbImFyZyIgKyBzdHIocGFyYW0pIGZvciBw
YXJhbSBpbiByYW5nZShsZW4od2FzbU9wWyJwYXJhbWV0ZXIiXSkpXQotICAgICAgICAgICAgcmV0
dXJuICIgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBCMzo6IiArIHNlbGYudG9rZW4oKSArICIsIG9yaWdpbigpLCAiICsgIiwgIi5qb2luKHBhcmFt
cykgKyAiKSIKKyAgICAgICAgICAgIHBhcmFtcyA9IFsiZ2V0KGFyZyIgKyBzdHIocGFyYW0pICsg
IikiIGZvciBwYXJhbSBpbiByYW5nZShsZW4od2FzbU9wWyJwYXJhbWV0ZXIiXSkpXQorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYubWFrZVJlc3VsdCgiICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OiIgKyBzZWxmLnRva2Vu
KCkgKyAiLCBvcmlnaW4oKSwgIiArICIsICIuam9pbihwYXJhbXMpICsgIikiKQogICAgICAgICBy
ZXN1bHQgPSBzZWxmLmdlbmVyYXRlT3Bjb2RlKCkKLSAgICAgICAgc2VsZi5jb2RlLmFwcGVuZCgi
cmVzdWx0ID0gIiArIHJlc3VsdCkKLSAgICAgICAgcmV0dXJuICIgICAgIiArICIgICAgXG4iLmpv
aW4oc2VsZi5jb2RlKQorICAgICAgICBzZWxmLmNvZGUuYXBwZW5kKCJWYWx1ZSogcmVzdWx0VmFs
dWUgPSAiICsgcmVzdWx0KQorICAgICAgICByZXR1cm4gc2VsZi5tYWtlUmVzdWx0KCIgICAgIiAr
ICIgICAgXG4iLmpvaW4oc2VsZi5jb2RlKSkKIAogCiBkZWYgdGVtcChpbmRleCk6CkBAIC0xOTEs
NyArMTk0LDcgQEAgZGVmIGdlbmVyYXRlU2ltcGxlQ29kZShvcCk6CiAgICAgcmV0dXJuICIiIgog
dGVtcGxhdGU8PiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6IiIiICsgd2FzbS50
b0NwcChvcFsibmFtZSJdKSArICI+KCIgKyAiLCAiLmpvaW4oYXJncykgKyAiIiIpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKLSIiIiArIGdlbmVyYXRlQjNDb2RlKG9wY29kZSwgYjNvcCkgKyAiIiI7Cisi
IiIgKyBnZW5lcmF0ZUIzQ29kZShvcGNvZGUsIGIzb3ApICsgIiIiCiAgICAgcmV0dXJuIHsgfTsK
IH0KICIiIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVX
YXNtT3BzSGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNt
T3BzSGVhZGVyLnB5CmluZGV4IGMyMGJmYTU0MmUwODY0YmNkMGFmODI4ZTc5ZDY5MjA4MDRhNTcy
MzcuLjdjY2ZjYWZjNmFmYjMyMTA4Y2I0YTUwOWM1YjkyMDcyYTgxYzc2MjQgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKQEAg
LTUzLDcgKzUzLDcgQEAgZGVmIGNwcE1hY3JvKHdhc21PcGNvZGUsIHZhbHVlLCBiMywgaW5jLCAq
ZXh0cmFBcmdzKToKIGRlZiB0eXBlTWFjcm9pemVyKCk6CiAgICAgaW5jID0gMAogICAgIGZvciB0
eSBpbiB3YXNtLnR5cGVzOgotICAgICAgICB5aWVsZCBjcHBNYWNybyh0eSwgd2FzbS50eXBlc1t0
eV1bInZhbHVlIl0sIHdhc20udHlwZXNbdHldWyJiM3R5cGUiXSwgaW5jKQorICAgICAgICB5aWVs
ZCBjcHBNYWNybyh0eSwgd2FzbS50eXBlc1t0eV1bInZhbHVlIl0sIHdhc20udHlwZXNbdHldWyJi
M3R5cGUiXSwgaW5jLCB0eSkKICAgICAgICAgaW5jICs9IDEKIAogdHlwZV9kZWZpbml0aW9ucyA9
IFsiI2RlZmluZSBGT1JfRUFDSF9XQVNNX1RZUEUobWFjcm8pIl0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKaW5kZXggNzE4YmNiOTc1NTZlZjQ1
YTgyZDNkYjllNGJhMDc3NTgwYmJjOWU1Ni4uNzhmMTc2YWI2M2EyNjVlMTU0OWQ1ZDcyY2IzNjJj
YTdlODU0N2NkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseS5jcHAKQEAgLTc4LDYgKzc4LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1i
bHk6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5IiwgJkJhc2U6OnNfaW5mbywgJndlYkFzc2UKIC8q
IFNvdXJjZSBmb3IgSlNXZWJBc3NlbWJseS5sdXQuaAogQGJlZ2luIHdlYkFzc2VtYmx5VGFibGUK
ICAgQ29tcGlsZUVycm9yICAgIGNyZWF0ZVdlYkFzc2VtYmx5Q29tcGlsZUVycm9yICBEb250RW51
bXxQcm9wZXJ0eUNhbGxiYWNrCisgIEV4Y2VwdGlvbiAgICAgICBjcmVhdGVXZWJBc3NlbWJseUV4
Y2VwdGlvbiAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawogICBHbG9iYWwgICAgICAgICAg
Y3JlYXRlV2ViQXNzZW1ibHlHbG9iYWwgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sK
ICAgSW5zdGFuY2UgICAgICAgIGNyZWF0ZVdlYkFzc2VtYmx5SW5zdGFuY2UgICAgICBEb250RW51
bXxQcm9wZXJ0eUNhbGxiYWNrCiAgIExpbmtFcnJvciAgICAgICBjcmVhdGVXZWJBc3NlbWJseUxp
bmtFcnJvciAgICAgRG9udEVudW18UHJvcGVydHlDYWxsYmFjawpAQCAtODUsNiArODYsNyBAQCBj
b25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkiLCAm
QmFzZTo6c19pbmZvLCAmd2ViQXNzZQogICBNb2R1bGUgICAgICAgICAgY3JlYXRlV2ViQXNzZW1i
bHlNb2R1bGUgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKICAgUnVudGltZUVycm9y
ICAgIGNyZWF0ZVdlYkFzc2VtYmx5UnVudGltZUVycm9yICBEb250RW51bXxQcm9wZXJ0eUNhbGxi
YWNrCiAgIFRhYmxlICAgICAgICAgICBjcmVhdGVXZWJBc3NlbWJseVRhYmxlICAgICAgICAgRG9u
dEVudW18UHJvcGVydHlDYWxsYmFjaworICBUYWcgICAgICAgICAgICAgY3JlYXRlV2ViQXNzZW1i
bHlUYWcgICAgICAgICAgIERvbnRFbnVtfFByb3BlcnR5Q2FsbGJhY2sKICAgY29tcGlsZSAgICAg
ICAgIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMgICAgICAgICBGdW5jdGlvbiAxCiAgIGluc3RhbnRp
YXRlICAgICB3ZWJBc3NlbWJseUluc3RhbnRpYXRlRnVuYyAgICAgRnVuY3Rpb24gMQogICB2YWxp
ZGF0ZSAgICAgICAgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMgICAgICAgIEZ1bmN0aW9uIDEKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNl
cHRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTAzZDQzMDMzY2VhZDVmMWI0M2I2Y2Q2NTFmMzZhNzg1
MmZmMDE4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpzX2luZm8gPSB7
ICJXZWJBc3NlbWJseS5FeGNlcHRpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlFeGNlcHRpb24pIH07CisKK0pTV2Vi
QXNzZW1ibHlFeGNlcHRpb246OkpTV2ViQXNzZW1ibHlFeGNlcHRpb24oVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcsIEZpeGVkVmVjdG9yPHVpbnQ2NF90
PiYmIHBheWxvYWQpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3RhZyhSZWYg
eyB0YWcgfSkKKyAgICAsIG1fcGF5bG9hZChXVEZNb3ZlKHBheWxvYWQpKQoreworfQorCit2b2lk
IEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisKKyAgICBhdXRv
KiBleGNlcHRpb24gPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2VwdGlvbio+KGNlbGwpOworICAg
IGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gZXhjZXB0aW9uLT50YWcoKS5zaWdu
YXR1cmUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChpc1JlZlR5cGUoc2lnbmF0dXJlLmFyZ3VtZW50
KGkpKSkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+KGV4Y2VwdGlvbi0+cGF5bG9hZCgpW2ldKSk7CisgICAgfQorfQorCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJseUV4Y2VwdGlvbik7CisKK3ZvaWQgSlNXZWJB
c3NlbWJseUV4Y2VwdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nh
c3Q8SlNXZWJBc3NlbWJseUV4Y2VwdGlvbio+KGNlbGwpLT5KU1dlYkFzc2VtYmx5RXhjZXB0aW9u
Ojp+SlNXZWJBc3NlbWJseUV4Y2VwdGlvbigpOworfQorCitKU1ZhbHVlIEpTV2ViQXNzZW1ibHlF
eGNlcHRpb246OmdldEFyZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBp
KSBjb25zdAoreworICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gdGFnKCku
c2lnbmF0dXJlKCk7CisgICAgQVNTRVJUKGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsK
KyAgICByZXR1cm4gdG9KU1ZhbHVlKGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50KGkp
LCBwYXlsb2FkKClbaV0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOTJkMzc4MmZhMTU2ZGJl
MDY0NWIwYWM4N2Q3NzFhZmQyZTQzZWIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oCkBAIC0wLDAgKzEsNzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21UYWcuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlFeGNlcHRpb24gZmluYWwg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpT
Tm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOworCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgorICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHZtLndlYkFzc2VtYmx5RXhjZXB0aW9uU3BhY2U8bW9kZT4oKTsKKyAgICB9CisKKyAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhFcnJvckluc3RhbmNlVHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBj
cmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcs
IEZpeGVkVmVjdG9yPHVpbnQ2NF90PiYmIHBheWxvYWQpCisgICAgeworICAgICAgICBKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uKiBleGNlcHRpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U1dlYkFzc2VtYmx5RXhjZXB0aW9uPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbih2
bSwgc3RydWN0dXJlLCB0YWcsIFdURk1vdmUocGF5bG9hZCkpOworICAgICAgICBleGNlcHRpb24t
PmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgICB9CisK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCisgICAgY29uc3QgV2FzbTo6VGFnJiB0YWco
KSBjb25zdCB7IHJldHVybiBtX3RhZy5nZXQoKTsgfQorICAgIGNvbnN0IEZpeGVkVmVjdG9yPHVp
bnQ2NF90PiYgcGF5bG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF5bG9hZDsgfQorICAgIEpTVmFs
dWUgZ2V0QXJnKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpIGNvbnN0OworCitwcm90ZWN0ZWQ6
CisgICAgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbihWTSYsIFN0cnVjdHVyZSosIGNvbnN0IFdhc206
OlRhZyYsIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKKworICAgIFJlZjxjb25zdCBXYXNtOjpUYWc+IG1fdGFnOworICAgIEZpeGVkVmVj
dG9yPHVpbnQ2NF90PiBtX3BheWxvYWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCmluZGV4IGQ4ZjI2NTBjYWE1ODY3MjM1
NGJkNWYzOWY3ZGVhYjY0MTBkMDA1NGMuLmI2MjBlZGNhMjhhOWUyNDI5ZjEyMGNlMTk2N2EzYjBj
MTEyMTM1NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUhlbHBlcnMuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXlC
dWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTU291cmNl
Q29kZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRl
ICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgiCkBAIC0xNDQsNiArMTQ1LDc1IEBAIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBkZWZhdWx0VmFsdWVGb3JSZWZlcmVuY2VUeXBlKGNvbnN0IFdh
c206OlR5cGUgdHlwZSkKICAgICByZXR1cm4ganNOdWxsKCk7CiB9CiAKK0FMV0FZU19JTkxJTkUg
SlNWYWx1ZSB0b0pTVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgV2Fz
bTo6VHlwZSB0eXBlLCB1aW50NjRfdCBiaXRzKQoreworICAgIHN3aXRjaCAodHlwZS5raW5kKSB7
CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6Vm9pZDoKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STMyOgorICAgICAgICByZXR1cm4ganNO
dW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYml0cykpOworICAgIGNhc2UgV2FzbTo6VHlwZUtp
bmQ6OkYzMjoKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGJpdHdpc2VfY2FzdDxmbG9hdD4oc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oYml0cykpKTsKKyAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGNjQ6
CisgICAgICAgIHJldHVybiBqc051bWJlcihiaXR3aXNlX2Nhc3Q8ZG91YmxlPihiaXRzKSk7Cisg
ICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STY0OgorICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNy
ZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnQ2NF90PihiaXRzKSk7CisgICAg
Y2FzZSBXYXNtOjpUeXBlS2luZDo6RXh0ZXJucmVmOgorICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6
OkZ1bmNyZWY6CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZT4oYml0cyk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEpTVmFsdWUoKTsKK30KKworQUxXQVlTX0lOTElORSB1
aW50NjRfdCBmcm9tSlNWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBX
YXNtOjpUeXBlIHR5cGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBzd2l0Y2ggKHR5cGUua2luZCkgeworICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlR5cGVJZHg6
CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RnVuY3JlZjogeworICAgICAgICBib29sIGlzTnVs
bGFibGUgPSB0eXBlLmlzTnVsbGFibGUoKTsKKyAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiog
d2FzbUZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24qIHdhc21XcmFwcGVyRnVuY3Rpb24gPSBudWxscHRyOworICAgICAgICBpZiAoIWlzV2ViQXNz
ZW1ibHlIb3N0RnVuY3Rpb24odm0sIHZhbHVlLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVu
Y3Rpb24pICYmICghaXNOdWxsYWJsZSB8fCAhdmFsdWUuaXNOdWxsKCkpKQorICAgICAgICAgICAg
cmV0dXJuIHRocm93Vk1FeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAiRnVuY3JlZiBtdXN0IGJlIGFu
IGV4cG9ydGVkIHdhc20gZnVuY3Rpb24iKSk7CisgICAgICAgIGlmICh0eXBlLmtpbmQgPT0gV2Fz
bTo6VHlwZUtpbmQ6OlR5cGVJZHggJiYgKHdhc21GdW5jdGlvbiB8fCB3YXNtV3JhcHBlckZ1bmN0
aW9uKSkgeworICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggcGFyYW1JbmRleCA9IHR5
cGUuaW5kZXg7CisgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBhcmdJbmRleDsKKyAg
ICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgYXJnSW5kZXggPSB3
YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYXJnSW5kZXggPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgp
OworICAgICAgICAgICAgaWYgKHBhcmFtSW5kZXggIT0gYXJnSW5kZXgpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAiQXJndW1lbnQgZnVuY3Rp
b24gZGlkIG5vdCBtYXRjaCB0aGUgcmVmZXJlbmNlIHR5cGUiKSk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkV4dGVybnJlZjoKKyAg
ICAgICAgaWYgKCF0eXBlLmlzTnVsbGFibGUoKSAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpT
V2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgIk5vbi1udWxsIEV4dGVy
bnJlZiBjYW5ub3QgYmUgbnVsbCIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXYXNtOjpU
eXBlS2luZDo6STMyOgorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHZhbHVlLnRv
SW50MzIoZ2xvYmFsT2JqZWN0KSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STY0OgorICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFs
dWUudG9CaWdJbnQ2NChnbG9iYWxPYmplY3QpKSk7CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6
RjMyOgorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGJpdHdpc2VfY2FzdDx1aW50
MzJfdD4odmFsdWUudG9GbG9hdChnbG9iYWxPYmplY3QpKSk7CisgICAgY2FzZSBXYXNtOjpUeXBl
S2luZDo6RjY0OgorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGJpdHdpc2VfY2Fz
dDx1aW50NjRfdD4odmFsdWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSkpOworICAgIGNhc2UgV2Fz
bTo6VHlwZUtpbmQ6OlZvaWQ6CisgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RnVuYzoKKyAgICBj
YXNlIFdhc206OlR5cGVLaW5kOjpSZWZOdWxsOgorICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlJl
ZjoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuY3BwCmluZGV4IDY2ZGExMGE3ODAwM2RiMjdhMTkxODJlOWIxYjBjM2M4MDVkNGEzYjYuLjFk
N2Y0NmNkNjgzMDQ1ZWFiNjQ2Yjg3MmY1NzhlZDc1MDIyNWNiZmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApA
QCAtMjE2LDYgKzIxNiw3IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjp0cnlDcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCoKICAgICAgICAgY2FzZSBX
YXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFs
S2luZDo6R2xvYmFsOgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6Cisg
ICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Ok1lbW9yeToKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjQyLDYgKzI0Myw3IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
SlNXZWJBc3NlbWJseUluc3RhbmNlOjp0cnlDcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCoK
ICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOgogICAgICAgICBjYXNl
IFdhc206OkV4dGVybmFsS2luZDo6R2xvYmFsOgogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFs
S2luZDo6VGFibGU6CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6
TWVtb3J5OiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oCmluZGV4IDU2ZjU4Zjk1NDM0OTM5NTliODI2ZDFmOTczYThmMmIw
ZDVjZjc2OWYuLjk3NGQ2ZDdiYTVlN2E1ODc4YTg4YjZjMTE2ZDUyYWRlNTM4YmFmNzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5oCkBAIC00OCw2ICs0OCw4IEBAIGNsYXNzIENvZGVCbG9jazsKIH0KIAogY2xhc3MgSlNX
ZWJBc3NlbWJseUluc3RhbmNlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisKIHB1YmxpYzoKICAgICB1c2lu
ZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwCmluZGV4IDEwMjJhNTIy
NzQzMjk2N2FlYWE1MmI4Yjg5NzQ2NzkzYmZhZmY0ZGIuLmIxMDI5N2ZlZGFiNzVmYTIzN2M1NzY2
ZTcxMTkzMjQyNDI2NDg2N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDYgKzM3LDEzIEBA
IEpTT2JqZWN0KiBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsK
ICAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIGdsb2Jh
bE9iamVjdC0+d2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSwgSlNW
YWx1ZSgpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIFR5cGVOb3RoaW5nLCBFcnJvclR5cGU6OkVy
cm9yLCB0cnVlKTsKIH0KKworSlNPYmplY3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBXYXNtOjpFeGNlcHRpb25U
eXBlIHR5cGUpCit7CisgICAgRXJyb3JJbnN0YW5jZSogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpj
cmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseVJ1bnRpbWVF
cnJvclN0cnVjdHVyZSgpLCBXYXNtOjplcnJvck1lc3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5cGUp
LCBKU1ZhbHVlKCksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgVHlwZU5vdGhpbmcsIEVycm9yVHlw
ZTo6RXJyb3IsIHRydWUpOworICAgIGVycm9yLT5zZXRDYXRjaGFibGVGcm9tV2FzbShmYWxzZSk7
CisgICAgcmV0dXJuIGVycm9yOworfQogICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3IuaAppbmRleCBiZTQxMzA5MGQzMjc0YzYxOGZhZmQ0OWIxMTY3YjBkMjIyN2NlNWZj
Li5jODZiNjNmOTEyZDNjZjQxZDFjNmM0OTBjMDg5NjM5Y2I3YjBiM2YzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI4LDEwICsyOCwxMiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1
ZGUgIkVycm9ySW5zdGFuY2UuaCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIAogSlNPYmplY3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3IoSlNHbG9iYWxPYmplY3QqLCBWTSYsIGNvbnN0IFN0cmluZyYpOworSlNPYmplY3QqIGNyZWF0
ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBWTSYsIFdhc206OkV4
Y2VwdGlvblR5cGUpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2Zj
MmIzOGFjMGY5ZmI3ZTVjMWNjNzY3MGM0Y2RkZDAxNjBiZGZlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5jcHAKQEAgLTAs
MCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtVGFnLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseVRhZzo6c19pbmZvID0geyAi
V2ViQXNzZW1ibHkuVGFnIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5VGFnKSB9OworCitKU1dlYkFzc2VtYmx5VGFnKiBK
U1dlYkFzc2VtYmx5VGFnOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgV2FzbTo6VGFnJiB0YWcpCit7CisgICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisgICAgYXV0byoganNUYWcgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5VGFnPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJs
eVRhZyh2bSwgc3RydWN0dXJlLCB0YWcpOworICAgIGpzVGFnLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgcmV0dXJuIGpzVGFnOworfQorCitTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlUYWc6OmNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKK30KKworSlNXZWJBc3NlbWJseVRhZzo6SlNXZWJBc3NlbWJseVRhZyhWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBXYXNtOjpUYWcmIHRhZykKKyAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fdGFnKFJlZiB7IHRhZyB9KQoreworfQorCit2b2lkIEpT
V2ViQXNzZW1ibHlUYWc6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIHN0YXRpY19jYXN0
PEpTV2ViQXNzZW1ibHlUYWcqPihjZWxsKS0+SlNXZWJBc3NlbWJseVRhZzo6fkpTV2ViQXNzZW1i
bHlUYWcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFnLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzAzYjVkNTZlM2Q5ZTc1Mzg2YWZjMzdlYjBjYTQwZWQyYTJh
YjQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWcuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisKKyNpbmNsdWRlICJXYXNtVGFnLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBKU1dlYkFzc2VtYmx5VGFnIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVi
bGljOgorICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKworICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3Bh
Y2VBY2Nlc3MgbW9kZT4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2
bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS53ZWJBc3NlbWJseVRhZ1NwYWNlPG1vZGU+KCk7
CisgICAgfQorCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBKU1dlYkFzc2VtYmx5VGFnKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSosIGNvbnN0IFdhc206OlRhZyYpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBjb25z
dCBXYXNtOjpUYWcmIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnOyB9CisgICAgY29uc3QgV2Fz
bTo6U2lnbmF0dXJlJiBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiB0YWcoKS5zaWduYXR1cmUo
KTsgfQorCitwcml2YXRlOgorICAgIEpTV2ViQXNzZW1ibHlUYWcoVk0mLCBTdHJ1Y3R1cmUqLCBj
b25zdCBXYXNtOjpUYWcmKTsKKworICAgIGNvbnN0IFJlZjxjb25zdCBXYXNtOjpUYWc+IG1fdGFn
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKaW5kZXggZjY3
ZjI0MmE3ODkxM2FlNWMwMmFhNTY4ZTk5YWM2NWNkYmI4MGZkZS4uZDY1ZmM2MTIxYjYwOTBiZDdm
MmQ0MGQwM2JiNDVlZTdhYTY0MDIzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2FzbVRvSlMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dhc21Ub0pTLmNwcApAQCAtOTgsNyArOTgsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQog
ICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9IDA7CiAgICAgICAgIHVuc2lnbmVkIG1h
cnNoYWxsZWRGUFJzID0gMDsKICAgICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBD
YWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKTsKLSAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVycyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAg
ICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
YXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7CiAgICAgICAgICAgICBU
eXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKICAgICAgICAgICAgIHN3
aXRjaCAoYXJnVHlwZS5raW5kKSB7CkBAIC0xNjIsNyArMTYyLDcgQEAgRXhwZWN0ZWQ8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9K
UyhWTSYgdm0KICAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOwogICAgICAgICB1
bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1l
T2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1l
OjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpOworICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJn
dW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogCiAgICAgICAgIGF1
dG8gbWFyc2hhbGxGUFIgPSBbJl0gKEZQUlJlZyBmcHJSZWcpIHsKICAgICAgICAgICAgIGppdC5w
dXJpZnlOYU4oZnByUmVnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNWY0YTVmNDQ4NmI0ZjE3YzhmZmZjODcwNzQxMTUwMmI4NjdlNjlmMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0
aW9uQ29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuaCIKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvblBy
b3RvdHlwZS5oIgorCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5s
dXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUV4
Y2VwdGlvbkNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8s
ICZjb25zdHJ1Y3RvclRhYmxlV2ViQXNzZW1ibHlFeGNlcHRpb24sIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3RvcikgfTsKKworc3RhdGlj
IEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0SlNXZWJBc3NlbWJseUV4Y2VwdGlv
bik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjYWxsSlNXZWJBc3NlbWJseUV4
Y2VwdGlvbik7CisKKy8qIFNvdXJjZSBmb3IgV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ci5sdXQuaAorIEBiZWdpbiBjb25zdHJ1Y3RvclRhYmxlV2ViQXNzZW1ibHlFeGNlcHRpb24KKyBA
ZW5kCisgKi8KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlFeGNlcHRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkpCit7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTVmFsdWUgdGFnVmFsdWUg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgdGFnUGFyYW1ldGVycyA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMSk7CisKKyAgICBhdXRvIHRhZyA9IGpzRHluYW1pY0Nhc3Q8SlNX
ZWJBc3NlbWJseVRhZyo+KHZtLCB0YWdWYWx1ZSk7CisgICAgaWYgKCF0YWcpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5F
eGNlcHRpb24gY29uc3RydWN0b3IgZXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBX
ZWJBc3NlbWJseS5UYWciKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHZhbHVlczsKKyAg
ICBmb3JFYWNoSW5JdGVyYWJsZShnbG9iYWxPYmplY3QsIHRhZ1BhcmFtZXRlcnMsIFsmXSAoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbmV4dFZhbHVlKSB7CisgICAgICAgIHZhbHVlcy5h
cHBlbmQobmV4dFZhbHVlKTsKKyAgICB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworCisgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gdGFnLT5zaWduYXR1cmUoKS5hcmd1
bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRpb24gY29uc3RydWN0b3IgZXhwZWN0cyB0aGUg
bnVtYmVyIG9mIHBhcmVtZXRlcnMgaW4gV2ViQXNzZW1ibHkuVGFnIHRvIG1hdGNoIHRoZSB0YWdz
IHBhcmFtZXRlciBjb3VudC4iKTsKKworICAgIC8vIEFueSBHQydkIHZhbHVlcyBpbiBoZXJlIHdp
bGwgYmUgbWFya2VkIGJ5IHRoZSBNYXJrZWRBcnVnZW1lbnRCdWZmZXIgdW50aWwgc3RvcmVkIGlu
IHRoZSBFeGNlcHRpb24uCisgICAgRml4ZWRWZWN0b3I8dWludDY0X3Q+IHBheWxvYWQodmFsdWVz
LnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBwYXlsb2FkW2ldID0gZnJvbUpTVmFsdWUoZ2xvYmFsT2JqZWN0LCB0YWct
PnNpZ25hdHVyZSgpLmFyZ3VtZW50KGkpLCB2YWx1ZXMuYXQoaSkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworICAgIEpTT2JqZWN0KiBuZXdUYXJn
ZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPm5ld1RhcmdldCgpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IEpTQ19HRVRfREVSSVZFRF9TVFJVQ1RVUkUodm0sIHdlYkFzc2VtYmx5RXhjZXB0
aW9uU3RydWN0dXJlLCBuZXdUYXJnZXQsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmNyZWF0ZSh2bSwg
c3RydWN0dXJlLCB0YWctPnRhZygpLCBXVEZNb3ZlKHBheWxvYWQpKSkpOworfQorCitKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oY2FsbEpTV2ViQXNzZW1ibHlFeGNlcHRpb24sIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVk
QXNGdW5jdGlvblR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuRXhj
ZXB0aW9uIikpOworfQorCitXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yKiBXZWJBc3Nl
bWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCit7Cisg
ICAgYXV0byogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3Nl
bWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlFeGNlcHRpb25D
b25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRp
b24odm0sIHRoaXNQcm90b3R5cGUpOworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKworU3Ry
dWN0dXJlKiBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
K3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqIHByb3RvdHlwZSkK
K3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgMSwgIkV4Y2VwdGlvbiJfcywgUHJvcGVy
dHlBZGRpdGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFuc2l0aW9uKTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90
b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlKTsKK30KKworV2ViQXNzZW1i
bHlFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3RvcihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBj
YWxsSlNXZWJBc3NlbWJseUV4Y2VwdGlvbiwgY29uc3RydWN0SlNXZWJBc3NlbWJseUV4Y2VwdGlv
bikKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2UxZjg1ZWQ1
YzM2ZjRkMDgzZDIyNGJiY2VkMjJjOTRjZWY0NzEyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3Iu
aApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNs
dWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOworCitjbGFz
cyBXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yIGZpbmFsIDogcHVibGljIEludGVybmFs
RnVuY3Rpb24geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBJbnRlcm5hbEZ1bmN0aW9uOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICBzdGF0aWMgV2ViQXNz
ZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgV2ViQXNz
ZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9J
TkZPOworCitwcml2YXRlOgorICAgIFdlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IoVk0m
LCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlF
eGNlcHRpb25Qcm90b3R5cGUqKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShXZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uKTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2Vw
dGlvblByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUV4Y2VwdGlvblByb3RvdHlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MzNmM0Nzk4NWEzMjRjMWIz
ODk5MzVlZjFhMWI5MTFhYWY1ZjhlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlLmNwcApAQCAtMCww
ICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4Y2VwdGlvblByb3Rv
dHlwZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQXV4aWxpYXJ5
QmFycmllcklubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBK
U0Mgeworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlFeGNlcHRp
b25Qcm90b0Z1bmNHZXRBcmcpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04od2Vi
QXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNJcyk7Cit9CisKKyNpbmNsdWRlICJXZWJBc3NlbWJs
eUV4Y2VwdGlvblByb3RvdHlwZS5sdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENs
YXNzSW5mbyBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6c19pbmZvID0geyAiV2ViQXNz
ZW1ibHkuRXhjZXB0aW9uIiwgJkJhc2U6OnNfaW5mbywgJnByb3RvdHlwZVRhYmxlV2ViQXNzZW1i
bHlFeGNlcHRpb24sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlFeGNl
cHRpb25Qcm90b3R5cGUpIH07CisKKy8qIFNvdXJjZSBmb3IgV2ViQXNzZW1ibHlFeGNlcHRpb25Q
cm90b3R5cGUubHV0LmgKKyBAYmVnaW4gcHJvdG90eXBlVGFibGVXZWJBc3NlbWJseUV4Y2VwdGlv
bgorIGdldEFyZyAgIHdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG9GdW5jR2V0QXJnICAgRnVuY3Rp
b24gMgorIGlzICAgd2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNJcyAgIEZ1bmN0aW9uIDEK
KyBAZW5kCisgKi8KKworV2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqIFdlYkFzc2VtYmx5
RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSogc3RydWN0dXJlKQoreworICAgIGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgV2ViQXNz
ZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgb2JqZWN0LT5maW5p
c2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIG9iamVjdDsKK30KKworU3RydWN0dXJlKiBXZWJB
c3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2Vt
Ymx5RXhjZXB0aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
Cit9CisKK1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlOjpXZWJBc3NlbWJseUV4Y2VwdGlv
blByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlKQoreworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1dlYkFzc2VtYmx5RXhj
ZXB0aW9uKiBnZXRFeGNlcHRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSB0aGlzVmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmIChVTkxJS0VMWSgh
dGhpc1ZhbHVlLmlzQ2VsbCgpKSkgeworICAgICAgICB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSkp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgYXV0byogdGFnID0ganNEeW5h
bWljQ2FzdDxKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKj4odm0sIHRoaXNWYWx1ZS5hc0NlbGwoKSk7
CisgICAgaWYgKExJS0VMWSh0YWcpKQorICAgICAgICByZXR1cm4gdGFnOworICAgIHRocm93VHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRpb24gb3BlcmF0
aW9uIGNhbGxlZCBvbiBub24tRXhjZXB0aW9uIG9iamVjdCJfcyk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWcqIGdldFRhZyhW
TSYgdm0sIEpTVmFsdWUgdGFnVmFsdWUpCit7CisgICAgaWYgKCF0YWdWYWx1ZS5pc0NlbGwoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNXZWJB
c3NlbWJseVRhZyo+KHZtLCB0YWdWYWx1ZS5hc0NlbGwoKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTih3ZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvRnVuY0dldEFyZywgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBjb25zdCBhdXRvJiBmb3JtYXRNZXNzYWdlID0gWyZdKGNv
bnN0IGF1dG8mIG1lc3NhZ2UpIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIldlYkFzc2Vt
Ymx5LkV4Y2VwdGlvbi5nZXRBcmcoKTogIiwgbWVzc2FnZSk7CisgICAgfTsKKyAgICBjb25zdCBh
dXRvJiB0eXBlRXJyb3IgPSBbJl0oY29uc3QgYXV0byYgbWVzc2FnZSkgeworICAgICAgICB0aHJv
d1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGZvcm1hdE1lc3NhZ2UobWVzc2Fn
ZSkpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICB9OworCisgICAgSlNX
ZWJBc3NlbWJseUV4Y2VwdGlvbioganNFeGNlcHRpb24gPSBnZXRFeGNlcHRpb24oZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworCisgICAgSlNXZWJBc3NlbWJseVRhZyogdGFn
ID0gZ2V0VGFnKHZtLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXRhZykKKyAg
ICAgICAgcmV0dXJuIHR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIFdlYkFzc2Vt
Ymx5LlRhZyIpOworCisgICAgaWYgKGpzRXhjZXB0aW9uLT50YWcoKSAhPSB0YWctPnRhZygpKQor
ICAgICAgICByZXR1cm4gdHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBkb2VzIG5vdCBtYXRjaCB0
aGUgZXhjZXB0aW9uIHRhZyIpOworCisgICAgdWludDMyX3QgaW5kZXggPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDEpLnRvVUludDMyKGdsb2JhbE9iamVjdCk7CisgICAgaWYgKGluZGV4ID49IHRhZy0+
dGFnKCkucGFyYW1ldGVyQ291bnQoKSkgeworICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBmb3JtYXRNZXNzYWdlKCJJbmRleCBvdXQgb2YgcmFuZ2UiKSk7
CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNFeGNlcHRpb24tPmdldEFy
ZyhnbG9iYWxPYmplY3QsIGluZGV4KSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
d2ViQXNzZW1ibHlFeGNlcHRpb25Qcm90b0Z1bmNJcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uKiBqc0V4Y2VwdGlvbiA9IGdldEV4Y2VwdGlv
bihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBKU1dlYkFzc2Vt
Ymx5VGFnKiB0YWcgPSBnZXRUYWcodm0sIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgIGlm
ICghdGFnKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgIldlYkFzc2VtYmx5LkV4Y2VwdGlvbi5pcygpOiBGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEg
V2ViQXNzZW1ibHkuVGFnIik7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAg
IH0KKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKGpzRXhjZXB0aW9uLT50YWcoKSA9PSB0YWctPnRhZygpKSkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uUHJv
dG90eXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2Vw
dGlvblByb3RvdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjMjEwNmQ4Yjk5MzFmZGE0YTBlOTRiNjFmYjVj
N2UxZWEzNDhkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IFdlYkFzc2VtYmx5RXhjZXB0aW9uUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxP
YmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZSwgQmFzZSk7CisgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisKKyAgICBzdGF0aWMgV2ViQXNz
ZW1ibHlFeGNlcHRpb25Qcm90b3R5cGUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToK
KyAgICBXZWJBc3NlbWJseUV4Y2VwdGlvblByb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAppbmRleCAzYWIzYzNkNWNiNWM5
MDA5YmVjMmI2ZDgwZDQ0NGM4MGMxNDNlYWRlLi4xOTcxOGRjZTY5OTY5MDAxZWUxMmQ2NDRmODYy
NDVlMDE3MzY1YjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtNzgsNTEgKzc4LDkgQEAgSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwKICAgICBXYXNtOjpJbnN0YW5jZSogd2FzbUluc3RhbmNlID0gJmluc3RhbmNl
LT5pbnN0YW5jZSgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4
IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKythcmdJbmRleCkgewotICAgICAgICBKU1Zh
bHVlIGFyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoYXJnSW5kZXgpOwotICAgICAgICBzd2l0Y2gg
KHNpZ25hdHVyZS5hcmd1bWVudChhcmdJbmRleCkua2luZCkgewotICAgICAgICBjYXNlIFdhc206
OlR5cGVLaW5kOjpJMzI6Ci0gICAgICAgICAgICBhcmcgPSBKU1ZhbHVlOjpkZWNvZGUoYXJnLnRv
SW50MzIoZ2xvYmFsT2JqZWN0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBX
YXNtOjpUeXBlS2luZDo6VHlwZUlkeDoKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RnVu
Y3JlZjogewotICAgICAgICAgICAgYm9vbCBpc051bGxhYmxlID0gc2lnbmF0dXJlLmFyZ3VtZW50
KGFyZ0luZGV4KS5pc051bGxhYmxlKCk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
KiB3YXNtRnVuY3Rpb24gPSBudWxscHRyOwotICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rpb24gPSBudWxscHRyOwotICAgICAgICAgICAgaWYg
KCFpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBhcmcsIHdhc21GdW5jdGlvbiwgd2FzbVdy
YXBwZXJGdW5jdGlvbikgJiYgKCFpc051bGxhYmxlIHx8ICFhcmcuaXNOdWxsKCkpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3Qs
IHZtLCAiRnVuY3JlZiBtdXN0IGJlIGFuIGV4cG9ydGVkIHdhc20gZnVuY3Rpb24iKSkpOwotICAg
ICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChhcmdJbmRleCkua2luZCA9PSBXYXNtOjpU
eXBlS2luZDo6VHlwZUlkeCAmJiAod2FzbUZ1bmN0aW9uIHx8IHdhc21XcmFwcGVyRnVuY3Rpb24p
KSB7Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggcGFyYW1JbmRleCA9IHNp
Z25hdHVyZS5hcmd1bWVudChhcmdJbmRleCkuaW5kZXg7Ci0gICAgICAgICAgICAgICAgV2FzbTo6
U2lnbmF0dXJlSW5kZXggYXJnSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlv
bikKLSAgICAgICAgICAgICAgICAgICAgYXJnSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVy
ZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhcmdJ
bmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHBhcmFtSW5kZXggIT0gYXJnSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwg
Y3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAiQXJndW1l
bnQgZnVuY3Rpb24gZGlkIG5vdCBtYXRjaCB0aGUgcmVmZXJlbmNlIHR5cGUiKSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXYXNt
OjpUeXBlS2luZDo6RXh0ZXJucmVmOgotICAgICAgICAgICAgaWYgKCFzaWduYXR1cmUuYXJndW1l
bnQoYXJnSW5kZXgpLmlzTnVsbGFibGUoKSAmJiBhcmcuaXNOdWxsKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNj
b3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sICJO
b24tbnVsbCBFeHRlcm5yZWYgY2Fubm90IGJlIG51bGwiKSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6Okk2NDoKLSAgICAgICAgICAgIGFyZyA9IEpT
VmFsdWU6OmRlY29kZShiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGFyZy50b0JpZ0ludDY0KGdsb2Jh
bE9iamVjdCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OlR5cGVL
aW5kOjpGMzI6Ci0gICAgICAgICAgICBhcmcgPSBKU1ZhbHVlOjpkZWNvZGUoYml0d2lzZV9jYXN0
PHVpbnQzMl90PihhcmcudG9GbG9hdChnbG9iYWxPYmplY3QpKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjY0OgotICAgICAgICAgICAgYXJnID0g
SlNWYWx1ZTo6ZGVjb2RlKGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oYXJnLnRvTnVtYmVyKGdsb2Jh
bE9iamVjdCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OlR5cGVL
aW5kOjpWb2lkOgotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpGdW5jOgotICAgICAgICBj
YXNlIFdhc206OlR5cGVLaW5kOjpSZWZOdWxsOgotICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5k
OjpSZWY6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICB9CisgICAgICAgIHVpbnQ2NF90IHZhbHVlID0gZnJvbUpTVmFsdWUoZ2xvYmFsT2JqZWN0LCBz
aWduYXR1cmUuYXJndW1lbnQoYXJnSW5kZXgpLCBjYWxsRnJhbWUtPmFyZ3VtZW50KGFyZ0luZGV4
KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKGFyZyk7CisgICAgICAgIGJveGVkQXJncy5hcHBl
bmQoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiAgICAgfQogCiAgICAgLy8gV2hlbiB3ZSBkb24n
dCB1c2UgZmFzdCBUTFMgdG8gc3RvcmUgdGhlIGNvbnRleHQsIHRoZSBKUwpAQCAtMTUyLDEwICsx
MTAsNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24s
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24t
Pmluc3RhbmNlKCkpOwogICAgIEFTU0VSVCgmd2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0
YW5jZSgpID09IHZtLndhc21Db250ZXh0LmxvYWQoKSk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmF3
UmVzdWx0ID0gdm1FbnRyeVRvV2FzbSh3YXNtRnVuY3Rpb24tPmpzRW50cnlwb2ludChNdXN0Q2hl
Y2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpOwotICAg
IC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgaW4gYSByZWdpc3RlciBvciBvbiB0aGUg
c3RhY2sgc2luY2UgaXQncyBzdG9yZWQgaW4gVmVjdG9yPEpTVmFsdWU+LgotICAgIC8vIFRoaXMg
cHJvYmFibHkgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBzaW5jZSB0aGUgV2ViQXNzZW1ibHlG
dW5jdGlvbiogc2hvdWxkIGtlZXAgdGhlIGluc3RhbmNlCi0gICAgLy8gYWxpdmUuIEJ1dCBpdCdz
IGdvb2QgaHlnaWVuZS4KLSAgICBpbnN0YW5jZS0+dXNlKCk7CiAgICAgaWYgKHByZXZXYXNtSW5z
dGFuY2UgIT0gd2FzbUluc3RhbmNlKSB7CiAgICAgICAgIC8vIFRoaXMgaXMganVzdCBmb3Igc29t
ZSBleHRyYSBzYWZldHkgaW5zdGVhZCBvZiBsZWF2aW5nIGEgY2FjaGVkCiAgICAgICAgIC8vIHZh
bHVlIGluIHRoZXJlLiBJZiB3ZSBldmVyIGZvcmdldCB0byBzZXQgdGhlIHZhbHVlIHRvIGJlIGEg
cmVhbApAQCAtMTY4LDYgKzEyMiwxMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdl
YkFzc2VtYmx5RnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHZt
Lndhc21Db250ZXh0LnN0b3JlKHByZXZXYXNtSW5zdGFuY2UsIHZtLnNvZnRTdGFja0xpbWl0KCkp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKKyAgICAvLyBXZSBuZWVk
IHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGluIGEgcmVnaXN0ZXIgb3Igb24gdGhlIHN0YWNrIHNpbmNl
IGl0J3Mgc3RvcmVkIGluIFZlY3RvcjxKU1ZhbHVlPi4KKyAgICAvLyBUaGlzIHByb2JhYmx5IGlz
bid0IHN0cmljdGx5IG5lY2Vzc2FyeSwgc2luY2UgdGhlIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHNo
b3VsZCBrZWVwIHRoZSBpbnN0YW5jZQorICAgIC8vIGFsaXZlLiBCdXQgaXQncyBnb29kIGh5Z2ll
bmUuCisgICAgaW5zdGFuY2UtPnVzZSgpOworCiAgICAgcmV0dXJuIHJhd1Jlc3VsdDsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuY3BwCmluZGV4IGRiNDA5MmFkNjk0ODJmN2EwOWQzYmUxZjc1MjM0MjJkOWQ1
YWYxM2QuLmE0NTdjMDI3ZjkyOGQ0MmJiMjBkZTk5NmJhYzg4YTUwY2I4ZmNkNmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNp
bmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgpAQCAtMTMwLDYgKzEzMSw3
IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBpCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxL
aW5kOjpGdW5jdGlvbjoKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDoK
ICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOgorICAgICAgICBjYXNlIFdh
c206OkV4dGVybmFsS2luZDo6RXhjZXB0aW9uOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpNZW1vcnk6CiAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTM2Myw3ICszNjUsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1w
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogaQogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7Ci0gICAgICAgICAgICAv
LyA3LiBPdGhlcndpc2UgKGkgaXMgYSB0YWJsZSBpbXBvcnQpOgorICAgICAgICAgICAgLy8gNy4g
SWYgaSBpcyBhIHRhYmxlIGltcG9ydDoKICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSog
dGFibGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlUYWJsZSo+KHZtLCB2YWx1ZSk7CiAg
ICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdCwg
dGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCiAgICAgICAgICAgICBpZiAoIXRhYmxlKQpA
QCAtMzk0LDYgKzM5NiwyMCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1w
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogaQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6RXhj
ZXB0aW9uOiB7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFnKiB0YWcgPSBqc0R5bmFtaWND
YXN0PEpTV2ViQXNzZW1ibHlUYWcqPih2bSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKCF0YWcp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgIlRhZyBp
bXBvcnQiLCAiaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhZyIpKSk7CisKKyAg
ICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBt
b2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzW2ltcG9ydC5r
aW5kSW5kZXhdOworCisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRTaWduYXR1cmVJbmRleCAhPSB0
YWctPnRhZygpLnNpZ25hdHVyZSgpLmluZGV4KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4
Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGlt
cG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydGVkIFRhZyIsICJzaWduYXR1cmUgZG9lc24n
dCBtYXRjaCB0aGUgaW1wb3J0ZWQgV2ViQXNzZW1ibHkgVGFnJ3Mgc2lnbmF0dXJlIikpKTsKKwor
ICAgICAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5hZGRUYWcodGFnLT50YWcoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWxLaW5kOjpNZW1vcnk6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDIxLDYg
KzQzNyw5IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmtJbXBsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBpCiAgICAgICAgIH0KICAgICB9CiAKKyAg
ICBmb3IgKFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4IDogbW9kdWxlSW5mb3Jt
YXRpb24uaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzKQorICAgICAgICBtX2luc3Rh
bmNlLT5pbnN0YW5jZSgpLmFkZFRhZyhXYXNtOjpUYWc6OmNyZWF0ZShXYXNtOjpTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KSkpOworCiAgICAgdW5zaWduZWQgZnVuY3Rp
b25JbXBvcnRDb3VudCA9IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogICAgIGF1
dG8gbWFrZUZ1bmN0aW9uV3JhcHBlciA9IFsmXSAodWludDMyX3QgaW5kZXgpIC0+IEpTVmFsdWUg
ewogICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IG1hZGUgYSB3cmFwcGVyLCBkbyBub3QgbWFrZSBh
IG5ldyBvbmUuCkBAIC01NTcsNiArNTc2LDEwIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQ6OmxpbmtJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBpCiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNl
IFdhc206OkV4dGVybmFsS2luZDo6RXhjZXB0aW9uOiB7CisgICAgICAgICAgICBleHBvcnRlZFZh
bHVlID0gSlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC0+bV93ZWJBc3NlbWJseVRhZ1N0cnVjdHVyZS5nZXQoZ2xvYmFsT2JqZWN0KSwgbV9pbnN0
YW5jZS0+aW5zdGFuY2UoKS50YWcoZXhwLmtpbmRJbmRleCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChleHAuZmllbGQp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
VGFnQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZiN2NiMDE0MGI1MTllZWQzY2Jh
YWQ2M2U2ZmMzY2UxOWIwYzIzOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMTI0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaCIKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAi
SXRlcmF0b3JPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWdQcm90b3R5
cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseVRh
Z0NvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
cikgfTsKKworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY2FsbEpTV2ViQXNzZW1i
bHlUYWcpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0SlNXZWJB
c3NlbWJseVRhZyk7CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RKU1dlYkFz
c2VtYmx5VGFnLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgCisgICAgaWYgKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LlRhZyBjb25zdHJ1Y3RvciBleHBlY3RzIHRo
ZSB0YWcgdHlwZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIl9zKTsKKworICAgIEpTVmFsdWUgdGFn
VHlwZVZhbHVlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIHNpZ25hdHVy
ZU9iamVjdCA9IHRhZ1R5cGVWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAicGFyYW1ldGVycyJfcykpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisKKyAgICBpZiAoIXNpZ25hdHVyZU9iamVjdC5pc09iamVjdCgpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1i
bHkuVGFnIGNvbnN0cnVjdG9yIGV4cGVjdHMgYSB0YWcgdHlwZSB3aXRoIHRoZSAncGFyYW1ldGVy
cycgcHJvcGVydHkuIl9zKTsKKworICAgIFZlY3RvcjxXYXNtOjpUeXBlPiBwYXJhbWV0ZXJzOwor
ICAgIGZvckVhY2hJbkl0ZXJhYmxlKGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlT2JqZWN0LCBbJl0g
KGF1dG8mIHZtLCBhdXRvKiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbmV4dFR5cGUpIC0+IHZvaWQg
eworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAg
ICAgV2FzbTo6VHlwZSB0eXBlOworICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmcgPSBuZXh0VHlw
ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOworICAgICAgICBpZiAodmFsdWVTdHJpbmcgPT0gImkzMiJfcykKKyAg
ICAgICAgICAgIHR5cGUgPSBXYXNtOjpUeXBlczo6STMyOworICAgICAgICBlbHNlIGlmICh2YWx1
ZVN0cmluZyA9PSAiaTY0Il9zKQorICAgICAgICAgICAgdHlwZSA9IFdhc206OlR5cGVzOjpJNjQ7
CisgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyaW5nID09ICJmMzIiX3MpCisgICAgICAgICAgICB0
eXBlID0gV2FzbTo6VHlwZXM6OkYzMjsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVTdHJpbmcgPT0g
ImY2NCJfcykKKyAgICAgICAgICAgIHR5cGUgPSBXYXNtOjpUeXBlczo6RjY0OworICAgICAgICBl
bHNlIGlmICh2YWx1ZVN0cmluZyA9PSAiYW55ZnVuYyJfcykKKyAgICAgICAgICAgIHR5cGUgPSBX
YXNtOjpUeXBlczo6RnVuY3JlZjsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVTdHJpbmcgPT0gImV4
dGVybnJlZiJfcykKKyAgICAgICAgICAgIHR5cGUgPSBXYXNtOjpUeXBlczo6RXh0ZXJucmVmOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJXZWJBc3NlbWJseS5UYWcgY29uc3RydWN0b3IgZXhwZWN0cyB0aGUgJ3BhcmFtZXRl
cnMnIGZpZWxkIG9mIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIHNlcXVlbmNlIG9mIFdlYkFz
c2VtYmx5IHZhbHVlIHR5cGVzLiJfcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCh0eXBlKTsKKyAgICB9KTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgUmVmUHRyPFdhc206OlNpZ25hdHVyZT4g
c2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OnNpZ25hdHVyZUZvcih7IH0s
IHBhcmFtZXRlcnMpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNDX0dFVF9ERVJJVkVE
X1NUUlVDVFVSRSh2bSwgd2ViQXNzZW1ibHlUYWdTdHJ1Y3R1cmUsIGFzT2JqZWN0KGNhbGxGcmFt
ZS0+bmV3VGFyZ2V0KCkpLCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdhc206OlRhZzo6Y3JlYXRlKCpzaWduYXR1cmUp
LmdldCgpKSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbEpTV2ViQXNzZW1i
bHlUYWcsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1
Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiV2ViQXNzZW1ibHkuVGFnIikpOworfQorCitXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yKiBX
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCit7CisgICAgYXV0
byogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVRh
Z0NvbnN0cnVjdG9yPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcih2bSwgc3Ry
dWN0dXJlKTsKKyAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5
cGUpOworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBXZWJBc3NlbWJs
eVRhZ0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1
bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlUYWdQ
cm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgMSwg
IlRhZyJfcywgUHJvcGVydHlBZGRpdGlvbk1vZGU6OldpdGhvdXRTdHJ1Y3R1cmVUcmFuc2l0aW9u
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBwcm90b3R5cGUsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsK
K30KKworV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvcjo6V2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
cihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJl
LCBjYWxsSlNXZWJBc3NlbWJseVRhZywgY29uc3RydWN0SlNXZWJBc3NlbWJseVRhZykKK3sKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0Nv
bnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRh
Z0NvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjA4NWQ5NjdkNzdhNjE3MGRhMzdmNjZjODg2NTg3
YTZmMTliZGFkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDU5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisj
aW5jbHVkZSAiV2FzbU9wcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3Nl
bWJseVRhZzsKK2NsYXNzIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlOworCituYW1lc3BhY2UgV2Fz
bSB7CitjbGFzcyBUYWc7Cit9CisKK2NsYXNzIFdlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IgZmlu
YWwgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9
IEludGVybmFsRnVuY3Rpb247CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rv
ciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqKTsKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFdlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqKTsKK307CitTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1
bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVRhZ1Byb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseVRhZ1Byb3RvdHlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDkzZDQxN2MxOGFjODRhNzI5NGQy
ZTkxNDJhNTQzMzFmMjYzMDQwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmNwcApAQCAtMCwwICsxLDEyMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5oIgorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKKyNp
bmNsdWRlICJXYXNtRm9ybWF0LmgiCisKK25hbWVzcGFjZSBKU0Mgeworc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlUYWdQcm90b0Z1bmNUeXBlKTsKK30KKworI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlOjpzX2luZm8gPSB7ICJX
ZWJBc3NlbWJseS5UYWciLCAmQmFzZTo6c19pbmZvLCAmcHJvdG90eXBlVGFibGVXZWJBc3NlbWJs
eVRhZywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseVRhZ1Byb3RvdHlw
ZSkgfTsKKworLyogU291cmNlIGZvciBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZS5sdXQuaAorIEBi
ZWdpbiBwcm90b3R5cGVUYWJsZVdlYkFzc2VtYmx5VGFnCisgdHlwZSAgIHdlYkFzc2VtYmx5VGFn
UHJvdG9GdW5jVHlwZSAgIEZ1bmN0aW9uIDAKKyBAZW5kCisgKi8KKworCitXZWJBc3NlbWJseVRh
Z1Byb3RvdHlwZSogV2ViQXNzZW1ibHlUYWdQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgYXV0byogb2JqZWN0ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlUYWdQcm90b3R5cGU+KHZtLmhl
YXApKSBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBvYmplY3Qt
PmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitTdHJ1Y3R1cmUq
IFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1i
bHlUYWdQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKyAgICBK
U0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworV2ViQXNzZW1ibHlU
YWdQcm90b3R5cGU6OldlYkFzc2VtYmx5VGFnUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK0FMV0FZU19JTkxJ
TkUgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWcqIGdldFRhZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
aWYgKFVOTElLRUxZKCF0aGlzVmFsdWUuaXNDZWxsKCkpKSB7CisgICAgICAgIHRocm93Vk1FcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBhdXRv
KiB0YWcgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlUYWcqPih2bSwgdGhpc1ZhbHVlLmFz
Q2VsbCgpKTsKKyAgICBpZiAoTElLRUxZKHRhZykpCisgICAgICAgIHJldHVybiB0YWc7CisgICAg
dGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LlRhZyBvcGVy
YXRpb24gY2FsbGVkIG9uIG5vbi1UYWcgb2JqZWN0Il9zKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2VtYmx5VGFnUHJvdG9GdW5jVHlw
ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5VGFnKiBqc1Rh
ZyA9IGdldFRhZyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBj
b25zdCBXYXNtOjpUYWcmIHRhZyA9IGpzVGFnLT50YWcoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIGFyZ0xpc3Q7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWcucGFyYW1ldGVy
Q291bnQoKTsgKytpKQorICAgICAgICBhcmdMaXN0LmFwcGVuZChXYXNtOjp0eXBlVG9TdHJpbmco
dm0sIHRhZy5wYXJhbWV0ZXIoaSkua2luZCkpOworCisgICAgaWYgKFVOTElLRUxZKGFyZ0xpc3Qu
aGFzT3ZlcmZsb3dlZCgpKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Cisg
ICAgfQorCisgICAgSlNBcnJheSogcGFyYW1ldGVycyA9IGNvbnN0cnVjdEFycmF5KGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBhcmdM
aXN0KTsKKyAgICBKU09iamVjdCogdHlwZSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSwgMSk7CisgICAgdHlwZS0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFyYW1ldGVycyIpLCBwYXJh
bWV0ZXJzKTsKKworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVu
Y29kZSh0eXBlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlUYWdQcm90b3R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI0MzJmOWM4OWJkY2RhN2Rj
N2I5NDE4NDc2MmIyNTI2YjU5YmI2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnUHJvdG90eXBlLmgKQEAgLTAsMCArMSw1OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5VGFnUHJvdG90eXBlIGZpbmFs
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBK
U05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CisgICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICBTVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZSwg
QmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgV2ViQXNzZW1ibHlUYWdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKwor
cHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseVRhZ1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOwor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vd2FzbS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2Fz
bS5qc29uCmluZGV4IDRmOGRkOWUzZDIxMzQzNTAwMDAwNmUyNDE0NmIwMTk0YzlhYzg4ZjEuLjlk
MjI1ZTRlODIyNDk2NjA0NDRmZjQxYWViYmEyN2M2NGM3NmVlZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20uanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS93YXNtLmpzb24KQEAgLTIzLDM0ICsyMywzOCBAQAogICAgICJibG9ja190eXBlIjog
WyJpMzIiLCAiaTY0IiwgImYzMiIsICJmNjQiLCAidm9pZCIsICJleHRlcm5yZWYiLCAiZnVuY3Jl
ZiJdLAogICAgICJyZWZfdHlwZSI6IFsiZnVuY3JlZiIsICJleHRlcm5yZWYiLCAidHlwZV9pZHgi
XSwKICAgICAiZXh0ZXJuYWxfa2luZCI6IHsKLSAgICAgICAgIkZ1bmN0aW9uIjogeyAidHlwZSI6
ICJ1aW50OCIsICJ2YWx1ZSI6IDAgfSwKLSAgICAgICAgIlRhYmxlIjogICAgeyAidHlwZSI6ICJ1
aW50OCIsICJ2YWx1ZSI6IDEgfSwKLSAgICAgICAgIk1lbW9yeSI6ICAgeyAidHlwZSI6ICJ1aW50
OCIsICJ2YWx1ZSI6IDIgfSwKLSAgICAgICAgIkdsb2JhbCI6ICAgeyAidHlwZSI6ICJ1aW50OCIs
ICJ2YWx1ZSI6IDMgfQorICAgICAgICAiRnVuY3Rpb24iOiAgICB7ICJ0eXBlIjogInVpbnQ4Iiwg
InZhbHVlIjogMCB9LAorICAgICAgICAiVGFibGUiOiAgICAgICB7ICJ0eXBlIjogInVpbnQ4Iiwg
InZhbHVlIjogMSB9LAorICAgICAgICAiTWVtb3J5IjogICAgICB7ICJ0eXBlIjogInVpbnQ4Iiwg
InZhbHVlIjogMiB9LAorICAgICAgICAiR2xvYmFsIjogICAgICB7ICJ0eXBlIjogInVpbnQ4Iiwg
InZhbHVlIjogMyB9LAorICAgICAgICAiRXhjZXB0aW9uIjogICB7ICJ0eXBlIjogInVpbnQ4Iiwg
InZhbHVlIjogNCB9CiAgICAgfSwKICAgICAic2VjdGlvbiIgOiB7Ci0gICAgICAgICJUeXBlIjog
ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMSwgImRlc2NyaXB0aW9uIjogIkZ1
bmN0aW9uIHNpZ25hdHVyZSBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJJbXBvcnQiOiAgIHsg
InR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMiwgImRlc2NyaXB0aW9uIjogIkltcG9ydCBk
ZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJGdW5jdGlvbiI6IHsgInR5cGUiOiAidmFydWludDci
LCAidmFsdWUiOiAgMywgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwK
LSAgICAgICAgIlRhYmxlIjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA0LCAi
ZGVzY3JpcHRpb24iOiAiSW5kaXJlY3QgZnVuY3Rpb24gdGFibGUgYW5kIG90aGVyIHRhYmxlcyIg
fSwKLSAgICAgICAgIk1lbW9yeSI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA1
LCAiZGVzY3JpcHRpb24iOiAiTWVtb3J5IGF0dHJpYnV0ZXMiIH0sCi0gICAgICAgICJHbG9iYWwi
OiAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNiwgImRlc2NyaXB0aW9uIjogIkds
b2JhbCBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJFeHBvcnQiOiAgIHsgInR5cGUiOiAidmFy
dWludDciLCAidmFsdWUiOiAgNywgImRlc2NyaXB0aW9uIjogIkV4cG9ydHMiIH0sCi0gICAgICAg
ICJTdGFydCI6ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgOCwgImRlc2NyaXB0
aW9uIjogIlN0YXJ0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIiB9LAotICAgICAgICAiRWxlbWVudCI6
ICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDksICJkZXNjcmlwdGlvbiI6ICJFbGVt
ZW50cyBzZWN0aW9uIiB9LAotICAgICAgICAiQ29kZSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3
IiwgInZhbHVlIjogMTAsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBib2RpZXMgKGNvZGUpIiB9
LAotICAgICAgICAiRGF0YSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTEs
ICJkZXNjcmlwdGlvbiI6ICJEYXRhIHNlZ21lbnRzIiB9CisgICAgICAgICJUeXBlIjogICAgICB7
ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDEsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlv
biBzaWduYXR1cmUgZGVjbGFyYXRpb25zIiB9LAorICAgICAgICAiSW1wb3J0IjogICAgeyAidHlw
ZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICAyLCAiZGVzY3JpcHRpb24iOiAiSW1wb3J0IGRlY2xh
cmF0aW9ucyIgfSwKKyAgICAgICAgIkZ1bmN0aW9uIjogIHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAgMywgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKKyAg
ICAgICAgIlRhYmxlIjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNCwgImRl
c2NyaXB0aW9uIjogIkluZGlyZWN0IGZ1bmN0aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMiIH0s
CisgICAgICAgICJNZW1vcnkiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDUs
ICJkZXNjcmlwdGlvbiI6ICJNZW1vcnkgYXR0cmlidXRlcyIgfSwKKyAgICAgICAgIkV4Y2VwdGlv
biI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMywgImRlc2NyaXB0aW9uIjogIkV4
Y2VwdGlvbiBkZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJHbG9iYWwiOiAgICB7ICJ0eXBlIjog
InZhcnVpbnQ3IiwgInZhbHVlIjogIDYsICJkZXNjcmlwdGlvbiI6ICJHbG9iYWwgZGVjbGFyYXRp
b25zIiB9LAorICAgICAgICAiRXhwb3J0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1
ZSI6ICA3LCAiZGVzY3JpcHRpb24iOiAiRXhwb3J0cyIgfSwKKyAgICAgICAgIlN0YXJ0IjogICAg
IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0YXJ0
IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIiB9LAorICAgICAgICAiRWxlbWVudCI6ICAgeyAidHlwZSI6
ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA5LCAiZGVzY3JpcHRpb24iOiAiRWxlbWVudHMgc2VjdGlv
biIgfSwKKyAgICAgICAgIkNvZGUiOiAgICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAxMCwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIGJvZGllcyAoY29kZSkiIH0sCisgICAgICAg
ICJEYXRhIjogICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlw
dGlvbiI6ICJEYXRhIHNlZ21lbnRzIiB9LAorICAgICAgICAiRGF0YUNvdW50IjogeyAidHlwZSI6
ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6IDEyLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIGRhdGEg
c2VnbWVudHMiIH0KICAgICB9LAogICAgICJvcGNvZGUiOiB7CiAgICAgICAgICJ1bnJlYWNoYWJs
ZSI6ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMCwgInJl
dHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidHJhcCBpbW1lZGlhdGVseSIg
fSwKKyAgICAgICAgIm5vcCI6ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9s
IiwgICAgInZhbHVlIjogICAxLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1l
ZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJubyBvcGVyYXRpb24iIH0sCiAgICAgICAgICJibG9jayI6ICAgICAgICAgICAgICAgeyAi
Y2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMiwgInJldHVybiI6IFsiY29udHJv
bCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9j
a190eXBlIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gYSBzZXF1ZW5jZSBvZiBleHByZXNzaW9ucywg
eWllbGRpbmcgMCBvciAxIHZhbHVlcyIgfSwKICAgICAgICAgImxvb3AiOiAgICAgICAgICAgICAg
ICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAzLCAicmV0dXJuIjogWyJj
b250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjog
ImJsb2NrX3R5cGUifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBhIGJsb2NrIHdoaWNoIGNhbiBhbHNv
IGZvcm0gY29udHJvbCBmbG93IGxvb3BzIiB9LAogICAgICAgICAiaWYiOiAgICAgICAgICAgICAg
ICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDQsICJyZXR1cm4iOiBb
ImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYm9vbCJdLCAg
ICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUi
OiAiYmxvY2tfdHlwZSJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGlmIGV4cHJlc3Npb24iIH0sCiAg
ICAgICAgICJlbHNlIjogICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAg
ICJ2YWx1ZSI6ICAgNSwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAg
ICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRl
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
YmVnaW4gZWxzZSBleHByZXNzaW9uIG9mIGlmIiB9LAotICAgICAgICAic2VsZWN0IjogICAgICAg
ICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4i
OiBbInByZXYiXSwgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55Iiwg
InByZXYiLCAiYm9vbCJdLCAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVl
cyBiYXNlZCBvbiBjb25kaXRpb24iIH0sCi0gICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJl
diJdLCAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIs
ICJib29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291
bnQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdl
dCB0eXBlcyB2ZWN0b3IifSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0
eXBlIjogInZhbHVlX3R5cGUqIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJ0YXJnZXQgdHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Yg
c2VsZWN0IGluc3RydWN0aW9uIn1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRo
IHRoZSBhbm5vdGF0aW9uIGZvciByZXN1bHQgdHlwZXMiIH0sCisgICAgICAgICJ0cnkiOiAgICAg
ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNiwgInJl
dHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWci
LCAidHlwZSI6ICJibG9ja190eXBlIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gdHJ5IGV4cHJlc3Np
b24iIH0sCisgICAgICAgICJjYXRjaCI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29u
dHJvbCIsICAgICJ2YWx1ZSI6ICAgNywgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAg
ICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4iLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiYmVnaW4gY2F0Y2ggZXhwcmVzc2lvbiBvZiB0cnkiIH0sCisgICAgICAgICJ0aHJv
dyI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAg
OCwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVy
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6
ICJleG4iLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhyb3cgZXhjZXB0
aW9uIiB9LAorICAgICAgICAicmV0aHJvdyI6ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNv
bnRyb2wiLCAgICAidmFsdWUiOiAgIDksICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAg
ICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50
MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogInJldGhyb3cgdGhlIGV4Y2VwdGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayIg
fSwKICAgICAgICAgImJyIjogICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9s
IiwgICAgInZhbHVlIjogIDEyLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1l
ZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0aXZlX2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1d
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJicmVhayB0aGF0IHRhcmdldHMgYW4gb3V0ZXIgbmVzdGVkIGJsb2NrIiB9LAogICAgICAg
ICAiYnJfaWYiOiAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFs
dWUiOiAgMTMsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBh
cmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7
Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImNvbmRp
dGlvbmFsIGJyZWFrIHRoYXQgdGFyZ2V0cyBhbiBvdXRlciBuZXN0ZWQgYmxvY2siIH0sCiAgICAg
ICAgICJicl90YWJsZSI6ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2
YWx1ZSI6ICAxNCwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
cGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjog
W3sibmFtZSI6ICJ0YXJnZXRfY291bnQiLCAgICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVt
YmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldF90YWJsZSJ9LApAQCAtNTgsOCArNjIsMTMgQEAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyJuYW1lIjogImRlZmF1bHRfdGFyZ2V0IiwgInR5cGUiOiAidmFydWludDMyIiwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJhbiBvdXRlciBibG9jayBvciBsb29wIHRvIHdoaWNoIHRvIGJyZWFrIGluIHRoZSBkZWZhdWx0
IGNhc2UifV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiYnJhbmNoIHRhYmxlIGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3QiIH0sCiAgICAg
ICAgICJyZXR1cm4iOiAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2
YWx1ZSI6ICAxNSwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
cGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAicmV0
dXJuIHplcm8gb3Igb25lIHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbiIgfSwKKyAgICAgICAgImRl
bGVnYXRlIjogICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjog
IDI0LCAicmV0dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0
ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1l
IjogInJlbGF0aXZlX2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJkZWxlZ2F0ZSB0
byBhIHBhcmVudCB0cnkgYmxvY2siIH0sCisgICAgICAgICJjYXRjaF9hbGwiOiAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNSwgInJldHVybiI6IFsiY29u
dHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiY2F0Y2ggZXhjZXB0aW9ucyByZWdhcmRsZXNzIG9m
IHRhZyIgfSwKICAgICAgICAgImRyb3AiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJj
b250cm9sIiwgICAgInZhbHVlIjogIDI2LCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFueSJdLCAgICAgICAgICAgICAgICAgICAgICAg
ICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJpZ25vcmUgdmFsdWUiIH0sCi0gICAgICAgICJub3AiOiAgICAgICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMSwgInJldHVybiI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibm8gb3BlcmF0aW9uIiB9LAorICAgICAgICAi
c2VsZWN0IjogICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUi
OiAgMjcsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFt
ZXRlciI6IFsiYW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInNlbGVjdCBv
bmUgb2YgdHdvIHZhbHVlcyBiYXNlZCBvbiBjb25kaXRpb24iIH0sCisgICAgICAgICJhbm5vdGF0
ZWRfc2VsZWN0IjogICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyOCwg
InJldHVybiI6IFsicHJldiJdLCAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjog
WyJhbnkiLCAicHJldiIsICJib29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0
YXJnZXRfdHlwZXNfY291bnQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJp
ZXMgaW4gdGhlIHRhcmdldCB0eXBlcyB2ZWN0b3IifSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogInRhcmdldF90
eXBlcyIsICAgICAgICJ0eXBlIjogInZhbHVlX3R5cGUqIiwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0YXJnZXQgdHlwZXMgdGhhdCBpbmRp
Y2F0ZSByZXN1bHQgb2Ygc2VsZWN0IGluc3RydWN0aW9uIn1dLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBzYW1lIGFzIGp1c3Qg
c2VsZWN0IGJ1dCB3aXRoIHRoZSBhbm5vdGF0aW9uIGZvciByZXN1bHQgdHlwZXMiIH0sCiAgICAg
ICAgICJlbmQiOiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2
YWx1ZSI6ICAxMSwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
cGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjog
W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZW5k
IGEgYmxvY2ssIGxvb3AsIG9yIGlmIiB9LAogICAgICAgICAiaTMyLmNvbnN0IjogICAgICAgICAg
IHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAidmFsdWUiOiAgNjUsICJyZXR1cm4iOiBbImkz
MiJdLCAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidmFsdWUiLCAgICAgICAg
ICAidHlwZSI6ICJ2YXJpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImEgY29uc3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQg
YXMgaTMyIiB9LAogICAgICAgICAiaTY0LmNvbnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5Ijog
InNwZWNpYWwiLCAgICAidmFsdWUiOiAgNjYsICJyZXR1cm4iOiBbImk2NCJdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJp
bnQ2NCJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogImEgY29uc3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTY0IiB9LApkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGE5NDVhMGRh
MzNiODNmNmJhZjM2Y2NlNzA3ZDdjMDcxYTQ5MWE5NzAuLjJhNWQ5MDRkZjI4MmUzZjk5YzYzODA2
NzRmNDk0NmNhYWQ5NTg2OGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0xMC0wNSAgVGFkZXUgWmFnYWxsbyAg
PHR6YWdhbGxvQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgdGhlIFdlYkFzc2VtYmx5
IGV4Y2VwdGlvbiBoYW5kbGluZyBwcm9wb3NhbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5NjgxCisgICAgICAgIDxyZGFyOi8vODE2MDMzODc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLgorCisgICAgICAgICogU2NyaXB0cy9y
dW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAyMS0xMC0wNiAgWW91ZW5uIEZhYmxldCAgPHlvdWVu
bkBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9w
dXNoLWFwaS8jcmVjZWl2aW5nLWEtcHVzaC1tZXNzYWdlCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0cwppbmRleCBlMDgxNmRjMDU2MWIxODBhOWVmYjY2NzhkYjgyY2M2NDZlMTliNDgxLi5kZGY5
NDdkZWI3NzIzODJiMjg5NjA5N2RhNjRjMTNiODBjYTJhZjE4IDEwMDc1NQotLS0gYS9Ub29scy9T
Y3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1z
dHJlc3MtdGVzdHMKQEAgLTEyMjcsMTYgKzEyMjcsMjEgQEAgZGVmIHJ1bldlYkFzc2VtYmx5U3Vp
dGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICBtb2R1bGVzID0gRGlyW1dBU01U
RVNUU19QQVRIICsgIiouanMiXS5tYXAgeyB8ZnwgRmlsZS5iYXNlbmFtZShmKSB9CiAgICAgcHJl
cGFyZUV4dHJhQWJzb2x1dGVGaWxlcyhXQVNNVEVTVFNfUEFUSCwgWyJ3YXNtLmpzb24iXSkKICAg
ICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzKG1vZHVsZXMubWFwIHsgfGZ8ICIuLi8iICsgZiB9
LCAkY29sbGVjdGlvbikKLSAgICBydW4oImRlZmF1bHQtd2FzbSIsICItbSIsICooRlRMX09QVElP
TlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIGlmIG9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9uc1swXSA9PSA6bm9fbW9kdWxlCisgICAgICBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMuc2hpZnQKKyAgICBlbHNlCisgICAgICBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
bnMudW5zaGlmdCAiLW0iCisgICAgZW5kCisgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAqKEZUTF9P
UFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICBpZiAkbW9kZSAhPSAi
cXVpY2siCi0gICAgICAgIHJ1bigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsICItbSIs
ICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NK
SVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigi
d2FzbS1lYWdlciIsICItbSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29u
IiwgIi1tIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICIt
LXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICItLXZlcmlm
eUdDPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkK
LSAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zv
cldhc21Db250ZXh0PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykpCi0gICAgICAgIHJ1bigid2FzbS1zbG93LW1lbW9yeSIsICItbSIsICItLXVzZVdl
YkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tYjMiLCAiLW0iLCAiLS11c2VXYXNt
TExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICooRlRMX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tYWlyIiwgIi1t
IiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNs
YW5kQWxsb2NhdGlvbj10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykpCi0gICAgICAgIHJ1bigid2FzbS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsICItbSIs
ICItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSIsICItLXZlcmlmeUdDPXRydWUiLCAqKEZUTF9P
UFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkgaWYgc2hvdWxkQ29sbGVjdENv
bnRpbnVvdXNseT8KKyAgICAgICAgcnVuKCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0Iiwg
Ii0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJ
VF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3
YXNtLWVhZ2VyIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1m
b3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXpp
bmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgIi0tdmVyaWZ5R0M9dHJ1ZSIsICoo
RlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4o
Indhc20tbm8tdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2Ui
LCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAg
cnVuKCJ3YXNtLXNsb3ctbWVtb3J5IiwgIi0tdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNl
IiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAg
IHJ1bigid2FzbS1iMyIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWly
PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisg
ICAgICAgIHJ1bigid2FzbS1haXIiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5k
b21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWNvbGxlY3Qt
Y29udGludW91c2x5IiwgIi0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIiwgIi0tdmVyaWZ5R0M9
dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKSBpZiBz
aG91bGRDb2xsZWN0Q29udGludW91c2x5PwogICAgIGVuZAogZW5kCiAKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggY2QyN2QzZmFlZGE2OWNk
OTRlMzFjYmYwYTgzMTE3NzMyZjk4OGVhZS4uYTZiZWQ1YTVlYzc4YWE4ZDBjMzhmZjA5MDRhMDAy
MGRmYzc5ZmRhYSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMzYgQEAKKzIwMjEtMTAtMDUgIFRhZGV1IFphZ2FsbG8gIDx0
emFnYWxsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IHRoZSBXZWJBc3NlbWJseSBl
eGNlcHRpb24gaGFuZGxpbmcgcHJvcG9zYWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyOTY4MQorICAgICAgICA8cmRhcjovLzgxNjAzMzg3PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxlci4KKworICAgICAgICBBZGQgbmV3IHRlc3Rz
IGZvciB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBpbXBvcnQgYSBzZXQgb2YgdGVzdHMgdXNl
ZCBieSBWOCBpbnRvIHdhc20vdjguCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisgICAgICAgICog
d2FzbS9CdWlsZGVyLmpzOgorICAgICAgICAoY29uc3QuX2ltcG9ydEV4Y2VwdGlvbkNvbnRpbnVh
dGlvbi50eXBlLkltcG9ydC5maWVsZCk6CisgICAgICAgIChleHBvcnQuZGVmYXVsdC5CdWlsZGVy
LnByb3RvdHlwZS5fcmVnaXN0ZXJTZWN0aW9uQnVpbGRlcnMuY29uc3Quc2VjdGlvbi5pbi5XQVNN
LmRlc2NyaXB0aW9uLnNlY3Rpb24uc3dpdGNoLnNlY3Rpb24uY2FzZS5zdHJpbmdfYXBwZWFyZWRf
aGVyZS50aGlzLnNlY3Rpb24pOgorICAgICAgICAoY29uc3QuX2V4cG9ydEZ1bmN0aW9uQ29udGlu
dWF0aW9uLnR5cGUuRXhwb3J0LmZpZWxkKTogRGVsZXRlZC4KKyAgICAgICAgKGNvbnN0Ll9leHBv
cnRGdW5jdGlvbkNvbnRpbnVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9CdWlsZGVy
X1dlYkFzc2VtYmx5QmluYXJ5LmpzOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuSW1wb3J0KToK
KyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkV4cG9ydCk6CisgICAgICAgIChjb25zdC5lbWl0dGVy
cy5FeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vYXNzZXJ0LmpzOgorICAgICAgICAqIHdhc20v
c2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanM6CisgICAgICAgIChJbXBvcnRCZWZvcmVUeXBl
U2VjdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vc3RyZXNzL2NhdGNoLXdpdGgtZGVs
ZWdhdGUuanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBw
ZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2Fs
bGJhY2spOgorICAgICAgICAoYXNzZXJ0LnRocm93cyk6CisgICAgICAgICogd2FzbS9zdHJlc3Mv
Y3JlYXRlLXRhZy1mcm9tLmpzOiBBZGRlZC4KKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNlcHRp
b24tY3Jvc3MtaW5zdGFuY2UtMi5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAg
KGFzc2VydC5lcSk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3Rh
bmNlLTMuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgIChhc3NlcnQuZXEpOgor
ICAgICAgICAqIHdhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS5qczogQWRkZWQu
CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGFzc2VydC50aHJvd3MpOgorICAgICAgICAoaW5z
dEIubmV3LldlYkFzc2VtYmx5Lkluc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9leGNl
cHRpb24tbGl2ZW5lc3MtdGllci11cC5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRl
ci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS5jYXRjaCk6CisgICAgICAgIChhc3NlcnQuZXEuKToKKyAgICAgICAgKGFz
c2VydC5lcSk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLW11bHRpcGxlLWluc3Rh
bmNlcy5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBl
YXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5jb25z
dC5tb2R1bGUubmV3LldlYkFzc2VtYmx5Lk1vZHVsZSk6CisgICAgICAgIChpbXBvcnQuQnVpbGRl
ci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS5pbnN0LmV4cG9ydHMudGhyb3cpOgorICAgICAgICAqIHdhc20vc3RyZXNz
L2V4Y2VwdGlvbi1zaW1wbGUtZGVsZWdhdGUuanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1
aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3Ry
aW5nX2FwcGVhcmVkX2hlcmUudGVzdFNpbXBsZVRocm93RGVsZWdhdGUpOgorICAgICAgICAodGVz
dFRocm93RGVsZWdhdGVTa2lwKToKKyAgICAgICAgKHRlc3REZWxlZ2F0ZUNhbGxlcik6CisgICAg
ICAgICh0ZXN0U2ltcGxlRGVsZWdhdGVNZXJnZSk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhj
ZXB0aW9uLXNpbXBsZS10aHJvdy1jYXRjaC5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVp
bGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJp
bmdfYXBwZWFyZWRfaGVyZS50ZXN0U2ltcGxlVHJ5Q2F0Y2gpOgorICAgICAgICAodGVzdFNpbXBs
ZVRyeUNhdGNoQWxsKToKKyAgICAgICAgKHRlc3RDYWxsVHJ5Q2F0Y2gpOgorICAgICAgICAodGVz
dENhbGxUcnlDYXRjaEFsbCk6CisgICAgICAgICh0ZXN0U2ltcGxlVHJ5Q2F0Y2hWYWx1ZSk6Cisg
ICAgICAgICh0ZXN0Q2FsbFRyeUNhdGNoVmFsdWUpOgorICAgICAgICAodGVzdFN0YWNrVHJ5Q2F0
Y2gpOgorICAgICAgICAodGVzdExpdmVBZnRlclRyeUNhdGNoKToKKyAgICAgICAgKHRlc3RMaXZl
QWZ0ZXJUcnlDYXRjaEFsbCk6CisgICAgICAgICh0ZXN0VW5pZnlUcnlDYXRjaENhdGNoKToKKyAg
ICAgICAgKHRlc3RVbmlmeVRyeUNhdGNoQ2F0Y2hBbGwpOgorICAgICAgICAodGVzdFVuaWZ5VHJ5
Tm9UaHJvdyk6CisgICAgICAgICh0ZXN0VW5pZnlUcnlOb0NhdGNoKToKKyAgICAgICAgKHRlc3RO
ZXN0ZWRDYXRjaCk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9t
LWpzLXRvLXdhc20tY2F0Y2hhbGwtcmV0aHJvdy5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQu
QnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5z
dHJpbmdfYXBwZWFyZWRfaGVyZS5jYWxsYmFjayk6CisgICAgICAgICogd2FzbS9zdHJlc3MvZXhj
ZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwuanM6IEFkZGVkLgorICAgICAg
ICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNz
ZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2FsbGJhY2spOgorICAgICAgICAqIHdhc20v
c3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tZnJvbS1qcy10by13YXNtLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFz
c2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNhbGxiYWNrKToKKyAgICAgICAgKiB3YXNt
L3N0cmVzcy9leGNlcHRpb24tdGhyb3duLW91dC1vZi13YXNtLmpzOiBBZGRlZC4KKyAgICAgICAg
KiB3YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLW92ZXItd2FzbS5qczogQWRkZWQuCisgICAg
ICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5h
c3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5jYWxsYmFjayk6CisgICAgICAgICogd2Fz
bS9zdHJlc3MvZXhjZXB0aW9uLXRyYXAuanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxk
ZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5n
X2FwcGVhcmVkX2hlcmUudGVzdENhbm5vdENhdGNoVW5yZWFjaGFibGUpOgorICAgICAgICAodGVz
dENhbm5vdENhdGNoT09CKToKKyAgICAgICAgKHRlc3RXYXNtQVBJVGhyb3cpOgorICAgICAgICAo
dGVzdEpTQ2F0Y2hBbmRSZXRocm93KToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9yZXRocm93LWZy
b20tY2F0Y2gtdG8tY2F0Y2guanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJv
bS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVh
cmVkX2hlcmUuY2FsbGJhY2spOgorICAgICAgICAqIHdhc20vc3RyZXNzL3JldGhyb3ctdG8tY2F0
Y2guanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFy
ZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY2FsbGJh
Y2spOgorICAgICAgICAoYXNzZXJ0LnRocm93cy5jYWxsYmFjayk6CisgICAgICAgIChhc3NlcnQu
dGhyb3dzKToKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9yZXRocm93LXRvLWRlbGVnYXRlLXRvLWNh
dGNoLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVh
cmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlKToKKyAg
ICAgICAgKGFzc2VydC5lcS5leG4uZ2V0QXJnKToKKyAgICAgICAgKGFzc2VydC50aHJvd3MpOgor
ICAgICAgICAoYXNzZXJ0LnRocm93cy5jYWxsYmFjayk6CisgICAgICAgIChhc3NlcnQuZXEpOgor
ICAgICAgICAqIHdhc20vc3RyZXNzL3NpbXBsZS1leHBvcnQtZXhjZXB0aW9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKiB3YXNtL3Y4L0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIHdhc20vdjgvZXhj
ZXB0aW9ucy1hcGkuanM6IEFkZGVkLgorICAgICAgICAoVGVzdEltcG9ydCk6CisgICAgICAgIChU
ZXN0SW1wb3J0RXhwb3J0KToKKyAgICAgICAgKFRlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JXaXRoUGF5bG9hZCk6CisgICAgICAgIChU
ZXN0Q2F0Y2hKU0V4Y2VwdGlvbi5qc19mdW5jKToKKyAgICAgICAgKGpzX2Z1bmMpOgorICAgICAg
ICAoVGVzdENhdGNoSlMpOgorICAgICAgICAoVGVzdENhdGNoSlNFeGNlcHRpb25XaXRoUGF5bG9h
ZCk6CisgICAgICAgIChUZXN0R2V0QXJnKToKKyAgICAgICAgKiB3YXNtL3Y4L2V4Y2VwdGlvbnMt
ZXhwb3J0LmpzOiBBZGRlZC4KKyAgICAgICAgKFRlc3RFeHBvcnRNdWx0aXBsZSk6CisgICAgICAg
IChUZXN0RXhwb3J0T3V0T2ZCb3VuZHMpOgorICAgICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy1l
eHRlcm5yZWYuanM6IEFkZGVkLgorICAgICAgICAoVGVzdFRocm93UmVmTnVsbCk6CisgICAgICAg
IChUZXN0VGhyb3dSZWZQYXJhbSk6CisgICAgICAgICogd2FzbS92OC9leGNlcHRpb25zLWltcG9y
dC5qczogQWRkZWQuCisgICAgICAgIChOZXdFeHBvcnRlZFRhZyk6CisgICAgICAgIChUZXN0SW1w
b3J0U2ltcGxlKToKKyAgICAgICAgKFRlc3RJbXBvcnRNaXNzaW5nKToKKyAgICAgICAgKiB3YXNt
L3Y4L2V4Y2VwdGlvbnMtcmV0aHJvdy5qczogQWRkZWQuCisgICAgICAgIChUZXN0UmV0aHJvd0lu
Q2F0Y2gpOgorICAgICAgICAoVGVzdFJldGhyb3dJbkNhdGNoQWxsKToKKyAgICAgICAgKFRlc3RS
ZXRocm93TmVzdGVkKToKKyAgICAgICAgKFRlc3RSZXRocm93UmVjYXRjaCk6CisgICAgICAgICog
d2FzbS92OC9leGNlcHRpb25zLXNoYXJlZC5qczogQWRkZWQuCisgICAgICAgIChOZXdFeHBvcnRl
ZEV4Y2VwdGlvbik6CisgICAgICAgIChUZXN0U2luZ2xlSW5zdGFuY2UubGV0Lmluc3RhbmNlLmJ1
aWxkZXIuaW5zdGFudGlhdGUuKToKKyAgICAgICAgKFRlc3RTaW5nbGVJbnN0YW5jZSk6CisgICAg
ICAgIChUZXN0TXVsdGlJbnN0YW5jZU5vblNoYXJlZC5sZXQuaW5zdGFuY2UyLmJ1aWxkZXIuaW5z
dGFudGlhdGUuKToKKyAgICAgICAgKFRlc3RNdWx0aUluc3RhbmNlU2hhcmVkLmxldC5pbnN0YW5j
ZTIuYnVpbGRlci5pbnN0YW50aWF0ZS4pOgorICAgICAgICAoVGVzdE11bHRpTW9kdWxlU2hhcmVk
LmxldC5pbnN0YW5jZTIuYnVpbGRlcjIuaW5zdGFudGlhdGUuKToKKyAgICAgICAgKiB3YXNtL3Y4
L2V4Y2VwdGlvbnMtdHlwZS1yZWZsZWN0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKFRlc3RFeHBv
cnQpOgorICAgICAgICAoVGVzdEltcG9ydEV4cG9ydCk6CisgICAgICAgICogd2FzbS92OC9leGNl
cHRpb25zLXV0aWxzLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydFdhc21UaHJvd3MpOgorICAg
ICAgICAqIHdhc20vdjgvZXhjZXB0aW9ucy5qczogQWRkZWQuCisgICAgICAgIChUZXN0VGhyb3dT
aW1wbGUpOgorICAgICAgICAoVGVzdENhdGNoU2ltcGxlKToKKyAgICAgICAgKFRlc3RUcmFwTm90
Q2F1Z2h0KToKKyAgICAgICAgKFRlc3RUcmFwVmlhSlNOb3RDYXVnaHQuanNfaW1wb3J0KToKKyAg
ICAgICAgKFRlc3RNYW51YWxseVRocm93blJ1bnRpbWVFcnJvckNhdWdodC50aHJvd19leGMpOgor
ICAgICAgICAoVGVzdE1hbnVhbGx5VGhyb3duUnVudGltZUVycm9yQ2F1Z2h0KToKKyAgICAgICAg
KFRlc3RFeG5XaXRoV2FzbVByb3RvTm90Q2F1Z2h0LmpzX2ltcG9ydCk6CisgICAgICAgIChUZXN0
RXhuV2l0aFdhc21Qcm90b05vdENhdWdodCk6CisgICAgICAgIChUZXN0U3RhY2tPdmVyZmxvd05v
dENhdWdodC5zdGFja19vdmVyZmxvdyk6CisgICAgICAgIChUZXN0U3RhY2tPdmVyZmxvd05vdENh
dWdodCk6CisgICAgICAgIChUZXN0VGhyb3dQYXJhbUkpOgorICAgICAgICAoVGVzdFRocm93UGFy
YW1GKToKKyAgICAgICAgKFRlc3RUaHJvd1BhcmFtTCk6CisgICAgICAgIChUZXN0VGhyb3dQYXJh
bUQpOgorICAgICAgICAoVGVzdENhdGNoQ3Jvc3NGdW5jdGlvbnMudGhyb3dfdmFsdWUpOgorICAg
ICAgICAoVGVzdENhdGNoQ3Jvc3NGdW5jdGlvbnMudGhyb3dfc3RyaW5nKToKKyAgICAgICAgKFRl
c3RDYXRjaENyb3NzRnVuY3Rpb25zLnRocm93X3VuZGVmaW5lZCk6CisgICAgICAgIChUZXN0Q2F0
Y2hDcm9zc0Z1bmN0aW9ucy50aHJvd19mcCk6CisgICAgICAgIChUZXN0Q2F0Y2hDcm9zc0Z1bmN0
aW9ucy50aHJvd19sYXJnZSk6CisgICAgICAgIChUZXN0RGVsZWdhdGVOb1Rocm93KToKKyAgICAg
ICAgKFRlc3REZWxlZ2F0ZVRocm93KToKKyAgICAgICAgKFRlc3REZWxlZ2F0ZVRocm93Tm9DYXRj
aCk6CisgICAgICAgIChUZXN0RGVsZWdhdGVNZXJnZSk6CisgICAgICAgIChUZXN0RGVsZWdhdGUx
KToKKyAgICAgICAgKFRlc3REZWxlZ2F0ZVVucmVhY2hhYmxlKToKKyAgICAgICAgKFRlc3REZWxl
Z2F0ZVRvQ2FsbGVyKToKKyAgICAgICAgKFRlc3RVbnJlYWNoYWJsZUluQ2F0Y2hBbGwpOgorICAg
ICAgICAoVGVzdFRocm93V2l0aExvY2FsKToKKyAgICAgICAgKFRlc3RDYXRjaGxlc3NUcnkpOgor
ICAgICAgICAqIHdhc20vdjgvbWpzdW5pdC5qczogQWRkZWQuCisgICAgICAgIChNanNVbml0QXNz
ZXJ0aW9uRXJyb3IpOgorICAgICAgICAoTWpzVW5pdEFzc2VydGlvbkVycm9yLnByb3RvdHlwZS50
b1N0cmluZyk6CisgICAgICAgIChjYXRjaCk6CisgICAgICAgIChjbGFzc09mKToKKyAgICAgICAg
KFZhbHVlT2YpOgorICAgICAgICAocHJldHR5UHJpbnRlZCk6CisgICAgICAgIChwcmV0dHlQcmlu
dGVkQXJyYXlFbGVtZW50KToKKyAgICAgICAgKGZhaWxXaXRoTWVzc2FnZSk6CisgICAgICAgIChm
b3JtYXRGYWlsdXJlVGV4dCk6CisgICAgICAgIChmYWlsKToKKyAgICAgICAgKGRlZXBPYmplY3RF
cXVhbHMpOgorICAgICAgICAoZGVlcEVxdWFscyk6CisgICAgICAgIChhc3NlcnRTYW1lKToKKyAg
ICAgICAgKGFzc2VydE5vdFNhbWUpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzKToKKyAgICAgICAg
KGFzc2VydE5vdEVxdWFscyk6CisgICAgICAgIChhc3NlcnRFcXVhbHNEZWx0YSk6CisgICAgICAg
IChhc3NlcnRBcnJheUVxdWFscyk6CisgICAgICAgIChhc3NlcnRQcm9wZXJ0aWVzRXF1YWwpOgor
ICAgICAgICAoYXNzZXJ0VG9TdHJpbmdFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0VHJ1ZSk6Cisg
ICAgICAgIChhc3NlcnRGYWxzZSk6CisgICAgICAgIChhc3NlcnROdWxsKToKKyAgICAgICAgKGFz
c2VydE5vdE51bGwpOgorICAgICAgICAoZXhlY3V0ZUNvZGUpOgorICAgICAgICAoY2hlY2tFeGNl
cHRpb24pOgorICAgICAgICAoYXNzZXJ0VGhyb3dzKToKKyAgICAgICAgKGFzc2VydFRocm93c0Vx
dWFscyk6CisgICAgICAgIChhc3NlcnRUaHJvd3NBc3luYyk6CisgICAgICAgIChhc3NlcnRJbnN0
YW5jZW9mKToKKyAgICAgICAgKGFzc2VydERvZXNOb3RUaHJvdyk6CisgICAgICAgIChhc3NlcnRV
bnJlYWNoYWJsZSk6CisgICAgICAgIChhc3NlcnRDb250YWlucyk6CisgICAgICAgIChhc3NlcnRN
YXRjaGVzKToKKyAgICAgICAgKGNvbmNhdGVuYXRlRXJyb3JzKToKKyAgICAgICAgKGFzc2VydFBy
b21pc2VSZXN1bHQpOgorICAgICAgICAoT3B0aW1pemF0aW9uU3RhdHVzKToKKyAgICAgICAgKGFz
c2VydFVub3B0aW1pemVkKToKKyAgICAgICAgKGFzc2VydE9wdGltaXplZCk6CisgICAgICAgIChp
c05ldmVyT3B0aW1pemVMaXRlTW9kZSk6CisgICAgICAgIChpc05ldmVyT3B0aW1pemUpOgorICAg
ICAgICAoaXNBbHdheXNPcHRpbWl6ZSk6CisgICAgICAgIChpc0ludGVycHJldGVkKToKKyAgICAg
ICAgKGlzQmFzZWxpbmUpOgorICAgICAgICAoaXNVbm9wdGltaXplZCk6CisgICAgICAgIChpc09w
dGltaXplZCk6CisgICAgICAgIChpc1R1cmJvRmFubmVkKToKKyAgICAgICAgKE1qc1VuaXRBc3Nl
cnRpb25FcnJvci5wcmVwYXJlU3RhY2tUcmFjZSk6CisgICAgICAgICogd2FzbS92OC93YXNtLW1v
ZHVsZS1idWlsZGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGJ5dGVzKToKKyAgICAgICAgKHdhc21P
cHRSZWZUeXBlKToKKyAgICAgICAgKHdhc21SZWZUeXBlKToKKyAgICAgICAgKHdhc21SdHQpOgor
ICAgICAgICAod2FzbVJ0dE5vRGVwdGgpOgorICAgICAgICAobWFrZVNpZyk6CisgICAgICAgICht
YWtlU2lnX3ZfeCk6CisgICAgICAgIChtYWtlU2lnX3hfdik6CisgICAgICAgIChtYWtlU2lnX3Zf
eHgpOgorICAgICAgICAobWFrZVNpZ19yX3YpOgorICAgICAgICAobWFrZVNpZ19yX3gpOgorICAg
ICAgICAobWFrZVNpZ19yX3h4KToKKyAgICAgICAgKGRlZmluZVdhc21PcGNvZGUpOgorICAgICAg
ICAoYXNzZXJ0VHJhcHMpOgorICAgICAgICAoQmluYXJ5KToKKyAgICAgICAgKEJpbmFyeS5wcm90
b3R5cGUuZW5zdXJlX3NwYWNlKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUudHJ1bmNfYnVm
ZmVyKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoQmluYXJ5
LnByb3RvdHlwZS5lbWl0X3U4KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF91MTYp
OgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X3UzMik6CisgICAgICAgIChCaW5hcnku
cHJvdG90eXBlLmVtaXRfbGViX3UpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X3Uz
MnYpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X3U2NHYpOgorICAgICAgICAoQmlu
YXJ5LnByb3RvdHlwZS5lbWl0X2J5dGVzKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1p
dF9zdHJpbmcpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2hlYXBfdHlwZSk6Cisg
ICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfdHlwZSk6CisgICAgICAgIChCaW5hcnkucHJv
dG90eXBlLmVtaXRfaW5pdF9leHByX3JlY3Vyc2l2ZSk6CisgICAgICAgIChCaW5hcnkucHJvdG90
eXBlLmVtaXRfaW5pdF9leHByKToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF9oZWFk
ZXIpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X3NlY3Rpb24pOgorICAgICAgICAo
V2FzbUZ1bmN0aW9uQnVpbGRlcik6CisgICAgICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyLnByb3Rv
dHlwZS5udW1Mb2NhbE5hbWVzKToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90
eXBlLmV4cG9ydEFzKToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLmV4
cG9ydEZ1bmMpOgorICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuc2V0Q29t
cGlsYXRpb25IaW50KToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLmFk
ZEJvZHkpOgorICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuYWRkQm9keVdp
dGhFbmQpOgorICAgICAgICAoV2FzbUZ1bmN0aW9uQnVpbGRlci5wcm90b3R5cGUuZ2V0TnVtTG9j
YWxzKToKKyAgICAgICAgKFdhc21GdW5jdGlvbkJ1aWxkZXIucHJvdG90eXBlLmFkZExvY2Fscyk6
CisgICAgICAgIChXYXNtRnVuY3Rpb25CdWlsZGVyLnByb3RvdHlwZS5lbmQpOgorICAgICAgICAo
V2FzbUluaXRFeHByLkkzMkNvbnN0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5JNjRDb25zdCk6
CisgICAgICAgIChXYXNtSW5pdEV4cHIuRjMyQ29uc3QpOgorICAgICAgICAoV2FzbUluaXRFeHBy
LkY2NENvbnN0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5TMTI4Q29uc3QpOgorICAgICAgICAo
V2FzbUluaXRFeHByLkdsb2JhbEdldCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuUmVmRnVuYyk6
CisgICAgICAgIChXYXNtSW5pdEV4cHIuUmVmTnVsbCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIu
U3RydWN0TmV3V2l0aFJ0dCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuU3RydWN0TmV3KToKKyAg
ICAgICAgKFdhc21Jbml0RXhwci5TdHJ1Y3ROZXdEZWZhdWx0V2l0aFJ0dCk6CisgICAgICAgIChX
YXNtSW5pdEV4cHIuU3RydWN0TmV3RGVmYXVsdCk6CisgICAgICAgIChXYXNtSW5pdEV4cHIuQXJy
YXlJbml0KToKKyAgICAgICAgKFdhc21Jbml0RXhwci5BcnJheUluaXRTdGF0aWMpOgorICAgICAg
ICAoV2FzbUluaXRFeHByLlJ0dENhbm9uKToKKyAgICAgICAgKFdhc21Jbml0RXhwci5SdHRTdWIp
OgorICAgICAgICAoV2FzbUluaXRFeHByLlJ0dEZyZXNoU3ViKToKKyAgICAgICAgKFdhc21Jbml0
RXhwci5kZWZhdWx0Rm9yKToKKyAgICAgICAgKFdhc21Jbml0RXhwcik6CisgICAgICAgIChXYXNt
R2xvYmFsQnVpbGRlcik6CisgICAgICAgIChXYXNtR2xvYmFsQnVpbGRlci5wcm90b3R5cGUuZXhw
b3J0QXMpOgorICAgICAgICAoV2FzbVRhYmxlQnVpbGRlcik6CisgICAgICAgIChXYXNtVGFibGVC
dWlsZGVyLnByb3RvdHlwZS5leHBvcnRBcyk6CisgICAgICAgIChtYWtlRmllbGQpOgorICAgICAg
ICAoV2FzbVN0cnVjdCk6CisgICAgICAgIChXYXNtU3RydWN0U3VidHlwZSk6CisgICAgICAgIChX
YXNtQXJyYXkpOgorICAgICAgICAoV2FzbUFycmF5U3VidHlwZSk6CisgICAgICAgIChXYXNtRWxl
bVNlZ21lbnQpOgorICAgICAgICAoV2FzbUVsZW1TZWdtZW50LnByb3RvdHlwZS5pc19hY3RpdmUp
OgorICAgICAgICAoV2FzbUVsZW1TZWdtZW50LnByb3RvdHlwZS5pc19wYXNzaXZlKToKKyAgICAg
ICAgKFdhc21FbGVtU2VnbWVudC5wcm90b3R5cGUuaXNfZGVjbGFyYXRpdmUpOgorICAgICAgICAo
V2FzbUVsZW1TZWdtZW50LnByb3RvdHlwZS5leHByZXNzaW9uc19hc19lbGVtZW50cyk6CisgICAg
ICAgIChXYXNtTW9kdWxlQnVpbGRlcik6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90
b3R5cGUuYWRkU3RhcnQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFk
ZE1lbW9yeSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkTWVtb3J5
NjQpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEV4cGxpY2l0U2Vj
dGlvbik6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuc3RyaW5nVG9CeXRl
cyk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuY3JlYXRlQ3VzdG9tU2Vj
dGlvbik6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkQ3VzdG9tU2Vj
dGlvbik6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkVHlwZSk6Cisg
ICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkU3RydWN0KToKKyAgICAgICAg
KFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRTdHJ1Y3RTdWJ0eXBlKToKKyAgICAgICAg
KFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRBcnJheSk6CisgICAgICAgIChXYXNtTW9k
dWxlQnVpbGRlci5wcm90b3R5cGUuYWRkQXJyYXlTdWJ0eXBlKToKKyAgICAgICAgKFdhc21Nb2R1
bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRHbG9iYWwpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxk
ZXIucHJvdG90eXBlLmFkZFRhYmxlKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3Rv
dHlwZS5hZGRUYWcpOgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEZ1
bmN0aW9uKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRJbXBvcnQp
OgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEltcG9ydGVkR2xvYmFs
KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRJbXBvcnRlZE1lbW9y
eSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkSW1wb3J0ZWRUYWJs
ZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkSW1wb3J0ZWRUYWcp
OgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZEV4cG9ydCk6CisgICAg
ICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkRXhwb3J0T2ZLaW5kKToKKyAgICAg
ICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5zZXRDb21waWxhdGlvbkhpbnQpOgorICAg
ICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmFkZERhdGFTZWdtZW50KToKKyAgICAg
ICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRQYXNzaXZlRGF0YVNlZ21lbnQpOgor
ICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmV4cG9ydE1lbW9yeUFzKToKKyAg
ICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGRBY3RpdmVFbGVtZW50U2VnbWVu
dCk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUuYWRkUGFzc2l2ZUVsZW1l
bnRTZWdtZW50KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hZGREZWNs
YXJhdGl2ZUVsZW1lbnRTZWdtZW50KToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3Rv
dHlwZS5hcHBlbmRUb1RhYmxlKToKKyAgICAgICAgKFdhc21Nb2R1bGVCdWlsZGVyLnByb3RvdHlw
ZS5zZXRUYWJsZUJvdW5kcyk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUu
c2V0TmFtZSk6CisgICAgICAgIChXYXNtTW9kdWxlQnVpbGRlci5wcm90b3R5cGUudG9CdWZmZXIp
OgorICAgICAgICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLnRvQXJyYXkpOgorICAgICAg
ICAoV2FzbU1vZHVsZUJ1aWxkZXIucHJvdG90eXBlLmluc3RhbnRpYXRlKToKKyAgICAgICAgKFdh
c21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS5hc3luY0luc3RhbnRpYXRlKToKKyAgICAgICAgKFdh
c21Nb2R1bGVCdWlsZGVyLnByb3RvdHlwZS50b01vZHVsZSk6CisgICAgICAgICh3YXNtU2lnbmVk
TGViKToKKyAgICAgICAgKHdhc21VbnNpZ25lZExlYik6CisgICAgICAgICh3YXNtSTMyQ29uc3Qp
OgorICAgICAgICAod2FzbUk2NENvbnN0KToKKyAgICAgICAgKHdhc21GMzJDb25zdCk6CisgICAg
ICAgICh3YXNtRjY0Q29uc3QpOgorICAgICAgICAod2FzbVMxMjhDb25zdCk6CisgICAgICAgIChn
ZXRPcGNvZGVOYW1lKToKKyAgICAgICAgKiB3YXNtL3dhc20uanNvbjoKKwogMjAyMS0xMC0wNSAg
U2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBEb24ndCBwYXNzIERv
bnRCdWlsZFN0cmluZ3MgdG8gbmV4dCB0b2tlbiBhZnRlciBwYXJzaW5nIGFuIGVtcHR5IHBhcmFt
ZXRlciBsaXN0CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20ueWFtbCBiL0pTVGVzdHMvd2FzbS55
YW1sCmluZGV4IDJlY2I2MzRkYmY1YjJiZWU3MmNkZDEzYzQwMTc5YmYyZjVlOTRiYzEuLjFmNDUx
YmM5MTE4Y2NhYzMzOTg5NzBlYTQ5YjI1ODljYWYzM2NjMjcgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
d2FzbS55YW1sCisrKyBiL0pTVGVzdHMvd2FzbS55YW1sCkBAIC00NSw2ICs0NSw4IEBACiAgIGNt
ZDogcnVuV2ViQXNzZW1ibHkgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2FzbS9z
ZWxmLXRlc3QvCiAgIGNtZDogcnVuV2ViQXNzZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VSdW5Db21t
YW5kcworLSBwYXRoOiB3YXNtL3Y4LworICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUoOm5vX21v
ZHVsZSwgIm1qc3VuaXQuanMiKSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogCiAtIHBhdGg6IHdh
c20vcmVmZXJlbmNlcy1zcGVjLXRlc3RzL2VsZW0ud2FzdC5qcwogICBjbWQ6IHJ1bldlYkFzc2Vt
Ymx5UmVmZXJlbmNlU3BlY1Rlc3QgOm5vcm1hbApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL0J1
aWxkZXIuanMgYi9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcwppbmRleCAzMmZmZTZiYmI1NjFhNTMz
Mzg1N2VkMjMxYjA0N2E3ZjJhZmJmMTE1Li4xMTAxZjcyNWNjZGRiMGNjMWU4OWEwNWM3YWRkN2Ji
NDlkMmY1OTdjIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcworKysgYi9KU1Rl
c3RzL3dhc20vQnVpbGRlci5qcwpAQCAtMTI4LDYgKzEyOCwxOCBAQCBjb25zdCBfaW1wb3J0VGFi
bGVDb250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKICAg
ICB9OwogfTsKIAorY29uc3QgX2ltcG9ydEV4Y2VwdGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVy
LCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4geworICAgIHJldHVybiAobW9kdWxlLCBmaWVsZCwg
dHlwZSkgPT4geworICAgICAgICBhc3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1wb3J0IGZ1bmN0
aW9uIG1vZHVsZSBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOworICAgICAg
ICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBJbXBvcnQgZnVuY3Rpb24gZmllbGQgc2hvdWxkIGJl
IGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOworICAgICAgICBjb25zdCB0eXBlU2VjdGlvbiA9
IGJ1aWxkZXIuX2dldFNlY3Rpb24oIlR5cGUiKTsKKyAgICAgICAgdHlwZSA9IF9tYXliZVJlZ2lz
dGVyVHlwZShidWlsZGVyLCB0eXBlKTsKKyAgICAgICAgY29uc3QgdGFnID0gMDsKKyAgICAgICAg
c2VjdGlvbi5kYXRhLnB1c2goeyBmaWVsZCwgdHlwZSwgdGFnLCBraW5kOiAiRXhjZXB0aW9uIiwg
bW9kdWxlIH0pOworICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihuZXh0QnVp
bGRlcik7CisgICAgfQorfTsKKwogY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uID0g
KGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CiAgICAgcmV0dXJuIChmaWVsZCwg
aW5kZXgsIHR5cGUpID0+IHsKICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKGZpZWxkLCBgRXhwb3J0
IGZ1bmN0aW9uIGZpZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKQEAg
LTIxNSw2ICsyMjcsMTQgQEAgY29uc3QgX2V4cG9ydFRhYmxlQ29udGludWF0aW9uID0gKGJ1aWxk
ZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CiAgICAgfQogfTsKIAorY29uc3QgX2V4cG9y
dEV4Y2VwdGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikg
PT4geworICAgIHJldHVybiAoZmllbGQsIGluZGV4KSA9PiB7CisgICAgICAgIGFzc2VydC5pc051
bWJlcihpbmRleCwgYEV4Y2VwdGlvbiBleHBvcnRzIG9ubHkgc3VwcG9ydCBudW1iZXIgaW5kaWNl
c2ApOworICAgICAgICBzZWN0aW9uLmRhdGEucHVzaCh7ZmllbGQsIGtpbmQ6ICJFeGNlcHRpb24i
LCBpbmRleH0pOworICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihuZXh0QnVp
bGRlcik7CisgICAgfQorfTsKKwogY29uc3QgX2ltcG9ydEdsb2JhbENvbnRpbnVhdGlvbiA9IChi
dWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewogICAgIHJldHVybiAoKSA9PiB7CiAg
ICAgICAgIGNvbnN0IGdsb2JhbEJ1aWxkZXIgPSB7CkBAIC0zMDcsNiArMzI3LDcgQEAgY29uc3Qg
X2NoZWNrSW1tcyA9IChvcCwgaW1tcywgZXhwZWN0ZWRJbW1zLCByZXQpID0+IHsKICAgICAgICAg
Y2FzZSAidGFyZ2V0X3RhYmxlIjogYnJlYWs7IC8vIGltcHJvdmUgY2hlY2tpbmcgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzQyMQogICAgICAgICBjYXNlICJyZXNl
cnZlZCI6IGJyZWFrOyAvLyBpbXByb3ZlIGNoZWNraW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjM0MjEKICAgICAgICAgY2FzZSAidGFibGVfaW5kZXgiOiBicmVh
azsgLy8gaW1wcm92ZSBjaGVja2luZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYzNDIxCisgICAgICAgIGNhc2UgImV4biI6IGJyZWFrOwogICAgICAgICBjYXNlICJy
ZWZ0eXBlIjoKICAgICAgICAgICAgIGFzc2VydC50cnV0aHkoV0FTTS5pc1ZhbGlkUmVmVHlwZShp
bW1zW2lkeF0pLCBgSW52YWxpZCByZWYgdHlwZSBvbiAke29wfTogIiR7aW1tc1tpZHhdfSJgKTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzM1LDExICszNTYsMTMgQEAgY29uc3QgX2NyZWF0ZUZ1
bmN0aW9uQnVpbGRlciA9IChmdW5jLCBidWlsZGVyLCBwcmV2aW91c0J1aWxkZXIpID0+IHsKICAg
ICAgICAgICAgICAgICBuZXh0QnVpbGRlciA9IGZ1bmN0aW9uQnVpbGRlcjsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgIkVuZCI6CisgICAgICAgICAgICBjYXNlICJE
ZWxlZ2F0ZSI6CiAgICAgICAgICAgICAgICAgbmV4dEJ1aWxkZXIgPSBwcmV2aW91c0J1aWxkZXI7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICJCbG9jayI6CiAgICAg
ICAgICAgICBjYXNlICJMb29wIjoKICAgICAgICAgICAgIGNhc2UgIklmIjoKKyAgICAgICAgICAg
IGNhc2UgIlRyeSI6CiAgICAgICAgICAgICAgICAgbmV4dEJ1aWxkZXIgPSBfY3JlYXRlRnVuY3Rp
b25CdWlsZGVyKGZ1bmMsIGJ1aWxkZXIsIGZ1bmN0aW9uQnVpbGRlcik7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00ODgsNiArNTExLDcgQEAgZXhwb3J0IGRlZmF1
bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuRnVu
Y3Rpb24gPSBfaW1wb3J0RnVuY3Rpb25Db250aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVpbGRl
cik7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuTWVtb3J5ID0gX2ltcG9ydE1l
bW9yeUNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAg
ICAgICAgaW1wb3J0QnVpbGRlci5UYWJsZSA9IF9pbXBvcnRUYWJsZUNvbnRpbnVhdGlvbih0aGlz
LCBzLCBpbXBvcnRCdWlsZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5F
eGNlcHRpb24gPSBfaW1wb3J0RXhjZXB0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1
aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZv
cihpbXBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNTMxLDYgKzU1NSwyMyBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsK
ICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgICAg
ICBjYXNlICJFeGNlcHRpb24iOiB7CisgICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlv
bihzZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YUJ1aWxkZXIgPSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IHRoaXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICBTaWduYXR1cmU6IChzaWduYXR1cmUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZXQgdHlwZSA9IF9tYXliZVJlZ2lzdGVyVHlwZSh0aGlzLCBzaWduYXR1cmUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YS5wdXNoKHsgdGFnOiAwLCB0eXBlIH0p
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5
Rm9yKGRhdGFCdWlsZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSBhZGQgdGFncyB3aXRoIG5vbi16ZXJvIHZhbHVlIHRoZW4g
d2UgY2FuIGFkZCBhIG5ldyBtZW1iZXIuCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKGRhdGFCdWlsZGVyKTsK
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICBjYXNlICJHbG9iYWwiOgogICAgICAgICAgICAgICAgIHRoaXNbc2Vj
dGlvbl0gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMu
X2FkZFNlY3Rpb24oc2VjdGlvbik7CkBAIC01NjksNiArNjEwLDcgQEAgZXhwb3J0IGRlZmF1bHQg
Y2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuRnVuY3Rp
b24gPSBfZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24odGhpcywgcywgZXhwb3J0QnVpbGRlcik7
CiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuTWVtb3J5ID0gX2V4cG9ydE1lbW9y
eUNvbnRpbnVhdGlvbih0aGlzLCBzLCBleHBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAg
ICAgZXhwb3J0QnVpbGRlci5UYWJsZSA9IF9leHBvcnRUYWJsZUNvbnRpbnVhdGlvbih0aGlzLCBz
LCBleHBvcnRCdWlsZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgZXhwb3J0QnVpbGRlci5FeGNl
cHRpb24gPSBfZXhwb3J0RXhjZXB0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGV4cG9ydEJ1aWxk
ZXIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihl
eHBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtNzM3LDE1ICs3NzksNiBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsKICAg
ICAgICAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLl9zZWN0aW9ucykKICAgICAgICAgICAgICAg
ICBpZiAobnVtYmVyICE9PSBfdW5rbm93blNlY3Rpb25JZCkKICAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0LmZhbHN5KHMubmFtZSA9PT0gbmFtZSAmJiBzLmlkID09PSBudW1iZXIsIGBDYW5ub3Qg
aGF2ZSB0d28gc2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lICIke25hbWV9IiBhbmQgSUQgJHtu
dW1iZXJ9YCk7Ci0gICAgICAgICAgICAvLyBDaGVjayBvcmRlcmluZy4KLSAgICAgICAgICAgIGlm
ICgobnVtYmVyICE9PSBfdW5rbm93blNlY3Rpb25JZCkgJiYgKHRoaXMuX3NlY3Rpb25zLmxlbmd0
aCAhPT0gMCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fc2VjdGlvbnMu
bGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
X3NlY3Rpb25zW2ldLmlkID09PSBfdW5rbm93blNlY3Rpb25JZCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQubGUodGhpcy5fc2Vj
dGlvbnNbaV0uaWQsIG51bWJlciwgYEJhZCBzZWN0aW9uIG9yZGVyaW5nOiAiJHt0aGlzLl9zZWN0
aW9uc1tpXS5uYW1lfSIgY2Fubm90IHByZWNlZGUgIiR7bmFtZX0iYCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBjb25zdCBzID0gT2JqZWN0LmFzc2lnbih7IG5hbWU6IG5hbWUsIGlkOiBudW1i
ZXIsIGRhdGE6IFtdIH0sIGV4dHJhT2JqZWN0IHx8IHt9KTsKICAgICAgICAgdGhpcy5fc2VjdGlv
bnMucHVzaChzKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5
QmluYXJ5LmpzIGIvSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMKaW5k
ZXggMzU4YmI0ODJkNGUwNzMyNmEyMGU1ODkzNGU1NTI5MmJiNTUxNjM3MC4uZTljNTc2MjYwZjVk
MmU1YjY3ZmFlOGEzZGI1MGU2Yzc0MTY4ODgxNyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0J1
aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMKKysrIGIvSlNUZXN0cy93YXNtL0J1aWxkZXJfV2Vi
QXNzZW1ibHlCaW5hcnkuanMKQEAgLTE0Myw2ICsxNDMsMTAgQEAgY29uc3QgZW1pdHRlcnMgPSB7
CiAgICAgICAgICAgICBjYXNlICJHbG9iYWwiOgogICAgICAgICAgICAgICAgIHB1dEdsb2JhbFR5
cGUoYmluLCBlbnRyeS5nbG9iYWxEZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlICJFeGNlcHRpb24iOgorICAgICAgICAgICAgICAgIHB1dChiaW4s
ICJ2YXJ1aW50MzIiLCBlbnRyeS50YWcpOworICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1
aW50MzIiLCBlbnRyeS50eXBlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0sCkBAIC0xODUsNiArMTg5LDcgQEAgY29uc3QgZW1pdHRlcnMg
PSB7CiAgICAgICAgICAgICBjYXNlICJGdW5jdGlvbiI6CiAgICAgICAgICAgICBjYXNlICJNZW1v
cnkiOgogICAgICAgICAgICAgY2FzZSAiVGFibGUiOgorICAgICAgICAgICAgY2FzZSAiRXhjZXB0
aW9uIjoKICAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZW50cnkuaW5kZXgp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3
IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtOiB1bmV4cGVjdGVkIGtpbmQgJHtlbnRyeS5r
aW5kfWApOwpAQCAtMjU0LDYgKzI1OSwxNCBAQCBjb25zdCBlbWl0dGVycyA9IHsKICAgICAgICAg
ICAgICAgICBwdXQoYmluLCAidWludDgiLCBieXRlKTsKICAgICAgICAgfQogICAgIH0sCisKKyAg
ICBFeGNlcHRpb246IChzZWN0aW9uLCBiaW4pID0+IHsKKyAgICAgICAgcHV0KGJpbiwgInZhcnVp
bnQzMiIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0IGV4biBvZiBz
ZWN0aW9uLmRhdGEpIHsKKyAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBleG4udGFn
KTsKKyAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBleG4udHlwZSk7CisgICAgICAg
IH0KKyAgICB9LAogfTsKIAogZXhwb3J0IGNvbnN0IEJpbmFyeSA9IChwcmVhbWJsZSwgc2VjdGlv
bnMpID0+IHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9hc3NlcnQuanMgYi9KU1Rlc3RzL3dh
c20vYXNzZXJ0LmpzCmluZGV4IDZmZGI2NWE0ZGFkZGMwZDc3YTcyNGMwMTkyZDhmYjUzYmYxMGJm
NjguLjk0ODM4ZDk3ZWY1NTBmNjFmZDIzODZjM2YyYWJkOGVmOTIzNmU0MDIgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvd2FzbS9hc3NlcnQuanMKKysrIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwpAQCAt
MTI0LDcgKzEyNCw3IEBAIGNvbnN0IF90aHJvd3MgPSAoZnVuYywgdHlwZSwgbWVzc2FnZSwgLi4u
YXJncykgPT4gewogICAgIHRyeSB7CiAgICAgICAgIGZ1bmMoLi4uYXJncyk7CiAgICAgfSBjYXRj
aCAoZSkgewotICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIHR5cGUgJiYgZS5tZXNzYWdlLmluZGV4
T2YobWVzc2FnZSkgPj0gMCkKKyAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiB0eXBlICYmICh0eXBl
b2YoZS5tZXNzYWdlKSA9PSAidW5kZWZpbmVkIiB8fCBlLm1lc3NhZ2UuaW5kZXhPZihtZXNzYWdl
KSA+PSAwKSkKICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICBfZmFpbChgRXhwZWN0ZWQg
dG8gdGhyb3cgYSAke3R5cGUubmFtZX0gd2l0aCBtZXNzYWdlICIke21lc3NhZ2V9IiwgZ290ICR7
ZS5uYW1lfSB3aXRoIG1lc3NhZ2UgIiR7ZS5tZXNzYWdlfSJgKTsKICAgICB9CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMgYi9KU1Rlc3RzL3dh
c20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMKaW5kZXggYmIxYjk3YjE5ZDVjYzFjNzhi
NWYwMDdkYzY5MGFhZGJkNzBkMjBmOC4uMjA5ZjIwYjc2YmJhOGI3MGM1MTcyMWVlNDU2ODNkMWY3
NjAzMmE2ZiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJK
U09OLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcwpA
QCAtMTQwLDExICsxNDAsNiBAQCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZuLCBtZXNzYWdl
KSA9PiB7CiAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMCk7CiB9KSgp
OwogCi0oZnVuY3Rpb24gSW1wb3J0QmVmb3JlVHlwZVNlY3Rpb25zKCkgewotICAgIGNvbnN0IGIg
PSAobmV3IEJ1aWxkZXIoKSkuSW1wb3J0KCkuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9
PiBiLlR5cGUoKSwgRXJyb3IsIGBFeHBlY3RlZDogIjIiID4gIjEiOiBCYWQgc2VjdGlvbiBvcmRl
cmluZzogIkltcG9ydCIgY2Fubm90IHByZWNlZGUgIlR5cGUiYCk7Ci19KSgpOwotCiAoZnVuY3Rp
b24gSW1wb3J0RnVuY3Rpb25XaXRob3V0VHlwZVNlY3Rpb24oKSB7CiAgICAgY29uc3QgaSA9IChu
ZXcgQnVpbGRlcigpKS5JbXBvcnQoKTsKICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGkuRnVuY3Rp
b24oImZvbyIsICJiYXIiLCAwKSwgRXJyb3IsIGBTaG91bGRuJ3QgYmUgdW5kZWZpbmVkOiBDYW4g
bm90IHVzZSB0eXBlIDAgaWYgYSB0eXBlIHNlY3Rpb24gaXMgbm90IHByZXNlbnRgKTsKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvY2F0Y2gtd2l0aC1kZWxlZ2F0ZS5qcyBiL0pTVGVz
dHMvd2FzbS9zdHJlc3MvY2F0Y2gtd2l0aC1kZWxlZ2F0ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzBiZWY1
OTNjYzQyMzYyYjIyYWUyOTk3NjQyYjMyODUxNDg4NTQyCi0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3N0cmVzcy9jYXRjaC13aXRoLWRlbGVnYXRlLmpzCkBAIC0wLDAgKzEsOTAgQEAK
K2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQg
ZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Cisg
ICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0Iiwg
ImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAu
RnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1z
OiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAg
ICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIi
IH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAg
ICAgICAgICAgLkRlbGVnYXRlKDApCisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAg
ICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0
KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAg
IGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250
ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZv
bzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0aHJvdyBuZXcgV2ViQXNz
ZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5j
ZS5leHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsg
cGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMu
Y2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KKworCit7CisgICAgY29uc3QgYiA9IG5l
dyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJl
dDogInZvaWQiIH0pCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJjb250ZXh0IiwgInRhZyIsIHsg
cGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFt
czogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAg
ICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2Rl
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMy
IiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisg
ICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAg
ICAgICAgICAgIC5EZWxlZ2F0ZSgwKQorICAgICAgICAgICAgLkNhdGNoKDEpCisgICAgICAgICAg
ICAgICAgLkkzMkNvbnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdl
dCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAg
ICBsZXQgb3RoZXJUYWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIi
XX0pCisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxl
LCB7IGNvbnRleHQ6IHsgY2FsbGJhY2ssIHRhZzogb3RoZXJUYWcgfX0pOworCisgICAgbGV0IHRh
ZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworICAgIGxldCBhcmdzID0gW107CisKKyAgICBmdW5j
dGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlv
bih0YWcsIGFyZ3MpOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNh
bGwoKSwgMyk7CisKKyAgICB0YWcgPSBvdGhlclRhZzsKKyAgICBhcmdzID0gWzEwMF07CisKKyAg
ICBsZXQgZXhuID0gYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2Vt
Ymx5LkV4Y2VwdGlvbik7CisgICAgYXNzZXJ0LmVxKGV4bi5nZXRBcmcodGFnLCAwKSwgMTAwKTsK
K30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvY3JlYXRlLXRhZy1mcm9tLmpzIGIv
SlNUZXN0cy93YXNtL3N0cmVzcy9jcmVhdGUtdGFnLWZyb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjI3OGQ2
YzIxNzZjZmI1ODE0YWZhZTc2ODRmMTlmZDU2ODEwMWZhOQotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvd2FzbS9zdHJlc3MvY3JlYXRlLXRhZy1mcm9tLmpzCkBAIC0wLDAgKzEsMjIgQEAKK2lt
cG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK2xldCBwYXJhbWV0ZXJzID0g
WyJpMzIiLCAiZjMyIiwgImV4dGVybnJlZiJdOworCithc3NlcnQudGhyb3dzKFdlYkFzc2VtYmx5
LlRhZywgVHlwZUVycm9yLCAiY2FsbGluZyBXZWJBc3NlbWJseS5UYWcgY29uc3RydWN0b3Igd2l0
aG91dCBuZXcgaXMgaW52YWxpZCIpOworbGV0IHBhc3NlZFBhcmFtZXRlcnMgPSB7IHBhcmFtZXRl
cnMgfTsKK2xldCB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHBhc3NlZFBhcmFtZXRlcnMpOwor
Cithc3NlcnQudHJ1dGh5KHRhZy50eXBlKCkgIT09IHBhc3NlZFBhcmFtZXRlcnMsICJUYWcgdHlw
ZSBzaG91bGQgcmV0dXJuIGEgZnJlc2ggb2JqZWN0Iik7Cithc3NlcnQuZXEodGFnLnR5cGUoKS5w
YXJhbWV0ZXJzLCBwYXJhbWV0ZXJzLCAiVGFncyB0eXBlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0
aGUgcGFyYW1ldGVycyBwYXNzZWQgaW4iKTsKKworYXNzZXJ0LnRocm93cyhXZWJBc3NlbWJseS5F
eGNlcHRpb24sIFR5cGVFcnJvciwgImNhbGxpbmcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGNvbnN0
cnVjdG9yIHdpdGhvdXQgbmV3IGlzIGludmFsaWQiKTsKKworbGV0IGV4Y2VwdGlvbiA9IG5ldyBX
ZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbMSwgMi41LCBwYXJhbWV0ZXJzXSk7Cithc3NlcnQu
dHJ1dGh5KGV4Y2VwdGlvbi5pcyh0YWcpKTsKK2Fzc2VydC5lcShleGNlcHRpb24uZ2V0QXJnKHRh
ZywgMCksIDEpOworYXNzZXJ0LmVxKGV4Y2VwdGlvbi5nZXRBcmcodGFnLCAxKSwgMi41KTsKK2Fz
c2VydC5lcShleGNlcHRpb24uZ2V0QXJnKHRhZywgMiksIHBhcmFtZXRlcnMpOworCithc3NlcnQu
dGhyb3dzKCgpID0+IGV4Y2VwdGlvbi5nZXRBcmcodGFnLCAzKSwgUmFuZ2VFcnJvciwgIldlYkFz
c2VtYmx5LkV4Y2VwdGlvbi5nZXRBcmcoKTogSW5kZXggb3V0IG9mIHJhbmdlIik7CisKK2Fzc2Vy
dC5lcShXZWJBc3NlbWJseS5FeGNlcHRpb24ucHJvdG90eXBlLl9fcHJvdG9fXywgT2JqZWN0LnBy
b3RvdHlwZSkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3Nz
LWluc3RhbmNlLTIuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0
YW5jZS0yLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlYzdmYmFkMDc1ODk1NWVhMmY4ZTQzNDI4MTQxN2M5NmYw
MGRiNzMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1j
cm9zcy1pbnN0YW5jZS0yLmpzCkBAIC0wLDAgKzEsOTAgQEAKKworaW1wb3J0IEJ1aWxkZXIgZnJv
bSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMn
CisKK2NvbnN0IHBhZ2VTaXplID0gNjQgKiAxMDI0OworY29uc3QgbnVtUGFnZXMgPSAxOworCit2
YXIgaW5zdEE7Cit2YXIgaW5zdEI7Cit2YXIgZ3JvdzsKK3ZhciBtZW1vcnlEZXNjcmlwdGlvbiA9
IHtpbml0aWFsOiAwfTsKK3ZhciBtZW0gPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KG1lbW9yeURl
c2NyaXB0aW9uKTsKKworZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBhc3NlcnQuZXEoaW5zdEEuZXhw
b3J0cy5tYWluKDQyKSwgNDIpOworfQorCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7
CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuTWVt
b3J5KCJjb250ZXh0IiwgIm1lbSIsIG1lbW9yeURlc2NyaXB0aW9uKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJjb250ZXh0IiwgImdyb3ciLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0
aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJ0cmFtcG9saW5lIikKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigidHJhbXBvbGluZSIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOworICAgIGluc3RCID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeworICAg
ICAgICBjb250ZXh0OiB7CisgICAgICAgICAgICBtZW0sCisgICAgICAgICAgICBncm93KCkgeyBp
bnN0QS5leHBvcnRzLmdyb3coMSk7IH0sCisgICAgICAgIH0KKyAgICB9KTsKK30KKworeworICAg
IGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5J
bXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiY29udGV4dCIsICJtZW0iLCBtZW1vcnlEZXNj
cmlwdGlvbikKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJ0cmFtcG9saW5lIiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczog
W119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigibWFp
biIpCisgICAgICAgICAgICAuRnVuY3Rpb24oImdyb3ciKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYWluIiwgeyBwYXJhbXM6IFsiaTMy
Il0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAg
ICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAg
ICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3Qo
MCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkxvYWQoMCwgMCkKKyAgICAgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJncm93Iiwg
eyBwYXJhbXM6IFsiaTMyIl0sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAgICAgLkdldExv
Y2FsKDApCisgICAgICAgICAgICAgICAgLkdyb3dNZW1vcnkoMCkKKyAgICAgICAgICAgICAgICAu
STMyQ29uc3QoNDIpCisgICAgICAgICAgICAgICAgLkkzMlN0b3JlKDAsIDApCisgICAgICAgICAg
ICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKwor
ICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgaW5zdEEgPSBuZXcgV2ViQXNzZW1i
bHkuSW5zdGFuY2UobW9kdWxlLCB7CisgICAgICAgIGNvbnRleHQ6IHsKKyAgICAgICAgICAgIG1l
bSwKKyAgICAgICAgICAgIHRyYW1wb2xpbmU6IGluc3RCLmV4cG9ydHMudHJhbXBvbGluZSwKKyAg
ICAgICAgfQorICAgIH0pOworfQorCit0ZXN0KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
c3RyZXNzL2V4Y2VwdGlvbi1jcm9zcy1pbnN0YW5jZS0zLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVz
cy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UtMy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTg5ODBiZWI5M2Y2
YzJjMzA2NGMyY2M5MTRlYWMxYTEzNGMwNDgwCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93
YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UtMy5qcwpAQCAtMCwwICsxLDc1IEBA
CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0
IGZyb20gJy4uL2Fzc2VydC5qcycKKworY29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7Citjb25z
dCBudW1QYWdlcyA9IDE7CisKK3ZhciBpbnN0QTsKK3ZhciBpbnN0QjsKK3ZhciBncm93OwordmFy
IG1lbW9yeURlc2NyaXB0aW9uID0ge2luaXRpYWw6IG51bVBhZ2VzfTsKK3ZhciBtZW0gPSBuZXcg
V2ViQXNzZW1ibHkuTWVtb3J5KG1lbW9yeURlc2NyaXB0aW9uKTsKKworZnVuY3Rpb24gdGVzdCgp
IHsKKyAgICBhc3NlcnQuZXEoaW5zdEEuZXhwb3J0cy5tYWluKCksIDQyKTsKK30KKworeworICAg
IGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5J
bXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiY29udGV4dCIsICJtZW0iLCB7IGluaXRpYWw6
IDAgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAg
IC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oInRocm93IikKKyAgICAgICAgICAgIC5FeGNl
cHRpb24oImV4IiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigidGhyb3ciLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAg
ICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgp
CisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBt
b2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgaW5zdEIgPSBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgbWVtOiBuZXcgV2ViQXNzZW1i
bHkuTWVtb3J5KHsgaW5pdGlhbDogMCB9KSB9IH0pOworfQorCit7CisgICAgY29uc3QgYiA9IG5l
dyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAg
ICAgICAgICAuTWVtb3J5KCJjb250ZXh0IiwgIm1lbSIsIG1lbW9yeURlc2NyaXB0aW9uKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0IiwgInRocm93IiwgeyBwYXJhbXM6IFtdLCByZXQ6
ICJ2b2lkIiB9KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJleCIsIHsgcGFy
YW1zOiBbXSB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAg
ICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVuZCgpCisg
ICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYWluIikKKyAgICAgICAg
LkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigibWFpbiIsIHsg
cGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQor
ICAgICAgICAgICAgICAgIC5JMzJDb25zdCg0MikKKyAgICAgICAgICAgICAgICAuSTMyU3RvcmUo
MCwgMCkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAu
Q2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAg
ICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAg
ICAgICAgICAgIC5JMzJMb2FkKDAsIDApCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbik7CisgICAgaW5zdEEgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNv
bnRleHQ6IHsgLi4uaW5zdEIuZXhwb3J0cywgbWVtIH0gfSk7Cit9CisKK3Rlc3QoKTsKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLmpzIGIv
SlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tY3Jvc3MtaW5zdGFuY2UuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uY2M2N2M5MTg2OWUyYWIyZGJlNzBkNWNlYzFlN2YyNTc4OThiNThmNgotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWNyb3NzLWluc3RhbmNlLmpzCkBA
IC0wLDAgKzEsNTggQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBv
cnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit2YXIgaW5zdEE7Cit2YXIgaW5z
dEI7CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgYXNzZXJ0LnRocm93cyhpbnN0QS5leHBvcnRz
Lm1haW4sIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbiwgIndhc20gZXhjZXB0aW9uIik7Cit9CisKK3sK
KyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAg
ICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFy
YW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJ0aHJvdyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oInRocm93IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKwor
ICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgaW5zdEIgPSBuZXcgV2ViQXNzZW1i
bHkuSW5zdGFuY2UobW9kdWxlKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigp
OworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJjb250ZXh0IiwgInRocm93IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0
aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbImkzMiIsICJpMzIiXX0pLkVuZCgpCisgICAgICAg
IC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJtYWluIikKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigibWFpbiIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAg
ICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAg
ICAgICAgICAgICAgIC5JMzJBZGQoKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOworICAgIGluc3RBID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250
ZXh0OiB7IHRocm93OiBpbnN0Qi5leHBvcnRzLnRocm93IH0gfSk7Cit9CisKK3Rlc3QoKTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLWxpdmVuZXNzLXRpZXItdXAu
anMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1saXZlbmVzcy10aWVyLXVwLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjhlNjA1MjQwZDIxNWViMTQyMTAyYzg1ZjFjOTgwMzUyNGM4NWM2ZjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1saXZlbmVzcy10aWVy
LXVwLmpzCkBAIC0wLDAgKzEsODcgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIu
anMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29u
c3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpCisgICAgICAgICAgICAuU2lnbmF0dXJl
KHsgcGFyYW1zOiBbImkzMiJdfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oInRh
ZyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSwgWyJpMzIiXSkKKyAgICAg
ICAgICAgICAgICAuSTMyQ29uc3QoMWU2KQorICAgICAgICAgICAgICAgIC5TZXRMb2NhbCgwKQor
ICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25z
dCg0MikKKyAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAgICAgICAgICAgICAgLkNh
dGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5Mb29wKCJ2b2lkIikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC5CbG9jaygidm9pZCIsIGIgPT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkVx
eigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJySWYoMCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuSTMy
U3ViKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuU2V0TG9jYWwoMCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuQnIoMSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAgICAgICAg
IC5SZXRocm93KDApCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
Y29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKyAgICBj
b25zdCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLnRhZzsKKworICAgIGFzc2VydC50aHJvd3MoaW5z
dGFuY2UuZXhwb3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24sICJ3YXNtIGV4Y2VwdGlv
biIpOworICAgIHRyeSB7CisgICAgICAgIGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpOworICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgYXNzZXJ0LnRydXRoeShlLmlzKHRhZykpOworICAgICAgICBh
c3NlcnQuZXEoZS5nZXRBcmcodGFnLCAwKSwgNDIpOworICAgIH0KK30KKworeworICAgIGNvbnN0
IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQo
KS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMy
IiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9u
KCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5j
dGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KQorICAg
ICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5Mb29wKCJ2b2lkIikK
KyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgi
dm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAg
ICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAg
ICAgICAgICAgICAgICAgICAgICAuSTMyRXF6KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5C
cklmKDEpCisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oIndyYXBwZXIiLCB7
IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkVuZCgpCisKKyAgICB2YXIgY291bnRlciA9IDFlNTsKKyAgICBjb25zdCBiaW4gPSBiLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1v
ZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrOiBmdW5jdGlvbigpIHsgaWYgKCEtLWNvdW50ZXIp
IHJldHVybiB0cnVlO30gfSB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNh
bGwoKSwgMCk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1t
dWx0aXBsZS1pbnN0YW5jZXMuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1tdWx0
aXBsZS1pbnN0YW5jZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzEwMjY3OWE5ZDExYTFiZTgxMzA4ZDYxN2I5
N2RhYzlhYTdmMzBlZQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhj
ZXB0aW9uLW11bHRpcGxlLWluc3RhbmNlcy5qcwpAQCAtMCwwICsxLDMyIEBACitpbXBvcnQgQnVp
bGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fz
c2VydC5qcycKKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5T
aWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAg
ICAgICAuRnVuY3Rpb24oInRocm93IikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oInRhZyIsIDAp
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
InRocm93IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAgICAgIC5U
cnkoInZvaWQiKQorICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAgICAgICAgICAg
ICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAuRW5kKCkKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgewor
ICAgICAgICBsZXQgaW5zdCA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworICAg
ICAgICBpbnN0LmV4cG9ydHMudGhyb3coKTsKKyAgICB9CisgICAgeworICAgICAgICBsZXQgaW5z
dCA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworICAgICAgICBpbnN0LmV4cG9y
dHMudGhyb3coKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4
Y2VwdGlvbi1zaW1wbGUtZGVsZWdhdGUuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlv
bi1zaW1wbGUtZGVsZWdhdGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmIxMmE4ZWYyOTYyY2IxMWM5NDZkMGM1
ZmQ4MGY0YTA2ZmRhNGM3OQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mv
ZXhjZXB0aW9uLXNpbXBsZS1kZWxlZ2F0ZS5qcwpAQCAtMCwwICsxLDEyNSBAQAoraW1wb3J0IEJ1
aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9h
c3NlcnQuanMnCisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVUaHJvd0RlbGVnYXRlKCkgeworICAgIGNv
bnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtd
fSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAg
IC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuVHJ5KCJ2
b2lkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAg
ICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAg
ICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1i
bHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJp
bik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxl
LCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0
Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3Np
YmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RUaHJvd0RlbGVnYXRlU2tpcCgpIHsKKyAgICBjb25z
dCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rp
b24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0p
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAu
RXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisg
ICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMy
IikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UcnkoInZvaWQiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkRlbGVnYXRl
KDEpCisgICAgICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAg
ICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
ICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisg
ICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBX
ZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFu
Y2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJv
d24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdERlbGVn
YXRlQ2FsbGVyKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5T
aWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9u
KCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQo
KQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFt
czogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAg
ICAgICAgICAgICAgICAuQ2FsbCgxKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgICAgIC5FbmQoKQorCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwyIiwgeyBwYXJhbXM6
IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAg
ICAgICAgICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAuVGhyb3co
MCkKKyAgICAgICAgICAgICAgICAgICAgLkRlbGVnYXRlKDEpCisgICAgICAgICAgICAgICAgLkNh
dGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25z
dCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBv
cnRzLmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9t
IEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlRGVsZWdh
dGVNZXJnZSgpeworIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQor
ICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25z
dCgzKQorICAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgp
OworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBj
b25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7Cisg
ICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAzKTsKK30KKwordGVzdFNpbXBs
ZVRocm93RGVsZWdhdGUoKTsKK3Rlc3RUaHJvd0RlbGVnYXRlU2tpcCgpOwordGVzdERlbGVnYXRl
Q2FsbGVyKCk7Cit0ZXN0U2ltcGxlRGVsZWdhdGVNZXJnZSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy93YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLXRocm93LWNhdGNoLmpzIGIvSlNUZXN0cy93
YXNtL3N0cmVzcy9leGNlcHRpb24tc2ltcGxlLXRocm93LWNhdGNoLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEw
OTc0MDE1ZjczMDFkZWJlNmI0ZDY2MmUzNWIwOTJmZTQ4ZTBjNzYKLS0tIC9kZXYvbnVsbAorKysg
Yi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi1zaW1wbGUtdGhyb3ctY2F0Y2guanMKQEAg
LTAsMCArMSw0MTQgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBv
cnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCitmdW5jdGlvbiB0ZXN0U2ltcGxl
VHJ5Q2F0Y2goKXsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5F
bmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2ln
bmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigi
Y2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6
IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAg
ICAgIC5UaHJvdygwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAg
LkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmlu
ID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5J
bnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5j
YWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBz
aG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZVRyeUNhdGNoQWxs
KCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7
IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQor
ICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAg
IC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0
OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuVGhy
b3coMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaEFs
bCgpCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5j
ZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCks
IDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQg
YmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdENhbGxUcnlDYXRjaCgpeworICAgIGNv
bnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtd
fSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAg
IC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMSkKKyAgICAg
ICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKworICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
YWxsMiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UaHJv
dygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBi
aW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5
Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRz
LmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpT
IHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0Q2FsbFRyeUNhdGNoQWxs
KCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7
IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQor
ICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAg
IC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0
OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuQ2Fs
bCgxKQorICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorCisgICAgICAgICAgICAu
RnVuY3Rpb24oImNhbGwyIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAgICAgLlRocm93KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKwor
ICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisgICAgYXNzZXJ0LmVxKGluc3Rh
bmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhy
b3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1w
bGVUcnlDYXRjaFZhbHVlKCl7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5U
eXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlv
bigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQo
KS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxs
IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQor
ICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQor
ICAgICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgp
LmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
KyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsg
fSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGlu
ZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUi
KTsKK30KKworZnVuY3Rpb24gdGVzdENhbGxUcnlDYXRjaFZhbHVlKCl7CisgICAgY29uc3QgYiA9
IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCku
RW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogWyJpMzIiXX0p
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAu
RXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisg
ICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDEpCisgICAgICAg
ICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbDIiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAuVGhyb3co
MCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmlu
ID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5J
bnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5j
YWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBz
aG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFN0YWNrVHJ5Q2F0Y2goKXsK
KyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAg
ICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFy
YW1zOiBbImkzMiJdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikK
KyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAg
ICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJl
dDogImkzMiIgfSkKKyAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLy8gVE9E
TzogYnVpbGRlciBlcnJvcgorICAgICAgICAgICAgLlRyeSh7IHBhcmFtczogWyJpMzIiXSwgcmV0
OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkNhdGNo
KDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5k
KCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5j
ZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQu
ZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNt
IHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24g
dGVzdExpdmVBZnRlclRyeUNhdGNoKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOwor
ICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5F
eGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJj
YWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLkkzMkNv
bnN0KDIpCisgICAgICAgICAgICAgICAgLlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAg
IC5UaHJvdygwKQorICAgICAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBi
aW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5
Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRz
LmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpT
IHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0TGl2ZUFmdGVyVHJ5Q2F0
Y2hBbGwoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5k
KCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25h
dHVyZSh7IHBhcmFtczogW10gfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJj
YWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczog
W10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAg
ICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAgLlRocm93KDApCisgICAg
ICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3Nl
bWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1
bGUsIHsgfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJj
YXRjaGluZyBhbiBleHBvcnRlZCB3YXNtIHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9z
c2libGUiKTsKK30KKworZnVuY3Rpb24gdGVzdFVuaWZ5VHJ5Q2F0Y2hDYXRjaCgpIHsKKyAgICBj
b25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVu
Y3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIC5TaWduYXR1
cmUoeyBwYXJhbXM6IFtdIH0pCisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlRocm93KDEpCisgICAgICAg
ICAgICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAg
ICAgICAgICAgICAgIC5DYXRjaCgxKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikK
KyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5k
KCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5j
ZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgfSk7CisKKyAgICBhc3NlcnQu
ZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCksIDIsICJjYXRjaGluZyBhbiBleHBvcnRlZCB3YXNt
IHRhZyB0aHJvd24gZnJvbSBKUyBzaG91bGQgYmUgcG9zc2libGUiKTsKK30KKworZnVuY3Rpb24g
dGVzdFVuaWZ5VHJ5Q2F0Y2hDYXRjaEFsbCgpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIo
KTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAuRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIC5TaWduYXR1cmUoeyBwYXJhbXM6IFtdIH0pCisg
ICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBw
YXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAg
ICAgICAgICAgICAgICAgICAgLlRocm93KDEpCisgICAgICAgICAgICAgICAgLkNhdGNoKDApCisg
ICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgIC5DYXRjaEFs
bCgpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBi
aW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5
Lkluc3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRz
LmNhbGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpT
IHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0VW5pZnlUcnlOb1Rocm93
KCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisg
ICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKQorICAgICAgICAg
ICAgLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAgICAgIC5TaWduYXR1cmUoeyBw
YXJhbXM6IFtdIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMikKKyAgICAgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IH0pOworCisg
ICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4gZXhw
b3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7Cit9CisK
K2Z1bmN0aW9uIHRlc3RVbmlmeVRyeU5vQ2F0Y2goKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWls
ZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAg
ICAgICAgLkV4Y2VwdGlvbigpCisgICAgICAgICAgICAuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXSB9
KQorICAgICAgICAgICAgLlNpZ25hdHVyZSh7IHBhcmFtczogW10gfSkKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIp
CisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4g
PSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwgeyB9KTsKKworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNh
bGwoKSwgMiwgImNhdGNoaW5nIGFuIGV4cG9ydGVkIHdhc20gdGFnIHRocm93biBmcm9tIEpTIHNo
b3VsZCBiZSBwb3NzaWJsZSIpOworfQorCitmdW5jdGlvbiB0ZXN0TmVzdGVkQ2F0Y2ggKCl7Cisg
ICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAg
LkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFt
czogW119KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwg
eyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuR2V0TG9j
YWwoMCkKKyAgICAgICAgICAgICAgICAuVHJ5KCJ2b2lkIikKKyAgICAgICAgICAgICAgICAgICAg
LlRocm93KDApCisgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAg
ICAgLlRyeSgidm9pZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAuVGhyb3coMCkKKyAgICAg
ICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UaHJv
dygwKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworICAgIGNvbnN0IGJpbiA9IGIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlKTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBX
ZWJBc3NlbWJseS5FeGNlcHRpb24sICJ3YXNtIGV4Y2VwdGlvbiIpOworfQorCit0ZXN0U2ltcGxl
VHJ5Q2F0Y2goKTsKK3Rlc3RTaW1wbGVUcnlDYXRjaEFsbCgpOwordGVzdFNpbXBsZVRyeUNhdGNo
VmFsdWUoKTsKK3Rlc3RDYWxsVHJ5Q2F0Y2goKTsKK3Rlc3RDYWxsVHJ5Q2F0Y2hBbGwoKTsKK3Rl
c3RDYWxsVHJ5Q2F0Y2hWYWx1ZSgpOwordGVzdExpdmVBZnRlclRyeUNhdGNoKCk7Cit0ZXN0TGl2
ZUFmdGVyVHJ5Q2F0Y2hBbGwoKTsKK3Rlc3RVbmlmeVRyeUNhdGNoQ2F0Y2goKTsKK3Rlc3RVbmlm
eVRyeUNhdGNoQ2F0Y2hBbGwoKTsKK3Rlc3RVbmlmeVRyeU5vVGhyb3coKTsKK3Rlc3RVbmlmeVRy
eU5vQ2F0Y2goKTsKKworLy8gVE9ETzogZW5hYmxlIHRoaXMgdGVzdAorLy8gdGVzdFN0YWNrVHJ5
Q2F0Y2goKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93
bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwtcmV0aHJvdy5qcyBiL0pTVGVzdHMvd2FzbS9zdHJl
c3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwtcmV0aHJvdy5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mYjRjMzBkOTFhYzZiYTM3NTQxMDQ3YmM2NTIzZmFiYWYxMWJiNDJkCi0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20t
anMtdG8td2FzbS1jYXRjaGFsbC1yZXRocm93LmpzCkBAIC0wLDAgKzEsNDEgQEAKK2ltcG9ydCBC
dWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4v
YXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBl
KCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNr
IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24o
KS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVu
ZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhj
ZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAg
ICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAg
ICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAg
ICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29u
c3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3Nl
bWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBjYWxsYmFjayB9fSk7CisKKyAgICBs
ZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAgICBmdW5jdGlvbiBjYWxsYmFjaygp
IHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih0YWcsIFtdKTsKKyAg
ICB9CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1i
bHkuRXhjZXB0aW9uKTsKKworICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0
ZXJzOiBbXSB9KTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBX
ZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVz
cy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS1jYXRjaGFsbC5qcyBiL0pTVGVzdHMv
d2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20tY2F0Y2hhbGwuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzdlNGE0NGIxZmVjNDE2ZDM4NGM3OTQ5OWY5OGJmOTQ2NjljYjY0YwotLS0g
L2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9t
LWpzLXRvLXdhc20tY2F0Y2hhbGwuanMKQEAgLTAsMCArMSw0MCBAQAoraW1wb3J0IEJ1aWxkZXIg
ZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQu
anMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQo
KQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBh
cmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgp
CisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAg
ICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24o
ImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAg
IC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAu
STMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAg
IGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBp
bnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgY29udGV4dDogeyBj
YWxsYmFjayB9fSk7CisKKyAgICBsZXQgdGFnID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisKKyAg
ICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFdlYkFzc2VtYmx5LkV4
Y2VwdGlvbih0YWcsIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsKCksIDIsICJjYXRjaF9hbGxpbmcgYW4gZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZy
b20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7CisKKyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHku
VGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0
cy5jYWxsKCksIDIsICJjYXRjaF9hbGxpbmcgYW4gb3BhcXVlIHdhc20gdGFnIHRocm93biBmcm9t
IEpTIHNob3VsZCBiZSBwb3NzaWJsZSIpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0
cmVzcy9leGNlcHRpb24tdGhyb3duLWZyb20tanMtdG8td2FzbS5qcyBiL0pTVGVzdHMvd2FzbS9z
dHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20uanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjUw
MTkyMDBjOWZkOWYyZjYxZmFiNDM4NzQwNmU4NjZiYzMyZjc2OQotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1mcm9tLWpzLXRvLXdhc20uanMK
QEAgLTAsMCArMSw0MCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2lt
cG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0g
bmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVu
Y3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0p
LkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5T
aWduYXR1cmUoeyBwYXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9u
KCJjYWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQo
KQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFt
czogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAg
ICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAg
IC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJp
biA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRh
ZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7Cisg
ICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7CisgICAgfQor
CisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAyLCAiY2F0Y2hpbmcgYW4g
ZXhwb3J0ZWQgd2FzbSB0YWcgdGhyb3duIGZyb20gSlMgc2hvdWxkIGJlIHBvc3NpYmxlIik7CisK
KyAgICB0YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAg
ICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0
aW9uKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93
bi1vdXQtb2Ytd2FzbS5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1v
dXQtb2Ytd2FzbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOGUzMzAxZTNiODAwM2E1MmEyZGU2MzM1ODY3Njlm
Zjg5MDgyZjhlCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9leGNlcHRp
b24tdGhyb3duLW91dC1vZi13YXNtLmpzCkBAIC0wLDAgKzEsMjQgQEAKK2ltcG9ydCBCdWlsZGVy
IGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0
LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5k
KCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25h
dHVyZSh7IHBhcmFtczogW10gfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJj
YWxsIikKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczog
W10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5UaHJvdygwKQorICAgICAgICAgICAgLkkz
MkNvbnN0KDEpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKyAgICBjb25z
dCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSk7CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9y
dHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRocm93bi1vdmVyLXdhc20uanMgYi9KU1Rlc3RzL3dhc20v
c3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3Zlci13YXNtLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5ZjRjMmU5
MDMxZTllZDQ5ZGU2OTcxYzk3MWI2NDBiZWUyNGFmYzMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10aHJvd24tb3Zlci13YXNtLmpzCkBAIC0wLDAgKzEs
MzAgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBh
c3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVy
KCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250
ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisg
ICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6
ICJpMzIiIH0pCisgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgLkkzMkNvbnN0KDEp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9
IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5z
dGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgZnVuY3Rpb24g
Y2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oaW5z
dGFuY2UuZXhwb3J0cy5mb28sIFtdKTsKKyAgICB9CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3Rh
bmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uLCAid2FzbSBleGNlcHRpb24i
KTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvZXhjZXB0aW9uLXRyYXAuanMg
Yi9KU1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10cmFwLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmZGY1
M2ViNTA1YzM5MGI0MGJmMTUzNTViNmQ1MzcyZTU2MGU5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9K
U1Rlc3RzL3dhc20vc3RyZXNzL2V4Y2VwdGlvbi10cmFwLmpzCkBAIC0wLDAgKzEsMTM0IEBACitp
bXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZy
b20gJy4uL2Fzc2VydC5qcycKKworZnVuY3Rpb24gdGVzdENhbm5vdENhdGNoVW5yZWFjaGFibGUo
KSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAuRnVu
Y3Rpb24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAg
ICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLlVucmVhY2hhYmxlKCkK
KyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAg
IGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBp
bnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworCisgICAgYXNzZXJ0
LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwg
IlVucmVhY2hhYmxlIGNvZGUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCIpOworfQorCitmdW5jdGlv
biB0ZXN0Q2Fubm90Q2F0Y2hPT0IoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Cisg
ICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLk1l
bW9yeSgpCisgICAgICAgICAgICAuSW5pdGlhbE1heFBhZ2VzKDAsIDEpCisgICAgICAgIC5FbmQo
KQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgIC5GdW5jdGlvbigiY2FsbCIpCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7
IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQor
ICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMTAyNCkKKyAgICAgICAgICAgICAgICAgICAg
LkkzMkxvYWQoMCwgMCkKKyAgICAgICAgICAgICAgICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAg
ICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJs
eSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmlu
KTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUp
OworCisgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZS5leHBvcnRzLmNhbGwsIFdlYkFzc2VtYmx5
LlJ1bnRpbWVFcnJvciwgIk91dCBvZiBib3VuZHMgbWVtb3J5IGFjY2VzcyIpOworfQorCitmdW5j
dGlvbiB0ZXN0V2FzbUFQSVRocm93KCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOwor
ICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIs
ICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAg
LkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImNhbGwiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDApCisgICAgICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAg
ICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEpCisgICAgICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7IGNvbnRleHQ6IHsgY2FsbGJhY2sgfX0pOworCisgICAgZnVuY3Rpb24gY2Fs
bGJhY2soKSB7CisgICAgICAgIG5ldyBXZWJBc3NlbWJseS5HbG9iYWwoeworICAgICAgICAgICAg
dmFsdWU6ICdhbnlmdW5jJworICAgICAgICB9LCB7fSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVx
KGluc3RhbmNlLmV4cG9ydHMuY2FsbCgpLCAxKTsKK30KK2Z1bmN0aW9uIHRlc3RKU0NhdGNoQW5k
UmV0aHJvdygpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5F
bmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7
IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVu
ZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIikKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY2Fs
bCIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLlRy
eSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAg
ICAgICAgIC5JMzJFcXooKQorICAgICAgICAgICAgICAgICAgICAuSWYoInZvaWQiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgLlVucmVhY2hhYmxlKCkKKyAgICAgICAgICAgICAgICAgICAgLkVs
c2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAg
ICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisK
KyAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxl
ID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3
IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsK
KworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAg
aW5zdGFuY2UuZXhwb3J0cy5jYWxsKDApOworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAg
ICAgIHRocm93IGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+
IGluc3RhbmNlLmV4cG9ydHMuY2FsbCgxKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAiVW5y
ZWFjaGFibGUgY29kZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIik7Cit9CisKK3Rlc3RDYW5ub3RD
YXRjaFVucmVhY2hhYmxlKCk7Cit0ZXN0Q2Fubm90Q2F0Y2hPT0IoKTsKK3Rlc3RXYXNtQVBJVGhy
b3coKTsKK3Rlc3RKU0NhdGNoQW5kUmV0aHJvdygpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L3N0cmVzcy9yZXRocm93LWZyb20tY2F0Y2gtdG8tY2F0Y2guanMgYi9KU1Rlc3RzL3dhc20vc3Ry
ZXNzL3JldGhyb3ctZnJvbS1jYXRjaC10by1jYXRjaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZGZkYTZkOGE2
OTExODRkOTk5NTU1ZDE4ZThkOWVlNTFiZTRhZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0
cy93YXNtL3N0cmVzcy9yZXRocm93LWZyb20tY2F0Y2gtdG8tY2F0Y2guanMKQEAgLTAsMCArMSw0
NSBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFz
c2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIo
KTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImNvbnRl
eHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0pLkVuZCgpCisgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBw
YXJhbXM6IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAg
ICAgICAgICAgIC5FeGNlcHRpb24oImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAu
Q29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDog
ImkzMiIgfSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAuVHJ5KCJpMzIi
KQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDEp
CisgICAgICAgICAgICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAg
ICAgICAgICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAg
ICAuQ2F0Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBi
aW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5
Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxldCB0
YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgewor
ICAgICAgICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAgIH0K
KworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0YWcg
PSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQu
dGhyb3dzKGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30K
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy10by1jYXRjaC5qcyBiL0pT
VGVzdHMvd2FzbS9zdHJlc3MvcmV0aHJvdy10by1jYXRjaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjFjYmE0
M2RjYjViNDRkOWFlNjRmZGM1NzlhMGM4YTY1NTAzZjdkCi0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3N0cmVzcy9yZXRocm93LXRvLWNhdGNoLmpzCkBAIC0wLDAgKzEsODggQEAKK2lt
cG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJv
bSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CisgICAg
Yi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNh
bGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIiB9KS5FbmQoKQorICAgICAgICAuRnVu
Y3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBb
XX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAg
ICAuRXhjZXB0aW9uKCJmb28iLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0p
CisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAg
ICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAg
ICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAg
ICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuQ2F0
Y2goMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMykKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKQorCisKKyAgICBjb25zdCBiaW4gPSBi
LldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3Rh
bmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrIH19KTsKKworICAgIGxldCB0YWcgPSBp
bnN0YW5jZS5leHBvcnRzLmZvbzsKKworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkgeworICAgICAg
ICB0aHJvdyBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgW10pOworICAgIH0KKworICAg
IGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmNhbGwoKSwgMyk7CisKKyAgICB0YWcgPSBuZXcg
V2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogW10gfSk7CisKKyAgICBhc3NlcnQudGhyb3dz
KGluc3RhbmNlLmV4cG9ydHMuY2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KKworewor
ICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAg
IC5JbXBvcnQoKS5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwg
cmV0OiAidm9pZCIgfSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQoKQorICAgICAgICAuRXhw
b3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiZm9vIiwgMCkK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Y2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLlRyeSgiaTMy
IikKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAg
ICAgICAgICAgIC5JMzJDb25zdCgyKQorICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5DYXRjaCgwKQorICAgICAgICAgICAgICAgIC5J
MzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAg
ICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3Qg
aW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6IHsg
Y2FsbGJhY2sgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworCisg
ICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJseS5F
eGNlcHRpb24odGFnLCBbXSk7CisgICAgfQorCisgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9y
dHMuY2FsbCgpLCAzKTsKKworICAgIHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoeyBwYXJhbWV0
ZXJzOiBbXSB9KTsKKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsLCBX
ZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVz
cy9yZXRocm93LXRvLWRlbGVnYXRlLXRvLWNhdGNoLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9y
ZXRocm93LXRvLWRlbGVnYXRlLXRvLWNhdGNoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwNDc5YzBjZWEyM2I2
MGUzOTU1YTFiNTE3NDkxZmI0Zjc2ZWU3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dh
c20vc3RyZXNzL3JldGhyb3ctdG8tZGVsZWdhdGUtdG8tY2F0Y2guanMKQEAgLTAsMCArMSwyNTkg
QEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3Nl
cnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7
CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImNvbnRleHQiLCAiY2FsbGJhY2siLCB7IHBhcmFtczogW10sIHJldDogInZvaWQiIH0p
CisgICAgICAgICAgICAuRXhjZXB0aW9uKCJjb250ZXh0IiwgInRhZyIsIHsgcGFyYW1zOiBbImkz
MiJdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCku
RW5kKCkKKyAgICAgICAgLkV4Y2VwdGlvbigpLlNpZ25hdHVyZSh7IHBhcmFtczogW119KS5FbmQo
KQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImNhbGwiKQorICAgICAgICAgICAgLkV4Y2Vw
dGlvbigiZm9vIiwgMSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigiY2FsbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAg
ICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAg
ICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgxKQorICAgICAgICAgICAgICAgICAg
ICAuQ2F0Y2hBbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAuUmV0aHJvdygwKQorICAgICAgICAgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgICAgICAuRGVsZWdhdGUoMCkKKyAgICAgICAgICAgIC5DYXRjaCgxKQor
ICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRl
cnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3Rh
bmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxiYWNrLCB0YWc6IG90aGVyVGFnIH19KTsKKwor
ICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKyAgICBsZXQgYXJncyA9IFtdOwor
CisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7CisgICAgICAgIHRocm93IG5ldyBXZWJBc3NlbWJs
eS5FeGNlcHRpb24odGFnLCBhcmdzKTsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2Uu
ZXhwb3J0cy5jYWxsKCksIDMpOworCisgICAgdGFnID0gb3RoZXJUYWc7CisgICAgYXJncyA9IFsx
MDBdOworCisgICAgbGV0IGV4biA9IGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxs
LCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICAgIGFzc2VydC5lcShleG4uZ2V0QXJnKHRhZywg
MCksIDEwMCk7Cit9CisKK3sKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5
cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY29u
dGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBbXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAg
ICAgIC5FeGNlcHRpb24oImNvbnRleHQiLCAidGFnIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDog
InZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAg
IC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisgICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28i
LCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5
KCJpMzIiKQorICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgICAg
IC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJDb25zdCgwKQorICAgICAgICAgICAg
ICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNv
bnN0KDEpCisgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAg
ICAgICAgICAuSTMyQ29uc3QoMikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5SZXRocm93KDEp
CisgICAgICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAgICAgLkRlbGVnYXRlKDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgp
CisKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBt
b2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0g
bmV3IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGlu
c3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNh
bGxiYWNrLCB0YWc6IG90aGVyVGFnIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBv
cnRzLmZvbzsKKyAgICBsZXQgYXJncyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7
CisgICAgICAgIGxldCBleG4gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7
CisgICAgICAgIHRhZyA9IG90aGVyVGFnOworICAgICAgICBhcmdzID0gWzEwMF07CisgICAgICAg
IHRocm93IGV4bjsKKyAgICB9CisKKyAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLmV4cG9ydHMu
Y2FsbCwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcg
QnVpbGRlcigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6
ICJ2b2lkIiB9KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJ0YWciLCB7IHBh
cmFtczogWyJpMzIiXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6
IFtdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAg
ICAgIC5FeGNlcHRpb24oImZvbyIsIDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikK
KyAgICAgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgICAg
IC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAg
ICAgICAgICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UcnkoImkz
MiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYXRj
aEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLlJldGhyb3coMSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRGVs
ZWdhdGUoMSkKKyAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgLkkzMkNv
bnN0KDMpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNv
bnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgb3RoZXJU
YWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIiXX0pCisgICAgY29u
c3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGNvbnRleHQ6
IHsgY2FsbGJhY2ssIHRhZzogb3RoZXJUYWcgfX0pOworCisgICAgbGV0IHRhZyA9IGluc3RhbmNl
LmV4cG9ydHMuZm9vOworICAgIGxldCBhcmdzID0gW107CisKKyAgICBmdW5jdGlvbiBjYWxsYmFj
aygpIHsKKyAgICAgICAgbGV0IGV4biA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBh
cmdzKTsKKyAgICAgICAgdGFnID0gb3RoZXJUYWc7CisgICAgICAgIGFyZ3MgPSBbMTAwXTsKKyAg
ICAgICAgdGhyb3cgZXhuOworICAgIH0KKworICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UuZXhw
b3J0cy5jYWxsLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworfQorCisKK3sKKyAgICBjb25zdCBi
ID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiY29udGV4dCIsICJjYWxsYmFjayIsIHsgcGFyYW1zOiBb
XSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgIC5FeGNlcHRpb24oImNvbnRleHQiLCAidGFn
IiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogInZvaWQiIH0pCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsg
cGFyYW1zOiBbXX0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiY2FsbCIpCisg
ICAgICAgICAgICAuRXhjZXB0aW9uKCJmb28iLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjYWxsIiwgeyBwYXJhbXM6IFtdLCByZXQ6
ICJpMzIiIH0pCisgICAgICAgICAgICAuVHJ5KCJpMzIiKQorICAgICAgICAgICAgICAgIC5Ucnko
ImkzMiIpCisgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDApCisg
ICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgpCisgICAgICAgICAgICAgICAgICAgICAgICAu
STMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5SZXRocm93KDApCisgICAgICAg
ICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5EZWxlZ2F0ZSgwKQorICAgICAg
ICAgICAgLkNhdGNoKDApCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAuRW5kKCkKKworCisgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgp
OworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBs
ZXQgb3RoZXJUYWcgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHsgcGFyYW1ldGVyczogWyJpMzIiXX0p
CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7
IGNvbnRleHQ6IHsgY2FsbGJhY2ssIHRhZzogb3RoZXJUYWcgfX0pOworCisgICAgbGV0IHRhZyA9
IG90aGVyVGFnOworICAgIGxldCBhcmdzID0gWzEwMF07CisKKyAgICBmdW5jdGlvbiBjYWxsYmFj
aygpIHsKKyAgICAgICAgbGV0IGV4biA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBh
cmdzKTsKKyAgICAgICAgdGhyb3cgZXhuOworICAgIH0KKworICAgIGFzc2VydC5lcShpbnN0YW5j
ZS5leHBvcnRzLmNhbGwoKSwgMTAwKTsKK30KKworeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRl
cigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJjb250ZXh0IiwgImNhbGxiYWNrIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJ2b2lk
IiB9KQorICAgICAgICAgICAgLkV4Y2VwdGlvbigiY29udGV4dCIsICJ0YWciLCB7IHBhcmFtczog
WyJpMzIiXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlv
bigpLkVuZCgpCisgICAgICAgIC5FeGNlcHRpb24oKS5TaWduYXR1cmUoeyBwYXJhbXM6IFtdfSku
RW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJjYWxsIikKKyAgICAgICAgICAgIC5F
eGNlcHRpb24oImZvbyIsIDEpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oImNhbGwiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAg
ICAgICAgICAgIC5UcnkoImkzMiIpCisgICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAg
ICAgICAgICAgICAgICAgLlRyeSgiaTMyIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYWxs
KDApCisgICAgICAgICAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAg
ICAgICAgLkNhdGNoQWxsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5UcnkoImkzMiIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuSTMyQ29uc3QoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5DYXRjaEFsbCgp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLlJldGhyb3coMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgICAgICAuRGVsZWdhdGUo
MCkKKyAgICAgICAgICAgIC5DYXRjaCgxKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgzKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpCisK
KworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1
bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgbGV0IG90aGVyVGFnID0gbmV3
IFdlYkFzc2VtYmx5LlRhZyh7IHBhcmFtZXRlcnM6IFsiaTMyIl19KQorICAgIGNvbnN0IGluc3Rh
bmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBjb250ZXh0OiB7IGNhbGxi
YWNrLCB0YWc6IG90aGVyVGFnIH19KTsKKworICAgIGxldCB0YWcgPSBpbnN0YW5jZS5leHBvcnRz
LmZvbzsKKyAgICBsZXQgYXJncyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FsbGJhY2soKSB7Cisg
ICAgICAgIGxldCBleG4gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHRhZywgYXJncyk7Cisg
ICAgICAgIHRhZyA9IG90aGVyVGFnOworICAgICAgICBhcmdzID0gWzEwMF07CisgICAgICAgIHRo
cm93IGV4bjsKKyAgICB9CisKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5jYWxsKCks
IDMpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9zaW1wbGUtZXhwb3J0LWV4
Y2VwdGlvbi5qcyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mvc2ltcGxlLWV4cG9ydC1leGNlcHRpb24u
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmI5Njk5OTc1M2QzYTRhZDA4NmEwZWNlNTg5ODI4NGY4ZmNiOGI3MAot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mvc2ltcGxlLWV4cG9ydC1leGNl
cHRpb24uanMKQEAgLTAsMCArMSwxNiBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRl
ci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBj
b25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVu
Y3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhjZXB0aW9uKCkuU2lnbmF0dXJlKHsgcGFyYW1zOiBb
ImkzMiJdfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkV4Y2VwdGlvbigiZm9vIiwgMCkuRW5k
KCkKKworICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBt
b2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2Ug
PSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKworICAgIGFzc2VydC5pbnN0YW5j
ZW9mKGluc3RhbmNlLmV4cG9ydHMuZm9vLCBXZWJBc3NlbWJseS5UYWcpOworfQpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy93YXNtL3Y4L0xJQ0VOU0UgYi9KU1Rlc3RzL3dhc20vdjgvTElDRU5TRQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41M2Q5YzQ3ZTMzYzE4MjkyNzQxZjFlNDA4OTBjOGZlMmQ2Mjk5NjQ2Ci0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L0xJQ0VOU0UKQEAgLTAsMCArMSw2MiBAQAorVGhp
cyBsaWNlbnNlIGFwcGxpZXMgdG8gYWxsIHBhcnRzIG9mIFY4IHRoYXQgYXJlIG5vdCBleHRlcm5h
bGx5CittYWludGFpbmVkIGxpYnJhcmllcy4gIFRoZSBleHRlcm5hbGx5IG1haW50YWluZWQgbGli
cmFyaWVzIHVzZWQgYnkgVjgKK2FyZToKKworICAtIFBDUkUgdGVzdCBzdWl0ZSwgbG9jYXRlZCBp
bgorICAgIHRlc3QvbWpzdW5pdC90aGlyZF9wYXJ0eS9yZWdleHAtcGNyZS9yZWdleHAtcGNyZS5q
cy4gIFRoaXMgaXMgYmFzZWQgb24gdGhlCisgICAgdGVzdCBzdWl0ZSBmcm9tIFBDUkUtNy4zLCB3
aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgVW5pdmVyc2l0eQorICAgIG9mIENhbWJyaWRnZSBh
bmQgR29vZ2xlLCBJbmMuICBUaGUgY29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQorICAgIGFy
ZSBlbWJlZGRlZCBpbiByZWdleHAtcGNyZS5qcy4KKworICAtIExheW91dCB0ZXN0cywgbG9jYXRl
ZCBpbiB0ZXN0L21qc3VuaXQvdGhpcmRfcGFydHkvb2JqZWN0LWtleXMuICBUaGVzZSBhcmUKKyAg
ICBiYXNlZCBvbiBsYXlvdXQgdGVzdHMgZnJvbSB3ZWJraXQub3JnIHdoaWNoIGFyZSBjb3B5cmln
aHRlZCBieQorICAgIEFwcGxlIENvbXB1dGVyLCBJbmMuIGFuZCByZWxlYXNlZCB1bmRlciBhIDMt
Y2xhdXNlIEJTRCBsaWNlbnNlLgorCisgIC0gU3Ryb25ndGFsayBhc3NlbWJsZXIsIHRoZSBiYXNp
cyBvZiB0aGUgZmlsZXMgYXNzZW1ibGVyLWFybS1pbmwuaCwKKyAgICBhc3NlbWJsZXItYXJtLmNj
LCBhc3NlbWJsZXItYXJtLmgsIGFzc2VtYmxlci1pYTMyLWlubC5oLAorICAgIGFzc2VtYmxlci1p
YTMyLmNjLCBhc3NlbWJsZXItaWEzMi5oLCBhc3NlbWJsZXIteDY0LWlubC5oLAorICAgIGFzc2Vt
Ymxlci14NjQuY2MsIGFzc2VtYmxlci14NjQuaCwgYXNzZW1ibGVyLW1pcHMtaW5sLmgsCisgICAg
YXNzZW1ibGVyLW1pcHMuY2MsIGFzc2VtYmxlci1taXBzLmgsIGFzc2VtYmxlci5jYyBhbmQgYXNz
ZW1ibGVyLmguCisgICAgVGhpcyBjb2RlIGlzIGNvcHlyaWdodGVkIGJ5IFN1biBNaWNyb3N5c3Rl
bXMgSW5jLiBhbmQgcmVsZWFzZWQKKyAgICB1bmRlciBhIDMtY2xhdXNlIEJTRCBsaWNlbnNlLgor
CisgIC0gVmFsZ3JpbmQgY2xpZW50IEFQSSBoZWFkZXIsIGxvY2F0ZWQgYXQgc3JjL3RoaXJkX3Bh
cnR5L3ZhbGdyaW5kL3ZhbGdyaW5kLmgKKyAgICBUaGlzIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBC
U0QgbGljZW5zZS4KKworICAtIFRoZSBXYXNtIEMvQysrIEFQSSBoZWFkZXJzLCBsb2NhdGVkIGF0
IHRoaXJkX3BhcnR5L3dhc20tYXBpL3dhc20ue2gsaGh9CisgICAgVGhpcyBpcyByZWxlYXNlZCB1
bmRlciB0aGUgQXBhY2hlIGxpY2Vuc2UuIFRoZSBBUEkncyB1cHN0cmVhbSBwcm90b3R5cGUKKyAg
ICBpbXBsZW1lbnRhdGlvbiBhbHNvIGZvcm1lZCB0aGUgYmFzaXMgb2YgVjgncyBpbXBsZW1lbnRh
dGlvbiBpbgorICAgIHNyYy93YXNtL2MtYXBpLmNjLgorCitUaGVzZSBsaWJyYXJpZXMgaGF2ZSB0
aGVpciBvd24gbGljZW5zZXM7IHdlIHJlY29tbWVuZCB5b3UgcmVhZCB0aGVtLAorYXMgdGhlaXIg
dGVybXMgbWF5IGRpZmZlciBmcm9tIHRoZSB0ZXJtcyBiZWxvdy4KKworRnVydGhlciBsaWNlbnNl
IGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGZpbGVzIGxvY2F0ZWQgaW4gCitz
dWItZGlyZWN0b3JpZXMuCisKK0NvcHlyaWdodCAyMDE0LCB0aGUgVjggcHJvamVjdCBhdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisK
KyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisg
ICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK09XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9l
eGNlcHRpb25zLWFwaS5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWFwaS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45MWQ1MzY4MTQ1NmM2NWVjODY3MThiODVlMWFmZDZmYzBmZDg5NzY1Ci0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtYXBpLmpzCkBAIC0wLDAgKzEs
MjMyIEBACisvLyBDb3B5cmlnaHQgMjAyMSB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwZXJpbWVudGFsLXdhc20tZWggLS1leHBlcmltZW50YWwt
d2FzbS1yZWZ0eXBlcworCitsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7CisKKyhmdW5j
dGlvbiBUZXN0SW1wb3J0KCkgeworCisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuVGFnKCksIFR5cGVFcnJvciwKKyAgICAgIC9leHBlY3RzIHRoZSB0YWcgdHlwZSBhcyB0aGUg
Zmlyc3QgYXJndW1lbnQvKTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5U
YWcoe30pLCBUeXBlRXJyb3IsCisgICAgICAvZXhwZWN0cyBhIHRhZyB0eXBlIHdpdGggdGhlICdw
YXJhbWV0ZXJzJyBwcm9wZXJ0eS8pOworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5LlRhZyh7cGFyYW1ldGVyczogWydmb28nXX0pLCBUeXBlRXJyb3IsCisgICAgICAvZXhwZWN0
cyB0aGUgJ3BhcmFtZXRlcnMnIGZpZWxkIG9mIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIHNl
cXVlbmNlIG9mIFdlYkFzc2VtYmx5IHZhbHVlIHR5cGVzLyk7CisgIGFzc2VydFRocm93cygoKSA9
PiBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiB7fX0pLCBUeXBlRXJyb3IsCisgICAg
ICAvVHlwZSBlcnJvci8pOworCisgIGxldCBqc19leGNlcHRfaTMyID0gbmV3IFdlYkFzc2VtYmx5
LlRhZyh7cGFyYW1ldGVyczogWydpMzInXX0pOworICBsZXQganNfZXhjZXB0X3YgPSBuZXcgV2Vi
QXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbXX0pOworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNt
TW9kdWxlQnVpbGRlcigpOworICBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1Np
Z192X2kpOworCisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRl
KHsgbTogeyBleDoganNfZXhjZXB0X2kzMiB9fSkpOworICBhc3NlcnRUaHJvd3MoCisgICAgICAo
KSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDoganNfZXhjZXB0X3YgfX0pLCBXZWJB
c3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvaW1wb3J0ZWQgVGFnIG06ZXggc2lnbmF0dXJlIGRv
ZXNuJ3QgbWF0Y2ggdGhlIGltcG9ydGVkIFdlYkFzc2VtYmx5IFRhZydzIHNpZ25hdHVyZS8pOwor
ICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBidWlsZGVyLmluc3RhbnRpYXRlKHsgbTogeyBl
eDoganNfZXhjZXB0X3YgfX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvaW1wb3J0
ZWQgVGFnIG06ZXggc2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIGltcG9ydGVkIFdlYkFzc2Vt
Ymx5IFRhZydzIHNpZ25hdHVyZS8pOworICBhc3NlcnRUcnVlKGpzX2V4Y2VwdF9pMzIudG9TdHJp
bmcoKSA9PSAiW29iamVjdCBXZWJBc3NlbWJseS5UYWddIik7Cit9KSgpOworCisoZnVuY3Rpb24g
VGVzdEV4cG9ydCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsK
KyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRF
eHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2Ug
PSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0VHJ1ZShPYmplY3QucHJvdG90eXBl
Lmhhc093blByb3BlcnR5LmNhbGwoaW5zdGFuY2UuZXhwb3J0cywgJ2V4JykpOworICBhc3NlcnRF
cXVhbHMoIm9iamVjdCIsIHR5cGVvZiBpbnN0YW5jZS5leHBvcnRzLmV4KTsKKyAgYXNzZXJ0SW5z
dGFuY2VvZihpbnN0YW5jZS5leHBvcnRzLmV4LCBXZWJBc3NlbWJseS5UYWcpOworICBhc3NlcnRT
YW1lKGluc3RhbmNlLmV4cG9ydHMuZXguY29uc3RydWN0b3IsIFdlYkFzc2VtYmx5LlRhZyk7Cit9
KSgpOworCisoZnVuY3Rpb24gVGVzdEltcG9ydEV4cG9ydCgpIHsKKworICBsZXQganNfZXhfaTMy
ID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogWydpMzInXX0pOworICBsZXQgYnVp
bGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgaW5kZXggPSBidWlsZGVyLmFk
ZEltcG9ydGVkVGFnKCJtIiwgImV4Iiwga1NpZ192X2kpOworICBidWlsZGVyLmFkZEV4cG9ydE9m
S2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGluZGV4KTsKKworICBsZXQgaW5zdGFuY2UgPSBidWls
ZGVyLmluc3RhbnRpYXRlKHsgbTogeyBleDoganNfZXhfaTMyIH19KTsKKyAgbGV0IHJlcyA9IGlu
c3RhbmNlLmV4cG9ydHMuZXg7CisgIGFzc2VydEVxdWFscyhyZXMsIGpzX2V4X2kzMik7Cit9KSgp
OworCisKKyhmdW5jdGlvbiBUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoKSB7CisgIC8vIENoZWNr
IGVycm9ycy4KKyAgbGV0IGpzX3RhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6
IFtdfSk7CisgIGFzc2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKDAp
LCBUeXBlRXJyb3IsCisgICAgICAvV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGNvbnN0cnVjdG9yIGV4
cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgV2ViQXNzZW1ibHkuVGFnLyk7CisgIGFz
c2VydFRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKHt9KSwgVHlwZUVycm9y
LAorICAgICAgL1dlYkFzc2VtYmx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciBleHBlY3RzIHRoZSBm
aXJzdCBhcmd1bWVudCB0byBiZSBhIFdlYkFzc2VtYmx5LlRhZy8pOworICBhc3NlcnRUaHJvd3Mo
KCkgPT4gV2ViQXNzZW1ibHkuRXhjZXB0aW9uKGpzX3RhZyksIFR5cGVFcnJvciwKKyAgICAgIC9j
YWxsaW5nIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciB3aXRob3V0IG5ldyBpcyBp
bnZhbGlkLyk7CisgIGxldCBqc19leGNlcHRpb24gPSBuZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9u
KGpzX3RhZywgW10pOworCisgIC8vIENoZWNrIHByb3RvdHlwZS4KKyAgYXNzZXJ0U2FtZShXZWJB
c3NlbWJseS5FeGNlcHRpb24ucHJvdG90eXBlLCBqc19leGNlcHRpb24uX19wcm90b19fKTsKKyAg
YXNzZXJ0VHJ1ZShqc19leGNlcHRpb24gaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5FeGNlcHRpb24p
OworCisgIC8vIENoZWNrIHByb3RvdHlwZSBvZiBhIHRocm93biBleGNlcHRpb24uCisgIGxldCBi
dWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCB3YXNtX3RhZyA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2ln
X3ZfdikKKyAgICAgIC5hZGRCb2R5KFtrRXhwclRocm93LCB3YXNtX3RhZ10pLmV4cG9ydEZ1bmMo
KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICB0cnkgeworICAg
IGluc3RhbmNlLmV4cG9ydHMudGhyb3coKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGFzc2VydFRy
dWUoZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIH0KK30pKCk7CisKKyhm
dW5jdGlvbiBUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JXaXRoUGF5bG9hZCgpIHsKKyAgbGV0IHRh
ZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoCisgICAgICB7cGFyYW1ldGVyczogWydpMzInLCAnZjMy
JywgJ2k2NCcsICdmNjQnLCAnZXh0ZXJucmVmJ119KTsKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IG5l
dyBXZWJBc3NlbWJseS5FeGNlcHRpb24oCisgICAgICB0YWcsIFsxbiwgMiwgM24sIDQsIHt9XSks
IFR5cGVFcnJvcik7CisgIGFzc2VydERvZXNOb3RUaHJvdygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
RXhjZXB0aW9uKHRhZywgWzMsIDQsIDVuLCA2LCB7fV0pKTsKK30pKCk7CisKKyhmdW5jdGlvbiBU
ZXN0Q2F0Y2hKU0V4Y2VwdGlvbigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IGpzX3RhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6
IFtdfSk7CisgIGxldCBqc19mdW5jX2luZGV4ID0gYnVpbGRlci5hZGRJbXBvcnQoJ20nLCAnanNf
ZnVuYycsIGtTaWdfdl92KTsKKyAgbGV0IGpzX3RhZ19pbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0
ZWRUYWcoIm0iLCAianNfdGFnIiwga1NpZ192X3YpOworICBsZXQgdGFnX2luZGV4ID0gYnVpbGRl
ci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgid2FzbV90YWci
LCBrRXh0ZXJuYWxUYWcsIHRhZ19pbmRleCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNo
Iiwga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkz
MiwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGpzX2Z1bmNfaW5kZXgsCisgICAgICAgIGtF
eHBySTMyQ29uc3QsIDAsCisgICAgICAgIGtFeHByQ2F0Y2gsIGpzX3RhZ19pbmRleCwKKyAgICAg
ICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAga0V4cHJDYXRjaCwgdGFnX2luZGV4LAorICAg
ICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0
RnVuYygpOworICBsZXQgdGFnOworICBmdW5jdGlvbiBqc19mdW5jKCkgeworICAgIHRocm93IG5l
dyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbXSk7CisgIH0KKyAgbGV0IGluc3RhbmNlID0g
YnVpbGRlci5pbnN0YW50aWF0ZSh7bToge2pzX2Z1bmMsIGpzX3RhZ319KTsKKyAgdGFnID0ganNf
dGFnOworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy5jYXRjaCgpKTsKKyAgdGFn
ID0gaW5zdGFuY2UuZXhwb3J0cy53YXNtX3RhZzsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3RhbmNl
LmV4cG9ydHMuY2F0Y2goKSk7Cit9KSgpOworCitmdW5jdGlvbiBUZXN0Q2F0Y2hKUyh0eXBlc19z
dHIsIHR5cGVzLCB2YWx1ZXMpIHsKKyAgLy8gQ3JlYXRlIGEgSlMgZXhjZXB0aW9uLCBjYXRjaCBp
dCBpbiB3YXNtIGFuZCBjaGVjayB0aGUgdW5wYWNrZWQgdmFsdWUocykuCisgIGxldCBidWlsZGVy
ID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBqc190YWcgPSBuZXcgV2ViQXNzZW1i
bHkuVGFnKHtwYXJhbWV0ZXJzOiB0eXBlc19zdHJ9KTsKKyAgbGV0IGpzX2Z1bmNfaW5kZXggPSBi
dWlsZGVyLmFkZEltcG9ydCgnbScsICdqc19mdW5jJywga1NpZ192X3YpOworICBsZXQgc2lnMSA9
IG1ha2VTaWcodHlwZXMsIFtdKTsKKyAgbGV0IHNpZzIgPSBtYWtlU2lnKFtdLCB0eXBlcyk7Cisg
IGxldCBqc190YWdfaW5kZXggPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImpzX3RhZyIs
IHNpZzEpOworICBsZXQgdGFnX2luZGV4ID0gYnVpbGRlci5hZGRUYWcoc2lnMSk7CisgIGxldCBy
ZXR1cm5fdHlwZSA9IGJ1aWxkZXIuYWRkVHlwZShzaWcyKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRP
ZktpbmQoIndhc21fdGFnIiwga0V4dGVybmFsVGFnLCB0YWdfaW5kZXgpOworICBidWlsZGVyLmFk
ZEZ1bmN0aW9uKCJjYXRjaCIsIHNpZzIpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBy
VHJ5LCByZXR1cm5fdHlwZSwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGpzX2Z1bmNfaW5k
ZXgsCisgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgIGtFeHByQ2F0Y2gsIGpzX3Rh
Z19pbmRleCwKKyAgICAgICAga0V4cHJDYXRjaCwgdGFnX2luZGV4LAorICAgICAgICBrRXhwckVu
ZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgZXhjZXB0aW9uOworICBmdW5jdGlvbiBq
c19mdW5jKCkgeworICAgIHRocm93IGV4Y2VwdGlvbjsKKyAgfQorICBsZXQgZXhwZWN0ZWQgPSB2
YWx1ZXMubGVuZ3RoID09IDEgPyB2YWx1ZXNbMF0gOiB2YWx1ZXM7CisgIGxldCBpbnN0YW5jZSA9
IGJ1aWxkZXIuaW5zdGFudGlhdGUoe206IHtqc19mdW5jLCBqc190YWd9fSk7CisgIGV4Y2VwdGlv
biA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oanNfdGFnLCB2YWx1ZXMpOworICBhc3NlcnRF
cXVhbHMoZXhwZWN0ZWQsIGluc3RhbmNlLmV4cG9ydHMuY2F0Y2goKSk7CisgIGV4Y2VwdGlvbiA9
IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24oaW5zdGFuY2UuZXhwb3J0cy53YXNtX3RhZywgdmFs
dWVzKTsKKyAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBpbnN0YW5jZS5leHBvcnRzLmNhdGNoKCkp
OworfQorCisoZnVuY3Rpb24gVGVzdENhdGNoSlNFeGNlcHRpb25XaXRoUGF5bG9hZCgpIHsKKyAg
VGVzdENhdGNoSlMoWydpMzInXSwgW2tXYXNtSTMyXSwgWzFdKTsKKyAgVGVzdENhdGNoSlMoWydp
NjQnXSwgW2tXYXNtSTY0XSwgWzJuXSk7CisgIFRlc3RDYXRjaEpTKFsnZjMyJ10sIFtrV2FzbUYz
Ml0sIFszXSk7CisgIFRlc3RDYXRjaEpTKFsnZjY0J10sIFtrV2FzbUY2NF0sIFs0XSk7CisgIFRl
c3RDYXRjaEpTKFsnZXh0ZXJucmVmJ10sIFtrV2FzbUV4dGVyblJlZl0sIFt7dmFsdWU6IDV9XSk7
CisgIFRlc3RDYXRjaEpTKFsnaTMyJywgJ2k2NCcsICdmMzInLCAnZjY0JywgJ2V4dGVybnJlZidd
LAorICAgICAgICAgICAgICBba1dhc21JMzIsIGtXYXNtSTY0LCBrV2FzbUYzMiwga1dhc21GNjQs
IGtXYXNtRXh0ZXJuUmVmXSwKKyAgICAgICAgICAgICAgWzYsIDduLCA4LCA5LCB7dmFsdWU6IDEw
fV0pOworfSkoKTsKKworZnVuY3Rpb24gVGVzdEdldEFyZ0hlbHBlcih0eXBlc19zdHIsIHR5cGVz
LCB2YWx1ZXMpIHsKKyAgbGV0IHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6
IHR5cGVzX3N0cn0pOworICBsZXQgZXhjZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlv
bih0YWcsIHZhbHVlcyk7CisgIGZvciAoaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7ICsraSkgewor
ICAgIGFzc2VydEVxdWFscyhleGNlcHRpb24uZ2V0QXJnKHRhZywgaSksIHZhbHVlc1tpXSk7Cisg
IH0KKworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgc2ln
ID0gbWFrZVNpZyh0eXBlcywgW10pOworICBsZXQgdGFnX2luZGV4ID0gYnVpbGRlci5hZGRJbXBv
cnRlZFRhZygibSIsICJ0Iiwgc2lnKTsKKyAgbGV0IGJvZHkgPSBbXTsKKyAgZm9yIChpID0gMDsg
aSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgYm9keS5wdXNoKGtFeHByTG9jYWxHZXQsIGkp
OworICB9CisgIGJvZHkucHVzaChrRXhwclRocm93LCB0YWdfaW5kZXgpOworICBidWlsZGVyLmFk
ZEZ1bmN0aW9uKCJ0aHJvdyIsIHNpZykKKyAgICAgIC5hZGRCb2R5KGJvZHkpLmV4cG9ydEZ1bmMo
KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7J20nOiB7J3QnOiB0YWd9
fSk7CisgIHRyeSB7CisgICAgaW5zdGFuY2UuZXhwb3J0cy50aHJvdyguLi52YWx1ZXMpOworICB9
IGNhdGNoIChlKSB7CisgICAgZm9yIChpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7Cisg
ICAgICBhc3NlcnRFcXVhbHMoZS5nZXRBcmcodGFnLCBpKSwgdmFsdWVzW2ldKTsKKyAgICB9Cisg
IH0KK30KKworKGZ1bmN0aW9uIFRlc3RHZXRBcmcoKSB7CisgIC8vIENoZWNrIGVycm9ycy4KKyAg
bGV0IHRhZyA9IG5ldyBXZWJBc3NlbWJseS5UYWcoe3BhcmFtZXRlcnM6IFsnaTMyJ119KTsKKyAg
bGV0IGV4Y2VwdGlvbiA9IG5ldyBXZWJBc3NlbWJseS5FeGNlcHRpb24odGFnLCBbMF0pOworICBh
c3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0aW9uLmdldEFyZygwLCAwKSwgVHlwZUVycm9yLAorICAg
ICAgL0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBXZWJBc3NlbWJseS5UYWcvKTsKKyAgYXNzZXJ0
VGhyb3dzKCgpID0+IGV4Y2VwdGlvbi5nZXRBcmcoe30sIDApLCBUeXBlRXJyb3IsCisgICAgICAv
Rmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIFdlYkFzc2VtYmx5LlRhZy8pOworICAvL2Fzc2VydFRo
cm93cygoKSA9PiBleGNlcHRpb24uZ2V0QXJnKHRhZywgdW5kZWZpbmVkKSwgVHlwZUVycm9yLAor
ICAgICAgLy8vSW5kZXggbXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhIHZhbGlkIG51bWJlci8pOwor
ICBhc3NlcnRUaHJvd3MoKCkgPT4gZXhjZXB0aW9uLmdldEFyZyh0YWcsIDB4RkZGRkZGRkYpLCBS
YW5nZUVycm9yLAorICAgICAgL0luZGV4IG91dCBvZiByYW5nZS8pOworICBsZXQgd3JvbmdfdGFn
ID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczogWydpMzInXX0pOworICBhc3NlcnRU
aHJvd3MoKCkgPT4gZXhjZXB0aW9uLmdldEFyZyh3cm9uZ190YWcsIDApLCBUeXBlRXJyb3IsCisg
ICAgICAvRmlyc3QgYXJndW1lbnQgZG9lcyBub3QgbWF0Y2ggdGhlIGV4Y2VwdGlvbiB0YWcvKTsK
KworICAvLyBDaGVjayBkZWNvZGluZy4KKyAgVGVzdEdldEFyZ0hlbHBlcihbJ2kzMiddLCBba1dh
c21JMzJdLCBbMV0pOworICBUZXN0R2V0QXJnSGVscGVyKFsnaTY0J10sIFtrV2FzbUk2NF0sIFsy
bl0pOworICBUZXN0R2V0QXJnSGVscGVyKFsnZjMyJ10sIFtrV2FzbUYzMl0sIFszXSk7CisgIFRl
c3RHZXRBcmdIZWxwZXIoWydmNjQnXSwgW2tXYXNtRjY0XSwgWzRdKTsKKyAgVGVzdEdldEFyZ0hl
bHBlcihbJ2V4dGVybnJlZiddLCBba1dhc21FeHRlcm5SZWZdLCBbe3ZhbDogNX1dKTsKKyAgVGVz
dEdldEFyZ0hlbHBlcihbJ2kzMicsICdpNjQnLCAnZjMyJywgJ2Y2NCcsICdleHRlcm5yZWYnXSwg
W2tXYXNtSTMyLCBrV2FzbUk2NCwga1dhc21GMzIsIGtXYXNtRjY0LCBrV2FzbUV4dGVyblJlZl0s
IFs1LCA2biwgNywgOCwge3ZhbDogOX1dKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0RXhjZXB0
aW9uSXMoKSB7CisgIGxldCB0YWcxID0gbmV3IFdlYkFzc2VtYmx5LlRhZyh7cGFyYW1ldGVyczog
W119KTsKKyAgbGV0IHRhZzIgPSBuZXcgV2ViQXNzZW1ibHkuVGFnKHtwYXJhbWV0ZXJzOiBbXX0p
OworICBhc3NlcnRUaHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbih7fSwgW10p
LCBUeXBlRXJyb3IsCisgICAgICAvZXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSBX
ZWJBc3NlbWJseS5UYWcvKTsKKworICBsZXQgZXhjZXB0aW9uID0gbmV3IFdlYkFzc2VtYmx5LkV4
Y2VwdGlvbih0YWcxLCBbXSk7CisgIGFzc2VydFRydWUoZXhjZXB0aW9uLmlzKHRhZzEpKTsKKyAg
YXNzZXJ0RmFsc2UoZXhjZXB0aW9uLmlzKHRhZzIpKTsKKworICBhc3NlcnRUaHJvd3MoKCkgPT4g
ZXhjZXB0aW9uLmlzLmFwcGx5KHt9LCB0YWcxKSwgVHlwZUVycm9yLAorICAgICAgL1dlYkFzc2Vt
Ymx5LkV4Y2VwdGlvbiBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1FeGNlcHRpb24gb2JqZWN0Lyk7
Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXhwb3J0Lmpz
IGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXhwb3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBjOTY5
MGY1Yjg4ZjdlNTQzY2RjOTNkOTFjYzFhODE4M2Q4MzgzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9K
U1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1leHBvcnQuanMKQEAgLTAsMCArMSw1MyBAQAorLy8g
Q29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8v
IEZsYWdzOiAtLWV4cG9zZS13YXNtIC0tZXhwZXJpbWVudGFsLXdhc20tZWgKKworbG9hZCgid2Fz
bS1tb2R1bGUtYnVpbGRlci5qcyIpOworCisoZnVuY3Rpb24gVGVzdEV4cG9ydE11bHRpcGxlKCkg
eworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0
MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFk
ZFRhZyhrU2lnX3ZfaSk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDFhIiwga0V4dGVy
bmFsVGFnLCBleGNlcHQxKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4MWIiLCBrRXh0
ZXJuYWxUYWcsIGV4Y2VwdDEpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgyIiwga0V4
dGVybmFsVGFnLCBleGNlcHQyKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0
ZSgpOworCisgIGFzc2VydFRydWUoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxs
KGluc3RhbmNlLmV4cG9ydHMsICdleDFhJykpOworICBhc3NlcnRUcnVlKE9iamVjdC5wcm90b3R5
cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnN0YW5jZS5leHBvcnRzLCAnZXgxYicpKTsKKyAgYXNz
ZXJ0VHJ1ZShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5zdGFuY2UuZXhw
b3J0cywgJ2V4MicpKTsKKyAgLy8gRklYTUU6IGZpeCBicm9rZW4gdjggd2FzbSBleGNlcHRpb25z
IHRlc3RzCisgIC8vIGFzc2VydFNhbWUoaW5zdGFuY2UuZXhwb3J0cy5leDFhLCBpbnN0YW5jZS5l
eHBvcnRzLmV4MWIpOworICBhc3NlcnROb3RTYW1lKGluc3RhbmNlLmV4cG9ydHMuZXgxYSwgaW5z
dGFuY2UuZXhwb3J0cy5leDIpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RFeHBvcnRPdXRPZkJv
dW5kcygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0
IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRFeHBvcnRP
ZktpbmQoImV4X29vYiIsIGtFeHRlcm5hbFRhZywgZXhjZXB0ICsgMSk7CisgIGFzc2VydFRocm93
cygKKyAgICAgICgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoKSwgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yLAorICAgICAgL1dlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
MzE6IDB0aCBFeHBvcnQgaGFzIGludmFsaWQgZXhjZXB0aW9uIG51bWJlciAxIGl0IGV4Y2VlZHMg
dGhlIGV4Y2VwdGlvbiBpbmRleCBzcGFjZSAxLCBuYW1lZCAnZXhfb29iJy8pOworfSkoKTsKKwor
KGZ1bmN0aW9uIFRlc3RFeHBvcnRTYW1lTmFtZVR3aWNlKCkgeworICBsZXQgYnVpbGRlciA9IG5l
dyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4
Y2VwdCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhj
ZXB0KTsKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSgp
LCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsCisgICAgICAvV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMDogZHVwbGljYXRlIGV4cG9ydDogJ2V4Jy8pOworfSkoKTsK
KworKGZ1bmN0aW9uIFRlc3RFeHBvcnRNb2R1bGVHZXRFeHBvcnRzKCkgeworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRU
YWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxU
YWcsIGV4Y2VwdCk7CisgIGxldCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIudG9CdWZmZXIoKSk7CisKKyAgbGV0IGV4cG9ydHMgPSBXZWJBc3NlbWJseS5Nb2R1bGUuZXhw
b3J0cyhtb2R1bGUpOworICBhc3NlcnRBcnJheUVxdWFscyhbeyBuYW1lOiAiZXgiLCBraW5kOiAi
dGFnIiB9XSwgZXhwb3J0cyk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L2V4
Y2VwdGlvbnMtZXh0ZXJucmVmLmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtZXh0ZXJu
cmVmLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmViYmRhMzdmMTZlYjE1MDMyNDkwOWQ2YjZjNTBmZGFhOGQwNDhk
NTQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1leHRlcm5y
ZWYuanMKQEAgLTAsMCArMSw5NiBAQAorLy8gQ29weXJpZ2h0IDIwMTggdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIEZsYWdzOiAtLWV4cGVyaW1lbnRhbC13YXNtLWVo
IC0tZXhwZXJpbWVudGFsLXdhc20tcmVmdHlwZXMgLS1hbGxvdy1uYXRpdmVzLXN5bnRheAorCits
b2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7Citsb2FkKCJleGNlcHRpb25zLXV0aWxzLmpz
Iik7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3duIGV4Y2VwdGlvbiB3aXRoIGEg
bnVsbC1yZWYgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93UmVmTnVsbCgpIHsKKyAgbGV0IGJ1
aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIu
YWRkVGFnKGtTaWdfdl9yKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfbnVsbCIsIGtT
aWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclJlZk51bGwsIGtFeHRlcm5S
ZWZDb2RlLAorICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0
KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdh
c21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtudWxsXSwgKCkgPT4gaW5z
dGFuY2UuZXhwb3J0cy50aHJvd19udWxsKCkpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2luZy9j
YXRjaGluZyB0aGUgbnVsbC1yZWYgdmFsdWUuCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hSZWZO
dWxsKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQg
ZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3IpOworICBidWlsZGVyLmFkZEZ1bmN0aW9u
KCJ0aHJvd19jYXRjaF9udWxsIiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAg
IGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAg
ICAgIGtFeHBySTMyRXF6LAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtSTMyLAorICAgICAgICAg
ICAga0V4cHJSZWZOdWxsLCBrRXh0ZXJuUmVmQ29kZSwKKyAgICAgICAgICAgIGtFeHByVGhyb3cs
IGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckVsc2UsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0
LCA0MiwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAor
ICAgICAgICAgIGtFeHByUmVmSXNOdWxsLAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtSTMyLAor
ICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMjMsCisgICAgICAgICAga0V4cHJFbHNlLAorICAg
ICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAg
a0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZL
aW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRl
ci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy50
aHJvd19jYXRjaF9udWxsKDApKTsKKyAgYXNzZXJ0RXF1YWxzKDQyLCBpbnN0YW5jZS5leHBvcnRz
LnRocm93X2NhdGNoX251bGwoMSkpOworfSkoKTsKKworLy8gVGVzdCB0aGUgZW5jb2Rpbmcgb2Yg
YSB0aHJvd24gZXhjZXB0aW9uIHdpdGggYSByZWZlcmVuY2UgdHlwZSB2YWx1ZS4KKyhmdW5jdGlv
biBUZXN0VGhyb3dSZWZQYXJhbSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1
aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9yKTsKKyAgYnVp
bGRlci5hZGRGdW5jdGlvbigidGhyb3dfcGFyYW0iLCBrU2lnX3ZfcikKKyAgICAgIC5hZGRCb2R5
KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0
LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgi
LCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoKTsKKyAgbGV0IG8gPSBuZXcgT2JqZWN0KCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhp
bnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgW29dLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRz
LnRocm93X3BhcmFtKG8pKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2Uu
ZXhwb3J0cy5leCwgWzFdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDEpKTsK
KyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzIuM10s
ICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oMi4zKSk7CisgIGFzc2VydFdhc21U
aHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFsic3RyIl0sICgpID0+IGluc3Rh
bmNlLmV4cG9ydHMudGhyb3dfcGFyYW0oInN0ciIpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dp
bmcvY2F0Y2hpbmcgdGhlIHJlZmVyZW5jZSB0eXBlIHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJv
d0NhdGNoUmVmUGFyYW0oKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVy
KCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfcik7CisgIGJ1aWxkZXIu
YWRkRnVuY3Rpb24oInRocm93X2NhdGNoX3BhcmFtIiwga1NpZ19yX3IpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHByVHJ5LCBrRXh0ZXJuUmVmQ29kZSwKKyAgICAgICAgICBrRXhwckxv
Y2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJD
YXRjaCwgZXhjZXB0LAorICAgICAgICAgIC8vIGZhbGwtdGhyb3VnaAorICAgICAgICBrRXhwckVu
ZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4
Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3Rh
bnRpYXRlKCk7CisgIGxldCBvID0gbmV3IE9iamVjdCgpOworCisgIGFzc2VydEVxdWFscyhvLCBp
bnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKG8pKTsKKyAgYXNzZXJ0RXF1YWxzKDEs
IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oMSkpOworICBhc3NlcnRFcXVhbHMo
Mi4zLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDIuMykpOworICBhc3NlcnRF
cXVhbHMoInN0ciIsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oInN0ciIpKTsK
K30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1pbXBvcnQuanMg
Yi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy1pbXBvcnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E0ZjBh
MDU2YmZjZjdjYzAzMzVlZGZiMGM3MTJlNTViNWU3MWE0OAotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvd2FzbS92OC9leGNlcHRpb25zLWltcG9ydC5qcwpAQCAtMCwwICsxLDkwIEBACisvLyBD
b3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8g
RmxhZ3M6IC0tZXhwb3NlLXdhc20gLS1leHBlcmltZW50YWwtd2FzbS1laAorCitsb2FkKCJ3YXNt
LW1vZHVsZS1idWlsZGVyLmpzIik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byByZXR1cm4gYSBu
ZXcgZXhwb3J0ZWQgZXhjZXB0aW9uIHdpdGggdGhlIHtrU2lnX3Zfdn0gdHlwZQorLy8gc2lnbmF0
dXJlIGZyb20gYW4gYW5vbnltb3VzIG1vZHVsZS4gVGhlIHVuZGVybHlpbmcgbW9kdWxlIGlzIHRo
cm93biBhd2F5LgorLy8gVGhpcyBhbGxvd3MgdGVzdHMgdG8gcmVhc29uIHNvbGVseSBhYm91dCBp
bXBvcnRpbmcgZXhjZXB0aW9ucy4KK2Z1bmN0aW9uIE5ld0V4cG9ydGVkVGFnKCkgeworICBsZXQg
YnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgdGFnID0gYnVpbGRlci5h
ZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgidCIsIGtFeHRlcm5h
bFRhZywgdGFnKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBy
ZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy50OworfQorCisoZnVuY3Rpb24gVGVzdEltcG9ydFNpbXBs
ZSgpIHsKKyAgbGV0IGV4cG9ydGVkID0gTmV3RXhwb3J0ZWRUYWcoKTsKKyAgbGV0IGJ1aWxkZXIg
PSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1w
b3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3Zfdik7CisKKyAgYXNzZXJ0RG9lc05vdFRocm93KCgp
ID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4OiBleHBvcnRlZCB9fSkpOworfSkoKTsK
KworKGZ1bmN0aW9uIFRlc3RJbXBvcnRNdWx0aXBsZSgpIHsKKyAgbGV0IGV4cG9ydGVkID0gTmV3
RXhwb3J0ZWRUYWcoKTsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsK
KyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4MSIsIGtTaWdf
dl92KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZEltcG9ydGVkVGFnKCJtIiwgImV4MiIs
IGtTaWdfdl92KTsKKyAgbGV0IGV4Y2VwdDMgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7Cisg
IGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDIpOwor
ICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgzIiwga0V4dGVybmFsVGFnLCBleGNlcHQzKTsK
KyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXgxOiBleHBvcnRl
ZCwgZXgyOiBleHBvcnRlZCB9fSk7CisKKyAgYXNzZXJ0VHJ1ZShleGNlcHQxIDwgZXhjZXB0MyAm
JiBleGNlcHQyIDwgZXhjZXB0Myk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGluc3RhbmNl
LmV4cG9ydHMuZXgxKTsKKyAgLy8gRklYTUU6IGZpeCBicm9rZW4gdjggd2FzbSBleGNlcHRpb25z
IHRlc3RzCisgIC8vIGFzc2VydFNhbWUoZXhwb3J0ZWQsIGluc3RhbmNlLmV4cG9ydHMuZXgyKTsK
KyAgYXNzZXJ0Tm90U2FtZShleHBvcnRlZCwgaW5zdGFuY2UuZXhwb3J0cy5leDMpOworfSkoKTsK
KworKGZ1bmN0aW9uIFRlc3RJbXBvcnRNaXNzaW5nKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBX
YXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRJbXBvcnRlZFRh
ZygibSIsICJleCIsIGtTaWdfdl92KTsKKworICBhc3NlcnRUaHJvd3MoCisgICAgICAoKSA9PiBi
dWlsZGVyLmluc3RhbnRpYXRlKHt9KSwgVHlwZUVycm9yLAorICAgICAgL2ltcG9ydCBtOmV4IG11
c3QgYmUgYW4gb2JqZWN0Lyk7CisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxkZXIu
aW5zdGFudGlhdGUoeyBtOiB7fX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsCisgICAgICAvVGFn
IGltcG9ydCBtOmV4IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWcvKTsKK30p
KCk7CisKKyhmdW5jdGlvbiBUZXN0SW1wb3J0VmFsdWVNaXNtYXRjaCgpIHsKKyAgbGV0IGJ1aWxk
ZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRk
SW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBrU2lnX3Zfdik7CisKKyAgYXNzZXJ0VGhyb3dzKAorICAg
ICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZXg6IDIzIH19KSwgV2ViQXNzZW1i
bHkuTGlua0Vycm9yLAorICAgICAgL1RhZyBpbXBvcnQgbTpleCBpcyBub3QgYW4gaW5zdGFuY2Ug
b2YgV2ViQXNzZW1ibHkuVGFnLyk7CisgIGFzc2VydFRocm93cygKKyAgICAgICgpID0+IGJ1aWxk
ZXIuaW5zdGFudGlhdGUoeyBtOiB7IGV4OiB7fSB9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwK
KyAgICAgIC9UYWcgaW1wb3J0IG06ZXggaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5
LlRhZy8pOworICB2YXIgbW9ua2V5ID0gT2JqZWN0LmNyZWF0ZShOZXdFeHBvcnRlZFRhZygpKTsK
KyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsg
ZXg6IG1vbmtleSB9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwKKyAgICAgIC9UYWcgaW1wb3J0
IG06ZXggaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhZy8pOworfSkoKTsKKwor
KGZ1bmN0aW9uIFRlc3RJbXBvcnRTaWduYXR1cmVNaXNtYXRjaCgpIHsKKyAgbGV0IGV4cG9ydGVk
ID0gTmV3RXhwb3J0ZWRUYWcoKTsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAiZXgiLCBr
U2lnX3ZfaSk7CisKKyAgYXNzZXJ0VGhyb3dzKAorICAgICAgKCkgPT4gYnVpbGRlci5pbnN0YW50
aWF0ZSh7IG06IHsgZXg6IGV4cG9ydGVkIH19KSwgV2ViQXNzZW1ibHkuTGlua0Vycm9yLAorICAg
ICAgL2ltcG9ydGVkIFRhZyBtOmV4IHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBpbXBvcnRl
ZCBXZWJBc3NlbWJseSBUYWcncyBzaWduYXR1cmUvKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0
SW1wb3J0TW9kdWxlR2V0SW1wb3J0cygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAi
ZXgiLCBrU2lnX3Zfdik7CisgIGxldCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIudG9CdWZmZXIoKSk7CisKKyAgbGV0IGltcG9ydHMgPSBXZWJBc3NlbWJseS5Nb2R1bGUu
aW1wb3J0cyhtb2R1bGUpOworICBhc3NlcnRBcnJheUVxdWFscyhbeyBtb2R1bGU6ICJtIiwgbmFt
ZTogImV4Iiwga2luZDogInRhZyIgfV0sIGltcG9ydHMpOworfSkoKTsKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXJldGhyb3cuanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhj
ZXB0aW9ucy1yZXRocm93LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyMzM5YmVmMmY2OTQyYmQ1ZjZlNWViMzVk
NzE4OWMyY2FjNTkwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0
aW9ucy1yZXRocm93LmpzCkBAIC0wLDAgKzEsMTQyIEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUg
VjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwb3NlLXdh
c20gLS1leHBlcmltZW50YWwtd2FzbS1laCAtLWFsbG93LW5hdGl2ZXMtc3ludGF4CisKK2xvYWQo
Indhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKK2xvYWQoImV4Y2VwdGlvbnMtdXRpbHMuanMiKTsK
KworLy8gVGVzdCB0aGF0IHJldGhyb3cgZXhwcmVzc2lvbnMgY2FuIHRhcmdldCBjYXRjaCBibG9j
a3MuCisoZnVuY3Rpb24gVGVzdFJldGhyb3dJbkNhdGNoKCkgeworICBsZXQgYnVpbGRlciA9IG5l
dyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJyZXRocm93MCIsIGtTaWdfdl92KQorICAg
ICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtF
eHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAg
IGtFeHByUmV0aHJvdywgMCwKKyAgICAgICAga0V4cHJFbmQsCisgIF0pLmV4cG9ydEZ1bmMoKTsK
KyAgYnVpbGRlci5hZGRGdW5jdGlvbigicmV0aHJvdzEiLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRC
b2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVGhyb3cs
IGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByTG9j
YWxHZXQsIDAsCisgICAgICAgICAga0V4cHJJMzJFcXosCisgICAgICAgICAga0V4cHJJZiwga1dh
c21Wb2lkLAorICAgICAgICAgICAga0V4cHJSZXRocm93LCAxLAorICAgICAgICAgIGtFeHByRW5k
LAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDIzLAorICAgICAgICBrRXhwckVuZAorICBdKS5l
eHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRh
ZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisg
IGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9
PiBpbnN0YW5jZS5leHBvcnRzLnJldGhyb3cwKCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3Rh
bmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5yZXRo
cm93MSgwKSk7CisgIGFzc2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5yZXRocm93MSgx
KSk7Cit9KSgpOworCisvLyBUZXN0IHRoYXQgcmV0aHJvdyBleHByZXNzaW9ucyBjYW4gdGFyZ2V0
IGNhdGNoLWFsbCBibG9ja3MuCisoZnVuY3Rpb24gVGVzdFJldGhyb3dJbkNhdGNoQWxsKCkgewor
ICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0g
YnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJyZXRocm93
MCIsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21W
b2lkLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaEFs
bCwKKyAgICAgICAgICBrRXhwclJldGhyb3csIDAsCisgICAgICAgIGtFeHByRW5kLAorICBdKS5l
eHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInJldGhyb3cxIiwga1NpZ19pX2kp
CisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAg
ICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAg
a0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICBrRXhw
cklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclJldGhyb3csIDEsCisgICAgICAgICAg
a0V4cHJFbmQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMjMsCisgICAgICAgIGtFeHByRW5k
CisgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4
dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRl
KCk7CisKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwg
W10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMucmV0aHJvdzAoKSk7CisgIGFzc2VydFdhc21UaHJv
d3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBv
cnRzLnJldGhyb3cxKDApKTsKKyAgYXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnJl
dGhyb3cxKDEpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhhdCByZXRocm93IGV4cHJlc3Npb24gcHJv
cGVybHkgdGFyZ2V0IHRoZSBjb3JyZWN0IHN1cnJvdW5kaW5nIHRyeQorLy8gYmxvY2sgZXZlbiBp
biB0aGUgcHJlc2VuY2Ugb2YgbXVsdGlwbGUgaGFuZGxlcnMgYmVpbmcgaW52b2x2ZWQuCisoZnVu
Y3Rpb24gVGVzdFJldGhyb3dOZXN0ZWQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1
bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOwor
ICBsZXQgZXhjZXB0MiA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRG
dW5jdGlvbigicmV0aHJvd19uZXN0ZWQiLCBrU2lnX2lfaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAg
ICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdDIs
CisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDIsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNt
STMyLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckNh
dGNoLCBleGNlcHQxLAorICAgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAg
IGtFeHBySTMyQ29uc3QsIDAsCisgICAgICAgICAgICBrRXhwckkzMkVxLAorICAgICAgICAgICAg
a0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAgICBrRXhwclJldGhyb3csIDEsCisgICAg
ICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAg
ICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAg
ICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgICAga0V4cHJSZXRocm93LCAyLAor
ICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyMywKKyAg
ICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJFbmQsCisgIF0pLmV4cG9ydEZ1bmMoKTsK
KyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4MSIsIGtFeHRlcm5hbFRhZywgZXhjZXB0MSk7
CisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleDIiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDIp
OworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0V2Fz
bVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leDEsIFtdLCAoKSA9PiBpbnN0YW5j
ZS5leHBvcnRzLnJldGhyb3dfbmVzdGVkKDApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5j
ZSwgaW5zdGFuY2UuZXhwb3J0cy5leDIsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnJldGhy
b3dfbmVzdGVkKDEpKTsKKyAgYXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBvcnRzLnJldGhy
b3dfbmVzdGVkKDIpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhhdCBhbiBleGNlcHRpb24gYmVpbmcg
cmV0aHJvdyBjYW4gYmUgY2F1Z2h0IGJ5IGFub3RoZXIgbG9jYWwgY2F0Y2gKKy8vIGJsb2NrIGlu
IHRoZSBzYW1lIGZ1bmN0aW9uIHdpdGhvdXQgZXZlciB1bndpbmRpbmcgdGhlIGFjdGl2YXRpb24u
CisoZnVuY3Rpb24gVGVzdFJldGhyb3dSZWNhdGNoKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBX
YXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192
X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJyZXRocm93X3JlY2F0Y2giLCBrU2lnX2lfaSkK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAg
IGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAg
ICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisg
ICAgICAgICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwK
KyAgICAgICAgICAgICAga0V4cHJSZXRocm93LCAyLAorICAgICAgICAgICAga0V4cHJFbmQsCisg
ICAgICAgICAgICBrRXhwckkzMkNvbnN0LCA0MiwKKyAgICAgICAgICBrRXhwckNhdGNoLCBleGNl
cHQsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyMywKKyAgICAgICAgICBrRXhwckVuZCwK
KyAgICAgICAga0V4cHJFbmQsCisgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBv
cnRPZktpbmQoImV4Iiwga0V4dGVybmFsVGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBi
dWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDIzLCBpbnN0YW5jZS5leHBv
cnRzLnJldGhyb3dfcmVjYXRjaCgwKSk7CisgIGFzc2VydEVxdWFscyg0MiwgaW5zdGFuY2UuZXhw
b3J0cy5yZXRocm93X3JlY2F0Y2goMSkpOworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS92OC9leGNlcHRpb25zLXNoYXJlZC5qcyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXNo
YXJlZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44NTJmNWJhOGExMzcxNjFmZjc1Nzc1YTRjOWUyMTBmOTBjZDI4
ODM1Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtc2hhcmVk
LmpzCkBAIC0wLDAgKzEsMTUzIEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVjdCBh
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwb3NlLXdhc20gLS1leHBlcmlt
ZW50YWwtd2FzbS1laAorCitsb2FkKCJ3YXNtLW1vZHVsZS1idWlsZGVyLmpzIik7CisKKy8vIEhl
bHBlciBmdW5jdGlvbiB0byByZXR1cm4gYSBuZXcgZXhwb3J0ZWQgZXhjZXB0aW9uIHdpdGggdGhl
IHtrU2lnX3Zfdn0gdHlwZQorLy8gc2lnbmF0dXJlIGZyb20gYW4gYW5vbnltb3VzIG1vZHVsZS4g
VGhlIHVuZGVybHlpbmcgbW9kdWxlIGlzIHRocm93biBhd2F5LgorZnVuY3Rpb24gTmV3RXhwb3J0
ZWRFeGNlcHRpb24oKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7
CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRk
RXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNl
ID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy5leDsK
K30KKworLy8gQ2hlY2sgdGhhdCBhbiBpbnN0YW5jZSBtYXRjaGVzIGFuIGV4Y2VwdGlvbiB0aHJv
d24gYnkgaXRzZWxmLCBldmVuIHdoZW4gdGhlCisvLyBleGNlcHRpb24gaXMgcmUtdGhyb3duIGJ5
IGEgcmVndWxhciBKYXZhU2NyaXB0IGZ1bmN0aW9uLgorKGZ1bmN0aW9uIFRlc3RTaW5nbGVJbnN0
YW5jZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0
IHNpZ19pbmRleCA9IGJ1aWxkZXIuYWRkVHlwZShrU2lnX3Zfdik7CisgIGxldCBmdW4gPSBidWls
ZGVyLmFkZEltcG9ydCgibSIsICJmIiwgc2lnX2luZGV4KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2ln
X3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0CisgICAg
ICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImNhdGNoIiwga1NpZ192
X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAg
ICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGZ1biwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0
LAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGV4X29i
aiA9IG5ldyBFcnJvcigibXkgZXhjZXB0aW9uIik7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIu
aW5zdGFudGlhdGUoeyBtOiB7IGY6IGZ1bmN0aW9uKCkgeyB0aHJvdyBleF9vYmogfX19KTsKKwor
ICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvdygpLCBXZWJBc3NlbWJs
eS5FeGNlcHRpb24pOworICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UuZXhwb3J0
cy5jYXRjaCgpLCBleF9vYmopOworICB0cnkgeworICAgIGluc3RhbmNlLmV4cG9ydHMudGhyb3co
KTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGV4X29iaiA9IGU7CisgIH0KKyAgYXNzZXJ0RG9lc05v
dFRocm93KCgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2goKSk7Cit9KSgpOworCisvLyBDaGVj
ayB0aGF0IHR3byBpbnN0YW5jZXMgZGlzdGluZ3Vpc2ggdGhlaXIgaW5kaXZpZHVhbCBleGNlcHRp
b25zIGlmIHRoZXkgYXJlCisvLyBub3Qgc2hhcmVkLCBldmVuIHdoZW4gZGVjbGFyZWQgYnkgdGhl
IHNhbWUgdW5kZXJseWluZyBtb2R1bGUuCisoZnVuY3Rpb24gVGVzdE11bHRpSW5zdGFuY2VOb25T
aGFyZWQoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxl
dCBzaWdfaW5kZXggPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X3YpOworICBsZXQgZnVuID0gYnVp
bGRlci5hZGRJbXBvcnQoIm0iLCAiZiIsIHNpZ19pbmRleCk7CisgIGxldCBleGNlcHQgPSBidWls
ZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93Iiwga1Np
Z192X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdAorICAg
ICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaCIsIGtTaWdf
dl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAg
ICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBmdW4sCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2Vw
dCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBleF9v
YmogPSBuZXcgRXJyb3IoIm15IGV4Y2VwdGlvbiIpOworICBsZXQgaW5zdGFuY2UxID0gYnVpbGRl
ci5pbnN0YW50aWF0ZSh7IG06IHsgZjogYXNzZXJ0VW5yZWFjaGFibGUgfX0pOworICBsZXQgaW5z
dGFuY2UyID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7IG06IHsgZjogZnVuY3Rpb24oKSB7IHRocm93
IGV4X29iaiB9fX0pOworCisgIGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZTEuZXhwb3J0cy50
aHJvdygpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkg
PT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2goKSwgZXhfb2JqKTsKKyAgdHJ5IHsKKyAgICBpbnN0
YW5jZTEuZXhwb3J0cy50aHJvdygpOworICB9IGNhdGNoIChlKSB7CisgICAgZXhfb2JqID0gZTsK
KyAgfQorICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2go
KSwgZXhfb2JqKTsKK30pKCk7CisKKy8vIENoZWNrIHRoYXQgdHdvIGluc3RhbmNlcyBtYXRjaCB0
aGVpciBleGNlcHRpb25zIGlmIHRoZXkgYXJlIHNoYXJlZCBwcm9wZXJseSwKKy8vIGV2ZW4gaWYg
dGhlIGxvY2FsIGV4Y2VwdGlvbiBpbmRleCBvZiBleHBvcnQgYW5kIGltcG9ydCBpcyBkaWZmZXJl
bnQuCisoZnVuY3Rpb24gVGVzdE11bHRpSW5zdGFuY2VTaGFyZWQoKSB7CisgIGxldCBidWlsZGVy
ID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBzaWdfaW5kZXggPSBidWlsZGVyLmFk
ZFR5cGUoa1NpZ192X3YpOworICBsZXQgZnVuID0gYnVpbGRlci5hZGRJbXBvcnQoIm0iLCAiZiIs
IHNpZ19pbmRleCk7CisgIGxldCBleGNlcHQxID0gYnVpbGRlci5hZGRJbXBvcnRlZFRhZygibSIs
ICJleDEiLCBrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1NpZ192
X3YpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgyIiwga0V4dGVybmFsVGFnLCBleGNl
cHQyKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfdikKKyAgICAgIC5h
ZGRCb2R5KFsKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MgorICAgICAgXSkuZXhwb3J0RnVu
YygpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaCIsIGtTaWdfdl92KQorICAgICAgLmFk
ZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByQ2Fs
bEZ1bmN0aW9uLCBmdW4sCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdDEsCisgICAgICAgIGtF
eHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgZXhfb2JqID0gbmV3IEVycm9y
KCJteSBleGNlcHRpb24iKTsKKyAgbGV0IGluc3RhbmNlMSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUo
eyBtOiB7IGY6IGFzc2VydFVucmVhY2hhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXgxOiBOZXdFeHBvcnRlZEV4Y2VwdGlvbigpIH19KTsKKyAgbGV0
IGluc3RhbmNlMiA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoeyBtOiB7IGY6IGZ1bmN0aW9uKCkgeyB0
aHJvdyBleF9vYmogfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4MTogaW5zdGFuY2UxLmV4cG9ydHMuZXgyIH19KTsKKworICBhc3NlcnRUaHJvd3MoKCkg
PT4gaW5zdGFuY2UxLmV4cG9ydHMudGhyb3coKSwgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKTsKKyAg
YXNzZXJ0VGhyb3dzRXF1YWxzKCgpID0+IGluc3RhbmNlMi5leHBvcnRzLmNhdGNoKCksIGV4X29i
aik7CisgIHRyeSB7CisgICAgaW5zdGFuY2UxLmV4cG9ydHMudGhyb3coKTsKKyAgfSBjYXRjaCAo
ZSkgeworICAgIGV4X29iaiA9IGU7CisgIH0KKyAgYXNzZXJ0RG9lc05vdFRocm93KCgpID0+IGlu
c3RhbmNlMi5leHBvcnRzLmNhdGNoKCkpOworfSkoKTsKKworLy8gQ2hlY2sgdGhhdCB0d28gaW5z
dGFuY2VzIGJhc2VkIG9uIGRpZmZlcmVudCBtb2R1bGVzIG1hdGNoIHRoZWlyIGV4Y2VwdGlvbnMg
aWYKKy8vIHRoZXkgYXJlIHNoYXJlZCBwcm9wZXJseSwgZXZlbiBpZiB0aGUgbG9jYWwgZXhjZXB0
aW9uIGluZGV4IGlzIGRpZmZlcmVudC4KKyhmdW5jdGlvbiBUZXN0TXVsdGlNb2R1bGVTaGFyZWQo
KSB7CisgIGxldCBidWlsZGVyMSA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhj
ZXB0MSA9IGJ1aWxkZXIxLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNlcHQyID0gYnVpbGRl
cjEuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlcjEuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtF
eHRlcm5hbFRhZywgZXhjZXB0Mik7CisgIGJ1aWxkZXIxLmFkZEZ1bmN0aW9uKCJ0aHJvdyIsIGtT
aWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRocm93LCBleGNlcHQyCisg
ICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBidWlsZGVyMiA9IG5ldyBXYXNtTW9kdWxlQnVp
bGRlcigpOworICBsZXQgc2lnX2luZGV4ID0gYnVpbGRlcjIuYWRkVHlwZShrU2lnX3Zfdik7Cisg
IGxldCBmdW4gPSBidWlsZGVyMi5hZGRJbXBvcnQoIm0iLCAiZiIsIHNpZ19pbmRleCk7CisgIGxl
dCBleGNlcHQgPSBidWlsZGVyMi5hZGRJbXBvcnRlZFRhZygibSIsICJleCIsIGtTaWdfdl92KTsK
KyAgYnVpbGRlcjIuYWRkRnVuY3Rpb24oImNhdGNoIiwga1NpZ192X3YpCisgICAgICAuYWRkQm9k
eShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAga0V4cHJDYWxsRnVu
Y3Rpb24sIGZ1biwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwckVu
ZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGV4X29iaiA9IG5ldyBFcnJvcigibXkg
ZXhjZXB0aW9uIik7CisgIGxldCBpbnN0YW5jZTEgPSBidWlsZGVyMS5pbnN0YW50aWF0ZSgpOwor
ICBsZXQgaW5zdGFuY2UyID0gYnVpbGRlcjIuaW5zdGFudGlhdGUoeyBtOiB7IGY6IGZ1bmN0aW9u
KCkgeyB0aHJvdyBleF9vYmogfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleDogaW5zdGFuY2UxLmV4cG9ydHMuZXggfX0pOworCisgIGFzc2VydFRocm93
cygoKSA9PiBpbnN0YW5jZTEuZXhwb3J0cy50aHJvdygpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24p
OworICBhc3NlcnRUaHJvd3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2goKSwg
ZXhfb2JqKTsKKyAgdHJ5IHsKKyAgICBpbnN0YW5jZTEuZXhwb3J0cy50aHJvdygpOworICB9IGNh
dGNoIChlKSB7CisgICAgZXhfb2JqID0gZTsKKyAgfQorICBhc3NlcnREb2VzTm90VGhyb3coKCkg
PT4gaW5zdGFuY2UyLmV4cG9ydHMuY2F0Y2goKSk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy93YXNtL3Y4L2V4Y2VwdGlvbnMtdHlwZS1yZWZsZWN0aW9uLmpzIGIvSlNUZXN0cy93YXNtL3Y4
L2V4Y2VwdGlvbnMtdHlwZS1yZWZsZWN0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0YzIwZWRhZThlMDIz
NWFiZjdjMmUxOWViYzcxODBmYWIwOGNmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dh
c20vdjgvZXhjZXB0aW9ucy10eXBlLXJlZmxlY3Rpb24uanMKQEAgLTAsMCArMSw0NyBAQAorLy8g
Q29weXJpZ2h0IDIwMjEgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8v
IEZsYWdzOiAtLWV4cGVyaW1lbnRhbC13YXNtLWVoIC0tZXhwZXJpbWVudGFsLXdhc20tdHlwZS1y
ZWZsZWN0aW9uCisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsKKworbGV0IHRlc3Rj
YXNlcyA9IFsKK3t0eXBlczoge3BhcmFtZXRlcnM6W119LCBzaWc6IGtTaWdfdl92fSwKK3t0eXBl
czoge3BhcmFtZXRlcnM6WyJpMzIiXX0sIHNpZzoga1NpZ192X2l9LAore3R5cGVzOiB7cGFyYW1l
dGVyczpbImk2NCJdfSwgc2lnOiBrU2lnX3ZfbH0sCit7dHlwZXM6IHtwYXJhbWV0ZXJzOlsiZjY0
IiwgImY2NCIsICJpMzIiXX0sIHNpZzoga1NpZ192X2RkaX0sCit7dHlwZXM6IHtwYXJhbWV0ZXJz
OlsiZjMyIl19LCBzaWc6IGtTaWdfdl9mfSwKK107CisKKyhmdW5jdGlvbiBUZXN0RXhwb3J0KCkg
eworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworCisgIHRlc3RjYXNl
cy5mb3JFYWNoKGZ1bmN0aW9uKGV4cGVjdGVkLCBpKSB7CisgICAgbGV0IGV4Y2VwdCA9IGJ1aWxk
ZXIuYWRkVGFnKGV4cGVjdGVkLnNpZyk7CisgICAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4
IiArIGksIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgfSk7CisKKyAgbGV0IGluc3RhbmNlID0g
YnVpbGRlci5pbnN0YW50aWF0ZSgpOworICB0ZXN0Y2FzZXMuZm9yRWFjaChmdW5jdGlvbihleHBl
Y3RlZCwgaSkgeworICAgIGFzc2VydEVxdWFscyhpbnN0YW5jZS5leHBvcnRzWyJleCIgKyBpXS50
eXBlKCksIGV4cGVjdGVkLnR5cGVzKTsKKyAgfSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdElt
cG9ydEV4cG9ydCgpIHsKKworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigp
OworICBsZXQgaW1wb3J0cyA9IHttOiB7fX07CisKKyAgdGVzdGNhc2VzLmZvckVhY2goZnVuY3Rp
b24oZXhwZWN0ZWQsIGkpIHsKKyAgICBsZXQgdCA9IG5ldyBXZWJBc3NlbWJseS5UYWcoZXhwZWN0
ZWQudHlwZXMpOworICAgIGxldCBpbmRleCA9IGJ1aWxkZXIuYWRkSW1wb3J0ZWRUYWcoIm0iLCAi
ZXgiICsgaSwgZXhwZWN0ZWQuc2lnKTsKKyAgICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgi
ICsgaSwga0V4dGVybmFsVGFnLCBpbmRleCk7CisgICAgaW1wb3J0cy5tWyJleCIgKyBpXSA9IHQ7
CisgIH0pOworCisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoaW1wb3J0cyk7
CisgIHRlc3RjYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGV4cGVjdGVkLCBpKSB7CisgICAgYXNzZXJ0
RXF1YWxzKGluc3RhbmNlLmV4cG9ydHNbImV4IiArIGldLnR5cGUoKSwgZXhwZWN0ZWQudHlwZXMp
OworICB9KQorfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXV0
aWxzLmpzIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMtdXRpbHMuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGJlMTkxOWRlZTY4MDMyM2NlYjA5Mzk2NGZlNjFhOTVmMDZkZTY5NwotLS0gL2Rldi9udWxsCisr
KyBiL0pTVGVzdHMvd2FzbS92OC9leGNlcHRpb25zLXV0aWxzLmpzCkBAIC0wLDAgKzEsMjcgQEAK
Ky8vIENvcHlyaWdodCAyMDE4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
CisvLyBGbGFnczogLS1hbGxvdy1uYXRpdmVzLXN5bnRheAorCisvLyBUaGlzIGZpbGUgaXMgaW50
ZW5kZWQgdG8gYmUgbG9hZGVkIGJ5IG90aGVyIHRlc3RzIHRvIHByb3ZpZGUgdXRpbGl0eSBtZXRo
b2RzCisvLyByZXF1aXJpbmcgbmF0aXZlcyBzeW50YXggKGFuZCBoZW5jZSBub3Qgc3VpdGVkIGZv
ciB0aGUgbWpzdW5pdC5qcyBmaWxlKS4KKworZnVuY3Rpb24gYXNzZXJ0V2FzbVRocm93cyhpbnN0
YW5jZSwgdGFnLCB2YWx1ZXMsIGNvZGUpIHsKKyAgdHJ5IHsKKyAgICBpZiAodHlwZW9mIGNvZGUg
PT09ICdmdW5jdGlvbicpIHsKKyAgICAgIGNvZGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgZXZh
bChjb2RlKTsKKyAgICB9CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBhc3NlcnRJbnN0YW5jZW9mKGUs
IFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgICAgYXNzZXJ0VHJ1ZShlLmlzKHRhZykpOworICAg
IGFzc2VydEVxdWFscyh2YWx1ZXMubGVuZ3RoLCB0YWcudHlwZSgpLnBhcmFtZXRlcnMubGVuZ3Ro
KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7ICsraSkKKyAgICAgIGFz
c2VydEVxdWFscyh2YWx1ZXNbaV0sIGUuZ2V0QXJnKHRhZywgaSkpOworICAgIHJldHVybjsgIC8v
IFN1Y2Nlc3MuCisgIH0KKyAgdGhyb3cgbmV3IE1qc1VuaXRBc3NlcnRpb25FcnJvcignRGlkIG5v
dCB0aHJvdyBleHBlY3RlZCA8JyArIHRhZyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJz4gd2l0aCB2YWx1ZXM6ICcgKyB2YWx1ZXMpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy93YXNtL3Y4L2V4Y2VwdGlvbnMuanMgYi9KU1Rlc3RzL3dhc20vdjgvZXhjZXB0aW9ucy5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43OTE1NTA0NTA0OTg4MTczMDdkMjk0NzUwMmFiMmFmYmMwNGM2MmE0Ci0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3Y4L2V4Y2VwdGlvbnMuanMKQEAgLTAsMCArMSwx
MDg3IEBACisvLyBDb3B5cmlnaHQgMjAxOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKworLy8gRmxhZ3M6IC0tZXhwb3NlLXdhc20gLS1leHBlcmltZW50YWwtd2FzbS1laCAt
LWFsbG93LW5hdGl2ZXMtc3ludGF4CisKK2xvYWQoIndhc20tbW9kdWxlLWJ1aWxkZXIuanMiKTsK
K2xvYWQoImV4Y2VwdGlvbnMtdXRpbHMuanMiKTsKKworLy8gVGhlIGZvbGxvd2luZyBtZXRob2Qg
ZG9lc24ndCBhdHRlbXB0IHRvIGNhdGNoIGFuIHJhaXNlZCBleGNlcHRpb24uCisoZnVuY3Rpb24g
VGVzdFRocm93U2ltcGxlKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJ0aHJvd19pZl9wYXJhbV9ub3RfemVybyIsIGtTaWdfaV9pKQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhwckkzMkNv
bnN0LCAwLAorICAgICAgICBrRXhwckkzMk5lLAorICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQs
CisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICBrRXhwckVuZCwKKyAgICAg
ICAga0V4cHJJMzJDb25zdCwgMQorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFk
ZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5j
ZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2Uu
ZXhwb3J0cy50aHJvd19pZl9wYXJhbV9ub3RfemVybygwKSk7CisgIGFzc2VydFdhc21UaHJvd3Mo
aW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRz
LnRocm93X2lmX3BhcmFtX25vdF96ZXJvKDEwKSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFu
Y2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFtdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93
X2lmX3BhcmFtX25vdF96ZXJvKC0xKSk7Cit9KSgpOworCisvLyBUZXN0IHRoYXQgZW1wdHkgdHJ5
L2NhdGNoIGJsb2NrcyB3b3JrLgorKGZ1bmN0aW9uIFRlc3RDYXRjaEVtcHR5QmxvY2tzKCkgewor
ICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0g
YnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJjYXRjaF9l
bXB0eV90cnkiLCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnks
IGtXYXNtVm9pZCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwckVu
ZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0
YW50aWF0ZSgpOworCisgIGFzc2VydERvZXNOb3RUaHJvdyhpbnN0YW5jZS5leHBvcnRzLmNhdGNo
X2VtcHR5X3RyeSk7Cit9KSgpOworCisvLyBOb3cgdGhhdCB3ZSBrbm93IHRocm93aW5nIHdvcmtz
LCB3ZSB0ZXN0IGNhdGNoaW5nIHRoZSBleGNlcHRpb25zIHdlIHJhaXNlLgorKGZ1bmN0aW9uIFRl
c3RDYXRjaFNpbXBsZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIo
KTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5h
ZGRGdW5jdGlvbigic2ltcGxlX3Rocm93X2NhdGNoX3RvXzBfMSIsIGtTaWdfaV9pKQorICAgICAg
LmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJM
b2NhbEdldCwgMCwKKyAgICAgICAgICBrRXhwckkzMkVxeiwKKyAgICAgICAgICBrRXhwcklmLCBr
V2FzbVZvaWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4
cHJFbmQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgNDIsCisgICAgICAgIGtFeHByQ2F0Y2gs
IGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyMywKKyAgICAgICAga0V4cHJFbmQK
KyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50
aWF0ZSgpOworCisgIGFzc2VydEVxdWFscygyMywgaW5zdGFuY2UuZXhwb3J0cy5zaW1wbGVfdGhy
b3dfY2F0Y2hfdG9fMF8xKDApKTsKKyAgYXNzZXJ0RXF1YWxzKDQyLCBpbnN0YW5jZS5leHBvcnRz
LnNpbXBsZV90aHJvd19jYXRjaF90b18wXzEoMSkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RU
cmFwTm90Q2F1Z2h0KCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigp
OworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd1bnJlYWNoYWJsZV9pbl90cnknLCBrU2lnX3ZfdikK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAg
ICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICBrRXhw
ckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmlu
c3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0VHJhcHMoa1RyYXBVbnJlYWNoYWJsZSwgKCkgPT4gaW5z
dGFuY2UuZXhwb3J0cy51bnJlYWNoYWJsZV9pbl90cnkoKSk7Cit9KSgpOworCisoZnVuY3Rpb24g
VGVzdFRyYXBJbkNhbGxlZU5vdENhdWdodCgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1v
ZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGZ1bmNfZGl2ID0gYnVpbGRlci5hZGRGdW5jdGlvbignZGl2
Jywga1NpZ19pX2lpKS5hZGRCb2R5KFsKKyAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgIGtFeHBy
TG9jYWxHZXQsIDEsCisgICAga0V4cHJJMzJEaXZVCisgIF0pOworICBidWlsZGVyLmFkZEZ1bmN0
aW9uKCd0cmFwX2luX2NhbGxlZScsIGtTaWdfaV9paSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAg
ICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAg
ICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgZnVu
Y19kaXYuaW5kZXgsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJJMzJD
b25zdCwgMTEsCisgICAgICAgIGtFeHByRW5kCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxl
dCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKworICBhc3NlcnRFcXVhbHMoMywg
aW5zdGFuY2UuZXhwb3J0cy50cmFwX2luX2NhbGxlZSg3LCAyKSk7CisgIGFzc2VydFRyYXBzKGtU
cmFwRGl2QnlaZXJvLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRyYXBfaW5fY2FsbGVlKDEsIDAp
KTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0VHJhcFZpYUpTTm90Q2F1Z2h0KCkgeworICBsZXQg
YnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgaW1wID0gYnVpbGRlci5h
ZGRJbXBvcnQoJ2ltcCcsICdvcnQnLCBrU2lnX2lfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24o
J2RpdicsIGtTaWdfaV9paSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdl
dCwgMCwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAga0V4cHJJMzJEaXZVCisg
ICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ2NhbGxfaW1wb3J0
Jywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkz
MiwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgaW1wLAorICAgICAgICBrRXhwckNhdGNo
QWxsLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDExLAorICAgICAgICBrRXhwckVuZAorICAg
ICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgZXhjZXB0aW9uID0gdW5kZWZpbmVkOworICBsZXQg
aW5zdGFuY2U7CisgIGZ1bmN0aW9uIGpzX2ltcG9ydCgpIHsKKyAgICB0cnkgeworICAgICAgaW5z
dGFuY2UuZXhwb3J0cy5kaXYoMSwgMCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgZXhjZXB0
aW9uID0gZTsKKyAgICB9CisgICAgdGhyb3cgZXhjZXB0aW9uOworICB9CisgIGluc3RhbmNlID0g
YnVpbGRlci5pbnN0YW50aWF0ZSh7aW1wOiB7b3J0OiBqc19pbXBvcnR9fSk7CisKKyAgbGV0IGNh
dWdodCA9IHVuZGVmaW5lZDsKKyAgdHJ5IHsKKyAgICBsZXQgcmVzID0gaW5zdGFuY2UuZXhwb3J0
cy5jYWxsX2ltcG9ydCgpOworICAgIGFzc2VydFVucmVhY2hhYmxlKCdjYWxsX2ltcG9ydCBzaG91
bGQgdHJhcCwgYnV0IHJldHVybmVkIHdpdGggJyArIHJlcyk7CisgIH0gY2F0Y2ggKGUpIHsKKyAg
ICBjYXVnaHQgPSBlOworICB9CisgIGFzc2VydFNhbWUoZXhjZXB0aW9uLCBjYXVnaHQpOworICBh
c3NlcnRUaHJvd3MoaW5zdGFuY2UuZXhwb3J0cy5jYWxsX2ltcG9ydCwgV2ViQXNzZW1ibHkuUnVu
dGltZUVycm9yLCBrVHJhcE1zZ3Nba1RyYXBEaXZCeVplcm9dKTsKK30pKCk7CisKKyhmdW5jdGlv
biBUZXN0TWFudWFsbHlUaHJvd25SdW50aW1lRXJyb3JDYXVnaHQoKSB7CisgIGxldCBidWlsZGVy
ID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBpbXAgPSBidWlsZGVyLmFkZEltcG9y
dCgnaW1wJywgJ29ydCcsIGtTaWdfaV92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbignY2FsbF9p
bXBvcnQnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtX
YXNtSTMyLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBpbXAsCisgICAgICAgIGtFeHBy
Q2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMTEsCisgICAgICAgIGtFeHByRW5k
CisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGZ1bmN0aW9uIHRocm93X2V4YygpIHsKKyAgICB0
aHJvdyBuZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKCdNeSB1c2VyIHRleHQnKTsKKyAgfQor
ICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHtpbXA6IHtvcnQ6IHRocm93X2V4
Y319KTsKKworICBhc3NlcnRFcXVhbHMoMTEsIGluc3RhbmNlLmV4cG9ydHMuY2FsbF9pbXBvcnQo
KSk7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdEV4bldpdGhXYXNtUHJvdG9Ob3RDYXVnaHQoKSB7
CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQg
PSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBpbXAgPSBidWlsZGVyLmFkZEltcG9y
dCgnaW1wJywgJ29ydCcsIGtTaWdfdl92KTsKKyAgbGV0IHRocm93X2ZuID0gYnVpbGRlci5hZGRG
dW5jdGlvbigndGhyb3cnLCBrU2lnX3ZfdikKKyAgICAgICAgICAgICAgICAgICAgIC5hZGRCb2R5
KFtrRXhwclRocm93LCBleGNlcHRdKQorICAgICAgICAgICAgICAgICAgICAgLmV4cG9ydEZ1bmMo
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfdl92KQorICAgICAgLmFkZEJv
ZHkoWworICAgICAgICAvLyBDYWxsaW5nICJ0aHJvdyIgZGlyZWN0bHkgc2hvdWxkIHByb2R1Y2Ug
dGhlIGV4cGVjdGVkIGV4Y2VwdGlvbi4KKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAg
ICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgdGhyb3dfZm4uaW5kZXgsCisgICAgICAgIGtFeHBy
Q2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICAgIC8vIENhbGxpbmcgdGhy
b3VnaCBKUyBwcm9kdWNlcyBhIHdyYXBwZWQgZXhjZXB0aW9ucyB3aGljaCBkb2VzIG5vdCBtYXRj
aAorICAgICAgICAvLyB0aGUgY2F0Y2guCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisg
ICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGltcCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhj
ZXB0LAorICAgICAgICBrRXhwckVuZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQgaW5z
dGFuY2U7CisgIGxldCB3cmFwcGVkX2V4bjsKKyAgZnVuY3Rpb24ganNfaW1wb3J0KCkgeworICAg
IHRyeSB7CisgICAgICBpbnN0YW5jZS5leHBvcnRzLnRocm93KCk7CisgICAgfSBjYXRjaCAoZSkg
eworICAgICAgd3JhcHBlZF9leG4gPSBuZXcgRXJyb3IoKTsKKyAgICAgIHdyYXBwZWRfZXhuLl9f
cHJvdG9fXyA9IGU7CisgICAgICB0aHJvdyB3cmFwcGVkX2V4bjsKKyAgICB9CisgIH0KKyAgaW5z
dGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKHtpbXA6IHtvcnQ6IGpzX2ltcG9ydH19KTsKKyAg
bGV0IGNhdWdodCA9IHVuZGVmaW5lZDsKKyAgdHJ5IHsKKyAgICBpbnN0YW5jZS5leHBvcnRzLnRl
c3QoKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGNhdWdodCA9IGU7CisgIH0KKyAgYXNzZXJ0VHJ1
ZSghIWNhdWdodCwgJ3Nob3VsZCBoYXZlIHRyYXBwZWQnKTsKKyAgYXNzZXJ0RXF1YWxzKGNhdWdo
dCwgd3JhcHBlZF9leG4pOworICBhc3NlcnRJbnN0YW5jZW9mKGNhdWdodC5fX3Byb3RvX18sIFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9KSgpOworCisoZnVuY3Rpb24gVGVzdFN0YWNrT3ZlcmZs
b3dOb3RDYXVnaHQoKSB7CisgIGZ1bmN0aW9uIHN0YWNrX292ZXJmbG93KCkgeworICAgIC8vJVRo
cm93U3RhY2tPdmVyZmxvdygpOworICB9CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVC
dWlsZGVyKCk7CisgIGxldCBzaWdfdl92ID0gYnVpbGRlci5hZGRUeXBlKGtTaWdfdl92KTsKKyAg
bGV0IGtTdGFja092ZXJmbG93ID0gYnVpbGRlci5hZGRJbXBvcnQoJycsICdzdGFja19vdmVyZmxv
dycsIHNpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0cnlfc3RhY2tfb3ZlcmZsb3cn
LCBrU2lnX3ZfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9p
ZCwKKyAgICAgICAgICBrRXhwckNhbGxGdW5jdGlvbiwgMCwKKyAgICAgICAga0V4cHJDYXRjaEFs
bCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgbGV0IGluc3Rh
bmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSh7Jyc6IHsnc3RhY2tfb3ZlcmZsb3cnOiBzdGFja19v
dmVyZmxvd319KTsKKworICBhc3NlcnRUaHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50cnlf
c3RhY2tfb3ZlcmZsb3coKSwKKyAgICAgIFJhbmdlRXJyb3IsICdNYXhpbXVtIGNhbGwgc3RhY2sg
c2l6ZSBleGNlZWRlZCcpOworfSk7CisvLyBGSVhNRTogbmVlZHMgc3RhY2sgb3ZlcmZsb3cgaGVs
cGVyCisvLygpOworCisvLyBUZXN0IHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHdoaWNoIGV4Y2Vw
dGlvbiB3YXMgdGhyb3duIGJ5IHVzaW5nIGEgY2FzY2FkZWQKKy8vIHNlcXVlbmNlIG9mIG5lc3Rl
ZCB0cnkgYmxvY2tzIHdpdGggYSBzaW5nbGUgY2F0Y2ggYmxvY2sgZWFjaC4KKyhmdW5jdGlvbiBU
ZXN0Q2F0Y2hDb21wbGV4MSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxk
ZXIoKTsKKyAgbGV0IGV4Y2VwdDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBl
eGNlcHQyID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBsZXQgZXhjZXB0MyA9IGJ1aWxk
ZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigiY2F0Y2hfY29tcGxl
eCIsIGtTaWdfaV9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21J
MzIsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJMb2Nh
bEdldCwgMCwKKyAgICAgICAgICAgIGtFeHBySTMyRXF6LAorICAgICAgICAgICAga0V4cHJJZiwg
a1dhc21Wb2lkLAorICAgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQxLAorICAgICAgICAg
ICAga0V4cHJFbHNlLAorICAgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAg
ICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgICAgICBrRXhwckkzMkVxLAorICAgICAg
ICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgICAga0V4cHJUaHJvdywg
ZXhjZXB0MiwKKyAgICAgICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAgICAgIGtFeHBy
VGhyb3csIGV4Y2VwdDMsCisgICAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAga0V4
cHJFbmQsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICAgIGtFeHByQ2F0
Y2gsIGV4Y2VwdDEsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAzLAorICAgICAgICAgIGtF
eHByRW5kLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQyLAorICAgICAgICAgIGtFeHBySTMy
Q29uc3QsIDQsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBi
dWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDMpOworICBs
ZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDMs
IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hfY29tcGxleCgwKSk7CisgIGFzc2VydEVxdWFscyg0LCBp
bnN0YW5jZS5leHBvcnRzLmNhdGNoX2NvbXBsZXgoMSkpOworICBhc3NlcnRXYXNtVGhyb3dzKGlu
c3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5j
YXRjaF9jb21wbGV4KDIpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhhdCB3ZSBjYW4gZGlzdGluZ3Vp
c2ggd2hpY2ggZXhjZXB0aW9uIHdhcyB0aHJvd24gYnkgdXNpbmcgYSBzaW5nbGUKKy8vIHRyeSBi
bG9jayB3aXRoIG11bHRpcGxlIGFzc29jaWF0ZWQgY2F0Y2ggYmxvY2tzIGluIHNlcXVlbmNlLgor
KGZ1bmN0aW9uIFRlc3RDYXRjaENvbXBsZXgyKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNt
TW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92
KTsKKyAgbGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCBleGNl
cHQzID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X3YpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJj
YXRjaF9jb21wbGV4Iiwga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBy
VHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtF
eHBySTMyRXF6LAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtF
eHByVGhyb3csIGV4Y2VwdDEsCisgICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAga0V4
cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAg
ICBrRXhwckkzMkVxLAorICAgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAg
ICAgICBrRXhwclRocm93LCBleGNlcHQyLAorICAgICAgICAgICAga0V4cHJFbHNlLAorICAgICAg
ICAgICAgICBrRXhwclRocm93LCBleGNlcHQzLAorICAgICAgICAgICAga0V4cHJFbmQsCisgICAg
ICAgICAga0V4cHJFbmQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4
cHJDYXRjaCwgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAzLAorICAgICAgICBr
RXhwckNhdGNoLCBleGNlcHQyLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDQsCisgICAgICAg
IGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9m
S2luZCgiZXgiLCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdDMpOworICBsZXQgaW5zdGFuY2UgPSBidWls
ZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDMsIGluc3RhbmNlLmV4cG9ydHMu
Y2F0Y2hfY29tcGxleCgwKSk7CisgIGFzc2VydEVxdWFscyg0LCBpbnN0YW5jZS5leHBvcnRzLmNh
dGNoX2NvbXBsZXgoMSkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5l
eHBvcnRzLmV4LCBbXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5jYXRjaF9jb21wbGV4KDIpKTsK
K30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIHdpdGggbXVsdGlwbGUgdmFs
dWVzLgorKGZ1bmN0aW9uIFRlc3RUaHJvd011bHRpcGxlVmFsdWVzKCkgeworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRU
YWcoa1NpZ192X2lpKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfMV8yIiwga1NpZ192
X3YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAg
IGtFeHBySTMyQ29uc3QsIDIsCisgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgIF0p
LmV4cG9ydEZ1bmMoKTsKKyAgYnVpbGRlci5hZGRFeHBvcnRPZktpbmQoImV4Iiwga0V4dGVybmFs
VGFnLCBleGNlcHQpOworICBsZXQgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisK
KyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzEsIDJd
LCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93XzFfMigpKTsKK30pKCk7CisKKy8vIFRlc3Qg
dGhyb3dpbmcvY2F0Y2hpbmcgdGhlIGkzMiBwYXJhbWV0ZXIgdmFsdWUuCisoZnVuY3Rpb24gVGVz
dFRocm93Q2F0Y2hQYXJhbUkoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWls
ZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfaSk7CisgIGJ1aWxk
ZXIuYWRkRnVuY3Rpb24oInRocm93X2NhdGNoX3BhcmFtIiwga1NpZ19pX2kpCisgICAgICAuYWRk
Qm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwckxvY2Fs
R2V0LCAwLAorICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckkz
MkNvbnN0LCAyLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAga0V4cHJS
ZXR1cm4sCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBsZXQg
aW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7CisKKyAgYXNzZXJ0RXF1YWxzKDAsIGlu
c3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oMCkpOworICBhc3NlcnRFcXVhbHMoMSwg
aW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgxKSk7CisgIGFzc2VydEVxdWFscygx
MCwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9wYXJhbSgxMCkpOworfSkoKTsKKworLy8g
VGVzdCB0aGUgZW5jb2Rpbmcgb2YgYSB0aHJvd24gZXhjZXB0aW9uIHdpdGggYW4gaW50ZWdlciBl
eGNlcHRpb24uCisoZnVuY3Rpb24gVGVzdFRocm93UGFyYW1JKCkgeworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWco
a1NpZ192X2kpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19wYXJhbSIsIGtTaWdfdl9p
KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBr
RXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRk
RXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNl
ID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2Us
IGluc3RhbmNlLmV4cG9ydHMuZXgsIFs1XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19w
YXJhbSg1KSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMu
ZXgsIFs0MjQyNDJdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDQyNDI0Mikp
OworfSkoKTsKKworLy8gVGVzdCB0aHJvd2luZy9jYXRjaGluZyB0aGUgZjMyIHBhcmFtZXRlciB2
YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dDYXRjaFBhcmFtRigpIHsKKyAgbGV0IGJ1aWxkZXIg
PSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFn
KGtTaWdfdl9mKTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3dfY2F0Y2hfcGFyYW0iLCBr
U2lnX2ZfZikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtRjMyLAor
ICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0
LAorICAgICAgICAgIGtFeHByRjMyQ29uc3QsIDAsIDAsIDAsIDAsCisgICAgICAgIGtFeHByQ2F0
Y2gsIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclJldHVybiwKKyAgICAgICAga0V4cHJFbmQsCisg
ICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlh
dGUoKTsKKworICBhc3NlcnRFcXVhbHMoNS4wLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNo
X3BhcmFtKDUuMCkpOworICBhc3NlcnRFcXVhbHMoMTAuNSwgaW5zdGFuY2UuZXhwb3J0cy50aHJv
d19jYXRjaF9wYXJhbSgxMC41KSk7Cit9KSgpOworCisvLyBUZXN0IHRoZSBlbmNvZGluZyBvZiBh
IHRocm93biBleGNlcHRpb24gd2l0aCBhIGZsb2F0IHZhbHVlLgorKGZ1bmN0aW9uIFRlc3RUaHJv
d1BhcmFtRigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAg
bGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl9mKTsKKyAgYnVpbGRlci5hZGRGdW5j
dGlvbigidGhyb3dfcGFyYW0iLCBrU2lnX3ZfZikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAg
a0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgXSku
ZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgiLCBrRXh0ZXJuYWxU
YWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKwor
ICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRzLmV4LCBbNS4wXSwg
KCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSg1LjApKTsKKyAgYXNzZXJ0V2FzbVRo
cm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzEwLjVdLCAoKSA9PiBpbnN0YW5j
ZS5leHBvcnRzLnRocm93X3BhcmFtKDEwLjUpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhyb3dpbmcv
Y2F0Y2hpbmcgYW4gSTY0IHZhbHVlCisoZnVuY3Rpb24gVGVzdFRocm93Q2F0Y2hQYXJhbUwoKSB7
CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQg
PSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfbCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93
X2NhdGNoX3BhcmFtIiwga1NpZ19pX2kpCisgICAgICAuYWRkTG9jYWxzKGtXYXNtSTY0LCAxKQor
ICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICBrRXhw
ckk2NFVDb252ZXJ0STMyLAorICAgICAgICBrRXhwckxvY2FsU2V0LCAxLAorICAgICAgICBrRXhw
clRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMSwKKyAgICAgICAgICBr
RXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAg
a0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAg
ICAga0V4cHJJNjRFcSwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbUkzMiwKKyAgICAgICAgICAg
IGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAga0V4cHJFbHNlLAorICAgICAgICAgICAga0V4
cHJJMzJDb25zdCwgMCwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJFbmQsCisg
ICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlh
dGUoKTsKKworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50aHJvd19jYXRjaF9w
YXJhbSg1KSk7CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNo
X3BhcmFtKDApKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0
Y2hfcGFyYW0oLTEpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3du
IGV4Y2VwdGlvbiB3aXRoIGFuIEk2NCB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dQYXJhbUwo
KSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNl
cHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3ZfbCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRo
cm93X3BhcmFtIiwga1NpZ192X2lpKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckxv
Y2FsR2V0LCAwLAorICAgICAgICBrRXhwckk2NFVDb252ZXJ0STMyLAorICAgICAgICBrRXhwckk2
NENvbnN0LCAzMiwKKyAgICAgICAga0V4cHJJNjRTaGwsCisgICAgICAgIGtFeHByTG9jYWxHZXQs
IDEsCisgICAgICAgIGtFeHBySTY0VUNvbnZlcnRJMzIsCisgICAgICAgIGtFeHBySTY0SW9yLAor
ICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICBdKS5leHBvcnRGdW5jKCk7CisgIGJ1
aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0
IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3Mo
aW5zdGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFs0Mjk0OTY3Mjk2NW5dLCAoKSA9PiBpbnN0
YW5jZS5leHBvcnRzLnRocm93X3BhcmFtKDEwLCA1KSk7CisgIGFzc2VydFdhc21UaHJvd3MoaW5z
dGFuY2UsIGluc3RhbmNlLmV4cG9ydHMuZXgsIFstNDI5NDk2NzI4M25dLCAoKSA9PiBpbnN0YW5j
ZS5leHBvcnRzLnRocm93X3BhcmFtKC0xLCAxMykpOworfSkoKTsKKworLy8gVGVzdCB0aHJvd2lu
Zy9jYXRjaGluZyB0aGUgRjY0IHBhcmFtZXRlciB2YWx1ZQorKGZ1bmN0aW9uIFRlc3RUaHJvd0Nh
dGNoUGFyYW1EKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOwor
ICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1NpZ192X2QpOworICBidWlsZGVyLmFkZEZ1
bmN0aW9uKCJ0aHJvd19jYXRjaF9wYXJhbSIsIGtTaWdfZF9kKQorICAgICAgLmFkZEJvZHkoWwor
ICAgICAgICBrRXhwclRyeSwga1dhc21GNjQsCisgICAgICAgICAga0V4cHJMb2NhbEdldCwgMCwK
KyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJGNjRDb25zdCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAg
ICAgICAgIGtFeHByUmV0dXJuLAorICAgICAgICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1
bmMoKTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2Vy
dEVxdWFscyg1LjAsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfY2F0Y2hfcGFyYW0oNS4wKSk7Cisg
IGFzc2VydEVxdWFscygxMC41LCBpbnN0YW5jZS5leHBvcnRzLnRocm93X2NhdGNoX3BhcmFtKDEw
LjUpKTsKK30pKCk7CisKKy8vIFRlc3QgdGhlIGVuY29kaW5nIG9mIGEgdGhyb3duIGV4Y2VwdGlv
biB3aXRoIGFuIGY2NCB2YWx1ZS4KKyhmdW5jdGlvbiBUZXN0VGhyb3dQYXJhbUQoKSB7CisgIGxl
dCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWls
ZGVyLmFkZFRhZyhrU2lnX3ZfZCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInRocm93X3BhcmFt
Iiwga1NpZ192X2YpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAs
CisgICAgICAgIGtFeHByRjY0Q29udmVydEYzMiwKKyAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0
LAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFkZEV4cG9ydE9mS2luZCgiZXgi
LCBrRXh0ZXJuYWxUYWcsIGV4Y2VwdCk7CisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFu
dGlhdGUoKTsKKworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBpbnN0YW5jZS5leHBvcnRz
LmV4LCBbNS4wXSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSg1LjApKTsKKyAg
YXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2UuZXhwb3J0cy5leCwgWzEwMDAwMDAw
XSwgKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy50aHJvd19wYXJhbSgxMDAwMDAwMC41KSk7Cit9KSgp
OworCisvLyBUZXN0IHRoZSBlbmNvZGluZyBvZiBhIGNvbXB1dGVkIHBhcmFtZXRlciB2YWx1ZS4K
KyhmdW5jdGlvbiBUZXN0VGhyb3dQYXJhbUNvbXB1dGVkKCkgeworICBsZXQgYnVpbGRlciA9IG5l
dyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWcoa1Np
Z192X2kpOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJ0aHJvd19leHByX3dpdGhfcGFyYW1zIiwg
a1NpZ192X2RkaSkKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAgLy8gcDIgKiAocDAgKyBtaW4o
cDAsIHAxKSl8MCAtIDIwCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDIsCisgICAgICAgIGtFeHBy
TG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByTG9j
YWxHZXQsIDEsCisgICAgICAgIGtFeHByRjY0TWluLAorICAgICAgICBrRXhwckY2NEFkZCwKKyAg
ICAgICAga0V4cHJJMzJTQ29udmVydEY2NCwKKyAgICAgICAga0V4cHJJMzJNdWwsCisgICAgICAg
IGtFeHBySTMyQ29uc3QsIDIwLAorICAgICAgICBrRXhwckkzMlN1YiwKKyAgICAgICAga0V4cHJU
aHJvdywgZXhjZXB0LAorICAgICAgXSkuZXhwb3J0RnVuYygpCisgIGJ1aWxkZXIuYWRkRXhwb3J0
T2ZLaW5kKCJleCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVp
bGRlci5pbnN0YW50aWF0ZSgpOworCisgIGFzc2VydFdhc21UaHJvd3MoaW5zdGFuY2UsIGluc3Rh
bmNlLmV4cG9ydHMuZXgsIFstOF0sICgpID0+IGluc3RhbmNlLmV4cG9ydHMudGhyb3dfZXhwcl93
aXRoX3BhcmFtcygxLjUsIDIuNSwgNCkpOworICBhc3NlcnRXYXNtVGhyb3dzKGluc3RhbmNlLCBp
bnN0YW5jZS5leHBvcnRzLmV4LCBbMTJdLCAoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRocm93X2V4
cHJfd2l0aF9wYXJhbXMoNS43LCAyLjUsIDQpKTsKK30pKCk7CisKKy8vIE5vdyB0aGF0IHdlIGtu
b3cgY2F0Y2hpbmcgd29ya3MgbG9jYWxseSwgd2UgdGVzdCBjYXRjaGluZyBleGNlcHRpb25zIHRo
YXQKKy8vIGNyb3NzIGZ1bmN0aW9uIGJvdW5kYXJpZXMgYW5kL29yIHJhaXNlZCBieSBKYXZhU2Ny
aXB0LgorKGZ1bmN0aW9uIFRlc3RDYXRjaENyb3NzRnVuY3Rpb25zKCkgeworICBsZXQgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRU
YWcoa1NpZ192X2kpOworCisgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGhyb3dpbmcgZnJvbSBK
Uy4gSXQgaXMgaW1wb3J0ZWQgYnkgdGhlIFdhc20gbW9kdWxlCisgIC8vIGFzIHRocm93X2kuCisg
IGZ1bmN0aW9uIHRocm93X3ZhbHVlKHZhbHVlKSB7CisgICAgdGhyb3cgdmFsdWU7CisgIH0KKyAg
bGV0IHNpZ19pbmRleCA9IGJ1aWxkZXIuYWRkVHlwZShrU2lnX3ZfaSk7CisgIGxldCBrSlNUaHJv
d0kgPSBidWlsZGVyLmFkZEltcG9ydCgiIiwgInRocm93X2kiLCBzaWdfaW5kZXgpOworCisgIC8v
IEhlbHBlciBmdW5jdGlvbiB0aGF0IHRocm93cyBhIHN0cmluZy4gV2FzbSBzaG91bGQgbm90IGNh
dGNoIGl0LgorICBmdW5jdGlvbiB0aHJvd19zdHJpbmcoKSB7CisgICAgdGhyb3cgInVzZSB3YXNt
IjsKKyAgfQorICBzaWdfaW5kZXggPSBidWlsZGVyLmFkZFR5cGUoa1NpZ192X3YpOworICBsZXQg
a0pTVGhyb3dTdHJpbmcgPSBidWlsZGVyLmFkZEltcG9ydCgiIiwgInRocm93X3N0cmluZyIsIHNp
Z19pbmRleCk7CisKKyAgLy8gSGVscGVyIGZ1bmN0aW9uIHRoYXQgdGhyb3dzIHVuZGVmaW5lZC4g
V2FzbSBzaG91bGQgbm90IGNhdGNoIGl0LgorICBmdW5jdGlvbiB0aHJvd191bmRlZmluZWQoKSB7
CisgICAgdGhyb3cgdW5kZWZpbmVkOworICB9CisgIGxldCBrSlNUaHJvd1VuZGVmaW5lZCA9IGJ1
aWxkZXIuYWRkSW1wb3J0KCIiLCAidGhyb3dfdW5kZWZpbmVkIiwgc2lnX2luZGV4KTsKKworICAv
LyBIZWxwZXIgZnVuY3Rpb24gdGhhdCB0aHJvd3MgYW4gZnAuIFdhc20gc2hvdWxkIG5vdCBjYXRj
aCBpdC4KKyAgZnVuY3Rpb24gdGhyb3dfZnAoKSB7CisgICAgdGhyb3cgMTAuNTsKKyAgfQorICBs
ZXQga0pTVGhyb3dGUCA9IGJ1aWxkZXIuYWRkSW1wb3J0KCIiLCAidGhyb3dfZnAiLCBzaWdfaW5k
ZXgpOworCisgIC8vIEhlbHBlciBmdW5jdGlvbiB0aGF0IHRocm93cyBhIGxhcmdlIG51bWJlci4g
V2FzbSBzaG91bGQgbm90IGNhdGNoIGl0LgorICBmdW5jdGlvbiB0aHJvd19sYXJnZSgpIHsKKyAg
ICB0aHJvdyAxZSsyODsKKyAgfQorICBsZXQga0pTVGhyb3dMYXJnZSA9IGJ1aWxkZXIuYWRkSW1w
b3J0KCIiLCAidGhyb3dfbGFyZ2UiLCBzaWdfaW5kZXgpOworCisgIC8vIEhlbHBlciBmdW5jdGlv
biBmb3IgdGhyb3dpbmcgZnJvbSBXZWJBc3NlbWJseS4KKyAgbGV0IGtXYXNtVGhyb3dGdW5jdGlv
biA9CisgICAgYnVpbGRlci5hZGRGdW5jdGlvbigidGhyb3ciLCBrU2lnX3ZfaSkKKyAgICAgIC5h
ZGRCb2R5KFsKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJUaHJvdywg
ZXhjZXB0LAorICAgICAgXSkKKyAgICAgIC5pbmRleDsKKworICAvLyBTY2VuYXJpbyAxOiBUaHJv
dyBhbmQgY2F0Y2ggYXBwZWFyIG9uIHRoZSBzYW1lIGZ1bmN0aW9uLiBUaGlzIHNob3VsZAorICAv
LyBoYXBwZW4gaW4gY2FzZSBvZiBpbmxpbmluZywgZm9yIGV4YW1wbGUuCisgIGJ1aWxkZXIuYWRk
RnVuY3Rpb24oInNhbWVfc2NvcGUiLCBrU2lnX2lfaSkKKyAgICAuYWRkQm9keShbCisgICAgICBr
RXhwclRyeSwga1dhc21JMzIsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtF
eHBySTMyQ29uc3QsIDAsCisgICAgICAgIGtFeHBySTMyTmUsCisgICAgICAgIGtFeHBySWYsIGtX
YXNtVm9pZCwKKyAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByVGhy
b3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAgICBrRXhwckVu
ZCwKKyAgICAgICAga0V4cHJJMzJDb25zdCwgNjMsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQs
CisgICAgICBrRXhwckVuZAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVy
LmFkZEZ1bmN0aW9uKCJzYW1lX3Njb3BlX2lnbm9yZSIsIGtTaWdfaV9pKQorICAgIC5hZGRCb2R5
KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByTG9jYWxHZXQs
IDAsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAgICAgICAgIGtFeHByVW5yZWFj
aGFibGUsCisgICAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJFbmQsCisg
ICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInNhbWVf
c2NvcGVfbXVsdGlwbGUiLCBrU2lnX2lfaSkKKyAgICAvLyBwYXRoID0gMDsKKyAgICAvLworICAg
IC8vIHRyeSB7CisgICAgLy8gICB0cnkgeworICAgIC8vICAgICB0cnkgeworICAgIC8vICAgICAg
IGlmIChwID09IDEpCisgICAgLy8gICAgICAgICB0aHJvdyAxOworICAgIC8vICAgICAgIHBhdGgg
fD0gMgorICAgIC8vICAgICB9IGNhdGNoICh2KSB7CisgICAgLy8gICAgICAgcGF0aCB8PSB2IHwg
NDsKKyAgICAvLyAgICAgICB0aHJvdyBwYXRoOworICAgIC8vICAgICB9CisgICAgLy8gICAgIGlm
IChwID09IDIpCisgICAgLy8gICAgICAgdGhyb3cgcGF0aHw4OworICAgIC8vICAgICBwYXRoIHw9
IDE2OworICAgIC8vICAgfSBjYXRjaCAodikgeworICAgIC8vICAgICBwYXRoIHw9IHYgfCAzMjsK
KyAgICAvLyAgICAgdGhyb3cgcGF0aDsKKyAgICAvLyAgIH0KKyAgICAvLyAgIGlmIChwID09IDMp
CisgICAgLy8gICAgIHRocm93IHBhdGh8NjQ7CisgICAgLy8gICBwYXRoIHw9IDEyOAorICAgIC8v
IH0gY2F0Y2ggKHYpIHsKKyAgICAvLyAgIHBhdGggfD0gdiB8IDI1NjsKKyAgICAvLyB9CisgICAg
Ly8KKyAgICAvLyByZXR1cm4gcGF0aDsKKyAgICAvLworICAgIC8vIHAgPT0gMSAtPiBwYXRoID09
IDI5MworICAgIC8vIHAgPT0gMiAtPiBwYXRoID09IDI5OAorICAgIC8vIHAgPT0gMyAtPiBwYXRo
ID09IDMzOAorICAgIC8vIGVsc2UgICAtPiBwYXRoID09IDE0NgorICAgIC5hZGRMb2NhbHMoa1dh
c21JMzIsIDEpCisgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisg
ICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJUcnksIGtXYXNt
STMyLAorICAgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAgICBrRXhw
ckkzMkNvbnN0LCAxLAorICAgICAgICAgICAgICBrRXhwckkzMkVxLAorICAgICAgICAgICAgICBr
RXhwcklmLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAg
ICAgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAgICAgICAga0V4cHJV
bnJlYWNoYWJsZSwKKyAgICAgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDIsCisgICAgICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAg
ICAgIGtFeHBySTMyQ29uc3QsIDQsCisgICAgICAgICAgICAgIGtFeHBySTMySW9yLAorICAgICAg
ICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAgICAgIGtFeHByVW5yZWFjaGFi
bGUsCisgICAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgIGtFeHByTG9jYWxUZWUsIDEs
CisgICAgICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJJMzJDb25z
dCwgMiwKKyAgICAgICAgICAgIGtFeHBySTMyRXEsCisgICAgICAgICAgICBrRXhwcklmLCBrV2Fz
bVZvaWQsCisgICAgICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAgICAgICAgIGtF
eHBySTMyQ29uc3QsIDgsCisgICAgICAgICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICAgICAg
ICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisg
ICAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDE2LAorICAg
ICAgICAgICAga0V4cHJJMzJJb3IsCisgICAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAg
ICAgICAgICAga0V4cHJJMzJDb25zdCwgMzIsCisgICAgICAgICAgICBrRXhwckkzMklvciwKKyAg
ICAgICAgICAgIGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICAgIGtFeHByVW5yZWFjaGFi
bGUsCisgICAgICAgICAga0V4cHJFbmQsCisgICAgICAgICAga0V4cHJMb2NhbFRlZSwgMSwKKyAg
ICAgICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDMsCisg
ICAgICAgICAga0V4cHJJMzJFcSwKKyAgICAgICAgICBrRXhwcklmLCBrV2FzbVZvaWQsCisgICAg
ICAgICAgICBrRXhwckxvY2FsR2V0LCAxLAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgLyo2
ND0qLyAxOTIsIDAsCisgICAgICAgICAgICBrRXhwckkzMklvciwKKyAgICAgICAgICAgIGtFeHBy
VGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAgICAg
a0V4cHJFbmQsCisgICAgICAgICAga0V4cHJJMzJDb25zdCwgLyoxMjg9Ki8gMTI4LCAxLAorICAg
ICAgICAgIGtFeHBySTMySW9yLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAg
ICAga0V4cHJJMzJDb25zdCwgLyoyNTY9Ki8gMTI4LCAyLAorICAgICAgICAgIGtFeHBySTMySW9y
LAorICAgICAgICBrRXhwckVuZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgLy8g
U2NlbmFyaW8gMjogQ2F0Y2hlcyBhbiBleGNlcHRpb24gcmFpc2VkIGZyb20gdGhlIGRpcmVjdCBj
YWxsZWUuCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oImZyb21fZGlyZWN0X2NhbGxlZSIsIGtTaWdf
aV9pKQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAg
a0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtXYXNtVGhyb3dG
dW5jdGlvbiwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByQ2F0Y2gsIGV4
Y2VwdCwKKyAgICAgIGtFeHByRW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICAv
LyBTY2VuYXJpbyAzOiBDYXRjaGVzIGFuIGV4Y2VwdGlvbiByYWlzZWQgZnJvbSBhbiBpbmRpcmVj
dCBjYWxsZWUuCisgIGxldCBzaWdfdl9pID0gYnVpbGRlci5hZGRUeXBlKGtTaWdfdl9pKTsKKyAg
YnVpbGRlci5hcHBlbmRUb1RhYmxlKFtrV2FzbVRocm93RnVuY3Rpb24sIGtXYXNtVGhyb3dGdW5j
dGlvbl0pOworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJmcm9tX2luZGlyZWN0X2NhbGxlZSIsIGtT
aWdfaV9paSkKKyAgICAuYWRkQm9keShbCisgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAg
ICAgIGtFeHByTG9jYWxHZXQsIDAsCisgICAgICAgIGtFeHByTG9jYWxHZXQsIDEsCisgICAgICAg
IGtFeHByQ2FsbEluZGlyZWN0LCBzaWdfdl9pLCBrVGFibGVaZXJvLAorICAgICAgICBrRXhwclVu
cmVhY2hhYmxlLAorICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAga0V4cHJFbmQKKyAg
ICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgLy8gU2NlbmFyaW8gNDogRG9lcyBub3QgY2F0
Y2ggYW4gZXhjZXB0aW9uIHJhaXNlZCBpbiBKUywgZXZlbiBpZiBwcmltaXRpdmUKKyAgLy8gdmFs
dWVzIGFyZSBiZWluZyB1c2VkIGFzIGV4Y2VwdGlvbnMuCisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24o
ImlfZnJvbV9qcyIsIGtTaWdfaV9pKQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5LCBr
V2FzbUkzMiwKKyAgICAgICAga0V4cHJMb2NhbEdldCwgMCwKKyAgICAgICAga0V4cHJDYWxsRnVu
Y3Rpb24sIGtKU1Rocm93SSwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHBy
Q2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgIGtFeHByRW5k
LAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFkZEZ1bmN0aW9uKCJz
dHJpbmdfZnJvbV9qcyIsIGtTaWdfdl92KQorICAgIC5hZGRCb2R5KFsKKyAgICAgIGtFeHByVHJ5
LCBrV2FzbVZvaWQsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBrSlNUaHJvd1N0cmluZywK
KyAgICAgIGtFeHByQ2F0Y2gsIGV4Y2VwdCwKKyAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAg
ICAgIGtFeHByRW5kLAorICAgIF0pCisgICAgLmV4cG9ydEZ1bmMoKTsKKworICBidWlsZGVyLmFk
ZEZ1bmN0aW9uKCJmcF9mcm9tX2pzIiwga1NpZ192X3YpCisgICAgLmFkZEJvZHkoWworICAgICAg
a0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIGtKU1Rocm93
RlAsCisgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgIGtFeHByVW5yZWFjaGFibGUs
CisgICAgICBrRXhwckVuZCwKKyAgICBdKQorICAgIC5leHBvcnRGdW5jKCk7CisKKyAgYnVpbGRl
ci5hZGRGdW5jdGlvbigibGFyZ2VfZnJvbV9qcyIsIGtTaWdfdl92KQorICAgIC5hZGRCb2R5KFsK
KyAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCBr
SlNUaHJvd0xhcmdlLAorICAgICAga0V4cHJDYXRjaCwgZXhjZXB0LAorICAgICAgICBrRXhwclVu
cmVhY2hhYmxlLAorICAgICAga0V4cHJFbmQsCisgICAgXSkKKyAgICAuZXhwb3J0RnVuYygpOwor
CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oInVuZGVmaW5lZF9mcm9tX2pzIiwga1NpZ192X3YpCisg
ICAgLmFkZEJvZHkoWworICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAga0V4cHJD
YWxsRnVuY3Rpb24sIGtKU1Rocm93VW5kZWZpbmVkLAorICAgICAga0V4cHJDYXRjaCwgZXhjZXB0
LAorICAgICAgICBrRXhwclVucmVhY2hhYmxlLAorICAgICAga0V4cHJFbmQsCisgICAgXSkKKyAg
ICAuZXhwb3J0RnVuYygpOworCisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUo
eyIiOiB7CisgICAgICB0aHJvd19pOiB0aHJvd192YWx1ZSwKKyAgICAgIHRocm93X3N0cmluZzog
dGhyb3dfc3RyaW5nLAorICAgICAgdGhyb3dfZnA6IHRocm93X2ZwLAorICAgICAgdGhyb3dfbGFy
Z2UsIHRocm93X2xhcmdlLAorICAgICAgdGhyb3dfdW5kZWZpbmVkOiB0aHJvd191bmRlZmluZWQK
KyAgfX0pOworCisgIGFzc2VydEVxdWFscyg2MywgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3Bl
KDApKTsKKyAgYXNzZXJ0RXF1YWxzKDEwMjQsIGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZSgx
MDI0KSk7CisgIGFzc2VydEVxdWFscygtMywgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlKC0z
KSk7CisgIGFzc2VydEVxdWFscygtMSwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX2lnbm9y
ZSgtMSkpOworICBhc3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX2ln
bm9yZSgxKSk7CisgIGFzc2VydEVxdWFscygweDdGRkZGRkZGLCBpbnN0YW5jZS5leHBvcnRzLnNh
bWVfc2NvcGVfaWdub3JlKDB4N0ZGRkZGRkYpKTsKKyAgYXNzZXJ0RXF1YWxzKDEwMjQsIGluc3Rh
bmNlLmV4cG9ydHMuc2FtZV9zY29wZV9pZ25vcmUoMTAyNCkpOworICBhc3NlcnRFcXVhbHMoLTEs
IGluc3RhbmNlLmV4cG9ydHMuc2FtZV9zY29wZV9pZ25vcmUoLTEpKTsKKyAgYXNzZXJ0RXF1YWxz
KDI5MywgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX211bHRpcGxlKDEpKTsKKyAgYXNzZXJ0
RXF1YWxzKDI5OCwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX211bHRpcGxlKDIpKTsKKyAg
YXNzZXJ0RXF1YWxzKDMzOCwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX211bHRpcGxlKDMp
KTsKKyAgYXNzZXJ0RXF1YWxzKDE0NiwgaW5zdGFuY2UuZXhwb3J0cy5zYW1lX3Njb3BlX211bHRp
cGxlKDApKTsKKyAgYXNzZXJ0RXF1YWxzKC0xMDAyNCwgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2Rp
cmVjdF9jYWxsZWUoLTEwMDI0KSk7CisgIGFzc2VydEVxdWFscygzMzM0MzMzLCBpbnN0YW5jZS5l
eHBvcnRzLmZyb21fZGlyZWN0X2NhbGxlZSgzMzM0MzMzKSk7CisgIGFzc2VydEVxdWFscygtMSwg
aW5zdGFuY2UuZXhwb3J0cy5mcm9tX2RpcmVjdF9jYWxsZWUoMHhGRkZGRkZGRikpOworICBhc3Nl
cnRFcXVhbHMoMHg3RkZGRkZGRiwgaW5zdGFuY2UuZXhwb3J0cy5mcm9tX2RpcmVjdF9jYWxsZWUo
MHg3RkZGRkZGRikpOworICBhc3NlcnRFcXVhbHMoMTAsIGluc3RhbmNlLmV4cG9ydHMuZnJvbV9p
bmRpcmVjdF9jYWxsZWUoMTAsIDApKTsKKyAgYXNzZXJ0RXF1YWxzKDc3LCBpbnN0YW5jZS5leHBv
cnRzLmZyb21faW5kaXJlY3RfY2FsbGVlKDc3LCAxKSk7CisKKyAgYXNzZXJ0VGhyb3dzRXF1YWxz
KCgpID0+IGluc3RhbmNlLmV4cG9ydHMuaV9mcm9tX2pzKDEwKSwgMTApOworICBhc3NlcnRUaHJv
d3NFcXVhbHMoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5pX2Zyb21fanMoLTEwKSwgLTEwKTsKKyAg
YXNzZXJ0VGhyb3dzRXF1YWxzKGluc3RhbmNlLmV4cG9ydHMuc3RyaW5nX2Zyb21fanMsICJ1c2Ug
d2FzbSIpOworICBhc3NlcnRUaHJvd3NFcXVhbHMoaW5zdGFuY2UuZXhwb3J0cy5mcF9mcm9tX2pz
LCAxMC41KTsKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzKGluc3RhbmNlLmV4cG9ydHMubGFyZ2VfZnJv
bV9qcywgMWUrMjgpOworICBhc3NlcnRUaHJvd3NFcXVhbHMoaW5zdGFuY2UuZXhwb3J0cy51bmRl
ZmluZWRfZnJvbV9qcywgdW5kZWZpbmVkKTsKK30pKCk7CisKKy8vIERlbGVnYXRlIHdpdGggYSB0
cnkgYmxvY2sgdGhhdCBuZXZlciB0aHJvd3MuCisoZnVuY3Rpb24gVGVzdERlbGVnYXRlTm9UaHJv
dygpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4
Y2VwdDEgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24o
J3Rlc3QnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtX
YXNtSTMyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHBy
STMyQ29uc3QsIDEsCisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAga0V4cHJD
YXRjaCwgZXhjZXB0MSwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhw
ckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3Rh
bnRpYXRlKCk7CisgIGFzc2VydEVxdWFscygxLCBpbnN0YW5jZS5leHBvcnRzLnRlc3QoKSk7Cit9
KSgpOworCisvLyBEZWxlZ2F0ZSBleGNlcHRpb24gaGFuZGxpbmcgdG8gb3V0ZXIgdHJ5L2NhdGNo
IGJsb2NrLgorKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZVRocm93KCkgeworICBsZXQgYnVpbGRlciA9
IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOworICBsZXQgZXhjZXB0ID0gYnVpbGRlci5hZGRUYWco
a1NpZ192X3YpOworICBsZXQgdGhyb3dfaWYgPSBidWlsZGVyLmFkZEZ1bmN0aW9uKCd0aHJvdycs
IGtTaWdfdl9pKQorICAgICAgLmFkZEJvZHkoWworICAgICAgICAgIGtFeHByTG9jYWxHZXQsIDAs
CisgICAgICAgICAga0V4cHJJZiwga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJUaHJvdywg
ZXhjZXB0LAorICAgICAgICAgIGtFeHByRW5kXSkuZXhwb3J0RnVuYygpOworICBidWlsZGVyLmFk
ZEZ1bmN0aW9uKCd0ZXN0Jywga1NpZ19pX2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtF
eHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAg
ICAgICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIHRo
cm93X2lmLmluZGV4LAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICBr
RXhwckRlbGVnYXRlLCAwLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAg
a0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBvcnRGdW5j
KCk7CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRFcXVhbHMo
MSwgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KDApKTsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3RhbmNl
LmV4cG9ydHMudGVzdCgxKSk7Cit9KSgpOworCisvLyBObyBjYXRjaCBibG9jayBtYXRjaGluZyB0
aGUgZXhjZXB0aW9uIGluIHRoZSBkZWxlZ2F0ZSB0YXJnZXQuCisoZnVuY3Rpb24gVGVzdERlbGVn
YXRlVGhyb3dOb0NhdGNoKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRl
cigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgbGV0IGV4
Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCB0aHJvd19mbiA9IGJ1aWxk
ZXIuYWRkRnVuY3Rpb24oJ3Rocm93Jywga1NpZ192X3YpCisgICAgICAgICAgICAgICAgICAgICAu
YWRkQm9keShba0V4cHJUaHJvdywgZXhjZXB0MV0pCisgICAgICAgICAgICAgICAgICAgICAuZXhw
b3J0RnVuYygpOworICBsZXQgdGhyb3dfZm5fMiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93
XzInLCBrU2lnX3ZfdikKKyAgICAgICAgICAgICAgICAgICAgIC5hZGRCb2R5KFtrRXhwclRocm93
LCBleGNlcHQyXSkKKyAgICAgICAgICAgICAgICAgICAgIC5leHBvcnRGdW5jKCk7CisgIGJ1aWxk
ZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAg
ICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAg
ICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCB0aHJvd19mbi5pbmRleCwKKyAgICAgICAgICAg
IGtFeHBySTMyQ29uc3QsIDEsCisgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMCwKKyAgICAgICAg
a0V4cHJDYXRjaCwgZXhjZXB0MiwKKyAgICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAg
ICBrRXhwckVuZCwKKyAgICAgIF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWlsZGVy
Lmluc3RhbnRpYXRlKCk7CisgIGFzc2VydFRocm93cyhpbnN0YW5jZS5leHBvcnRzLnRlc3QsIFdl
YkFzc2VtYmx5LkV4Y2VwdGlvbik7Cit9KSgpOworCisvLyBDaGVjayB0aGF0IHRoZSBleGNlcHRp
b24gaXMgbWVyZ2VkIHByb3Blcmx5IHdoZW4gYm90aCBzY29wZXMgY2FuIHRocm93LgorKGZ1bmN0
aW9uIFRlc3REZWxlZ2F0ZU1lcmdlKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAg
bGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIC8vIHRocm93X2ZuOiAw
IC0+IHJldHVybnMKKyAgLy8gICAgICAgICAgIDEgLT4gdGhyb3cgZXhjZXB0MQorICAvLyAgICAg
ICAgICAgMiAtPiB0aHJvdyBleGNlcHQyCisgIGxldCB0aHJvd19mbiA9IGJ1aWxkZXIuYWRkRnVu
Y3Rpb24oJ3Rocm93Jywga1NpZ192X2kpCisgICAgICAuYWRkQm9keShbCisgICAgICAgICAga0V4
cHJCbG9jaywga1dhc21Wb2lkLAorICAgICAgICAgICAga0V4cHJCbG9jaywga1dhc21Wb2lkLAor
ICAgICAgICAgICAgICBrRXhwckJsb2NrLCBrV2FzbVZvaWQsCisgICAgICAgICAgICAgICAga0V4
cHJMb2NhbEdldCwgMCwKKyAgICAgICAgICAgICAgICBrRXhwckJyVGFibGUsIDIsIDAsIDEsIDIs
CisgICAgICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAgICBrRXhwclJldHVybiwKKyAg
ICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0MSwKKyAg
ICAgICAgICBrRXhwckVuZCwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQyXSkKKyAgICAg
IC5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfaWkp
CisgICAgICAuYWRkQm9keShbCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAg
ICBrRXhwckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHByQ2FsbEZ1bmN0aW9uLCB0aHJvd19m
bi5pbmRleCwKKyAgICAgICAgICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAgICBrRXhw
ckxvY2FsR2V0LCAxLAorICAgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIHRocm93X2ZuLmlu
ZGV4LAorICAgICAgICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAgICBrRXhwckRlbGVn
YXRlLCAwLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQxLAorICAgICAgICAgIGtFeHBySTMy
Q29uc3QsIDIsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBp
bnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0RXF1YWxzKDIsIGluc3Rh
bmNlLmV4cG9ydHMudGVzdCgxLCAwKSk7CisgIGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZS5l
eHBvcnRzLnRlc3QoMiwgMCksIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbik7CisgIGFzc2VydEVxdWFs
cygyLCBpbnN0YW5jZS5leHBvcnRzLnRlc3QoMCwgMSkpOworICBhc3NlcnRUaHJvd3MoKCkgPT4g
aW5zdGFuY2UuZXhwb3J0cy50ZXN0KDAsIDIpLCBXZWJBc3NlbWJseS5FeGNlcHRpb24pOworICBh
c3NlcnRFcXVhbHMoMSwgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KDAsIDApKTsKK30pKCk7CisKKy8v
IERlbGVnYXRlIHRvIHNlY29uZCBlbmNsb3NpbmcgdHJ5IHNjb3BlLgorKGZ1bmN0aW9uIFRlc3RE
ZWxlZ2F0ZTEoKSB7CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7Cisg
IGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGxldCB0aHJvd19mbiA9
IGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93Jywga1NpZ192X3YpCisgICAgICAgICAgICAgICAg
ICAgICAuYWRkQm9keShba0V4cHJUaHJvdywgZXhjZXB0XSkKKyAgICAgICAgICAgICAgICAgICAg
IC5leHBvcnRGdW5jKCk7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfdikK
KyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAg
IGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAg
ICAgICAgICAgICAga0V4cHJDYWxsRnVuY3Rpb24sIHRocm93X2ZuLmluZGV4LAorICAgICAgICAg
ICAgICBrRXhwckkzMkNvbnN0LCAxLAorICAgICAgICAgICAga0V4cHJEZWxlZ2F0ZSwgMSwKKyAg
ICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAgICAgICAgICBrRXhwckkzMkNvbnN0LCAy
LAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAg
ICAgICAga0V4cHJJMzJDb25zdCwgMywKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBv
cnRGdW5jKCk7CisgIGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOworICBhc3NlcnRF
cXVhbHMoMywgaW5zdGFuY2UuZXhwb3J0cy50ZXN0KCkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRl
c3REZWxlZ2F0ZVVucmVhY2hhYmxlKCkgeworICBsZXQgYnVpbGRlciA9IG5ldyBXYXNtTW9kdWxl
QnVpbGRlcigpOworICBsZXQgZXhjZXB0MSA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAg
bGV0IGV4Y2VwdDIgPSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVu
Y3Rpb24oJ3Rlc3QnLCBrU2lnX2lfdikKKyAgICAgIC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJU
cnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZvaWQsCisgICAgICAgICAg
ICBrRXhwclRocm93LCBleGNlcHQxLAorICAgICAgICAgIGtFeHByRGVsZWdhdGUsIDAsCisgICAg
ICAgICAga0V4cHJJMzJDb25zdCwgMSwKKyAgICAgICAga0V4cHJDYXRjaCwgZXhjZXB0MSwKKyAg
ICAgICAgICBrRXhwckkzMkNvbnN0LCAyLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQyLAor
ICAgICAgICAgIGtFeHBySTMyQ29uc3QsIDMsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSku
ZXhwb3J0RnVuYygpOworICBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNz
ZXJ0RXF1YWxzKDIsIGluc3RhbmNlLmV4cG9ydHMudGVzdCgpKTsKK30pKCk7CisKKyhmdW5jdGlv
biBUZXN0RGVsZWdhdGVUb0NhbGxlcigpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVs
ZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAg
YnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcsIGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWwor
ICAgICAgICBrRXhwclRyeSwga1dhc21Wb2lkLAorICAgICAgICAgIGtFeHByVHJ5LCBrV2FzbVZv
aWQsCisgICAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAga0V4cHJEZWxl
Z2F0ZSwgMSwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAgICAgICAga0V4cHJFbmQKKyAgICAg
IF0pLmV4cG9ydEZ1bmMoKTsKKyAgaW5zdGFuY2UgPSBidWlsZGVyLmluc3RhbnRpYXRlKCk7Cisg
IGFzc2VydFRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLnRlc3QoKSwgV2ViQXNzZW1ibHku
RXhjZXB0aW9uKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUZXN0VGhyb3dCZWZvcmVVbnJlYWNoYWJs
ZSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4
Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbign
dGhyb3dfYmVmb3JlX3VucmVhY2hhYmxlJywga1NpZ19pX3YpCisgICAgICAuYWRkQm9keShbCisg
ICAgICAgIGtFeHByVHJ5LCBrV2FzbUkzMiwKKyAgICAgICAgICBrRXhwclRocm93LCBleGNlcHQs
CisgICAgICAgICAga0V4cHJVbnJlYWNoYWJsZSwKKyAgICAgICAga0V4cHJDYXRjaEFsbCwKKyAg
ICAgICAgICBrRXhwckkzMkNvbnN0LCA0MiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5l
eHBvcnRGdW5jKCk7CisKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0YW50aWF0ZSgpOwor
ICBhc3NlcnRFcXVhbHMoNDIsIGluc3RhbmNlLmV4cG9ydHMudGhyb3dfYmVmb3JlX3VucmVhY2hh
YmxlKCkpOworfSkoKTsKKworKGZ1bmN0aW9uIFRlc3RVbnJlYWNoYWJsZUluQ2F0Y2hBbGwoKSB7
CisgIGxldCBidWlsZGVyID0gbmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQg
PSBidWlsZGVyLmFkZFRhZyhrU2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93
X2JlZm9yZV91bnJlYWNoYWJsZScsIGtTaWdfaV92KQorICAgICAgLmFkZEJvZHkoWworICAgICAg
ICBrRXhwclRyeSwga1dhc21JMzIsCisgICAgICAgICAga0V4cHJUaHJvdywgZXhjZXB0LAorICAg
ICAgICBrRXhwckNhdGNoQWxsLAorICAgICAgICAgIGtFeHByVW5yZWFjaGFibGUsCisgICAgICAg
ICAga0V4cHJJMzJDb25zdCwgNDIsCisgICAgICAgIGtFeHByRW5kLAorICAgICAgXSkuZXhwb3J0
RnVuYygpOworCisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKK30pKCk7
CisKKyhmdW5jdGlvbiBUZXN0VGhyb3dXaXRoTG9jYWwoKSB7CisgIGxldCBidWlsZGVyID0gbmV3
IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhrU2ln
X3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rocm93X3dpdGhfbG9jYWwnLCBrU2lnX2lf
dikKKyAgICAuYWRkTG9jYWxzKGtXYXNtSTMyLCA0KQorICAgIC5hZGRCb2R5KFsKKyAgICAgICAg
a0V4cHJJMzJDb25zdCwgNDIsCisgICAgICAgIGtFeHByRjY0Q29uc3QsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsCisgICAgICAgIGtFeHByVHJ5LCBrV2FzbUYzMiwKKyAgICAgICAgICBrRXhwclRo
cm93LCBleGNlcHQsCisgICAgICAgIGtFeHByQ2F0Y2hBbGwsCisgICAgICAgICAga0V4cHJGMzJD
b25zdCwgMCwgMCwgMCwgMCwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICAgIGtFeHByRHJvcCwg
IC8vIERyb3AgdGhlIGYzMi4KKyAgICAgICAga0V4cHJEcm9wLCAgLy8gRHJvcCB0aGUgZjY0Lgor
ICAgICAgICAvLyBMZWF2ZSB0aGUgJzQyJyBvbiB0aGUgc3RhY2suCisgICAgXSkuZXhwb3J0RnVu
YygpOworCisgIGxldCBpbnN0YW5jZSA9IGJ1aWxkZXIuaW5zdGFudGlhdGUoKTsKKyAgYXNzZXJ0
RXF1YWxzKDQyLCBpbnN0YW5jZS5leHBvcnRzLnRocm93X3dpdGhfbG9jYWwoKSk7Cit9KSgpOwor
CisoZnVuY3Rpb24gVGVzdENhdGNobGVzc1RyeSgpIHsKKyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2Fz
bU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92
KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbignY2F0Y2hsZXNzX3RyeScsIGtTaWdfdl9pKQorICAg
IC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICBrRXhw
ckxvY2FsR2V0LCAwLAorICAgICAgICAgIGtFeHBySWYsIGtXYXNtVm9pZCwKKyAgICAgICAgICAg
IGtFeHByVGhyb3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckVuZCwKKyAgICAgICAga0V4cHJF
bmQsCisgICAgXSkuZXhwb3J0RnVuYygpOworCisgIGJ1aWxkZXIuYWRkRXhwb3J0T2ZLaW5kKCJl
eCIsIGtFeHRlcm5hbFRhZywgZXhjZXB0KTsKKyAgbGV0IGluc3RhbmNlID0gYnVpbGRlci5pbnN0
YW50aWF0ZSgpOworICBhc3NlcnREb2VzTm90VGhyb3coKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5j
YXRjaGxlc3NfdHJ5KDApKTsKKyAgYXNzZXJ0V2FzbVRocm93cyhpbnN0YW5jZSwgaW5zdGFuY2Uu
ZXhwb3J0cy5leCwgW10sICgpID0+IGluc3RhbmNlLmV4cG9ydHMuY2F0Y2hsZXNzX3RyeSgxKSk7
Cit9KSgpOworCisvLyBEZWxlZ2F0ZSB0byBhIHJlZ3VsYXIgYmxvY2sgaW5zaWRlIGEgdHJ5IGJs
b2NrLgorKGZ1bmN0aW9uIFRlc3REZWxlZ2F0ZVRvQmxvY2soKSB7CisgIGxldCBidWlsZGVyID0g
bmV3IFdhc21Nb2R1bGVCdWlsZGVyKCk7CisgIGxldCBleGNlcHQgPSBidWlsZGVyLmFkZFRhZyhr
U2lnX3Zfdik7CisgIGJ1aWxkZXIuYWRkRnVuY3Rpb24oJ3Rlc3QnLCBrU2lnX2lfdikKKyAgICAg
IC5hZGRCb2R5KFsKKyAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAgICAgIGtFeHBy
QmxvY2ssIGtXYXNtSTMyLAorICAgICAgICAgICAga0V4cHJUcnksIGtXYXNtSTMyLAorICAgICAg
ICAgICAgICBrRXhwclRocm93LCBleGNlcHQsCisgICAgICAgICAgICBrRXhwckRlbGVnYXRlLCAw
LAorICAgICAgICAgIGtFeHByRW5kLAorICAgICAgICBrRXhwckNhdGNoLCBleGNlcHQsCisgICAg
ICAgICAga0V4cHJJMzJDb25zdCwgMiwKKyAgICAgICAga0V4cHJFbmQsCisgICAgICBdKS5leHBv
cnRGdW5jKCk7CisgICAgYXNzZXJ0VGhyb3dzKCgpID0+IGJ1aWxkZXIuaW5zdGFudGlhdGUoKSwg
RXJyb3IsIC9kZWxlZ2F0ZSB0YXJnZXQgaXNuJ3QgYSB0cnkgYmxvY2svKTsKK30pKCk7CisKKy8v
IERlbGVnYXRlIHRvIGEgcmVndWxhciBibG9jayB3aXRoIG5vIG91dGVyIHRyeSAoZGVsZWdhdGUg
dG8gY2FsbGVyKS4KKyhmdW5jdGlvbiBUZXN0RGVsZWdhdGVUb0NhbGxlcldpdGhCbG9jaygpIHsK
KyAgbGV0IGJ1aWxkZXIgPSBuZXcgV2FzbU1vZHVsZUJ1aWxkZXIoKTsKKyAgbGV0IGV4Y2VwdCA9
IGJ1aWxkZXIuYWRkVGFnKGtTaWdfdl92KTsKKyAgYnVpbGRlci5hZGRGdW5jdGlvbigndGVzdCcs
IGtTaWdfdl92KQorICAgICAgLmFkZEJvZHkoWworICAgICAgICBrRXhwckJsb2NrLCBrV2FzbVZv
aWQsCisgICAgICAgICAga0V4cHJUcnksIGtXYXNtVm9pZCwKKyAgICAgICAgICAgIGtFeHByVGhy
b3csIGV4Y2VwdCwKKyAgICAgICAgICBrRXhwckRlbGVnYXRlLCAwLAorICAgICAgICBrRXhwckVu
ZAorICAgICAgXSkuZXhwb3J0RnVuYygpOworICBhc3NlcnRUaHJvd3MoKCkgPT4gYnVpbGRlci5p
bnN0YW50aWF0ZSgpLCBFcnJvciwgL2RlbGVnYXRlIHRhcmdldCBpc24ndCBhIHRyeSBibG9jay8p
OworfSkoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS92OC9tanN1bml0LmpzIGIvSlNUZXN0
cy93YXNtL3Y4L21qc3VuaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDI0NTViYWE2MTY5NjZmOGQwYTZiOWRl
MWRhMzIxMWZmYTJkYTM2MgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS92OC9tanN1
bml0LmpzCkBAIC0wLDAgKzEsODI2IEBACisvLyBDb3B5cmlnaHQgMjAwOCB0aGUgVjggcHJvamVj
dCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisv
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Z1
bmN0aW9uIE1qc1VuaXRBc3NlcnRpb25FcnJvcihtZXNzYWdlKSB7CisgIHRoaXMubWVzc2FnZSA9
IG1lc3NhZ2U7CisgIC8vIFRlbXBvcmFyaWx5IGluc3RhbGwgYSBjdXN0b20gc3RhY2sgdHJhY2Ug
Zm9ybWF0dGVyIGFuZCByZXN0b3JlIHRoZQorICAvLyBwcmV2aW91cyB2YWx1ZS4KKyAgbGV0IHBy
ZXZQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOworICB0cnkgewor
ICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gTWpzVW5pdEFzc2VydGlvbkVycm9yLnByZXBh
cmVTdGFja1RyYWNlOworICAgIC8vIFRoaXMgYWxsb3dzIGZldGNoaW5nIHRoZSBzdGFjayB0cmFj
ZSB1c2luZyBUcnlDYXRjaDo6U3RhY2tUcmFjZS4KKyAgICB0aGlzLnN0YWNrID0gbmV3IEVycm9y
KCJNanNVbml0QXNzZXJ0aW9uRXJyb3IiKS5zdGFjazsKKyAgfSBmaW5hbGx5IHsKKyAgICBFcnJv
ci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZQcmVwYXJlU3RhY2tUcmFjZTsKKyAgfQorfQorCisv
KgorICogVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGluIGFsbCBtaW5pIGpzdW5pdCB0ZXN0IGNhc2Vz
LiAgVGhlIHRlc3QKKyAqIGZyYW1ld29yayBleHBlY3RzIGxpbmVzIHRoYXQgc2lnbmFsIGZhaWxl
ZCB0ZXN0cyB0byBzdGFydCB3aXRoCisgKiB0aGUgZi13b3JkIGFuZCBpZ25vcmUgYWxsIG90aGVy
IGxpbmVzLgorICovCisKK01qc1VuaXRBc3NlcnRpb25FcnJvci5wcm90b3R5cGUudG9TdHJpbmcg
PSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiB0aGlzLm1lc3NhZ2UgKyAiXG5cblN0YWNrOiAiICsg
dGhpcy5zdGFjazsKK307CisKKworLy8gRXhwZWN0ZWQgYW5kIGZvdW5kIHZhbHVlcyB0aGUgc2Ft
ZSBvYmplY3RzLCBvciB0aGUgc2FtZSBwcmltaXRpdmUKKy8vIHZhbHVlcy4KKy8vIEZvciBrbm93
biBwcmltaXRpdmUgdmFsdWVzLCBwbGVhc2UgdXNlIGFzc2VydEVxdWFscy4KK3ZhciBhc3NlcnRT
YW1lOworCisvLyBJbnZlcnNlIG9mIGFzc2VydFNhbWUuCit2YXIgYXNzZXJ0Tm90U2FtZTsKKwor
Ly8gRXhwZWN0ZWQgYW5kIGZvdW5kIHZhbHVlcyBhcmUgaWRlbnRpY2FsIHByaW1pdGl2ZSB2YWx1
ZXMgb3IgZnVuY3Rpb25zCisvLyBvciBzaW1pbGFybHkgc3RydWN0dXJlZCBvYmplY3RzIChjaGVj
a2luZyBpbnRlcm5hbCBwcm9wZXJ0aWVzCisvLyBvZiwgZS5nLiwgTnVtYmVyIGFuZCBEYXRlIG9i
amVjdHMsIHRoZSBlbGVtZW50cyBvZiBhcnJheXMKKy8vIGFuZCB0aGUgcHJvcGVydGllcyBvZiBu
b24tQXJyYXkgb2JqZWN0cykuCit2YXIgYXNzZXJ0RXF1YWxzOworCisvLyBEZWVwIGVxdWFsaXR5
IHByZWRpY2F0ZSB1c2VkIGJ5IGFzc2VydEVxdWFscy4KK3ZhciBkZWVwRXF1YWxzOworCisvLyBF
eHBlY3RlZCBhbmQgZm91bmQgdmFsdWVzIGFyZSBub3QgaWRlbnRpY2FsIHByaW1pdGl2ZSB2YWx1
ZXMgb3IgZnVuY3Rpb25zCisvLyBvciBzaW1pbGFybHkgc3RydWN0dXJlZCBvYmplY3RzIChjaGVj
a2luZyBpbnRlcm5hbCBwcm9wZXJ0aWVzCisvLyBvZiwgZS5nLiwgTnVtYmVyIGFuZCBEYXRlIG9i
amVjdHMsIHRoZSBlbGVtZW50cyBvZiBhcnJheXMKKy8vIGFuZCB0aGUgcHJvcGVydGllcyBvZiBu
b24tQXJyYXkgb2JqZWN0cykuCit2YXIgYXNzZXJ0Tm90RXF1YWxzOworCisvLyBUaGUgZGlmZmVy
ZW5jZSBiZXR3ZWVuIGV4cGVjdGVkIGFuZCBmb3VuZCB2YWx1ZSBpcyB3aXRoaW4gY2VydGFpbiB0
b2xlcmFuY2UuCit2YXIgYXNzZXJ0RXF1YWxzRGVsdGE7CisKKy8vIFRoZSBmb3VuZCBvYmplY3Qg
aXMgYW4gQXJyYXkgd2l0aCB0aGUgc2FtZSBsZW5ndGggYW5kIGVsZW1lbnRzCisvLyBhcyB0aGUg
ZXhwZWN0ZWQgb2JqZWN0LiBUaGUgZXhwZWN0ZWQgb2JqZWN0IGRvZXNuJ3QgbmVlZCB0byBiZSBh
biBBcnJheSwKKy8vIGFzIGxvbmcgYXMgaXQncyAiYXJyYXktaXNoIi4KK3ZhciBhc3NlcnRBcnJh
eUVxdWFsczsKKworLy8gVGhlIGZvdW5kIG9iamVjdCBtdXN0IGhhdmUgdGhlIHNhbWUgZW51bWVy
YWJsZSBwcm9wZXJ0aWVzIGFzIHRoZQorLy8gZXhwZWN0ZWQgb2JqZWN0LiBUaGUgdHlwZSBvZiBv
YmplY3QgaXNuJ3QgY2hlY2tlZC4KK3ZhciBhc3NlcnRQcm9wZXJ0aWVzRXF1YWw7CisKKy8vIEFz
c2VydCB0aGF0IHRoZSBzdHJpbmcgY29udmVyc2lvbiBvZiB0aGUgZm91bmQgdmFsdWUgaXMgZXF1
YWwgdG8KKy8vIHRoZSBleHBlY3RlZCBzdHJpbmcuIE9ubHkga2VwdCBmb3IgYmFja3dhcmRzIGNv
bXBhdGliaWxpdHksIHBsZWFzZQorLy8gY2hlY2sgdGhlIHJlYWwgc3RydWN0dXJlIG9mIHRoZSBm
b3VuZCB2YWx1ZS4KK3ZhciBhc3NlcnRUb1N0cmluZ0VxdWFsczsKKworLy8gQ2hlY2tzIHRoYXQg
dGhlIGZvdW5kIHZhbHVlIGlzIHRydWUuIFVzZSB3aXRoIGJvb2xlYW4gZXhwcmVzc2lvbnMKKy8v
IGZvciB0ZXN0cyB0aGF0IGRvZXNuJ3QgaGF2ZSB0aGVpciBvd24gYXNzZXJ0WFhYIGZ1bmN0aW9u
LgordmFyIGFzc2VydFRydWU7CisKKy8vIENoZWNrcyB0aGF0IHRoZSBmb3VuZCB2YWx1ZSBpcyBm
YWxzZS4KK3ZhciBhc3NlcnRGYWxzZTsKKworLy8gQ2hlY2tzIHRoYXQgdGhlIGZvdW5kIHZhbHVl
IGlzIG51bGwuIEtlcHQgZm9yIGhpc3RvcmljYWwgY29tcGF0aWJpbGl0eSwKKy8vIHBsZWFzZSBq
dXN0IHVzZSBhc3NlcnRFcXVhbHMobnVsbCwgZXhwZWN0ZWQpLgordmFyIGFzc2VydE51bGw7CisK
Ky8vIENoZWNrcyB0aGF0IHRoZSBmb3VuZCB2YWx1ZSBpcyAqbm90KiBudWxsLgordmFyIGFzc2Vy
dE5vdE51bGw7CisKKy8vIEFzc2VydCB0aGF0IHRoZSBwYXNzZWQgZnVuY3Rpb24gb3IgZXZhbCBj
b2RlIHRocm93cyBhbiBleGNlcHRpb24uCisvLyBUaGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50
IGlzIGFuIGV4Y2VwdGlvbiBjb25zdHJ1Y3RvciB0aGF0IHRoZQorLy8gdGhyb3duIGV4Y2VwdGlv
biBpcyBjaGVja2VkIGFnYWluc3Qgd2l0aCAiaW5zdGFuY2VvZiIuCisvLyBUaGUgb3B0aW9uYWwg
dGhpcmQgYXJndW1lbnQgaXMgYSBtZXNzYWdlIHR5cGUgc3RyaW5nIG9yIFJlZ0V4cCBvYmplY3Qg
dGhhdCBpcworLy8gY29tcGFyZWQgdG8gdGhlIG1lc3NhZ2Ugb2YgdGhlIHRocm93biBleGNlcHRp
b24uCit2YXIgYXNzZXJ0VGhyb3dzOworCisvLyBBc3NlcnQgdGhhdCB0aGUgcGFzc2VkIGZ1bmN0
aW9uIHRocm93cyBhbiBleGNlcHRpb24uCisvLyBUaGUgZXhjZXB0aW9uIGlzIGNoZWNrZWQgYWdh
aW5zdCB0aGUgc2Vjb25kIGFyZ3VtZW50IHVzaW5nIGFzc2VydEVxdWFscy4KK3ZhciBhc3NlcnRU
aHJvd3NFcXVhbHM7CisKKy8vIEFzc2VydCB0aGF0IHRoZSBwYXNzZWQgcHJvbWlzZSBkb2VzIG5v
dCByZXNvbHZlLCBidXQgZXZlbnR1YWxseSB0aHJvd3MgYW4KKy8vIGV4Y2VwdGlvbi4gVGhlIG9w
dGlvbmFsIHNlY29uZCBhcmd1bWVudCBpcyBhbiBleGNlcHRpb24gY29uc3RydWN0b3IgdGhhdCB0
aGUKKy8vIHRocm93biBleGNlcHRpb24gaXMgY2hlY2tlZCBhZ2FpbnN0IHdpdGggImluc3RhbmNl
b2YiLgorLy8gVGhlIG9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50IGlzIGEgbWVzc2FnZSB0eXBlIHN0
cmluZyBvciBSZWdFeHAgb2JqZWN0IHRoYXQgaXMKKy8vIGNvbXBhcmVkIHRvIHRoZSBtZXNzYWdl
IG9mIHRoZSB0aHJvd24gZXhjZXB0aW9uLgordmFyIGFzc2VydFRocm93c0FzeW5jOworCisvLyBB
c3NlcnQgdGhhdCB0aGUgcGFzc2VkIGZ1bmN0aW9uIG9yIGV2YWwgY29kZSBkb2VzIG5vdCB0aHJv
dyBhbiBleGNlcHRpb24uCit2YXIgYXNzZXJ0RG9lc05vdFRocm93OworCisvLyBBc3NlcnRzIHRo
YXQgdGhlIGZvdW5kIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBjb25zdHJ1Y3RvciBwYXNz
ZWQKKy8vIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuCit2YXIgYXNzZXJ0SW5zdGFuY2VvZjsKKwor
Ly8gQXNzZXJ0IHRoYXQgdGhpcyBjb2RlIGlzIG5ldmVyIGV4ZWN1dGVkIChpLmUuLCBhbHdheXMg
ZmFpbHMgaWYgZXhlY3V0ZWQpLgordmFyIGFzc2VydFVucmVhY2hhYmxlOworCisvLyBBc3NlcnQg
dGhhdCB0aGUgZnVuY3Rpb24gY29kZSBpcyAobm90KSBvcHRpbWl6ZWQuCisvLyBPbmx5IHdvcmtz
IHdpdGggLS1hbGxvdy1uYXRpdmVzLXN5bnRheC4KK3ZhciBhc3NlcnRPcHRpbWl6ZWQ7Cit2YXIg
YXNzZXJ0VW5vcHRpbWl6ZWQ7CisKKy8vIEFzc2VydCB0aGF0IGEgc3RyaW5nIGNvbnRhaW5zIGFu
b3RoZXIgZXhwZWN0ZWQgc3Vic3RyaW5nLgordmFyIGFzc2VydENvbnRhaW5zOworCisvLyBBc3Nl
cnQgdGhhdCBhIHN0cmluZyBtYXRjaGVzIGEgZ2l2ZW4gcmVnZXguCit2YXIgYXNzZXJ0TWF0Y2hl
czsKKworLy8gQXNzZXJ0IHRoYXQgYSBwcm9taXNlIHJlc29sdmVzIG9yIHJlamVjdHMuCisvLyBQ
YXJhbWV0ZXJzOgorLy8ge3Byb21pc2V9IC0gdGhlIHByb21pc2UKKy8vIHtzdWNjZXNzfSAtIG9w
dGlvbmFsIC0gYSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRo
ZQorLy8gICAgICAgICAgICAgcmVzb2x2aW5nIHByb21pc2UuCisvLyAge2ZhaWx9IC0gICBvcHRp
b25hbCAtIGEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUK
Ky8vICAgICAgICAgICAgIHJlamVjdGluZyBwcm9taXNlLiBJZiB0aGUgcHJvbWlzZSBpcyByZWpl
Y3RlZCBidXQgbm8ge2ZhaWx9CisvLyAgICAgICAgICAgICBjYWxsYmFjayBpcyBzZXQsIHRoZSBl
cnJvciBpcyBwcm9wYWdhdGVkIG91dCBvZiB0aGUgcHJvbWlzZQorLy8gICAgICAgICAgICAgY2hh
aW4uCit2YXIgYXNzZXJ0UHJvbWlzZVJlc3VsdDsKKwordmFyIHByb21pc2VUZXN0Q2hhaW47Cit2
YXIgcHJvbWlzZVRlc3RDb3VudCA9IDA7CisKKy8vIFRoZXNlIGJpdHMgbXVzdCBiZSBpbiBzeW5j
IHdpdGggYml0cyBkZWZpbmVkIGluIFJ1bnRpbWVfR2V0T3B0aW1pemF0aW9uU3RhdHVzCit2YXIg
VjhPcHRpbWl6YXRpb25TdGF0dXMgPSB7CisgIGtJc0Z1bmN0aW9uOiAxIDw8IDAsCisgIGtOZXZl
ck9wdGltaXplOiAxIDw8IDEsCisgIGtBbHdheXNPcHRpbWl6ZTogMSA8PCAyLAorICBrTWF5YmVE
ZW9wdGVkOiAxIDw8IDMsCisgIGtPcHRpbWl6ZWQ6IDEgPDwgNCwKKyAga1R1cmJvRmFubmVkOiAx
IDw8IDUsCisgIGtJbnRlcnByZXRlZDogMSA8PCA2LAorICBrTWFya2VkRm9yT3B0aW1pemF0aW9u
OiAxIDw8IDcsCisgIGtNYXJrZWRGb3JDb25jdXJyZW50T3B0aW1pemF0aW9uOiAxIDw8IDgsCisg
IGtPcHRpbWl6aW5nQ29uY3VycmVudGx5OiAxIDw8IDksCisgIGtJc0V4ZWN1dGluZzogMSA8PCAx
MCwKKyAga1RvcG1vc3RGcmFtZUlzVHVyYm9GYW5uZWQ6IDEgPDwgMTEsCisgIGtMaXRlTW9kZTog
MSA8PCAxMiwKKyAga01hcmtlZEZvckRlb3B0aW1pemF0aW9uOiAxIDw8IDEzLAorICBrQmFzZWxp
bmU6IDEgPDwgMTQsCisgIGtUb3Btb3N0RnJhbWVJc0ludGVycHJldGVkOiAxIDw8IDE1LAorICBr
VG9wbW9zdEZyYW1lSXNCYXNlbGluZTogMSA8PCAxNiwKK307CisKKy8vIFJldHVybnMgdHJ1ZSBp
ZiAtLWxpdGUtbW9kZSBpcyBvbiBhbmQgd2UgY2FuJ3QgZXZlciB0dXJuIG9uIG9wdGltaXphdGlv
bi4KK3ZhciBpc05ldmVyT3B0aW1pemVMaXRlTW9kZTsKKworLy8gUmV0dXJucyB0cnVlIGlmIC0t
bm8tb3B0IG1vZGUgaXMgb24uCit2YXIgaXNOZXZlck9wdGltaXplOworCisvLyBSZXR1cm5zIHRy
dWUgaWYgLS1hbHdheXMtb3B0IG1vZGUgaXMgb24uCit2YXIgaXNBbHdheXNPcHRpbWl6ZTsKKwor
Ly8gUmV0dXJucyB0cnVlIGlmIGdpdmVuIGZ1bmN0aW9uIGluIGludGVycHJldGVkLgordmFyIGlz
SW50ZXJwcmV0ZWQ7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBmdW5jdGlvbiBpbiBiYXNl
bGluZS4KK3ZhciBpc0Jhc2VsaW5lOworCisvLyBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rp
b24gaW4gdW5vcHRpbWl6ZWQgKGludGVycHJldGVkIG9yIGJhc2VsaW5lKS4KK3ZhciBpc1Vub3B0
aW1pemVkOworCisvLyBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24gaXMgb3B0aW1pemVk
LgordmFyIGlzT3B0aW1pemVkOworCisvLyBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gZnVuY3Rpb24g
aXMgY29tcGlsZWQgYnkgVHVyYm9GYW4uCit2YXIgaXNUdXJib0Zhbm5lZDsKKworLy8gTW9ua2V5
LXBhdGNoYWJsZSBhbGwtcHVycG9zZSBmYWlsdXJlIGhhbmRsZXIuCit2YXIgZmFpbFdpdGhNZXNz
YWdlOworCisvLyBSZXR1cm5zIHRoZSBmb3JtYXR0ZWQgZmFpbHVyZSB0ZXh0LiAgVXNlZCBieSB0
ZXN0LWFzeW5jLmpzLgordmFyIGZvcm1hdEZhaWx1cmVUZXh0OworCisvLyBSZXR1cm5zIGEgcHJl
dHR5LXByaW50ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXNzZWQgdmFsdWUuCit2
YXIgcHJldHR5UHJpbnRlZDsKKworKGZ1bmN0aW9uICgpIHsgIC8vIFNjb3BlIGZvciB1dGlsaXR5
IGZ1bmN0aW9ucy4KKworICB2YXIgT2JqZWN0UHJvdG90eXBlVG9TdHJpbmcgPSBPYmplY3QucHJv
dG90eXBlLnRvU3RyaW5nOworICB2YXIgTnVtYmVyUHJvdG90eXBlVmFsdWVPZiA9IE51bWJlci5w
cm90b3R5cGUudmFsdWVPZjsKKyAgdmFyIEJvb2xlYW5Qcm90b3R5cGVWYWx1ZU9mID0gQm9vbGVh
bi5wcm90b3R5cGUudmFsdWVPZjsKKyAgdmFyIFN0cmluZ1Byb3RvdHlwZVZhbHVlT2YgPSBTdHJp
bmcucHJvdG90eXBlLnZhbHVlT2Y7CisgIHZhciBEYXRlUHJvdG90eXBlVmFsdWVPZiA9IERhdGUu
cHJvdG90eXBlLnZhbHVlT2Y7CisgIHZhciBSZWdFeHBQcm90b3R5cGVUb1N0cmluZyA9IFJlZ0V4
cC5wcm90b3R5cGUudG9TdHJpbmc7CisgIHZhciBBcnJheVByb3RvdHlwZUZvckVhY2ggPSBBcnJh
eS5wcm90b3R5cGUuZm9yRWFjaDsKKyAgdmFyIEFycmF5UHJvdG90eXBlSm9pbiA9IEFycmF5LnBy
b3RvdHlwZS5qb2luOworICB2YXIgQXJyYXlQcm90b3R5cGVNYXAgPSBBcnJheS5wcm90b3R5cGUu
bWFwOworICB2YXIgQXJyYXlQcm90b3R5cGVQdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7Cisg
IHZhciBKU09OU3RyaW5naWZ5ID0gSlNPTi5zdHJpbmdpZnk7CisKKyAgdmFyIEJpZ0ludFByb3Rv
dHlwZVZhbHVlT2Y7CisgIC8vIFRPRE8obmVpcyk6IFJlbW92ZSB0cnktY2F0Y2ggb25jZSBCaWdJ
bnRzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCisgIHRyeSB7CisgICAgQmlnSW50UHJvdG90eXBl
VmFsdWVPZiA9IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZjsKKyAgfSBjYXRjaCAoZSkge30KKwor
ICBmdW5jdGlvbiBjbGFzc09mKG9iamVjdCkgeworICAgIC8vIEFyZ3VtZW50IG11c3Qgbm90IGJl
IG51bGwgb3IgdW5kZWZpbmVkLgorICAgIHZhciBzdHJpbmcgPSBPYmplY3RQcm90b3R5cGVUb1N0
cmluZy5jYWxsKG9iamVjdCk7CisgICAgLy8gU3RyaW5nIGhhcyBmb3JtYXQgW29iamVjdCA8Q2xh
c3NOYW1lPl0uCisgICAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoOCwgc3RyaW5nLmxlbmd0aCAt
IDEpOworICB9CisKKworICBmdW5jdGlvbiBWYWx1ZU9mKHZhbHVlKSB7CisgICAgc3dpdGNoIChj
bGFzc09mKHZhbHVlKSkgeworICAgICAgY2FzZSAiTnVtYmVyIjoKKyAgICAgICAgcmV0dXJuIE51
bWJlclByb3RvdHlwZVZhbHVlT2YuY2FsbCh2YWx1ZSk7CisgICAgICBjYXNlICJCaWdJbnQiOgor
ICAgICAgICByZXR1cm4gQmlnSW50UHJvdG90eXBlVmFsdWVPZi5jYWxsKHZhbHVlKTsKKyAgICAg
IGNhc2UgIlN0cmluZyI6CisgICAgICAgIHJldHVybiBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mLmNh
bGwodmFsdWUpOworICAgICAgY2FzZSAiQm9vbGVhbiI6CisgICAgICAgIHJldHVybiBCb29sZWFu
UHJvdG90eXBlVmFsdWVPZi5jYWxsKHZhbHVlKTsKKyAgICAgIGNhc2UgIkRhdGUiOgorICAgICAg
ICByZXR1cm4gRGF0ZVByb3RvdHlwZVZhbHVlT2YuY2FsbCh2YWx1ZSk7CisgICAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorICB9CisKKworICBwcmV0dHlQcmludGVk
ID0gZnVuY3Rpb24gcHJldHR5UHJpbnRlZCh2YWx1ZSkgeworICAgIHN3aXRjaCAodHlwZW9mIHZh
bHVlKSB7CisgICAgICBjYXNlICJzdHJpbmciOgorICAgICAgICByZXR1cm4gSlNPTlN0cmluZ2lm
eSh2YWx1ZSk7CisgICAgICBjYXNlICJiaWdpbnQiOgorICAgICAgICByZXR1cm4gU3RyaW5nKHZh
bHVlKSArICJuIjsKKyAgICAgIGNhc2UgIm51bWJlciI6CisgICAgICAgIGlmICh2YWx1ZSA9PT0g
MCAmJiAoMSAvIHZhbHVlKSA8IDApIHJldHVybiAiLTAiOworICAgICAgICAvLyBGQUxMVEhST1VH
SC4KKyAgICAgIGNhc2UgImJvb2xlYW4iOgorICAgICAgY2FzZSAidW5kZWZpbmVkIjoKKyAgICAg
IGNhc2UgImZ1bmN0aW9uIjoKKyAgICAgIGNhc2UgInN5bWJvbCI6CisgICAgICAgIHJldHVybiBT
dHJpbmcodmFsdWUpOworICAgICAgY2FzZSAib2JqZWN0IjoKKyAgICAgICAgaWYgKHZhbHVlID09
PSBudWxsKSByZXR1cm4gIm51bGwiOworICAgICAgICB2YXIgb2JqZWN0Q2xhc3MgPSBjbGFzc09m
KHZhbHVlKTsKKyAgICAgICAgc3dpdGNoIChvYmplY3RDbGFzcykgeworICAgICAgICAgIGNhc2Ug
Ik51bWJlciI6CisgICAgICAgICAgY2FzZSAiQmlnSW50IjoKKyAgICAgICAgICBjYXNlICJTdHJp
bmciOgorICAgICAgICAgIGNhc2UgIkJvb2xlYW4iOgorICAgICAgICAgIGNhc2UgIkRhdGUiOgor
ICAgICAgICAgICAgcmV0dXJuIG9iamVjdENsYXNzICsgIigiICsgcHJldHR5UHJpbnRlZChWYWx1
ZU9mKHZhbHVlKSkgKyAiKSI7CisgICAgICAgICAgY2FzZSAiUmVnRXhwIjoKKyAgICAgICAgICAg
IHJldHVybiBSZWdFeHBQcm90b3R5cGVUb1N0cmluZy5jYWxsKHZhbHVlKTsKKyAgICAgICAgICBj
YXNlICJBcnJheSI6CisgICAgICAgICAgICB2YXIgbWFwcGVkID0gQXJyYXlQcm90b3R5cGVNYXAu
Y2FsbCgKKyAgICAgICAgICAgICAgICB2YWx1ZSwgcHJldHR5UHJpbnRlZEFycmF5RWxlbWVudCk7
CisgICAgICAgICAgICB2YXIgam9pbmVkID0gQXJyYXlQcm90b3R5cGVKb2luLmNhbGwobWFwcGVk
LCAiLCIpOworICAgICAgICAgICAgcmV0dXJuICJbIiArIGpvaW5lZCArICJdIjsKKyAgICAgICAg
ICBjYXNlICJVaW50OEFycmF5IjoKKyAgICAgICAgICBjYXNlICJJbnQ4QXJyYXkiOgorICAgICAg
ICAgIGNhc2UgIkludDE2QXJyYXkiOgorICAgICAgICAgIGNhc2UgIlVpbnQxNkFycmF5IjoKKyAg
ICAgICAgICBjYXNlICJVaW50MzJBcnJheSI6CisgICAgICAgICAgY2FzZSAiSW50MzJBcnJheSI6
CisgICAgICAgICAgY2FzZSAiRmxvYXQzMkFycmF5IjoKKyAgICAgICAgICBjYXNlICJGbG9hdDY0
QXJyYXkiOgorICAgICAgICAgICAgdmFyIGpvaW5lZCA9IEFycmF5UHJvdG90eXBlSm9pbi5jYWxs
KHZhbHVlLCAiLCIpOworICAgICAgICAgICAgcmV0dXJuIG9iamVjdENsYXNzICsgIihbIiArIGpv
aW5lZCArICJdKSI7CisgICAgICAgICAgY2FzZSAiT2JqZWN0IjoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Q2xhc3MgKyAi
KCIgKyBTdHJpbmcodmFsdWUpICsgIikiOworICAgICAgICB9CisgICAgICAgIC8vIGNsYXNzT2Yo
KSByZXR1cm5lZCAiT2JqZWN0Ii4KKyAgICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rv
ci5uYW1lOworICAgICAgICBpZiAobmFtZSkgcmV0dXJuIG5hbWUgKyAiKCkiOworICAgICAgICBy
ZXR1cm4gIk9iamVjdCgpIjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiLS0gdW5r
bm93biB2YWx1ZSAtLSI7CisgICAgfQorICB9CisKKworICBmdW5jdGlvbiBwcmV0dHlQcmludGVk
QXJyYXlFbGVtZW50KHZhbHVlLCBpbmRleCwgYXJyYXkpIHsKKyAgICBpZiAodmFsdWUgPT09IHVu
ZGVmaW5lZCAmJiAhKGluZGV4IGluIGFycmF5KSkgcmV0dXJuICIiOworICAgIHJldHVybiBwcmV0
dHlQcmludGVkKHZhbHVlKTsKKyAgfQorCisKKyAgZmFpbFdpdGhNZXNzYWdlID0gZnVuY3Rpb24g
ZmFpbFdpdGhNZXNzYWdlKG1lc3NhZ2UpIHsKKyAgICB0aHJvdyBuZXcgTWpzVW5pdEFzc2VydGlv
bkVycm9yKG1lc3NhZ2UpOworICB9CisKKyAgZm9ybWF0RmFpbHVyZVRleHQgPSBmdW5jdGlvbihl
eHBlY3RlZFRleHQsIGZvdW5kLCBuYW1lX29wdCkgeworICAgIHZhciBtZXNzYWdlID0gIkZhaWwi
ICsgInVyZSI7CisgICAgaWYgKG5hbWVfb3B0KSB7CisgICAgICAvLyBGaXggdGhpcyB3aGVuIHdl
IGRpdGNoIHRoZSBvbGQgdGVzdCBydW5uZXIuCisgICAgICBtZXNzYWdlICs9ICIgKCIgKyBuYW1l
X29wdCArICIpIjsKKyAgICB9CisKKyAgICB2YXIgZm91bmRUZXh0ID0gcHJldHR5UHJpbnRlZChm
b3VuZCk7CisgICAgaWYgKGV4cGVjdGVkVGV4dC5sZW5ndGggPD0gNDAgJiYgZm91bmRUZXh0Lmxl
bmd0aCA8PSA0MCkgeworICAgICAgbWVzc2FnZSArPSAiOiBleHBlY3RlZCA8IiArIGV4cGVjdGVk
VGV4dCArICI+IGZvdW5kIDwiICsgZm91bmRUZXh0ICsgIj4iOworICAgIH0gZWxzZSB7CisgICAg
ICBtZXNzYWdlICs9ICI6XG5leHBlY3RlZDpcbiIgKyBleHBlY3RlZFRleHQgKyAiXG5mb3VuZDpc
biIgKyBmb3VuZFRleHQ7CisgICAgfQorICAgIHJldHVybiBtZXNzYWdlOworICB9CisKKyAgZnVu
Y3Rpb24gZmFpbChleHBlY3RlZFRleHQsIGZvdW5kLCBuYW1lX29wdCkgeworICAgIHJldHVybiBm
YWlsV2l0aE1lc3NhZ2UoZm9ybWF0RmFpbHVyZVRleHQoZXhwZWN0ZWRUZXh0LCBmb3VuZCwgbmFt
ZV9vcHQpKTsKKyAgfQorCisKKyAgZnVuY3Rpb24gZGVlcE9iamVjdEVxdWFscyhhLCBiKSB7Cisg
ICAgdmFyIGFQcm9wcyA9IE9iamVjdC5rZXlzKGEpOworICAgIGFQcm9wcy5zb3J0KCk7CisgICAg
dmFyIGJQcm9wcyA9IE9iamVjdC5rZXlzKGIpOworICAgIGJQcm9wcy5zb3J0KCk7CisgICAgaWYg
KCFkZWVwRXF1YWxzKGFQcm9wcywgYlByb3BzKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykgeworICAgICAg
aWYgKCFkZWVwRXF1YWxzKGFbYVByb3BzW2ldXSwgYlthUHJvcHNbaV1dKSkgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisKKwor
ICBkZWVwRXF1YWxzID0gZnVuY3Rpb24gZGVlcEVxdWFscyhhLCBiKSB7CisgICAgaWYgKGEgPT09
IGIpIHsKKyAgICAgIC8vIENoZWNrIGZvciAtMC4KKyAgICAgIGlmIChhID09PSAwKSByZXR1cm4g
KDEgLyBhKSA9PT0gKDEgLyBiKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAo
dHlwZW9mIGEgIT09IHR5cGVvZiBiKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKHR5cGVvZiBhID09
PSAibnVtYmVyIikgcmV0dXJuIGlzTmFOKGEpICYmIGlzTmFOKGIpOworICAgIGlmICh0eXBlb2Yg
YSAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIGEgIT09ICJmdW5jdGlvbiIpIHJldHVybiBmYWxzZTsK
KyAgICAvLyBOZWl0aGVyIGEgbm9yIGIgaXMgcHJpbWl0aXZlLgorICAgIHZhciBvYmplY3RDbGFz
cyA9IGNsYXNzT2YoYSk7CisgICAgaWYgKG9iamVjdENsYXNzICE9PSBjbGFzc09mKGIpKSByZXR1
cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdENsYXNzID09PSAiUmVnRXhwIikgeworICAgICAgLy8g
Rm9yIFJlZ0V4cCwganVzdCBjb21wYXJlIHBhdHRlcm4gYW5kIGZsYWdzIHVzaW5nIGl0cyB0b1N0
cmluZy4KKyAgICAgIHJldHVybiBSZWdFeHBQcm90b3R5cGVUb1N0cmluZy5jYWxsKGEpID09PQor
ICAgICAgICAgICAgIFJlZ0V4cFByb3RvdHlwZVRvU3RyaW5nLmNhbGwoYik7CisgICAgfQorICAg
IC8vIEZ1bmN0aW9ucyBhcmUgb25seSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcy4KKyAgICBpZiAo
b2JqZWN0Q2xhc3MgPT09ICJGdW5jdGlvbiIpIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0
Q2xhc3MgPT09ICJBcnJheSIpIHsKKyAgICAgIHZhciBlbGVtZW50Q291bnQgPSAwOworICAgICAg
aWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICB9CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
aWYgKCFkZWVwRXF1YWxzKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKG9iamVjdENsYXNzID09PSAiU3RyaW5nIiB8
fCBvYmplY3RDbGFzcyA9PT0gIk51bWJlciIgfHwKKyAgICAgIG9iamVjdENsYXNzID09PSAiQmln
SW50IiB8fCBvYmplY3RDbGFzcyA9PT0gIkJvb2xlYW4iIHx8CisgICAgICBvYmplY3RDbGFzcyA9
PT0gIkRhdGUiKSB7CisgICAgICBpZiAoVmFsdWVPZihhKSAhPT0gVmFsdWVPZihiKSkgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gZGVlcE9iamVjdEVxdWFscyhhLCBiKTsKKyAgfQor
CisgIGFzc2VydFNhbWUgPSBmdW5jdGlvbiBhc3NlcnRTYW1lKGV4cGVjdGVkLCBmb3VuZCwgbmFt
ZV9vcHQpIHsKKyAgICBpZiAoT2JqZWN0LmlzKGV4cGVjdGVkLCBmb3VuZCkpIHJldHVybjsKKyAg
ICBmYWlsKHByZXR0eVByaW50ZWQoZXhwZWN0ZWQpLCBmb3VuZCwgbmFtZV9vcHQpOworICB9Owor
CisgIGFzc2VydE5vdFNhbWUgPSBmdW5jdGlvbiBhc3NlcnROb3RTYW1lKGV4cGVjdGVkLCBmb3Vu
ZCwgbmFtZV9vcHQpIHsKKyAgICBpZiAoIU9iamVjdC5pcyhleHBlY3RlZCwgZm91bmQpKSByZXR1
cm47CisgICAgZmFpbCgibm90IHNhbWUgYXMgIiArIHByZXR0eVByaW50ZWQoZXhwZWN0ZWQpLCBm
b3VuZCwgbmFtZV9vcHQpOworICB9CisKKyAgYXNzZXJ0RXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0
RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgICBpZiAoIWRlZXBFcXVhbHMo
Zm91bmQsIGV4cGVjdGVkKSkgeworICAgICAgZmFpbChwcmV0dHlQcmludGVkKGV4cGVjdGVkKSwg
Zm91bmQsIG5hbWVfb3B0KTsKKyAgICB9CisgIH07CisKKyAgYXNzZXJ0Tm90RXF1YWxzID0gZnVu
Y3Rpb24gYXNzZXJ0Tm90RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgICBp
ZiAoZGVlcEVxdWFscyhmb3VuZCwgZXhwZWN0ZWQpKSB7CisgICAgICBmYWlsKCJub3QgZXF1YWxz
IHRvICIgKyBwcmV0dHlQcmludGVkKGV4cGVjdGVkKSwgZm91bmQsIG5hbWVfb3B0KTsKKyAgICB9
CisgIH07CisKKworICBhc3NlcnRFcXVhbHNEZWx0YSA9CisgICAgICBmdW5jdGlvbiBhc3NlcnRF
cXVhbHNEZWx0YShleHBlY3RlZCwgZm91bmQsIGRlbHRhLCBuYW1lX29wdCkgeworICAgIGlmIChN
YXRoLmFicyhleHBlY3RlZCAtIGZvdW5kKSA+IGRlbHRhKSB7CisgICAgICBmYWlsKHByZXR0eVBy
aW50ZWQoZXhwZWN0ZWQpICsgIiArLSAiICsgcHJldHR5UHJpbnRlZChkZWx0YSksIGZvdW5kLCBu
YW1lX29wdCk7CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0QXJyYXlFcXVhbHMgPSBmdW5jdGlv
biBhc3NlcnRBcnJheUVxdWFscyhleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7CisgICAgdmFy
IHN0YXJ0ID0gIiI7CisgICAgaWYgKG5hbWVfb3B0KSB7CisgICAgICBzdGFydCA9IG5hbWVfb3B0
ICsgIiAtICI7CisgICAgfQorICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5sZW5ndGgsIGZvdW5k
Lmxlbmd0aCwgc3RhcnQgKyAiYXJyYXkgbGVuZ3RoIik7CisgICAgaWYgKGV4cGVjdGVkLmxlbmd0
aCA9PT0gZm91bmQubGVuZ3RoKSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVk
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFtpXSwgZm91bmRb
aV0sCisgICAgICAgICAgICAgICAgICAgICBzdGFydCArICJhcnJheSBlbGVtZW50IGF0IGluZGV4
ICIgKyBpKTsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKworICBhc3NlcnRQcm9wZXJ0aWVzRXF1
YWwgPSBmdW5jdGlvbiBhc3NlcnRQcm9wZXJ0aWVzRXF1YWwoZXhwZWN0ZWQsIGZvdW5kLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZV9vcHQpIHsKKyAgICAvLyBDaGVjayBwcm9wZXJ0aWVzIG9ubHkuCisgICAgaWYgKCFkZWVwT2Jq
ZWN0RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCkpIHsKKyAgICAgIGZhaWwoZXhwZWN0ZWQsIGZvdW5k
LCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0VG9TdHJpbmdFcXVhbHMgPSBm
dW5jdGlvbiBhc3NlcnRUb1N0cmluZ0VxdWFscyhleHBlY3RlZCwgZm91bmQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9vcHQpIHsK
KyAgICBpZiAoZXhwZWN0ZWQgIT09IFN0cmluZyhmb3VuZCkpIHsKKyAgICAgIGZhaWwoZXhwZWN0
ZWQsIGZvdW5kLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisKKyAgYXNzZXJ0VHJ1ZSA9IGZ1
bmN0aW9uIGFzc2VydFRydWUodmFsdWUsIG5hbWVfb3B0KSB7CisgICAgYXNzZXJ0RXF1YWxzKHRy
dWUsIHZhbHVlLCBuYW1lX29wdCk7CisgIH07CisKKworICBhc3NlcnRGYWxzZSA9IGZ1bmN0aW9u
IGFzc2VydEZhbHNlKHZhbHVlLCBuYW1lX29wdCkgeworICAgIGFzc2VydEVxdWFscyhmYWxzZSwg
dmFsdWUsIG5hbWVfb3B0KTsKKyAgfTsKKworCisgIGFzc2VydE51bGwgPSBmdW5jdGlvbiBhc3Nl
cnROdWxsKHZhbHVlLCBuYW1lX29wdCkgeworICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkgeworICAg
ICAgZmFpbCgibnVsbCIsIHZhbHVlLCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisKKyAgYXNz
ZXJ0Tm90TnVsbCA9IGZ1bmN0aW9uIGFzc2VydE5vdE51bGwodmFsdWUsIG5hbWVfb3B0KSB7Cisg
ICAgaWYgKHZhbHVlID09PSBudWxsKSB7CisgICAgICBmYWlsKCJub3QgbnVsbCIsIHZhbHVlLCBu
YW1lX29wdCk7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIGV4ZWN1dGVDb2RlKGNvZGUpIHsK
KyAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdmdW5jdGlvbicpICByZXR1cm4gY29kZSgpOworICAg
IGlmICh0eXBlb2YgY29kZSA9PT0gJ3N0cmluZycpIHJldHVybiBldmFsKGNvZGUpOworICAgIGZh
aWxXaXRoTWVzc2FnZSgKKyAgICAgICAgJ0dpdmVuIGNvZGUgaXMgbmVpdGhlciBmdW5jdGlvbiBu
b3Igc3RyaW5nLCBidXQgJyArICh0eXBlb2YgY29kZSkgKworICAgICAgICAnOiA8JyArIHByZXR0
eVByaW50ZWQoY29kZSkgKyAnPicpOworICB9CisKKyAgZnVuY3Rpb24gY2hlY2tFeGNlcHRpb24o
ZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkgeworICAgIGlmICh0eXBlX29wdCAhPT0gdW5kZWZpbmVk
KSB7CisgICAgICBhc3NlcnRFcXVhbHMoJ2Z1bmN0aW9uJywgdHlwZW9mIHR5cGVfb3B0KTsKKyAg
ICAgIGFzc2VydEluc3RhbmNlb2YoZSwgdHlwZV9vcHQpOworICAgIH0KKyAgICBpZiAoUmVnRXhw
ICE9PSB1bmRlZmluZWQgJiYgY2F1c2Vfb3B0IGluc3RhbmNlb2YgUmVnRXhwKSB7CisgICAgICBh
c3NlcnRNYXRjaGVzKGNhdXNlX29wdCwgZS5tZXNzYWdlLCAnRXJyb3IgbWVzc2FnZScpOworICAg
IH0gZWxzZSBpZiAoY2F1c2Vfb3B0ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIGFzc2VydEVxdWFs
cyhjYXVzZV9vcHQsIGUubWVzc2FnZSwgJ0Vycm9yIG1lc3NhZ2UnKTsKKyAgICB9CisgIH0KKwor
ICBhc3NlcnRUaHJvd3MgPSBmdW5jdGlvbiBhc3NlcnRUaHJvd3MoY29kZSwgdHlwZV9vcHQsIGNh
dXNlX29wdCkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlX29wdCA9PT0g
dW5kZWZpbmVkKSB7CisgICAgICBmYWlsV2l0aE1lc3NhZ2UoJ2ludmFsaWQgdXNlIG9mIGFzc2Vy
dFRocm93cywgdW5rbm93biB0eXBlX29wdCBnaXZlbicpOworICAgIH0KKyAgICBpZiAodHlwZV9v
cHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdHlwZV9vcHQgIT09ICdmdW5jdGlvbicpIHsKKyAg
ICAgIGZhaWxXaXRoTWVzc2FnZSgKKyAgICAgICAgICAnaW52YWxpZCB1c2Ugb2YgYXNzZXJ0VGhy
b3dzLCBtYXliZSB5b3Ugd2FudCBhc3NlcnRUaHJvd3NFcXVhbHMnKTsKKyAgICB9CisgICAgdHJ5
IHsKKyAgICAgIGV4ZWN1dGVDb2RlKGNvZGUpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGNo
ZWNrRXhjZXB0aW9uKGUsIHR5cGVfb3B0LCBjYXVzZV9vcHQpOworICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBsZXQgbXNnID0gJ0RpZCBub3QgdGhyb3cgZXhjZXB0aW9uJzsKKyAgICBpZiAodHlw
ZV9vcHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlX29wdC5uYW1lICE9PSB1bmRlZmluZWQpCisgICAg
ICBtc2cgKz0gJywgZXhwZWN0ZWQgJyArIHR5cGVfb3B0Lm5hbWU7CisgICAgZmFpbFdpdGhNZXNz
YWdlKG1zZyk7CisgIH07CisKKyAgYXNzZXJ0VGhyb3dzRXF1YWxzID0gZnVuY3Rpb24gYXNzZXJ0
VGhyb3dzRXF1YWxzKGZ1biwgdmFsKSB7CisgICAgdHJ5IHsKKyAgICAgIGZ1bigpOworICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgIGFzc2VydFNhbWUodmFsLCBlKTsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgZmFpbFdpdGhNZXNzYWdlKCdEaWQgbm90IHRocm93IGV4Y2VwdGlvbiwgZXhwZWN0
ZWQgJyArIHByZXR0eVByaW50ZWQodmFsKSk7CisgIH07CisKKyAgYXNzZXJ0VGhyb3dzQXN5bmMg
PSBmdW5jdGlvbiBhc3NlcnRUaHJvd3NBc3luYyhwcm9taXNlLCB0eXBlX29wdCwgY2F1c2Vfb3B0
KSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHR5cGVfb3B0ID09PSB1bmRlZmlu
ZWQpIHsKKyAgICAgIGZhaWxXaXRoTWVzc2FnZSgnaW52YWxpZCB1c2Ugb2YgYXNzZXJ0VGhyb3dz
LCB1bmtub3duIHR5cGVfb3B0IGdpdmVuJyk7CisgICAgfQorICAgIGlmICh0eXBlX29wdCAhPT0g
dW5kZWZpbmVkICYmIHR5cGVvZiB0eXBlX29wdCAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAgZmFp
bFdpdGhNZXNzYWdlKAorICAgICAgICAgICdpbnZhbGlkIHVzZSBvZiBhc3NlcnRUaHJvd3MsIG1h
eWJlIHlvdSB3YW50IGFzc2VydFRocm93c0VxdWFscycpOworICAgIH0KKyAgICBsZXQgbXNnID0g
J1Byb21pc2UgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24nOworICAgIGlmICh0eXBlX29wdCAhPT0g
dW5kZWZpbmVkICYmIHR5cGVfb3B0Lm5hbWUgIT09IHVuZGVmaW5lZCkKKyAgICAgIG1zZyArPSAn
LCBleHBlY3RlZCAnICsgdHlwZV9vcHQubmFtZTsKKyAgICByZXR1cm4gYXNzZXJ0UHJvbWlzZVJl
c3VsdCgKKyAgICAgICAgcHJvbWlzZSwKKyAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gdGhy
b3cgdGhlIGVycm9yIGFnYWluIHRvIGdldCBvdXQgb2YgdGhlIHByb21pc2UKKyAgICAgICAgLy8g
Y2hhaW4uCisgICAgICAgIHJlcyA9PiBzZXRUaW1lb3V0KF8gPT4gZmFpbCgnPHRocm93PicsIHJl
cywgbXNnKSwgMCksCisgICAgICAgIGUgPT4gY2hlY2tFeGNlcHRpb24oZSwgdHlwZV9vcHQsIGNh
dXNlX29wdCkpOworICB9OworCisgIGFzc2VydEluc3RhbmNlb2YgPSBmdW5jdGlvbiBhc3NlcnRJ
bnN0YW5jZW9mKG9iaiwgdHlwZSkgeworICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIHR5cGUpKSB7
CisgICAgICB2YXIgYWN0dWFsVHlwZU5hbWUgPSBudWxsOworICAgICAgdmFyIGFjdHVhbENvbnN0
cnVjdG9yID0gb2JqICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopLmNvbnN0cnVjdG9yOwor
ICAgICAgaWYgKHR5cGVvZiBhY3R1YWxDb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJykgeworICAg
ICAgICBhY3R1YWxUeXBlTmFtZSA9IGFjdHVhbENvbnN0cnVjdG9yLm5hbWUgfHwgU3RyaW5nKGFj
dHVhbENvbnN0cnVjdG9yKTsKKyAgICAgIH0KKyAgICAgIGZhaWxXaXRoTWVzc2FnZSgKKyAgICAg
ICAgICAnT2JqZWN0IDwnICsgcHJldHR5UHJpbnRlZChvYmopICsgJz4gaXMgbm90IGFuIGluc3Rh
bmNlIG9mIDwnICsKKyAgICAgICAgICAodHlwZS5uYW1lIHx8IHR5cGUpICsgJz4nICsKKyAgICAg
ICAgICAoYWN0dWFsVHlwZU5hbWUgPyAnIGJ1dCBvZiA8JyArIGFjdHVhbFR5cGVOYW1lICsgJz4n
IDogJycpKTsKKyAgICB9CisgIH07CisKKyAgYXNzZXJ0RG9lc05vdFRocm93ID0gZnVuY3Rpb24g
YXNzZXJ0RG9lc05vdFRocm93KGNvZGUsIG5hbWVfb3B0KSB7CisgICAgdHJ5IHsKKyAgICAgIGV4
ZWN1dGVDb2RlKGNvZGUpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGlmIChlIGluc3RhbmNl
b2YgTWpzVW5pdEFzc2VydGlvbkVycm9yKSB0aHJvdyBlOworICAgICAgZmFpbFdpdGhNZXNzYWdl
KCJ0aHJldyBhbiBleGNlcHRpb246ICIgKyAoZS5tZXNzYWdlIHx8IGUpKTsKKyAgICB9CisgIH07
CisKKyAgYXNzZXJ0VW5yZWFjaGFibGUgPSBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZShuYW1l
X29wdCkgeworICAgIC8vIEZpeCB0aGlzIHdoZW4gd2UgZGl0Y2ggdGhlIG9sZCB0ZXN0IHJ1bm5l
ci4KKyAgICB2YXIgbWVzc2FnZSA9ICJGYWlsIiArICJ1cmU6IHVucmVhY2hhYmxlIjsKKyAgICBp
ZiAobmFtZV9vcHQpIHsKKyAgICAgIG1lc3NhZ2UgKz0gIiAtICIgKyBuYW1lX29wdDsKKyAgICB9
CisgICAgZmFpbFdpdGhNZXNzYWdlKG1lc3NhZ2UpOworICB9OworCisgIGFzc2VydENvbnRhaW5z
ID0gZnVuY3Rpb24oc3ViLCB2YWx1ZSwgbmFtZV9vcHQpIHsKKyAgICBpZiAodmFsdWUgPT0gbnVs
bCA/IChzdWIgIT0gbnVsbCkgOiB2YWx1ZS5pbmRleE9mKHN1YikgPT0gLTEpIHsKKyAgICAgIGZh
aWwoImNvbnRhaW5zICciICsgU3RyaW5nKHN1YikgKyAiJyIsIHZhbHVlLCBuYW1lX29wdCk7Cisg
ICAgfQorICB9OworCisgIGFzc2VydE1hdGNoZXMgPSBmdW5jdGlvbihyZWdleHAsIHN0ciwgbmFt
ZV9vcHQpIHsKKyAgICBpZiAoIShyZWdleHAgaW5zdGFuY2VvZiBSZWdFeHApKSB7CisgICAgICBy
ZWdleHAgPSBuZXcgUmVnRXhwKHJlZ2V4cCk7CisgICAgfQorICAgIGlmICghc3RyLm1hdGNoKHJl
Z2V4cCkpIHsKKyAgICAgIGZhaWwoInNob3VsZCBtYXRjaCAnIiArIHJlZ2V4cCArICInIiwgc3Ry
LCBuYW1lX29wdCk7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIGNvbmNhdGVuYXRlRXJyb3Jz
KHN0YWNrLCBleGNlcHRpb24pIHsKKyAgICAvLyBJZiB0aGUgZXhjZXB0aW9uIGRvZXMgbm90IGNv
bnRhaW4gYSBzdGFjayB0cmFjZSwgd3JhcCBpdCBpbiBhIG5ldyBFcnJvci4KKyAgICBpZiAoIWV4
Y2VwdGlvbi5zdGFjaykgZXhjZXB0aW9uID0gbmV3IEVycm9yKGV4Y2VwdGlvbik7CisKKyAgICAv
LyBJZiB0aGUgZXhjZXB0aW9uIGFscmVhZHkgcHJvdmlkZXMgYSBzcGVjaWFsIHN0YWNrIHRyYWNl
LCB3ZSBkbyBub3QgbW9kaWZ5CisgICAgLy8gaXQuCisgICAgaWYgKHR5cGVvZiBleGNlcHRpb24u
c3RhY2sgIT09ICdzdHJpbmcnKSB7CisgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgIH0KKyAg
ICBleGNlcHRpb24uc3RhY2sgPSBzdGFjayArICdcblxuJyArIGV4Y2VwdGlvbi5zdGFjazsKKyAg
ICByZXR1cm4gZXhjZXB0aW9uOworICB9CisKKyAgYXNzZXJ0UHJvbWlzZVJlc3VsdCA9IGZ1bmN0
aW9uKHByb21pc2UsIHN1Y2Nlc3MsIGZhaWwpIHsKKyAgICBpZiAoc3VjY2VzcyAhPT0gdW5kZWZp
bmVkKSBhc3NlcnRFcXVhbHMoJ2Z1bmN0aW9uJywgdHlwZW9mIHN1Y2Nlc3MpOworICAgIGlmIChm
YWlsICE9PSB1bmRlZmluZWQpIGFzc2VydEVxdWFscygnZnVuY3Rpb24nLCB0eXBlb2YgZmFpbCk7
CisgICAgYXNzZXJ0SW5zdGFuY2VvZihwcm9taXNlLCBQcm9taXNlKTsKKyAgICBjb25zdCBzdGFj
ayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7CisKKyAgICB2YXIgdGVzdF9wcm9taXNlID0gcHJvbWlz
ZS50aGVuKAorICAgICAgICByZXN1bHQgPT4geworICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICBpZiAoLS1wcm9taXNlVGVzdENvdW50ID09IDApIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwor
ICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgIT09IHVuZGVmaW5lZCkgc3VjY2VzcyhyZXN1bHQpOwor
ICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRv
IHRocm93IHRoZSBlcnJvciBhZ2FpbiB0byBnZXQgb3V0IG9mIHRoZSBwcm9taXNlCisgICAgICAg
ICAgICAvLyBjaGFpbi4KKyAgICAgICAgICAgIHNldFRpbWVvdXQoXyA9PiB7CisgICAgICAgICAg
ICAgIHRocm93IGNvbmNhdGVuYXRlRXJyb3JzKHN0YWNrLCBlKTsKKyAgICAgICAgICAgIH0sIDAp
OworICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgcmVzdWx0ID0+IHsKKyAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgaWYgKC0tcHJvbWlzZVRlc3RDb3VudCA9PSAwKSB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIGlmIChmYWlsID09PSB1bmRlZmluZWQpIHRo
cm93IHJlc3VsdDsKKyAgICAgICAgICAgIGZhaWwocmVzdWx0KTsKKyAgICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICAvLyBVc2Ugc2V0VGltZW91dCB0byB0aHJvdyB0aGUgZXJyb3Ig
YWdhaW4gdG8gZ2V0IG91dCBvZiB0aGUgcHJvbWlzZQorICAgICAgICAgICAgLy8gY2hhaW4uCisg
ICAgICAgICAgICBzZXRUaW1lb3V0KF8gPT4geworICAgICAgICAgICAgICB0aHJvdyBjb25jYXRl
bmF0ZUVycm9ycyhzdGFjaywgZSk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0pOworCisgICAgaWYgKCFwcm9taXNlVGVzdENoYWluKSBwcm9taXNlVGVzdENoYWlu
ID0gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgLy8gd2FpdFVudGlsRG9uZSBpcyBpZGVtcG90ZW50
LgorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICsrcHJvbWlzZVRlc3RDb3Vu
dDsKKyAgICByZXR1cm4gcHJvbWlzZVRlc3RDaGFpbi50aGVuKHRlc3RfcHJvbWlzZSk7CisgIH07
CisKKyAgdmFyIE9wdGltaXphdGlvblN0YXR1c0ltcGwgPSB1bmRlZmluZWQ7CisKKyAgdmFyIE9w
dGltaXphdGlvblN0YXR1cyA9IGZ1bmN0aW9uKGZ1bikgeworICAgIGlmIChPcHRpbWl6YXRpb25T
dGF0dXNJbXBsID09PSB1bmRlZmluZWQpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIE9wdGltaXph
dGlvblN0YXR1c0ltcGwgPSBuZXcgRnVuY3Rpb24oCisgICAgICAgICAgICAiZnVuIiwgInJldHVy
biAlR2V0T3B0aW1pemF0aW9uU3RhdHVzKGZ1bik7Iik7CisgICAgICB9IGNhdGNoIChlKSB7Cisg
ICAgICAgIHRocm93IG5ldyBFcnJvcigibmF0aXZlcyBzeW50YXggbm90IGFsbG93ZWQiKTsKKyAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE9wdGltaXphdGlvblN0YXR1c0ltcGwoZnVuKTsKKyAg
fQorCisgIGFzc2VydFVub3B0aW1pemVkID0gZnVuY3Rpb24gYXNzZXJ0VW5vcHRpbWl6ZWQoCisg
ICAgICBmdW4sIG5hbWVfb3B0LCBza2lwX2lmX21heWJlX2Rlb3B0ZWQgPSB0cnVlKSB7CisgICAg
dmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0dXMoZnVuKTsKKyAgICAvLyBUZXN0cyB0
aGF0IHVzZSBhc3NlcnRVbm9wdGltaXplZCgpIGRvIG5vdCBtYWtlIHNlbnNlIGlmIC0tYWx3YXlz
LW9wdAorICAgIC8vIG9wdGlvbiBpcyBwcm92aWRlZC4gU3VjaCB0ZXN0cyBtdXN0IGFkZCAtLW5v
LWFsd2F5cy1vcHQgdG8gZmxhZ3MgY29tbWVudC4KKyAgICBhc3NlcnRGYWxzZSgob3B0X3N0YXR1
cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtBbHdheXNPcHRpbWl6ZSkgIT09IDAsCisgICAgICAg
ICAgICAgICAgInRlc3QgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIC0tYWx3YXlzLW9wdCIpOwor
ICAgIGFzc2VydFRydWUoKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rSXNGdW5j
dGlvbikgIT09IDAsIG5hbWVfb3B0KTsKKyAgICBpZiAoc2tpcF9pZl9tYXliZV9kZW9wdGVkICYm
CisgICAgICAgIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua01heWJlRGVvcHRl
ZCkgIT09IDApIHsKKyAgICAgIC8vIFdoZW4gLS1kZW9wdC1ldmVyeS1uLXRpbWVzIGZsYWcgaXMg
c3BlY2lmaWVkIGl0J3Mgbm8gbG9uZ2VyIGd1YXJhbnRlZWQKKyAgICAgIC8vIHRoYXQgcGFydGlj
dWxhciBmdW5jdGlvbiBpcyBzdGlsbCBkZW9wdGltaXplZCwgc28ga2VlcCBydW5uaW5nIHRoZSB0
ZXN0CisgICAgICAvLyB0byBzdHJlc3MgdGVzdCB0aGUgZGVvcHRpbWl6ZXIuCisgICAgICByZXR1
cm47CisgICAgfQorICAgIHZhciBpc19vcHRpbWl6ZWQgPSAob3B0X3N0YXR1cyAmIFY4T3B0aW1p
emF0aW9uU3RhdHVzLmtPcHRpbWl6ZWQpICE9PSAwOworICAgIGFzc2VydEZhbHNlKGlzX29wdGlt
aXplZCwgbmFtZV9vcHQpOworICB9CisKKyAgYXNzZXJ0T3B0aW1pemVkID0gZnVuY3Rpb24gYXNz
ZXJ0T3B0aW1pemVkKAorICAgICAgZnVuLCBuYW1lX29wdCwgc2tpcF9pZl9tYXliZV9kZW9wdGVk
ID0gdHJ1ZSkgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKGZ1bik7
CisgICAgLy8gVGVzdHMgdGhhdCB1c2UgYXNzZXJ0T3B0aW1pemVkKCkgZG8gbm90IG1ha2Ugc2Vu
c2UgZm9yIExpdGUgbW9kZSB3aGVyZQorICAgIC8vIG9wdGltaXphdGlvbiBpcyBhbHdheXMgZGlz
YWJsZWQsIGV4cGxpY2l0bHkgZXhpdCB0aGUgdGVzdCB3aXRoIGEgd2FybmluZy4KKyAgICBpZiAo
b3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtMaXRlTW9kZSkgeworICAgICAgcHJp
bnQoIldhcm5pbmc6IFRlc3QgdXNlcyBhc3NlcnRPcHRpbWl6ZWQgaW4gTGl0ZSBtb2RlLCBza2lw
cGluZyB0ZXN0LiIpOworICAgICAgdGVzdFJ1bm5lci5xdWl0KDApOworICAgIH0KKyAgICAvLyBU
ZXN0cyB0aGF0IHVzZSBhc3NlcnRPcHRpbWl6ZWQoKSBkbyBub3QgbWFrZSBzZW5zZSBpZiAtLW5v
LW9wdAorICAgIC8vIG9wdGlvbiBpcyBwcm92aWRlZC4gU3VjaCB0ZXN0cyBtdXN0IGFkZCAtLW9w
dCB0byBmbGFncyBjb21tZW50LgorICAgIGFzc2VydEZhbHNlKChvcHRfc3RhdHVzICYgVjhPcHRp
bWl6YXRpb25TdGF0dXMua05ldmVyT3B0aW1pemUpICE9PSAwLAorICAgICAgICAgICAgICAgICJ0
ZXN0IGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCAtLW5vLW9wdCIpOworICAgIGFzc2VydFRydWUo
CisgICAgICAgIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rpb24p
ICE9PSAwLAorICAgICAgICAnc2hvdWxkIGJlIGEgZnVuY3Rpb246ICcgKyBuYW1lX29wdCk7Cisg
ICAgaWYgKHNraXBfaWZfbWF5YmVfZGVvcHRlZCAmJgorICAgICAgICAob3B0X3N0YXR1cyAmIFY4
T3B0aW1pemF0aW9uU3RhdHVzLmtNYXliZURlb3B0ZWQpICE9PSAwKSB7CisgICAgICAvLyBXaGVu
IC0tZGVvcHQtZXZlcnktbi10aW1lcyBmbGFnIGlzIHNwZWNpZmllZCBpdCdzIG5vIGxvbmdlciBn
dWFyYW50ZWVkCisgICAgICAvLyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgc3RpbGwgb3B0
aW1pemVkLCBzbyBrZWVwIHJ1bm5pbmcgdGhlIHRlc3QKKyAgICAgIC8vIHRvIHN0cmVzcyB0ZXN0
IHRoZSBkZW9wdGltaXplci4KKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXNzZXJ0VHJ1ZSgK
KyAgICAgICAgKG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rT3B0aW1pemVkKSAh
PT0gMCwKKyAgICAgICAgJ3Nob3VsZCBiZSBvcHRpbWl6ZWQ6ICcgKyBuYW1lX29wdCk7CisgIH0K
KworICBpc05ldmVyT3B0aW1pemVMaXRlTW9kZSA9IGZ1bmN0aW9uIGlzTmV2ZXJPcHRpbWl6ZUxp
dGVNb2RlKCkgeworICAgIHZhciBvcHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKHVuZGVm
aW5lZCwgIiIpOworICAgIHJldHVybiAob3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVz
LmtMaXRlTW9kZSkgIT09IDA7CisgIH0KKworICBpc05ldmVyT3B0aW1pemUgPSBmdW5jdGlvbiBp
c05ldmVyT3B0aW1pemUoKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBPcHRpbWl6YXRpb25TdGF0
dXModW5kZWZpbmVkLCAiIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRp
b25TdGF0dXMua05ldmVyT3B0aW1pemUpICE9PSAwOworICB9CisKKyAgaXNBbHdheXNPcHRpbWl6
ZSA9IGZ1bmN0aW9uIGlzQWx3YXlzT3B0aW1pemUoKSB7CisgICAgdmFyIG9wdF9zdGF0dXMgPSBP
cHRpbWl6YXRpb25TdGF0dXModW5kZWZpbmVkLCAiIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVz
ICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0Fsd2F5c09wdGltaXplKSAhPT0gMDsKKyAgfQorCisg
IGlzSW50ZXJwcmV0ZWQgPSBmdW5jdGlvbiBpc0ludGVycHJldGVkKGZ1bikgeworICAgIHZhciBv
cHRfc3RhdHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKGZ1biwgIiIpOworICAgIGFzc2VydFRydWUo
KG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisg
ICAgICAgICAgICAgICAibm90IGEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMg
JiBWOE9wdGltaXphdGlvblN0YXR1cy5rT3B0aW1pemVkKSA9PT0gMCAmJgorICAgICAgICAgICAo
b3B0X3N0YXR1cyAmIFY4T3B0aW1pemF0aW9uU3RhdHVzLmtJbnRlcnByZXRlZCkgIT09IDA7Cisg
IH0KKworICBpc0Jhc2VsaW5lID0gZnVuY3Rpb24gaXNCYXNlbGluZShmdW4pIHsKKyAgICB2YXIg
b3B0X3N0YXR1cyA9IE9wdGltaXphdGlvblN0YXR1cyhmdW4sICIiKTsKKyAgICBhc3NlcnRUcnVl
KChvcHRfc3RhdHVzICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua0lzRnVuY3Rpb24pICE9PSAwLAor
ICAgICAgICAgICAgICAgIm5vdCBhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJuIChvcHRfc3RhdHVz
ICYgVjhPcHRpbWl6YXRpb25TdGF0dXMua09wdGltaXplZCkgPT09IDAgJiYKKyAgICAgICAgICAg
KG9wdF9zdGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rQmFzZWxpbmUpICE9PSAwOworICB9
CisKKyAgaXNVbm9wdGltaXplZCA9IGZ1bmN0aW9uIGlzVW5vcHRpbWl6ZWQoZnVuKSB7CisgICAg
cmV0dXJuIGlzSW50ZXJwcmV0ZWQoZnVuKSB8fCBpc0Jhc2VsaW5lKGZ1bik7CisgIH0KKworICBp
c09wdGltaXplZCA9IGZ1bmN0aW9uIGlzT3B0aW1pemVkKGZ1bikgeworICAgIHZhciBvcHRfc3Rh
dHVzID0gT3B0aW1pemF0aW9uU3RhdHVzKGZ1biwgIiIpOworICAgIGFzc2VydFRydWUoKG9wdF9z
dGF0dXMgJiBWOE9wdGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAgICAg
ICAgICAgICAibm90IGEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9w
dGltaXphdGlvblN0YXR1cy5rT3B0aW1pemVkKSAhPT0gMDsKKyAgfQorCisgIGlzVHVyYm9GYW5u
ZWQgPSBmdW5jdGlvbiBpc1R1cmJvRmFubmVkKGZ1bikgeworICAgIHZhciBvcHRfc3RhdHVzID0g
T3B0aW1pemF0aW9uU3RhdHVzKGZ1biwgIiIpOworICAgIGFzc2VydFRydWUoKG9wdF9zdGF0dXMg
JiBWOE9wdGltaXphdGlvblN0YXR1cy5rSXNGdW5jdGlvbikgIT09IDAsCisgICAgICAgICAgICAg
ICAibm90IGEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gKG9wdF9zdGF0dXMgJiBWOE9wdGltaXph
dGlvblN0YXR1cy5rT3B0aW1pemVkKSAhPT0gMCAmJgorICAgICAgICAgICAob3B0X3N0YXR1cyAm
IFY4T3B0aW1pemF0aW9uU3RhdHVzLmtUdXJib0Zhbm5lZCkgIT09IDA7CisgIH0KKworICAvLyBD
dXN0b20gVjgtc3BlY2lmaWMgc3RhY2sgdHJhY2UgZm9ybWF0dGVyIHRoYXQgaXMgdGVtcG9yYXJp
bHkgaW5zdGFsbGVkIG9uCisgIC8vIHRoZSBFcnJvciBvYmplY3QuCisgIE1qc1VuaXRBc3NlcnRp
b25FcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IGZ1bmN0aW9uKGVycm9yLCBzdGFjaykgeworICAg
IC8vIFRyaWdnZXIgZGVmYXVsdCBmb3JtYXR0aW5nIHdpdGggcmVjdXJzaW9uLgorICAgIHRyeSB7
CisgICAgICAvLyBGaWx0ZXItb3V0IGFsbCBidXQgdGhlIGZpcnN0IG1qc3VuaXQgZnJhbWUuCisg
ICAgICBsZXQgZmlsdGVyZWRTdGFjayA9IFtdOworICAgICAgbGV0IGluTWpzdW5pdCA9IHRydWU7
CisgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
IGxldCBmcmFtZSA9IHN0YWNrW2ldOworICAgICAgICBpZiAoaW5NanN1bml0KSB7CisgICAgICAg
ICAgbGV0IGZpbGUgPSBmcmFtZS5nZXRGaWxlTmFtZSgpOworICAgICAgICAgIGlmICghZmlsZSB8
fCAhZmlsZS5lbmRzV2l0aCgibWpzdW5pdC5qcyIpKSB7CisgICAgICAgICAgICBpbk1qc3VuaXQg
PSBmYWxzZTsKKyAgICAgICAgICAgIC8vIFB1c2ggdGhlIGxhc3QgbWpzdW5pdCBmcmFtZSwgdHlw
aWNhbGx5IGNvbnRhaW5pbmcgdGhlIGFzc2VydGlvbgorICAgICAgICAgICAgLy8gZnVuY3Rpb24u
CisgICAgICAgICAgICBpZiAoaSA+IDApIEFycmF5UHJvdG90eXBlUHVzaC5jYWxsKGZpbHRlcmVk
U3RhY2ssIHN0YWNrW2ktMV0pOworICAgICAgICAgICAgQXJyYXlQcm90b3R5cGVQdXNoLmNhbGwo
ZmlsdGVyZWRTdGFjaywgc3RhY2tbaV0pOworICAgICAgICAgIH0KKyAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICBBcnJheVByb3RvdHlwZVB1c2guY2FsbChmaWx0ZXJlZFN0
YWNrLCBmcmFtZSk7CisgICAgICB9CisgICAgICBzdGFjayA9IGZpbHRlcmVkU3RhY2s7CisKKyAg
ICAgIC8vIEluZmVyIGZ1bmN0aW9uIG5hbWVzIGFuZCBjYWxjdWxhdGUge21heF9uYW1lX2xlbmd0
aH0KKyAgICAgIGxldCBtYXhfbmFtZV9sZW5ndGggPSAwOworICAgICAgQXJyYXlQcm90b3R5cGVG
b3JFYWNoLmNhbGwoc3RhY2ssIGVhY2ggPT4geworICAgICAgICBsZXQgbmFtZSA9IGVhY2guZ2V0
RnVuY3Rpb25OYW1lKCk7CisgICAgICAgIGlmIChuYW1lID09IG51bGwpIG5hbWUgPSAiIjsKKyAg
ICAgICAgaWYgKGVhY2guaXNFdmFsKCkpIHsKKyAgICAgICAgICBuYW1lID0gbmFtZTsKKyAgICAg
ICAgfSBlbHNlIGlmIChlYWNoLmlzQ29uc3RydWN0b3IoKSkgeworICAgICAgICAgIG5hbWUgPSAi
bmV3ICIgKyBuYW1lOworICAgICAgICB9IGVsc2UgaWYgKGVhY2guaXNOYXRpdmUoKSkgeworICAg
ICAgICAgIG5hbWUgPSAibmF0aXZlICIgKyBuYW1lOworICAgICAgICB9IGVsc2UgaWYgKCFlYWNo
LmlzVG9wbGV2ZWwoKSkgeworICAgICAgICAgIG5hbWUgPSBlYWNoLmdldFR5cGVOYW1lKCkgKyAi
LiIgKyBuYW1lOworICAgICAgICB9CisgICAgICAgIGVhY2gubmFtZSA9IG5hbWU7CisgICAgICAg
IG1heF9uYW1lX2xlbmd0aCA9IE1hdGgubWF4KG5hbWUubGVuZ3RoLCBtYXhfbmFtZV9sZW5ndGgp
CisgICAgICB9KTsKKworICAgICAgLy8gRm9ybWF0IHN0YWNrIGZyYW1lcy4KKyAgICAgIHN0YWNr
ID0gQXJyYXlQcm90b3R5cGVNYXAuY2FsbChzdGFjaywgZWFjaCA9PiB7CisgICAgICAgIGxldCBm
cmFtZSA9ICIgICAgYXQgIiArIGVhY2gubmFtZS5wYWRFbmQobWF4X25hbWVfbGVuZ3RoKTsKKyAg
ICAgICAgbGV0IGZpbGVOYW1lID0gZWFjaC5nZXRGaWxlTmFtZSgpOworICAgICAgICBpZiAoZWFj
aC5pc0V2YWwoKSkgcmV0dXJuIGZyYW1lICsgIiAiICsgZWFjaC5nZXRFdmFsT3JpZ2luKCk7Cisg
ICAgICAgIGZyYW1lICs9ICIgIiArIChmaWxlTmFtZSA/IGZpbGVOYW1lIDogIiIpOworICAgICAg
ICBsZXQgbGluZT0gZWFjaC5nZXRMaW5lTnVtYmVyKCk7CisgICAgICAgIGZyYW1lICs9ICIgIiAr
IChsaW5lID8gbGluZSA6ICIiKTsKKyAgICAgICAgbGV0IGNvbHVtbiA9IGVhY2guZ2V0Q29sdW1u
TnVtYmVyKCk7CisgICAgICAgIGZyYW1lICs9IChjb2x1bW4gPyAiOiIgKyBjb2x1bW4gOiAiIik7
CisgICAgICAgIHJldHVybiBmcmFtZTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuICIiICsgZXJy
b3IubWVzc2FnZSArICJcbiIgKyBBcnJheVByb3RvdHlwZUpvaW4uY2FsbChzdGFjaywgIlxuIik7
CisgICAgfSBjYXRjaCAoZSkge307CisgICAgcmV0dXJuIGVycm9yLnN0YWNrOworICB9Cit9KSgp
OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3Y4L3dhc20tbW9kdWxlLWJ1aWxkZXIuanMgYi9K
U1Rlc3RzL3dhc20vdjgvd2FzbS1tb2R1bGUtYnVpbGRlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NjdlZDg0
ZDBlNTlmMjg1MmFjYTRhNTIyM2ZkNTllOWZlZGY3YjEwCi0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3Y4L3dhc20tbW9kdWxlLWJ1aWxkZXIuanMKQEAgLTAsMCArMSwyMTY5IEBACisv
LyBDb3B5cmlnaHQgMjAxNiB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKwor
Ly8gVXNlZCBmb3IgZW5jb2RpbmcgZjMyIGFuZCBkb3VibGUgY29uc3RhbnRzIHRvIGJpdHMuCits
ZXQgYnl0ZV92aWV3ID0gbmV3IFVpbnQ4QXJyYXkoOCk7CitsZXQgZGF0YV92aWV3ID0gbmV3IERh
dGFWaWV3KGJ5dGVfdmlldy5idWZmZXIpOworCisvLyBUaGUgYnl0ZXMgZnVuY3Rpb24gcmVjZWl2
ZXMgb25lIG9mCisvLyAgLSBzZXZlcmFsIGFyZ3VtZW50cywgZWFjaCBvZiB3aGljaCBpcyBlaXRo
ZXIgYSBudW1iZXIgb3IgYSBzdHJpbmcgb2YgbGVuZ3RoCisvLyAgICAxOyBpZiBpdCdzIGEgc3Ry
aW5nLCB0aGUgY2hhcmNvZGUgb2YgdGhlIGNvbnRhaW5lZCBjaGFyYWN0ZXIgaXMgdXNlZC4KKy8v
ICAtIGEgc2luZ2xlIGFycmF5IGFyZ3VtZW50IGNvbnRhaW5pbmcgdGhlIGFjdHVhbCBhcmd1bWVu
dHMKKy8vICAtIGEgc2luZ2xlIHN0cmluZzsgdGhlIHJldHVybmVkIGJ1ZmZlciB3aWxsIGNvbnRh
aW4gdGhlIGNoYXIgY29kZXMgb2YgYWxsCisvLyAgICBjb250YWluZWQgY2hhcmFjdGVycy4KK2Z1
bmN0aW9uIGJ5dGVzKC4uLmlucHV0KSB7CisgIGlmIChpbnB1dC5sZW5ndGggPT0gMSAmJiB0eXBl
b2YgaW5wdXRbMF0gPT0gJ2FycmF5JykgaW5wdXQgPSBpbnB1dFswXTsKKyAgaWYgKGlucHV0Lmxl
bmd0aCA9PSAxICYmIHR5cGVvZiBpbnB1dFswXSA9PSAnc3RyaW5nJykgeworICAgIGxldCBsZW4g
PSBpbnB1dFswXS5sZW5ndGg7CisgICAgbGV0IHZpZXcgPSBuZXcgVWludDhBcnJheShsZW4pOwor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHZpZXdbaV0gPSBpbnB1dFswXS5jaGFy
Q29kZUF0KGkpOworICAgIHJldHVybiB2aWV3LmJ1ZmZlcjsKKyAgfQorICBsZXQgdmlldyA9IG5l
dyBVaW50OEFycmF5KGlucHV0Lmxlbmd0aCk7CisgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQu
bGVuZ3RoOyBpKyspIHsKKyAgICBsZXQgdmFsID0gaW5wdXRbaV07CisgICAgaWYgKHR5cGVvZiB2
YWwgPT0gJ3N0cmluZycpIHsKKyAgICAgIGlmICh2YWwubGVuZ3RoICE9IDEpIHsKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgaW5wdXRzIG11c3QgaGF2ZSBsZW5ndGggMScpOworICAg
ICAgfQorICAgICAgdmFsID0gdmFsLmNoYXJDb2RlQXQoMCk7CisgICAgfQorICAgIHZpZXdbaV0g
PSB2YWwgfCAwOworICB9CisgIHJldHVybiB2aWV3LmJ1ZmZlcjsKK30KKworLy8gSGVhZGVyIGRl
Y2xhcmF0aW9uIGNvbnN0YW50cwordmFyIGtXYXNtSDAgPSAwOwordmFyIGtXYXNtSDEgPSAweDYx
OwordmFyIGtXYXNtSDIgPSAweDczOwordmFyIGtXYXNtSDMgPSAweDZkOworCit2YXIga1dhc21W
MCA9IDB4MTsKK3ZhciBrV2FzbVYxID0gMDsKK3ZhciBrV2FzbVYyID0gMDsKK3ZhciBrV2FzbVYz
ID0gMDsKKwordmFyIGtIZWFkZXJTaXplID0gODsKK3ZhciBrUGFnZVNpemUgPSA2NTUzNjsKK3Zh
ciBrU3BlY01heFBhZ2VzID0gNjU1MzY7Cit2YXIga01heFZhckludDMyU2l6ZSA9IDU7Cit2YXIg
a01heFZhckludDY0U2l6ZSA9IDEwOworCitsZXQga0RlY2xOb0xvY2FscyA9IDA7CisKKy8vIFNl
Y3Rpb24gZGVjbGFyYXRpb24gY29uc3RhbnRzCitsZXQga1Vua25vd25TZWN0aW9uQ29kZSA9IDA7
CitsZXQga1R5cGVTZWN0aW9uQ29kZSA9IDE7ICAgICAgICAvLyBGdW5jdGlvbiBzaWduYXR1cmUg
ZGVjbGFyYXRpb25zCitsZXQga0ltcG9ydFNlY3Rpb25Db2RlID0gMjsgICAgICAvLyBJbXBvcnQg
ZGVjbGFyYXRpb25zCitsZXQga0Z1bmN0aW9uU2VjdGlvbkNvZGUgPSAzOyAgICAvLyBGdW5jdGlv
biBkZWNsYXJhdGlvbnMKK2xldCBrVGFibGVTZWN0aW9uQ29kZSA9IDQ7ICAgICAgIC8vIEluZGly
ZWN0IGZ1bmN0aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMKK2xldCBrTWVtb3J5U2VjdGlvbkNv
ZGUgPSA1OyAgICAgIC8vIE1lbW9yeSBhdHRyaWJ1dGVzCitsZXQga0dsb2JhbFNlY3Rpb25Db2Rl
ID0gNjsgICAgICAvLyBHbG9iYWwgZGVjbGFyYXRpb25zCitsZXQga0V4cG9ydFNlY3Rpb25Db2Rl
ID0gNzsgICAgICAvLyBFeHBvcnRzCitsZXQga1N0YXJ0U2VjdGlvbkNvZGUgPSA4OyAgICAgICAv
LyBTdGFydCBmdW5jdGlvbiBkZWNsYXJhdGlvbgorbGV0IGtFbGVtZW50U2VjdGlvbkNvZGUgPSA5
OyAgICAgLy8gRWxlbWVudHMgc2VjdGlvbgorbGV0IGtDb2RlU2VjdGlvbkNvZGUgPSAxMDsgICAg
ICAgLy8gRnVuY3Rpb24gY29kZQorbGV0IGtEYXRhU2VjdGlvbkNvZGUgPSAxMTsgICAgICAgLy8g
RGF0YSBzZWdtZW50cworbGV0IGtEYXRhQ291bnRTZWN0aW9uQ29kZSA9IDEyOyAgLy8gRGF0YSBz
ZWdtZW50IGNvdW50IChiZXR3ZWVuIEVsZW1lbnQgJiBDb2RlKQorbGV0IGtUYWdTZWN0aW9uQ29k
ZSA9IDEzOyAgICAgICAgLy8gVGFnIHNlY3Rpb24gKGJldHdlZW4gTWVtb3J5ICYgR2xvYmFsKQor
CisvLyBOYW1lIHNlY3Rpb24gdHlwZXMKK2xldCBrTW9kdWxlTmFtZUNvZGUgPSAwOworbGV0IGtG
dW5jdGlvbk5hbWVzQ29kZSA9IDE7CitsZXQga0xvY2FsTmFtZXNDb2RlID0gMjsKKworbGV0IGtX
YXNtRnVuY3Rpb25UeXBlRm9ybSA9IDB4NjA7CitsZXQga1dhc21TdHJ1Y3RUeXBlRm9ybSA9IDB4
NWY7CitsZXQga1dhc21BcnJheVR5cGVGb3JtID0gMHg1ZTsKK2xldCBrV2FzbUZ1bmN0aW9uU3Vi
dHlwZUZvcm0gPSAweDVkOworbGV0IGtXYXNtU3RydWN0U3VidHlwZUZvcm0gPSAweDVjOworbGV0
IGtXYXNtQXJyYXlTdWJ0eXBlRm9ybSA9IDB4NWI7CisKK2xldCBrTGltaXRzTm9NYXhpbXVtID0g
MHgwMDsKK2xldCBrTGltaXRzV2l0aE1heGltdW0gPSAweDAxOworbGV0IGtMaW1pdHNTaGFyZWRO
b01heGltdW0gPSAweDAyOworbGV0IGtMaW1pdHNTaGFyZWRXaXRoTWF4aW11bSA9IDB4MDM7Cits
ZXQga0xpbWl0c01lbW9yeTY0Tm9NYXhpbXVtID0gMHgwNDsKK2xldCBrTGltaXRzTWVtb3J5NjRX
aXRoTWF4aW11bSA9IDB4MDU7CisKKy8vIFNlZ21lbnQgZmxhZ3MKK2xldCBrQWN0aXZlTm9JbmRl
eCA9IDA7CitsZXQga1Bhc3NpdmUgPSAxOworbGV0IGtBY3RpdmVXaXRoSW5kZXggPSAyOworbGV0
IGtEZWNsYXJhdGl2ZSA9IDM7CitsZXQga1Bhc3NpdmVXaXRoRWxlbWVudHMgPSA1OworbGV0IGtE
ZWNsYXJhdGl2ZVdpdGhFbGVtZW50cyA9IDc7CisKKy8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uIGZs
YWdzCitsZXQga0RlY2xGdW5jdGlvbk5hbWUgPSAweDAxOworbGV0IGtEZWNsRnVuY3Rpb25JbXBv
cnQgPSAweDAyOworbGV0IGtEZWNsRnVuY3Rpb25Mb2NhbHMgPSAweDA0OworbGV0IGtEZWNsRnVu
Y3Rpb25FeHBvcnQgPSAweDA4OworCisvLyBWYWx1ZSB0eXBlcyBhbmQgcmVsYXRlZAorbGV0IGtX
YXNtVm9pZCA9IDB4NDA7CitsZXQga1dhc21JMzIgPSAweDdmOworbGV0IGtXYXNtSTY0ID0gMHg3
ZTsKK2xldCBrV2FzbUYzMiA9IDB4N2Q7CitsZXQga1dhc21GNjQgPSAweDdjOworbGV0IGtXYXNt
UzEyOCA9IDB4N2I7CitsZXQga1dhc21JOCA9IDB4N2E7CitsZXQga1dhc21JMTYgPSAweDc5Owor
CisvLyBUaGVzZSBhcmUgZGVmaW5lZCBhcyBuZWdhdGl2ZSBpbnRlZ2VycyB0byBkaXN0aW5ndWlz
aCB0aGVtIGZyb20gcG9zaXRpdmUgdHlwZQorLy8gaW5kaWNlcy4KK2xldCBrV2FzbUZ1bmNSZWYg
PSAtMHgxMDsKK2xldCBrV2FzbUFueUZ1bmMgPSBrV2FzbUZ1bmNSZWY7ICAvLyBBbGlhcyBuYW1l
ZCBhcyBpbiB0aGUgSlMgQVBJIHNwZWMKK2xldCBrV2FzbUV4dGVyblJlZiA9IC0weDExOworbGV0
IGtXYXNtQW55UmVmID0gLTB4MTI7CitsZXQga1dhc21FcVJlZiA9IC0weDEzOworbGV0IGtXYXNt
STMxUmVmID0gLTB4MTY7CitsZXQga1dhc21EYXRhUmVmID0gLTB4MTk7CisKKy8vIFVzZSB0aGUg
cG9zaXRpdmUtYnl0ZSB2ZXJzaW9ucyBpbnNpZGUgZnVuY3Rpb24gYm9kaWVzLgorbGV0IGtMZWIx
MjhNYXNrID0gMHg3ZjsKK2xldCBrRnVuY1JlZkNvZGUgPSBrV2FzbUZ1bmNSZWYgJiBrTGViMTI4
TWFzazsKK2xldCBrQW55RnVuY0NvZGUgPSBrRnVuY1JlZkNvZGU7ICAvLyBBbGlhcyBuYW1lZCBh
cyBpbiB0aGUgSlMgQVBJIHNwZWMKK2xldCBrRXh0ZXJuUmVmQ29kZSA9IGtXYXNtRXh0ZXJuUmVm
ICYga0xlYjEyOE1hc2s7CitsZXQga0FueVJlZkNvZGUgPSBrV2FzbUFueVJlZiAmIGtMZWIxMjhN
YXNrOworbGV0IGtFcVJlZkNvZGUgPSBrV2FzbUVxUmVmICYga0xlYjEyOE1hc2s7CitsZXQga0kz
MVJlZkNvZGUgPSBrV2FzbUkzMVJlZiAgJiBrTGViMTI4TWFzazsKK2xldCBrRGF0YVJlZkNvZGUg
PSBrV2FzbURhdGFSZWYgICYga0xlYjEyOE1hc2s7CisKK2xldCBrV2FzbU9wdFJlZiA9IDB4NmM7
CitsZXQga1dhc21SZWYgPSAweDZiOworZnVuY3Rpb24gd2FzbU9wdFJlZlR5cGUoaGVhcF90eXBl
KSB7CisgIHJldHVybiB7b3Bjb2RlOiBrV2FzbU9wdFJlZiwgaGVhcF90eXBlOiBoZWFwX3R5cGV9
OworfQorZnVuY3Rpb24gd2FzbVJlZlR5cGUoaGVhcF90eXBlKSB7CisgIHJldHVybiB7b3Bjb2Rl
OiBrV2FzbVJlZiwgaGVhcF90eXBlOiBoZWFwX3R5cGV9OworfQorCitsZXQga1dhc21SdHRXaXRo
RGVwdGggPSAweDY5OworZnVuY3Rpb24gd2FzbVJ0dChpbmRleCwgZGVwdGgpIHsKKyAgaWYgKGlu
ZGV4IDwgMCkgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3Rpbmcgbm9uLW5lZ2F0aXZlIHR5cGUgaW5k
ZXgiKTsKKyAgcmV0dXJuIHtvcGNvZGU6IGtXYXNtUnR0V2l0aERlcHRoLCBpbmRleDogaW5kZXgs
IGRlcHRoOiBkZXB0aH07Cit9CitsZXQga1dhc21SdHQgPSAweDY4OworZnVuY3Rpb24gd2FzbVJ0
dE5vRGVwdGgoaW5kZXgpIHsKKyAgaWYgKGluZGV4IDwgMCkgdGhyb3cgbmV3IEVycm9yKCJFeHBl
Y3Rpbmcgbm9uLW5lZ2F0aXZlIHR5cGUgaW5kZXgiKTsKKyAgcmV0dXJuIHtvcGNvZGU6IGtXYXNt
UnR0LCBpbmRleDogaW5kZXh9OworfQorCitsZXQga0V4dGVybmFsRnVuY3Rpb24gPSAwOworbGV0
IGtFeHRlcm5hbFRhYmxlID0gMTsKK2xldCBrRXh0ZXJuYWxNZW1vcnkgPSAyOworbGV0IGtFeHRl
cm5hbEdsb2JhbCA9IDM7CitsZXQga0V4dGVybmFsVGFnID0gNDsKKworbGV0IGtUYWJsZVplcm8g
PSAwOworbGV0IGtNZW1vcnlaZXJvID0gMDsKK2xldCBrU2VnbWVudFplcm8gPSAwOworCitsZXQg
a0V4Y2VwdGlvbkF0dHJpYnV0ZSA9IDA7CisKKy8vIFVzZWZ1bCBzaWduYXR1cmVzCitsZXQga1Np
Z19pX2kgPSBtYWtlU2lnKFtrV2FzbUkzMl0sIFtrV2FzbUkzMl0pOworbGV0IGtTaWdfbF9sID0g
bWFrZVNpZyhba1dhc21JNjRdLCBba1dhc21JNjRdKTsKK2xldCBrU2lnX2lfbCA9IG1ha2VTaWco
W2tXYXNtSTY0XSwgW2tXYXNtSTMyXSk7CitsZXQga1NpZ19pX2lpID0gbWFrZVNpZyhba1dhc21J
MzIsIGtXYXNtSTMyXSwgW2tXYXNtSTMyXSk7CitsZXQga1NpZ19pX2lpaSA9IG1ha2VTaWcoW2tX
YXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJdLCBba1dhc21JMzJdKTsKK2xldCBrU2lnX3ZfaWlp
aSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSwgW10p
OworbGV0IGtTaWdfZl9mZiA9IG1ha2VTaWcoW2tXYXNtRjMyLCBrV2FzbUYzMl0sIFtrV2FzbUYz
Ml0pOworbGV0IGtTaWdfZF9kZCA9IG1ha2VTaWcoW2tXYXNtRjY0LCBrV2FzbUY2NF0sIFtrV2Fz
bUY2NF0pOworbGV0IGtTaWdfbF9sbCA9IG1ha2VTaWcoW2tXYXNtSTY0LCBrV2FzbUk2NF0sIFtr
V2FzbUk2NF0pOworbGV0IGtTaWdfaV9kZCA9IG1ha2VTaWcoW2tXYXNtRjY0LCBrV2FzbUY2NF0s
IFtrV2FzbUkzMl0pOworbGV0IGtTaWdfdl92ID0gbWFrZVNpZyhbXSwgW10pOworbGV0IGtTaWdf
aV92ID0gbWFrZVNpZyhbXSwgW2tXYXNtSTMyXSk7CitsZXQga1NpZ19sX3YgPSBtYWtlU2lnKFtd
LCBba1dhc21JNjRdKTsKK2xldCBrU2lnX2ZfdiA9IG1ha2VTaWcoW10sIFtrV2FzbUYzMl0pOwor
bGV0IGtTaWdfZF92ID0gbWFrZVNpZyhbXSwgW2tXYXNtRjY0XSk7CitsZXQga1NpZ192X2kgPSBt
YWtlU2lnKFtrV2FzbUkzMl0sIFtdKTsKK2xldCBrU2lnX3ZfaWkgPSBtYWtlU2lnKFtrV2FzbUkz
Miwga1dhc21JMzJdLCBbXSk7CitsZXQga1NpZ192X2lpaSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBr
V2FzbUkzMiwga1dhc21JMzJdLCBbXSk7CitsZXQga1NpZ192X2wgPSBtYWtlU2lnKFtrV2FzbUk2
NF0sIFtdKTsKK2xldCBrU2lnX3ZfZCA9IG1ha2VTaWcoW2tXYXNtRjY0XSwgW10pOworbGV0IGtT
aWdfdl9kZCA9IG1ha2VTaWcoW2tXYXNtRjY0LCBrV2FzbUY2NF0sIFtdKTsKK2xldCBrU2lnX3Zf
ZGRpID0gbWFrZVNpZyhba1dhc21GNjQsIGtXYXNtRjY0LCBrV2FzbUkzMl0sIFtdKTsKK2xldCBr
U2lnX2lpX3YgPSBtYWtlU2lnKFtdLCBba1dhc21JMzIsIGtXYXNtSTMyXSk7CitsZXQga1NpZ19p
aWlfdiA9IG1ha2VTaWcoW10sIFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSk7CitsZXQg
a1NpZ19paV9pID0gbWFrZVNpZyhba1dhc21JMzJdLCBba1dhc21JMzIsIGtXYXNtSTMyXSk7Cits
ZXQga1NpZ19paWlfaSA9IG1ha2VTaWcoW2tXYXNtSTMyXSwgW2tXYXNtSTMyLCBrV2FzbUkzMiwg
a1dhc21JMzJdKTsKK2xldCBrU2lnX2lpX2lpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMy
XSwgW2tXYXNtSTMyLCBrV2FzbUkzMl0pOworbGV0IGtTaWdfaWlpX2lpID0gbWFrZVNpZyhba1dh
c21JMzIsIGtXYXNtSTMyXSwgW2tXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJdKTsKKworbGV0
IGtTaWdfdl9mID0gbWFrZVNpZyhba1dhc21GMzJdLCBbXSk7CitsZXQga1NpZ19mX2YgPSBtYWtl
U2lnKFtrV2FzbUYzMl0sIFtrV2FzbUYzMl0pOworbGV0IGtTaWdfZl9kID0gbWFrZVNpZyhba1dh
c21GNjRdLCBba1dhc21GMzJdKTsKK2xldCBrU2lnX2RfZCA9IG1ha2VTaWcoW2tXYXNtRjY0XSwg
W2tXYXNtRjY0XSk7CitsZXQga1NpZ19yX3IgPSBtYWtlU2lnKFtrV2FzbUV4dGVyblJlZl0sIFtr
V2FzbUV4dGVyblJlZl0pOworbGV0IGtTaWdfYV9hID0gbWFrZVNpZyhba1dhc21BbnlGdW5jXSwg
W2tXYXNtQW55RnVuY10pOworbGV0IGtTaWdfaV9yID0gbWFrZVNpZyhba1dhc21FeHRlcm5SZWZd
LCBba1dhc21JMzJdKTsKK2xldCBrU2lnX3ZfciA9IG1ha2VTaWcoW2tXYXNtRXh0ZXJuUmVmXSwg
W10pOworbGV0IGtTaWdfdl9hID0gbWFrZVNpZyhba1dhc21BbnlGdW5jXSwgW10pOworbGV0IGtT
aWdfdl9yciA9IG1ha2VTaWcoW2tXYXNtRXh0ZXJuUmVmLCBrV2FzbUV4dGVyblJlZl0sIFtdKTsK
K2xldCBrU2lnX3ZfYWEgPSBtYWtlU2lnKFtrV2FzbUFueUZ1bmMsIGtXYXNtQW55RnVuY10sIFtd
KTsKK2xldCBrU2lnX3JfdiA9IG1ha2VTaWcoW10sIFtrV2FzbUV4dGVyblJlZl0pOworbGV0IGtT
aWdfYV92ID0gbWFrZVNpZyhbXSwgW2tXYXNtQW55RnVuY10pOworbGV0IGtTaWdfYV9pID0gbWFr
ZVNpZyhba1dhc21JMzJdLCBba1dhc21BbnlGdW5jXSk7CitsZXQga1NpZ19zX2kgPSBtYWtlU2ln
KFtrV2FzbUkzMl0sIFtrV2FzbVMxMjhdKTsKK2xldCBrU2lnX2lfcyA9IG1ha2VTaWcoW2tXYXNt
UzEyOF0sIFtrV2FzbUkzMl0pOworCitmdW5jdGlvbiBtYWtlU2lnKHBhcmFtcywgcmVzdWx0cykg
eworICByZXR1cm4ge3BhcmFtczogcGFyYW1zLCByZXN1bHRzOiByZXN1bHRzfTsKK30KKworZnVu
Y3Rpb24gbWFrZVNpZ192X3goeCkgeworICByZXR1cm4gbWFrZVNpZyhbeF0sIFtdKTsKK30KKwor
ZnVuY3Rpb24gbWFrZVNpZ194X3YoeCkgeworICByZXR1cm4gbWFrZVNpZyhbXSwgW3hdKTsKK30K
KworZnVuY3Rpb24gbWFrZVNpZ192X3h4KHgpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW3gsIHhdLCBb
XSk7Cit9CisKK2Z1bmN0aW9uIG1ha2VTaWdfcl92KHIpIHsKKyAgcmV0dXJuIG1ha2VTaWcoW10s
IFtyXSk7Cit9CisKK2Z1bmN0aW9uIG1ha2VTaWdfcl94KHIsIHgpIHsKKyAgcmV0dXJuIG1ha2VT
aWcoW3hdLCBbcl0pOworfQorCitmdW5jdGlvbiBtYWtlU2lnX3JfeHgociwgeCkgeworICByZXR1
cm4gbWFrZVNpZyhbeCwgeF0sIFtyXSk7Cit9CisKKy8vIE9wY29kZXMKK2NvbnN0IGtXYXNtT3Bj
b2RlcyA9IHsKKyAgJ1VucmVhY2hhYmxlJzogMHgwMCwKKyAgJ05vcCc6IDB4MDEsCisgICdCbG9j
ayc6IDB4MDIsCisgICdMb29wJzogMHgwMywKKyAgJ0lmJzogMHgwNCwKKyAgJ0Vsc2UnOiAweDA1
LAorICAnVHJ5JzogMHgwNiwKKyAgJ0NhdGNoJzogMHgwNywKKyAgJ1Rocm93JzogMHgwOCwKKyAg
J1JldGhyb3cnOiAweDA5LAorICAnQ2F0Y2hBbGwnOiAweDE5LAorICAnRW5kJzogMHgwYiwKKyAg
J0JyJzogMHgwYywKKyAgJ0JySWYnOiAweDBkLAorICAnQnJUYWJsZSc6IDB4MGUsCisgICdSZXR1
cm4nOiAweDBmLAorICAnQ2FsbEZ1bmN0aW9uJzogMHgxMCwKKyAgJ0NhbGxJbmRpcmVjdCc6IDB4
MTEsCisgICdSZXR1cm5DYWxsJzogMHgxMiwKKyAgJ1JldHVybkNhbGxJbmRpcmVjdCc6IDB4MTMs
CisgICdDYWxsUmVmJzogMHgxNCwKKyAgJ1JldHVybkNhbGxSZWYnOiAweDE1LAorICAnTGV0Jzog
MHgxNywKKyAgJ0RlbGVnYXRlJzogMHgxOCwKKyAgJ0Ryb3AnOiAweDFhLAorICAnU2VsZWN0Jzog
MHgxYiwKKyAgJ1NlbGVjdFdpdGhUeXBlJzogMHgxYywKKyAgJ0xvY2FsR2V0JzogMHgyMCwKKyAg
J0xvY2FsU2V0JzogMHgyMSwKKyAgJ0xvY2FsVGVlJzogMHgyMiwKKyAgJ0dsb2JhbEdldCc6IDB4
MjMsCisgICdHbG9iYWxTZXQnOiAweDI0LAorICAnVGFibGVHZXQnOiAweDI1LAorICAnVGFibGVT
ZXQnOiAweDI2LAorICAnSTMyTG9hZE1lbSc6IDB4MjgsCisgICdJNjRMb2FkTWVtJzogMHgyOSwK
KyAgJ0YzMkxvYWRNZW0nOiAweDJhLAorICAnRjY0TG9hZE1lbSc6IDB4MmIsCisgICdJMzJMb2Fk
TWVtOFMnOiAweDJjLAorICAnSTMyTG9hZE1lbThVJzogMHgyZCwKKyAgJ0kzMkxvYWRNZW0xNlMn
OiAweDJlLAorICAnSTMyTG9hZE1lbTE2VSc6IDB4MmYsCisgICdJNjRMb2FkTWVtOFMnOiAweDMw
LAorICAnSTY0TG9hZE1lbThVJzogMHgzMSwKKyAgJ0k2NExvYWRNZW0xNlMnOiAweDMyLAorICAn
STY0TG9hZE1lbTE2VSc6IDB4MzMsCisgICdJNjRMb2FkTWVtMzJTJzogMHgzNCwKKyAgJ0k2NExv
YWRNZW0zMlUnOiAweDM1LAorICAnSTMyU3RvcmVNZW0nOiAweDM2LAorICAnSTY0U3RvcmVNZW0n
OiAweDM3LAorICAnRjMyU3RvcmVNZW0nOiAweDM4LAorICAnRjY0U3RvcmVNZW0nOiAweDM5LAor
ICAnSTMyU3RvcmVNZW04JzogMHgzYSwKKyAgJ0kzMlN0b3JlTWVtMTYnOiAweDNiLAorICAnSTY0
U3RvcmVNZW04JzogMHgzYywKKyAgJ0k2NFN0b3JlTWVtMTYnOiAweDNkLAorICAnSTY0U3RvcmVN
ZW0zMic6IDB4M2UsCisgICdNZW1vcnlTaXplJzogMHgzZiwKKyAgJ01lbW9yeUdyb3cnOiAweDQw
LAorICAnSTMyQ29uc3QnOiAweDQxLAorICAnSTY0Q29uc3QnOiAweDQyLAorICAnRjMyQ29uc3Qn
OiAweDQzLAorICAnRjY0Q29uc3QnOiAweDQ0LAorICAnSTMyRXF6JzogMHg0NSwKKyAgJ0kzMkVx
JzogMHg0NiwKKyAgJ0kzMk5lJzogMHg0NywKKyAgJ0kzMkx0Uyc6IDB4NDgsCisgICdJMzJMdFUn
OiAweDQ5LAorICAnSTMyR3RTJzogMHg0YSwKKyAgJ0kzMkd0VSc6IDB4NGIsCisgICdJMzJMZVMn
OiAweDRjLAorICAnSTMyTGVVJzogMHg0ZCwKKyAgJ0kzMkdlUyc6IDB4NGUsCisgICdJMzJHZVUn
OiAweDRmLAorICAnSTY0RXF6JzogMHg1MCwKKyAgJ0k2NEVxJzogMHg1MSwKKyAgJ0k2NE5lJzog
MHg1MiwKKyAgJ0k2NEx0Uyc6IDB4NTMsCisgICdJNjRMdFUnOiAweDU0LAorICAnSTY0R3RTJzog
MHg1NSwKKyAgJ0k2NEd0VSc6IDB4NTYsCisgICdJNjRMZVMnOiAweDU3LAorICAnSTY0TGVVJzog
MHg1OCwKKyAgJ0k2NEdlUyc6IDB4NTksCisgICdJNjRHZVUnOiAweDVhLAorICAnRjMyRXEnOiAw
eDViLAorICAnRjMyTmUnOiAweDVjLAorICAnRjMyTHQnOiAweDVkLAorICAnRjMyR3QnOiAweDVl
LAorICAnRjMyTGUnOiAweDVmLAorICAnRjMyR2UnOiAweDYwLAorICAnRjY0RXEnOiAweDYxLAor
ICAnRjY0TmUnOiAweDYyLAorICAnRjY0THQnOiAweDYzLAorICAnRjY0R3QnOiAweDY0LAorICAn
RjY0TGUnOiAweDY1LAorICAnRjY0R2UnOiAweDY2LAorICAnSTMyQ2x6JzogMHg2NywKKyAgJ0kz
MkN0eic6IDB4NjgsCisgICdJMzJQb3BjbnQnOiAweDY5LAorICAnSTMyQWRkJzogMHg2YSwKKyAg
J0kzMlN1Yic6IDB4NmIsCisgICdJMzJNdWwnOiAweDZjLAorICAnSTMyRGl2Uyc6IDB4NmQsCisg
ICdJMzJEaXZVJzogMHg2ZSwKKyAgJ0kzMlJlbVMnOiAweDZmLAorICAnSTMyUmVtVSc6IDB4NzAs
CisgICdJMzJBbmQnOiAweDcxLAorICAnSTMySW9yJzogMHg3MiwKKyAgJ0kzMlhvcic6IDB4NzMs
CisgICdJMzJTaGwnOiAweDc0LAorICAnSTMyU2hyUyc6IDB4NzUsCisgICdJMzJTaHJVJzogMHg3
NiwKKyAgJ0kzMlJvbCc6IDB4NzcsCisgICdJMzJSb3InOiAweDc4LAorICAnSTY0Q2x6JzogMHg3
OSwKKyAgJ0k2NEN0eic6IDB4N2EsCisgICdJNjRQb3BjbnQnOiAweDdiLAorICAnSTY0QWRkJzog
MHg3YywKKyAgJ0k2NFN1Yic6IDB4N2QsCisgICdJNjRNdWwnOiAweDdlLAorICAnSTY0RGl2Uyc6
IDB4N2YsCisgICdJNjREaXZVJzogMHg4MCwKKyAgJ0k2NFJlbVMnOiAweDgxLAorICAnSTY0UmVt
VSc6IDB4ODIsCisgICdJNjRBbmQnOiAweDgzLAorICAnSTY0SW9yJzogMHg4NCwKKyAgJ0k2NFhv
cic6IDB4ODUsCisgICdJNjRTaGwnOiAweDg2LAorICAnSTY0U2hyUyc6IDB4ODcsCisgICdJNjRT
aHJVJzogMHg4OCwKKyAgJ0k2NFJvbCc6IDB4ODksCisgICdJNjRSb3InOiAweDhhLAorICAnRjMy
QWJzJzogMHg4YiwKKyAgJ0YzMk5lZyc6IDB4OGMsCisgICdGMzJDZWlsJzogMHg4ZCwKKyAgJ0Yz
MkZsb29yJzogMHg4ZSwKKyAgJ0YzMlRydW5jJzogMHg4ZiwKKyAgJ0YzMk5lYXJlc3RJbnQnOiAw
eDkwLAorICAnRjMyU3FydCc6IDB4OTEsCisgICdGMzJBZGQnOiAweDkyLAorICAnRjMyU3ViJzog
MHg5MywKKyAgJ0YzMk11bCc6IDB4OTQsCisgICdGMzJEaXYnOiAweDk1LAorICAnRjMyTWluJzog
MHg5NiwKKyAgJ0YzMk1heCc6IDB4OTcsCisgICdGMzJDb3B5U2lnbic6IDB4OTgsCisgICdGNjRB
YnMnOiAweDk5LAorICAnRjY0TmVnJzogMHg5YSwKKyAgJ0Y2NENlaWwnOiAweDliLAorICAnRjY0
Rmxvb3InOiAweDljLAorICAnRjY0VHJ1bmMnOiAweDlkLAorICAnRjY0TmVhcmVzdEludCc6IDB4
OWUsCisgICdGNjRTcXJ0JzogMHg5ZiwKKyAgJ0Y2NEFkZCc6IDB4YTAsCisgICdGNjRTdWInOiAw
eGExLAorICAnRjY0TXVsJzogMHhhMiwKKyAgJ0Y2NERpdic6IDB4YTMsCisgICdGNjRNaW4nOiAw
eGE0LAorICAnRjY0TWF4JzogMHhhNSwKKyAgJ0Y2NENvcHlTaWduJzogMHhhNiwKKyAgJ0kzMkNv
bnZlcnRJNjQnOiAweGE3LAorICAnSTMyU0NvbnZlcnRGMzInOiAweGE4LAorICAnSTMyVUNvbnZl
cnRGMzInOiAweGE5LAorICAnSTMyU0NvbnZlcnRGNjQnOiAweGFhLAorICAnSTMyVUNvbnZlcnRG
NjQnOiAweGFiLAorICAnSTY0U0NvbnZlcnRJMzInOiAweGFjLAorICAnSTY0VUNvbnZlcnRJMzIn
OiAweGFkLAorICAnSTY0U0NvbnZlcnRGMzInOiAweGFlLAorICAnSTY0VUNvbnZlcnRGMzInOiAw
eGFmLAorICAnSTY0U0NvbnZlcnRGNjQnOiAweGIwLAorICAnSTY0VUNvbnZlcnRGNjQnOiAweGIx
LAorICAnRjMyU0NvbnZlcnRJMzInOiAweGIyLAorICAnRjMyVUNvbnZlcnRJMzInOiAweGIzLAor
ICAnRjMyU0NvbnZlcnRJNjQnOiAweGI0LAorICAnRjMyVUNvbnZlcnRJNjQnOiAweGI1LAorICAn
RjMyQ29udmVydEY2NCc6IDB4YjYsCisgICdGNjRTQ29udmVydEkzMic6IDB4YjcsCisgICdGNjRV
Q29udmVydEkzMic6IDB4YjgsCisgICdGNjRTQ29udmVydEk2NCc6IDB4YjksCisgICdGNjRVQ29u
dmVydEk2NCc6IDB4YmEsCisgICdGNjRDb252ZXJ0RjMyJzogMHhiYiwKKyAgJ0kzMlJlaW50ZXJw
cmV0RjMyJzogMHhiYywKKyAgJ0k2NFJlaW50ZXJwcmV0RjY0JzogMHhiZCwKKyAgJ0YzMlJlaW50
ZXJwcmV0STMyJzogMHhiZSwKKyAgJ0Y2NFJlaW50ZXJwcmV0STY0JzogMHhiZiwKKyAgJ0kzMlNF
eHRlbmRJOCc6IDB4YzAsCisgICdJMzJTRXh0ZW5kSTE2JzogMHhjMSwKKyAgJ0k2NFNFeHRlbmRJ
OCc6IDB4YzIsCisgICdJNjRTRXh0ZW5kSTE2JzogMHhjMywKKyAgJ0k2NFNFeHRlbmRJMzInOiAw
eGM0LAorICAnUmVmTnVsbCc6IDB4ZDAsCisgICdSZWZJc051bGwnOiAweGQxLAorICAnUmVmRnVu
Yyc6IDB4ZDIsCisgICdSZWZBc05vbk51bGwnOiAweGQzLAorICAnQnJPbk51bGwnOiAweGQ0LAor
ICAnUmVmRXEnOiAweGQ1LAorICAnQnJPbk5vbk51bGwnOiAweGQ2Cit9OworCitmdW5jdGlvbiBk
ZWZpbmVXYXNtT3Bjb2RlKG5hbWUsIHZhbHVlKSB7CisgIGlmIChnbG9iYWxUaGlzLmtXYXNtT3Bj
b2RlTmFtZXMgPT09IHVuZGVmaW5lZCkgeworICAgIGdsb2JhbFRoaXMua1dhc21PcGNvZGVOYW1l
cyA9IHt9OworICB9CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBuYW1lLCB7
dmFsdWU6IHZhbHVlfSk7CisgIGlmIChnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXNbdmFsdWVd
ICE9PSB1bmRlZmluZWQpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSB3YXNtIG9w
Y29kZTogJHt2YWx1ZX0uIFByZXZpb3VzIG5hbWU6ICR7CisgICAgICAgIGdsb2JhbFRoaXMua1dh
c21PcGNvZGVOYW1lc1t2YWx1ZV19LCBuZXcgbmFtZTogJHtuYW1lfWApOworICB9CisgIGdsb2Jh
bFRoaXMua1dhc21PcGNvZGVOYW1lc1t2YWx1ZV0gPSBuYW1lOworfQorZm9yIChsZXQgbmFtZSBp
biBrV2FzbU9wY29kZXMpIHsKKyAgZGVmaW5lV2FzbU9wY29kZShga0V4cHIke25hbWV9YCwga1dh
c21PcGNvZGVzW25hbWVdKTsKK30KKworLy8gUHJlZml4IG9wY29kZXMKK2NvbnN0IGtQcmVmaXhP
cGNvZGVzID0geworICAnR0MnOiAweGZiLAorICAnTnVtZXJpYyc6IDB4ZmMsCisgICdTaW1kJzog
MHhmZCwKKyAgJ0F0b21pYyc6IDB4ZmUKK307Citmb3IgKGxldCBwcmVmaXggaW4ga1ByZWZpeE9w
Y29kZXMpIHsKKyAgZGVmaW5lV2FzbU9wY29kZShgayR7cHJlZml4fVByZWZpeGAsIGtQcmVmaXhP
cGNvZGVzW3ByZWZpeF0pOworfQorCisvLyBHQyBvcGNvZGVzCitsZXQga0V4cHJTdHJ1Y3ROZXdX
aXRoUnR0ID0gMHgwMTsKK2xldCBrRXhwclN0cnVjdE5ld0RlZmF1bHRXaXRoUnR0ID0gMHgwMjsK
K2xldCBrRXhwclN0cnVjdEdldCA9IDB4MDM7CitsZXQga0V4cHJTdHJ1Y3RHZXRTID0gMHgwNDsK
K2xldCBrRXhwclN0cnVjdEdldFUgPSAweDA1OworbGV0IGtFeHByU3RydWN0U2V0ID0gMHgwNjsK
K2xldCBrRXhwclN0cnVjdE5ldyA9IDB4MDc7CitsZXQga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0ID0g
MHgwODsKK2xldCBrRXhwckFycmF5TmV3V2l0aFJ0dCA9IDB4MTE7CitsZXQga0V4cHJBcnJheU5l
d0RlZmF1bHRXaXRoUnR0ID0gMHgxMjsKK2xldCBrRXhwckFycmF5R2V0ID0gMHgxMzsKK2xldCBr
RXhwckFycmF5R2V0UyA9IDB4MTQ7CitsZXQga0V4cHJBcnJheUdldFUgPSAweDE1OworbGV0IGtF
eHByQXJyYXlTZXQgPSAweDE2OworbGV0IGtFeHByQXJyYXlMZW4gPSAweDE3OworbGV0IGtFeHBy
QXJyYXlDb3B5ID0gMHgxODsKK2xldCBrRXhwckFycmF5SW5pdCA9IDB4MTk7CitsZXQga0V4cHJB
cnJheUluaXRTdGF0aWMgPSAweDFhOworbGV0IGtFeHByQXJyYXlOZXcgPSAweDFiOworbGV0IGtF
eHByQXJyYXlOZXdEZWZhdWx0ID0gMHgxYzsKK2xldCBrRXhwckkzMU5ldyA9IDB4MjA7CitsZXQg
a0V4cHJJMzFHZXRTID0gMHgyMTsKK2xldCBrRXhwckkzMUdldFUgPSAweDIyOworbGV0IGtFeHBy
UnR0Q2Fub24gPSAweDMwOworbGV0IGtFeHByUnR0U3ViID0gMHgzMTsKK2xldCBrRXhwclJ0dEZy
ZXNoU3ViID0gMHgzMjsKK2xldCBrRXhwclJlZlRlc3QgPSAweDQwOworbGV0IGtFeHByUmVmQ2Fz
dCA9IDB4NDE7CitsZXQga0V4cHJCck9uQ2FzdCA9IDB4NDI7CitsZXQga0V4cHJCck9uQ2FzdEZh
aWwgPSAweDQzOworbGV0IGtFeHByUmVmVGVzdFN0YXRpYyA9IDB4NDQ7CitsZXQga0V4cHJSZWZD
YXN0U3RhdGljID0gMHg0NTsKK2xldCBrRXhwckJyT25DYXN0U3RhdGljID0gMHg0NjsKK2xldCBr
RXhwckJyT25DYXN0U3RhdGljRmFpbCA9IDB4NDc7CitsZXQga0V4cHJSZWZJc0Z1bmMgPSAweDUw
OworbGV0IGtFeHByUmVmSXNEYXRhID0gMHg1MTsKK2xldCBrRXhwclJlZklzSTMxID0gMHg1MjsK
K2xldCBrRXhwclJlZkFzRnVuYyA9IDB4NTg7CitsZXQga0V4cHJSZWZBc0RhdGEgPSAweDU5Owor
bGV0IGtFeHByUmVmQXNJMzEgPSAweDVhOworbGV0IGtFeHByQnJPbkZ1bmMgPSAweDYwOworbGV0
IGtFeHByQnJPbkRhdGEgPSAweDYxOworbGV0IGtFeHByQnJPbkkzMSA9IDB4NjI7CisKKy8vIE51
bWVyaWMgb3Bjb2Rlcy4KK2xldCBrRXhwckkzMlNDb252ZXJ0U2F0RjMyID0gMHgwMDsKK2xldCBr
RXhwckkzMlVDb252ZXJ0U2F0RjMyID0gMHgwMTsKK2xldCBrRXhwckkzMlNDb252ZXJ0U2F0RjY0
ID0gMHgwMjsKK2xldCBrRXhwckkzMlVDb252ZXJ0U2F0RjY0ID0gMHgwMzsKK2xldCBrRXhwckk2
NFNDb252ZXJ0U2F0RjMyID0gMHgwNDsKK2xldCBrRXhwckk2NFVDb252ZXJ0U2F0RjMyID0gMHgw
NTsKK2xldCBrRXhwckk2NFNDb252ZXJ0U2F0RjY0ID0gMHgwNjsKK2xldCBrRXhwckk2NFVDb252
ZXJ0U2F0RjY0ID0gMHgwNzsKK2xldCBrRXhwck1lbW9yeUluaXQgPSAweDA4OworbGV0IGtFeHBy
RGF0YURyb3AgPSAweDA5OworbGV0IGtFeHByTWVtb3J5Q29weSA9IDB4MGE7CitsZXQga0V4cHJN
ZW1vcnlGaWxsID0gMHgwYjsKK2xldCBrRXhwclRhYmxlSW5pdCA9IDB4MGM7CitsZXQga0V4cHJF
bGVtRHJvcCA9IDB4MGQ7CitsZXQga0V4cHJUYWJsZUNvcHkgPSAweDBlOworbGV0IGtFeHByVGFi
bGVHcm93ID0gMHgwZjsKK2xldCBrRXhwclRhYmxlU2l6ZSA9IDB4MTA7CitsZXQga0V4cHJUYWJs
ZUZpbGwgPSAweDExOworCisvLyBBdG9taWMgb3Bjb2Rlcy4KK2xldCBrRXhwckF0b21pY05vdGlm
eSA9IDB4MDA7CitsZXQga0V4cHJJMzJBdG9taWNXYWl0ID0gMHgwMTsKK2xldCBrRXhwckk2NEF0
b21pY1dhaXQgPSAweDAyOworbGV0IGtFeHBySTMyQXRvbWljTG9hZCA9IDB4MTA7CitsZXQga0V4
cHJJMzJBdG9taWNMb2FkOFUgPSAweDEyOworbGV0IGtFeHBySTMyQXRvbWljTG9hZDE2VSA9IDB4
MTM7CitsZXQga0V4cHJJMzJBdG9taWNTdG9yZSA9IDB4MTc7CitsZXQga0V4cHJJMzJBdG9taWNT
dG9yZThVID0gMHgxOTsKK2xldCBrRXhwckkzMkF0b21pY1N0b3JlMTZVID0gMHgxYTsKK2xldCBr
RXhwckkzMkF0b21pY0FkZCA9IDB4MWU7CitsZXQga0V4cHJJMzJBdG9taWNBZGQ4VSA9IDB4MjA7
CitsZXQga0V4cHJJMzJBdG9taWNBZGQxNlUgPSAweDIxOworbGV0IGtFeHBySTMyQXRvbWljU3Vi
ID0gMHgyNTsKK2xldCBrRXhwckkzMkF0b21pY1N1YjhVID0gMHgyNzsKK2xldCBrRXhwckkzMkF0
b21pY1N1YjE2VSA9IDB4Mjg7CitsZXQga0V4cHJJMzJBdG9taWNBbmQgPSAweDJjOworbGV0IGtF
eHBySTMyQXRvbWljQW5kOFUgPSAweDJlOworbGV0IGtFeHBySTMyQXRvbWljQW5kMTZVID0gMHgy
ZjsKK2xldCBrRXhwckkzMkF0b21pY09yID0gMHgzMzsKK2xldCBrRXhwckkzMkF0b21pY09yOFUg
PSAweDM1OworbGV0IGtFeHBySTMyQXRvbWljT3IxNlUgPSAweDM2OworbGV0IGtFeHBySTMyQXRv
bWljWG9yID0gMHgzYTsKK2xldCBrRXhwckkzMkF0b21pY1hvcjhVID0gMHgzYzsKK2xldCBrRXhw
ckkzMkF0b21pY1hvcjE2VSA9IDB4M2Q7CitsZXQga0V4cHJJMzJBdG9taWNFeGNoYW5nZSA9IDB4
NDE7CitsZXQga0V4cHJJMzJBdG9taWNFeGNoYW5nZThVID0gMHg0MzsKK2xldCBrRXhwckkzMkF0
b21pY0V4Y2hhbmdlMTZVID0gMHg0NDsKK2xldCBrRXhwckkzMkF0b21pY0NvbXBhcmVFeGNoYW5n
ZSA9IDB4NDg7CitsZXQga0V4cHJJMzJBdG9taWNDb21wYXJlRXhjaGFuZ2U4VSA9IDB4NGE7Cits
ZXQga0V4cHJJMzJBdG9taWNDb21wYXJlRXhjaGFuZ2UxNlUgPSAweDRiOworCitsZXQga0V4cHJJ
NjRBdG9taWNMb2FkID0gMHgxMTsKK2xldCBrRXhwckk2NEF0b21pY0xvYWQ4VSA9IDB4MTQ7Cits
ZXQga0V4cHJJNjRBdG9taWNMb2FkMTZVID0gMHgxNTsKK2xldCBrRXhwckk2NEF0b21pY0xvYWQz
MlUgPSAweDE2OworbGV0IGtFeHBySTY0QXRvbWljU3RvcmUgPSAweDE4OworbGV0IGtFeHBySTY0
QXRvbWljU3RvcmU4VSA9IDB4MWI7CitsZXQga0V4cHJJNjRBdG9taWNTdG9yZTE2VSA9IDB4MWM7
CitsZXQga0V4cHJJNjRBdG9taWNTdG9yZTMyVSA9IDB4MWQ7CitsZXQga0V4cHJJNjRBdG9taWNB
ZGQgPSAweDFmOworbGV0IGtFeHBySTY0QXRvbWljQWRkOFUgPSAweDIyOworbGV0IGtFeHBySTY0
QXRvbWljQWRkMTZVID0gMHgyMzsKK2xldCBrRXhwckk2NEF0b21pY0FkZDMyVSA9IDB4MjQ7Cits
ZXQga0V4cHJJNjRBdG9taWNTdWIgPSAweDI2OworbGV0IGtFeHBySTY0QXRvbWljU3ViOFUgPSAw
eDI5OworbGV0IGtFeHBySTY0QXRvbWljU3ViMTZVID0gMHgyYTsKK2xldCBrRXhwckk2NEF0b21p
Y1N1YjMyVSA9IDB4MmI7CitsZXQga0V4cHJJNjRBdG9taWNBbmQgPSAweDJkOworbGV0IGtFeHBy
STY0QXRvbWljQW5kOFUgPSAweDMwOworbGV0IGtFeHBySTY0QXRvbWljQW5kMTZVID0gMHgzMTsK
K2xldCBrRXhwckk2NEF0b21pY0FuZDMyVSA9IDB4MzI7CitsZXQga0V4cHJJNjRBdG9taWNPciA9
IDB4MzQ7CitsZXQga0V4cHJJNjRBdG9taWNPcjhVID0gMHgzNzsKK2xldCBrRXhwckk2NEF0b21p
Y09yMTZVID0gMHgzODsKK2xldCBrRXhwckk2NEF0b21pY09yMzJVID0gMHgzOTsKK2xldCBrRXhw
ckk2NEF0b21pY1hvciA9IDB4M2I7CitsZXQga0V4cHJJNjRBdG9taWNYb3I4VSA9IDB4M2U7Cits
ZXQga0V4cHJJNjRBdG9taWNYb3IxNlUgPSAweDNmOworbGV0IGtFeHBySTY0QXRvbWljWG9yMzJV
ID0gMHg0MDsKK2xldCBrRXhwckk2NEF0b21pY0V4Y2hhbmdlID0gMHg0MjsKK2xldCBrRXhwckk2
NEF0b21pY0V4Y2hhbmdlOFUgPSAweDQ1OworbGV0IGtFeHBySTY0QXRvbWljRXhjaGFuZ2UxNlUg
PSAweDQ2OworbGV0IGtFeHBySTY0QXRvbWljRXhjaGFuZ2UzMlUgPSAweDQ3OworbGV0IGtFeHBy
STY0QXRvbWljQ29tcGFyZUV4Y2hhbmdlID0gMHg0OQorbGV0IGtFeHBySTY0QXRvbWljQ29tcGFy
ZUV4Y2hhbmdlOFUgPSAweDRjOworbGV0IGtFeHBySTY0QXRvbWljQ29tcGFyZUV4Y2hhbmdlMTZV
ID0gMHg0ZDsKK2xldCBrRXhwckk2NEF0b21pY0NvbXBhcmVFeGNoYW5nZTMyVSA9IDB4NGU7CisK
Ky8vIFNpbWQgb3Bjb2Rlcy4KK2xldCBrRXhwclMxMjhMb2FkTWVtID0gMHgwMDsKK2xldCBrRXhw
clMxMjhMb2FkOHg4UyA9IDB4MDE7CitsZXQga0V4cHJTMTI4TG9hZDh4OFUgPSAweDAyOworbGV0
IGtFeHByUzEyOExvYWQxNng0UyA9IDB4MDM7CitsZXQga0V4cHJTMTI4TG9hZDE2eDRVID0gMHgw
NDsKK2xldCBrRXhwclMxMjhMb2FkMzJ4MlMgPSAweDA1OworbGV0IGtFeHByUzEyOExvYWQzMngy
VSA9IDB4MDY7CitsZXQga0V4cHJTMTI4TG9hZDhTcGxhdCA9IDB4MDc7CitsZXQga0V4cHJTMTI4
TG9hZDE2U3BsYXQgPSAweDA4OworbGV0IGtFeHByUzEyOExvYWQzMlNwbGF0ID0gMHgwOTsKK2xl
dCBrRXhwclMxMjhMb2FkNjRTcGxhdCA9IDB4MGE7CitsZXQga0V4cHJTMTI4U3RvcmVNZW0gPSAw
eDBiOworbGV0IGtFeHByUzEyOENvbnN0ID0gMHgwYzsKK2xldCBrRXhwckk4eDE2U2h1ZmZsZSA9
IDB4MGQ7CitsZXQga0V4cHJJOHgxNlN3aXp6bGUgPSAweDBlOworCitsZXQga0V4cHJJOHgxNlNw
bGF0ID0gMHgwZjsKK2xldCBrRXhwckkxNng4U3BsYXQgPSAweDEwOworbGV0IGtFeHBySTMyeDRT
cGxhdCA9IDB4MTE7CitsZXQga0V4cHJJNjR4MlNwbGF0ID0gMHgxMjsKK2xldCBrRXhwckYzMng0
U3BsYXQgPSAweDEzOworbGV0IGtFeHByRjY0eDJTcGxhdCA9IDB4MTQ7CitsZXQga0V4cHJJOHgx
NkV4dHJhY3RMYW5lUyA9IDB4MTU7CitsZXQga0V4cHJJOHgxNkV4dHJhY3RMYW5lVSA9IDB4MTY7
CitsZXQga0V4cHJJOHgxNlJlcGxhY2VMYW5lID0gMHgxNzsKK2xldCBrRXhwckkxNng4RXh0cmFj
dExhbmVTID0gMHgxODsKK2xldCBrRXhwckkxNng4RXh0cmFjdExhbmVVID0gMHgxOTsKK2xldCBr
RXhwckkxNng4UmVwbGFjZUxhbmUgPSAweDFhOworbGV0IGtFeHBySTMyeDRFeHRyYWN0TGFuZSA9
IDB4MWI7CitsZXQga0V4cHJJMzJ4NFJlcGxhY2VMYW5lID0gMHgxYzsKK2xldCBrRXhwckk2NHgy
RXh0cmFjdExhbmUgPSAweDFkOworbGV0IGtFeHBySTY0eDJSZXBsYWNlTGFuZSA9IDB4MWU7Cits
ZXQga0V4cHJGMzJ4NEV4dHJhY3RMYW5lID0gMHgxZjsKK2xldCBrRXhwckYzMng0UmVwbGFjZUxh
bmUgPSAweDIwOworbGV0IGtFeHByRjY0eDJFeHRyYWN0TGFuZSA9IDB4MjE7CitsZXQga0V4cHJG
NjR4MlJlcGxhY2VMYW5lID0gMHgyMjsKK2xldCBrRXhwckk4eDE2RXEgPSAweDIzOworbGV0IGtF
eHBySTh4MTZOZSA9IDB4MjQ7CitsZXQga0V4cHJJOHgxNkx0UyA9IDB4MjU7CitsZXQga0V4cHJJ
OHgxNkx0VSA9IDB4MjY7CitsZXQga0V4cHJJOHgxNkd0UyA9IDB4Mjc7CitsZXQga0V4cHJJOHgx
Nkd0VSA9IDB4Mjg7CitsZXQga0V4cHJJOHgxNkxlUyA9IDB4Mjk7CitsZXQga0V4cHJJOHgxNkxl
VSA9IDB4MmE7CitsZXQga0V4cHJJOHgxNkdlUyA9IDB4MmI7CitsZXQga0V4cHJJOHgxNkdlVSA9
IDB4MmM7CitsZXQga0V4cHJJMTZ4OEVxID0gMHgyZDsKK2xldCBrRXhwckkxNng4TmUgPSAweDJl
OworbGV0IGtFeHBySTE2eDhMdFMgPSAweDJmOworbGV0IGtFeHBySTE2eDhMdFUgPSAweDMwOwor
bGV0IGtFeHBySTE2eDhHdFMgPSAweDMxOworbGV0IGtFeHBySTE2eDhHdFUgPSAweDMyOworbGV0
IGtFeHBySTE2eDhMZVMgPSAweDMzOworbGV0IGtFeHBySTE2eDhMZVUgPSAweDM0OworbGV0IGtF
eHBySTE2eDhHZVMgPSAweDM1OworbGV0IGtFeHBySTE2eDhHZVUgPSAweDM2OworbGV0IGtFeHBy
STMyeDRFcSA9IDB4Mzc7CitsZXQga0V4cHJJMzJ4NE5lID0gMHgzODsKK2xldCBrRXhwckkzMng0
THRTID0gMHgzOTsKK2xldCBrRXhwckkzMng0THRVID0gMHgzYTsKK2xldCBrRXhwckkzMng0R3RT
ID0gMHgzYjsKK2xldCBrRXhwckkzMng0R3RVID0gMHgzYzsKK2xldCBrRXhwckkzMng0TGVTID0g
MHgzZDsKK2xldCBrRXhwckkzMng0TGVVID0gMHgzZTsKK2xldCBrRXhwckkzMng0R2VTID0gMHgz
ZjsKK2xldCBrRXhwckkzMng0R2VVID0gMHg0MDsKK2xldCBrRXhwckYzMng0RXEgPSAweDQxOwor
bGV0IGtFeHByRjMyeDROZSA9IDB4NDI7CitsZXQga0V4cHJGMzJ4NEx0ID0gMHg0MzsKK2xldCBr
RXhwckYzMng0R3QgPSAweDQ0OworbGV0IGtFeHByRjMyeDRMZSA9IDB4NDU7CitsZXQga0V4cHJG
MzJ4NEdlID0gMHg0NjsKK2xldCBrRXhwckY2NHgyRXEgPSAweDQ3OworbGV0IGtFeHByRjY0eDJO
ZSA9IDB4NDg7CitsZXQga0V4cHJGNjR4Mkx0ID0gMHg0OTsKK2xldCBrRXhwckY2NHgyR3QgPSAw
eDRhOworbGV0IGtFeHByRjY0eDJMZSA9IDB4NGI7CitsZXQga0V4cHJGNjR4MkdlID0gMHg0YzsK
K2xldCBrRXhwclMxMjhOb3QgPSAweDRkOworbGV0IGtFeHByUzEyOEFuZCA9IDB4NGU7CitsZXQg
a0V4cHJTMTI4QW5kTm90ID0gMHg0ZjsKK2xldCBrRXhwclMxMjhPciA9IDB4NTA7CitsZXQga0V4
cHJTMTI4WG9yID0gMHg1MTsKK2xldCBrRXhwclMxMjhTZWxlY3QgPSAweDUyOworbGV0IGtFeHBy
VjEyOEFueVRydWUgPSAweDUzOworbGV0IGtFeHByUzEyOExvYWQ4TGFuZSA9IDB4NTQ7CitsZXQg
a0V4cHJTMTI4TG9hZDE2TGFuZSA9IDB4NTU7CitsZXQga0V4cHJTMTI4TG9hZDMyTGFuZSA9IDB4
NTY7CitsZXQga0V4cHJTMTI4TG9hZDY0TGFuZSA9IDB4NTc7CitsZXQga0V4cHJTMTI4U3RvcmU4
TGFuZSA9IDB4NTg7CitsZXQga0V4cHJTMTI4U3RvcmUxNkxhbmUgPSAweDU5OworbGV0IGtFeHBy
UzEyOFN0b3JlMzJMYW5lID0gMHg1YTsKK2xldCBrRXhwclMxMjhTdG9yZTY0TGFuZSA9IDB4NWI7
CitsZXQga0V4cHJTMTI4TG9hZDMyWmVybyA9IDB4NWM7CitsZXQga0V4cHJTMTI4TG9hZDY0WmVy
byA9IDB4NWQ7CitsZXQga0V4cHJGMzJ4NERlbW90ZUY2NHgyWmVybyA9IDB4NWU7CitsZXQga0V4
cHJGNjR4MlByb21vdGVMb3dGMzJ4NCA9IDB4NWY7CitsZXQga0V4cHJJOHgxNkFicyA9IDB4NjA7
CitsZXQga0V4cHJJOHgxNk5lZyA9IDB4NjE7CitsZXQga0V4cHJJOHgxNlBvcGNudCA9IDB4NjI7
CitsZXQga0V4cHJJOHgxNkFsbFRydWUgPSAweDYzOworbGV0IGtFeHBySTh4MTZCaXRNYXNrID0g
MHg2NDsKK2xldCBrRXhwckk4eDE2U0NvbnZlcnRJMTZ4OCA9IDB4NjU7CitsZXQga0V4cHJJOHgx
NlVDb252ZXJ0STE2eDggPSAweDY2OworbGV0IGtFeHByRjMyeDRDZWlsID0gMHg2NzsKK2xldCBr
RXhwckYzMng0Rmxvb3IgPSAweDY4OworbGV0IGtFeHByRjMyeDRUcnVuYyA9IDB4Njk7CitsZXQg
a0V4cHJGMzJ4NE5lYXJlc3RJbnQgPSAweDZhOworbGV0IGtFeHBySTh4MTZTaGwgPSAweDZiOwor
bGV0IGtFeHBySTh4MTZTaHJTID0gMHg2YzsKK2xldCBrRXhwckk4eDE2U2hyVSA9IDB4NmQ7Cits
ZXQga0V4cHJJOHgxNkFkZCA9IDB4NmU7CitsZXQga0V4cHJJOHgxNkFkZFNhdFMgPSAweDZmOwor
bGV0IGtFeHBySTh4MTZBZGRTYXRVID0gMHg3MDsKK2xldCBrRXhwckk4eDE2U3ViID0gMHg3MTsK
K2xldCBrRXhwckk4eDE2U3ViU2F0UyA9IDB4NzI7CitsZXQga0V4cHJJOHgxNlN1YlNhdFUgPSAw
eDczOworbGV0IGtFeHByRjY0eDJDZWlsID0gMHg3NDsKK2xldCBrRXhwckY2NHgyRmxvb3IgPSAw
eDc1OworbGV0IGtFeHBySTh4MTZNaW5TID0gMHg3NjsKK2xldCBrRXhwckk4eDE2TWluVSA9IDB4
Nzc7CitsZXQga0V4cHJJOHgxNk1heFMgPSAweDc4OworbGV0IGtFeHBySTh4MTZNYXhVID0gMHg3
OTsKK2xldCBrRXhwckY2NHgyVHJ1bmMgPSAweDdhOworbGV0IGtFeHBySTh4MTZSb3VuZGluZ0F2
ZXJhZ2VVID0gMHg3YjsKK2xldCBrRXhwckkxNng4RXh0QWRkUGFpcndpc2VJOHgxNlMgPSAweDdj
OworbGV0IGtFeHBySTE2eDhFeHRBZGRQYWlyd2lzZUk4eDE2VSA9IDB4N2Q7CitsZXQga0V4cHJJ
MzJ4NEV4dEFkZFBhaXJ3aXNlSTE2eDhTID0gMHg3ZTsKK2xldCBrRXhwckkzMng0RXh0QWRkUGFp
cndpc2VJMTZ4OFUgPSAweDdmOworbGV0IGtFeHBySTE2eDhBYnMgPSAweDgwOworbGV0IGtFeHBy
STE2eDhOZWcgPSAweDgxOworbGV0IGtFeHBySTE2eDhRMTVNdWxSU2F0UyA9IDB4ODI7CitsZXQg
a0V4cHJJMTZ4OEFsbFRydWUgPSAweDgzOworbGV0IGtFeHBySTE2eDhCaXRNYXNrID0gMHg4NDsK
K2xldCBrRXhwckkxNng4U0NvbnZlcnRJMzJ4NCA9IDB4ODU7CitsZXQga0V4cHJJMTZ4OFVDb252
ZXJ0STMyeDQgPSAweDg2OworbGV0IGtFeHBySTE2eDhTQ29udmVydEk4eDE2TG93ID0gMHg4NzsK
K2xldCBrRXhwckkxNng4U0NvbnZlcnRJOHgxNkhpZ2ggPSAweDg4OworbGV0IGtFeHBySTE2eDhV
Q29udmVydEk4eDE2TG93ID0gMHg4OTsKK2xldCBrRXhwckkxNng4VUNvbnZlcnRJOHgxNkhpZ2gg
PSAweDhhOworbGV0IGtFeHBySTE2eDhTaGwgPSAweDhiOworbGV0IGtFeHBySTE2eDhTaHJTID0g
MHg4YzsKK2xldCBrRXhwckkxNng4U2hyVSA9IDB4OGQ7CitsZXQga0V4cHJJMTZ4OEFkZCA9IDB4
OGU7CitsZXQga0V4cHJJMTZ4OEFkZFNhdFMgPSAweDhmOworbGV0IGtFeHBySTE2eDhBZGRTYXRV
ID0gMHg5MDsKK2xldCBrRXhwckkxNng4U3ViID0gMHg5MTsKK2xldCBrRXhwckkxNng4U3ViU2F0
UyA9IDB4OTI7CitsZXQga0V4cHJJMTZ4OFN1YlNhdFUgPSAweDkzOworbGV0IGtFeHByRjY0eDJO
ZWFyZXN0SW50ID0gMHg5NDsKK2xldCBrRXhwckkxNng4TXVsID0gMHg5NTsKK2xldCBrRXhwckkx
Nng4TWluUyA9IDB4OTY7CitsZXQga0V4cHJJMTZ4OE1pblUgPSAweDk3OworbGV0IGtFeHBySTE2
eDhNYXhTID0gMHg5ODsKK2xldCBrRXhwckkxNng4TWF4VSA9IDB4OTk7CitsZXQga0V4cHJJMTZ4
OFJvdW5kaW5nQXZlcmFnZVUgPSAweDliOworbGV0IGtFeHBySTE2eDhFeHRNdWxMb3dJOHgxNlMg
PSAweDljOworbGV0IGtFeHBySTE2eDhFeHRNdWxIaWdoSTh4MTZTID0gMHg5ZDsKK2xldCBrRXhw
ckkxNng4RXh0TXVsTG93STh4MTZVID0gMHg5ZTsKK2xldCBrRXhwckkxNng4RXh0TXVsSGlnaEk4
eDE2VSA9IDB4OWY7CitsZXQga0V4cHJJMzJ4NEFicyA9IDB4YTA7CitsZXQga0V4cHJJMzJ4NE5l
ZyA9IDB4YTE7CitsZXQga0V4cHJJMzJ4NEFsbFRydWUgPSAweGEzOworbGV0IGtFeHBySTMyeDRC
aXRNYXNrID0gMHhhNDsKK2xldCBrRXhwckkzMng0U0NvbnZlcnRJMTZ4OExvdyA9IDB4YTc7Cits
ZXQga0V4cHJJMzJ4NFNDb252ZXJ0STE2eDhIaWdoID0gMHhhODsKK2xldCBrRXhwckkzMng0VUNv
bnZlcnRJMTZ4OExvdyA9IDB4YTk7CitsZXQga0V4cHJJMzJ4NFVDb252ZXJ0STE2eDhIaWdoID0g
MHhhYTsKK2xldCBrRXhwckkzMng0U2hsID0gMHhhYjsKK2xldCBrRXhwckkzMng0U2hyUyA9IDB4
YWM7CitsZXQga0V4cHJJMzJ4NFNoclUgPSAweGFkOworbGV0IGtFeHBySTMyeDRBZGQgPSAweGFl
OworbGV0IGtFeHBySTMyeDRTdWIgPSAweGIxOworbGV0IGtFeHBySTMyeDRNdWwgPSAweGI1Owor
bGV0IGtFeHBySTMyeDRNaW5TID0gMHhiNjsKK2xldCBrRXhwckkzMng0TWluVSA9IDB4Yjc7Cits
ZXQga0V4cHJJMzJ4NE1heFMgPSAweGI4OworbGV0IGtFeHBySTMyeDRNYXhVID0gMHhiOTsKK2xl
dCBrRXhwckkzMng0RG90STE2eDhTID0gMHhiYTsKK2xldCBrRXhwckkzMng0RXh0TXVsTG93STE2
eDhTID0gMHhiYzsKK2xldCBrRXhwckkzMng0RXh0TXVsSGlnaEkxNng4UyA9IDB4YmQ7CitsZXQg
a0V4cHJJMzJ4NEV4dE11bExvd0kxNng4VSA9IDB4YmU7CitsZXQga0V4cHJJMzJ4NEV4dE11bEhp
Z2hJMTZ4OFUgPSAweGJmOworbGV0IGtFeHBySTY0eDJBYnMgPSAweGMwOworbGV0IGtFeHBySTY0
eDJOZWcgPSAweGMxOworbGV0IGtFeHBySTY0eDJBbGxUcnVlID0gMHhjMzsKK2xldCBrRXhwckk2
NHgyQml0TWFzayA9IDB4YzQ7CitsZXQga0V4cHJJNjR4MlNDb252ZXJ0STMyeDRMb3cgPSAweGM3
OworbGV0IGtFeHBySTY0eDJTQ29udmVydEkzMng0SGlnaCA9IDB4Yzg7CitsZXQga0V4cHJJNjR4
MlVDb252ZXJ0STMyeDRMb3cgPSAweGM5OworbGV0IGtFeHBySTY0eDJVQ29udmVydEkzMng0SGln
aCA9IDB4Y2E7CitsZXQga0V4cHJJNjR4MlNobCA9IDB4Y2I7CitsZXQga0V4cHJJNjR4MlNoclMg
PSAweGNjOworbGV0IGtFeHBySTY0eDJTaHJVID0gMHhjZDsKK2xldCBrRXhwckk2NHgyQWRkID0g
MHhjZTsKK2xldCBrRXhwckk2NHgyU3ViID0gMHhkMTsKK2xldCBrRXhwckk2NHgyTXVsID0gMHhk
NTsKK2xldCBrRXhwckk2NHgyRXEgPSAweGQ2OworbGV0IGtFeHBySTY0eDJOZSA9IDB4ZDc7Cits
ZXQga0V4cHJJNjR4Mkx0UyA9IDB4ZDg7CitsZXQga0V4cHJJNjR4Mkd0UyA9IDB4ZDk7CitsZXQg
a0V4cHJJNjR4MkxlUyA9IDB4ZGE7CitsZXQga0V4cHJJNjR4MkdlUyA9IDB4ZGI7CitsZXQga0V4
cHJJNjR4MkV4dE11bExvd0kzMng0UyA9IDB4ZGM7CitsZXQga0V4cHJJNjR4MkV4dE11bEhpZ2hJ
MzJ4NFMgPSAweGRkOworbGV0IGtFeHBySTY0eDJFeHRNdWxMb3dJMzJ4NFUgPSAweGRlOworbGV0
IGtFeHBySTY0eDJFeHRNdWxIaWdoSTMyeDRVID0gMHhkZjsKK2xldCBrRXhwckYzMng0QWJzID0g
MHhlMDsKK2xldCBrRXhwckYzMng0TmVnID0gMHhlMTsKK2xldCBrRXhwckYzMng0U3FydCA9IDB4
ZTM7CitsZXQga0V4cHJGMzJ4NEFkZCA9IDB4ZTQ7CitsZXQga0V4cHJGMzJ4NFN1YiA9IDB4ZTU7
CitsZXQga0V4cHJGMzJ4NE11bCA9IDB4ZTY7CitsZXQga0V4cHJGMzJ4NERpdiA9IDB4ZTc7Cits
ZXQga0V4cHJGMzJ4NE1pbiA9IDB4ZTg7CitsZXQga0V4cHJGMzJ4NE1heCA9IDB4ZTk7CitsZXQg
a0V4cHJGMzJ4NFBtaW4gPSAweGVhOworbGV0IGtFeHByRjMyeDRQbWF4ID0gMHhlYjsKK2xldCBr
RXhwckY2NHgyQWJzID0gMHhlYzsKK2xldCBrRXhwckY2NHgyTmVnID0gMHhlZDsKK2xldCBrRXhw
ckY2NHgyU3FydCA9IDB4ZWY7CitsZXQga0V4cHJGNjR4MkFkZCA9IDB4ZjA7CitsZXQga0V4cHJG
NjR4MlN1YiA9IDB4ZjE7CitsZXQga0V4cHJGNjR4Mk11bCA9IDB4ZjI7CitsZXQga0V4cHJGNjR4
MkRpdiA9IDB4ZjM7CitsZXQga0V4cHJGNjR4Mk1pbiA9IDB4ZjQ7CitsZXQga0V4cHJGNjR4Mk1h
eCA9IDB4ZjU7CitsZXQga0V4cHJGNjR4MlBtaW4gPSAweGY2OworbGV0IGtFeHByRjY0eDJQbWF4
ID0gMHhmNzsKK2xldCBrRXhwckkzMng0U0NvbnZlcnRGMzJ4NCA9IDB4Zjg7CitsZXQga0V4cHJJ
MzJ4NFVDb252ZXJ0RjMyeDQgPSAweGY5OworbGV0IGtFeHByRjMyeDRTQ29udmVydEkzMng0ID0g
MHhmYTsKK2xldCBrRXhwckYzMng0VUNvbnZlcnRJMzJ4NCA9IDB4ZmI7CitsZXQga0V4cHJJMzJ4
NFRydW5jU2F0RjY0eDJTWmVybyA9IDB4ZmM7CitsZXQga0V4cHJJMzJ4NFRydW5jU2F0RjY0eDJV
WmVybyA9IDB4ZmQ7CitsZXQga0V4cHJGNjR4MkNvbnZlcnRMb3dJMzJ4NFMgPSAweGZlOworbGV0
IGtFeHByRjY0eDJDb252ZXJ0TG93STMyeDRVID0gMHhmZjsKKworLy8gQ29tcGlsYXRpb24gaGlu
dCBjb25zdGFudHMuCitsZXQga0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5RGVmYXVsdCA9IDB4MDA7
CitsZXQga0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5TGF6eSA9IDB4MDE7CitsZXQga0NvbXBpbGF0
aW9uSGludFN0cmF0ZWd5RWFnZXIgPSAweDAyOworbGV0IGtDb21waWxhdGlvbkhpbnRTdHJhdGVn
eUxhenlCYXNlbGluZUVhZ2VyVG9wVGllciA9IDB4MDM7CitsZXQga0NvbXBpbGF0aW9uSGludFRp
ZXJEZWZhdWx0ID0gMHgwMDsKK2xldCBrQ29tcGlsYXRpb25IaW50VGllckJhc2VsaW5lID0gMHgw
MTsKK2xldCBrQ29tcGlsYXRpb25IaW50VGllck9wdGltaXplZCA9IDB4MDI7CisKK2xldCBrVHJh
cFVucmVhY2hhYmxlID0gMDsKK2xldCBrVHJhcE1lbU91dE9mQm91bmRzID0gMTsKK2xldCBrVHJh
cERpdkJ5WmVybyA9IDI7CitsZXQga1RyYXBEaXZVbnJlcHJlc2VudGFibGUgPSAzOworbGV0IGtU
cmFwUmVtQnlaZXJvID0gNDsKK2xldCBrVHJhcEZsb2F0VW5yZXByZXNlbnRhYmxlID0gNTsKK2xl
dCBrVHJhcFRhYmxlT3V0T2ZCb3VuZHMgPSA2OworbGV0IGtUcmFwRnVuY1NpZ01pc21hdGNoID0g
NzsKK2xldCBrVHJhcFVuYWxpZ25lZEFjY2VzcyA9IDg7CitsZXQga1RyYXBEYXRhU2VnbWVudERy
b3BwZWQgPSA5OworbGV0IGtUcmFwRWxlbVNlZ21lbnREcm9wcGVkID0gMTA7CitsZXQga1RyYXBS
ZXRocm93TnVsbCA9IDExOworCitsZXQga1RyYXBNc2dzID0gWworICAvVW5yZWFjaGFibGUvLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdtZW1vcnkgYWNjZXNz
IG91dCBvZiBib3VuZHMnLCAgICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgL0RpdmlzaW9uIGJ5
IHplcm8vLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtLQorICAnZGl2aWRlIHJl
c3VsdCB1bnJlcHJlc2VudGFibGUnLCAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdyZW1haW5k
ZXIgYnkgemVybycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0KKyAgJ2Zsb2F0
IHVucmVwcmVzZW50YWJsZSBpbiBpbnRlZ2VyIHJhbmdlJywgICAgICAgICAvLyAtLQorICAndGFi
bGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycsICAgICAgICAgICAgICAgICAgIC8vIC0tCisgICdu
dWxsIGZ1bmN0aW9uIG9yIGZ1bmN0aW9uIHNpZ25hdHVyZSBtaXNtYXRjaCcsICAgLy8gLS0KKyAg
J29wZXJhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHVuYWxpZ25lZCBhY2Nlc3NlcycsICAvLyAtLQor
ICAnZGF0YSBzZWdtZW50IGhhcyBiZWVuIGRyb3BwZWQnLCAgICAgICAgICAgICAgICAgIC8vIC0t
CisgICdlbGVtZW50IHNlZ21lbnQgaGFzIGJlZW4gZHJvcHBlZCcsICAgICAgICAgICAgICAgLy8g
LS0KKyAgJ3JldGhyb3dpbmcgbnVsbCB2YWx1ZScgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyAtLQorXTsKKworLy8gVGhpcyByZXF1aXJlcyB0ZXN0L21qc3VuaXQvbWpzdW5pdC5qcy4KK2Z1
bmN0aW9uIGFzc2VydFRyYXBzKHRyYXAsIGNvZGUpIHsKKyAgYXNzZXJ0VGhyb3dzKGNvZGUsIFdl
YkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwga1RyYXBNc2dzW3RyYXBdKTsKK30KKworY2xhc3MgQmlu
YXJ5IHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgdGhpcy5sZW5ndGggPSAwOworICAgIHRoaXMu
YnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoODE5Mik7CisgIH0KKworICBlbnN1cmVfc3BhY2UobmVl
ZGVkKSB7CisgICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCAtIHRoaXMubGVuZ3RoID49IG5lZWRl
ZCkgcmV0dXJuOworICAgIGxldCBuZXdfY2FwYWNpdHkgPSB0aGlzLmJ1ZmZlci5sZW5ndGggKiAy
OworICAgIHdoaWxlIChuZXdfY2FwYWNpdHkgLSB0aGlzLmxlbmd0aCA8IG5lZWRlZCkgbmV3X2Nh
cGFjaXR5ICo9IDI7CisgICAgbGV0IG5ld19idWZmZXIgPSBuZXcgVWludDhBcnJheShuZXdfY2Fw
YWNpdHkpOworICAgIG5ld19idWZmZXIuc2V0KHRoaXMuYnVmZmVyKTsKKyAgICB0aGlzLmJ1ZmZl
ciA9IG5ld19idWZmZXI7CisgIH0KKworICB0cnVuY19idWZmZXIoKSB7CisgICAgcmV0dXJuIG5l
dyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLmJ1ZmZlciwgMCwgdGhpcy5sZW5ndGgpOworICB9CisK
KyAgcmVzZXQoKSB7CisgICAgdGhpcy5sZW5ndGggPSAwOworICB9CisKKyAgZW1pdF91OCh2YWwp
IHsKKyAgICB0aGlzLmVuc3VyZV9zcGFjZSgxKTsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0
aCsrXSA9IHZhbDsKKyAgfQorCisgIGVtaXRfdTE2KHZhbCkgeworICAgIHRoaXMuZW5zdXJlX3Nw
YWNlKDIpOworICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdmFsOworICAgIHRoaXMu
YnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdmFsID4+IDg7CisgIH0KKworICBlbWl0X3UzMih2YWwp
IHsKKyAgICB0aGlzLmVuc3VyZV9zcGFjZSg0KTsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0
aCsrXSA9IHZhbDsKKyAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbCA+PiA4Owor
ICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdmFsID4+IDE2OworICAgIHRoaXMuYnVm
ZmVyW3RoaXMubGVuZ3RoKytdID0gdmFsID4+IDI0OworICB9CisKKyAgZW1pdF9sZWJfdSh2YWws
IG1heF9sZW4pIHsKKyAgICB0aGlzLmVuc3VyZV9zcGFjZShtYXhfbGVuKTsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IG1heF9sZW47ICsraSkgeworICAgICAgbGV0IHYgPSB2YWwgJiAweGZmOwor
ICAgICAgdmFsID0gdmFsID4+PiA3OworICAgICAgaWYgKHZhbCA9PSAwKSB7CisgICAgICAgIHRo
aXMuYnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdjsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQor
ICAgICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2IHwgMHg4MDsKKyAgICB9CisgICAg
dGhyb3cgbmV3IEVycm9yKCdMZWIgdmFsdWUgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAnICsg
bWF4X2xlbik7CisgIH0KKworICBlbWl0X3UzMnYodmFsKSB7CisgICAgdGhpcy5lbWl0X2xlYl91
KHZhbCwga01heFZhckludDMyU2l6ZSk7CisgIH0KKworICBlbWl0X3U2NHYodmFsKSB7CisgICAg
dGhpcy5lbWl0X2xlYl91KHZhbCwga01heFZhckludDY0U2l6ZSk7CisgIH0KKworICBlbWl0X2J5
dGVzKGRhdGEpIHsKKyAgICB0aGlzLmVuc3VyZV9zcGFjZShkYXRhLmxlbmd0aCk7CisgICAgdGhp
cy5idWZmZXIuc2V0KGRhdGEsIHRoaXMubGVuZ3RoKTsKKyAgICB0aGlzLmxlbmd0aCArPSBkYXRh
Lmxlbmd0aDsKKyAgfQorCisgIGVtaXRfc3RyaW5nKHN0cmluZykgeworICAgIC8vIFdoZW4gdGVz
dGluZyBpbGxlZ2FsIG5hbWVzLCB3ZSBwYXNzIGEgYnl0ZSBhcnJheSBkaXJlY3RseS4KKyAgICBp
ZiAoc3RyaW5nIGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgIHRoaXMuZW1pdF91MzJ2KHN0cmlu
Zy5sZW5ndGgpOworICAgICAgdGhpcy5lbWl0X2J5dGVzKHN0cmluZyk7CisgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB0aGUgaGFja3kgd2F5IHRvIGNvbnZlcnQgYSBKYXZh
U2NyaXB0IHN0cmluZyB0byBhIFVURjggZW5jb2RlZAorICAgIC8vIHN0cmluZyBvbmx5IGNvbnRh
aW5pbmcgc2luZ2xlLWJ5dGUgY2hhcmFjdGVycy4KKyAgICBsZXQgc3RyaW5nX3V0ZjggPSB1bmVz
Y2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyaW5nKSk7CisgICAgdGhpcy5lbWl0X3UzMnYoc3Ry
aW5nX3V0ZjgubGVuZ3RoKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ191dGY4Lmxl
bmd0aDsgaSsrKSB7CisgICAgICB0aGlzLmVtaXRfdTgoc3RyaW5nX3V0ZjguY2hhckNvZGVBdChp
KSk7CisgICAgfQorICB9CisKKyAgZW1pdF9oZWFwX3R5cGUoaGVhcF90eXBlKSB7CisgICAgdGhp
cy5lbWl0X2J5dGVzKHdhc21TaWduZWRMZWIoaGVhcF90eXBlLCBrTWF4VmFySW50MzJTaXplKSk7
CisgIH0KKworICBlbWl0X3R5cGUodHlwZSkgeworICAgIGlmICgodHlwZW9mIHR5cGUpID09ICdu
dW1iZXInKSB7CisgICAgICB0aGlzLmVtaXRfdTgodHlwZSA+PSAwID8gdHlwZSA6IHR5cGUgJiBr
TGViMTI4TWFzayk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuZW1pdF91OCh0eXBlLm9wY29k
ZSk7CisgICAgICBpZiAoJ2RlcHRoJyBpbiB0eXBlKSB0aGlzLmVtaXRfdTgodHlwZS5kZXB0aCk7
CisgICAgICB0aGlzLmVtaXRfaGVhcF90eXBlKHR5cGUuaGVhcF90eXBlKTsKKyAgICB9CisgIH0K
KworICBlbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUoZXhwcikgeworICAgIHN3aXRjaCAoZXhwci5r
aW5kKSB7CisgICAgICBjYXNlIGtFeHByR2xvYmFsR2V0OgorICAgICAgICB0aGlzLmVtaXRfdTgo
a0V4cHJHbG9iYWxHZXQpOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHBySTMyQ29uc3Q6CisgICAgICAgIHRoaXMuZW1p
dF9ieXRlcyh3YXNtSTMyQ29uc3QoZXhwci52YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga0V4cHJJNjRDb25zdDoKKyAgICAgICAgdGhpcy5lbWl0X2J5dGVzKHdhc21JNjRDb25z
dChleHByLnZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrRXhwckYzMkNvbnN0
OgorICAgICAgICB0aGlzLmVtaXRfYnl0ZXMod2FzbUYzMkNvbnN0KGV4cHIudmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByRjY0Q29uc3Q6CisgICAgICAgIHRoaXMuZW1p
dF9ieXRlcyh3YXNtRjY0Q29uc3QoZXhwci52YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga1NpbWRQcmVmaXg6CisgICAgICAgIHRoaXMuZW1pdF9ieXRlcyh3YXNtUzEyOENvbnN0
KGV4cHIudmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByUmVmRnVuYzoK
KyAgICAgICAgdGhpcy5lbWl0X3U4KGtFeHByUmVmRnVuYyk7CisgICAgICAgIHRoaXMuZW1pdF91
MzJ2KGV4cHIudmFsdWUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJSZWZOdWxs
OgorICAgICAgICB0aGlzLmVtaXRfdTgoa0V4cHJSZWZOdWxsKTsKKyAgICAgICAgdGhpcy5lbWl0
X2hlYXBfdHlwZShleHByLnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHBy
U3RydWN0TmV3OgorICAgICAgY2FzZSBrRXhwclN0cnVjdE5ld1dpdGhSdHQ6CisgICAgICBjYXNl
IGtFeHByU3RydWN0TmV3RGVmYXVsdDoKKyAgICAgIGNhc2Uga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0
V2l0aFJ0dDoKKyAgICAgICAgZm9yIChsZXQgb3BlcmFuZCBvZiBleHByLm9wZXJhbmRzKSB7Cisg
ICAgICAgICAgdGhpcy5lbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUob3BlcmFuZCk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5lbWl0X3U4KGtHQ1ByZWZpeCk7CisgICAgICAgIHRoaXMuZW1pdF91
OChleHByLmtpbmQpOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByQXJyYXlJbml0OgorICAgICAgY2FzZSBrRXhwckFy
cmF5SW5pdFN0YXRpYzoKKyAgICAgICAgZm9yIChsZXQgb3BlcmFuZCBvZiBleHByLm9wZXJhbmRz
KSB7CisgICAgICAgICAgdGhpcy5lbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUob3BlcmFuZCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5lbWl0X3U4KGtHQ1ByZWZpeCk7CisgICAgICAgIHRoaXMu
ZW1pdF91OChleHByLmtpbmQpOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsK
KyAgICAgICAgdGhpcy5lbWl0X3UzMnYoZXhwci5vcGVyYW5kcy5sZW5ndGggLSAxKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIGtFeHByUnR0Q2Fub246CisgICAgICAgIHRoaXMuZW1pdF91
OChrR0NQcmVmaXgpOworICAgICAgICB0aGlzLmVtaXRfdTgoa0V4cHJSdHRDYW5vbik7CisgICAg
ICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIudmFsdWUpOworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2Uga0V4cHJSdHRTdWI6CisgICAgICAgIHRoaXMuZW1pdF9pbml0X2V4cHJfcmVjdXJzaXZlKGV4
cHIucGFyZW50KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtHY1ByZWZpeCk7CisgICAgICAgIHRo
aXMuZW1pdF91OChrRXhwclJ0dFN1Yik7CisgICAgICAgIHRoaXMuZW1pdF91MzJ2KGV4cHIudmFs
dWUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0V4cHJSdHRGcmVzaFN1YjoKKyAgICAg
ICAgdGhpcy5lbWl0X2luaXRfZXhwcl9yZWN1cnNpdmUoZXhwci5wYXJlbnQpOworICAgICAgICB0
aGlzLmVtaXRfdTgoa0djUHJlZml4KTsKKyAgICAgICAgdGhpcy5lbWl0X3U4KGtFeHByUnR0RnJl
c2hTdWIpOworICAgICAgICB0aGlzLmVtaXRfdTMydihleHByLnZhbHVlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICB9CisKKyAgZW1pdF9pbml0X2V4cHIoZXhwcikgeworICAgIHRoaXMuZW1p
dF9pbml0X2V4cHJfcmVjdXJzaXZlKGV4cHIpOworICAgIHRoaXMuZW1pdF91OChrRXhwckVuZCk7
CisgIH0KKworICBlbWl0X2hlYWRlcigpIHsKKyAgICB0aGlzLmVtaXRfYnl0ZXMoWworICAgICAg
a1dhc21IMCwga1dhc21IMSwga1dhc21IMiwga1dhc21IMywga1dhc21WMCwga1dhc21WMSwga1dh
c21WMiwga1dhc21WMworICAgIF0pOworICB9CisKKyAgZW1pdF9zZWN0aW9uKHNlY3Rpb25fY29k
ZSwgY29udGVudF9nZW5lcmF0b3IpIHsKKyAgICAvLyBFbWl0IHNlY3Rpb24gbmFtZS4KKyAgICB0
aGlzLmVtaXRfdTgoc2VjdGlvbl9jb2RlKTsKKyAgICAvLyBFbWl0IHRoZSBzZWN0aW9uIHRvIGEg
dGVtcG9yYXJ5IGJ1ZmZlcjogaXRzIGZ1bGwgbGVuZ3RoIGlzbid0IGtub3cgeWV0LgorICAgIGNv
bnN0IHNlY3Rpb24gPSBuZXcgQmluYXJ5OworICAgIGNvbnRlbnRfZ2VuZXJhdG9yKHNlY3Rpb24p
OworICAgIC8vIEVtaXQgc2VjdGlvbiBsZW5ndGguCisgICAgdGhpcy5lbWl0X3UzMnYoc2VjdGlv
bi5sZW5ndGgpOworICAgIC8vIENvcHkgdGhlIHRlbXBvcmFyeSBidWZmZXIuCisgICAgLy8gQXZv
aWQgc3ByZWFkIGJlY2F1c2Uge3NlY3Rpb259IGNhbiBiZSBodWdlLgorICAgIHRoaXMuZW1pdF9i
eXRlcyhzZWN0aW9uLnRydW5jX2J1ZmZlcigpKTsKKyAgfQorfQorCitjbGFzcyBXYXNtRnVuY3Rp
b25CdWlsZGVyIHsKKyAgLy8gRW5jb2Rpbmcgb2YgbG9jYWwgbmFtZXM6IGEgc3RyaW5nIGNvcnJl
c3BvbmRzIHRvIGEgbG9jYWwgbmFtZSwKKyAgLy8gYSBudW1iZXIgbiBjb3JyZXNwb25kcyB0byBu
IHVuZGVmaW5lZCBuYW1lcy4KKyAgY29uc3RydWN0b3IobW9kdWxlLCBuYW1lLCB0eXBlX2luZGV4
LCBhcmdfbmFtZXMpIHsKKyAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKKyAgICB0aGlzLm5hbWUg
PSBuYW1lOworICAgIHRoaXMudHlwZV9pbmRleCA9IHR5cGVfaW5kZXg7CisgICAgdGhpcy5ib2R5
ID0gW107CisgICAgdGhpcy5sb2NhbHMgPSBbXTsKKyAgICB0aGlzLmxvY2FsX25hbWVzID0gYXJn
X25hbWVzOworICAgIHRoaXMuYm9keV9vZmZzZXQgPSB1bmRlZmluZWQ7ICAvLyBOb3QgdmFsaWQg
dW50aWwgbW9kdWxlIGlzIHNlcmlhbGl6ZWQuCisgIH0KKworICBudW1Mb2NhbE5hbWVzKCkgewor
ICAgIGxldCBudW1fbG9jYWxfbmFtZXMgPSAwOworICAgIGZvciAobGV0IGxvY19uYW1lIG9mIHRo
aXMubG9jYWxfbmFtZXMpIHsKKyAgICAgIGlmICh0eXBlb2YgbG9jX25hbWUgPT0gJ3N0cmluZycp
ICsrbnVtX2xvY2FsX25hbWVzOworICAgIH0KKyAgICByZXR1cm4gbnVtX2xvY2FsX25hbWVzOwor
ICB9CisKKyAgZXhwb3J0QXMobmFtZSkgeworICAgIHRoaXMubW9kdWxlLmFkZEV4cG9ydChuYW1l
LCB0aGlzLmluZGV4KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGV4cG9ydEZ1bmMoKSB7
CisgICAgdGhpcy5leHBvcnRBcyh0aGlzLm5hbWUpOworICAgIHJldHVybiB0aGlzOworICB9CisK
KyAgc2V0Q29tcGlsYXRpb25IaW50KHN0cmF0ZWd5LCBiYXNlbGluZVRpZXIsIHRvcFRpZXIpIHsK
KyAgICB0aGlzLm1vZHVsZS5zZXRDb21waWxhdGlvbkhpbnQoc3RyYXRlZ3ksIGJhc2VsaW5lVGll
ciwgdG9wVGllciwgdGhpcy5pbmRleCk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBhZGRC
b2R5KGJvZHkpIHsKKyAgICBmb3IgKGxldCBiIG9mIGJvZHkpIHsKKyAgICAgIGlmICh0eXBlb2Yg
YiAhPT0gJ251bWJlcicgfHwgKGIgJiAofjB4RkYpKSAhPT0gMCkgeworICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoCisgICAgICAgICAgICAnaW52YWxpZCBib2R5IChlbnRyaWVzIG11c3QgYmUgOCBi
aXQgbnVtYmVycyk6ICcgKyBib2R5KTsKKyAgICAgIH0KKyAgICB9CisgICAgdGhpcy5ib2R5ID0g
Ym9keS5zbGljZSgpOworICAgIC8vIEF1dG9tYXRpY2FsbHkgYWRkIHRoZSBlbmQgZm9yIHRoZSBm
dW5jdGlvbiBibG9jayB0byB0aGUgYm9keS4KKyAgICB0aGlzLmJvZHkucHVzaChrRXhwckVuZCk7
CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBhZGRCb2R5V2l0aEVuZChib2R5KSB7CisgICAg
dGhpcy5ib2R5ID0gYm9keTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGdldE51bUxvY2Fs
cygpIHsKKyAgICBsZXQgdG90YWxfbG9jYWxzID0gMDsKKyAgICBmb3IgKGxldCBsIG9mIHRoaXMu
bG9jYWxzKSB7CisgICAgICB0b3RhbF9sb2NhbHMgKz0gbC5jb3VudAorICAgIH0KKyAgICByZXR1
cm4gdG90YWxfbG9jYWxzOworICB9CisKKyAgYWRkTG9jYWxzKHR5cGUsIGNvdW50LCBuYW1lcykg
eworICAgIHRoaXMubG9jYWxzLnB1c2goe3R5cGU6IHR5cGUsIGNvdW50OiBjb3VudH0pOworICAg
IG5hbWVzID0gbmFtZXMgfHwgW107CisgICAgaWYgKG5hbWVzLmxlbmd0aCA+IGNvdW50KSB0aHJv
dyBuZXcgRXJyb3IoJ3RvbyBtYW55IGxvY2FscyBuYW1lcyBnaXZlbicpOworICAgIHRoaXMubG9j
YWxfbmFtZXMucHVzaCguLi5uYW1lcyk7CisgICAgaWYgKGNvdW50ID4gbmFtZXMubGVuZ3RoKSB0
aGlzLmxvY2FsX25hbWVzLnB1c2goY291bnQgLSBuYW1lcy5sZW5ndGgpOworICAgIHJldHVybiB0
aGlzOworICB9CisKKyAgZW5kKCkgeworICAgIHJldHVybiB0aGlzLm1vZHVsZTsKKyAgfQorfQor
CitjbGFzcyBXYXNtSW5pdEV4cHIgeworICBzdGF0aWMgSTMyQ29uc3QodmFsdWUpIHsKKyAgICBy
ZXR1cm4ge2tpbmQ6IGtFeHBySTMyQ29uc3QsIHZhbHVlOiB2YWx1ZX07CisgIH0KKyAgc3RhdGlj
IEk2NENvbnN0KHZhbHVlKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckk2NENvbnN0LCB2YWx1
ZTogdmFsdWV9OworICB9CisgIHN0YXRpYyBGMzJDb25zdCh2YWx1ZSkgeworICAgIHJldHVybiB7
a2luZDoga0V4cHJGMzJDb25zdCwgdmFsdWU6IHZhbHVlfTsKKyAgfQorICBzdGF0aWMgRjY0Q29u
c3QodmFsdWUpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByRjY0Q29uc3QsIHZhbHVlOiB2YWx1
ZX07CisgIH0KKyAgc3RhdGljIFMxMjhDb25zdCh2YWx1ZSkgeworICAgIHJldHVybiB7a2luZDog
a1NpbWRQcmVmaXgsIHZhbHVlOiB2YWx1ZX07CisgIH0KKyAgc3RhdGljIEdsb2JhbEdldChpbmRl
eCkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJHbG9iYWxHZXQsIHZhbHVlOiBpbmRleH07Cisg
IH0KKyAgc3RhdGljIFJlZkZ1bmMoaW5kZXgpIHsKKyAgICByZXR1cm4ge2tpbmQ6IGtFeHByUmVm
RnVuYywgdmFsdWU6IGluZGV4fTsKKyAgfQorICBzdGF0aWMgUmVmTnVsbCh0eXBlKSB7CisgICAg
cmV0dXJuIHtraW5kOiBrRXhwclJlZk51bGwsIHZhbHVlOiB0eXBlfTsKKyAgfQorICBzdGF0aWMg
U3RydWN0TmV3V2l0aFJ0dCh0eXBlLCBhcmdzKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclN0
cnVjdE5ld1dpdGhSdHQsIHZhbHVlOiB0eXBlLCBvcGVyYW5kczogYXJnc307CisgIH0KKyAgc3Rh
dGljIFN0cnVjdE5ldyh0eXBlLCBhcmdzKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclN0cnVj
dE5ldywgdmFsdWU6IHR5cGUsIG9wZXJhbmRzOiBhcmdzfTsKKyAgfQorICBzdGF0aWMgU3RydWN0
TmV3RGVmYXVsdFdpdGhSdHQodHlwZSwgcnR0KSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwclN0
cnVjdE5ld0RlZmF1bHRXaXRoUnR0LCB2YWx1ZTogdHlwZSwgb3BlcmFuZHM6IFtydHRdfTsKKyAg
fQorICBzdGF0aWMgU3RydWN0TmV3RGVmYXVsdCh0eXBlKSB7CisgICAgcmV0dXJuIHtraW5kOiBr
RXhwclN0cnVjdE5ld0RlZmF1bHQsIHZhbHVlOiB0eXBlLCBvcGVyYW5kczogW119OworICB9Cisg
IHN0YXRpYyBBcnJheUluaXQodHlwZSwgYXJncykgeworICAgIHJldHVybiB7a2luZDoga0V4cHJB
cnJheUluaXQsIHZhbHVlOiB0eXBlLCBvcGVyYW5kczogYXJnc307CisgIH0KKyAgc3RhdGljIEFy
cmF5SW5pdFN0YXRpYyh0eXBlLCBhcmdzKSB7CisgICAgcmV0dXJuIHtraW5kOiBrRXhwckFycmF5
SW5pdFN0YXRpYywgdmFsdWU6IHR5cGUsIG9wZXJhbmRzOiBhcmdzfTsKKyAgfQorICBzdGF0aWMg
UnR0Q2Fub24odHlwZSkgeworICAgIHJldHVybiB7a2luZDoga0V4cHJSdHRDYW5vbiwgdmFsdWU6
IHR5cGV9OworICB9CisgIHN0YXRpYyBSdHRTdWIodHlwZSwgcGFyZW50KSB7CisgICAgcmV0dXJu
IHtraW5kOiBrRXhwclJ0dFN1YiwgdmFsdWU6IHR5cGUsIHBhcmVudDogcGFyZW50fTsKKyAgfQor
ICBzdGF0aWMgUnR0RnJlc2hTdWIodHlwZSwgcGFyZW50KSB7CisgICAgcmV0dXJuIHtraW5kOiBr
RXhwclJ0dEZyZXNoU3ViLCB2YWx1ZTogdHlwZSwgcGFyZW50OiBwYXJlbnR9OworICB9CisKKyAg
c3RhdGljIGRlZmF1bHRGb3IodHlwZSkgeworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgY2Fz
ZSBrV2FzbUkzMjoKKyAgICAgICAgcmV0dXJuIHRoaXMuSTMyQ29uc3QoMCk7CisgICAgICBjYXNl
IGtXYXNtSTY0OgorICAgICAgICByZXR1cm4gdGhpcy5JNjRDb25zdCgwKTsKKyAgICAgIGNhc2Ug
a1dhc21GMzI6CisgICAgICAgIHJldHVybiB0aGlzLkYzMkNvbnN0KDApOworICAgICAgY2FzZSBr
V2FzbUY2NDoKKyAgICAgICAgcmV0dXJuIHRoaXMuRjY0Q29uc3QoMCk7CisgICAgICBjYXNlIGtX
YXNtUzEyODoKKyAgICAgICAgcmV0dXJuIHRoaXMuUzEyOENvbnN0KG5ldyBBcnJheSgxNikuZmls
bCgwKSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICBpZiAoKHR5cGVvZiB0eXBlKSAhPSAnbnVt
YmVyJyAmJiB0eXBlLm9wY29kZSAhPSBrV2FzbU9wdFJlZikgeworICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiTm9uLWRlZmF1bHRhYmxlIHR5cGUiKTsKKyAgICAgICAgfQorICAgICAgICBsZXQg
aGVhcF90eXBlID0gKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVyJyA/IHR5cGUgOiB0eXBlLmhlYXBf
dHlwZTsKKyAgICAgICAgcmV0dXJuIHRoaXMuUmVmTnVsbChoZWFwX3R5cGUpOworICAgIH0KKyAg
fQorfQorCitjbGFzcyBXYXNtR2xvYmFsQnVpbGRlciB7CisgIC8vIHtpbml0fSBzaG91bGQgYmUg
Y29uc3RydWN0ZWQgd2l0aCBXYXNtSW5pdEV4cHIuCisgIGNvbnN0cnVjdG9yKG1vZHVsZSwgdHlw
ZSwgbXV0YWJsZSwgaW5pdCkgeworICAgIHRoaXMubW9kdWxlID0gbW9kdWxlOworICAgIHRoaXMu
dHlwZSA9IHR5cGU7CisgICAgdGhpcy5tdXRhYmxlID0gbXV0YWJsZTsKKyAgICB0aGlzLmluaXQg
PSBpbml0OworICB9CisKKyAgZXhwb3J0QXMobmFtZSkgeworICAgIHRoaXMubW9kdWxlLmV4cG9y
dHMucHVzaCgKKyAgICAgICAge25hbWU6IG5hbWUsIGtpbmQ6IGtFeHRlcm5hbEdsb2JhbCwgaW5k
ZXg6IHRoaXMuaW5kZXh9KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorfQorCitjbGFzcyBXYXNt
VGFibGVCdWlsZGVyIHsKKyAgY29uc3RydWN0b3IobW9kdWxlLCB0eXBlLCBpbml0aWFsX3NpemUs
IG1heF9zaXplLCBpbml0X2V4cHIpIHsKKyAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKKyAgICB0
aGlzLnR5cGUgPSB0eXBlOworICAgIHRoaXMuaW5pdGlhbF9zaXplID0gaW5pdGlhbF9zaXplOwor
ICAgIHRoaXMuaGFzX21heCA9IG1heF9zaXplICE9PSB1bmRlZmluZWQ7CisgICAgdGhpcy5tYXhf
c2l6ZSA9IG1heF9zaXplOworICAgIHRoaXMuaW5pdF9leHByID0gaW5pdF9leHByOworICAgIHRo
aXMuaGFzX2luaXQgPSBpbml0X2V4cHIgIT09IHVuZGVmaW5lZDsKKyAgfQorCisgIGV4cG9ydEFz
KG5hbWUpIHsKKyAgICB0aGlzLm1vZHVsZS5leHBvcnRzLnB1c2goCisgICAgICAgIHtuYW1lOiBu
YW1lLCBraW5kOiBrRXh0ZXJuYWxUYWJsZSwgaW5kZXg6IHRoaXMuaW5kZXh9KTsKKyAgICByZXR1
cm4gdGhpczsKKyAgfQorfQorCitmdW5jdGlvbiBtYWtlRmllbGQodHlwZSwgbXV0YWJpbGl0eSkg
eworICBpZiAoKHR5cGVvZiBtdXRhYmlsaXR5KSAhPSAnYm9vbGVhbicpIHsKKyAgICB0aHJvdyBu
ZXcgRXJyb3IoJ2ZpZWxkIG11dGFiaWxpdHkgbXVzdCBiZSBib29sZWFuJyk7CisgIH0KKyAgcmV0
dXJuIHt0eXBlOiB0eXBlLCBtdXRhYmlsaXR5OiBtdXRhYmlsaXR5fTsKK30KKworY2xhc3MgV2Fz
bVN0cnVjdCB7CisgIGNvbnN0cnVjdG9yKGZpZWxkcykgeworICAgIGlmICghQXJyYXkuaXNBcnJh
eShmaWVsZHMpKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cnVjdCBmaWVsZHMgbXVzdCBi
ZSBhbiBhcnJheScpOworICAgIH0KKyAgICB0aGlzLmZpZWxkcyA9IGZpZWxkczsKKyAgICB0aGlz
LnR5cGVfZm9ybSA9IGtXYXNtU3RydWN0VHlwZUZvcm07CisgIH0KK30KKworY2xhc3MgV2FzbVN0
cnVjdFN1YnR5cGUgZXh0ZW5kcyBXYXNtU3RydWN0IHsKKyAgY29uc3RydWN0b3IoZmllbGRzLCBz
dXBlcnR5cGVfaWR4KSB7CisgICAgc3VwZXIoZmllbGRzKTsKKyAgICB0aGlzLnN1cGVydHlwZSA9
IHN1cGVydHlwZV9pZHg7CisgICAgdGhpcy50eXBlX2Zvcm0gPSBrV2FzbVN0cnVjdFN1YnR5cGVG
b3JtOworICB9Cit9CisKK2NsYXNzIFdhc21BcnJheSB7CisgIGNvbnN0cnVjdG9yKHR5cGUsIG11
dGFiaWxpdHkpIHsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIGlmICghbXV0YWJpbGl0eSkg
dGhyb3cgbmV3IEVycm9yKCJJbW11dGFibGUgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIHlldCIp
OworICAgIHRoaXMubXV0YWJpbGl0eSA9IG11dGFiaWxpdHk7CisgICAgdGhpcy50eXBlX2Zvcm0g
PSBrV2FzbUFycmF5VHlwZUZvcm07CisgIH0KK30KKworY2xhc3MgV2FzbUFycmF5U3VidHlwZSBl
eHRlbmRzIFdhc21BcnJheSB7CisgIGNvbnN0cnVjdG9yKHR5cGUsIG11dGFiaWxpdHksIHN1cGVy
dHlwZV9pZHgpIHsKKyAgICBzdXBlcih0eXBlLCBtdXRhYmlsaXR5KTsKKyAgICB0aGlzLnN1cGVy
dHlwZSA9IHN1cGVydHlwZV9pZHg7CisgICAgdGhpcy50eXBlX2Zvcm0gPSBrV2FzbUFycmF5U3Vi
dHlwZUZvcm07CisgIH0KK30KK2NsYXNzIFdhc21FbGVtU2VnbWVudCB7CisgIGNvbnN0cnVjdG9y
KHRhYmxlLCBvZmZzZXQsIHR5cGUsIGVsZW1lbnRzLCBpc19kZWNsKSB7CisgICAgdGhpcy50YWJs
ZSA9IHRhYmxlOworICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0OworICAgIHRoaXMudHlwZSA9IHR5
cGU7CisgICAgdGhpcy5lbGVtZW50cyA9IGVsZW1lbnRzOworICAgIHRoaXMuaXNfZGVjbCA9IGlz
X2RlY2w7CisgICAgLy8gSW52YXJpYW50IGNoZWNrcy4KKyAgICBpZiAoKHRhYmxlID09PSB1bmRl
ZmluZWQpICE9IChvZmZzZXQgPT09IHVuZGVmaW5lZCkpIHsKKyAgICAgIHRocm93IG5ldyBFcnJv
cigiaW52YWxpZCBlbGVtZW50IHNlZ21lbnQiKTsKKyAgICB9CisgICAgZm9yIChsZXQgZWxlbSBv
ZiBlbGVtZW50cykgeworICAgICAgaWYgKCgodHlwZW9mIGVsZW0pID09ICdudW1iZXInKSAhPSAo
dHlwZSA9PT0gdW5kZWZpbmVkKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImludmFsaWQg
ZWxlbWVudCIpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlzX2FjdGl2ZSgpIHsKKyAgICBy
ZXR1cm4gdGhpcy50YWJsZSAhPT0gdW5kZWZpbmVkOworICB9CisKKyAgaXNfcGFzc2l2ZSgpIHsK
KyAgICByZXR1cm4gdGhpcy50YWJsZSA9PT0gdW5kZWZpbmVkICYmICF0aGlzLmlzX2RlY2w7Cisg
IH0KKworICBpc19kZWNsYXJhdGl2ZSgpIHsKKyAgICByZXR1cm4gdGhpcy50YWJsZSA9PT0gdW5k
ZWZpbmVkICYmIHRoaXMuaXNfZGVjbDsKKyAgfQorCisgIGV4cHJlc3Npb25zX2FzX2VsZW1lbnRz
KCkgeworICAgIHJldHVybiB0aGlzLnR5cGUgIT09IHVuZGVmaW5lZDsKKyAgfQorfQorCitjbGFz
cyBXYXNtTW9kdWxlQnVpbGRlciB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMudHlwZXMg
PSBbXTsKKyAgICB0aGlzLmltcG9ydHMgPSBbXTsKKyAgICB0aGlzLmV4cG9ydHMgPSBbXTsKKyAg
ICB0aGlzLmdsb2JhbHMgPSBbXTsKKyAgICB0aGlzLnRhYmxlcyA9IFtdOworICAgIHRoaXMudGFn
cyA9IFtdOworICAgIHRoaXMuZnVuY3Rpb25zID0gW107CisgICAgdGhpcy5jb21waWxhdGlvbl9o
aW50cyA9IFtdOworICAgIHRoaXMuZWxlbWVudF9zZWdtZW50cyA9IFtdOworICAgIHRoaXMuZGF0
YV9zZWdtZW50cyA9IFtdOworICAgIHRoaXMuZXhwbGljaXQgPSBbXTsKKyAgICB0aGlzLm51bV9p
bXBvcnRlZF9mdW5jcyA9IDA7CisgICAgdGhpcy5udW1faW1wb3J0ZWRfZ2xvYmFscyA9IDA7Cisg
ICAgdGhpcy5udW1faW1wb3J0ZWRfdGFibGVzID0gMDsKKyAgICB0aGlzLm51bV9pbXBvcnRlZF90
YWdzID0gMDsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZFN0YXJ0KHN0YXJ0X2luZGV4
KSB7CisgICAgdGhpcy5zdGFydF9pbmRleCA9IHN0YXJ0X2luZGV4OworICAgIHJldHVybiB0aGlz
OworICB9CisKKyAgYWRkTWVtb3J5KG1pbiwgbWF4LCBleHBvcnRlZCwgc2hhcmVkKSB7CisgICAg
dGhpcy5tZW1vcnkgPSB7CisgICAgICBtaW46IG1pbiwKKyAgICAgIG1heDogbWF4LAorICAgICAg
ZXhwb3J0ZWQ6IGV4cG9ydGVkLAorICAgICAgc2hhcmVkOiBzaGFyZWQgfHwgZmFsc2UsCisgICAg
ICBpc19tZW1vcnk2NDogZmFsc2UKKyAgICB9OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAg
YWRkTWVtb3J5NjQobWluLCBtYXgsIGV4cG9ydGVkKSB7CisgICAgdGhpcy5tZW1vcnkgPSB7Cisg
ICAgICBtaW46IG1pbiwKKyAgICAgIG1heDogbWF4LAorICAgICAgZXhwb3J0ZWQ6IGV4cG9ydGVk
LAorICAgICAgc2hhcmVkOiBmYWxzZSwKKyAgICAgIGlzX21lbW9yeTY0OiB0cnVlCisgICAgfTsK
KyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZEV4cGxpY2l0U2VjdGlvbihieXRlcykgewor
ICAgIHRoaXMuZXhwbGljaXQucHVzaChieXRlcyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKwor
ICBzdHJpbmdUb0J5dGVzKG5hbWUpIHsKKyAgICB2YXIgcmVzdWx0ID0gbmV3IEJpbmFyeSgpOwor
ICAgIHJlc3VsdC5lbWl0X3UzMnYobmFtZS5sZW5ndGgpOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbmFtZS5sZW5ndGg7IGkrKykgeworICAgICAgcmVzdWx0LmVtaXRfdTgobmFtZS5jaGFyQ29k
ZUF0KGkpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC50cnVuY19idWZmZXIoKQorICB9CisK
KyAgY3JlYXRlQ3VzdG9tU2VjdGlvbihuYW1lLCBieXRlcykgeworICAgIG5hbWUgPSB0aGlzLnN0
cmluZ1RvQnl0ZXMobmFtZSk7CisgICAgdmFyIHNlY3Rpb24gPSBuZXcgQmluYXJ5KCk7CisgICAg
c2VjdGlvbi5lbWl0X3U4KDApOworICAgIHNlY3Rpb24uZW1pdF91MzJ2KG5hbWUubGVuZ3RoICsg
Ynl0ZXMubGVuZ3RoKTsKKyAgICBzZWN0aW9uLmVtaXRfYnl0ZXMobmFtZSk7CisgICAgc2VjdGlv
bi5lbWl0X2J5dGVzKGJ5dGVzKTsKKyAgICByZXR1cm4gc2VjdGlvbi50cnVuY19idWZmZXIoKTsK
KyAgfQorCisgIGFkZEN1c3RvbVNlY3Rpb24obmFtZSwgYnl0ZXMpIHsKKyAgICB0aGlzLmV4cGxp
Y2l0LnB1c2godGhpcy5jcmVhdGVDdXN0b21TZWN0aW9uKG5hbWUsIGJ5dGVzKSk7CisgIH0KKwor
ICBhZGRUeXBlKHR5cGUpIHsKKyAgICB0aGlzLnR5cGVzLnB1c2godHlwZSk7CisgICAgdmFyIHBs
ID0gdHlwZS5wYXJhbXMubGVuZ3RoOyAgIC8vIHNob3VsZCBoYXZlIHBhcmFtcworICAgIHZhciBy
bCA9IHR5cGUucmVzdWx0cy5sZW5ndGg7ICAvLyBzaG91bGQgaGF2ZSByZXN1bHRzCisgICAgcmV0
dXJuIHRoaXMudHlwZXMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGFkZFN0cnVjdChmaWVsZHMpIHsK
KyAgICB0aGlzLnR5cGVzLnB1c2gobmV3IFdhc21TdHJ1Y3QoZmllbGRzKSk7CisgICAgcmV0dXJu
IHRoaXMudHlwZXMubGVuZ3RoIC0gMTsKKyAgfQorCisgIGtHZW5lcmljU3VwZXJUeXBlID0gMHhG
RkZGRkZGRTsKKyAgYWRkU3RydWN0U3VidHlwZShmaWVsZHMsIHN1cGVydHlwZV9pZHggPSB0aGlz
LmtHZW5lcmljU3VwZXJUeXBlKSB7CisgICAgdGhpcy50eXBlcy5wdXNoKG5ldyBXYXNtU3RydWN0
U3VidHlwZShmaWVsZHMsIHN1cGVydHlwZV9pZHgpKTsKKyAgICByZXR1cm4gdGhpcy50eXBlcy5s
ZW5ndGggLSAxOworICB9CisKKyAgYWRkQXJyYXkodHlwZSwgbXV0YWJpbGl0eSkgeworICAgIHRo
aXMudHlwZXMucHVzaChuZXcgV2FzbUFycmF5KHR5cGUsIG11dGFiaWxpdHkpKTsKKyAgICByZXR1
cm4gdGhpcy50eXBlcy5sZW5ndGggLSAxOworICB9CisKKyAgYWRkQXJyYXlTdWJ0eXBlKHR5cGUs
IG11dGFiaWxpdHksIHN1cGVydHlwZV9pZHggPSB0aGlzLmtHZW5lcmljU3VwZXJUeXBlKSB7Cisg
ICAgdGhpcy50eXBlcy5wdXNoKG5ldyBXYXNtQXJyYXlTdWJ0eXBlKHR5cGUsIG11dGFiaWxpdHks
IHN1cGVydHlwZV9pZHgpKTsKKyAgICByZXR1cm4gdGhpcy50eXBlcy5sZW5ndGggLSAxOworICB9
CisKKyAgYWRkR2xvYmFsKHR5cGUsIG11dGFibGUsIGluaXQpIHsKKyAgICBpZiAoaW5pdCA9PT0g
dW5kZWZpbmVkKSBpbml0ID0gV2FzbUluaXRFeHByLmRlZmF1bHRGb3IodHlwZSk7CisgICAgbGV0
IGdsb2IgPSBuZXcgV2FzbUdsb2JhbEJ1aWxkZXIodGhpcywgdHlwZSwgbXV0YWJsZSwgaW5pdCk7
CisgICAgZ2xvYi5pbmRleCA9IHRoaXMuZ2xvYmFscy5sZW5ndGggKyB0aGlzLm51bV9pbXBvcnRl
ZF9nbG9iYWxzOworICAgIHRoaXMuZ2xvYmFscy5wdXNoKGdsb2IpOworICAgIHJldHVybiBnbG9i
OworICB9CisKKyAgYWRkVGFibGUoCisgICAgICB0eXBlLCBpbml0aWFsX3NpemUsIG1heF9zaXpl
ID0gdW5kZWZpbmVkLCBpbml0X2V4cHIgPSB1bmRlZmluZWQpIHsKKyAgICBpZiAodHlwZSA9PSBr
V2FzbUkzMiB8fCB0eXBlID09IGtXYXNtSTY0IHx8IHR5cGUgPT0ga1dhc21GMzIgfHwKKyAgICAg
ICAgdHlwZSA9PSBrV2FzbUY2NCB8fCB0eXBlID09IGtXYXNtUzEyOCB8fCB0eXBlID09IGtXYXNt
Vm9pZCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdUYWJsZXMgbXVzdCBiZSBvZiBhIHJlZmVy
ZW5jZSB0eXBlJyk7CisgICAgfQorICAgIGxldCB0YWJsZSA9IG5ldyBXYXNtVGFibGVCdWlsZGVy
KAorICAgICAgICB0aGlzLCB0eXBlLCBpbml0aWFsX3NpemUsIG1heF9zaXplLCBpbml0X2V4cHIp
OworICAgIHRhYmxlLmluZGV4ID0gdGhpcy50YWJsZXMubGVuZ3RoICsgdGhpcy5udW1faW1wb3J0
ZWRfdGFibGVzOworICAgIHRoaXMudGFibGVzLnB1c2godGFibGUpOworICAgIHJldHVybiB0YWJs
ZTsKKyAgfQorCisgIGFkZFRhZyh0eXBlKSB7CisgICAgbGV0IHR5cGVfaW5kZXggPSAodHlwZW9m
IHR5cGUpID09ICdudW1iZXInID8gdHlwZSA6IHRoaXMuYWRkVHlwZSh0eXBlKTsKKyAgICBsZXQg
dGFnX2luZGV4ID0gdGhpcy50YWdzLmxlbmd0aCArIHRoaXMubnVtX2ltcG9ydGVkX3RhZ3M7Cisg
ICAgdGhpcy50YWdzLnB1c2godHlwZV9pbmRleCk7CisgICAgcmV0dXJuIHRhZ19pbmRleDsKKyAg
fQorCisgIGFkZEZ1bmN0aW9uKG5hbWUsIHR5cGUsIGFyZ19uYW1lcykgeworICAgIGFyZ19uYW1l
cyA9IGFyZ19uYW1lcyB8fCBbXTsKKyAgICBsZXQgdHlwZV9pbmRleCA9ICh0eXBlb2YgdHlwZSkg
PT0gJ251bWJlcicgPyB0eXBlIDogdGhpcy5hZGRUeXBlKHR5cGUpOworICAgIGxldCBudW1fYXJn
cyA9IHRoaXMudHlwZXNbdHlwZV9pbmRleF0ucGFyYW1zLmxlbmd0aDsKKyAgICBpZiAobnVtX2Fy
Z3MgPCBhcmdfbmFtZXMubGVuZ3RoKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCd0b28gbWFueSBh
cmcgbmFtZXMgcHJvdmlkZWQnKTsKKyAgICBpZiAobnVtX2FyZ3MgPiBhcmdfbmFtZXMubGVuZ3Ro
KQorICAgICAgYXJnX25hbWVzLnB1c2gobnVtX2FyZ3MgLSBhcmdfbmFtZXMubGVuZ3RoKTsKKyAg
ICBsZXQgZnVuYyA9IG5ldyBXYXNtRnVuY3Rpb25CdWlsZGVyKHRoaXMsIG5hbWUsIHR5cGVfaW5k
ZXgsIGFyZ19uYW1lcyk7CisgICAgZnVuYy5pbmRleCA9IHRoaXMuZnVuY3Rpb25zLmxlbmd0aCAr
IHRoaXMubnVtX2ltcG9ydGVkX2Z1bmNzOworICAgIHRoaXMuZnVuY3Rpb25zLnB1c2goZnVuYyk7
CisgICAgcmV0dXJuIGZ1bmM7CisgIH0KKworICBhZGRJbXBvcnQobW9kdWxlLCBuYW1lLCB0eXBl
KSB7CisgICAgaWYgKHRoaXMuZnVuY3Rpb25zLmxlbmd0aCAhPSAwKSB7CisgICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ0ltcG9ydGVkIGZ1bmN0aW9ucyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2Nh
bCBvbmVzJyk7CisgICAgfQorICAgIGxldCB0eXBlX2luZGV4ID0gKHR5cGVvZiB0eXBlKSA9PSAn
bnVtYmVyJyA/IHR5cGUgOiB0aGlzLmFkZFR5cGUodHlwZSk7CisgICAgdGhpcy5pbXBvcnRzLnB1
c2goeworICAgICAgbW9kdWxlOiBtb2R1bGUsCisgICAgICBuYW1lOiBuYW1lLAorICAgICAga2lu
ZDoga0V4dGVybmFsRnVuY3Rpb24sCisgICAgICB0eXBlX2luZGV4OiB0eXBlX2luZGV4CisgICAg
fSk7CisgICAgcmV0dXJuIHRoaXMubnVtX2ltcG9ydGVkX2Z1bmNzKys7CisgIH0KKworICBhZGRJ
bXBvcnRlZEdsb2JhbChtb2R1bGUsIG5hbWUsIHR5cGUsIG11dGFibGUgPSBmYWxzZSkgeworICAg
IGlmICh0aGlzLmdsb2JhbHMubGVuZ3RoICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcign
SW1wb3J0ZWQgZ2xvYmFscyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2NhbCBvbmVzJyk7Cisg
ICAgfQorICAgIGxldCBvID0geworICAgICAgbW9kdWxlOiBtb2R1bGUsCisgICAgICBuYW1lOiBu
YW1lLAorICAgICAga2luZDoga0V4dGVybmFsR2xvYmFsLAorICAgICAgdHlwZTogdHlwZSwKKyAg
ICAgIG11dGFibGU6IG11dGFibGUKKyAgICB9OworICAgIHRoaXMuaW1wb3J0cy5wdXNoKG8pOwor
ICAgIHJldHVybiB0aGlzLm51bV9pbXBvcnRlZF9nbG9iYWxzKys7CisgIH0KKworICBhZGRJbXBv
cnRlZE1lbW9yeShtb2R1bGUsIG5hbWUsIGluaXRpYWwgPSAwLCBtYXhpbXVtLCBzaGFyZWQpIHsK
KyAgICBsZXQgbyA9IHsKKyAgICAgIG1vZHVsZTogbW9kdWxlLAorICAgICAgbmFtZTogbmFtZSwK
KyAgICAgIGtpbmQ6IGtFeHRlcm5hbE1lbW9yeSwKKyAgICAgIGluaXRpYWw6IGluaXRpYWwsCisg
ICAgICBtYXhpbXVtOiBtYXhpbXVtLAorICAgICAgc2hhcmVkOiBzaGFyZWQKKyAgICB9OworICAg
IHRoaXMuaW1wb3J0cy5wdXNoKG8pOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRkSW1w
b3J0ZWRUYWJsZShtb2R1bGUsIG5hbWUsIGluaXRpYWwsIG1heGltdW0sIHR5cGUpIHsKKyAgICBp
ZiAodGhpcy50YWJsZXMubGVuZ3RoICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignSW1w
b3J0ZWQgdGFibGVzIG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGxvY2FsIG9uZXMnKTsKKyAgICB9
CisgICAgbGV0IG8gPSB7CisgICAgICBtb2R1bGU6IG1vZHVsZSwKKyAgICAgIG5hbWU6IG5hbWUs
CisgICAgICBraW5kOiBrRXh0ZXJuYWxUYWJsZSwKKyAgICAgIGluaXRpYWw6IGluaXRpYWwsCisg
ICAgICBtYXhpbXVtOiBtYXhpbXVtLAorICAgICAgdHlwZTogdHlwZSB8fCBrV2FzbUZ1bmNSZWYK
KyAgICB9OworICAgIHRoaXMuaW1wb3J0cy5wdXNoKG8pOworICAgIHJldHVybiB0aGlzLm51bV9p
bXBvcnRlZF90YWJsZXMrKzsKKyAgfQorCisgIGFkZEltcG9ydGVkVGFnKG1vZHVsZSwgbmFtZSwg
dHlwZSkgeworICAgIGlmICh0aGlzLnRhZ3MubGVuZ3RoICE9IDApIHsKKyAgICAgIHRocm93IG5l
dyBFcnJvcignSW1wb3J0ZWQgdGFncyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2NhbCBvbmVz
Jyk7CisgICAgfQorICAgIGxldCB0eXBlX2luZGV4ID0gKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVy
JyA/IHR5cGUgOiB0aGlzLmFkZFR5cGUodHlwZSk7CisgICAgbGV0IG8gPSB7CisgICAgICBtb2R1
bGU6IG1vZHVsZSwKKyAgICAgIG5hbWU6IG5hbWUsCisgICAgICBraW5kOiBrRXh0ZXJuYWxUYWcs
CisgICAgICB0eXBlX2luZGV4OiB0eXBlX2luZGV4CisgICAgfTsKKyAgICB0aGlzLmltcG9ydHMu
cHVzaChvKTsKKyAgICByZXR1cm4gdGhpcy5udW1faW1wb3J0ZWRfdGFncysrOworICB9CisKKyAg
YWRkRXhwb3J0KG5hbWUsIGluZGV4KSB7CisgICAgdGhpcy5leHBvcnRzLnB1c2goe25hbWU6IG5h
bWUsIGtpbmQ6IGtFeHRlcm5hbEZ1bmN0aW9uLCBpbmRleDogaW5kZXh9KTsKKyAgICByZXR1cm4g
dGhpczsKKyAgfQorCisgIGFkZEV4cG9ydE9mS2luZChuYW1lLCBraW5kLCBpbmRleCkgeworICAg
IGlmIChpbmRleCA9PT0gdW5kZWZpbmVkICYmIGtpbmQgIT0ga0V4dGVybmFsVGFibGUgJiYKKyAg
ICAgICAga2luZCAhPSBrRXh0ZXJuYWxNZW1vcnkpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigK
KyAgICAgICAgICAnSW5kZXggZm9yIGV4cG9ydHMgb3RoZXIgdGhhbiB0YWJsZXMvbWVtb3JpZXMg
bXVzdCBiZSBwcm92aWRlZCcpOworICAgIH0KKyAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCAm
JiAodHlwZW9mIGluZGV4KSAhPSAnbnVtYmVyJykgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdJ
bmRleCBmb3IgZXhwb3J0cyBtdXN0IGJlIGEgbnVtYmVyJykKKyAgICB9CisgICAgdGhpcy5leHBv
cnRzLnB1c2goe25hbWU6IG5hbWUsIGtpbmQ6IGtpbmQsIGluZGV4OiBpbmRleH0pOworICAgIHJl
dHVybiB0aGlzOworICB9CisKKyAgc2V0Q29tcGlsYXRpb25IaW50KHN0cmF0ZWd5LCBiYXNlbGlu
ZVRpZXIsIHRvcFRpZXIsIGluZGV4KSB7CisgICAgdGhpcy5jb21waWxhdGlvbl9oaW50c1tpbmRl
eF0gPSB7CisgICAgICBzdHJhdGVneTogc3RyYXRlZ3ksCisgICAgICBiYXNlbGluZVRpZXI6IGJh
c2VsaW5lVGllciwKKyAgICAgIHRvcFRpZXI6IHRvcFRpZXIKKyAgICB9OworICAgIHJldHVybiB0
aGlzOworICB9CisKKyAgYWRkRGF0YVNlZ21lbnQoYWRkciwgZGF0YSwgaXNfZ2xvYmFsID0gZmFs
c2UpIHsKKyAgICB0aGlzLmRhdGFfc2VnbWVudHMucHVzaCgKKyAgICAgICAge2FkZHI6IGFkZHIs
IGRhdGE6IGRhdGEsIGlzX2dsb2JhbDogaXNfZ2xvYmFsLCBpc19hY3RpdmU6IHRydWV9KTsKKyAg
ICByZXR1cm4gdGhpcy5kYXRhX3NlZ21lbnRzLmxlbmd0aCAtIDE7CisgIH0KKworICBhZGRQYXNz
aXZlRGF0YVNlZ21lbnQoZGF0YSkgeworICAgIHRoaXMuZGF0YV9zZWdtZW50cy5wdXNoKHtkYXRh
OiBkYXRhLCBpc19hY3RpdmU6IGZhbHNlfSk7CisgICAgcmV0dXJuIHRoaXMuZGF0YV9zZWdtZW50
cy5sZW5ndGggLSAxOworICB9CisKKyAgZXhwb3J0TWVtb3J5QXMobmFtZSkgeworICAgIHRoaXMu
ZXhwb3J0cy5wdXNoKHtuYW1lOiBuYW1lLCBraW5kOiBrRXh0ZXJuYWxNZW1vcnksIGluZGV4OiAw
fSk7CisgIH0KKworICAvLyB7b2Zmc2V0fSBpcyBhbiBpbml0aWFsaXplciBleHByZXNzaW9uLgor
ICAvLyBJZiB7dHlwZX0gaXMgdW5kZWZpbmVkLCB0aGVuIHtlbGVtZW50c30gYXJlIGZ1bmN0aW9u
IGluZGljZXMuIE90aGVyd2lzZSwKKyAgLy8gdGhleSBhcmUgaW5pdGlhbGl6ZXIgZXhwcmVzc2lv
bnMuCisgIGFkZEFjdGl2ZUVsZW1lbnRTZWdtZW50KHRhYmxlLCBvZmZzZXQsIGVsZW1lbnRzLCB0
eXBlKSB7CisgICAgdGhpcy5lbGVtZW50X3NlZ21lbnRzLnB1c2goCisgICAgICAgIG5ldyBXYXNt
RWxlbVNlZ21lbnQodGFibGUsIG9mZnNldCwgdHlwZSwgZWxlbWVudHMsIGZhbHNlKSk7CisgICAg
cmV0dXJuIHRoaXMuZWxlbWVudF9zZWdtZW50cy5sZW5ndGggLSAxOworICB9CisKKyAgLy8gSWYg
e3R5cGV9IGlzIHVuZGVmaW5lZCwgdGhlbiB7ZWxlbWVudHN9IGFyZSBmdW5jdGlvbiBpbmRpY2Vz
LiBPdGhlcndpc2UsCisgIC8vIHRoZXkgYXJlIGluaXRpYWxpemVyIGV4cHJlc3Npb25zLgorICBh
ZGRQYXNzaXZlRWxlbWVudFNlZ21lbnQoZWxlbWVudHMsIHR5cGUpIHsKKyAgICB0aGlzLmVsZW1l
bnRfc2VnbWVudHMucHVzaCgKKyAgICAgIG5ldyBXYXNtRWxlbVNlZ21lbnQodW5kZWZpbmVkLCB1
bmRlZmluZWQsIHR5cGUsIGVsZW1lbnRzLCBmYWxzZSkpOworICAgIHJldHVybiB0aGlzLmVsZW1l
bnRfc2VnbWVudHMubGVuZ3RoIC0gMTsKKyAgfQorCisgIC8vIElmIHt0eXBlfSBpcyB1bmRlZmlu
ZWQsIHRoZW4ge2VsZW1lbnRzfSBhcmUgZnVuY3Rpb24gaW5kaWNlcy4gT3RoZXJ3aXNlLAorICAv
LyB0aGV5IGFyZSBpbml0aWFsaXplciBleHByZXNzaW9ucy4KKyAgYWRkRGVjbGFyYXRpdmVFbGVt
ZW50U2VnbWVudChlbGVtZW50cywgdHlwZSkgeworICAgIHRoaXMuZWxlbWVudF9zZWdtZW50cy5w
dXNoKAorICAgICAgbmV3IFdhc21FbGVtU2VnbWVudCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHlw
ZSwgZWxlbWVudHMsIHRydWUpKTsKKyAgICByZXR1cm4gdGhpcy5lbGVtZW50X3NlZ21lbnRzLmxl
bmd0aCAtIDE7CisgIH0KKworICBhcHBlbmRUb1RhYmxlKGFycmF5KSB7CisgICAgZm9yIChsZXQg
biBvZiBhcnJheSkgeworICAgICAgaWYgKHR5cGVvZiBuICE9ICdudW1iZXInKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdGFibGUgKGVudHJpZXMgaGF2ZSB0byBiZSBudW1iZXJz
KTogJyArIGFycmF5KTsKKyAgICB9CisgICAgaWYgKHRoaXMudGFibGVzLmxlbmd0aCA9PSAwKSB7
CisgICAgICB0aGlzLmFkZFRhYmxlKGtXYXNtQW55RnVuYywgMCk7CisgICAgfQorICAgIC8vIEFk
anVzdCB0aGUgdGFibGUgdG8gdGhlIGNvcnJlY3Qgc2l6ZS4KKyAgICBsZXQgdGFibGUgPSB0aGlz
LnRhYmxlc1swXTsKKyAgICBjb25zdCBiYXNlID0gdGFibGUuaW5pdGlhbF9zaXplOworICAgIGNv
bnN0IHRhYmxlX3NpemUgPSBiYXNlICsgYXJyYXkubGVuZ3RoOworICAgIHRhYmxlLmluaXRpYWxf
c2l6ZSA9IHRhYmxlX3NpemU7CisgICAgaWYgKHRhYmxlLmhhc19tYXggJiYgdGFibGVfc2l6ZSA+
IHRhYmxlLm1heF9zaXplKSB7CisgICAgICB0YWJsZS5tYXhfc2l6ZSA9IHRhYmxlX3NpemU7Cisg
ICAgfQorICAgIHJldHVybiB0aGlzLmFkZEFjdGl2ZUVsZW1lbnRTZWdtZW50KDAsIFdhc21Jbml0
RXhwci5JMzJDb25zdChiYXNlKSwgYXJyYXkpOworICB9CisKKyAgc2V0VGFibGVCb3VuZHMobWlu
LCBtYXggPSB1bmRlZmluZWQpIHsKKyAgICBpZiAodGhpcy50YWJsZXMubGVuZ3RoICE9IDApIHsK
KyAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHRhYmxlIGJvdW5kcyBvZiB0YWJsZSBcJzBcJyBo
YXZlIGFscmVhZHkgYmVlbiBzZXQuJyk7CisgICAgfQorICAgIHRoaXMuYWRkVGFibGUoa1dhc21B
bnlGdW5jLCBtaW4sIG1heCk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBzZXROYW1lKG5h
bWUpIHsKKyAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAg
dG9CdWZmZXIoZGVidWcgPSBmYWxzZSkgeworICAgIGxldCBiaW5hcnkgPSBuZXcgQmluYXJ5Owor
ICAgIGxldCB3YXNtID0gdGhpczsKKworICAgIC8vIEFkZCBoZWFkZXIKKyAgICBiaW5hcnkuZW1p
dF9oZWFkZXIoKTsKKworICAgIC8vIEFkZCB0eXBlIHNlY3Rpb24KKyAgICBpZiAod2FzbS50eXBl
cy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyB0eXBlcyBA
ICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1R5cGVTZWN0
aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20udHlw
ZXMubGVuZ3RoKTsKKyAgICAgICAgZm9yIChsZXQgdHlwZSBvZiB3YXNtLnR5cGVzKSB7CisgICAg
ICAgICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBXYXNtU3RydWN0KSB7CisgICAgICAgICAgICBzZWN0
aW9uLmVtaXRfdTgodHlwZS50eXBlX2Zvcm0pOworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3Uz
MnYodHlwZS5maWVsZHMubGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHR5
cGUuZmllbGRzKSB7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKGZpZWxkLnR5cGUp
OworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoZmllbGQubXV0YWJpbGl0eSA/IDEgOiAw
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlIGluc3RhbmNlb2YgV2FzbVN0
cnVjdFN1YnR5cGUpIHsKKyAgICAgICAgICAgICAgaWYgKHR5cGUuc3VwZXJ0eXBlID09PSB0aGlz
LmtHZW5lcmljU3VwZXJUeXBlKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtE
YXRhUmVmQ29kZSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X2hlYXBfdHlwZSh0eXBlLnN1cGVydHlwZSk7CisgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBXYXNtQXJy
YXkpIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCh0eXBlLnR5cGVfZm9ybSk7CisgICAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZSh0eXBlLnR5cGUpOworICAgICAgICAgICAgc2VjdGlv
bi5lbWl0X3U4KHR5cGUubXV0YWJpbGl0eSA/IDEgOiAwKTsKKyAgICAgICAgICAgIGlmICh0eXBl
IGluc3RhbmNlb2YgV2FzbUFycmF5U3VidHlwZSkgeworICAgICAgICAgICAgICBpZiAodHlwZS5z
dXBlcnR5cGUgPT09IHRoaXMua0dlbmVyaWNTdXBlclR5cGUpIHsKKyAgICAgICAgICAgICAgICBz
ZWN0aW9uLmVtaXRfdTgoa0RhdGFSZWZDb2RlKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfaGVhcF90eXBlKHR5cGUuc3VwZXJ0eXBlKTsKKyAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBzZWN0aW9uLmVtaXRfdTgoa1dhc21GdW5jdGlvblR5cGVGb3JtKTsKKyAgICAgICAgICAg
IHNlY3Rpb24uZW1pdF91MzJ2KHR5cGUucGFyYW1zLmxlbmd0aCk7CisgICAgICAgICAgICBmb3Ig
KGxldCBwYXJhbSBvZiB0eXBlLnBhcmFtcykgeworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRf
dHlwZShwYXJhbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMy
dih0eXBlLnJlc3VsdHMubGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAobGV0IHJlc3VsdCBvZiB0
eXBlLnJlc3VsdHMpIHsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUocmVzdWx0KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0K
KworICAgIC8vIEFkZCBpbXBvcnRzIHNlY3Rpb24KKyAgICBpZiAod2FzbS5pbXBvcnRzLmxlbmd0
aCA+IDApIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGltcG9ydHMgQCAnICsg
YmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtJbXBvcnRTZWN0aW9u
Q29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20uaW1wb3J0
cy5sZW5ndGgpOworICAgICAgICBmb3IgKGxldCBpbXAgb2Ygd2FzbS5pbXBvcnRzKSB7CisgICAg
ICAgICAgc2VjdGlvbi5lbWl0X3N0cmluZyhpbXAubW9kdWxlKTsKKyAgICAgICAgICBzZWN0aW9u
LmVtaXRfc3RyaW5nKGltcC5uYW1lIHx8ICcnKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgo
aW1wLmtpbmQpOworICAgICAgICAgIGlmIChpbXAua2luZCA9PSBrRXh0ZXJuYWxGdW5jdGlvbikg
eworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoaW1wLnR5cGVfaW5kZXgpOworICAgICAg
ICAgIH0gZWxzZSBpZiAoaW1wLmtpbmQgPT0ga0V4dGVybmFsR2xvYmFsKSB7CisgICAgICAgICAg
ICBzZWN0aW9uLmVtaXRfdHlwZShpbXAudHlwZSk7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRf
dTgoaW1wLm11dGFibGUpOworICAgICAgICAgIH0gZWxzZSBpZiAoaW1wLmtpbmQgPT0ga0V4dGVy
bmFsTWVtb3J5KSB7CisgICAgICAgICAgICB2YXIgaGFzX21heCA9ICh0eXBlb2YgaW1wLm1heGlt
dW0pICE9ICd1bmRlZmluZWQnOworICAgICAgICAgICAgdmFyIGlzX3NoYXJlZCA9ICh0eXBlb2Yg
aW1wLnNoYXJlZCkgIT0gJ3VuZGVmaW5lZCc7CisgICAgICAgICAgICBpZiAoaXNfc2hhcmVkKSB7
CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChoYXNfbWF4ID8gMyA6IDIpOyAgLy8gZmxh
Z3MKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCho
YXNfbWF4ID8gMSA6IDApOyAgLy8gZmxhZ3MKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNl
Y3Rpb24uZW1pdF91MzJ2KGltcC5pbml0aWFsKTsgICAgICAgICAgICAgICAvLyBpbml0aWFsCisg
ICAgICAgICAgICBpZiAoaGFzX21heCkgc2VjdGlvbi5lbWl0X3UzMnYoaW1wLm1heGltdW0pOyAg
Ly8gbWF4aW11bQorICAgICAgICAgIH0gZWxzZSBpZiAoaW1wLmtpbmQgPT0ga0V4dGVybmFsVGFi
bGUpIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKGltcC50eXBlKTsKKyAgICAgICAg
ICAgIHZhciBoYXNfbWF4ID0gKHR5cGVvZiBpbXAubWF4aW11bSkgIT0gJ3VuZGVmaW5lZCc7Cisg
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoaGFzX21heCA/IDEgOiAwKTsgICAgICAgICAgICAg
Ly8gZmxhZ3MKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGltcC5pbml0aWFsKTsgICAg
ICAgICAgICAgICAvLyBpbml0aWFsCisgICAgICAgICAgICBpZiAoaGFzX21heCkgc2VjdGlvbi5l
bWl0X3UzMnYoaW1wLm1heGltdW0pOyAgLy8gbWF4aW11bQorICAgICAgICAgIH0gZWxzZSBpZiAo
aW1wLmtpbmQgPT0ga0V4dGVybmFsVGFnKSB7CisgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMy
dihrRXhjZXB0aW9uQXR0cmlidXRlKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGlt
cC50eXBlX2luZGV4KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCd1bmtub3duL3Vuc3VwcG9ydGVkIGltcG9ydCBraW5kICcgKyBpbXAua2luZCk7Cisg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgZnVu
Y3Rpb25zIGRlY2xhcmF0aW9ucworICAgIGlmICh3YXNtLmZ1bmN0aW9ucy5sZW5ndGggPiAwKSB7
CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBmdW5jdGlvbiBkZWNscyBAICcgKyBi
aW5hcnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa0Z1bmN0aW9uU2VjdGlv
bkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLmZ1bmN0
aW9ucy5sZW5ndGgpOworICAgICAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7
CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoZnVuYy50eXBlX2luZGV4KTsKKyAgICAgICAg
fQorICAgICAgfSk7CisgICAgfQorCisgICAgLy8gQWRkIHRhYmxlIHNlY3Rpb24KKyAgICBpZiAo
d2FzbS50YWJsZXMubGVuZ3RoID4gMCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRp
bmcgdGFibGVzIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlv
bihrVGFibGVTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91
MzJ2KHdhc20udGFibGVzLmxlbmd0aCk7CisgICAgICAgIGZvciAobGV0IHRhYmxlIG9mIHdhc20u
dGFibGVzKSB7CisgICAgICAgICAgc2VjdGlvbi5lbWl0X3R5cGUodGFibGUudHlwZSk7CisgICAg
ICAgICAgc2VjdGlvbi5lbWl0X3U4KHRhYmxlLmhhc19tYXgpOworICAgICAgICAgIHNlY3Rpb24u
ZW1pdF91MzJ2KHRhYmxlLmluaXRpYWxfc2l6ZSk7CisgICAgICAgICAgaWYgKHRhYmxlLmhhc19t
YXgpIHNlY3Rpb24uZW1pdF91MzJ2KHRhYmxlLm1heF9zaXplKTsKKyAgICAgICAgICBpZiAodGFi
bGUuaGFzX2luaXQpIHsKKyAgICAgICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIodGFibGUu
aW5pdF9leHByKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKwor
ICAgIC8vIEFkZCBtZW1vcnkgc2VjdGlvbgorICAgIGlmICh3YXNtLm1lbW9yeSAhPT0gdW5kZWZp
bmVkKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBtZW1vcnkgQCAnICsgYmlu
YXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtNZW1vcnlTZWN0aW9uQ29k
ZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24uZW1pdF91OCgxKTsgIC8vIG9uZSBtZW1v
cnkgZW50cnkKKyAgICAgICAgY29uc3QgaGFzX21heCA9IHdhc20ubWVtb3J5Lm1heCAhPT0gdW5k
ZWZpbmVkOworICAgICAgICBpZiAod2FzbS5tZW1vcnkuaXNfbWVtb3J5NjQpIHsKKyAgICAgICAg
ICBpZiAod2FzbS5tZW1vcnkuc2hhcmVkKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J3NoYXJpbmcgbWVtb3J5NjQgaXMgbm90IHN1cHBvcnRlZCAoeWV0KScpOworICAgICAgICAgIH0K
KyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoCisgICAgICAgICAgICAgIGhhc19tYXggPyBrTGlt
aXRzTWVtb3J5NjRXaXRoTWF4aW11bSA6IGtMaW1pdHNNZW1vcnk2NE5vTWF4aW11bSk7CisgICAg
ICAgICAgc2VjdGlvbi5lbWl0X3U2NHYod2FzbS5tZW1vcnkubWluKTsKKyAgICAgICAgICBpZiAo
aGFzX21heCkgc2VjdGlvbi5lbWl0X3U2NHYod2FzbS5tZW1vcnkubWF4KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoCisgICAgICAgICAgICAgIHdhc20ubWVt
b3J5LnNoYXJlZCA/CisgICAgICAgICAgICAgICAgICAoaGFzX21heCA/IGtMaW1pdHNTaGFyZWRX
aXRoTWF4aW11bSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMaW1pdHNTaGFyZWRO
b01heGltdW0pIDoKKyAgICAgICAgICAgICAgICAgIChoYXNfbWF4ID8ga0xpbWl0c1dpdGhNYXhp
bXVtIDoga0xpbWl0c05vTWF4aW11bSkpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdh
c20ubWVtb3J5Lm1pbik7CisgICAgICAgICAgaWYgKGhhc19tYXgpIHNlY3Rpb24uZW1pdF91MzJ2
KHdhc20ubWVtb3J5Lm1heCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIC8v
IEFkZCB0YWcgc2VjdGlvbi4KKyAgICBpZiAod2FzbS50YWdzLmxlbmd0aCA+IDApIHsKKyAgICAg
IGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIHRhZ3MgQCAnICsgYmluYXJ5Lmxlbmd0aCk7Cisg
ICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtUYWdTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7Cisg
ICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20udGFncy5sZW5ndGgpOworICAgICAgICBmb3Ig
KGxldCB0eXBlX2luZGV4IG9mIHdhc20udGFncykgeworICAgICAgICAgIHNlY3Rpb24uZW1pdF91
MzJ2KGtFeGNlcHRpb25BdHRyaWJ1dGUpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHR5
cGVfaW5kZXgpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgZ2xv
YmFsIHNlY3Rpb24uCisgICAgaWYgKHdhc20uZ2xvYmFscy5sZW5ndGggPiAwKSB7CisgICAgICBp
ZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBnbG9iYWxzIEAgJyArIGJpbmFyeS5sZW5ndGgpOwor
ICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrR2xvYmFsU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4g
eworICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLmdsb2JhbHMubGVuZ3RoKTsKKyAgICAg
ICAgZm9yIChsZXQgZ2xvYmFsIG9mIHdhc20uZ2xvYmFscykgeworICAgICAgICAgIHNlY3Rpb24u
ZW1pdF90eXBlKGdsb2JhbC50eXBlKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoZ2xvYmFs
Lm11dGFibGUpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIoZ2xvYmFsLmluaXQp
OworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBBZGQgZXhwb3J0IHRhYmxl
LgorICAgIHZhciBtZW1fZXhwb3J0ID0gKHdhc20ubWVtb3J5ICE9PSB1bmRlZmluZWQgJiYgd2Fz
bS5tZW1vcnkuZXhwb3J0ZWQpOworICAgIHZhciBleHBvcnRzX2NvdW50ID0gd2FzbS5leHBvcnRz
Lmxlbmd0aCArIChtZW1fZXhwb3J0ID8gMSA6IDApOworICAgIGlmIChleHBvcnRzX2NvdW50ID4g
MCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgZXhwb3J0cyBAICcgKyBiaW5h
cnkubGVuZ3RoKTsKKyAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa0V4cG9ydFNlY3Rpb25Db2Rl
LCBzZWN0aW9uID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoZXhwb3J0c19jb3VudCk7
CisgICAgICAgIGZvciAobGV0IGV4cCBvZiB3YXNtLmV4cG9ydHMpIHsKKyAgICAgICAgICBzZWN0
aW9uLmVtaXRfc3RyaW5nKGV4cC5uYW1lKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoZXhw
LmtpbmQpOworICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGV4cC5pbmRleCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG1lbV9leHBvcnQpIHsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfc3Ry
aW5nKCdtZW1vcnknKTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0V4dGVybmFsTWVtb3J5
KTsKKyAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMCk7CisgICAgICAgIH0KKyAgICAgIH0pOwor
ICAgIH0KKworICAgIC8vIEFkZCBzdGFydCBmdW5jdGlvbiBzZWN0aW9uLgorICAgIGlmICh3YXNt
LnN0YXJ0X2luZGV4ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2Vt
aXR0aW5nIHN0YXJ0IGZ1bmN0aW9uIEAgJyArIGJpbmFyeS5sZW5ndGgpOworICAgICAgYmluYXJ5
LmVtaXRfc2VjdGlvbihrU3RhcnRTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNl
Y3Rpb24uZW1pdF91MzJ2KHdhc20uc3RhcnRfaW5kZXgpOworICAgICAgfSk7CisgICAgfQorCisg
ICAgLy8gQWRkIGVsZW1lbnQgc2VnbWVudHMKKyAgICBpZiAod2FzbS5lbGVtZW50X3NlZ21lbnRz
Lmxlbmd0aCA+IDApIHsKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGVsZW1lbnQg
c2VnbWVudHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0aW9u
KGtFbGVtZW50U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4geworICAgICAgICB2YXIgc2VnbWVudHMg
PSB3YXNtLmVsZW1lbnRfc2VnbWVudHM7CisgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHNlZ21l
bnRzLmxlbmd0aCk7CisKKyAgICAgICAgZm9yIChsZXQgc2VnbWVudCBvZiBzZWdtZW50cykgewor
ICAgICAgICAgIC8vIEVtaXQgZmxhZyBhbmQgaGVhZGVyLgorICAgICAgICAgIC8vIEVhY2ggY2Fz
ZSBiZWxvdyBjb3JyZXNwb25kcyB0byBhIGZsYWcgZnJvbQorICAgICAgICAgIC8vIGh0dHBzOi8v
d2ViYXNzZW1ibHkuZ2l0aHViLmlvL3NwZWMvY29yZS9iaW5hcnkvbW9kdWxlcy5odG1sI2VsZW1l
bnQtc2VjdGlvbgorICAgICAgICAgIC8vIChub3QgaW4gaW5jcmVhc2luZyBvcmRlcikuCisgICAg
ICAgICAgaWYgKHNlZ21lbnQuaXNfYWN0aXZlKCkpIHsKKyAgICAgICAgICAgIGlmIChzZWdtZW50
LnRhYmxlID09IDAgJiYgc2VnbWVudC50eXBlID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
ICAgaWYgKHNlZ21lbnQuZXhwcmVzc2lvbnNfYXNfZWxlbWVudHMoKSkgeworICAgICAgICAgICAg
ICAgIHNlY3Rpb24uZW1pdF91OCgweDA0KTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRf
aW5pdF9leHByKHNlZ21lbnQub2Zmc2V0KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwMCkKKyAgICAgICAgICAgICAgICBzZWN0aW9u
LmVtaXRfaW5pdF9leHByKHNlZ21lbnQub2Zmc2V0KTsKKyAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuZXhwcmVzc2lvbnNfYXNf
ZWxlbWVudHMoKSkgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDA2KTsKKyAg
ICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWdtZW50LnRhYmxlKTsKKyAgICAgICAg
ICAgICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKHNlZ21lbnQub2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShzZWdtZW50LnR5cGUpOworICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDAyKTsKKyAgICAgICAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWdtZW50LnRhYmxlKTsKKyAgICAgICAgICAgICAg
ICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKHNlZ21lbnQub2Zmc2V0KTsKKyAgICAgICAgICAgICAg
ICBzZWN0aW9uLmVtaXRfdTgoa0V4dGVybmFsRnVuY3Rpb24pOworICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzZWdtZW50
LmV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgaWYgKHNlZ21lbnQu
aXNfcGFzc2l2ZSgpKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDUpOwor
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgw
eDA3KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShz
ZWdtZW50LnR5cGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgaWYgKHNl
Z21lbnQuaXNfcGFzc2l2ZSgpKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4
MDEpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1p
dF91OCgweDAzKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRf
dTgoa0V4dGVybmFsRnVuY3Rpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAg
ICAgICAgIC8vIEVtaXQgZWxlbWVudHMuCisgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoc2Vn
bWVudC5lbGVtZW50cy5sZW5ndGgpOworICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2Ygc2Vn
bWVudC5lbGVtZW50cykgeworICAgICAgICAgICAgaWYgKHNlZ21lbnQuZXhwcmVzc2lvbnNfYXNf
ZWxlbWVudHMoKSkgeworICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKGVsZW1l
bnQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3Uz
MnYoZWxlbWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICB9KQorICAgIH0KKworICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgcGFzc2l2ZSBkYXRhIHNlZ21l
bnRzLCBhZGQgdGhlIERhdGFDb3VudCBzZWN0aW9uLgorICAgIGlmICh3YXNtLmRhdGFfc2VnbWVu
dHMuc29tZShzZWcgPT4gIXNlZy5pc19hY3RpdmUpKSB7CisgICAgICBiaW5hcnkuZW1pdF9zZWN0
aW9uKGtEYXRhQ291bnRTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CisgICAgICAgIHNlY3Rpb24u
ZW1pdF91MzJ2KHdhc20uZGF0YV9zZWdtZW50cy5sZW5ndGgpOworICAgICAgfSk7CisgICAgfQor
CisgICAgLy8gSWYgdGhlcmUgYXJlIGNvbXBpbGF0aW9uIGhpbnRzIGFkZCBhIGN1c3RvbSBzZWN0
aW9uICdjb21waWxhdGlvbkhpbnRzJworICAgIC8vIGFmdGVyIHRoZSBmdW5jdGlvbiBzZWN0aW9u
IGFuZCBiZWZvcmUgdGhlIGNvZGUgc2VjdGlvbi4KKyAgICBpZiAod2FzbS5jb21waWxhdGlvbl9o
aW50cy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBjb21w
aWxhdGlvbiBoaW50cyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKKyAgICAgIC8vIEJ1aWxkIGN1c3Rv
bSBzZWN0aW9uIHBheWxvYWQuCisgICAgICBsZXQgcGF5bG9hZEJpbmFyeSA9IG5ldyBCaW5hcnko
KTsKKyAgICAgIGxldCBpbXBsaWNpdF9jb21waWxhdGlvbl9oaW50c19jb3VudCA9IHdhc20uZnVu
Y3Rpb25zLmxlbmd0aDsKKyAgICAgIHBheWxvYWRCaW5hcnkuZW1pdF91MzJ2KGltcGxpY2l0X2Nv
bXBpbGF0aW9uX2hpbnRzX2NvdW50KTsKKworICAgICAgLy8gRGVmYXVsdHMgdG8gdGhlIGNvbXBp
bGVyJ3MgY2hvaWNlIGlmIG5vIGJldHRlciBoaW50IHdhcyBnaXZlbiAoMHgwMCkuCisgICAgICBs
ZXQgZGVmYXVsdEhpbnRCeXRlID0ga0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5RGVmYXVsdCB8Cisg
ICAgICAgICAgKGtDb21waWxhdGlvbkhpbnRUaWVyRGVmYXVsdCA8PCAyKSB8CisgICAgICAgICAg
KGtDb21waWxhdGlvbkhpbnRUaWVyRGVmYXVsdCA8PCA0KTsKKworICAgICAgLy8gRW1pdCBoaW50
IGJ5dGUgZm9yIGV2ZXJ5IGZ1bmN0aW9uIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUuCisgICAgICBm
b3IgKGxldCBpID0gMDsgaSA8IGltcGxpY2l0X2NvbXBpbGF0aW9uX2hpbnRzX2NvdW50OyBpKysp
IHsKKyAgICAgICAgbGV0IGluZGV4ID0gd2FzbS5udW1faW1wb3J0ZWRfZnVuY3MgKyBpOworICAg
ICAgICB2YXIgaGludEJ5dGU7CisgICAgICAgIGlmIChpbmRleCBpbiB3YXNtLmNvbXBpbGF0aW9u
X2hpbnRzKSB7CisgICAgICAgICAgbGV0IGhpbnQgPSB3YXNtLmNvbXBpbGF0aW9uX2hpbnRzW2lu
ZGV4XTsKKyAgICAgICAgICBoaW50Qnl0ZSA9CisgICAgICAgICAgICAgIGhpbnQuc3RyYXRlZ3kg
fCAoaGludC5iYXNlbGluZVRpZXIgPDwgMikgfCAoaGludC50b3BUaWVyIDw8IDQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgIGhpbnRCeXRlID0gZGVmYXVsdEhpbnRCeXRlOworICAgICAg
ICB9CisgICAgICAgIHBheWxvYWRCaW5hcnkuZW1pdF91OChoaW50Qnl0ZSk7CisgICAgICB9CisK
KyAgICAgIC8vIEZpbmFsaXplIGFzIGN1c3RvbSBzZWN0aW9uLgorICAgICAgbGV0IG5hbWUgPSAn
Y29tcGlsYXRpb25IaW50cyc7CisgICAgICBsZXQgYnl0ZXMgPSB0aGlzLmNyZWF0ZUN1c3RvbVNl
Y3Rpb24obmFtZSwgcGF5bG9hZEJpbmFyeS50cnVuY19idWZmZXIoKSk7CisgICAgICBiaW5hcnku
ZW1pdF9ieXRlcyhieXRlcyk7CisgICAgfQorCisgICAgLy8gQWRkIGZ1bmN0aW9uIGJvZGllcy4K
KyAgICBpZiAod2FzbS5mdW5jdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgLy8gZW1pdCBmdW5j
dGlvbiBib2RpZXMKKyAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGNvZGUgQCAnICsg
YmluYXJ5Lmxlbmd0aCk7CisgICAgICBsZXQgc2VjdGlvbl9sZW5ndGggPSAwOworICAgICAgYmlu
YXJ5LmVtaXRfc2VjdGlvbihrQ29kZVNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKKyAgICAgICAg
c2VjdGlvbi5lbWl0X3UzMnYod2FzbS5mdW5jdGlvbnMubGVuZ3RoKTsKKyAgICAgICAgbGV0IGhl
YWRlciA9IG5ldyBCaW5hcnk7CisgICAgICAgIGZvciAobGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlv
bnMpIHsKKyAgICAgICAgICBoZWFkZXIucmVzZXQoKTsKKyAgICAgICAgICAvLyBGdW5jdGlvbiBi
b2R5IGxlbmd0aCB3aWxsIGJlIHBhdGNoZWQgbGF0ZXIuCisgICAgICAgICAgbGV0IGxvY2FsX2Rl
Y2xzID0gZnVuYy5sb2NhbHMgfHwgW107CisgICAgICAgICAgaGVhZGVyLmVtaXRfdTMydihsb2Nh
bF9kZWNscy5sZW5ndGgpOworICAgICAgICAgIGZvciAobGV0IGRlY2wgb2YgbG9jYWxfZGVjbHMp
IHsKKyAgICAgICAgICAgIGhlYWRlci5lbWl0X3UzMnYoZGVjbC5jb3VudCk7CisgICAgICAgICAg
ICBoZWFkZXIuZW1pdF90eXBlKGRlY2wudHlwZSk7CisgICAgICAgICAgfQorICAgICAgICAgIHNl
Y3Rpb24uZW1pdF91MzJ2KGhlYWRlci5sZW5ndGggKyBmdW5jLmJvZHkubGVuZ3RoKTsKKyAgICAg
ICAgICBzZWN0aW9uLmVtaXRfYnl0ZXMoaGVhZGVyLnRydW5jX2J1ZmZlcigpKTsKKyAgICAgICAg
ICAvLyBTZXQgdG8gc2VjdGlvbiBvZmZzZXQgZm9yIG5vdywgd2lsbCB1cGRhdGUuCisgICAgICAg
ICAgZnVuYy5ib2R5X29mZnNldCA9IHNlY3Rpb24ubGVuZ3RoOworICAgICAgICAgIHNlY3Rpb24u
ZW1pdF9ieXRlcyhmdW5jLmJvZHkpOworICAgICAgICB9CisgICAgICAgIHNlY3Rpb25fbGVuZ3Ro
ID0gc2VjdGlvbi5sZW5ndGg7CisgICAgICB9KTsKKyAgICAgIGZvciAobGV0IGZ1bmMgb2Ygd2Fz
bS5mdW5jdGlvbnMpIHsKKyAgICAgICAgZnVuYy5ib2R5X29mZnNldCArPSBiaW5hcnkubGVuZ3Ro
IC0gc2VjdGlvbl9sZW5ndGg7CisgICAgICB9CisgICAgfQorCisgICAgLy8gQWRkIGRhdGEgc2Vn
bWVudHMuCisgICAgaWYgKHdhc20uZGF0YV9zZWdtZW50cy5sZW5ndGggPiAwKSB7CisgICAgICBp
ZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBkYXRhIHNlZ21lbnRzIEAgJyArIGJpbmFyeS5sZW5n
dGgpOworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrRGF0YVNlY3Rpb25Db2RlLCBzZWN0aW9u
ID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS5kYXRhX3NlZ21lbnRzLmxlbmd0
aCk7CisgICAgICAgIGZvciAobGV0IHNlZyBvZiB3YXNtLmRhdGFfc2VnbWVudHMpIHsKKyAgICAg
ICAgICBpZiAoc2VnLmlzX2FjdGl2ZSkgeworICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDAp
OyAgLy8gbGluZWFyIG1lbW9yeSBpbmRleCAwIC8gZmxhZ3MKKyAgICAgICAgICAgIGlmIChzZWcu
aXNfZ2xvYmFsKSB7CisgICAgICAgICAgICAgIC8vIGluaXRpYWxpemVyIGlzIGEgZ2xvYmFsIHZh
cmlhYmxlCisgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChrRXhwckdsb2JhbEdldCk7Cisg
ICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHNlZy5hZGRyKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgIC8vIGluaXRpYWxpemVyIGlzIGEgY29uc3RhbnQKKyAgICAg
ICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHBySTMyQ29uc3QpOworICAgICAgICAgICAgICBz
ZWN0aW9uLmVtaXRfdTMydihzZWcuYWRkcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz
ZWN0aW9uLmVtaXRfdTgoa0V4cHJFbmQpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBzZWN0aW9uLmVtaXRfdTgoa1Bhc3NpdmUpOyAgLy8gZmxhZ3MKKyAgICAgICAgICB9CisgICAg
ICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoc2VnLmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICBzZWN0
aW9uLmVtaXRfYnl0ZXMoc2VnLmRhdGEpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisK
KyAgICAvLyBBZGQgYW55IGV4cGxpY2l0bHkgYWRkZWQgc2VjdGlvbnMKKyAgICBmb3IgKGxldCBl
eHAgb2Ygd2FzbS5leHBsaWNpdCkgeworICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcg
ZXhwbGljaXQgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CisgICAgICBiaW5hcnkuZW1pdF9ieXRlcyhl
eHApOworICAgIH0KKworICAgIC8vIEFkZCBuYW1lcy4KKyAgICBsZXQgbnVtX2Z1bmN0aW9uX25h
bWVzID0gMDsKKyAgICBsZXQgbnVtX2Z1bmN0aW9uc193aXRoX2xvY2FsX25hbWVzID0gMDsKKyAg
ICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CisgICAgICBpZiAoZnVuYy5uYW1l
ICE9PSB1bmRlZmluZWQpICsrbnVtX2Z1bmN0aW9uX25hbWVzOworICAgICAgaWYgKGZ1bmMubnVt
TG9jYWxOYW1lcygpID4gMCkgKytudW1fZnVuY3Rpb25zX3dpdGhfbG9jYWxfbmFtZXM7CisgICAg
fQorICAgIGlmIChudW1fZnVuY3Rpb25fbmFtZXMgPiAwIHx8IG51bV9mdW5jdGlvbnNfd2l0aF9s
b2NhbF9uYW1lcyA+IDAgfHwKKyAgICAgICAgd2FzbS5uYW1lICE9PSB1bmRlZmluZWQpIHsKKyAg
ICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIG5hbWVzIEAgJyArIGJpbmFyeS5sZW5ndGgp
OworICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrVW5rbm93blNlY3Rpb25Db2RlLCBzZWN0aW9u
ID0+IHsKKyAgICAgICAgc2VjdGlvbi5lbWl0X3N0cmluZygnbmFtZScpOworICAgICAgICAvLyBF
bWl0IG1vZHVsZSBuYW1lLgorICAgICAgICBpZiAod2FzbS5uYW1lICE9PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICBzZWN0aW9uLmVtaXRfc2VjdGlvbihrTW9kdWxlTmFtZUNvZGUsIG5hbWVfc2Vj
dGlvbiA9PiB7CisgICAgICAgICAgICBuYW1lX3NlY3Rpb24uZW1pdF9zdHJpbmcod2FzbS5uYW1l
KTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICAvLyBFbWl0IGZ1bmN0aW9uIG5h
bWVzLgorICAgICAgICBpZiAobnVtX2Z1bmN0aW9uX25hbWVzID4gMCkgeworICAgICAgICAgIHNl
Y3Rpb24uZW1pdF9zZWN0aW9uKGtGdW5jdGlvbk5hbWVzQ29kZSwgbmFtZV9zZWN0aW9uID0+IHsK
KyAgICAgICAgICAgIG5hbWVfc2VjdGlvbi5lbWl0X3UzMnYobnVtX2Z1bmN0aW9uX25hbWVzKTsK
KyAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsKKyAgICAgICAg
ICAgICAgaWYgKGZ1bmMubmFtZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgbmFtZV9zZWN0aW9uLmVtaXRfdTMydihmdW5jLmluZGV4KTsKKyAgICAgICAgICAgICAgbmFt
ZV9zZWN0aW9uLmVtaXRfc3RyaW5nKGZ1bmMubmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRW1pdCBsb2NhbCBuYW1lcy4KKyAgICAgICAg
aWYgKG51bV9mdW5jdGlvbnNfd2l0aF9sb2NhbF9uYW1lcyA+IDApIHsKKyAgICAgICAgICBzZWN0
aW9uLmVtaXRfc2VjdGlvbihrTG9jYWxOYW1lc0NvZGUsIG5hbWVfc2VjdGlvbiA9PiB7CisgICAg
ICAgICAgICBuYW1lX3NlY3Rpb24uZW1pdF91MzJ2KG51bV9mdW5jdGlvbnNfd2l0aF9sb2NhbF9u
YW1lcyk7CisgICAgICAgICAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7Cisg
ICAgICAgICAgICAgIGlmIChmdW5jLm51bUxvY2FsTmFtZXMoKSA9PSAwKSBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfdTMydihmdW5jLmluZGV4KTsKKyAgICAgICAg
ICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfdTMydihmdW5jLm51bUxvY2FsTmFtZXMoKSk7CisgICAg
ICAgICAgICAgIGxldCBuYW1lX2luZGV4ID0gMDsKKyAgICAgICAgICAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBmdW5jLmxvY2FsX25hbWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAg
aWYgKHR5cGVvZiBmdW5jLmxvY2FsX25hbWVzW2ldID09ICdzdHJpbmcnKSB7CisgICAgICAgICAg
ICAgICAgICBuYW1lX3NlY3Rpb24uZW1pdF91MzJ2KG5hbWVfaW5kZXgpOworICAgICAgICAgICAg
ICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfc3RyaW5nKGZ1bmMubG9jYWxfbmFtZXNbaV0pOworICAg
ICAgICAgICAgICAgICAgbmFtZV9pbmRleCsrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICBuYW1lX2luZGV4ICs9IGZ1bmMubG9jYWxfbmFtZXNbaV07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
fSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBiaW5hcnkudHJ1
bmNfYnVmZmVyKCk7CisgIH0KKworICB0b0FycmF5KGRlYnVnID0gZmFsc2UpIHsKKyAgICByZXR1
cm4gQXJyYXkuZnJvbSh0aGlzLnRvQnVmZmVyKGRlYnVnKSk7CisgIH0KKworICBpbnN0YW50aWF0
ZShmZmkpIHsKKyAgICBsZXQgbW9kdWxlID0gdGhpcy50b01vZHVsZSgpOworICAgIGxldCBpbnN0
YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIGZmaSk7CisgICAgcmV0dXJu
IGluc3RhbmNlOworICB9CisKKyAgYXN5bmNJbnN0YW50aWF0ZShmZmkpIHsKKyAgICByZXR1cm4g
V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUodGhpcy50b0J1ZmZlcigpLCBmZmkpCisgICAgICAgIC50
aGVuKCh7bW9kdWxlLCBpbnN0YW5jZX0pID0+IGluc3RhbmNlKTsKKyAgfQorCisgIHRvTW9kdWxl
KGRlYnVnID0gZmFsc2UpIHsKKyAgICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSh0aGlz
LnRvQnVmZmVyKGRlYnVnKSk7CisgIH0KK30KKworZnVuY3Rpb24gd2FzbVNpZ25lZExlYih2YWws
IG1heF9sZW4gPSA1KSB7CisgIGxldCByZXMgPSBbXTsKKyAgZm9yIChsZXQgaSA9IDA7IGkgPCBt
YXhfbGVuOyArK2kpIHsKKyAgICBsZXQgdiA9IHZhbCAmIDB4N2Y7CisgICAgLy8gSWYge3Z9IHNp
Z24tZXh0ZW5kZWQgZnJvbSA3IHRvIDMyIGJpdHMgaXMgZXF1YWwgdG8gdmFsLCB3ZSBhcmUgZG9u
ZS4KKyAgICBpZiAoKCh2IDw8IDI1KSA+PiAyNSkgPT0gdmFsKSB7CisgICAgICByZXMucHVzaCh2
KTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIHJlcy5wdXNoKHYgfCAweDgwKTsKKyAg
ICB2YWwgPSB2YWwgPj4gNzsKKyAgfQorICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAnTGViIHZh
bHVlIDwnICsgdmFsICsgJz4gZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAnICsgbWF4X2xlbik7
Cit9CisKK2Z1bmN0aW9uIHdhc21VbnNpZ25lZExlYih2YWwsIG1heF9sZW4gPSA1KSB7CisgIGxl
dCByZXMgPSBbXTsKKyAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhfbGVuOyArK2kpIHsKKyAgICBs
ZXQgdiA9IHZhbCAmIDB4N2Y7CisgICAgaWYgKHYgPT0gdmFsKSB7CisgICAgICByZXMucHVzaCh2
KTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIHJlcy5wdXNoKHYgfCAweDgwKTsKKyAg
ICB2YWwgPSB2YWwgPj4+IDc7CisgIH0KKyAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgJ0xlYiB2
YWx1ZSA8JyArIHZhbCArICc+IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJyArIG1heF9sZW4p
OworfQorCitmdW5jdGlvbiB3YXNtSTMyQ29uc3QodmFsKSB7CisgIHJldHVybiBba0V4cHJJMzJD
b25zdCwgLi4ud2FzbVNpZ25lZExlYih2YWwsIDUpXTsKK30KKworLy8gTm90ZTogU2luY2Uge3Zh
bH0gaXMgYSBKUyBudW1iZXIsIHRoZSBnZW5lcmF0ZWQgY29uc3RhbnQgb25seSBoYXMgNTMgYml0
cyBvZgorLy8gcHJlY2lzaW9uLgorZnVuY3Rpb24gd2FzbUk2NENvbnN0KHZhbCkgeworICByZXR1
cm4gW2tFeHBySTY0Q29uc3QsIC4uLndhc21TaWduZWRMZWIodmFsLCAxMCldOworfQorCitmdW5j
dGlvbiB3YXNtRjMyQ29uc3QoZikgeworICAvLyBXcml0ZSBpbiBsaXR0bGUtZW5kaWFuIG9yZGVy
IGF0IG9mZnNldCAwLgorICBkYXRhX3ZpZXcuc2V0RmxvYXQzMigwLCBmLCB0cnVlKTsKKyAgcmV0
dXJuIFsKKyAgICBrRXhwckYzMkNvbnN0LCBieXRlX3ZpZXdbMF0sIGJ5dGVfdmlld1sxXSwgYnl0
ZV92aWV3WzJdLCBieXRlX3ZpZXdbM10KKyAgXTsKK30KKworZnVuY3Rpb24gd2FzbUY2NENvbnN0
KGYpIHsKKyAgLy8gV3JpdGUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciBhdCBvZmZzZXQgMC4KKyAg
ZGF0YV92aWV3LnNldEZsb2F0NjQoMCwgZiwgdHJ1ZSk7CisgIHJldHVybiBbCisgICAga0V4cHJG
NjRDb25zdCwgYnl0ZV92aWV3WzBdLCBieXRlX3ZpZXdbMV0sIGJ5dGVfdmlld1syXSwgYnl0ZV92
aWV3WzNdLAorICAgIGJ5dGVfdmlld1s0XSwgYnl0ZV92aWV3WzVdLCBieXRlX3ZpZXdbNl0sIGJ5
dGVfdmlld1s3XQorICBdOworfQorCitmdW5jdGlvbiB3YXNtUzEyOENvbnN0KGYpIHsKKyAgLy8g
V3JpdGUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciBhdCBvZmZzZXQgMC4KKyAgcmV0dXJuIFtrU2lt
ZFByZWZpeCwga0V4cHJTMTI4Q29uc3QsIC4uLmZdOworfQorCitmdW5jdGlvbiBnZXRPcGNvZGVO
YW1lKG9wY29kZSkgeworICByZXR1cm4gZ2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVzPy5bb3Bj
b2RlXSA/PyAndW5rbm93bic7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vd2FzbS5qc29u
IGIvSlNUZXN0cy93YXNtL3dhc20uanNvbgppbmRleCA0ZjhkZDllM2QyMTM0MzUwMDAwMDZlMjQx
NDZiMDE5NGM5YWM4OGYxLi45ZDIyNWU0ZTgyMjQ5NjYwNDQ0ZmY0MWFlYmJhMjdjNjRjNzZlZWYx
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vd2FzbS5qc29uCisrKyBiL0pTVGVzdHMvd2FzbS93
YXNtLmpzb24KQEAgLTIzLDM0ICsyMywzOCBAQAogICAgICJibG9ja190eXBlIjogWyJpMzIiLCAi
aTY0IiwgImYzMiIsICJmNjQiLCAidm9pZCIsICJleHRlcm5yZWYiLCAiZnVuY3JlZiJdLAogICAg
ICJyZWZfdHlwZSI6IFsiZnVuY3JlZiIsICJleHRlcm5yZWYiLCAidHlwZV9pZHgiXSwKICAgICAi
ZXh0ZXJuYWxfa2luZCI6IHsKLSAgICAgICAgIkZ1bmN0aW9uIjogeyAidHlwZSI6ICJ1aW50OCIs
ICJ2YWx1ZSI6IDAgfSwKLSAgICAgICAgIlRhYmxlIjogICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2
YWx1ZSI6IDEgfSwKLSAgICAgICAgIk1lbW9yeSI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1
ZSI6IDIgfSwKLSAgICAgICAgIkdsb2JhbCI6ICAgeyAidHlwZSI6ICJ1aW50OCIsICJ2YWx1ZSI6
IDMgfQorICAgICAgICAiRnVuY3Rpb24iOiAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjog
MCB9LAorICAgICAgICAiVGFibGUiOiAgICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjog
MSB9LAorICAgICAgICAiTWVtb3J5IjogICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjog
MiB9LAorICAgICAgICAiR2xvYmFsIjogICAgICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjog
MyB9LAorICAgICAgICAiRXhjZXB0aW9uIjogICB7ICJ0eXBlIjogInVpbnQ4IiwgInZhbHVlIjog
NCB9CiAgICAgfSwKICAgICAic2VjdGlvbiIgOiB7Ci0gICAgICAgICJUeXBlIjogICAgIHsgInR5
cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgMSwgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIHNp
Z25hdHVyZSBkZWNsYXJhdGlvbnMiIH0sCi0gICAgICAgICJJbXBvcnQiOiAgIHsgInR5cGUiOiAi
dmFydWludDciLCAidmFsdWUiOiAgMiwgImRlc2NyaXB0aW9uIjogIkltcG9ydCBkZWNsYXJhdGlv
bnMiIH0sCi0gICAgICAgICJGdW5jdGlvbiI6IHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUi
OiAgMywgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKLSAgICAgICAg
IlRhYmxlIjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA0LCAiZGVzY3JpcHRp
b24iOiAiSW5kaXJlY3QgZnVuY3Rpb24gdGFibGUgYW5kIG90aGVyIHRhYmxlcyIgfSwKLSAgICAg
ICAgIk1lbW9yeSI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA1LCAiZGVzY3Jp
cHRpb24iOiAiTWVtb3J5IGF0dHJpYnV0ZXMiIH0sCi0gICAgICAgICJHbG9iYWwiOiAgIHsgInR5
cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNiwgImRlc2NyaXB0aW9uIjogIkdsb2JhbCBkZWNs
YXJhdGlvbnMiIH0sCi0gICAgICAgICJFeHBvcnQiOiAgIHsgInR5cGUiOiAidmFydWludDciLCAi
dmFsdWUiOiAgNywgImRlc2NyaXB0aW9uIjogIkV4cG9ydHMiIH0sCi0gICAgICAgICJTdGFydCI6
ICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0
YXJ0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIiB9LAotICAgICAgICAiRWxlbWVudCI6ICB7ICJ0eXBl
IjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDksICJkZXNjcmlwdGlvbiI6ICJFbGVtZW50cyBzZWN0
aW9uIiB9LAotICAgICAgICAiQ29kZSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVl
IjogMTAsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBib2RpZXMgKGNvZGUpIiB9LAotICAgICAg
ICAiRGF0YSI6ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlw
dGlvbiI6ICJEYXRhIHNlZ21lbnRzIiB9CisgICAgICAgICJUeXBlIjogICAgICB7ICJ0eXBlIjog
InZhcnVpbnQ3IiwgInZhbHVlIjogIDEsICJkZXNjcmlwdGlvbiI6ICJGdW5jdGlvbiBzaWduYXR1
cmUgZGVjbGFyYXRpb25zIiB9LAorICAgICAgICAiSW1wb3J0IjogICAgeyAidHlwZSI6ICJ2YXJ1
aW50NyIsICJ2YWx1ZSI6ICAyLCAiZGVzY3JpcHRpb24iOiAiSW1wb3J0IGRlY2xhcmF0aW9ucyIg
fSwKKyAgICAgICAgIkZ1bmN0aW9uIjogIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAg
MywgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIgfSwKKyAgICAgICAgIlRh
YmxlIjogICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAgNCwgImRlc2NyaXB0aW9u
IjogIkluZGlyZWN0IGZ1bmN0aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMiIH0sCisgICAgICAg
ICJNZW1vcnkiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogIDUsICJkZXNjcmlw
dGlvbiI6ICJNZW1vcnkgYXR0cmlidXRlcyIgfSwKKyAgICAgICAgIkV4Y2VwdGlvbiI6IHsgInR5
cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMywgImRlc2NyaXB0aW9uIjogIkV4Y2VwdGlvbiBk
ZWNsYXJhdGlvbnMiIH0sCisgICAgICAgICJHbG9iYWwiOiAgICB7ICJ0eXBlIjogInZhcnVpbnQ3
IiwgInZhbHVlIjogIDYsICJkZXNjcmlwdGlvbiI6ICJHbG9iYWwgZGVjbGFyYXRpb25zIiB9LAor
ICAgICAgICAiRXhwb3J0IjogICAgeyAidHlwZSI6ICJ2YXJ1aW50NyIsICJ2YWx1ZSI6ICA3LCAi
ZGVzY3JpcHRpb24iOiAiRXhwb3J0cyIgfSwKKyAgICAgICAgIlN0YXJ0IjogICAgIHsgInR5cGUi
OiAidmFydWludDciLCAidmFsdWUiOiAgOCwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IGZ1bmN0aW9u
IGRlY2xhcmF0aW9uIiB9LAorICAgICAgICAiRWxlbWVudCI6ICAgeyAidHlwZSI6ICJ2YXJ1aW50
NyIsICJ2YWx1ZSI6ICA5LCAiZGVzY3JpcHRpb24iOiAiRWxlbWVudHMgc2VjdGlvbiIgfSwKKyAg
ICAgICAgIkNvZGUiOiAgICAgIHsgInR5cGUiOiAidmFydWludDciLCAidmFsdWUiOiAxMCwgImRl
c2NyaXB0aW9uIjogIkZ1bmN0aW9uIGJvZGllcyAoY29kZSkiIH0sCisgICAgICAgICJEYXRhIjog
ICAgICB7ICJ0eXBlIjogInZhcnVpbnQ3IiwgInZhbHVlIjogMTEsICJkZXNjcmlwdGlvbiI6ICJE
YXRhIHNlZ21lbnRzIiB9LAorICAgICAgICAiRGF0YUNvdW50IjogeyAidHlwZSI6ICJ2YXJ1aW50
NyIsICJ2YWx1ZSI6IDEyLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIGRhdGEgc2VnbWVudHMi
IH0KICAgICB9LAogICAgICJvcGNvZGUiOiB7CiAgICAgICAgICJ1bnJlYWNoYWJsZSI6ICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMCwgInJldHVybiI6IFtd
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidHJhcCBpbW1lZGlhdGVseSIgfSwKKyAgICAg
ICAgIm5vcCI6ICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZh
bHVlIjogICAxLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw
YXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJubyBv
cGVyYXRpb24iIH0sCiAgICAgICAgICJibG9jayI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnki
OiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMiwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAg
ICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6ICJibG9ja190eXBlIn1d
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiYmVnaW4gYSBzZXF1ZW5jZSBvZiBleHByZXNzaW9ucywgeWllbGRpbmcg
MCBvciAxIHZhbHVlcyIgfSwKICAgICAgICAgImxvb3AiOiAgICAgICAgICAgICAgICB7ICJjYXRl
Z29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogICAzLCAicmV0dXJuIjogWyJjb250cm9sIl0s
ICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInNpZyIsICJ0eXBlIjogImJsb2NrX3R5
cGUifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJiZWdpbiBhIGJsb2NrIHdoaWNoIGNhbiBhbHNvIGZvcm0gY29u
dHJvbCBmbG93IGxvb3BzIiB9LAogICAgICAgICAiaWYiOiAgICAgICAgICAgICAgICAgIHsgImNh
dGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgIDQsICJyZXR1cm4iOiBbImNvbnRyb2wi
XSwgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYm9vbCJdLCAgICAgICAgICAg
ICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAic2lnIiwgInR5cGUiOiAiYmxvY2tf
dHlwZSJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogImJlZ2luIGlmIGV4cHJlc3Npb24iIH0sCiAgICAgICAgICJl
bHNlIjogICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6
ICAgNSwgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1l
dGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gZWxz
ZSBleHByZXNzaW9uIG9mIGlmIiB9LAotICAgICAgICAic2VsZWN0IjogICAgICAgICAgICAgIHsg
ImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjcsICJyZXR1cm4iOiBbInByZXYi
XSwgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55IiwgInByZXYiLCAi
Ym9vbCJdLCAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogInNlbGVjdCBvbmUgb2YgdHdvIHZhbHVlcyBiYXNlZCBv
biBjb25kaXRpb24iIH0sCi0gICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0IjogICAgeyAiY2F0ZWdv
cnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6IFsicHJldiJdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAicHJldiIsICJib29sIl0s
ICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfdHlwZXNfY291bnQiLCAidHlw
ZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhcmdldCB0eXBlcyB2
ZWN0b3IifSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyJuYW1lIjogInRhcmdldF90eXBlcyIsICAgICAgICJ0eXBlIjogInZh
bHVlX3R5cGUqIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJ0YXJnZXQgdHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1bHQgb2Ygc2VsZWN0IGlu
c3RydWN0aW9uIn1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogInRoZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1dCB3aXRoIHRoZSBhbm5v
dGF0aW9uIGZvciByZXN1bHQgdHlwZXMiIH0sCisgICAgICAgICJ0cnkiOiAgICAgICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgNiwgInJldHVybiI6IFsi
Y29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJzaWciLCAidHlwZSI6
ICJibG9ja190eXBlIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYmVnaW4gdHJ5IGV4cHJlc3Npb24iIH0sCisg
ICAgICAgICJjYXRjaCI6ICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAg
ICJ2YWx1ZSI6ICAgNywgInJldHVybiI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAg
ICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRl
IjogW3sibmFtZSI6ICJleG4iLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
YmVnaW4gY2F0Y2ggZXhwcmVzc2lvbiBvZiB0cnkiIH0sCisgICAgICAgICJ0aHJvdyI6ICAgICAg
ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgOCwgInJldHVy
biI6IFsiY29udHJvbCJdLCAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJleG4iLCAi
dHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhyb3cgZXhjZXB0aW9uIiB9LAor
ICAgICAgICAicmV0aHJvdyI6ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAg
ICAidmFsdWUiOiAgIDksICJyZXR1cm4iOiBbImNvbnRyb2wiXSwgICAgICAgICAgICAgICAgICAg
ICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0
ZSI6IFt7Im5hbWUiOiAicmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
InJldGhyb3cgdGhlIGV4Y2VwdGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayIgfSwKICAgICAg
ICAgImJyIjogICAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZh
bHVlIjogIDEyLCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw
YXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBb
eyJuYW1lIjogInJlbGF0aXZlX2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJicmVh
ayB0aGF0IHRhcmdldHMgYW4gb3V0ZXIgbmVzdGVkIGJsb2NrIiB9LAogICAgICAgICAiYnJfaWYi
OiAgICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMTMs
ICJyZXR1cm4iOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6
IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAi
cmVsYXRpdmVfZGVwdGgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImNvbmRpdGlvbmFsIGJy
ZWFrIHRoYXQgdGFyZ2V0cyBhbiBvdXRlciBuZXN0ZWQgYmxvY2siIH0sCiAgICAgICAgICJicl90
YWJsZSI6ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAx
NCwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVy
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6
ICJ0YXJnZXRfY291bnQiLCAgICJ0eXBlIjogInZhcnVpbnQzMiIsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVu
dHJpZXMgaW4gdGhlIHRhcmdldF90YWJsZSJ9LApAQCAtNTgsOCArNjIsMTMgQEAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJu
YW1lIjogImRlZmF1bHRfdGFyZ2V0IiwgInR5cGUiOiAidmFydWludDMyIiwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhbiBvdXRl
ciBibG9jayBvciBsb29wIHRvIHdoaWNoIHRvIGJyZWFrIGluIHRoZSBkZWZhdWx0IGNhc2UifV0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiYnJhbmNoIHRhYmxlIGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3QiIH0sCiAgICAgICAgICJyZXR1
cm4iOiAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAx
NSwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVy
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAicmV0dXJuIHplcm8g
b3Igb25lIHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbiIgfSwKKyAgICAgICAgImRlbGVnYXRlIjog
ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwgICAgInZhbHVlIjogIDI0LCAicmV0
dXJuIjogWyJjb250cm9sIl0sICAgICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbXSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInJlbGF0
aXZlX2RlcHRoIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJkZWxlZ2F0ZSB0byBhIHBhcmVu
dCB0cnkgYmxvY2siIH0sCisgICAgICAgICJjYXRjaF9hbGwiOiAgICAgICAgICAgeyAiY2F0ZWdv
cnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyNSwgInJldHVybiI6IFsiY29udHJvbCJdLCAg
ICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiY2F0Y2ggZXhjZXB0aW9ucyByZWdhcmRsZXNzIG9mIHRhZyIgfSwK
ICAgICAgICAgImRyb3AiOiAgICAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJjb250cm9sIiwg
ICAgInZhbHVlIjogIDI2LCAicmV0dXJuIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJwYXJhbWV0ZXIiOiBbImFueSJdLCAgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlh
dGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJpZ25vcmUgdmFsdWUiIH0sCi0gICAgICAgICJub3AiOiAgICAgICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAgMSwgInJldHVybiI6IFtdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAibm8gb3BlcmF0aW9uIiB9LAorICAgICAgICAic2VsZWN0Ijog
ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImNvbnRyb2wiLCAgICAidmFsdWUiOiAgMjcsICJy
ZXR1cm4iOiBbInByZXYiXSwgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFsi
YW55IiwgInByZXYiLCAiYm9vbCJdLCAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInNlbGVjdCBvbmUgb2YgdHdv
IHZhbHVlcyBiYXNlZCBvbiBjb25kaXRpb24iIH0sCisgICAgICAgICJhbm5vdGF0ZWRfc2VsZWN0
IjogICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAyOCwgInJldHVybiI6
IFsicHJldiJdLCAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiLCAi
cHJldiIsICJib29sIl0sICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ0YXJnZXRfdHlw
ZXNfY291bnQiLCAidHlwZSI6ICJ2YXJ1aW50MzIiLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibnVtYmVyIG9mIGVudHJpZXMgaW4gdGhl
IHRhcmdldCB0eXBlcyB2ZWN0b3IifSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogInRhcmdldF90eXBlcyIsICAg
ICAgICJ0eXBlIjogInZhbHVlX3R5cGUqIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0YXJnZXQgdHlwZXMgdGhhdCBpbmRpY2F0ZSByZXN1
bHQgb2Ygc2VsZWN0IGluc3RydWN0aW9uIn1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBzYW1lIGFzIGp1c3Qgc2VsZWN0IGJ1
dCB3aXRoIHRoZSBhbm5vdGF0aW9uIGZvciByZXN1bHQgdHlwZXMiIH0sCiAgICAgICAgICJlbmQi
OiAgICAgICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiY29udHJvbCIsICAgICJ2YWx1ZSI6ICAx
MSwgInJldHVybiI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVy
IjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZW5kIGEgYmxvY2ss
IGxvb3AsIG9yIGlmIiB9LAogICAgICAgICAiaTMyLmNvbnN0IjogICAgICAgICAgIHsgImNhdGVn
b3J5IjogInNwZWNpYWwiLCAgICAidmFsdWUiOiAgNjUsICJyZXR1cm4iOiBbImkzMiJdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidmFsdWUiLCAgICAgICAgICAidHlwZSI6
ICJ2YXJpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogImEgY29uc3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTMyIiB9
LAogICAgICAgICAiaTY0LmNvbnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwi
LCAgICAidmFsdWUiOiAgNjYsICJyZXR1cm4iOiBbImk2NCJdLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAidmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2YXJpbnQ2NCJ9XSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogImEgY29uc3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTY0IiB9LAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441877</attachid>
            <date>2021-10-20 06:51:08 -0700</date>
            <delta_ts>2021-10-20 07:49:34 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-229681-20211020085107.patch</filename>
            <type>text/plain</type>
            <size>1149</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
NDhjMTE1NWFiMGM3MGNhNDg4NmU2NWY1MjExMjAyNGZlYmZkOTZmLi44OTRmNzYyNzYzY2E0N2Zj
ZWE1YWQ0YjU2YzUwNDNlMjYzMmJmZTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMS0xMC0yMCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGdu
b21lLm9yZz4KKworICAgICAgICBTdXBwcmVzcyBhIC1XcmV0dXJuLXR5cGUgd2FybmluZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5NjgxCisgICAg
ICAgIDxyZGFyOi8vODE2MDMzODc+CisKKyAgICAgICAgVW5yZXZpZXdlZC4KKworICAgICAgICAq
IHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNtOjp0eXBlVG9TdHJpbmcpOgor
CiAyMDIxLTEwLTE5ICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkZHJlc3MgcG9zdC1sYW5kaW5nIGZlZWRiYWNrIHRvIHdhc20gZXhjZXB0aW9ucwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IDQ5ZGY5NTE1NDdjMDhhOTgx
MTA1MDdlZWVjMzExNjhlZjdjNWE4YzMuLjhjY2UzOTVkODkyYzVlMzlkNzNlMzIzNDE4NjQzNzVl
YjQ3YTcxMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTkw
LDYgKzkwLDggQEAgaW5saW5lIEpTU3RyaW5nKiB0eXBlVG9TdHJpbmcoVk0mIHZtLCBUeXBlS2lu
ZCB0eXBlKQogICAgIH0KIAogI3VuZGVmIFRZUEVfQ0FTRQorCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAogaW5saW5lIGJvb2wgaXNTdWJ0eXBlKFR5cGUgc3ViLCBUeXBl
IHBhcmVudCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>